diff -Nru nodejs-mozilla-12.18.1/AUTHORS nodejs-mozilla-12.22.12/AUTHORS --- nodejs-mozilla-12.18.1/AUTHORS 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/AUTHORS 2022-04-05 07:16:59.000000000 +0000 @@ -808,7 +808,7 @@ Liang-Chi Hsieh Timothy Gu Fábio Santos -Myles Borins +Myles Borins Jonas Dohse Коренберг Марк Caleb Boyd @@ -888,9 +888,9 @@ Vitor Cortez Michael Theriot Peter Geiss -Richard Lau +Richard Lau José Moreira -Tom Atkinson +Tom Atkinson Glen Arrowsmith Jeff Harris Alexander Makarenko @@ -1035,7 +1035,7 @@ Vitaly Tomilov Ratikesh Misra Alex Perkins -Beth Griggs +Beth Griggs Joe Esposito Erin Spiceland Ravindra Barthwal @@ -1429,7 +1429,6 @@ John F. Mercer Dejon "DJ" Gill Ahmad Nassri -Tom Atkinson Tobias Nießen Joseph Gentle Arunesh Chandra @@ -1983,7 +1982,7 @@ Fran Herrero Francois KY suman-mitra -Matheus Marchini +Mary Marchini neta Whien Chiahao Lin @@ -2872,7 +2871,7 @@ Alexandre Ferrando Loris Zinsou Jizu Sun -AshCripps +Ash Cripps garygsc Patrick Housley Artem Maksimov @@ -3021,5 +3020,124 @@ Sergey Zelenov Eric Bickle Joe Pea +ExE Boss <3889017+ExE-Boss@users.noreply.github.com> +Mateusz Krawczuk +Jonathan MERCIER +Ujjwal Sharma +Jichan +Hassaan Pasha +Eric Dobbertin +Victor +Ling Samuel +Syohei YOSHIDA +Nitin Kumar +Christian Niederer +Sk Sajidul Kadir +Bartlomiej Brzozowski +Saajan +Yash Ladha +Xu Meng +Alex R +Hachimi Aa (Sfeir) +Daniel Estiven Rico Posada +Andrés M. Gómez +Nick Kreeger +Moni <40552237+NotMoni@users.noreply.github.com> +Dave Vandyke +Agustin Daguerre +Jesus Hernandez +龙腾道 +John Kleinschmidt +Cecchi MacNaughton +Reşat SABIQ +daemon1024 +Qinhui Chen +William Bonawentura +Vadzim Zieńka +David Daza <03dazal@gmail.com> +雨夜带刀 +karan singh virdi +William Armiros <54150514+willarmiros@users.noreply.github.com> +Matt Kulukundis +Edward Elric +Prosper Opara +Eileen +Ishaan Jain <37652866+ishaanjain1898@users.noreply.github.com> +Christopher Beeson +thecodrr +Chris Holland +Ranjan Purbey +白一梓 +John Leidegren +Karol Walasek +osher +szTheory +Jonathan Buhacoff +Paolo Insogna +Richard Townsend +Dan Fabulich +Deep310 <55121371+Deep310@users.noreply.github.com> +Dominykas Blyžė +Wenning Zhang <1527841714@qq.com> +shisama +Kirill Shatskiy +Ben Bucksch +Eli Schwartz +Maciej Kacper Jagiełło +Tom Nagle +rickyes +sapics +Sagar Jadhav +Dennis Ameling +Todd Short +Lucas Pardue +Pragyan Das +Shakil-Shahadat +wenningplus +WilliamConnatser <43946230+WilliamConnatser@users.noreply.github.com> +Benjamin Kaduk +Tatsuhiro Tsujikawa +Nathan Blair +patr0nus +Alec Davidson +falguniraina <48027052+falguniraina@users.noreply.github.com> +Rodion Abdurakhimov +Anentropic +Saleem +Julien Poissonnier +zombieleet +Nikola Glavina +Johannes Schöpp +Francisco Ryan Tolmasky I +Ye-hyoung Kang +Jucke +Pekka Nikander +iandrc +Tim Perry +Corey Butler +aetheryx +Robey Pointer +Priyank Singh +Gabriele Greco +Renato Mariscal +Matthew McEachen +Voltra +davkor +Carlos Lopez +Hilla Shahrabani +Frank Lemanschik +Justice Almanzar +Maksim Sinik +João Lucas Lucchetta +Danny Guo +Turner Jabbour +Igor Mikhalev +DeeDeeG +KuthorX +Pooja D.P +Shigma <33423008+Shigma@users.noreply.github.com> +atian25@qq.com +Amila Welihinda +schamberg97 <50446906+schamberg97@users.noreply.github.com> # Generated by tools/update-authors.js diff -Nru nodejs-mozilla-12.18.1/benchmark/async_hooks/async-resource-vs-destroy.js nodejs-mozilla-12.22.12/benchmark/async_hooks/async-resource-vs-destroy.js --- nodejs-mozilla-12.18.1/benchmark/async_hooks/async-resource-vs-destroy.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/async_hooks/async-resource-vs-destroy.js 2022-04-05 07:16:59.000000000 +0000 @@ -138,6 +138,7 @@ setCLS(Math.random()); await sleep(10); await read(__filename); + if (res.destroyed) return; res.setHeader('content-type', 'application/json'); res.end(JSON.stringify({ cls: getCLS() })); }; @@ -148,6 +149,7 @@ setCLS(Math.random()); setTimeout(() => { readFile(__filename, () => { + if (res.destroyed) return; res.setHeader('content-type', 'application/json'); res.end(JSON.stringify({ cls: getCLS() })); }); diff -Nru nodejs-mozilla-12.18.1/benchmark/async_hooks/promises.js nodejs-mozilla-12.22.12/benchmark/async_hooks/promises.js --- nodejs-mozilla-12.18.1/benchmark/async_hooks/promises.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/async_hooks/promises.js 2022-04-05 07:16:59.000000000 +0000 @@ -10,10 +10,11 @@ ] }); +const err = new Error('foobar'); async function run(n) { for (let i = 0; i < n; i++) { await new Promise((resolve) => resolve()) - .then(() => { throw new Error('foobar'); }) + .then(() => { throw err; }) .catch((e) => e); } } diff -Nru nodejs-mozilla-12.18.1/benchmark/es/spread-assign.js nodejs-mozilla-12.22.12/benchmark/es/spread-assign.js --- nodejs-mozilla-12.18.1/benchmark/es/spread-assign.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/es/spread-assign.js 2022-04-05 07:16:59.000000000 +0000 @@ -15,7 +15,7 @@ for (let n = 0; n < count; n++) src[`p${n}`] = n; - let obj; // eslint-disable-line no-unused-vars + let obj; switch (method) { case '_extend': @@ -33,7 +33,7 @@ case 'spread': bench.start(); for (let i = 0; i < n; i++) - obj = { ...src }; + obj = { ...src }; // eslint-disable-line no-unused-vars bench.end(n); break; default: diff -Nru nodejs-mozilla-12.18.1/benchmark/es/spread-bench.js nodejs-mozilla-12.22.12/benchmark/es/spread-bench.js --- nodejs-mozilla-12.18.1/benchmark/es/spread-bench.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/es/spread-bench.js 2022-04-05 07:16:59.000000000 +0000 @@ -16,11 +16,10 @@ return function test(...args) { assert.strictEqual(count, args.length); }; - } else { - return function test() { - assert.strictEqual(count, arguments.length); - }; } + return function test() { + assert.strictEqual(count, arguments.length); + }; } function main({ n, context, count, rest, method }) { diff -Nru nodejs-mozilla-12.18.1/benchmark/esm/cjs-parse.js nodejs-mozilla-12.22.12/benchmark/esm/cjs-parse.js --- nodejs-mozilla-12.18.1/benchmark/esm/cjs-parse.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/esm/cjs-parse.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,40 @@ +'use strict'; +const fs = require('fs'); +const path = require('path'); +const common = require('../common.js'); +const { strictEqual } = require('assert'); + +const tmpdir = require('../../test/common/tmpdir'); +const benchmarkDirectory = + path.resolve(tmpdir.path, 'benchmark-esm-parse'); + +const bench = common.createBenchmark(main, { + n: [1e2] +}); + +async function main({ n }) { + tmpdir.refresh(); + + fs.mkdirSync(benchmarkDirectory); + + let sampleSource = 'try {\n'; + for (let i = 0; i < 1000; i++) { + sampleSource += 'sample.js(() => file = /test/);\n'; + } + sampleSource += '} catch {}\nexports.p = 5;\n'; + + for (let i = 0; i < n; i++) { + const sampleFile = path.join(benchmarkDirectory, `sample${i}.js`); + fs.writeFileSync(sampleFile, sampleSource); + } + + bench.start(); + for (let i = 0; i < n; i++) { + const sampleFile = path.join(benchmarkDirectory, `sample${i}.js`); + const m = await import('file:' + sampleFile); + strictEqual(m.p, 5); + } + bench.end(n); + + tmpdir.refresh(); +} diff -Nru nodejs-mozilla-12.18.1/benchmark/events/ee-emit.js nodejs-mozilla-12.22.12/benchmark/events/ee-emit.js --- nodejs-mozilla-12.18.1/benchmark/events/ee-emit.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/events/ee-emit.js 2022-04-05 07:16:59.000000000 +0000 @@ -10,6 +10,7 @@ function main({ n, argc, listeners }) { const ee = new EventEmitter(); + ee.setMaxListeners(listeners + 1); for (let k = 0; k < listeners; k += 1) ee.on('dummy', () => {}); diff -Nru nodejs-mozilla-12.18.1/benchmark/events/ee-listeners.js nodejs-mozilla-12.22.12/benchmark/events/ee-listeners.js --- nodejs-mozilla-12.18.1/benchmark/events/ee-listeners.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/events/ee-listeners.js 2022-04-05 07:16:59.000000000 +0000 @@ -2,20 +2,34 @@ const common = require('../common.js'); const EventEmitter = require('events').EventEmitter; -const bench = common.createBenchmark(main, { n: [5e6] }); +const bench = common.createBenchmark(main, { + n: [5e6], + listeners: [5, 50], + raw: ['true', 'false'] +}); -function main({ n }) { +function main({ n, listeners, raw }) { const ee = new EventEmitter(); + ee.setMaxListeners(listeners * 2 + 1); - for (let k = 0; k < 5; k += 1) { + for (let k = 0; k < listeners; k += 1) { ee.on('dummy0', () => {}); - ee.on('dummy1', () => {}); + ee.once('dummy1', () => {}); } - bench.start(); - for (let i = 0; i < n; i += 1) { - const dummy = (i % 2 === 0) ? 'dummy0' : 'dummy1'; - ee.listeners(dummy); + if (raw === 'true') { + bench.start(); + for (let i = 0; i < n; i += 1) { + const dummy = (i % 2 === 0) ? 'dummy0' : 'dummy1'; + ee.rawListeners(dummy); + } + bench.end(n); + } else { + bench.start(); + for (let i = 0; i < n; i += 1) { + const dummy = (i % 2 === 0) ? 'dummy0' : 'dummy1'; + ee.listeners(dummy); + } + bench.end(n); } - bench.end(n); } diff -Nru nodejs-mozilla-12.18.1/benchmark/events/ee-listeners-many.js nodejs-mozilla-12.22.12/benchmark/events/ee-listeners-many.js --- nodejs-mozilla-12.18.1/benchmark/events/ee-listeners-many.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/events/ee-listeners-many.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -'use strict'; -const common = require('../common.js'); -const EventEmitter = require('events').EventEmitter; - -const bench = common.createBenchmark(main, { n: [5e6] }); - -function main({ n }) { - const ee = new EventEmitter(); - ee.setMaxListeners(101); - - for (let k = 0; k < 50; k += 1) { - ee.on('dummy0', () => {}); - ee.on('dummy1', () => {}); - } - - bench.start(); - for (let i = 0; i < n; i += 1) { - const dummy = (i % 2 === 0) ? 'dummy0' : 'dummy1'; - ee.listeners(dummy); - } - bench.end(n); -} diff -Nru nodejs-mozilla-12.18.1/benchmark/http/http_server_for_chunky_client.js nodejs-mozilla-12.22.12/benchmark/http/http_server_for_chunky_client.js --- nodejs-mozilla-12.18.1/benchmark/http/http_server_for_chunky_client.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/http/http_server_for_chunky_client.js 2022-04-05 07:16:59.000000000 +0000 @@ -10,7 +10,9 @@ tmpdir.refresh(); -const server = http.createServer((req, res) => { +// For Node.js versions below v13.3.0 this benchmark will require +// the flag --max-http-header-size 64000 in order to work properly +const server = http.createServer({ maxHeaderSize: 64000 }, (req, res) => { const headers = { 'content-type': 'text/plain', 'content-length': '2' @@ -28,7 +30,11 @@ `${__dirname}/_chunky_http_client.js`, process.argv.slice(2) ); -child.on('message', common.sendResult); +child.on('message', (data) => { + if (data.type === 'report') { + common.sendResult(data); + } +}); child.on('close', (code) => { server.close(); assert.strictEqual(code, 0); diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/ref/index.js nodejs-mozilla-12.22.12/benchmark/napi/ref/index.js --- nodejs-mozilla-12.18.1/benchmark/napi/ref/index.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/ref/index.js 2022-04-05 07:16:59.000000000 +0000 @@ -10,8 +10,10 @@ function main({ n }) { addon.count = 0; bench.start(); - while (addon.count < n) { - callNewWeak(); - } - bench.end(n); + new Promise((resolve) => { + (function oneIteration() { + callNewWeak(); + setImmediate(() => ((addon.count < n) ? oneIteration() : resolve())); + })(); + }).then(() => bench.end(n)); } diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/type-tag/binding.c nodejs-mozilla-12.22.12/benchmark/napi/type-tag/binding.c --- nodejs-mozilla-12.18.1/benchmark/napi/type-tag/binding.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/type-tag/binding.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,84 @@ +#include +#define NAPI_EXPERIMENTAL +#include + +#define NAPI_CALL(call) \ + do { \ + napi_status status = call; \ + assert(status == napi_ok && #call " failed"); \ + } while (0); + +#define EXPORT_FUNC(env, exports, name, func) \ + do { \ + napi_value js_func; \ + NAPI_CALL(napi_create_function((env), \ + (name), \ + NAPI_AUTO_LENGTH, \ + (func), \ + NULL, \ + &js_func)); \ + NAPI_CALL(napi_set_named_property((env), \ + (exports), \ + (name), \ + js_func)); \ + } while (0); + +static const napi_type_tag tag = { + 0xe7ecbcd5954842f6, 0x9e75161c9bf27282 +}; + +static napi_value TagObject(napi_env env, napi_callback_info info) { + size_t argc = 4; + napi_value argv[4]; + uint32_t n; + uint32_t index; + napi_handle_scope scope; + + NAPI_CALL(napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); + NAPI_CALL(napi_get_value_uint32(env, argv[0], &n)); + NAPI_CALL(napi_open_handle_scope(env, &scope)); + napi_value objects[n]; + for (index = 0; index < n; index++) { + NAPI_CALL(napi_create_object(env, &objects[index])); + } + + // Time the object tag creation. + NAPI_CALL(napi_call_function(env, argv[1], argv[2], 0, NULL, NULL)); + for (index = 0; index < n; index++) { + NAPI_CALL(napi_type_tag_object(env, objects[index], &tag)); + } + NAPI_CALL(napi_call_function(env, argv[1], argv[3], 1, &argv[0], NULL)); + + NAPI_CALL(napi_close_handle_scope(env, scope)); + return NULL; +} + +static napi_value CheckObjectTag(napi_env env, napi_callback_info info) { + size_t argc = 4; + napi_value argv[4]; + uint32_t n; + uint32_t index; + bool is_of_type; + + NAPI_CALL(napi_get_cb_info(env, info, &argc, argv, NULL, NULL)); + NAPI_CALL(napi_get_value_uint32(env, argv[0], &n)); + napi_value object; + NAPI_CALL(napi_create_object(env, &object)); + NAPI_CALL(napi_type_tag_object(env, object, &tag)); + + // Time the object tag checking. + NAPI_CALL(napi_call_function(env, argv[1], argv[2], 0, NULL, NULL)); + for (index = 0; index < n; index++) { + NAPI_CALL(napi_check_object_type_tag(env, object, &tag, &is_of_type)); + assert(is_of_type && " type mismatch"); + } + NAPI_CALL(napi_call_function(env, argv[1], argv[3], 1, &argv[0], NULL)); + + return NULL; +} + +NAPI_MODULE_INIT() { + EXPORT_FUNC(env, exports, "tagObject", TagObject); + EXPORT_FUNC(env, exports, "checkObjectTag", CheckObjectTag); + return exports; +} diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/type-tag/binding.gyp nodejs-mozilla-12.22.12/benchmark/napi/type-tag/binding.gyp --- nodejs-mozilla-12.18.1/benchmark/napi/type-tag/binding.gyp 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/type-tag/binding.gyp 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,8 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': [ 'binding.c' ] + } + ] +} diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/type-tag/check-object-tag.js nodejs-mozilla-12.22.12/benchmark/napi/type-tag/check-object-tag.js --- nodejs-mozilla-12.18.1/benchmark/napi/type-tag/check-object-tag.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/type-tag/check-object-tag.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,18 @@ +'use strict'; +const common = require('../../common.js'); + +let binding; +try { + binding = require(`./build/${common.buildType}/binding`); +} catch { + console.error(`${__filename}: Binding failed to load`); + process.exit(0); +} + +const bench = common.createBenchmark(main, { + n: [1e5, 1e6, 1e7], +}); + +function main({ n }) { + binding.checkObjectTag(n, bench, bench.start, bench.end); +} diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/type-tag/.gitignore nodejs-mozilla-12.22.12/benchmark/napi/type-tag/.gitignore --- nodejs-mozilla-12.18.1/benchmark/napi/type-tag/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/type-tag/.gitignore 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1 @@ +build/ diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/type-tag/index.js nodejs-mozilla-12.22.12/benchmark/napi/type-tag/index.js --- nodejs-mozilla-12.18.1/benchmark/napi/type-tag/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/type-tag/index.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,18 @@ +'use strict'; +const common = require('../../common.js'); + +let binding; +try { + binding = require(`./build/${common.buildType}/binding`); +} catch { + console.error(`${__filename}: Binding failed to load`); + process.exit(0); +} + +const bench = common.createBenchmark(main, { + n: [1e3, 1e4, 1e5], +}); + +function main({ n }) { + binding.tagObject(n, bench, bench.start, bench.end); +} diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/type-tag-check/binding.gyp nodejs-mozilla-12.22.12/benchmark/napi/type-tag-check/binding.gyp --- nodejs-mozilla-12.18.1/benchmark/napi/type-tag-check/binding.gyp 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/type-tag-check/binding.gyp 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,8 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': [ '../type-tag/binding.c' ] + } + ] +} diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/type-tag-check/.gitignore nodejs-mozilla-12.22.12/benchmark/napi/type-tag-check/.gitignore --- nodejs-mozilla-12.18.1/benchmark/napi/type-tag-check/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/type-tag-check/.gitignore 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1 @@ +build/ diff -Nru nodejs-mozilla-12.18.1/benchmark/napi/type-tag-check/index.js nodejs-mozilla-12.22.12/benchmark/napi/type-tag-check/index.js --- nodejs-mozilla-12.18.1/benchmark/napi/type-tag-check/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/napi/type-tag-check/index.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,18 @@ +'use strict'; +const common = require('../../common.js'); + +let binding; +try { + binding = require(`./build/${common.buildType}/binding`); +} catch { + console.error(`${__filename}: Binding failed to load`); + process.exit(0); +} + +const bench = common.createBenchmark(main, { + n: [1e5, 1e6, 1e7], +}); + +function main({ n }) { + binding.checkObjectTag(n, bench, bench.start, bench.end); +} diff -Nru nodejs-mozilla-12.18.1/benchmark/perf_hooks/bench-eventlooputil.js nodejs-mozilla-12.22.12/benchmark/perf_hooks/bench-eventlooputil.js --- nodejs-mozilla-12.18.1/benchmark/perf_hooks/bench-eventlooputil.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/perf_hooks/bench-eventlooputil.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,64 @@ +'use strict'; + +const common = require('../common.js'); +const assert = require('assert').ok; +const { performance } = require('perf_hooks'); +const { nodeTiming, eventLoopUtilization } = performance; + +const bench = common.createBenchmark(main, { + n: [1e6], + method: [ + 'idleTime', + 'ELU_simple', + 'ELU_passed', + ], +}); + +function main({ method, n }) { + switch (method) { + case 'idleTime': + benchIdleTime(n); + break; + case 'ELU_simple': + benchELUSimple(n); + break; + case 'ELU_passed': + benchELUPassed(n); + break; + default: + throw new Error(`Unsupported method ${method}`); + } +} + +function benchIdleTime(n) { + bench.start(); + for (let i = 0; i < n; i++) + nodeTiming.idleTime; + bench.end(n); +} + +function benchELUSimple(n) { + // Need to put this in setImmediate or will always return 0. + setImmediate(() => { + const elu = eventLoopUtilization(); + assert(elu.active + elu.idle > 0); + + bench.start(); + for (let i = 0; i < n; i++) + eventLoopUtilization(); + bench.end(n); + }); +} + +function benchELUPassed(n) { + // Need to put this in setImmediate or will always return 0. + setImmediate(() => { + let elu = eventLoopUtilization(); + assert(elu.active + elu.idle > 0); + + bench.start(); + for (let i = 0; i < n; i++) + elu = eventLoopUtilization(elu); + bench.end(n); + }); +} diff -Nru nodejs-mozilla-12.18.1/benchmark/policy/policy-startup.js nodejs-mozilla-12.22.12/benchmark/policy/policy-startup.js --- nodejs-mozilla-12.18.1/benchmark/policy/policy-startup.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/policy/policy-startup.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,51 @@ +// Tests the impact on eager operations required for policies affecting +// general startup, does not test lazy operations +'use strict'; +const common = require('../common.js'); + +const configs = { + n: [1024] +}; + +const options = { + flags: ['--expose-internals'] +}; + +const bench = common.createBenchmark(main, configs, options); + +function main(conf) { + const hash = (str, algo) => { + const hash = require('crypto').createHash(algo); + return hash.update(str).digest('base64'); + }; + const resources = Object.fromEntries( + // Simulate graph of 1k modules + Array.from({ length: 1024 }, (_, i) => { + return [`./_${i}`, { + integrity: `sha256-${hash(`// ./_${i}`, 'sha256')}`, + dependencies: Object.fromEntries(Array.from({ + // Average 3 deps per 4 modules + length: Math.floor((i % 4) / 2) + }, (_, ii) => { + return [`_${ii}`, `./_${i - ii}`]; + })), + }]; + }) + ); + const json = JSON.parse(JSON.stringify({ resources }), (_, o) => { + if (o && typeof o === 'object') { + Reflect.setPrototypeOf(o, null); + Object.freeze(o); + } + return o; + }); + const { Manifest } = require('internal/policy/manifest'); + + bench.start(); + + for (let i = 0; i < conf.n; i++) { + new Manifest(json, 'file://benchmark/policy-relative'); + } + + bench.end(conf.n); +} diff -Nru nodejs-mozilla-12.18.1/benchmark/process/resourceUsage.js nodejs-mozilla-12.22.12/benchmark/process/resourceUsage.js --- nodejs-mozilla-12.18.1/benchmark/process/resourceUsage.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/process/resourceUsage.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,14 @@ +'use strict'; + +const common = require('../common.js'); +const bench = common.createBenchmark(main, { + n: [1e5] +}); + +function main({ n }) { + bench.start(); + for (let i = 0; i < n; i++) { + process.resourceUsage(); + } + bench.end(n); +} diff -Nru nodejs-mozilla-12.18.1/benchmark/querystring/querystring-stringify.js nodejs-mozilla-12.22.12/benchmark/querystring/querystring-stringify.js --- nodejs-mozilla-12.18.1/benchmark/querystring/querystring-stringify.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/querystring/querystring-stringify.js 2022-04-05 07:16:59.000000000 +0000 @@ -3,7 +3,7 @@ const querystring = require('querystring'); const bench = common.createBenchmark(main, { - type: ['noencode', 'encodemany', 'encodelast', 'array'], + type: ['noencode', 'encodemany', 'encodelast', 'array', 'multiprimitives'], n: [1e6], }); @@ -28,7 +28,12 @@ foo: [], baz: ['bar'], xyzzy: ['bar', 'quux', 'thud'] - } + }, + multiprimitives: { + foo: false, + bar: -13.37, + baz: '', + }, }; const input = inputs[type]; diff -Nru nodejs-mozilla-12.18.1/benchmark/README.md nodejs-mozilla-12.22.12/benchmark/README.md --- nodejs-mozilla-12.18.1/benchmark/README.md 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/README.md 2022-04-05 07:16:59.000000000 +0000 @@ -32,6 +32,7 @@ | module | Benchmarks for the `module` subsystem. | | net | Benchmarks for the `net` subsystem. | | path | Benchmarks for the `path` subsystem. | +| perf_hooks | Benchmarks for the `perf_hooks` subsystem. | | process | Benchmarks for the `process` subsystem. | | querystring | Benchmarks for the `querystring` subsystem. | | streams | Benchmarks for the `streams` subsystem. | diff -Nru nodejs-mozilla-12.18.1/benchmark/scatter.js nodejs-mozilla-12.22.12/benchmark/scatter.js --- nodejs-mozilla-12.18.1/benchmark/scatter.js 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/scatter.js 2022-04-05 07:16:59.000000000 +0000 @@ -30,9 +30,8 @@ function csvEncodeValue(value) { if (typeof value === 'number') { return value.toString(); - } else { - return `"${value.replace(/"/g, '""')}"`; } + return `"${value.replace(/"/g, '""')}"`; } (function recursive(i) { diff -Nru nodejs-mozilla-12.18.1/benchmark/worker/bench-eventlooputil.js nodejs-mozilla-12.22.12/benchmark/worker/bench-eventlooputil.js --- nodejs-mozilla-12.18.1/benchmark/worker/bench-eventlooputil.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/benchmark/worker/bench-eventlooputil.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,61 @@ +'use strict'; + +const common = require('../common.js'); +const { Worker, parentPort } = require('worker_threads'); + +if (process.argv[2] === 'idle cats') { + return parentPort.once('message', () => {}); +} + +const bench = common.createBenchmark(main, { + n: [1e6], + method: [ + 'ELU_simple', + 'ELU_passed', + ], +}); + +function main({ method, n }) { + switch (method) { + case 'ELU_simple': + benchELUSimple(n); + break; + case 'ELU_passed': + benchELUPassed(n); + break; + default: + throw new Error(`Unsupported method ${method}`); + } +} + +function benchELUSimple(n) { + const worker = new Worker(__filename, { argv: ['idle cats'] }); + + spinUntilIdle(worker, () => { + bench.start(); + for (let i = 0; i < n; i++) + worker.performance.eventLoopUtilization(); + bench.end(n); + worker.postMessage('bye'); + }); +} + +function benchELUPassed(n) { + const worker = new Worker(__filename, { argv: ['idle cats'] }); + + spinUntilIdle(worker, () => { + let elu = worker.performance.eventLoopUtilization(); + bench.start(); + for (let i = 0; i < n; i++) + elu = worker.performance.eventLoopUtilization(elu); + bench.end(n); + worker.postMessage('bye'); + }); +} + +function spinUntilIdle(w, cb) { + const t = w.performance.eventLoopUtilization(); + if (t.idle + t.active > 0) + return process.nextTick(cb); + setTimeout(() => spinUntilIdle(w, cb), 1); +} diff -Nru nodejs-mozilla-12.18.1/BUILDING.md nodejs-mozilla-12.22.12/BUILDING.md --- nodejs-mozilla-12.18.1/BUILDING.md 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/BUILDING.md 2022-04-05 07:16:59.000000000 +0000 @@ -225,7 +225,7 @@ The Node.js project uses Python as part of its build process and has historically only been Python 2 compatible. -Python 2 will reach its _end-of-life_ at the end of 2019 at which point the +Python 2 will reach its _End-of-Life_ at the end of 2019 at which point the interpreter will cease receiving updates. See for more information. @@ -423,41 +423,51 @@ This will build Node.js first (if necessary) and then use it to build the docs: -```console -$ make doc +```bash +make doc ``` If you have an existing Node.js build, you can build just the docs with: -```console -$ NODE=/path/to/node make doc-only +```bash +NODE=/path/to/node make doc-only ``` -To read the documentation: +To read the man page: -```console -$ man doc/node.1 +```bash +man doc/node.1 ``` -If you prefer to read the documentation in a browser, -run the following after `make doc` is finished: +If you prefer to read the full documentation in a browser, run the following. -```console -$ make docopen +```bash +make docserve ``` -This will open a browser with the documentation. +This will spin up a static file server and provide a URL to where you may browse +the documentation locally. + +If you're comfortable viewing the documentation using the program your operating +system has associated with the default web browser, run the following. + +```bash +make docopen +``` + +This will open a file URL to a one-page version of all the browsable HTML +documents using the default browser. To test if Node.js was built correctly: -```console -$ ./node -e "console.log('Hello from Node.js ' + process.version)" +```bash +./node -e "console.log('Hello from Node.js ' + process.version)" ``` To install this version of Node.js into a system directory: -```console -$ [sudo] make install +```bash +[sudo] make install ``` #### Building a debug build @@ -691,7 +701,7 @@ ### Build with a specific ICU You can find other ICU releases at -[the ICU homepage](http://icu-project.org/download). +[the ICU homepage](http://site.icu-project.org/download). Download the file named something like `icu4c-**##.#**-src.tgz` (or `.zip`). @@ -722,7 +732,7 @@ #### Windows First unpack latest ICU to `deps/icu` -[icu4c-**##.#**-src.tgz](http://icu-project.org/download) (or `.zip`) +[icu4c-**##.#**-src.tgz](http://site.icu-project.org/download) (or `.zip`) as `deps/icu` (You'll have: `deps/icu/source/...`) ```console diff -Nru nodejs-mozilla-12.18.1/CHANGELOG.md nodejs-mozilla-12.22.12/CHANGELOG.md --- nodejs-mozilla-12.18.1/CHANGELOG.md 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/CHANGELOG.md 2022-04-05 07:16:59.000000000 +0000 @@ -28,7 +28,29 @@ -12.18.1
+12.22.12
+12.22.11
+12.22.10
+12.22.9
+12.22.8
+12.22.7
+12.22.6
+12.22.5
+12.22.4
+12.22.3
+12.22.2
+12.22.1
+12.22.0
+12.21.0
+12.20.2
+12.20.1
+12.20.0
+12.19.1
+12.19.0
+12.18.4
+12.18.3
+12.18.2
+12.18.1
12.18.0
12.17.0
12.16.3
@@ -328,7 +350,7 @@ ## 2015-09-08, Version 4.0.0 (Stable), @rvagg -Moved to doc/changelogs/CHANGELOG_V6.md#6.0.0. ## 2015-09-02, Version 3.3.0, @rvagg diff -Nru nodejs-mozilla-12.18.1/common.gypi nodejs-mozilla-12.22.12/common.gypi --- nodejs-mozilla-12.18.1/common.gypi 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/common.gypi 2022-04-05 07:16:59.000000000 +0000 @@ -34,7 +34,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.38', + 'v8_embedder_string': '-node.57', ##### V8 defaults for Node.js ##### @@ -55,6 +55,9 @@ # Enable disassembler for `--print-code` v8 options 'v8_enable_disassembler': 1, + # Sets -dOBJECT_PRINT. + 'v8_enable_object_print%': 1, + # https://github.com/nodejs/node/pull/22920/files#r222779926 'v8_enable_handle_zapping': 0, @@ -497,6 +500,14 @@ ['target_arch=="x64"', { 'xcode_settings': {'ARCHS': ['x86_64']}, }], + ['target_arch=="arm64"', { + 'xcode_settings': { + 'ARCHS': ['arm64'], + 'OTHER_LDFLAGS!': [ + '-Wl,-no_pie', + ], + }, + }], ['clang==1', { 'xcode_settings': { 'GCC_VERSION': 'com.apple.compilers.llvm.clang.1_0', diff -Nru nodejs-mozilla-12.18.1/configure.py nodejs-mozilla-12.22.12/configure.py --- nodejs-mozilla-12.18.1/configure.py 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/configure.py 2022-04-05 07:16:59.000000000 +0000 @@ -164,6 +164,11 @@ "e.g. /root/x/y.js will be referenced via require('root/x/y'). " "Can be used multiple times") +parser.add_option('--openssl-default-cipher-list', + action='store', + dest='openssl_default_cipher_list', + help='Use the specified cipher list as the default cipher list') + parser.add_option("--openssl-no-asm", action="store_true", dest="openssl_no_asm", @@ -376,6 +381,11 @@ dest='v8_options', help='v8 options to pass, see `node --v8-options` for examples.') +parser.add_option('--with-ossfuzz', + action='store_true', + dest='ossfuzz', + help='Enables building of fuzzers. This command should be run in an OSS-Fuzz Docker image.') + parser.add_option('--with-arm-float-abi', action='store', dest='arm_float_abi', @@ -635,6 +645,20 @@ default=False, help='compile V8 with debug checks and runtime debugging features enabled') +parser.add_option('--v8-lite-mode', + action='store_true', + dest='v8_lite_mode', + default=False, + help='compile V8 in lite mode for constrained environments (lowers V8 '+ + 'memory footprint, but also implies no just-in-time compilation ' + + 'support, thus much slower execution)') + +parser.add_option('--v8-enable-object-print', + action='store_true', + dest='v8_enable_object_print', + default=True, + help='compile V8 with auxiliar functions for native debuggers') + parser.add_option('--node-builtin-modules-path', action='store', dest='node_builtin_modules_path', @@ -781,7 +805,7 @@ def get_llvm_version(cc): return get_version_helper( - cc, r"(^(?:FreeBSD )?clang version|based on LLVM) ([0-9]+\.[0-9]+)") + cc, r"(^(?:.+ )?clang version|based on LLVM) ([0-9]+\.[0-9]+)") def get_xcode_version(cc): return get_version_helper( @@ -988,12 +1012,14 @@ o['variables']['arm_fpu'] = options.arm_fpu or arm_fpu -def configure_mips(o): +def configure_mips(o, target_arch): can_use_fpu_instructions = (options.mips_float_abi != 'soft') o['variables']['v8_can_use_fpu_instructions'] = b(can_use_fpu_instructions) o['variables']['v8_use_mips_abi_hardfloat'] = b(can_use_fpu_instructions) o['variables']['mips_arch_variant'] = options.mips_arch_variant o['variables']['mips_fpu_mode'] = options.mips_fpu_mode + host_byteorder = 'little' if target_arch in ('mipsel', 'mips64el') else 'big' + o['variables']['v8_host_byteorder'] = host_byteorder def gcc_version_ge(version_checked): @@ -1049,7 +1075,7 @@ if target_arch == 'arm': configure_arm(o) elif target_arch in ('mips', 'mipsel', 'mips64el'): - configure_mips(o) + configure_mips(o, target_arch) if flavor == 'aix': o['variables']['node_target_type'] = 'static_library' @@ -1231,10 +1257,12 @@ def configure_v8(o): + o['variables']['v8_enable_lite_mode'] = 1 if options.v8_lite_mode else 0 o['variables']['v8_enable_gdbjit'] = 1 if options.gdb else 0 o['variables']['v8_no_strict_aliasing'] = 1 # Work around compiler bugs. o['variables']['v8_optimized_debug'] = 0 if options.v8_non_optimized_debug else 1 o['variables']['dcheck_always_on'] = 1 if options.v8_with_dchecks else 0 + o['variables']['v8_enable_object_print'] = 1 if options.v8_enable_object_print else 0 o['variables']['v8_random_seed'] = 0 # Use a random seed for hash tables. o['variables']['v8_promise_internal_field_count'] = 1 # Add internal field to promises for async hooks. o['variables']['v8_use_siphash'] = 0 if options.without_siphash else 1 @@ -1277,6 +1305,8 @@ without_ssl_error('--openssl-no-asm') if options.openssl_fips: without_ssl_error('--openssl-fips') + if options.openssl_default_cipher_list: + without_ssl_error('--openssl-default-cipher-list') return if options.use_openssl_ca_store: @@ -1286,6 +1316,9 @@ variables['node_without_node_options'] = b(options.without_node_options) if options.without_node_options: o['defines'] += ['NODE_WITHOUT_NODE_OPTIONS'] + if options.openssl_default_cipher_list: + variables['openssl_default_cipher_list'] = \ + options.openssl_default_cipher_list if not options.shared_openssl and not options.openssl_no_asm: is_x86 = 'x64' in variables['target_arch'] or 'ia32' in variables['target_arch'] @@ -1690,6 +1723,9 @@ configure_static(output) configure_inspector(output) +# Forward OSS-Fuzz settings +output['variables']['ossfuzz'] = b(options.ossfuzz) + # variables should be a root level element, # move everything else to target_defaults variables = output['variables'] @@ -1744,6 +1780,10 @@ if options.use_ninja: config['BUILD_WITH'] = 'ninja' +# On Windows there is another find.exe in C:\Windows\System32 +if sys.platform == 'win32': + config['FIND'] = '/usr/bin/find' + config_lines = ['='.join((k,v)) for k,v in config.items()] # Add a blank string to get a blank line at the end. config_lines += [''] diff -Nru nodejs-mozilla-12.18.1/debian/changelog nodejs-mozilla-12.22.12/debian/changelog --- nodejs-mozilla-12.18.1/debian/changelog 2020-06-21 22:43:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/changelog 2022-07-22 16:58:21.000000000 +0000 @@ -1,8 +1,15 @@ -nodejs-mozilla (12.18.1-0ubuntu0.20.04.1~ppa4) focal; urgency=medium +nodejs-mozilla (12.22.12-0ubuntu0.20.04.1) focal; urgency=medium + + * New upstream release: 12.22.12 (now required to build Firefox 104, + see https://bugzilla.mozilla.org/show_bug.cgi?id=1762571) + + -- Olivier Tilloy Fri, 22 Jul 2022 18:58:21 +0200 + +nodejs-mozilla (12.18.1-0ubuntu0.20.04.1) focal; urgency=medium * New upstream release: 12.18.1 - -- Olivier Tilloy Mon, 22 Jun 2020 00:43:36 +0200 + -- Olivier Tilloy Thu, 25 Jun 2020 18:39:44 +0200 nodejs-mozilla (12.16.1-0ubuntu0.19.10.1) eoan; urgency=medium diff -Nru nodejs-mozilla-12.18.1/debian/compat nodejs-mozilla-12.22.12/debian/compat --- nodejs-mozilla-12.18.1/debian/compat 2018-10-28 11:56:55.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/compat 2022-07-22 16:58:21.000000000 +0000 @@ -1 +1 @@ -9 +10 diff -Nru nodejs-mozilla-12.18.1/debian/control nodejs-mozilla-12.22.12/debian/control --- nodejs-mozilla-12.18.1/debian/control 2018-10-28 21:23:48.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/control 2022-07-22 16:58:21.000000000 +0000 @@ -3,7 +3,7 @@ Priority: optional Maintainer: Ubuntu Developers Build-Depends: debhelper, python -Standards-Version: 4.1.2 +Standards-Version: 4.5.1 Homepage: http://nodejs.org/ Vcs-Browser: https://code.launchpad.net/~mozillateam/+git/nodejs-mozilla Vcs-Git: https://git.launchpad.net/~mozillateam/+git/nodejs-mozilla diff -Nru nodejs-mozilla-12.18.1/debian/patches/reduce-linker-memory.patch nodejs-mozilla-12.22.12/debian/patches/reduce-linker-memory.patch --- nodejs-mozilla-12.18.1/debian/patches/reduce-linker-memory.patch 2020-06-21 22:43:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/patches/reduce-linker-memory.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -Description: reduce linker memory in an attempt to make the builds pass on Launchpad -Author: Olivier Tilloy - ---- a/node.gyp -+++ b/node.gyp -@@ -1308,6 +1308,9 @@ - 'Ws2_32.lib', - ], - }], -+ ['(target_arch=="ppc64" or target_arch=="arm" or target_arch=="arm64")', { -+ 'ldflags': [ '-Wl,--no-keep-memory' ], -+ }], - ], - }, # node_mksnapshot - ], # end targets diff -Nru nodejs-mozilla-12.18.1/debian/patches/series nodejs-mozilla-12.22.12/debian/patches/series --- nodejs-mozilla-12.18.1/debian/patches/series 2020-06-21 22:43:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/patches/series 2022-07-22 16:58:21.000000000 +0000 @@ -1,3 +1,6 @@ +test_dns_lookupService_promises.patch test_ci_buildd.patch +ubuntu-nodejs-mozilla-reenable-npm-tests.patch +ubuntu-nodejs-mozilla-failing-test-32bits.patch fix_disable_cctest.patch -reduce-linker-memory.patch +upstream-fix-test-worker-prof.patch diff -Nru nodejs-mozilla-12.18.1/debian/patches/test_ci_buildd.patch nodejs-mozilla-12.22.12/debian/patches/test_ci_buildd.patch --- nodejs-mozilla-12.18.1/debian/patches/test_ci_buildd.patch 2020-06-21 22:43:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/patches/test_ci_buildd.patch 2022-07-22 16:58:21.000000000 +0000 @@ -11,6 +11,7 @@ https://github.com/nodejs/node/issues/3383 * test-fs-watch is flaky, might be related to https://github.com/nodejs/node/issues/4082 * huge timeout value for all platforms, buildd could be busy + * test-npm-install and test-release-npm must fail, debian package dfsg-repacked npm out * ability to override CI_NATIVE_SUITES, CI_JS_SUITES * disable tests failing because DNS is disabled * sequential/test-http2-session-timeout is flaky https://github.com/nodejs/node/issues/20628 @@ -21,7 +22,7 @@ --- a/Makefile +++ b/Makefile -@@ -511,7 +511,7 @@ test-ci-native: | test/addons/.buildstam +@@ -508,7 +508,7 @@ # This target should not use a native compiler at all # Related CI job: node-test-commit-arm-fanned test-ci-js: | clear-stalled @@ -32,16 +33,18 @@ @echo "Clean up any leftover processes, error if found." --- a/test/parallel/parallel.status +++ b/test/parallel/parallel.status -@@ -8,6 +8,39 @@ prefix parallel - # https://github.com/nodejs/node/issues/29802 - test-http2-reset-flood: PASS,FLAKY +@@ -6,6 +6,37 @@ + + [true] # This section applies to all platforms +test-process-config : PASS,FLAKY +test-regress-GH-746 : PASS,FLAKY +test-stdout-close-unref : PASS,FLAKY ++test-npm-install : FAIL ++test-npm-version : FAIL ++test-release-npm : FAIL +# skip tests accessing network +test-dns : SKIP -+test-dns-lookupService-promises : SKIP +test-net-connect-immediate-finish : SKIP +test-net-better-error-messages-port-hostname : SKIP + @@ -65,16 +68,12 @@ +# might fail, see https://github.com/nodejs/node/issues/17909 +test-fs-utimes: PASS,FLAKY + -+# This test consistently fails on i386 and armhf -+[$arch==ia32 || $arch==arm] -+test-worker-stdio: FAIL -+ [$system==win32] - # https://github.com/nodejs/node/issues/32863 - test-child-process-fork-args: PASS,FLAKY -@@ -41,6 +74,10 @@ test-async-hooks-http-parser-destroy: PA - test-crypto-dh-stateless: SKIP - test-crypto-keygen: SKIP + # https://github.com/nodejs/node/issues/20750 + test-http2-client-upload: PASS,FLAKY +@@ -39,6 +70,10 @@ + # https://github.com/nodejs/node/issues/33796 + test-fs-stream-construct: PASS,FLAKY +[$arch==mips64el] +# the debug flag is for hacking v8 internals @@ -83,9 +82,16 @@ [$system==solaris] # Also applies to SmartOS [$system==freebsd] +@@ -71,3 +106,6 @@ + test-tls-env-extra-ca: SKIP + # https://github.com/nodejs/node/pull/34209 + test-dgram-error-message-address: SKIP ++ ++[$arch==mipsel] ++test-inspect-async-hook-setup-at-inspect: SKIP --- a/test/sequential/sequential.status +++ b/test/sequential/sequential.status -@@ -8,6 +8,15 @@ prefix sequential +@@ -8,6 +8,15 @@ # https://github.com/nodejs/node/issues/27611#issuecomment-613100468 test-cpu-prof-dir-worker: PASS, FLAKY @@ -101,17 +107,20 @@ [$system==win32] # https://github.com/nodejs/node/issues/22327 test-http2-large-file: PASS, FLAKY -@@ -32,6 +41,6 @@ test-buffer-creation-regression: SKIP - # https://github.com/nodejs/node/pull/30819 - test-perf-hooks: SKIP - --[$arch==arm] -+[$arch==arm || $arch==arm64] +@@ -35,3 +44,10 @@ + [$arch==arm] # https://github.com/nodejs/node/issues/26401#issuecomment-613095719 test-worker-prof: PASS, FLAKY ++ ++[$arch==mipsel] ++test-inspector-async-hook-setup-at-inspect-brk: SKIP ++test-inspector-async-hook-setup-at-signal: SKIP ++test-inspector-async-stack-traces-set-interval: SKIP ++ ++ --- a/tools/test.py +++ b/tools/test.py -@@ -890,25 +890,7 @@ class Context(object): +@@ -890,25 +890,7 @@ self.node_has_crypto = True def GetVm(self, arch, mode): @@ -140,7 +149,7 @@ return self.timeout * TIMEOUT_SCALEFACTOR[ARCH_GUESS or 'ia32'][mode] --- a/test/common/index.js +++ b/test/common/index.js -@@ -232,27 +232,7 @@ const pwdCommand = isWindows ? +@@ -235,27 +235,7 @@ function platformTimeout(ms) { diff -Nru nodejs-mozilla-12.18.1/debian/patches/test_dns_lookupService_promises.patch nodejs-mozilla-12.22.12/debian/patches/test_dns_lookupService_promises.patch --- nodejs-mozilla-12.18.1/debian/patches/test_dns_lookupService_promises.patch 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/patches/test_dns_lookupService_promises.patch 2022-07-22 16:58:21.000000000 +0000 @@ -0,0 +1,15 @@ +Description: this test assumes /etc/services, work around it +Author: Jérémy Lal +Forwarded: https://github.com/nodejs/node/issues/42164 +Last-Update: 2022-06-26 +--- a/test/parallel/test-dns-lookupService-promises.js ++++ b/test/parallel/test-dns-lookupService-promises.js +@@ -6,7 +6,7 @@ + const dnsPromises = require('dns').promises; + + dnsPromises.lookupService('127.0.0.1', 22).then(common.mustCall((result) => { +- assert.strictEqual(result.service, 'ssh'); ++ assert(['ssh', '22'].includes(result.service)); + assert.strictEqual(typeof result.hostname, 'string'); + assert.notStrictEqual(result.hostname.length, 0); + })); diff -Nru nodejs-mozilla-12.18.1/debian/patches/ubuntu-nodejs-mozilla-failing-test-32bits.patch nodejs-mozilla-12.22.12/debian/patches/ubuntu-nodejs-mozilla-failing-test-32bits.patch --- nodejs-mozilla-12.18.1/debian/patches/ubuntu-nodejs-mozilla-failing-test-32bits.patch 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/patches/ubuntu-nodejs-mozilla-failing-test-32bits.patch 2022-07-22 16:58:21.000000000 +0000 @@ -0,0 +1,16 @@ +Description: Update a test expectation for a test that consistently fails when run on 32bits architectures (i386 and armhf) +Author: Olivier Tilloy + +--- a/test/parallel/parallel.status ++++ b/test/parallel/parallel.status +@@ -34,6 +34,10 @@ test-zlib-failed-init: SKIP + # might fail, see https://github.com/nodejs/node/issues/17909 + test-fs-utimes: PASS,FLAKY + ++# This test consistently fails on i386 and armhf ++[$arch==ia32 || $arch==arm] ++test-worker-stdio: FAIL ++ + [$system==win32] + # https://github.com/nodejs/node/issues/20750 + test-http2-client-upload: PASS,FLAKY diff -Nru nodejs-mozilla-12.18.1/debian/patches/ubuntu-nodejs-mozilla-reenable-npm-tests.patch nodejs-mozilla-12.22.12/debian/patches/ubuntu-nodejs-mozilla-reenable-npm-tests.patch --- nodejs-mozilla-12.18.1/debian/patches/ubuntu-nodejs-mozilla-reenable-npm-tests.patch 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/patches/ubuntu-nodejs-mozilla-reenable-npm-tests.patch 2022-07-22 16:58:21.000000000 +0000 @@ -0,0 +1,15 @@ +Description: Revert test expectations added by a Debian patch, this package doesn't exclude npm +Author: Olivier Tilloy + +--- a/test/parallel/parallel.status ++++ b/test/parallel/parallel.status +@@ -9,9 +9,6 @@ prefix parallel + test-process-config : PASS,FLAKY + test-regress-GH-746 : PASS,FLAKY + test-stdout-close-unref : PASS,FLAKY +-test-npm-install : FAIL +-test-npm-version : FAIL +-test-release-npm : FAIL + # skip tests accessing network + test-dns : SKIP + test-net-connect-immediate-finish : SKIP diff -Nru nodejs-mozilla-12.18.1/debian/patches/upstream-fix-test-worker-prof.patch nodejs-mozilla-12.22.12/debian/patches/upstream-fix-test-worker-prof.patch --- nodejs-mozilla-12.18.1/debian/patches/upstream-fix-test-worker-prof.patch 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/patches/upstream-fix-test-worker-prof.patch 2022-07-22 16:58:21.000000000 +0000 @@ -0,0 +1,93 @@ +From 04fb597996455d0abbe7b12bbc2d2a5ce16fbb3d Mon Sep 17 00:00:00 2001 +From: Rich Trott +Date: Sun, 14 Feb 2021 15:52:54 -0800 +Subject: [PATCH] test: fix flaky test-worker-prof +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Fixes: https://github.com/nodejs/node/issues/26401 +Co-authored-by: Gireesh Punathil + +PR-URL: https://github.com/nodejs/node/pull/37372 +Reviewed-By: Antoine du Hamel +Reviewed-By: Michaël Zasso +Reviewed-By: James M Snell +Reviewed-By: Luigi Pinca +Reviewed-By: Gireesh Punathil +--- + test/sequential/sequential.status | 4 ---- + test/sequential/test-worker-prof.js | 15 ++++++++------- + 2 files changed, 8 insertions(+), 11 deletions(-) + +--- a/test/sequential/sequential.status ++++ b/test/sequential/sequential.status +@@ -24,8 +24,6 @@ + [$system==win32] + # https://github.com/nodejs/node/issues/22327 + test-http2-large-file: PASS, FLAKY +-# https://github.com/nodejs/node/issues/26401 +-test-worker-prof: PASS, FLAKY + + [$system==linux] + +@@ -45,10 +43,6 @@ + # https://github.com/nodejs/node/pull/30819 + test-perf-hooks: SKIP + +-[$arch==arm] +-# https://github.com/nodejs/node/issues/26401#issuecomment-613095719 +-test-worker-prof: PASS, FLAKY +- + [$arch==mipsel] + test-inspector-async-hook-setup-at-inspect-brk: SKIP + test-inspector-async-hook-setup-at-signal: SKIP +--- a/test/sequential/test-worker-prof.js ++++ b/test/sequential/test-worker-prof.js +@@ -23,17 +23,17 @@ + const fs = require('fs'); + const { Worker, parentPort } = require('worker_threads'); + parentPort.on('message', (m) => { +- if (counter++ === 10) ++ if (counter++ === 1024) + process.exit(0); +- parentPort.postMessage( +- fs.readFileSync(m.toString()).slice(0, 1024 * 1024)); ++ parentPort.postMessage( ++ fs.readFileSync(m.toString()).slice(0, 1024 * 1024)); + }); + `; + + const { Worker } = require('worker_threads'); + const w = new Worker(pingpong, { eval: true }); + w.on('message', (m) => { +- w.postMessage(process.execPath); ++ w.postMessage(__filename); + }); + + w.on('exit', common.mustCall(() => { +@@ -46,12 +46,13 @@ + } + process.exit(0); + })); +- w.postMessage(process.execPath); ++ w.postMessage(__filename); + } else { + tmpdir.refresh(); ++ const timeout = common.platformTimeout(30_000); + const spawnResult = spawnSync( + process.execPath, ['--prof', __filename, 'child'], +- { cwd: tmpdir.path, encoding: 'utf8', timeout: 30_000 }); ++ { cwd: tmpdir.path, encoding: 'utf8', timeout }); + assert.strictEqual(spawnResult.stderr.toString(), '', + `child exited with an error: \ + ${util.inspect(spawnResult)}`); +@@ -72,7 +73,7 @@ + // Test that at least 15 ticks have been recorded for both parent and child + // threads. When not tracking Worker threads, only 1 or 2 ticks would + // have been recorded. +- // When running locally on x64 Linux, this number is usually at least 200 ++ // When running locally, this number is usually around 200 + // for both threads, so 15 seems like a very safe threshold. + assert(ticks >= 15, `${ticks} >= 15`); + } diff -Nru nodejs-mozilla-12.18.1/debian/rules nodejs-mozilla-12.22.12/debian/rules --- nodejs-mozilla-12.18.1/debian/rules 2020-06-21 22:43:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/debian/rules 2022-07-22 16:58:21.000000000 +0000 @@ -7,6 +7,7 @@ CONFIGURE_FLAGS = --prefix=/usr/lib/nodejs-mozilla --without-npm ifeq (armhf, $(DEB_HOST_ARCH)) CONFIGURE_FLAGS += --with-arm-float-abi=hard +CONFIGURE_FLAGS += --with-arm-fpu=vfpv3 endif export HOME = $(CURDIR)/tmp @@ -16,10 +17,10 @@ export NODE_TEST_DIR = $(CURDIR)/tmp %: - dh $@ --parallel + dh $@ --no-parallel override_dh_auto_configure: - ./configure ${CONFIGURE_FLAGS} + ./configure $(CONFIGURE_FLAGS) override_dh_auto_test: make test-ci-js diff -Nru nodejs-mozilla-12.18.1/deps/brotli/brotli.gyp nodejs-mozilla-12.22.12/deps/brotli/brotli.gyp --- nodejs-mozilla-12.18.1/deps/brotli/brotli.gyp 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/brotli.gyp 2022-04-05 07:16:59.000000000 +0000 @@ -29,7 +29,10 @@ ], 'sources': [ # Common + 'c/common/constants.c', + 'c/common/context.c', 'c/common/dictionary.c', + 'c/common/platform.c', 'c/common/transform.c', # Decoder @@ -45,12 +48,14 @@ 'c/enc/block_splitter.c', 'c/enc/brotli_bit_stream.c', 'c/enc/cluster.c', + 'c/enc/command.c', 'c/enc/compress_fragment.c', 'c/enc/compress_fragment_two_pass.c', 'c/enc/dictionary_hash.c', 'c/enc/encode.c', 'c/enc/encoder_dict.c', 'c/enc/entropy_encode.c', + 'c/enc/fast_log.c', 'c/enc/histogram.c', 'c/enc/literal_cost.c', 'c/enc/memory.c', diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/constants.c nodejs-mozilla-12.22.12/deps/brotli/c/common/constants.c --- nodejs-mozilla-12.18.1/deps/brotli/c/common/constants.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/constants.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,15 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +#include "./constants.h" + +const BrotliPrefixCodeRange + _kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = { + {1, 2}, {5, 2}, {9, 2}, {13, 2}, {17, 3}, {25, 3}, + {33, 3}, {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, + {113, 5}, {145, 5}, {177, 5}, {209, 5}, {241, 6}, {305, 6}, + {369, 7}, {497, 8}, {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, + {8433, 13}, {16625, 24}}; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/constants.h nodejs-mozilla-12.22.12/deps/brotli/c/common/constants.h --- nodejs-mozilla-12.18.1/deps/brotli/c/common/constants.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/constants.h 2022-04-05 07:16:59.000000000 +0000 @@ -4,9 +4,18 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ +/** + * @file + * Common constants used in decoder and encoder API. + */ + #ifndef BROTLI_COMMON_CONSTANTS_H_ #define BROTLI_COMMON_CONSTANTS_H_ +#include "./platform.h" +#include +#include + /* Specification: 7.3. Encoding of the context map */ #define BROTLI_CONTEXT_MAP_MAX_RLE 16 @@ -29,12 +38,31 @@ #define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8 /* "Large Window Brotli" */ + +/** + * The theoretical maximum number of distance bits specified for large window + * brotli, for 64-bit encoders and decoders. Even when in practice 32-bit + * encoders and decoders only support up to 30 max distance bits, the value is + * set to 62 because it affects the large window brotli file format. + * Specifically, it affects the encoding of simple huffman tree for distances, + * see Specification RFC 7932 chapter 3.4. + */ #define BROTLI_LARGE_MAX_DISTANCE_BITS 62U #define BROTLI_LARGE_MIN_WBITS 10 +/** + * The maximum supported large brotli window bits by the encoder and decoder. + * Large window brotli allows up to 62 bits, however the current encoder and + * decoder, designed for 32-bit integers, only support up to 30 bits maximum. + */ #define BROTLI_LARGE_MAX_WBITS 30 /* Specification: 4. Encoding of distances */ #define BROTLI_NUM_DISTANCE_SHORT_CODES 16 +/** + * Maximal number of "postfix" bits. + * + * Number of "postfix" bits is stored as 2 bits in meta-block header. + */ #define BROTLI_MAX_NPOSTFIX 3 #define BROTLI_MAX_NDIRECT 120 #define BROTLI_MAX_DISTANCE_BITS 24U @@ -45,9 +73,22 @@ #define BROTLI_NUM_DISTANCE_SYMBOLS \ BROTLI_DISTANCE_ALPHABET_SIZE( \ BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS) + +/* ((1 << 26) - 4) is the maximal distance that can be expressed in RFC 7932 + brotli stream using NPOSTFIX = 0 and NDIRECT = 0. With other NPOSTFIX and + NDIRECT values distances up to ((1 << 29) + 88) could be expressed. */ #define BROTLI_MAX_DISTANCE 0x3FFFFFC + +/* ((1 << 31) - 4) is the safe distance limit. Using this number as a limit + allows safe distance calculation without overflows, given the distance + alphabet size is limited to corresponding size + (see kLargeWindowDistanceCodeLimits). */ #define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC + +/* Specification: 4. Encoding of Literal Insertion Lengths and Copy Lengths */ +#define BROTLI_NUM_INS_COPY_CODES 24 + /* 7.1. Context modes and context ID lookup for literals */ /* "context IDs for literals are in the range of 0..63" */ #define BROTLI_LITERAL_CONTEXT_BITS 6 @@ -61,4 +102,99 @@ #define BROTLI_WINDOW_GAP 16 #define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP) +typedef struct BrotliDistanceCodeLimit { + uint32_t max_alphabet_size; + uint32_t max_distance; +} BrotliDistanceCodeLimit; + +/* This function calculates maximal size of distance alphabet, such that the + distances greater than the given values can not be represented. + + This limits are designed to support fast and safe 32-bit decoders. + "32-bit" means that signed integer values up to ((1 << 31) - 1) could be + safely expressed. + + Brotli distance alphabet symbols do not represent consecutive distance + ranges. Each distance alphabet symbol (excluding direct distances and short + codes), represent interleaved (for NPOSTFIX > 0) range of distances. + A "group" of consecutive (1 << NPOSTFIX) symbols represent non-interleaved + range. Two consecutive groups require the same amount of "extra bits". + + It is important that distance alphabet represents complete "groups". + To avoid complex logic on encoder side about interleaved ranges + it was decided to restrict both sides to complete distance code "groups". + */ +BROTLI_UNUSED_FUNCTION BrotliDistanceCodeLimit BrotliCalculateDistanceCodeLimit( + uint32_t max_distance, uint32_t npostfix, uint32_t ndirect) { + BrotliDistanceCodeLimit result; + /* Marking this function as unused, because not all files + including "constants.h" use it -> compiler warns about that. */ + BROTLI_UNUSED(&BrotliCalculateDistanceCodeLimit); + if (max_distance <= ndirect) { + /* This case never happens / exists only for the sake of completeness. */ + result.max_alphabet_size = max_distance + BROTLI_NUM_DISTANCE_SHORT_CODES; + result.max_distance = max_distance; + return result; + } else { + /* The first prohibited value. */ + uint32_t forbidden_distance = max_distance + 1; + /* Subtract "directly" encoded region. */ + uint32_t offset = forbidden_distance - ndirect - 1; + uint32_t ndistbits = 0; + uint32_t tmp; + uint32_t half; + uint32_t group; + /* Postfix for the last dcode in the group. */ + uint32_t postfix = (1u << npostfix) - 1; + uint32_t extra; + uint32_t start; + /* Remove postfix and "head-start". */ + offset = (offset >> npostfix) + 4; + /* Calculate the number of distance bits. */ + tmp = offset / 2; + /* Poor-man's log2floor, to avoid extra dependencies. */ + while (tmp != 0) {ndistbits++; tmp = tmp >> 1;} + /* One bit is covered with subrange addressing ("half"). */ + ndistbits--; + /* Find subrange. */ + half = (offset >> ndistbits) & 1; + /* Calculate the "group" part of dcode. */ + group = ((ndistbits - 1) << 1) | half; + /* Calculated "group" covers the prohibited distance value. */ + if (group == 0) { + /* This case is added for correctness; does not occur for limit > 128. */ + result.max_alphabet_size = ndirect + BROTLI_NUM_DISTANCE_SHORT_CODES; + result.max_distance = ndirect; + return result; + } + /* Decrement "group", so it is the last permitted "group". */ + group--; + /* After group was decremented, ndistbits and half must be recalculated. */ + ndistbits = (group >> 1) + 1; + /* The last available distance in the subrange has all extra bits set. */ + extra = (1u << ndistbits) - 1; + /* Calculate region start. NB: ndistbits >= 1. */ + start = (1u << (ndistbits + 1)) - 4; + /* Move to subregion. */ + start += (group & 1) << ndistbits; + /* Calculate the alphabet size. */ + result.max_alphabet_size = ((group << npostfix) | postfix) + ndirect + + BROTLI_NUM_DISTANCE_SHORT_CODES + 1; + /* Calculate the maximal distance representable by alphabet. */ + result.max_distance = ((start + extra) << npostfix) + postfix + ndirect + 1; + return result; + } +} + +/* Represents the range of values belonging to a prefix code: + [offset, offset + 2^nbits) */ +typedef struct { + uint16_t offset; + uint8_t nbits; +} BrotliPrefixCodeRange; + +/* "Soft-private", it is exported, but not "advertised" as API. */ +BROTLI_COMMON_API extern const BrotliPrefixCodeRange + _kBrotliPrefixCodeRanges[BROTLI_NUM_BLOCK_LEN_SYMBOLS]; + #endif /* BROTLI_COMMON_CONSTANTS_H_ */ diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/context.c nodejs-mozilla-12.22.12/deps/brotli/c/common/context.c --- nodejs-mozilla-12.18.1/deps/brotli/c/common/context.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/context.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,156 @@ +#include "./context.h" + +#include + +/* Common context lookup table for all context modes. */ +const uint8_t _kBrotliContextLookupTable[2048] = { + /* CONTEXT_LSB6, last byte. */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + + /* CONTEXT_LSB6, second last byte, */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + /* CONTEXT_MSB6, last byte. */ + 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, + 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, + 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, + 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, + 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, + 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, + 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, + 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, + 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, + 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, + 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, + 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, + 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, + 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, + 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, + + /* CONTEXT_MSB6, second last byte, */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + /* CONTEXT_UTF8, last byte. */ + /* ASCII range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, + 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, + 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, + 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, + 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, + /* UTF8 continuation byte range. */ + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + /* UTF8 lead byte range. */ + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + + /* CONTEXT_UTF8 second last byte. */ + /* ASCII range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, + /* UTF8 continuation byte range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* UTF8 lead byte range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + + /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ + 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, + + /* CONTEXT_SIGNED, second last byte. */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, +}; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/context.h nodejs-mozilla-12.22.12/deps/brotli/c/common/context.h --- nodejs-mozilla-12.18.1/deps/brotli/c/common/context.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/context.h 2022-04-05 07:16:59.000000000 +0000 @@ -88,6 +88,7 @@ #ifndef BROTLI_COMMON_CONTEXT_H_ #define BROTLI_COMMON_CONTEXT_H_ +#include #include typedef enum ContextType { @@ -97,163 +98,14 @@ CONTEXT_SIGNED = 3 } ContextType; +/* "Soft-private", it is exported, but not "advertised" as API. */ /* Common context lookup table for all context modes. */ -static const uint8_t kContextLookup[2048] = { - /* CONTEXT_LSB6, last byte. */ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - - /* CONTEXT_LSB6, second last byte, */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - /* CONTEXT_MSB6, last byte. */ - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, - 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, - 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, - 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, - 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, - 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, - 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, - 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, - 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, - 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, - 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, - 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, - 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, - 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, - 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, - 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, - - /* CONTEXT_MSB6, second last byte, */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - /* CONTEXT_UTF8, last byte. */ - /* ASCII range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, - 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, - 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, - 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, - 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, - /* UTF8 continuation byte range. */ - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, - /* UTF8 lead byte range. */ - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, - - /* CONTEXT_UTF8 second last byte. */ - /* ASCII range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, - /* UTF8 continuation byte range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* UTF8 lead byte range. */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - - /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ - 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, - - /* CONTEXT_SIGNED, second last byte. */ - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, -}; +BROTLI_COMMON_API extern const uint8_t _kBrotliContextLookupTable[2048]; typedef const uint8_t* ContextLut; /* typeof(MODE) == ContextType; returns ContextLut */ -#define BROTLI_CONTEXT_LUT(MODE) (&kContextLookup[(MODE) << 9]) +#define BROTLI_CONTEXT_LUT(MODE) (&_kBrotliContextLookupTable[(MODE) << 9]) /* typeof(LUT) == ContextLut */ #define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2]) diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/dictionary.c nodejs-mozilla-12.22.12/deps/brotli/c/common/dictionary.c --- nodejs-mozilla-12.18.1/deps/brotli/c/common/dictionary.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/dictionary.c 2022-04-05 07:16:59.000000000 +0000 @@ -5,12 +5,13 @@ */ #include "./dictionary.h" +#include "./platform.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif -#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA +#if !defined(BROTLI_EXTERNAL_DICTIONARY_DATA) static const uint8_t kBrotliDictionaryData[] = { 116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99, @@ -5862,7 +5863,11 @@ ; #endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */ +#if !defined(BROTLI_EXTERNAL_DICTIONARY_DATA) +static const BrotliDictionary kBrotliDictionary = { +#else static BrotliDictionary kBrotliDictionary = { +#endif /* size_bits_by_length */ { 0, 0, 0, 0, 10, 10, 11, 11, @@ -5895,9 +5900,13 @@ } void BrotliSetDictionaryData(const uint8_t* data) { +#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA) if (!!data && !kBrotliDictionary.data) { kBrotliDictionary.data = data; } +#else + BROTLI_UNUSED(data); // Appease -Werror=unused-parameter +#endif } #if defined(__cplusplus) || defined(c_plusplus) diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/platform.c nodejs-mozilla-12.22.12/deps/brotli/c/common/platform.c --- nodejs-mozilla-12.18.1/deps/brotli/c/common/platform.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/platform.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,22 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +#include + +#include "./platform.h" +#include + +/* Default brotli_alloc_func */ +void* BrotliDefaultAllocFunc(void* opaque, size_t size) { + BROTLI_UNUSED(opaque); + return malloc(size); +} + +/* Default brotli_free_func */ +void BrotliDefaultFreeFunc(void* opaque, void* address) { + BROTLI_UNUSED(opaque); + free(address); +} diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/platform.h nodejs-mozilla-12.22.12/deps/brotli/c/common/platform.h --- nodejs-mozilla-12.18.1/deps/brotli/c/common/platform.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/platform.h 2022-04-05 07:16:59.000000000 +0000 @@ -24,12 +24,11 @@ #define BROTLI_COMMON_PLATFORM_H_ #include /* memcpy */ -#include /* malloc, free */ #include #include -#if defined(OS_LINUX) || defined(OS_CYGWIN) +#if defined(OS_LINUX) || defined(OS_CYGWIN) || defined(__EMSCRIPTEN__) #include #elif defined(OS_FREEBSD) #include @@ -41,6 +40,10 @@ #define BROTLI_X_BIG_ENDIAN BIG_ENDIAN #endif +#if BROTLI_MSVC_VERSION_CHECK(12, 0, 0) +#include +#endif + #if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG) #include #include @@ -308,8 +311,7 @@ } #else /* BROTLI_ALIGNED_READ */ /* Unaligned memory access is allowed: just cast pointer to requested type. */ -#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) || \ - defined(MEMORY_SANITIZER) +#if BROTLI_SANITIZED /* Consider we have an unaligned load/store of 4 bytes from address 0x...05. AddressSanitizer will treat it as a 3-byte access to the range 05:07 and will miss a bug if 08 is the first unaddressable byte. @@ -334,7 +336,7 @@ #define BrotliUnalignedRead32 __sanitizer_unaligned_load32 #define BrotliUnalignedRead64 __sanitizer_unaligned_load64 #define BrotliUnalignedWrite64 __sanitizer_unaligned_store64 -#else +#else /* BROTLI_SANITIZED */ static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) { return *(const uint16_t*)p; } @@ -356,7 +358,7 @@ typedef BROTLI_ALIGNED(1) uint64_t brotli_unaligned_uint64_t; static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) { - return (uint64_t) ((brotli_unaligned_uint64_t*) p)[0]; + return (uint64_t) ((const brotli_unaligned_uint64_t*) p)[0]; } static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) { brotli_unaligned_uint64_t* dwords = (brotli_unaligned_uint64_t*) p; @@ -374,7 +376,7 @@ } #endif /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */ #endif /* BROTLI_64_BITS */ -#endif /* ASAN / TSAN / MSAN */ +#endif /* BROTLI_SANITIZED */ #endif /* BROTLI_ALIGNED_READ */ #if BROTLI_LITTLE_ENDIAN @@ -466,20 +468,20 @@ #endif #if defined(BROTLI_ENABLE_LOG) -#define BROTLI_DCHECK(x) assert(x) #define BROTLI_LOG(x) printf x #else -#define BROTLI_DCHECK(x) #define BROTLI_LOG(x) #endif #if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG) +#define BROTLI_DCHECK(x) assert(x) static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) { fprintf(stderr, "%s:%d (%s)\n", f, l, fn); fflush(stderr); } #define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__) #else +#define BROTLI_DCHECK(x) #define BROTLI_DUMP() (void)(0) #endif @@ -523,17 +525,41 @@ (A)[(J)] = __brotli_swap_tmp; \ } -/* Default brotli_alloc_func */ -static void* BrotliDefaultAllocFunc(void* opaque, size_t size) { - BROTLI_UNUSED(opaque); - return malloc(size); +#if BROTLI_64_BITS +#if BROTLI_GNUC_HAS_BUILTIN(__builtin_ctzll, 3, 4, 0) || \ + BROTLI_INTEL_VERSION_CHECK(16, 0, 0) +#define BROTLI_TZCNT64 __builtin_ctzll +#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) +#if defined(BROTLI_TARGET_X64) +#define BROTLI_TZCNT64 _tzcnt_u64 +#else /* BROTLI_TARGET_X64 */ +static BROTLI_INLINE uint32_t BrotliBsf64Msvc(uint64_t x) { + uint32_t lsb; + _BitScanForward64(&lsb, x); + return lsb; +} +#define BROTLI_TZCNT64 BrotliBsf64Msvc +#endif /* BROTLI_TARGET_X64 */ +#endif /* __builtin_ctzll */ +#endif /* BROTLI_64_BITS */ + +#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \ + BROTLI_INTEL_VERSION_CHECK(16, 0, 0) +#define BROTLI_BSR32(x) (31u ^ (uint32_t)__builtin_clz(x)) +#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) +static BROTLI_INLINE uint32_t BrotliBsr32Msvc(uint32_t x) { + unsigned long msb; + _BitScanReverse(&msb, x); + return (uint32_t)msb; } +#define BROTLI_BSR32 BrotliBsr32Msvc +#endif /* __builtin_clz */ + +/* Default brotli_alloc_func */ +BROTLI_COMMON_API void* BrotliDefaultAllocFunc(void* opaque, size_t size); /* Default brotli_free_func */ -static void BrotliDefaultFreeFunc(void* opaque, void* address) { - BROTLI_UNUSED(opaque); - free(address); -} +BROTLI_COMMON_API void BrotliDefaultFreeFunc(void* opaque, void* address); BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) { BROTLI_UNUSED(&BrotliSuppressUnusedFunctions); diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/transform.c nodejs-mozilla-12.22.12/deps/brotli/c/common/transform.c --- nodejs-mozilla-12.18.1/deps/brotli/c/common/transform.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/transform.c 2022-04-05 07:16:59.000000000 +0000 @@ -24,8 +24,8 @@ /* 8x _0 _ _3 _8 _C _E _ _1 _7 _F */ " not \3er \3al \4ful \4ive \5less \4es" /* Ax _5 _9 _D _2 _7 _D */ - "t \4ize \2\xc2\xa0\4ous \5 the \2e \0"; -/* Cx _2 _7___ ___ _A _F _5 _8 */ + "t \4ize \2\xc2\xa0\4ous \5 the \2e "; /* \0 - implicit trailing zero. */ +/* Cx _2 _7___ ___ _A _F _5 _8 */ static const uint16_t kPrefixSuffixMap[50] = { 0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25, @@ -160,12 +160,13 @@ 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34, }; -static BrotliTransforms kBrotliTransforms = { +static const BrotliTransforms kBrotliTransforms = { sizeof(kPrefixSuffix), (const uint8_t*)kPrefixSuffix, kPrefixSuffixMap, sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])), kTransformsData, + NULL, /* no extra parameters */ {0, 12, 27, 23, 42, 63, 56, 48, 59, 64} }; @@ -190,6 +191,48 @@ return 3; } +static int Shift(uint8_t* word, int word_len, uint16_t parameter) { + /* Limited sign extension: scalar < (1 << 24). */ + uint32_t scalar = + (parameter & 0x7FFFu) + (0x1000000u - (parameter & 0x8000u)); + if (word[0] < 0x80) { + /* 1-byte rune / 0sssssss / 7 bit scalar (ASCII). */ + scalar += (uint32_t)word[0]; + word[0] = (uint8_t)(scalar & 0x7Fu); + return 1; + } else if (word[0] < 0xC0) { + /* Continuation / 10AAAAAA. */ + return 1; + } else if (word[0] < 0xE0) { + /* 2-byte rune / 110sssss AAssssss / 11 bit scalar. */ + if (word_len < 2) return 1; + scalar += (uint32_t)((word[1] & 0x3Fu) | ((word[0] & 0x1Fu) << 6u)); + word[0] = (uint8_t)(0xC0 | ((scalar >> 6u) & 0x1F)); + word[1] = (uint8_t)((word[1] & 0xC0) | (scalar & 0x3F)); + return 2; + } else if (word[0] < 0xF0) { + /* 3-byte rune / 1110ssss AAssssss BBssssss / 16 bit scalar. */ + if (word_len < 3) return word_len; + scalar += (uint32_t)((word[2] & 0x3Fu) | ((word[1] & 0x3Fu) << 6u) | + ((word[0] & 0x0Fu) << 12u)); + word[0] = (uint8_t)(0xE0 | ((scalar >> 12u) & 0x0F)); + word[1] = (uint8_t)((word[1] & 0xC0) | ((scalar >> 6u) & 0x3F)); + word[2] = (uint8_t)((word[2] & 0xC0) | (scalar & 0x3F)); + return 3; + } else if (word[0] < 0xF8) { + /* 4-byte rune / 11110sss AAssssss BBssssss CCssssss / 21 bit scalar. */ + if (word_len < 4) return word_len; + scalar += (uint32_t)((word[3] & 0x3Fu) | ((word[2] & 0x3Fu) << 6u) | + ((word[1] & 0x3Fu) << 12u) | ((word[0] & 0x07u) << 18u)); + word[0] = (uint8_t)(0xF0 | ((scalar >> 18u) & 0x07)); + word[1] = (uint8_t)((word[1] & 0xC0) | ((scalar >> 12u) & 0x3F)); + word[2] = (uint8_t)((word[2] & 0xC0) | ((scalar >> 6u) & 0x3F)); + word[3] = (uint8_t)((word[3] & 0xC0) | (scalar & 0x3F)); + return 4; + } + return 1; +} + int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len, const BrotliTransforms* transforms, int transform_idx) { int idx = 0; @@ -221,6 +264,19 @@ uppercase += step; len -= step; } + } else if (t == BROTLI_TRANSFORM_SHIFT_FIRST) { + uint16_t param = (uint16_t)(transforms->params[transform_idx * 2] + + (transforms->params[transform_idx * 2 + 1] << 8u)); + Shift(&dst[idx - len], len, param); + } else if (t == BROTLI_TRANSFORM_SHIFT_ALL) { + uint16_t param = (uint16_t)(transforms->params[transform_idx * 2] + + (transforms->params[transform_idx * 2 + 1] << 8u)); + uint8_t* shift = &dst[idx - len]; + while (len > 0) { + int step = Shift(shift, len, param); + shift += step; + len -= step; + } } } { diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/transform.h nodejs-mozilla-12.22.12/deps/brotli/c/common/transform.h --- nodejs-mozilla-12.18.1/deps/brotli/c/common/transform.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/transform.h 2022-04-05 07:16:59.000000000 +0000 @@ -37,6 +37,8 @@ BROTLI_TRANSFORM_OMIT_FIRST_7 = 18, BROTLI_TRANSFORM_OMIT_FIRST_8 = 19, BROTLI_TRANSFORM_OMIT_FIRST_9 = 20, + BROTLI_TRANSFORM_SHIFT_FIRST = 21, + BROTLI_TRANSFORM_SHIFT_ALL = 22, BROTLI_NUM_TRANSFORM_TYPES /* Counts transforms, not a transform itself. */ }; @@ -50,6 +52,9 @@ uint32_t num_transforms; /* Each entry is a [prefix_id, transform, suffix_id] triplet. */ const uint8_t* transforms; + /* Shift for BROTLI_TRANSFORM_SHIFT_FIRST and BROTLI_TRANSFORM_SHIFT_ALL, + must be NULL if and only if no such transforms are present. */ + const uint8_t* params; /* Indices of transforms like ["", BROTLI_TRANSFORM_OMIT_LAST_#, ""]. 0-th element corresponds to ["", BROTLI_TRANSFORM_IDENTITY, ""]. -1, if cut-off transform does not exist. */ diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/common/version.h nodejs-mozilla-12.22.12/deps/brotli/c/common/version.h --- nodejs-mozilla-12.18.1/deps/brotli/c/common/version.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/common/version.h 2022-04-05 07:16:59.000000000 +0000 @@ -14,13 +14,13 @@ BrotliEncoderVersion methods. */ /* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH */ -#define BROTLI_VERSION 0x1000007 +#define BROTLI_VERSION 0x1000009 /* This macro is used by build system to produce Libtool-friendly soname. See https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html */ /* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */ -#define BROTLI_ABI_VERSION 0x1007000 +#define BROTLI_ABI_VERSION 0x1009000 #endif /* BROTLI_COMMON_VERSION_H_ */ diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/dec/bit_reader.c nodejs-mozilla-12.22.12/deps/brotli/c/dec/bit_reader.c --- nodejs-mozilla-12.18.1/deps/brotli/c/dec/bit_reader.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/dec/bit_reader.c 2022-04-05 07:16:59.000000000 +0000 @@ -15,6 +15,17 @@ extern "C" { #endif +const uint32_t kBrotliBitMask[33] = { 0x00000000, + 0x00000001, 0x00000003, 0x00000007, 0x0000000F, + 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF, + 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF, + 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, + 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF, + 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF, + 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF, + 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF +}; + void BrotliInitBitReader(BrotliBitReader* const br) { br->val_ = 0; br->bit_pos_ = sizeof(br->val_) << 3; @@ -43,6 +54,23 @@ return BROTLI_TRUE; } +BROTLI_BOOL BrotliSafeReadBits32Slow(BrotliBitReader* const br, + uint32_t n_bits, uint32_t* val) { + uint32_t low_val; + uint32_t high_val; + BrotliBitReaderState memento; + BROTLI_DCHECK(n_bits <= 32); + BROTLI_DCHECK(n_bits > 24); + BrotliBitReaderSaveState(br, &memento); + if (!BrotliSafeReadBits(br, 16, &low_val) || + !BrotliSafeReadBits(br, n_bits - 16, &high_val)) { + BrotliBitReaderRestoreState(br, &memento); + return BROTLI_FALSE; + } + *val = low_val | (high_val << 16); + return BROTLI_TRUE; +} + #if defined(__cplusplus) || defined(c_plusplus) } /* extern "C" */ #endif diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/dec/bit_reader.h nodejs-mozilla-12.22.12/deps/brotli/c/dec/bit_reader.h --- nodejs-mozilla-12.18.1/deps/brotli/c/dec/bit_reader.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/dec/bit_reader.h 2022-04-05 07:16:59.000000000 +0000 @@ -11,6 +11,7 @@ #include /* memcpy */ +#include "../common/constants.h" #include "../common/platform.h" #include @@ -20,16 +21,7 @@ #define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1) -static const uint32_t kBitMask[33] = { 0x00000000, - 0x00000001, 0x00000003, 0x00000007, 0x0000000F, - 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF, - 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF, - 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF, - 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF, - 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF, - 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF, - 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF -}; +BROTLI_INTERNAL extern const uint32_t kBrotliBitMask[33]; static BROTLI_INLINE uint32_t BitMask(uint32_t n) { if (BROTLI_IS_CONSTANT(n) || BROTLI_HAS_UBFX) { @@ -37,7 +29,7 @@ "Unsigned Bit Field Extract" UBFX instruction on ARM. */ return ~((0xFFFFFFFFu) << n); } else { - return kBitMask[n]; + return kBrotliBitMask[n]; } } @@ -65,6 +57,12 @@ reading. */ BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br); +/* Fallback for BrotliSafeReadBits32. Extracted as noninlined method to unburden + the main code-path. Never called for RFC brotli streams, required only for + "large-window" mode and other extensions. */ +BROTLI_INTERNAL BROTLI_NOINLINE BROTLI_BOOL BrotliSafeReadBits32Slow( + BrotliBitReader* const br, uint32_t n_bits, uint32_t* val); + static BROTLI_INLINE void BrotliBitReaderSaveState( BrotliBitReader* const from, BrotliBitReaderState* to) { to->val_ = from->val_; @@ -87,8 +85,11 @@ } /* Returns amount of unread bytes the bit reader still has buffered from the - BrotliInput, including whole bytes in br->val_. */ + BrotliInput, including whole bytes in br->val_. Result is capped with + maximal ring-buffer size (larger number won't be utilized anyway). */ static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) { + static const size_t kCap = (size_t)1 << BROTLI_LARGE_MAX_WBITS; + if (br->avail_in > kCap) return kCap; return br->avail_in + (BrotliGetAvailableBits(br) >> 3); } @@ -237,15 +238,17 @@ static BROTLI_INLINE void BrotliTakeBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits); - BROTLI_LOG(("[BrotliReadBits] %d %d %d val: %6x\n", + BROTLI_LOG(("[BrotliTakeBits] %d %d %d val: %6x\n", (int)br->avail_in, (int)br->bit_pos_, (int)n_bits, (int)*val)); BrotliDropBits(br, n_bits); } /* Reads the specified number of bits from |br| and advances the bit pos. - Assumes that there is enough input to perform BrotliFillBitWindow. */ -static BROTLI_INLINE uint32_t BrotliReadBits( + Assumes that there is enough input to perform BrotliFillBitWindow. + Up to 24 bits are allowed to be requested from this method. */ +static BROTLI_INLINE uint32_t BrotliReadBits24( BrotliBitReader* const br, uint32_t n_bits) { + BROTLI_DCHECK(n_bits <= 24); if (BROTLI_64_BITS || (n_bits <= 16)) { uint32_t val; BrotliFillBitWindow(br, n_bits); @@ -262,10 +265,32 @@ } } +/* Same as BrotliReadBits24, but allows reading up to 32 bits. */ +static BROTLI_INLINE uint32_t BrotliReadBits32( + BrotliBitReader* const br, uint32_t n_bits) { + BROTLI_DCHECK(n_bits <= 32); + if (BROTLI_64_BITS || (n_bits <= 16)) { + uint32_t val; + BrotliFillBitWindow(br, n_bits); + BrotliTakeBits(br, n_bits, &val); + return val; + } else { + uint32_t low_val; + uint32_t high_val; + BrotliFillBitWindow(br, 16); + BrotliTakeBits(br, 16, &low_val); + BrotliFillBitWindow(br, 16); + BrotliTakeBits(br, n_bits - 16, &high_val); + return low_val | (high_val << 16); + } +} + /* Tries to read the specified amount of bits. Returns BROTLI_FALSE, if there - is not enough input. |n_bits| MUST be positive. */ + is not enough input. |n_bits| MUST be positive. + Up to 24 bits are allowed to be requested from this method. */ static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits( BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { + BROTLI_DCHECK(n_bits <= 24); while (BrotliGetAvailableBits(br) < n_bits) { if (!BrotliPullByte(br)) { return BROTLI_FALSE; @@ -275,6 +300,23 @@ return BROTLI_TRUE; } +/* Same as BrotliSafeReadBits, but allows reading up to 32 bits. */ +static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits32( + BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { + BROTLI_DCHECK(n_bits <= 32); + if (BROTLI_64_BITS || (n_bits <= 24)) { + while (BrotliGetAvailableBits(br) < n_bits) { + if (!BrotliPullByte(br)) { + return BROTLI_FALSE; + } + } + BrotliTakeBits(br, n_bits, val); + return BROTLI_TRUE; + } else { + return BrotliSafeReadBits32Slow(br, n_bits, val); + } +} + /* Advances the bit reader position to the next byte boundary and verifies that any skipped bits are set to zero. */ static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader* br) { diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/dec/decode.c nodejs-mozilla-12.22.12/deps/brotli/c/dec/decode.c --- nodejs-mozilla-12.18.1/deps/brotli/c/dec/decode.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/dec/decode.c 2022-04-05 07:16:59.000000000 +0000 @@ -41,7 +41,8 @@ /* We need the slack region for the following reasons: - doing up to two 16-byte copies for fast backward copying - - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */ + - inserting transformed dictionary word: + 5 prefix + 24 base + 8 suffix */ static const uint32_t kRingBufferWriteAheadSlack = 42; static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] = { @@ -274,7 +275,8 @@ s->loop_counter = i; return BROTLI_DECODER_NEEDS_MORE_INPUT; } - if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) { + if (i + 1 == (int)s->size_nibbles && s->size_nibbles > 4 && + bits == 0) { return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE); } s->meta_block_remaining_len |= (int)(bits << (i * 4)); @@ -323,7 +325,8 @@ s->loop_counter = i; return BROTLI_DECODER_NEEDS_MORE_INPUT; } - if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) { + if (i + 1 == (int)s->size_nibbles && s->size_nibbles > 1 && + bits == 0) { return BROTLI_FAILURE( BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE); } @@ -470,32 +473,34 @@ Totally 1..4 symbols are read, 1..11 bits each. The list of symbols MUST NOT contain duplicates. */ static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols( - uint32_t alphabet_size, uint32_t max_symbol, BrotliDecoderState* s) { + uint32_t alphabet_size_max, uint32_t alphabet_size_limit, + BrotliDecoderState* s) { /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */ BrotliBitReader* br = &s->br; - uint32_t max_bits = Log2Floor(alphabet_size - 1); - uint32_t i = s->sub_loop_counter; - uint32_t num_symbols = s->symbol; + BrotliMetablockHeaderArena* h = &s->arena.header; + uint32_t max_bits = Log2Floor(alphabet_size_max - 1); + uint32_t i = h->sub_loop_counter; + uint32_t num_symbols = h->symbol; while (i <= num_symbols) { uint32_t v; if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) { - s->sub_loop_counter = i; - s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ; + h->sub_loop_counter = i; + h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ; return BROTLI_DECODER_NEEDS_MORE_INPUT; } - if (v >= max_symbol) { + if (v >= alphabet_size_limit) { return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET); } - s->symbols_lists_array[i] = (uint16_t)v; - BROTLI_LOG_UINT(s->symbols_lists_array[i]); + h->symbols_lists_array[i] = (uint16_t)v; + BROTLI_LOG_UINT(h->symbols_lists_array[i]); ++i; } for (i = 0; i < num_symbols; ++i) { uint32_t k = i + 1; for (; k <= num_symbols; ++k) { - if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) { + if (h->symbols_lists_array[i] == h->symbols_lists_array[k]) { return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME); } } @@ -588,27 +593,28 @@ static BrotliDecoderErrorCode ReadSymbolCodeLengths( uint32_t alphabet_size, BrotliDecoderState* s) { BrotliBitReader* br = &s->br; - uint32_t symbol = s->symbol; - uint32_t repeat = s->repeat; - uint32_t space = s->space; - uint32_t prev_code_len = s->prev_code_len; - uint32_t repeat_code_len = s->repeat_code_len; - uint16_t* symbol_lists = s->symbol_lists; - uint16_t* code_length_histo = s->code_length_histo; - int* next_symbol = s->next_symbol; + BrotliMetablockHeaderArena* h = &s->arena.header; + uint32_t symbol = h->symbol; + uint32_t repeat = h->repeat; + uint32_t space = h->space; + uint32_t prev_code_len = h->prev_code_len; + uint32_t repeat_code_len = h->repeat_code_len; + uint16_t* symbol_lists = h->symbol_lists; + uint16_t* code_length_histo = h->code_length_histo; + int* next_symbol = h->next_symbol; if (!BrotliWarmupBitReader(br)) { return BROTLI_DECODER_NEEDS_MORE_INPUT; } while (symbol < alphabet_size && space > 0) { - const HuffmanCode* p = s->table; + const HuffmanCode* p = h->table; uint32_t code_len; BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(p); if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) { - s->symbol = symbol; - s->repeat = repeat; - s->prev_code_len = prev_code_len; - s->repeat_code_len = repeat_code_len; - s->space = space; + h->symbol = symbol; + h->repeat = repeat; + h->prev_code_len = prev_code_len; + h->repeat_code_len = repeat_code_len; + h->space = space; return BROTLI_DECODER_NEEDS_MORE_INPUT; } BrotliFillBitWindow16(br); @@ -630,16 +636,17 @@ symbol_lists, code_length_histo, next_symbol); } } - s->space = space; + h->space = space; return BROTLI_DECODER_SUCCESS; } static BrotliDecoderErrorCode SafeReadSymbolCodeLengths( uint32_t alphabet_size, BrotliDecoderState* s) { BrotliBitReader* br = &s->br; + BrotliMetablockHeaderArena* h = &s->arena.header; BROTLI_BOOL get_byte = BROTLI_FALSE; - while (s->symbol < alphabet_size && s->space > 0) { - const HuffmanCode* p = s->table; + while (h->symbol < alphabet_size && h->space > 0) { + const HuffmanCode* p = h->table; uint32_t code_len; uint32_t available_bits; uint32_t bits = 0; @@ -659,9 +666,9 @@ code_len = BROTLI_HC_FAST_LOAD_VALUE(p); /* code_len == 0..17 */ if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) { BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(p)); - ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space, - &s->prev_code_len, s->symbol_lists, s->code_length_histo, - s->next_symbol); + ProcessSingleCodeLength(code_len, &h->symbol, &h->repeat, &h->space, + &h->prev_code_len, h->symbol_lists, h->code_length_histo, + h->next_symbol); } else { /* code_len == 16..17, extra_bits == 2..3 */ uint32_t extra_bits = code_len - 14U; uint32_t repeat_delta = (bits >> BROTLI_HC_FAST_LOAD_BITS(p)) & @@ -672,9 +679,9 @@ } BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(p) + extra_bits); ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size, - &s->symbol, &s->repeat, &s->space, &s->prev_code_len, - &s->repeat_code_len, s->symbol_lists, s->code_length_histo, - s->next_symbol); + &h->symbol, &h->repeat, &h->space, &h->prev_code_len, + &h->repeat_code_len, h->symbol_lists, h->code_length_histo, + h->next_symbol); } } return BROTLI_DECODER_SUCCESS; @@ -684,9 +691,10 @@ Each code is 2..4 bits long. In total 30..72 bits are used. */ static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) { BrotliBitReader* br = &s->br; - uint32_t num_codes = s->repeat; - unsigned space = s->space; - uint32_t i = s->sub_loop_counter; + BrotliMetablockHeaderArena* h = &s->arena.header; + uint32_t num_codes = h->repeat; + unsigned space = h->space; + uint32_t i = h->sub_loop_counter; for (; i < BROTLI_CODE_LENGTH_CODES; ++i) { const uint8_t code_len_idx = kCodeLengthCodeOrder[i]; uint32_t ix; @@ -699,21 +707,21 @@ ix = 0; } if (kCodeLengthPrefixLength[ix] > available_bits) { - s->sub_loop_counter = i; - s->repeat = num_codes; - s->space = space; - s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX; + h->sub_loop_counter = i; + h->repeat = num_codes; + h->space = space; + h->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX; return BROTLI_DECODER_NEEDS_MORE_INPUT; } } v = kCodeLengthPrefixValue[ix]; BrotliDropBits(br, kCodeLengthPrefixLength[ix]); - s->code_length_code_lengths[code_len_idx] = (uint8_t)v; - BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths, code_len_idx); + h->code_length_code_lengths[code_len_idx] = (uint8_t)v; + BROTLI_LOG_ARRAY_INDEX(h->code_length_code_lengths, code_len_idx); if (v != 0) { space = space - (32U >> v); ++num_codes; - ++s->code_length_histo[v]; + ++h->code_length_histo[v]; if (space - 1U >= 32U) { /* space is 0 or wrapped around. */ break; @@ -737,49 +745,48 @@ encoded with predefined entropy code. 32 - 74 bits are used. B.2) Decoded table is used to decode code lengths of symbols in resulting Huffman table. In worst case 3520 bits are read. */ -static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size, - uint32_t max_symbol, +static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size_max, + uint32_t alphabet_size_limit, HuffmanCode* table, uint32_t* opt_table_size, BrotliDecoderState* s) { BrotliBitReader* br = &s->br; - /* Unnecessary masking, but might be good for safety. */ - alphabet_size &= 0x7FF; + BrotliMetablockHeaderArena* h = &s->arena.header; /* State machine. */ for (;;) { - switch (s->substate_huffman) { + switch (h->substate_huffman) { case BROTLI_STATE_HUFFMAN_NONE: - if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) { + if (!BrotliSafeReadBits(br, 2, &h->sub_loop_counter)) { return BROTLI_DECODER_NEEDS_MORE_INPUT; } - BROTLI_LOG_UINT(s->sub_loop_counter); + BROTLI_LOG_UINT(h->sub_loop_counter); /* The value is used as follows: 1 for simple code; 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */ - if (s->sub_loop_counter != 1) { - s->space = 32; - s->repeat = 0; /* num_codes */ - memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo[0]) * + if (h->sub_loop_counter != 1) { + h->space = 32; + h->repeat = 0; /* num_codes */ + memset(&h->code_length_histo[0], 0, sizeof(h->code_length_histo[0]) * (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1)); - memset(&s->code_length_code_lengths[0], 0, - sizeof(s->code_length_code_lengths)); - s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX; + memset(&h->code_length_code_lengths[0], 0, + sizeof(h->code_length_code_lengths)); + h->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX; continue; } /* Fall through. */ case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE: /* Read symbols, codes & code lengths directly. */ - if (!BrotliSafeReadBits(br, 2, &s->symbol)) { /* num_symbols */ - s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE; + if (!BrotliSafeReadBits(br, 2, &h->symbol)) { /* num_symbols */ + h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE; return BROTLI_DECODER_NEEDS_MORE_INPUT; } - s->sub_loop_counter = 0; + h->sub_loop_counter = 0; /* Fall through. */ case BROTLI_STATE_HUFFMAN_SIMPLE_READ: { BrotliDecoderErrorCode result = - ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s); + ReadSimpleHuffmanSymbols(alphabet_size_max, alphabet_size_limit, s); if (result != BROTLI_DECODER_SUCCESS) { return result; } @@ -788,21 +795,21 @@ case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: { uint32_t table_size; - if (s->symbol == 3) { + if (h->symbol == 3) { uint32_t bits; if (!BrotliSafeReadBits(br, 1, &bits)) { - s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD; + h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD; return BROTLI_DECODER_NEEDS_MORE_INPUT; } - s->symbol += bits; + h->symbol += bits; } - BROTLI_LOG_UINT(s->symbol); + BROTLI_LOG_UINT(h->symbol); table_size = BrotliBuildSimpleHuffmanTable( - table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol); + table, HUFFMAN_TABLE_BITS, h->symbols_lists_array, h->symbol); if (opt_table_size) { *opt_table_size = table_size; } - s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE; + h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE; return BROTLI_DECODER_SUCCESS; } @@ -813,44 +820,45 @@ if (result != BROTLI_DECODER_SUCCESS) { return result; } - BrotliBuildCodeLengthsHuffmanTable(s->table, - s->code_length_code_lengths, - s->code_length_histo); - memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo)); + BrotliBuildCodeLengthsHuffmanTable(h->table, + h->code_length_code_lengths, + h->code_length_histo); + memset(&h->code_length_histo[0], 0, sizeof(h->code_length_histo)); for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) { - s->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1); - s->symbol_lists[s->next_symbol[i]] = 0xFFFF; + h->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1); + h->symbol_lists[h->next_symbol[i]] = 0xFFFF; } - s->symbol = 0; - s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH; - s->repeat = 0; - s->repeat_code_len = 0; - s->space = 32768; - s->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS; + h->symbol = 0; + h->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH; + h->repeat = 0; + h->repeat_code_len = 0; + h->space = 32768; + h->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS; } /* Fall through. */ case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: { uint32_t table_size; - BrotliDecoderErrorCode result = ReadSymbolCodeLengths(max_symbol, s); + BrotliDecoderErrorCode result = ReadSymbolCodeLengths( + alphabet_size_limit, s); if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) { - result = SafeReadSymbolCodeLengths(max_symbol, s); + result = SafeReadSymbolCodeLengths(alphabet_size_limit, s); } if (result != BROTLI_DECODER_SUCCESS) { return result; } - if (s->space != 0) { - BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", (int)s->space)); + if (h->space != 0) { + BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", (int)h->space)); return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE); } table_size = BrotliBuildHuffmanTable( - table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo); + table, HUFFMAN_TABLE_BITS, h->symbol_lists, h->code_length_histo); if (opt_table_size) { *opt_table_size = table_size; } - s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE; + h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE; return BROTLI_DECODER_SUCCESS; } @@ -867,8 +875,8 @@ uint32_t code; uint32_t nbits; code = ReadSymbol(table, br); - nbits = kBlockLengthPrefixCode[code].nbits; /* nbits == 2..24 */ - return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits); + nbits = _kBrotliPrefixCodeRanges[code].nbits; /* nbits == 2..24 */ + return _kBrotliPrefixCodeRanges[code].offset + BrotliReadBits24(br, nbits); } /* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then @@ -886,13 +894,14 @@ } { uint32_t bits; - uint32_t nbits = kBlockLengthPrefixCode[index].nbits; /* nbits == 2..24 */ + uint32_t nbits = _kBrotliPrefixCodeRanges[index].nbits; + uint32_t offset = _kBrotliPrefixCodeRanges[index].offset; if (!BrotliSafeReadBits(br, nbits, &bits)) { s->block_length_index = index; s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX; return BROTLI_FALSE; } - *result = kBlockLengthPrefixCode[index].offset + bits; + *result = offset + bits; s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE; return BROTLI_TRUE; } @@ -952,22 +961,22 @@ /* Decodes a series of Huffman table using ReadHuffmanCode function. */ static BrotliDecoderErrorCode HuffmanTreeGroupDecode( HuffmanTreeGroup* group, BrotliDecoderState* s) { - if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) { - s->next = group->codes; - s->htree_index = 0; - s->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP; + BrotliMetablockHeaderArena* h = &s->arena.header; + if (h->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) { + h->next = group->codes; + h->htree_index = 0; + h->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP; } - while (s->htree_index < group->num_htrees) { + while (h->htree_index < group->num_htrees) { uint32_t table_size; - BrotliDecoderErrorCode result = - ReadHuffmanCode(group->alphabet_size, group->max_symbol, - s->next, &table_size, s); + BrotliDecoderErrorCode result = ReadHuffmanCode(group->alphabet_size_max, + group->alphabet_size_limit, h->next, &table_size, s); if (result != BROTLI_DECODER_SUCCESS) return result; - group->htrees[s->htree_index] = s->next; - s->next += table_size; - ++s->htree_index; + group->htrees[h->htree_index] = h->next; + h->next += table_size; + ++h->htree_index; } - s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE; + h->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE; return BROTLI_DECODER_SUCCESS; } @@ -985,15 +994,16 @@ BrotliDecoderState* s) { BrotliBitReader* br = &s->br; BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS; + BrotliMetablockHeaderArena* h = &s->arena.header; - switch ((int)s->substate_context_map) { + switch ((int)h->substate_context_map) { case BROTLI_STATE_CONTEXT_MAP_NONE: result = DecodeVarLenUint8(s, br, num_htrees); if (result != BROTLI_DECODER_SUCCESS) { return result; } (*num_htrees)++; - s->context_index = 0; + h->context_index = 0; BROTLI_LOG_UINT(context_map_size); BROTLI_LOG_UINT(*num_htrees); *context_map_arg = @@ -1005,7 +1015,7 @@ memset(*context_map_arg, 0, (size_t)context_map_size); return BROTLI_DECODER_SUCCESS; } - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX; + h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX; /* Fall through. */ case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: { @@ -1016,38 +1026,38 @@ return BROTLI_DECODER_NEEDS_MORE_INPUT; } if ((bits & 1) != 0) { /* Use RLE for zeros. */ - s->max_run_length_prefix = (bits >> 1) + 1; + h->max_run_length_prefix = (bits >> 1) + 1; BrotliDropBits(br, 5); } else { - s->max_run_length_prefix = 0; + h->max_run_length_prefix = 0; BrotliDropBits(br, 1); } - BROTLI_LOG_UINT(s->max_run_length_prefix); - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN; + BROTLI_LOG_UINT(h->max_run_length_prefix); + h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN; } /* Fall through. */ case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: { - uint32_t alphabet_size = *num_htrees + s->max_run_length_prefix; + uint32_t alphabet_size = *num_htrees + h->max_run_length_prefix; result = ReadHuffmanCode(alphabet_size, alphabet_size, - s->context_map_table, NULL, s); + h->context_map_table, NULL, s); if (result != BROTLI_DECODER_SUCCESS) return result; - s->code = 0xFFFF; - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE; + h->code = 0xFFFF; + h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE; } /* Fall through. */ case BROTLI_STATE_CONTEXT_MAP_DECODE: { - uint32_t context_index = s->context_index; - uint32_t max_run_length_prefix = s->max_run_length_prefix; + uint32_t context_index = h->context_index; + uint32_t max_run_length_prefix = h->max_run_length_prefix; uint8_t* context_map = *context_map_arg; - uint32_t code = s->code; + uint32_t code = h->code; BROTLI_BOOL skip_preamble = (code != 0xFFFF); while (context_index < context_map_size || skip_preamble) { if (!skip_preamble) { - if (!SafeReadSymbol(s->context_map_table, br, &code)) { - s->code = 0xFFFF; - s->context_index = context_index; + if (!SafeReadSymbol(h->context_map_table, br, &code)) { + h->code = 0xFFFF; + h->context_index = context_index; return BROTLI_DECODER_NEEDS_MORE_INPUT; } BROTLI_LOG_UINT(code); @@ -1068,8 +1078,8 @@ { uint32_t reps; if (!BrotliSafeReadBits(br, code, &reps)) { - s->code = code; - s->context_index = context_index; + h->code = code; + h->context_index = context_index; return BROTLI_DECODER_NEEDS_MORE_INPUT; } reps += 1U << code; @@ -1089,13 +1099,13 @@ case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: { uint32_t bits; if (!BrotliSafeReadBits(br, 1, &bits)) { - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM; + h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM; return BROTLI_DECODER_NEEDS_MORE_INPUT; } if (bits != 0) { InverseMoveToFrontTransform(*context_map_arg, context_map_size, s); } - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE; + h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE; return BROTLI_DECODER_SUCCESS; } @@ -1457,32 +1467,28 @@ } static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) { - if (s->distance_code == 0) { - --s->dist_rb_idx; - s->distance_code = s->dist_rb[s->dist_rb_idx & 3]; + int offset = s->distance_code - 3; + if (s->distance_code <= 3) { /* Compensate double distance-ring-buffer roll for dictionary items. */ - s->distance_context = 1; - } else { - int distance_code = s->distance_code << 1; - /* kDistanceShortCodeIndexOffset has 2-bit values from LSB: - 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */ - const uint32_t kDistanceShortCodeIndexOffset = 0xAAAFFF1B; - /* kDistanceShortCodeValueOffset has 2-bit values from LSB: - -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */ - const uint32_t kDistanceShortCodeValueOffset = 0xFA5FA500; - int v = (s->dist_rb_idx + - (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3; - s->distance_code = s->dist_rb[v]; - v = (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3; - if ((distance_code & 0x3) != 0) { - s->distance_code += v; + s->distance_context = 1 >> s->distance_code; + s->distance_code = s->dist_rb[(s->dist_rb_idx - offset) & 3]; + s->dist_rb_idx -= s->distance_context; + } else { + int index_delta = 3; + int delta; + int base = s->distance_code - 10; + if (s->distance_code < 10) { + base = s->distance_code - 4; } else { - s->distance_code -= v; - if (s->distance_code <= 0) { - /* A huge distance will cause a BROTLI_FAILURE() soon. - This is a little faster than failing here. */ - s->distance_code = 0x7FFFFFFF; - } + index_delta = 2; + } + /* Unpack one of six 4-bit values. */ + delta = ((0x605142 >> (4 * base)) & 0xF) - 3; + s->distance_code = s->dist_rb[(s->dist_rb_idx + index_delta) & 0x3] + delta; + if (s->distance_code <= 0) { + /* A huge distance will cause a BROTLI_FAILURE() soon. + This is a little faster than failing here. */ + s->distance_code = 0x7FFFFFFF; } } } @@ -1497,62 +1503,153 @@ } } +static BROTLI_INLINE BROTLI_BOOL SafeReadBits32( + BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) { + if (n_bits != 0) { + return BrotliSafeReadBits32(br, n_bits, val); + } else { + *val = 0; + return BROTLI_TRUE; + } +} + +/* + RFC 7932 Section 4 with "..." shortenings and "[]" emendations. + + Each distance ... is represented with a pair ... + The distance code is encoded using a prefix code... The number of extra bits + can be 0..24... Two additional parameters: NPOSTFIX (0..3), and ... + NDIRECT (0..120) ... are encoded in the meta-block header... + + The first 16 distance symbols ... reference past distances... ring buffer ... + Next NDIRECT distance symbols ... represent distances from 1 to NDIRECT... + [For] distance symbols 16 + NDIRECT and greater ... the number of extra bits + ... is given by the following formula: + + [ xcode = dcode - NDIRECT - 16 ] + ndistbits = 1 + [ xcode ] >> (NPOSTFIX + 1) + + ... +*/ + +/* + RFC 7932 Section 9.2 with "..." shortenings and "[]" emendations. + + ... to get the actual value of the parameter NDIRECT, left-shift this + four-bit number by NPOSTFIX bits ... +*/ + +/* Remaining formulas from RFC 7932 Section 4 could be rewritten as following: + + alphabet_size = 16 + NDIRECT + (max_distbits << (NPOSTFIX + 1)) + + half = ((xcode >> NPOSTFIX) & 1) << ndistbits + postfix = xcode & ((1 << NPOSTFIX) - 1) + range_start = 2 * (1 << ndistbits - 1 - 1) + + distance = (range_start + half + extra) << NPOSTFIX + postfix + NDIRECT + 1 + + NB: ndistbits >= 1 -> range_start >= 0 + NB: range_start has factor 2, as the range is covered by 2 "halves" + NB: extra -1 offset in range_start formula covers the absence of + ndistbits = 0 case + NB: when NPOSTFIX = 0, NDIRECT is not greater than 15 + + In other words, xcode has the following binary structure - XXXHPPP: + - XXX represent the number of extra distance bits + - H selects upper / lower range of distances + - PPP represent "postfix" + + "Regular" distance encoding has NPOSTFIX = 0; omitting the postfix part + simplifies distance calculation. + + Using NPOSTFIX > 0 allows cheaper encoding of regular structures, e.g. where + most of distances have the same reminder of division by 2/4/8. For example, + the table of int32_t values that come from different sources; if it is likely + that 3 highest bytes of values from the same source are the same, then + copy distance often looks like 4x + y. + + Distance calculation could be rewritten to: + + ndistbits = NDISTBITS(NDIRECT, NPOSTFIX)[dcode] + distance = OFFSET(NDIRECT, NPOSTFIX)[dcode] + extra << NPOSTFIX + + NDISTBITS and OFFSET could be pre-calculated, as NDIRECT and NPOSTFIX could + change only once per meta-block. +*/ + +/* Calculates distance lookup table. + NB: it is possible to have all 64 tables precalculated. */ +static void CalculateDistanceLut(BrotliDecoderState* s) { + BrotliMetablockBodyArena* b = &s->arena.body; + uint32_t npostfix = s->distance_postfix_bits; + uint32_t ndirect = s->num_direct_distance_codes; + uint32_t alphabet_size_limit = s->distance_hgroup.alphabet_size_limit; + uint32_t postfix = 1u << npostfix; + uint32_t j; + uint32_t bits = 1; + uint32_t half = 0; + + /* Skip short codes. */ + uint32_t i = BROTLI_NUM_DISTANCE_SHORT_CODES; + + /* Fill direct codes. */ + for (j = 0; j < ndirect; ++j) { + b->dist_extra_bits[i] = 0; + b->dist_offset[i] = j + 1; + ++i; + } + + /* Fill regular distance codes. */ + while (i < alphabet_size_limit) { + uint32_t base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; + /* Always fill the complete group. */ + for (j = 0; j < postfix; ++j) { + b->dist_extra_bits[i] = (uint8_t)bits; + b->dist_offset[i] = base + j; + ++i; + } + bits = bits + half; + half = half ^ 1; + } +} + /* Precondition: s->distance_code < 0. */ static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal( int safe, BrotliDecoderState* s, BrotliBitReader* br) { - int distval; + BrotliMetablockBodyArena* b = &s->arena.body; + uint32_t code; + uint32_t bits; BrotliBitReaderState memento; HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index]; if (!safe) { - s->distance_code = (int)ReadSymbol(distance_tree, br); + code = ReadSymbol(distance_tree, br); } else { - uint32_t code; BrotliBitReaderSaveState(br, &memento); if (!SafeReadSymbol(distance_tree, br, &code)) { return BROTLI_FALSE; } - s->distance_code = (int)code; } + --s->block_length[2]; /* Convert the distance code to the actual distance by possibly - looking up past distances from the s->ringbuffer. */ + looking up past distances from the s->dist_rb. */ s->distance_context = 0; - if ((s->distance_code & ~0xF) == 0) { + if ((code & ~0xFu) == 0) { + s->distance_code = (int)code; TakeDistanceFromRingBuffer(s); - --s->block_length[2]; return BROTLI_TRUE; } - distval = s->distance_code - (int)s->num_direct_distance_codes; - if (distval >= 0) { - uint32_t nbits; - int postfix; - int offset; - if (!safe && (s->distance_postfix_bits == 0)) { - nbits = ((uint32_t)distval >> 1) + 1; - offset = ((2 + (distval & 1)) << nbits) - 4; - s->distance_code = (int)s->num_direct_distance_codes + offset + - (int)BrotliReadBits(br, nbits); - } else { - /* This branch also works well when s->distance_postfix_bits == 0. */ - uint32_t bits; - postfix = distval & s->distance_postfix_mask; - distval >>= s->distance_postfix_bits; - nbits = ((uint32_t)distval >> 1) + 1; - if (safe) { - if (!SafeReadBits(br, nbits, &bits)) { - s->distance_code = -1; /* Restore precondition. */ - BrotliBitReaderRestoreState(br, &memento); - return BROTLI_FALSE; - } - } else { - bits = BrotliReadBits(br, nbits); - } - offset = ((2 + (distval & 1)) << nbits) - 4; - s->distance_code = (int)s->num_direct_distance_codes + - ((offset + (int)bits) << s->distance_postfix_bits) + postfix; + if (!safe) { + bits = BrotliReadBits32(br, b->dist_extra_bits[code]); + } else { + if (!SafeReadBits32(br, b->dist_extra_bits[code], &bits)) { + ++s->block_length[2]; + BrotliBitReaderRestoreState(br, &memento); + return BROTLI_FALSE; } } - s->distance_code = s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES + 1; - --s->block_length[2]; + s->distance_code = + (int)(b->dist_offset[code] + (bits << s->distance_postfix_bits)); return BROTLI_TRUE; } @@ -1588,9 +1685,9 @@ *insert_length = v.insert_len_offset; if (!safe) { if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) { - insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits); + insert_len_extra = BrotliReadBits24(br, v.insert_len_extra_bits); } - copy_length = BrotliReadBits(br, v.copy_len_extra_bits); + copy_length = BrotliReadBits24(br, v.copy_len_extra_bits); } else { if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) || !SafeReadBits(br, v.copy_len_extra_bits, ©_length)) { @@ -1935,21 +2032,6 @@ return ProcessCommandsInternal(1, s); } -/* Returns the maximum number of distance symbols which can only represent - distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */ -static uint32_t BrotliMaxDistanceSymbol(uint32_t ndirect, uint32_t npostfix) { - static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28}; - static const uint32_t diff[BROTLI_MAX_NPOSTFIX + 1] = {73, 126, 228, 424}; - uint32_t postfix = 1U << npostfix; - if (ndirect < bound[npostfix]) { - return ndirect + diff[npostfix] + postfix; - } else if (ndirect > bound[npostfix] + postfix) { - return ndirect + diff[npostfix]; - } else { - return bound[npostfix] + diff[npostfix] + postfix; - } -} - BrotliDecoderResult BrotliDecoderDecompress( size_t encoded_size, const uint8_t* encoded_buffer, size_t* decoded_size, uint8_t* decoded_buffer) { @@ -2167,33 +2249,23 @@ s->state = BROTLI_STATE_UNCOMPRESSED; break; } + s->state = BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_HEADER; + /* Fall through. */ + + case BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_HEADER: { + BrotliMetablockHeaderArena* h = &s->arena.header; s->loop_counter = 0; + /* Initialize compressed metablock header arena. */ + h->sub_loop_counter = 0; + /* Make small negative indexes addressable. */ + h->symbol_lists = + &h->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1]; + h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE; + h->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE; + h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE; s->state = BROTLI_STATE_HUFFMAN_CODE_0; - break; - - case BROTLI_STATE_UNCOMPRESSED: { - result = CopyUncompressedBlockToOutput( - available_out, next_out, total_out, s); - if (result != BROTLI_DECODER_SUCCESS) { - break; - } - s->state = BROTLI_STATE_METABLOCK_DONE; - break; } - - case BROTLI_STATE_METADATA: - for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) { - uint32_t bits; - /* Read one byte and ignore it. */ - if (!BrotliSafeReadBits(br, 8, &bits)) { - result = BROTLI_DECODER_NEEDS_MORE_INPUT; - break; - } - } - if (result == BROTLI_DECODER_SUCCESS) { - s->state = BROTLI_STATE_METABLOCK_DONE; - } - break; + /* Fall through. */ case BROTLI_STATE_HUFFMAN_CODE_0: if (s->loop_counter >= 3) { @@ -2247,6 +2319,30 @@ break; } + case BROTLI_STATE_UNCOMPRESSED: { + result = CopyUncompressedBlockToOutput( + available_out, next_out, total_out, s); + if (result != BROTLI_DECODER_SUCCESS) { + break; + } + s->state = BROTLI_STATE_METABLOCK_DONE; + break; + } + + case BROTLI_STATE_METADATA: + for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) { + uint32_t bits; + /* Read one byte and ignore it. */ + if (!BrotliSafeReadBits(br, 8, &bits)) { + result = BROTLI_DECODER_NEEDS_MORE_INPUT; + break; + } + } + if (result == BROTLI_DECODER_SUCCESS) { + s->state = BROTLI_STATE_METABLOCK_DONE; + } + break; + case BROTLI_STATE_METABLOCK_HEADER_2: { uint32_t bits; if (!BrotliSafeReadBits(br, 6, &bits)) { @@ -2255,11 +2351,9 @@ } s->distance_postfix_bits = bits & BitMask(2); bits >>= 2; - s->num_direct_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES + - (bits << s->distance_postfix_bits); + s->num_direct_distance_codes = bits << s->distance_postfix_bits; BROTLI_LOG_UINT(s->num_direct_distance_codes); BROTLI_LOG_UINT(s->distance_postfix_bits); - s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits); s->context_modes = (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]); if (s->context_modes == 0) { @@ -2291,17 +2385,19 @@ /* Fall through. */ case BROTLI_STATE_CONTEXT_MAP_2: { - uint32_t num_direct_codes = - s->num_direct_distance_codes - BROTLI_NUM_DISTANCE_SHORT_CODES; - uint32_t num_distance_codes = BROTLI_DISTANCE_ALPHABET_SIZE( - s->distance_postfix_bits, num_direct_codes, - (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS : - BROTLI_MAX_DISTANCE_BITS)); - uint32_t max_distance_symbol = (s->large_window ? - BrotliMaxDistanceSymbol( - num_direct_codes, s->distance_postfix_bits) : - num_distance_codes); + uint32_t npostfix = s->distance_postfix_bits; + uint32_t ndirect = s->num_direct_distance_codes; + uint32_t distance_alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE( + npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS); + uint32_t distance_alphabet_size_limit = distance_alphabet_size_max; BROTLI_BOOL allocation_success = BROTLI_TRUE; + if (s->large_window) { + BrotliDistanceCodeLimit limit = BrotliCalculateDistanceCodeLimit( + BROTLI_MAX_ALLOWED_DISTANCE, npostfix, ndirect); + distance_alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE( + npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS); + distance_alphabet_size_limit = limit.max_alphabet_size; + } result = DecodeContextMap( s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS, &s->num_dist_htrees, &s->dist_context_map, s); @@ -2315,8 +2411,8 @@ s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]); allocation_success &= BrotliDecoderHuffmanTreeGroupInit( - s, &s->distance_hgroup, num_distance_codes, - max_distance_symbol, s->num_dist_htrees); + s, &s->distance_hgroup, distance_alphabet_size_max, + distance_alphabet_size_limit, s->num_dist_htrees); if (!allocation_success) { return SaveErrorCode(s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS)); @@ -2338,18 +2434,24 @@ result = HuffmanTreeGroupDecode(hgroup, s); if (result != BROTLI_DECODER_SUCCESS) break; s->loop_counter++; - if (s->loop_counter >= 3) { - PrepareLiteralDecoding(s); - s->dist_context_map_slice = s->dist_context_map; - s->htree_command = s->insert_copy_hgroup.htrees[0]; - if (!BrotliEnsureRingBuffer(s)) { - result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2); - break; - } - s->state = BROTLI_STATE_COMMAND_BEGIN; + if (s->loop_counter < 3) { + break; } - break; + s->state = BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_BODY; } + /* Fall through. */ + + case BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_BODY: + PrepareLiteralDecoding(s); + s->dist_context_map_slice = s->dist_context_map; + s->htree_command = s->insert_copy_hgroup.htrees[0]; + if (!BrotliEnsureRingBuffer(s)) { + result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2); + break; + } + CalculateDistanceLut(s); + s->state = BROTLI_STATE_COMMAND_BEGIN; + /* Fall through. */ case BROTLI_STATE_COMMAND_BEGIN: /* Fall through. */ diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/dec/huffman.h nodejs-mozilla-12.22.12/deps/brotli/c/dec/huffman.h --- nodejs-mozilla-12.18.1/deps/brotli/c/dec/huffman.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/dec/huffman.h 2022-04-05 07:16:59.000000000 +0000 @@ -18,12 +18,6 @@ #define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15 -/* Maximum possible Huffman table size for an alphabet size of (index * 32), - max code length 15 and root table bits 8. */ -static const uint16_t kMaxHuffmanTableSize[] = { - 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, - 854, 886, 920, 952, 984, 1016, 1048, 1080, 1112, 1144, 1176, 1208, 1240, 1272, - 1304, 1336, 1368, 1400, 1432, 1464, 1496, 1528}; /* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */ #define BROTLI_HUFFMAN_MAX_SIZE_26 396 /* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */ @@ -82,7 +76,7 @@ static BROTLI_INLINE HuffmanCode ConstructHuffmanCode(const uint8_t bits, const uint16_t value) { - return ((value & 0xFFFF) << 16) | (bits & 0xFF); + return (HuffmanCode) ((value & 0xFFFF) << 16) | (bits & 0xFF); } #define BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(H) uint32_t __fastload_##H = (*H) @@ -100,7 +94,7 @@ /* Builds Huffman lookup table assuming code lengths are in symbol order. Returns size of resulting table. */ BROTLI_INTERNAL uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table, - int root_bits, const uint16_t* const symbol_lists, uint16_t* count_arg); + int root_bits, const uint16_t* const symbol_lists, uint16_t* count); /* Builds a simple Huffman table. The |num_symbols| parameter is to be interpreted as follows: 0 means 1 symbol, 1 means 2 symbols, @@ -110,13 +104,13 @@ int root_bits, uint16_t* symbols, uint32_t num_symbols); /* Contains a collection of Huffman trees with the same alphabet size. */ -/* max_symbol is needed due to simple codes since log2(alphabet_size) could be - greater than log2(max_symbol). */ +/* alphabet_size_limit is needed due to simple codes, since + log2(alphabet_size_max) could be greater than log2(alphabet_size_limit). */ typedef struct { HuffmanCode** htrees; HuffmanCode* codes; - uint16_t alphabet_size; - uint16_t max_symbol; + uint16_t alphabet_size_max; + uint16_t alphabet_size_limit; uint16_t num_htrees; } HuffmanTreeGroup; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/dec/prefix.h nodejs-mozilla-12.22.12/deps/brotli/c/dec/prefix.h --- nodejs-mozilla-12.18.1/deps/brotli/c/dec/prefix.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/dec/prefix.h 2022-04-05 07:16:59.000000000 +0000 @@ -13,24 +13,6 @@ #include "../common/constants.h" #include -/* Represents the range of values belonging to a prefix code: - [offset, offset + 2^nbits) */ -struct PrefixCodeRange { - uint16_t offset; - uint8_t nbits; -}; - -static const struct PrefixCodeRange - kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = { - { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2}, - { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3}, - { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4}, - { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5}, - { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8}, - { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12}, - {8433, 13}, {16625, 24} -}; - typedef struct CmdLutElement { uint8_t insert_len_extra_bits; uint8_t copy_len_extra_bits; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/dec/state.c nodejs-mozilla-12.22.12/deps/brotli/c/dec/state.c --- nodejs-mozilla-12.18.1/deps/brotli/c/dec/state.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/dec/state.c 2022-04-05 07:16:59.000000000 +0000 @@ -33,10 +33,7 @@ s->state = BROTLI_STATE_UNINITED; s->large_window = 0; s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE; - s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE; - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE; s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE; - s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE; s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE; s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE; @@ -59,8 +56,6 @@ s->context_map_slice = NULL; s->dist_context_map_slice = NULL; - s->sub_loop_counter = 0; - s->literal_hgroup.codes = NULL; s->literal_hgroup.htrees = NULL; s->insert_copy_hgroup.codes = NULL; @@ -84,9 +79,6 @@ s->block_type_trees = NULL; s->block_len_trees = NULL; - /* Make small negative indexes addressable. */ - s->symbol_lists = &s->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1]; - s->mtf_upper_bound = 63; s->dictionary = BrotliGetDictionary(); @@ -142,17 +134,20 @@ } BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s, - HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t max_symbol, - uint32_t ntrees) { - /* Pack two allocations into one */ - const size_t max_table_size = kMaxHuffmanTableSize[(alphabet_size + 31) >> 5]; + HuffmanTreeGroup* group, uint32_t alphabet_size_max, + uint32_t alphabet_size_limit, uint32_t ntrees) { + /* 376 = 256 (1-st level table) + 4 + 7 + 15 + 31 + 63 (2-nd level mix-tables) + This number is discovered "unlimited" "enough" calculator; it is actually + a wee bigger than required in several cases (especially for alphabets with + less than 16 symbols). */ + const size_t max_table_size = alphabet_size_limit + 376; const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size; const size_t htree_size = sizeof(HuffmanCode*) * ntrees; /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */ HuffmanCode** p = (HuffmanCode**)BROTLI_DECODER_ALLOC(s, code_size + htree_size); - group->alphabet_size = (uint16_t)alphabet_size; - group->max_symbol = (uint16_t)max_symbol; + group->alphabet_size_max = (uint16_t)alphabet_size_max; + group->alphabet_size_limit = (uint16_t)alphabet_size_limit; group->num_htrees = (uint16_t)ntrees; group->htrees = p; group->codes = (HuffmanCode*)(&p[ntrees]); diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/dec/state.h nodejs-mozilla-12.22.12/deps/brotli/c/dec/state.h --- nodejs-mozilla-12.18.1/deps/brotli/c/dec/state.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/dec/state.h 2022-04-05 07:16:59.000000000 +0000 @@ -21,6 +21,95 @@ extern "C" { #endif +/* Graphviz diagram that describes state transitions: + +digraph States { + graph [compound=true] + concentrate=true + node [shape="box"] + + UNINITED -> {LARGE_WINDOW_BITS -> INITIALIZE} + subgraph cluster_metablock_workflow { + style="rounded" + label=< METABLOCK CYCLE > + METABLOCK_BEGIN -> METABLOCK_HEADER + METABLOCK_HEADER:sw -> METADATA + METABLOCK_HEADER:s -> UNCOMPRESSED + METABLOCK_HEADER:se -> METABLOCK_DONE:ne + METADATA:s -> METABLOCK_DONE:w + UNCOMPRESSED:s -> METABLOCK_DONE:n + METABLOCK_DONE:e -> METABLOCK_BEGIN:e [constraint="false"] + } + INITIALIZE -> METABLOCK_BEGIN + METABLOCK_DONE -> DONE + + subgraph cluster_compressed_metablock { + style="rounded" + label=< COMPRESSED METABLOCK > + + subgraph cluster_command { + style="rounded" + label=< HOT LOOP > + + _METABLOCK_DONE_PORT_ [shape=point style=invis] + + { + // Set different shape for nodes returning from "compressed metablock". + node [shape=invhouse]; CMD_INNER CMD_POST_DECODE_LITERALS; + CMD_POST_WRAP_COPY; CMD_INNER_WRITE; CMD_POST_WRITE_1; + } + + CMD_BEGIN -> CMD_INNER -> CMD_POST_DECODE_LITERALS -> CMD_POST_WRAP_COPY + + // IO ("write") nodes are not in the hot loop! + CMD_INNER_WRITE [style=dashed] + CMD_INNER -> CMD_INNER_WRITE + CMD_POST_WRITE_1 [style=dashed] + CMD_POST_DECODE_LITERALS -> CMD_POST_WRITE_1 + CMD_POST_WRITE_2 [style=dashed] + CMD_POST_WRAP_COPY -> CMD_POST_WRITE_2 + + CMD_POST_WRITE_1 -> CMD_BEGIN:s [constraint="false"] + CMD_INNER_WRITE -> {CMD_INNER CMD_POST_DECODE_LITERALS} + [constraint="false"] + CMD_BEGIN:ne -> CMD_POST_DECODE_LITERALS [constraint="false"] + CMD_POST_WRAP_COPY -> CMD_BEGIN [constraint="false"] + CMD_POST_DECODE_LITERALS -> CMD_BEGIN:ne [constraint="false"] + CMD_POST_WRITE_2 -> CMD_POST_WRAP_COPY [constraint="false"] + {rank=same; CMD_BEGIN; CMD_INNER; CMD_POST_DECODE_LITERALS; + CMD_POST_WRAP_COPY} + {rank=same; CMD_INNER_WRITE; CMD_POST_WRITE_1; CMD_POST_WRITE_2} + + {CMD_INNER CMD_POST_DECODE_LITERALS CMD_POST_WRAP_COPY} -> + _METABLOCK_DONE_PORT_ [style=invis] + {CMD_INNER_WRITE CMD_POST_WRITE_1} -> _METABLOCK_DONE_PORT_ + [constraint="false" style=invis] + } + + BEFORE_COMPRESSED_METABLOCK_HEADER:s -> HUFFMAN_CODE_0:n + HUFFMAN_CODE_0 -> HUFFMAN_CODE_1 -> HUFFMAN_CODE_2 -> HUFFMAN_CODE_3 + HUFFMAN_CODE_0 -> METABLOCK_HEADER_2 -> CONTEXT_MODES -> CONTEXT_MAP_1 + CONTEXT_MAP_1 -> CONTEXT_MAP_2 -> TREE_GROUP + TREE_GROUP -> BEFORE_COMPRESSED_METABLOCK_BODY:e + BEFORE_COMPRESSED_METABLOCK_BODY:s -> CMD_BEGIN:n + + HUFFMAN_CODE_3:e -> HUFFMAN_CODE_0:ne [constraint="false"] + {rank=same; HUFFMAN_CODE_0; HUFFMAN_CODE_1; HUFFMAN_CODE_2; HUFFMAN_CODE_3} + {rank=same; METABLOCK_HEADER_2; CONTEXT_MODES; CONTEXT_MAP_1; CONTEXT_MAP_2; + TREE_GROUP} + } + METABLOCK_HEADER:e -> BEFORE_COMPRESSED_METABLOCK_HEADER:n + + _METABLOCK_DONE_PORT_ -> METABLOCK_DONE:se + [constraint="false" ltail=cluster_command] + + UNINITED [shape=Mdiamond]; + DONE [shape=Msquare]; +} + + + */ + typedef enum { BROTLI_STATE_UNINITED, BROTLI_STATE_LARGE_WINDOW_BITS, @@ -39,6 +128,7 @@ BROTLI_STATE_METABLOCK_DONE, BROTLI_STATE_COMMAND_POST_WRITE_1, BROTLI_STATE_COMMAND_POST_WRITE_2, + BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_HEADER, BROTLI_STATE_HUFFMAN_CODE_0, BROTLI_STATE_HUFFMAN_CODE_1, BROTLI_STATE_HUFFMAN_CODE_2, @@ -46,6 +136,7 @@ BROTLI_STATE_CONTEXT_MAP_1, BROTLI_STATE_CONTEXT_MAP_2, BROTLI_STATE_TREE_GROUP, + BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_BODY, BROTLI_STATE_DONE } BrotliRunningState; @@ -98,6 +189,50 @@ BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX } BrotliRunningReadBlockLengthState; +typedef struct BrotliMetablockHeaderArena { + BrotliRunningTreeGroupState substate_tree_group; + BrotliRunningContextMapState substate_context_map; + BrotliRunningHuffmanState substate_huffman; + + uint32_t sub_loop_counter; + + uint32_t repeat_code_len; + uint32_t prev_code_len; + + /* For ReadHuffmanCode. */ + uint32_t symbol; + uint32_t repeat; + uint32_t space; + + /* Huffman table for "histograms". */ + HuffmanCode table[32]; + /* List of heads of symbol chains. */ + uint16_t* symbol_lists; + /* Storage from symbol_lists. */ + uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 + + BROTLI_NUM_COMMAND_SYMBOLS]; + /* Tails of symbol chains. */ + int next_symbol[32]; + uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES]; + /* Population counts for the code lengths. */ + uint16_t code_length_histo[16]; + + /* For HuffmanTreeGroupDecode. */ + int htree_index; + HuffmanCode* next; + + /* For DecodeContextMap. */ + uint32_t context_index; + uint32_t max_run_length_prefix; + uint32_t code; + HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272]; +} BrotliMetablockHeaderArena; + +typedef struct BrotliMetablockBodyArena { + uint8_t dist_extra_bits[544]; + uint32_t dist_offset[544]; +} BrotliMetablockBodyArena; + struct BrotliDecoderStateStruct { BrotliRunningState state; @@ -110,7 +245,8 @@ brotli_free_func free_func; void* memory_manager_opaque; - /* Temporary storage for remaining input. */ + /* Temporary storage for remaining input. Brotli stream format is designed in + a way, that 64 bits are enough to make progress in decoding. */ union { uint64_t u64; uint8_t u8[8]; @@ -125,7 +261,6 @@ int dist_rb_idx; int dist_rb[4]; int error_code; - uint32_t sub_loop_counter; uint8_t* ringbuffer; uint8_t* ringbuffer_end; HuffmanCode* htree_command; @@ -153,13 +288,10 @@ uint32_t block_type_rb[6]; uint32_t distance_postfix_bits; uint32_t num_direct_distance_codes; - int distance_postfix_mask; uint32_t num_dist_htrees; uint8_t* dist_context_map; HuffmanCode* literal_htree; uint8_t dist_htree_index; - uint32_t repeat_code_len; - uint32_t prev_code_len; int copy_length; int distance_code; @@ -168,33 +300,6 @@ size_t rb_roundtrips; /* how many times we went around the ring-buffer */ size_t partial_pos_out; /* how much output to the user in total */ - /* For ReadHuffmanCode. */ - uint32_t symbol; - uint32_t repeat; - uint32_t space; - - HuffmanCode table[32]; - /* List of heads of symbol chains. */ - uint16_t* symbol_lists; - /* Storage from symbol_lists. */ - uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 + - BROTLI_NUM_COMMAND_SYMBOLS]; - /* Tails of symbol chains. */ - int next_symbol[32]; - uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES]; - /* Population counts for the code lengths. */ - uint16_t code_length_histo[16]; - - /* For HuffmanTreeGroupDecode. */ - int htree_index; - HuffmanCode* next; - - /* For DecodeContextMap. */ - uint32_t context_index; - uint32_t max_run_length_prefix; - uint32_t code; - HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272]; - /* For InverseMoveToFrontTransform. */ uint32_t mtf_upper_bound; uint32_t mtf[64 + 1]; @@ -203,10 +308,7 @@ /* States inside function calls. */ BrotliRunningMetablockHeaderState substate_metablock_header; - BrotliRunningTreeGroupState substate_tree_group; - BrotliRunningContextMapState substate_context_map; BrotliRunningUncompressedState substate_uncompressed; - BrotliRunningHuffmanState substate_huffman; BrotliRunningDecodeUint8State substate_decode_uint8; BrotliRunningReadBlockLengthState substate_read_block_length; @@ -229,6 +331,11 @@ const BrotliTransforms* transforms; uint32_t trivial_literal_contexts[8]; /* 256 bits */ + + union { + BrotliMetablockHeaderArena header; + BrotliMetablockBodyArena body; + } arena; }; typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal; @@ -241,8 +348,8 @@ BROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock( BrotliDecoderState* s); BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit( - BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t alphabet_size, - uint32_t max_symbol, uint32_t ntrees); + BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t alphabet_size_max, + uint32_t alphabet_size_limit, uint32_t ntrees); #define BROTLI_DECODER_ALLOC(S, L) S->alloc_func(S->memory_manager_opaque, L) diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references.c 2022-04-05 07:16:59.000000000 +0000 @@ -9,6 +9,7 @@ #include "./backward_references.h" #include "../common/constants.h" +#include "../common/context.h" #include "../common/dictionary.h" #include "../common/platform.h" #include @@ -119,17 +120,17 @@ #undef CAT #undef EXPAND_CAT -void BrotliCreateBackwardReferences( - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, +void BrotliCreateBackwardReferences(size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + ContextLut literal_context_lut, const BrotliEncoderParams* params, + Hasher* hasher, int* dist_cache, size_t* last_insert_len, Command* commands, size_t* num_commands, size_t* num_literals) { switch (params->hasher.type) { #define CASE_(N) \ case N: \ - CreateBackwardReferencesNH ## N( \ - num_bytes, position, ringbuffer, \ - ringbuffer_mask, params, hasher, dist_cache, \ + CreateBackwardReferencesNH ## N(num_bytes, \ + position, ringbuffer, ringbuffer_mask, \ + literal_context_lut, params, hasher, dist_cache, \ last_insert_len, commands, num_commands, num_literals); \ return; FOR_GENERIC_HASHERS(CASE_) diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references.h 2022-04-05 07:16:59.000000000 +0000 @@ -10,6 +10,7 @@ #define BROTLI_ENC_BACKWARD_REFERENCES_H_ #include "../common/constants.h" +#include "../common/context.h" #include "../common/dictionary.h" #include "../common/platform.h" #include @@ -25,10 +26,10 @@ initially the total amount of commands output by previous CreateBackwardReferences calls, and must be incremented by the amount written by this call. */ -BROTLI_INTERNAL void BrotliCreateBackwardReferences( - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, +BROTLI_INTERNAL void BrotliCreateBackwardReferences(size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + ContextLut literal_context_lut, const BrotliEncoderParams* params, + Hasher* hasher, int* dist_cache, size_t* last_insert_len, Command* commands, size_t* num_commands, size_t* num_literals); #if defined(__cplusplus) || defined(c_plusplus) diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references_hq.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references_hq.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references_hq.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references_hq.c 2022-04-05 07:16:59.000000000 +0000 @@ -11,6 +11,7 @@ #include /* memcpy, memset */ #include "../common/constants.h" +#include "../common/context.h" #include "../common/platform.h" #include #include "./command.h" @@ -26,6 +27,7 @@ extern "C" { #endif +/* BrotliCalculateDistanceCodeLimit(BROTLI_MAX_ALLOWED_DISTANCE, 3, 120). */ #define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544 static const float kInfinity = 1.7e38f; /* ~= 2 ^ 127 */ @@ -86,14 +88,10 @@ static void InitZopfliCostModel( MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams* dist, size_t num_bytes) { - uint32_t distance_histogram_size = dist->alphabet_size; - if (distance_histogram_size > BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE) { - distance_histogram_size = BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE; - } self->num_bytes_ = num_bytes; self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2); - self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size); - self->distance_histogram_size = distance_histogram_size; + self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size_limit); + self->distance_histogram_size = dist->alphabet_size_limit; if (BROTLI_IS_OOM(m)) return; } @@ -408,9 +406,12 @@ const int* starting_dist_cache, const size_t num_matches, const BackwardMatch* matches, const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) { + const size_t stream_offset = params->stream_offset; const size_t cur_ix = block_start + pos; const size_t cur_ix_masked = cur_ix & ringbuffer_mask; const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit); + const size_t dictionary_start = BROTLI_MIN(size_t, + cur_ix + stream_offset, max_backward_limit); const size_t max_len = num_bytes - pos; const size_t max_zopfli_len = MaxZopfliLen(params); const size_t max_iters = MaxZopfliCandidates(params); @@ -419,8 +420,8 @@ size_t k; size_t gap = 0; - EvaluateNode(block_start, pos, max_backward_limit, gap, starting_dist_cache, - model, queue, nodes); + EvaluateNode(block_start + stream_offset, pos, max_backward_limit, gap, + starting_dist_cache, model, queue, nodes); { const PosData* posdata = StartPosQueueAt(queue, 0); @@ -453,7 +454,7 @@ if (cur_ix_masked + best_len > ringbuffer_mask) { break; } - if (BROTLI_PREDICT_FALSE(backward > max_distance + gap)) { + if (BROTLI_PREDICT_FALSE(backward > dictionary_start + gap)) { /* Word dictionary -> ignore. */ continue; } @@ -472,6 +473,8 @@ &ringbuffer[cur_ix_masked], max_len); } else { + /* "Gray" area. It is addressable by decoder, but this encoder + instance does not have that data -> should not touch it. */ continue; } { @@ -506,7 +509,7 @@ BackwardMatch match = matches[j]; size_t dist = match.distance; BROTLI_BOOL is_dictionary_match = - TO_BROTLI_BOOL(dist > max_distance + gap); + TO_BROTLI_BOOL(dist > dictionary_start + gap); /* We already tried all possible last distance matches, so we can use normal distance code here. */ size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1; @@ -569,6 +572,7 @@ const size_t block_start, const ZopfliNode* nodes, int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* params, Command* commands, size_t* num_literals) { + const size_t stream_offset = params->stream_offset; const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin); size_t pos = 0; uint32_t offset = nodes[0].u.next; @@ -587,9 +591,10 @@ { size_t distance = ZopfliNodeCopyDistance(next); size_t len_code = ZopfliNodeLengthCode(next); - size_t max_distance = - BROTLI_MIN(size_t, block_start + pos, max_backward_limit); - BROTLI_BOOL is_dictionary = TO_BROTLI_BOOL(distance > max_distance + gap); + size_t dictionary_start = BROTLI_MIN(size_t, + block_start + pos + stream_offset, max_backward_limit); + BROTLI_BOOL is_dictionary = + TO_BROTLI_BOOL(distance > dictionary_start + gap); size_t dist_code = ZopfliNodeDistanceCode(next); InitCommand(&commands[i], ¶ms->dist, insert_length, copy_length, (int)len_code - (int)copy_length, dist_code); @@ -613,6 +618,7 @@ const BrotliEncoderParams* params, const size_t gap, const int* dist_cache, const ZopfliCostModel* model, const uint32_t* num_matches, const BackwardMatch* matches, ZopfliNode* nodes) { + const size_t stream_offset = params->stream_offset; const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin); const size_t max_zopfli_len = MaxZopfliLen(params); StartPosQueue queue; @@ -637,7 +643,7 @@ while (skip) { i++; if (i + 3 >= num_bytes) break; - EvaluateNode(position, i, max_backward_limit, gap, + EvaluateNode(position + stream_offset, i, max_backward_limit, gap, dist_cache, model, &queue, nodes); cur_match_pos += num_matches[i]; skip--; @@ -650,8 +656,9 @@ /* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */ size_t BrotliZopfliComputeShortestPath(MemoryManager* m, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, - const BrotliEncoderParams* params, - const int* dist_cache, HasherHandle hasher, ZopfliNode* nodes) { + ContextLut literal_context_lut, const BrotliEncoderParams* params, + const int* dist_cache, Hasher* hasher, ZopfliNode* nodes) { + const size_t stream_offset = params->stream_offset; const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin); const size_t max_zopfli_len = MaxZopfliLen(params); ZopfliCostModel model; @@ -662,6 +669,7 @@ size_t i; size_t gap = 0; size_t lz_matches_offset = 0; + BROTLI_UNUSED(literal_context_lut); nodes[0].length = 0; nodes[0].u.cost = 0; InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes); @@ -672,12 +680,14 @@ for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) { const size_t pos = position + i; const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit); + const size_t dictionary_start = BROTLI_MIN(size_t, + pos + stream_offset, max_backward_limit); size_t skip; size_t num_matches; - num_matches = FindAllMatchesH10(hasher, + num_matches = FindAllMatchesH10(&hasher->privat._H10, ¶ms->dictionary, ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance, - gap, params, &matches[lz_matches_offset]); + dictionary_start + gap, params, &matches[lz_matches_offset]); if (num_matches > 0 && BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) { matches[0] = matches[num_matches - 1]; @@ -692,13 +702,14 @@ } if (skip > 1) { /* Add the tail of the copy to the hasher. */ - StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN( + StoreRangeH10(&hasher->privat._H10, + ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN( size_t, pos + skip, store_end)); skip--; while (skip) { i++; if (i + HashTypeLengthH10() - 1 >= num_bytes) break; - EvaluateNode(position, i, max_backward_limit, gap, + EvaluateNode(position + stream_offset, i, max_backward_limit, gap, dist_cache, &model, &queue, nodes); skip--; } @@ -710,15 +721,14 @@ void BrotliCreateZopfliBackwardReferences(MemoryManager* m, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, - const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, + ContextLut literal_context_lut, const BrotliEncoderParams* params, + Hasher* hasher, int* dist_cache, size_t* last_insert_len, Command* commands, size_t* num_commands, size_t* num_literals) { - ZopfliNode* nodes; - nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); - if (BROTLI_IS_OOM(m)) return; + ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) return; BrotliInitZopfliNodes(nodes, num_bytes + 1); *num_commands += BrotliZopfliComputeShortestPath(m, num_bytes, - position, ringbuffer, ringbuffer_mask, params, + position, ringbuffer, ringbuffer_mask, literal_context_lut, params, dist_cache, hasher, nodes); if (BROTLI_IS_OOM(m)) return; BrotliZopfliCreateCommands(num_bytes, position, nodes, dist_cache, @@ -728,9 +738,10 @@ void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, - const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, + ContextLut literal_context_lut, const BrotliEncoderParams* params, + Hasher* hasher, int* dist_cache, size_t* last_insert_len, Command* commands, size_t* num_commands, size_t* num_literals) { + const size_t stream_offset = params->stream_offset; const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin); uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes); size_t matches_size = 4 * num_bytes; @@ -747,10 +758,16 @@ BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size); size_t gap = 0; size_t shadow_matches = 0; - if (BROTLI_IS_OOM(m)) return; + BROTLI_UNUSED(literal_context_lut); + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(num_matches) || + BROTLI_IS_NULL(matches)) { + return; + } for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) { const size_t pos = position + i; size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit); + size_t dictionary_start = BROTLI_MIN(size_t, + pos + stream_offset, max_backward_limit); size_t max_length = num_bytes - i; size_t num_found_matches; size_t cur_match_end; @@ -759,10 +776,10 @@ BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size, cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches); if (BROTLI_IS_OOM(m)) return; - num_found_matches = FindAllMatchesH10(hasher, + num_found_matches = FindAllMatchesH10(&hasher->privat._H10, ¶ms->dictionary, ringbuffer, ringbuffer_mask, pos, max_length, - max_distance, gap, params, + max_distance, dictionary_start + gap, params, &matches[cur_match_pos + shadow_matches]); cur_match_end = cur_match_pos + num_found_matches; for (j = cur_match_pos; j + 1 < cur_match_end; ++j) { @@ -777,7 +794,8 @@ matches[cur_match_pos++] = matches[cur_match_end - 1]; num_matches[i] = 1; /* Add the tail of the copy to the hasher. */ - StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, + StoreRangeH10(&hasher->privat._H10, + ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN(size_t, pos + match_len, store_end)); memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0])); i += skip; @@ -791,7 +809,7 @@ memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0])); orig_num_commands = *num_commands; nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) return; InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes); if (BROTLI_IS_OOM(m)) return; for (i = 0; i < 2; i++) { diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references_hq.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references_hq.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references_hq.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references_hq.h 2022-04-05 07:16:59.000000000 +0000 @@ -10,6 +10,7 @@ #define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ #include "../common/constants.h" +#include "../common/context.h" #include "../common/dictionary.h" #include "../common/platform.h" #include @@ -23,15 +24,17 @@ #endif BROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences(MemoryManager* m, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, + size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + ContextLut literal_context_lut, const BrotliEncoderParams* params, + Hasher* hasher, int* dist_cache, size_t* last_insert_len, Command* commands, size_t* num_commands, size_t* num_literals); BROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m, - size_t num_bytes, size_t position, const uint8_t* ringbuffer, - size_t ringbuffer_mask, const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, + size_t num_bytes, + size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, + ContextLut literal_context_lut, const BrotliEncoderParams* params, + Hasher* hasher, int* dist_cache, size_t* last_insert_len, Command* commands, size_t* num_commands, size_t* num_literals); typedef struct ZopfliNode { @@ -77,8 +80,8 @@ BROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath( MemoryManager* m, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, - const BrotliEncoderParams* params, - const int* dist_cache, HasherHandle hasher, ZopfliNode* nodes); + ContextLut literal_context_lut, const BrotliEncoderParams* params, + const int* dist_cache, Hasher* hasher, ZopfliNode* nodes); BROTLI_INTERNAL void BrotliZopfliCreateCommands( const size_t num_bytes, const size_t block_start, const ZopfliNode* nodes, diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/backward_references_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/backward_references_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -10,11 +10,13 @@ static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)( size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask, - const BrotliEncoderParams* params, - HasherHandle hasher, int* dist_cache, size_t* last_insert_len, + ContextLut literal_context_lut, const BrotliEncoderParams* params, + Hasher* hasher, int* dist_cache, size_t* last_insert_len, Command* commands, size_t* num_commands, size_t* num_literals) { + HASHER()* privat = &hasher->privat.FN(_); /* Set maximum distance, see section 9.1. of the spec. */ const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin); + const size_t position_offset = params->stream_offset; const Command* const orig_commands = commands; size_t insert_length = *last_insert_len; @@ -31,19 +33,23 @@ /* Minimum score to accept a backward reference. */ const score_t kMinScore = BROTLI_SCORE_BASE + 100; - FN(PrepareDistanceCache)(hasher, dist_cache); + BROTLI_UNUSED(literal_context_lut); + + FN(PrepareDistanceCache)(privat, dist_cache); while (position + FN(HashTypeLength)() < pos_end) { size_t max_length = pos_end - position; size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit); + size_t dictionary_start = BROTLI_MIN(size_t, + position + position_offset, max_backward_limit); HasherSearchResult sr; sr.len = 0; sr.len_code_delta = 0; sr.distance = 0; sr.score = kMinScore; - FN(FindLongestMatch)(hasher, ¶ms->dictionary, + FN(FindLongestMatch)(privat, ¶ms->dictionary, ringbuffer, ringbuffer_mask, dist_cache, position, max_length, - max_distance, gap, params->dist.max_distance, &sr); + max_distance, dictionary_start + gap, params->dist.max_distance, &sr); if (sr.score > kMinScore) { /* Found a match. Let's look for something even better ahead. */ int delayed_backward_references_in_row = 0; @@ -57,10 +63,13 @@ sr2.distance = 0; sr2.score = kMinScore; max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit); - FN(FindLongestMatch)(hasher, + dictionary_start = BROTLI_MIN(size_t, + position + 1 + position_offset, max_backward_limit); + FN(FindLongestMatch)(privat, ¶ms->dictionary, ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_length, - max_distance, gap, params->dist.max_distance, &sr2); + max_distance, dictionary_start + gap, params->dist.max_distance, + &sr2); if (sr2.score >= sr.score + cost_diff_lazy) { /* Ok, let's just write one byte for now and start a match from the next byte. */ @@ -76,18 +85,19 @@ } apply_random_heuristics = position + 2 * sr.len + random_heuristics_window_size; - max_distance = BROTLI_MIN(size_t, position, max_backward_limit); + dictionary_start = BROTLI_MIN(size_t, + position + position_offset, max_backward_limit); { /* The first 16 codes are special short-codes, and the minimum offset is 1. */ size_t distance_code = ComputeDistanceCode( - sr.distance, max_distance + gap, dist_cache); - if ((sr.distance <= (max_distance + gap)) && distance_code > 0) { + sr.distance, dictionary_start + gap, dist_cache); + if ((sr.distance <= (dictionary_start + gap)) && distance_code > 0) { dist_cache[3] = dist_cache[2]; dist_cache[2] = dist_cache[1]; dist_cache[1] = dist_cache[0]; dist_cache[0] = (int)sr.distance; - FN(PrepareDistanceCache)(hasher, dist_cache); + FN(PrepareDistanceCache)(privat, dist_cache); } InitCommand(commands++, ¶ms->dist, insert_length, sr.len, sr.len_code_delta, distance_code); @@ -105,7 +115,7 @@ range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t, range_start, position + sr.len - (sr.distance << 2))); } - FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, range_start, + FN(StoreRange)(privat, ringbuffer, ringbuffer_mask, range_start, range_end); } position += sr.len; @@ -131,7 +141,7 @@ size_t pos_jump = BROTLI_MIN(size_t, position + 16, pos_end - kMargin); for (; position < pos_jump; position += 4) { - FN(Store)(hasher, ringbuffer, ringbuffer_mask, position); + FN(Store)(privat, ringbuffer, ringbuffer_mask, position); insert_length += 4; } } else { @@ -140,7 +150,7 @@ size_t pos_jump = BROTLI_MIN(size_t, position + 8, pos_end - kMargin); for (; position < pos_jump; position += 2) { - FN(Store)(hasher, ringbuffer, ringbuffer_mask, position); + FN(Store)(privat, ringbuffer, ringbuffer_mask, position); insert_length += 2; } } diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/block_splitter.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/block_splitter.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/block_splitter.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/block_splitter.c 2022-04-05 07:16:59.000000000 +0000 @@ -132,7 +132,7 @@ { size_t literals_count = CountLiterals(cmds, num_commands); uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literals)) return; /* Create a continuous array of literals. */ CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals); /* Create the block split on the array of literals. @@ -150,7 +150,7 @@ /* Compute prefix codes for commands. */ uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands); size_t i; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(insert_and_copy_codes)) return; for (i = 0; i < num_commands; ++i) { insert_and_copy_codes[i] = cmds[i].cmd_prefix_; } @@ -170,7 +170,7 @@ uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands); size_t j = 0; size_t i; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(distance_prefixes)) return; for (i = 0; i < num_commands; ++i) { const Command* cmd = &cmds[i]; if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) { diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/block_splitter_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/block_splitter_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/block_splitter_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/block_splitter_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -219,7 +219,12 @@ uint32_t symbols[HISTOGRAMS_PER_BATCH] = { 0 }; uint32_t remap[HISTOGRAMS_PER_BATCH] = { 0 }; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(histogram_symbols) || + BROTLI_IS_NULL(block_lengths) || BROTLI_IS_NULL(all_histograms) || + BROTLI_IS_NULL(cluster_size) || BROTLI_IS_NULL(histograms) || + BROTLI_IS_NULL(pairs)) { + return; + } memset(block_lengths, 0, num_blocks * sizeof(uint32_t)); @@ -278,11 +283,11 @@ if (pairs_capacity < max_num_pairs + 1) { BROTLI_FREE(m, pairs); pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(pairs)) return; } clusters = BROTLI_ALLOC(m, uint32_t, num_clusters); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(clusters)) return; for (i = 0; i < num_clusters; ++i) { clusters[i] = (uint32_t)i; } @@ -294,7 +299,7 @@ BROTLI_FREE(m, cluster_size); new_index = BROTLI_ALLOC(m, uint32_t, num_clusters); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_index)) return; for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex; pos = 0; { @@ -386,7 +391,7 @@ return; } histograms = BROTLI_ALLOC(m, HistogramType, num_histograms); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(histograms)) return; /* Find good entropy codes. */ FN(InitialEntropyCodes)(data, length, sampling_stride_length, @@ -405,7 +410,11 @@ uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms); const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10; size_t i; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(block_ids) || + BROTLI_IS_NULL(insert_cost) || BROTLI_IS_NULL(cost) || + BROTLI_IS_NULL(switch_signal) || BROTLI_IS_NULL(new_id)) { + return; + } for (i = 0; i < iters; ++i) { num_blocks = FN(FindBlocks)(data, length, block_switch_cost, diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/brotli_bit_stream.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/brotli_bit_stream.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/brotli_bit_stream.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/brotli_bit_stream.c 2022-04-05 07:16:59.000000000 +0000 @@ -34,33 +34,18 @@ BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_LARGE_MAX_DISTANCE_BITS) /* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE == 140 */ -/* Represents the range of values belonging to a prefix code: - [offset, offset + 2^nbits) */ -typedef struct PrefixCodeRange { - uint32_t offset; - uint32_t nbits; -} PrefixCodeRange; - -static const PrefixCodeRange - kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = { - { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3}, - {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5}, - {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8}, - {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24} -}; - static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) { uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0); while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) && - len >= kBlockLengthPrefixCode[code + 1].offset) ++code; + len >= _kBrotliPrefixCodeRanges[code + 1].offset) ++code; return code; } static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code, uint32_t* n_extra, uint32_t* extra) { *code = BlockLengthPrefixCode(len); - *n_extra = kBlockLengthPrefixCode[*code].nbits; - *extra = len - kBlockLengthPrefixCode[*code].offset; + *n_extra = _kBrotliPrefixCodeRanges[*code].nbits; + *extra = len - _kBrotliPrefixCodeRanges[*code].offset; } typedef struct BlockTypeCodeCalculator { @@ -450,7 +435,7 @@ const size_t max_tree_size = 2 * length + 1; HuffmanTree* tree = BROTLI_ALLOC(m, HuffmanTree, max_tree_size); uint32_t count_limit; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tree)) return; for (count_limit = 1; ; count_limit *= 2) { HuffmanTree* node = tree; size_t l; @@ -714,7 +699,7 @@ } rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(rle_symbols)) return; MoveToFrontTransform(context_map, context_map_size, rle_symbols); RunLengthCodeZeros(context_map_size, rle_symbols, &num_rle_symbols, &max_run_length_prefix); @@ -956,23 +941,21 @@ size_t pos = start_pos; size_t i; - uint32_t num_distance_symbols = params->dist.alphabet_size; - uint32_t num_effective_distance_symbols = num_distance_symbols; + uint32_t num_distance_symbols = params->dist.alphabet_size_max; + uint32_t num_effective_distance_symbols = params->dist.alphabet_size_limit; HuffmanTree* tree; ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode); BlockEncoder literal_enc; BlockEncoder command_enc; BlockEncoder distance_enc; const BrotliDistanceParams* dist = ¶ms->dist; - if (params->large_window && - num_effective_distance_symbols > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) { - num_effective_distance_symbols = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS; - } + BROTLI_DCHECK( + num_effective_distance_symbols <= BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS); StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tree)) return; InitBlockEncoder(&literal_enc, BROTLI_NUM_LITERAL_SYMBOLS, mb->literal_split.num_types, mb->literal_split.types, mb->literal_split.lengths, mb->literal_split.num_blocks); @@ -1163,7 +1146,7 @@ uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; HuffmanTree* tree; - uint32_t num_distance_symbols = params->dist.alphabet_size; + uint32_t num_distance_symbols = params->dist.alphabet_size_max; StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); @@ -1177,7 +1160,7 @@ BrotliWriteBits(13, 0, storage_ix, storage); tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tree)) return; BuildAndStoreHuffmanTree(lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_NUM_LITERAL_SYMBOLS, tree, lit_depth, lit_bits, @@ -1206,7 +1189,7 @@ BROTLI_BOOL is_last, const BrotliEncoderParams* params, const Command* commands, size_t n_commands, size_t* storage_ix, uint8_t* storage) { - uint32_t num_distance_symbols = params->dist.alphabet_size; + uint32_t num_distance_symbols = params->dist.alphabet_size_max; uint32_t distance_alphabet_bits = Log2FloorNonZero(num_distance_symbols - 1) + 1; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/cluster_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/cluster_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/cluster_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/cluster_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -215,7 +215,7 @@ uint32_t next_index; HistogramType* tmp; size_t i; - if (BROTLI_IS_OOM(m)) return 0; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_index)) return 0; for (i = 0; i < length; ++i) { new_index[i] = kInvalidIndex; } @@ -229,7 +229,7 @@ /* TODO: by using idea of "cycle-sort" we can avoid allocation of tmp and reduce the number of copying by the factor of 2. */ tmp = BROTLI_ALLOC(m, HistogramType, next_index); - if (BROTLI_IS_OOM(m)) return 0; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tmp)) return 0; next_index = 0; for (i = 0; i < length; ++i) { if (new_index[symbols[i]] == next_index) { @@ -259,7 +259,10 @@ HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1); size_t i; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(cluster_size) || + BROTLI_IS_NULL(clusters) || BROTLI_IS_NULL(pairs)) { + return; + } for (i = 0; i < in_size; ++i) { cluster_size[i] = 1; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/command.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/command.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/command.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/command.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,28 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +#include "./command.h" + +#include + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +const uint32_t kBrotliInsBase[BROTLI_NUM_INS_COPY_CODES] = { + 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, + 34, 50, 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594}; +const uint32_t kBrotliInsExtra[BROTLI_NUM_INS_COPY_CODES] = { + 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24}; +const uint32_t kBrotliCopyBase[BROTLI_NUM_INS_COPY_CODES] = { + 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, + 22, 30, 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118}; +const uint32_t kBrotliCopyExtra[BROTLI_NUM_INS_COPY_CODES] = { + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24}; + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/command.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/command.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/command.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/command.h 2022-04-05 07:16:59.000000000 +0000 @@ -20,14 +20,14 @@ extern "C" { #endif -static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, - 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 }; -static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, - 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 }; -static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30, - 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 }; -static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, - 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 }; +BROTLI_INTERNAL extern const uint32_t + kBrotliInsBase[BROTLI_NUM_INS_COPY_CODES]; +BROTLI_INTERNAL extern const uint32_t + kBrotliInsExtra[BROTLI_NUM_INS_COPY_CODES]; +BROTLI_INTERNAL extern const uint32_t + kBrotliCopyBase[BROTLI_NUM_INS_COPY_CODES]; +BROTLI_INTERNAL extern const uint32_t + kBrotliCopyExtra[BROTLI_NUM_INS_COPY_CODES]; static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) { if (insertlen < 6) { @@ -89,19 +89,19 @@ } static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) { - return kInsBase[inscode]; + return kBrotliInsBase[inscode]; } static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) { - return kInsExtra[inscode]; + return kBrotliInsExtra[inscode]; } static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) { - return kCopyBase[copycode]; + return kBrotliCopyBase[copycode]; } static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) { - return kCopyExtra[copycode]; + return kBrotliCopyExtra[copycode]; } typedef struct Command { diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/compress_fragment_two_pass.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/compress_fragment_two_pass.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/compress_fragment_two_pass.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/compress_fragment_two_pass.c 2022-04-05 07:16:59.000000000 +0000 @@ -524,7 +524,7 @@ static BROTLI_BOOL ShouldCompress( const uint8_t* input, size_t input_size, size_t num_literals) { double corpus_size = (double)input_size; - if (num_literals < MIN_RATIO * corpus_size) { + if ((double)num_literals < MIN_RATIO * corpus_size) { return BROTLI_TRUE; } else { uint32_t literal_histo[256] = { 0 }; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/dictionary_hash.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/dictionary_hash.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/dictionary_hash.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/dictionary_hash.c 2022-04-05 07:16:59.000000000 +0000 @@ -13,1107 +13,1833 @@ extern "C" { #endif -BROTLI_INTERNAL const uint16_t kStaticDictionaryHash[32768] = { -32072,0,0,0,0,0,0,0,0,21860,0,0,0,0,0,0,0,40486,0,0,0,0,0,45798,0,0,0,0,0,0,1292 -,0,0,0,0,4964,278,23717,0,19972,0,0,0,0,0,0,0,0,0,0,0,0,2126,16102,0,0,0,14437,0 -,0,0,0,0,0,0,26727,2253,0,0,17252,0,0,0,0,0,0,0,0,0,3622,0,0,0,0,22984,0,0,0,0,0 -,0,16647,0,34247,0,0,0,0,0,48486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19532,0,0,24004,0,0,0,9828,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,31974,0,0,0,0,0,0,0,0,20650,2404,0,20773,1677,9031,0,6404,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6761,7206 -,0,0,21992,22983,0,0,3529,0,1864,0,0,0,0,0,0,11046,0,0,9641,0,0,0,6507,0,0,36934 -,21576,62375,0,0,0,0,0,0,0,0,0,8294,0,0,0,0,0,0,0,40807,0,0,0,39398,8136,0,0,0,0 -,0,0,0,8875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7941,0,0,25609,0,0,0,936, -3716,3213,15687,0,0,0,0,0,52519,0,17381,0,0,0,0,1320,5797,0,21029,0,0,6472,807,0 -,0,0,0,0,0,0,0,0,0,13545,0,0,0,3624,0,0,0,29674,30820,0,31237,0,6596,0,0,0,0,0,0 -,0,0,0,64070,0,0,0,0,0,0,0,0,0,0,0,22278,0,37446,0,0,0,0,7240,423,0,24612,21705, -17636,0,0,0,0,0,0,1833,0,0,0,328,6021,0,0,0,19974,0,0,0,0,0,0,0,0,0,62119,4178,0 -,0,0,0,12100,8617,0,0,16900,0,36678,0,0,0,35366,0,51718,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,20998,0,62086,0,0,0,0,0,5542,0,0,0,0,0,0,0,0,0,0,0,14629,10952,25927,0,0,0 -,0,19849,0,0,0,0,0,0,0,30952,3046,14314,12998,0,0,0,15268,0,40582,30216,62118,0, -0,0,20132,0,0,0,0,0,12005,0,0,0,52358,0,0,0,0,24778,0,44,33095,0,0,0,0,0,26372,0 -,0,0,0,0,3781,0,0,17928,9479,0,0,0,0,0,0,0,0,32297,28613,0,0,0,0,0,0,0,0,0,0,0,0 -,0,47174,11723,0,0,0,0,0,0,0,0,0,2536,55143,0,0,6410,0,0,0,0,0,0,0,0,56294,11914 -,0,529,0,30184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8261,0,0,28808,58854,22633, -965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64135,0,0,331,3684,0,1605,0,0,0,0,0,0, -0,0,0,0,16650,37,0,23622,3144,15429,0,0,0,0,0,0,0,0,0,0,22443,69,0,0,0,0,0,0,0,0 -,17832,0,0,0,0,0,0,0,0,0,11113,0,0,0,0,18309,0,0,0,0,0,0,0,0,0,26630,0,0,25512, -25895,0,0,0,0,0,0,0,0,0,0,0,16901,0,0,0,27558,0,0,9418,0,0,0,3508,0,0,0,0,0,0,0, -0,37990,9289,8517,0,0,0,0,1578,1604,23944,0,0,14916,12781,0,0,0,0,0,0,0,12105,0, -16617,0,0,0,0,0,0,0,0,0,0,0,0,21348,11240,28870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,5772,0,0,27812,0,0,0,0,0,0,0,8324,0,0,0,0,0,0,0,0,0,0,16748,1157,0,0,18794, -16324,25898,935,8333,0,0,0,0,0,0,0,0,18246,0,18086,0,46854,0,0,0,0,0,0,339,0,0, -25188,12780,12166,6409,0,0,0,0,16516,0,27012,28395,0,0,0,0,0,0,0,1420,0,0,0,9768 -,52967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,324,0,0,0,0,0,0,0,0,0,64998,0,0,0,0,0, -21893,0,0,0,0,0,47366,0,0,0,870,0,0,0,12646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,26020,16360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,0,0,0,6601,15878,0,0,0,0,0, -29092,0,28516,0,0,0,0,0,0,0,0,0,21988,0,0,0,42950,0,0,0,0,0,0,0,0,0,0,5133,1318, -0,0,0,0,0,0,0,0,0,0,0,54982,24904,0,0,0,0,0,0,0,0,0,0,51526,0,0,0,0,0,3685,0,0,0 -,0,10062,9412,0,0,0,31460,5708,6181,0,0,0,0,0,0,0,0,0,5575,0,0,0,0,0,0,0,0,0,0, -27144,57478,0,0,0,0,0,0,7084,0,21993,53126,0,0,0,0,8397,0,0,5733,0,0,0,0,0,2116, -0,24742,0,11271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,4873,0,0,38310,0,0,0,0,0, -0,0,0,0,0,0,0,17932,0,0,18053,0,0,0,25510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17798,0, -26214,0,0,0,0,0,0,0,0,23016,17415,20392,164,0,0,0,0,0,0,0,0,0,0,0,3239,0,46119,0 -,0,0,28580,0,0,0,0,0,0,0,0,0,7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41478,0,0,31016, -55334,10056,1924,0,0,0,0,0,36614,0,36711,0,0,0,0,0,0,0,0,0,0,13994,59303,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,26501,0,5639,0,0,0,0,0,0,13897,1253,0,0,0,0,0,5095,0,0,0, -28869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8646,0,0,0,0,25641,17796,0,0,0,0,0,0,0, -13316,620,6309,11819,0,0,0,0,0,0,0,0,0,904,1095,0,24229,0,0,28744,49703,0,23077, -0,0,0,0,32392,0,0,0,0,35271,0,28740,5866,0,0,0,0,0,0,0,4361,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7917,8869,0,0,0,13924,0,0,0,0, -0,41958,0,0,0,0,0,0,6766,13989,0,0,0,903,0,0,24010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,64390,0,22468,0,25861,0,0,0,0,23656,5317,0,0,0,0,0,0,23017,5445,16009 -,0,0,0,0,0,0,0,0,48006,10473,0,0,14404,0,0,0,42183,0,0,0,51270,0,0,10602,24132,0 -,0,0,0,0,43782,0,0,17834,0,0,0,25576,27205,0,0,0,0,0,0,0,0,29066,0,0,0,0,0,626, -1988,14700,0,0,0,0,0,0,0,0,0,0,0,0,57670,0,0,0,0,0,0,0,0,0,44710,0,0,0,0,3848, -7623,0,0,0,0,0,0,0,0,0,0,0,42374,0,0,0,0,0,0,0,0,19272,6436,0,0,5256,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,19685,0,0,0,0,0,0,0,0,0,0,0,0,0,39783,0,0,0,0,30984,0,0,0,0,0,0 -,28230,0,0,0,29028,10538,3205,0,0,0,0,0,0,0,0,0,0,0,5636,840,295,0,0,8488,8198,0 -,0,0,0,0,0,0,0,0,20580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4074,19526,0,0,0,0, -31144,64038,0,0,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,0,0,17706,0,0,0,0,0,0,50630,0, -50503,0,0,0,0,0,0,0,0,0,0,0,25446,0,0,0,13831,0,0,0,0,0,0,2696,4039,0,0,0,0, -25288,0,12076,2054,0,48934,0,0,0,0,16969,59431,17259,35335,0,0,0,0,0,0,0,0,0,0,0 -,0,31275,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,776,839,0,0,29386,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,5864,12134,0,0,0,0,0,0,0,25349,0,0,0,0,0,0,0,0,0,61447 -,0,0,0,0,0,0,0,0,0,24678,0,0,0,63335,0,28836,8142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4494,0,0,0,0,0,14088,1188,0,16260,0,0,0, -16421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,17060,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24076,29445,0,33543,0,4901,0 -,0,12522,0,0,62471,0,0,0,0,0,0,0,0,0,0,4046,0,0,0,0,20486,0,15460,2217,51719,0,0 -,0,0,0,23495,0,0,0,0,0,0,15370,0,15849,0,15113,0,0,0,0,0,0,0,0,27972,7337,0,0,0, -0,30342,0,0,0,0,0,0,0,0,32299,23940,0,17766,0,0,0,0,0,0,6184,0,20904,0,0,0,0,0,0 -,0,0,0,0,31492,0,0,0,5509,0,0,0,0,0,0,0,0,2669,50182,0,0,12299,0,0,0,0,0,0,0, -5257,28167,0,0,0,0,0,0,0,0,0,0,0,11750,3890,0,0,26500,0,0,0,0,0,0,0,49318,0,0,0, -0,0,0,0,10981,0,0,0,0,0,0,0,0,17961,1831,0,0,0,0,0,0,0,29638,0,0,0,0,26473,0, -6216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,28683,39975 -,0,0,0,0,0,51654,0,0,0,27527,0,0,0,0,0,0,0,0,30859,3268,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,18212,0,0,0,0,25448,65446,0,0,0,0, -0,0,3337,1670,0,0,0,0,0,19332,0,0,0,0,24936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1043,0 -,0,0,0,15814,0,21670,0,0,0,0,0,0,0,16263,0,0,0,0,0,0,0,0,0,32454,0,30630,0,0, -20170,9926,0,0,0,18247,0,0,14376,0,2056,17191,0,0,0,0,0,0,0,7812,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,22474,52806,1588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0, -0,0,0,40934,0,0,0,0,0,0,0,28677,0,0,5714,0,0,0,0,0,0,0,0,0,0,0,0,0,25865,22246,0 -,0,0,0,17256,35751,0,0,0,0,0,0,0,0,8236,0,32108,0,0,0,43,14342,0,16517,0,0,30732 -,0,4012,133,0,40583,971,23942,0,0,27275,0,0,0,204,0,0,27140,7564,44327,27592, -57958,0,0,0,0,22344,25701,0,0,0,0,0,0,0,19524,31755,0,0,28102,0,59111,0,0,0,0,0, -0,0,12261,0,44934,0,0,0,0,31560,0,11114,0,0,0,0,0,0,0,0,0,0,0,18953,18311,0, -45159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -19399,0,0,0,0,0,0,0,0,0,0,0,0,0,58534,0,0,0,0,0,0,0,0,0,0,0,0,22411,23943,0,0,0, -0,0,0,11690,0,0,4069,0,0,2668,6342,0,0,0,0,0,0,27658,1766,0,0,0,0,23240,56070,0, -0,0,0,0,0,0,0,0,0,0,0,0,34119,0,24453,0,0,0,0,21867,0,17610,9894,0,0,27976,38790 -,0,0,0,43654,0,31559,12202,23142,0,0,0,50343,0,0,0,0,0,32806,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,49895,0,0,0,0,15786,4263,0,0,0,0,4746,3814,0,0,0,0,0,0,17192, -453,17323,0,20328,4036,0,0,0,15844,0,0,0,0,27561,31940,32296,0,0,0,0,0,0,0,11499 -,11782,0,0,0,0,9738,50471,0,0,0,0,0,35430,0,0,0,0,0,29734,0,0,0,36551,0,0,0,0, -9257,5606,0,13829,0,7015,0,0,0,0,0,25127,0,0,19051,0,0,0,0,0,0,0,0,0,0,0,0,0, -2572,0,0,0,0,0,0,29797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42342,0,0,0,0,9293, -0,17896,56038,4077,0,0,0,29899,37351,0,30823,0,8326,0,0,0,18342,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18569,54054,0,0,0,0,0,0,0,0,0,37254,0,0,31433, -61510,0,2022,0,0,0,0,0,25381,0,0,0,0,0,0,0,0,0,0,0,0,0,2149,25289,0,0,0,0,0,0,0, -0,0,0,12516,14185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8676,0,0,0,0,0 -,0,0,0,0,0,0,36486,0,0,0,0,10889,9607,0,28711,0,0,0,0,0,0,0,0,0,0,28490,0,0,0,0, -26181,10283,1701,0,0,0,0,0,0,0,0,0,14980,0,7783,0,27846,0,0,0,56486,3892,0,0,0, -5770,16583,0,26309,13422,20292,0,0,0,0,0,0,0,0,0,28742,0,0,0,0,14536,1158,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25801,0,0,0,0,0,0,0,0,0,0,0,0,42438,0,3332,0,0 -,0,0,0,0,0,0,0,8327,0,0,0,0,0,0,0,0,0,0,0,0,17353,1447,0,0,8427,48518,1359,0,0,0 -,0,0,14986,0,32168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9230,2791,0,0,0,0,0,0,0,0, -16073,31623,4269,0,0,0,0,0,0,4519,0,0,27912,58950,0,0,0,0,0,0,0,0,8361,19812,0,0 -,0,0,6056,7877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21701,0,0,0,0,0,0,0,0,0,0,0 -,0,9128,1125,0,16548,0,0,0,0,0,0,0,0,0,0,17292,6854,21352,0,2380,0,0,4007,0,0,0, -0,0,24357,4202,0,0,0,0,0,0,0,0,0,0,0,0,0,10664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,42823,3022,0,0,0,0,0,0,0,0,0,0,0,0,14373,0,20677,3304,2759,20522,64903,0, -0,0,38,0,0,0,0,0,0,0,0,0,0,0,27814,2802,8870,3758,1255,0,0,0,0,0,0,0,0,30027, -9510,0,0,0,0,17864,14855,0,0,0,0,0,0,0,0,0,0,23404,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -51462,0,0,0,0,0,0,0,45734,0,0,23467,32327,0,0,10826,52999,0,0,0,33222,31336, -64326,0,0,0,0,0,0,0,32166,0,0,3891,0,0,0,7017,645,0,0,0,0,0,0,27915,46087,0,0,0, -21863,0,34246,0,0,16715,0,0,0,0,14052,21416,0,0,0,0,0,0,0,0,39846,0,0,0,0,0, -38982,0,0,17512,7460,0,0,0,0,0,0,0,0,0,15428,0,0,0,0,0,0,0,28356,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,25445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11879,0,0,0,0,0,0 -,0,0,0,0,0,0,0,19911,0,20007,0,0,0,10855,943,0,0,10821,0,0,0,0,4170,0,0,0,0,0,0, -0,0,0,9836,0,0,0,0,0,0,0,0,0,0,65415,0,0,0,0,0,0,0,0,9865,24646,0,0,0,0,0,40519, -0,0,0,0,0,0,0,0,0,12804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22091,23655,0,0,0,0,0,0, -0,31686,0,0,0,58599,0,0,0,0,0,0,0,0,0,0,0,0,0,19620,0,0,0,0,0,0,0,0,0,0,0,0,0, -24421,0,28100,0,0,0,31268,0,3204,0,0,0,0,0,0,0,0,0,14822,0,0,0,0,19947,10182,0,0 -,9480,14821,4398,0,0,14532,0,0,0,48871,1873,0,0,0,0,0,0,0,589,1541,0,0,0,0,0, -23333,0,0,0,14149,0,0,0,0,1296,14374,0,27300,0,0,0,0,0,0,7276,0,0,0,0,0,0,47718, -0,0,0,0,0,0,0,0,0,0,5164,1765,0,14405,0,37574,1994,0,6636,0,0,0,0,0,0,0,0,27815, -0,0,0,0,2568,6820,0,0,0,0,0,0,0,0,0,0,11336,26247,0,0,23912,0,0,0,30536,0,0, -34342,0,17799,0,0,0,22149,0,6118,0,25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,26600,5190,0,0,1142,0,0,0,0,0,0,0,0,39527,0,0,0,0,0,39494,0,0,0,0,0,0,0 -,0,0,0,3085,0,0,0,0,0,0,0,4786,0,0,0,28873,6532,0,0,26664,0,9193,11719,0,0,0,0,0 -,0,31752,64646,0,0,0,0,0,0,0,0,0,0,0,11397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25094,0 -,0,18153,20167,0,0,0,17254,0,0,878,0,0,0,0,0,0,0,0,0,0,24166,0,0,0,0,0,0,0,0,0,0 -,0,0,26059,0,0,0,0,0,0,0,0,0,0,0,0,0,31592,0,0,8167,24362,6212,0,34758,0,0,0,0,0 -,0,32520,0,0,44679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17989,8681,29222,0,0,0, -0,0,0,0,0,10251,4902,1452,15207,0,0,0,0,0,0,0,22822,0,10469,0,0,0,0,0,0,19337, -17670,107,11494,0,0,0,0,27305,2565,0,0,0,0,0,0,0,64518,200,28389,0,0,0,0,31208,0 -,30762,0,0,0,0,0,29321,60518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3209,3237, -12490,22663,0,0,0,18789,31464,16391,0,0,0,0,0,0,0,0,0,0,0,20646,0,0,0,27238,0,0, -0,0,0,15940,4488,6951,0,0,0,46342,0,0,0,0,0,0,0,0,0,28965,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,20584,3367,0,25350,0,0,0,0,0,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,17125, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55943,0,0,0,0,0,24133,0,0,0,0,0,0,0,0,0,0,0,0,2929 -,0,0,50086,0,2918,25356,30052,115,11846,0,0,0,0,3056,0,0,0,0,17639,239,19815,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36806,0,0,0,0,0,0,0,0,0,0,0,0,0,21479,0,0,0,0,0, -28420,11786,4772,0,0,3368,36295,0,31463,0,0,14665,996,0,20582,0,0,0,9988,0,23685 -,0,0,0,52551,0,0,0,0,0,0,0,7556,0,0,0,0,0,0,0,1895,2186,0,0,0,0,0,27755,25447,0, -0,0,0,31052,63270,0,0,0,0,0,0,0,36742,0,24804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,31048,0,0,0,0,0,0,0,0,0,21290,2276,0,0,0,0,26475,0,0,0,0,0,0,0,0,0 -,0,15332,0,0,0,0,0,0,0,0,3176,19431,0,0,0,0,0,0,0,62726,0,0,0,25380,0,0,27883, -1316,0,0,7724,3015,0,0,0,0,6697,0,0,47910,0,0,0,0,0,0,0,0,0,3141,0,0,0,14820,0,0 -,0,0,9326,0,0,0,0,0,0,0,0,0,0,31493,0,0,0,0,0,6566,0,0,0,0,0,0,6569,1348,0,25638 -,0,0,0,0,0,20324,0,0,17067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11876,0,41030,0,0,0,26405 -,0,0,0,0,0,0,0,0,0,11431,28137,14950,0,10151,0,0,0,0,0,0,0,29574,0,0,0,0,27176, -57446,0,0,0,0,28650,57574,1387,0,0,0,0,0,0,0,0,0,0,58247,0,0,0,0,0,0,0,16805,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3526,0,15781,0,5572,13352,0,0,0,0,0,18665 -,23463,0,0,0,0,0,0,15405,6885,0,0,0,0,15272,0,0,0,0,0,0,0,0,9861,0,0,0,0,0,0,0,0 -,9512,4037,0,0,11563,49639,0,0,0,0,0,0,27880,57830,0,0,0,0,0,41831,0,21924,0,0,0 -,0,0,0,0,25509,0,27462,0,18085,0,0,0,0,0,0,0,0,0,0,0,0,13898,8068,26441,0,0,0,0, -0,0,25316,0,0,0,0,16298,7397,5706,19239,0,0,0,0,0,0,0,0,1392,50919,0,0,0,0,0, -53863,0,0,0,0,1451,0,0,0,0,0,0,0,0,0,0,35847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,17801,15813,0,12740,0,0,0,32967,0,0,0,0,0,0,5389,0,0,0,0,0,0,0,0,0,0,31143,0, -20548,0,0,0,0,0,0,0,0,0,51686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -12109,19015,0,34983,0,21732,3600,0,0,0,0,47750,17288,43975,22857,47559,0,0,0,0, -26408,48358,0,0,0,0,0,0,0,0,0,0,0,0,0,30470,0,0,23560,4581,0,22404,0,49286,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49831,0,0,0,27525,31691,7,0,0,25835,0,0,0,0,0, -4201,16485,0,20676,0,0,0,0,3753,23303,16264,3878,0,0,0,0,0,0,11434,0,0,0,0,0,0, -7589,0,0,0,0,0,0,0,0,0,57095,0,0,0,0,0,0,0,0,0,0,0,22820,11146,49158,0,23623,0,0 -,0,0,0,0,0,13893,0,0,0,0,0,0,11722,60071,1258,0,0,0,0,0,0,18564,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,27945,0,0,0,0,5479,0,20006,17608,3431,10988,30180,0,0,0,0,0,0,0, -24581,14,0,0,0,0,0,0,25572,0,0,0,28612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53543,0 -,0,0,0,0,0,0,0,0,0,0,33670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8710,0,14116,0,0,116, -292,0,0,0,37831,0,43078,0,0,0,0,0,0,0,0,21832,0,0,32134,783,0,0,30982,0,0,0,68,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5932,0,0,0,18505, -15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,16965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,17797,0,0,0,0,0,0,520,42150,0,0,3122,0,0,0,22506,0,0,0,0,0,0,0,0,28550,0, -0,0,50278,0,0,13641,5958,0,35238,0,0,0,0,0,0,0,0,29993,18724,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,20619,9319,0,0,0,0,23977,0,5193,0,0,12196,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,24390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20105,677,0,0,0,0 -,0,0,0,0,29419,0,0,0,0,0,0,0,0,0,20266,0,0,0,0,10631,0,0,0,0,0,0,0,0,0,47655,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26628,12744,0,20648,0,0,0,432,0,0 -,0,0,0,0,0,0,0,0,646,0,25604,0,0,0,0,0,0,0,0,0,0,0,0,0,63782,0,0,0,0,24616,0,0,0 -,21291,0,0,0,0,0,0,0,0,0,0,45638,0,0,0,0,1931,0,0,0,20521,59975,0,20614,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,56231,0,0,0,0,0,29991,0,52871,0,20934,0,0,0,0,0,0,0,16871, -0,0,0,0,0,0,0,0,0,0,0,0,0,7237,0,0,0,0,0,47558,0,0,0,0,0,0,0,0,0,0,0,10406,0,0,0 -,0,0,0,0,43046,0,0,2930,0,12936,0,0,0,0,0,0,0,0,0,0,0,0,31141,0,0,0,0,0,0,0, -37639,0,17572,0,0,0,0,0,0,0,0,0,0,31240,0,0,0,0,0,688,0,0,0,0,0,1648,0,0,0,0, -10055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,6345,199,0,34982,0,0 -,0,0,0,0,0,0,0,0,0,0,0,56839,0,0,0,0,0,48902,0,13412,0,0,0,0,0,0,0,0,2441,4420,0 -,0,0,0,20428,933,0,0,0,0,0,0,0,45383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,54726,0,0,0,0,0,0,0,0,0,0,0,0,17036,741,0,0,0,0,0,0,0,27589,0,0,30282 -,18950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2248,0,0,0,0,0,0,0,0,0,25993,0,0,0, -2443,0,0,31622,0,14150,0,0,0,28679,0,0,0,0,0,0,15464,0,0,0,0,54694,0,0,0,0,0,0, -3827,0,0,0,3756,0,9897,0,0,0,0,0,19082,31239,0,0,0,0,0,0,0,0,0,0,0,24580,0,0,0,0 -,0,0,0,0,0,16580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27625,0,0,0,784,4647,32652,0,0, -63494,0,0,0,0,0,0,0,21062,0,0,0,0,0,0,0,0,0,0,3404,58470,0,32325,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,18634,2789,0,0,0,0,0,0,0,8548,0,0,0,22501,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,15881,0,0,0,0,35879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7978,17956,0,0,0, -0,0,0,0,24324,0,0,4937,0,0,0,8168,0,13420,10340,0,0,0,0,0,11780,0,0,0,0,0,0,0,0, -0,0,16712,0,0,0,0,0,0,0,17640,17991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,2953,0,0,0,0,0,0,0,9100,16806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30667,0,0, -19013,0,0,0,0,0,0,205,15334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,0,0,26248 -,52518,0,49798,0,0,0,0,0,0,0,9668,0,0,0,0,0,4742,0,0,21641,0,0,0,0,0,0,53574,0,0 -,0,0,0,0,5707,0,0,0,0,0,0,0,3018,12454,0,0,0,0,2920,262,0,0,0,0,0,0,0,0,0,0,3593 -,0,0,0,0,0,0,0,0,0,0,23910,0,0,0,0,0,0,0,55879,0,0,0,0,0,775,0,43270,5066,48967, -0,0,22986,4165,8971,44838,0,0,0,0,0,62279,272,0,0,0,0,51430,0,0,0,0,0,0,28234,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13349,0,0,0,51111,20265,13861,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,585,7494,0,0,0,0,0,0,0,0,21768,62407,0,0,0,0,7979,166,0, -0,0,0,0,0,0,0,0,38918,0,56742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16296,5767,0,0,0,0,0,0 -,0,32068,0,0,0,0,0,0,0,0,0,0,0,0,0,29796,0,0,0,0,0,0,0,0,23916,30183,0,58791,0,0 -,0,0,0,0,0,20518,0,0,0,0,8969,0,0,0,183,0,0,0,0,0,2314,17445,0,0,0,0,0,0,0,0,0, -23748,0,0,8139,4839,27914,0,0,0,0,0,0,0,0,0,0,0,0,29478,0,0,16552,26663,0,53767, -0,0,13960,8039,18696,0,0,0,0,0,0,0,0,0,0,0,782,16005,0,0,0,0,0,0,0,0,6258,56806, -16456,12455,0,0,0,0,0,0,0,23780,0,0,0,0,0,0,9355,0,0,0,7273,41063,24780,57766,0, -0,0,0,0,0,0,0,0,0,3820,2597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29225,61126,0,0,0,58439, -15691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37190,22408,967,0,0,0, -23078,26858,0,0,0,19753,0,0,0,0,0,0,0,0,0,5416,13702,0,0,0,0,0,52742,20394,38567 -,0,0,0,51079,0,0,136,8516,0,0,0,0,0,0,0,0,0,0,0,27588,0,0,0,0,0,0,0,0,0,0,531,0, -0,0,0,0,0,0,0,0,8936,5031,12520,19334,0,0,22827,30247,28074,31140,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,27497,18148,20104,59079,0,0,0,0,0,0,0,0,0,24389,0,0,6125,0,0,0,0, -9541,0,0,24553,29095,0,0,0,0,0,0,0,25444,0,0,9643,0,0,63047,0,0,0,0,0,0,0,0,0, -39558,0,0,0,0,0,0,20620,11815,499,0,5128,2278,0,0,0,0,0,46310,0,0,0,0,0,0,0,0, -23530,40166,2440,0,0,0,0,0,0,0,0,0,0,15174,0,0,0,0,0,0,0,0,0,0,26922,0,0,0,0,0,0 -,0,0,0,0,26758,0,0,0,0,0,51911,0,0,23532,0,0,0,0,51238,25737,44486,12622,0,0,0,0 -,0,0,3078,0,9253,0,0,1128,22023,0,0,0,21350,0,16420,0,0,0,0,0,0,0,65094,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22532,0,48774,0,34503,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,9797,0,0,0,0,0,0,0,13797,0,38279,0,0,1738,0,489,46343,0,45382,0,0,0,0,0,0, -0,0,0,29030,0,0,0,0,0,0,6220,56550,0,0,0,0,0,26885,0,28806,0,0,0,0,0,0,0,0,0,0,0 -,45958,0,0,0,0,20553,49927,0,0,0,0,0,0,3019,12358,0,0,0,0,0,0,0,0,0,0,26571, -13319,0,0,653,23399,0,0,0,0,0,0,0,0,22316,0,0,21188,0,0,0,0,0,0,0,0,0,27556,0,0, -0,0,0,0,0,27878,21483,27653,0,29701,237,0,10632,0,0,0,0,33766,0,0,0,0,0,0,31563, -0,0,0,0,0,1416,2439,0,0,0,0,0,0,0,0,0,0,9611,0,0,0,0,0,0,0,5611,16581,26601, -35462,0,0,0,26756,0,59271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26984,57734,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7882,0,0,0,19528,6469,0,0,1161,0,0,0,7688,20935,425,0, -0,0,0,0,0,0,0,12519,0,12902,0,0,0,0,0,0,0,0,0,0,2411,0,11725,26086,0,0,20201,0,0 -,0,0,0,0,0,0,11045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30471,0,0,0,0,0,0,0,0,0,0,0, -21541,1141,21190,0,9188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,1093,0,0,0,0,0,0,0,0, -4842,0,13672,0,0,12230,0,0,0,10532,0,0,8937,0,0,0,0,0,0,0,0,0,0,28996,0,0,11720, -26982,0,46182,0,43911,31754,0,1160,3940,0,20772,0,0,0,0,0,24549,0,32582,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,31845,0,0,0,0,0,0,0,2310,11788,0,0,43047,0,0,0,18853,0 -,0,0,0,0,0,0,0,0,63622,0,0,7048,17318,0,0,0,21957,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,1039,6279,0,0,0,0,0,0,0,0,0,0,0,0,0,12197,0,0,0,0,0,0,0,0,0, -46470,0,0,24,19719,0,0,0,0,0,0,0,0,0,39335,0,0,0,0,0,0,0,0,0,0,21353,3846,0,0,0, -0,0,0,0,36679,0,0,0,0,0,0,0,0,0,0,0,11268,0,0,0,0,0,9382,0,0,0,0,0,0,0,0,0,0,0,0 -,0,29926,0,33606,0,4708,2828,0,0,29543,0,0,0,0,0,29893,0,0,0,0,0,0,0,0,3663,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10920,7111,0,0,0,0,0,0,0,0,0,0 -,9384,0,0,0,0,0,0,0,0,0,0,0,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37094,0,0,0, -27110,0,0,0,0,0,0,21865,0,27753,30214,0,0,0,0,0,57895,0,0,0,0,0,0,0,0,0,0,12648, -5446,0,0,0,0,0,0,0,0,0,0,19784,17124,0,52007,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,24900,0,0,0,0,0,1476,0,65031,0,0,1205,46663,0,30023,11625, -1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10058,0,0,0,0,0,0,28455,0,0,0,0,0,0,0,0,0,0,0, -14788,0,0,0,0,16808,0,0,742,0,0,0,0,0,0,0,0,0,0,0,21636,0,0,0,0,0,0,0,0,0,0,0,0, -15944,23207,0,0,0,0,247,0,0,0,0,24743,0,0,0,5252,0,0,0,0,0,0,0,0,29961,18660, -21099,46791,0,7045,0,0,0,0,25707,0,0,17412,3828,0,0,0,0,0,0,0,0,0,0,0,5803,5637, -0,38151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60103,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,853,0,0,0,0,0,0,30215,0,0,0,0,0,0,0,8741,0,0,0,0,0,27366,0,0,0,0,171, -4070,0,0,0,0,0,0,0,0,24073,7366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,5189,0, -20932,1545,4996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7684,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6313,0,0,0,0,0,0,0,30826,0,0,0,0,0,0, -0,0,0,0,27463,0,0,0,0,0,0,0,0,0,0,21640,63303,0,0,3275,31111,0,0,0,0,0,0,0,11556 -,0,14756,0,0,0,15108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23914,28966,0,0,0,4965,0,0,0,0, -0,0,0,0,0,0,10216,5223,0,0,0,0,0,0,0,0,0,27142,0,0,1173,20198,0,0,0,0,0,56614,0, -0,0,0,0,4612,0,0,0,0,0,0,0,0,0,0,11822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17769,7910, -0,0,31880,0,0,6055,0,0,0,0,0,0,0,0,0,0,8970,0,0,0,0,0,0,0,0,0,0,0,16840,23879,0, -0,11051,0,0,0,32552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20842,13701,0,0,0,37191,7373, -10471,17482,25348,0,0,0,38502,0,0,0,0,0,0,0,0,0,21509,6058,0,0,0,0,0,0,3173,0,0, -0,9543,0,0,0,0,0,0,17768,12708,0,0,0,0,0,37030,0,0,0,0,0,0,0,0,0,0,12748,48743,0 -,11718,0,0,25194,0,0,0,9033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5028,0,30118,0,0,0,0,0, -42759,0,0,3720,0,0,0,0,0,0,25190,0,0,0,0,0,0,0,0,0,0,5450,5125,0,58086,0,0,0,0,0 -,27716,0,0,0,0,0,0,0,0,0,22052,0,0,0,0,26249,0,15947,3460,0,0,0,35814,0,0,0,7813 -,19500,32167,0,18597,0,0,0,0,0,28644,0,0,0,60743,0,0,0,0,0,29636,0,0,0,0,0,0,0,0 -,0,0,0,0,0,17220,15885,9414,9642,0,0,0,593,0,0,24228,0,0,0,0,0,40422,0,26244,0, -23109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64902,0,0,0,0,3979,60007,0,0,0,28199 -,0,0,0,43142,0,0,0,0,0,0,0,29158,0,30532,0,0,0,0,13256,0,0,0,0,16549,0,0,0,0,0, -26116,0,0,0,0,0,0,0,0,22825,0,0,0,0,0,0,0,1065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,18985,4805,0,0,0,0,0,17702,0,0,0,0,0,0,0,0,0,0,3468,0,0,0,0,13447,0,0,0 -,0,0,0,0,0,0,0,0,56871,0,0,1776,15780,0,0,2603,0,10280,31366,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,11592,3591,0,2372,0,0,0,0,0,0,0,20004,0,0,0,0,0,0,12072,518,0,0,1960, -8999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7178,32999,0,0,0,0,0,0,1641,0,0,0,0,0,0,0,6764, -9893,490,4005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25258,5541,0,14053,306,20743,0,0, -9422,0,0,0,0,0,0,0,11977,260,0,35175,0,0,0,0,0,0,0,18405,0,0,0,16582,0,0,0,22470 -,0,0,0,0,0,0,2792,0,0,0,14026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14858,3909,0,0,0 -,57671,0,0,0,0,0,0,15979,0,0,0,2794,15239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26884, -9070,0,0,0,0,51846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19499,37127,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,19205,10350,11910,0,0,0,0,15083,23108,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,15274,41735,0,56774,0,0,2825,0,14025, -389,0,0,0,0,0,0,0,0,21482,31910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20456,710,0,0,25032, -21797,0,0,0,0,0,0,0,0,0,0,32427,21252,0,30150,0,43174,0,0,0,0,0,0,0,0,0,0,0,0, -11403,0,0,1029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6892,9252,0,63206, -3496,14406,0,0,0,0,0,0,0,0,0,0,22568,0,0,21253,0,0,0,0,0,0,0,39623,0,0,10189,0,0 -,0,0,0,0,0,0,0,0,0,0,0,30729,59910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3305,0,0,0,0,0,0, -0,0,0,7660,24871,0,838,0,0,0,0,0,0,0,0,0,0,0,0,12013,13252,0,551,0,0,0,43207,0, -30567,0,0,0,0,0,0,0,0,28394,30724,0,0,0,0,0,0,0,0,0,0,22665,22725,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,29414,0,0,0,0,16074,8966,245,1445,0,0,0,0,24872,0,0,0,0, -13124,0,35527,0,0,0,0,0,0,13259,10917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -25191,0,0,0,13956,0,0,0,0,0,0,0,54631,19625,12070,3083,0,0,0,0,14436,0,0,0,0,0,0 -,0,0,0,0,0,0,0,21766,0,15463,29322,0,0,0,0,0,0,29990,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,23653,0,0,0,0,0,0,0,0,2643,0,0,21223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,4114,0,0,0,0,0,0,0,0,34790,0,0,0,0,0,0,0,16103,0,0,0,0,0,0,297,3620,3338, -10372,0,14727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29924,22473,13895, -15529,32455,30378,13540,0,28807,0,0,0,0,0,0,0,64582,18380,0,0,0,0,0,0,0,0,0,0,0, -0,38598,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32710,0,0,0,0,4590,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64935,0,0,0,0,0,0,0,0,0,0,0,0,16744,0,0, -0,0,0,0,20005,0,0,13608,1191,0,0,0,62183,0,0,0,0,0,24484,0,0,0,0,0,0,0,0,0,0, -17643,0,0,0,0,0,0,0,0,0,0,0,0,5380,0,0,32328,0,0,63814,0,0,0,2919,0,0,0,0,17034, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,60295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,7690,486,0,0,0,39270,0,49094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12555,0,0,0,0,0,0,0,0 -,0,0,0,0,20967,17993,12647,0,0,0,16036,32616,0,0,0,0,16294,8555,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35174,0,0,0,0,0,0,30346,0,0,0,0,0,0,0, -14797,3652,0,0,8268,12934,0,54950,0,0,0,0,2632,33959,0,23175,0,0,0,0,0,36262,0,0 -,0,0,0,0,32684,26918,0,32676,0,0,0,0,0,0,0,0,0,0,15625,11943,1206,0,0,0,0,18052, -0,0,0,0,0,16422,0,0,0,26404,0,0,28777,0,0,24902,0,0,408,45351,0,35719,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,3658,17446,0,165,0,0,0,0,0,0,0,6151,0,0,24424,0,0,0,0,0,0,0, -24170,24293,0,0,0,0,0,0,0,0,0,11847,0,39591,0,0,0,0,0,0,9549,2788,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1010,0,0,0,0,0,0,26055,31724,0,24233, -1828,0,0,0,0,0,0,0,0,0,17284,0,0,0,0,19464,0,0,0,0,0,0,0,0,32452,0,0,0,28871,0,0 -,0,0,17704,53383,0,0,0,0,0,0,0,0,0,17892,1938,0,0,0,0,0,16362,0,0,21605,0,0,5003 -,0,0,0,0,0,0,22693,0,22342,0,0,0,55846,0,0,0,0,0,0,0,0,0,22853,0,0,0,0,0,0,0,0, -6600,263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24836,0,0,0,0,0,0,0,0,0, -40711,0,0,0,0,0,33894,0,0,0,0,0,0,13000,0,0,0,0,0,0,0,0,0,0,30308,0,0,0,0,0,0, -5386,0,0,0,0,0,0,27844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17740,0,0,0,0 -,25093,29064,0,0,0,0,0,0,0,12680,11462,0,0,0,0,0,0,0,0,84,7303,0,0,0,0,0,0,0,0,0 -,0,0,27044,457,0,22924,58246,19016,0,2606,45703,0,5157,0,25028,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,0,0,0,31946,0,0,0,0,0,0,0,0,0,0,0,0,33382,0, -47878,0,0,0,0,0,0,0,0,25004,0,0,0,0,0,0,0,26153,35654,0,58055,30668,0,0,0,0, -25988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,7560,20583,0,0,0,0,0,0,0,0,0,37510,0,0,0,0,0,0,0,0,0,42822,0,0,0,0,0,0,0,0, -0,0,0,1733,0,0,0,8196,0,0,11241,0,30572,60326,0,15013,0,0,0,40646,0,23812,0, -10022,0,0,0,0,0,0,0,0,12874,31015,0,0,0,0,0,0,1608,0,0,0,0,18308,0,0,0,0,27114,0 -,0,0,0,0,0,0,7944,1382,0,11813,0,0,0,0,0,0,0,0,0,0,0,0,0,24517,0,11621,0,0,0,0,0 -,0,0,0,0,0,0,21702,0,0,13100,8262,2644,7973,0,0,0,0,0,0,0,0,0,0,0,0,1033,12581,0 -,25221,0,0,0,40998,16301,62983,0,0,0,0,1263,9318,0,0,0,18854,0,0,1741,33895,0,0, -0,0,0,0,26377,0,0,0,0,0,0,0,0,0,0,32165,0,51143,0,0,0,0,0,29412,0,0,0,0,0,0,0,0, -1674,4230,0,0,0,0,0,10502,0,0,0,0,5545,0,0,0,0,0,2099,45158,0,0,0,0,0,0,0,0,0,0, -14157,0,26955,0,0,0,0,0,0,0,0,0,17096,0,0,0,0,0,0,0,0,0,0,0,0,0,27050,6726,0,0,0 -,0,0,0,0,0,28554,0,0,7142,0,0,0,0,16936,0,0,0,25833,0,4399,6980,0,46214,0,0,0,0, -0,10630,21164,0,0,0,0,0,0,0,2446,48551,0,0,0,0,0,0,0,0,0,0,0,13381,0,0,0,0,0,0,0 -,0,15400,12135,0,0,0,0,0,4774,586,0,0,0,0,0,0,0,0,23751,9736,4548,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25577,29607,6250,1637,0,0,0,0, -22024,0,0,0,0,22308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37414,24044,0,0,0,14474,29735, -0,7077,0,45990,0,0,0,0,30568,40039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -6150,0,4228,0,0,0,0,0,27687,0,0,0,0,0,0,0,24548,21513,1350,0,0,0,33607,0,0,0,0,0 -,0,0,0,11784,1414,0,0,0,0,0,0,0,18244,940,0,0,0,0,0,0,7270,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,16709,0,0,0,0,0,0,0,48935,0,0,0,0,0,0,23660,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,53350,0,0,0,0,0,0,4236,16358,0,4422,6665,32644,0,0,744,18084,0,11014,0,0,0,0,0, -29508,0,0,0,0,0,0,0,7686,0,0,13289,5478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,12872,0,0,24134,1005,22916,0,31429,23400,0,0,0,0,0,0,0,28424,0,0,0, -25706,27109,0,0,26345,0,0,0,0,0,0,25126,0,0,88,0,0,0,0,0,0,0,17032,0,0,21799,0,0 -,10060,0,12296,21892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20777,14311,0,58182, -32232,0,10282,0,2121,11527,0,0,0,12325,0,0,0,0,0,0,0,28804,2344,8133,0,0,0,0, -21864,62695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,0,0, -23204,0,0,0,0,0,6278,0,0,0,0,0,26597,0,0,0,0,23144,0,0,0,0,0,31816,20070,0,0,0,0 -,0,0,0,0,0,0,24456,2118,0,0,0,0,6570,1156,0,0,0,0,0,0,0,30406,0,0,0,28388,3572,0 -,0,26599,12426,5286,0,0,0,0,0,4967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24970,24167,0,0,0 -,0,28745,4678,0,0,0,0,0,0,0,1444,236,0,0,0,0,0,0,0,0,19428,0,0,0,0,0,0,2092,0,0, -0,0,0,0,0,0,0,2827,0,0,0,0,0,19881,19204,0,11749,0,0,0,0,0,0,0,17958,0,17894,0, -18726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,21510,5033,0,0,0,0,22855,0,0,0,0,0,14598,0,29605,0,0,0,0,0,0,0,0, -617,0,0,0,0,47142,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,2225,14823, -0,0,2637,6182,78,15078,0,0,0,0,20264,0,0,0,0,0,0,36743,4140,44551,17352,25703,0, -0,0,0,0,0,0,0,0,0,0,0,14024,0,0,0,0,0,0,28004,0,0,0,0,0,7588,0,0,0,0,0,0,0,2087, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18028,0,0,0,300,14212,0,0,1386,40327,0,0,0,0 -,0,0,31082,0,0,22374,0,0,0,0,0,35718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -26532,7756,0,0,18982,0,0,0,0,0,0,0,0,6440,1159,7180,0,0,0,0,0,0,45766,0,57798,0, -16740,0,0,6802,60454,0,0,0,26470,0,0,0,0,0,65382,4362,7750,0,0,0,0,0,0,9096,4743 -,334,0,0,0,0,0,0,39974,0,0,0,25828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3027,0,0, -0,15816,0,0,0,0,0,0,0,0,48327,0,0,0,0,0,0,0,0,0,0,16168,41799,0,0,24458,8581,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12292,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,54503,0,0,0,0,5097,30852,18664,0,0,0,0,0,0,16484,0,0,27337,0,0,0, -0,0,0,0,0,0,0,0,0,35942,0,0,0,0,0,0,0,4356,0,0,0,0,0,57030,0,0,1417,41191,0,0,0, -0,0,23429,0,0,0,0,10024,21735,0,0,10126,0,0,0,0,19046,0,0,0,0,0,0,24105,4710,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4394,0,0,0,0,13253,0,56391,0,0,0,0,0,0,0,0,0,0, -0,19174,0,0,0,0,0,0,0,0,0,55974,0,0,0,52070,0,15620,0,0,0,0,0,2660,0,0,0,0,21644 -,0,0,52455,0,0,0,0,0,0,0,0,0,8902,0,0,0,0,0,0,3116,0,464,34726,0,0,0,0,0,0,25003 -,12423,0,27172,1896,7335,0,0,0,0,0,35686,0,0,0,0,3472,0,0,0,0,22406,0,0,0,0,0,0, -0,0,0,45254,0,0,0,0,0,0,0,0,0,0,0,0,0,21124,23594,33127,0,0,0,0,0,0,16684,22087, -0,0,0,0,0,0,0,0,0,0,0,0,8714,0,0,0,0,0,0,0,0,0,0,55814,0,0,0,0,0,0,4109,23460,0, -0,8874,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,29960,63398,1302,0,0,0,0, -0,0,0,0,24806,0,0,0,0,0,0,0,0,0,9799,0,0,0,0,0,0,0,31333,0,0,0,0,0,19557,0,0,0,0 -,0,5701,0,0,0,63014,0,0,0,0,0,0,0,21254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12484,0,0, -0,48326,0,0,0,0,0,0,0,0,0,0,0,15783,0,0,1202,0,0,0,0,23174,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,3086,49191,0,0,5387,15141,0,0,0,3365,0,0,0,0,20076,14021, -0,0,0,0,0,0,0,0,0,0,376,40198,0,0,0,52039,0,24932,0,0,0,0,808,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,9860,0,0,0,0,0,23719,0,21476,0,0,0,0,20776,4807,0,0,3177,16678,0,0,110 -,10853,0,0,0,17382,0,0,0,0,0,0,0,0,0,43462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,7500,4966,0,0,0,0,0,0,0,52102,0,24516,0,0,0,0,0,0,0,0,0,0,0,0,0,26535,0,0 -,0,46247,0,0,0,15557,0,0,0,0,76,52327,0,0,0,0,17866,0,0,0,0,0,0,0,0,0,0,46758,0, -0,0,0,0,19173,0,0,0,0,0,0,0,0,0,44038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2985,0 -,0,0,0,0,0,14310,0,0,2125,45831,0,0,0,0,0,0,9838,0,13227,19492,0,0,0,29764,0,0,0 -,0,686,30053,0,0,0,0,0,30789,139,20837,0,0,0,0,502,18533,0,0,0,0,0,19111,0,0,0,0 -,0,31396,0,0,0,17444,0,0,0,0,0,0,0,49862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25610,550,0 -,0,561,0,29034,0,0,0,3528,0,0,0,1715,14661,18,63463,0,0,0,0,0,0,0,0,0,0,14186,0, -0,0,0,0,0,0,0,0,0,0,29578,59014,0,39430,0,0,0,0,2250,16612,0,31780,0,0,0,0,0,0, -462,16967,0,29029,0,0,0,0,0,23462,0,0,0,0,0,0,0,0,1768,0,6025,16998,1804,0,0, -54182,0,0,0,0,0,0,0,0,14124,0,6154,29702,0,0,0,0,0,7716,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,48807,0,8292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16389,5933,0, -14857,51303,0,0,0,0,0,0,0,0,0,0,0,35623,9097,23047,0,0,23112,0,0,0,0,0,438,0,0,0 -,0,0,0,0,151,9254,1390,0,0,0,0,0,0,54215,0,0,0,0,6187,0,0,0,0,13095,0,0,0,0,0,0, -0,0,0,0,0,0,9866,0,0,59622,0,0,0,0,0,0,0,0,0,25286,0,0,23848,32069,0,0,0,0,0,0,0 -,0,0,9255,2187,15270,437,0,0,0,0,0,0,0,0,0,0,19493,0,0,0,0,0,0,0,0,0,0,0,11748,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16902,0,0,0,0,0,0,0,0,0,22212,1865,17543,0, -0,0,0,0,0,21996,0,0,0,0,55975,0,0,0,0,0,0,0,0,32138,21156,0,0,0,0,0,0,14249,0,0, -0,2388,0,0,0,0,6823,0,0,0,0,0,0,0,0,0,0,0,0,0,26694,0,0,6059,53511,0,0,0,0,0,0,0 -,49542,6159,0,0,0,0,0,0,0,0,0,0,0,0,0,1036,24036,0,2501,0,0,0,0,0,0,17419,51271, -3377,15142,0,0,0,0,0,0,5007,62374,0,56935,0,0,0,0,0,0,0,0,0,0,0,24422,0,0,0,0,0, -0,0,0,942,0,0,0,0,0,0,0,0,0,0,28263,0,0,0,0,0,0,0,15622,0,19749,0,0,1611,0,22219 -,48583,25129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17476,0,0,0,0,0,0,0,0,0,0, -721,0,0,0,0,32518,0,0,0,18469,0,0,0,0,0,0,5896,29927,3657,23046,0,0,3214,0,0,0,0 -,0,0,0,0,0,112,0,0,0,0,0,3048,455,0,31012,0,0,0,0,0,0,0,23270,0,32677,0,0,0,0,0, -38086,0,0,0,0,0,0,0,0,0,0,0,0,0,4900,0,0,0,0,0,0,0,0,0,25541,0,18788,0,0,22248, -1351,0,61734,4524,30629,0,14887,242,29063,0,0,14408,4741,0,0,0,37318,0,0,0,0,0,0 -,0,0,0,0,0,0,8106,0,32107,0,0,0,0,0,0,0,0,0,0,0,1481,0,0,28132,0,25798,0,59783,0 -,0,0,0,0,59078,0,0,0,23366,0,0,0,0,0,0,0,30887,0,0,0,0,16200,0,0,0,335,0,0,0,714 -,0,0,0,0,0,0,0,0,0,0,0,0,0,30730,9478,0,0,0,0,0,0,0,0,0,0,0,18790,0,0,0,0,663,0, -0,0,1034,31431,0,0,0,0,0,0,0,0,0,0,30120,0,0,0,0,13925,0,0,0,0,0,0,2280,13414,0, -0,0,0,0,0,22028,23687,3017,11047,0,0,21738,18630,0,0,0,0,0,0,0,30246,0,0,0,0,0,0 -,0,0,0,0,0,0,17257,0,21896,63783,0,0,0,21094,0,18662,0,25700,0,22533,0,0,0,0,0, -6341,5800,11111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15399, -12970,6501,0,0,3179,26438,0,0,0,0,0,0,0,15750,0,13062,0,0,0,0,0,0,0,0,0,0,142,0, -0,0,0,21284,11177,4391,0,0,0,0,19595,40647,0,0,0,0,0,11877,0,0,0,26439,0,0,0,0, -695,49126,27467,11972,0,0,0,0,0,0,9961,0,0,0,31722,62982,0,0,0,0,15817,52710,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24614,0,0,0,0,0,20550,0,0,5034,3942,0,0,0, -45927,0,0,0,0,0,0,0,0,0,0,2548,0,0,0,0,0,0,45606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,3405,12582,15563,54087,0,0,0,0,0,0,0,0,0,0,0,0,24202,5893,0,0,0, -44230,0,0,0,5605,0,47782,0,32230,0,0,0,0,0,0,0,0,0,0,0,7014,0,0,0,0,16488,3175,0 -,27237,0,0,0,0,0,40902,0,0,0,0,0,0,0,32004,31434,0,24392,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,29130,58214,0,0,0,0,0,0,29002,0,0,0,0,0,0,0,0,0,0,55366,0,0,0,0,0,0,0 -,0,0,0,0,37926,0,0,0,0,0,0,0,0,1290,0,0,0,4713,0,0,0,0,0,0,0,0,0,0,0,0,0,20812,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1803,966,0,17700,0,0,654,19109,0,51655,0,0,0,0,0, -10470,1584,0,0,0,0,0,0,0,2506,0,0,25159,4303,0,0,0,395,15879,0,0,0,0,0,0,0,0,0,0 -,1352,6535,0,19652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4722,7909,0,0,0,0 -,30152,0,0,64742,0,0,0,0,0,0,2153,9125,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,41894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,1328,17030,0,0,0,0,0,0,0,54151,0,0,0,0,1775,54535,0,0,0,0,31624,0,0,0, -7150,0,0,0,0,0,0,0,1840,35943,0,0,0,0,0,56455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -64486,0,0,0,51174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4134 -,0,0,0,0,0,0,0,0,0,0,0,17092,0,0,0,0,0,0,0,0,0,0,0,0,12,16134,19883,39943,10281, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -14125,2407,0,0,0,0,0,0,0,0,0,0,26921,0,0,0,0,0,22188,0,20810,10053,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28170,0,15208,0,0 -,32517,5736,19271,3562,10534,0,0,0,59655,0,0,0,0,27084,60422,0,0,24969,0,0,0, -2636,0,0,0,0,26277,0,0,0,0,0,0,0,0,0,0,0,30596,3594,0,0,0,8362,14565,0,0,0,0,0,0 -,10793,12326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5906,59686,0,0,23081,517,0,15556,0,0,0, -8486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19877 -,0,0,0,0,0,0,0,0,7497,0,0,26085,0,0,23784,63591,6568,6310,0,0,0,0,0,0,0,0,0, -10054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7018,14470,18858,0,5641,10660,0,0,0,0,0,0,0, -35526,1515,0,0,0,0,0,0,0,0,0,0,0,27656,0,0,9606,0,39590,0,0,0,0,0,0,0,0,0,0,0, -53926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,4327,12649,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,20199,0,0,0,0,0,0,26730,0,0,0,19400,14695,0,31334,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19589,0,0,0,0,0,0,0,0,5064,11908,0,27333,0, -0,0,0,0,0,0,47751,0,0,0,26662,0,0,0,0,0,0,0,55655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,6245,0,0,0,0,0,0,0,0,23368,63911,0,0,0,0,0,0,0,0,1974,0,0,0,0,0,0,0, -8520,24037,0,0,0,0,0,0,0,26279,0,0,0,22886,0,0,0,27782,0,30694,0,0,0,0,0,0,0,0,0 -,0,0,33703,0,0,0,30405,0,34598,0,51047,0,0,0,0,1908,0,0,0,0,0,0,0,0,0,0,1511, -21897,0,0,0,0,0,0,51398,0,24870,0,32647,0,0,0,35015,0,0,0,0,0,0,0,11204,0,0,0,0, -0,0,7758,57991,0,0,0,30949,0,0,22,15140,9162,0,0,0,0,0,0,25540,20136,7108,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16427,10789,9805,0,0,0,0,0,0,0,0,0,4680,0,0,52679, -0,0,0,0,0,14884,0,0,0,16804,0,0,0,0,0,0,9578,5287,0,0,0,0,0,0,0,34054,0,0,0,0,0, -19076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7627,55719,0,39463,14446,58374,0,0,0,0,23465, -15845,0,0,0,0,0,38534,0,0,0,17893,10922,0,7176,678,0,0,0,0,0,0,0,0,3113,46279,0, -0,0,0,0,0,0,23334,0,0,18088,23268,0,62342,0,0,0,16613,0,0,0,0,0,0,0,0,0,38182,0, -0,0,0,0,0,25292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10344,71,6446,0,0,1893,0,0, -1106,0,28680,30756,0,41126,0,0,1492,0,15341,0,0,0,0,17575,0,21220,0,0,0,0,0, -25060,2088,21828,0,0,0,0,0,358,0,0,0,0,0,16708,0,0,0,1668,0,0,0,0,0,12260,0,0,0, -0,0,0,0,0,4078,0,0,0,0,0,12713,6215,0,0,20329,0,0,0,0,0,0,0,0,0,0,31204,0,0,0,0, -0,0,0,0,0,0,3732,0,1646,0,0,27460,0,34406,17128,14341,0,0,0,0,0,19527,0,0,0,0,0, -0,0,0,0,0,6120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8551,21546,10212,3020, -2951,0,17638,0,0,6985,44999,2218,8197,0,0,30472,63366,0,26660,0,0,0,0,0,0,0,0,0, -0,0,0,1265,0,0,0,0,0,0,0,2610,0,0,0,11278,20295,0,0,0,0,0,19780,0,0,0,0,0,0,2353 -,10852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5421,24292,0,0,0,0,0,0,0,0,0,0,0,0,0,34407,0, -0,0,0,0,0,15432,20774,0,0,0,0,0,0,0,0,12360,10757,0,0,0,33126,0,0,0,0,0,0,0,0,0, -0,0,29573,0,2343,0,0,0,0,0,63079,0,0,0,0,0,0,0,0,0,43015,0,16038,0,0,0,0,0,0,0,0 -,1480,25573,0,0,0,0,0,0,0,8839,0,0,0,0,0,0,0,24645,0,0,0,0,0,0,0,0,0,0,0,0,0, -5063,0,0,0,0,0,45830,0,0,0,0,0,0,0,0,0,0,823,0,0,64039,0,0,0,0,0,0,0,0,0,0,0,0,0 -,15300,0,0,0,0,0,0,2924,46759,6760,19268,0,0,0,0,0,0,0,0,0,34182,0,0,3977,18149, -0,0,0,32199,0,0,0,0,0,0,0,0,0,23524,25994,0,0,10343,0,0,0,9733,0,0,0,0,0,0,0,0,0 -,4740,0,0,0,0,0,0,0,0,0,16741,0,0,4626,23367,0,0,31400,0,0,3557,0,0,4234,0,0,0,0 -,0,0,28486,0,0,0,0,0,14213,0,57191,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,65318,29832,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29989,0,31846,0,0,8170,0,0,4421,27626,30884,0 -,0,20204,0,0,0,0,44614,534,20868,0,0,0,0,0,0,0,0,0,0,0,0,0,28710,0,10277,0,0,0,0 -,0,29511,0,19813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27020,0,0,0,0,0,0,53094 -,0,35207,0,0,0,37542,0,61766,8584,8037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12488 -,22757,0,0,0,0,0,0,0,0,0,0,0,0,0,23814,0,0,0,0,0,0,0,0,0,19973,0,0,0,63943,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36006,0,0,0,19012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,8580,0,0,0,0,0,0,0,18021,0,0,0,0,0,0,0,0,80,1254,0,0,0,42630,0,0,0,0,0, -0,0,16262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2124,25479,0,0,0,0,16873,0,0,0,0,3142, -0,0,18443,0,0,0,0,0,3917,0,8841,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,20645,0,0,0,0,0,0,0,0,0,0,0,9284,0,0,24394,41351,0,0,0,42087,0,62566,0,0,0,0, -0,0,0,0,0,0,6728,4199,0,0,0,0,25515,0,1231,0,374,15623,0,29956,0,14118,0,0,0,0,0 -,19047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31718,0,0,0,0,0,0,0,0,0,0,0,20900,0,16743,0 -,0,0,28902,0,0,0,0,0,0,0,0,0,0,0,0,2578,0,0,0,0,0,0,0,0,0,13838,0,0,10052,0,0,0, -0,7432,43783,17097,0,0,0,0,0,873,0,0,0,398,0,0,0,0,0,0,0,0,0,8459,23559,0,53030, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35750,0,4071,0,0,0,38662,0,41414,0,0,0,0,11656,0,0 -,0,0,0,4011,42695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25353,0,0,0,0,0,0,0,27177,22372,0, -0,0,0,0,30980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46278,3976,12711 -,0,0,0,0,0,0,0,0,0,0,0,20517,0,0,0,0,0,0,0,0,0,0,0,0,4072,11078,0,0,16553,2405,0 -,0,0,0,0,0,0,0,2670,0,0,0,0,0,0,32998,0,0,0,0,0,0,0,47046,0,30533,0,0,11050,9734 -,13129,0,0,0,0,23494,0,0,0,0,0,58310,0,0,0,57543,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0 -,0,0,0,0,0,5163,59687,2220,0,0,0,0,0,0,29510,0,0,0,0,0,0,0,0,0,0,0,17316,0,20069 -,0,0,0,0,0,0,0,0,0,5319,0,0,0,0,0,0,0,0,0,27174,0,0,0,0,0,0,0,22949,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,19208,0,0,0,0,0,0,20933,0,0,6026,8742,0,0,0,17380,0,13127,2797,0 -,0,30116,0,0,5963,8004,0,57126,0,0,0,0,0,42854,14792,30759,0,24964,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,16933,0,0,0,0,0,0,15176,40839,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -788,30341,0,0,0,0,21036,24102,0,0,0,0,30123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -22597,31531,26789,0,59559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9352,29863,0,0,0,0,0,0,0,0 -,0,24551,0,0,0,0,0,0,0,20516,0,0,0,39462,3665,0,28265,0,8778,64262,0,57414,9132, -0,0,18276,0,0,0,0,0,0,0,0,0,0,26344,30725,524,19751,0,13796,0,0,0,0,0,0,0,0,0,0, -18155,0,12841,0,74,24998,13579,1061,0,64199,0,0,8776,0,0,60231,0,25412,0,0,0, -59143,0,0,0,0,0,0,14344,1510,0,0,0,38374,0,0,0,0,0,0,0,0,13353,0,0,0,0,0,0,0,0,0 -,0,9446,0,0,0,0,0,0,0,32613,0,0,0,0,0,0,0,0,0,0,0,0,0,19844,0,0,0,0,14859,0,0,0, -0,6662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14154,0,29770,0,0,0,0,0, -16520,2182,0,0,0,0,0,36102,3340,0,0,0,0,0,0,0,0,25189,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,15720,0,0,0,0,0,0,22758,0,0,304,0,3243,14117,0,0,0,0,0,0,0,0,0,0,5130, -12679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21733,10441,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,36103,0,0,0,0,0,23590,0,57479,0,0,0,0,0,0,0,0,0,0,0,0,10824, -18372,0,0,0,0,0,35078,15722,12967,0,0,0,0,0,34599,0,0,0,0,0,0,0,0,0,0,0,0,0, -53639,0,38630,0,0,0,0,0,0,31017,11333,0,0,0,0,19144,0,9513,0,0,0,0,0,0,0,0,56711 -,24042,0,1197,0,0,58502,0,0,0,0,0,0,0,0,0,8230,6121,18628,0,0,0,0,0,0,25290,0,0, -0,0,0,1514,0,0,0,0,0,0,0,14378,9798,32363,0,0,0,0,0,9577,0,0,0,0,0,0,26788,0,0,0 -,0,0,0,330,10533,0,0,0,0,0,42246,0,0,0,0,0,0,5074,21028,0,38119,0,0,0,0,0,0,248, -0,31176,62054,0,53287,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,0,0,9224,2117,0,0,0,0, -15818,5607,0,52582,0,0,0,0,0,0,0,0,18248,24005,23018,0,0,0,0,0,0,0,0,0,0,0,0,0, -427,0,0,39910,0,0,7080,11399,0,0,0,0,0,0,0,0,0,0,22220,57894,0,0,0,0,0,0,0,13156 -,0,1413,1007,0,0,0,0,21415,0,21543,0,0,0,0,0,0,0,0,0,41702,22538,9573,0,0,0,8806 -,0,0,6920,56359,0,0,0,0,0,0,0,0,0,0,0,42215,0,0,13708,0,0,0,0,0,0,0,0,0,0,16453, -0,0,0,0,0,0,1582,1764,3282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11653,0,0,0,0,12139,0, -29482,31076,1673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40262,0,0,0,33862,0 -,0,0,0,0,20996,0,0,0,0,0,4615,0,0,0,0,0,0,0,0,0,0,0,43943,333,19367,0,0,0,0,0,0, -0,26821,0,32389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4936,11687,0,0,0,0,0,0,0,0,0,10885,0 -,0,0,0,0,25926,0,0,0,0,0,0,15851,0,0,0,0,0,0,0,0,0,8360,0,17130,7942,0,11460,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,18150,14248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -22310,0,0,0,42758,0,0,0,0,0,0,0,0,29354,5574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,31109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11236,0,0,0,0,0,0,0,0 -,0,0,0,0,0,9156,0,0,1801,14023,0,0,0,0,0,62406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -23620,0,0,0,0,0,0,0,0,0,0,31018,65510,0,0,0,0,0,0,0,26182,0,0,0,0,0,0,0,27717,0, -0,0,0,0,0,0,46950,0,0,0,0,0,0,0,0,0,0,0,0,0,31108,0,11366,0,0,0,3717,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8552,6054,3339,0,0,0,0,51622,0, -0,0,0,0,0,0,3718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28358,0,2756,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1462,0,0,27622,0,0,0,0,0,0,0,62502,14410,56743,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,12206,0,0,0,0,0,0,0,0,0,0,0,0,36550,0,38054,0,0,0, -21221,0,0,0,0,0,0,0,27077,0,0,16906,0,12587,12101,0,0,0,0,0,0,10414,28775,21769, -60167,0,56646,0,0,0,0,0,20740,0,0,0,0,0,0,5931,5351,0,65478,0,0,0,0,0,0,7977, -52647,0,4868,0,0,0,55463,0,0,0,0,0,32197,0,0,0,0,0,13445,0,0,0,26631,0,0,0,0,0, -11237,0,0,0,0,209,1285,0,0,1928,0,0,0,0,43334,23849,23172,0,0,0,0,0,0,0,0,24712, -62439,8811,3463,20457,0,0,0,0,0,0,0,0,0,16008,56263,0,0,0,0,0,0,0,0,0,0,0,60358, -22761,6565,0,0,30888,27686,0,0,0,17093,0,0,0,0,22121,0,0,0,7593,14182,0,28103,0, -0,0,0,0,45126,0,0,0,0,0,0,0,0,0,0,0,0,0,31844,0,0,0,0,0,0,0,0,0,0,0,0,0,18500,0, -0,0,0,28202,0,0,0,0,0,0,0,0,26308,0,29541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -29572,0,0,0,21285,0,0,0,0,0,60839,0,0,0,0,0,30407,15949,2981,0,0,0,46439,0,0,0,0 -,0,23911,26505,25222,12811,5895,0,6343,0,0,0,0,0,0,0,0,0,0,0,31815,0,0,0,0,0,0,0 -,0,19688,10245,0,0,0,31301,26985,28964,0,0,0,0,0,0,0,0,27208,31172,0,0,0,0,216,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16292,0,0,0,0,0,8743,0,0,0,0,0,0,0,0, -0,0,0,0,0,6438,0,0,0,33319,0,0,0,33286,0,0,0,0,0,0,0,0,0,22181,7499,24774,0, -10756,0,44775,724,0,25768,25669,24873,5349,25257,0,0,54566,0,0,0,0,0,0,0,0,0,0,0 -,327,439,357,0,0,6536,8452,0,0,1802,0,0,61350,0,15045,0,0,0,0,0,0,0,0,0,0,0, -38343,0,0,0,0,0,0,0,0,0,0,32491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -22885,0,0,32073,0,0,0,9546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27748,0,0,23176,0,0,0 -,0,0,0,0,0,0,0,0,0,24583,0,0,0,0,0,34118,0,0,0,0,2158,0,5586,30340,0,0,0,0,0,0,0 -,0,0,0,0,0,0,24452,0,0,0,0,2409,4390,0,24196,0,0,0,0,0,0,32264,26948,20587,0,0,0 -,2155,0,0,0,0,0,0,0,0,0,0,0,4328,26276,0,0,0,0,0,0,0,0,23564,0,12458,11367,0,0, -25162,0,0,0,0,0,0,65414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32966,0,0,0, -34662,0,0,0,0,0,39238,0,0,0,0,11400,10214,266,12452,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,15173,0,0,0,13668,0,13222,0,23364,0,0,0,0,0,11941,0,0,0,0,0,0,0,0,0, -25575,0,0,0,57383,0,0,0,10308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,2865,9287,75,0,0,0,0,0,0,0,0,0,0,21508,22380,59526,0,0,0,23589,0,0,0,51590 -,0,0,0,0,0,0,0,0,0,0,0,4645,3980,28295,0,0,0,0,0,12388,0,0,0,0,0,0,0,0,0,0,0, -21734,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41767,0,0,0,0,0,0,0,18436,0,0,0,0,0, -0,0,21958,0,19430,0,0,1204,0,0,0,0,0,0,0,0,0,3240,55239,0,0,0,0,0,30660,0,0,0, -28901,0,0,0,0,4716,0,0,0,0,0,0,0,0,0,0,0,11754,0,0,0,0,22086,0,22564,8749,0,0, -28391,0,0,0,0,0,0,0,0,0,0,0,2886,0,0,0,0,0,0,0,29062,0,0,0,0,0,0,0,40358,0,0, -15916,39526,0,13735,0,0,0,0,28938,0,407,4006,0,0,0,26916,0,0,0,0,0,27526,30280,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24586,0,24649,5126, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8684,0,0,0,0,0,0,0,23019,0,22377,18599,0 -,0,0,0,0,0,0,0,0,0,27593,9735,0,20196,0,0,0,0,28168,48423,0,0,0,0,0,31399,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,13892,0,0,0,0,0,17606,0,0,15242,29767,26378,17701,0,0, -14472,0,4840,0,0,0,0,0,0,24708,0,9349,4330,0,0,0,0,0,0,0,16137,0,0,34854,0,0,0,0 -,0,0,0,0,0,0,0,25063,0,0,0,0,0,0,6603,12583,0,0,0,0,0,0,0,0,7433,29188,0,0,0,0,0 -,31270,0,0,22920,3143,0,0,0,0,0,23461,0,0,0,0,0,0,0,0,618,0,0,0,0,21381,0,11524, -0,0,0,0,0,0,21004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,23239,0,0,0,0,0,0,0,0,0,0,0, -0,2313,0,0,40614,0,0,14825,0,0,0,0,0,0,46535,0,41190,7853,0,31656,0,0,0,0,0,0,0, -0,0,3433,5255,0,0,0,0,0,0,0,33958,0,0,0,0,72,15493,0,0,0,0,0,0,0,36070,0,0,0,0,0 -,0,0,14724,0,0,0,0,0,29828,0,0,0,0,0,0,0,18822,20008,0,0,0,0,2438,2952,0,0,0,0,0 -,0,0,0,0,0,0,0,0,3342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24420,0,19908,0,0,0,8101,0, -17479,0,0,3530,0,8202,29319,0,0,1132,6789,0,0,23881,0,0,0,4810,0,0,46918,0,0,0, -41574,0,0,0,0,0,0,0,0,0,48582,0,0,0,0,0,0,0,0,0,0,0,0,0,39334,0,0,0,26117,0,0,0, -0,0,0,5100,0,0,0,0,0,23496,27813,4045,54918,0,0,0,0,0,0,6473,7428,0,0,0,0,6792,0 -,0,0,0,0,3560,32103,0,0,0,0,0,0,0,0,0,0,0,54790,0,0,6926,0,0,0,0,16518,0,0,0,0,0 -,20806,0,0,0,0,1841,3174,0,0,0,0,9612,18374,0,0,0,0,32744,0,0,9671,0,59879,0, -23300,8073,0,0,14758,0,0,0,10342,0,0,0,0,0,0,24808,14759,0,0,0,0,0,0,5515,0,0, -14852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2354,23271,0,32740,0,0,0,0,0,0,0,0 -,0,0,18472,0,0,0,0,0,0,0,0,33190,0,0,0,0,0,0,0,0,8972,21669,0,0,0,0,0,0,0,0,0,0, -0,25574,0,0,0,0,5096,0,14283,55367,0,0,0,0,0,0,0,0,0,12644,0,0,0,0,4651,0,0,0,0, -0,0,0,661,0,0,13638,19466,0,0,0,0,0,31273,0,8010,0,0,0,0,0,3211,0,0,0,0,63430,0, -0,0,0,0,15237,0,0,0,0,0,0,19018,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14312,0 -,0,0,0,16836,0,0,471,35975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,6023,0,0,0,0,0,0,0,0,11593,9639,0,0,0,55783,0,5700,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27908,0,26598,0,0,6667,6470,0,0,0,0,0,0,0, -62534,0,0,0,0,16522,27911,0,0,10025,7172,0,0,779,0,360,17477,0,0,0,61991,7752, -7717,1494,0,0,0,26569,40742,0,0,0,0,0,0,0,26406,10474,32196,0,0,0,0,0,50567, -16521,11716,0,0,0,0,0,55558,0,0,0,0,0,0,0,0,0,0,0,61926,0,26436,0,0,0,0,4459, -10598,0,0,0,0,0,0,0,0,0,0,0,9223,0,29318,0,0,0,0,0,60423,0,0,0,0,0,0,0,47078,0, -50246,0,12612,0,0,0,0,0,0,0,61799,0,55015,0,21060,7309,0,0,0,0,0,11976,0,0,0,0, -23527,0,0,0,0,0,0,10347,15942,0,34023,0,0,0,0,4969,0,0,0,0,0,0,0,0,28997,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19716, -28872,0,0,0,0,0,22152,0,0,0,0,0,0,26342,0,0,0,9764,0,0,0,0,0,0,0,21798,0,0,0,0, -13,6853,32136,0,0,0,0,0,0,0,750,0,0,54502,0,0,0,0,0,0,0,0,0,46183,0,0,625,22854, -0,0,0,0,2061,23588,0,0,11049,56262,0,0,18538,1509,0,0,17258,4453,0,0,0,0,12429,0 -,0,0,0,8102,0,0,0,0,0,0,8074,0,23852,0,0,0,0,0,0,0,0,0,0,0,16136,3428,0,27876,0, -0,0,7332,0,0,0,0,0,28900,0,0,2284,0,0,17573,201,1508,0,0,0,0,0,0,0,0,0,31365, -27688,22565,0,0,0,5159,0,0,0,0,4584,42599,0,0,0,44422,1068,23173,0,0,0,613,0,0,0 -,12645,0,0,0,0,0,27076,6732,0,0,0,3913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,22244,29992,15911,0,0,0,0,0,22982,0,0,0,0,0,0,0,50598,0,0 -,0,0,0,0,5161,1574,0,0,0,0,0,0,0,0,0,19108,0,0,0,35014,0,0,0,25956,29067,0,0,0,0 -,0,0,0,0,0,0,47079,0,0,0,0,0,0,0,0,0,0,1356,61927,0,0,0,64455,2122,64231,0,0, -18763,0,0,0,0,0,0,0,0,0,907,34471,0,0,0,39078,0,0,1995,0,0,0,0,0,0,0,0,0,0,56518 -,0,0,0,0,0,0,0,0,0,0,0,0,822,0,15978,44423,0,0,3112,325,0,0,0,0,0,15397,0,0,0,0, -0,0,0,0,0,0,1193,4294,4968,15559,0,46150,0,0,0,0,0,18917,0,0,0,0,0,0,9928,37543, -0,0,0,0,13097,36999,0,0,0,15430,0,0,8424,29639,0,0,0,0,0,0,0,0,0,0,0,0,0,25734,0 -,0,0,0,0,0,0,0,0,0,0,0,0,40487,0,13284,0,11141,0,0,0,32388,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5298,57702,0,0,0,0,0,0,0,13060,0,0,0,0,0,0, -8233,42278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36422,0,0,0,7972,0,0,0, -18437,0,0,0,0,7406,0,0,0,9225,0,0,0,0,0,0,0,0,0,13865,47591,18220,53703,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2796,0,0,0,0,0,24940,17223,0,0,0 -,13221,0,0,0,0,0,0,0,0,0,0,15848,0,0,0,0,0,6122,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,16968,18151,0,0,0,0,0,47494,0,0,0,0,0,0,26089,19494,0,0,0,0,0,15494,0,0 -,0,0,0,0,0,0,0,0,28809,0,0,0,0,42727,0,55174,0,0,0,0,0,0,0,0,0,0,0,20485,0,0,0,0 -,0,0,0,0,0,0,0,58598,0,0,0,0,0,0,0,0,0,0,0,0,0,15172,0,0,0,0,0,0,0,0,0,35302,0, -48135,20972,33094,0,0,0,0,0,9765,0,0,0,0,0,0,0,0,0,39559,0,0,13736,6950,0,0,0,0, -23658,8903,0,0,0,0,0,0,0,22662,0,0,0,0,0,58886,7468,0,0,0,0,0,0,0,0,64550,0,0,0, -0,0,47622,0,0,0,50886,0,0,0,0,0,57606,912,0,0,0,0,0,0,0,0,0,1449,0,1169,0,718, -46151,12104,0,0,0,0,0,0,48230,0,0,0,0,0,0,0,0,0,0,1259,0,0,33734,23208,62567,0, -65158,0,0,0,0,0,0,0,0,0,0,28684,59878,0,0,0,0,0,0,0,0,0,0,25769,0,0,0,0,65479,0, -0,0,0,555,22789,0,19748,1769,10246,8680,0,0,0,0,0,0,0,0,0,14250,0,5899,3303,0,0, -0,0,0,0,0,0,21097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21638,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,10795,0,0,0,16204,0,0,0,0,0,26986,2469,0,14660,0,0,0,0,0,45447, -12234,3494,4555,10566,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,0,15755,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,39654,0,0,0,0,0,0,6763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -33574,0,10279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63527,0,0,3912,0,0,7492,0,0,0,35142, -0,0,0,0,0,0,17576,8103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16713,4198,0,0,4782,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,16228,0,0,0,0,25961,20166,0,0,0,10980,0,0,0,0,0,14340, -18922,14567,0,44199,0,0,0,0,0,0,0,18406,0,0,0,0,0,37606,0,0,0,0,0,0,0,0,0,20902, -0,0,0,56358,0,38342,0,0,0,0,9514,36071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21700,0,0, -5266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,1453,0,0,0,0,0,3882,0,0,0, -0,0,0,0,0,4004,0,0,0,51910,0,0,0,0,0,23076,4648,0,0,0,31051,25351,0,0,0,22884,0, -0,0,0,0,63975,0,0,2376,16997,0,0,2096,0,0,0,3373,7046,0,0,0,0,0,0,0,30726,0,0,0, -0,20,0,13707,614,0,0,12840,3079,0,0,0,0,0,51046,3729,0,32680,0,0,0,0,0,24008, -62759,0,0,4745,0,0,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,44262,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,24937,0,0,0,0,0,0,0,0,19140,0,13575,0,0,0,0,0,0,0,39110,0,0,0,28036,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,4261,0,0,0,0,5992,0,264,0,0,0,0,0,0,0,13739,0,21928,0, -0,0,0,0,0,0,0,0,0,0,4232,15110,0,0,0,0,0,0,0,0,0,30022,0,0,27977,0,0,0,0,0,24776 -,0,0,0,0,0,2962,0,0,0,0,0,0,26564,22441,0,0,0,0,0,13640,11205,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,19305,1894,0,0,0,0,0,0,0,0,0,0,9389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14119, -5224,135,0,0,0,0,0,0,0,0,0,25796,0,0,0,0,0,0,7470,0,0,0,0,63815,0,55654,0,0, -12584,0,1524,33223,0,0,0,9895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11624, -0,0,0,5614,0,0,0,0,0,0,0,21320,0,0,53607,0,51206,0,0,0,25863,0,0,0,0,0,0,0,0,0,0 -,0,8964,1740,0,0,0,0,0,0,0,0,13476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7975,0, -0,3306,8134,0,8389,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25766,0,0,0,0,0,0,0,0,0, -52166,0,0,0,0,0,0,0,0,0,0,0,0,0,21477,31112,31652,0,0,0,0,0,0,0,28452,0,0,0, -44231,0,0,0,0,0,0,0,24805,0,0,0,0,0,0,0,0,0,0,12428,6471,0,0,0,0,525,17926,0,0,0 -,26919,0,0,18120,0,0,0,30024,0,0,0,0,0,0,0,0,0,0,29189,0,0,0,43559,0,0,0,0,0,0, -19787,7557,0,59334,0,0,10184,6085,0,44039,0,0,0,0,0,0,0,11175,0,0,0,0,30440, -63110,0,0,0,0,0,0,11017,0,0,0,0,0,0,0,0,27204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,29126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,5226,2727,0,15588,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4650,0,2675,0,0,32420,0,0,0,61511,0,0, -5419,17829,2123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38183,2640,0,11274,14533,1842,0,0, -42663,12681,3430,0,11845,0,0,0,0,0,0,0,0,0,6533,0,0,0,0,0,54598,0,0,0,0,0,0,0,0, -0,0,0,0,12616,38535,0,0,0,0,0,32229,0,0,0,54279,0,48614,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,31401,0,0,0,0,34310,0,0,0,22788,0,52134,0,0,0,0,0,0,0,23302,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,40678,0,0,0,51463,535,0,0,0,0,15525,0,0,0,0,0,0,4904,869,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63718,0,0,0,0,0,0,0,0,1678,0,692,0,0,0, -0,0,0,0,0,0,26216,0,0,0,0,0,29355,0,0,0,0,25095,0,0,0,0,4335,0,0,0,0,0,14538,0,0 -,0,0,0,0,0,0,0,27273,55014,0,0,0,0,0,27271,0,0,0,0,0,30468,0,0,0,0,18186,0,0,0,0 -,0,14345,0,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58438,21034,0,23339,21318,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,21412,0,0,0,0,0,0,0,12869,0,0,4875,0,0,0,0,29191,0,0,0,0 -,0,0,1640,10247,0,14244,0,0,0,0,9867,0,0,0,0,0,12363,0,0,7653,0,0,4168,2663,0, -4580,0,11143,0,0,0,0,0,0,0,30662,0,0,0,0,0,6724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,13764,0,0,0,0,0,0,0,0,0,0,0,0,234,6821,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,25639,0,0,0,0,0,0,0,0,0,29958,0,3461,0,0,0,0,0,0,0,0,0,28324, -18795,7013,12746,11655,0,37287,0,0,10953,7718,9705,0,0,0,0,0,0,0,0,0,0,46534,0,0 -,0,0,0,0,0,0,0,0,8137,17988,0,25156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41415,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15784,6918,0,0,0,0,7019,10919,0,0,0, -0,0,0,0,0,0,0,4171,55495,4940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22440,19333,0,0, -28136,0,6249,21317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53414,0,0,0,57318,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39303,0,0,0,0,0,19940,0,0,0,0,0,0,0,25543,0,0,0 -,0,0,0,0,0,0,0,0,0,2698,3911,0,0,0,26790,0,0,0,0,0,0,32424,0,0,18470,0,0,0,14726 -,29834,0,0,0,0,0,0,0,0,0,0,0,1000,4197,0,0,0,19366,0,0,0,39878,0,0,0,0,2185,8901 -,5288,9829,25000,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35622,0, -0,23048,62503,6506,0,0,0,0,0,0,0,13609,10438,0,0,0,0,0,0,0,0,0,0,7723,42119,0,0, -0,0,0,13317,0,0,0,41606,0,27111,0,0,21194,11461,0,0,0,0,26856,58342,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,20940,48710,0,0,0,0,0,0,5227,0,0,0,0,0,10061,31300,0,0,0,19236,0 -,0,0,0,0,30277,13896,0,0,0,12876,13159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,428, -46951,13134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,21668,0,0,0,0,0,0,0,0,0,0,0,0,2249,0,0,0,0,44967,0,0,0,0 -,0,0,3465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24868,0,0,0,0,0,23909,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16164,0, -10437,0,0,5263,20102,20938,0,0,0,1192,1030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,21385,4870,0,0,0,0,0,0,0,0,0,0,0,18596,0,0,0,0,1422,4038,2858,0,0,0,0,0,0,0,0 -,48998,0,0,0,0,0,0,0,0,6508,37350,0,0,0,0,0,0,0,0,17001,39431,0,0,0,0,0,30182,0, -21445,7403,28164,0,51750,0,0,0,62631,0,0,0,0,0,0,0,31206,0,0,0,0,0,0,0,0,0,0,0, -7751,0,0,0,0,0,0,0,0,0,13477,0,0,456,26693,0,0,0,0,0,0,0,0,0,0,0,0,14890,0,0,0,0 -,0,26697,22022,13225,27364,0,0,0,18884,0,0,0,0,0,0,0,0,3659,0,0,0,0,0,0,0,0,0,0, -0,1448,5413,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,18091,18725,0,0,0,0,0,0,0,0,0,0,0,0,0 -,22118,0,0,0,18981,0,0,0,0,0,0,0,0,0,29223,3724,0,0,0,0,43526,0,0,0,25668,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21545,9862,0,22692,32201,60646,0,7300,0,0, -0,58887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19460,0,0,0,0,0,0,0,0,0,50342,0, -65255,4360,17286,0,0,0,0,0,0,0,28708,0,0,30025,60102,0,0,0,0,0,0,0,0,0,47014,0, -31973,0,9572,0,0,0,0,0,0,0,18501,0,0,0,0,0,14597,0,0,0,53735,5228,22183,0,0,0,0, -0,0,1554,24164,0,0,0,0,0,0,0,0,0,0,0,0,10827,0,0,0,0,34918,0,0,0,0,22252,0,0, -46855,0,0,0,0,0,31207,0,0,10733,0,0,63334,0,0,0,0,8616,50119,20169,12678,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58087,20298,5,0,0,30920,0,0,0,0,0,0,0,296,13190,0 -,30663,0,0,18536,12228,0,6788,0,0,0,0,30890,21796,0,0,526,0,0,0,0,0,0,0,0,0,0,0, -0,20965,0,0,0,0,2161,0,0,0,0,0,0,24038,0,0,0,0,13544,7398,0,0,32522,9605,0,0,0,0 -,3208,7590,0,0,0,43846,0,0,0,38663,0,0,0,0,0,39014,4142,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,6373,0,0,13676,0,0,0,0,30374,21288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22791,0,0,0,0,0,37958,0,0,0,0,0,0,0,0,0,0,9452, -9990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4841,0,0,0,0,18820,152,0,0,0,0,0,13260,3334,0,0 -,24234,8422,0,17957,0,0,0,10244,0,0,0,0,0,0,0,0,0,0,0,7204,0,0,0,0,1201,26151,0, -31173,0,0,0,0,0,0,0,0,0,0,0,0,0,64838,4203,7525,521,0,18888,37031,0,0,0,0,0,0,0, -0,7082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4490,12487,0,0,0,0,0,0,0,36615,0,0, -0,14854,0,0,0,0,0,0,0,0,0,0,0,0,6539,13029,9704,38983,0,0,0,0,168,10405,0,0,0,0, -394,25607,0,57063,0,0,0,0,0,0,0,0,0,0,16141,19878,0,0,0,0,0,0,0,0,0,29446,0, -12036,0,0,0,0,0,6982,18572,0,24584,14535,0,0,0,0,0,0,0,0,0,0,16,0,21642,0,0,0,0, -0,0,5254,0,0,0,0,0,0,0,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,0,3853,9126,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,7241,10982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,950,0,0,57990,0,0,277,0 -,0,0,694,36007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42470,0,0,0,0,18409, -51142,0,0,0,0,0,0,0,0,0,28646,0,0,0,30693,0,0,0,0,0,56295,5544,0,0,0,0,8518,8366 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45670,0,0, -9608,33062,0,0,0,0,0,0,0,0,0,0,0,18694,0,0,0,0,1672,23493,0,0,6955,7655,0,36134, -0,0,0,0,0,0,0,0,23432,647,0,0,0,0,0,0,0,0,0,0,0,13382,0,0,0,19621,0,0,0,0,0,0,0, -0,0,20228,0,0,2728,31495,0,0,0,0,29096,22213,235,35495,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,5348,0,0,0,0,8968,1989,0,0,1066,0,0,11492,5965,31367,0,0,0,0,0,0,0,0,0,0,0, -18727,0,0,0,6757,0,0,10765,4646,0,36166,0,27943,0,0,26888,8420,0,0,0,0,0,0,0,0,0 -,29316,0,0,0,0,0,0,0,0,0,0,4975,0,0,0,14762,3111,0,0,0,0,0,43399,0,0,0,0,0,0,0, -18980,0,0,0,0,0,44550,0,0,0,0,4051,0,0,0,0,37734,0,0,0,0,0,5188,0,0,0,0,0,24486, -0,5989,0,41159,0,0,0,0,0,0,0,0,0,20326,0,0,747,6884,0,0,0,41798,0,0,3117,22919,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21032,0,0,0,0,0,0,0,0,9574,0,0,0,0,0,0, -4302,0,0,0,0,0,0,0,0,0,0,0,21068,34630,0,0,0,0,0,64071,0,0,0,0,0,0,26667,7943,0, -0,0,0,0,52934,0,0,17002,0,0,0,0,0,0,20294,0,0,0,0,0,0,0,0,0,27301,18347,7974,0,0 -,0,0,0,0,0,0,16874,0,0,0,0,45414,0,0,0,0,0,0,648,1575,0,0,0,31749,0,0,0,23301,0, -0,0,0,0,0,0,0,0,0,0,0,15912,50535,0,0,0,0,1993,8582,0,0,0,0,0,0,0,38438,0,0,0,0, -0,0,0,0,0,0,0,0,15850,6183,0,0,0,0,3402,0,0,27494,0,0,749,0,0,0,0,0,0,0,26025, -29606,0,0,7144,19622,30504,0,0,0,0,0,0,0,0,21316,0,0,0,0,0,0,0,0,0,21444,0,0, -1289,6919,0,0,0,0,0,0,8299,0,0,0,14090,35655,0,0,0,0,0,0,0,0,2377,15206,0,0,6028 -,4452,0,25508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50310,0,0,0,0,1269,0,0,0,0,0,0,0,0,0 -,0,0,0,51014,0,0,0,0,0,0,0,9286,0,7429,0,0,28393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,16680,452,0,0,0,0,0,23718,0,0,0,31750,0,0,0,0,0,0,0,0,3568,0,0,13604,0,0, -0,0,0,25255,0,0,0,50982,0,56582,0,0,7467,0,0,0,0,30181,0,0,0,0,0,0,0,30564,7208, -7845,0,0,0,0,0,0,7726,0,0,0,0,62182,0,0,0,41094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,22695,0,0,0,0,0,0,17736,0,0,0,0,0,0,0,0,50054,0,0,0,14180,0,0,0,0, -0,0,8974,0,0,0,0,0,0,0,0,23332,0,0,0,11140,0,0,0,0,0,0,0,24262,27145,9540,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,26537,45510,6062,3879,0,0,20233,25991,0,0,17803,0,0,0,0,0, -13962,5508,16971,27013,7437,31494,0,0,0,0,0,0,0,0,0,0,4714,0,0,0,0,0,0,0,0,17189 -,0,0,0,0,0,27492,0,0,26953,0,0,0,0,0,0,0,0,0,0,41319,0,0,0,0,0,0,0,0,0,0,0,47430 -,19596,12549,0,0,0,8390,1006,0,0,0,0,0,0,0,0,0,0,24100,17577,4,0,0,0,0,0,22277,0 -,0,0,0,0,0,0,26692,0,0,0,0,0,24676,0,0,0,0,0,0,0,0,0,0,0,0,0,29477,0,0,0,21573,0 -,0,0,0,0,0,0,0,0,0,9864,14214,0,0,0,0,0,0,25771,5766,0,0,8909,8679,0,0,6861, -16166,0,38887,0,0,0,0,0,0,12392,8678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -52646,1354,2950,0,14692,0,0,10572,49830,0,0,0,0,0,0,0,0,3626,582,0,0,0,55750,0,0 -,0,30885,0,0,0,0,0,0,0,0,0,0,0,0,0,5830,0,0,2090,0,0,0,0,0,0,0,0,0,0,0,0,31142,0 -,0,0,0,0,10503,0,0,18825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -57158,0,0,30792,63526,0,0,0,9863,16267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,18824,0,0,0,0,0,0,19653,25388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9292,0,0,0,0,0,0,0,0,0,0,36358,0,0,0,0,0,0,0,0, -0,0,25480,23015,0,0,10440,6725,0,0,0,22436,24265,15109,0,0,0,62311,8906,34534,0, -0,0,0,0,0,15913,1319,0,0,20296,1477,30760,0,25928,16772,0,0,1069,0,0,0,0,0,0,0,0 -,0,0,0,0,17029,0,31909,0,0,0,0,0,0,0,0,0,0,0,41638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,41542,0,21478,0,0,0,9796,0,0,0,0,0,0,0,0,0,0,22187,58343,0,0,0,24295,0, -0,0,0,0,61831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2833,5829,0,0,0,62855,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,16676,0,0,0,0,0,0,13577,27431,0,0,0,0,21480,10501,0,16932, -0,0,0,0,0,22918,0,48294,2574,2150,0,0,0,0,1897,4518,0,0,0,0,0,0,25064,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47942,0,0,0,0,10990,13767, -25705,37863,21672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43430,1712,0,0,0,0, -18886,0,0,0,0,0,0,0,0,0,0,0,0,0,10535,0,0,0,0,0,0,0,15012,0,0,0,0,0,0,0,0,0,0, -14734,0,0,55782,0,0,30824,10886,0,0,0,0,0,51302,0,0,8012,0,0,0,0,0,20680,6981,0, -57415,11,0,0,18277,0,14564,0,0,0,32390,0,0,0,0,0,0,0,0,0,0,0,0,19113,5158,0, -11172,0,16774,0,0,0,0,0,0,0,0,0,0,0,0,10315,13830,0,0,0,0,0,0,10410,7141,0,0,0,0 -,0,18116,0,0,0,44615,15403,13958,0,1540,14632,19525,24201,19781,0,0,0,24165,0, -38951,0,0,0,0,0,6308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17416,15749,3438,13255,0,0,0,0, -0,0,0,0,0,0,0,32228,0,0,0,0,176,0,0,50566,0,0,0,0,0,0,0,0,0,0,0,0,0,21540,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,58982,0,0,0,0,0,0,0,0,0,5284,0,0,0,0,0,0,25897,28326,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15945,0,0,0,9804,293,0,0,0,0,0,0,0,13988,23082,4677 -,0,0,0,0,0,0,0,0,0,0,0,5670,0,0,0,0,0,0,0,44070,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,6405,0,30692,0,0,0,61702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,45926,0,15398,0,0,0,0,0,0,4554,2692,0,0,0,0,0,32485,0,0,0,10084,0,0,0,0,0,0, -24297,0,0,0,0,0,0,0,0,22790,0,0,0,55110,0,0,0,0,0,0,0,0,0,0,0,0,7112,0,31530, -45255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40743,17226,22599,0, -0,0,0,0,0,0,0,3695,0,0,0,0,0,0,0,0,0,0,56999,0,0,0,0,0,13799,3114,21287,1353, -7591,0,0,0,8455,0,0,6824,0,0,0,0,0,0,0,14569,0,0,0,29000,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,19979,0,18376,0,0,0,0,0,0,0,0,0,0,0,0,11332,0,0,0,49863,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,2191,7527,23148,58022,0,0,0,30631,0,26565,0,0,0,0,0,0,0,0,0,0,0,0,754 -,0,0,15877,0,0,0,0,0,0,0,17510,7657,2821,0,0,0,0,0,0,0,0,0,41927,0,0,0,0,0,0,0,0 -,2569,34439,0,0,3790,0,0,0,15339,8775,0,0,0,0,0,0,0,0,0,0,0,15908,0,0,21419,8359 -,0,0,0,0,424,0,0,0,0,0,0,25318,8008,20551,0,0,0,45735,30058,30372,0,0,0,0,0,0,0, -0,0,0,0,0,0,26180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31432,10567,0,0,0,0, -17450,0,0,0,0,0,0,30310,0,38022,0,0,0,0,0,28932,0,0,0,0,0,43910,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,22180,12075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22247,0,0,22826, -12359,0,0,0,0,4105,50407,0,0,0,0,0,0,13581,28583,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,28936,0,0,0,0,0,17673,10310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,905,57862, -1580,0,0,0,0,58630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13479,0,0, -14153,13286,0,0,9259,0,0,0,0,0,6606,3524,0,0,0,0,0,6567,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,631,49255,0,0,0,0,0,42886,0,38215,0,0,0,0,0,0,0,0,17580, -0,0,0,0,0,0,0,0,55046,0,0,0,0,0,0,0,0,0,10213,0,0,0,0,3604,37767,0,0,0,0,0,0,0,0 -,0,0,0,30950,0,0,0,0,0,0,0,0,0,62087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23528,0 -,0,0,0,0,0,0,0,0,28715,4229,0,0,0,0,0,0,0,0,0,0,1226,26820,0,0,0,12133,6984,261, -21130,32548,0,0,0,0,0,0,3565,12390,20713,28071,0,0,1706,25287,0,0,0,0,0,0,0,0, -14670,0,0,0,0,0,0,30534,0,0,0,12615,0,43750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28228, -0,0,0,0,0,0,0,45095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1224,3975,10954,6375,0,0,0,0 -,0,0,0,0,0,0,23180,20100,0,0,0,0,25736,8519,0,0,0,0,0,6663,0,2534,0,0,0,0,0,0,0, -0,23720,0,0,0,0,0,0,0,0,0,0,19398,0,47814,26281,49702,0,0,4332,12965,0,0,5704, -3206,0,0,0,0,0,0,0,0,0,0,0,0,0,15396,0,0,0,44102,0,0,0,0,0,0,0,0,0,0,0,0,0,25317 -,1064,39271,27433,0,14952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14308,0,0,0,0,0,0,2763 -,4100,0,0,0,0,0,0,18792,0,0,0,22154,32583,0,6244,0,0,0,0,0,0,0,49478,0,0,0,0,0,0 -,0,0,0,0,0,21894,0,0,11048,0,0,0,0,0,0,11685,0,53862,0,0,15114,0,13870,0,0,0,0,0 -,0,0,919,0,0,0,31916,0,22570,101,0,0,0,0,0,0,0,0,0,7333,0,0,0,0,3272,0,0,0,0, -27718,32712,0,0,0,0,0,0,0,0,0,1782,0,3688,0,0,0,0,29862,0,0,0,0,0,0,0,22469,0,0, -0,0,0,0,0,55302,850,15492,0,0,0,5927,19786,13350,0,25702,0,0,0,0,0,0,0,0,0,0,0, -40390,0,0,0,0,0,0,0,0,0,0,0,0,0,20260,0,0,0,0,0,0,0,0,0,0,0,0,0,15335,8394,0,0,0 -,0,0,0,26566,0,0,0,0,843,2245,0,0,0,0,0,0,0,0,6959,0,20488,1638,0,0,11533,50759, -0,0,0,0,0,20871,0,0,0,0,0,24519,0,0,0,0,9544,23591,0,0,0,0,0,0,0,0,0,0,20969, -7109,29001,0,0,32422,31720,64294,0,0,0,0,16106,0,0,0,6930,4933,0,0,0,22917,0, -27015,0,0,0,0,19880,8070,0,0,0,0,23945,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3310,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18439,0,0,0,20742,0,0,0,10597,0,0,0,0,0,0, -0,0,0,0,0,0,20236,0,0,0,16584,3429,0,0,0,0,0,0,0,0,27241,0,0,0,0,16132,0,0,0,0,0 -,0,0,0,0,0,0,0,244,28261,0,0,0,0,0,0,0,29509,0,0,0,0,0,0,0,0,2921,31781,0,0,0,0, -0,0,6408,4196,344,0,0,0,0,0,0,0,0,0,0,0,0,0,11689,45863,0,0,0,0,906,3301,0,0, -25544,32421,0,0,0,0,0,0,0,0,1260,61607,0,27302,0,0,8682,16614,0,0,0,0,10830,0,0, -9604,15049,13413,0,0,0,0,0,0,26761,0,0,0,0,0,0,61990,0,0,0,0,0,12580,0,0,11432,0 -,0,0,0,0,22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12389,0,0,0,0,0,0, -2408,22661,14507,43239,0,9700,0,0,24714,0,0,0,0,0,0,0,0,23972,0,0,0,0,0,0,0,0,0, -0,0,0,0,34086,0,0,22955,7238,0,0,0,0,0,28485,13806,20038,0,0,0,0,22602,0,0,0, -1645,22340,0,0,0,0,0,0,0,0,0,0,0,26502,0,0,554,0,0,0,0,61735,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,2694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,883,27879,15948,0,3242,57382,0,0 -,0,0,0,0,13930,0,0,0,0,0,30922,0,4137,52615,0,0,0,0,0,0,0,0,0,0,0,0,0,31911, -16072,0,0,0,0,0,0,0,0,0,0,0,0,26340,0,61671,0,0,0,0,3145,56199,0,0,0,0,0,0,0,0,0 -,0,0,0,280,0,5131,33479,0,15751,0,0,0,0,0,0,4136,1446,0,0,0,0,0,0,11304,17863,0, -0,0,0,0,25125,0,0,0,36646,6057,0,0,0,855,11301,0,0,0,0,0,64774,0,0,0,19397,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,1040,27367,0,0,0,0,0,0,0,0,0,0,0,0,0,64358,0,0,178, -132,0,0,14763,24455,0,0,0,46374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46246,0,0,0,37382, -0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8166,0,0,6921,0,0,0,9163,0,0,0,119, -0,0,0,23146,17156,0,0,0,0,0,9127,0,0,0,17927,0,0,0,0,0,22084,0,0,0,0,0,39879,0,0 -,2035,0,1067,0,0,0,0,0,16652,59591,0,0,0,0,0,0,0,0,0,0,0,0,20171,0,0,0,0,17733,0 -,0,0,0,0,32037,0,0,0,0,0,14277,0,0,0,0,0,0,0,42022,0,0,26793,20358,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,8907,0,0,0,0,0,0,0,0,27780,0,0,0,0,32330,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,39399,0,9732,0,16199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,854,0,2984,45063,25418,26980,22539,0,9133,3653,15528,28743,4649,0,616, -65127,0,0,0,61863,0,0,0,0,0,0,0,55303,0,0,0,0,0,0,0,0,23880,0,0,0,0,0,0,0,31848, -62854,0,0,0,0,0,0,0,0,0,0,0,49606,0,27974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,32580,0,0,0,26052,4043,0,0,40454,0,0,26056,30565,0,0,0,0,0,0,0,31398,0,0,0,0 -,0,0,0,0,29288,1797,0,0,3220,0,0,0,0,0,0,0,0,0,20427,0,0,0,0,23621,0,0,0,0,0,0,0 -,0,0,24261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35591,0,0,6862,0,0,0,4265,0,6285, -5383,0,0,0,0,0,36870,0,39847,0,0,17224,5414,27882,58118,0,0,13224,4262,0,0,0, -31302,0,0,1388,2982,11881,0,0,0,0,0,0,16837,809,0,24140,10724,0,0,0,0,5835,0,0,0 -,0,0,0,0,0,0,0,0,1256,19237,0,0,0,0,0,0,0,5796,11848,0,0,52870,11464,0,0,0,0,0,0 -,0,0,0,5645,9158,0,25223,0,0,0,0,0,39142,24968,8135,32104,28678,0,0,0,46311,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23820,0,0,0,0,0,4050,0,1323,25220,0,0,0,20133,0, -0,0,0,0,0,0,0,0,0,0,9381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,13444,1198,60806,0,0,0,0,17356,50247,30632,0,0,0,0,0,0,0,11944, -999,0,0,0,0,4010,10404,0,0,0,0,0,0,10346,0,0,49510,0,0,0,0,0,0,0,0,0,0,0,0,0, -38919,0,0,0,0,0,0,6351,60966,20137,487,0,0,0,0,0,0,655,2406,17387,43303,0,0,0, -17063,0,0,213,0,0,0,0,0,0,17221,0,0,0,0,0,0,0,0,0,0,0,10820,0,0,0,0,369,6,0,0, -9098,21093,0,31653,0,0,0,0,0,0,0,0,0,27143,0,0,16234,0,0,0,0,0,0,0,0,6020,31723, -28293,0,0,0,0,1936,30695,0,0,0,0,0,52902,0,0,29512,10791,0,20420,0,0,16010,0,0,0 -,0,0,0,0,0,0,0,0,5324,0,0,0,0,0,0,0,0,0,0,0,0,13383,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,24328,0,0,0,0,0,0,40870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,24648,0,0,0,0,0,0,0,7786,2852,0,0,0,0,0,0,0,0,0,44678,0,17925,0,0,105,53062, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18762,0,0,40679,0,0,0,16165,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,20390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62310,1322, -14247,0,0,0,0,0,0,0,0,1832,6052,0,0,11882,0,0,0,0,17668,0,28262,0,29542,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28007,0,0,0,57223, -1585,0,0,0,0,0,0,0,0,0,0,0,21162,0,0,62247,0,0,0,0,0,25414,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,36326,0,0,0,23845,0,0,0,0,0,0,0,2693,0,0,0,0,0,0,0, -13125,0,31236,0,0,0,0,0,22502,0,0,0,0,0,0,5994,10309,0,0,0,7269,0,0,0,0,17929,0, -1011,44647,0,0,0,0,0,14919,0,0,0,0,20586,5350,0,0,0,45702,0,13189,0,0,0,0,0,0,0, -0,0,35782,17992,0,0,0,0,0,8203,0,0,0,0,0,0,56678,0,0,0,0,0,38087,4233,0,2127,0,0 -,0,0,0,0,0,0,0,0,10148,0,0,0,2021,0,0,0,0,0,0,0,47206,0,0,0,0,0,0,0,9220,0,0,0,0 -,19465,0,0,0,0,0,0,0,0,39206,0,38055,0,0,0,0,0,0,0,46982,0,0,0,0,0,22054,3850,0, -0,0,0,0,0,0,55,0,10542,0,0,0,0,7239,0,0,0,0,0,59367,0,0,14761,0,0,0,0,43079,0,0, -0,0,0,2726,0,0,9582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37478,0, -0,0,31364,0,0,0,0,0,0,0,0,20393,8933,0,0,0,0,0,9380,0,0,0,0,16905,549,0,0,0,0, -182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,19242,0 -,0,0,0,0,0,24933,0,6276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42310,23595, -24068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13191,6158,2567,0,0,268,47047,0,0,0,0,0,0,0, -0,0,27940,0,0,0,0,0,26726,0,0,0,0,8200,1222,31562,0,0,0,0,0,0,0,0,0,2922,8231, -8904,29157,0,0,0,0,0,0,0,0,23976,4836,0,0,0,0,0,0,0,0,0,0,0,0,31658,0,0,31685,0, -0,2889,6213,0,0,0,0,0,13605,0,0,0,0,0,24772,0,0,0,0,0,0,0,0,0,0,20684,26468, -24075,0,0,0,21193,0,715,679,0,0,0,0,0,0,3050,7654,0,0,0,13798,0,0,0,0,15,27973,0 -,0,8491,2086,0,0,0,43206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60391,0,0,0,0,0,0 -,0,25892,0,22276,0,34374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20165,0,0,25672,0 -,0,0,1811,24839,0,31044,0,0,25513,0,0,0,0,0,12810,0,0,62438,0,0,1325,0,364,3782, -0,0,0,0,0,0,0,0,8042,19687,0,0,0,33415,0,0,0,0,0,0,0,0,0,0,0,7205,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,11844,0,0,0,0,3341,1543,6698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,29766,0,0,0,0,0,0,0,0,0,0,0,41158,0,24294,0,3844,12329, -0,0,0,13738,0,0,0,0,0,0,0,0,26245,0,0,0,0,0,0,6378,0,343,4838,0,0,0,24358,11688, -0,0,0,0,0,0,0,0,0,1489,34759,0,0,0,0,363,51974,1878,11013,0,0,32265,59782,0,0,0, -28421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14089,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,29257,61222,0,30661,0,28327,0,0,0,0,0,0,0,0,0,0,0,0,0, -27108,8843,0,9673,2084,0,0,0,16327,0,48455,0,0,0,0,0,0,4876,9316,0,0,0,0,0,0,0,0 -,0,0,0,0,9035,18852,0,0,0,0,0,0,0,0,0,0,0,0,0,4164,0,0,14827,1349,0,0,0,0,0, -11909,0,0,0,0,0,0,0,0,0,21765,0,0,0,0,0,0,0,0,31272,63910,0,0,0,25924,0,0,0,0,0, -0,0,0,0,44487,0,0,0,20612,0,0,27754,31428,0,0,0,0,0,0,0,17287,0,3943,0,0,0,63302 -,0,0,0,0,25256,19942,0,55142,0,39046,0,0,0,0,0,0,0,15367,0,0,0,0,0,0,0,0,0,0,0, -28422,0,0,0,0,0,0,0,0,0,0,0,0,9576,63847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,25226,5734,0,0,0,0,0,0,13801,4997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,43942,1270,2566,6284,0,0,16230,0,0,0,20678,0,0,0,0,0,38855,0,0,0,0, -29643,0,0,0,41,3655,0,0,0,0,0,14276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,15686,0,0,0,15718,0,50694,0,0,16232,8007,0,0,0,5060, -329,11591,51,0,0,0,0,0,0,0,0,0,13065,7302,27530,15366,0,24934,0,0,0,17828,0,0, -4552,6311,0,0,0,0,0,0,0,0,0,0,0,47686,368,12103,10122,33830,0,0,599,18534,9579, -49479,0,5668,0,0,0,0,0,0,0,0,0,13157,0,0,0,0,23274,14055,0,0,0,0,0,48903,0,0,0,0 -,0,0,1871,0,15434,0,0,0,16174,62470,0,0,0,0,0,0,0,0,0,0,0,7749,0,0,0,0,0,0,0, -30501,0,0,0,0,25675,0,0,0,0,0,0,0,0,0,0,9285,0,0,25323,1669,0,0,0,0,0,0,0,0,0,0, -0,3588,0,0,0,0,0,32902,0,0,4426,0,0,0,0,57959,0,0,0,0,0,0,29898,58278,0,0,0,0, -11880,1220,0,0,0,41479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23141,0,0,0,0,0,0,0,0,0,0,0 -,0,0,42566,0,0,0,0,0,0,0,40167,9484,3493,0,0,0,0,0,21126,0,0,0,0,8649,18918,0,0, -0,0,0,0,0,34886,2601,0,0,0,0,12518,0,0,0,0,7976,10311,0,0,0,0,0,0,0,45190,0,0,0, -0,0,0,0,0,0,0,16842,20229,0,0,0,0,0,0,7528,4614,0,0,0,0,0,30086,0,0,0,1671,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,9896,6277,0,0,0,0,0,61191,0,41287,0,21956,0,0,20010,0,0,0 -,0,0,0,0,0,0,0,0,13195,0,0,0,0,1381,0,0,0,0,365,30951,24268,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,7044,0,0,0,0,0,0,0,0,0,0,27944,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,28487,0,0,77,0,0,0,0,0,0,0,0,56775,12586,8421,0,0,0,0,0,0,26185,14599,0,0, -8040,5702,12585,3109,0,0,0,0,0,21574,5388,0,0,0,0,0,0,0,5106,52454,0,0,0,0,0,0,0 -,0,1907,29895,0,6116,0,0,0,0,11081,5285,0,28069,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4104 -,0,0,0,0,0,0,41511,0,0,0,0,0,0,5262,0,0,0,503,4231,7720,34343,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7304,10374,1718,0,0,29127,0,0,0,0,0,0,0,0,23497, -22567,6952,2340,0,0,0,0,0,0,0,0,20360,12453,0,45094,0,0,0,0,0,28582,0,0,0,0,680, -0,0,0,0,0,0,0,0,0,0,0,0,0,23084,0,0,0,30696,0,0,0,0,45862,0,0,0,0,0,0,0,0,0,0,0, -0,5580,6053,0,0,0,0,0,0,0,0,0,0,712,70,0,0,26091,11335,0,0,0,0,13612,0,13160, -1926,435,51559,0,0,0,0,0,0,0,0,0,0,0,0,0,47302,19083,0,0,12742,0,1607,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,6155,37095,0,0,0,0,0,18948,7146,0,0,0,0,0,0,0,7848, -2055,0,0,0,0,8910,0,19336,0,0,48070,8490,0,0,0,0,0,0,0,9932,56423,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,4133,0,0,0,0,0,0,0,0,0,43398,0,0,0,0,0,0,0,0,16173,0,0,0,0,0 -,0,0,32011,0,0,30918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26854,0,0,0,0,0,0,0,0,0,0,0,0 -,0,20389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18889,0,0,0,0,8965,0,0,0,44358,0,0,0,8997,0 -,34055,0,0,0,0,0,29350,0,0,501,17767,0,0,32457,60262,0,0,0,30886,0,0,3757,1063,0 -,0,0,25637,0,0,0,0,0,28068,0,26374,0,0,0,0,0,0,0,0,0,0,0,11684,0,0,0,0,0,0,24779 -,229,0,13766,0,0,7402,11525,0,0,0,0,0,0,0,0,26313,23686,0,0,29736,47527,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27268,0,0,0,0,553,0,0,0,0,0,0,32038,0,0,0,0,1135, -26596,0,0,12300,14631,0,0,0,43238,0,871,0,0,31496,0,8457,17669,0,12836,0,0,0, -22726,0,38758,0,0,375,6564,0,0,0,0,0,0,0,0,0,0,0,0,170,18535,0,22948,0,0,32360,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,25764,0,0,0,0,0,0,0,0,0,0,0,15652,0,0,0,32774,0,0,0,0 -,0,0,0,0,0,28551,0,0,0,0,0,0,0,0,0,0,0,0,15145,0,0,0,21100,27654,0,0,0,0,0,0, -4874,26215,0,1639,0,0,0,0,0,0,0,0,0,0,4169,0,0,0,0,0,7336,0,0,0,0,21572,0,0,0,0, -0,0,0,0,0,24644,1675,2533,0,0,0,53318,0,13094,0,0,0,0,0,0,0,6246,0,22020,0,0,0,0 -,0,0,0,0,0,0,0,28453,5576,5124,0,0,0,0,0,0,0,0,0,0,0,0,0,27910,0,29382,18216, -8583,0,0,0,39174,0,43558,0,0,0,0,0,0,0,0,0,11973,0,0,0,0,0,23397,0,0,0,0,6091,0, -0,0,0,0,0,0,6474,16197,14217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,26728,0,567,48839,0,0,0,0,0,15271,0,0,31818,43974,2450,0,0,0,0,0,0,0, -11368,9191,0,44454,0,0,0,0,0,0,14568,12293,0,0,0,8453,0,0,0,0,0,0,0,0,0,0,0,0, -32040,0,0,0,0,0,0,0,0,0,0,0,0,902,0,0,0,27236,5612,11495,0,0,0,0,0,0,0,0,9194, -23684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27430,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -26217,44870,0,0,0,0,0,0,5581,7173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -52775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20968,18340,0,0,0,0,0,0,0,0,4107,11239 -,0,0,0,0,0,0,0,0,0,0,0,29381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21990,0,0,0,0 -,0,0,0,0,0,48806,0,0,0,32292,0,0,0,0,0,0,0,10884,0,0,0,0,0,0,0,0,0,0,27562,0, -5643,0,0,0,0,0,0,0,0,0,3089,31525,0,19684,0,0,0,0,0,0,0,61415,0,0,0,0,0,36198,0, -0,0,0,0,0,0,7908,0,0,0,0,872,743,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,32484,0,0,0,0,0,34822,0,0,0,0,0,50726,0,0,0,0,7274,0,0,0,15304, -11526,0,0,0,3047,0,0,0,0,0,0,22376,0,0,0,846,0,0,0,0,35815,0,0,0,23652,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,23721,2148,0,0,0,0,0,0,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,1358,0,3082,0,0,0,848,10949,0,0,0,0,0,0,6504,0,0,14372,0,0,0,0,0,0 -,0,0,0,0,8201,9958,0,0,0,0,0,0,24266,0,0,0,0,0,0,0,0,26469,0,0,0,0,18604,2053,0, -33511,0,0,0,0,0,9222,0,0,0,0,0,44006,0,0,0,0,0,0,0,0,0,0,0,41895,0,0,0,0,0,0,0,0 -,12044,390,0,0,0,0,0,4935,0,48646,0,56102,3052,16070,0,0,0,0,0,0,0,8612,9320, -38311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,0,0,0,0,42918,0, -32550,0,0,0,0,0,0,0,0,27434,57926,17064,0,0,46502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,26760,6756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,624,0,5000,0,0,0,0,32293,0, -0,0,0,0,0,0,0,0,0,0,0,0,26246,0,0,0,0,0,0,0,0,23,7301,0,0,0,36199,0,40838,0,0,0, -0,0,0,0,0,0,0,0,0,27178,57350,0,0,12457,9317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16810,0,0,0,14510,0,0,0,0,21319,0,0,0,13508,17, -11365,0,0,0,0,5291,0,8329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27685,0,0,0,0,0,0,0, -52006,0,0,0,7493,0,44263,0,0,0,0,0,0,0,0,9800,0,0,0,25676,61478,0,0,0,0,0,0,5773 -,0,0,0,0,41991,26057,0,0,0,0,0,0,0,0,0,0,22629,0,0,0,47783,362,1959,23468,0,0,0, -10921,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,32456,0,0,0,0,0,0,0,4559,3270,0,0,983,0,0 -,26343,0,33446,0,0,0,61767,0,48390,0,0,0,0,0,0,0,2790,0,39782,7849,0,0,0,0,0,0,0 -,1544,2183,0,0,0,0,0,0,0,0,4040,2471,20009,30020,0,0,11242,0,0,0,5578,53382,0, -22631,0,0,0,0,0,0,0,0,0,0,0,12901,0,0,0,0,0,0,0,0,0,0,0,0,215,0,0,9030,0,0,0,0,0 -,0,265,1412,0,0,11626,3687,0,0,0,0,0,0,0,0,0,0,0,0,17449,24359,0,0,26729,40134,0 -,0,0,0,29768,61958,0,0,0,0,0,0,0,0,20908,0,0,0,0,0,11016,0,0,47462,21547,5926,0, -0,14728,2983,24104,15301,0,0,0,0,0,32645,0,0,0,0,0,0,0,3300,0,0,0,15972,0,0,0,0, -0,0,6634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3076,0,30983,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,106,0,0,0,0,12775,0,0,0,0,7177,18022,0,0,0,0,0,22534,0,0,0,0,0,0,0,0,0,0,0, -49894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27560,0,0,0,0,30278,10668,23877,0, -0,0,0,0,0,0,29124,0,0,0,0,0,0,0,0,0,0,0,0,0,20870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,44582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48454,0,0,0,0,6442,0,16330,22951,0,0 -,16904,0,0,0,0,644,0,0,0,40038,0,0,0,37222,0,0,0,9830,0,0,0,0,0,34919,0,0,0,0,0, -0,0,0,0,0,0,13733,0,0,0,28196,0,0,0,0,0,19876,0,0,0,0,0,0,0,23558,0,11142,0, -27781,0,0,0,0,13864,0,0,0,24682,47847,0,0,0,0,6890,0,0,0,0,0,3981,0,0,0,0,0,0,0, -0,0,0,0,1772,0,0,0,0,0,0,0,3603,1991,0,27396,8652,0,18312,0,0,0,0,30054,0,0,0,0, -0,0,0,11270,0,0,0,0,0,0,0,0,0,20708,0,0,0,0,338,0,0,0,0,0,0,0,7050,0,0,0,0,0,0,0 -,0,0,0,0,0,0,14862,0,0,3492,0,0,0,55878,0,0,0,16486,0,0,0,18119,0,0,0,0,0,0,2154 -,1284,0,0,23113,31751,0,0,29547,0,0,0,0,0,0,36647,0,0,0,0,0,0,0,0,0,0,0,18183,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,7913,0,0,0,0,20644,0,0,10508,0,0,0,0,0,0,0,0,0,0,0,0, -43622,0,0,0,0,0,40966,0,0,0,0,0,0,0,0,0,0,246,901,11529,5191,0,0,0,0,0,0,0,0,0,0 -,0,24454,0,0,26665,27590,0,27397,0,0,0,0,0,0,23562,2949,0,0,30344,62214,0,47334, -2026,18885,0,0,0,48678,0,0,0,22694,0,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,15465,0,0,0,0,38822,0,0,0,0,945,32708,0,54791,0,14918,0,0,0,0,0,0, -0,0,0,0,0,0,0,23396,0,0,0,0,0,0,5486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7722,0,0, -0,0,0,0,0,0,0,0,0,30856,64166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35206,0,0,0,30535,0, -0,0,0,0,0,0,0,0,62663,0,0,1096,17574,31820,0,0,14375,4402,27207,0,0,21448,4676,0 -,0,0,0,16585,5094,0,0,0,0,0,0,0,0,4845,0,0,32870,0,0,0,0,0,0,0,0,0,0,31466,0,0,0 -,0,31783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4522,16039,0,0,0,0,0,0,0,0, -0,14469,0,0,0,0,0,0,0,0,0,0,7464,4773,0,0,0,0,0,0,0,0,18636,0,0,0,25640,0,0,0,0, -0,0,2244,0,0,11818,0,1168,0,0,0,0,0,0,0,6540,23079,13770,7719,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58150,528, -34502,32682,0,0,12997,0,0,0,0,0,2214,0,0,0,0,0,58567,0,0,0,26375,0,0,0,0,0,0,0,0 -,0,26437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,32005,22952,59047,0,13543,0,0,0,0,0,0,0,0,16328,0,0,33542,0,0,0,19782,0,0,0, -16644,0,0,0,0,31688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10276,0,0,0, -0,0,0,0,36327,0,0,29480,0,0,0,777,12709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27398,0,0, -0,4455,9037,31397,0,9221,0,0,0,60487,20840,1796,0,0,0,0,0,0,0,0,8364,0,0,0,0,0,0 -,0,0,0,0,0,19752,44902,0,38566,0,0,18027,0,0,0,0,0,0,0,0,10662,0,0,0,0,0,11812,0 -,0,0,0,0,0,0,0,0,19910,0,0,0,45030,0,0,0,0,0,0,0,0,0,0,0,0,19978,5127,0,11620,0, +BROTLI_INTERNAL const uint16_t kStaticDictionaryHashWords[32768] = { +1002,0,0,0,0,0,0,0,0,683,0,0,0,0,0,0,0,1265,0,0,0,0,0,1431,0,0,0,0,0,0,40,0,0,0, +0,155,8,741,0,624,0,0,0,0,0,0,0,0,0,0,0,0,66,503,0,0,0,451,0,0,0,0,0,0,0,835,70, +0,0,539,0,0,0,0,0,0,0,0,0,113,0,0,0,0,718,0,0,0,0,0,0,520,0,1070,0,0,0,0,0,1515, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,610,0,0,750,0,0,0,307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,964,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,999,0,0,0,0,0,0,0,0, +645,75,0,649,52,282,0,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1621,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,211,225,0,0,687,718,0,0,110,0,58,0,0,0,0,0,0,345,0,0,301,0,0, +0,203,0,0,1154,674,1949,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,1275,0,0,0,1231,254, +0,0,0,0,0,0,0,277,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,0,0,800,0,0,0,29, +116,100,490,0,0,0,0,0,1641,0,543,0,0,0,0,41,181,0,657,0,0,202,25,0,0,0,0,0,0,0, +0,0,0,423,0,0,0,113,0,0,0,927,963,0,976,0,206,0,0,0,0,0,0,0,0,0,2002,0,0,0,0,0, +0,0,0,0,0,0,696,0,1170,0,0,0,0,226,13,0,769,678,551,0,0,0,0,0,0,57,0,0,0,10,188, +0,0,0,624,0,0,0,0,0,0,0,0,0,1941,130,0,0,0,0,378,269,0,0,528,0,1146,0,0,0,1105, +0,1616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,656,0,1940,0,0,0,0,0,173,0,0,0,0,0,0,0,0,0, +0,0,457,342,810,0,0,0,0,620,0,0,0,0,0,0,0,967,95,447,406,0,0,0,477,0,1268,944, +1941,0,0,0,629,0,0,0,0,0,375,0,0,0,1636,0,0,0,0,774,0,1,1034,0,0,0,0,0,824,0,0, +0,0,0,118,0,0,560,296,0,0,0,0,0,0,0,0,1009,894,0,0,0,0,0,0,0,0,0,0,0,0,0,1474, +366,0,0,0,0,0,0,0,0,0,79,1723,0,0,200,0,0,0,0,0,0,0,0,1759,372,0,16,0,943,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,258,0,0,900,1839,707,30,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,2004,0,0,10,115,0,50,0,0,0,0,0,0,0,0,0,0,520,1,0,738,98,482,0,0,0,0, +0,0,0,0,0,0,701,2,0,0,0,0,0,0,0,0,557,0,0,0,0,0,0,0,0,0,347,0,0,0,0,572,0,0,0,0, +0,0,0,0,0,832,0,0,797,809,0,0,0,0,0,0,0,0,0,0,0,528,0,0,0,861,0,0,294,0,0,0,109, +0,0,0,0,0,0,0,0,1187,290,266,0,0,0,0,49,50,748,0,0,466,399,0,0,0,0,0,0,0,378,0, +519,0,0,0,0,0,0,0,0,0,0,0,0,667,351,902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180, +0,0,869,0,0,0,0,0,0,0,260,0,0,0,0,0,0,0,0,0,0,523,36,0,0,587,510,809,29,260,0,0, +0,0,0,0,0,0,570,0,565,0,1464,0,0,0,0,0,0,10,0,0,787,399,380,200,0,0,0,0,516,0, +844,887,0,0,0,0,0,0,0,44,0,0,0,305,1655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,786,10,0,0, +0,0,0,0,0,0,0,2031,0,0,0,0,0,684,0,0,0,0,0,1480,0,0,0,27,0,0,0,395,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,813,511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,206, +496,0,0,0,0,0,909,0,891,0,0,0,0,0,0,0,0,0,687,0,0,0,1342,0,0,0,0,0,0,0,0,0,0, +160,41,0,0,0,0,0,0,0,0,0,0,0,1718,778,0,0,0,0,0,0,0,0,0,0,1610,0,0,0,0,0,115,0, +0,0,0,314,294,0,0,0,983,178,193,0,0,0,0,0,0,0,0,0,174,0,0,0,0,0,0,0,0,0,0,848, +1796,0,0,0,0,0,0,221,0,687,1660,0,0,0,0,262,0,0,179,0,0,0,0,0,66,0,773,0,352,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,152,0,0,1197,0,0,0,0,0,0,0,0,0,0,0,0,560,0,0, +564,0,0,0,797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,556,0,819,0,0,0,0,0,0,0,0,719,544, +637,5,0,0,0,0,0,0,0,0,0,0,0,101,0,1441,0,0,0,893,0,0,0,0,0,0,0,0,0,238,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,1296,0,0,969,1729,314,60,0,0,0,0,0,1144,0,1147,0,0,0,0,0, +0,0,0,0,0,437,1853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,828,0,176,0,0,0,0,0,0,434,39,0, +0,0,0,0,159,0,0,0,902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,270,0,0,0,0,801,556,0,0, +0,0,0,0,0,416,19,197,369,0,0,0,0,0,0,0,0,0,28,34,0,757,0,0,898,1553,0,721,0,0,0, +0,1012,0,0,0,0,1102,0,898,183,0,0,0,0,0,0,0,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,277,0,0,0,435,0,0,0,0,0,1311,0,0,0,0, +0,0,211,437,0,0,0,28,0,0,750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2012,0,702, +0,808,0,0,0,0,739,166,0,0,0,0,0,0,719,170,500,0,0,0,0,0,0,0,0,1500,327,0,0,450, +0,0,0,1318,0,0,0,1602,0,0,331,754,0,0,0,0,0,1368,0,0,557,0,0,0,799,850,0,0,0,0, +0,0,0,0,908,0,0,0,0,0,19,62,459,0,0,0,0,0,0,0,0,0,0,0,0,1802,0,0,0,0,0,0,0,0,0, +1397,0,0,0,0,120,238,0,0,0,0,0,0,0,0,0,0,0,1324,0,0,0,0,0,0,0,0,602,201,0,0,164, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,615,0,0,0,0,0,0,0,0,0,0,0,0,0,1243,0,0,0,0,968,0,0, +0,0,0,0,882,0,0,0,907,329,100,0,0,0,0,0,0,0,0,0,0,0,176,26,9,0,0,265,256,0,0,0, +0,0,0,0,0,0,643,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,610,0,0,0,0,973,2001,0, +0,0,0,0,0,522,0,0,0,0,0,0,0,0,0,0,0,553,0,0,0,0,0,0,1582,0,1578,0,0,0,0,0,0,0,0, +0,0,0,795,0,0,0,432,0,0,0,0,0,0,84,126,0,0,0,0,790,0,377,64,0,1529,0,0,0,0,530, +1857,539,1104,0,0,0,0,0,0,0,0,0,0,0,0,977,0,0,0,34,0,0,0,0,0,0,0,0,0,0,0,24,26, +0,0,918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,183,379,0,0,0,0,0,0,0,792, +0,0,0,0,0,0,0,0,0,1920,0,0,0,0,0,0,0,0,0,771,0,0,0,1979,0,901,254,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,0,0,0,0,0,440,37,0, +508,0,0,0,513,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,533,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,752,920,0,1048,0,153,0, +0,391,0,0,1952,0,0,0,0,0,0,0,0,0,0,126,0,0,0,0,640,0,483,69,1616,0,0,0,0,0,734, +0,0,0,0,0,0,480,0,495,0,472,0,0,0,0,0,0,0,0,874,229,0,0,0,0,948,0,0,0,0,0,0,0,0, +1009,748,0,555,0,0,0,0,0,0,193,0,653,0,0,0,0,0,0,0,0,0,0,984,0,0,0,172,0,0,0,0, +0,0,0,0,83,1568,0,0,384,0,0,0,0,0,0,0,164,880,0,0,0,0,0,0,0,0,0,0,0,367,121,0,0, +828,0,0,0,0,0,0,0,1541,0,0,0,0,0,0,0,343,0,0,0,0,0,0,0,0,561,57,0,0,0,0,0,0,0, +926,0,0,0,0,827,0,194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0, +0,0,0,896,1249,0,0,0,0,0,1614,0,0,0,860,0,0,0,0,0,0,0,0,964,102,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,569,0,0,0,0,795,2045,0,0,0, +0,0,0,104,52,0,0,0,0,0,604,0,0,0,0,779,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0, +494,0,677,0,0,0,0,0,0,0,508,0,0,0,0,0,0,0,0,0,1014,0,957,0,0,630,310,0,0,0,570, +0,0,449,0,64,537,0,0,0,0,0,0,0,244,0,0,0,0,0,0,0,0,0,0,0,0,0,0,702,1650,49,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,1279,0,0,0,0,0,0,0,896,0,0, +178,0,0,0,0,0,0,0,0,0,0,0,0,0,808,695,0,0,0,0,539,1117,0,0,0,0,0,0,0,0,257,0, +1003,0,0,0,1,448,0,516,0,0,960,0,125,4,0,1268,30,748,0,0,852,0,0,0,6,0,0,848, +236,1385,862,1811,0,0,0,0,698,803,0,0,0,0,0,0,0,610,992,0,0,878,0,1847,0,0,0,0, +0,0,0,383,0,1404,0,0,0,0,986,0,347,0,0,0,0,0,0,0,0,0,0,0,592,572,0,1411,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,606,0,0,0,0,0,0, +0,0,0,0,0,0,0,1829,0,0,0,0,0,0,0,0,0,0,0,0,700,748,0,0,0,0,0,0,365,0,0,127,0,0, +83,198,0,0,0,0,0,0,864,55,0,0,0,0,726,1752,0,0,0,0,0,0,0,0,0,0,0,0,0,1066,0,764, +0,0,0,0,683,0,550,309,0,0,874,1212,0,0,0,1364,0,986,381,723,0,0,0,1573,0,0,0,0, +0,1025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1559,0,0,0,0,493,133,0,0,0,0,148, +119,0,0,0,0,0,0,537,14,541,0,635,126,0,0,0,495,0,0,0,0,861,998,1009,0,0,0,0,0,0, +0,359,368,0,0,0,0,304,1577,0,0,0,0,0,1107,0,0,0,0,0,929,0,0,0,1142,0,0,0,0,289, +175,0,432,0,219,0,0,0,0,0,785,0,0,595,0,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0, +931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1323,0,0,0,0,290,0,559,1751,127,0,0,0, +934,1167,0,963,0,260,0,0,0,573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +580,1689,0,0,0,0,0,0,0,0,0,1164,0,0,982,1922,0,63,0,0,0,0,0,793,0,0,0,0,0,0,0,0, +0,0,0,0,0,67,790,0,0,0,0,0,0,0,0,0,0,391,443,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,1140,0,0,0,0,340,300,0,897,0,0,0,0,0,0, +0,0,0,0,890,0,0,0,0,818,321,53,0,0,0,0,0,0,0,0,0,468,0,243,0,870,0,0,0,1765,121, +0,0,0,180,518,0,822,419,634,0,0,0,0,0,0,0,0,0,898,0,0,0,0,454,36,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,806,0,0,0,0,0,0,0,0,0,0,0,0,1326,0,104,0,0,0,0,0,0,0, +0,0,260,0,0,0,0,0,0,0,0,0,0,0,0,542,45,0,0,263,1516,42,0,0,0,0,0,468,0,1005,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,288,87,0,0,0,0,0,0,0,0,502,988,133,0,0,0,0,0,0, +141,0,0,872,1842,0,0,0,0,0,0,0,0,261,619,0,0,0,0,189,246,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,678,0,0,0,0,0,0,0,0,0,0,0,0,285,35,0,517,0,0,0,0,0,0,0,0,0,0, +540,214,667,0,74,0,0,125,0,0,0,0,0,761,131,0,0,0,0,0,0,0,0,0,0,0,0,0,333,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1338,94,0,0,0,0,0,0,0,0,0,0,0,0,449,0,646,103, +86,641,2028,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,869,87,277,117,39,0,0,0,0,0,0,0,0,938, +297,0,0,0,0,558,464,0,0,0,0,0,0,0,0,0,0,731,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1608,0, +0,0,0,0,0,0,1429,0,0,733,1010,0,0,338,1656,0,0,0,1038,979,2010,0,0,0,0,0,0,0, +1005,0,0,121,0,0,0,219,20,0,0,0,0,0,0,872,1440,0,0,0,683,0,1070,0,0,522,0,0,0,0, +439,669,0,0,0,0,0,0,0,0,1245,0,0,0,0,0,1218,0,0,547,233,0,0,0,0,0,0,0,0,0,482,0, +0,0,0,0,0,0,886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,795,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,371,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,625,0,0,0,339,29,0,0,338,0,0,0, +0,130,0,0,0,0,0,0,0,0,0,307,0,0,0,0,0,0,0,0,0,0,2044,0,0,0,0,0,0,0,0,308,770,0, +0,0,0,0,1266,0,0,0,0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,690,739,0,0, +0,0,0,0,0,990,0,0,0,1831,0,0,0,0,0,0,0,0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0, +0,763,0,878,0,0,0,977,0,100,0,0,0,0,0,0,0,0,0,463,0,0,0,0,623,318,0,0,296,463, +137,0,0,454,0,0,0,1527,58,0,0,0,0,0,0,0,18,48,0,0,0,0,0,729,0,0,0,442,0,0,0,0, +40,449,0,853,0,0,0,0,0,0,227,0,0,0,0,0,0,1491,0,0,0,0,0,0,0,0,0,0,161,55,0,450, +0,1174,62,0,207,0,0,0,0,0,0,0,0,869,0,0,0,0,80,213,0,0,0,0,0,0,0,0,0,0,354,820, +0,0,747,0,0,0,954,0,0,1073,0,556,0,0,0,692,0,191,0,804,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,831,162,0,0,35,0,0,0,0,0,0,0,0,1235,0,0,0,0,0,1234,0,0, +0,0,0,0,0,0,0,0,96,0,0,0,0,0,0,0,149,0,0,0,902,204,0,0,833,0,287,366,0,0,0,0,0, +0,992,2020,0,0,0,0,0,0,0,0,0,0,0,356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,784,0,0,567, +630,0,0,0,539,0,0,27,0,0,0,0,0,0,0,0,0,0,755,0,0,0,0,0,0,0,0,0,0,0,0,814,0,0,0, +0,0,0,0,0,0,0,0,0,0,987,0,0,255,761,194,0,1086,0,0,0,0,0,0,1016,0,0,1396,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,562,271,913,0,0,0,0,0,0,0,0,320,153,45,475,0,0, +0,0,0,0,0,713,0,327,0,0,0,0,0,0,604,552,3,359,0,0,0,0,853,80,0,0,0,0,0,0,0,2016, +6,887,0,0,0,0,975,0,961,0,0,0,0,0,916,1891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,100,101,390,708,0,0,0,587,983,512,0,0,0,0,0,0,0,0,0,0,0,645,0,0,0,851,0,0,0, +0,0,498,140,217,0,0,0,1448,0,0,0,0,0,0,0,0,0,905,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +643,105,0,792,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,0,0,0,535,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1748,0,0,0,0,0,754,0,0,0,0,0,0,0,0,0,0,0,0,91,0,0,1565,0,91,792, +939,3,370,0,0,0,0,95,0,0,0,0,551,7,619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1150,0, +0,0,0,0,0,0,0,0,0,0,0,0,671,0,0,0,0,0,888,368,149,0,0,105,1134,0,983,0,0,458,31, +0,643,0,0,0,312,0,740,0,0,0,1642,0,0,0,0,0,0,0,236,0,0,0,0,0,0,0,59,68,0,0,0,0, +0,867,795,0,0,0,0,970,1977,0,0,0,0,0,0,0,1148,0,775,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,970,0,0,0,0,0,0,0,0,0,665,71,0,0,0,0,827,0,0,0,0,0,0,0,0,0, +0,479,0,0,0,0,0,0,0,0,99,607,0,0,0,0,0,0,0,1960,0,0,0,793,0,0,871,41,0,0,241,94, +0,0,0,0,209,0,0,1497,0,0,0,0,0,0,0,0,0,98,0,0,0,463,0,0,0,0,291,0,0,0,0,0,0,0,0, +0,0,984,0,0,0,0,0,205,0,0,0,0,0,0,205,42,0,801,0,0,0,0,0,635,0,0,533,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,371,0,1282,0,0,0,825,0,0,0,0,0,0,0,0,0,357,879,467,0,317,0,0, +0,0,0,0,0,924,0,0,0,0,849,1795,0,0,0,0,895,1799,43,0,0,0,0,0,0,0,0,0,0,1820,0,0, +0,0,0,0,0,525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,0,493,0,174,417,0,0, +0,0,0,583,733,0,0,0,0,0,0,481,215,0,0,0,0,477,0,0,0,0,0,0,0,0,308,0,0,0,0,0,0,0, +0,297,126,0,0,361,1551,0,0,0,0,0,0,871,1807,0,0,0,0,0,1307,0,685,0,0,0,0,0,0,0, +797,0,858,0,565,0,0,0,0,0,0,0,0,0,0,0,0,434,252,826,0,0,0,0,0,0,791,0,0,0,0,509, +231,178,601,0,0,0,0,0,0,0,0,43,1591,0,0,0,0,0,1683,0,0,0,0,45,0,0,0,0,0,0,0,0,0, +0,1120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,556,494,0,398,0,0,0,1030,0,0,0,0,0,0, +168,0,0,0,0,0,0,0,0,0,0,973,0,642,0,0,0,0,0,0,0,0,0,1615,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,378,594,0,1093,0,679,112,0,0,0,0,1492,540,1374,714, +1486,0,0,0,0,825,1511,0,0,0,0,0,0,0,0,0,0,0,0,0,952,0,0,736,143,0,700,0,1540,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1557,0,0,0,860,990,0,0,0,807,0,0,0,0,0,131, +515,0,646,0,0,0,0,117,728,508,121,0,0,0,0,0,0,357,0,0,0,0,0,0,237,0,0,0,0,0,0,0, +0,0,1784,0,0,0,0,0,0,0,0,0,0,0,713,348,1536,0,738,0,0,0,0,0,0,0,434,0,0,0,0,0,0, +366,1877,39,0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,873,0,0,0,0,171,0,625, +550,107,343,943,0,0,0,0,0,0,0,768,0,0,0,0,0,0,0,799,0,0,0,894,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1673,0,0,0,0,0,0,0,0,0,0,0,1052,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +272,0,441,0,0,3,9,0,0,0,1182,0,1346,0,0,0,0,0,0,0,0,682,0,0,1004,24,0,0,968,0,0, +0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,0,0,0,578, +474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,530,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,556,0,0,0,0,0,0,16,1317,0,0,97,0,0,0,703,0,0,0,0,0,0,0,0,892,0,0,0,1571,0,0, +426,186,0,1101,0,0,0,0,0,0,0,0,937,585,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,644,291, +0,0,0,0,749,0,162,0,0,381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,762,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,628,21,0,0,0,0,0,0,0,0,919,0,0,0,0,0,0,0,0,0, +633,0,0,0,0,332,0,0,0,0,0,0,0,0,0,1489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,832,398,0,645,0,0,0,13,0,0,0,0,0,0,0,0,0,0,20,0,800,0,0,0,0,0,0,0,0,0, +0,0,0,0,1993,0,0,0,0,769,0,0,0,665,0,0,0,0,0,0,0,0,0,0,1426,0,0,0,0,60,0,0,0, +641,1874,0,644,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1757,0,0,0,0,0,937,0,1652,0,654,0, +0,0,0,0,0,0,527,0,0,0,0,0,0,0,0,0,0,0,0,0,226,0,0,0,0,0,1486,0,0,0,0,0,0,0,0,0, +0,0,325,0,0,0,0,0,0,0,1345,0,0,91,0,404,0,0,0,0,0,0,0,0,0,0,0,0,973,0,0,0,0,0,0, +0,1176,0,549,0,0,0,0,0,0,0,0,0,0,976,0,0,0,0,0,21,0,0,0,0,0,51,0,0,0,0,314,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,198,6,0,1093,0,0,0,0,0,0,0,0,0, +0,0,0,0,1776,0,0,0,0,0,1528,0,419,0,0,0,0,0,0,0,0,76,138,0,0,0,0,638,29,0,0,0,0, +0,0,0,1418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1710,0,0,0,0,0, +0,0,0,0,0,0,0,532,23,0,0,0,0,0,0,0,862,0,0,946,592,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,70,0,0,0,0,0,0,0,0,0,812,0,0,0,76,0,0,988,0,442,0,0,0,896,0,0,0,0,0,0, +483,0,0,0,0,1709,0,0,0,0,0,0,119,0,0,0,117,0,309,0,0,0,0,0,596,976,0,0,0,0,0,0, +0,0,0,0,0,768,0,0,0,0,0,0,0,0,0,518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,863,0,0,0,24, +145,1020,0,0,1984,0,0,0,0,0,0,0,658,0,0,0,0,0,0,0,0,0,0,106,1827,0,1010,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,582,87,0,0,0,0,0,0,0,267,0,0,0,703,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,496,0,0,0,0,1121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,561,0,0,0,0,0, +0,0,760,0,0,154,0,0,0,255,0,419,323,0,0,0,0,0,368,0,0,0,0,0,0,0,0,0,0,522,0,0,0, +0,0,0,0,551,562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,92,0,0,0,0, +0,0,0,284,525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,958,0,0,594,0,0,0,0,0,0,6,479,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,820,1641,0,1556,0,0,0,0,0,0,0,302,0,0, +0,0,0,148,0,0,676,0,0,0,0,0,0,1674,0,0,0,0,0,0,178,0,0,0,0,0,0,0,94,389,0,0,0,0, +91,8,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,0,0,0,747,0,0,0,0,0,0,0,1746,0,0,0,0, +0,24,0,1352,158,1530,0,0,718,130,280,1401,0,0,0,0,0,1946,8,0,0,0,0,1607,0,0,0,0, +0,0,882,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,417,0,0,0,1597,633,433,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,234,0,0,0,0,0,0,0,0,680,1950,0,0,0,0,249,5,0,0,0, +0,0,0,0,0,0,1216,0,1773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,509,180,0,0,0,0,0,0,0,1002, +0,0,0,0,0,0,0,0,0,0,0,0,0,931,0,0,0,0,0,0,0,0,747,943,0,1837,0,0,0,0,0,0,0,641, +0,0,0,0,280,0,0,0,5,0,0,0,0,0,72,545,0,0,0,0,0,0,0,0,0,742,0,0,254,151,872,0,0, +0,0,0,0,0,0,0,0,0,0,921,0,0,517,833,0,1680,0,0,436,251,584,0,0,0,0,0,0,0,0,0,0, +0,24,500,0,0,0,0,0,0,0,0,195,1775,514,389,0,0,0,0,0,0,0,743,0,0,0,0,0,0,292,0,0, +0,227,1283,774,1805,0,0,0,0,0,0,0,0,0,0,119,81,0,0,0,0,0,0,0,0,0,0,0,0,0,0,913, +1910,0,0,0,1826,490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1162,700,30, +0,0,0,721,839,0,0,0,617,0,0,0,0,0,0,0,0,0,169,428,0,0,0,0,0,1648,637,1205,0,0,0, +1596,0,0,4,266,0,0,0,0,0,0,0,0,0,0,0,862,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0, +0,279,157,391,604,0,0,713,945,877,973,0,0,0,0,0,0,0,0,0,0,0,0,0,0,859,567,628, +1846,0,0,0,0,0,0,0,0,0,762,0,0,191,0,0,0,0,298,0,0,767,909,0,0,0,0,0,0,0,795,0, +0,301,0,0,1970,0,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,644,369,15,0,160,71,0,0,0,0,0, +1447,0,0,0,0,0,0,0,0,735,1255,76,0,0,0,0,0,0,0,0,0,0,474,0,0,0,0,0,0,0,0,0,0, +841,0,0,0,0,0,0,0,0,0,0,836,0,0,0,0,0,1622,0,0,735,0,0,0,0,1601,804,1390,394,0, +0,0,0,0,0,96,0,289,0,0,35,688,0,0,0,667,0,513,0,0,0,0,0,0,0,2034,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,704,0,1524,0,1078,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,306, +0,0,0,0,0,0,0,431,0,1196,0,0,54,0,15,1448,0,1418,0,0,0,0,0,0,0,0,0,907,0,0,0,0, +0,0,194,1767,0,0,0,0,0,840,0,900,0,0,0,0,0,0,0,0,0,0,0,1436,0,0,0,0,642,1560,0, +0,0,0,0,0,94,386,0,0,0,0,0,0,0,0,0,0,830,416,0,0,20,731,0,0,0,0,0,0,0,0,697,0,0, +662,0,0,0,0,0,0,0,0,0,861,0,0,0,0,0,0,0,871,671,864,0,928,7,0,332,0,0,0,0,1055, +0,0,0,0,0,0,986,0,0,0,0,0,44,76,0,0,0,0,0,0,0,0,0,0,300,0,0,0,0,0,0,0,175,518, +831,1108,0,0,0,836,0,1852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,843,1804,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,246,0,0,0,610,202,0,0,36,0,0,0,240,654,13,0,0,0,0,0,0,0, +0,391,0,403,0,0,0,0,0,0,0,0,0,0,75,0,366,815,0,0,631,0,0,0,0,0,0,0,0,345,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,952,0,0,0,0,0,0,0,0,0,0,0,673,35,662,0,287,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,34,0,0,0,0,0,0,0,0,151,0,427,0,0,382,0,0,0,329,0,0,279,0,0,0, +0,0,0,0,0,0,0,906,0,0,366,843,0,1443,0,1372,992,0,36,123,0,649,0,0,0,0,0,767,0, +1018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,995,0,0,0,0,0,0,0,72,368,0,0,1345,0,0,0, +589,0,0,0,0,0,0,0,0,0,1988,0,0,220,541,0,0,0,686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,32,196,0,0,0,0,0,0,0,0,0,0,0,0,0,381,0,0,0,0,0,0,0,0,0,1452,0, +0,0,616,0,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,667,120,0,0,0,0,0,0,0,1146,0, +0,0,0,0,0,0,0,0,0,0,352,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,935,0,1050,0, +147,88,0,0,923,0,0,0,0,0,934,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,341,222,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0, +637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1159,0,0,0,847,0,0,0,0,0,0,683,0,867,944,0,0, +0,0,0,1809,0,0,0,0,0,0,0,0,0,0,395,170,0,0,0,0,0,0,0,0,0,0,618,535,0,1625,0,0,0, +0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,778,0,0,0,0,0,46,0,2032,0,0,37, +1458,0,938,363,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,314,0,0,0,0,0,0,889,0,0,0,0,0,0,0, +0,0,0,0,462,0,0,0,0,525,0,0,23,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,0,0,0,0,0, +0,498,725,0,0,0,0,7,0,0,0,0,773,0,0,0,164,0,0,0,0,0,0,0,0,936,583,659,1462,0, +220,0,0,0,0,803,0,0,544,119,0,0,0,0,0,0,0,0,0,0,0,181,176,0,1192,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,1878,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0,0,0,0, +944,0,0,0,0,0,0,0,273,0,0,0,0,0,855,0,0,0,0,5,127,0,0,0,0,0,0,0,0,752,230,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,162,0,654,48,156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197, +0,0,0,0,0,0,0,963,0,0,0,0,0,0,0,0,0,0,858,0,0,0,0,0,0,0,0,0,0,676,1978,0,0,102, +972,0,0,0,0,0,0,0,361,0,461,0,0,0,472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,747,905,0,0,0, +155,0,0,0,0,0,0,0,0,0,0,319,163,0,0,0,0,0,0,0,0,0,848,0,0,36,631,0,0,0,0,0,1769, +0,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,555,247,0,0, +996,0,0,189,0,0,0,0,0,0,0,0,0,0,280,0,0,0,0,0,0,0,0,0,0,0,526,746,0,0,345,0,0,0, +1017,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,651,428,0,0,0,1162,230,327,546,792,0,0,0, +1203,0,0,0,0,0,0,0,0,0,672,189,0,0,0,0,0,0,99,0,0,0,298,0,0,0,0,0,0,555,397,0,0, +0,0,0,1157,0,0,0,0,0,0,0,0,0,0,398,1523,0,366,0,0,787,0,0,0,282,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,157,0,941,0,0,0,0,0,1336,0,0,116,0,0,0,0,0,0,787,0,0,0,0,0,0,0,0,0, +0,170,160,0,1815,0,0,0,0,0,866,0,0,0,0,0,0,0,0,0,689,0,0,0,0,820,0,498,108,0,0, +0,1119,0,0,0,244,609,1005,0,581,0,0,0,0,0,895,0,0,0,1898,0,0,0,0,0,926,0,0,0,0, +0,0,0,0,0,0,0,0,0,538,496,294,301,0,0,0,18,0,0,757,0,0,0,0,0,1263,0,820,0,722,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2028,0,0,0,0,124,1875,0,0,0,881,0,0,0,1348, +0,0,0,0,0,0,0,911,0,954,0,0,0,0,414,0,0,0,0,517,0,0,0,0,0,816,0,0,0,0,0,0,0,0, +713,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,593,150,0,0,0,0, +0,553,0,0,0,0,0,0,0,0,0,0,108,0,0,0,0,420,0,0,0,0,0,0,0,0,0,0,0,1777,0,0,55,493, +0,0,81,0,321,980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,362,112,0,74,0,0,0,0,0,0,0,625,0,0, +0,0,0,0,377,16,0,0,61,281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,1031,0,0,0,0,0,0,51,0, +0,0,0,0,0,0,211,309,15,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,789,173,0,439,9,648, +0,0,294,0,0,0,0,0,0,0,374,8,0,1099,0,0,0,0,0,0,0,575,0,0,0,518,0,0,0,702,0,0,0, +0,0,0,87,0,0,0,438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,464,122,0,0,0,1802,0,0,0,0, +0,0,499,0,0,0,87,476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,840,283,0,0,0,0,1620,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,609,1160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600, +323,372,0,0,0,0,471,722,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0, +477,1304,0,1774,0,0,88,0,438,12,0,0,0,0,0,0,0,0,671,997,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,639,22,0,0,782,681,0,0,0,0,0,0,0,0,0,0,1013,664,0,942,0,1349,0,0,0,0,0,0,0, +0,0,0,0,0,356,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,289,0,1975, +109,450,0,0,0,0,0,0,0,0,0,0,705,0,0,664,0,0,0,0,0,0,0,1238,0,0,318,0,0,0,0,0,0, +0,0,0,0,0,0,0,960,1872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0,0,0,0,0,0,0,0,239, +777,0,26,0,0,0,0,0,0,0,0,0,0,0,0,375,414,0,17,0,0,0,1350,0,955,0,0,0,0,0,0,0,0, +887,960,0,0,0,0,0,0,0,0,0,0,708,710,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,919,0,0,0, +0,502,280,7,45,0,0,0,0,777,0,0,0,0,410,0,1110,0,0,0,0,0,0,414,341,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,787,0,0,0,436,0,0,0,0,0,0,0,1707,613,377,96,0,0,0,0,451, +0,0,0,0,0,0,0,0,0,0,0,0,0,680,0,483,916,0,0,0,0,0,0,937,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,739,0,0,0,0,0,0,0,0,82,0,0,663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,128,0,0,0,0,0,0,0,0,1087,0,0,0,0,0,0,0,503,0,0,0,0,0,0,9,113,104,324,0,460,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,935,702,434,485,1014,949,423,0,900, +0,0,0,0,0,0,0,2018,574,0,0,0,0,0,0,0,0,0,0,0,0,1206,0,0,0,0,0,0,0,0,38,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1022,0,0,0,0,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,2029,0,0,0,0,0,0,0,0,0,0,0,0,523,0,0,0,0,0,0,625,0,0,425,37,0,0,0,1943,0,0,0, +0,0,765,0,0,0,0,0,0,0,0,0,0,551,0,0,0,0,0,0,0,0,0,0,0,0,168,0,0,1010,0,0,1994,0, +0,0,91,0,0,0,0,532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1884,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,240,15,0,0,0,1227,0,1534,0,0,0,0,0,0,0,0,0,0,0,0,0,0,392,0, +0,0,0,0,0,0,0,0,0,0,0,655,562,395,0,0,0,501,1019,0,0,0,0,509,267,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,0,0,0,0,0,0,948,0,0,0,0,0,0,0, +462,114,0,0,258,404,0,1717,0,0,0,0,82,1061,0,724,0,0,0,0,0,1133,0,0,0,0,0,0, +1021,841,0,1021,0,0,0,0,0,0,0,0,0,0,488,373,37,0,0,0,0,564,0,0,0,0,0,513,0,0,0, +825,0,0,899,0,0,778,0,0,12,1417,0,1116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,545,0,5, +0,0,0,0,0,0,0,192,0,0,763,0,0,0,0,0,0,0,755,759,0,0,0,0,0,0,0,0,0,370,0,1237,0, +0,0,0,0,0,298,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0, +0,0,0,0,814,991,0,757,57,0,0,0,0,0,0,0,0,0,540,0,0,0,0,608,0,0,0,0,0,0,0,0,1014, +0,0,0,902,0,0,0,0,553,1668,0,0,0,0,0,0,0,0,0,559,60,0,0,0,0,0,511,0,0,675,0,0, +156,0,0,0,0,0,0,709,0,698,0,0,0,1745,0,0,0,0,0,0,0,0,0,714,0,0,0,0,0,0,0,0,206, +8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,776,0,0,0,0,0,0,0,0,0,1272,0,0, +0,0,0,1059,0,0,0,0,0,0,406,0,0,0,0,0,0,0,0,0,0,947,0,0,0,0,0,0,168,0,0,0,0,0,0, +870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,554,0,0,0,0,784,908,0,0,0,0,0,0, +0,396,358,0,0,0,0,0,0,0,0,2,228,0,0,0,0,0,0,0,0,0,0,0,845,14,0,716,1820,594,0, +81,1428,0,161,0,782,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,998,0, +0,0,0,0,0,0,0,0,0,0,0,1043,0,1496,0,0,0,0,0,0,0,0,781,0,0,0,0,0,0,0,817,1114,0, +1814,958,0,0,0,0,812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,236,643,0,0,0,0,0,0,0,0,0,1172,0,0,0,0,0,0,0,0,0,1338,0,0,0, +0,0,0,0,0,0,0,0,54,0,0,0,256,0,0,351,0,955,1885,0,469,0,0,0,1270,0,744,0,313,0, +0,0,0,0,0,0,0,402,969,0,0,0,0,0,0,50,0,0,0,0,572,0,0,0,0,847,0,0,0,0,0,0,0,248, +43,0,369,0,0,0,0,0,0,0,0,0,0,0,0,0,766,0,363,0,0,0,0,0,0,0,0,0,0,0,678,0,0,409, +258,82,249,0,0,0,0,0,0,0,0,0,0,0,0,32,393,0,788,0,0,0,1281,509,1968,0,0,0,0,39, +291,0,0,0,589,0,0,54,1059,0,0,0,0,0,0,824,0,0,0,0,0,0,0,0,0,0,1005,0,1598,0,0,0, +0,0,919,0,0,0,0,0,0,0,0,52,132,0,0,0,0,0,328,0,0,0,0,173,0,0,0,0,0,65,1411,0,0, +0,0,0,0,0,0,0,0,442,0,842,0,0,0,0,0,0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0,0,0,845, +210,0,0,0,0,0,0,0,0,892,0,0,223,0,0,0,0,529,0,0,0,807,0,137,218,0,1444,0,0,0,0, +0,332,661,0,0,0,0,0,0,0,76,1517,0,0,0,0,0,0,0,0,0,0,0,418,0,0,0,0,0,0,0,0,481, +379,0,0,0,0,0,149,18,0,0,0,0,0,0,0,0,742,304,142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,799,925,195,51,0,0,0,0,688,0,0,0,0,697,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1169,751,0,0,0,452,929,0,221,0,1437,0,0,0,0,955,1251,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,132,0,0,0,0,0,865,0,0,0,0,0,0,0,767, +672,42,0,0,0,1050,0,0,0,0,0,0,0,0,368,44,0,0,0,0,0,0,0,570,29,0,0,0,0,0,0,227,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,522,0,0,0,0,0,0,0,1529,0,0,0,0,0,0,739,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1667,0,0,0,0,0,0,132,511,0,138,208,1020,0,0,23,565,0,344,0,0,0, +0,0,922,0,0,0,0,0,0,0,240,0,0,415,171,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,402,0,0,754,31,716,0,982,731,0,0,0,0,0,0,0,888,0,0,0,803,847,0,0,823, +0,0,0,0,0,0,785,0,0,2,0,0,0,0,0,0,0,532,0,0,681,0,0,314,0,384,684,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,649,447,0,1818,1007,0,321,0,66,360,0,0,0,385,0,0,0,0,0,0, +0,900,73,254,0,0,0,0,683,1959,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,86,0,0,725,0,0,0,0,0,196,0,0,0,0,0,831,0,0,0,0,723,0,0,0,0,0,994,627,0,0, +0,0,0,0,0,0,0,0,764,66,0,0,0,0,205,36,0,0,0,0,0,0,0,950,0,0,0,887,111,0,0,831, +388,165,0,0,0,0,0,155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,780,755,0,0,0,0,898,146,0,0,0, +0,0,0,0,45,7,0,0,0,0,0,0,0,0,607,0,0,0,0,0,0,65,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0, +621,600,0,367,0,0,0,0,0,0,0,561,0,559,0,585,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,672,157,0,0,0,0,714,0,0,0, +0,0,456,0,925,0,0,0,0,0,0,0,0,19,0,0,0,0,1473,0,0,0,0,0,0,0,0,0,0,113,0,0,0,0,0, +0,0,0,0,0,0,0,0,69,463,0,0,82,193,2,471,0,0,0,0,633,0,0,0,0,0,0,1148,129,1392, +542,803,0,0,0,0,0,0,0,0,0,0,0,0,438,0,0,0,0,0,0,875,0,0,0,0,0,237,0,0,0,0,0,0,0, +65,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,563,0,0,0,9,444,0,0,43,1260,0,0,0,0,0,0, +971,0,0,699,0,0,0,0,0,1116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,829,242,0, +0,593,0,0,0,0,0,0,0,0,201,36,224,0,0,0,0,0,0,1430,0,1806,0,523,0,0,212,1889,0,0, +0,827,0,0,0,0,0,2043,136,242,0,0,0,0,0,0,284,148,10,0,0,0,0,0,0,1249,0,0,0,807, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,494,0,0,0,0,0,0,0,0,1510,0,0,0,0,0, +0,0,0,0,0,505,1306,0,0,764,268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1703,0,0,0,0,159,964,583,0,0,0, +0,0,0,515,0,0,854,0,0,0,0,0,0,0,0,0,0,0,0,1123,0,0,0,0,0,0,0,136,0,0,0,0,0,1782, +0,0,44,1287,0,0,0,0,0,732,0,0,0,0,313,679,0,0,316,0,0,0,0,595,0,0,0,0,0,0,753, +147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0,0,0,414,0,1762,0,0,0,0,0,0,0,0, +0,0,0,599,0,0,0,0,0,0,0,0,0,1749,0,0,0,1627,0,488,0,0,0,0,0,83,0,0,0,0,676,0,0, +1639,0,0,0,0,0,0,0,0,0,278,0,0,0,0,0,0,97,0,14,1085,0,0,0,0,0,0,781,388,0,849, +59,229,0,0,0,0,0,1115,0,0,0,0,108,0,0,0,0,700,0,0,0,0,0,0,0,0,0,1414,0,0,0,0,0, +0,0,0,0,0,0,0,0,660,737,1035,0,0,0,0,0,0,521,690,0,0,0,0,0,0,0,0,0,0,0,0,272,0, +0,0,0,0,0,0,0,0,0,1744,0,0,0,0,0,0,128,733,0,0,277,0,0,0,0,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,0,0,0,0,0,936,1981,40,0,0,0,0,0,0,0,0,775,0,0,0,0,0,0,0,0,0,306,0,0,0,0, +0,0,0,979,0,0,0,0,0,611,0,0,0,0,0,178,0,0,0,1969,0,0,0,0,0,0,0,664,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,390,0,0,0,1510,0,0,0,0,0,0,0,0,0,0,0,493,0,0,37,0,0,0,0,724,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,1537,0,0,168,473,0,0,0,105,0,0,0,0, +627,438,0,0,0,0,0,0,0,0,0,0,11,1256,0,0,0,1626,0,779,0,0,0,0,25,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,308,0,0,0,0,0,741,0,671,0,0,0,0,649,150,0,0,99,521,0,0,3,339,0,0,0, +543,0,0,0,0,0,0,0,0,0,1358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,234,155, +0,0,0,0,0,0,0,1628,0,766,0,0,0,0,0,0,0,0,0,0,0,0,0,829,0,0,0,1445,0,0,0,486,0,0, +0,0,2,1635,0,0,0,0,558,0,0,0,0,0,0,0,0,0,0,1461,0,0,0,0,0,599,0,0,0,0,0,0,0,0,0, +1376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,447,0,0,66,1432,0,0,0,0, +0,0,307,0,413,609,0,0,0,930,0,0,0,0,21,939,0,0,0,0,0,962,4,651,0,0,0,0,15,579,0, +0,0,0,0,597,0,0,0,0,0,981,0,0,0,545,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,800,17,0,0,17,0,907,0,0,0,110,0,0,0,53,458,0,1983,0,0,0,0,0,0,0,0,0,0,443,0, +0,0,0,0,0,0,0,0,0,0,924,1844,0,1232,0,0,0,0,70,519,0,993,0,0,0,0,0,0,14,530,0, +907,0,0,0,0,0,733,0,0,0,0,0,0,0,0,55,0,188,531,56,0,0,1693,0,0,0,0,0,0,0,0,441, +0,192,928,0,0,0,0,0,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1525,0,259,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,512,185,0,464,1603,0,0,0,0,0,0,0,0,0,0,0,1113, +284,720,0,0,722,0,0,0,0,0,13,0,0,0,0,0,0,0,4,289,43,0,0,0,0,0,0,1694,0,0,0,0, +193,0,0,0,0,409,0,0,0,0,0,0,0,0,0,0,0,0,308,0,0,1863,0,0,0,0,0,0,0,0,0,790,0,0, +745,1002,0,0,0,0,0,0,0,0,0,289,68,477,13,0,0,0,0,0,0,0,0,0,0,609,0,0,0,0,0,0,0, +0,0,0,0,367,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,528,0,0,0,0,0,0,0,0,0,694,58, +548,0,0,0,0,0,0,687,0,0,0,0,1749,0,0,0,0,0,0,0,0,1004,661,0,0,0,0,0,0,445,0,0,0, +74,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0,0,0,834,0,0,189,1672,0,0,0,0,0,0,0,1548, +192,0,0,0,0,0,0,0,0,0,0,0,0,0,32,751,0,78,0,0,0,0,0,0,544,1602,105,473,0,0,0,0, +0,0,156,1949,0,1779,0,0,0,0,0,0,0,0,0,0,0,763,0,0,0,0,0,0,0,0,29,0,0,0,0,0,0,0, +0,0,0,883,0,0,0,0,0,0,0,488,0,617,0,0,50,0,694,1518,785,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,546,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,1016,0,0,0,577,0,0,0,0,0,0, +184,935,114,720,0,0,100,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,95,14,0,969,0,0,0,0,0,0,0, +727,0,1021,0,0,0,0,0,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,153,0,0,0,0,0,0,0,0,0,798,0, +587,0,0,695,42,0,1929,141,957,0,465,7,908,0,0,450,148,0,0,0,1166,0,0,0,0,0,0,0, +0,0,0,0,0,253,0,1003,0,0,0,0,0,0,0,0,0,0,0,46,0,0,879,0,806,0,1868,0,0,0,0,0, +1846,0,0,0,730,0,0,0,0,0,0,0,965,0,0,0,0,506,0,0,0,10,0,0,0,22,0,0,0,0,0,0,0,0, +0,0,0,0,0,960,296,0,0,0,0,0,0,0,0,0,0,0,587,0,0,0,0,20,0,0,0,32,982,0,0,0,0,0,0, +0,0,0,0,941,0,0,0,0,435,0,0,0,0,0,0,71,419,0,0,0,0,0,0,688,740,94,345,0,0,679, +582,0,0,0,0,0,0,0,945,0,0,0,0,0,0,0,0,0,0,0,0,539,0,684,1993,0,0,0,659,0,583,0, +803,0,704,0,0,0,0,0,198,181,347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,481,405,203,0,0,99,826,0,0,0,0,0,0,0,492,0,408,0,0,0,0,0,0,0,0,0,0,4,0,0, +0,0,665,349,137,0,0,0,0,612,1270,0,0,0,0,0,371,0,0,0,826,0,0,0,0,21,1535,858, +374,0,0,0,0,0,0,311,0,0,0,991,1968,0,0,0,0,494,1647,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,769,0,0,0,0,0,642,0,0,157,123,0,0,0,1435,0,0,0,0,0,0,0,0,0,0,79,0,0,0, +0,0,0,1425,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,106,393,486,1690,0,0,0,0, +0,0,0,0,0,0,0,0,756,184,0,0,0,1382,0,0,0,175,0,1493,0,1007,0,0,0,0,0,0,0,0,0,0, +0,219,0,0,0,0,515,99,0,851,0,0,0,0,0,1278,0,0,0,0,0,0,0,1000,982,0,762,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,910,1819,0,0,0,0,0,0,906,0,0,0,0,0,0,0,0,0,0,1730,0,0, +0,0,0,0,0,0,0,0,0,1185,0,0,0,0,0,0,0,0,40,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0, +650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,30,0,553,0,0,20,597,0,1614,0,0,0,0,0,327, +49,0,0,0,0,0,0,0,78,0,0,786,134,0,0,0,12,496,0,0,0,0,0,0,0,0,0,0,42,204,0,614,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,147,247,0,0,0,0,942,0,0,2023,0,0,0,0, +0,0,67,285,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1309,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41,532,0,0,0,0,0,0,0, +1692,0,0,0,0,55,1704,0,0,0,0,988,0,0,0,223,0,0,0,0,0,0,0,57,1123,0,0,0,0,0,1764, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2015,0,0,0,1599,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,0,0,534,0,0,0,0,0,0,0,0,0,0,0, +0,0,504,621,1248,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1397,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,441,75,0,0,0,0,0,0,0,0,0,0,841,0,0,0,0,0,693,0,650,314,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,880,0,475,0, +0,1016,179,602,111,329,0,0,0,1864,0,0,0,0,846,1888,0,0,780,0,0,0,82,0,0,0,0,821, +0,0,0,0,0,0,0,0,0,0,0,956,112,0,0,0,261,455,0,0,0,0,0,0,337,385,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,184,1865,0,0,721,16,0,486,0,0,0,265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,621,0,0,0,0,0,0,0,0,234,0,0,815,0,0,743, +1987,205,197,0,0,0,0,0,0,0,0,0,314,0,0,0,0,0,0,0,0,0,0,0,0,0,0,219,452,589,0, +176,333,0,0,0,0,0,0,0,1110,47,0,0,0,0,0,0,0,0,0,0,0,864,0,0,300,0,1237,0,0,0,0, +0,0,0,0,0,0,0,1685,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,135,395,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,631,0,0,0,0,0,0,835,0,0,0,606,459,0,979,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,612,0,0,0,0,0,0,0,0,158,372,0,854,0,0,0,0,0, +0,0,1492,0,0,0,833,0,0,0,0,0,0,0,1739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +195,0,0,0,0,0,0,0,0,730,1997,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,266,751,0,0,0,0,0, +0,0,821,0,0,0,715,0,0,0,868,0,959,0,0,0,0,0,0,0,0,0,0,0,1053,0,0,0,950,0,1081,0, +1595,0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,47,684,0,0,0,0,0,0,1606,0,777,0,1020,0,0,0, +1094,0,0,0,0,0,0,0,350,0,0,0,0,0,0,242,1812,0,0,0,967,0,0,0,473,286,0,0,0,0,0,0, +798,629,222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,513,337,306,0,0,0,0,0,0,0,0,0, +146,0,0,1646,0,0,0,0,0,465,0,0,0,525,0,0,0,0,0,0,299,165,0,0,0,0,0,0,0,1064,0,0, +0,0,0,596,0,0,0,0,0,0,0,0,0,0,0,0,0,0,238,1741,0,1233,451,1824,0,0,0,0,733,495, +0,0,0,0,0,1204,0,0,0,559,341,0,224,21,0,0,0,0,0,0,0,0,97,1446,0,0,0,0,0,0,0,729, +0,0,565,727,0,1948,0,0,0,519,0,0,0,0,0,0,0,0,0,1193,0,0,0,0,0,0,790,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,323,2,201,0,0,59,0,0,34,0,896,961,0,1285,0,0,46,0,479,0,0, +0,0,549,0,663,0,0,0,0,0,783,65,682,0,0,0,0,0,11,0,0,0,0,0,522,0,0,0,52,0,0,0,0, +0,383,0,0,0,0,0,0,0,0,127,0,0,0,0,0,397,194,0,0,635,0,0,0,0,0,0,0,0,0,0,975,0,0, +0,0,0,0,0,0,0,0,116,0,51,0,0,858,0,1075,535,448,0,0,0,0,0,610,0,0,0,0,0,0,0,0,0, +0,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,267,673,319,94,92,0,551,0,0,218, +1406,69,256,0,0,952,1980,0,833,0,0,0,0,0,0,0,0,0,0,0,0,39,0,0,0,0,0,0,0,81,0,0, +0,352,634,0,0,0,0,0,618,0,0,0,0,0,0,73,339,0,0,0,0,0,0,0,0,0,0,0,0,0,0,169,759, +0,0,0,0,0,0,0,0,0,0,0,0,0,1075,0,0,0,0,0,0,482,649,0,0,0,0,0,0,0,0,386,336,0,0, +0,1035,0,0,0,0,0,0,0,0,0,0,0,924,0,73,0,0,0,0,0,1971,0,0,0,0,0,0,0,0,0,1344,0, +501,0,0,0,0,0,0,0,0,46,799,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,770,0,0,0,0,0,0,0,0, +0,0,0,0,0,158,0,0,0,0,0,1432,0,0,0,0,0,0,0,0,0,0,25,0,0,2001,0,0,0,0,0,0,0,0,0, +0,0,0,0,478,0,0,0,0,0,0,91,1461,211,602,0,0,0,0,0,0,0,0,0,1068,0,0,124,567,0,0, +0,1006,0,0,0,0,0,0,0,0,0,735,812,0,0,323,0,0,0,304,0,0,0,0,0,0,0,0,0,148,0,0,0, +0,0,0,0,0,0,523,0,0,144,730,0,0,981,0,0,111,0,0,132,0,0,0,0,0,0,890,0,0,0,0,0, +444,0,1787,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,2041,932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,937,0,995,0,0,255,0,0,138,863,965,0,0,631,0,0,0,0,1394,16,652,0,0,0,0,0,0, +0,0,0,0,0,0,0,897,0,321,0,0,0,0,0,922,0,619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,844,0,0,0,0,0,0,1659,0,1100,0,0,0,1173,0,1930,268,251,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,390,711,0,0,0,0,0,0,0,0,0,0,0,0,0,744,0,0,0,0,0,0,0,0,0,624,0,0,0, +1998,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1125,0,0,0,594,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,268,0,0,0,0,0,0,0,563,0,0,0,0,0,0,0,0,2,39,0,0,0,1332,0,0,0,0,0, +0,0,508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,796,0,0,0,0,527,0,0,0,0,98,0,0,576,0, +0,0,0,0,122,0,276,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,645,0,0,0,0, +0,0,0,0,0,0,0,290,0,0,762,1292,0,0,0,1315,0,1955,0,0,0,0,0,0,0,0,0,0,210,131,0, +0,0,0,797,0,38,0,11,488,0,936,0,441,0,0,0,0,0,595,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +991,0,0,0,0,0,0,0,0,0,0,0,653,0,523,0,0,0,903,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0, +0,0,0,0,0,0,432,0,0,314,0,0,0,0,232,1368,534,0,0,0,0,0,27,0,0,0,12,0,0,0,0,0,0, +0,0,0,264,736,0,1657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1117,0,127,0,0,0,1208,0,1294, +0,0,0,0,364,0,0,0,0,0,125,1334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,792,0,0,0,0,0,0,0, +849,699,0,0,0,0,0,968,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1446, +124,397,0,0,0,0,0,0,0,0,0,0,0,641,0,0,0,0,0,0,0,0,0,0,0,0,127,346,0,0,517,75,0, +0,0,0,0,0,0,0,83,0,0,0,0,0,0,1031,0,0,0,0,0,0,0,1470,0,954,0,0,345,304,410,0,0, +0,0,734,0,0,0,0,0,1822,0,0,0,1798,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,161, +1865,69,0,0,0,0,0,0,922,0,0,0,0,0,0,0,0,0,0,0,541,0,627,0,0,0,0,0,0,0,0,0,166,0, +0,0,0,0,0,0,0,0,849,0,0,0,0,0,0,0,717,0,0,0,0,0,0,0,0,0,0,0,0,0,0,600,0,0,0,0,0, +0,654,0,0,188,273,0,0,0,543,0,410,87,0,0,941,0,0,186,250,0,1785,0,0,0,0,0,1339, +462,961,0,780,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,529,0,0,0,0,0,0,474,1276,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,24,948,0,0,0,0,657,753,0,0,0,0,941,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,706,985,837,0,1861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,933,0,0,0,0,0, +0,0,0,0,767,0,0,0,0,0,0,0,641,0,0,0,1233,114,0,883,0,274,2008,0,1794,285,0,0, +571,0,0,0,0,0,0,0,0,0,0,823,960,16,617,0,431,0,0,0,0,0,0,0,0,0,0,567,0,401,0,2, +781,424,33,0,2006,0,0,274,0,0,1882,0,794,0,0,0,1848,0,0,0,0,0,0,448,47,0,0,0, +1199,0,0,0,0,0,0,0,0,417,0,0,0,0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,1019,0,0,0,0,0,0, +0,0,0,0,0,0,0,620,0,0,0,0,464,0,0,0,0,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,442,0,930,0,0,0,0,0,516,68,0,0,0,0,0,1128,104,0,0,0,0,0,0,0,0,787,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0,0,0,0,0,711,0,0,9,0,101,441,0,0,0,0,0,0,0,0, +0,0,160,396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,679,326,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1128,0,0,0,0,0,737,0,1796,0,0,0,0,0,0,0,0,0,0,0,0,338,574,0,0, +0,0,0,1096,491,405,0,0,0,0,0,1081,0,0,0,0,0,0,0,0,0,0,0,0,0,1676,0,1207,0,0,0,0, +0,0,969,354,0,0,0,0,598,0,297,0,0,0,0,0,0,0,0,1772,751,0,37,0,0,1828,0,0,0,0,0, +0,0,0,0,257,191,582,0,0,0,0,0,0,790,0,0,0,0,0,47,0,0,0,0,0,0,0,449,306,1011,0,0, +0,0,0,299,0,0,0,0,0,0,837,0,0,0,0,0,0,10,329,0,0,0,0,0,1320,0,0,0,0,0,0,158,657, +0,1191,0,0,0,0,0,0,7,0,974,1939,0,1665,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,288, +66,0,0,0,0,494,175,0,1643,0,0,0,0,0,0,0,0,570,750,719,0,0,0,0,0,0,0,0,0,0,0,0,0, +13,0,0,1247,0,0,221,356,0,0,0,0,0,0,0,0,0,0,694,1809,0,0,0,0,0,0,0,411,0,44,31, +0,0,0,0,669,0,673,0,0,0,0,0,0,0,0,0,1303,704,299,0,0,0,275,0,0,216,1761,0,0,0,0, +0,0,0,0,0,0,0,1319,0,0,428,0,0,0,0,0,0,0,0,0,0,514,0,0,0,0,0,0,49,55,102,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,364,0,0,0,0,379,0,921,971,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1258,0,0,0,1058,0,0,0,0,0,656,0,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0, +0,1373,10,605,0,0,0,0,0,0,0,838,0,1012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,365,0,0, +0,0,0,0,0,0,0,340,0,0,0,0,0,810,0,0,0,0,0,0,495,0,0,0,0,0,0,0,0,0,261,0,535,248, +0,358,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,567,445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,697,0,0,0,1336,0,0,0,0,0,0,0,0,917,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,351,0,0,0,0,0,0,0,0,0,0, +0,0,0,286,0,0,56,438,0,0,0,0,0,1950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,738,0,0,0,0,0, +0,0,0,0,0,969,2047,0,0,0,0,0,0,0,818,0,0,0,0,0,0,0,866,0,0,0,0,0,0,0,1467,0,0,0, +0,0,0,0,0,0,0,0,0,0,972,0,355,0,0,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,267,189,104,0,0,0,0,1613,0,0,0,0,0,0,0,116,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,886,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,0,0,863,0,0,0,0,0, +0,0,1953,450,1773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,381,0,0,0,0,0,0,0, +0,0,0,0,0,1142,0,1189,0,0,0,663,0,0,0,0,0,0,0,846,0,0,528,0,393,378,0,0,0,0,0,0, +325,899,680,1880,0,1770,0,0,0,0,0,648,0,0,0,0,0,0,185,167,0,2046,0,0,0,0,0,0, +249,1645,0,152,0,0,0,1733,0,0,0,0,0,1006,0,0,0,0,0,420,0,0,0,832,0,0,0,0,0,351, +0,0,0,0,6,40,0,0,60,0,0,0,0,1354,745,724,0,0,0,0,0,0,0,0,772,1951,275,108,639,0, +0,0,0,0,0,0,0,0,500,1758,0,0,0,0,0,0,0,0,0,0,0,1886,711,205,0,0,965,865,0,0,0, +534,0,0,0,0,691,0,0,0,237,443,0,878,0,0,0,0,0,1410,0,0,0,0,0,0,0,0,0,0,0,0,0, +995,0,0,0,0,0,0,0,0,0,0,0,0,0,578,0,0,0,0,881,0,0,0,0,0,0,0,0,822,0,923,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,924,0,0,0,665,0,0,0,0,0,1901,0,0,0,0,0,950,498,93, +0,0,0,1451,0,0,0,0,0,747,828,788,400,184,0,198,0,0,0,0,0,0,0,0,0,0,0,994,0,0,0, +0,0,0,0,0,615,320,0,0,0,978,843,905,0,0,0,0,0,0,0,0,850,974,0,0,0,0,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,509,0,0,0,0,0,273,0,0,0,0,0,0,0,0,0,0,0,0,0, +201,0,0,0,1041,0,0,0,1040,0,0,0,0,0,0,0,0,0,693,234,774,0,336,0,1399,22,0,805, +802,777,167,789,0,0,1705,0,0,0,0,0,0,0,0,0,0,0,10,13,11,0,0,204,264,0,0,56,0,0, +1917,0,470,0,0,0,0,0,0,0,0,0,0,0,1198,0,0,0,0,0,0,0,0,0,0,1015,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,715,0,0,1002,0,0,0,298,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,867,0,0,724,0,0,0,0,0,0,0,0,0,0,0,0,768,0,0,0,0,0,1066,0,0,0,0,67,0,174,948, +0,0,0,0,0,0,0,0,0,0,0,0,0,764,0,0,0,0,75,137,0,756,0,0,0,0,0,0,1008,842,643,0,0, +0,67,0,0,0,0,0,0,0,0,0,0,0,135,821,0,0,0,0,0,0,0,0,736,0,389,355,0,0,786,0,0,0, +0,0,0,2044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1030,0,0,0,1083,0,0,0,0,0, +1226,0,0,0,0,356,319,8,389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,474,0,0,0,427, +0,413,0,730,0,0,0,0,0,373,0,0,0,0,0,0,0,0,0,799,0,0,0,1793,0,0,0,322,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,290,2,0,0,0,0,0,0,0,0,0,0,672, +699,1860,0,0,0,737,0,0,0,1612,0,0,0,0,0,0,0,0,0,0,0,145,124,884,0,0,0,0,0,387,0, +0,0,0,0,0,0,0,0,0,0,679,0,550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1305,0,0,0,0,0,0,0, +576,0,0,0,0,0,0,0,686,0,607,0,0,37,0,0,0,0,0,0,0,0,0,101,1726,0,0,0,0,0,958,0,0, +0,903,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,367,0,0,0,0,690,0,705,273,0,0,887,0,0,0, +0,0,0,0,0,0,0,0,90,0,0,0,0,0,0,0,908,0,0,0,0,0,0,0,1261,0,0,497,1235,0,429,0,0, +0,0,904,0,12,125,0,0,0,841,0,0,0,0,0,860,946,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,768,0,770,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,271,0,0,0,0,0,0,0,719,0,699,581,0,0,0,0,0,0,0,0,0,0,862,304,0,631,0,0,0,0,880, +1513,0,0,0,0,0,981,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,434,0,0,0,0,0,550,0,0,476,930, +824,553,0,0,452,0,151,0,0,0,0,0,0,772,0,292,135,0,0,0,0,0,0,0,504,0,0,1089,0,0, +0,0,0,0,0,0,0,0,0,783,0,0,0,0,0,0,206,393,0,0,0,0,0,0,0,0,232,912,0,0,0,0,0,977, +0,0,716,98,0,0,0,0,0,733,0,0,0,0,0,0,0,0,19,0,0,0,0,668,0,360,0,0,0,0,0,0,656,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,726,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,1269,0,0,463,0, +0,0,0,0,0,1454,0,1287,245,0,989,0,0,0,0,0,0,0,0,0,107,164,0,0,0,0,0,0,0,1061,0, +0,0,0,2,484,0,0,0,0,0,0,0,1127,0,0,0,0,0,0,0,460,0,0,0,0,0,932,0,0,0,0,0,0,0, +588,625,0,0,0,0,76,92,0,0,0,0,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +763,0,622,0,0,0,253,0,546,0,0,110,0,256,916,0,0,35,212,0,0,746,0,0,0,150,0,0, +1466,0,0,0,1299,0,0,0,0,0,0,0,0,0,1518,0,0,0,0,0,0,0,0,0,0,0,0,0,1229,0,0,0,816, +0,0,0,0,0,0,159,0,0,0,0,0,734,869,126,1716,0,0,0,0,0,0,202,232,0,0,0,0,212,0,0, +0,0,0,111,1003,0,0,0,0,0,0,0,0,0,0,0,1712,0,0,216,0,0,0,0,516,0,0,0,0,0,650,0,0, +0,0,57,99,0,0,0,0,300,574,0,0,0,0,1023,0,0,302,0,1871,0,728,252,0,0,461,0,0,0, +323,0,0,0,0,0,0,775,461,0,0,0,0,0,0,172,0,0,464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,73,727,0,1023,0,0,0,0,0,0,0,0,0,0,577,0,0,0,0,0,0,0,0,1037,0,0,0,0,0,0, +0,0,280,677,0,0,0,0,0,0,0,0,0,0,0,799,0,0,0,0,159,0,446,1730,0,0,0,0,0,0,0,0,0, +395,0,0,0,0,145,0,0,0,0,0,0,0,20,0,0,426,608,0,0,0,0,0,977,0,250,0,0,0,0,0,100, +0,0,0,0,1982,0,0,0,0,0,476,0,0,0,0,0,0,594,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,447,0,0,0,0,526,0,0,14,1124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,188,0,0,0,0,0,0,0,0,362,301,0,0,0,1743,0,178,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,872,0,831,0,0,208,202,0,0,0,0,0,0,0,1954,0, +0,0,0,516,872,0,0,313,224,0,0,24,0,11,546,0,0,0,1937,242,241,46,0,0,0,830,1273, +0,0,0,0,0,0,0,825,327,1006,0,0,0,0,0,1580,516,366,0,0,0,0,0,1736,0,0,0,0,0,0,0, +0,0,0,0,1935,0,826,0,0,0,0,139,331,0,0,0,0,0,0,0,0,0,0,0,288,0,916,0,0,0,0,0, +1888,0,0,0,0,0,0,0,1471,0,1570,0,394,0,0,0,0,0,0,0,1931,0,1719,0,658,228,0,0,0, +0,0,374,0,0,0,0,735,0,0,0,0,0,0,323,498,0,1063,0,0,0,0,155,0,0,0,0,0,0,0,0,906, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1139,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,616, +902,0,0,0,0,0,692,0,0,0,0,0,0,823,0,0,0,305,0,0,0,0,0,0,0,681,0,0,0,0,0,214, +1004,0,0,0,0,0,0,0,23,0,0,1703,0,0,0,0,0,0,0,0,0,1443,0,0,19,714,0,0,0,0,64,737, +0,0,345,1758,0,0,579,47,0,0,539,139,0,0,0,0,388,0,0,0,0,253,0,0,0,0,0,0,252,0, +745,0,0,0,0,0,0,0,0,0,0,0,504,107,0,871,0,0,0,229,0,0,0,0,0,903,0,0,71,0,0,549, +6,47,0,0,0,0,0,0,0,0,0,980,865,705,0,0,0,161,0,0,0,0,143,1331,0,0,0,1388,33,724, +0,0,0,19,0,0,0,395,0,0,0,0,0,846,210,0,0,0,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,695,937,497,0,0,0,0,0,718,0,0,0,0,0,0,0,1581,0, +0,0,0,0,0,161,49,0,0,0,0,0,0,0,0,0,597,0,0,0,1094,0,0,0,811,908,0,0,0,0,0,0,0,0, +0,0,1471,0,0,0,0,0,0,0,0,0,0,42,1935,0,0,0,2014,66,2007,0,0,586,0,0,0,0,0,0,0,0, +0,28,1077,0,0,0,1221,0,0,62,0,0,0,0,0,0,0,0,0,0,1766,0,0,0,0,0,0,0,0,0,0,0,0,25, +0,499,1388,0,0,97,10,0,0,0,0,0,481,0,0,0,0,0,0,0,0,0,0,37,134,155,486,0,1442,0, +0,0,0,0,591,0,0,0,0,0,0,310,1173,0,0,0,0,409,1156,0,0,0,482,0,0,263,926,0,0,0,0, +0,0,0,0,0,0,0,0,0,804,0,0,0,0,0,0,0,0,0,0,0,0,0,1265,0,415,0,348,0,0,0,1012,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,1803,0,0,0,0,0,0,0,408, +0,0,0,0,0,0,257,1321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1138,0,0,0,249,0, +0,0,576,0,0,0,0,231,0,0,0,288,0,0,0,0,0,0,0,0,0,433,1487,569,1678,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,0,0,0,0,0,779,538,0,0,0,413,0,0,0, +0,0,0,0,0,0,0,495,0,0,0,0,0,191,54,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,530,567, +0,0,0,0,0,1484,0,0,0,0,0,0,815,609,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,900,0,0,0, +0,1335,0,1724,0,0,0,0,0,0,0,0,0,0,0,640,0,0,0,0,0,0,0,0,0,0,0,1831,0,0,0,0,0,0, +0,0,0,0,0,0,0,474,0,0,0,0,0,0,0,0,0,1103,0,1504,655,1034,0,0,0,0,0,305,0,0,0,0, +0,0,0,0,0,1236,0,0,429,217,0,0,0,0,739,278,0,0,0,0,0,0,0,708,0,0,0,0,0,1840,233, +0,0,0,0,0,0,0,0,2017,0,0,0,0,0,1488,0,0,0,1590,0,0,0,0,0,1800,28,0,0,0,0,0,0,0, +0,0,45,0,36,0,22,1442,378,0,0,0,0,0,0,1507,0,0,0,0,0,0,0,0,0,0,39,0,0,1054,725, +1955,0,2036,0,0,0,0,0,0,0,0,0,0,896,1871,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,2046,0, +0,0,0,17,712,0,617,55,320,271,0,0,0,0,0,0,0,0,0,445,0,184,103,0,0,0,0,0,0,0,0, +659,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +337,0,0,0,506,0,0,0,0,0,843,77,0,458,0,0,0,0,0,1420,382,109,142,330,0,0,0,0,0,0, +0,0,0,0,0,0,87,0,0,0,492,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1239,0,0,0,0,0,0, +211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1049,0,321,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,1985,0,0,122,0,0,234,0,0,0,1098,0,0,0,0,0,0,549,253,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,522,131,0,0,149,0,0,0,0,0,0,0,0,0,0,0,0,0,0,507,0,0,0,0,811,630,0,0,0,343, +0,0,0,0,0,448,591,455,0,1381,0,0,0,0,0,0,0,575,0,0,0,0,0,1175,0,0,0,0,0,0,0,0,0, +653,0,0,0,1761,0,1198,0,0,0,0,297,1127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,678,0,0, +164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,45,0,0,0,0,0,121,0,0,0,0,0,0, +0,0,125,0,0,0,1622,0,0,0,0,0,721,145,0,0,0,970,792,0,0,0,715,0,0,0,0,0,1999,0,0, +74,531,0,0,65,0,0,0,105,220,0,0,0,0,0,0,0,960,0,0,0,0,0,0,428,19,0,0,401,96,0,0, +0,0,0,1595,116,0,1021,0,0,0,0,0,750,1961,0,0,148,0,0,0,0,0,0,0,0,0,0,0,0,0,75,0, +0,1383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,779,0,0,0,0,0,0,0,0,598,0,424,0,0,0,0,0,0,0, +1222,0,0,0,876,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,133,0,0,0,0,187,0,8,0,0,0,0,0, +0,0,429,0,685,0,0,0,0,0,0,0,0,0,0,0,132,472,0,0,0,0,0,0,0,0,0,938,0,0,874,0,0,0, +0,0,774,0,0,0,0,0,92,0,0,0,0,0,0,830,701,0,0,0,0,0,426,350,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,603,59,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,441,163,4,0, +0,0,0,0,0,0,0,0,806,0,0,0,0,0,0,233,0,0,0,0,1994,0,1739,0,0,393,0,47,1038,0,0,0, +309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,363,0,0,0,175,0,0,0,0,0,0,0,666, +0,0,1675,0,1600,0,0,0,808,0,0,0,0,0,0,0,0,0,0,0,280,54,0,0,0,0,0,0,0,0,421,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0,103,254,0,262,1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,1630,0,0,0,0,0,0,0,0,0,0,0,0,0,671,972,989,0,0, +0,0,0,0,0,889,0,0,0,1382,0,0,0,0,0,0,0,775,0,0,0,0,0,0,0,0,0,0,388,202,0,0,0,0, +16,560,0,0,0,841,0,0,566,0,0,0,938,0,0,0,0,0,0,0,0,0,0,912,0,0,0,1361,0,0,0,0,0, +0,618,236,0,1854,0,0,318,190,0,1376,0,0,0,0,0,0,0,349,0,0,0,0,951,1972,0,0,0,0, +0,0,344,0,0,0,0,0,0,0,0,850,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,163,85,0,487,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,145,0,83,0,0,1013,0,0,0,1922,0,0,169,557,66,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1193,82,0,352,454,57,0,0,1333,396,107,0,370,0,0,0,0,0,0,0,0,0,204,0,0,0, +0,0,1706,0,0,0,0,0,0,0,0,0,0,0,0,394,1204,0,0,0,0,0,1007,0,0,0,1696,0,1519,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,981,0,0,0,0,1072,0,0,0,712,0,1629,0,0,0,0,0,0,0,728,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1271,0,0,0,1608,16,0,0,0,0,485,0,0,0,0,0,0, +153,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1991,0,0,0,0,0,0,0,0,52,0,21,0, +0,0,0,0,0,0,0,0,819,0,0,0,0,0,917,0,0,0,0,784,0,0,0,0,135,0,0,0,0,0,454,0,0,0,0, +0,0,0,0,0,852,1719,0,0,0,0,0,852,0,0,0,0,0,952,0,0,0,0,568,0,0,0,0,0,448,0,0,0, +67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1826,657,0,729,666,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +669,0,0,0,0,0,0,0,402,0,0,152,0,0,0,0,912,0,0,0,0,0,0,51,320,0,445,0,0,0,0,308, +0,0,0,0,0,386,0,0,239,0,0,130,83,0,143,0,348,0,0,0,0,0,0,0,958,0,0,0,0,0,210,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,430,0,0,0,0,0,0,0,0,0,0,0,0,7,213,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,801,0,0,0,0,0,0,0,0,0,936,0,108,0,0, +0,0,0,0,0,0,0,885,587,219,398,364,0,1165,0,0,342,241,303,0,0,0,0,0,0,0,0,0,0, +1454,0,0,0,0,0,0,0,0,0,0,254,562,0,786,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1294,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,493,216,0,0,0,0,219,341,0,0,0,0,0, +0,0,0,0,0,130,1734,154,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,701,604,0,0,879,0,195, +666,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1669,0,0,0,1791,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1228,0,0,0,0,0,623,0,0,0,0,0,0,0,798,0,0,0,0,0,0,0,0,0,0,0,0,84, +122,0,0,0,837,0,0,0,0,0,0,1013,0,0,577,0,0,0,460,932,0,0,0,0,0,0,0,0,0,0,0,31, +131,0,0,0,605,0,0,0,1246,0,0,0,0,68,278,165,307,781,0,0,0,0,0,0,33,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,1113,0,0,720,1953,203,0,0,0,0,0,0,0,425,326,0,0,0,0,0, +0,0,0,0,0,241,1316,0,0,0,0,0,416,0,0,0,1300,0,847,0,0,662,358,0,0,0,0,839,1823, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,654,1522,0,0,0,0,0,0,163,0,0,0,0,0,314,978,0,0,0, +601,0,0,0,0,0,946,434,0,0,0,402,411,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,1467, +410,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,677,0,0,0,0,0,0,0,0,0,0,0,0,70,0,0,0,0,1405,0,0,0,0,0,0,108,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,777,0,0,0,0,0,747,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,505,0,326,0,0,164,628,654,0,0,0, +37,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,668,152,0,0,0,0,0,0,0,0,0,0,0,581, +0,0,0,0,44,126,89,0,0,0,0,0,0,0,0,1531,0,0,0,0,0,0,0,0,203,1167,0,0,0,0,0,0,0,0, +531,1232,0,0,0,0,0,943,0,670,231,880,0,1617,0,0,0,1957,0,0,0,0,0,0,0,975,0,0,0, +0,0,0,0,0,0,0,0,242,0,0,0,0,0,0,0,0,0,421,0,0,14,834,0,0,0,0,0,0,0,0,0,0,0,0, +465,0,0,0,0,0,834,688,413,855,0,0,0,590,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0, +0,45,169,0,0,0,0,0,0,0,0,0,0,0,198,0,0,565,585,0,0,0,0,0,0,0,0,0,0,0,0,0,691,0, +0,0,593,0,0,0,0,0,0,0,0,0,913,116,0,0,0,0,1360,0,0,0,802,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,673,308,0,709,1006,1895,0,228,0,0,0,1840,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,608,0,0,0,0,0,0,0,0,0,1573,0,2039,136,540,0,0,0,0,0,0,0, +897,0,0,938,1878,0,0,0,0,0,0,0,0,0,1469,0,999,0,299,0,0,0,0,0,0,0,578,0,0,0,0,0, +456,0,0,0,1679,163,693,0,0,0,0,0,0,48,755,0,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0, +1091,0,0,0,0,695,0,0,1464,0,0,0,0,0,975,0,0,335,0,0,1979,0,0,0,0,269,1566,630, +396,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1815,634,0,0,0,966,0,0,0,0,0,0,0,9, +412,0,958,0,0,579,382,0,212,0,0,0,0,965,681,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,655, +0,0,0,0,67,0,0,0,0,0,0,751,0,0,0,0,423,231,0,0,1016,300,0,0,0,0,100,237,0,0,0, +1370,0,0,0,1208,0,0,0,0,0,1219,129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,199,0,0,427,0,0, +0,0,949,665,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,712,0,0,0,0,0,1186,0,0,0,0,0,0,0,0,0,0,295,312,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +151,0,0,0,0,588,4,0,0,0,0,0,414,104,0,0,757,263,0,561,0,0,0,320,0,0,0,0,0,0,0,0, +0,0,0,225,0,0,0,0,37,817,0,974,0,0,0,0,0,0,0,0,0,0,0,0,0,2026,131,235,16,0,590, +1157,0,0,0,0,0,0,0,0,221,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,390,0,0,0,0, +0,0,0,1144,0,0,0,464,0,0,0,0,0,0,0,0,0,0,0,0,204,407,303,1218,0,0,0,0,5,325,0,0, +0,0,12,800,0,1783,0,0,0,0,0,0,0,0,0,0,504,621,0,0,0,0,0,0,0,0,0,920,0,376,0,0,0, +0,0,218,580,0,768,454,0,0,0,0,0,0,0,0,0,0,0,0,676,0,0,0,0,0,0,164,0,0,0,0,0,0,0, +0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,120,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,343, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,0,0,1812,0,0,8,0,0,0,21,1125,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,1327,0,0,0,0,575,1598,0,0,0,0,0,0,0,0,0,895,0,0,0,959,0,0, +0,0,0,1759,173,0,0,0,0,266,261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,1427,0,0,300,1033,0,0,0,0,0,0,0,0,0,0,0,584,0,0,0,0,52,734, +0,0,217,239,0,1129,0,0,0,0,0,0,0,0,732,20,0,0,0,0,0,0,0,0,0,0,0,418,0,0,0,613,0, +0,0,0,0,0,0,0,0,632,0,0,85,984,0,0,0,0,909,694,7,1109,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,167,0,0,0,0,280,62,0,0,33,0,0,359,186,980,0,0,0,0,0,0,0,0,0,0,0,585,0,0,0, +211,0,0,336,145,0,1130,0,873,0,0,840,263,0,0,0,0,0,0,0,0,0,916,0,0,0,0,0,0,0,0, +0,0,155,0,0,0,461,97,0,0,0,0,0,1356,0,0,0,0,0,0,0,593,0,0,0,0,0,1392,0,0,0,0, +126,0,0,0,0,1179,0,0,0,0,0,162,0,0,0,0,0,765,0,187,0,1286,0,0,0,0,0,0,0,0,0,635, +0,0,23,215,0,0,0,1306,0,0,97,716,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,657,0, +0,0,0,0,0,0,0,299,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0,0,0,0,658,1082,0,0,0,0,0,2002, +0,0,0,0,0,0,833,248,0,0,0,0,0,1654,0,0,531,0,0,0,0,0,0,634,0,0,0,0,0,0,0,0,0, +853,573,249,0,0,0,0,0,0,0,0,527,0,0,0,0,1419,0,0,0,0,0,0,20,49,0,0,0,992,0,0,0, +728,0,0,0,0,0,0,0,0,0,0,0,0,497,1579,0,0,0,0,62,268,0,0,0,0,0,0,0,1201,0,0,0,0, +0,0,0,0,0,0,0,0,495,193,0,0,0,0,106,0,0,859,0,0,23,0,0,0,0,0,0,0,813,925,0,0, +223,613,953,0,0,0,0,0,0,0,0,666,0,0,0,0,0,0,0,0,0,670,0,0,40,216,0,0,0,0,0,0, +259,0,0,0,440,1114,0,0,0,0,0,0,0,0,74,475,0,0,188,139,0,797,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,1572,0,0,0,0,39,0,0,0,0,0,0,0,0,0,0,0,0,1594,0,0,0,0,0,0,0,290,0,232, +0,0,887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,14,0,0,0,0,0,741,0,0,0,992,0, +0,0,0,0,0,0,0,111,0,0,425,0,0,0,0,0,789,0,0,0,1593,0,1768,0,0,233,0,0,0,0,943,0, +0,0,0,0,0,0,955,225,245,0,0,0,0,0,0,241,0,0,0,0,1943,0,0,0,1284,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,709,0,0,0,0,0,0,554,0,0,0,0,0,0,0,0,1564,0,0,0, +443,0,0,0,0,0,0,280,0,0,0,0,0,0,0,0,729,0,0,0,348,0,0,0,0,0,0,0,758,848,298,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,829,1422,189,121,0,0,632,812,0,0,556,0,0,0,0,0,436,172, +530,844,232,984,0,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,537,0,0,0,0,0,859,0,0, +842,0,0,0,0,0,0,0,0,0,0,1291,0,0,0,0,0,0,0,0,0,0,0,1482,612,392,0,0,0,262,31,0, +0,0,0,0,0,0,0,0,0,753,549,0,0,0,0,0,0,696,0,0,0,0,0,0,0,834,0,0,0,0,0,771,0,0,0, +0,0,0,0,0,0,0,0,0,0,921,0,0,0,674,0,0,0,0,0,0,0,0,0,0,308,444,0,0,0,0,0,0,805, +180,0,0,278,271,0,0,214,505,0,1215,0,0,0,0,0,0,387,271,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,1645,42,92,0,459,0,0,330,1557,0,0,0,0,0,0,0,0,113,18,0,0,0, +1742,0,0,0,965,0,0,0,0,0,0,0,0,0,0,0,0,0,182,0,0,65,0,0,0,0,0,0,0,0,0,0,0,0,973, +0,0,0,0,0,328,0,0,588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1786, +0,0,962,1985,0,0,0,308,508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,588,0,0,0,0,0,0,614,793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,290,0,0,0,0,0,0,0,0,0,0,1136,0,0,0,0,0,0,0,0,0,0,796,719,0,0, +326,210,0,0,0,701,758,472,0,0,0,1947,278,1079,0,0,0,0,0,0,497,41,0,0,634,46,961, +0,810,524,0,0,33,0,0,0,0,0,0,0,0,0,0,0,0,532,0,997,0,0,0,0,0,0,0,0,0,0,0,1301,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1298,0,671,0,0,0,306,0,0,0,0,0,0,0,0,0,0, +693,1823,0,0,0,759,0,0,0,0,0,1932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,182,0,0,0,1964, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,521,0,0,0,0,0,0,424,857,0,0,0,0,671,328,0, +529,0,0,0,0,0,716,0,1509,80,67,0,0,0,0,59,141,0,0,0,0,0,0,783,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1498,0,0,0,0,343,430,803,1183,677, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,19817,0,5579,9350,0,0,21002,19718,0,0,0,21926,0,0,0,0,0,0,0,0,0,0,0,0,0,20711, -0,0,0,20197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40550,0,0,0,57510,0,0,0,53895, -0,0,15017,0,17000,39367,2347,0,0,0,0,0,0,0,0,0,8588,0,0,0,0,0,3273,17862,3498, -2085,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19048,0,0,0,0,0,11978,58631,0,0,0,0 -,0,0,523,0,12969,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28197,0,47846,0,0,0,0,0,0 -,0,0,0,4549,0,0,0,0,0,0,0,0,0,0,687,14917,748,8229,0,0,0,0,0,0,2476,12935,0,0,0, -0,0,0,22792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27528,59142,0,0,20876,20134,0,0,0, -0,440,12068,0,58951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48038,0,0,0,60999,0,0,0,0, -0,0,0,0,0,0,0,0,0,15716,7498,5476,0,0,0,0,20202,37959,0,0,0,0,0,0,0,0,0,0,0,0, -29801,0,5451,0,0,0,0,0,0,0,0,0,0,50790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24485,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13573,0,0,22856,0,0,0,0,21927,0,0,0,0,0 -,0,9130,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,0,0,0,2282,583,0,0,0,0,0,0,0,0,0,0,3726, -26503,0,0,0,0,0,0,9258,0,0,0,0,0,0,0,0,21604,0,0,0,45574,0,0,0,0,0,20710,0,0,0, -42694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,6694,0,0,0,0,0,0,0,10948,0,0,0,29700,0,0, -0,0,0,58823,3796,27399,20939,10180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -19,29287,28649,14534,0,0,16428,45607,0,0,0,0,0,0,25322,0,4908,0,0,0,0,0,0,25476, -29097,14246,11053,0,0,0,0,0,0,0,0,18502,0,0,0,44390,0,0,0,17765,0,0,0,0,0,0, -24520,0,0,0,0,0,0,0,0,0,0,17319,0,0,0,0,0,0,0,0,0,0,0,0,0,28166,0,0,0,0,0,48198, -0,0,31467,0,24585,0,0,0,0,18692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23596,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,7236,968,13637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14791,0,0,0,12324,0,12741,0,0,0 -,0,0,0,0,0,0,11108,0,0,0,0,4009,40295,20616,4357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -15015,0,0,0,0,0,43751,0,0,0,0,0,0,0,0,0,0,0,23013,0,0,0,0,0,0,0,0,0,0,0,0,0, -45542,0,0,0,0,0,0,0,0,0,23974,0,0,0,0,17480,20647,0,0,0,0,0,0,8876,0,0,40806,0,0 -,0,0,0,0,0,14502,17160,17764,0,0,31594,35431,0,0,2890,0,0,0,0,0,0,0,0,27524,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8228,0,56583,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,34278,0,0,0,0,0,0,0,0,0,0,0,0,0,2662,0,26724,0,0,0,0,0,0,0,64198,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049, -54983,0,0,0,0,0,0,0,837,0,17604,0,0,0,0,0,28838,0,0,0,0,0,0,26312,0,0,3910,0,0,0 -,25830,0,0,0,0,0,8391,0,19845,19240,1092,0,0,5449,0,0,0,0,17188,0,0,0,0,0,0,0,0, -0,10629,0,0,6671,61094,5832,8358,0,0,0,55078,0,0,0,0,0,29860,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,51494,0,28647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25989,0,0,30153,61318 -,0,0,0,0,0,0,0,24903,0,0,0,4388,0,42054,0,0,0,0,0,0,0,53158,0,0,0,0,0,0,0,50918, -0,0,0,0,0,0,26251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5929,2853,0,37126, -7372,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2027,934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,55686,0,0,5672,5447,0,62758,0,0,0,0,0,0,0,0,0,0,0,0,2923,0,556,1415, -0,0,0,0,0,0,0,0,0,8645,0,9477,0,0,0,0,0,0,0,48742,0,0,0,0,0,0,0,0,0,0,24235,228, -0,0,0,0,0,0,0,0,0,0,16970,18823,0,0,0,0,0,0,0,0,0,25158,0,0,0,0,0,18567,20072, -2823,14313,1830,0,0,0,0,0,0,0,0,27048,23526,0,0,0,0,0,997,492,0,14730,16677,396, -13574,0,0,0,41671,0,0,0,0,0,0,0,19045,0,0,0,421,17545,3110,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,47111,14475,56551,0,0,0,0,0,0,0,0,0,0,3697,0,0,0,0,0,0,49382,0,35559,0, -0,0,0,40,0,11496,15621,0,8550,0,0,0,63462,0,0,0,0,0,0,0,36966,0,50406,0,46022, -1001,0,0,12069,3249,0,0,0,0,0,0,0,0,0,0,0,0,0,15241,0,0,0,0,0,0,0,0,64743,0,0,0, -0,0,58759,0,0,0,0,1136,26981,0,0,0,0,0,0,0,17732,0,0,0,17157,20011,6629,0,43879, -0,0,0,13572,25128,10759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28676,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,875,24007,0,0,0,0,7628,0,0,0,0,0,12268,0,0,0,0,0,0,0,0,19300 -,23210,356,0,0,0,0,0,0,0,0,0,15236,0,0,0,0,0,49670,0,0,0,0,0,0,0,21764,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,13931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45799,0,0,436,3589, -0,0,11402,0,0,0,0,0,0,0,0,0,0,62822,0,0,0,39814,588,0,0,0,0,0,0,27750,0,0,0,0,0, -0,1609,22660,2346,18951,0,16068,0,0,0,0,0,0,5162,11110,0,0,0,0,15048,1060,0,7879 -,18280,326,0,14886,19656,0,7594,0,0,0,0,0,781,581,0,16198,0,0,0,0,0,0,1078,9892, -0,0,0,0,0,0,0,0,0,0,4489,0,0,0,0,33798,0,0,0,54534,0,0,0,0,0,0,0,33158,0,0,0,0,0 -,0,0,0,0,42086,13834,2757,8456,16773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3434,0,0,0, -0,0,3946,29668,0,0,30634,36775,0,0,0,0,0,24901,0,16069,6280,0,0,0,0,41990,0,0,0, -0,0,0,0,27365,0,0,0,0,0,0,0,0,0,0,1450,44807,0,0,0,32100,0,0,0,0,0,35110,0,0,0,0 -,0,0,0,0,17448,19591,0,0,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,5511,0,0,0,32934,0,0,0 -,0,0,0,0,0,0,18180,0,0,0,23428,19754,0,0,31174,3021,31655,23464,0,0,0,0,0,0, -57255,0,0,21292,64487,0,0,0,0,0,0,25802,9189,0,0,0,0,0,49254,0,0,0,0,0,0,0,0,0,0 -,5837,50023,0,0,0,0,0,0,0,0,0,15495,0,0,0,0,0,51942,0,0,0,0,0,0,0,0,28104,58662, -0,50214,0,0,0,0,0,0,0,0,2988,0,22888,31812,0,0,0,0,0,2020,0,18916,0,0,0,0,0,0,0, -23973,0,0,0,0,17516,11717,0,0,0,55911,0,0,0,0,0,0,0,2855,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,46822,0,24710,28586,0,0,0,1556,0,0,30117,0,0,22090,57127,3403,14087,0 -,0,0,0,0,0,0,0,0,0,1041,0,10633,6916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27269,0,0,13322,18055,0,29380,0,56454,0,0,120 -,0,0,8773,0,0,0,0,16040,0,0,0,0,0,0,0,27242,23781,0,1572,0,28134,0,0,1512,0,0,0, -0,0,0,27684,0,38470,0,0,0,0,0,0,1513,8709,0,0,0,0,0,0,0,0,0,0,0,46566,0,0,0,0, -28521,61159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24356,0,0,0,0,0,0,0,0,0,13028,0, -5863,0,0,15693,0,0,0,0,0,0,0,1131,23398,0,0,0,0,0,0,0,26212,0,0,0,0,0,0,0,0,0,0, -0,0,0,18404,0,0,0,0,1457,26183,0,0,2475,7110,0,0,0,0,27180,60166,0,0,0,20262,0, -41862,0,0,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26148,0,0,0,0,0,0,0,0 -,0,28229,0,0,0,29254,0,0,0,0,0,0,0,0,0,0,27690,0,0,13636,12776,1862,0,0,0,0,0,0, -17225,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,4457,18117,0,2023,402,0,0,0,0,0,0,0,0,0,0,0,0,0,104,3654,0,0, -0,0,0,0,0,0,18440,0,0,0,0,0,0,0,0,29861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,22150,0,0,0,0,0,0,0,0,0,0,0,0,24074,0,0,0,0,0,0,0,0,12004,0,32358, -0,0,3081,0,0,0,0,0,0,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,10792,1799,21322,0,7880, -12613,0,0,0,0,0,0,0,0,13993,0,0,0,16202,0,0,0,0,32102,0,37223,0,10500,0,0,0,0,0, -0,0,0,32008,0,0,0,0,0,23816,3236,0,0,0,0,0,23237,0,0,5642,0,4684,294,0,0,0,0,0,0 -,0,0,0,0,0,0,0,0,0,0,0,0,0,26852,0,0,0,0,0,0,7148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,7890,61798,939,0,0,56679,0,0,0,0,0,27078,202,5029,0,0,0,0,0, -0,0,0,0,28005,0,0,15273,24741,5676,20452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55910,0,0 -,0,0,5069,27942,0,21092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12517,0,0,0,0,0,0, -0,0,0,0,0,0,21384,28260,0,2502,20108,0,0,0,0,0,0,0,0,0,0,0,0,46726,0,30790,0,0,0 -,0,0,14725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,6372,0,0,0,12422,15182,0,8683,0, -10665,19462,0,0,0,0,0,0,1590,0,31628,0,22632,19750,0,0,0,0,0,0,0,24198,0,0,0,0,0 -,50662,0,0,0,0,0,0,0,0,0,0,9131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11015,0,0,0,0,0,0,0, -0,16490,54695,0,0,0,0,0,0,0,0,12937,0,0,0,0,16004,0,0,0,0,0,0,0,0,0,2181,6923,0, -0,0,0,0,0,0,15624,11302,0,0,5673,7559,0,0,14668,15684,0,0,0,0,0,0,24204,48134,0, -24230,0,55527,0,0,3464,19141,0,0,0,0}; +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1357,53,0,0,0,0,590,0,0,0,0,0,0,0,0,0,0, +0,0,0,329,0,0,0,0,0,0,0,469,0,0,0,0,0,0,0,0,0,0,460,0,0,1743,0,0,963,340,0,0,0, +0,0,1603,0,0,250,0,0,0,0,0,646,218,0,1794,0,0,0,571,0,455,0,0,0,1012,0,0,0,0,0, +0,0,0,0,0,0,0,597,161,0,349,0,524,0,0,0,0,0,0,0,0,0,0,0,0,322,432,0,0,0,0,0,0, +325,223,0,0,0,0,0,566,0,0,0,1394,481,436,0,48,457,610,756,618,0,0,0,755,0,1217, +0,0,0,0,0,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,544,492,107,414,0,0,0,0,0,0,0,0,0,0,0, +1007,0,0,0,0,5,0,0,1580,0,0,0,0,0,0,0,0,0,0,0,0,0,673,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,1843,0,0,0,0,0,0,0,0,0,165,0,0,0,0,0,0,809,885,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,498,0,0,0,306,9,0,0,0,0,0,0,0,437,721,146,0,0,0,0,0,0,0,0,0,0,0,177,0,0,0,0, +0,0,0,1377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,959,0,0,0,1928,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1435,0,481,0,0,0,0,0,0,142,84,0,0,0,0,0, +1015,0,0,0,315,0,0,0,0,0,0,759,0,0,0,0,0,0,0,0,712,0,0,0,1722,0,0,0,0,0,0,0,0,0, +0,0,0,222,0,985,1414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1273, +538,706,0,0,0,0,0,0,0,0,115,0,0,0,0,0,0,0,0,0,0,1781,0,0,0,0,0,431,97,665,42, +237,0,0,0,264,0,0,213,0,0,0,0,0,0,0,455,0,0,0,906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +624,0,574,0,0,0,0,0,0,0,0,0,0,0,0,354,0,0,0,1558,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68, +235,723,1813,0,0,0,957,0,830,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,496,0,0,0,0,0,0,0, +547,239,88,0,0,0,0,0,0,0,0,0,1310,0,0,0,0,0,0,0,0,80,1076,0,0,118,0,0,0,479,274, +0,0,0,0,0,0,0,0,0,0,0,497,0,0,669,261,0,0,0,0,13,0,0,0,0,0,0,791,250,642,0,0,0, +1429,939,949,0,0,0,0,0,0,0,0,0,0,0,0,0,818,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,982,330,0,0,0,0,545,0,0,0,0,0,0,947,0,1188,0,0,0,0,0,904,0,0,0,0,0,1372,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,693,377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,695,0,0, +713,386,0,0,0,0,128,1575,0,0,0,0,0,0,424,893,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,904,0,0,0,0,0,552,322,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,1808,49,0,0,0,0, +1832,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,421,0,0,442,415,0,0,289, +0,0,0,0,0,206,110,0,0,0,0,0,205,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +19,1539,0,0,0,0,0,1340,0,1194,0,0,0,0,0,0,0,0,549,0,0,0,0,0,0,0,0,1720,0,0,0,0, +0,0,0,0,0,319,0,0,0,0,112,1180,0,0,0,0,0,0,0,0,0,0,0,967,0,0,0,0,0,0,0,0,0,1940, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,735,0,0,0,0,0,0,0,0,0,897,132,0,0,0,0,0,0,0, +0,0,0,38,838,0,0,0,379,218,8,660,1017,0,0,0,0,0,0,111,387,647,877,0,0,53,790,0, +0,0,0,0,0,0,0,458,0,0,0,0,0,0,954,0,0,0,394,0,1367,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,882,0,0,0,0,0,0,0,1409,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,124,342,199,0,0,0,0, +0,0,0,0,0,0,724,628,0,0,0,0,804,266,0,0,0,0,0,208,0,79,0,0,0,0,0,0,0,0,741,0,0, +0,0,0,0,0,0,0,0,606,0,1494,821,1553,0,0,135,405,0,0,178,100,0,0,0,0,0,0,0,0,0,0, +0,0,0,481,0,0,0,1378,0,0,0,0,0,0,0,0,0,0,0,0,0,791,33,1227,857,0,467,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,447,0,0,0,0,0,0,86,128,0,0,0,0,0,0,587,0,0,0,692,1018,0, +195,0,0,0,0,0,0,0,1546,0,0,0,0,0,0,0,0,0,0,0,684,0,0,345,0,0,0,0,0,0,365,0,1683, +0,0,472,0,433,0,0,0,0,0,0,0,28,0,0,0,997,0,705,3,0,0,0,0,0,0,0,0,0,229,0,0,0,0, +102,0,0,0,0,866,1022,0,0,0,0,0,0,0,0,0,55,0,115,0,0,0,0,933,0,0,0,0,0,0,0,702,0, +0,0,0,0,0,0,1728,26,484,0,0,0,185,618,417,0,803,0,0,0,0,0,0,0,0,0,0,0,1262,0,0, +0,0,0,0,0,0,0,0,0,0,0,633,0,0,0,0,0,0,0,0,0,0,0,0,0,479,262,0,0,0,0,0,0,830,0,0, +0,0,26,70,0,0,0,0,0,0,0,0,217,0,640,51,0,0,360,1586,0,0,0,0,0,652,0,0,0,0,0,766, +0,0,0,0,298,737,0,0,0,0,0,0,0,0,0,0,655,222,906,0,0,1013,991,2009,0,0,0,0,503,0, +0,0,216,154,0,0,0,716,0,844,0,0,0,0,621,252,0,0,0,0,748,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,103,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,576,0,0,0,648,0,0,0,331,0,0,0, +0,0,0,0,0,0,0,0,0,632,0,0,0,518,107,0,0,0,0,0,0,0,0,851,0,0,0,0,504,0,0,0,0,0,0, +0,0,0,0,0,0,7,883,0,0,0,0,0,0,0,922,0,0,0,0,0,0,0,0,91,993,0,0,0,0,0,0,200,131, +10,0,0,0,0,0,0,0,0,0,0,0,0,0,365,1433,0,0,0,0,28,103,0,0,798,1013,0,0,0,0,0,0,0, +0,39,1925,0,853,0,0,271,519,0,0,0,0,338,0,0,300,470,419,0,0,0,0,0,0,836,0,0,0,0, +0,0,1937,0,0,0,0,0,393,0,0,357,0,0,0,0,0,703,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,387,0,0,0,0,0,0,75,708,453,1351,0,303,0,0,772,0,0,0,0,0,0,0,0,749,0,0, +0,0,0,0,0,0,0,0,0,0,0,1065,0,0,717,226,0,0,0,0,0,890,431,626,0,0,0,0,706,0,0,0, +51,698,0,0,0,0,0,0,0,0,0,0,0,828,0,0,17,0,0,0,0,1929,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,871,498,0,101,1793,0,0,0,0,0,0,435,0, +0,0,0,0,966,0,129,1644,0,0,0,0,0,0,0,0,0,0,0,0,0,997,502,0,0,0,0,0,0,0,0,0,0,0, +0,823,0,1927,0,0,0,0,98,1756,0,0,0,0,0,0,0,0,0,0,0,0,8,0,160,1046,0,492,0,0,0,0, +0,0,129,45,0,0,0,0,0,0,353,558,0,0,0,0,0,785,0,0,0,1145,189,0,0,0,26,353,0,0,0, +0,0,2024,0,0,0,606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,855,0,0,0,0,0,0,0,0,0,0,0, +0,0,2011,0,0,5,4,0,0,461,764,0,0,0,1449,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1445,0,0, +0,1168,0,0,0,233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,216,0,0,0,286,0,0,0, +3,0,0,0,723,536,0,0,0,0,0,285,0,0,0,560,0,0,0,0,0,690,0,0,0,0,0,1246,0,0,63,0, +33,0,0,0,0,0,520,1862,0,0,0,0,0,0,0,0,0,0,0,0,630,0,0,0,0,554,0,0,0,0,0,1001,0, +0,0,0,0,446,0,0,0,0,0,0,0,1313,0,0,837,636,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,278, +0,0,0,0,0,0,0,0,868,0,0,0,0,1010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1231,0,304,0,506,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,93,1408,794, +843,704,0,285,114,485,898,145,0,19,2035,0,0,0,1933,0,0,0,0,0,0,0,1728,0,0,0,0,0, +0,0,0,746,0,0,0,0,0,0,0,995,1964,0,0,0,0,0,0,0,0,0,0,0,1550,0,874,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,1018,0,0,0,814,126,0,0,1264,0,0,814,955,0,0,0,0,0,0, +0,981,0,0,0,0,0,0,0,0,915,56,0,0,100,0,0,0,0,0,0,0,0,0,638,0,0,0,0,738,0,0,0,0, +0,0,0,0,0,758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1112,0,0,214,0,0,0,133,0,196, +168,0,0,0,0,0,1152,0,1245,0,0,538,169,871,1816,0,0,413,133,0,0,0,978,0,0,43,93, +371,0,0,0,0,0,0,526,25,0,754,335,0,0,0,0,182,0,0,0,0,0,0,0,0,0,0,0,39,601,0,0,0, +0,0,0,0,181,370,0,0,1652,358,0,0,0,0,0,0,0,0,0,176,286,0,788,0,0,0,0,0,1223,780, +254,1003,896,0,0,0,1447,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,744,0,0,0,0,0,126,0, +41,788,0,0,0,629,0,0,0,0,0,0,0,0,0,0,0,293,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,420,37,1900,0,0,0,0,542,1570,957,0,0,0,0,0,0, +0,373,31,0,0,0,0,125,325,0,0,0,0,0,0,323,0,0,1547,0,0,0,0,0,0,0,0,0,0,0,0,0, +1216,0,0,0,0,0,0,198,1905,629,15,0,0,0,0,0,0,20,75,543,1353,0,0,0,533,0,0,6,0,0, +0,0,0,0,538,0,0,0,0,0,0,0,0,0,0,0,338,0,0,0,0,11,0,0,0,284,659,0,989,0,0,0,0,0, +0,0,0,0,848,0,0,507,0,0,0,0,0,0,0,0,188,991,884,0,0,0,0,60,959,0,0,0,0,0,1653,0, +0,922,337,0,638,0,0,500,0,0,0,0,0,0,0,0,0,0,0,166,0,0,0,0,0,0,0,0,0,0,0,0,418,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,760,0,0,0,0,0,0,1277,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,770,0,0,0,0,0,0,0,243,89,0,0,0,0,0,0,0,0,0,1396,0, +560,0,0,3,1658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,586,0,0,1271,0,0,0,505,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1947, +41,445,0,0,0,0,0,0,0,0,57,189,0,0,371,0,0,0,0,552,0,883,0,923,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,875,0,0,0,1788,49,0,0,0,0,0, +0,0,0,0,0,0,661,0,0,1945,0,0,0,0,0,794,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,1135,0,0,0,745,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,410,0,976,0,0,0,0,0,703,0,0, +0,0,0,0,187,322,0,0,0,227,0,0,0,0,560,0,31,1395,0,0,0,0,0,466,0,0,0,0,643,167,0, +0,0,1428,0,412,0,0,0,0,0,0,0,0,0,1118,562,0,0,0,0,0,256,0,0,0,0,0,0,1771,0,0,0, +0,0,1190,132,0,66,0,0,0,0,0,0,0,0,0,0,317,0,0,0,63,0,0,0,0,0,0,0,1475,0,0,0,0,0, +0,0,288,0,0,0,0,608,0,0,0,0,0,0,0,0,1225,0,1189,0,0,0,0,0,0,0,1468,0,0,0,0,0, +689,120,0,0,0,0,0,0,0,1,0,329,0,0,0,0,226,0,0,0,0,0,1855,0,0,461,0,0,0,0,1346,0, +0,0,0,0,85,0,0,299,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1171,0,0, +0,980,0,0,0,0,0,0,0,0,637,279,0,0,0,0,0,293,0,0,0,0,528,17,0,0,0,0,5,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,601,0,0,0,0,0,0,779,0, +196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1322,737,752,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,412,192,80,0,0,8,1470,0,0,0,0,0,0,0,0,0,873,0,0,0,0,0,835,0,0,0,0,256, +38,986,0,0,0,0,0,0,0,0,0,91,257,278,911,0,0,0,0,0,0,0,0,749,151,0,0,0,0,0,0,0,0, +0,0,0,0,989,0,0,990,0,0,90,194,0,0,0,0,0,425,0,0,0,0,0,774,0,0,0,0,0,0,0,0,0,0, +646,827,752,0,0,0,662,0,22,21,0,0,0,0,0,0,95,239,0,0,0,431,0,0,0,0,0,874,0,0, +265,65,0,0,0,1350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1887,0,0,0,0,0,0,0,809, +0,696,0,1074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,630,0,0,802,0,0,0,56,776,0, +970,0,0,797,0,0,0,0,0,400,0,0,1951,0,0,41,0,11,118,0,0,0,0,0,0,0,0,251,615,0,0, +0,1044,0,0,0,0,0,0,0,0,0,0,0,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,370,0,0,0,0, +104,48,209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,930,0,0,0,0, +0,0,0,0,0,0,0,1286,0,759,0,120,385,0,0,0,429,0,0,0,0,0,0,0,0,820,0,0,0,0,0,0, +199,0,10,151,0,0,0,761,365,0,0,0,0,0,0,0,0,0,46,1086,0,0,0,0,11,1624,58,344,0,0, +1008,1868,0,0,0,888,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,440,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,914,1913,0,958,0,885,0,0,0,0,0,0,0,0,0,0,0, +0,0,847,276,0,302,65,0,0,0,510,0,1514,0,0,0,0,0,0,152,291,0,0,0,0,0,0,0,0,0,0,0, +0,282,589,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0,463,42,0,0,0,0,0,372,0,0,0,0,0,0,0, +0,0,680,0,0,0,0,0,0,0,0,977,1997,0,0,0,810,0,0,0,0,0,0,0,0,0,1390,0,0,0,644,0,0, +867,982,0,0,0,0,0,0,0,540,0,123,0,0,0,1978,0,0,0,0,789,623,0,1723,0,1220,0,0,0, +0,0,0,0,480,0,0,0,0,0,0,0,0,0,0,0,888,0,0,0,0,0,0,0,0,0,0,0,0,299,1995,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,788,179,0,0,0,0,0,0,431,156,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1373,39,80,196,0,0,507,0,0,0,646,0,0,0,0, +0,1214,0,0,0,0,926,0,0,0,1,114,0,0,0,0,0,446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,490,0,0,0,491,0,1584,0,0,507,250,0,0,0,158, +10,362,1,0,0,0,0,0,0,0,0,0,408,228,860,480,0,779,0,0,0,557,0,0,142,197,0,0,0,0, +0,0,0,0,0,0,0,1490,11,378,316,1057,0,0,18,579,299,1546,0,177,0,0,0,0,0,0,0,0,0, +411,0,0,0,0,727,439,0,0,0,0,0,1528,0,0,0,0,0,0,58,0,482,0,0,0,505,1952,0,0,0,0, +0,0,0,0,0,0,0,242,0,0,0,0,0,0,0,953,0,0,0,0,802,0,0,0,0,0,0,0,0,0,0,290,0,0,791, +52,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,1028,0,0,138,0,0,0,0,1811,0,0,0,0,0,0, +934,1821,0,0,0,0,371,38,0,0,0,1296,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,723,0,0,0,0,0, +0,0,0,0,0,0,0,0,1330,0,0,0,0,0,0,0,1255,296,109,0,0,0,0,0,660,0,0,0,0,270,591,0, +0,0,0,0,0,0,1090,81,0,0,0,0,391,0,0,0,0,249,322,0,0,0,0,0,0,0,1412,0,0,0,0,0,0, +0,0,0,0,526,632,0,0,0,0,0,0,235,144,0,0,0,0,0,940,0,0,0,52,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,309,196,0,0,0,0,0,1912,0,1290,0,686,0,0,625,0,0,0,0,0,0,0,0,0,0,0,412,0, +0,0,0,43,0,0,0,0,11,967,758,0,0,0,0,0,0,0,0,0,0,0,0,0,0,220,0,0,0,0,0,0,0,0,0,0, +873,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,890,0,0,2,0,0,0,0,0,0,0,0,1774, +393,263,0,0,0,0,0,0,818,456,0,0,251,178,393,97,0,0,0,0,0,674,168,0,0,0,0,0,0,0, +159,1639,0,0,0,0,0,0,0,0,59,934,0,191,0,0,0,0,346,165,0,877,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,128,0,0,0,0,0,0,1297,0,0,0,0,0,0,164,0,0,0,15,132,241,1073,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,228,324,53,0,0,910,0,0,0,0,0,0,0,0,734,705, +217,73,0,0,0,0,0,0,0,0,636,389,0,1409,0,0,0,0,0,893,0,0,0,0,21,0,0,0,0,0,0,0,0, +0,0,0,0,0,721,0,0,0,959,0,0,0,0,1433,0,0,0,0,0,0,0,0,0,0,0,0,174,189,0,0,0,0,0, +0,0,0,0,0,22,2,0,0,815,354,0,0,0,0,425,0,411,60,13,1611,0,0,0,0,0,0,0,0,0,0,0,0, +0,1478,596,0,0,398,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,1159,0,0,0,0,0, +592,223,0,0,0,0,0,0,0,245,64,0,0,0,0,278,0,604,0,0,1502,265,0,0,0,0,0,0,0,310, +1763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,129,0,0,0,0,0,0,0,0,0,1356,0,0,0,0,0,0,0, +0,505,0,0,0,0,0,0,0,1000,0,0,966,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,839,0,0,0,0,0,0, +0,0,0,0,0,0,0,637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,590,0,0,0,0,280,0,0,0,1386,0,0,0, +281,0,1064,0,0,0,0,0,917,0,0,15,555,0,0,1014,1883,0,0,0,965,0,0,117,33,0,0,0, +801,0,0,0,0,0,877,0,824,0,0,0,0,0,0,0,0,0,0,0,365,0,0,0,0,0,0,774,7,0,430,0,0, +231,360,0,0,0,0,0,0,0,0,822,740,0,0,929,1485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,852,0,0,0,0,17,0,0,0,0,0,0,1001,0,0,0,0,35,831,0,0,384,457,0,0,0,1351,0,27, +0,0,984,0,264,552,0,401,0,0,0,710,0,1211,0,0,11,205,0,0,0,0,0,0,0,0,0,0,0,0,5, +579,0,717,0,0,1011,0,0,0,0,0,0,0,0,0,0,0,0,0,0,805,0,0,0,0,0,0,0,0,0,0,0,489,0, +0,0,1024,0,0,0,0,0,0,0,0,0,892,0,0,0,0,0,0,0,0,0,0,0,0,473,0,0,0,659,864,0,0,0, +0,0,0,152,819,0,51,0,0,0,0,0,0,0,0,0,0,130,0,0,0,0,0,229,0,0,0,0,674,0,0,0,0,0, +0,0,0,0,770,52,79,0,0,0,1666,0,409,0,0,0,0,0,0,0,195,0,688,0,0,0,0,0,0,0,0,0,0, +0,889,174,160,0,0,0,0,0,0,0,0,0,0,0,0,0,872,0,918,569,268,0,0,0,1224,0,1361,0,0, +0,0,0,0,0,0,0,374,0,0,0,0,0,731,0,0,0,0,190,0,0,0,0,0,0,0,202,506,444,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,835,0,17,1526,0,0,0,0,0,477,0,0, +994,1374,76,0,0,0,0,0,0,0,355,287,0,1389,0,0,0,0,0,0,455,384,0,0,0,264,0,0,0,0, +0,0,0,0,0,0,0,0,1001,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,851,175,359,0,0,0,0,0,0,0, +0,287,740,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,857,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +819,1402,0,0,0,0,0,0,174,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1649, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,655,573,0,0,0,0,0,0,0,0,128,351,0,0,0,0,0,0, +0,0,0,0,0,918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,687,0,0,0,0,0,0,0,0,0,1525, +0,0,0,1009,0,0,0,0,0,0,0,340,0,0,0,0,0,0,0,0,0,0,861,0,176,0,0,0,0,0,0,0,0,0,96, +985,0,615,0,0,0,0,0,0,0,1919,0,0,0,0,0,1131,0,0,0,0,0,0,0,247,0,0,0,0,27,23,0,0, +0,0,0,0,0,0,38,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1015,0,0,0,0,0,1088,0,0, +0,0,0,1585,0,0,0,0,227,0,0,0,478,360,0,0,0,95,0,0,0,0,0,0,699,0,0,0,26,0,0,0,0, +1119,0,0,0,739,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,741,67,0,0,0,0,0,0,464,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42,0,96,0,0,0,26,342,0,0,0,0,0,0,203,0,0,449,0, +0,0,0,0,0,0,0,0,0,256,311,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0,827,0,0,0,0,581,64,0, +1047,0,0,0,0,0,288,0,0,0,0,0,1375,0,0,0,0,0,0,0,0,0,0,0,1309,0,0,0,0,0,0,0,0, +376,12,0,0,0,0,0,154,0,1520,0,1753,95,502,0,0,0,0,0,0,0,269,291,1197,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,1341,0,1017,0,0,0,0,0,0,0, +0,857,1810,533,0,0,1453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,836,211,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,19,0,156,0,0,0,0,1009,0,0,0,0,0,0,0,0,0,0,0,0,0,820,0,0, +0,0,0,0,0,0,0,228,0,0,0,1131,0,1276,0,0,0,0,0,0,0,0,0,0,0,0,849,1792,0,0,389, +291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,525,0,0, +0,453,0,0,0,0,666,0,0,0,422,0,355,0,0,0,0,165,0,260,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,865,0,0,0,0,0,0,0,1625,0,0,0,234,0,1383,0,0,0,0,0,0,0,0,306,0,0,0,802,1921, +0,0,0,0,0,0,180,0,0,0,0,1312,814,0,0,0,0,0,0,0,0,0,0,707,0,0,0,1493,11,61,733,0, +0,0,341,0,0,0,98,0,0,0,0,0,0,0,0,0,0,0,1014,0,0,0,0,0,0,0,142,102,0,0,30,0,0, +823,0,1045,0,0,0,1930,0,1512,0,0,0,0,0,0,0,87,0,1243,245,0,0,0,0,0,0,0,48,68,0, +0,0,0,0,0,0,0,126,77,625,938,0,0,351,0,0,0,174,1668,0,707,0,0,0,0,0,0,0,0,0,0,0, +403,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,282,0,0,0,0,0,0,8,44,0,0,363,115,0,0,0,0,0,0, +0,0,0,0,0,0,545,761,0,0,835,1254,0,0,0,0,930,1936,0,0,0,0,0,0,0,0,653,0,0,0,0,0, +344,0,0,1483,673,185,0,0,460,93,753,478,0,0,0,0,0,1020,0,0,0,0,0,0,0,103,0,0,0, +499,0,0,0,0,0,0,207,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,968,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,3,0,0,0,0,399,0,0,0,0,224,563,0,0,0,0,0,704,0,0,0,0,0,0,0,0,0,0,0, +1559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,861,0,0,0,0,946,333,746,0,0,0,0,0, +0,0,910,0,0,0,0,0,0,0,0,0,0,0,0,0,652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1514,0,0,0,0,201,0,510,717,0,0,528,0,0,0,0, +20,0,0,0,1251,0,0,0,1163,0,0,0,307,0,0,0,0,0,1091,0,0,0,0,0,0,0,0,0,0,0,429,0,0, +0,881,0,0,0,0,0,621,0,0,0,0,0,0,0,736,0,348,0,868,0,0,0,0,433,0,0,0,771,1495,0, +0,0,0,215,0,0,0,0,0,124,0,0,0,0,0,0,0,0,0,0,0,55,0,0,0,0,0,0,0,112,62,0,856,270, +0,572,0,0,0,0,939,0,0,0,0,0,0,0,352,0,0,0,0,0,0,0,0,0,647,0,0,0,0,10,0,0,0,0,0, +0,0,220,0,0,0,0,0,0,0,0,0,0,0,0,0,464,0,0,109,0,0,0,1746,0,0,0,515,0,0,0,566,0, +0,0,0,0,0,67,40,0,0,722,992,0,0,923,0,0,0,0,0,0,1145,0,0,0,0,0,0,0,0,0,0,0,568, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,247,0,0,0,0,645,0,0,328,0,0,0,0,0,0,0,0,0,0,0,0, +1363,0,0,0,0,0,1280,0,0,0,0,0,0,0,0,0,0,7,28,360,162,0,0,0,0,0,0,0,0,0,0,0,764, +0,0,833,862,0,856,0,0,0,0,0,0,736,92,0,0,948,1944,0,1479,63,590,0,0,0,1521,0,0, +0,709,0,0,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,483,0,0,0,0,1213, +0,0,0,0,29,1022,0,1712,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,731,0,0,0,0,0,0,171,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,241,0,0,0,0,0,0,0,0,0,0,0,964,2005,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,1100,0,0,0,954,0,0,0,0,0,0,0,0,0,1958,0,0,34,549,994,0,0,449, +137,850,0,0,670,146,0,0,0,0,518,159,0,0,0,0,0,0,0,0,151,0,0,1027,0,0,0,0,0,0,0, +0,0,0,983,0,0,0,0,993,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,141,501,0,0,0, +0,0,0,0,0,0,452,0,0,0,0,0,0,0,0,0,0,233,149,0,0,0,0,0,0,0,0,582,0,0,0,801,0,0,0, +0,0,0,70,0,0,369,0,36,0,0,0,0,0,0,0,204,721,430,241,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1817,16,1078,1021,0,0, +406,0,0,0,0,0,69,0,0,0,0,0,1830,0,0,0,824,0,0,0,0,0,0,0,0,0,826,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,816,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,717,1845,0,423,0,0, +0,0,0,0,0,0,510,0,0,1048,0,0,0,618,0,0,0,520,0,0,0,0,990,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,321,0,0,0,0,0,0,0,1135,0,0,921,0,0,0,24,397,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,856,0,0,0,139,282,981,0,288,0,0,0,1890,651,56,0,0,0,0,0,0,0, +0,261,0,0,0,0,0,0,0,0,0,0,0,617,1403,0,1205,0,0,563,0,0,0,0,0,0,0,0,333,0,0,0,0, +0,369,0,0,0,0,0,0,0,0,0,622,0,0,0,1407,0,0,0,0,0,0,0,0,0,0,0,0,624,160,0,363,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,619,0,174,292,0,0,656,616,0,0,0,685,0,0,0,0,0,0,0,0,0,0,0,0,0,647,0,0,0,631,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1267,0,0,0,1797,0,0,0,1684,0,0,469,0,531, +1230,73,0,0,0,0,0,0,0,0,0,268,0,0,0,0,0,102,558,109,65,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,595,0,0,0,0,0,374,1832,0,0,0,0,0,0,16,0,405,6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,881,0,1495,0,0,0,0,0,0,0,0,0,142,0,0,0,0,0,0,0,0,0,0,21,466,23, +257,0,0,0,0,0,0,77,404,0,0,0,0,0,0,712,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,860, +1848,0,0,652,629,0,0,0,0,13,377,0,1842,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1501,0, +0,0,1906,0,0,0,0,0,0,0,0,0,0,0,0,0,491,234,171,0,0,0,0,631,1186,0,0,0,0,0,0,0,0, +0,0,0,0,931,0,170,0,0,0,0,0,0,0,0,0,0,1587,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +765,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,424,0,0,714,0,0,0,0,685,0,0,0,0,0, +0,285,0,0,0,0,0,0,429,0,0,0,0,0,0,0,0,0,0,71,18,0,0,0,0,0,0,0,0,0,0,116,828,0,0, +0,0,0,0,289,0,0,0,0,0,0,0,0,675,0,0,0,1424,0,0,0,0,0,647,0,0,0,1334,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,36,209,0,0,0,0,0,0,0,342,0,0,0,928,0,0,0,0,0,1838,118,856,654, +318,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,915,895,454,0,0,513,1425,0,0, +0,0,0,0,791,0,153,0,0,0,0,0,0,796,909,445,345,0,0,0,0,0,0,0,0,578,0,0,0,1387,0, +0,0,555,0,0,0,0,0,0,766,0,0,0,0,0,0,0,0,0,0,541,0,0,0,0,0,0,0,0,0,0,0,0,0,880,0, +0,0,0,0,1506,0,0,983,0,768,0,0,0,0,584,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,737, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,226,30,426,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,462,0,0,0,385,0,398,0,0,0,0,0,0, +0,0,0,347,0,0,0,0,125,1259,644,136,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,469,0,0,0,0,0, +1367,0,0,0,0,0,0,0,0,0,0,0,719,0,0,0,0,0,0,0,0,0,0,0,0,0,1423,0,0,0,0,0,0,0,0,0, +749,0,0,0,0,546,645,0,0,0,0,0,0,277,0,0,1275,0,0,0,0,0,0,0,453,536,555,0,0,987, +1107,0,0,90,0,0,0,0,0,0,0,0,860,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +257,0,1768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1071,0,0,0,0,0,0,0,0,0,0,0,0,0,83, +0,835,0,0,0,0,0,0,0,2006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,696,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,95,1718,0,0,0,0,0,0,0,26,0,550,0,0,0,0,0,901,0,0,0,0,0, +0,822,0,0,122,0,0,0,807,0,0,0,0,0,262,0,620,601,34,0,0,170,0,0,0,0,537,0,0,0,0, +0,0,0,0,0,332,0,0,208,1909,182,261,0,0,0,1721,0,0,0,0,0,933,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,1609,0,895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,812,0,0,942,1916,0,0,0,0, +0,0,0,778,0,0,0,137,0,1314,0,0,0,0,0,0,0,1661,0,0,0,0,0,0,0,1591,0,0,0,0,0,0, +820,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,185,89,0,1160,230,6,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,63,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1740,0,0,177, +170,0,1961,0,0,0,0,0,0,0,0,0,0,0,0,91,0,17,44,0,0,0,0,0,0,0,0,0,270,0,296,0,0,0, +0,0,0,0,1523,0,0,0,0,0,0,0,0,0,0,757,7,0,0,0,0,0,0,0,0,0,0,530,588,0,0,0,0,0,0, +0,0,0,786,0,0,0,0,0,580,627,88,447,57,0,0,0,0,0,0,0,0,845,735,0,0,0,0,0,31,15,0, +460,521,12,424,0,0,0,1302,0,0,0,0,0,0,0,595,0,0,0,13,548,97,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,1472,452,1767,0,0,0,0,0,0,0,0,0,0,115,0,0,0,0,0,0,1543,0,1111,0,0,0,0, +1,0,359,488,0,267,0,0,0,1983,0,0,0,0,0,0,0,1155,0,1575,0,1438,31,0,0,377,101,0, +0,0,0,0,0,0,0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,2023,0,0,0,0,0,1836,0,0,0,0,35,843, +0,0,0,0,0,0,0,554,0,0,0,536,625,207,0,1371,0,0,0,424,785,336,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,750,0,0,0,0,238,0,0, +0,0,0,383,0,0,0,0,0,0,0,0,603,725,11,0,0,0,0,0,0,0,0,0,476,0,0,0,0,0,1552,0,0,0, +0,0,0,0,680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,435,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1431,0,0,13,112,0,0,356,0,0,0,0,0,0,0,0,0,0,1963,0,0,0,1244,18,0,0,0,0,0,0,867, +0,0,0,0,0,0,50,708,73,592,0,502,0,0,0,0,0,0,161,347,0,0,0,0,470,33,0,246,571,10, +0,465,614,0,237,0,0,0,0,0,24,18,0,506,0,0,0,0,0,0,33,309,0,0,0,0,0,0,0,0,0,0, +140,0,0,0,0,1056,0,0,0,1704,0,0,0,0,0,0,0,1036,0,0,0,0,0,0,0,0,0,1315,432,86, +264,524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,0,0,0,0,0,123,927,0,0,957,1149,0,0, +0,0,0,778,0,502,196,0,0,0,0,1312,0,0,0,0,0,0,0,855,0,0,0,0,0,0,0,0,0,0,45,1400, +0,0,0,1003,0,0,0,0,0,1097,0,0,0,0,0,0,0,0,545,612,0,0,0,0,0,0,0,0,0,0,0,0,54,0, +0,0,0,172,0,0,0,1029,0,0,0,0,0,0,0,0,0,568,0,0,0,732,617,0,0,974,94,989,733,0,0, +0,0,0,0,1789,0,0,665,2015,0,0,0,0,0,0,806,287,0,0,0,0,0,1539,0,0,0,0,0,0,0,0,0, +0,182,1563,0,0,0,0,0,0,0,0,0,484,0,0,0,0,0,1623,0,0,0,0,0,0,0,0,878,1833,0,1569, +0,0,0,0,0,0,0,0,93,0,715,994,0,0,0,0,0,63,0,591,0,0,0,0,0,0,0,749,0,0,0,0,547, +366,0,0,0,1747,0,0,0,0,0,0,0,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1463,0,772, +893,0,0,0,48,0,0,941,0,0,690,1785,106,440,0,0,0,0,0,0,0,0,0,0,32,0,332,216,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,852,0, +0,416,564,0,918,0,1764,0,0,3,0,0,274,0,0,0,0,501,0,0,0,0,0,0,0,851,743,0,49,0, +879,0,0,47,0,0,0,0,0,0,865,0,1202,0,0,0,0,0,0,47,272,0,0,0,0,0,0,0,0,0,0,0,1455, +0,0,0,0,891,1911,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,761,0,0,0,0,0,0,0,0,0,407,0, +183,0,0,490,0,0,0,0,0,0,0,35,731,0,0,0,0,0,0,0,819,0,0,0,0,0,0,0,0,0,0,0,0,0, +575,0,0,0,0,45,818,0,0,77,222,0,0,0,0,849,1880,0,0,0,633,0,1308,0,0,0,0,0,0,0,0, +0,0,86,0,0,0,0,0,0,0,0,0,0,0,0,0,0,817,0,0,0,0,0,0,0,0,0,882,0,0,0,914,0,0,0,0, +0,0,0,0,0,0,865,0,0,426,399,58,0,0,0,0,0,0,538,102,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,876,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,139,566,0,63,12,0,0,0, +0,0,0,0,0,0,0,0,0,0,3,114,0,0,0,0,0,0,0,0,576,0,0,0,0,0,0,0,0,933,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,692,0,0,0,0,0,0,0,0,0,0,0,0,752,0,0,0,0, +0,0,0,0,375,0,1011,0,0,96,0,0,0,0,0,0,0,0,0,148,0,0,0,0,0,0,0,0,0,0,0,337,56, +666,0,246,394,0,0,0,0,0,0,0,0,437,0,0,0,506,0,0,0,0,1003,0,1163,0,328,0,0,0,0,0, +0,0,0,1000,0,0,0,0,0,744,101,0,0,0,0,0,726,0,0,176,0,146,9,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,839,0,0,0,0,0,0,223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,246,1931,29,0,0,1771,0,0,0,0,0,846,6,157,0,0,0,0,0,0,0,0,0,875,0,0,477, +773,177,639,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1747,0,0,0,0,158,873,0,659,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,391,0,0,0,0,0,0,0,0,0,0,0,0,668,883,0,78,628,0,0,0, +0,0,0,0,0,0,0,0,0,1460,0,962,0,0,0,0,0,460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,199,0, +0,0,388,474,0,271,0,333,608,0,0,0,0,0,0,49,0,988,0,707,617,0,0,0,0,0,0,0,756,0, +0,0,0,0,1583,0,0,0,0,0,0,0,0,0,0,285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,344,0,0,0,0,0, +0,0,0,515,1709,0,0,0,0,0,0,0,0,404,0,0,0,0,500,0,0,0,0,0,0,0,0,0,68,216,0,0,0,0, +0,0,0,488,353,0,0,177,236,0,0,458,490,0,0,0,0,0,0,756,1504,0,757,0,1735,0,0,108, +598,0,0,0,0}; +BROTLI_INTERNAL const uint8_t kStaticDictionaryHashLengths[32768] = { +8,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,12,0,0,0,0,4,22,5,0, +4,0,0,0,0,0,0,0,0,0,0,0,0,14,6,0,0,0,5,0,0,0,0,0,0,0,7,13,0,0,4,0,0,0,0,0,0,0,0, +0,6,0,0,0,0,8,0,0,0,0,0,0,7,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,4,0,0,0,4, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,10,4,0,5,13,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,8,7,0,0,9,0,8,0,0,0,0,0,0,6,0, +0,9,0,0,0,11,0,0,6,8,7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,6,8,0,0,0,0,0, +0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,0,0,0,8,4,13,7,0,0,0,0,0, +7,0,5,0,0,0,0,8,5,0,5,0,0,8,7,0,0,0,0,0,0,0,0,0,0,9,0,0,0,8,0,0,0,10,4,0,5,0,4, +0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,8,7,0,4,9,4,0,0,0,0,0,0, +9,0,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,7,18,0,0,0,0,4,9,0,0,4,0,6,0,0,0,6,0,6,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,8,7,0,0,0, +0,9,0,0,0,0,0,0,0,8,6,10,6,0,0,0,4,0,6,8,6,0,0,0,4,0,0,0,0,0,5,0,0,0,6,0,0,0,0, +10,0,12,7,0,0,0,0,0,4,0,0,0,0,0,5,0,0,8,7,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0,0, +0,0,0,0,6,11,0,0,0,0,0,0,0,0,0,8,7,0,0,10,0,0,0,0,0,0,0,0,6,10,0,17,0,8,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,8,6,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +7,0,0,11,4,0,5,0,0,0,0,0,0,0,0,0,0,10,5,0,6,8,5,0,0,0,0,0,0,0,0,0,0,11,5,0,0,0, +0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,9,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,0,0,0,0, +0,0,0,0,0,0,5,0,0,0,6,0,0,10,0,0,0,20,0,0,0,0,0,0,0,0,6,9,5,0,0,0,0,10,4,8,0,0, +4,13,0,0,0,0,0,0,0,9,0,9,0,0,0,0,0,0,0,0,0,0,0,0,4,8,6,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,12,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,12,5,0,0,10,4,10,7,13, +0,0,0,0,0,0,0,0,6,0,6,0,6,0,0,0,0,0,0,19,0,0,4,12,6,9,0,0,0,0,4,0,4,11,0,0,0,0, +0,0,0,12,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0, +0,5,0,0,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,9,6,0,0,0,0,0,4,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0, +6,0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,6,0,0, +0,0,0,5,0,0,0,0,14,4,0,0,0,4,12,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,6,0, +0,0,0,0,0,12,0,9,6,0,0,0,0,13,0,0,5,0,0,0,0,0,4,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,13,0,9,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,8,7,8,4,0,0,0,0,0,0,0,0,0,0,0,7,0,7,0,0,0,4,0, +0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,8,4,0,0,0,0,0,6,0,7,0, +0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0,0,9,5,0,0, +0,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,9,4,0,0,0,0,0,0,0,4, +12,5,11,0,0,0,0,0,0,0,0,0,8,7,0,5,0,0,8,7,0,5,0,0,0,0,8,0,0,0,0,7,0,4,10,0,0,0, +0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +13,5,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,14,5,0,0,0,7,0,0,10,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,6,0,4,0,5,0,0,0,0,8,5,0,0,0,0,0,0,9,5,9,0,0,0,0,0,0,0,0,6,9,0, +0,4,0,0,0,7,0,0,0,6,0,0,10,4,0,0,0,0,0,6,0,0,10,0,0,0,8,5,0,0,0,0,0,0,0,0,10,0, +0,0,0,0,18,4,12,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,7,0,0,0, +0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,4,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, +0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,8,0,0,0,0,0,0,6,0,0,0,4,10,5,0,0,0,0,0,0,0,0,0,0, +0,4,8,7,0,0,8,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0, +0,0,0,8,6,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0, +0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,8,7,0,0,0,0,8,0,12,6,0,6,0,0,0,0,9,7,11,7,0,0,0, +0,0,0,0,0,0,0,0,0,11,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,10,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0, +0,0,0,6,0,0,0,7,0,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,14,0,0,0,0,0,8,4,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,20,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,12,5,0,7,0,5,0,0,10,0,0,7,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,6,0,4,9,7,0,0,0, +0,0,7,0,0,0,0,0,0,10,0,9,0,9,0,0,0,0,0,0,0,0,4,9,0,0,0,0,6,0,0,0,0,0,0,0,0,11,4, +0,6,0,0,0,0,0,0,8,0,8,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,13,6,0,0,11, +0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,6,18,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0, +0,5,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,0,0,9,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,11, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,0,0,8, +6,0,0,0,0,0,0,9,6,0,0,0,0,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0, +0,6,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,6,0,6,0,0,10,6,0,0,0,7,0,0,8,0,8,7,0, +0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0, +0,0,0,8,7,0,0,0,0,0,0,0,0,12,0,12,0,0,0,11,6,0,5,0,0,12,0,12,5,0,7,11,6,0,0,11, +0,0,0,12,0,0,4,12,7,8,6,0,0,0,0,8,5,0,0,0,0,0,0,0,4,11,0,0,6,0,7,0,0,0,0,0,0,0, +5,0,6,0,0,0,0,8,0,10,0,0,0,0,0,0,0,0,0,0,0,9,7,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, +0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,0,10,0,0,5,0,0,12,6,0,0,0,0,0,0,10,6,0,0,0,0,8, +6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,5,0,0,0,0,11,0,10,6,0,0,8,6,0,0,0,6,0,7,10,6,0, +0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,10,7,0,0,0,0, +10,6,0,0,0,0,0,0,8,5,11,0,8,4,0,0,0,4,0,0,0,0,9,4,8,0,0,0,0,0,0,0,11,6,0,0,0,0, +10,7,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,9,6,0,5,0,7,0,0,0,0,0,7,0,0,11,0,0, +0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +0,0,0,0,13,0,8,6,13,0,0,0,11,7,0,7,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,0,9,6,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,5,9,0,0,0,0,0,0,0,0,0,0,4,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,9,7,0,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0, +5,11,5,0,0,0,0,0,0,0,0,0,4,0,7,0,6,0,0,0,6,20,0,0,0,10,7,0,5,14,4,0,0,0,0,0,0,0, +0,0,6,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0, +0,0,6,0,4,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,11,6,15,0,0,0,0,0, +10,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,7,0,0,0,0,0,0,0,0,9,7,13,0,0,0,0,0, +0,7,0,0,8,6,0,0,0,0,0,0,0,0,9,4,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,5,0,0,0,0,0,0,0,0,0,0,0,0,8,5,0,4,0,0,0,0,0,0,0,0,0,0,12,6,8,0,12,0,0,7,0,0,0, +0,0,5,10,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7, +14,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,8,7,10,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,18,6, +14,7,0,0,0,0,0,0,0,0,11,6,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,11,7,0,0,10,7,0,0,0,6,8,6,0,0,0,0,0,0,0,6,0,0, +19,0,0,0,9,5,0,0,0,0,0,0,11,7,0,0,0,7,0,6,0,0,11,0,0,0,0,4,8,0,0,0,0,0,0,0,0,6, +0,0,0,0,0,6,0,0,8,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7, +0,7,0,0,0,7,15,0,0,5,0,0,0,0,10,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,7,0,0, +0,0,0,0,0,0,9,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +11,7,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0, +0,0,5,0,4,0,0,0,4,0,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0,11,6,0,0,8,5,14,0,0,4,0,0,0,7, +17,0,0,0,0,0,0,0,13,5,0,0,0,0,0,5,0,0,0,5,0,0,0,0,16,6,0,4,0,0,0,0,0,0,12,0,0,0, +0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,5,0,5,0,6,10,0,12,0,0,0,0,0,0,0,0,7,0,0,0,0,8,4, +0,0,0,0,0,0,0,0,0,0,8,7,0,0,8,0,0,0,8,0,0,6,0,7,0,0,0,5,0,6,0,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,22,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0, +0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,18,0,0,0,9,4,0,0,8,0,9,7,0,0,0,0,0,0,8,6,0,0,0,0, +0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9,7,0,0,0,6,0,0,14,0,0,0,0, +0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,7,10,4, +0,6,0,0,0,0,0,0,8,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,9,6,0,0,0,0,0,0, +0,0,11,6,12,7,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,0,9,6,11,6,0,0,0,0,9,5,0,0,0,0,0,0, +0,6,8,5,0,0,0,0,8,0,10,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9, +5,10,7,0,0,0,5,8,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,4,8,7,0,0,0,6,0,0, +0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,22, +0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,5,0,0,0,0,0,0,0, +0,0,0,0,0,17,0,0,6,0,6,12,4,19,6,0,0,0,0,16,0,0,0,0,7,15,7,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,4,10,4,0,0,8,7,0,7,0,0,9, +4,0,6,0,0,0,4,0,5,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,10,0,0,0,0,0,11,7,0,0, +0,0,12,6,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8, +0,0,0,0,0,0,0,0,0,10,4,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,8,7,0,0, +0,0,0,0,0,6,0,0,0,4,0,0,11,4,0,0,12,7,0,0,0,0,9,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0, +4,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,9,4,0,6,0,0,0,0,0,4, +0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,7,9,6,0,7,0, +0,0,0,0,0,0,6,0,0,0,0,8,6,0,0,0,0,10,6,11,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,5,0,4,8,0,0,0,0,0,9,7,0,0,0,0,0,0, +13,5,0,0,0,0,8,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,5,0,0,11,7,0,0,0,0,0,0,8,6,0, +0,0,0,0,7,0,4,0,0,0,0,0,0,0,5,0,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,10,4,9,0,0,0,0,0, +0,4,0,0,0,0,10,5,10,7,0,0,0,0,0,0,0,0,16,7,0,0,0,0,0,7,0,0,0,0,11,0,0,0,0,0,0,0, +0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,4,0,0,0,7,0,0,0,0,0,0,13,0,0, +0,0,0,0,0,0,0,0,7,0,4,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,13,7,0,7,0,4,16,0,0,0,0,6,8,7,9,7,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0, +0,6,0,0,8,5,0,4,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,11,7,0,0,11, +0,0,0,0,0,9,5,0,4,0,0,0,0,9,7,8,6,0,0,0,0,0,0,10,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0, +0,7,0,0,0,0,0,0,0,0,0,0,0,4,10,6,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,0,10,7,10,0,0,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,6,8,7,12,4,0,0,0,0,0,0,0,5,14, +0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0, +6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,20,4,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,0, +0,6,15,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,12,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,5,0,0,0,0,0,0,8,6,0,0,18,0,0,0,10,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,9,6,0, +6,0,0,0,0,0,0,0,0,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,9,0,9,0,0,4, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,9,5,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,7,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,0,8,0,0,0,16,0,0,0,0,0,0,0, +0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,0,0,0,11,0,0,0,0,0,0,0,0,0,0, +6,0,0,0,0,11,0,0,0,9,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,7,0,7,0,6, +0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6, +0,0,0,0,0,0,0,6,0,0,18,0,8,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,7,0,4,0,0,0, +0,0,0,0,0,0,0,8,0,0,0,0,0,16,0,0,0,0,0,16,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,18,0,0,0,0,0,0,0,0,0,9,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,4,0, +0,0,0,0,0,0,0,9,4,0,0,0,0,12,5,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,5,0,0,0,0,0,0,0,5,0,0,10,6,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,9,0,0,0,11,0,0,6,0,6,0,0, +0,7,0,0,0,0,0,0,8,0,0,0,0,6,0,0,0,0,0,0,19,0,0,0,12,0,9,0,0,0,0,0,10,7,0,0,0,0, +0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,16,7,12, +0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,10,5,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,4,0,0,9,0,0,0,8,0,12,4,0,0,0,0, +0,4,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,5,0, +0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,8,6,0,6,0,0,0,0,0,0, +0,4,0,0,0,0,0,6,0,0,9,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,10,6,0,0,0,0,8, +6,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,7,0,6, +10,7,0,0,10,5,11,6,0,0,0,0,0,7,16,0,0,0,0,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0, +0,0,0,0,0,8,7,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +8,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,12,7,0,7,0,0,0, +0,0,0,0,6,0,0,0,0,9,0,0,0,23,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,4,0,0,11,7,10,0,0, +0,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,7,0,0,8,7,8,0,0,0,0,0,0,0,0,0,0,0,14,5,0,0,0,0, +0,0,0,0,18,6,8,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,11,0,0,0,9,7,12,6,0,0,0,0,0,0,0,0, +0,0,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,7,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,6,8,7,0,0,0,6,10,0,0,0,9,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,6, +10,7,0,0,0,7,0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0, +0,0,0,8,7,8,6,0,0,11,7,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,4,8,7,0,0,0,0,0,0,0,0, +0,5,0,0,13,0,0,0,0,5,0,0,9,7,0,0,0,0,0,0,0,4,0,0,11,0,0,7,0,0,0,0,0,0,0,0,0,6,0, +0,0,0,0,0,12,7,19,0,8,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,10,6,8,0,0,0,0,0,0,0,0,0,0, +6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,7,0,0,12,0,0,0,0,6,9,6, +14,0,0,0,0,0,0,6,0,5,0,0,8,7,0,0,0,6,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,4,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0, +7,0,0,10,0,9,7,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,0,0,0,0,5,0,6,0,0,0,0, +0,0,0,0,0,0,0,6,0,0,0,0,9,7,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0,0,11,7,0,0,13,7, +0,0,0,0,0,0,0,0,12,0,0,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,11,5,0,5,13,0,8,0, +0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,11,5, +9,6,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,10,0,0,0,8,5,0,0,9,0,0,0,8,7,9,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,0, +0,11,0,13,6,0,0,9,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0, +0,0,0,0,0,5,21,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,5,0,0,0,0,0,0,0,0,10,0,8,0, +0,6,0,0,0,4,0,0,9,0,0,0,0,0,0,0,0,0,0,4,0,0,8,6,0,6,0,7,10,0,8,4,0,4,0,0,0,0,0, +5,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,6,12,0,0,7,0,0,0,5,0,0, +0,0,0,0,0,0,0,6,0,0,8,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +15,7,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,24,7,0,0,0,0,0,0,0,0,0, +7,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,4,12,0,0,7,0,0,0,0,0,5,0,0,0,0,0,0,0,0,15,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,8,0,0,0, +0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,9,0,9,6, +0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,8,4,0,7,0,0,0,0,0,0,0,0, +22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,7,0,0,21,7,0,7,9,6,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,8,0,0,6, +0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,23,0,0,0,0,7,0,0,0, +4,0,0,0,0,0,0,0,0,9,4,11,7,0,5,0,0,0,0,11,0,0,4,20,0,0,0,0,0,0,0,0,0,0,0,11,5,0, +7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +21,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,11,6,0,0,0,0,0,0,0,0,9,6,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,5,0,4,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0, +0,0,0,10,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,7,0,0,11,7,0,0,0,0,0,0,0,4, +0,4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,7,0, +0,0,0,0,0,0,0,0,6,0,0,21,6,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,14,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,8,0,0,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0, +0,0,0,8,7,0,0,11,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,7,13,7,10,4,0, +0,0,6,0,0,0,0,0,0,0,0,0,5,10,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0,0,8,4,0,0,0,0,0,6, +0,0,0,0,0,0,0,0,0,0,12,7,0,6,0,0,10,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0, +0,0,0,0,7,0,0,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,10,5,0,6,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,0,4,0,0,0,0,9,0,11,4,0,0,0,6,0,0,0,5,12,7,0,5,0,0,0,0,0,4,0,0,0,7,0,0,0, +0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,13,6,10,0,0,0,17,0,0,4,0,0,0,0,0,6,0,4,0,5,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,11,7,0,0,0,7,0,0,0,6,0,0,0,0,0,0, +0,6,0,4,0,0,0,0,8,0,0,0,0,5,0,0,0,0,0,4,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,9,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,0,0, +0,0,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,16,4,0,0,11,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +8,7,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,8,6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10, +7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,12,5,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0, +5,18,7,0,0,14,0,0,0,0,0,0,0,9,4,0,7,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,0,0,0, +8,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,7,0,0,0,0,0,0,11,0,0,0, +10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +11,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,14,6,0,0,0,0,11,4,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,10,7,0,6,0,0,9,0,9,5,0,0,0,0,0, +0,0,0,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,8,5,0,0,0,0,0,0,0,0,0,0,11,4,0,6, +0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,12,4,0,6,8,6,0,0,0,0,0,0,0,0,0,0,8,0,0,5,0,0,0,0,0,0,0,7,0,0,13,0,0,0,0,0,0,0, +0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,12,7,0,6,0,0,0, +0,0,0,0,0,0,0,0,0,13,4,0,7,0,0,0,7,0,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,0,0,0, +9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,10,6,21,5,0,0,0,0,8,0,0,0,0,4,0, +7,0,0,0,0,0,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,0,0,0,0, +0,7,9,6,11,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,7,10,0,0,0,0,0,0,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,19,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,9,4,10,4,0,7,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,9,7,9,7,10,4,0,7,0,0,0,0,0,0,0,6,12,0, +0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, +0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,8,0, +0,0,0,0,0,5,0,0,8,7,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0, +0,0,0,0,4,0,0,8,0,0,6,0,0,0,7,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,7,9,7,0,0,0,4,8,0,0,0,0,6,11,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,13,4,0,0, +12,6,0,6,0,0,0,0,8,7,0,7,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,4,0,0,0,0,0,0,0,0,0,0,9, +7,22,0,0,0,0,4,0,0,0,0,0,6,0,0,0,4,0,0,9,0,0,6,0,0,24,7,0,7,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,10,6,0,5,0,0,0,0,0,0,0,7,0,0,8,0,0,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,7,0, +7,0,0,0,0,0,0,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0, +0,0,0,0,0,7,12,0,9,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,4,0,0,0,7,0, +0,0,0,8,7,0,0,0,0,0,0,0,0,0,4,18,0,0,0,0,0,10,0,0,5,0,0,11,0,0,0,0,0,0,5,0,6,0, +0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0, +4,0,0,0,0,0,0,10,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0, +0,0,0,5,8,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,20,7,0,0,0,0,0,0,0,0,0,0,0,4,9,0,12, +6,8,0,14,7,0,5,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,10,0,0, +0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,9,6,0,7,12,0,0,0,0,4, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7, +0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,0,9,0, +12,6,0,5,0,0,0,6,0,4,0,6,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0,0,8,0,0,0,0,4,0,0,0,0, +10,0,0,0,0,0,0,0,8,6,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0, +6,0,0,12,6,20,5,0,0,0,0,0,0,0,0,0,0,0,0,9,5,0,5,0,0,0,6,13,7,0,0,0,0,15,6,0,0,0, +6,0,0,13,7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0, +10,6,0,0,0,0,0,6,0,0,0,0,9,0,0,0,0,0,19,6,0,0,0,0,0,0,0,0,0,0,13,0,11,0,0,0,0,0, +0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,10,0,0,6,0,0,0,0,8,0,0, +0,9,0,15,4,0,6,0,0,0,0,0,6,12,0,0,0,0,0,0,0,14,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, +0,0,0,0,0,8,7,0,0,0,0,0,6,10,0,0,0,0,0,0,0,0,7,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,10,5,0,0,0,0,8,0,0,0,0,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,6,12,0,0,0,10,7,0,5,0,6,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,6,0,4,0,0,0,0,0,7,0,0,0,0,0,0,0,4,9,6,0,0,0,7,0,0,0,0,0,0,0,0,8,6,0,0, +0,0,0,0,0,4,12,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,7,0, +0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,6,0,6,9,4,0,0,8,4,0,6, +0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,8,0,0,6,13,4,0,5,8,0,0,0,0,0,0,0,8,0,0,0,10,5,0,0,9,0,0,0,0,0,0,6,0,0, +24,0,0,0,0,0,0,0,8,0,0,7,0,0,12,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0, +6,8,0,10,0,9,7,0,0,0,5,0,0,0,0,0,0,0,4,8,5,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,4,0,0,0,0,0,6,0,0,0,0,0,5,0,0,0,0,8,0,0, +0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,10,4,0,0,0,0,0,0,0,6,0,0,0,4,20,0,0,7, +10,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,9,6,0,0,0,0,0,0,0,4, +12,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,9,4,0,5,0,0, +0,0,0,0,0,6,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,6,9,0,0,0,0,7,0,0,0,0,0,6,0,5,0,0,0,0,0,0,0,0,9,0,0,0, +0,6,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,17,7,0,0,13,6,14,6,0,0,0,0, +8,0,0,0,0,0,0,7,12,7,8,7,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,4,0,0,0,0,0,4,0, +0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,12,4,0,0,10,7,0,0,0, +0,0,0,10,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,12,0,0,6, +0,0,0,0,0,0,0,0,8,7,12,0,0,0,0,0,0,6,0,6,0,4,0,0,18,6,0,0,0,6,0,0,0,0,0,6,10,6, +0,0,0,0,0,0,8,7,14,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19, +0,0,0,8,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,8,7,0,0,10,5,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, +0,0,9,4,8,0,0,0,0,0,0,4,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0, +0,6,0,0,9,7,0,0,0,0,0,5,0,0,0,0,8,7,0,0,14,0,0,0,0,6,0,0,0,0,0,0,9,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,5,0,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0, +0,0,0,6,0,0,0,6,0,4,0,0,0,0,0,4,0,0,0,0,12,0,0,7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0, +0,12,0,16,6,0,0,0,0,0,0,11,7,0,4,8,7,0,0,0,0,0,6,0,0,0,0,16,0,0,0,0,6,0,0,0,0,0, +0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,10,7,0,0,0,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0, +0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,13,4,0,0,10,0,0,0,0,0,0,0,0,0,19,0,0,0, +0,0,0,0,0,0,0,0,0,0,8,6,22,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0, +5,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,18,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,14,7,0,0,11,5,0,0,0,5,0,0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,24,6,0,0, +0,7,0,4,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,7,0,4,0,0,0,0,8,7,0,0, +9,6,0,0,14,5,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,12,6,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,5,0,0, +0,0,12,7,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,6,0,0,13,7,0,0,0,0,0,0,14,0,11,4,0, +0,0,4,0,0,0,0,14,5,0,0,0,0,0,5,11,5,0,0,0,0,22,5,0,0,0,0,0,7,0,0,0,0,0,4,0,0,0, +4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,17,0,10,0,0,0,8,0,0,0,19, +5,18,7,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,10,6,0,6,0,0,0,0,10,4,0,4,0, +0,0,0,0,0,14,7,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,0,9,6,12,0,0,6,0,0,0,0,0,0,0,0, +12,0,10,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,13,0,9,7,0,0,0,0,0,0,0,0,0,0,0,7,9,7,0,0,8,0,0,0,0,0, +22,0,0,0,0,0,0,0,23,6,14,0,0,0,0,0,0,7,0,0,0,0,11,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0, +0,0,10,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,8,5,0,0,0,0,0,0,0,0,0,7,11,6,21,0,0,0,0,0, +0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0, +0,0,0,0,0,0,0,4,9,7,0,0,0,0,0,0,12,0,0,0,0,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,9, +0,0,0,20,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,11,7,0,0,0,0,0,0,0,6,15,0,0, +0,0,0,0,0,0,0,0,0,0,0,12,4,0,5,0,0,0,0,0,0,11,7,17,6,0,0,0,0,0,0,15,6,0,7,0,0,0, +0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,6,0,5, +0,0,11,0,11,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0, +17,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,8,7,9,6,0,0,14,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0, +8,7,0,4,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0, +0,0,0,5,0,4,0,0,8,7,0,6,12,5,0,7,18,7,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0, +10,0,11,0,0,0,0,0,0,0,0,0,0,0,9,0,0,4,0,6,0,7,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0, +7,0,0,0,0,8,0,0,0,15,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,0, +0,0,6,0,0,0,0,23,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,5,0,0,0,0,0,0,8,6,0,0, +0,0,0,0,12,7,9,7,0,0,10,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,9,0,8,7,0,0,0, +6,0,6,0,4,0,5,0,0,0,0,0,5,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,7,10,5,0,0,11,6,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,4,9,7,0, +0,0,0,11,7,0,0,0,0,0,5,0,0,0,7,0,0,0,0,23,6,11,4,0,0,0,0,0,0,9,0,0,0,10,6,0,0,0, +0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,10,6,0,0,0,7,0,0, +0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13, +6,11,7,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0,6,0,0,0,5,0,6,0,6,0,0,0,0,0,0,0,0,0,0, +0,6,0,0,0,0,8,7,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,4,10,0,8,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,10,6,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0, +0,0,0,0,0,0,10,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,11,6,0,4,0,0,14,5,0,7,0,0,0,0,0,6,16,0,0,0,0,0,0,0,10,0,0,7,15,0,0,0,11,7,0,0, +0,0,0,0,0,0,0,0,8,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,5,0,0,0, +0,8,0,0,6,0,0,0,0,0,0,9,5,0,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,6,0, +0,0,0,0,0,0,7,0,0,0,0,15,7,0,0,0,0,8,0,0,0,14,0,0,0,0,0,0,0,16,7,0,0,0,0,0,7,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,12,6,11,7, +9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13, +7,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,12,0,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,8,0,0,5,8,7,10,6,0,0,0,7,0,0,0,0,12,6, +0,0,9,0,0,0,12,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,10,0,0,0,10,5,0,0,0,0,0,0,9,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,0,0,9,5,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,9,0,0,5,0,0,8,7,8, +6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,10,0,9,4,0,0,0,0,0,0,0,6, +11,0,0,0,0,0,0,0,0,0,0,0,8,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,8,7,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, +0,0,0,10,0,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0, +0,0,8,4,0,5,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,8,5,0,0,0, +0,0,0,0,7,0,0,0,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,6,0,7,0,0,0,0, +20,0,0,0,0,0,0,0,0,0,0,7,9,0,0,0,0,0,0,6,0,6,0,7,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,14,7,0,0,0,5,0,0,22,4,10,0,0,0,0,0,0,4,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,11,5,13,0,0,0,0,0,0,0,0,0,8,0,0,7,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,10,7,0, +0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,7,14,6,0,0,0,0,9,5, +0,0,0,0,0,6,0,0,0,5,10,0,8,6,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,8,4,0,6,0, +0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7, +14,0,0,5,0,0,18,0,8,4,0,6,0,0,20,0,13,0,0,0,0,7,0,4,0,0,0,0,0,4,8,4,0,0,0,0,0,6, +0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,14,0,0,0,0,0,9,7,0,0,9,0,0,0,0, +0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,20,0,14,0,0,4,0,6,8,5,0,0,0,0,0,7,0,0,0,0,0,0, +0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,4,12,7,0,6,0,0,9,7,10,5, +0,0,8,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,18,0,0,0,14,7,0,0,0,0,0,4, +0,0,0,0,0,0,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0, +0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,8,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,7,0,0,0,0,0, +7,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,5,0, +0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,23,0,0,7,0,0,0,0,0,0, +0,0,0,0,0,0,0,4,0,0,0,0,0,0,12,7,8,4,0,0,0,0,0,0,0,0,0,6,0,0,9,5,0,0,0,7,0,0,0, +0,0,0,0,0,0,4,10,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,0,0,18,7, +0,0,8,0,0,5,0,0,10,0,0,0,0,0,0,6,0,0,0,0,0,5,0,7,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0, +6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,0,10,0,0,5,10,4,0,0,12,0,0,0,0, +6,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,7,0,5,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,6,0,7,0,0,0,6,0,6,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, +0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,16,6,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,12,7,0,0,0,0,9,0,0,0,0,6,0,0,11,0,0,0,0,0,13,0,9,6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,10,7,0,0,0,7,0,6,0, +0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,11,0,15,0,22,7,0,4,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0, +18,0,0,0,0,0,0,0,0,0,14,0,0,4,0,0,0,0,8,7,9,0,0,0,0,0,9,0,0,0,14,0,0,0,0,0,0,0, +0,0,11,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,7,0,0,0,6,0,6,0,0,0,0,8,0,0,0,0, +0,11,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,9,4,0,0,0,0,0,4,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,8,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0, +0,0,0,0,0,0,8,6,0,0,9,5,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,5,0, +0,10,6,9,0,0,0,0,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0, +11,7,12,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,4,0,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0, +0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,5,0,0,10,6, +0,0,0,4,0,7,13,0,0,4,0,0,11,4,0,6,0,0,0,0,0,6,8,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,5,0,0,0,0,12,6,0,0,0,0, +11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,11,5,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8, +7,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,6,17,0,9,0,10,6,0,6,12,0,0,4,0,0,0, +0,0,0,0,0,0,0,8,5,12,7,0,4,0,0,0,0,0,0,0,0,0,0,11,0,9,0,10,6,11,5,0,7,0,0,8,0,0, +7,0,4,0,0,0,7,0,0,0,0,0,0,8,6,0,0,0,6,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,6,0, +0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,11,0,0,0,0,6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,10,0,0,0,0,0,8,6,0,0,0,0,0,6,12,0,0,0,0,0, +0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,6,0,0,16,0,11,5,0,0,0,0,0, +0,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,9,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,6,10, +7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,0,9,5,0,0,0,0,8,0,9,0,0, +0,0,0,0,0,0,7,10,0,13,0,0,6,0,0,0,0,0,0,0,0,0,6,9,4,0,0,0,0,0,0,10,0,0,0,0,0,10, +0,0,0,0,0,0,0,10,6,11,0,0,0,0,0,9,0,0,0,0,0,0,4,0,0,0,0,0,0,10,5,0,0,0,0,0,6,0, +0,0,0,0,0,18,4,0,7,0,0,0,0,0,0,24,0,8,6,0,7,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0, +0,8,5,0,0,0,0,10,7,0,6,0,0,0,0,0,0,0,0,8,5,10,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0, +6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,4,0,5,15,0,0,0,0,7,0,7,0,0,0,0, +0,0,0,0,0,6,10,5,0,0,0,6,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,12,0,0,0,0,0,0,0,0, +0,0,5,0,0,0,0,0,0,14,4,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,11,0,10,4,9,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,7,0,0,0, +0,0,0,0,0,0,0,0,7,13,7,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0, +0,0,0,0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,8,0,10,6,0,4,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0, +0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,9,7,0,0,0,0,0,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,0,6,0,0,0, +0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0,0,5,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,11,0,0,0,0,6,0,0,0,0,0,0,0,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0, +6,0,0,0,0,0,0,0,6,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0, +0,0,0,0,0,0,0,6,0,6,0,0,0,5,0,0,0,0,0,0,0,5,0,0,10,0,11,5,0,0,0,0,0,0,14,7,9,7, +0,6,0,0,0,0,0,4,0,0,0,0,0,0,11,7,0,6,0,0,0,0,0,0,9,7,0,4,0,0,0,7,0,0,0,0,0,5,0, +0,0,0,0,5,0,0,0,7,0,0,0,0,0,5,0,0,0,0,17,5,0,0,8,0,0,0,0,6,9,4,0,0,0,0,0,0,0,0, +8,7,11,7,9,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,6,9,5,0,0,8,6,0,0,0,5,0, +0,0,0,9,0,0,0,9,6,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,4,0,0,0,5,0,0,0,0,0,7,0,0,0,0,0,7,13,5,0,0,0,7,0,0,0,0,0,7,9,6,11,7,0,7,0,0,0, +0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,8,5,0,0,0,5,9,4,0,0,0,0,0,0,0,0,8,4,0,0,0,0, +24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0, +0,0,0,0,6,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,5,11,6,0,4,0,7,20,0,8,5,9,5,9,0,0,6, +0,0,0,0,0,0,0,0,0,0,0,7,23,5,0,0,8,4,0,0,10,0,0,6,0,5,0,0,0,0,0,0,0,0,0,0,0,7,0, +0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,0,0,0, +10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0, +6,0,0,0,0,14,0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,6,0,4,0,0,0,0,0,0,8,4, +11,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,12,0,10,7,0,0,10,0,0,0,0, +0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,6,0,0,0,0,8, +6,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,0,6,0,4,0,0,0,0,0,5,0,0, +0,0,0,0,0,0,0,7,0,0,0,7,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,17,7,11,0,0,0,0,0,0,0,0,0,0,4,12,6,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0, +0,5,12,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,6,0,0,20,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,4, +0,0,0,5,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,6,0,4,13,0,0,7,0,0,0,0,0,0, +0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,12,6,0,7,0,0,0,0,10,0,23,6,0,0, +0,4,0,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +10,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,11,0,9,7,0,0, +0,0,0,0,0,0,0,0,9,7,0,4,0,0,0,0,8,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +0,0,0,0,0,6,0,0,10,7,10,5,0,0,8,0,8,0,0,0,0,0,0,4,0,5,10,0,0,0,0,0,0,0,9,0,0,6, +0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,11,7,0,0,0,0,0,0,0,0,9,4,0,0,0,0,0,6,0,0,8, +7,0,0,0,0,0,5,0,0,0,0,0,0,0,0,10,0,0,0,0,5,0,4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,24,7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,6,0,0,9,0,0,0,0,0,0,7,0,6,13,0,8, +0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,6,0,0,0,0,8,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0, +4,0,0,0,0,0,4,0,0,0,0,0,0,0,6,8,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0,0,5,0,7,0,0,10,0,10,7,0,0,12,5,0,0,9,0,0,0,10,0, +0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0, +12,0,0,0,0,0,8,5,13,6,0,0,0,0,0,0,9,4,0,0,0,0,8,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0, +0,0,6,0,0,14,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,17,6,0,0,0,0,12,6,0,0,0,0,8,0,0,7,0, +7,0,4,9,0,0,6,0,0,0,6,0,0,0,0,0,0,8,7,0,0,0,0,0,0,11,0,0,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,18,7,0,4,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,0,0, +0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,8,0,11,7,0,0,0,0,0,0,0,0,0,4,0,0,0,0, +11,0,0,0,0,0,0,0,21,0,0,6,10,0,0,0,0,0,9,0,10,0,0,0,0,0,11,0,0,0,0,6,0,0,0,0,0, +5,0,0,0,0,0,0,10,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,4,0,0,23,7,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,9,7,0,0,0,7, +0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,6,0,0, +11,6,0,0,0,0,0,0,0,6,0,0,0,0,10,7,0,0,9,4,0,0,11,0,8,5,0,0,0,7,8,5,22,0,0,0,9,6, +0,0,0,0,0,0,0,6,10,4,0,0,0,0,0,7,9,4,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0, +0,0,0,11,6,0,0,0,0,0,0,0,0,0,0,0,7,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0,6,0,6,0,4,0,0, +0,0,0,0,0,7,0,7,0,4,13,0,0,0,0,0,8,0,0,0,0,7,0,0,0,0,0,0,11,6,0,7,0,0,0,0,9,0,0, +0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,8,0,0,0,0,0,8,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,6,0,0,0,0,13,5,8,0,0, +0,0,0,0,0,14,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,17,6,0,0,0,0,13,4,0,0,9,6,0,0,10,5,0, +0,10,5,0,0,0,0,13,0,0,0,0,6,0,0,0,0,0,0,10,0,12,0,0,0,0,0,0,0,0,0,0,0,8,4,0,4,0, +0,0,4,0,0,0,0,0,4,0,0,12,0,0,5,9,4,0,0,0,0,0,0,0,0,0,5,8,5,0,0,0,7,0,0,0,0,8,7, +0,0,0,6,12,5,0,0,0,5,0,0,0,5,0,0,0,0,0,4,12,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,7,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0, +0,9,6,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,4,11,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0, +0,0,0,0,12,7,0,0,0,7,10,7,0,0,11,0,0,0,0,0,0,0,0,0,11,7,0,0,0,6,0,0,11,0,0,0,0, +0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,22,0,10,7,0,0,8,5,0,0,0,0,0,5,0,0,0,0,0,0, +0,0,0,0,9,6,8,7,0,6,0,0,0,0,0,5,0,0,0,0,0,0,8,7,0,0,0,0,9,7,0,0,0,6,0,0,8,7,0,0, +0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,5,0,0,0,4,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9, +6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,5,0,0,0,0,14,0,0,0, +9,0,0,0,0,0,0,0,0,0,9,7,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,12,0,0,0,0,0,12,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,10,7,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,6,0,0,0,0,0,0,9,6,0,0,0,0,0,6,0,0,0,0,0, +0,0,0,0,0,9,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, +0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,6,0,7,12,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0, +0,7,0,0,8,6,0,0,0,0,10,7,0,0,0,0,0,0,0,6,0,0,0,0,0,6,12,0,0,0,0,0,0,0,0,6,0,0,0, +0,0,6,0,0,0,6,0,0,0,0,0,6,16,0,0,0,0,0,0,0,0,0,9,0,17,0,14,7,8,0,0,0,0,0,0,6,0, +0,0,0,0,0,0,0,0,0,11,0,0,6,8,7,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0, +9,0,0,0,0,7,0,0,0,0,11,5,0,4,9,6,8,0,0,0,0,0,0,0,0,0,10,0,11,7,0,0,0,0,0,0,0,0, +9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11, +0,0,0,12,0,0,0,0,0,10,5,0,4,0,0,0,0,0,7,10,6,11,6,0,0,0,0,0,0,0,0,0,0,0,0,17,0, +0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,8,0,0,4,0,0,0,6,0,0,0, +0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,4,0,0,0,0,9,6,0,0,0,4,0,0,0,0,0,4,10,7,0,7,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0, +0,0,0,0,0,0,6,0,0,0,6,0,6,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,18,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,13,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4, +0,0,0,6,0,0,0,0,0,4,8,0,0,0,11,7,0,0,0,4,0,0,0,0,0,7,0,0,8,5,0,0,16,0,0,0,13,6, +0,0,0,0,0,0,0,6,0,0,0,0,20,0,11,6,0,0,8,7,0,0,0,0,0,6,17,0,8,0,0,0,0,0,8,7,0,0, +9,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0, +0,0,4,0,7,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,8, +0,8,0,0,0,0,0,0,0,11,0,8,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,6,0,0,9,0, +0,0,0,0,8,0,0,0,0,0,18,0,0,0,0,0,0,4,9,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,9,6,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,7,0,0,0,0,0,0,0,0, +0,4,0,0,0,0,0,0,14,0,0,0,0,7,0,6,0,0,8,0,20,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,8,0,0,0,14,0,0,0,0,0,0,0,8,0,0,7,0,6,0,0,0,7,0,0,0,0,0,0,0,0, +0,0,0,4,12,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,10,6,0, +5,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0, +0,0,0,5,8,4,0,0,0,0,0,0,0,4,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,12,7,0, +0,0,0,13,6,0,0,0,7,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,0,0,0,0,0,0,11,5, +0,6,0,0,8,5,0,7,0,0,0,0,0,0,0,7,0,0,0,0,8,6,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,4,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +14,0,10,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,19,0,0,4,0,0,0,7, +0,0,11,5,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,16,0,10,5,18,0,0,7,9,6,0,5,0,0,0,0,0, +0,0,0,0,5,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,5,0,0,0,7,0,6,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,4,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,23,0,0,0,0,5,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,14,0,20,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0, +11,0,0,0,0,7,0,0,0,0,15,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,7,0,0,0,0, +0,4,0,0,0,0,10,0,0,0,0,0,9,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,10,0,11,6,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,5,0,0,11,0,0,0,0,7,0,0,0,0,0,0,8,7,0, +4,0,0,0,0,11,0,0,0,0,0,11,0,0,5,0,0,8,7,0,4,0,7,0,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,10,5,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,6,0,5,0,0,0,0,0,0,0, +0,0,4,11,5,10,7,0,7,0,0,9,6,9,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,9,4,0,4, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,8,6,0,0,0,0,11,7,0,0,0,0,0,0,0,0,0,0,11,7,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,8,5,0,0,8,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0, +10,7,0,0,0,6,0,0,0,0,0,0,8,0,0,6,0,0,0,6,10,0,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,6,0, +0,0,6,0,0,0,0,9,5,8,5,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0, +0,8,7,10,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,0,5,0,0,0,6,0,7,0,0, +10,5,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,11,0,0,0,0,0,13,4, +0,0,0,4,0,0,0,0,0,5,8,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,7,14,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,7,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,5,0,0,15,6,10,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,14,6,10,0,0,0,0,0,0,0,0,6,0, +0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,6,0,5,11,4,0,6,0,0,0,7,0,0,0,0, +0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,5,0,0,8,5,0,0,0,0,0,0,0,0,0,0, +0,0,10,0,0,0,0,0,9,6,9,4,0,0,0,4,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,5,0, +0,0,0,0,0,0,0,0,0,0,4,0,0,11,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0, +0,0,0,7,12,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0, +4,9,6,0,4,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,6,0, +7,8,6,0,0,0,0,0,0,0,4,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,5,0,4,0,0,0,0,0,0,0,5,0,0,0, +0,0,5,0,0,0,7,12,7,0,0,0,0,0,0,18,4,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,6,0,0,0, +0,12,0,0,7,0,0,0,0,0,7,0,0,13,0,0,6,0,0,0,0,8,7,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,7,10,5,0,0,8,0,0,0,0,0,0,0,8,6,0,7,0,0,8,4,0,4,0,0,0,0,10,4,0,0,14,0, +0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,17,0,0,0,0,0,0,6,0,0,0,0,8,6,0,0,10,5,0,0,0,0,8, +6,0,0,0,6,0,0,0,7,0,0,0,0,0,6,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,12,0,0,0,0,6, +8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, +0,0,0,6,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,4,24,0,0, +0,0,0,12,6,0,0,10,6,0,5,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,17,7,0,5,0,0,0, +0,0,0,0,0,0,0,0,0,0,6,11,5,9,0,8,7,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,10,7,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,5,8,7,0,0,0, +0,8,5,0,0,0,0,10,7,0,7,0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0, +0,6,12,0,8,7,0,0,0,0,0,0,0,0,0,0,16,0,10,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,22,0,0,0, +0,0,0,0,0,0,0,0,0,0,13,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,22,0,0,6,0,0,21,0,0,0,22,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,7,8,0,0,0,0,6,14,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,0,0,0,0,0,0, +0,0,0,0,0,6,0,0,0,0,8,5,0,0,11,7,0,6,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0, +6,0,0,0,5,0,0,0,0,0,0,0,0,0,4,0,0,8,7,0,0,0,0,8,5,11,7,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,8,5,0,0,10,0,0,4,13,7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,0,13,6, +0,6,0,7,0,0,8,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,15,0,0,0,10,7,0,0,0,0,0, +7,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,19,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,6,0,5, +0,7,0,0,0,0,0,0,0,0,0,6,0,0,11,4,0,0,0,6,0,0,13,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,12,6,0,0,0,0, +0,7,0,0,0,0,0,0,11,7,0,0,0,0,0,6,0,0,10,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,11,6, +0,0,0,0,0,0,0,0,10,0,0,0,0,6,0,0,0,0,0,0,8,7,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0, +0,0,0,8,7,0,0,0,0,9,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,10,0, +0,6,0,0,13,0,0,0,0,0,0,0,9,6,0,0,8,6,8,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0, +0,9,7,0,0,0,0,0,0,11,0,0,0,10,7,0,0,0,0,0,0,0,0,9,6,0,0,12,4,0,4,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,6,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,5,0,0, +9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0, +16,0,0,4,0,0,0,0,0,7,0,0,0,6,0,6,0,0,11,0,0,0,0,5,0,0,0,0,0,0,0,4,8,5,0,0,0,0,0, +0,14,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0, +0,0,8,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, +0,0,0,0,6,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,14,7,0,0,9,7,0,0,11,0,0,0,0,0,10, +4,11,5,13,6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,5,0,0,0,0,0,4,0,0,9,0,0,0,0, +0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,6,12,5,0,0,0,6,14,0,0,0,0,0,0,0,0,0,0,4,9,4, +0,0,0,0,0,5,0,0,0,0,0,0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0, +0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,11,6,0,0,13,7,0,0,13,6,0,7,0,0,0,0,0,0,8,6,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,10,6,0,4,0,0,12,6,0,0,0,0,0,0,0,0,10,6, +0,0,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,6,0, +0,0,0,0,7,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,6,0, +0,0,7,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0, +0,0,0,5,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0, +0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,8,7,0,0,8,5,0,0,0,4,9,5,0,0,0,7,10,6,0,0, +0,0,0,0,9,7,0,0,8,5,8,0,8,4,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,5,0,5,0,0,0,0,0,0,0, +0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,4,0,0,0,0,0,0,0,0,0, +0,11,7,0,0,0,7,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,5,0,0,0,7,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9,7,0,0,0,0,8,5,0,4,0,0,0,0,0,6,0,6,14, +6,0,0,0,0,9,6,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,6,0,0,0,0,14,7,9,7,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,16, +0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,14,0, +0,6,0,0,8,6,0,0,0,0,0,6,0,0,12,0,0,0,0,0,8,5,0,7,11,0,0,5,0,4,0,0,0,6,0,0,0,0,0, +0,0,0,0,0,0,0,9,6,0,4,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,10,5,0,0,0,0, +0,4,0,0,0,7,11,6,0,4,8,5,9,5,0,0,0,5,0,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,8,5,14,7,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,16,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,9,6,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,9,0,0,0,12,5,0,0,0,0,0,0,0,4,10,5,0,0,0,0,0,0,0,0,0,0,0,6,0, +0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,4,0,0,0,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,10,4,0,0,0,0,0,5,0,0,0,4, +0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,0,10,7,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,7,0,0,0,0,0,0,0,0,15,0,0,0, +0,0,0,0,0,0,0,7,0,0,0,0,0,7,10,7,9,7,0,0,0,7,0,0,8,0,0,0,0,0,0,0,9,0,0,0,8,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,8,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,7,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,15,7,12,6,0,0,0,7,0,5,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,5,0,0,0,0, +0,0,0,6,9,5,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,9,7,0,0,14,0,0,0,11,7,0,0,0,0,0, +0,0,0,0,0,0,4,0,0,11,7,0,0,0,0,8,0,0,0,0,0,0,6,8,7,0,0,0,7,10,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,10,0,0,0,0,0,0, +6,0,6,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,11,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,7,0,0,10,7,0,0,0,0,9,7,0,0,0,0,0,0,13,7,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,12,0, +0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,9,6,0,0,11,0,0, +0,0,0,14,4,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,7,0,0, +0,0,0,6,0,7,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,20, +7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,8,0,0,0,0,0,0,0,0,0,11,5,0,0,0,0,0,0,0,0,0,0,10,4,0,0,0,5,8,5,10,4,0,0,0,0,0, +0,13,6,9,7,0,0,10,7,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,6,0,0,0,7,0,6,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,7,10,7,0,0, +0,0,0,0,0,0,0,0,12,4,0,0,0,0,8,7,0,0,0,0,0,7,0,6,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0, +0,0,0,0,6,0,6,9,6,0,0,12,5,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0, +0,0,0,0,0,0,0,0,0,5,8,7,9,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,11, +4,0,0,0,0,0,0,8,0,0,0,10,7,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,0, +0,0,0,0,0,5,0,6,0,0,10,0,14,0,0,0,0,0,0,0,23,0,0,0,12,0,10,5,0,0,0,0,0,0,0,0,0, +5,0,0,0,0,8,0,0,0,0,6,8,0,0,0,0,0,0,0,0,0,22,0,8,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0, +0,0,0,0,0,6,18,4,0,0,0,7,10,6,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,7,10,0,0,0,0,0,0,6,0,0,0,0,11,5,0,0,0,0,0,0,0,0, +15,0,8,6,0,0,13,7,0,0,0,0,0,7,0,0,0,0,0,7,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,9,5,9, +0,0,6,8,6,0,0,0,0,10,0,0,0,18,5,0,0,0,5,0,7,0,0,0,0,8,6,0,0,0,0,9,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,14,0,23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,6,0,0,0,5,0, +0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,8,5,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,0,0,0,0,0,0, +0,0,0,0,20,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,9,5,0,0,0,0,0,0,8,4,24,0,0,0,0,0,0, +0,0,0,0,0,0,0,9,7,0,0,0,0,10,5,0,0,8,5,0,0,0,0,0,0,0,0,12,7,0,6,0,0,10,6,0,0,0, +0,14,0,0,4,9,5,0,0,0,0,0,0,9,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,8,0,0,0,0,0,11,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,8,5,11,7,0,4,0,0,10,0,0,0,0, +0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,11,6,0,0,0,0,0,5,14,6,0,0,0,0,10,0,0, +0,13,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,7,12,0,10,6,0,0,0,0,0,0,10,0,0,0,0,0,10,0,9, +7,0,0,0,0,0,0,0,0,0,0,0,0,0,7,8,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,9,7,0,0,0, +0,0,0,0,0,0,0,0,0,24,0,11,7,0,7,0,0,0,0,0,0,8,6,0,0,0,0,0,0,8,7,0,0,0,0,0,5,0,0, +0,6,9,0,0,0,23,5,0,0,0,0,0,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,7,0,0,0, +0,0,0,0,0,0,0,0,0,0,6,0,0,18,4,0,0,11,7,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9,0,0,0,11,0,0,0,23,0,0, +0,10,4,0,0,0,0,0,7,0,0,0,7,0,0,0,0,0,4,0,0,0,0,0,7,0,0,19,0,11,0,0,0,0,0,12,7,0, +0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,0,0,0,6,0,0, +9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,4,0,0,0,0,10,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,22,0,8,7,10,4,11,0,13,5,8,7,9,0,8,7,0,0,0,7,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0, +0,8,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,4,0,0,0,4,11,0,0,6,0,0,8,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,5,0,0, +20,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,7,0,0,14,0,0,0,9,0,13,7,0,0,0,0,0,6,0,7,0,0,8,6,10,6,0,0,8,6,0,0,0,6,0, +0,12,6,9,0,0,0,0,0,0,5,9,0,12,4,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0, +0,0,4,8,0,0,6,8,0,0,0,0,0,0,0,0,0,13,6,0,7,0,0,0,0,0,6,8,7,8,6,0,0,0,7,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,18,0,11,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0, +0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,14, +6,0,0,0,0,12,7,8,0,0,0,0,0,0,0,8,7,0,0,0,0,10,4,0,0,0,0,0,0,10,0,0,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,15,6,9,7,0,0,0,0,0,0,15,6,11,7,0,0,0,7,0,0,21,0,0, +0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,17,6,0,0,10,5,0,5,0,0,0,0,0,0,0,0,0,7, +0,0,10,0,0,0,0,0,0,0,0,4,11,5,0,0,0,0,16,7,0,0,0,0,0,6,0,0,8,7,0,4,0,0,10,0,0,0, +0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,8,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0, +0,0,0,10,4,0,0,0,0,0,0,0,0,0,6,0,5,0,0,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0, +0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,6,10,7,0,0,0,0,0,0,0,0,8,4,0,0,10,0,0,0,0,4,0,6,0,6,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,17,0,0,0,0,0, +0,0,0,0,0,0,10,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +6,0,0,0,5,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,5,0,4,0,0,0,0,0,6,0,0,0,0,0,0,10,5,0,0, +0,5,0,0,0,0,9,0,19,7,0,0,0,0,0,7,0,0,0,0,10,6,0,0,0,6,0,5,0,0,0,0,0,0,0,0,0,6,8, +0,0,0,0,0,11,0,0,0,0,0,0,6,0,0,0,0,0,7,9,0,15,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,0,0, +0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0,9,0,0,0,0,0,0,0,0,6,0,7,0,0,0,0,0,0,0,6,0,0, +0,0,0,6,10,0,0,0,0,0,0,0,23,0,14,0,0,0,0,7,0,0,0,0,0,7,0,0,9,0,0,0,0,7,0,0,0,0, +0,6,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0, +0,0,0,0,0,9,5,0,0,0,0,0,4,0,0,0,0,9,5,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,10,0,0,0,0,0,0,5,0,4,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,6,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,14,7,0,0,12,7,0,0,0, +0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,8,6,10,0,0,0,0,0,0,0,0,0,10,7,8,5,0,0,0,0,0,0, +0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,5,0,0,9,5,0,0,0,0,0,5,0,0,0,0,0,4,0,0,0, +0,0,0,0,0,0,0,12,4,11,0,0,0,9,0,11,7,0,0,0,0,0,0,10,6,0,0,0,6,0,0,0,0,15,5,0,0, +11,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,4,0,4,0,6,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,8,0,0,0,19,7,0,4,0,0,9,0,0,0,0,0,10,0, +0,6,0,0,13,0,12,6,0,0,0,0,0,0,0,0,10,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,13,7,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,4,9,0,0,0,10,0,0,0,0,0,0,0, +0,5,0,0,0,0,0,0,10,0,23,6,0,0,0,6,8,0,0,0,0,0,0,0,0,0,17,7,0,0,0,0,11,6,22,5,0, +0,9,6,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,5,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,4,11,0,9,4,0,0, +0,7,0,7,0,0,0,0,0,0,12,4,0,0,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +4,0,0,11,5,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,8,6,0,0,0,4,0,0,0,0, +0,0,0,0,0,7,0,0,0,4,0,0,10,4,0,0,0,0,0,0,0,7,0,7,0,0,0,6,0,0,0,0,8,6,0,6,0,6,0, +0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,6,22,6,12,0,0,6,0,0,0,6,0,0,0,0,0,7,0,0,0,0,11,0,0,0, +9,7,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,6,0,0,0,6,0,6,0,0,8,7,0,0,0,4,9,7,19,0,0,0,0,0,0,0,0,0,9,6,10,6,0,6,0,0,0, +4,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,6,16,7,10,6,0,0,23,6,11,7,0,4,0,0,0,0,0,0,0,0,0, +5,0,0,0,0,10,7,0,0,0,0,0,7,0,0,0,0,0,0,15,0,10,0,0,0,14,6,0,0,0,0,0,0,0,0,0,0,0, +5,0,0,0,0,0,0,0,5,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,5,0,0,11,5,0,0,0,0,0,0,0,0,0,0, +0,4,0,0,0,0,0,6,0,0,10,0,0,0,0,7,0,0,0,0,0,0,10,6,0,0,0,0,8,4,0,0,0,7,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,7,12,5,0,0,0,0, +0,6,0,0,0,0,9,6,0,0,0,0,0,0,0,6,9,0,0,0,0,6,0,0,0,0,8,7,0,0,0,0,0,0,0,6,0,0,0,0, +0,0,0,0,0,0,10,5,0,0,0,0,0,0,8,6,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,8,5,0,0,0,0,0,7,0,7,0,4,0,0,10,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,5,0,0,0,0,13, +7,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,7,0,0,13,0,0,0,0,0,0,0,0,7,10,5,0,0,0,0,0,0,9,7,0,0,8,6,9, +5,0,0,0,0,0,6,12,0,0,0,0,0,0,0,18,6,0,0,0,0,0,0,0,0,19,7,0,4,0,0,0,0,9,5,0,5,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,7,0,0,0,0,0,0,14,0,0,0,23,7,8,7,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,22,0,0,7,0,0,0,0,0,0,0,0,9,7,8,4,0, +0,0,0,0,0,0,0,8,5,0,6,0,0,0,0,0,6,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0, +8,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,12,5,0,0,0,0,0,0,0,0,0,0,8,6,0,0,11,7,0,0,0, +0,12,0,8,6,19,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,11,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,11,7,0,0,0,0,0,4,10,0,0,0,0,0,0,0,8,7,0,0,0,0,14,0,8,0,0,6,10,0,0, +0,0,0,0,0,12,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,6,0,0,0,0, +0,0,0,0,13,0,0,0,0,0,0,0,11,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0, +0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,5,0,0,0,6,0,0,0,5,0,7,0,0,0, +0,0,6,0,0,21,7,0,0,9,6,0,0,0,6,0,0,13,7,0,0,0,5,0,0,0,0,0,4,0,6,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,11,5,0,6,0,0,10,5,0,0,0,0,0,0,0,0,9,6,0,0,8,7,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,0,0,0,0,0,0,6,0,0,0,0,15,4,0,0,12,7,0,0,0,6, +0,7,0,0,8,0,9,5,0,4,0,0,0,6,0,6,0,0,23,4,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,4,0,0,8, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,0,0,0,0,0, +7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,12,6,0,0,0,0,0,0,10,7,0,7,0,0,0,0,0,0,0,0,0,0, +9,0,0,0,0,0,8,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,11,5,0,0,0,6,0,6,0,0,0,0,0,0,0,6,0, +4,0,0,0,0,0,0,0,0,0,0,0,5,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,8,7,0,0,0,6,0,6,0, +0,0,0,0,0,0,0,0,5,0,0,0,0,0,5,0,0,0,0,11,0,0,0,0,0,0,0,10,5,9,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,23,7,0,0,0,0,0,7,0,0,10,6,18,0,0,0, +0,0,0,0,8,7,0,6,0,0,0,0,0,0,8,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0, +0,0,0,0,0,6,0,0,0,4,12,7,0,0,0,0,0,0,0,0,10,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,13,5,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0, +11,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0, +0,0,0,0,6,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,0,11,0,0,0,0,0,0,0,0,0, +17,5,0,4,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0,0,0,0,8,7,0,0,0,0,0,0,0, +0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0, +10,0,0,0,8,6,0,0,0,7,0,0,0,0,0,0,8,0,0,0,14,0,0,0,0,7,0,0,0,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,9,4,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0, +10,0,0,0,16,5,0,0,0,0,0,0,8,0,0,4,0,0,0,0,0,0,0,0,0,0,9,6,0,0,0,0,0,0,10,0,0,0, +0,0,0,0,0,5,0,0,0,0,12,5,0,7,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,7,0, +0,0,0,0,0,0,0,12,6,0,0,0,0,0,7,0,6,0,6,12,6,0,0,0,0,0,0,0,4,8,7,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,6,0,6,0,0,0,0,0,0,0,0,10,6,8,0,0, +6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +16,0,8,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,23,5,0,0,0,7,0,6,0, +0,0,0,0,0,0,0,0,0,0,0,10,6,0,0,9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,14,0,0,0,0,7,0,0,0,4,17,5,0,0,0,0,11,0,9,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,6,0,0,0,5,0,7,0,0,0,0,0,0,0,0,8,0,0,0, +12,6,0,0,0,0,0,0,13,0,0,0,0,7,9,0,0,0,0,0,0,0,0,0,0,5,0,0,0,7,10,7,12,0,0,0,9,0, +0,0,14,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,15,6,0,0,23,0,0,7,0,6,0,0,0,7,0,6, +0,0,0,0,0,0,0,6,0,6,9,0,0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,8,7,9,4,0,0,10,0,0,0,10, +6,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,6,0,0,0,0,0,0,9,4, +0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,9,6,0,0,0,0,8,6,0,0,0,0,0,0,0,0,12,0,0, +0,0,0,8,0,0,6,11,6,0,0,8,7,8,5,0,0,0,0,0,5,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0, +10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0, +7,0,0,0,0,9,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,8,0,0,0,0,6,12,5,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,10,0,10, +7,0,0,8,0,0,0,0,4,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0, +0,0,4,0,0,0,0,0,4,0,0,0,0,0,0,0,6,0,6,0,5,0,0,0,0,8,0,0,0,10,7,0,0,0,0,10,0,0,0, +0,0,13,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,19,7,0,4,12,0,8,0,0,0,0,6,0,0,0,0, +0,0,0,6,0,0,0,0,0,0,0,0,0,4,0,0,0,0,18,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0, +0,14,0,0,4,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,0,0,0,10,4,0,0,9,7,0,0,11,0,0,0,0,0,0, +7,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,12,0,0,0, +0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,22,5,9,7,0,0,0,0,0,0,0,0,0, +0,0,6,0,0,9,6,0,5,0,0,0,0,0,0,10,5,0,0,8,6,0,6,10,5,0,0,0,6,0,0,0,6,0,0,20,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,0,17,4,0,7,0,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10, +0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0, +0,0,7,0,0,8,6,12,0,0,7,18,7,0,0,8,4,0,0,0,0,9,6,0,0,0,0,0,0,0,0,13,0,0,6,0,0,0, +0,0,0,0,0,0,0,10,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,0, +0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,8,5,0,0,0,0,0,0,0,0,12,0,0,0,8,0,0,0,0,0,0, +4,0,0,10,0,16,0,0,0,0,0,0,0,12,7,10,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,16,6,10,0,0,5,0,0,0,0,0,6,0,0,0,0, +0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,5,8,7,0,7,0,0,0,0,0,0,0,0,8,0,0,6,0,0,0,6,0,0,0,4,0,0,0,0, +8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,7,0,0,8,0,0,0, +9,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,13,5,0,5,0,0,0,7,8,4,0,0,0,0,0,0,0, +0,12,0,0,0,0,0,0,0,0,0,0,0,8,6,0,6,0,0,11,0,0,0,0,0,0,0,0,6,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,10,7,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,11,6,0,0,10,6,0,0, +0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +0,0,0,6,0,0,0,7,0,0,9,0,8,7,11,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,9,6,10,5,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,10,7,0,0,0,0,0,0,11,0,9,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,15,5,12,5, +0,0,0,0,0,0,12,7,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,12,6,0, +0,0,0,24,4,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,10,4,0,0,0,0,10,7,0,0,0,0,0,0,0,0,0,0,0,0,9,0,11,0,0,0,0,0,0,0,0,0,0,6, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5, +0,0,8,0,0,0,0,7,0,0,0,0,0,0,10,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,0,0, +0,0,0,0,0,14,7,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,0,0,6,0,0,0,0,0,6,0,0,0,6,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,7,20,7,11,4,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,7,9,6,0,0,12,7,0,0,0,0,0,0,10,0,12,0, +0,0,0,0,0,4,9,6,13,0,0,0,0,0,0,0,0,6,0,0,0,6,0,0,0,5,0,0,0,0,0,0,8,0,0,0,0,0,0, +0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,6,0,0,11,0,9,0,0,0,0,4,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,5,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, +0,4,0,5,0,0,0,0,0,0,0,0,0,4,0,0,0,0,9,7,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, +0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6, +0,0,0,0,8,7,0,0,0,0,0,0,12,0,0,6,0,0,0,0,0,0,0,6,8,4,0,0,10,7,0,0,10,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,7,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,4,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,7,0,0,0,0,0,0,0,5, +0,4,0,0,0,0,0,6,0,0,0,0,0,0,8,0,0,6,0,0,0,6,0,0,0,0,0,7,0,5,8,4,0,0,9,0,0,0,0,4, +0,0,0,0,0,0,0,0,0,5,0,0,15,6,8,6,0,0,0,6,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,6,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,9,6,0,0,0,0,0,0,0,7,0,0,0,4,0, +6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,9,5,0,6,12,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,8,7,0,6,0,0,0,0,0,0,0,0,0,0,0,0,11,0,12,7,0,0,0,0, +0,0,0,0,0,5,0,5,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,11,4,0,0,0,0,0,0,0,0,0,0,10, +7,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,7,8,7,9,6,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,5,12,0, +10,5,12,6,0,0,0,7,0,0,0,0,0,0,0,5,0,0,0,5,9,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7, +11,7,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,6,0,7,0,0,0,0,8,0,8,5,0,6,0,0,0,6,0,0,0, +0,0,0,0,6,0,6,0,6,9,0,0,5,17,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,7,0,0, +0,0,0,7,0,0,0,0,16,5,0,0,0,0,0,0,0,4,0,0,0,5,11,5,0,7,0,0,0,4,8,7,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,7,0,0,0,0,12,0,0,0, +0,0,12,0,0,0,0,0,0,0,0,4,10,4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,6,0,0,0,0,0,0,0,4,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,20,5,0,0, +10,0,0,0,0,0,0,0,0,0,0,6,0,0,0,6,12,0,0,0,0,0,0,6,0,0,0,0,0,0,9,4,10,7,0,4,0,0, +0,0,0,0,10,6,0,0,0,0,8,4,0,7,8,6,0,6,8,0,10,0,0,0,0,0,13,5,0,6,0,0,0,0,0,0,22,4, +0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,6,10, +5,8,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,10,4,0,0,10,7,0,0,0,0,0,5,0, +5,8,0,0,0,0,6,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,10,7,0,0,0,4,0,0,0,0,0,6,0,0, +0,0,0,0,0,0,8,7,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,7,0,0,0,6,0,0,0,0,0,0,0,0,0, +4,0,0,0,4,10,0,0,6,13,7,8,0,0,0,0,0,0,7,0,0,12,7,0,0,0,0,0,0,10,5,0,0,0,0,0,6,0, +0,0,0,0,0,0,0,0,0,13,7,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,6,0,0,0,0,0,0,0,0,8,6,0,6, +0,0,0,0,0,0,0,0,12,0,8,4,0,0,0,0,0,4,0,4,0,0,0,0,0,0,0,5,0,0,0,0,12,5,0,0,0,7,0, +0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,10,0,0,0,20,0,0,5,0,0,10, +7,11,7,0,0,0,0,0,0,0,0,0,0,17,0,9,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,10,7,0,4,0,6,0,0,24,0,0,5,0,0,0,0,8,0,0, +0,0,0,0,0,10,5,0,4,0,6,0,0,8,0,0,0,0,0,0,4,0,6,0,0,0,0,0,0,9,5,0,0,0,0,0,0,0,0, +0,0,0,6,0,0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,4,0,7, +0,0,13,0,0,0,0,0,0,0,11,6,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, +17,7,0,0,11,6,0,0,0,0,12,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0,0,0,0,0,0,0,0,10,0,0,4,8,6,0,0,0, +0,0,0,9,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,9,5,0,7,18,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,0,0,0,8,0,0,0, +0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0, +0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,4,0,6,0,0,9,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0, +0,0,0,8,7,10,0,8,5,0,0,0,0,0,0,0,0,9,0,0,0,10,0,0,0,0,6,0,7,0,4,0,0,0,0,0,0,0,0, +8,0,0,0,0,0,8,4,0,0,0,0,0,5,0,0,10,0,12,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +4,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,6,11,0,0, +7,0,0,0,0,0,6,10,5,0,0,0,0,0,0,0,0,0,5,0,0,9,5,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,6,0,0,0,0,13,6,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0, +0,0,0,8,4,0,6,12,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,11,4,0,0,0,6,14,0,11,0,9,6,0,0,0,0,0,0,22,0,12,0,8,6,0,0,0,0,0,0,0,6,0, +0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0, +10,7,0,0,0,0,0,0,0,0,9,0,0,0,0,4,0,0,0,0,0,0,0,0,0,5,11,0,0,0,0,0,0,0,8,6,0,0,9, +7,0,0,12,4,0,0,0,0,0,0,12,6,0,6,0,7,0,0,8,5,0,0,0,0}; #if defined(__cplusplus) || defined(c_plusplus) } /* extern "C" */ diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/dictionary_hash.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/dictionary_hash.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/dictionary_hash.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/dictionary_hash.h 2022-04-05 07:16:59.000000000 +0000 @@ -15,7 +15,8 @@ extern "C" { #endif -extern const uint16_t kStaticDictionaryHash[32768]; +extern const uint16_t kStaticDictionaryHashWords[32768]; +extern const uint8_t kStaticDictionaryHashLengths[32768]; #if defined(__cplusplus) || defined(c_plusplus) } /* extern "C" */ diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/encode.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/encode.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/encode.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/encode.c 2022-04-05 07:16:59.000000000 +0000 @@ -54,12 +54,19 @@ BROTLI_STREAM_METADATA_BODY = 4 } BrotliEncoderStreamState; +typedef enum BrotliEncoderFlintState { + BROTLI_FLINT_NEEDS_2_BYTES = 2, + BROTLI_FLINT_NEEDS_1_BYTE = 1, + BROTLI_FLINT_WAITING_FOR_PROCESSING = 0, + BROTLI_FLINT_WAITING_FOR_FLUSHING = -1, + BROTLI_FLINT_DONE = -2 +} BrotliEncoderFlintState; + typedef struct BrotliEncoderStateStruct { BrotliEncoderParams params; MemoryManager memory_manager_; - HasherHandle hasher_; uint64_t input_pos_; RingBuffer ringbuffer_; size_t cmd_alloc_size_; @@ -73,10 +80,17 @@ int saved_dist_cache_[4]; uint16_t last_bytes_; uint8_t last_bytes_bits_; + /* "Flint" is a tiny uncompressed block emitted before the continuation + block to unwire literal context from previous data. Despite being int8_t, + field is actually BrotliEncoderFlintState enum. */ + int8_t flint_; uint8_t prev_byte_; uint8_t prev_byte2_; size_t storage_size_; uint8_t* storage_; + + Hasher hasher_; + /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */ int small_table_[1 << 10]; /* 4KiB */ int* large_table_; /* Allocated only when needed */ @@ -114,8 +128,6 @@ BROTLI_BOOL is_initialized_; } BrotliEncoderStateStruct; -static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s); - static size_t InputBlockSize(BrotliEncoderState* s) { return (size_t)1 << s->params.lgblock; } @@ -174,6 +186,11 @@ state->params.dist.num_direct_distance_codes = value; return BROTLI_TRUE; + case BROTLI_PARAM_STREAM_OFFSET: + if (value > (1u << 30)) return BROTLI_FALSE; + state->params.stream_offset = value; + return BROTLI_TRUE; + default: return BROTLI_FALSE; } } @@ -195,7 +212,7 @@ if (s->storage_size_ < size) { BROTLI_FREE(m, s->storage_); s->storage_ = BROTLI_ALLOC(m, uint8_t, size); - if (BROTLI_IS_OOM(m)) return NULL; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->storage_)) return NULL; s->storage_size_ = size; } return s->storage_; @@ -234,7 +251,7 @@ s->large_table_size_ = htsize; BROTLI_FREE(m, s->large_table_); s->large_table_ = BROTLI_ALLOC(m, int, htsize); - if (BROTLI_IS_OOM(m)) return 0; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->large_table_)) return 0; } table = s->large_table_; } @@ -499,7 +516,7 @@ /* TODO: find more precise minimal block overhead. */ if (bytes <= 2) return BROTLI_FALSE; if (num_commands < (bytes >> 8) + 2) { - if (num_literals > 0.99 * (double)bytes) { + if ((double)num_literals > 0.99 * (double)bytes) { uint32_t literal_histo[256] = { 0 }; static const uint32_t kSampleRate = 13; static const double kMinEntropy = 7.92; @@ -617,11 +634,7 @@ /* The number of distance symbols effectively used for distance histograms. It might be less than distance alphabet size for "Large Window Brotli" (32-bit). */ - uint32_t num_effective_dist_codes = block_params.dist.alphabet_size; - if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) { - num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS; - } - BrotliOptimizeHistograms(num_effective_dist_codes, &mb); + BrotliOptimizeHistograms(block_params.dist.alphabet_size_limit, &mb); } BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask, prev_byte, prev_byte2, @@ -678,12 +691,23 @@ s->last_bytes_bits_ = 0; s->last_bytes_ = 0; + s->flint_ = BROTLI_FLINT_DONE; s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX; SanitizeParams(&s->params); s->params.lgblock = ComputeLgBlock(&s->params); ChooseDistanceParams(&s->params); + if (s->params.stream_offset != 0) { + s->flint_ = BROTLI_FLINT_NEEDS_2_BYTES; + /* Poison the distance cache. -16 +- 3 is still less than zero (invalid). */ + s->dist_cache_[0] = -16; + s->dist_cache_[1] = -16; + s->dist_cache_[2] = -16; + s->dist_cache_[3] = -16; + memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_)); + } + RingBufferSetup(&s->params, &s->ringbuffer_); /* Initialize last byte with stream header. */ @@ -693,8 +717,14 @@ s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) { lgwin = BROTLI_MAX(int, lgwin, 18); } - EncodeWindowBits(lgwin, s->params.large_window, - &s->last_bytes_, &s->last_bytes_bits_); + if (s->params.stream_offset == 0) { + EncodeWindowBits(lgwin, s->params.large_window, + &s->last_bytes_, &s->last_bytes_bits_); + } else { + /* Bigger values have the same effect, but could cause overflows. */ + s->params.stream_offset = BROTLI_MIN(size_t, + s->params.stream_offset, BROTLI_MAX_BACKWARD_LIMIT(lgwin)); + } } if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) { @@ -712,13 +742,15 @@ params->quality = BROTLI_DEFAULT_QUALITY; params->lgwin = BROTLI_DEFAULT_WINDOW; params->lgblock = 0; + params->stream_offset = 0; params->size_hint = 0; params->disable_literal_context_modeling = BROTLI_FALSE; BrotliInitEncoderDictionary(¶ms->dictionary); params->dist.distance_postfix_bits = 0; params->dist.num_direct_distance_codes = 0; - params->dist.alphabet_size = + params->dist.alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS); + params->dist.alphabet_size_limit = params->dist.alphabet_size_max; params->dist.max_distance = BROTLI_MAX_DISTANCE; } @@ -734,7 +766,7 @@ s->prev_byte2_ = 0; s->storage_size_ = 0; s->storage_ = 0; - s->hasher_ = NULL; + HasherInit(&s->hasher_); s->large_table_ = NULL; s->large_table_size_ = 0; s->cmd_code_numbits_ = 0; @@ -902,6 +934,7 @@ (*bytes)--; (*wrapped_last_processed_pos)++; } + } else { } /* The copy length is at most the metablock size, and thus expressible. */ GetLengthCode(last_command->insert_len_, @@ -934,6 +967,7 @@ uint32_t mask; MemoryManager* m = &s->memory_manager_; ContextType literal_context_mode; + ContextLut literal_context_lut; data = s->ringbuffer_.buffer_; mask = s->ringbuffer_.mask_; @@ -951,7 +985,10 @@ BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize); s->literal_buf_ = BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->command_buf_) || + BROTLI_IS_NULL(s->literal_buf_)) { + return BROTLI_FALSE; + } } if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY || @@ -1009,7 +1046,7 @@ newsize += (bytes / 4) + 16; s->cmd_alloc_size_ = newsize; new_commands = BROTLI_ALLOC(m, Command, newsize); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_commands)) return BROTLI_FALSE; if (s->commands_) { memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_); BROTLI_FREE(m, s->commands_); @@ -1024,6 +1061,7 @@ literal_context_mode = ChooseContextMode( &s->params, data, WrapPosition(s->last_flush_pos_), mask, (size_t)(s->input_pos_ - s->last_flush_pos_)); + literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode); if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; @@ -1034,20 +1072,23 @@ if (s->params.quality == ZOPFLIFICATION_QUALITY) { BROTLI_DCHECK(s->params.hasher.type == 10); BrotliCreateZopfliBackwardReferences(m, bytes, wrapped_last_processed_pos, - data, mask, &s->params, s->hasher_, s->dist_cache_, + data, mask, literal_context_lut, &s->params, + &s->hasher_, s->dist_cache_, &s->last_insert_len_, &s->commands_[s->num_commands_], &s->num_commands_, &s->num_literals_); if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) { BROTLI_DCHECK(s->params.hasher.type == 10); BrotliCreateHqZopfliBackwardReferences(m, bytes, wrapped_last_processed_pos, - data, mask, &s->params, s->hasher_, s->dist_cache_, + data, mask, literal_context_lut, &s->params, + &s->hasher_, s->dist_cache_, &s->last_insert_len_, &s->commands_[s->num_commands_], &s->num_commands_, &s->num_literals_); if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; } else { BrotliCreateBackwardReferences(bytes, wrapped_last_processed_pos, - data, mask, &s->params, s->hasher_, s->dist_cache_, + data, mask, literal_context_lut, &s->params, + &s->hasher_, s->dist_cache_, &s->last_insert_len_, &s->commands_[s->num_commands_], &s->num_commands_, &s->num_literals_); } @@ -1072,7 +1113,7 @@ s->num_commands_ < max_commands) { /* Merge with next input block. Everything will happen later. */ if (UpdateLastProcessedPos(s)) { - HasherReset(s->hasher_); + HasherReset(&s->hasher_); } *out_size = 0; return BROTLI_TRUE; @@ -1113,7 +1154,7 @@ s->last_bytes_bits_ = storage_ix & 7u; s->last_flush_pos_ = s->input_pos_; if (UpdateLastProcessedPos(s)) { - HasherReset(s->hasher_); + HasherReset(&s->hasher_); } if (s->last_flush_pos_ > 0) { s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask]; @@ -1174,7 +1215,6 @@ size_t total_out_size = 0; uint16_t last_bytes; uint8_t last_bytes_bits; - HasherHandle hasher = NULL; const size_t hasher_eff_size = BROTLI_MIN(size_t, input_size, BROTLI_MAX_BACKWARD_LIMIT(lgwin) + BROTLI_WINDOW_GAP); @@ -1190,6 +1230,9 @@ uint8_t prev_byte = 0; uint8_t prev_byte2 = 0; + Hasher hasher; + HasherInit(&hasher); + BrotliEncoderInitParams(¶ms); params.quality = 10; params.lgwin = lgwin; @@ -1226,6 +1269,7 @@ ContextType literal_context_mode = ChooseContextMode(¶ms, input_buffer, metablock_start, mask, metablock_end - metablock_start); + ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode); size_t block_start; for (block_start = metablock_start; block_start < metablock_end; ) { @@ -1234,12 +1278,12 @@ ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, block_size + 1); size_t path_size; size_t new_cmd_alloc_size; - if (BROTLI_IS_OOM(m)) goto oom; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(nodes)) goto oom; BrotliInitZopfliNodes(nodes, block_size + 1); - StitchToPreviousBlockH10(hasher, block_size, block_start, + StitchToPreviousBlockH10(&hasher.privat._H10, block_size, block_start, input_buffer, mask); path_size = BrotliZopfliComputeShortestPath(m, block_size, block_start, - input_buffer, mask, ¶ms, dist_cache, hasher, + input_buffer, mask, literal_context_lut, ¶ms, dist_cache, &hasher, nodes); if (BROTLI_IS_OOM(m)) goto oom; /* We allocate a command buffer in the first iteration of this loop that @@ -1254,7 +1298,7 @@ num_commands + path_size + 1); if (cmd_alloc_size != new_cmd_alloc_size) { Command* new_commands = BROTLI_ALLOC(m, Command, new_cmd_alloc_size); - if (BROTLI_IS_OOM(m)) goto oom; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_commands)) goto oom; cmd_alloc_size = new_cmd_alloc_size; if (commands) { memcpy(new_commands, commands, sizeof(Command) * num_commands); @@ -1286,7 +1330,7 @@ if (metablock_size == 0) { /* Write the ISLAST and ISEMPTY bits. */ storage = BROTLI_ALLOC(m, uint8_t, 16); - if (BROTLI_IS_OOM(m)) goto oom; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(storage)) goto oom; storage[0] = (uint8_t)last_bytes; storage[1] = (uint8_t)(last_bytes >> 8); BrotliWriteBits(2, 3, &storage_ix, storage); @@ -1297,7 +1341,7 @@ CreateBackwardReferences is now unused. */ memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0])); storage = BROTLI_ALLOC(m, uint8_t, metablock_size + 16); - if (BROTLI_IS_OOM(m)) goto oom; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(storage)) goto oom; storage[0] = (uint8_t)last_bytes; storage[1] = (uint8_t)(last_bytes >> 8); BrotliStoreUncompressedMetaBlock(is_last, input_buffer, @@ -1318,14 +1362,10 @@ /* The number of distance symbols effectively used for distance histograms. It might be less than distance alphabet size for "Large Window Brotli" (32-bit). */ - uint32_t num_effective_dist_codes = block_params.dist.alphabet_size; - if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) { - num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS; - } - BrotliOptimizeHistograms(num_effective_dist_codes, &mb); + BrotliOptimizeHistograms(block_params.dist.alphabet_size_limit, &mb); } storage = BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 503); - if (BROTLI_IS_OOM(m)) goto oom; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(storage)) goto oom; storage[0] = (uint8_t)last_bytes; storage[1] = (uint8_t)(last_bytes >> 8); BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_size, @@ -1576,7 +1616,10 @@ BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize); s->literal_buf_ = BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(s->command_buf_) || + BROTLI_IS_NULL(s->literal_buf_)) { + return BROTLI_FALSE; + } } if (s->command_buf_) { command_buf = s->command_buf_; @@ -1584,7 +1627,10 @@ } else { tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size); tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size); - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(tmp_command_buf) || + BROTLI_IS_NULL(tmp_literal_buf)) { + return BROTLI_FALSE; + } command_buf = tmp_command_buf; literal_buf = tmp_literal_buf; } @@ -1640,8 +1686,10 @@ &storage_ix, storage); if (BROTLI_IS_OOM(m)) return BROTLI_FALSE; } - *next_in += block_size; - *available_in -= block_size; + if (block_size != 0) { + *next_in += block_size; + *available_in -= block_size; + } if (inplace) { size_t out_bytes = storage_ix >> 3; BROTLI_DCHECK(out_bytes <= *available_out); @@ -1786,6 +1834,10 @@ } while (BROTLI_TRUE) { size_t remaining_block_size = RemainingInputBlockSize(s); + /* Shorten input to flint size. */ + if (s->flint_ >= 0 && remaining_block_size > (size_t)s->flint_) { + remaining_block_size = (size_t)s->flint_; + } if (remaining_block_size != 0 && *available_in != 0) { size_t copy_input_size = @@ -1793,10 +1845,18 @@ CopyInputToRingBuffer(s, copy_input_size, *next_in); *next_in += copy_input_size; *available_in -= copy_input_size; + if (s->flint_ > 0) s->flint_ = (int8_t)(s->flint_ - (int)copy_input_size); continue; } if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) { + /* Exit the "emit flint" workflow. */ + if (s->flint_ == BROTLI_FLINT_WAITING_FOR_FLUSHING) { + CheckFlushComplete(s); + if (s->stream_state_ == BROTLI_STREAM_PROCESSING) { + s->flint_ = BROTLI_FLINT_DONE; + } + } continue; } @@ -1810,6 +1870,11 @@ BROTLI_BOOL force_flush = TO_BROTLI_BOOL( (*available_in == 0) && op == BROTLI_OPERATION_FLUSH); BROTLI_BOOL result; + /* Force emitting (uncompressed) piece containing flint. */ + if (!is_last && s->flint_ == 0) { + s->flint_ = BROTLI_FLINT_WAITING_FOR_FLUSHING; + force_flush = BROTLI_TRUE; + } UpdateSizeHint(s, *available_in); result = EncodeData(s, is_last, force_flush, &s->available_out_, &s->next_out_); diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/encoder_dict.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/encoder_dict.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/encoder_dict.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/encoder_dict.c 2022-04-05 07:16:59.000000000 +0000 @@ -17,14 +17,15 @@ void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict) { dict->words = BrotliGetDictionary(); + dict->num_transforms = (uint32_t)BrotliGetTransforms()->num_transforms; - dict->hash_table = kStaticDictionaryHash; + dict->hash_table_words = kStaticDictionaryHashWords; + dict->hash_table_lengths = kStaticDictionaryHashLengths; dict->buckets = kStaticDictionaryBuckets; dict->dict_words = kStaticDictionaryWords; dict->cutoffTransformsCount = kCutoffTransformsCount; dict->cutoffTransforms = kCutoffTransforms; - } #if defined(__cplusplus) || defined(c_plusplus) diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/encoder_dict.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/encoder_dict.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/encoder_dict.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/encoder_dict.h 2022-04-05 07:16:59.000000000 +0000 @@ -19,13 +19,15 @@ /* Dictionary data (words and transforms) for 1 possible context */ typedef struct BrotliEncoderDictionary { const BrotliDictionary* words; + uint32_t num_transforms; /* cut off for fast encoder */ uint32_t cutoffTransformsCount; uint64_t cutoffTransforms; /* from dictionary_hash.h, for fast encoder */ - const uint16_t* hash_table; + const uint16_t* hash_table_words; + const uint8_t* hash_table_lengths; /* from static_dict_lut.h, for slow encoder */ const uint16_t* buckets; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/entropy_encode.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/entropy_encode.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/entropy_encode.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/entropy_encode.c 2022-04-05 07:16:59.000000000 +0000 @@ -18,6 +18,8 @@ extern "C" { #endif +const size_t kBrotliShellGaps[] = {132, 57, 23, 10, 4, 1}; + BROTLI_BOOL BrotliSetDepth( int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) { int stack[16]; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/entropy_encode.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/entropy_encode.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/entropy_encode.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/entropy_encode.h 2022-04-05 07:16:59.000000000 +0000 @@ -76,12 +76,12 @@ size_t len, uint16_t* bits); +BROTLI_INTERNAL extern const size_t kBrotliShellGaps[6]; /* Input size optimized Shell sort. */ typedef BROTLI_BOOL (*HuffmanTreeComparator)( const HuffmanTree*, const HuffmanTree*); static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items, const size_t n, HuffmanTreeComparator comparator) { - static const size_t gaps[] = {132, 57, 23, 10, 4, 1}; if (n < 13) { /* Insertion sort. */ size_t i; @@ -101,7 +101,7 @@ /* Shell sort. */ int g = n < 57 ? 2 : 0; for (; g < 6; ++g) { - size_t gap = gaps[g]; + size_t gap = kBrotliShellGaps[g]; size_t i; for (i = gap; i < n; ++i) { size_t j = i; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/fast_log.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/fast_log.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/fast_log.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/fast_log.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,105 @@ +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +#include "./fast_log.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */ +const double kBrotliLog2Table[BROTLI_LOG2_TABLE_SIZE] = { + 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f, + 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f, + 2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f, + 3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f, + 3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f, + 3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f, + 4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f, + 4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f, + 4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f, + 4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f, + 4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f, + 5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f, + 5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f, + 5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f, + 5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f, + 5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f, + 5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f, + 5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f, + 5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f, + 5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f, + 5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f, + 5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f, + 6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f, + 6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f, + 6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f, + 6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f, + 6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f, + 6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f, + 6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f, + 6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f, + 6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f, + 6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f, + 6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f, + 6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f, + 6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f, + 6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f, + 6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f, + 6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f, + 6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f, + 6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f, + 6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f, + 6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f, + 6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f, + 7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f, + 7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f, + 7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f, + 7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f, + 7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f, + 7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f, + 7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f, + 7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f, + 7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f, + 7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f, + 7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f, + 7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f, + 7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f, + 7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f, + 7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f, + 7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f, + 7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f, + 7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f, + 7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f, + 7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f, + 7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f, + 7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f, + 7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f, + 7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f, + 7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f, + 7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f, + 7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f, + 7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f, + 7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f, + 7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f, + 7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f, + 7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f, + 7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f, + 7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f, + 7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f, + 7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f, + 7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f, + 7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f, + 7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f, + 7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f, + 7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f, + 7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f, + 7.9943534368588578f +}; + +#if defined(__cplusplus) || defined(c_plusplus) +} /* extern "C" */ +#endif diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/fast_log.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/fast_log.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/fast_log.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/fast_log.h 2022-04-05 07:16:59.000000000 +0000 @@ -19,10 +19,8 @@ #endif static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) { - /* TODO: generalize and move to platform.h */ -#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \ - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) - return 31u ^ (uint32_t)__builtin_clz((uint32_t)n); +#if defined(BROTLI_BSR32) + return BROTLI_BSR32((uint32_t)n); #else uint32_t result = 0; while (n >>= 1) result++; @@ -30,110 +28,31 @@ #endif } +#define BROTLI_LOG2_TABLE_SIZE 256 + /* A lookup table for small values of log2(int) to be used in entropy - computation. + computation. */ +BROTLI_INTERNAL extern const double kBrotliLog2Table[BROTLI_LOG2_TABLE_SIZE]; - ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */ -static const float kLog2Table[] = { - 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f, - 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f, - 2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f, - 3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f, - 3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f, - 3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f, - 4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f, - 4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f, - 4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f, - 4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f, - 4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f, - 5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f, - 5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f, - 5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f, - 5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f, - 5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f, - 5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f, - 5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f, - 5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f, - 5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f, - 5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f, - 5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f, - 6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f, - 6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f, - 6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f, - 6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f, - 6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f, - 6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f, - 6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f, - 6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f, - 6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f, - 6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f, - 6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f, - 6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f, - 6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f, - 6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f, - 6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f, - 6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f, - 6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f, - 6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f, - 6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f, - 6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f, - 6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f, - 7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f, - 7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f, - 7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f, - 7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f, - 7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f, - 7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f, - 7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f, - 7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f, - 7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f, - 7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f, - 7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f, - 7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f, - 7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f, - 7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f, - 7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f, - 7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f, - 7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f, - 7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f, - 7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f, - 7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f, - 7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f, - 7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f, - 7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f, - 7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f, - 7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f, - 7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f, - 7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f, - 7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f, - 7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f, - 7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f, - 7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f, - 7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f, - 7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f, - 7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f, - 7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f, - 7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f, - 7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f, - 7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f, - 7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f, - 7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f, - 7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f, - 7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f, - 7.9943534368588578f -}; +/* Visual Studio 2012 and Android API levels < 18 do not have the log2() + * function defined, so we use log() and a multiplication instead. */ +#if !defined(BROTLI_HAVE_LOG2) +#if ((defined(_MSC_VER) && _MSC_VER <= 1700) || \ + (defined(__ANDROID_API__) && __ANDROID_API__ < 18)) +#define BROTLI_HAVE_LOG2 0 +#else +#define BROTLI_HAVE_LOG2 1 +#endif +#endif #define LOG_2_INV 1.4426950408889634 /* Faster logarithm for small integers, with the property of log2(0) == 0. */ static BROTLI_INLINE double FastLog2(size_t v) { - if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) { - return kLog2Table[v]; + if (v < BROTLI_LOG2_TABLE_SIZE) { + return kBrotliLog2Table[v]; } -#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \ - (defined(__ANDROID_API__) && __ANDROID_API__ < 18) - /* Visual Studio 2012 and Android API levels < 18 do not have the log2() - * function defined, so we use log() and a multiplication instead. */ +#if !(BROTLI_HAVE_LOG2) return log((double)v) * LOG_2_INV; #else return log2((double)v); diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/find_match_length.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/find_match_length.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/find_match_length.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/find_match_length.h 2022-04-05 07:16:59.000000000 +0000 @@ -17,8 +17,7 @@ #endif /* Separate implementation for little-endian 64-bit targets, for speed. */ -#if defined(__GNUC__) && defined(_LP64) && defined(BROTLI_LITTLE_ENDIAN) - +#if defined(BROTLI_TZCNT64) && BROTLI_64_BITS && BROTLI_LITTLE_ENDIAN static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1, const uint8_t* s2, size_t limit) { @@ -32,7 +31,7 @@ } else { uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^ BROTLI_UNALIGNED_LOAD64LE(s1 + matched); - size_t matching_bits = (size_t)__builtin_ctzll(x); + size_t matching_bits = (size_t)BROTLI_TZCNT64(x); matched += matching_bits >> 3; return matched; } diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_composite_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_composite_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_composite_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_composite_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -28,20 +28,25 @@ } typedef struct HashComposite { - HasherHandle ha; - HasherHandle hb; + HASHER_A ha; + HASHER_B hb; + HasherCommon hb_common; + + /* Shortcuts. */ + void* extra; + HasherCommon* common; + + BROTLI_BOOL fresh; const BrotliEncoderParams* params; } HashComposite; -static BROTLI_INLINE HashComposite* FN(Self)(HasherHandle handle) { - return (HashComposite*)&(GetHasherCommon(handle)[1]); -} +static void FN(Initialize)(HasherCommon* common, + HashComposite* BROTLI_RESTRICT self, const BrotliEncoderParams* params) { + self->common = common; + self->extra = common->extra; -static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HashComposite* self = FN(Self)(handle); - self->ha = 0; - self->hb = 0; + self->hb_common = *self->common; + self->fresh = BROTLI_TRUE; self->params = params; /* TODO: Initialize of the hashers is defered to Prepare (and params remembered here) because we don't get the one_shot and input_size params @@ -49,87 +54,71 @@ those params to all hashers FN(Initialize) */ } -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashComposite* self = FN(Self)(handle); - if (!self->ha) { - HasherCommon* common_a; - HasherCommon* common_b; - - self->ha = handle + sizeof(HasherCommon) + sizeof(HashComposite); - common_a = (HasherCommon*)self->ha; - common_a->params = self->params->hasher; - common_a->is_prepared_ = BROTLI_FALSE; - common_a->dict_num_lookups = 0; - common_a->dict_num_matches = 0; - FN_A(Initialize)(self->ha, self->params); - - self->hb = self->ha + sizeof(HasherCommon) + FN_A(HashMemAllocInBytes)( - self->params, one_shot, input_size); - common_b = (HasherCommon*)self->hb; - common_b->params = self->params->hasher; - common_b->is_prepared_ = BROTLI_FALSE; - common_b->dict_num_lookups = 0; - common_b->dict_num_matches = 0; - FN_B(Initialize)(self->hb, self->params); +static void FN(Prepare)( + HashComposite* BROTLI_RESTRICT self, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* BROTLI_RESTRICT data) { + if (self->fresh) { + self->fresh = BROTLI_FALSE; + self->hb_common.extra = (uint8_t*)self->extra + + FN_A(HashMemAllocInBytes)(self->params, one_shot, input_size); + + FN_A(Initialize)(self->common, &self->ha, self->params); + FN_B(Initialize)(&self->hb_common, &self->hb, self->params); } - FN_A(Prepare)(self->ha, one_shot, input_size, data); - FN_B(Prepare)(self->hb, one_shot, input_size, data); + FN_A(Prepare)(&self->ha, one_shot, input_size, data); + FN_B(Prepare)(&self->hb, one_shot, input_size, data); } static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( const BrotliEncoderParams* params, BROTLI_BOOL one_shot, size_t input_size) { - return sizeof(HashComposite) + 2 * sizeof(HasherCommon) + - FN_A(HashMemAllocInBytes)(params, one_shot, input_size) + + return FN_A(HashMemAllocInBytes)(params, one_shot, input_size) + FN_B(HashMemAllocInBytes)(params, one_shot, input_size); } -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle, +static BROTLI_INLINE void FN(Store)(HashComposite* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { - HashComposite* self = FN(Self)(handle); - FN_A(Store)(self->ha, data, mask, ix); - FN_B(Store)(self->hb, data, mask, ix); + FN_A(Store)(&self->ha, data, mask, ix); + FN_B(Store)(&self->hb, data, mask, ix); } -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, +static BROTLI_INLINE void FN(StoreRange)( + HashComposite* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data, + const size_t mask, const size_t ix_start, const size_t ix_end) { - HashComposite* self = FN(Self)(handle); - FN_A(StoreRange)(self->ha, data, mask, ix_start, ix_end); - FN_B(StoreRange)(self->hb, data, mask, ix_start, ix_end); + FN_A(StoreRange)(&self->ha, data, mask, ix_start, ix_end); + FN_B(StoreRange)(&self->hb, data, mask, ix_start, ix_end); } -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, +static BROTLI_INLINE void FN(StitchToPreviousBlock)( + HashComposite* BROTLI_RESTRICT self, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ring_buffer_mask) { - HashComposite* self = FN(Self)(handle); - FN_A(StitchToPreviousBlock)(self->ha, num_bytes, position, ringbuffer, - ring_buffer_mask); - FN_B(StitchToPreviousBlock)(self->hb, num_bytes, position, ringbuffer, - ring_buffer_mask); + FN_A(StitchToPreviousBlock)(&self->ha, num_bytes, position, + ringbuffer, ring_buffer_mask); + FN_B(StitchToPreviousBlock)(&self->hb, num_bytes, position, + ringbuffer, ring_buffer_mask); } static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - HashComposite* self = FN(Self)(handle); - FN_A(PrepareDistanceCache)(self->ha, distance_cache); - FN_B(PrepareDistanceCache)(self->hb, distance_cache); + HashComposite* BROTLI_RESTRICT self, int* BROTLI_RESTRICT distance_cache) { + FN_A(PrepareDistanceCache)(&self->ha, distance_cache); + FN_B(PrepareDistanceCache)(&self->hb, distance_cache); } -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, +static BROTLI_INLINE void FN(FindLongestMatch)( + HashComposite* BROTLI_RESTRICT self, const BrotliEncoderDictionary* dictionary, const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, const size_t max_length, const size_t max_backward, - const size_t gap, const size_t max_distance, + const size_t dictionary_distance, const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HashComposite* self = FN(Self)(handle); - FN_A(FindLongestMatch)(self->ha, dictionary, data, ring_buffer_mask, - distance_cache, cur_ix, max_length, max_backward, gap, + FN_A(FindLongestMatch)(&self->ha, dictionary, data, ring_buffer_mask, + distance_cache, cur_ix, max_length, max_backward, dictionary_distance, max_distance, out); - FN_B(FindLongestMatch)(self->hb, dictionary, data, ring_buffer_mask, - distance_cache, cur_ix, max_length, max_backward, gap, + FN_B(FindLongestMatch)(&self->hb, dictionary, data, ring_buffer_mask, + distance_cache, cur_ix, max_length, max_backward, dictionary_distance, max_distance, out); } diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_forgetful_chain_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_forgetful_chain_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_forgetful_chain_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_forgetful_chain_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -28,7 +28,7 @@ static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } /* HashBytes is the function that chooses the bucket to place the address in.*/ -static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* data) { +static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data) { const uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32; /* The higher bits contain more mixture from the multiplication, so we take our results from there. */ @@ -45,28 +45,56 @@ } FN(Bank); typedef struct HashForgetfulChain { - uint32_t addr[BUCKET_SIZE]; - uint16_t head[BUCKET_SIZE]; - /* Truncated hash used for quick rejection of "distance cache" candidates. */ - uint8_t tiny_hash[65536]; - FN(Bank) banks[NUM_BANKS]; - uint16_t free_slot_idx[NUM_BANKS]; + uint16_t free_slot_idx[NUM_BANKS]; /* Up to 1KiB. Move to dynamic? */ size_t max_hops; + + /* Shortcuts. */ + void* extra; + HasherCommon* common; + + /* --- Dynamic size members --- */ + + /* uint32_t addr[BUCKET_SIZE]; */ + + /* uint16_t head[BUCKET_SIZE]; */ + + /* Truncated hash used for quick rejection of "distance cache" candidates. */ + /* uint8_t tiny_hash[65536];*/ + + /* FN(Bank) banks[NUM_BANKS]; */ } HashForgetfulChain; -static BROTLI_INLINE HashForgetfulChain* FN(Self)(HasherHandle handle) { - return (HashForgetfulChain*)&(GetHasherCommon(handle)[1]); +static uint32_t* FN(Addr)(void* extra) { + return (uint32_t*)extra; +} + +static uint16_t* FN(Head)(void* extra) { + return (uint16_t*)(&FN(Addr)(extra)[BUCKET_SIZE]); +} + +static uint8_t* FN(TinyHash)(void* extra) { + return (uint8_t*)(&FN(Head)(extra)[BUCKET_SIZE]); +} + +static FN(Bank)* FN(Banks)(void* extra) { + return (FN(Bank)*)(&FN(TinyHash)(extra)[65536]); } static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - FN(Self)(handle)->max_hops = - (params->quality > 6 ? 7u : 8u) << (params->quality - 4); + HasherCommon* common, HashForgetfulChain* BROTLI_RESTRICT self, + const BrotliEncoderParams* params) { + self->common = common; + self->extra = common->extra; + + self->max_hops = (params->quality > 6 ? 7u : 8u) << (params->quality - 4); } -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashForgetfulChain* self = FN(Self)(handle); +static void FN(Prepare)( + HashForgetfulChain* BROTLI_RESTRICT self, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* BROTLI_RESTRICT data) { + uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra); + uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra); + uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra); /* Partial preparation is 100 times slower (per socket). */ size_t partial_prepare_threshold = BUCKET_SIZE >> 6; if (one_shot && input_size <= partial_prepare_threshold) { @@ -74,17 +102,17 @@ for (i = 0; i < input_size; ++i) { size_t bucket = FN(HashBytes)(&data[i]); /* See InitEmpty comment. */ - self->addr[bucket] = 0xCCCCCCCC; - self->head[bucket] = 0xCCCC; + addr[bucket] = 0xCCCCCCCC; + head[bucket] = 0xCCCC; } } else { /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position processed by hasher never reaches 3GB + 64M; this makes all new chains to be terminated after the first node. */ - memset(self->addr, 0xCC, sizeof(self->addr)); - memset(self->head, 0, sizeof(self->head)); + memset(addr, 0xCC, sizeof(uint32_t) * BUCKET_SIZE); + memset(head, 0, sizeof(uint16_t) * BUCKET_SIZE); } - memset(self->tiny_hash, 0, sizeof(self->tiny_hash)); + memset(tiny_hash, 0, sizeof(uint8_t) * 65536); memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx)); } @@ -94,51 +122,58 @@ BROTLI_UNUSED(params); BROTLI_UNUSED(one_shot); BROTLI_UNUSED(input_size); - return sizeof(HashForgetfulChain); + return sizeof(uint32_t) * BUCKET_SIZE + sizeof(uint16_t) * BUCKET_SIZE + + sizeof(uint8_t) * 65536 + sizeof(FN(Bank)) * NUM_BANKS; } /* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend node to corresponding chain; also update tiny_hash for current position. */ -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle, +static BROTLI_INLINE void FN(Store)(HashForgetfulChain* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { - HashForgetfulChain* self = FN(Self)(handle); + uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra); + uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra); + uint8_t* BROTLI_RESTRICT tiny_hash = FN(TinyHash)(self->extra); + FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra); const size_t key = FN(HashBytes)(&data[ix & mask]); const size_t bank = key & (NUM_BANKS - 1); const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1); - size_t delta = ix - self->addr[key]; - self->tiny_hash[(uint16_t)ix] = (uint8_t)key; + size_t delta = ix - addr[key]; + tiny_hash[(uint16_t)ix] = (uint8_t)key; if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF; - self->banks[bank].slots[idx].delta = (uint16_t)delta; - self->banks[bank].slots[idx].next = self->head[key]; - self->addr[key] = (uint32_t)ix; - self->head[key] = (uint16_t)idx; + banks[bank].slots[idx].delta = (uint16_t)delta; + banks[bank].slots[idx].next = head[key]; + addr[key] = (uint32_t)ix; + head[key] = (uint16_t)idx; } -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { +static BROTLI_INLINE void FN(StoreRange)( + HashForgetfulChain* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, + const size_t ix_start, const size_t ix_end) { size_t i; for (i = ix_start; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); + FN(Store)(self, data, mask, i); } } -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, +static BROTLI_INLINE void FN(StitchToPreviousBlock)( + HashForgetfulChain* BROTLI_RESTRICT self, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ring_buffer_mask) { if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { /* Prepare the hashes for three last bytes of the last write. These could not be calculated before, since they require knowledge of both the previous and the current block. */ - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 3); - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 2); - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 1); + FN(Store)(self, ringbuffer, ring_buffer_mask, position - 3); + FN(Store)(self, ringbuffer, ring_buffer_mask, position - 2); + FN(Store)(self, ringbuffer, ring_buffer_mask, position - 1); } } static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - BROTLI_UNUSED(handle); + HashForgetfulChain* BROTLI_RESTRICT self, + int* BROTLI_RESTRICT distance_cache) { + BROTLI_UNUSED(self); PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK); } @@ -153,14 +188,18 @@ Does not look for matches further away than max_backward. Writes the best match into |out|. |out|->score is updated only if a better match is found. */ -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, +static BROTLI_INLINE void FN(FindLongestMatch)( + HashForgetfulChain* BROTLI_RESTRICT self, const BrotliEncoderDictionary* dictionary, const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, const size_t max_length, const size_t max_backward, - const size_t gap, const size_t max_distance, + const size_t dictionary_distance, const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HashForgetfulChain* self = FN(Self)(handle); + uint32_t* BROTLI_RESTRICT addr = FN(Addr)(self->extra); + uint16_t* BROTLI_RESTRICT head = FN(Head)(self->extra); + uint8_t* BROTLI_RESTRICT tiny_hashes = FN(TinyHash)(self->extra); + FN(Bank)* BROTLI_RESTRICT banks = FN(Banks)(self->extra); const size_t cur_ix_masked = cur_ix & ring_buffer_mask; /* Don't accept a short copy from far away. */ score_t min_score = out->score; @@ -176,7 +215,7 @@ const size_t backward = (size_t)distance_cache[i]; size_t prev_ix = (cur_ix - backward); /* For distance code 0 we want to consider 2-byte matches. */ - if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] != tiny_hash) continue; + if (i > 0 && tiny_hashes[(uint16_t)prev_ix] != tiny_hash) continue; if (prev_ix >= cur_ix || backward > max_backward) { continue; } @@ -204,16 +243,16 @@ const size_t bank = key & (NUM_BANKS - 1); size_t backward = 0; size_t hops = self->max_hops; - size_t delta = cur_ix - self->addr[key]; - size_t slot = self->head[key]; + size_t delta = cur_ix - addr[key]; + size_t slot = head[key]; while (hops--) { size_t prev_ix; size_t last = slot; backward += delta; if (backward > max_backward || (CAPPED_CHAINS && !delta)) break; prev_ix = (cur_ix - backward) & ring_buffer_mask; - slot = self->banks[bank].slots[last].next; - delta = self->banks[bank].slots[last].delta; + slot = banks[bank].slots[last].next; + delta = banks[bank].slots[last].delta; if (cur_ix_masked + best_len > ring_buffer_mask || prev_ix + best_len > ring_buffer_mask || data[cur_ix_masked + best_len] != data[prev_ix + best_len]) { @@ -238,11 +277,11 @@ } } } - FN(Store)(handle, data, ring_buffer_mask, cur_ix); + FN(Store)(self, data, ring_buffer_mask, cur_ix); } if (out->score == min_score) { SearchInStaticDictionary(dictionary, - handle, &data[cur_ix_masked], max_length, max_backward + gap, + self->common, &data[cur_ix_masked], max_length, dictionary_distance, max_distance, out, BROTLI_FALSE); } } diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash.h 2022-04-05 07:16:59.000000000 +0000 @@ -27,34 +27,19 @@ extern "C" { #endif -/* Pointer to hasher data. - * - * Excluding initialization and destruction, hasher can be passed as - * HasherHandle by value. - * - * Typically hasher data consists of 3 sections: - * * HasherCommon structure - * * private structured hasher data, depending on hasher type - * * private dynamic hasher data, depending on hasher type and parameters - * - * Using "define" instead of "typedef", because on MSVC __restrict does not work - * on typedef pointer types. */ -#define HasherHandle uint8_t* - typedef struct { + /* Dynamically allocated area; first member for quickest access. */ + void* extra; + + size_t dict_num_lookups; + size_t dict_num_matches; + BrotliHasherParams params; /* False if hasher needs to be "prepared" before use. */ BROTLI_BOOL is_prepared_; - - size_t dict_num_lookups; - size_t dict_num_matches; } HasherCommon; -static BROTLI_INLINE HasherCommon* GetHasherCommon(HasherHandle handle) { - return (HasherCommon*)handle; -} - #define score_t size_t static const uint32_t kCutoffTransformsCount = 10; @@ -149,17 +134,13 @@ } static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem( - const BrotliEncoderDictionary* dictionary, size_t item, + const BrotliEncoderDictionary* dictionary, size_t len, size_t word_idx, const uint8_t* data, size_t max_length, size_t max_backward, size_t max_distance, HasherSearchResult* out) { - size_t len; - size_t word_idx; size_t offset; size_t matchlen; size_t backward; score_t score; - len = item & 0x1F; - word_idx = item >> 5; offset = dictionary->words->offsets_by_length[len] + len * word_idx; if (len > max_length) { return BROTLI_FALSE; @@ -193,25 +174,24 @@ static BROTLI_INLINE void SearchInStaticDictionary( const BrotliEncoderDictionary* dictionary, - HasherHandle handle, const uint8_t* data, size_t max_length, + HasherCommon* common, const uint8_t* data, size_t max_length, size_t max_backward, size_t max_distance, HasherSearchResult* out, BROTLI_BOOL shallow) { size_t key; size_t i; - HasherCommon* self = GetHasherCommon(handle); - if (self->dict_num_matches < (self->dict_num_lookups >> 7)) { + if (common->dict_num_matches < (common->dict_num_lookups >> 7)) { return; } key = Hash14(data) << 1; for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) { - size_t item = dictionary->hash_table[key]; - self->dict_num_lookups++; - if (item != 0) { + common->dict_num_lookups++; + if (dictionary->hash_table_lengths[key] != 0) { BROTLI_BOOL item_matches = TestStaticDictionaryItem( - dictionary, item, data, + dictionary, dictionary->hash_table_lengths[key], + dictionary->hash_table_words[key], data, max_length, max_backward, max_distance, out); if (item_matches) { - self->dict_num_matches++; + common->dict_num_matches++; } } } @@ -260,37 +240,37 @@ /* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */ #define MAX_NUM_MATCHES_H10 128 -/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes compression +/* For BUCKET_SWEEP_BITS == 0, enabling the dictionary lookup makes compression a little faster (0.5% - 1%) and it compresses 0.15% better on small text and HTML inputs. */ #define HASHER() H2 #define BUCKET_BITS 16 -#define BUCKET_SWEEP 1 +#define BUCKET_SWEEP_BITS 0 #define HASH_LEN 5 #define USE_DICTIONARY 1 #include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ -#undef BUCKET_SWEEP +#undef BUCKET_SWEEP_BITS #undef USE_DICTIONARY #undef HASHER #define HASHER() H3 -#define BUCKET_SWEEP 2 +#define BUCKET_SWEEP_BITS 1 #define USE_DICTIONARY 0 #include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ #undef USE_DICTIONARY -#undef BUCKET_SWEEP +#undef BUCKET_SWEEP_BITS #undef BUCKET_BITS #undef HASHER #define HASHER() H4 #define BUCKET_BITS 17 -#define BUCKET_SWEEP 4 +#define BUCKET_SWEEP_BITS 2 #define USE_DICTIONARY 1 #include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ #undef USE_DICTIONARY #undef HASH_LEN -#undef BUCKET_SWEEP +#undef BUCKET_SWEEP_BITS #undef BUCKET_BITS #undef HASHER @@ -334,13 +314,13 @@ #define HASHER() H54 #define BUCKET_BITS 20 -#define BUCKET_SWEEP 4 +#define BUCKET_SWEEP_BITS 2 #define HASH_LEN 7 #define USE_DICTIONARY 0 #include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */ #undef USE_DICTIONARY #undef HASH_LEN -#undef BUCKET_SWEEP +#undef BUCKET_SWEEP_BITS #undef BUCKET_BITS #undef HASHER @@ -393,97 +373,107 @@ #undef CAT #undef EXPAND_CAT -#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54)\ - H(35) H(55) H(65) +#define FOR_SIMPLE_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54) +#define FOR_COMPOSITE_HASHERS(H) H(35) H(55) H(65) +#define FOR_GENERIC_HASHERS(H) FOR_SIMPLE_HASHERS(H) FOR_COMPOSITE_HASHERS(H) #define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10) -static BROTLI_INLINE void DestroyHasher( - MemoryManager* m, HasherHandle* handle) { - if (*handle == NULL) return; - BROTLI_FREE(m, *handle); +typedef struct { + HasherCommon common; + + union { +#define MEMBER_(N) \ + H ## N _H ## N; + FOR_ALL_HASHERS(MEMBER_) +#undef MEMBER_ + } privat; +} Hasher; + +/* MUST be invoked before any other method. */ +static BROTLI_INLINE void HasherInit(Hasher* hasher) { + hasher->common.extra = NULL; +} + +static BROTLI_INLINE void DestroyHasher(MemoryManager* m, Hasher* hasher) { + if (hasher->common.extra == NULL) return; + BROTLI_FREE(m, hasher->common.extra); } -static BROTLI_INLINE void HasherReset(HasherHandle handle) { - if (handle == NULL) return; - GetHasherCommon(handle)->is_prepared_ = BROTLI_FALSE; +static BROTLI_INLINE void HasherReset(Hasher* hasher) { + hasher->common.is_prepared_ = BROTLI_FALSE; } static BROTLI_INLINE size_t HasherSize(const BrotliEncoderParams* params, BROTLI_BOOL one_shot, const size_t input_size) { - size_t result = sizeof(HasherCommon); switch (params->hasher.type) { -#define SIZE_(N) \ - case N: \ - result += HashMemAllocInBytesH ## N(params, one_shot, input_size); \ - break; +#define SIZE_(N) \ + case N: \ + return HashMemAllocInBytesH ## N(params, one_shot, input_size); FOR_ALL_HASHERS(SIZE_) #undef SIZE_ default: break; } - return result; + return 0; /* Default case. */ } -static BROTLI_INLINE void HasherSetup(MemoryManager* m, HasherHandle* handle, +static BROTLI_INLINE void HasherSetup(MemoryManager* m, Hasher* hasher, BrotliEncoderParams* params, const uint8_t* data, size_t position, size_t input_size, BROTLI_BOOL is_last) { - HasherHandle self = NULL; - HasherCommon* common = NULL; BROTLI_BOOL one_shot = (position == 0 && is_last); - if (*handle == NULL) { + if (hasher->common.extra == NULL) { size_t alloc_size; ChooseHasher(params, ¶ms->hasher); alloc_size = HasherSize(params, one_shot, input_size); - self = BROTLI_ALLOC(m, uint8_t, alloc_size); - if (BROTLI_IS_OOM(m)) return; - *handle = self; - common = GetHasherCommon(self); - common->params = params->hasher; - switch (common->params.type) { -#define INITIALIZE_(N) \ - case N: \ - InitializeH ## N(*handle, params); \ + hasher->common.extra = BROTLI_ALLOC(m, uint8_t, alloc_size); + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(hasher->common.extra)) return; + hasher->common.params = params->hasher; + switch (hasher->common.params.type) { +#define INITIALIZE_(N) \ + case N: \ + InitializeH ## N(&hasher->common, \ + &hasher->privat._H ## N, params); \ break; FOR_ALL_HASHERS(INITIALIZE_); #undef INITIALIZE_ default: break; } - HasherReset(*handle); + HasherReset(hasher); } - self = *handle; - common = GetHasherCommon(self); - if (!common->is_prepared_) { - switch (common->params.type) { -#define PREPARE_(N) \ - case N: \ - PrepareH ## N(self, one_shot, input_size, data); \ + if (!hasher->common.is_prepared_) { + switch (hasher->common.params.type) { +#define PREPARE_(N) \ + case N: \ + PrepareH ## N( \ + &hasher->privat._H ## N, \ + one_shot, input_size, data); \ break; FOR_ALL_HASHERS(PREPARE_) #undef PREPARE_ default: break; } if (position == 0) { - common->dict_num_lookups = 0; - common->dict_num_matches = 0; + hasher->common.dict_num_lookups = 0; + hasher->common.dict_num_matches = 0; } - common->is_prepared_ = BROTLI_TRUE; + hasher->common.is_prepared_ = BROTLI_TRUE; } } static BROTLI_INLINE void InitOrStitchToPreviousBlock( - MemoryManager* m, HasherHandle* handle, const uint8_t* data, size_t mask, + MemoryManager* m, Hasher* hasher, const uint8_t* data, size_t mask, BrotliEncoderParams* params, size_t position, size_t input_size, BROTLI_BOOL is_last) { - HasherHandle self; - HasherSetup(m, handle, params, data, position, input_size, is_last); + HasherSetup(m, hasher, params, data, position, input_size, is_last); if (BROTLI_IS_OOM(m)) return; - self = *handle; - switch (GetHasherCommon(self)->params.type) { -#define INIT_(N) \ - case N: \ - StitchToPreviousBlockH ## N(self, input_size, position, data, mask); \ + switch (hasher->common.params.type) { +#define INIT_(N) \ + case N: \ + StitchToPreviousBlockH ## N( \ + &hasher->privat._H ## N, \ + input_size, position, data, mask); \ break; FOR_ALL_HASHERS(INIT_) #undef INIT_ diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_longest_match64_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_longest_match64_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_longest_match64_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_longest_match64_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -20,7 +20,7 @@ static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; } /* HashBytes is the function that chooses the bucket to place the address in. */ -static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t* data, +static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data, const uint64_t mask, const int shift) { const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(data) & mask) * kHashMul64Long; @@ -42,43 +42,43 @@ /* Mask for accessing entries in a block (in a ring-buffer manner). */ uint32_t block_mask_; + int block_bits_; + int num_last_distances_to_check_; + + /* Shortcuts. */ + HasherCommon* common_; + /* --- Dynamic size members --- */ /* Number of entries in a particular bucket. */ - /* uint16_t num[bucket_size]; */ + uint16_t* num_; /* uint16_t[bucket_size]; */ /* Buckets containing block_size_ of backward references. */ - /* uint32_t* buckets[bucket_size * block_size]; */ + uint32_t* buckets_; /* uint32_t[bucket_size * block_size]; */ } HashLongestMatch; -static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) { - return (HashLongestMatch*)&(GetHasherCommon(handle)[1]); -} - -static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) { - return (uint16_t*)(&self[1]); -} - -static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) { - return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]); -} - static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HasherCommon* common = GetHasherCommon(handle); - HashLongestMatch* self = FN(Self)(handle); + HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self, + const BrotliEncoderParams* params) { + self->common_ = common; + BROTLI_UNUSED(params); self->hash_shift_ = 64 - common->params.bucket_bits; self->hash_mask_ = (~((uint64_t)0U)) >> (64 - 8 * common->params.hash_len); self->bucket_size_ = (size_t)1 << common->params.bucket_bits; + self->block_bits_ = common->params.block_bits; self->block_size_ = (size_t)1 << common->params.block_bits; self->block_mask_ = (uint32_t)(self->block_size_ - 1); + self->num_last_distances_to_check_ = + common->params.num_last_distances_to_check; + self->num_ = (uint16_t*)common->extra; + self->buckets_ = (uint32_t*)&self->num_[self->bucket_size_]; } -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashLongestMatch* self = FN(Self)(handle); - uint16_t* num = FN(Num)(self); +static void FN(Prepare)( + HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* BROTLI_RESTRICT data) { + uint16_t* BROTLI_RESTRICT num = self->num_; /* Partial preparation is 100 times slower (per socket). */ size_t partial_prepare_threshold = self->bucket_size_ >> 6; if (one_shot && input_size <= partial_prepare_threshold) { @@ -100,50 +100,52 @@ size_t block_size = (size_t)1 << params->hasher.block_bits; BROTLI_UNUSED(one_shot); BROTLI_UNUSED(input_size); - return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size); + return sizeof(uint16_t) * bucket_size + + sizeof(uint32_t) * bucket_size * block_size; } /* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and store the value of ix at that position. */ -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data, +static BROTLI_INLINE void FN(Store)( + HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { - HashLongestMatch* self = FN(Self)(handle); - uint16_t* num = FN(Num)(self); + uint16_t* BROTLI_RESTRICT num = self->num_; + uint32_t* BROTLI_RESTRICT buckets = self->buckets_; const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_mask_, self->hash_shift_); const size_t minor_ix = num[key] & self->block_mask_; - const size_t offset = - minor_ix + (key << GetHasherCommon(handle)->params.block_bits); - FN(Buckets)(self)[offset] = (uint32_t)ix; + const size_t offset = minor_ix + (key << self->block_bits_); ++num[key]; + buckets[offset] = (uint32_t)ix; } -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { +static BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, + const size_t ix_start, const size_t ix_end) { size_t i; for (i = ix_start; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); + FN(Store)(self, data, mask, i); } } -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, +static BROTLI_INLINE void FN(StitchToPreviousBlock)( + HashLongestMatch* BROTLI_RESTRICT self, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask) { if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { /* Prepare the hashes for three last bytes of the last write. These could not be calculated before, since they require knowledge of both the previous and the current block. */ - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1); } } static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - PrepareDistanceCache(distance_cache, - GetHasherCommon(handle)->params.num_last_distances_to_check); + HashLongestMatch* BROTLI_RESTRICT self, + int* BROTLI_RESTRICT distance_cache) { + PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_); } /* Find a longest backward match of &data[cur_ix] up to the length of @@ -157,17 +159,16 @@ Does not look for matches further away than max_backward. Writes the best match into |out|. |out|->score is updated only if a better match is found. */ -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, +static BROTLI_INLINE void FN(FindLongestMatch)( + HashLongestMatch* BROTLI_RESTRICT self, const BrotliEncoderDictionary* dictionary, const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, const size_t max_length, const size_t max_backward, - const size_t gap, const size_t max_distance, + const size_t dictionary_distance, const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HasherCommon* common = GetHasherCommon(handle); - HashLongestMatch* self = FN(Self)(handle); - uint16_t* num = FN(Num)(self); - uint32_t* buckets = FN(Buckets)(self); + uint16_t* BROTLI_RESTRICT num = self->num_; + uint32_t* BROTLI_RESTRICT buckets = self->buckets_; const size_t cur_ix_masked = cur_ix & ring_buffer_mask; /* Don't accept a short copy from far away. */ score_t min_score = out->score; @@ -177,7 +178,7 @@ out->len = 0; out->len_code_delta = 0; /* Try last distance first. */ - for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) { + for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) { const size_t backward = (size_t)distance_cache[i]; size_t prev_ix = (size_t)(cur_ix - backward); if (prev_ix >= cur_ix) { @@ -218,8 +219,7 @@ { const uint32_t key = FN(HashBytes)( &data[cur_ix_masked], self->hash_mask_, self->hash_shift_); - uint32_t* BROTLI_RESTRICT bucket = - &buckets[key << common->params.block_bits]; + uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_]; const size_t down = (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u; @@ -259,7 +259,7 @@ } if (min_score == out->score) { SearchInStaticDictionary(dictionary, - handle, &data[cur_ix_masked], max_length, max_backward + gap, + self->common_, &data[cur_ix_masked], max_length, dictionary_distance, max_distance, out, BROTLI_FALSE); } } diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_longest_match_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_longest_match_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_longest_match_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_longest_match_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -20,7 +20,8 @@ static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; } /* HashBytes is the function that chooses the bucket to place the address in. */ -static uint32_t FN(HashBytes)(const uint8_t* data, const int shift) { +static uint32_t FN(HashBytes)( + const uint8_t* BROTLI_RESTRICT data, const int shift) { uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32; /* The higher bits contain more mixture from the multiplication, so we take our results from there. */ @@ -38,42 +39,46 @@ /* Mask for accessing entries in a block (in a ring-buffer manner). */ uint32_t block_mask_; + int block_bits_; + int num_last_distances_to_check_; + + /* Shortcuts. */ + HasherCommon* common_; + /* --- Dynamic size members --- */ /* Number of entries in a particular bucket. */ - /* uint16_t num[bucket_size]; */ + uint16_t* num_; /* uint16_t[bucket_size]; */ /* Buckets containing block_size_ of backward references. */ - /* uint32_t* buckets[bucket_size * block_size]; */ + uint32_t* buckets_; /* uint32_t[bucket_size * block_size]; */ } HashLongestMatch; -static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) { - return (HashLongestMatch*)&(GetHasherCommon(handle)[1]); -} - -static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) { - return (uint16_t*)(&self[1]); -} - -static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) { - return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]); +static BROTLI_INLINE uint16_t* FN(Num)(void* extra) { + return (uint16_t*)extra; } static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HasherCommon* common = GetHasherCommon(handle); - HashLongestMatch* self = FN(Self)(handle); + HasherCommon* common, HashLongestMatch* BROTLI_RESTRICT self, + const BrotliEncoderParams* params) { + self->common_ = common; + BROTLI_UNUSED(params); self->hash_shift_ = 32 - common->params.bucket_bits; self->bucket_size_ = (size_t)1 << common->params.bucket_bits; self->block_size_ = (size_t)1 << common->params.block_bits; self->block_mask_ = (uint32_t)(self->block_size_ - 1); + self->num_ = (uint16_t*)common->extra; + self->buckets_ = (uint32_t*)(&self->num_[self->bucket_size_]); + self->block_bits_ = common->params.block_bits; + self->num_last_distances_to_check_ = + common->params.num_last_distances_to_check; } -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashLongestMatch* self = FN(Self)(handle); - uint16_t* num = FN(Num)(self); +static void FN(Prepare)( + HashLongestMatch* BROTLI_RESTRICT self, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* BROTLI_RESTRICT data) { + uint16_t* BROTLI_RESTRICT num = self->num_; /* Partial preparation is 100 times slower (per socket). */ size_t partial_prepare_threshold = self->bucket_size_ >> 6; if (one_shot && input_size <= partial_prepare_threshold) { @@ -94,49 +99,49 @@ size_t block_size = (size_t)1 << params->hasher.block_bits; BROTLI_UNUSED(one_shot); BROTLI_UNUSED(input_size); - return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size); + return sizeof(uint16_t) * bucket_size + + sizeof(uint32_t) * bucket_size * block_size; } /* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and store the value of ix at that position. */ -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data, +static BROTLI_INLINE void FN(Store)( + HashLongestMatch* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { - HashLongestMatch* self = FN(Self)(handle); - uint16_t* num = FN(Num)(self); const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_); - const size_t minor_ix = num[key] & self->block_mask_; - const size_t offset = - minor_ix + (key << GetHasherCommon(handle)->params.block_bits); - FN(Buckets)(self)[offset] = (uint32_t)ix; - ++num[key]; + const size_t minor_ix = self->num_[key] & self->block_mask_; + const size_t offset = minor_ix + (key << self->block_bits_); + self->buckets_[offset] = (uint32_t)ix; + ++self->num_[key]; } -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { +static BROTLI_INLINE void FN(StoreRange)(HashLongestMatch* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, + const size_t ix_start, const size_t ix_end) { size_t i; for (i = ix_start; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); + FN(Store)(self, data, mask, i); } } -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, +static BROTLI_INLINE void FN(StitchToPreviousBlock)( + HashLongestMatch* BROTLI_RESTRICT self, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask) { if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { /* Prepare the hashes for three last bytes of the last write. These could not be calculated before, since they require knowledge of both the previous and the current block. */ - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1); } } static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - PrepareDistanceCache(distance_cache, - GetHasherCommon(handle)->params.num_last_distances_to_check); + HashLongestMatch* BROTLI_RESTRICT self, + int* BROTLI_RESTRICT distance_cache) { + PrepareDistanceCache(distance_cache, self->num_last_distances_to_check_); } /* Find a longest backward match of &data[cur_ix] up to the length of @@ -150,17 +155,16 @@ Does not look for matches further away than max_backward. Writes the best match into |out|. |out|->score is updated only if a better match is found. */ -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, +static BROTLI_INLINE void FN(FindLongestMatch)( + HashLongestMatch* BROTLI_RESTRICT self, const BrotliEncoderDictionary* dictionary, const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, const size_t max_length, const size_t max_backward, - const size_t gap, const size_t max_distance, + const size_t dictionary_distance, const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HasherCommon* common = GetHasherCommon(handle); - HashLongestMatch* self = FN(Self)(handle); - uint16_t* num = FN(Num)(self); - uint32_t* buckets = FN(Buckets)(self); + uint16_t* BROTLI_RESTRICT num = self->num_; + uint32_t* BROTLI_RESTRICT buckets = self->buckets_; const size_t cur_ix_masked = cur_ix & ring_buffer_mask; /* Don't accept a short copy from far away. */ score_t min_score = out->score; @@ -170,7 +174,7 @@ out->len = 0; out->len_code_delta = 0; /* Try last distance first. */ - for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) { + for (i = 0; i < (size_t)self->num_last_distances_to_check_; ++i) { const size_t backward = (size_t)distance_cache[i]; size_t prev_ix = (size_t)(cur_ix - backward); if (prev_ix >= cur_ix) { @@ -211,8 +215,7 @@ { const uint32_t key = FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_); - uint32_t* BROTLI_RESTRICT bucket = - &buckets[key << common->params.block_bits]; + uint32_t* BROTLI_RESTRICT bucket = &buckets[key << self->block_bits_]; const size_t down = (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u; for (i = num[key]; i > down;) { @@ -251,7 +254,7 @@ } if (min_score == out->score) { SearchInStaticDictionary(dictionary, - handle, &data[cur_ix_masked], max_length, max_backward + gap, + self->common_, &data[cur_ix_masked], max_length, dictionary_distance, max_distance, out, BROTLI_FALSE); } } diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_longest_match_quickly_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_longest_match_quickly_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_longest_match_quickly_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_longest_match_quickly_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -5,15 +5,16 @@ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ -/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, HASH_LEN, +/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP_BITS, HASH_LEN, USE_DICTIONARY */ #define HashLongestMatchQuickly HASHER() #define BUCKET_SIZE (1 << BUCKET_BITS) - -#define HASH_MAP_SIZE (4 << BUCKET_BITS) +#define BUCKET_MASK (BUCKET_SIZE - 1) +#define BUCKET_SWEEP (1 << BUCKET_SWEEP_BITS) +#define BUCKET_SWEEP_MASK ((BUCKET_SWEEP - 1) << 3) static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; } static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; } @@ -32,39 +33,50 @@ /* A (forgetful) hash table to the data seen by the compressor, to help create backward references to previous data. - This is a hash map of fixed size (BUCKET_SIZE). Starting from the - given index, BUCKET_SWEEP buckets are used to store values of a key. */ + This is a hash map of fixed size (BUCKET_SIZE). */ typedef struct HashLongestMatchQuickly { - uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP]; -} HashLongestMatchQuickly; + /* Shortcuts. */ + HasherCommon* common; -static BROTLI_INLINE HashLongestMatchQuickly* FN(Self)(HasherHandle handle) { - return (HashLongestMatchQuickly*)&(GetHasherCommon(handle)[1]); -} + /* --- Dynamic size members --- */ + + uint32_t* buckets_; /* uint32_t[BUCKET_SIZE]; */ +} HashLongestMatchQuickly; static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - BROTLI_UNUSED(handle); + HasherCommon* common, HashLongestMatchQuickly* BROTLI_RESTRICT self, + const BrotliEncoderParams* params) { + self->common = common; + BROTLI_UNUSED(params); + self->buckets_ = (uint32_t*)common->extra; } -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashLongestMatchQuickly* self = FN(Self)(handle); +static void FN(Prepare)( + HashLongestMatchQuickly* BROTLI_RESTRICT self, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* BROTLI_RESTRICT data) { + uint32_t* BROTLI_RESTRICT buckets = self->buckets_; /* Partial preparation is 100 times slower (per socket). */ - size_t partial_prepare_threshold = HASH_MAP_SIZE >> 7; + size_t partial_prepare_threshold = BUCKET_SIZE >> 5; if (one_shot && input_size <= partial_prepare_threshold) { size_t i; for (i = 0; i < input_size; ++i) { const uint32_t key = FN(HashBytes)(&data[i]); - memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self->buckets_[0])); + if (BUCKET_SWEEP == 1) { + buckets[key] = 0; + } else { + uint32_t j; + for (j = 0; j < BUCKET_SWEEP; ++j) { + buckets[(key + (j << 3)) & BUCKET_MASK] = 0; + } + } } } else { /* It is not strictly necessary to fill this buffer here, but not filling will make the results of the compression stochastic (but correct). This is because random data would cause the system to find accidentally good backward references here and there. */ - memset(&self->buckets_[0], 0, sizeof(self->buckets_)); + memset(buckets, 0, sizeof(uint32_t) * BUCKET_SIZE); } } @@ -74,45 +86,53 @@ BROTLI_UNUSED(params); BROTLI_UNUSED(one_shot); BROTLI_UNUSED(input_size); - return sizeof(HashLongestMatchQuickly); + return sizeof(uint32_t) * BUCKET_SIZE; } /* Look at 5 bytes at &data[ix & mask]. Compute a hash from these, and store the value somewhere within [ix .. ix+3]. */ -static BROTLI_INLINE void FN(Store)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix) { +static BROTLI_INLINE void FN(Store)( + HashLongestMatchQuickly* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { const uint32_t key = FN(HashBytes)(&data[ix & mask]); - /* Wiggle the value with the bucket sweep range. */ - const uint32_t off = (ix >> 3) % BUCKET_SWEEP; - FN(Self)(handle)->buckets_[key + off] = (uint32_t)ix; + if (BUCKET_SWEEP == 1) { + self->buckets_[key] = (uint32_t)ix; + } else { + /* Wiggle the value with the bucket sweep range. */ + const uint32_t off = ix & BUCKET_SWEEP_MASK; + self->buckets_[(key + off) & BUCKET_MASK] = (uint32_t)ix; + } } -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { +static BROTLI_INLINE void FN(StoreRange)( + HashLongestMatchQuickly* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, + const size_t ix_start, const size_t ix_end) { size_t i; for (i = ix_start; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); + FN(Store)(self, data, mask, i); } } static BROTLI_INLINE void FN(StitchToPreviousBlock)( - HasherHandle handle, size_t num_bytes, size_t position, + HashLongestMatchQuickly* BROTLI_RESTRICT self, + size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask) { if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) { /* Prepare the hashes for three last bytes of the last write. These could not be calculated before, since they require knowledge of both the previous and the current block. */ - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2); - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 3); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 2); + FN(Store)(self, ringbuffer, ringbuffer_mask, position - 1); } } static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - BROTLI_UNUSED(handle); + HashLongestMatchQuickly* BROTLI_RESTRICT self, + int* BROTLI_RESTRICT distance_cache) { + BROTLI_UNUSED(self); BROTLI_UNUSED(distance_cache); } @@ -125,17 +145,19 @@ Writes the best match into |out|. |out|->score is updated only if a better match is found. */ static BROTLI_INLINE void FN(FindLongestMatch)( - HasherHandle handle, const BrotliEncoderDictionary* dictionary, + HashLongestMatchQuickly* BROTLI_RESTRICT self, + const BrotliEncoderDictionary* dictionary, const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, const size_t max_length, const size_t max_backward, - const size_t gap, const size_t max_distance, + const size_t dictionary_distance, const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HashLongestMatchQuickly* self = FN(Self)(handle); + uint32_t* BROTLI_RESTRICT buckets = self->buckets_; const size_t best_len_in = out->len; const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]); int compare_char = data[cur_ix_masked + best_len_in]; + size_t key = FN(HashBytes)(&data[cur_ix_masked]); + size_t key_out; score_t min_score = out->score; score_t best_score = out->score; size_t best_len = best_len_in; @@ -145,21 +167,21 @@ if (prev_ix < cur_ix) { prev_ix &= (uint32_t)ring_buffer_mask; if (compare_char == data[prev_ix + best_len]) { - size_t len = FindMatchLengthWithLimit(&data[prev_ix], - &data[cur_ix_masked], - max_length); + const size_t len = FindMatchLengthWithLimit( + &data[prev_ix], &data[cur_ix_masked], max_length); if (len >= 4) { const score_t score = BackwardReferenceScoreUsingLastDistance(len); if (best_score < score) { - best_score = score; - best_len = len; out->len = len; out->distance = cached_backward; - out->score = best_score; - compare_char = data[cur_ix_masked + best_len]; + out->score = score; if (BUCKET_SWEEP == 1) { - self->buckets_[key] = (uint32_t)cur_ix; + buckets[key] = (uint32_t)cur_ix; return; + } else { + best_len = len; + best_score = score; + compare_char = data[cur_ix_masked + len]; } } } @@ -169,8 +191,8 @@ size_t backward; size_t len; /* Only one to look for, don't bother to prepare for a loop. */ - prev_ix = self->buckets_[key]; - self->buckets_[key] = (uint32_t)cur_ix; + prev_ix = buckets[key]; + buckets[key] = (uint32_t)cur_ix; backward = cur_ix - prev_ix; prev_ix &= (uint32_t)ring_buffer_mask; if (compare_char != data[prev_ix + best_len_in]) { @@ -192,12 +214,17 @@ } } } else { - uint32_t* bucket = self->buckets_ + key; - int i; - prev_ix = *bucket++; - for (i = 0; i < BUCKET_SWEEP; ++i, prev_ix = *bucket++) { - const size_t backward = cur_ix - prev_ix; + size_t keys[BUCKET_SWEEP]; + size_t i; + for (i = 0; i < BUCKET_SWEEP; ++i) { + keys[i] = (key + (i << 3)) & BUCKET_MASK; + } + key_out = keys[(cur_ix & BUCKET_SWEEP_MASK) >> 3]; + for (i = 0; i < BUCKET_SWEEP; ++i) { size_t len; + size_t backward; + prev_ix = buckets[keys[i]]; + backward = cur_ix - prev_ix; prev_ix &= (uint32_t)ring_buffer_mask; if (compare_char != data[prev_ix + best_len]) { continue; @@ -211,25 +238,29 @@ if (len >= 4) { const score_t score = BackwardReferenceScore(len, backward); if (best_score < score) { - best_score = score; best_len = len; - out->len = best_len; - out->distance = backward; + out->len = len; + compare_char = data[cur_ix_masked + len]; + best_score = score; out->score = score; - compare_char = data[cur_ix_masked + best_len]; + out->distance = backward; } } } } if (USE_DICTIONARY && min_score == out->score) { SearchInStaticDictionary(dictionary, - handle, &data[cur_ix_masked], max_length, max_backward + gap, + self->common, &data[cur_ix_masked], max_length, dictionary_distance, max_distance, out, BROTLI_TRUE); } - self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] = (uint32_t)cur_ix; + if (BUCKET_SWEEP != 1) { + buckets[key_out] = (uint32_t)cur_ix; + } } -#undef HASH_MAP_SIZE +#undef BUCKET_SWEEP_MASK +#undef BUCKET_SWEEP +#undef BUCKET_MASK #undef BUCKET_SIZE #undef HashLongestMatchQuickly diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_rolling_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_rolling_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_rolling_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_rolling_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -51,13 +51,9 @@ uint32_t factor_remove; } HashRolling; -static BROTLI_INLINE HashRolling* FN(Self)(HasherHandle handle) { - return (HashRolling*)&(GetHasherCommon(handle)[1]); -} - static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HashRolling* self = FN(Self)(handle); + HasherCommon* common, HashRolling* BROTLI_RESTRICT self, + const BrotliEncoderParams* params) { size_t i; self->state = 0; self->next_ix = 0; @@ -71,7 +67,7 @@ self->factor_remove *= self->factor; } - self->table = (uint32_t*)((HasherHandle)self + sizeof(HashRolling)); + self->table = (uint32_t*)common->extra; for (i = 0; i < NUMBUCKETS; i++) { self->table[i] = FN(kInvalidPos); } @@ -79,9 +75,8 @@ BROTLI_UNUSED(params); } -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashRolling* self = FN(Self)(handle); +static void FN(Prepare)(HashRolling* BROTLI_RESTRICT self, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* BROTLI_RESTRICT data) { size_t i; /* Too small size, cannot use this hasher. */ if (input_size < CHUNKLEN) return; @@ -96,36 +91,36 @@ static BROTLI_INLINE size_t FN(HashMemAllocInBytes)( const BrotliEncoderParams* params, BROTLI_BOOL one_shot, size_t input_size) { - return sizeof(HashRolling) + NUMBUCKETS * sizeof(uint32_t); + return NUMBUCKETS * sizeof(uint32_t); BROTLI_UNUSED(params); BROTLI_UNUSED(one_shot); BROTLI_UNUSED(input_size); } -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle, +static BROTLI_INLINE void FN(Store)(HashRolling* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { - BROTLI_UNUSED(handle); + BROTLI_UNUSED(self); BROTLI_UNUSED(data); BROTLI_UNUSED(mask); BROTLI_UNUSED(ix); } -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { - BROTLI_UNUSED(handle); +static BROTLI_INLINE void FN(StoreRange)(HashRolling* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, + const size_t ix_start, const size_t ix_end) { + BROTLI_UNUSED(self); BROTLI_UNUSED(data); BROTLI_UNUSED(mask); BROTLI_UNUSED(ix_start); BROTLI_UNUSED(ix_end); } -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, +static BROTLI_INLINE void FN(StitchToPreviousBlock)( + HashRolling* BROTLI_RESTRICT self, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ring_buffer_mask) { /* In this case we must re-initialize the hasher from scratch from the current position. */ - HashRolling* self = FN(Self)(handle); size_t position_masked; size_t available = num_bytes; if ((position & (JUMP - 1)) != 0) { @@ -139,28 +134,29 @@ available = ring_buffer_mask - position_masked; } - FN(Prepare)(handle, BROTLI_FALSE, available, + FN(Prepare)(self, BROTLI_FALSE, available, ringbuffer + (position & ring_buffer_mask)); self->next_ix = position; BROTLI_UNUSED(num_bytes); } static BROTLI_INLINE void FN(PrepareDistanceCache)( - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) { - BROTLI_UNUSED(handle); + HashRolling* BROTLI_RESTRICT self, + int* BROTLI_RESTRICT distance_cache) { + BROTLI_UNUSED(self); BROTLI_UNUSED(distance_cache); } -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle, +static BROTLI_INLINE void FN(FindLongestMatch)( + HashRolling* BROTLI_RESTRICT self, const BrotliEncoderDictionary* dictionary, const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix, const size_t max_length, const size_t max_backward, - const size_t gap, const size_t max_distance, + const size_t dictionary_distance, const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) { - HashRolling* self = FN(Self)(handle); const size_t cur_ix_masked = cur_ix & ring_buffer_mask; - size_t pos = self->next_ix; + size_t pos; if ((cur_ix & (JUMP - 1)) != 0) return; @@ -209,7 +205,7 @@ backup-hasher, the main hasher already searches in it. */ BROTLI_UNUSED(dictionary); BROTLI_UNUSED(distance_cache); - BROTLI_UNUSED(gap); + BROTLI_UNUSED(dictionary_distance); BROTLI_UNUSED(max_distance); } diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_to_binary_tree_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_to_binary_tree_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/hash_to_binary_tree_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/hash_to_binary_tree_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -24,7 +24,7 @@ return MAX_TREE_COMP_LENGTH; } -static uint32_t FN(HashBytes)(const uint8_t* data) { +static uint32_t FN(HashBytes)(const uint8_t* BROTLI_RESTRICT data) { uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32; /* The higher bits contain more mixture from the multiplication, so we take our results from there. */ @@ -38,7 +38,7 @@ /* Hash table that maps the 4-byte hashes of the sequence to the last position where this hash was found, which is the root of the binary tree of sequences that share this hash bucket. */ - uint32_t buckets_[BUCKET_SIZE]; + uint32_t* buckets_; /* uint32_t[BUCKET_SIZE]; */ /* A position used to mark a non-existent sequence, i.e. a tree is empty if its root is at invalid_pos_ and a node is a leaf if both its children @@ -51,34 +51,30 @@ corresponding to a hash is a sequence starting at buckets_[hash] and the left and right children of a sequence starting at pos are forest_[2 * pos] and forest_[2 * pos + 1]. */ - /* uint32_t forest[2 * num_nodes] */ + uint32_t* forest_; /* uint32_t[2 * num_nodes] */ } HashToBinaryTree; -static BROTLI_INLINE HashToBinaryTree* FN(Self)(HasherHandle handle) { - return (HashToBinaryTree*)&(GetHasherCommon(handle)[1]); -} - -static BROTLI_INLINE uint32_t* FN(Forest)(HashToBinaryTree* self) { - return (uint32_t*)(&self[1]); -} - static void FN(Initialize)( - HasherHandle handle, const BrotliEncoderParams* params) { - HashToBinaryTree* self = FN(Self)(handle); + HasherCommon* common, HashToBinaryTree* BROTLI_RESTRICT self, + const BrotliEncoderParams* params) { + self->buckets_ = (uint32_t*)common->extra; + self->forest_ = &self->buckets_[BUCKET_SIZE]; + self->window_mask_ = (1u << params->lgwin) - 1u; self->invalid_pos_ = (uint32_t)(0 - self->window_mask_); } -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot, - size_t input_size, const uint8_t* data) { - HashToBinaryTree* self = FN(Self)(handle); +static void FN(Prepare) + (HashToBinaryTree* BROTLI_RESTRICT self, BROTLI_BOOL one_shot, + size_t input_size, const uint8_t* BROTLI_RESTRICT data) { uint32_t invalid_pos = self->invalid_pos_; uint32_t i; + uint32_t* BROTLI_RESTRICT buckets = self->buckets_; BROTLI_UNUSED(data); BROTLI_UNUSED(one_shot); BROTLI_UNUSED(input_size); for (i = 0; i < BUCKET_SIZE; i++) { - self->buckets_[i] = invalid_pos; + buckets[i] = invalid_pos; } } @@ -89,15 +85,17 @@ if (one_shot && input_size < num_nodes) { num_nodes = input_size; } - return sizeof(HashToBinaryTree) + 2 * sizeof(uint32_t) * num_nodes; + return sizeof(uint32_t) * BUCKET_SIZE + 2 * sizeof(uint32_t) * num_nodes; } -static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self, +static BROTLI_INLINE size_t FN(LeftChildIndex)( + HashToBinaryTree* BROTLI_RESTRICT self, const size_t pos) { return 2 * (pos & self->window_mask_); } -static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self, +static BROTLI_INLINE size_t FN(RightChildIndex)( + HashToBinaryTree* BROTLI_RESTRICT self, const size_t pos) { return 2 * (pos & self->window_mask_) + 1; } @@ -113,7 +111,7 @@ This function must be called with increasing cur_ix positions. */ static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)( - HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data, + HashToBinaryTree* BROTLI_RESTRICT self, const uint8_t* BROTLI_RESTRICT data, const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length, const size_t max_backward, size_t* const BROTLI_RESTRICT best_len, BackwardMatch* BROTLI_RESTRICT matches) { @@ -123,8 +121,9 @@ const BROTLI_BOOL should_reroot_tree = TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH); const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]); - uint32_t* forest = FN(Forest)(self); - size_t prev_ix = self->buckets_[key]; + uint32_t* BROTLI_RESTRICT buckets = self->buckets_; + uint32_t* BROTLI_RESTRICT forest = self->forest_; + size_t prev_ix = buckets[key]; /* The forest index of the rightmost node of the left subtree of the new root, updated as we traverse and re-root the tree of the hash bucket. */ size_t node_left = FN(LeftChildIndex)(self, cur_ix); @@ -139,7 +138,7 @@ size_t best_len_right = 0; size_t depth_remaining; if (should_reroot_tree) { - self->buckets_[key] = (uint32_t)cur_ix; + buckets[key] = (uint32_t)cur_ix; } for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) { const size_t backward = cur_ix - prev_ix; @@ -199,11 +198,13 @@ matches in matches[0] to matches[*num_matches - 1]. The matches will be sorted by strictly increasing length and (non-strictly) increasing distance. */ -static BROTLI_INLINE size_t FN(FindAllMatches)(HasherHandle handle, - const BrotliEncoderDictionary* dictionary, const uint8_t* data, +static BROTLI_INLINE size_t FN(FindAllMatches)( + HashToBinaryTree* BROTLI_RESTRICT self, + const BrotliEncoderDictionary* dictionary, + const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask, const size_t cur_ix, const size_t max_length, const size_t max_backward, - const size_t gap, const BrotliEncoderParams* params, + const size_t dictionary_distance, const BrotliEncoderParams* params, BackwardMatch* matches) { BackwardMatch* const orig_matches = matches; const size_t cur_ix_masked = cur_ix & ring_buffer_mask; @@ -236,7 +237,7 @@ } } if (best_len < max_length) { - matches = FN(StoreAndFindMatches)(FN(Self)(handle), data, cur_ix, + matches = FN(StoreAndFindMatches)(self, data, cur_ix, ring_buffer_mask, max_length, max_backward, &best_len, matches); } for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) { @@ -252,7 +253,7 @@ for (l = minlen; l <= maxlen; ++l) { uint32_t dict_id = dict_matches[l]; if (dict_id < kInvalidMatch) { - size_t distance = max_backward + gap + (dict_id >> 5) + 1; + size_t distance = dictionary_distance + (dict_id >> 5) + 1; if (distance <= params->dist.max_distance) { InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31); } @@ -266,18 +267,18 @@ /* Stores the hash of the next 4 bytes and re-roots the binary tree at the current sequence, without returning any matches. REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */ -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data, +static BROTLI_INLINE void FN(Store)(HashToBinaryTree* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) { - HashToBinaryTree* self = FN(Self)(handle); /* Maximum distance is window size - 16, see section 9.1. of the spec. */ const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1; FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL); } -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle, - const uint8_t* data, const size_t mask, const size_t ix_start, - const size_t ix_end) { +static BROTLI_INLINE void FN(StoreRange)(HashToBinaryTree* BROTLI_RESTRICT self, + const uint8_t* BROTLI_RESTRICT data, const size_t mask, + const size_t ix_start, const size_t ix_end) { size_t i = ix_start; size_t j = ix_start; if (ix_start + 63 <= ix_end) { @@ -285,18 +286,18 @@ } if (ix_start + 512 <= i) { for (; j < i; j += 8) { - FN(Store)(handle, data, mask, j); + FN(Store)(self, data, mask, j); } } for (; i < ix_end; ++i) { - FN(Store)(handle, data, mask, i); + FN(Store)(self, data, mask, i); } } -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle, +static BROTLI_INLINE void FN(StitchToPreviousBlock)( + HashToBinaryTree* BROTLI_RESTRICT self, size_t num_bytes, size_t position, const uint8_t* ringbuffer, size_t ringbuffer_mask) { - HashToBinaryTree* self = FN(Self)(handle); if (num_bytes >= FN(HashTypeLength)() - 1 && position >= MAX_TREE_COMP_LENGTH) { /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher. diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/memory.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/memory.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/memory.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/memory.h 2022-04-05 07:16:59.000000000 +0000 @@ -56,6 +56,18 @@ #define BROTLI_IS_OOM(M) (!!(M)->is_oom) #endif /* BROTLI_ENCODER_EXIT_ON_OOM */ +/* +BROTLI_IS_NULL is a fake check, BROTLI_IS_OOM does the heavy lifting. +The only purpose of it is to explain static analyzers the state of things. +NB: use ONLY together with BROTLI_IS_OOM + AND ONLY for allocations in the current scope. + */ +#if defined(__clang_analyzer__) && !defined(BROTLI_ENCODER_EXIT_ON_OOM) +#define BROTLI_IS_NULL(A) ((A) == nullptr) +#else /* defined(__clang_analyzer__) */ +#define BROTLI_IS_NULL(A) (!!0) +#endif /* defined(__clang_analyzer__) */ + BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m); /* @@ -66,18 +78,18 @@ C: capacity R: requested size */ -#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \ - if (C < (R)) { \ - size_t _new_size = (C == 0) ? (R) : C; \ - T* new_array; \ - while (_new_size < (R)) _new_size *= 2; \ - new_array = BROTLI_ALLOC((M), T, _new_size); \ - if (!BROTLI_IS_OOM(M) && C != 0) \ - memcpy(new_array, A, C * sizeof(T)); \ - BROTLI_FREE((M), A); \ - A = new_array; \ - C = _new_size; \ - } \ +#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \ + if (C < (R)) { \ + size_t _new_size = (C == 0) ? (R) : C; \ + T* new_array; \ + while (_new_size < (R)) _new_size *= 2; \ + new_array = BROTLI_ALLOC((M), T, _new_size); \ + if (!BROTLI_IS_OOM(M) && !BROTLI_IS_NULL(new_array) && C != 0) \ + memcpy(new_array, A, C * sizeof(T)); \ + BROTLI_FREE((M), A); \ + A = new_array; \ + C = _new_size; \ + } \ } /* diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/metablock.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/metablock.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/metablock.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/metablock.c 2022-04-05 07:16:59.000000000 +0000 @@ -28,34 +28,30 @@ void BrotliInitDistanceParams(BrotliEncoderParams* params, uint32_t npostfix, uint32_t ndirect) { BrotliDistanceParams* dist_params = ¶ms->dist; - uint32_t alphabet_size, max_distance; + uint32_t alphabet_size_max; + uint32_t alphabet_size_limit; + uint32_t max_distance; dist_params->distance_postfix_bits = npostfix; dist_params->num_direct_distance_codes = ndirect; - alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE( + alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE( npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS); + alphabet_size_limit = alphabet_size_max; max_distance = ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) - (1U << (npostfix + 2)); if (params->large_window) { - static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28}; - uint32_t postfix = 1U << npostfix; - alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE( + BrotliDistanceCodeLimit limit = BrotliCalculateDistanceCodeLimit( + BROTLI_MAX_ALLOWED_DISTANCE, npostfix, ndirect); + alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE( npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS); - /* The maximum distance is set so that no distance symbol used can encode - a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all - its extra bits set. */ - if (ndirect < bound[npostfix]) { - max_distance = BROTLI_MAX_ALLOWED_DISTANCE - (bound[npostfix] - ndirect); - } else if (ndirect >= bound[npostfix] + postfix) { - max_distance = (3U << 29) - 4 + (ndirect - bound[npostfix]); - } else { - max_distance = BROTLI_MAX_ALLOWED_DISTANCE; - } + alphabet_size_limit = limit.max_alphabet_size; + max_distance = limit.max_distance; } - dist_params->alphabet_size = alphabet_size; + dist_params->alphabet_size_max = alphabet_size_max; + dist_params->alphabet_size_limit = alphabet_size_limit; dist_params->max_distance = max_distance; } @@ -200,7 +196,7 @@ literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS; literal_context_modes = BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literal_context_modes)) return; for (i = 0; i < mb->literal_split.num_types; ++i) { literal_context_modes[i] = literal_context_mode; } @@ -210,21 +206,21 @@ mb->literal_split.num_types * literal_context_multiplier; literal_histograms = BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(literal_histograms)) return; ClearHistogramsLiteral(literal_histograms, literal_histograms_size); distance_histograms_size = mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS; distance_histograms = BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(distance_histograms)) return; ClearHistogramsDistance(distance_histograms, distance_histograms_size); BROTLI_DCHECK(mb->command_histograms == 0); mb->command_histograms_size = mb->command_split.num_types; mb->command_histograms = BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->command_histograms)) return; ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size); BrotliBuildHistogramsWithContext(cmds, num_commands, @@ -238,13 +234,13 @@ mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; mb->literal_context_map = BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_context_map)) return; BROTLI_DCHECK(mb->literal_histograms == 0); mb->literal_histograms_size = mb->literal_context_map_size; mb->literal_histograms = BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_histograms)) return; BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histograms_size, kMaxNumberOfHistograms, mb->literal_histograms, @@ -269,13 +265,13 @@ mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS; mb->distance_context_map = BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->distance_context_map)) return; BROTLI_DCHECK(mb->distance_histograms == 0); mb->distance_histograms_size = mb->distance_context_map_size; mb->distance_histograms = BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->distance_histograms)) return; BrotliClusterHistogramsDistance(m, distance_histograms, mb->distance_context_map_size, @@ -373,7 +369,7 @@ *histograms_size = max_num_types * num_contexts; *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size); self->histograms_ = *histograms; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(*histograms)) return; /* Clear only current histogram. */ ClearHistogramsLiteral(&self->histograms_[0], num_contexts); self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0; @@ -423,7 +419,7 @@ double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS]; double diff[2] = { 0.0 }; size_t i; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(combined_histo)) return; for (i = 0; i < num_contexts; ++i) { size_t curr_histo_ix = self->curr_histogram_ix_ + i; size_t j; @@ -527,7 +523,7 @@ mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS; mb->literal_context_map = BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size); - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(mb->literal_context_map)) return; for (i = 0; i < mb->literal_split.num_types; ++i) { uint32_t offset = (uint32_t)(i * num_contexts); diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/metablock_inc.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/metablock_inc.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/metablock_inc.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/metablock_inc.h 2022-04-05 07:16:59.000000000 +0000 @@ -71,7 +71,7 @@ *histograms_size = max_num_types; *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size); self->histograms_ = *histograms; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(*histograms)) return; /* Clear only current histogram. */ FN(HistogramClear)(&self->histograms_[0]); self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/params.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/params.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/params.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/params.h 2022-04-05 07:16:59.000000000 +0000 @@ -23,7 +23,8 @@ typedef struct BrotliDistanceParams { uint32_t distance_postfix_bits; uint32_t num_direct_distance_codes; - uint32_t alphabet_size; + uint32_t alphabet_size_max; + uint32_t alphabet_size_limit; size_t max_distance; } BrotliDistanceParams; @@ -33,6 +34,7 @@ int quality; int lgwin; int lgblock; + size_t stream_offset; size_t size_hint; BROTLI_BOOL disable_literal_context_modeling; BROTLI_BOOL large_window; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/ringbuffer.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/ringbuffer.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/ringbuffer.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/ringbuffer.h 2022-04-05 07:16:59.000000000 +0000 @@ -75,7 +75,7 @@ uint8_t* new_data = BROTLI_ALLOC( m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere); size_t i; - if (BROTLI_IS_OOM(m)) return; + if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(new_data)) return; if (rb->data_) { memcpy(new_data, rb->data_, 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere); @@ -125,6 +125,9 @@ later when we copy the last two bytes to the first two positions. */ rb->buffer_[rb->size_ - 2] = 0; rb->buffer_[rb->size_ - 1] = 0; + /* Initialize tail; might be touched by "best_len++" optimization when + ring buffer is "full". */ + rb->buffer_[rb->size_] = 241; } { const size_t masked_pos = rb->pos_ & rb->mask_; diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/utf8_util.c nodejs-mozilla-12.22.12/deps/brotli/c/enc/utf8_util.c --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/utf8_util.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/utf8_util.c 2022-04-05 07:16:59.000000000 +0000 @@ -77,7 +77,7 @@ i += bytes_read; if (symbol < 0x110000) size_utf8 += bytes_read; } - return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length); + return TO_BROTLI_BOOL((double)size_utf8 > min_fraction * (double)length); } #if defined(__cplusplus) || defined(c_plusplus) diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/enc/write_bits.h nodejs-mozilla-12.22.12/deps/brotli/c/enc/write_bits.h --- nodejs-mozilla-12.18.1/deps/brotli/c/enc/write_bits.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/enc/write_bits.h 2022-04-05 07:16:59.000000000 +0000 @@ -16,8 +16,6 @@ extern "C" { #endif -/*#define BIT_WRITER_DEBUG */ - /* This function writes bits into bytes in increasing addresses, and within a byte least-significant-bit first. @@ -28,7 +26,7 @@ 0000 0RRR 0000 0000 0000 0000 - Now, we could write 5 or less bits in MSB by just sifting by 3 + Now, we could write 5 or less bits in MSB by just shifting by 3 and OR'ing to BYTE-0. For n bits, we take the last 5 bits, OR that with high bits in BYTE-0, @@ -37,37 +35,41 @@ uint64_t bits, size_t* BROTLI_RESTRICT pos, uint8_t* BROTLI_RESTRICT array) { + BROTLI_LOG(("WriteBits %2d 0x%08x%08x %10d\n", (int)n_bits, + (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF), + (int)*pos)); + BROTLI_DCHECK((bits >> n_bits) == 0); + BROTLI_DCHECK(n_bits <= 56); #if defined(BROTLI_LITTLE_ENDIAN) /* This branch of the code can write up to 56 bits at a time, 7 bits are lost by being perhaps already in *p and at least 1 bit is needed to initialize the bit-stream ahead (i.e. if 7 bits are in *p and we write 57 bits, then the next write will access a byte that was never initialized). */ - uint8_t* p = &array[*pos >> 3]; - uint64_t v = (uint64_t)(*p); /* Zero-extend 8 to 64 bits. */ - BROTLI_LOG(("WriteBits %2d 0x%08x%08x %10d\n", (int)n_bits, - (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF), - (int)*pos)); - BROTLI_DCHECK((bits >> n_bits) == 0); - BROTLI_DCHECK(n_bits <= 56); - v |= bits << (*pos & 7); - BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */ - *pos += n_bits; + { + uint8_t* p = &array[*pos >> 3]; + uint64_t v = (uint64_t)(*p); /* Zero-extend 8 to 64 bits. */ + v |= bits << (*pos & 7); + BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */ + *pos += n_bits; + } #else /* implicit & 0xFF is assumed for uint8_t arithmetics */ - uint8_t* array_pos = &array[*pos >> 3]; - const size_t bits_reserved_in_first_byte = (*pos & 7); - size_t bits_left_to_write; - bits <<= bits_reserved_in_first_byte; - *array_pos++ |= (uint8_t)bits; - for (bits_left_to_write = n_bits + bits_reserved_in_first_byte; - bits_left_to_write >= 9; - bits_left_to_write -= 8) { - bits >>= 8; - *array_pos++ = (uint8_t)bits; + { + uint8_t* array_pos = &array[*pos >> 3]; + const size_t bits_reserved_in_first_byte = (*pos & 7); + size_t bits_left_to_write; + bits <<= bits_reserved_in_first_byte; + *array_pos++ |= (uint8_t)bits; + for (bits_left_to_write = n_bits + bits_reserved_in_first_byte; + bits_left_to_write >= 9; + bits_left_to_write -= 8) { + bits >>= 8; + *array_pos++ = (uint8_t)bits; + } + *array_pos = 0; + *pos += n_bits; } - *array_pos = 0; - *pos += n_bits; #endif } diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/include/brotli/encode.h nodejs-mozilla-12.22.12/deps/brotli/c/include/brotli/encode.h --- nodejs-mozilla-12.18.1/deps/brotli/c/include/brotli/encode.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/include/brotli/encode.h 2022-04-05 07:16:59.000000000 +0000 @@ -201,7 +201,23 @@ * * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX). */ - BROTLI_PARAM_NDIRECT = 8 + BROTLI_PARAM_NDIRECT = 8, + /** + * Number of bytes of input stream already processed by a different instance. + * + * @note It is important to configure all the encoder instances with same + * parameters (except this one) in order to allow all the encoded parts + * obey the same restrictions implied by header. + * + * If offset is not 0, then stream header is omitted. + * In any case output start is byte aligned, so for proper streams stitching + * "predecessor" stream must be flushed. + * + * Range is not artificially limited, but all the values greater or equal to + * maximal window size have the same effect. Values greater than 2**30 are not + * allowed. + */ + BROTLI_PARAM_STREAM_OFFSET = 9 } BrotliEncoderParameter; /** @@ -274,6 +290,11 @@ * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero * value, then output is guaranteed to be no longer than that. * + * @note If @p lgwin is greater than ::BROTLI_MAX_WINDOW_BITS then resulting + * stream might be incompatible with RFC 7932; to decode such streams, + * decoder should be configured with + * ::BROTLI_DECODER_PARAM_LARGE_WINDOW = @c 1 + * * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE diff -Nru nodejs-mozilla-12.18.1/deps/brotli/c/include/brotli/port.h nodejs-mozilla-12.22.12/deps/brotli/c/include/brotli/port.h --- nodejs-mozilla-12.18.1/deps/brotli/c/include/brotli/port.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/brotli/c/include/brotli/port.h 2022-04-05 07:16:59.000000000 +0000 @@ -218,6 +218,20 @@ BROTLI_GNUC_VERSION_CHECK(major, minor, patch) #endif +#if defined(__has_feature) +#define BROTLI_HAS_FEATURE(feature) __has_feature(feature) +#else +#define BROTLI_HAS_FEATURE(feature) (0) +#endif + +#if defined(ADDRESS_SANITIZER) || BROTLI_HAS_FEATURE(address_sanitizer) || \ + defined(THREAD_SANITIZER) || BROTLI_HAS_FEATURE(thread_sanitizer) || \ + defined(MEMORY_SANITIZER) || BROTLI_HAS_FEATURE(memory_sanitizer) +#define BROTLI_SANITIZED 1 +#else +#define BROTLI_SANITIZED 0 +#endif + #if defined(_WIN32) || defined(__CYGWIN__) #define BROTLI_PUBLIC #elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \ diff -Nru nodejs-mozilla-12.18.1/deps/cares/acinclude.m4 nodejs-mozilla-12.22.12/deps/cares/acinclude.m4 --- nodejs-mozilla-12.18.1/deps/cares/acinclude.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/acinclude.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,1915 @@ + + +dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT]) +dnl ------------------------------------------------- +dnl Use the C preprocessor to find out if the given object-style symbol +dnl is defined and get its expansion. This macro will not use default +dnl includes even if no INCLUDES argument is given. This macro will run +dnl silently when invoked with three arguments. If the expansion would +dnl result in a set of double-quoted strings the returned expansion will +dnl actually be a single double-quoted string concatenating all them. + +AC_DEFUN([CURL_CHECK_DEF], [ + AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl + AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl + if test -z "$SED"; then + AC_MSG_ERROR([SED not set. Cannot continue without SED being set.]) + fi + if test -z "$GREP"; then + AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.]) + fi + ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])]) + tmp_exp="" + AC_PREPROC_IFELSE([ + AC_LANG_SOURCE( +ifelse($2,,,[$2])[[ +#ifdef $1 +CURL_DEF_TOKEN $1 +#endif + ]]) + ],[ + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[[ ]][[ ]]*//' 2>/dev/null | \ + "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then + tmp_exp="" + fi + ]) + if test -z "$tmp_exp"; then + AS_VAR_SET(ac_HaveDef, no) + ifelse($3,,[AC_MSG_RESULT([no])]) + else + AS_VAR_SET(ac_HaveDef, yes) + AS_VAR_SET(ac_Def, $tmp_exp) + ifelse($3,,[AC_MSG_RESULT([$tmp_exp])]) + fi + AS_VAR_POPDEF([ac_Def])dnl + AS_VAR_POPDEF([ac_HaveDef])dnl +]) + + +dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT]) +dnl ------------------------------------------------- +dnl Use the C compiler to find out only if the given symbol is defined +dnl or not, this can not find out its expansion. This macro will not use +dnl default includes even if no INCLUDES argument is given. This macro +dnl will run silently when invoked with three arguments. + +AC_DEFUN([CURL_CHECK_DEF_CC], [ + AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl + ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])]) + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE( +ifelse($2,,,[$2])[[ +int main (void) +{ +#ifdef $1 + return 0; +#else + force compilation error +#endif +} + ]]) + ],[ + tst_symbol_defined="yes" + ],[ + tst_symbol_defined="no" + ]) + if test "$tst_symbol_defined" = "yes"; then + AS_VAR_SET(ac_HaveDef, yes) + ifelse($3,,[AC_MSG_RESULT([yes])]) + else + AS_VAR_SET(ac_HaveDef, no) + ifelse($3,,[AC_MSG_RESULT([no])]) + fi + AS_VAR_POPDEF([ac_HaveDef])dnl +]) + + +dnl CARES_CHECK_LIB_XNET +dnl ------------------------------------------------- +dnl Verify if X/Open network library is required. + +AC_DEFUN([CARES_CHECK_LIB_XNET], [ + AC_MSG_CHECKING([if X/Open network library is required]) + tst_lib_xnet_required="no" + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE([[ +int main (void) +{ +#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600) + return 0; +#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) + return 0; +#else + force compilation error +#endif +} + ]]) + ],[ + tst_lib_xnet_required="yes" + LIBS="$LIBS -lxnet" + ]) + AC_MSG_RESULT([$tst_lib_xnet_required]) +]) + + +dnl CARES_CHECK_AIX_ALL_SOURCE +dnl ------------------------------------------------- +dnl Provides a replacement of traditional AC_AIX with +dnl an uniform behaviour across all autoconf versions, +dnl and with our own placement rules. + +AC_DEFUN([CARES_CHECK_AIX_ALL_SOURCE], [ + AH_VERBATIM([_ALL_SOURCE], + [/* Define to 1 if OS is AIX. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif]) + AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl + AC_BEFORE([$0], [CARES_CONFIGURE_REENTRANT])dnl + AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)]) + AC_EGREP_CPP([yes_this_is_aix],[ +#ifdef _AIX + yes_this_is_aix +#endif + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(_ALL_SOURCE) + ],[ + AC_MSG_RESULT([no]) + ]) +]) + + +dnl CURL_CHECK_HEADER_WINDOWS +dnl ------------------------------------------------- +dnl Check for compilable and valid windows.h header + +AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [ + AC_CACHE_CHECK([for windows.h], [ac_cv_header_windows_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINDOWS_H shall not be defined. +#else + int dummy=2*WINVER; +#endif + ]]) + ],[ + ac_cv_header_windows_h="yes" + ],[ + ac_cv_header_windows_h="no" + ]) + ]) + case "$ac_cv_header_windows_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1, + [Define to 1 if you have the windows.h header file.]) + AC_DEFINE_UNQUOTED(WIN32_LEAN_AND_MEAN, 1, + [Define to avoid automatic inclusion of winsock.h]) + ;; + esac +]) + + +dnl CURL_CHECK_NATIVE_WINDOWS +dnl ------------------------------------------------- +dnl Check if building a native Windows target + +AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([whether build target is a native Windows one], [ac_cv_native_windows], [ + if test "$ac_cv_header_windows_h" = "no"; then + ac_cv_native_windows="no" + else + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ +#if defined(__MINGW32__) || defined(__MINGW32CE__) || \ + (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))) + int dummy=1; +#else + Not a native Windows build target. +#endif + ]]) + ],[ + ac_cv_native_windows="yes" + ],[ + ac_cv_native_windows="no" + ]) + fi + ]) + AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$ac_cv_native_windows" = xyes) +]) + + +dnl CURL_CHECK_HEADER_WINSOCK +dnl ------------------------------------------------- +dnl Check for compilable and valid winsock.h header + +AC_DEFUN([CURL_CHECK_HEADER_WINSOCK], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([for winsock.h], [ac_cv_header_winsock_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINSOCK_H shall not be defined. +#else + int dummy=WSACleanup(); +#endif + ]]) + ],[ + ac_cv_header_winsock_h="yes" + ],[ + ac_cv_header_winsock_h="no" + ]) + ]) + case "$ac_cv_header_winsock_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WINSOCK_H, 1, + [Define to 1 if you have the winsock.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_WINSOCK2 +dnl ------------------------------------------------- +dnl Check for compilable and valid winsock2.h header + +AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([for winsock2.h], [ac_cv_header_winsock2_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WINSOCK2_H shall not be defined. +#else + int dummy=2*IPPROTO_ESP; +#endif + ]]) + ],[ + ac_cv_header_winsock2_h="yes" + ],[ + ac_cv_header_winsock2_h="no" + ]) + ]) + case "$ac_cv_header_winsock2_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, + [Define to 1 if you have the winsock2.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_WS2TCPIP +dnl ------------------------------------------------- +dnl Check for compilable and valid ws2tcpip.h header + +AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CACHE_CHECK([for ws2tcpip.h], [ac_cv_header_ws2tcpip_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WS2TCPIP_H shall not be defined. +#else + int dummy=2*IP_PKTINFO; +#endif + ]]) + ],[ + ac_cv_header_ws2tcpip_h="yes" + ],[ + ac_cv_header_ws2tcpip_h="no" + ]) + ]) + case "$ac_cv_header_ws2tcpip_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1, + [Define to 1 if you have the ws2tcpip.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_MALLOC +dnl ------------------------------------------------- +dnl Check for compilable and valid malloc.h header, +dnl and check if it is needed even with stdlib.h + +AC_DEFUN([CURL_CHECK_HEADER_MALLOC], [ + AC_CACHE_CHECK([for malloc.h], [ac_cv_header_malloc_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + ]]) + ],[ + ac_cv_header_malloc_h="yes" + ],[ + ac_cv_header_malloc_h="no" + ]) + ]) + if test "$ac_cv_header_malloc_h" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_MALLOC_H, 1, + [Define to 1 if you have the malloc.h header file.]) + # + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + ]]) + ],[ + curl_cv_need_header_malloc_h="no" + ],[ + curl_cv_need_header_malloc_h="yes" + ]) + # + case "$curl_cv_need_header_malloc_h" in + yes) + AC_DEFINE_UNQUOTED(NEED_MALLOC_H, 1, + [Define to 1 if you need the malloc.h header file even with stdlib.h]) + ;; + esac + fi +]) + + +dnl CURL_CHECK_HEADER_MEMORY +dnl ------------------------------------------------- +dnl Check for compilable and valid memory.h header, +dnl and check if it is needed even with stdlib.h for +dnl memory related functions. + +AC_DEFUN([CURL_CHECK_HEADER_MEMORY], [ + AC_CACHE_CHECK([for memory.h], [ac_cv_header_memory_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + ]]) + ],[ + ac_cv_header_memory_h="yes" + ],[ + ac_cv_header_memory_h="no" + ]) + ]) + if test "$ac_cv_header_memory_h" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_MEMORY_H, 1, + [Define to 1 if you have the memory.h header file.]) + # + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + ]]) + ],[ + curl_cv_need_header_memory_h="no" + ],[ + curl_cv_need_header_memory_h="yes" + ]) + # + case "$curl_cv_need_header_memory_h" in + yes) + AC_DEFINE_UNQUOTED(NEED_MEMORY_H, 1, + [Define to 1 if you need the memory.h header file even with stdlib.h]) + ;; + esac + fi +]) + + +dnl CURL_CHECK_FUNC_GETNAMEINFO +dnl ------------------------------------------------- +dnl Test if the getnameinfo function is available, +dnl and check the types of five of its arguments. +dnl If the function succeeds HAVE_GETNAMEINFO will be +dnl defined, defining the types of the arguments in +dnl GETNAMEINFO_TYPE_ARG1, GETNAMEINFO_TYPE_ARG2, +dnl GETNAMEINFO_TYPE_ARG46 and GETNAMEINFO_TYPE_ARG7, +dnl and also defining the type qualifier of first +dnl argument in GETNAMEINFO_QUAL_ARG1. + +AC_DEFUN([CURL_CHECK_FUNC_GETNAMEINFO], [ + AC_REQUIRE([CURL_CHECK_HEADER_WS2TCPIP])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h netdb.h) + # + AC_MSG_CHECKING([for getnameinfo]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([getnameinfo]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_getnameinfo="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_getnameinfo="no" + ]) + # + if test "$curl_cv_getnameinfo" != "yes"; then + AC_MSG_CHECKING([deeper for getnameinfo]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + getnameinfo(); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_getnameinfo="yes" + ],[ + AC_MSG_RESULT([but still no]) + curl_cv_getnameinfo="no" + ]) + fi + # + if test "$curl_cv_getnameinfo" != "yes"; then + AC_MSG_CHECKING([deeper and deeper for getnameinfo]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#endif + ]],[[ + getnameinfo(0, 0, 0, 0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_getnameinfo="yes" + ],[ + AC_MSG_RESULT([but still no]) + curl_cv_getnameinfo="no" + ]) + fi + # + if test "$curl_cv_getnameinfo" = "yes"; then + AC_CACHE_CHECK([types of arguments for getnameinfo], + [curl_cv_func_getnameinfo_args], [ + curl_cv_func_getnameinfo_args="unknown" + for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do + for gni_arg2 in 'socklen_t' 'size_t' 'int'; do + for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do + for gni_arg7 in 'int' 'unsigned int'; do + if test "$curl_cv_func_getnameinfo_args" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501) +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#define GNICALLCONV WSAAPI +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#define GNICALLCONV +#endif + extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2, + char *, $gni_arg46, + char *, $gni_arg46, + $gni_arg7); + ]],[[ + $gni_arg2 salen=0; + $gni_arg46 hostlen=0; + $gni_arg46 servlen=0; + $gni_arg7 flags=0; + int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags); + ]]) + ],[ + curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7" + ]) + fi + done + done + done + done + ]) # AC-CACHE-CHECK + if test "$curl_cv_func_getnameinfo_args" = "unknown"; then + AC_MSG_WARN([Cannot find proper types to use for getnameinfo args]) + AC_MSG_WARN([HAVE_GETNAMEINFO will not be defined]) + else + gni_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'` + IFS=$gni_prev_IFS + shift + # + gni_qual_type_arg1=$[1] + # + AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG2, $[2], + [Define to the type of arg 2 for getnameinfo.]) + AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG46, $[3], + [Define to the type of args 4 and 6 for getnameinfo.]) + AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG7, $[4], + [Define to the type of arg 7 for getnameinfo.]) + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$gni_qual_type_arg1" in + const*) + gni_qual_arg1=const + gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'` + ;; + *) + gni_qual_arg1= + gni_type_arg1=$gni_qual_type_arg1 + ;; + esac + # + AC_DEFINE_UNQUOTED(GETNAMEINFO_QUAL_ARG1, $gni_qual_arg1, + [Define to the type qualifier of arg 1 for getnameinfo.]) + AC_DEFINE_UNQUOTED(GETNAMEINFO_TYPE_ARG1, $gni_type_arg1, + [Define to the type of arg 1 for getnameinfo.]) + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + AC_DEFINE_UNQUOTED(HAVE_GETNAMEINFO, 1, + [Define to 1 if you have the getnameinfo function.]) + ac_cv_func_getnameinfo="yes" + fi + fi +]) + + +dnl TYPE_SOCKADDR_STORAGE +dnl ------------------------------------------------- +dnl Check for struct sockaddr_storage. Most IPv6-enabled +dnl hosts have it, but AIX 4.3 is one known exception. + +AC_DEFUN([TYPE_SOCKADDR_STORAGE], +[ + AC_CHECK_TYPE([struct sockaddr_storage], + AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, + [if struct sockaddr_storage is defined]), , + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]) +]) + + +dnl CURL_CHECK_NI_WITHSCOPEID +dnl ------------------------------------------------- +dnl Check for working NI_WITHSCOPEID in getnameinfo() + +AC_DEFUN([CURL_CHECK_NI_WITHSCOPEID], [ + AC_REQUIRE([CURL_CHECK_FUNC_GETNAMEINFO])dnl + AC_REQUIRE([TYPE_SOCKADDR_STORAGE])dnl + AC_CHECK_HEADERS(stdio.h sys/types.h sys/socket.h \ + netdb.h netinet/in.h arpa/inet.h) + # + AC_CACHE_CHECK([for working NI_WITHSCOPEID], + [ac_cv_working_ni_withscopeid], [ + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif + ]],[[ +#if defined(NI_WITHSCOPEID) && defined(HAVE_GETNAMEINFO) +#ifdef HAVE_STRUCT_SOCKADDR_STORAGE + struct sockaddr_storage sa; +#else + unsigned char sa[256]; +#endif + char hostbuf[NI_MAXHOST]; + int rc; + GETNAMEINFO_TYPE_ARG2 salen = (GETNAMEINFO_TYPE_ARG2)sizeof(sa); + GETNAMEINFO_TYPE_ARG46 hostlen = (GETNAMEINFO_TYPE_ARG46)sizeof(hostbuf); + GETNAMEINFO_TYPE_ARG7 flags = NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; + int fd = socket(AF_INET6, SOCK_STREAM, 0); + if(fd < 0) { + perror("socket()"); + return 1; /* Error creating socket */ + } + rc = getsockname(fd, (GETNAMEINFO_TYPE_ARG1)&sa, &salen); + if(rc) { + perror("getsockname()"); + return 2; /* Error retrieving socket name */ + } + rc = getnameinfo((GETNAMEINFO_TYPE_ARG1)&sa, salen, hostbuf, hostlen, NULL, 0, flags); + if(rc) { + printf("rc = %s\n", gai_strerror(rc)); + return 3; /* Error translating socket address */ + } + return 0; /* Ok, NI_WITHSCOPEID works */ +#else + return 4; /* Error, NI_WITHSCOPEID not defined or no getnameinfo() */ +#endif + ]]) # AC-LANG-PROGRAM + ],[ + # Exit code == 0. Program worked. + ac_cv_working_ni_withscopeid="yes" + ],[ + # Exit code != 0. Program failed. + ac_cv_working_ni_withscopeid="no" + ],[ + # Program is not run when cross-compiling. So we assume + # NI_WITHSCOPEID will work if we are able to compile it. + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#include +#include + ]],[[ + unsigned int dummy= NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID; + ]]) + ],[ + ac_cv_working_ni_withscopeid="yes" + ],[ + ac_cv_working_ni_withscopeid="no" + ]) # AC-COMPILE-IFELSE + ]) # AC-RUN-IFELSE + ]) # AC-CACHE-CHECK + case "$ac_cv_working_ni_withscopeid" in + yes) + AC_DEFINE(HAVE_NI_WITHSCOPEID, 1, + [Define to 1 if NI_WITHSCOPEID exists and works.]) + ;; + esac +]) + + +dnl CURL_CHECK_FUNC_RECV +dnl ------------------------------------------------- +dnl Test if the socket recv() function is available, +dnl and check its return type and the types of its +dnl arguments. If the function succeeds HAVE_RECV +dnl will be defined, defining the types of the arguments +dnl in RECV_TYPE_ARG1, RECV_TYPE_ARG2, RECV_TYPE_ARG3 +dnl and RECV_TYPE_ARG4, defining the type of the function +dnl return value in RECV_TYPE_RETV. + +AC_DEFUN([CURL_CHECK_FUNC_RECV], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + # + AC_MSG_CHECKING([for recv]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + recv(0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_recv="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_recv="no" + ]) + # + if test "$curl_cv_recv" = "yes"; then + AC_CACHE_CHECK([types of args and return type for recv], + [curl_cv_func_recv_args], [ + curl_cv_func_recv_args="unknown" + for recv_retv in 'int' 'ssize_t'; do + for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for recv_arg2 in 'char *' 'void *'; do + for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for recv_arg4 in 'int' 'unsigned int'; do + if test "$curl_cv_func_recv_args" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define RECVCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define RECVCALLCONV +#endif + extern $recv_retv RECVCALLCONV + recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); + ]],[[ + $recv_arg1 s=0; + $recv_arg2 buf=0; + $recv_arg3 len=0; + $recv_arg4 flags=0; + $recv_retv res = recv(s, buf, len, flags); + ]]) + ],[ + curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv" + ]) + fi + done + done + done + done + done + ]) # AC-CACHE-CHECK + if test "$curl_cv_func_recv_args" = "unknown"; then + AC_MSG_ERROR([Cannot find proper types to use for recv args]) + else + recv_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'` + IFS=$recv_prev_IFS + shift + # + AC_DEFINE_UNQUOTED(RECV_TYPE_ARG1, $[1], + [Define to the type of arg 1 for recv.]) + AC_DEFINE_UNQUOTED(RECV_TYPE_ARG2, $[2], + [Define to the type of arg 2 for recv.]) + AC_DEFINE_UNQUOTED(RECV_TYPE_ARG3, $[3], + [Define to the type of arg 3 for recv.]) + AC_DEFINE_UNQUOTED(RECV_TYPE_ARG4, $[4], + [Define to the type of arg 4 for recv.]) + AC_DEFINE_UNQUOTED(RECV_TYPE_RETV, $[5], + [Define to the function return type for recv.]) + # + AC_DEFINE_UNQUOTED(HAVE_RECV, 1, + [Define to 1 if you have the recv function.]) + ac_cv_func_recv="yes" + fi + else + AC_MSG_ERROR([Unable to link function recv]) + fi +]) + + +dnl CURL_CHECK_FUNC_SEND +dnl ------------------------------------------------- +dnl Test if the socket send() function is available, +dnl and check its return type and the types of its +dnl arguments. If the function succeeds HAVE_SEND +dnl will be defined, defining the types of the arguments +dnl in SEND_TYPE_ARG1, SEND_TYPE_ARG2, SEND_TYPE_ARG3 +dnl and SEND_TYPE_ARG4, defining the type of the function +dnl return value in SEND_TYPE_RETV, and also defining the +dnl type qualifier of second argument in SEND_QUAL_ARG2. + +AC_DEFUN([CURL_CHECK_FUNC_SEND], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + # + AC_MSG_CHECKING([for send]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + send(0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_send="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_send="no" + ]) + # + if test "$curl_cv_send" = "yes"; then + AC_CACHE_CHECK([types of args and return type for send], + [curl_cv_func_send_args], [ + curl_cv_func_send_args="unknown" + for send_retv in 'int' 'ssize_t'; do + for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do + for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for send_arg4 in 'int' 'unsigned int'; do + if test "$curl_cv_func_send_args" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define SENDCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define SENDCALLCONV +#endif + extern $send_retv SENDCALLCONV + send($send_arg1, $send_arg2, $send_arg3, $send_arg4); + ]],[[ + $send_arg1 s=0; + $send_arg3 len=0; + $send_arg4 flags=0; + $send_retv res = send(s, 0, len, flags); + ]]) + ],[ + curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv" + ]) + fi + done + done + done + done + done + ]) # AC-CACHE-CHECK + if test "$curl_cv_func_send_args" = "unknown"; then + AC_MSG_ERROR([Cannot find proper types to use for send args]) + else + send_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'` + IFS=$send_prev_IFS + shift + # + send_qual_type_arg2=$[2] + # + AC_DEFINE_UNQUOTED(SEND_TYPE_ARG1, $[1], + [Define to the type of arg 1 for send.]) + AC_DEFINE_UNQUOTED(SEND_TYPE_ARG3, $[3], + [Define to the type of arg 3 for send.]) + AC_DEFINE_UNQUOTED(SEND_TYPE_ARG4, $[4], + [Define to the type of arg 4 for send.]) + AC_DEFINE_UNQUOTED(SEND_TYPE_RETV, $[5], + [Define to the function return type for send.]) + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$send_qual_type_arg2" in + const*) + send_qual_arg2=const + send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'` + ;; + *) + send_qual_arg2= + send_type_arg2=$send_qual_type_arg2 + ;; + esac + # + AC_DEFINE_UNQUOTED(SEND_QUAL_ARG2, $send_qual_arg2, + [Define to the type qualifier of arg 2 for send.]) + AC_DEFINE_UNQUOTED(SEND_TYPE_ARG2, $send_type_arg2, + [Define to the type of arg 2 for send.]) + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + AC_DEFINE_UNQUOTED(HAVE_SEND, 1, + [Define to 1 if you have the send function.]) + ac_cv_func_send="yes" + fi + else + AC_MSG_ERROR([Unable to link function send]) + fi +]) + + +dnl CURL_CHECK_FUNC_RECVFROM +dnl ------------------------------------------------- +dnl Test if the socket recvfrom() function is available, +dnl and check its return type and the types of its +dnl arguments. If the function succeeds HAVE_RECVFROM +dnl will be defined, defining the types of the arguments +dnl in RECVFROM_TYPE_ARG1, RECVFROM_TYPE_ARG2, and so on +dnl to RECVFROM_TYPE_ARG6, defining also the type of the +dnl function return value in RECVFROM_TYPE_RETV. +dnl Notice that the types returned for pointer arguments +dnl will actually be the type pointed by the pointer. + +AC_DEFUN([CURL_CHECK_FUNC_RECVFROM], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + # + AC_MSG_CHECKING([for recvfrom]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + recvfrom(0, 0, 0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_recvfrom="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_recvfrom="no" + ]) + # + if test "$curl_cv_recvfrom" = "yes"; then + AC_CACHE_CHECK([types of args and return type for recvfrom], + [curl_cv_func_recvfrom_args], [ + curl_cv_func_recvfrom_args="unknown" + for recvfrom_retv in 'int' 'ssize_t'; do + for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for recvfrom_arg2 in 'char *' 'void *'; do + for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for recvfrom_arg4 in 'int' 'unsigned int'; do + for recvfrom_arg5 in 'struct sockaddr *' 'void *' 'const struct sockaddr *'; do + for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do + if test "$curl_cv_func_recvfrom_args" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define RECVFROMCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define RECVFROMCALLCONV +#endif + extern $recvfrom_retv RECVFROMCALLCONV + recvfrom($recvfrom_arg1, $recvfrom_arg2, + $recvfrom_arg3, $recvfrom_arg4, + $recvfrom_arg5, $recvfrom_arg6); + ]],[[ + $recvfrom_arg1 s=0; + $recvfrom_arg2 buf=0; + $recvfrom_arg3 len=0; + $recvfrom_arg4 flags=0; + $recvfrom_arg5 addr=0; + $recvfrom_arg6 addrlen=0; + $recvfrom_retv res=0; + res = recvfrom(s, buf, len, flags, addr, addrlen); + ]]) + ],[ + curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv" + ]) + fi + done + done + done + done + done + done + done + ]) # AC-CACHE-CHECK + # Nearly last minute change for this release starts here + AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1, + [Define to 1 if you have the recvfrom function.]) + ac_cv_func_recvfrom="yes" + # Nearly last minute change for this release ends here + if test "$curl_cv_func_recvfrom_args" = "unknown"; then + AC_MSG_WARN([Cannot find proper types to use for recvfrom args]) + else + recvfrom_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'` + IFS=$recvfrom_prev_IFS + shift + # + recvfrom_ptrt_arg2=$[2] + recvfrom_qual_ptrt_arg5=$[5] + recvfrom_ptrt_arg6=$[6] + # + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG1, $[1], + [Define to the type of arg 1 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG3, $[3], + [Define to the type of arg 3 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG4, $[4], + [Define to the type of arg 4 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_RETV, $[7], + [Define to the function return type for recvfrom.]) + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$recvfrom_qual_ptrt_arg5" in + const*) + recvfrom_qual_arg5=const + recvfrom_ptrt_arg5=`echo $recvfrom_qual_ptrt_arg5 | sed 's/^const //'` + ;; + *) + recvfrom_qual_arg5= + recvfrom_ptrt_arg5=$recvfrom_qual_ptrt_arg5 + ;; + esac + # + recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'` + recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'` + recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'` + # + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2, $recvfrom_type_arg2, + [Define to the type pointed by arg 2 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_QUAL_ARG5, $recvfrom_qual_arg5, + [Define to the type qualifier pointed by arg 5 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5, $recvfrom_type_arg5, + [Define to the type pointed by arg 5 for recvfrom.]) + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6, $recvfrom_type_arg6, + [Define to the type pointed by arg 6 for recvfrom.]) + # + if test "$recvfrom_type_arg2" = "void"; then + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG2_IS_VOID, 1, + [Define to 1 if the type pointed by arg 2 for recvfrom is void.]) + fi + if test "$recvfrom_type_arg5" = "void"; then + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG5_IS_VOID, 1, + [Define to 1 if the type pointed by arg 5 for recvfrom is void.]) + fi + if test "$recvfrom_type_arg6" = "void"; then + AC_DEFINE_UNQUOTED(RECVFROM_TYPE_ARG6_IS_VOID, 1, + [Define to 1 if the type pointed by arg 6 for recvfrom is void.]) + fi + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + AC_DEFINE_UNQUOTED(HAVE_RECVFROM, 1, + [Define to 1 if you have the recvfrom function.]) + ac_cv_func_recvfrom="yes" + fi + else + AC_MSG_WARN([Unable to link function recvfrom]) + AC_MSG_WARN([Your system will be vulnerable to some forms of DNS cache poisoning]) + fi +]) + + +dnl CURL_CHECK_MSG_NOSIGNAL +dnl ------------------------------------------------- +dnl Check for MSG_NOSIGNAL + +AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [ + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + int flag=MSG_NOSIGNAL; + ]]) + ],[ + ac_cv_msg_nosignal="yes" + ],[ + ac_cv_msg_nosignal="no" + ]) + ]) + case "$ac_cv_msg_nosignal" in + yes) + AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1, + [Define to 1 if you have the MSG_NOSIGNAL flag.]) + ;; + esac +]) + + +dnl CURL_CHECK_STRUCT_TIMEVAL +dnl ------------------------------------------------- +dnl Check for timeval struct + +AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [ + AC_REQUIRE([AC_HEADER_TIME])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK])dnl + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/time.h time.h sys/socket.h) + AC_CACHE_CHECK([for struct timeval], [ac_cv_struct_timeval], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + ]],[[ + struct timeval ts; + ts.tv_sec = 0; + ts.tv_usec = 0; + ]]) + ],[ + ac_cv_struct_timeval="yes" + ],[ + ac_cv_struct_timeval="no" + ]) + ]) + case "$ac_cv_struct_timeval" in + yes) + AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1, + [Define to 1 if you have the timeval struct.]) + ;; + esac +]) + + +dnl TYPE_SIG_ATOMIC_T +dnl ------------------------------------------------- +dnl Check if the sig_atomic_t type is available, and +dnl verify if it is already defined as volatile. + +AC_DEFUN([TYPE_SIG_ATOMIC_T], [ + AC_CHECK_HEADERS(signal.h) + AC_CHECK_TYPE([sig_atomic_t],[ + AC_DEFINE(HAVE_SIG_ATOMIC_T, 1, + [Define to 1 if sig_atomic_t is an available typedef.]) + ], ,[ +#ifdef HAVE_SIGNAL_H +#include +#endif + ]) + case "$ac_cv_type_sig_atomic_t" in + yes) + # + AC_MSG_CHECKING([if sig_atomic_t is already defined as volatile]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SIGNAL_H +#include +#endif + ]],[[ + static volatile sig_atomic_t dummy = 0; + ]]) + ],[ + AC_MSG_RESULT([no]) + ac_cv_sig_atomic_t_volatile="no" + ],[ + AC_MSG_RESULT([yes]) + ac_cv_sig_atomic_t_volatile="yes" + ]) + # + if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then + AC_DEFINE(HAVE_SIG_ATOMIC_T_VOLATILE, 1, + [Define to 1 if sig_atomic_t is already defined as volatile.]) + fi + ;; + esac +]) + + +dnl TYPE_IN_ADDR_T +dnl ------------------------------------------------- +dnl Check for in_addr_t: it is used to receive the return code of inet_addr() +dnl and a few other things. + +AC_DEFUN([TYPE_IN_ADDR_T], [ + AC_CHECK_TYPE([in_addr_t], ,[ + dnl in_addr_t not available + AC_CACHE_CHECK([for in_addr_t equivalent], + [curl_cv_in_addr_t_equiv], [ + curl_cv_in_addr_t_equiv="unknown" + for t in "unsigned long" int size_t unsigned long; do + if test "$curl_cv_in_addr_t_equiv" = "unknown"; then + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]],[[ + $t data = inet_addr ("1.2.3.4"); + ]]) + ],[ + curl_cv_in_addr_t_equiv="$t" + ]) + fi + done + ]) + case "$curl_cv_in_addr_t_equiv" in + unknown) + AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t]) + ;; + *) + AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, + [Type to use in place of in_addr_t when system does not provide it.]) + ;; + esac + ],[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]) +]) + + +dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC +dnl ------------------------------------------------- +dnl Check if monotonic clock_gettime is available. + +AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ + AC_REQUIRE([AC_HEADER_TIME])dnl + AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) + AC_MSG_CHECKING([for monotonic clock_gettime]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + ]],[[ + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC, &ts); + ]]) + ],[ + AC_MSG_RESULT([yes]) + ac_cv_func_clock_gettime="yes" + ],[ + AC_MSG_RESULT([no]) + ac_cv_func_clock_gettime="no" + ]) + dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed + dnl until library linking and run-time checks for clock_gettime succeed. +]) + + +dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC +dnl ------------------------------------------------- +dnl If monotonic clock_gettime is available then, +dnl check and prepended to LIBS any needed libraries. + +AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [ + AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl + # + if test "$ac_cv_func_clock_gettime" = "yes"; then + # + AC_MSG_CHECKING([for clock_gettime in libraries]) + # + curl_cv_save_LIBS="$LIBS" + curl_cv_gclk_LIBS="unknown" + # + for x_xlibs in '' '-lrt' '-lposix4' ; do + if test "$curl_cv_gclk_LIBS" = "unknown"; then + if test -z "$x_xlibs"; then + LIBS="$curl_cv_save_LIBS" + else + LIBS="$x_xlibs $curl_cv_save_LIBS" + fi + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + ]],[[ + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC, &ts); + ]]) + ],[ + curl_cv_gclk_LIBS="$x_xlibs" + ]) + fi + done + # + LIBS="$curl_cv_save_LIBS" + # + case X-"$curl_cv_gclk_LIBS" in + X-unknown) + AC_MSG_RESULT([cannot find clock_gettime]) + AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) + ac_cv_func_clock_gettime="no" + ;; + X-) + AC_MSG_RESULT([no additional lib required]) + ac_cv_func_clock_gettime="yes" + ;; + *) + if test -z "$curl_cv_save_LIBS"; then + LIBS="$curl_cv_gclk_LIBS" + else + LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS" + fi + AC_MSG_RESULT([$curl_cv_gclk_LIBS]) + ac_cv_func_clock_gettime="yes" + ;; + esac + # + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$ac_cv_func_clock_gettime" = "yes"; then + AC_MSG_CHECKING([if monotonic clock_gettime works]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + ]],[[ + struct timespec ts; + if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) + exit(0); + else + exit(1); + ]]) + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) + ac_cv_func_clock_gettime="no" + LIBS="$curl_cv_save_LIBS" + ]) + fi + # + case "$ac_cv_func_clock_gettime" in + yes) + AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1, + [Define to 1 if you have the clock_gettime function and monotonic timer.]) + ;; + esac + # + fi + # +]) + + +dnl CARES_CHECK_LIBS_CONNECT +dnl ------------------------------------------------- +dnl Verify if network connect function is already available +dnl using current libraries or if another one is required. + +AC_DEFUN([CARES_CHECK_LIBS_CONNECT], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_MSG_CHECKING([for connect in libraries]) + tst_connect_save_LIBS="$LIBS" + tst_connect_need_LIBS="unknown" + for tst_lib in '' '-lsocket' ; do + if test "$tst_connect_need_LIBS" = "unknown"; then + LIBS="$tst_lib $tst_connect_save_LIBS" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + #ifndef HAVE_WINDOWS_H + int connect(int, void*, int); + #endif + ]],[[ + if(0 != connect(0, 0, 0)) + return 1; + ]]) + ],[ + tst_connect_need_LIBS="$tst_lib" + ]) + fi + done + LIBS="$tst_connect_save_LIBS" + # + case X-"$tst_connect_need_LIBS" in + X-unknown) + AC_MSG_RESULT([cannot find connect]) + AC_MSG_ERROR([cannot find connect function in libraries.]) + ;; + X-) + AC_MSG_RESULT([yes]) + ;; + *) + AC_MSG_RESULT([$tst_connect_need_LIBS]) + LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS" + ;; + esac +]) + + +dnl CARES_DEFINE_UNQUOTED (VARIABLE, [VALUE]) +dnl ------------------------------------------------- +dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor +dnl symbol that can be further used in custom template configuration +dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third +dnl argument for the description. Symbol definitions done with this +dnl macro are intended to be exclusively used in handcrafted *.h.in +dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one +dnl prevents autoheader generation and insertion of symbol template +dnl stub and definition into the first configuration header file. Do +dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each +dnl one serves different functional needs. + +AC_DEFUN([CARES_DEFINE_UNQUOTED], [ +cat >>confdefs.h <<_EOF +[@%:@define] $1 ifelse($#, 2, [$2], 1) +_EOF +]) + +dnl CARES_CONFIGURE_ARES_SOCKLEN_T +dnl ------------------------------------------------- +dnl Find out suitable ares_socklen_t data type definition and size, making +dnl appropriate definitions for template file ares_build.h.in +dnl to properly configure and use the library. +dnl +dnl The need for the ares_socklen_t definition arises mainly to properly +dnl interface HP-UX systems which on one hand have a typedef'ed socklen_t +dnl data type which is 32 or 64-Bit wide depending on the data model being +dnl used, and that on the other hand is only actually used when interfacing +dnl the X/Open sockets provided in the xnet library. + +AC_DEFUN([CARES_CONFIGURE_ARES_SOCKLEN_T], [ + AC_REQUIRE([CARES_INCLUDES_WS2TCPIP])dnl + AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl + AC_REQUIRE([CARES_PREPROCESS_CALLCONV])dnl + # + AC_MSG_CHECKING([for ares_socklen_t data type]) + cares_typeof_ares_socklen_t="unknown" + for arg1 in int SOCKET; do + for arg2 in 'struct sockaddr' void; do + for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do + if test "$cares_typeof_ares_socklen_t" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_preprocess_callconv + extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *); + ]],[[ + $t *lenptr = 0; + if(0 != getpeername(0, 0, lenptr)) + return 1; + ]]) + ],[ + cares_typeof_ares_socklen_t="$t" + ]) + fi + done + done + done + for t in socklen_t int; do + if test "$cares_typeof_ares_socklen_t" = "void"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_sys_socket + typedef $t ares_socklen_t; + ]],[[ + ares_socklen_t dummy; + ]]) + ],[ + cares_typeof_ares_socklen_t="$t" + ]) + fi + done + AC_MSG_RESULT([$cares_typeof_ares_socklen_t]) + if test "$cares_typeof_ares_socklen_t" = "void" || + test "$cares_typeof_ares_socklen_t" = "unknown"; then + AC_MSG_ERROR([cannot find data type for ares_socklen_t.]) + fi + # + AC_MSG_CHECKING([size of ares_socklen_t]) + cares_sizeof_ares_socklen_t="unknown" + cares_pull_headers_socklen_t="unknown" + if test "$ac_cv_header_ws2tcpip_h" = "yes"; then + tst_pull_header_checks='none ws2tcpip' + tst_size_checks='4' + else + tst_pull_header_checks='none systypes syssocket' + tst_size_checks='4 8 2' + fi + for tst_size in $tst_size_checks; do + for tst_pull_headers in $tst_pull_header_checks; do + if test "$cares_sizeof_ares_socklen_t" = "unknown"; then + case $tst_pull_headers in + ws2tcpip) + tmp_includes="$cares_includes_ws2tcpip" + ;; + systypes) + tmp_includes="$cares_includes_sys_types" + ;; + syssocket) + tmp_includes="$cares_includes_sys_socket" + ;; + *) + tmp_includes="" + ;; + esac + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $tmp_includes + typedef $cares_typeof_ares_socklen_t ares_socklen_t; + typedef char dummy_arr[sizeof(ares_socklen_t) == $tst_size ? 1 : -1]; + ]],[[ + ares_socklen_t dummy; + ]]) + ],[ + cares_sizeof_ares_socklen_t="$tst_size" + cares_pull_headers_socklen_t="$tst_pull_headers" + ]) + fi + done + done + AC_MSG_RESULT([$cares_sizeof_ares_socklen_t]) + if test "$cares_sizeof_ares_socklen_t" = "unknown"; then + AC_MSG_ERROR([cannot find out size of ares_socklen_t.]) + fi + # + case $cares_pull_headers_socklen_t in + ws2tcpip) + CARES_DEFINE_UNQUOTED([CARES_PULL_WS2TCPIP_H]) + ;; + systypes) + CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_TYPES_H]) + ;; + syssocket) + CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_TYPES_H]) + CARES_DEFINE_UNQUOTED([CARES_PULL_SYS_SOCKET_H]) + ;; + esac + CARES_DEFINE_UNQUOTED([CARES_TYPEOF_ARES_SOCKLEN_T], [$cares_typeof_ares_socklen_t]) + CARES_DEFINE_UNQUOTED([CARES_SIZEOF_ARES_SOCKLEN_T], [$cares_sizeof_ares_socklen_t]) +]) + + +dnl This macro determines if the specified struct exists in the specified file +dnl Syntax: +dnl CARES_CHECK_STRUCT(headers, struct name, if found, [if not found]) + +AC_DEFUN([CARES_CHECK_STRUCT], [ + AC_MSG_CHECKING([for struct $2]) + AC_TRY_COMPILE([$1], + [ + struct $2 struct_instance; + ], ac_struct="yes", ac_found="no") + if test "$ac_struct" = "yes" ; then + AC_MSG_RESULT(yes) + $3 + else + AC_MSG_RESULT(no) + $4 + fi +]) + +dnl This macro determines if the specified constant exists in the specified file +dnl Syntax: +dnl CARES_CHECK_CONSTANT(headers, constant name, if found, [if not found]) + +AC_DEFUN([CARES_CHECK_CONSTANT], [ + AC_MSG_CHECKING([for $2]) + AC_EGREP_CPP(VARIABLEWASDEFINED, + [ + $1 + + #ifdef $2 + VARIABLEWASDEFINED + #else + NJET + #endif + ], ac_constant="yes", ac_constant="no" + ) + if test "$ac_constant" = "yes" ; then + AC_MSG_RESULT(yes) + $3 + else + AC_MSG_RESULT(no) + $4 + fi +]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/aclocal.m4 nodejs-mozilla-12.22.12/deps/cares/aclocal.m4 --- nodejs-mozilla-12.18.1/deps/cares/aclocal.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/aclocal.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,1211 @@ +# generated automatically by aclocal 1.16.5 -*- Autoconf -*- + +# Copyright (C) 1996-2021 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, +[m4_warning([this file was generated for autoconf 2.71. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.16' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.16.5], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.16.5])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? + done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE="gmake" (or whatever is + necessary). You can also try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +m4_ifdef([_$0_ALREADY_INIT], + [m4_fatal([$0 expanded multiple times +]m4_defn([_$0_ALREADY_INIT]))], + [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi +AC_SUBST([CTAGS]) +if test -z "$ETAGS"; then + ETAGS=etags +fi +AC_SUBST([ETAGS]) +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi +AC_SUBST([CSCOPE]) + +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. +AC_DEFUN([AM_MAKE_INCLUDE], +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' +am__doit: + @echo this is the am__doit target >confinc.out +.PHONY: am__doit +END +am__include="#" +am__quote= +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + MISSING="\${SHELL} '$am_aux_dir/missing'" +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2021 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/ax_ac_append_to_file.m4]) +m4_include([m4/ax_ac_print_to_file.m4]) +m4_include([m4/ax_add_am_macro_static.m4]) +m4_include([m4/ax_am_macros_static.m4]) +m4_include([m4/ax_check_gnu_make.m4]) +m4_include([m4/ax_code_coverage.m4]) +m4_include([m4/ax_cxx_compile_stdcxx_11.m4]) +m4_include([m4/ax_file_escapes.m4]) +m4_include([m4/ax_require_defined.m4]) +m4_include([m4/cares-compilers.m4]) +m4_include([m4/cares-confopts.m4]) +m4_include([m4/cares-functions.m4]) +m4_include([m4/cares-reentrant.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/xc-am-iface.m4]) +m4_include([m4/xc-cc-check.m4]) +m4_include([m4/xc-lt-iface.m4]) +m4_include([m4/xc-translit.m4]) +m4_include([m4/xc-val-flgs.m4]) +m4_include([m4/zz40-xc-ovr.m4]) +m4_include([acinclude.m4]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/aminclude_static.am nodejs-mozilla-12.22.12/deps/cares/aminclude_static.am --- nodejs-mozilla-12.18.1/deps/cares/aminclude_static.am 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/aminclude_static.am 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,126 @@ + +# aminclude_static.am generated automatically by Autoconf +# from AX_AM_MACROS_STATIC on Wed Oct 27 08:06:13 CEST 2021 + + +# Code coverage +# +# Optional: +# - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. +# Multiple directories may be specified, separated by whitespace. +# (Default: $(top_builddir)) +# - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated +# by lcov for code coverage. (Default: +# $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info) +# - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage +# reports to be created. (Default: +# $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage) +# - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage, +# set to 0 to disable it and leave empty to stay with the default. +# (Default: empty) +# - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov +# instances. (Default: based on ) +# - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov +# instances. (Default: ) +# - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov +# - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the +# collecting lcov instance. (Default: ) +# - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov +# instance. (Default: ) +# - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering +# lcov instance. (Default: empty) +# - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov +# instance. (Default: ) +# - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the +# genhtml instance. (Default: based on ) +# - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml +# instance. (Default: ) +# - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore +# +# The generated report will be titled using the $(PACKAGE_NAME) and +# $(PACKAGE_VERSION). In order to add the current git hash to the title, +# use the git-version-gen script, available online. +# Optional variables +# run only on top dir +if CODE_COVERAGE_ENABLED + ifeq ($(abs_builddir), $(abs_top_builddir)) +CODE_COVERAGE_DIRECTORY ?= $(top_builddir) +CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info +CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage + +CODE_COVERAGE_BRANCH_COVERAGE ?= +CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) +CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) +CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)" +CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) +CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) +CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?= +CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) +CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=$(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) +CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) +CODE_COVERAGE_IGNORE_PATTERN ?= + +GITIGNOREFILES := $(GITIGNOREFILES) $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) +code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V)) +code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_lcov_cap_0 = @echo " LCOV --capture" $(CODE_COVERAGE_OUTPUT_FILE); +code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V)) +code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_lcov_ign_0 = @echo " LCOV --remove /tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN); +code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V)) +code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_genhtml_0 = @echo " GEN " "$(CODE_COVERAGE_OUTPUT_DIRECTORY)"; +code_coverage_quiet = $(code_coverage_quiet_$(V)) +code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY)) +code_coverage_quiet_0 = --quiet + +# sanitizes the test-name: replaces with underscores: dashes and dots +code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1))) + +# Use recursive makes in order to ignore errors during check +check-code-coverage: + -$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check + $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture + +# Capture code coverage data +code-coverage-capture: code-coverage-capture-hook + $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS) + $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS) + -@rm -f "$(CODE_COVERAGE_OUTPUT_FILE).tmp" + $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS) + @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html" + +code-coverage-clean: + -$(LCOV) --directory $(top_builddir) -z + -rm -rf "$(CODE_COVERAGE_OUTPUT_FILE)" "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" + -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete + +code-coverage-dist-clean: + +AM_DISTCHECK_CONFIGURE_FLAGS := $(AM_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage + else # ifneq ($(abs_builddir), $(abs_top_builddir)) +check-code-coverage: + +code-coverage-capture: code-coverage-capture-hook + +code-coverage-clean: + +code-coverage-dist-clean: + endif # ifeq ($(abs_builddir), $(abs_top_builddir)) +else #! CODE_COVERAGE_ENABLED +# Use recursive makes in order to ignore errors during check +check-code-coverage: + @echo "Need to reconfigure with --enable-code-coverage" +# Capture code coverage data +code-coverage-capture: code-coverage-capture-hook + @echo "Need to reconfigure with --enable-code-coverage" + +code-coverage-clean: + +code-coverage-dist-clean: + +endif #CODE_COVERAGE_ENABLED +# Hook rule executed before code-coverage-capture, overridable by the user +code-coverage-capture-hook: + +.PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook diff -Nru nodejs-mozilla-12.18.1/deps/cares/AUTHORS nodejs-mozilla-12.22.12/deps/cares/AUTHORS --- nodejs-mozilla-12.18.1/deps/cares/AUTHORS 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/AUTHORS 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,84 @@ +c-ares is based on ares, and these are the people that have worked on it since +the fork was made: + +Albert Chin +Alex Loukissas +Alexander Klauer +Alexander Lazic +Alexey Simak +Andreas Rieke +Andrew Andkjar +Andrew Ayer +Andrew C. Morrow +Ashish Sharma +Ben Greear +Ben Noordhuis +BogDan Vatra +Brad House +Brad Spencer +Bram Matthys +Chris Araman +Dan Fandrich +Daniel Johnson +Daniel Stenberg +David Drysdale +David Stuart +Denis Bilenko +Dima Tisnek +Dirk Manske +Dominick Meglio +Doug Goldstein +Doug Kwan +Duncan Wilcox +Eino Tuominen +Erik Kline +Fedor Indutny +Frederic Germain +Geert Uytterhoeven +George Neill +Gisle Vanem +Google LLC +Gregor Jasny +Guenter Knauf +Guilherme Balena Versiani +Gunter Knauf +Henrik Stoerner +Jakub Hrozek +James Bursa +Jérémy Lal +John Schember +Keith Shaw +Lei Shi +Marko Kreen +Michael Wallner +Mike Crowe +Nick Alcock +Nick Mathewson +Nicolas "Pixel" Noble +Ning Dong +Oleg Pudeyev +Patrick Valsecchi +Patrik Thunstrom +Paul Saab +Peter Pentchev +Phil Blundell +Poul Thomas Lomholt +Ravi Pratap +Robin Cornelius +Saúl Ibarra Corretgé +Sebastian at basti79.de +Shmulik Regev +Stefan Bühler +Steinar H. Gunderson +Svante Karlsson +Tofu Linden +Tom Hughes +Tor Arntsen +Viktor Szakats +Vlad Dinulescu +William Ahern +Yang Tse +hpopescu at ixiacom.com +liren at vivisimo.com +nordsturm +saghul diff -Nru nodejs-mozilla-12.18.1/deps/cares/buildconf nodejs-mozilla-12.22.12/deps/cares/buildconf --- nodejs-mozilla-12.18.1/deps/cares/buildconf 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/buildconf 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,4 @@ +#!/bin/sh + +echo "*** Do not use buildconf. Instead, just use: autoreconf -fi" >&2 +exec ${AUTORECONF:-autoreconf} -fi "${@}" diff -Nru nodejs-mozilla-12.18.1/deps/cares/buildconf.bat nodejs-mozilla-12.22.12/deps/cares/buildconf.bat --- nodejs-mozilla-12.18.1/deps/cares/buildconf.bat 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/buildconf.bat 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,20 @@ +@echo off +REM +REM +REM This batch file must be used to set up a git tree to build on +REM systems where there is no autotools support (i.e. Microsoft). +REM +REM This file is not included nor needed for c-ares' release +REM archives, neither for c-ares' daily snapshot archives. + +if exist GIT-INFO goto start_doing +ECHO ERROR: This file shall only be used with a c-ares git checkout. +goto end_all +:start_doing + +if not exist include\ares_build.h.dist goto end_ares_build_h +copy /Y include\ares_build.h.dist include\ares_build.h +:end_ares_build_h + +:end_all + diff -Nru nodejs-mozilla-12.18.1/deps/cares/c-ares-config.cmake.in nodejs-mozilla-12.22.12/deps/cares/c-ares-config.cmake.in --- nodejs-mozilla-12.18.1/deps/cares/c-ares-config.cmake.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/c-ares-config.cmake.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,21 @@ +@PACKAGE_INIT@ + +set_and_check(c-ares_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") + +include("${CMAKE_CURRENT_LIST_DIR}/c-ares-config-version.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/c-ares-targets.cmake") + +set(c-ares_LIBRARY c-ares::cares) + +if(@CARES_SHARED@) + add_library(c-ares::cares_shared INTERFACE IMPORTED) + set_target_properties(c-ares::cares_shared PROPERTIES INTERFACE_LINK_LIBRARIES "c-ares::cares") + set(c-ares_SHARED_LIBRARY c-ares::cares_shared) +elseif(@CARES_STATIC@) + add_library(c-ares::cares_static INTERFACE IMPORTED) + set_target_properties(c-ares::cares_static PROPERTIES INTERFACE_LINK_LIBRARIES "c-ares::cares") +endif() + +if(@CARES_STATIC@) + set(c-ares_STATIC_LIBRARY c-ares::cares_static) +endif() diff -Nru nodejs-mozilla-12.18.1/deps/cares/cares.gyp nodejs-mozilla-12.22.12/deps/cares/cares.gyp --- nodejs-mozilla-12.18.1/deps/cares/cares.gyp 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/cares.gyp 2022-04-05 07:16:59.000000000 +0000 @@ -30,85 +30,89 @@ { 'target_name': 'cares', 'type': '<(library)', - 'include_dirs': [ 'include', 'src' ], + 'include_dirs': [ 'include' ], 'direct_dependent_settings': { 'include_dirs': [ 'include' ] }, 'sources': [ 'include/ares.h', + 'include/ares_dns.h', + 'include/ares_nameser.h', 'include/ares_rules.h', 'include/ares_version.h', - 'include/nameser.h', - 'src/ares_android.c', - 'src/ares_cancel.c', - 'src/ares__close_sockets.c', - 'src/ares_create_query.c', - 'src/ares_data.c', - 'src/ares_data.h', - 'src/ares_destroy.c', - 'src/ares_dns.h', - 'src/ares_expand_name.c', - 'src/ares_expand_string.c', - 'src/ares_fds.c', - 'src/ares_free_hostent.c', - 'src/ares_free_string.c', - 'src/ares_freeaddrinfo.c', - 'src/ares_getenv.h', - 'src/ares_getaddrinfo.c', - 'src/ares_gethostbyaddr.c', - 'src/ares_gethostbyname.c', - 'src/ares__get_hostent.c', - 'src/ares_getnameinfo.c', - 'src/ares_getopt.c', - 'src/ares_getopt.h', - 'src/ares_getsock.c', - 'src/ares_init.c', - 'src/ares_ipv6.h', - 'src/ares_library_init.c', - 'src/ares_library_init.h', - 'src/ares_llist.c', - 'src/ares_llist.h', - 'src/ares_mkquery.c', - 'src/ares_nowarn.c', - 'src/ares_nowarn.h', - 'src/ares_options.c', - 'src/ares__parse_into_addrinfo.c', - 'src/ares_parse_aaaa_reply.c', - 'src/ares_parse_a_reply.c', - 'src/ares_parse_mx_reply.c', - 'src/ares_parse_naptr_reply.c', - 'src/ares_parse_ns_reply.c', - 'src/ares_parse_ptr_reply.c', - 'src/ares_parse_soa_reply.c', - 'src/ares_parse_srv_reply.c', - 'src/ares_parse_txt_reply.c', - 'src/ares_platform.h', - 'src/ares_private.h', - 'src/ares_process.c', - 'src/ares_query.c', - 'src/ares__read_line.c', - 'src/ares__readaddrinfo.c', - 'src/ares_search.c', - 'src/ares_send.c', - 'src/ares_setup.h', - 'src/ares__sortaddrinfo.c', - 'src/ares_strcasecmp.c', - 'src/ares_strcasecmp.h', - 'src/ares_strdup.c', - 'src/ares_strdup.h', - 'src/ares_strerror.c', - 'src/ares_strsplit.c', - 'src/ares_timeout.c', - 'src/ares__timeval.c', - 'src/ares_version.c', - 'src/ares_writev.c', - 'src/ares_writev.h', - 'src/bitncmp.c', - 'src/bitncmp.h', - 'src/inet_net_pton.c', - 'src/inet_ntop.c', - 'src/ares_inet_net_pton.h', - 'src/setup_once.h', + 'src/lib/ares__addrinfo2hostent.c', + 'src/lib/ares__addrinfo_localhost.c', + 'src/lib/ares_android.c', + 'src/lib/ares_cancel.c', + 'src/lib/ares__close_sockets.c', + 'src/lib/ares_create_query.c', + 'src/lib/ares_data.c', + 'src/lib/ares_data.h', + 'src/lib/ares_destroy.c', + 'src/lib/ares_expand_name.c', + 'src/lib/ares_expand_string.c', + 'src/lib/ares_fds.c', + 'src/lib/ares_free_hostent.c', + 'src/lib/ares_free_string.c', + 'src/lib/ares_freeaddrinfo.c', + 'src/lib/ares_getenv.h', + 'src/lib/ares_getaddrinfo.c', + 'src/lib/ares_gethostbyaddr.c', + 'src/lib/ares_gethostbyname.c', + 'src/lib/ares__get_hostent.c', + 'src/lib/ares_getnameinfo.c', + 'src/lib/ares_getsock.c', + 'src/lib/ares_init.c', + 'src/lib/ares_ipv6.h', + 'src/lib/ares_library_init.c', + 'src/lib/ares_library_init.h', + 'src/lib/ares_llist.c', + 'src/lib/ares_llist.h', + 'src/lib/ares_mkquery.c', + 'src/lib/ares_nowarn.c', + 'src/lib/ares_nowarn.h', + 'src/lib/ares_options.c', + 'src/lib/ares__parse_into_addrinfo.c', + 'src/lib/ares_parse_aaaa_reply.c', + 'src/lib/ares_parse_a_reply.c', + 'src/lib/ares_parse_caa_reply.c', + 'src/lib/ares_parse_mx_reply.c', + 'src/lib/ares_parse_naptr_reply.c', + 'src/lib/ares_parse_ns_reply.c', + 'src/lib/ares_parse_ptr_reply.c', + 'src/lib/ares_parse_soa_reply.c', + 'src/lib/ares_parse_srv_reply.c', + 'src/lib/ares_parse_txt_reply.c', + 'src/lib/ares_parse_uri_reply.c', + 'src/lib/ares_platform.h', + 'src/lib/ares_private.h', + 'src/lib/ares_process.c', + 'src/lib/ares_query.c', + 'src/lib/ares__read_line.c', + 'src/lib/ares__readaddrinfo.c', + 'src/lib/ares_search.c', + 'src/lib/ares_send.c', + 'src/lib/ares_setup.h', + 'src/lib/ares__sortaddrinfo.c', + 'src/lib/ares_strcasecmp.c', + 'src/lib/ares_strcasecmp.h', + 'src/lib/ares_strdup.c', + 'src/lib/ares_strdup.h', + 'src/lib/ares_strerror.c', + 'src/lib/ares_strsplit.c', + 'src/lib/ares_timeout.c', + 'src/lib/ares__timeval.c', + 'src/lib/ares_version.c', + 'src/lib/ares_writev.c', + 'src/lib/ares_writev.h', + 'src/lib/bitncmp.c', + 'src/lib/bitncmp.h', + 'src/lib/inet_net_pton.c', + 'src/lib/inet_ntop.c', + 'src/lib/ares_inet_net_pton.h', + 'src/lib/setup_once.h', + 'src/tools/ares_getopt.c', + 'src/tools/ares_getopt.h', ], 'conditions': [ [ 'library=="static_library"', { @@ -123,11 +127,11 @@ ], 'include_dirs': [ 'config/win32' ], 'sources': [ - 'src/config-win32.h', - 'src/windows_port.c', - 'src/ares_getenv.c', - 'src/ares_iphlpapi.h', - 'src/ares_platform.c' + 'src/lib/config-win32.h', + 'src/lib/windows_port.c', + 'src/lib/ares_getenv.c', + 'src/lib/ares_iphlpapi.h', + 'src/lib/ares_platform.c' ], 'libraries': [ '-lws2_32.lib', diff -Nru nodejs-mozilla-12.18.1/deps/cares/CHANGES nodejs-mozilla-12.22.12/deps/cares/CHANGES --- nodejs-mozilla-12.18.1/deps/cares/CHANGES 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/CHANGES 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,5121 @@ + Changelog for the c-ares project. Generated with git2changes.pl + +Version 1.18.1 (26 Oct 2021) + +bradh352 (26 Oct 2021) +- missed version + +- 1.18.1 release prep + +- ares_getaddrinfo() was returning the wrong size for ai_addrlen + + ai_addrlen was erroneously returning 16 bytes instead of the + sizeof(struct sockaddr_in6). This is a regression introduced + in 1.18.0. + + Reported by: James Brown + Fix By: Brad House (@bradh352) + +- Windows: autotools force linking to iphlpapi + +GitHub (26 Oct 2021) +- [Gregor Jasny brought this change] + + Fix typo detected by lintian (#434) + + typo in docs for ares_parse_uri_reply + + Fix By: Gregor Jasny (@gjasny) + +Version 1.18.0 (25 Oct 2021) + +bradh352 (25 Oct 2021) +- replace Travis badge with Cirrus-CI badge + +- c-ares 1.18.0 release prep + +GitHub (21 Oct 2021) +- [Jérôme Duval brought this change] + + Haiku: port (#431) + + Port for Haiku. Slight CMake changes, header changes, and resolv.conf/hosts paths specific to Haiku. + + Port By: Jérôme Duval (@korli) + +bradh352 (19 Oct 2021) +- valgrind: fix reported invalid read + +- make sure distcheck runs + +- detect oddities and skip test if necessary + +- fix null ptr deref in strlen + +- bend over backwards for testing file access, something is weird on debian + +- chmod(fn, 0) is failing on debian + +- maybe process needs to be called + +- split test output + +- clean up a couple of compiler warnings + +- use helper function for addrinfo to simplify code + +- INSTANTIATE_TEST_CASE_P -> INSTANTIATE_TEST_SUITE_P as new convention in googletest + +- gmock: update from 1.8.0 to 1.11.0 + +- Cirrus-CI: fix debian arm build + +- Cirrus-CI: more updates for proper testing + +- install proper packages for asan and analyze + +- fix crash in tests + +- try to disable container tests + +- need g++ for tests on debian + +- try cirrus-ci again + +- whitespace + +- start bringing up cirrus-ci + +- prep for adding new ci + +- fix cut and paste error + +GitHub (18 Oct 2021) +- [Brad House brought this change] + + RFC6761: special case "localhost" (#430) + + As per RFC6761 Section 6.3, "localhost" lookups need to be special cased to return loopback addresses, and not forward queries to recursive dns servers. + + We first look up via files (/etc/hosts or equivalent), and if that fails, we then attempt a system-specific address enumeration for loopback addresses (currently Windows-only), and finally fallback to ::1 and 127.0.0.1. + + Fix By: Brad House (@bradh352) + Fixes Bug: #399 + +- [Brad House brought this change] + + Reimplement ares_gethostbyname() by wrapping ares_getaddrinfo() (#428) + + ares_gethostbyname() and ares_getaddrinfo() do a lot of similar things, however ares_getaddrinfo() has some desirable behaviors that should be imported into ares_gethostbyname(). For one, it sorts the address lists for the most likely to succeed based on the current system routes. Next, when AF_UNSPEC is specified, it properly handles search lists instead of first searching all of AF_INET6 then AF_INET, since ares_gethostbyname() searches in parallel. Therefore, this PR should also resolve the issues attempted in #94. + + A few things this PR does: + + 1. ares_parse_a_reply() and ares_parse_aaaa_reply() had very similar code to translate struct ares_addrinfo into a struct hostent as well as into struct ares_addrttl/ares_addr6ttl this has been split out into helper functions of ares__addrinfo2hostent() and ares__addrinfo2addrttl() to prevent this duplicative code. + + 2. ares_getaddrinfo() was apparently never honoring HOSTALIASES, and this was discovered once ares_gethostbyname() was turned into a wrapper, the affected test cases started failing. + + 3. A slight API modification to save the query hostname into struct ares_addrinfo as the last element of name. Since this is the last element, and all user-level instances of struct ares_addrinfo are allocated internally by c-ares, this is not an ABI-breaking change nor would it impact any API compatibility. This was needed since struct hostent has an h_name element. + + 4. Test Framework: MockServer tests via TCP would fail if more than 1 request was received at a time which is common when ares_getaddrinfo() queries for both A and AAAA records simultaneously. Infact, this was a long standing issue in which the ares_getaddrinfo() test were bypassing TCP alltogether. This has been corrected, the message is now processed in a loop. + + 5. Some tests had to be updated for overall correctness as they were invalid but somehow passing prior to this change. + + Change By: Brad House (@bradh352) + +bradh352 (9 Oct 2021) +- ares_getaddrinfo() missing sanity check to fix #426 + +- ares_getaddrinfo(): continue to next domain in search if query returns ARES_ENODATA + + Some DNS servers may behave badly and return a valid response with no data, in this + case, continue on to the next search domain, but cache the result. + + Fixes Bug: #426 + Fix By: Brad House (@bradh352) + +- Allow '/' as a valid character for a returned name + + As of c-ares 1.17.2, a CNAME an in-addr.arpa delegation broke due + to not allowing '/'. This needs to be allowed to not break valid + functionality. + + Fixes Bug: #427 + Reported By: Adrian (@leftshift) + Fix By: Brad House (@bradh352) + +Daniel Stenberg (5 Oct 2021) +- libcares.pc.in: update the URL + +bradh352 (8 Sep 2021) +- ares_expand_name should allow underscores (_) as SRV records legitimately use them + + c-ares 1.17.2 introduced response validation to prevent a security issue, however + it did not have (_) listed as a valid character for domain name responses which + caused issues when a CNAME referenced a SRV record which contained underscores. + + While RFC2181 section 11 does explicitly state not to do validation, that applies + to servers not clients. + + Fixes: #424 + Fix By: Brad House (@bradh352) + +Daniel Stenberg (7 Sep 2021) +- domain: update to use c-ares.org + + Closes #423 + +- mailing list: moved to lists.haxx.se + +GitHub (3 Sep 2021) +- [Biswapriyo Nath brought this change] + + CMake: Fix build in cygwin (#422) + + As cygwin environment has both socket.h and winsock2.h headers check WIN32 not to include the later one here + + Fix By: Biswapriyo Nath (@Biswa96) + +bradh352 (23 Aug 2021) +- make building more verbose + +- add appveyor cmake/mingw static-only build + +GitHub (17 Aug 2021) +- [Sinan Kaya brought this change] + + CMake: lower case advapi32 for cross-building with mingw (#420) + + When cross compiling with yocto's meta-mingw layer, getting a dependency + error. + + This is caused by the fact that advapi32 is lower case in mingw builds. + + Fix By: Sinan Kaya + +bradh352 (17 Aug 2021) +- autotools: add ax_check_gnu_make.m4 + +- autotools: add ax_require_defined.m4 + +- autotools: dont use newer AC_CHECK_INCLUDES_DEFAULT, don't quote AC_ERROR_MSG + +- import more files needed by newer ax_code_coverage.m4 + +- import more files needed by newer ax_code_coverage.m4 + +- work around autoreconf -fiv first call returning 'error: too many loops' + +- restore zz40-xc-ovr.m4 + +- autotools: processed configure.ac through autoupdate + +- autotools. update ax_code_coverage.m4 to latest. don't use deprecated AC_HELP_STRING + +- pull out some old autotools cruft + +GitHub (17 Aug 2021) +- [Felix Yan brought this change] + + Provide ares_nameser.h as a public interface (#417) + + NodeJS needs ares_nameser.h as a pubic header. + + Fixes: #415 + Fix By: Felix Yan (@felixonmars) + +- [Felix Yan brought this change] + + Fix building when latest ax_code_coverage.m4 is imported (#418) + + ax_code_coverage.m4 dropped the @CODE_COVERAGE_RULES@ macro, so we need to switch to the latest recommendation from the m4 file. This requires updates to Makefile.am. + + Fix By: Felix Yan (@felixonmars) + +bradh352 (12 Aug 2021) +- bump version to match current release + +GitHub (12 Aug 2021) +- [dhrumilrana brought this change] + + z/OS minor update, add missing semicolon in ares_init.c (#414) + + Build fix for z/OS + + Fix by: Dhrumil Rana (@dhrumilrana) + +- [Daniel Bevenius brought this change] + + add build to .gitignore (#410) + + This commit adds the build directory to be ignored by git. + + The motivation for adding this to .gitignore as opposed to + .git/info/exclude is that the CMake example in INSTALL.md uses build + as the name of the directory to be used by CMake. This will cause + git to report build as an untracked file. + + Fix By: Daniel Bevenius (@danbev) + +- [Martin Holeš brought this change] + + Add support for URI(Uniform Resource Identifier) records. (#411) + + Add ares_parse_uri_reply() for parsing URI DNS replies. + + Fix By: Martin Holeš (@martin-256) + +Daniel Stenberg (10 Aug 2021) +- ares_getaddrinfo.3: available since 1.16.0 + +- README.md: use https:// links + +Version 1.17.2 (24 Jul 2021) + +bradh352 (24 Jul 2021) +- fix typo + +- prep for 1.17.2 release + +GitHub (30 Jun 2021) +- [jeanpierrecartal brought this change] + + Replace strdup() with ares_strdup() (#408) + + strdup() is used in src/lib/ares_parse_a_reply.c and src/lib/ares_parse_aaaa_reply.c whereas allocated memory is freed using ares_free(). + + Bug: 407 + Fix By: Jean-pierre Cartal (@jeanpierrecartal) + +- [Brad House brought this change] + + Validate hostnames in DNS responses and discard from malicious servers (#406) + + To prevent possible users having XSS issues due to intentionally malformed DNS replies, validate hostnames returned in responses and return EBADRESP if they are not valid. + + It is not clear what legitimate issues this may cause at this point. + + Bug Reported By: philipp.jeitner@sit.fraunhofer.de + Fix By: Brad House (@bradh352) + +bradh352 (11 Jun 2021) +- ares_expand_name(): fix formatting and handling of root name response + + Fixes issue introduced in prior commit with formatting and handling + of parsing a root name response which should not be escaped. + + Fix By: Brad House + +- ares_expand_name() should escape more characters + + RFC1035 5.1 specifies some reserved characters and escaping sequences + that are allowed to be specified. Expand the list of reserved characters + and also escape non-printable characters using the \DDD format as + specified in the RFC. + + Bug Reported By: philipp.jeitner@sit.fraunhofer.de + Fix By: Brad House (@bradh352) + +GitHub (15 Apr 2021) +- [HALX99 brought this change] + + Fix can't get dns server on macos and ios (#401) + + If DNS configuration didn't include search domains on MacOS (or iOS) it would throw an error instead of ignoring. + + Fix By: @halx99 + +- [catalinh-bd brought this change] + + Bugfix/crash in ares sortaddrinfo (#400) + + The bug was generated because there was no check for the number + of items in the list and invalid memory was accesed when the list + was empty. There is a check for null after calling malloc but on + some systems it always returns a valid address for size equals 0. + Relates To: #392, 0903dcecabca283d0fa771632892dc7592b7a66d + + Fix By: @catalinh-bd + +bradh352 (2 Mar 2021) +- Null deref if ares_getaddrinfo() is terminated with ares_destroy() + + ares_freeaddrinfo() was not checking for a Null ptr during cleanup of + an aborted query. + + Once that was resolved it uncovered another possible issue with + multiple simultaneous underlying queries being outstanding and + possibly prematurely cleaning up the handle. + + Reported By: Michael Kourlas + Fix By: Brad House (@bradh352) + +GitHub (18 Feb 2021) +- [Brad House brought this change] + + CMake: RANDOM_FILE not defined #397 + + RANDOM_FILE was never defined by cmake, causing RC4 key generation to use the less secure rand() method. + + Also, due to clashes with chain-building from other projects (e.g. curl) that may define RANDOM_FILE, this was renamed to CARES_RANDOM_FILE. + + This is the proposed change for #396 + + Fix By: Brad House (@bradh352) + +- [Anton Danielsson brought this change] + + CMake: fix Make install for iOS/MacOS (#395) + + INSTALL TARGETS were missing the BUNDLE DESTINATION + + Fix By: Anton Danielsson (@anton-danielsson) + +- [František Dvořák brought this change] + + Fix build with autotools out of source tree (#394) + + Add missing include directory, which fixes the build with autotools in separated build directory. + + Fix By: František Dvořák (@valtri) + +bradh352 (15 Jan 2021) +- fuzzing: HAVE_CONFIG_H may not be defined so cannot include ares_setup.h. Its not needed even though we include ares_nameser.h + +- remove redundant header checks + +- properly detect netinet/tcp.h on openbsd + +- more portability updates + +- renamed nameser.h to ares_nameser.h requires Makefile.inc update for distributed files + +- more portability updates + +- remove bad files + +- portability updates for test cases + +- Portability Updates for arpa/nameser.h (#388) + + There is too much inconsistency between platforms for arpa/nameser.h and arpa/nameser_compat.h for the way the current files are structured. Still load the respective system files but make our private nameser.h more forgiving. + + Fixes: #388 + Fix By: Brad House (@bradh352) + +- ares_parse_ptr_reply() handle NULL for addr/addr_len. Fixes #392 + + NodeJS passes NULL for addr and 0 for addrlen parameters to ares_parse_ptr_reply(). On systems where malloc(0) returned NULL, this would cause the function to return ARES_ENOMEM, but the cleanup wasn't handled properly and would crash. + + This patche fixes that bug, and also hardens ares_free_hostent() to not leak memory during cleanup. + + Fixes: #392 + Fix By: Brad House (@bradh352) + +- Define behavior of malloc(0) + + Some systems may return either NULL or a valid pointer on malloc(0). c-ares should never call malloc(0) so lets return NULL so we're more likely to find an issue if it were to occur. + +GitHub (24 Dec 2020) +- [dhrumilrana brought this change] + + z/OS: port (#390) + + Port c-ares to z/OS. + + Fix By: Dhrumil Rana (@dhrumilrana) + +- [vburdo brought this change] + + Use unbuffered stdio for /dev/urandom to read only requested data (#391) + + Buffered fread() reads 4096 bytes which is completely unnecessary and potentially may cause problems. + I discovered this on private linux configuration where custom /dev/urandom implementation has poor performance. + + Fix By: @vburdo + +- [Jay Freeman (saurik) brought this change] + + This relative header #include needs to use quotes. (#386) + + Fix By: Jay Freeman (@saurik) + +bradh352 (23 Nov 2020) +- Win32: Fix tools build with autotools static library + When c-ares is being built as static on Win32, CARES_STATICLIB must + be defined, but it wasn't being pulled in for the tools. + + Fixes: #384 + Fix By: Brad House (@bradh352) + +- Loosen requirements for static c-ares library when building tests + + It appears that when building tests, it would hardcode enabling building + of the c-ares static library. This was probably due to Windows limitations + in symbol visibility. + + This change will use the static library if it exists for tests, always. + Otherwise, it will only forcibly enable static libraries for tests on + Windows. + + Fixes: #380 + Fix By: Brad House (@bradh352) + +- Remove legacy comment about ahost/acountry/adig targets + +- Distribute fuzzinput/fuzznames for fuzz tests + + The fuzz test files were not being distributed. This doesn't appear to be + a regression, it looks like they have never been distributed. + + Fixes: #379 + Fix By: Brad House (@bradh352) + +Version 1.17.1 (19 Nov 2020) + +GitHub (19 Nov 2020) +- [Brad House brought this change] + + Travis: add iOS target built with CMake (#378) + + Issue #377 suggested that CMake builds for iOS with c-ares were broken. This PR adds an automatic Travis build for iOS CMake. + + Fix By: Brad House (@bradh352) + +bradh352 (18 Nov 2020) +- fix build + +GitHub (18 Nov 2020) +- [Fabrice Fontaine brought this change] + + External projects were using non-public header ares_dns.h, make public again (#376) + + It appears some outside projects were relying on macros in ares_dns.h, even though it doesn't appear that header was ever meant to be public. That said, we don't want to break external integrators so we should distribute this header again. + + Fix By: Fabrice Fontaine (@ffontaine) + +bradh352 (17 Nov 2020) +- note that so versioning has moved to configure.ac + +- note about 1.17.1 + +- fix sed gone wrong + +GitHub (17 Nov 2020) +- [Daniel Stenberg brought this change] + + autotools cleanup (#372) + + * remove: install-sh mkinstalldirs + + They're generated when needed, no need to store in it. + + * buildconf: remove custom logic with autoreconf + + Fix By: Daniel Stenberg (@bagder) + +bradh352 (17 Nov 2020) +- attempt to fix 1.17.0 release distribution issues + +Version 1.17.0 (16 Nov 2020) + +bradh352 (16 Nov 2020) +- 1.17.0 release prep + +- ares_getaddrinfo(): duplicate hints ai_socktype and ai_protocol into output + + ai_socktype and ai_protocol were ignored from the hints input. They are now + duplicated into the output as expected. Currently no sanity checks on + proper values are taking place. + + Fixes: #317 + Fix By: Brad House (@bradh352) + +- ares_parse_{a,aaaa}_reply could return larger *naddrttls than passed in + + If there are more ttls returned than the maximum provided by the requestor, then + the *naddrttls response would be larger than the actual number of elements in + the addrttls array. + + This bug could lead to invalid memory accesses in applications using c-ares. + + This behavior appeared to break with PR #257 + + Fixes: #371 + Reported By: Momtchil Momtchev (@mmomtchev) + Fix By: Brad House (@bradh352) + +GitHub (5 Nov 2020) +- [Dustin Lundquist brought this change] + + docs: ares_set_local_ip4() uses host byte order (#368) + + Properly document brain-dead behavior of ares_set_local_ip4() using host byte order instead of expected network byte order. + + Fix By: Dustin Lundquist + +- [Łukasz Marszał brought this change] + + empty hquery->name could lead to invalid memory access (#367) + + If hquery->name is empty (=="\0"), &hquery->name[strlen(hquery->name)-1] would point to "random" place in memory. This is causing some of my address sanitizer tests to fail. + + Fix By: Łukasz Marszał (@lmarszal) + +bradh352 (28 Sep 2020) +- Fix OSSFuzz reported issue in CAA reply parsing + + OSS-Fuzz is reporting a use-of-uninitialized-value: + https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=26012 + + Reported By: David Drysdale (@daviddrysdale) + +GitHub (26 Sep 2020) +- [David Hotham brought this change] + + fuzz CAA parsing (#363) + + Add fuzz support for CAA parsing + + Fix By: David Hotham (@dimbleby) + +- [Daniela Sonnenschein brought this change] + + Allow parsing of CAA Resource Record (#360) + + CAA (Certification Authority Authorization) was introduced in RFC 6844. + This has been obsoleted by RFC 8659. This commit added the possibility + to query CAA resource records with adig and adds a parser for CAA + records, that can be used in conjunction with ares_query(3). + + Closes Bug: #292 + Fix By: Daniela Sonnenschein (@lxdicted) + +Daniel Stenberg (17 Sep 2020) +- docs: remove the html and pdf make targets + + They're rarely used in our daily work flow and mostly just add friction, + + Closes #362 + +bradh352 (14 Sep 2020) +- ares_process needs to always include nameser.h as it has compat + +- Define T_OPT if system doesn't provide it + +GitHub (12 Sep 2020) +- [Gisle Vanem brought this change] + + Change the mailman links (#358) + + Links when wrapping become misleading. Insert newline to prevent wrapping. + + Fix By: Gisle Vanem (@gvanem) + +- [Gisle Vanem brought this change] + + [adig] Update man-page for the '-x' option (#357) + + Fix By: Gisle Vanem (@gvanem) + +- [Gisle Vanem brought this change] + + [adig] add '-x' option. (#356) + + Added a 'dig-style' '-x' option. Also support '-xx' for a + IPv6 bit-string PTR query. + + Fix By: Gisle Vanem (@gvanem) + +bradh352 (12 Sep 2020) +- fix indentation + +- ns_t_opt -> T_OPT + +GitHub (12 Sep 2020) +- [Gisle Vanem brought this change] + + Fixes for Watt-32 on djgpp + Windows (#355) + + No longer any relation to libcurl since '/packages/DOS/common.dj' is dropped. + This Makefile.dj has been tested on Win-10 only (using the Windows hosted djgpp cross compiler). + + Fix By: Gisle Vanem (@gvanem) + +- [Gisle Vanem brought this change] + + Fixes for Watt-32 on Windows and MSDOS (#354) + + Move the prototype to 'ares_private.h'. + + Fix By: Gisle Vanem (@gvanem) + +bradh352 (11 Sep 2020) +- update path for include + +- remove stale information + +- remove stale information + +Brad House (9 Sep 2020) +- silence compiler warnings + +- Remove stale msvc files from makefile + +GitHub (9 Sep 2020) +- [Brad House brought this change] + + Reorganize source tree (#349) + + Originally started by Daniel Stenberg (@bagder) with #123, this patch reorganizes the c-ares source tree to have a more modern layout. It also fixes out of tree builds for autotools, and automatically builds the tests if tests are enabled. All tests are passing which tests each of the supported build systems (autotools, cmake, nmake, mingw gmake). There may be some edge cases that will have to be caught later on for things I'm not aware of. + + Fix By: Brad House (@bradh352) + +Brad House (1 Sep 2020) +- remove CURLDEBUG as per #82 + +GitHub (1 Sep 2020) +- [Erik Lax brought this change] + + Detect remote DNS server does not support EDNS as per RFC 6891 (#244) + + EDNS retry should be based on FORMERR returned without an OPT RR record as per https://tools.ietf.org/html/rfc6891#section-7 rather than just treating any unexpected error condition as a reason to disable EDNS on the channel. + + Fix By: Erik Lax (@eriklax) + +Brad House (27 Aug 2020) +- Fix for #345, don't use 'true' use 1 + +GitHub (27 Aug 2020) +- [Seraphime Kirkovski brought this change] + + ares_gethostbyname: Fix AF_UNSPEC support when using an ip address (#204) + + fake_hostent() was not supporting AF_UNSPEC, so when an ip address was specified when using AF_UNSPEC it would attempt to do a DNS lookup rather than returning a fake hostent using the ip address. + + Fix By: Seraphime Kirkovski (@Seraphime) + +- [apenn-msft brought this change] + + Tests should use dynamic system-assigned ports rather than static port (#346) + + The c-ares test suite was hardcoded to use port 5300 (and possibly 5301, 5302) for the test suite. Especially in containers, there may be no guarantee these ports are available and cause tests to fail when they could otherwise succeed. Instead, request the system to assign a port to use dynamically. This is now the default. To override, the test suite still takes the "-p " option as it always has and will honor that. + + Fix By: Anthony Penniston (@apenn-msft) + +Brad House (25 Aug 2020) +- Unset members of the addr struct contain garbage values (#343) + + When generating the ares_sockaddr data by getaddrinfo() it was only filling + in certain members while leaving others uninitialized. This left garbage + data if a user tried to use the unset values. memset() the ares_sockaddr + to 0 prior to filling in the values to prevent this. + + Reported By: @SmorkalovG + Fix By: Brad House (@bradh352) + +GitHub (24 Aug 2020) +- [Jonathan Maye-Hobbs brought this change] + + FQDN with trailing period should be queried first with larger ndot value (#345) + + If a query is performed for dynamodb.us-east-1.amazonaws.com. with ndots=5, it was attempting to search the search domains rather than just attempting the FQDN that was passed it. This patch now at least attempts the FQDN first. + + We may need to determine if we should abort any further searching, however as is probably intended. + + Fix by: Jonathan Maye-Hobbs (@wheelpharoah) + +- [Gisle Vanem brought this change] + + Update acountry.c country code list (#341) + + Updated country_list[]: + * 2-letter ISO-3166 country-codes. + * Add, rename some names + codes in accordance with latest table at https://en.wikipedia.org/wiki/ISO_3166-1. + + Fix By: Gisle Vanem (@gvanem) + +- [Bulat Gaifullin brought this change] + + Test case should honor flag HAVE_WRITEV rather than WIN32 (#344) + + Test cases where not honoring the HAVE_WRITEV flag but instead using WIN32 to determine if WRITEV was available or not. This patch fixes that. + + Fix By: Bulat Gaifullin (@bgaifullin) + +Brad House (18 Jul 2020) +- Ensure c89 support + + A couple of for loops in Mac-specific code were using integer declarations + inside a for loop. Move the declaration to the top of the preceding + code block to retain c89 compliance. + + Reported By: Jeffrey Walton + +GitHub (2 Jul 2020) +- [Fionn Fitzmaurice brought this change] + + Avoid buffer overflow in RC4 loop comparison (#336) + + The rc4 function iterates over a buffer of size buffer_len who's maximum + value is INT_MAX with a counter of type short that is not guaranteed to + have maximum size INT_MAX. + + In circumstances where short is narrower than int and where buffer_len + is larger than the maximum value of a short, it may be possible to loop + infinitely as counter will overflow and never be greater than or equal + to buffer_len. + + The solution is to make the comparison be between types of equal width. + This commit defines counter as an int. + + Fix By: Fionn Fitzmaurice (@fionn) + +- [anonymoushelpishere brought this change] + + Updated help information for adig, acountry, and ahost. (#334) + + Provide more descriptive help information for various utilities. + + Fix By: @anonymoushelpishere + +- [lutianxiong brought this change] + + avoid read-heap-buffer-overflow (#332) + + Fix invalid read in ares_parse_soa_reply.c found during fuzzing + + Fixes Bug: #333 + Fix By: lutianxiong (@ltx2018) + +- [Ivan Baidakou brought this change] + + Fix: sizeof(sizeof(addr.saX)) -> sizeof(addr.saX) in readaddrinfo (#331) + + Looks like a sed-gone-wrong, a sizeof inside of a sizeof. + + Fix By: Ivan Baidakou (@basiliscos) + +Version 1.16.1 (11 May 2020) + +Brad House (11 May 2020) +- c-ares 1.16.1 release prep + +- update travis to use xcode11.4 + +- Prevent possible double-free in ares_getaddrinfo() if ares_destroy() is called + + In the event that ares_destroy() is called prior to ares_getaddrinfo() completing, + it would result in an invalid read and double-free due to calling end_hquery() twice. + + Reported By: Jann Horn @ Google Project Zero + +GitHub (30 Apr 2020) +- [shelley vohr brought this change] + + fix: windows UNICODE incompatibilities with ares_getaddrinfo (#328) + + Fixes the following compatibility issues: + * Use RegQueryValueExA instead of RegQueryValueEx + * Use ExpandEnvironmentStringsA instead of ExpandEnvironmentStrings + * Use RegOpenKeyExA instead of RegOpenKeyExA + * Use GetWindowsDirectoryA instead of GetWindowsDirectoryA + + Fix By: Shelley Vohr (@codebytere) + Closes: #327 + +Brad House (13 Apr 2020) +- travis: CloudFlare does not allow T_ANY requests, so live tests that use it fail. Disable. + +- travis: bump macos image to the latest + +- cast-align warnings are false for struct sockaddr, silence + + Create a macro to silence false cast-align warnings when casting + struct sockaddr * to struct sockaddr_in * and struct sockaddr_in6 *. + + Fix By: Brad House (@bradh352) + +- MacOS: Enable libresolv support for retrieving DNS servers like iOS does. + +GitHub (10 Apr 2020) +- [Dmitry Igrishin brought this change] + + CMake: Populate the INCLUDE_DIRECTORIES property of installed targets (#323) + + Populate the INCLUDE_DIRECTORIES property of installed targets + + Fix By: Dmitry Igrishin (@dmitigr) + +Brad House (10 Apr 2020) +- travis: make valgrind use cmake for tests + +- dont try to use libtool to run valgrind + +- valgrind requires libtool installed to wrap tests + +- scan build 7 + +- fix travis live test + +- add debug for travis + +- try without sudo + +- attempt to modernize travis build environment + +GitHub (6 Apr 2020) +- [Teemu R brought this change] + + Allow TXT records on CHAOS qclass (#321) + + Some DNS servers intentionally "misuse" the obsoleted CHAOS (CH) qclass to provide things like `version.bind`, `version.server`, `authors.bind`, `hostname.bind` and `id.server`. + + C-ares was not allowing such use cases. + + Fix By: Teemu R. (@rytilahti) + +Brad House (5 Apr 2020) +- Remove warnings from ares_getaddrinfo.3 man page + + As reported in #319, non-standard macros of .IN were used. + Replace with .RS/.RE. + + Fixes: #319 + Fix By: Brad House (@bradh352) + +- ares_getaddrinfo man page render better for man2html + +- update man pages to render better for man2html + +Version 1.16.0 (12 Mar 2020) + +Brad House (12 Mar 2020) +- 1.16.0 release notes draft + +- attempt to fix double-free introduced in e0517f9 + +GitHub (12 Mar 2020) +- [David Drysdale brought this change] + + test: fuzzer input triggering double free (#315) + + OSS-Fuzz has reported a double-free with the fuzzer input file + included here; run with: + ./test/aresfuzz test/fuzzinput/clusterfuzz-5637790584012800 + + Bisecting the failure points to commit e0517f97d988 ("Parse SOA records + from ns_t_any response (#103)") + +- [Brad House brought this change] + + CMake: Install Manpages (#314) + + CMake wasn't installing manpages. + + Fixes #297 + Fix By: Brad House (@bradh352) + +- [Brad House brought this change] + + Enable cmake tests for AppVeyor (#313) + + Tests require linking against the static library on Windows otherwise the symbols are not exported for internals being tested. + + Fix By: Brad House (@bradh352) + +Brad House (11 Mar 2020) +- Add AppVeyor badge + +- bump c-ares version to 1.16.0. test AppVeyor integration. + +GitHub (11 Mar 2020) +- [Brad House brought this change] + + replace all usages of inet_addr() with ares_inet_pton() which is more proper (#312) + + Replace usage of inet_addr() with ares_inet_pton() which is more appropriate and fixes issues with legitimate addresses like 255.255.255.0. IPv6 already used this. + + Fixes #309 + Fix By: Brad House (@bradh352) + +- [Brad House brought this change] + + CMake: Generate WinPDB files during build (#311) + + Build and Install PDB (Windows Debug Symbol) files if supported by underlying system. + + Also update AppVeyor to test cmake builds. + + Fixes #245 + Fix By: Piotr Pietraszkiewicz (@ppietrasa) and Brad House (@bradh352) + +- [Brad House brought this change] + + CMake: Rework library function checking (#310) + + CHECK_LIBRARY_EXISTS(), while it takes a function name, does not actually verify the function exists in the library being evaluated. Instead, if the function is found in any dependent library, and the referenced library also exists, it returns true. This is not desirable. + + Wrap with a Macro to change the behavior. + + Fixes: #307 + Fix By: Brad House (@bradh352) + +- [Dron Rathore brought this change] + + Parse SOA records from ns_t_any response (#103) + + Added the capability of parsing SOA record from a response buffer of ns_t_any type query, this implementation doesn't interfere with existing T_SOA query's response as that too is treated as a list of records. The function returns ARES_EBADRESP if no SOA record is found(as per RFC). + + The basic idea of sticking to RFC that a ns_t_any too should return an SOA record is something open for discussion but I have kept the functionality intact as it was previously i.e the function returns ARES_EBADRESP if it doesn't find a SOA record regardless of which response it is parsing i.e. T_SOA or T_ANY. + + Note that asking for T_ANY is generally a bad idea: + - https://blog.cloudflare.com/what-happened-next-the-deprecation-of-any/ + - https://tools.ietf.org/html/draft-ietf-dnsop-refuse-any + + Bug: #102 + Fix By: Dron Rathore (@DronRathore) + +- [Stephen Bryant brought this change] + + Added CPack functionality for generating RPM or DEB packages (#283) + + Added CPack functionality for generating RPM or DEB packages + + ie: run `cpack -G RPM` (or "DEB") after building with CMake. + + The current configuration creates 3 separate packages for the shared library, + the development files and the tools. + + Fix By: Stephen Bryant (@bf-bryants) + +- [tjwalton brought this change] + + ares_gethostbyname: Return ENODATA if no valid A or AAAA record found (#304) + + ares_gethostbyname() was returning ESUCCESS when no A or AAAA record was found but a CNAME pointing nowhere was present. ENODATA should be returned instead, however the hosts pointer will still be present to provide the alias list. + + * Return ENODATA if no valid A or AAAA record found + * Fix and update test ParseAReplyNoData. + * Add test for new ENODATA behaviour in ares_gethostbyname. + + Fixes Bug #303 + Fix By: @tjwalton + +- [Michal Rostecki brought this change] + + test: Separate live tests from SetServers* tests (#299) + + Before this change, SetServers, SetServersPorts and SetServersCSV + contained test cases trying to make DNS queries with the google.com + hostname, which requires Internet connectivity. Tests with that + requirement should be defined in the ares-test-live.cc file and contain + "Live" prefix to filter them out with `--gtest_filter=-*.Live*` on + machines without Internet connectivity. + + Fix By: Michal Rostecki (@mrostecki) + +- [Adam Majer brought this change] + + Only count valid addresses when response parsing (#302) + + When ares_parse_a_reply or ares_parse_aaaa_reply is called in case + where another AAAA and A responses exist, the resulting ares_addrttl + count is invalid and the structure points to gibberish. + + This is a regression since 1.15. + + Issue: https://github.com/c-ares/c-ares/issues/300 + Fix By: Adam Majer (@AdamMajer) + +Brad House (24 Dec 2019) +- [Kyle Edwards brought this change] + + CMake: Provide c-ares version in package export file (#296) + + The CMake package export file should provide version information. + + Fix By: Kyle Edwards (@KyleFromKitware) + +- [Ben Noordhuis brought this change] + + Accept invalid /etc/resolv.conf lookup values, ability to build container tests (#274) + + * Add CARES_BUILD_CONTAINER_TESTS CMake option to add ability to build the Linux-only containerized tests. + * Accept invalid /etc/resolv.conf lookup values + + Before this commit invalid `lookup` values resulted in c-ares not using + any lookups without any clear indication why. After this commit it uses + the default "fb". + + Fix By: Ben Noordhuis (@bnoordhuis) + +- [Christian Ammer brought this change] + + Parallel A and AAAA lookups in `ares_getaddrinfo` (#290) + + A and AAAA lookups for ares_getaddrinfo() are now performed in parallel. + + For this change `ares_search` was removed from `ares_getaddrinfo`. + Instead `ares_query` in combination with `next_dns_lookup` are + doing the suffix search. + + Adding support for `.onion` addresses which are tested by + `TEST_F(DefaultChannelTest, GetAddrinfoOnionDomain)` + + Fix By: Christian Ammer (@ChristianAmmer) + +- [Vy Nguyen brought this change] + + Move variables into the block where it is used to avoid unused-vars (#281) + + Warning uncovered with [-Werror, -Wunused-variables] + + Fix By: Vy Nguyen (@oontvoo) + +- [Vy Nguyen brought this change] + + Rename local macros to avoid conflicting with system ones and remove unsed variables. (Otherwise code will break once compiled with [-Werror,-Wmacro-redefined,-Wunused-variable] ) (#280) + + Fix new getaddrinfo code to not redefine macros on some systems. + + Fix By: Vy Nguyen (@oontvoo) + +- [Egor Pugin brought this change] + + [ares_getenv] Return NULL in all cases. (#279) + + if ares_getenv is defined, it must return a value on all platforms. + + Fix By: Egor Pugin (@egorpugin) + +- [Abhishek Arya brought this change] + + Add OSS-Fuzz fuzzing badge (#278) + + Adds based on instructions at + https://google.github.io/oss-fuzz/getting-started/new-project-guide/#status-badge + + Patch By: Abhishek Arya (@inferno-chromium) + +- [Peter Eisentraut brought this change] + + ares_init_options.3: Fix layout (#275) + + 7e6af8e inserted the documentation of resolvconf_path in the middle of + the item for ednspsz, leading to broken layout. Fix that. + + Fix By: Peter Eisentraut (@petere) + +- [Gregor Jasny brought this change] + + manpages: Fix typos detected by lintian (#269) + + + Fix By: Gregor Jasny (@gjasny) + +- [lifenjoiner brought this change] + + keep command line usage up to date (#256) + + adig and ahost built-in help did not match args taken. + + Fix-By: @lifenjoiner + +- [Dan Noé brought this change] + + ares-test.cc: Handle nullptr in AddrInfo ostream. (#268) + + The const AddrInfo& argument to operator<< overload for AddrInfo can be + a nullptr unique_ptr. Handle this explicitly by printing {nullptr} if + the rest of the function cannot be safely executed. + + Fix-by: Dan Noé + +- [Dan Noé brought this change] + + Add missing limits.h include from ares_getaddrinfo.c (#267) + + This files references INT_MAX, but does not include limits.h. This can + cause a build failure on some platforms. Include limits.h if we have it. + + Fix-by: Dan Noé + +- [Andrew Selivanov brought this change] + + fix fuzzer docs and add missing getaddrinfo docs (#265) + + There is a fix for a bit outdated clang fuzzer docs and ares_getaddrinfo docs. + + Fix By: Andrew Selivanov (@ki11roy) + +- [Andrew Selivanov brought this change] + + Fix leak and crash in ares_parse_a/aaaa_reply (#264) + + * fix leak if naddress of particular type found + * fix segfault when wanted ttls count lesser than count of result records + * add fuzzer input files that trigger problems (from #263) + + Reported-By: David Drysdale (@daviddrysdale) + Fix-By: Andrew Selivanov (@ki11roy) + +- [Andrew Selivanov brought this change] + + fix segfault when parsing wrong type of record (#262) + + Fixes segfault when trying to ares_parse_aaaa with AF_INET and vise versa. + + Fix By: Andrew Selivanov (@ki11roy) + +- work around mingw compile failure + +- c++ requires explicit casts + +- support EnvValue on Windows by implementing setenv/unsetenv + +- [Andrew Selivanov brought this change] + + getaddrinfo enhancements (#257) + + * Service support has been added to getaddrinfo. + * ares_parse_a/aaaa_record now share code with the addrinfo parser. + * Private ares_addrinfo structure with useful extensions such as ttls (including cname ttls), + as well as the ability to list multiple cnames in chain of lookups + + Work By: Andrew Selivanov @ki11roy + +- [Andrew Selivanov brought this change] + + fix ares__sortaddrinfo, use wrappers for sock_funcs (#258) + + Some socket functions weren't exposed for use by other areas of the library. Expose + those and make use of them in ares__sortaddrinfo(). + + Fix By: Andrew Selivanov (@ki11roy) + +- Fix c89 compilation support broken by .onion rejection changes + + Move .onion check lower after all variables have been declared. + + Bug: #246 + +- [kedixa brought this change] + + getaddrinfo: callback must be called on bad domain (#249) + + Due to an order of incrementing the remaining queries and calling ares_query, on a bad domain + the registered callback wouldn't be called. + + Bug: #248 + Fixed-By: @kedixa + +- [Darrin W. Cullop brought this change] + + Windows ARM/ARM64 requires AdvApi32 (#252) + + Fix link issues caused by missing library that appears to only be required on ARM (though + docs don't list this restriction). Doesn't hurt to require it everywhere. + + Bug: #251 + Fixed-By: Darrin Cullop (@dwcullop) + +- [kedixa brought this change] + + getaddrinfo: avoid infinite loop in case of NXDOMAIN(#240) (#242) + + There are two possible causes for infinite loops fo NXDOMAIN, based on how many dots are in the domain name (one for < ARES_OPT_NDOTS and one for >= ARES_OPT_NDOTS), where it will repeat the same query over and over as the hquery->next_domain doesn't increment. + + Fix By: @kedixa + +- Portability fix for ares__sortaddrinfo() + + replace uint32_t with unsigned int and socklen_t with ares_socklen_t + + By: Brad House + +- [Khaidi Chu brought this change] + + fix: init bufp before reject .onion to make it can be free correctly (#241) + + When querying a .onion domain, it returns directly without setting bufp to NULL. A subsequent free() that occurs can cause a segmentation fault. + + Fix By: Khaidi Chu (@XadillaX) + +- [Andrew Selivanov brought this change] + + Add ares__sortaddrinfo() to support getaddrinfo() sorted results (#239) + + This is a port of RFC 6724 compliant sorting function from Android Bionic project: + https://android.googlesource.com/platform/bionic/+/e919b116d35aa7deb24ddece69c491e24c3b0d6f/libc/netbsd/net/getaddrinfo.c + + The latest version is essentially the same, except two additional parameters to test connection with (mark/uid): + https://android.googlesource.com/platform/bionic/+/master/libc/dns/net/getaddrinfo.c + + Please note that even that version has some restrictions. It doesn't support some rules from RFC 6724: + + Rule 3 (Avoid deprecated addresses) + Rule 4 (Prefer home addresses) + Rule 7 (Prefer native transport) + + Submitted By: Andrew Selivanov (@ki11roy) + +- [Christian Ammer brought this change] + + Increase portability of `ares-test-mock-ai.cc` (#235) + + * using portable ares_inet_pton and updated includes in ares-test-mock-ai + * forgot to remove deleted ares-test-ai.cc in Makefile.inc + + Fix By: Christian Ammer (@ChristianAmmer) + +- [Fabrice Fontaine brought this change] + + m4/xc-cc-check.m4: use XC_CHECK_BUILD_FLAGS (#236) + + Use XC_CHECK_BUILD_FLAGS instead of XC_CHECK_USER_FLAGS. + Otherwise it complains of CPPFLAGS in CFLAGS. + [Retrieved from: + https://git.buildroot.net/buildroot/tree/package/c-ares/0001-use_check_build_instead_of_check_user.patch] + + Signed-off-by: Gustavo Zacarias + Signed-off-by: Fabrice Fontaine + Submitted by: Fabrice Fontaine + +- [Christian Ammer brought this change] + + Bugfix for `ares_getaddrinfo` and additional unit tests (#234) + + This PullRequest fixes a bug in the function add_to_addrinfo which task is to add new addrinfo items to the ai_next linked list. Also additional unit tests for testing ares_getaddrinfo will be added: + + Additional mock server test classes (ares-test-mock-ai.cc): + MockTCPChannelTestAI + MockExtraOptsTestAI + MockNoCheckRespChannelTestAI + MockEDNSChannelTestAI + RotateMultiMockTestAI + NoRotateMultiMockTestAI + + Additional live tests (ares-test-live-ai.cc): + LiveGetHostByNameV4 + LiveGetHostByNameV6 + LiveGetHostByNameV4AndV6 + + Fix By: Christian Ammer (@ChristianAmmer) + +- [Christian Ammer brought this change] + + Remaining queries counter fix, additional unit tests for `ares_getaddrinfo` (#233) + + Remaining queries counter fix, added tests (ParallelLookups, + SearchDomains, SearchDomainsServFailOnAAAA). Removed unnecessary + if and commented code in test. + + Fix By: Christian Ammer (@ChristianAmmer) + +- [Christian Ammer brought this change] + + Add initial implementation for ares_getaddrinfo (#112) + + Initial implementation for ares_getaddrinfo(). It is NOT compliant with RFC6724, though + it is expected to come closer to conformance prior to the next release. + + Features not supported include sorted addresses and honoring of service and hints + parameters. + + Implementation by: Christian Ammer (@ChristianAmmer) + +- [Ben Noordhuis brought this change] + + test: fix bad expectation in ipv6 localhost test (#227) + + The LiveGetLocalhostByAddrV6 test expected to see "localhost" in the + result when doing an address-to-name lookup for ::1 but on my system + that resolves to "ip6-loopback" because of this stanza in /etc/hosts: + + $ grep ^::1 /etc/hosts + ::1 ip6-localhost ip6-loopback + + Fix By: Ben Noordhuis (@bnoordhuis) + Bug: #85 + +- [Ben Noordhuis brought this change] + + ares_version.h: bump version (#230) + + Version change not committed from maketgz.sh + + Bug: #229 + +Daniel Stenberg (24 Oct 2018) +- ares_library_init_android.3: minor syntax edits, fixed AVAILABILITY + +Version 1.15.0 (23 Oct 2018) + +Brad House (23 Oct 2018) +- last minute 1.15.0 addition + +- [Ben Noordhuis brought this change] + + Report ARES_ENOTFOUND for .onion domain names as per RFC7686. (#228) + + Quoting RFC 7686: + + Name Resolution APIs and Libraries (...) MUST either respond + to requests for .onion names by resolving them according to + [tor-rendezvous] or by responding with NXDOMAIN. + + A legacy client may inadvertently attempt to resolve a .onion + name through the DNS. This causes a disclosure that the client + is attempting to use Tor to reach a specific service. Malicious + resolvers could be engineered to capture and record such leaks, + which might have very adverse consequences for the well-being + of the user. + + Bug: #196 + Fix By: Ben Noordhuis @bnoordhuis + +- prepare for c-ares 1.15.0 release + +- AIX Build Fix + + AIX attempts to include both nameser_compat.h and onameser_compat.h. It appears + the proper fix is to define _USE_IRS so that only nameser_compat.h is used. + + Bug: #224 + Fix By: Brad House (@bradh352) + +- Fix crash in ares_dup() due to new ARES_OPT_RESOLVCONF + + ares_dup() calls ares_init_options() by making its own fake option + mask since the original mask isn't stored but ARES_OPT_RESOLVCONF + was always set, instead of conditionally set. This caused a crash + because ares_strdup() isn't NULL-safe if no custom path was set. + + Made ares_dup() set ARES_OPT_RESOLVCONF conditionally. + + Fix By: Brad House (@bradh352) + +- [Sarat Addepalli brought this change] + + Add ares_init_options() configurability for path to resolv.conf file + + Add resolvconf_path to end of struct ares_options with ARES_OPT_RESOLVCONF option + so on Unix-like systems a custom path can be specified. If no path is specified, + /etc/resolv.conf is used like normal. + + Fix By: Sarat Addepalli @SirR4T + Fixes Bug: #220 + Review By: Brad House @bradh352 + +- remove stale variables + +- fix prototype name for ares_strsplit_free() + +- add missing prototype + +- simplify ares_strsplit() and create ares_strsplit_free() helper function + +- missing ares_strsplit.h from HHEADERS for inclusion in distribution + +- [Ruslan Baratov brought this change] + + Add CARES_BUILD_TOOLS CMake option (#214) + + Add ability to exclude building of tools (adig, ahost, acountry) in CMake. This should also close #200. + + Fix By: Ruslan Baratov (@ruslo) + Bug: #200 + +- [flyingdutchman23 brought this change] + + Style. Whitespace cleanup. (#213) + + Small whitespace cleanups. + + Fix By: @flyingdutchman23 + +- [John Schember brought this change] + + Android: Support for domain search suffix (#211) + + Fixes issue #207. Uses LinkProperties.getDomains() to get a list of search domains and adds them to the suffix list. This also adds a new helper function to split strings into an array based on multiple delimiters replacing multiple other functions for dealing with string splitting. + + Submitter: John Schember (@user-none) + Fixes: #207 + Approved-by: Brad House (@bradh352) + +- [afalin brought this change] + + Improve DNS suffixes extracting from WinNT registry (#202) + + Join all global and connection specific suffix lists. Use 'HKLM\Software\Policies\Microsoft\Windows NT\DNSClient\SearchList', 'HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Domain' as global suffix lists. + + Fix By: @afalin + +- Be consistent with indention in CMakeLists.txt + + The imported TRANSFORM_MAKEFILE_INC function from curl used space indention + but the rest of the file used tabs. Go ahead and make it tabs for + consistency as well. + + Committed By: Brad House + +- [flyingdutchman23 brought this change] + + Fix modern gcc warning: argument to 'sizeof' in 'strncpy' call is the same expression as the source + + Silence warning about using src to determine number of bytes to copy. + In this case it doesn't matter whether it is `src` or `dest`. So there + is no functionality change. + + Bug: #210 + Fix By: @flyingdutchman23 + +- [Andi Schnebinger brought this change] + + fix stringop-overflow warning of GCC (#201) + + When using a modern GCC to compile c-ares, there is a stringop-overflow warning. + This patch simply silences the false-positive warning, there is no actual code flaw. + + Bug: https://github.com/c-ares/c-ares/pull/201 + Fixed By: Andi Schnebinger @Iniesta8 + +GitHub (18 May 2018) +- [David Drysdale brought this change] + + travis: do coverage in "coverage" build (#195) + + Fixes #194, a mistake from commit a255081f2c3c ("travis: Only do + coverage/distcheck on normal build") + +Brad House (17 May 2018) +- [Brad Spencer brought this change] + + Apply the IPv6 server blacklist to all nameserver sources, not just Windows (#193) + + For #164, I mentioned that it seemed like the IPv6 nameserver blacklist should apply to all OSes. In a mailing list post, @bradh352 agreed and suggested that I file a PR to make it so. + + This moves the blacklist check from being Windows-specific to being a general feature of config_nameservers(), no matter the nameserver source. It also simplifies the ares_ipv6_server_blacklisted() implementation to not parse and re-parse the blacklisted IPv6 addresses from strings on every check. I think they're almost as easy to read as a sequence of hex bytes in an array initializer, and it's definitely less work on each trip through the code. + + Fix By: Brad Spencer @b-spencer + PR: https://github.com/c-ares/c-ares/pull/193 + +- [Brad Spencer brought this change] + + Fix warnings emitted by MSVC when using -W4 (#192) + + These changes fix a few warnings emitted by recent versions of MSVC when compiling with -W4. Half of the changes are in Windows-specific code, and the other half should be safe no matter the compiler or OS. + + The allocation function change is probably the only one that needs explanation. MSVC gives warnings about the function pointers not being stable across DLL boundaries or something to that effect, so for Windows, I've made them be called indirectly, which at least made the compiler happy. I can't say I've tested every linking combination on Windows with them before or after the change, but it seems harmless. + + Fix By: Brad Spencer @b-spencer + PR: https://github.com/c-ares/c-ares/pull/192 + +- [David Hotham brought this change] + + Prevent changing name servers while queries are outstanding (#191) + + Changing name servers doesn't work, per #41. Better to return an error code than to crash. + + Fix-by: David Hotham @dimbleby + +David Drysdale (15 May 2018) +- [Tobias Nießen brought this change] + + Fix comment in ares_rules.h (#189) + +Brad House (6 May 2018) +- [Brad Spencer brought this change] + + Harden and rationalize c-ares timeout computation (#187) + + * Harden and rationalize c-ares timeout computation + * Remove the rand() part of the timeout calculation completely. + + When c-ares sends a DNS query, it computes the timeout for that request as follows: + + timeplus = channel->timeout << (query->try_count / channel->nservers); + timeplus = (timeplus * (9 + (rand () & 7))) / 16; + I see two issues with this code. Firstly, when either try_count or channel->timeout are large enough, this can end up as an illegal shift. + + Secondly, the algorithm for adding the random timeout (added in 2009) is surprising. The original commit that introduced this algorithm says it was done to avoid a "packet storm". But, the algorithm appears to only reduce the timeout by an amount proportional to the scaled timeout's magnitude. It isn't clear to me that, for example, cutting a 30 second timeout almost in half to roughly 17 seconds is appropriate. Even with the default timeout of 5000 ms, this algorithm computes values between 2812 ms and 5000 ms, which is enough to cause a slightly latent DNS response to get spuriously dropped. + + If preventing the timers from all expiring at the same time really is desirable, then it seems better to extend the timeout by a small factor so that the application gets at least the timeout it asked for, and maybe a little more. In my experience, this is common practice for timeouts: applications expect that a timeout will happen at or after the designated time (but not before), allowing for delay in detecting and reporting the timeout. Furthermore, it seems like the timeout shouldn't be extended by very much (we don't want a 30 second timeout changing into a 45 second timeout, either). + + Consider also the documentation of channel->timeout in ares_init_options(): + + The number of milliseconds each name server is given to respond to a query on the first try. (After the first try, the timeout algorithm becomes more complicated, but scales linearly with the value of timeout.) The default is five seconds. + + In the current implementation, even the first try does not use the value that the user supplies; it will use anywhere between 56% and 100% of that value. + + The attached patch attempts to address all of these concerns without trying to make the algorithm much more sophisticated. After performing a safe shift, this patch simply adds a small random timeout to the computed value of between 0 ms and 511 ms. I could see limiting the random amount to be no greater than a proportion of the configured magnitude, but I can't see scaling the random with the overall computed timeout. As far as I understand, the goal is just to schedule retries "not at the same exact time", so a small difference seems sufficient. + + UPDATE: randomization removed. + + Closes PR #187 + Fix by: Brad Spencer + +- distribute ares_android.h + + Distribute ares_android.h when a release distribution package is + created. + + Reported By: Andrey Khranovsky + Bug: https://c-ares.haxx.se/mail/c-ares-archive-2018-04/0000.shtml + +- ares_set_servers_csv() on failure should not leave channel in a bad state + + If bad data is passed to ares_set_servers_csv() or + ares_set_servers_ports_csv() it will clear the existing channel + configured DNS servers, then a call to ares_send() will fail due + to a bad malloc which may have undefined behavior. + + The fix now only clears existing servers on success. An additional + sanity check was added in ares_send() to ensure nservers >= 1 or + will result in ARES_ESERVFAIL. + + Bug: https://c-ares.haxx.se/mail/c-ares-archive-2018-03/0000.shtml + Reported-by: Francisco Sedano Crippa + +- docs: Not all manpages are listed + + Some docs aren't installed or not showing up on + https://c-ares.haxx.se/docs.html + due to not being listed in Makefile.inc. Add missing docs and + ensure docs are alphabetized. + +Version 1.14.0 (16 Feb 2018) + +Daniel Stenberg (16 Feb 2018) +- ares_android.c: fix warning: ISO C forbids an empty translation unit + +- RELEASE-NOTES: some more work we did and people who helped + +Brad House (16 Feb 2018) +- travis: skip Autotools style testing for cmake + + Fix cmake test build by skipping autotools portion of test script. + +- travis: standardize CMake test off of Autotools tests + + Instead of running 'make test', run the tests directly like autotools + does. It provides more verbose output. + +- travis: Enable building tests for CMake + + Travis should auto-build and run tests for cmake builds now that + PR #168 is merged. + +- fix version in pkgconfig + +- Add version update to CMakeLists in maketgz + +- Release prep. Add support for pkgconfig in cmake, set versions appropriately + +Gregor Jasny (15 Feb 2018) +- CMake: Add tests + +Brad House (14 Feb 2018) +- [Gregor Jasny brought this change] + + Use cmake3 package provided by Ubuntu (#182) + +- Cmake 3.1 instead of 3.2.1 should be the minimum + +- Update RELEASE-NOTES and RELEASE-PROCEDURE.md to prepare for next release + +- get rid of c++ style comments + +- Use trusty for all builds, precise is EOL. Update clang and cmake versions. + +- Current CMakeLists.txt doesn't support 2.8.12 anymore, we need to bump the version to 3.2.1 minimum + +- Re-organize sections in INSTALL.md and add CMake section + +- [Sergey Kolomenkin brought this change] + + remove compilation warnings in MSVC (#47) + +- document handling of timeouts for ares_process and ares_process_fd to close PR #57 + +- As per Issue #155, since we do not require gethostname() during init, if it fails, there's no reason for init to fail as it is only used to populate the domain + +GitHub (7 Feb 2018) +- [David Drysdale brought this change] + + Document WSAStartup requirement (#180) + +David Drysdale (6 Feb 2018) +- [Antonio Tajuelo brought this change] + + Added coderelease.io badge to readme.md for letting people subscribe to new versions (#174) + +- [Sheel Bedi brought this change] + + Update year in LICENSE.md to 2018 (#170) + +GitHub (4 Feb 2018) +- [David Drysdale brought this change] + + travis: use VM not container for {L,A}SAN builds (#177) + + As per https://github.com/travis-ci/travis-ci/issues/9033, container + based builds do not currently allow ptrace, which is used by LSAN and + ASAN. + +Brad House (3 Feb 2018) +- [acthompson-google-com brought this change] + + Android JNI code leaks local references in some cases (#175) + + * Add Google LLC to AUTHORS. + + * android: Explicitly delete all JNI local references, and cache JNI method IDs at initialization. + + * android: Only return ARES_ENOTINITIALIZED on failures in initialization code. + +Gregor Jasny (2 Jan 2018) +- Embed fused Google Test 1.8.0 + +Brad House (21 Dec 2017) +- [John Schember brought this change] + + android: Check returns for obj and classes are not NULL. Document API levels for various Android functions and objects used. (#166) + +- CARES_CHECK_TYPE should reference variable so a warning is not produced for -Werror compatibility + +- [Brad Spencer brought this change] + + Fix computation of IPv6 blacklist mask for values of netmask > 8. (#164) + +David Drysdale (14 Dec 2017) +- travis: Only do coverage/distcheck on normal build + +- travis: only do pip install on Linux + +- travis: only test in IPv4 mode + + Travis' Trusty environment does not support IPv6. + +- test: allow restriction to one IP address family + +- [Roman Teterin brought this change] + + Fix a typo in init_by_resolv_conf (#160) + +Brad House (11 Dec 2017) +- @gvanem says MSVC -RTCc option fails, looks erroneous to me, but the additional mask is harmless + +- Fix some other mingw warnings + +- Issue #143, get rid of windows build warning due to passing 'char **' to argument expecting 'const char **' + +- [Gregor Jasny brought this change] + + Distribute CMake files (#130) + +- Android variants may not have __system_property_get + + Some android systems like ARM64 may not have the __system_property_get + symbol in libc (but still have it in the public headers). Detect this + condition at build time. The __system_property_get method of retrieving + name servers is deprecated as of Oreo so should strictly be a fallback + mechanism anyhow. + +David Drysdale (9 Nov 2017) +- [David Hotham brought this change] + + Wrong function name throughout man page (#154) + +- ares_data.c: iterate through substructs when freeing + + Previous code recursed into substructures, which makes it more likely + that large/heavily-nested responses could use up lots of stack. + +- test: test ares_free_data on long chain of structs + +- [Felix Yan brought this change] + + Fix a typo in inet_ntop.c (#151) + +Daniel Stenberg (29 Sep 2017) +- ares_gethostbyname.3: fix callback status values + + - ARES_ENOTFOUND means the _name_ wasn't found + + - ARES_ENODATA can be returned when a resolve fails + + Reported-by: Jakub Hrozek + Bug: https://c-ares.haxx.se/mail/c-ares-archive-2011-06/0012.shtml + +Brad House (28 Sep 2017) +- [John Schember brought this change] + + Fix DNS server lookup breaking with Android O due to Android removing access to net.dns# system properties. (#148) + + As of Android 8 (Oreo) access to net.dns# has been removed (https://developer.android.com/about/versions/oreo/android-8.0-changes.html). The reasoning given is that it, "improves privacy on the platform". Currently c-ares uses this to get the list of DNS servers. + + Now the only way to access the DNS server list is by using the Connectivity Manager though Java. This adds the necessary JNI code to use the Connectivity Manager and pull the DNS server list. The old way using __system_property_get with net.dns# remains for compatibilty. + + Using the Connectivity Manager requires the ACCESS_NETWORK_STATE permission to be set on the app. Existing applications most likely are not setting this and keeping the previous method as a fallback will at the very least ensure those apps don't break on older versions of Android. They will need to add this permission for Android 8 compatibility. + + Included in the patch are two initalization functions which are required. The JVM must be registered as well as the Connectivity Manager itself. There is no way to get the Connectivity Manager except though Java. Either being passed down to C directly or by passing in an Android Context which can be used to get the Connectivity Manager. Examples are provided in the documentation. + +- [Konstantinos Sofokleous brought this change] + + allow linking against the static msvc runtime library (#133) + + allow linking against the static msvc runtime library + +- [Gergely Nagy brought this change] + + Force using the ANSI versions of WinAPI functions (#142) + + When compiling c-ares with a build system that defines UNICODE, + bad versions of WinAPI functions are used causing failures or even + crashes. When windows.h is included in MBCS mode (like in the default + build system), the ..A versions are the same as using the one without + any suffix. + +- [cmake] build fix on Solaris + +GitHub (11 Sep 2017) +- [Brad House brought this change] + + Win32 exclude legacy ipv6 subnets (#144) + + win32 ipv6: add infrastructure to exclude ipv6 subnets that are known to cause issues + +- [David Drysdale brought this change] + + windows: only look for ancient compilers (#146) + + Also drop the use of a versioned output directory; just use + .\msvc + +- [David Drysdale brought this change] + + ares_init_options.3: match up sock_state_cb args (#141) + + Fixes #140 + +Daniel Stenberg (25 Aug 2017) +- [Anna Henningsen brought this change] + + gethostbyaddr: fail with `ECANCELLED` for `ares_cancel()` + + When `ares_cancel()` was invoked, `ares_gethostbyaddr()` + queries would fail with `ENOTFOUND` instead of `ECANCELLED`. + + It seems appropriate to treat `ares_cancel()` like `ares_destroy()`, + but I would appreciate review of the correctness of this change. + + Ref: https://github.com/nodejs/node/issues/14814 + + Closes #138 + +David Drysdale (18 Aug 2017) +- [David Hotham brought this change] + + support most recent Visual Studio 2017 + +Brad House (26 Jul 2017) +- Preserve original DNS server order on Windows for equal metrics. + + qsort is not stable, in order to make it stable we need to record + the original index and add it as a secondary sort value when the + metrics are equal to prevent using DNS servers that may not work + at all as reported by some users. + +David Drysdale (15 Jul 2017) +- [Anna Henningsen brought this change] + + ares_parse_naptr_reply: make buffer length check more accurate + + 9478908a490a6bf009ba58d81de8c1d06d50a117 introduced a length check + for records parsed by `ares_parse_naptr_reply()`. However, that + function is designed to parse replies which also contain non-NAPTR + records; for A records, the `rr_len > 7` check will fail as there + are only 4 bytes of payload. + In particular, parsing ANY replies for NAPTR records was broken + by that patch. + + Fix that by moving the check into the case in which it is already + known that the record is a NAPTR record. + +- appveyor: run dnsdump as a sanity check + +- travis: run dnsdump as a sanity check + +- test: use ares_free_string() throughout + + As pointed out by Gisle Vanem in #125. + +Daniel Stenberg (3 Jul 2017) +- RELEASE-PROCEDURE.md: how to release + + Fixes #115 + Closes #116 + +David Drysdale (2 Jul 2017) +- test: Build dnsdump on Windows too + + Thanks to Gisle Vanem for showing the way: + https://github.com/c-ares/c-ares/commit/b701af8a24cf9d173b1dbe5faedcea34642e92da#commitcomment-22830845 + +Brad House (26 Jun 2017) +- [Christian Ammer brought this change] + + fix statement like #define - ares ssize_t define had a trailing semicolon (#120) + +David Drysdale (21 Jun 2017) +- test: distribute the fuzzcheck.sh script + + The TESTS target runs fuzzcheck.sh so make sure it is included + in the distributed tarball. + + (The test itself will be pointless when run on a distribution, because + the fuzzing corpus directories are not shipped, but at least this + means that `make -C test test` should work.) + +- test: run the name-parsing corpus check too + +Daniel Stenberg (21 Jun 2017) +- dist: don't build/ship PDF versions in release archives + + ... experience says very few read them and they can still get build by + those who want them.a + +- ares_version.h: bump version + +Version 1.13.0 (20 Jun 2017) + +Daniel Stenberg (20 Jun 2017) +- RELEASE-NOTES: 1.13.0 + +- ares_set_socket_functions.3: added in 1.13.0 + +David Drysdale (18 Jun 2017) +- ares_parse_naptr_reply: check sufficient data + + Check that there is enough data for the required elements + of an NAPTR record (2 int16, 3 bytes for string lengths) + before processing a record. + +- test: Feed in short NAPTR + +- test: Add fuzz input with short NAPTR + +- test: add ares_parse_naptr_reply to fuzzer + +- [noiz brought this change] + + Update ares.h to support compiling with QNX + +- [Dionna Glaze brought this change] + + Simple changes to appease stricter compilers. + + ares_process.c uses htonl, which needs included. + ares_getnameinfo.c uses a dynamically selected format string for + sprintf, which -Wformat-literal doesn't like. Usually one would use + inttypes.h and a format string "%" PRIu32, but C99 is too new for some + supported platforms. + +GitHub (16 Jun 2017) +- [Gregor Jasny brought this change] + + CMake: Emulate interface library on import (#108) + + Closes: #104 + Signed-off-by: Gregor Jasny + +Brad House (6 Jun 2017) +- [ChristianAmmer brought this change] + + Added support for Windows DNS Suffix Search List (#93) + + This change solves issue #53. + + Support for suffix search lists was already built in for Linux. The search list could be set via set_search. With this change the suffix search list from Windows is read from the registry and then set into the ares configuration via set_search. There are two sources for the search list: + + The global DNS suffix search list. + The primary and connection specific DNS suffixes if the global is not available. + + Contributed by @ChristianAmmer + +Daniel Stenberg (25 May 2017) +- [Thomas Köckerbauer brought this change] + + configure: do not heck for ar if specified manually + + Closes #62 + +David Drysdale (23 May 2017) +- ares_expand_name: limit number of indirections + +- test: fuzz input file that takes a while to process + +- test: copy data in fuzz regression driver + + Oops. + +GitHub (23 May 2017) +- [David Drysdale brought this change] + + Convert char from ISO-8859-1 to UTF-8 (#99) + + Fixes #97 + +- [Gregor Jasny brought this change] + + travis: Use trusty for cmake builds (#109) + + kubuntu-backports dropped the CMake package for Precise + +David Drysdale (2 May 2017) +- [David Hotham brought this change] + + msvc_ver.inc support most recent Visual Studio 2017 (#101) + +- test: use io.h not unistd.h for Windows + +- test: try building fuzz binaries on Windows + +- test: stick to int in ares-fuzz.c + + Using int rather than ares_ssize_t means this file + needs no c-ares dependency - it's a general driver for + any libFuzzer-style entrypoint. + +- test: force ARES_OPT_NOROTATE for no-rotate tests + +- test: check expected NOROTATE value + +- ares_create_query: use ares_free not naked free + + Accidentally added in commit 65c71be1cbe5 + ("ares_create_query: avoid single-byte buffer overwrite") + +Brad House (17 Mar 2017) +- Need ares.h for ares_ssize_t + +- tests should not use ssize_t, use ares_ssize_t + +GitHub (16 Mar 2017) +- [Brad House brought this change] + + Portability updates for legacy systems. (#92) + + Socklen_t should not be used in code, instead ares_socklen_t should be used. + Convert ssize_t to ares_ssize_t for portability since the public API now exposes this. + +David Drysdale (14 Mar 2017) +- [Michael Osei brought this change] + + Update msvc_ver.inc (#91) + + For Visual Studio 2017 builds + +Daniel Stenberg (13 Mar 2017) +- [Brad House brought this change] + + Windows DNS server sorting (#81) + + Original Patch From Brad Spencer: + https://c-ares.haxx.se/mail/c-ares-archive-2016-04/0000.shtml + + My modifications include: + * Dynamically find GetBestRoute2 since it is a Windows Vista+ symbol, and will fall back to prior behavior when not available. + * Prefer get_DNS_AdaptersAddresses as the modifications should alleviate the concerns which caused us to prefer get_DNS_NetworkParams + * Update AppVeyor to use MinGW-w64 instead of the legacy MinGW + * Fix compile error in test suite for Windows. + + Original message from patch below: + + From: Brad Spencer + Date: Fri, 29 Apr 2016 14:26:23 -0300 + + On Windows, the c-ares DNS resolver tries first to get a full list of + DNS server addresses by enumerating the system's IPv4/v6 interfaces and + then getting the per-interface DNS server lists from those interfaces + and joining them together. The OS, at least in the way the c-ares + prefers to query them (which also may be the only or best way in some + environments), does not provide a unified list of DNS servers ordered + according to "current network conditions". Currently, c-ares will then + try to use them in whatever order the nested enumeration produces, which + may result in DNS requests being sent to servers on one interface + (hosting the current default route, for example) that are only intended + to be used via another interface (intended to be used when the first + interface is not available, for example). This, in turn, can lead to + spurious failures and timeouts simply because of the server address + order that resulted because of the enumeration process. + + This patch makes the (safe?) assumption that there is no other better + rule to chose which interface's DNS server list should be prioritized. + After all, a DNS lookup isn't something "per network"; applications + don't look up "these DNS names on this interface and those DNS names on + that interface". There is a single resource pool of DNS servers and the + application should presume that any server will give it the "right" + answer. However, even if all DNS servers are assumed to give equally + useful responses, it is reasonable to expect that some DNS servers will + not accept requests on all interfaces. This patch avoids the problem by + sorting the DNS server addresses using the Windows IPv4/v6 routing tables. + + For example, a request to DNS server C on interface 2 that is actually + sent over interface 1 (which may happen to have the default route) may + be rejected by or not delivered to DNS server C. So, better to use DNS + servers A and B associated with interface 1, at least as a first try. + + By using the metric of the route to the DNS server itself as a proxy for + priority of the DNS server in the list, this patch is able to adapt + dynamically to changes in the interface list, the DNS server lists per + interface, which interfaces are active, the routing table, and so on, + while always picking a good "best" DNS server first. + + In cases where any DNS server on any interface will do, this patch still + seems useful because it will prioritize a lower-metric route's (and thus + interface's) servers. + +David Drysdale (22 Feb 2017) +- [Sergii Pylypenko brought this change] + + docs: fixed references to ares_set_local_ip4 and ares_set_local_ip6 + +- [Calle Wilund brought this change] + + ares test: fix win32 build errors with virtual socket function tests + + The added api requires both some typedefs not previously imported + into the test build + the test code did not fully deal with + socket differences on windows. + +- [Calle Wilund brought this change] + + ares_process: fix return type of socket_create function (win32 warning) + +Daniel Stenberg (31 Jan 2017) +- [Calle Wilund brought this change] + + ares_set_socket_functions: Add man page + + Providing some rudimentary documentation for the added functionality + + Closes #72 + +- [Calle Wilund brought this change] + + ares-test: Add test helpers and cases for virtual socket IO + + * Added test case macro to automatically run tests twice, once "normal", + once with virtual IO. + * Changed most "live" query tests to run in dual mode to verify + at least simple socket IO via virtual functions + * Added test case for settings/duping socket functions & callback data + +- [elcallio brought this change] + + Implement using virtual socket IO functions when set + + Uses virtual socket IO functions when set on a channel. + Note that no socket options are set, nor is any binding + done by the library in this case, since the client defining + these is probably more suited to deal with this. + +- [elcallio brought this change] + + Add virtual function set for socket IO + + Defines a structure of basic create, close, read/write + functions as virtual function calls, settable for individual + c-ares channels. + +David Drysdale (30 Jan 2017) +- test: ignore aresfuzzname binary + +Gregor Jasny (14 Jan 2017) +- [Stephen Sorley brought this change] + + Always use check_symbol_exists instead of check_function_exists. + +- Also add includes to TARGETS_INST_DEST + +- [Stephen Sorley brought this change] + + Windows build fixes + +- CMake: Export targets + +- CMake: Use GNUInstallDirs for install location defaults + +David Drysdale (11 Jan 2017) +- Update Makefile.am for renamed INSTALL.md + +GitHub (11 Jan 2017) +- [David Drysdale brought this change] + + docs: convert INSTALL to MarkDown & tweak (#83) + +- [Gregor Jasny brought this change] + + Merge pull request #77 from stephen-sorley/cmake_modernize + + Updated CMake minimum version to 2.8.12. + +Stephen Sorley (4 Jan 2017) +- Changed executables to depend directly on internal libcares target, instead of against + the external-facing alias targets. + +- Updated Travis to pull CMake 2.8.12 from kubuntu-backports ppa. + +- Updated CMake minimum version to 2.8.12. + + Changed the way usage requirements (include dirs, compile defs, dependent libraries) are specified, to match the recommended standard practice for modern CMake. This involves using target-specific functions (target_include_directories, target_compile_definitions, etc.), along with the PUBLIC, PRIVATE or INTERFACE modifiers. + + Updated chain-building support to imitate new-style Find modules (import libs), instead of old-style Find modules (cache variables). + +David Drysdale (26 Dec 2016) +- [Chris Araman brought this change] + + configure: clock_gettime workaround (#75) + + Commits 7518c26, c41726b, and bc14ee7 brought this workaround to the CMake build system. This expands it to the autoconf build system. + + Fixes #71 + +- test: add fuzz entrypoint for ares_create_query() + +- test: Add gTest/gMock files to SOURCES + + Built tarballs are not including all of the files needed + to build the test suite because they are missing from the + _SOURCES variable in Makefile.am. + +- travis: Move build scripts under travis/ + + Travis doesn't always propagate errors in inline multi-line + scripts, so move them all to be explicit shell scripts, each + with set -e. + +- travis: check distributed tarball builds + +Daniel Stenberg (25 Oct 2016) +- dist: ship msvc_ver.inc too + + Reported-by: Bruce Stephens + + Fixes #69 + +- [Aaron Bieber brought this change] + + fix build on OpenBSD + +- ares_version.h: bump, working on 1.12.1 now + +GitHub (18 Oct 2016) +- [Gregor Jasny brought this change] + + Merge pull request #64 from bradh352/master + + Add CMake build system support to C-Ares. + +Brad House (5 Oct 2016) +- suggested PROJECT_NAME change broke chain building as it needs the magic PROJECT_NAME set in the ADD_LIBRARY for matching. Fix to make both goals work + +- update MacOSX 10.12 detection + +- Expand XCode clock_gettime fix to include MacOS 10.12, not just iOS10 + +David Drysdale (4 Oct 2016) +- Revert "travis: work around bug in PyCParser" + + This reverts commit a24a10a348fc00b8cfd684d91894a1df14880ea9. + +- travis: work around bug in PyCParser + + See https://github.com/pyca/cryptography/issues/3187 + +Brad House (3 Oct 2016) +- PROJECT_SOURCE_DIR instead of CMAKE_CURRENT_SOURCE_DIR as per @gjasny + +- use a project name of c-ares as per @gjasny + +- Import curl conversion of Makefile.inc to cmake form dynamically as per bdoetsch@ameritech.net to make maintaining multiple build systems easier + +Daniel Stenberg (30 Sep 2016) +- dist: add ares_library_initialized.* to the tarball + +David Drysdale (30 Sep 2016) +- test: check ares_create_query with too-long name + +Daniel Stenberg (30 Sep 2016) +- man pages: minor formatting edits + +Brad House (29 Sep 2016) +- merge fc7917e from @daviddrysdale ... travis build updates for cmake + +- cleanups as per @gjasny ... Use naked IF statements and use NOT DEFINED + +Version 1.12.0 (29 Sep 2016) + +Daniel Stenberg (29 Sep 2016) +- RELEASE-NOTES: 1.12.0 + +- [David Drysdale brought this change] + + ares-test-misc: test ares_create_query with escaped trailing dot + +- ares_create_query: avoid single-byte buffer overwrite + + ... when the name ends with an escaped dot. + + CVE-2016-5180 + + Bug: https://c-ares.haxx.se/adv_20160929.html + +Brad House (29 Sep 2016) +- CMake: Unify library versioning with the libtool methodology to make keeping library versions in sync easier with the autotools build system + +Daniel Stenberg (29 Sep 2016) +- ares_library_initialized.3: added + +- make: bump CARES_VERSION_INFO for release + +David Drysdale (29 Sep 2016) +- man: update ares_init_options.3 + +Daniel Stenberg (29 Sep 2016) +- ares_library_init.3: corrected the ares_library_init_mem proto + +Brad House (28 Sep 2016) +- XCode v8 introduced clock_gettime() for iOS v10. However, it is a weak symbol, which means when earlier iOS versions try to use clock_gettime() it results in a crash due to the missing symbol. Detect this condition and do not set HAVE_CLOCK_GETTIME_MONOTONIC. + +- Adds cmake build system support to C-Ares. + + The patch does not modify any source files, it only adds 3 new files + (CMakelists.txt, ares_build.h.cmake, ares_config.h.cmake) which form the + build system. I've tried to go through as much of the autotools tests and + extracted what I thought was appropriate, though many of the tests aren't + as in-depth in CMake as they are for autotools ... it is unclear why some + of them exist at all, I'm guessing for legacy systems that CMake probably + doesn't support anyhow. + + Building the library, and examples (adig, ahost, acountry) plus installation + should work across a large number of tested platforms. The tests have not + yet been integrated. + +Daniel Stenberg (27 Sep 2016) +- README.md: remove space from link + +- README: link to the correct c-ares badge! + + Reported-by: David Hotham + + Fixes #63 + +- docs: minor formatting edits + +- ares_destroy.3: formatting polish + +- ares_init.3: split the init docs into two separate man pages + +- SECURITY: point to the vulnerabilities page now + +- RELEASE-NOTES: synced with daa7235b1a5 + +- ares_create_query.3: edit language + + Tried to make the man page more readable. + +David Drysdale (26 Sep 2016) +- test: fix gMock to work with gcc >= 6.x + + Taken from: + https://github.com/google/googletest/issues/705#issuecomment-235067917 + +Daniel Stenberg (26 Sep 2016) +- [Brad House brought this change] + + headers: remove checks for and defines of variable sizes + + ... they're not really used and by avoiding them in the ares_build.h + output we make the public header less dependent on data sizes. + +David Drysdale (24 Sep 2016) +- api: add ARES_OPT_NOROTATE optmask value + + Fix up a couple of problems with configuring whether c-ares rotates + between different name servers between requests. + + Firstly, ares_save_options() returns (in *optmask) the value of + (channel->optmask & ARES_OPT_ROTATE), which doesn't necessarily + indicate whether the channel is or is not actually doing rotation. + This can be confusing/incorrect if: + - the channel was originally configured without ARES_OPT_ROTATE + (so it appears that the channel is not rotating) + - the /etc/resolv.conf file includes the 'rotate' option + (so the channel is actually performing rotation). + + Secondly, it is not possible to reliably configure a channel + to not-rotate; leaving off ARES_OPT_ROTATE is not enough, since + a 'rotate' option in /etc/resolv.conf will turn it on again. + + Therefore: + - add an ARES_OPT_NOROTATE optmask value to allow explicit + configuration of no-rotate behaviour + - in ares_save_options(), report the value of channel->rotate + as exactly one of (optmask & ARES_OPT_ROTATE) or + (optmask & ARES_OPT_NOROTATE). + + In terms of back-compatibility: + - existing apps that set ARES_OPT_ROTATE will continue to rotate, + and to have ARES_OPT_ROTATE reported back from ares_save_options() + - existing apps that don't set ARES_OPT_ROTATE will continue to + use local config/defaults to decide whether to rotate, and will + now get ARES_OPT_ROTATE or ARES_OPT_NOROTATE reported back from + ares_save_options() rather than 0. + +- ares_init_options: only propagate init failures from options + + Commit 46bb820be3a8 ("ares_init_options: don't lose init failure") + changed init behaviour so that earlier errors in initialization + weren't lost. In particular, if the user passes in specific + options but they are not applied (e.g. because of an allocation + failure), that failure needs to be reported back to the user; this + also applies when duplicating a channel with ares_dup(). + + However, other initialization failures can be ignored and + overridden -- in particular, if init_by_resolv_conf() or + init_by_environment() fail, then falling back to default values + is OK. + + So only preserve failures from the init_by_options() stage, not + from all initialization stages. + + Fixes issue 60. + +- test: Force reinstall of libtool on OSX + + Travis build environment appears to have changed. + +- test: Add valgrind build variant + +- test: Add null pointer to gtest args + + GoogleTest assumes that there is a null pointer in argv[argc], + so make it look like that. Without this change, tests run with + command-line arguments get memory errors under valgrind/ASAN. + +Daniel Stenberg (21 Aug 2016) +- AUTHOR: maybe gitgub isn't really an author =) + +- AUTHORS: added contributors from the git log + +- LICENSE.md: add a stand-alone license file + + Just the MIT license used in the top the source files moved out to a + stand-alone file for easier reference and discovery. + +- README: added "CII best practices" badge + +- SECURITY.md: suggested "security process" for the project + +David Drysdale (17 Aug 2016) +- test: Add Clang static analysis build to Travis + + Run scan-build over the library source code, but skip the + tests. Needs a later Clang install in Travis + +- test: more info on how to run fuzz testing + +- test: make fuzzer driver code C not C++ + +- test: fuzzer mode for AFL's persistent mode + + When fuzzing with AFL, if the LLVM-based instrumentation is + used (via the afl-clang-fast wrapper), then it is possible to + have a single execution of the fuzzer program iterate multiple + times over the fuzzing entrypoint (similar to libFuzzer's normal + mode of execution) with different data. This is much (e.g. 10x) + faster. + + Add code to support this, by checking whether __AFL_LOOP is + defined at compile-time. + + Also, shift the code to effectively be C rather than C++. + +- test: simplify deps for fuzzer entrypoint + + No need to depend on the rest of the test code (ares-test.h) for + the fuzzer entrypoint; this makes the entrypoint slightly simpler + to build with LLVM's libFuzzer. + + Also shift the code to effectively be C rather than C++ + +- test: disable MinGW tests + + The test binary built in the MinGW build is failing for some + reason. It works for me when I build locally, so I'm guessing + it's down to some sort of AppVeyor environment issue. + + Disable for now. + +Daniel Stenberg (16 Aug 2016) +- read_tcp_data: remove superfluous NULL check + + CID 56884 by Coverity. The pointer is already derefenced before this + point so it can't be NULL here anyway. + +- web: http => https + +GitHub (20 Jul 2016) +- [David Drysdale brought this change] + + Merge pull request #59 from fuze/master + + Update msvc_ver.inc for VS2015 Update 3 + +- [Chris Araman brought this change] + + Update msvc_ver.inc + + support Visual Studio 2015 Update 3 + +David Drysdale (2 May 2016) +- Fix trailing comment for #endif + +Daniel Stenberg (30 Apr 2016) +- email: use Gisle's "new" address + +David Drysdale (18 Apr 2016) +- test: drop superfluous fuzz inputs + + Where there are multiple fuzz input files that only differ in + the first two bytes (the query ID), just keep the first such + file. + +svante karlsson (15 Apr 2016) +- Update msvc_ver.inc + + support Visual Studio 2015 Update 2 + +David Drysdale (31 Mar 2016) +- test: Run fuzzcheck.sh in Travis build + +- test: add fuzzing check script to tests + + Add a test script that runs the fuzzing command over the + corpus of DNS packets. This doesn't actually do any fuzzing + (it just runs them as inputs without generating any variations) + but it does ensure that the fuzzing entrypoint is still working. + +- test: allow multiple files in aresfuzz command line + + If no arguments are specified, use stdin as input. + Otherwise treat each argument as a filename and feed + its contents to the fuzz entrypoint. + +- test: Add corpus of DNS packets + + For fuzz testing it is useful to start from a corpus of valid + packets, so fill out the test/fuzzinput/ directory with a bunch + of inputs. + + These packets were generated by temporarily modifying the c-ares + process_answer() function to save off any incoming response messages. + +- test: Add utility to show DNS packet from file + +- [nordsturm brought this change] + + Fix nsort initialization + + Author: Alexander Drachevskiy + http://c-ares.haxx.se/mail/c-ares-archive-2014-07/0004.shtml + http://c-ares.haxx.se/mail/c-ares-archive-2014-07/0014.shtml + +- test: Check setting nsort=0 option is respected + +- test: Update fuzzing function prototype + + libFuzzer changed expected return type from void to int + in LLVM 3.8. + +- Explicitly clear struct servent before use + + On a build where MSAN has been manually set up (which involves + using an MSAN-instrumented version of the standard C++ library, see + https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo) + there's a warning about use of uninitialized memory here. It + might be a false positive, but the fix is trivial so include it. + +- test: for AF_UNSPEC, return CNAME only for AAAA, but valid A record + + Also shuffle expected responses rsp6/rsp4 into the order they will occur. + +- [Chris Araman brought this change] + + msvc_ver.inc: support Visual Studio 2015 Update 1 + +- build: commonize MSVC version detection + + Remove the need to copy/paste version number mapping between + Makefile.msvc and test/Makefile.msvc. + +- test: Use different name in live test + +- test: Only pass unused args to GoogleTest + +- ahost.c: add cast to fix C++ compile + + If ahost.c is force-compiled as C++ the missing cast from + (void *) to (char **) is problematic. + +- ares_library_cleanup: reset ares_realloc too + + Otherwise a subsequent use of the library might use a previous + incarnation's realloc() implementation. + +Daniel Stenberg (9 Mar 2016) +- [Brad House brought this change] + + configure: check if tests can get built before enabled + + The current approach for disabling tests is not a good solution because + it forces you to pass --disable-tests, rather than auto-detect if your + system can support the tests in the first place. Many (most?) systems + do not have C++11. This also causes issues when chain-building c-ares, + the hosting system needs to be updated to support passing this + additional flag if necessary, it doesn't seem reasonable to add this + requirement which breaks compatibility. + + This change auto-detects if the system can build the tests and + automatically disable them if it cannot. If you pass --enable-tests to + configure and the system cannot build them either due to lack of system + support, or because cross-compilation is being used, it will throw an + appropriate error since the user indicated they really did want the + tests. + +David Drysdale (3 Mar 2016) +- [Viktor Szakats brought this change] + + Makefile.m32: add support for CROSSPREFIX + +- [Viktor Szakats brought this change] + + Makefile.m32: add support for extra flags + + Allow specification of CARES_{LD,C}FLAG_EXTRAS envvars + for mingw + +- test: Build with MinGW on AppVeyor + +- test: avoid in6addr_* constants + + These aren't available on MinGW, so use explicit addresses instead. + +- test: add missing #includes for dns-proto.cc + +- [Gregor Jasny brought this change] + + Fix man page typos detected by Lintian + +Daniel Stenberg (19 Feb 2016) +- configure: acknowledge --disable-tests + + Fixes #44 + +- AUTHORS: added contributors from the 1.11.0 release + +- bump: start working on the next version + +Version 1.11.0 (19 Feb 2016) + +Daniel Stenberg (19 Feb 2016) +- RELEASE-NOTES: final edits for 1.11.0 + +David Drysdale (15 Feb 2016) +- ares_dup.3: remove mention of nonexistent function + + ares_dup_options() doesn't exist, so don't document it. + +- test: skip repeated build steps + + Top-level buildconf/configure now triggers for the + test/ subdir too, so don't need to do explicitly. + +- test: namespaces unavailable when cross-compiling + +Daniel Stenberg (13 Feb 2016) +- configure: only run configure in test when NOT cross-compiling + + ... as the tests won't run cross-compiled anyway + +David Drysdale (13 Feb 2016) +- test: prefer ON_CALL to EXPECT_CALL to reduce flakes + + For UDP tests, there's a chance of a retry. EXPECT_CALL only + expects a single request to arrive at the server; ON_CALL allows + for a UDP retry and repeats the same answer. + + Note that ON_CALL and EXPECT_CALL can't be mixed in the same + test, and that tests that have a varied sequence of responses + for the same repeated request still have to use EXPECT_CALL. + +Daniel Stenberg (13 Feb 2016) +- configure: run configure in 'test' too + + Having the test dir completely stand-alone causes too many issues for + users and devs. It still needs to be built specifically. + +- configure: build silently by default + +- buildconf: run test/buildconf too if present + +- test/configure: build silently by default + +- [Gregor Jasny brought this change] + + dist: Distribute README.md + + Closes #42 + +Version 1.11.0 (11 Feb 2016) + +Daniel Stenberg (11 Feb 2016) +- Makefile.am: distribute the test dir too + +- RELEASE-NOTES: synced with 385582bd14b68a + +- [Nicolas \"Pixel\" Noble brought this change] + + ares_win32_init: make LoadLibrary work when using UNICODE too + + Closes #17 + +David Drysdale (11 Feb 2016) +- Use "resolve" as synonym of "dns" in nsswitch.conf + + Modern Linux systems may have libnss_resolve from systemd as the + resolver, which is then configured in /etc/nsswitch.conf with + the "resolve" keyword rather than "dns". + + Fixes #33 + +- ares_set_socket_callback: make manpage match code + + The code in ares_process.c that invokes the socket creation/connection + callback only checks for rc < 0, not for standard ares error codes. + +- Merge pull request #36 from AGWA-forks/master + + Add ares_set_socket_configure_callback() + +- test: Update init tests to match behaviour + + Unreadable config files are now treated the same way + as absent config files. + +- [Fedor Indutny brought this change] + + Ignore `fopen` errors to use default values + + After 46bb820be3a83520e70e6c5f0c5133253fcd69cd `init_by_resolv_conf` + errors are no longer swallowed in `ares_init_options`. This has exposed + a previously unknown bug in `lookups` initialization code. + + If there is no lookup configuration in `resolv.conf`, + `init_by_resolv_conf` will attempt to read it from other files available + on the system. However, some of these files may have restricted + permissions (like `600`), which will lead to `EACCESS` errno, which in + turn is handled like a fatal error by `init_by_resolv_conf`. + + However, it sounds illogical that this error should be handled as a + fatal. There is a `init_by_defaults` call that overrides `lookups` with + default value, and certainly possible absence of lookup information is + the reason why this function exists in a first place! + + I suggest handling any `fopen` errors as non-fatal ones, allowing to + pick up the `lookups` value from different config files, or to pick up + default value. + +Andrew Ayer (9 Feb 2016) +- Document callback type in man page for ares_set_socket_callback + +- Add ares_set_socket_configure_callback() + + This function sets a callback that is invoked after the socket is + created, but before the connection is established. This is an ideal + time to customize various socket options. + +David Drysdale (9 Feb 2016) +- test: ares_set_socket_callback failure behaviour + +- test: Check ares_parse_txt_reply_ext() entrypoint + +- [Fedor Indutny brought this change] + + txt: introduce `ares_parse_txt_reply_ext` + + Introduce `ares_txt_ext` structure with an extra `record_start` + field, which indicates a start of a new TXT record, thus allowing to + differentiate the chunks in the same record, from a chunks in a + different record. + + Introduce a new API method: `ares_parse_txt_reply_ext` that works with + this kind of struct. + +- doc: Update missed repo references + +- doc: Update docs on contributing + +- test: Run command line tools in Travis + + Do a quick execution of each of the command line tools + in the continuous integration build, so that any (say) + sanitizer failures show up. + +- acountry: drop inert test + + If ver_1 is true, then z0 and z1 must both be 'z', and so + (z0 != 'z' && z1 != 'z') can never be true. + + CID 56879, pointed out by Coverity. + +- doc: update badge locations to master repo + +- test: Enable maintainer mode + debug in Travis + +- test: Add an iOS build target + +- test: Ignore SIGPIPE in tests + +- test: More initialization tests + +- test: Improve containerized test mechanism + + Aim is to ensure that code coverage information can escape the + container. To do this: + - Enter a new mount namespace too, so that we can... + - Bind mount the expected source directory into the container + - Share memory with the sub-process so coverage information is + shared too. + +- test: Make contained tests easier to write + +- test: Add framework for containerized testing + + On Linux we can potentially use user and UTS namespaces to run a test + in a pseudo-container with: + - arbitrary filesystem (e.g. /etc/resolv.conf, /etc/nsswitch.conf, /etc/hosts) + - arbitrary hostname/domainname. + + Include a first pass at the framework code to allow this, along with a + first test case that uses the container. + +- test: Use a longer timeout for less flakiness + + Having occasional test failures from timeout before multiple + queries can complete, so up the default timeout for the test + from 100ms to 1500ms. + +- test: Make failure tests more robust + + Different platforms will do different numbers of allocations + in the processing of a given API call; just check that the + return code is either success or ENOMEM, and free off any + returned state in the former case. + + Also cope with ECONNREFUSED as well as ENOTFOUND. + +- test: Get test code building under Windows + + - Initial nmake file based off library nmake file + - Cast socket call arguments to (char *) + - Use wrapper sclose() that maps to closesocket() or close() + - Build a config.h indicating presence of headers + - Conditionally include netdb.h + - Remove unnecessary include of sys/socket.h + - Force longer bitmask for allocation failure tracking + - Call WSAStartup() / WSACleanup() in main() + - Set TCP_NODELAY for mock server + - Turn on tests in AppVeyor build + +- test: Disable tests that manipulate env on Windows + +- test: Move file lists into Makefile.inc + + In preparation for a Win32 build of the test suite. + +- test: Add a simple multi-server test + + Check rotate option does something + +- test: Allow for multiple mock servers + + - Update the MockServer to allow separate specification of + UDP and TCP ports + - Have an array of mock servers listening on consecutive + sets of ports. + - Rename Process(fd) to ProcessFD(fd) to avoid confusion. + - Initialize channel by using the new ares_set_servers_ports() + entrypoint, so multiple ports on the same loopback address + can be used. + +- test: Update test for set/get_servers variants + + Ports are significant in the _ports_ variant functions, so update test to cope. + +- test: Make GetNameServers() utility function port-aware + + Also make it generally available. + +- test: more testing, including of internal static functions + +- test: more tests, especially fallback processing + + - Make mock server listen on UDP + TCP in parallel. + - Test UDP->TCP fallback on truncation + - Test EDNS->no-EDNS fallback + - Test some environment init options + - Test nonsense reply + + test: short response + +- test: more tests, particularly of initialization + +- test: Run mock tests over both TCP and UDP + + With the exception of a few tests that make use of the timed + retry aspect of UDP. + +- test: Run mock tests over both IPv4 and IPv6 + +- test: Add more tests for edge cases + +- test: more nooks and crannies of pton functions + +- test: More tests for PTR parsing + +- test: Use of HOSTALIAS environment variable + +- test: Add RAII utility classes for testing + + - TempFile holds specific contents + - EnvValue sets an environment variable + +- test: More search domain scenarios + +- test: Remove duplicate flags from Makefile.am + +- test: Make test code leak-free + +- test: More tests + + - test use of sortlist + - test gethostbyname(AF_UNSPEC) + +- test: Test ares_gethostbyname_file() + +- test: Add more tests of ares_getnameinfo() + +- test: Tweak tests, add alloc failure test + +- test: Test init with options + +- test: More tests + + - ares_inet_net_pton() variants + - ares_getsock() variants + +- test: Expose ProcessWork() function + +- test: More parsing tests + + Including: + - Split each parse function test set out into separate files. + - Add an allocation failure test for each parsing function. + - Add error check test for each parsing function. + +- test: Add various additional tests + +- test: More tests + + Include tests of internal functions, based on the value of the + CARES_SYMBOL_HIDING macro; need to configure the library with + --disable-symbol-hiding to enable these tests. + +- test: Allow command line override of mock server port + +- test: Add README.md documentation + +- test: Temporarily avoid latest Python requests package + + Currently get error from Travis on this install step, and downgrading one + version appears to fix the problem. + + "Could not find any downloads that satisfy the requirement pyOpenSSL>=0.13 + (from requests[security])" + +- test: Add AppVeyor config file for Windows build + +- test: Add configuration for a Travis build + + Cover Linux & OSX on the container infrastructure, but install + a later G++ to satisfy the tests' need for C++11. + + Use a build matrix to include a variety of build variants: + - ASAN + - UBSAN + - LSAN + - Coverage via coveralls.io + + test: invoke ASAN and coverage in Travis build + + Also shift to use explicit build matrix + + test: Use coveralls.io for coverage tracking + + test: Add a build with UBSAN + + Also expand and re-order the setting of environment variables + for easier modification. + + test: Add LSAN build to Travis config + +- test: Add initial unit tests for c-ares library + + The tests are written in C++11, using the GoogleTest and GoogleMock + frameworks. They have their own independent autoconf setup, so that + users of the library need not have a C++ compiler just to get c-ares + working (however, the test/configure.ac file does assume the use of + a shared top-level m4/ directory). However, this autoconf setup has + only been tested on Linux and OSX so far. + + Run with "./arestest", or "./arestest -v" to see extra debug info. + The GoogleTest options for running specific tests are also + available (e.g. "./arestest --gtest_filter=*Live*"). + + The tests are nowhere near complete yet (currently hitting around + 60% coverage as reported by gcov), but they do include examples + of a few different styles of testing: + + - There are live tests (ares-test-live.cc), which assume that the + current machine has a valid DNS setup and connection to the + internet; these tests issue queries for real domains but don't + particularly check what gets returned. The tests will fail on + an offline machine. + + - There a few mock tests (ares-test-mock.cc) that set up a fake DNS + server and inject its port into the c-ares library configuration. + These tests allow specific response messages to be crafted and + injected, and so are likely to be used for many more tests in + future. + + - To make this generation/injection easier, the dns-proto.h file + includes C++ helper classes for building DNS packets. + + - Other library entrypoints that don't require network activity + (e.g. ares_parse_*_reply) are tested directly. + + - There are few tests of library-internal functions that are not + normally visible to API users (in ares-test-internal.cc). + + - A couple of the tests use a helper method of the test fixture to + inject memory allocation failures, using the earlier change to the + library to allow override of malloc/realloc/free. + + - There is also an entrypoint to allow Clang's libfuzzer to drive + the packet parsing code in ares_parse_*_reply, together with a + standalone wrapper for it (./aresfuzz) to allow use of afl-fuzz + for further fuzz testing. + +- test: Add local copy of GoogleMock/GoogleTest 1.7.0 + + Don't check in gtest/m4 files, as they are unused and interfere + with the top-level configure process. + +- doc: Show build badges in README.md + + Note that these URLs will need to be updated if/when the test branch + gets pulled into the master repo/branch. + +- doc: Convert README to README.md + + Gives better display on GitHub + +- doc: Update in preparation for next release + + Assume 1.11.0 is next (as there are various API additions). + Also add myself to AUTHORS. + +- build: Allow header compilation by Windows C++ compiler + +- build: Expose whether symbol hiding is on + + Adding the CARES_SYMBOL_HIDING definition allows the test suite to + detect whether internal symbols are available or not. + +- build: Add autoconf macros for C++11 code using pthreads + + Pull in testing macros from the GNU autoconf archive to allow + configure scripts to test for and setup use of a C++11 compiler + (AX_CXX_COMPILE_STDCXX_11) and the pthreads library (AX_PTHREAD). + + Note that these macros are not used by the main library autoconf, + just by the tests (which share the same m4/ directory). + +- build: Add a code coverage option + + Configure with: + ./configure --enable-code-coverage + Show coverage output with: + make code-coverage-capture + + Built on m4/ax_code_coverage.m4 from the GNU autoconf archive + to provide the macros to check for presence of gcov + lcov; + upstream macro modified to: + - Remove use of $(AM_DEFAULT_VERBOSITY) , as earlier versions of + autoconf (such as the one used by default on Travis) do not have this. + - Rather than automatically defining CODE_COVERAGE_RULES to be a set + of makefile rules that use ifeq/endif (which is GNU make-specific), + instead only define CODE_COVERAGE_RULES if coverages is turned on, + and in that case don't use conditionals in the makefile. + +- api: Add entrypoints to allow use of per-server ports + + Add user-visible entrypoints ares_{get,set}_servers_ports(3), which + take struct ares_addr_port_node rather than struct ares_addr_node. + This structure includes a UDP and TCP port number; if this is set + to zero, the channel-wide port values are used as before. + + Similarly, add a new ares_set_servers_ports_csv(3) entrypoint, which + is analogous to ares_set_servers(3) except it doesn't ignore any + specified port information; instead, any per-server specified port + is used as both the UDP and TCP port for that server. + + The internal struct ares_addr is extended to hold the UDP/TCP ports, + stored in network order, with the convention that a value of zero + indicates that the channel-wide UDP/TCP port should be used. + + For the internal implementation of ares_dup(3), shift to use the + _ports() version of the get/set functions, so port information is + transferred correctly to the new channel. + + Update manpages, and add missing ares_set_servers_csv to the lists + while we're at it + +- api: Add ares_set_sortlist(3) entrypoint + + Allow explicit configuration of the channel's sortlist, by + specifying a string in the same format as the equivalent + /etc/resolv.conf option. + + This allows library users to perform the same configuration + that is available via /etc/resolv.conf, but without needing + to change that file. + +- api: Allow injection of user-specified malloc/free functions + + Add a new ares_library_init_mem() initialization function for the + library which allows the library user to specify their own malloc, + realloc & free equivalents for use library-wide. + + Store these function pointers in library-wide global variables, + defaulting to libc's malloc(), realloc() and free(). + + Change all calls to malloc, realloc and free to use the function pointer + instead. Also ensure that ares_strdup() is always available + (even if the local environment includes strdup(3)), and change the + library code to always use it. + + Convert calls to calloc() to use ares_malloc() + memset + +- api: Add option to expose some internal functions + + Purely for testing, add --enable-expose-statics option to configure + which converts some static internal functions to be externally visible. + +- api: Expose the ares_library_initialized() function + +- ahost: Allow repeated -s options + + This also removes a potential leak where later -s options would + replace earlier ones without freeing the relevant string. + +- Mark unhittable lines + + Add comments for the benefit of the lcov tool, marking + lines that cannot be hit. Typically these are fall-back + protection arms that are already covered by earlier checks, + and so it's not worth taking out the unhittable code (in case + someone changes the code between the two places in future). + +- ares_set_servers_csv.3: make return type match code + +- bitncmp: update comment to match code behaviour + +- ares_striendstr: fix so non-NULL return can happen + + This looks to have been broken since it was first introduced in 2005 in + commit aba0b775ea30 ("Added ares_getnameinfo which mimics the + getnameinfo API") + +- config_sortlist: free any existing sortlist on (re)alloc failure + + If we get an allocation failure on 2nd or later entry in the sortlist, the + code would return ENOMEM but still leave the initial entries allocated. + Ensure that *sortlist is set to NULL whenever ENOMEM is returned. + +- ares_dup: clear new channel on failure + + If the attempt to transfer IPv6 servers from the old to the new channel + fails, the previous code would still return a channel to the user even though + an error return code was generated. This makes it likely that users would + leak the channel, so explicitly clear the channel in this case. + +- ares_init_options: don't lose init failure + + If (say) init_by_options() fails, the subsequent call to + init_by_defaults() was overwriting the return code with + success. Still call init_by_defaults() regardless, but track + its return value separately + +- ares_gethostbyname: don't leak valid-but-empty hostent + + If an AF_UNSPEC query gets a valid response to its AAAA query, + but which has no IPv6 addresses in it, then the code chains on to + a A record query. However, the hostent from the AAAA response + was being leaked along the way (because it gets replaced before + the follow-on end_hquery() invocation). + +- ares_parse_txt_reply: propagate errors from per-substring loop + + If we get an allocation failure when processing a particular substring in a + TXT record, that failure is silently lost; fix that by propagating errors from + the inner loop to the outer loop. + +- process_answer: fix things up correctly when removing EDNS option + + When a server rejects an EDNS-equipped request, we retry without + the EDNS option. However, in TCP mode, the 2-byte length prefix was + being calculated wrong -- it was built from the answer length rather than + the length of the original request. + + Also, it is theoretically possible that the call to realloc() might change + the data pointed to; to allow for this, qbuf also needs updating. + + (Both these fixes were actually included in a patchset sent on the mailing + list in Oct 2012, but were included with other functional changes that + didn't get merged: + http://c-ares.haxx.se/mail/c-ares-archive-2012-10/0004.shtml) + +- ares__read_line: clear buf pointer on realloc failure + +- ares_expand_name: check for valid bits in label length + + The top two bits of the label length indicate whether this is a + label length (00) or an index to a name elsewhere in the message + (11). RFC1035 4.1.4 says that the other possible values for the + top two bits (01, 10) are reserved for future use. + +Daniel Stenberg (23 Jan 2016) +- [Gregor Jasny brought this change] + + Fix typos detected by lintian + + Closes #32 + +- [Gregor Jasny brought this change] + + Distribute all man pages + +- README.cares: s/I/Daniel + + ... and add a pointer to an existing version of the original area 1.1.1 + package.a + +- read_tcp_data: don't try to use NULL pointer after malloc failure + + CID 56884, pointed out by Coverity. We really should make this function + return an error code so that a malloc() failure can return back a major + failure. + +- configure_socket: explicitly ignore return code + + CID 56889 in Coverity pointed out the return code from setsocknonblock() + is ignored, and this added typecast to (void) makes it explicit. + +- ahost: check the select() return code + + Fixes CID 137189, pointed out by Coverity + +David Drysdale (18 Jan 2016) +- Fix buildconf on platforms using glibtoolize + + Commit c49a87eea538 changed buildconf to only check for + libtoolize, but missed a line + +- Don't exit loop early leaving uninitialized entries + + Update for commit affc63cba875d. + + The original patch from Gregor Jasny did not have the break + statement; I incorrectly added it to prevent continuing the loop. + However, the later entries in the array would then be left + uninitialized, causing problems for later cleanup. + + So fix to match Gregor's original patch, with apologies. + +Daniel Stenberg (18 Jan 2016) +- buildconf: remove check for libtool, it only requires libtoolize + +David Drysdale (17 Jan 2016) +- [Gregor Jasny brought this change] + + Use libresolv to initialize cares on iPhone targets + + On iPhone targets like iOS, watchOS or tvOS the file + /etc/resolv.conf cannot be used to configure cares. + + Instead the resolver library is queried for configuration + values. + + CC: Yury Kirpichev + +Daniel Stenberg (17 Jan 2016) +- README: updated to new repo URL + +David Drysdale (14 Jan 2016) +- [Lei Shi brought this change] + + Fixing slow DNS lookup issue + + This patch is fixing the dns lookup issue due to dummy dns information + of a disconnected adapter(in my case is a bluetooth adapter). I changed + the dns lookup policy to try GetNetworkParams first because the + GetNetworkParams provides the most reliable dns information (lots of + checks were done by system). I also filter out inoperable adapter in + DNS_AdaptersAddresses in case GetNetworkParams fail. + +- Merge pull request #30 from p-push/vs-2015 + + Support Visual Studio 2015 + +Oleg Pudeyev (3 Jan 2016) +- [Gisle Vanem brought this change] + + Support Visual Studio 2015 + +David Drysdale (11 Nov 2015) +- [Andrew Andkjar brought this change] + + added another version case to Makefile.msvc + + nmake version 11.00.61030.0 resolves to CC_VERS_NUM = 110 + +- Merge pull request #26 from bitbouncer/vs-2013 + + added define for visual studio 2013 + +svante karlsson (25 Jun 2015) +- added define for visual studio 2013 + +Jakub Hrozek (6 Nov 2014) +- ares__read_line: free buf on realloc failure + +- Destroy options if ares_save_options fails + + It's possible that, if ares_save_options failed, the opts structure + would contain some allocated memory. Calling ares_destroy_options in + this case is safe, because ares_save_options zeroes out the memory + initially. + +- [David Drysdale brought this change] + + Continue loop if space for hostname not large enough + + When attempting to build a search domain from the local hostname + (used as a fallback when no other methods have given a search + domain), the code doubles the buffer size on each loop iteration. + + However, the loop previously had a WHILE_FALSE terminator so the continue + statement exited the loop rather than going round again. + +Daniel Stenberg (30 Oct 2014) +- ares_getnameinfo.3: there is no ares_getaddrinfo + +David Drysdale (30 Sep 2014) +- [Gregor Jasny brought this change] + + Prevent tmpbuf from overrunning + + Fix Coverity error CID 56886. + + Signed-off-by: Gregor Jasny + +- [Gregor Jasny brought this change] + + Re-start loop if select fails + + Fix Coverity error CID 56882 + + Signed-off-by: Gregor Jasny + +- [Gregor Jasny brought this change] + + Free temporary variable in error path + + Fix Coverity CID 56890 + + Signed-off-by: Gregor Jasny + +- [Gregor Jasny brought this change] + + Fix integer shift overflow if both tcp_socket and udp_socket are set + + The problem occurs if at the start of the loop the sockindex is at the + last valid ARES_GETSOCK_MAXNUM position. If then both udp_socket and + tcp_socket are valid, sockindex gets incremented for UDP first and + points one entry behind the array for the tcp block. + So the fix is to check after every increment of sockindex if it is still + valid. + + Fix Coverity error CID 56878 + + Signed-off-by: Gregor Jasny + +- [Gregor Jasny brought this change] + + Null check before dereference + + Fix Coverity error CID 56880 + + Signed-off-by: Gregor Jasny + +Jakub Hrozek (28 Jul 2014) +- [Gisle Vanem brought this change] + + Comment in ares_ipv6.h + +David Drysdale (25 Jul 2014) +- CONTRIBUTING: add file to indicate mailing list is preferred + +- Add -t u option to ahost + + Add an option to allow specification of the AF_UNSPEC + address family. + +Jakub Hrozek (24 Jul 2014) +- host_callback: Fall back to AF_INET on searching with AF_UNSPEC + + Previously, when an ares_gethostbyname() searched with AF_UNSPEC and the + first AF_INET6 call only returned CNAMEs, the host_callback never + retried AF_INET. + + This patch makes sure than on ARES_SUCCESS, the result of AF_INET6 is + taken as authoritative only if the result contains some addresses. + +- [David Drysdale brought this change] + + Move memset call below platform-specific declarations + + A GitHub commenter [1] says that my recent change to ahost.c has + problems compiling on Windows + C89 platforms. + + [1] https://github.com/bagder/c-ares/commit/ee22246507c9#commitcomment-6587616 + +- [David Drysdale brought this change] + + Update ahost man page to describe -s option. + + Commit ee22246507c9 added the -s option to the + ahost command, but neglected to update the man page to + describe it. + + Also fix typo in description of -t option. + +- ares_parse_soa_reply: Do not leak rr_name on allocation failure + + If ares_malloc_data failed, already allocated rr_name would go out of + scope. + +- [David Drysdale brought this change] + + Don't override explicitly specified search domains + + Only set search domains from /etc/resolv.conf if there isn't a value + already present in the channel. + +- [David Drysdale brought this change] + + Allow specification of search domain in ahost + + Add the "-s domain" command line option to override the search + domains. + +Daniel Stenberg (12 May 2014) +- Revert "ares_parse_aaaa_reply: fix leak when reply contains 1 alias and no address" + + This reverts commit 440110b303fdbfadb3ad53d30eeb98cc45d70451. + +- [Frederic Germain brought this change] + + ares_parse_aaaa_reply: fix leak when reply contains 1 alias and no address + +- [Doug Kwan brought this change] + + ares_build.h: fix building on 64-bit powerpc + + There are two issues. + + 1. gcc actually does not use __ppc__ and __ppc64__ but __PPC__ and + __PPC64__. The tests of __ILP32__ and __LP64__ are sufficient for gcc. + + 2. clang defines __GNU__ and defines both __ppc64__ and __ppc__ when + targeting ppc64. This makes CARES_SIZEOF_LONG to be 4 on a ppc64 system + when building with clang. + + My patch is two change the order of the checks so that we check the + 64-bit case first. + +- refresh: updated now with automake 1.14 + +- [David Drysdale brought this change] + + single_domain: Invalid memory access for empty string input + + We noticed a small buglet in ares_search() when it gets an empty string + as input -- the single_domain() utility function in ares_search.c + accesses invalid memory (before the start of the string). + +Guenter Knauf (31 Aug 2013) +- Fixed warning 'type specifier missing'. + +Daniel Stenberg (30 Aug 2013) +- [Tor Arntsen brought this change] + + ares_rules.h: CARES_SIZEOF_LONG doesn't exist anymore, don't test for it + + It was removed in f19387dd72432 + +- nowarn: use instead of configure for size of long + + This makes the header file much more multi-arch friendly and can be used + as-is with both 32 bit and 64 bit builds. + +- timeoffset: made static and private + + ares__timeoffset() was only used once within this single source file + +- timeadd: make static + + ares__timeadd() was only ever used from within the same source + +Yang Tse (18 Jul 2013) +- xc-am-iface.m4: comments refinement + +- configure: fix 'subdir-objects' distclean related issue + + See XC_AMEND_DISTCLEAN comments for details. + +- configure: automake 1.14 compatibility tweak (use XC_AUTOMAKE) + +- xc-am-iface.m4: provide XC_AUTOMAKE macro + +Daniel Stenberg (12 May 2013) +- gitignore: ignore all ares_*pdf but also CHANGES.dist + +- bump: start working towards 1.10.1 + +Version 1.10.0 (12 May 2013) + +Daniel Stenberg (12 May 2013) +- RELEASE-NOTES: two more bug fixes + +- [Keith Shaw brought this change] + + ares_set_servers_csv: fixed IPv6 address parsing + + Fixed bug that caused the last part of an IPv6 address to be parsed as + the port number when the last part is all numeric. + +- nroff: fix two syntax mistakes + + ares_parse_a_reply and ares_parse_aaaa_reply both had two \fB instead of + \fP + + Reported-by: Alexander Klauer + Bug: http://c-ares.haxx.se/mail/c-ares-archive-2013-03/0010.shtml + +- [Alex Loukissas brought this change] + + build: fix build on msvc11 + +- Makefile.am: increment -version-info for 1.10.0 release + +- README: remove unnecessary comment + +- ares_version.h: copyright end range year is now 2013 + +- RELEASE-NOTES: synced with fb0737f3a0a1c37 + +- [Paul Saab brought this change] + + ares_parse_aaaa_reply: Plug memory leak + + This change is similar to ares_parse_a_reply.c in commit + bffd67f16a8f42fe6dbf79ab2e39d92eea05c8a6 + +- [Patrick Valsecchi brought this change] + + ares_parse_txt_reply: return a ares_txt_reply node for each sub-string + + Previously, the function would wrongly return all substrings merged into + one. + +- [Alexander Klauer brought this change] + + library init: documentation update + + This commit updates the documentation of ares_library_init() and + ares_library_cleanup() with regard to the newly introduced reference + counting of initializations and deinitializations. + +- [Alexander Klauer brought this change] + + library init: be recursive + + Previously, a single call to ares_library_cleanup() would deinitialise + the c-ares library, regardless of how many times ares_library_init() was + called. This behaviour may cause problems in programs linking two or + more libraries which, in turn, use c-ares. The present commit fixes this + problem, deinitializing the library only after a number of calls to + ares_library_cleanup() matching the number of calls to + ares_library_init(). + +- [Patrick Valsecchi brought this change] + + protocol parsing: check input data stricter + + ... so that bad length fields aren't blindly accepted + + Bug: http://c-ares.haxx.se/mail/c-ares-archive-2013-04/0016.shtml + +Guenter Knauf (11 Apr 2013) +- Create ares_build.h when buidling from Git. + +- Added -DCARES_STATICLIB to CFLAGS. + + Currently this static makefile does only support building the + static library libcares.a. + +Daniel Stenberg (8 Apr 2013) +- [Alexander Klauer brought this change] + + .gitignore: ignore patch files + + This commit adds a line to .gitignore to the effect that patch files + generated by 'git format-patch' are excluded from the repository. + +- [Alexander Klauer brought this change] + + ares_destroy() documentation: no new requests + + Clarify that no new requests may be added to a resolver channel that is + currently being destroyed. + +- [Alexander Klauer brought this change] + + Documentation: properly document ARES_ECANCELLED + + This commit clarifies the behaviour of ares_cancel() with respect to + callbacks and adds missing documentation of ARES_ECANCELLED to the man + pages of the affected functions. + +- [Alexander Klauer brought this change] + + ares_cancel(): cancel requests safely + + An invocation of ares_cancel() walks through the request list, calling + the callbacks of all pending requests on a channel. Previously, if such + a callback added a new request to the channel, the request list might + not end up empty, causing an abort by assertion failure. The present + commit ensures that precisely all requests present upon entry of + ares_cancel() are cancelled, and that adding new requests through + callbacks is safe. + +Yang Tse (10 Mar 2013) +- ares.h: stricter CARES_EXTERN linkage decorations logic + + No API change involved. + +- ares_build.h.dist: enhance non-configure GCC ABI detection logic + + GCC specific adjustments: + + - check __ILP32__ before 32 and 64bit processor architectures in + order to detect ILP32 programming model on 64 bit processors + which, of course, also support LP64 programming model, when using + gcc 4.7 or newer. + + - keep 32bit processor architecture checks in order to support gcc + versions older than 4.7 which don't define __ILP32__ + + - check __LP64__ for gcc 3.3 and newer, while keeping 64bit processor + architecture checks for older versions which don't define __LP64__ + +Daniel Stenberg (9 Mar 2013) +- ares.h: there is no ares_free_soa function + +Yang Tse (9 Mar 2013) +- Makefile.am: empty AM_LDFLAGS definition for automake 1.7 compatibility + +- ares_inet_ntop.3: s/socklen_t/ares_socklen_t + +- configure: use XC_LIBTOOL for portability across libtool versions + +- xc-lt-iface.m4: provide XC_LIBTOOL macro + +- Makefile.am: use AM_CPPFLAGS instead of INCLUDES + +- inet_ntop.c: s/socklen_t/ares_socklen_t + +- inet_ntop.c: s/socklen_t/ares_socklen_t for portability + +Daniel Stenberg (19 Feb 2013) +- ares.h: s/socklen_t/ares_socklen_t for portability + +- ares_inet_ntop.3: 4th argument is socklen_t! + +- spell inet correctly! + +- ares_inet_pton/ntop: cleanup + + Make sure that the symbols are always exported and present in c-ares. + + Make the headers prefixed with 'ares'. + + Removed the inet_ntop.h version as it no longer features any content. + +- ares_inet_ntop/ares_inet_pton: added man pages + +Yang Tse (15 Feb 2013) +- [Gisle Vanem brought this change] + + curl_setup_once.h: definition of HAVE_CLOSE_S defines sclose() to close_s() + +- [Gisle Vanem brought this change] + + config-dos.h: define HAVE_CLOSE_S for MSDOS/Watt-32 + +- [Gisle Vanem brought this change] + + config-dos.h: define strerror() to strerror_s_() for High-C + +Daniel Stenberg (13 Feb 2013) +- ares_get_datatype: removed unused function + + it was also wrongly named as internal functions require two underscores + +- ares__bitncmp: use two underscores for private functions + + It used a single one previously making it look like a public one + +- ares__generate_new_id: moved to ares_query.c + + ... and ares__rc4 is turned into a local static function. + +- ares__swap_lists: make private and static + + ... since there's only one user, make it static within ares_process.c + +Yang Tse (13 Feb 2013) +- Makefile.msvc: add four VS version strings + +Daniel Stenberg (13 Feb 2013) +- ares_expand_name.3: clarify how to free the data + +Yang Tse (30 Jan 2013) +- zz40-xc-ovr.m4: fix 'wc' detection - follow-up 2 + + - Fix a pair of single quotes to double quotes. + + URL: http://curl.haxx.se/mail/lib-2013-01/0355.html + Reported by: Tor Arntsen + +- zz40-xc-ovr.m4: fix 'wc' detection - follow-up + + - Take into account that 'wc' may return leading spaces and/or tabs. + + - Set initial IFS to space, tab and newline. + +- zz40-xc-ovr.m4: fix 'wc' detection + + - Take into account that 'wc' may return leading spaces. + + - Set internationalization behavior variables. + + Tor Arntsen analyzed and reported the issue. + + URL: http://curl.haxx.se/mail/lib-2013-01/0351.html + +- zz40-xc-ovr.m4: check another three basic utilities + +- zz40-xc-ovr.m4: 1.0 interface stabilization + + - Stabilization results in 4 public interface m4 macros: + XC_CONFIGURE_PREAMBLE + XC_CONFIGURE_PREAMBLE_VER_MAJOR + XC_CONFIGURE_PREAMBLE_VER_MINOR + XC_CHECK_PATH_SEPARATOR + - Avoid one level of internal indirection + - Update comments + - Drop XC_OVR_ZZ40 macro + +- zz40-xc-ovr.m4: emit witness message in configure BODY + + This avoids witness message in output when running configure --help, + while sending the message to config.log for other configure runs. + +- zz40-xc-ovr.m4: truly do version conditional overriding + + - version conditional overriding + - catch unexpanded XC macros + - fix double words in comments + +- zz40-xc-ovr.m4: fix variable assignment of subshell output bashism + + Tor Arntsen analyzed and reported the issue. + + URL: http://curl.haxx.se/mail/lib-2013-01/0306.html + +- zz40-xc-ovr.m4: reinstate strict AC_REQUIRE macro dependencies + +- zz40-xc-ovr.m4: avoid double single-quote usage + +- zz40-xc-ovr.m4: parentheses balancing of 'case' statements + + m4 quadrigraph shell comment technique allows proper autoconf + parentheses balancing in shell 'case' statements. The presence + of unbalanced parentheses may otherwise trigger expansion bugs. + +- zz40-xc-ovr.m4: internals overhauling + + - Update comments + - Execute commands in subshells + - Faster path separator check + - Fix missing 'test' command + - Rename private macros + - Minimize AC_REQUIRE usage + +- zz40-xc-ovr.m4: redirect errors and warnings to stderr + +- configure: use XC_CONFIGURE_PREAMBLE early checks + + Some basic checks we make were placed early enough in generated + configure script when using autoconf 2.5X versions. Newer autoconf + versions expand these checks much further into the configure script, + rendering them useless. Using XC_CONFIGURE_PREAMBLE fixes placement + of early intended checks across all our autoconf supported versions. + +- zz40-xc-ovr.m4: provide XC_CONFIGURE_PREAMBLE macro + +- configure: autotools compatibility fixes - step I + + Fix proper macro expansion order across autotools versions for + C compiler and preprocessor program checks. + +- configure: fix automake 1.13 compatibility + + Tested with: + + buildconf: autoconf version 2.69 + buildconf: autom4te version 2.69 + buildconf: autoheader version 2.69 + buildconf: automake version 1.13.1 + buildconf: aclocal version 1.13.1 + buildconf: libtool version 2.4 + buildconf: GNU m4 version 1.4.16 + +- ares_private.h: use again memdebug.h instead of curl_memdebug.h + +- configure.ac: replace AM_CONFIG_HEADER with AC_CONFIG_HEADERS + + automake 1.13 errors if AM_CONFIG_HEADER is used in configure script. + +- cares-override.m4: provide AC_CONFIG_MACRO_DIR definition conditionally + + Provide a 'traceable' AC_CONFIG_MACRO_DIR definition only when using + an autoconf version that does not provide it, instead of what we were + doing up to now of providing and overriding AC_CONFIG_MACRO_DIR for + all autoconf versions. + +- ares_private.h: use curl_memdebug.h instead of memdebug.h + +- vc6cares.dsp: add ares_create_query.c and ares_parse_soa_reply.c + +- cares-functions.m4: improve gethostname arg 2 data type check + +- setup_once.h: HP-UX specific 'bool', 'false' and 'true' definitions. + + Also reverts commit bceb40095a + +- configure: check if compiler halts on function prototype mismatch + +- cares-functions.m4: add gethostname arg 2 data type check and definition + +- cares-functions.m4: update thread-safeness detection of getaddrinfo() + + Take in account that POSIX standard Issue 7 drops h_errno support. Now, we also + consider getaddrinfo() to be thread-safe when (_POSIX_C_SOURCE >= 200809L) or + (_XOPEN_SOURCE >= 700) independently of whether h_errno exists or not. + + Take in account that h_errno might be a modifiable lvalue not defined as + a C preprocessor macro. + +- setup_once.h: HP-UX issue workaround + + Issue: When building a 32bit target with large file support HP-UX + header file may simultaneously provide two different + sets of declarations for sendfile and sendpath functions, one with + static and another with external linkage. Given that we do not use + mentioned functions we really don't care which linkage is the + appropriate one, but on the other hand, the double declaration emmits + warnings when using the HP-UX compiler and errors when using modern + gcc versions resulting in fatal compilation errors. + + Mentioned issue is now fixed as long as we don't use sendfile nor + sendpath functions. + +- setup_once.h: refactor inclusion of and + + Inclusion of these two header files now done in setup_once.h + +- Header inclusion clean-up + + Remove header inclusions already done in setup_once.h + +- setup_once.h: HP-UX specific TRUE and FALSE definitions + + Some HP-UX system headers require TRUE defined to 1 and FALSE to 0. + +- ares_timeout.c: fix compiler warning + +- ares_create_query.c: IRIX compilation fix + +- c-ares/nameser.h: add some T_* defines for ns_t_* values + +Daniel Stenberg (7 Nov 2012) +- Revert "ares_parse_aaaa_reply: fix memory leak" + + This reverts commit 50f25d8a4b2d16f4c5e0ef620238688b7a315c7a. + +- ares_parse_aaaa_reply: fix memory leak + + an allocated buffer was not freed in the successful case. + +- [Gisle Vanem brought this change] + + adig: perror() doesn't work for socket errors on windows + + ... so print the SOCKERRNO instead + +- get_DNS_AdaptersAddresses: fix IPv6 parsing + + Use of the wrong define made the function not parse IPv6 addresses + properly. + + Bug: http://c-ares.haxx.se/mail/c-ares-archive-2012-06/0028.shtml + Reported by: Saúl Ibarra Corretgé + +- version: bumped to 1.10.0 + + Due to the newly added function: ares_create_query() + +- AUTHORS: synced with 83093ac450 + + Added 21 authors since this document was last updated + +- ares_create_query.3: mention when this is added + +- [hpopescu@ixiacom.com brought this change] + + Added new feature (rfc2671) + +- code police: fix indents, < 80 columns, reflowed comments + +Guenter Knauf (11 Jul 2012) +- Cleaned up version awk script. + +Daniel Stenberg (30 Jun 2012) +- [Gisle Vanem brought this change] + + read_udp_packets: bail out loop on bad sockets + + I can see that recvfrom() in ares_process.c many times is called with + 'udp_socket' == ARES_SOCKET_BAD. The code takes care not to call + recv/recvfrom with ARES_SOCKET_BAD in the outer-loop. So should the + inner-loop. + +Yang Tse (29 Jun 2012) +- cares-compilers.m4: remove -Wstrict-aliasing=3 from clang + + Currently it is unknown if there is any version of clang that + actually supports -Wstrict-aliasing. What is known is that there + are several that don't support it. + +- cares-compilers.m4: -Wstrict-aliasing=3 for warning enabled gcc and clang builds + +Daniel Stenberg (18 Jun 2012) +- version: work towards 1.9.2 (at least) + +Version 1.9.1 (18 Jun 2012) + +Daniel Stenberg (18 Jun 2012) +- RELEASE-NOTES: 1.9.1 coming up + +Version 1.9.0 (16 Jun 2012) + +Daniel Stenberg (16 Jun 2012) +- ares_version.h: next version is 1.9.0 + +- [Marko Kreen brought this change] + + ares_data.h: ARES_DATATYPE_SOA_REPLY is added in 1.9.0 + +- RELEASE-NOTES: synced with 979bf951d + + Next release deemed to become 1.9.0 due to the new function + +- [Marko Kreen brought this change] + + SOA parser added + + I need to do SOA queries, so here is a parser for them. + + - ares_soa_reply: new struct + - ares_malloc_data/ares_free_soa: ARES_DATATYPE_SOA_REPLY + - ares_parse_soa_reply: actual function + +Yang Tse (14 Jun 2012) +- Kill compiler warning + +- Fix libcares.pc generation for static MingW* cross builds + +Daniel Stenberg (21 May 2012) +- [Nick Alcock brought this change] + + Fix UDP and TCP port byte order in saved options. + + The UDP and TCP port are stored in network byte order in the + ares_channeldata, but are passed in to ares_init_options() in host byte + order. Thus we must return them from ares_save_options() in host byte + order too, or a duplicated channel will convert them again, leading to a + nonfunctional channel and a mysterious connection refused error from + ares_gethostbyname(). This breaks ares_dup(), thus the curl easy API + when c-ares is used by curl, and thus all the curl easy API's users. + +Yang Tse (28 Apr 2012) +- version: start working on 1.8.1-DEV + +Version 1.8.0 (27 Apr 2012) + +Daniel Stenberg (27 Apr 2012) +- RELEASE-NOTES: call next 1.8 instead + + Since we added a function, let's use a stricter bumping scheme + +Yang Tse (25 Apr 2012) +- INSTALL: some adjustments + +Daniel Stenberg (25 Apr 2012) +- GIT-INFO: mention buildconf + +Yang Tse (25 Apr 2012) +- INSTALL: remove more sections that don't apply to c-ares + +- ares_timeout.c: fix compiler warning + +Daniel Stenberg (25 Apr 2012) +- [Ben Noordhuis brought this change] + + Makefile.m32: fix mingw32 build + + * add . to include path so ares_build.h is picked up + * make ar configurable to ease cross-compiling + +- RELEASE-NOTES: added what's happened since 1.7.5 + +Guenter Knauf (22 Apr 2012) +- Updated copyright year. + +Yang Tse (21 Apr 2012) +- ares_init.c: Further refactoring of Windows system's DNS fetching code + +Guenter Knauf (20 Apr 2012) +- Android: small changes to dns property part. + + Prefix prop vars; kill var; use DNS_PROP_NAME_PREFIX macro. + +- Handle CNAME-only in ares_parse_aaaa_reply(). + + posted to the c-ares list by Peter Griess . + +- Add support for multiple DNS servers on Android. + + Before, c-ares always used the first DNS server on Android, causing + network problems if this DNS server was not available. + + Signed-off-by: Geert Uytterhoeven + +- Added INSTALL so it gets into tarballs. + +- Added some more ifdefs to silent compiler warnings. + +Yang Tse (17 Apr 2012) +- INSTALL: remove a non c-ares section + +- cares-compilers.m4: -Wno-pedantic-ms-format for Windows gcc 4.5 builds + + When building a Windows target with gcc 4.5 or newer and strict compiler + warnings enabled use -Wno-pedantic-ms-format in addition to other flags. + +- setup_once.h: tighten requirements for stdbool.h header inclusion + + Include stdbool.h only when it is available and configure is capable of + detecting a proper 'bool' data type when the header is included. + +- configure: NATIVE_WINDOWS no longer defined in config file + +- cares-compilers.m4: double underscore decoration for visibility attribute + +- build adjustments: CARES_SYMBOL_HIDING no longer defined in config files + + configure script now provides conditional definitions for Makefile.am + that result in CARES_SYMBOL_HIDING being defined by resulting makefiles + when appropriate. + +- configure: Windows cross-compilation fixes + + CARES_BUILDING_LIBRARY and CARES_STATICLIB no longer defined in ares_config.h, + configure will generate appropriate conditionals so that mentioned symbols + get defined and used in Makefile derived from Makefile.am at compilation time. + +Guenter Knauf (17 Apr 2012) +- Added INSTALL file adapted from libcurl. + + Not yet ready, and needs further edits. + +Yang Tse (16 Apr 2012) +- ares_init.c: get_iphlpapi_dns_info() refactoring + +Guenter Knauf (16 Apr 2012) +- Kill some more compiler warnings. + +- Kill compiler warning about unused var. + +- Fixed my last commit: wrong preprocessor directive. + +- Check for __ANDROID__ in addition to ANDROID macro. + +- Check for __ANDROID__ in addition to ANDROID macro. + + Posted to c-ares list by Wayne. + +- Fix for Android to disable useless arpa/nameser.h. + +- Fix for Android to include sys/select.h for fd_set. + +Yang Tse (17 Mar 2012) +- ares_data.c: some NAPTR related fixes + +Daniel Stenberg (16 Mar 2012) +- port numbers: convert them to network order! + + When the config options ARES_OPT_UDP_PORT or ARES_OPT_TCP_PORT are used, + make sure to convert them to network byte order! + + Bug: http://c-ares.haxx.se/mail/c-ares-archive-2012-02/0004.shtml + +- white space cleanup + + - Keep code within 80 columns + + - Removed funny spaces after open paren and before closing paren + +- [Poul Thomas Lomholt brought this change] + + get_iphlpapi_dns_info: fix buffer overrun + + I experienced a buffer overrun exception in c-ares on Windows and + tracked it down to be an error in the calculation of the 'left' variable + in get_iphlpapi_dns_info(). + + I changed the variable type of 'left' to a _signed_ type because of the + subtraction arithmetic; not sure if a long is the best choice + +- Merge pull request #7 from saghul/naptr + + Added support for parsing NAPTR records + +saghul (23 Feb 2012) +- Added support for parsing NAPTR records + +Yang Tse (19 Jan 2012) +- ares_init.c: fix compiler warning on winsock builds + +- configure: libtool 1.5 tweaks + +Daniel Stenberg (19 Dec 2011) +- ares_timeout.3: fix the NAME section + + It was clearly a copy n' paste error + +Yang Tse (27 Sep 2011) +- [Albert Chin brought this change] + + configure - m4: make CURL_CHECK_DEF ignore leading whitespace on symbol def + + When using Sun C compiler the preprocessor somehow inserts an extra space + in front of replaced symbol, breaking CURL_CHECK_DEF macro. To workaround + this, macro CURL_CHECK_DEF now ignores all leading whitespace in front of + symbol substitution result. + +- ares_init.c: fix segfault triggered in ares_init_options() upon previous + failure of init_by_defaults() and incomplete cleanup there. + +- ares_process.c: fix compiler warning + +- fix MSVC compiler warning 'conditional expression is constant' + +- setup_once.h cleanup and sync + +- [Denis Bilenko brought this change] + + ares_getnameinfo: fix random results with c-ares 1.7.5 + + In ares_getnameinfo memcpy did not copy enough bytes, causing + it to return arbitrary memory contents as a result. + +- warnings: fix another 'conversion may lose significant bits' compiler warning + +- ares_dns.h: adjust DNS__16BIT and DNS__32BIT macro definitions + + Fixing compiler warnings existing definitions triggered on these. + +- ares_destroy.c: fix segfault in ares_destroy_options() + +Daniel Stenberg (21 Aug 2011) +- ares_parse_srv_reply: silence compiler warnings + + ... by adding ugly typecasts. + +- CHANGES: generate from script + + The CHANGES file is now generated automatically with 'git2changes.pl', + invoked by the maketgz script which is used to build release archives. + + The former human edited CHANGES file was renamed to CHANGES.0 in git. + +Yang Tse (21 Aug 2011) +- Makefile.netware: SIZEOF_SHORT definition + +- warnings: fix some 'conversion may lose significant bits' compiler warnings + +- configure: fix symbol hiding usability check + + A more thorough test is done now in order to determine visibility attribute + usability, given that some compilers don't support visibility attribute on + all configurations. + +Daniel Stenberg (16 Aug 2011) +- 1.7.6: start working... + +Version 1.7.5 (16 Aug 2011) + +Daniel Stenberg (16 Aug 2011) +- CHANGES: synced for 1.7.5 release + +- RELEASE-NOTES: synced with bb4096effef7f000 + +Jakub Hrozek (15 Aug 2011) +- Only fall back to AF_INET searches when looking for AF_UNSPEC addresses + +Yang Tse (10 Aug 2011) +- [Gisle Vanem brought this change] + + ares_iphlpapi.h: Watcom C fix + + Added "!defined(_WS2DEF_)" since Watcom doesn't have + a per type guard for the typedefs 'CSADDR_INFO' (that MingW has) or + 'SOCKET_ADDRESS' (that MSVC has). But we can use the header-guard for + instead. + +- [Gisle Vanem brought this change] + + Makefile.Watcom: + * The 'NTDDI_VERSION' needs to be raised to 0x05010000 + in order for SOCKADDR_STORAGE etc. to be typedefed. + * Replaced '-dUSE_WATT32' with '-dWATT32'. + * Added $(DEMOS) to the 'all' target and removed the 'demos' + target to be consistent with e.g. Makefile.msvc etc. + * 'ENABLE_IPV6' is no longer used. Hence removed the '%use_ipv6' construct. + * object-file order seems to be important (Watcom v.19). Hence + 'ares_getopt.obj' must be put after the .obj that references getopt(). + +- cares-compilers.m4: CARES_CONVERT_INCLUDE_TO_ISYSTEM adjustments + + Add CARES_CHECK_COMPILER as a requirement. + + Ensure macro does nothing unless GNU_C or CLANG compiler is used. + + This should allow usage of this macro in unforeseen placements. + +- config-win32.h: comments adjustments - followup + +- config-win32.h: comments adjustments + +Daniel Stenberg (5 Aug 2011) +- [Tom Hughes brought this change] + + ares_parse_a_reply: fix memleak + +Yang Tse (29 Jul 2011) +- cares-functions.m4 serial # bump + +- Revert "configure: additional flag checks for fcntl() and socket()" + + This reverts commit 5f2a3b0e48f26d24cb1fefea0dccb92d417dcbf7. + +- configure: additional flag checks for fcntl() and socket() + +- xc-translit.m4 fix quoting + +- configure: avoid direct usage of AS_TR_* macros + +- xc-translit.m4 provides transliteration macros with well defined behavior. + +Jakub Hrozek (15 Jun 2011) +- Revert "Only fall back to AF_INET searches when looking for AF_UNSPEC addresses" + + This reverts commit b5823d65706af687c0e5110af8f0cfdcd068997d. + + This patch was not reviewed properly before pushing + +- Revert "Do not use sized constants in public headers" + + This reverts commit 22c01e96f7b2ae9923e1baa50bfe3c0d22297a7d. + + This is a Red Hat specific patch that does not belong into upstream + +- Use correct sizeof in ares_getnameinfo() + +- Do not leak rr_name on failures inside ares_parse_ptr_reply + +- Do not leak rr_name on failures inside ares_parse_a_reply + +- Do not leak rr_name on failures inside ares_parse_aaaa_reply + +- Do not leak rr_name on failures inside ares_parse_ns_reply + +- Fix incorrect sizeof() in ares_save_options + +- Fix incorrect allocation in ares_parse_ptr_reply() + +- Only fall back to AF_INET searches when looking for AF_UNSPEC addresses + +- Do not use sized constants in public headers + +Daniel Stenberg (13 Jun 2011) +- [Jakub Hrozek brought this change] + + ares_free_hostent(NULL) should be a noop + +Yang Tse (8 Jun 2011) +- configure: fix recvfrom 5th arg type qualifier detection (followup) + +- configure: fix recvfrom 5th arg type qualifier detection + + Additionally remove whitespace from EOL + +Daniel Stenberg (4 Jun 2011) +- strlen: use size_t to receive the return + +Yang Tse (4 Jun 2011) +- xlc: avoid preprocessor definition usage when linking + +- ares_nowarn: icc 9.1 workaround + +- ares_nowarn: header inclusion fix + +- ares_init: make ares_private.h last included header again + +- compiler warning: fix + + Fix compiler warning: conversion may lose significant bits + +- compiler warning: fix + + Fix compiler warning: variable was set but never used + + Fix compiler warning: clobber ignored + +- ares_iphlpapi: fix compiler warnings + +- winsock: compilation fixes + + Provide winsock iphlpapi alternative definitions to prevent compilation + failures when using a variety of winsock header implementations. + +Daniel Stenberg (17 May 2011) +- [David Stuart brought this change] + + IPv6-on-windows: find DNS servers correctly + +- man pages: docs for the c-ares utility programs + +- ares_parse_ns_reply.c: remove CVSism + +Yang Tse (27 Mar 2011) +- build: fix header inclusion + +- getservbyport replacement for Win CE + +- renamed getplatform() to ares__getplatform() to avoid namespace pollution + +- configure: fix libtool warning + + Recent versions of libtool are now tracing usage of AC_CONFIG_MACRO_DIR + macro and warn heavily when not used in configure script along with + ACLOCAL_AMFLAGS in Makefile.am. So in order to make libtool happy + while keeping backwards compatibility this is added. + +- adig: RFC4034 resource record type detection + + Can be tested with: adig -s 8.8.8.8 -t ANY example.com + +- nameser.h: RFC4034 resource record type definitions + +- build: move platform stuff to ares_platform.c and ares_platform.h + +- build: find out windows platform using GetVersionEx() + +- build: use getenv() replacement function for systems which lack it + +- setup_once: system error codes for Windows CE + +- ares_search: use ERRNO macro for portability sake + +- System's errno.h inclusion cleanup follow-up. + + System's errno.h is conditionally included from setup_once.h + +- Windows CE specific adjustment + + All versions of Windows CE support Winsock 1.1 + +- System's errno.h inclusion cleanup. + + System's errno.h is conditionally included from setup_once.h + +- ares_init: fix gethostname error detection on winsock platforms + +- configure: r-enable temporarily disabled detection of system's inet_ntop() + + Detection was temporarily disabled in commit 674e044ccb21f2f63537da53565fce868f + +Daniel Stenberg (15 Mar 2011) +- configure: stop using the deprecated AM_INIT_AUTOMAKE syntax + +- [Gisle Vanem brought this change] + + Watt-32: use errno + + Make sure Watt-32 programs use 'errno' even on Win32 targets + +Guenter Knauf (18 Feb 2011) +- Removed commented CLFAGS no longer needed. + +- Fixed CFLAGS for NetWare. + + Added -m32 to enable compilation with x86_64 compilers; + added conditional to set -fpcc-struct-return only for gcc compiler. + +Daniel Stenberg (18 Feb 2011) +- [Gisle Vanem brought this change] + + Watt32: fix server init + + Somewhere in the process, programs using the Watt-32 tcp/ip stack + stopped working. + +- [Dima Tisnek brought this change] + + config_sortlist: (win32) missing else + + Without an else there, contents of "pat" that could have been + successfully set just above, may be clobbered by successive unsuccessful + calls to "xxx_pton" or "ip_addr". + +Yang Tse (17 Jan 2011) +- Makefile.msvc: add a couple of VS version strings + +- Makefile.msvc: add a couple of VS version strings + +- build: add install target to Makefile.msvc + +Daniel Stenberg (27 Dec 2010) +- ares_set_servers_csv: remove unused variables + +- init_by_resolv_conf: fix compiler warnings + + The code received the return codes in the 'status' variable without + using it. Instead we just ignore those particular errors. + +- getv4: Value stored to 'dst' is never read + +- advance_tcp_send_queue: avoid NULL ptr dereference + + If given a too large 'num_bytes' value, it would cause a NULL ptr + dereference. Instead the code will now break out of the loop at the end + of the list. + +- [Peter Pentchev brought this change] + + configure: fix a bashism + +- cleanup: avoid unsafe typecasts + + Avoid the risk of reading 16bit data from an unaligned address by using + a macro that is adapted for this. + +- [Stefan Bühler brought this change] + + ares_expand_name: Fix encoded length for indirect root + +Yang Tse (18 Dec 2010) +- build: add some explicit file references to VS project files + +- config-win32: provide HAVE_ASSERT_H definition + +- build: include ares_nowarn in sample program VS project files + +- build: include ares_nowarn among SAMPLESOURCES and SAMPLEHEADERS + +- configure: temporarily disable detection of system's inet_ntop() + + This is done to allow compilation of ares_inet_ntop() by some daily + builds picky compilers that otherwise do not need this function. + +- changes: mention last fix + +- ares_inet_ntop: remove definition and usage of macro SPRINTF + + Existing definition of SPRINTF always resulted in sprintf() being used, + and sprintf() returning 'int' is already used throughout the library. + +- ares_inet_ntop: reapply changes from previous c-ares version (III) + + - Replace 'u_char' with 'unsigned char'. + - Replace 'u_int' with 'unsigned int'. + - use macros ERRNO and SET_ERRNO() for errno handling. + +- ares_inet_ntop: reapply changes from previous c-ares version (II) + + - Remove rcsid. + - Adjust header file inclusions. + - ares_inet_ntop used only on systems without a proper inet_ntop function. + +- ares_inet_ntop: reapply changes from previous c-ares version (I) + + - Replace tabs with spaces. + - Use ANSI C style for function declarations and definitions. + - Use sizeof with parentheses. + +- ares_inet_ntop: fix off by one error triggering out of bounds write + + ares_inet_ntop would trigger an out of bounds write when the representation + of the address required 15 characters, due to not taking in account null + termination character. + + Full import of inet_ntop.c from bind-9.5.3rc1 to pull additional fixes. + +- ares_nowarn: add conditional inclusion of assert.h header + +- fix compiler warning: conversion may lose significant bits + +- ares_inet_net_pton: fix non-rejection of some malformed literals + + ares_inet_net_pton would return wrong values when excessively large, + and invalid, netmasks are used. Fixes are from bind-9.5.3rc1, + issue also described in the WLB-2008080064 advisory. + +- setup_once: provide ISASCII macro + +- configure: inet_net_pton function check adjustments + + Define HAVE_INET_NET_PTON only when system's inet_net_pton function is IPv6 + capable and is not affected by the WLB-2008080064 advisory. + + HAVE_INET_NET_PTON_IPV6 is no longer defined nor used. + +- ares_init: fix detection of semicolon comments in resolv.conf + + File resolv.conf may either use a hash '#' or a semicolon ';' character as an + indication that the rest of the line is a comment. This fixes not recognizing + the semicolon as a valid comment indicator in resolv.conf. + +- version: start working on 1.7.5 + +Version 1.7.4 (8 Dec 2010) + +Daniel Stenberg (8 Dec 2010) +- release-preps: CHANGES and RELEASE-NOTES synced + +- ares_set_local_*: added in 1.7.4, not before + +Yang Tse (3 Dec 2010) +- build: provide SIZEOF_SIZE_T definition for non-configure builds + +- build: config.dos renamed to config-dos.h + +- build: provide SIZEOF_SIZE_T netware definition + +- ares_gethostbyaddr: fix compiler warning: conversion may lose significant bits + +- configure: undo using autobuilds to temporarily verify strict aliasing warnings. + +- fix compiler warning: rounding, sign extension, or loss of accuracy may result + +Daniel Stenberg (2 Dec 2010) +- [Ben Noordhuis brought this change] + + ares_parse_a_reply: fix CNAME response parsing + + Reply to a CNAME query doesn't contain addresses, causing + ares_parse_a_reply() to bail out with ARES_ENODATA + + Bug: http://groups.google.com/group/nodejs/browse_thread/thread/a1268c9ea5e9ad9b + +Yang Tse (1 Dec 2010) +- fix compiler warning: conversion may lose significant bits + +- atoi: remove atoi usage + +- ares_init: fix compiler warning: conversion may lose significant bits + +- configure: fix autoconf warning + +- inet_pton: fix compiler warning + +- configure: use autobuilds to temporarily verify strict aliasing warnings. + + Temporarily, When cross-compiling with gcc 3.0 or later, enable strict aliasing + rules and warnings. Given that cross-compiled targets autobuilds do not run the + test-suite, there is no risk of running code that violates strict aliasing rules + +- ares_getnameinfo: Partially revert commit 85520d66e0ac7ac73411bc25e98769a88b2f + + Upon socket address family and length validation failure return ARES_ENOTIMP + in callback again, this is the error code documented in man page and used + mostly all over the library. + +- ares_getnameinfo: Validate socket address family and length. + + Validate socket address family and that the socket address length is appropriate + for the specified family. Failure is reported with ARES_EBADFAMILY in callback. + +- ares_getnameinfo: fix two compiler warnings + +- Added another VS10 version string + +- Fix GCC 4 compiler warning 'dereferencing type-punned pointer might break strict-aliasing rules'. + +- Revert commit 494274e653936335c255a47599970de3df21e7c4 + +- configure: fix autoconf 2.68 warning: no AC_LANG_SOURCE call detected in body + +- Fix compiler warning: array subscript has type 'char' + +- Fix GCC 4 compiler warning 'dereferencing type-punned pointer might break strict-aliasing rules'. + +- Revert following commits: + 07bc7ea79509bcc9ef6e09151e81766ed00d3392 + 3392a50ea3f8573ea4b7a9d82b9833dab60cb0e9 + 9912637d32c9987719a1ea12db591aee2941891c + + The purpose of the whole patch was to silence a compiler warning triggered + with GCC 4 on file ares_process.c The specific compiler warning was + 'dereferencing type-punned pointer might break strict-aliasing rules'. + + A simpler patch will follow to equally silence the warning. + +- ares_options: reorder header inclusions to make inclusion of + ares_private.h the last included one again. + +Daniel Stenberg (12 Nov 2010) +- [Patrik Thunstrom brought this change] + + adig: fix NAPTR parsing + + I ran across a small "issue" in your adig example. + + It is simply the last part of the NAPTR record, the replacement element, + which is not a string, as currently handled in adig, but a domain name. + +- ares_save_options: assignments instead of memcpy + +- init_by_options: don't copy an empty sortlist + + If there aren't any sort items to copy, don't bother. Without this + little precaution it would do a malloc(0) which causes undefined + behaviors and is frowned upon by curl's memdebug-system. + +Guenter Knauf (3 Oct 2010) +- Minor Watcom makefile tweaks. + +Daniel Stenberg (30 Sep 2010) +- [Mike Crowe brought this change] + + Fix lookup with HOSTALIASES set. + + ares__read_line returns ARES_EOF when it reaches the end of the + file. This will happen every time when reading to the end of the + HOSTALIASES file. Unfortunately single_domain treats this error as + being fatal. + + Signed-off-by: Mike Crowe + +Ben Greear (24 Aug 2010) +- Add missing break that caused get_ares_servers to fail. + + Reported-by: Ning Dong + Signed-off-by: Ben Greear + +Yang Tse (11 Aug 2010) +- configure: werror related adjustments + +Guenter Knauf (8 Aug 2010) +- Added copyright string to ares_version.h and make use of it in other files. + +- Block created ares_build.h for NetWare to avoid usage from other platforms. + +- Fix to overwrite default libname. + +- Some more Watcom makefile massage ... + +- Some more Watcom makefile massage ... + +Ben Greear (4 Aug 2010) +- sock-addr-storage: Detect and deal with lack of .ss_family member. + + AIX, at least, does not have sockaddr_storage.ss_family member. + Detect this in the configure logic and use proper #ifdefs in the + ares_process logic. + + Signed-off-by: Ben Greear + Tested-by: Tor Arntsen + +Guenter Knauf (3 Aug 2010) +- Added Watcom makefile based on libcurl's Makefile.Watcom. + +Ben Greear (31 Jul 2010) +- typo: Fix compile bug for platforms that don't have sockaddr_storage. + + Bug was introduced by me in previous commit. + + Signed-off-by: Ben Greear + +- Fix aliasing warning in gcc 4.4.4 (at least). + + Should be no functional change, though the code gets a bit + ugglier. + + Signed-off-by: Ben Greear + +Daniel Stenberg (31 Jul 2010) +- ares_set_servers_csv: use ISDIGIT + + The IS*() set of macros are preferred to the regular is*() functions as + they help us avoid the most common pitfalls. + +Ben Greear (30 Jul 2010) +- cast arg to isdigit to int + + Looks like it might silence a warning on Netware build. + + Signed-off-by: Ben Greear + +- remove all uses of uint32_t + + Previous fix forgot a few. + + Signed-off-by: Ben Greear + +- fix signed v/s unsigned casts warning in ares_gethostbyaddr.c + + Signed-off-by: Ben Greear + +- local-bind-fixup: Fix inet_pton warning. + + Conditionally include for inet_pton + headers. + + Signed-off-by: Ben Greear + +- build: Enable compiling with -Werror. + + This helps find compile warnings because they simply break + the build. + + To use: + ./configure --enable-warnings --enable-werror + + Signed-off-by: Ben Greear + +- ipv6: Fix some build issues related to the local-bind feature. + + Signed-off-by: Ben Greear + +Guenter Knauf (29 Jul 2010) +- Replaced uint32_t with unsigned int to fix broken builds on a couple of platforms. + +Daniel Stenberg (18 Jul 2010) +- [Ben Greear brought this change] + + local-bind: Support binding to local interface/IPs + + Add 3 new functions to set the local binding for the out-going + socket connection, and add ares_set_servers_csv() to set a + list of servers at once as a comma-separated string. + + Signed-off-by: Ben Greear + +- version: now start on 1.7.4 + +- [Andrew C. Morrow brought this change] + + fix memory leak in ares_getnameinfo + +Version 1.7.3 (11 Jun 2010) + +Daniel Stenberg (11 Jun 2010) +- changelogs: updated for 1.7.3 + +- [BogDan Vatra brought this change] + + init: allow c-ares to work on Android OS + +- changelog: fill in the 1.7.2 changes + +- added another pdf to ignore + +Yang Tse (11 Jun 2010) +- add ares_parse_mx_reply.c to VS dsp file + +Daniel Stenberg (10 Jun 2010) +- tarball: add $(CSOURCES) $(HHEADERS) to EXTRA_DIST + + It's not clear to me why we need this, but we apparently may + otherwise not get all files bundled in the dist tarball. + +- version: start working on 1.7.3 + +Version 1.7.2 (10 Jun 2010) + +Daniel Stenberg (10 Jun 2010) +- RELEASE-NOTES: 1.7.2 details added + +- [Jakub Hrozek brought this change] + + ares_init: Last, not first instance of domain or search should win + +- style: make code less than 80 columns wide + +Yang Tse (31 May 2010) +- [Tor Arntsen brought this change] + + improve alternative definition of bool to use enum instead of unsigned char + +- fix VS2010 compiler warnings + +Daniel Stenberg (18 Apr 2010) +- [Jérémy Lal brought this change] + + added ares_parse_mx_reply + +- repair the file mode + +- remove all $Id$ lines + +- remove all .cvsignore files + +- spell fix + + reported by Gregor Jasny on the mailing list + +- [Peter Pentchev brought this change] + + Fix a couple of typos and grammar nits. + +- ignore the GPG signature files too + +- start the journey towards 1.7.2 + +- no longer CVS tagging + +- ignore generated PDFs + +Version 1.7.1 (23 Mar 2010) + +Daniel Stenberg (23 Mar 2010) +- 1.7.1 + +- made README the primary readme file + + ... and did README.cares to contain a historic reason etc. + +- s/CVS/git + +- git now, not CVS + +- ignore lots of generated files + +- [Daniel Johnson brought this change] + + Fix warnings for clang + +Yang Tse (17 Mar 2010) +- replaced intel compiler option -no-ansi-alias with -fno-strict-aliasing + +- update outdated serial number + +- fix compiler warning + +- watt32 compilation fix + +- Added another VS10 version string + +- fix line break + +- removed usage of 's6_addr', fixing compilation issue triggered with no + longer using 'in6_addr' but only our 'ares_in6_addr' struct + +Daniel Stenberg (5 Mar 2010) +- Daniel Johnson provided fixes for building with the clang compiler + +Yang Tse (5 Mar 2010) +- Added IPv6 name servers support + +Gisle Vanem (5 Mar 2010) +- Ops!. Readded ares_nowarn.h. + +- Added ares_nowarn.c. + +Yang Tse (28 Feb 2010) +- Added SIZEOF_INT and SIZEOF_SHORT definitions for non-configure systems + +- Added ares_nowarn.* to VC6 project file + +- Added SIZEOF_INT definition + +- fix compiler warning + +- fix compiler warning + +- fix compiler warning + +Daniel Stenberg (17 Feb 2010) +- ares_reinit() + + - To allow an app to force a re-read of /etc/resolv.conf etc, pretty much + like the res_init() resolver function offers + +- - Tommie Gannert pointed out a silly bug in ares_process_fd() since it didn't + check for broken connections like ares_process() did. Based on that, I + merged the two functions into a single generic one with two front-ends. + +Yang Tse (30 Dec 2009) +- VMS specific preprocessor symbol checking adjustments + +- Mention last changes + +- - Fix configure_socket() to use ares_socket_t instead of int data type. + +- - Where run-time error checks enabling compiler option /GZ was used it is now + replaced with equivalent /RTCsu for Visual Studio 2003 and newer versions. + + - Compiler option /GX is now replaced with equivalent /EHsc for all versions. + +- - Ingmar Runge noticed that Windows config-win32.h configuration file + did not include a definition for HAVE_CLOSESOCKET which resulted in + function close() being inappropriately used to close sockets. + +Daniel Stenberg (30 Nov 2009) +- start working on 1.7.1 + +Version 1.7.0 (27 Nov 2009) + +Yang Tse (27 Nov 2009) +- Preserve empty line following last target + +- - Larry Lansing fixed ares_parse_srv_reply to properly parse replies + which might contain non-SRV answers, skipping over potential non-SRV + ones such as CNAMEs. + +- When using icc, compile with -fpic and link with intel dynamic libraries. + +- Added 'currently' in italics to insist on transient situation. + +- Fix language + +- Daniel wants upcoming release to be 1.7.0 + +- Mention last changes + +- - Removed from external interface preprocessor symbol definition for + CARES_HAVE_ARES_FREE_DATA. Current functionality of ares_free_data() + makes it unnecessary. + +- Added README.msvc + +- Changed c-ares naming conventions when using MSVC as described in README.msvc + +- - Mention other recent changes + +- - Jakub Hrozek renamed addrttl and addr6ttl structs to ares_addrttl and + ares_addr6ttl in order to prevent name space pollution, along with + necessary changes to code base and man pages.This change does not break + ABI, there is no need to recompile existing applications. But existing + applications using these structs with the old name will need source code + adjustments when recompiled using c-ares 1.6.1. + +- - Jakub Hrozek fixed more function prototypes in man pages to sync them + with the ones declared in ares.h + +- Make configure remove the ares_build.h file included in distribution tarballs. + +- Fix macro redefinition. + +- Fix name space pollution. + +- Allow using different extra import libraries for debug and release builds. + +- Add manifest stuff to msvc makefile + +- Sync man page with reality + +- Add missing external API decoration for ares_set_socket_callback() + +- Add ares_free_data() man page. + +- - Provide in external interface preprocessor symbol definitions for + CARES_HAVE_ARES_FREE_DATA as an indication of function availability. + +- Remove typecast + +- Fix comment + +- Add ares_data.c and ares_data.h + +- Jakub Hrozek modified ares_parse_srv_reply() and ares_parse_txt_reply() API + to return a linked lists of results. These were also modified to internally + use the ares_data memory struct and as such its result must be free'ed with + ares_free_data(). + +- Initial support for the generic ares_free_data() function that will allow + applications to free memory allocated and returned by some c-ares funtions. + +- Make usage of calloc()'s arguments consistent with rest of code base + +- workaround icc 9.1 optimizer issue + +- Add icc fvisibility bug test + +- Fix icc 9.0 compiler warning: external definition with no prior declaration + +- Fix three var names + +- Add check for assert.h header file + +- getaddrinfo is fully thread safe on solaris versions which + implement the function even when h_errno is not a macro. + + The h_errno macro test now only done on systems for which there + is no hard coded knowledge about getaddrinfo's thread safeness. + +- Remove files generated on previous buildconf/configure run + +- Remove enable-thread / disable-thread configure option. These were only placebo + options. The library is always built as thread safe as possible on every system. + +- Refactor how preprocessor symbol _THREAD_SAFE definition is done. + +- Assume that getaddrinfo is thread safe, unless hard coded + knowledge says the contrary or h_errno is not defined. + +- Related with the threadsafe capability of getaddrinfo: + + - Constantine Sapuntzakis reported that Darwin 6.0 a.k.a. MAC OS X 10.2 + and newer have a threadsafe getaddrinfo. + + - Fix Dragonfly BSD triplet detection. + + - In case the hard-coded knowledge says that getaddrinfo is threadsafe, + an additional check is done to verify that h_errno is also defined. + If h_errno isn't defined, we finally assume that it isn't threadsafe. + Jamie Lokier provided the inspiration for this extra check. + +- AIX 5.2 and newer have threadsafe getaddrinfo. + + Add some comments to better understand what the regex's pretend to achieve. + +- HP-UX 11.11 and later have threadsafe getaddrinfo + +- Check if getaddrinfo is threadsafe when function check allows it to be used + +- Renamed fpGetNetworkParams and fpSystemFunction036 to avoid namespace pollution with static library + +- Add kernel32.lib + +- Mention last changes + +- Reinstate copyright symbol lost in previous commit + +- Make some strings different in resource file for debug or release builds + +- Ignore more subdirs + +- Fix compiler warning: conditional expression is constant + +- Sync linker and resource compiler options with Makefile.msvc + +- Follow Makefile.msvc subdirectory naming scheme, and sync compiler options + +- Updated MSVC makefile that allows building dynamic and static + c-ares libraries in debug and release flavours. + + Additionally each of the three sample programs is built against + each of the four possible c-ares libraries, generating all this + a total number of 12 executables and 4 libraries. + +- Test for USE_WINSOCK since it is more restrictive than WIN32 + +- Make header inclusion depend on HAVE_*_H definition + +- Remove unneeded preprocessor directives + +- Adjust c-ares include paths for memory tracking enabled (--enable-curldebug) builds + +- source files used by sample programs + +- Renamed c-ares setup.h to ares_setup.h + +- Adjust include paths to take in account that currently: + + c-ares with --enable-curldebug uses memdebug.h from libcurl's lib subdirectory. + + memdebug.h needs access to libcurl's setup.h from libcurl's lib subdirectory + and also needs access to libcurl's generated curl_config.h diff -Nru nodejs-mozilla-12.18.1/deps/cares/CMakeLists.txt nodejs-mozilla-12.22.12/deps/cares/CMakeLists.txt --- nodejs-mozilla-12.18.1/deps/cares/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/CMakeLists.txt 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,766 @@ +CMAKE_MINIMUM_REQUIRED (VERSION 3.1.0) + +INCLUDE (CheckIncludeFiles) +INCLUDE (CheckTypeSize) +INCLUDE (CheckFunctionExists) +INCLUDE (CheckSymbolExists) +INCLUDE (CheckCSourceCompiles) +INCLUDE (CheckStructHasMember) +INCLUDE (CheckLibraryExists) + +PROJECT (c-ares LANGUAGES C VERSION "1.18.0" ) + +# Set this version before release +SET (CARES_VERSION "1.18.1") + +INCLUDE (GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are wrong. + +# This is for libtool compatibility, and specified in a form that is easily +# translatable from libtool (even if the actual form doesn't make sense). +# For instance, in an autotools project, in Makefile.am there is a line that +# contains something like: +# -version-info 4:0:2 +# This breaks down into sections of current:revision:age +# This then generates a version of "(current-age).age.revision" with an +# interface version of "(current-age)" +# For example, a version of 4:0:2 would generate output such as: +# libname.so -> libname.so.2 +# libname.so.2 -> libname.so.2.2.0 +SET (CARES_LIB_VERSIONINFO "7:1:5") + + +OPTION (CARES_STATIC "Build as a static library" OFF) +OPTION (CARES_SHARED "Build as a shared library" ON) +OPTION (CARES_INSTALL "Create installation targets (chain builders may want to disable this)" ON) +OPTION (CARES_STATIC_PIC "Build the static library as PIC (position independent)" OFF) +OPTION (CARES_BUILD_TESTS "Build and run tests" OFF) +OPTION (CARES_BUILD_CONTAINER_TESTS "Build and run container tests (implies CARES_BUILD_TESTS, Linux only)" OFF) +OPTION (CARES_BUILD_TOOLS "Build tools" ON) + +# Tests require static to be enabled on Windows to be able to access otherwise hidden symbols +IF (CARES_BUILD_TESTS AND (NOT CARES_STATIC) AND WIN32) + SET (CARES_STATIC ON) + SET (CARES_STATIC_PIC ON) + MESSAGE (WARNING "Static building was requested be disabled, but reenabled to support tests") +ENDIF () + +# allow linking against the static runtime library in msvc +IF (MSVC) + OPTION (CARES_MSVC_STATIC_RUNTIME "Link against the static runtime library" OFF) + IF (CARES_MSVC_STATIC_RUNTIME) + # CMAKE_CONFIGURATION_TYPES is empty on non-IDE generators (Ninja, NMake) + # and that's why we also use CMAKE_BUILD_TYPE to cover for those generators. + # For IDE generators, CMAKE_BUILD_TYPE is usually empty + FOREACH (config_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE}) + STRING (TOUPPER ${config_type} upper_config_type) + SET (flag_var "CMAKE_C_FLAGS_${upper_config_type}") + IF (${flag_var} MATCHES "/MD") + STRING (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + ENDIF () + ENDFOREACH () + + # clean up + SET (upper_config_type) + SET (config_type) + SET (flag_var) + ENDIF () +ENDIF () + +# Keep build organized. +SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}") +SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") +SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}") +SET (PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/package) + +# Destinations for installing different kinds of targets (pass to install command). +SET (TARGETS_INST_DEST + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +# Function in Library +# CHECK_LIBRARY_EXISTS can't be used as it will return true if the function +# is found in a different dependent library. +MACRO (CARES_FUNCTION_IN_LIBRARY func lib var) + CHECK_FUNCTION_EXISTS ("${func}" "_CARES_FUNC_IN_LIB_GLOBAL_${func}") + IF ("${_CARES_FUNC_IN_LIB_GLOBAL_${func}}") + SET (${var} FALSE) + ELSE () + CHECK_LIBRARY_EXISTS ("${lib}" "${func}" "" ${var}) + ENDIF () +ENDMACRO () + +# Look for dependent/required libraries +CARES_FUNCTION_IN_LIBRARY (res_servicename resolv HAVE_RES_SERVICENAME_IN_LIBRESOLV) +IF (HAVE_RES_SERVICENAME_IN_LIBRESOLV) + SET (HAVE_LIBRESOLV 1) +ENDIF () + +IF (APPLE) + CHECK_C_SOURCE_COMPILES (" + #include + #include + int main() { +#if TARGET_OS_IPHONE == 0 +#error Not an iPhone target +#endif +return 0; + } + " + IOS) + + CHECK_C_SOURCE_COMPILES (" +#include +#include + int main() { +#if TARGET_OS_IPHONE == 0 || __IPHONE_OS_VERSION_MIN_REQUIRED < 100000 +# error Not iOS v10 +#endif +return 0; + } + " + IOS_V10) + + CHECK_C_SOURCE_COMPILES (" +#include +#include +#ifndef MAC_OS_X_VERSION_10_12 +# define MAC_OS_X_VERSION_10_12 101200 +#endif + int main() { +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12 +# error Not MacOSX 10.12 or higher +#endif +return 0; + } + " + MACOS_V1012) +ENDIF () + +IF ((IOS OR APPLE OR ZOS) AND HAVE_LIBRESOLV) + SET (CARES_USE_LIBRESOLV 1) +ENDIF() + + +CARES_FUNCTION_IN_LIBRARY (gethostbyname nsl HAVE_LIBNSL) +CARES_FUNCTION_IN_LIBRARY (gethostbyname socket HAVE_GHBN_LIBSOCKET) +CARES_FUNCTION_IN_LIBRARY (gethostbyname network HAVE_LIBNETWORK) +CARES_FUNCTION_IN_LIBRARY (socket socket HAVE_SOCKET_LIBSOCKET) +IF (HAVE_GHBN_LIBSOCKET OR HAVE_SOCKET_LIBSOCKET) + SET(HAVE_LIBSOCKET TRUE) +ENDIF () +CARES_FUNCTION_IN_LIBRARY (socket network HAVE_LIBNETWORK) +CARES_FUNCTION_IN_LIBRARY (clock_gettime rt HAVE_LIBRT) + + +# Look for necessary includes +CHECK_INCLUDE_FILES (sys/types.h HAVE_SYS_TYPES_H) +CHECK_INCLUDE_FILES (sys/socket.h HAVE_SYS_SOCKET_H) +CHECK_INCLUDE_FILES (sys/sockio.h HAVE_SYS_SOCKIO_H) +CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H) +CHECK_INCLUDE_FILES (arpa/nameser_compat.h HAVE_ARPA_NAMESER_COMPAT_H) +CHECK_INCLUDE_FILES (arpa/nameser.h HAVE_ARPA_NAMESER_H) +CHECK_INCLUDE_FILES (assert.h HAVE_ASSERT_H) +CHECK_INCLUDE_FILES (errno.h HAVE_ERRNO_H) +CHECK_INCLUDE_FILES (fcntl.h HAVE_FCNTL_H) +CHECK_INCLUDE_FILES (inttypes.h HAVE_INTTYPES_H) +CHECK_INCLUDE_FILES (limits.h HAVE_LIMITS_H) +CHECK_INCLUDE_FILES (malloc.h HAVE_MALLOC_H) +CHECK_INCLUDE_FILES (memory.h HAVE_MEMORY_H) +CHECK_INCLUDE_FILES (netdb.h HAVE_NETDB_H) +CHECK_INCLUDE_FILES (netinet/in.h HAVE_NETINET_IN_H) +CHECK_INCLUDE_FILES (net/if.h HAVE_NET_IF_H) +CHECK_INCLUDE_FILES (signal.h HAVE_SIGNAL_H) +CHECK_INCLUDE_FILES (socket.h HAVE_SOCKET_H) +CHECK_INCLUDE_FILES (stdbool.h HAVE_STDBOOL_H) +CHECK_INCLUDE_FILES (stdint.h HAVE_STDINT_H) +CHECK_INCLUDE_FILES (stdlib.h HAVE_STDLIB_H) +CHECK_INCLUDE_FILES (strings.h HAVE_STRINGS_H) +CHECK_INCLUDE_FILES (string.h HAVE_STRING_H) +CHECK_INCLUDE_FILES (stropts.h HAVE_STROPTS_H) +CHECK_INCLUDE_FILES (sys/ioctl.h HAVE_SYS_IOCTL_H) +CHECK_INCLUDE_FILES (sys/param.h HAVE_SYS_PARAM_H) +CHECK_INCLUDE_FILES (sys/select.h HAVE_SYS_SELECT_H) +CHECK_INCLUDE_FILES (sys/stat.h HAVE_SYS_STAT_H) +CHECK_INCLUDE_FILES (sys/time.h HAVE_SYS_TIME_H) +CHECK_INCLUDE_FILES (sys/uio.h HAVE_SYS_UIO_H) +CHECK_INCLUDE_FILES (time.h HAVE_TIME_H) +CHECK_INCLUDE_FILES (dlfcn.h HAVE_DLFCN_H) +CHECK_INCLUDE_FILES (unistd.h HAVE_UNISTD_H) + +# On OpenBSD, you must include sys/types.h before netinet/tcp.h +IF (HAVE_SYS_TYPES_H) + CHECK_INCLUDE_FILES ("sys/types.h;netinet/tcp.h" HAVE_NETINET_TCP_H) +ELSE () + CHECK_INCLUDE_FILES (netinet/tcp.h HAVE_NETINET_TCP_H) +ENDIF () + +# Include order matters for these windows files. +# As cygwin environment has both socket.h and winsock2.h +# headers check WIN32 not to include the later one here +IF (WIN32) +CHECK_INCLUDE_FILES ("winsock2.h;windows.h" HAVE_WINSOCK2_H) +CHECK_INCLUDE_FILES ("winsock2.h;ws2tcpip.h;windows.h" HAVE_WS2TCPIP_H) +CHECK_INCLUDE_FILES ("winsock.h;windows.h" HAVE_WINSOCK_H) +CHECK_INCLUDE_FILES (windows.h HAVE_WINDOWS_H) +ENDIF () + +# Set system-specific compiler flags +IF (CMAKE_SYSTEM_NAME STREQUAL "Darwin") + LIST (APPEND SYSFLAGS -D_DARWIN_C_SOURCE) +ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "Linux") + LIST (APPEND SYSFLAGS -D_GNU_SOURCE -D_POSIX_C_SOURCE=199309L -D_XOPEN_SOURCE=600) +ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "SunOS") + LIST (APPEND SYSFLAGS -D__EXTENSIONS__ -D_REENTRANT -D_XOPEN_SOURCE=600) +ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "AIX") + LIST (APPEND SYSFLAGS -D_ALL_SOURCE -D_XOPEN_SOURCE=600 -D_USE_IRS) +ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + # Don't define _XOPEN_SOURCE on FreeBSD, it actually reduces visibility instead of increasing it +ELSEIF (WIN32) + LIST (APPEND SYSFLAGS -DWIN32_LEAN_AND_MEAN -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_WIN32_WINNT=0x0600) +ENDIF () +ADD_DEFINITIONS(${SYSFLAGS}) + + + +# Tell C-Ares about libraries to depend on +IF (HAVE_LIBRESOLV) + LIST (APPEND CARES_DEPENDENT_LIBS resolv) +ENDIF () +IF (HAVE_LIBNSL) + LIST (APPEND CARES_DEPENDENT_LIBS nsl) +ENDIF () +IF (HAVE_LIBSOCKET) + LIST (APPEND CARES_DEPENDENT_LIBS socket) +ENDIF () +IF (HAVE_LIBNETWORK) + LIST (APPEND CARES_DEPENDENT_LIBS network) +ENDIF () +IF (HAVE_LIBRT) + LIST (APPEND CARES_DEPENDENT_LIBS rt) +ENDIF () +IF (WIN32) + LIST (APPEND CARES_DEPENDENT_LIBS ws2_32 advapi32 iphlpapi) +ENDIF () + + +# When checking for symbols, we need to make sure we set the proper +# headers, libraries, and definitions for the detection to work properly +# CMAKE_REQUIRED_DEFINITIONS, CMAKE_REQUIRED_LIBRARIES, and +# CMAKE_EXTRA_INCLUDE_FILES. When we're done with the detection, we'll +# unset them. + +SET (CMAKE_REQUIRED_DEFINITIONS ${SYSFLAGS}) +LIST (APPEND CMAKE_REQUIRED_LIBRARIES ${CARES_DEPENDENT_LIBS}) + +MACRO (CARES_EXTRAINCLUDE_IFSET var include) + IF (${var}) + LIST (APPEND CMAKE_EXTRA_INCLUDE_FILES ${include}) + ENDIF () +ENDMACRO () + +CARES_EXTRAINCLUDE_IFSET (HAVE_STDBOOL_H stdbool.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_TYPES_H sys/types.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_ARPA_INET_H arpa/inet.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_ARPA_NAMESER_H arpa/nameser.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_NETDB_H netdb.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_NET_IF_H net/if.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_NETINET_IN_H netinet/in.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_NETINET_TCP_H netinet/tcp.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_SIGNAL_H signal.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_STDLIB_H stdlib.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_STRING_H string.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_STRINGS_H strings.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_IOCTL_H sys/ioctl.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SELECT_H sys/select.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SOCKET_H sys/socket.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SOCKIO_H sys/sockio.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_TIME_H sys/time.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_UIO_H sys/uio.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_TIME_H time.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_FCNTL_H fcntl.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_UNISTD_H unistd.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_WINSOCK2_H winsock2.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_WS2TCPIP_H ws2tcpip.h) +CARES_EXTRAINCLUDE_IFSET (HAVE_WINDOWS_H windows.h) + +# Check Types +# CHECK_TYPE_SIZE can't be used to see if a type exists because on Apple when +# building multi-arch, it will throw an error. So we need to wrap +# CHECK_C_SOURCE_COMPILES for our tests. +MACRO (CARES_TYPE_EXISTS type var) + SET(_CARES_C_SOURCE " + #include + #include + ") + FOREACH(_C_HEADER ${CMAKE_EXTRA_INCLUDE_FILES}) + SET(_CARES_C_SOURCE "${_CARES_C_SOURCE} + #include <${_C_HEADER}>") + ENDFOREACH(_C_HEADER) + + SET(_CARES_C_SOURCE "${_CARES_C_SOURCE} + int main() { + ${type} var_exists; + (void)var_exists; + return 0; + } + ") + CHECK_C_SOURCE_COMPILES ("${_CARES_C_SOURCE}" ${var}) +ENDMACRO () + +CARES_TYPE_EXISTS (socklen_t HAVE_SOCKLEN_T) +CARES_TYPE_EXISTS (SOCKET HAVE_TYPE_SOCKET) +CARES_TYPE_EXISTS (bool HAVE_BOOL_T) +CARES_TYPE_EXISTS (ssize_t HAVE_SSIZE_T) +CARES_TYPE_EXISTS ("long long" HAVE_LONGLONG) +CARES_TYPE_EXISTS (sig_atomic_t HAVE_SIG_ATOMIC_T) +CARES_TYPE_EXISTS ("struct addrinfo" HAVE_STRUCT_ADDRINFO) +CARES_TYPE_EXISTS ("struct in6_addr" HAVE_STRUCT_IN6_ADDR) +CARES_TYPE_EXISTS ("struct sockaddr_in6" HAVE_STRUCT_SOCKADDR_IN6) +CARES_TYPE_EXISTS ("struct sockaddr_storage" HAVE_STRUCT_SOCKADDR_STORAGE) +CARES_TYPE_EXISTS ("struct timeval" HAVE_STRUCT_TIMEVAL) + + +# Check for preprocessor defines +CHECK_SYMBOL_EXISTS (AF_INET6 "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_AF_INET6) +CHECK_SYMBOL_EXISTS (O_NONBLOCK "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_O_NONBLOCK) +CHECK_SYMBOL_EXISTS (FIONBIO "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_FIONBIO) +CHECK_SYMBOL_EXISTS (SIOCGIFADDR "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTL_SIOCGIFADDR) +CHECK_SYMBOL_EXISTS (MSG_NOSIGNAL "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_MSG_NOSIGNAL) +CHECK_SYMBOL_EXISTS (PF_INET6 "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_PF_INET6) +CHECK_SYMBOL_EXISTS (SO_NONBLOCK "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SO_NONBLOCK) + +# XCode v8 bug: iOS when targeting less than v10, or MacOS when targeting less than v10.12 will +# say clock_gettime exists, it is a weak symbol that only exists in iOS10/MacOS10.12 and will +# cause a crash at runtime when running on older versions. Skip finding CLOCK_MONOTONIC on older +# OS's. +IF ((NOT APPLE) OR IOS_V10 OR MACOS_V1012) + CHECK_SYMBOL_EXISTS (CLOCK_MONOTONIC "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CLOCK_GETTIME_MONOTONIC) +ENDIF () + +CHECK_STRUCT_HAS_MEMBER("struct sockaddr_in6" sin6_scope_id "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID LANGUAGE C) + +# Check for "LL" numeric suffix support +CHECK_C_SOURCE_COMPILES ("int main() { int n=1234LL; return 0; }" HAVE_LL) + + +CHECK_SYMBOL_EXISTS (bitncmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_BITNCMP) +CHECK_SYMBOL_EXISTS (closesocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CLOSESOCKET) +CHECK_SYMBOL_EXISTS (CloseSocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CLOSESOCKET_CAMEL) +CHECK_SYMBOL_EXISTS (connect "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_CONNECT) +CHECK_SYMBOL_EXISTS (fcntl "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_FCNTL) +CHECK_SYMBOL_EXISTS (freeaddrinfo "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_FREEADDRINFO) +CHECK_SYMBOL_EXISTS (getaddrinfo "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETADDRINFO) +CHECK_SYMBOL_EXISTS (getenv "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETENV) +CHECK_SYMBOL_EXISTS (gethostbyaddr "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOSTBYADDR) +CHECK_SYMBOL_EXISTS (gethostbyname "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOSTBYNAME) +CHECK_SYMBOL_EXISTS (gethostname "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOSTNAME) +CHECK_SYMBOL_EXISTS (getnameinfo "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETNAMEINFO) +CHECK_SYMBOL_EXISTS (getservbyport_r "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETSERVBYPORT_R) +CHECK_SYMBOL_EXISTS (getservbyname_r "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETSERVBYNAME_R) +CHECK_SYMBOL_EXISTS (gettimeofday "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETTIMEOFDAY) +CHECK_SYMBOL_EXISTS (if_indextoname "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IF_INDEXTONAME) +CHECK_SYMBOL_EXISTS (inet_net_pton "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_INET_NET_PTON) +IF (NOT WIN32) + # Disabled on Windows, because these functions are only really supported on Windows + # Vista or newer (_WIN32_WINNT >= 0x0600). Older versions of Windows may provide + # them as experimental non-working features, so we have to disable them manually. + CHECK_SYMBOL_EXISTS (inet_ntop "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_INET_NTOP) + CHECK_SYMBOL_EXISTS (inet_pton "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_INET_PTON) +ENDIF () +CHECK_SYMBOL_EXISTS (ioctl "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTL) +CHECK_SYMBOL_EXISTS (ioctlsocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTLSOCKET) +CHECK_SYMBOL_EXISTS (IoctlSocket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_IOCTLSOCKET_CAMEL) +CHECK_SYMBOL_EXISTS (recv "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_RECV) +CHECK_SYMBOL_EXISTS (recvfrom "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_RECVFROM) +CHECK_SYMBOL_EXISTS (send "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SEND) +CHECK_SYMBOL_EXISTS (setsockopt "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SETSOCKOPT) +CHECK_SYMBOL_EXISTS (socket "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_SOCKET) +CHECK_SYMBOL_EXISTS (strcasecmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRCASECMP) +CHECK_SYMBOL_EXISTS (strcmpi "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRCMPI) +CHECK_SYMBOL_EXISTS (strdup "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRDUP) +CHECK_SYMBOL_EXISTS (stricmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRICMP) +CHECK_SYMBOL_EXISTS (strncasecmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNCASECMP) +CHECK_SYMBOL_EXISTS (strncmpi "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNCMPI) +CHECK_SYMBOL_EXISTS (strnicmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNICMP) +CHECK_SYMBOL_EXISTS (writev "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_WRITEV) + +# On Android, the system headers may define __system_property_get(), but excluded +# from libc. We need to perform a link test instead of a header/symbol test. +CHECK_FUNCTION_EXISTS (__system_property_get HAVE___SYSTEM_PROPERTY_GET) + +# Unset temporary data +SET (CMAKE_EXTRA_INCLUDE_FILES) +SET (CMAKE_REQUIRED_DEFINITIONS) +SET (CMAKE_REQUIRED_LIBRARIES) + + +find_file(CARES_RANDOM_FILE urandom /dev) +mark_as_advanced(CARES_RANDOM_FILE) + + +################################################################################ +# recv, recvfrom, send, getnameinfo, gethostname +# ARGUMENTS AND RETURN VALUES +# +# The AutoTools build tries to be really thorough here. So much so that it +# takes forever. We really don't want to do that. Lets make some educated +# guesses based on datatypes we have available, and for others, use some 'sane' +# defaults. This should be much quicker and nearly as accurate ... and even +# if not, it probably won't matter in the least. + +IF (HAVE_SSIZE_T AND HAVE_SOCKLEN_T) + # If we have ssize_t and socklen_t, the API is usually sane and uses ssize_t and size_t for lengths + SET (RECVFROM_TYPE_RETV ssize_t) + SET (RECVFROM_TYPE_ARG3 size_t) +ELSE () + SET (RECVFROM_TYPE_RETV int) + SET (RECVFROM_TYPE_ARG3 int) +ENDIF () + +IF (HAVE_TYPE_SOCKET) + # If the SOCKET type is defined, it uses socket ... should be windows only + SET (RECVFROM_TYPE_ARG1 SOCKET) +ELSE () + SET (RECVFROM_TYPE_ARG1 int) +ENDIF() + +IF (HAVE_SOCKLEN_T) + # If we have socklen_t the APIs pretty much always actually use it + SET (RECVFROM_TYPE_ARG6 "socklen_t *") + SET (GETNAMEINFO_TYPE_ARG2 socklen_t) + SET (GETNAMEINFO_TYPE_ARG46 socklen_t) +ELSE () + SET (RECVFROM_TYPE_ARG6 "int *") + SET (GETNAMEINFO_TYPE_ARG2 int) + SET (GETNAMEINFO_TYPE_ARG46 int) +ENDIF () + +IF (WIN32) + SET (RECV_TYPE_ARG2 "char *") +ELSE () + SET (RECV_TYPE_ARG2 "void *") +ENDIF () + +# Functions are typically consistent so the equivalent fields map ... equivalently +SET (RECV_TYPE_RETV ${RECVFROM_TYPE_RETV}) +SET (SEND_TYPE_RETV ${RECVFROM_TYPE_RETV}) +SET (RECV_TYPE_ARG1 ${RECVFROM_TYPE_ARG1}) +SET (RECVFROM_TYPE_ARG2 ${RECV_TYPE_ARG2}) +SET (SEND_TYPE_ARG1 ${RECVFROM_TYPE_ARG1}) +SET (RECV_TYPE_ARG3 ${RECVFROM_TYPE_ARG3}) +SET (SEND_TYPE_ARG3 ${RECVFROM_TYPE_ARG3}) +SET (GETHOSTNAME_TYPE_ARG2 ${RECVFROM_TYPE_ARG3}) + +# These should always be "sane" values to use always +SET (RECVFROM_QUAL_ARG5 ) +SET (RECVFROM_TYPE_ARG4 int) +SET (RECVFROM_TYPE_ARG5 "struct sockaddr *") +SET (RECV_TYPE_ARG4 int) +SET (GETNAMEINFO_TYPE_ARG1 "struct sockaddr *") +SET (GETNAMEINFO_TYPE_ARG7 int) +SET (SEND_TYPE_ARG2 "void *") +SET (SEND_TYPE_ARG4 int) +################################################################################ + + +# HAVE_CXX11 ?? +# HAVE_SIG_ATOMIC_T_VOLATILE ?? + + +# Set a few variables by hand that C-Ares wants, logically, based on detection +# data. + +IF (HAVE_SOCKLEN_T) + Set (CARES_TYPEOF_ARES_SOCKLEN_T "socklen_t") +ELSE () + Set (CARES_TYPEOF_ARES_SOCKLEN_T "int") +ENDIF () + +IF (HAVE_SSIZE_T) + Set (CARES_TYPEOF_ARES_SSIZE_T "ssize_t") +ELSE () + IF (WIN32) + IF ("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") + Set (CARES_TYPEOF_ARES_SSIZE_T "__int64") + ELSE () + Set (CARES_TYPEOF_ARES_SSIZE_T "int") + ENDIF () + ELSE () + Set (CARES_TYPEOF_ARES_SSIZE_T "long") + ENDIF () +ENDIF () + +IF (HAVE_FCNTL AND HAVE_O_NONBLOCK) + SET (HAVE_FCNTL_O_NONBLOCK 1) +ENDIF () + +IF (HAVE_IOCTL AND HAVE_FIONBIO) + SET (HAVE_IOCTL_FIONBIO 1) +ENDIF () + +IF (HAVE_IOCTLSOCKET AND HAVE_FIONBIO) + SET (HAVE_IOCTLSOCKET_FIONBIO 1) +ENDIF () + +IF (HAVE_IOCTLSOCKET_CAMEL AND HAVE_FIONBIO) + SET (HAVE_IOCTLSOCKET_CAMEL_FIONBIO 1) +ENDIF () + +IF (HAVE_GETADDRINFO) + IF (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR + CMAKE_SYSTEM_NAME STREQUAL "HPUX" OR + CMAKE_SYSTEM_NAME STREQUAL "NetBSD" OR + CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR + CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR + CMAKE_SYSTEM_NAME STREQUAL "AIX" OR + WIN32) + SET (HAVE_GETADDRINFO_THREADSAFE 1) + ENDIF () +ENDIF () + +IF (HAVE_TIME_H AND HAVE_SYS_TIME_H) + SET (TIME_WITH_SYS_TIME 1) +ENDIF () + +IF (HAVE_GETSERVBYPORT_R) + # TODO : Should probably autodetect + IF (CMAKE_SYSTEM_NAME STREQUAL "SunOS") + SET (GETSERVBYPORT_R_ARGS 5) + ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "AIX" OR + CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR + HAIKU) + SET (GETSERVBYPORT_R_ARGS 4) + ELSE () + # Probably linux + SET (GETSERVBYPORT_R_ARGS 6) + ENDIF () +ENDIF () + +IF (HAVE_GETSERVBYNAME_R) + # TODO : Should probably autodetect + IF (CMAKE_SYSTEM_NAME STREQUAL "SunOS") + SET (GETSERVBYNAME_R_ARGS 5) + ELSEIF (CMAKE_SYSTEM_NAME STREQUAL "AIX" OR + CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR + HAIKU) + SET (GETSERVBYNAME_R_ARGS 4) + ELSE () + # Probably linux + SET (GETSERVBYNAME_R_ARGS 6) + ENDIF () +ENDIF () + +# Set some aliases used for ares_build.h +IF (HAVE_SYS_TYPES_H) + SET (CARES_HAVE_SYS_TYPES_H 1) +ENDIF () +IF (HAVE_SYS_SOCKET_H) + SET (CARES_HAVE_SYS_SOCKET_H 1) +ENDIF() +IF (HAVE_WS2TCPIP_H) + SET (CARES_HAVE_WS2TCPIP_H 1) +ENDIF() +IF (HAVE_WINSOCK2_H) + SET (CARES_HAVE_WINSOCK2_H 1) +ENDIF() +IF (HAVE_WINDOWS_H) + SET (CARES_HAVE_WINDOWS_H 1) +ENDIF() +IF (HAVE_ARPA_NAMESER_H) + SET (CARES_HAVE_ARPA_NAMESER_H 1) +ENDIF() +IF (HAVE_ARPA_NAMESER_COMPAT_H) + SET (CARES_HAVE_ARPA_NAMESER_COMPAT_H 1) +ENDIF() + +# Record toplevel CMakeLists.txt path +set(CARES_TOPLEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + + +# TRANSFORM_MAKEFILE_INC +# +# This function consumes the "Makefile.inc" autotools file, and converts it into +# "Makefile.inc.cmake", a cmake include file; transforming this: +# +# CSOURCES = ares__close_sockets.c \ +# ares__get_hostent.c \ +# ares__read_line.c \ +# ... +# +# into this: +# +# SET (CSOURCES +# ares__close_sockets.c +# ares__get_hostent.c +# ares__read_line.c +# ... +function(TRANSFORM_MAKEFILE_INC INPUT_FILE OUTPUT_FILE) + file(READ ${INPUT_FILE} MAKEFILE_INC_TEXT) + string(REPLACE "$(top_srcdir)" "\${PROJECT_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + string(REPLACE "$(top_builddir)" "\${PROJECT_BINARY_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + + string(REGEX REPLACE "\\\\\n" "ß!ß" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + string(REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*)" "SET(\\1 \\2)" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + string(REPLACE "ß!ß" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + + string(REGEX REPLACE "\\$\\(([a-zA-Z_][a-zA-Z0-9_]*)\\)" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace $() with ${} + string(REGEX REPLACE "@([a-zA-Z_][a-zA-Z0-9_]*)@" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace @@ with ${}, even if that may not be read by CMake scripts. + file(WRITE ${OUTPUT_FILE} ${MAKEFILE_INC_TEXT}) +endfunction() + +# Directory for includes +ADD_SUBDIRECTORY (include) + +# Directory for lib and tools +ADD_SUBDIRECTORY (src) + +# Docs +ADD_SUBDIRECTORY (docs) + +# Tests +IF (CARES_BUILD_TESTS OR CARES_BUILD_CONTAINER_TESTS) + ENABLE_TESTING () + ADD_SUBDIRECTORY (test) +ENDIF () + + +# Export targets +IF (CARES_INSTALL) + SET (CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") + INCLUDE (CMakePackageConfigHelpers) + CONFIGURE_PACKAGE_CONFIG_FILE (${PROJECT_NAME}-config.cmake.in ${PROJECT_NAME}-config.cmake + INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR} + PATH_VARS CMAKE_INSTALL_INCLUDEDIR + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) + + WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_NAME}-config-version.cmake VERSION "${CARES_VERSION}" COMPATIBILITY SameMajorVersion) + INSTALL (EXPORT ${PROJECT_NAME}-targets COMPONENT Devel DESTINATION ${CMAKECONFIG_INSTALL_DIR} NAMESPACE ${PROJECT_NAME}::) + INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake" COMPONENT Devel DESTINATION ${CMAKECONFIG_INSTALL_DIR}) + + # pkgconfig support + IF (NOT CARES_SHARED) + SET (CPPFLAG_CARES_STATICLIB "-DCARES_STATICLIB") + FOREACH (LIB ${CARES_DEPENDENT_LIBS}) + SET (CARES_PRIVATE_LIBS "${CARES_PRIVATE_LIBS} -l${LIB}") + ENDFOREACH () + ENDIF () + CONFIGURE_FILE("libcares.pc.cmake" "libcares.pc" @ONLY) + INSTALL (FILES "${CMAKE_CURRENT_BINARY_DIR}/libcares.pc" COMPONENT Devel DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +ENDIF () + + +# Legacy chain-building variables (provided for compatibility with old code). +# Don't use these, external code should be updated to refer to the aliases directly (e.g., Cares::cares). +SET (CARES_FOUND 1 CACHE INTERNAL "CARES LIBRARY FOUND") +SET (CARES_LIBRARIES ${PROJECT_NAME}::cares CACHE INTERNAL "CARES LIBRARIES") + + +IF (CARES_INSTALL) + # Package creation + set( CPACK_PACKAGE_NAME ${PROJECT_NAME} ) + set( CPACK_PACKAGE_VENDOR "Daniel Stenberg" ) # Github project owner + set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "A C library for asynchronous DNS requests" ) + set( CPACK_PACKAGE_HOMEPAGE_URL "https://c-ares.org/" ) + set( CPACK_PACKAGE_CONTACT "https://c-ares.org/" ) + set( CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR} ) + set( CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR} ) + set( CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH} ) + set( CPACK_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH} ) + set( CPACK_PACKAGE_INSTALL_DIRECTORY ${PROJECT_NAME} ) + set( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md" ) + set( CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md" ) + + set( CPACK_COMPONENT_Library_DISPLAY_NAME "c-ares Library" ) + set( CPACK_COMPONENT_Library_DESCRIPTION "The c-ares binary library." ) + set( CPACK_COMPONENT_Library_REQUIRED 1 ) + set( CPACK_COMPONENT_Devel_DISPLAY_NAME "c-ares Development Files" ) + set( CPACK_COMPONENT_Devel_DESCRIPTION "Development files for compiling against c-ares." ) + set( CPACK_COMPONENT_Devel_REQUIRED 0 ) + IF (CARES_BUILD_TOOLS) + set( CPACK_COMPONENT_Tools_DISPLAY_NAME "c-ares Tools" ) + set( CPACK_COMPONENT_Tools_DESCRIPTION "Tools for using c-ares." ) + set( CPACK_COMPONENT_Tools_REQUIRED 0 ) + ENDIF () + + if( ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" ) + + if ( "${CPACK_PACKAGE_ARCHITECTURE}" STREQUAL "" ) + # Note: the architecture should default to the local architecture, but it + # in fact comes up empty. We call `uname -m` to ask the kernel instead. + EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE ) + endif() + + set( CPACK_INCLUDE_TOPLEVEL_DIRECTORY 1 ) + set( CPACK_PACKAGE_RELEASE 1 ) + + + # RPM - https://cmake.org/cmake/help/latest/cpack_gen/rpm.html + set( CPACK_RPM_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE} ) + set( CPACK_RPM_PACKAGE_ARCHITECTURE ${CPACK_PACKAGE_ARCHITECTURE} ) + set( CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION_SUMMARY} ) + set( CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_HOMEPAGE_URL} ) + set( CPACK_RPM_PACKAGE_LICENSE "MIT" ) + set( CPACK_RPM_COMPONENT_INSTALL 1 ) + set( CPACK_RPM_COMPRESSION_TYPE "xz" ) + set( CPACK_RPM_PACKAGE_AUTOPROV 1 ) + + set( CPACK_RPM_Library_PACKAGE_SUMMARY ${CPACK_COMPONENT_Library_DESCRIPTION} ) + set( CPACK_RPM_Library_PACKAGE_ARCHITECTURE ${CPACK_RPM_PACKAGE_ARCHITECTURE} ) + set( CPACK_RPM_Library_PACKAGE_NAME "libcares${CARES_LIB_VERSION_MAJOR}" ) + set( CPACK_RPM_Library_FILE_NAME "RPM-DEFAULT" ) + + set( CPACK_RPM_Devel_PACKAGE_REQUIRES "cmake >= ${CMAKE_MINIMUM_REQUIRED_VERSION}, ${CPACK_RPM_Library_PACKAGE_NAME} >= ${CPACK_PACKAGE_VERSION}" ) + set( CPACK_RPM_Devel_PACKAGE_SUMMARY ${CPACK_COMPONENT_Devel_DESCRIPTION} ) + set( CPACK_RPM_Devel_PACKAGE_ARCHITECTURE ${CPACK_RPM_PACKAGE_ARCHITECTURE} ) + set( CPACK_RPM_Devel_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-devel" ) + set( CPACK_RPM_Devel_FILE_NAME "RPM-DEFAULT" ) + + IF (CARES_BUILD_TOOLS) + set( CPACK_RPM_Tools_PACKAGE_REQUIRES "${CPACK_RPM_Library_PACKAGE_NAME} >= ${CPACK_PACKAGE_VERSION}" ) + set( CPACK_RPM_Tools_PACKAGE_SUMMARY ${CPACK_COMPONENT_Tools_DESCRIPTION} ) + set( CPACK_RPM_Tools_PACKAGE_ARCHITECTURE ${CPACK_RPM_PACKAGE_ARCHITECTURE} ) + set( CPACK_RPM_Tools_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-tools" ) + set( CPACK_RPM_Tools_FILE_NAME "RPM-DEFAULT" ) + ENDIF () + + + # DEB - https://cmake.org/cmake/help/latest/cpack_gen/deb.html + set( CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE} ) + set( CPACK_DEBIAN_PACKAGE_HOMEPAGE ${CPACK_PACKAGE_HOMEPAGE_URL} ) + set( CPACK_DEB_COMPONENT_INSTALL 1 ) + set( CPACK_DEBIAN_COMPRESSION_TYPE "xz") + set( CPACK_DEBIAN_PACKAGE_SHLIBDEPS 1 ) + + if ( ${CPACK_PACKAGE_ARCHITECTURE} STREQUAL "x86_64" ) + set( CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64" ) # DEB doesn't always use the kernel's arch name + else() + set( CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${CPACK_PACKAGE_ARCHITECTURE} ) + endif() + + set( CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT" ) # Use default naming scheme + + set( CPACK_DEBIAN_LIBRARY_PACKAGE_NAME ${CPACK_RPM_Library_PACKAGE_NAME} ) + + set( CPACK_DEBIAN_DEVEL_PACKAGE_DEPENDS "cmake (>= ${CMAKE_MINIMUM_REQUIRED_VERSION}), ${CPACK_DEBIAN_LIBRARY_PACKAGE_NAME} (>= ${CPACK_PACKAGE_VERSION})" ) + set( CPACK_DEBIAN_DEVEL_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-dev" ) + + IF (CARES_BUILD_TOOLS) + set( CPACK_DEBIAN_TOOLS_PACKAGE_NAME "${CPACK_PACKAGE_NAME}-tools" ) + set( CPACK_DEBIAN_TOOLS_PACKAGE_SHLIBDEPS OFF ) # dpkg-shlibdeps can't find the libs we built + set( CPACK_DEBIAN_TOOLS_PACKAGE_DEPENDS "${CPACK_DEBIAN_LIBRARY_PACKAGE_NAME} (>= ${CPACK_PACKAGE_VERSION})" ) + ENDIF () + + elseif( ${CMAKE_HOST_WIN32} ) + set( CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON ) + set( CPACK_NSIS_DISPLAY_NAME ${PROJECT_NAME} ) + set( CPACK_NSIS_PACKAGE_NAME ${PROJECT_NAME} ) + set( CPACK_NSIS_URL_INFO_ABOUT ${CPACK_PACKAGE_HOMEPAGE_URL} ) + endif() + + # This must always be last! + include( CPack ) +ENDIF () diff -Nru nodejs-mozilla-12.18.1/deps/cares/compile nodejs-mozilla-12.22.12/deps/cares/compile --- nodejs-mozilla-12.18.1/deps/cares/compile 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/compile 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,348 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1999-2021 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN* | MSYS*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/* | msys/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff -Nru nodejs-mozilla-12.18.1/deps/cares/config.guess nodejs-mozilla-12.22.12/deps/cares/config.guess --- nodejs-mozilla-12.18.1/deps/cares/config.guess 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/config.guess 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,1480 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2018 Free Software Foundation, Inc. + +timestamp='2018-02-24' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2018 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > "$dummy.c" ; + for c in cc gcc c89 c99 ; do + if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "$UNAME_SYSTEM" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval "$set_cc_for_build" + cat <<-EOF > "$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ + echo unknown)` + case "$UNAME_MACHINE_ARCH" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval "$set_cc_for_build" + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "$UNAME_VERSION" in + Debian*) + release='-gnu' + ;; + *) + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "$machine-${os}${release}${abi}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit ;; + *:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit ;; + *:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix"$UNAME_RELEASE" + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux"$UNAME_RELEASE" + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval "$set_cc_for_build" + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos"$UNAME_RELEASE" + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos"$UNAME_RELEASE" + ;; + sun4) + echo sparc-sun-sunos"$UNAME_RELEASE" + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos"$UNAME_RELEASE" + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint"$UNAME_RELEASE" + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint"$UNAME_RELEASE" + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint"$UNAME_RELEASE" + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten"$UNAME_RELEASE" + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten"$UNAME_RELEASE" + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix"$UNAME_RELEASE" + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix"$UNAME_RELEASE" + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix"$UNAME_RELEASE" + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos"$UNAME_RELEASE" + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + then + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] + then + echo m88k-dg-dgux"$UNAME_RELEASE" + else + echo m88k-dg-dguxbcs"$UNAME_RELEASE" + fi + else + echo i586-dg-dgux"$UNAME_RELEASE" + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "$HP_ARCH" = "" ]; then + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ "$HP_ARCH" = hppa2.0w ] + then + eval "$set_cc_for_build" + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" + exit ;; + 3050*:HI-UX:*:*) + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo "$UNAME_MACHINE"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit ;; + *:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit ;; + *:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit ;; + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + exit ;; + i*:PW*:*) + echo "$UNAME_MACHINE"-pc-pw32 + exit ;; + *:Interix*:*) + case "$UNAME_MACHINE" in + x86) + echo i586-pc-interix"$UNAME_RELEASE" + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix"$UNAME_RELEASE" + exit ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit ;; + esac ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + *:GNU:*:*) + # the GNU system + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" + exit ;; + i*86:Minix:*:*) + echo "$UNAME_MACHINE"-pc-minix + exit ;; + aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arm*:Linux:*:*) + eval "$set_cc_for_build" + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" + test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit ;; + sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit ;; + x86_64:Linux:*:*) + if objdump -f /bin/sh | grep -q elf32-x86-64; then + echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 + else + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + fi + exit ;; + xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo "$UNAME_MACHINE"-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo "$UNAME_MACHINE"-unknown-stop + exit ;; + i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo "$UNAME_MACHINE"-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos"$UNAME_RELEASE" + exit ;; + i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos"$UNAME_RELEASE" + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv"$UNAME_RELEASE" + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo "$UNAME_MACHINE"-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux"$UNAME_RELEASE" + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv"$UNAME_RELEASE" + else + echo mips-unknown-sysv"$UNAME_RELEASE" + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux"$UNAME_RELEASE" + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux"$UNAME_RELEASE" + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux"$UNAME_RELEASE" + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Rhapsody:*:*) + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval "$set_cc_for_build" + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit ;; + *:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "$UNAME_MACHINE" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" + exit ;; + i*86:rdos:*:*) + echo "$UNAME_MACHINE"-pc-rdos + exit ;; + i*86:AROS:*:*) + echo "$UNAME_MACHINE"-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; +esac + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff -Nru nodejs-mozilla-12.18.1/deps/cares/config.sub nodejs-mozilla-12.22.12/deps/cares/config.sub --- nodejs-mozilla-12.18.1/deps/cares/config.sub 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/config.sub 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,1801 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2018 Free Software Foundation, Inc. + +timestamp='2018-02-22' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2018 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo "$1" + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo "$1" | sed 's/-[^-]*$//'` + if [ "$basic_machine" != "$1" ] + then os=`echo "$1" | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | wasm32 \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ + | pyramid-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | wasm32-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-pc + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2*) + basic_machine=m68k-bull + os=-sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + x64) + basic_machine=x86_64-pc + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases that might get confused + # with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # es1800 is here to avoid being matched by es* (a different OS) + -es1800*) + os=-ose + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ + | -midnightbsd*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -xray | -os68k* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4*) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; + -nacl*) + ;; + -ios) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + pru-*) + os=-elf + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` + ;; +esac + +echo "$basic_machine$os" +exit + +# Local variables: +# eval: (add-hook 'write-file-functions 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff -Nru nodejs-mozilla-12.18.1/deps/cares/configure nodejs-mozilla-12.22.12/deps/cares/configure --- nodejs-mozilla-12.18.1/deps/cares/configure 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/configure 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,36935 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.71 for c-ares 1.18.1. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +## -------------------------------- ## +## XC_CONFIGURE_PREAMBLE ver: 1.0 ## +## -------------------------------- ## + +xc_configure_preamble_ver_major='1' +xc_configure_preamble_ver_minor='0' + +# +# Set IFS to space, tab and newline. +# + +xc_space=' ' +xc_tab=' ' +xc_newline=' +' +IFS="$xc_space$xc_tab$xc_newline" + +# +# Set internationalization behavior variables. +# + +LANG='C' +LC_ALL='C' +LANGUAGE='C' +export LANG +export LC_ALL +export LANGUAGE + +# +# Some useful variables. +# + +xc_msg_warn='configure: WARNING:' +xc_msg_abrt='Can not continue.' +xc_msg_err='configure: error:' + +# +# Verify that 'echo' command is available, otherwise abort. +# + +xc_tst_str='unknown' +(`echo "$xc_tst_str" >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in # (( + xsuccess) + : + ;; + *) + # Try built-in echo, and fail. + echo "$xc_msg_err 'echo' command not found. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Verify that 'test' command is available, otherwise abort. +# + +xc_tst_str='unknown' +(`test -n "$xc_tst_str" >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in # (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'test' command not found. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Verify that 'PATH' variable is set, otherwise abort. +# + +xc_tst_str='unknown' +(`test -n "$PATH" >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in # (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'PATH' variable not set. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Verify that 'expr' command is available, otherwise abort. +# + +xc_tst_str='unknown' +xc_tst_str=`expr "$xc_tst_str" : '.*' 2>/dev/null` +case "x$xc_tst_str" in # (( + x7) + : + ;; + *) + echo "$xc_msg_err 'expr' command not found. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Verify that 'sed' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str='unknown' +xc_tst_str=`echo "$xc_tst_str" 2>/dev/null \ + | sed -e 's:unknown:success:' 2>/dev/null` +case "x$xc_tst_str" in # (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'sed' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Verify that 'grep' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str='unknown' +(`echo "$xc_tst_str" 2>/dev/null \ + | grep 'unknown' >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in # (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'grep' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Verify that 'tr' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str="${xc_tab}98s7u6c5c4e3s2s10" +xc_tst_str=`echo "$xc_tst_str" 2>/dev/null \ + | tr -d "0123456789$xc_tab" 2>/dev/null` +case "x$xc_tst_str" in # (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'tr' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Verify that 'wc' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str='unknown unknown unknown unknown' +xc_tst_str=`echo "$xc_tst_str" 2>/dev/null \ + | wc -w 2>/dev/null | tr -d "$xc_space$xc_tab" 2>/dev/null` +case "x$xc_tst_str" in # (( + x4) + : + ;; + *) + echo "$xc_msg_err 'wc' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Verify that 'cat' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str='unknown' +xc_tst_str=`cat <<_EOT 2>/dev/null \ + | wc -l 2>/dev/null | tr -d "$xc_space$xc_tab" 2>/dev/null +unknown +unknown +unknown +_EOT` +case "x$xc_tst_str" in # (( + x3) + : + ;; + *) + echo "$xc_msg_err 'cat' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac + +# +# Auto-detect and set 'PATH_SEPARATOR', unless it is already non-empty set. +# + +# Directory count in 'PATH' when using a colon separator. +xc_tst_dirs_col='x' +xc_tst_prev_IFS=$IFS; IFS=':' +for xc_tst_dir in $PATH; do + IFS=$xc_tst_prev_IFS + xc_tst_dirs_col="x$xc_tst_dirs_col" +done +IFS=$xc_tst_prev_IFS +xc_tst_dirs_col=`expr "$xc_tst_dirs_col" : '.*'` + +# Directory count in 'PATH' when using a semicolon separator. +xc_tst_dirs_sem='x' +xc_tst_prev_IFS=$IFS; IFS=';' +for xc_tst_dir in $PATH; do + IFS=$xc_tst_prev_IFS + xc_tst_dirs_sem="x$xc_tst_dirs_sem" +done +IFS=$xc_tst_prev_IFS +xc_tst_dirs_sem=`expr "$xc_tst_dirs_sem" : '.*'` + +if test $xc_tst_dirs_sem -eq $xc_tst_dirs_col; then + # When both counting methods give the same result we do not want to + # chose one over the other, and consider auto-detection not possible. + if test -z "$PATH_SEPARATOR"; then + # Stop dead until user provides 'PATH_SEPARATOR' definition. + echo "$xc_msg_err 'PATH_SEPARATOR' variable not set. $xc_msg_abrt" >&2 + exit 1 + fi +else + # Separator with the greater directory count is the auto-detected one. + if test $xc_tst_dirs_sem -gt $xc_tst_dirs_col; then + xc_tst_auto_separator=';' + else + xc_tst_auto_separator=':' + fi + if test -z "$PATH_SEPARATOR"; then + # Simply use the auto-detected one when not already set. + PATH_SEPARATOR=$xc_tst_auto_separator + elif test "x$PATH_SEPARATOR" != "x$xc_tst_auto_separator"; then + echo "$xc_msg_warn 'PATH_SEPARATOR' does not match auto-detected one." >&2 + fi +fi +xc_PATH_SEPARATOR=$PATH_SEPARATOR + +xc_configure_preamble_result='yes' + + +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else $as_nop + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. +as_nl=' +' +export as_nl +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + + + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else \$as_nop + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : + +else \$as_nop + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + if (eval "$as_required") 2>/dev/null +then : + as_have_required=yes +else $as_nop + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : + +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$as_shell as_have_required=yes + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : + break 2 +fi +fi + done;; + esac + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi + + + if test "x$CONFIG_SHELL" != x +then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." + else + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and c-ares mailing +$0: list: http://lists.haxx.se/listinfo/c-ares about your +$0: system, including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else $as_nop + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else $as_nop + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + printf "%s\n" "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='c-ares' +PACKAGE_TARNAME='c-ares' +PACKAGE_VERSION='1.18.1' +PACKAGE_STRING='c-ares 1.18.1' +PACKAGE_BUGREPORT='c-ares mailing list: http://lists.haxx.se/listinfo/c-ares' +PACKAGE_URL='' + +ac_unique_file="src/lib/ares_ipv6.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_STDIO_H +# include +#endif +#ifdef HAVE_STDLIB_H +# include +#endif +#ifdef HAVE_STRING_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_header_c_list= +enable_option_checking=no +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +BUILD_SUBDIRS +subdirs +CARES_CFLAG_EXTRAS +CARES_PRIVATE_LIBS +CFLAG_CARES_SYMBOL_HIDING +DOING_CARES_SYMBOL_HIDING_FALSE +DOING_CARES_SYMBOL_HIDING_TRUE +CARES_RANDOM_FILE +DOING_NATIVE_WINDOWS_FALSE +DOING_NATIVE_WINDOWS_TRUE +CPPFLAG_CARES_STATICLIB +USE_CPPFLAG_CARES_STATICLIB_FALSE +USE_CPPFLAG_CARES_STATICLIB_TRUE +CARES_LT_SHLIB_USE_MIMPURE_TEXT_FALSE +CARES_LT_SHLIB_USE_MIMPURE_TEXT_TRUE +CARES_LT_SHLIB_USE_NO_UNDEFINED_FALSE +CARES_LT_SHLIB_USE_NO_UNDEFINED_TRUE +CARES_LT_SHLIB_USE_VERSION_INFO_FALSE +CARES_LT_SHLIB_USE_VERSION_INFO_TRUE +CXXCPP +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +LIBTOOL +OBJDUMP +DLLTOOL +AS +CSCOPE +ETAGS +CTAGS +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__include +DEPDIR +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +HAVE_CXX11 +ac_ct_CXX +CXXFLAGS +CXX +CPP +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +CODE_COVERAGE_LIBS +CODE_COVERAGE_CXXFLAGS +CODE_COVERAGE_CFLAGS +CODE_COVERAGE_CPPFLAGS +GENHTML +LCOV +GCOV +ifnGNUmake +ifGNUmake +AWK +CODE_COVERAGE_ENABLED +CODE_COVERAGE_ENABLED_FALSE +CODE_COVERAGE_ENABLED_TRUE +AR +EGREP +GREP +SED +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +CARES_VERSION_INFO +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +SHELL +PATH_SEPARATOR +am__quote' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +enable_silent_rules +enable_debug +enable_optimize +enable_warnings +enable_werror +enable_symbol_hiding +enable_expose_statics +with_gcov +enable_code_coverage +enable_dependency_tracking +enable_largefile +enable_shared +enable_static +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_libgcc +with_random +enable_nonblocking +enable_tests +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +CXX +CXXFLAGS +CCC +LT_SYS_LIBRARY_PATH +CXXCPP' +ac_subdirs_all='test' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: \`$ac_useropt'" + ac_useropt_orig=$ac_useropt + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: \`$ac_useropt'" + ac_useropt_orig=$ac_useropt + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: \`$ac_useropt'" + ac_useropt_orig=$ac_useropt + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: \`$ac_useropt'" + ac_useropt_orig=$ac_useropt + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures c-ares 1.18.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/c-ares] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of c-ares 1.18.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-debug Enable debug build options + --disable-debug Disable debug build options + --enable-optimize(=OPT) Enable compiler optimizations (default=-O2) + --disable-optimize Disable compiler optimizations + --enable-warnings Enable strict compiler warnings + --disable-warnings Disable strict compiler warnings + --enable-werror Enable compiler warnings as errors + --disable-werror Disable compiler warnings as errors + --enable-symbol-hiding Enable hiding of library internal symbols + --disable-symbol-hiding Disable hiding of library internal symbols + --enable-expose-statics Enable exposure of internal static functions for + testing + --disable-expose-statics + Disable exposure of internal static functions for + testing + --enable-code-coverage Whether to enable code coverage support + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-largefile omit support for large files + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-libgcc use libgcc when linking + --enable-nonblocking Enable non-blocking communications + --disable-nonblocking Disable non-blocking communications + --enable-tests build test suite + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gcov=GCOV use given GCOV for coverage (GCOV=gcov). + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + --with-random=FILE read randomness from FILE (default=/dev/urandom) + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + CXXCPP C++ preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +c-ares configure 1.18.1 +generated by GNU Autoconf 2.71 + +Copyright (C) 2021 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest.beam + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest.beam + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. */ + +#include +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main (void) +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR +# ------------------------------------------------------------------ +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. +ac_fn_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +printf %s "checking whether $as_decl_name is declared... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + eval ac_save_FLAGS=\$$6 + as_fn_append $6 " $5" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + eval $6=\$ac_save_FLAGS + +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_check_decl + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +printf %s "checking for $2.$3... " >&6; } +if eval test \${$4+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main (void) +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + eval "$4=yes" +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main (void) +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + eval "$4=yes" +else $as_nop + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +eval ac_res=\$$4 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by c-ares $as_me 1.18.1, which was +generated by GNU Autoconf 2.71. Invocation command line was + + $ $0$ac_configure_args_raw + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" + # Save into config.log some information that might help in debugging. + { + echo + + printf "%s\n" "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + printf "%s\n" "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + printf "%s\n" "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + printf "%s\n" "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + printf "%s\n" "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + printf "%s\n" "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +printf "%s\n" "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + ac_site_files="$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" +else + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" +fi + +for ac_site_file in $ac_site_files +do + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif + +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +# Test code for whether the C++ compiler supports C++98 (global declarations) +ac_cxx_conftest_cxx98_globals=' +// Does the compiler advertise C++98 conformance? +#if !defined __cplusplus || __cplusplus < 199711L +# error "Compiler does not advertise C++98 conformance" +#endif + +// These inclusions are to reject old compilers that +// lack the unsuffixed header files. +#include +#include + +// and are *not* freestanding headers in C++98. +extern void assert (int); +namespace std { + extern int strcmp (const char *, const char *); +} + +// Namespaces, exceptions, and templates were all added after "C++ 2.0". +using std::exception; +using std::strcmp; + +namespace { + +void test_exception_syntax() +{ + try { + throw "test"; + } catch (const char *s) { + // Extra parentheses suppress a warning when building autoconf itself, + // due to lint rules shared with more typical C programs. + assert (!(strcmp) (s, "test")); + } +} + +template struct test_template +{ + T const val; + explicit test_template(T t) : val(t) {} + template T add(U u) { return static_cast(u) + val; } +}; + +} // anonymous namespace +' + +# Test code for whether the C++ compiler supports C++98 (body of main) +ac_cxx_conftest_cxx98_main=' + assert (argc); + assert (! argv[0]); +{ + test_exception_syntax (); + test_template tt (2.0); + assert (tt.add (4) == 6.0); + assert (true && !false); +} +' + +# Test code for whether the C++ compiler supports C++11 (global declarations) +ac_cxx_conftest_cxx11_globals=' +// Does the compiler advertise C++ 2011 conformance? +#if !defined __cplusplus || __cplusplus < 201103L +# error "Compiler does not advertise C++11 conformance" +#endif + +namespace cxx11test +{ + constexpr int get_val() { return 20; } + + struct testinit + { + int i; + double d; + }; + + class delegate + { + public: + delegate(int n) : n(n) {} + delegate(): delegate(2354) {} + + virtual int getval() { return this->n; }; + protected: + int n; + }; + + class overridden : public delegate + { + public: + overridden(int n): delegate(n) {} + virtual int getval() override final { return this->n * 2; } + }; + + class nocopy + { + public: + nocopy(int i): i(i) {} + nocopy() = default; + nocopy(const nocopy&) = delete; + nocopy & operator=(const nocopy&) = delete; + private: + int i; + }; + + // for testing lambda expressions + template Ret eval(Fn f, Ret v) + { + return f(v); + } + + // for testing variadic templates and trailing return types + template auto sum(V first) -> V + { + return first; + } + template auto sum(V first, Args... rest) -> V + { + return first + sum(rest...); + } +} +' + +# Test code for whether the C++ compiler supports C++11 (body of main) +ac_cxx_conftest_cxx11_main=' +{ + // Test auto and decltype + auto a1 = 6538; + auto a2 = 48573953.4; + auto a3 = "String literal"; + + int total = 0; + for (auto i = a3; *i; ++i) { total += *i; } + + decltype(a2) a4 = 34895.034; +} +{ + // Test constexpr + short sa[cxx11test::get_val()] = { 0 }; +} +{ + // Test initializer lists + cxx11test::testinit il = { 4323, 435234.23544 }; +} +{ + // Test range-based for + int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, + 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; + for (auto &x : array) { x += 23; } +} +{ + // Test lambda expressions + using cxx11test::eval; + assert (eval ([](int x) { return x*2; }, 21) == 42); + double d = 2.0; + assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); + assert (d == 5.0); + assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); + assert (d == 5.0); +} +{ + // Test use of variadic templates + using cxx11test::sum; + auto a = sum(1); + auto b = sum(1, 2); + auto c = sum(1.0, 2.0, 3.0); +} +{ + // Test constructor delegation + cxx11test::delegate d1; + cxx11test::delegate d2(); + cxx11test::delegate d3(45); +} +{ + // Test override and final + cxx11test::overridden o1(55464); +} +{ + // Test nullptr + char *c = nullptr; +} +{ + // Test template brackets + test_template<::test_template> v(test_template(12)); +} +{ + // Unicode literals + char const *utf8 = u8"UTF-8 string \u2500"; + char16_t const *utf16 = u"UTF-8 string \u2500"; + char32_t const *utf32 = U"UTF-32 string \u2500"; +} +' + +# Test code for whether the C compiler supports C++11 (complete). +ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} +${ac_cxx_conftest_cxx11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + ${ac_cxx_conftest_cxx11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C++98 (complete). +ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_cxx_conftest_cxx98_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" +as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" + +# Auxiliary files required by this configure script. +ac_aux_files="ltmain.sh missing compile install-sh config.guess config.sub" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +CARES_VERSION_INFO="7:1:5" + + + +ac_config_headers="$ac_config_headers src/lib/ares_config.h include/ares_build.h" + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +printf %s "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test ${enable_maintainer_mode+y} +then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else $as_nop + USE_MAINTAINER_MODE=no +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +printf "%s\n" "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + +# Check whether --enable-silent-rules was given. +if test ${enable_silent_rules+y} +then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +printf %s "checking whether $am_make supports nested variables... " >&6; } +if test ${am_cv_make_support_nested_variables+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if printf "%s\n" 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable debug build options" >&5 +printf %s "checking whether to enable debug build options... " >&6; } + OPT_DEBUG_BUILD="default" + # Check whether --enable-debug was given. +if test ${enable_debug+y} +then : + enableval=$enable_debug; OPT_DEBUG_BUILD=$enableval +fi + + case "$OPT_DEBUG_BUILD" in + no) + want_debug="no" + ;; + default) + want_debug="no" + ;; + *) + want_debug="yes" + ;; + esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $want_debug" >&5 +printf "%s\n" "$want_debug" >&6; } + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable compiler optimizer" >&5 +printf %s "checking whether to enable compiler optimizer... " >&6; } + OPT_COMPILER_OPTIMIZE="default" + # Check whether --enable-optimize was given. +if test ${enable_optimize+y} +then : + enableval=$enable_optimize; OPT_COMPILER_OPTIMIZE=$enableval +fi + + case "$OPT_COMPILER_OPTIMIZE" in + no) + want_optimize="no" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + default) + if test "$want_debug" = "yes"; then + want_optimize="assume_no" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not specified (assuming no)" >&5 +printf "%s\n" "not specified (assuming no)" >&6; } + else + want_optimize="assume_yes" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not specified (assuming yes)" >&5 +printf "%s\n" "not specified (assuming yes)" >&6; } + fi + ;; + *) + want_optimize="yes" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable strict compiler warnings" >&5 +printf %s "checking whether to enable strict compiler warnings... " >&6; } + OPT_COMPILER_WARNINGS="default" + # Check whether --enable-warnings was given. +if test ${enable_warnings+y} +then : + enableval=$enable_warnings; OPT_COMPILER_WARNINGS=$enableval +fi + + case "$OPT_COMPILER_WARNINGS" in + no) + want_warnings="no" + ;; + default) + want_warnings="$want_debug" + ;; + *) + want_warnings="yes" + ;; + esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $want_warnings" >&5 +printf "%s\n" "$want_warnings" >&6; } + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable compiler warnings as errors" >&5 +printf %s "checking whether to enable compiler warnings as errors... " >&6; } + OPT_COMPILER_WERROR="default" + # Check whether --enable-werror was given. +if test ${enable_werror+y} +then : + enableval=$enable_werror; OPT_COMPILER_WERROR=$enableval +fi + + case "$OPT_COMPILER_WERROR" in + no) + want_werror="no" + ;; + default) + want_werror="no" + ;; + *) + want_werror="yes" + ;; + esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $want_werror" >&5 +printf "%s\n" "$want_werror" >&6; } + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable hiding of library internal symbols" >&5 +printf %s "checking whether to enable hiding of library internal symbols... " >&6; } + OPT_SYMBOL_HIDING="default" + # Check whether --enable-symbol-hiding was given. +if test ${enable_symbol_hiding+y} +then : + enableval=$enable_symbol_hiding; OPT_SYMBOL_HIDING=$enableval +fi + + case "$OPT_SYMBOL_HIDING" in + no) + want_symbol_hiding="no" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + default) + want_symbol_hiding="yes" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ;; + *) + want_symbol_hiding="yes" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to expose internal static functions for testing" >&5 +printf %s "checking whether to expose internal static functions for testing... " >&6; } + OPT_EXPOSE_STATICS="default" + # Check whether --enable-expose-statics was given. +if test ${enable_expose_statics+y} +then : + enableval=$enable_expose_statics; OPT_EXPOSE_STATICS=$enableval +fi + + case "$OPT_EXPOSE_STATICS" in + no) + want_expose_statics="no" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + default) + want_expose_statics="no" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + *) + want_expose_statics="yes" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ;; + esac + if test "$want_expose_statics" = "yes"; then + +printf "%s\n" "#define CARES_EXPOSE_STATICS 1" >>confdefs.h + + fi + + +# +# Check that 'XC_CONFIGURE_PREAMBLE' has already run. +# + +if test -z "$xc_configure_preamble_result"; then + as_fn_error $? "xc_configure_preamble_result not set (internal problem)" "$LINENO" 5 +fi + +# +# Check that 'PATH_SEPARATOR' has already been set. +# + +if test -z "$xc_PATH_SEPARATOR"; then + as_fn_error $? "xc_PATH_SEPARATOR not set (internal problem)" "$LINENO" 5 +fi +if test -z "$PATH_SEPARATOR"; then + as_fn_error $? "PATH_SEPARATOR not set (internal or config.site problem)" "$LINENO" 5 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for path separator" >&5 +printf %s "checking for path separator... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PATH_SEPARATOR" >&5 +printf "%s\n" "$PATH_SEPARATOR" >&6; } +if test "x$PATH_SEPARATOR" != "x$xc_PATH_SEPARATOR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for initial path separator" >&5 +printf %s "checking for initial path separator... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xc_PATH_SEPARATOR" >&5 +printf "%s\n" "$xc_PATH_SEPARATOR" >&6; } + as_fn_error $? "path separator mismatch (internal or config.site problem)" "$LINENO" 5 +fi + + +# Extract the first word of "sed", so it can be a program name with args. +set dummy sed; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $SED in + [\\/]* | ?:[\\/]*) + ac_cv_path_SED="$SED" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$PATH:/usr/bin:/usr/local/bin" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_SED="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_SED" && ac_cv_path_SED="not_found" + ;; +esac +fi +SED=$ac_cv_path_SED +if test -n "$SED"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 +printf "%s\n" "$SED" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +if test -z "$SED" || test "$SED" = "not_found"; then + as_fn_error $? "sed not found in PATH. Cannot continue without sed." "$LINENO" 5 +fi + + +# Extract the first word of "grep", so it can be a program name with args. +set dummy grep; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $GREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_GREP="$GREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$PATH:/usr/bin:/usr/local/bin" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_GREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GREP" && ac_cv_path_GREP="not_found" + ;; +esac +fi +GREP=$ac_cv_path_GREP +if test -n "$GREP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GREP" >&5 +printf "%s\n" "$GREP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +if test -z "$GREP" || test "$GREP" = "not_found"; then + as_fn_error $? "grep not found in PATH. Cannot continue without grep." "$LINENO" 5 +fi + + +if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } + EGREP="$GREP -E" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $EGREP" >&5 +printf "%s\n" "$EGREP" >&6; } +else + # Extract the first word of "egrep", so it can be a program name with args. +set dummy egrep; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $EGREP in + [\\/]* | ?:[\\/]*) + ac_cv_path_EGREP="$EGREP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$PATH:/usr/bin:/usr/local/bin" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_EGREP="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_EGREP" && ac_cv_path_EGREP="not_found" + ;; +esac +fi +EGREP=$ac_cv_path_EGREP +if test -n "$EGREP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $EGREP" >&5 +printf "%s\n" "$EGREP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$EGREP" || test "$EGREP" = "not_found"; then + as_fn_error $? "egrep not found in PATH. Cannot continue without egrep." "$LINENO" 5 +fi + + +if test -z "$AR"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $AR in + [\\/]* | ?:[\\/]*) + ac_cv_path_AR="$AR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$PATH:/usr/bin:/usr/local/bin" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_AR="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +AR=$ac_cv_path_AR +if test -n "$AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_AR"; then + ac_pt_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_AR in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_AR="$ac_pt_AR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$PATH:/usr/bin:/usr/local/bin" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_AR="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_AR=$ac_cv_path_ac_pt_AR +if test -n "$ac_pt_AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_AR" >&5 +printf "%s\n" "$ac_pt_AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_AR" = x; then + AR="not_found" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_pt_AR + fi +else + AR="$ac_cv_path_AR" +fi + + if test -z "$AR" || test "$AR" = "not_found"; then + as_fn_error $? "ar not found in PATH. Cannot continue without ar." "$LINENO" 5 + fi +fi + + + + + + + + + + + + + + + + + # allow to override gcov location + +# Check whether --with-gcov was given. +if test ${with_gcov+y} +then : + withval=$with_gcov; _AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov +else $as_nop + _AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov +fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build with code coverage support" >&5 +printf %s "checking whether to build with code coverage support... " >&6; } + # Check whether --enable-code-coverage was given. +if test ${enable_code_coverage+y} +then : + enableval=$enable_code_coverage; +else $as_nop + enable_code_coverage=no +fi + + + if test "x$enable_code_coverage" = xyes; then + CODE_COVERAGE_ENABLED_TRUE= + CODE_COVERAGE_ENABLED_FALSE='#' +else + CODE_COVERAGE_ENABLED_TRUE='#' + CODE_COVERAGE_ENABLED_FALSE= +fi + + CODE_COVERAGE_ENABLED=$enable_code_coverage + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_code_coverage" >&5 +printf "%s\n" "$enable_code_coverage" >&6; } + + if test "x$enable_code_coverage" = xyes +then : + + + for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AWK+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +printf "%s\n" "$AWK" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$AWK" && break +done + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU make" >&5 +printf %s "checking for GNU make... " >&6; } +if test ${_cv_gnu_make_command+y} +then : + printf %s "(cached) " >&6 +else $as_nop + _cv_gnu_make_command="" ; + for a in "$MAKE" make gmake gnumake ; do + if test -z "$a" ; then continue ; fi ; + if "$a" --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then + _cv_gnu_make_command=$a ; + AX_CHECK_GNU_MAKE_HEADLINE=$("$a" --version 2> /dev/null | grep "GNU Make") + ax_check_gnu_make_version=$(echo ${AX_CHECK_GNU_MAKE_HEADLINE} | ${AWK} -F " " '{ print $(NF); }') + break ; + fi + done ; +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $_cv_gnu_make_command" >&5 +printf "%s\n" "$_cv_gnu_make_command" >&6; } + if test "x$_cv_gnu_make_command" = x"" +then : + ifGNUmake="#" +else $as_nop + ifGNUmake="" +fi + if test "x$_cv_gnu_make_command" = x"" +then : + ifnGNUmake="" +else $as_nop + ifnGNUmake="#" +fi + if test "x$_cv_gnu_make_command" = x"" +then : + { ax_cv_gnu_make_command=; unset ax_cv_gnu_make_command;} +else $as_nop + ax_cv_gnu_make_command=${_cv_gnu_make_command} +fi + if test "x$_cv_gnu_make_command" = x"" +then : + as_fn_error $? "not using GNU make that is needed for coverage" "$LINENO" 5 +fi + + + + + # check for gcov + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args. +set dummy ${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_GCOV+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$GCOV"; then + ac_cv_prog_GCOV="$GCOV" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_GCOV="${ac_tool_prefix}$_AX_CODE_COVERAGE_GCOV_PROG_WITH" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GCOV=$ac_cv_prog_GCOV +if test -n "$GCOV"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5 +printf "%s\n" "$GCOV" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_GCOV"; then + ac_ct_GCOV=$GCOV + # Extract the first word of "$_AX_CODE_COVERAGE_GCOV_PROG_WITH", so it can be a program name with args. +set dummy $_AX_CODE_COVERAGE_GCOV_PROG_WITH; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_GCOV+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_GCOV"; then + ac_cv_prog_ac_ct_GCOV="$ac_ct_GCOV" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_GCOV="$_AX_CODE_COVERAGE_GCOV_PROG_WITH" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_GCOV=$ac_cv_prog_ac_ct_GCOV +if test -n "$ac_ct_GCOV"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GCOV" >&5 +printf "%s\n" "$ac_ct_GCOV" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_GCOV" = x; then + GCOV=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + GCOV=$ac_ct_GCOV + fi +else + GCOV="$ac_cv_prog_GCOV" +fi + + if test "X$GCOV" = "X:" +then : + as_fn_error $? "gcov is needed to do coverage" "$LINENO" 5 +fi + + + if test "$GCC" = "no" +then : + + as_fn_error $? "not compiling with gcc, which is required for gcov code coverage" "$LINENO" 5 + +fi + + # Extract the first word of "lcov", so it can be a program name with args. +set dummy lcov; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LCOV+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$LCOV"; then + ac_cv_prog_LCOV="$LCOV" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_LCOV="lcov" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LCOV=$ac_cv_prog_LCOV +if test -n "$LCOV"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LCOV" >&5 +printf "%s\n" "$LCOV" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + # Extract the first word of "genhtml", so it can be a program name with args. +set dummy genhtml; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_GENHTML+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$GENHTML"; then + ac_cv_prog_GENHTML="$GENHTML" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_GENHTML="genhtml" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GENHTML=$ac_cv_prog_GENHTML +if test -n "$GENHTML"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GENHTML" >&5 +printf "%s\n" "$GENHTML" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + + if test x"$LCOV" = x +then : + + as_fn_error $? "To enable code coverage reporting you must have lcov installed" "$LINENO" 5 + +fi + + if test x"$GENHTML" = x +then : + + as_fn_error $? "Could not find genhtml from the lcov package" "$LINENO" 5 + +fi + + CODE_COVERAGE_CPPFLAGS="-DNDEBUG" + CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" + CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" + CODE_COVERAGE_LIBS="-lgcov" + + + + + + + +fi + + + + + + + + + + + + + + + + + + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +printf "%s\n" "#define OS \"${host}\"" >>confdefs.h + + + + xc_prog_cc_prev_IFS=$IFS + xc_prog_cc_prev_LIBS=$LIBS + xc_prog_cc_prev_CFLAGS=$CFLAGS + xc_prog_cc_prev_LDFLAGS=$LDFLAGS + xc_prog_cc_prev_CPPFLAGS=$CPPFLAGS + + + + xc_bad_var_libs=no + for xc_word in $LIBS; do + case "$xc_word" in + -l* | --library=*) + : + ;; + *) + xc_bad_var_libs=yes + ;; + esac + done + if test $xc_bad_var_libs = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using LIBS: $LIBS" >&5 +printf "%s\n" "$as_me: using LIBS: $LIBS" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: LIBS error: LIBS may only be used to specify libraries (-lname)." >&5 +printf "%s\n" "$as_me: LIBS error: LIBS may only be used to specify libraries (-lname)." >&6;} + fi + + + xc_bad_var_ldflags=no + for xc_word in $LDFLAGS; do + case "$xc_word" in + -D*) + xc_bad_var_ldflags=yes + ;; + -U*) + xc_bad_var_ldflags=yes + ;; + -I*) + xc_bad_var_ldflags=yes + ;; + -l* | --library=*) + xc_bad_var_ldflags=yes + ;; + esac + done + if test $xc_bad_var_ldflags = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using LDFLAGS: $LDFLAGS" >&5 +printf "%s\n" "$as_me: using LDFLAGS: $LDFLAGS" >&6;} + xc_bad_var_msg="LDFLAGS error: LDFLAGS may only be used to specify linker flags, not" + for xc_word in $LDFLAGS; do + case "$xc_word" in + -D*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -U*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -I*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -l* | --library=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&6;} + ;; + esac + done + fi + + + xc_bad_var_cppflags=no + for xc_word in $CPPFLAGS; do + case "$xc_word" in + -rpath*) + xc_bad_var_cppflags=yes + ;; + -L* | --library-path=*) + xc_bad_var_cppflags=yes + ;; + -l* | --library=*) + xc_bad_var_cppflags=yes + ;; + esac + done + if test $xc_bad_var_cppflags = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using CPPFLAGS: $CPPFLAGS" >&5 +printf "%s\n" "$as_me: using CPPFLAGS: $CPPFLAGS" >&6;} + xc_bad_var_msg="CPPFLAGS error: CPPFLAGS may only be used to specify C preprocessor flags, not" + for xc_word in $CPPFLAGS; do + case "$xc_word" in + -rpath*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word" >&6;} + ;; + -L* | --library-path=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word" >&6;} + ;; + -l* | --library=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&6;} + ;; + esac + done + fi + + + xc_bad_var_cflags=no + for xc_word in $CFLAGS; do + case "$xc_word" in + -D*) + xc_bad_var_cflags=yes + ;; + -U*) + xc_bad_var_cflags=yes + ;; + -I*) + xc_bad_var_cflags=yes + ;; + -rpath*) + xc_bad_var_cflags=yes + ;; + -L* | --library-path=*) + xc_bad_var_cflags=yes + ;; + -l* | --library=*) + xc_bad_var_cflags=yes + ;; + esac + done + if test $xc_bad_var_cflags = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using CFLAGS: $CFLAGS" >&5 +printf "%s\n" "$as_me: using CFLAGS: $CFLAGS" >&6;} + xc_bad_var_msg="CFLAGS error: CFLAGS may only be used to specify C compiler flags, not" + for xc_word in $CFLAGS; do + case "$xc_word" in + -D*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -U*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -I*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -rpath*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word" >&6;} + ;; + -L* | --library-path=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word" >&6;} + ;; + -l* | --library=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&6;} + ;; + esac + done + fi + + if test $xc_bad_var_libs = yes || + test $xc_bad_var_cflags = yes || + test $xc_bad_var_ldflags = yes || + test $xc_bad_var_cppflags = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Continuing even with errors mentioned immediately above this line." >&5 +printf "%s\n" "$as_me: WARNING: Continuing even with errors mentioned immediately above this line." >&2;} + fi + + + # Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test ${ac_cv_path_install+y}; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + + + + + + + + + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion -version; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else $as_nop + ac_file='' +fi +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main (void) +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+y} +ac_save_CFLAGS=$CFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +else $as_nop + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +printf %s "checking whether $CC understands -c and -o together... " >&6; } +if test ${am_cv_prog_cc_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + IFS=$xc_prog_cc_prev_IFS + LIBS=$xc_prog_cc_prev_LIBS + CFLAGS=$xc_prog_cc_prev_CFLAGS + LDFLAGS=$xc_prog_cc_prev_LDFLAGS + CPPFLAGS=$xc_prog_cc_prev_CPPFLAGS + + + + + + + + + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +printf "%s\n" "$CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +printf "%s\n" "$ac_ct_CXX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 +printf %s "checking whether the compiler supports GNU C++... " >&6; } +if test ${ac_cv_cxx_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+y} +ac_save_CXXFLAGS=$CXXFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +printf %s "checking whether $CXX accepts -g... " >&6; } +if test ${ac_cv_prog_cxx_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +else $as_nop + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + +else $as_nop + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } +if test $ac_test_CXXFLAGS; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_prog_cxx_stdcxx=no +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 +printf %s "checking for $CXX option to enable C++11 features... " >&6; } +if test ${ac_cv_prog_cxx_11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_11=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx11_program +_ACEOF +for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx11" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx11" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 + ac_prog_cxx_stdcxx=cxx11 +fi +fi +if test x$ac_prog_cxx_stdcxx = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 +printf %s "checking for $CXX option to enable C++98 features... " >&6; } +if test ${ac_cv_prog_cxx_98+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cxx_98=no +ac_save_CXX=$CXX +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_cxx_conftest_cxx98_program +_ACEOF +for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA +do + CXX="$ac_save_CXX $ac_arg" + if ac_fn_cxx_try_compile "$LINENO" +then : + ac_cv_prog_cxx_cxx98=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cxx_cxx98" != "xno" && break +done +rm -f conftest.$ac_ext +CXX=$ac_save_CXX +fi + +if test "x$ac_cv_prog_cxx_cxx98" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cxx_cxx98" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 +printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } + CXX="$CXX $ac_cv_prog_cxx_cxx98" +fi + ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 + ac_prog_cxx_stdcxx=cxx98 +fi +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + + + ax_cxx_compile_cxx11_required=false + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + ac_success=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 +printf %s "checking whether $CXX supports C++11 features by default... " >&6; } +if test ${ax_cv_cxx_compile_cxx11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this + namespace test_template_alias_sfinae { + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { + func(0); + } + } + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + ax_cv_cxx_compile_cxx11=yes +else $as_nop + ax_cv_cxx_compile_cxx11=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 +printf "%s\n" "$ax_cv_cxx_compile_cxx11" >&6; } + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + + + if test x$ac_success = xno; then + for switch in -std=c++11 -std=c++0x; do + cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 +printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; } +if eval test \${$cachevar+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this + namespace test_template_alias_sfinae { + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { + func(0); + } + } + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO" +then : + eval $cachevar=yes +else $as_nop + eval $cachevar=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CXXFLAGS="$ac_save_CXXFLAGS" +fi +eval ac_res=\$$cachevar + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 + fi + else + if test x$ac_success = xno; then + HAVE_CXX11=0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 +printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;} + else + HAVE_CXX11=1 + +printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h + + fi + + + fi + + +am__api_version='1.16' + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +printf %s "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` + + + if test x"${MISSING+set}" != xset; then + MISSING="\${SHELL} '$am_aux_dir/missing'" +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 +printf %s "checking for a race-free mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test ${ac_cv_path_mkdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue + case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir ('*'coreutils) '* | \ + 'BusyBox '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test ${ac_cv_path_mkdir+y}; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +printf "%s\n" "$MKDIR_P" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval test \${ac_cv_prog_make_${ac_make}_set+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + SET_MAKE= +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' +am__doit: + @echo this is the am__doit target >confinc.out +.PHONY: am__doit +END +am__include="#" +am__quote= +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : + ;; +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +printf "%s\n" "${_am_result}" >&6; } + +# Check whether --enable-dependency-tracking was given. +if test ${enable_dependency_tracking+y} +then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + +## --------------------------------------- ## +## Start of automake initialization code ## +## --------------------------------------- ## + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='c-ares' + VERSION='1.18.1' + + +printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h + + +printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + +depcc="$CC" am_compiler_list= + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CC_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +depcc="$CXX" am_compiler_list= + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +printf %s "checking dependency style of $depcc... " >&6; } +if test ${am_cv_CXX_dependencies_compiler_type+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +# Variables for tags utilities; see am/tags.am +if test -z "$CTAGS"; then + CTAGS=ctags +fi + +if test -z "$ETAGS"; then + ETAGS=etags +fi + +if test -z "$CSCOPE"; then + CSCOPE=cscope +fi + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +## ------------------------------------- ## +## End of automake initialization code ## +## ------------------------------------- ## + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if OS is AIX (to define _ALL_SOURCE)" >&5 +printf %s "checking if OS is AIX (to define _ALL_SOURCE)... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _AIX + yes_this_is_aix +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes_this_is_aix" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h + + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -rf conftest* + + + + + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if _THREAD_SAFE is already defined" >&5 +printf %s "checking if _THREAD_SAFE is already defined... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + +#ifdef _THREAD_SAFE + int dummy=1; +#else + force compilation error +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tmp_thread_safe_initially_defined="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tmp_thread_safe_initially_defined="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + # + if test "$tmp_thread_safe_initially_defined" = "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if _THREAD_SAFE is actually needed" >&5 +printf %s "checking if _THREAD_SAFE is actually needed... " >&6; } + + case $host_os in + aix[123].* | aix4.[012].*) + tmp_need_thread_safe="no" + ;; + aix*) + tmp_need_thread_safe="yes" + ;; + *) + tmp_need_thread_safe="no" + ;; + esac + + if test "$tmp_need_thread_safe" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if _THREAD_SAFE is onwards defined" >&5 +printf %s "checking if _THREAD_SAFE is onwards defined... " >&6; } + if test "$tmp_thread_safe_initially_defined" = "yes" || + test "$tmp_need_thread_safe" = "yes"; then + + +printf "%s\n" "#define NEED_THREAD_SAFE 1" >>confdefs.h + +cat >>confdefs.h <<_EOF +#ifndef _THREAD_SAFE +# define _THREAD_SAFE +#endif +_EOF + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + # + + + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if _REENTRANT is already defined" >&5 +printf %s "checking if _REENTRANT is already defined... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + +#ifdef _REENTRANT + int dummy=1; +#else + force compilation error +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tmp_reentrant_initially_defined="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tmp_reentrant_initially_defined="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + # + if test "$tmp_reentrant_initially_defined" = "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if _REENTRANT is actually needed" >&5 +printf %s "checking if _REENTRANT is actually needed... " >&6; } + + case $host_os in + solaris*) + tmp_need_reentrant="yes" + ;; + *) + tmp_need_reentrant="no" + ;; + esac + + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include + +int +main (void) +{ + + if(0 != errno) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tmp_errno="yes" + +else $as_nop + + tmp_errno="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$tmp_errno" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include + +int +main (void) +{ + +#ifdef errno + int dummy=1; +#else + force compilation error +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tmp_errno="errno_macro_defined" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define _REENTRANT +#include + +int +main (void) +{ + +#ifdef errno + int dummy=1; +#else + force compilation error +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tmp_errno="errno_macro_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define gmtime_r to an innocuous variant, in case declares gmtime_r. + For example, HP-UX 11i declares gettimeofday. */ +#define gmtime_r innocuous_gmtime_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char gmtime_r (); below. */ + +#include +#undef gmtime_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gmtime_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_gmtime_r || defined __stub___gmtime_r +choke me +#endif + +int +main (void) +{ +return gmtime_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_gmtime_r="yes" + +else $as_nop + + tmp_gmtime_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_gmtime_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gmtime_r" >/dev/null 2>&1 +then : + + tmp_gmtime_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gmtime_r" >/dev/null 2>&1 +then : + + tmp_gmtime_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define localtime_r to an innocuous variant, in case declares localtime_r. + For example, HP-UX 11i declares gettimeofday. */ +#define localtime_r innocuous_localtime_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char localtime_r (); below. */ + +#include +#undef localtime_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char localtime_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_localtime_r || defined __stub___localtime_r +choke me +#endif + +int +main (void) +{ +return localtime_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_localtime_r="yes" + +else $as_nop + + tmp_localtime_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_localtime_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "localtime_r" >/dev/null 2>&1 +then : + + tmp_localtime_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "localtime_r" >/dev/null 2>&1 +then : + + tmp_localtime_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define strerror_r to an innocuous variant, in case declares strerror_r. + For example, HP-UX 11i declares gettimeofday. */ +#define strerror_r innocuous_strerror_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strerror_r (); below. */ + +#include +#undef strerror_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strerror_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_strerror_r || defined __stub___strerror_r +choke me +#endif + +int +main (void) +{ +return strerror_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_strerror_r="yes" + +else $as_nop + + tmp_strerror_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_strerror_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strerror_r" >/dev/null 2>&1 +then : + + tmp_strerror_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strerror_r" >/dev/null 2>&1 +then : + + tmp_strerror_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define strtok_r to an innocuous variant, in case declares strtok_r. + For example, HP-UX 11i declares gettimeofday. */ +#define strtok_r innocuous_strtok_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strtok_r (); below. */ + +#include +#undef strtok_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strtok_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_strtok_r || defined __stub___strtok_r +choke me +#endif + +int +main (void) +{ +return strtok_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_strtok_r="yes" + +else $as_nop + + tmp_strtok_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_strtok_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strtok_r" >/dev/null 2>&1 +then : + + tmp_strtok_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strtok_r" >/dev/null 2>&1 +then : + + tmp_strtok_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define inet_ntoa_r to an innocuous variant, in case declares inet_ntoa_r. + For example, HP-UX 11i declares gettimeofday. */ +#define inet_ntoa_r innocuous_inet_ntoa_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char inet_ntoa_r (); below. */ + +#include +#undef inet_ntoa_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inet_ntoa_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_inet_ntoa_r || defined __stub___inet_ntoa_r +choke me +#endif + +int +main (void) +{ +return inet_ntoa_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_inet_ntoa_r="yes" + +else $as_nop + + tmp_inet_ntoa_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_inet_ntoa_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "inet_ntoa_r" >/dev/null 2>&1 +then : + + tmp_inet_ntoa_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "inet_ntoa_r" >/dev/null 2>&1 +then : + + tmp_inet_ntoa_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define gethostbyaddr_r to an innocuous variant, in case declares gethostbyaddr_r. + For example, HP-UX 11i declares gettimeofday. */ +#define gethostbyaddr_r innocuous_gethostbyaddr_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char gethostbyaddr_r (); below. */ + +#include +#undef gethostbyaddr_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyaddr_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_gethostbyaddr_r || defined __stub___gethostbyaddr_r +choke me +#endif + +int +main (void) +{ +return gethostbyaddr_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_gethostbyaddr_r="yes" + +else $as_nop + + tmp_gethostbyaddr_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_gethostbyaddr_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gethostbyaddr_r" >/dev/null 2>&1 +then : + + tmp_gethostbyaddr_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gethostbyaddr_r" >/dev/null 2>&1 +then : + + tmp_gethostbyaddr_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define gethostbyname_r to an innocuous variant, in case declares gethostbyname_r. + For example, HP-UX 11i declares gettimeofday. */ +#define gethostbyname_r innocuous_gethostbyname_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char gethostbyname_r (); below. */ + +#include +#undef gethostbyname_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_gethostbyname_r || defined __stub___gethostbyname_r +choke me +#endif + +int +main (void) +{ +return gethostbyname_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_gethostbyname_r="yes" + +else $as_nop + + tmp_gethostbyname_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_gethostbyname_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gethostbyname_r" >/dev/null 2>&1 +then : + + tmp_gethostbyname_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gethostbyname_r" >/dev/null 2>&1 +then : + + tmp_gethostbyname_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define getprotobyname_r to an innocuous variant, in case declares getprotobyname_r. + For example, HP-UX 11i declares gettimeofday. */ +#define getprotobyname_r innocuous_getprotobyname_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getprotobyname_r (); below. */ + +#include +#undef getprotobyname_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getprotobyname_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_getprotobyname_r || defined __stub___getprotobyname_r +choke me +#endif + +int +main (void) +{ +return getprotobyname_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_getprotobyname_r="yes" + +else $as_nop + + tmp_getprotobyname_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_getprotobyname_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getprotobyname_r" >/dev/null 2>&1 +then : + + tmp_getprotobyname_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getprotobyname_r" >/dev/null 2>&1 +then : + + tmp_getprotobyname_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + if test "$tmp_need_reentrant" = "no"; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define getservbyport_r to an innocuous variant, in case declares getservbyport_r. + For example, HP-UX 11i declares gettimeofday. */ +#define getservbyport_r innocuous_getservbyport_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getservbyport_r (); below. */ + +#include +#undef getservbyport_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getservbyport_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_getservbyport_r || defined __stub___getservbyport_r +choke me +#endif + +int +main (void) +{ +return getservbyport_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_getservbyport_r="yes" + +else $as_nop + + tmp_getservbyport_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test "$tmp_getservbyport_r" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getservbyport_r" >/dev/null 2>&1 +then : + + tmp_getservbyport_r="proto_declared" + +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _REENTRANT +#include +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getservbyport_r" >/dev/null 2>&1 +then : + + tmp_getservbyport_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + +fi +rm -rf conftest* + + +fi +rm -rf conftest* + + fi + + fi + + fi + if test "$tmp_need_reentrant" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if _REENTRANT is onwards defined" >&5 +printf %s "checking if _REENTRANT is onwards defined... " >&6; } + if test "$tmp_reentrant_initially_defined" = "yes" || + test "$tmp_need_reentrant" = "yes"; then + + +printf "%s\n" "#define NEED_REENTRANT 1" >>confdefs.h + +cat >>confdefs.h <<_EOF +#ifndef _REENTRANT +# define _REENTRANT +#endif +_EOF + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + # + + +# Check whether --enable-largefile was given. +if test ${enable_largefile+y} +then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +printf %s "checking for special C compiler options needed for large files... " >&6; } +if test ${ac_cv_sys_largefile_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO" +then : + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test ${ac_cv_sys_file_offset_bits+y} +then : + printf %s "(cached) " >&6 +else $as_nop + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } +if test ${ac_cv_sys_large_files+y} +then : + printf %s "(cached) " >&6 +else $as_nop + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +printf "%s\n" "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h +;; +esac +rm -rf conftest* + fi +fi + + +case $host_os in + solaris*) + +printf "%s\n" "#define ETC_INET 1" >>confdefs.h + + ;; +esac + +case `pwd` in + *\ * | *\ *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +printf %s "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +printf "%s\n" "printf" >&6; } ;; + print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +printf "%s\n" "print -r" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +printf "%s\n" "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +printf %s "checking for a sed that does not truncate output... " >&6; } +if test ${ac_cv_path_SED+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in sed gsed + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +printf "%s\n" "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +printf %s "checking for fgrep... " >&6; } +if test ${ac_cv_path_FGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in fgrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +printf "%s\n" "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test ${with_gnu_ld+y} +then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else $as_nop + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } +fi +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +printf "%s\n" "$LD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test ${lt_cv_path_NM+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +printf "%s\n" "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +printf "%s\n" "$DUMPBIN" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DUMPBIN+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +printf "%s\n" "$ac_ct_DUMPBIN" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +printf %s "checking the name lister ($NM) interface... " >&6; } +if test ${lt_cv_nm_interface+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +printf "%s\n" "$lt_cv_nm_interface" >&6; } + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +printf %s "checking the maximum length of command line arguments... " >&6; } +if test ${lt_cv_sys_max_cmd_len+y} +then : + printf %s "(cached) " >&6 +else $as_nop + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 +printf "%s\n" "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +printf %s "checking how to convert $build file names to $host format... " >&6; } +if test ${lt_cv_to_host_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +printf %s "checking how to convert $build file names to toolchain format... " >&6; } +if test ${lt_cv_to_tool_file_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +printf %s "checking for $LD option to reload object files... " >&6; } +if test ${lt_cv_ld_reload_flag+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_reload_flag='-r' +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +printf %s "checking how to recognize dependent libraries... " >&6; } +if test ${lt_cv_deplibs_check_method+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +printf %s "checking how to associate runtime and link libraries... " >&6; } +if test ${lt_cv_sharedlib_from_linklib_cmd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cr} + + + + + + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +printf %s "checking for archiver @FILE support... " >&6; } +if test ${lt_cv_ar_at_file+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +printf "%s\n" "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +printf "%s\n" "$STRIP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_STRIP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +printf "%s\n" "$ac_ct_STRIP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +printf %s "checking command to parse $NM output from $compiler object... " >&6; } +if test ${lt_cv_sys_global_symbol_pipe+y} +then : + printf %s "(cached) " >&6 +else $as_nop + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&5 + if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&5 && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +printf "%s\n" "failed" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +printf "%s\n" "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +printf %s "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test ${with_sysroot+y} +then : + withval=$with_sysroot; +else $as_nop + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +printf "%s\n" "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +printf "%s\n" "${lt_sysroot:-no}" >&6; } + + + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +printf %s "checking for a working dd... " >&6; } +if test ${ac_cv_path_lt_DD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in dd + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +printf "%s\n" "$ac_cv_path_lt_DD" >&6; } + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +printf %s "checking how to truncate binary pipes... " >&6; } +if test ${lt_cv_truncate_bin+y} +then : + printf %s "(cached) " >&6 +else $as_nop + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +printf "%s\n" "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test ${enable_libtool_lock+y} +then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +printf %s "checking whether the C compiler needs -belf... " >&6; } +if test ${lt_cv_cc_needs_belf+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_cc_needs_belf=yes +else $as_nop + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +printf "%s\n" "$MANIFEST_TOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if test ${lt_cv_path_mainfest_tool+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +printf "%s\n" "$DSYMUTIL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +printf "%s\n" "$NMEDIT" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_NMEDIT+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +printf "%s\n" "$ac_ct_NMEDIT" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +printf "%s\n" "$LIPO" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_LIPO+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +printf "%s\n" "$ac_ct_LIPO" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +printf "%s\n" "$OTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +printf "%s\n" "$ac_ct_OTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +printf "%s\n" "$OTOOL64" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OTOOL64+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +printf "%s\n" "$ac_ct_OTOOL64" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +printf %s "checking for -single_module linker flag... " >&6; } +if test ${lt_cv_apple_cc_single_mod+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +printf %s "checking for -exported_symbols_list linker flag... " >&6; } +if test ${lt_cv_ld_exported_symbols_list+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_ld_exported_symbols_list=yes +else $as_nop + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +printf %s "checking for -force_load linker flag... " >&6; } +if test ${lt_cv_ld_force_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cr libconftest.a conftest.o" >&5 + $AR cr libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +printf "%s\n" "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[912]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*|11.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done + + + + + + + + +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : + +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes +then : + printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h + +fi + + + +func_stripname_cnf () +{ + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; + esac +} # func_stripname_cnf + +# ------------------------------------ # +# Determine libtool default behavior # +# ------------------------------------ # + +# +# Default behavior is to enable shared and static libraries on systems +# where libtool knows how to build both library versions, and does not +# require separate configuration and build runs for each flavor. +# + +xc_lt_want_enable_shared='yes' +xc_lt_want_enable_static='yes' + +# +# User may have disabled shared or static libraries. +# +case "x$enable_shared" in # ( + xno) + xc_lt_want_enable_shared='no' + ;; +esac +case "x$enable_static" in # ( + xno) + xc_lt_want_enable_static='no' + ;; +esac +if test "x$xc_lt_want_enable_shared" = 'xno' && + test "x$xc_lt_want_enable_static" = 'xno'; then + as_fn_error $? "can not disable shared and static libraries simultaneously" "$LINENO" 5 +fi + +# +# Default behavior on systems that require independent configuration +# and build runs for shared and static is to enable shared libraries +# and disable static ones. On these systems option '--disable-shared' +# must be used in order to build a proper static library. +# + +if test "x$xc_lt_want_enable_shared" = 'xyes' && + test "x$xc_lt_want_enable_static" = 'xyes'; then + case $host_os in # ( + mingw* | pw32* | cegcc* | os2* | aix*) + xc_lt_want_enable_static='no' + ;; + esac +fi + +# +# Make libtool aware of current shared and static library preferences +# taking in account that, depending on host characteristics, libtool +# may modify these option preferences later in this configure script. +# + +enable_shared=$xc_lt_want_enable_shared +enable_static=$xc_lt_want_enable_static + +# +# Default behavior is to build PIC objects for shared libraries and +# non-PIC objects for static libraries. +# + +xc_lt_want_with_pic='default' + +# +# User may have specified PIC preference. +# + +case "x$with_pic" in # (( + xno) + xc_lt_want_with_pic='no' + ;; + xyes) + xc_lt_want_with_pic='yes' + ;; +esac + +# +# Default behavior on some systems where building a shared library out +# of non-PIC compiled objects will fail with following linker error +# "relocation R_X86_64_32 can not be used when making a shared object" +# is to build PIC objects even for static libraries. This behavior may +# be overriden using 'configure --disable-shared --without-pic'. +# + +if test "x$xc_lt_want_with_pic" = 'xdefault'; then + case $host_cpu in # ( + x86_64 | amd64 | ia64) + case $host_os in # ( + linux* | freebsd*) + xc_lt_want_with_pic='yes' + ;; + esac + ;; + esac +fi + +# +# Make libtool aware of current PIC preference taking in account that, +# depending on host characteristics, libtool may modify PIC default +# behavior to fit host system idiosyncrasies later in this script. +# + +with_pic=$xc_lt_want_with_pic + +## ----------------------- ## +## Start of libtool code ## +## ----------------------- ## + + + + +# Set options +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +printf "%s\n" "$AS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AS+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +printf "%s\n" "$ac_ct_AS" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +printf "%s\n" "$DLLTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_DLLTOOL+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +printf "%s\n" "$ac_ct_DLLTOOL" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +printf "%s\n" "$OBJDUMP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_OBJDUMP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +printf "%s\n" "$ac_ct_OBJDUMP" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + enable_dlopen=no + + + + # Check whether --enable-shared was given. +if test ${enable_shared+y} +then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test ${enable_static+y} +then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test ${with_pic+y} +then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test ${enable_fast_install+y} +then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else $as_nop + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +printf %s "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test ${with_aix_soname+y} +then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else $as_nop + if test ${lt_cv_with_aix_soname+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +printf "%s\n" "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +printf %s "checking for objdir... " >&6; } +if test ${lt_cv_objdir+y} +then : + printf %s "(cached) " >&6 +else $as_nop + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +printf "%s\n" "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +printf %s "checking for ${ac_tool_prefix}file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +printf %s "checking for file... " >&6; } +if test ${lt_cv_path_MAGIC_CMD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +printf "%s\n" "$MAGIC_CMD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test ${lt_cv_prog_compiler_rtti_exceptions+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # flang / f18. f95 an alias for gfortran or flang on Debian + flang* | f18* | f95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } + if test no = "$hard_links"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +printf %s "checking if $CC understands -b... " >&6; } +if test ${lt_cv_prog_compiler__b+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if test ${lt_cv_irix_exported_symbol+y} +then : + printf %s "(cached) " >&6 +else $as_nop + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + lt_cv_irix_exported_symbol=yes +else $as_nop + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + link_all_deplibs=no + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +printf "%s\n" "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc+y} +then : + printf %s "(cached) " >&6 +else $as_nop + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +printf "%s\n" "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main (void) +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dl_dlopen=yes +else $as_nop + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else $as_nop + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes +then : + lt_cv_dlopen=shl_load +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +printf %s "checking for shl_load in -ldld... " >&6; } +if test ${ac_cv_lib_dld_shl_load+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main (void) +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dld_shl_load=yes +else $as_nop + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes +then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else $as_nop + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes +then : + lt_cv_dlopen=dlopen +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +printf %s "checking for dlopen in -ldl... " >&6; } +if test ${ac_cv_lib_dl_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main (void) +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dl_dlopen=yes +else $as_nop + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +printf %s "checking for dlopen in -lsvld... " >&6; } +if test ${ac_cv_lib_svld_dlopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main (void) +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_svld_dlopen=yes +else $as_nop + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes +then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +printf %s "checking for dld_link in -ldld... " >&6; } +if test ${ac_cv_lib_dld_dld_link+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main (void) +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_dld_dld_link=yes +else $as_nop + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes +then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +printf %s "checking whether a program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +printf "%s\n" "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +printf %s "checking whether a statically linked program can dlopen itself... " >&6; } +if test ${lt_cv_dlopen_self_static+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +printf %s "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +printf %s "checking if libtool supports shared libraries... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +printf "%s\n" "$can_build_shared" >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +printf %s "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +printf "%s\n" "$enable_shared" >&6; } + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +printf %s "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +printf "%s\n" "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC + + if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +printf %s "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test ${ac_cv_prog_CXXCPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CXX needs to be expanded + for CXXCPP in "$CXX -E" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +printf "%s\n" "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test ${with_gnu_ld+y} +then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else $as_nop + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +printf %s "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +printf %s "checking for GNU ld... " >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +printf %s "checking for non-GNU ld... " >&6; } +fi +if test ${lt_cv_path_LD+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +printf "%s\n" "$LD" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +printf %s "checking if the linker ($LD) is GNU ld... " >&6; } +if test ${lt_cv_prog_gnu_ld+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct_CXX=no + hardcode_direct_absolute_CXX=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec_CXX='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + no_undefined_flag_CXX='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if test ${lt_cv_aix_libpath__CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' $wl-bernotok' + allow_undefined_flag_CXX=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='$wl--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + if test yes != "$lt_cv_apple_cc_single_mod"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + os2*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_minus_L_CXX=yes + allow_undefined_flag_CXX=unsupported + shrext_cmds=.dll + archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes_CXX=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='$wl-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + export_dynamic_flag_spec_CXX='$wl--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='$wl-E' + whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + no_undefined_flag_CXX=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + fi + + hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='$wl-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='$wl-z,text' + allow_undefined_flag_CXX='$wl-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } + test no = "$ld_shlibs_CXX" && can_build_shared=no + + GCC_CXX=$GXX + LD_CXX=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX=$prev$p + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX=$prev$p + else + postdeps_CXX="${postdeps_CXX} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX=$p + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX=$p + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + lt_prog_compiler_pic_CXX='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static_CXX='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +printf %s "checking for $compiler option to produce PIC... " >&6; } +if test ${lt_cv_prog_compiler_pic_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test ${lt_cv_prog_compiler_pic_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test ${lt_cv_prog_compiler_static_works_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test ${lt_cv_prog_compiler_c_o_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +printf %s "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +printf "%s\n" "$hard_links" >&6; } + if test no = "$hard_links"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +printf "%s\n" "$ld_shlibs_CXX" >&6; } +test no = "$ld_shlibs_CXX" && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +printf %s "checking whether -lc should be explicitly linked in... " >&6; } +if test ${lt_cv_archive_cmds_need_lc_CXX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +printf %s "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if test ${lt_cv_shlibpath_overrides_runpath+y} +then : + printf %s "(cached) " >&6 +else $as_nop + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO" +then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null +then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +printf "%s\n" "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +printf %s "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test yes = "$hardcode_automatic_CXX"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct_CXX" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && + test no != "$hardcode_minus_L_CXX"; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +printf "%s\n" "$hardcode_action_CXX" >&6; } + +if test relink = "$hardcode_action_CXX" || + test yes = "$inherit_rpath_CXX"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +## --------------------- ## +## End of libtool code ## +## --------------------- ## + +# +# Verify if finally libtool shared libraries will be built +# + +case "x$enable_shared" in # (( + xyes | xno) + xc_lt_build_shared=$enable_shared + ;; + *) + as_fn_error $? "unexpected libtool enable_shared value: $enable_shared" "$LINENO" 5 + ;; +esac + +# +# Verify if finally libtool static libraries will be built +# + +case "x$enable_static" in # (( + xyes | xno) + xc_lt_build_static=$enable_static + ;; + *) + as_fn_error $? "unexpected libtool enable_static value: $enable_static" "$LINENO" 5 + ;; +esac + +# +# Verify if libtool shared libraries should be linked using flag -version-info +# + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries with -version-info" >&5 +printf %s "checking whether to build shared libraries with -version-info... " >&6; } +xc_lt_shlib_use_version_info='yes' +if test "x$version_type" = 'xnone'; then + xc_lt_shlib_use_version_info='no' +fi +case $host_os in # ( + amigaos*) + xc_lt_shlib_use_version_info='yes' + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xc_lt_shlib_use_version_info" >&5 +printf "%s\n" "$xc_lt_shlib_use_version_info" >&6; } + +# +# Verify if libtool shared libraries should be linked using flag -no-undefined +# + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries with -no-undefined" >&5 +printf %s "checking whether to build shared libraries with -no-undefined... " >&6; } +xc_lt_shlib_use_no_undefined='no' +if test "x$allow_undefined" = 'xno'; then + xc_lt_shlib_use_no_undefined='yes' +elif test "x$allow_undefined_flag" = 'xunsupported'; then + xc_lt_shlib_use_no_undefined='yes' +fi +case $host_os in # ( + cygwin* | mingw* | pw32* | cegcc* | os2* | aix*) + xc_lt_shlib_use_no_undefined='yes' + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xc_lt_shlib_use_no_undefined" >&5 +printf "%s\n" "$xc_lt_shlib_use_no_undefined" >&6; } + +# +# Verify if libtool shared libraries should be linked using flag -mimpure-text +# + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries with -mimpure-text" >&5 +printf %s "checking whether to build shared libraries with -mimpure-text... " >&6; } +xc_lt_shlib_use_mimpure_text='no' +case $host_os in # ( + solaris2*) + if test "x$GCC" = 'xyes'; then + xc_lt_shlib_use_mimpure_text='yes' + fi + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xc_lt_shlib_use_mimpure_text" >&5 +printf "%s\n" "$xc_lt_shlib_use_mimpure_text" >&6; } + +# +# Find out wether libtool libraries would be built wit PIC +# + +case "x$pic_mode" in # (((( + xdefault) + xc_lt_build_shared_with_pic='yes' + xc_lt_build_static_with_pic='no' + ;; + xyes) + xc_lt_build_shared_with_pic='yes' + xc_lt_build_static_with_pic='yes' + ;; + xno) + xc_lt_build_shared_with_pic='no' + xc_lt_build_static_with_pic='no' + ;; + *) + xc_lt_build_shared_with_pic='unknown' + xc_lt_build_static_with_pic='unknown' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unexpected libtool pic_mode value: $pic_mode" >&5 +printf "%s\n" "$as_me: WARNING: unexpected libtool pic_mode value: $pic_mode" >&2;} + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries with PIC" >&5 +printf %s "checking whether to build shared libraries with PIC... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xc_lt_build_shared_with_pic" >&5 +printf "%s\n" "$xc_lt_build_shared_with_pic" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries with PIC" >&5 +printf %s "checking whether to build static libraries with PIC... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xc_lt_build_static_with_pic" >&5 +printf "%s\n" "$xc_lt_build_static_with_pic" >&6; } + +# +# Verify if libtool shared libraries will be built while static not built +# + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries only" >&5 +printf %s "checking whether to build shared libraries only... " >&6; } +if test "$xc_lt_build_shared" = 'yes' && + test "$xc_lt_build_static" = 'no'; then + xc_lt_build_shared_only='yes' +else + xc_lt_build_shared_only='no' +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xc_lt_build_shared_only" >&5 +printf "%s\n" "$xc_lt_build_shared_only" >&6; } + +# +# Verify if libtool static libraries will be built while shared not built +# + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries only" >&5 +printf %s "checking whether to build static libraries only... " >&6; } +if test "$xc_lt_build_static" = 'yes' && + test "$xc_lt_build_shared" = 'no'; then + xc_lt_build_static_only='yes' +else + xc_lt_build_static_only='no' +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xc_lt_build_static_only" >&5 +printf "%s\n" "$xc_lt_build_static_only" >&6; } + + + + + +# +# Automake conditionals based on libtool related checks +# + + if test "x$xc_lt_shlib_use_version_info" = 'xyes'; then + CARES_LT_SHLIB_USE_VERSION_INFO_TRUE= + CARES_LT_SHLIB_USE_VERSION_INFO_FALSE='#' +else + CARES_LT_SHLIB_USE_VERSION_INFO_TRUE='#' + CARES_LT_SHLIB_USE_VERSION_INFO_FALSE= +fi + + if test "x$xc_lt_shlib_use_no_undefined" = 'xyes'; then + CARES_LT_SHLIB_USE_NO_UNDEFINED_TRUE= + CARES_LT_SHLIB_USE_NO_UNDEFINED_FALSE='#' +else + CARES_LT_SHLIB_USE_NO_UNDEFINED_TRUE='#' + CARES_LT_SHLIB_USE_NO_UNDEFINED_FALSE= +fi + + if test "x$xc_lt_shlib_use_mimpure_text" = 'xyes'; then + CARES_LT_SHLIB_USE_MIMPURE_TEXT_TRUE= + CARES_LT_SHLIB_USE_MIMPURE_TEXT_FALSE='#' +else + CARES_LT_SHLIB_USE_MIMPURE_TEXT_TRUE='#' + CARES_LT_SHLIB_USE_MIMPURE_TEXT_FALSE= +fi + + +# +# Due to libtool and automake machinery limitations of not allowing +# specifying separate CPPFLAGS or CFLAGS when compiling objects for +# inclusion of these in shared or static libraries, we are forced to +# build using separate configure runs for shared and static libraries +# on systems where different CPPFLAGS or CFLAGS are mandatory in order +# to compile objects for each kind of library. Notice that relying on +# the '-DPIC' CFLAG that libtool provides is not valid given that the +# user might for example choose to build static libraries with PIC. +# + +# +# Make our Makefile.am files use the staticlib CPPFLAG only when strictly +# targeting a static library and not building its shared counterpart. +# + + if test "x$xc_lt_build_static_only" = 'xyes'; then + USE_CPPFLAG_CARES_STATICLIB_TRUE= + USE_CPPFLAG_CARES_STATICLIB_FALSE='#' +else + USE_CPPFLAG_CARES_STATICLIB_TRUE='#' + USE_CPPFLAG_CARES_STATICLIB_FALSE= +fi + + +# +# Make staticlib CPPFLAG variable and its definition visible in output +# files unconditionally, providing an empty definition unless strictly +# targeting a static library and not building its shared counterpart. +# + +CPPFLAG_CARES_STATICLIB= +if test "x$xc_lt_build_static_only" = 'xyes'; then + CPPFLAG_CARES_STATICLIB='-DCARES_STATICLIB' +fi + + + + + # + compiler_id="unknown" + compiler_num="0" + # + flags_dbg_all="unknown" + flags_dbg_yes="unknown" + flags_dbg_off="unknown" + flags_opt_all="unknown" + flags_opt_yes="unknown" + flags_opt_off="unknown" + # + flags_prefer_cppflags="no" + # + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is DEC/Compaq/HP C" >&5 +printf %s "checking if compiler is DEC/Compaq/HP C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __DECC +CURL_DEF_TOKEN __DECC +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__DECC"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___DECC=no + + else + curl_cv_have_def___DECC=yes + curl_cv_def___DECC=$tmp_exp + + fi + + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __DECC_VER +CURL_DEF_TOKEN __DECC_VER +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__DECC_VER"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___DECC_VER=no + + else + curl_cv_have_def___DECC_VER=yes + curl_cv_def___DECC_VER=$tmp_exp + + fi + + if test "$curl_cv_have_def___DECC" = "yes" && + test "$curl_cv_have_def___DECC_VER" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="DEC_C" + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_yes="-g2" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -O4" + flags_opt_yes="-O1" + flags_opt_off="-O0" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is HP-UX C" >&5 +printf %s "checking if compiler is HP-UX C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __HP_cc +CURL_DEF_TOKEN __HP_cc +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__HP_cc"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___HP_cc=no + + else + curl_cv_have_def___HP_cc=yes + curl_cv_def___HP_cc=$tmp_exp + + fi + + if test "$curl_cv_have_def___HP_cc" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="HP_UX_C" + flags_dbg_all="-g -s" + flags_dbg_yes="-g" + flags_dbg_off="-s" + flags_opt_all="-O +O0 +O1 +O2 +O3 +O4" + flags_opt_yes="+O2" + flags_opt_off="+O0" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is IBM C" >&5 +printf %s "checking if compiler is IBM C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __IBMC__ +CURL_DEF_TOKEN __IBMC__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__IBMC__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___IBMC__=no + + else + curl_cv_have_def___IBMC__=yes + curl_cv_def___IBMC__=$tmp_exp + + fi + + if test "$curl_cv_have_def___IBMC__" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="IBM_C" + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_yes="-g" + flags_dbg_off="" + flags_opt_all="-O -O0 -O1 -O2 -O3 -O4 -O5" + flags_opt_all="$flags_opt_all -qnooptimize" + flags_opt_all="$flags_opt_all -qoptimize=0" + flags_opt_all="$flags_opt_all -qoptimize=1" + flags_opt_all="$flags_opt_all -qoptimize=2" + flags_opt_all="$flags_opt_all -qoptimize=3" + flags_opt_all="$flags_opt_all -qoptimize=4" + flags_opt_all="$flags_opt_all -qoptimize=5" + flags_opt_yes="-O2" + flags_opt_off="-qnooptimize" + flags_prefer_cppflags="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is Intel C" >&5 +printf %s "checking if compiler is Intel C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __INTEL_COMPILER +CURL_DEF_TOKEN __INTEL_COMPILER +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__INTEL_COMPILER"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___INTEL_COMPILER=no + + else + curl_cv_have_def___INTEL_COMPILER=yes + curl_cv_def___INTEL_COMPILER=$tmp_exp + + fi + + if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_num="$curl_cv_def___INTEL_COMPILER" + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __unix__ +CURL_DEF_TOKEN __unix__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = ""; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___unix__=no + + else + curl_cv_have_def___unix__=yes + curl_cv_def___unix__=$tmp_exp + + fi + + if test "$curl_cv_have_def___unix__" = "yes"; then + compiler_id="INTEL_UNIX_C" + flags_dbg_all="-g -g0" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -Os" + flags_opt_yes="-O2" + flags_opt_off="-O0" + else + compiler_id="INTEL_WINDOWS_C" + flags_dbg_all="/ZI /Zi /zI /zi /ZD /Zd /zD /zd /Z7 /z7 /Oy /Oy-" + flags_dbg_all="$flags_dbg_all /debug" + flags_dbg_all="$flags_dbg_all /debug:none" + flags_dbg_all="$flags_dbg_all /debug:minimal" + flags_dbg_all="$flags_dbg_all /debug:partial" + flags_dbg_all="$flags_dbg_all /debug:full" + flags_dbg_all="$flags_dbg_all /debug:semantic_stepping" + flags_dbg_all="$flags_dbg_all /debug:extended" + flags_dbg_yes="/Zi /Oy-" + flags_dbg_off="/debug:none /Oy-" + flags_opt_all="/O /O0 /O1 /O2 /O3 /Od /Og /Og- /Oi /Oi-" + flags_opt_yes="/O2" + flags_opt_off="/Od" + fi + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is clang" >&5 +printf %s "checking if compiler is clang... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __clang__ +CURL_DEF_TOKEN __clang__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__clang__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___clang__=no + + else + curl_cv_have_def___clang__=yes + curl_cv_def___clang__=$tmp_exp + + fi + + if test "$curl_cv_have_def___clang__" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="CLANG" + clangver=`$CC -dumpversion` + clangvhi=`echo $clangver | cut -d . -f1` + clangvlo=`echo $clangver | cut -d . -f2` + compiler_num=`(expr $clangvhi "*" 100 + $clangvlo) 2>/dev/null` + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_all="$flags_dbg_all -ggdb" + flags_dbg_all="$flags_dbg_all -gstabs" + flags_dbg_all="$flags_dbg_all -gstabs+" + flags_dbg_all="$flags_dbg_all -gcoff" + flags_dbg_all="$flags_dbg_all -gxcoff" + flags_dbg_all="$flags_dbg_all -gdwarf-2" + flags_dbg_all="$flags_dbg_all -gvms" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -Os -O3 -O4" + flags_opt_yes="-Os" + flags_opt_off="-O0" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is GNU C" >&5 +printf %s "checking if compiler is GNU C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __GNUC__ +CURL_DEF_TOKEN __GNUC__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__GNUC__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___GNUC__=no + + else + curl_cv_have_def___GNUC__=yes + curl_cv_def___GNUC__=$tmp_exp + + fi + + if test "$curl_cv_have_def___GNUC__" = "yes" && + test "$compiler_id" = "unknown"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="GNU_C" + gccver=`$CC -dumpversion` + gccvhi=`echo $gccver | cut -d . -f1` + gccvlo=`echo $gccver | cut -d . -f2` + compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null` + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_all="$flags_dbg_all -ggdb" + flags_dbg_all="$flags_dbg_all -gstabs" + flags_dbg_all="$flags_dbg_all -gstabs+" + flags_dbg_all="$flags_dbg_all -gcoff" + flags_dbg_all="$flags_dbg_all -gxcoff" + flags_dbg_all="$flags_dbg_all -gdwarf-2" + flags_dbg_all="$flags_dbg_all -gvms" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -Os" + flags_opt_yes="-O2" + flags_opt_off="-O0" + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef _WIN32 +CURL_DEF_TOKEN _WIN32 +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "_WIN32"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def__WIN32=no + + else + curl_cv_have_def__WIN32=yes + curl_cv_def__WIN32=$tmp_exp + + fi + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is LCC" >&5 +printf %s "checking if compiler is LCC... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __LCC__ +CURL_DEF_TOKEN __LCC__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__LCC__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___LCC__=no + + else + curl_cv_have_def___LCC__=yes + curl_cv_def___LCC__=$tmp_exp + + fi + + if test "$curl_cv_have_def___LCC__" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="LCC" + flags_dbg_all="-g" + flags_dbg_yes="-g" + flags_dbg_off="" + flags_opt_all="" + flags_opt_yes="" + flags_opt_off="" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is SGI MIPSpro C" >&5 +printf %s "checking if compiler is SGI MIPSpro C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __GNUC__ +CURL_DEF_TOKEN __GNUC__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__GNUC__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___GNUC__=no + + else + curl_cv_have_def___GNUC__=yes + curl_cv_def___GNUC__=$tmp_exp + + fi + + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef _COMPILER_VERSION +CURL_DEF_TOKEN _COMPILER_VERSION +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "_COMPILER_VERSION"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def__COMPILER_VERSION=no + + else + curl_cv_have_def__COMPILER_VERSION=yes + curl_cv_def__COMPILER_VERSION=$tmp_exp + + fi + + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef _SGI_COMPILER_VERSION +CURL_DEF_TOKEN _SGI_COMPILER_VERSION +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "_SGI_COMPILER_VERSION"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def__SGI_COMPILER_VERSION=no + + else + curl_cv_have_def__SGI_COMPILER_VERSION=yes + curl_cv_def__SGI_COMPILER_VERSION=$tmp_exp + + fi + + if test "$curl_cv_have_def___GNUC__" = "no" && + (test "$curl_cv_have_def__SGI_COMPILER_VERSION" = "yes" || + test "$curl_cv_have_def__COMPILER_VERSION" = "yes"); then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="SGI_MIPSPRO_C" + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast" + flags_opt_yes="-O2" + flags_opt_off="-O0" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is SGI MIPS C" >&5 +printf %s "checking if compiler is SGI MIPS C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __GNUC__ +CURL_DEF_TOKEN __GNUC__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__GNUC__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___GNUC__=no + + else + curl_cv_have_def___GNUC__=yes + curl_cv_def___GNUC__=$tmp_exp + + fi + + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __sgi +CURL_DEF_TOKEN __sgi +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__sgi"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___sgi=no + + else + curl_cv_have_def___sgi=yes + curl_cv_def___sgi=$tmp_exp + + fi + + if test "$curl_cv_have_def___GNUC__" = "no" && + test "$curl_cv_have_def___sgi" = "yes" && + test "$compiler_id" = "unknown"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="SGI_MIPS_C" + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast" + flags_opt_yes="-O2" + flags_opt_off="-O0" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is SunPro C" >&5 +printf %s "checking if compiler is SunPro C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __SUNPRO_C +CURL_DEF_TOKEN __SUNPRO_C +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__SUNPRO_C"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___SUNPRO_C=no + + else + curl_cv_have_def___SUNPRO_C=yes + curl_cv_def___SUNPRO_C=$tmp_exp + + fi + + if test "$curl_cv_have_def___SUNPRO_C" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="SUNPRO_C" + flags_dbg_all="-g -s" + flags_dbg_yes="-g" + flags_dbg_off="-s" + flags_opt_all="-O -xO -xO1 -xO2 -xO3 -xO4 -xO5" + flags_opt_yes="-xO2" + flags_opt_off="" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is Tiny C" >&5 +printf %s "checking if compiler is Tiny C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __TINYC__ +CURL_DEF_TOKEN __TINYC__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__TINYC__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___TINYC__=no + + else + curl_cv_have_def___TINYC__=yes + curl_cv_def___TINYC__=$tmp_exp + + fi + + if test "$curl_cv_have_def___TINYC__" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + compiler_id="TINY_C" + flags_dbg_all="-g -b" + flags_dbg_yes="-g" + flags_dbg_off="" + flags_opt_all="" + flags_opt_yes="" + flags_opt_off="" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is Watcom C" >&5 +printf %s "checking if compiler is Watcom C... " >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __WATCOMC__ +CURL_DEF_TOKEN __WATCOMC__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__WATCOMC__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___WATCOMC__=no + + else + curl_cv_have_def___WATCOMC__=yes + curl_cv_def___WATCOMC__=$tmp_exp + + fi + + if test "$curl_cv_have_def___WATCOMC__" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + + if test -z "$SED"; then + as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5 + fi + if test -z "$GREP"; then + as_fn_error $? "GREP not set. Cannot continue without GREP being set." "$LINENO" 5 + fi + + tmp_exp="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __UNIX__ +CURL_DEF_TOKEN __UNIX__ +#endif + + +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[ ][ ]*//' 2>/dev/null | \ + "$SED" 's/["][ ]*["]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "__UNIX__"; then + tmp_exp="" + fi + +fi +rm -f conftest.err conftest.i conftest.$ac_ext + if test -z "$tmp_exp"; then + curl_cv_have_def___UNIX__=no + + else + curl_cv_have_def___UNIX__=yes + curl_cv_def___UNIX__=$tmp_exp + + fi + + if test "$curl_cv_have_def___UNIX__" = "yes"; then + compiler_id="WATCOM_UNIX_C" + flags_dbg_all="-g1 -g1+ -g2 -g3" + flags_dbg_yes="-g2" + flags_dbg_off="" + flags_opt_all="-O0 -O1 -O2 -O3" + flags_opt_yes="-O2" + flags_opt_off="-O0" + else + compiler_id="WATCOM_WINDOWS_C" + flags_dbg_all="" + flags_dbg_yes="" + flags_dbg_off="" + flags_opt_all="" + flags_opt_yes="" + flags_opt_off="" + fi + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + # + if test "$compiler_id" = "unknown"; then + cat <<_EOF 1>&2 +*** +*** Warning: This configure script does not have information about the +*** compiler you are using, relative to the flags required to enable or +*** disable generation of debug info, optimization options or warnings. +*** +*** Whatever settings are present in CFLAGS will be used for this run. +*** +*** If you wish to help the c-ares project to better support your compiler +*** you can report this and the required info on the c-ares development +*** mailing list: http://lists.haxx.se/listinfo/c-ares/ +*** +_EOF + fi + + +squeeze() { + _sqz_result="" + eval _sqz_input=\$$1 + for _sqz_token in $_sqz_input; do + if test -z "$_sqz_result"; then + _sqz_result="$_sqz_token" + else + _sqz_result="$_sqz_result $_sqz_token" + fi + done + eval $1=\$_sqz_result + return 0 +} + + + # + if test "$compiler_id" != "unknown"; then + # + if test "$compiler_id" = "GNU_C" || + test "$compiler_id" = "CLANG"; then + + if test "$compiler_id" = "GNU_C" || + test "$compiler_id" = "CLANG"; then + tmp_has_include="no" + tmp_chg_FLAGS="$CFLAGS" + for word1 in $tmp_chg_FLAGS; do + case "$word1" in + -I*) + tmp_has_include="yes" + ;; + esac + done + if test "$tmp_has_include" = "yes"; then + tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'` + tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'` + CFLAGS="$tmp_chg_FLAGS" + squeeze CFLAGS + fi + tmp_has_include="no" + tmp_chg_FLAGS="$CPPFLAGS" + for word1 in $tmp_chg_FLAGS; do + case "$word1" in + -I*) + tmp_has_include="yes" + ;; + esac + done + if test "$tmp_has_include" = "yes"; then + tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'` + tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'` + CPPFLAGS="$tmp_chg_FLAGS" + squeeze CPPFLAGS + fi + fi + + fi + # + tmp_save_CPPFLAGS="$CPPFLAGS" + tmp_save_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="" + tmp_CFLAGS="" + # + case "$compiler_id" in + # + CLANG) + # + tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments" + ;; + # + DEC_C) + # + tmp_CFLAGS="$tmp_CFLAGS -std1" + tmp_CFLAGS="$tmp_CFLAGS -noansi_alias" + tmp_CFLAGS="$tmp_CFLAGS -warnprotos" + tmp_CFLAGS="$tmp_CFLAGS -msg_fatal toofewargs,toomanyargs" + ;; + # + GNU_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + HP_UX_C) + # + tmp_CFLAGS="$tmp_CFLAGS -z" + tmp_CFLAGS="$tmp_CFLAGS +W 4227,4255" + ;; + # + IBM_C) + # + tmp_CPPFLAGS="$tmp_CPPFLAGS -qthreaded" + tmp_CPPFLAGS="$tmp_CPPFLAGS -qnoansialias" + tmp_CPPFLAGS="$tmp_CPPFLAGS -qhalt=e" + ;; + # + INTEL_UNIX_C) + # + tmp_CFLAGS="$tmp_CFLAGS -std=gnu89" + tmp_CPPFLAGS="$tmp_CPPFLAGS -we 140,147,165,266" + tmp_CPPFLAGS="$tmp_CPPFLAGS -wd 279,981,1469" + ;; + # + INTEL_WINDOWS_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + LCC) + # + tmp_CFLAGS="$tmp_CFLAGS -n" + ;; + # + SGI_MIPS_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + SGI_MIPSPRO_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + SUNPRO_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + TINY_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + WATCOM_UNIX_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + WATCOM_WINDOWS_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + esac + # + squeeze tmp_CPPFLAGS + squeeze tmp_CFLAGS + # + if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts some basic options" >&5 +printf %s "checking if compiler accepts some basic options... " >&6; } + CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS" + squeeze CPPFLAGS + squeeze CFLAGS + + tmp_compiler_works="unknown" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 1; + return i; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/cc-fail: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$tmp_compiler_works" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 1; + return i; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/link-fail: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + if test "x$cross_compiling" != "xyes" && + test "$tmp_compiler_works" = "yes"; then + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +# ifdef __STDC__ +# include +# endif + +int +main (void) +{ + + int i = 0; + exit(i); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + echo "run-fail: test program exited with status $ac_status" >&6 + echo " " >&6 + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + if test "$tmp_compiler_works" = "yes"; then + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS" >&5 +printf "%s\n" "$as_me: compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS" >&6;} + + else + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS" >&5 +printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS" >&2;} + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + + fi + + fi + # + fi + + + # + if test "$compiler_id" != "unknown"; then + # + tmp_save_CFLAGS="$CFLAGS" + tmp_save_CPPFLAGS="$CPPFLAGS" + # + tmp_options="" + tmp_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="$CPPFLAGS" + + ac_var_stripped="" + for word1 in $tmp_CFLAGS; do + ac_var_strip_word="no" + for word2 in $flags_dbg_all; do + if test "$word1" = "$word2"; then + ac_var_strip_word="yes" + fi + done + if test "$ac_var_strip_word" = "no"; then + ac_var_stripped="$ac_var_stripped $word1" + fi + done + tmp_CFLAGS="$ac_var_stripped" + squeeze tmp_CFLAGS + + + ac_var_stripped="" + for word1 in $tmp_CPPFLAGS; do + ac_var_strip_word="no" + for word2 in $flags_dbg_all; do + if test "$word1" = "$word2"; then + ac_var_strip_word="yes" + fi + done + if test "$ac_var_strip_word" = "no"; then + ac_var_stripped="$ac_var_stripped $word1" + fi + done + tmp_CPPFLAGS="$ac_var_stripped" + squeeze tmp_CPPFLAGS + + # + if test "$want_debug" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts debug enabling options" >&5 +printf %s "checking if compiler accepts debug enabling options... " >&6; } + tmp_options="$flags_dbg_yes" + fi + if test "$want_debug" = "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts debug disabling options" >&5 +printf %s "checking if compiler accepts debug disabling options... " >&6; } + tmp_options="$flags_dbg_off" + fi + # + if test "$flags_prefer_cppflags" = "yes"; then + CPPFLAGS="$tmp_CPPFLAGS $tmp_options" + CFLAGS="$tmp_CFLAGS" + else + CPPFLAGS="$tmp_CPPFLAGS" + CFLAGS="$tmp_CFLAGS $tmp_options" + fi + squeeze CPPFLAGS + squeeze CFLAGS + + tmp_compiler_works="unknown" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 1; + return i; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/cc-fail: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$tmp_compiler_works" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 1; + return i; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/link-fail: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + if test "x$cross_compiling" != "xyes" && + test "$tmp_compiler_works" = "yes"; then + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +# ifdef __STDC__ +# include +# endif + +int +main (void) +{ + + int i = 0; + exit(i); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + echo "run-fail: test program exited with status $ac_status" >&6 + echo " " >&6 + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + if test "$tmp_compiler_works" = "yes"; then + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: compiler options added: $tmp_options" >&5 +printf "%s\n" "$as_me: compiler options added: $tmp_options" >&6;} + + else + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compiler options rejected: $tmp_options" >&5 +printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + + fi + + # + fi + + + # + if test "$compiler_id" != "unknown"; then + # + tmp_save_CFLAGS="$CFLAGS" + tmp_save_CPPFLAGS="$CPPFLAGS" + # + tmp_options="" + tmp_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="$CPPFLAGS" + honor_optimize_option="yes" + # + # + if test "$want_optimize" = "assume_no" || + test "$want_optimize" = "assume_yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler optimizer assumed setting might be used" >&5 +printf %s "checking if compiler optimizer assumed setting might be used... " >&6; } + + + ac_var_match_word="no" + for word1 in $tmp_CFLAGS; do + for word2 in $flags_opt_all; do + if test "$word1" = "$word2"; then + ac_var_match_word="yes" + fi + done + done + + if test "$ac_var_match_word" = "yes"; then + + honor_optimize_option="no" + + + fi + + + + ac_var_match_word="no" + for word1 in $tmp_CPPFLAGS; do + for word2 in $flags_opt_all; do + if test "$word1" = "$word2"; then + ac_var_match_word="yes" + fi + done + done + + if test "$ac_var_match_word" = "yes"; then + + honor_optimize_option="no" + + + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $honor_optimize_option" >&5 +printf "%s\n" "$honor_optimize_option" >&6; } + if test "$honor_optimize_option" = "yes"; then + if test "$want_optimize" = "assume_yes"; then + want_optimize="yes" + fi + if test "$want_optimize" = "assume_no"; then + want_optimize="no" + fi + fi + fi + # + if test "$honor_optimize_option" = "yes"; then + + ac_var_stripped="" + for word1 in $tmp_CFLAGS; do + ac_var_strip_word="no" + for word2 in $flags_opt_all; do + if test "$word1" = "$word2"; then + ac_var_strip_word="yes" + fi + done + if test "$ac_var_strip_word" = "no"; then + ac_var_stripped="$ac_var_stripped $word1" + fi + done + tmp_CFLAGS="$ac_var_stripped" + squeeze tmp_CFLAGS + + + ac_var_stripped="" + for word1 in $tmp_CPPFLAGS; do + ac_var_strip_word="no" + for word2 in $flags_opt_all; do + if test "$word1" = "$word2"; then + ac_var_strip_word="yes" + fi + done + if test "$ac_var_strip_word" = "no"; then + ac_var_stripped="$ac_var_stripped $word1" + fi + done + tmp_CPPFLAGS="$ac_var_stripped" + squeeze tmp_CPPFLAGS + + if test "$want_optimize" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts optimizer enabling options" >&5 +printf %s "checking if compiler accepts optimizer enabling options... " >&6; } + tmp_options="$flags_opt_yes" + fi + if test "$want_optimize" = "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts optimizer disabling options" >&5 +printf %s "checking if compiler accepts optimizer disabling options... " >&6; } + tmp_options="$flags_opt_off" + fi + if test "$flags_prefer_cppflags" = "yes"; then + CPPFLAGS="$tmp_CPPFLAGS $tmp_options" + CFLAGS="$tmp_CFLAGS" + else + CPPFLAGS="$tmp_CPPFLAGS" + CFLAGS="$tmp_CFLAGS $tmp_options" + fi + squeeze CPPFLAGS + squeeze CFLAGS + + tmp_compiler_works="unknown" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 1; + return i; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/cc-fail: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$tmp_compiler_works" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 1; + return i; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/link-fail: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + if test "x$cross_compiling" != "xyes" && + test "$tmp_compiler_works" = "yes"; then + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +# ifdef __STDC__ +# include +# endif + +int +main (void) +{ + + int i = 0; + exit(i); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + echo "run-fail: test program exited with status $ac_status" >&6 + echo " " >&6 + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + if test "$tmp_compiler_works" = "yes"; then + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: compiler options added: $tmp_options" >&5 +printf "%s\n" "$as_me: compiler options added: $tmp_options" >&6;} + + else + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compiler options rejected: $tmp_options" >&5 +printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + + fi + + fi + # + fi + + + # + if test "$compiler_id" != "unknown"; then + # + tmp_save_CPPFLAGS="$CPPFLAGS" + tmp_save_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="" + tmp_CFLAGS="" + # + case "$compiler_id" in + # + CLANG) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -pedantic" + tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra" + tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings" + tmp_CFLAGS="$tmp_CFLAGS -Wshadow" + tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs" + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations" + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes" + tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long" + tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal" + tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare" + tmp_CFLAGS="$tmp_CFLAGS -Wundef" + tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral" + tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes" + tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement" + tmp_CFLAGS="$tmp_CFLAGS -Wcast-align" + tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers" + tmp_CFLAGS="$tmp_CFLAGS -Wshorten-64-to-32" + # + if test "$compiler_num" -ge "101"; then + tmp_CFLAGS="$tmp_CFLAGS -Wunused" + fi + fi + ;; + # + DEC_C) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -msg_enable level3" + fi + ;; + # + GNU_C) + # + if test "$want_warnings" = "yes"; then + # + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -pedantic" + fi + # + tmp_CFLAGS="$tmp_CFLAGS -Wall -W" + # + if test "$compiler_num" -ge "104"; then + tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings" + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -Wunused -Wshadow" + fi + fi + # + if test "$compiler_num" -ge "207"; then + tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs" + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations" + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes" + fi + fi + # + if test "$compiler_num" -ge "295"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long" + fi + # + if test "$compiler_num" -ge "296"; then + tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal" + tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare" + tmp_CFLAGS="$tmp_CFLAGS -Wundef" + fi + # + if test "$compiler_num" -ge "297"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral" + fi + # + if test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS" + fi + # + if test "$compiler_num" -ge "303"; then + tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes" + fi + # + if test "$compiler_num" -ge "304"; then + tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement" + fi + # + if test "$compiler_num" -ge "400"; then + tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3" + fi + # + if test "$compiler_num" -ge "402"; then + tmp_CFLAGS="$tmp_CFLAGS -Wcast-align" + fi + # + if test "$compiler_num" -ge "403"; then + tmp_CFLAGS="$tmp_CFLAGS -Wtype-limits -Wold-style-declaration" + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-parameter-type -Wempty-body" + tmp_CFLAGS="$tmp_CFLAGS -Wclobbered -Wignored-qualifiers" + tmp_CFLAGS="$tmp_CFLAGS -Wconversion -Wno-sign-conversion -Wvla" + fi + # + if test "$compiler_num" -ge "405"; then + if test "$curl_cv_have_def__WIN32" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-pedantic-ms-format" + fi + fi + # + fi + # + if test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers" + else + if test "x$cross_compiling" = "xyes"; then + if test "$compiler_num" -ge "104"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-unused -Wno-shadow" + fi + if test "$compiler_num" -ge "207"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-declarations" + tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-prototypes" + fi + fi + fi + ;; + # + HP_UX_C) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS +w1" + fi + ;; + # + IBM_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + INTEL_UNIX_C) + # + if test "$want_warnings" = "yes"; then + if test "$compiler_num" -gt "600"; then + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall -w2" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcheck" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcomment" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wdeprecated" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wmissing-prototypes" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wp64" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wpointer-arith" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wreturn-type" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wshadow" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wuninitialized" + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wunused-function" + fi + fi + tmp_CFLAGS="$tmp_CFLAGS -fno-omit-frame-pointer" + tmp_CFLAGS="$tmp_CFLAGS -fno-strict-aliasing" + tmp_CFLAGS="$tmp_CFLAGS -fp-model precise" + if test "$compiler_num" -ge "1000"; then + tmp_CFLAGS="$tmp_CFLAGS -vec-report0" + fi + ;; + # + INTEL_WINDOWS_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + LCC) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS" + fi + ;; + # + SGI_MIPS_C) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -fullwarn" + fi + ;; + # + SGI_MIPSPRO_C) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -fullwarn" + tmp_CFLAGS="$tmp_CFLAGS -woff 1209" + fi + ;; + # + SUNPRO_C) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -v" + fi + ;; + # + TINY_C) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -Wall" + tmp_CFLAGS="$tmp_CFLAGS -Wwrite-strings" + tmp_CFLAGS="$tmp_CFLAGS -Wunsupported" + fi + ;; + # + WATCOM_UNIX_C) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra" + fi + ;; + # + WATCOM_WINDOWS_C) + # + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + esac + # + squeeze tmp_CPPFLAGS + squeeze tmp_CFLAGS + # + if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts strict warning options" >&5 +printf %s "checking if compiler accepts strict warning options... " >&6; } + CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS" + squeeze CPPFLAGS + squeeze CFLAGS + + tmp_compiler_works="unknown" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 1; + return i; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/cc-fail: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$tmp_compiler_works" = "yes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + int i = 1; + return i; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/link-fail: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + if test "x$cross_compiling" != "xyes" && + test "$tmp_compiler_works" = "yes"; then + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +# ifdef __STDC__ +# include +# endif + +int +main (void) +{ + + int i = 0; + exit(i); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + tmp_compiler_works="yes" + +else $as_nop + + tmp_compiler_works="no" + echo " " >&6 + echo "run-fail: test program exited with status $ac_status" >&6 + echo " " >&6 + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + if test "$tmp_compiler_works" = "yes"; then + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS" >&5 +printf "%s\n" "$as_me: compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS" >&6;} + + else + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS" >&5 +printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS" >&2;} + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + + fi + + fi + # + fi + + +if test "$compiler_id" = "INTEL_UNIX_C"; then + # + if test "$compiler_num" -ge "1000"; then + CFLAGS="$CFLAGS -shared-intel" + elif test "$compiler_num" -ge "900"; then + CFLAGS="$CFLAGS -i-dynamic" + fi + # +fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler halts on compilation errors" >&5 +printf %s "checking if compiler halts on compilation errors... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + force compilation error + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + as_fn_error $? "compiler does not halt on compilation errors." "$LINENO" 5 + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler halts on negative sized arrays" >&5 +printf %s "checking if compiler halts on negative sized arrays... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ]; + +int +main (void) +{ + + bad_t dummy; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + as_fn_error $? "compiler does not halt on negative sized arrays." "$LINENO" 5 + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler halts on function prototype mismatch" >&5 +printf %s "checking if compiler halts on function prototype mismatch... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +# include + int rand(int n); + int rand(int n) + { + if(n) + return ++n; + else + return n; + } + +int +main (void) +{ + + int i[2]; + int j = rand(i[0]); + if(j) + return j; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + as_fn_error $? "compiler does not halt on function prototype mismatch." "$LINENO" 5 + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler supports hiding library internal symbols" >&5 +printf %s "checking if compiler supports hiding library internal symbols... " >&6; } + supports_symbol_hiding="no" + symbol_hiding_CFLAGS="" + symbol_hiding_EXTERN="" + tmp_CFLAGS="" + tmp_EXTERN="" + case "$compiler_id" in + CLANG) + tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))" + tmp_CFLAGS="-fvisibility=hidden" + supports_symbol_hiding="yes" + ;; + GNU_C) + if test "$compiler_num" -ge "304"; then + if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then + tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))" + tmp_CFLAGS="-fvisibility=hidden" + supports_symbol_hiding="yes" + fi + fi + ;; + INTEL_UNIX_C) + if test "$compiler_num" -ge "900"; then + if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then + tmp_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +# include + +int +main (void) +{ + + printf("icc fvisibility bug test"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))" + tmp_CFLAGS="-fvisibility=hidden" + supports_symbol_hiding="yes" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$tmp_save_CFLAGS" + fi + fi + ;; + SUNPRO_C) + if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then + tmp_EXTERN="__global" + tmp_CFLAGS="-xldscope=hidden" + supports_symbol_hiding="yes" + fi + ;; + esac + if test "$supports_symbol_hiding" = "yes"; then + tmp_save_CFLAGS="$CFLAGS" + CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS" + squeeze CFLAGS + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $tmp_EXTERN char *dummy(char *buff); + char *dummy(char *buff) + { + if(buff) + return ++buff; + else + return buff; + } + +int +main (void) +{ + + char b[16]; + char *r = dummy(&b[0]); + if(r) + return (int)*r; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + supports_symbol_hiding="yes" + if test -f conftest.err; then + grep 'visibility' conftest.err >/dev/null + if test "$?" -eq "0"; then + supports_symbol_hiding="no" + fi + fi + +else $as_nop + + supports_symbol_hiding="no" + echo " " >&6 + sed 's/^/cc-src: /' conftest.$ac_ext >&6 + sed 's/^/cc-err: /' conftest.err >&6 + echo " " >&6 + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + CFLAGS="$tmp_save_CFLAGS" + fi + if test "$supports_symbol_hiding" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + symbol_hiding_CFLAGS="$tmp_CFLAGS" + symbol_hiding_EXTERN="$tmp_EXTERN" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5 +printf %s "checking for windows.h... " >&6; } +if test ${ac_cv_header_windows_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINDOWS_H shall not be defined. +#else + int dummy=2*WINVER; +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_windows_h="yes" + +else $as_nop + + ac_cv_header_windows_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_windows_h" >&5 +printf "%s\n" "$ac_cv_header_windows_h" >&6; } + case "$ac_cv_header_windows_h" in + yes) + +printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h + + +printf "%s\n" "#define WIN32_LEAN_AND_MEAN 1" >>confdefs.h + + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build target is a native Windows one" >&5 +printf %s "checking whether build target is a native Windows one... " >&6; } +if test ${ac_cv_native_windows+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + if test "$ac_cv_header_windows_h" = "no"; then + ac_cv_native_windows="no" + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + +#if defined(__MINGW32__) || defined(__MINGW32CE__) || \ + (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))) + int dummy=1; +#else + Not a native Windows build target. +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_native_windows="yes" + +else $as_nop + + ac_cv_native_windows="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_native_windows" >&5 +printf "%s\n" "$ac_cv_native_windows" >&6; } + if test "x$ac_cv_native_windows" = xyes; then + DOING_NATIVE_WINDOWS_TRUE= + DOING_NATIVE_WINDOWS_FALSE='#' +else + DOING_NATIVE_WINDOWS_TRUE='#' + DOING_NATIVE_WINDOWS_FALSE= +fi + + +case X-"$ac_cv_native_windows" in + X-yes) + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winsock.h" >&5 +printf %s "checking for winsock.h... " >&6; } +if test ${ac_cv_header_winsock_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINSOCK_H shall not be defined. +#else + int dummy=WSACleanup(); +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_winsock_h="yes" + +else $as_nop + + ac_cv_header_winsock_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock_h" >&5 +printf "%s\n" "$ac_cv_header_winsock_h" >&6; } + case "$ac_cv_header_winsock_h" in + yes) + +printf "%s\n" "#define HAVE_WINSOCK_H 1" >>confdefs.h + + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5 +printf %s "checking for winsock2.h... " >&6; } +if test ${ac_cv_header_winsock2_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WINSOCK2_H shall not be defined. +#else + int dummy=2*IPPROTO_ESP; +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_winsock2_h="yes" + +else $as_nop + + ac_cv_header_winsock2_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock2_h" >&5 +printf "%s\n" "$ac_cv_header_winsock2_h" >&6; } + case "$ac_cv_header_winsock2_h" in + yes) + +printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h + + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ws2tcpip.h" >&5 +printf %s "checking for ws2tcpip.h... " >&6; } +if test ${ac_cv_header_ws2tcpip_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WS2TCPIP_H shall not be defined. +#else + int dummy=2*IP_PKTINFO; +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_ws2tcpip_h="yes" + +else $as_nop + + ac_cv_header_ws2tcpip_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_ws2tcpip_h" >&5 +printf "%s\n" "$ac_cv_header_ws2tcpip_h" >&6; } + case "$ac_cv_header_ws2tcpip_h" in + yes) + +printf "%s\n" "#define HAVE_WS2TCPIP_H 1" >>confdefs.h + + ;; + esac + + CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600" + ;; + *) + ac_cv_header_winsock_h="no" + ac_cv_header_winsock2_h="no" + ac_cv_header_ws2tcpip_h="no" + ;; +esac + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if X/Open network library is required" >&5 +printf %s "checking if X/Open network library is required... " >&6; } + tst_lib_xnet_required="no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int main (void) +{ +#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600) + return 0; +#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) + return 0; +#else + force compilation error +#endif +} + + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tst_lib_xnet_required="yes" + LIBS="$LIBS -lxnet" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tst_lib_xnet_required" >&5 +printf "%s\n" "$tst_lib_xnet_required" >&6; } + + +ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" +if test "x$ac_cv_func_gethostbyname" = xyes +then : + HAVE_GETHOSTBYNAME="1" + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 +printf %s "checking for gethostbyname in -lnsl... " >&6; } +if test ${ac_cv_lib_nsl_gethostbyname+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char gethostbyname (); +int +main (void) +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_nsl_gethostbyname=yes +else $as_nop + ac_cv_lib_nsl_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 +printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; } +if test "x$ac_cv_lib_nsl_gethostbyname" = xyes +then : + HAVE_GETHOSTBYNAME="1" + LIBS="$LIBS -lnsl" + +fi + + +fi + + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lsocket" >&5 +printf %s "checking for gethostbyname in -lsocket... " >&6; } +if test ${ac_cv_lib_socket_gethostbyname+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char gethostbyname (); +int +main (void) +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_socket_gethostbyname=yes +else $as_nop + ac_cv_lib_socket_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_gethostbyname" >&5 +printf "%s\n" "$ac_cv_lib_socket_gethostbyname" >&6; } +if test "x$ac_cv_lib_socket_gethostbyname" = xyes +then : + HAVE_GETHOSTBYNAME="1" + LIBS="$LIBS -lsocket" + +fi + +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname with both nsl and socket libs" >&5 +printf %s "checking for gethostbyname with both nsl and socket libs... " >&6; } + my_ac_save_LIBS=$LIBS + LIBS="-lnsl -lsocket $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + gethostbyname(); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_GETHOSTBYNAME="1" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + LIBS=$my_ac_save_LIBS + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + if test "$ac_cv_header_windows_h" = "yes"; then + if test "$ac_cv_header_winsock_h" = "yes"; then + case $host in + *-*-mingw32ce*) + winsock_LIB="-lwinsock" + ;; + *) + winsock_LIB="-lwsock32" + ;; + esac + fi + if test "$ac_cv_header_winsock2_h" = "yes"; then + winsock_LIB="-lws2_32" + fi + if test ! -z "$winsock_LIB"; then + my_ac_save_LIBS=$LIBS + LIBS="$winsock_LIB $LIBS" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in $winsock_LIB" >&5 +printf %s "checking for gethostbyname in $winsock_LIB... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#endif + +int +main (void) +{ + + gethostbyname("www.dummysite.com"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_GETHOSTBYNAME="1" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + winsock_LIB="" + LIBS=$my_ac_save_LIBS + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + fi +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname for Minix 3" >&5 +printf %s "checking for gethostbyname for Minix 3... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +/* Older Minix versions may need here instead */ +#include + +int +main (void) +{ + + gethostbyname("www.dummysite.com"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_GETHOSTBYNAME="1" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname for eCos" >&5 +printf %s "checking for gethostbyname for eCos... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include +#include + +int +main (void) +{ + + gethostbyname("www.dummysite.com"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_GETHOSTBYNAME="1" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnet" >&5 +printf %s "checking for gethostbyname in -lnet... " >&6; } +if test ${ac_cv_lib_net_gethostbyname+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnet $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char gethostbyname (); +int +main (void) +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_net_gethostbyname=yes +else $as_nop + ac_cv_lib_net_gethostbyname=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_net_gethostbyname" >&5 +printf "%s\n" "$ac_cv_lib_net_gethostbyname" >&6; } +if test "x$ac_cv_lib_net_gethostbyname" = xyes +then : + HAVE_GETHOSTBYNAME="1" + LIBS="$LIBS -lnet" + +fi + +fi + + +if test "$HAVE_GETHOSTBYNAME" != "1"; then + as_fn_error $? "couldn't find libraries for gethostbyname()" "$LINENO" 5 +fi + +if test "x$host_vendor" = "xapple" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing res_servicename" >&5 +printf %s "checking for library containing res_servicename... " >&6; } +if test ${ac_cv_search_res_servicename+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char res_servicename (); +int +main (void) +{ +return res_servicename (); + ; + return 0; +} +_ACEOF +for ac_lib in '' resolv +do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO" +then : + ac_cv_search_res_servicename=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext + if test ${ac_cv_search_res_servicename+y} +then : + break +fi +done +if test ${ac_cv_search_res_servicename+y} +then : + +else $as_nop + ac_cv_search_res_servicename=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_res_servicename" >&5 +printf "%s\n" "$ac_cv_search_res_servicename" >&6; } +ac_res=$ac_cv_search_res_servicename +if test "$ac_res" != no +then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + +printf "%s\n" "#define CARES_USE_LIBRESOLV 1" >>confdefs.h + + +else $as_nop + + as_fn_error $? "Unable to find libresolv which is required for iPhone targets" "$LINENO" 5 + +fi + + +fi + +if test "x$host_vendor" = "xibm" -a "x$host_os" = "xopenedition" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing res_init" >&5 +printf %s "checking for library containing res_init... " >&6; } +if test ${ac_cv_search_res_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char res_init (); +int +main (void) +{ +return res_init (); + ; + return 0; +} +_ACEOF +for ac_lib in '' resolv +do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO" +then : + ac_cv_search_res_init=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext + if test ${ac_cv_search_res_init+y} +then : + break +fi +done +if test ${ac_cv_search_res_init+y} +then : + +else $as_nop + ac_cv_search_res_init=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_res_init" >&5 +printf "%s\n" "$ac_cv_search_res_init" >&6; } +ac_res=$ac_cv_search_res_init +if test "$ac_res" != no +then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + + +printf "%s\n" "#define CARES_USE_LIBRESOLV 1" >>confdefs.h + + +else $as_nop + + as_fn_error $? "Unable to find libresolv which is required for z/OS" "$LINENO" 5 + +fi + + +fi + +ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" +if test "x$ac_cv_func_strcasecmp" = xyes +then : + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lresolve" >&5 +printf %s "checking for strcasecmp in -lresolve... " >&6; } +if test ${ac_cv_lib_resolve_strcasecmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lresolve $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char strcasecmp (); +int +main (void) +{ +return strcasecmp (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_resolve_strcasecmp=yes +else $as_nop + ac_cv_lib_resolve_strcasecmp=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolve_strcasecmp" >&5 +printf "%s\n" "$ac_cv_lib_resolve_strcasecmp" >&6; } +if test "x$ac_cv_lib_resolve_strcasecmp" = xyes +then : + printf "%s\n" "#define HAVE_LIBRESOLVE 1" >>confdefs.h + + LIBS="-lresolve $LIBS" + +fi + +fi + + +if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strcasecmp in -lresolve" >&5 +printf %s "checking for strcasecmp in -lresolve... " >&6; } +if test ${ac_cv_lib_resolve_strcasecmp+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lresolve -lnsl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char strcasecmp (); +int +main (void) +{ +return strcasecmp (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_resolve_strcasecmp=yes +else $as_nop + ac_cv_lib_resolve_strcasecmp=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolve_strcasecmp" >&5 +printf "%s\n" "$ac_cv_lib_resolve_strcasecmp" >&6; } +if test "x$ac_cv_lib_resolve_strcasecmp" = xyes +then : + LIBS="-lresolve $LIBS" +fi + +fi +ac_cv_func_strcasecmp="no" + +if test "$ac_cv_header_winsock2_h" = "yes"; then + LIBS="$LIBS -liphlpapi" +fi + + +cares_includes_winsock2="\ +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# ifdef HAVE_WINSOCK2_H +# include +# else +# ifdef HAVE_WINSOCK_H +# include +# endif +# endif +#endif +/* includes end */" + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5 +printf %s "checking for windows.h... " >&6; } +if test ${ac_cv_header_windows_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINDOWS_H shall not be defined. +#else + int dummy=2*WINVER; +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_windows_h="yes" + +else $as_nop + + ac_cv_header_windows_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_windows_h" >&5 +printf "%s\n" "$ac_cv_header_windows_h" >&6; } + case "$ac_cv_header_windows_h" in + yes) + +printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h + + +printf "%s\n" "#define WIN32_LEAN_AND_MEAN 1" >>confdefs.h + + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winsock.h" >&5 +printf %s "checking for winsock.h... " >&6; } +if test ${ac_cv_header_winsock_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINSOCK_H shall not be defined. +#else + int dummy=WSACleanup(); +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_winsock_h="yes" + +else $as_nop + + ac_cv_header_winsock_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock_h" >&5 +printf "%s\n" "$ac_cv_header_winsock_h" >&6; } + case "$ac_cv_header_winsock_h" in + yes) + +printf "%s\n" "#define HAVE_WINSOCK_H 1" >>confdefs.h + + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5 +printf %s "checking for winsock2.h... " >&6; } +if test ${ac_cv_header_winsock2_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WINSOCK2_H shall not be defined. +#else + int dummy=2*IPPROTO_ESP; +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_winsock2_h="yes" + +else $as_nop + + ac_cv_header_winsock2_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock2_h" >&5 +printf "%s\n" "$ac_cv_header_winsock2_h" >&6; } + case "$ac_cv_header_winsock2_h" in + yes) + +printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h + + ;; + esac + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for connect in libraries" >&5 +printf %s "checking for connect in libraries... " >&6; } + tst_connect_save_LIBS="$LIBS" + tst_connect_need_LIBS="unknown" + for tst_lib in '' '-lsocket' ; do + if test "$tst_connect_need_LIBS" = "unknown"; then + LIBS="$tst_lib $tst_connect_save_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + #ifndef HAVE_WINDOWS_H + int connect(int, void*, int); + #endif + +int +main (void) +{ + + if(0 != connect(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + tst_connect_need_LIBS="$tst_lib" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + done + LIBS="$tst_connect_save_LIBS" + # + case X-"$tst_connect_need_LIBS" in + X-unknown) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot find connect" >&5 +printf "%s\n" "cannot find connect" >&6; } + as_fn_error $? "cannot find connect function in libraries." "$LINENO" 5 + ;; + X-) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tst_connect_need_LIBS" >&5 +printf "%s\n" "$tst_connect_need_LIBS" >&6; } + LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS" + ;; + esac + + +if test "x$host_vendor" = "xapple" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iOS minimum version 10 or later" >&5 +printf %s "checking for iOS minimum version 10 or later... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include +#include + +int +main (void) +{ + +#if TARGET_OS_IPHONE == 0 || __IPHONE_OS_VERSION_MIN_REQUIRED < 100000 +#error Not iOS 10 or later +#endif +return 0; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ac_cv_ios_10="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi + +if test "x$host_vendor" = "xapple" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for macOS minimum version 10.12 or later" >&5 +printf %s "checking for macOS minimum version 10.12 or later... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include +#include + +int +main (void) +{ + +#ifndef MAC_OS_X_VERSION_10_12 +# define MAC_OS_X_VERSION_10_12 101200 +#endif +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12 +#error Not macOS 10.12 or later +#endif +return 0; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ac_cv_macos_10_12="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi + +if test "x$host_vendor" != "xapple" || test "x$ac_cv_ios_10" = "xyes" || test "x$ac_cv_macos_10_12" = "xyes"; then + + +# Obsolete code to be removed. +if test $ac_cv_header_sys_time_h = yes; then + +printf "%s\n" "#define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi +# End of obsolete code. + + + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_time_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default" +if test "x$ac_cv_header_time_h" = xyes +then : + printf "%s\n" "#define HAVE_TIME_H 1" >>confdefs.h + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for monotonic clock_gettime" >&5 +printf %s "checking for monotonic clock_gettime... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + +int +main (void) +{ + + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC, &ts); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ac_cv_func_clock_gettime="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_clock_gettime="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + + + # + if test "$ac_cv_func_clock_gettime" = "yes"; then + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in libraries" >&5 +printf %s "checking for clock_gettime in libraries... " >&6; } + # + curl_cv_save_LIBS="$LIBS" + curl_cv_gclk_LIBS="unknown" + # + for x_xlibs in '' '-lrt' '-lposix4' ; do + if test "$curl_cv_gclk_LIBS" = "unknown"; then + if test -z "$x_xlibs"; then + LIBS="$curl_cv_save_LIBS" + else + LIBS="$x_xlibs $curl_cv_save_LIBS" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + +int +main (void) +{ + + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC, &ts); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + curl_cv_gclk_LIBS="$x_xlibs" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + done + # + LIBS="$curl_cv_save_LIBS" + # + case X-"$curl_cv_gclk_LIBS" in + X-unknown) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot find clock_gettime" >&5 +printf "%s\n" "cannot find clock_gettime" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: HAVE_CLOCK_GETTIME_MONOTONIC will not be defined" >&5 +printf "%s\n" "$as_me: WARNING: HAVE_CLOCK_GETTIME_MONOTONIC will not be defined" >&2;} + ac_cv_func_clock_gettime="no" + ;; + X-) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no additional lib required" >&5 +printf "%s\n" "no additional lib required" >&6; } + ac_cv_func_clock_gettime="yes" + ;; + *) + if test -z "$curl_cv_save_LIBS"; then + LIBS="$curl_cv_gclk_LIBS" + else + LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS" + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_gclk_LIBS" >&5 +printf "%s\n" "$curl_cv_gclk_LIBS" >&6; } + ac_cv_func_clock_gettime="yes" + ;; + esac + # + if test "x$cross_compiling" != "xyes" && + test "$ac_cv_func_clock_gettime" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if monotonic clock_gettime works" >&5 +printf %s "checking if monotonic clock_gettime works... " >&6; } + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + +int +main (void) +{ + + struct timespec ts; + if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) + exit(0); + else + exit(1); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: HAVE_CLOCK_GETTIME_MONOTONIC will not be defined" >&5 +printf "%s\n" "$as_me: WARNING: HAVE_CLOCK_GETTIME_MONOTONIC will not be defined" >&2;} + ac_cv_func_clock_gettime="no" + LIBS="$curl_cv_save_LIBS" + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + # + case "$ac_cv_func_clock_gettime" in + yes) + +printf "%s\n" "#define HAVE_CLOCK_GETTIME_MONOTONIC 1" >>confdefs.h + + ;; + esac + # + fi + # + +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use libgcc" >&5 +printf %s "checking whether to use libgcc... " >&6; } +# Check whether --enable-libgcc was given. +if test ${enable_libgcc+y} +then : + enableval=$enable_libgcc; case "$enableval" in + yes) + LIBS="$LIBS -lgcc" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + esac +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi + + + + + + +STDC_HEADERS + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for malloc.h" >&5 +printf %s "checking for malloc.h... " >&6; } +if test ${ac_cv_header_malloc_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include + +int +main (void) +{ + + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_malloc_h="yes" + +else $as_nop + + ac_cv_header_malloc_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_malloc_h" >&5 +printf "%s\n" "$ac_cv_header_malloc_h" >&6; } + if test "$ac_cv_header_malloc_h" = "yes"; then + +printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h + + # + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include + +int +main (void) +{ + + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + curl_cv_need_header_malloc_h="no" + +else $as_nop + + curl_cv_need_header_malloc_h="yes" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + # + case "$curl_cv_need_header_malloc_h" in + yes) + +printf "%s\n" "#define NEED_MALLOC_H 1" >>confdefs.h + + ;; + esac + fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for memory.h" >&5 +printf %s "checking for memory.h... " >&6; } +if test ${ac_cv_header_memory_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include + +int +main (void) +{ + + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_memory_h="yes" + +else $as_nop + + ac_cv_header_memory_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_memory_h" >&5 +printf "%s\n" "$ac_cv_header_memory_h" >&6; } + if test "$ac_cv_header_memory_h" = "yes"; then + +printf "%s\n" "#define HAVE_MEMORY_H 1" >>confdefs.h + + # + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include + +int +main (void) +{ + + void *p = malloc(10); + void *q = calloc(10,10); + free(p); + free(q); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + curl_cv_need_header_memory_h="no" + +else $as_nop + + curl_cv_need_header_memory_h="yes" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + # + case "$curl_cv_need_header_memory_h" in + yes) + +printf "%s\n" "#define NEED_MEMORY_H 1" >>confdefs.h + + ;; + esac + fi + + +ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_sys_time_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_sys_select_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_sys_param_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/uio.h" "ac_cv_header_sys_uio_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_sys_uio_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_UIO_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "assert.h" "ac_cv_header_assert_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_assert_h" = xyes +then : + printf "%s\n" "#define HAVE_ASSERT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "netinet/tcp.h" "ac_cv_header_netinet_tcp_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_netinet_tcp_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_TCP_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_net_if_h" = xyes +then : + printf "%s\n" "#define HAVE_NET_IF_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_errno_h" = xyes +then : + printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "socket.h" "ac_cv_header_socket_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SOCKET_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_strings_h" = xyes +then : + printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stdbool.h" "ac_cv_header_stdbool_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_stdbool_h" = xyes +then : + printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "time.h" "ac_cv_header_time_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_time_h" = xyes +then : + printf "%s\n" "#define HAVE_TIME_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_limits_h" = xyes +then : + printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "arpa/nameser.h" "ac_cv_header_arpa_nameser_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_arpa_nameser_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_NAMESER_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "arpa/nameser_compat.h" "ac_cv_header_arpa_nameser_compat_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_arpa_nameser_compat_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_NAMESER_COMPAT_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif + + +" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h + +fi + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } +if test ${ac_cv_c_undeclared_builtin_options+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CFLAGS=$CFLAGS + ac_cv_c_undeclared_builtin_options='cannot detect' + for ac_arg in '' -fno-builtin; do + CFLAGS="$ac_save_CFLAGS $ac_arg" + # This test program should *not* compile successfully. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +(void) strchr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + # This test program should compile successfully. + # No library function is consistently available on + # freestanding implementations, so test against a dummy + # declaration. Include always-available headers on the + # off chance that they somehow elicit warnings. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +extern void ac_decl (int, char *); + +int +main (void) +{ +(void) ac_decl (0, (char *) 0); + (void) ac_decl; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + if test x"$ac_arg" = x +then : + ac_cv_c_undeclared_builtin_options='none needed' +else $as_nop + ac_cv_c_undeclared_builtin_options=$ac_arg +fi + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + done + CFLAGS=$ac_save_CFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 +printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } + case $ac_cv_c_undeclared_builtin_options in #( + 'cannot detect') : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot make $CC report undeclared builtins +See \`config.log' for more details" "$LINENO" 5; } ;; #( + 'none needed') : + ac_c_undeclared_builtin_options='' ;; #( + *) : + ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +esac + +ac_fn_check_decl "$LINENO" "HAVE_ARPA_NAMESER_H" "ac_cv_have_decl_HAVE_ARPA_NAMESER_H" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_HAVE_ARPA_NAMESER_H" = xyes +then : + + +cat >>confdefs.h <<_EOF +#define CARES_HAVE_ARPA_NAMESER_H 1 +_EOF + + +fi +ac_fn_check_decl "$LINENO" "HAVE_ARPA_NAMESER_COMPAT_H" "ac_cv_have_decl_HAVE_ARPA_NAMESER_COMPAT_H" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_HAVE_ARPA_NAMESER_COMPAT_H" = xyes +then : + + +cat >>confdefs.h <<_EOF +#define CARES_HAVE_ARPA_NAMESER_COMPAT_H 1 +_EOF + + +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +printf %s "checking for an ANSI C-conforming const... " >&6; } +if test ${ac_cv_c_const+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + +#ifndef __cplusplus + /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; + const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* IBM XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this sort of thing. */ + char tx; + char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; } bx; + struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_c_const=yes +else $as_nop + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +printf "%s\n" "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +printf "%s\n" "#define const /**/" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes +then : + +else $as_nop + +printf "%s\n" "#define size_t unsigned int" >>confdefs.h + +fi + + +# Obsolete code to be removed. +if test $ac_cv_header_sys_time_h = yes; then + +printf "%s\n" "#define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi +# End of obsolete code. + + + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_time_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default" +if test "x$ac_cv_header_time_h" = xyes +then : + printf "%s\n" "#define HAVE_TIME_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 +printf %s "checking for struct timeval... " >&6; } +if test ${ac_cv_struct_timeval+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +int +main (void) +{ + + struct timeval ts; + ts.tv_sec = 0; + ts.tv_usec = 0; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_struct_timeval="yes" + +else $as_nop + + ac_cv_struct_timeval="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_timeval" >&5 +printf "%s\n" "$ac_cv_struct_timeval" >&6; } + case "$ac_cv_struct_timeval" in + yes) + +printf "%s\n" "#define HAVE_STRUCT_TIMEVAL 1" >>confdefs.h + + ;; + esac + + +ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default" +if test "x$ac_cv_type_long_long" = xyes +then : + +printf "%s\n" "#define HAVE_LONGLONG 1" >>confdefs.h + + longlong="yes" + +fi + + +if test "xyes" = "x$longlong"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if numberLL works" >&5 +printf %s "checking if numberLL works... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + long long val = 1000LL; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_LL 1" >>confdefs.h + + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +# check for ssize_t +ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = xyes +then : + CARES_TYPEOF_ARES_SSIZE_T=ssize_t +else $as_nop + CARES_TYPEOF_ARES_SSIZE_T=int +fi + + + +printf "%s\n" "#define CARES_TYPEOF_ARES_SSIZE_T ${CARES_TYPEOF_ARES_SSIZE_T}" >>confdefs.h + + + +# check for bool type +ac_fn_c_check_type "$LINENO" "bool" "ac_cv_type_bool" " +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDBOOL_H +#include +#endif + +" +if test "x$ac_cv_type_bool" = xyes +then : + + +printf "%s\n" "#define HAVE_BOOL_T 1" >>confdefs.h + + +fi + + + +cares_includes_ws2tcpip="\ +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# ifdef HAVE_WINSOCK2_H +# include +# ifdef HAVE_WS2TCPIP_H +# include +# endif +# endif +#endif +/* includes end */" + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5 +printf %s "checking for windows.h... " >&6; } +if test ${ac_cv_header_windows_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINDOWS_H shall not be defined. +#else + int dummy=2*WINVER; +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_windows_h="yes" + +else $as_nop + + ac_cv_header_windows_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_windows_h" >&5 +printf "%s\n" "$ac_cv_header_windows_h" >&6; } + case "$ac_cv_header_windows_h" in + yes) + +printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h + + +printf "%s\n" "#define WIN32_LEAN_AND_MEAN 1" >>confdefs.h + + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5 +printf %s "checking for winsock2.h... " >&6; } +if test ${ac_cv_header_winsock2_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WINSOCK2_H shall not be defined. +#else + int dummy=2*IPPROTO_ESP; +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_winsock2_h="yes" + +else $as_nop + + ac_cv_header_winsock2_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_winsock2_h" >&5 +printf "%s\n" "$ac_cv_header_winsock2_h" >&6; } + case "$ac_cv_header_winsock2_h" in + yes) + +printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h + + ;; + esac + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ws2tcpip.h" >&5 +printf %s "checking for ws2tcpip.h... " >&6; } +if test ${ac_cv_header_ws2tcpip_h+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#include + +int +main (void) +{ + +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WS2TCPIP_H shall not be defined. +#else + int dummy=2*IP_PKTINFO; +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_header_ws2tcpip_h="yes" + +else $as_nop + + ac_cv_header_ws2tcpip_h="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_ws2tcpip_h" >&5 +printf "%s\n" "$ac_cv_header_ws2tcpip_h" >&6; } + case "$ac_cv_header_ws2tcpip_h" in + yes) + +printf "%s\n" "#define HAVE_WS2TCPIP_H 1" >>confdefs.h + + ;; + esac + + + +cares_includes_sys_socket="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_sys_socket +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$cares_includes_sys_socket +" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi + + + +cares_preprocess_callconv="\ +/* preprocess start */ +#ifdef HAVE_WINDOWS_H +# define FUNCALLCONV __stdcall +#else +# define FUNCALLCONV +#endif +/* preprocess end */" + + + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ares_socklen_t data type" >&5 +printf %s "checking for ares_socklen_t data type... " >&6; } + cares_typeof_ares_socklen_t="unknown" + for arg1 in int SOCKET; do + for arg2 in 'struct sockaddr' void; do + for t in socklen_t int size_t 'unsigned int' long 'unsigned long' void; do + if test "$cares_typeof_ares_socklen_t" = "unknown"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_preprocess_callconv + extern int FUNCALLCONV getpeername($arg1, $arg2 *, $t *); + +int +main (void) +{ + + $t *lenptr = 0; + if(0 != getpeername(0, 0, lenptr)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + cares_typeof_ares_socklen_t="$t" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + done + done + done + for t in socklen_t int; do + if test "$cares_typeof_ares_socklen_t" = "void"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_sys_socket + typedef $t ares_socklen_t; + +int +main (void) +{ + + ares_socklen_t dummy; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + cares_typeof_ares_socklen_t="$t" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + done + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cares_typeof_ares_socklen_t" >&5 +printf "%s\n" "$cares_typeof_ares_socklen_t" >&6; } + if test "$cares_typeof_ares_socklen_t" = "void" || + test "$cares_typeof_ares_socklen_t" = "unknown"; then + as_fn_error $? "cannot find data type for ares_socklen_t." "$LINENO" 5 + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of ares_socklen_t" >&5 +printf %s "checking size of ares_socklen_t... " >&6; } + cares_sizeof_ares_socklen_t="unknown" + cares_pull_headers_socklen_t="unknown" + if test "$ac_cv_header_ws2tcpip_h" = "yes"; then + tst_pull_header_checks='none ws2tcpip' + tst_size_checks='4' + else + tst_pull_header_checks='none systypes syssocket' + tst_size_checks='4 8 2' + fi + for tst_size in $tst_size_checks; do + for tst_pull_headers in $tst_pull_header_checks; do + if test "$cares_sizeof_ares_socklen_t" = "unknown"; then + case $tst_pull_headers in + ws2tcpip) + tmp_includes="$cares_includes_ws2tcpip" + ;; + systypes) + tmp_includes="$cares_includes_sys_types" + ;; + syssocket) + tmp_includes="$cares_includes_sys_socket" + ;; + *) + tmp_includes="" + ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $tmp_includes + typedef $cares_typeof_ares_socklen_t ares_socklen_t; + typedef char dummy_arr[sizeof(ares_socklen_t) == $tst_size ? 1 : -1]; + +int +main (void) +{ + + ares_socklen_t dummy; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + cares_sizeof_ares_socklen_t="$tst_size" + cares_pull_headers_socklen_t="$tst_pull_headers" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + done + done + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cares_sizeof_ares_socklen_t" >&5 +printf "%s\n" "$cares_sizeof_ares_socklen_t" >&6; } + if test "$cares_sizeof_ares_socklen_t" = "unknown"; then + as_fn_error $? "cannot find out size of ares_socklen_t." "$LINENO" 5 + fi + # + case $cares_pull_headers_socklen_t in + ws2tcpip) + +cat >>confdefs.h <<_EOF +#define CARES_PULL_WS2TCPIP_H 1 +_EOF + + ;; + systypes) + +cat >>confdefs.h <<_EOF +#define CARES_PULL_SYS_TYPES_H 1 +_EOF + + ;; + syssocket) + +cat >>confdefs.h <<_EOF +#define CARES_PULL_SYS_TYPES_H 1 +_EOF + + +cat >>confdefs.h <<_EOF +#define CARES_PULL_SYS_SOCKET_H 1 +_EOF + + ;; + esac + +cat >>confdefs.h <<_EOF +#define CARES_TYPEOF_ARES_SOCKLEN_T $cares_typeof_ares_socklen_t +_EOF + + +cat >>confdefs.h <<_EOF +#define CARES_SIZEOF_ARES_SOCKLEN_T $cares_sizeof_ares_socklen_t +_EOF + + + + + ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" " +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + +" +if test "x$ac_cv_type_in_addr_t" = xyes +then : + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for in_addr_t equivalent" >&5 +printf %s "checking for in_addr_t equivalent... " >&6; } +if test ${curl_cv_in_addr_t_equiv+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + curl_cv_in_addr_t_equiv="unknown" + for t in "unsigned long" int size_t unsigned long; do + if test "$curl_cv_in_addr_t_equiv" = "unknown"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + +int +main (void) +{ + + $t data = inet_addr ("1.2.3.4"); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + curl_cv_in_addr_t_equiv="$t" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + done + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_in_addr_t_equiv" >&5 +printf "%s\n" "$curl_cv_in_addr_t_equiv" >&6; } + case "$curl_cv_in_addr_t_equiv" in + unknown) + as_fn_error $? "Cannot find a type to use in place of in_addr_t" "$LINENO" 5 + ;; + *) + +printf "%s\n" "#define in_addr_t $curl_cv_in_addr_t_equiv" >>confdefs.h + + ;; + esac + +fi + + + + + ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" " +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + +" +if test "x$ac_cv_type_struct_sockaddr_storage" = xyes +then : + +printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_STORAGE 1" >>confdefs.h + +fi + + + + + ac_fn_c_check_header_compile "$LINENO" "signal.h" "ac_cv_header_signal_h" "$ac_includes_default" +if test "x$ac_cv_header_signal_h" = xyes +then : + printf "%s\n" "#define HAVE_SIGNAL_H 1" >>confdefs.h + +fi + + ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" " +#ifdef HAVE_SIGNAL_H +#include +#endif + +" +if test "x$ac_cv_type_sig_atomic_t" = xyes +then : + + +printf "%s\n" "#define HAVE_SIG_ATOMIC_T 1" >>confdefs.h + + +fi + + case "$ac_cv_type_sig_atomic_t" in + yes) + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if sig_atomic_t is already defined as volatile" >&5 +printf %s "checking if sig_atomic_t is already defined as volatile... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef HAVE_SIGNAL_H +#include +#endif + +int +main (void) +{ + + static volatile sig_atomic_t dummy = 0; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_sig_atomic_t_volatile="no" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ac_cv_sig_atomic_t_volatile="yes" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$ac_cv_sig_atomic_t_volatile" = "yes"; then + +printf "%s\n" "#define HAVE_SIG_ATOMIC_T_VOLATILE 1" >>confdefs.h + + fi + ;; + esac + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +printf %s "checking return type of signal handlers... " >&6; } +if test ${ac_cv_type_signal+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +int +main (void) +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_type_signal=int +else $as_nop + ac_cv_type_signal=void +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +printf "%s\n" "$ac_cv_type_signal" >&6; } + +printf "%s\n" "#define RETSIGTYPE $ac_cv_type_signal" >>confdefs.h + + + + + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi + + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recv" >&5 +printf %s "checking for recv... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + +int +main (void) +{ + + recv(0, 0, 0, 0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + curl_cv_recv="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + curl_cv_recv="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$curl_cv_recv" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking types of args and return type for recv" >&5 +printf %s "checking types of args and return type for recv... " >&6; } +if test ${curl_cv_func_recv_args+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + curl_cv_func_recv_args="unknown" + for recv_retv in 'int' 'ssize_t'; do + for recv_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for recv_arg2 in 'char *' 'void *'; do + for recv_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for recv_arg4 in 'int' 'unsigned int'; do + if test "$curl_cv_func_recv_args" = "unknown"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define RECVCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define RECVCALLCONV +#endif + extern $recv_retv RECVCALLCONV + recv($recv_arg1, $recv_arg2, $recv_arg3, $recv_arg4); + +int +main (void) +{ + + $recv_arg1 s=0; + $recv_arg2 buf=0; + $recv_arg3 len=0; + $recv_arg4 flags=0; + $recv_retv res = recv(s, buf, len, flags); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + curl_cv_func_recv_args="$recv_arg1,$recv_arg2,$recv_arg3,$recv_arg4,$recv_retv" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + done + done + done + done + done + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_recv_args" >&5 +printf "%s\n" "$curl_cv_func_recv_args" >&6; } # AC-CACHE-CHECK + if test "$curl_cv_func_recv_args" = "unknown"; then + as_fn_error $? "Cannot find proper types to use for recv args" "$LINENO" 5 + else + recv_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_recv_args" | sed 's/\*/\*/g'` + IFS=$recv_prev_IFS + shift + # + +printf "%s\n" "#define RECV_TYPE_ARG1 $1" >>confdefs.h + + +printf "%s\n" "#define RECV_TYPE_ARG2 $2" >>confdefs.h + + +printf "%s\n" "#define RECV_TYPE_ARG3 $3" >>confdefs.h + + +printf "%s\n" "#define RECV_TYPE_ARG4 $4" >>confdefs.h + + +printf "%s\n" "#define RECV_TYPE_RETV $5" >>confdefs.h + + # + +printf "%s\n" "#define HAVE_RECV 1" >>confdefs.h + + ac_cv_func_recv="yes" + fi + else + as_fn_error $? "Unable to link function recv" "$LINENO" 5 + fi + + + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi + + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recvfrom" >&5 +printf %s "checking for recvfrom... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + +int +main (void) +{ + + recvfrom(0, 0, 0, 0, 0, 0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + curl_cv_recvfrom="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + curl_cv_recvfrom="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$curl_cv_recvfrom" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking types of args and return type for recvfrom" >&5 +printf %s "checking types of args and return type for recvfrom... " >&6; } +if test ${curl_cv_func_recvfrom_args+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + curl_cv_func_recvfrom_args="unknown" + for recvfrom_retv in 'int' 'ssize_t'; do + for recvfrom_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for recvfrom_arg2 in 'char *' 'void *'; do + for recvfrom_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for recvfrom_arg4 in 'int' 'unsigned int'; do + for recvfrom_arg5 in 'struct sockaddr *' 'void *' 'const struct sockaddr *'; do + for recvfrom_arg6 in 'socklen_t *' 'int *' 'unsigned int *' 'size_t *' 'void *'; do + if test "$curl_cv_func_recvfrom_args" = "unknown"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define RECVFROMCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define RECVFROMCALLCONV +#endif + extern $recvfrom_retv RECVFROMCALLCONV + recvfrom($recvfrom_arg1, $recvfrom_arg2, + $recvfrom_arg3, $recvfrom_arg4, + $recvfrom_arg5, $recvfrom_arg6); + +int +main (void) +{ + + $recvfrom_arg1 s=0; + $recvfrom_arg2 buf=0; + $recvfrom_arg3 len=0; + $recvfrom_arg4 flags=0; + $recvfrom_arg5 addr=0; + $recvfrom_arg6 addrlen=0; + $recvfrom_retv res=0; + res = recvfrom(s, buf, len, flags, addr, addrlen); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + curl_cv_func_recvfrom_args="$recvfrom_arg1,$recvfrom_arg2,$recvfrom_arg3,$recvfrom_arg4,$recvfrom_arg5,$recvfrom_arg6,$recvfrom_retv" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + done + done + done + done + done + done + done + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_recvfrom_args" >&5 +printf "%s\n" "$curl_cv_func_recvfrom_args" >&6; } # AC-CACHE-CHECK + # Nearly last minute change for this release starts here + +printf "%s\n" "#define HAVE_RECVFROM 1" >>confdefs.h + + ac_cv_func_recvfrom="yes" + # Nearly last minute change for this release ends here + if test "$curl_cv_func_recvfrom_args" = "unknown"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find proper types to use for recvfrom args" >&5 +printf "%s\n" "$as_me: WARNING: Cannot find proper types to use for recvfrom args" >&2;} + else + recvfrom_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_recvfrom_args" | sed 's/\*/\*/g'` + IFS=$recvfrom_prev_IFS + shift + # + recvfrom_ptrt_arg2=$2 + recvfrom_qual_ptrt_arg5=$5 + recvfrom_ptrt_arg6=$6 + # + +printf "%s\n" "#define RECVFROM_TYPE_ARG1 $1" >>confdefs.h + + +printf "%s\n" "#define RECVFROM_TYPE_ARG3 $3" >>confdefs.h + + +printf "%s\n" "#define RECVFROM_TYPE_ARG4 $4" >>confdefs.h + + +printf "%s\n" "#define RECVFROM_TYPE_RETV $7" >>confdefs.h + + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$recvfrom_qual_ptrt_arg5" in + const*) + recvfrom_qual_arg5=const + recvfrom_ptrt_arg5=`echo $recvfrom_qual_ptrt_arg5 | sed 's/^const //'` + ;; + *) + recvfrom_qual_arg5= + recvfrom_ptrt_arg5=$recvfrom_qual_ptrt_arg5 + ;; + esac + # + recvfrom_type_arg2=`echo $recvfrom_ptrt_arg2 | sed 's/ \*//'` + recvfrom_type_arg5=`echo $recvfrom_ptrt_arg5 | sed 's/ \*//'` + recvfrom_type_arg6=`echo $recvfrom_ptrt_arg6 | sed 's/ \*//'` + # + +printf "%s\n" "#define RECVFROM_TYPE_ARG2 $recvfrom_type_arg2" >>confdefs.h + + +printf "%s\n" "#define RECVFROM_QUAL_ARG5 $recvfrom_qual_arg5" >>confdefs.h + + +printf "%s\n" "#define RECVFROM_TYPE_ARG5 $recvfrom_type_arg5" >>confdefs.h + + +printf "%s\n" "#define RECVFROM_TYPE_ARG6 $recvfrom_type_arg6" >>confdefs.h + + # + if test "$recvfrom_type_arg2" = "void"; then + +printf "%s\n" "#define RECVFROM_TYPE_ARG2_IS_VOID 1" >>confdefs.h + + fi + if test "$recvfrom_type_arg5" = "void"; then + +printf "%s\n" "#define RECVFROM_TYPE_ARG5_IS_VOID 1" >>confdefs.h + + fi + if test "$recvfrom_type_arg6" = "void"; then + +printf "%s\n" "#define RECVFROM_TYPE_ARG6_IS_VOID 1" >>confdefs.h + + fi + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + +printf "%s\n" "#define HAVE_RECVFROM 1" >>confdefs.h + + ac_cv_func_recvfrom="yes" + fi + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Unable to link function recvfrom" >&5 +printf "%s\n" "$as_me: WARNING: Unable to link function recvfrom" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Your system will be vulnerable to some forms of DNS cache poisoning" >&5 +printf "%s\n" "$as_me: WARNING: Your system will be vulnerable to some forms of DNS cache poisoning" >&2;} + fi + + + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi + + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for send" >&5 +printf %s "checking for send... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + +int +main (void) +{ + + send(0, 0, 0, 0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + curl_cv_send="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + curl_cv_send="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$curl_cv_send" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking types of args and return type for send" >&5 +printf %s "checking types of args and return type for send... " >&6; } +if test ${curl_cv_func_send_args+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + curl_cv_func_send_args="unknown" + for send_retv in 'int' 'ssize_t'; do + for send_arg1 in 'int' 'ssize_t' 'SOCKET'; do + for send_arg2 in 'char *' 'void *' 'const char *' 'const void *'; do + for send_arg3 in 'size_t' 'int' 'socklen_t' 'unsigned int'; do + for send_arg4 in 'int' 'unsigned int'; do + if test "$curl_cv_func_send_args" = "unknown"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#define SENDCALLCONV PASCAL +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#define SENDCALLCONV +#endif + extern $send_retv SENDCALLCONV + send($send_arg1, $send_arg2, $send_arg3, $send_arg4); + +int +main (void) +{ + + $send_arg1 s=0; + $send_arg3 len=0; + $send_arg4 flags=0; + $send_retv res = send(s, 0, len, flags); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + curl_cv_func_send_args="$send_arg1,$send_arg2,$send_arg3,$send_arg4,$send_retv" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + done + done + done + done + done + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_send_args" >&5 +printf "%s\n" "$curl_cv_func_send_args" >&6; } # AC-CACHE-CHECK + if test "$curl_cv_func_send_args" = "unknown"; then + as_fn_error $? "Cannot find proper types to use for send args" "$LINENO" 5 + else + send_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_send_args" | sed 's/\*/\*/g'` + IFS=$send_prev_IFS + shift + # + send_qual_type_arg2=$2 + # + +printf "%s\n" "#define SEND_TYPE_ARG1 $1" >>confdefs.h + + +printf "%s\n" "#define SEND_TYPE_ARG3 $3" >>confdefs.h + + +printf "%s\n" "#define SEND_TYPE_ARG4 $4" >>confdefs.h + + +printf "%s\n" "#define SEND_TYPE_RETV $5" >>confdefs.h + + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$send_qual_type_arg2" in + const*) + send_qual_arg2=const + send_type_arg2=`echo $send_qual_type_arg2 | sed 's/^const //'` + ;; + *) + send_qual_arg2= + send_type_arg2=$send_qual_type_arg2 + ;; + esac + # + +printf "%s\n" "#define SEND_QUAL_ARG2 $send_qual_arg2" >>confdefs.h + + +printf "%s\n" "#define SEND_TYPE_ARG2 $send_type_arg2" >>confdefs.h + + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + +printf "%s\n" "#define HAVE_SEND 1" >>confdefs.h + + ac_cv_func_send="yes" + fi + else + as_fn_error $? "Unable to link function send" "$LINENO" 5 + fi + + + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MSG_NOSIGNAL" >&5 +printf %s "checking for MSG_NOSIGNAL... " >&6; } +if test ${ac_cv_msg_nosignal+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + +int +main (void) +{ + + int flag=MSG_NOSIGNAL; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + ac_cv_msg_nosignal="yes" + +else $as_nop + + ac_cv_msg_nosignal="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_msg_nosignal" >&5 +printf "%s\n" "$ac_cv_msg_nosignal" >&6; } + case "$ac_cv_msg_nosignal" in + yes) + +printf "%s\n" "#define HAVE_MSG_NOSIGNAL 1" >>confdefs.h + + ;; + esac + + + +cares_includes_socket="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SOCKET_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_socket +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "socket.h" "ac_cv_header_socket_h" "$cares_includes_socket +" +if test "x$ac_cv_header_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SOCKET_H 1" >>confdefs.h + +fi + + + + # + tst_links_closesocket="unknown" + tst_proto_closesocket="unknown" + tst_compi_closesocket="unknown" + tst_allow_closesocket="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if closesocket can be linked" >&5 +printf %s "checking if closesocket can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_socket + +int +main (void) +{ + + if(0 != closesocket(0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_closesocket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_closesocket="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_closesocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if closesocket is prototyped" >&5 +printf %s "checking if closesocket is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_winsock2 + $cares_includes_socket + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "closesocket" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_closesocket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_closesocket="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_closesocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if closesocket is compilable" >&5 +printf %s "checking if closesocket is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_socket + +int +main (void) +{ + + if(0 != closesocket(0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_closesocket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_closesocket="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_closesocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if closesocket usage allowed" >&5 +printf %s "checking if closesocket usage allowed... " >&6; } + if test "x$cares_disallow_closesocket" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_closesocket="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_closesocket="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if closesocket might be used" >&5 +printf %s "checking if closesocket might be used... " >&6; } + if test "$tst_links_closesocket" = "yes" && + test "$tst_proto_closesocket" = "yes" && + test "$tst_compi_closesocket" = "yes" && + test "$tst_allow_closesocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_CLOSESOCKET 1" >>confdefs.h + + ac_cv_func_closesocket="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_closesocket="no" + fi + + + # + tst_links_closesocket_camel="unknown" + tst_proto_closesocket_camel="unknown" + tst_compi_closesocket_camel="unknown" + tst_allow_closesocket_camel="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if CloseSocket can be linked" >&5 +printf %s "checking if CloseSocket can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_sys_socket + +int +main (void) +{ + + if(0 != CloseSocket(0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_closesocket_camel="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_closesocket_camel="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_closesocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if CloseSocket is prototyped" >&5 +printf %s "checking if CloseSocket is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_sys_socket + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "CloseSocket" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_closesocket_camel="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_closesocket_camel="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_closesocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if CloseSocket is compilable" >&5 +printf %s "checking if CloseSocket is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_sys_socket + +int +main (void) +{ + + if(0 != CloseSocket(0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_closesocket_camel="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_closesocket_camel="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_closesocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if CloseSocket usage allowed" >&5 +printf %s "checking if CloseSocket usage allowed... " >&6; } + if test "x$cares_disallow_closesocket_camel" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_closesocket_camel="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_closesocket_camel="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if CloseSocket might be used" >&5 +printf %s "checking if CloseSocket might be used... " >&6; } + if test "$tst_links_closesocket_camel" = "yes" && + test "$tst_proto_closesocket_camel" = "yes" && + test "$tst_compi_closesocket_camel" = "yes" && + test "$tst_allow_closesocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_CLOSESOCKET_CAMEL 1" >>confdefs.h + + ac_cv_func_closesocket_camel="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_closesocket_camel="no" + fi + + + # + tst_links_connect="unknown" + tst_proto_connect="unknown" + tst_compi_connect="unknown" + tst_allow_connect="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect can be linked" >&5 +printf %s "checking if connect can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + +int +main (void) +{ + + if(0 != connect(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_connect="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_connect="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_connect" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect is prototyped" >&5 +printf %s "checking if connect is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "connect" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_connect="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_connect="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_connect" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect is compilable" >&5 +printf %s "checking if connect is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + +int +main (void) +{ + + if(0 != connect(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_connect="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_connect="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_connect" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect usage allowed" >&5 +printf %s "checking if connect usage allowed... " >&6; } + if test "x$cares_disallow_connect" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_connect="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_connect="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if connect might be used" >&5 +printf %s "checking if connect might be used... " >&6; } + if test "$tst_links_connect" = "yes" && + test "$tst_proto_connect" = "yes" && + test "$tst_compi_connect" = "yes" && + test "$tst_allow_connect" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_CONNECT 1" >>confdefs.h + + ac_cv_func_connect="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_connect="no" + fi + + +cares_includes_fcntl="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_FCNTL_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_fcntl +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$cares_includes_fcntl +" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$cares_includes_fcntl +" +if test "x$ac_cv_header_fcntl_h" = xyes +then : + printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h + +fi + + + + # + tst_links_fcntl="unknown" + tst_proto_fcntl="unknown" + tst_compi_fcntl="unknown" + tst_allow_fcntl="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if fcntl can be linked" >&5 +printf %s "checking if fcntl can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define fcntl to an innocuous variant, in case declares fcntl. + For example, HP-UX 11i declares gettimeofday. */ +#define fcntl innocuous_fcntl + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char fcntl (); below. */ + +#include +#undef fcntl + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char fcntl (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_fcntl || defined __stub___fcntl +choke me +#endif + +int +main (void) +{ +return fcntl (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_fcntl="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_fcntl="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_fcntl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if fcntl is prototyped" >&5 +printf %s "checking if fcntl is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_fcntl + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "fcntl" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_fcntl="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_fcntl="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_fcntl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if fcntl is compilable" >&5 +printf %s "checking if fcntl is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_fcntl + +int +main (void) +{ + + if(0 != fcntl(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_fcntl="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_fcntl="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_fcntl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if fcntl usage allowed" >&5 +printf %s "checking if fcntl usage allowed... " >&6; } + if test "x$cares_disallow_fcntl" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_fcntl="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_fcntl="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if fcntl might be used" >&5 +printf %s "checking if fcntl might be used... " >&6; } + if test "$tst_links_fcntl" = "yes" && + test "$tst_proto_fcntl" = "yes" && + test "$tst_compi_fcntl" = "yes" && + test "$tst_allow_fcntl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_FCNTL 1" >>confdefs.h + + ac_cv_func_fcntl="yes" + + # + tst_compi_fcntl_o_nonblock="unknown" + tst_allow_fcntl_o_nonblock="unknown" + # + case $host_os in + sunos4* | aix3* | beos*) + cares_disallow_fcntl_o_nonblock="yes" + ;; + esac + # + if test "$ac_cv_func_fcntl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if fcntl O_NONBLOCK is compilable" >&5 +printf %s "checking if fcntl O_NONBLOCK is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_fcntl + +int +main (void) +{ + + int flags = 0; + if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_fcntl_o_nonblock="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_fcntl_o_nonblock="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_fcntl_o_nonblock" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if fcntl O_NONBLOCK usage allowed" >&5 +printf %s "checking if fcntl O_NONBLOCK usage allowed... " >&6; } + if test "x$cares_disallow_fcntl_o_nonblock" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_fcntl_o_nonblock="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_fcntl_o_nonblock="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if fcntl O_NONBLOCK might be used" >&5 +printf %s "checking if fcntl O_NONBLOCK might be used... " >&6; } + if test "$tst_compi_fcntl_o_nonblock" = "yes" && + test "$tst_allow_fcntl_o_nonblock" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_FCNTL_O_NONBLOCK 1" >>confdefs.h + + ac_cv_func_fcntl_o_nonblock="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_fcntl_o_nonblock="no" + fi + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_fcntl="no" + fi + + +cares_includes_netdb="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_netdb +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$cares_includes_netdb +" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h + +fi + + + + # + tst_links_freeaddrinfo="unknown" + tst_proto_freeaddrinfo="unknown" + tst_compi_freeaddrinfo="unknown" + tst_allow_freeaddrinfo="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo can be linked" >&5 +printf %s "checking if freeaddrinfo can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + +int +main (void) +{ + + freeaddrinfo(0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_freeaddrinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_freeaddrinfo="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_freeaddrinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo is prototyped" >&5 +printf %s "checking if freeaddrinfo is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "freeaddrinfo" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_freeaddrinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_freeaddrinfo="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_freeaddrinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo is compilable" >&5 +printf %s "checking if freeaddrinfo is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + +int +main (void) +{ + + freeaddrinfo(0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_freeaddrinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_freeaddrinfo="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_freeaddrinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo usage allowed" >&5 +printf %s "checking if freeaddrinfo usage allowed... " >&6; } + if test "x$cares_disallow_freeaddrinfo" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_freeaddrinfo="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_freeaddrinfo="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if freeaddrinfo might be used" >&5 +printf %s "checking if freeaddrinfo might be used... " >&6; } + if test "$tst_links_freeaddrinfo" = "yes" && + test "$tst_proto_freeaddrinfo" = "yes" && + test "$tst_compi_freeaddrinfo" = "yes" && + test "$tst_allow_freeaddrinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_FREEADDRINFO 1" >>confdefs.h + + ac_cv_func_freeaddrinfo="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_freeaddrinfo="no" + fi + + +cares_includes_stdlib="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_STDLIB_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_stdlib +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$cares_includes_stdlib +" +if test "x$ac_cv_header_stdlib_h" = xyes +then : + printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h + +fi + + + +cares_includes_string="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_STRING_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_string +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$cares_includes_string +" +if test "x$ac_cv_header_string_h" = xyes +then : + printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$cares_includes_string +" +if test "x$ac_cv_header_strings_h" = xyes +then : + printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h + +fi + + + + # + tst_links_getaddrinfo="unknown" + tst_proto_getaddrinfo="unknown" + tst_compi_getaddrinfo="unknown" + tst_works_getaddrinfo="unknown" + tst_allow_getaddrinfo="unknown" + tst_tsafe_getaddrinfo="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo can be linked" >&5 +printf %s "checking if getaddrinfo can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + +int +main (void) +{ + + if(0 != getaddrinfo(0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_getaddrinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_getaddrinfo="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_getaddrinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo is prototyped" >&5 +printf %s "checking if getaddrinfo is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getaddrinfo" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_getaddrinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_getaddrinfo="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_getaddrinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo is compilable" >&5 +printf %s "checking if getaddrinfo is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + +int +main (void) +{ + + if(0 != getaddrinfo(0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_getaddrinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_getaddrinfo="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "x$cross_compiling" != "xyes" && + test "$tst_compi_getaddrinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo seems to work" >&5 +printf %s "checking if getaddrinfo seems to work... " >&6; } + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_ws2tcpip + $cares_includes_stdlib + $cares_includes_string + $cares_includes_sys_socket + $cares_includes_netdb + +int +main (void) +{ + + struct addrinfo hints; + struct addrinfo *ai = 0; + int error; + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_NUMERICHOST; + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + error = getaddrinfo("127.0.0.1", 0, &hints, &ai); + if(error || !ai) + exit(1); /* fail */ + else + exit(0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_works_getaddrinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_works_getaddrinfo="no" + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + # + if test "$tst_compi_getaddrinfo" = "yes" && + test "$tst_works_getaddrinfo" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo usage allowed" >&5 +printf %s "checking if getaddrinfo usage allowed... " >&6; } + if test "x$cares_disallow_getaddrinfo" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_getaddrinfo="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_getaddrinfo="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo might be used" >&5 +printf %s "checking if getaddrinfo might be used... " >&6; } + if test "$tst_links_getaddrinfo" = "yes" && + test "$tst_proto_getaddrinfo" = "yes" && + test "$tst_compi_getaddrinfo" = "yes" && + test "$tst_allow_getaddrinfo" = "yes" && + test "$tst_works_getaddrinfo" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_GETADDRINFO 1" >>confdefs.h + + ac_cv_func_getaddrinfo="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_getaddrinfo="no" + ac_cv_func_getaddrinfo_threadsafe="no" + fi + # + if test "$ac_cv_func_getaddrinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getaddrinfo is threadsafe" >&5 +printf %s "checking if getaddrinfo is threadsafe... " >&6; } + case $host_os in + aix[1234].* | aix5.[01].*) + tst_tsafe_getaddrinfo="no" + ;; + aix*) + tst_tsafe_getaddrinfo="yes" + ;; + darwin[12345].*) + tst_tsafe_getaddrinfo="no" + ;; + darwin*) + tst_tsafe_getaddrinfo="yes" + ;; + freebsd[1234].* | freebsd5.[1234]*) + tst_tsafe_getaddrinfo="no" + ;; + freebsd*) + tst_tsafe_getaddrinfo="yes" + ;; + hpux[123456789].* | hpux10.* | hpux11.0* | hpux11.10*) + tst_tsafe_getaddrinfo="no" + ;; + hpux*) + tst_tsafe_getaddrinfo="yes" + ;; + netbsd[123].*) + tst_tsafe_getaddrinfo="no" + ;; + netbsd*) + tst_tsafe_getaddrinfo="yes" + ;; + *bsd*) + tst_tsafe_getaddrinfo="no" + ;; + solaris2*) + tst_tsafe_getaddrinfo="yes" + ;; + esac + if test "$tst_tsafe_getaddrinfo" = "unknown" && + test "$ac_cv_native_windows" = "yes"; then + tst_tsafe_getaddrinfo="yes" + fi + if test "$tst_tsafe_getaddrinfo" = "unknown"; then + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_sys_socket + $cares_includes_netdb + +int main (void) +{ +#ifdef h_errno + return 0; +#else + force compilation error +#endif +} + + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tst_symbol_defined="yes" + +else $as_nop + + tst_symbol_defined="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$tst_symbol_defined" = "yes"; then + curl_cv_have_def_h_errno=yes + + else + curl_cv_have_def_h_errno=no + + fi + + if test "$curl_cv_have_def_h_errno" = "yes"; then + tst_h_errno_macro="yes" + else + tst_h_errno_macro="no" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_sys_socket + $cares_includes_netdb + +int +main (void) +{ + + h_errno = 2; + if(0 != h_errno) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tst_h_errno_modifiable_lvalue="yes" + +else $as_nop + + tst_h_errno_modifiable_lvalue="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + +#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L) + return 0; +#elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700) + return 0; +#else + force compilation error +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tst_h_errno_sbs_issue_7="yes" + +else $as_nop + + tst_h_errno_sbs_issue_7="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$tst_h_errno_macro" = "no" && + test "$tst_h_errno_modifiable_lvalue" = "no" && + test "$tst_h_errno_sbs_issue_7" = "no"; then + tst_tsafe_getaddrinfo="no" + else + tst_tsafe_getaddrinfo="yes" + fi + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tst_tsafe_getaddrinfo" >&5 +printf "%s\n" "$tst_tsafe_getaddrinfo" >&6; } + if test "$tst_tsafe_getaddrinfo" = "yes"; then + +printf "%s\n" "#define HAVE_GETADDRINFO_THREADSAFE 1" >>confdefs.h + + ac_cv_func_getaddrinfo_threadsafe="yes" + else + ac_cv_func_getaddrinfo_threadsafe="no" + fi + fi + + + # + tst_links_getenv="unknown" + tst_proto_getenv="unknown" + tst_compi_getenv="unknown" + tst_allow_getenv="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getenv can be linked" >&5 +printf %s "checking if getenv can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define getenv to an innocuous variant, in case declares getenv. + For example, HP-UX 11i declares gettimeofday. */ +#define getenv innocuous_getenv + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getenv (); below. */ + +#include +#undef getenv + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getenv (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_getenv || defined __stub___getenv +choke me +#endif + +int +main (void) +{ +return getenv (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_getenv="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_getenv="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_getenv" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getenv is prototyped" >&5 +printf %s "checking if getenv is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_stdlib + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getenv" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_getenv="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_getenv="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_getenv" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getenv is compilable" >&5 +printf %s "checking if getenv is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stdlib + +int +main (void) +{ + + if(0 != getenv(0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_getenv="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_getenv="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_getenv" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getenv usage allowed" >&5 +printf %s "checking if getenv usage allowed... " >&6; } + if test "x$cares_disallow_getenv" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_getenv="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_getenv="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getenv might be used" >&5 +printf %s "checking if getenv might be used... " >&6; } + if test "$tst_links_getenv" = "yes" && + test "$tst_proto_getenv" = "yes" && + test "$tst_compi_getenv" = "yes" && + test "$tst_allow_getenv" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_GETENV 1" >>confdefs.h + + ac_cv_func_getenv="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_getenv="no" + fi + + + # + tst_links_gethostbyaddr="unknown" + tst_proto_gethostbyaddr="unknown" + tst_compi_gethostbyaddr="unknown" + tst_allow_gethostbyaddr="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr can be linked" >&5 +printf %s "checking if gethostbyaddr can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_netdb + +int +main (void) +{ + + if(0 != gethostbyaddr(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_gethostbyaddr="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_gethostbyaddr="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_gethostbyaddr" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr is prototyped" >&5 +printf %s "checking if gethostbyaddr is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_winsock2 + $cares_includes_netdb + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gethostbyaddr" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_gethostbyaddr="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_gethostbyaddr="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_gethostbyaddr" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr is compilable" >&5 +printf %s "checking if gethostbyaddr is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_netdb + +int +main (void) +{ + + if(0 != gethostbyaddr(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_gethostbyaddr="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_gethostbyaddr="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_gethostbyaddr" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr usage allowed" >&5 +printf %s "checking if gethostbyaddr usage allowed... " >&6; } + if test "x$cares_disallow_gethostbyaddr" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_gethostbyaddr="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_gethostbyaddr="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyaddr might be used" >&5 +printf %s "checking if gethostbyaddr might be used... " >&6; } + if test "$tst_links_gethostbyaddr" = "yes" && + test "$tst_proto_gethostbyaddr" = "yes" && + test "$tst_compi_gethostbyaddr" = "yes" && + test "$tst_allow_gethostbyaddr" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_GETHOSTBYADDR 1" >>confdefs.h + + ac_cv_func_gethostbyaddr="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_gethostbyaddr="no" + fi + + + # + tst_links_gethostbyname="unknown" + tst_proto_gethostbyname="unknown" + tst_compi_gethostbyname="unknown" + tst_allow_gethostbyname="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyname can be linked" >&5 +printf %s "checking if gethostbyname can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_netdb + +int +main (void) +{ + + if(0 != gethostbyname(0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_gethostbyname="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_gethostbyname="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_gethostbyname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyname is prototyped" >&5 +printf %s "checking if gethostbyname is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_winsock2 + $cares_includes_netdb + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gethostbyname" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_gethostbyname="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_gethostbyname="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_gethostbyname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyname is compilable" >&5 +printf %s "checking if gethostbyname is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_netdb + +int +main (void) +{ + + if(0 != gethostbyname(0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_gethostbyname="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_gethostbyname="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_gethostbyname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyname usage allowed" >&5 +printf %s "checking if gethostbyname usage allowed... " >&6; } + if test "x$cares_disallow_gethostbyname" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_gethostbyname="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_gethostbyname="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostbyname might be used" >&5 +printf %s "checking if gethostbyname might be used... " >&6; } + if test "$tst_links_gethostbyname" = "yes" && + test "$tst_proto_gethostbyname" = "yes" && + test "$tst_compi_gethostbyname" = "yes" && + test "$tst_allow_gethostbyname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h + + ac_cv_func_gethostbyname="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_gethostbyname="no" + fi + + +cares_includes_unistd="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_unistd +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$cares_includes_unistd +" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h + +fi + + + + # + tst_links_gethostname="unknown" + tst_proto_gethostname="unknown" + tst_compi_gethostname="unknown" + tst_allow_gethostname="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostname can be linked" >&5 +printf %s "checking if gethostname can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_unistd + +int +main (void) +{ + + if(0 != gethostname(0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_gethostname="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_gethostname="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_gethostname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostname is prototyped" >&5 +printf %s "checking if gethostname is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_winsock2 + $cares_includes_unistd + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gethostname" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_gethostname="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_gethostname="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_gethostname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostname is compilable" >&5 +printf %s "checking if gethostname is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_unistd + +int +main (void) +{ + + if(0 != gethostname(0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_gethostname="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_gethostname="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_gethostname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostname arg 2 data type" >&5 +printf %s "checking for gethostname arg 2 data type... " >&6; } + tst_gethostname_type_arg2="unknown" + for tst_arg1 in 'char *' 'unsigned char *' 'void *'; do + for tst_arg2 in 'int' 'unsigned int' 'size_t'; do + if test "$tst_gethostname_type_arg2" = "unknown"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_unistd + $cares_preprocess_callconv + extern int FUNCALLCONV gethostname($tst_arg1, $tst_arg2); + +int +main (void) +{ + + if(0 != gethostname(0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + tst_gethostname_type_arg2="$tst_arg2" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + done + done + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tst_gethostname_type_arg2" >&5 +printf "%s\n" "$tst_gethostname_type_arg2" >&6; } + if test "$tst_gethostname_type_arg2" != "unknown"; then + +printf "%s\n" "#define GETHOSTNAME_TYPE_ARG2 $tst_gethostname_type_arg2" >>confdefs.h + + fi + fi + # + if test "$tst_compi_gethostname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostname usage allowed" >&5 +printf %s "checking if gethostname usage allowed... " >&6; } + if test "x$cares_disallow_gethostname" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_gethostname="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_gethostname="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gethostname might be used" >&5 +printf %s "checking if gethostname might be used... " >&6; } + if test "$tst_links_gethostname" = "yes" && + test "$tst_proto_gethostname" = "yes" && + test "$tst_compi_gethostname" = "yes" && + test "$tst_allow_gethostname" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_GETHOSTNAME 1" >>confdefs.h + + ac_cv_func_gethostname="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_gethostname="no" + fi + + + # + tst_links_getservbyport_r="unknown" + tst_proto_getservbyport_r="unknown" + tst_compi_getservbyport_r="unknown" + tst_allow_getservbyport_r="unknown" + tst_nargs_getservbyport_r="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r can be linked" >&5 +printf %s "checking if getservbyport_r can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define getservbyport_r to an innocuous variant, in case declares getservbyport_r. + For example, HP-UX 11i declares gettimeofday. */ +#define getservbyport_r innocuous_getservbyport_r + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getservbyport_r (); below. */ + +#include +#undef getservbyport_r + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getservbyport_r (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_getservbyport_r || defined __stub___getservbyport_r +choke me +#endif + +int +main (void) +{ +return getservbyport_r (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_getservbyport_r="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_getservbyport_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_getservbyport_r" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r is prototyped" >&5 +printf %s "checking if getservbyport_r is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_netdb + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getservbyport_r" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_getservbyport_r="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_getservbyport_r="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_getservbyport_r" = "yes"; then + if test "$tst_nargs_getservbyport_r" = "unknown"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r takes 4 args." >&5 +printf %s "checking if getservbyport_r takes 4 args.... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_netdb + +int +main (void) +{ + + if(0 != getservbyport_r(0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_getservbyport_r="yes" + tst_nargs_getservbyport_r="4" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_getservbyport_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + if test "$tst_nargs_getservbyport_r" = "unknown"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r takes 5 args." >&5 +printf %s "checking if getservbyport_r takes 5 args.... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_netdb + +int +main (void) +{ + + if(0 != getservbyport_r(0, 0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_getservbyport_r="yes" + tst_nargs_getservbyport_r="5" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_getservbyport_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + if test "$tst_nargs_getservbyport_r" = "unknown"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r takes 6 args." >&5 +printf %s "checking if getservbyport_r takes 6 args.... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_netdb + +int +main (void) +{ + + if(0 != getservbyport_r(0, 0, 0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_getservbyport_r="yes" + tst_nargs_getservbyport_r="6" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_getservbyport_r="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r is compilable" >&5 +printf %s "checking if getservbyport_r is compilable... " >&6; } + if test "$tst_compi_getservbyport_r" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + fi + # + if test "$tst_compi_getservbyport_r" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r usage allowed" >&5 +printf %s "checking if getservbyport_r usage allowed... " >&6; } + if test "x$cares_disallow_getservbyport_r" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_getservbyport_r="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_getservbyport_r="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getservbyport_r might be used" >&5 +printf %s "checking if getservbyport_r might be used... " >&6; } + if test "$tst_links_getservbyport_r" = "yes" && + test "$tst_proto_getservbyport_r" = "yes" && + test "$tst_compi_getservbyport_r" = "yes" && + test "$tst_allow_getservbyport_r" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_GETSERVBYPORT_R 1" >>confdefs.h + + +printf "%s\n" "#define GETSERVBYPORT_R_ARGS $tst_nargs_getservbyport_r" >>confdefs.h + + if test "$tst_nargs_getservbyport_r" -eq "4"; then + +printf "%s\n" "#define GETSERVBYPORT_R_BUFSIZE sizeof(struct servent_data)" >>confdefs.h + + else + +printf "%s\n" "#define GETSERVBYPORT_R_BUFSIZE 4096" >>confdefs.h + + fi + ac_cv_func_getservbyport_r="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_getservbyport_r="no" + fi + + +cares_includes_arpa_inet="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_arpa_inet +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$cares_includes_arpa_inet +" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$cares_includes_arpa_inet +" +if test "x$ac_cv_header_netinet_in_h" = xyes +then : + printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$cares_includes_arpa_inet +" +if test "x$ac_cv_header_arpa_inet_h" = xyes +then : + printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h + +fi + + + + # + tst_links_inet_net_pton="unknown" + tst_proto_inet_net_pton="unknown" + tst_compi_inet_net_pton="unknown" + tst_works_inet_net_pton="unknown" + tst_allow_inet_net_pton="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_net_pton can be linked" >&5 +printf %s "checking if inet_net_pton can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define inet_net_pton to an innocuous variant, in case declares inet_net_pton. + For example, HP-UX 11i declares gettimeofday. */ +#define inet_net_pton innocuous_inet_net_pton + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char inet_net_pton (); below. */ + +#include +#undef inet_net_pton + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inet_net_pton (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_inet_net_pton || defined __stub___inet_net_pton +choke me +#endif + +int +main (void) +{ +return inet_net_pton (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_inet_net_pton="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_inet_net_pton="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_inet_net_pton" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_net_pton is prototyped" >&5 +printf %s "checking if inet_net_pton is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_arpa_inet + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "inet_net_pton" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_inet_net_pton="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_inet_net_pton="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_inet_net_pton" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_net_pton is compilable" >&5 +printf %s "checking if inet_net_pton is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_arpa_inet + +int +main (void) +{ + + if(0 != inet_net_pton(0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_inet_net_pton="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_inet_net_pton="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "x$cross_compiling" != "xyes" && + test "$tst_compi_inet_net_pton" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_net_pton seems to work" >&5 +printf %s "checking if inet_net_pton seems to work... " >&6; } + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stdlib + $cares_includes_arpa_inet + $cares_includes_string + +int +main (void) +{ + + unsigned char ipv6a[16+1]; + unsigned char ipv4a[4+1]; + const char *ipv6net1 = "fe80::214:4fff:fe0b:76c8"; + const char *ipv6net2 = "::fffe:7f00:1"; + const char *ipv6net3 = "7f20:1::/64"; + const char *ipv6net4 = "7f20:1::/2147483649"; + const char *ipv4net1 = "192.168.100.1"; + const char *ipv4net2 = "192.168.100/32"; + const char *ipv4net3 = "192.168.100.1/2147483649"; + /* - */ + memset(ipv4a, 1, sizeof(ipv4a)); + if(32 != inet_net_pton(AF_INET, ipv4net1, ipv4a, 4)) + exit(1); /* fail */ + /* - */ + if( (ipv4a[0x00] != 0xc0) || + (ipv4a[0x01] != 0xa8) || + (ipv4a[0x02] != 0x64) || + (ipv4a[0x03] != 0x01) || + (ipv4a[0x04] != 0x01) ) + exit(1); /* fail */ + /* - */ + memset(ipv4a, 1, sizeof(ipv4a)); + if(32 != inet_net_pton(AF_INET, ipv4net2, ipv4a, 4)) + exit(1); /* fail */ + /* - */ + if( (ipv4a[0x00] != 0xc0) || + (ipv4a[0x01] != 0xa8) || + (ipv4a[0x02] != 0x64) || + (ipv4a[0x03] != 0x00) || + (ipv4a[0x04] != 0x01) ) + exit(1); /* fail */ + /* - */ + memset(ipv4a, 1, sizeof(ipv4a)); + if(-1 != inet_net_pton(AF_INET, ipv4net3, ipv4a, 4)) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 1, sizeof(ipv6a)); + if(128 != inet_net_pton(AF_INET6, ipv6net1, ipv6a, 16)) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0x00] != 0xfe) || + (ipv6a[0x01] != 0x80) || + (ipv6a[0x08] != 0x02) || + (ipv6a[0x09] != 0x14) || + (ipv6a[0x0a] != 0x4f) || + (ipv6a[0x0b] != 0xff) || + (ipv6a[0x0c] != 0xfe) || + (ipv6a[0x0d] != 0x0b) || + (ipv6a[0x0e] != 0x76) || + (ipv6a[0x0f] != 0xc8) || + (ipv6a[0x10] != 0x01) ) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0x02] != 0x0) || + (ipv6a[0x03] != 0x0) || + (ipv6a[0x04] != 0x0) || + (ipv6a[0x05] != 0x0) || + (ipv6a[0x06] != 0x0) || + (ipv6a[0x07] != 0x0) ) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 0, sizeof(ipv6a)); + ipv6a[0x10] = 0x01; + if(128 != inet_net_pton(AF_INET6, ipv6net2, ipv6a, 16)) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0x0a] != 0xff) || + (ipv6a[0x0b] != 0xfe) || + (ipv6a[0x0c] != 0x7f) || + (ipv6a[0x0f] != 0x01) || + (ipv6a[0x10] != 0x01) ) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0x00] != 0x0) || + (ipv6a[0x01] != 0x0) || + (ipv6a[0x02] != 0x0) || + (ipv6a[0x03] != 0x0) || + (ipv6a[0x04] != 0x0) || + (ipv6a[0x05] != 0x0) || + (ipv6a[0x06] != 0x0) || + (ipv6a[0x07] != 0x0) || + (ipv6a[0x08] != 0x0) || + (ipv6a[0x09] != 0x0) || + (ipv6a[0x0d] != 0x0) || + (ipv6a[0x0e] != 0x0) ) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 1, sizeof(ipv6a)); + if(64 != inet_net_pton(AF_INET6, ipv6net3, ipv6a, 16)) + exit(1); /* fail */ + if( (ipv6a[0x00] != 0x7f) || + (ipv6a[0x01] != 0x20) || + (ipv6a[0x03] != 0x01) || + (ipv6a[0x08] != 0x01) || + (ipv6a[0x09] != 0x01) || + (ipv6a[0x0a] != 0x01) || + (ipv6a[0x0b] != 0x01) || + (ipv6a[0x0c] != 0x01) || + (ipv6a[0x0d] != 0x01) || + (ipv6a[0x0e] != 0x01) || + (ipv6a[0x0f] != 0x01) || + (ipv6a[0x10] != 0x01) ) + exit(1); /* fail */ + if( (ipv6a[0x02] != 0x0) || + (ipv6a[0x04] != 0x0) || + (ipv6a[0x05] != 0x0) || + (ipv6a[0x06] != 0x0) || + (ipv6a[0x07] != 0x0) || + (ipv6a[0x07] != 0x0) ) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 1, sizeof(ipv6a)); + if(-1 != inet_net_pton(AF_INET6, ipv6net4, ipv6a, 16)) + exit(1); /* fail */ + /* - */ + exit(0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_works_inet_net_pton="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_works_inet_net_pton="no" + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + # + if test "$tst_compi_inet_net_pton" = "yes" && + test "$tst_works_inet_net_pton" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_net_pton usage allowed" >&5 +printf %s "checking if inet_net_pton usage allowed... " >&6; } + if test "x$cares_disallow_inet_net_pton" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_inet_net_pton="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_inet_net_pton="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_net_pton might be used" >&5 +printf %s "checking if inet_net_pton might be used... " >&6; } + if test "$tst_links_inet_net_pton" = "yes" && + test "$tst_proto_inet_net_pton" = "yes" && + test "$tst_compi_inet_net_pton" = "yes" && + test "$tst_allow_inet_net_pton" = "yes" && + test "$tst_works_inet_net_pton" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_INET_NET_PTON 1" >>confdefs.h + + ac_cv_func_inet_net_pton="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_inet_net_pton="no" + fi + + + # + tst_links_inet_ntop="unknown" + tst_proto_inet_ntop="unknown" + tst_compi_inet_ntop="unknown" + tst_works_inet_ntop="unknown" + tst_allow_inet_ntop="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_ntop can be linked" >&5 +printf %s "checking if inet_ntop can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define inet_ntop to an innocuous variant, in case declares inet_ntop. + For example, HP-UX 11i declares gettimeofday. */ +#define inet_ntop innocuous_inet_ntop + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char inet_ntop (); below. */ + +#include +#undef inet_ntop + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inet_ntop (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_inet_ntop || defined __stub___inet_ntop +choke me +#endif + +int +main (void) +{ +return inet_ntop (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_inet_ntop="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_inet_ntop="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_inet_ntop" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_ntop is prototyped" >&5 +printf %s "checking if inet_ntop is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_arpa_inet + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "inet_ntop" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_inet_ntop="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_inet_ntop="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_inet_ntop" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_ntop is compilable" >&5 +printf %s "checking if inet_ntop is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_arpa_inet + +int +main (void) +{ + + if(0 != inet_ntop(0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_inet_ntop="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_inet_ntop="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "x$cross_compiling" != "xyes" && + test "$tst_compi_inet_ntop" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_ntop seems to work" >&5 +printf %s "checking if inet_ntop seems to work... " >&6; } + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stdlib + $cares_includes_arpa_inet + $cares_includes_string + +int +main (void) +{ + + char ipv6res[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; + char ipv4res[sizeof "255.255.255.255"]; + unsigned char ipv6a[26]; + unsigned char ipv4a[5]; + char *ipv6ptr = 0; + char *ipv4ptr = 0; + /* - */ + ipv4res[0] = '\0'; + ipv4a[0] = 0xc0; + ipv4a[1] = 0xa8; + ipv4a[2] = 0x64; + ipv4a[3] = 0x01; + ipv4a[4] = 0x01; + /* - */ + ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res)); + if(!ipv4ptr) + exit(1); /* fail */ + if(ipv4ptr != ipv4res) + exit(1); /* fail */ + if(!ipv4ptr[0]) + exit(1); /* fail */ + if(memcmp(ipv4res, "192.168.100.1", 13) != 0) + exit(1); /* fail */ + /* - */ + ipv6res[0] = '\0'; + memset(ipv6a, 0, sizeof(ipv6a)); + ipv6a[0] = 0xfe; + ipv6a[1] = 0x80; + ipv6a[8] = 0x02; + ipv6a[9] = 0x14; + ipv6a[10] = 0x4f; + ipv6a[11] = 0xff; + ipv6a[12] = 0xfe; + ipv6a[13] = 0x0b; + ipv6a[14] = 0x76; + ipv6a[15] = 0xc8; + ipv6a[25] = 0x01; + /* - */ + ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res)); + if(!ipv6ptr) + exit(1); /* fail */ + if(ipv6ptr != ipv6res) + exit(1); /* fail */ + if(!ipv6ptr[0]) + exit(1); /* fail */ + if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0) + exit(1); /* fail */ + /* - */ + exit(0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_works_inet_ntop="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_works_inet_ntop="no" + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + # + if test "$tst_compi_inet_ntop" = "yes" && + test "$tst_works_inet_ntop" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_ntop usage allowed" >&5 +printf %s "checking if inet_ntop usage allowed... " >&6; } + if test "x$cares_disallow_inet_ntop" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_inet_ntop="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_inet_ntop="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_ntop might be used" >&5 +printf %s "checking if inet_ntop might be used... " >&6; } + if test "$tst_links_inet_ntop" = "yes" && + test "$tst_proto_inet_ntop" = "yes" && + test "$tst_compi_inet_ntop" = "yes" && + test "$tst_allow_inet_ntop" = "yes" && + test "$tst_works_inet_ntop" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_INET_NTOP 1" >>confdefs.h + + ac_cv_func_inet_ntop="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_inet_ntop="no" + fi + + + # + tst_links_inet_pton="unknown" + tst_proto_inet_pton="unknown" + tst_compi_inet_pton="unknown" + tst_works_inet_pton="unknown" + tst_allow_inet_pton="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_pton can be linked" >&5 +printf %s "checking if inet_pton can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define inet_pton to an innocuous variant, in case declares inet_pton. + For example, HP-UX 11i declares gettimeofday. */ +#define inet_pton innocuous_inet_pton + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char inet_pton (); below. */ + +#include +#undef inet_pton + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inet_pton (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_inet_pton || defined __stub___inet_pton +choke me +#endif + +int +main (void) +{ +return inet_pton (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_inet_pton="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_inet_pton="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_inet_pton" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_pton is prototyped" >&5 +printf %s "checking if inet_pton is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_arpa_inet + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "inet_pton" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_inet_pton="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_inet_pton="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_inet_pton" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_pton is compilable" >&5 +printf %s "checking if inet_pton is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_arpa_inet + +int +main (void) +{ + + if(0 != inet_pton(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_inet_pton="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_inet_pton="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "x$cross_compiling" != "xyes" && + test "$tst_compi_inet_pton" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_pton seems to work" >&5 +printf %s "checking if inet_pton seems to work... " >&6; } + if test "$cross_compiling" = yes +then : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stdlib + $cares_includes_arpa_inet + $cares_includes_string + +int +main (void) +{ + + unsigned char ipv6a[16+1]; + unsigned char ipv4a[4+1]; + const char *ipv6src = "fe80::214:4fff:fe0b:76c8"; + const char *ipv4src = "192.168.100.1"; + /* - */ + memset(ipv4a, 1, sizeof(ipv4a)); + if(1 != inet_pton(AF_INET, ipv4src, ipv4a)) + exit(1); /* fail */ + /* - */ + if( (ipv4a[0] != 0xc0) || + (ipv4a[1] != 0xa8) || + (ipv4a[2] != 0x64) || + (ipv4a[3] != 0x01) || + (ipv4a[4] != 0x01) ) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 1, sizeof(ipv6a)); + if(1 != inet_pton(AF_INET6, ipv6src, ipv6a)) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0] != 0xfe) || + (ipv6a[1] != 0x80) || + (ipv6a[8] != 0x02) || + (ipv6a[9] != 0x14) || + (ipv6a[10] != 0x4f) || + (ipv6a[11] != 0xff) || + (ipv6a[12] != 0xfe) || + (ipv6a[13] != 0x0b) || + (ipv6a[14] != 0x76) || + (ipv6a[15] != 0xc8) || + (ipv6a[16] != 0x01) ) + exit(1); /* fail */ + /* - */ + if( (ipv6a[2] != 0x0) || + (ipv6a[3] != 0x0) || + (ipv6a[4] != 0x0) || + (ipv6a[5] != 0x0) || + (ipv6a[6] != 0x0) || + (ipv6a[7] != 0x0) ) + exit(1); /* fail */ + /* - */ + exit(0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_works_inet_pton="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_works_inet_pton="no" + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + # + if test "$tst_compi_inet_pton" = "yes" && + test "$tst_works_inet_pton" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_pton usage allowed" >&5 +printf %s "checking if inet_pton usage allowed... " >&6; } + if test "x$cares_disallow_inet_pton" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_inet_pton="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_inet_pton="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if inet_pton might be used" >&5 +printf %s "checking if inet_pton might be used... " >&6; } + if test "$tst_links_inet_pton" = "yes" && + test "$tst_proto_inet_pton" = "yes" && + test "$tst_compi_inet_pton" = "yes" && + test "$tst_allow_inet_pton" = "yes" && + test "$tst_works_inet_pton" != "no"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_INET_PTON 1" >>confdefs.h + + ac_cv_func_inet_pton="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_inet_pton="no" + fi + + +cares_includes_stropts="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef HAVE_STROPTS_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_stropts +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$cares_includes_stropts +" +if test "x$ac_cv_header_unistd_h" = xyes +then : + printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$cares_includes_stropts +" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$cares_includes_stropts +" +if test "x$ac_cv_header_sys_ioctl_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "stropts.h" "ac_cv_header_stropts_h" "$cares_includes_stropts +" +if test "x$ac_cv_header_stropts_h" = xyes +then : + printf "%s\n" "#define HAVE_STROPTS_H 1" >>confdefs.h + +fi + + + + # + tst_links_ioctl="unknown" + tst_proto_ioctl="unknown" + tst_compi_ioctl="unknown" + tst_allow_ioctl="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl can be linked" >&5 +printf %s "checking if ioctl can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define ioctl to an innocuous variant, in case declares ioctl. + For example, HP-UX 11i declares gettimeofday. */ +#define ioctl innocuous_ioctl + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char ioctl (); below. */ + +#include +#undef ioctl + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char ioctl (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_ioctl || defined __stub___ioctl +choke me +#endif + +int +main (void) +{ +return ioctl (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_ioctl="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_ioctl="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_ioctl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl is prototyped" >&5 +printf %s "checking if ioctl is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_stropts + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "ioctl" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_ioctl="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_ioctl="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_ioctl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl is compilable" >&5 +printf %s "checking if ioctl is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stropts + +int +main (void) +{ + + if(0 != ioctl(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_ioctl="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_ioctl="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_ioctl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl usage allowed" >&5 +printf %s "checking if ioctl usage allowed... " >&6; } + if test "x$cares_disallow_ioctl" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_ioctl="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_ioctl="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl might be used" >&5 +printf %s "checking if ioctl might be used... " >&6; } + if test "$tst_links_ioctl" = "yes" && + test "$tst_proto_ioctl" = "yes" && + test "$tst_compi_ioctl" = "yes" && + test "$tst_allow_ioctl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_IOCTL 1" >>confdefs.h + + ac_cv_func_ioctl="yes" + + # + tst_compi_ioctl_fionbio="unknown" + tst_allow_ioctl_fionbio="unknown" + # + if test "$ac_cv_func_ioctl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO is compilable" >&5 +printf %s "checking if ioctl FIONBIO is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stropts + +int +main (void) +{ + + int flags = 0; + if(0 != ioctl(0, FIONBIO, &flags)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_ioctl_fionbio="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_ioctl_fionbio="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_ioctl_fionbio" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO usage allowed" >&5 +printf %s "checking if ioctl FIONBIO usage allowed... " >&6; } + if test "x$cares_disallow_ioctl_fionbio" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_ioctl_fionbio="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_ioctl_fionbio="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl FIONBIO might be used" >&5 +printf %s "checking if ioctl FIONBIO might be used... " >&6; } + if test "$tst_compi_ioctl_fionbio" = "yes" && + test "$tst_allow_ioctl_fionbio" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_IOCTL_FIONBIO 1" >>confdefs.h + + ac_cv_func_ioctl_fionbio="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_ioctl_fionbio="no" + fi + + + # + tst_compi_ioctl_siocgifaddr="unknown" + tst_allow_ioctl_siocgifaddr="unknown" + # + if test "$ac_cv_func_ioctl" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR is compilable" >&5 +printf %s "checking if ioctl SIOCGIFADDR is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stropts + #include + +int +main (void) +{ + + struct ifreq ifr; + if(0 != ioctl(0, SIOCGIFADDR, &ifr)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_ioctl_siocgifaddr="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_ioctl_siocgifaddr="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_ioctl_siocgifaddr" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR usage allowed" >&5 +printf %s "checking if ioctl SIOCGIFADDR usage allowed... " >&6; } + if test "x$cares_disallow_ioctl_siocgifaddr" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_ioctl_siocgifaddr="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_ioctl_siocgifaddr="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctl SIOCGIFADDR might be used" >&5 +printf %s "checking if ioctl SIOCGIFADDR might be used... " >&6; } + if test "$tst_compi_ioctl_siocgifaddr" = "yes" && + test "$tst_allow_ioctl_siocgifaddr" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_IOCTL_SIOCGIFADDR 1" >>confdefs.h + + ac_cv_func_ioctl_siocgifaddr="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_ioctl_siocgifaddr="no" + fi + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_ioctl="no" + fi + + + # + tst_links_ioctlsocket="unknown" + tst_proto_ioctlsocket="unknown" + tst_compi_ioctlsocket="unknown" + tst_allow_ioctlsocket="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket can be linked" >&5 +printf %s "checking if ioctlsocket can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + +int +main (void) +{ + + if(0 != ioctlsocket(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_ioctlsocket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_ioctlsocket="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_ioctlsocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket is prototyped" >&5 +printf %s "checking if ioctlsocket is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_winsock2 + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "ioctlsocket" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_ioctlsocket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_ioctlsocket="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_ioctlsocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket is compilable" >&5 +printf %s "checking if ioctlsocket is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + +int +main (void) +{ + + if(0 != ioctlsocket(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_ioctlsocket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_ioctlsocket="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_ioctlsocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket usage allowed" >&5 +printf %s "checking if ioctlsocket usage allowed... " >&6; } + if test "x$cares_disallow_ioctlsocket" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_ioctlsocket="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_ioctlsocket="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket might be used" >&5 +printf %s "checking if ioctlsocket might be used... " >&6; } + if test "$tst_links_ioctlsocket" = "yes" && + test "$tst_proto_ioctlsocket" = "yes" && + test "$tst_compi_ioctlsocket" = "yes" && + test "$tst_allow_ioctlsocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_IOCTLSOCKET 1" >>confdefs.h + + ac_cv_func_ioctlsocket="yes" + + # + tst_compi_ioctlsocket_fionbio="unknown" + tst_allow_ioctlsocket_fionbio="unknown" + # + if test "$ac_cv_func_ioctlsocket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket FIONBIO is compilable" >&5 +printf %s "checking if ioctlsocket FIONBIO is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + +int +main (void) +{ + + int flags = 0; + if(0 != ioctlsocket(0, FIONBIO, &flags)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_ioctlsocket_fionbio="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_ioctlsocket_fionbio="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_ioctlsocket_fionbio" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket FIONBIO usage allowed" >&5 +printf %s "checking if ioctlsocket FIONBIO usage allowed... " >&6; } + if test "x$cares_disallow_ioctlsocket_fionbio" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_ioctlsocket_fionbio="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_ioctlsocket_fionbio="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ioctlsocket FIONBIO might be used" >&5 +printf %s "checking if ioctlsocket FIONBIO might be used... " >&6; } + if test "$tst_compi_ioctlsocket_fionbio" = "yes" && + test "$tst_allow_ioctlsocket_fionbio" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_IOCTLSOCKET_FIONBIO 1" >>confdefs.h + + ac_cv_func_ioctlsocket_fionbio="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_ioctlsocket_fionbio="no" + fi + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_ioctlsocket="no" + fi + + + # + tst_links_ioctlsocket_camel="unknown" + tst_proto_ioctlsocket_camel="unknown" + tst_compi_ioctlsocket_camel="unknown" + tst_allow_ioctlsocket_camel="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket can be linked" >&5 +printf %s "checking if IoctlSocket can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define IoctlSocket to an innocuous variant, in case declares IoctlSocket. + For example, HP-UX 11i declares gettimeofday. */ +#define IoctlSocket innocuous_IoctlSocket + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char IoctlSocket (); below. */ + +#include +#undef IoctlSocket + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char IoctlSocket (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_IoctlSocket || defined __stub___IoctlSocket +choke me +#endif + +int +main (void) +{ +return IoctlSocket (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_ioctlsocket_camel="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_ioctlsocket_camel="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_ioctlsocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket is prototyped" >&5 +printf %s "checking if IoctlSocket is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_stropts + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "IoctlSocket" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_ioctlsocket_camel="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_ioctlsocket_camel="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_ioctlsocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket is compilable" >&5 +printf %s "checking if IoctlSocket is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stropts + +int +main (void) +{ + + if(0 != IoctlSocket(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_ioctlsocket_camel="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_ioctlsocket_camel="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_ioctlsocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket usage allowed" >&5 +printf %s "checking if IoctlSocket usage allowed... " >&6; } + if test "x$cares_disallow_ioctlsocket_camel" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_ioctlsocket_camel="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_ioctlsocket_camel="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket might be used" >&5 +printf %s "checking if IoctlSocket might be used... " >&6; } + if test "$tst_links_ioctlsocket_camel" = "yes" && + test "$tst_proto_ioctlsocket_camel" = "yes" && + test "$tst_compi_ioctlsocket_camel" = "yes" && + test "$tst_allow_ioctlsocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_IOCTLSOCKET_CAMEL 1" >>confdefs.h + + ac_cv_func_ioctlsocket_camel="yes" + + # + tst_compi_ioctlsocket_camel_fionbio="unknown" + tst_allow_ioctlsocket_camel_fionbio="unknown" + # + if test "$ac_cv_func_ioctlsocket_camel" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket FIONBIO is compilable" >&5 +printf %s "checking if IoctlSocket FIONBIO is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_stropts + +int +main (void) +{ + + long flags = 0; + if(0 != ioctlsocket(0, FIONBIO, &flags)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_ioctlsocket_camel_fionbio="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_ioctlsocket_camel_fionbio="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket FIONBIO usage allowed" >&5 +printf %s "checking if IoctlSocket FIONBIO usage allowed... " >&6; } + if test "x$cares_disallow_ioctlsocket_camel_fionbio" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_ioctlsocket_camel_fionbio="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_ioctlsocket_camel_fionbio="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if IoctlSocket FIONBIO might be used" >&5 +printf %s "checking if IoctlSocket FIONBIO might be used... " >&6; } + if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes" && + test "$tst_allow_ioctlsocket_camel_fionbio" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_IOCTLSOCKET_CAMEL_FIONBIO 1" >>confdefs.h + + ac_cv_func_ioctlsocket_camel_fionbio="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_ioctlsocket_camel_fionbio="no" + fi + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_ioctlsocket_camel="no" + fi + + + # + tst_links_setsockopt="unknown" + tst_proto_setsockopt="unknown" + tst_compi_setsockopt="unknown" + tst_allow_setsockopt="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if setsockopt can be linked" >&5 +printf %s "checking if setsockopt can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_sys_socket + +int +main (void) +{ + + if(0 != setsockopt(0, 0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_setsockopt="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_setsockopt="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_setsockopt" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if setsockopt is prototyped" >&5 +printf %s "checking if setsockopt is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_winsock2 + $cares_includes_sys_socket + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "setsockopt" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_setsockopt="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_setsockopt="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_setsockopt" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if setsockopt is compilable" >&5 +printf %s "checking if setsockopt is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_sys_socket + +int +main (void) +{ + + if(0 != setsockopt(0, 0, 0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_setsockopt="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_setsockopt="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_setsockopt" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if setsockopt usage allowed" >&5 +printf %s "checking if setsockopt usage allowed... " >&6; } + if test "x$cares_disallow_setsockopt" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_setsockopt="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_setsockopt="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if setsockopt might be used" >&5 +printf %s "checking if setsockopt might be used... " >&6; } + if test "$tst_links_setsockopt" = "yes" && + test "$tst_proto_setsockopt" = "yes" && + test "$tst_compi_setsockopt" = "yes" && + test "$tst_allow_setsockopt" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_SETSOCKOPT 1" >>confdefs.h + + ac_cv_func_setsockopt="yes" + + # + tst_compi_setsockopt_so_nonblock="unknown" + tst_allow_setsockopt_so_nonblock="unknown" + # + if test "$ac_cv_func_setsockopt" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if setsockopt SO_NONBLOCK is compilable" >&5 +printf %s "checking if setsockopt SO_NONBLOCK is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_sys_socket + +int +main (void) +{ + + if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_setsockopt_so_nonblock="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_setsockopt_so_nonblock="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_setsockopt_so_nonblock" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if setsockopt SO_NONBLOCK usage allowed" >&5 +printf %s "checking if setsockopt SO_NONBLOCK usage allowed... " >&6; } + if test "x$cares_disallow_setsockopt_so_nonblock" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_setsockopt_so_nonblock="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_setsockopt_so_nonblock="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if setsockopt SO_NONBLOCK might be used" >&5 +printf %s "checking if setsockopt SO_NONBLOCK might be used... " >&6; } + if test "$tst_compi_setsockopt_so_nonblock" = "yes" && + test "$tst_allow_setsockopt_so_nonblock" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_SETSOCKOPT_SO_NONBLOCK 1" >>confdefs.h + + ac_cv_func_setsockopt_so_nonblock="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_setsockopt_so_nonblock="no" + fi + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_setsockopt="no" + fi + + + # + tst_links_socket="unknown" + tst_proto_socket="unknown" + tst_compi_socket="unknown" + tst_allow_socket="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if socket can be linked" >&5 +printf %s "checking if socket can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + +int +main (void) +{ + + if(0 != socket(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_socket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_socket="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_socket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if socket is prototyped" >&5 +printf %s "checking if socket is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "socket" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_socket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_socket="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_socket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if socket is compilable" >&5 +printf %s "checking if socket is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + +int +main (void) +{ + + if(0 != socket(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_socket="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_socket="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_socket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if socket usage allowed" >&5 +printf %s "checking if socket usage allowed... " >&6; } + if test "x$cares_disallow_socket" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_socket="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_socket="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if socket might be used" >&5 +printf %s "checking if socket might be used... " >&6; } + if test "$tst_links_socket" = "yes" && + test "$tst_proto_socket" = "yes" && + test "$tst_compi_socket" = "yes" && + test "$tst_allow_socket" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_SOCKET 1" >>confdefs.h + + ac_cv_func_socket="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_socket="no" + fi + + + # + tst_links_strcasecmp="unknown" + tst_proto_strcasecmp="unknown" + tst_compi_strcasecmp="unknown" + tst_allow_strcasecmp="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcasecmp can be linked" >&5 +printf %s "checking if strcasecmp can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define strcasecmp to an innocuous variant, in case declares strcasecmp. + For example, HP-UX 11i declares gettimeofday. */ +#define strcasecmp innocuous_strcasecmp + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strcasecmp (); below. */ + +#include +#undef strcasecmp + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strcasecmp (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_strcasecmp || defined __stub___strcasecmp +choke me +#endif + +int +main (void) +{ +return strcasecmp (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_strcasecmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_strcasecmp="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_strcasecmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcasecmp is prototyped" >&5 +printf %s "checking if strcasecmp is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_string + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strcasecmp" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_strcasecmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_strcasecmp="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_strcasecmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcasecmp is compilable" >&5 +printf %s "checking if strcasecmp is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_string + +int +main (void) +{ + + if(0 != strcasecmp(0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_strcasecmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_strcasecmp="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_strcasecmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcasecmp usage allowed" >&5 +printf %s "checking if strcasecmp usage allowed... " >&6; } + if test "x$cares_disallow_strcasecmp" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_strcasecmp="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_strcasecmp="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcasecmp might be used" >&5 +printf %s "checking if strcasecmp might be used... " >&6; } + if test "$tst_links_strcasecmp" = "yes" && + test "$tst_proto_strcasecmp" = "yes" && + test "$tst_compi_strcasecmp" = "yes" && + test "$tst_allow_strcasecmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h + + ac_cv_func_strcasecmp="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_strcasecmp="no" + fi + + + # + tst_links_strcmpi="unknown" + tst_proto_strcmpi="unknown" + tst_compi_strcmpi="unknown" + tst_allow_strcmpi="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcmpi can be linked" >&5 +printf %s "checking if strcmpi can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define strcmpi to an innocuous variant, in case declares strcmpi. + For example, HP-UX 11i declares gettimeofday. */ +#define strcmpi innocuous_strcmpi + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strcmpi (); below. */ + +#include +#undef strcmpi + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strcmpi (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_strcmpi || defined __stub___strcmpi +choke me +#endif + +int +main (void) +{ +return strcmpi (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_strcmpi="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_strcmpi="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_strcmpi" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcmpi is prototyped" >&5 +printf %s "checking if strcmpi is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_string + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strcmpi" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_strcmpi="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_strcmpi="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_strcmpi" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcmpi is compilable" >&5 +printf %s "checking if strcmpi is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_string + +int +main (void) +{ + + if(0 != strcmpi(0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_strcmpi="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_strcmpi="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_strcmpi" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcmpi usage allowed" >&5 +printf %s "checking if strcmpi usage allowed... " >&6; } + if test "x$cares_disallow_strcmpi" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_strcmpi="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_strcmpi="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strcmpi might be used" >&5 +printf %s "checking if strcmpi might be used... " >&6; } + if test "$tst_links_strcmpi" = "yes" && + test "$tst_proto_strcmpi" = "yes" && + test "$tst_compi_strcmpi" = "yes" && + test "$tst_allow_strcmpi" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRCMPI 1" >>confdefs.h + + ac_cv_func_strcmpi="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_strcmpi="no" + fi + + + # + tst_links_strdup="unknown" + tst_proto_strdup="unknown" + tst_compi_strdup="unknown" + tst_allow_strdup="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strdup can be linked" >&5 +printf %s "checking if strdup can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define strdup to an innocuous variant, in case declares strdup. + For example, HP-UX 11i declares gettimeofday. */ +#define strdup innocuous_strdup + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strdup (); below. */ + +#include +#undef strdup + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strdup (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_strdup || defined __stub___strdup +choke me +#endif + +int +main (void) +{ +return strdup (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_strdup="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_strdup="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_strdup" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strdup is prototyped" >&5 +printf %s "checking if strdup is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_string + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strdup" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_strdup="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_strdup="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_strdup" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strdup is compilable" >&5 +printf %s "checking if strdup is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_string + +int +main (void) +{ + + if(0 != strdup(0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_strdup="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_strdup="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_strdup" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strdup usage allowed" >&5 +printf %s "checking if strdup usage allowed... " >&6; } + if test "x$cares_disallow_strdup" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_strdup="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_strdup="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strdup might be used" >&5 +printf %s "checking if strdup might be used... " >&6; } + if test "$tst_links_strdup" = "yes" && + test "$tst_proto_strdup" = "yes" && + test "$tst_compi_strdup" = "yes" && + test "$tst_allow_strdup" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h + + ac_cv_func_strdup="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_strdup="no" + fi + + + # + tst_links_stricmp="unknown" + tst_proto_stricmp="unknown" + tst_compi_stricmp="unknown" + tst_allow_stricmp="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if stricmp can be linked" >&5 +printf %s "checking if stricmp can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define stricmp to an innocuous variant, in case declares stricmp. + For example, HP-UX 11i declares gettimeofday. */ +#define stricmp innocuous_stricmp + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char stricmp (); below. */ + +#include +#undef stricmp + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char stricmp (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_stricmp || defined __stub___stricmp +choke me +#endif + +int +main (void) +{ +return stricmp (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_stricmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_stricmp="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_stricmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if stricmp is prototyped" >&5 +printf %s "checking if stricmp is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_string + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "stricmp" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_stricmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_stricmp="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_stricmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if stricmp is compilable" >&5 +printf %s "checking if stricmp is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_string + +int +main (void) +{ + + if(0 != stricmp(0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_stricmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_stricmp="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_stricmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if stricmp usage allowed" >&5 +printf %s "checking if stricmp usage allowed... " >&6; } + if test "x$cares_disallow_stricmp" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_stricmp="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_stricmp="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if stricmp might be used" >&5 +printf %s "checking if stricmp might be used... " >&6; } + if test "$tst_links_stricmp" = "yes" && + test "$tst_proto_stricmp" = "yes" && + test "$tst_compi_stricmp" = "yes" && + test "$tst_allow_stricmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRICMP 1" >>confdefs.h + + ac_cv_func_stricmp="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_stricmp="no" + fi + + + # + tst_links_strncasecmp="unknown" + tst_proto_strncasecmp="unknown" + tst_compi_strncasecmp="unknown" + tst_allow_strncasecmp="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncasecmp can be linked" >&5 +printf %s "checking if strncasecmp can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define strncasecmp to an innocuous variant, in case declares strncasecmp. + For example, HP-UX 11i declares gettimeofday. */ +#define strncasecmp innocuous_strncasecmp + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strncasecmp (); below. */ + +#include +#undef strncasecmp + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strncasecmp (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_strncasecmp || defined __stub___strncasecmp +choke me +#endif + +int +main (void) +{ +return strncasecmp (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_strncasecmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_strncasecmp="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_strncasecmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncasecmp is prototyped" >&5 +printf %s "checking if strncasecmp is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_string + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strncasecmp" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_strncasecmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_strncasecmp="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_strncasecmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncasecmp is compilable" >&5 +printf %s "checking if strncasecmp is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_string + +int +main (void) +{ + + if(0 != strncasecmp(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_strncasecmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_strncasecmp="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_strncasecmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncasecmp usage allowed" >&5 +printf %s "checking if strncasecmp usage allowed... " >&6; } + if test "x$cares_disallow_strncasecmp" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_strncasecmp="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_strncasecmp="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncasecmp might be used" >&5 +printf %s "checking if strncasecmp might be used... " >&6; } + if test "$tst_links_strncasecmp" = "yes" && + test "$tst_proto_strncasecmp" = "yes" && + test "$tst_compi_strncasecmp" = "yes" && + test "$tst_allow_strncasecmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRNCASECMP 1" >>confdefs.h + + ac_cv_func_strncasecmp="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_strncasecmp="no" + fi + + + # + tst_links_strncmpi="unknown" + tst_proto_strncmpi="unknown" + tst_compi_strncmpi="unknown" + tst_allow_strncmpi="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncmpi can be linked" >&5 +printf %s "checking if strncmpi can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define strncmpi to an innocuous variant, in case declares strncmpi. + For example, HP-UX 11i declares gettimeofday. */ +#define strncmpi innocuous_strncmpi + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strncmpi (); below. */ + +#include +#undef strncmpi + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strncmpi (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_strncmpi || defined __stub___strncmpi +choke me +#endif + +int +main (void) +{ +return strncmpi (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_strncmpi="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_strncmpi="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_strncmpi" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncmpi is prototyped" >&5 +printf %s "checking if strncmpi is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_string + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strncmpi" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_strncmpi="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_strncmpi="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_strncmpi" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncmpi is compilable" >&5 +printf %s "checking if strncmpi is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_string + +int +main (void) +{ + + if(0 != strncmpi(0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_strncmpi="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_strncmpi="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_strncmpi" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncmpi usage allowed" >&5 +printf %s "checking if strncmpi usage allowed... " >&6; } + if test "x$cares_disallow_strncmpi" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_strncmpi="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_strncmpi="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strncmpi might be used" >&5 +printf %s "checking if strncmpi might be used... " >&6; } + if test "$tst_links_strncmpi" = "yes" && + test "$tst_proto_strncmpi" = "yes" && + test "$tst_compi_strncmpi" = "yes" && + test "$tst_allow_strncmpi" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRNCMPI 1" >>confdefs.h + + ac_cv_func_strncmpi="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_strncmpi="no" + fi + + + # + tst_links_strnicmp="unknown" + tst_proto_strnicmp="unknown" + tst_compi_strnicmp="unknown" + tst_allow_strnicmp="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strnicmp can be linked" >&5 +printf %s "checking if strnicmp can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define strnicmp to an innocuous variant, in case declares strnicmp. + For example, HP-UX 11i declares gettimeofday. */ +#define strnicmp innocuous_strnicmp + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char strnicmp (); below. */ + +#include +#undef strnicmp + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strnicmp (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_strnicmp || defined __stub___strnicmp +choke me +#endif + +int +main (void) +{ +return strnicmp (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_strnicmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_strnicmp="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_strnicmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strnicmp is prototyped" >&5 +printf %s "checking if strnicmp is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_string + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "strnicmp" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_strnicmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_strnicmp="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_strnicmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strnicmp is compilable" >&5 +printf %s "checking if strnicmp is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_string + +int +main (void) +{ + + if(0 != strnicmp(0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_strnicmp="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_strnicmp="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_strnicmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strnicmp usage allowed" >&5 +printf %s "checking if strnicmp usage allowed... " >&6; } + if test "x$cares_disallow_strnicmp" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_strnicmp="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_strnicmp="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if strnicmp might be used" >&5 +printf %s "checking if strnicmp might be used... " >&6; } + if test "$tst_links_strnicmp" = "yes" && + test "$tst_proto_strnicmp" = "yes" && + test "$tst_compi_strnicmp" = "yes" && + test "$tst_allow_strnicmp" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRNICMP 1" >>confdefs.h + + ac_cv_func_strnicmp="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_strnicmp="no" + fi + + +cares_includes_sys_uio="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_UIO_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$cares_includes_sys_uio +" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/uio.h" "ac_cv_header_sys_uio_h" "$cares_includes_sys_uio +" +if test "x$ac_cv_header_sys_uio_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_UIO_H 1" >>confdefs.h + +fi + + + + # + tst_links_writev="unknown" + tst_proto_writev="unknown" + tst_compi_writev="unknown" + tst_allow_writev="unknown" + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if writev can be linked" >&5 +printf %s "checking if writev can be linked... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define writev to an innocuous variant, in case declares writev. + For example, HP-UX 11i declares gettimeofday. */ +#define writev innocuous_writev + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char writev (); below. */ + +#include +#undef writev + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char writev (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_writev || defined __stub___writev +choke me +#endif + +int +main (void) +{ +return writev (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_links_writev="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_links_writev="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$tst_links_writev" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if writev is prototyped" >&5 +printf %s "checking if writev is prototyped... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + $cares_includes_sys_uio + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "writev" >/dev/null 2>&1 +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_proto_writev="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_proto_writev="no" + +fi +rm -rf conftest* + + fi + # + if test "$tst_proto_writev" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if writev is compilable" >&5 +printf %s "checking if writev is compilable... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + $cares_includes_sys_uio + +int +main (void) +{ + + if(0 != writev(0, 0, 0)) + return 1; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_compi_writev="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_compi_writev="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + # + if test "$tst_compi_writev" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if writev usage allowed" >&5 +printf %s "checking if writev usage allowed... " >&6; } + if test "x$cares_disallow_writev" != "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + tst_allow_writev="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + tst_allow_writev="no" + fi + fi + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if writev might be used" >&5 +printf %s "checking if writev might be used... " >&6; } + if test "$tst_links_writev" = "yes" && + test "$tst_proto_writev" = "yes" && + test "$tst_compi_writev" = "yes" && + test "$tst_allow_writev" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_WRITEV 1" >>confdefs.h + + ac_cv_func_writev="yes" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ac_cv_func_writev="no" + fi + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PF_INET6" >&5 +printf %s "checking for PF_INET6... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + + + #ifdef PF_INET6 + VARIABLEWASDEFINED + #else + NJET + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "VARIABLEWASDEFINED" >/dev/null 2>&1 +then : + ac_constant="yes" +else $as_nop + ac_constant="no" + +fi +rm -rf conftest* + + if test "$ac_constant" = "yes" ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_PF_INET6 1" >>confdefs.h + + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + fi + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for AF_INET6" >&5 +printf %s "checking for AF_INET6... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + + + #ifdef AF_INET6 + VARIABLEWASDEFINED + #else + NJET + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "VARIABLEWASDEFINED" >/dev/null 2>&1 +then : + ac_constant="yes" +else $as_nop + ac_constant="no" + +fi +rm -rf conftest* + + if test "$ac_constant" = "yes" ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_AF_INET6 1" >>confdefs.h + + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + fi + + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct in6_addr" >&5 +printf %s "checking for struct in6_addr... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#endif + +int +main (void) +{ + + struct in6_addr struct_instance; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_struct="yes" +else $as_nop + ac_found="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$ac_struct" = "yes" ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRUCT_IN6_ADDR 1" >>confdefs.h + + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + fi + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct sockaddr_in6" >&5 +printf %s "checking for struct sockaddr_in6... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#endif + +int +main (void) +{ + + struct sockaddr_in6 struct_instance; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_struct="yes" +else $as_nop + ac_found="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test "$ac_struct" = "yes" ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + +printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_IN6 1" >>confdefs.h + ac_have_sockaddr_in6=yes + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + fi + + +ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_scope_id" "ac_cv_member_struct_sockaddr_in6_sin6_scope_id" " +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#endif + +" +if test "x$ac_cv_member_struct_sockaddr_in6_sin6_scope_id" = xyes +then : + +printf "%s\n" "#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1" >>confdefs.h + + +fi + + +ac_fn_c_check_member "$LINENO" "struct addrinfo" "ai_flags" "ac_cv_member_struct_addrinfo_ai_flags" " +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#endif + + +" +if test "x$ac_cv_member_struct_addrinfo_ai_flags" = xyes +then : + +printf "%s\n" "#define HAVE_STRUCT_ADDRINFO 1" >>confdefs.h + +fi + + + + + for ac_func in bitncmp gettimeofday if_indextoname +do : + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes" +then : + cat >>confdefs.h <<_ACEOF +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + + +else $as_nop + + func="$ac_func" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking deeper for $func" >&5 +printf %s "checking deeper for $func... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + $func (); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + eval "ac_cv_func_$func=yes" + +cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$func" | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' | sed 's/^A-Z0-9_/_/g'` 1 +_ACEOF + + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: but still no" >&5 +printf "%s\n" "but still no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + +fi + +done + +ac_fn_c_check_func "$LINENO" "__system_property_get" "ac_cv_func___system_property_get" +if test "x$ac_cv_func___system_property_get" = xyes +then : + + +printf "%s\n" "#define HAVE___SYSTEM_PROPERTY_GET 1" >>confdefs.h + + +fi + + + + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default" +if test "x$ac_cv_header_netdb_h" = xyes +then : + printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h + +fi + + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getnameinfo" >&5 +printf %s "checking for getnameinfo... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Define getnameinfo to an innocuous variant, in case declares getnameinfo. + For example, HP-UX 11i declares gettimeofday. */ +#define getnameinfo innocuous_getnameinfo + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char getnameinfo (); below. */ + +#include +#undef getnameinfo + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getnameinfo (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_getnameinfo || defined __stub___getnameinfo +choke me +#endif + +int +main (void) +{ +return getnameinfo (); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + curl_cv_getnameinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + curl_cv_getnameinfo="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + # + if test "$curl_cv_getnameinfo" != "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking deeper for getnameinfo" >&5 +printf %s "checking deeper for getnameinfo... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int +main (void) +{ + + getnameinfo(); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + curl_cv_getnameinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: but still no" >&5 +printf "%s\n" "but still no" >&6; } + curl_cv_getnameinfo="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + # + if test "$curl_cv_getnameinfo" != "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking deeper and deeper for getnameinfo" >&5 +printf %s "checking deeper and deeper for getnameinfo... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#endif + +int +main (void) +{ + + getnameinfo(0, 0, 0, 0, 0, 0, 0); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + curl_cv_getnameinfo="yes" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: but still no" >&5 +printf "%s\n" "but still no" >&6; } + curl_cv_getnameinfo="no" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + fi + # + if test "$curl_cv_getnameinfo" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking types of arguments for getnameinfo" >&5 +printf %s "checking types of arguments for getnameinfo... " >&6; } +if test ${curl_cv_func_getnameinfo_args+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + curl_cv_func_getnameinfo_args="unknown" + for gni_arg1 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do + for gni_arg2 in 'socklen_t' 'size_t' 'int'; do + for gni_arg46 in 'size_t' 'int' 'socklen_t' 'unsigned int' 'DWORD'; do + for gni_arg7 in 'int' 'unsigned int'; do + if test "$curl_cv_func_getnameinfo_args" = "unknown"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#if (!defined(_WIN32_WINNT)) || (_WIN32_WINNT < 0x0501) +#undef _WIN32_WINNT +#define _WIN32_WINNT 0x0501 +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#define GNICALLCONV WSAAPI +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#define GNICALLCONV +#endif + extern int GNICALLCONV getnameinfo($gni_arg1, $gni_arg2, + char *, $gni_arg46, + char *, $gni_arg46, + $gni_arg7); + +int +main (void) +{ + + $gni_arg2 salen=0; + $gni_arg46 hostlen=0; + $gni_arg46 servlen=0; + $gni_arg7 flags=0; + int res = getnameinfo(0, salen, 0, hostlen, 0, servlen, flags); + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + curl_cv_func_getnameinfo_args="$gni_arg1,$gni_arg2,$gni_arg46,$gni_arg7" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + done + done + done + done + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_func_getnameinfo_args" >&5 +printf "%s\n" "$curl_cv_func_getnameinfo_args" >&6; } # AC-CACHE-CHECK + if test "$curl_cv_func_getnameinfo_args" = "unknown"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find proper types to use for getnameinfo args" >&5 +printf "%s\n" "$as_me: WARNING: Cannot find proper types to use for getnameinfo args" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: HAVE_GETNAMEINFO will not be defined" >&5 +printf "%s\n" "$as_me: WARNING: HAVE_GETNAMEINFO will not be defined" >&2;} + else + gni_prev_IFS=$IFS; IFS=',' + set dummy `echo "$curl_cv_func_getnameinfo_args" | sed 's/\*/\*/g'` + IFS=$gni_prev_IFS + shift + # + gni_qual_type_arg1=$1 + # + +printf "%s\n" "#define GETNAMEINFO_TYPE_ARG2 $2" >>confdefs.h + + +printf "%s\n" "#define GETNAMEINFO_TYPE_ARG46 $3" >>confdefs.h + + +printf "%s\n" "#define GETNAMEINFO_TYPE_ARG7 $4" >>confdefs.h + + # + prev_sh_opts=$- + # + case $prev_sh_opts in + *f*) + ;; + *) + set -f + ;; + esac + # + case "$gni_qual_type_arg1" in + const*) + gni_qual_arg1=const + gni_type_arg1=`echo $gni_qual_type_arg1 | sed 's/^const //'` + ;; + *) + gni_qual_arg1= + gni_type_arg1=$gni_qual_type_arg1 + ;; + esac + # + +printf "%s\n" "#define GETNAMEINFO_QUAL_ARG1 $gni_qual_arg1" >>confdefs.h + + +printf "%s\n" "#define GETNAMEINFO_TYPE_ARG1 $gni_type_arg1" >>confdefs.h + + # + case $prev_sh_opts in + *f*) + ;; + *) + set +f + ;; + esac + # + +printf "%s\n" "#define HAVE_GETNAMEINFO 1" >>confdefs.h + + ac_cv_func_getnameinfo="yes" + fi + fi + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +printf %s "checking whether byte ordering is bigendian... " >&6; } +if test ${ac_cv_c_bigendian+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main (void) +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_c_bigendian=yes +else $as_nop + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main (void) +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_c_bigendian=yes +else $as_nop + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes +then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +unsigned short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + unsigned short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + unsigned short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + unsigned short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main (void) +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + ac_cv_c_bigendian=no +else $as_nop + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +printf "%s\n" "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + +printf "%s\n" "#define ARES_BIG_ENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: couldn't figure out endianess, assuming little endian!" >&5 +printf "%s\n" "$as_me: WARNING: couldn't figure out endianess, assuming little endian!" >&2;} + ;; + esac + + + +# Check whether --with-random was given. +if test ${with_random+y} +then : + withval=$with_random; CARES_RANDOM_FILE="$withval" +else $as_nop + + if test "$cross_compiling" = "no"; then + as_ac_File=`printf "%s\n" "ac_cv_file_"/dev/urandom"" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for \"/dev/urandom\"" >&5 +printf %s "checking for \"/dev/urandom\"... " >&6; } +if eval test \${$as_ac_File+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r ""/dev/urandom""; then + eval "$as_ac_File=yes" +else + eval "$as_ac_File=no" +fi +fi +eval ac_res=\$$as_ac_File + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_File"\" = x"yes" +then : + CARES_RANDOM_FILE="/dev/urandom" +fi + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for /dev/urandom while cross compiling; assuming none" >&5 +printf "%s\n" "$as_me: WARNING: cannot check for /dev/urandom while cross compiling; assuming none" >&2;} + fi + + + +fi + +if test -n "$CARES_RANDOM_FILE" && test X"$CARES_RANDOM_FILE" != Xno ; then + + +printf "%s\n" "#define CARES_RANDOM_FILE \"$CARES_RANDOM_FILE\"" >>confdefs.h + +fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable non-blocking communications" >&5 +printf %s "checking whether to enable non-blocking communications... " >&6; } + OPT_NONBLOCKING="default" + # Check whether --enable-nonblocking was given. +if test ${enable_nonblocking+y} +then : + enableval=$enable_nonblocking; OPT_NONBLOCKING=$enableval +fi + + case "$OPT_NONBLOCKING" in + no) + want_nonblocking="no" + ;; + default) + want_nonblocking="yes" + ;; + *) + want_nonblocking="yes" + ;; + esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $want_nonblocking" >&5 +printf "%s\n" "$want_nonblocking" >&6; } + + + # + tst_method="unknown" + if test "$want_nonblocking" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to set a socket into non-blocking mode" >&5 +printf %s "checking how to set a socket into non-blocking mode... " >&6; } + if test "x$ac_cv_func_fcntl_o_nonblock" = "xyes"; then + tst_method="fcntl O_NONBLOCK" + elif test "x$ac_cv_func_ioctl_fionbio" = "xyes"; then + tst_method="ioctl FIONBIO" + elif test "x$ac_cv_func_ioctlsocket_fionbio" = "xyes"; then + tst_method="ioctlsocket FIONBIO" + elif test "x$ac_cv_func_ioctlsocket_camel_fionbio" = "xyes"; then + tst_method="IoctlSocket FIONBIO" + elif test "x$ac_cv_func_setsockopt_so_nonblock" = "xyes"; then + tst_method="setsockopt SO_NONBLOCK" + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tst_method" >&5 +printf "%s\n" "$tst_method" >&6; } + if test "$tst_method" = "unknown"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine non-blocking socket method." >&5 +printf "%s\n" "$as_me: WARNING: cannot determine non-blocking socket method." >&2;} + fi + fi + if test "$tst_method" = "unknown"; then + +printf "%s\n" "#define USE_BLOCKING_SOCKETS 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: non-blocking sockets disabled." >&5 +printf "%s\n" "$as_me: WARNING: non-blocking sockets disabled." >&2;} + fi + + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether hiding of library internal symbols will actually happen" >&5 +printf %s "checking whether hiding of library internal symbols will actually happen... " >&6; } + CFLAG_CARES_SYMBOL_HIDING="" + doing_symbol_hiding="no" + if test x"$ac_cv_native_windows" != "xyes" && + test "$want_symbol_hiding" = "yes" && + test "$supports_symbol_hiding" = "yes"; then + doing_symbol_hiding="yes" + CFLAG_CARES_SYMBOL_HIDING="$symbol_hiding_CFLAGS" + +printf "%s\n" "#define CARES_SYMBOL_SCOPE_EXTERN $symbol_hiding_EXTERN" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + if test x$doing_symbol_hiding = xyes; then + DOING_CARES_SYMBOL_HIDING_TRUE= + DOING_CARES_SYMBOL_HIDING_FALSE='#' +else + DOING_CARES_SYMBOL_HIDING_TRUE='#' + DOING_CARES_SYMBOL_HIDING_FALSE= +fi + + + if test "$doing_symbol_hiding" = "yes"; then + +printf "%s\n" "#define CARES_SYMBOL_HIDING 1" >>confdefs.h + + fi + + +CARES_PRIVATE_LIBS="$LIBS" + + +CARES_CFLAG_EXTRAS="" +if test X"$want_werror" = Xyes; then + CARES_CFLAG_EXTRAS="-Werror" +fi + + + +squeeze CFLAGS +squeeze CPPFLAGS +squeeze DEFS +squeeze LDFLAGS +squeeze LIBS + +squeeze CARES_PRIVATE_LIBS + + + + xc_bad_var_libs=no + for xc_word in $LIBS; do + case "$xc_word" in + -l* | --library=*) + : + ;; + *) + xc_bad_var_libs=yes + ;; + esac + done + if test $xc_bad_var_libs = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using LIBS: $LIBS" >&5 +printf "%s\n" "$as_me: using LIBS: $LIBS" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: LIBS error: LIBS may only be used to specify libraries (-lname)." >&5 +printf "%s\n" "$as_me: LIBS error: LIBS may only be used to specify libraries (-lname)." >&6;} + fi + + + xc_bad_var_ldflags=no + for xc_word in $LDFLAGS; do + case "$xc_word" in + -D*) + xc_bad_var_ldflags=yes + ;; + -U*) + xc_bad_var_ldflags=yes + ;; + -I*) + xc_bad_var_ldflags=yes + ;; + -l* | --library=*) + xc_bad_var_ldflags=yes + ;; + esac + done + if test $xc_bad_var_ldflags = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using LDFLAGS: $LDFLAGS" >&5 +printf "%s\n" "$as_me: using LDFLAGS: $LDFLAGS" >&6;} + xc_bad_var_msg="LDFLAGS error: LDFLAGS may only be used to specify linker flags, not" + for xc_word in $LDFLAGS; do + case "$xc_word" in + -D*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -U*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -I*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -l* | --library=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&6;} + ;; + esac + done + fi + + + xc_bad_var_cppflags=no + for xc_word in $CPPFLAGS; do + case "$xc_word" in + -rpath*) + xc_bad_var_cppflags=yes + ;; + -L* | --library-path=*) + xc_bad_var_cppflags=yes + ;; + -l* | --library=*) + xc_bad_var_cppflags=yes + ;; + esac + done + if test $xc_bad_var_cppflags = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using CPPFLAGS: $CPPFLAGS" >&5 +printf "%s\n" "$as_me: using CPPFLAGS: $CPPFLAGS" >&6;} + xc_bad_var_msg="CPPFLAGS error: CPPFLAGS may only be used to specify C preprocessor flags, not" + for xc_word in $CPPFLAGS; do + case "$xc_word" in + -rpath*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word" >&6;} + ;; + -L* | --library-path=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word" >&6;} + ;; + -l* | --library=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&6;} + ;; + esac + done + fi + + + xc_bad_var_cflags=no + for xc_word in $CFLAGS; do + case "$xc_word" in + -D*) + xc_bad_var_cflags=yes + ;; + -U*) + xc_bad_var_cflags=yes + ;; + -I*) + xc_bad_var_cflags=yes + ;; + -rpath*) + xc_bad_var_cflags=yes + ;; + -L* | --library-path=*) + xc_bad_var_cflags=yes + ;; + -l* | --library=*) + xc_bad_var_cflags=yes + ;; + esac + done + if test $xc_bad_var_cflags = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using CFLAGS: $CFLAGS" >&5 +printf "%s\n" "$as_me: using CFLAGS: $CFLAGS" >&6;} + xc_bad_var_msg="CFLAGS error: CFLAGS may only be used to specify C compiler flags, not" + for xc_word in $CFLAGS; do + case "$xc_word" in + -D*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -U*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -I*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word" >&6;} + ;; + -rpath*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word" >&6;} + ;; + -L* | --library-path=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word" >&6;} + ;; + -l* | --library=*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&5 +printf "%s\n" "$as_me: $xc_bad_var_msg libraries. Use LIBS for: $xc_word" >&6;} + ;; + esac + done + fi + + if test $xc_bad_var_libs = yes || + test $xc_bad_var_cflags = yes || + test $xc_bad_var_ldflags = yes || + test $xc_bad_var_cppflags = yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Continuing even with errors mentioned immediately above this line." >&5 +printf "%s\n" "$as_me: WARNING: Continuing even with errors mentioned immediately above this line." >&2;} + fi + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build tests" >&5 +printf %s "checking whether to build tests... " >&6; } +# Check whether --enable-tests was given. +if test ${enable_tests+y} +then : + enableval=$enable_tests; build_tests="$enableval" +else $as_nop + if test "x$HAVE_CXX11" = "x1" && test "x$cross_compiling" = "xno" ; then + build_tests="yes" + else + build_tests="no" + fi + + +fi + + +if test "x$build_tests" = "xyes" ; then + if test "x$HAVE_CXX11" = "0" ; then + as_fn_error $? "*** Building tests requires a CXX11 compiler" "$LINENO" 5 + fi + if test "x$cross_compiling" = "xyes" ; then + as_fn_error $? "*** Tests not supported when cross compiling" "$LINENO" 5 + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $build_tests" >&5 +printf "%s\n" "$build_tests" >&6; } + + +BUILD_SUBDIRS="include src docs" +if test "x$build_tests" = "xyes" ; then + + +subdirs="$subdirs test" + + BUILD_SUBDIRS="${BUILD_SUBDIRS} test" +fi + + + +ac_config_files="$ac_config_files Makefile include/Makefile src/Makefile src/lib/Makefile src/tools/Makefile docs/Makefile libcares.pc" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CODE_COVERAGE_ENABLED_TRUE}" && test -z "${CODE_COVERAGE_ENABLED_FALSE}"; then + as_fn_error $? "conditional \"CODE_COVERAGE_ENABLED\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +printf %s "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 +printf "%s\n" "done" >&6; } +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${CARES_LT_SHLIB_USE_VERSION_INFO_TRUE}" && test -z "${CARES_LT_SHLIB_USE_VERSION_INFO_FALSE}"; then + as_fn_error $? "conditional \"CARES_LT_SHLIB_USE_VERSION_INFO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CARES_LT_SHLIB_USE_NO_UNDEFINED_TRUE}" && test -z "${CARES_LT_SHLIB_USE_NO_UNDEFINED_FALSE}"; then + as_fn_error $? "conditional \"CARES_LT_SHLIB_USE_NO_UNDEFINED\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CARES_LT_SHLIB_USE_MIMPURE_TEXT_TRUE}" && test -z "${CARES_LT_SHLIB_USE_MIMPURE_TEXT_FALSE}"; then + as_fn_error $? "conditional \"CARES_LT_SHLIB_USE_MIMPURE_TEXT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_CPPFLAG_CARES_STATICLIB_TRUE}" && test -z "${USE_CPPFLAG_CARES_STATICLIB_FALSE}"; then + as_fn_error $? "conditional \"USE_CPPFLAG_CARES_STATICLIB\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DOING_NATIVE_WINDOWS_TRUE}" && test -z "${DOING_NATIVE_WINDOWS_FALSE}"; then + as_fn_error $? "conditional \"DOING_NATIVE_WINDOWS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${DOING_CARES_SYMBOL_HIDING_TRUE}" && test -z "${DOING_CARES_SYMBOL_HIDING_FALSE}"; then + as_fn_error $? "conditional \"DOING_CARES_SYMBOL_HIDING\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else $as_nop + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. +as_nl=' +' +export as_nl +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + + + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + printf "%s\n" "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else $as_nop + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else $as_nop + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by c-ares $as_me 1.18.1, which was +generated by GNU Autoconf 2.71. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config='$ac_cs_config_escaped' +ac_cs_version="\\ +c-ares config.status 1.18.1 +configured by $0, generated by GNU Autoconf 2.71, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2021 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + printf "%s\n" "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + printf "%s\n" "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + printf "%s\n" "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + printf "%s\n" "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "src/lib/ares_config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/lib/ares_config.h" ;; + "include/ares_build.h") CONFIG_HEADERS="$CONFIG_HEADERS include/ares_build.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/Makefile" ;; + "src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + "libcares.pc") CONFIG_FILES="$CONFIG_FILES libcares.pc" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`printf "%s\n" "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + printf "%s\n" "/* $configure_input */" >&1 \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + printf "%s\n" "/* $configure_input */" >&1 \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac + shift + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf + do + # Strip MF so we end up with the name of the file. + am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X"$am_mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +printf "%s\n" X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? + done + if test $am_rc -ne 0; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. If GNU make was not used, consider + re-running the configure script with MAKE=\"gmake\" (or whatever is + necessary). You can also try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='CXX ' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi + +# +# CONFIG_SUBDIRS section. +# +if test "$no_recursion" != yes; then + + # Remove --cache-file, --srcdir, and --disable-option-checking arguments + # so they do not pile up. + ac_sub_configure_args= + ac_prev= + eval "set x $ac_configure_args" + shift + for ac_arg + do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case $ac_arg in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ + | --c=*) + ;; + --config-cache | -C) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + ;; + --disable-option-checking) + ;; + *) + case $ac_arg in + *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_sub_configure_args " '$ac_arg'" ;; + esac + done + + # Always prepend --prefix to ensure using the same prefix + # in subdir configurations. + ac_arg="--prefix=$prefix" + case $ac_arg in + *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" + + # Pass --silent + if test "$silent" = yes; then + ac_sub_configure_args="--silent $ac_sub_configure_args" + fi + + # Always prepend --disable-option-checking to silence warnings, since + # different subdirs can have different --enable and --with options. + ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" + + ac_popdir=`pwd` + for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + test -d "$srcdir/$ac_dir" || continue + + ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 + printf "%s\n" "$ac_msg" >&6 + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + cd "$ac_dir" + + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. + if test -f "$ac_srcdir/configure.gnu"; then + ac_sub_configure=$ac_srcdir/configure.gnu + elif test -f "$ac_srcdir/configure"; then + ac_sub_configure=$ac_srcdir/configure + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 +printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} + ac_sub_configure= + fi + + # The recursion is here. + if test -n "$ac_sub_configure"; then + # Make the cache file name correct relative to the subdirectory. + case $cache_file in + [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; + *) # Relative name. + ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; + esac + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 +printf "%s\n" "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} + # The eval makes quoting arguments work. + eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ + --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || + as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 + fi + + cd "$ac_popdir" + done +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +## ---------------------------------- ## +## Start of distclean amending code ## +## ---------------------------------- ## + +for xc_subdir in '.' +do + +if test ! -f "$xc_subdir/Makefile"; then + echo "$xc_msg_err $xc_subdir/Makefile file not found. $xc_msg_abrt" >&2 + exit 1 +fi + +# Fetch dependency tracking file list from Makefile include lines. + +xc_inc_lines=`grep '^include .*(DEPDIR)' "$xc_subdir/Makefile" 2>/dev/null` +xc_cnt_words=`echo "$xc_inc_lines" | wc -w | tr -d "$xc_space$xc_tab"` + +# --disable-dependency-tracking might have been used, consequently +# there is nothing to amend without a dependency tracking file list. + +if test $xc_cnt_words -gt 0; then + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: amending $xc_subdir/Makefile" >&5 +printf "%s\n" "$as_me: amending $xc_subdir/Makefile" >&6;} + +# Build Makefile specific patch hunk. + +xc_p="$xc_subdir/xc_patch.tmp" + +xc_rm_depfiles=`echo "$xc_inc_lines" \ + | $SED 's%include% -rm -f%' 2>/dev/null` + +xc_dep_subdirs=`echo "$xc_inc_lines" \ + | $SED 's%include[ ][ ]*%%' 2>/dev/null \ + | $SED 's%(DEPDIR)/.*%(DEPDIR)%' 2>/dev/null \ + | sort | uniq` + +echo "$xc_rm_depfiles" >$xc_p + +for xc_dep_dir in $xc_dep_subdirs; do + echo "${xc_tab}@xm_dep_cnt=\`ls $xc_dep_dir | wc -l 2>/dev/null\`; \\" >>$xc_p + echo "${xc_tab}if test \$\$xm_dep_cnt -eq 0 && test -d $xc_dep_dir; then \\" >>$xc_p + echo "${xc_tab} rm -rf $xc_dep_dir; \\" >>$xc_p + echo "${xc_tab}fi" >>$xc_p +done + +# Build Makefile patching sed scripts. + +xc_s1="$xc_subdir/xc_script_1.tmp" +xc_s2="$xc_subdir/xc_script_2.tmp" +xc_s3="$xc_subdir/xc_script_3.tmp" + +cat >$xc_s1 <<\_EOT +/^distclean[ ]*:/,/^[^ ][^ ]*:/{ + s/^.*(DEPDIR)/___xc_depdir_line___/ +} +/^maintainer-clean[ ]*:/,/^[^ ][^ ]*:/{ + s/^.*(DEPDIR)/___xc_depdir_line___/ +} +_EOT + +cat >$xc_s2 <<\_EOT +/___xc_depdir_line___$/{ + N + /___xc_depdir_line___$/D +} +_EOT + +cat >$xc_s3 <<_EOT +/^___xc_depdir_line___/{ + r $xc_p + d +} +_EOT + +# Apply patch to Makefile and cleanup. + +$SED -f "$xc_s1" "$xc_subdir/Makefile" >"$xc_subdir/Makefile.tmp1" +$SED -f "$xc_s2" "$xc_subdir/Makefile.tmp1" >"$xc_subdir/Makefile.tmp2" +$SED -f "$xc_s3" "$xc_subdir/Makefile.tmp2" >"$xc_subdir/Makefile.tmp3" + +if test -f "$xc_subdir/Makefile.tmp3"; then + mv -f "$xc_subdir/Makefile.tmp3" "$xc_subdir/Makefile" +fi + +test -f "$xc_subdir/Makefile.tmp1" && rm -f "$xc_subdir/Makefile.tmp1" +test -f "$xc_subdir/Makefile.tmp2" && rm -f "$xc_subdir/Makefile.tmp2" +test -f "$xc_subdir/Makefile.tmp3" && rm -f "$xc_subdir/Makefile.tmp3" + +test -f "$xc_p" && rm -f "$xc_p" +test -f "$xc_s1" && rm -f "$xc_s1" +test -f "$xc_s2" && rm -f "$xc_s2" +test -f "$xc_s3" && rm -f "$xc_s3" + +fi + +done + +## -------------------------------- ## +## End of distclean amending code ## +## -------------------------------- ## + + + diff -Nru nodejs-mozilla-12.18.1/deps/cares/configure.ac nodejs-mozilla-12.22.12/deps/cares/configure.ac --- nodejs-mozilla-12.18.1/deps/cares/configure.ac 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/configure.ac 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,983 @@ +AC_PREREQ([2.60]) + +AC_INIT([c-ares], [1.18.1], + [c-ares mailing list: http://lists.haxx.se/listinfo/c-ares]) + +CARES_VERSION_INFO="7:1:5" +dnl This flag accepts an argument of the form current[:revision[:age]]. So, +dnl passing -version-info 3:12:1 sets current to 3, revision to 12, and age to +dnl 1. +dnl +dnl If either revision or age are omitted, they default to 0. Also note that age +dnl must be less than or equal to the current interface number. +dnl +dnl Here are a set of rules to help you update your library version information: +dnl +dnl 1.Start with version information of 0:0:0 for each libtool library. +dnl +dnl 2.Update the version information only immediately before a public release of +dnl your software. More frequent updates are unnecessary, and only guarantee +dnl that the current interface number gets larger faster. +dnl +dnl 3.If the library source code has changed at all since the last update, then +dnl increment revision (c:r+1:a) +dnl +dnl 4.If any interfaces have been added, removed, or changed since the last +dnl update, increment current, and set revision to 0. (c+1:r=0:a) +dnl +dnl 5.If any interfaces have been added since the last public release, then +dnl increment age. (c:r:a+1) +dnl +dnl 6.If any interfaces have been removed since the last public release, then +dnl set age to 0. (c:r:a=0) +dnl +AC_SUBST([CARES_VERSION_INFO]) + +AC_CONFIG_SRCDIR([src/lib/ares_ipv6.h]) +AC_CONFIG_HEADERS([src/lib/ares_config.h include/ares_build.h]) +AC_CONFIG_MACRO_DIR([m4]) +AM_MAINTAINER_MODE +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX_11]) + +CARES_CHECK_OPTION_DEBUG +CARES_CHECK_OPTION_OPTIMIZE +CARES_CHECK_OPTION_WARNINGS +CARES_CHECK_OPTION_WERROR +CARES_CHECK_OPTION_SYMBOL_HIDING +CARES_CHECK_OPTION_EXPOSE_STATICS + +XC_CHECK_PATH_SEPARATOR + +dnl SED is mandatory for configure process and libtool. +dnl Set it now, allowing it to be changed later. +AC_PATH_PROG([SED], [sed], [not_found], + [$PATH:/usr/bin:/usr/local/bin]) +if test -z "$SED" || test "$SED" = "not_found"; then + AC_MSG_ERROR([sed not found in PATH. Cannot continue without sed.]) +fi +AC_SUBST([SED]) + +dnl GREP is mandatory for configure process and libtool. +dnl Set it now, allowing it to be changed later. +AC_PATH_PROG([GREP], [grep], [not_found], + [$PATH:/usr/bin:/usr/local/bin]) +if test -z "$GREP" || test "$GREP" = "not_found"; then + AC_MSG_ERROR([grep not found in PATH. Cannot continue without grep.]) +fi +AC_SUBST([GREP]) + +dnl EGREP is mandatory for configure process and libtool. +dnl Set it now, allowing it to be changed later. +if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1; then + AC_MSG_CHECKING([for egrep]) + EGREP="$GREP -E" + AC_MSG_RESULT([$EGREP]) +else + AC_PATH_PROG([EGREP], [egrep], [not_found], + [$PATH:/usr/bin:/usr/local/bin]) +fi +if test -z "$EGREP" || test "$EGREP" = "not_found"; then + AC_MSG_ERROR([egrep not found in PATH. Cannot continue without egrep.]) +fi +AC_SUBST([EGREP]) + +dnl AR is mandatory for configure process and libtool. +dnl This is target dependent, so check it as a tool. +if test -z "$AR"; then + dnl allow it to be overridden + AC_PATH_TOOL([AR], [ar], [not_found], + [$PATH:/usr/bin:/usr/local/bin]) + if test -z "$AR" || test "$AR" = "not_found"; then + AC_MSG_ERROR([ar not found in PATH. Cannot continue without ar.]) + fi +fi +AC_SUBST([AR]) + +AX_CODE_COVERAGE + + +dnl +dnl Detect the canonical host and target build environment +dnl + +AC_CANONICAL_HOST +dnl Get system canonical name +AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS]) + +XC_CHECK_PROG_CC +AX_CXX_COMPILE_STDCXX_11([noext],[optional]) + +XC_AUTOMAKE + +dnl This defines _ALL_SOURCE for AIX +CARES_CHECK_AIX_ALL_SOURCE + +dnl Our configure and build reentrant settings +CARES_CONFIGURE_THREAD_SAFE +CARES_CONFIGURE_REENTRANT + +dnl check for how to do large files +AC_SYS_LARGEFILE + +case $host_os in + solaris*) + AC_DEFINE(ETC_INET, 1, [if a /etc/inet dir is being used]) + ;; +esac + +XC_LIBTOOL + + +# +# Automake conditionals based on libtool related checks +# + +AM_CONDITIONAL([CARES_LT_SHLIB_USE_VERSION_INFO], + [test "x$xc_lt_shlib_use_version_info" = 'xyes']) +AM_CONDITIONAL([CARES_LT_SHLIB_USE_NO_UNDEFINED], + [test "x$xc_lt_shlib_use_no_undefined" = 'xyes']) +AM_CONDITIONAL([CARES_LT_SHLIB_USE_MIMPURE_TEXT], + [test "x$xc_lt_shlib_use_mimpure_text" = 'xyes']) + +# +# Due to libtool and automake machinery limitations of not allowing +# specifying separate CPPFLAGS or CFLAGS when compiling objects for +# inclusion of these in shared or static libraries, we are forced to +# build using separate configure runs for shared and static libraries +# on systems where different CPPFLAGS or CFLAGS are mandatory in order +# to compile objects for each kind of library. Notice that relying on +# the '-DPIC' CFLAG that libtool provides is not valid given that the +# user might for example choose to build static libraries with PIC. +# + +# +# Make our Makefile.am files use the staticlib CPPFLAG only when strictly +# targeting a static library and not building its shared counterpart. +# + +AM_CONDITIONAL([USE_CPPFLAG_CARES_STATICLIB], + [test "x$xc_lt_build_static_only" = 'xyes']) + +# +# Make staticlib CPPFLAG variable and its definition visible in output +# files unconditionally, providing an empty definition unless strictly +# targeting a static library and not building its shared counterpart. +# + +CPPFLAG_CARES_STATICLIB= +if test "x$xc_lt_build_static_only" = 'xyes'; then + CPPFLAG_CARES_STATICLIB='-DCARES_STATICLIB' +fi +AC_SUBST([CPPFLAG_CARES_STATICLIB]) + +dnl ********************************************************************** +dnl platform/compiler/architecture specific checks/flags +dnl ********************************************************************** + +CARES_CHECK_COMPILER +CARES_SET_COMPILER_BASIC_OPTS +CARES_SET_COMPILER_DEBUG_OPTS +CARES_SET_COMPILER_OPTIMIZE_OPTS +CARES_SET_COMPILER_WARNING_OPTS + +if test "$compiler_id" = "INTEL_UNIX_C"; then + # + if test "$compiler_num" -ge "1000"; then + dnl icc 10.X or later + CFLAGS="$CFLAGS -shared-intel" + elif test "$compiler_num" -ge "900"; then + dnl icc 9.X specific + CFLAGS="$CFLAGS -i-dynamic" + fi + # +fi + +CARES_CHECK_COMPILER_HALT_ON_ERROR +CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE +CARES_CHECK_COMPILER_PROTOTYPE_MISMATCH +CARES_CHECK_COMPILER_SYMBOL_HIDING + +dnl ********************************************************************** +dnl Compilation based checks should not be done before this point. +dnl ********************************************************************** + +dnl ********************************************************************** +dnl Make sure that our checks for headers windows.h winsock.h winsock2.h +dnl and ws2tcpip.h take precedence over any other further checks which +dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for +dnl this specific header files. And do them before its results are used. +dnl ********************************************************************** + +CURL_CHECK_HEADER_WINDOWS +CURL_CHECK_NATIVE_WINDOWS +case X-"$ac_cv_native_windows" in + X-yes) + CURL_CHECK_HEADER_WINSOCK + CURL_CHECK_HEADER_WINSOCK2 + CURL_CHECK_HEADER_WS2TCPIP + CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0600" + ;; + *) + ac_cv_header_winsock_h="no" + ac_cv_header_winsock2_h="no" + ac_cv_header_ws2tcpip_h="no" + ;; +esac + +dnl ********************************************************************** +dnl Checks for libraries. +dnl ********************************************************************** + +CARES_CHECK_LIB_XNET + +dnl gethostbyname without lib or in the nsl lib? +AC_CHECK_FUNC(gethostbyname, + [HAVE_GETHOSTBYNAME="1" + ], + [ AC_CHECK_LIB(nsl, gethostbyname, + [HAVE_GETHOSTBYNAME="1" + LIBS="$LIBS -lnsl" + ]) + ]) + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl gethostbyname in the socket lib? + AC_CHECK_LIB(socket, gethostbyname, + [HAVE_GETHOSTBYNAME="1" + LIBS="$LIBS -lsocket" + ]) +fi + +dnl At least one system has been identified to require BOTH nsl and socket +dnl libs at the same time to link properly. +if test "$HAVE_GETHOSTBYNAME" != "1" +then + AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs]) + my_ac_save_LIBS=$LIBS + LIBS="-lnsl -lsocket $LIBS" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + gethostbyname(); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + ],[ + AC_MSG_RESULT([no]) + LIBS=$my_ac_save_LIBS + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl This is for winsock systems + if test "$ac_cv_header_windows_h" = "yes"; then + if test "$ac_cv_header_winsock_h" = "yes"; then + case $host in + *-*-mingw32ce*) + winsock_LIB="-lwinsock" + ;; + *) + winsock_LIB="-lwsock32" + ;; + esac + fi + if test "$ac_cv_header_winsock2_h" = "yes"; then + winsock_LIB="-lws2_32" + fi + if test ! -z "$winsock_LIB"; then + my_ac_save_LIBS=$LIBS + LIBS="$winsock_LIB $LIBS" + AC_MSG_CHECKING([for gethostbyname in $winsock_LIB]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#else +#ifdef HAVE_WINSOCK_H +#include +#endif +#endif +#endif + ]],[[ + gethostbyname("www.dummysite.com"); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + ],[ + AC_MSG_RESULT([no]) + winsock_LIB="" + LIBS=$my_ac_save_LIBS + ]) + fi + fi +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl This is for Minix 3.1 + AC_MSG_CHECKING([for gethostbyname for Minix 3]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +/* Older Minix versions may need here instead */ +#include + ]],[[ + gethostbyname("www.dummysite.com"); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + ],[ + AC_MSG_RESULT([no]) + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl This is for eCos with a stubbed DNS implementation + AC_MSG_CHECKING([for gethostbyname for eCos]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#include + ]],[[ + gethostbyname("www.dummysite.com"); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + ],[ + AC_MSG_RESULT([no]) + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl gethostbyname in the net lib - for BeOS + AC_CHECK_LIB(net, gethostbyname, + [HAVE_GETHOSTBYNAME="1" + LIBS="$LIBS -lnet" + ]) +fi + + +if test "$HAVE_GETHOSTBYNAME" != "1"; then + AC_MSG_ERROR([couldn't find libraries for gethostbyname()]) +fi + +dnl resolv lib for Apple (MacOS and iOS) +AS_IF([test "x$host_vendor" = "xapple"], [ + AC_SEARCH_LIBS([res_servicename], [resolv], [ + AC_DEFINE([CARES_USE_LIBRESOLV], [1], [Use resolver library to configure cares]) + ], [ + AC_MSG_ERROR([Unable to find libresolv which is required for iPhone targets]) + ]) +]) + +dnl resolv lib for z/OS +AS_IF([test "x$host_vendor" = "xibm" -a "x$host_os" = "xopenedition" ], [ + AC_SEARCH_LIBS([res_init], [resolv], [ + AC_DEFINE([CARES_USE_LIBRESOLV], [1], [Use resolver library to configure cares]) + ], [ + AC_MSG_ERROR([Unable to find libresolv which is required for z/OS]) + ]) +]) + +dnl resolve lib? +AC_CHECK_FUNC(strcasecmp, , [ AC_CHECK_LIB(resolve, strcasecmp) ]) + +if test "$ac_cv_lib_resolve_strcasecmp" = "$ac_cv_func_strcasecmp"; then + AC_CHECK_LIB(resolve, strcasecmp, + [LIBS="-lresolve $LIBS"], + , + -lnsl) +fi +ac_cv_func_strcasecmp="no" + +dnl Windows builds require linking to iphlpapi +if test "$ac_cv_header_winsock2_h" = "yes"; then + LIBS="$LIBS -liphlpapi" +fi + +CARES_CHECK_LIBS_CONNECT + +dnl iOS 10? +AS_IF([test "x$host_vendor" = "xapple"], [ + AC_MSG_CHECKING([for iOS minimum version 10 or later]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#include + ]], [[ +#if TARGET_OS_IPHONE == 0 || __IPHONE_OS_VERSION_MIN_REQUIRED < 100000 +#error Not iOS 10 or later +#endif +return 0; + ]]) + ],[ + AC_MSG_RESULT([yes]) + ac_cv_ios_10="yes" + ],[ + AC_MSG_RESULT([no]) + ]) +]) + +dnl macOS 10.12? +AS_IF([test "x$host_vendor" = "xapple"], [ + AC_MSG_CHECKING([for macOS minimum version 10.12 or later]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#include + ]], [[ +#ifndef MAC_OS_X_VERSION_10_12 +# define MAC_OS_X_VERSION_10_12 101200 +#endif +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12 +#error Not macOS 10.12 or later +#endif +return 0; + ]]) + ],[ + AC_MSG_RESULT([yes]) + ac_cv_macos_10_12="yes" + ],[ + AC_MSG_RESULT([no]) + ]) +]) + +dnl ********************************************************************** +dnl In case that function clock_gettime with monotonic timer is available, +dnl check for additional required libraries. +dnl ********************************************************************** +dnl Xcode 8 bug: iOS when targeting less than 10, or macOS when targeting less than 10.12 will +dnl say clock_gettime exists, it is a weak symbol that only exists in iOS 10 or macOS 10.12 and will +dnl cause a crash at runtime when running on older versions. Skip finding CLOCK_MONOTONIC on older +dnl Apple OS's. +if test "x$host_vendor" != "xapple" || test "x$ac_cv_ios_10" = "xyes" || test "x$ac_cv_macos_10_12" = "xyes"; then + CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC +fi + +AC_MSG_CHECKING([whether to use libgcc]) +AC_ARG_ENABLE(libgcc, +AS_HELP_STRING([--enable-libgcc],[use libgcc when linking]), +[ case "$enableval" in + yes) + LIBS="$LIBS -lgcc" + AC_MSG_RESULT(yes) + ;; + *) AC_MSG_RESULT(no) + ;; + esac ], + AC_MSG_RESULT(no) +) + + +dnl Let's hope this split URL remains working: +dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \ +dnl genprogc/thread_quick_ref.htm + + +dnl ********************************************************************** +dnl Back to "normal" configuring +dnl ********************************************************************** + +dnl Checks for header files. +STDC_HEADERS + +AC_PROG_EGREP + + +CURL_CHECK_HEADER_MALLOC +CURL_CHECK_HEADER_MEMORY + +dnl check for a few basic system headers we need +AC_CHECK_HEADERS( + sys/types.h \ + sys/time.h \ + sys/select.h \ + sys/socket.h \ + sys/ioctl.h \ + sys/param.h \ + sys/uio.h \ + assert.h \ + netdb.h \ + netinet/in.h \ + netinet/tcp.h \ + net/if.h \ + errno.h \ + socket.h \ + strings.h \ + stdbool.h \ + time.h \ + limits.h \ + arpa/nameser.h \ + arpa/nameser_compat.h \ + arpa/inet.h, +dnl to do if not found +[], +dnl to do if found +[], +dnl default includes +[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +dnl We do this default-include simply to make sure that the nameser_compat.h +dnl header *REALLY* can be include after the new nameser.h. It seems AIX 5.1 +dnl (and others?) is not designed to allow this. +#ifdef HAVE_ARPA_NAMESER_H +#include +#endif + +dnl *Sigh* these are needed in order for net/if.h to get properly detected. +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +] +) + +dnl Test and set CARES_HAVE_ARPA_NAMESER_H / CARES_HAVE_ARPA_NAMESER_COMPAT_H +AC_CHECK_DECL([HAVE_ARPA_NAMESER_H], +[ +CARES_DEFINE_UNQUOTED([CARES_HAVE_ARPA_NAMESER_H]) +], +[] +) +AC_CHECK_DECL([HAVE_ARPA_NAMESER_COMPAT_H], +[ +CARES_DEFINE_UNQUOTED([CARES_HAVE_ARPA_NAMESER_COMPAT_H]) +], +[] +) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T +m4_warn([obsolete], +[Update your code to rely only on HAVE_SYS_TIME_H, +then remove this warning and the obsolete code below it. +All current systems provide time.h; it need not be checked for. +Not all systems provide sys/time.h, but those that do, all allow +you to include it and time.h simultaneously.])dnl +AC_CHECK_HEADERS_ONCE([sys/time.h]) +# Obsolete code to be removed. +if test $ac_cv_header_sys_time_h = yes; then + AC_DEFINE([TIME_WITH_SYS_TIME],[1],[Define to 1 if you can safely include both + and . This macro is obsolete.]) +fi +# End of obsolete code. + +CURL_CHECK_STRUCT_TIMEVAL + +AC_CHECK_TYPE(long long, + [AC_DEFINE(HAVE_LONGLONG, 1, + [Define to 1 if the compiler supports the 'long long' data type.])] + longlong="yes" +) + +if test "xyes" = "x$longlong"; then + AC_MSG_CHECKING([if numberLL works]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + long long val = 1000LL; + ]]) + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_LL, 1, [if your compiler supports LL]) + ],[ + AC_MSG_RESULT([no]) + ]) +fi + + +# check for ssize_t +AC_CHECK_TYPE(ssize_t, [ CARES_TYPEOF_ARES_SSIZE_T=ssize_t ], + [ CARES_TYPEOF_ARES_SSIZE_T=int ]) + +AC_DEFINE_UNQUOTED([CARES_TYPEOF_ARES_SSIZE_T], ${CARES_TYPEOF_ARES_SSIZE_T}, + [the signed version of size_t]) + + +# check for bool type +AC_CHECK_TYPE([bool],[ + AC_DEFINE(HAVE_BOOL_T, 1, + [Define to 1 if bool is an available type.]) +], ,[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDBOOL_H +#include +#endif +]) + +CARES_CONFIGURE_ARES_SOCKLEN_T + +TYPE_IN_ADDR_T + +TYPE_SOCKADDR_STORAGE + +TYPE_SIG_ATOMIC_T + +m4_warn([obsolete], +[your code may safely assume C89 semantics that RETSIGTYPE is void. +Remove this warning and the `AC_CACHE_CHECK' when you adjust the code.])dnl +AC_CACHE_CHECK([return type of signal handlers],[ac_cv_type_signal],[AC_COMPILE_IFELSE( +[AC_LANG_PROGRAM([#include +#include +], + [return *(signal (0, 0)) (0) == 1;])], + [ac_cv_type_signal=int], + [ac_cv_type_signal=void])]) +AC_DEFINE_UNQUOTED([RETSIGTYPE],[$ac_cv_type_signal],[Define as the return type of signal handlers + (`int' or `void').]) + + +CURL_CHECK_FUNC_RECV +CURL_CHECK_FUNC_RECVFROM +CURL_CHECK_FUNC_SEND +CURL_CHECK_MSG_NOSIGNAL + +CARES_CHECK_FUNC_CLOSESOCKET +CARES_CHECK_FUNC_CLOSESOCKET_CAMEL +CARES_CHECK_FUNC_CONNECT +CARES_CHECK_FUNC_FCNTL +CARES_CHECK_FUNC_FREEADDRINFO +CARES_CHECK_FUNC_GETADDRINFO +CARES_CHECK_FUNC_GETENV +CARES_CHECK_FUNC_GETHOSTBYADDR +CARES_CHECK_FUNC_GETHOSTBYNAME +CARES_CHECK_FUNC_GETHOSTNAME +CARES_CHECK_FUNC_GETSERVBYPORT_R +CARES_CHECK_FUNC_INET_NET_PTON +CARES_CHECK_FUNC_INET_NTOP +CARES_CHECK_FUNC_INET_PTON +CARES_CHECK_FUNC_IOCTL +CARES_CHECK_FUNC_IOCTLSOCKET +CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL +CARES_CHECK_FUNC_SETSOCKOPT +CARES_CHECK_FUNC_SOCKET +CARES_CHECK_FUNC_STRCASECMP +CARES_CHECK_FUNC_STRCMPI +CARES_CHECK_FUNC_STRDUP +CARES_CHECK_FUNC_STRICMP +CARES_CHECK_FUNC_STRNCASECMP +CARES_CHECK_FUNC_STRNCMPI +CARES_CHECK_FUNC_STRNICMP +CARES_CHECK_FUNC_WRITEV + + +dnl check for AF_INET6 +CARES_CHECK_CONSTANT( + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ], [PF_INET6], + AC_DEFINE_UNQUOTED(HAVE_PF_INET6,1,[Define to 1 if you have PF_INET6.]) +) + +dnl check for PF_INET6 +CARES_CHECK_CONSTANT( + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ], [AF_INET6], + AC_DEFINE_UNQUOTED(HAVE_AF_INET6,1,[Define to 1 if you have AF_INET6.]) +) + + +dnl check for the in6_addr structure +CARES_CHECK_STRUCT( + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#endif + ], [in6_addr], + AC_DEFINE_UNQUOTED(HAVE_STRUCT_IN6_ADDR,1,[Define to 1 if you have struct in6_addr.]) +) + +dnl check for the sockaddr_in6 structure +CARES_CHECK_STRUCT( + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#endif + ], [sockaddr_in6], + AC_DEFINE_UNQUOTED(HAVE_STRUCT_SOCKADDR_IN6,1, + [Define to 1 if you have struct sockaddr_in6.]) ac_have_sockaddr_in6=yes +) + +AC_CHECK_MEMBER(struct sockaddr_in6.sin6_scope_id, + AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID,1, + [Define to 1 if your struct sockaddr_in6 has sin6_scope_id.]) + , , + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#endif + ]) + +dnl check for the addrinfo structure +AC_CHECK_MEMBER(struct addrinfo.ai_flags, + AC_DEFINE_UNQUOTED(HAVE_STRUCT_ADDRINFO,1, + [Define to 1 if you have struct addrinfo.]),, + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#ifdef HAVE_WINSOCK2_H +#include +#ifdef HAVE_WS2TCPIP_H +#include +#endif +#endif +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif +#endif + ] +) + + +AC_CHECK_FUNCS([bitncmp \ + gettimeofday \ + if_indextoname +],[ +],[ + func="$ac_func" + AC_MSG_CHECKING([deeper for $func]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + $func (); + ]]) + ],[ + AC_MSG_RESULT([yes]) + eval "ac_cv_func_$func=yes" + AC_DEFINE_UNQUOTED(XC_SH_TR_CPP([HAVE_$func]), [1], + [Define to 1 if you have the $func function.]) + ],[ + AC_MSG_RESULT([but still no]) + ]) +]) + +dnl Android. Some variants like arm64 may no longer have __system_property_get +dnl in libc, but they are defined in the headers. Perform a link check. +AC_CHECK_FUNC([__system_property_get], [ + AC_DEFINE([HAVE___SYSTEM_PROPERTY_GET], [1], [Define if __system_property_get exists.]) +]) + +dnl Check if the getnameinfo function is available +dnl and get the types of five of its arguments. +CURL_CHECK_FUNC_GETNAMEINFO + + +AC_C_BIGENDIAN( + [AC_DEFINE(ARES_BIG_ENDIAN, 1, + [define this if ares is built for a big endian system])], + , + [AC_MSG_WARN([couldn't figure out endianess, assuming little endian!])] +) + +dnl Check for user-specified random device +AC_ARG_WITH(random, +AS_HELP_STRING([--with-random=FILE], + [read randomness from FILE (default=/dev/urandom)]), + [ CARES_RANDOM_FILE="$withval" ], + [ + dnl Check for random device. If we're cross compiling, we can't + dnl check, and it's better to assume it doesn't exist than it is + dnl to fail on AC_CHECK_FILE or later. + if test "$cross_compiling" = "no"; then + AC_CHECK_FILE("/dev/urandom", [ CARES_RANDOM_FILE="/dev/urandom"] ) + else + AC_MSG_WARN([cannot check for /dev/urandom while cross compiling; assuming none]) + fi + + ] +) +if test -n "$CARES_RANDOM_FILE" && test X"$CARES_RANDOM_FILE" != Xno ; then + AC_SUBST(CARES_RANDOM_FILE) + AC_DEFINE_UNQUOTED(CARES_RANDOM_FILE, "$CARES_RANDOM_FILE", + [a suitable file/device to read random data from]) +fi + +CARES_CHECK_OPTION_NONBLOCKING +CARES_CHECK_NONBLOCKING_SOCKET + +CARES_CONFIGURE_SYMBOL_HIDING + +CARES_PRIVATE_LIBS="$LIBS" +AC_SUBST(CARES_PRIVATE_LIBS) + +CARES_CFLAG_EXTRAS="" +if test X"$want_werror" = Xyes; then + CARES_CFLAG_EXTRAS="-Werror" +fi +AC_SUBST(CARES_CFLAG_EXTRAS) + +dnl squeeze whitespace out of some variables + +squeeze CFLAGS +squeeze CPPFLAGS +squeeze DEFS +squeeze LDFLAGS +squeeze LIBS + +squeeze CARES_PRIVATE_LIBS + +XC_CHECK_BUILD_FLAGS + +AC_MSG_CHECKING([whether to build tests]) +AC_ARG_ENABLE(tests, + AS_HELP_STRING([--enable-tests], [build test suite]), + [ build_tests="$enableval" ], + [ if test "x$HAVE_CXX11" = "x1" && test "x$cross_compiling" = "xno" ; then + build_tests="yes" + else + build_tests="no" + fi + ] +) + +if test "x$build_tests" = "xyes" ; then + if test "x$HAVE_CXX11" = "0" ; then + AC_MSG_ERROR([*** Building tests requires a CXX11 compiler]) + fi + if test "x$cross_compiling" = "xyes" ; then + AC_MSG_ERROR([*** Tests not supported when cross compiling]) + fi +fi +AC_MSG_RESULT([$build_tests]) + + +BUILD_SUBDIRS="include src docs" +if test "x$build_tests" = "xyes" ; then + AC_CONFIG_SUBDIRS([test]) + BUILD_SUBDIRS="${BUILD_SUBDIRS} test" +fi + +AC_SUBST(BUILD_SUBDIRS) + +AC_CONFIG_FILES([Makefile \ + include/Makefile \ + src/Makefile \ + src/lib/Makefile \ + src/tools/Makefile \ + docs/Makefile \ + libcares.pc ]) + +AC_OUTPUT +XC_AMEND_DISTCLEAN(['.']) diff -Nru nodejs-mozilla-12.18.1/deps/cares/CONTRIBUTING.md nodejs-mozilla-12.22.12/deps/cares/CONTRIBUTING.md --- nodejs-mozilla-12.18.1/deps/cares/CONTRIBUTING.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/CONTRIBUTING.md 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,15 @@ +Contributing to c-ares +====================== + +To contribute patches to c-ares, please generate a GitHub pull request +and follow these guidelines: + + - Check that the Travis builds are green for your pull request. + - Please update the test suite to add a test case for any new functionality. + - Build the library with `./configure --enable-debug --enable-maintainer-mode` and + ensure there are no new warnings. + +To improve the chances of the c-ares maintainers responding to your request: + + - Also send an email to the mailing list at `c-ares@lists.haxx.se` describing your change. + - To follow any associated discussion, please subscribe to the [mailing list](http://lists.haxx.se/listinfo/c-ares). diff -Nru nodejs-mozilla-12.18.1/deps/cares/depcomp nodejs-mozilla-12.22.12/deps/cares/depcomp --- nodejs-mozilla-12.18.1/deps/cares/depcomp 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/depcomp 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1999-2021 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/acountry.1 nodejs-mozilla-12.22.12/deps/cares/docs/acountry.1 --- nodejs-mozilla-12.18.1/deps/cares/docs/acountry.1 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/acountry.1 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,54 @@ +.TH ACOUNTRY "1" "April 2011" "c-ares utilities" +.SH NAME +acountry \- print the country where an IPv4 address or host is located +.SH SYNOPSIS +.B acountry +[\fIOPTION\fR]... \fIHOST\fR... +.SH DESCRIPTION +.PP +.\" Add any additional description here +.PP +Print the country where HOST (an IPv4 address or hostname) is located, +using the countries.nerd.dk DNS domain to identify the country. +.PP +This utility comes with the \fBc\-ares\fR asynchronous resolver library. +.SH OPTIONS +.TP +\fB\-d\fR +Print some extra debugging output. +.TP +\fB\-h\fR, \fB\-\-help\fR +Display this help and exit. +.TP +\fB\-v\fR +Be more verbose. Print extra information. +.SH "REPORTING BUGS" +Report bugs to the c-ares mailing list: +.br +\fBhttps://lists.haxx.se/listinfo/c-ares\fR +.SH "SEE ALSO" +.PP +adig(1), ahost(1). +.PP +The DNSBL countries.nerd.dk +.br +\fBhttp://countries.nerd.dk/\fR +.SH COPYRIGHT +This utility is based on code/ideas contained in sofware written by Greg Hudson (ares) +carrying the following notice: +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of M.I.T. not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. M.I.T. makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty. +.br +No further copyright claims are being made by the author(s) of this utility. +.SH AUTHOR +Gisle Vanem diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/adig.1 nodejs-mozilla-12.22.12/deps/cares/docs/adig.1 --- nodejs-mozilla-12.18.1/deps/cares/docs/adig.1 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/adig.1 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,85 @@ +.TH ADIG "1" "April 2011" "c-ares utilities" +.SH NAME +adig \- print information collected from Domain Name System (DNS) servers +.SH SYNOPSIS +.B adig +[\fIOPTION\fR]... \fINAME\fR... +.SH DESCRIPTION +.PP +.\" Add any additional description here +.PP +Send queries to DNS servers about \fINAME\fR and print received +information, where \fINAME\fR is a valid DNS name (e.g. www.example.com, +1.2.3.10.in-addr.arpa). +.PP +This utility comes with the \fBc\-ares\fR asynchronous resolver library. +.SH OPTIONS +.TP +\fB\-c\fR class +Set the query class. +Possible values for class are +NY, CHAOS, HS, IN (default). +.TP +\fB\-d\fR +Print some extra debugging output. +.TP +\fB\-f\fR flag +Add a flag. +Possible values for flag are +igntc, noaliases, norecurse, primary, stayopen, usevc. +.TP +\fB\-h\fR, \fB\-\-help\fR +Display this help and exit. +.TP +\fB\-T\fR port +Use specified TCP port to connect to DNS server. +.TP +\fB\-s\fR server +Connect to specified DNS server, instead of the system's default one(s). +.TP +\fB\-t\fR type +Query records of specified type. +Possible values for type are +A (default), AAAA, AFSDB, ANY, AXFR, CNAME, GPOS, HINFO, ISDN, KEY, LOC, MAILA, +MAILB, MB, MD, MF, MG, MINFO, MR, MX, NAPTR, NS, NSAP, NSAP_PTR, NULL, +PTR, PX, RP, RT, SIG, SOA, SRV, TXT, URI, WKS, X25, +.TP +\fB\-U\fR port +Use specified UDP port to connect to DNS server. +.TP +\fB\-x\fR +For an IPv4 \fB-t PTR a.b.c.d\fR lookup, query for +.br +\fBd.c.b.a.in-addr.arpa.\fR +This more often gives correct names in the \fBANSWER\fR. +.br +For an IPv6 \fB-t PTR addr\fR lookup, query for \fBa.b.c....z.IP6.ARPA.\fR +.TP +\fB\-xx\fR +As for \fB-x\fR and an IPv6 address, compact \fBa.b.c....z.IP6.ARPA.\fR into a RFC-2673 bit-string. +This compacted \fBbit-string\fR form is not supported by many DNS-servers. + +.SH "REPORTING BUGS" +Report bugs to the c-ares mailing list: +.br +\fBhttps://lists.haxx.se/listinfo/c-ares\fR +.SH "SEE ALSO" +.PP +acountry(1), ahost(1). +.SH COPYRIGHT +This utility is based on code/ideas contained in sofware written by Greg Hudson (ares) +carrying the following notice: +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of M.I.T. not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. M.I.T. makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty. +.br +No further copyright claims are being made by the author(s) of this utility. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ahost.1 nodejs-mozilla-12.22.12/deps/cares/docs/ahost.1 --- nodejs-mozilla-12.18.1/deps/cares/docs/ahost.1 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ahost.1 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,59 @@ +.TH AHOST "1" "April 2011" "c-ares utilities" +.SH NAME +ahost \- print the A or AAAA record associated with a hostname or IP address +.SH SYNOPSIS +.B ahost +[\fIOPTION\fR]... \fIHOST\fR... +.SH DESCRIPTION +.PP +.\" Add any additional description here +.PP +Look up the DNS A or AAAA record associated with HOST (a hostname or an +IP address). +.PP +This utility comes with the \fBc\-ares\fR asynchronous resolver library. +.SH OPTIONS +.TP +\fB\-d\fR +Print some extra debugging output. +.TP +\fB\-h\fR, \fB\-\-help\fR +Display this help and exit. +.TP +\fB\-t\fR type +If type is "a", print the A record (default). +If type is "aaaa", print the AAAA record. +If type is "u", look for either AAAA or A record (in that order). +.TP +\fB\-s\fR \fIdomain\fP +Specify the \fIdomain\fP to search instead of using the default values from +.br +/etc/resolv.conf. This option only has an effect on platforms that use +.br +/etc/resolv.conf +for DNS configuration; it has no effect on other platforms (such as Win32 +or Android). +.SH "REPORTING BUGS" +Report bugs to the c-ares mailing list: +.br +\fBhttps://lists.haxx.se/listinfo/c-ares\fR +.SH "SEE ALSO" +.PP +acountry(1), adig(1). +.SH COPYRIGHT +This utility is based on code/ideas contained in sofware written by Greg Hudson (ares) +carrying the following notice: +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of M.I.T. not be used in +advertising or publicity pertaining to distribution of the software +without specific, written prior permission. M.I.T. makes no +representations about the suitability of this software for any +purpose. It is provided "as is" without express or implied warranty. +.br +No further copyright claims are being made by the author(s) of this utility. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_cancel.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_cancel.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_cancel.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_cancel.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,46 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_CANCEL 3 "31 March 2004" +.SH NAME +ares_cancel \- Cancel a resolve +.SH SYNOPSIS +.nf +#include + +void ares_cancel(ares_channel \fIchannel\fP) +.fi +.SH DESCRIPTION +The \fBares_cancel(3)\fP function cancels all lookups/requests made on the the +name service channel identified by \fIchannel\fP. \fBares_cancel(3)\fP +invokes the callbacks for each pending query on the channel, passing a status +of +.BR ARES_ECANCELLED . +These calls give the callbacks a chance to clean up any state which might have +been stored in their arguments. If such a callback invocation adds a new +request to the channel, that request will \fInot\fP be cancelled by the +current invocation of \fBares_cancel(3)\fP. +.SH SEE ALSO +.BR ares_init (3) +.BR ares_destroy (3) +.SH NOTES +This function was added in c-ares 1.2.0 + +c-ares 1.6.0 and earlier pass a status of +.BR ARES_ETIMEOUT +instead of +.BR ARES_ECANCELLED . +.SH AUTHOR +Dirk Manske diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_create_query.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_create_query.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_create_query.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_create_query.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,83 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_CREATE_QUERY 3 "17 Aug 2012" +.SH NAME +ares_create_query \- Compose a single-question DNS query buffer +.SH SYNOPSIS +.nf +#include + +int ares_create_query(const char *\fIname\fP, + int \fIdnsclass\fP, + int \fItype\fP, + unsigned short \fIid\fP, + int \fIrd\fP, + unsigned char **\fIbuf\fP, + int *\fIbuflen\fP, + int \fImax_udp_size\fP) +.fi +.SH DESCRIPTION +The \fIares_create_query(3)\fP function composes a DNS query with a single +question. The parameter \fIname\fP gives the query name as a NUL-terminated C +string of period-separated labels optionally ending with a period; periods and +backslashes within a label must be escaped with a backlash. + +The parameters \fIdnsclass\fP and \fItype\fP give the class and type of the +query using the values defined in \fB\fP. + +The parameter \fIid\fP gives a 16-bit identifier for the query. + +The parameter \fIrd\fP should be nonzero if recursion is desired, zero if not. + +The query will be placed in an allocated buffer, a pointer to which will be +stored in the variable pointed to by \fIbuf\fP, and the length of which will +be stored in the variable pointed to by \fIbuflen\fP. + +It is the caller's responsibility to free this buffer using +\fIares_free_string(3)\fP when it is no longer needed. The parameter +\fImax_udp_size\fP should be nonzero to activate EDNS. Usage of +\fIares_create_query(3)\fP\ with \fImax_udp_size\fP set to zero is equivalent +to using \fIares_mkquery(3)\fP. +.SH RETURN VALUES +.B ares_create_query +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +Construction of the DNS query succeeded. +.TP 15 +.B ARES_ENOTFOUND +The query name +.I name +refers to a +.I .onion +domain name. See RFC 7686. +.TP 15 +.B ARES_EBADNAME +The query name +.I name +could not be encoded as a domain name, either because it contained a +zero-length label or because it contained a label of more than 63 +characters. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +Added in c-ares 1.10.0 +.SH SEE ALSO +.BR ares_expand_name (3), +.BR ares_free_string (3), +.BR ares_mkquery (3) +.SH AUTHOR diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_destroy.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_destroy.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_destroy.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_destroy.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,40 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_DESTROY 3 "7 December 2004" +.SH NAME +ares_destroy \- Destroy a resolver channel +.SH SYNOPSIS +.nf +#include + +void ares_destroy(ares_channel \fIchannel\fP) +.fi +.SH DESCRIPTION +The \fBares_destroy(3)\fP function destroys the name service channel +identified by \fIchannel\fP, freeing all memory and closing all sockets used +by the channel. + +\fBares_destroy(3)\fP invokes the callbacks for each pending query on the +channel, passing a status of \fIARES_EDESTRUCTION\fP. These calls give the +callbacks a chance to clean up any state which might have been stored in their +arguments. A callback must not add new requests to a channel being destroyed. +.SH SEE ALSO +.BR ares_init (3), +.BR ares_cancel (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_destroy_options.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_destroy_options.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_destroy_options.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_destroy_options.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,35 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_DESTROY_OPTIONS 3 "1 June 2007" +.SH NAME +ares_destroy_options \- Destroy options initialized with ares_save_options +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_destroy_options(struct ares_options *\fIoptions\fP) +.fi +.SH DESCRIPTION +The \fBares_destroy_options(3)\fP function destroys the options struct +identified by \Ioptions\fP, freeing all memory allocated by +\fBares_save_options(3)\fP. +.SH SEE ALSO +.BR ares_save_options (3), +.BR ares_init_options (3) +.SH AUTHOR +Brad House +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_dup.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_dup.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_dup.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_dup.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,39 @@ +.\" +.\" Copyright (C) 2004-2009 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_DUP 3 "26 May 2009" +.SH NAME +ares_dup \- Duplicate a resolver channel +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_dup(ares_channel *\fIdest\fP, ares_channel \fIsource\fP) +.fi +.SH DESCRIPTION +The \fBares_dup(3)\fP function duplicates an existing communications channel +for name service lookups. If it returns successfully, \fBares_dup(3)\fP will +set the variable pointed to by \fIdest\fP to a handle used to identify the +name service channel. The caller should invoke \fIares_destroy(3)\fP on the +handle when the channel is no longer needed. +.SH SEE ALSO +.BR ares_destroy(3), +.BR ares_init(3), +.BR ares_library_init(3) +.SH AVAILABILITY +\fIares_dup(3)\fP was added in c-ares 1.6.0 +.SH AUTHOR +Daniel Stenberg + diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_expand_name.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_expand_name.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_expand_name.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_expand_name.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,65 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_EXPAND_NAME 3 "20 Nov 2009" +.SH NAME +ares_expand_name \- Expand a DNS-encoded domain name +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_expand_name(const unsigned char *\fIencoded\fP, +.B const unsigned char *\fIabuf\fP, int \fIalen\fP, char **\fIs\fP, +.B long *\fIenclen\fP) +.fi +.SH DESCRIPTION +The +.B ares_expand_name +function converts a DNS-encoded domain name to a dot-separated C +string. The argument +.I encoded +gives the beginning of the encoded domain name, and the arguments +.I abuf +and +.I alen +give the containing message buffer (necessary for the processing of +indirection pointers within the encoded domain name). The result is +placed in a NUL-terminated allocated buffer, a pointer to which is +stored in the variable pointed to by +.IR s . +The length of the encoded name is stored in the variable pointed to by +.I enclen +so that the caller can advance past the encoded domain name to read +further data in the message. + +Use \fIares_free_string(3)\fP to free the allocated hostname. +.SH RETURN VALUES +.B ares_expand_name +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +Expansion of the encoded name succeeded. +.TP 15 +.B ARES_EBADNAME +The encoded domain name was malformed and could not be expanded. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_mkquery (3), ares_free_string (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_expand_string.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_expand_string.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_expand_string.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_expand_string.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,61 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_EXPAND_NAME 3 "20 Nov 2009" +.SH NAME +ares_expand_string \- Expand a length encoded string +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_expand_string(const unsigned char *\fIencoded\fP, +.B const unsigned char *\fIabuf\fP, int \fIalen\fP, unsigned char **\fIs\fP, +.B long *\fIenclen\fP) +.fi +.SH DESCRIPTION +The +.B ares_expand_string +function converts a length encoded string to a NUL-terminated C +string. The argument +.I encoded +gives the beginning of the encoded string, and the arguments +.I abuf +and +.I alen +give the containing message buffer (necessary for the processing of +indirection pointers within the encoded domain name). The result is +placed in a NUL-terminated allocated buffer, a pointer to which is +stored in the variable pointed to by +.IR s . +The length of the encoded string is stored in the variable pointed to by +.I enclen +so that the caller can advance past the encoded string to read +further data in the message. +.SH RETURN VALUES +.B ares_expand_string +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +Expansion of the encoded string succeeded. +.TP 15 +.B ARES_EBADSTR +The encoded string was malformed and could not be expanded. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_free_string (3) +.SH AUTHOR +Dominick Meglio diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_fds.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_fds.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_fds.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_fds.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,48 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_FDS 3 "23 July 1998" +.SH NAME +ares_fds \- return file descriptors to select on +.SH SYNOPSIS +.nf +#include + +int ares_fds(ares_channel \fIchannel\fP, + fd_set *\fIread_fds\fP, + fd_set *\fIwrite_fds\fP) +.fi +.SH DESCRIPTION +The \fBares_fds(3)\fP function retrieves the set of file descriptors which the +calling application should select on for reading and writing for the +processing of name service queries pending on the name service channel +identified by \fIchannel\fP. + +File descriptors will be set in the file descriptor sets pointed to by +\fIread_fds\fP and \fIwrite_fds\fP as appropriate. File descriptors already +set in \fIread_fds\fP and \fIwrite_fds\fP will remain set; initialization of +the file descriptor sets (using \fBFD_ZERO\fP) is the responsibility of the +caller. +.SH RETURN VALUES +\fBares_fds(3)\fP returns a value that is one greater than the number of the +highest socket set in either \fIread_fds\fP or \fIwrite_fds\fP. If no queries +are active, \fBares_fds(3)\fP returns 0. +.SH SEE ALSO +.BR ares_timeout (3), +.BR ares_process (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_freeaddrinfo.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_freeaddrinfo.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_freeaddrinfo.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_freeaddrinfo.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,37 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_FREEADDRINFO 3 "31 October 2018" +.SH NAME +ares_freeaddrinfo \- Free addrinfo structure allocated by ares functions +.SH SYNOPSIS +.nf +#include + +void ares_freeaddrinfo(struct ares_addrinfo *\fIai\fP) +.fi +.SH DESCRIPTION +The +.B ares_freeaddrinfo +function frees a +.B struct ares_addrinfo +returned in \fIresult\fP of +.B ares_addrinfo_callback +.SH SEE ALSO +.BR ares_getaddrinfo (3), +.SH AUTHOR +Christian Ammer +.BR +Andrew Selivanov diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_free_data.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_free_data.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_free_data.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_free_data.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,82 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2010 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_FREE_DATA 3 "5 March 2010" +.SH NAME +ares_free_data \- Free data allocated by several c-ares functions +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_free_data(void *\fIdataptr\fP) +.PP +.B cc file.c -lcares +.fi +.SH DESCRIPTION +.PP +The +.B ares_free_data(3) +function frees one or more data structures allocated and returned +by several c-ares functions. Specifically the data returned by the +following list of functions must be deallocated using this function. +.TP 5 +.B ares_get_servers(3) +When used to free the data returned by ares_get_servers(3) this +will free the whole linked list of ares_addr_node structures returned +by ares_get_servers(3). +.TP +.B ares_parse_srv_reply(3) +When used to free the data returned by ares_parse_srv_reply(3) this +will free the whole linked list of ares_srv_reply structures returned +by ares_parse_srv_reply(3), along with any additional storage +associated with those structures. +.TP +.B ares_parse_mx_reply(3) +When used to free the data returned by ares_parse_mx_reply(3) this +will free the whole linked list of ares_mx_reply structures returned +by ares_parse_mx_reply(3), along with any additional storage +associated with those structures. +.TP +.B ares_parse_txt_reply(3) +When used to free the data returned by ares_parse_txt_reply(3) this +will free the whole linked list of ares_txt_reply structures returned +by ares_parse_txt_reply(3), along with any additional storage +associated with those structures. +.TP +.B ares_parse_soa_reply(3) +When used to free the data returned by ares_parse_soa_reply(3) this +will free the ares_soa_reply structure, along with any additional storage +associated with those structure. +.B ares_parse_uri_reply(3) +When used to free the data returned by ares_parse_uri_reply(3) this +will free list of ares_uri_reply structures, along with any additional +storage associated with those structure. +.SH RETURN VALUE +The ares_free_data() function does not return a value. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0. +.SH SEE ALSO +.BR ares_get_servers(3), +.BR ares_parse_srv_reply(3), +.BR ares_parse_mx_reply(3), +.BR ares_parse_txt_reply(3), +.BR ares_parse_soa_reply(3) +.SH AUTHOR +Yang Tse +.PP +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2010 by Daniel Stenberg. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_free_hostent.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_free_hostent.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_free_hostent.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_free_hostent.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,45 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_FREE_HOSTENT 3 "23 July 1998" +.SH NAME +ares_free_hostent \- Free host structure allocated by ares functions +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_free_hostent(struct hostent *\fIhost\fP) +.fi +.SH DESCRIPTION +The +.I ares_free_hostent +function frees a +.B struct hostent +allocated by one of the functions \fIares_parse_a_reply(3)\fP, +\fIares_parse_aaaa_reply(3)\fP, or \fIares_parse_ptr_reply(3)\fP. +.SH NOTES +It is not necessary (and is not correct) to free the host structure passed to +the callback functions for \fIares_gethostbyname(3)\fP or +\fIares_gethostbyaddr(3)\fP. c-ares will automatically free such host +structures when the callback returns. +.SH SEE ALSO +.BR ares_parse_a_reply (3), +.BR ares_parse_aaaa_reply (3), +.BR ares_parse_ptr_reply (3), +.BR ares_parse_ns_reply (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_free_string.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_free_string.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_free_string.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_free_string.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,34 @@ +.\" +.\" Copyright 2000 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_FREE_STRING 3 "4 February 2004" +.SH NAME +ares_free_string \- Free strings allocated by ares functions +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_free_string(void *\fIstr\fP) +.fi +.SH DESCRIPTION +The \fIares_free_string(3)\fP function frees a string allocated by an ares +function. +.SH SEE ALSO +.BR ares_mkquery (3) +.BR ares_expand_string (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 2000 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_getaddrinfo.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_getaddrinfo.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_getaddrinfo.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_getaddrinfo.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,199 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GETADDRINFO 3 "4 November 2018" +.SH NAME +ares_getaddrinfo \- Initiate a host query by name and service +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_addrinfo_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, struct ares_addrinfo *\fIresult\fP) +.PP +.B void ares_getaddrinfo(ares_channel \fIchannel\fP, const char *\fIname\fP, +.B const char* \fIservice\fP, const struct ares_addrinfo_hints *\fIhints\fP, +.B ares_addrinfo_callback \fIcallback\fP, void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_getaddrinfo +function initiates a host query by name on the name service channel +identified by +.IR channel . +The +.I name +and +.I service +parameters give the hostname and service as NULL-terminated C strings. +The +.I hints +parameter is an +.BR ares_addrinfo_hints +structure: +.PP +.RS +.EX +struct ares_addrinfo_hints { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; +}; +.EE +.RE +.TP +.I ai_family +Specifies desired address family. AF_UNSPEC means return both AF_INET and AF_INET6. +.TP +.I ai_socktype +Specifies desired socket type, for example SOCK_STREAM or SOCK_DGRAM. +Setting this to 0 means any type. +.TP +.I ai_protocol +Setting this to 0 means any protocol. +.TP +.I ai_flags +Specifies additional options, see below. +.PP +.TP 19 +.B ARES_AI_NUMERICSERV +If this option is set +.I service +field will be treated as a numeric value. +.TP 19 +.B ARES_AI_CANONNAME +The ares_addrinfo structure will return a canonical names list. +.TP 19 +.B ARES_AI_NOSORT +Result addresses will not be sorted and no connections to resolved addresses will be attempted. +.TP 19 +.B ARES_AI_ENVHOSTS +Read hosts file path from the environment variable +.I CARES_HOSTS . +.PP +When the query is complete or has failed, the ares library will invoke \fIcallback\fP. +Completion or failure of the query may happen immediately, or may happen +during a later call to \fIares_process(3)\fP, \fIares_destroy(3)\fP or +\fIares_cancel(3)\fP. +.PP +The callback argument +.I arg +is copied from the +.B ares_getaddrinfo +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully. +.TP 19 +.B ARES_ENOTIMP +The ares library does not know how to find addresses of type +.IR family . +.TP 19 +.B ARES_ENOTFOUND +The +.I name +was not found. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_ECANCELLED +The query was cancelled. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.PP +On successful completion of the query, the callback argument +.I result +points to a +.B struct ares_addrinfo +which contains two linked lists, one with resolved addresses and another with canonical names. +Also included is the official name of the host (analogous to gethostbyname() h_name). +.PP +.RS +.EX +struct ares_addrinfo { + struct ares_addrinfo_cname *cnames; + struct ares_addrinfo_node *nodes; + char *name; +}; +.EE +.RE +.PP +.I ares_addrinfo_node +structure is similar to RFC3493 addrinfo, but without canonname and with extra ttl field. +.RS +.PP +.EX +struct ares_addrinfo_node { + int ai_ttl; + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + ares_socklen_t ai_addrlen; + struct sockaddr *ai_addr; + struct ares_addrinfo_node *ai_next; +}; +.EE +.RE +.PP +.I ares_addrinfo_cname +structure is a linked list of CNAME records where +.I ttl +is a time to live +.I alias +is a label of the resource record and +.I name +is a value (canonical name) of the resource record. +See RFC2181 10.1.1. CNAME terminology. +.RS +.PP +.EX +struct ares_addrinfo_cname { + int ttl; + char *alias; + char *name; + struct ares_addrinfo_cname *next; +}; +.EE +.RE +.PP +The reserved memory has to be deleted by +.B ares_freeaddrinfo. + +The result is sorted according to RFC6724 except: + - Rule 3 (Avoid deprecated addresses) + - Rule 4 (Prefer home addresses) + - Rule 7 (Prefer native transport) + +Please note that the function will attempt a connection +on each of the resolved addresses as per RFC6724. +.SH AVAILABILITY +This function was added in c-ares 1.16.0, released in March 2020. +.SH SEE ALSO +.BR ares_freeaddrinfo (3) +.SH AUTHOR +Christian Ammer +.br +Andrew Selivanov diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_gethostbyaddr.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_gethostbyaddr.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_gethostbyaddr.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_gethostbyaddr.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,104 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GETHOSTBYADDR 3 "24 July 1998" +.SH NAME +ares_gethostbyaddr \- Initiate a host query by address +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, struct hostent *\fIhostent\fP) +.PP +.B void ares_gethostbyaddr(ares_channel \fIchannel\fP, const void *\fIaddr\fP, +.B int \fIaddrlen\fP, int \fIfamily\fP, ares_host_callback \fIcallback\fP, +.B void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_gethostbyaddr +function initiates a host query by address on the name service channel +identified by +.IR channel . +The parameters +.I addr +and +.I addrlen +give the address as a series of bytes, and +.I family +gives the type of address. When the query is complete or has failed, the ares +library will invoke \fIcallback\fP. Completion or failure of the query may +happen immediately, or may happen during a later call to +\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP. +.PP +The callback argument +.I arg +is copied from the +.B ares_gethostbyaddr +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully. +.TP 19 +.B ARES_ENOTIMP +The ares library does not know how to look up addresses of type +.IR family . +.TP 19 +.B ARES_ENOTFOUND +The address +.I addr +was not found. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_ECANCELLED +The query was cancelled. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +On successful completion of the query, the callback argument +.I hostent +points to a +.B struct hostent +containing the name of the host returned by the query. The callback +need not and should not attempt to free the memory pointed to by +.IR hostent ; +the ares library will free it when the callback returns. If the query +did not complete successfully, +.I hostent +will be +.BR NULL . +.SH SEE ALSO +.BR ares_process (3), +.BR ares_gethostbyname (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_gethostbyname.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_gethostbyname.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_gethostbyname.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_gethostbyname.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,111 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GETHOSTBYNAME 3 "25 July 1998" +.SH NAME +ares_gethostbyname \- Initiate a host query by name +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, struct hostent *\fIhostent\fP) +.PP +.B void ares_gethostbyname(ares_channel \fIchannel\fP, const char *\fIname\fP, +.B int \fIfamily\fP, ares_host_callback \fIcallback\fP, void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_gethostbyname +function initiates a host query by name on the name service channel +identified by +.IR channel . +The parameter +.I name +gives the hostname as a NUL-terminated C string, and +.I family +gives the desired type of address for the resulting host entry. When the +query is complete or has failed, the ares library will invoke \fIcallback\fP. +Completion or failure of the query may happen immediately, or may happen +during a later call to \fIares_process(3)\fP, \fIares_destroy(3)\fP or +\fIares_cancel(3)\fP. +.PP +The callback argument +.I arg +is copied from the +.B ares_gethostbyname +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully. +.TP 19 +.B ARES_ENOTIMP +The ares library does not know how to find addresses of type +.IR family . +.TP 19 +.B ARES_EBADNAME +The hostname +.B name +is composed entirely of numbers and periods, but is not a valid +representation of an Internet address. +.TP 19 +.B ARES_ENODATA +There was no data returned to extract a result from. +.TP 19 +.B ARES_ENOTFOUND +The name +.I name +was not found. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_ECANCELLED +The query was cancelled. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +On successful completion of the query, the callback argument +.I hostent +points to a +.B struct hostent +containing the name of the host returned by the query. The callback +need not and should not attempt to free the memory pointed to by +.IR hostent ; +the ares library will free it when the callback returns. If the query +did not complete successfully, +.I hostent +will be +.BR NULL . +.SH SEE ALSO +.BR ares_process (3), +.BR ares_gethostbyaddr (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_gethostbyname_file.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_gethostbyname_file.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_gethostbyname_file.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_gethostbyname_file.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,83 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GETHOSTBYNAME 3 "25 July 1998" +.SH NAME +ares_gethostbyname_file \- Lookup a name in the system's hosts file +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_gethostbyname_file(ares_channel \fIchannel\fP, const char *\fIname\fP, +.B int \fIfamily\fP, struct hostent **host) +.fi +.SH DESCRIPTION +The +.B ares_gethostbyname_file +function performs a host lookup by name against the system's hosts file (or equivalent local hostname database). +The +.IR channel +parameter is required, but no asynchronous queries are performed. Instead, the +lookup is done via the same mechanism used to perform 'f' lookups +(see the +.I lookups +options field in \fIares_init_options(3)\fP). +The parameter +.I name +gives the hostname as a NUL-terminated C string, and +.I family +gives the desired type of address for the resulting host entry. +.PP +The return value indicates whether the query succeeded and, if not, how it +failed. It may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully and +.I host +now points to the result (and must be freed with \fIares_free_hostent(3)\fP). +.TP 19 +.B ARES_ENOTFOUND +The hostname +.I name +was not found. +.TP 19 +.B ARES_EFILE +There was a file I/O error while performing the lookup. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.PP +On successful completion of the query, the pointer pointed to by +.I host +points to a +.B struct hostent +containing the address of the host returned by the lookup. The user must +free the memory pointed to by +.IR host +when finished with it by calling \fIares_free_hostent(3)\fP. If the lookup did +not complete successfully, +.I host +will be +.BR NULL . +.SH AVAILABILITY +Added in c-ares 1.5.4 +.SH SEE ALSO +.BR ares_gethostbyname (3), +.BR ares_free_hostent (3), +.BR ares_init_options (3) +.SH AUTHOR +Brad Spencer +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_getnameinfo.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_getnameinfo.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_getnameinfo.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_getnameinfo.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,151 @@ +.\" +.\" Copyright 2005 by Dominick Meglio. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GETNAMEINFO 3 "1 May 2009" +.SH NAME +ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, char *\fInode\fP, char *\fIservice\fP) +.PP +.B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP, +.B ares_socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP, +.B void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_getnameinfo +function is defined for protocol-independent address translation. The function +is a combination of \fIares_gethostbyaddr(3)\fP and \fIgetservbyport(3)\fP. The function will +translate the address either by executing a host query on the name service channel +identified by +.IR channel +or it will attempt to resolve it locally if possible. +The parameters +.I sa +and +.I len +give the address as a sockaddr structure, and +.I flags +gives the options that the function will use. Valid flags are listed below: +.TP 19 +.B ARES_NI_NOFQDN +Only the nodename portion of the FQDN is returned for local hosts. +.TP 19 +.B ARES_NI_NUMERICHOST +The numeric form of the hostname is returned rather than the name. +.TP 19 +.B ARES_NI_NAMEREQD +An error is returned if the hostname cannot be found in the DNS. +.TP 19 +.B ARES_NI_NUMERICSERV +The numeric form of the service is returned rather than the name. +.TP 19 +.B ARES_NI_TCP +The service name is to be looked up for the TCP protocol. +.TP 19 +.B ARES_NI_UDP +The service name is to be looked up for the UDP protocol. +.TP 19 +.B ARES_NI_SCTP +The service name is to be looked up for the SCTP protocol. +.TP 19 +.B ARES_NI_DCCP +The service name is to be looked up for the DCCP protocol. +.TP 19 +.B ARES_NI_NUMERICSCOPE +The numeric form of the scope ID is returned rather than the name. +.TP 19 +.B ARES_NI_LOOKUPHOST +A hostname lookup is being requested. +.TP 19 +.B ARES_NI_LOOKUPSERVICE +A service name lookup is being requested. +.PP +When the query +is complete or has +failed, the ares library will invoke \fIcallback\fP. Completion or failure of +the query may happen immediately, or may happen during a later call to +\fIares_process(3)\fP, \fIares_destroy(3)\fP or \fIares_cancel(3)\fP. +.PP +The callback argument +.I arg +is copied from the +.B ares_getnameinfo +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The host lookup completed successfully. +.TP 19 +.B ARES_ENOTIMP +The ares library does not know how to look up addresses of type +.IR family . +.TP 19 +.B ARES_ENOTFOUND +The address +.I addr +was not found. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_ECANCELLED +The query was cancelled. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.TP 19 +.B ARES_EBADFLAGS +The +.I flags +parameter contains an illegal value. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +On successful completion of the query, the callback argument +.I node +contains a string representing the hostname (assuming +.B ARES_NI_LOOKUPHOST +was specified). Additionally, +.I service +contains a string representing the service name (assuming +.B ARES_NI_LOOKUPSERVICE +was specified). +If the query did not complete successfully, or one of the values +was not requested, +.I node +or +.I service +will be +.BR NULL . +.SH SEE ALSO +.BR ares_process (3), +.SH AUTHOR +Dominick Meglio +.br +Copyright 2005 by Dominick Meglio. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_get_servers.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_get_servers.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_get_servers.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_get_servers.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,84 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2008-2010 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GET_SERVERS 3 "5 March 2010" +.SH NAME +ares_get_servers, ares_get_servers_ports \- Retrieve name servers from an initialized ares_channel +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_get_servers(ares_channel \fIchannel\fP, struct ares_addr_node **\fIservers\fP) +.B int ares_get_servers_ports(ares_channel \fIchannel\fP, struct ares_addr_port_node **\fIservers\fP) +.fi +.SH DESCRIPTION +The \fBares_get_servers(3)\fP function retrieves name servers configuration +from the +channel data identified by +.IR channel , +as a linked list of ares_addr_node structs storing a pointer to the first +node at the address specified by +.IR servers . + +The \fBares_get_servers_ports(3)\fP function also retrieves any per-server +port information that may have been previously configured, returning a linked +list of ares_addr_port structures. + +Function caller may traverse the returned name server linked list, or may use +it directly as suitable input for the \fBares_set_servers(3)\fP / +\fBares_set_servers_ports(3)\fP functions, but +shall not shrink or extend the list on its own. + +Each node of the name server linked list is stored in memory dynamically +allocated and managed by c-ares. It is the caller's responsibility to free +the resulting linked list, using \fBares_free_data(3)\fP , once the caller +does not need it any longer. + +This function is capable of handling IPv4 and IPv6 name server +addresses simultaneously, rendering \fBares_save_options(3)\fP with +optmask \fBARES_OPT_SERVERS\fP functionally obsolete except for +IPv4-only name server usage. + +.SH RETURN VALUES +This function may return any of the following values: +.TP 15 +.B ARES_SUCCESS +The name servers configuration was successfully retrieved +.TP 15 +.B ARES_ENOMEM +The memory was exhausted +.TP 15 +.B ARES_ENODATA +The channel data identified by +.IR channel +was invalid. +.SH SEE ALSO +.BR ares_set_servers (3), +.BR ares_init_options (3), +.BR ares_save_options(3) +.SH AVAILABILITY +\fBares_get_servers(3)\fP was added in c-ares 1.7.1; +\fBares_get_servers_ports(3)\fP was added in c-ares 1.11.0. +.SH AUTHOR +Implementation of this function and associated library internals are based +on code, comments and feedback provided in November and December of 2008 by +Daniel Stenberg, Gregor Jasny, Phil Blundell and Yang Tse, December 2009 +by Cedric Bail, February 2010 by Jakub Hrozek. On March 2010 Yang Tse +shuffled all the bits and this function popped out. +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2008-2010 by Daniel Stenberg diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_get_servers_ports.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_get_servers_ports.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_get_servers_ports.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_get_servers_ports.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1 @@ +.so man3/ares_get_servers.3 diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_getsock.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_getsock.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_getsock.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_getsock.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,57 @@ +.\" +.\" Copyright 1998 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_GETSOCK 3 "11 March 2010" +.SH NAME +ares_getsock \- get socket descriptors to wait on +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_getsock(ares_channel \fIchannel\fP, ares_socket_t *\fIsocks\fP, +.B int \fInumsocks\fP); +.fi +.SH DESCRIPTION +The +.B ares_getsock +function retrieves the set of socket descriptors which the calling +application should wait on for reading and/or writing for the +processing of name service queries pending on the name service channel +identified by +.IR channel . +Socket descriptors will be set in the socket descriptor array pointed to by +\fIsocks\fP. +\fInumsocks\fP is the size of the given array in number of ints. + +This function can only return information about up to 16 sockets. If more are +in use (however unlikely that is), they are simply not reported back. +.SH RETURN VALUES +\fBares_getsock\fP returns a bitmask for what actions to wait for on the +different sockets. The ares.h header file provides these convenience macros to +extract the information appropriately: + +.nf +#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about + this many sockets */ +#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num))) +#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \ + ARES_GETSOCK_MAXNUM))) +.fi +.SH NOTES +This function was added in c-ares 1.3.1 +.SH SEE ALSO +.BR ares_timeout (3), +.BR ares_fds (3), +.BR ares_process (3) diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_inet_ntop.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_inet_ntop.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_inet_ntop.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_inet_ntop.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,47 @@ +.\" +.\" Copyright (C) 2013 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_INET_NTOP 3 "17 Feb 2013" +.SH NAME +ares_inet_ntop \- convert a network format address to presentation format +.SH SYNOPSIS +.nf +.B #include +.PP +.B const char * +.B ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size); +.fi +.SH DESCRIPTION +This is a portable version with the identical functionality of the commonly +available \fIinet_ntop\fP. + +The ares_inet_ntop() function converts a numeric address into a text string +suitable for presentation. The \fBaf\fP argument shall specify the family of +the address. This can be AF_INET or AF_INET6. The \fBsrc\fP argument points +to a buffer holding an IPv4 address if the af argument is AF_INET, or an IPv6 +address if the af argument is AF_INET6; the address must be in network byte +order. The \fBdst\fP argument points to a buffer where the function stores the +resulting text string; it shall not be NULL. The \fBsize\fP argument specifies +the size of this buffer, which shall be large enough to hold the text string +(INET_ADDRSTRLEN (16) characters for IPv4, INET6_ADDRSTRLEN (46) characters +for IPv6). +.SH SEE ALSO +.BR ares_init(3), +.BR ares_inet_pton(3) +.SH AVAILABILITY +made properly publicly available in c-ares for real in version 1.10.0 +.SH AUTHOR +Daniel Stenberg + diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_inet_pton.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_inet_pton.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_inet_pton.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_inet_pton.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,43 @@ +.\" +.\" Copyright (C) 2013 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_INET_PTON 3 "17 Feb 2013" +.SH NAME +ares_inet_pton \- convert an IPv4 or IPv6 address from text to binary form +.SH SYNOPSIS +.nf +.B #include +.PP +.B const char *ares_inet_pton(int af, const char *src, void *dst); +.fi +.SH DESCRIPTION +This is a portable version with the identical functionality of the commonly +available \fIinet_pton\fP. + +The ares_inet_pton() function converts the address in its standard text +presentation form into its numeric binary form. The \fBaf\fP argument shall +specify the family of the address. The AF_INET and AF_INET6 address families +shall be supported. The \fBsrc\fP argument points to the string being passed +in. The \fBdst\fP argument points to a buffer into which the function stores +the numeric address; this shall be large enough to hold the numeric address +(32 bits for AF_INET, 128 bits for AF_INET6). +.SH SEE ALSO +.BR ares_init(3), +.BR ares_inet_ntop(3) +.SH AVAILABILITY +made properly publicly available in c-ares for real in version 1.10.0 +.SH AUTHOR +Daniel Stenberg + diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_init.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_init.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_init.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_init.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,81 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2010 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_INIT 3 "5 March 2010" +.SH NAME +ares_init \- Initialize a resolver channel +.SH SYNOPSIS +.nf +#include + +int ares_init(ares_channel *\fIchannelptr\fP) +.fi +.SH DESCRIPTION +The \fBares_init(3)\fP function initializes a communications channel for name +service lookups. If it returns successfully, \fBares_init(3)\fP will set the +variable pointed to by \fIchannelptr\fP to a handle used to identify the name +service channel. The caller should invoke \fIares_destroy(3)\fP on the handle +when the channel is no longer needed. + +The \fIares_init_options(3)\fP function is provide to offer more init +alternatives. +.SH RETURN VALUES +\fIares_init(3)\fP can return any of the following values: +.TP 14 +.B ARES_SUCCESS +Initialization succeeded. +.TP 14 +.B ARES_EFILE +A configuration file could not be read. +.TP 14 +.B ARES_ENOMEM +The process's available memory was exhausted. +.TP 14 +.B ARES_ENOTINITIALIZED +c-ares library initialization not yet performed. +.SH NOTES +When initializing from +.B /etc/resolv.conf, +.BR ares_init (3) +reads the +.I domain +and +.I search +directives to allow lookups of short names relative to the domains +specified. The +.I domain +and +.I search +directives override one another. If more that one instance of either +.I domain +or +.I search +directives is specified, the last occurrence wins. For more information, +please see the +.BR resolv.conf (5) +manual page. +.SH SEE ALSO +.BR ares_init_options(3), +.BR ares_destroy(3), +.BR ares_dup(3), +.BR ares_library_init(3), +.BR ares_set_servers(3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2010 by Daniel Stenberg. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_init_options.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_init_options.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_init_options.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_init_options.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,295 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2010 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_INIT 3 "5 March 2010" +.SH NAME +ares_init_options \- Initialize a resolver channel +.SH SYNOPSIS +.nf +#include + +struct ares_options { + int flags; + int timeout; /* in seconds or milliseconds, depending on options */ + int tries; + int ndots; + unsigned short udp_port; + unsigned short tcp_port; + int socket_send_buffer_size; + int socket_receive_buffer_size; + struct in_addr *servers; + int nservers; + char **domains; + int ndomains; + char *lookups; + ares_sock_state_cb sock_state_cb; + void *sock_state_cb_data; + struct apattern *sortlist; + int nsort; + int ednspsz; + char *resolvconf_path; +}; + +int ares_init_options(ares_channel *\fIchannelptr\fP, + struct ares_options *\fIoptions\fP, + int \fIoptmask\fP) +.fi +.SH DESCRIPTION +The \fBares_init_options(3)\fP function initializes a communications channel +for name service lookups. If it returns successfully, +\fBares_init_options(3)\fP will set the variable pointed to by +\fIchannelptr\fP to a handle used to identify the name service channel. The +caller should invoke \fIares_destroy(3)\fP on the handle when the channel is +no longer needed. + +The \fIoptmask\fP parameter generally specifies which fields in the structure pointed to +by \fIoptions\fP are set, as follows: +.TP 18 +.B ARES_OPT_FLAGS +.B int \fIflags\fP; +.br +Flags controlling the behavior of the resolver. See below for a +description of possible flag values. +.TP 18 +.B ARES_OPT_TIMEOUT +.B int \fItimeout\fP; +.br +The number of seconds each name server is given to respond to a query on the +first try. (After the first try, the timeout algorithm becomes more +complicated, but scales linearly with the value of \fItimeout\fP.) The +default is five seconds. This option is being deprecated by +\fIARES_OPT_TIMEOUTMS\fP starting in c-ares 1.5.2. +.TP 18 +.B ARES_OPT_TIMEOUTMS +.B int \fItimeout\fP; +.br +The number of milliseconds each name server is given to respond to a query on +the first try. (After the first try, the timeout algorithm becomes more +complicated, but scales linearly with the value of \fItimeout\fP.) The +default is five seconds. Note that this option is specified with the same +struct field as the former \fIARES_OPT_TIMEOUT\fP, it is but the option bits +that tell c-ares how to interpret the number. This option was added in c-ares +1.5.2. +.TP 18 +.B ARES_OPT_TRIES +.B int \fItries\fP; +.br +The number of tries the resolver will try contacting each name server +before giving up. The default is four tries. +.TP 18 +.B ARES_OPT_NDOTS +.B int \fIndots\fP; +.br +The number of dots which must be present in a domain name for it to be +queried for "as is" prior to querying for it with the default domain +extensions appended. The default value is 1 unless set otherwise by +resolv.conf or the RES_OPTIONS environment variable. +.TP 18 +.B ARES_OPT_UDP_PORT +.B unsigned short \fIudp_port\fP; +.br +The port to use for queries over UDP, in network byte order. +The default value is 53 (in network byte order), the standard name +service port. +.TP 18 +.B ARES_OPT_TCP_PORT +.B unsigned short \fItcp_port\fP; +.br +The port to use for queries over TCP, in network byte order. +The default value is 53 (in network byte order), the standard name +service port. +.TP 18 +.B ARES_OPT_SERVERS +.B struct in_addr *\fIservers\fP; +.br +.B int \fInservers\fP; +.br +The list of IPv4 servers to contact, instead of the servers specified in +resolv.conf or the local named. In order to allow specification of either +IPv4 or IPv6 name servers, the +.BR ares_set_servers(3) +function must be used instead. +.TP 18 +.B ARES_OPT_DOMAINS +.B char **\fIdomains\fP; +.br +.B int \fIndomains\fP; +.br +The domains to search, instead of the domains specified in resolv.conf +or the domain derived from the kernel hostname variable. +.TP 18 +.B ARES_OPT_LOOKUPS +.B char *\fIlookups\fP; +.br +The lookups to perform for host queries. +.I lookups +should be set to a string of the characters "b" or "f", where "b" +indicates a DNS lookup and "f" indicates a lookup in the hosts file. +.TP 18 +.B ARES_OPT_SOCK_STATE_CB +.B void (*\fIsock_state_cb\fP)(void *data, ares_socket_t socket_fd, int readable, int writable); +.br +.B void *\fIsock_state_cb_data\fP; +.br +A callback function to be invoked when a socket changes state. +.I socket_fd +will be passed the socket whose state has changed; +.I readable +will be set to true if the socket should listen for read events, and +.I writable +will be set to true if the socket should listen for write events. +The value of +.I sock_state_cb_data +will be passed as the +.I data +argument. +.TP 18 +.B ARES_OPT_SORTLIST +.B struct apattern *\fIsortlist\fP; +.br +.B int \fInsort\fP; +.br +A list of IP address ranges that specifies the order of preference that +results from \fIares_gethostbyname\fP should be returned in. Note that +this can only be used with a sortlist retrieved via +\fBares_save_options(3)\fP (because +.B struct apattern +is opaque); to set a fresh sort list, use \fBares_set_sortlist(3)\fP. +.TP 18 +.B ARES_OPT_SOCK_SNDBUF +.B int \fIsocket_send_buffer_size\fP; +.br +The send buffer size to set for the socket. +.TP 18 +.B ARES_OPT_SOCK_RCVBUF +.B int \fIsocket_receive_buffer_size\fP; +.br +The receive buffer size to set for the socket. +.TP 18 +.B ARES_OPT_EDNSPSZ +.B int \fIednspsz\fP; +.br +The message size to be advertized in EDNS; only takes effect if the +.B ARES_FLAG_EDNS +flag is set. +.TP 18 +.B ARES_OPT_RESOLVCONF +.B char *\fIresolvconf_path\fP; +.br +The path to use for reading the resolv.conf file. The +.I resolvconf_path +should be set to a path string, and will be honoured on *nix like systems. The +default is +.B /etc/resolv.conf +.br +.PP +The \fIoptmask\fP parameter also includes options without a corresponding +field in the +.B ares_options +structure, as follows: +.TP 23 +.B ARES_OPT_ROTATE +Perform round-robin selection of the nameservers configured for the channel +for each resolution. +.TP 23 +.B ARES_OPT_NOROTATE +Do not perform round-robin nameserver selection; always use the list of +nameservers in the same order. +.PP +The +.I flags +field should be the bitwise or of some subset of the following values: +.TP 23 +.B ARES_FLAG_USEVC +Always use TCP queries (the "virtual circuit") instead of UDP +queries. Normally, TCP is only used if a UDP query yields a truncated +result. +.TP 23 +.B ARES_FLAG_PRIMARY +Only query the first server in the list of servers to query. +.TP 23 +.B ARES_FLAG_IGNTC +If a truncated response to a UDP query is received, do not fall back +to TCP; simply continue on with the truncated response. +.TP 23 +.B ARES_FLAG_NORECURSE +Do not set the "recursion desired" bit on outgoing queries, so that the name +server being contacted will not try to fetch the answer from other servers if +it doesn't know the answer locally. Be aware that ares will not do the +recursion for you. Recursion must be handled by the application calling ares +if \fIARES_FLAG_NORECURSE\fP is set. +.TP 23 +.B ARES_FLAG_STAYOPEN +Do not close communications sockets when the number of active queries +drops to zero. +.TP 23 +.B ARES_FLAG_NOSEARCH +Do not use the default search domains; only query hostnames as-is or +as aliases. +.TP 23 +.B ARES_FLAG_NOALIASES +Do not honor the HOSTALIASES environment variable, which normally +specifies a file of hostname translations. +.TP 23 +.B ARES_FLAG_NOCHECKRESP +Do not discard responses with the SERVFAIL, NOTIMP, or REFUSED +response code or responses whose questions don't match the questions +in the request. Primarily useful for writing clients which might be +used to test or debug name servers. +.TP 23 +.B ARES_FLAG_EDNS +Include an EDNS pseudo-resource record (RFC 2671) in generated requests. +.SH RETURN VALUES +\fBares_init_options(3)\fP can return any of the following values: +.TP 14 +.B ARES_SUCCESS +Initialization succeeded. +.TP 14 +.B ARES_EFILE +A configuration file could not be read. +.TP 14 +.B ARES_ENOMEM +The process's available memory was exhausted. +.TP 14 +.B ARES_ENOTINITIALIZED +c-ares library initialization not yet performed. +.SH NOTES +When initializing from +.B /etc/resolv.conf, +(or, alternatively when specified by the +.I resolvconf_path +path location) +\fBares_init_options(3)\fP reads the \fIdomain\fP and \fIsearch\fP directives +to allow lookups of short names relative to the domains specified. The +\fIdomain\fP and \fIsearch\fP directives override one another. If more that +one instance of either \fIdomain\fP or \fIsearch\fP directives is specified, +the last occurrence wins. For more information, please see the +.BR resolv.conf (5) +manual page. +.SH SEE ALSO +.BR ares_init(3), +.BR ares_destroy(3), +.BR ares_dup(3), +.BR ares_library_init(3), +.BR ares_save_options(3), +.BR ares_set_servers(3), +.BR ares_set_sortlist(3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2010 by Daniel Stenberg. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_library_cleanup.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_library_cleanup.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_library_cleanup.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_library_cleanup.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,84 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2009 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_LIBRARY_CLEANUP 3 "19 May 2009" +.SH NAME +ares_library_cleanup \- c-ares library deinitialization +.SH SYNOPSIS +.nf +#include + +void ares_library_cleanup(void) +.fi +.SH DESCRIPTION +.PP +The +.B ares_library_cleanup +function uninitializes the c-ares library, freeing all resources +previously acquired by \fIares_library_init(3)\fP when the library +was initialized, provided there was only one single previous call to +\fIares_library_init(3)\fP. If there was more than one previous call to +\fIares_library_init(3)\fP, this function uninitializes the c-ares +library only if it is the call matching the call to +\fIares_library_init(3)\fP which initialized the library +(usually the very first call to \fIares_library_init(3)\fP). +Other calls to \fIares_library_cleanup(3)\fP have no effect other than +decrementing an internal counter. +.PP +This function must be called when the program using c-ares will +no longer need any c-ares function. Once the program has called +\fIares_library_cleanup(3)\fP sufficiently often such that the +library is uninitialised, it shall not make any further call to any +c-ares function. +.PP +This function does not cancel any pending c-ares lookups or requests +previously done. Program must use \fIares_cancel(3)\fP for this purpose. +.PP +.B This function is not thread safe. +You have to call it once the program is about to terminate, but this call must +be done once the program has terminated every single thread that it could have +initiated. This is required to avoid potential race conditions in library +deinitialization, and also due to the fact that \fIares_library_cleanup(3)\fP +might call functions from other libraries that are thread unsafe, and could +conflict with any other thread that is already using these other libraries. +.PP +Win32/64 application DLLs shall not call \fIares_library_cleanup(3)\fP from +the DllMain function. Doing so will produce deadlocks and other problems. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0 along with the +definition of preprocessor symbol \fICARES_HAVE_ARES_LIBRARY_CLEANUP\fP as an +indication of the availability of this function. Reference counting in +\fIares_library_init()\fP and \fIares_library_cleanup()\fP, which requires +calls to the former function to match calls to the latter, is present since +c-ares version 1.10.0. +Earlier versions would deinitialize the library on the first call +to \fIares_library_cleanup()\fP. +.PP +Since the introduction of this function, it is absolutely mandatory to call it +for any Win32/64 program using c-ares. +.PP +Non-Win32/64 systems can still use c-ares version 1.7.0 without calling +\fIares_library_cleanup(3)\fP due to the fact that \fIcurrently\fP it is nearly +a do-nothing function on non-Win32/64 platforms. +.SH SEE ALSO +.BR ares_library_init(3), +.BR ares_cancel(3) +.SH AUTHOR +Yang Tse +.PP +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2009 by Daniel Stenberg. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_library_init.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_library_init.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_library_init.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_library_init.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,114 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" Copyright (C) 2004-2009 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_LIBRARY_INIT 3 "19 May 2009" +.SH NAME +ares_library_init \- c-ares library initialization +.SH SYNOPSIS +.nf +#include + +int ares_library_init(int \fIflags\fP) + +int ares_library_init_mem(int \fIflags\fP, + void *(*\fIamalloc\fP)(size_t), + void (*\fIafree\fP)(void *ptr), + void (*\fIarealloc\fP)(void *ptr, size_t size)) +.fi +.SH DESCRIPTION +.PP +The +.B ares_library_init +function performs initializations internally required by the c-ares +library that must take place before any other function provided by +c-ares can be used in a program. +.PP +This function must be called at least once within the life of a program, +before the program actually executes any other c-ares library function. +Initializations done by this function remain effective until a number of +calls to \fIares_library_cleanup(3)\fP equal to the number of calls to +this function are performed. +.PP +Successive calls to this function do nothing further, only the first +call done when c-ares is in an uninitialized state is actually +effective. +.PP +The +.I flags +parameter is a bit pattern that tells c-ares exactly which features +should be initialized, as described below. Set the desired bits by +ORing the values together. In normal operation you should specify +\fIARES_LIB_INIT_ALL\fP. Don't use any other value unless you are +familiar with it and trying to control some internal c-ares feature. +.PP +The +.B ares_library_init_mem +function allows the caller to provide memory management functions that the +c-ares library will be use instead of \fImalloc(3)\fP, \fIfree(3)\fP and +\fIrealloc(3)\fP. +.PP +.B This function is not thread safe. +You have to call it once the program has started, but this call must be done +before the program starts any other thread. This is required to avoid +potential race conditions in library initialization, and also due to the fact +that \fIares_library_init(3)\fP might call functions from other libraries that +are thread unsafe, and could conflict with any other thread that is already +using these other libraries. +.PP +On Windows platforms, the library user should ensure that \fIWSAStartup()\fP +is called before the c-ares library is initialized and used. +.PP +Win32/64 application DLLs shall not call \fIares_library_init(3)\fP from the +DllMain function. Doing so will produce deadlocks and other problems. +.SH FLAGS +.TP 5 +.B ARES_LIB_INIT_ALL +Initialize everything possible. This sets all known bits. +.TP +.B ARES_LIB_INIT_WIN32 +Initialize Win32/64 specific libraries. +.TP +.B ARES_LIB_INIT_NONE +Initialize nothing extra. This sets no bit. +.SH RETURN VALUE +Upon successful completion, ares_library_init() will return 0. Otherwise, a +non-zero error number will be returned to indicate the error. Except for +\fIares_strerror(3)\fP, you shall not call any other c-ares function upon +\fIares_library_init(3)\fP failure. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0 along with the +definition of preprocessor symbol \fICARES_HAVE_ARES_LIBRARY_INIT\fP as an +indication of the availability of this function. Its recursive behavior, +which requires a matching number of calls to \fIares_library_cleanup()\fP +in order to deinitialize the library, is present since c-ares version +1.10.0. Earlier versions would deinitialize the library on the first call +to \fIares_library_cleanup()\fP. +.PP +Since the introduction of this function it is absolutely mandatory to +call it for any Win32/64 program using c-ares. +.PP +Non-Win32/64 systems can still use c-ares version 1.7.0 without calling +\fIares_library_init(3)\fP due to the fact that \fIcurrently\fP it is nearly +a do-nothing function on non-Win32/64 platforms at this point. +.SH SEE ALSO +.BR ares_library_cleanup(3), +.BR ares_strerror(3) +.SH AUTHOR +Yang Tse +.PP +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2009 by Daniel Stenberg. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_library_init_android.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_library_init_android.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_library_init_android.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_library_init_android.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,142 @@ +.\" +.\" Copyright (C) 2017 by John Schember +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_LIBRARY_INIT_ANDROID 3 "13 Sept 2017" +.SH NAME +ares_library_init_android \- c-ares library Android initialization +.SH SYNOPSIS +.nf +#include + +int ares_library_init_android(jobject \fIconnectivity_manager\fP) + +int ares_library_android_initialized(); + +void ares_library_init_jvm(JavaVM *\fIjvm\fP) + +.fi +.SH DESCRIPTION +The \fIares_library_init_android(3)\fP function performs initializations +internally required by the c-ares library when used on Android. This can take +place anytime after \fIares_library_init(3)\fP. It must take place after +\fIares_library_init_jvm\fP. ares_library_init_android must be called before +DNS resolution will work on Android 8 (Oreo) or newer when targetSdkVersion is +set to 26+. + +As of Android 8 (API level 26) getting DNS server information has +becomei more restrictive and can only be accessed using the +Connectivity Manager. It is necessary to pass the connectivity +manager to c-ares via JNI. Also, the ACCESS_NETWORK_STATE permission +must be present in the Android application. + +Android older than 8 do not need to to be initialized as they +are less restrictive. However, this is a run time not compile time +limitation. Proper Android initialization should take place regardless +of the targeted Android version. + +Deinitialization will take place though \fIares_library_cleanup(3)\fP. + +The \fBares_library_init_jvm\fP function allows the caller to register the JVM +with c-ares. It's meant to be called during JNI_OnLoad because you're +guaranteed to have the JVM in that function. The JVM is required in order to +use the Connectivty Manager registered using +\fIares_library_init_android(3)\fP. This must be call before +\fIares_library_init_android(3)\fP. + +The \fBares_library_android_initialized\fP function can be used to check +whether c-ares has been initialized for use with Android. +.SH RETURN VALUES +ARES_SUCCESS will be returned on success otherwise an error code will be +returned. +.SH THREAD SAFETY +.B These init functions are not thread safe. +You have to call it once the program has started, but this call must be done +before the program starts any other thread. This is required to avoid +potential race conditions in library initialization, and also due to the fact +these might call functions from other libraries that +are thread unsafe, and could conflict with any other thread that is already +using these other libraries. +.SH JNI +Accessing the Connectivity Manager though Java: + +Register the \fIares_library_android_init\fP. +.nf + static JNINativeMethod funcs[] = { + { "initialize_native", "(Landroid/net/ConnectivityManager;)I", + (void *)&ares_library_init_android} + }; + + JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) + { + JNIEnv *env = NULL; + jclass cls = NULL; + jint res; + + if ((*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_6) != JNI_OK) + return -1; + + cls = (*env)->FindClass(env, JNIT_CLASS); + if (cls == NULL) + return -1; + + res = (*env)->RegisterNatives(env, cls, funcs, sizeof(funcs)/sizeof(funcs[0])); + if (res != 0) + return -1; + + ares_library_init_jvm(vm); + return JNI_VERSION_1_6; + } +.fi +Calling the registered function from Java: +.nf + public class MyObject { + static { + System.loadLibrary("cares"); + } + + private static native boolean initialize_native(ConnectivityManager + connectivity_manager); + + public static boolean initialize(Context context) { + initialize_native((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)); + } + } +.fi +Initializing the Connectivity Manager in JNI directly using an Android +Context. It is assumed the JVM has aleady been registered through +\fIJNI_OnLoad\fP. +.nf + void initialize(jobject android_context) + { + jclass obj_cls = jni_get_class(env, "android/content/Context"); + jmethodID obj_mid = jni_get_method_id(env, obj_cls, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); + jfieldID fid = (*env)->GetStaticFieldID(env, obj_cls, "CONNECTIVITY_SERVICE", "Ljava/lang/String;"); + jstring str = (*env)->GetStaticObjectField(env, obj_cls, fid); + connectivity_manager = (*env)->CallObjectMethod(env, android_context, obj_mid, str); + if (connectivity_manager == NULL) + return; + ares_library_init_android(connectivity_manager); + } +.fi +.SH AVAILABILITY +This function was first introduced in c-ares version 1.15.0. +.SH SEE ALSO +.BR ares_library_init(3), +.BR ares_library_cleanup(3), +.SH AUTHOR +John Schember +.PP +Copyright (C) 2017 by John Schember + diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_library_initialized.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_library_initialized.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_library_initialized.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_library_initialized.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,34 @@ +.\" +.\" Copyright (C) 2016 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_LIBRARY_INITIALIZED 3 "29 Sep 2016" +.SH NAME +ares_library_initialized \- get the initialization state +.SH SYNOPSIS +.nf +#include + +int ares_library_initialized(void) +.fi +.SH DESCRIPTION +Returns information if c-ares needs to get initialized. +.SH RETURN VALUE +\fIARES_ENOTINITIALIZED\fP if not initialized and \fIARES_SUCCESS\fP if no +initialization is needed. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.11.0 +.SH SEE ALSO +.BR ares_library_init(3), +.BR ares_library_cleanup(3) diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_mkquery.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_mkquery.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_mkquery.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_mkquery.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,89 @@ +.\" +.\" Copyright 1998, 2000 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_MKQUERY 3 "20 Nov 2009" +.SH NAME +ares_mkquery \- Compose a single-question DNS query buffer +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP, +.B unsigned short \fIid\fP, int \fIrd\fP, unsigned char **\fIbuf\fP, +.B int *\fIbuflen\fP) +.fi +.SH DESCRIPTION +Deprecated function. See \fIares_create_query(3)\fP instead! + +The +.B ares_mkquery +function composes a DNS query with a single question. +The parameter +.I name +gives the query name as a NUL-terminated C string of period-separated +labels optionally ending with a period; periods and backslashes within +a label must be escaped with a backlash. The parameters +.I dnsclass +and +.I type +give the class and type of the query using the values defined in +.BR . +The parameter +.I id +gives a 16-bit identifier for the query. The parameter +.I rd +should be nonzero if recursion is desired, zero if not. The query +will be placed in an allocated buffer, a pointer to which will be +stored in the variable pointed to by +.IR buf , +and the length of which will be stored in the variable pointed to by +.IR buflen . +It is the caller's responsibility to free this buffer using +\fIares_free_string(3)\fP when it is no longer needed. + +Usage of \fIares_mkquery(3)\fP is deprecated, whereas the function is +equivalent to \fIares_create_query(3)\fP with \fBmax_udp_size\fP set to +0. + +.SH RETURN VALUES +.B ares_mkquery +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +Construction of the DNS query succeeded. +.TP 15 +.B ARES_ENOTFOUND +The query name +.I name +refers to a +.I .onion +domain name. See RFC 7686. +.TP 15 +.B ARES_EBADNAME +The query name +.I name +could not be encoded as a domain name, either because it contained a +zero-length label or because it contained a label of more than 63 +characters. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_expand_name (3), +.BR ares_free_string (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998, 2000 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_aaaa_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_aaaa_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_aaaa_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_aaaa_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,80 @@ +.\" +.\" Copyright 2005 by Dominick Meglio. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_AAAA_REPLY 3 "20 Nov 2009" +.SH NAME +ares_parse_aaaa_reply \- Parse a reply to a DNS query of type AAAA +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_aaaa_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP, +.B struct hostent **\fIhost\fP, +.B struct ares_addr6ttl *\fIaddrttls\fP, int *\fInaddrttls\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_aaaa_reply +function parses the response to a query of type AAAA into a +.BR "struct hostent" +and/or an array of +.BR "struct ares_addr6ttl" . +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR host , +if host is nonnull. +It is the caller's responsibility to free the resulting host structure +using +.BR ares_free_hostent (3) +when it is no longer needed. +.PP +If +.IR addrttls +and +.IR naddrttls +are both nonnull, +then up to *naddrttls +.BR "struct ares_addr6ttl" +records are stored in the array pointed to by addrttls, +and then *naddrttls is set to the number of records so stored. +Note that the memory for these records is supplied by the caller. +.SH RETURN VALUES +.B ares_parse_aaaa_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_gethostbyname (3), +.BR ares_free_hostent (3) +.SH AUTHOR +Dominick Meglio +.br +Copyright 2005 by Dominick Meglio. +.BR +Andrew Selivanov diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_a_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_a_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_a_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_a_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,80 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_A_REPLY 3 "25 July 1998" +.SH NAME +ares_parse_a_reply \- Parse a reply to a DNS query of type A +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP, +.B struct hostent **\fIhost\fP, +.B struct ares_addrttl *\fIaddrttls\fP, int *\fInaddrttls\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_a_reply +function parses the response to a query of type A into a +.BR "struct hostent" +and/or an array of +.BR "struct ares_addrttls" . +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR host , +if host is nonnull. +It is the caller's responsibility to free the resulting host structure +using +.BR ares_free_hostent (3) +when it is no longer needed. +.PP +If +.IR addrttls +and +.IR naddrttls +are both nonnull, +then up to *naddrttls +.BR "struct ares_addrttl" +records are stored in the array pointed to by addrttls, +and then *naddrttls is set to the number of records so stored. +Note that the memory for these records is supplied by the caller. +.SH RETURN VALUES +.B ares_parse_a_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_gethostbyname (3), +.BR ares_free_hostent (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Andrew Selivanov +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_caa_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_caa_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_caa_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_caa_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,171 @@ +.\" +.\" Copyright 2020 Danny Sonnenschein +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_CAA_REPLY 3 "16 September 2020" +.SH NAME +ares_parse_caa_reply \- Parse a reply to a DNS query of type CAA +.SH SYNOPSIS +.nf +#include + +int ares_parse_caa_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, + struct ares_caa_reply **\fIcaa_out\fP); +.fi +.SH DESCRIPTION +The +.BR "ares_parse_caa_reply" +function parses the response to a query of type CAA into a +linked list (one element per sub-string) of +.IR "struct ares_caa_reply" +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR caa_out . +It is the caller's responsibility to free the resulting +.IR caa_out +structure when it is no longer needed using the function +.B ares_free_data(3) +.PP +The structure +.I ares_caa_reply(3) +contains the following fields: +.sp +.in +4n +.nf +struct ares_caa_reply { + struct ares_caa_reply *next; + int critical; + unsigned char *property; + size_t plength; /* plength excludes null */ + unsigned char *value; + size_t length; /* length excludes null */ +}; +.fi +.in +.PP +.SH RETURN VALUES +.BR "ares_parse_caa_reply" +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH EXAMPLE +.nf +#include +#include +#include +#include + +#include +#include +#include + +#include "ares.h" + +static void dns_callback(void *arg, + int status, + int timeouts, + unsigned char *abuf, + int alen) + { + struct ares_caa_reply *caa_out; + int err; + + err = ares_parse_caa_reply (abuf, alen, &caa_out); + if (err == ARES_SUCCESS) + { + struct ares_caa_reply *caa_curr; + for (caa_curr=caa_out; caa_curr; caa_curr=caa_curr->next) + printf ("%s. CAA %i %s \\"%s\\"\\n", arg, + caa_curr->critical, + caa_curr->property, + caa_curr->value); + } + else + { + printf ("err=%i\\n", err); + } + ares_free_data (caa_out); + } + +static void main_loop(ares_channel *channel) + { + int nfds, count; + fd_set readers, writers; + struct timeval tv, *tvp; + while (1) + { + FD_ZERO (&readers); + FD_ZERO (&writers); + nfds = ares_fds (*channel, &readers, &writers); + if (nfds == 0) + break; + tvp = ares_timeout (*channel, NULL, &tv); + count = select (nfds, &readers, &writers, NULL, tvp); + ares_process (*channel, &readers, &writers); + } + } + +int main(int argc, char **argv) + { + const char *sversion; + int iversion; + int err; + + sversion = ares_version (&iversion); + printf ("c-ares version %s\\n", sversion); + + char *domain = "wikipedia.org"; + if (argc > 1) + domain = argv[1]; + + ares_channel channel; + if ((err = ares_init (&channel)) != ARES_SUCCESS) + { + printf ("ares_init() failed (%i)\\n", err); + exit (EXIT_FAILURE); + } + + ares_query (channel, domain, + 1, /* ns_c_in */ + 257, /* T_CAA */ + dns_callback, domain); + + main_loop (&channel); + + ares_destroy (channel); + + exit (EXIT_SUCCESS); + } +.fi +.SH AVAILABILITY +This function was first introduced in c-ares version 1.17.0. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Danny Sonnenschein , on behalf of platynum, https://platynum.ch diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_mx_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_mx_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_mx_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_mx_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,79 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_MX_REPLY 3 "4 August 2009" +.SH NAME +ares_parse_mx_reply \- Parse a reply to a DNS query of type MX +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_mx_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_mx_reply** \fImx_out\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_mx_reply +function parses the response to a query of type MX into a +linked list of +.I struct ares_mx_reply +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR mx_out . +It is the caller's responsibility to free the resulting +.IR mx_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_mx_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_mx_reply { + struct ares_mx_reply *next; + char *host; + unsigned short priority; +}; +.fi +.in +.PP +.SH RETURN VALUES +.B ares_parse_mx_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.2. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Jeremy Lal diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_naptr_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_naptr_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_naptr_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_naptr_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,83 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_NAPTR_REPLY 3 "23 February 2012" +.SH NAME +ares_parse_naptr_reply \- Parse a reply to a DNS query of type NAPTR +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_naptr_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_naptr_reply** \fInaptr_out\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_naptr_reply +function parses the response to a query of type NAPTR into a +linked list of +.I struct ares_naptr_reply +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR naptr_out . +It is the caller's responsibility to free the resulting +.IR naptr_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_naptr_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_naptr_reply { + struct ares_naptr_reply *next; + unsigned char *flags; + unsigned char *service; + unsigned char *regexp; + char *replacement; + unsigned short order; + unsigned short preference; +}; +.fi +.in +.PP +.SH RETURN VALUES +.B ares_parse_naptr_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.6. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Jakub Hrozek , on behalf of Red Hat, Inc http://www.redhat.com diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_ns_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_ns_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_ns_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_ns_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,66 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_NS_REPLY 3 "10 February 2007" +.SH NAME +ares_parse_ns_reply \- Parse a reply to a DNS query of type NS into a hostent +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_ns_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP, +.B struct hostent **\fIhost\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_ns_reply +function parses the response to a query of type NS into a +.BR "struct hostent" . +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR host . +The nameservers are stored into the +.BR aliases +field of the +.IR host +structure. +It is the caller's responsibility to free the resulting host structure +using +.BR ares_free_hostent (3) +when it is no longer needed. +.SH RETURN VALUES +.B ares_parse_ns_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_query (3), +.BR ares_free_hostent (3) +.SH AUTHOR +Written by Vlad Dinulescu , on behalf of AVIRA Gmbh http://www.avira.com diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_ptr_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_ptr_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_ptr_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_ptr_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,74 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_PTR_REPLY 3 "25 July 1998" +.SH NAME +ares_parse_ptr_reply \- Parse a reply to a DNS query of type PTR into a hostent +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_ptr_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP, +.B const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP, +.B struct hostent **\fIhost\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_ptr_reply +function parses the response to a query of type PTR into a +.BR "struct hostent" . +The parameters +.I abuf +and +.I alen +give the contents of the response. The parameters +.IR addr , +.IR addrlen , +and +.I family +specify which address was queried for; they are not used to verify the +response, merely used to fill in the address of the +.BR "struct hostent" . +The resulting +.B struct hostent +is stored in allocated memory and a pointer to it stored into the +variable pointed to by +.IR host . +It is the caller's responsibility to free the resulting host structure +using +.BR ares_free_hostent (3) +when it is no longer needed. +.SH RETURN VALUES +.B ares_parse_ptr_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH SEE ALSO +.BR ares_gethostbyaddr (3), +.BR ares_free_hostent (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_soa_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_soa_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_soa_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_soa_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,80 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_SOA_REPLY 3 "29 May 2012" +.SH NAME +ares_parse_soa_reply \- Parse a reply to a DNS query of type SOA +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_soa_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_soa_reply** \fIsoa_out\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_soa_reply +function parses the response to a query of type SOA into a +.IR struct\ ares_soa_reply . +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR soa_out . +It is the caller's responsibility to free the resulting +.IR soa_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_soa_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_soa_reply { + char *nsname; + char *hostmaster; + unsigned int serial; + unsigned int refresh; + unsigned int retry; + unsigned int expire; + unsigned int minttl; +}; +.fi +.in +.PP +.SH RETURN VALUES +.B ares_parse_soa_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.9.0. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_srv_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_srv_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_srv_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_srv_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,81 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_SRV_REPLY 3 "4 August 2009" +.SH NAME +ares_parse_srv_reply \- Parse a reply to a DNS query of type SRV +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_srv_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_srv_reply** \fIsrv_out\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_srv_reply +function parses the response to a query of type SRV into a +linked list of +.I struct ares_srv_reply +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR srv_out . +It is the caller's responsibility to free the resulting +.IR srv_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_srv_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_srv_reply { + struct ares_srv_reply *next; + unsigned short weight; + unsigned short priority; + unsigned short port; + char *host; +}; +.fi +.in +.PP +.SH RETURN VALUES +.B ares_parse_srv_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Jakub Hrozek , on behalf of Red Hat, Inc http://www.redhat.com diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_txt_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_txt_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_txt_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_txt_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,120 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_TXT_REPLY 3 "27 October 2009" +.SH NAME +ares_parse_txt_reply \- Parse a reply to a DNS query of type TXT +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_txt_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_txt_reply **\fItxt_out\fP); +.PP +.B int ares_parse_txt_reply_ext(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_txt_ext **\fItxt_out\fP); +.fi +.SH DESCRIPTION +The +.BR "ares_parse_txt_reply" " (" "ares_parse_txt_reply_ext" ")" +function parses the response to a query of type TXT into a +linked list (one element per sub-string) of +.IR "struct ares_txt_reply" " (" "struct ares_txt_ext" ")" +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR txt_out . +It is the caller's responsibility to free the resulting +.IR txt_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_txt_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_txt_reply { + struct ares_txt_reply *next; + unsigned int length; + unsigned char *txt; +}; +.fi +.in +.PP +The structure +.I ares_txt_ext +contains the following fields: +.sp +.in +4n +.nf +struct ares_txt_ext { + struct ares_txt_ext *next; + unsigned int length; + unsigned char *txt; + unsigned char record_start; +}; +.fi +.in +.PP +The +.I record_start +field in +.I struct ares_txt_ext +is 1 if this structure is a start of a TXT record, and 0 if the structure is a +continuation of a previous record. The linked list of the +.I struct ares_txt_ext +will have at least one item with +.I record_start +equal to 1, and may have some items with +.I record_start +equal to 0 between them. +.PP +These sequences of +.I struct ares_txt_ext +(starting from the item with +.I record_start +equal to 1, and ending right before the record start item) may be treated as +either components of a single TXT record or as a multi-parted TXT record, +depending on particular use case. +.PP +.SH RETURN VALUES +.BR "ares_parse_txt_reply" " (" "ares_parse_txt_reply_ext" ")" +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY +This function was first introduced in c-ares version 1.7.0. +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Jakub Hrozek , on behalf of Red Hat, Inc http://www.redhat.com +.PP +Amended by Fedor Indutny , on behalf of PayPal, Inc https://www.paypal.com diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_uri_reply.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_uri_reply.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_parse_uri_reply.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_parse_uri_reply.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,81 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PARSE_URI_REPLY 3 "14 August 2020" +.SH NAME +ares_parse_uri_reply \- Parse a reply to a DNS query of type URI +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_parse_uri_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP, +.B struct ares_uri_reply** \fIuri_out\fP); +.fi +.SH DESCRIPTION +The +.B ares_parse_uri_reply +function parses the response to a query of type URI into a +linked list of +.I struct ares_uri_reply +The parameters +.I abuf +and +.I alen +give the contents of the response. The result is stored in allocated +memory and a pointer to it stored into the variable pointed to by +.IR uri_out . +It is the caller's responsibility to free the resulting +.IR uri_out +structure when it is no longer needed using the function +.B ares_free_data +.PP +The structure +.I ares_uri_reply +contains the following fields: +.sp +.in +4n +.nf +struct ares_uri_reply { + struct ares_uri_reply *next; + unsigned short weight; + unsigned short priority; + char *uri; + int ttl; +}; +.fi +.in +.PP +.SH RETURN VALUES +.B ares_parse_uri_reply +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The response was successfully parsed. +.TP 15 +.B ARES_EBADRESP +The response was malformatted. +.TP 15 +.B ARES_ENODATA +The response did not contain an answer to the query. +.TP 15 +.B ARES_ENOMEM +Memory was exhausted. +.SH AVAILABILITY + +.SH SEE ALSO +.BR ares_query (3) +.BR ares_free_data (3) +.SH AUTHOR +Written by Jan Petrasek diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_process.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_process.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_process.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_process.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,79 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_PROCESS 3 "25 July 1998" +.SH NAME +ares_process \- Process events for name resolution +.SH SYNOPSIS +.nf +#include + +void ares_process(ares_channel \fIchannel\fP, + fd_set *\fIread_fds\fP, + fd_set *\fIwrite_fds\fP) + +void ares_process_fd(ares_channel \fIchannel\fP, + ares_socket_t \fIread_fd\fP, + ares_socket_t \fIwrite_fd\fP) +.fi +.SH DESCRIPTION +The \fBares_process(3)\fP function handles input/output events and timeouts +associated with queries pending on the name service channel identified by +.IR channel . +The file descriptor sets pointed to by \fIread_fds\fP and \fIwrite_fds\fP +should have file descriptors set in them according to whether the file +descriptors specified by \fIares_fds(3)\fP are ready for reading and writing. +(The easiest way to determine this information is to invoke \fBselect(3)\fP +with a timeout no greater than the timeout given by \fIares_timeout(3)\fP). + +The \fBares_process(3)\fP function will invoke callbacks for pending queries +if they complete successfully or fail. + +\fBares_process_fd(3)\fP works the same way but acts and operates only on the +specific file descriptors (sockets) you pass in to the function. Use +ARES_SOCKET_BAD for "no action". This function is provided to allow users of +c-ares to void \fIselect(3)\fP in their applications and within c-ares. + +To only process possible timeout conditions without a socket event occurring, +one may pass NULL as the values for both \fIread_fds\fP and \fIwrite_fds\fP for +\fBares_process(3)\fP, or ARES_SOCKET_BAD for both \fIread_fd\fP and +\fIwrite_fd\fP for \fBares_process_fd(3)\fP. +.SH EXAMPLE +The following code fragment waits for all pending queries on a channel +to complete: + +.nf +int nfds, count; +fd_set readers, writers; +struct timeval tv, *tvp; + +while (1) { + FD_ZERO(&readers); + FD_ZERO(&writers); + nfds = ares_fds(channel, &readers, &writers); + if (nfds == 0) + break; + tvp = ares_timeout(channel, NULL, &tv); + count = select(nfds, &readers, &writers, NULL, tvp); + ares_process(channel, &readers, &writers); +} +.fi +.SH SEE ALSO +.BR ares_fds (3), +.BR ares_timeout (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_query.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_query.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_query.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_query.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,149 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_QUERY 3 "24 July 1998" +.SH NAME +ares_query \- Initiate a single-question DNS query +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP) +.PP +.B void ares_query(ares_channel \fIchannel\fP, const char *\fIname\fP, +.B int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP, +.B void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_query +function initiates a single-question DNS query on the name service +channel identified by +.IR channel . +The parameter +.I name +gives the query name as a NUL-terminated C string of period-separated +labels optionally ending with a period; periods and backslashes within +a label must be escaped with a backslash. The parameters +.I dnsclass +and +.I type +give the class and type of the query using the values defined in +.BR . +When the query is complete or has failed, the ares library will invoke +.IR callback . +Completion or failure of the query may happen immediately, or may +happen during a later call to +.BR ares_process (3) +or +.BR ares_destroy (3). +.PP +The callback argument +.I arg +is copied from the +.B ares_query +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The query completed successfully. +.TP 19 +.B ARES_ENODATA +The query completed but contains no answers. +.TP 19 +.B ARES_EFORMERR +The query completed but the server claims that the query was +malformatted. +.TP 19 +.B ARES_ESERVFAIL +The query completed but the server claims to have experienced a +failure. (This code can only occur if the +.B ARES_FLAG_NOCHECKRESP +flag was specified at channel initialization time; otherwise, such +responses are ignored at the +.BR ares_send (3) +level.) +.TP 19 +.B ARES_ENOTFOUND +The query completed but the queried-for domain name was not found. +.TP 19 +.B ARES_ENOTIMP +The query completed but the server does not implement the operation +requested by the query. (This code can only occur if the +.B ARES_FLAG_NOCHECKRESP +flag was specified at channel initialization time; otherwise, such +responses are ignored at the +.BR ares_send (3) +level.) +.TP 19 +.B ARES_EREFUSED +The query completed but the server refused the query. (This code can +only occur if the +.B ARES_FLAG_NOCHECKRESP +flag was specified at channel initialization time; otherwise, such +responses are ignored at the +.BR ares_send (3) +level.) +.TP 19 +.B ARES_EBADNAME +The query name +.I name +could not be encoded as a domain name, either because it contained a +zero-length label or because it contained a label of more than 63 +characters. +.TP 19 +.B ARES_ETIMEOUT +No name servers responded within the timeout period. +.TP 19 +.B ARES_ECONNREFUSED +No name servers could be contacted. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_ECANCELLED +The query was cancelled. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +If the query completed (even if there was something wrong with it, as +indicated by some of the above error codes), the callback argument +.I abuf +points to a result buffer of length +.IR alen . +If the query did not complete, +.I abuf +will be NULL and +.I alen +will be 0. +.SH SEE ALSO +.BR ares_process (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_save_options.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_save_options.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_save_options.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_save_options.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,74 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SAVE_OPTIONS 3 "5 March 2010" +.SH NAME +ares_save_options \- Save configuration values obtained from initialized ares_channel +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_save_options(ares_channel \fIchannel\fP, struct ares_options *\fIoptions\fP, int *\fIoptmask\fP) +.fi +.SH DESCRIPTION +The \fBares_save_options(3)\fP function saves the channel data identified by +.IR channel , +into the options struct identified by +.IR options , +and saves the mask of options which are set to the integer +pointer (passed by reference) identified by +.IR optmask . + +The resultant options and optmask are then able to be +passed directly to ares_init_options. When the options +are no longer needed, ares_destroy_options should be called +to free any associated memory. +.SH RETURN VALUES +.B ares_save_options(3) +can return any of the following values: +.TP 15 +.B ARES_SUCCESS +The channel data was successfully stored +.TP 15 +.B ARES_ENOMEM +The memory was exhausted +.TP 15 +.B ARES_ENODATA +The channel data identified by +.IR channel +were invalid. +.SH NOTE +Since c-ares 1.6.0 the ares_options struct has been "locked" meaning that it +won't be extended to cover new functions. This function will remain +functioning, but it can only return config data that can be represented in +this config struct, which may no longer be the complete set of config +options. \fBares_dup(3)\fP will not have that restriction. + +The ares_options struct can not handle potential IPv6 name servers the +ares_channel might be configured to use. The \fBares_save_options(3)\fP function +will only return IPv4 servers, if any. In order to retrieve all name servers +an ares_channel might be using, the \fBares_get_servers(3)\fP function must be +used instead. +.SH SEE ALSO +.BR ares_destroy_options (3), +.BR ares_init_options (3), +.BR ares_get_servers (3), +.BR ares_dup (3) +.SH AVAILABILITY +ares_save_options(3) was added in c-ares 1.4.0 +.SH AUTHOR +Brad House +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_search.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_search.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_search.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_search.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,151 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SEARCH 3 "24 July 1998" +.SH NAME +ares_search \- Initiate a DNS query with domain search +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP) +.PP +.B void ares_search(ares_channel \fIchannel\fP, const char *\fIname\fP, +.B int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP, +.B void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_search +function initiates a series of single-question DNS queries on the name +service channel identified by +.IR channel , +using the channel's search domains as well as a host alias file given +by the HOSTALIAS environment variable. The parameter +.I name +gives the alias name or the base of the query name as a NUL-terminated +C string of period-separated labels; if it ends with a period, the +channel's search domains will not be used. Periods and backslashes +within a label must be escaped with a backslash. The parameters +.I dnsclass +and +.I type +give the class and type of the query using the values defined in +.BR . +When the query sequence is complete or has failed, the ares library +will invoke +.IR callback . +Completion or failure of the query sequence may happen immediately, or +may happen during a later call to +.BR ares_process (3) +or +.BR ares_destroy (3). +.PP +The callback argument +.I arg +is copied from the +.B ares_search +argument +.IR arg . +The callback argument +.I status +indicates whether the query sequence ended with a successful query +and, if not, how the query sequence failed. It may have any of the +following values: +.TP 19 +.B ARES_SUCCESS +A query completed successfully. +.TP 19 +.B ARES_ENODATA +No query completed successfully; when the query was tried without a +search domain appended, a response was returned with no answers. +.TP 19 +.B ARES_EFORMERR +A query completed but the server claimed that the query was +malformatted. +.TP 19 +.B ARES_ESERVFAIL +No query completed successfully; when the query was tried without a +search domain appended, the server claimed to have experienced a +failure. (This code can only occur if the +.B ARES_FLAG_NOCHECKRESP +flag was specified at channel initialization time; otherwise, such +responses are ignored at the +.BR ares_send (3) +level.) +.TP 19 +.B ARES_ENOTFOUND +No query completed successfully; when the query was tried without a +search domain appended, the server reported that the queried-for +domain name was not found. +.TP 19 +.B ARES_ENOTIMP +A query completed but the server does not implement the operation +requested by the query. (This code can only occur if the +.B ARES_FLAG_NOCHECKRESP +flag was specified at channel initialization time; otherwise, such +responses are ignored at the +.BR ares_send (3) +level.) +.TP 19 +.B ARES_EREFUSED +A query completed but the server refused the query. (This code can +only occur returned if the +.B ARES_FLAG_NOCHECKRESP +flag was specified at channel initialization time; otherwise, such +responses are ignored at the +.BR ares_send (3) +level.) +.TP 19 +.B ARES_TIMEOUT +No name servers responded to a query within the timeout period. +.TP 19 +.B ARES_ECONNREFUSED +No name servers could be contacted. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_ECANCELLED +The query was cancelled. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +If a query completed successfully, the callback argument +.I abuf +points to a result buffer of length +.IR alen . +If the query did not complete successfully, +.I abuf +will usually be NULL and +.I alen +will usually be 0, but in some cases an unsuccessful query result may +be placed in +.IR abuf . +.SH SEE ALSO +.BR ares_process (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_send.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_send.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_send.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_send.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,123 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SEND 3 "25 July 1998" +.SH NAME +ares_send \- Initiate a DNS query +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP, +.B int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP) +.PP +.B void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP, +.B int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP) +.fi +.SH DESCRIPTION +The +.B ares_send +function initiates a DNS query on the name service channel identified +by +.IR channel . +The parameters +.I qbuf +and +.I qlen +give the DNS query, which should already have been formatted according +to the DNS protocol. When the query is complete or has failed, the +ares library will invoke +.IR callback . +Completion or failure of the query may happen immediately, or may +happen during a later call to +.BR ares_process (3) +or +.BR ares_destroy (3). +.PP +The callback argument +.I arg +is copied from the +.B ares_send +argument +.IR arg . +The callback argument +.I status +indicates whether the query succeeded and, if not, how it failed. It +may have any of the following values: +.TP 19 +.B ARES_SUCCESS +The query completed. +.TP 19 +.B ARES_EBADQUERY +The query buffer was poorly formed (was not long enough for a DNS +header or was too long for TCP transmission). +.TP 19 +.B ARES_ETIMEOUT +No name servers responded within the timeout period. +.TP 19 +.B ARES_ECONNREFUSED +No name servers could be contacted. +.TP 19 +.B ARES_ENOMEM +Memory was exhausted. +.TP 19 +.B ARES_ECANCELLED +The query was cancelled. +.TP 19 +.B ARES_EDESTRUCTION +The name service channel +.I channel +is being destroyed; the query will not be completed. +.PP +The callback argument +.I timeouts +reports how many times a query timed out during the execution of the +given request. +.PP +If the query completed, the callback argument +.I abuf +points to a result buffer of length +.IR alen . +If the query did not complete, +.I abuf +will be NULL and +.I alen +will be 0. +.PP +Unless the flag +.B ARES_FLAG_NOCHECKRESP +was set at channel initialization time, +.B ares_send +will normally ignore responses whose questions do not match the +questions in +.IR qbuf , +as well as responses with reply codes of +.BR SERVFAIL , +.BR NOTIMP , +and +.BR REFUSED . +Unlike other query functions in the ares library, however, +.B ares_send +does not inspect the header of the reply packet to determine the error +status, so a callback status of +.B ARES_SUCCESS +does not reflect as much about the response as for other query +functions. +.SH SEE ALSO +.BR ares_process (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_local_dev.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_local_dev.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_local_dev.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_local_dev.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,39 @@ +.\" +.\" Copyright 2010 by Ben Greear +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SET_LOCAL_DEV 3 "30 June 2010" +.SH NAME +ares_set_local_dev \- Bind to a specific network device when creating sockets. +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_set_local_dev(ares_channel \fIchannel\fP, const char* \fIlocal_dev_name\fP) +.fi +.SH DESCRIPTION +The \fBares_set_local_dev\fP function causes all future sockets +to be bound to this device with SO_BINDTODEVICE. This forces communications +to go over a certain interface, which can be useful on multi-homed machines. +This option is only supported on Linux, and root privileges are required +for the option to work. If SO_BINDTODEVICE is not supported or the +setsocktop call fails (probably because of permissions), the error is +silently ignored. +.SH SEE ALSO +.BR ares_set_local_ip4 (3) +.BR ares_set_local_ip6 (3) +.SH NOTES +This function was added in c-ares 1.7.4 +.SH AUTHOR +Ben Greear diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_local_ip4.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_local_ip4.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_local_ip4.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_local_ip4.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,34 @@ +.\" +.\" Copyright 2010 by Ben Greear +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SET_LOCAL_IP4 3 "30 June 2010" +.SH NAME +ares_set_local_ip4 \- Set local IPv4 address outgoing requests. +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_set_local_ip4(ares_channel \fIchannel\fP, unsigned int \fIlocal_ip\fP) +.fi +.SH DESCRIPTION +The \fBares_set_local_ip4\fP function sets the IP address for outbound +requests. The parameter \fIlocal_ip\fP is specified in host byte order. This +allows users to specify outbound interfaces when used on multi-homed systems. +.SH SEE ALSO +.BR ares_set_local_ip6 (3) +.SH NOTES +This function was added in c-ares 1.7.4 +.SH AUTHOR +Ben Greear diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_local_ip6.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_local_ip6.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_local_ip6.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_local_ip6.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,35 @@ +.\" +.\" Copyright 2010 by Ben Greear +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SET_LOCAL_IP6 3 "30 June 2010" +.SH NAME +ares_set_local_ip6 \- Set local IPv6 address outgoing requests. +.SH SYNOPSIS +.nf +.B #include +.PP +.B void ares_set_local_ip6(ares_channel \fIchannel\fP, const unsigned char* \fIlocal_ip6\fP) +.fi +.SH DESCRIPTION +The \fBares_set_local_ip6\fP function sets the IPv6 address for outbound +IPv6 requests. The parameter \fIlocal_ip6\fP is specified in network byte +order. This allows users to specify outbound interfaces when used on +multi-homed systems. The local_ip6 argument must be 16 bytes in length. +.SH SEE ALSO +.BR ares_set_local_ip4 (3) +.SH NOTES +This function was added in c-ares 1.7.4 +.SH AUTHOR +Ben Greear diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_servers.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_servers.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_servers.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_servers.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,95 @@ +.\" +.\" Copyright 2010 by Ben Greear +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SET_SERVERS 3 "5 March 2010" +.SH NAME +ares_set_servers, ares_set_servers_ports \- Initialize an ares_channel name servers configuration +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_set_servers(ares_channel \fIchannel\fP, struct ares_addr_node *\fIservers\fP) +.B int ares_set_servers_ports(ares_channel \fIchannel\fP, struct ares_addr_port_node *\fIservers\fP) +.fi +.SH DESCRIPTION +The \fBares_set_servers(3)\fP function initializes name servers configuration +for the channel data identified by +.IR channel , +from a +.IR servers +pointer to a linked list of ares_addr_node structs holding name servers +address data. +.PP +The name server linked list pointer argument may be the result of a previous +call to \fBares_get_servers(3)\fP or a linked list of \fBares_addr_node\fP structs +set up by other means. +.PP +The \fBares_set_servers(3)\fP function also allows the specification of UDP and +TCP ports to be used for communication on a per-server basis. The provided +linked list argument may be the result of a previous call to +\fBares_get_servers_ports(3)\fP or a linked list of \fBares_addr_port_node\fP structs +set up by other means. +.PP +This function replaces any potentially previously configured name servers +with the ones given in the linked list. So, in order to configure a channel +with more than one name server all the desired ones must be specified in a +single list. +.PP +The function does not take ownership of the linked list argument. +The caller is responsible for freeing the linked list when no longer needed. +.PP +This function is capable of handling IPv4 and IPv6 name server +addresses simultaneously, rendering \fBares_init_options(3)\fP with +optmask \fBARES_OPT_SERVERS\fP functionally obsolete except for +IPv4-only name server usage. + +.SH RETURN VALUES +.B ares_set_servers(3) +may return any of the following values: +.TP 15 +.B ARES_SUCCESS +The name servers configuration was successfully initialized. +.TP 15 +.B ARES_ENOMEM +The process's available memory was exhausted. +.TP 15 +.B ARES_ENODATA +The channel data identified by +.IR channel +was invalid. +.TP 15 +.B ARES_ENOTINITIALIZED +c-ares library initialization not yet performed. +.TP 15 +.B ARES_ENOTIMP +Changing name servers configuration while queries are outstanding is not implemented. +.SH SEE ALSO +.BR ares_set_servers_csv (3), +.BR ares_get_servers (3), +.BR ares_init_options (3), +.BR ares_dup(3) +.SH AVAILABILITY +\fBares_set_servers(3)\fP was added in c-ares 1.7.1; +\fBares_set_servers_ports(3)\fP was added in c-ares 1.11.0. +.SH AUTHOR +Implementation of this function and associated library internals are based +on code, comments and feedback provided in November and December of 2008 by +Daniel Stenberg, Gregor Jasny, Phil Blundell and Yang Tse, December 2009 +by Cedric Bail, February 2010 by Jakub Hrozek. On March 2010 Yang Tse +shuffled all the bits and this function popped out. +.br +Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2008-2010 by Daniel Stenberg diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_servers_csv.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_servers_csv.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_servers_csv.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_servers_csv.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,67 @@ +.\" +.\" Copyright 2010 by Ben Greear +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SET_SERVERS_CSV 3 "30 June 2010" +.SH NAME +ares_set_servers_csv, ares_set_servers_ports_csv \- Set list of DNS servers to be used. +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_set_servers_csv(ares_channel \fIchannel\fP, const char* \fIservers\fP) +.B int ares_set_servers_ports_csv(ares_channel \fIchannel\fP, const char* \fIservers\fP) +.fi +.SH DESCRIPTION +The \fBares_set_servers_csv\fP and \fBares_set_servers_ports_csv\fPfunctions set +the list of DNS servers that ARES will query. The format of the servers option is: + +host[:port][,host[:port]]... + +For example: + +192.168.1.100,192.168.1.101,3.4.5.6 +.PP +The \fBares_set_servers_csv\fP function will ignore any port values specified in +the input string, whereare the \fBares_set_servers_ports_csv\fP function will +apply any specified port values as the UDP and TCP port to be used for that +particular nameserver. + +.SH RETURN VALUES +.B ares_set_servers_csv(3) +This function may return any of the following values: +.TP 15 +.B ARES_SUCCESS +The name servers configuration was successfully initialized. +.TP 15 +.B ARES_ENOMEM +The process's available memory was exhausted. +.TP 15 +.B ARES_ENODATA +The channel data identified by +.IR channel +was invalid. +.TP 15 +.B ARES_ENOTINITIALIZED +c-ares library initialization not yet performed. +.TP 15 +.B ARES_ENOTIMP +Changing name servers configuration while queries are outstanding is not implemented. +.SH SEE ALSO +.BR ares_set_servers (3) +.SH AVAILABILITY +\fBares_set_servers_csv\fP was added in c-ares 1.7.2; +\fBares_set_servers_ports_csv\fP was added in c-ares 1.11.0. +.SH AUTHOR +Ben Greear diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_servers_ports.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_servers_ports.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_servers_ports.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_servers_ports.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1 @@ +.so man3/ares_set_servers.3 diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_servers_ports_csv.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_servers_ports_csv.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_servers_ports_csv.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_servers_ports_csv.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1 @@ +.so man3/ares_set_servers_csv.3 diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_socket_callback.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_socket_callback.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_socket_callback.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_socket_callback.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,32 @@ +.\" +.TH ARES_SET_SOCKET_CALLBACK 3 "20 Nov 2009" +.SH NAME +ares_set_socket_callback \- Set a socket creation callback +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef int (*ares_sock_create_callback)(ares_socket_t \fIsocket_fd\fP, + int \fItype\fP, + void *\fIuserdata\fP) +.PP +.B void ares_set_socket_callback(ares_channel \fIchannel\fP, + ares_sock_create_callback \fIcallback\fP, + void *\fIuserdata\fP) +.PP +.B cc file.c -lcares +.fi +.SH DESCRIPTION +.PP +This function sets a \fIcallback\fP in the given ares channel handle. This +callback function will be invoked after the socket has been created, and +connected to the remote server. The callback must return ARES_SUCCESS if +things are fine, or return -1 to signal an error. A returned error will +abort the ares operation. +.SH SEE ALSO +.BR ares_init_options (3), ares_set_socket_configure_callback (3) +.SH AVAILABILITY +ares_set_socket_callback(3) was added in c-ares 1.6.0 +.SH AUTHOR +Gregor Jasny + diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_socket_configure_callback.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_socket_configure_callback.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_socket_configure_callback.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_socket_configure_callback.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,33 @@ +.\" +.TH ARES_SET_SOCKET_CONFIGURE_CALLBACK 3 "6 Feb 2016" +.SH NAME +ares_set_socket_configure_callback \- Set a socket configuration callback +.SH SYNOPSIS +.nf +.B #include +.PP +.B typedef int (*ares_sock_config_callback)(ares_socket_t \fIsocket_fd\fP, + int \fItype\fP, + void *\fIuserdata\fP) +.PP +.B void ares_set_socket_configure_callback(ares_channel \fIchannel\fP, + ares_sock_config_callback \fIcallback\fP, + void *\fIuserdata\fP) +.PP +.B cc file.c -lcares +.fi +.SH DESCRIPTION +.PP +This function sets a \fIcallback\fP in the given ares channel handle. This +callback function will be invoked after the socket has been created, but +before it has been connected to the remote server, which is an ideal time +to configure various socket options. The callback must return ARES_SUCCESS +if things are fine, or return -1 to signal an error. A returned error will +abort the ares operation. +.SH SEE ALSO +.BR ares_init_options (3), ares_set_socket_callback (3) +.SH AVAILABILITY +ares_set_socket_configure_callback(3) was added in c-ares 1.11.0 +.SH AUTHOR +Andrew Ayer + diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_socket_functions.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_socket_functions.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_socket_functions.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_socket_functions.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,99 @@ +.\" +.TH ARES_SET_SOCKET_FUNCTIONS 3 "13 Dec 2016" +.SH NAME +ares_set_socket_functions \- Set socket io callbacks +.SH SYNOPSIS +.nf +.B #include +.PP +.B struct ares_socket_functions { + ares_socket_t(*\fIasocket\fP)(int, int, int, void *); + int(*\fIaclose\fP)(ares_socket_t, void *); + int(*\fIaconnect\fP)(ares_socket_t, const struct sockaddr *, ares_socklen_t, void *); + ares_ssize_t(*\fIarecvfrom\fP)(ares_socket_t, void *, size_t, int, struct sockaddr *, ares_socklen_t *, void *); + ares_ssize_t(*\fIasendv\fP)(ares_socket_t, const struct iovec *, int, void *); + }; + +.PP +.B void ares_set_socket_functions(ares_channel \fIchannel\fP, + const struct ares_socket_functions * \fIfunctions\fP, + void *\fIuser_data\fP); + +.fi +.SH DESCRIPTION +.PP +This function sets a set of callback \fIfunctions\fP in the given ares channel handle. +These callback functions will be invoked to create/destroy socket objects and perform +io, instead of the normal system calls. A client application can override normal network +operation fully through this functionality, and provide its own transport layer. +.PP +All callback functions are expected to operate like their system equivalents, and to +set +.BR errno(3) +to an appropriate error code on failure. C-ares also expects all io functions to behave +asynchronously, i.e. as if the socket object has been set to non-blocking mode. Thus +read/write calls (for TCP connections) are expected to often generate +.BR EAGAIN +or +.BR EWOULDBLOCK. + +.PP +The \fIuser_data\fP value is provided to each callback function invocation to serve as +context. +.PP +The +.B ares_socket_functions +must provide the following callbacks: +.TP 18 +.B \fIasocket\fP +.B ares_socket_t(*)(int \fIdomain\fP, int \fItype\fP, int \fIprotocol\fP, void * \fIuser_data\fP) +.br +Creates an endpoint for communication and returns a descriptor. \fIdomain\fP, \fItype\fP, and \fIprotocol\fP +each correspond to the parameters of +.BR socket(2). +Returns ahandle to the newly created socket, or -1 on error. +.TP 18 +.B \fIaclose\fP +.B int(*)(ares_socket_t \fIfd\fP, void * \fIuser_data\fP) +.br +Closes the socket endpoint indicated by \fIfd\fP. See +.BR close(2) +.TP 18 +.B \fIaconnect\fP +.B int(*)(ares_socket_t \fIfd\fP, const struct sockaddr * \fIaddr\fP, ares_socklen_t \fIaddr_len\fP, void * \fIuser_data\fP) +.br +Initiate a connection to the address indicated by \fIaddr\fP on a socket. See +.BR connect(2) + +.TP 18 +.B \fIarecvfrom\fP +.B ares_ssize_t(*)(ares_socket_t \fIfd\fP, void * \fIbuffer\fP, size_t \fIbuf_size\fP, int \fIflags\fP, struct sockaddr * \fIaddr\fP, ares_socklen_t * \fIaddr_len\fP, void * \fIuser_data\fP) +.br +Receives data from remote socket endpoint, if available. If the \fIaddr\fP parameter is not NULL and the connection protocol provides the source address, the callback should fill this in. See +.BR recvfrom(2) + +.TP 18 +.B \fIasendv\fP +.B ares_ssize_t(*)(ares_socket_t \fIfd\fP, const struct iovec * \fIdata\fP, int \fIlen\fP, void * \fIuser_data\fP) +.br +Send data, as provided by the iovec array \fIdata\fP, to the socket endpoint. See +.BR writev(2), + +.PP +The +.B ares_socket_functions +struct provided is not copied but directly referenced, +and must thus remain valid through out the channels and any created socket's lifetime. +.SH AVAILABILITY +Added in c-ares 1.13.0 +.SH SEE ALSO +.BR ares_init_options (3), +.BR socket(2), +.BR close(2), +.BR connect(2), +.BR recv(2), +.BR recvfrom(2), +.BR send(2), +.BR writev(2) +.SH AUTHOR +Carl Wilund diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_sortlist.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_sortlist.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_set_sortlist.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_set_sortlist.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,58 @@ +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_SET_SORTLIST 3 "23 November 2015" +.SH NAME +ares_set_sortlist \- Initialize an ares_channel sortlist configuration +.SH SYNOPSIS +.nf +.B #include +.PP +.B int ares_set_sortlist(ares_channel \fIchannel\fP, const char *\fIsortstr\fP) +.fi +.SH DESCRIPTION +The \fBares_set_sortlist(3)\fP function initializes an address sortlist configuration +for the channel data identified by +.IR channel , +so that addresses returned by \fBares_gethostbyname(3)\fP are sorted according to the +sortlist. The provided +.IR sortstr +string that holds a space separated list of IP-address-netmask pairs. The +netmask is optional but follows the address after a slash if present. For example, +"130.155.160.0/255.255.240.0 130.155.0.0". + +This function replaces any potentially previously configured address sortlist +with the ones given in the configuration string. + +.SH RETURN VALUES +.B ares_set_sortlist(3) +may return any of the following values: +.TP 15 +.B ARES_SUCCESS +The sortlist configuration was successfully initialized. +.TP 15 +.B ARES_ENOMEM +The process's available memory was exhausted. +.TP 15 +.B ARES_ENODATA +The channel data identified by +.IR channel +was invalid. +.TP 15 +.B ARES_ENOTINITIALIZED +c-ares library initialization not yet performed. +.SH SEE ALSO +.BR ares_init_options (3), +.BR ares_dup(3) +.SH AVAILABILITY +ares_set_sortlist(3) was added in c-ares 1.11.0 diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_strerror.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_strerror.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_strerror.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_strerror.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,37 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_STRERROR 3 "25 July 1998" +.SH NAME +ares_strerror \- Get the description of an ares library error code +.SH SYNOPSIS +.nf +.B #include +.PP +.B const char *ares_strerror(int \fIcode\fP) +.fi +.SH DESCRIPTION +The +.B ares_strerror +function gets the description of the ares library error code +.IR code , +returning the result as a NUL-terminated C string. +.SH NOTES +This function is not compatible with ares, it takes a different set of +arguments. +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_timeout.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_timeout.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_timeout.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_timeout.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,46 @@ +.\" +.\" Copyright 1998 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_TIMEOUT 3 "25 July 1998" +.SH NAME +ares_timeout \- return maximum time to wait +.SH SYNOPSIS +.nf +#include + +struct timeval *ares_timeout(ares_channel \fIchannel\fP, + struct timeval *\fImaxtv\fP, + struct timeval *\fItv\fP) +.fi +.SH DESCRIPTION +The \fBares_timeout(3)\fP function determines the maximum time for which the +caller should wait before invoking \fIares_process(3)\fP to process timeouts. +The parameter \fImaxtv\fP specifies a existing maximum timeout, or \fBNULL\fP +if the caller does not wish to apply a maximum timeout. The parameter +\fItv\fP must point to a writable buffer of type \fBstruct timeval\fP It is +valid for \fImaxtv\fP and \fItv\fP to have the same value. + +If no queries have timeouts pending sooner than the given maximum timeout, +\fBares_timeout(3)\fP returns the value of \fImaxtv\fP; otherwise +\fBares_timeout(3)\fP stores the appropriate timeout value into the buffer +pointed to by \fItv\fP and returns the value of \fItv\fP. +.SH SEE ALSO +.BR ares_fds (3), +.BR ares_process (3), +.BR ares_process_fd (3) +.SH AUTHOR +Greg Hudson, MIT Information Systems +.br +Copyright 1998 by the Massachusetts Institute of Technology. diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/ares_version.3 nodejs-mozilla-12.22.12/deps/cares/docs/ares_version.3 --- nodejs-mozilla-12.18.1/deps/cares/docs/ares_version.3 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/ares_version.3 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,35 @@ +.\" +.\" Copyright 2004 by Daniel Stenberg +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.\" +.TH ARES_VERSION 3 "29 January 2004" +.SH NAME +ares_version \- Get the version number of the library +.SH SYNOPSIS +.nf +#include + +const char *ares_version(int *\fIversion\fP) +.fi +.SH DESCRIPTION +The \fBares_version(3)\fP function gets the library version as a string and +optionally as an integer stored in the \fIversion\fP argument. If you pass a +NULL, no integer is attempted to be returned. + +The integer is built up as 24bit number, with 8 separate bits used for major +number, minor number and patch number. This makes a version string such as +1.2.3 will be returned as the hexadecimal number 0x010203 (decimal 66051). +.SH "SEE ALSO" +.BR ares_init (3), +.BR ares_library_init (3) diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/CMakeLists.txt nodejs-mozilla-12.22.12/deps/cares/docs/CMakeLists.txt --- nodejs-mozilla-12.18.1/deps/cares/docs/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/CMakeLists.txt 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,17 @@ +# Headers and Man Pages installation target +IF (CARES_INSTALL) + # ManPages + FILE (GLOB DevelManPages "." "*.3") + INSTALL (FILES ${DevelManPages} + DESTINATION ${CMAKE_INSTALL_MANDIR}/man3 + COMPONENT Devel + ) + + IF (CARES_BUILD_TOOLS) + FILE (GLOB ToolManPages "." "*.1") + INSTALL (FILES ${ToolManPages} + DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 + COMPONENT Tools + ) + ENDIF () +ENDIF () diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/Makefile.am nodejs-mozilla-12.22.12/deps/cares/docs/Makefile.am --- nodejs-mozilla-12.18.1/deps/cares/docs/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/Makefile.am 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,11 @@ +#*************************************************************************** + +########################################################################### + +AUTOMAKE_OPTIONS = foreign subdir-objects no-dependencies + +include Makefile.inc + +man_MANS = $(MANPAGES) + +EXTRA_DIST = $(MANPAGES) ahost.1 adig.1 acountry.1 Makefile.inc CMakeLists.txt diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/Makefile.in nodejs-mozilla-12.22.12/deps/cares/docs/Makefile.in --- nodejs-mozilla-12.18.1/deps/cares/docs/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/Makefile.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,636 @@ +# Makefile.in generated by automake 1.16.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2021 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +#*************************************************************************** + +########################################################################### +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = docs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ + $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ + $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ + $(top_srcdir)/m4/ax_am_macros_static.m4 \ + $(top_srcdir)/m4/ax_check_gnu_make.m4 \ + $(top_srcdir)/m4/ax_code_coverage.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/m4/ax_file_escapes.m4 \ + $(top_srcdir)/m4/ax_require_defined.m4 \ + $(top_srcdir)/m4/cares-compilers.m4 \ + $(top_srcdir)/m4/cares-confopts.m4 \ + $(top_srcdir)/m4/cares-functions.m4 \ + $(top_srcdir)/m4/cares-reentrant.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/xc-am-iface.m4 \ + $(top_srcdir)/m4/xc-cc-check.m4 \ + $(top_srcdir)/m4/xc-lt-iface.m4 \ + $(top_srcdir)/m4/xc-translit.m4 \ + $(top_srcdir)/m4/xc-val-flgs.m4 \ + $(top_srcdir)/m4/zz40-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/lib/ares_config.h \ + $(top_builddir)/include/ares_build.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +depcomp = +am__maybe_remake_depfiles = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man3dir = $(mandir)/man3 +am__installdirs = "$(DESTDIR)$(man3dir)" +NROFF = nroff +MANS = $(man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_SUBDIRS = @BUILD_SUBDIRS@ +CARES_CFLAG_EXTRAS = @CARES_CFLAG_EXTRAS@ +CARES_PRIVATE_LIBS = @CARES_PRIVATE_LIBS@ +CARES_RANDOM_FILE = @CARES_RANDOM_FILE@ +CARES_VERSION_INFO = @CARES_VERSION_INFO@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_CARES_SYMBOL_HIDING = @CFLAG_CARES_SYMBOL_HIDING@ +CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ +CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ +CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ +CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ +CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAG_CARES_STATICLIB = @CPPFLAG_CARES_STATICLIB@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ETAGS = @ETAGS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GENHTML = @GENHTML@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LCOV = @LCOV@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ifGNUmake = @ifGNUmake@ +ifnGNUmake = @ifnGNUmake@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign subdir-objects no-dependencies +MANPAGES = ares_cancel.3 \ + ares_create_query.3 \ + ares_destroy.3 \ + ares_destroy_options.3 \ + ares_dup.3 \ + ares_expand_name.3 \ + ares_expand_string.3 \ + ares_fds.3 \ + ares_free_data.3 \ + ares_free_hostent.3 \ + ares_free_string.3 \ + ares_freeaddrinfo.3 \ + ares_get_servers.3 \ + ares_get_servers_ports.3 \ + ares_getaddrinfo.3 \ + ares_gethostbyaddr.3 \ + ares_gethostbyname.3 \ + ares_gethostbyname_file.3 \ + ares_getnameinfo.3 \ + ares_getsock.3 \ + ares_inet_ntop.3 \ + ares_inet_pton.3 \ + ares_init.3 \ + ares_init_options.3 \ + ares_library_cleanup.3 \ + ares_library_init.3 \ + ares_library_init_android.3 \ + ares_library_initialized.3 \ + ares_mkquery.3 \ + ares_parse_a_reply.3 \ + ares_parse_aaaa_reply.3 \ + ares_parse_caa_reply.3 \ + ares_parse_mx_reply.3 \ + ares_parse_naptr_reply.3 \ + ares_parse_ns_reply.3 \ + ares_parse_ptr_reply.3 \ + ares_parse_soa_reply.3 \ + ares_parse_srv_reply.3 \ + ares_parse_txt_reply.3 \ + ares_parse_uri_reply.3 \ + ares_process.3 \ + ares_query.3 \ + ares_save_options.3 \ + ares_search.3 \ + ares_send.3 \ + ares_set_local_dev.3 \ + ares_set_local_ip4.3 \ + ares_set_local_ip6.3 \ + ares_set_servers.3 \ + ares_set_servers_csv.3 \ + ares_set_servers_ports.3 \ + ares_set_servers_ports_csv.3 \ + ares_set_socket_callback.3 \ + ares_set_socket_configure_callback.3 \ + ares_set_socket_functions.3 \ + ares_set_sortlist.3 \ + ares_strerror.3 \ + ares_timeout.3 \ + ares_version.3 + +man_MANS = $(MANPAGES) +EXTRA_DIST = $(MANPAGES) ahost.1 adig.1 acountry.1 Makefile.inc CMakeLists.txt +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; +$(srcdir)/Makefile.inc $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man3: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man3dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.3[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ + done; } + +uninstall-man3: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man3dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.3[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man3dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man3 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man3 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man3 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags-am uninstall uninstall-am uninstall-man \ + uninstall-man3 + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru nodejs-mozilla-12.18.1/deps/cares/docs/Makefile.inc nodejs-mozilla-12.22.12/deps/cares/docs/Makefile.inc --- nodejs-mozilla-12.18.1/deps/cares/docs/Makefile.inc 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/docs/Makefile.inc 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,59 @@ +MANPAGES = ares_cancel.3 \ + ares_create_query.3 \ + ares_destroy.3 \ + ares_destroy_options.3 \ + ares_dup.3 \ + ares_expand_name.3 \ + ares_expand_string.3 \ + ares_fds.3 \ + ares_free_data.3 \ + ares_free_hostent.3 \ + ares_free_string.3 \ + ares_freeaddrinfo.3 \ + ares_get_servers.3 \ + ares_get_servers_ports.3 \ + ares_getaddrinfo.3 \ + ares_gethostbyaddr.3 \ + ares_gethostbyname.3 \ + ares_gethostbyname_file.3 \ + ares_getnameinfo.3 \ + ares_getsock.3 \ + ares_inet_ntop.3 \ + ares_inet_pton.3 \ + ares_init.3 \ + ares_init_options.3 \ + ares_library_cleanup.3 \ + ares_library_init.3 \ + ares_library_init_android.3 \ + ares_library_initialized.3 \ + ares_mkquery.3 \ + ares_parse_a_reply.3 \ + ares_parse_aaaa_reply.3 \ + ares_parse_caa_reply.3 \ + ares_parse_mx_reply.3 \ + ares_parse_naptr_reply.3 \ + ares_parse_ns_reply.3 \ + ares_parse_ptr_reply.3 \ + ares_parse_soa_reply.3 \ + ares_parse_srv_reply.3 \ + ares_parse_txt_reply.3 \ + ares_parse_uri_reply.3 \ + ares_process.3 \ + ares_query.3 \ + ares_save_options.3 \ + ares_search.3 \ + ares_send.3 \ + ares_set_local_dev.3 \ + ares_set_local_ip4.3 \ + ares_set_local_ip6.3 \ + ares_set_servers.3 \ + ares_set_servers_csv.3 \ + ares_set_servers_ports.3 \ + ares_set_servers_ports_csv.3 \ + ares_set_socket_callback.3 \ + ares_set_socket_configure_callback.3 \ + ares_set_socket_functions.3 \ + ares_set_sortlist.3 \ + ares_strerror.3 \ + ares_timeout.3 \ + ares_version.3 diff -Nru nodejs-mozilla-12.18.1/deps/cares/get_ver.awk nodejs-mozilla-12.22.12/deps/cares/get_ver.awk --- nodejs-mozilla-12.18.1/deps/cares/get_ver.awk 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/get_ver.awk 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,27 @@ +# *************************************************************************** +# * Project: c-ares +# * +# *************************************************************************** +# awk script which fetches c-ares version number and string from input +# file and writes them to STDOUT. Here you can get an awk version for Win32: +# http://www.gknw.net/development/prgtools/awk-20100523.zip +# +BEGIN { + while ((getline < ARGV[1]) > 0) { + sub("\r", "") # make MSYS gawk work with CRLF header input. + if (match ($0, /^#define ARES_COPYRIGHT "[^"]+"$/)) + copyright_string = substr($0, 25, length($0)-25) + else if (match ($0, /^#define ARES_VERSION_STR "[^"]+"$/)) + version_string = substr($3, 2, length($3)-2) + else if (match ($0, /^#define ARES_VERSION_MAJOR [0-9]+$/)) + version_major = $3 + else if (match ($0, /^#define ARES_VERSION_MINOR [0-9]+$/)) + version_minor = $3 + else if (match ($0, /^#define ARES_VERSION_PATCH [0-9]+$/)) + version_patch = $3 + } + print "LIBCARES_VERSION = " version_major "," version_minor "," version_patch + print "LIBCARES_VERSION_STR = " version_string + print "LIBCARES_COPYRIGHT_STR = " copyright_string +} + diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/ares_build.h nodejs-mozilla-12.22.12/deps/cares/include/ares_build.h --- nodejs-mozilla-12.18.1/deps/cares/include/ares_build.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/ares_build.h 2022-04-05 07:16:59.000000000 +0000 @@ -2,7 +2,7 @@ #define __CARES_BUILD_H -/* Copyright (C) 2009 - 2013 by Daniel Stenberg et al +/* Copyright (C) 2009 - 2021 by Daniel Stenberg et al * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided @@ -42,7 +42,7 @@ * * If you think that something actually needs to be changed, adjusted * or fixed in this file, then, report it on the c-ares development - * mailing list: http://cool.haxx.se/mailman/listinfo/c-ares/ + * mailing list: http://lists.haxx.se/listinfo/c-ares/ * * Try to keep one section per platform, compiler and architecture, * otherwise, if an existing section is reused for a different one and diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/ares_build.h.cmake nodejs-mozilla-12.22.12/deps/cares/include/ares_build.h.cmake --- nodejs-mozilla-12.18.1/deps/cares/include/ares_build.h.cmake 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/ares_build.h.cmake 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,43 @@ +#ifndef __CARES_BUILD_H +#define __CARES_BUILD_H + +#define CARES_TYPEOF_ARES_SOCKLEN_T @CARES_TYPEOF_ARES_SOCKLEN_T@ +#define CARES_TYPEOF_ARES_SSIZE_T @CARES_TYPEOF_ARES_SSIZE_T@ + +/* Prefix names with CARES_ to make sure they don't conflict with other config.h + * files. We need to include some dependent headers that may be system specific + * for C-Ares */ +#cmakedefine CARES_HAVE_SYS_TYPES_H +#cmakedefine CARES_HAVE_SYS_SOCKET_H +#cmakedefine CARES_HAVE_WINDOWS_H +#cmakedefine CARES_HAVE_WS2TCPIP_H +#cmakedefine CARES_HAVE_WINSOCK2_H +#cmakedefine CARES_HAVE_WINDOWS_H +#cmakedefine CARES_HAVE_ARPA_NAMESER_H +#cmakedefine CARES_HAVE_ARPA_NAMESER_COMPAT_H + +#ifdef CARES_HAVE_SYS_TYPES_H +# include +#endif + +#ifdef CARES_HAVE_SYS_SOCKET_H +# include +#endif + +#ifdef CARES_HAVE_WINSOCK2_H +# include +#endif + +#ifdef CARES_HAVE_WS2TCPIP_H +# include +#endif + +#ifdef CARES_HAVE_WINDOWS_H +# include +#endif + + +typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t; +typedef CARES_TYPEOF_ARES_SSIZE_T ares_ssize_t; + +#endif /* __CARES_BUILD_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/ares_build.h.in nodejs-mozilla-12.22.12/deps/cares/include/ares_build.h.in --- nodejs-mozilla-12.18.1/deps/cares/include/ares_build.h.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/ares_build.h.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,103 @@ +#ifndef __CARES_BUILD_H +#define __CARES_BUILD_H + + +/* Copyright (C) 2009 - 2021 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +/* ================================================================ */ +/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */ +/* ================================================================ */ + +/* + * NOTE 1: + * ------- + * + * Nothing in this file is intended to be modified or adjusted by the + * c-ares library user nor by the c-ares library builder. + * + * If you think that something actually needs to be changed, adjusted + * or fixed in this file, then, report it on the c-ares development + * mailing list: http://lists.haxx.se/listinfo/c-ares/ + * + * This header file shall only export symbols which are 'cares' or 'CARES' + * prefixed, otherwise public name space would be polluted. + * + * NOTE 2: + * ------- + * + * Right now you might be staring at file ares_build.h.in or ares_build.h, + * this is due to the following reason: + * + * On systems capable of running the configure script, the configure process + * will overwrite the distributed ares_build.h file with one that is suitable + * and specific to the library being configured and built, which is generated + * from the ares_build.h.in template file. + * + */ + +/* ================================================================ */ +/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */ +/* ================================================================ */ + +#ifdef CARES_TYPEOF_ARES_SOCKLEN_T +# error "CARES_TYPEOF_ARES_SOCKLEN_T shall not be defined except in ares_build.h" + Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_already_defined +#endif + +#undef CARES_HAVE_ARPA_NAMESER_H +#undef CARES_HAVE_ARPA_NAMESER_COMPAT_H + +/* ================================================================ */ +/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */ +/* ================================================================ */ + +/* Configure process defines this to 1 when it finds out that system */ +/* header file ws2tcpip.h must be included by the external interface. */ +#undef CARES_PULL_WS2TCPIP_H +#ifdef CARES_PULL_WS2TCPIP_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# include +# include +#endif + +/* Configure process defines this to 1 when it finds out that system */ +/* header file sys/types.h must be included by the external interface. */ +#undef CARES_PULL_SYS_TYPES_H +#ifdef CARES_PULL_SYS_TYPES_H +# include +#endif + +/* Configure process defines this to 1 when it finds out that system */ +/* header file sys/socket.h must be included by the external interface. */ +#undef CARES_PULL_SYS_SOCKET_H +#ifdef CARES_PULL_SYS_SOCKET_H +# include +#endif + +/* Integral data type used for ares_socklen_t. */ +#undef CARES_TYPEOF_ARES_SOCKLEN_T + +/* Data type definition of ares_socklen_t. */ +typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t; + +/* Integral data type used for ares_ssize_t. */ +#undef CARES_TYPEOF_ARES_SSIZE_T + +/* Data type definition of ares_ssize_t. */ +typedef CARES_TYPEOF_ARES_SSIZE_T ares_ssize_t; + +#endif /* __CARES_BUILD_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/ares_dns.h nodejs-mozilla-12.22.12/deps/cares/include/ares_dns.h --- nodejs-mozilla-12.18.1/deps/cares/include/ares_dns.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/ares_dns.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,112 @@ +#ifndef HEADER_CARES_DNS_H +#define HEADER_CARES_DNS_H + +/* Copyright 1998, 2011 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +/* + * NOTE TO INTEGRATORS: + * + * This header is made public due to legacy projects relying on it. + * Please do not use the macros within this header, or include this + * header in your project as it may be removed in the future. + */ + + +/* + * Macro DNS__16BIT reads a network short (16 bit) given in network + * byte order, and returns its value as an unsigned short. + */ +#define DNS__16BIT(p) ((unsigned short)((unsigned int) 0xffff & \ + (((unsigned int)((unsigned char)(p)[0]) << 8U) | \ + ((unsigned int)((unsigned char)(p)[1]))))) + +/* + * Macro DNS__32BIT reads a network long (32 bit) given in network + * byte order, and returns its value as an unsigned int. + */ +#define DNS__32BIT(p) ((unsigned int) \ + (((unsigned int)((unsigned char)(p)[0]) << 24U) | \ + ((unsigned int)((unsigned char)(p)[1]) << 16U) | \ + ((unsigned int)((unsigned char)(p)[2]) << 8U) | \ + ((unsigned int)((unsigned char)(p)[3])))) + +#define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \ + ((p)[1] = (unsigned char)((v) & 0xff))) +#define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \ + ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \ + ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \ + ((p)[3] = (unsigned char)((v) & 0xff))) + +#if 0 +/* we cannot use this approach on systems where we can't access 16/32 bit + data on un-aligned addresses */ +#define DNS__16BIT(p) ntohs(*(unsigned short*)(p)) +#define DNS__32BIT(p) ntohl(*(unsigned long*)(p)) +#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v) +#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v) +#endif + +/* Macros for parsing a DNS header */ +#define DNS_HEADER_QID(h) DNS__16BIT(h) +#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1) +#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf) +#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1) +#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1) +#define DNS_HEADER_RD(h) ((h)[2] & 0x1) +#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1) +#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7) +#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf) +#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4) +#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6) +#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8) +#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10) + +/* Macros for constructing a DNS header */ +#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v) +#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7)) +#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3)) +#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2)) +#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1)) +#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1)) +#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7)) +#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4)) +#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf)) +#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v) +#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v) +#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v) +#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v) + +/* Macros for parsing the fixed part of a DNS question */ +#define DNS_QUESTION_TYPE(q) DNS__16BIT(q) +#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2) + +/* Macros for constructing the fixed part of a DNS question */ +#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v) +#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v) + +/* Macros for parsing the fixed part of a DNS resource record */ +#define DNS_RR_TYPE(r) DNS__16BIT(r) +#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2) +#define DNS_RR_TTL(r) DNS__32BIT((r) + 4) +#define DNS_RR_LEN(r) DNS__16BIT((r) + 8) + +/* Macros for constructing the fixed part of a DNS resource record */ +#define DNS_RR_SET_TYPE(r, v) DNS__SET16BIT(r, v) +#define DNS_RR_SET_CLASS(r, v) DNS__SET16BIT((r) + 2, v) +#define DNS_RR_SET_TTL(r, v) DNS__SET32BIT((r) + 4, v) +#define DNS_RR_SET_LEN(r, v) DNS__SET16BIT((r) + 8, v) + +#endif /* HEADER_CARES_DNS_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/ares.h nodejs-mozilla-12.22.12/deps/cares/include/ares.h --- nodejs-mozilla-12.18.1/deps/cares/include/ares.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/ares.h 2022-04-05 07:16:59.000000000 +0000 @@ -39,7 +39,7 @@ #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \ defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ - defined(__QNXNTO__) + defined(__QNXNTO__) || defined(__MVS__) || defined(__HAIKU__) #include #endif #if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) @@ -528,6 +528,15 @@ int ttl; }; +struct ares_caa_reply { + struct ares_caa_reply *next; + int critical; + unsigned char *property; + size_t plength; /* plength excludes null termination */ + unsigned char *value; + size_t length; /* length excludes null termination */ +}; + struct ares_srv_reply { struct ares_srv_reply *next; char *host; @@ -579,6 +588,14 @@ unsigned int minttl; }; +struct ares_uri_reply { + struct ares_uri_reply *next; + unsigned short priority; + unsigned short weight; + char *uri; + int ttl; +}; + /* * Similar to addrinfo, but with extra ttl and missing canonname. */ @@ -608,6 +625,7 @@ struct ares_addrinfo { struct ares_addrinfo_cname *cnames; struct ares_addrinfo_node *nodes; + char *name; }; struct ares_addrinfo_hints { @@ -637,6 +655,10 @@ struct ares_addr6ttl *addrttls, int *naddrttls); +CARES_EXTERN int ares_parse_caa_reply(const unsigned char* abuf, + int alen, + struct ares_caa_reply** caa_out); + CARES_EXTERN int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, @@ -672,6 +694,10 @@ int alen, struct ares_soa_reply** soa_out); +CARES_EXTERN int ares_parse_uri_reply(const unsigned char* abuf, + int alen, + struct ares_uri_reply** uri_out); + CARES_EXTERN void ares_free_string(void *str); CARES_EXTERN void ares_free_hostent(struct hostent *host); diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/ares_nameser.h nodejs-mozilla-12.22.12/deps/cares/include/ares_nameser.h --- nodejs-mozilla-12.18.1/deps/cares/include/ares_nameser.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/ares_nameser.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,484 @@ + +#ifndef ARES_NAMESER_H +#define ARES_NAMESER_H + +#include "ares_build.h" + +#ifdef CARES_HAVE_ARPA_NAMESER_H +# include +#endif +#ifdef CARES_HAVE_ARPA_NAMESER_COMPAT_H +# include +#endif + +/* ============================================================================ + * arpa/nameser.h may or may not provide ALL of the below defines, so check + * each one individually and set if not + * ============================================================================ + */ + +#ifndef NS_PACKETSZ +# define NS_PACKETSZ 512 /* maximum packet size */ +#endif + +#ifndef NS_MAXDNAME +# define NS_MAXDNAME 256 /* maximum domain name */ +#endif + +#ifndef NS_MAXCDNAME +# define NS_MAXCDNAME 255 /* maximum compressed domain name */ +#endif + +#ifndef NS_MAXLABEL +# define NS_MAXLABEL 63 +#endif + +#ifndef NS_HFIXEDSZ +# define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */ +#endif + +#ifndef NS_QFIXEDSZ +# define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */ +#endif + +#ifndef NS_RRFIXEDSZ +# define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */ +#endif + +#ifndef NS_INT16SZ +# define NS_INT16SZ 2 +#endif + +#ifndef NS_INADDRSZ +# define NS_INADDRSZ 4 +#endif + +#ifndef NS_IN6ADDRSZ +# define NS_IN6ADDRSZ 16 +#endif + +#ifndef NS_CMPRSFLGS +# define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */ +#endif + +#ifndef NS_DEFAULTPORT +# define NS_DEFAULTPORT 53 /* For both TCP and UDP. */ +#endif + +/* ============================================================================ + * arpa/nameser.h should provide these enumerations always, so if not found, + * provide them + * ============================================================================ + */ +#ifndef CARES_HAVE_ARPA_NAMESER_H + +typedef enum __ns_class { + ns_c_invalid = 0, /* Cookie. */ + ns_c_in = 1, /* Internet. */ + ns_c_2 = 2, /* unallocated/unsupported. */ + ns_c_chaos = 3, /* MIT Chaos-net. */ + ns_c_hs = 4, /* MIT Hesiod. */ + /* Query class values which do not appear in resource records */ + ns_c_none = 254, /* for prereq. sections in update requests */ + ns_c_any = 255, /* Wildcard match. */ + ns_c_max = 65536 +} ns_class; + +typedef enum __ns_type { + ns_t_invalid = 0, /* Cookie. */ + ns_t_a = 1, /* Host address. */ + ns_t_ns = 2, /* Authoritative server. */ + ns_t_md = 3, /* Mail destination. */ + ns_t_mf = 4, /* Mail forwarder. */ + ns_t_cname = 5, /* Canonical name. */ + ns_t_soa = 6, /* Start of authority zone. */ + ns_t_mb = 7, /* Mailbox domain name. */ + ns_t_mg = 8, /* Mail group member. */ + ns_t_mr = 9, /* Mail rename name. */ + ns_t_null = 10, /* Null resource record. */ + ns_t_wks = 11, /* Well known service. */ + ns_t_ptr = 12, /* Domain name pointer. */ + ns_t_hinfo = 13, /* Host information. */ + ns_t_minfo = 14, /* Mailbox information. */ + ns_t_mx = 15, /* Mail routing information. */ + ns_t_txt = 16, /* Text strings. */ + ns_t_rp = 17, /* Responsible person. */ + ns_t_afsdb = 18, /* AFS cell database. */ + ns_t_x25 = 19, /* X_25 calling address. */ + ns_t_isdn = 20, /* ISDN calling address. */ + ns_t_rt = 21, /* Router. */ + ns_t_nsap = 22, /* NSAP address. */ + ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */ + ns_t_sig = 24, /* Security signature. */ + ns_t_key = 25, /* Security key. */ + ns_t_px = 26, /* X.400 mail mapping. */ + ns_t_gpos = 27, /* Geographical position (withdrawn). */ + ns_t_aaaa = 28, /* Ip6 Address. */ + ns_t_loc = 29, /* Location Information. */ + ns_t_nxt = 30, /* Next domain (security). */ + ns_t_eid = 31, /* Endpoint identifier. */ + ns_t_nimloc = 32, /* Nimrod Locator. */ + ns_t_srv = 33, /* Server Selection. */ + ns_t_atma = 34, /* ATM Address */ + ns_t_naptr = 35, /* Naming Authority PoinTeR */ + ns_t_kx = 36, /* Key Exchange */ + ns_t_cert = 37, /* Certification record */ + ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */ + ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */ + ns_t_sink = 40, /* Kitchen sink (experimentatl) */ + ns_t_opt = 41, /* EDNS0 option (meta-RR) */ + ns_t_apl = 42, /* Address prefix list (RFC3123) */ + ns_t_ds = 43, /* Delegation Signer (RFC4034) */ + ns_t_sshfp = 44, /* SSH Key Fingerprint (RFC4255) */ + ns_t_rrsig = 46, /* Resource Record Signature (RFC4034) */ + ns_t_nsec = 47, /* Next Secure (RFC4034) */ + ns_t_dnskey = 48, /* DNS Public Key (RFC4034) */ + ns_t_tkey = 249, /* Transaction key */ + ns_t_tsig = 250, /* Transaction signature. */ + ns_t_ixfr = 251, /* Incremental zone transfer. */ + ns_t_axfr = 252, /* Transfer zone of authority. */ + ns_t_mailb = 253, /* Transfer mailbox records. */ + ns_t_maila = 254, /* Transfer mail agent records. */ + ns_t_any = 255, /* Wildcard match. */ + ns_t_uri = 256, /* Uniform Resource Identifier (RFC7553) */ + ns_t_caa = 257, /* Certification Authority Authorization. */ + ns_t_max = 65536 +} ns_type; + +typedef enum __ns_opcode { + ns_o_query = 0, /* Standard query. */ + ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */ + ns_o_status = 2, /* Name server status query (unsupported). */ + /* Opcode 3 is undefined/reserved. */ + ns_o_notify = 4, /* Zone change notification. */ + ns_o_update = 5, /* Zone update message. */ + ns_o_max = 6 +} ns_opcode; + +typedef enum __ns_rcode { + ns_r_noerror = 0, /* No error occurred. */ + ns_r_formerr = 1, /* Format error. */ + ns_r_servfail = 2, /* Server failure. */ + ns_r_nxdomain = 3, /* Name error. */ + ns_r_notimpl = 4, /* Unimplemented. */ + ns_r_refused = 5, /* Operation refused. */ + /* these are for BIND_UPDATE */ + ns_r_yxdomain = 6, /* Name exists */ + ns_r_yxrrset = 7, /* RRset exists */ + ns_r_nxrrset = 8, /* RRset does not exist */ + ns_r_notauth = 9, /* Not authoritative for zone */ + ns_r_notzone = 10, /* Zone of record different from zone section */ + ns_r_max = 11, + /* The following are TSIG extended errors */ + ns_r_badsig = 16, + ns_r_badkey = 17, + ns_r_badtime = 18 +} ns_rcode; + +#endif /* CARES_HAVE_ARPA_NAMESER_H */ + + +/* ============================================================================ + * arpa/nameser_compat.h typically sets these. However on some systems + * arpa/nameser.h does, but may not set all of them. Lets conditionally + * define each + * ============================================================================ + */ + +#ifndef PACKETSZ +# define PACKETSZ NS_PACKETSZ +#endif + +#ifndef MAXDNAME +# define MAXDNAME NS_MAXDNAME +#endif + +#ifndef MAXCDNAME +# define MAXCDNAME NS_MAXCDNAME +#endif + +#ifndef MAXLABEL +# define MAXLABEL NS_MAXLABEL +#endif + +#ifndef HFIXEDSZ +# define HFIXEDSZ NS_HFIXEDSZ +#endif + +#ifndef QFIXEDSZ +# define QFIXEDSZ NS_QFIXEDSZ +#endif + +#ifndef RRFIXEDSZ +# define RRFIXEDSZ NS_RRFIXEDSZ +#endif + +#ifndef INDIR_MASK +# define INDIR_MASK NS_CMPRSFLGS +#endif + +#ifndef NAMESERVER_PORT +# define NAMESERVER_PORT NS_DEFAULTPORT +#endif + + +/* opcodes */ +#ifndef O_QUERY +# define O_QUERY 0 /* ns_o_query */ +#endif +#ifndef O_IQUERY +# define O_IQUERY 1 /* ns_o_iquery */ +#endif +#ifndef O_STATUS +# define O_STATUS 2 /* ns_o_status */ +#endif +#ifndef O_NOTIFY +# define O_NOTIFY 4 /* ns_o_notify */ +#endif +#ifndef O_UPDATE +# define O_UPDATE 5 /* ns_o_update */ +#endif + + +/* response codes */ +#ifndef SERVFAIL +# define SERVFAIL ns_r_servfail +#endif +#ifndef NOTIMP +# define NOTIMP ns_r_notimpl +#endif +#ifndef REFUSED +# define REFUSED ns_r_refused +#endif +#if defined(_WIN32) && !defined(HAVE_ARPA_NAMESER_COMPAT_H) && defined(NOERROR) +# undef NOERROR /* it seems this is already defined in winerror.h */ +#endif +#ifndef NOERROR +# define NOERROR ns_r_noerror +#endif +#ifndef FORMERR +# define FORMERR ns_r_formerr +#endif +#ifndef NXDOMAIN +# define NXDOMAIN ns_r_nxdomain +#endif +/* Non-standard response codes, use numeric values */ +#ifndef YXDOMAIN +# define YXDOMAIN 6 /* ns_r_yxdomain */ +#endif +#ifndef YXRRSET +# define YXRRSET 7 /* ns_r_yxrrset */ +#endif +#ifndef NXRRSET +# define NXRRSET 8 /* ns_r_nxrrset */ +#endif +#ifndef NOTAUTH +# define NOTAUTH 9 /* ns_r_notauth */ +#endif +#ifndef NOTZONE +# define NOTZONE 10 /* ns_r_notzone */ +#endif +#ifndef TSIG_BADSIG +# define TSIG_BADSIG 16 /* ns_r_badsig */ +#endif +#ifndef TSIG_BADKEY +# define TSIG_BADKEY 17 /* ns_r_badkey */ +#endif +#ifndef TSIG_BADTIME +# define TSIG_BADTIME 18 /* ns_r_badtime */ +#endif + + +/* classes */ +#ifndef C_IN +# define C_IN 1 /* ns_c_in */ +#endif +#ifndef C_CHAOS +# define C_CHAOS 3 /* ns_c_chaos */ +#endif +#ifndef C_HS +# define C_HS 4 /* ns_c_hs */ +#endif +#ifndef C_NONE +# define C_NONE 254 /* ns_c_none */ +#endif +#ifndef C_ANY +# define C_ANY 255 /* ns_c_any */ +#endif + + +/* types */ +#ifndef T_A +# define T_A 1 /* ns_t_a */ +#endif +#ifndef T_NS +# define T_NS 2 /* ns_t_ns */ +#endif +#ifndef T_MD +# define T_MD 3 /* ns_t_md */ +#endif +#ifndef T_MF +# define T_MF 4 /* ns_t_mf */ +#endif +#ifndef T_CNAME +# define T_CNAME 5 /* ns_t_cname */ +#endif +#ifndef T_SOA +# define T_SOA 6 /* ns_t_soa */ +#endif +#ifndef T_MB +# define T_MB 7 /* ns_t_mb */ +#endif +#ifndef T_MG +# define T_MG 8 /* ns_t_mg */ +#endif +#ifndef T_MR +# define T_MR 9 /* ns_t_mr */ +#endif +#ifndef T_NULL +# define T_NULL 10 /* ns_t_null */ +#endif +#ifndef T_WKS +# define T_WKS 11 /* ns_t_wks */ +#endif +#ifndef T_PTR +# define T_PTR 12 /* ns_t_ptr */ +#endif +#ifndef T_HINFO +# define T_HINFO 13 /* ns_t_hinfo */ +#endif +#ifndef T_MINFO +# define T_MINFO 14 /* ns_t_minfo */ +#endif +#ifndef T_MX +# define T_MX 15 /* ns_t_mx */ +#endif +#ifndef T_TXT +# define T_TXT 16 /* ns_t_txt */ +#endif +#ifndef T_RP +# define T_RP 17 /* ns_t_rp */ +#endif +#ifndef T_AFSDB +# define T_AFSDB 18 /* ns_t_afsdb */ +#endif +#ifndef T_X25 +# define T_X25 19 /* ns_t_x25 */ +#endif +#ifndef T_ISDN +# define T_ISDN 20 /* ns_t_isdn */ +#endif +#ifndef T_RT +# define T_RT 21 /* ns_t_rt */ +#endif +#ifndef T_NSAP +# define T_NSAP 22 /* ns_t_nsap */ +#endif +#ifndef T_NSAP_PTR +# define T_NSAP_PTR 23 /* ns_t_nsap_ptr */ +#endif +#ifndef T_SIG +# define T_SIG 24 /* ns_t_sig */ +#endif +#ifndef T_KEY +# define T_KEY 25 /* ns_t_key */ +#endif +#ifndef T_PX +# define T_PX 26 /* ns_t_px */ +#endif +#ifndef T_GPOS +# define T_GPOS 27 /* ns_t_gpos */ +#endif +#ifndef T_AAAA +# define T_AAAA 28 /* ns_t_aaaa */ +#endif +#ifndef T_LOC +# define T_LOC 29 /* ns_t_loc */ +#endif +#ifndef T_NXT +# define T_NXT 30 /* ns_t_nxt */ +#endif +#ifndef T_EID +# define T_EID 31 /* ns_t_eid */ +#endif +#ifndef T_NIMLOC +# define T_NIMLOC 32 /* ns_t_nimloc */ +#endif +#ifndef T_SRV +# define T_SRV 33 /* ns_t_srv */ +#endif +#ifndef T_ATMA +# define T_ATMA 34 /* ns_t_atma */ +#endif +#ifndef T_NAPTR +# define T_NAPTR 35 /* ns_t_naptr */ +#endif +#ifndef T_KX +# define T_KX 36 /* ns_t_kx */ +#endif +#ifndef T_CERT +# define T_CERT 37 /* ns_t_cert */ +#endif +#ifndef T_A6 +# define T_A6 38 /* ns_t_a6 */ +#endif +#ifndef T_DNAME +# define T_DNAME 39 /* ns_t_dname */ +#endif +#ifndef T_SINK +# define T_SINK 40 /* ns_t_sink */ +#endif +#ifndef T_OPT +# define T_OPT 41 /* ns_t_opt */ +#endif +#ifndef T_APL +# define T_APL 42 /* ns_t_apl */ +#endif +#ifndef T_DS +# define T_DS 43 /* ns_t_ds */ +#endif +#ifndef T_SSHFP +# define T_SSHFP 44 /* ns_t_sshfp */ +#endif +#ifndef T_RRSIG +# define T_RRSIG 46 /* ns_t_rrsig */ +#endif +#ifndef T_NSEC +# define T_NSEC 47 /* ns_t_nsec */ +#endif +#ifndef T_DNSKEY +# define T_DNSKEY 48 /* ns_t_dnskey */ +#endif +#ifndef T_TKEY +# define T_TKEY 249 /* ns_t_tkey */ +#endif +#ifndef T_TSIG +# define T_TSIG 250 /* ns_t_tsig */ +#endif +#ifndef T_IXFR +# define T_IXFR 251 /* ns_t_ixfr */ +#endif +#ifndef T_AXFR +# define T_AXFR 252 /* ns_t_axfr */ +#endif +#ifndef T_MAILB +# define T_MAILB 253 /* ns_t_mailb */ +#endif +#ifndef T_MAILA +# define T_MAILA 254 /* ns_t_maila */ +#endif +#ifndef T_ANY +# define T_ANY 255 /* ns_t_any */ +#endif +#ifndef T_URI +# define T_URI 256 /* ns_t_uri */ +#endif +#ifndef T_CAA +# define T_CAA 257 /* ns_t_caa */ +#endif +#ifndef T_MAX +# define T_MAX 65536 /* ns_t_max */ +#endif + + +#endif /* ARES_NAMESER_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/ares_rules.h nodejs-mozilla-12.22.12/deps/cares/include/ares_rules.h --- nodejs-mozilla-12.18.1/deps/cares/include/ares_rules.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/ares_rules.h 2022-04-05 07:16:59.000000000 +0000 @@ -2,7 +2,7 @@ #define __CARES_RULES_H -/* Copyright (C) 2009 by Daniel Stenberg et al +/* Copyright (C) 2009 - 2021 by Daniel Stenberg et al * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided @@ -40,7 +40,7 @@ * library is properly built and used. * * You can find further help on the c-ares development mailing list: - * http://cool.haxx.se/mailman/listinfo/c-ares/ + * http://lists.haxx.se/listinfo/c-ares/ * * NOTE 2 * ------ diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/ares_version.h nodejs-mozilla-12.22.12/deps/cares/include/ares_version.h --- nodejs-mozilla-12.18.1/deps/cares/include/ares_version.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/ares_version.h 2022-04-05 07:16:59.000000000 +0000 @@ -3,15 +3,15 @@ #define ARES__VERSION_H /* This is the global package copyright */ -#define ARES_COPYRIGHT "2004 - 2020 Daniel Stenberg, ." +#define ARES_COPYRIGHT "2004 - 2021 Daniel Stenberg, ." #define ARES_VERSION_MAJOR 1 -#define ARES_VERSION_MINOR 16 -#define ARES_VERSION_PATCH 0 +#define ARES_VERSION_MINOR 18 +#define ARES_VERSION_PATCH 1 #define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\ (ARES_VERSION_MINOR<<8)|\ (ARES_VERSION_PATCH)) -#define ARES_VERSION_STR "1.16.0" +#define ARES_VERSION_STR "1.18.1" #if (ARES_VERSION >= 0x010700) # define CARES_HAVE_ARES_LIBRARY_INIT 1 diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/CMakeLists.txt nodejs-mozilla-12.22.12/deps/cares/include/CMakeLists.txt --- nodejs-mozilla-12.18.1/deps/cares/include/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/CMakeLists.txt 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,8 @@ +# Write ares_build.h configuration file. This is an installed file. +CONFIGURE_FILE (ares_build.h.cmake ${PROJECT_BINARY_DIR}/ares_build.h) + +# Headers installation target +IF (CARES_INSTALL) + SET (CARES_HEADERS ares.h ares_version.h "${PROJECT_BINARY_DIR}/ares_build.h" ares_rules.h ares_dns.h ares_nameser.h) + INSTALL (FILES ${CARES_HEADERS} COMPONENT Devel DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +ENDIF () diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/Makefile.am nodejs-mozilla-12.22.12/deps/cares/include/Makefile.am --- nodejs-mozilla-12.18.1/deps/cares/include/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/Makefile.am 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,7 @@ +AUTOMAKE_OPTIONS = foreign nostdinc 1.9.6 +ACLOCAL_AMFLAGS = -I m4 --install + +# what headers to install on 'make install': +include_HEADERS = ares.h ares_version.h ares_build.h ares_rules.h ares_dns.h ares_nameser.h + +EXTRA_DIST = ares_build.h.cmake ares_build.h.in ares_build.h.dist CMakeLists.txt diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/Makefile.in nodejs-mozilla-12.22.12/deps/cares/include/Makefile.in --- nodejs-mozilla-12.18.1/deps/cares/include/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/Makefile.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,623 @@ +# Makefile.in generated by automake 1.16.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2021 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = include +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ + $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ + $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ + $(top_srcdir)/m4/ax_am_macros_static.m4 \ + $(top_srcdir)/m4/ax_check_gnu_make.m4 \ + $(top_srcdir)/m4/ax_code_coverage.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/m4/ax_file_escapes.m4 \ + $(top_srcdir)/m4/ax_require_defined.m4 \ + $(top_srcdir)/m4/cares-compilers.m4 \ + $(top_srcdir)/m4/cares-confopts.m4 \ + $(top_srcdir)/m4/cares-functions.m4 \ + $(top_srcdir)/m4/cares-reentrant.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/xc-am-iface.m4 \ + $(top_srcdir)/m4/xc-cc-check.m4 \ + $(top_srcdir)/m4/xc-lt-iface.m4 \ + $(top_srcdir)/m4/xc-translit.m4 \ + $(top_srcdir)/m4/xc-val-flgs.m4 \ + $(top_srcdir)/m4/zz40-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/lib/ares_config.h ares_build.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(includedir)" +HEADERS = $(include_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ + ares_build.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ares_build.h.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_SUBDIRS = @BUILD_SUBDIRS@ +CARES_CFLAG_EXTRAS = @CARES_CFLAG_EXTRAS@ +CARES_PRIVATE_LIBS = @CARES_PRIVATE_LIBS@ +CARES_RANDOM_FILE = @CARES_RANDOM_FILE@ +CARES_VERSION_INFO = @CARES_VERSION_INFO@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_CARES_SYMBOL_HIDING = @CFLAG_CARES_SYMBOL_HIDING@ +CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ +CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ +CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ +CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ +CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAG_CARES_STATICLIB = @CPPFLAG_CARES_STATICLIB@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ETAGS = @ETAGS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GENHTML = @GENHTML@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LCOV = @LCOV@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ifGNUmake = @ifGNUmake@ +ifnGNUmake = @ifnGNUmake@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign nostdinc 1.9.6 +ACLOCAL_AMFLAGS = -I m4 --install + +# what headers to install on 'make install': +include_HEADERS = ares.h ares_version.h ares_build.h ares_rules.h ares_dns.h ares_nameser.h +EXTRA_DIST = ares_build.h.cmake ares_build.h.in ares_build.h.dist CMakeLists.txt +all: ares_build.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +ares_build.h: stamp-h2 + @test -f $@ || rm -f stamp-h2 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h2 + +stamp-h2: $(srcdir)/ares_build.h.in $(top_builddir)/config.status + @rm -f stamp-h2 + cd $(top_builddir) && $(SHELL) ./config.status include/ares_build.h + +distclean-hdr: + -rm -f ares_build.h stamp-h2 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) ares_build.h +installdirs: + for dir in "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS + +.MAKE: all install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-includeHEADERS install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-includeHEADERS + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru nodejs-mozilla-12.18.1/deps/cares/include/nameser.h nodejs-mozilla-12.22.12/deps/cares/include/nameser.h --- nodejs-mozilla-12.18.1/deps/cares/include/nameser.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/include/nameser.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,211 +0,0 @@ - -#ifndef ARES_NAMESER_H -#define ARES_NAMESER_H - -/* header file provided by liren@vivisimo.com */ - -#ifndef HAVE_ARPA_NAMESER_H - -#define NS_PACKETSZ 512 /* maximum packet size */ -#define NS_MAXDNAME 256 /* maximum domain name */ -#define NS_MAXCDNAME 255 /* maximum compressed domain name */ -#define NS_MAXLABEL 63 -#define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */ -#define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */ -#define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */ -#define NS_INT16SZ 2 -#define NS_INADDRSZ 4 -#define NS_IN6ADDRSZ 16 -#define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */ -#define NS_DEFAULTPORT 53 /* For both TCP and UDP. */ - -typedef enum __ns_class { - ns_c_invalid = 0, /* Cookie. */ - ns_c_in = 1, /* Internet. */ - ns_c_2 = 2, /* unallocated/unsupported. */ - ns_c_chaos = 3, /* MIT Chaos-net. */ - ns_c_hs = 4, /* MIT Hesiod. */ - /* Query class values which do not appear in resource records */ - ns_c_none = 254, /* for prereq. sections in update requests */ - ns_c_any = 255, /* Wildcard match. */ - ns_c_max = 65536 -} ns_class; - -typedef enum __ns_type { - ns_t_invalid = 0, /* Cookie. */ - ns_t_a = 1, /* Host address. */ - ns_t_ns = 2, /* Authoritative server. */ - ns_t_md = 3, /* Mail destination. */ - ns_t_mf = 4, /* Mail forwarder. */ - ns_t_cname = 5, /* Canonical name. */ - ns_t_soa = 6, /* Start of authority zone. */ - ns_t_mb = 7, /* Mailbox domain name. */ - ns_t_mg = 8, /* Mail group member. */ - ns_t_mr = 9, /* Mail rename name. */ - ns_t_null = 10, /* Null resource record. */ - ns_t_wks = 11, /* Well known service. */ - ns_t_ptr = 12, /* Domain name pointer. */ - ns_t_hinfo = 13, /* Host information. */ - ns_t_minfo = 14, /* Mailbox information. */ - ns_t_mx = 15, /* Mail routing information. */ - ns_t_txt = 16, /* Text strings. */ - ns_t_rp = 17, /* Responsible person. */ - ns_t_afsdb = 18, /* AFS cell database. */ - ns_t_x25 = 19, /* X_25 calling address. */ - ns_t_isdn = 20, /* ISDN calling address. */ - ns_t_rt = 21, /* Router. */ - ns_t_nsap = 22, /* NSAP address. */ - ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */ - ns_t_sig = 24, /* Security signature. */ - ns_t_key = 25, /* Security key. */ - ns_t_px = 26, /* X.400 mail mapping. */ - ns_t_gpos = 27, /* Geographical position (withdrawn). */ - ns_t_aaaa = 28, /* Ip6 Address. */ - ns_t_loc = 29, /* Location Information. */ - ns_t_nxt = 30, /* Next domain (security). */ - ns_t_eid = 31, /* Endpoint identifier. */ - ns_t_nimloc = 32, /* Nimrod Locator. */ - ns_t_srv = 33, /* Server Selection. */ - ns_t_atma = 34, /* ATM Address */ - ns_t_naptr = 35, /* Naming Authority PoinTeR */ - ns_t_kx = 36, /* Key Exchange */ - ns_t_cert = 37, /* Certification record */ - ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */ - ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */ - ns_t_sink = 40, /* Kitchen sink (experimentatl) */ - ns_t_opt = 41, /* EDNS0 option (meta-RR) */ - ns_t_apl = 42, /* Address prefix list (RFC3123) */ - ns_t_ds = 43, /* Delegation Signer (RFC4034) */ - ns_t_sshfp = 44, /* SSH Key Fingerprint (RFC4255) */ - ns_t_rrsig = 46, /* Resource Record Signature (RFC4034) */ - ns_t_nsec = 47, /* Next Secure (RFC4034) */ - ns_t_dnskey = 48, /* DNS Public Key (RFC4034) */ - ns_t_tkey = 249, /* Transaction key */ - ns_t_tsig = 250, /* Transaction signature. */ - ns_t_ixfr = 251, /* Incremental zone transfer. */ - ns_t_axfr = 252, /* Transfer zone of authority. */ - ns_t_mailb = 253, /* Transfer mailbox records. */ - ns_t_maila = 254, /* Transfer mail agent records. */ - ns_t_any = 255, /* Wildcard match. */ - ns_t_zxfr = 256, /* BIND-specific, nonstandard. */ - ns_t_max = 65536 -} ns_type; - -typedef enum __ns_opcode { - ns_o_query = 0, /* Standard query. */ - ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */ - ns_o_status = 2, /* Name server status query (unsupported). */ - /* Opcode 3 is undefined/reserved. */ - ns_o_notify = 4, /* Zone change notification. */ - ns_o_update = 5, /* Zone update message. */ - ns_o_max = 6 -} ns_opcode; - -typedef enum __ns_rcode { - ns_r_noerror = 0, /* No error occurred. */ - ns_r_formerr = 1, /* Format error. */ - ns_r_servfail = 2, /* Server failure. */ - ns_r_nxdomain = 3, /* Name error. */ - ns_r_notimpl = 4, /* Unimplemented. */ - ns_r_refused = 5, /* Operation refused. */ - /* these are for BIND_UPDATE */ - ns_r_yxdomain = 6, /* Name exists */ - ns_r_yxrrset = 7, /* RRset exists */ - ns_r_nxrrset = 8, /* RRset does not exist */ - ns_r_notauth = 9, /* Not authoritative for zone */ - ns_r_notzone = 10, /* Zone of record different from zone section */ - ns_r_max = 11, - /* The following are TSIG extended errors */ - ns_r_badsig = 16, - ns_r_badkey = 17, - ns_r_badtime = 18 -} ns_rcode; - -#endif /* HAVE_ARPA_NAMESER_H */ - -#ifndef HAVE_ARPA_NAMESER_COMPAT_H - -#define PACKETSZ NS_PACKETSZ -#define MAXDNAME NS_MAXDNAME -#define MAXCDNAME NS_MAXCDNAME -#define MAXLABEL NS_MAXLABEL -#define HFIXEDSZ NS_HFIXEDSZ -#define QFIXEDSZ NS_QFIXEDSZ -#define RRFIXEDSZ NS_RRFIXEDSZ -#define INDIR_MASK NS_CMPRSFLGS -#define NAMESERVER_PORT NS_DEFAULTPORT - -#define QUERY ns_o_query - -#define SERVFAIL ns_r_servfail -#define NOTIMP ns_r_notimpl -#define REFUSED ns_r_refused -#undef NOERROR /* it seems this is already defined in winerror.h */ -#define NOERROR ns_r_noerror -#define FORMERR ns_r_formerr -#define NXDOMAIN ns_r_nxdomain - -#define C_IN ns_c_in -#define C_CHAOS ns_c_chaos -#define C_HS ns_c_hs -#define C_NONE ns_c_none -#define C_ANY ns_c_any - -#define T_A ns_t_a -#define T_NS ns_t_ns -#define T_MD ns_t_md -#define T_MF ns_t_mf -#define T_CNAME ns_t_cname -#define T_SOA ns_t_soa -#define T_MB ns_t_mb -#define T_MG ns_t_mg -#define T_MR ns_t_mr -#define T_NULL ns_t_null -#define T_WKS ns_t_wks -#define T_PTR ns_t_ptr -#define T_HINFO ns_t_hinfo -#define T_MINFO ns_t_minfo -#define T_MX ns_t_mx -#define T_TXT ns_t_txt -#define T_RP ns_t_rp -#define T_AFSDB ns_t_afsdb -#define T_X25 ns_t_x25 -#define T_ISDN ns_t_isdn -#define T_RT ns_t_rt -#define T_NSAP ns_t_nsap -#define T_NSAP_PTR ns_t_nsap_ptr -#define T_SIG ns_t_sig -#define T_KEY ns_t_key -#define T_PX ns_t_px -#define T_GPOS ns_t_gpos -#define T_AAAA ns_t_aaaa -#define T_LOC ns_t_loc -#define T_NXT ns_t_nxt -#define T_EID ns_t_eid -#define T_NIMLOC ns_t_nimloc -#define T_SRV ns_t_srv -#define T_ATMA ns_t_atma -#define T_NAPTR ns_t_naptr -#define T_KX ns_t_kx -#define T_CERT ns_t_cert -#define T_A6 ns_t_a6 -#define T_DNAME ns_t_dname -#define T_SINK ns_t_sink -#define T_OPT ns_t_opt -#define T_APL ns_t_apl -#define T_DS ns_t_ds -#define T_SSHFP ns_t_sshfp -#define T_RRSIG ns_t_rrsig -#define T_NSEC ns_t_nsec -#define T_DNSKEY ns_t_dnskey -#define T_TKEY ns_t_tkey -#define T_TSIG ns_t_tsig -#define T_IXFR ns_t_ixfr -#define T_AXFR ns_t_axfr -#define T_MAILB ns_t_mailb -#define T_MAILA ns_t_maila -#define T_ANY ns_t_any - -#endif /* HAVE_ARPA_NAMESER_COMPAT_H */ - -#endif /* ARES_NAMESER_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/INSTALL.md nodejs-mozilla-12.22.12/deps/cares/INSTALL.md --- nodejs-mozilla-12.18.1/deps/cares/INSTALL.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/INSTALL.md 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,409 @@ +** This file is adapted from libcurl and not yet fully rewritten for c-ares! ** + +``` + ___ __ _ _ __ ___ ___ + / __| ___ / _` | '__/ _ \/ __| + | (_ |___| (_| | | | __/\__ \ + \___| \__,_|_| \___||___/ + + How To Compile +``` + +Installing Binary Packages +========================== + +Lots of people download binary distributions of c-ares. This document +does not describe how to install c-ares using such a binary package. +This document describes how to compile, build and install c-ares from +source code. + +Building from Git +================= + +If you get your code off a Git repository rather than an official +release tarball, see the [GIT-INFO](GIT-INFO) file in the root directory +for specific instructions on how to proceed. + +In particular, if not using CMake you will need to run `./buildconf` (Unix) or +`buildconf.bat` (Windows) to generate build files, and for the former +you will need a local installation of Autotools. If using CMake the steps are +the same for both Git and official release tarballs. + +AutoTools Build +=============== + +### General Information, works on most Unix Platforms (Linux, FreeBSD, etc) + +A normal Unix installation is made in three or four steps (after you've +unpacked the source archive): + + ./configure + make + make install + +You probably need to be root when doing the last command. + +If you have checked out the sources from the git repository, read the +[GIT-INFO](GIT_INFO) on how to proceed. + +Get a full listing of all available configure options by invoking it like: + + ./configure --help + +If you want to install c-ares in a different file hierarchy than /usr/local, +you need to specify that already when running configure: + + ./configure --prefix=/path/to/c-ares/tree + +If you happen to have write permission in that directory, you can do `make +install` without being root. An example of this would be to make a local +install in your own home directory: + + ./configure --prefix=$HOME + make + make install + +### More Options + +To force configure to use the standard cc compiler if both cc and gcc are +present, run configure like + + CC=cc ./configure + # or + env CC=cc ./configure + +To force a static library compile, disable the shared library creation +by running configure like: + + ./configure --disable-shared + +If you're a c-ares developer and use gcc, you might want to enable more +debug options with the `--enable-debug` option. + +### Special Cases + +Some versions of uClibc require configuring with `CPPFLAGS=-D_GNU_SOURCE=1` +to get correct large file support. + +The Open Watcom C compiler on Linux requires configuring with the variables: + + ./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \ + RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra + + +### CROSS COMPILE + +(This section was graciously brought to us by Jim Duey, with additions by +Dan Fandrich) + +Download and unpack the c-ares package. + +`cd` to the new directory. (e.g. `cd c-ares-1.7.6`) + +Set environment variables to point to the cross-compile toolchain and call +configure with any options you need. Be sure and specify the `--host` and +`--build` parameters at configuration time. The following script is an +example of cross-compiling for the IBM 405GP PowerPC processor using the +toolchain from MonteVista for Hardhat Linux. + +```sh +#! /bin/sh + +export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin +export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include" +export AR=ppc_405-ar +export AS=ppc_405-as +export LD=ppc_405-ld +export RANLIB=ppc_405-ranlib +export CC=ppc_405-gcc +export NM=ppc_405-nm + +./configure --target=powerpc-hardhat-linux \ + --host=powerpc-hardhat-linux \ + --build=i586-pc-linux-gnu \ + --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \ + --exec-prefix=/usr/local +``` + +You may also need to provide a parameter like `--with-random=/dev/urandom` +to configure as it cannot detect the presence of a random number +generating device for a target system. The `--prefix` parameter +specifies where c-ares will be installed. If `configure` completes +successfully, do `make` and `make install` as usual. + +In some cases, you may be able to simplify the above commands to as +little as: + + ./configure --host=ARCH-OS + + +### Cygwin (Windows) + +Almost identical to the unix installation. Run the configure script in the +c-ares root with `sh configure`. Make sure you have the sh executable in +`/bin/` or you'll see the configure fail toward the end. + +Run `make` + + +### QNX + +(This section was graciously brought to us by David Bentham) + +As QNX is targeted for resource constrained environments, the QNX headers +set conservative limits. This includes the `FD_SETSIZE` macro, set by default +to 32. Socket descriptors returned within the c-ares library may exceed this, +resulting in memory faults/SIGSEGV crashes when passed into `select(..)` +calls using `fd_set` macros. + +A good all-round solution to this is to override the default when building +c-ares, by overriding `CFLAGS` during configure, example: + + # configure CFLAGS='-DFD_SETSIZE=64 -g -O2' + + +### RISC OS + +The library can be cross-compiled using gccsdk as follows: + + CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \ + --host=arm-riscos-aof --without-random --disable-shared + make + +where `riscos-gcc` and `riscos-ar` are links to the gccsdk tools. +You can then link your program with `c-ares/lib/.libs/libcares.a`. + + +### Android + +Method using a configure cross-compile (tested with Android NDK r7b): + + - prepare the toolchain of the Android NDK for standalone use; this can + be done by invoking the script: + + ./tools/make-standalone-toolchain.sh + + which creates a usual cross-compile toolchain. Lets assume that you put + this toolchain below `/opt` then invoke configure with something + like: + + ``` + export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH + ./configure --host=arm-linux-androideabi [more configure options] + make + ``` + - if you want to compile directly from our GIT repo you might run into + this issue with older automake stuff: + + ``` + checking host system type... + Invalid configuration `arm-linux-androideabi': + system `androideabi' not recognized + configure: error: /bin/sh ./config.sub arm-linux-androideabi failed + ``` + this issue can be fixed with using more recent versions of `config.sub` + and `config.guess` which can be obtained here: + http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree + you need to replace your system-own versions which usually can be + found in your automake folder: + `find /usr -name config.sub` + + +CMake builds +============ + +Current releases of c-ares introduce a CMake v3+ build system that has been +tested on most platforms including Windows, Linux, FreeBSD, MacOS, AIX and +Solaris. + +In the most basic form, building with CMake might look like: + +```sh +cd /path/to/cmake/source +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/cares .. +make +sudo make install +``` + +Options +------- + +Options to CMake are passed on the command line using "-D${OPTION}=${VALUE}". +The values defined are all boolean and take values like On, Off, True, False. + +* CARES_STATIC - Build the static library (off by default) +* CARES_SHARED - Build the shared library (on by default) +* CARES_INSTALL - Hook in installation, useful to disable if chain building +* CARES_STATIC_PIC - Build the static library as position-independent (off by + default) + + +Ninja +----- + +Ninja is the next-generation build system meant for generators like CMake that +heavily parallize builds. Its use is very similar to the normal build: + +```sh +cd /path/to/cmake/source +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/cares -G "Ninja" .. +ninja +sudo ninja install +``` + +Windows MSVC Command Line +------------------------- + +``` +cd \path\to\cmake\source +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=C:\cares -G "NMake Makefiles" .. +nmake +nmake install +``` + +Windows MinGW-w64 Command Line via MSYS +--------------------------------------- +``` +cd \path\to\cmake\source +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=C:\cares -G "MSYS Makefiles" .. +make +make install +``` + + +Platform-specific build systems +=============================== + +Win32 +----- + +### Building Windows DLLs and C run-time (CRT) linkage issues + +As a general rule, building a DLL with static CRT linkage is highly +discouraged, and intermixing CRTs in the same app is something to +avoid at any cost. + +Reading and comprehension of Microsoft Knowledge Base articles +KB94248 and KB140584 is a must for any Windows developer. Especially +important is full understanding if you are not going to follow the +advice given above. + + - [KB94248](http://support.microsoft.com/kb/94248/en-us) - How To Use the C Run-Time + + - [KB140584](http://support.microsoft.com/kb/140584/en-us) - How to link with the correct C Run-Time (CRT) library + + - [KB190799](http://msdn.microsoft.com/en-us/library/ms235460) - Potential Errors Passing CRT Objects Across DLL Boundaries + +If your app is misbehaving in some strange way, or it is suffering +from memory corruption, before asking for further help, please try +first to rebuild every single library your app uses as well as your +app using the debug multithreaded dynamic C runtime. + + +### MingW32 + +Make sure that MinGW32's bin dir is in the search path, for example: + + set PATH=c:\mingw32\bin;%PATH% + +then run 'make -f Makefile.m32' in the root dir. + + +### MSVC 6 caveats + +If you use MSVC 6 it is required that you use the February 2003 edition PSDK: +http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm + + +### MSVC from command line + +Run the `vcvars32.bat` file to get a proper environment. The +`vcvars32.bat` file is part of the Microsoft development environment and +you may find it in `C:\Program Files\Microsoft Visual Studio\vc98\bin` +provided that you installed Visual C/C++ 6 in the default directory. + +Further details in [README.msvc](README.msvc) + + +### Important static c-ares usage note + +When building an application that uses the static c-ares library, you must +add `-DCARES_STATICLIB` to your `CFLAGS`. Otherwise the linker will look for +dynamic import symbols. + + +IBM OS/2 +-------- + +Building under OS/2 is not much different from building under unix. +You need: + + - emx 0.9d + - GNU make + - GNU patch + - ksh + - GNU bison + - GNU file utilities + - GNU sed + - autoconf 2.13 + +If during the linking you get an error about `_errno` being an undefined +symbol referenced from the text segment, you need to add `-D__ST_MT_ERRNO__` +in your definitions. + +If you're getting huge binaries, probably your makefiles have the `-g` in +`CFLAGS`. + + +NetWare +------- + +To compile `libcares.a` / `libcares.lib` you need: + + - either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later. + - gnu make and awk running on the platform you compile on; + native Win32 versions can be downloaded from: + http://www.gknw.net/development/prgtools/ + - recent Novell LibC SDK available from: + http://developer.novell.com/ndk/libc.htm + - or recent Novell CLib SDK available from: + http://developer.novell.com/ndk/clib.htm + +Set a search path to your compiler, linker and tools; on Linux make +sure that the var `OSTYPE` contains the string 'linux'; set the var +`NDKBASE` to point to the base of your Novell NDK; and then type +`make -f Makefile.netware` from the top source directory; + + +PORTS +===== + +This is a probably incomplete list of known hardware and operating systems +that c-ares has been compiled for. If you know a system c-ares compiles and +runs on, that isn't listed, please let us know! + + - Alpha Tru64 v5.0 5.1 + - ARM Android 1.5, 2.1, 2.3 + - MIPS IRIX 6.2, 6.5 + - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2 + - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6 + - i386 Novell NetWare + - i386 Windows 95, 98, ME, NT, 2000, XP, 2003 + - x86_64 Linux + + +Useful URLs +=========== + + - c-ares: https://c-ares.org/ + - MingW: http://www.mingw.org/ + - MinGW-w64: http://mingw-w64.sourceforge.net/ + - OpenWatcom: http://www.openwatcom.org/ diff -Nru nodejs-mozilla-12.18.1/deps/cares/install-sh nodejs-mozilla-12.22.12/deps/cares/install-sh --- nodejs-mozilla-12.18.1/deps/cares/install-sh 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/install-sh 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,541 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2020-11-14.01; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +# Create dirs (including intermediate dirs) using mode 755. +# This is like GNU 'install' as of coreutils 8.32 (2020). +mkdir_umask=22 + +backupsuffix= +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -p pass -p to $cpprog. + -s $stripprog installed files. + -S SUFFIX attempt to back up existing files, with suffix SUFFIX. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG + +By default, rm is invoked with -f; when overridden with RMPROG, +it's up to you to specify -f if you want it. + +If -S is not specified, no backups are attempted. + +Email bug reports to bug-automake@gnu.org. +Automake home page: https://www.gnu.org/software/automake/ +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -p) cpprog="$cpprog -p";; + + -s) stripcmd=$stripprog;; + + -S) backupsuffix="$2" + shift;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + # Don't chown directories that already exist. + if test $dstdir_status = 0; then + chowncmd="" + fi + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + # The $RANDOM variable is not portable (e.g., dash). Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap ' + ret=$? + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null + exit $ret + ' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p'. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && + { test -z "$stripcmd" || { + # Create $dsttmp read-write so that cp doesn't create it read-only, + # which would cause strip to fail. + if test -z "$doit"; then + : >"$dsttmp" # No need to fork-exec 'touch'. + else + $doit touch "$dsttmp" + fi + } + } && + $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # If $backupsuffix is set, and the file being installed + # already exists, attempt a backup. Don't worry if it fails, + # e.g., if mv doesn't support -f. + if test -n "$backupsuffix" && test -f "$dst"; then + $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null + fi + + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff -Nru nodejs-mozilla-12.18.1/deps/cares/libcares.pc.cmake nodejs-mozilla-12.22.12/deps/cares/libcares.pc.cmake --- nodejs-mozilla-12.18.1/deps/cares/libcares.pc.cmake 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/libcares.pc.cmake 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,20 @@ +#*************************************************************************** +# Project ___ __ _ _ __ ___ ___ +# / __|____ / _` | '__/ _ \/ __| +# | (_|_____| (_| | | | __/\__ \ +# \___| \__,_|_| \___||___/ +# +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=${prefix}/@CMAKE_INSTALL_BINDIR@ +libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: c-ares +URL: https://c-ares.org/ +Description: asynchronous DNS lookup library +Version: @CARES_VERSION@ +Requires: +Requires.private: +Cflags: -I${includedir} @CPPFLAG_CARES_STATICLIB@ +Libs: -L${libdir} -lcares +Libs.private: @CARES_PRIVATE_LIBS@ diff -Nru nodejs-mozilla-12.18.1/deps/cares/libcares.pc.in nodejs-mozilla-12.22.12/deps/cares/libcares.pc.in --- nodejs-mozilla-12.18.1/deps/cares/libcares.pc.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/libcares.pc.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,20 @@ +#*************************************************************************** +# Project ___ __ _ _ __ ___ ___ +# / __|____ / _` | '__/ _ \/ __| +# | (_|_____| (_| | | | __/\__ \ +# \___| \__,_|_| \___||___/ +# +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: c-ares +URL: http://c-ares.org/ +Description: asynchronous DNS lookup library +Version: @VERSION@ +Requires: +Requires.private: +Cflags: -I${includedir} @CPPFLAG_CARES_STATICLIB@ +Libs: -L${libdir} -lcares +Libs.private: @CARES_PRIVATE_LIBS@ diff -Nru nodejs-mozilla-12.18.1/deps/cares/ltmain.sh nodejs-mozilla-12.22.12/deps/cares/ltmain.sh --- nodejs-mozilla-12.18.1/deps/cares/ltmain.sh 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/ltmain.sh 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,11251 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.6 Debian-2.4.6-15" +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2015-10-07.11; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + _G_rc_run_hooks=false + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + if eval $_G_hook '"$@"'; then + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + _G_rc_run_hooks=: + fi + done + + $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, you may remove/edit +# any options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. In this case you also must return $EXIT_SUCCESS to let the +# hook's caller know that it should pay attention to +# '_result'. Returning $EXIT_FAILURE signalizes that +# arguments are left untouched by the hook and therefore caller will ignore the +# result variable. +# +# Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# # No change in '$@' (ignored completely by this hook). There is +# # no need to do the equivalent (but slower) action: +# # func_quote_for_eval ${1+"$@"} +# # my_options_prep_result=$func_quote_for_eval_result +# false +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# args_changed=false +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: +# args_changed=: +# ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# args_changed=: +# ;; +# *) # Make sure the first unrecognised option "$_G_opt" +# # is added back to "$@", we could need that later +# # if $args_changed is true. +# set dummy "$_G_opt" ${1+"$@"}; shift; break ;; +# esac +# done +# +# if $args_changed; then +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# fi +# +# $args_changed +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# false +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll also need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options_finish [ARG]... +# ---------------------------- +# Finishing the option parse loop (call 'func_options' hooks ATM). +func_options_finish () +{ + $debug_cmd + + _G_func_options_finish_exit=false + if func_run_hooks func_options ${1+"$@"}; then + func_options_finish_result=$func_run_hooks_result + _G_func_options_finish_exit=: + fi + + $_G_func_options_finish_exit +} + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + _G_rc_options=false + + for my_func in options_prep parse_options validate_options options_finish + do + if eval func_$my_func '${1+"$@"}'; then + eval _G_res_var='$'"func_${my_func}_result" + eval set dummy "$_G_res_var" ; shift + _G_rc_options=: + fi + done + + # Save modified positional parameters for caller. As a top-level + # options-parser function we always need to set the 'func_options_result' + # variable (regardless the $_G_rc_options value). + if $_G_rc_options; then + func_options_result=$_G_res_var + else + func_quote_for_eval ${1+"$@"} + func_options_result=$func_quote_for_eval_result + fi + + $_G_rc_options +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propagate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned). +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + _G_rc_options_prep=false + if func_run_hooks func_options_prep ${1+"$@"}; then + _G_rc_options_prep=: + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result + fi + + $_G_rc_options_prep +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + _G_rc_parse_options=false + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + if func_run_hooks func_parse_options ${1+"$@"}; then + eval set dummy "$func_run_hooks_result"; shift + _G_rc_parse_options=: + fi + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_match_parse_options=: + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + if test $# = 0 && func_missing_arg $_G_opt; then + _G_rc_parse_options=: + break + fi + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) _G_rc_parse_options=: ; break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift + _G_match_parse_options=false + break + ;; + esac + + $_G_match_parse_options && _G_rc_parse_options=: + done + + + if $_G_rc_parse_options; then + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result + fi + + $_G_rc_parse_options +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + _G_rc_validate_options=false + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + if func_run_hooks func_validate_options ${1+"$@"}; then + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result + _G_rc_validate_options=: + fi + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + $_G_rc_validate_options +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-15 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + _G_rc_lt_options_prep=: + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + *) + _G_rc_lt_options_prep=false + ;; + esac + + if $_G_rc_lt_options_prep; then + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result + fi + + $_G_rc_lt_options_prep +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + _G_rc_lt_parse_options=false + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_match_lt_parse_options=: + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"} ; shift + _G_match_lt_parse_options=false + break + ;; + esac + $_G_match_lt_parse_options && _G_rc_lt_parse_options=: + done + + if $_G_rc_lt_parse_options; then + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result + fi + + $_G_rc_lt_parse_options +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + # -fuse-ld=* Linker select flags for GCC + # -static-* direct GCC to link specific libraries statically + # -fcilkplus Cilk Plus language extension features for C/C++ + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_ac_append_to_file.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_ac_append_to_file.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_ac_append_to_file.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_ac_append_to_file.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,32 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_ac_append_to_file.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_AC_APPEND_TO_FILE([FILE],[DATA]) +# +# DESCRIPTION +# +# Appends the specified data to the specified Autoconf is run. If you want +# to append to a file when configure is run use AX_APPEND_TO_FILE instead. +# +# LICENSE +# +# Copyright (c) 2009 Allan Caffee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 10 + +AC_DEFUN([AX_AC_APPEND_TO_FILE],[ +AC_REQUIRE([AX_FILE_ESCAPES]) +m4_esyscmd( +AX_FILE_ESCAPES +[ +printf "%s" "$2" >> "$1" +]) +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_ac_print_to_file.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_ac_print_to_file.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_ac_print_to_file.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_ac_print_to_file.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,32 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_ac_print_to_file.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_AC_PRINT_TO_FILE([FILE],[DATA]) +# +# DESCRIPTION +# +# Writes the specified data to the specified file when Autoconf is run. If +# you want to print to a file when configure is run use AX_PRINT_TO_FILE +# instead. +# +# LICENSE +# +# Copyright (c) 2009 Allan Caffee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 10 + +AC_DEFUN([AX_AC_PRINT_TO_FILE],[ +m4_esyscmd( +AC_REQUIRE([AX_FILE_ESCAPES]) +[ +printf "%s" "$2" > "$1" +]) +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_add_am_macro_static.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_add_am_macro_static.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_add_am_macro_static.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_add_am_macro_static.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,28 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_add_am_macro_static.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_ADD_AM_MACRO_STATIC([RULE]) +# +# DESCRIPTION +# +# Adds the specified rule to $AMINCLUDE. +# +# LICENSE +# +# Copyright (c) 2009 Tom Howard +# Copyright (c) 2009 Allan Caffee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 8 + +AC_DEFUN([AX_ADD_AM_MACRO_STATIC],[ + AC_REQUIRE([AX_AM_MACROS_STATIC]) + AX_AC_APPEND_TO_FILE(AMINCLUDE_STATIC,[$1]) +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_am_macros_static.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_am_macros_static.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_am_macros_static.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_am_macros_static.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,38 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_am_macros_static.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_AM_MACROS_STATIC +# +# DESCRIPTION +# +# Adds support for macros that create Automake rules. You must manually +# add the following line +# +# include $(top_srcdir)/aminclude_static.am +# +# to your Makefile.am files. +# +# LICENSE +# +# Copyright (c) 2009 Tom Howard +# Copyright (c) 2009 Allan Caffee +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 11 + +AC_DEFUN([AMINCLUDE_STATIC],[aminclude_static.am]) + +AC_DEFUN([AX_AM_MACROS_STATIC], +[ +AX_AC_PRINT_TO_FILE(AMINCLUDE_STATIC,[ +# ]AMINCLUDE_STATIC[ generated automatically by Autoconf +# from AX_AM_MACROS_STATIC on ]m4_esyscmd([LC_ALL=C date])[ +]) +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_check_gnu_make.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_check_gnu_make.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_check_gnu_make.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_check_gnu_make.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,95 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_gnu_make.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_GNU_MAKE([run-if-true],[run-if-false]) +# +# DESCRIPTION +# +# This macro searches for a GNU version of make. If a match is found: +# +# * The makefile variable `ifGNUmake' is set to the empty string, otherwise +# it is set to "#". This is useful for including a special features in a +# Makefile, which cannot be handled by other versions of make. +# * The makefile variable `ifnGNUmake' is set to #, otherwise +# it is set to the empty string. This is useful for including a special +# features in a Makefile, which can be handled +# by other versions of make or to specify else like clause. +# * The variable `_cv_gnu_make_command` is set to the command to invoke +# GNU make if it exists, the empty string otherwise. +# * The variable `ax_cv_gnu_make_command` is set to the command to invoke +# GNU make by copying `_cv_gnu_make_command`, otherwise it is unset. +# * If GNU Make is found, its version is extracted from the output of +# `make --version` as the last field of a record of space-separated +# columns and saved into the variable `ax_check_gnu_make_version`. +# * Additionally if GNU Make is found, run shell code run-if-true +# else run shell code run-if-false. +# +# Here is an example of its use: +# +# Makefile.in might contain: +# +# # A failsafe way of putting a dependency rule into a makefile +# $(DEPEND): +# $(CC) -MM $(srcdir)/*.c > $(DEPEND) +# +# @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND))) +# @ifGNUmake@ include $(DEPEND) +# @ifGNUmake@ else +# fallback code +# @ifGNUmake@ endif +# +# Then configure.in would normally contain: +# +# AX_CHECK_GNU_MAKE() +# AC_OUTPUT(Makefile) +# +# Then perhaps to cause gnu make to override any other make, we could do +# something like this (note that GNU make always looks for GNUmakefile +# first): +# +# if ! test x$_cv_gnu_make_command = x ; then +# mv Makefile GNUmakefile +# echo .DEFAULT: > Makefile ; +# echo \ $_cv_gnu_make_command \$@ >> Makefile; +# fi +# +# Then, if any (well almost any) other make is called, and GNU make also +# exists, then the other make wraps the GNU make. +# +# LICENSE +# +# Copyright (c) 2008 John Darrington +# Copyright (c) 2015 Enrico M. Crisostomo +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 12 + +AC_DEFUN([AX_CHECK_GNU_MAKE],dnl + [AC_PROG_AWK + AC_CACHE_CHECK([for GNU make],[_cv_gnu_make_command],[dnl + _cv_gnu_make_command="" ; +dnl Search all the common names for GNU make + for a in "$MAKE" make gmake gnumake ; do + if test -z "$a" ; then continue ; fi ; + if "$a" --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then + _cv_gnu_make_command=$a ; + AX_CHECK_GNU_MAKE_HEADLINE=$("$a" --version 2> /dev/null | grep "GNU Make") + ax_check_gnu_make_version=$(echo ${AX_CHECK_GNU_MAKE_HEADLINE} | ${AWK} -F " " '{ print $(NF); }') + break ; + fi + done ;]) +dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' otherwise + AS_VAR_IF([_cv_gnu_make_command], [""], [AS_VAR_SET([ifGNUmake], ["#"])], [AS_VAR_SET([ifGNUmake], [""])]) + AS_VAR_IF([_cv_gnu_make_command], [""], [AS_VAR_SET([ifnGNUmake], [""])], [AS_VAR_SET([ifnGNUmake], ["#"])]) + AS_VAR_IF([_cv_gnu_make_command], [""], [AS_UNSET(ax_cv_gnu_make_command)], [AS_VAR_SET([ax_cv_gnu_make_command], [${_cv_gnu_make_command}])]) + AS_VAR_IF([_cv_gnu_make_command], [""],[$2],[$1]) + AC_SUBST([ifGNUmake]) + AC_SUBST([ifnGNUmake]) +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_check_user_namespace.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_check_user_namespace.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_check_user_namespace.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_check_user_namespace.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,54 @@ +# -*- Autoconf -*- + +# SYNOPSIS +# +# AX_CHECK_USER_NAMESPACE +# +# DESCRIPTION +# +# This macro checks whether the local system supports Linux user namespaces. +# If so, it calls AC_DEFINE(HAVE_USER_NAMESPACE). + +AC_DEFUN([AX_CHECK_USER_NAMESPACE],[dnl + AC_CACHE_CHECK([whether user namespaces are supported], + ax_cv_user_namespace,[ + AC_LANG_PUSH([C]) + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include + +int userfn(void *d) { + usleep(100000); /* synchronize by sleep */ + return (getuid() != 0); +} +char userst[1024*1024]; +int main() { + char buffer[1024]; + int rc, status, fd; + pid_t child = clone(userfn, userst + 1024*1024, CLONE_NEWUSER|SIGCHLD, 0); + if (child < 0) return 1; + + sprintf(buffer, "/proc/%d/uid_map", child); + fd = open(buffer, O_CREAT|O_WRONLY|O_TRUNC, 0755); + sprintf(buffer, "0 %d 1\n", getuid()); + write(fd, buffer, strlen(buffer)); + close(fd); + + rc = waitpid(child, &status, 0); + if (rc <= 0) return 1; + if (!WIFEXITED(status)) return 1; + return WEXITSTATUS(status); +} + ]])],[ax_cv_user_namespace=yes],[ax_cv_user_namespace=no],[ax_cv_user_namespace=no]) + AC_LANG_POP([C]) + ]) + if test "$ax_cv_user_namespace" = yes; then + AC_DEFINE([HAVE_USER_NAMESPACE],[1],[Whether user namespaces are available]) + fi +]) # AX_CHECK_USER_NAMESPACE diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_check_uts_namespace.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_check_uts_namespace.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_check_uts_namespace.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_check_uts_namespace.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,76 @@ +# -*- Autoconf -*- + +# SYNOPSIS +# +# AX_CHECK_UTS_NAMESPACE +# +# DESCRIPTION +# +# This macro checks whether the local system supports Linux UTS namespaces. +# Also requires user namespaces to be available, so that non-root users +# can enter the namespace. +# If so, it calls AC_DEFINE(HAVE_UTS_NAMESPACE). + +AC_DEFUN([AX_CHECK_UTS_NAMESPACE],[dnl + AC_CACHE_CHECK([whether UTS namespaces are supported], + ax_cv_uts_namespace,[ + AC_LANG_PUSH([C]) + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include + +int utsfn(void *d) { + char buffer[1024]; + const char *name = "autoconftest"; + int rc = sethostname(name, strlen(name)); + if (rc != 0) return 1; + gethostname(buffer, 1024); + return (strcmp(buffer, name) != 0); +} + +char st2[1024*1024]; +int fn(void *d) { + pid_t child; + int rc, status; + usleep(100000); /* synchronize by sleep */ + if (getuid() != 0) return 1; + child = clone(utsfn, st2 + 1024*1024, CLONE_NEWUTS|SIGCHLD, 0); + if (child < 0) return 1; + rc = waitpid(child, &status, 0); + if (rc <= 0) return 1; + if (!WIFEXITED(status)) return 1; + return WEXITSTATUS(status); +} +char st[1024*1024]; +int main() { + char buffer[1024]; + int rc, status, fd; + pid_t child = clone(fn, st + 1024*1024, CLONE_NEWUSER|SIGCHLD, 0); + if (child < 0) return 1; + + sprintf(buffer, "/proc/%d/uid_map", child); + fd = open(buffer, O_CREAT|O_WRONLY|O_TRUNC, 0755); + sprintf(buffer, "0 %d 1\n", getuid()); + write(fd, buffer, strlen(buffer)); + close(fd); + + rc = waitpid(child, &status, 0); + if (rc <= 0) return 1; + if (!WIFEXITED(status)) return 1; + return WEXITSTATUS(status); +} +]]) + ],[ax_cv_uts_namespace=yes],[ax_cv_uts_namespace=no],[ax_cv_uts_namespace=no]) + AC_LANG_POP([C]) + ]) + if test "$ax_cv_uts_namespace" = yes; then + AC_DEFINE([HAVE_UTS_NAMESPACE],[1],[Whether UTS namespaces are available]) + fi +]) # AX_CHECK_UTS_NAMESPACE diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_code_coverage.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_code_coverage.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_code_coverage.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_code_coverage.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,272 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_code_coverage.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CODE_COVERAGE() +# +# DESCRIPTION +# +# Defines CODE_COVERAGE_CPPFLAGS, CODE_COVERAGE_CFLAGS, +# CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LIBS which should be included +# in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LIBADD variables of every +# build target (program or library) which should be built with code +# coverage support. Also add rules using AX_ADD_AM_MACRO_STATIC; and +# $enable_code_coverage which can be used in subsequent configure output. +# CODE_COVERAGE_ENABLED is defined and substituted, and corresponds to the +# value of the --enable-code-coverage option, which defaults to being +# disabled. +# +# Test also for gcov program and create GCOV variable that could be +# substituted. +# +# Note that all optimization flags in CFLAGS must be disabled when code +# coverage is enabled. +# +# Usage example: +# +# configure.ac: +# +# AX_CODE_COVERAGE +# +# Makefile.am: +# +# include $(top_srcdir)/aminclude_static.am +# +# my_program_LIBS = ... $(CODE_COVERAGE_LIBS) ... +# my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ... +# my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ... +# my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ... +# +# clean-local: code-coverage-clean +# distclean-local: code-coverage-dist-clean +# +# This results in a "check-code-coverage" rule being added to any +# Makefile.am which do "include $(top_srcdir)/aminclude_static.am" +# (assuming the module has been configured with --enable-code-coverage). +# Running `make check-code-coverage` in that directory will run the +# module's test suite (`make check`) and build a code coverage report +# detailing the code which was touched, then print the URI for the report. +# +# This code was derived from Makefile.decl in GLib, originally licensed +# under LGPLv2.1+. +# +# LICENSE +# +# Copyright (c) 2012, 2016 Philip Withnall +# Copyright (c) 2012 Xan Lopez +# Copyright (c) 2012 Christian Persch +# Copyright (c) 2012 Paolo Borelli +# Copyright (c) 2012 Dan Winship +# Copyright (c) 2015,2018 Bastien ROUCARIES +# +# This library is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or (at +# your option) any later version. +# +# This library is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . + +#serial 34 + +m4_define(_AX_CODE_COVERAGE_RULES,[ +AX_ADD_AM_MACRO_STATIC([ +# Code coverage +# +# Optional: +# - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. +# Multiple directories may be specified, separated by whitespace. +# (Default: \$(top_builddir)) +# - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated +# by lcov for code coverage. (Default: +# \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage.info) +# - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage +# reports to be created. (Default: +# \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage) +# - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage, +# set to 0 to disable it and leave empty to stay with the default. +# (Default: empty) +# - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov +# instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE) +# - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov +# instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) +# - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov +# - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the +# collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) +# - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov +# instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) +# - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering +# lcov instance. (Default: empty) +# - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov +# instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) +# - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the +# genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE) +# - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml +# instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) +# - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore +# +# The generated report will be titled using the \$(PACKAGE_NAME) and +# \$(PACKAGE_VERSION). In order to add the current git hash to the title, +# use the git-version-gen script, available online. +# Optional variables +# run only on top dir +if CODE_COVERAGE_ENABLED + ifeq (\$(abs_builddir), \$(abs_top_builddir)) +CODE_COVERAGE_DIRECTORY ?= \$(top_builddir) +CODE_COVERAGE_OUTPUT_FILE ?= \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage.info +CODE_COVERAGE_OUTPUT_DIRECTORY ?= \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage + +CODE_COVERAGE_BRANCH_COVERAGE ?= +CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= \$(if \$(CODE_COVERAGE_BRANCH_COVERAGE),\ +--rc lcov_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE)) +CODE_COVERAGE_LCOV_SHOPTS ?= \$(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) +CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool \"\$(GCOV)\" +CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= \$(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) +CODE_COVERAGE_LCOV_OPTIONS ?= \$(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) +CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?= +CODE_COVERAGE_LCOV_RMOPTS ?= \$(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) +CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\ +\$(if \$(CODE_COVERAGE_BRANCH_COVERAGE),\ +--rc genhtml_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE)) +CODE_COVERAGE_GENHTML_OPTIONS ?= \$(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) +CODE_COVERAGE_IGNORE_PATTERN ?= + +GITIGNOREFILES := \$(GITIGNOREFILES) \$(CODE_COVERAGE_OUTPUT_FILE) \$(CODE_COVERAGE_OUTPUT_DIRECTORY) +code_coverage_v_lcov_cap = \$(code_coverage_v_lcov_cap_\$(V)) +code_coverage_v_lcov_cap_ = \$(code_coverage_v_lcov_cap_\$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_lcov_cap_0 = @echo \" LCOV --capture\" \$(CODE_COVERAGE_OUTPUT_FILE); +code_coverage_v_lcov_ign = \$(code_coverage_v_lcov_ign_\$(V)) +code_coverage_v_lcov_ign_ = \$(code_coverage_v_lcov_ign_\$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_lcov_ign_0 = @echo \" LCOV --remove /tmp/*\" \$(CODE_COVERAGE_IGNORE_PATTERN); +code_coverage_v_genhtml = \$(code_coverage_v_genhtml_\$(V)) +code_coverage_v_genhtml_ = \$(code_coverage_v_genhtml_\$(AM_DEFAULT_VERBOSITY)) +code_coverage_v_genhtml_0 = @echo \" GEN \" \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\"; +code_coverage_quiet = \$(code_coverage_quiet_\$(V)) +code_coverage_quiet_ = \$(code_coverage_quiet_\$(AM_DEFAULT_VERBOSITY)) +code_coverage_quiet_0 = --quiet + +# sanitizes the test-name: replaces with underscores: dashes and dots +code_coverage_sanitize = \$(subst -,_,\$(subst .,_,\$(1))) + +# Use recursive makes in order to ignore errors during check +check-code-coverage: + -\$(AM_V_at)\$(MAKE) \$(AM_MAKEFLAGS) -k check + \$(AM_V_at)\$(MAKE) \$(AM_MAKEFLAGS) code-coverage-capture + +# Capture code coverage data +code-coverage-capture: code-coverage-capture-hook + \$(code_coverage_v_lcov_cap)\$(LCOV) \$(code_coverage_quiet) \$(addprefix --directory ,\$(CODE_COVERAGE_DIRECTORY)) --capture --output-file \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" --test-name \"\$(call code_coverage_sanitize,\$(PACKAGE_NAME)-\$(PACKAGE_VERSION))\" --no-checksum --compat-libtool \$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_OPTIONS) + \$(code_coverage_v_lcov_ign)\$(LCOV) \$(code_coverage_quiet) \$(addprefix --directory ,\$(CODE_COVERAGE_DIRECTORY)) --remove \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \"/tmp/*\" \$(CODE_COVERAGE_IGNORE_PATTERN) --output-file \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_RMOPTS) + -@rm -f \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" + \$(code_coverage_v_genhtml)LANG=C \$(GENHTML) \$(code_coverage_quiet) \$(addprefix --prefix ,\$(CODE_COVERAGE_DIRECTORY)) --output-directory \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\" --title \"\$(PACKAGE_NAME)-\$(PACKAGE_VERSION) Code Coverage\" --legend --show-details \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$(CODE_COVERAGE_GENHTML_OPTIONS) + @echo \"file://\$(abs_builddir)/\$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html\" + +code-coverage-clean: + -\$(LCOV) --directory \$(top_builddir) -z + -rm -rf \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\" + -find . \\( -name \"*.gcda\" -o -name \"*.gcno\" -o -name \"*.gcov\" \\) -delete + +code-coverage-dist-clean: + +A][M_DISTCHECK_CONFIGURE_FLAGS := \$(A][M_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage + else # ifneq (\$(abs_builddir), \$(abs_top_builddir)) +check-code-coverage: + +code-coverage-capture: code-coverage-capture-hook + +code-coverage-clean: + +code-coverage-dist-clean: + endif # ifeq (\$(abs_builddir), \$(abs_top_builddir)) +else #! CODE_COVERAGE_ENABLED +# Use recursive makes in order to ignore errors during check +check-code-coverage: + @echo \"Need to reconfigure with --enable-code-coverage\" +# Capture code coverage data +code-coverage-capture: code-coverage-capture-hook + @echo \"Need to reconfigure with --enable-code-coverage\" + +code-coverage-clean: + +code-coverage-dist-clean: + +endif #CODE_COVERAGE_ENABLED +# Hook rule executed before code-coverage-capture, overridable by the user +code-coverage-capture-hook: + +.PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook +]) +]) + +AC_DEFUN([_AX_CODE_COVERAGE_ENABLED],[ + AX_CHECK_GNU_MAKE([],AC_MSG_ERROR([not using GNU make that is needed for coverage])) + AC_REQUIRE([AX_ADD_AM_MACRO_STATIC]) + # check for gcov + AC_CHECK_TOOL([GCOV], + [$_AX_CODE_COVERAGE_GCOV_PROG_WITH], + [:]) + AS_IF([test "X$GCOV" = "X:"], + AC_MSG_ERROR([gcov is needed to do coverage])) + AC_SUBST([GCOV]) + + dnl Check if gcc is being used + AS_IF([ test "$GCC" = "no" ], [ + AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage]) + ]) + + AC_CHECK_PROG([LCOV], [lcov], [lcov]) + AC_CHECK_PROG([GENHTML], [genhtml], [genhtml]) + + AS_IF([ test x"$LCOV" = x ], [ + AC_MSG_ERROR([To enable code coverage reporting you must have lcov installed]) + ]) + + AS_IF([ test x"$GENHTML" = x ], [ + AC_MSG_ERROR([Could not find genhtml from the lcov package]) + ]) + + dnl Build the code coverage flags + dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility + CODE_COVERAGE_CPPFLAGS="-DNDEBUG" + CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" + CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage" + CODE_COVERAGE_LIBS="-lgcov" + + AC_SUBST([CODE_COVERAGE_CPPFLAGS]) + AC_SUBST([CODE_COVERAGE_CFLAGS]) + AC_SUBST([CODE_COVERAGE_CXXFLAGS]) + AC_SUBST([CODE_COVERAGE_LIBS]) +]) + +AC_DEFUN([AX_CODE_COVERAGE],[ + dnl Check for --enable-code-coverage + + # allow to override gcov location + AC_ARG_WITH([gcov], + [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])], + [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov], + [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov]) + + AC_MSG_CHECKING([whether to build with code coverage support]) + AC_ARG_ENABLE([code-coverage], + AS_HELP_STRING([--enable-code-coverage], + [Whether to enable code coverage support]),, + enable_code_coverage=no) + + AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test "x$enable_code_coverage" = xyes]) + AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage]) + AC_MSG_RESULT($enable_code_coverage) + + AS_IF([ test "x$enable_code_coverage" = xyes ], [ + _AX_CODE_COVERAGE_ENABLED + ]) + + _AX_CODE_COVERAGE_RULES +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_cxx_compile_stdcxx_11.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_cxx_compile_stdcxx_11.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_cxx_compile_stdcxx_11.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_cxx_compile_stdcxx_11.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,163 @@ +# ============================================================================ +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html +# ============================================================================ +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++11 +# standard; if necessary, add switches to CXXFLAGS to enable support. +# +# The first argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for an extended mode. +# +# The second argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline C++11 support is required and that the macro +# should error out if no mode with that support is found. If specified +# 'optional', then configuration proceeds regardless, after defining +# HAVE_CXX11 if and only if a supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# Copyright (c) 2013 Roy Stogner +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 9 + +m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[ + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + struct Base { + virtual void f() {} + }; + struct Child : public Base { + virtual void f() override {} + }; + + typedef check> right_angle_brackets; + + int a; + decltype(a) b; + + typedef check check_type; + check_type c; + check_type&& cr = static_cast(c); + + auto d = a; + auto l = [](){}; + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this + namespace test_template_alias_sfinae { + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { + func(0); + } + } +]]) + +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl + m4_if([$1], [], [], + [$1], [ext], [], + [$1], [noext], [], + [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl + m4_if([$2], [], [ax_cxx_compile_cxx11_required=true], + [$2], [mandatory], [ax_cxx_compile_cxx11_required=true], + [$2], [optional], [ax_cxx_compile_cxx11_required=false], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])]) + AC_LANG_PUSH([C++])dnl + ac_success=no + AC_CACHE_CHECK(whether $CXX supports C++11 features by default, + ax_cv_cxx_compile_cxx11, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [ax_cv_cxx_compile_cxx11=yes], + [ax_cv_cxx_compile_cxx11=no])]) + if test x$ax_cv_cxx_compile_cxx11 = xyes; then + ac_success=yes + fi + + m4_if([$1], [noext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=gnu++11 -std=gnu++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + + m4_if([$1], [ext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=c++11 -std=c++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, + $cachevar, + [ac_save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXXFLAGS="$ac_save_CXXFLAGS"]) + if eval test x\$$cachevar = xyes; then + CXXFLAGS="$CXXFLAGS $switch" + ac_success=yes + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx11_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) + fi + else + if test x$ac_success = xno; then + HAVE_CXX11=0 + AC_MSG_NOTICE([No compiler with C++11 support was found]) + else + HAVE_CXX11=1 + AC_DEFINE(HAVE_CXX11,1, + [define if the compiler supports basic C++11 syntax]) + fi + + AC_SUBST(HAVE_CXX11) + fi +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_file_escapes.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_file_escapes.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_file_escapes.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_file_escapes.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,30 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_file_escapes.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_FILE_ESCAPES +# +# DESCRIPTION +# +# Writes the specified data to the specified file. +# +# LICENSE +# +# Copyright (c) 2008 Tom Howard +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 8 + +AC_DEFUN([AX_FILE_ESCAPES],[ +AX_DOLLAR="\$" +AX_SRB="\\135" +AX_SLB="\\133" +AX_BS="\\\\" +AX_DQ="\"" +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_pthread.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_pthread.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_pthread.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_pthread.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,332 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also link it with them as well. e.g. you should link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threads programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name +# (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 21 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on True64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) + AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) + if test x"$ax_pthread_ok" = xno; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) +# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) +# -pthreads: Solaris/gcc +# -mthreads: Mingw32/gcc, Lynx/gcc +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads too; +# also defines -D_REENTRANT) +# ... -mt is also the pthreads flag for HP/aCC +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case ${host_os} in + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (We need to link with -pthreads/-mt/ + # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather + # a function called by this macro, so we could check for that, but + # who knows whether they'll stub that too in a future libc.) So, + # we'll just look for -pthreads and -lpthread first: + + ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" + ;; + + darwin*) + ax_pthread_flags="-pthread $ax_pthread_flags" + ;; +esac + +# Clang doesn't consider unrecognized options an error unless we specify +# -Werror. We throw in some extra Clang-specific options to ensure that +# this doesn't happen for GCC, which also accepts -Werror. + +AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) +save_CFLAGS="$CFLAGS" +ax_pthread_extra_flags="-Werror" +CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], + [AC_MSG_RESULT([yes])], + [ax_pthread_extra_flags= + AC_MSG_RESULT([no])]) +CFLAGS="$save_CFLAGS" + +if test x"$ax_pthread_ok" = xno; then +for flag in $ax_pthread_flags; do + + case $flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $flag]) + PTHREAD_CFLAGS="$flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + if test x"$ax_pthread_config" = xno; then continue; fi + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$flag]) + PTHREAD_LIBS="-l$flag" + ;; + esac + + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + AC_MSG_RESULT([$ax_pthread_ok]) + if test "x$ax_pthread_ok" = xyes; then + break; + fi + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = xyes; then + save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_MSG_CHECKING([for joinable pthread attribute]) + attr_name=unknown + for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $attr; return attr /* ; */])], + [attr_name=$attr; break], + []) + done + AC_MSG_RESULT([$attr_name]) + if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then + AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + fi + + AC_MSG_CHECKING([if more special flags are required for pthreads]) + flag=no + case ${host_os} in + aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";; + osf* | hpux*) flag="-D_REENTRANT";; + solaris*) + if test "$GCC" = "yes"; then + flag="-D_REENTRANT" + else + # TODO: What about Clang on Solaris? + flag="-mt -D_REENTRANT" + fi + ;; + esac + AC_MSG_RESULT([$flag]) + if test "x$flag" != xno; then + PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" + fi + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) + + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != xyes; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], + [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test x"$ax_pthread_ok" = xyes; then + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ax_require_defined.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ax_require_defined.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ax_require_defined.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ax_require_defined.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,37 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_REQUIRE_DEFINED(MACRO) +# +# DESCRIPTION +# +# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have +# been defined and thus are available for use. This avoids random issues +# where a macro isn't expanded. Instead the configure script emits a +# non-fatal: +# +# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found +# +# It's like AC_REQUIRE except it doesn't expand the required macro. +# +# Here's an example: +# +# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) +# +# LICENSE +# +# Copyright (c) 2014 Mike Frysinger +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 2 + +AC_DEFUN([AX_REQUIRE_DEFINED], [dnl + m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) +])dnl AX_REQUIRE_DEFINED diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/cares-compilers.m4 nodejs-mozilla-12.22.12/deps/cares/m4/cares-compilers.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/cares-compilers.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/cares-compilers.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,1496 @@ +#*************************************************************************** +# +# Copyright (C) 2009 - 2021 by Daniel Stenberg et al +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose and without fee is hereby granted, provided +# that the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +#*************************************************************************** + +# File version for 'aclocal' use. Keep it a single number. +# serial 75 + + +dnl CARES_CHECK_COMPILER +dnl ------------------------------------------------- +dnl Verify if the C compiler being used is known. + +AC_DEFUN([CARES_CHECK_COMPILER], [ + # + compiler_id="unknown" + compiler_num="0" + # + flags_dbg_all="unknown" + flags_dbg_yes="unknown" + flags_dbg_off="unknown" + flags_opt_all="unknown" + flags_opt_yes="unknown" + flags_opt_off="unknown" + # + flags_prefer_cppflags="no" + # + CARES_CHECK_COMPILER_DEC_C + CARES_CHECK_COMPILER_HPUX_C + CARES_CHECK_COMPILER_IBM_C + CARES_CHECK_COMPILER_INTEL_C + CARES_CHECK_COMPILER_CLANG + CARES_CHECK_COMPILER_GNU_C + CARES_CHECK_COMPILER_LCC + CARES_CHECK_COMPILER_SGI_MIPSPRO_C + CARES_CHECK_COMPILER_SGI_MIPS_C + CARES_CHECK_COMPILER_SUNPRO_C + CARES_CHECK_COMPILER_TINY_C + CARES_CHECK_COMPILER_WATCOM_C + # + if test "$compiler_id" = "unknown"; then + cat <<_EOF 1>&2 +*** +*** Warning: This configure script does not have information about the +*** compiler you are using, relative to the flags required to enable or +*** disable generation of debug info, optimization options or warnings. +*** +*** Whatever settings are present in CFLAGS will be used for this run. +*** +*** If you wish to help the c-ares project to better support your compiler +*** you can report this and the required info on the c-ares development +*** mailing list: http://lists.haxx.se/listinfo/c-ares/ +*** +_EOF + fi +]) + + +dnl CARES_CHECK_COMPILER_CLANG +dnl ------------------------------------------------- +dnl Verify if compiler being used is clang. + +AC_DEFUN([CARES_CHECK_COMPILER_CLANG], [ + AC_BEFORE([$0],[CARES_CHECK_COMPILER_GNU_C])dnl + AC_MSG_CHECKING([if compiler is clang]) + CURL_CHECK_DEF([__clang__], [], [silent]) + if test "$curl_cv_have_def___clang__" = "yes"; then + AC_MSG_RESULT([yes]) + compiler_id="CLANG" + clangver=`$CC -dumpversion` + clangvhi=`echo $clangver | cut -d . -f1` + clangvlo=`echo $clangver | cut -d . -f2` + compiler_num=`(expr $clangvhi "*" 100 + $clangvlo) 2>/dev/null` + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_all="$flags_dbg_all -ggdb" + flags_dbg_all="$flags_dbg_all -gstabs" + flags_dbg_all="$flags_dbg_all -gstabs+" + flags_dbg_all="$flags_dbg_all -gcoff" + flags_dbg_all="$flags_dbg_all -gxcoff" + flags_dbg_all="$flags_dbg_all -gdwarf-2" + flags_dbg_all="$flags_dbg_all -gvms" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -Os -O3 -O4" + flags_opt_yes="-Os" + flags_opt_off="-O0" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_DEC_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is DEC C. + +AC_DEFUN([CARES_CHECK_COMPILER_DEC_C], [ + AC_MSG_CHECKING([if compiler is DEC/Compaq/HP C]) + CURL_CHECK_DEF([__DECC], [], [silent]) + CURL_CHECK_DEF([__DECC_VER], [], [silent]) + if test "$curl_cv_have_def___DECC" = "yes" && + test "$curl_cv_have_def___DECC_VER" = "yes"; then + AC_MSG_RESULT([yes]) + compiler_id="DEC_C" + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_yes="-g2" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -O4" + flags_opt_yes="-O1" + flags_opt_off="-O0" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_GNU_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is GNU C. + +AC_DEFUN([CARES_CHECK_COMPILER_GNU_C], [ + AC_REQUIRE([CARES_CHECK_COMPILER_INTEL_C])dnl + AC_REQUIRE([CARES_CHECK_COMPILER_CLANG])dnl + AC_MSG_CHECKING([if compiler is GNU C]) + CURL_CHECK_DEF([__GNUC__], [], [silent]) + if test "$curl_cv_have_def___GNUC__" = "yes" && + test "$compiler_id" = "unknown"; then + AC_MSG_RESULT([yes]) + compiler_id="GNU_C" + gccver=`$CC -dumpversion` + gccvhi=`echo $gccver | cut -d . -f1` + gccvlo=`echo $gccver | cut -d . -f2` + compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null` + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_all="$flags_dbg_all -ggdb" + flags_dbg_all="$flags_dbg_all -gstabs" + flags_dbg_all="$flags_dbg_all -gstabs+" + flags_dbg_all="$flags_dbg_all -gcoff" + flags_dbg_all="$flags_dbg_all -gxcoff" + flags_dbg_all="$flags_dbg_all -gdwarf-2" + flags_dbg_all="$flags_dbg_all -gvms" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -Os" + flags_opt_yes="-O2" + flags_opt_off="-O0" + CURL_CHECK_DEF([_WIN32], [], [silent]) + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_HPUX_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is HP-UX C. + +AC_DEFUN([CARES_CHECK_COMPILER_HPUX_C], [ + AC_MSG_CHECKING([if compiler is HP-UX C]) + CURL_CHECK_DEF([__HP_cc], [], [silent]) + if test "$curl_cv_have_def___HP_cc" = "yes"; then + AC_MSG_RESULT([yes]) + compiler_id="HP_UX_C" + flags_dbg_all="-g -s" + flags_dbg_yes="-g" + flags_dbg_off="-s" + flags_opt_all="-O +O0 +O1 +O2 +O3 +O4" + flags_opt_yes="+O2" + flags_opt_off="+O0" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_IBM_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is IBM C. + +AC_DEFUN([CARES_CHECK_COMPILER_IBM_C], [ + AC_MSG_CHECKING([if compiler is IBM C]) + CURL_CHECK_DEF([__IBMC__], [], [silent]) + if test "$curl_cv_have_def___IBMC__" = "yes"; then + AC_MSG_RESULT([yes]) + compiler_id="IBM_C" + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_yes="-g" + flags_dbg_off="" + flags_opt_all="-O -O0 -O1 -O2 -O3 -O4 -O5" + flags_opt_all="$flags_opt_all -qnooptimize" + flags_opt_all="$flags_opt_all -qoptimize=0" + flags_opt_all="$flags_opt_all -qoptimize=1" + flags_opt_all="$flags_opt_all -qoptimize=2" + flags_opt_all="$flags_opt_all -qoptimize=3" + flags_opt_all="$flags_opt_all -qoptimize=4" + flags_opt_all="$flags_opt_all -qoptimize=5" + flags_opt_yes="-O2" + flags_opt_off="-qnooptimize" + flags_prefer_cppflags="yes" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_INTEL_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is Intel C. + +AC_DEFUN([CARES_CHECK_COMPILER_INTEL_C], [ + AC_BEFORE([$0],[CARES_CHECK_COMPILER_GNU_C])dnl + AC_MSG_CHECKING([if compiler is Intel C]) + CURL_CHECK_DEF([__INTEL_COMPILER], [], [silent]) + if test "$curl_cv_have_def___INTEL_COMPILER" = "yes"; then + AC_MSG_RESULT([yes]) + compiler_num="$curl_cv_def___INTEL_COMPILER" + CURL_CHECK_DEF([__unix__], [], [silent]) + if test "$curl_cv_have_def___unix__" = "yes"; then + compiler_id="INTEL_UNIX_C" + flags_dbg_all="-g -g0" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -Os" + flags_opt_yes="-O2" + flags_opt_off="-O0" + else + compiler_id="INTEL_WINDOWS_C" + flags_dbg_all="/ZI /Zi /zI /zi /ZD /Zd /zD /zd /Z7 /z7 /Oy /Oy-" + flags_dbg_all="$flags_dbg_all /debug" + flags_dbg_all="$flags_dbg_all /debug:none" + flags_dbg_all="$flags_dbg_all /debug:minimal" + flags_dbg_all="$flags_dbg_all /debug:partial" + flags_dbg_all="$flags_dbg_all /debug:full" + flags_dbg_all="$flags_dbg_all /debug:semantic_stepping" + flags_dbg_all="$flags_dbg_all /debug:extended" + flags_dbg_yes="/Zi /Oy-" + flags_dbg_off="/debug:none /Oy-" + flags_opt_all="/O /O0 /O1 /O2 /O3 /Od /Og /Og- /Oi /Oi-" + flags_opt_yes="/O2" + flags_opt_off="/Od" + fi + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_LCC +dnl ------------------------------------------------- +dnl Verify if compiler being used is LCC. + +AC_DEFUN([CARES_CHECK_COMPILER_LCC], [ + AC_MSG_CHECKING([if compiler is LCC]) + CURL_CHECK_DEF([__LCC__], [], [silent]) + if test "$curl_cv_have_def___LCC__" = "yes"; then + AC_MSG_RESULT([yes]) + compiler_id="LCC" + flags_dbg_all="-g" + flags_dbg_yes="-g" + flags_dbg_off="" + flags_opt_all="" + flags_opt_yes="" + flags_opt_off="" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_SGI_MIPS_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is SGI MIPS C. + +AC_DEFUN([CARES_CHECK_COMPILER_SGI_MIPS_C], [ + AC_REQUIRE([CARES_CHECK_COMPILER_SGI_MIPSPRO_C])dnl + AC_MSG_CHECKING([if compiler is SGI MIPS C]) + CURL_CHECK_DEF([__GNUC__], [], [silent]) + CURL_CHECK_DEF([__sgi], [], [silent]) + if test "$curl_cv_have_def___GNUC__" = "no" && + test "$curl_cv_have_def___sgi" = "yes" && + test "$compiler_id" = "unknown"; then + AC_MSG_RESULT([yes]) + compiler_id="SGI_MIPS_C" + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast" + flags_opt_yes="-O2" + flags_opt_off="-O0" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_SGI_MIPSPRO_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is SGI MIPSpro C. + +AC_DEFUN([CARES_CHECK_COMPILER_SGI_MIPSPRO_C], [ + AC_BEFORE([$0],[CARES_CHECK_COMPILER_SGI_MIPS_C])dnl + AC_MSG_CHECKING([if compiler is SGI MIPSpro C]) + CURL_CHECK_DEF([__GNUC__], [], [silent]) + CURL_CHECK_DEF([_COMPILER_VERSION], [], [silent]) + CURL_CHECK_DEF([_SGI_COMPILER_VERSION], [], [silent]) + if test "$curl_cv_have_def___GNUC__" = "no" && + (test "$curl_cv_have_def__SGI_COMPILER_VERSION" = "yes" || + test "$curl_cv_have_def__COMPILER_VERSION" = "yes"); then + AC_MSG_RESULT([yes]) + compiler_id="SGI_MIPSPRO_C" + flags_dbg_all="-g -g0 -g1 -g2 -g3" + flags_dbg_yes="-g" + flags_dbg_off="-g0" + flags_opt_all="-O -O0 -O1 -O2 -O3 -Ofast" + flags_opt_yes="-O2" + flags_opt_off="-O0" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_SUNPRO_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is SunPro C. + +AC_DEFUN([CARES_CHECK_COMPILER_SUNPRO_C], [ + AC_MSG_CHECKING([if compiler is SunPro C]) + CURL_CHECK_DEF([__SUNPRO_C], [], [silent]) + if test "$curl_cv_have_def___SUNPRO_C" = "yes"; then + AC_MSG_RESULT([yes]) + compiler_id="SUNPRO_C" + flags_dbg_all="-g -s" + flags_dbg_yes="-g" + flags_dbg_off="-s" + flags_opt_all="-O -xO -xO1 -xO2 -xO3 -xO4 -xO5" + flags_opt_yes="-xO2" + flags_opt_off="" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_TINY_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is Tiny C. + +AC_DEFUN([CARES_CHECK_COMPILER_TINY_C], [ + AC_MSG_CHECKING([if compiler is Tiny C]) + CURL_CHECK_DEF([__TINYC__], [], [silent]) + if test "$curl_cv_have_def___TINYC__" = "yes"; then + AC_MSG_RESULT([yes]) + compiler_id="TINY_C" + flags_dbg_all="-g -b" + flags_dbg_yes="-g" + flags_dbg_off="" + flags_opt_all="" + flags_opt_yes="" + flags_opt_off="" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_WATCOM_C +dnl ------------------------------------------------- +dnl Verify if compiler being used is Watcom C. + +AC_DEFUN([CARES_CHECK_COMPILER_WATCOM_C], [ + AC_MSG_CHECKING([if compiler is Watcom C]) + CURL_CHECK_DEF([__WATCOMC__], [], [silent]) + if test "$curl_cv_have_def___WATCOMC__" = "yes"; then + AC_MSG_RESULT([yes]) + CURL_CHECK_DEF([__UNIX__], [], [silent]) + if test "$curl_cv_have_def___UNIX__" = "yes"; then + compiler_id="WATCOM_UNIX_C" + flags_dbg_all="-g1 -g1+ -g2 -g3" + flags_dbg_yes="-g2" + flags_dbg_off="" + flags_opt_all="-O0 -O1 -O2 -O3" + flags_opt_yes="-O2" + flags_opt_off="-O0" + else + compiler_id="WATCOM_WINDOWS_C" + flags_dbg_all="" + flags_dbg_yes="" + flags_dbg_off="" + flags_opt_all="" + flags_opt_yes="" + flags_opt_off="" + fi + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CONVERT_INCLUDE_TO_ISYSTEM +dnl ------------------------------------------------- +dnl Changes standard include paths present in CFLAGS +dnl and CPPFLAGS into isystem include paths. This is +dnl done to prevent GNUC from generating warnings on +dnl headers from these locations, although on ancient +dnl GNUC versions these warnings are not silenced. + +AC_DEFUN([CARES_CONVERT_INCLUDE_TO_ISYSTEM], [ + AC_REQUIRE([CARES_SHFUNC_SQUEEZE])dnl + AC_REQUIRE([CARES_CHECK_COMPILER])dnl + if test "$compiler_id" = "GNU_C" || + test "$compiler_id" = "CLANG"; then + tmp_has_include="no" + tmp_chg_FLAGS="$CFLAGS" + for word1 in $tmp_chg_FLAGS; do + case "$word1" in + -I*) + tmp_has_include="yes" + ;; + esac + done + if test "$tmp_has_include" = "yes"; then + tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'` + tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'` + CFLAGS="$tmp_chg_FLAGS" + squeeze CFLAGS + fi + tmp_has_include="no" + tmp_chg_FLAGS="$CPPFLAGS" + for word1 in $tmp_chg_FLAGS; do + case "$word1" in + -I*) + tmp_has_include="yes" + ;; + esac + done + if test "$tmp_has_include" = "yes"; then + tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/^-I/ -isystem /g'` + tmp_chg_FLAGS=`echo "$tmp_chg_FLAGS" | "$SED" 's/ -I/ -isystem /g'` + CPPFLAGS="$tmp_chg_FLAGS" + squeeze CPPFLAGS + fi + fi +]) + + +dnl CARES_COMPILER_WORKS_IFELSE ([ACTION-IF-WORKS], [ACTION-IF-NOT-WORKS]) +dnl ------------------------------------------------- +dnl Verify if the C compiler seems to work with the +dnl settings that are 'active' at the time the test +dnl is performed. + +AC_DEFUN([CARES_COMPILER_WORKS_IFELSE], [ + dnl compilation capability verification + tmp_compiler_works="unknown" + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + int i = 1; + return i; + ]]) + ],[ + tmp_compiler_works="yes" + ],[ + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/cc-fail: /' conftest.err >&6 + echo " " >&6 + ]) + dnl linking capability verification + if test "$tmp_compiler_works" = "yes"; then + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + int i = 1; + return i; + ]]) + ],[ + tmp_compiler_works="yes" + ],[ + tmp_compiler_works="no" + echo " " >&6 + sed 's/^/link-fail: /' conftest.err >&6 + echo " " >&6 + ]) + fi + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$tmp_compiler_works" = "yes"; then + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +# ifdef __STDC__ +# include +# endif + ]],[[ + int i = 0; + exit(i); + ]]) + ],[ + tmp_compiler_works="yes" + ],[ + tmp_compiler_works="no" + echo " " >&6 + echo "run-fail: test program exited with status $ac_status" >&6 + echo " " >&6 + ]) + fi + dnl branch upon test result + if test "$tmp_compiler_works" = "yes"; then + ifelse($1,,:,[$1]) + ifelse($2,,,[else + $2]) + fi +]) + + +dnl CARES_SET_COMPILER_BASIC_OPTS +dnl ------------------------------------------------- +dnl Sets compiler specific options/flags which do not +dnl depend on configure's debug, optimize or warnings +dnl options. + +AC_DEFUN([CARES_SET_COMPILER_BASIC_OPTS], [ + AC_REQUIRE([CARES_CHECK_COMPILER])dnl + AC_REQUIRE([CARES_SHFUNC_SQUEEZE])dnl + # + if test "$compiler_id" != "unknown"; then + # + if test "$compiler_id" = "GNU_C" || + test "$compiler_id" = "CLANG"; then + CARES_CONVERT_INCLUDE_TO_ISYSTEM + fi + # + tmp_save_CPPFLAGS="$CPPFLAGS" + tmp_save_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="" + tmp_CFLAGS="" + # + case "$compiler_id" in + # + CLANG) + # + dnl Disable warnings for unused arguments, otherwise clang will + dnl warn about compile-time arguments used during link-time, like + dnl -O and -g and -pedantic. + tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments" + ;; + # + DEC_C) + # + dnl Select strict ANSI C compiler mode + tmp_CFLAGS="$tmp_CFLAGS -std1" + dnl Turn off optimizer ANSI C aliasing rules + tmp_CFLAGS="$tmp_CFLAGS -noansi_alias" + dnl Generate warnings for missing function prototypes + tmp_CFLAGS="$tmp_CFLAGS -warnprotos" + dnl Change some warnings into fatal errors + tmp_CFLAGS="$tmp_CFLAGS -msg_fatal toofewargs,toomanyargs" + ;; + # + GNU_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + HP_UX_C) + # + dnl Disallow run-time dereferencing of null pointers + tmp_CFLAGS="$tmp_CFLAGS -z" + dnl Disable some remarks + dnl #4227: padding struct with n bytes to align member + dnl #4255: padding size of struct with n bytes to alignment boundary + tmp_CFLAGS="$tmp_CFLAGS +W 4227,4255" + ;; + # + IBM_C) + # + dnl Ensure that compiler optimizations are always thread-safe. + tmp_CPPFLAGS="$tmp_CPPFLAGS -qthreaded" + dnl Disable type based strict aliasing optimizations, using worst + dnl case aliasing assumptions when compiling. Type based aliasing + dnl would restrict the lvalues that could be safely used to access + dnl a data object. + tmp_CPPFLAGS="$tmp_CPPFLAGS -qnoansialias" + dnl Force compiler to stop after the compilation phase, without + dnl generating an object code file when compilation has errors. + tmp_CPPFLAGS="$tmp_CPPFLAGS -qhalt=e" + ;; + # + INTEL_UNIX_C) + # + dnl On unix this compiler uses gcc's header files, so + dnl we select ANSI C89 dialect plus GNU extensions. + tmp_CFLAGS="$tmp_CFLAGS -std=gnu89" + dnl Change some warnings into errors + dnl #140: too many arguments in function call + dnl #147: declaration is incompatible with 'previous one' + dnl #165: too few arguments in function call + dnl #266: function declared implicitly + tmp_CPPFLAGS="$tmp_CPPFLAGS -we 140,147,165,266" + dnl Disable some remarks + dnl #279: controlling expression is constant + dnl #981: operands are evaluated in unspecified order + dnl #1469: "cc" clobber ignored + tmp_CPPFLAGS="$tmp_CPPFLAGS -wd 279,981,1469" + ;; + # + INTEL_WINDOWS_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + LCC) + # + dnl Disallow run-time dereferencing of null pointers + tmp_CFLAGS="$tmp_CFLAGS -n" + ;; + # + SGI_MIPS_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + SGI_MIPSPRO_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + SUNPRO_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + TINY_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + WATCOM_UNIX_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + WATCOM_WINDOWS_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + esac + # + squeeze tmp_CPPFLAGS + squeeze tmp_CFLAGS + # + if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then + AC_MSG_CHECKING([if compiler accepts some basic options]) + CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS" + squeeze CPPFLAGS + squeeze CFLAGS + CARES_COMPILER_WORKS_IFELSE([ + AC_MSG_RESULT([yes]) + AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS]) + dnl restore initial settings + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + ]) + fi + # + fi +]) + + +dnl CARES_SET_COMPILER_DEBUG_OPTS +dnl ------------------------------------------------- +dnl Sets compiler specific options/flags which depend +dnl on configure's debug option. + +AC_DEFUN([CARES_SET_COMPILER_DEBUG_OPTS], [ + AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl + AC_REQUIRE([CARES_CHECK_COMPILER])dnl + AC_REQUIRE([CARES_SHFUNC_SQUEEZE])dnl + # + if test "$compiler_id" != "unknown"; then + # + tmp_save_CFLAGS="$CFLAGS" + tmp_save_CPPFLAGS="$CPPFLAGS" + # + tmp_options="" + tmp_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="$CPPFLAGS" + CARES_VAR_STRIP([tmp_CFLAGS],[$flags_dbg_all]) + CARES_VAR_STRIP([tmp_CPPFLAGS],[$flags_dbg_all]) + # + if test "$want_debug" = "yes"; then + AC_MSG_CHECKING([if compiler accepts debug enabling options]) + tmp_options="$flags_dbg_yes" + fi + if test "$want_debug" = "no"; then + AC_MSG_CHECKING([if compiler accepts debug disabling options]) + tmp_options="$flags_dbg_off" + fi + # + if test "$flags_prefer_cppflags" = "yes"; then + CPPFLAGS="$tmp_CPPFLAGS $tmp_options" + CFLAGS="$tmp_CFLAGS" + else + CPPFLAGS="$tmp_CPPFLAGS" + CFLAGS="$tmp_CFLAGS $tmp_options" + fi + squeeze CPPFLAGS + squeeze CFLAGS + CARES_COMPILER_WORKS_IFELSE([ + AC_MSG_RESULT([yes]) + AC_MSG_NOTICE([compiler options added: $tmp_options]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([compiler options rejected: $tmp_options]) + dnl restore initial settings + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + ]) + # + fi +]) + + +dnl CARES_SET_COMPILER_OPTIMIZE_OPTS +dnl ------------------------------------------------- +dnl Sets compiler specific options/flags which depend +dnl on configure's optimize option. + +AC_DEFUN([CARES_SET_COMPILER_OPTIMIZE_OPTS], [ + AC_REQUIRE([CARES_CHECK_OPTION_OPTIMIZE])dnl + AC_REQUIRE([CARES_CHECK_COMPILER])dnl + AC_REQUIRE([CARES_SHFUNC_SQUEEZE])dnl + # + if test "$compiler_id" != "unknown"; then + # + tmp_save_CFLAGS="$CFLAGS" + tmp_save_CPPFLAGS="$CPPFLAGS" + # + tmp_options="" + tmp_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="$CPPFLAGS" + honor_optimize_option="yes" + # + dnl If optimization request setting has not been explicitly specified, + dnl it has been derived from the debug setting and initially assumed. + dnl This initially assumed optimizer setting will finally be ignored + dnl if CFLAGS or CPPFLAGS already hold optimizer flags. This implies + dnl that an initially assumed optimizer setting might not be honored. + # + if test "$want_optimize" = "assume_no" || + test "$want_optimize" = "assume_yes"; then + AC_MSG_CHECKING([if compiler optimizer assumed setting might be used]) + CARES_VAR_MATCH_IFELSE([tmp_CFLAGS],[$flags_opt_all],[ + honor_optimize_option="no" + ]) + CARES_VAR_MATCH_IFELSE([tmp_CPPFLAGS],[$flags_opt_all],[ + honor_optimize_option="no" + ]) + AC_MSG_RESULT([$honor_optimize_option]) + if test "$honor_optimize_option" = "yes"; then + if test "$want_optimize" = "assume_yes"; then + want_optimize="yes" + fi + if test "$want_optimize" = "assume_no"; then + want_optimize="no" + fi + fi + fi + # + if test "$honor_optimize_option" = "yes"; then + CARES_VAR_STRIP([tmp_CFLAGS],[$flags_opt_all]) + CARES_VAR_STRIP([tmp_CPPFLAGS],[$flags_opt_all]) + if test "$want_optimize" = "yes"; then + AC_MSG_CHECKING([if compiler accepts optimizer enabling options]) + tmp_options="$flags_opt_yes" + fi + if test "$want_optimize" = "no"; then + AC_MSG_CHECKING([if compiler accepts optimizer disabling options]) + tmp_options="$flags_opt_off" + fi + if test "$flags_prefer_cppflags" = "yes"; then + CPPFLAGS="$tmp_CPPFLAGS $tmp_options" + CFLAGS="$tmp_CFLAGS" + else + CPPFLAGS="$tmp_CPPFLAGS" + CFLAGS="$tmp_CFLAGS $tmp_options" + fi + squeeze CPPFLAGS + squeeze CFLAGS + CARES_COMPILER_WORKS_IFELSE([ + AC_MSG_RESULT([yes]) + AC_MSG_NOTICE([compiler options added: $tmp_options]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([compiler options rejected: $tmp_options]) + dnl restore initial settings + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + ]) + fi + # + fi +]) + + +dnl CARES_SET_COMPILER_WARNING_OPTS +dnl ------------------------------------------------- +dnl Sets compiler options/flags which depend on +dnl configure's warnings given option. + +AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [ + AC_REQUIRE([CARES_CHECK_OPTION_WARNINGS])dnl + AC_REQUIRE([CARES_CHECK_COMPILER])dnl + AC_REQUIRE([CARES_SHFUNC_SQUEEZE])dnl + # + if test "$compiler_id" != "unknown"; then + # + tmp_save_CPPFLAGS="$CPPFLAGS" + tmp_save_CFLAGS="$CFLAGS" + tmp_CPPFLAGS="" + tmp_CFLAGS="" + # + case "$compiler_id" in + # + CLANG) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -pedantic" + tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra" + tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings" + tmp_CFLAGS="$tmp_CFLAGS -Wshadow" + tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs" + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations" + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes" + tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long" + tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal" + tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare" + tmp_CFLAGS="$tmp_CFLAGS -Wundef" + tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral" + tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes" + tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement" + tmp_CFLAGS="$tmp_CFLAGS -Wcast-align" + tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers" + tmp_CFLAGS="$tmp_CFLAGS -Wshorten-64-to-32" + # + dnl Only clang 1.1 or later + if test "$compiler_num" -ge "101"; then + tmp_CFLAGS="$tmp_CFLAGS -Wunused" + fi + fi + ;; + # + DEC_C) + # + if test "$want_warnings" = "yes"; then + dnl Select a higher warning level than default level2 + tmp_CFLAGS="$tmp_CFLAGS -msg_enable level3" + fi + ;; + # + GNU_C) + # + if test "$want_warnings" = "yes"; then + # + dnl Do not enable -pedantic when cross-compiling with a gcc older + dnl than 3.0, to avoid warnings from third party system headers. + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -pedantic" + fi + # + dnl Set of options we believe *ALL* gcc versions support: + tmp_CFLAGS="$tmp_CFLAGS -Wall -W" + # + dnl Only gcc 1.4 or later + if test "$compiler_num" -ge "104"; then + tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings" + dnl If not cross-compiling with a gcc older than 3.0 + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -Wunused -Wshadow" + fi + fi + # + dnl Only gcc 2.7 or later + if test "$compiler_num" -ge "207"; then + tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs" + dnl If not cross-compiling with a gcc older than 3.0 + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations" + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes" + fi + fi + # + dnl Only gcc 2.95 or later + if test "$compiler_num" -ge "295"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long" + fi + # + dnl Only gcc 2.96 or later + if test "$compiler_num" -ge "296"; then + tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal" + tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare" + dnl -Wundef used only if gcc is 2.96 or later since we get + dnl lots of "`_POSIX_C_SOURCE' is not defined" in system + dnl headers with gcc 2.95.4 on FreeBSD 4.9 + tmp_CFLAGS="$tmp_CFLAGS -Wundef" + fi + # + dnl Only gcc 2.97 or later + if test "$compiler_num" -ge "297"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral" + fi + # + dnl Only gcc 3.0 or later + if test "$compiler_num" -ge "300"; then + dnl -Wunreachable-code seems totally unreliable on my gcc 3.3.2 on + dnl on i686-Linux as it gives us heaps with false positives. + dnl Also, on gcc 4.0.X it is totally unbearable and complains all + dnl over making it unusable for generic purposes. Let's not use it. + tmp_CFLAGS="$tmp_CFLAGS" + fi + # + dnl Only gcc 3.3 or later + if test "$compiler_num" -ge "303"; then + tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes" + fi + # + dnl Only gcc 3.4 or later + if test "$compiler_num" -ge "304"; then + tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement" + fi + # + dnl Only gcc 4.0 or later + if test "$compiler_num" -ge "400"; then + tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3" + fi + # + dnl Only gcc 4.2 or later + if test "$compiler_num" -ge "402"; then + tmp_CFLAGS="$tmp_CFLAGS -Wcast-align" + fi + # + dnl Only gcc 4.3 or later + if test "$compiler_num" -ge "403"; then + tmp_CFLAGS="$tmp_CFLAGS -Wtype-limits -Wold-style-declaration" + tmp_CFLAGS="$tmp_CFLAGS -Wmissing-parameter-type -Wempty-body" + tmp_CFLAGS="$tmp_CFLAGS -Wclobbered -Wignored-qualifiers" + tmp_CFLAGS="$tmp_CFLAGS -Wconversion -Wno-sign-conversion -Wvla" + fi + # + dnl Only gcc 4.5 or later + if test "$compiler_num" -ge "405"; then + dnl Only windows targets + if test "$curl_cv_have_def__WIN32" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-pedantic-ms-format" + fi + fi + # + fi + # + dnl Do not issue warnings for code in system include paths. + if test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers" + else + dnl When cross-compiling with a gcc older than 3.0, disable + dnl some warnings triggered on third party system headers. + if test "x$cross_compiling" = "xyes"; then + if test "$compiler_num" -ge "104"; then + dnl gcc 1.4 or later + tmp_CFLAGS="$tmp_CFLAGS -Wno-unused -Wno-shadow" + fi + if test "$compiler_num" -ge "207"; then + dnl gcc 2.7 or later + tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-declarations" + tmp_CFLAGS="$tmp_CFLAGS -Wno-missing-prototypes" + fi + fi + fi + ;; + # + HP_UX_C) + # + if test "$want_warnings" = "yes"; then + dnl Issue all warnings + tmp_CFLAGS="$tmp_CFLAGS +w1" + fi + ;; + # + IBM_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + INTEL_UNIX_C) + # + if test "$want_warnings" = "yes"; then + if test "$compiler_num" -gt "600"; then + dnl Show errors, warnings, and remarks + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall -w2" + dnl Perform extra compile-time code checking + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcheck" + dnl Warn on nested comments + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcomment" + dnl Show warnings relative to deprecated features + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wdeprecated" + dnl Enable warnings for missing prototypes + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wmissing-prototypes" + dnl Enable warnings for 64-bit portability issues + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wp64" + dnl Enable warnings for questionable pointer arithmetic + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wpointer-arith" + dnl Check for function return typw issues + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wreturn-type" + dnl Warn on variable declarations hiding a previous one + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wshadow" + dnl Warn when a variable is used before initialized + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wuninitialized" + dnl Warn if a declared function is not used + tmp_CPPFLAGS="$tmp_CPPFLAGS -Wunused-function" + fi + fi + dnl Disable using EBP register in optimizations + tmp_CFLAGS="$tmp_CFLAGS -fno-omit-frame-pointer" + dnl Disable use of ANSI C aliasing rules in optimizations + tmp_CFLAGS="$tmp_CFLAGS -fno-strict-aliasing" + dnl Value-safe optimizations on floating-point data + tmp_CFLAGS="$tmp_CFLAGS -fp-model precise" + dnl Only icc 10.0 or later + if test "$compiler_num" -ge "1000"; then + dnl Disable vectorizer diagnostic information + tmp_CFLAGS="$tmp_CFLAGS -vec-report0" + fi + ;; + # + INTEL_WINDOWS_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + LCC) + # + if test "$want_warnings" = "yes"; then + dnl Highest warning level is double -A, next is single -A. + dnl Due to the big number of warnings these trigger on third + dnl party header files it is impractical for us to use any of + dnl them here. If you want them simply define it in CPPFLAGS. + tmp_CFLAGS="$tmp_CFLAGS" + fi + ;; + # + SGI_MIPS_C) + # + if test "$want_warnings" = "yes"; then + dnl Perform stricter semantic and lint-like checks + tmp_CFLAGS="$tmp_CFLAGS -fullwarn" + fi + ;; + # + SGI_MIPSPRO_C) + # + if test "$want_warnings" = "yes"; then + dnl Perform stricter semantic and lint-like checks + tmp_CFLAGS="$tmp_CFLAGS -fullwarn" + dnl Disable some remarks + dnl #1209: controlling expression is constant + tmp_CFLAGS="$tmp_CFLAGS -woff 1209" + fi + ;; + # + SUNPRO_C) + # + if test "$want_warnings" = "yes"; then + dnl Perform stricter semantic and lint-like checks + tmp_CFLAGS="$tmp_CFLAGS -v" + fi + ;; + # + TINY_C) + # + if test "$want_warnings" = "yes"; then + dnl Activate all warnings + tmp_CFLAGS="$tmp_CFLAGS -Wall" + dnl Make string constants be of type const char * + tmp_CFLAGS="$tmp_CFLAGS -Wwrite-strings" + dnl Warn use of unsupported GCC features ignored by TCC + tmp_CFLAGS="$tmp_CFLAGS -Wunsupported" + fi + ;; + # + WATCOM_UNIX_C) + # + if test "$want_warnings" = "yes"; then + dnl Issue all warnings + tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra" + fi + ;; + # + WATCOM_WINDOWS_C) + # + dnl Placeholder + tmp_CFLAGS="$tmp_CFLAGS" + ;; + # + esac + # + squeeze tmp_CPPFLAGS + squeeze tmp_CFLAGS + # + if test ! -z "$tmp_CFLAGS" || test ! -z "$tmp_CPPFLAGS"; then + AC_MSG_CHECKING([if compiler accepts strict warning options]) + CPPFLAGS="$tmp_save_CPPFLAGS $tmp_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS" + squeeze CPPFLAGS + squeeze CFLAGS + CARES_COMPILER_WORKS_IFELSE([ + AC_MSG_RESULT([yes]) + AC_MSG_NOTICE([compiler options added: $tmp_CFLAGS $tmp_CPPFLAGS]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([compiler options rejected: $tmp_CFLAGS $tmp_CPPFLAGS]) + dnl restore initial settings + CPPFLAGS="$tmp_save_CPPFLAGS" + CFLAGS="$tmp_save_CFLAGS" + ]) + fi + # + fi +]) + + +dnl CARES_SHFUNC_SQUEEZE +dnl ------------------------------------------------- +dnl Declares a shell function squeeze() which removes +dnl redundant whitespace out of a shell variable. + +AC_DEFUN([CARES_SHFUNC_SQUEEZE], [ +squeeze() { + _sqz_result="" + eval _sqz_input=\[$][$]1 + for _sqz_token in $_sqz_input; do + if test -z "$_sqz_result"; then + _sqz_result="$_sqz_token" + else + _sqz_result="$_sqz_result $_sqz_token" + fi + done + eval [$]1=\$_sqz_result + return 0 +} +]) + + +dnl CARES_CHECK_COMPILER_HALT_ON_ERROR +dnl ------------------------------------------------- +dnl Verifies if the compiler actually halts after the +dnl compilation phase without generating any object +dnl code file, when the source compiles with errors. + +AC_DEFUN([CARES_CHECK_COMPILER_HALT_ON_ERROR], [ + AC_MSG_CHECKING([if compiler halts on compilation errors]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + force compilation error + ]]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([compiler does not halt on compilation errors.]) + ],[ + AC_MSG_RESULT([yes]) + ]) +]) + + +dnl CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE +dnl ------------------------------------------------- +dnl Verifies if the compiler actually halts after the +dnl compilation phase without generating any object +dnl code file, when the source code tries to define a +dnl type for a constant array with negative dimension. + +AC_DEFUN([CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE], [ + AC_REQUIRE([CARES_CHECK_COMPILER_HALT_ON_ERROR])dnl + AC_MSG_CHECKING([if compiler halts on negative sized arrays]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + typedef char bad_t[sizeof(char) == sizeof(int) ? -1 : -1 ]; + ]],[[ + bad_t dummy; + ]]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([compiler does not halt on negative sized arrays.]) + ],[ + AC_MSG_RESULT([yes]) + ]) +]) + + +dnl CARES_CHECK_COMPILER_STRUCT_MEMBER_SIZE +dnl ------------------------------------------------- +dnl Verifies if the compiler is capable of handling the +dnl size of a struct member, struct which is a function +dnl result, as a compilation-time condition inside the +dnl type definition of a constant array. + +AC_DEFUN([CARES_CHECK_COMPILER_STRUCT_MEMBER_SIZE], [ + AC_REQUIRE([CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE])dnl + AC_MSG_CHECKING([if compiler struct member size checking works]) + tst_compiler_check_one_works="unknown" + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + struct mystruct { + int mi; + char mc; + struct mystruct *next; + }; + struct mystruct myfunc(); + typedef char good_t1[sizeof(myfunc().mi) == sizeof(int) ? 1 : -1 ]; + typedef char good_t2[sizeof(myfunc().mc) == sizeof(char) ? 1 : -1 ]; + ]],[[ + good_t1 dummy1; + good_t2 dummy2; + ]]) + ],[ + tst_compiler_check_one_works="yes" + ],[ + tst_compiler_check_one_works="no" + sed 's/^/cc-src: /' conftest.$ac_ext >&6 + sed 's/^/cc-err: /' conftest.err >&6 + ]) + tst_compiler_check_two_works="unknown" + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + struct mystruct { + int mi; + char mc; + struct mystruct *next; + }; + struct mystruct myfunc(); + typedef char bad_t1[sizeof(myfunc().mi) != sizeof(int) ? 1 : -1 ]; + typedef char bad_t2[sizeof(myfunc().mc) != sizeof(char) ? 1 : -1 ]; + ]],[[ + bad_t1 dummy1; + bad_t2 dummy2; + ]]) + ],[ + tst_compiler_check_two_works="no" + ],[ + tst_compiler_check_two_works="yes" + ]) + if test "$tst_compiler_check_one_works" = "yes" && + test "$tst_compiler_check_two_works" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([compiler fails struct member size checking.]) + fi +]) + + +dnl CARES_CHECK_COMPILER_SYMBOL_HIDING +dnl ------------------------------------------------- +dnl Verify if compiler supports hiding library internal symbols, setting +dnl shell variable supports_symbol_hiding value as appropriate, as well as +dnl variables symbol_hiding_CFLAGS and symbol_hiding_EXTERN when supported. + +AC_DEFUN([CARES_CHECK_COMPILER_SYMBOL_HIDING], [ + AC_REQUIRE([CARES_CHECK_COMPILER])dnl + AC_BEFORE([$0],[CARES_CONFIGURE_SYMBOL_HIDING])dnl + AC_MSG_CHECKING([if compiler supports hiding library internal symbols]) + supports_symbol_hiding="no" + symbol_hiding_CFLAGS="" + symbol_hiding_EXTERN="" + tmp_CFLAGS="" + tmp_EXTERN="" + case "$compiler_id" in + CLANG) + dnl All versions of clang support -fvisibility= + tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))" + tmp_CFLAGS="-fvisibility=hidden" + supports_symbol_hiding="yes" + ;; + GNU_C) + dnl Only gcc 3.4 or later + if test "$compiler_num" -ge "304"; then + if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then + tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))" + tmp_CFLAGS="-fvisibility=hidden" + supports_symbol_hiding="yes" + fi + fi + ;; + INTEL_UNIX_C) + dnl Only icc 9.0 or later + if test "$compiler_num" -ge "900"; then + if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then + tmp_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +# include + ]],[[ + printf("icc fvisibility bug test"); + ]]) + ],[ + tmp_EXTERN="__attribute__ ((__visibility__ (\"default\")))" + tmp_CFLAGS="-fvisibility=hidden" + supports_symbol_hiding="yes" + ]) + CFLAGS="$tmp_save_CFLAGS" + fi + fi + ;; + SUNPRO_C) + if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then + tmp_EXTERN="__global" + tmp_CFLAGS="-xldscope=hidden" + supports_symbol_hiding="yes" + fi + ;; + esac + if test "$supports_symbol_hiding" = "yes"; then + tmp_save_CFLAGS="$CFLAGS" + CFLAGS="$tmp_save_CFLAGS $tmp_CFLAGS" + squeeze CFLAGS + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $tmp_EXTERN char *dummy(char *buff); + char *dummy(char *buff) + { + if(buff) + return ++buff; + else + return buff; + } + ]],[[ + char b[16]; + char *r = dummy(&b[0]); + if(r) + return (int)*r; + ]]) + ],[ + supports_symbol_hiding="yes" + if test -f conftest.err; then + grep 'visibility' conftest.err >/dev/null + if test "$?" -eq "0"; then + supports_symbol_hiding="no" + fi + fi + ],[ + supports_symbol_hiding="no" + echo " " >&6 + sed 's/^/cc-src: /' conftest.$ac_ext >&6 + sed 's/^/cc-err: /' conftest.err >&6 + echo " " >&6 + ]) + CFLAGS="$tmp_save_CFLAGS" + fi + if test "$supports_symbol_hiding" = "yes"; then + AC_MSG_RESULT([yes]) + symbol_hiding_CFLAGS="$tmp_CFLAGS" + symbol_hiding_EXTERN="$tmp_EXTERN" + else + AC_MSG_RESULT([no]) + fi +]) + + +dnl CARES_CHECK_COMPILER_PROTOTYPE_MISMATCH +dnl ------------------------------------------------- +dnl Verifies if the compiler actually halts after the +dnl compilation phase without generating any object +dnl code file, when the source code tries to redefine +dnl a prototype which does not match previous one. + +AC_DEFUN([CARES_CHECK_COMPILER_PROTOTYPE_MISMATCH], [ + AC_REQUIRE([CARES_CHECK_COMPILER_HALT_ON_ERROR])dnl + AC_MSG_CHECKING([if compiler halts on function prototype mismatch]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +# include + int rand(int n); + int rand(int n) + { + if(n) + return ++n; + else + return n; + } + ]],[[ + int i[2]; + int j = rand(i[0]); + if(j) + return j; + ]]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([compiler does not halt on function prototype mismatch.]) + ],[ + AC_MSG_RESULT([yes]) + ]) +]) + + +dnl CARES_VAR_MATCH (VARNAME, VALUE) +dnl ------------------------------------------------- +dnl Verifies if shell variable VARNAME contains VALUE. +dnl Contents of variable VARNAME and VALUE are handled +dnl as whitespace separated lists of words. If at least +dnl one word of VALUE is present in VARNAME the match +dnl is considered positive, otherwise false. + +AC_DEFUN([CARES_VAR_MATCH], [ + ac_var_match_word="no" + for word1 in $[$1]; do + for word2 in [$2]; do + if test "$word1" = "$word2"; then + ac_var_match_word="yes" + fi + done + done +]) + + +dnl CARES_VAR_MATCH_IFELSE (VARNAME, VALUE, +dnl [ACTION-IF-MATCH], [ACTION-IF-NOT-MATCH]) +dnl ------------------------------------------------- +dnl This performs a CURL_VAR_MATCH check and executes +dnl first branch if the match is positive, otherwise +dnl the second branch is executed. + +AC_DEFUN([CARES_VAR_MATCH_IFELSE], [ + CARES_VAR_MATCH([$1],[$2]) + if test "$ac_var_match_word" = "yes"; then + ifelse($3,,:,[$3]) + ifelse($4,,,[else + $4]) + fi +]) + + +dnl CARES_VAR_STRIP (VARNAME, VALUE) +dnl ------------------------------------------------- +dnl Contents of variable VARNAME and VALUE are handled +dnl as whitespace separated lists of words. Each word +dnl from VALUE is removed from VARNAME when present. + +AC_DEFUN([CARES_VAR_STRIP], [ + AC_REQUIRE([CARES_SHFUNC_SQUEEZE])dnl + ac_var_stripped="" + for word1 in $[$1]; do + ac_var_strip_word="no" + for word2 in [$2]; do + if test "$word1" = "$word2"; then + ac_var_strip_word="yes" + fi + done + if test "$ac_var_strip_word" = "no"; then + ac_var_stripped="$ac_var_stripped $word1" + fi + done + dnl squeeze whitespace out of result + [$1]="$ac_var_stripped" + squeeze [$1] +]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/cares-confopts.m4 nodejs-mozilla-12.22.12/deps/cares/m4/cares-confopts.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/cares-confopts.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/cares-confopts.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,356 @@ +#*************************************************************************** +# +# Copyright (C) 2008 - 2013 by Daniel Stenberg et al +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose and without fee is hereby granted, provided +# that the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +#*************************************************************************** + +# File version for 'aclocal' use. Keep it a single number. +# serial 11 + + +dnl CARES_CHECK_OPTION_DEBUG +dnl ------------------------------------------------- +dnl Verify if configure has been invoked with option +dnl --enable-debug or --disable-debug, and set shell +dnl variable want_debug value as appropriate. + +AC_DEFUN([CARES_CHECK_OPTION_DEBUG], [ + AC_BEFORE([$0],[CARES_CHECK_OPTION_WARNINGS])dnl + AC_BEFORE([$0],[XC_CHECK_PROG_CC])dnl + AC_MSG_CHECKING([whether to enable debug build options]) + OPT_DEBUG_BUILD="default" + AC_ARG_ENABLE(debug, +AS_HELP_STRING([--enable-debug],[Enable debug build options]) +AS_HELP_STRING([--disable-debug],[Disable debug build options]), + OPT_DEBUG_BUILD=$enableval) + case "$OPT_DEBUG_BUILD" in + no) + dnl --disable-debug option used + want_debug="no" + ;; + default) + dnl configure option not specified + want_debug="no" + ;; + *) + dnl --enable-debug option used + want_debug="yes" + ;; + esac + AC_MSG_RESULT([$want_debug]) +]) + + +dnl CARES_CHECK_OPTION_NONBLOCKING +dnl ------------------------------------------------- +dnl Verify if configure has been invoked with option +dnl --enable-nonblocking or --disable-nonblocking, and +dnl set shell variable want_nonblocking as appropriate. + +AC_DEFUN([CARES_CHECK_OPTION_NONBLOCKING], [ + AC_BEFORE([$0],[CARES_CHECK_NONBLOCKING_SOCKET])dnl + AC_MSG_CHECKING([whether to enable non-blocking communications]) + OPT_NONBLOCKING="default" + AC_ARG_ENABLE(nonblocking, +AS_HELP_STRING([--enable-nonblocking],[Enable non-blocking communications]) +AS_HELP_STRING([--disable-nonblocking],[Disable non-blocking communications]), + OPT_NONBLOCKING=$enableval) + case "$OPT_NONBLOCKING" in + no) + dnl --disable-nonblocking option used + want_nonblocking="no" + ;; + default) + dnl configure option not specified + want_nonblocking="yes" + ;; + *) + dnl --enable-nonblocking option used + want_nonblocking="yes" + ;; + esac + AC_MSG_RESULT([$want_nonblocking]) +]) + + +dnl CARES_CHECK_OPTION_OPTIMIZE +dnl ------------------------------------------------- +dnl Verify if configure has been invoked with option +dnl --enable-optimize or --disable-optimize, and set +dnl shell variable want_optimize value as appropriate. + +AC_DEFUN([CARES_CHECK_OPTION_OPTIMIZE], [ + AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl + AC_BEFORE([$0],[XC_CHECK_PROG_CC])dnl + AC_MSG_CHECKING([whether to enable compiler optimizer]) + OPT_COMPILER_OPTIMIZE="default" + AC_ARG_ENABLE(optimize, +AS_HELP_STRING([--enable-optimize(=OPT)],[Enable compiler optimizations (default=-O2)]) +AS_HELP_STRING([--disable-optimize],[Disable compiler optimizations]), + OPT_COMPILER_OPTIMIZE=$enableval) + case "$OPT_COMPILER_OPTIMIZE" in + no) + dnl --disable-optimize option used. We will handle this as + dnl a request to disable compiler optimizations if possible. + dnl If the compiler is known CFLAGS and CPPFLAGS will be + dnl overridden, otherwise this can not be honored. + want_optimize="no" + AC_MSG_RESULT([no]) + ;; + default) + dnl configure's optimize option not specified. Initially we will + dnl handle this as a a request contrary to configure's setting + dnl for --enable-debug. IOW, initially, for debug-enabled builds + dnl this will be handled as a request to disable optimizations if + dnl possible, and for debug-disabled builds this will be handled + dnl initially as a request to enable optimizations if possible. + dnl Finally, if the compiler is known and CFLAGS and CPPFLAGS do + dnl not have any optimizer flag the request will be honored, in + dnl any other case the request can not be honored. + dnl IOW, existing optimizer flags defined in CFLAGS or CPPFLAGS + dnl will always take precedence over any initial assumption. + if test "$want_debug" = "yes"; then + want_optimize="assume_no" + AC_MSG_RESULT([not specified (assuming no)]) + else + want_optimize="assume_yes" + AC_MSG_RESULT([not specified (assuming yes)]) + fi + ;; + *) + dnl --enable-optimize option used. We will handle this as + dnl a request to enable compiler optimizations if possible. + dnl If the compiler is known CFLAGS and CPPFLAGS will be + dnl overridden, otherwise this can not be honored. + want_optimize="yes" + AC_MSG_RESULT([yes]) + ;; + esac +]) + + +dnl CARES_CHECK_OPTION_SYMBOL_HIDING +dnl ------------------------------------------------- +dnl Verify if configure has been invoked with option +dnl --enable-symbol-hiding or --disable-symbol-hiding, +dnl setting shell variable want_symbol_hiding value. + +AC_DEFUN([CARES_CHECK_OPTION_SYMBOL_HIDING], [ + AC_BEFORE([$0],[CARES_CHECK_COMPILER_SYMBOL_HIDING])dnl + AC_MSG_CHECKING([whether to enable hiding of library internal symbols]) + OPT_SYMBOL_HIDING="default" + AC_ARG_ENABLE(symbol-hiding, +AS_HELP_STRING([--enable-symbol-hiding],[Enable hiding of library internal symbols]) +AS_HELP_STRING([--disable-symbol-hiding],[Disable hiding of library internal symbols]), + OPT_SYMBOL_HIDING=$enableval) + case "$OPT_SYMBOL_HIDING" in + no) + dnl --disable-symbol-hiding option used. + dnl This is an indication to not attempt hiding of library internal + dnl symbols. Default symbol visibility will be used, which normally + dnl exposes all library internal symbols. + want_symbol_hiding="no" + AC_MSG_RESULT([no]) + ;; + default) + dnl configure's symbol-hiding option not specified. + dnl Handle this as if --enable-symbol-hiding option was given. + want_symbol_hiding="yes" + AC_MSG_RESULT([yes]) + ;; + *) + dnl --enable-symbol-hiding option used. + dnl This is an indication to attempt hiding of library internal + dnl symbols. This is only supported on some compilers/linkers. + want_symbol_hiding="yes" + AC_MSG_RESULT([yes]) + ;; + esac +]) + + +dnl CARES_CHECK_OPTION_EXPOSE_STATICS +dnl ------------------------------------------------- +dnl Verify if configure has been invoked with option +dnl --enable-expose-statics or --disable-expose-statics, +dnl setting shell variable want_expose_statics value. + +AC_DEFUN([CARES_CHECK_OPTION_EXPOSE_STATICS], [ + AC_MSG_CHECKING([whether to expose internal static functions for testing]) + OPT_EXPOSE_STATICS="default" + AC_ARG_ENABLE(expose-statics, +AS_HELP_STRING([--enable-expose-statics],[Enable exposure of internal static functions for testing]) +AS_HELP_STRING([--disable-expose-statics],[Disable exposure of internal static functions for testing]), + OPT_EXPOSE_STATICS=$enableval) + case "$OPT_EXPOSE_STATICS" in + no) + dnl --disable-expose-statics option used. + want_expose_statics="no" + AC_MSG_RESULT([no]) + ;; + default) + dnl configure's expose-statics option not specified. + dnl Handle this as if --disable-expose-statics option was given. + want_expose_statics="no" + AC_MSG_RESULT([no]) + ;; + *) + dnl --enable-expose-statics option used. + want_expose_statics="yes" + AC_MSG_RESULT([yes]) + ;; + esac + if test "$want_expose_statics" = "yes"; then + AC_DEFINE_UNQUOTED(CARES_EXPOSE_STATICS, 1, + [Defined for build that exposes internal static functions for testing.]) + fi +]) + + +dnl CARES_CHECK_OPTION_WARNINGS +dnl ------------------------------------------------- +dnl Verify if configure has been invoked with option +dnl --enable-warnings or --disable-warnings, and set +dnl shell variable want_warnings as appropriate. + +AC_DEFUN([CARES_CHECK_OPTION_WARNINGS], [ + AC_REQUIRE([CARES_CHECK_OPTION_DEBUG])dnl + AC_BEFORE([$0],[CARES_CHECK_OPTION_WERROR])dnl + AC_BEFORE([$0],[XC_CHECK_PROG_CC])dnl + AC_MSG_CHECKING([whether to enable strict compiler warnings]) + OPT_COMPILER_WARNINGS="default" + AC_ARG_ENABLE(warnings, +AS_HELP_STRING([--enable-warnings],[Enable strict compiler warnings]) +AS_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]), + OPT_COMPILER_WARNINGS=$enableval) + case "$OPT_COMPILER_WARNINGS" in + no) + dnl --disable-warnings option used + want_warnings="no" + ;; + default) + dnl configure option not specified, so + dnl use same setting as --enable-debug + want_warnings="$want_debug" + ;; + *) + dnl --enable-warnings option used + want_warnings="yes" + ;; + esac + AC_MSG_RESULT([$want_warnings]) +]) + +dnl CARES_CHECK_OPTION_WERROR +dnl ------------------------------------------------- +dnl Verify if configure has been invoked with option +dnl --enable-werror or --disable-werror, and set +dnl shell variable want_werror as appropriate. + +AC_DEFUN([CARES_CHECK_OPTION_WERROR], [ + AC_BEFORE([$0],[CARES_CHECK_COMPILER])dnl + AC_MSG_CHECKING([whether to enable compiler warnings as errors]) + OPT_COMPILER_WERROR="default" + AC_ARG_ENABLE(werror, +AS_HELP_STRING([--enable-werror],[Enable compiler warnings as errors]) +AS_HELP_STRING([--disable-werror],[Disable compiler warnings as errors]), + OPT_COMPILER_WERROR=$enableval) + case "$OPT_COMPILER_WERROR" in + no) + dnl --disable-werror option used + want_werror="no" + ;; + default) + dnl configure option not specified + want_werror="no" + ;; + *) + dnl --enable-werror option used + want_werror="yes" + ;; + esac + AC_MSG_RESULT([$want_werror]) +]) + + +dnl CARES_CHECK_NONBLOCKING_SOCKET +dnl ------------------------------------------------- +dnl Check for how to set a socket into non-blocking state. + +AC_DEFUN([CARES_CHECK_NONBLOCKING_SOCKET], [ + AC_REQUIRE([CARES_CHECK_OPTION_NONBLOCKING])dnl + AC_REQUIRE([CARES_CHECK_FUNC_FCNTL])dnl + AC_REQUIRE([CARES_CHECK_FUNC_IOCTL])dnl + AC_REQUIRE([CARES_CHECK_FUNC_IOCTLSOCKET])dnl + AC_REQUIRE([CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL])dnl + AC_REQUIRE([CARES_CHECK_FUNC_SETSOCKOPT])dnl + # + tst_method="unknown" + if test "$want_nonblocking" = "yes"; then + AC_MSG_CHECKING([how to set a socket into non-blocking mode]) + if test "x$ac_cv_func_fcntl_o_nonblock" = "xyes"; then + tst_method="fcntl O_NONBLOCK" + elif test "x$ac_cv_func_ioctl_fionbio" = "xyes"; then + tst_method="ioctl FIONBIO" + elif test "x$ac_cv_func_ioctlsocket_fionbio" = "xyes"; then + tst_method="ioctlsocket FIONBIO" + elif test "x$ac_cv_func_ioctlsocket_camel_fionbio" = "xyes"; then + tst_method="IoctlSocket FIONBIO" + elif test "x$ac_cv_func_setsockopt_so_nonblock" = "xyes"; then + tst_method="setsockopt SO_NONBLOCK" + fi + AC_MSG_RESULT([$tst_method]) + if test "$tst_method" = "unknown"; then + AC_MSG_WARN([cannot determine non-blocking socket method.]) + fi + fi + if test "$tst_method" = "unknown"; then + AC_DEFINE_UNQUOTED(USE_BLOCKING_SOCKETS, 1, + [Define to disable non-blocking sockets.]) + AC_MSG_WARN([non-blocking sockets disabled.]) + fi +]) + + +dnl CARES_CONFIGURE_SYMBOL_HIDING +dnl ------------------------------------------------- +dnl Depending on --enable-symbol-hiding or --disable-symbol-hiding +dnl configure option, and compiler capability to actually honor such +dnl option, this will modify compiler flags as appropriate and also +dnl provide needed definitions for configuration and Makefile.am files. +dnl This macro should not be used until all compilation tests have +dnl been done to prevent interferences on other tests. + +AC_DEFUN([CARES_CONFIGURE_SYMBOL_HIDING], [ + AC_MSG_CHECKING([whether hiding of library internal symbols will actually happen]) + CFLAG_CARES_SYMBOL_HIDING="" + doing_symbol_hiding="no" + if test x"$ac_cv_native_windows" != "xyes" && + test "$want_symbol_hiding" = "yes" && + test "$supports_symbol_hiding" = "yes"; then + doing_symbol_hiding="yes" + CFLAG_CARES_SYMBOL_HIDING="$symbol_hiding_CFLAGS" + AC_DEFINE_UNQUOTED(CARES_SYMBOL_SCOPE_EXTERN, $symbol_hiding_EXTERN, + [Definition to make a library symbol externally visible.]) + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + AM_CONDITIONAL(DOING_CARES_SYMBOL_HIDING, test x$doing_symbol_hiding = xyes) + AC_SUBST(CFLAG_CARES_SYMBOL_HIDING) + if test "$doing_symbol_hiding" = "yes"; then + AC_DEFINE_UNQUOTED(CARES_SYMBOL_HIDING, 1, + [Defined for build with symbol hiding.]) + fi +]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/cares-functions.m4 nodejs-mozilla-12.22.12/deps/cares/m4/cares-functions.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/cares-functions.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/cares-functions.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,3755 @@ +#*************************************************************************** +# +# Copyright (C) 2008 - 2012 by Daniel Stenberg et al +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose and without fee is hereby granted, provided +# that the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +#*************************************************************************** + +# File version for 'aclocal' use. Keep it a single number. +# serial 46 + + +dnl CARES_INCLUDES_ARPA_INET +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when arpa/inet.h is to be included. + +AC_DEFUN([CARES_INCLUDES_ARPA_INET], [ +cares_includes_arpa_inet="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h sys/socket.h netinet/in.h arpa/inet.h, + [], [], [$cares_includes_arpa_inet]) +]) + + +dnl CARES_INCLUDES_FCNTL +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when fcntl.h is to be included. + +AC_DEFUN([CARES_INCLUDES_FCNTL], [ +cares_includes_fcntl="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_FCNTL_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h unistd.h fcntl.h, + [], [], [$cares_includes_fcntl]) +]) + + +dnl CARES_INCLUDES_NETDB +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when netdb.h is to be included. + +AC_DEFUN([CARES_INCLUDES_NETDB], [ +cares_includes_netdb="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h netdb.h, + [], [], [$cares_includes_netdb]) +]) + + +dnl CARES_INCLUDES_SOCKET +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when socket.h is to be included. + +AC_DEFUN([CARES_INCLUDES_SOCKET], [ +cares_includes_socket="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SOCKET_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h socket.h, + [], [], [$cares_includes_socket]) +]) + + +dnl CARES_INCLUDES_STDLIB +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when stdlib.h is to be included. + +AC_DEFUN([CARES_INCLUDES_STDLIB], [ +cares_includes_stdlib="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_STDLIB_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h stdlib.h, + [], [], [$cares_includes_stdlib]) +]) + + +dnl CARES_INCLUDES_STRING +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when string(s).h is to be included. + +AC_DEFUN([CARES_INCLUDES_STRING], [ +cares_includes_string="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_STRING_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h string.h strings.h, + [], [], [$cares_includes_string]) +]) + + +dnl CARES_INCLUDES_STROPTS +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when stropts.h is to be included. + +AC_DEFUN([CARES_INCLUDES_STROPTS], [ +cares_includes_stropts="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef HAVE_STROPTS_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h unistd.h sys/socket.h sys/ioctl.h stropts.h, + [], [], [$cares_includes_stropts]) +]) + + +dnl CARES_INCLUDES_SYS_SOCKET +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when sys/socket.h is to be included. + +AC_DEFUN([CARES_INCLUDES_SYS_SOCKET], [ +cares_includes_sys_socket="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h sys/socket.h, + [], [], [$cares_includes_sys_socket]) +]) + + +dnl CARES_INCLUDES_SYS_TYPES +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when sys/types.h is to be included. + +AC_DEFUN([CARES_INCLUDES_SYS_TYPES], [ +cares_includes_sys_types="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h, + [], [], [$cares_includes_sys_types]) +]) + + +dnl CARES_INCLUDES_SYS_UIO +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when sys/uio.h is to be included. + +AC_DEFUN([CARES_INCLUDES_SYS_UIO], [ +cares_includes_sys_uio="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_UIO_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h sys/uio.h, + [], [], [$cares_includes_sys_uio]) +]) + + +dnl CARES_INCLUDES_UNISTD +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when unistd.h is to be included. + +AC_DEFUN([CARES_INCLUDES_UNISTD], [ +cares_includes_unistd="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +/* includes end */" + AC_CHECK_HEADERS( + sys/types.h unistd.h, + [], [], [$cares_includes_unistd]) +]) + + +dnl CARES_INCLUDES_WINSOCK2 +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when winsock(2).h is to be included. + +AC_DEFUN([CARES_INCLUDES_WINSOCK2], [ +cares_includes_winsock2="\ +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# ifdef HAVE_WINSOCK2_H +# include +# else +# ifdef HAVE_WINSOCK_H +# include +# endif +# endif +#endif +/* includes end */" + CURL_CHECK_HEADER_WINDOWS + CURL_CHECK_HEADER_WINSOCK + CURL_CHECK_HEADER_WINSOCK2 +]) + + +dnl CARES_INCLUDES_WS2TCPIP +dnl ------------------------------------------------- +dnl Set up variable with list of headers that must be +dnl included when ws2tcpip.h is to be included. + +AC_DEFUN([CARES_INCLUDES_WS2TCPIP], [ +cares_includes_ws2tcpip="\ +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# ifdef HAVE_WINSOCK2_H +# include +# ifdef HAVE_WS2TCPIP_H +# include +# endif +# endif +#endif +/* includes end */" + CURL_CHECK_HEADER_WINDOWS + CURL_CHECK_HEADER_WINSOCK2 + CURL_CHECK_HEADER_WS2TCPIP +]) + + +dnl CARES_PREPROCESS_CALLCONV +dnl ------------------------------------------------- +dnl Set up variable with a preprocessor block which +dnl defines function calling convention. + +AC_DEFUN([CARES_PREPROCESS_CALLCONV], [ +cares_preprocess_callconv="\ +/* preprocess start */ +#ifdef HAVE_WINDOWS_H +# define FUNCALLCONV __stdcall +#else +# define FUNCALLCONV +#endif +/* preprocess end */" +]) + + +dnl CARES_CHECK_FUNC_CLOSESOCKET +dnl ------------------------------------------------- +dnl Verify if closesocket is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_closesocket, then +dnl HAVE_CLOSESOCKET will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_CLOSESOCKET], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CARES_INCLUDES_SOCKET])dnl + # + tst_links_closesocket="unknown" + tst_proto_closesocket="unknown" + tst_compi_closesocket="unknown" + tst_allow_closesocket="unknown" + # + AC_MSG_CHECKING([if closesocket can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_socket + ]],[[ + if(0 != closesocket(0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_closesocket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_closesocket="no" + ]) + # + if test "$tst_links_closesocket" = "yes"; then + AC_MSG_CHECKING([if closesocket is prototyped]) + AC_EGREP_CPP([closesocket],[ + $cares_includes_winsock2 + $cares_includes_socket + ],[ + AC_MSG_RESULT([yes]) + tst_proto_closesocket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_closesocket="no" + ]) + fi + # + if test "$tst_proto_closesocket" = "yes"; then + AC_MSG_CHECKING([if closesocket is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_socket + ]],[[ + if(0 != closesocket(0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_closesocket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_closesocket="no" + ]) + fi + # + if test "$tst_compi_closesocket" = "yes"; then + AC_MSG_CHECKING([if closesocket usage allowed]) + if test "x$cares_disallow_closesocket" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_closesocket="yes" + else + AC_MSG_RESULT([no]) + tst_allow_closesocket="no" + fi + fi + # + AC_MSG_CHECKING([if closesocket might be used]) + if test "$tst_links_closesocket" = "yes" && + test "$tst_proto_closesocket" = "yes" && + test "$tst_compi_closesocket" = "yes" && + test "$tst_allow_closesocket" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_CLOSESOCKET, 1, + [Define to 1 if you have the closesocket function.]) + ac_cv_func_closesocket="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_closesocket="no" + fi +]) + + +dnl CARES_CHECK_FUNC_CLOSESOCKET_CAMEL +dnl ------------------------------------------------- +dnl Verify if CloseSocket is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_closesocket_camel, +dnl then HAVE_CLOSESOCKET_CAMEL will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_CLOSESOCKET_CAMEL], [ + AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl + # + tst_links_closesocket_camel="unknown" + tst_proto_closesocket_camel="unknown" + tst_compi_closesocket_camel="unknown" + tst_allow_closesocket_camel="unknown" + # + AC_MSG_CHECKING([if CloseSocket can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_sys_socket + ]],[[ + if(0 != CloseSocket(0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_closesocket_camel="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_closesocket_camel="no" + ]) + # + if test "$tst_links_closesocket_camel" = "yes"; then + AC_MSG_CHECKING([if CloseSocket is prototyped]) + AC_EGREP_CPP([CloseSocket],[ + $cares_includes_sys_socket + ],[ + AC_MSG_RESULT([yes]) + tst_proto_closesocket_camel="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_closesocket_camel="no" + ]) + fi + # + if test "$tst_proto_closesocket_camel" = "yes"; then + AC_MSG_CHECKING([if CloseSocket is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_sys_socket + ]],[[ + if(0 != CloseSocket(0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_closesocket_camel="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_closesocket_camel="no" + ]) + fi + # + if test "$tst_compi_closesocket_camel" = "yes"; then + AC_MSG_CHECKING([if CloseSocket usage allowed]) + if test "x$cares_disallow_closesocket_camel" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_closesocket_camel="yes" + else + AC_MSG_RESULT([no]) + tst_allow_closesocket_camel="no" + fi + fi + # + AC_MSG_CHECKING([if CloseSocket might be used]) + if test "$tst_links_closesocket_camel" = "yes" && + test "$tst_proto_closesocket_camel" = "yes" && + test "$tst_compi_closesocket_camel" = "yes" && + test "$tst_allow_closesocket_camel" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_CLOSESOCKET_CAMEL, 1, + [Define to 1 if you have the CloseSocket camel case function.]) + ac_cv_func_closesocket_camel="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_closesocket_camel="no" + fi +]) + + +dnl CARES_CHECK_FUNC_CONNECT +dnl ------------------------------------------------- +dnl Verify if connect is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_connect, then +dnl HAVE_CONNECT will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_CONNECT], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl + AC_REQUIRE([CARES_INCLUDES_SOCKET])dnl + # + tst_links_connect="unknown" + tst_proto_connect="unknown" + tst_compi_connect="unknown" + tst_allow_connect="unknown" + # + AC_MSG_CHECKING([if connect can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + ]],[[ + if(0 != connect(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_connect="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_connect="no" + ]) + # + if test "$tst_links_connect" = "yes"; then + AC_MSG_CHECKING([if connect is prototyped]) + AC_EGREP_CPP([connect],[ + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + ],[ + AC_MSG_RESULT([yes]) + tst_proto_connect="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_connect="no" + ]) + fi + # + if test "$tst_proto_connect" = "yes"; then + AC_MSG_CHECKING([if connect is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + ]],[[ + if(0 != connect(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_connect="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_connect="no" + ]) + fi + # + if test "$tst_compi_connect" = "yes"; then + AC_MSG_CHECKING([if connect usage allowed]) + if test "x$cares_disallow_connect" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_connect="yes" + else + AC_MSG_RESULT([no]) + tst_allow_connect="no" + fi + fi + # + AC_MSG_CHECKING([if connect might be used]) + if test "$tst_links_connect" = "yes" && + test "$tst_proto_connect" = "yes" && + test "$tst_compi_connect" = "yes" && + test "$tst_allow_connect" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_CONNECT, 1, + [Define to 1 if you have the connect function.]) + ac_cv_func_connect="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_connect="no" + fi +]) + + +dnl CARES_CHECK_FUNC_FCNTL +dnl ------------------------------------------------- +dnl Verify if fcntl is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_fcntl, then +dnl HAVE_FCNTL will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_FCNTL], [ + AC_REQUIRE([CARES_INCLUDES_FCNTL])dnl + # + tst_links_fcntl="unknown" + tst_proto_fcntl="unknown" + tst_compi_fcntl="unknown" + tst_allow_fcntl="unknown" + # + AC_MSG_CHECKING([if fcntl can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([fcntl]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_fcntl="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_fcntl="no" + ]) + # + if test "$tst_links_fcntl" = "yes"; then + AC_MSG_CHECKING([if fcntl is prototyped]) + AC_EGREP_CPP([fcntl],[ + $cares_includes_fcntl + ],[ + AC_MSG_RESULT([yes]) + tst_proto_fcntl="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_fcntl="no" + ]) + fi + # + if test "$tst_proto_fcntl" = "yes"; then + AC_MSG_CHECKING([if fcntl is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_fcntl + ]],[[ + if(0 != fcntl(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_fcntl="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_fcntl="no" + ]) + fi + # + if test "$tst_compi_fcntl" = "yes"; then + AC_MSG_CHECKING([if fcntl usage allowed]) + if test "x$cares_disallow_fcntl" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_fcntl="yes" + else + AC_MSG_RESULT([no]) + tst_allow_fcntl="no" + fi + fi + # + AC_MSG_CHECKING([if fcntl might be used]) + if test "$tst_links_fcntl" = "yes" && + test "$tst_proto_fcntl" = "yes" && + test "$tst_compi_fcntl" = "yes" && + test "$tst_allow_fcntl" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_FCNTL, 1, + [Define to 1 if you have the fcntl function.]) + ac_cv_func_fcntl="yes" + CARES_CHECK_FUNC_FCNTL_O_NONBLOCK + else + AC_MSG_RESULT([no]) + ac_cv_func_fcntl="no" + fi +]) + + +dnl CARES_CHECK_FUNC_FCNTL_O_NONBLOCK +dnl ------------------------------------------------- +dnl Verify if fcntl with status flag O_NONBLOCK is +dnl available, can be compiled, and seems to work. If +dnl all of these are true, then HAVE_FCNTL_O_NONBLOCK +dnl will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_FCNTL_O_NONBLOCK], [ + # + tst_compi_fcntl_o_nonblock="unknown" + tst_allow_fcntl_o_nonblock="unknown" + # + case $host_os in + sunos4* | aix3* | beos*) + dnl O_NONBLOCK does not work on these platforms + cares_disallow_fcntl_o_nonblock="yes" + ;; + esac + # + if test "$ac_cv_func_fcntl" = "yes"; then + AC_MSG_CHECKING([if fcntl O_NONBLOCK is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_fcntl + ]],[[ + int flags = 0; + if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_fcntl_o_nonblock="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_fcntl_o_nonblock="no" + ]) + fi + # + if test "$tst_compi_fcntl_o_nonblock" = "yes"; then + AC_MSG_CHECKING([if fcntl O_NONBLOCK usage allowed]) + if test "x$cares_disallow_fcntl_o_nonblock" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_fcntl_o_nonblock="yes" + else + AC_MSG_RESULT([no]) + tst_allow_fcntl_o_nonblock="no" + fi + fi + # + AC_MSG_CHECKING([if fcntl O_NONBLOCK might be used]) + if test "$tst_compi_fcntl_o_nonblock" = "yes" && + test "$tst_allow_fcntl_o_nonblock" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_FCNTL_O_NONBLOCK, 1, + [Define to 1 if you have a working fcntl O_NONBLOCK function.]) + ac_cv_func_fcntl_o_nonblock="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_fcntl_o_nonblock="no" + fi +]) + + +dnl CARES_CHECK_FUNC_FREEADDRINFO +dnl ------------------------------------------------- +dnl Verify if freeaddrinfo is available, prototyped, +dnl and can be compiled. If all of these are true, +dnl and usage has not been previously disallowed with +dnl shell variable cares_disallow_freeaddrinfo, then +dnl HAVE_FREEADDRINFO will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_FREEADDRINFO], [ + AC_REQUIRE([CARES_INCLUDES_WS2TCPIP])dnl + AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl + AC_REQUIRE([CARES_INCLUDES_NETDB])dnl + # + tst_links_freeaddrinfo="unknown" + tst_proto_freeaddrinfo="unknown" + tst_compi_freeaddrinfo="unknown" + tst_allow_freeaddrinfo="unknown" + # + AC_MSG_CHECKING([if freeaddrinfo can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + ]],[[ + freeaddrinfo(0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_freeaddrinfo="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_freeaddrinfo="no" + ]) + # + if test "$tst_links_freeaddrinfo" = "yes"; then + AC_MSG_CHECKING([if freeaddrinfo is prototyped]) + AC_EGREP_CPP([freeaddrinfo],[ + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + ],[ + AC_MSG_RESULT([yes]) + tst_proto_freeaddrinfo="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_freeaddrinfo="no" + ]) + fi + # + if test "$tst_proto_freeaddrinfo" = "yes"; then + AC_MSG_CHECKING([if freeaddrinfo is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + ]],[[ + freeaddrinfo(0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_freeaddrinfo="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_freeaddrinfo="no" + ]) + fi + # + if test "$tst_compi_freeaddrinfo" = "yes"; then + AC_MSG_CHECKING([if freeaddrinfo usage allowed]) + if test "x$cares_disallow_freeaddrinfo" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_freeaddrinfo="yes" + else + AC_MSG_RESULT([no]) + tst_allow_freeaddrinfo="no" + fi + fi + # + AC_MSG_CHECKING([if freeaddrinfo might be used]) + if test "$tst_links_freeaddrinfo" = "yes" && + test "$tst_proto_freeaddrinfo" = "yes" && + test "$tst_compi_freeaddrinfo" = "yes" && + test "$tst_allow_freeaddrinfo" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_FREEADDRINFO, 1, + [Define to 1 if you have the freeaddrinfo function.]) + ac_cv_func_freeaddrinfo="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_freeaddrinfo="no" + fi +]) + + +dnl CARES_CHECK_FUNC_GETADDRINFO +dnl ------------------------------------------------- +dnl Verify if getaddrinfo is available, prototyped, can +dnl be compiled and seems to work. If all of these are +dnl true, and usage has not been previously disallowed +dnl with shell variable cares_disallow_getaddrinfo, then +dnl HAVE_GETADDRINFO will be defined. Additionally when +dnl HAVE_GETADDRINFO gets defined this will also attempt +dnl to find out if getaddrinfo happens to be threadsafe, +dnl defining HAVE_GETADDRINFO_THREADSAFE when true. + +AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO], [ + AC_REQUIRE([CARES_INCLUDES_WS2TCPIP])dnl + AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl + AC_REQUIRE([CARES_INCLUDES_NETDB])dnl + AC_REQUIRE([CURL_CHECK_NATIVE_WINDOWS])dnl + # + tst_links_getaddrinfo="unknown" + tst_proto_getaddrinfo="unknown" + tst_compi_getaddrinfo="unknown" + tst_works_getaddrinfo="unknown" + tst_allow_getaddrinfo="unknown" + tst_tsafe_getaddrinfo="unknown" + # + AC_MSG_CHECKING([if getaddrinfo can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + ]],[[ + if(0 != getaddrinfo(0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_getaddrinfo="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_getaddrinfo="no" + ]) + # + if test "$tst_links_getaddrinfo" = "yes"; then + AC_MSG_CHECKING([if getaddrinfo is prototyped]) + AC_EGREP_CPP([getaddrinfo],[ + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + ],[ + AC_MSG_RESULT([yes]) + tst_proto_getaddrinfo="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_getaddrinfo="no" + ]) + fi + # + if test "$tst_proto_getaddrinfo" = "yes"; then + AC_MSG_CHECKING([if getaddrinfo is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_ws2tcpip + $cares_includes_sys_socket + $cares_includes_netdb + ]],[[ + if(0 != getaddrinfo(0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_getaddrinfo="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_getaddrinfo="no" + ]) + fi + # + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$tst_compi_getaddrinfo" = "yes"; then + AC_MSG_CHECKING([if getaddrinfo seems to work]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_ws2tcpip + $cares_includes_stdlib + $cares_includes_string + $cares_includes_sys_socket + $cares_includes_netdb + ]],[[ + struct addrinfo hints; + struct addrinfo *ai = 0; + int error; + + memset(&hints, 0, sizeof(hints)); + hints.ai_flags = AI_NUMERICHOST; + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + error = getaddrinfo("127.0.0.1", 0, &hints, &ai); + if(error || !ai) + exit(1); /* fail */ + else + exit(0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_works_getaddrinfo="yes" + ],[ + AC_MSG_RESULT([no]) + tst_works_getaddrinfo="no" + ]) + fi + # + if test "$tst_compi_getaddrinfo" = "yes" && + test "$tst_works_getaddrinfo" != "no"; then + AC_MSG_CHECKING([if getaddrinfo usage allowed]) + if test "x$cares_disallow_getaddrinfo" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_getaddrinfo="yes" + else + AC_MSG_RESULT([no]) + tst_allow_getaddrinfo="no" + fi + fi + # + AC_MSG_CHECKING([if getaddrinfo might be used]) + if test "$tst_links_getaddrinfo" = "yes" && + test "$tst_proto_getaddrinfo" = "yes" && + test "$tst_compi_getaddrinfo" = "yes" && + test "$tst_allow_getaddrinfo" = "yes" && + test "$tst_works_getaddrinfo" != "no"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO, 1, + [Define to 1 if you have a working getaddrinfo function.]) + ac_cv_func_getaddrinfo="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_getaddrinfo="no" + ac_cv_func_getaddrinfo_threadsafe="no" + fi + # + if test "$ac_cv_func_getaddrinfo" = "yes"; then + AC_MSG_CHECKING([if getaddrinfo is threadsafe]) + case $host_os in + aix[[1234]].* | aix5.[[01]].*) + dnl aix 5.1 and older + tst_tsafe_getaddrinfo="no" + ;; + aix*) + dnl aix 5.2 and newer + tst_tsafe_getaddrinfo="yes" + ;; + darwin[[12345]].*) + dnl darwin 5.0 and mac os x 10.1.X and older + tst_tsafe_getaddrinfo="no" + ;; + darwin*) + dnl darwin 6.0 and mac os x 10.2.X and newer + tst_tsafe_getaddrinfo="yes" + ;; + freebsd[[1234]].* | freebsd5.[[1234]]*) + dnl freebsd 5.4 and older + tst_tsafe_getaddrinfo="no" + ;; + freebsd*) + dnl freebsd 5.5 and newer + tst_tsafe_getaddrinfo="yes" + ;; + hpux[[123456789]].* | hpux10.* | hpux11.0* | hpux11.10*) + dnl hpux 11.10 and older + tst_tsafe_getaddrinfo="no" + ;; + hpux*) + dnl hpux 11.11 and newer + tst_tsafe_getaddrinfo="yes" + ;; + netbsd[[123]].*) + dnl netbsd 3.X and older + tst_tsafe_getaddrinfo="no" + ;; + netbsd*) + dnl netbsd 4.X and newer + tst_tsafe_getaddrinfo="yes" + ;; + *bsd*) + dnl All other bsd's + tst_tsafe_getaddrinfo="no" + ;; + solaris2*) + dnl solaris which have it + tst_tsafe_getaddrinfo="yes" + ;; + esac + if test "$tst_tsafe_getaddrinfo" = "unknown" && + test "$ac_cv_native_windows" = "yes"; then + tst_tsafe_getaddrinfo="yes" + fi + if test "$tst_tsafe_getaddrinfo" = "unknown"; then + CURL_CHECK_DEF_CC([h_errno], [ + $cares_includes_sys_socket + $cares_includes_netdb + ], [silent]) + if test "$curl_cv_have_def_h_errno" = "yes"; then + tst_h_errno_macro="yes" + else + tst_h_errno_macro="no" + fi + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_sys_socket + $cares_includes_netdb + ]],[[ + h_errno = 2; + if(0 != h_errno) + return 1; + ]]) + ],[ + tst_h_errno_modifiable_lvalue="yes" + ],[ + tst_h_errno_modifiable_lvalue="no" + ]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ +#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L) + return 0; +#elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700) + return 0; +#else + force compilation error +#endif + ]]) + ],[ + tst_h_errno_sbs_issue_7="yes" + ],[ + tst_h_errno_sbs_issue_7="no" + ]) + if test "$tst_h_errno_macro" = "no" && + test "$tst_h_errno_modifiable_lvalue" = "no" && + test "$tst_h_errno_sbs_issue_7" = "no"; then + tst_tsafe_getaddrinfo="no" + else + tst_tsafe_getaddrinfo="yes" + fi + fi + AC_MSG_RESULT([$tst_tsafe_getaddrinfo]) + if test "$tst_tsafe_getaddrinfo" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_THREADSAFE, 1, + [Define to 1 if the getaddrinfo function is threadsafe.]) + ac_cv_func_getaddrinfo_threadsafe="yes" + else + ac_cv_func_getaddrinfo_threadsafe="no" + fi + fi +]) + + +dnl CARES_CHECK_FUNC_GETENV +dnl ------------------------------------------------- +dnl Verify if getenv is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_getenv, then +dnl HAVE_GETENV will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_GETENV], [ + AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl + # + tst_links_getenv="unknown" + tst_proto_getenv="unknown" + tst_compi_getenv="unknown" + tst_allow_getenv="unknown" + # + AC_MSG_CHECKING([if getenv can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([getenv]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_getenv="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_getenv="no" + ]) + # + if test "$tst_links_getenv" = "yes"; then + AC_MSG_CHECKING([if getenv is prototyped]) + AC_EGREP_CPP([getenv],[ + $cares_includes_stdlib + ],[ + AC_MSG_RESULT([yes]) + tst_proto_getenv="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_getenv="no" + ]) + fi + # + if test "$tst_proto_getenv" = "yes"; then + AC_MSG_CHECKING([if getenv is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stdlib + ]],[[ + if(0 != getenv(0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_getenv="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_getenv="no" + ]) + fi + # + if test "$tst_compi_getenv" = "yes"; then + AC_MSG_CHECKING([if getenv usage allowed]) + if test "x$cares_disallow_getenv" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_getenv="yes" + else + AC_MSG_RESULT([no]) + tst_allow_getenv="no" + fi + fi + # + AC_MSG_CHECKING([if getenv might be used]) + if test "$tst_links_getenv" = "yes" && + test "$tst_proto_getenv" = "yes" && + test "$tst_compi_getenv" = "yes" && + test "$tst_allow_getenv" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_GETENV, 1, + [Define to 1 if you have the getenv function.]) + ac_cv_func_getenv="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_getenv="no" + fi +]) + + +dnl CARES_CHECK_FUNC_GETHOSTBYADDR +dnl ------------------------------------------------- +dnl Verify if gethostbyaddr is available, prototyped, +dnl and can be compiled. If all of these are true, +dnl and usage has not been previously disallowed with +dnl shell variable cares_disallow_gethostbyaddr, then +dnl HAVE_GETHOSTBYADDR will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_GETHOSTBYADDR], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CARES_INCLUDES_NETDB])dnl + # + tst_links_gethostbyaddr="unknown" + tst_proto_gethostbyaddr="unknown" + tst_compi_gethostbyaddr="unknown" + tst_allow_gethostbyaddr="unknown" + # + AC_MSG_CHECKING([if gethostbyaddr can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_netdb + ]],[[ + if(0 != gethostbyaddr(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_gethostbyaddr="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_gethostbyaddr="no" + ]) + # + if test "$tst_links_gethostbyaddr" = "yes"; then + AC_MSG_CHECKING([if gethostbyaddr is prototyped]) + AC_EGREP_CPP([gethostbyaddr],[ + $cares_includes_winsock2 + $cares_includes_netdb + ],[ + AC_MSG_RESULT([yes]) + tst_proto_gethostbyaddr="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_gethostbyaddr="no" + ]) + fi + # + if test "$tst_proto_gethostbyaddr" = "yes"; then + AC_MSG_CHECKING([if gethostbyaddr is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_netdb + ]],[[ + if(0 != gethostbyaddr(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_gethostbyaddr="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_gethostbyaddr="no" + ]) + fi + # + if test "$tst_compi_gethostbyaddr" = "yes"; then + AC_MSG_CHECKING([if gethostbyaddr usage allowed]) + if test "x$cares_disallow_gethostbyaddr" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_gethostbyaddr="yes" + else + AC_MSG_RESULT([no]) + tst_allow_gethostbyaddr="no" + fi + fi + # + AC_MSG_CHECKING([if gethostbyaddr might be used]) + if test "$tst_links_gethostbyaddr" = "yes" && + test "$tst_proto_gethostbyaddr" = "yes" && + test "$tst_compi_gethostbyaddr" = "yes" && + test "$tst_allow_gethostbyaddr" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYADDR, 1, + [Define to 1 if you have the gethostbyaddr function.]) + ac_cv_func_gethostbyaddr="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_gethostbyaddr="no" + fi +]) + + +dnl CARES_CHECK_FUNC_GETHOSTBYNAME +dnl ------------------------------------------------- +dnl Verify if gethostbyname is available, prototyped, +dnl and can be compiled. If all of these are true, +dnl and usage has not been previously disallowed with +dnl shell variable cares_disallow_gethostbyname, then +dnl HAVE_GETHOSTBYNAME will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_GETHOSTBYNAME], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CARES_INCLUDES_NETDB])dnl + # + tst_links_gethostbyname="unknown" + tst_proto_gethostbyname="unknown" + tst_compi_gethostbyname="unknown" + tst_allow_gethostbyname="unknown" + # + AC_MSG_CHECKING([if gethostbyname can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_netdb + ]],[[ + if(0 != gethostbyname(0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_gethostbyname="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_gethostbyname="no" + ]) + # + if test "$tst_links_gethostbyname" = "yes"; then + AC_MSG_CHECKING([if gethostbyname is prototyped]) + AC_EGREP_CPP([gethostbyname],[ + $cares_includes_winsock2 + $cares_includes_netdb + ],[ + AC_MSG_RESULT([yes]) + tst_proto_gethostbyname="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_gethostbyname="no" + ]) + fi + # + if test "$tst_proto_gethostbyname" = "yes"; then + AC_MSG_CHECKING([if gethostbyname is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_netdb + ]],[[ + if(0 != gethostbyname(0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_gethostbyname="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_gethostbyname="no" + ]) + fi + # + if test "$tst_compi_gethostbyname" = "yes"; then + AC_MSG_CHECKING([if gethostbyname usage allowed]) + if test "x$cares_disallow_gethostbyname" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_gethostbyname="yes" + else + AC_MSG_RESULT([no]) + tst_allow_gethostbyname="no" + fi + fi + # + AC_MSG_CHECKING([if gethostbyname might be used]) + if test "$tst_links_gethostbyname" = "yes" && + test "$tst_proto_gethostbyname" = "yes" && + test "$tst_compi_gethostbyname" = "yes" && + test "$tst_allow_gethostbyname" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_GETHOSTBYNAME, 1, + [Define to 1 if you have the gethostbyname function.]) + ac_cv_func_gethostbyname="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_gethostbyname="no" + fi +]) + + +dnl CARES_CHECK_FUNC_GETHOSTNAME +dnl ------------------------------------------------- +dnl Verify if gethostname is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_gethostname, then +dnl HAVE_GETHOSTNAME will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_GETHOSTNAME], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CARES_INCLUDES_UNISTD])dnl + AC_REQUIRE([CARES_PREPROCESS_CALLCONV])dnl + # + tst_links_gethostname="unknown" + tst_proto_gethostname="unknown" + tst_compi_gethostname="unknown" + tst_allow_gethostname="unknown" + # + AC_MSG_CHECKING([if gethostname can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_unistd + ]],[[ + if(0 != gethostname(0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_gethostname="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_gethostname="no" + ]) + # + if test "$tst_links_gethostname" = "yes"; then + AC_MSG_CHECKING([if gethostname is prototyped]) + AC_EGREP_CPP([gethostname],[ + $cares_includes_winsock2 + $cares_includes_unistd + ],[ + AC_MSG_RESULT([yes]) + tst_proto_gethostname="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_gethostname="no" + ]) + fi + # + if test "$tst_proto_gethostname" = "yes"; then + AC_MSG_CHECKING([if gethostname is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_unistd + ]],[[ + if(0 != gethostname(0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_gethostname="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_gethostname="no" + ]) + fi + # + if test "$tst_compi_gethostname" = "yes"; then + AC_MSG_CHECKING([for gethostname arg 2 data type]) + tst_gethostname_type_arg2="unknown" + for tst_arg1 in 'char *' 'unsigned char *' 'void *'; do + for tst_arg2 in 'int' 'unsigned int' 'size_t'; do + if test "$tst_gethostname_type_arg2" = "unknown"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_unistd + $cares_preprocess_callconv + extern int FUNCALLCONV gethostname($tst_arg1, $tst_arg2); + ]],[[ + if(0 != gethostname(0, 0)) + return 1; + ]]) + ],[ + tst_gethostname_type_arg2="$tst_arg2" + ]) + fi + done + done + AC_MSG_RESULT([$tst_gethostname_type_arg2]) + if test "$tst_gethostname_type_arg2" != "unknown"; then + AC_DEFINE_UNQUOTED(GETHOSTNAME_TYPE_ARG2, $tst_gethostname_type_arg2, + [Define to the type of arg 2 for gethostname.]) + fi + fi + # + if test "$tst_compi_gethostname" = "yes"; then + AC_MSG_CHECKING([if gethostname usage allowed]) + if test "x$cares_disallow_gethostname" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_gethostname="yes" + else + AC_MSG_RESULT([no]) + tst_allow_gethostname="no" + fi + fi + # + AC_MSG_CHECKING([if gethostname might be used]) + if test "$tst_links_gethostname" = "yes" && + test "$tst_proto_gethostname" = "yes" && + test "$tst_compi_gethostname" = "yes" && + test "$tst_allow_gethostname" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_GETHOSTNAME, 1, + [Define to 1 if you have the gethostname function.]) + ac_cv_func_gethostname="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_gethostname="no" + fi +]) + + +dnl CARES_CHECK_FUNC_GETSERVBYPORT_R +dnl ------------------------------------------------- +dnl Verify if getservbyport_r is available, prototyped, +dnl and can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_getservbyport_r, then +dnl HAVE_GETSERVBYPORT_R will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_GETSERVBYPORT_R], [ + AC_REQUIRE([CARES_INCLUDES_NETDB])dnl + # + tst_links_getservbyport_r="unknown" + tst_proto_getservbyport_r="unknown" + tst_compi_getservbyport_r="unknown" + tst_allow_getservbyport_r="unknown" + tst_nargs_getservbyport_r="unknown" + # + AC_MSG_CHECKING([if getservbyport_r can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([getservbyport_r]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_getservbyport_r="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_getservbyport_r="no" + ]) + # + if test "$tst_links_getservbyport_r" = "yes"; then + AC_MSG_CHECKING([if getservbyport_r is prototyped]) + AC_EGREP_CPP([getservbyport_r],[ + $cares_includes_netdb + ],[ + AC_MSG_RESULT([yes]) + tst_proto_getservbyport_r="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_getservbyport_r="no" + ]) + fi + # + if test "$tst_proto_getservbyport_r" = "yes"; then + if test "$tst_nargs_getservbyport_r" = "unknown"; then + AC_MSG_CHECKING([if getservbyport_r takes 4 args.]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_netdb + ]],[[ + if(0 != getservbyport_r(0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_getservbyport_r="yes" + tst_nargs_getservbyport_r="4" + ],[ + AC_MSG_RESULT([no]) + tst_compi_getservbyport_r="no" + ]) + fi + if test "$tst_nargs_getservbyport_r" = "unknown"; then + AC_MSG_CHECKING([if getservbyport_r takes 5 args.]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_netdb + ]],[[ + if(0 != getservbyport_r(0, 0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_getservbyport_r="yes" + tst_nargs_getservbyport_r="5" + ],[ + AC_MSG_RESULT([no]) + tst_compi_getservbyport_r="no" + ]) + fi + if test "$tst_nargs_getservbyport_r" = "unknown"; then + AC_MSG_CHECKING([if getservbyport_r takes 6 args.]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_netdb + ]],[[ + if(0 != getservbyport_r(0, 0, 0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_getservbyport_r="yes" + tst_nargs_getservbyport_r="6" + ],[ + AC_MSG_RESULT([no]) + tst_compi_getservbyport_r="no" + ]) + fi + AC_MSG_CHECKING([if getservbyport_r is compilable]) + if test "$tst_compi_getservbyport_r" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + fi + # + if test "$tst_compi_getservbyport_r" = "yes"; then + AC_MSG_CHECKING([if getservbyport_r usage allowed]) + if test "x$cares_disallow_getservbyport_r" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_getservbyport_r="yes" + else + AC_MSG_RESULT([no]) + tst_allow_getservbyport_r="no" + fi + fi + # + AC_MSG_CHECKING([if getservbyport_r might be used]) + if test "$tst_links_getservbyport_r" = "yes" && + test "$tst_proto_getservbyport_r" = "yes" && + test "$tst_compi_getservbyport_r" = "yes" && + test "$tst_allow_getservbyport_r" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_GETSERVBYPORT_R, 1, + [Define to 1 if you have the getservbyport_r function.]) + AC_DEFINE_UNQUOTED(GETSERVBYPORT_R_ARGS, $tst_nargs_getservbyport_r, + [Specifies the number of arguments to getservbyport_r]) + if test "$tst_nargs_getservbyport_r" -eq "4"; then + AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, sizeof(struct servent_data), + [Specifies the size of the buffer to pass to getservbyport_r]) + else + AC_DEFINE(GETSERVBYPORT_R_BUFSIZE, 4096, + [Specifies the size of the buffer to pass to getservbyport_r]) + fi + ac_cv_func_getservbyport_r="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_getservbyport_r="no" + fi +]) + + +dnl CARES_CHECK_FUNC_GETSERVBYNAME_R +dnl ------------------------------------------------- +dnl Verify if getservbyname_r is available, prototyped, +dnl and can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_getservbyname_r, then +dnl HAVE_GETSERVBYNAME_R will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_GETSERVBYNAME_R], [ + AC_REQUIRE([CARES_INCLUDES_NETDB])dnl + # + tst_links_getservbyname_r="unknown" + tst_proto_getservbyname_r="unknown" + tst_compi_getservbyname_r="unknown" + tst_allow_getservbyname_r="unknown" + tst_nargs_getservbyname_r="unknown" + # + AC_MSG_CHECKING([if getservbyname_r can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([getservbyname_r]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_getservbyname_r="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_getservbyname_r="no" + ]) + # + if test "$tst_links_getservbyname_r" = "yes"; then + AC_MSG_CHECKING([if getservbyname_r is prototyped]) + AC_EGREP_CPP([getservbyname_r],[ + $cares_includes_netdb + ],[ + AC_MSG_RESULT([yes]) + tst_proto_getservbyname_r="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_getservbyname_r="no" + ]) + fi + # + if test "$tst_proto_getservbyname_r" = "yes"; then + if test "$tst_nargs_getservbyname_r" = "unknown"; then + AC_MSG_CHECKING([if getservbyname_r takes 4 args.]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_netdb + ]],[[ + if(0 != getservbyname_r(0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_getservbyname_r="yes" + tst_nargs_getservbyname_r="4" + ],[ + AC_MSG_RESULT([no]) + tst_compi_getservbyname_r="no" + ]) + fi + if test "$tst_nargs_getservbyname_r" = "unknown"; then + AC_MSG_CHECKING([if getservbyname_r takes 5 args.]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_netdb + ]],[[ + if(0 != getservbyname_r(0, 0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_getservbyname_r="yes" + tst_nargs_getservbyname_r="5" + ],[ + AC_MSG_RESULT([no]) + tst_compi_getservbyname_r="no" + ]) + fi + if test "$tst_nargs_getservbyname_r" = "unknown"; then + AC_MSG_CHECKING([if getservbyname_r takes 6 args.]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_netdb + ]],[[ + if(0 != getservbyname_r(0, 0, 0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_getservbyname_r="yes" + tst_nargs_getservbyname_r="6" + ],[ + AC_MSG_RESULT([no]) + tst_compi_getservbyname_r="no" + ]) + fi + AC_MSG_CHECKING([if getservbyname_r is compilable]) + if test "$tst_compi_getservbyname_r" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + fi + # + if test "$tst_compi_getservbyname_r" = "yes"; then + AC_MSG_CHECKING([if getservbyname_r usage allowed]) + if test "x$cares_disallow_getservbyname_r" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_getservbyname_r="yes" + else + AC_MSG_RESULT([no]) + tst_allow_getservbyname_r="no" + fi + fi + # + AC_MSG_CHECKING([if getservbyname_r might be used]) + if test "$tst_links_getservbyname_r" = "yes" && + test "$tst_proto_getservbyname_r" = "yes" && + test "$tst_compi_getservbyname_r" = "yes" && + test "$tst_allow_getservbyname_r" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_GETSERVBYNAME_R, 1, + [Define to 1 if you have the getservbyname_r function.]) + AC_DEFINE_UNQUOTED(GETSERVBYNAME_R_ARGS, $tst_nargs_getservbyname_r, + [Specifies the number of arguments to getservbyname_r]) + if test "$tst_nargs_getservbyname_r" -eq "4"; then + AC_DEFINE(GETSERVBYNAME_R_BUFSIZE, sizeof(struct servent_data), + [Specifies the size of the buffer to pass to getservbyname_r]) + else + AC_DEFINE(GETSERVBYNAME_R_BUFSIZE, 4096, + [Specifies the size of the buffer to pass to getservbyname_r]) + fi + ac_cv_func_getservbyname_r="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_getservbyname_r="no" + fi +]) + + +dnl CARES_CHECK_FUNC_INET_NET_PTON +dnl ------------------------------------------------- +dnl Verify if inet_net_pton is available, prototyped, can +dnl be compiled and seems to work. If all of these are +dnl true, and usage has not been previously disallowed +dnl with shell variable cares_disallow_inet_net_pton, then +dnl HAVE_INET_NET_PTON will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_INET_NET_PTON], [ + AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl + AC_REQUIRE([CARES_INCLUDES_ARPA_INET])dnl + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_inet_net_pton="unknown" + tst_proto_inet_net_pton="unknown" + tst_compi_inet_net_pton="unknown" + tst_works_inet_net_pton="unknown" + tst_allow_inet_net_pton="unknown" + # + AC_MSG_CHECKING([if inet_net_pton can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([inet_net_pton]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_inet_net_pton="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_inet_net_pton="no" + ]) + # + if test "$tst_links_inet_net_pton" = "yes"; then + AC_MSG_CHECKING([if inet_net_pton is prototyped]) + AC_EGREP_CPP([inet_net_pton],[ + $cares_includes_arpa_inet + ],[ + AC_MSG_RESULT([yes]) + tst_proto_inet_net_pton="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_inet_net_pton="no" + ]) + fi + # + if test "$tst_proto_inet_net_pton" = "yes"; then + AC_MSG_CHECKING([if inet_net_pton is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_arpa_inet + ]],[[ + if(0 != inet_net_pton(0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_inet_net_pton="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_inet_net_pton="no" + ]) + fi + # + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$tst_compi_inet_net_pton" = "yes"; then + AC_MSG_CHECKING([if inet_net_pton seems to work]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stdlib + $cares_includes_arpa_inet + $cares_includes_string + ]],[[ + unsigned char ipv6a[16+1]; + unsigned char ipv4a[4+1]; + const char *ipv6net1 = "fe80::214:4fff:fe0b:76c8"; + const char *ipv6net2 = "::fffe:7f00:1"; + const char *ipv6net3 = "7f20:1::/64"; + const char *ipv6net4 = "7f20:1::/2147483649"; + const char *ipv4net1 = "192.168.100.1"; + const char *ipv4net2 = "192.168.100/32"; + const char *ipv4net3 = "192.168.100.1/2147483649"; + /* - */ + memset(ipv4a, 1, sizeof(ipv4a)); + if(32 != inet_net_pton(AF_INET, ipv4net1, ipv4a, 4)) + exit(1); /* fail */ + /* - */ + if( (ipv4a[0x00] != 0xc0) || + (ipv4a[0x01] != 0xa8) || + (ipv4a[0x02] != 0x64) || + (ipv4a[0x03] != 0x01) || + (ipv4a[0x04] != 0x01) ) + exit(1); /* fail */ + /* - */ + memset(ipv4a, 1, sizeof(ipv4a)); + if(32 != inet_net_pton(AF_INET, ipv4net2, ipv4a, 4)) + exit(1); /* fail */ + /* - */ + if( (ipv4a[0x00] != 0xc0) || + (ipv4a[0x01] != 0xa8) || + (ipv4a[0x02] != 0x64) || + (ipv4a[0x03] != 0x00) || + (ipv4a[0x04] != 0x01) ) + exit(1); /* fail */ + /* - */ + memset(ipv4a, 1, sizeof(ipv4a)); + if(-1 != inet_net_pton(AF_INET, ipv4net3, ipv4a, 4)) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 1, sizeof(ipv6a)); + if(128 != inet_net_pton(AF_INET6, ipv6net1, ipv6a, 16)) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0x00] != 0xfe) || + (ipv6a[0x01] != 0x80) || + (ipv6a[0x08] != 0x02) || + (ipv6a[0x09] != 0x14) || + (ipv6a[0x0a] != 0x4f) || + (ipv6a[0x0b] != 0xff) || + (ipv6a[0x0c] != 0xfe) || + (ipv6a[0x0d] != 0x0b) || + (ipv6a[0x0e] != 0x76) || + (ipv6a[0x0f] != 0xc8) || + (ipv6a[0x10] != 0x01) ) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0x02] != 0x0) || + (ipv6a[0x03] != 0x0) || + (ipv6a[0x04] != 0x0) || + (ipv6a[0x05] != 0x0) || + (ipv6a[0x06] != 0x0) || + (ipv6a[0x07] != 0x0) ) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 0, sizeof(ipv6a)); + ipv6a[0x10] = 0x01; + if(128 != inet_net_pton(AF_INET6, ipv6net2, ipv6a, 16)) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0x0a] != 0xff) || + (ipv6a[0x0b] != 0xfe) || + (ipv6a[0x0c] != 0x7f) || + (ipv6a[0x0f] != 0x01) || + (ipv6a[0x10] != 0x01) ) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0x00] != 0x0) || + (ipv6a[0x01] != 0x0) || + (ipv6a[0x02] != 0x0) || + (ipv6a[0x03] != 0x0) || + (ipv6a[0x04] != 0x0) || + (ipv6a[0x05] != 0x0) || + (ipv6a[0x06] != 0x0) || + (ipv6a[0x07] != 0x0) || + (ipv6a[0x08] != 0x0) || + (ipv6a[0x09] != 0x0) || + (ipv6a[0x0d] != 0x0) || + (ipv6a[0x0e] != 0x0) ) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 1, sizeof(ipv6a)); + if(64 != inet_net_pton(AF_INET6, ipv6net3, ipv6a, 16)) + exit(1); /* fail */ + if( (ipv6a[0x00] != 0x7f) || + (ipv6a[0x01] != 0x20) || + (ipv6a[0x03] != 0x01) || + (ipv6a[0x08] != 0x01) || + (ipv6a[0x09] != 0x01) || + (ipv6a[0x0a] != 0x01) || + (ipv6a[0x0b] != 0x01) || + (ipv6a[0x0c] != 0x01) || + (ipv6a[0x0d] != 0x01) || + (ipv6a[0x0e] != 0x01) || + (ipv6a[0x0f] != 0x01) || + (ipv6a[0x10] != 0x01) ) + exit(1); /* fail */ + if( (ipv6a[0x02] != 0x0) || + (ipv6a[0x04] != 0x0) || + (ipv6a[0x05] != 0x0) || + (ipv6a[0x06] != 0x0) || + (ipv6a[0x07] != 0x0) || + (ipv6a[0x07] != 0x0) ) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 1, sizeof(ipv6a)); + if(-1 != inet_net_pton(AF_INET6, ipv6net4, ipv6a, 16)) + exit(1); /* fail */ + /* - */ + exit(0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_works_inet_net_pton="yes" + ],[ + AC_MSG_RESULT([no]) + tst_works_inet_net_pton="no" + ]) + fi + # + if test "$tst_compi_inet_net_pton" = "yes" && + test "$tst_works_inet_net_pton" != "no"; then + AC_MSG_CHECKING([if inet_net_pton usage allowed]) + if test "x$cares_disallow_inet_net_pton" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_inet_net_pton="yes" + else + AC_MSG_RESULT([no]) + tst_allow_inet_net_pton="no" + fi + fi + # + AC_MSG_CHECKING([if inet_net_pton might be used]) + if test "$tst_links_inet_net_pton" = "yes" && + test "$tst_proto_inet_net_pton" = "yes" && + test "$tst_compi_inet_net_pton" = "yes" && + test "$tst_allow_inet_net_pton" = "yes" && + test "$tst_works_inet_net_pton" != "no"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_INET_NET_PTON, 1, + [Define to 1 if you have a IPv6 capable working inet_net_pton function.]) + ac_cv_func_inet_net_pton="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_inet_net_pton="no" + fi +]) + + +dnl CARES_CHECK_FUNC_INET_NTOP +dnl ------------------------------------------------- +dnl Verify if inet_ntop is available, prototyped, can +dnl be compiled and seems to work. If all of these are +dnl true, and usage has not been previously disallowed +dnl with shell variable cares_disallow_inet_ntop, then +dnl HAVE_INET_NTOP will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_INET_NTOP], [ + AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl + AC_REQUIRE([CARES_INCLUDES_ARPA_INET])dnl + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_inet_ntop="unknown" + tst_proto_inet_ntop="unknown" + tst_compi_inet_ntop="unknown" + tst_works_inet_ntop="unknown" + tst_allow_inet_ntop="unknown" + # + AC_MSG_CHECKING([if inet_ntop can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([inet_ntop]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_inet_ntop="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_inet_ntop="no" + ]) + # + if test "$tst_links_inet_ntop" = "yes"; then + AC_MSG_CHECKING([if inet_ntop is prototyped]) + AC_EGREP_CPP([inet_ntop],[ + $cares_includes_arpa_inet + ],[ + AC_MSG_RESULT([yes]) + tst_proto_inet_ntop="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_inet_ntop="no" + ]) + fi + # + if test "$tst_proto_inet_ntop" = "yes"; then + AC_MSG_CHECKING([if inet_ntop is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_arpa_inet + ]],[[ + if(0 != inet_ntop(0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_inet_ntop="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_inet_ntop="no" + ]) + fi + # + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$tst_compi_inet_ntop" = "yes"; then + AC_MSG_CHECKING([if inet_ntop seems to work]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stdlib + $cares_includes_arpa_inet + $cares_includes_string + ]],[[ + char ipv6res[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; + char ipv4res[sizeof "255.255.255.255"]; + unsigned char ipv6a[26]; + unsigned char ipv4a[5]; + char *ipv6ptr = 0; + char *ipv4ptr = 0; + /* - */ + ipv4res[0] = '\0'; + ipv4a[0] = 0xc0; + ipv4a[1] = 0xa8; + ipv4a[2] = 0x64; + ipv4a[3] = 0x01; + ipv4a[4] = 0x01; + /* - */ + ipv4ptr = inet_ntop(AF_INET, ipv4a, ipv4res, sizeof(ipv4res)); + if(!ipv4ptr) + exit(1); /* fail */ + if(ipv4ptr != ipv4res) + exit(1); /* fail */ + if(!ipv4ptr[0]) + exit(1); /* fail */ + if(memcmp(ipv4res, "192.168.100.1", 13) != 0) + exit(1); /* fail */ + /* - */ + ipv6res[0] = '\0'; + memset(ipv6a, 0, sizeof(ipv6a)); + ipv6a[0] = 0xfe; + ipv6a[1] = 0x80; + ipv6a[8] = 0x02; + ipv6a[9] = 0x14; + ipv6a[10] = 0x4f; + ipv6a[11] = 0xff; + ipv6a[12] = 0xfe; + ipv6a[13] = 0x0b; + ipv6a[14] = 0x76; + ipv6a[15] = 0xc8; + ipv6a[25] = 0x01; + /* - */ + ipv6ptr = inet_ntop(AF_INET6, ipv6a, ipv6res, sizeof(ipv6res)); + if(!ipv6ptr) + exit(1); /* fail */ + if(ipv6ptr != ipv6res) + exit(1); /* fail */ + if(!ipv6ptr[0]) + exit(1); /* fail */ + if(memcmp(ipv6res, "fe80::214:4fff:fe0b:76c8", 24) != 0) + exit(1); /* fail */ + /* - */ + exit(0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_works_inet_ntop="yes" + ],[ + AC_MSG_RESULT([no]) + tst_works_inet_ntop="no" + ]) + fi + # + if test "$tst_compi_inet_ntop" = "yes" && + test "$tst_works_inet_ntop" != "no"; then + AC_MSG_CHECKING([if inet_ntop usage allowed]) + if test "x$cares_disallow_inet_ntop" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_inet_ntop="yes" + else + AC_MSG_RESULT([no]) + tst_allow_inet_ntop="no" + fi + fi + # + AC_MSG_CHECKING([if inet_ntop might be used]) + if test "$tst_links_inet_ntop" = "yes" && + test "$tst_proto_inet_ntop" = "yes" && + test "$tst_compi_inet_ntop" = "yes" && + test "$tst_allow_inet_ntop" = "yes" && + test "$tst_works_inet_ntop" != "no"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_INET_NTOP, 1, + [Define to 1 if you have a IPv6 capable working inet_ntop function.]) + ac_cv_func_inet_ntop="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_inet_ntop="no" + fi +]) + + +dnl CARES_CHECK_FUNC_INET_PTON +dnl ------------------------------------------------- +dnl Verify if inet_pton is available, prototyped, can +dnl be compiled and seems to work. If all of these are +dnl true, and usage has not been previously disallowed +dnl with shell variable cares_disallow_inet_pton, then +dnl HAVE_INET_PTON will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_INET_PTON], [ + AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl + AC_REQUIRE([CARES_INCLUDES_ARPA_INET])dnl + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_inet_pton="unknown" + tst_proto_inet_pton="unknown" + tst_compi_inet_pton="unknown" + tst_works_inet_pton="unknown" + tst_allow_inet_pton="unknown" + # + AC_MSG_CHECKING([if inet_pton can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([inet_pton]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_inet_pton="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_inet_pton="no" + ]) + # + if test "$tst_links_inet_pton" = "yes"; then + AC_MSG_CHECKING([if inet_pton is prototyped]) + AC_EGREP_CPP([inet_pton],[ + $cares_includes_arpa_inet + ],[ + AC_MSG_RESULT([yes]) + tst_proto_inet_pton="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_inet_pton="no" + ]) + fi + # + if test "$tst_proto_inet_pton" = "yes"; then + AC_MSG_CHECKING([if inet_pton is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_arpa_inet + ]],[[ + if(0 != inet_pton(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_inet_pton="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_inet_pton="no" + ]) + fi + # + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$tst_compi_inet_pton" = "yes"; then + AC_MSG_CHECKING([if inet_pton seems to work]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stdlib + $cares_includes_arpa_inet + $cares_includes_string + ]],[[ + unsigned char ipv6a[16+1]; + unsigned char ipv4a[4+1]; + const char *ipv6src = "fe80::214:4fff:fe0b:76c8"; + const char *ipv4src = "192.168.100.1"; + /* - */ + memset(ipv4a, 1, sizeof(ipv4a)); + if(1 != inet_pton(AF_INET, ipv4src, ipv4a)) + exit(1); /* fail */ + /* - */ + if( (ipv4a[0] != 0xc0) || + (ipv4a[1] != 0xa8) || + (ipv4a[2] != 0x64) || + (ipv4a[3] != 0x01) || + (ipv4a[4] != 0x01) ) + exit(1); /* fail */ + /* - */ + memset(ipv6a, 1, sizeof(ipv6a)); + if(1 != inet_pton(AF_INET6, ipv6src, ipv6a)) + exit(1); /* fail */ + /* - */ + if( (ipv6a[0] != 0xfe) || + (ipv6a[1] != 0x80) || + (ipv6a[8] != 0x02) || + (ipv6a[9] != 0x14) || + (ipv6a[10] != 0x4f) || + (ipv6a[11] != 0xff) || + (ipv6a[12] != 0xfe) || + (ipv6a[13] != 0x0b) || + (ipv6a[14] != 0x76) || + (ipv6a[15] != 0xc8) || + (ipv6a[16] != 0x01) ) + exit(1); /* fail */ + /* - */ + if( (ipv6a[2] != 0x0) || + (ipv6a[3] != 0x0) || + (ipv6a[4] != 0x0) || + (ipv6a[5] != 0x0) || + (ipv6a[6] != 0x0) || + (ipv6a[7] != 0x0) ) + exit(1); /* fail */ + /* - */ + exit(0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_works_inet_pton="yes" + ],[ + AC_MSG_RESULT([no]) + tst_works_inet_pton="no" + ]) + fi + # + if test "$tst_compi_inet_pton" = "yes" && + test "$tst_works_inet_pton" != "no"; then + AC_MSG_CHECKING([if inet_pton usage allowed]) + if test "x$cares_disallow_inet_pton" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_inet_pton="yes" + else + AC_MSG_RESULT([no]) + tst_allow_inet_pton="no" + fi + fi + # + AC_MSG_CHECKING([if inet_pton might be used]) + if test "$tst_links_inet_pton" = "yes" && + test "$tst_proto_inet_pton" = "yes" && + test "$tst_compi_inet_pton" = "yes" && + test "$tst_allow_inet_pton" = "yes" && + test "$tst_works_inet_pton" != "no"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_INET_PTON, 1, + [Define to 1 if you have a IPv6 capable working inet_pton function.]) + ac_cv_func_inet_pton="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_inet_pton="no" + fi +]) + + +dnl CARES_CHECK_FUNC_IOCTL +dnl ------------------------------------------------- +dnl Verify if ioctl is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_ioctl, then +dnl HAVE_IOCTL will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_IOCTL], [ + AC_REQUIRE([CARES_INCLUDES_STROPTS])dnl + # + tst_links_ioctl="unknown" + tst_proto_ioctl="unknown" + tst_compi_ioctl="unknown" + tst_allow_ioctl="unknown" + # + AC_MSG_CHECKING([if ioctl can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([ioctl]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_ioctl="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_ioctl="no" + ]) + # + if test "$tst_links_ioctl" = "yes"; then + AC_MSG_CHECKING([if ioctl is prototyped]) + AC_EGREP_CPP([ioctl],[ + $cares_includes_stropts + ],[ + AC_MSG_RESULT([yes]) + tst_proto_ioctl="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_ioctl="no" + ]) + fi + # + if test "$tst_proto_ioctl" = "yes"; then + AC_MSG_CHECKING([if ioctl is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stropts + ]],[[ + if(0 != ioctl(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_ioctl="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_ioctl="no" + ]) + fi + # + if test "$tst_compi_ioctl" = "yes"; then + AC_MSG_CHECKING([if ioctl usage allowed]) + if test "x$cares_disallow_ioctl" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_ioctl="yes" + else + AC_MSG_RESULT([no]) + tst_allow_ioctl="no" + fi + fi + # + AC_MSG_CHECKING([if ioctl might be used]) + if test "$tst_links_ioctl" = "yes" && + test "$tst_proto_ioctl" = "yes" && + test "$tst_compi_ioctl" = "yes" && + test "$tst_allow_ioctl" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_IOCTL, 1, + [Define to 1 if you have the ioctl function.]) + ac_cv_func_ioctl="yes" + CARES_CHECK_FUNC_IOCTL_FIONBIO + CARES_CHECK_FUNC_IOCTL_SIOCGIFADDR + else + AC_MSG_RESULT([no]) + ac_cv_func_ioctl="no" + fi +]) + + +dnl CARES_CHECK_FUNC_IOCTL_FIONBIO +dnl ------------------------------------------------- +dnl Verify if ioctl with the FIONBIO command is +dnl available, can be compiled, and seems to work. If +dnl all of these are true, then HAVE_IOCTL_FIONBIO +dnl will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_IOCTL_FIONBIO], [ + # + tst_compi_ioctl_fionbio="unknown" + tst_allow_ioctl_fionbio="unknown" + # + if test "$ac_cv_func_ioctl" = "yes"; then + AC_MSG_CHECKING([if ioctl FIONBIO is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stropts + ]],[[ + int flags = 0; + if(0 != ioctl(0, FIONBIO, &flags)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_ioctl_fionbio="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_ioctl_fionbio="no" + ]) + fi + # + if test "$tst_compi_ioctl_fionbio" = "yes"; then + AC_MSG_CHECKING([if ioctl FIONBIO usage allowed]) + if test "x$cares_disallow_ioctl_fionbio" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_ioctl_fionbio="yes" + else + AC_MSG_RESULT([no]) + tst_allow_ioctl_fionbio="no" + fi + fi + # + AC_MSG_CHECKING([if ioctl FIONBIO might be used]) + if test "$tst_compi_ioctl_fionbio" = "yes" && + test "$tst_allow_ioctl_fionbio" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_IOCTL_FIONBIO, 1, + [Define to 1 if you have a working ioctl FIONBIO function.]) + ac_cv_func_ioctl_fionbio="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_ioctl_fionbio="no" + fi +]) + + +dnl CARES_CHECK_FUNC_IOCTL_SIOCGIFADDR +dnl ------------------------------------------------- +dnl Verify if ioctl with the SIOCGIFADDR command is available, +dnl struct ifreq is defined, they can be compiled, and seem to +dnl work. If all of these are true, then HAVE_IOCTL_SIOCGIFADDR +dnl will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_IOCTL_SIOCGIFADDR], [ + # + tst_compi_ioctl_siocgifaddr="unknown" + tst_allow_ioctl_siocgifaddr="unknown" + # + if test "$ac_cv_func_ioctl" = "yes"; then + AC_MSG_CHECKING([if ioctl SIOCGIFADDR is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stropts + #include + ]],[[ + struct ifreq ifr; + if(0 != ioctl(0, SIOCGIFADDR, &ifr)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_ioctl_siocgifaddr="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_ioctl_siocgifaddr="no" + ]) + fi + # + if test "$tst_compi_ioctl_siocgifaddr" = "yes"; then + AC_MSG_CHECKING([if ioctl SIOCGIFADDR usage allowed]) + if test "x$cares_disallow_ioctl_siocgifaddr" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_ioctl_siocgifaddr="yes" + else + AC_MSG_RESULT([no]) + tst_allow_ioctl_siocgifaddr="no" + fi + fi + # + AC_MSG_CHECKING([if ioctl SIOCGIFADDR might be used]) + if test "$tst_compi_ioctl_siocgifaddr" = "yes" && + test "$tst_allow_ioctl_siocgifaddr" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_IOCTL_SIOCGIFADDR, 1, + [Define to 1 if you have a working ioctl SIOCGIFADDR function.]) + ac_cv_func_ioctl_siocgifaddr="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_ioctl_siocgifaddr="no" + fi +]) + + +dnl CARES_CHECK_FUNC_IOCTLSOCKET +dnl ------------------------------------------------- +dnl Verify if ioctlsocket is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_ioctlsocket, then +dnl HAVE_IOCTLSOCKET will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_IOCTLSOCKET], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + # + tst_links_ioctlsocket="unknown" + tst_proto_ioctlsocket="unknown" + tst_compi_ioctlsocket="unknown" + tst_allow_ioctlsocket="unknown" + # + AC_MSG_CHECKING([if ioctlsocket can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + ]],[[ + if(0 != ioctlsocket(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_ioctlsocket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_ioctlsocket="no" + ]) + # + if test "$tst_links_ioctlsocket" = "yes"; then + AC_MSG_CHECKING([if ioctlsocket is prototyped]) + AC_EGREP_CPP([ioctlsocket],[ + $cares_includes_winsock2 + ],[ + AC_MSG_RESULT([yes]) + tst_proto_ioctlsocket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_ioctlsocket="no" + ]) + fi + # + if test "$tst_proto_ioctlsocket" = "yes"; then + AC_MSG_CHECKING([if ioctlsocket is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + ]],[[ + if(0 != ioctlsocket(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_ioctlsocket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_ioctlsocket="no" + ]) + fi + # + if test "$tst_compi_ioctlsocket" = "yes"; then + AC_MSG_CHECKING([if ioctlsocket usage allowed]) + if test "x$cares_disallow_ioctlsocket" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_ioctlsocket="yes" + else + AC_MSG_RESULT([no]) + tst_allow_ioctlsocket="no" + fi + fi + # + AC_MSG_CHECKING([if ioctlsocket might be used]) + if test "$tst_links_ioctlsocket" = "yes" && + test "$tst_proto_ioctlsocket" = "yes" && + test "$tst_compi_ioctlsocket" = "yes" && + test "$tst_allow_ioctlsocket" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET, 1, + [Define to 1 if you have the ioctlsocket function.]) + ac_cv_func_ioctlsocket="yes" + CARES_CHECK_FUNC_IOCTLSOCKET_FIONBIO + else + AC_MSG_RESULT([no]) + ac_cv_func_ioctlsocket="no" + fi +]) + + +dnl CARES_CHECK_FUNC_IOCTLSOCKET_FIONBIO +dnl ------------------------------------------------- +dnl Verify if ioctlsocket with the FIONBIO command is +dnl available, can be compiled, and seems to work. If +dnl all of these are true, then HAVE_IOCTLSOCKET_FIONBIO +dnl will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_IOCTLSOCKET_FIONBIO], [ + # + tst_compi_ioctlsocket_fionbio="unknown" + tst_allow_ioctlsocket_fionbio="unknown" + # + if test "$ac_cv_func_ioctlsocket" = "yes"; then + AC_MSG_CHECKING([if ioctlsocket FIONBIO is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + ]],[[ + int flags = 0; + if(0 != ioctlsocket(0, FIONBIO, &flags)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_ioctlsocket_fionbio="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_ioctlsocket_fionbio="no" + ]) + fi + # + if test "$tst_compi_ioctlsocket_fionbio" = "yes"; then + AC_MSG_CHECKING([if ioctlsocket FIONBIO usage allowed]) + if test "x$cares_disallow_ioctlsocket_fionbio" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_ioctlsocket_fionbio="yes" + else + AC_MSG_RESULT([no]) + tst_allow_ioctlsocket_fionbio="no" + fi + fi + # + AC_MSG_CHECKING([if ioctlsocket FIONBIO might be used]) + if test "$tst_compi_ioctlsocket_fionbio" = "yes" && + test "$tst_allow_ioctlsocket_fionbio" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_FIONBIO, 1, + [Define to 1 if you have a working ioctlsocket FIONBIO function.]) + ac_cv_func_ioctlsocket_fionbio="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_ioctlsocket_fionbio="no" + fi +]) + + +dnl CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL +dnl ------------------------------------------------- +dnl Verify if IoctlSocket is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_ioctlsocket_camel, +dnl then HAVE_IOCTLSOCKET_CAMEL will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL], [ + AC_REQUIRE([CARES_INCLUDES_STROPTS])dnl + # + tst_links_ioctlsocket_camel="unknown" + tst_proto_ioctlsocket_camel="unknown" + tst_compi_ioctlsocket_camel="unknown" + tst_allow_ioctlsocket_camel="unknown" + # + AC_MSG_CHECKING([if IoctlSocket can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([IoctlSocket]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_ioctlsocket_camel="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_ioctlsocket_camel="no" + ]) + # + if test "$tst_links_ioctlsocket_camel" = "yes"; then + AC_MSG_CHECKING([if IoctlSocket is prototyped]) + AC_EGREP_CPP([IoctlSocket],[ + $cares_includes_stropts + ],[ + AC_MSG_RESULT([yes]) + tst_proto_ioctlsocket_camel="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_ioctlsocket_camel="no" + ]) + fi + # + if test "$tst_proto_ioctlsocket_camel" = "yes"; then + AC_MSG_CHECKING([if IoctlSocket is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stropts + ]],[[ + if(0 != IoctlSocket(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_ioctlsocket_camel="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_ioctlsocket_camel="no" + ]) + fi + # + if test "$tst_compi_ioctlsocket_camel" = "yes"; then + AC_MSG_CHECKING([if IoctlSocket usage allowed]) + if test "x$cares_disallow_ioctlsocket_camel" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_ioctlsocket_camel="yes" + else + AC_MSG_RESULT([no]) + tst_allow_ioctlsocket_camel="no" + fi + fi + # + AC_MSG_CHECKING([if IoctlSocket might be used]) + if test "$tst_links_ioctlsocket_camel" = "yes" && + test "$tst_proto_ioctlsocket_camel" = "yes" && + test "$tst_compi_ioctlsocket_camel" = "yes" && + test "$tst_allow_ioctlsocket_camel" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_CAMEL, 1, + [Define to 1 if you have the IoctlSocket camel case function.]) + ac_cv_func_ioctlsocket_camel="yes" + CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO + else + AC_MSG_RESULT([no]) + ac_cv_func_ioctlsocket_camel="no" + fi +]) + + +dnl CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO +dnl ------------------------------------------------- +dnl Verify if IoctlSocket with FIONBIO command is available, +dnl can be compiled, and seems to work. If all of these are +dnl true, then HAVE_IOCTLSOCKET_CAMEL_FIONBIO will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO], [ + # + tst_compi_ioctlsocket_camel_fionbio="unknown" + tst_allow_ioctlsocket_camel_fionbio="unknown" + # + if test "$ac_cv_func_ioctlsocket_camel" = "yes"; then + AC_MSG_CHECKING([if IoctlSocket FIONBIO is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_stropts + ]],[[ + long flags = 0; + if(0 != ioctlsocket(0, FIONBIO, &flags)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_ioctlsocket_camel_fionbio="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_ioctlsocket_camel_fionbio="no" + ]) + fi + # + if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes"; then + AC_MSG_CHECKING([if IoctlSocket FIONBIO usage allowed]) + if test "x$cares_disallow_ioctlsocket_camel_fionbio" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_ioctlsocket_camel_fionbio="yes" + else + AC_MSG_RESULT([no]) + tst_allow_ioctlsocket_camel_fionbio="no" + fi + fi + # + AC_MSG_CHECKING([if IoctlSocket FIONBIO might be used]) + if test "$tst_compi_ioctlsocket_camel_fionbio" = "yes" && + test "$tst_allow_ioctlsocket_camel_fionbio" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_IOCTLSOCKET_CAMEL_FIONBIO, 1, + [Define to 1 if you have a working IoctlSocket camel case FIONBIO function.]) + ac_cv_func_ioctlsocket_camel_fionbio="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_ioctlsocket_camel_fionbio="no" + fi +]) + + +dnl CARES_CHECK_FUNC_SETSOCKOPT +dnl ------------------------------------------------- +dnl Verify if setsockopt is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_setsockopt, then +dnl HAVE_SETSOCKOPT will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_SETSOCKOPT], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl + # + tst_links_setsockopt="unknown" + tst_proto_setsockopt="unknown" + tst_compi_setsockopt="unknown" + tst_allow_setsockopt="unknown" + # + AC_MSG_CHECKING([if setsockopt can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_sys_socket + ]],[[ + if(0 != setsockopt(0, 0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_setsockopt="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_setsockopt="no" + ]) + # + if test "$tst_links_setsockopt" = "yes"; then + AC_MSG_CHECKING([if setsockopt is prototyped]) + AC_EGREP_CPP([setsockopt],[ + $cares_includes_winsock2 + $cares_includes_sys_socket + ],[ + AC_MSG_RESULT([yes]) + tst_proto_setsockopt="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_setsockopt="no" + ]) + fi + # + if test "$tst_proto_setsockopt" = "yes"; then + AC_MSG_CHECKING([if setsockopt is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_sys_socket + ]],[[ + if(0 != setsockopt(0, 0, 0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_setsockopt="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_setsockopt="no" + ]) + fi + # + if test "$tst_compi_setsockopt" = "yes"; then + AC_MSG_CHECKING([if setsockopt usage allowed]) + if test "x$cares_disallow_setsockopt" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_setsockopt="yes" + else + AC_MSG_RESULT([no]) + tst_allow_setsockopt="no" + fi + fi + # + AC_MSG_CHECKING([if setsockopt might be used]) + if test "$tst_links_setsockopt" = "yes" && + test "$tst_proto_setsockopt" = "yes" && + test "$tst_compi_setsockopt" = "yes" && + test "$tst_allow_setsockopt" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT, 1, + [Define to 1 if you have the setsockopt function.]) + ac_cv_func_setsockopt="yes" + CARES_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK + else + AC_MSG_RESULT([no]) + ac_cv_func_setsockopt="no" + fi +]) + + +dnl CARES_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK +dnl ------------------------------------------------- +dnl Verify if setsockopt with the SO_NONBLOCK command is +dnl available, can be compiled, and seems to work. If +dnl all of these are true, then HAVE_SETSOCKOPT_SO_NONBLOCK +dnl will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK], [ + # + tst_compi_setsockopt_so_nonblock="unknown" + tst_allow_setsockopt_so_nonblock="unknown" + # + if test "$ac_cv_func_setsockopt" = "yes"; then + AC_MSG_CHECKING([if setsockopt SO_NONBLOCK is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_sys_socket + ]],[[ + if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_setsockopt_so_nonblock="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_setsockopt_so_nonblock="no" + ]) + fi + # + if test "$tst_compi_setsockopt_so_nonblock" = "yes"; then + AC_MSG_CHECKING([if setsockopt SO_NONBLOCK usage allowed]) + if test "x$cares_disallow_setsockopt_so_nonblock" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_setsockopt_so_nonblock="yes" + else + AC_MSG_RESULT([no]) + tst_allow_setsockopt_so_nonblock="no" + fi + fi + # + AC_MSG_CHECKING([if setsockopt SO_NONBLOCK might be used]) + if test "$tst_compi_setsockopt_so_nonblock" = "yes" && + test "$tst_allow_setsockopt_so_nonblock" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT_SO_NONBLOCK, 1, + [Define to 1 if you have a working setsockopt SO_NONBLOCK function.]) + ac_cv_func_setsockopt_so_nonblock="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_setsockopt_so_nonblock="no" + fi +]) + + +dnl CARES_CHECK_FUNC_SOCKET +dnl ------------------------------------------------- +dnl Verify if socket is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_socket, then +dnl HAVE_SOCKET will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_SOCKET], [ + AC_REQUIRE([CARES_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl + AC_REQUIRE([CARES_INCLUDES_SOCKET])dnl + # + tst_links_socket="unknown" + tst_proto_socket="unknown" + tst_compi_socket="unknown" + tst_allow_socket="unknown" + # + AC_MSG_CHECKING([if socket can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + ]],[[ + if(0 != socket(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_socket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_socket="no" + ]) + # + if test "$tst_links_socket" = "yes"; then + AC_MSG_CHECKING([if socket is prototyped]) + AC_EGREP_CPP([socket],[ + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + ],[ + AC_MSG_RESULT([yes]) + tst_proto_socket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_socket="no" + ]) + fi + # + if test "$tst_proto_socket" = "yes"; then + AC_MSG_CHECKING([if socket is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_winsock2 + $cares_includes_sys_socket + $cares_includes_socket + ]],[[ + if(0 != socket(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_socket="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_socket="no" + ]) + fi + # + if test "$tst_compi_socket" = "yes"; then + AC_MSG_CHECKING([if socket usage allowed]) + if test "x$cares_disallow_socket" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_socket="yes" + else + AC_MSG_RESULT([no]) + tst_allow_socket="no" + fi + fi + # + AC_MSG_CHECKING([if socket might be used]) + if test "$tst_links_socket" = "yes" && + test "$tst_proto_socket" = "yes" && + test "$tst_compi_socket" = "yes" && + test "$tst_allow_socket" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_SOCKET, 1, + [Define to 1 if you have the socket function.]) + ac_cv_func_socket="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_socket="no" + fi +]) + + +dnl CARES_CHECK_FUNC_STRCASECMP +dnl ------------------------------------------------- +dnl Verify if strcasecmp is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_strcasecmp, then +dnl HAVE_STRCASECMP will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_STRCASECMP], [ + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_strcasecmp="unknown" + tst_proto_strcasecmp="unknown" + tst_compi_strcasecmp="unknown" + tst_allow_strcasecmp="unknown" + # + AC_MSG_CHECKING([if strcasecmp can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([strcasecmp]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_strcasecmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_strcasecmp="no" + ]) + # + if test "$tst_links_strcasecmp" = "yes"; then + AC_MSG_CHECKING([if strcasecmp is prototyped]) + AC_EGREP_CPP([strcasecmp],[ + $cares_includes_string + ],[ + AC_MSG_RESULT([yes]) + tst_proto_strcasecmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_strcasecmp="no" + ]) + fi + # + if test "$tst_proto_strcasecmp" = "yes"; then + AC_MSG_CHECKING([if strcasecmp is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_string + ]],[[ + if(0 != strcasecmp(0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_strcasecmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_strcasecmp="no" + ]) + fi + # + if test "$tst_compi_strcasecmp" = "yes"; then + AC_MSG_CHECKING([if strcasecmp usage allowed]) + if test "x$cares_disallow_strcasecmp" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_strcasecmp="yes" + else + AC_MSG_RESULT([no]) + tst_allow_strcasecmp="no" + fi + fi + # + AC_MSG_CHECKING([if strcasecmp might be used]) + if test "$tst_links_strcasecmp" = "yes" && + test "$tst_proto_strcasecmp" = "yes" && + test "$tst_compi_strcasecmp" = "yes" && + test "$tst_allow_strcasecmp" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_STRCASECMP, 1, + [Define to 1 if you have the strcasecmp function.]) + ac_cv_func_strcasecmp="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_strcasecmp="no" + fi +]) + + +dnl CARES_CHECK_FUNC_STRCMPI +dnl ------------------------------------------------- +dnl Verify if strcmpi is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_strcmpi, then +dnl HAVE_STRCMPI will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_STRCMPI], [ + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_strcmpi="unknown" + tst_proto_strcmpi="unknown" + tst_compi_strcmpi="unknown" + tst_allow_strcmpi="unknown" + # + AC_MSG_CHECKING([if strcmpi can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([strcmpi]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_strcmpi="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_strcmpi="no" + ]) + # + if test "$tst_links_strcmpi" = "yes"; then + AC_MSG_CHECKING([if strcmpi is prototyped]) + AC_EGREP_CPP([strcmpi],[ + $cares_includes_string + ],[ + AC_MSG_RESULT([yes]) + tst_proto_strcmpi="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_strcmpi="no" + ]) + fi + # + if test "$tst_proto_strcmpi" = "yes"; then + AC_MSG_CHECKING([if strcmpi is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_string + ]],[[ + if(0 != strcmpi(0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_strcmpi="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_strcmpi="no" + ]) + fi + # + if test "$tst_compi_strcmpi" = "yes"; then + AC_MSG_CHECKING([if strcmpi usage allowed]) + if test "x$cares_disallow_strcmpi" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_strcmpi="yes" + else + AC_MSG_RESULT([no]) + tst_allow_strcmpi="no" + fi + fi + # + AC_MSG_CHECKING([if strcmpi might be used]) + if test "$tst_links_strcmpi" = "yes" && + test "$tst_proto_strcmpi" = "yes" && + test "$tst_compi_strcmpi" = "yes" && + test "$tst_allow_strcmpi" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_STRCMPI, 1, + [Define to 1 if you have the strcmpi function.]) + ac_cv_func_strcmpi="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_strcmpi="no" + fi +]) + + +dnl CARES_CHECK_FUNC_STRDUP +dnl ------------------------------------------------- +dnl Verify if strdup is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_strdup, then +dnl HAVE_STRDUP will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_STRDUP], [ + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_strdup="unknown" + tst_proto_strdup="unknown" + tst_compi_strdup="unknown" + tst_allow_strdup="unknown" + # + AC_MSG_CHECKING([if strdup can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([strdup]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_strdup="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_strdup="no" + ]) + # + if test "$tst_links_strdup" = "yes"; then + AC_MSG_CHECKING([if strdup is prototyped]) + AC_EGREP_CPP([strdup],[ + $cares_includes_string + ],[ + AC_MSG_RESULT([yes]) + tst_proto_strdup="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_strdup="no" + ]) + fi + # + if test "$tst_proto_strdup" = "yes"; then + AC_MSG_CHECKING([if strdup is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_string + ]],[[ + if(0 != strdup(0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_strdup="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_strdup="no" + ]) + fi + # + if test "$tst_compi_strdup" = "yes"; then + AC_MSG_CHECKING([if strdup usage allowed]) + if test "x$cares_disallow_strdup" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_strdup="yes" + else + AC_MSG_RESULT([no]) + tst_allow_strdup="no" + fi + fi + # + AC_MSG_CHECKING([if strdup might be used]) + if test "$tst_links_strdup" = "yes" && + test "$tst_proto_strdup" = "yes" && + test "$tst_compi_strdup" = "yes" && + test "$tst_allow_strdup" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_STRDUP, 1, + [Define to 1 if you have the strdup function.]) + ac_cv_func_strdup="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_strdup="no" + fi +]) + + +dnl CARES_CHECK_FUNC_STRICMP +dnl ------------------------------------------------- +dnl Verify if stricmp is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_stricmp, then +dnl HAVE_STRICMP will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_STRICMP], [ + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_stricmp="unknown" + tst_proto_stricmp="unknown" + tst_compi_stricmp="unknown" + tst_allow_stricmp="unknown" + # + AC_MSG_CHECKING([if stricmp can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([stricmp]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_stricmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_stricmp="no" + ]) + # + if test "$tst_links_stricmp" = "yes"; then + AC_MSG_CHECKING([if stricmp is prototyped]) + AC_EGREP_CPP([stricmp],[ + $cares_includes_string + ],[ + AC_MSG_RESULT([yes]) + tst_proto_stricmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_stricmp="no" + ]) + fi + # + if test "$tst_proto_stricmp" = "yes"; then + AC_MSG_CHECKING([if stricmp is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_string + ]],[[ + if(0 != stricmp(0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_stricmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_stricmp="no" + ]) + fi + # + if test "$tst_compi_stricmp" = "yes"; then + AC_MSG_CHECKING([if stricmp usage allowed]) + if test "x$cares_disallow_stricmp" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_stricmp="yes" + else + AC_MSG_RESULT([no]) + tst_allow_stricmp="no" + fi + fi + # + AC_MSG_CHECKING([if stricmp might be used]) + if test "$tst_links_stricmp" = "yes" && + test "$tst_proto_stricmp" = "yes" && + test "$tst_compi_stricmp" = "yes" && + test "$tst_allow_stricmp" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_STRICMP, 1, + [Define to 1 if you have the stricmp function.]) + ac_cv_func_stricmp="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_stricmp="no" + fi +]) + + +dnl CARES_CHECK_FUNC_STRNCASECMP +dnl ------------------------------------------------- +dnl Verify if strncasecmp is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_strncasecmp, then +dnl HAVE_STRNCASECMP will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_STRNCASECMP], [ + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_strncasecmp="unknown" + tst_proto_strncasecmp="unknown" + tst_compi_strncasecmp="unknown" + tst_allow_strncasecmp="unknown" + # + AC_MSG_CHECKING([if strncasecmp can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([strncasecmp]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_strncasecmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_strncasecmp="no" + ]) + # + if test "$tst_links_strncasecmp" = "yes"; then + AC_MSG_CHECKING([if strncasecmp is prototyped]) + AC_EGREP_CPP([strncasecmp],[ + $cares_includes_string + ],[ + AC_MSG_RESULT([yes]) + tst_proto_strncasecmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_strncasecmp="no" + ]) + fi + # + if test "$tst_proto_strncasecmp" = "yes"; then + AC_MSG_CHECKING([if strncasecmp is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_string + ]],[[ + if(0 != strncasecmp(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_strncasecmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_strncasecmp="no" + ]) + fi + # + if test "$tst_compi_strncasecmp" = "yes"; then + AC_MSG_CHECKING([if strncasecmp usage allowed]) + if test "x$cares_disallow_strncasecmp" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_strncasecmp="yes" + else + AC_MSG_RESULT([no]) + tst_allow_strncasecmp="no" + fi + fi + # + AC_MSG_CHECKING([if strncasecmp might be used]) + if test "$tst_links_strncasecmp" = "yes" && + test "$tst_proto_strncasecmp" = "yes" && + test "$tst_compi_strncasecmp" = "yes" && + test "$tst_allow_strncasecmp" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_STRNCASECMP, 1, + [Define to 1 if you have the strncasecmp function.]) + ac_cv_func_strncasecmp="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_strncasecmp="no" + fi +]) + + +dnl CARES_CHECK_FUNC_STRNCMPI +dnl ------------------------------------------------- +dnl Verify if strncmpi is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_strncmpi, then +dnl HAVE_STRNCMPI will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_STRNCMPI], [ + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_strncmpi="unknown" + tst_proto_strncmpi="unknown" + tst_compi_strncmpi="unknown" + tst_allow_strncmpi="unknown" + # + AC_MSG_CHECKING([if strncmpi can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([strncmpi]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_strncmpi="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_strncmpi="no" + ]) + # + if test "$tst_links_strncmpi" = "yes"; then + AC_MSG_CHECKING([if strncmpi is prototyped]) + AC_EGREP_CPP([strncmpi],[ + $cares_includes_string + ],[ + AC_MSG_RESULT([yes]) + tst_proto_strncmpi="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_strncmpi="no" + ]) + fi + # + if test "$tst_proto_strncmpi" = "yes"; then + AC_MSG_CHECKING([if strncmpi is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_string + ]],[[ + if(0 != strncmpi(0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_strncmpi="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_strncmpi="no" + ]) + fi + # + if test "$tst_compi_strncmpi" = "yes"; then + AC_MSG_CHECKING([if strncmpi usage allowed]) + if test "x$cares_disallow_strncmpi" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_strncmpi="yes" + else + AC_MSG_RESULT([no]) + tst_allow_strncmpi="no" + fi + fi + # + AC_MSG_CHECKING([if strncmpi might be used]) + if test "$tst_links_strncmpi" = "yes" && + test "$tst_proto_strncmpi" = "yes" && + test "$tst_compi_strncmpi" = "yes" && + test "$tst_allow_strncmpi" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_STRNCMPI, 1, + [Define to 1 if you have the strncmpi function.]) + ac_cv_func_strncmpi="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_strncmpi="no" + fi +]) + + +dnl CARES_CHECK_FUNC_STRNICMP +dnl ------------------------------------------------- +dnl Verify if strnicmp is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_strnicmp, then +dnl HAVE_STRNICMP will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_STRNICMP], [ + AC_REQUIRE([CARES_INCLUDES_STRING])dnl + # + tst_links_strnicmp="unknown" + tst_proto_strnicmp="unknown" + tst_compi_strnicmp="unknown" + tst_allow_strnicmp="unknown" + # + AC_MSG_CHECKING([if strnicmp can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([strnicmp]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_strnicmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_strnicmp="no" + ]) + # + if test "$tst_links_strnicmp" = "yes"; then + AC_MSG_CHECKING([if strnicmp is prototyped]) + AC_EGREP_CPP([strnicmp],[ + $cares_includes_string + ],[ + AC_MSG_RESULT([yes]) + tst_proto_strnicmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_strnicmp="no" + ]) + fi + # + if test "$tst_proto_strnicmp" = "yes"; then + AC_MSG_CHECKING([if strnicmp is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_string + ]],[[ + if(0 != strnicmp(0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_strnicmp="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_strnicmp="no" + ]) + fi + # + if test "$tst_compi_strnicmp" = "yes"; then + AC_MSG_CHECKING([if strnicmp usage allowed]) + if test "x$cares_disallow_strnicmp" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_strnicmp="yes" + else + AC_MSG_RESULT([no]) + tst_allow_strnicmp="no" + fi + fi + # + AC_MSG_CHECKING([if strnicmp might be used]) + if test "$tst_links_strnicmp" = "yes" && + test "$tst_proto_strnicmp" = "yes" && + test "$tst_compi_strnicmp" = "yes" && + test "$tst_allow_strnicmp" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_STRNICMP, 1, + [Define to 1 if you have the strnicmp function.]) + ac_cv_func_strnicmp="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_strnicmp="no" + fi +]) + + +dnl CARES_CHECK_FUNC_WRITEV +dnl ------------------------------------------------- +dnl Verify if writev is available, prototyped, and +dnl can be compiled. If all of these are true, and +dnl usage has not been previously disallowed with +dnl shell variable cares_disallow_writev, then +dnl HAVE_WRITEV will be defined. + +AC_DEFUN([CARES_CHECK_FUNC_WRITEV], [ + AC_REQUIRE([CARES_INCLUDES_SYS_UIO])dnl + # + tst_links_writev="unknown" + tst_proto_writev="unknown" + tst_compi_writev="unknown" + tst_allow_writev="unknown" + # + AC_MSG_CHECKING([if writev can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([writev]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_writev="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_writev="no" + ]) + # + if test "$tst_links_writev" = "yes"; then + AC_MSG_CHECKING([if writev is prototyped]) + AC_EGREP_CPP([writev],[ + $cares_includes_sys_uio + ],[ + AC_MSG_RESULT([yes]) + tst_proto_writev="yes" + ],[ + AC_MSG_RESULT([no]) + tst_proto_writev="no" + ]) + fi + # + if test "$tst_proto_writev" = "yes"; then + AC_MSG_CHECKING([if writev is compilable]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $cares_includes_sys_uio + ]],[[ + if(0 != writev(0, 0, 0)) + return 1; + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_compi_writev="yes" + ],[ + AC_MSG_RESULT([no]) + tst_compi_writev="no" + ]) + fi + # + if test "$tst_compi_writev" = "yes"; then + AC_MSG_CHECKING([if writev usage allowed]) + if test "x$cares_disallow_writev" != "xyes"; then + AC_MSG_RESULT([yes]) + tst_allow_writev="yes" + else + AC_MSG_RESULT([no]) + tst_allow_writev="no" + fi + fi + # + AC_MSG_CHECKING([if writev might be used]) + if test "$tst_links_writev" = "yes" && + test "$tst_proto_writev" = "yes" && + test "$tst_compi_writev" = "yes" && + test "$tst_allow_writev" = "yes"; then + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_WRITEV, 1, + [Define to 1 if you have the writev function.]) + ac_cv_func_writev="yes" + else + AC_MSG_RESULT([no]) + ac_cv_func_writev="no" + fi +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/cares-reentrant.m4 nodejs-mozilla-12.22.12/deps/cares/m4/cares-reentrant.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/cares-reentrant.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/cares-reentrant.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,611 @@ +#*************************************************************************** +# $Id$ +# +# Copyright (C) 2008 - 2009 by Daniel Stenberg et al +# +# Permission to use, copy, modify, and distribute this software and its +# documentation for any purpose and without fee is hereby granted, provided +# that the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +#*************************************************************************** + +# File version for 'aclocal' use. Keep it a single number. +# serial 6 + +dnl Note 1 +dnl ------ +dnl None of the CARES_CHECK_NEED_REENTRANT_* macros shall use HAVE_FOO_H to +dnl conditionally include header files. These macros are used early in the +dnl configure process much before header file availability is known. + + +dnl CARES_CHECK_NEED_REENTRANT_ERRNO +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes errno available as a preprocessor macro. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_ERRNO], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + if(0 != errno) + return 1; + ]]) + ],[ + tmp_errno="yes" + ],[ + tmp_errno="no" + ]) + if test "$tmp_errno" = "yes"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ +#ifdef errno + int dummy=1; +#else + force compilation error +#endif + ]]) + ],[ + tmp_errno="errno_macro_defined" + ],[ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#define _REENTRANT +#include + ]],[[ +#ifdef errno + int dummy=1; +#else + force compilation error +#endif + ]]) + ],[ + tmp_errno="errno_macro_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_GMTIME_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function gmtime_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_GMTIME_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([gmtime_r]) + ],[ + tmp_gmtime_r="yes" + ],[ + tmp_gmtime_r="no" + ]) + if test "$tmp_gmtime_r" = "yes"; then + AC_EGREP_CPP([gmtime_r],[ +#include +#include + ],[ + tmp_gmtime_r="proto_declared" + ],[ + AC_EGREP_CPP([gmtime_r],[ +#define _REENTRANT +#include +#include + ],[ + tmp_gmtime_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_LOCALTIME_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function localtime_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_LOCALTIME_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([localtime_r]) + ],[ + tmp_localtime_r="yes" + ],[ + tmp_localtime_r="no" + ]) + if test "$tmp_localtime_r" = "yes"; then + AC_EGREP_CPP([localtime_r],[ +#include +#include + ],[ + tmp_localtime_r="proto_declared" + ],[ + AC_EGREP_CPP([localtime_r],[ +#define _REENTRANT +#include +#include + ],[ + tmp_localtime_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_STRERROR_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function strerror_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_STRERROR_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([strerror_r]) + ],[ + tmp_strerror_r="yes" + ],[ + tmp_strerror_r="no" + ]) + if test "$tmp_strerror_r" = "yes"; then + AC_EGREP_CPP([strerror_r],[ +#include +#include + ],[ + tmp_strerror_r="proto_declared" + ],[ + AC_EGREP_CPP([strerror_r],[ +#define _REENTRANT +#include +#include + ],[ + tmp_strerror_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_STRTOK_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function strtok_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_STRTOK_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([strtok_r]) + ],[ + tmp_strtok_r="yes" + ],[ + tmp_strtok_r="no" + ]) + if test "$tmp_strtok_r" = "yes"; then + AC_EGREP_CPP([strtok_r],[ +#include +#include + ],[ + tmp_strtok_r="proto_declared" + ],[ + AC_EGREP_CPP([strtok_r],[ +#define _REENTRANT +#include +#include + ],[ + tmp_strtok_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_INET_NTOA_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function inet_ntoa_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_INET_NTOA_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([inet_ntoa_r]) + ],[ + tmp_inet_ntoa_r="yes" + ],[ + tmp_inet_ntoa_r="no" + ]) + if test "$tmp_inet_ntoa_r" = "yes"; then + AC_EGREP_CPP([inet_ntoa_r],[ +#include +#include +#include +#include + ],[ + tmp_inet_ntoa_r="proto_declared" + ],[ + AC_EGREP_CPP([inet_ntoa_r],[ +#define _REENTRANT +#include +#include +#include +#include + ],[ + tmp_inet_ntoa_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function gethostbyaddr_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r]) + ],[ + tmp_gethostbyaddr_r="yes" + ],[ + tmp_gethostbyaddr_r="no" + ]) + if test "$tmp_gethostbyaddr_r" = "yes"; then + AC_EGREP_CPP([gethostbyaddr_r],[ +#include +#include + ],[ + tmp_gethostbyaddr_r="proto_declared" + ],[ + AC_EGREP_CPP([gethostbyaddr_r],[ +#define _REENTRANT +#include +#include + ],[ + tmp_gethostbyaddr_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function gethostbyname_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([gethostbyname_r]) + ],[ + tmp_gethostbyname_r="yes" + ],[ + tmp_gethostbyname_r="no" + ]) + if test "$tmp_gethostbyname_r" = "yes"; then + AC_EGREP_CPP([gethostbyname_r],[ +#include +#include + ],[ + tmp_gethostbyname_r="proto_declared" + ],[ + AC_EGREP_CPP([gethostbyname_r],[ +#define _REENTRANT +#include +#include + ],[ + tmp_gethostbyname_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function getprotobyname_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([getprotobyname_r]) + ],[ + tmp_getprotobyname_r="yes" + ],[ + tmp_getprotobyname_r="no" + ]) + if test "$tmp_getprotobyname_r" = "yes"; then + AC_EGREP_CPP([getprotobyname_r],[ +#include +#include + ],[ + tmp_getprotobyname_r="proto_declared" + ],[ + AC_EGREP_CPP([getprotobyname_r],[ +#define _REENTRANT +#include +#include + ],[ + tmp_getprotobyname_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_GETSERVBYPORT_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes function getservbyport_r compiler visible. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_GETSERVBYPORT_R], [ + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([getservbyport_r]) + ],[ + tmp_getservbyport_r="yes" + ],[ + tmp_getservbyport_r="no" + ]) + if test "$tmp_getservbyport_r" = "yes"; then + AC_EGREP_CPP([getservbyport_r],[ +#include +#include + ],[ + tmp_getservbyport_r="proto_declared" + ],[ + AC_EGREP_CPP([getservbyport_r],[ +#define _REENTRANT +#include +#include + ],[ + tmp_getservbyport_r="proto_needs_reentrant" + tmp_need_reentrant="yes" + ]) + ]) + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_FUNCTIONS_R +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl makes several _r functions compiler visible. +dnl Internal macro for CARES_CONFIGURE_REENTRANT. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_FUNCTIONS_R], [ + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_GMTIME_R + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_LOCALTIME_R + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_STRERROR_R + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_STRTOK_R + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_INET_NTOA_R + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_GETSERVBYPORT_R + fi +]) + + +dnl CARES_CHECK_NEED_REENTRANT_SYSTEM +dnl ------------------------------------------------- +dnl Checks if the preprocessor _REENTRANT definition +dnl must be unconditionally done for this platform. +dnl Internal macro for CARES_CONFIGURE_REENTRANT. + +AC_DEFUN([CARES_CHECK_NEED_REENTRANT_SYSTEM], [ + case $host_os in + solaris*) + tmp_need_reentrant="yes" + ;; + *) + tmp_need_reentrant="no" + ;; + esac +]) + + +dnl CARES_CHECK_NEED_THREAD_SAFE_SYSTEM +dnl ------------------------------------------------- +dnl Checks if the preprocessor _THREAD_SAFE definition +dnl must be unconditionally done for this platform. +dnl Internal macro for CARES_CONFIGURE_THREAD_SAFE. + +AC_DEFUN([CARES_CHECK_NEED_THREAD_SAFE_SYSTEM], [ + case $host_os in + aix[[123]].* | aix4.[[012]].*) + dnl aix 4.2 and older + tmp_need_thread_safe="no" + ;; + aix*) + dnl AIX 4.3 and newer + tmp_need_thread_safe="yes" + ;; + *) + tmp_need_thread_safe="no" + ;; + esac +]) + + +dnl CARES_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT +dnl ------------------------------------------------- +dnl This macro ensures that configuration tests done +dnl after this will execute with preprocessor symbol +dnl _REENTRANT defined. This macro also ensures that +dnl the generated config file defines NEED_REENTRANT +dnl and that in turn setup.h will define _REENTRANT. +dnl Internal macro for CARES_CONFIGURE_REENTRANT. + +AC_DEFUN([CARES_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT], [ +AC_DEFINE(NEED_REENTRANT, 1, + [Define to 1 if _REENTRANT preprocessor symbol must be defined.]) +cat >>confdefs.h <<_EOF +#ifndef _REENTRANT +# define _REENTRANT +#endif +_EOF +]) + + +dnl CARES_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE +dnl ------------------------------------------------- +dnl This macro ensures that configuration tests done +dnl after this will execute with preprocessor symbol +dnl _THREAD_SAFE defined. This macro also ensures that +dnl the generated config file defines NEED_THREAD_SAFE +dnl and that in turn setup.h will define _THREAD_SAFE. +dnl Internal macro for CARES_CONFIGURE_THREAD_SAFE. + +AC_DEFUN([CARES_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE], [ +AC_DEFINE(NEED_THREAD_SAFE, 1, + [Define to 1 if _THREAD_SAFE preprocessor symbol must be defined.]) +cat >>confdefs.h <<_EOF +#ifndef _THREAD_SAFE +# define _THREAD_SAFE +#endif +_EOF +]) + + +dnl CARES_CONFIGURE_REENTRANT +dnl ------------------------------------------------- +dnl This first checks if the preprocessor _REENTRANT +dnl symbol is already defined. If it isn't currently +dnl defined a set of checks are performed to verify +dnl if its definition is required to make visible to +dnl the compiler a set of *_r functions. Finally, if +dnl _REENTRANT is already defined or needed it takes +dnl care of making adjustments necessary to ensure +dnl that it is defined equally for further configure +dnl tests and generated config file. + +AC_DEFUN([CARES_CONFIGURE_REENTRANT], [ + AC_PREREQ([2.50])dnl + # + AC_MSG_CHECKING([if _REENTRANT is already defined]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ +#ifdef _REENTRANT + int dummy=1; +#else + force compilation error +#endif + ]]) + ],[ + AC_MSG_RESULT([yes]) + tmp_reentrant_initially_defined="yes" + ],[ + AC_MSG_RESULT([no]) + tmp_reentrant_initially_defined="no" + ]) + # + if test "$tmp_reentrant_initially_defined" = "no"; then + AC_MSG_CHECKING([if _REENTRANT is actually needed]) + CARES_CHECK_NEED_REENTRANT_SYSTEM + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_ERRNO + fi + if test "$tmp_need_reentrant" = "no"; then + CARES_CHECK_NEED_REENTRANT_FUNCTIONS_R + fi + if test "$tmp_need_reentrant" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + fi + # + AC_MSG_CHECKING([if _REENTRANT is onwards defined]) + if test "$tmp_reentrant_initially_defined" = "yes" || + test "$tmp_need_reentrant" = "yes"; then + CARES_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + # +]) + + +dnl CARES_CONFIGURE_THREAD_SAFE +dnl ------------------------------------------------- +dnl This first checks if the preprocessor _THREAD_SAFE +dnl symbol is already defined. If it isn't currently +dnl defined a set of checks are performed to verify +dnl if its definition is required. Finally, if +dnl _THREAD_SAFE is already defined or needed it takes +dnl care of making adjustments necessary to ensure +dnl that it is defined equally for further configure +dnl tests and generated config file. + +AC_DEFUN([CARES_CONFIGURE_THREAD_SAFE], [ + AC_PREREQ([2.50])dnl + # + AC_MSG_CHECKING([if _THREAD_SAFE is already defined]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ +#ifdef _THREAD_SAFE + int dummy=1; +#else + force compilation error +#endif + ]]) + ],[ + AC_MSG_RESULT([yes]) + tmp_thread_safe_initially_defined="yes" + ],[ + AC_MSG_RESULT([no]) + tmp_thread_safe_initially_defined="no" + ]) + # + if test "$tmp_thread_safe_initially_defined" = "no"; then + AC_MSG_CHECKING([if _THREAD_SAFE is actually needed]) + CARES_CHECK_NEED_THREAD_SAFE_SYSTEM + if test "$tmp_need_thread_safe" = "yes"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + fi + # + AC_MSG_CHECKING([if _THREAD_SAFE is onwards defined]) + if test "$tmp_thread_safe_initially_defined" = "yes" || + test "$tmp_need_thread_safe" = "yes"; then + CARES_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + # +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/libtool.m4 nodejs-mozilla-12.22.12/deps/cares/m4/libtool.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/libtool.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/libtool.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,8394 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cr libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cr libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[912]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*|11.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cr} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + $ECHO "$as_me:$LINENO: $NM conftest.$ac_objext | $lt_cv_sys_global_symbol_pipe > $nlist" >&AS_MESSAGE_LOG_FD + if eval "$NM" conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist 2>&AS_MESSAGE_LOG_FD && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # flang / f18. f95 an alias for gfortran or flang on Debian + flang* | f18* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP " \-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP " \-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/lt~obsolete.m4 nodejs-mozilla-12.22.12/deps/cares/m4/lt~obsolete.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/lt~obsolete.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/lt~obsolete.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ltoptions.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ltoptions.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ltoptions.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ltoptions.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ltsugar.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ltsugar.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ltsugar.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ltsugar.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/ltversion.m4 nodejs-mozilla-12.22.12/deps/cares/m4/ltversion.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/ltversion.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/ltversion.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/xc-am-iface.m4 nodejs-mozilla-12.22.12/deps/cares/m4/xc-am-iface.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/xc-am-iface.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/xc-am-iface.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,253 @@ +#--------------------------------------------------------------------------- +# +# xc-am-iface.m4 +# +# Copyright (c) 2013 Daniel Stenberg +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +#--------------------------------------------------------------------------- + +# serial 1 + + +dnl _XC_AUTOMAKE_BODY +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl This macro performs embedding of automake initialization +dnl code into configure script. When automake version 1.14 or +dnl newer is used at configure script generation time, this +dnl results in 'subdir-objects' automake option being used. +dnl When using automake versions older than 1.14 this option +dnl is not used when generating configure script. +dnl +dnl Existence of automake _AM_PROG_CC_C_O m4 private macro +dnl is used to differentiate automake version 1.14 from older +dnl ones which lack this macro. + +m4_define([_XC_AUTOMAKE_BODY], +[dnl +## --------------------------------------- ## +## Start of automake initialization code ## +## --------------------------------------- ## +m4_ifdef([_AM_PROG_CC_C_O], +[ +AM_INIT_AUTOMAKE([subdir-objects]) +],[ +AM_INIT_AUTOMAKE +])dnl +## ------------------------------------- ## +## End of automake initialization code ## +## ------------------------------------- ## +dnl +m4_define([$0], [])[]dnl +]) + + +dnl XC_AUTOMAKE +dnl ------------------------------------------------- +dnl Public macro. +dnl +dnl This macro embeds automake machinery into configure +dnl script regardless of automake version used in order +dnl to generate configure script. +dnl +dnl When using automake version 1.14 or newer, automake +dnl initialization option 'subdir-objects' is used to +dnl generate the configure script, otherwise this option +dnl is not used. + +AC_DEFUN([XC_AUTOMAKE], +[dnl +AC_PREREQ([2.50])dnl +dnl +AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl +dnl +_XC_AUTOMAKE_BODY +dnl +m4_ifdef([AM_INIT_AUTOMAKE], + [m4_undefine([AM_INIT_AUTOMAKE])])dnl +dnl +m4_define([$0], [])[]dnl +]) + + +dnl _XC_AMEND_DISTCLEAN_BODY ([LIST-OF-SUBDIRS]) +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl This macro performs shell code embedding into +dnl configure script in order to modify distclean +dnl and maintainer-clean targets of makefiles which +dnl are located in given list of subdirs. +dnl +dnl See XC_AMEND_DISTCLEAN comments for details. + +m4_define([_XC_AMEND_DISTCLEAN_BODY], +[dnl +## ---------------------------------- ## +## Start of distclean amending code ## +## ---------------------------------- ## + +for xc_subdir in [$1] +do + +if test ! -f "$xc_subdir/Makefile"; then + echo "$xc_msg_err $xc_subdir/Makefile file not found. $xc_msg_abrt" >&2 + exit 1 +fi + +# Fetch dependency tracking file list from Makefile include lines. + +xc_inc_lines=`grep '^include .*(DEPDIR)' "$xc_subdir/Makefile" 2>/dev/null` +xc_cnt_words=`echo "$xc_inc_lines" | wc -w | tr -d "$xc_space$xc_tab"` + +# --disable-dependency-tracking might have been used, consequently +# there is nothing to amend without a dependency tracking file list. + +if test $xc_cnt_words -gt 0; then + +AC_MSG_NOTICE([amending $xc_subdir/Makefile]) + +# Build Makefile specific patch hunk. + +xc_p="$xc_subdir/xc_patch.tmp" + +xc_rm_depfiles=`echo "$xc_inc_lines" \ + | $SED 's%include% -rm -f%' 2>/dev/null` + +xc_dep_subdirs=`echo "$xc_inc_lines" \ + | $SED 's%include[[ ]][[ ]]*%%' 2>/dev/null \ + | $SED 's%(DEPDIR)/.*%(DEPDIR)%' 2>/dev/null \ + | sort | uniq` + +echo "$xc_rm_depfiles" >$xc_p + +for xc_dep_dir in $xc_dep_subdirs; do + echo "${xc_tab}@xm_dep_cnt=\`ls $xc_dep_dir | wc -l 2>/dev/null\`; \\" >>$xc_p + echo "${xc_tab}if test \$\$xm_dep_cnt -eq 0 && test -d $xc_dep_dir; then \\" >>$xc_p + echo "${xc_tab} rm -rf $xc_dep_dir; \\" >>$xc_p + echo "${xc_tab}fi" >>$xc_p +done + +# Build Makefile patching sed scripts. + +xc_s1="$xc_subdir/xc_script_1.tmp" +xc_s2="$xc_subdir/xc_script_2.tmp" +xc_s3="$xc_subdir/xc_script_3.tmp" + +cat >$xc_s1 <<\_EOT +/^distclean[[ ]]*:/,/^[[^ ]][[^ ]]*:/{ + s/^.*(DEPDIR)/___xc_depdir_line___/ +} +/^maintainer-clean[[ ]]*:/,/^[[^ ]][[^ ]]*:/{ + s/^.*(DEPDIR)/___xc_depdir_line___/ +} +_EOT + +cat >$xc_s2 <<\_EOT +/___xc_depdir_line___$/{ + N + /___xc_depdir_line___$/D +} +_EOT + +cat >$xc_s3 <<_EOT +/^___xc_depdir_line___/{ + r $xc_p + d +} +_EOT + +# Apply patch to Makefile and cleanup. + +$SED -f "$xc_s1" "$xc_subdir/Makefile" >"$xc_subdir/Makefile.tmp1" +$SED -f "$xc_s2" "$xc_subdir/Makefile.tmp1" >"$xc_subdir/Makefile.tmp2" +$SED -f "$xc_s3" "$xc_subdir/Makefile.tmp2" >"$xc_subdir/Makefile.tmp3" + +if test -f "$xc_subdir/Makefile.tmp3"; then + mv -f "$xc_subdir/Makefile.tmp3" "$xc_subdir/Makefile" +fi + +test -f "$xc_subdir/Makefile.tmp1" && rm -f "$xc_subdir/Makefile.tmp1" +test -f "$xc_subdir/Makefile.tmp2" && rm -f "$xc_subdir/Makefile.tmp2" +test -f "$xc_subdir/Makefile.tmp3" && rm -f "$xc_subdir/Makefile.tmp3" + +test -f "$xc_p" && rm -f "$xc_p" +test -f "$xc_s1" && rm -f "$xc_s1" +test -f "$xc_s2" && rm -f "$xc_s2" +test -f "$xc_s3" && rm -f "$xc_s3" + +fi + +done + +## -------------------------------- ## +## End of distclean amending code ## +## -------------------------------- ## +dnl +m4_define([$0], [])[]dnl +]) + + +dnl XC_AMEND_DISTCLEAN ([LIST-OF-SUBDIRS]) +dnl ------------------------------------------------- +dnl Public macro. +dnl +dnl This macro embeds shell code into configure script +dnl that amends, at configure runtime, the distclean +dnl and maintainer-clean targets of Makefiles located +dnl in all subdirs given in the mandatory white-space +dnl separated list argument. +dnl +dnl Embedding only takes place when using automake 1.14 +dnl or newer, otherwise amending code is not included +dnl in generated configure script. +dnl +dnl distclean and maintainer-clean targets are modified +dnl to avoid unconditional removal of dependency subdirs +dnl which triggers distclean and maintainer-clean errors +dnl when using automake 'subdir-objects' option along +dnl with per-target objects and source files existing in +dnl multiple subdirs used for different build targets. +dnl +dnl New behavior first removes each dependency tracking +dnl file independently, and only removes each dependency +dnl subdir when it finds out that it no longer holds any +dnl dependency tracking file. +dnl +dnl When configure option --disable-dependency-tracking +dnl is used no amending takes place given that there are +dnl no dependency tracking files. + +AC_DEFUN([XC_AMEND_DISTCLEAN], +[dnl +AC_PREREQ([2.50])dnl +dnl +m4_ifdef([_AC_OUTPUT_MAIN_LOOP], + [m4_provide_if([_AC_OUTPUT_MAIN_LOOP], [], + [m4_fatal([call to AC_OUTPUT needed before $0])])])dnl +dnl +m4_if([$#], [1], [], [m4_fatal([$0: wrong number of arguments])])dnl +m4_if([$1], [], [m4_fatal([$0: missing argument])])dnl +dnl +AC_REQUIRE([XC_CONFIGURE_PREAMBLE])dnl +dnl +m4_ifdef([_AM_PROG_CC_C_O], +[ +_XC_AMEND_DISTCLEAN_BODY([$1]) +])dnl +m4_define([$0], [])[]dnl +]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/xc-cc-check.m4 nodejs-mozilla-12.22.12/deps/cares/m4/xc-cc-check.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/xc-cc-check.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/xc-cc-check.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,96 @@ +#--------------------------------------------------------------------------- +# +# xc-cc-check.m4 +# +# Copyright (c) 2013 Daniel Stenberg +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +#--------------------------------------------------------------------------- + +# serial 1 + + +dnl _XC_PROG_CC_PREAMBLE +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_PROG_CC_PREAMBLE], [ + xc_prog_cc_prev_IFS=$IFS + xc_prog_cc_prev_LIBS=$LIBS + xc_prog_cc_prev_CFLAGS=$CFLAGS + xc_prog_cc_prev_LDFLAGS=$LDFLAGS + xc_prog_cc_prev_CPPFLAGS=$CPPFLAGS +]) + + +dnl _XC_PROG_CC_POSTLUDE +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_PROG_CC_POSTLUDE], [ + IFS=$xc_prog_cc_prev_IFS + LIBS=$xc_prog_cc_prev_LIBS + CFLAGS=$xc_prog_cc_prev_CFLAGS + LDFLAGS=$xc_prog_cc_prev_LDFLAGS + CPPFLAGS=$xc_prog_cc_prev_CPPFLAGS + AC_SUBST([CC])dnl + AC_SUBST([CPP])dnl + AC_SUBST([LIBS])dnl + AC_SUBST([CFLAGS])dnl + AC_SUBST([LDFLAGS])dnl + AC_SUBST([CPPFLAGS])dnl +]) + + +dnl _XC_PROG_CC +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_PROG_CC], [ + AC_REQUIRE([_XC_PROG_CC_PREAMBLE])dnl + AC_REQUIRE([XC_CHECK_BUILD_FLAGS])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AM_PROG_CC_C_O])dnl + AC_REQUIRE([AC_PROG_CPP])dnl + AC_REQUIRE([_XC_PROG_CC_POSTLUDE])dnl +]) + + +dnl XC_CHECK_PROG_CC +dnl ------------------------------------------------- +dnl Public macro. +dnl +dnl Checks for C compiler and C preprocessor programs, +dnl while doing some previous sanity validation on user +dnl provided LIBS, LDFLAGS, CPPFLAGS and CFLAGS values +dnl that must succeed in order to continue execution. +dnl +dnl This sets variables CC and CPP, while preventing +dnl LIBS, LDFLAGS, CFLAGS, CPPFLAGS and IFS from being +dnl unexpectedly changed by underlying macros. + +AC_DEFUN([XC_CHECK_PROG_CC], [ + AC_PREREQ([2.50])dnl + AC_BEFORE([$0],[_XC_PROG_CC_PREAMBLE])dnl + AC_BEFORE([$0],[AC_PROG_INSTALL])dnl + AC_BEFORE([$0],[AC_PROG_CC])dnl + AC_BEFORE([$0],[AM_PROG_CC_C_O])dnl + AC_BEFORE([$0],[AC_PROG_CPP])dnl + AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl + AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl + AC_BEFORE([$0],[_XC_PROG_CC_POSTLUDE])dnl + AC_REQUIRE([_XC_PROG_CC])dnl +]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/xc-lt-iface.m4 nodejs-mozilla-12.22.12/deps/cares/m4/xc-lt-iface.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/xc-lt-iface.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/xc-lt-iface.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,465 @@ +#--------------------------------------------------------------------------- +# +# xc-lt-iface.m4 +# +# Copyright (c) 2013 Daniel Stenberg +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +#--------------------------------------------------------------------------- + +# serial 1 + + +dnl _XC_LIBTOOL_PREAMBLE +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Checks some configure script options related with +dnl libtool and customizes its default behavior before +dnl libtool code is actually used in script. + +m4_define([_XC_LIBTOOL_PREAMBLE], +[dnl +# ------------------------------------ # +# Determine libtool default behavior # +# ------------------------------------ # + +# +# Default behavior is to enable shared and static libraries on systems +# where libtool knows how to build both library versions, and does not +# require separate configuration and build runs for each flavor. +# + +xc_lt_want_enable_shared='yes' +xc_lt_want_enable_static='yes' + +# +# User may have disabled shared or static libraries. +# +case "x$enable_shared" in @%:@ ( + xno) + xc_lt_want_enable_shared='no' + ;; +esac +case "x$enable_static" in @%:@ ( + xno) + xc_lt_want_enable_static='no' + ;; +esac +if test "x$xc_lt_want_enable_shared" = 'xno' && + test "x$xc_lt_want_enable_static" = 'xno'; then + AC_MSG_ERROR([can not disable shared and static libraries simultaneously]) +fi + +# +# Default behavior on systems that require independent configuration +# and build runs for shared and static is to enable shared libraries +# and disable static ones. On these systems option '--disable-shared' +# must be used in order to build a proper static library. +# + +if test "x$xc_lt_want_enable_shared" = 'xyes' && + test "x$xc_lt_want_enable_static" = 'xyes'; then + case $host_os in @%:@ ( + mingw* | pw32* | cegcc* | os2* | aix*) + xc_lt_want_enable_static='no' + ;; + esac +fi + +# +# Make libtool aware of current shared and static library preferences +# taking in account that, depending on host characteristics, libtool +# may modify these option preferences later in this configure script. +# + +enable_shared=$xc_lt_want_enable_shared +enable_static=$xc_lt_want_enable_static + +# +# Default behavior is to build PIC objects for shared libraries and +# non-PIC objects for static libraries. +# + +xc_lt_want_with_pic='default' + +# +# User may have specified PIC preference. +# + +case "x$with_pic" in @%:@ (( + xno) + xc_lt_want_with_pic='no' + ;; + xyes) + xc_lt_want_with_pic='yes' + ;; +esac + +# +# Default behavior on some systems where building a shared library out +# of non-PIC compiled objects will fail with following linker error +# "relocation R_X86_64_32 can not be used when making a shared object" +# is to build PIC objects even for static libraries. This behavior may +# be overriden using 'configure --disable-shared --without-pic'. +# + +if test "x$xc_lt_want_with_pic" = 'xdefault'; then + case $host_cpu in @%:@ ( + x86_64 | amd64 | ia64) + case $host_os in @%:@ ( + linux* | freebsd*) + xc_lt_want_with_pic='yes' + ;; + esac + ;; + esac +fi + +# +# Make libtool aware of current PIC preference taking in account that, +# depending on host characteristics, libtool may modify PIC default +# behavior to fit host system idiosyncrasies later in this script. +# + +with_pic=$xc_lt_want_with_pic +dnl +m4_define([$0],[])dnl +]) + + +dnl _XC_LIBTOOL_BODY +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl This macro performs embedding of libtool code into +dnl configure script, regardless of libtool version in +dnl use when generating configure script. + +m4_define([_XC_LIBTOOL_BODY], +[dnl +## ----------------------- ## +## Start of libtool code ## +## ----------------------- ## +m4_ifdef([LT_INIT], +[dnl +LT_INIT([win32-dll]) +],[dnl +AC_LIBTOOL_WIN32_DLL +AC_PROG_LIBTOOL +])dnl +## --------------------- ## +## End of libtool code ## +## --------------------- ## +dnl +m4_define([$0], [])[]dnl +]) + + +dnl _XC_CHECK_LT_BUILD_LIBRARIES +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Checks wether libtool shared and static libraries +dnl are finally built depending on user input, default +dnl behavior and knowledge that libtool has about host +dnl characteristics. +dnl Results stored in following shell variables: +dnl xc_lt_build_shared +dnl xc_lt_build_static + +m4_define([_XC_CHECK_LT_BUILD_LIBRARIES], +[dnl +# +# Verify if finally libtool shared libraries will be built +# + +case "x$enable_shared" in @%:@ (( + xyes | xno) + xc_lt_build_shared=$enable_shared + ;; + *) + AC_MSG_ERROR([unexpected libtool enable_shared value: $enable_shared]) + ;; +esac + +# +# Verify if finally libtool static libraries will be built +# + +case "x$enable_static" in @%:@ (( + xyes | xno) + xc_lt_build_static=$enable_static + ;; + *) + AC_MSG_ERROR([unexpected libtool enable_static value: $enable_static]) + ;; +esac +dnl +m4_define([$0],[])dnl +]) + + +dnl _XC_CHECK_LT_SHLIB_USE_VERSION_INFO +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Checks if the -version-info linker flag must be +dnl provided when building libtool shared libraries. +dnl Result stored in xc_lt_shlib_use_version_info. + +m4_define([_XC_CHECK_LT_SHLIB_USE_VERSION_INFO], +[dnl +# +# Verify if libtool shared libraries should be linked using flag -version-info +# + +AC_MSG_CHECKING([whether to build shared libraries with -version-info]) +xc_lt_shlib_use_version_info='yes' +if test "x$version_type" = 'xnone'; then + xc_lt_shlib_use_version_info='no' +fi +case $host_os in @%:@ ( + amigaos*) + xc_lt_shlib_use_version_info='yes' + ;; +esac +AC_MSG_RESULT([$xc_lt_shlib_use_version_info]) +dnl +m4_define([$0], [])[]dnl +]) + + +dnl _XC_CHECK_LT_SHLIB_USE_NO_UNDEFINED +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Checks if the -no-undefined linker flag must be +dnl provided when building libtool shared libraries. +dnl Result stored in xc_lt_shlib_use_no_undefined. + +m4_define([_XC_CHECK_LT_SHLIB_USE_NO_UNDEFINED], +[dnl +# +# Verify if libtool shared libraries should be linked using flag -no-undefined +# + +AC_MSG_CHECKING([whether to build shared libraries with -no-undefined]) +xc_lt_shlib_use_no_undefined='no' +if test "x$allow_undefined" = 'xno'; then + xc_lt_shlib_use_no_undefined='yes' +elif test "x$allow_undefined_flag" = 'xunsupported'; then + xc_lt_shlib_use_no_undefined='yes' +fi +case $host_os in @%:@ ( + cygwin* | mingw* | pw32* | cegcc* | os2* | aix*) + xc_lt_shlib_use_no_undefined='yes' + ;; +esac +AC_MSG_RESULT([$xc_lt_shlib_use_no_undefined]) +dnl +m4_define([$0], [])[]dnl +]) + + +dnl _XC_CHECK_LT_SHLIB_USE_MIMPURE_TEXT +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Checks if the -mimpure-text linker flag must be +dnl provided when building libtool shared libraries. +dnl Result stored in xc_lt_shlib_use_mimpure_text. + +m4_define([_XC_CHECK_LT_SHLIB_USE_MIMPURE_TEXT], +[dnl +# +# Verify if libtool shared libraries should be linked using flag -mimpure-text +# + +AC_MSG_CHECKING([whether to build shared libraries with -mimpure-text]) +xc_lt_shlib_use_mimpure_text='no' +case $host_os in @%:@ ( + solaris2*) + if test "x$GCC" = 'xyes'; then + xc_lt_shlib_use_mimpure_text='yes' + fi + ;; +esac +AC_MSG_RESULT([$xc_lt_shlib_use_mimpure_text]) +dnl +m4_define([$0], [])[]dnl +]) + + +dnl _XC_CHECK_LT_BUILD_WITH_PIC +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Checks wether libtool shared and static libraries +dnl would be built with PIC depending on user input, +dnl default behavior and knowledge that libtool has +dnl about host characteristics. +dnl Results stored in following shell variables: +dnl xc_lt_build_shared_with_pic +dnl xc_lt_build_static_with_pic + +m4_define([_XC_CHECK_LT_BUILD_WITH_PIC], +[dnl +# +# Find out wether libtool libraries would be built wit PIC +# + +case "x$pic_mode" in @%:@ (((( + xdefault) + xc_lt_build_shared_with_pic='yes' + xc_lt_build_static_with_pic='no' + ;; + xyes) + xc_lt_build_shared_with_pic='yes' + xc_lt_build_static_with_pic='yes' + ;; + xno) + xc_lt_build_shared_with_pic='no' + xc_lt_build_static_with_pic='no' + ;; + *) + xc_lt_build_shared_with_pic='unknown' + xc_lt_build_static_with_pic='unknown' + AC_MSG_WARN([unexpected libtool pic_mode value: $pic_mode]) + ;; +esac +AC_MSG_CHECKING([whether to build shared libraries with PIC]) +AC_MSG_RESULT([$xc_lt_build_shared_with_pic]) +AC_MSG_CHECKING([whether to build static libraries with PIC]) +AC_MSG_RESULT([$xc_lt_build_static_with_pic]) +dnl +m4_define([$0],[])dnl +]) + + +dnl _XC_CHECK_LT_BUILD_SINGLE_VERSION +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Checks wether a libtool shared or static library +dnl is finally built exclusively without the other. +dnl Results stored in following shell variables: +dnl xc_lt_build_shared_only +dnl xc_lt_build_static_only + +m4_define([_XC_CHECK_LT_BUILD_SINGLE_VERSION], +[dnl +# +# Verify if libtool shared libraries will be built while static not built +# + +AC_MSG_CHECKING([whether to build shared libraries only]) +if test "$xc_lt_build_shared" = 'yes' && + test "$xc_lt_build_static" = 'no'; then + xc_lt_build_shared_only='yes' +else + xc_lt_build_shared_only='no' +fi +AC_MSG_RESULT([$xc_lt_build_shared_only]) + +# +# Verify if libtool static libraries will be built while shared not built +# + +AC_MSG_CHECKING([whether to build static libraries only]) +if test "$xc_lt_build_static" = 'yes' && + test "$xc_lt_build_shared" = 'no'; then + xc_lt_build_static_only='yes' +else + xc_lt_build_static_only='no' +fi +AC_MSG_RESULT([$xc_lt_build_static_only]) +dnl +m4_define([$0],[])dnl +]) + + +dnl _XC_LIBTOOL_POSTLUDE +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Performs several checks related with libtool that +dnl can not be done unless libtool code has already +dnl been executed. See individual check descriptions +dnl for further info. + +m4_define([_XC_LIBTOOL_POSTLUDE], +[dnl +_XC_CHECK_LT_BUILD_LIBRARIES +_XC_CHECK_LT_SHLIB_USE_VERSION_INFO +_XC_CHECK_LT_SHLIB_USE_NO_UNDEFINED +_XC_CHECK_LT_SHLIB_USE_MIMPURE_TEXT +_XC_CHECK_LT_BUILD_WITH_PIC +_XC_CHECK_LT_BUILD_SINGLE_VERSION +dnl +m4_define([$0],[])dnl +]) + + +dnl XC_LIBTOOL +dnl ------------------------------------------------- +dnl Public macro. +dnl +dnl This macro embeds libtool machinery into configure +dnl script, regardless of libtool version, and performs +dnl several additional checks whose results can be used +dnl later on. +dnl +dnl Usage of this macro ensures that generated configure +dnl script uses equivalent logic irrespective of autoconf +dnl or libtool version being used to generate configure +dnl script. +dnl +dnl Results stored in following shell variables: +dnl xc_lt_build_shared +dnl xc_lt_build_static +dnl xc_lt_shlib_use_version_info +dnl xc_lt_shlib_use_no_undefined +dnl xc_lt_shlib_use_mimpure_text +dnl xc_lt_build_shared_with_pic +dnl xc_lt_build_static_with_pic +dnl xc_lt_build_shared_only +dnl xc_lt_build_static_only + +AC_DEFUN([XC_LIBTOOL], +[dnl +AC_PREREQ([2.50])dnl +dnl +AC_BEFORE([$0],[LT_INIT])dnl +AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl +AC_BEFORE([$0],[AC_LIBTOOL_WIN32_DLL])dnl +dnl +AC_REQUIRE([XC_CHECK_PATH_SEPARATOR])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +dnl +_XC_LIBTOOL_PREAMBLE +_XC_LIBTOOL_BODY +_XC_LIBTOOL_POSTLUDE +dnl +m4_ifdef([AC_LIBTOOL_WIN32_DLL], + [m4_undefine([AC_LIBTOOL_WIN32_DLL])])dnl +m4_ifdef([AC_PROG_LIBTOOL], + [m4_undefine([AC_PROG_LIBTOOL])])dnl +m4_ifdef([LT_INIT], + [m4_undefine([LT_INIT])])dnl +dnl +m4_define([$0],[])dnl +]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/xc-translit.m4 nodejs-mozilla-12.22.12/deps/cares/m4/xc-translit.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/xc-translit.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/xc-translit.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,164 @@ +#--------------------------------------------------------------------------- +# +# xc-translit.m4 +# +# Copyright (c) 2011 Daniel Stenberg +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +#--------------------------------------------------------------------------- + +# File version for 'aclocal' use. Keep it a single number. +# serial 2 + + +dnl XC_SH_TR_SH (expression) +dnl ------------------------------------------------- +dnl Shell execution time transliteration of 'expression' +dnl argument, where all non-alfanumeric characters are +dnl converted to the underscore '_' character. +dnl Normal shell expansion and substitution takes place +dnl for given 'expression' at shell execution time before +dnl transliteration is applied to it. + +AC_DEFUN([XC_SH_TR_SH], +[`echo "$1" | sed 's/[[^a-zA-Z0-9_]]/_/g'`]) + + +dnl XC_SH_TR_SH_EX (expression, [extra]) +dnl ------------------------------------------------- +dnl Like XC_SH_TR_SH but transliterating characters +dnl given in 'extra' argument to lowercase 'p'. For +dnl example [*+], [*], and [+] are valid 'extra' args. + +AC_DEFUN([XC_SH_TR_SH_EX], +[ifelse([$2], [], + [XC_SH_TR_SH([$1])], + [`echo "$1" | sed 's/[[$2]]/p/g' | sed 's/[[^a-zA-Z0-9_]]/_/g'`])]) + + +dnl XC_M4_TR_SH (expression) +dnl ------------------------------------------------- +dnl m4 execution time transliteration of 'expression' +dnl argument, where all non-alfanumeric characters are +dnl converted to the underscore '_' character. + +AC_DEFUN([XC_M4_TR_SH], +[patsubst(XC_QPATSUBST(XC_QUOTE($1), + [[^a-zA-Z0-9_]], [_]), + [\(_\(.*\)_\)], [\2])]) + + +dnl XC_M4_TR_SH_EX (expression, [extra]) +dnl ------------------------------------------------- +dnl Like XC_M4_TR_SH but transliterating characters +dnl given in 'extra' argument to lowercase 'p'. For +dnl example [*+], [*], and [+] are valid 'extra' args. + +AC_DEFUN([XC_M4_TR_SH_EX], +[ifelse([$2], [], + [XC_M4_TR_SH([$1])], + [patsubst(XC_QPATSUBST(XC_QPATSUBST(XC_QUOTE($1), + [[$2]], + [p]), + [[^a-zA-Z0-9_]], [_]), + [\(_\(.*\)_\)], [\2])])]) + + +dnl XC_SH_TR_CPP (expression) +dnl ------------------------------------------------- +dnl Shell execution time transliteration of 'expression' +dnl argument, where all non-alfanumeric characters are +dnl converted to the underscore '_' character and alnum +dnl characters are converted to uppercase. +dnl Normal shell expansion and substitution takes place +dnl for given 'expression' at shell execution time before +dnl transliteration is applied to it. + +AC_DEFUN([XC_SH_TR_CPP], +[`echo "$1" | dnl +sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' | dnl +sed 's/[[^A-Z0-9_]]/_/g'`]) + + +dnl XC_SH_TR_CPP_EX (expression, [extra]) +dnl ------------------------------------------------- +dnl Like XC_SH_TR_CPP but transliterating characters +dnl given in 'extra' argument to uppercase 'P'. For +dnl example [*+], [*], and [+] are valid 'extra' args. + +AC_DEFUN([XC_SH_TR_CPP_EX], +[ifelse([$2], [], + [XC_SH_TR_CPP([$1])], + [`echo "$1" | dnl +sed 's/[[$2]]/P/g' | dnl +sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' | dnl +sed 's/[[^A-Z0-9_]]/_/g'`])]) + + +dnl XC_M4_TR_CPP (expression) +dnl ------------------------------------------------- +dnl m4 execution time transliteration of 'expression' +dnl argument, where all non-alfanumeric characters are +dnl converted to the underscore '_' character and alnum +dnl characters are converted to uppercase. + +AC_DEFUN([XC_M4_TR_CPP], +[patsubst(XC_QPATSUBST(XC_QTRANSLIT(XC_QUOTE($1), + [abcdefghijklmnopqrstuvwxyz], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ]), + [[^A-Z0-9_]], [_]), + [\(_\(.*\)_\)], [\2])]) + + +dnl XC_M4_TR_CPP_EX (expression, [extra]) +dnl ------------------------------------------------- +dnl Like XC_M4_TR_CPP but transliterating characters +dnl given in 'extra' argument to uppercase 'P'. For +dnl example [*+], [*], and [+] are valid 'extra' args. + +AC_DEFUN([XC_M4_TR_CPP_EX], +[ifelse([$2], [], + [XC_M4_TR_CPP([$1])], + [patsubst(XC_QPATSUBST(XC_QTRANSLIT(XC_QPATSUBST(XC_QUOTE($1), + [[$2]], + [P]), + [abcdefghijklmnopqrstuvwxyz], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ]), + [[^A-Z0-9_]], [_]), + [\(_\(.*\)_\)], [\2])])]) + + +dnl XC_QUOTE (expression) +dnl ------------------------------------------------- +dnl Expands to quoted result of 'expression' expansion. + +AC_DEFUN([XC_QUOTE], +[[$@]]) + + +dnl XC_QPATSUBST (string, regexp[, repl]) +dnl ------------------------------------------------- +dnl Expands to quoted result of 'patsubst' expansion. + +AC_DEFUN([XC_QPATSUBST], +[XC_QUOTE(patsubst([$1], [$2], [$3]))]) + + +dnl XC_QTRANSLIT (string, chars, repl) +dnl ------------------------------------------------- +dnl Expands to quoted result of 'translit' expansion. + +AC_DEFUN([XC_QTRANSLIT], +[XC_QUOTE(translit([$1], [$2], [$3]))]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/xc-val-flgs.m4 nodejs-mozilla-12.22.12/deps/cares/m4/xc-val-flgs.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/xc-val-flgs.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/xc-val-flgs.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,243 @@ +#--------------------------------------------------------------------------- +# +# xc-val-flgs.m4 +# +# Copyright (c) 2013 Daniel Stenberg +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +#--------------------------------------------------------------------------- + +# serial 1 + + +dnl _XC_CHECK_VAR_LIBS +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_CHECK_VAR_LIBS], [ + xc_bad_var_libs=no + for xc_word in $LIBS; do + case "$xc_word" in + -l* | --library=*) + : + ;; + *) + xc_bad_var_libs=yes + ;; + esac + done + if test $xc_bad_var_libs = yes; then + AC_MSG_NOTICE([using LIBS: $LIBS]) + AC_MSG_NOTICE([LIBS error: LIBS may only be used to specify libraries (-lname).]) + fi +]) + + +dnl _XC_CHECK_VAR_LDFLAGS +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_CHECK_VAR_LDFLAGS], [ + xc_bad_var_ldflags=no + for xc_word in $LDFLAGS; do + case "$xc_word" in + -D*) + xc_bad_var_ldflags=yes + ;; + -U*) + xc_bad_var_ldflags=yes + ;; + -I*) + xc_bad_var_ldflags=yes + ;; + -l* | --library=*) + xc_bad_var_ldflags=yes + ;; + esac + done + if test $xc_bad_var_ldflags = yes; then + AC_MSG_NOTICE([using LDFLAGS: $LDFLAGS]) + xc_bad_var_msg="LDFLAGS error: LDFLAGS may only be used to specify linker flags, not" + for xc_word in $LDFLAGS; do + case "$xc_word" in + -D*) + AC_MSG_NOTICE([$xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word]) + ;; + -U*) + AC_MSG_NOTICE([$xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word]) + ;; + -I*) + AC_MSG_NOTICE([$xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word]) + ;; + -l* | --library=*) + AC_MSG_NOTICE([$xc_bad_var_msg libraries. Use LIBS for: $xc_word]) + ;; + esac + done + fi +]) + + +dnl _XC_CHECK_VAR_CPPFLAGS +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_CHECK_VAR_CPPFLAGS], [ + xc_bad_var_cppflags=no + for xc_word in $CPPFLAGS; do + case "$xc_word" in + -rpath*) + xc_bad_var_cppflags=yes + ;; + -L* | --library-path=*) + xc_bad_var_cppflags=yes + ;; + -l* | --library=*) + xc_bad_var_cppflags=yes + ;; + esac + done + if test $xc_bad_var_cppflags = yes; then + AC_MSG_NOTICE([using CPPFLAGS: $CPPFLAGS]) + xc_bad_var_msg="CPPFLAGS error: CPPFLAGS may only be used to specify C preprocessor flags, not" + for xc_word in $CPPFLAGS; do + case "$xc_word" in + -rpath*) + AC_MSG_NOTICE([$xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word]) + ;; + -L* | --library-path=*) + AC_MSG_NOTICE([$xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word]) + ;; + -l* | --library=*) + AC_MSG_NOTICE([$xc_bad_var_msg libraries. Use LIBS for: $xc_word]) + ;; + esac + done + fi +]) + + +dnl _XC_CHECK_VAR_CFLAGS +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_CHECK_VAR_CFLAGS], [ + xc_bad_var_cflags=no + for xc_word in $CFLAGS; do + case "$xc_word" in + -D*) + xc_bad_var_cflags=yes + ;; + -U*) + xc_bad_var_cflags=yes + ;; + -I*) + xc_bad_var_cflags=yes + ;; + -rpath*) + xc_bad_var_cflags=yes + ;; + -L* | --library-path=*) + xc_bad_var_cflags=yes + ;; + -l* | --library=*) + xc_bad_var_cflags=yes + ;; + esac + done + if test $xc_bad_var_cflags = yes; then + AC_MSG_NOTICE([using CFLAGS: $CFLAGS]) + xc_bad_var_msg="CFLAGS error: CFLAGS may only be used to specify C compiler flags, not" + for xc_word in $CFLAGS; do + case "$xc_word" in + -D*) + AC_MSG_NOTICE([$xc_bad_var_msg macro definitions. Use CPPFLAGS for: $xc_word]) + ;; + -U*) + AC_MSG_NOTICE([$xc_bad_var_msg macro suppressions. Use CPPFLAGS for: $xc_word]) + ;; + -I*) + AC_MSG_NOTICE([$xc_bad_var_msg include directories. Use CPPFLAGS for: $xc_word]) + ;; + -rpath*) + AC_MSG_NOTICE([$xc_bad_var_msg library runtime directories. Use LDFLAGS for: $xc_word]) + ;; + -L* | --library-path=*) + AC_MSG_NOTICE([$xc_bad_var_msg library directories. Use LDFLAGS for: $xc_word]) + ;; + -l* | --library=*) + AC_MSG_NOTICE([$xc_bad_var_msg libraries. Use LIBS for: $xc_word]) + ;; + esac + done + fi +]) + + +dnl XC_CHECK_USER_FLAGS +dnl ------------------------------------------------- +dnl Public macro. +dnl +dnl Performs some sanity checks for LIBS, LDFLAGS, +dnl CPPFLAGS and CFLAGS values that the user might +dnl have set. When checks fails, user is noticed +dnl about errors detected in all of them and script +dnl execution is halted. +dnl +dnl Intended to be used early in configure script. + +AC_DEFUN([XC_CHECK_USER_FLAGS], [ + AC_PREREQ([2.50])dnl + AC_BEFORE([$0],[XC_CHECK_PROG_CC])dnl + dnl check order below matters + _XC_CHECK_VAR_LIBS + _XC_CHECK_VAR_LDFLAGS + _XC_CHECK_VAR_CPPFLAGS + _XC_CHECK_VAR_CFLAGS + if test $xc_bad_var_libs = yes || + test $xc_bad_var_cflags = yes || + test $xc_bad_var_ldflags = yes || + test $xc_bad_var_cppflags = yes; then + AC_MSG_ERROR([Can not continue. Fix errors mentioned immediately above this line.]) + fi +]) + + +dnl XC_CHECK_BUILD_FLAGS +dnl ------------------------------------------------- +dnl Public macro. +dnl +dnl Performs some sanity checks for LIBS, LDFLAGS, +dnl CPPFLAGS and CFLAGS values that the configure +dnl script might have set. When checks fails, user +dnl is noticed about errors detected in all of them +dnl but script continues execution. +dnl +dnl Intended to be used very late in configure script. + +AC_DEFUN([XC_CHECK_BUILD_FLAGS], [ + AC_PREREQ([2.50])dnl + dnl check order below matters + _XC_CHECK_VAR_LIBS + _XC_CHECK_VAR_LDFLAGS + _XC_CHECK_VAR_CPPFLAGS + _XC_CHECK_VAR_CFLAGS + if test $xc_bad_var_libs = yes || + test $xc_bad_var_cflags = yes || + test $xc_bad_var_ldflags = yes || + test $xc_bad_var_cppflags = yes; then + AC_MSG_WARN([Continuing even with errors mentioned immediately above this line.]) + fi +]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/m4/zz40-xc-ovr.m4 nodejs-mozilla-12.22.12/deps/cares/m4/zz40-xc-ovr.m4 --- nodejs-mozilla-12.18.1/deps/cares/m4/zz40-xc-ovr.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/m4/zz40-xc-ovr.m4 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,668 @@ +#--------------------------------------------------------------------------- +# +# zz40-xc-ovr.m4 +# +# Copyright (c) 2013 Daniel Stenberg +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +#--------------------------------------------------------------------------- + +# serial 1 + + +dnl The funny name of this file is intentional in order to make it +dnl sort alphabetically after any libtool, autoconf or automake +dnl provided .m4 macro file that might get copied into this same +dnl subdirectory. This allows that macro (re)definitions from this +dnl file may override those provided in other files. + + +dnl Version macros +dnl ------------------------------------------------- +dnl Public macros. + +m4_define([XC_CONFIGURE_PREAMBLE_VER_MAJOR],[1])dnl +m4_define([XC_CONFIGURE_PREAMBLE_VER_MINOR],[0])dnl + + +dnl _XC_CFG_PRE_PREAMBLE +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_CFG_PRE_PREAMBLE], +[ +## -------------------------------- ## +@%:@@%:@ [XC_CONFIGURE_PREAMBLE] ver: []dnl +XC_CONFIGURE_PREAMBLE_VER_MAJOR.[]dnl +XC_CONFIGURE_PREAMBLE_VER_MINOR ## +## -------------------------------- ## + +xc_configure_preamble_ver_major='XC_CONFIGURE_PREAMBLE_VER_MAJOR' +xc_configure_preamble_ver_minor='XC_CONFIGURE_PREAMBLE_VER_MINOR' + +# +# Set IFS to space, tab and newline. +# + +xc_space=' ' +xc_tab=' ' +xc_newline=' +' +IFS="$xc_space$xc_tab$xc_newline" + +# +# Set internationalization behavior variables. +# + +LANG='C' +LC_ALL='C' +LANGUAGE='C' +export LANG +export LC_ALL +export LANGUAGE + +# +# Some useful variables. +# + +xc_msg_warn='configure: WARNING:' +xc_msg_abrt='Can not continue.' +xc_msg_err='configure: error:' +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_CMD_ECHO +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'echo' command +dnl is available, otherwise aborts execution. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_CMD_ECHO], +[dnl +AC_REQUIRE([_XC_CFG_PRE_PREAMBLE])dnl +# +# Verify that 'echo' command is available, otherwise abort. +# + +xc_tst_str='unknown' +(`echo "$xc_tst_str" >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in @%:@ (( + xsuccess) + : + ;; + *) + # Try built-in echo, and fail. + echo "$xc_msg_err 'echo' command not found. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_CMD_TEST +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'test' command +dnl is available, otherwise aborts execution. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_CMD_TEST], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_ECHO])dnl +# +# Verify that 'test' command is available, otherwise abort. +# + +xc_tst_str='unknown' +(`test -n "$xc_tst_str" >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in @%:@ (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'test' command not found. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_VAR_PATH +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'PATH' variable +dnl is set, otherwise aborts execution. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_VAR_PATH], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_TEST])dnl +# +# Verify that 'PATH' variable is set, otherwise abort. +# + +xc_tst_str='unknown' +(`test -n "$PATH" >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in @%:@ (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'PATH' variable not set. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_CMD_EXPR +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'expr' command +dnl is available, otherwise aborts execution. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_CMD_EXPR], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +# +# Verify that 'expr' command is available, otherwise abort. +# + +xc_tst_str='unknown' +xc_tst_str=`expr "$xc_tst_str" : '.*' 2>/dev/null` +case "x$xc_tst_str" in @%:@ (( + x7) + : + ;; + *) + echo "$xc_msg_err 'expr' command not found. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_UTIL_SED +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'sed' utility +dnl is found within 'PATH', otherwise aborts execution. +dnl +dnl This 'sed' is required in order to allow configure +dnl script bootstrapping itself. No fancy testing for a +dnl proper 'sed' this early, that should be done later. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_UTIL_SED], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +# +# Verify that 'sed' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str='unknown' +xc_tst_str=`echo "$xc_tst_str" 2>/dev/null \ + | sed -e 's:unknown:success:' 2>/dev/null` +case "x$xc_tst_str" in @%:@ (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'sed' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_UTIL_GREP +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'grep' utility +dnl is found within 'PATH', otherwise aborts execution. +dnl +dnl This 'grep' is required in order to allow configure +dnl script bootstrapping itself. No fancy testing for a +dnl proper 'grep' this early, that should be done later. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_UTIL_GREP], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +# +# Verify that 'grep' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str='unknown' +(`echo "$xc_tst_str" 2>/dev/null \ + | grep 'unknown' >/dev/null 2>&1`) && xc_tst_str='success' +case "x$xc_tst_str" in @%:@ (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'grep' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_UTIL_TR +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'tr' utility +dnl is found within 'PATH', otherwise aborts execution. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_UTIL_TR], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +# +# Verify that 'tr' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str="${xc_tab}98s7u6c5c4e3s2s10" +xc_tst_str=`echo "$xc_tst_str" 2>/dev/null \ + | tr -d "0123456789$xc_tab" 2>/dev/null` +case "x$xc_tst_str" in @%:@ (( + xsuccess) + : + ;; + *) + echo "$xc_msg_err 'tr' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_UTIL_WC +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'wc' utility +dnl is found within 'PATH', otherwise aborts execution. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_UTIL_WC], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_TR])dnl +# +# Verify that 'wc' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str='unknown unknown unknown unknown' +xc_tst_str=`echo "$xc_tst_str" 2>/dev/null \ + | wc -w 2>/dev/null | tr -d "$xc_space$xc_tab" 2>/dev/null` +case "x$xc_tst_str" in @%:@ (( + x4) + : + ;; + *) + echo "$xc_msg_err 'wc' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_BASIC_CHK_UTIL_CAT +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that verifies that 'cat' utility +dnl is found within 'PATH', otherwise aborts execution. + +AC_DEFUN([_XC_CFG_PRE_BASIC_CHK_UTIL_CAT], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_WC])dnl +# +# Verify that 'cat' utility is found within 'PATH', otherwise abort. +# + +xc_tst_str='unknown' +xc_tst_str=`cat <<_EOT 2>/dev/null \ + | wc -l 2>/dev/null | tr -d "$xc_space$xc_tab" 2>/dev/null +unknown +unknown +unknown +_EOT` +case "x$xc_tst_str" in @%:@ (( + x3) + : + ;; + *) + echo "$xc_msg_err 'cat' utility not found in 'PATH'. $xc_msg_abrt" >&2 + exit 1 + ;; +esac +]) + + +dnl _XC_CFG_PRE_CHECK_PATH_SEPARATOR +dnl ------------------------------------------------- +dnl Private macro. +dnl +dnl Emits shell code that computes the path separator +dnl and stores the result in 'PATH_SEPARATOR', unless +dnl the user has already set it with a non-empty value. +dnl +dnl This path separator is the symbol used to separate +dnl or diferentiate paths inside the 'PATH' environment +dnl variable. +dnl +dnl Non-empty user provided 'PATH_SEPARATOR' always +dnl overrides the auto-detected one. + +AC_DEFUN([_XC_CFG_PRE_CHECK_PATH_SEPARATOR], +[dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_EXPR])dnl +# +# Auto-detect and set 'PATH_SEPARATOR', unless it is already non-empty set. +# + +# Directory count in 'PATH' when using a colon separator. +xc_tst_dirs_col='x' +xc_tst_prev_IFS=$IFS; IFS=':' +for xc_tst_dir in $PATH; do + IFS=$xc_tst_prev_IFS + xc_tst_dirs_col="x$xc_tst_dirs_col" +done +IFS=$xc_tst_prev_IFS +xc_tst_dirs_col=`expr "$xc_tst_dirs_col" : '.*'` + +# Directory count in 'PATH' when using a semicolon separator. +xc_tst_dirs_sem='x' +xc_tst_prev_IFS=$IFS; IFS=';' +for xc_tst_dir in $PATH; do + IFS=$xc_tst_prev_IFS + xc_tst_dirs_sem="x$xc_tst_dirs_sem" +done +IFS=$xc_tst_prev_IFS +xc_tst_dirs_sem=`expr "$xc_tst_dirs_sem" : '.*'` + +if test $xc_tst_dirs_sem -eq $xc_tst_dirs_col; then + # When both counting methods give the same result we do not want to + # chose one over the other, and consider auto-detection not possible. + if test -z "$PATH_SEPARATOR"; then + # Stop dead until user provides 'PATH_SEPARATOR' definition. + echo "$xc_msg_err 'PATH_SEPARATOR' variable not set. $xc_msg_abrt" >&2 + exit 1 + fi +else + # Separator with the greater directory count is the auto-detected one. + if test $xc_tst_dirs_sem -gt $xc_tst_dirs_col; then + xc_tst_auto_separator=';' + else + xc_tst_auto_separator=':' + fi + if test -z "$PATH_SEPARATOR"; then + # Simply use the auto-detected one when not already set. + PATH_SEPARATOR=$xc_tst_auto_separator + elif test "x$PATH_SEPARATOR" != "x$xc_tst_auto_separator"; then + echo "$xc_msg_warn 'PATH_SEPARATOR' does not match auto-detected one." >&2 + fi +fi +xc_PATH_SEPARATOR=$PATH_SEPARATOR +AC_SUBST([PATH_SEPARATOR])dnl +]) + + +dnl _XC_CFG_PRE_POSTLUDE +dnl ------------------------------------------------- +dnl Private macro. + +AC_DEFUN([_XC_CFG_PRE_POSTLUDE], +[dnl +AC_REQUIRE([_XC_CFG_PRE_PREAMBLE])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_ECHO])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_TEST])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_EXPR])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_SED])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_GREP])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_TR])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_WC])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_CAT])dnl +AC_REQUIRE([_XC_CFG_PRE_CHECK_PATH_SEPARATOR])dnl +dnl +xc_configure_preamble_result='yes' +]) + + +dnl XC_CONFIGURE_PREAMBLE +dnl ------------------------------------------------- +dnl Public macro. +dnl +dnl This macro emits shell code which does some +dnl very basic checks related with the availability +dnl of some commands and utilities needed to allow +dnl configure script bootstrapping itself when using +dnl these to figure out other settings. Also emits +dnl code that performs PATH_SEPARATOR auto-detection +dnl and sets its value unless it is already set with +dnl a non-empty value. +dnl +dnl These basic checks are intended to be placed and +dnl executed as early as possible in the resulting +dnl configure script, and as such these must be pure +dnl and portable shell code. +dnl +dnl This macro may be used directly, or indirectly +dnl when using other macros that AC_REQUIRE it such +dnl as XC_CHECK_PATH_SEPARATOR. +dnl +dnl Currently the mechanism used to ensure that this +dnl macro expands early enough in generated configure +dnl script is making it override autoconf and libtool +dnl PATH_SEPARATOR check. + +AC_DEFUN([XC_CONFIGURE_PREAMBLE], +[dnl +AC_PREREQ([2.50])dnl +dnl +AC_BEFORE([$0],[_XC_CFG_PRE_PREAMBLE])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_CMD_ECHO])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_CMD_TEST])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_CMD_EXPR])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_UTIL_SED])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_UTIL_GREP])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_UTIL_TR])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_UTIL_WC])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_BASIC_CHK_UTIL_CAT])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_CHECK_PATH_SEPARATOR])dnl +AC_BEFORE([$0],[_XC_CFG_PRE_POSTLUDE])dnl +dnl +AC_BEFORE([$0],[AC_CHECK_TOOL])dnl +AC_BEFORE([$0],[AC_CHECK_PROG])dnl +AC_BEFORE([$0],[AC_CHECK_TOOLS])dnl +AC_BEFORE([$0],[AC_CHECK_PROGS])dnl +dnl +AC_BEFORE([$0],[AC_PATH_TOOL])dnl +AC_BEFORE([$0],[AC_PATH_PROG])dnl +AC_BEFORE([$0],[AC_PATH_PROGS])dnl +dnl +AC_BEFORE([$0],[AC_PROG_SED])dnl +AC_BEFORE([$0],[AC_PROG_GREP])dnl +AC_BEFORE([$0],[AC_PROG_LN_S])dnl +AC_BEFORE([$0],[AC_PROG_MKDIR_P])dnl +AC_BEFORE([$0],[AC_PROG_INSTALL])dnl +AC_BEFORE([$0],[AC_PROG_MAKE_SET])dnl +AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl +dnl +AC_BEFORE([$0],[LT_INIT])dnl +AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl +AC_BEFORE([$0],[AC_LIBTOOL_WIN32_DLL])dnl +dnl +AC_REQUIRE([_XC_CFG_PRE_PREAMBLE])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_ECHO])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_TEST])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_VAR_PATH])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_CMD_EXPR])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_SED])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_GREP])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_TR])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_WC])dnl +AC_REQUIRE([_XC_CFG_PRE_BASIC_CHK_UTIL_CAT])dnl +AC_REQUIRE([_XC_CFG_PRE_CHECK_PATH_SEPARATOR])dnl +AC_REQUIRE([_XC_CFG_PRE_POSTLUDE])dnl +dnl +m4_pattern_forbid([^_*XC])dnl +m4_define([$0],[])dnl +]) + + +dnl Override autoconf and libtool PATH_SEPARATOR check +dnl ------------------------------------------------- +dnl Macros overriding. +dnl +dnl This is done to ensure that the same check is +dnl used across different autoconf versions and to +dnl allow expansion of XC_CONFIGURE_PREAMBLE macro +dnl early enough in the generated configure script. + +dnl +dnl Override when using autoconf 2.53 and newer. +dnl + +m4_ifdef([_AS_PATH_SEPARATOR_PREPARE], +[dnl +m4_undefine([_AS_PATH_SEPARATOR_PREPARE])dnl +m4_defun([_AS_PATH_SEPARATOR_PREPARE], +[dnl +AC_REQUIRE([XC_CONFIGURE_PREAMBLE])dnl +m4_define([$0],[])dnl +])dnl +]) + +dnl +dnl Override when using autoconf 2.50 to 2.52 +dnl + +m4_ifdef([_AC_INIT_PREPARE_FS_SEPARATORS], +[dnl +m4_undefine([_AC_INIT_PREPARE_FS_SEPARATORS])dnl +m4_defun([_AC_INIT_PREPARE_FS_SEPARATORS], +[dnl +AC_REQUIRE([XC_CONFIGURE_PREAMBLE])dnl +ac_path_separator=$PATH_SEPARATOR +m4_define([$0],[])dnl +])dnl +]) + +dnl +dnl Override when using libtool 1.4.2 +dnl + +m4_ifdef([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR], +[dnl +m4_undefine([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl +m4_defun([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR], +[dnl +AC_REQUIRE([XC_CONFIGURE_PREAMBLE])dnl +lt_cv_sys_path_separator=$PATH_SEPARATOR +m4_define([$0],[])dnl +])dnl +]) + + +dnl XC_CHECK_PATH_SEPARATOR +dnl ------------------------------------------------- +dnl Public macro. +dnl +dnl Usage of this macro ensures that generated configure +dnl script uses the same PATH_SEPARATOR check irrespective +dnl of autoconf or libtool version being used to generate +dnl configure script. +dnl +dnl Emits shell code that computes the path separator +dnl and stores the result in 'PATH_SEPARATOR', unless +dnl the user has already set it with a non-empty value. +dnl +dnl This path separator is the symbol used to separate +dnl or diferentiate paths inside the 'PATH' environment +dnl variable. +dnl +dnl Non-empty user provided 'PATH_SEPARATOR' always +dnl overrides the auto-detected one. +dnl +dnl Strictly speaking the check is done in two steps. The +dnl first, which does the actual check, takes place in +dnl XC_CONFIGURE_PREAMBLE macro and happens very early in +dnl generated configure script. The second one shows and +dnl logs the result of the check into config.log at a later +dnl configure stage. Placement of this second stage in +dnl generated configure script will be done where first +dnl direct or indirect usage of this macro happens. + +AC_DEFUN([XC_CHECK_PATH_SEPARATOR], +[dnl +AC_PREREQ([2.50])dnl +dnl +AC_BEFORE([$0],[AC_CHECK_TOOL])dnl +AC_BEFORE([$0],[AC_CHECK_PROG])dnl +AC_BEFORE([$0],[AC_CHECK_TOOLS])dnl +AC_BEFORE([$0],[AC_CHECK_PROGS])dnl +dnl +AC_BEFORE([$0],[AC_PATH_TOOL])dnl +AC_BEFORE([$0],[AC_PATH_PROG])dnl +AC_BEFORE([$0],[AC_PATH_PROGS])dnl +dnl +AC_BEFORE([$0],[AC_PROG_SED])dnl +AC_BEFORE([$0],[AC_PROG_GREP])dnl +AC_BEFORE([$0],[AC_PROG_LN_S])dnl +AC_BEFORE([$0],[AC_PROG_MKDIR_P])dnl +AC_BEFORE([$0],[AC_PROG_INSTALL])dnl +AC_BEFORE([$0],[AC_PROG_MAKE_SET])dnl +AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl +dnl +AC_BEFORE([$0],[LT_INIT])dnl +AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl +AC_BEFORE([$0],[AC_LIBTOOL_WIN32_DLL])dnl +dnl +AC_REQUIRE([XC_CONFIGURE_PREAMBLE])dnl +dnl +# +# Check that 'XC_CONFIGURE_PREAMBLE' has already run. +# + +if test -z "$xc_configure_preamble_result"; then + AC_MSG_ERROR([xc_configure_preamble_result not set (internal problem)]) +fi + +# +# Check that 'PATH_SEPARATOR' has already been set. +# + +if test -z "$xc_PATH_SEPARATOR"; then + AC_MSG_ERROR([xc_PATH_SEPARATOR not set (internal problem)]) +fi +if test -z "$PATH_SEPARATOR"; then + AC_MSG_ERROR([PATH_SEPARATOR not set (internal or config.site problem)]) +fi +AC_MSG_CHECKING([for path separator]) +AC_MSG_RESULT([$PATH_SEPARATOR]) +if test "x$PATH_SEPARATOR" != "x$xc_PATH_SEPARATOR"; then + AC_MSG_CHECKING([for initial path separator]) + AC_MSG_RESULT([$xc_PATH_SEPARATOR]) + AC_MSG_ERROR([path separator mismatch (internal or config.site problem)]) +fi +dnl +m4_pattern_forbid([^_*XC])dnl +m4_define([$0],[])dnl +]) + diff -Nru nodejs-mozilla-12.18.1/deps/cares/Makefile.am nodejs-mozilla-12.22.12/deps/cares/Makefile.am --- nodejs-mozilla-12.18.1/deps/cares/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/Makefile.am 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,37 @@ +AUTOMAKE_OPTIONS = foreign nostdinc 1.9.6 +ACLOCAL_AMFLAGS = -I m4 --install + +MSVCFILES = msvc_ver.inc buildconf.bat + +# adig and ahost are just sample programs and thus not mentioned with the +# regular sources and headers +EXTRA_DIST = AUTHORS CHANGES README.cares $(man_MANS) RELEASE-NOTES \ + c-ares-config.cmake.in libcares.pc.cmake libcares.pc.in buildconf get_ver.awk \ + maketgz TODO README.msvc $(MSVCFILES) INSTALL.md README.md LICENSE.md \ + CMakeLists.txt Makefile.dj Makefile.m32 Makefile.netware Makefile.msvc \ + Makefile.Watcom AUTHORS CONTRIBUTING.md SECURITY.md TODO + + +CLEANFILES = $(PDFPAGES) $(HTMLPAGES) + +DISTCLEANFILES = include/ares_build.h + +DIST_SUBDIRS = include src test docs + +SUBDIRS = @BUILD_SUBDIRS@ + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libcares.pc + +# where to install the c-ares headers +libcares_ladir = $(includedir) + + +# Make files named *.dist replace the file without .dist extension +dist-hook: + find $(distdir) -name "*.dist" -exec rm {} \; + (distit=`find $(srcdir) -name "*.dist"`; \ + for file in $$distit; do \ + strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \ + cp $$file $(distdir)$$strip; \ + done) diff -Nru nodejs-mozilla-12.18.1/deps/cares/Makefile.dj nodejs-mozilla-12.22.12/deps/cares/Makefile.dj --- nodejs-mozilla-12.18.1/deps/cares/Makefile.dj 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/Makefile.dj 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,102 @@ +# +# c-ares Makefile for djgpp/gcc/Watt-32. +# By Gisle Vanem 2004 - 2020. +# +include src/lib/Makefile.inc + +CSOURCES := $(addprefix src/lib/, $(CSOURCES)) +CSOURCES := $(filter-out src/lib/windows_port.c, $(CSOURCES)) + +VPATH = src/lib src/tools + +# +# Root directory for Waterloo tcp/ip. +# WATT_ROOT should be set during Watt-32 install. +# +WATT32_ROOT = $(realpath $(WATT_ROOT)) +WATT32_LIB = $(WATT32_ROOT)/lib/libwatt.a + +OBJ_DIR = djgpp + +CFLAGS = -g -O2 -I./include -I./src/lib \ + -I$(WATT32_ROOT)/inc -Wall \ + -DWATT32 -DHAVE_CONFIG_H \ + -Dselect=select_s + +LDFLAGS = -s + +ifeq ($(OS),Windows_NT) + # + # Windows hosted djgpp cross compiler. Get it from: + # https://github.com/andrewwutw/build-djgpp/releases + # + DJ_PREFIX ?= c:/some-path/djgpp/bin/i586-pc-msdosdjgpp- + CC = $(DJ_PREFIX)gcc + +else + # + # The normal djgpp 'gcc' for MSDOS. + # + CC = gcc +endif + +OBJECTS = $(addprefix $(OBJ_DIR)/, \ + $(notdir $(CSOURCES:.c=.o))) + +GENERATED = src/lib/ares_config.h \ + include/ares_build.h + +TARGETS = libcares.a acountry.exe adig.exe ahost.exe + +.SECONDARY: $(OBJ_DIR)/ares_getopt.o + +all: $(OBJ_DIR) $(GENERATED) $(TARGETS) + @echo Welcome to c-ares. + +libcares.a: $(OBJECTS) + ar rs $@ $(OBJECTS) + +src/lib/ares_config.h: src/lib/config-dos.h + cp --update $< $@ + +include/ares_build.h: include/ares_build.h.dist + cp --update $< $@ + +%.exe: src/tools/%.c $(OBJ_DIR)/ares_getopt.o libcares.a + $(call compile_and_link, $@, $^ $(WATT32_LIB)) + +# Clean generated files and objects. +# +clean: + - rm -f depend.dj $(GENERATED) $(OBJ_DIR)/*.o + - rmdir $(OBJ_DIR) + +# Clean everything +# +realclean vclean: clean + - rm -f $(TARGETS) $(TARGETS:.exe=.map) + +$(OBJ_DIR): + - mkdir $@ + +$(OBJ_DIR)/%.o: %.c + $(CC) $(CFLAGS) -o $@ -c $< + @echo + +define compile_and_link + $(CC) -o $(1) $(CFLAGS) $(LDFLAGS) -Wl,--print-map,--sort-common $(2) > $(1:.exe=.map) + @echo +endef + +DEP_REPLACE = sed -e 's@\(.*\)\.o: @\n$$(OBJ_DIR)\/\1.o: @' \ + -e 's@$(WATT32_ROOT)@$$(WATT32_ROOT)@g' + +# +# One may have to do 'make -f Makefile.dj clean' first in case +# a foreign 'curl_config.h' is making trouble. +# +depend: $(GENERATED) Makefile.dj + $(CC) -MM $(CFLAGS) $(CSOURCES) | $(DEP_REPLACE) > depend.dj + +-include depend.dj + diff -Nru nodejs-mozilla-12.18.1/deps/cares/Makefile.in nodejs-mozilla-12.22.12/deps/cares/Makefile.in --- nodejs-mozilla-12.18.1/deps/cares/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/Makefile.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,938 @@ +# Makefile.in generated by automake 1.16.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2021 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ + $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ + $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ + $(top_srcdir)/m4/ax_am_macros_static.m4 \ + $(top_srcdir)/m4/ax_check_gnu_make.m4 \ + $(top_srcdir)/m4/ax_code_coverage.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/m4/ax_file_escapes.m4 \ + $(top_srcdir)/m4/ax_require_defined.m4 \ + $(top_srcdir)/m4/cares-compilers.m4 \ + $(top_srcdir)/m4/cares-confopts.m4 \ + $(top_srcdir)/m4/cares-functions.m4 \ + $(top_srcdir)/m4/cares-reentrant.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/xc-am-iface.m4 \ + $(top_srcdir)/m4/xc-cc-check.m4 \ + $(top_srcdir)/m4/xc-lt-iface.m4 \ + $(top_srcdir)/m4/xc-translit.m4 \ + $(top_srcdir)/m4/xc-val-flgs.m4 \ + $(top_srcdir)/m4/zz40-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/lib/ares_config.h \ + $(top_builddir)/include/ares_build.h +CONFIG_CLEAN_FILES = libcares.pc +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir distdir-am dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/libcares.pc.in \ + AUTHORS INSTALL.md NEWS README.md TODO compile config.guess \ + config.sub depcomp install-sh ltmain.sh missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +# Exists only to be overridden by the user if desired. +AM_DISTCHECK_DVI_TARGET = dvi +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_SUBDIRS = @BUILD_SUBDIRS@ +CARES_CFLAG_EXTRAS = @CARES_CFLAG_EXTRAS@ +CARES_PRIVATE_LIBS = @CARES_PRIVATE_LIBS@ +CARES_RANDOM_FILE = @CARES_RANDOM_FILE@ +CARES_VERSION_INFO = @CARES_VERSION_INFO@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_CARES_SYMBOL_HIDING = @CFLAG_CARES_SYMBOL_HIDING@ +CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ +CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ +CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ +CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ +CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAG_CARES_STATICLIB = @CPPFLAG_CARES_STATICLIB@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ETAGS = @ETAGS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GENHTML = @GENHTML@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LCOV = @LCOV@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ifGNUmake = @ifGNUmake@ +ifnGNUmake = @ifnGNUmake@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign nostdinc 1.9.6 +ACLOCAL_AMFLAGS = -I m4 --install +MSVCFILES = msvc_ver.inc buildconf.bat + +# adig and ahost are just sample programs and thus not mentioned with the +# regular sources and headers +EXTRA_DIST = AUTHORS CHANGES README.cares $(man_MANS) RELEASE-NOTES \ + c-ares-config.cmake.in libcares.pc.cmake libcares.pc.in buildconf get_ver.awk \ + maketgz TODO README.msvc $(MSVCFILES) INSTALL.md README.md LICENSE.md \ + CMakeLists.txt Makefile.dj Makefile.m32 Makefile.netware Makefile.msvc \ + Makefile.Watcom AUTHORS CONTRIBUTING.md SECURITY.md TODO + +CLEANFILES = $(PDFPAGES) $(HTMLPAGES) +DISTCLEANFILES = include/ares_build.h +DIST_SUBDIRS = include src test docs +SUBDIRS = @BUILD_SUBDIRS@ +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libcares.pc + +# where to install the c-ares headers +libcares_ladir = $(includedir) +all: all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): +libcares.pc: $(top_builddir)/config.status $(srcdir)/libcares.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-zstd: distdir + tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + *.tar.zst*) \ + zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ + dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \ + distclean-generic distclean-libtool distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-pkgconfigDATA + +.PRECIOUS: Makefile + + +# Make files named *.dist replace the file without .dist extension +dist-hook: + find $(distdir) -name "*.dist" -exec rm {} \; + (distit=`find $(srcdir) -name "*.dist"`; \ + for file in $$distit; do \ + strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \ + cp $$file $(distdir)$$strip; \ + done) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru nodejs-mozilla-12.18.1/deps/cares/Makefile.m32 nodejs-mozilla-12.22.12/deps/cares/Makefile.m32 --- nodejs-mozilla-12.18.1/deps/cares/Makefile.m32 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/Makefile.m32 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,77 @@ +############################################################# +# +## Makefile for building libcares.a with MingW32 (GCC-3.2) +## Use: make -f Makefile.m32 [demos] +## +## Quick hack by Guenter; comments to: /dev/nul +# +######################################################## +## Nothing more to do below this line! + +LIB = src/lib/libcares.a + +AR = $(CROSSPREFIX)ar +CC = $(CROSSPREFIX)gcc +LD = $(CROSSPREFIX)gcc +RANLIB = $(CROSSPREFIX)ranlib +#RM = rm -f +CP = cp -afv + +CFLAGS = $(CARES_CFLAG_EXTRAS) -O2 -Wall -I./include -I./src/lib -D_WIN32_WINNT=0x0600 +CFLAGS += -DCARES_STATICLIB +LDFLAGS = $(CARES_LDFLAG_EXTRAS) -s +LIBS = -lws2_32 -liphlpapi + +# Makefile.inc provides the CSOURCES and HHEADERS defines +include src/lib/Makefile.inc + +OBJLIB := $(patsubst %.c,src/lib/%.o,$(strip $(CSOURCES))) + + +$(LIB): $(OBJLIB) + $(AR) cru $@ $^ + $(RANLIB) $@ + +all: $(LIB) demos + +demos: src/tools/adig.exe src/tools/ahost.exe src/tools/acountry.exe + +tags: + etags *.[ch] + +%.exe: %.o src/tools/ares_getopt.o $(LIB) + $(LD) $(LDFLAGS) -o $@ $^ $(LIBS) + +$(OBJLIB): include/ares.h include/ares_dns.h include/ares_build.h + +.c.o: + $(CC) $(CFLAGS) -o $@ -c $< + +include/ares_build.h: + $(CP) include/ares_build.h.dist include/ares_build.h + +check: + +install: + ${top_srcdir}/mkinstalldirs ${DESTDIR}${libdir} + ${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir} + ${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3 + ${INSTALL} -m 644 $(LIB) ${DESTDIR}${libdir} + ${RANLIB} ${DESTDIR}${libdir}/$(LIB) + chmod u-w ${DESTDIR}${libdir}/$(LIB) + ${INSTALL} -m 444 ${srcdir}/include/ares.h ${DESTDIR}${includedir} + ${INSTALL} -m 444 ${srcdir}/include/ares_build.h ${DESTDIR}${includedir} + ${INSTALL} -m 444 ${srcdir}/include/ares_rules.h ${DESTDIR}${includedir} + ${INSTALL} -m 444 ${srcdir}/include/ares_version.h ${DESTDIR}${includedir} + (for man in $(MANPAGES); do \ + ${INSTALL} -m 444 ${srcdir}/$${man} ${DESTDIR}${mandir}/man3; \ + done) + +clean: + $(RM) src/tools/ares_getopt.o $(OBJLIB) $(LIB) src/tools/adig.exe src/tools/ahost.exe src/tools/acountry.exe + +distclean: clean + $(RM) config.cache config.log config.status Makefile +ifeq "$(wildcard include/ares_build.h.dist)" "include/ares_build.h.dist" + $(RM) include/ares_build.h +endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/Makefile.msvc nodejs-mozilla-12.22.12/deps/cares/Makefile.msvc --- nodejs-mozilla-12.18.1/deps/cares/Makefile.msvc 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/Makefile.msvc 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,491 @@ + +# Copyright (C) 2009-2013 by Daniel Stenberg +# +# Permission to use, copy, modify, and distribute this +# software and its documentation for any purpose and without +# fee is hereby granted, provided that the above copyright +# notice appear in all copies and that both that copyright +# notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in +# advertising or publicity pertaining to distribution of the +# software without specific, written prior permission. +# M.I.T. makes no representations about the suitability of +# this software for any purpose. It is provided "as is" +# without express or implied warranty. + +# ------------------------------------------------------------------------------ +# +# Makefile for building c-ares libraries and sample programs with MSVC. +# +# Usage: nmake /f makefile.msvc CFG= +# +# must be one of: [ lib-release | lib-debug | dll-release | dll-debug } +# must be one of: [ ALL | c-ares | acountry | adig | ahost | clean } +# +# If a other than ALL or clean is given, becomes mandatory. +# +# If neither nor are specified this results in +# all targets being built for all c-ares library types. +# +# This makefile must be processed from the subdir where it is located. +# +# All results are generated below a subdirectory named msvcXXX. +# +# ------------------------------------------------------------------------------ + +NAME = cares + +# ------------------------------------------------ +# c-ares static and dynamic libraries common base +# file names for release and debug configurations +# ------------------------------------------------ + +STA_LIB_REL = lib$(NAME) +DYN_LIB_REL = $(NAME) +STA_LIB_DBG = $(STA_LIB_REL)d +DYN_LIB_DBG = $(DYN_LIB_REL)d + +# ------------------------------------------- +# Base names for c-ares DLL import libraries +# ------------------------------------------- + +IMP_LIB_REL = $(DYN_LIB_REL) +IMP_LIB_DBG = $(DYN_LIB_DBG) + +# -------------------------- +# Runtime library selection +# -------------------------- + +RTLIB = /MD +RTLIBD = /MDd + +!IF "$(RTLIBCFG)" == "static" +RTLIB = /MT +RTLIBD = /MTd +!ENDIF + +# -------------------------------------------------------- +# Define USE_WATT32 to 1 to use the Watt-32 tcp/ip stack, +# otherwise Winsock tcp/ip stack will be used as default. +# -------------------------------------------------------- + +USE_WATT32 = 0 + +# -------------------------------------------------------- +# Detect compiler version. +# -------------------------------------------------------- +!INCLUDE .\msvc_ver.inc + +# ---------------------------------------------------- +# Verify that current subdir is the c-ares source one +# ---------------------------------------------------- + +!IF ! EXIST(.\src\lib\ares_init.c) +! MESSAGE Can not process Makefile.msvc from outside of c-ares source subdirectory. +! MESSAGE Change to the subdirectory where Makefile.msvc is found, and try again. +! ERROR See previous message. +!ENDIF + +# ------------------------------------------------------------------ +# Base subdir is the common root from which other subdirs will hang. +# ------------------------------------------------------------------ + +BASE_DIR = .\msvc + +# ---------------------------------------- +# Subdir holding sources for all projects +# ---------------------------------------- + +SRCDIR = . + +# ----------------------------- +# Default installation subdirs +# ----------------------------- + +!IFNDEF INSTALL_DIR +INSTALL_DIR = . +!ENDIF + +!IFNDEF INSTALL_DIR_LIB +INSTALL_DIR_LIB = $(INSTALL_DIR)\lib +!ENDIF + +!IFNDEF INSTALL_DIR_INC +INSTALL_DIR_INC = $(INSTALL_DIR)\include +!ENDIF + +# ------------------------- +# Configuration validation +# ------------------------- + +VALID_CFGSET = FALSE +!IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \ + "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug" +VALID_CFGSET = TRUE +!ENDIF + +!IF "$(VALID_CFGSET)" == "FALSE" && "$(CFG)" != "" +! MESSAGE MSVC c-ares makefile +! MESSAGE +! MESSAGE Usage: nmake /f makefile.msvc CFG= +! MESSAGE +! MESSAGE must be one of: [ lib-release | lib-debug | dll-release | dll-debug } +! MESSAGE must be one of: [ ALL | c-ares | acountry | adig | ahost | clean } +! MESSAGE +! MESSAGE If a other than ALL or clean is given, becomes mandatory. +! MESSAGE +! MESSAGE If neither nor are specified this results in +! MESSAGE all targets being built for all c-ares library types. +! MESSAGE +! ERROR Choose a valid configuration. +!ENDIF + +# -------------------------------------------------------- +# Project subdirs independent of configuration being used +# -------------------------------------------------------- + +CARES_DIR = $(BASE_DIR)\cares +PROG1_DIR = $(BASE_DIR)\acountry +PROG2_DIR = $(BASE_DIR)\adig +PROG3_DIR = $(BASE_DIR)\ahost + +# --------------------------------------------------- +# Subdirs which are configuration dependent are only +# defined when a valid configuration has been given. +# --------------------------------------------------- + +!IF "$(VALID_CFGSET)" == "TRUE" +CARES_OUTDIR = $(CARES_DIR)\$(CFG) +PROG1_OUTDIR = $(PROG1_DIR)\$(CFG) +PROG2_OUTDIR = $(PROG2_DIR)\$(CFG) +PROG3_OUTDIR = $(PROG3_DIR)\$(CFG) +CARES_OBJDIR = $(CARES_OUTDIR)\obj +PROG1_OBJDIR = $(PROG1_OUTDIR)\obj +PROG2_OBJDIR = $(PROG2_OUTDIR)\obj +PROG3_OBJDIR = $(PROG3_OUTDIR)\obj +!ELSE +!UNDEF CARES_OUTDIR +!UNDEF PROG1_OUTDIR +!UNDEF PROG2_OUTDIR +!UNDEF PROG3_OUTDIR +!UNDEF CARES_OBJDIR +!UNDEF PROG1_OBJDIR +!UNDEF PROG2_OBJDIR +!UNDEF PROG3_OBJDIR +!ENDIF + +# ------------------------------------- +# Settings that depend on tcp/ip stack +# ------------------------------------- + +!IF "$(USE_WATT32)" == "1" +CFLAGS = /UWIN32 /DWATT32 /I$(WATT_ROOT)\inc +EX_LIBS_REL = $(WATT_ROOT)\lib\wattcpvc_imp.lib +EX_LIBS_DBG = $(WATT_ROOT)\lib\wattcpvc_imp_d.lib +!ELSE +CFLAGS = /DWIN32 /D_WIN32_WINNT=0x0600 +EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib +EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib +!ENDIF + +# ------------------------------------------------- +# Switches that depend on ancient compiler versions +# ------------------------------------------------- + +!IF $(CC_VERS_NUM) == 60 +PDB_NONE = /pdb:none +PDBTYPE_CONSOLIDATE = /pdbtype:consolidate +!ELSE +!UNDEF PDB_NONE +!UNDEF PDBTYPE_CONSOLIDATE +!ENDIF + +!IF $(CC_VERS_NUM) <= 70 +RT_ERROR_CHECKING = /GZ +!ELSE +RT_ERROR_CHECKING = /RTCsu +!ENDIF + +# ---------------------------- +# Assorted commands and flags +# ---------------------------- + +CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2 +CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi $(RT_ERROR_CHECKING) +CC_CFLAGS = $(CFLAGS) /I.\src\lib /I.\include /W3 /EHsc /FD + +RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG" +RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG" + +LINK_CMD_LIB = link.exe /lib /nologo +LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no +LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console + +LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release $(PDB_NONE) +LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug $(PDBTYPE_CONSOLIDATE) + +# --------------------------------- +# Configuration dependent settings +# --------------------------------- + +!IF "$(CFG)" == "lib-release" +CARES_TARGET = $(STA_LIB_REL).lib +CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB +CARES_LFLAGS = +SPROG_CFLAGS = /DCARES_STATICLIB +SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib +CARES_LINK = $(LINK_CMD_LIB) +SPROG_LINK = $(LINK_CMD_EXE_REL) +CC_CMD = $(CC_CMD_REL) +!ENDIF + +!IF "$(CFG)" == "lib-debug" +CARES_TARGET = $(STA_LIB_DBG).lib +CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD +CARES_LFLAGS = +SPROG_CFLAGS = /DCARES_STATICLIB +SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib +CARES_LINK = $(LINK_CMD_LIB) +SPROG_LINK = $(LINK_CMD_EXE_DBG) +CC_CMD = $(CC_CMD_DBG) +!ENDIF + +!IF "$(CFG)" == "dll-release" +CARES_TARGET = $(DYN_LIB_REL).dll +CARES_CFLAGS = /DCARES_BUILDING_LIBRARY +CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(CARES_OUTDIR)\$(IMP_LIB_REL).lib $(PDB_NONE) +SPROG_CFLAGS = +SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib +CARES_LINK = $(LINK_CMD_DLL) +SPROG_LINK = $(LINK_CMD_EXE_REL) +CC_CMD = $(CC_CMD_REL) +USE_RES_FILE = TRUE +RC_CMD = $(RC_CMD_REL) +!ENDIF + +!IF "$(CFG)" == "dll-debug" +CARES_TARGET = $(DYN_LIB_DBG).dll +CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD +CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(CARES_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(CARES_OUTDIR)\$(DYN_LIB_DBG).pdb $(PDBTYPE_CONSOLIDATE) +SPROG_CFLAGS = +SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib +CARES_LINK = $(LINK_CMD_DLL) +SPROG_LINK = $(LINK_CMD_EXE_DBG) +CC_CMD = $(CC_CMD_DBG) +USE_RES_FILE = TRUE +RC_CMD = $(RC_CMD_DBG) +!ENDIF + +# -------------------------------------------- +# Makefile.inc provides lists of source files +# -------------------------------------------- + +!INCLUDE .\src\lib\Makefile.inc +!INCLUDE .\src\tools\Makefile.inc + +# ---------------------------- +# Build lists of object files +# ---------------------------- + +!IF "$(VALID_CFGSET)" == "TRUE" + +!IF [ECHO CARES_OBJS=^$(CARES_OBJDIR)\$(CSOURCES: = $(CARES_OBJDIR^)\) > .\cares_objs.inc] == 0 +!INCLUDE .\cares_objs.inc +!IF [DEL .\cares_objs.inc] +!ENDIF +!ELSE +!ERROR Problem generating CARES_OBJS list. +!ENDIF +CARES_OBJS = $(CARES_OBJS:.c=.obj) +!IF "$(USE_RES_FILE)" == "TRUE" +CARES_OBJS = $(CARES_OBJS) $(CARES_OBJDIR)\cares.res +!ENDIF + +!IF [ECHO PROG1_OBJS=^$(PROG1_OBJDIR)\$(SAMPLESOURCES: = $(PROG1_OBJDIR^)\) > .\prog1_objs.inc] == 0 +!INCLUDE .\prog1_objs.inc +!IF [DEL .\prog1_objs.inc] +!ENDIF +!ELSE +!ERROR Problem generating PROG1_OBJS list. +!ENDIF +PROG1_OBJS = $(PROG1_OBJS:.c=.obj) +PROG1_OBJS = $(PROG1_OBJS:/=\) +PROG1_OBJS = $(PROG1_OBJS) $(PROG1_OBJDIR)\acountry.obj + +!IF [ECHO PROG2_OBJS=^$(PROG2_OBJDIR)\$(SAMPLESOURCES: = $(PROG2_OBJDIR^)\) > .\prog2_objs.inc] == 0 +!INCLUDE .\prog2_objs.inc +!IF [DEL .\prog2_objs.inc] +!ENDIF +!ELSE +!ERROR Problem generating PROG2_OBJS list. +!ENDIF +PROG2_OBJS = $(PROG2_OBJS:.c=.obj) +PROG2_OBJS = $(PROG2_OBJS:/=\) +PROG2_OBJS = $(PROG2_OBJS) $(PROG2_OBJDIR)\adig.obj + +!IF [ECHO PROG3_OBJS=^$(PROG3_OBJDIR)\$(SAMPLESOURCES: = $(PROG3_OBJDIR^)\) > .\prog3_objs.inc] == 0 +!INCLUDE .\prog3_objs.inc +!IF [DEL .\prog3_objs.inc] +!ENDIF +!ELSE +!ERROR Problem generating PROG3_OBJS list. +!ENDIF +PROG3_OBJS = $(PROG3_OBJS:.c=.obj) +PROG3_OBJS = $(PROG3_OBJS:/=\) +PROG3_OBJS = $(PROG3_OBJS) $(PROG3_OBJDIR)\ahost.obj + +!ENDIF + + +# -------------------------------- +# Only our custom inference rules +# -------------------------------- + +.SUFFIXES: +.SUFFIXES: .c .rc + +{$(SRCDIR)\src\lib}.rc{$(CARES_OBJDIR)}.res: + $(RC_CMD) /Fo $@ $< + +{$(SRCDIR)\src\lib}.c{$(CARES_OBJDIR)}.obj: + $(CC_CMD) $(CC_CFLAGS) $(CARES_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< + +{$(SRCDIR)\src\tools}.c{$(PROG1_OBJDIR)}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< + +{$(SRCDIR)\src\tools}.c{$(PROG2_OBJDIR)}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< + +{$(SRCDIR)\src\tools}.c{$(PROG3_OBJDIR)}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $< + +# Hack Alert! we reference ../lib/ files in the Makefile.inc for tools as they +# share some files with the library itself. We need to hack around that here. + +{$(SRCDIR)\src\lib}.c{$(PROG1_OBJDIR)\..\lib}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG1_OBJDIR)\$(@F) /Fd$(PROG1_OBJDIR)\ /c $< + +{$(SRCDIR)\src\lib}.c{$(PROG2_OBJDIR)\..\lib}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG2_OBJDIR)\$(@F) /Fd$(PROG2_OBJDIR)\ /c $< + +{$(SRCDIR)\src\lib}.c{$(PROG3_OBJDIR)\..\lib}.obj: + $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG3_OBJDIR)\$(@F) /Fd$(PROG3_OBJDIR)\ /c $< + +# ------------------------------------------------------------- # +# ------------------------------------------------------------- # +# Default target when no CFG library type has been specified, # +# results in building target ALL for all c-ares library types. # +# ------------------------------------------------------------- # +# ------------------------------------------------------------- # + +!IF "$(VALID_CFGSET)" == "FALSE" + +ALL: + $(MAKE) /NOLOGO /f .\Makefile.msvc CFG=lib-release ALL + $(MAKE) /NOLOGO /f .\Makefile.msvc CFG=lib-debug ALL + $(MAKE) /NOLOGO /f .\Makefile.msvc CFG=dll-release ALL + $(MAKE) /NOLOGO /f .\Makefile.msvc CFG=dll-debug ALL + +clean: + @-RMDIR /S /Q $(BASE_DIR) >NUL 2>&1 + +install: + @$(MAKE) /nologo /f .\Makefile.msvc CFG=lib-release install + @$(MAKE) /nologo /f .\Makefile.msvc CFG=lib-debug install + @$(MAKE) /nologo /f .\Makefile.msvc CFG=dll-release install + @$(MAKE) /nologo /f .\Makefile.msvc CFG=dll-debug install + +!ENDIF + +# --------------------------------------------------------------------- +# Targets only available when a proper CFG library type has been given +# --------------------------------------------------------------------- + +!IF "$(VALID_CFGSET)" == "TRUE" + +ALL: c-ares acountry adig ahost + @ + +# $(HHEADERS) $(CSOURCES) +c-ares: $(CARES_OBJDIR) $(CARES_OBJS) $(CARES_OUTDIR) + $(CARES_LINK) $(CARES_LFLAGS) /out:$(CARES_OUTDIR)\$(CARES_TARGET) $(CARES_OBJS) +! IF "$(USE_RES_FILE)" == "TRUE" + @if exist $(CARES_OUTDIR)\$(CARES_TARGET).manifest mt -nologo -manifest $(CARES_OUTDIR)\$(CARES_TARGET).manifest -outputresource:$(CARES_OUTDIR)\$(CARES_TARGET);2 +! ENDIF + +# acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +acountry: c-ares $(PROG1_OBJDIR) $(PROG1_OBJS) $(PROG1_OUTDIR) + $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG1_OUTDIR)\acountry.exe $(PROG1_OBJS:..\lib=) + @if exist $(PROG1_OUTDIR)\acountry.exe.manifest mt -nologo -manifest $(PROG1_OUTDIR)\acountry.exe.manifest -outputresource:$(PROG1_OUTDIR)\acountry.exe;1 + +# adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +adig: c-ares $(PROG2_OBJDIR) $(PROG2_OBJS) $(PROG2_OUTDIR) + $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG2_OUTDIR)\adig.exe $(PROG2_OBJS:..\lib=) + @if exist $(PROG2_OUTDIR)\adig.exe.manifest mt -nologo -manifest $(PROG2_OUTDIR)\adig.exe.manifest -outputresource:$(PROG2_OUTDIR)\adig.exe;1 + +# ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +ahost: c-ares $(PROG3_OBJDIR) $(PROG3_OBJS) $(PROG3_OUTDIR) + $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG3_OUTDIR)\ahost.exe $(PROG3_OBJS:..\lib=) + @if exist $(PROG3_OUTDIR)\ahost.exe.manifest mt -nologo -manifest $(PROG3_OUTDIR)\ahost.exe.manifest -outputresource:$(PROG3_OUTDIR)\ahost.exe;1 + +$(CARES_OUTDIR): $(CARES_DIR) + @if not exist $(CARES_OUTDIR) mkdir $(CARES_OUTDIR) + +$(PROG1_OUTDIR): $(PROG1_DIR) + @if not exist $(PROG1_OUTDIR) mkdir $(PROG1_OUTDIR) + +$(PROG2_OUTDIR): $(PROG2_DIR) + @if not exist $(PROG2_OUTDIR) mkdir $(PROG2_OUTDIR) + +$(PROG3_OUTDIR): $(PROG3_DIR) + @if not exist $(PROG3_OUTDIR) mkdir $(PROG3_OUTDIR) + +$(CARES_OBJDIR): $(CARES_OUTDIR) + @if not exist $(CARES_OBJDIR) mkdir $(CARES_OBJDIR) + +$(PROG1_OBJDIR): $(PROG1_OUTDIR) + @if not exist $(PROG1_OBJDIR) mkdir $(PROG1_OBJDIR) + +$(PROG2_OBJDIR): $(PROG2_OUTDIR) + @if not exist $(PROG2_OBJDIR) mkdir $(PROG2_OBJDIR) + +$(PROG3_OBJDIR): $(PROG3_OUTDIR) + @if not exist $(PROG3_OBJDIR) mkdir $(PROG3_OBJDIR) + +clean: + @-RMDIR /S /Q $(CARES_OUTDIR) >NUL 2>&1 + @-RMDIR /S /Q $(PROG1_OUTDIR) >NUL 2>&1 + @-RMDIR /S /Q $(PROG2_OUTDIR) >NUL 2>&1 + @-RMDIR /S /Q $(PROG3_OUTDIR) >NUL 2>&1 + +install: + @if not exist $(CARES_OUTDIR)\$(CARES_TARGET) \ + $(MAKE) /f .\Makefile.msvc CFG=$(CFG) c-ares + @if not exist "$(INSTALL_DIR)" mkdir "$(INSTALL_DIR)" + @if not exist "$(INSTALL_DIR_LIB)" mkdir "$(INSTALL_DIR_LIB)" + @if not exist "$(INSTALL_DIR_INC)" mkdir "$(INSTALL_DIR_INC)" + @copy /y $(CARES_OUTDIR)\*.* "$(INSTALL_DIR_LIB)" >NUL + @copy /y $(SRCDIR)\include\ares.h "$(INSTALL_DIR_INC)" >NUL + @copy /y $(SRCDIR)\include\ares_build.h "$(INSTALL_DIR_INC)" >NUL + @copy /y $(SRCDIR)\include\ares_rules.h "$(INSTALL_DIR_INC)" >NUL + @copy /y $(SRCDIR)\include\ares_version.h "$(INSTALL_DIR_INC)" >NUL + @echo Installed c-ares $(CFG) + +!ENDIF + +$(BASE_DIR): + @if not exist $(BASE_DIR) mkdir $(BASE_DIR) + +$(CARES_DIR): $(BASE_DIR) + @if not exist $(CARES_DIR) mkdir $(CARES_DIR) + +$(PROG1_DIR): $(BASE_DIR) + @if not exist $(PROG1_DIR) mkdir $(PROG1_DIR) + +$(PROG2_DIR): $(BASE_DIR) + @if not exist $(PROG2_DIR) mkdir $(PROG2_DIR) + +$(PROG3_DIR): $(BASE_DIR) + @if not exist $(PROG3_DIR) mkdir $(PROG3_DIR) + +# End of Makefile.msvc diff -Nru nodejs-mozilla-12.18.1/deps/cares/Makefile.netware nodejs-mozilla-12.22.12/deps/cares/Makefile.netware --- nodejs-mozilla-12.18.1/deps/cares/Makefile.netware 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/Makefile.netware 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,430 @@ +################################################################# +# +## Makefile for building libcares (NetWare version - gnu make) +## Use: make -f Makefile.netware +## +## Comments to: Guenter Knauf http://www.gknw.de/phpbb +# +################################################################# + +# Edit the path below to point to the base of your Novell NDK. +ifndef NDKBASE +NDKBASE = c:/novell +endif + +ifndef INSTDIR +INSTDIR = ../ares-$(LIBCARES_VERSION_STR)-bin-nw +endif + +# Edit the vars below to change NLM target settings. +TARGETS = adig.nlm ahost.nlm acountry.nlm +LTARGET = libcares.$(LIBEXT) +VERSION = $(LIBCARES_VERSION) +COPYR = $(LIBCARES_COPYRIGHT_STR) +DESCR = cURL $(subst .def,,$(notdir $@)) $(LIBCARES_VERSION_STR) - http://curl.haxx.se +MTSAFE = YES +STACK = 64000 +SCREEN = none +#EXPORTS = +# Comment the line below if you dont want to load protected automatically. +#LDRING = 3 + +# Edit the var below to point to your lib architecture. +ifndef LIBARCH +LIBARCH = LIBC +endif + +# must be equal to NDEBUG or DEBUG +ifndef DB +DB = NDEBUG +endif +# Optimization: -O or debugging: -g +ifeq ($(DB),NDEBUG) + OPT = -O2 + OBJDIR = release +else + OPT = -g + OBJDIR = debug +endif + +# Include the version info retrieved from curlver.h +-include $(OBJDIR)/version.inc + +# The following lines defines your compiler. +ifdef CWFolder + METROWERKS = $(CWFolder) +endif +ifdef METROWERKS + # MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support + MWCW_PATH = $(subst \,/,$(METROWERKS))/Novell Support/Metrowerks Support + CC = mwccnlm +else + CC = gcc +endif +# a native win32 awk can be downloaded from here: +# http://www.gknw.net/development/prgtools/awk-20070501.zip +AWK = awk +YACC = bison -y +CP = cp -afv +MKDIR = mkdir +# RM = rm -f +# if you want to mark the target as MTSAFE you will need a tool for +# generating the xdc data for the linker; here's a minimal tool: +# http://www.gknw.net/development/prgtools/mkxdc.zip +MPKXDC = mkxdc + +# Global flags for all compilers +CFLAGS += $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc + +ifeq ($(CC),mwccnlm) +LD = mwldnlm +LDFLAGS = -nostdlib $(PRELUDE) $(OBJEXE) $(<:.def=.o) -o $@ -commandfile +AR = mwldnlm +ARFLAGS = -nostdlib -type library -o +LIBEXT = lib +#RANLIB = +CFLAGS += -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586 +CFLAGS += -relax_pointers +#CFLAGS += -w on +ifeq ($(LIBARCH),LIBC) + PRELUDE = $(SDK_LIBC)/imports/libcpre.o + CFLAGS += -align 4 +else + # PRELUDE = $(SDK_CLIB)/imports/clibpre.o + # to avoid the __init_* / __deinit_* whoes dont use prelude from NDK + PRELUDE = "$(MWCW_PATH)/libraries/runtime/prelude.obj" + # CFLAGS += -include "$(MWCW_PATH)/headers/nlm_clib_prefix.h" + CFLAGS += -align 1 +endif +else +LD = nlmconv +LDFLAGS = -T +AR = ar +ARFLAGS = -cq +LIBEXT = a +RANLIB = ranlib +CFLAGS += -m32 +CFLAGS += -fno-builtin -fno-strict-aliasing +ifeq ($(findstring gcc,$(CC)),gcc) +CFLAGS += -fpcc-struct-return +endif +CFLAGS += -Wall # -pedantic +ifeq ($(LIBARCH),LIBC) + PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o +else + # PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o + # to avoid the __init_* / __deinit_* whoes dont use prelude from NDK + # http://www.gknw.net/development/mk_nlm/gcc_pre.zip + PRELUDE = $(NDK_ROOT)/pre/prelude.o + CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h +endif +endif + +NDK_ROOT = $(NDKBASE)/ndk +SDK_CLIB = $(NDK_ROOT)/nwsdk +SDK_LIBC = $(NDK_ROOT)/libc + +ifeq ($(LIBARCH),LIBC) + INCLUDES += -I$(SDK_LIBC)/include + # INCLUDES += -I$(SDK_LIBC)/include/nks + # INCLUDES += -I$(SDK_LIBC)/include/winsock + CFLAGS += -D_POSIX_SOURCE +else + INCLUDES += -I$(SDK_CLIB)/include/nlm + # INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete + # INCLUDES += -I$(SDK_CLIB)/include +endif + +CFLAGS += -I. $(INCLUDES) + +ifeq ($(MTSAFE),YES) + XDCOPT = -n +endif +ifeq ($(MTSAFE),NO) + XDCOPT = -u +endif + +ifeq ($(findstring /sh,$(SHELL)),/sh) +DL = ' +#-include $(NDKBASE)/nlmconv/ncpfs.inc +endif + +# Makefile.inc provides the CSOURCES and HHEADERS defines +include Makefile.inc + +OBJLIB := $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CSOURCES))) +OBJEXE = $(OBJLIB) $(OBJDIR)/ares_getopt.o + +.PHONY: lib nlm prebuild dist install clean + +lib: prebuild $(LTARGET) + +nlm: prebuild $(TARGETS) + +prebuild: $(OBJDIR) ares_build.h $(OBJDIR)/version.inc ares_config.h + +install: $(INSTDIR) all + @$(CP) *.nlm $(INSTDIR) + @$(CP) ../CHANGES $(INSTDIR) + @$(CP) ../COPYING $(INSTDIR) + @$(CP) ../README $(INSTDIR) + @$(CP) ../RELEASE-NOTES $(INSTDIR) + +clean: + -$(RM) $(LTARGET) $(TARGETS) ares_config.h + -$(RM) -r $(OBJDIR) + -$(RM) -r arpa + +%.$(LIBEXT): $(OBJLIB) + @echo Creating $@ + @-$(RM) $@ + @$(AR) $(ARFLAGS) $@ $^ +ifdef RANLIB + @$(RANLIB) $@ +endif + +%.nlm: $(OBJDIR)/%.def $(OBJDIR)/%.o $(OBJDIR)/%.xdc $(OBJEXE) + @echo Linking $@ + @-$(RM) $@ + @$(LD) $(LDFLAGS) $< + +$(OBJDIR) $(INSTDIR): + @$(MKDIR) $@ + +$(OBJDIR)/%.o: %.c +# @echo Compiling $< + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJDIR)/version.inc: ares_version.h $(OBJDIR) + @echo Creating $@ + @$(AWK) -f get_ver.awk $< > $@ + +$(OBJDIR)/%.xdc: Makefile.netware + @echo Creating $@ + @$(MPKXDC) $(XDCOPT) $@ + +$(OBJDIR)/%.def: Makefile.netware + @echo Creating $@ + @echo $(DL)# DEF file for linking with $(LD)$(DL) > $@ + @echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@ + @echo $(DL)# All your changes will be lost!!$(DL) >> $@ + @echo $(DL)#$(DL) >> $@ + @echo $(DL)copyright "$(COPYR)"$(DL) >> $@ + @echo $(DL)description "$(DESCR)"$(DL) >> $@ + @echo $(DL)version $(VERSION)$(DL) >> $@ +ifdef NLMTYPE + @echo $(DL)type $(NLMTYPE)$(DL) >> $@ +endif +ifdef STACK + @echo $(DL)stack $(STACK)$(DL) >> $@ +endif +ifdef SCREEN + @echo $(DL)screenname "$(SCREEN)"$(DL) >> $@ +else + @echo $(DL)screenname "DEFAULT"$(DL) >> $@ +endif +ifeq ($(DB),DEBUG) + @echo $(DL)debug$(DL) >> $@ +endif + @echo $(DL)threadname "$^"$(DL) >> $@ +ifdef XDCOPT + @echo $(DL)xdcdata $(@:.def=.xdc)$(DL) >> $@ +endif +ifeq ($(LDRING),0) + @echo $(DL)flag_on 16$(DL) >> $@ +endif +ifeq ($(LDRING),3) + @echo $(DL)flag_on 512$(DL) >> $@ +endif +ifeq ($(LIBARCH),CLIB) + @echo $(DL)start _Prelude$(DL) >> $@ + @echo $(DL)exit _Stop$(DL) >> $@ + @echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@ + @echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@ + @echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@ + @echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@ + @echo $(DL)module clib$(DL) >> $@ +else + @echo $(DL)flag_on 64$(DL) >> $@ + @echo $(DL)pseudopreemption$(DL) >> $@ + @echo $(DL)start _LibCPrelude$(DL) >> $@ + @echo $(DL)exit _LibCPostlude$(DL) >> $@ + @echo $(DL)check _LibCCheckUnload$(DL) >> $@ + @echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@ + @echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@ + @echo $(DL)module libc$(DL) >> $@ +endif +ifdef MODULES + @echo $(DL)module $(MODULES)$(DL) >> $@ +endif +ifdef EXPORTS + @echo $(DL)export $(EXPORTS)$(DL) >> $@ +endif +ifdef IMPORTS + @echo $(DL)import $(IMPORTS)$(DL) >> $@ +endif +ifeq ($(LD),nlmconv) + @echo $(DL)input $(PRELUDE)$(DL) >> $@ + @echo $(DL)input $(OBJEXE)$(DL) >> $@ + @echo $(DL)input $(@:.def=.o)$(DL) >> $@ + @echo $(DL)output $(notdir $(@:.def=.nlm))$(DL) >> $@ +endif + +ares_config.h: Makefile.netware + @echo Creating $@ + @echo $(DL)/* $@ for NetWare target.$(DL) > $@ + @echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@ + @echo $(DL)** All your changes will be lost!!$(DL) >> $@ + @echo $(DL)*/$(DL) >> $@ + @echo $(DL)#ifndef NETWARE$(DL) >> $@ + @echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@ + @echo $(DL)#endif$(DL) >> $@ + @echo $(DL)#define VERSION "$(LIBCARES_VERSION_STR)"$(DL) >> $@ + @echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => http://curl.haxx.se/mail/"$(DL) >> $@ +ifeq ($(LIBARCH),CLIB) + @echo $(DL)#define OS "i586-pc-clib-NetWare"$(DL) >> $@ + @echo $(DL)#define HAVE_STRICMP 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRNICMP 1$(DL) >> $@ + @echo $(DL)#define NETDB_USE_INTERNET 1$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG2 char *$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG3 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_RETV int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG2 char$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG3 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG6 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_RETV int$(DL) >> $@ + @echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG2 char *$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG3 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_RETV int$(DL) >> $@ +else + @echo $(DL)#define OS "i586-pc-libc-NetWare"$(DL) >> $@ + @echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@ + @echo $(DL)#define HAVE_FTRUNCATE 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@ + @echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@ + @echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRTOLL 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_AF_INET6 1$(DL) >> $@ + @echo $(DL)#define HAVE_PF_INET6 1$(DL) >> $@ + @echo $(DL)#define HAVE_FREEADDRINFO 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETADDRINFO 1$(DL) >> $@ + @echo $(DL)#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRUCT_IN6_ADDR 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRUCT_SOCKADDR_IN6 1$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG2 void *$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG3 size_t$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define RECV_TYPE_RETV ssize_t$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG2 void$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG3 size_t$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG5 struct sockaddr$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG6 size_t$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_RETV ssize_t$(DL) >> $@ + @echo $(DL)#define RECVFROM_TYPE_ARG2_IS_VOID 1$(DL) >> $@ + @echo $(DL)#define SEND_QUAL_ARG2$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG1 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG2 void *$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG3 size_t$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_ARG4 int$(DL) >> $@ + @echo $(DL)#define SEND_TYPE_RETV ssize_t$(DL) >> $@ +endif + @echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_ERRNO_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETENV 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETHOSTNAME 1$(DL) >> $@ + @echo $(DL)#define HAVE_GETPROTOBYNAME 1$(DL) >> $@ + @echo $(DL)#define HAVE_GMTIME_R 1$(DL) >> $@ + @echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@ + @echo $(DL)#define HAVE_IOCTL 1$(DL) >> $@ + @echo $(DL)#define HAVE_IOCTL_FIONBIO 1$(DL) >> $@ + @echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_LL 1$(DL) >> $@ + @echo $(DL)#define HAVE_LOCALTIME_R 1$(DL) >> $@ + @echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_RECV 1$(DL) >> $@ + @echo $(DL)#define HAVE_RECVFROM 1$(DL) >> $@ + @echo $(DL)#define HAVE_SELECT 1$(DL) >> $@ + @echo $(DL)#define HAVE_SEND 1$(DL) >> $@ + @echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@ + @echo $(DL)#define HAVE_SIGNAL_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SIG_ATOMIC_T 1$(DL) >> $@ + @echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@ + @echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRUCT_ADDRINFO 1$(DL) >> $@ + @echo $(DL)#define HAVE_STRUCT_TIMEVAL 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_IOCTL_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_UNAME 1$(DL) >> $@ + @echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_UTIME 1$(DL) >> $@ + @echo $(DL)#define HAVE_UTIME_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_WRITEV 1$(DL) >> $@ + @echo $(DL)#define RETSIGTYPE void$(DL) >> $@ + @echo $(DL)#define STDC_HEADERS 1$(DL) >> $@ + @echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@ +ifdef NW_WINSOCK + @echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@ +else + @echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@ + @echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@ +endif + @echo $(DL)#ifdef __GNUC__$(DL) >> $@ + @echo $(DL)#define HAVE_VARIADIC_MACROS_GCC 1$(DL) >> $@ + @echo $(DL)#else$(DL) >> $@ + @echo $(DL)#define HAVE_VARIADIC_MACROS_C99 1$(DL) >> $@ + @echo $(DL)#endif$(DL) >> $@ + +FORCE: ; + +ares_build.h: Makefile.netware FORCE + @echo Creating $@ + @echo $(DL)/* $@ intended for NetWare target.$(DL) > $@ + @echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@ + @echo $(DL)** All your changes will be lost!!$(DL) >> $@ + @echo $(DL)*/$(DL) >> $@ + @echo $(DL)#ifndef NETWARE$(DL) >> $@ + @echo $(DL)#error This $(notdir $@) is created for NetWare platform!$(DL) >> $@ + @echo $(DL)#endif$(DL) >> $@ + @echo $(DL)#ifndef __CARES_BUILD_H$(DL) >> $@ + @echo $(DL)#define __CARES_BUILD_H$(DL) >> $@ +ifeq ($(LIBARCH),CLIB) + @echo $(DL)#define CARES_TYPEOF_ARES_SOCKLEN_T int$(DL) >> $@ +else + @echo $(DL)#define CARES_TYPEOF_ARES_SOCKLEN_T unsigned int$(DL) >> $@ +endif + @echo $(DL)typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;$(DL) >> $@ + @echo $(DL)#endif /* __CARES_BUILD_H */$(DL) >> $@ diff -Nru nodejs-mozilla-12.18.1/deps/cares/Makefile.Watcom nodejs-mozilla-12.22.12/deps/cares/Makefile.Watcom --- nodejs-mozilla-12.18.1/deps/cares/Makefile.Watcom 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/Makefile.Watcom 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,164 @@ +# +# Watcom / OpenWatcom / Win32 makefile for cares. +# Quick hack by Guenter; comments to: /dev/nul +# + +!ifndef %watcom +!error WATCOM environment variable not set! +!else +SYS_INCL = -I$(%watcom)\h\nt -I$(%watcom)\h +SYS_LIBS = $(%watcom)\lib386\nt;$(%watcom)\lib386 +!endif + +!ifdef %libname +LIBNAME = $(%libname) +!else +LIBNAME = cares +!endif +TARGETS = $(LIBNAME).dll $(LIBNAME)_imp.lib $(LIBNAME).lib +DEMOS = adig.exe ahost.exe acountry.exe + +CC = wcc386 +LD = wlink +AR = wlib +RC = wrc + +!ifdef __LOADDLL__ +! loaddll wcc386 wccd386 +! loaddll wpp386 wppd386 +! loaddll wlib wlibd +!endif + +!if $(__VERSION__) < 1250 +RM = del /q /f 2>NUL +!else +RM = rm -f +!endif +MD = mkdir +RD = rmdir /q /s 2>NUL +CP = copy + +CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm & + -wcd=201 -bt=nt -d+ -dWIN32 -dCARES_BUILDING_LIBRARY & + -dNTDDI_VERSION=0x05010000 -I. $(SYS_INCL) + +LFLAGS = option quiet, map, caseexact, eliminate + +!ifdef %debug +DEBUG = -dDEBUG=1 -dDEBUGBUILD +CFLAGS += -d3 $(DEBUG) +LFLAGS += debug all +!else +CFLAGS += -d0 +!endif + +CFLAGS += -d_WIN32_WINNT=0x0600 + +# +# Change to suite. +# +!ifdef %use_watt32 +CFLAGS += -dWATT32 -I$(%watt_root)\inc +!endif + +OBJ_BASE = WC_Win32.obj +LINK_ARG = $(OBJ_BASE)\dyn\wlink.arg +LIB_ARG = $(OBJ_BASE)\stat\wlib.arg + +# In order to process Makefile.inc wmake must be called with -u switch! +!ifneq __MAKEOPTS__ -u +!error You MUST call wmake with the -u switch! +!else +!include Makefile.inc +!endif + +OBJS = $(CSOURCES:.c=.obj) +OBJS = $OBJ_DIR\$(OBJS: = $OBJ_DIR\) + +# +# Use $(OBJS) as a template to generate $(OBJS_STAT) and $(OBJS_DYN). +# +OBJ_DIR = $(OBJ_BASE)\stat +OBJS_STAT = $+ $(OBJS) $- + +OBJ_DIR = $(OBJ_BASE)\dyn +OBJS_DYN = $+ $(OBJS) $- + +ARESBUILDH = ares_build.h +RESOURCE = $(OBJ_BASE)\dyn\cares.res + +all: $(ARESBUILDH) $(OBJ_BASE) $(TARGETS) $(DEMOS) .SYMBOLIC + @echo Welcome to cares + +$(OBJ_BASE): + -$(MD) $^@ + -$(MD) $^@\stat + -$(MD) $^@\dyn + -$(MD) $^@\demos + +$(ARESBUILDH): .EXISTSONLY + $(CP) $^@.dist $^@ + +$(LIBNAME).dll: $(OBJS_DYN) $(RESOURCE) $(LINK_ARG) + $(LD) name $^@ @$]@ + +$(LIBNAME).lib: $(OBJS_STAT) $(LIB_ARG) + $(AR) -q -b -c $^@ @$]@ + +adig.exe: $(OBJ_BASE)\demos\adig.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib + $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib + +ahost.exe: $(OBJ_BASE)\demos\ahost.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib + $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib + +acountry.exe: $(OBJ_BASE)\demos\acountry.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib + $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib + +clean: .SYMBOLIC + -$(RM) $(OBJS_STAT) + -$(RM) $(OBJS_DYN) + -$(RM) $(RESOURCE) $(LINK_ARG) $(LIB_ARG) + +vclean realclean: clean .SYMBOLIC + -$(RM) $(TARGETS) $(LIBNAME).map + -$(RM) $(DEMOS) $(DEMOS:.exe=.map) + -$(RD) $(OBJ_BASE)\stat + -$(RD) $(OBJ_BASE)\dyn + -$(RD) $(OBJ_BASE)\demos + -$(RD) $(OBJ_BASE) + +.ERASE +$(RESOURCE): cares.rc .AUTODEPEND + $(RC) $(DEBUG) -q -r -zm -I..\include $(SYS_INCL) $[@ -fo=$^@ + +.ERASE +.c{$(OBJ_BASE)\dyn}.obj: + $(CC) $(CFLAGS) -bd $[@ -fo=$^@ + +.ERASE +.c{$(OBJ_BASE)\stat}.obj: + $(CC) $(CFLAGS) -DCARES_STATICLIB $[@ -fo=$^@ + +.ERASE +.c{$(OBJ_BASE)\demos}.obj: + $(CC) $(CFLAGS) -DCARES_STATICLIB $[@ -fo=$^@ + +$(LINK_ARG): $(__MAKEFILES__) + %create $^@ + @%append $^@ system nt dll + @%append $^@ file { $(OBJS_DYN) } + @%append $^@ option res=$(RESOURCE), implib=$(LIBNAME)_imp.lib + @%append $^@ $(LFLAGS) + @%append $^@ libpath $(SYS_LIBS) +# @%append $^@ library clib3r.lib +!ifdef %use_watt32 + @%append $^@ library $(%watt_root)\lib\wattcpw_imp.lib +!else + @%append $^@ library ws2_32.lib +!endif + +$(LIB_ARG): $(__MAKEFILES__) + %create $^@ + @for %f in ($(OBJS_STAT)) do @%append $^@ +- %f + + diff -Nru nodejs-mozilla-12.18.1/deps/cares/maketgz nodejs-mozilla-12.22.12/deps/cares/maketgz --- nodejs-mozilla-12.18.1/deps/cares/maketgz 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/maketgz 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,69 @@ +#!/usr/bin/env perl + +$version = $ARGV[0]; + +if($version eq "") { + print "Enter version number!\n"; + exit; +} + +if(!-f "include/ares.h") { + print "run this script in the ares source root dir\n"; + exit; +} + +my ($major, $minor, $patch)=split(/\./, $version); + +$major += 0; +$minor += 0; +$patch += 0; + +open(VER, "include/ares_version.h.dist"); +while() { + $_ =~ s/^\#define ARES_VERSION_MAJOR .*/\#define ARES_VERSION_MAJOR $major/; + $_ =~ s/^\#define ARES_VERSION_MINOR .*/\#define ARES_VERSION_MINOR $minor/; + $_ =~ s/^\#define ARES_VERSION_PATCH .*/\#define ARES_VERSION_PATCH $patch/; + $_ =~ s/^\#define ARES_VERSION_STR .*/\#define ARES_VERSION_STR \"$version\"/; + + print NEWV $_; +} +close(VER); +close(NEWV); +print "include/ares_version.h.dist created\n"; + +if(!-f "configure") { + print "running buildconf\n"; + `./buildconf`; +} +print "adding $version in the configure.ac file\n"; +`sed -e 's/AC_INIT.*/AC_INIT([c-ares], [$version],/' < configure.ac > configure.ac.dist`; + +print "adding $version in the CMakeLists.txt file\n"; +`sed -e 's/SET.*CARES_VERSION.*/SET (CARES_VERSION "$version")/' < CMakeLists.txt > CMakeLists.txt.dist && rm -f CMakeLists.txt && mv CMakeLists.txt.dist CMakeLists.txt`; + +# now make a new configure script with this +print "makes a new configure script\n"; +`autoconf configure.ac.dist >configure`; + +# now run this new configure to get a fine makefile +print "running configure\n"; +`./configure`; + +print "produce CHANGES\n"; +`git log --pretty=fuller --no-color --date=short --decorate=full -1000 | ./git2changes.pl > CHANGES.dist`; + +# now make the actual tarball +print "running make dist\n"; +`make dist VERSION=$version`; + +# remove temporay sourced man pages +`make -s clean-sourced-manpages`; + +print "removing temporary configure.ac file\n"; +`rm configure.ac.dist`; +print "removing temporary ares_version.h file\n"; +`rm include/ares_version.h.dist`; + +print "NOTE: now tag this release!\n"; diff -Nru nodejs-mozilla-12.18.1/deps/cares/missing nodejs-mozilla-12.22.12/deps/cares/missing --- nodejs-mozilla-12.18.1/deps/cares/missing 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/missing 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1996-2021 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff -Nru nodejs-mozilla-12.18.1/deps/cares/msvc_ver.inc nodejs-mozilla-12.22.12/deps/cares/msvc_ver.inc --- nodejs-mozilla-12.18.1/deps/cares/msvc_ver.inc 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/msvc_ver.inc 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,24 @@ +# ----------------------------------------------- +# Detect NMAKE version deducing old MSVC versions +# ----------------------------------------------- + +!IFNDEF _NMAKE_VER +! MESSAGE Macro _NMAKE_VER not defined. +! MESSAGE Use MSVC's NMAKE to process this makefile. +! ERROR See previous message. +!ENDIF + +!IF "$(_NMAKE_VER)" == "6.00.8168.0" +CC_VERS_NUM = 60 +!ELSEIF "$(_NMAKE_VER)" == "6.00.9782.0" +CC_VERS_NUM = 60 +!ELSEIF "$(_NMAKE_VER)" == "7.00.8882" +CC_VERS_NUM = 70 +!ELSEIF "$(_NMAKE_VER)" == "7.00.9466" +CC_VERS_NUM = 70 +!ELSEIF "$(_NMAKE_VER)" == "7.00.9955" +CC_VERS_NUM = 70 +!ELSE +# Pick an arbitrary bigger number for all later versions +CC_VERS_NUM = 199 +!ENDIF diff -Nru nodejs-mozilla-12.18.1/deps/cares/NEWS nodejs-mozilla-12.22.12/deps/cares/NEWS --- nodejs-mozilla-12.18.1/deps/cares/NEWS 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/NEWS 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,21 @@ +Major changes since: +* see the CHANGES file + +Major changes in release 1.1.1: +* ares should now compile as C++ code (no longer uses reserved word + "class"). +* Added SRV support to adig test program. +* Fixed a few error handling bugs in query processing. + +Major changes in release 1.1.0: +* Added ares_free_string() function so that memory can be freed in the + same layer as it is allocated, a desirable feature in some + environments. +* A few of the ares_dns.h macros are fixed to use the proper bitwise + operator. +* Fixed a couple of fenceposts fixed in ares_expand_name()'s + bounds-checking. +* In process_timeouts(), extract query->next before calling + next_server() and possibly freeing the query structure. +* Casted arguments to ctype macros casted to unsigned char, since not + all char values are valid inputs to those macros according to ANSI. diff -Nru nodejs-mozilla-12.18.1/deps/cares/README.cares nodejs-mozilla-12.22.12/deps/cares/README.cares --- nodejs-mozilla-12.18.1/deps/cares/README.cares 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/README.cares 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,15 @@ +c-ares +====== + +This package is based on ares 1.1.1 (written by Greg Hudson). Daniel Stenberg +decided to fork and release a separate project since the original ares author +didn't want the improvements that were vital for our use of it. + +This package is dubbed 'c-ares' since Daniel wanted this for use within the +curl project (hence the letter C) and it makes a nice pun. c-ares is not API +compatible with ares: a new name makes that more obvious to the public. + +The original libares was distributed at +ftp://athena-dist.mit.edu:pub/ATHENA/ares (which seems to not be alive +anymore). A local copy of the original ares package is kept here: +https://c-ares.org/download/ares-1.1.1.tar.gz diff -Nru nodejs-mozilla-12.18.1/deps/cares/README.md nodejs-mozilla-12.22.12/deps/cares/README.md --- nodejs-mozilla-12.18.1/deps/cares/README.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/README.md 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,67 @@ +c-ares +====== + +[![Build Status](https://api.cirrus-ci.com/github/c-ares/c-ares.svg)](https://cirrus-ci.com/github/c-ares/c-ares) +[![Windows Build Status](https://ci.appveyor.com/api/projects/status/aevgc5914tm72pvs/branch/master?svg=true)](https://ci.appveyor.com/project/c-ares/c-ares/branch/master) +[![Coverage Status](https://coveralls.io/repos/c-ares/c-ares/badge.svg?branch=master&service=github)](https://coveralls.io/github/c-ares/c-ares?branch=master) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/291/badge)](https://bestpractices.coreinfrastructure.org/projects/291) +[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/c-ares.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:c-ares) +[![Releases](https://coderelease.io/badge/c-ares/c-ares)](https://coderelease.io/github/repository/c-ares/c-ares) + +This is c-ares, an asynchronous resolver library. It is intended for +applications which need to perform DNS queries without blocking, or need to +perform multiple DNS queries in parallel. The primary examples of such +applications are servers which communicate with multiple clients and programs +with graphical user interfaces. + +The full source code is available in the ['c-ares' release archives](https://c-ares.org/download/), +and in a git repository: https://github.com/c-ares/c-ares. See the +[INSTALL.md](INSTALL.md) file for build information. + +If you find bugs, correct flaws, have questions or have comments in general in +regard to c-ares (or by all means the original ares too), get in touch with us +on the c-ares mailing list: https://lists.haxx.se/listinfo/c-ares + +c-ares is of course distributed under the same MIT-style license as the +original ares. + +You'll find all c-ares details and news here: + https://c-ares.org/ + + +Notes for c-ares hackers +------------------------ + +* The distributed `ares_build.h` file is only intended to be used on systems + which can not run the also distributed configure script. + +* The distributed `ares_build.h` file is generated as a copy of `ares_build.h.dist` + when the c-ares source code distribution archive file is originally created. + +* If you check out from git on a non-configure platform, you must run the + appropriate `buildconf*` script to set up `ares_build.h` and other local files + before being able to compile the library. + +* On systems capable of running the `configure` script, the `configure` process + will overwrite the distributed `ares_build.h` file with one that is suitable + and specific to the library being configured and built, this new file is + generated from the `ares_build.h.in` template file. + +* If you intend to distribute an already compiled c-ares library you **MUST** + also distribute along with it the generated `ares_build.h` which has been + used to compile it. Otherwise the library will be of no use for the users of + the library that you have built. It is **your** responsibility to provide this + file. No one at the c-ares project can know how you have built the library. + +* File `ares_build.h` includes platform and configuration dependent info, + and must not be modified by anyone. Configure script generates it for you. + +* We cannot assume anything else but very basic compiler features being + present. While c-ares requires an ANSI C compiler to build, some of the + earlier ANSI compilers clearly can't deal with some preprocessor operators. + +* Newlines must remain unix-style for older compilers' sake. + +* Comments must be written in the old-style /* unnested C-fashion */ + +* Try to keep line lengths below 80 columns. diff -Nru nodejs-mozilla-12.18.1/deps/cares/README.msvc nodejs-mozilla-12.22.12/deps/cares/README.msvc --- nodejs-mozilla-12.18.1/deps/cares/README.msvc 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/README.msvc 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,102 @@ + + + ___ __ _ _ __ ___ ___ + / __| ___ / _` | '__/ _ \/ __| + | (_ |___| (_| | | | __/\__ \ + \___| \__,_|_| \___||___/ + + + How to build c-ares using MSVC or Visual Studio + ================================================= + + + + How to build using MSVC from the command line + --------------------------------------------- + + Open a command prompt window and ensure that the environment is properly + set up in order to use MSVC or Visual Studio compiler tools. + + Change to c-ares source folder where Makefile.msvc file is located and run: + + > nmake -f Makefile.msvc + + This will build all c-ares libraries as well as three sample programs. + + Once the above command has finished a new folder named MSVCXX will exist + below the folder where makefile.msvc is found. The name of the folder + depends on the MSVC compiler version being used to build c-ares. + + Below the MSVCXX folder there will exist four folders named 'cares', + 'ahost', 'acountry', and 'adig'. The 'cares' folder is the one that + holds the c-ares libraries you have just generated, the other three + hold sample programs that use the libraries. + + The above command builds four versions of the c-ares library, dynamic + and static versions and each one in release and debug flavours. Each + of these is found in folders named dll-release, dll-debug, lib-release, + and lib-debug, which hang from the 'cares' folder mentioned above. Each + sample program also has folders with the same names to reflect which + library version it is using. + + + How to install using MSVC from the command line + ----------------------------------------------- + + In order to allow easy usage of c-ares libraries it may be convenient to + install c-ares libraries and header files to a common subdirectory tree. + + Once that c-ares libraries have been built using procedure described above, + use same command prompt window to define environment variable INSTALL_DIR + to designate the top subdirectory where installation of c-ares libraries and + header files will be done. + + > set INSTALL_DIR=c:\c-ares + + Afterwards, run following command to actually perform the installation: + + > nmake -f Makefile.msvc install + + Installation procedure will copy c-ares libraries to subdirectory 'lib' and + c-ares header files to subdirectory 'include' below the INSTALL_DIR subdir. + + When environment variable INSTALL_DIR is not defined, installation is done + to c-ares source folder where Makefile.msvc file is located. + + + + Relationship between c-ares library file names and versions + ----------------------------------------------------------- + + c-ares static release library version files: + + libcares.lib -> static release library + + c-ares static debug library version files: + + libcaresd.lib -> static debug library + + c-ares dynamic release library version files: + + cares.dll -> dynamic release library + cares.lib -> import library for the dynamic release library + cares.exp -> export file for the dynamic release library + + c-ares dynamic debug library version files: + + caresd.dll -> dynamic debug library + caresd.lib -> import library for the dynamic debug library + caresd.exp -> export file for the dynamic debug library + caresd.pdb -> debug symbol file for the dynamic debug library + + + How to use c-ares static libraries + ---------------------------------- + + When using the c-ares static library in your program, you will have to + define preprocessor symbol CARES_STATICLIB while building your program, + otherwise you will get errors at linkage stage. + + +Have Fun! + diff -Nru nodejs-mozilla-12.18.1/deps/cares/RELEASE-NOTES nodejs-mozilla-12.22.12/deps/cares/RELEASE-NOTES --- nodejs-mozilla-12.18.1/deps/cares/RELEASE-NOTES 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/RELEASE-NOTES 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,85 @@ +c-ares version 1.18.1 + +This is an urgent bugfix release for a regression made in 1.18.0. + +Bug fixes: + o ares_getaddrinfo() would return ai_addrlen of 16 for ipv6 + adddresses rather than the sizeof(struct sockaddr_in6) + + + +c-ares version 1.18.0 + +This is a feature and bugfix release. It addresses a couple of new feature +requests as well as a couple of bug fixes. + +Changes: + o Add support for URI(Uniform Resource Identifier) records via + ares_parse_uri_reply() [1] + o Provide ares_nameser.h as a public interface as needed by NodeJS [5] + o Update URLs from c-ares.haxx.se to c-ares.org [9] + o During a domain search, treat ARES_ENODATA as ARES_NXDOMAIN so that the + search process will continue to the next domain in the search. [11] + o Turn ares_gethostbyname() into a wrapper for ares_getaddrinfo() as they + followed very similar code paths and ares_gethostbyaddr() has some more + desirable features such as priority sorting and parallel queries for + AF_UNSPEC. [12] + o ares_getaddrinfo() now contains a name element in the address info + structure as the last element. This is not an API or ABI break due to + the structure always being internally allocated and it being the last + element. [12] + o ares_parse_a_reply() and ares_parse_aaaa_reply() were nearly identical, those + now use the same helper functions for parsing rather than having their own + code. [12] + o RFC6761 Section 6.3 says "localhost" lookups need to be special cased to + return loopback addresses, and not forward queries to recursive dns servers. + On Windows this now returns all loopback addresses, on other systems it + returns 127.0.0.1 or ::1 always, and will never forward a request for + "localhost" to outside DNS servers. [13] + o Haiki: port [14] + +Bug fixes: + o add build to .gitignore [2] + o z/OS minor update, add missing semicolon in ares_init.c [3] + o Fix building when latest ax_code_coverage.m4 is imported [4] + o Work around autotools 'error: too many loops' and other newer autotools + import related bugs. + o MinGW cross builds need advapi32 link as lower case [6] + o Cygwin build fix due to containing both socket.h and winsock2.h [7] + o ares_expand_name should allow underscores (_) as SRV records legitimately use + them [8] + o Allow '/' as a valid character for a returned name for CNAME in-addr.arpa + delegation [10] + o ares_getaddrinfo() was not honoring HOSTALIASES [12] + o ares_getaddrinfo() had some test cases disabled due to a bug in the test + framework itself which has now been resolved [12] + o Due to Travis-CI becoming unfriendly to open-source, Cirrus-CI has now been + brought online for automated unit testing. + +Thanks go to these friendly people for their efforts and contributions: + Biswapriyo Nath (@Biswa96) + Brad House (@bradh352) + Daniel Bevenius (@danbev) + Daniel Stenberg (@bagder) + Dhrumil Rana (@dhrumilrana) + Felix Yan (@felixonmars) + Jérôme Duval (@korli) + Martin Holeš (@martin-256) + Sinan Kaya +(9 contributors) + +References to bug reports and discussions on issues: + [1] = https://github.com/c-ares/c-ares/pull/411 + [2] = https://github.com/c-ares/c-ares/pull/410 + [3] = https://github.com/c-ares/c-ares/pull/414 + [4] = https://github.com/c-ares/c-ares/pull/418 + [5] = https://github.com/c-ares/c-ares/pull/417 + [6] = https://github.com/c-ares/c-ares/pull/420 + [7] = https://github.com/c-ares/c-ares/pull/422 + [8] = https://github.com/c-ares/c-ares/issues/424 + [9] = https://github.com/c-ares/c-ares/issues/423 + [10] = https://github.com/c-ares/c-ares/issues/427 + [11] = https://github.com/c-ares/c-ares/issues/426 + [12] = https://github.com/c-ares/c-ares/pull/428 + [13] = https://github.com/c-ares/c-ares/pull/430 + [14] = https://github.com/c-ares/c-ares/pull/431 diff -Nru nodejs-mozilla-12.18.1/deps/cares/SECURITY.md nodejs-mozilla-12.22.12/deps/cares/SECURITY.md --- nodejs-mozilla-12.18.1/deps/cares/SECURITY.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/SECURITY.md 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,100 @@ +c-ares security +=============== + +This document is intended to provide guidance on how security vulnerabilities +should be handled in the c-ares project. + +Publishing Information +---------------------- + +All known and public c-ares vulnerabilities will be listed on [the c-ares web +site](https://c-ares.org/vulns.html). + +Security vulnerabilities should not be entered in the project's public bug +tracker unless the necessary configuration is in place to limit access to the +issue to only the reporter and the project's security team. + +Vulnerability Handling +---------------------- + +The typical process for handling a new security vulnerability is as follows. + +No information should be made public about a vulnerability until it is +formally announced at the end of this process. That means, for example that a +bug tracker entry must NOT be created to track the issue since that will make +the issue public and it should not be discussed on the project's public +mailing list. Also messages associated with any commits should not make any +reference to the security nature of the commit if done prior to the public +announcement. + +- The person discovering the issue, the reporter, reports the vulnerability + privately to `c-ares-security@haxx.se`. That's an email alias that reaches a + handful of selected and trusted people. + +- Messages that do not relate to the reporting or managing of an undisclosed + security vulnerability in c-ares are ignored and no further action is + required. + +- A person in the security team sends an e-mail to the original reporter to + acknowledge the report. + +- The security team investigates the report and either rejects it or accepts + it. + +- If the report is rejected, the team writes to the reporter to explain why. + +- If the report is accepted, the team writes to the reporter to let him/her + know it is accepted and that they are working on a fix. + +- The security team discusses the problem, works out a fix, considers the + impact of the problem and suggests a release schedule. This discussion + should involve the reporter as much as possible. + +- The release of the information should be "as soon as possible" and is most + often synced with an upcoming release that contains the fix. If the + reporter, or anyone else, thinks the next planned release is too far away + then a separate earlier release for security reasons should be considered. + +- Write a security advisory draft about the problem that explains what the + problem is, its impact, which versions it affects, solutions or + workarounds, when the release is out and make sure to credit all + contributors properly. + +- Request a CVE number from + [distros@openwall](http://oss-security.openwall.org/wiki/mailing-lists/distros) + when also informing and preparing them for the upcoming public security + vulnerability announcement - attach the advisory draft for information. Note + that 'distros' won't accept an embargo longer than 19 days. + +- Update the "security advisory" with the CVE number. + +- The security team commits the fix in a private branch. The commit message + should ideally contain the CVE number. This fix is usually also distributed + to the 'distros' mailing list to allow them to use the fix prior to the + public announcement. + +- At the day of the next release, the private branch is merged into the master + branch and pushed. Once pushed, the information is accessible to the public + and the actual release should follow suit immediately afterwards. + +- The project team creates a release that includes the fix. + +- The project team announces the release and the vulnerability to the world in + the same manner we always announce releases. It gets sent to the c-ares + mailing list and the oss-security mailing list. + +- The security web page on the web site should get the new vulnerability + mentioned. + +C-ARES-SECURITY (at haxx dot se) +-------------------------------- + +Who is on this list? There are a couple of criteria you must meet, and then we +might ask you to join the list or you can ask to join it. It really isn't very +formal. We basically only require that you have a long-term presence in the +c-ares project and you have shown an understanding for the project and its way +of working. You must've been around for a good while and you should have no +plans in vanishing in the near future. + +We do not make the list of partipants public mostly because it tends to vary +somewhat over time and a list somewhere will only risk getting outdated. diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_android.c nodejs-mozilla-12.22.12/deps/cares/src/ares_android.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_android.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_android.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,444 +0,0 @@ -/* Copyright (C) 2017 by John Schember - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ -#if defined(ANDROID) || defined(__ANDROID__) - -#include - -#include "ares_setup.h" -#include "ares.h" -#include "ares_android.h" -#include "ares_private.h" - -static JavaVM *android_jvm = NULL; -static jobject android_connectivity_manager = NULL; - -/* ConnectivityManager.getActiveNetwork */ -static jmethodID android_cm_active_net_mid = NULL; -/* ConnectivityManager.getLinkProperties */ -static jmethodID android_cm_link_props_mid = NULL; -/* LinkProperties.getDnsServers */ -static jmethodID android_lp_dns_servers_mid = NULL; -/* LinkProperties.getDomains */ -static jmethodID android_lp_domains_mid = NULL; -/* List.size */ -static jmethodID android_list_size_mid = NULL; -/* List.get */ -static jmethodID android_list_get_mid = NULL; -/* InetAddress.getHostAddress */ -static jmethodID android_ia_host_addr_mid = NULL; - -static jclass jni_get_class(JNIEnv *env, const char *path) -{ - jclass cls = NULL; - - if (env == NULL || path == NULL || *path == '\0') - return NULL; - - cls = (*env)->FindClass(env, path); - if ((*env)->ExceptionOccurred(env)) { - (*env)->ExceptionClear(env); - return NULL; - } - return cls; -} - -static jmethodID jni_get_method_id(JNIEnv *env, jclass cls, - const char *func_name, const char *signature) -{ - jmethodID mid = NULL; - - if (env == NULL || cls == NULL || func_name == NULL || *func_name == '\0' || - signature == NULL || *signature == '\0') - { - return NULL; - } - - mid = (*env)->GetMethodID(env, cls, func_name, signature); - if ((*env)->ExceptionOccurred(env)) - { - (*env)->ExceptionClear(env); - return NULL; - } - - return mid; -} - -void ares_library_init_jvm(JavaVM *jvm) -{ - android_jvm = jvm; -} - -int ares_library_init_android(jobject connectivity_manager) -{ - JNIEnv *env = NULL; - int need_detatch = 0; - int res; - int ret = ARES_ENOTINITIALIZED; - jclass obj_cls = NULL; - - if (android_jvm == NULL) - goto cleanup; - - res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6); - if (res == JNI_EDETACHED) - { - env = NULL; - res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL); - need_detatch = 1; - } - if (res != JNI_OK || env == NULL) - goto cleanup; - - android_connectivity_manager = - (*env)->NewGlobalRef(env, connectivity_manager); - if (android_connectivity_manager == NULL) - goto cleanup; - - /* Initialization has succeeded. Now attempt to cache the methods that will be - * called by ares_get_android_server_list. */ - ret = ARES_SUCCESS; - - /* ConnectivityManager in API 1. */ - obj_cls = jni_get_class(env, "android/net/ConnectivityManager"); - if (obj_cls == NULL) - goto cleanup; - - /* ConnectivityManager.getActiveNetwork in API 23. */ - android_cm_active_net_mid = - jni_get_method_id(env, obj_cls, "getActiveNetwork", - "()Landroid/net/Network;"); - if (android_cm_active_net_mid == NULL) - goto cleanup; - - /* ConnectivityManager.getLinkProperties in API 21. */ - android_cm_link_props_mid = - jni_get_method_id(env, obj_cls, "getLinkProperties", - "(Landroid/net/Network;)Landroid/net/LinkProperties;"); - if (android_cm_link_props_mid == NULL) - goto cleanup; - - /* LinkProperties in API 21. */ - (*env)->DeleteLocalRef(env, obj_cls); - obj_cls = jni_get_class(env, "android/net/LinkProperties"); - if (obj_cls == NULL) - goto cleanup; - - /* getDnsServers in API 21. */ - android_lp_dns_servers_mid = jni_get_method_id(env, obj_cls, "getDnsServers", - "()Ljava/util/List;"); - if (android_lp_dns_servers_mid == NULL) - goto cleanup; - - /* getDomains in API 21. */ - android_lp_domains_mid = jni_get_method_id(env, obj_cls, "getDomains", - "()Ljava/lang/String;"); - if (android_lp_domains_mid == NULL) - goto cleanup; - - (*env)->DeleteLocalRef(env, obj_cls); - obj_cls = jni_get_class(env, "java/util/List"); - if (obj_cls == NULL) - goto cleanup; - - android_list_size_mid = jni_get_method_id(env, obj_cls, "size", "()I"); - if (android_list_size_mid == NULL) - goto cleanup; - - android_list_get_mid = jni_get_method_id(env, obj_cls, "get", - "(I)Ljava/lang/Object;"); - if (android_list_get_mid == NULL) - goto cleanup; - - (*env)->DeleteLocalRef(env, obj_cls); - obj_cls = jni_get_class(env, "java/net/InetAddress"); - if (obj_cls == NULL) - goto cleanup; - - android_ia_host_addr_mid = jni_get_method_id(env, obj_cls, "getHostAddress", - "()Ljava/lang/String;"); - if (android_ia_host_addr_mid == NULL) - goto cleanup; - - (*env)->DeleteLocalRef(env, obj_cls); - goto done; - -cleanup: - if (obj_cls != NULL) - (*env)->DeleteLocalRef(env, obj_cls); - - android_cm_active_net_mid = NULL; - android_cm_link_props_mid = NULL; - android_lp_dns_servers_mid = NULL; - android_lp_domains_mid = NULL; - android_list_size_mid = NULL; - android_list_get_mid = NULL; - android_ia_host_addr_mid = NULL; - -done: - if (need_detatch) - (*android_jvm)->DetachCurrentThread(android_jvm); - - return ret; -} - -int ares_library_android_initialized(void) -{ - if (android_jvm == NULL || android_connectivity_manager == NULL) - return ARES_ENOTINITIALIZED; - return ARES_SUCCESS; -} - -void ares_library_cleanup_android(void) -{ - JNIEnv *env = NULL; - int need_detatch = 0; - int res; - - if (android_jvm == NULL || android_connectivity_manager == NULL) - return; - - res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6); - if (res == JNI_EDETACHED) - { - env = NULL; - res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL); - need_detatch = 1; - } - if (res != JNI_OK || env == NULL) - return; - - android_cm_active_net_mid = NULL; - android_cm_link_props_mid = NULL; - android_lp_dns_servers_mid = NULL; - android_lp_domains_mid = NULL; - android_list_size_mid = NULL; - android_list_get_mid = NULL; - android_ia_host_addr_mid = NULL; - - (*env)->DeleteGlobalRef(env, android_connectivity_manager); - android_connectivity_manager = NULL; - - if (need_detatch) - (*android_jvm)->DetachCurrentThread(android_jvm); -} - -char **ares_get_android_server_list(size_t max_servers, - size_t *num_servers) -{ - JNIEnv *env = NULL; - jobject active_network = NULL; - jobject link_properties = NULL; - jobject server_list = NULL; - jobject server = NULL; - jstring str = NULL; - jint nserv; - const char *ch_server_address; - int res; - size_t i; - char **dns_list = NULL; - int need_detatch = 0; - - if (android_jvm == NULL || android_connectivity_manager == NULL || - max_servers == 0 || num_servers == NULL) - { - return NULL; - } - - if (android_cm_active_net_mid == NULL || android_cm_link_props_mid == NULL || - android_lp_dns_servers_mid == NULL || android_list_size_mid == NULL || - android_list_get_mid == NULL || android_ia_host_addr_mid == NULL) - { - return NULL; - } - - res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6); - if (res == JNI_EDETACHED) - { - env = NULL; - res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL); - need_detatch = 1; - } - if (res != JNI_OK || env == NULL) - goto done; - - /* JNI below is equivalent to this Java code. - import android.content.Context; - import android.net.ConnectivityManager; - import android.net.LinkProperties; - import android.net.Network; - import java.net.InetAddress; - import java.util.List; - - ConnectivityManager cm = (ConnectivityManager)this.getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - Network an = cm.getActiveNetwork(); - LinkProperties lp = cm.getLinkProperties(an); - List dns = lp.getDnsServers(); - for (InetAddress ia: dns) { - String ha = ia.getHostAddress(); - } - - Note: The JNI ConnectivityManager object and all method IDs were previously - initialized in ares_library_init_android. - */ - - active_network = (*env)->CallObjectMethod(env, android_connectivity_manager, - android_cm_active_net_mid); - if (active_network == NULL) - goto done; - - link_properties = - (*env)->CallObjectMethod(env, android_connectivity_manager, - android_cm_link_props_mid, active_network); - if (link_properties == NULL) - goto done; - - server_list = (*env)->CallObjectMethod(env, link_properties, - android_lp_dns_servers_mid); - if (server_list == NULL) - goto done; - - nserv = (*env)->CallIntMethod(env, server_list, android_list_size_mid); - if (nserv > (jint)max_servers) - nserv = (jint)max_servers; - if (nserv <= 0) - goto done; - *num_servers = (size_t)nserv; - - dns_list = ares_malloc(sizeof(*dns_list)*(*num_servers)); - for (i=0; i<*num_servers; i++) - { - server = (*env)->CallObjectMethod(env, server_list, android_list_get_mid, - (jint)i); - dns_list[i] = ares_malloc(64); - dns_list[i][0] = 0; - if (server == NULL) - { - continue; - } - str = (*env)->CallObjectMethod(env, server, android_ia_host_addr_mid); - ch_server_address = (*env)->GetStringUTFChars(env, str, 0); - strncpy(dns_list[i], ch_server_address, 64); - (*env)->ReleaseStringUTFChars(env, str, ch_server_address); - (*env)->DeleteLocalRef(env, str); - (*env)->DeleteLocalRef(env, server); - } - -done: - if ((*env)->ExceptionOccurred(env)) - (*env)->ExceptionClear(env); - - if (server_list != NULL) - (*env)->DeleteLocalRef(env, server_list); - if (link_properties != NULL) - (*env)->DeleteLocalRef(env, link_properties); - if (active_network != NULL) - (*env)->DeleteLocalRef(env, active_network); - - if (need_detatch) - (*android_jvm)->DetachCurrentThread(android_jvm); - return dns_list; -} - -char *ares_get_android_search_domains_list(void) -{ - JNIEnv *env = NULL; - jobject active_network = NULL; - jobject link_properties = NULL; - jstring domains = NULL; - const char *domain; - int res; - char *domain_list = NULL; - int need_detatch = 0; - - if (android_jvm == NULL || android_connectivity_manager == NULL) - { - return NULL; - } - - if (android_cm_active_net_mid == NULL || android_cm_link_props_mid == NULL || - android_lp_domains_mid == NULL) - { - return NULL; - } - - res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6); - if (res == JNI_EDETACHED) - { - env = NULL; - res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL); - need_detatch = 1; - } - if (res != JNI_OK || env == NULL) - goto done; - - /* JNI below is equivalent to this Java code. - import android.content.Context; - import android.net.ConnectivityManager; - import android.net.LinkProperties; - - ConnectivityManager cm = (ConnectivityManager)this.getApplicationContext() - .getSystemService(Context.CONNECTIVITY_SERVICE); - Network an = cm.getActiveNetwork(); - LinkProperties lp = cm.getLinkProperties(an); - String domains = lp.getDomains(); - for (String domain: domains.split(",")) { - String d = domain; - } - - Note: The JNI ConnectivityManager object and all method IDs were previously - initialized in ares_library_init_android. - */ - - active_network = (*env)->CallObjectMethod(env, android_connectivity_manager, - android_cm_active_net_mid); - if (active_network == NULL) - goto done; - - link_properties = - (*env)->CallObjectMethod(env, android_connectivity_manager, - android_cm_link_props_mid, active_network); - if (link_properties == NULL) - goto done; - - /* Get the domains. It is a common separated list of domains to search. */ - domains = (*env)->CallObjectMethod(env, link_properties, - android_lp_domains_mid); - if (domains == NULL) - goto done; - - /* Split on , */ - domain = (*env)->GetStringUTFChars(env, domains, 0); - domain_list = ares_strdup(domain); - (*env)->ReleaseStringUTFChars(env, domains, domain); - (*env)->DeleteLocalRef(env, domains); - -done: - if ((*env)->ExceptionOccurred(env)) - (*env)->ExceptionClear(env); - - if (link_properties != NULL) - (*env)->DeleteLocalRef(env, link_properties); - if (active_network != NULL) - (*env)->DeleteLocalRef(env, active_network); - - if (need_detatch) - (*android_jvm)->DetachCurrentThread(android_jvm); - return domain_list; -} -#else -/* warning: ISO C forbids an empty translation unit */ -typedef int dummy_make_iso_compilers_happy; -#endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_android.h nodejs-mozilla-12.22.12/deps/cares/src/ares_android.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_android.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_android.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -/* Copyright (C) 2017 by John Schember - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#ifndef __ARES_ANDROID_H__ -#define __ARES_ANDROID_H__ - -#if defined(ANDROID) || defined(__ANDROID__) - -char **ares_get_android_server_list(size_t max_servers, size_t *num_servers); -char *ares_get_android_search_domains_list(void); -void ares_library_cleanup_android(void); - -#endif - -#endif /* __ARES_ANDROID_H__ */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_cancel.c nodejs-mozilla-12.22.12/deps/cares/src/ares_cancel.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_cancel.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_cancel.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ - -/* Copyright (C) 2004 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. M.I.T. makes no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include - -#include "ares.h" -#include "ares_private.h" - -/* - * ares_cancel() cancels all ongoing requests/resolves that might be going on - * on the given channel. It does NOT kill the channel, use ares_destroy() for - * that. - */ -void ares_cancel(ares_channel channel) -{ - struct query *query; - struct list_node list_head_copy; - struct list_node* list_head; - struct list_node* list_node; - int i; - - if (!ares__is_list_empty(&(channel->all_queries))) - { - /* Swap list heads, so that only those queries which were present on entry - * into this function are cancelled. New queries added by callbacks of - * queries being cancelled will not be cancelled themselves. - */ - list_head = &(channel->all_queries); - list_head_copy.prev = list_head->prev; - list_head_copy.next = list_head->next; - list_head_copy.prev->next = &list_head_copy; - list_head_copy.next->prev = &list_head_copy; - list_head->prev = list_head; - list_head->next = list_head; - for (list_node = list_head_copy.next; list_node != &list_head_copy; ) - { - query = list_node->data; - list_node = list_node->next; /* since we're deleting the query */ - query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0); - ares__free_query(query); - } - } - if (!(channel->flags & ARES_FLAG_STAYOPEN) && ares__is_list_empty(&(channel->all_queries))) - { - if (channel->servers) - { - for (i = 0; i < channel->nservers; i++) - ares__close_sockets(channel, &channel->servers[i]); - } - } -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares__close_sockets.c nodejs-mozilla-12.22.12/deps/cares/src/ares__close_sockets.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares__close_sockets.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares__close_sockets.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include "ares.h" -#include "ares_private.h" - -void ares__close_sockets(ares_channel channel, struct server_state *server) -{ - struct send_request *sendreq; - - /* Free all pending output buffers. */ - while (server->qhead) - { - /* Advance server->qhead; pull out query as we go. */ - sendreq = server->qhead; - server->qhead = sendreq->next; - if (sendreq->data_storage != NULL) - ares_free(sendreq->data_storage); - ares_free(sendreq); - } - server->qtail = NULL; - - /* Reset any existing input buffer. */ - if (server->tcp_buffer) - ares_free(server->tcp_buffer); - server->tcp_buffer = NULL; - server->tcp_lenbuf_pos = 0; - - /* Reset brokenness */ - server->is_broken = 0; - - /* Close the TCP and UDP sockets. */ - if (server->tcp_socket != ARES_SOCKET_BAD) - { - SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0); - ares__close_socket(channel, server->tcp_socket); - server->tcp_socket = ARES_SOCKET_BAD; - server->tcp_connection_generation = ++channel->tcp_connection_generation; - } - if (server->udp_socket != ARES_SOCKET_BAD) - { - SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0); - ares__close_socket(channel, server->udp_socket); - server->udp_socket = ARES_SOCKET_BAD; - } -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_create_query.c nodejs-mozilla-12.22.12/deps/cares/src/ares_create_query.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_create_query.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_create_query.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,206 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_private.h" - -#ifndef T_OPT -# define T_OPT 41 /* EDNS0 option (meta-RR) */ -#endif - -/* Header format, from RFC 1035: - * 1 1 1 1 1 1 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * | ID | - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * |QR| Opcode |AA|TC|RD|RA| Z | RCODE | - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * | QDCOUNT | - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * | ANCOUNT | - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * | NSCOUNT | - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * | ARCOUNT | - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * - * AA, TC, RA, and RCODE are only set in responses. Brief description - * of the remaining fields: - * ID Identifier to match responses with queries - * QR Query (0) or response (1) - * Opcode For our purposes, always QUERY - * RD Recursion desired - * Z Reserved (zero) - * QDCOUNT Number of queries - * ANCOUNT Number of answers - * NSCOUNT Number of name server records - * ARCOUNT Number of additional records - * - * Question format, from RFC 1035: - * 1 1 1 1 1 1 - * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * | | - * / QNAME / - * / / - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * | QTYPE | - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * | QCLASS | - * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - * - * The query name is encoded as a series of labels, each represented - * as a one-byte length (maximum 63) followed by the text of the - * label. The list is terminated by a label of length zero (which can - * be thought of as the root domain). - */ - -int ares_create_query(const char *name, int dnsclass, int type, - unsigned short id, int rd, unsigned char **bufp, - int *buflenp, int max_udp_size) -{ - size_t len; - unsigned char *q; - const char *p; - size_t buflen; - unsigned char *buf; - - /* Set our results early, in case we bail out early with an error. */ - *buflenp = 0; - *bufp = NULL; - - /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ - if (ares__is_onion_domain(name)) - return ARES_ENOTFOUND; - - /* Allocate a memory area for the maximum size this packet might need. +2 - * is for the length byte and zero termination if no dots or ecscaping is - * used. - */ - len = strlen(name) + 2 + HFIXEDSZ + QFIXEDSZ + - (max_udp_size ? EDNSFIXEDSZ : 0); - buf = ares_malloc(len); - if (!buf) - return ARES_ENOMEM; - - /* Set up the header. */ - q = buf; - memset(q, 0, HFIXEDSZ); - DNS_HEADER_SET_QID(q, id); - DNS_HEADER_SET_OPCODE(q, QUERY); - if (rd) { - DNS_HEADER_SET_RD(q, 1); - } - else { - DNS_HEADER_SET_RD(q, 0); - } - DNS_HEADER_SET_QDCOUNT(q, 1); - - if (max_udp_size) { - DNS_HEADER_SET_ARCOUNT(q, 1); - } - - /* A name of "." is a screw case for the loop below, so adjust it. */ - if (strcmp(name, ".") == 0) - name++; - - /* Start writing out the name after the header. */ - q += HFIXEDSZ; - while (*name) - { - if (*name == '.') { - ares_free (buf); - return ARES_EBADNAME; - } - - /* Count the number of bytes in this label. */ - len = 0; - for (p = name; *p && *p != '.'; p++) - { - if (*p == '\\' && *(p + 1) != 0) - p++; - len++; - } - if (len > MAXLABEL) { - ares_free (buf); - return ARES_EBADNAME; - } - - /* Encode the length and copy the data. */ - *q++ = (unsigned char)len; - for (p = name; *p && *p != '.'; p++) - { - if (*p == '\\' && *(p + 1) != 0) - p++; - *q++ = *p; - } - - /* Go to the next label and repeat, unless we hit the end. */ - if (!*p) - break; - name = p + 1; - } - - /* Add the zero-length label at the end. */ - *q++ = 0; - - /* Finish off the question with the type and class. */ - DNS_QUESTION_SET_TYPE(q, type); - DNS_QUESTION_SET_CLASS(q, dnsclass); - - q += QFIXEDSZ; - if (max_udp_size) - { - memset(q, 0, EDNSFIXEDSZ); - q++; - DNS_RR_SET_TYPE(q, T_OPT); - DNS_RR_SET_CLASS(q, max_udp_size); - q += (EDNSFIXEDSZ-1); - } - buflen = (q - buf); - - /* Reject names that are longer than the maximum of 255 bytes that's - * specified in RFC 1035 ("To simplify implementations, the total length of - * a domain name (i.e., label octets and label length octets) is restricted - * to 255 octets or less."). */ - if (buflen > (size_t)(MAXCDNAME + HFIXEDSZ + QFIXEDSZ + - (max_udp_size ? EDNSFIXEDSZ : 0))) { - ares_free (buf); - return ARES_EBADNAME; - } - - /* we know this fits in an int at this point */ - *buflenp = (int) buflen; - *bufp = buf; - - return ARES_SUCCESS; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_data.c nodejs-mozilla-12.22.12/deps/cares/src/ares_data.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_data.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_data.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,222 +0,0 @@ - -/* Copyright (C) 2009-2013 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - - -#include "ares_setup.h" - -#include - -#include "ares.h" -#include "ares_data.h" -#include "ares_private.h" - - -/* -** ares_free_data() - c-ares external API function. -** -** This function must be used by the application to free data memory that -** has been internally allocated by some c-ares function and for which a -** pointer has already been returned to the calling application. The list -** of c-ares functions returning pointers that must be free'ed using this -** function is: -** -** ares_get_servers() -** ares_parse_srv_reply() -** ares_parse_txt_reply() -*/ - -void ares_free_data(void *dataptr) -{ - while (dataptr != NULL) { - struct ares_data *ptr; - void *next_data = NULL; - -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:1684) - /* 1684: conversion from pointer to same-sized integral type */ -#endif - - ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data)); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif - - if (ptr->mark != ARES_DATATYPE_MARK) - return; - - switch (ptr->type) - { - case ARES_DATATYPE_MX_REPLY: - - if (ptr->data.mx_reply.next) - next_data = ptr->data.mx_reply.next; - if (ptr->data.mx_reply.host) - ares_free(ptr->data.mx_reply.host); - break; - - case ARES_DATATYPE_SRV_REPLY: - - if (ptr->data.srv_reply.next) - next_data = ptr->data.srv_reply.next; - if (ptr->data.srv_reply.host) - ares_free(ptr->data.srv_reply.host); - break; - - case ARES_DATATYPE_TXT_REPLY: - case ARES_DATATYPE_TXT_EXT: - - if (ptr->data.txt_reply.next) - next_data = ptr->data.txt_reply.next; - if (ptr->data.txt_reply.txt) - ares_free(ptr->data.txt_reply.txt); - break; - - case ARES_DATATYPE_ADDR_NODE: - - if (ptr->data.addr_node.next) - next_data = ptr->data.addr_node.next; - break; - - case ARES_DATATYPE_ADDR_PORT_NODE: - - if (ptr->data.addr_port_node.next) - next_data = ptr->data.addr_port_node.next; - break; - - case ARES_DATATYPE_NAPTR_REPLY: - - if (ptr->data.naptr_reply.next) - next_data = ptr->data.naptr_reply.next; - if (ptr->data.naptr_reply.flags) - ares_free(ptr->data.naptr_reply.flags); - if (ptr->data.naptr_reply.service) - ares_free(ptr->data.naptr_reply.service); - if (ptr->data.naptr_reply.regexp) - ares_free(ptr->data.naptr_reply.regexp); - if (ptr->data.naptr_reply.replacement) - ares_free(ptr->data.naptr_reply.replacement); - break; - - case ARES_DATATYPE_SOA_REPLY: - if (ptr->data.soa_reply.nsname) - ares_free(ptr->data.soa_reply.nsname); - if (ptr->data.soa_reply.hostmaster) - ares_free(ptr->data.soa_reply.hostmaster); - break; - - default: - return; - } - - ares_free(ptr); - dataptr = next_data; - } -} - - -/* -** ares_malloc_data() - c-ares internal helper function. -** -** This function allocates memory for a c-ares private ares_data struct -** for the specified ares_datatype, initializes c-ares private fields -** and zero initializes those which later might be used from the public -** API. It returns an interior pointer which can be passed by c-ares -** functions to the calling application, and that must be free'ed using -** c-ares external API function ares_free_data(). -*/ - -void *ares_malloc_data(ares_datatype type) -{ - struct ares_data *ptr; - - ptr = ares_malloc(sizeof(struct ares_data)); - if (!ptr) - return NULL; - - switch (type) - { - case ARES_DATATYPE_MX_REPLY: - ptr->data.mx_reply.next = NULL; - ptr->data.mx_reply.host = NULL; - ptr->data.mx_reply.priority = 0; - break; - - case ARES_DATATYPE_SRV_REPLY: - ptr->data.srv_reply.next = NULL; - ptr->data.srv_reply.host = NULL; - ptr->data.srv_reply.priority = 0; - ptr->data.srv_reply.weight = 0; - ptr->data.srv_reply.port = 0; - break; - - case ARES_DATATYPE_TXT_EXT: - ptr->data.txt_ext.record_start = 0; - /* FALLTHROUGH */ - - case ARES_DATATYPE_TXT_REPLY: - ptr->data.txt_reply.next = NULL; - ptr->data.txt_reply.txt = NULL; - ptr->data.txt_reply.length = 0; - break; - - case ARES_DATATYPE_ADDR_NODE: - ptr->data.addr_node.next = NULL; - ptr->data.addr_node.family = 0; - memset(&ptr->data.addr_node.addrV6, 0, - sizeof(ptr->data.addr_node.addrV6)); - break; - - case ARES_DATATYPE_ADDR_PORT_NODE: - ptr->data.addr_port_node.next = NULL; - ptr->data.addr_port_node.family = 0; - ptr->data.addr_port_node.udp_port = 0; - ptr->data.addr_port_node.tcp_port = 0; - memset(&ptr->data.addr_port_node.addrV6, 0, - sizeof(ptr->data.addr_port_node.addrV6)); - break; - - case ARES_DATATYPE_NAPTR_REPLY: - ptr->data.naptr_reply.next = NULL; - ptr->data.naptr_reply.flags = NULL; - ptr->data.naptr_reply.service = NULL; - ptr->data.naptr_reply.regexp = NULL; - ptr->data.naptr_reply.replacement = NULL; - ptr->data.naptr_reply.order = 0; - ptr->data.naptr_reply.preference = 0; - break; - - case ARES_DATATYPE_SOA_REPLY: - ptr->data.soa_reply.nsname = NULL; - ptr->data.soa_reply.hostmaster = NULL; - ptr->data.soa_reply.serial = 0; - ptr->data.soa_reply.refresh = 0; - ptr->data.soa_reply.retry = 0; - ptr->data.soa_reply.expire = 0; - ptr->data.soa_reply.minttl = 0; - break; - - default: - ares_free(ptr); - return NULL; - } - - ptr->mark = ARES_DATATYPE_MARK; - ptr->type = type; - - return &ptr->data; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_data.h nodejs-mozilla-12.22.12/deps/cares/src/ares_data.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_data.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_data.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ - -/* Copyright (C) 2009-2013 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -typedef enum { - ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */ - ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */ - ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */ - ARES_DATATYPE_TXT_EXT, /* struct ares_txt_ext - introduced in 1.11.0 */ - ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */ - ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */ - ARES_DATATYPE_NAPTR_REPLY,/* struct ares_naptr_reply - introduced in 1.7.6 */ - ARES_DATATYPE_SOA_REPLY, /* struct ares_soa_reply - introduced in 1.9.0 */ -#if 0 - ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */ - ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */ - ARES_DATATYPE_HOSTENT, /* struct hostent */ - ARES_DATATYPE_OPTIONS, /* struct ares_options */ -#endif - ARES_DATATYPE_ADDR_PORT_NODE, /* struct ares_addr_port_node - introduced in 1.11.0 */ - ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */ -} ares_datatype; - -#define ARES_DATATYPE_MARK 0xbead - -/* - * ares_data struct definition is internal to c-ares and shall not - * be exposed by the public API in order to allow future changes - * and extensions to it without breaking ABI. This will be used - * internally by c-ares as the container of multiple types of data - * dynamically allocated for which a reference will be returned - * to the calling application. - * - * c-ares API functions returning a pointer to c-ares internally - * allocated data will actually be returning an interior pointer - * into this ares_data struct. - * - * All this is 'invisible' to the calling application, the only - * requirement is that this kind of data must be free'ed by the - * calling application using ares_free_data() with the pointer - * it has received from a previous c-ares function call. - */ - -struct ares_data { - ares_datatype type; /* Actual data type identifier. */ - unsigned int mark; /* Private ares_data signature. */ - union { - struct ares_txt_reply txt_reply; - struct ares_txt_ext txt_ext; - struct ares_srv_reply srv_reply; - struct ares_addr_node addr_node; - struct ares_addr_port_node addr_port_node; - struct ares_mx_reply mx_reply; - struct ares_naptr_reply naptr_reply; - struct ares_soa_reply soa_reply; - } data; -}; - -void *ares_malloc_data(ares_datatype type); - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_destroy.c nodejs-mozilla-12.22.12/deps/cares/src/ares_destroy.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_destroy.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_destroy.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004-2011 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include - -#include "ares.h" -#include "ares_private.h" - -void ares_destroy_options(struct ares_options *options) -{ - int i; - - if(options->servers) - ares_free(options->servers); - for (i = 0; i < options->ndomains; i++) - ares_free(options->domains[i]); - if(options->domains) - ares_free(options->domains); - if(options->sortlist) - ares_free(options->sortlist); - if(options->lookups) - ares_free(options->lookups); - if(options->resolvconf_path) - ares_free(options->resolvconf_path); -} - -void ares_destroy(ares_channel channel) -{ - int i; - struct query *query; - struct list_node* list_head; - struct list_node* list_node; - - if (!channel) - return; - - list_head = &(channel->all_queries); - for (list_node = list_head->next; list_node != list_head; ) - { - query = list_node->data; - list_node = list_node->next; /* since we're deleting the query */ - query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0); - ares__free_query(query); - } -#ifndef NDEBUG - /* Freeing the query should remove it from all the lists in which it sits, - * so all query lists should be empty now. - */ - assert(ares__is_list_empty(&(channel->all_queries))); - for (i = 0; i < ARES_QID_TABLE_SIZE; i++) - { - assert(ares__is_list_empty(&(channel->queries_by_qid[i]))); - } - for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) - { - assert(ares__is_list_empty(&(channel->queries_by_timeout[i]))); - } -#endif - - ares__destroy_servers_state(channel); - - if (channel->domains) { - for (i = 0; i < channel->ndomains; i++) - ares_free(channel->domains[i]); - ares_free(channel->domains); - } - - if(channel->sortlist) - ares_free(channel->sortlist); - - if (channel->lookups) - ares_free(channel->lookups); - - if (channel->resolvconf_path) - ares_free(channel->resolvconf_path); - - ares_free(channel); -} - -void ares__destroy_servers_state(ares_channel channel) -{ - struct server_state *server; - int i; - - if (channel->servers) - { - for (i = 0; i < channel->nservers; i++) - { - server = &channel->servers[i]; - ares__close_sockets(channel, server); - assert(ares__is_list_empty(&server->queries_to_server)); - } - ares_free(channel->servers); - channel->servers = NULL; - } - channel->nservers = -1; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_dns.h nodejs-mozilla-12.22.12/deps/cares/src/ares_dns.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_dns.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_dns.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -#ifndef HEADER_CARES_DNS_H -#define HEADER_CARES_DNS_H - -/* Copyright 1998, 2011 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -/* - * Macro DNS__16BIT reads a network short (16 bit) given in network - * byte order, and returns its value as an unsigned short. - */ -#define DNS__16BIT(p) ((unsigned short)((unsigned int) 0xffff & \ - (((unsigned int)((unsigned char)(p)[0]) << 8U) | \ - ((unsigned int)((unsigned char)(p)[1]))))) - -/* - * Macro DNS__32BIT reads a network long (32 bit) given in network - * byte order, and returns its value as an unsigned int. - */ -#define DNS__32BIT(p) ((unsigned int) \ - (((unsigned int)((unsigned char)(p)[0]) << 24U) | \ - ((unsigned int)((unsigned char)(p)[1]) << 16U) | \ - ((unsigned int)((unsigned char)(p)[2]) << 8U) | \ - ((unsigned int)((unsigned char)(p)[3])))) - -#define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \ - ((p)[1] = (unsigned char)((v) & 0xff))) -#define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \ - ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \ - ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \ - ((p)[3] = (unsigned char)((v) & 0xff))) - -#if 0 -/* we cannot use this approach on systems where we can't access 16/32 bit - data on un-aligned addresses */ -#define DNS__16BIT(p) ntohs(*(unsigned short*)(p)) -#define DNS__32BIT(p) ntohl(*(unsigned long*)(p)) -#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v) -#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v) -#endif - -/* Macros for parsing a DNS header */ -#define DNS_HEADER_QID(h) DNS__16BIT(h) -#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1) -#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf) -#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1) -#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1) -#define DNS_HEADER_RD(h) ((h)[2] & 0x1) -#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1) -#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7) -#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf) -#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4) -#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6) -#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8) -#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10) - -/* Macros for constructing a DNS header */ -#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v) -#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7)) -#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3)) -#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2)) -#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1)) -#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1)) -#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7)) -#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4)) -#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf)) -#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v) -#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v) -#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v) -#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v) - -/* Macros for parsing the fixed part of a DNS question */ -#define DNS_QUESTION_TYPE(q) DNS__16BIT(q) -#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2) - -/* Macros for constructing the fixed part of a DNS question */ -#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v) -#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v) - -/* Macros for parsing the fixed part of a DNS resource record */ -#define DNS_RR_TYPE(r) DNS__16BIT(r) -#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2) -#define DNS_RR_TTL(r) DNS__32BIT((r) + 4) -#define DNS_RR_LEN(r) DNS__16BIT((r) + 8) - -/* Macros for constructing the fixed part of a DNS resource record */ -#define DNS_RR_SET_TYPE(r, v) DNS__SET16BIT(r, v) -#define DNS_RR_SET_CLASS(r, v) DNS__SET16BIT((r) + 2, v) -#define DNS_RR_SET_TTL(r, v) DNS__SET32BIT((r) + 4, v) -#define DNS_RR_SET_LEN(r, v) DNS__SET16BIT((r) + 8, v) - -#endif /* HEADER_CARES_DNS_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_expand_name.c nodejs-mozilla-12.22.12/deps/cares/src/ares_expand_name.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_expand_name.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_expand_name.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,209 +0,0 @@ - -/* Copyright 1998, 2011 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_nowarn.h" -#include "ares_private.h" /* for the memdebug */ - -/* Maximum number of indirections allowed for a name */ -#define MAX_INDIRS 50 - -static int name_length(const unsigned char *encoded, const unsigned char *abuf, - int alen); - -/* Expand an RFC1035-encoded domain name given by encoded. The - * containing message is given by abuf and alen. The result given by - * *s, which is set to a NUL-terminated allocated buffer. *enclen is - * set to the length of the encoded name (not the length of the - * expanded name; the goal is to tell the caller how many bytes to - * move forward to get past the encoded name). - * - * In the simple case, an encoded name is a series of labels, each - * composed of a one-byte length (limited to values between 0 and 63 - * inclusive) followed by the label contents. The name is terminated - * by a zero-length label. - * - * In the more complicated case, a label may be terminated by an - * indirection pointer, specified by two bytes with the high bits of - * the first byte (corresponding to INDIR_MASK) set to 11. With the - * two high bits of the first byte stripped off, the indirection - * pointer gives an offset from the beginning of the containing - * message with more labels to decode. Indirection can happen an - * arbitrary number of times, so we have to detect loops. - * - * Since the expanded name uses '.' as a label separator, we use - * backslashes to escape periods or backslashes in the expanded name. - */ - -int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, - int alen, char **s, long *enclen) -{ - int len, indir = 0; - char *q; - const unsigned char *p; - union { - ares_ssize_t sig; - size_t uns; - } nlen; - - nlen.sig = name_length(encoded, abuf, alen); - if (nlen.sig < 0) - return ARES_EBADNAME; - - *s = ares_malloc(nlen.uns + 1); - if (!*s) - return ARES_ENOMEM; - q = *s; - - if (nlen.uns == 0) { - /* RFC2181 says this should be ".": the root of the DNS tree. - * Since this function strips trailing dots though, it becomes "" - */ - q[0] = '\0'; - - /* indirect root label (like 0xc0 0x0c) is 2 bytes long (stupid, but - valid) */ - if ((*encoded & INDIR_MASK) == INDIR_MASK) - *enclen = 2L; - else - *enclen = 1L; /* the caller should move one byte to get past this */ - - return ARES_SUCCESS; - } - - /* No error-checking necessary; it was all done by name_length(). */ - p = encoded; - while (*p) - { - if ((*p & INDIR_MASK) == INDIR_MASK) - { - if (!indir) - { - *enclen = aresx_uztosl(p + 2U - encoded); - indir = 1; - } - p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1)); - } - else - { - len = *p; - p++; - while (len--) - { - if (*p == '.' || *p == '\\') - *q++ = '\\'; - *q++ = *p; - p++; - } - *q++ = '.'; - } - } - if (!indir) - *enclen = aresx_uztosl(p + 1U - encoded); - - /* Nuke the trailing period if we wrote one. */ - if (q > *s) - *(q - 1) = 0; - else - *q = 0; /* zero terminate; LCOV_EXCL_LINE: empty names exit above */ - - return ARES_SUCCESS; -} - -/* Return the length of the expansion of an encoded domain name, or - * -1 if the encoding is invalid. - */ -static int name_length(const unsigned char *encoded, const unsigned char *abuf, - int alen) -{ - int n = 0, offset, indir = 0, top; - - /* Allow the caller to pass us abuf + alen and have us check for it. */ - if (encoded >= abuf + alen) - return -1; - - while (*encoded) - { - top = (*encoded & INDIR_MASK); - if (top == INDIR_MASK) - { - /* Check the offset and go there. */ - if (encoded + 1 >= abuf + alen) - return -1; - offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1); - if (offset >= alen) - return -1; - encoded = abuf + offset; - - /* If we've seen more indirects than the message length, - * then there's a loop. - */ - ++indir; - if (indir > alen || indir > MAX_INDIRS) - return -1; - } - else if (top == 0x00) - { - offset = *encoded; - if (encoded + offset + 1 >= abuf + alen) - return -1; - encoded++; - while (offset--) - { - n += (*encoded == '.' || *encoded == '\\') ? 2 : 1; - encoded++; - } - n++; - } - else - { - /* RFC 1035 4.1.4 says other options (01, 10) for top 2 - * bits are reserved. - */ - return -1; - } - } - - /* If there were any labels at all, then the number of dots is one - * less than the number of labels, so subtract one. - */ - return (n) ? n - 1 : n; -} - -/* Like ares_expand_name but returns EBADRESP in case of invalid input. */ -int ares__expand_name_for_response(const unsigned char *encoded, - const unsigned char *abuf, int alen, - char **s, long *enclen) -{ - int status = ares_expand_name(encoded, abuf, alen, s, enclen); - if (status == ARES_EBADNAME) - status = ARES_EBADRESP; - return status; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_expand_string.c nodejs-mozilla-12.22.12/deps/cares/src/ares_expand_string.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_expand_string.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_expand_string.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif - -#include "ares.h" -#include "ares_private.h" /* for the memdebug */ - -/* Simply decodes a length-encoded character string. The first byte of the - * input is the length of the string to be returned and the bytes thereafter - * are the characters of the string. The returned result will be NULL - * terminated. - */ -int ares_expand_string(const unsigned char *encoded, - const unsigned char *abuf, - int alen, - unsigned char **s, - long *enclen) -{ - unsigned char *q; - union { - ares_ssize_t sig; - size_t uns; - } elen; - - if (encoded == abuf+alen) - return ARES_EBADSTR; - - elen.uns = *encoded; - if (encoded+elen.sig+1 > abuf+alen) - return ARES_EBADSTR; - - encoded++; - - *s = ares_malloc(elen.uns+1); - if (*s == NULL) - return ARES_ENOMEM; - q = *s; - strncpy((char *)q, (char *)encoded, elen.uns); - q[elen.uns] = '\0'; - - *s = q; - - *enclen = (long)(elen.sig+1); - - return ARES_SUCCESS; -} - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_fds.c nodejs-mozilla-12.22.12/deps/cares/src/ares_fds.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_fds.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_fds.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include "ares.h" -#include "ares_nowarn.h" -#include "ares_private.h" - -int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds) -{ - struct server_state *server; - ares_socket_t nfds; - int i; - - /* Are there any active queries? */ - int active_queries = !ares__is_list_empty(&(channel->all_queries)); - - nfds = 0; - for (i = 0; i < channel->nservers; i++) - { - server = &channel->servers[i]; - /* We only need to register interest in UDP sockets if we have - * outstanding queries. - */ - if (active_queries && server->udp_socket != ARES_SOCKET_BAD) - { - FD_SET(server->udp_socket, read_fds); - if (server->udp_socket >= nfds) - nfds = server->udp_socket + 1; - } - /* We always register for TCP events, because we want to know - * when the other side closes the connection, so we don't waste - * time trying to use a broken connection. - */ - if (server->tcp_socket != ARES_SOCKET_BAD) - { - FD_SET(server->tcp_socket, read_fds); - if (server->qhead) - FD_SET(server->tcp_socket, write_fds); - if (server->tcp_socket >= nfds) - nfds = server->tcp_socket + 1; - } - } - return (int)nfds; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_freeaddrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/ares_freeaddrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_freeaddrinfo.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_freeaddrinfo.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2019 by Andrew Selivanov - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETDB_H -# include -#endif - -#include "ares.h" -#include "ares_private.h" - -void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *head) -{ - struct ares_addrinfo_cname *current; - while (head) - { - current = head; - head = head->next; - ares_free(current->alias); - ares_free(current->name); - ares_free(current); - } -} - -void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *head) -{ - struct ares_addrinfo_node *current; - while (head) - { - current = head; - head = head->ai_next; - ares_free(current->ai_addr); - ares_free(current); - } -} - -void ares_freeaddrinfo(struct ares_addrinfo *ai) -{ - ares__freeaddrinfo_cnames(ai->cnames); - ares__freeaddrinfo_nodes(ai->nodes); - ares_free(ai); -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_free_hostent.c nodejs-mozilla-12.22.12/deps/cares/src/ares_free_hostent.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_free_hostent.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_free_hostent.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETDB_H -#include -#endif - -#include "ares.h" -#include "ares_private.h" /* for memdebug */ - -void ares_free_hostent(struct hostent *host) -{ - char **p; - - if (!host) - return; - - ares_free((char *)(host->h_name)); - for (p = host->h_aliases; *p; p++) - ares_free(*p); - ares_free(host->h_aliases); - ares_free(host->h_addr_list[0]); /* no matter if there is one or many entries, - there is only one malloc for all of them */ - ares_free(host->h_addr_list); - ares_free(host); -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_free_string.c nodejs-mozilla-12.22.12/deps/cares/src/ares_free_string.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_free_string.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_free_string.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ - -/* Copyright 2000 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include "ares.h" -#include "ares_private.h" - -void ares_free_string(void *str) -{ - ares_free(str); -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_getaddrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/ares_getaddrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_getaddrinfo.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_getaddrinfo.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,764 +0,0 @@ - -/* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology. - * Copyright (C) 2017 - 2018 by Christian Ammer - * Copyright (C) 2019 by Andrew Selivanov - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_GETSERVBYNAME_R -# if !defined(GETSERVBYNAME_R_ARGS) || \ - (GETSERVBYNAME_R_ARGS < 4) || (GETSERVBYNAME_R_ARGS > 6) -# error "you MUST specifiy a valid number of arguments for getservbyname_r" -# endif -#endif - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_STRINGS_H -#include -#endif -#include - -#ifdef HAVE_LIMITS_H -#include -#endif - -#include "ares.h" -#include "bitncmp.h" -#include "ares_private.h" - -#ifdef WATT32 -#undef WIN32 -#endif -#ifdef WIN32 -# include "ares_platform.h" -#endif - -struct host_query -{ - ares_channel channel; - char *name; - unsigned short port; /* in host order */ - ares_addrinfo_callback callback; - void *arg; - struct ares_addrinfo_hints hints; - int sent_family; /* this family is what was is being used */ - int timeouts; /* number of timeouts we saw for this request */ - const char *remaining_lookups; /* types of lookup we need to perform ("fb" by - default, file and dns respectively) */ - struct ares_addrinfo *ai; /* store results between lookups */ - int remaining; /* number of DNS answers waiting for */ - int next_domain; /* next search domain to try */ -}; - -static const struct ares_addrinfo_hints default_hints = { - 0, /* ai_flags */ - AF_UNSPEC, /* ai_family */ - 0, /* ai_socktype */ - 0, /* ai_protocol */ -}; - -static const struct ares_addrinfo_cname empty_addrinfo_cname = { - INT_MAX, /* ttl */ - NULL, /* alias */ - NULL, /* name */ - NULL, /* next */ -}; - -static const struct ares_addrinfo_node empty_addrinfo_node = { - 0, /* ai_ttl */ - 0, /* ai_flags */ - 0, /* ai_family */ - 0, /* ai_socktype */ - 0, /* ai_protocol */ - 0, /* ai_addrlen */ - NULL, /* ai_addr */ - NULL /* ai_next */ -}; - -static const struct ares_addrinfo empty_addrinfo = { - NULL, /* cnames */ - NULL /* nodes */ -}; - -/* forward declarations */ -static void host_callback(void *arg, int status, int timeouts, - unsigned char *abuf, int alen); -static int as_is_first(const struct host_query *hquery); -static int next_dns_lookup(struct host_query *hquery); - -struct ares_addrinfo_cname *ares__malloc_addrinfo_cname() -{ - struct ares_addrinfo_cname *cname = ares_malloc(sizeof(struct ares_addrinfo_cname)); - if (!cname) - return NULL; - - *cname = empty_addrinfo_cname; - return cname; -} - -struct ares_addrinfo_cname *ares__append_addrinfo_cname(struct ares_addrinfo_cname **head) -{ - struct ares_addrinfo_cname *tail = ares__malloc_addrinfo_cname(); - struct ares_addrinfo_cname *last = *head; - if (!last) - { - *head = tail; - return tail; - } - - while (last->next) - { - last = last->next; - } - - last->next = tail; - return tail; -} - -void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head, - struct ares_addrinfo_cname *tail) -{ - struct ares_addrinfo_cname *last = *head; - if (!last) - { - *head = tail; - return; - } - - while (last->next) - { - last = last->next; - } - - last->next = tail; -} - -struct ares_addrinfo *ares__malloc_addrinfo() -{ - struct ares_addrinfo *ai = ares_malloc(sizeof(struct ares_addrinfo)); - if (!ai) - return NULL; - - *ai = empty_addrinfo; - return ai; -} - -struct ares_addrinfo_node *ares__malloc_addrinfo_node() -{ - struct ares_addrinfo_node *node = - ares_malloc(sizeof(struct ares_addrinfo_node)); - if (!node) - return NULL; - - *node = empty_addrinfo_node; - return node; -} - -/* Allocate new addrinfo and append to the tail. */ -struct ares_addrinfo_node *ares__append_addrinfo_node(struct ares_addrinfo_node **head) -{ - struct ares_addrinfo_node *tail = ares__malloc_addrinfo_node(); - struct ares_addrinfo_node *last = *head; - if (!last) - { - *head = tail; - return tail; - } - - while (last->ai_next) - { - last = last->ai_next; - } - - last->ai_next = tail; - return tail; -} - -void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head, - struct ares_addrinfo_node *tail) -{ - struct ares_addrinfo_node *last = *head; - if (!last) - { - *head = tail; - return; - } - - while (last->ai_next) - { - last = last->ai_next; - } - - last->ai_next = tail; -} - -/* Resolve service name into port number given in host byte order. - * If not resolved, return 0. - */ -static unsigned short lookup_service(const char *service, int flags) -{ - const char *proto; - struct servent *sep; -#ifdef HAVE_GETSERVBYNAME_R - struct servent se; - char tmpbuf[4096]; -#endif - - if (service) - { - if (flags & ARES_NI_UDP) - proto = "udp"; - else if (flags & ARES_NI_SCTP) - proto = "sctp"; - else if (flags & ARES_NI_DCCP) - proto = "dccp"; - else - proto = "tcp"; -#ifdef HAVE_GETSERVBYNAME_R - memset(&se, 0, sizeof(se)); - sep = &se; - memset(tmpbuf, 0, sizeof(tmpbuf)); -#if GETSERVBYNAME_R_ARGS == 6 - if (getservbyname_r(service, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), - &sep) != 0) - sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */ -#elif GETSERVBYNAME_R_ARGS == 5 - sep = - getservbyname_r(service, proto, &se, (void *)tmpbuf, sizeof(tmpbuf)); -#elif GETSERVBYNAME_R_ARGS == 4 - if (getservbyname_r(service, proto, &se, (void *)tmpbuf) != 0) - sep = NULL; -#else - /* Lets just hope the OS uses TLS! */ - sep = getservbyname(service, proto); -#endif -#else - /* Lets just hope the OS uses TLS! */ -#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) - sep = getservbyname(service, (char *)proto); -#else - sep = getservbyname(service, proto); -#endif -#endif - return (sep ? ntohs((unsigned short)sep->s_port) : 0); - } - return 0; -} - -/* If the name looks like an IP address or an error occured, - * fake up a host entry, end the query immediately, and return true. - * Otherwise return false. - */ -static int fake_addrinfo(const char *name, - unsigned short port, - const struct ares_addrinfo_hints *hints, - struct ares_addrinfo *ai, - ares_addrinfo_callback callback, - void *arg) -{ - struct ares_addrinfo_cname *cname; - struct ares_addrinfo_node *node; - ares_sockaddr addr; - size_t addrlen; - int result = 0; - int family = hints->ai_family; - if (family == AF_INET || family == AF_INET6 || family == AF_UNSPEC) - { - /* It only looks like an IP address if it's all numbers and dots. */ - int numdots = 0, valid = 1; - const char *p; - for (p = name; *p; p++) - { - if (!ISDIGIT(*p) && *p != '.') - { - valid = 0; - break; - } - else if (*p == '.') - { - numdots++; - } - } - - memset(&addr, 0, sizeof(addr)); - - /* if we don't have 3 dots, it is illegal - * (although inet_pton doesn't think so). - */ - if (numdots != 3 || !valid) - result = 0; - else - result = - (ares_inet_pton(AF_INET, name, &addr.sa4.sin_addr) < 1 ? 0 : 1); - - if (result) - { - family = addr.sa.sa_family = AF_INET; - addr.sa4.sin_port = htons(port); - addrlen = sizeof(addr.sa4); - } - } - - if (family == AF_INET6 || family == AF_UNSPEC) - { - result = - (ares_inet_pton(AF_INET6, name, &addr.sa6.sin6_addr) < 1 ? 0 : 1); - addr.sa6.sin6_family = AF_INET6; - addr.sa6.sin6_port = htons(port); - addrlen = sizeof(addr.sa6); - } - - if (!result) - return 0; - - node = ares__malloc_addrinfo_node(); - if (!node) - { - ares_freeaddrinfo(ai); - callback(arg, ARES_ENOMEM, 0, NULL); - return 1; - } - - ai->nodes = node; - - node->ai_addr = ares_malloc(addrlen); - if (!node->ai_addr) - { - ares_freeaddrinfo(ai); - callback(arg, ARES_ENOMEM, 0, NULL); - return 1; - } - - node->ai_addrlen = (unsigned int)addrlen; - node->ai_family = addr.sa.sa_family; - if (addr.sa.sa_family == AF_INET) - memcpy(node->ai_addr, &addr.sa4, sizeof(addr.sa4)); - else - memcpy(node->ai_addr, &addr.sa6, sizeof(addr.sa6)); - - if (hints->ai_flags & ARES_AI_CANONNAME) - { - cname = ares__append_addrinfo_cname(&ai->cnames); - if (!cname) - { - ares_freeaddrinfo(ai); - callback(arg, ARES_ENOMEM, 0, NULL); - return 1; - } - - /* Duplicate the name, to avoid a constness violation. */ - cname->name = ares_strdup(name); - if (!cname->name) - { - ares_freeaddrinfo(ai); - callback(arg, ARES_ENOMEM, 0, NULL); - return 1; - } - } - - callback(arg, ARES_SUCCESS, 0, ai); - return 1; -} - -static void end_hquery(struct host_query *hquery, int status) -{ - struct ares_addrinfo_node sentinel; - struct ares_addrinfo_node *next; - if (status == ARES_SUCCESS) - { - if (!(hquery->hints.ai_flags & ARES_AI_NOSORT)) - { - sentinel.ai_next = hquery->ai->nodes; - ares__sortaddrinfo(hquery->channel, &sentinel); - hquery->ai->nodes = sentinel.ai_next; - } - next = hquery->ai->nodes; - /* Set port into each address (resolved separately). */ - while (next) - { - if (next->ai_family == AF_INET) - { - ((struct sockaddr_in *)next->ai_addr)->sin_port = htons(hquery->port); - } - else - { - ((struct sockaddr_in6 *)next->ai_addr)->sin6_port = htons(hquery->port); - } - next = next->ai_next; - } - } - else - { - /* Clean up what we have collected by so far. */ - ares_freeaddrinfo(hquery->ai); - hquery->ai = NULL; - } - - hquery->callback(hquery->arg, status, hquery->timeouts, hquery->ai); - ares_free(hquery->name); - ares_free(hquery); -} - -static int file_lookup(struct host_query *hquery) -{ - FILE *fp; - int error; - int status; - const char *path_hosts = NULL; - - if (hquery->hints.ai_flags & ARES_AI_ENVHOSTS) - { - path_hosts = getenv("CARES_HOSTS"); - } - - if (!path_hosts) - { -#ifdef WIN32 - char PATH_HOSTS[MAX_PATH]; - win_platform platform; - - PATH_HOSTS[0] = '\0'; - - platform = ares__getplatform(); - - if (platform == WIN_NT) - { - char tmp[MAX_PATH]; - HKEY hkeyHosts; - - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, - &hkeyHosts) == ERROR_SUCCESS) - { - DWORD dwLength = MAX_PATH; - RegQueryValueEx(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, - &dwLength); - ExpandEnvironmentStrings(tmp, PATH_HOSTS, MAX_PATH); - RegCloseKey(hkeyHosts); - } - } - else if (platform == WIN_9X) - GetWindowsDirectory(PATH_HOSTS, MAX_PATH); - else - return ARES_ENOTFOUND; - - strcat(PATH_HOSTS, WIN_PATH_HOSTS); - path_hosts = PATH_HOSTS; - -#elif defined(WATT32) - const char *PATH_HOSTS = _w32_GetHostsFile(); - - if (!PATH_HOSTS) - return ARES_ENOTFOUND; -#endif - path_hosts = PATH_HOSTS; - } - - fp = fopen(path_hosts, "r"); - if (!fp) - { - error = ERRNO; - switch (error) - { - case ENOENT: - case ESRCH: - return ARES_ENOTFOUND; - default: - DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error, - strerror(error))); - DEBUGF(fprintf(stderr, "Error opening file: %s\n", path_hosts)); - return ARES_EFILE; - } - } - status = ares__readaddrinfo(fp, hquery->name, hquery->port, &hquery->hints, hquery->ai); - fclose(fp); - return status; -} - -static void next_lookup(struct host_query *hquery, int status) -{ - switch (*hquery->remaining_lookups) - { - case 'b': - /* DNS lookup */ - if (next_dns_lookup(hquery)) - break; - hquery->remaining_lookups++; - next_lookup(hquery, status); - break; - - case 'f': - /* Host file lookup */ - if (file_lookup(hquery) == ARES_SUCCESS) - { - end_hquery(hquery, ARES_SUCCESS); - break; - } - hquery->remaining_lookups++; - next_lookup(hquery, status); - break; - default: - /* No lookup left */ - end_hquery(hquery, status); - break; - } -} - -static void host_callback(void *arg, int status, int timeouts, - unsigned char *abuf, int alen) -{ - struct host_query *hquery = (struct host_query*)arg; - int addinfostatus = ARES_SUCCESS; - hquery->timeouts += timeouts; - hquery->remaining--; - - if (status == ARES_SUCCESS) - { - addinfostatus = ares__parse_into_addrinfo(abuf, alen, hquery->ai); - } - else if (status == ARES_EDESTRUCTION) - { - end_hquery(hquery, status); - } - - if (!hquery->remaining) - { - if (addinfostatus != ARES_SUCCESS) - { - /* error in parsing result e.g. no memory */ - end_hquery(hquery, addinfostatus); - } - else if (hquery->ai->nodes) - { - /* at least one query ended with ARES_SUCCESS */ - end_hquery(hquery, ARES_SUCCESS); - } - else if (status == ARES_ENOTFOUND) - { - next_lookup(hquery, status); - } - else - { - end_hquery(hquery, status); - } - } - - /* at this point we keep on waiting for the next query to finish */ -} - -void ares_getaddrinfo(ares_channel channel, - const char* name, const char* service, - const struct ares_addrinfo_hints* hints, - ares_addrinfo_callback callback, void* arg) -{ - struct host_query *hquery; - unsigned short port = 0; - int family; - struct ares_addrinfo *ai; - - if (!hints) - { - hints = &default_hints; - } - - family = hints->ai_family; - - /* Right now we only know how to look up Internet addresses - and unspec means try both basically. */ - if (family != AF_INET && - family != AF_INET6 && - family != AF_UNSPEC) - { - callback(arg, ARES_ENOTIMP, 0, NULL); - return; - } - - if (ares__is_onion_domain(name)) - { - callback(arg, ARES_ENOTFOUND, 0, NULL); - return; - } - - if (service) - { - if (hints->ai_flags & ARES_AI_NUMERICSERV) - { - port = (unsigned short)strtoul(service, NULL, 0); - if (!port) - { - callback(arg, ARES_ESERVICE, 0, NULL); - return; - } - } - else - { - port = lookup_service(service, 0); - if (!port) - { - port = (unsigned short)strtoul(service, NULL, 0); - if (!port) - { - callback(arg, ARES_ESERVICE, 0, NULL); - return; - } - } - } - } - - ai = ares__malloc_addrinfo(); - if (!ai) - { - callback(arg, ARES_ENOMEM, 0, NULL); - return; - } - - if (fake_addrinfo(name, port, hints, ai, callback, arg)) - { - return; - } - - /* Allocate and fill in the host query structure. */ - hquery = ares_malloc(sizeof(struct host_query)); - if (!hquery) - { - ares_freeaddrinfo(ai); - callback(arg, ARES_ENOMEM, 0, NULL); - return; - } - - hquery->name = ares_strdup(name); - if (!hquery->name) - { - ares_free(hquery); - ares_freeaddrinfo(ai); - callback(arg, ARES_ENOMEM, 0, NULL); - return; - } - - hquery->port = port; - hquery->channel = channel; - hquery->hints = *hints; - hquery->sent_family = -1; /* nothing is sent yet */ - hquery->callback = callback; - hquery->arg = arg; - hquery->remaining_lookups = channel->lookups; - hquery->timeouts = 0; - hquery->ai = ai; - hquery->next_domain = -1; - hquery->remaining = 0; - - /* Start performing lookups according to channel->lookups. */ - next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */); -} - -static int next_dns_lookup(struct host_query *hquery) -{ - char *s = NULL; - int is_s_allocated = 0; - int status; - - /* if next_domain == -1 and as_is_first is true, try hquery->name */ - if (hquery->next_domain == -1) - { - if (as_is_first(hquery)) - { - s = hquery->name; - } - hquery->next_domain = 0; - } - - /* if as_is_first is false, try hquery->name at last */ - if (!s && hquery->next_domain == hquery->channel->ndomains) { - if (!as_is_first(hquery)) - { - s = hquery->name; - } - hquery->next_domain++; - } - - if (!s && hquery->next_domain < hquery->channel->ndomains) - { - status = ares__cat_domain( - hquery->name, - hquery->channel->domains[hquery->next_domain++], - &s); - if (status == ARES_SUCCESS) - { - is_s_allocated = 1; - } - } - - if (s) - { - switch (hquery->hints.ai_family) - { - case AF_INET: - hquery->remaining += 1; - ares_query(hquery->channel, s, C_IN, T_A, host_callback, hquery); - break; - case AF_INET6: - hquery->remaining += 1; - ares_query(hquery->channel, s, C_IN, T_AAAA, host_callback, hquery); - break; - case AF_UNSPEC: - hquery->remaining += 2; - ares_query(hquery->channel, s, C_IN, T_A, host_callback, hquery); - ares_query(hquery->channel, s, C_IN, T_AAAA, host_callback, hquery); - break; - default: break; - } - if (is_s_allocated) - { - ares_free(s); - } - return 1; - } - else - { - assert(!hquery->ai->nodes); - return 0; - } -} - -static int as_is_first(const struct host_query* hquery) -{ - char* p; - int ndots = 0; - for (p = hquery->name; *p; p++) - { - if (*p == '.') - { - ndots++; - } - } - return ndots >= hquery->channel->ndots; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_getenv.c nodejs-mozilla-12.22.12/deps/cares/src/ares_getenv.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_getenv.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_getenv.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include "ares_getenv.h" - -#ifndef HAVE_GETENV - -char *ares_getenv(const char *name) -{ - return NULL; -} - -#endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_getenv.h nodejs-mozilla-12.22.12/deps/cares/src/ares_getenv.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_getenv.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_getenv.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -#ifndef HEADER_CARES_GETENV_H -#define HEADER_CARES_GETENV_H - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifndef HAVE_GETENV -extern char *ares_getenv(const char *name); -#endif - -#endif /* HEADER_CARES_GETENV_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_gethostbyaddr.c nodejs-mozilla-12.22.12/deps/cares/src/ares_gethostbyaddr.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_gethostbyaddr.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_gethostbyaddr.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,294 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_inet_net_pton.h" -#include "ares_platform.h" -#include "ares_private.h" - -#ifdef WATT32 -#undef WIN32 -#endif - -struct addr_query { - /* Arguments passed to ares_gethostbyaddr() */ - ares_channel channel; - struct ares_addr addr; - ares_host_callback callback; - void *arg; - - const char *remaining_lookups; - int timeouts; -}; - -static void next_lookup(struct addr_query *aquery); -static void addr_callback(void *arg, int status, int timeouts, - unsigned char *abuf, int alen); -static void end_aquery(struct addr_query *aquery, int status, - struct hostent *host); -static int file_lookup(struct ares_addr *addr, struct hostent **host); -static void ptr_rr_name(char *name, const struct ares_addr *addr); - -void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen, - int family, ares_host_callback callback, void *arg) -{ - struct addr_query *aquery; - - if (family != AF_INET && family != AF_INET6) - { - callback(arg, ARES_ENOTIMP, 0, NULL); - return; - } - - if ((family == AF_INET && addrlen != sizeof(aquery->addr.addrV4)) || - (family == AF_INET6 && addrlen != sizeof(aquery->addr.addrV6))) - { - callback(arg, ARES_ENOTIMP, 0, NULL); - return; - } - - aquery = ares_malloc(sizeof(struct addr_query)); - if (!aquery) - { - callback(arg, ARES_ENOMEM, 0, NULL); - return; - } - aquery->channel = channel; - if (family == AF_INET) - memcpy(&aquery->addr.addrV4, addr, sizeof(aquery->addr.addrV4)); - else - memcpy(&aquery->addr.addrV6, addr, sizeof(aquery->addr.addrV6)); - aquery->addr.family = family; - aquery->callback = callback; - aquery->arg = arg; - aquery->remaining_lookups = channel->lookups; - aquery->timeouts = 0; - - next_lookup(aquery); -} - -static void next_lookup(struct addr_query *aquery) -{ - const char *p; - char name[128]; - int status; - struct hostent *host; - - for (p = aquery->remaining_lookups; *p; p++) - { - switch (*p) - { - case 'b': - ptr_rr_name(name, &aquery->addr); - aquery->remaining_lookups = p + 1; - ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback, - aquery); - return; - case 'f': - status = file_lookup(&aquery->addr, &host); - - /* this status check below previously checked for !ARES_ENOTFOUND, - but we should not assume that this single error code is the one - that can occur, as that is in fact no longer the case */ - if (status == ARES_SUCCESS) - { - end_aquery(aquery, status, host); - return; - } - break; - } - } - end_aquery(aquery, ARES_ENOTFOUND, NULL); -} - -static void addr_callback(void *arg, int status, int timeouts, - unsigned char *abuf, int alen) -{ - struct addr_query *aquery = (struct addr_query *) arg; - struct hostent *host; - size_t addrlen; - - aquery->timeouts += timeouts; - if (status == ARES_SUCCESS) - { - if (aquery->addr.family == AF_INET) - { - addrlen = sizeof(aquery->addr.addrV4); - status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4, - (int)addrlen, AF_INET, &host); - } - else - { - addrlen = sizeof(aquery->addr.addrV6); - status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6, - (int)addrlen, AF_INET6, &host); - } - end_aquery(aquery, status, host); - } - else if (status == ARES_EDESTRUCTION || status == ARES_ECANCELLED) - end_aquery(aquery, status, NULL); - else - next_lookup(aquery); -} - -static void end_aquery(struct addr_query *aquery, int status, - struct hostent *host) -{ - aquery->callback(aquery->arg, status, aquery->timeouts, host); - if (host) - ares_free_hostent(host); - ares_free(aquery); -} - -static int file_lookup(struct ares_addr *addr, struct hostent **host) -{ - FILE *fp; - int status; - int error; - -#ifdef WIN32 - char PATH_HOSTS[MAX_PATH]; - win_platform platform; - - PATH_HOSTS[0] = '\0'; - - platform = ares__getplatform(); - - if (platform == WIN_NT) { - char tmp[MAX_PATH]; - HKEY hkeyHosts; - - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, - &hkeyHosts) == ERROR_SUCCESS) - { - DWORD dwLength = MAX_PATH; - RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, - &dwLength); - ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH); - RegCloseKey(hkeyHosts); - } - } - else if (platform == WIN_9X) - GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH); - else - return ARES_ENOTFOUND; - - strcat(PATH_HOSTS, WIN_PATH_HOSTS); - -#elif defined(WATT32) - extern const char *_w32_GetHostsFile (void); - const char *PATH_HOSTS = _w32_GetHostsFile(); - - if (!PATH_HOSTS) - return ARES_ENOTFOUND; -#endif - - fp = fopen(PATH_HOSTS, "r"); - if (!fp) - { - error = ERRNO; - switch(error) - { - case ENOENT: - case ESRCH: - return ARES_ENOTFOUND; - default: - DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error))); - DEBUGF(fprintf(stderr, "Error opening file: %s\n", - PATH_HOSTS)); - *host = NULL; - return ARES_EFILE; - } - } - while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS) - { - if (addr->family != (*host)->h_addrtype) - { - ares_free_hostent(*host); - continue; - } - if (addr->family == AF_INET) - { - if (memcmp((*host)->h_addr, &addr->addrV4, - sizeof(addr->addrV4)) == 0) - break; - } - else if (addr->family == AF_INET6) - { - if (memcmp((*host)->h_addr, &addr->addrV6, - sizeof(addr->addrV6)) == 0) - break; - } - ares_free_hostent(*host); - } - fclose(fp); - if (status == ARES_EOF) - status = ARES_ENOTFOUND; - if (status != ARES_SUCCESS) - *host = NULL; - return status; -} - -static void ptr_rr_name(char *name, const struct ares_addr *addr) -{ - if (addr->family == AF_INET) - { - unsigned long laddr = ntohl(addr->addrV4.s_addr); - unsigned long a1 = (laddr >> 24UL) & 0xFFUL; - unsigned long a2 = (laddr >> 16UL) & 0xFFUL; - unsigned long a3 = (laddr >> 8UL) & 0xFFUL; - unsigned long a4 = laddr & 0xFFUL; - sprintf(name, "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1); - } - else - { - unsigned char *bytes = (unsigned char *)&addr->addrV6; - /* There are too many arguments to do this in one line using - * minimally C89-compliant compilers */ - sprintf(name, - "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.", - bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4, - bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4, - bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4, - bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4); - sprintf(name+strlen(name), - "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa", - bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4, - bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4, - bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4, - bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4); - } -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_gethostbyname.c nodejs-mozilla-12.22.12/deps/cares/src/ares_gethostbyname.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_gethostbyname.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_gethostbyname.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,537 +0,0 @@ - -/* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_STRINGS_H -#include -#endif - -#include "ares.h" -#include "ares_inet_net_pton.h" -#include "bitncmp.h" -#include "ares_platform.h" -#include "ares_nowarn.h" -#include "ares_private.h" - -#ifdef WATT32 -#undef WIN32 -#endif - -struct host_query { - /* Arguments passed to ares_gethostbyname() */ - ares_channel channel; - char *name; - ares_host_callback callback; - void *arg; - int sent_family; /* this family is what was is being used */ - int want_family; /* this family is what is asked for in the API */ - const char *remaining_lookups; - int timeouts; -}; - -static void next_lookup(struct host_query *hquery, int status_code); -static void host_callback(void *arg, int status, int timeouts, - unsigned char *abuf, int alen); -static void end_hquery(struct host_query *hquery, int status, - struct hostent *host); -static int fake_hostent(const char *name, int family, - ares_host_callback callback, void *arg); -static int file_lookup(const char *name, int family, struct hostent **host); -static void sort_addresses(struct hostent *host, - const struct apattern *sortlist, int nsort); -static void sort6_addresses(struct hostent *host, - const struct apattern *sortlist, int nsort); -static int get_address_index(const struct in_addr *addr, - const struct apattern *sortlist, int nsort); -static int get6_address_index(const struct ares_in6_addr *addr, - const struct apattern *sortlist, int nsort); - -void ares_gethostbyname(ares_channel channel, const char *name, int family, - ares_host_callback callback, void *arg) -{ - struct host_query *hquery; - - /* Right now we only know how to look up Internet addresses - and unspec - means try both basically. */ - switch (family) { - case AF_INET: - case AF_INET6: - case AF_UNSPEC: - break; - default: - callback(arg, ARES_ENOTIMP, 0, NULL); - return; - } - - /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ - if (ares__is_onion_domain(name)) - { - callback(arg, ARES_ENOTFOUND, 0, NULL); - return; - } - - if (fake_hostent(name, family, callback, arg)) - return; - - /* Allocate and fill in the host query structure. */ - hquery = ares_malloc(sizeof(struct host_query)); - if (!hquery) - { - callback(arg, ARES_ENOMEM, 0, NULL); - return; - } - hquery->channel = channel; - hquery->name = ares_strdup(name); - hquery->want_family = family; - hquery->sent_family = -1; /* nothing is sent yet */ - if (!hquery->name) { - ares_free(hquery); - callback(arg, ARES_ENOMEM, 0, NULL); - return; - } - hquery->callback = callback; - hquery->arg = arg; - hquery->remaining_lookups = channel->lookups; - hquery->timeouts = 0; - - /* Start performing lookups according to channel->lookups. */ - next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */); -} - -static void next_lookup(struct host_query *hquery, int status_code) -{ - const char *p; - struct hostent *host; - int status = status_code; - - for (p = hquery->remaining_lookups; *p; p++) - { - switch (*p) - { - case 'b': - /* DNS lookup */ - hquery->remaining_lookups = p + 1; - if ((hquery->want_family == AF_INET6) || - (hquery->want_family == AF_UNSPEC)) { - /* if inet6 or unspec, start out with AAAA */ - hquery->sent_family = AF_INET6; - ares_search(hquery->channel, hquery->name, C_IN, T_AAAA, - host_callback, hquery); - } - else { - hquery->sent_family = AF_INET; - ares_search(hquery->channel, hquery->name, C_IN, T_A, - host_callback, hquery); - } - return; - - case 'f': - /* Host file lookup */ - status = file_lookup(hquery->name, hquery->want_family, &host); - - /* this status check below previously checked for !ARES_ENOTFOUND, - but we should not assume that this single error code is the one - that can occur, as that is in fact no longer the case */ - if (status == ARES_SUCCESS) - { - end_hquery(hquery, status, host); - return; - } - status = status_code; /* Use original status code */ - break; - } - } - end_hquery(hquery, status, NULL); -} - -static void host_callback(void *arg, int status, int timeouts, - unsigned char *abuf, int alen) -{ - struct host_query *hquery = (struct host_query *) arg; - ares_channel channel = hquery->channel; - struct hostent *host = NULL; - - hquery->timeouts += timeouts; - if (status == ARES_SUCCESS) - { - if (hquery->sent_family == AF_INET) - { - status = ares_parse_a_reply(abuf, alen, &host, NULL, NULL); - if (host && channel->nsort) - sort_addresses(host, channel->sortlist, channel->nsort); - } - else if (hquery->sent_family == AF_INET6) - { - status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL); - if ((status == ARES_ENODATA || status == ARES_EBADRESP || - (status == ARES_SUCCESS && host && host->h_addr_list[0] == NULL)) && - hquery->want_family == AF_UNSPEC) { - /* The query returned something but either there were no AAAA - records (e.g. just CNAME) or the response was malformed. Try - looking up A instead. */ - if (host) - ares_free_hostent(host); - hquery->sent_family = AF_INET; - ares_search(hquery->channel, hquery->name, C_IN, T_A, - host_callback, hquery); - return; - } - if (host && channel->nsort) - sort6_addresses(host, channel->sortlist, channel->nsort); - } - if (status == ARES_SUCCESS && host && host->h_addr_list[0] == NULL) - { - /* The query returned something but had no A/AAAA record - (even after potentially retrying AAAA with A) - so we should treat this as an error */ - status = ARES_ENODATA; - } - end_hquery(hquery, status, host); - } - else if ((status == ARES_ENODATA || status == ARES_EBADRESP || - status == ARES_ETIMEOUT) && (hquery->sent_family == AF_INET6 && - hquery->want_family == AF_UNSPEC)) - { - /* The AAAA query yielded no useful result. Now look up an A instead. */ - hquery->sent_family = AF_INET; - ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, - hquery); - } - else if (status == ARES_EDESTRUCTION) - end_hquery(hquery, status, NULL); - else - next_lookup(hquery, status); -} - -static void end_hquery(struct host_query *hquery, int status, - struct hostent *host) -{ - hquery->callback(hquery->arg, status, hquery->timeouts, host); - if (host) - ares_free_hostent(host); - ares_free(hquery->name); - ares_free(hquery); -} - -/* If the name looks like an IP address, fake up a host entry, end the - * query immediately, and return true. Otherwise return false. - */ -static int fake_hostent(const char *name, int family, - ares_host_callback callback, void *arg) -{ - struct hostent hostent; - char *aliases[1] = { NULL }; - char *addrs[2]; - int result = 0; - struct in_addr in; - struct ares_in6_addr in6; - - if (family == AF_INET || family == AF_INET6) - { - /* It only looks like an IP address if it's all numbers and dots. */ - int numdots = 0, valid = 1; - const char *p; - for (p = name; *p; p++) - { - if (!ISDIGIT(*p) && *p != '.') { - valid = 0; - break; - } else if (*p == '.') { - numdots++; - } - } - - /* if we don't have 3 dots, it is illegal - * (although inet_pton doesn't think so). - */ - if (numdots != 3 || !valid) - result = 0; - else - result = (ares_inet_pton(AF_INET, name, &in) < 1 ? 0 : 1); - - if (result) - family = AF_INET; - } - if (family == AF_INET6) - result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1); - - if (!result) - return 0; - - if (family == AF_INET) - { - hostent.h_length = (int)sizeof(struct in_addr); - addrs[0] = (char *)∈ - } - else if (family == AF_INET6) - { - hostent.h_length = (int)sizeof(struct ares_in6_addr); - addrs[0] = (char *)&in6; - } - /* Duplicate the name, to avoid a constness violation. */ - hostent.h_name = ares_strdup(name); - if (!hostent.h_name) - { - callback(arg, ARES_ENOMEM, 0, NULL); - return 1; - } - - /* Fill in the rest of the host structure and terminate the query. */ - addrs[1] = NULL; - hostent.h_aliases = aliases; - hostent.h_addrtype = aresx_sitoss(family); - hostent.h_addr_list = addrs; - callback(arg, ARES_SUCCESS, 0, &hostent); - - ares_free((char *)(hostent.h_name)); - return 1; -} - -/* This is an API method */ -int ares_gethostbyname_file(ares_channel channel, const char *name, - int family, struct hostent **host) -{ - int result; - - /* We only take the channel to ensure that ares_init() been called. */ - if(channel == NULL) - { - /* Anything will do, really. This seems fine, and is consistent with - other error cases. */ - *host = NULL; - return ARES_ENOTFOUND; - } - - /* Just chain to the internal implementation we use here; it's exactly - * what we want. - */ - result = file_lookup(name, family, host); - if(result != ARES_SUCCESS) - { - /* We guarantee a NULL hostent on failure. */ - *host = NULL; - } - return result; -} - -static int file_lookup(const char *name, int family, struct hostent **host) -{ - FILE *fp; - char **alias; - int status; - int error; - -#ifdef WIN32 - char PATH_HOSTS[MAX_PATH]; - win_platform platform; - - PATH_HOSTS[0] = '\0'; - - platform = ares__getplatform(); - - if (platform == WIN_NT) { - char tmp[MAX_PATH]; - HKEY hkeyHosts; - - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, - &hkeyHosts) == ERROR_SUCCESS) - { - DWORD dwLength = MAX_PATH; - RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, - &dwLength); - ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH); - RegCloseKey(hkeyHosts); - } - } - else if (platform == WIN_9X) - GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH); - else - return ARES_ENOTFOUND; - - strcat(PATH_HOSTS, WIN_PATH_HOSTS); - -#elif defined(WATT32) - extern const char *_w32_GetHostsFile (void); - const char *PATH_HOSTS = _w32_GetHostsFile(); - - if (!PATH_HOSTS) - return ARES_ENOTFOUND; -#endif - - /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ - if (ares__is_onion_domain(name)) - return ARES_ENOTFOUND; - - - fp = fopen(PATH_HOSTS, "r"); - if (!fp) - { - error = ERRNO; - switch(error) - { - case ENOENT: - case ESRCH: - return ARES_ENOTFOUND; - default: - DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error))); - DEBUGF(fprintf(stderr, "Error opening file: %s\n", - PATH_HOSTS)); - *host = NULL; - return ARES_EFILE; - } - } - while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS) - { - if (strcasecmp((*host)->h_name, name) == 0) - break; - for (alias = (*host)->h_aliases; *alias; alias++) - { - if (strcasecmp(*alias, name) == 0) - break; - } - if (*alias) - break; - ares_free_hostent(*host); - } - fclose(fp); - if (status == ARES_EOF) - status = ARES_ENOTFOUND; - if (status != ARES_SUCCESS) - *host = NULL; - return status; -} - -static void sort_addresses(struct hostent *host, - const struct apattern *sortlist, int nsort) -{ - struct in_addr a1, a2; - int i1, i2, ind1, ind2; - - /* This is a simple insertion sort, not optimized at all. i1 walks - * through the address list, with the loop invariant that everything - * to the left of i1 is sorted. In the loop body, the value at i1 is moved - * back through the list (via i2) until it is in sorted order. - */ - for (i1 = 0; host->h_addr_list[i1]; i1++) - { - memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr)); - ind1 = get_address_index(&a1, sortlist, nsort); - for (i2 = i1 - 1; i2 >= 0; i2--) - { - memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr)); - ind2 = get_address_index(&a2, sortlist, nsort); - if (ind2 <= ind1) - break; - memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr)); - } - memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr)); - } -} - -/* Find the first entry in sortlist which matches addr. Return nsort - * if none of them match. - */ -static int get_address_index(const struct in_addr *addr, - const struct apattern *sortlist, - int nsort) -{ - int i; - - for (i = 0; i < nsort; i++) - { - if (sortlist[i].family != AF_INET) - continue; - if (sortlist[i].type == PATTERN_MASK) - { - if ((addr->s_addr & sortlist[i].mask.addr4.s_addr) - == sortlist[i].addrV4.s_addr) - break; - } - else - { - if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr, - sortlist[i].mask.bits)) - break; - } - } - return i; -} - -static void sort6_addresses(struct hostent *host, - const struct apattern *sortlist, int nsort) -{ - struct ares_in6_addr a1, a2; - int i1, i2, ind1, ind2; - - /* This is a simple insertion sort, not optimized at all. i1 walks - * through the address list, with the loop invariant that everything - * to the left of i1 is sorted. In the loop body, the value at i1 is moved - * back through the list (via i2) until it is in sorted order. - */ - for (i1 = 0; host->h_addr_list[i1]; i1++) - { - memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr)); - ind1 = get6_address_index(&a1, sortlist, nsort); - for (i2 = i1 - 1; i2 >= 0; i2--) - { - memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr)); - ind2 = get6_address_index(&a2, sortlist, nsort); - if (ind2 <= ind1) - break; - memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr)); - } - memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr)); - } -} - -/* Find the first entry in sortlist which matches addr. Return nsort - * if none of them match. - */ -static int get6_address_index(const struct ares_in6_addr *addr, - const struct apattern *sortlist, - int nsort) -{ - int i; - - for (i = 0; i < nsort; i++) - { - if (sortlist[i].family != AF_INET6) - continue; - if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits)) - break; - } - return i; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares__get_hostent.c nodejs-mozilla-12.22.12/deps/cares/src/ares__get_hostent.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares__get_hostent.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares__get_hostent.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,260 +0,0 @@ - -/* Copyright 1998, 2011 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif - -#include "ares.h" -#include "ares_inet_net_pton.h" -#include "ares_nowarn.h" -#include "ares_private.h" - -int ares__get_hostent(FILE *fp, int family, struct hostent **host) -{ - char *line = NULL, *p, *q, **alias; - char *txtaddr, *txthost, *txtalias; - int status; - size_t addrlen, linesize, naliases; - struct ares_addr addr; - struct hostent *hostent = NULL; - - *host = NULL; /* Assume failure */ - - /* Validate family */ - switch (family) { - case AF_INET: - case AF_INET6: - case AF_UNSPEC: - break; - default: - return ARES_EBADFAMILY; - } - - while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) - { - - /* Trim line comment. */ - p = line; - while (*p && (*p != '#')) - p++; - *p = '\0'; - - /* Trim trailing whitespace. */ - q = p - 1; - while ((q >= line) && ISSPACE(*q)) - q--; - *++q = '\0'; - - /* Skip leading whitespace. */ - p = line; - while (*p && ISSPACE(*p)) - p++; - if (!*p) - /* Ignore line if empty. */ - continue; - - /* Pointer to start of IPv4 or IPv6 address part. */ - txtaddr = p; - - /* Advance past address part. */ - while (*p && !ISSPACE(*p)) - p++; - if (!*p) - /* Ignore line if reached end of line. */ - continue; - - /* Null terminate address part. */ - *p = '\0'; - - /* Advance to host name */ - p++; - while (*p && ISSPACE(*p)) - p++; - if (!*p) - /* Ignore line if reached end of line. */ - continue; /* LCOV_EXCL_LINE: trailing whitespace already stripped */ - - /* Pointer to start of host name. */ - txthost = p; - - /* Advance past host name. */ - while (*p && !ISSPACE(*p)) - p++; - - /* Pointer to start of first alias. */ - txtalias = NULL; - if (*p) - { - q = p + 1; - while (*q && ISSPACE(*q)) - q++; - if (*q) - txtalias = q; - } - - /* Null terminate host name. */ - *p = '\0'; - - /* find out number of aliases. */ - naliases = 0; - if (txtalias) - { - p = txtalias; - while (*p) - { - while (*p && !ISSPACE(*p)) - p++; - while (*p && ISSPACE(*p)) - p++; - naliases++; - } - } - - /* Convert address string to network address for the requested family. */ - addrlen = 0; - addr.family = AF_UNSPEC; - addr.addrV4.s_addr = INADDR_NONE; - if ((family == AF_INET) || (family == AF_UNSPEC)) - { - if (ares_inet_pton(AF_INET, txtaddr, &addr.addrV4) > 0) - { - /* Actual network address family and length. */ - addr.family = AF_INET; - addrlen = sizeof(addr.addrV4); - } - } - if ((family == AF_INET6) || ((family == AF_UNSPEC) && (!addrlen))) - { - if (ares_inet_pton(AF_INET6, txtaddr, &addr.addrV6) > 0) - { - /* Actual network address family and length. */ - addr.family = AF_INET6; - addrlen = sizeof(addr.addrV6); - } - } - if (!addrlen) - /* Ignore line if invalid address string for the requested family. */ - continue; - - /* - ** Actual address family possible values are AF_INET and AF_INET6 only. - */ - - /* Allocate memory for the hostent structure. */ - hostent = ares_malloc(sizeof(struct hostent)); - if (!hostent) - break; - - /* Initialize fields for out of memory condition. */ - hostent->h_aliases = NULL; - hostent->h_addr_list = NULL; - - /* Copy official host name. */ - hostent->h_name = ares_strdup(txthost); - if (!hostent->h_name) - break; - - /* Copy network address. */ - hostent->h_addr_list = ares_malloc(2 * sizeof(char *)); - if (!hostent->h_addr_list) - break; - hostent->h_addr_list[1] = NULL; - hostent->h_addr_list[0] = ares_malloc(addrlen); - if (!hostent->h_addr_list[0]) - break; - if (addr.family == AF_INET) - memcpy(hostent->h_addr_list[0], &addr.addrV4, sizeof(addr.addrV4)); - else - memcpy(hostent->h_addr_list[0], &addr.addrV6, sizeof(addr.addrV6)); - - /* Copy aliases. */ - hostent->h_aliases = ares_malloc((naliases + 1) * sizeof(char *)); - if (!hostent->h_aliases) - break; - alias = hostent->h_aliases; - while (naliases) - *(alias + naliases--) = NULL; - *alias = NULL; - while (txtalias) - { - p = txtalias; - while (*p && !ISSPACE(*p)) - p++; - q = p; - while (*q && ISSPACE(*q)) - q++; - *p = '\0'; - if ((*alias = ares_strdup(txtalias)) == NULL) - break; - alias++; - txtalias = *q ? q : NULL; - } - if (txtalias) - /* Alias memory allocation failure. */ - break; - - /* Copy actual network address family and length. */ - hostent->h_addrtype = aresx_sitoss(addr.family); - hostent->h_length = aresx_uztoss(addrlen); - - /* Free line buffer. */ - ares_free(line); - - /* Return hostent successfully */ - *host = hostent; - return ARES_SUCCESS; - - } - - /* If allocated, free line buffer. */ - if (line) - ares_free(line); - - if (status == ARES_SUCCESS) - { - /* Memory allocation failure; clean up. */ - if (hostent) - { - if (hostent->h_name) - ares_free((char *) hostent->h_name); - if (hostent->h_aliases) - { - for (alias = hostent->h_aliases; *alias; alias++) - ares_free(*alias); - ares_free(hostent->h_aliases); - } - if (hostent->h_addr_list) - { - if (hostent->h_addr_list[0]) - ares_free(hostent->h_addr_list[0]); - ares_free(hostent->h_addr_list); - } - ares_free(hostent); - } - return ARES_ENOMEM; - } - - return status; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_getnameinfo.c nodejs-mozilla-12.22.12/deps/cares/src/ares_getnameinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_getnameinfo.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_getnameinfo.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,453 +0,0 @@ - -/* Copyright 2005 by Dominick Meglio - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ -#include "ares_setup.h" - -#ifdef HAVE_GETSERVBYPORT_R -# if !defined(GETSERVBYPORT_R_ARGS) || \ - (GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6) -# error "you MUST specifiy a valid number of arguments for getservbyport_r" -# endif -#endif - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_NET_IF_H -#include -#endif - -#include "ares.h" -#include "ares_ipv6.h" -#include "ares_nowarn.h" -#include "ares_private.h" - -struct nameinfo_query { - ares_nameinfo_callback callback; - void *arg; - union { - struct sockaddr_in addr4; - struct sockaddr_in6 addr6; - } addr; - int family; - int flags; - int timeouts; -}; - -#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -#define IPBUFSIZ \ - (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE) -#else -#define IPBUFSIZ \ - (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")) -#endif - -static void nameinfo_callback(void *arg, int status, int timeouts, - struct hostent *host); -static char *lookup_service(unsigned short port, int flags, - char *buf, size_t buflen); -#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid, - char *buf, size_t buflen); -#endif -STATIC_TESTABLE char *ares_striendstr(const char *s1, const char *s2); - -void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, - ares_socklen_t salen, - int flags, ares_nameinfo_callback callback, void *arg) -{ - struct sockaddr_in *addr = NULL; - struct sockaddr_in6 *addr6 = NULL; - struct nameinfo_query *niquery; - unsigned int port = 0; - - /* Validate socket address family and length */ - if ((sa->sa_family == AF_INET) && - (salen == sizeof(struct sockaddr_in))) - { - addr = (struct sockaddr_in *)sa; - port = addr->sin_port; - } - else if ((sa->sa_family == AF_INET6) && - (salen == sizeof(struct sockaddr_in6))) - { - addr6 = (struct sockaddr_in6 *)sa; - port = addr6->sin6_port; - } - else - { - callback(arg, ARES_ENOTIMP, 0, NULL, NULL); - return; - } - - /* If neither, assume they want a host */ - if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) - flags |= ARES_NI_LOOKUPHOST; - - /* All they want is a service, no need for DNS */ - if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) - { - char buf[33], *service; - - service = lookup_service((unsigned short)(port & 0xffff), - flags, buf, sizeof(buf)); - callback(arg, ARES_SUCCESS, 0, NULL, service); - return; - } - - /* They want a host lookup */ - if ((flags & ARES_NI_LOOKUPHOST)) - { - /* A numeric host can be handled without DNS */ - if ((flags & ARES_NI_NUMERICHOST)) - { - char ipbuf[IPBUFSIZ]; - char srvbuf[33]; - char *service = NULL; - ipbuf[0] = 0; - - /* Specifying not to lookup a host, but then saying a host - * is required has to be illegal. - */ - if (flags & ARES_NI_NAMEREQD) - { - callback(arg, ARES_EBADFLAGS, 0, NULL, NULL); - return; - } - if (salen == sizeof(struct sockaddr_in6)) - { - ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ); - /* If the system supports scope IDs, use it */ -#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID - append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf)); -#endif - } - else - { - ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ); - } - /* They also want a service */ - if (flags & ARES_NI_LOOKUPSERVICE) - service = lookup_service((unsigned short)(port & 0xffff), - flags, srvbuf, sizeof(srvbuf)); - callback(arg, ARES_SUCCESS, 0, ipbuf, service); - return; - } - /* This is where a DNS lookup becomes necessary */ - else - { - niquery = ares_malloc(sizeof(struct nameinfo_query)); - if (!niquery) - { - callback(arg, ARES_ENOMEM, 0, NULL, NULL); - return; - } - niquery->callback = callback; - niquery->arg = arg; - niquery->flags = flags; - niquery->timeouts = 0; - if (sa->sa_family == AF_INET) - { - niquery->family = AF_INET; - memcpy(&niquery->addr.addr4, addr, sizeof(niquery->addr.addr4)); - ares_gethostbyaddr(channel, &addr->sin_addr, - sizeof(struct in_addr), AF_INET, - nameinfo_callback, niquery); - } - else - { - niquery->family = AF_INET6; - memcpy(&niquery->addr.addr6, addr6, sizeof(niquery->addr.addr6)); - ares_gethostbyaddr(channel, &addr6->sin6_addr, - sizeof(struct ares_in6_addr), AF_INET6, - nameinfo_callback, niquery); - } - } - } -} - -static void nameinfo_callback(void *arg, int status, int timeouts, - struct hostent *host) -{ - struct nameinfo_query *niquery = (struct nameinfo_query *) arg; - char srvbuf[33]; - char *service = NULL; - - niquery->timeouts += timeouts; - if (status == ARES_SUCCESS) - { - /* They want a service too */ - if (niquery->flags & ARES_NI_LOOKUPSERVICE) - { - if (niquery->family == AF_INET) - service = lookup_service(niquery->addr.addr4.sin_port, - niquery->flags, srvbuf, sizeof(srvbuf)); - else - service = lookup_service(niquery->addr.addr6.sin6_port, - niquery->flags, srvbuf, sizeof(srvbuf)); - } - /* NOFQDN means we have to strip off the domain name portion. We do - this by determining our own domain name, then searching the string - for this domain name and removing it. - */ -#ifdef HAVE_GETHOSTNAME - if (niquery->flags & ARES_NI_NOFQDN) - { - char buf[255]; - char *domain; - gethostname(buf, 255); - if ((domain = strchr(buf, '.')) != NULL) - { - char *end = ares_striendstr(host->h_name, domain); - if (end) - *end = 0; - } - } -#endif - niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, - (char *)(host->h_name), - service); - ares_free(niquery); - return; - } - /* We couldn't find the host, but it's OK, we can use the IP */ - else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD)) - { - char ipbuf[IPBUFSIZ]; - if (niquery->family == AF_INET) - ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, - IPBUFSIZ); - else - { - ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, - IPBUFSIZ); -#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID - append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, - sizeof(ipbuf)); -#endif - } - /* They want a service too */ - if (niquery->flags & ARES_NI_LOOKUPSERVICE) - { - if (niquery->family == AF_INET) - service = lookup_service(niquery->addr.addr4.sin_port, - niquery->flags, srvbuf, sizeof(srvbuf)); - else - service = lookup_service(niquery->addr.addr6.sin6_port, - niquery->flags, srvbuf, sizeof(srvbuf)); - } - niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf, - service); - ares_free(niquery); - return; - } - niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL); - ares_free(niquery); -} - -static char *lookup_service(unsigned short port, int flags, - char *buf, size_t buflen) -{ - const char *proto; - struct servent *sep; -#ifdef HAVE_GETSERVBYPORT_R - struct servent se; -#endif - char tmpbuf[4096]; - char *name; - size_t name_len; - - if (port) - { - if (flags & ARES_NI_NUMERICSERV) - sep = NULL; - else - { - if (flags & ARES_NI_UDP) - proto = "udp"; - else if (flags & ARES_NI_SCTP) - proto = "sctp"; - else if (flags & ARES_NI_DCCP) - proto = "dccp"; - else - proto = "tcp"; -#ifdef HAVE_GETSERVBYPORT_R - memset(&se, 0, sizeof(se)); - sep = &se; - memset(tmpbuf, 0, sizeof(tmpbuf)); -#if GETSERVBYPORT_R_ARGS == 6 - if (getservbyport_r(port, proto, &se, (void *)tmpbuf, - sizeof(tmpbuf), &sep) != 0) - sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */ -#elif GETSERVBYPORT_R_ARGS == 5 - sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, - sizeof(tmpbuf)); -#elif GETSERVBYPORT_R_ARGS == 4 - if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0) - sep = NULL; -#else - /* Lets just hope the OS uses TLS! */ - sep = getservbyport(port, proto); -#endif -#else - /* Lets just hope the OS uses TLS! */ -#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) - sep = getservbyport(port, (char*)proto); -#else - sep = getservbyport(port, proto); -#endif -#endif - } - if (sep && sep->s_name) - { - /* get service name */ - name = sep->s_name; - } - else - { - /* get port as a string */ - sprintf(tmpbuf, "%u", (unsigned int)ntohs(port)); - name = tmpbuf; - } - name_len = strlen(name); - if (name_len < buflen) - /* return it if buffer big enough */ - memcpy(buf, name, name_len + 1); - else - /* avoid reusing previous one */ - buf[0] = '\0'; /* LCOV_EXCL_LINE: no real service names are too big */ - return buf; - } - buf[0] = '\0'; - return NULL; -} - -#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID -static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags, - char *buf, size_t buflen) -{ -#ifdef HAVE_IF_INDEXTONAME - int is_ll, is_mcll; -#endif - char tmpbuf[IF_NAMESIZE + 2]; - size_t bufl; - int is_scope_long = sizeof(addr6->sin6_scope_id) > sizeof(unsigned int); - - tmpbuf[0] = '%'; - -#ifdef HAVE_IF_INDEXTONAME - is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr); - is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr); - if ((flags & ARES_NI_NUMERICSCOPE) || - (!is_ll && !is_mcll)) - { - if (is_scope_long) - { - sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id); - } - else - { - sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id); - } - } - else - { - if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL) - { - if (is_scope_long) - { - sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id); - } - else - { - sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id); - } - } - } -#else - if (is_scope_long) - { - sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id); - } - else - { - sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id); - } - (void) flags; -#endif - tmpbuf[IF_NAMESIZE + 1] = '\0'; - bufl = strlen(buf); - - if(bufl + strlen(tmpbuf) < buflen) - /* only append the scopeid string if it fits in the target buffer */ - strcpy(&buf[bufl], tmpbuf); -} -#endif - -/* Determines if s1 ends with the string in s2 (case-insensitive) */ -STATIC_TESTABLE char *ares_striendstr(const char *s1, const char *s2) -{ - const char *c1, *c2, *c1_begin; - int lo1, lo2; - size_t s1_len = strlen(s1), s2_len = strlen(s2); - - /* If the substr is longer than the full str, it can't match */ - if (s2_len > s1_len) - return NULL; - - /* Jump to the end of s1 minus the length of s2 */ - c1_begin = s1+s1_len-s2_len; - c1 = (const char *)c1_begin; - c2 = s2; - while (c2 < s2+s2_len) - { - lo1 = TOLOWER(*c1); - lo2 = TOLOWER(*c2); - if (lo1 != lo2) - return NULL; - else - { - c1++; - c2++; - } - } - return (char *)c1_begin; -} - -int ares__is_onion_domain(const char *name) -{ - if (ares_striendstr(name, ".onion")) - return 1; - - if (ares_striendstr(name, ".onion.")) - return 1; - - return 0; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_getopt.c nodejs-mozilla-12.22.12/deps/cares/src/ares_getopt.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_getopt.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_getopt.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,122 +0,0 @@ -/* - * Original file name getopt.c Initial import into the c-ares source tree - * on 2007-04-11. Lifted from version 5.2 of the 'Open Mash' project with - * the modified BSD license, BSD license without the advertising clause. - * - */ - -/* - * getopt.c -- - * - * Standard UNIX getopt function. Code is from BSD. - * - * Copyright (c) 1987-2001 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * A. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * B. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * C. Neither the names of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS - * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* #if !defined(lint) - * static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94"; - * #endif - */ - -#include -#include -#include -#include "ares_getopt.h" - -int opterr = 1, /* if error message should be printed */ - optind = 1; /* index into parent argv vector */ -int optopt = 0; /* character checked for validity */ -static int optreset; /* reset getopt */ -char *optarg; /* argument associated with option */ - -#define BADCH (int)'?' -#define BADARG (int)':' -#define EMSG (char *)"" - -/* - * ares_getopt -- - * Parse argc/argv argument vector. - */ -int -ares_getopt(int nargc, char * const nargv[], const char *ostr) -{ - static char *place = EMSG; /* option letter processing */ - char *oli; /* option letter list index */ - - if (optreset || !*place) { /* update scanning pointer */ - optreset = 0; - if (optind >= nargc || *(place = nargv[optind]) != '-') { - place = EMSG; - return (EOF); - } - if (place[1] && *++place == '-') { /* found "--" */ - ++optind; - place = EMSG; - return (EOF); - } - } /* option letter okay? */ - if ((optopt = (int)*place++) == (int)':' || - (oli = strchr(ostr, optopt)) == NULL) { - /* - * if the user didn't specify '-' as an option, - * assume it means EOF. - */ - if (optopt == (int)'-') - return (EOF); - if (!*place) - ++optind; - if (opterr && *ostr != ':') - (void)fprintf(stderr, - "%s: illegal option -- %c\n", __FILE__, optopt); - return (BADCH); - } - if (*++oli != ':') { /* don't need argument */ - optarg = NULL; - if (!*place) - ++optind; - } - else { /* need an argument */ - if (*place) /* no white space */ - optarg = place; - else if (nargc <= ++optind) { /* no arg */ - place = EMSG; - if (*ostr == ':') - return (BADARG); - if (opterr) - (void)fprintf(stderr, - "%s: option requires an argument -- %c\n", - __FILE__, optopt); - return (BADCH); - } - else /* white space */ - optarg = nargv[optind]; - place = EMSG; - ++optind; - } - return (optopt); /* dump back option letter */ -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_getopt.h nodejs-mozilla-12.22.12/deps/cares/src/ares_getopt.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_getopt.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_getopt.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -#ifndef ARES_GETOPT_H -#define ARES_GETOPT_H - -/* - * Copyright (c) 1987-2001 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * A. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * B. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * C. Neither the names of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS - * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - - -int ares_getopt(int nargc, char * const nargv[], const char *ostr); - -#undef optarg -#undef optind -#undef opterr -#undef optopt -#undef optreset - -#define optarg ares_optarg -#define optind ares_optind -#define opterr ares_opterr -#define optopt ares_optopt -#define optreset ares_optreset - -extern char *optarg; -extern int optind; -extern int opterr; -extern int optopt; - -#endif /* ARES_GETOPT_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_getsock.c nodejs-mozilla-12.22.12/deps/cares/src/ares_getsock.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_getsock.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_getsock.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ - -/* Copyright (C) 2005 - 2010, Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. M.I.T. makes no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include "ares.h" -#include "ares_private.h" - -int ares_getsock(ares_channel channel, - ares_socket_t *socks, - int numsocks) /* size of the 'socks' array */ -{ - struct server_state *server; - int i; - int sockindex=0; - int bitmap = 0; - unsigned int setbits = 0xffffffff; - - /* Are there any active queries? */ - int active_queries = !ares__is_list_empty(&(channel->all_queries)); - - for (i = 0; i < channel->nservers; i++) - { - server = &channel->servers[i]; - /* We only need to register interest in UDP sockets if we have - * outstanding queries. - */ - if (active_queries && server->udp_socket != ARES_SOCKET_BAD) - { - if(sockindex >= numsocks || sockindex >= ARES_GETSOCK_MAXNUM) - break; - socks[sockindex] = server->udp_socket; - bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); - sockindex++; - } - /* We always register for TCP events, because we want to know - * when the other side closes the connection, so we don't waste - * time trying to use a broken connection. - */ - if (server->tcp_socket != ARES_SOCKET_BAD) - { - if(sockindex >= numsocks || sockindex >= ARES_GETSOCK_MAXNUM) - break; - socks[sockindex] = server->tcp_socket; - bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); - - if (server->qhead && active_queries) - /* then the tcp socket is also writable! */ - bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex); - - sockindex++; - } - } - return bitmap; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_inet_net_pton.h nodejs-mozilla-12.22.12/deps/cares/src/ares_inet_net_pton.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_inet_net_pton.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_inet_net_pton.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -#ifndef HEADER_CARES_INET_NET_PTON_H -#define HEADER_CARES_INET_NET_PTON_H - -/* Copyright (C) 2005-2013 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#ifdef HAVE_INET_NET_PTON -#define ares_inet_net_pton(w,x,y,z) inet_net_pton(w,x,y,z) -#else -int ares_inet_net_pton(int af, const char *src, void *dst, size_t size); -#endif - -#endif /* HEADER_CARES_INET_NET_PTON_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_init.c nodejs-mozilla-12.22.12/deps/cares/src/ares_init.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_init.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_init.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,2620 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2007-2013 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_SYS_PARAM_H -#include -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef HAVE_NETDB_H -#include -#endif - -#ifdef HAVE_ARPA_INET_H -#include -#endif - -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#if defined(ANDROID) || defined(__ANDROID__) -#include -#include "ares_android.h" -/* From the Bionic sources */ -#define DNS_PROP_NAME_PREFIX "net.dns" -#define MAX_DNS_PROPERTIES 8 -#endif - -#if defined(CARES_USE_LIBRESOLV) -#include -#endif - -#include "ares.h" -#include "ares_inet_net_pton.h" -#include "ares_library_init.h" -#include "ares_nowarn.h" -#include "ares_platform.h" -#include "ares_private.h" - -#ifdef WATT32 -#undef WIN32 /* Redefined in MingW/MSVC headers */ -#endif - -static int init_by_options(ares_channel channel, - const struct ares_options *options, - int optmask); -static int init_by_environment(ares_channel channel); -static int init_by_resolv_conf(ares_channel channel); -static int init_by_defaults(ares_channel channel); - -#ifndef WATT32 -static int config_nameserver(struct server_state **servers, int *nservers, - char *str); -#endif -static int set_search(ares_channel channel, const char *str); -static int set_options(ares_channel channel, const char *str); -static const char *try_option(const char *p, const char *q, const char *opt); -static int init_id_key(rc4_key* key,int key_data_len); - -static int config_sortlist(struct apattern **sortlist, int *nsort, - const char *str); -static int sortlist_alloc(struct apattern **sortlist, int *nsort, - struct apattern *pat); -static int ip_addr(const char *s, ares_ssize_t len, struct in_addr *addr); -static void natural_mask(struct apattern *pat); -#if !defined(WIN32) && !defined(WATT32) && \ - !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV) -static int config_domain(ares_channel channel, char *str); -static int config_lookup(ares_channel channel, const char *str, - const char *bindch, const char *altbindch, - const char *filech); -static char *try_config(char *s, const char *opt, char scc); -#endif - -#define ARES_CONFIG_CHECK(x) (x->lookups && x->nsort > -1 && \ - x->nservers > -1 && \ - x->ndomains > -1 && \ - x->ndots > -1 && x->timeout > -1 && \ - x->tries > -1) - -int ares_init(ares_channel *channelptr) -{ - return ares_init_options(channelptr, NULL, 0); -} - -int ares_init_options(ares_channel *channelptr, struct ares_options *options, - int optmask) -{ - ares_channel channel; - int i; - int status = ARES_SUCCESS; - struct timeval now; - -#ifdef CURLDEBUG - const char *env = getenv("CARES_MEMDEBUG"); - - if (env) - curl_memdebug(env); - env = getenv("CARES_MEMLIMIT"); - if (env) { - char *endptr; - long num = strtol(env, &endptr, 10); - if((endptr != env) && (endptr == env + strlen(env)) && (num > 0)) - curl_memlimit(num); - } -#endif - - if (ares_library_initialized() != ARES_SUCCESS) - return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */ - - channel = ares_malloc(sizeof(struct ares_channeldata)); - if (!channel) { - *channelptr = NULL; - return ARES_ENOMEM; - } - - now = ares__tvnow(); - - /* Set everything to distinguished values so we know they haven't - * been set yet. - */ - channel->flags = -1; - channel->timeout = -1; - channel->tries = -1; - channel->ndots = -1; - channel->rotate = -1; - channel->udp_port = -1; - channel->tcp_port = -1; - channel->ednspsz = -1; - channel->socket_send_buffer_size = -1; - channel->socket_receive_buffer_size = -1; - channel->nservers = -1; - channel->ndomains = -1; - channel->nsort = -1; - channel->tcp_connection_generation = 0; - channel->lookups = NULL; - channel->domains = NULL; - channel->sortlist = NULL; - channel->servers = NULL; - channel->sock_state_cb = NULL; - channel->sock_state_cb_data = NULL; - channel->sock_create_cb = NULL; - channel->sock_create_cb_data = NULL; - channel->sock_config_cb = NULL; - channel->sock_config_cb_data = NULL; - channel->sock_funcs = NULL; - channel->sock_func_cb_data = NULL; - channel->resolvconf_path = NULL; - - channel->last_server = 0; - channel->last_timeout_processed = (time_t)now.tv_sec; - - memset(&channel->local_dev_name, 0, sizeof(channel->local_dev_name)); - channel->local_ip4 = 0; - memset(&channel->local_ip6, 0, sizeof(channel->local_ip6)); - - /* Initialize our lists of queries */ - ares__init_list_head(&(channel->all_queries)); - for (i = 0; i < ARES_QID_TABLE_SIZE; i++) - { - ares__init_list_head(&(channel->queries_by_qid[i])); - } - for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) - { - ares__init_list_head(&(channel->queries_by_timeout[i])); - } - - /* Initialize configuration by each of the four sources, from highest - * precedence to lowest. - */ - - status = init_by_options(channel, options, optmask); - if (status != ARES_SUCCESS) { - DEBUGF(fprintf(stderr, "Error: init_by_options failed: %s\n", - ares_strerror(status))); - /* If we fail to apply user-specified options, fail the whole init process */ - goto done; - } - status = init_by_environment(channel); - if (status != ARES_SUCCESS) - DEBUGF(fprintf(stderr, "Error: init_by_environment failed: %s\n", - ares_strerror(status))); - if (status == ARES_SUCCESS) { - status = init_by_resolv_conf(channel); - if (status != ARES_SUCCESS) - DEBUGF(fprintf(stderr, "Error: init_by_resolv_conf failed: %s\n", - ares_strerror(status))); - } - - /* - * No matter what failed or succeeded, seed defaults to provide - * useful behavior for things that we missed. - */ - status = init_by_defaults(channel); - if (status != ARES_SUCCESS) - DEBUGF(fprintf(stderr, "Error: init_by_defaults failed: %s\n", - ares_strerror(status))); - - /* Generate random key */ - - if (status == ARES_SUCCESS) { - status = init_id_key(&channel->id_key, ARES_ID_KEY_LEN); - if (status == ARES_SUCCESS) - channel->next_id = ares__generate_new_id(&channel->id_key); - else - DEBUGF(fprintf(stderr, "Error: init_id_key failed: %s\n", - ares_strerror(status))); - } - -done: - if (status != ARES_SUCCESS) - { - /* Something failed; clean up memory we may have allocated. */ - if (channel->servers) - ares_free(channel->servers); - if (channel->ndomains != -1) - ares_strsplit_free(channel->domains, channel->ndomains); - if (channel->sortlist) - ares_free(channel->sortlist); - if(channel->lookups) - ares_free(channel->lookups); - if(channel->resolvconf_path) - ares_free(channel->resolvconf_path); - ares_free(channel); - return status; - } - - /* Trim to one server if ARES_FLAG_PRIMARY is set. */ - if ((channel->flags & ARES_FLAG_PRIMARY) && channel->nservers > 1) - channel->nservers = 1; - - ares__init_servers_state(channel); - - *channelptr = channel; - return ARES_SUCCESS; -} - -/* ares_dup() duplicates a channel handle with all its options and returns a - new channel handle */ -int ares_dup(ares_channel *dest, ares_channel src) -{ - struct ares_options opts; - struct ares_addr_port_node *servers; - int non_v4_default_port = 0; - int i, rc; - int optmask; - - *dest = NULL; /* in case of failure return NULL explicitly */ - - /* First get the options supported by the old ares_save_options() function, - which is most of them */ - rc = ares_save_options(src, &opts, &optmask); - if(rc) - { - ares_destroy_options(&opts); - return rc; - } - - /* Then create the new channel with those options */ - rc = ares_init_options(dest, &opts, optmask); - - /* destroy the options copy to not leak any memory */ - ares_destroy_options(&opts); - - if(rc) - return rc; - - /* Now clone the options that ares_save_options() doesn't support. */ - (*dest)->sock_create_cb = src->sock_create_cb; - (*dest)->sock_create_cb_data = src->sock_create_cb_data; - (*dest)->sock_config_cb = src->sock_config_cb; - (*dest)->sock_config_cb_data = src->sock_config_cb_data; - (*dest)->sock_funcs = src->sock_funcs; - (*dest)->sock_func_cb_data = src->sock_func_cb_data; - - strncpy((*dest)->local_dev_name, src->local_dev_name, - sizeof((*dest)->local_dev_name)); - (*dest)->local_ip4 = src->local_ip4; - memcpy((*dest)->local_ip6, src->local_ip6, sizeof(src->local_ip6)); - - /* Full name server cloning required if there is a non-IPv4, or non-default port, nameserver */ - for (i = 0; i < src->nservers; i++) - { - if ((src->servers[i].addr.family != AF_INET) || - (src->servers[i].addr.udp_port != 0) || - (src->servers[i].addr.tcp_port != 0)) { - non_v4_default_port++; - break; - } - } - if (non_v4_default_port) { - rc = ares_get_servers_ports(src, &servers); - if (rc != ARES_SUCCESS) { - ares_destroy(*dest); - *dest = NULL; - return rc; - } - rc = ares_set_servers_ports(*dest, servers); - ares_free_data(servers); - if (rc != ARES_SUCCESS) { - ares_destroy(*dest); - *dest = NULL; - return rc; - } - } - - return ARES_SUCCESS; /* everything went fine */ -} - -/* Save options from initialized channel */ -int ares_save_options(ares_channel channel, struct ares_options *options, - int *optmask) -{ - int i, j; - int ipv4_nservers = 0; - - /* Zero everything out */ - memset(options, 0, sizeof(struct ares_options)); - - if (!ARES_CONFIG_CHECK(channel)) - return ARES_ENODATA; - - /* Traditionally the optmask wasn't saved in the channel struct so it was - recreated here. ROTATE is the first option that has no struct field of - its own in the public config struct */ - (*optmask) = (ARES_OPT_FLAGS|ARES_OPT_TRIES|ARES_OPT_NDOTS| - ARES_OPT_UDP_PORT|ARES_OPT_TCP_PORT|ARES_OPT_SOCK_STATE_CB| - ARES_OPT_SERVERS|ARES_OPT_DOMAINS|ARES_OPT_LOOKUPS| - ARES_OPT_SORTLIST|ARES_OPT_TIMEOUTMS); - (*optmask) |= (channel->rotate ? ARES_OPT_ROTATE : ARES_OPT_NOROTATE); - - if (channel->resolvconf_path) - (*optmask) |= ARES_OPT_RESOLVCONF; - - /* Copy easy stuff */ - options->flags = channel->flags; - - /* We return full millisecond resolution but that's only because we don't - set the ARES_OPT_TIMEOUT anymore, only the new ARES_OPT_TIMEOUTMS */ - options->timeout = channel->timeout; - options->tries = channel->tries; - options->ndots = channel->ndots; - options->udp_port = ntohs(aresx_sitous(channel->udp_port)); - options->tcp_port = ntohs(aresx_sitous(channel->tcp_port)); - options->sock_state_cb = channel->sock_state_cb; - options->sock_state_cb_data = channel->sock_state_cb_data; - - /* Copy IPv4 servers that use the default port */ - if (channel->nservers) { - for (i = 0; i < channel->nservers; i++) - { - if ((channel->servers[i].addr.family == AF_INET) && - (channel->servers[i].addr.udp_port == 0) && - (channel->servers[i].addr.tcp_port == 0)) - ipv4_nservers++; - } - if (ipv4_nservers) { - options->servers = ares_malloc(ipv4_nservers * sizeof(struct in_addr)); - if (!options->servers) - return ARES_ENOMEM; - for (i = j = 0; i < channel->nservers; i++) - { - if ((channel->servers[i].addr.family == AF_INET) && - (channel->servers[i].addr.udp_port == 0) && - (channel->servers[i].addr.tcp_port == 0)) - memcpy(&options->servers[j++], - &channel->servers[i].addr.addrV4, - sizeof(channel->servers[i].addr.addrV4)); - } - } - } - options->nservers = ipv4_nservers; - - /* copy domains */ - if (channel->ndomains) { - options->domains = ares_malloc(channel->ndomains * sizeof(char *)); - if (!options->domains) - return ARES_ENOMEM; - - for (i = 0; i < channel->ndomains; i++) - { - options->ndomains = i; - options->domains[i] = ares_strdup(channel->domains[i]); - if (!options->domains[i]) - return ARES_ENOMEM; - } - } - options->ndomains = channel->ndomains; - - /* copy lookups */ - if (channel->lookups) { - options->lookups = ares_strdup(channel->lookups); - if (!options->lookups && channel->lookups) - return ARES_ENOMEM; - } - - /* copy sortlist */ - if (channel->nsort) { - options->sortlist = ares_malloc(channel->nsort * sizeof(struct apattern)); - if (!options->sortlist) - return ARES_ENOMEM; - for (i = 0; i < channel->nsort; i++) - options->sortlist[i] = channel->sortlist[i]; - } - options->nsort = channel->nsort; - - /* copy path for resolv.conf file */ - if (channel->resolvconf_path) { - options->resolvconf_path = ares_strdup(channel->resolvconf_path); - if (!options->resolvconf_path) - return ARES_ENOMEM; - } - - return ARES_SUCCESS; -} - -static int init_by_options(ares_channel channel, - const struct ares_options *options, - int optmask) -{ - int i; - - /* Easy stuff. */ - if ((optmask & ARES_OPT_FLAGS) && channel->flags == -1) - channel->flags = options->flags; - if ((optmask & ARES_OPT_TIMEOUTMS) && channel->timeout == -1) - channel->timeout = options->timeout; - else if ((optmask & ARES_OPT_TIMEOUT) && channel->timeout == -1) - channel->timeout = options->timeout * 1000; - if ((optmask & ARES_OPT_TRIES) && channel->tries == -1) - channel->tries = options->tries; - if ((optmask & ARES_OPT_NDOTS) && channel->ndots == -1) - channel->ndots = options->ndots; - if ((optmask & ARES_OPT_ROTATE) && channel->rotate == -1) - channel->rotate = 1; - if ((optmask & ARES_OPT_NOROTATE) && channel->rotate == -1) - channel->rotate = 0; - if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == -1) - channel->udp_port = htons(options->udp_port); - if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1) - channel->tcp_port = htons(options->tcp_port); - if ((optmask & ARES_OPT_SOCK_STATE_CB) && channel->sock_state_cb == NULL) - { - channel->sock_state_cb = options->sock_state_cb; - channel->sock_state_cb_data = options->sock_state_cb_data; - } - if ((optmask & ARES_OPT_SOCK_SNDBUF) - && channel->socket_send_buffer_size == -1) - channel->socket_send_buffer_size = options->socket_send_buffer_size; - if ((optmask & ARES_OPT_SOCK_RCVBUF) - && channel->socket_receive_buffer_size == -1) - channel->socket_receive_buffer_size = options->socket_receive_buffer_size; - - if ((optmask & ARES_OPT_EDNSPSZ) && channel->ednspsz == -1) - channel->ednspsz = options->ednspsz; - - /* Copy the IPv4 servers, if given. */ - if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1) - { - /* Avoid zero size allocations at any cost */ - if (options->nservers > 0) - { - channel->servers = - ares_malloc(options->nservers * sizeof(struct server_state)); - if (!channel->servers) - return ARES_ENOMEM; - for (i = 0; i < options->nservers; i++) - { - channel->servers[i].addr.family = AF_INET; - channel->servers[i].addr.udp_port = 0; - channel->servers[i].addr.tcp_port = 0; - memcpy(&channel->servers[i].addr.addrV4, - &options->servers[i], - sizeof(channel->servers[i].addr.addrV4)); - } - } - channel->nservers = options->nservers; - } - - /* Copy the domains, if given. Keep channel->ndomains consistent so - * we can clean up in case of error. - */ - if ((optmask & ARES_OPT_DOMAINS) && channel->ndomains == -1) - { - /* Avoid zero size allocations at any cost */ - if (options->ndomains > 0) - { - channel->domains = ares_malloc(options->ndomains * sizeof(char *)); - if (!channel->domains) - return ARES_ENOMEM; - for (i = 0; i < options->ndomains; i++) - { - channel->ndomains = i; - channel->domains[i] = ares_strdup(options->domains[i]); - if (!channel->domains[i]) - return ARES_ENOMEM; - } - } - channel->ndomains = options->ndomains; - } - - /* Set lookups, if given. */ - if ((optmask & ARES_OPT_LOOKUPS) && !channel->lookups) - { - channel->lookups = ares_strdup(options->lookups); - if (!channel->lookups) - return ARES_ENOMEM; - } - - /* copy sortlist */ - if ((optmask & ARES_OPT_SORTLIST) && (channel->nsort == -1)) { - if (options->nsort > 0) { - channel->sortlist = ares_malloc(options->nsort * sizeof(struct apattern)); - if (!channel->sortlist) - return ARES_ENOMEM; - for (i = 0; i < options->nsort; i++) - channel->sortlist[i] = options->sortlist[i]; - } - channel->nsort = options->nsort; - } - - /* Set path for resolv.conf file, if given. */ - if ((optmask & ARES_OPT_RESOLVCONF) && !channel->resolvconf_path) - { - channel->resolvconf_path = ares_strdup(options->resolvconf_path); - if (!channel->resolvconf_path && options->resolvconf_path) - return ARES_ENOMEM; - } - - channel->optmask = optmask; - - return ARES_SUCCESS; -} - -static int init_by_environment(ares_channel channel) -{ - const char *localdomain, *res_options; - int status; - - localdomain = getenv("LOCALDOMAIN"); - if (localdomain && channel->ndomains == -1) - { - status = set_search(channel, localdomain); - if (status != ARES_SUCCESS) - return status; - } - - res_options = getenv("RES_OPTIONS"); - if (res_options) - { - status = set_options(channel, res_options); - if (status != ARES_SUCCESS) - return status; /* LCOV_EXCL_LINE: set_options() never fails */ - } - - return ARES_SUCCESS; -} - -#ifdef WIN32 -/* - * get_REG_SZ() - * - * Given a 'hKey' handle to an open registry key and a 'leafKeyName' pointer - * to the name of the registry leaf key to be queried, fetch it's string - * value and return a pointer in *outptr to a newly allocated memory area - * holding it as a null-terminated string. - * - * Returns 0 and nullifies *outptr upon inability to return a string value. - * - * Returns 1 and sets *outptr when returning a dynamically allocated string. - * - * Supported on Windows NT 3.5 and newer. - */ -static int get_REG_SZ(HKEY hKey, const char *leafKeyName, char **outptr) -{ - DWORD size = 0; - int res; - - *outptr = NULL; - - /* Find out size of string stored in registry */ - res = RegQueryValueExA(hKey, leafKeyName, 0, NULL, NULL, &size); - if ((res != ERROR_SUCCESS && res != ERROR_MORE_DATA) || !size) - return 0; - - /* Allocate buffer of indicated size plus one given that string - might have been stored without null termination */ - *outptr = ares_malloc(size+1); - if (!*outptr) - return 0; - - /* Get the value for real */ - res = RegQueryValueExA(hKey, leafKeyName, 0, NULL, - (unsigned char *)*outptr, &size); - if ((res != ERROR_SUCCESS) || (size == 1)) - { - ares_free(*outptr); - *outptr = NULL; - return 0; - } - - /* Null terminate buffer allways */ - *(*outptr + size) = '\0'; - - return 1; -} - -/* - * get_REG_SZ_9X() - * - * Functionally identical to get_REG_SZ() - * - * Supported on Windows 95, 98 and ME. - */ -static int get_REG_SZ_9X(HKEY hKey, const char *leafKeyName, char **outptr) -{ - DWORD dataType = 0; - DWORD size = 0; - int res; - - *outptr = NULL; - - /* Find out size of string stored in registry */ - res = RegQueryValueExA(hKey, leafKeyName, 0, &dataType, NULL, &size); - if ((res != ERROR_SUCCESS && res != ERROR_MORE_DATA) || !size) - return 0; - - /* Allocate buffer of indicated size plus one given that string - might have been stored without null termination */ - *outptr = ares_malloc(size+1); - if (!*outptr) - return 0; - - /* Get the value for real */ - res = RegQueryValueExA(hKey, leafKeyName, 0, &dataType, - (unsigned char *)*outptr, &size); - if ((res != ERROR_SUCCESS) || (size == 1)) - { - ares_free(*outptr); - *outptr = NULL; - return 0; - } - - /* Null terminate buffer allways */ - *(*outptr + size) = '\0'; - - return 1; -} - -/* - * get_enum_REG_SZ() - * - * Given a 'hKeyParent' handle to an open registry key and a 'leafKeyName' - * pointer to the name of the registry leaf key to be queried, parent key - * is enumerated searching in child keys for given leaf key name and its - * associated string value. When located, this returns a pointer in *outptr - * to a newly allocated memory area holding it as a null-terminated string. - * - * Returns 0 and nullifies *outptr upon inability to return a string value. - * - * Returns 1 and sets *outptr when returning a dynamically allocated string. - * - * Supported on Windows NT 3.5 and newer. - */ -static int get_enum_REG_SZ(HKEY hKeyParent, const char *leafKeyName, - char **outptr) -{ - char enumKeyName[256]; - DWORD enumKeyNameBuffSize; - DWORD enumKeyIdx = 0; - HKEY hKeyEnum; - int gotString; - int res; - - *outptr = NULL; - - for(;;) - { - enumKeyNameBuffSize = sizeof(enumKeyName); - res = RegEnumKeyExA(hKeyParent, enumKeyIdx++, enumKeyName, - &enumKeyNameBuffSize, 0, NULL, NULL, NULL); - if (res != ERROR_SUCCESS) - break; - res = RegOpenKeyExA(hKeyParent, enumKeyName, 0, KEY_QUERY_VALUE, - &hKeyEnum); - if (res != ERROR_SUCCESS) - continue; - gotString = get_REG_SZ(hKeyEnum, leafKeyName, outptr); - RegCloseKey(hKeyEnum); - if (gotString) - break; - } - - if (!*outptr) - return 0; - - return 1; -} - -/* - * get_DNS_Registry_9X() - * - * Functionally identical to get_DNS_Registry() - * - * Implementation supports Windows 95, 98 and ME. - */ -static int get_DNS_Registry_9X(char **outptr) -{ - HKEY hKey_VxD_MStcp; - int gotString; - int res; - - *outptr = NULL; - - res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_9X, 0, KEY_READ, - &hKey_VxD_MStcp); - if (res != ERROR_SUCCESS) - return 0; - - gotString = get_REG_SZ_9X(hKey_VxD_MStcp, NAMESERVER, outptr); - RegCloseKey(hKey_VxD_MStcp); - - if (!gotString || !*outptr) - return 0; - - return 1; -} - -/* - * get_DNS_Registry_NT() - * - * Functionally identical to get_DNS_Registry() - * - * Refs: Microsoft Knowledge Base articles KB120642 and KB314053. - * - * Implementation supports Windows NT 3.5 and newer. - */ -static int get_DNS_Registry_NT(char **outptr) -{ - HKEY hKey_Interfaces = NULL; - HKEY hKey_Tcpip_Parameters; - int gotString; - int res; - - *outptr = NULL; - - res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, - &hKey_Tcpip_Parameters); - if (res != ERROR_SUCCESS) - return 0; - - /* - ** Global DNS settings override adapter specific parameters when both - ** are set. Additionally static DNS settings override DHCP-configured - ** parameters when both are set. - */ - - /* Global DNS static parameters */ - gotString = get_REG_SZ(hKey_Tcpip_Parameters, NAMESERVER, outptr); - if (gotString) - goto done; - - /* Global DNS DHCP-configured parameters */ - gotString = get_REG_SZ(hKey_Tcpip_Parameters, DHCPNAMESERVER, outptr); - if (gotString) - goto done; - - /* Try adapter specific parameters */ - res = RegOpenKeyExA(hKey_Tcpip_Parameters, "Interfaces", 0, - KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, - &hKey_Interfaces); - if (res != ERROR_SUCCESS) - { - hKey_Interfaces = NULL; - goto done; - } - - /* Adapter specific DNS static parameters */ - gotString = get_enum_REG_SZ(hKey_Interfaces, NAMESERVER, outptr); - if (gotString) - goto done; - - /* Adapter specific DNS DHCP-configured parameters */ - gotString = get_enum_REG_SZ(hKey_Interfaces, DHCPNAMESERVER, outptr); - -done: - if (hKey_Interfaces) - RegCloseKey(hKey_Interfaces); - - RegCloseKey(hKey_Tcpip_Parameters); - - if (!gotString || !*outptr) - return 0; - - return 1; -} - -/* - * get_DNS_Registry() - * - * Locates DNS info in the registry. When located, this returns a pointer - * in *outptr to a newly allocated memory area holding a null-terminated - * string with a space or comma seperated list of DNS IP addresses. - * - * Returns 0 and nullifies *outptr upon inability to return DNSes string. - * - * Returns 1 and sets *outptr when returning a dynamically allocated string. - */ -static int get_DNS_Registry(char **outptr) -{ - win_platform platform; - int gotString = 0; - - *outptr = NULL; - - platform = ares__getplatform(); - - if (platform == WIN_NT) - gotString = get_DNS_Registry_NT(outptr); - else if (platform == WIN_9X) - gotString = get_DNS_Registry_9X(outptr); - - if (!gotString) - return 0; - - return 1; -} - -static void commanjoin(char** dst, const char* const src, const size_t len) -{ - char *newbuf; - size_t newsize; - - /* 1 for terminating 0 and 2 for , and terminating 0 */ - newsize = len + (*dst ? (strlen(*dst) + 2) : 1); - newbuf = ares_realloc(*dst, newsize); - if (!newbuf) - return; - if (*dst == NULL) - *newbuf = '\0'; - *dst = newbuf; - if (strlen(*dst) != 0) - strcat(*dst, ","); - strncat(*dst, src, len); -} - -/* - * commajoin() - * - * RTF code. - */ -static void commajoin(char **dst, const char *src) -{ - commanjoin(dst, src, strlen(src)); -} - -/* - * get_DNS_NetworkParams() - * - * Locates DNS info using GetNetworkParams() function from the Internet - * Protocol Helper (IP Helper) API. When located, this returns a pointer - * in *outptr to a newly allocated memory area holding a null-terminated - * string with a space or comma seperated list of DNS IP addresses. - * - * Returns 0 and nullifies *outptr upon inability to return DNSes string. - * - * Returns 1 and sets *outptr when returning a dynamically allocated string. - * - * Implementation supports Windows 98 and newer. - * - * Note: Ancient PSDK required in order to build a W98 target. - */ -static int get_DNS_NetworkParams(char **outptr) -{ - FIXED_INFO *fi, *newfi; - struct ares_addr namesrvr; - char *txtaddr; - IP_ADDR_STRING *ipAddr; - int res; - DWORD size = sizeof (*fi); - - *outptr = NULL; - - /* Verify run-time availability of GetNetworkParams() */ - if (ares_fpGetNetworkParams == ZERO_NULL) - return 0; - - fi = ares_malloc(size); - if (!fi) - return 0; - - res = (*ares_fpGetNetworkParams) (fi, &size); - if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS)) - goto done; - - newfi = ares_realloc(fi, size); - if (!newfi) - goto done; - - fi = newfi; - res = (*ares_fpGetNetworkParams) (fi, &size); - if (res != ERROR_SUCCESS) - goto done; - - for (ipAddr = &fi->DnsServerList; ipAddr; ipAddr = ipAddr->Next) - { - txtaddr = &ipAddr->IpAddress.String[0]; - - /* Validate converting textual address to binary format. */ - if (ares_inet_pton(AF_INET, txtaddr, &namesrvr.addrV4) == 1) - { - if ((namesrvr.addrV4.S_un.S_addr == INADDR_ANY) || - (namesrvr.addrV4.S_un.S_addr == INADDR_NONE)) - continue; - } - else if (ares_inet_pton(AF_INET6, txtaddr, &namesrvr.addrV6) == 1) - { - if (memcmp(&namesrvr.addrV6, &ares_in6addr_any, - sizeof(namesrvr.addrV6)) == 0) - continue; - } - else - continue; - - commajoin(outptr, txtaddr); - - if (!*outptr) - break; - } - -done: - if (fi) - ares_free(fi); - - if (!*outptr) - return 0; - - return 1; -} - -static BOOL ares_IsWindowsVistaOrGreater(void) -{ - OSVERSIONINFO vinfo; - memset(&vinfo, 0, sizeof(vinfo)); - vinfo.dwOSVersionInfoSize = sizeof(vinfo); -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4996) /* warning C4996: 'GetVersionExW': was declared deprecated */ -#endif - if (!GetVersionEx(&vinfo) || vinfo.dwMajorVersion < 6) - return FALSE; - return TRUE; -#ifdef _MSC_VER -#pragma warning(pop) -#endif -} - -/* A structure to hold the string form of IPv4 and IPv6 addresses so we can - * sort them by a metric. - */ -typedef struct -{ - /* The metric we sort them by. */ - ULONG metric; - - /* Original index of the item, used as a secondary sort parameter to make - * qsort() stable if the metrics are equal */ - size_t orig_idx; - - /* Room enough for the string form of any IPv4 or IPv6 address that - * ares_inet_ntop() will create. Based on the existing c-ares practice. - */ - char text[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; -} Address; - -/* Sort Address values \a left and \a right by metric, returning the usual - * indicators for qsort(). - */ -static int compareAddresses(const void *arg1, - const void *arg2) -{ - const Address * const left = arg1; - const Address * const right = arg2; - /* Lower metric the more preferred */ - if(left->metric < right->metric) return -1; - if(left->metric > right->metric) return 1; - /* If metrics are equal, lower original index more preferred */ - if(left->orig_idx < right->orig_idx) return -1; - if(left->orig_idx > right->orig_idx) return 1; - return 0; -} - -/* There can be multiple routes to "the Internet". And there can be different - * DNS servers associated with each of the interfaces that offer those routes. - * We have to assume that any DNS server can serve any request. But, some DNS - * servers may only respond if requested over their associated interface. But - * we also want to use "the preferred route to the Internet" whenever possible - * (and not use DNS servers on a non-preferred route even by forcing request - * to go out on the associated non-preferred interface). i.e. We want to use - * the DNS servers associated with the same interface that we would use to - * make a general request to anything else. - * - * But, Windows won't sort the DNS servers by the metrics associated with the - * routes and interfaces _even_ though it obviously sends IP packets based on - * those same routes and metrics. So, we must do it ourselves. - * - * So, we sort the DNS servers by the same metric values used to determine how - * an outgoing IP packet will go, thus effectively using the DNS servers - * associated with the interface that the DNS requests themselves will - * travel. This gives us optimal routing and avoids issues where DNS servers - * won't respond to requests that don't arrive via some specific subnetwork - * (and thus some specific interface). - * - * This function computes the metric we use to sort. On the interface - * identified by \a luid, it determines the best route to \a dest and combines - * that route's metric with \a interfaceMetric to compute a metric for the - * destination address on that interface. This metric can be used as a weight - * to sort the DNS server addresses associated with each interface (lower is - * better). - * - * Note that by restricting the route search to the specific interface with - * which the DNS servers are associated, this function asks the question "What - * is the metric for sending IP packets to this DNS server?" which allows us - * to sort the DNS servers correctly. - */ -static ULONG getBestRouteMetric(IF_LUID * const luid, /* Can't be const :( */ - const SOCKADDR_INET * const dest, - const ULONG interfaceMetric) -{ - /* On this interface, get the best route to that destination. */ - MIB_IPFORWARD_ROW2 row; - SOCKADDR_INET ignored; - if(!ares_fpGetBestRoute2 || - ares_fpGetBestRoute2(/* The interface to use. The index is ignored since we are - * passing a LUID. - */ - luid, 0, - /* No specific source address. */ - NULL, - /* Our destination address. */ - dest, - /* No options. */ - 0, - /* The route row. */ - &row, - /* The best source address, which we don't need. */ - &ignored) != NO_ERROR - /* If the metric is "unused" (-1) or too large for us to add the two - * metrics, use the worst possible, thus sorting this last. - */ - || row.Metric == (ULONG)-1 - || row.Metric > ((ULONG)-1) - interfaceMetric) { - /* Return the worst possible metric. */ - return (ULONG)-1; - } - - /* Return the metric value from that row, plus the interface metric. - * - * See - * http://msdn.microsoft.com/en-us/library/windows/desktop/aa814494(v=vs.85).aspx - * which describes the combination as a "sum". - */ - return row.Metric + interfaceMetric; -} - -/* - * get_DNS_AdaptersAddresses() - * - * Locates DNS info using GetAdaptersAddresses() function from the Internet - * Protocol Helper (IP Helper) API. When located, this returns a pointer - * in *outptr to a newly allocated memory area holding a null-terminated - * string with a space or comma seperated list of DNS IP addresses. - * - * Returns 0 and nullifies *outptr upon inability to return DNSes string. - * - * Returns 1 and sets *outptr when returning a dynamically allocated string. - * - * Implementation supports Windows XP and newer. - */ -#define IPAA_INITIAL_BUF_SZ 15 * 1024 -#define IPAA_MAX_TRIES 3 -static int get_DNS_AdaptersAddresses(char **outptr) -{ - IP_ADAPTER_DNS_SERVER_ADDRESS *ipaDNSAddr; - IP_ADAPTER_ADDRESSES *ipaa, *newipaa, *ipaaEntry; - ULONG ReqBufsz = IPAA_INITIAL_BUF_SZ; - ULONG Bufsz = IPAA_INITIAL_BUF_SZ; - ULONG AddrFlags = 0; - int trying = IPAA_MAX_TRIES; - int res; - - /* The capacity of addresses, in elements. */ - size_t addressesSize; - /* The number of elements in addresses. */ - size_t addressesIndex = 0; - /* The addresses we will sort. */ - Address *addresses; - - union { - struct sockaddr *sa; - struct sockaddr_in *sa4; - struct sockaddr_in6 *sa6; - } namesrvr; - - *outptr = NULL; - - /* Verify run-time availability of GetAdaptersAddresses() */ - if (ares_fpGetAdaptersAddresses == ZERO_NULL) - return 0; - - ipaa = ares_malloc(Bufsz); - if (!ipaa) - return 0; - - /* Start with enough room for a few DNS server addresses and we'll grow it - * as we encounter more. - */ - addressesSize = 4; - addresses = (Address*)ares_malloc(sizeof(Address) * addressesSize); - if(addresses == NULL) { - /* We need room for at least some addresses to function. */ - ares_free(ipaa); - return 0; - } - - /* Usually this call suceeds with initial buffer size */ - res = (*ares_fpGetAdaptersAddresses) (AF_UNSPEC, AddrFlags, NULL, - ipaa, &ReqBufsz); - if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS)) - goto done; - - while ((res == ERROR_BUFFER_OVERFLOW) && (--trying)) - { - if (Bufsz < ReqBufsz) - { - newipaa = ares_realloc(ipaa, ReqBufsz); - if (!newipaa) - goto done; - Bufsz = ReqBufsz; - ipaa = newipaa; - } - res = (*ares_fpGetAdaptersAddresses) (AF_UNSPEC, AddrFlags, NULL, - ipaa, &ReqBufsz); - if (res == ERROR_SUCCESS) - break; - } - if (res != ERROR_SUCCESS) - goto done; - - for (ipaaEntry = ipaa; ipaaEntry; ipaaEntry = ipaaEntry->Next) - { - if(ipaaEntry->OperStatus != IfOperStatusUp) - continue; - - /* For each interface, find any associated DNS servers as IPv4 or IPv6 - * addresses. For each found address, find the best route to that DNS - * server address _on_ _that_ _interface_ (at this moment in time) and - * compute the resulting total metric, just as Windows routing will do. - * Then, sort all the addresses found by the metric. - */ - for (ipaDNSAddr = ipaaEntry->FirstDnsServerAddress; - ipaDNSAddr; - ipaDNSAddr = ipaDNSAddr->Next) - { - namesrvr.sa = ipaDNSAddr->Address.lpSockaddr; - - if (namesrvr.sa->sa_family == AF_INET) - { - if ((namesrvr.sa4->sin_addr.S_un.S_addr == INADDR_ANY) || - (namesrvr.sa4->sin_addr.S_un.S_addr == INADDR_NONE)) - continue; - - /* Allocate room for another address, if necessary, else skip. */ - if(addressesIndex == addressesSize) { - const size_t newSize = addressesSize + 4; - Address * const newMem = - (Address*)ares_realloc(addresses, sizeof(Address) * newSize); - if(newMem == NULL) { - continue; - } - addresses = newMem; - addressesSize = newSize; - } - - /* Vista required for Luid or Ipv4Metric */ - if (ares_IsWindowsVistaOrGreater()) - { - /* Save the address as the next element in addresses. */ - addresses[addressesIndex].metric = - getBestRouteMetric(&ipaaEntry->Luid, - (SOCKADDR_INET*)(namesrvr.sa), - ipaaEntry->Ipv4Metric); - } - else - { - addresses[addressesIndex].metric = (ULONG)-1; - } - - /* Record insertion index to make qsort stable */ - addresses[addressesIndex].orig_idx = addressesIndex; - - if (! ares_inet_ntop(AF_INET, &namesrvr.sa4->sin_addr, - addresses[addressesIndex].text, - sizeof(addresses[0].text))) { - continue; - } - ++addressesIndex; - } - else if (namesrvr.sa->sa_family == AF_INET6) - { - if (memcmp(&namesrvr.sa6->sin6_addr, &ares_in6addr_any, - sizeof(namesrvr.sa6->sin6_addr)) == 0) - continue; - - /* Allocate room for another address, if necessary, else skip. */ - if(addressesIndex == addressesSize) { - const size_t newSize = addressesSize + 4; - Address * const newMem = - (Address*)ares_realloc(addresses, sizeof(Address) * newSize); - if(newMem == NULL) { - continue; - } - addresses = newMem; - addressesSize = newSize; - } - - /* Vista required for Luid or Ipv4Metric */ - if (ares_IsWindowsVistaOrGreater()) - { - /* Save the address as the next element in addresses. */ - addresses[addressesIndex].metric = - getBestRouteMetric(&ipaaEntry->Luid, - (SOCKADDR_INET*)(namesrvr.sa), - ipaaEntry->Ipv6Metric); - } - else - { - addresses[addressesIndex].metric = (ULONG)-1; - } - - /* Record insertion index to make qsort stable */ - addresses[addressesIndex].orig_idx = addressesIndex; - - if (! ares_inet_ntop(AF_INET6, &namesrvr.sa6->sin6_addr, - addresses[addressesIndex].text, - sizeof(addresses[0].text))) { - continue; - } - ++addressesIndex; - } - else { - /* Skip non-IPv4/IPv6 addresses completely. */ - continue; - } - } - } - - /* Sort all of the textual addresses by their metric (and original index if - * metrics are equal). */ - qsort(addresses, addressesIndex, sizeof(*addresses), compareAddresses); - - /* Join them all into a single string, removing duplicates. */ - { - size_t i; - for(i = 0; i < addressesIndex; ++i) { - size_t j; - /* Look for this address text appearing previously in the results. */ - for(j = 0; j < i; ++j) { - if(strcmp(addresses[j].text, addresses[i].text) == 0) { - break; - } - } - /* Iff we didn't emit this address already, emit it now. */ - if(j == i) { - /* Add that to outptr (if we can). */ - commajoin(outptr, addresses[i].text); - } - } - } - -done: - ares_free(addresses); - - if (ipaa) - ares_free(ipaa); - - if (!*outptr) { - return 0; - } - - return 1; -} - -/* - * get_DNS_Windows() - * - * Locates DNS info from Windows employing most suitable methods available at - * run-time no matter which Windows version it is. When located, this returns - * a pointer in *outptr to a newly allocated memory area holding a string with - * a space or comma seperated list of DNS IP addresses, null-terminated. - * - * Returns 0 and nullifies *outptr upon inability to return DNSes string. - * - * Returns 1 and sets *outptr when returning a dynamically allocated string. - * - * Implementation supports Windows 95 and newer. - */ -static int get_DNS_Windows(char **outptr) -{ - /* Try using IP helper API GetAdaptersAddresses(). IPv4 + IPv6, also sorts - * DNS servers by interface route metrics to try to use the best DNS server. */ - if (get_DNS_AdaptersAddresses(outptr)) - return 1; - - /* Try using IP helper API GetNetworkParams(). IPv4 only. */ - if (get_DNS_NetworkParams(outptr)) - return 1; - - /* Fall-back to registry information */ - return get_DNS_Registry(outptr); -} - -/* - * get_SuffixList_Windows() - * - * Reads the "DNS Suffix Search List" from registry and writes the list items - * whitespace separated to outptr. If the Search List is empty, the - * "Primary Dns Suffix" is written to outptr. - * - * Returns 0 and nullifies *outptr upon inability to return the suffix list. - * - * Returns 1 and sets *outptr when returning a dynamically allocated string. - * - * Implementation supports Windows Server 2003 and newer - */ -static int get_SuffixList_Windows(char **outptr) -{ - HKEY hKey, hKeyEnum; - char keyName[256]; - DWORD keyNameBuffSize; - DWORD keyIdx = 0; - char *p = NULL; - - *outptr = NULL; - - if (ares__getplatform() != WIN_NT) - return 0; - - /* 1. Global DNS Suffix Search List */ - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, - KEY_READ, &hKey) == ERROR_SUCCESS) - { - get_REG_SZ(hKey, SEARCHLIST_KEY, outptr); - if (get_REG_SZ(hKey, DOMAIN_KEY, &p)) - { - commajoin(outptr, p); - ares_free(p); - p = NULL; - } - RegCloseKey(hKey); - } - - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NT_DNSCLIENT, 0, - KEY_READ, &hKey) == ERROR_SUCCESS) - { - if (get_REG_SZ(hKey, SEARCHLIST_KEY, &p)) - { - commajoin(outptr, p); - ares_free(p); - p = NULL; - } - RegCloseKey(hKey); - } - - /* 2. Connection Specific Search List composed of: - * a. Primary DNS Suffix */ - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_DNSCLIENT, 0, - KEY_READ, &hKey) == ERROR_SUCCESS) - { - if (get_REG_SZ(hKey, PRIMARYDNSSUFFIX_KEY, &p)) - { - commajoin(outptr, p); - ares_free(p); - p = NULL; - } - RegCloseKey(hKey); - } - - /* b. Interface SearchList, Domain, DhcpDomain */ - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY "\\" INTERFACES_KEY, 0, - KEY_READ, &hKey) == ERROR_SUCCESS) - { - for(;;) - { - keyNameBuffSize = sizeof(keyName); - if (RegEnumKeyExA(hKey, keyIdx++, keyName, &keyNameBuffSize, - 0, NULL, NULL, NULL) - != ERROR_SUCCESS) - break; - if (RegOpenKeyExA(hKey, keyName, 0, KEY_QUERY_VALUE, &hKeyEnum) - != ERROR_SUCCESS) - continue; - /* p can be comma separated (SearchList) */ - if (get_REG_SZ(hKeyEnum, SEARCHLIST_KEY, &p)) - { - commajoin(outptr, p); - ares_free(p); - p = NULL; - } - if (get_REG_SZ(hKeyEnum, DOMAIN_KEY, &p)) - { - commajoin(outptr, p); - ares_free(p); - p = NULL; - } - if (get_REG_SZ(hKeyEnum, DHCPDOMAIN_KEY, &p)) - { - commajoin(outptr, p); - ares_free(p); - p = NULL; - } - RegCloseKey(hKeyEnum); - } - RegCloseKey(hKey); - } - - return *outptr != NULL; -} - -#endif - -static int init_by_resolv_conf(ares_channel channel) -{ -#if !defined(ANDROID) && !defined(__ANDROID__) && !defined(WATT32) && \ - !defined(CARES_USE_LIBRESOLV) - char *line = NULL; -#endif - int status = -1, nservers = 0, nsort = 0; - struct server_state *servers = NULL; - struct apattern *sortlist = NULL; - -#ifdef WIN32 - - if (channel->nservers > -1) /* don't override ARES_OPT_SERVER */ - return ARES_SUCCESS; - - if (get_DNS_Windows(&line)) - { - status = config_nameserver(&servers, &nservers, line); - ares_free(line); - } - - if (channel->ndomains == -1 && get_SuffixList_Windows(&line)) - { - status = set_search(channel, line); - ares_free(line); - } - - if (status == ARES_SUCCESS) - status = ARES_EOF; - else - /* Catch the case when all the above checks fail (which happens when there - is no network card or the cable is unplugged) */ - status = ARES_EFILE; - -#elif defined(__riscos__) - - /* Under RISC OS, name servers are listed in the - system variable Inet$Resolvers, space separated. */ - - line = getenv("Inet$Resolvers"); - status = ARES_EOF; - if (line) { - char *resolvers = ares_strdup(line), *pos, *space; - - if (!resolvers) - return ARES_ENOMEM; - - pos = resolvers; - do { - space = strchr(pos, ' '); - if (space) - *space = '\0'; - status = config_nameserver(&servers, &nservers, pos); - if (status != ARES_SUCCESS) - break; - pos = space + 1; - } while (space); - - if (status == ARES_SUCCESS) - status = ARES_EOF; - - ares_free(resolvers); - } - -#elif defined(WATT32) - int i; - - sock_init(); - for (i = 0; def_nameservers[i]; i++) - ; - if (i == 0) - return ARES_SUCCESS; /* use localhost DNS server */ - - nservers = i; - servers = ares_malloc(sizeof(struct server_state)); - if (!servers) - return ARES_ENOMEM; - memset(servers, 0, sizeof(struct server_state)); - - for (i = 0; def_nameservers[i]; i++) - { - servers[i].addr.addrV4.s_addr = htonl(def_nameservers[i]); - servers[i].addr.family = AF_INET; - servers[i].addr.udp_port = 0; - servers[i].addr.tcp_port = 0; - } - status = ARES_EOF; - -#elif defined(ANDROID) || defined(__ANDROID__) - unsigned int i; - char **dns_servers; - char *domains; - size_t num_servers; - - /* Use the Android connectivity manager to get a list - * of DNS servers. As of Android 8 (Oreo) net.dns# - * system properties are no longer available. Google claims this - * improves privacy. Apps now need the ACCESS_NETWORK_STATE - * permission and must use the ConnectivityManager which - * is Java only. */ - dns_servers = ares_get_android_server_list(MAX_DNS_PROPERTIES, &num_servers); - if (dns_servers != NULL) - { - for (i = 0; i < num_servers; i++) - { - status = config_nameserver(&servers, &nservers, dns_servers[i]); - if (status != ARES_SUCCESS) - break; - status = ARES_EOF; - } - for (i = 0; i < num_servers; i++) - { - ares_free(dns_servers[i]); - } - ares_free(dns_servers); - } - if (channel->ndomains == -1) - { - domains = ares_get_android_search_domains_list(); - set_search(channel, domains); - ares_free(domains); - } - -# ifdef HAVE___SYSTEM_PROPERTY_GET - /* Old way using the system property still in place as - * a fallback. Older android versions can still use this. - * it's possible for older apps not not have added the new - * permission and we want to try to avoid breaking those. - * - * We'll only run this if we don't have any dns servers - * because this will get the same ones (if it works). */ - if (status != ARES_EOF) { - char propname[PROP_NAME_MAX]; - char propvalue[PROP_VALUE_MAX]=""; - for (i = 1; i <= MAX_DNS_PROPERTIES; i++) { - snprintf(propname, sizeof(propname), "%s%u", DNS_PROP_NAME_PREFIX, i); - if (__system_property_get(propname, propvalue) < 1) { - status = ARES_EOF; - break; - } - - status = config_nameserver(&servers, &nservers, propvalue); - if (status != ARES_SUCCESS) - break; - status = ARES_EOF; - } - } -# endif /* HAVE___SYSTEM_PROPERTY_GET */ -#elif defined(CARES_USE_LIBRESOLV) - struct __res_state res; - memset(&res, 0, sizeof(res)); - int result = res_ninit(&res); - if (result == 0 && (res.options & RES_INIT)) { - status = ARES_EOF; - - if (channel->nservers == -1) { - union res_sockaddr_union addr[MAXNS]; - int nscount = res_getservers(&res, addr, MAXNS); - for (int i = 0; i < nscount; ++i) { - char str[INET6_ADDRSTRLEN]; - int config_status; - sa_family_t family = addr[i].sin.sin_family; - if (family == AF_INET) { - ares_inet_ntop(family, &addr[i].sin.sin_addr, str, sizeof(str)); - } else if (family == AF_INET6) { - ares_inet_ntop(family, &addr[i].sin6.sin6_addr, str, sizeof(str)); - } else { - continue; - } - - config_status = config_nameserver(&servers, &nservers, str); - if (config_status != ARES_SUCCESS) { - status = config_status; - break; - } - } - } - if (channel->ndomains == -1) { - int entries = 0; - while ((entries < MAXDNSRCH) && res.dnsrch[entries]) - entries++; - - channel->domains = ares_malloc(entries * sizeof(char *)); - if (!channel->domains) { - status = ARES_ENOMEM; - } else { - channel->ndomains = entries; - for (int i = 0; i < channel->ndomains; ++i) { - channel->domains[i] = ares_strdup(res.dnsrch[i]); - if (!channel->domains[i]) - status = ARES_ENOMEM; - } - } - } - if (channel->ndots == -1) - channel->ndots = res.ndots; - if (channel->tries == -1) - channel->tries = res.retry; - if (channel->rotate == -1) - channel->rotate = res.options & RES_ROTATE; - if (channel->timeout == -1) - channel->timeout = res.retrans * 1000; - - res_ndestroy(&res); - } -#else - { - char *p; - FILE *fp; - size_t linesize; - int error; - int update_domains; - const char *resolvconf_path; - - /* Don't read resolv.conf and friends if we don't have to */ - if (ARES_CONFIG_CHECK(channel)) - return ARES_SUCCESS; - - /* Only update search domains if they're not already specified */ - update_domains = (channel->ndomains == -1); - - /* Support path for resolvconf filename set by ares_init_options */ - if(channel->resolvconf_path) { - resolvconf_path = channel->resolvconf_path; - } else { - resolvconf_path = PATH_RESOLV_CONF; - } - - fp = fopen(resolvconf_path, "r"); - if (fp) { - while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) - { - if ((p = try_config(line, "domain", ';')) && update_domains) - status = config_domain(channel, p); - else if ((p = try_config(line, "lookup", ';')) && !channel->lookups) - status = config_lookup(channel, p, "bind", NULL, "file"); - else if ((p = try_config(line, "search", ';')) && update_domains) - status = set_search(channel, p); - else if ((p = try_config(line, "nameserver", ';')) && - channel->nservers == -1) - status = config_nameserver(&servers, &nservers, p); - else if ((p = try_config(line, "sortlist", ';')) && - channel->nsort == -1) - status = config_sortlist(&sortlist, &nsort, p); - else if ((p = try_config(line, "options", ';'))) - status = set_options(channel, p); - else - status = ARES_SUCCESS; - if (status != ARES_SUCCESS) - break; - } - fclose(fp); - } - else { - error = ERRNO; - switch(error) { - case ENOENT: - case ESRCH: - status = ARES_EOF; - break; - default: - DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error))); - DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_RESOLV_CONF)); - status = ARES_EFILE; - } - } - - if ((status == ARES_EOF) && (!channel->lookups)) { - /* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */ - fp = fopen("/etc/nsswitch.conf", "r"); - if (fp) { - while ((status = ares__read_line(fp, &line, &linesize)) == - ARES_SUCCESS) - { - if ((p = try_config(line, "hosts:", '\0')) && !channel->lookups) - (void)config_lookup(channel, p, "dns", "resolve", "files"); - } - fclose(fp); - } - else { - error = ERRNO; - switch(error) { - case ENOENT: - case ESRCH: - break; - default: - DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error))); - DEBUGF(fprintf(stderr, "Error opening file: %s\n", - "/etc/nsswitch.conf")); - } - - /* ignore error, maybe we will get luck in next if clause */ - status = ARES_EOF; - } - } - - if ((status == ARES_EOF) && (!channel->lookups)) { - /* Linux / GNU libc 2.x and possibly others have host.conf */ - fp = fopen("/etc/host.conf", "r"); - if (fp) { - while ((status = ares__read_line(fp, &line, &linesize)) == - ARES_SUCCESS) - { - if ((p = try_config(line, "order", '\0')) && !channel->lookups) - /* ignore errors */ - (void)config_lookup(channel, p, "bind", NULL, "hosts"); - } - fclose(fp); - } - else { - error = ERRNO; - switch(error) { - case ENOENT: - case ESRCH: - break; - default: - DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error))); - DEBUGF(fprintf(stderr, "Error opening file: %s\n", - "/etc/host.conf")); - } - - /* ignore error, maybe we will get luck in next if clause */ - status = ARES_EOF; - } - } - - if ((status == ARES_EOF) && (!channel->lookups)) { - /* Tru64 uses /etc/svc.conf */ - fp = fopen("/etc/svc.conf", "r"); - if (fp) { - while ((status = ares__read_line(fp, &line, &linesize)) == - ARES_SUCCESS) - { - if ((p = try_config(line, "hosts=", '\0')) && !channel->lookups) - /* ignore errors */ - (void)config_lookup(channel, p, "bind", NULL, "local"); - } - fclose(fp); - } - else { - error = ERRNO; - switch(error) { - case ENOENT: - case ESRCH: - break; - default: - DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error))); - DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/svc.conf")); - } - - /* ignore error, default value will be chosen for `channel->lookups` */ - status = ARES_EOF; - } - } - - if(line) - ares_free(line); - } - -#endif - - /* Handle errors. */ - if (status != ARES_EOF) - { - if (servers != NULL) - ares_free(servers); - if (sortlist != NULL) - ares_free(sortlist); - return status; - } - - /* If we got any name server entries, fill them in. */ - if (servers) - { - channel->servers = servers; - channel->nservers = nservers; - } - - /* If we got any sortlist entries, fill them in. */ - if (sortlist) - { - channel->sortlist = sortlist; - channel->nsort = nsort; - } - - return ARES_SUCCESS; -} - -static int init_by_defaults(ares_channel channel) -{ - char *hostname = NULL; - int rc = ARES_SUCCESS; -#ifdef HAVE_GETHOSTNAME - char *dot; -#endif - - if (channel->flags == -1) - channel->flags = 0; - if (channel->timeout == -1) - channel->timeout = DEFAULT_TIMEOUT; - if (channel->tries == -1) - channel->tries = DEFAULT_TRIES; - if (channel->ndots == -1) - channel->ndots = 1; - if (channel->rotate == -1) - channel->rotate = 0; - if (channel->udp_port == -1) - channel->udp_port = htons(NAMESERVER_PORT); - if (channel->tcp_port == -1) - channel->tcp_port = htons(NAMESERVER_PORT); - - if (channel->ednspsz == -1) - channel->ednspsz = EDNSPACKETSZ; - - if (channel->nservers == -1) { - /* If nobody specified servers, try a local named. */ - channel->servers = ares_malloc(sizeof(struct server_state)); - if (!channel->servers) { - rc = ARES_ENOMEM; - goto error; - } - channel->servers[0].addr.family = AF_INET; - channel->servers[0].addr.addrV4.s_addr = htonl(INADDR_LOOPBACK); - channel->servers[0].addr.udp_port = 0; - channel->servers[0].addr.tcp_port = 0; - channel->nservers = 1; - } - -#if defined(USE_WINSOCK) -#define toolong(x) (x == -1) && (SOCKERRNO == WSAEFAULT) -#elif defined(ENAMETOOLONG) -#define toolong(x) (x == -1) && ((SOCKERRNO == ENAMETOOLONG) || \ - (SOCKERRNO == EINVAL)) -#else -#define toolong(x) (x == -1) && (SOCKERRNO == EINVAL) -#endif - - if (channel->ndomains == -1) { - /* Derive a default domain search list from the kernel hostname, - * or set it to empty if the hostname isn't helpful. - */ -#ifndef HAVE_GETHOSTNAME - channel->ndomains = 0; /* default to none */ -#else - GETHOSTNAME_TYPE_ARG2 lenv = 64; - size_t len = 64; - int res; - channel->ndomains = 0; /* default to none */ - - hostname = ares_malloc(len); - if(!hostname) { - rc = ARES_ENOMEM; - goto error; - } - - do { - res = gethostname(hostname, lenv); - - if(toolong(res)) { - char *p; - len *= 2; - lenv *= 2; - p = ares_realloc(hostname, len); - if(!p) { - rc = ARES_ENOMEM; - goto error; - } - hostname = p; - continue; - } - else if(res) { - /* Lets not treat a gethostname failure as critical, since we - * are ok if gethostname doesn't even exist */ - *hostname = '\0'; - break; - } - - } while (res != 0); - - dot = strchr(hostname, '.'); - if (dot) { - /* a dot was found */ - channel->domains = ares_malloc(sizeof(char *)); - if (!channel->domains) { - rc = ARES_ENOMEM; - goto error; - } - channel->domains[0] = ares_strdup(dot + 1); - if (!channel->domains[0]) { - rc = ARES_ENOMEM; - goto error; - } - channel->ndomains = 1; - } -#endif - } - - if (channel->nsort == -1) { - channel->sortlist = NULL; - channel->nsort = 0; - } - - if (!channel->lookups) { - channel->lookups = ares_strdup("fb"); - if (!channel->lookups) - rc = ARES_ENOMEM; - } - - error: - if(rc) { - if(channel->servers) { - ares_free(channel->servers); - channel->servers = NULL; - } - - if(channel->domains && channel->domains[0]) - ares_free(channel->domains[0]); - if(channel->domains) { - ares_free(channel->domains); - channel->domains = NULL; - } - - if(channel->lookups) { - ares_free(channel->lookups); - channel->lookups = NULL; - } - - if(channel->resolvconf_path) { - ares_free(channel->resolvconf_path); - channel->resolvconf_path = NULL; - } - } - - if(hostname) - ares_free(hostname); - - return rc; -} - -#if !defined(WIN32) && !defined(WATT32) && \ - !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV) -static int config_domain(ares_channel channel, char *str) -{ - char *q; - - /* Set a single search domain. */ - q = str; - while (*q && !ISSPACE(*q)) - q++; - *q = '\0'; - return set_search(channel, str); -} - -#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 910) && \ - defined(__OPTIMIZE__) && defined(__unix__) && defined(__i386__) - /* workaround icc 9.1 optimizer issue */ -# define vqualifier volatile -#else -# define vqualifier -#endif - -static int config_lookup(ares_channel channel, const char *str, - const char *bindch, const char *altbindch, - const char *filech) -{ - char lookups[3], *l; - const char *vqualifier p; - int found; - - if (altbindch == NULL) - altbindch = bindch; - - /* Set the lookup order. Only the first letter of each work - * is relevant, and it has to be "b" for DNS or "f" for the - * host file. Ignore everything else. - */ - l = lookups; - p = str; - found = 0; - while (*p) - { - if ((*p == *bindch || *p == *altbindch || *p == *filech) && l < lookups + 2) { - if (*p == *bindch || *p == *altbindch) *l++ = 'b'; - else *l++ = 'f'; - found = 1; - } - while (*p && !ISSPACE(*p) && (*p != ',')) - p++; - while (*p && (ISSPACE(*p) || (*p == ','))) - p++; - } - if (!found) - return ARES_ENOTINITIALIZED; - *l = '\0'; - channel->lookups = ares_strdup(lookups); - return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM; -} -#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ & !CARES_USE_LIBRESOLV */ - -#ifndef WATT32 -/* Validate that the ip address matches the subnet (network base and network - * mask) specified. Addresses are specified in standard Network Byte Order as - * 16 bytes, and the netmask is 0 to 128 (bits). - */ -static int ares_ipv6_subnet_matches(const unsigned char netbase[16], - unsigned char netmask, - const unsigned char ipaddr[16]) -{ - unsigned char mask[16] = { 0 }; - unsigned char i; - - /* Misuse */ - if (netmask > 128) - return 0; - - /* Quickly set whole bytes */ - memset(mask, 0xFF, netmask / 8); - - /* Set remaining bits */ - if(netmask % 8) { - mask[netmask / 8] = (unsigned char)(0xff << (8 - (netmask % 8))); - } - - for (i=0; i<16; i++) { - if ((netbase[i] & mask[i]) != (ipaddr[i] & mask[i])) - return 0; - } - - return 1; -} - -/* Return true iff the IPv6 ipaddr is blacklisted. */ -static int ares_ipv6_server_blacklisted(const unsigned char ipaddr[16]) -{ - /* A list of blacklisted IPv6 subnets. */ - const struct { - const unsigned char netbase[16]; - unsigned char netmask; - } blacklist[] = { - /* fec0::/10 was deprecated by [RFC3879] in September 2004. Formerly a - * Site-Local scoped address prefix. These are never valid DNS servers, - * but are known to be returned at least sometimes on Windows and Android. - */ - { - { - 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }, - 10 - } - }; - size_t i; - - /* See if ipaddr matches any of the entries in the blacklist. */ - for (i = 0; i < sizeof(blacklist) / sizeof(blacklist[0]); ++i) { - if (ares_ipv6_subnet_matches( - blacklist[i].netbase, blacklist[i].netmask, ipaddr)) - return 1; - } - return 0; -} - -/* Add the IPv4 or IPv6 nameservers in str (separated by commas) to the - * servers list, updating servers and nservers as required. - * - * This will silently ignore blacklisted IPv6 nameservers as detected by - * ares_ipv6_server_blacklisted(). - * - * Returns an error code on failure, else ARES_SUCCESS. - */ -static int config_nameserver(struct server_state **servers, int *nservers, - char *str) -{ - struct ares_addr host; - struct server_state *newserv; - char *p, *txtaddr; - /* On Windows, there may be more than one nameserver specified in the same - * registry key, so we parse input as a space or comma seperated list. - */ - for (p = str; p;) - { - /* Skip whitespace and commas. */ - while (*p && (ISSPACE(*p) || (*p == ','))) - p++; - if (!*p) - /* No more input, done. */ - break; - - /* Pointer to start of IPv4 or IPv6 address part. */ - txtaddr = p; - - /* Advance past this address. */ - while (*p && !ISSPACE(*p) && (*p != ',')) - p++; - if (*p) - /* Null terminate this address. */ - *p++ = '\0'; - else - /* Reached end of input, done when this address is processed. */ - p = NULL; - - /* Convert textual address to binary format. */ - if (ares_inet_pton(AF_INET, txtaddr, &host.addrV4) == 1) - host.family = AF_INET; - else if (ares_inet_pton(AF_INET6, txtaddr, &host.addrV6) == 1 - /* Silently skip blacklisted IPv6 servers. */ - && !ares_ipv6_server_blacklisted( - (const unsigned char *)&host.addrV6)) - host.family = AF_INET6; - else - continue; - - /* Resize servers state array. */ - newserv = ares_realloc(*servers, (*nservers + 1) * - sizeof(struct server_state)); - if (!newserv) - return ARES_ENOMEM; - - /* Store address data. */ - newserv[*nservers].addr.family = host.family; - newserv[*nservers].addr.udp_port = 0; - newserv[*nservers].addr.tcp_port = 0; - if (host.family == AF_INET) - memcpy(&newserv[*nservers].addr.addrV4, &host.addrV4, - sizeof(host.addrV4)); - else - memcpy(&newserv[*nservers].addr.addrV6, &host.addrV6, - sizeof(host.addrV6)); - - /* Update arguments. */ - *servers = newserv; - *nservers += 1; - } - - return ARES_SUCCESS; -} -#endif /* !WATT32 */ - -static int config_sortlist(struct apattern **sortlist, int *nsort, - const char *str) -{ - struct apattern pat; - const char *q; - - /* Add sortlist entries. */ - while (*str && *str != ';') - { - int bits; - char ipbuf[16], ipbufpfx[32]; - /* Find just the IP */ - q = str; - while (*q && *q != '/' && *q != ';' && !ISSPACE(*q)) - q++; - memcpy(ipbuf, str, q-str); - ipbuf[q-str] = '\0'; - /* Find the prefix */ - if (*q == '/') - { - const char *str2 = q+1; - while (*q && *q != ';' && !ISSPACE(*q)) - q++; - memcpy(ipbufpfx, str, q-str); - ipbufpfx[q-str] = '\0'; - str = str2; - } - else - ipbufpfx[0] = '\0'; - /* Lets see if it is CIDR */ - /* First we'll try IPv6 */ - if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx[0] ? ipbufpfx : ipbuf, - &pat.addrV6, - sizeof(pat.addrV6))) > 0) - { - pat.type = PATTERN_CIDR; - pat.mask.bits = (unsigned short)bits; - pat.family = AF_INET6; - if (!sortlist_alloc(sortlist, nsort, &pat)) { - ares_free(*sortlist); - *sortlist = NULL; - return ARES_ENOMEM; - } - } - else if (ipbufpfx[0] && - (bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addrV4, - sizeof(pat.addrV4))) > 0) - { - pat.type = PATTERN_CIDR; - pat.mask.bits = (unsigned short)bits; - pat.family = AF_INET; - if (!sortlist_alloc(sortlist, nsort, &pat)) { - ares_free(*sortlist); - *sortlist = NULL; - return ARES_ENOMEM; - } - } - /* See if it is just a regular IP */ - else if (ip_addr(ipbuf, q-str, &pat.addrV4) == 0) - { - if (ipbufpfx[0]) - { - memcpy(ipbuf, str, q-str); - ipbuf[q-str] = '\0'; - if (ip_addr(ipbuf, q-str, &pat.mask.addr4) != 0) - natural_mask(&pat); - } - else - natural_mask(&pat); - pat.family = AF_INET; - pat.type = PATTERN_MASK; - if (!sortlist_alloc(sortlist, nsort, &pat)) { - ares_free(*sortlist); - *sortlist = NULL; - return ARES_ENOMEM; - } - } - else - { - while (*q && *q != ';' && !ISSPACE(*q)) - q++; - } - str = q; - while (ISSPACE(*str)) - str++; - } - - return ARES_SUCCESS; -} - -static int set_search(ares_channel channel, const char *str) -{ - size_t cnt; - - if(channel->ndomains != -1) { - /* LCOV_EXCL_START: all callers check ndomains == -1 */ - /* if we already have some domains present, free them first */ - ares_strsplit_free(channel->domains, channel->ndomains); - channel->domains = NULL; - channel->ndomains = -1; - } /* LCOV_EXCL_STOP */ - - channel->domains = ares_strsplit(str, ", ", 1, &cnt); - channel->ndomains = (int)cnt; - if (channel->domains == NULL || channel->ndomains == 0) { - channel->domains = NULL; - channel->ndomains = -1; - } - - return ARES_SUCCESS; -} - -static int set_options(ares_channel channel, const char *str) -{ - const char *p, *q, *val; - - p = str; - while (*p) - { - q = p; - while (*q && !ISSPACE(*q)) - q++; - val = try_option(p, q, "ndots:"); - if (val && channel->ndots == -1) - channel->ndots = aresx_sltosi(strtol(val, NULL, 10)); - val = try_option(p, q, "retrans:"); - if (val && channel->timeout == -1) - channel->timeout = aresx_sltosi(strtol(val, NULL, 10)); - val = try_option(p, q, "retry:"); - if (val && channel->tries == -1) - channel->tries = aresx_sltosi(strtol(val, NULL, 10)); - val = try_option(p, q, "rotate"); - if (val && channel->rotate == -1) - channel->rotate = 1; - p = q; - while (ISSPACE(*p)) - p++; - } - - return ARES_SUCCESS; -} - -static const char *try_option(const char *p, const char *q, const char *opt) -{ - size_t len = strlen(opt); - return ((size_t)(q - p) >= len && !strncmp(p, opt, len)) ? &p[len] : NULL; -} - -#if !defined(WIN32) && !defined(WATT32) && \ - !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV) -static char *try_config(char *s, const char *opt, char scc) -{ - size_t len; - char *p; - char *q; - - if (!s || !opt) - /* no line or no option */ - return NULL; /* LCOV_EXCL_LINE */ - - /* Hash '#' character is always used as primary comment char, additionally - a not-NUL secondary comment char will be considered when specified. */ - - /* trim line comment */ - p = s; - if(scc) - while (*p && (*p != '#') && (*p != scc)) - p++; - else - while (*p && (*p != '#')) - p++; - *p = '\0'; - - /* trim trailing whitespace */ - q = p - 1; - while ((q >= s) && ISSPACE(*q)) - q--; - *++q = '\0'; - - /* skip leading whitespace */ - p = s; - while (*p && ISSPACE(*p)) - p++; - - if (!*p) - /* empty line */ - return NULL; - - if ((len = strlen(opt)) == 0) - /* empty option */ - return NULL; /* LCOV_EXCL_LINE */ - - if (strncmp(p, opt, len) != 0) - /* line and option do not match */ - return NULL; - - /* skip over given option name */ - p += len; - - if (!*p) - /* no option value */ - return NULL; /* LCOV_EXCL_LINE */ - - if ((opt[len-1] != ':') && (opt[len-1] != '=') && !ISSPACE(*p)) - /* whitespace between option name and value is mandatory - for given option names which do not end with ':' or '=' */ - return NULL; - - /* skip over whitespace */ - while (*p && ISSPACE(*p)) - p++; - - if (!*p) - /* no option value */ - return NULL; - - /* return pointer to option value */ - return p; -} -#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ */ - -static int ip_addr(const char *ipbuf, ares_ssize_t len, struct in_addr *addr) -{ - - /* Four octets and three periods yields at most 15 characters. */ - if (len > 15) - return -1; - - if (ares_inet_pton(AF_INET, ipbuf, addr) < 1) - return -1; - - return 0; -} - -static void natural_mask(struct apattern *pat) -{ - struct in_addr addr; - - /* Store a host-byte-order copy of pat in a struct in_addr. Icky, - * but portable. - */ - addr.s_addr = ntohl(pat->addrV4.s_addr); - - /* This is out of date in the CIDR world, but some people might - * still rely on it. - */ - if (IN_CLASSA(addr.s_addr)) - pat->mask.addr4.s_addr = htonl(IN_CLASSA_NET); - else if (IN_CLASSB(addr.s_addr)) - pat->mask.addr4.s_addr = htonl(IN_CLASSB_NET); - else - pat->mask.addr4.s_addr = htonl(IN_CLASSC_NET); -} - -static int sortlist_alloc(struct apattern **sortlist, int *nsort, - struct apattern *pat) -{ - struct apattern *newsort; - newsort = ares_realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern)); - if (!newsort) - return 0; - newsort[*nsort] = *pat; - *sortlist = newsort; - (*nsort)++; - return 1; -} - -/* initialize an rc4 key. If possible a cryptographically secure random key - is generated using a suitable function (for example win32's RtlGenRandom as - described in - http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx - otherwise the code defaults to cross-platform albeit less secure mechanism - using rand -*/ -static void randomize_key(unsigned char* key,int key_data_len) -{ - int randomized = 0; - int counter=0; -#ifdef WIN32 - BOOLEAN res; - if (ares_fpSystemFunction036) - { - res = (*ares_fpSystemFunction036) (key, key_data_len); - if (res) - randomized = 1; - } -#else /* !WIN32 */ -#ifdef RANDOM_FILE - FILE *f = fopen(RANDOM_FILE, "rb"); - if(f) { - counter = aresx_uztosi(fread(key, 1, key_data_len, f)); - fclose(f); - } -#endif -#endif /* WIN32 */ - - if (!randomized) { - for (;counterstate[0]; - for(counter = 0; counter < 256; counter++) - /* unnecessary AND but it keeps some compilers happier */ - state[counter] = (unsigned char)(counter & 0xff); - randomize_key(key->state,key_data_len); - key->x = 0; - key->y = 0; - index1 = 0; - index2 = 0; - for(counter = 0; counter < 256; counter++) - { - index2 = (unsigned char)((key_data_ptr[index1] + state[counter] + - index2) % 256); - ARES_SWAP_BYTE(&state[counter], &state[index2]); - - index1 = (unsigned char)((index1 + 1) % key_data_len); - } - ares_free(key_data_ptr); - return ARES_SUCCESS; -} - -void ares_set_local_ip4(ares_channel channel, unsigned int local_ip) -{ - channel->local_ip4 = local_ip; -} - -/* local_ip6 should be 16 bytes in length */ -void ares_set_local_ip6(ares_channel channel, - const unsigned char* local_ip6) -{ - memcpy(&channel->local_ip6, local_ip6, sizeof(channel->local_ip6)); -} - -/* local_dev_name should be null terminated. */ -void ares_set_local_dev(ares_channel channel, - const char* local_dev_name) -{ - strncpy(channel->local_dev_name, local_dev_name, - sizeof(channel->local_dev_name)); - channel->local_dev_name[sizeof(channel->local_dev_name) - 1] = 0; -} - - -void ares_set_socket_callback(ares_channel channel, - ares_sock_create_callback cb, - void *data) -{ - channel->sock_create_cb = cb; - channel->sock_create_cb_data = data; -} - -void ares_set_socket_configure_callback(ares_channel channel, - ares_sock_config_callback cb, - void *data) -{ - channel->sock_config_cb = cb; - channel->sock_config_cb_data = data; -} - -void ares_set_socket_functions(ares_channel channel, - const struct ares_socket_functions * funcs, - void *data) -{ - channel->sock_funcs = funcs; - channel->sock_func_cb_data = data; -} - -int ares_set_sortlist(ares_channel channel, const char *sortstr) -{ - int nsort = 0; - struct apattern *sortlist = NULL; - int status; - - if (!channel) - return ARES_ENODATA; - - status = config_sortlist(&sortlist, &nsort, sortstr); - if (status == ARES_SUCCESS && sortlist) { - if (channel->sortlist) - ares_free(channel->sortlist); - channel->sortlist = sortlist; - channel->nsort = nsort; - } - return status; -} - -void ares__init_servers_state(ares_channel channel) -{ - struct server_state *server; - int i; - - for (i = 0; i < channel->nservers; i++) - { - server = &channel->servers[i]; - server->udp_socket = ARES_SOCKET_BAD; - server->tcp_socket = ARES_SOCKET_BAD; - server->tcp_connection_generation = ++channel->tcp_connection_generation; - server->tcp_lenbuf_pos = 0; - server->tcp_buffer_pos = 0; - server->tcp_buffer = NULL; - server->tcp_length = 0; - server->qhead = NULL; - server->qtail = NULL; - ares__init_list_head(&server->queries_to_server); - server->channel = channel; - server->is_broken = 0; - } -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_iphlpapi.h nodejs-mozilla-12.22.12/deps/cares/src/ares_iphlpapi.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_iphlpapi.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_iphlpapi.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,221 +0,0 @@ -#ifndef HEADER_CARES_IPHLPAPI_H -#define HEADER_CARES_IPHLPAPI_H - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004 - 2011 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#if defined(USE_WINSOCK) - -#ifndef INET_ADDRSTRLEN -#define INET_ADDRSTRLEN 22 -#endif - -#ifndef INET6_ADDRSTRLEN -#define INET6_ADDRSTRLEN 65 -#endif - -/* ---------------------------------- */ -#if !defined(_WS2DEF_) && \ - !defined(__CSADDR_DEFINED__) && \ - !defined(__CSADDR_T_DEFINED) -/* ---------------------------------- */ - -typedef struct _SOCKET_ADDRESS { - LPSOCKADDR lpSockaddr; - INT iSockaddrLength; -} SOCKET_ADDRESS, *PSOCKET_ADDRESS; - -typedef struct _CSADDR_INFO { - SOCKET_ADDRESS LocalAddr; - SOCKET_ADDRESS RemoteAddr; - INT iSocketType; - INT iProtocol; -} CSADDR_INFO, *PCSADDR_INFO; - -/* --------------------------------- */ -#endif /* ! _WS2DEF_ && \ */ -/* ! __CSADDR_DEFINED__ && \ */ -/* ! __CSADDR_T_DEFINED */ -/* --------------------------------- */ - -/* ------------------------------- */ -#if !defined(IP_ADAPTER_DDNS_ENABLED) -/* ------------------------------- */ - -#define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x0001 -#define IP_ADAPTER_ADDRESS_TRANSIENT 0x0002 - -#define IP_ADAPTER_DDNS_ENABLED 0x0001 -#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x0002 -#define IP_ADAPTER_DHCP_ENABLED 0x0004 -#define IP_ADAPTER_RECEIVE_ONLY 0x0008 -#define IP_ADAPTER_NO_MULTICAST 0x0010 -#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x0020 - -#define GAA_FLAG_SKIP_UNICAST 0x0001 -#define GAA_FLAG_SKIP_ANYCAST 0x0002 -#define GAA_FLAG_SKIP_MULTICAST 0x0004 -#define GAA_FLAG_SKIP_DNS_SERVER 0x0008 -#define GAA_FLAG_INCLUDE_PREFIX 0x0010 -#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020 - -typedef enum { - IpPrefixOriginOther = 0, - IpPrefixOriginManual, - IpPrefixOriginWellKnown, - IpPrefixOriginDhcp, - IpPrefixOriginRouterAdvertisement -} IP_PREFIX_ORIGIN; - -typedef enum { - IpSuffixOriginOther = 0, - IpSuffixOriginManual, - IpSuffixOriginWellKnown, - IpSuffixOriginDhcp, - IpSuffixOriginLinkLayerAddress, - IpSuffixOriginRandom -} IP_SUFFIX_ORIGIN; - -typedef enum { - IpDadStateInvalid = 0, - IpDadStateTentative, - IpDadStateDuplicate, - IpDadStateDeprecated, - IpDadStatePreferred -} IP_DAD_STATE; - -typedef enum { - IfOperStatusUp = 1, - IfOperStatusDown, - IfOperStatusTesting, - IfOperStatusUnknown, - IfOperStatusDormant, - IfOperStatusNotPresent, - IfOperStatusLowerLayerDown -} IF_OPER_STATUS; - -typedef enum { - ScopeLevelInterface = 0x0001, - ScopeLevelLink = 0x0002, - ScopeLevelSubnet = 0x0003, - ScopeLevelAdmin = 0x0004, - ScopeLevelSite = 0x0005, - ScopeLevelOrganization = 0x0008, - ScopeLevelGlobal = 0x000E -} SCOPE_LEVEL; - -typedef struct _IP_ADAPTER_UNICAST_ADDRESS { - union { - ULONGLONG Alignment; - struct { - ULONG Length; - DWORD Flags; - } s; - } u; - struct _IP_ADAPTER_UNICAST_ADDRESS *Next; - SOCKET_ADDRESS Address; - IP_PREFIX_ORIGIN PrefixOrigin; - IP_SUFFIX_ORIGIN SuffixOrigin; - IP_DAD_STATE DadState; - ULONG ValidLifetime; - ULONG PreferredLifetime; - ULONG LeaseLifetime; -} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS; - -typedef struct _IP_ADAPTER_ANYCAST_ADDRESS { - union { - ULONGLONG Alignment; - struct { - ULONG Length; - DWORD Flags; - } s; - } u; - struct _IP_ADAPTER_ANYCAST_ADDRESS *Next; - SOCKET_ADDRESS Address; -} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS; - -typedef struct _IP_ADAPTER_MULTICAST_ADDRESS { - union { - ULONGLONG Alignment; - struct { - ULONG Length; - DWORD Flags; - } s; - } u; - struct _IP_ADAPTER_MULTICAST_ADDRESS *Next; - SOCKET_ADDRESS Address; -} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS; - -typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS { - union { - ULONGLONG Alignment; - struct { - ULONG Length; - DWORD Reserved; - } s; - } u; - struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next; - SOCKET_ADDRESS Address; -} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS; - -typedef struct _IP_ADAPTER_PREFIX { - union { - ULONGLONG Alignment; - struct { - ULONG Length; - DWORD Flags; - } s; - } u; - struct _IP_ADAPTER_PREFIX *Next; - SOCKET_ADDRESS Address; - ULONG PrefixLength; -} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX; - -typedef struct _IP_ADAPTER_ADDRESSES { - union { - ULONGLONG Alignment; - struct { - ULONG Length; - DWORD IfIndex; - } s; - } u; - struct _IP_ADAPTER_ADDRESSES *Next; - PCHAR AdapterName; - PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress; - PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress; - PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress; - PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress; - PWCHAR DnsSuffix; - PWCHAR Description; - PWCHAR FriendlyName; - BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]; - DWORD PhysicalAddressLength; - DWORD Flags; - DWORD Mtu; - DWORD IfType; - IF_OPER_STATUS OperStatus; - DWORD Ipv6IfIndex; - DWORD ZoneIndices[16]; - PIP_ADAPTER_PREFIX FirstPrefix; -} IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES; - -/* -------------------------------- */ -#endif /* ! IP_ADAPTER_DDNS_ENABLED */ -/* -------------------------------- */ - -#endif /* USE_WINSOCK */ - -#endif /* HEADER_CARES_IPHLPAPI_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_ipv6.h nodejs-mozilla-12.22.12/deps/cares/src/ares_ipv6.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_ipv6.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_ipv6.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ - -/* Copyright (C) 2005 by Dominick Meglio - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#ifndef ARES_IPV6_H -#define ARES_IPV6_H - -#ifndef HAVE_PF_INET6 -#define PF_INET6 AF_INET6 -#endif - -#ifndef HAVE_STRUCT_SOCKADDR_IN6 -struct sockaddr_in6 -{ - unsigned short sin6_family; - unsigned short sin6_port; - unsigned long sin6_flowinfo; - struct ares_in6_addr sin6_addr; - unsigned int sin6_scope_id; -}; -#endif - -typedef union -{ - struct sockaddr sa; - struct sockaddr_in sa4; - struct sockaddr_in6 sa6; -} ares_sockaddr; - -#ifndef HAVE_STRUCT_ADDRINFO -struct addrinfo -{ - int ai_flags; - int ai_family; - int ai_socktype; - int ai_protocol; - ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ - char *ai_canonname; - struct sockaddr *ai_addr; - struct addrinfo *ai_next; -}; -#endif - -#ifndef NS_IN6ADDRSZ -#ifndef HAVE_STRUCT_IN6_ADDR -/* We cannot have it set to zero, so we pick a fixed value here */ -#define NS_IN6ADDRSZ 16 -#else -#define NS_IN6ADDRSZ sizeof(struct in6_addr) -#endif -#endif - -#ifndef NS_INADDRSZ -#define NS_INADDRSZ sizeof(struct in_addr) -#endif - -#ifndef NS_INT16SZ -#define NS_INT16SZ 2 -#endif - -#ifndef IF_NAMESIZE -#ifdef IFNAMSIZ -#define IF_NAMESIZE IFNAMSIZ -#else -#define IF_NAMESIZE 256 -#endif -#endif - -/* Defined in inet_net_pton.c for no particular reason. */ -extern const struct ares_in6_addr ares_in6addr_any; /* :: */ - - -#endif /* ARES_IPV6_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_library_init.c nodejs-mozilla-12.22.12/deps/cares/src/ares_library_init.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_library_init.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_library_init.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,195 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004-2009 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include "ares.h" -#include "ares_library_init.h" -#include "ares_private.h" - -/* library-private global and unique instance vars */ - -#ifdef USE_WINSOCK -fpGetNetworkParams_t ares_fpGetNetworkParams = ZERO_NULL; -fpSystemFunction036_t ares_fpSystemFunction036 = ZERO_NULL; -fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses = ZERO_NULL; -fpGetBestRoute2_t ares_fpGetBestRoute2 = ZERO_NULL; -#endif - -#if defined(ANDROID) || defined(__ANDROID__) -#include "ares_android.h" -#endif - -/* library-private global vars with source visibility restricted to this file */ - -static unsigned int ares_initialized; -static int ares_init_flags; - -/* library-private global vars with visibility across the whole library */ -#if defined(WIN32) -/* We need indirections to handle Windows DLL rules. */ -static void *default_malloc(size_t size) { return malloc(size); } -static void *default_realloc(void *p, size_t size) { return realloc(p, size); } -static void default_free(void *p) { free(p); } -#else -# define default_malloc malloc -# define default_realloc realloc -# define default_free free -#endif -void *(*ares_malloc)(size_t size) = default_malloc; -void *(*ares_realloc)(void *ptr, size_t size) = default_realloc; -void (*ares_free)(void *ptr) = default_free; - -#ifdef USE_WINSOCK -static HMODULE hnd_iphlpapi; -static HMODULE hnd_advapi32; -#endif - - -static int ares_win32_init(void) -{ -#ifdef USE_WINSOCK - - hnd_iphlpapi = 0; - hnd_iphlpapi = LoadLibraryW(L"iphlpapi.dll"); - if (!hnd_iphlpapi) - return ARES_ELOADIPHLPAPI; - - ares_fpGetNetworkParams = (fpGetNetworkParams_t) - GetProcAddress(hnd_iphlpapi, "GetNetworkParams"); - if (!ares_fpGetNetworkParams) - { - FreeLibrary(hnd_iphlpapi); - return ARES_EADDRGETNETWORKPARAMS; - } - - ares_fpGetAdaptersAddresses = (fpGetAdaptersAddresses_t) - GetProcAddress(hnd_iphlpapi, "GetAdaptersAddresses"); - if (!ares_fpGetAdaptersAddresses) - { - /* This can happen on clients before WinXP, I don't - think it should be an error, unless we don't want to - support Windows 2000 anymore */ - } - - ares_fpGetBestRoute2 = (fpGetBestRoute2_t) - GetProcAddress(hnd_iphlpapi, "GetBestRoute2"); - if (!ares_fpGetBestRoute2) - { - /* This can happen on clients before Vista, I don't - think it should be an error, unless we don't want to - support Windows XP anymore */ - } - - /* - * When advapi32.dll is unavailable or advapi32.dll has no SystemFunction036, - * also known as RtlGenRandom, which is the case for Windows versions prior - * to WinXP then c-ares uses portable rand() function. Then don't error here. - */ - - hnd_advapi32 = 0; - hnd_advapi32 = LoadLibraryW(L"advapi32.dll"); - if (hnd_advapi32) - { - ares_fpSystemFunction036 = (fpSystemFunction036_t) - GetProcAddress(hnd_advapi32, "SystemFunction036"); - } - -#endif - return ARES_SUCCESS; -} - - -static void ares_win32_cleanup(void) -{ -#ifdef USE_WINSOCK - if (hnd_advapi32) - FreeLibrary(hnd_advapi32); - if (hnd_iphlpapi) - FreeLibrary(hnd_iphlpapi); -#endif -} - - -int ares_library_init(int flags) -{ - int res; - - if (ares_initialized) - { - ares_initialized++; - return ARES_SUCCESS; - } - ares_initialized++; - - if (flags & ARES_LIB_INIT_WIN32) - { - res = ares_win32_init(); - if (res != ARES_SUCCESS) - return res; /* LCOV_EXCL_LINE: can't test Win32 init failure */ - } - - ares_init_flags = flags; - - return ARES_SUCCESS; -} - -int ares_library_init_mem(int flags, - void *(*amalloc)(size_t size), - void (*afree)(void *ptr), - void *(*arealloc)(void *ptr, size_t size)) -{ - if (amalloc) - ares_malloc = amalloc; - if (arealloc) - ares_realloc = arealloc; - if (afree) - ares_free = afree; - return ares_library_init(flags); -} - - -void ares_library_cleanup(void) -{ - if (!ares_initialized) - return; - ares_initialized--; - if (ares_initialized) - return; - - if (ares_init_flags & ARES_LIB_INIT_WIN32) - ares_win32_cleanup(); - -#if defined(ANDROID) || defined(__ANDROID__) - ares_library_cleanup_android(); -#endif - - ares_init_flags = ARES_LIB_INIT_NONE; - ares_malloc = malloc; - ares_realloc = realloc; - ares_free = free; -} - - -int ares_library_initialized(void) -{ -#ifdef USE_WINSOCK - if (!ares_initialized) - return ARES_ENOTINITIALIZED; -#endif - return ARES_SUCCESS; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_library_init.h nodejs-mozilla-12.22.12/deps/cares/src/ares_library_init.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_library_init.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_library_init.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -#ifndef HEADER_CARES_LIBRARY_INIT_H -#define HEADER_CARES_LIBRARY_INIT_H - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004-2011 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef USE_WINSOCK - -#include -#include - -typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*); -typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG); -typedef ULONG (WINAPI *fpGetAdaptersAddresses_t) ( ULONG, ULONG, void*, IP_ADAPTER_ADDRESSES*, ULONG* ); -typedef NETIO_STATUS (WINAPI *fpGetBestRoute2_t) ( NET_LUID *, NET_IFINDEX, const SOCKADDR_INET *, const SOCKADDR_INET *, ULONG, PMIB_IPFORWARD_ROW2, SOCKADDR_INET * ); -/* Forward-declaration of variables defined in ares_library_init.c */ -/* that are global and unique instances for whole c-ares library. */ - -extern fpGetNetworkParams_t ares_fpGetNetworkParams; -extern fpSystemFunction036_t ares_fpSystemFunction036; -extern fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses; -extern fpGetBestRoute2_t ares_fpGetBestRoute2; - -#endif /* USE_WINSOCK */ - -#endif /* HEADER_CARES_LIBRARY_INIT_H */ - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_llist.c nodejs-mozilla-12.22.12/deps/cares/src/ares_llist.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_llist.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_llist.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include "ares.h" -#include "ares_private.h" - -/* Routines for managing doubly-linked circular linked lists with a - * dummy head. - */ - -/* Initialize a new head node */ -void ares__init_list_head(struct list_node* head) { - head->prev = head; - head->next = head; - head->data = NULL; -} - -/* Initialize a list node */ -void ares__init_list_node(struct list_node* node, void* d) { - node->prev = NULL; - node->next = NULL; - node->data = d; -} - -/* Returns true iff the given list is empty */ -int ares__is_list_empty(struct list_node* head) { - return ((head->next == head) && (head->prev == head)); -} - -/* Inserts new_node before old_node */ -void ares__insert_in_list(struct list_node* new_node, - struct list_node* old_node) { - new_node->next = old_node; - new_node->prev = old_node->prev; - old_node->prev->next = new_node; - old_node->prev = new_node; -} - -/* Removes the node from the list it's in, if any */ -void ares__remove_from_list(struct list_node* node) { - if (node->next != NULL) { - node->prev->next = node->next; - node->next->prev = node->prev; - node->prev = NULL; - node->next = NULL; - } -} - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_llist.h nodejs-mozilla-12.22.12/deps/cares/src/ares_llist.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_llist.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_llist.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -#ifndef __ARES_LLIST_H -#define __ARES_LLIST_H - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - - -/* Node definition for circular, doubly-linked list */ -struct list_node { - struct list_node *prev; - struct list_node *next; - void* data; -}; - -void ares__init_list_head(struct list_node* head); - -void ares__init_list_node(struct list_node* node, void* d); - -int ares__is_list_empty(struct list_node* head); - -void ares__insert_in_list(struct list_node* new_node, - struct list_node* old_node); - -void ares__remove_from_list(struct list_node* node); - -#endif /* __ARES_LLIST_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_mkquery.c nodejs-mozilla-12.22.12/deps/cares/src/ares_mkquery.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_mkquery.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_mkquery.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include "ares.h" - -int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id, - int rd, unsigned char **buf, int *buflen) -{ - return ares_create_query(name, dnsclass, type, id, rd, buf, buflen, 0); -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_nowarn.c nodejs-mozilla-12.22.12/deps/cares/src/ares_nowarn.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_nowarn.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_nowarn.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,260 +0,0 @@ - -/* Copyright (C) 2010-2013 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - - -#include "ares_setup.h" - -#ifdef HAVE_ASSERT_H -# include -#endif - -#ifdef HAVE_LIMITS_H -#include -#endif - -#if defined(__INTEL_COMPILER) && defined(__unix__) - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif - -#endif /* __INTEL_COMPILER && __unix__ */ - -#define BUILDING_ARES_NOWARN_C 1 - -#include "ares_nowarn.h" - -#ifndef HAVE_LIMITS_H -/* systems without we guess have 16 bit shorts, 32bit ints and - 32bit longs */ -# define CARES_MASK_SSHORT 0x7FFF -# define CARES_MASK_USHORT 0xFFFF -# define CARES_MASK_SINT 0x7FFFFFFF -# define CARES_MASK_UINT 0xFFFFFFFF -# define CARES_MASK_SLONG 0x7FFFFFFFL -# define CARES_MASK_ULONG 0xFFFFFFFFUL -#else -# define CARES_MASK_SSHORT SHRT_MAX -# define CARES_MASK_USHORT USHRT_MAX -# define CARES_MASK_SINT INT_MAX -# define CARES_MASK_UINT UINT_MAX -# define CARES_MASK_SLONG LONG_MAX -# define CARES_MASK_ULONG ULONG_MAX -#endif - -/* -** unsigned size_t to signed long -*/ - -long aresx_uztosl(size_t uznum) -{ -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:810) /* conversion may lose significant bits */ -#endif - - return (long)(uznum & (size_t) CARES_MASK_SLONG); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif -} - -/* -** unsigned size_t to signed int -*/ - -int aresx_uztosi(size_t uznum) -{ -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:810) /* conversion may lose significant bits */ -#endif - - return (int)(uznum & (size_t) CARES_MASK_SINT); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif -} - -/* -** unsigned size_t to signed short -*/ - -short aresx_uztoss(size_t uznum) -{ -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:810) /* conversion may lose significant bits */ -#endif - - return (short)(uznum & (size_t) CARES_MASK_SSHORT); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif -} - -/* -** signed int to signed short -*/ - -short aresx_sitoss(int sinum) -{ -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:810) /* conversion may lose significant bits */ -#endif - - DEBUGASSERT(sinum >= 0); - return (short)(sinum & (int) CARES_MASK_SSHORT); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif -} - -/* -** signed long to signed int -*/ - -int aresx_sltosi(long slnum) -{ -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:810) /* conversion may lose significant bits */ -#endif - - DEBUGASSERT(slnum >= 0); - return (int)(slnum & (long) CARES_MASK_SINT); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif -} - -/* -** signed ares_ssize_t to signed int -*/ - -int aresx_sztosi(ares_ssize_t sznum) -{ -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:810) /* conversion may lose significant bits */ -#endif - - DEBUGASSERT(sznum >= 0); - return (int)(sznum & (ares_ssize_t) CARES_MASK_SINT); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif -} - -/* -** signed ares_ssize_t to unsigned int -*/ - -unsigned int aresx_sztoui(ares_ssize_t sznum) -{ -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:810) /* conversion may lose significant bits */ -#endif - - DEBUGASSERT(sznum >= 0); - return (unsigned int)(sznum & (ares_ssize_t) CARES_MASK_UINT); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif -} - -/* -** signed int to unsigned short -*/ - -unsigned short aresx_sitous(int sinum) -{ -#ifdef __INTEL_COMPILER -# pragma warning(push) -# pragma warning(disable:810) /* conversion may lose significant bits */ -#endif - - DEBUGASSERT(sinum >= 0); - return (unsigned short)(sinum & (int) CARES_MASK_USHORT); - -#ifdef __INTEL_COMPILER -# pragma warning(pop) -#endif -} - -#if defined(__INTEL_COMPILER) && defined(__unix__) - -int aresx_FD_ISSET(int fd, fd_set *fdset) -{ - #pragma warning(push) - #pragma warning(disable:1469) /* clobber ignored */ - return FD_ISSET(fd, fdset); - #pragma warning(pop) -} - -void aresx_FD_SET(int fd, fd_set *fdset) -{ - #pragma warning(push) - #pragma warning(disable:1469) /* clobber ignored */ - FD_SET(fd, fdset); - #pragma warning(pop) -} - -void aresx_FD_ZERO(fd_set *fdset) -{ - #pragma warning(push) - #pragma warning(disable:593) /* variable was set but never used */ - FD_ZERO(fdset); - #pragma warning(pop) -} - -unsigned short aresx_htons(unsigned short usnum) -{ -#if (__INTEL_COMPILER == 910) && defined(__i386__) - return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); -#else - #pragma warning(push) - #pragma warning(disable:810) /* conversion may lose significant bits */ - return htons(usnum); - #pragma warning(pop) -#endif -} - -unsigned short aresx_ntohs(unsigned short usnum) -{ -#if (__INTEL_COMPILER == 910) && defined(__i386__) - return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); -#else - #pragma warning(push) - #pragma warning(disable:810) /* conversion may lose significant bits */ - return ntohs(usnum); - #pragma warning(pop) -#endif -} - -#endif /* __INTEL_COMPILER && __unix__ */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_nowarn.h nodejs-mozilla-12.22.12/deps/cares/src/ares_nowarn.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_nowarn.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_nowarn.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -#ifndef HEADER_CARES_NOWARN_H -#define HEADER_CARES_NOWARN_H - - -/* Copyright (C) 2010-2012 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -long aresx_uztosl(size_t uznum); -int aresx_uztosi(size_t uznum); -short aresx_uztoss(size_t uznum); - -short aresx_sitoss(int sinum); - -int aresx_sltosi(long slnum); - -int aresx_sztosi(ares_ssize_t sznum); - -unsigned int aresx_sztoui(ares_ssize_t sznum); - -unsigned short aresx_sitous(int sinum); - -#if defined(__INTEL_COMPILER) && defined(__unix__) - -int aresx_FD_ISSET(int fd, fd_set *fdset); - -void aresx_FD_SET(int fd, fd_set *fdset); - -void aresx_FD_ZERO(fd_set *fdset); - -unsigned short aresx_htons(unsigned short usnum); - -unsigned short aresx_ntohs(unsigned short usnum); - -#ifndef BUILDING_ARES_NOWARN_C -# undef FD_ISSET -# define FD_ISSET(a,b) aresx_FD_ISSET((a),(b)) -# undef FD_SET -# define FD_SET(a,b) aresx_FD_SET((a),(b)) -# undef FD_ZERO -# define FD_ZERO(a) aresx_FD_ZERO((a)) -# undef htons -# define htons(a) aresx_htons((a)) -# undef ntohs -# define ntohs(a) aresx_ntohs((a)) -#endif - -#endif /* __INTEL_COMPILER && __unix__ */ - -#endif /* HEADER_CARES_NOWARN_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_options.c nodejs-mozilla-12.22.12/deps/cares/src/ares_options.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_options.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_options.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,406 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2008-2013 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - - -#include "ares_setup.h" - -#ifdef HAVE_ARPA_INET_H -# include -#endif - -#include "ares.h" -#include "ares_data.h" -#include "ares_inet_net_pton.h" -#include "ares_private.h" - - -int ares_get_servers(ares_channel channel, - struct ares_addr_node **servers) -{ - struct ares_addr_node *srvr_head = NULL; - struct ares_addr_node *srvr_last = NULL; - struct ares_addr_node *srvr_curr; - int status = ARES_SUCCESS; - int i; - - if (!channel) - return ARES_ENODATA; - - for (i = 0; i < channel->nservers; i++) - { - /* Allocate storage for this server node appending it to the list */ - srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE); - if (!srvr_curr) - { - status = ARES_ENOMEM; - break; - } - if (srvr_last) - { - srvr_last->next = srvr_curr; - } - else - { - srvr_head = srvr_curr; - } - srvr_last = srvr_curr; - - /* Fill this server node data */ - srvr_curr->family = channel->servers[i].addr.family; - if (srvr_curr->family == AF_INET) - memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4, - sizeof(srvr_curr->addrV4)); - else - memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6, - sizeof(srvr_curr->addrV6)); - } - - if (status != ARES_SUCCESS) - { - if (srvr_head) - { - ares_free_data(srvr_head); - srvr_head = NULL; - } - } - - *servers = srvr_head; - - return status; -} - -int ares_get_servers_ports(ares_channel channel, - struct ares_addr_port_node **servers) -{ - struct ares_addr_port_node *srvr_head = NULL; - struct ares_addr_port_node *srvr_last = NULL; - struct ares_addr_port_node *srvr_curr; - int status = ARES_SUCCESS; - int i; - - if (!channel) - return ARES_ENODATA; - - for (i = 0; i < channel->nservers; i++) - { - /* Allocate storage for this server node appending it to the list */ - srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_PORT_NODE); - if (!srvr_curr) - { - status = ARES_ENOMEM; - break; - } - if (srvr_last) - { - srvr_last->next = srvr_curr; - } - else - { - srvr_head = srvr_curr; - } - srvr_last = srvr_curr; - - /* Fill this server node data */ - srvr_curr->family = channel->servers[i].addr.family; - srvr_curr->udp_port = ntohs((unsigned short)channel->servers[i].addr.udp_port); - srvr_curr->tcp_port = ntohs((unsigned short)channel->servers[i].addr.tcp_port); - if (srvr_curr->family == AF_INET) - memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4, - sizeof(srvr_curr->addrV4)); - else - memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6, - sizeof(srvr_curr->addrV6)); - } - - if (status != ARES_SUCCESS) - { - if (srvr_head) - { - ares_free_data(srvr_head); - srvr_head = NULL; - } - } - - *servers = srvr_head; - - return status; -} - -int ares_set_servers(ares_channel channel, - struct ares_addr_node *servers) -{ - struct ares_addr_node *srvr; - int num_srvrs = 0; - int i; - - if (ares_library_initialized() != ARES_SUCCESS) - return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */ - - if (!channel) - return ARES_ENODATA; - - if (!ares__is_list_empty(&channel->all_queries)) - return ARES_ENOTIMP; - - ares__destroy_servers_state(channel); - - for (srvr = servers; srvr; srvr = srvr->next) - { - num_srvrs++; - } - - if (num_srvrs > 0) - { - /* Allocate storage for servers state */ - channel->servers = ares_malloc(num_srvrs * sizeof(struct server_state)); - if (!channel->servers) - { - return ARES_ENOMEM; - } - channel->nservers = num_srvrs; - /* Fill servers state address data */ - for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next) - { - channel->servers[i].addr.family = srvr->family; - channel->servers[i].addr.udp_port = 0; - channel->servers[i].addr.tcp_port = 0; - if (srvr->family == AF_INET) - memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4, - sizeof(srvr->addrV4)); - else - memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6, - sizeof(srvr->addrV6)); - } - /* Initialize servers state remaining data */ - ares__init_servers_state(channel); - } - - return ARES_SUCCESS; -} - -int ares_set_servers_ports(ares_channel channel, - struct ares_addr_port_node *servers) -{ - struct ares_addr_port_node *srvr; - int num_srvrs = 0; - int i; - - if (ares_library_initialized() != ARES_SUCCESS) - return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */ - - if (!channel) - return ARES_ENODATA; - - if (!ares__is_list_empty(&channel->all_queries)) - return ARES_ENOTIMP; - - ares__destroy_servers_state(channel); - - for (srvr = servers; srvr; srvr = srvr->next) - { - num_srvrs++; - } - - if (num_srvrs > 0) - { - /* Allocate storage for servers state */ - channel->servers = ares_malloc(num_srvrs * sizeof(struct server_state)); - if (!channel->servers) - { - return ARES_ENOMEM; - } - channel->nservers = num_srvrs; - /* Fill servers state address data */ - for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next) - { - channel->servers[i].addr.family = srvr->family; - channel->servers[i].addr.udp_port = htons((unsigned short)srvr->udp_port); - channel->servers[i].addr.tcp_port = htons((unsigned short)srvr->tcp_port); - if (srvr->family == AF_INET) - memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4, - sizeof(srvr->addrV4)); - else - memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6, - sizeof(srvr->addrV6)); - } - /* Initialize servers state remaining data */ - ares__init_servers_state(channel); - } - - return ARES_SUCCESS; -} - -/* Incomming string format: host[:port][,host[:port]]... */ -/* IPv6 addresses with ports require square brackets [fe80::1%lo0]:53 */ -static int set_servers_csv(ares_channel channel, - const char* _csv, int use_port) -{ - size_t i; - char* csv = NULL; - char* ptr; - char* start_host; - int cc = 0; - int rv = ARES_SUCCESS; - struct ares_addr_port_node *servers = NULL; - struct ares_addr_port_node *last = NULL; - - if (ares_library_initialized() != ARES_SUCCESS) - return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */ - - if (!channel) - return ARES_ENODATA; - - i = strlen(_csv); - if (i == 0) - return ARES_SUCCESS; /* blank all servers */ - - csv = ares_malloc(i + 2); - if (!csv) - return ARES_ENOMEM; - - strcpy(csv, _csv); - if (csv[i-1] != ',') { /* make parsing easier by ensuring ending ',' */ - csv[i] = ','; - csv[i+1] = 0; - } - - start_host = csv; - for (ptr = csv; *ptr; ptr++) { - if (*ptr == ':') { - /* count colons to determine if we have an IPv6 number or IPv4 with - port */ - cc++; - } - else if (*ptr == '[') { - /* move start_host if an open square bracket is found wrapping an IPv6 - address */ - start_host = ptr + 1; - } - else if (*ptr == ',') { - char* pp = ptr - 1; - char* p = ptr; - int port = 0; - struct in_addr in4; - struct ares_in6_addr in6; - struct ares_addr_port_node *s = NULL; - - *ptr = 0; /* null terminate host:port string */ - /* Got an entry..see if the port was specified. */ - if (cc > 0) { - while (pp > start_host) { - /* a single close square bracket followed by a colon, ']:' indicates - an IPv6 address with port */ - if ((*pp == ']') && (*p == ':')) - break; /* found port */ - /* a single colon, ':' indicates an IPv4 address with port */ - if ((*pp == ':') && (cc == 1)) - break; /* found port */ - if (!(ISDIGIT(*pp) || (*pp == ':'))) { - /* Found end of digits before we found :, so wasn't a port */ - /* must allow ':' for IPv6 case of ']:' indicates we found a port */ - pp = p = ptr; - break; - } - pp--; - p--; - } - if ((pp != start_host) && ((pp + 1) < ptr)) { - /* Found it. Parse over the port number */ - /* when an IPv6 address is wrapped with square brackets the port - starts at pp + 2 */ - if (*pp == ']') - p++; /* move p before ':' */ - /* p will point to the start of the port */ - port = (int)strtol(p, NULL, 10); - *pp = 0; /* null terminate host */ - } - } - /* resolve host, try ipv4 first, rslt is in network byte order */ - rv = ares_inet_pton(AF_INET, start_host, &in4); - if (!rv) { - /* Ok, try IPv6 then */ - rv = ares_inet_pton(AF_INET6, start_host, &in6); - if (!rv) { - rv = ARES_EBADSTR; - goto out; - } - /* was ipv6, add new server */ - s = ares_malloc(sizeof(*s)); - if (!s) { - rv = ARES_ENOMEM; - goto out; - } - s->family = AF_INET6; - memcpy(&s->addr, &in6, sizeof(struct ares_in6_addr)); - } - else { - /* was ipv4, add new server */ - s = ares_malloc(sizeof(*s)); - if (!s) { - rv = ARES_ENOMEM; - goto out; - } - s->family = AF_INET; - memcpy(&s->addr, &in4, sizeof(struct in_addr)); - } - if (s) { - s->udp_port = use_port ? port: 0; - s->tcp_port = s->udp_port; - s->next = NULL; - if (last) { - last->next = s; - /* need to move last to maintain the linked list */ - last = last->next; - } - else { - servers = s; - last = s; - } - } - - /* Set up for next one */ - start_host = ptr + 1; - cc = 0; - } - } - - rv = ares_set_servers_ports(channel, servers); - - out: - if (csv) - ares_free(csv); - while (servers) { - struct ares_addr_port_node *s = servers; - servers = servers->next; - ares_free(s); - } - - return rv; -} - -int ares_set_servers_csv(ares_channel channel, - const char* _csv) -{ - return set_servers_csv(channel, _csv, FALSE); -} - -int ares_set_servers_ports_csv(ares_channel channel, - const char* _csv) -{ - return set_servers_csv(channel, _csv, TRUE); -} - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_aaaa_reply.c nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_aaaa_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_aaaa_reply.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_aaaa_reply.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,217 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright 2005 Dominick Meglio - * Copyright (C) 2019 by Andrew Selivanov - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif - -#ifdef HAVE_LIMITS_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_inet_net_pton.h" -#include "ares_private.h" - -int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, - struct hostent **host, struct ares_addr6ttl *addrttls, - int *naddrttls) -{ - struct ares_addrinfo ai; - struct ares_addrinfo_node *next; - struct ares_addrinfo_cname *next_cname; - char **aliases = NULL; - char *question_hostname = NULL; - struct hostent *hostent = NULL; - struct ares_in6_addr *addrs = NULL; - int naliases = 0, naddrs = 0, alias = 0, i; - int cname_ttl = INT_MAX; - int status; - - memset(&ai, 0, sizeof(ai)); - - status = ares__parse_into_addrinfo2(abuf, alen, &question_hostname, &ai); - if (status != ARES_SUCCESS) - { - ares_free(question_hostname); - - if (naddrttls) - { - *naddrttls = 0; - } - - return status; - } - - hostent = ares_malloc(sizeof(struct hostent)); - if (!hostent) - { - goto enomem; - } - - next = ai.nodes; - while (next) - { - if(next->ai_family == AF_INET6) - { - ++naddrs; - } - next = next->ai_next; - } - - next_cname = ai.cnames; - while (next_cname) - { - if(next_cname->alias) - ++naliases; - next_cname = next_cname->next; - } - - aliases = ares_malloc((naliases + 1) * sizeof(char *)); - if (!aliases) - { - goto enomem; - } - - if (naliases) - { - next_cname = ai.cnames; - while (next_cname) - { - if(next_cname->alias) - aliases[alias++] = strdup(next_cname->alias); - if(next_cname->ttl < cname_ttl) - cname_ttl = next_cname->ttl; - next_cname = next_cname->next; - } - } - - aliases[alias] = NULL; - - hostent->h_addr_list = ares_malloc((naddrs + 1) * sizeof(char *)); - if (!hostent->h_addr_list) - { - goto enomem; - } - - for (i = 0; i < naddrs + 1; ++i) - { - hostent->h_addr_list[i] = NULL; - } - - if (ai.cnames) - { - hostent->h_name = strdup(ai.cnames->name); - ares_free(question_hostname); - } - else - { - hostent->h_name = question_hostname; - } - - hostent->h_aliases = aliases; - hostent->h_addrtype = AF_INET6; - hostent->h_length = sizeof(struct ares_in6_addr); - - if (naddrs) - { - addrs = ares_malloc(naddrs * sizeof(struct ares_in6_addr)); - if (!addrs) - { - goto enomem; - } - - i = 0; - next = ai.nodes; - while (next) - { - if(next->ai_family == AF_INET6) - { - hostent->h_addr_list[i] = (char*)&addrs[i]; - memcpy(hostent->h_addr_list[i], - &(((struct sockaddr_in6 *)next->ai_addr)->sin6_addr), - sizeof(struct ares_in6_addr)); - if (naddrttls && i < *naddrttls) - { - if(next->ai_ttl > cname_ttl) - addrttls[i].ttl = cname_ttl; - else - addrttls[i].ttl = next->ai_ttl; - - memcpy(&addrttls[i].ip6addr, - &(((struct sockaddr_in6 *)next->ai_addr)->sin6_addr), - sizeof(struct ares_in6_addr)); - } - ++i; - } - next = next->ai_next; - } - - if (i == 0) - { - ares_free(addrs); - } - } - - if (host) - { - *host = hostent; - } - else - { - ares_free_hostent(hostent); - } - - if (naddrttls) - { - *naddrttls = naddrs; - } - - ares__freeaddrinfo_cnames(ai.cnames); - ares__freeaddrinfo_nodes(ai.nodes); - return ARES_SUCCESS; - -enomem: - ares_free(aliases); - ares_free(hostent); - ares__freeaddrinfo_cnames(ai.cnames); - ares__freeaddrinfo_nodes(ai.nodes); - ares_free(question_hostname); - return ARES_ENOMEM; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_a_reply.c nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_a_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_a_reply.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_a_reply.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,214 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2019 by Andrew Selivanov - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif - -#ifdef HAVE_LIMITS_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_private.h" - -int ares_parse_a_reply(const unsigned char *abuf, int alen, - struct hostent **host, - struct ares_addrttl *addrttls, int *naddrttls) -{ - struct ares_addrinfo ai; - struct ares_addrinfo_node *next; - struct ares_addrinfo_cname *next_cname; - char **aliases = NULL; - char *question_hostname = NULL; - struct hostent *hostent = NULL; - struct in_addr *addrs = NULL; - int naliases = 0, naddrs = 0, alias = 0, i; - int cname_ttl = INT_MAX; - int status; - - memset(&ai, 0, sizeof(ai)); - - status = ares__parse_into_addrinfo2(abuf, alen, &question_hostname, &ai); - if (status != ARES_SUCCESS) - { - ares_free(question_hostname); - - if (naddrttls) - { - *naddrttls = 0; - } - - return status; - } - - hostent = ares_malloc(sizeof(struct hostent)); - if (!hostent) - { - goto enomem; - } - - next = ai.nodes; - while (next) - { - if (next->ai_family == AF_INET) - { - ++naddrs; - } - next = next->ai_next; - } - - next_cname = ai.cnames; - while (next_cname) - { - if(next_cname->alias) - ++naliases; - next_cname = next_cname->next; - } - - aliases = ares_malloc((naliases + 1) * sizeof(char *)); - if (!aliases) - { - goto enomem; - } - - if (naliases) - { - next_cname = ai.cnames; - while (next_cname) - { - if(next_cname->alias) - aliases[alias++] = strdup(next_cname->alias); - if(next_cname->ttl < cname_ttl) - cname_ttl = next_cname->ttl; - next_cname = next_cname->next; - } - } - - aliases[alias] = NULL; - - hostent->h_addr_list = ares_malloc((naddrs + 1) * sizeof(char *)); - if (!hostent->h_addr_list) - { - goto enomem; - } - - for (i = 0; i < naddrs + 1; ++i) - { - hostent->h_addr_list[i] = NULL; - } - - if (ai.cnames) - { - hostent->h_name = strdup(ai.cnames->name); - ares_free(question_hostname); - } - else - { - hostent->h_name = question_hostname; - } - - hostent->h_aliases = aliases; - hostent->h_addrtype = AF_INET; - hostent->h_length = sizeof(struct in_addr); - - if (naddrs) - { - addrs = ares_malloc(naddrs * sizeof(struct in_addr)); - if (!addrs) - { - goto enomem; - } - - i = 0; - next = ai.nodes; - while (next) - { - if (next->ai_family == AF_INET) - { - hostent->h_addr_list[i] = (char *)&addrs[i]; - memcpy(hostent->h_addr_list[i], - &(((struct sockaddr_in *)next->ai_addr)->sin_addr), - sizeof(struct in_addr)); - if (naddrttls && i < *naddrttls) - { - if (next->ai_ttl > cname_ttl) - addrttls[i].ttl = cname_ttl; - else - addrttls[i].ttl = next->ai_ttl; - - memcpy(&addrttls[i].ipaddr, - &(((struct sockaddr_in *)next->ai_addr)->sin_addr), - sizeof(struct in_addr)); - } - ++i; - } - next = next->ai_next; - } - if (i == 0) - { - ares_free(addrs); - } - } - - if (host) - { - *host = hostent; - } - else - { - ares_free_hostent(hostent); - } - - if (naddrttls) - { - *naddrttls = naddrs; - } - - ares__freeaddrinfo_cnames(ai.cnames); - ares__freeaddrinfo_nodes(ai.nodes); - return ARES_SUCCESS; - -enomem: - ares_free(aliases); - ares_free(hostent); - ares__freeaddrinfo_cnames(ai.cnames); - ares__freeaddrinfo_nodes(ai.nodes); - ares_free(question_hostname); - return ARES_ENOMEM; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares__parse_into_addrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/ares__parse_into_addrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares__parse_into_addrinfo.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares__parse_into_addrinfo.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,266 +0,0 @@ -/* Copyright (C) 2019 by Andrew Selivanov - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif - -#ifdef HAVE_LIMITS_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_private.h" - -int ares__parse_into_addrinfo2(const unsigned char *abuf, - int alen, - char **question_hostname, - struct ares_addrinfo *ai) -{ - unsigned int qdcount, ancount; - int status, i, rr_type, rr_class, rr_len, rr_ttl; - int got_a = 0, got_aaaa = 0, got_cname = 0; - long len; - const unsigned char *aptr; - char *hostname, *rr_name = NULL, *rr_data; - struct ares_addrinfo_cname *cname, *cnames = NULL; - struct ares_addrinfo_node *node, *nodes = NULL; - struct sockaddr_in *sin; - struct sockaddr_in6 *sin6; - - *question_hostname = NULL; - - /* Give up if abuf doesn't have room for a header. */ - if (alen < HFIXEDSZ) - return ARES_EBADRESP; - - /* Fetch the question and answer count from the header. */ - qdcount = DNS_HEADER_QDCOUNT(abuf); - ancount = DNS_HEADER_ANCOUNT(abuf); - if (qdcount != 1) - return ARES_EBADRESP; - - - /* Expand the name from the question, and skip past the question. */ - aptr = abuf + HFIXEDSZ; - status = ares__expand_name_for_response(aptr, abuf, alen, question_hostname, &len); - if (status != ARES_SUCCESS) - return status; - if (aptr + len + QFIXEDSZ > abuf + alen) - { - return ARES_EBADRESP; - } - - hostname = *question_hostname; - - aptr += len + QFIXEDSZ; - - /* Examine each answer resource record (RR) in turn. */ - for (i = 0; i < (int)ancount; i++) - { - /* Decode the RR up to the data field. */ - status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len); - if (status != ARES_SUCCESS) - { - rr_name = NULL; - goto failed_stat; - } - - aptr += len; - if (aptr + RRFIXEDSZ > abuf + alen) - { - status = ARES_EBADRESP; - goto failed_stat; - } - rr_type = DNS_RR_TYPE(aptr); - rr_class = DNS_RR_CLASS(aptr); - rr_len = DNS_RR_LEN(aptr); - rr_ttl = DNS_RR_TTL(aptr); - aptr += RRFIXEDSZ; - if (aptr + rr_len > abuf + alen) - { - status = ARES_EBADRESP; - goto failed_stat; - } - - if (rr_class == C_IN && rr_type == T_A - && rr_len == sizeof(struct in_addr) - && strcasecmp(rr_name, hostname) == 0) - { - got_a = 1; - if (aptr + sizeof(struct in_addr) > abuf + alen) - { /* LCOV_EXCL_START: already checked above */ - status = ARES_EBADRESP; - goto failed_stat; - } /* LCOV_EXCL_STOP */ - - node = ares__append_addrinfo_node(&nodes); - if (!node) - { - status = ARES_ENOMEM; - goto failed_stat; - } - - sin = ares_malloc(sizeof(struct sockaddr_in)); - if (!sin) - { - status = ARES_ENOMEM; - goto failed_stat; - } - memset(sin, 0, sizeof(struct sockaddr_in)); - memcpy(&sin->sin_addr.s_addr, aptr, sizeof(struct in_addr)); - sin->sin_family = AF_INET; - - node->ai_addr = (struct sockaddr *)sin; - node->ai_family = AF_INET; - node->ai_addrlen = sizeof(struct sockaddr_in); - - node->ai_ttl = rr_ttl; - - status = ARES_SUCCESS; - } - else if (rr_class == C_IN && rr_type == T_AAAA - && rr_len == sizeof(struct ares_in6_addr) - && strcasecmp(rr_name, hostname) == 0) - { - got_aaaa = 1; - if (aptr + sizeof(struct ares_in6_addr) > abuf + alen) - { /* LCOV_EXCL_START: already checked above */ - status = ARES_EBADRESP; - goto failed_stat; - } /* LCOV_EXCL_STOP */ - - node = ares__append_addrinfo_node(&nodes); - if (!node) - { - status = ARES_ENOMEM; - goto failed_stat; - } - - sin6 = ares_malloc(sizeof(struct sockaddr_in6)); - if (!sin6) - { - status = ARES_ENOMEM; - goto failed_stat; - } - - memset(sin6, 0, sizeof(struct sockaddr_in6)); - memcpy(&sin6->sin6_addr.s6_addr, aptr, sizeof(struct ares_in6_addr)); - sin6->sin6_family = AF_INET6; - - node->ai_addr = (struct sockaddr *)sin6; - node->ai_family = AF_INET6; - node->ai_addrlen = sizeof(struct sockaddr_in6); - - node->ai_ttl = rr_ttl; - - status = ARES_SUCCESS; - } - - if (rr_class == C_IN && rr_type == T_CNAME) - { - got_cname = 1; - status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, - &len); - if (status != ARES_SUCCESS) - { - goto failed_stat; - } - - /* Decode the RR data and replace the hostname with it. */ - /* SA: Seems wrong as it introduses order dependency. */ - hostname = rr_data; - - cname = ares__append_addrinfo_cname(&cnames); - if (!cname) - { - status = ARES_ENOMEM; - ares_free(rr_data); - goto failed_stat; - } - cname->ttl = rr_ttl; - cname->alias = rr_name; - cname->name = rr_data; - } - else - { - ares_free(rr_name); - } - - - aptr += rr_len; - if (aptr > abuf + alen) - { /* LCOV_EXCL_START: already checked above */ - status = ARES_EBADRESP; - goto failed_stat; - } /* LCOV_EXCL_STOP */ - } - - if (status == ARES_SUCCESS) - { - ares__addrinfo_cat_nodes(&ai->nodes, nodes); - if (got_cname) - { - ares__addrinfo_cat_cnames(&ai->cnames, cnames); - return status; - } - else if (got_a == 0 && got_aaaa == 0) - { - /* the check for naliases to be zero is to make sure CNAME responses - don't get caught here */ - status = ARES_ENODATA; - } - } - - return status; - -failed_stat: - ares_free(rr_name); - ares__freeaddrinfo_cnames(cnames); - ares__freeaddrinfo_nodes(nodes); - return status; -} - -int ares__parse_into_addrinfo(const unsigned char *abuf, - int alen, - struct ares_addrinfo *ai) -{ - int status; - char *question_hostname; - status = ares__parse_into_addrinfo2(abuf, alen, &question_hostname, ai); - ares_free(question_hostname); - return status; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_mx_reply.c nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_mx_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_mx_reply.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_mx_reply.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,170 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2010 Jeremy Lal - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_data.h" -#include "ares_private.h" - -int -ares_parse_mx_reply (const unsigned char *abuf, int alen, - struct ares_mx_reply **mx_out) -{ - unsigned int qdcount, ancount, i; - const unsigned char *aptr, *vptr; - int status, rr_type, rr_class, rr_len; - long len; - char *hostname = NULL, *rr_name = NULL; - struct ares_mx_reply *mx_head = NULL; - struct ares_mx_reply *mx_last = NULL; - struct ares_mx_reply *mx_curr; - - /* Set *mx_out to NULL for all failure cases. */ - *mx_out = NULL; - - /* Give up if abuf doesn't have room for a header. */ - if (alen < HFIXEDSZ) - return ARES_EBADRESP; - - /* Fetch the question and answer count from the header. */ - qdcount = DNS_HEADER_QDCOUNT (abuf); - ancount = DNS_HEADER_ANCOUNT (abuf); - if (qdcount != 1) - return ARES_EBADRESP; - if (ancount == 0) - return ARES_ENODATA; - - /* Expand the name from the question, and skip past the question. */ - aptr = abuf + HFIXEDSZ; - status = ares_expand_name (aptr, abuf, alen, &hostname, &len); - if (status != ARES_SUCCESS) - return status; - - if (aptr + len + QFIXEDSZ > abuf + alen) - { - ares_free (hostname); - return ARES_EBADRESP; - } - aptr += len + QFIXEDSZ; - - /* Examine each answer resource record (RR) in turn. */ - for (i = 0; i < ancount; i++) - { - /* Decode the RR up to the data field. */ - status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); - if (status != ARES_SUCCESS) - { - break; - } - aptr += len; - if (aptr + RRFIXEDSZ > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - rr_type = DNS_RR_TYPE (aptr); - rr_class = DNS_RR_CLASS (aptr); - rr_len = DNS_RR_LEN (aptr); - aptr += RRFIXEDSZ; - if (aptr + rr_len > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - - /* Check if we are really looking at a MX record */ - if (rr_class == C_IN && rr_type == T_MX) - { - /* parse the MX record itself */ - if (rr_len < 2) - { - status = ARES_EBADRESP; - break; - } - - /* Allocate storage for this MX answer appending it to the list */ - mx_curr = ares_malloc_data(ARES_DATATYPE_MX_REPLY); - if (!mx_curr) - { - status = ARES_ENOMEM; - break; - } - if (mx_last) - { - mx_last->next = mx_curr; - } - else - { - mx_head = mx_curr; - } - mx_last = mx_curr; - - vptr = aptr; - mx_curr->priority = DNS__16BIT(vptr); - vptr += sizeof(unsigned short); - - status = ares_expand_name (vptr, abuf, alen, &mx_curr->host, &len); - if (status != ARES_SUCCESS) - break; - } - - /* Don't lose memory in the next iteration */ - ares_free (rr_name); - rr_name = NULL; - - /* Move on to the next record */ - aptr += rr_len; - } - - if (hostname) - ares_free (hostname); - if (rr_name) - ares_free (rr_name); - - /* clean up on error */ - if (status != ARES_SUCCESS) - { - if (mx_head) - ares_free_data (mx_head); - return status; - } - - /* everything looks fine, return the data */ - *mx_out = mx_head; - - return ARES_SUCCESS; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_naptr_reply.c nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_naptr_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_naptr_reply.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_naptr_reply.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,194 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2009 by Jakub Hrozek - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_data.h" -#include "ares_private.h" - -/* AIX portability check */ -#ifndef T_NAPTR - #define T_NAPTR 35 /* naming authority pointer */ -#endif - -int -ares_parse_naptr_reply (const unsigned char *abuf, int alen, - struct ares_naptr_reply **naptr_out) -{ - unsigned int qdcount, ancount, i; - const unsigned char *aptr, *vptr; - int status, rr_type, rr_class, rr_len; - long len; - char *hostname = NULL, *rr_name = NULL; - struct ares_naptr_reply *naptr_head = NULL; - struct ares_naptr_reply *naptr_last = NULL; - struct ares_naptr_reply *naptr_curr; - - /* Set *naptr_out to NULL for all failure cases. */ - *naptr_out = NULL; - - /* Give up if abuf doesn't have room for a header. */ - if (alen < HFIXEDSZ) - return ARES_EBADRESP; - - /* Fetch the question and answer count from the header. */ - qdcount = DNS_HEADER_QDCOUNT (abuf); - ancount = DNS_HEADER_ANCOUNT (abuf); - if (qdcount != 1) - return ARES_EBADRESP; - if (ancount == 0) - return ARES_ENODATA; - - /* Expand the name from the question, and skip past the question. */ - aptr = abuf + HFIXEDSZ; - status = ares_expand_name (aptr, abuf, alen, &hostname, &len); - if (status != ARES_SUCCESS) - return status; - - if (aptr + len + QFIXEDSZ > abuf + alen) - { - ares_free (hostname); - return ARES_EBADRESP; - } - aptr += len + QFIXEDSZ; - - /* Examine each answer resource record (RR) in turn. */ - for (i = 0; i < ancount; i++) - { - /* Decode the RR up to the data field. */ - status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); - if (status != ARES_SUCCESS) - { - break; - } - aptr += len; - if (aptr + RRFIXEDSZ > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - rr_type = DNS_RR_TYPE (aptr); - rr_class = DNS_RR_CLASS (aptr); - rr_len = DNS_RR_LEN (aptr); - aptr += RRFIXEDSZ; - if (aptr + rr_len > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - - /* Check if we are really looking at a NAPTR record */ - if (rr_class == C_IN && rr_type == T_NAPTR) - { - /* parse the NAPTR record itself */ - - /* RR must contain at least 7 bytes = 2 x int16 + 3 x name */ - if (rr_len < 7) - { - status = ARES_EBADRESP; - break; - } - - /* Allocate storage for this NAPTR answer appending it to the list */ - naptr_curr = ares_malloc_data(ARES_DATATYPE_NAPTR_REPLY); - if (!naptr_curr) - { - status = ARES_ENOMEM; - break; - } - if (naptr_last) - { - naptr_last->next = naptr_curr; - } - else - { - naptr_head = naptr_curr; - } - naptr_last = naptr_curr; - - vptr = aptr; - naptr_curr->order = DNS__16BIT(vptr); - vptr += sizeof(unsigned short); - naptr_curr->preference = DNS__16BIT(vptr); - vptr += sizeof(unsigned short); - - status = ares_expand_string(vptr, abuf, alen, &naptr_curr->flags, &len); - if (status != ARES_SUCCESS) - break; - vptr += len; - - status = ares_expand_string(vptr, abuf, alen, &naptr_curr->service, &len); - if (status != ARES_SUCCESS) - break; - vptr += len; - - status = ares_expand_string(vptr, abuf, alen, &naptr_curr->regexp, &len); - if (status != ARES_SUCCESS) - break; - vptr += len; - - status = ares_expand_name(vptr, abuf, alen, &naptr_curr->replacement, &len); - if (status != ARES_SUCCESS) - break; - } - - /* Don't lose memory in the next iteration */ - ares_free (rr_name); - rr_name = NULL; - - /* Move on to the next record */ - aptr += rr_len; - } - - if (hostname) - ares_free (hostname); - if (rr_name) - ares_free (rr_name); - - /* clean up on error */ - if (status != ARES_SUCCESS) - { - if (naptr_head) - ares_free_data (naptr_head); - return status; - } - - /* everything looks fine, return the data */ - *naptr_out = naptr_head; - - return ARES_SUCCESS; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_ns_reply.c nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_ns_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_ns_reply.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_ns_reply.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,183 +0,0 @@ -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -/* - * ares_parse_ns_reply created by Vlad Dinulescu - * on behalf of AVIRA Gmbh - http://www.avira.com - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_private.h" - -int ares_parse_ns_reply( const unsigned char* abuf, int alen, - struct hostent** host ) -{ - unsigned int qdcount, ancount; - int status, i, rr_type, rr_class, rr_len; - int nameservers_num; - long len; - const unsigned char *aptr; - char* hostname, *rr_name, *rr_data, **nameservers; - struct hostent *hostent; - - /* Set *host to NULL for all failure cases. */ - *host = NULL; - - /* Give up if abuf doesn't have room for a header. */ - if ( alen < HFIXEDSZ ) - return ARES_EBADRESP; - - /* Fetch the question and answer count from the header. */ - qdcount = DNS_HEADER_QDCOUNT( abuf ); - ancount = DNS_HEADER_ANCOUNT( abuf ); - if ( qdcount != 1 ) - return ARES_EBADRESP; - - /* Expand the name from the question, and skip past the question. */ - aptr = abuf + HFIXEDSZ; - status = ares__expand_name_for_response( aptr, abuf, alen, &hostname, &len); - if ( status != ARES_SUCCESS ) - return status; - if ( aptr + len + QFIXEDSZ > abuf + alen ) - { - ares_free( hostname ); - return ARES_EBADRESP; - } - aptr += len + QFIXEDSZ; - - /* Allocate nameservers array; ancount gives an upper bound */ - nameservers = ares_malloc( ( ancount + 1 ) * sizeof( char * ) ); - if ( !nameservers ) - { - ares_free( hostname ); - return ARES_ENOMEM; - } - nameservers_num = 0; - - /* Examine each answer resource record (RR) in turn. */ - for ( i = 0; i < ( int ) ancount; i++ ) - { - /* Decode the RR up to the data field. */ - status = ares__expand_name_for_response( aptr, abuf, alen, &rr_name, &len ); - if ( status != ARES_SUCCESS ) - break; - aptr += len; - if ( aptr + RRFIXEDSZ > abuf + alen ) - { - status = ARES_EBADRESP; - ares_free(rr_name); - break; - } - rr_type = DNS_RR_TYPE( aptr ); - rr_class = DNS_RR_CLASS( aptr ); - rr_len = DNS_RR_LEN( aptr ); - aptr += RRFIXEDSZ; - if (aptr + rr_len > abuf + alen) - { - ares_free(rr_name); - status = ARES_EBADRESP; - break; - } - - if ( rr_class == C_IN && rr_type == T_NS ) - { - /* Decode the RR data and add it to the nameservers list */ - status = ares__expand_name_for_response( aptr, abuf, alen, &rr_data, - &len); - if ( status != ARES_SUCCESS ) - { - ares_free(rr_name); - break; - } - - nameservers[nameservers_num] = ares_malloc(strlen(rr_data)+1); - - if (nameservers[nameservers_num]==NULL) - { - ares_free(rr_name); - ares_free(rr_data); - status=ARES_ENOMEM; - break; - } - strcpy(nameservers[nameservers_num],rr_data); - ares_free(rr_data); - - nameservers_num++; - } - - ares_free( rr_name ); - - aptr += rr_len; - if ( aptr > abuf + alen ) - { /* LCOV_EXCL_START: already checked above */ - status = ARES_EBADRESP; - break; - } /* LCOV_EXCL_STOP */ - } - - if ( status == ARES_SUCCESS && nameservers_num == 0 ) - { - status = ARES_ENODATA; - } - if ( status == ARES_SUCCESS ) - { - /* We got our answer. Allocate memory to build the host entry. */ - nameservers[nameservers_num] = NULL; - hostent = ares_malloc( sizeof( struct hostent ) ); - if ( hostent ) - { - hostent->h_addr_list = ares_malloc( 1 * sizeof( char * ) ); - if ( hostent->h_addr_list ) - { - /* Fill in the hostent and return successfully. */ - hostent->h_name = hostname; - hostent->h_aliases = nameservers; - hostent->h_addrtype = AF_INET; - hostent->h_length = sizeof( struct in_addr ); - hostent->h_addr_list[0] = NULL; - *host = hostent; - return ARES_SUCCESS; - } - ares_free( hostent ); - } - status = ARES_ENOMEM; - } - for ( i = 0; i < nameservers_num; i++ ) - ares_free( nameservers[i] ); - ares_free( nameservers ); - ares_free( hostname ); - return status; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_ptr_reply.c nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_ptr_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_ptr_reply.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_ptr_reply.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,221 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_nowarn.h" -#include "ares_private.h" - -int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, - int addrlen, int family, struct hostent **host) -{ - unsigned int qdcount, ancount; - int status, i, rr_type, rr_class, rr_len; - long len; - const unsigned char *aptr; - char *ptrname, *hostname, *rr_name, *rr_data; - struct hostent *hostent; - int aliascnt = 0; - int alias_alloc = 8; - char ** aliases; - size_t rr_data_len; - - /* Set *host to NULL for all failure cases. */ - *host = NULL; - - /* Give up if abuf doesn't have room for a header. */ - if (alen < HFIXEDSZ) - return ARES_EBADRESP; - - /* Fetch the question and answer count from the header. */ - qdcount = DNS_HEADER_QDCOUNT(abuf); - ancount = DNS_HEADER_ANCOUNT(abuf); - if (qdcount != 1) - return ARES_EBADRESP; - - /* Expand the name from the question, and skip past the question. */ - aptr = abuf + HFIXEDSZ; - status = ares__expand_name_for_response(aptr, abuf, alen, &ptrname, &len); - if (status != ARES_SUCCESS) - return status; - if (aptr + len + QFIXEDSZ > abuf + alen) - { - ares_free(ptrname); - return ARES_EBADRESP; - } - aptr += len + QFIXEDSZ; - - /* Examine each answer resource record (RR) in turn. */ - hostname = NULL; - aliases = ares_malloc(alias_alloc * sizeof(char *)); - if (!aliases) - { - ares_free(ptrname); - return ARES_ENOMEM; - } - for (i = 0; i < (int)ancount; i++) - { - /* Decode the RR up to the data field. */ - status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len); - if (status != ARES_SUCCESS) - break; - aptr += len; - if (aptr + RRFIXEDSZ > abuf + alen) - { - ares_free(rr_name); - status = ARES_EBADRESP; - break; - } - rr_type = DNS_RR_TYPE(aptr); - rr_class = DNS_RR_CLASS(aptr); - rr_len = DNS_RR_LEN(aptr); - aptr += RRFIXEDSZ; - if (aptr + rr_len > abuf + alen) - { - ares_free(rr_name); - status = ARES_EBADRESP; - break; - } - - if (rr_class == C_IN && rr_type == T_PTR - && strcasecmp(rr_name, ptrname) == 0) - { - /* Decode the RR data and set hostname to it. */ - status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, - &len); - if (status != ARES_SUCCESS) - { - ares_free(rr_name); - break; - } - if (hostname) - ares_free(hostname); - hostname = rr_data; - rr_data_len = strlen(rr_data)+1; - aliases[aliascnt] = ares_malloc(rr_data_len * sizeof(char)); - if (!aliases[aliascnt]) - { - ares_free(rr_name); - status = ARES_ENOMEM; - break; - } - strncpy(aliases[aliascnt], rr_data, rr_data_len); - aliascnt++; - if (aliascnt >= alias_alloc) { - char **ptr; - alias_alloc *= 2; - ptr = ares_realloc(aliases, alias_alloc * sizeof(char *)); - if(!ptr) { - ares_free(rr_name); - status = ARES_ENOMEM; - break; - } - aliases = ptr; - } - } - - if (rr_class == C_IN && rr_type == T_CNAME) - { - /* Decode the RR data and replace ptrname with it. */ - status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, - &len); - if (status != ARES_SUCCESS) - { - ares_free(rr_name); - break; - } - ares_free(ptrname); - ptrname = rr_data; - } - - ares_free(rr_name); - aptr += rr_len; - if (aptr > abuf + alen) - { /* LCOV_EXCL_START: already checked above */ - status = ARES_EBADRESP; - break; - } /* LCOV_EXCL_STOP */ - } - - if (status == ARES_SUCCESS && !hostname) - status = ARES_ENODATA; - if (status == ARES_SUCCESS) - { - /* We got our answer. Allocate memory to build the host entry. */ - hostent = ares_malloc(sizeof(struct hostent)); - if (hostent) - { - hostent->h_addr_list = ares_malloc(2 * sizeof(char *)); - if (hostent->h_addr_list) - { - hostent->h_addr_list[0] = ares_malloc(addrlen); - if (hostent->h_addr_list[0]) - { - hostent->h_aliases = ares_malloc((aliascnt+1) * sizeof (char *)); - if (hostent->h_aliases) - { - /* Fill in the hostent and return successfully. */ - hostent->h_name = hostname; - for (i=0 ; ih_aliases[i] = aliases[i]; - hostent->h_aliases[aliascnt] = NULL; - hostent->h_addrtype = aresx_sitoss(family); - hostent->h_length = aresx_sitoss(addrlen); - memcpy(hostent->h_addr_list[0], addr, addrlen); - hostent->h_addr_list[1] = NULL; - *host = hostent; - ares_free(aliases); - ares_free(ptrname); - return ARES_SUCCESS; - } - ares_free(hostent->h_addr_list[0]); - } - ares_free(hostent->h_addr_list); - } - ares_free(hostent); - } - status = ARES_ENOMEM; - } - for (i=0 ; i - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_data.h" -#include "ares_private.h" - -int -ares_parse_soa_reply(const unsigned char *abuf, int alen, - struct ares_soa_reply **soa_out) -{ - const unsigned char *aptr; - long len; - char *qname = NULL, *rr_name = NULL; - struct ares_soa_reply *soa = NULL; - int qdcount, ancount, qclass; - int status, i, rr_type, rr_class, rr_len; - - if (alen < HFIXEDSZ) - return ARES_EBADRESP; - - /* parse message header */ - qdcount = DNS_HEADER_QDCOUNT(abuf); - ancount = DNS_HEADER_ANCOUNT(abuf); - - if (qdcount != 1) - return ARES_EBADRESP; - if (ancount == 0) - return ARES_EBADRESP; - - aptr = abuf + HFIXEDSZ; - - /* query name */ - status = ares__expand_name_for_response(aptr, abuf, alen, &qname, &len); - if (status != ARES_SUCCESS) - goto failed_stat; - aptr += len; - - qclass = DNS_QUESTION_TYPE(aptr); - - /* skip qtype & qclass */ - if (aptr + QFIXEDSZ > abuf + alen) - goto failed; - aptr += QFIXEDSZ; - - /* qclass of SOA with multiple answers */ - if (qclass == T_SOA && ancount > 1) - goto failed; - - /* examine all the records, break and return if found soa */ - for (i = 0; i < ancount; i++) - { - rr_name = NULL; - status = ares__expand_name_for_response (aptr, abuf, alen, &rr_name, &len); - if (status != ARES_SUCCESS) - { - ares_free(rr_name); - goto failed_stat; - } - - aptr += len; - if ( aptr + RRFIXEDSZ > abuf + alen ) - { - ares_free(rr_name); - status = ARES_EBADRESP; - goto failed_stat; - } - rr_type = DNS_RR_TYPE( aptr ); - rr_class = DNS_RR_CLASS( aptr ); - rr_len = DNS_RR_LEN( aptr ); - aptr += RRFIXEDSZ; - if (aptr + rr_len > abuf + alen) - { - ares_free(rr_name); - status = ARES_EBADRESP; - goto failed_stat; - } - if ( rr_class == C_IN && rr_type == T_SOA ) - { - /* allocate result struct */ - soa = ares_malloc_data(ARES_DATATYPE_SOA_REPLY); - if (!soa) - { - ares_free(rr_name); - status = ARES_ENOMEM; - goto failed_stat; - } - - /* nsname */ - status = ares__expand_name_for_response(aptr, abuf, alen, &soa->nsname, - &len); - if (status != ARES_SUCCESS) - { - ares_free(rr_name); - goto failed_stat; - } - aptr += len; - - /* hostmaster */ - status = ares__expand_name_for_response(aptr, abuf, alen, - &soa->hostmaster, &len); - if (status != ARES_SUCCESS) - { - ares_free(rr_name); - goto failed_stat; - } - aptr += len; - - /* integer fields */ - if (aptr + 5 * 4 > abuf + alen) - { - ares_free(rr_name); - goto failed; - } - soa->serial = DNS__32BIT(aptr + 0 * 4); - soa->refresh = DNS__32BIT(aptr + 1 * 4); - soa->retry = DNS__32BIT(aptr + 2 * 4); - soa->expire = DNS__32BIT(aptr + 3 * 4); - soa->minttl = DNS__32BIT(aptr + 4 * 4); - - ares_free(qname); - ares_free(rr_name); - - *soa_out = soa; - - return ARES_SUCCESS; - } - aptr += rr_len; - - ares_free(rr_name); - - if (aptr > abuf + alen) - goto failed_stat; - } - /* no SOA record found */ - status = ARES_EBADRESP; - goto failed_stat; -failed: - status = ARES_EBADRESP; - -failed_stat: - if (soa) - ares_free_data(soa); - if (qname) - ares_free(qname); - return status; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_srv_reply.c nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_srv_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_srv_reply.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_srv_reply.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,179 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2009 by Jakub Hrozek - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_data.h" -#include "ares_private.h" - -/* AIX portability check */ -#ifndef T_SRV -# define T_SRV 33 /* server selection */ -#endif - -int -ares_parse_srv_reply (const unsigned char *abuf, int alen, - struct ares_srv_reply **srv_out) -{ - unsigned int qdcount, ancount, i; - const unsigned char *aptr, *vptr; - int status, rr_type, rr_class, rr_len; - long len; - char *hostname = NULL, *rr_name = NULL; - struct ares_srv_reply *srv_head = NULL; - struct ares_srv_reply *srv_last = NULL; - struct ares_srv_reply *srv_curr; - - /* Set *srv_out to NULL for all failure cases. */ - *srv_out = NULL; - - /* Give up if abuf doesn't have room for a header. */ - if (alen < HFIXEDSZ) - return ARES_EBADRESP; - - /* Fetch the question and answer count from the header. */ - qdcount = DNS_HEADER_QDCOUNT (abuf); - ancount = DNS_HEADER_ANCOUNT (abuf); - if (qdcount != 1) - return ARES_EBADRESP; - if (ancount == 0) - return ARES_ENODATA; - - /* Expand the name from the question, and skip past the question. */ - aptr = abuf + HFIXEDSZ; - status = ares_expand_name (aptr, abuf, alen, &hostname, &len); - if (status != ARES_SUCCESS) - return status; - - if (aptr + len + QFIXEDSZ > abuf + alen) - { - ares_free (hostname); - return ARES_EBADRESP; - } - aptr += len + QFIXEDSZ; - - /* Examine each answer resource record (RR) in turn. */ - for (i = 0; i < ancount; i++) - { - /* Decode the RR up to the data field. */ - status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); - if (status != ARES_SUCCESS) - { - break; - } - aptr += len; - if (aptr + RRFIXEDSZ > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - rr_type = DNS_RR_TYPE (aptr); - rr_class = DNS_RR_CLASS (aptr); - rr_len = DNS_RR_LEN (aptr); - aptr += RRFIXEDSZ; - if (aptr + rr_len > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - - /* Check if we are really looking at a SRV record */ - if (rr_class == C_IN && rr_type == T_SRV) - { - /* parse the SRV record itself */ - if (rr_len < 6) - { - status = ARES_EBADRESP; - break; - } - - /* Allocate storage for this SRV answer appending it to the list */ - srv_curr = ares_malloc_data(ARES_DATATYPE_SRV_REPLY); - if (!srv_curr) - { - status = ARES_ENOMEM; - break; - } - if (srv_last) - { - srv_last->next = srv_curr; - } - else - { - srv_head = srv_curr; - } - srv_last = srv_curr; - - vptr = aptr; - srv_curr->priority = DNS__16BIT(vptr); - vptr += sizeof(unsigned short); - srv_curr->weight = DNS__16BIT(vptr); - vptr += sizeof(unsigned short); - srv_curr->port = DNS__16BIT(vptr); - vptr += sizeof(unsigned short); - - status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len); - if (status != ARES_SUCCESS) - break; - } - - /* Don't lose memory in the next iteration */ - ares_free (rr_name); - rr_name = NULL; - - /* Move on to the next record */ - aptr += rr_len; - } - - if (hostname) - ares_free (hostname); - if (rr_name) - ares_free (rr_name); - - /* clean up on error */ - if (status != ARES_SUCCESS) - { - if (srv_head) - ares_free_data (srv_head); - return status; - } - - /* everything looks fine, return the data */ - *srv_out = srv_head; - - return ARES_SUCCESS; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_txt_reply.c nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_txt_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_parse_txt_reply.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_parse_txt_reply.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,220 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2009 by Jakub Hrozek - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_data.h" -#include "ares_private.h" - -static int -ares__parse_txt_reply (const unsigned char *abuf, int alen, - int ex, void **txt_out) -{ - size_t substr_len; - unsigned int qdcount, ancount, i; - const unsigned char *aptr; - const unsigned char *strptr; - int status, rr_type, rr_class, rr_len; - long len; - char *hostname = NULL, *rr_name = NULL; - struct ares_txt_ext *txt_head = NULL; - struct ares_txt_ext *txt_last = NULL; - struct ares_txt_ext *txt_curr; - - /* Set *txt_out to NULL for all failure cases. */ - *txt_out = NULL; - - /* Give up if abuf doesn't have room for a header. */ - if (alen < HFIXEDSZ) - return ARES_EBADRESP; - - /* Fetch the question and answer count from the header. */ - qdcount = DNS_HEADER_QDCOUNT (abuf); - ancount = DNS_HEADER_ANCOUNT (abuf); - if (qdcount != 1) - return ARES_EBADRESP; - if (ancount == 0) - return ARES_ENODATA; - - /* Expand the name from the question, and skip past the question. */ - aptr = abuf + HFIXEDSZ; - status = ares_expand_name (aptr, abuf, alen, &hostname, &len); - if (status != ARES_SUCCESS) - return status; - - if (aptr + len + QFIXEDSZ > abuf + alen) - { - ares_free (hostname); - return ARES_EBADRESP; - } - aptr += len + QFIXEDSZ; - - /* Examine each answer resource record (RR) in turn. */ - for (i = 0; i < ancount; i++) - { - /* Decode the RR up to the data field. */ - status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); - if (status != ARES_SUCCESS) - { - break; - } - aptr += len; - if (aptr + RRFIXEDSZ > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - rr_type = DNS_RR_TYPE (aptr); - rr_class = DNS_RR_CLASS (aptr); - rr_len = DNS_RR_LEN (aptr); - aptr += RRFIXEDSZ; - if (aptr + rr_len > abuf + alen) - { - status = ARES_EBADRESP; - break; - } - - /* Check if we are really looking at a TXT record */ - if (rr_class == C_IN && rr_type == T_TXT) - { - /* - * There may be multiple substrings in a single TXT record. Each - * substring may be up to 255 characters in length, with a - * "length byte" indicating the size of the substring payload. - * RDATA contains both the length-bytes and payloads of all - * substrings contained therein. - */ - - strptr = aptr; - while (strptr < (aptr + rr_len)) - { - substr_len = (unsigned char)*strptr; - if (strptr + substr_len + 1 > aptr + rr_len) - { - status = ARES_EBADRESP; - break; - } - - /* Allocate storage for this TXT answer appending it to the list */ - txt_curr = ares_malloc_data(ex ? ARES_DATATYPE_TXT_EXT : - ARES_DATATYPE_TXT_REPLY); - if (!txt_curr) - { - status = ARES_ENOMEM; - break; - } - if (txt_last) - { - txt_last->next = txt_curr; - } - else - { - txt_head = txt_curr; - } - txt_last = txt_curr; - - if (ex) - txt_curr->record_start = (strptr == aptr); - txt_curr->length = substr_len; - txt_curr->txt = ares_malloc (substr_len + 1/* Including null byte */); - if (txt_curr->txt == NULL) - { - status = ARES_ENOMEM; - break; - } - - ++strptr; - memcpy ((char *) txt_curr->txt, strptr, substr_len); - - /* Make sure we NULL-terminate */ - txt_curr->txt[substr_len] = 0; - - strptr += substr_len; - } - } - - /* Propagate any failures */ - if (status != ARES_SUCCESS) - { - break; - } - - /* Don't lose memory in the next iteration */ - ares_free (rr_name); - rr_name = NULL; - - /* Move on to the next record */ - aptr += rr_len; - } - - if (hostname) - ares_free (hostname); - if (rr_name) - ares_free (rr_name); - - /* clean up on error */ - if (status != ARES_SUCCESS) - { - if (txt_head) - ares_free_data (txt_head); - return status; - } - - /* everything looks fine, return the data */ - *txt_out = txt_head; - - return ARES_SUCCESS; -} - -int -ares_parse_txt_reply (const unsigned char *abuf, int alen, - struct ares_txt_reply **txt_out) -{ - return ares__parse_txt_reply(abuf, alen, 0, (void **) txt_out); -} - - -int -ares_parse_txt_reply_ext (const unsigned char *abuf, int alen, - struct ares_txt_ext **txt_out) -{ - return ares__parse_txt_reply(abuf, alen, 1, (void **) txt_out); -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_platform.c nodejs-mozilla-12.22.12/deps/cares/src/ares_platform.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_platform.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_platform.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,11042 +0,0 @@ - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004 - 2011 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include "ares.h" -#include "ares_platform.h" -#include "ares_nowarn.h" -#include "ares_private.h" - -#if defined(WIN32) && !defined(MSDOS) - -#define V_PLATFORM_WIN32s 0 -#define V_PLATFORM_WIN32_WINDOWS 1 -#define V_PLATFORM_WIN32_NT 2 -#define V_PLATFORM_WIN32_CE 3 - -win_platform ares__getplatform(void) -{ - OSVERSIONINFOEX OsvEx; - - memset(&OsvEx, 0, sizeof(OsvEx)); - OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4996) /* warning C4996: 'GetVersionExW': was declared deprecated */ -#endif - if (!GetVersionEx((void *)&OsvEx)) - { - memset(&OsvEx, 0, sizeof(OsvEx)); - OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - if (!GetVersionEx((void *)&OsvEx)) - return WIN_UNKNOWN; - } -#ifdef _MSC_VER -#pragma warning(pop) -#endif - - switch(OsvEx.dwPlatformId) - { - case V_PLATFORM_WIN32s: - return WIN_3X; - - case V_PLATFORM_WIN32_WINDOWS: - return WIN_9X; - - case V_PLATFORM_WIN32_NT: - return WIN_NT; - - case V_PLATFORM_WIN32_CE: - return WIN_CE; - - default: - return WIN_UNKNOWN; - } -} - -#endif /* WIN32 && ! MSDOS */ - -#if defined(_WIN32_WCE) - -/* IANA Well Known Ports are in range 0-1023 */ -#define USE_IANA_WELL_KNOWN_PORTS 1 - -/* IANA Registered Ports are in range 1024-49151 */ -#define USE_IANA_REGISTERED_PORTS 1 - -struct pvt_servent { - char *s_name; - char **s_aliases; - unsigned short s_port; - char *s_proto; -}; - -/* - * Ref: http://www.iana.org/assignments/port-numbers - */ - -static struct pvt_servent IANAports[] = { -#ifdef USE_IANA_WELL_KNOWN_PORTS -{"tcpmux", {NULL}, 1, "tcp"}, -{"tcpmux", {NULL}, 1, "udp"}, -{"compressnet", {NULL}, 2, "tcp"}, -{"compressnet", {NULL}, 2, "udp"}, -{"compressnet", {NULL}, 3, "tcp"}, -{"compressnet", {NULL}, 3, "udp"}, -{"rje", {NULL}, 5, "tcp"}, -{"rje", {NULL}, 5, "udp"}, -{"echo", {NULL}, 7, "tcp"}, -{"echo", {NULL}, 7, "udp"}, -{"discard", {NULL}, 9, "tcp"}, -{"discard", {NULL}, 9, "udp"}, -{"discard", {NULL}, 9, "sctp"}, -{"discard", {NULL}, 9, "dccp"}, -{"systat", {NULL}, 11, "tcp"}, -{"systat", {NULL}, 11, "udp"}, -{"daytime", {NULL}, 13, "tcp"}, -{"daytime", {NULL}, 13, "udp"}, -{"qotd", {NULL}, 17, "tcp"}, -{"qotd", {NULL}, 17, "udp"}, -{"msp", {NULL}, 18, "tcp"}, -{"msp", {NULL}, 18, "udp"}, -{"chargen", {NULL}, 19, "tcp"}, -{"chargen", {NULL}, 19, "udp"}, -{"ftp-data", {NULL}, 20, "tcp"}, -{"ftp-data", {NULL}, 20, "udp"}, -{"ftp-data", {NULL}, 20, "sctp"}, -{"ftp", {NULL}, 21, "tcp"}, -{"ftp", {NULL}, 21, "udp"}, -{"ftp", {NULL}, 21, "sctp"}, -{"ssh", {NULL}, 22, "tcp"}, -{"ssh", {NULL}, 22, "udp"}, -{"ssh", {NULL}, 22, "sctp"}, -{"telnet", {NULL}, 23, "tcp"}, -{"telnet", {NULL}, 23, "udp"}, -{"smtp", {NULL}, 25, "tcp"}, -{"smtp", {NULL}, 25, "udp"}, -{"nsw-fe", {NULL}, 27, "tcp"}, -{"nsw-fe", {NULL}, 27, "udp"}, -{"msg-icp", {NULL}, 29, "tcp"}, -{"msg-icp", {NULL}, 29, "udp"}, -{"msg-auth", {NULL}, 31, "tcp"}, -{"msg-auth", {NULL}, 31, "udp"}, -{"dsp", {NULL}, 33, "tcp"}, -{"dsp", {NULL}, 33, "udp"}, -{"time", {NULL}, 37, "tcp"}, -{"time", {NULL}, 37, "udp"}, -{"rap", {NULL}, 38, "tcp"}, -{"rap", {NULL}, 38, "udp"}, -{"rlp", {NULL}, 39, "tcp"}, -{"rlp", {NULL}, 39, "udp"}, -{"graphics", {NULL}, 41, "tcp"}, -{"graphics", {NULL}, 41, "udp"}, -{"name", {NULL}, 42, "tcp"}, -{"name", {NULL}, 42, "udp"}, -{"nameserver", {NULL}, 42, "tcp"}, -{"nameserver", {NULL}, 42, "udp"}, -{"nicname", {NULL}, 43, "tcp"}, -{"nicname", {NULL}, 43, "udp"}, -{"mpm-flags", {NULL}, 44, "tcp"}, -{"mpm-flags", {NULL}, 44, "udp"}, -{"mpm", {NULL}, 45, "tcp"}, -{"mpm", {NULL}, 45, "udp"}, -{"mpm-snd", {NULL}, 46, "tcp"}, -{"mpm-snd", {NULL}, 46, "udp"}, -{"ni-ftp", {NULL}, 47, "tcp"}, -{"ni-ftp", {NULL}, 47, "udp"}, -{"auditd", {NULL}, 48, "tcp"}, -{"auditd", {NULL}, 48, "udp"}, -{"tacacs", {NULL}, 49, "tcp"}, -{"tacacs", {NULL}, 49, "udp"}, -{"re-mail-ck", {NULL}, 50, "tcp"}, -{"re-mail-ck", {NULL}, 50, "udp"}, -{"la-maint", {NULL}, 51, "tcp"}, -{"la-maint", {NULL}, 51, "udp"}, -{"xns-time", {NULL}, 52, "tcp"}, -{"xns-time", {NULL}, 52, "udp"}, -{"domain", {NULL}, 53, "tcp"}, -{"domain", {NULL}, 53, "udp"}, -{"xns-ch", {NULL}, 54, "tcp"}, -{"xns-ch", {NULL}, 54, "udp"}, -{"isi-gl", {NULL}, 55, "tcp"}, -{"isi-gl", {NULL}, 55, "udp"}, -{"xns-auth", {NULL}, 56, "tcp"}, -{"xns-auth", {NULL}, 56, "udp"}, -{"xns-mail", {NULL}, 58, "tcp"}, -{"xns-mail", {NULL}, 58, "udp"}, -{"ni-mail", {NULL}, 61, "tcp"}, -{"ni-mail", {NULL}, 61, "udp"}, -{"acas", {NULL}, 62, "tcp"}, -{"acas", {NULL}, 62, "udp"}, -{"whois++", {NULL}, 63, "tcp"}, -{"whois++", {NULL}, 63, "udp"}, -{"covia", {NULL}, 64, "tcp"}, -{"covia", {NULL}, 64, "udp"}, -{"tacacs-ds", {NULL}, 65, "tcp"}, -{"tacacs-ds", {NULL}, 65, "udp"}, -{"sql*net", {NULL}, 66, "tcp"}, -{"sql*net", {NULL}, 66, "udp"}, -{"bootps", {NULL}, 67, "tcp"}, -{"bootps", {NULL}, 67, "udp"}, -{"bootpc", {NULL}, 68, "tcp"}, -{"bootpc", {NULL}, 68, "udp"}, -{"tftp", {NULL}, 69, "tcp"}, -{"tftp", {NULL}, 69, "udp"}, -{"gopher", {NULL}, 70, "tcp"}, -{"gopher", {NULL}, 70, "udp"}, -{"netrjs-1", {NULL}, 71, "tcp"}, -{"netrjs-1", {NULL}, 71, "udp"}, -{"netrjs-2", {NULL}, 72, "tcp"}, -{"netrjs-2", {NULL}, 72, "udp"}, -{"netrjs-3", {NULL}, 73, "tcp"}, -{"netrjs-3", {NULL}, 73, "udp"}, -{"netrjs-4", {NULL}, 74, "tcp"}, -{"netrjs-4", {NULL}, 74, "udp"}, -{"deos", {NULL}, 76, "tcp"}, -{"deos", {NULL}, 76, "udp"}, -{"vettcp", {NULL}, 78, "tcp"}, -{"vettcp", {NULL}, 78, "udp"}, -{"finger", {NULL}, 79, "tcp"}, -{"finger", {NULL}, 79, "udp"}, -{"http", {NULL}, 80, "tcp"}, -{"http", {NULL}, 80, "udp"}, -{"www", {NULL}, 80, "tcp"}, -{"www", {NULL}, 80, "udp"}, -{"www-http", {NULL}, 80, "tcp"}, -{"www-http", {NULL}, 80, "udp"}, -{"http", {NULL}, 80, "sctp"}, -{"xfer", {NULL}, 82, "tcp"}, -{"xfer", {NULL}, 82, "udp"}, -{"mit-ml-dev", {NULL}, 83, "tcp"}, -{"mit-ml-dev", {NULL}, 83, "udp"}, -{"ctf", {NULL}, 84, "tcp"}, -{"ctf", {NULL}, 84, "udp"}, -{"mit-ml-dev", {NULL}, 85, "tcp"}, -{"mit-ml-dev", {NULL}, 85, "udp"}, -{"mfcobol", {NULL}, 86, "tcp"}, -{"mfcobol", {NULL}, 86, "udp"}, -{"kerberos", {NULL}, 88, "tcp"}, -{"kerberos", {NULL}, 88, "udp"}, -{"su-mit-tg", {NULL}, 89, "tcp"}, -{"su-mit-tg", {NULL}, 89, "udp"}, -{"dnsix", {NULL}, 90, "tcp"}, -{"dnsix", {NULL}, 90, "udp"}, -{"mit-dov", {NULL}, 91, "tcp"}, -{"mit-dov", {NULL}, 91, "udp"}, -{"npp", {NULL}, 92, "tcp"}, -{"npp", {NULL}, 92, "udp"}, -{"dcp", {NULL}, 93, "tcp"}, -{"dcp", {NULL}, 93, "udp"}, -{"objcall", {NULL}, 94, "tcp"}, -{"objcall", {NULL}, 94, "udp"}, -{"supdup", {NULL}, 95, "tcp"}, -{"supdup", {NULL}, 95, "udp"}, -{"dixie", {NULL}, 96, "tcp"}, -{"dixie", {NULL}, 96, "udp"}, -{"swift-rvf", {NULL}, 97, "tcp"}, -{"swift-rvf", {NULL}, 97, "udp"}, -{"tacnews", {NULL}, 98, "tcp"}, -{"tacnews", {NULL}, 98, "udp"}, -{"metagram", {NULL}, 99, "tcp"}, -{"metagram", {NULL}, 99, "udp"}, -{"newacct", {NULL}, 100, "tcp"}, -{"hostname", {NULL}, 101, "tcp"}, -{"hostname", {NULL}, 101, "udp"}, -{"iso-tsap", {NULL}, 102, "tcp"}, -{"iso-tsap", {NULL}, 102, "udp"}, -{"gppitnp", {NULL}, 103, "tcp"}, -{"gppitnp", {NULL}, 103, "udp"}, -{"acr-nema", {NULL}, 104, "tcp"}, -{"acr-nema", {NULL}, 104, "udp"}, -{"cso", {NULL}, 105, "tcp"}, -{"cso", {NULL}, 105, "udp"}, -{"csnet-ns", {NULL}, 105, "tcp"}, -{"csnet-ns", {NULL}, 105, "udp"}, -{"3com-tsmux", {NULL}, 106, "tcp"}, -{"3com-tsmux", {NULL}, 106, "udp"}, -{"rtelnet", {NULL}, 107, "tcp"}, -{"rtelnet", {NULL}, 107, "udp"}, -{"snagas", {NULL}, 108, "tcp"}, -{"snagas", {NULL}, 108, "udp"}, -{"pop2", {NULL}, 109, "tcp"}, -{"pop2", {NULL}, 109, "udp"}, -{"pop3", {NULL}, 110, "tcp"}, -{"pop3", {NULL}, 110, "udp"}, -{"sunrpc", {NULL}, 111, "tcp"}, -{"sunrpc", {NULL}, 111, "udp"}, -{"mcidas", {NULL}, 112, "tcp"}, -{"mcidas", {NULL}, 112, "udp"}, -{"ident", {NULL}, 113, "tcp"}, -{"auth", {NULL}, 113, "tcp"}, -{"auth", {NULL}, 113, "udp"}, -{"sftp", {NULL}, 115, "tcp"}, -{"sftp", {NULL}, 115, "udp"}, -{"ansanotify", {NULL}, 116, "tcp"}, -{"ansanotify", {NULL}, 116, "udp"}, -{"uucp-path", {NULL}, 117, "tcp"}, -{"uucp-path", {NULL}, 117, "udp"}, -{"sqlserv", {NULL}, 118, "tcp"}, -{"sqlserv", {NULL}, 118, "udp"}, -{"nntp", {NULL}, 119, "tcp"}, -{"nntp", {NULL}, 119, "udp"}, -{"cfdptkt", {NULL}, 120, "tcp"}, -{"cfdptkt", {NULL}, 120, "udp"}, -{"erpc", {NULL}, 121, "tcp"}, -{"erpc", {NULL}, 121, "udp"}, -{"smakynet", {NULL}, 122, "tcp"}, -{"smakynet", {NULL}, 122, "udp"}, -{"ntp", {NULL}, 123, "tcp"}, -{"ntp", {NULL}, 123, "udp"}, -{"ansatrader", {NULL}, 124, "tcp"}, -{"ansatrader", {NULL}, 124, "udp"}, -{"locus-map", {NULL}, 125, "tcp"}, -{"locus-map", {NULL}, 125, "udp"}, -{"nxedit", {NULL}, 126, "tcp"}, -{"nxedit", {NULL}, 126, "udp"}, -{"locus-con", {NULL}, 127, "tcp"}, -{"locus-con", {NULL}, 127, "udp"}, -{"gss-xlicen", {NULL}, 128, "tcp"}, -{"gss-xlicen", {NULL}, 128, "udp"}, -{"pwdgen", {NULL}, 129, "tcp"}, -{"pwdgen", {NULL}, 129, "udp"}, -{"cisco-fna", {NULL}, 130, "tcp"}, -{"cisco-fna", {NULL}, 130, "udp"}, -{"cisco-tna", {NULL}, 131, "tcp"}, -{"cisco-tna", {NULL}, 131, "udp"}, -{"cisco-sys", {NULL}, 132, "tcp"}, -{"cisco-sys", {NULL}, 132, "udp"}, -{"statsrv", {NULL}, 133, "tcp"}, -{"statsrv", {NULL}, 133, "udp"}, -{"ingres-net", {NULL}, 134, "tcp"}, -{"ingres-net", {NULL}, 134, "udp"}, -{"epmap", {NULL}, 135, "tcp"}, -{"epmap", {NULL}, 135, "udp"}, -{"profile", {NULL}, 136, "tcp"}, -{"profile", {NULL}, 136, "udp"}, -{"netbios-ns", {NULL}, 137, "tcp"}, -{"netbios-ns", {NULL}, 137, "udp"}, -{"netbios-dgm", {NULL}, 138, "tcp"}, -{"netbios-dgm", {NULL}, 138, "udp"}, -{"netbios-ssn", {NULL}, 139, "tcp"}, -{"netbios-ssn", {NULL}, 139, "udp"}, -{"emfis-data", {NULL}, 140, "tcp"}, -{"emfis-data", {NULL}, 140, "udp"}, -{"emfis-cntl", {NULL}, 141, "tcp"}, -{"emfis-cntl", {NULL}, 141, "udp"}, -{"bl-idm", {NULL}, 142, "tcp"}, -{"bl-idm", {NULL}, 142, "udp"}, -{"imap", {NULL}, 143, "tcp"}, -{"imap", {NULL}, 143, "udp"}, -{"uma", {NULL}, 144, "tcp"}, -{"uma", {NULL}, 144, "udp"}, -{"uaac", {NULL}, 145, "tcp"}, -{"uaac", {NULL}, 145, "udp"}, -{"iso-tp0", {NULL}, 146, "tcp"}, -{"iso-tp0", {NULL}, 146, "udp"}, -{"iso-ip", {NULL}, 147, "tcp"}, -{"iso-ip", {NULL}, 147, "udp"}, -{"jargon", {NULL}, 148, "tcp"}, -{"jargon", {NULL}, 148, "udp"}, -{"aed-512", {NULL}, 149, "tcp"}, -{"aed-512", {NULL}, 149, "udp"}, -{"sql-net", {NULL}, 150, "tcp"}, -{"sql-net", {NULL}, 150, "udp"}, -{"hems", {NULL}, 151, "tcp"}, -{"hems", {NULL}, 151, "udp"}, -{"bftp", {NULL}, 152, "tcp"}, -{"bftp", {NULL}, 152, "udp"}, -{"sgmp", {NULL}, 153, "tcp"}, -{"sgmp", {NULL}, 153, "udp"}, -{"netsc-prod", {NULL}, 154, "tcp"}, -{"netsc-prod", {NULL}, 154, "udp"}, -{"netsc-dev", {NULL}, 155, "tcp"}, -{"netsc-dev", {NULL}, 155, "udp"}, -{"sqlsrv", {NULL}, 156, "tcp"}, -{"sqlsrv", {NULL}, 156, "udp"}, -{"knet-cmp", {NULL}, 157, "tcp"}, -{"knet-cmp", {NULL}, 157, "udp"}, -{"pcmail-srv", {NULL}, 158, "tcp"}, -{"pcmail-srv", {NULL}, 158, "udp"}, -{"nss-routing", {NULL}, 159, "tcp"}, -{"nss-routing", {NULL}, 159, "udp"}, -{"sgmp-traps", {NULL}, 160, "tcp"}, -{"sgmp-traps", {NULL}, 160, "udp"}, -{"snmp", {NULL}, 161, "tcp"}, -{"snmp", {NULL}, 161, "udp"}, -{"snmptrap", {NULL}, 162, "tcp"}, -{"snmptrap", {NULL}, 162, "udp"}, -{"cmip-man", {NULL}, 163, "tcp"}, -{"cmip-man", {NULL}, 163, "udp"}, -{"cmip-agent", {NULL}, 164, "tcp"}, -{"cmip-agent", {NULL}, 164, "udp"}, -{"xns-courier", {NULL}, 165, "tcp"}, -{"xns-courier", {NULL}, 165, "udp"}, -{"s-net", {NULL}, 166, "tcp"}, -{"s-net", {NULL}, 166, "udp"}, -{"namp", {NULL}, 167, "tcp"}, -{"namp", {NULL}, 167, "udp"}, -{"rsvd", {NULL}, 168, "tcp"}, -{"rsvd", {NULL}, 168, "udp"}, -{"send", {NULL}, 169, "tcp"}, -{"send", {NULL}, 169, "udp"}, -{"print-srv", {NULL}, 170, "tcp"}, -{"print-srv", {NULL}, 170, "udp"}, -{"multiplex", {NULL}, 171, "tcp"}, -{"multiplex", {NULL}, 171, "udp"}, -{"cl/1", {NULL}, 172, "tcp"}, -{"cl/1", {NULL}, 172, "udp"}, -{"xyplex-mux", {NULL}, 173, "tcp"}, -{"xyplex-mux", {NULL}, 173, "udp"}, -{"mailq", {NULL}, 174, "tcp"}, -{"mailq", {NULL}, 174, "udp"}, -{"vmnet", {NULL}, 175, "tcp"}, -{"vmnet", {NULL}, 175, "udp"}, -{"genrad-mux", {NULL}, 176, "tcp"}, -{"genrad-mux", {NULL}, 176, "udp"}, -{"xdmcp", {NULL}, 177, "tcp"}, -{"xdmcp", {NULL}, 177, "udp"}, -{"nextstep", {NULL}, 178, "tcp"}, -{"nextstep", {NULL}, 178, "udp"}, -{"bgp", {NULL}, 179, "tcp"}, -{"bgp", {NULL}, 179, "udp"}, -{"bgp", {NULL}, 179, "sctp"}, -{"ris", {NULL}, 180, "tcp"}, -{"ris", {NULL}, 180, "udp"}, -{"unify", {NULL}, 181, "tcp"}, -{"unify", {NULL}, 181, "udp"}, -{"audit", {NULL}, 182, "tcp"}, -{"audit", {NULL}, 182, "udp"}, -{"ocbinder", {NULL}, 183, "tcp"}, -{"ocbinder", {NULL}, 183, "udp"}, -{"ocserver", {NULL}, 184, "tcp"}, -{"ocserver", {NULL}, 184, "udp"}, -{"remote-kis", {NULL}, 185, "tcp"}, -{"remote-kis", {NULL}, 185, "udp"}, -{"kis", {NULL}, 186, "tcp"}, -{"kis", {NULL}, 186, "udp"}, -{"aci", {NULL}, 187, "tcp"}, -{"aci", {NULL}, 187, "udp"}, -{"mumps", {NULL}, 188, "tcp"}, -{"mumps", {NULL}, 188, "udp"}, -{"qft", {NULL}, 189, "tcp"}, -{"qft", {NULL}, 189, "udp"}, -{"gacp", {NULL}, 190, "tcp"}, -{"gacp", {NULL}, 190, "udp"}, -{"prospero", {NULL}, 191, "tcp"}, -{"prospero", {NULL}, 191, "udp"}, -{"osu-nms", {NULL}, 192, "tcp"}, -{"osu-nms", {NULL}, 192, "udp"}, -{"srmp", {NULL}, 193, "tcp"}, -{"srmp", {NULL}, 193, "udp"}, -{"irc", {NULL}, 194, "tcp"}, -{"irc", {NULL}, 194, "udp"}, -{"dn6-nlm-aud", {NULL}, 195, "tcp"}, -{"dn6-nlm-aud", {NULL}, 195, "udp"}, -{"dn6-smm-red", {NULL}, 196, "tcp"}, -{"dn6-smm-red", {NULL}, 196, "udp"}, -{"dls", {NULL}, 197, "tcp"}, -{"dls", {NULL}, 197, "udp"}, -{"dls-mon", {NULL}, 198, "tcp"}, -{"dls-mon", {NULL}, 198, "udp"}, -{"smux", {NULL}, 199, "tcp"}, -{"smux", {NULL}, 199, "udp"}, -{"src", {NULL}, 200, "tcp"}, -{"src", {NULL}, 200, "udp"}, -{"at-rtmp", {NULL}, 201, "tcp"}, -{"at-rtmp", {NULL}, 201, "udp"}, -{"at-nbp", {NULL}, 202, "tcp"}, -{"at-nbp", {NULL}, 202, "udp"}, -{"at-3", {NULL}, 203, "tcp"}, -{"at-3", {NULL}, 203, "udp"}, -{"at-echo", {NULL}, 204, "tcp"}, -{"at-echo", {NULL}, 204, "udp"}, -{"at-5", {NULL}, 205, "tcp"}, -{"at-5", {NULL}, 205, "udp"}, -{"at-zis", {NULL}, 206, "tcp"}, -{"at-zis", {NULL}, 206, "udp"}, -{"at-7", {NULL}, 207, "tcp"}, -{"at-7", {NULL}, 207, "udp"}, -{"at-8", {NULL}, 208, "tcp"}, -{"at-8", {NULL}, 208, "udp"}, -{"qmtp", {NULL}, 209, "tcp"}, -{"qmtp", {NULL}, 209, "udp"}, -{"z39.50", {NULL}, 210, "tcp"}, -{"z39.50", {NULL}, 210, "udp"}, -{"914c/g", {NULL}, 211, "tcp"}, -{"914c/g", {NULL}, 211, "udp"}, -{"anet", {NULL}, 212, "tcp"}, -{"anet", {NULL}, 212, "udp"}, -{"ipx", {NULL}, 213, "tcp"}, -{"ipx", {NULL}, 213, "udp"}, -{"vmpwscs", {NULL}, 214, "tcp"}, -{"vmpwscs", {NULL}, 214, "udp"}, -{"softpc", {NULL}, 215, "tcp"}, -{"softpc", {NULL}, 215, "udp"}, -{"CAIlic", {NULL}, 216, "tcp"}, -{"CAIlic", {NULL}, 216, "udp"}, -{"dbase", {NULL}, 217, "tcp"}, -{"dbase", {NULL}, 217, "udp"}, -{"mpp", {NULL}, 218, "tcp"}, -{"mpp", {NULL}, 218, "udp"}, -{"uarps", {NULL}, 219, "tcp"}, -{"uarps", {NULL}, 219, "udp"}, -{"imap3", {NULL}, 220, "tcp"}, -{"imap3", {NULL}, 220, "udp"}, -{"fln-spx", {NULL}, 221, "tcp"}, -{"fln-spx", {NULL}, 221, "udp"}, -{"rsh-spx", {NULL}, 222, "tcp"}, -{"rsh-spx", {NULL}, 222, "udp"}, -{"cdc", {NULL}, 223, "tcp"}, -{"cdc", {NULL}, 223, "udp"}, -{"masqdialer", {NULL}, 224, "tcp"}, -{"masqdialer", {NULL}, 224, "udp"}, -{"direct", {NULL}, 242, "tcp"}, -{"direct", {NULL}, 242, "udp"}, -{"sur-meas", {NULL}, 243, "tcp"}, -{"sur-meas", {NULL}, 243, "udp"}, -{"inbusiness", {NULL}, 244, "tcp"}, -{"inbusiness", {NULL}, 244, "udp"}, -{"link", {NULL}, 245, "tcp"}, -{"link", {NULL}, 245, "udp"}, -{"dsp3270", {NULL}, 246, "tcp"}, -{"dsp3270", {NULL}, 246, "udp"}, -{"subntbcst_tftp", {NULL}, 247, "tcp"}, -{"subntbcst_tftp", {NULL}, 247, "udp"}, -{"bhfhs", {NULL}, 248, "tcp"}, -{"bhfhs", {NULL}, 248, "udp"}, -{"rap", {NULL}, 256, "tcp"}, -{"rap", {NULL}, 256, "udp"}, -{"set", {NULL}, 257, "tcp"}, -{"set", {NULL}, 257, "udp"}, -{"esro-gen", {NULL}, 259, "tcp"}, -{"esro-gen", {NULL}, 259, "udp"}, -{"openport", {NULL}, 260, "tcp"}, -{"openport", {NULL}, 260, "udp"}, -{"nsiiops", {NULL}, 261, "tcp"}, -{"nsiiops", {NULL}, 261, "udp"}, -{"arcisdms", {NULL}, 262, "tcp"}, -{"arcisdms", {NULL}, 262, "udp"}, -{"hdap", {NULL}, 263, "tcp"}, -{"hdap", {NULL}, 263, "udp"}, -{"bgmp", {NULL}, 264, "tcp"}, -{"bgmp", {NULL}, 264, "udp"}, -{"x-bone-ctl", {NULL}, 265, "tcp"}, -{"x-bone-ctl", {NULL}, 265, "udp"}, -{"sst", {NULL}, 266, "tcp"}, -{"sst", {NULL}, 266, "udp"}, -{"td-service", {NULL}, 267, "tcp"}, -{"td-service", {NULL}, 267, "udp"}, -{"td-replica", {NULL}, 268, "tcp"}, -{"td-replica", {NULL}, 268, "udp"}, -{"manet", {NULL}, 269, "tcp"}, -{"manet", {NULL}, 269, "udp"}, -{"gist", {NULL}, 270, "udp"}, -{"http-mgmt", {NULL}, 280, "tcp"}, -{"http-mgmt", {NULL}, 280, "udp"}, -{"personal-link", {NULL}, 281, "tcp"}, -{"personal-link", {NULL}, 281, "udp"}, -{"cableport-ax", {NULL}, 282, "tcp"}, -{"cableport-ax", {NULL}, 282, "udp"}, -{"rescap", {NULL}, 283, "tcp"}, -{"rescap", {NULL}, 283, "udp"}, -{"corerjd", {NULL}, 284, "tcp"}, -{"corerjd", {NULL}, 284, "udp"}, -{"fxp", {NULL}, 286, "tcp"}, -{"fxp", {NULL}, 286, "udp"}, -{"k-block", {NULL}, 287, "tcp"}, -{"k-block", {NULL}, 287, "udp"}, -{"novastorbakcup", {NULL}, 308, "tcp"}, -{"novastorbakcup", {NULL}, 308, "udp"}, -{"entrusttime", {NULL}, 309, "tcp"}, -{"entrusttime", {NULL}, 309, "udp"}, -{"bhmds", {NULL}, 310, "tcp"}, -{"bhmds", {NULL}, 310, "udp"}, -{"asip-webadmin", {NULL}, 311, "tcp"}, -{"asip-webadmin", {NULL}, 311, "udp"}, -{"vslmp", {NULL}, 312, "tcp"}, -{"vslmp", {NULL}, 312, "udp"}, -{"magenta-logic", {NULL}, 313, "tcp"}, -{"magenta-logic", {NULL}, 313, "udp"}, -{"opalis-robot", {NULL}, 314, "tcp"}, -{"opalis-robot", {NULL}, 314, "udp"}, -{"dpsi", {NULL}, 315, "tcp"}, -{"dpsi", {NULL}, 315, "udp"}, -{"decauth", {NULL}, 316, "tcp"}, -{"decauth", {NULL}, 316, "udp"}, -{"zannet", {NULL}, 317, "tcp"}, -{"zannet", {NULL}, 317, "udp"}, -{"pkix-timestamp", {NULL}, 318, "tcp"}, -{"pkix-timestamp", {NULL}, 318, "udp"}, -{"ptp-event", {NULL}, 319, "tcp"}, -{"ptp-event", {NULL}, 319, "udp"}, -{"ptp-general", {NULL}, 320, "tcp"}, -{"ptp-general", {NULL}, 320, "udp"}, -{"pip", {NULL}, 321, "tcp"}, -{"pip", {NULL}, 321, "udp"}, -{"rtsps", {NULL}, 322, "tcp"}, -{"rtsps", {NULL}, 322, "udp"}, -{"texar", {NULL}, 333, "tcp"}, -{"texar", {NULL}, 333, "udp"}, -{"pdap", {NULL}, 344, "tcp"}, -{"pdap", {NULL}, 344, "udp"}, -{"pawserv", {NULL}, 345, "tcp"}, -{"pawserv", {NULL}, 345, "udp"}, -{"zserv", {NULL}, 346, "tcp"}, -{"zserv", {NULL}, 346, "udp"}, -{"fatserv", {NULL}, 347, "tcp"}, -{"fatserv", {NULL}, 347, "udp"}, -{"csi-sgwp", {NULL}, 348, "tcp"}, -{"csi-sgwp", {NULL}, 348, "udp"}, -{"mftp", {NULL}, 349, "tcp"}, -{"mftp", {NULL}, 349, "udp"}, -{"matip-type-a", {NULL}, 350, "tcp"}, -{"matip-type-a", {NULL}, 350, "udp"}, -{"matip-type-b", {NULL}, 351, "tcp"}, -{"matip-type-b", {NULL}, 351, "udp"}, -{"bhoetty", {NULL}, 351, "tcp"}, -{"bhoetty", {NULL}, 351, "udp"}, -{"dtag-ste-sb", {NULL}, 352, "tcp"}, -{"dtag-ste-sb", {NULL}, 352, "udp"}, -{"bhoedap4", {NULL}, 352, "tcp"}, -{"bhoedap4", {NULL}, 352, "udp"}, -{"ndsauth", {NULL}, 353, "tcp"}, -{"ndsauth", {NULL}, 353, "udp"}, -{"bh611", {NULL}, 354, "tcp"}, -{"bh611", {NULL}, 354, "udp"}, -{"datex-asn", {NULL}, 355, "tcp"}, -{"datex-asn", {NULL}, 355, "udp"}, -{"cloanto-net-1", {NULL}, 356, "tcp"}, -{"cloanto-net-1", {NULL}, 356, "udp"}, -{"bhevent", {NULL}, 357, "tcp"}, -{"bhevent", {NULL}, 357, "udp"}, -{"shrinkwrap", {NULL}, 358, "tcp"}, -{"shrinkwrap", {NULL}, 358, "udp"}, -{"nsrmp", {NULL}, 359, "tcp"}, -{"nsrmp", {NULL}, 359, "udp"}, -{"scoi2odialog", {NULL}, 360, "tcp"}, -{"scoi2odialog", {NULL}, 360, "udp"}, -{"semantix", {NULL}, 361, "tcp"}, -{"semantix", {NULL}, 361, "udp"}, -{"srssend", {NULL}, 362, "tcp"}, -{"srssend", {NULL}, 362, "udp"}, -{"rsvp_tunnel", {NULL}, 363, "tcp"}, -{"rsvp_tunnel", {NULL}, 363, "udp"}, -{"aurora-cmgr", {NULL}, 364, "tcp"}, -{"aurora-cmgr", {NULL}, 364, "udp"}, -{"dtk", {NULL}, 365, "tcp"}, -{"dtk", {NULL}, 365, "udp"}, -{"odmr", {NULL}, 366, "tcp"}, -{"odmr", {NULL}, 366, "udp"}, -{"mortgageware", {NULL}, 367, "tcp"}, -{"mortgageware", {NULL}, 367, "udp"}, -{"qbikgdp", {NULL}, 368, "tcp"}, -{"qbikgdp", {NULL}, 368, "udp"}, -{"rpc2portmap", {NULL}, 369, "tcp"}, -{"rpc2portmap", {NULL}, 369, "udp"}, -{"codaauth2", {NULL}, 370, "tcp"}, -{"codaauth2", {NULL}, 370, "udp"}, -{"clearcase", {NULL}, 371, "tcp"}, -{"clearcase", {NULL}, 371, "udp"}, -{"ulistproc", {NULL}, 372, "tcp"}, -{"ulistproc", {NULL}, 372, "udp"}, -{"legent-1", {NULL}, 373, "tcp"}, -{"legent-1", {NULL}, 373, "udp"}, -{"legent-2", {NULL}, 374, "tcp"}, -{"legent-2", {NULL}, 374, "udp"}, -{"hassle", {NULL}, 375, "tcp"}, -{"hassle", {NULL}, 375, "udp"}, -{"nip", {NULL}, 376, "tcp"}, -{"nip", {NULL}, 376, "udp"}, -{"tnETOS", {NULL}, 377, "tcp"}, -{"tnETOS", {NULL}, 377, "udp"}, -{"dsETOS", {NULL}, 378, "tcp"}, -{"dsETOS", {NULL}, 378, "udp"}, -{"is99c", {NULL}, 379, "tcp"}, -{"is99c", {NULL}, 379, "udp"}, -{"is99s", {NULL}, 380, "tcp"}, -{"is99s", {NULL}, 380, "udp"}, -{"hp-collector", {NULL}, 381, "tcp"}, -{"hp-collector", {NULL}, 381, "udp"}, -{"hp-managed-node", {NULL}, 382, "tcp"}, -{"hp-managed-node", {NULL}, 382, "udp"}, -{"hp-alarm-mgr", {NULL}, 383, "tcp"}, -{"hp-alarm-mgr", {NULL}, 383, "udp"}, -{"arns", {NULL}, 384, "tcp"}, -{"arns", {NULL}, 384, "udp"}, -{"ibm-app", {NULL}, 385, "tcp"}, -{"ibm-app", {NULL}, 385, "udp"}, -{"asa", {NULL}, 386, "tcp"}, -{"asa", {NULL}, 386, "udp"}, -{"aurp", {NULL}, 387, "tcp"}, -{"aurp", {NULL}, 387, "udp"}, -{"unidata-ldm", {NULL}, 388, "tcp"}, -{"unidata-ldm", {NULL}, 388, "udp"}, -{"ldap", {NULL}, 389, "tcp"}, -{"ldap", {NULL}, 389, "udp"}, -{"uis", {NULL}, 390, "tcp"}, -{"uis", {NULL}, 390, "udp"}, -{"synotics-relay", {NULL}, 391, "tcp"}, -{"synotics-relay", {NULL}, 391, "udp"}, -{"synotics-broker", {NULL}, 392, "tcp"}, -{"synotics-broker", {NULL}, 392, "udp"}, -{"meta5", {NULL}, 393, "tcp"}, -{"meta5", {NULL}, 393, "udp"}, -{"embl-ndt", {NULL}, 394, "tcp"}, -{"embl-ndt", {NULL}, 394, "udp"}, -{"netcp", {NULL}, 395, "tcp"}, -{"netcp", {NULL}, 395, "udp"}, -{"netware-ip", {NULL}, 396, "tcp"}, -{"netware-ip", {NULL}, 396, "udp"}, -{"mptn", {NULL}, 397, "tcp"}, -{"mptn", {NULL}, 397, "udp"}, -{"kryptolan", {NULL}, 398, "tcp"}, -{"kryptolan", {NULL}, 398, "udp"}, -{"iso-tsap-c2", {NULL}, 399, "tcp"}, -{"iso-tsap-c2", {NULL}, 399, "udp"}, -{"osb-sd", {NULL}, 400, "tcp"}, -{"osb-sd", {NULL}, 400, "udp"}, -{"ups", {NULL}, 401, "tcp"}, -{"ups", {NULL}, 401, "udp"}, -{"genie", {NULL}, 402, "tcp"}, -{"genie", {NULL}, 402, "udp"}, -{"decap", {NULL}, 403, "tcp"}, -{"decap", {NULL}, 403, "udp"}, -{"nced", {NULL}, 404, "tcp"}, -{"nced", {NULL}, 404, "udp"}, -{"ncld", {NULL}, 405, "tcp"}, -{"ncld", {NULL}, 405, "udp"}, -{"imsp", {NULL}, 406, "tcp"}, -{"imsp", {NULL}, 406, "udp"}, -{"timbuktu", {NULL}, 407, "tcp"}, -{"timbuktu", {NULL}, 407, "udp"}, -{"prm-sm", {NULL}, 408, "tcp"}, -{"prm-sm", {NULL}, 408, "udp"}, -{"prm-nm", {NULL}, 409, "tcp"}, -{"prm-nm", {NULL}, 409, "udp"}, -{"decladebug", {NULL}, 410, "tcp"}, -{"decladebug", {NULL}, 410, "udp"}, -{"rmt", {NULL}, 411, "tcp"}, -{"rmt", {NULL}, 411, "udp"}, -{"synoptics-trap", {NULL}, 412, "tcp"}, -{"synoptics-trap", {NULL}, 412, "udp"}, -{"smsp", {NULL}, 413, "tcp"}, -{"smsp", {NULL}, 413, "udp"}, -{"infoseek", {NULL}, 414, "tcp"}, -{"infoseek", {NULL}, 414, "udp"}, -{"bnet", {NULL}, 415, "tcp"}, -{"bnet", {NULL}, 415, "udp"}, -{"silverplatter", {NULL}, 416, "tcp"}, -{"silverplatter", {NULL}, 416, "udp"}, -{"onmux", {NULL}, 417, "tcp"}, -{"onmux", {NULL}, 417, "udp"}, -{"hyper-g", {NULL}, 418, "tcp"}, -{"hyper-g", {NULL}, 418, "udp"}, -{"ariel1", {NULL}, 419, "tcp"}, -{"ariel1", {NULL}, 419, "udp"}, -{"smpte", {NULL}, 420, "tcp"}, -{"smpte", {NULL}, 420, "udp"}, -{"ariel2", {NULL}, 421, "tcp"}, -{"ariel2", {NULL}, 421, "udp"}, -{"ariel3", {NULL}, 422, "tcp"}, -{"ariel3", {NULL}, 422, "udp"}, -{"opc-job-start", {NULL}, 423, "tcp"}, -{"opc-job-start", {NULL}, 423, "udp"}, -{"opc-job-track", {NULL}, 424, "tcp"}, -{"opc-job-track", {NULL}, 424, "udp"}, -{"icad-el", {NULL}, 425, "tcp"}, -{"icad-el", {NULL}, 425, "udp"}, -{"smartsdp", {NULL}, 426, "tcp"}, -{"smartsdp", {NULL}, 426, "udp"}, -{"svrloc", {NULL}, 427, "tcp"}, -{"svrloc", {NULL}, 427, "udp"}, -{"ocs_cmu", {NULL}, 428, "tcp"}, -{"ocs_cmu", {NULL}, 428, "udp"}, -{"ocs_amu", {NULL}, 429, "tcp"}, -{"ocs_amu", {NULL}, 429, "udp"}, -{"utmpsd", {NULL}, 430, "tcp"}, -{"utmpsd", {NULL}, 430, "udp"}, -{"utmpcd", {NULL}, 431, "tcp"}, -{"utmpcd", {NULL}, 431, "udp"}, -{"iasd", {NULL}, 432, "tcp"}, -{"iasd", {NULL}, 432, "udp"}, -{"nnsp", {NULL}, 433, "tcp"}, -{"nnsp", {NULL}, 433, "udp"}, -{"mobileip-agent", {NULL}, 434, "tcp"}, -{"mobileip-agent", {NULL}, 434, "udp"}, -{"mobilip-mn", {NULL}, 435, "tcp"}, -{"mobilip-mn", {NULL}, 435, "udp"}, -{"dna-cml", {NULL}, 436, "tcp"}, -{"dna-cml", {NULL}, 436, "udp"}, -{"comscm", {NULL}, 437, "tcp"}, -{"comscm", {NULL}, 437, "udp"}, -{"dsfgw", {NULL}, 438, "tcp"}, -{"dsfgw", {NULL}, 438, "udp"}, -{"dasp", {NULL}, 439, "tcp"}, -{"dasp", {NULL}, 439, "udp"}, -{"sgcp", {NULL}, 440, "tcp"}, -{"sgcp", {NULL}, 440, "udp"}, -{"decvms-sysmgt", {NULL}, 441, "tcp"}, -{"decvms-sysmgt", {NULL}, 441, "udp"}, -{"cvc_hostd", {NULL}, 442, "tcp"}, -{"cvc_hostd", {NULL}, 442, "udp"}, -{"https", {NULL}, 443, "tcp"}, -{"https", {NULL}, 443, "udp"}, -{"https", {NULL}, 443, "sctp"}, -{"snpp", {NULL}, 444, "tcp"}, -{"snpp", {NULL}, 444, "udp"}, -{"microsoft-ds", {NULL}, 445, "tcp"}, -{"microsoft-ds", {NULL}, 445, "udp"}, -{"ddm-rdb", {NULL}, 446, "tcp"}, -{"ddm-rdb", {NULL}, 446, "udp"}, -{"ddm-dfm", {NULL}, 447, "tcp"}, -{"ddm-dfm", {NULL}, 447, "udp"}, -{"ddm-ssl", {NULL}, 448, "tcp"}, -{"ddm-ssl", {NULL}, 448, "udp"}, -{"as-servermap", {NULL}, 449, "tcp"}, -{"as-servermap", {NULL}, 449, "udp"}, -{"tserver", {NULL}, 450, "tcp"}, -{"tserver", {NULL}, 450, "udp"}, -{"sfs-smp-net", {NULL}, 451, "tcp"}, -{"sfs-smp-net", {NULL}, 451, "udp"}, -{"sfs-config", {NULL}, 452, "tcp"}, -{"sfs-config", {NULL}, 452, "udp"}, -{"creativeserver", {NULL}, 453, "tcp"}, -{"creativeserver", {NULL}, 453, "udp"}, -{"contentserver", {NULL}, 454, "tcp"}, -{"contentserver", {NULL}, 454, "udp"}, -{"creativepartnr", {NULL}, 455, "tcp"}, -{"creativepartnr", {NULL}, 455, "udp"}, -{"macon-tcp", {NULL}, 456, "tcp"}, -{"macon-udp", {NULL}, 456, "udp"}, -{"scohelp", {NULL}, 457, "tcp"}, -{"scohelp", {NULL}, 457, "udp"}, -{"appleqtc", {NULL}, 458, "tcp"}, -{"appleqtc", {NULL}, 458, "udp"}, -{"ampr-rcmd", {NULL}, 459, "tcp"}, -{"ampr-rcmd", {NULL}, 459, "udp"}, -{"skronk", {NULL}, 460, "tcp"}, -{"skronk", {NULL}, 460, "udp"}, -{"datasurfsrv", {NULL}, 461, "tcp"}, -{"datasurfsrv", {NULL}, 461, "udp"}, -{"datasurfsrvsec", {NULL}, 462, "tcp"}, -{"datasurfsrvsec", {NULL}, 462, "udp"}, -{"alpes", {NULL}, 463, "tcp"}, -{"alpes", {NULL}, 463, "udp"}, -{"kpasswd", {NULL}, 464, "tcp"}, -{"kpasswd", {NULL}, 464, "udp"}, -{"urd", {NULL}, 465, "tcp"}, -{"igmpv3lite", {NULL}, 465, "udp"}, -{"digital-vrc", {NULL}, 466, "tcp"}, -{"digital-vrc", {NULL}, 466, "udp"}, -{"mylex-mapd", {NULL}, 467, "tcp"}, -{"mylex-mapd", {NULL}, 467, "udp"}, -{"photuris", {NULL}, 468, "tcp"}, -{"photuris", {NULL}, 468, "udp"}, -{"rcp", {NULL}, 469, "tcp"}, -{"rcp", {NULL}, 469, "udp"}, -{"scx-proxy", {NULL}, 470, "tcp"}, -{"scx-proxy", {NULL}, 470, "udp"}, -{"mondex", {NULL}, 471, "tcp"}, -{"mondex", {NULL}, 471, "udp"}, -{"ljk-login", {NULL}, 472, "tcp"}, -{"ljk-login", {NULL}, 472, "udp"}, -{"hybrid-pop", {NULL}, 473, "tcp"}, -{"hybrid-pop", {NULL}, 473, "udp"}, -{"tn-tl-w1", {NULL}, 474, "tcp"}, -{"tn-tl-w2", {NULL}, 474, "udp"}, -{"tcpnethaspsrv", {NULL}, 475, "tcp"}, -{"tcpnethaspsrv", {NULL}, 475, "udp"}, -{"tn-tl-fd1", {NULL}, 476, "tcp"}, -{"tn-tl-fd1", {NULL}, 476, "udp"}, -{"ss7ns", {NULL}, 477, "tcp"}, -{"ss7ns", {NULL}, 477, "udp"}, -{"spsc", {NULL}, 478, "tcp"}, -{"spsc", {NULL}, 478, "udp"}, -{"iafserver", {NULL}, 479, "tcp"}, -{"iafserver", {NULL}, 479, "udp"}, -{"iafdbase", {NULL}, 480, "tcp"}, -{"iafdbase", {NULL}, 480, "udp"}, -{"ph", {NULL}, 481, "tcp"}, -{"ph", {NULL}, 481, "udp"}, -{"bgs-nsi", {NULL}, 482, "tcp"}, -{"bgs-nsi", {NULL}, 482, "udp"}, -{"ulpnet", {NULL}, 483, "tcp"}, -{"ulpnet", {NULL}, 483, "udp"}, -{"integra-sme", {NULL}, 484, "tcp"}, -{"integra-sme", {NULL}, 484, "udp"}, -{"powerburst", {NULL}, 485, "tcp"}, -{"powerburst", {NULL}, 485, "udp"}, -{"avian", {NULL}, 486, "tcp"}, -{"avian", {NULL}, 486, "udp"}, -{"saft", {NULL}, 487, "tcp"}, -{"saft", {NULL}, 487, "udp"}, -{"gss-http", {NULL}, 488, "tcp"}, -{"gss-http", {NULL}, 488, "udp"}, -{"nest-protocol", {NULL}, 489, "tcp"}, -{"nest-protocol", {NULL}, 489, "udp"}, -{"micom-pfs", {NULL}, 490, "tcp"}, -{"micom-pfs", {NULL}, 490, "udp"}, -{"go-login", {NULL}, 491, "tcp"}, -{"go-login", {NULL}, 491, "udp"}, -{"ticf-1", {NULL}, 492, "tcp"}, -{"ticf-1", {NULL}, 492, "udp"}, -{"ticf-2", {NULL}, 493, "tcp"}, -{"ticf-2", {NULL}, 493, "udp"}, -{"pov-ray", {NULL}, 494, "tcp"}, -{"pov-ray", {NULL}, 494, "udp"}, -{"intecourier", {NULL}, 495, "tcp"}, -{"intecourier", {NULL}, 495, "udp"}, -{"pim-rp-disc", {NULL}, 496, "tcp"}, -{"pim-rp-disc", {NULL}, 496, "udp"}, -{"dantz", {NULL}, 497, "tcp"}, -{"dantz", {NULL}, 497, "udp"}, -{"siam", {NULL}, 498, "tcp"}, -{"siam", {NULL}, 498, "udp"}, -{"iso-ill", {NULL}, 499, "tcp"}, -{"iso-ill", {NULL}, 499, "udp"}, -{"isakmp", {NULL}, 500, "tcp"}, -{"isakmp", {NULL}, 500, "udp"}, -{"stmf", {NULL}, 501, "tcp"}, -{"stmf", {NULL}, 501, "udp"}, -{"asa-appl-proto", {NULL}, 502, "tcp"}, -{"asa-appl-proto", {NULL}, 502, "udp"}, -{"intrinsa", {NULL}, 503, "tcp"}, -{"intrinsa", {NULL}, 503, "udp"}, -{"citadel", {NULL}, 504, "tcp"}, -{"citadel", {NULL}, 504, "udp"}, -{"mailbox-lm", {NULL}, 505, "tcp"}, -{"mailbox-lm", {NULL}, 505, "udp"}, -{"ohimsrv", {NULL}, 506, "tcp"}, -{"ohimsrv", {NULL}, 506, "udp"}, -{"crs", {NULL}, 507, "tcp"}, -{"crs", {NULL}, 507, "udp"}, -{"xvttp", {NULL}, 508, "tcp"}, -{"xvttp", {NULL}, 508, "udp"}, -{"snare", {NULL}, 509, "tcp"}, -{"snare", {NULL}, 509, "udp"}, -{"fcp", {NULL}, 510, "tcp"}, -{"fcp", {NULL}, 510, "udp"}, -{"passgo", {NULL}, 511, "tcp"}, -{"passgo", {NULL}, 511, "udp"}, -{"exec", {NULL}, 512, "tcp"}, -{"comsat", {NULL}, 512, "udp"}, -{"biff", {NULL}, 512, "udp"}, -{"login", {NULL}, 513, "tcp"}, -{"who", {NULL}, 513, "udp"}, -{"shell", {NULL}, 514, "tcp"}, -{"syslog", {NULL}, 514, "udp"}, -{"printer", {NULL}, 515, "tcp"}, -{"printer", {NULL}, 515, "udp"}, -{"videotex", {NULL}, 516, "tcp"}, -{"videotex", {NULL}, 516, "udp"}, -{"talk", {NULL}, 517, "tcp"}, -{"talk", {NULL}, 517, "udp"}, -{"ntalk", {NULL}, 518, "tcp"}, -{"ntalk", {NULL}, 518, "udp"}, -{"utime", {NULL}, 519, "tcp"}, -{"utime", {NULL}, 519, "udp"}, -{"efs", {NULL}, 520, "tcp"}, -{"router", {NULL}, 520, "udp"}, -{"ripng", {NULL}, 521, "tcp"}, -{"ripng", {NULL}, 521, "udp"}, -{"ulp", {NULL}, 522, "tcp"}, -{"ulp", {NULL}, 522, "udp"}, -{"ibm-db2", {NULL}, 523, "tcp"}, -{"ibm-db2", {NULL}, 523, "udp"}, -{"ncp", {NULL}, 524, "tcp"}, -{"ncp", {NULL}, 524, "udp"}, -{"timed", {NULL}, 525, "tcp"}, -{"timed", {NULL}, 525, "udp"}, -{"tempo", {NULL}, 526, "tcp"}, -{"tempo", {NULL}, 526, "udp"}, -{"stx", {NULL}, 527, "tcp"}, -{"stx", {NULL}, 527, "udp"}, -{"custix", {NULL}, 528, "tcp"}, -{"custix", {NULL}, 528, "udp"}, -{"irc-serv", {NULL}, 529, "tcp"}, -{"irc-serv", {NULL}, 529, "udp"}, -{"courier", {NULL}, 530, "tcp"}, -{"courier", {NULL}, 530, "udp"}, -{"conference", {NULL}, 531, "tcp"}, -{"conference", {NULL}, 531, "udp"}, -{"netnews", {NULL}, 532, "tcp"}, -{"netnews", {NULL}, 532, "udp"}, -{"netwall", {NULL}, 533, "tcp"}, -{"netwall", {NULL}, 533, "udp"}, -{"windream", {NULL}, 534, "tcp"}, -{"windream", {NULL}, 534, "udp"}, -{"iiop", {NULL}, 535, "tcp"}, -{"iiop", {NULL}, 535, "udp"}, -{"opalis-rdv", {NULL}, 536, "tcp"}, -{"opalis-rdv", {NULL}, 536, "udp"}, -{"nmsp", {NULL}, 537, "tcp"}, -{"nmsp", {NULL}, 537, "udp"}, -{"gdomap", {NULL}, 538, "tcp"}, -{"gdomap", {NULL}, 538, "udp"}, -{"apertus-ldp", {NULL}, 539, "tcp"}, -{"apertus-ldp", {NULL}, 539, "udp"}, -{"uucp", {NULL}, 540, "tcp"}, -{"uucp", {NULL}, 540, "udp"}, -{"uucp-rlogin", {NULL}, 541, "tcp"}, -{"uucp-rlogin", {NULL}, 541, "udp"}, -{"commerce", {NULL}, 542, "tcp"}, -{"commerce", {NULL}, 542, "udp"}, -{"klogin", {NULL}, 543, "tcp"}, -{"klogin", {NULL}, 543, "udp"}, -{"kshell", {NULL}, 544, "tcp"}, -{"kshell", {NULL}, 544, "udp"}, -{"appleqtcsrvr", {NULL}, 545, "tcp"}, -{"appleqtcsrvr", {NULL}, 545, "udp"}, -{"dhcpv6-client", {NULL}, 546, "tcp"}, -{"dhcpv6-client", {NULL}, 546, "udp"}, -{"dhcpv6-server", {NULL}, 547, "tcp"}, -{"dhcpv6-server", {NULL}, 547, "udp"}, -{"afpovertcp", {NULL}, 548, "tcp"}, -{"afpovertcp", {NULL}, 548, "udp"}, -{"idfp", {NULL}, 549, "tcp"}, -{"idfp", {NULL}, 549, "udp"}, -{"new-rwho", {NULL}, 550, "tcp"}, -{"new-rwho", {NULL}, 550, "udp"}, -{"cybercash", {NULL}, 551, "tcp"}, -{"cybercash", {NULL}, 551, "udp"}, -{"devshr-nts", {NULL}, 552, "tcp"}, -{"devshr-nts", {NULL}, 552, "udp"}, -{"pirp", {NULL}, 553, "tcp"}, -{"pirp", {NULL}, 553, "udp"}, -{"rtsp", {NULL}, 554, "tcp"}, -{"rtsp", {NULL}, 554, "udp"}, -{"dsf", {NULL}, 555, "tcp"}, -{"dsf", {NULL}, 555, "udp"}, -{"remotefs", {NULL}, 556, "tcp"}, -{"remotefs", {NULL}, 556, "udp"}, -{"openvms-sysipc", {NULL}, 557, "tcp"}, -{"openvms-sysipc", {NULL}, 557, "udp"}, -{"sdnskmp", {NULL}, 558, "tcp"}, -{"sdnskmp", {NULL}, 558, "udp"}, -{"teedtap", {NULL}, 559, "tcp"}, -{"teedtap", {NULL}, 559, "udp"}, -{"rmonitor", {NULL}, 560, "tcp"}, -{"rmonitor", {NULL}, 560, "udp"}, -{"monitor", {NULL}, 561, "tcp"}, -{"monitor", {NULL}, 561, "udp"}, -{"chshell", {NULL}, 562, "tcp"}, -{"chshell", {NULL}, 562, "udp"}, -{"nntps", {NULL}, 563, "tcp"}, -{"nntps", {NULL}, 563, "udp"}, -{"9pfs", {NULL}, 564, "tcp"}, -{"9pfs", {NULL}, 564, "udp"}, -{"whoami", {NULL}, 565, "tcp"}, -{"whoami", {NULL}, 565, "udp"}, -{"streettalk", {NULL}, 566, "tcp"}, -{"streettalk", {NULL}, 566, "udp"}, -{"banyan-rpc", {NULL}, 567, "tcp"}, -{"banyan-rpc", {NULL}, 567, "udp"}, -{"ms-shuttle", {NULL}, 568, "tcp"}, -{"ms-shuttle", {NULL}, 568, "udp"}, -{"ms-rome", {NULL}, 569, "tcp"}, -{"ms-rome", {NULL}, 569, "udp"}, -{"meter", {NULL}, 570, "tcp"}, -{"meter", {NULL}, 570, "udp"}, -{"meter", {NULL}, 571, "tcp"}, -{"meter", {NULL}, 571, "udp"}, -{"sonar", {NULL}, 572, "tcp"}, -{"sonar", {NULL}, 572, "udp"}, -{"banyan-vip", {NULL}, 573, "tcp"}, -{"banyan-vip", {NULL}, 573, "udp"}, -{"ftp-agent", {NULL}, 574, "tcp"}, -{"ftp-agent", {NULL}, 574, "udp"}, -{"vemmi", {NULL}, 575, "tcp"}, -{"vemmi", {NULL}, 575, "udp"}, -{"ipcd", {NULL}, 576, "tcp"}, -{"ipcd", {NULL}, 576, "udp"}, -{"vnas", {NULL}, 577, "tcp"}, -{"vnas", {NULL}, 577, "udp"}, -{"ipdd", {NULL}, 578, "tcp"}, -{"ipdd", {NULL}, 578, "udp"}, -{"decbsrv", {NULL}, 579, "tcp"}, -{"decbsrv", {NULL}, 579, "udp"}, -{"sntp-heartbeat", {NULL}, 580, "tcp"}, -{"sntp-heartbeat", {NULL}, 580, "udp"}, -{"bdp", {NULL}, 581, "tcp"}, -{"bdp", {NULL}, 581, "udp"}, -{"scc-security", {NULL}, 582, "tcp"}, -{"scc-security", {NULL}, 582, "udp"}, -{"philips-vc", {NULL}, 583, "tcp"}, -{"philips-vc", {NULL}, 583, "udp"}, -{"keyserver", {NULL}, 584, "tcp"}, -{"keyserver", {NULL}, 584, "udp"}, -{"password-chg", {NULL}, 586, "tcp"}, -{"password-chg", {NULL}, 586, "udp"}, -{"submission", {NULL}, 587, "tcp"}, -{"submission", {NULL}, 587, "udp"}, -{"cal", {NULL}, 588, "tcp"}, -{"cal", {NULL}, 588, "udp"}, -{"eyelink", {NULL}, 589, "tcp"}, -{"eyelink", {NULL}, 589, "udp"}, -{"tns-cml", {NULL}, 590, "tcp"}, -{"tns-cml", {NULL}, 590, "udp"}, -{"http-alt", {NULL}, 591, "tcp"}, -{"http-alt", {NULL}, 591, "udp"}, -{"eudora-set", {NULL}, 592, "tcp"}, -{"eudora-set", {NULL}, 592, "udp"}, -{"http-rpc-epmap", {NULL}, 593, "tcp"}, -{"http-rpc-epmap", {NULL}, 593, "udp"}, -{"tpip", {NULL}, 594, "tcp"}, -{"tpip", {NULL}, 594, "udp"}, -{"cab-protocol", {NULL}, 595, "tcp"}, -{"cab-protocol", {NULL}, 595, "udp"}, -{"smsd", {NULL}, 596, "tcp"}, -{"smsd", {NULL}, 596, "udp"}, -{"ptcnameservice", {NULL}, 597, "tcp"}, -{"ptcnameservice", {NULL}, 597, "udp"}, -{"sco-websrvrmg3", {NULL}, 598, "tcp"}, -{"sco-websrvrmg3", {NULL}, 598, "udp"}, -{"acp", {NULL}, 599, "tcp"}, -{"acp", {NULL}, 599, "udp"}, -{"ipcserver", {NULL}, 600, "tcp"}, -{"ipcserver", {NULL}, 600, "udp"}, -{"syslog-conn", {NULL}, 601, "tcp"}, -{"syslog-conn", {NULL}, 601, "udp"}, -{"xmlrpc-beep", {NULL}, 602, "tcp"}, -{"xmlrpc-beep", {NULL}, 602, "udp"}, -{"idxp", {NULL}, 603, "tcp"}, -{"idxp", {NULL}, 603, "udp"}, -{"tunnel", {NULL}, 604, "tcp"}, -{"tunnel", {NULL}, 604, "udp"}, -{"soap-beep", {NULL}, 605, "tcp"}, -{"soap-beep", {NULL}, 605, "udp"}, -{"urm", {NULL}, 606, "tcp"}, -{"urm", {NULL}, 606, "udp"}, -{"nqs", {NULL}, 607, "tcp"}, -{"nqs", {NULL}, 607, "udp"}, -{"sift-uft", {NULL}, 608, "tcp"}, -{"sift-uft", {NULL}, 608, "udp"}, -{"npmp-trap", {NULL}, 609, "tcp"}, -{"npmp-trap", {NULL}, 609, "udp"}, -{"npmp-local", {NULL}, 610, "tcp"}, -{"npmp-local", {NULL}, 610, "udp"}, -{"npmp-gui", {NULL}, 611, "tcp"}, -{"npmp-gui", {NULL}, 611, "udp"}, -{"hmmp-ind", {NULL}, 612, "tcp"}, -{"hmmp-ind", {NULL}, 612, "udp"}, -{"hmmp-op", {NULL}, 613, "tcp"}, -{"hmmp-op", {NULL}, 613, "udp"}, -{"sshell", {NULL}, 614, "tcp"}, -{"sshell", {NULL}, 614, "udp"}, -{"sco-inetmgr", {NULL}, 615, "tcp"}, -{"sco-inetmgr", {NULL}, 615, "udp"}, -{"sco-sysmgr", {NULL}, 616, "tcp"}, -{"sco-sysmgr", {NULL}, 616, "udp"}, -{"sco-dtmgr", {NULL}, 617, "tcp"}, -{"sco-dtmgr", {NULL}, 617, "udp"}, -{"dei-icda", {NULL}, 618, "tcp"}, -{"dei-icda", {NULL}, 618, "udp"}, -{"compaq-evm", {NULL}, 619, "tcp"}, -{"compaq-evm", {NULL}, 619, "udp"}, -{"sco-websrvrmgr", {NULL}, 620, "tcp"}, -{"sco-websrvrmgr", {NULL}, 620, "udp"}, -{"escp-ip", {NULL}, 621, "tcp"}, -{"escp-ip", {NULL}, 621, "udp"}, -{"collaborator", {NULL}, 622, "tcp"}, -{"collaborator", {NULL}, 622, "udp"}, -{"oob-ws-http", {NULL}, 623, "tcp"}, -{"asf-rmcp", {NULL}, 623, "udp"}, -{"cryptoadmin", {NULL}, 624, "tcp"}, -{"cryptoadmin", {NULL}, 624, "udp"}, -{"dec_dlm", {NULL}, 625, "tcp"}, -{"dec_dlm", {NULL}, 625, "udp"}, -{"asia", {NULL}, 626, "tcp"}, -{"asia", {NULL}, 626, "udp"}, -{"passgo-tivoli", {NULL}, 627, "tcp"}, -{"passgo-tivoli", {NULL}, 627, "udp"}, -{"qmqp", {NULL}, 628, "tcp"}, -{"qmqp", {NULL}, 628, "udp"}, -{"3com-amp3", {NULL}, 629, "tcp"}, -{"3com-amp3", {NULL}, 629, "udp"}, -{"rda", {NULL}, 630, "tcp"}, -{"rda", {NULL}, 630, "udp"}, -{"ipp", {NULL}, 631, "tcp"}, -{"ipp", {NULL}, 631, "udp"}, -{"bmpp", {NULL}, 632, "tcp"}, -{"bmpp", {NULL}, 632, "udp"}, -{"servstat", {NULL}, 633, "tcp"}, -{"servstat", {NULL}, 633, "udp"}, -{"ginad", {NULL}, 634, "tcp"}, -{"ginad", {NULL}, 634, "udp"}, -{"rlzdbase", {NULL}, 635, "tcp"}, -{"rlzdbase", {NULL}, 635, "udp"}, -{"ldaps", {NULL}, 636, "tcp"}, -{"ldaps", {NULL}, 636, "udp"}, -{"lanserver", {NULL}, 637, "tcp"}, -{"lanserver", {NULL}, 637, "udp"}, -{"mcns-sec", {NULL}, 638, "tcp"}, -{"mcns-sec", {NULL}, 638, "udp"}, -{"msdp", {NULL}, 639, "tcp"}, -{"msdp", {NULL}, 639, "udp"}, -{"entrust-sps", {NULL}, 640, "tcp"}, -{"entrust-sps", {NULL}, 640, "udp"}, -{"repcmd", {NULL}, 641, "tcp"}, -{"repcmd", {NULL}, 641, "udp"}, -{"esro-emsdp", {NULL}, 642, "tcp"}, -{"esro-emsdp", {NULL}, 642, "udp"}, -{"sanity", {NULL}, 643, "tcp"}, -{"sanity", {NULL}, 643, "udp"}, -{"dwr", {NULL}, 644, "tcp"}, -{"dwr", {NULL}, 644, "udp"}, -{"pssc", {NULL}, 645, "tcp"}, -{"pssc", {NULL}, 645, "udp"}, -{"ldp", {NULL}, 646, "tcp"}, -{"ldp", {NULL}, 646, "udp"}, -{"dhcp-failover", {NULL}, 647, "tcp"}, -{"dhcp-failover", {NULL}, 647, "udp"}, -{"rrp", {NULL}, 648, "tcp"}, -{"rrp", {NULL}, 648, "udp"}, -{"cadview-3d", {NULL}, 649, "tcp"}, -{"cadview-3d", {NULL}, 649, "udp"}, -{"obex", {NULL}, 650, "tcp"}, -{"obex", {NULL}, 650, "udp"}, -{"ieee-mms", {NULL}, 651, "tcp"}, -{"ieee-mms", {NULL}, 651, "udp"}, -{"hello-port", {NULL}, 652, "tcp"}, -{"hello-port", {NULL}, 652, "udp"}, -{"repscmd", {NULL}, 653, "tcp"}, -{"repscmd", {NULL}, 653, "udp"}, -{"aodv", {NULL}, 654, "tcp"}, -{"aodv", {NULL}, 654, "udp"}, -{"tinc", {NULL}, 655, "tcp"}, -{"tinc", {NULL}, 655, "udp"}, -{"spmp", {NULL}, 656, "tcp"}, -{"spmp", {NULL}, 656, "udp"}, -{"rmc", {NULL}, 657, "tcp"}, -{"rmc", {NULL}, 657, "udp"}, -{"tenfold", {NULL}, 658, "tcp"}, -{"tenfold", {NULL}, 658, "udp"}, -{"mac-srvr-admin", {NULL}, 660, "tcp"}, -{"mac-srvr-admin", {NULL}, 660, "udp"}, -{"hap", {NULL}, 661, "tcp"}, -{"hap", {NULL}, 661, "udp"}, -{"pftp", {NULL}, 662, "tcp"}, -{"pftp", {NULL}, 662, "udp"}, -{"purenoise", {NULL}, 663, "tcp"}, -{"purenoise", {NULL}, 663, "udp"}, -{"oob-ws-https", {NULL}, 664, "tcp"}, -{"asf-secure-rmcp", {NULL}, 664, "udp"}, -{"sun-dr", {NULL}, 665, "tcp"}, -{"sun-dr", {NULL}, 665, "udp"}, -{"mdqs", {NULL}, 666, "tcp"}, -{"mdqs", {NULL}, 666, "udp"}, -{"doom", {NULL}, 666, "tcp"}, -{"doom", {NULL}, 666, "udp"}, -{"disclose", {NULL}, 667, "tcp"}, -{"disclose", {NULL}, 667, "udp"}, -{"mecomm", {NULL}, 668, "tcp"}, -{"mecomm", {NULL}, 668, "udp"}, -{"meregister", {NULL}, 669, "tcp"}, -{"meregister", {NULL}, 669, "udp"}, -{"vacdsm-sws", {NULL}, 670, "tcp"}, -{"vacdsm-sws", {NULL}, 670, "udp"}, -{"vacdsm-app", {NULL}, 671, "tcp"}, -{"vacdsm-app", {NULL}, 671, "udp"}, -{"vpps-qua", {NULL}, 672, "tcp"}, -{"vpps-qua", {NULL}, 672, "udp"}, -{"cimplex", {NULL}, 673, "tcp"}, -{"cimplex", {NULL}, 673, "udp"}, -{"acap", {NULL}, 674, "tcp"}, -{"acap", {NULL}, 674, "udp"}, -{"dctp", {NULL}, 675, "tcp"}, -{"dctp", {NULL}, 675, "udp"}, -{"vpps-via", {NULL}, 676, "tcp"}, -{"vpps-via", {NULL}, 676, "udp"}, -{"vpp", {NULL}, 677, "tcp"}, -{"vpp", {NULL}, 677, "udp"}, -{"ggf-ncp", {NULL}, 678, "tcp"}, -{"ggf-ncp", {NULL}, 678, "udp"}, -{"mrm", {NULL}, 679, "tcp"}, -{"mrm", {NULL}, 679, "udp"}, -{"entrust-aaas", {NULL}, 680, "tcp"}, -{"entrust-aaas", {NULL}, 680, "udp"}, -{"entrust-aams", {NULL}, 681, "tcp"}, -{"entrust-aams", {NULL}, 681, "udp"}, -{"xfr", {NULL}, 682, "tcp"}, -{"xfr", {NULL}, 682, "udp"}, -{"corba-iiop", {NULL}, 683, "tcp"}, -{"corba-iiop", {NULL}, 683, "udp"}, -{"corba-iiop-ssl", {NULL}, 684, "tcp"}, -{"corba-iiop-ssl", {NULL}, 684, "udp"}, -{"mdc-portmapper", {NULL}, 685, "tcp"}, -{"mdc-portmapper", {NULL}, 685, "udp"}, -{"hcp-wismar", {NULL}, 686, "tcp"}, -{"hcp-wismar", {NULL}, 686, "udp"}, -{"asipregistry", {NULL}, 687, "tcp"}, -{"asipregistry", {NULL}, 687, "udp"}, -{"realm-rusd", {NULL}, 688, "tcp"}, -{"realm-rusd", {NULL}, 688, "udp"}, -{"nmap", {NULL}, 689, "tcp"}, -{"nmap", {NULL}, 689, "udp"}, -{"vatp", {NULL}, 690, "tcp"}, -{"vatp", {NULL}, 690, "udp"}, -{"msexch-routing", {NULL}, 691, "tcp"}, -{"msexch-routing", {NULL}, 691, "udp"}, -{"hyperwave-isp", {NULL}, 692, "tcp"}, -{"hyperwave-isp", {NULL}, 692, "udp"}, -{"connendp", {NULL}, 693, "tcp"}, -{"connendp", {NULL}, 693, "udp"}, -{"ha-cluster", {NULL}, 694, "tcp"}, -{"ha-cluster", {NULL}, 694, "udp"}, -{"ieee-mms-ssl", {NULL}, 695, "tcp"}, -{"ieee-mms-ssl", {NULL}, 695, "udp"}, -{"rushd", {NULL}, 696, "tcp"}, -{"rushd", {NULL}, 696, "udp"}, -{"uuidgen", {NULL}, 697, "tcp"}, -{"uuidgen", {NULL}, 697, "udp"}, -{"olsr", {NULL}, 698, "tcp"}, -{"olsr", {NULL}, 698, "udp"}, -{"accessnetwork", {NULL}, 699, "tcp"}, -{"accessnetwork", {NULL}, 699, "udp"}, -{"epp", {NULL}, 700, "tcp"}, -{"epp", {NULL}, 700, "udp"}, -{"lmp", {NULL}, 701, "tcp"}, -{"lmp", {NULL}, 701, "udp"}, -{"iris-beep", {NULL}, 702, "tcp"}, -{"iris-beep", {NULL}, 702, "udp"}, -{"elcsd", {NULL}, 704, "tcp"}, -{"elcsd", {NULL}, 704, "udp"}, -{"agentx", {NULL}, 705, "tcp"}, -{"agentx", {NULL}, 705, "udp"}, -{"silc", {NULL}, 706, "tcp"}, -{"silc", {NULL}, 706, "udp"}, -{"borland-dsj", {NULL}, 707, "tcp"}, -{"borland-dsj", {NULL}, 707, "udp"}, -{"entrust-kmsh", {NULL}, 709, "tcp"}, -{"entrust-kmsh", {NULL}, 709, "udp"}, -{"entrust-ash", {NULL}, 710, "tcp"}, -{"entrust-ash", {NULL}, 710, "udp"}, -{"cisco-tdp", {NULL}, 711, "tcp"}, -{"cisco-tdp", {NULL}, 711, "udp"}, -{"tbrpf", {NULL}, 712, "tcp"}, -{"tbrpf", {NULL}, 712, "udp"}, -{"iris-xpc", {NULL}, 713, "tcp"}, -{"iris-xpc", {NULL}, 713, "udp"}, -{"iris-xpcs", {NULL}, 714, "tcp"}, -{"iris-xpcs", {NULL}, 714, "udp"}, -{"iris-lwz", {NULL}, 715, "tcp"}, -{"iris-lwz", {NULL}, 715, "udp"}, -{"pana", {NULL}, 716, "udp"}, -{"netviewdm1", {NULL}, 729, "tcp"}, -{"netviewdm1", {NULL}, 729, "udp"}, -{"netviewdm2", {NULL}, 730, "tcp"}, -{"netviewdm2", {NULL}, 730, "udp"}, -{"netviewdm3", {NULL}, 731, "tcp"}, -{"netviewdm3", {NULL}, 731, "udp"}, -{"netgw", {NULL}, 741, "tcp"}, -{"netgw", {NULL}, 741, "udp"}, -{"netrcs", {NULL}, 742, "tcp"}, -{"netrcs", {NULL}, 742, "udp"}, -{"flexlm", {NULL}, 744, "tcp"}, -{"flexlm", {NULL}, 744, "udp"}, -{"fujitsu-dev", {NULL}, 747, "tcp"}, -{"fujitsu-dev", {NULL}, 747, "udp"}, -{"ris-cm", {NULL}, 748, "tcp"}, -{"ris-cm", {NULL}, 748, "udp"}, -{"kerberos-adm", {NULL}, 749, "tcp"}, -{"kerberos-adm", {NULL}, 749, "udp"}, -{"rfile", {NULL}, 750, "tcp"}, -{"loadav", {NULL}, 750, "udp"}, -{"kerberos-iv", {NULL}, 750, "udp"}, -{"pump", {NULL}, 751, "tcp"}, -{"pump", {NULL}, 751, "udp"}, -{"qrh", {NULL}, 752, "tcp"}, -{"qrh", {NULL}, 752, "udp"}, -{"rrh", {NULL}, 753, "tcp"}, -{"rrh", {NULL}, 753, "udp"}, -{"tell", {NULL}, 754, "tcp"}, -{"tell", {NULL}, 754, "udp"}, -{"nlogin", {NULL}, 758, "tcp"}, -{"nlogin", {NULL}, 758, "udp"}, -{"con", {NULL}, 759, "tcp"}, -{"con", {NULL}, 759, "udp"}, -{"ns", {NULL}, 760, "tcp"}, -{"ns", {NULL}, 760, "udp"}, -{"rxe", {NULL}, 761, "tcp"}, -{"rxe", {NULL}, 761, "udp"}, -{"quotad", {NULL}, 762, "tcp"}, -{"quotad", {NULL}, 762, "udp"}, -{"cycleserv", {NULL}, 763, "tcp"}, -{"cycleserv", {NULL}, 763, "udp"}, -{"omserv", {NULL}, 764, "tcp"}, -{"omserv", {NULL}, 764, "udp"}, -{"webster", {NULL}, 765, "tcp"}, -{"webster", {NULL}, 765, "udp"}, -{"phonebook", {NULL}, 767, "tcp"}, -{"phonebook", {NULL}, 767, "udp"}, -{"vid", {NULL}, 769, "tcp"}, -{"vid", {NULL}, 769, "udp"}, -{"cadlock", {NULL}, 770, "tcp"}, -{"cadlock", {NULL}, 770, "udp"}, -{"rtip", {NULL}, 771, "tcp"}, -{"rtip", {NULL}, 771, "udp"}, -{"cycleserv2", {NULL}, 772, "tcp"}, -{"cycleserv2", {NULL}, 772, "udp"}, -{"submit", {NULL}, 773, "tcp"}, -{"notify", {NULL}, 773, "udp"}, -{"rpasswd", {NULL}, 774, "tcp"}, -{"acmaint_dbd", {NULL}, 774, "udp"}, -{"entomb", {NULL}, 775, "tcp"}, -{"acmaint_transd", {NULL}, 775, "udp"}, -{"wpages", {NULL}, 776, "tcp"}, -{"wpages", {NULL}, 776, "udp"}, -{"multiling-http", {NULL}, 777, "tcp"}, -{"multiling-http", {NULL}, 777, "udp"}, -{"wpgs", {NULL}, 780, "tcp"}, -{"wpgs", {NULL}, 780, "udp"}, -{"mdbs_daemon", {NULL}, 800, "tcp"}, -{"mdbs_daemon", {NULL}, 800, "udp"}, -{"device", {NULL}, 801, "tcp"}, -{"device", {NULL}, 801, "udp"}, -{"fcp-udp", {NULL}, 810, "tcp"}, -{"fcp-udp", {NULL}, 810, "udp"}, -{"itm-mcell-s", {NULL}, 828, "tcp"}, -{"itm-mcell-s", {NULL}, 828, "udp"}, -{"pkix-3-ca-ra", {NULL}, 829, "tcp"}, -{"pkix-3-ca-ra", {NULL}, 829, "udp"}, -{"netconf-ssh", {NULL}, 830, "tcp"}, -{"netconf-ssh", {NULL}, 830, "udp"}, -{"netconf-beep", {NULL}, 831, "tcp"}, -{"netconf-beep", {NULL}, 831, "udp"}, -{"netconfsoaphttp", {NULL}, 832, "tcp"}, -{"netconfsoaphttp", {NULL}, 832, "udp"}, -{"netconfsoapbeep", {NULL}, 833, "tcp"}, -{"netconfsoapbeep", {NULL}, 833, "udp"}, -{"dhcp-failover2", {NULL}, 847, "tcp"}, -{"dhcp-failover2", {NULL}, 847, "udp"}, -{"gdoi", {NULL}, 848, "tcp"}, -{"gdoi", {NULL}, 848, "udp"}, -{"iscsi", {NULL}, 860, "tcp"}, -{"iscsi", {NULL}, 860, "udp"}, -{"owamp-control", {NULL}, 861, "tcp"}, -{"owamp-control", {NULL}, 861, "udp"}, -{"twamp-control", {NULL}, 862, "tcp"}, -{"twamp-control", {NULL}, 862, "udp"}, -{"rsync", {NULL}, 873, "tcp"}, -{"rsync", {NULL}, 873, "udp"}, -{"iclcnet-locate", {NULL}, 886, "tcp"}, -{"iclcnet-locate", {NULL}, 886, "udp"}, -{"iclcnet_svinfo", {NULL}, 887, "tcp"}, -{"iclcnet_svinfo", {NULL}, 887, "udp"}, -{"accessbuilder", {NULL}, 888, "tcp"}, -{"accessbuilder", {NULL}, 888, "udp"}, -{"cddbp", {NULL}, 888, "tcp"}, -{"omginitialrefs", {NULL}, 900, "tcp"}, -{"omginitialrefs", {NULL}, 900, "udp"}, -{"smpnameres", {NULL}, 901, "tcp"}, -{"smpnameres", {NULL}, 901, "udp"}, -{"ideafarm-door", {NULL}, 902, "tcp"}, -{"ideafarm-door", {NULL}, 902, "udp"}, -{"ideafarm-panic", {NULL}, 903, "tcp"}, -{"ideafarm-panic", {NULL}, 903, "udp"}, -{"kink", {NULL}, 910, "tcp"}, -{"kink", {NULL}, 910, "udp"}, -{"xact-backup", {NULL}, 911, "tcp"}, -{"xact-backup", {NULL}, 911, "udp"}, -{"apex-mesh", {NULL}, 912, "tcp"}, -{"apex-mesh", {NULL}, 912, "udp"}, -{"apex-edge", {NULL}, 913, "tcp"}, -{"apex-edge", {NULL}, 913, "udp"}, -{"ftps-data", {NULL}, 989, "tcp"}, -{"ftps-data", {NULL}, 989, "udp"}, -{"ftps", {NULL}, 990, "tcp"}, -{"ftps", {NULL}, 990, "udp"}, -{"nas", {NULL}, 991, "tcp"}, -{"nas", {NULL}, 991, "udp"}, -{"telnets", {NULL}, 992, "tcp"}, -{"telnets", {NULL}, 992, "udp"}, -{"imaps", {NULL}, 993, "tcp"}, -{"imaps", {NULL}, 993, "udp"}, -{"ircs", {NULL}, 994, "tcp"}, -{"ircs", {NULL}, 994, "udp"}, -{"pop3s", {NULL}, 995, "tcp"}, -{"pop3s", {NULL}, 995, "udp"}, -{"vsinet", {NULL}, 996, "tcp"}, -{"vsinet", {NULL}, 996, "udp"}, -{"maitrd", {NULL}, 997, "tcp"}, -{"maitrd", {NULL}, 997, "udp"}, -{"busboy", {NULL}, 998, "tcp"}, -{"puparp", {NULL}, 998, "udp"}, -{"garcon", {NULL}, 999, "tcp"}, -{"applix", {NULL}, 999, "udp"}, -{"puprouter", {NULL}, 999, "tcp"}, -{"puprouter", {NULL}, 999, "udp"}, -{"cadlock2", {NULL}, 1000, "tcp"}, -{"cadlock2", {NULL}, 1000, "udp"}, -{"surf", {NULL}, 1010, "tcp"}, -{"surf", {NULL}, 1010, "udp"}, -{"exp1", {NULL}, 1021, "tcp"}, -{"exp1", {NULL}, 1021, "udp"}, -{"exp2", {NULL}, 1022, "tcp"}, -{"exp2", {NULL}, 1022, "udp"}, -#endif /* USE_IANA_WELL_KNOWN_PORTS */ -#ifdef USE_IANA_REGISTERED_PORTS -{"blackjack", {NULL}, 1025, "tcp"}, -{"blackjack", {NULL}, 1025, "udp"}, -{"cap", {NULL}, 1026, "tcp"}, -{"cap", {NULL}, 1026, "udp"}, -{"solid-mux", {NULL}, 1029, "tcp"}, -{"solid-mux", {NULL}, 1029, "udp"}, -{"iad1", {NULL}, 1030, "tcp"}, -{"iad1", {NULL}, 1030, "udp"}, -{"iad2", {NULL}, 1031, "tcp"}, -{"iad2", {NULL}, 1031, "udp"}, -{"iad3", {NULL}, 1032, "tcp"}, -{"iad3", {NULL}, 1032, "udp"}, -{"netinfo-local", {NULL}, 1033, "tcp"}, -{"netinfo-local", {NULL}, 1033, "udp"}, -{"activesync", {NULL}, 1034, "tcp"}, -{"activesync", {NULL}, 1034, "udp"}, -{"mxxrlogin", {NULL}, 1035, "tcp"}, -{"mxxrlogin", {NULL}, 1035, "udp"}, -{"nsstp", {NULL}, 1036, "tcp"}, -{"nsstp", {NULL}, 1036, "udp"}, -{"ams", {NULL}, 1037, "tcp"}, -{"ams", {NULL}, 1037, "udp"}, -{"mtqp", {NULL}, 1038, "tcp"}, -{"mtqp", {NULL}, 1038, "udp"}, -{"sbl", {NULL}, 1039, "tcp"}, -{"sbl", {NULL}, 1039, "udp"}, -{"netarx", {NULL}, 1040, "tcp"}, -{"netarx", {NULL}, 1040, "udp"}, -{"danf-ak2", {NULL}, 1041, "tcp"}, -{"danf-ak2", {NULL}, 1041, "udp"}, -{"afrog", {NULL}, 1042, "tcp"}, -{"afrog", {NULL}, 1042, "udp"}, -{"boinc-client", {NULL}, 1043, "tcp"}, -{"boinc-client", {NULL}, 1043, "udp"}, -{"dcutility", {NULL}, 1044, "tcp"}, -{"dcutility", {NULL}, 1044, "udp"}, -{"fpitp", {NULL}, 1045, "tcp"}, -{"fpitp", {NULL}, 1045, "udp"}, -{"wfremotertm", {NULL}, 1046, "tcp"}, -{"wfremotertm", {NULL}, 1046, "udp"}, -{"neod1", {NULL}, 1047, "tcp"}, -{"neod1", {NULL}, 1047, "udp"}, -{"neod2", {NULL}, 1048, "tcp"}, -{"neod2", {NULL}, 1048, "udp"}, -{"td-postman", {NULL}, 1049, "tcp"}, -{"td-postman", {NULL}, 1049, "udp"}, -{"cma", {NULL}, 1050, "tcp"}, -{"cma", {NULL}, 1050, "udp"}, -{"optima-vnet", {NULL}, 1051, "tcp"}, -{"optima-vnet", {NULL}, 1051, "udp"}, -{"ddt", {NULL}, 1052, "tcp"}, -{"ddt", {NULL}, 1052, "udp"}, -{"remote-as", {NULL}, 1053, "tcp"}, -{"remote-as", {NULL}, 1053, "udp"}, -{"brvread", {NULL}, 1054, "tcp"}, -{"brvread", {NULL}, 1054, "udp"}, -{"ansyslmd", {NULL}, 1055, "tcp"}, -{"ansyslmd", {NULL}, 1055, "udp"}, -{"vfo", {NULL}, 1056, "tcp"}, -{"vfo", {NULL}, 1056, "udp"}, -{"startron", {NULL}, 1057, "tcp"}, -{"startron", {NULL}, 1057, "udp"}, -{"nim", {NULL}, 1058, "tcp"}, -{"nim", {NULL}, 1058, "udp"}, -{"nimreg", {NULL}, 1059, "tcp"}, -{"nimreg", {NULL}, 1059, "udp"}, -{"polestar", {NULL}, 1060, "tcp"}, -{"polestar", {NULL}, 1060, "udp"}, -{"kiosk", {NULL}, 1061, "tcp"}, -{"kiosk", {NULL}, 1061, "udp"}, -{"veracity", {NULL}, 1062, "tcp"}, -{"veracity", {NULL}, 1062, "udp"}, -{"kyoceranetdev", {NULL}, 1063, "tcp"}, -{"kyoceranetdev", {NULL}, 1063, "udp"}, -{"jstel", {NULL}, 1064, "tcp"}, -{"jstel", {NULL}, 1064, "udp"}, -{"syscomlan", {NULL}, 1065, "tcp"}, -{"syscomlan", {NULL}, 1065, "udp"}, -{"fpo-fns", {NULL}, 1066, "tcp"}, -{"fpo-fns", {NULL}, 1066, "udp"}, -{"instl_boots", {NULL}, 1067, "tcp"}, -{"instl_boots", {NULL}, 1067, "udp"}, -{"instl_bootc", {NULL}, 1068, "tcp"}, -{"instl_bootc", {NULL}, 1068, "udp"}, -{"cognex-insight", {NULL}, 1069, "tcp"}, -{"cognex-insight", {NULL}, 1069, "udp"}, -{"gmrupdateserv", {NULL}, 1070, "tcp"}, -{"gmrupdateserv", {NULL}, 1070, "udp"}, -{"bsquare-voip", {NULL}, 1071, "tcp"}, -{"bsquare-voip", {NULL}, 1071, "udp"}, -{"cardax", {NULL}, 1072, "tcp"}, -{"cardax", {NULL}, 1072, "udp"}, -{"bridgecontrol", {NULL}, 1073, "tcp"}, -{"bridgecontrol", {NULL}, 1073, "udp"}, -{"warmspotMgmt", {NULL}, 1074, "tcp"}, -{"warmspotMgmt", {NULL}, 1074, "udp"}, -{"rdrmshc", {NULL}, 1075, "tcp"}, -{"rdrmshc", {NULL}, 1075, "udp"}, -{"dab-sti-c", {NULL}, 1076, "tcp"}, -{"dab-sti-c", {NULL}, 1076, "udp"}, -{"imgames", {NULL}, 1077, "tcp"}, -{"imgames", {NULL}, 1077, "udp"}, -{"avocent-proxy", {NULL}, 1078, "tcp"}, -{"avocent-proxy", {NULL}, 1078, "udp"}, -{"asprovatalk", {NULL}, 1079, "tcp"}, -{"asprovatalk", {NULL}, 1079, "udp"}, -{"socks", {NULL}, 1080, "tcp"}, -{"socks", {NULL}, 1080, "udp"}, -{"pvuniwien", {NULL}, 1081, "tcp"}, -{"pvuniwien", {NULL}, 1081, "udp"}, -{"amt-esd-prot", {NULL}, 1082, "tcp"}, -{"amt-esd-prot", {NULL}, 1082, "udp"}, -{"ansoft-lm-1", {NULL}, 1083, "tcp"}, -{"ansoft-lm-1", {NULL}, 1083, "udp"}, -{"ansoft-lm-2", {NULL}, 1084, "tcp"}, -{"ansoft-lm-2", {NULL}, 1084, "udp"}, -{"webobjects", {NULL}, 1085, "tcp"}, -{"webobjects", {NULL}, 1085, "udp"}, -{"cplscrambler-lg", {NULL}, 1086, "tcp"}, -{"cplscrambler-lg", {NULL}, 1086, "udp"}, -{"cplscrambler-in", {NULL}, 1087, "tcp"}, -{"cplscrambler-in", {NULL}, 1087, "udp"}, -{"cplscrambler-al", {NULL}, 1088, "tcp"}, -{"cplscrambler-al", {NULL}, 1088, "udp"}, -{"ff-annunc", {NULL}, 1089, "tcp"}, -{"ff-annunc", {NULL}, 1089, "udp"}, -{"ff-fms", {NULL}, 1090, "tcp"}, -{"ff-fms", {NULL}, 1090, "udp"}, -{"ff-sm", {NULL}, 1091, "tcp"}, -{"ff-sm", {NULL}, 1091, "udp"}, -{"obrpd", {NULL}, 1092, "tcp"}, -{"obrpd", {NULL}, 1092, "udp"}, -{"proofd", {NULL}, 1093, "tcp"}, -{"proofd", {NULL}, 1093, "udp"}, -{"rootd", {NULL}, 1094, "tcp"}, -{"rootd", {NULL}, 1094, "udp"}, -{"nicelink", {NULL}, 1095, "tcp"}, -{"nicelink", {NULL}, 1095, "udp"}, -{"cnrprotocol", {NULL}, 1096, "tcp"}, -{"cnrprotocol", {NULL}, 1096, "udp"}, -{"sunclustermgr", {NULL}, 1097, "tcp"}, -{"sunclustermgr", {NULL}, 1097, "udp"}, -{"rmiactivation", {NULL}, 1098, "tcp"}, -{"rmiactivation", {NULL}, 1098, "udp"}, -{"rmiregistry", {NULL}, 1099, "tcp"}, -{"rmiregistry", {NULL}, 1099, "udp"}, -{"mctp", {NULL}, 1100, "tcp"}, -{"mctp", {NULL}, 1100, "udp"}, -{"pt2-discover", {NULL}, 1101, "tcp"}, -{"pt2-discover", {NULL}, 1101, "udp"}, -{"adobeserver-1", {NULL}, 1102, "tcp"}, -{"adobeserver-1", {NULL}, 1102, "udp"}, -{"adobeserver-2", {NULL}, 1103, "tcp"}, -{"adobeserver-2", {NULL}, 1103, "udp"}, -{"xrl", {NULL}, 1104, "tcp"}, -{"xrl", {NULL}, 1104, "udp"}, -{"ftranhc", {NULL}, 1105, "tcp"}, -{"ftranhc", {NULL}, 1105, "udp"}, -{"isoipsigport-1", {NULL}, 1106, "tcp"}, -{"isoipsigport-1", {NULL}, 1106, "udp"}, -{"isoipsigport-2", {NULL}, 1107, "tcp"}, -{"isoipsigport-2", {NULL}, 1107, "udp"}, -{"ratio-adp", {NULL}, 1108, "tcp"}, -{"ratio-adp", {NULL}, 1108, "udp"}, -{"webadmstart", {NULL}, 1110, "tcp"}, -{"nfsd-keepalive", {NULL}, 1110, "udp"}, -{"lmsocialserver", {NULL}, 1111, "tcp"}, -{"lmsocialserver", {NULL}, 1111, "udp"}, -{"icp", {NULL}, 1112, "tcp"}, -{"icp", {NULL}, 1112, "udp"}, -{"ltp-deepspace", {NULL}, 1113, "tcp"}, -{"ltp-deepspace", {NULL}, 1113, "udp"}, -{"mini-sql", {NULL}, 1114, "tcp"}, -{"mini-sql", {NULL}, 1114, "udp"}, -{"ardus-trns", {NULL}, 1115, "tcp"}, -{"ardus-trns", {NULL}, 1115, "udp"}, -{"ardus-cntl", {NULL}, 1116, "tcp"}, -{"ardus-cntl", {NULL}, 1116, "udp"}, -{"ardus-mtrns", {NULL}, 1117, "tcp"}, -{"ardus-mtrns", {NULL}, 1117, "udp"}, -{"sacred", {NULL}, 1118, "tcp"}, -{"sacred", {NULL}, 1118, "udp"}, -{"bnetgame", {NULL}, 1119, "tcp"}, -{"bnetgame", {NULL}, 1119, "udp"}, -{"bnetfile", {NULL}, 1120, "tcp"}, -{"bnetfile", {NULL}, 1120, "udp"}, -{"rmpp", {NULL}, 1121, "tcp"}, -{"rmpp", {NULL}, 1121, "udp"}, -{"availant-mgr", {NULL}, 1122, "tcp"}, -{"availant-mgr", {NULL}, 1122, "udp"}, -{"murray", {NULL}, 1123, "tcp"}, -{"murray", {NULL}, 1123, "udp"}, -{"hpvmmcontrol", {NULL}, 1124, "tcp"}, -{"hpvmmcontrol", {NULL}, 1124, "udp"}, -{"hpvmmagent", {NULL}, 1125, "tcp"}, -{"hpvmmagent", {NULL}, 1125, "udp"}, -{"hpvmmdata", {NULL}, 1126, "tcp"}, -{"hpvmmdata", {NULL}, 1126, "udp"}, -{"kwdb-commn", {NULL}, 1127, "tcp"}, -{"kwdb-commn", {NULL}, 1127, "udp"}, -{"saphostctrl", {NULL}, 1128, "tcp"}, -{"saphostctrl", {NULL}, 1128, "udp"}, -{"saphostctrls", {NULL}, 1129, "tcp"}, -{"saphostctrls", {NULL}, 1129, "udp"}, -{"casp", {NULL}, 1130, "tcp"}, -{"casp", {NULL}, 1130, "udp"}, -{"caspssl", {NULL}, 1131, "tcp"}, -{"caspssl", {NULL}, 1131, "udp"}, -{"kvm-via-ip", {NULL}, 1132, "tcp"}, -{"kvm-via-ip", {NULL}, 1132, "udp"}, -{"dfn", {NULL}, 1133, "tcp"}, -{"dfn", {NULL}, 1133, "udp"}, -{"aplx", {NULL}, 1134, "tcp"}, -{"aplx", {NULL}, 1134, "udp"}, -{"omnivision", {NULL}, 1135, "tcp"}, -{"omnivision", {NULL}, 1135, "udp"}, -{"hhb-gateway", {NULL}, 1136, "tcp"}, -{"hhb-gateway", {NULL}, 1136, "udp"}, -{"trim", {NULL}, 1137, "tcp"}, -{"trim", {NULL}, 1137, "udp"}, -{"encrypted_admin", {NULL}, 1138, "tcp"}, -{"encrypted_admin", {NULL}, 1138, "udp"}, -{"evm", {NULL}, 1139, "tcp"}, -{"evm", {NULL}, 1139, "udp"}, -{"autonoc", {NULL}, 1140, "tcp"}, -{"autonoc", {NULL}, 1140, "udp"}, -{"mxomss", {NULL}, 1141, "tcp"}, -{"mxomss", {NULL}, 1141, "udp"}, -{"edtools", {NULL}, 1142, "tcp"}, -{"edtools", {NULL}, 1142, "udp"}, -{"imyx", {NULL}, 1143, "tcp"}, -{"imyx", {NULL}, 1143, "udp"}, -{"fuscript", {NULL}, 1144, "tcp"}, -{"fuscript", {NULL}, 1144, "udp"}, -{"x9-icue", {NULL}, 1145, "tcp"}, -{"x9-icue", {NULL}, 1145, "udp"}, -{"audit-transfer", {NULL}, 1146, "tcp"}, -{"audit-transfer", {NULL}, 1146, "udp"}, -{"capioverlan", {NULL}, 1147, "tcp"}, -{"capioverlan", {NULL}, 1147, "udp"}, -{"elfiq-repl", {NULL}, 1148, "tcp"}, -{"elfiq-repl", {NULL}, 1148, "udp"}, -{"bvtsonar", {NULL}, 1149, "tcp"}, -{"bvtsonar", {NULL}, 1149, "udp"}, -{"blaze", {NULL}, 1150, "tcp"}, -{"blaze", {NULL}, 1150, "udp"}, -{"unizensus", {NULL}, 1151, "tcp"}, -{"unizensus", {NULL}, 1151, "udp"}, -{"winpoplanmess", {NULL}, 1152, "tcp"}, -{"winpoplanmess", {NULL}, 1152, "udp"}, -{"c1222-acse", {NULL}, 1153, "tcp"}, -{"c1222-acse", {NULL}, 1153, "udp"}, -{"resacommunity", {NULL}, 1154, "tcp"}, -{"resacommunity", {NULL}, 1154, "udp"}, -{"nfa", {NULL}, 1155, "tcp"}, -{"nfa", {NULL}, 1155, "udp"}, -{"iascontrol-oms", {NULL}, 1156, "tcp"}, -{"iascontrol-oms", {NULL}, 1156, "udp"}, -{"iascontrol", {NULL}, 1157, "tcp"}, -{"iascontrol", {NULL}, 1157, "udp"}, -{"dbcontrol-oms", {NULL}, 1158, "tcp"}, -{"dbcontrol-oms", {NULL}, 1158, "udp"}, -{"oracle-oms", {NULL}, 1159, "tcp"}, -{"oracle-oms", {NULL}, 1159, "udp"}, -{"olsv", {NULL}, 1160, "tcp"}, -{"olsv", {NULL}, 1160, "udp"}, -{"health-polling", {NULL}, 1161, "tcp"}, -{"health-polling", {NULL}, 1161, "udp"}, -{"health-trap", {NULL}, 1162, "tcp"}, -{"health-trap", {NULL}, 1162, "udp"}, -{"sddp", {NULL}, 1163, "tcp"}, -{"sddp", {NULL}, 1163, "udp"}, -{"qsm-proxy", {NULL}, 1164, "tcp"}, -{"qsm-proxy", {NULL}, 1164, "udp"}, -{"qsm-gui", {NULL}, 1165, "tcp"}, -{"qsm-gui", {NULL}, 1165, "udp"}, -{"qsm-remote", {NULL}, 1166, "tcp"}, -{"qsm-remote", {NULL}, 1166, "udp"}, -{"cisco-ipsla", {NULL}, 1167, "tcp"}, -{"cisco-ipsla", {NULL}, 1167, "udp"}, -{"cisco-ipsla", {NULL}, 1167, "sctp"}, -{"vchat", {NULL}, 1168, "tcp"}, -{"vchat", {NULL}, 1168, "udp"}, -{"tripwire", {NULL}, 1169, "tcp"}, -{"tripwire", {NULL}, 1169, "udp"}, -{"atc-lm", {NULL}, 1170, "tcp"}, -{"atc-lm", {NULL}, 1170, "udp"}, -{"atc-appserver", {NULL}, 1171, "tcp"}, -{"atc-appserver", {NULL}, 1171, "udp"}, -{"dnap", {NULL}, 1172, "tcp"}, -{"dnap", {NULL}, 1172, "udp"}, -{"d-cinema-rrp", {NULL}, 1173, "tcp"}, -{"d-cinema-rrp", {NULL}, 1173, "udp"}, -{"fnet-remote-ui", {NULL}, 1174, "tcp"}, -{"fnet-remote-ui", {NULL}, 1174, "udp"}, -{"dossier", {NULL}, 1175, "tcp"}, -{"dossier", {NULL}, 1175, "udp"}, -{"indigo-server", {NULL}, 1176, "tcp"}, -{"indigo-server", {NULL}, 1176, "udp"}, -{"dkmessenger", {NULL}, 1177, "tcp"}, -{"dkmessenger", {NULL}, 1177, "udp"}, -{"sgi-storman", {NULL}, 1178, "tcp"}, -{"sgi-storman", {NULL}, 1178, "udp"}, -{"b2n", {NULL}, 1179, "tcp"}, -{"b2n", {NULL}, 1179, "udp"}, -{"mc-client", {NULL}, 1180, "tcp"}, -{"mc-client", {NULL}, 1180, "udp"}, -{"3comnetman", {NULL}, 1181, "tcp"}, -{"3comnetman", {NULL}, 1181, "udp"}, -{"accelenet", {NULL}, 1182, "tcp"}, -{"accelenet-data", {NULL}, 1182, "udp"}, -{"llsurfup-http", {NULL}, 1183, "tcp"}, -{"llsurfup-http", {NULL}, 1183, "udp"}, -{"llsurfup-https", {NULL}, 1184, "tcp"}, -{"llsurfup-https", {NULL}, 1184, "udp"}, -{"catchpole", {NULL}, 1185, "tcp"}, -{"catchpole", {NULL}, 1185, "udp"}, -{"mysql-cluster", {NULL}, 1186, "tcp"}, -{"mysql-cluster", {NULL}, 1186, "udp"}, -{"alias", {NULL}, 1187, "tcp"}, -{"alias", {NULL}, 1187, "udp"}, -{"hp-webadmin", {NULL}, 1188, "tcp"}, -{"hp-webadmin", {NULL}, 1188, "udp"}, -{"unet", {NULL}, 1189, "tcp"}, -{"unet", {NULL}, 1189, "udp"}, -{"commlinx-avl", {NULL}, 1190, "tcp"}, -{"commlinx-avl", {NULL}, 1190, "udp"}, -{"gpfs", {NULL}, 1191, "tcp"}, -{"gpfs", {NULL}, 1191, "udp"}, -{"caids-sensor", {NULL}, 1192, "tcp"}, -{"caids-sensor", {NULL}, 1192, "udp"}, -{"fiveacross", {NULL}, 1193, "tcp"}, -{"fiveacross", {NULL}, 1193, "udp"}, -{"openvpn", {NULL}, 1194, "tcp"}, -{"openvpn", {NULL}, 1194, "udp"}, -{"rsf-1", {NULL}, 1195, "tcp"}, -{"rsf-1", {NULL}, 1195, "udp"}, -{"netmagic", {NULL}, 1196, "tcp"}, -{"netmagic", {NULL}, 1196, "udp"}, -{"carrius-rshell", {NULL}, 1197, "tcp"}, -{"carrius-rshell", {NULL}, 1197, "udp"}, -{"cajo-discovery", {NULL}, 1198, "tcp"}, -{"cajo-discovery", {NULL}, 1198, "udp"}, -{"dmidi", {NULL}, 1199, "tcp"}, -{"dmidi", {NULL}, 1199, "udp"}, -{"scol", {NULL}, 1200, "tcp"}, -{"scol", {NULL}, 1200, "udp"}, -{"nucleus-sand", {NULL}, 1201, "tcp"}, -{"nucleus-sand", {NULL}, 1201, "udp"}, -{"caiccipc", {NULL}, 1202, "tcp"}, -{"caiccipc", {NULL}, 1202, "udp"}, -{"ssslic-mgr", {NULL}, 1203, "tcp"}, -{"ssslic-mgr", {NULL}, 1203, "udp"}, -{"ssslog-mgr", {NULL}, 1204, "tcp"}, -{"ssslog-mgr", {NULL}, 1204, "udp"}, -{"accord-mgc", {NULL}, 1205, "tcp"}, -{"accord-mgc", {NULL}, 1205, "udp"}, -{"anthony-data", {NULL}, 1206, "tcp"}, -{"anthony-data", {NULL}, 1206, "udp"}, -{"metasage", {NULL}, 1207, "tcp"}, -{"metasage", {NULL}, 1207, "udp"}, -{"seagull-ais", {NULL}, 1208, "tcp"}, -{"seagull-ais", {NULL}, 1208, "udp"}, -{"ipcd3", {NULL}, 1209, "tcp"}, -{"ipcd3", {NULL}, 1209, "udp"}, -{"eoss", {NULL}, 1210, "tcp"}, -{"eoss", {NULL}, 1210, "udp"}, -{"groove-dpp", {NULL}, 1211, "tcp"}, -{"groove-dpp", {NULL}, 1211, "udp"}, -{"lupa", {NULL}, 1212, "tcp"}, -{"lupa", {NULL}, 1212, "udp"}, -{"mpc-lifenet", {NULL}, 1213, "tcp"}, -{"mpc-lifenet", {NULL}, 1213, "udp"}, -{"kazaa", {NULL}, 1214, "tcp"}, -{"kazaa", {NULL}, 1214, "udp"}, -{"scanstat-1", {NULL}, 1215, "tcp"}, -{"scanstat-1", {NULL}, 1215, "udp"}, -{"etebac5", {NULL}, 1216, "tcp"}, -{"etebac5", {NULL}, 1216, "udp"}, -{"hpss-ndapi", {NULL}, 1217, "tcp"}, -{"hpss-ndapi", {NULL}, 1217, "udp"}, -{"aeroflight-ads", {NULL}, 1218, "tcp"}, -{"aeroflight-ads", {NULL}, 1218, "udp"}, -{"aeroflight-ret", {NULL}, 1219, "tcp"}, -{"aeroflight-ret", {NULL}, 1219, "udp"}, -{"qt-serveradmin", {NULL}, 1220, "tcp"}, -{"qt-serveradmin", {NULL}, 1220, "udp"}, -{"sweetware-apps", {NULL}, 1221, "tcp"}, -{"sweetware-apps", {NULL}, 1221, "udp"}, -{"nerv", {NULL}, 1222, "tcp"}, -{"nerv", {NULL}, 1222, "udp"}, -{"tgp", {NULL}, 1223, "tcp"}, -{"tgp", {NULL}, 1223, "udp"}, -{"vpnz", {NULL}, 1224, "tcp"}, -{"vpnz", {NULL}, 1224, "udp"}, -{"slinkysearch", {NULL}, 1225, "tcp"}, -{"slinkysearch", {NULL}, 1225, "udp"}, -{"stgxfws", {NULL}, 1226, "tcp"}, -{"stgxfws", {NULL}, 1226, "udp"}, -{"dns2go", {NULL}, 1227, "tcp"}, -{"dns2go", {NULL}, 1227, "udp"}, -{"florence", {NULL}, 1228, "tcp"}, -{"florence", {NULL}, 1228, "udp"}, -{"zented", {NULL}, 1229, "tcp"}, -{"zented", {NULL}, 1229, "udp"}, -{"periscope", {NULL}, 1230, "tcp"}, -{"periscope", {NULL}, 1230, "udp"}, -{"menandmice-lpm", {NULL}, 1231, "tcp"}, -{"menandmice-lpm", {NULL}, 1231, "udp"}, -{"univ-appserver", {NULL}, 1233, "tcp"}, -{"univ-appserver", {NULL}, 1233, "udp"}, -{"search-agent", {NULL}, 1234, "tcp"}, -{"search-agent", {NULL}, 1234, "udp"}, -{"mosaicsyssvc1", {NULL}, 1235, "tcp"}, -{"mosaicsyssvc1", {NULL}, 1235, "udp"}, -{"bvcontrol", {NULL}, 1236, "tcp"}, -{"bvcontrol", {NULL}, 1236, "udp"}, -{"tsdos390", {NULL}, 1237, "tcp"}, -{"tsdos390", {NULL}, 1237, "udp"}, -{"hacl-qs", {NULL}, 1238, "tcp"}, -{"hacl-qs", {NULL}, 1238, "udp"}, -{"nmsd", {NULL}, 1239, "tcp"}, -{"nmsd", {NULL}, 1239, "udp"}, -{"instantia", {NULL}, 1240, "tcp"}, -{"instantia", {NULL}, 1240, "udp"}, -{"nessus", {NULL}, 1241, "tcp"}, -{"nessus", {NULL}, 1241, "udp"}, -{"nmasoverip", {NULL}, 1242, "tcp"}, -{"nmasoverip", {NULL}, 1242, "udp"}, -{"serialgateway", {NULL}, 1243, "tcp"}, -{"serialgateway", {NULL}, 1243, "udp"}, -{"isbconference1", {NULL}, 1244, "tcp"}, -{"isbconference1", {NULL}, 1244, "udp"}, -{"isbconference2", {NULL}, 1245, "tcp"}, -{"isbconference2", {NULL}, 1245, "udp"}, -{"payrouter", {NULL}, 1246, "tcp"}, -{"payrouter", {NULL}, 1246, "udp"}, -{"visionpyramid", {NULL}, 1247, "tcp"}, -{"visionpyramid", {NULL}, 1247, "udp"}, -{"hermes", {NULL}, 1248, "tcp"}, -{"hermes", {NULL}, 1248, "udp"}, -{"mesavistaco", {NULL}, 1249, "tcp"}, -{"mesavistaco", {NULL}, 1249, "udp"}, -{"swldy-sias", {NULL}, 1250, "tcp"}, -{"swldy-sias", {NULL}, 1250, "udp"}, -{"servergraph", {NULL}, 1251, "tcp"}, -{"servergraph", {NULL}, 1251, "udp"}, -{"bspne-pcc", {NULL}, 1252, "tcp"}, -{"bspne-pcc", {NULL}, 1252, "udp"}, -{"q55-pcc", {NULL}, 1253, "tcp"}, -{"q55-pcc", {NULL}, 1253, "udp"}, -{"de-noc", {NULL}, 1254, "tcp"}, -{"de-noc", {NULL}, 1254, "udp"}, -{"de-cache-query", {NULL}, 1255, "tcp"}, -{"de-cache-query", {NULL}, 1255, "udp"}, -{"de-server", {NULL}, 1256, "tcp"}, -{"de-server", {NULL}, 1256, "udp"}, -{"shockwave2", {NULL}, 1257, "tcp"}, -{"shockwave2", {NULL}, 1257, "udp"}, -{"opennl", {NULL}, 1258, "tcp"}, -{"opennl", {NULL}, 1258, "udp"}, -{"opennl-voice", {NULL}, 1259, "tcp"}, -{"opennl-voice", {NULL}, 1259, "udp"}, -{"ibm-ssd", {NULL}, 1260, "tcp"}, -{"ibm-ssd", {NULL}, 1260, "udp"}, -{"mpshrsv", {NULL}, 1261, "tcp"}, -{"mpshrsv", {NULL}, 1261, "udp"}, -{"qnts-orb", {NULL}, 1262, "tcp"}, -{"qnts-orb", {NULL}, 1262, "udp"}, -{"dka", {NULL}, 1263, "tcp"}, -{"dka", {NULL}, 1263, "udp"}, -{"prat", {NULL}, 1264, "tcp"}, -{"prat", {NULL}, 1264, "udp"}, -{"dssiapi", {NULL}, 1265, "tcp"}, -{"dssiapi", {NULL}, 1265, "udp"}, -{"dellpwrappks", {NULL}, 1266, "tcp"}, -{"dellpwrappks", {NULL}, 1266, "udp"}, -{"epc", {NULL}, 1267, "tcp"}, -{"epc", {NULL}, 1267, "udp"}, -{"propel-msgsys", {NULL}, 1268, "tcp"}, -{"propel-msgsys", {NULL}, 1268, "udp"}, -{"watilapp", {NULL}, 1269, "tcp"}, -{"watilapp", {NULL}, 1269, "udp"}, -{"opsmgr", {NULL}, 1270, "tcp"}, -{"opsmgr", {NULL}, 1270, "udp"}, -{"excw", {NULL}, 1271, "tcp"}, -{"excw", {NULL}, 1271, "udp"}, -{"cspmlockmgr", {NULL}, 1272, "tcp"}, -{"cspmlockmgr", {NULL}, 1272, "udp"}, -{"emc-gateway", {NULL}, 1273, "tcp"}, -{"emc-gateway", {NULL}, 1273, "udp"}, -{"t1distproc", {NULL}, 1274, "tcp"}, -{"t1distproc", {NULL}, 1274, "udp"}, -{"ivcollector", {NULL}, 1275, "tcp"}, -{"ivcollector", {NULL}, 1275, "udp"}, -{"ivmanager", {NULL}, 1276, "tcp"}, -{"ivmanager", {NULL}, 1276, "udp"}, -{"miva-mqs", {NULL}, 1277, "tcp"}, -{"miva-mqs", {NULL}, 1277, "udp"}, -{"dellwebadmin-1", {NULL}, 1278, "tcp"}, -{"dellwebadmin-1", {NULL}, 1278, "udp"}, -{"dellwebadmin-2", {NULL}, 1279, "tcp"}, -{"dellwebadmin-2", {NULL}, 1279, "udp"}, -{"pictrography", {NULL}, 1280, "tcp"}, -{"pictrography", {NULL}, 1280, "udp"}, -{"healthd", {NULL}, 1281, "tcp"}, -{"healthd", {NULL}, 1281, "udp"}, -{"emperion", {NULL}, 1282, "tcp"}, -{"emperion", {NULL}, 1282, "udp"}, -{"productinfo", {NULL}, 1283, "tcp"}, -{"productinfo", {NULL}, 1283, "udp"}, -{"iee-qfx", {NULL}, 1284, "tcp"}, -{"iee-qfx", {NULL}, 1284, "udp"}, -{"neoiface", {NULL}, 1285, "tcp"}, -{"neoiface", {NULL}, 1285, "udp"}, -{"netuitive", {NULL}, 1286, "tcp"}, -{"netuitive", {NULL}, 1286, "udp"}, -{"routematch", {NULL}, 1287, "tcp"}, -{"routematch", {NULL}, 1287, "udp"}, -{"navbuddy", {NULL}, 1288, "tcp"}, -{"navbuddy", {NULL}, 1288, "udp"}, -{"jwalkserver", {NULL}, 1289, "tcp"}, -{"jwalkserver", {NULL}, 1289, "udp"}, -{"winjaserver", {NULL}, 1290, "tcp"}, -{"winjaserver", {NULL}, 1290, "udp"}, -{"seagulllms", {NULL}, 1291, "tcp"}, -{"seagulllms", {NULL}, 1291, "udp"}, -{"dsdn", {NULL}, 1292, "tcp"}, -{"dsdn", {NULL}, 1292, "udp"}, -{"pkt-krb-ipsec", {NULL}, 1293, "tcp"}, -{"pkt-krb-ipsec", {NULL}, 1293, "udp"}, -{"cmmdriver", {NULL}, 1294, "tcp"}, -{"cmmdriver", {NULL}, 1294, "udp"}, -{"ehtp", {NULL}, 1295, "tcp"}, -{"ehtp", {NULL}, 1295, "udp"}, -{"dproxy", {NULL}, 1296, "tcp"}, -{"dproxy", {NULL}, 1296, "udp"}, -{"sdproxy", {NULL}, 1297, "tcp"}, -{"sdproxy", {NULL}, 1297, "udp"}, -{"lpcp", {NULL}, 1298, "tcp"}, -{"lpcp", {NULL}, 1298, "udp"}, -{"hp-sci", {NULL}, 1299, "tcp"}, -{"hp-sci", {NULL}, 1299, "udp"}, -{"h323hostcallsc", {NULL}, 1300, "tcp"}, -{"h323hostcallsc", {NULL}, 1300, "udp"}, -{"ci3-software-1", {NULL}, 1301, "tcp"}, -{"ci3-software-1", {NULL}, 1301, "udp"}, -{"ci3-software-2", {NULL}, 1302, "tcp"}, -{"ci3-software-2", {NULL}, 1302, "udp"}, -{"sftsrv", {NULL}, 1303, "tcp"}, -{"sftsrv", {NULL}, 1303, "udp"}, -{"boomerang", {NULL}, 1304, "tcp"}, -{"boomerang", {NULL}, 1304, "udp"}, -{"pe-mike", {NULL}, 1305, "tcp"}, -{"pe-mike", {NULL}, 1305, "udp"}, -{"re-conn-proto", {NULL}, 1306, "tcp"}, -{"re-conn-proto", {NULL}, 1306, "udp"}, -{"pacmand", {NULL}, 1307, "tcp"}, -{"pacmand", {NULL}, 1307, "udp"}, -{"odsi", {NULL}, 1308, "tcp"}, -{"odsi", {NULL}, 1308, "udp"}, -{"jtag-server", {NULL}, 1309, "tcp"}, -{"jtag-server", {NULL}, 1309, "udp"}, -{"husky", {NULL}, 1310, "tcp"}, -{"husky", {NULL}, 1310, "udp"}, -{"rxmon", {NULL}, 1311, "tcp"}, -{"rxmon", {NULL}, 1311, "udp"}, -{"sti-envision", {NULL}, 1312, "tcp"}, -{"sti-envision", {NULL}, 1312, "udp"}, -{"bmc_patroldb", {NULL}, 1313, "tcp"}, -{"bmc_patroldb", {NULL}, 1313, "udp"}, -{"pdps", {NULL}, 1314, "tcp"}, -{"pdps", {NULL}, 1314, "udp"}, -{"els", {NULL}, 1315, "tcp"}, -{"els", {NULL}, 1315, "udp"}, -{"exbit-escp", {NULL}, 1316, "tcp"}, -{"exbit-escp", {NULL}, 1316, "udp"}, -{"vrts-ipcserver", {NULL}, 1317, "tcp"}, -{"vrts-ipcserver", {NULL}, 1317, "udp"}, -{"krb5gatekeeper", {NULL}, 1318, "tcp"}, -{"krb5gatekeeper", {NULL}, 1318, "udp"}, -{"amx-icsp", {NULL}, 1319, "tcp"}, -{"amx-icsp", {NULL}, 1319, "udp"}, -{"amx-axbnet", {NULL}, 1320, "tcp"}, -{"amx-axbnet", {NULL}, 1320, "udp"}, -{"pip", {NULL}, 1321, "tcp"}, -{"pip", {NULL}, 1321, "udp"}, -{"novation", {NULL}, 1322, "tcp"}, -{"novation", {NULL}, 1322, "udp"}, -{"brcd", {NULL}, 1323, "tcp"}, -{"brcd", {NULL}, 1323, "udp"}, -{"delta-mcp", {NULL}, 1324, "tcp"}, -{"delta-mcp", {NULL}, 1324, "udp"}, -{"dx-instrument", {NULL}, 1325, "tcp"}, -{"dx-instrument", {NULL}, 1325, "udp"}, -{"wimsic", {NULL}, 1326, "tcp"}, -{"wimsic", {NULL}, 1326, "udp"}, -{"ultrex", {NULL}, 1327, "tcp"}, -{"ultrex", {NULL}, 1327, "udp"}, -{"ewall", {NULL}, 1328, "tcp"}, -{"ewall", {NULL}, 1328, "udp"}, -{"netdb-export", {NULL}, 1329, "tcp"}, -{"netdb-export", {NULL}, 1329, "udp"}, -{"streetperfect", {NULL}, 1330, "tcp"}, -{"streetperfect", {NULL}, 1330, "udp"}, -{"intersan", {NULL}, 1331, "tcp"}, -{"intersan", {NULL}, 1331, "udp"}, -{"pcia-rxp-b", {NULL}, 1332, "tcp"}, -{"pcia-rxp-b", {NULL}, 1332, "udp"}, -{"passwrd-policy", {NULL}, 1333, "tcp"}, -{"passwrd-policy", {NULL}, 1333, "udp"}, -{"writesrv", {NULL}, 1334, "tcp"}, -{"writesrv", {NULL}, 1334, "udp"}, -{"digital-notary", {NULL}, 1335, "tcp"}, -{"digital-notary", {NULL}, 1335, "udp"}, -{"ischat", {NULL}, 1336, "tcp"}, -{"ischat", {NULL}, 1336, "udp"}, -{"menandmice-dns", {NULL}, 1337, "tcp"}, -{"menandmice-dns", {NULL}, 1337, "udp"}, -{"wmc-log-svc", {NULL}, 1338, "tcp"}, -{"wmc-log-svc", {NULL}, 1338, "udp"}, -{"kjtsiteserver", {NULL}, 1339, "tcp"}, -{"kjtsiteserver", {NULL}, 1339, "udp"}, -{"naap", {NULL}, 1340, "tcp"}, -{"naap", {NULL}, 1340, "udp"}, -{"qubes", {NULL}, 1341, "tcp"}, -{"qubes", {NULL}, 1341, "udp"}, -{"esbroker", {NULL}, 1342, "tcp"}, -{"esbroker", {NULL}, 1342, "udp"}, -{"re101", {NULL}, 1343, "tcp"}, -{"re101", {NULL}, 1343, "udp"}, -{"icap", {NULL}, 1344, "tcp"}, -{"icap", {NULL}, 1344, "udp"}, -{"vpjp", {NULL}, 1345, "tcp"}, -{"vpjp", {NULL}, 1345, "udp"}, -{"alta-ana-lm", {NULL}, 1346, "tcp"}, -{"alta-ana-lm", {NULL}, 1346, "udp"}, -{"bbn-mmc", {NULL}, 1347, "tcp"}, -{"bbn-mmc", {NULL}, 1347, "udp"}, -{"bbn-mmx", {NULL}, 1348, "tcp"}, -{"bbn-mmx", {NULL}, 1348, "udp"}, -{"sbook", {NULL}, 1349, "tcp"}, -{"sbook", {NULL}, 1349, "udp"}, -{"editbench", {NULL}, 1350, "tcp"}, -{"editbench", {NULL}, 1350, "udp"}, -{"equationbuilder", {NULL}, 1351, "tcp"}, -{"equationbuilder", {NULL}, 1351, "udp"}, -{"lotusnote", {NULL}, 1352, "tcp"}, -{"lotusnote", {NULL}, 1352, "udp"}, -{"relief", {NULL}, 1353, "tcp"}, -{"relief", {NULL}, 1353, "udp"}, -{"XSIP-network", {NULL}, 1354, "tcp"}, -{"XSIP-network", {NULL}, 1354, "udp"}, -{"intuitive-edge", {NULL}, 1355, "tcp"}, -{"intuitive-edge", {NULL}, 1355, "udp"}, -{"cuillamartin", {NULL}, 1356, "tcp"}, -{"cuillamartin", {NULL}, 1356, "udp"}, -{"pegboard", {NULL}, 1357, "tcp"}, -{"pegboard", {NULL}, 1357, "udp"}, -{"connlcli", {NULL}, 1358, "tcp"}, -{"connlcli", {NULL}, 1358, "udp"}, -{"ftsrv", {NULL}, 1359, "tcp"}, -{"ftsrv", {NULL}, 1359, "udp"}, -{"mimer", {NULL}, 1360, "tcp"}, -{"mimer", {NULL}, 1360, "udp"}, -{"linx", {NULL}, 1361, "tcp"}, -{"linx", {NULL}, 1361, "udp"}, -{"timeflies", {NULL}, 1362, "tcp"}, -{"timeflies", {NULL}, 1362, "udp"}, -{"ndm-requester", {NULL}, 1363, "tcp"}, -{"ndm-requester", {NULL}, 1363, "udp"}, -{"ndm-server", {NULL}, 1364, "tcp"}, -{"ndm-server", {NULL}, 1364, "udp"}, -{"adapt-sna", {NULL}, 1365, "tcp"}, -{"adapt-sna", {NULL}, 1365, "udp"}, -{"netware-csp", {NULL}, 1366, "tcp"}, -{"netware-csp", {NULL}, 1366, "udp"}, -{"dcs", {NULL}, 1367, "tcp"}, -{"dcs", {NULL}, 1367, "udp"}, -{"screencast", {NULL}, 1368, "tcp"}, -{"screencast", {NULL}, 1368, "udp"}, -{"gv-us", {NULL}, 1369, "tcp"}, -{"gv-us", {NULL}, 1369, "udp"}, -{"us-gv", {NULL}, 1370, "tcp"}, -{"us-gv", {NULL}, 1370, "udp"}, -{"fc-cli", {NULL}, 1371, "tcp"}, -{"fc-cli", {NULL}, 1371, "udp"}, -{"fc-ser", {NULL}, 1372, "tcp"}, -{"fc-ser", {NULL}, 1372, "udp"}, -{"chromagrafx", {NULL}, 1373, "tcp"}, -{"chromagrafx", {NULL}, 1373, "udp"}, -{"molly", {NULL}, 1374, "tcp"}, -{"molly", {NULL}, 1374, "udp"}, -{"bytex", {NULL}, 1375, "tcp"}, -{"bytex", {NULL}, 1375, "udp"}, -{"ibm-pps", {NULL}, 1376, "tcp"}, -{"ibm-pps", {NULL}, 1376, "udp"}, -{"cichlid", {NULL}, 1377, "tcp"}, -{"cichlid", {NULL}, 1377, "udp"}, -{"elan", {NULL}, 1378, "tcp"}, -{"elan", {NULL}, 1378, "udp"}, -{"dbreporter", {NULL}, 1379, "tcp"}, -{"dbreporter", {NULL}, 1379, "udp"}, -{"telesis-licman", {NULL}, 1380, "tcp"}, -{"telesis-licman", {NULL}, 1380, "udp"}, -{"apple-licman", {NULL}, 1381, "tcp"}, -{"apple-licman", {NULL}, 1381, "udp"}, -{"udt_os", {NULL}, 1382, "tcp"}, -{"udt_os", {NULL}, 1382, "udp"}, -{"gwha", {NULL}, 1383, "tcp"}, -{"gwha", {NULL}, 1383, "udp"}, -{"os-licman", {NULL}, 1384, "tcp"}, -{"os-licman", {NULL}, 1384, "udp"}, -{"atex_elmd", {NULL}, 1385, "tcp"}, -{"atex_elmd", {NULL}, 1385, "udp"}, -{"checksum", {NULL}, 1386, "tcp"}, -{"checksum", {NULL}, 1386, "udp"}, -{"cadsi-lm", {NULL}, 1387, "tcp"}, -{"cadsi-lm", {NULL}, 1387, "udp"}, -{"objective-dbc", {NULL}, 1388, "tcp"}, -{"objective-dbc", {NULL}, 1388, "udp"}, -{"iclpv-dm", {NULL}, 1389, "tcp"}, -{"iclpv-dm", {NULL}, 1389, "udp"}, -{"iclpv-sc", {NULL}, 1390, "tcp"}, -{"iclpv-sc", {NULL}, 1390, "udp"}, -{"iclpv-sas", {NULL}, 1391, "tcp"}, -{"iclpv-sas", {NULL}, 1391, "udp"}, -{"iclpv-pm", {NULL}, 1392, "tcp"}, -{"iclpv-pm", {NULL}, 1392, "udp"}, -{"iclpv-nls", {NULL}, 1393, "tcp"}, -{"iclpv-nls", {NULL}, 1393, "udp"}, -{"iclpv-nlc", {NULL}, 1394, "tcp"}, -{"iclpv-nlc", {NULL}, 1394, "udp"}, -{"iclpv-wsm", {NULL}, 1395, "tcp"}, -{"iclpv-wsm", {NULL}, 1395, "udp"}, -{"dvl-activemail", {NULL}, 1396, "tcp"}, -{"dvl-activemail", {NULL}, 1396, "udp"}, -{"audio-activmail", {NULL}, 1397, "tcp"}, -{"audio-activmail", {NULL}, 1397, "udp"}, -{"video-activmail", {NULL}, 1398, "tcp"}, -{"video-activmail", {NULL}, 1398, "udp"}, -{"cadkey-licman", {NULL}, 1399, "tcp"}, -{"cadkey-licman", {NULL}, 1399, "udp"}, -{"cadkey-tablet", {NULL}, 1400, "tcp"}, -{"cadkey-tablet", {NULL}, 1400, "udp"}, -{"goldleaf-licman", {NULL}, 1401, "tcp"}, -{"goldleaf-licman", {NULL}, 1401, "udp"}, -{"prm-sm-np", {NULL}, 1402, "tcp"}, -{"prm-sm-np", {NULL}, 1402, "udp"}, -{"prm-nm-np", {NULL}, 1403, "tcp"}, -{"prm-nm-np", {NULL}, 1403, "udp"}, -{"igi-lm", {NULL}, 1404, "tcp"}, -{"igi-lm", {NULL}, 1404, "udp"}, -{"ibm-res", {NULL}, 1405, "tcp"}, -{"ibm-res", {NULL}, 1405, "udp"}, -{"netlabs-lm", {NULL}, 1406, "tcp"}, -{"netlabs-lm", {NULL}, 1406, "udp"}, -{"dbsa-lm", {NULL}, 1407, "tcp"}, -{"dbsa-lm", {NULL}, 1407, "udp"}, -{"sophia-lm", {NULL}, 1408, "tcp"}, -{"sophia-lm", {NULL}, 1408, "udp"}, -{"here-lm", {NULL}, 1409, "tcp"}, -{"here-lm", {NULL}, 1409, "udp"}, -{"hiq", {NULL}, 1410, "tcp"}, -{"hiq", {NULL}, 1410, "udp"}, -{"af", {NULL}, 1411, "tcp"}, -{"af", {NULL}, 1411, "udp"}, -{"innosys", {NULL}, 1412, "tcp"}, -{"innosys", {NULL}, 1412, "udp"}, -{"innosys-acl", {NULL}, 1413, "tcp"}, -{"innosys-acl", {NULL}, 1413, "udp"}, -{"ibm-mqseries", {NULL}, 1414, "tcp"}, -{"ibm-mqseries", {NULL}, 1414, "udp"}, -{"dbstar", {NULL}, 1415, "tcp"}, -{"dbstar", {NULL}, 1415, "udp"}, -{"novell-lu6.2", {NULL}, 1416, "tcp"}, -{"novell-lu6.2", {NULL}, 1416, "udp"}, -{"timbuktu-srv1", {NULL}, 1417, "tcp"}, -{"timbuktu-srv1", {NULL}, 1417, "udp"}, -{"timbuktu-srv2", {NULL}, 1418, "tcp"}, -{"timbuktu-srv2", {NULL}, 1418, "udp"}, -{"timbuktu-srv3", {NULL}, 1419, "tcp"}, -{"timbuktu-srv3", {NULL}, 1419, "udp"}, -{"timbuktu-srv4", {NULL}, 1420, "tcp"}, -{"timbuktu-srv4", {NULL}, 1420, "udp"}, -{"gandalf-lm", {NULL}, 1421, "tcp"}, -{"gandalf-lm", {NULL}, 1421, "udp"}, -{"autodesk-lm", {NULL}, 1422, "tcp"}, -{"autodesk-lm", {NULL}, 1422, "udp"}, -{"essbase", {NULL}, 1423, "tcp"}, -{"essbase", {NULL}, 1423, "udp"}, -{"hybrid", {NULL}, 1424, "tcp"}, -{"hybrid", {NULL}, 1424, "udp"}, -{"zion-lm", {NULL}, 1425, "tcp"}, -{"zion-lm", {NULL}, 1425, "udp"}, -{"sais", {NULL}, 1426, "tcp"}, -{"sais", {NULL}, 1426, "udp"}, -{"mloadd", {NULL}, 1427, "tcp"}, -{"mloadd", {NULL}, 1427, "udp"}, -{"informatik-lm", {NULL}, 1428, "tcp"}, -{"informatik-lm", {NULL}, 1428, "udp"}, -{"nms", {NULL}, 1429, "tcp"}, -{"nms", {NULL}, 1429, "udp"}, -{"tpdu", {NULL}, 1430, "tcp"}, -{"tpdu", {NULL}, 1430, "udp"}, -{"rgtp", {NULL}, 1431, "tcp"}, -{"rgtp", {NULL}, 1431, "udp"}, -{"blueberry-lm", {NULL}, 1432, "tcp"}, -{"blueberry-lm", {NULL}, 1432, "udp"}, -{"ms-sql-s", {NULL}, 1433, "tcp"}, -{"ms-sql-s", {NULL}, 1433, "udp"}, -{"ms-sql-m", {NULL}, 1434, "tcp"}, -{"ms-sql-m", {NULL}, 1434, "udp"}, -{"ibm-cics", {NULL}, 1435, "tcp"}, -{"ibm-cics", {NULL}, 1435, "udp"}, -{"saism", {NULL}, 1436, "tcp"}, -{"saism", {NULL}, 1436, "udp"}, -{"tabula", {NULL}, 1437, "tcp"}, -{"tabula", {NULL}, 1437, "udp"}, -{"eicon-server", {NULL}, 1438, "tcp"}, -{"eicon-server", {NULL}, 1438, "udp"}, -{"eicon-x25", {NULL}, 1439, "tcp"}, -{"eicon-x25", {NULL}, 1439, "udp"}, -{"eicon-slp", {NULL}, 1440, "tcp"}, -{"eicon-slp", {NULL}, 1440, "udp"}, -{"cadis-1", {NULL}, 1441, "tcp"}, -{"cadis-1", {NULL}, 1441, "udp"}, -{"cadis-2", {NULL}, 1442, "tcp"}, -{"cadis-2", {NULL}, 1442, "udp"}, -{"ies-lm", {NULL}, 1443, "tcp"}, -{"ies-lm", {NULL}, 1443, "udp"}, -{"marcam-lm", {NULL}, 1444, "tcp"}, -{"marcam-lm", {NULL}, 1444, "udp"}, -{"proxima-lm", {NULL}, 1445, "tcp"}, -{"proxima-lm", {NULL}, 1445, "udp"}, -{"ora-lm", {NULL}, 1446, "tcp"}, -{"ora-lm", {NULL}, 1446, "udp"}, -{"apri-lm", {NULL}, 1447, "tcp"}, -{"apri-lm", {NULL}, 1447, "udp"}, -{"oc-lm", {NULL}, 1448, "tcp"}, -{"oc-lm", {NULL}, 1448, "udp"}, -{"peport", {NULL}, 1449, "tcp"}, -{"peport", {NULL}, 1449, "udp"}, -{"dwf", {NULL}, 1450, "tcp"}, -{"dwf", {NULL}, 1450, "udp"}, -{"infoman", {NULL}, 1451, "tcp"}, -{"infoman", {NULL}, 1451, "udp"}, -{"gtegsc-lm", {NULL}, 1452, "tcp"}, -{"gtegsc-lm", {NULL}, 1452, "udp"}, -{"genie-lm", {NULL}, 1453, "tcp"}, -{"genie-lm", {NULL}, 1453, "udp"}, -{"interhdl_elmd", {NULL}, 1454, "tcp"}, -{"interhdl_elmd", {NULL}, 1454, "udp"}, -{"esl-lm", {NULL}, 1455, "tcp"}, -{"esl-lm", {NULL}, 1455, "udp"}, -{"dca", {NULL}, 1456, "tcp"}, -{"dca", {NULL}, 1456, "udp"}, -{"valisys-lm", {NULL}, 1457, "tcp"}, -{"valisys-lm", {NULL}, 1457, "udp"}, -{"nrcabq-lm", {NULL}, 1458, "tcp"}, -{"nrcabq-lm", {NULL}, 1458, "udp"}, -{"proshare1", {NULL}, 1459, "tcp"}, -{"proshare1", {NULL}, 1459, "udp"}, -{"proshare2", {NULL}, 1460, "tcp"}, -{"proshare2", {NULL}, 1460, "udp"}, -{"ibm_wrless_lan", {NULL}, 1461, "tcp"}, -{"ibm_wrless_lan", {NULL}, 1461, "udp"}, -{"world-lm", {NULL}, 1462, "tcp"}, -{"world-lm", {NULL}, 1462, "udp"}, -{"nucleus", {NULL}, 1463, "tcp"}, -{"nucleus", {NULL}, 1463, "udp"}, -{"msl_lmd", {NULL}, 1464, "tcp"}, -{"msl_lmd", {NULL}, 1464, "udp"}, -{"pipes", {NULL}, 1465, "tcp"}, -{"pipes", {NULL}, 1465, "udp"}, -{"oceansoft-lm", {NULL}, 1466, "tcp"}, -{"oceansoft-lm", {NULL}, 1466, "udp"}, -{"csdmbase", {NULL}, 1467, "tcp"}, -{"csdmbase", {NULL}, 1467, "udp"}, -{"csdm", {NULL}, 1468, "tcp"}, -{"csdm", {NULL}, 1468, "udp"}, -{"aal-lm", {NULL}, 1469, "tcp"}, -{"aal-lm", {NULL}, 1469, "udp"}, -{"uaiact", {NULL}, 1470, "tcp"}, -{"uaiact", {NULL}, 1470, "udp"}, -{"csdmbase", {NULL}, 1471, "tcp"}, -{"csdmbase", {NULL}, 1471, "udp"}, -{"csdm", {NULL}, 1472, "tcp"}, -{"csdm", {NULL}, 1472, "udp"}, -{"openmath", {NULL}, 1473, "tcp"}, -{"openmath", {NULL}, 1473, "udp"}, -{"telefinder", {NULL}, 1474, "tcp"}, -{"telefinder", {NULL}, 1474, "udp"}, -{"taligent-lm", {NULL}, 1475, "tcp"}, -{"taligent-lm", {NULL}, 1475, "udp"}, -{"clvm-cfg", {NULL}, 1476, "tcp"}, -{"clvm-cfg", {NULL}, 1476, "udp"}, -{"ms-sna-server", {NULL}, 1477, "tcp"}, -{"ms-sna-server", {NULL}, 1477, "udp"}, -{"ms-sna-base", {NULL}, 1478, "tcp"}, -{"ms-sna-base", {NULL}, 1478, "udp"}, -{"dberegister", {NULL}, 1479, "tcp"}, -{"dberegister", {NULL}, 1479, "udp"}, -{"pacerforum", {NULL}, 1480, "tcp"}, -{"pacerforum", {NULL}, 1480, "udp"}, -{"airs", {NULL}, 1481, "tcp"}, -{"airs", {NULL}, 1481, "udp"}, -{"miteksys-lm", {NULL}, 1482, "tcp"}, -{"miteksys-lm", {NULL}, 1482, "udp"}, -{"afs", {NULL}, 1483, "tcp"}, -{"afs", {NULL}, 1483, "udp"}, -{"confluent", {NULL}, 1484, "tcp"}, -{"confluent", {NULL}, 1484, "udp"}, -{"lansource", {NULL}, 1485, "tcp"}, -{"lansource", {NULL}, 1485, "udp"}, -{"nms_topo_serv", {NULL}, 1486, "tcp"}, -{"nms_topo_serv", {NULL}, 1486, "udp"}, -{"localinfosrvr", {NULL}, 1487, "tcp"}, -{"localinfosrvr", {NULL}, 1487, "udp"}, -{"docstor", {NULL}, 1488, "tcp"}, -{"docstor", {NULL}, 1488, "udp"}, -{"dmdocbroker", {NULL}, 1489, "tcp"}, -{"dmdocbroker", {NULL}, 1489, "udp"}, -{"insitu-conf", {NULL}, 1490, "tcp"}, -{"insitu-conf", {NULL}, 1490, "udp"}, -{"stone-design-1", {NULL}, 1492, "tcp"}, -{"stone-design-1", {NULL}, 1492, "udp"}, -{"netmap_lm", {NULL}, 1493, "tcp"}, -{"netmap_lm", {NULL}, 1493, "udp"}, -{"ica", {NULL}, 1494, "tcp"}, -{"ica", {NULL}, 1494, "udp"}, -{"cvc", {NULL}, 1495, "tcp"}, -{"cvc", {NULL}, 1495, "udp"}, -{"liberty-lm", {NULL}, 1496, "tcp"}, -{"liberty-lm", {NULL}, 1496, "udp"}, -{"rfx-lm", {NULL}, 1497, "tcp"}, -{"rfx-lm", {NULL}, 1497, "udp"}, -{"sybase-sqlany", {NULL}, 1498, "tcp"}, -{"sybase-sqlany", {NULL}, 1498, "udp"}, -{"fhc", {NULL}, 1499, "tcp"}, -{"fhc", {NULL}, 1499, "udp"}, -{"vlsi-lm", {NULL}, 1500, "tcp"}, -{"vlsi-lm", {NULL}, 1500, "udp"}, -{"saiscm", {NULL}, 1501, "tcp"}, -{"saiscm", {NULL}, 1501, "udp"}, -{"shivadiscovery", {NULL}, 1502, "tcp"}, -{"shivadiscovery", {NULL}, 1502, "udp"}, -{"imtc-mcs", {NULL}, 1503, "tcp"}, -{"imtc-mcs", {NULL}, 1503, "udp"}, -{"evb-elm", {NULL}, 1504, "tcp"}, -{"evb-elm", {NULL}, 1504, "udp"}, -{"funkproxy", {NULL}, 1505, "tcp"}, -{"funkproxy", {NULL}, 1505, "udp"}, -{"utcd", {NULL}, 1506, "tcp"}, -{"utcd", {NULL}, 1506, "udp"}, -{"symplex", {NULL}, 1507, "tcp"}, -{"symplex", {NULL}, 1507, "udp"}, -{"diagmond", {NULL}, 1508, "tcp"}, -{"diagmond", {NULL}, 1508, "udp"}, -{"robcad-lm", {NULL}, 1509, "tcp"}, -{"robcad-lm", {NULL}, 1509, "udp"}, -{"mvx-lm", {NULL}, 1510, "tcp"}, -{"mvx-lm", {NULL}, 1510, "udp"}, -{"3l-l1", {NULL}, 1511, "tcp"}, -{"3l-l1", {NULL}, 1511, "udp"}, -{"wins", {NULL}, 1512, "tcp"}, -{"wins", {NULL}, 1512, "udp"}, -{"fujitsu-dtc", {NULL}, 1513, "tcp"}, -{"fujitsu-dtc", {NULL}, 1513, "udp"}, -{"fujitsu-dtcns", {NULL}, 1514, "tcp"}, -{"fujitsu-dtcns", {NULL}, 1514, "udp"}, -{"ifor-protocol", {NULL}, 1515, "tcp"}, -{"ifor-protocol", {NULL}, 1515, "udp"}, -{"vpad", {NULL}, 1516, "tcp"}, -{"vpad", {NULL}, 1516, "udp"}, -{"vpac", {NULL}, 1517, "tcp"}, -{"vpac", {NULL}, 1517, "udp"}, -{"vpvd", {NULL}, 1518, "tcp"}, -{"vpvd", {NULL}, 1518, "udp"}, -{"vpvc", {NULL}, 1519, "tcp"}, -{"vpvc", {NULL}, 1519, "udp"}, -{"atm-zip-office", {NULL}, 1520, "tcp"}, -{"atm-zip-office", {NULL}, 1520, "udp"}, -{"ncube-lm", {NULL}, 1521, "tcp"}, -{"ncube-lm", {NULL}, 1521, "udp"}, -{"ricardo-lm", {NULL}, 1522, "tcp"}, -{"ricardo-lm", {NULL}, 1522, "udp"}, -{"cichild-lm", {NULL}, 1523, "tcp"}, -{"cichild-lm", {NULL}, 1523, "udp"}, -{"ingreslock", {NULL}, 1524, "tcp"}, -{"ingreslock", {NULL}, 1524, "udp"}, -{"orasrv", {NULL}, 1525, "tcp"}, -{"orasrv", {NULL}, 1525, "udp"}, -{"prospero-np", {NULL}, 1525, "tcp"}, -{"prospero-np", {NULL}, 1525, "udp"}, -{"pdap-np", {NULL}, 1526, "tcp"}, -{"pdap-np", {NULL}, 1526, "udp"}, -{"tlisrv", {NULL}, 1527, "tcp"}, -{"tlisrv", {NULL}, 1527, "udp"}, -{"coauthor", {NULL}, 1529, "tcp"}, -{"coauthor", {NULL}, 1529, "udp"}, -{"rap-service", {NULL}, 1530, "tcp"}, -{"rap-service", {NULL}, 1530, "udp"}, -{"rap-listen", {NULL}, 1531, "tcp"}, -{"rap-listen", {NULL}, 1531, "udp"}, -{"miroconnect", {NULL}, 1532, "tcp"}, -{"miroconnect", {NULL}, 1532, "udp"}, -{"virtual-places", {NULL}, 1533, "tcp"}, -{"virtual-places", {NULL}, 1533, "udp"}, -{"micromuse-lm", {NULL}, 1534, "tcp"}, -{"micromuse-lm", {NULL}, 1534, "udp"}, -{"ampr-info", {NULL}, 1535, "tcp"}, -{"ampr-info", {NULL}, 1535, "udp"}, -{"ampr-inter", {NULL}, 1536, "tcp"}, -{"ampr-inter", {NULL}, 1536, "udp"}, -{"sdsc-lm", {NULL}, 1537, "tcp"}, -{"sdsc-lm", {NULL}, 1537, "udp"}, -{"3ds-lm", {NULL}, 1538, "tcp"}, -{"3ds-lm", {NULL}, 1538, "udp"}, -{"intellistor-lm", {NULL}, 1539, "tcp"}, -{"intellistor-lm", {NULL}, 1539, "udp"}, -{"rds", {NULL}, 1540, "tcp"}, -{"rds", {NULL}, 1540, "udp"}, -{"rds2", {NULL}, 1541, "tcp"}, -{"rds2", {NULL}, 1541, "udp"}, -{"gridgen-elmd", {NULL}, 1542, "tcp"}, -{"gridgen-elmd", {NULL}, 1542, "udp"}, -{"simba-cs", {NULL}, 1543, "tcp"}, -{"simba-cs", {NULL}, 1543, "udp"}, -{"aspeclmd", {NULL}, 1544, "tcp"}, -{"aspeclmd", {NULL}, 1544, "udp"}, -{"vistium-share", {NULL}, 1545, "tcp"}, -{"vistium-share", {NULL}, 1545, "udp"}, -{"abbaccuray", {NULL}, 1546, "tcp"}, -{"abbaccuray", {NULL}, 1546, "udp"}, -{"laplink", {NULL}, 1547, "tcp"}, -{"laplink", {NULL}, 1547, "udp"}, -{"axon-lm", {NULL}, 1548, "tcp"}, -{"axon-lm", {NULL}, 1548, "udp"}, -{"shivahose", {NULL}, 1549, "tcp"}, -{"shivasound", {NULL}, 1549, "udp"}, -{"3m-image-lm", {NULL}, 1550, "tcp"}, -{"3m-image-lm", {NULL}, 1550, "udp"}, -{"hecmtl-db", {NULL}, 1551, "tcp"}, -{"hecmtl-db", {NULL}, 1551, "udp"}, -{"pciarray", {NULL}, 1552, "tcp"}, -{"pciarray", {NULL}, 1552, "udp"}, -{"sna-cs", {NULL}, 1553, "tcp"}, -{"sna-cs", {NULL}, 1553, "udp"}, -{"caci-lm", {NULL}, 1554, "tcp"}, -{"caci-lm", {NULL}, 1554, "udp"}, -{"livelan", {NULL}, 1555, "tcp"}, -{"livelan", {NULL}, 1555, "udp"}, -{"veritas_pbx", {NULL}, 1556, "tcp"}, -{"veritas_pbx", {NULL}, 1556, "udp"}, -{"arbortext-lm", {NULL}, 1557, "tcp"}, -{"arbortext-lm", {NULL}, 1557, "udp"}, -{"xingmpeg", {NULL}, 1558, "tcp"}, -{"xingmpeg", {NULL}, 1558, "udp"}, -{"web2host", {NULL}, 1559, "tcp"}, -{"web2host", {NULL}, 1559, "udp"}, -{"asci-val", {NULL}, 1560, "tcp"}, -{"asci-val", {NULL}, 1560, "udp"}, -{"facilityview", {NULL}, 1561, "tcp"}, -{"facilityview", {NULL}, 1561, "udp"}, -{"pconnectmgr", {NULL}, 1562, "tcp"}, -{"pconnectmgr", {NULL}, 1562, "udp"}, -{"cadabra-lm", {NULL}, 1563, "tcp"}, -{"cadabra-lm", {NULL}, 1563, "udp"}, -{"pay-per-view", {NULL}, 1564, "tcp"}, -{"pay-per-view", {NULL}, 1564, "udp"}, -{"winddlb", {NULL}, 1565, "tcp"}, -{"winddlb", {NULL}, 1565, "udp"}, -{"corelvideo", {NULL}, 1566, "tcp"}, -{"corelvideo", {NULL}, 1566, "udp"}, -{"jlicelmd", {NULL}, 1567, "tcp"}, -{"jlicelmd", {NULL}, 1567, "udp"}, -{"tsspmap", {NULL}, 1568, "tcp"}, -{"tsspmap", {NULL}, 1568, "udp"}, -{"ets", {NULL}, 1569, "tcp"}, -{"ets", {NULL}, 1569, "udp"}, -{"orbixd", {NULL}, 1570, "tcp"}, -{"orbixd", {NULL}, 1570, "udp"}, -{"rdb-dbs-disp", {NULL}, 1571, "tcp"}, -{"rdb-dbs-disp", {NULL}, 1571, "udp"}, -{"chip-lm", {NULL}, 1572, "tcp"}, -{"chip-lm", {NULL}, 1572, "udp"}, -{"itscomm-ns", {NULL}, 1573, "tcp"}, -{"itscomm-ns", {NULL}, 1573, "udp"}, -{"mvel-lm", {NULL}, 1574, "tcp"}, -{"mvel-lm", {NULL}, 1574, "udp"}, -{"oraclenames", {NULL}, 1575, "tcp"}, -{"oraclenames", {NULL}, 1575, "udp"}, -{"moldflow-lm", {NULL}, 1576, "tcp"}, -{"moldflow-lm", {NULL}, 1576, "udp"}, -{"hypercube-lm", {NULL}, 1577, "tcp"}, -{"hypercube-lm", {NULL}, 1577, "udp"}, -{"jacobus-lm", {NULL}, 1578, "tcp"}, -{"jacobus-lm", {NULL}, 1578, "udp"}, -{"ioc-sea-lm", {NULL}, 1579, "tcp"}, -{"ioc-sea-lm", {NULL}, 1579, "udp"}, -{"tn-tl-r1", {NULL}, 1580, "tcp"}, -{"tn-tl-r2", {NULL}, 1580, "udp"}, -{"mil-2045-47001", {NULL}, 1581, "tcp"}, -{"mil-2045-47001", {NULL}, 1581, "udp"}, -{"msims", {NULL}, 1582, "tcp"}, -{"msims", {NULL}, 1582, "udp"}, -{"simbaexpress", {NULL}, 1583, "tcp"}, -{"simbaexpress", {NULL}, 1583, "udp"}, -{"tn-tl-fd2", {NULL}, 1584, "tcp"}, -{"tn-tl-fd2", {NULL}, 1584, "udp"}, -{"intv", {NULL}, 1585, "tcp"}, -{"intv", {NULL}, 1585, "udp"}, -{"ibm-abtact", {NULL}, 1586, "tcp"}, -{"ibm-abtact", {NULL}, 1586, "udp"}, -{"pra_elmd", {NULL}, 1587, "tcp"}, -{"pra_elmd", {NULL}, 1587, "udp"}, -{"triquest-lm", {NULL}, 1588, "tcp"}, -{"triquest-lm", {NULL}, 1588, "udp"}, -{"vqp", {NULL}, 1589, "tcp"}, -{"vqp", {NULL}, 1589, "udp"}, -{"gemini-lm", {NULL}, 1590, "tcp"}, -{"gemini-lm", {NULL}, 1590, "udp"}, -{"ncpm-pm", {NULL}, 1591, "tcp"}, -{"ncpm-pm", {NULL}, 1591, "udp"}, -{"commonspace", {NULL}, 1592, "tcp"}, -{"commonspace", {NULL}, 1592, "udp"}, -{"mainsoft-lm", {NULL}, 1593, "tcp"}, -{"mainsoft-lm", {NULL}, 1593, "udp"}, -{"sixtrak", {NULL}, 1594, "tcp"}, -{"sixtrak", {NULL}, 1594, "udp"}, -{"radio", {NULL}, 1595, "tcp"}, -{"radio", {NULL}, 1595, "udp"}, -{"radio-sm", {NULL}, 1596, "tcp"}, -{"radio-bc", {NULL}, 1596, "udp"}, -{"orbplus-iiop", {NULL}, 1597, "tcp"}, -{"orbplus-iiop", {NULL}, 1597, "udp"}, -{"picknfs", {NULL}, 1598, "tcp"}, -{"picknfs", {NULL}, 1598, "udp"}, -{"simbaservices", {NULL}, 1599, "tcp"}, -{"simbaservices", {NULL}, 1599, "udp"}, -{"issd", {NULL}, 1600, "tcp"}, -{"issd", {NULL}, 1600, "udp"}, -{"aas", {NULL}, 1601, "tcp"}, -{"aas", {NULL}, 1601, "udp"}, -{"inspect", {NULL}, 1602, "tcp"}, -{"inspect", {NULL}, 1602, "udp"}, -{"picodbc", {NULL}, 1603, "tcp"}, -{"picodbc", {NULL}, 1603, "udp"}, -{"icabrowser", {NULL}, 1604, "tcp"}, -{"icabrowser", {NULL}, 1604, "udp"}, -{"slp", {NULL}, 1605, "tcp"}, -{"slp", {NULL}, 1605, "udp"}, -{"slm-api", {NULL}, 1606, "tcp"}, -{"slm-api", {NULL}, 1606, "udp"}, -{"stt", {NULL}, 1607, "tcp"}, -{"stt", {NULL}, 1607, "udp"}, -{"smart-lm", {NULL}, 1608, "tcp"}, -{"smart-lm", {NULL}, 1608, "udp"}, -{"isysg-lm", {NULL}, 1609, "tcp"}, -{"isysg-lm", {NULL}, 1609, "udp"}, -{"taurus-wh", {NULL}, 1610, "tcp"}, -{"taurus-wh", {NULL}, 1610, "udp"}, -{"ill", {NULL}, 1611, "tcp"}, -{"ill", {NULL}, 1611, "udp"}, -{"netbill-trans", {NULL}, 1612, "tcp"}, -{"netbill-trans", {NULL}, 1612, "udp"}, -{"netbill-keyrep", {NULL}, 1613, "tcp"}, -{"netbill-keyrep", {NULL}, 1613, "udp"}, -{"netbill-cred", {NULL}, 1614, "tcp"}, -{"netbill-cred", {NULL}, 1614, "udp"}, -{"netbill-auth", {NULL}, 1615, "tcp"}, -{"netbill-auth", {NULL}, 1615, "udp"}, -{"netbill-prod", {NULL}, 1616, "tcp"}, -{"netbill-prod", {NULL}, 1616, "udp"}, -{"nimrod-agent", {NULL}, 1617, "tcp"}, -{"nimrod-agent", {NULL}, 1617, "udp"}, -{"skytelnet", {NULL}, 1618, "tcp"}, -{"skytelnet", {NULL}, 1618, "udp"}, -{"xs-openstorage", {NULL}, 1619, "tcp"}, -{"xs-openstorage", {NULL}, 1619, "udp"}, -{"faxportwinport", {NULL}, 1620, "tcp"}, -{"faxportwinport", {NULL}, 1620, "udp"}, -{"softdataphone", {NULL}, 1621, "tcp"}, -{"softdataphone", {NULL}, 1621, "udp"}, -{"ontime", {NULL}, 1622, "tcp"}, -{"ontime", {NULL}, 1622, "udp"}, -{"jaleosnd", {NULL}, 1623, "tcp"}, -{"jaleosnd", {NULL}, 1623, "udp"}, -{"udp-sr-port", {NULL}, 1624, "tcp"}, -{"udp-sr-port", {NULL}, 1624, "udp"}, -{"svs-omagent", {NULL}, 1625, "tcp"}, -{"svs-omagent", {NULL}, 1625, "udp"}, -{"shockwave", {NULL}, 1626, "tcp"}, -{"shockwave", {NULL}, 1626, "udp"}, -{"t128-gateway", {NULL}, 1627, "tcp"}, -{"t128-gateway", {NULL}, 1627, "udp"}, -{"lontalk-norm", {NULL}, 1628, "tcp"}, -{"lontalk-norm", {NULL}, 1628, "udp"}, -{"lontalk-urgnt", {NULL}, 1629, "tcp"}, -{"lontalk-urgnt", {NULL}, 1629, "udp"}, -{"oraclenet8cman", {NULL}, 1630, "tcp"}, -{"oraclenet8cman", {NULL}, 1630, "udp"}, -{"visitview", {NULL}, 1631, "tcp"}, -{"visitview", {NULL}, 1631, "udp"}, -{"pammratc", {NULL}, 1632, "tcp"}, -{"pammratc", {NULL}, 1632, "udp"}, -{"pammrpc", {NULL}, 1633, "tcp"}, -{"pammrpc", {NULL}, 1633, "udp"}, -{"loaprobe", {NULL}, 1634, "tcp"}, -{"loaprobe", {NULL}, 1634, "udp"}, -{"edb-server1", {NULL}, 1635, "tcp"}, -{"edb-server1", {NULL}, 1635, "udp"}, -{"isdc", {NULL}, 1636, "tcp"}, -{"isdc", {NULL}, 1636, "udp"}, -{"islc", {NULL}, 1637, "tcp"}, -{"islc", {NULL}, 1637, "udp"}, -{"ismc", {NULL}, 1638, "tcp"}, -{"ismc", {NULL}, 1638, "udp"}, -{"cert-initiator", {NULL}, 1639, "tcp"}, -{"cert-initiator", {NULL}, 1639, "udp"}, -{"cert-responder", {NULL}, 1640, "tcp"}, -{"cert-responder", {NULL}, 1640, "udp"}, -{"invision", {NULL}, 1641, "tcp"}, -{"invision", {NULL}, 1641, "udp"}, -{"isis-am", {NULL}, 1642, "tcp"}, -{"isis-am", {NULL}, 1642, "udp"}, -{"isis-ambc", {NULL}, 1643, "tcp"}, -{"isis-ambc", {NULL}, 1643, "udp"}, -{"saiseh", {NULL}, 1644, "tcp"}, -{"sightline", {NULL}, 1645, "tcp"}, -{"sightline", {NULL}, 1645, "udp"}, -{"sa-msg-port", {NULL}, 1646, "tcp"}, -{"sa-msg-port", {NULL}, 1646, "udp"}, -{"rsap", {NULL}, 1647, "tcp"}, -{"rsap", {NULL}, 1647, "udp"}, -{"concurrent-lm", {NULL}, 1648, "tcp"}, -{"concurrent-lm", {NULL}, 1648, "udp"}, -{"kermit", {NULL}, 1649, "tcp"}, -{"kermit", {NULL}, 1649, "udp"}, -{"nkd", {NULL}, 1650, "tcp"}, -{"nkd", {NULL}, 1650, "udp"}, -{"shiva_confsrvr", {NULL}, 1651, "tcp"}, -{"shiva_confsrvr", {NULL}, 1651, "udp"}, -{"xnmp", {NULL}, 1652, "tcp"}, -{"xnmp", {NULL}, 1652, "udp"}, -{"alphatech-lm", {NULL}, 1653, "tcp"}, -{"alphatech-lm", {NULL}, 1653, "udp"}, -{"stargatealerts", {NULL}, 1654, "tcp"}, -{"stargatealerts", {NULL}, 1654, "udp"}, -{"dec-mbadmin", {NULL}, 1655, "tcp"}, -{"dec-mbadmin", {NULL}, 1655, "udp"}, -{"dec-mbadmin-h", {NULL}, 1656, "tcp"}, -{"dec-mbadmin-h", {NULL}, 1656, "udp"}, -{"fujitsu-mmpdc", {NULL}, 1657, "tcp"}, -{"fujitsu-mmpdc", {NULL}, 1657, "udp"}, -{"sixnetudr", {NULL}, 1658, "tcp"}, -{"sixnetudr", {NULL}, 1658, "udp"}, -{"sg-lm", {NULL}, 1659, "tcp"}, -{"sg-lm", {NULL}, 1659, "udp"}, -{"skip-mc-gikreq", {NULL}, 1660, "tcp"}, -{"skip-mc-gikreq", {NULL}, 1660, "udp"}, -{"netview-aix-1", {NULL}, 1661, "tcp"}, -{"netview-aix-1", {NULL}, 1661, "udp"}, -{"netview-aix-2", {NULL}, 1662, "tcp"}, -{"netview-aix-2", {NULL}, 1662, "udp"}, -{"netview-aix-3", {NULL}, 1663, "tcp"}, -{"netview-aix-3", {NULL}, 1663, "udp"}, -{"netview-aix-4", {NULL}, 1664, "tcp"}, -{"netview-aix-4", {NULL}, 1664, "udp"}, -{"netview-aix-5", {NULL}, 1665, "tcp"}, -{"netview-aix-5", {NULL}, 1665, "udp"}, -{"netview-aix-6", {NULL}, 1666, "tcp"}, -{"netview-aix-6", {NULL}, 1666, "udp"}, -{"netview-aix-7", {NULL}, 1667, "tcp"}, -{"netview-aix-7", {NULL}, 1667, "udp"}, -{"netview-aix-8", {NULL}, 1668, "tcp"}, -{"netview-aix-8", {NULL}, 1668, "udp"}, -{"netview-aix-9", {NULL}, 1669, "tcp"}, -{"netview-aix-9", {NULL}, 1669, "udp"}, -{"netview-aix-10", {NULL}, 1670, "tcp"}, -{"netview-aix-10", {NULL}, 1670, "udp"}, -{"netview-aix-11", {NULL}, 1671, "tcp"}, -{"netview-aix-11", {NULL}, 1671, "udp"}, -{"netview-aix-12", {NULL}, 1672, "tcp"}, -{"netview-aix-12", {NULL}, 1672, "udp"}, -{"proshare-mc-1", {NULL}, 1673, "tcp"}, -{"proshare-mc-1", {NULL}, 1673, "udp"}, -{"proshare-mc-2", {NULL}, 1674, "tcp"}, -{"proshare-mc-2", {NULL}, 1674, "udp"}, -{"pdp", {NULL}, 1675, "tcp"}, -{"pdp", {NULL}, 1675, "udp"}, -{"netcomm1", {NULL}, 1676, "tcp"}, -{"netcomm2", {NULL}, 1676, "udp"}, -{"groupwise", {NULL}, 1677, "tcp"}, -{"groupwise", {NULL}, 1677, "udp"}, -{"prolink", {NULL}, 1678, "tcp"}, -{"prolink", {NULL}, 1678, "udp"}, -{"darcorp-lm", {NULL}, 1679, "tcp"}, -{"darcorp-lm", {NULL}, 1679, "udp"}, -{"microcom-sbp", {NULL}, 1680, "tcp"}, -{"microcom-sbp", {NULL}, 1680, "udp"}, -{"sd-elmd", {NULL}, 1681, "tcp"}, -{"sd-elmd", {NULL}, 1681, "udp"}, -{"lanyon-lantern", {NULL}, 1682, "tcp"}, -{"lanyon-lantern", {NULL}, 1682, "udp"}, -{"ncpm-hip", {NULL}, 1683, "tcp"}, -{"ncpm-hip", {NULL}, 1683, "udp"}, -{"snaresecure", {NULL}, 1684, "tcp"}, -{"snaresecure", {NULL}, 1684, "udp"}, -{"n2nremote", {NULL}, 1685, "tcp"}, -{"n2nremote", {NULL}, 1685, "udp"}, -{"cvmon", {NULL}, 1686, "tcp"}, -{"cvmon", {NULL}, 1686, "udp"}, -{"nsjtp-ctrl", {NULL}, 1687, "tcp"}, -{"nsjtp-ctrl", {NULL}, 1687, "udp"}, -{"nsjtp-data", {NULL}, 1688, "tcp"}, -{"nsjtp-data", {NULL}, 1688, "udp"}, -{"firefox", {NULL}, 1689, "tcp"}, -{"firefox", {NULL}, 1689, "udp"}, -{"ng-umds", {NULL}, 1690, "tcp"}, -{"ng-umds", {NULL}, 1690, "udp"}, -{"empire-empuma", {NULL}, 1691, "tcp"}, -{"empire-empuma", {NULL}, 1691, "udp"}, -{"sstsys-lm", {NULL}, 1692, "tcp"}, -{"sstsys-lm", {NULL}, 1692, "udp"}, -{"rrirtr", {NULL}, 1693, "tcp"}, -{"rrirtr", {NULL}, 1693, "udp"}, -{"rrimwm", {NULL}, 1694, "tcp"}, -{"rrimwm", {NULL}, 1694, "udp"}, -{"rrilwm", {NULL}, 1695, "tcp"}, -{"rrilwm", {NULL}, 1695, "udp"}, -{"rrifmm", {NULL}, 1696, "tcp"}, -{"rrifmm", {NULL}, 1696, "udp"}, -{"rrisat", {NULL}, 1697, "tcp"}, -{"rrisat", {NULL}, 1697, "udp"}, -{"rsvp-encap-1", {NULL}, 1698, "tcp"}, -{"rsvp-encap-1", {NULL}, 1698, "udp"}, -{"rsvp-encap-2", {NULL}, 1699, "tcp"}, -{"rsvp-encap-2", {NULL}, 1699, "udp"}, -{"mps-raft", {NULL}, 1700, "tcp"}, -{"mps-raft", {NULL}, 1700, "udp"}, -{"l2f", {NULL}, 1701, "tcp"}, -{"l2f", {NULL}, 1701, "udp"}, -{"l2tp", {NULL}, 1701, "tcp"}, -{"l2tp", {NULL}, 1701, "udp"}, -{"deskshare", {NULL}, 1702, "tcp"}, -{"deskshare", {NULL}, 1702, "udp"}, -{"hb-engine", {NULL}, 1703, "tcp"}, -{"hb-engine", {NULL}, 1703, "udp"}, -{"bcs-broker", {NULL}, 1704, "tcp"}, -{"bcs-broker", {NULL}, 1704, "udp"}, -{"slingshot", {NULL}, 1705, "tcp"}, -{"slingshot", {NULL}, 1705, "udp"}, -{"jetform", {NULL}, 1706, "tcp"}, -{"jetform", {NULL}, 1706, "udp"}, -{"vdmplay", {NULL}, 1707, "tcp"}, -{"vdmplay", {NULL}, 1707, "udp"}, -{"gat-lmd", {NULL}, 1708, "tcp"}, -{"gat-lmd", {NULL}, 1708, "udp"}, -{"centra", {NULL}, 1709, "tcp"}, -{"centra", {NULL}, 1709, "udp"}, -{"impera", {NULL}, 1710, "tcp"}, -{"impera", {NULL}, 1710, "udp"}, -{"pptconference", {NULL}, 1711, "tcp"}, -{"pptconference", {NULL}, 1711, "udp"}, -{"registrar", {NULL}, 1712, "tcp"}, -{"registrar", {NULL}, 1712, "udp"}, -{"conferencetalk", {NULL}, 1713, "tcp"}, -{"conferencetalk", {NULL}, 1713, "udp"}, -{"sesi-lm", {NULL}, 1714, "tcp"}, -{"sesi-lm", {NULL}, 1714, "udp"}, -{"houdini-lm", {NULL}, 1715, "tcp"}, -{"houdini-lm", {NULL}, 1715, "udp"}, -{"xmsg", {NULL}, 1716, "tcp"}, -{"xmsg", {NULL}, 1716, "udp"}, -{"fj-hdnet", {NULL}, 1717, "tcp"}, -{"fj-hdnet", {NULL}, 1717, "udp"}, -{"h323gatedisc", {NULL}, 1718, "tcp"}, -{"h323gatedisc", {NULL}, 1718, "udp"}, -{"h323gatestat", {NULL}, 1719, "tcp"}, -{"h323gatestat", {NULL}, 1719, "udp"}, -{"h323hostcall", {NULL}, 1720, "tcp"}, -{"h323hostcall", {NULL}, 1720, "udp"}, -{"caicci", {NULL}, 1721, "tcp"}, -{"caicci", {NULL}, 1721, "udp"}, -{"hks-lm", {NULL}, 1722, "tcp"}, -{"hks-lm", {NULL}, 1722, "udp"}, -{"pptp", {NULL}, 1723, "tcp"}, -{"pptp", {NULL}, 1723, "udp"}, -{"csbphonemaster", {NULL}, 1724, "tcp"}, -{"csbphonemaster", {NULL}, 1724, "udp"}, -{"iden-ralp", {NULL}, 1725, "tcp"}, -{"iden-ralp", {NULL}, 1725, "udp"}, -{"iberiagames", {NULL}, 1726, "tcp"}, -{"iberiagames", {NULL}, 1726, "udp"}, -{"winddx", {NULL}, 1727, "tcp"}, -{"winddx", {NULL}, 1727, "udp"}, -{"telindus", {NULL}, 1728, "tcp"}, -{"telindus", {NULL}, 1728, "udp"}, -{"citynl", {NULL}, 1729, "tcp"}, -{"citynl", {NULL}, 1729, "udp"}, -{"roketz", {NULL}, 1730, "tcp"}, -{"roketz", {NULL}, 1730, "udp"}, -{"msiccp", {NULL}, 1731, "tcp"}, -{"msiccp", {NULL}, 1731, "udp"}, -{"proxim", {NULL}, 1732, "tcp"}, -{"proxim", {NULL}, 1732, "udp"}, -{"siipat", {NULL}, 1733, "tcp"}, -{"siipat", {NULL}, 1733, "udp"}, -{"cambertx-lm", {NULL}, 1734, "tcp"}, -{"cambertx-lm", {NULL}, 1734, "udp"}, -{"privatechat", {NULL}, 1735, "tcp"}, -{"privatechat", {NULL}, 1735, "udp"}, -{"street-stream", {NULL}, 1736, "tcp"}, -{"street-stream", {NULL}, 1736, "udp"}, -{"ultimad", {NULL}, 1737, "tcp"}, -{"ultimad", {NULL}, 1737, "udp"}, -{"gamegen1", {NULL}, 1738, "tcp"}, -{"gamegen1", {NULL}, 1738, "udp"}, -{"webaccess", {NULL}, 1739, "tcp"}, -{"webaccess", {NULL}, 1739, "udp"}, -{"encore", {NULL}, 1740, "tcp"}, -{"encore", {NULL}, 1740, "udp"}, -{"cisco-net-mgmt", {NULL}, 1741, "tcp"}, -{"cisco-net-mgmt", {NULL}, 1741, "udp"}, -{"3Com-nsd", {NULL}, 1742, "tcp"}, -{"3Com-nsd", {NULL}, 1742, "udp"}, -{"cinegrfx-lm", {NULL}, 1743, "tcp"}, -{"cinegrfx-lm", {NULL}, 1743, "udp"}, -{"ncpm-ft", {NULL}, 1744, "tcp"}, -{"ncpm-ft", {NULL}, 1744, "udp"}, -{"remote-winsock", {NULL}, 1745, "tcp"}, -{"remote-winsock", {NULL}, 1745, "udp"}, -{"ftrapid-1", {NULL}, 1746, "tcp"}, -{"ftrapid-1", {NULL}, 1746, "udp"}, -{"ftrapid-2", {NULL}, 1747, "tcp"}, -{"ftrapid-2", {NULL}, 1747, "udp"}, -{"oracle-em1", {NULL}, 1748, "tcp"}, -{"oracle-em1", {NULL}, 1748, "udp"}, -{"aspen-services", {NULL}, 1749, "tcp"}, -{"aspen-services", {NULL}, 1749, "udp"}, -{"sslp", {NULL}, 1750, "tcp"}, -{"sslp", {NULL}, 1750, "udp"}, -{"swiftnet", {NULL}, 1751, "tcp"}, -{"swiftnet", {NULL}, 1751, "udp"}, -{"lofr-lm", {NULL}, 1752, "tcp"}, -{"lofr-lm", {NULL}, 1752, "udp"}, -{"oracle-em2", {NULL}, 1754, "tcp"}, -{"oracle-em2", {NULL}, 1754, "udp"}, -{"ms-streaming", {NULL}, 1755, "tcp"}, -{"ms-streaming", {NULL}, 1755, "udp"}, -{"capfast-lmd", {NULL}, 1756, "tcp"}, -{"capfast-lmd", {NULL}, 1756, "udp"}, -{"cnhrp", {NULL}, 1757, "tcp"}, -{"cnhrp", {NULL}, 1757, "udp"}, -{"tftp-mcast", {NULL}, 1758, "tcp"}, -{"tftp-mcast", {NULL}, 1758, "udp"}, -{"spss-lm", {NULL}, 1759, "tcp"}, -{"spss-lm", {NULL}, 1759, "udp"}, -{"www-ldap-gw", {NULL}, 1760, "tcp"}, -{"www-ldap-gw", {NULL}, 1760, "udp"}, -{"cft-0", {NULL}, 1761, "tcp"}, -{"cft-0", {NULL}, 1761, "udp"}, -{"cft-1", {NULL}, 1762, "tcp"}, -{"cft-1", {NULL}, 1762, "udp"}, -{"cft-2", {NULL}, 1763, "tcp"}, -{"cft-2", {NULL}, 1763, "udp"}, -{"cft-3", {NULL}, 1764, "tcp"}, -{"cft-3", {NULL}, 1764, "udp"}, -{"cft-4", {NULL}, 1765, "tcp"}, -{"cft-4", {NULL}, 1765, "udp"}, -{"cft-5", {NULL}, 1766, "tcp"}, -{"cft-5", {NULL}, 1766, "udp"}, -{"cft-6", {NULL}, 1767, "tcp"}, -{"cft-6", {NULL}, 1767, "udp"}, -{"cft-7", {NULL}, 1768, "tcp"}, -{"cft-7", {NULL}, 1768, "udp"}, -{"bmc-net-adm", {NULL}, 1769, "tcp"}, -{"bmc-net-adm", {NULL}, 1769, "udp"}, -{"bmc-net-svc", {NULL}, 1770, "tcp"}, -{"bmc-net-svc", {NULL}, 1770, "udp"}, -{"vaultbase", {NULL}, 1771, "tcp"}, -{"vaultbase", {NULL}, 1771, "udp"}, -{"essweb-gw", {NULL}, 1772, "tcp"}, -{"essweb-gw", {NULL}, 1772, "udp"}, -{"kmscontrol", {NULL}, 1773, "tcp"}, -{"kmscontrol", {NULL}, 1773, "udp"}, -{"global-dtserv", {NULL}, 1774, "tcp"}, -{"global-dtserv", {NULL}, 1774, "udp"}, -{"femis", {NULL}, 1776, "tcp"}, -{"femis", {NULL}, 1776, "udp"}, -{"powerguardian", {NULL}, 1777, "tcp"}, -{"powerguardian", {NULL}, 1777, "udp"}, -{"prodigy-intrnet", {NULL}, 1778, "tcp"}, -{"prodigy-intrnet", {NULL}, 1778, "udp"}, -{"pharmasoft", {NULL}, 1779, "tcp"}, -{"pharmasoft", {NULL}, 1779, "udp"}, -{"dpkeyserv", {NULL}, 1780, "tcp"}, -{"dpkeyserv", {NULL}, 1780, "udp"}, -{"answersoft-lm", {NULL}, 1781, "tcp"}, -{"answersoft-lm", {NULL}, 1781, "udp"}, -{"hp-hcip", {NULL}, 1782, "tcp"}, -{"hp-hcip", {NULL}, 1782, "udp"}, -{"finle-lm", {NULL}, 1784, "tcp"}, -{"finle-lm", {NULL}, 1784, "udp"}, -{"windlm", {NULL}, 1785, "tcp"}, -{"windlm", {NULL}, 1785, "udp"}, -{"funk-logger", {NULL}, 1786, "tcp"}, -{"funk-logger", {NULL}, 1786, "udp"}, -{"funk-license", {NULL}, 1787, "tcp"}, -{"funk-license", {NULL}, 1787, "udp"}, -{"psmond", {NULL}, 1788, "tcp"}, -{"psmond", {NULL}, 1788, "udp"}, -{"hello", {NULL}, 1789, "tcp"}, -{"hello", {NULL}, 1789, "udp"}, -{"nmsp", {NULL}, 1790, "tcp"}, -{"nmsp", {NULL}, 1790, "udp"}, -{"ea1", {NULL}, 1791, "tcp"}, -{"ea1", {NULL}, 1791, "udp"}, -{"ibm-dt-2", {NULL}, 1792, "tcp"}, -{"ibm-dt-2", {NULL}, 1792, "udp"}, -{"rsc-robot", {NULL}, 1793, "tcp"}, -{"rsc-robot", {NULL}, 1793, "udp"}, -{"cera-bcm", {NULL}, 1794, "tcp"}, -{"cera-bcm", {NULL}, 1794, "udp"}, -{"dpi-proxy", {NULL}, 1795, "tcp"}, -{"dpi-proxy", {NULL}, 1795, "udp"}, -{"vocaltec-admin", {NULL}, 1796, "tcp"}, -{"vocaltec-admin", {NULL}, 1796, "udp"}, -{"uma", {NULL}, 1797, "tcp"}, -{"uma", {NULL}, 1797, "udp"}, -{"etp", {NULL}, 1798, "tcp"}, -{"etp", {NULL}, 1798, "udp"}, -{"netrisk", {NULL}, 1799, "tcp"}, -{"netrisk", {NULL}, 1799, "udp"}, -{"ansys-lm", {NULL}, 1800, "tcp"}, -{"ansys-lm", {NULL}, 1800, "udp"}, -{"msmq", {NULL}, 1801, "tcp"}, -{"msmq", {NULL}, 1801, "udp"}, -{"concomp1", {NULL}, 1802, "tcp"}, -{"concomp1", {NULL}, 1802, "udp"}, -{"hp-hcip-gwy", {NULL}, 1803, "tcp"}, -{"hp-hcip-gwy", {NULL}, 1803, "udp"}, -{"enl", {NULL}, 1804, "tcp"}, -{"enl", {NULL}, 1804, "udp"}, -{"enl-name", {NULL}, 1805, "tcp"}, -{"enl-name", {NULL}, 1805, "udp"}, -{"musiconline", {NULL}, 1806, "tcp"}, -{"musiconline", {NULL}, 1806, "udp"}, -{"fhsp", {NULL}, 1807, "tcp"}, -{"fhsp", {NULL}, 1807, "udp"}, -{"oracle-vp2", {NULL}, 1808, "tcp"}, -{"oracle-vp2", {NULL}, 1808, "udp"}, -{"oracle-vp1", {NULL}, 1809, "tcp"}, -{"oracle-vp1", {NULL}, 1809, "udp"}, -{"jerand-lm", {NULL}, 1810, "tcp"}, -{"jerand-lm", {NULL}, 1810, "udp"}, -{"scientia-sdb", {NULL}, 1811, "tcp"}, -{"scientia-sdb", {NULL}, 1811, "udp"}, -{"radius", {NULL}, 1812, "tcp"}, -{"radius", {NULL}, 1812, "udp"}, -{"radius-acct", {NULL}, 1813, "tcp"}, -{"radius-acct", {NULL}, 1813, "udp"}, -{"tdp-suite", {NULL}, 1814, "tcp"}, -{"tdp-suite", {NULL}, 1814, "udp"}, -{"mmpft", {NULL}, 1815, "tcp"}, -{"mmpft", {NULL}, 1815, "udp"}, -{"harp", {NULL}, 1816, "tcp"}, -{"harp", {NULL}, 1816, "udp"}, -{"rkb-oscs", {NULL}, 1817, "tcp"}, -{"rkb-oscs", {NULL}, 1817, "udp"}, -{"etftp", {NULL}, 1818, "tcp"}, -{"etftp", {NULL}, 1818, "udp"}, -{"plato-lm", {NULL}, 1819, "tcp"}, -{"plato-lm", {NULL}, 1819, "udp"}, -{"mcagent", {NULL}, 1820, "tcp"}, -{"mcagent", {NULL}, 1820, "udp"}, -{"donnyworld", {NULL}, 1821, "tcp"}, -{"donnyworld", {NULL}, 1821, "udp"}, -{"es-elmd", {NULL}, 1822, "tcp"}, -{"es-elmd", {NULL}, 1822, "udp"}, -{"unisys-lm", {NULL}, 1823, "tcp"}, -{"unisys-lm", {NULL}, 1823, "udp"}, -{"metrics-pas", {NULL}, 1824, "tcp"}, -{"metrics-pas", {NULL}, 1824, "udp"}, -{"direcpc-video", {NULL}, 1825, "tcp"}, -{"direcpc-video", {NULL}, 1825, "udp"}, -{"ardt", {NULL}, 1826, "tcp"}, -{"ardt", {NULL}, 1826, "udp"}, -{"asi", {NULL}, 1827, "tcp"}, -{"asi", {NULL}, 1827, "udp"}, -{"itm-mcell-u", {NULL}, 1828, "tcp"}, -{"itm-mcell-u", {NULL}, 1828, "udp"}, -{"optika-emedia", {NULL}, 1829, "tcp"}, -{"optika-emedia", {NULL}, 1829, "udp"}, -{"net8-cman", {NULL}, 1830, "tcp"}, -{"net8-cman", {NULL}, 1830, "udp"}, -{"myrtle", {NULL}, 1831, "tcp"}, -{"myrtle", {NULL}, 1831, "udp"}, -{"tht-treasure", {NULL}, 1832, "tcp"}, -{"tht-treasure", {NULL}, 1832, "udp"}, -{"udpradio", {NULL}, 1833, "tcp"}, -{"udpradio", {NULL}, 1833, "udp"}, -{"ardusuni", {NULL}, 1834, "tcp"}, -{"ardusuni", {NULL}, 1834, "udp"}, -{"ardusmul", {NULL}, 1835, "tcp"}, -{"ardusmul", {NULL}, 1835, "udp"}, -{"ste-smsc", {NULL}, 1836, "tcp"}, -{"ste-smsc", {NULL}, 1836, "udp"}, -{"csoft1", {NULL}, 1837, "tcp"}, -{"csoft1", {NULL}, 1837, "udp"}, -{"talnet", {NULL}, 1838, "tcp"}, -{"talnet", {NULL}, 1838, "udp"}, -{"netopia-vo1", {NULL}, 1839, "tcp"}, -{"netopia-vo1", {NULL}, 1839, "udp"}, -{"netopia-vo2", {NULL}, 1840, "tcp"}, -{"netopia-vo2", {NULL}, 1840, "udp"}, -{"netopia-vo3", {NULL}, 1841, "tcp"}, -{"netopia-vo3", {NULL}, 1841, "udp"}, -{"netopia-vo4", {NULL}, 1842, "tcp"}, -{"netopia-vo4", {NULL}, 1842, "udp"}, -{"netopia-vo5", {NULL}, 1843, "tcp"}, -{"netopia-vo5", {NULL}, 1843, "udp"}, -{"direcpc-dll", {NULL}, 1844, "tcp"}, -{"direcpc-dll", {NULL}, 1844, "udp"}, -{"altalink", {NULL}, 1845, "tcp"}, -{"altalink", {NULL}, 1845, "udp"}, -{"tunstall-pnc", {NULL}, 1846, "tcp"}, -{"tunstall-pnc", {NULL}, 1846, "udp"}, -{"slp-notify", {NULL}, 1847, "tcp"}, -{"slp-notify", {NULL}, 1847, "udp"}, -{"fjdocdist", {NULL}, 1848, "tcp"}, -{"fjdocdist", {NULL}, 1848, "udp"}, -{"alpha-sms", {NULL}, 1849, "tcp"}, -{"alpha-sms", {NULL}, 1849, "udp"}, -{"gsi", {NULL}, 1850, "tcp"}, -{"gsi", {NULL}, 1850, "udp"}, -{"ctcd", {NULL}, 1851, "tcp"}, -{"ctcd", {NULL}, 1851, "udp"}, -{"virtual-time", {NULL}, 1852, "tcp"}, -{"virtual-time", {NULL}, 1852, "udp"}, -{"vids-avtp", {NULL}, 1853, "tcp"}, -{"vids-avtp", {NULL}, 1853, "udp"}, -{"buddy-draw", {NULL}, 1854, "tcp"}, -{"buddy-draw", {NULL}, 1854, "udp"}, -{"fiorano-rtrsvc", {NULL}, 1855, "tcp"}, -{"fiorano-rtrsvc", {NULL}, 1855, "udp"}, -{"fiorano-msgsvc", {NULL}, 1856, "tcp"}, -{"fiorano-msgsvc", {NULL}, 1856, "udp"}, -{"datacaptor", {NULL}, 1857, "tcp"}, -{"datacaptor", {NULL}, 1857, "udp"}, -{"privateark", {NULL}, 1858, "tcp"}, -{"privateark", {NULL}, 1858, "udp"}, -{"gammafetchsvr", {NULL}, 1859, "tcp"}, -{"gammafetchsvr", {NULL}, 1859, "udp"}, -{"sunscalar-svc", {NULL}, 1860, "tcp"}, -{"sunscalar-svc", {NULL}, 1860, "udp"}, -{"lecroy-vicp", {NULL}, 1861, "tcp"}, -{"lecroy-vicp", {NULL}, 1861, "udp"}, -{"mysql-cm-agent", {NULL}, 1862, "tcp"}, -{"mysql-cm-agent", {NULL}, 1862, "udp"}, -{"msnp", {NULL}, 1863, "tcp"}, -{"msnp", {NULL}, 1863, "udp"}, -{"paradym-31port", {NULL}, 1864, "tcp"}, -{"paradym-31port", {NULL}, 1864, "udp"}, -{"entp", {NULL}, 1865, "tcp"}, -{"entp", {NULL}, 1865, "udp"}, -{"swrmi", {NULL}, 1866, "tcp"}, -{"swrmi", {NULL}, 1866, "udp"}, -{"udrive", {NULL}, 1867, "tcp"}, -{"udrive", {NULL}, 1867, "udp"}, -{"viziblebrowser", {NULL}, 1868, "tcp"}, -{"viziblebrowser", {NULL}, 1868, "udp"}, -{"transact", {NULL}, 1869, "tcp"}, -{"transact", {NULL}, 1869, "udp"}, -{"sunscalar-dns", {NULL}, 1870, "tcp"}, -{"sunscalar-dns", {NULL}, 1870, "udp"}, -{"canocentral0", {NULL}, 1871, "tcp"}, -{"canocentral0", {NULL}, 1871, "udp"}, -{"canocentral1", {NULL}, 1872, "tcp"}, -{"canocentral1", {NULL}, 1872, "udp"}, -{"fjmpjps", {NULL}, 1873, "tcp"}, -{"fjmpjps", {NULL}, 1873, "udp"}, -{"fjswapsnp", {NULL}, 1874, "tcp"}, -{"fjswapsnp", {NULL}, 1874, "udp"}, -{"westell-stats", {NULL}, 1875, "tcp"}, -{"westell-stats", {NULL}, 1875, "udp"}, -{"ewcappsrv", {NULL}, 1876, "tcp"}, -{"ewcappsrv", {NULL}, 1876, "udp"}, -{"hp-webqosdb", {NULL}, 1877, "tcp"}, -{"hp-webqosdb", {NULL}, 1877, "udp"}, -{"drmsmc", {NULL}, 1878, "tcp"}, -{"drmsmc", {NULL}, 1878, "udp"}, -{"nettgain-nms", {NULL}, 1879, "tcp"}, -{"nettgain-nms", {NULL}, 1879, "udp"}, -{"vsat-control", {NULL}, 1880, "tcp"}, -{"vsat-control", {NULL}, 1880, "udp"}, -{"ibm-mqseries2", {NULL}, 1881, "tcp"}, -{"ibm-mqseries2", {NULL}, 1881, "udp"}, -{"ecsqdmn", {NULL}, 1882, "tcp"}, -{"ecsqdmn", {NULL}, 1882, "udp"}, -{"ibm-mqisdp", {NULL}, 1883, "tcp"}, -{"ibm-mqisdp", {NULL}, 1883, "udp"}, -{"idmaps", {NULL}, 1884, "tcp"}, -{"idmaps", {NULL}, 1884, "udp"}, -{"vrtstrapserver", {NULL}, 1885, "tcp"}, -{"vrtstrapserver", {NULL}, 1885, "udp"}, -{"leoip", {NULL}, 1886, "tcp"}, -{"leoip", {NULL}, 1886, "udp"}, -{"filex-lport", {NULL}, 1887, "tcp"}, -{"filex-lport", {NULL}, 1887, "udp"}, -{"ncconfig", {NULL}, 1888, "tcp"}, -{"ncconfig", {NULL}, 1888, "udp"}, -{"unify-adapter", {NULL}, 1889, "tcp"}, -{"unify-adapter", {NULL}, 1889, "udp"}, -{"wilkenlistener", {NULL}, 1890, "tcp"}, -{"wilkenlistener", {NULL}, 1890, "udp"}, -{"childkey-notif", {NULL}, 1891, "tcp"}, -{"childkey-notif", {NULL}, 1891, "udp"}, -{"childkey-ctrl", {NULL}, 1892, "tcp"}, -{"childkey-ctrl", {NULL}, 1892, "udp"}, -{"elad", {NULL}, 1893, "tcp"}, -{"elad", {NULL}, 1893, "udp"}, -{"o2server-port", {NULL}, 1894, "tcp"}, -{"o2server-port", {NULL}, 1894, "udp"}, -{"b-novative-ls", {NULL}, 1896, "tcp"}, -{"b-novative-ls", {NULL}, 1896, "udp"}, -{"metaagent", {NULL}, 1897, "tcp"}, -{"metaagent", {NULL}, 1897, "udp"}, -{"cymtec-port", {NULL}, 1898, "tcp"}, -{"cymtec-port", {NULL}, 1898, "udp"}, -{"mc2studios", {NULL}, 1899, "tcp"}, -{"mc2studios", {NULL}, 1899, "udp"}, -{"ssdp", {NULL}, 1900, "tcp"}, -{"ssdp", {NULL}, 1900, "udp"}, -{"fjicl-tep-a", {NULL}, 1901, "tcp"}, -{"fjicl-tep-a", {NULL}, 1901, "udp"}, -{"fjicl-tep-b", {NULL}, 1902, "tcp"}, -{"fjicl-tep-b", {NULL}, 1902, "udp"}, -{"linkname", {NULL}, 1903, "tcp"}, -{"linkname", {NULL}, 1903, "udp"}, -{"fjicl-tep-c", {NULL}, 1904, "tcp"}, -{"fjicl-tep-c", {NULL}, 1904, "udp"}, -{"sugp", {NULL}, 1905, "tcp"}, -{"sugp", {NULL}, 1905, "udp"}, -{"tpmd", {NULL}, 1906, "tcp"}, -{"tpmd", {NULL}, 1906, "udp"}, -{"intrastar", {NULL}, 1907, "tcp"}, -{"intrastar", {NULL}, 1907, "udp"}, -{"dawn", {NULL}, 1908, "tcp"}, -{"dawn", {NULL}, 1908, "udp"}, -{"global-wlink", {NULL}, 1909, "tcp"}, -{"global-wlink", {NULL}, 1909, "udp"}, -{"ultrabac", {NULL}, 1910, "tcp"}, -{"ultrabac", {NULL}, 1910, "udp"}, -{"mtp", {NULL}, 1911, "tcp"}, -{"mtp", {NULL}, 1911, "udp"}, -{"rhp-iibp", {NULL}, 1912, "tcp"}, -{"rhp-iibp", {NULL}, 1912, "udp"}, -{"armadp", {NULL}, 1913, "tcp"}, -{"armadp", {NULL}, 1913, "udp"}, -{"elm-momentum", {NULL}, 1914, "tcp"}, -{"elm-momentum", {NULL}, 1914, "udp"}, -{"facelink", {NULL}, 1915, "tcp"}, -{"facelink", {NULL}, 1915, "udp"}, -{"persona", {NULL}, 1916, "tcp"}, -{"persona", {NULL}, 1916, "udp"}, -{"noagent", {NULL}, 1917, "tcp"}, -{"noagent", {NULL}, 1917, "udp"}, -{"can-nds", {NULL}, 1918, "tcp"}, -{"can-nds", {NULL}, 1918, "udp"}, -{"can-dch", {NULL}, 1919, "tcp"}, -{"can-dch", {NULL}, 1919, "udp"}, -{"can-ferret", {NULL}, 1920, "tcp"}, -{"can-ferret", {NULL}, 1920, "udp"}, -{"noadmin", {NULL}, 1921, "tcp"}, -{"noadmin", {NULL}, 1921, "udp"}, -{"tapestry", {NULL}, 1922, "tcp"}, -{"tapestry", {NULL}, 1922, "udp"}, -{"spice", {NULL}, 1923, "tcp"}, -{"spice", {NULL}, 1923, "udp"}, -{"xiip", {NULL}, 1924, "tcp"}, -{"xiip", {NULL}, 1924, "udp"}, -{"discovery-port", {NULL}, 1925, "tcp"}, -{"discovery-port", {NULL}, 1925, "udp"}, -{"egs", {NULL}, 1926, "tcp"}, -{"egs", {NULL}, 1926, "udp"}, -{"videte-cipc", {NULL}, 1927, "tcp"}, -{"videte-cipc", {NULL}, 1927, "udp"}, -{"emsd-port", {NULL}, 1928, "tcp"}, -{"emsd-port", {NULL}, 1928, "udp"}, -{"bandwiz-system", {NULL}, 1929, "tcp"}, -{"bandwiz-system", {NULL}, 1929, "udp"}, -{"driveappserver", {NULL}, 1930, "tcp"}, -{"driveappserver", {NULL}, 1930, "udp"}, -{"amdsched", {NULL}, 1931, "tcp"}, -{"amdsched", {NULL}, 1931, "udp"}, -{"ctt-broker", {NULL}, 1932, "tcp"}, -{"ctt-broker", {NULL}, 1932, "udp"}, -{"xmapi", {NULL}, 1933, "tcp"}, -{"xmapi", {NULL}, 1933, "udp"}, -{"xaapi", {NULL}, 1934, "tcp"}, -{"xaapi", {NULL}, 1934, "udp"}, -{"macromedia-fcs", {NULL}, 1935, "tcp"}, -{"macromedia-fcs", {NULL}, 1935, "udp"}, -{"jetcmeserver", {NULL}, 1936, "tcp"}, -{"jetcmeserver", {NULL}, 1936, "udp"}, -{"jwserver", {NULL}, 1937, "tcp"}, -{"jwserver", {NULL}, 1937, "udp"}, -{"jwclient", {NULL}, 1938, "tcp"}, -{"jwclient", {NULL}, 1938, "udp"}, -{"jvserver", {NULL}, 1939, "tcp"}, -{"jvserver", {NULL}, 1939, "udp"}, -{"jvclient", {NULL}, 1940, "tcp"}, -{"jvclient", {NULL}, 1940, "udp"}, -{"dic-aida", {NULL}, 1941, "tcp"}, -{"dic-aida", {NULL}, 1941, "udp"}, -{"res", {NULL}, 1942, "tcp"}, -{"res", {NULL}, 1942, "udp"}, -{"beeyond-media", {NULL}, 1943, "tcp"}, -{"beeyond-media", {NULL}, 1943, "udp"}, -{"close-combat", {NULL}, 1944, "tcp"}, -{"close-combat", {NULL}, 1944, "udp"}, -{"dialogic-elmd", {NULL}, 1945, "tcp"}, -{"dialogic-elmd", {NULL}, 1945, "udp"}, -{"tekpls", {NULL}, 1946, "tcp"}, -{"tekpls", {NULL}, 1946, "udp"}, -{"sentinelsrm", {NULL}, 1947, "tcp"}, -{"sentinelsrm", {NULL}, 1947, "udp"}, -{"eye2eye", {NULL}, 1948, "tcp"}, -{"eye2eye", {NULL}, 1948, "udp"}, -{"ismaeasdaqlive", {NULL}, 1949, "tcp"}, -{"ismaeasdaqlive", {NULL}, 1949, "udp"}, -{"ismaeasdaqtest", {NULL}, 1950, "tcp"}, -{"ismaeasdaqtest", {NULL}, 1950, "udp"}, -{"bcs-lmserver", {NULL}, 1951, "tcp"}, -{"bcs-lmserver", {NULL}, 1951, "udp"}, -{"mpnjsc", {NULL}, 1952, "tcp"}, -{"mpnjsc", {NULL}, 1952, "udp"}, -{"rapidbase", {NULL}, 1953, "tcp"}, -{"rapidbase", {NULL}, 1953, "udp"}, -{"abr-api", {NULL}, 1954, "tcp"}, -{"abr-api", {NULL}, 1954, "udp"}, -{"abr-secure", {NULL}, 1955, "tcp"}, -{"abr-secure", {NULL}, 1955, "udp"}, -{"vrtl-vmf-ds", {NULL}, 1956, "tcp"}, -{"vrtl-vmf-ds", {NULL}, 1956, "udp"}, -{"unix-status", {NULL}, 1957, "tcp"}, -{"unix-status", {NULL}, 1957, "udp"}, -{"dxadmind", {NULL}, 1958, "tcp"}, -{"dxadmind", {NULL}, 1958, "udp"}, -{"simp-all", {NULL}, 1959, "tcp"}, -{"simp-all", {NULL}, 1959, "udp"}, -{"nasmanager", {NULL}, 1960, "tcp"}, -{"nasmanager", {NULL}, 1960, "udp"}, -{"bts-appserver", {NULL}, 1961, "tcp"}, -{"bts-appserver", {NULL}, 1961, "udp"}, -{"biap-mp", {NULL}, 1962, "tcp"}, -{"biap-mp", {NULL}, 1962, "udp"}, -{"webmachine", {NULL}, 1963, "tcp"}, -{"webmachine", {NULL}, 1963, "udp"}, -{"solid-e-engine", {NULL}, 1964, "tcp"}, -{"solid-e-engine", {NULL}, 1964, "udp"}, -{"tivoli-npm", {NULL}, 1965, "tcp"}, -{"tivoli-npm", {NULL}, 1965, "udp"}, -{"slush", {NULL}, 1966, "tcp"}, -{"slush", {NULL}, 1966, "udp"}, -{"sns-quote", {NULL}, 1967, "tcp"}, -{"sns-quote", {NULL}, 1967, "udp"}, -{"lipsinc", {NULL}, 1968, "tcp"}, -{"lipsinc", {NULL}, 1968, "udp"}, -{"lipsinc1", {NULL}, 1969, "tcp"}, -{"lipsinc1", {NULL}, 1969, "udp"}, -{"netop-rc", {NULL}, 1970, "tcp"}, -{"netop-rc", {NULL}, 1970, "udp"}, -{"netop-school", {NULL}, 1971, "tcp"}, -{"netop-school", {NULL}, 1971, "udp"}, -{"intersys-cache", {NULL}, 1972, "tcp"}, -{"intersys-cache", {NULL}, 1972, "udp"}, -{"dlsrap", {NULL}, 1973, "tcp"}, -{"dlsrap", {NULL}, 1973, "udp"}, -{"drp", {NULL}, 1974, "tcp"}, -{"drp", {NULL}, 1974, "udp"}, -{"tcoflashagent", {NULL}, 1975, "tcp"}, -{"tcoflashagent", {NULL}, 1975, "udp"}, -{"tcoregagent", {NULL}, 1976, "tcp"}, -{"tcoregagent", {NULL}, 1976, "udp"}, -{"tcoaddressbook", {NULL}, 1977, "tcp"}, -{"tcoaddressbook", {NULL}, 1977, "udp"}, -{"unisql", {NULL}, 1978, "tcp"}, -{"unisql", {NULL}, 1978, "udp"}, -{"unisql-java", {NULL}, 1979, "tcp"}, -{"unisql-java", {NULL}, 1979, "udp"}, -{"pearldoc-xact", {NULL}, 1980, "tcp"}, -{"pearldoc-xact", {NULL}, 1980, "udp"}, -{"p2pq", {NULL}, 1981, "tcp"}, -{"p2pq", {NULL}, 1981, "udp"}, -{"estamp", {NULL}, 1982, "tcp"}, -{"estamp", {NULL}, 1982, "udp"}, -{"lhtp", {NULL}, 1983, "tcp"}, -{"lhtp", {NULL}, 1983, "udp"}, -{"bb", {NULL}, 1984, "tcp"}, -{"bb", {NULL}, 1984, "udp"}, -{"hsrp", {NULL}, 1985, "tcp"}, -{"hsrp", {NULL}, 1985, "udp"}, -{"licensedaemon", {NULL}, 1986, "tcp"}, -{"licensedaemon", {NULL}, 1986, "udp"}, -{"tr-rsrb-p1", {NULL}, 1987, "tcp"}, -{"tr-rsrb-p1", {NULL}, 1987, "udp"}, -{"tr-rsrb-p2", {NULL}, 1988, "tcp"}, -{"tr-rsrb-p2", {NULL}, 1988, "udp"}, -{"tr-rsrb-p3", {NULL}, 1989, "tcp"}, -{"tr-rsrb-p3", {NULL}, 1989, "udp"}, -{"mshnet", {NULL}, 1989, "tcp"}, -{"mshnet", {NULL}, 1989, "udp"}, -{"stun-p1", {NULL}, 1990, "tcp"}, -{"stun-p1", {NULL}, 1990, "udp"}, -{"stun-p2", {NULL}, 1991, "tcp"}, -{"stun-p2", {NULL}, 1991, "udp"}, -{"stun-p3", {NULL}, 1992, "tcp"}, -{"stun-p3", {NULL}, 1992, "udp"}, -{"ipsendmsg", {NULL}, 1992, "tcp"}, -{"ipsendmsg", {NULL}, 1992, "udp"}, -{"snmp-tcp-port", {NULL}, 1993, "tcp"}, -{"snmp-tcp-port", {NULL}, 1993, "udp"}, -{"stun-port", {NULL}, 1994, "tcp"}, -{"stun-port", {NULL}, 1994, "udp"}, -{"perf-port", {NULL}, 1995, "tcp"}, -{"perf-port", {NULL}, 1995, "udp"}, -{"tr-rsrb-port", {NULL}, 1996, "tcp"}, -{"tr-rsrb-port", {NULL}, 1996, "udp"}, -{"gdp-port", {NULL}, 1997, "tcp"}, -{"gdp-port", {NULL}, 1997, "udp"}, -{"x25-svc-port", {NULL}, 1998, "tcp"}, -{"x25-svc-port", {NULL}, 1998, "udp"}, -{"tcp-id-port", {NULL}, 1999, "tcp"}, -{"tcp-id-port", {NULL}, 1999, "udp"}, -{"cisco-sccp", {NULL}, 2000, "tcp"}, -{"cisco-sccp", {NULL}, 2000, "udp"}, -{"dc", {NULL}, 2001, "tcp"}, -{"wizard", {NULL}, 2001, "udp"}, -{"globe", {NULL}, 2002, "tcp"}, -{"globe", {NULL}, 2002, "udp"}, -{"brutus", {NULL}, 2003, "tcp"}, -{"brutus", {NULL}, 2003, "udp"}, -{"mailbox", {NULL}, 2004, "tcp"}, -{"emce", {NULL}, 2004, "udp"}, -{"berknet", {NULL}, 2005, "tcp"}, -{"oracle", {NULL}, 2005, "udp"}, -{"invokator", {NULL}, 2006, "tcp"}, -{"raid-cd", {NULL}, 2006, "udp"}, -{"dectalk", {NULL}, 2007, "tcp"}, -{"raid-am", {NULL}, 2007, "udp"}, -{"conf", {NULL}, 2008, "tcp"}, -{"terminaldb", {NULL}, 2008, "udp"}, -{"news", {NULL}, 2009, "tcp"}, -{"whosockami", {NULL}, 2009, "udp"}, -{"search", {NULL}, 2010, "tcp"}, -{"pipe_server", {NULL}, 2010, "udp"}, -{"raid-cc", {NULL}, 2011, "tcp"}, -{"servserv", {NULL}, 2011, "udp"}, -{"ttyinfo", {NULL}, 2012, "tcp"}, -{"raid-ac", {NULL}, 2012, "udp"}, -{"raid-am", {NULL}, 2013, "tcp"}, -{"raid-cd", {NULL}, 2013, "udp"}, -{"troff", {NULL}, 2014, "tcp"}, -{"raid-sf", {NULL}, 2014, "udp"}, -{"cypress", {NULL}, 2015, "tcp"}, -{"raid-cs", {NULL}, 2015, "udp"}, -{"bootserver", {NULL}, 2016, "tcp"}, -{"bootserver", {NULL}, 2016, "udp"}, -{"cypress-stat", {NULL}, 2017, "tcp"}, -{"bootclient", {NULL}, 2017, "udp"}, -{"terminaldb", {NULL}, 2018, "tcp"}, -{"rellpack", {NULL}, 2018, "udp"}, -{"whosockami", {NULL}, 2019, "tcp"}, -{"about", {NULL}, 2019, "udp"}, -{"xinupageserver", {NULL}, 2020, "tcp"}, -{"xinupageserver", {NULL}, 2020, "udp"}, -{"servexec", {NULL}, 2021, "tcp"}, -{"xinuexpansion1", {NULL}, 2021, "udp"}, -{"down", {NULL}, 2022, "tcp"}, -{"xinuexpansion2", {NULL}, 2022, "udp"}, -{"xinuexpansion3", {NULL}, 2023, "tcp"}, -{"xinuexpansion3", {NULL}, 2023, "udp"}, -{"xinuexpansion4", {NULL}, 2024, "tcp"}, -{"xinuexpansion4", {NULL}, 2024, "udp"}, -{"ellpack", {NULL}, 2025, "tcp"}, -{"xribs", {NULL}, 2025, "udp"}, -{"scrabble", {NULL}, 2026, "tcp"}, -{"scrabble", {NULL}, 2026, "udp"}, -{"shadowserver", {NULL}, 2027, "tcp"}, -{"shadowserver", {NULL}, 2027, "udp"}, -{"submitserver", {NULL}, 2028, "tcp"}, -{"submitserver", {NULL}, 2028, "udp"}, -{"hsrpv6", {NULL}, 2029, "tcp"}, -{"hsrpv6", {NULL}, 2029, "udp"}, -{"device2", {NULL}, 2030, "tcp"}, -{"device2", {NULL}, 2030, "udp"}, -{"mobrien-chat", {NULL}, 2031, "tcp"}, -{"mobrien-chat", {NULL}, 2031, "udp"}, -{"blackboard", {NULL}, 2032, "tcp"}, -{"blackboard", {NULL}, 2032, "udp"}, -{"glogger", {NULL}, 2033, "tcp"}, -{"glogger", {NULL}, 2033, "udp"}, -{"scoremgr", {NULL}, 2034, "tcp"}, -{"scoremgr", {NULL}, 2034, "udp"}, -{"imsldoc", {NULL}, 2035, "tcp"}, -{"imsldoc", {NULL}, 2035, "udp"}, -{"e-dpnet", {NULL}, 2036, "tcp"}, -{"e-dpnet", {NULL}, 2036, "udp"}, -{"applus", {NULL}, 2037, "tcp"}, -{"applus", {NULL}, 2037, "udp"}, -{"objectmanager", {NULL}, 2038, "tcp"}, -{"objectmanager", {NULL}, 2038, "udp"}, -{"prizma", {NULL}, 2039, "tcp"}, -{"prizma", {NULL}, 2039, "udp"}, -{"lam", {NULL}, 2040, "tcp"}, -{"lam", {NULL}, 2040, "udp"}, -{"interbase", {NULL}, 2041, "tcp"}, -{"interbase", {NULL}, 2041, "udp"}, -{"isis", {NULL}, 2042, "tcp"}, -{"isis", {NULL}, 2042, "udp"}, -{"isis-bcast", {NULL}, 2043, "tcp"}, -{"isis-bcast", {NULL}, 2043, "udp"}, -{"rimsl", {NULL}, 2044, "tcp"}, -{"rimsl", {NULL}, 2044, "udp"}, -{"cdfunc", {NULL}, 2045, "tcp"}, -{"cdfunc", {NULL}, 2045, "udp"}, -{"sdfunc", {NULL}, 2046, "tcp"}, -{"sdfunc", {NULL}, 2046, "udp"}, -{"dls", {NULL}, 2047, "tcp"}, -{"dls", {NULL}, 2047, "udp"}, -{"dls-monitor", {NULL}, 2048, "tcp"}, -{"dls-monitor", {NULL}, 2048, "udp"}, -{"shilp", {NULL}, 2049, "tcp"}, -{"shilp", {NULL}, 2049, "udp"}, -{"nfs", {NULL}, 2049, "tcp"}, -{"nfs", {NULL}, 2049, "udp"}, -{"nfs", {NULL}, 2049, "sctp"}, -{"av-emb-config", {NULL}, 2050, "tcp"}, -{"av-emb-config", {NULL}, 2050, "udp"}, -{"epnsdp", {NULL}, 2051, "tcp"}, -{"epnsdp", {NULL}, 2051, "udp"}, -{"clearvisn", {NULL}, 2052, "tcp"}, -{"clearvisn", {NULL}, 2052, "udp"}, -{"lot105-ds-upd", {NULL}, 2053, "tcp"}, -{"lot105-ds-upd", {NULL}, 2053, "udp"}, -{"weblogin", {NULL}, 2054, "tcp"}, -{"weblogin", {NULL}, 2054, "udp"}, -{"iop", {NULL}, 2055, "tcp"}, -{"iop", {NULL}, 2055, "udp"}, -{"omnisky", {NULL}, 2056, "tcp"}, -{"omnisky", {NULL}, 2056, "udp"}, -{"rich-cp", {NULL}, 2057, "tcp"}, -{"rich-cp", {NULL}, 2057, "udp"}, -{"newwavesearch", {NULL}, 2058, "tcp"}, -{"newwavesearch", {NULL}, 2058, "udp"}, -{"bmc-messaging", {NULL}, 2059, "tcp"}, -{"bmc-messaging", {NULL}, 2059, "udp"}, -{"teleniumdaemon", {NULL}, 2060, "tcp"}, -{"teleniumdaemon", {NULL}, 2060, "udp"}, -{"netmount", {NULL}, 2061, "tcp"}, -{"netmount", {NULL}, 2061, "udp"}, -{"icg-swp", {NULL}, 2062, "tcp"}, -{"icg-swp", {NULL}, 2062, "udp"}, -{"icg-bridge", {NULL}, 2063, "tcp"}, -{"icg-bridge", {NULL}, 2063, "udp"}, -{"icg-iprelay", {NULL}, 2064, "tcp"}, -{"icg-iprelay", {NULL}, 2064, "udp"}, -{"dlsrpn", {NULL}, 2065, "tcp"}, -{"dlsrpn", {NULL}, 2065, "udp"}, -{"aura", {NULL}, 2066, "tcp"}, -{"aura", {NULL}, 2066, "udp"}, -{"dlswpn", {NULL}, 2067, "tcp"}, -{"dlswpn", {NULL}, 2067, "udp"}, -{"avauthsrvprtcl", {NULL}, 2068, "tcp"}, -{"avauthsrvprtcl", {NULL}, 2068, "udp"}, -{"event-port", {NULL}, 2069, "tcp"}, -{"event-port", {NULL}, 2069, "udp"}, -{"ah-esp-encap", {NULL}, 2070, "tcp"}, -{"ah-esp-encap", {NULL}, 2070, "udp"}, -{"acp-port", {NULL}, 2071, "tcp"}, -{"acp-port", {NULL}, 2071, "udp"}, -{"msync", {NULL}, 2072, "tcp"}, -{"msync", {NULL}, 2072, "udp"}, -{"gxs-data-port", {NULL}, 2073, "tcp"}, -{"gxs-data-port", {NULL}, 2073, "udp"}, -{"vrtl-vmf-sa", {NULL}, 2074, "tcp"}, -{"vrtl-vmf-sa", {NULL}, 2074, "udp"}, -{"newlixengine", {NULL}, 2075, "tcp"}, -{"newlixengine", {NULL}, 2075, "udp"}, -{"newlixconfig", {NULL}, 2076, "tcp"}, -{"newlixconfig", {NULL}, 2076, "udp"}, -{"tsrmagt", {NULL}, 2077, "tcp"}, -{"tsrmagt", {NULL}, 2077, "udp"}, -{"tpcsrvr", {NULL}, 2078, "tcp"}, -{"tpcsrvr", {NULL}, 2078, "udp"}, -{"idware-router", {NULL}, 2079, "tcp"}, -{"idware-router", {NULL}, 2079, "udp"}, -{"autodesk-nlm", {NULL}, 2080, "tcp"}, -{"autodesk-nlm", {NULL}, 2080, "udp"}, -{"kme-trap-port", {NULL}, 2081, "tcp"}, -{"kme-trap-port", {NULL}, 2081, "udp"}, -{"infowave", {NULL}, 2082, "tcp"}, -{"infowave", {NULL}, 2082, "udp"}, -{"radsec", {NULL}, 2083, "tcp"}, -{"radsec", {NULL}, 2083, "udp"}, -{"sunclustergeo", {NULL}, 2084, "tcp"}, -{"sunclustergeo", {NULL}, 2084, "udp"}, -{"ada-cip", {NULL}, 2085, "tcp"}, -{"ada-cip", {NULL}, 2085, "udp"}, -{"gnunet", {NULL}, 2086, "tcp"}, -{"gnunet", {NULL}, 2086, "udp"}, -{"eli", {NULL}, 2087, "tcp"}, -{"eli", {NULL}, 2087, "udp"}, -{"ip-blf", {NULL}, 2088, "tcp"}, -{"ip-blf", {NULL}, 2088, "udp"}, -{"sep", {NULL}, 2089, "tcp"}, -{"sep", {NULL}, 2089, "udp"}, -{"lrp", {NULL}, 2090, "tcp"}, -{"lrp", {NULL}, 2090, "udp"}, -{"prp", {NULL}, 2091, "tcp"}, -{"prp", {NULL}, 2091, "udp"}, -{"descent3", {NULL}, 2092, "tcp"}, -{"descent3", {NULL}, 2092, "udp"}, -{"nbx-cc", {NULL}, 2093, "tcp"}, -{"nbx-cc", {NULL}, 2093, "udp"}, -{"nbx-au", {NULL}, 2094, "tcp"}, -{"nbx-au", {NULL}, 2094, "udp"}, -{"nbx-ser", {NULL}, 2095, "tcp"}, -{"nbx-ser", {NULL}, 2095, "udp"}, -{"nbx-dir", {NULL}, 2096, "tcp"}, -{"nbx-dir", {NULL}, 2096, "udp"}, -{"jetformpreview", {NULL}, 2097, "tcp"}, -{"jetformpreview", {NULL}, 2097, "udp"}, -{"dialog-port", {NULL}, 2098, "tcp"}, -{"dialog-port", {NULL}, 2098, "udp"}, -{"h2250-annex-g", {NULL}, 2099, "tcp"}, -{"h2250-annex-g", {NULL}, 2099, "udp"}, -{"amiganetfs", {NULL}, 2100, "tcp"}, -{"amiganetfs", {NULL}, 2100, "udp"}, -{"rtcm-sc104", {NULL}, 2101, "tcp"}, -{"rtcm-sc104", {NULL}, 2101, "udp"}, -{"zephyr-srv", {NULL}, 2102, "tcp"}, -{"zephyr-srv", {NULL}, 2102, "udp"}, -{"zephyr-clt", {NULL}, 2103, "tcp"}, -{"zephyr-clt", {NULL}, 2103, "udp"}, -{"zephyr-hm", {NULL}, 2104, "tcp"}, -{"zephyr-hm", {NULL}, 2104, "udp"}, -{"minipay", {NULL}, 2105, "tcp"}, -{"minipay", {NULL}, 2105, "udp"}, -{"mzap", {NULL}, 2106, "tcp"}, -{"mzap", {NULL}, 2106, "udp"}, -{"bintec-admin", {NULL}, 2107, "tcp"}, -{"bintec-admin", {NULL}, 2107, "udp"}, -{"comcam", {NULL}, 2108, "tcp"}, -{"comcam", {NULL}, 2108, "udp"}, -{"ergolight", {NULL}, 2109, "tcp"}, -{"ergolight", {NULL}, 2109, "udp"}, -{"umsp", {NULL}, 2110, "tcp"}, -{"umsp", {NULL}, 2110, "udp"}, -{"dsatp", {NULL}, 2111, "tcp"}, -{"dsatp", {NULL}, 2111, "udp"}, -{"idonix-metanet", {NULL}, 2112, "tcp"}, -{"idonix-metanet", {NULL}, 2112, "udp"}, -{"hsl-storm", {NULL}, 2113, "tcp"}, -{"hsl-storm", {NULL}, 2113, "udp"}, -{"newheights", {NULL}, 2114, "tcp"}, -{"newheights", {NULL}, 2114, "udp"}, -{"kdm", {NULL}, 2115, "tcp"}, -{"kdm", {NULL}, 2115, "udp"}, -{"ccowcmr", {NULL}, 2116, "tcp"}, -{"ccowcmr", {NULL}, 2116, "udp"}, -{"mentaclient", {NULL}, 2117, "tcp"}, -{"mentaclient", {NULL}, 2117, "udp"}, -{"mentaserver", {NULL}, 2118, "tcp"}, -{"mentaserver", {NULL}, 2118, "udp"}, -{"gsigatekeeper", {NULL}, 2119, "tcp"}, -{"gsigatekeeper", {NULL}, 2119, "udp"}, -{"qencp", {NULL}, 2120, "tcp"}, -{"qencp", {NULL}, 2120, "udp"}, -{"scientia-ssdb", {NULL}, 2121, "tcp"}, -{"scientia-ssdb", {NULL}, 2121, "udp"}, -{"caupc-remote", {NULL}, 2122, "tcp"}, -{"caupc-remote", {NULL}, 2122, "udp"}, -{"gtp-control", {NULL}, 2123, "tcp"}, -{"gtp-control", {NULL}, 2123, "udp"}, -{"elatelink", {NULL}, 2124, "tcp"}, -{"elatelink", {NULL}, 2124, "udp"}, -{"lockstep", {NULL}, 2125, "tcp"}, -{"lockstep", {NULL}, 2125, "udp"}, -{"pktcable-cops", {NULL}, 2126, "tcp"}, -{"pktcable-cops", {NULL}, 2126, "udp"}, -{"index-pc-wb", {NULL}, 2127, "tcp"}, -{"index-pc-wb", {NULL}, 2127, "udp"}, -{"net-steward", {NULL}, 2128, "tcp"}, -{"net-steward", {NULL}, 2128, "udp"}, -{"cs-live", {NULL}, 2129, "tcp"}, -{"cs-live", {NULL}, 2129, "udp"}, -{"xds", {NULL}, 2130, "tcp"}, -{"xds", {NULL}, 2130, "udp"}, -{"avantageb2b", {NULL}, 2131, "tcp"}, -{"avantageb2b", {NULL}, 2131, "udp"}, -{"solera-epmap", {NULL}, 2132, "tcp"}, -{"solera-epmap", {NULL}, 2132, "udp"}, -{"zymed-zpp", {NULL}, 2133, "tcp"}, -{"zymed-zpp", {NULL}, 2133, "udp"}, -{"avenue", {NULL}, 2134, "tcp"}, -{"avenue", {NULL}, 2134, "udp"}, -{"gris", {NULL}, 2135, "tcp"}, -{"gris", {NULL}, 2135, "udp"}, -{"appworxsrv", {NULL}, 2136, "tcp"}, -{"appworxsrv", {NULL}, 2136, "udp"}, -{"connect", {NULL}, 2137, "tcp"}, -{"connect", {NULL}, 2137, "udp"}, -{"unbind-cluster", {NULL}, 2138, "tcp"}, -{"unbind-cluster", {NULL}, 2138, "udp"}, -{"ias-auth", {NULL}, 2139, "tcp"}, -{"ias-auth", {NULL}, 2139, "udp"}, -{"ias-reg", {NULL}, 2140, "tcp"}, -{"ias-reg", {NULL}, 2140, "udp"}, -{"ias-admind", {NULL}, 2141, "tcp"}, -{"ias-admind", {NULL}, 2141, "udp"}, -{"tdmoip", {NULL}, 2142, "tcp"}, -{"tdmoip", {NULL}, 2142, "udp"}, -{"lv-jc", {NULL}, 2143, "tcp"}, -{"lv-jc", {NULL}, 2143, "udp"}, -{"lv-ffx", {NULL}, 2144, "tcp"}, -{"lv-ffx", {NULL}, 2144, "udp"}, -{"lv-pici", {NULL}, 2145, "tcp"}, -{"lv-pici", {NULL}, 2145, "udp"}, -{"lv-not", {NULL}, 2146, "tcp"}, -{"lv-not", {NULL}, 2146, "udp"}, -{"lv-auth", {NULL}, 2147, "tcp"}, -{"lv-auth", {NULL}, 2147, "udp"}, -{"veritas-ucl", {NULL}, 2148, "tcp"}, -{"veritas-ucl", {NULL}, 2148, "udp"}, -{"acptsys", {NULL}, 2149, "tcp"}, -{"acptsys", {NULL}, 2149, "udp"}, -{"dynamic3d", {NULL}, 2150, "tcp"}, -{"dynamic3d", {NULL}, 2150, "udp"}, -{"docent", {NULL}, 2151, "tcp"}, -{"docent", {NULL}, 2151, "udp"}, -{"gtp-user", {NULL}, 2152, "tcp"}, -{"gtp-user", {NULL}, 2152, "udp"}, -{"ctlptc", {NULL}, 2153, "tcp"}, -{"ctlptc", {NULL}, 2153, "udp"}, -{"stdptc", {NULL}, 2154, "tcp"}, -{"stdptc", {NULL}, 2154, "udp"}, -{"brdptc", {NULL}, 2155, "tcp"}, -{"brdptc", {NULL}, 2155, "udp"}, -{"trp", {NULL}, 2156, "tcp"}, -{"trp", {NULL}, 2156, "udp"}, -{"xnds", {NULL}, 2157, "tcp"}, -{"xnds", {NULL}, 2157, "udp"}, -{"touchnetplus", {NULL}, 2158, "tcp"}, -{"touchnetplus", {NULL}, 2158, "udp"}, -{"gdbremote", {NULL}, 2159, "tcp"}, -{"gdbremote", {NULL}, 2159, "udp"}, -{"apc-2160", {NULL}, 2160, "tcp"}, -{"apc-2160", {NULL}, 2160, "udp"}, -{"apc-2161", {NULL}, 2161, "tcp"}, -{"apc-2161", {NULL}, 2161, "udp"}, -{"navisphere", {NULL}, 2162, "tcp"}, -{"navisphere", {NULL}, 2162, "udp"}, -{"navisphere-sec", {NULL}, 2163, "tcp"}, -{"navisphere-sec", {NULL}, 2163, "udp"}, -{"ddns-v3", {NULL}, 2164, "tcp"}, -{"ddns-v3", {NULL}, 2164, "udp"}, -{"x-bone-api", {NULL}, 2165, "tcp"}, -{"x-bone-api", {NULL}, 2165, "udp"}, -{"iwserver", {NULL}, 2166, "tcp"}, -{"iwserver", {NULL}, 2166, "udp"}, -{"raw-serial", {NULL}, 2167, "tcp"}, -{"raw-serial", {NULL}, 2167, "udp"}, -{"easy-soft-mux", {NULL}, 2168, "tcp"}, -{"easy-soft-mux", {NULL}, 2168, "udp"}, -{"brain", {NULL}, 2169, "tcp"}, -{"brain", {NULL}, 2169, "udp"}, -{"eyetv", {NULL}, 2170, "tcp"}, -{"eyetv", {NULL}, 2170, "udp"}, -{"msfw-storage", {NULL}, 2171, "tcp"}, -{"msfw-storage", {NULL}, 2171, "udp"}, -{"msfw-s-storage", {NULL}, 2172, "tcp"}, -{"msfw-s-storage", {NULL}, 2172, "udp"}, -{"msfw-replica", {NULL}, 2173, "tcp"}, -{"msfw-replica", {NULL}, 2173, "udp"}, -{"msfw-array", {NULL}, 2174, "tcp"}, -{"msfw-array", {NULL}, 2174, "udp"}, -{"airsync", {NULL}, 2175, "tcp"}, -{"airsync", {NULL}, 2175, "udp"}, -{"rapi", {NULL}, 2176, "tcp"}, -{"rapi", {NULL}, 2176, "udp"}, -{"qwave", {NULL}, 2177, "tcp"}, -{"qwave", {NULL}, 2177, "udp"}, -{"bitspeer", {NULL}, 2178, "tcp"}, -{"bitspeer", {NULL}, 2178, "udp"}, -{"vmrdp", {NULL}, 2179, "tcp"}, -{"vmrdp", {NULL}, 2179, "udp"}, -{"mc-gt-srv", {NULL}, 2180, "tcp"}, -{"mc-gt-srv", {NULL}, 2180, "udp"}, -{"eforward", {NULL}, 2181, "tcp"}, -{"eforward", {NULL}, 2181, "udp"}, -{"cgn-stat", {NULL}, 2182, "tcp"}, -{"cgn-stat", {NULL}, 2182, "udp"}, -{"cgn-config", {NULL}, 2183, "tcp"}, -{"cgn-config", {NULL}, 2183, "udp"}, -{"nvd", {NULL}, 2184, "tcp"}, -{"nvd", {NULL}, 2184, "udp"}, -{"onbase-dds", {NULL}, 2185, "tcp"}, -{"onbase-dds", {NULL}, 2185, "udp"}, -{"gtaua", {NULL}, 2186, "tcp"}, -{"gtaua", {NULL}, 2186, "udp"}, -{"ssmc", {NULL}, 2187, "tcp"}, -{"ssmd", {NULL}, 2187, "udp"}, -{"tivoconnect", {NULL}, 2190, "tcp"}, -{"tivoconnect", {NULL}, 2190, "udp"}, -{"tvbus", {NULL}, 2191, "tcp"}, -{"tvbus", {NULL}, 2191, "udp"}, -{"asdis", {NULL}, 2192, "tcp"}, -{"asdis", {NULL}, 2192, "udp"}, -{"drwcs", {NULL}, 2193, "tcp"}, -{"drwcs", {NULL}, 2193, "udp"}, -{"mnp-exchange", {NULL}, 2197, "tcp"}, -{"mnp-exchange", {NULL}, 2197, "udp"}, -{"onehome-remote", {NULL}, 2198, "tcp"}, -{"onehome-remote", {NULL}, 2198, "udp"}, -{"onehome-help", {NULL}, 2199, "tcp"}, -{"onehome-help", {NULL}, 2199, "udp"}, -{"ici", {NULL}, 2200, "tcp"}, -{"ici", {NULL}, 2200, "udp"}, -{"ats", {NULL}, 2201, "tcp"}, -{"ats", {NULL}, 2201, "udp"}, -{"imtc-map", {NULL}, 2202, "tcp"}, -{"imtc-map", {NULL}, 2202, "udp"}, -{"b2-runtime", {NULL}, 2203, "tcp"}, -{"b2-runtime", {NULL}, 2203, "udp"}, -{"b2-license", {NULL}, 2204, "tcp"}, -{"b2-license", {NULL}, 2204, "udp"}, -{"jps", {NULL}, 2205, "tcp"}, -{"jps", {NULL}, 2205, "udp"}, -{"hpocbus", {NULL}, 2206, "tcp"}, -{"hpocbus", {NULL}, 2206, "udp"}, -{"hpssd", {NULL}, 2207, "tcp"}, -{"hpssd", {NULL}, 2207, "udp"}, -{"hpiod", {NULL}, 2208, "tcp"}, -{"hpiod", {NULL}, 2208, "udp"}, -{"rimf-ps", {NULL}, 2209, "tcp"}, -{"rimf-ps", {NULL}, 2209, "udp"}, -{"noaaport", {NULL}, 2210, "tcp"}, -{"noaaport", {NULL}, 2210, "udp"}, -{"emwin", {NULL}, 2211, "tcp"}, -{"emwin", {NULL}, 2211, "udp"}, -{"leecoposserver", {NULL}, 2212, "tcp"}, -{"leecoposserver", {NULL}, 2212, "udp"}, -{"kali", {NULL}, 2213, "tcp"}, -{"kali", {NULL}, 2213, "udp"}, -{"rpi", {NULL}, 2214, "tcp"}, -{"rpi", {NULL}, 2214, "udp"}, -{"ipcore", {NULL}, 2215, "tcp"}, -{"ipcore", {NULL}, 2215, "udp"}, -{"vtu-comms", {NULL}, 2216, "tcp"}, -{"vtu-comms", {NULL}, 2216, "udp"}, -{"gotodevice", {NULL}, 2217, "tcp"}, -{"gotodevice", {NULL}, 2217, "udp"}, -{"bounzza", {NULL}, 2218, "tcp"}, -{"bounzza", {NULL}, 2218, "udp"}, -{"netiq-ncap", {NULL}, 2219, "tcp"}, -{"netiq-ncap", {NULL}, 2219, "udp"}, -{"netiq", {NULL}, 2220, "tcp"}, -{"netiq", {NULL}, 2220, "udp"}, -{"rockwell-csp1", {NULL}, 2221, "tcp"}, -{"rockwell-csp1", {NULL}, 2221, "udp"}, -{"EtherNet/IP-1", {NULL}, 2222, "tcp"}, -{"EtherNet/IP-1", {NULL}, 2222, "udp"}, -{"rockwell-csp2", {NULL}, 2223, "tcp"}, -{"rockwell-csp2", {NULL}, 2223, "udp"}, -{"efi-mg", {NULL}, 2224, "tcp"}, -{"efi-mg", {NULL}, 2224, "udp"}, -{"rcip-itu", {NULL}, 2225, "tcp"}, -{"rcip-itu", {NULL}, 2225, "sctp"}, -{"di-drm", {NULL}, 2226, "tcp"}, -{"di-drm", {NULL}, 2226, "udp"}, -{"di-msg", {NULL}, 2227, "tcp"}, -{"di-msg", {NULL}, 2227, "udp"}, -{"ehome-ms", {NULL}, 2228, "tcp"}, -{"ehome-ms", {NULL}, 2228, "udp"}, -{"datalens", {NULL}, 2229, "tcp"}, -{"datalens", {NULL}, 2229, "udp"}, -{"queueadm", {NULL}, 2230, "tcp"}, -{"queueadm", {NULL}, 2230, "udp"}, -{"wimaxasncp", {NULL}, 2231, "tcp"}, -{"wimaxasncp", {NULL}, 2231, "udp"}, -{"ivs-video", {NULL}, 2232, "tcp"}, -{"ivs-video", {NULL}, 2232, "udp"}, -{"infocrypt", {NULL}, 2233, "tcp"}, -{"infocrypt", {NULL}, 2233, "udp"}, -{"directplay", {NULL}, 2234, "tcp"}, -{"directplay", {NULL}, 2234, "udp"}, -{"sercomm-wlink", {NULL}, 2235, "tcp"}, -{"sercomm-wlink", {NULL}, 2235, "udp"}, -{"nani", {NULL}, 2236, "tcp"}, -{"nani", {NULL}, 2236, "udp"}, -{"optech-port1-lm", {NULL}, 2237, "tcp"}, -{"optech-port1-lm", {NULL}, 2237, "udp"}, -{"aviva-sna", {NULL}, 2238, "tcp"}, -{"aviva-sna", {NULL}, 2238, "udp"}, -{"imagequery", {NULL}, 2239, "tcp"}, -{"imagequery", {NULL}, 2239, "udp"}, -{"recipe", {NULL}, 2240, "tcp"}, -{"recipe", {NULL}, 2240, "udp"}, -{"ivsd", {NULL}, 2241, "tcp"}, -{"ivsd", {NULL}, 2241, "udp"}, -{"foliocorp", {NULL}, 2242, "tcp"}, -{"foliocorp", {NULL}, 2242, "udp"}, -{"magicom", {NULL}, 2243, "tcp"}, -{"magicom", {NULL}, 2243, "udp"}, -{"nmsserver", {NULL}, 2244, "tcp"}, -{"nmsserver", {NULL}, 2244, "udp"}, -{"hao", {NULL}, 2245, "tcp"}, -{"hao", {NULL}, 2245, "udp"}, -{"pc-mta-addrmap", {NULL}, 2246, "tcp"}, -{"pc-mta-addrmap", {NULL}, 2246, "udp"}, -{"antidotemgrsvr", {NULL}, 2247, "tcp"}, -{"antidotemgrsvr", {NULL}, 2247, "udp"}, -{"ums", {NULL}, 2248, "tcp"}, -{"ums", {NULL}, 2248, "udp"}, -{"rfmp", {NULL}, 2249, "tcp"}, -{"rfmp", {NULL}, 2249, "udp"}, -{"remote-collab", {NULL}, 2250, "tcp"}, -{"remote-collab", {NULL}, 2250, "udp"}, -{"dif-port", {NULL}, 2251, "tcp"}, -{"dif-port", {NULL}, 2251, "udp"}, -{"njenet-ssl", {NULL}, 2252, "tcp"}, -{"njenet-ssl", {NULL}, 2252, "udp"}, -{"dtv-chan-req", {NULL}, 2253, "tcp"}, -{"dtv-chan-req", {NULL}, 2253, "udp"}, -{"seispoc", {NULL}, 2254, "tcp"}, -{"seispoc", {NULL}, 2254, "udp"}, -{"vrtp", {NULL}, 2255, "tcp"}, -{"vrtp", {NULL}, 2255, "udp"}, -{"pcc-mfp", {NULL}, 2256, "tcp"}, -{"pcc-mfp", {NULL}, 2256, "udp"}, -{"simple-tx-rx", {NULL}, 2257, "tcp"}, -{"simple-tx-rx", {NULL}, 2257, "udp"}, -{"rcts", {NULL}, 2258, "tcp"}, -{"rcts", {NULL}, 2258, "udp"}, -{"acd-pm", {NULL}, 2259, "tcp"}, -{"acd-pm", {NULL}, 2259, "udp"}, -{"apc-2260", {NULL}, 2260, "tcp"}, -{"apc-2260", {NULL}, 2260, "udp"}, -{"comotionmaster", {NULL}, 2261, "tcp"}, -{"comotionmaster", {NULL}, 2261, "udp"}, -{"comotionback", {NULL}, 2262, "tcp"}, -{"comotionback", {NULL}, 2262, "udp"}, -{"ecwcfg", {NULL}, 2263, "tcp"}, -{"ecwcfg", {NULL}, 2263, "udp"}, -{"apx500api-1", {NULL}, 2264, "tcp"}, -{"apx500api-1", {NULL}, 2264, "udp"}, -{"apx500api-2", {NULL}, 2265, "tcp"}, -{"apx500api-2", {NULL}, 2265, "udp"}, -{"mfserver", {NULL}, 2266, "tcp"}, -{"mfserver", {NULL}, 2266, "udp"}, -{"ontobroker", {NULL}, 2267, "tcp"}, -{"ontobroker", {NULL}, 2267, "udp"}, -{"amt", {NULL}, 2268, "tcp"}, -{"amt", {NULL}, 2268, "udp"}, -{"mikey", {NULL}, 2269, "tcp"}, -{"mikey", {NULL}, 2269, "udp"}, -{"starschool", {NULL}, 2270, "tcp"}, -{"starschool", {NULL}, 2270, "udp"}, -{"mmcals", {NULL}, 2271, "tcp"}, -{"mmcals", {NULL}, 2271, "udp"}, -{"mmcal", {NULL}, 2272, "tcp"}, -{"mmcal", {NULL}, 2272, "udp"}, -{"mysql-im", {NULL}, 2273, "tcp"}, -{"mysql-im", {NULL}, 2273, "udp"}, -{"pcttunnell", {NULL}, 2274, "tcp"}, -{"pcttunnell", {NULL}, 2274, "udp"}, -{"ibridge-data", {NULL}, 2275, "tcp"}, -{"ibridge-data", {NULL}, 2275, "udp"}, -{"ibridge-mgmt", {NULL}, 2276, "tcp"}, -{"ibridge-mgmt", {NULL}, 2276, "udp"}, -{"bluectrlproxy", {NULL}, 2277, "tcp"}, -{"bluectrlproxy", {NULL}, 2277, "udp"}, -{"s3db", {NULL}, 2278, "tcp"}, -{"s3db", {NULL}, 2278, "udp"}, -{"xmquery", {NULL}, 2279, "tcp"}, -{"xmquery", {NULL}, 2279, "udp"}, -{"lnvpoller", {NULL}, 2280, "tcp"}, -{"lnvpoller", {NULL}, 2280, "udp"}, -{"lnvconsole", {NULL}, 2281, "tcp"}, -{"lnvconsole", {NULL}, 2281, "udp"}, -{"lnvalarm", {NULL}, 2282, "tcp"}, -{"lnvalarm", {NULL}, 2282, "udp"}, -{"lnvstatus", {NULL}, 2283, "tcp"}, -{"lnvstatus", {NULL}, 2283, "udp"}, -{"lnvmaps", {NULL}, 2284, "tcp"}, -{"lnvmaps", {NULL}, 2284, "udp"}, -{"lnvmailmon", {NULL}, 2285, "tcp"}, -{"lnvmailmon", {NULL}, 2285, "udp"}, -{"nas-metering", {NULL}, 2286, "tcp"}, -{"nas-metering", {NULL}, 2286, "udp"}, -{"dna", {NULL}, 2287, "tcp"}, -{"dna", {NULL}, 2287, "udp"}, -{"netml", {NULL}, 2288, "tcp"}, -{"netml", {NULL}, 2288, "udp"}, -{"dict-lookup", {NULL}, 2289, "tcp"}, -{"dict-lookup", {NULL}, 2289, "udp"}, -{"sonus-logging", {NULL}, 2290, "tcp"}, -{"sonus-logging", {NULL}, 2290, "udp"}, -{"eapsp", {NULL}, 2291, "tcp"}, -{"eapsp", {NULL}, 2291, "udp"}, -{"mib-streaming", {NULL}, 2292, "tcp"}, -{"mib-streaming", {NULL}, 2292, "udp"}, -{"npdbgmngr", {NULL}, 2293, "tcp"}, -{"npdbgmngr", {NULL}, 2293, "udp"}, -{"konshus-lm", {NULL}, 2294, "tcp"}, -{"konshus-lm", {NULL}, 2294, "udp"}, -{"advant-lm", {NULL}, 2295, "tcp"}, -{"advant-lm", {NULL}, 2295, "udp"}, -{"theta-lm", {NULL}, 2296, "tcp"}, -{"theta-lm", {NULL}, 2296, "udp"}, -{"d2k-datamover1", {NULL}, 2297, "tcp"}, -{"d2k-datamover1", {NULL}, 2297, "udp"}, -{"d2k-datamover2", {NULL}, 2298, "tcp"}, -{"d2k-datamover2", {NULL}, 2298, "udp"}, -{"pc-telecommute", {NULL}, 2299, "tcp"}, -{"pc-telecommute", {NULL}, 2299, "udp"}, -{"cvmmon", {NULL}, 2300, "tcp"}, -{"cvmmon", {NULL}, 2300, "udp"}, -{"cpq-wbem", {NULL}, 2301, "tcp"}, -{"cpq-wbem", {NULL}, 2301, "udp"}, -{"binderysupport", {NULL}, 2302, "tcp"}, -{"binderysupport", {NULL}, 2302, "udp"}, -{"proxy-gateway", {NULL}, 2303, "tcp"}, -{"proxy-gateway", {NULL}, 2303, "udp"}, -{"attachmate-uts", {NULL}, 2304, "tcp"}, -{"attachmate-uts", {NULL}, 2304, "udp"}, -{"mt-scaleserver", {NULL}, 2305, "tcp"}, -{"mt-scaleserver", {NULL}, 2305, "udp"}, -{"tappi-boxnet", {NULL}, 2306, "tcp"}, -{"tappi-boxnet", {NULL}, 2306, "udp"}, -{"pehelp", {NULL}, 2307, "tcp"}, -{"pehelp", {NULL}, 2307, "udp"}, -{"sdhelp", {NULL}, 2308, "tcp"}, -{"sdhelp", {NULL}, 2308, "udp"}, -{"sdserver", {NULL}, 2309, "tcp"}, -{"sdserver", {NULL}, 2309, "udp"}, -{"sdclient", {NULL}, 2310, "tcp"}, -{"sdclient", {NULL}, 2310, "udp"}, -{"messageservice", {NULL}, 2311, "tcp"}, -{"messageservice", {NULL}, 2311, "udp"}, -{"wanscaler", {NULL}, 2312, "tcp"}, -{"wanscaler", {NULL}, 2312, "udp"}, -{"iapp", {NULL}, 2313, "tcp"}, -{"iapp", {NULL}, 2313, "udp"}, -{"cr-websystems", {NULL}, 2314, "tcp"}, -{"cr-websystems", {NULL}, 2314, "udp"}, -{"precise-sft", {NULL}, 2315, "tcp"}, -{"precise-sft", {NULL}, 2315, "udp"}, -{"sent-lm", {NULL}, 2316, "tcp"}, -{"sent-lm", {NULL}, 2316, "udp"}, -{"attachmate-g32", {NULL}, 2317, "tcp"}, -{"attachmate-g32", {NULL}, 2317, "udp"}, -{"cadencecontrol", {NULL}, 2318, "tcp"}, -{"cadencecontrol", {NULL}, 2318, "udp"}, -{"infolibria", {NULL}, 2319, "tcp"}, -{"infolibria", {NULL}, 2319, "udp"}, -{"siebel-ns", {NULL}, 2320, "tcp"}, -{"siebel-ns", {NULL}, 2320, "udp"}, -{"rdlap", {NULL}, 2321, "tcp"}, -{"rdlap", {NULL}, 2321, "udp"}, -{"ofsd", {NULL}, 2322, "tcp"}, -{"ofsd", {NULL}, 2322, "udp"}, -{"3d-nfsd", {NULL}, 2323, "tcp"}, -{"3d-nfsd", {NULL}, 2323, "udp"}, -{"cosmocall", {NULL}, 2324, "tcp"}, -{"cosmocall", {NULL}, 2324, "udp"}, -{"ansysli", {NULL}, 2325, "tcp"}, -{"ansysli", {NULL}, 2325, "udp"}, -{"idcp", {NULL}, 2326, "tcp"}, -{"idcp", {NULL}, 2326, "udp"}, -{"xingcsm", {NULL}, 2327, "tcp"}, -{"xingcsm", {NULL}, 2327, "udp"}, -{"netrix-sftm", {NULL}, 2328, "tcp"}, -{"netrix-sftm", {NULL}, 2328, "udp"}, -{"nvd", {NULL}, 2329, "tcp"}, -{"nvd", {NULL}, 2329, "udp"}, -{"tscchat", {NULL}, 2330, "tcp"}, -{"tscchat", {NULL}, 2330, "udp"}, -{"agentview", {NULL}, 2331, "tcp"}, -{"agentview", {NULL}, 2331, "udp"}, -{"rcc-host", {NULL}, 2332, "tcp"}, -{"rcc-host", {NULL}, 2332, "udp"}, -{"snapp", {NULL}, 2333, "tcp"}, -{"snapp", {NULL}, 2333, "udp"}, -{"ace-client", {NULL}, 2334, "tcp"}, -{"ace-client", {NULL}, 2334, "udp"}, -{"ace-proxy", {NULL}, 2335, "tcp"}, -{"ace-proxy", {NULL}, 2335, "udp"}, -{"appleugcontrol", {NULL}, 2336, "tcp"}, -{"appleugcontrol", {NULL}, 2336, "udp"}, -{"ideesrv", {NULL}, 2337, "tcp"}, -{"ideesrv", {NULL}, 2337, "udp"}, -{"norton-lambert", {NULL}, 2338, "tcp"}, -{"norton-lambert", {NULL}, 2338, "udp"}, -{"3com-webview", {NULL}, 2339, "tcp"}, -{"3com-webview", {NULL}, 2339, "udp"}, -{"wrs_registry", {NULL}, 2340, "tcp"}, -{"wrs_registry", {NULL}, 2340, "udp"}, -{"xiostatus", {NULL}, 2341, "tcp"}, -{"xiostatus", {NULL}, 2341, "udp"}, -{"manage-exec", {NULL}, 2342, "tcp"}, -{"manage-exec", {NULL}, 2342, "udp"}, -{"nati-logos", {NULL}, 2343, "tcp"}, -{"nati-logos", {NULL}, 2343, "udp"}, -{"fcmsys", {NULL}, 2344, "tcp"}, -{"fcmsys", {NULL}, 2344, "udp"}, -{"dbm", {NULL}, 2345, "tcp"}, -{"dbm", {NULL}, 2345, "udp"}, -{"redstorm_join", {NULL}, 2346, "tcp"}, -{"redstorm_join", {NULL}, 2346, "udp"}, -{"redstorm_find", {NULL}, 2347, "tcp"}, -{"redstorm_find", {NULL}, 2347, "udp"}, -{"redstorm_info", {NULL}, 2348, "tcp"}, -{"redstorm_info", {NULL}, 2348, "udp"}, -{"redstorm_diag", {NULL}, 2349, "tcp"}, -{"redstorm_diag", {NULL}, 2349, "udp"}, -{"psbserver", {NULL}, 2350, "tcp"}, -{"psbserver", {NULL}, 2350, "udp"}, -{"psrserver", {NULL}, 2351, "tcp"}, -{"psrserver", {NULL}, 2351, "udp"}, -{"pslserver", {NULL}, 2352, "tcp"}, -{"pslserver", {NULL}, 2352, "udp"}, -{"pspserver", {NULL}, 2353, "tcp"}, -{"pspserver", {NULL}, 2353, "udp"}, -{"psprserver", {NULL}, 2354, "tcp"}, -{"psprserver", {NULL}, 2354, "udp"}, -{"psdbserver", {NULL}, 2355, "tcp"}, -{"psdbserver", {NULL}, 2355, "udp"}, -{"gxtelmd", {NULL}, 2356, "tcp"}, -{"gxtelmd", {NULL}, 2356, "udp"}, -{"unihub-server", {NULL}, 2357, "tcp"}, -{"unihub-server", {NULL}, 2357, "udp"}, -{"futrix", {NULL}, 2358, "tcp"}, -{"futrix", {NULL}, 2358, "udp"}, -{"flukeserver", {NULL}, 2359, "tcp"}, -{"flukeserver", {NULL}, 2359, "udp"}, -{"nexstorindltd", {NULL}, 2360, "tcp"}, -{"nexstorindltd", {NULL}, 2360, "udp"}, -{"tl1", {NULL}, 2361, "tcp"}, -{"tl1", {NULL}, 2361, "udp"}, -{"digiman", {NULL}, 2362, "tcp"}, -{"digiman", {NULL}, 2362, "udp"}, -{"mediacntrlnfsd", {NULL}, 2363, "tcp"}, -{"mediacntrlnfsd", {NULL}, 2363, "udp"}, -{"oi-2000", {NULL}, 2364, "tcp"}, -{"oi-2000", {NULL}, 2364, "udp"}, -{"dbref", {NULL}, 2365, "tcp"}, -{"dbref", {NULL}, 2365, "udp"}, -{"qip-login", {NULL}, 2366, "tcp"}, -{"qip-login", {NULL}, 2366, "udp"}, -{"service-ctrl", {NULL}, 2367, "tcp"}, -{"service-ctrl", {NULL}, 2367, "udp"}, -{"opentable", {NULL}, 2368, "tcp"}, -{"opentable", {NULL}, 2368, "udp"}, -{"l3-hbmon", {NULL}, 2370, "tcp"}, -{"l3-hbmon", {NULL}, 2370, "udp"}, -{"worldwire", {NULL}, 2371, "tcp"}, -{"worldwire", {NULL}, 2371, "udp"}, -{"lanmessenger", {NULL}, 2372, "tcp"}, -{"lanmessenger", {NULL}, 2372, "udp"}, -{"remographlm", {NULL}, 2373, "tcp"}, -{"hydra", {NULL}, 2374, "tcp"}, -{"compaq-https", {NULL}, 2381, "tcp"}, -{"compaq-https", {NULL}, 2381, "udp"}, -{"ms-olap3", {NULL}, 2382, "tcp"}, -{"ms-olap3", {NULL}, 2382, "udp"}, -{"ms-olap4", {NULL}, 2383, "tcp"}, -{"ms-olap4", {NULL}, 2383, "udp"}, -{"sd-request", {NULL}, 2384, "tcp"}, -{"sd-capacity", {NULL}, 2384, "udp"}, -{"sd-data", {NULL}, 2385, "tcp"}, -{"sd-data", {NULL}, 2385, "udp"}, -{"virtualtape", {NULL}, 2386, "tcp"}, -{"virtualtape", {NULL}, 2386, "udp"}, -{"vsamredirector", {NULL}, 2387, "tcp"}, -{"vsamredirector", {NULL}, 2387, "udp"}, -{"mynahautostart", {NULL}, 2388, "tcp"}, -{"mynahautostart", {NULL}, 2388, "udp"}, -{"ovsessionmgr", {NULL}, 2389, "tcp"}, -{"ovsessionmgr", {NULL}, 2389, "udp"}, -{"rsmtp", {NULL}, 2390, "tcp"}, -{"rsmtp", {NULL}, 2390, "udp"}, -{"3com-net-mgmt", {NULL}, 2391, "tcp"}, -{"3com-net-mgmt", {NULL}, 2391, "udp"}, -{"tacticalauth", {NULL}, 2392, "tcp"}, -{"tacticalauth", {NULL}, 2392, "udp"}, -{"ms-olap1", {NULL}, 2393, "tcp"}, -{"ms-olap1", {NULL}, 2393, "udp"}, -{"ms-olap2", {NULL}, 2394, "tcp"}, -{"ms-olap2", {NULL}, 2394, "udp"}, -{"lan900_remote", {NULL}, 2395, "tcp"}, -{"lan900_remote", {NULL}, 2395, "udp"}, -{"wusage", {NULL}, 2396, "tcp"}, -{"wusage", {NULL}, 2396, "udp"}, -{"ncl", {NULL}, 2397, "tcp"}, -{"ncl", {NULL}, 2397, "udp"}, -{"orbiter", {NULL}, 2398, "tcp"}, -{"orbiter", {NULL}, 2398, "udp"}, -{"fmpro-fdal", {NULL}, 2399, "tcp"}, -{"fmpro-fdal", {NULL}, 2399, "udp"}, -{"opequus-server", {NULL}, 2400, "tcp"}, -{"opequus-server", {NULL}, 2400, "udp"}, -{"cvspserver", {NULL}, 2401, "tcp"}, -{"cvspserver", {NULL}, 2401, "udp"}, -{"taskmaster2000", {NULL}, 2402, "tcp"}, -{"taskmaster2000", {NULL}, 2402, "udp"}, -{"taskmaster2000", {NULL}, 2403, "tcp"}, -{"taskmaster2000", {NULL}, 2403, "udp"}, -{"iec-104", {NULL}, 2404, "tcp"}, -{"iec-104", {NULL}, 2404, "udp"}, -{"trc-netpoll", {NULL}, 2405, "tcp"}, -{"trc-netpoll", {NULL}, 2405, "udp"}, -{"jediserver", {NULL}, 2406, "tcp"}, -{"jediserver", {NULL}, 2406, "udp"}, -{"orion", {NULL}, 2407, "tcp"}, -{"orion", {NULL}, 2407, "udp"}, -{"optimanet", {NULL}, 2408, "tcp"}, -{"optimanet", {NULL}, 2408, "udp"}, -{"sns-protocol", {NULL}, 2409, "tcp"}, -{"sns-protocol", {NULL}, 2409, "udp"}, -{"vrts-registry", {NULL}, 2410, "tcp"}, -{"vrts-registry", {NULL}, 2410, "udp"}, -{"netwave-ap-mgmt", {NULL}, 2411, "tcp"}, -{"netwave-ap-mgmt", {NULL}, 2411, "udp"}, -{"cdn", {NULL}, 2412, "tcp"}, -{"cdn", {NULL}, 2412, "udp"}, -{"orion-rmi-reg", {NULL}, 2413, "tcp"}, -{"orion-rmi-reg", {NULL}, 2413, "udp"}, -{"beeyond", {NULL}, 2414, "tcp"}, -{"beeyond", {NULL}, 2414, "udp"}, -{"codima-rtp", {NULL}, 2415, "tcp"}, -{"codima-rtp", {NULL}, 2415, "udp"}, -{"rmtserver", {NULL}, 2416, "tcp"}, -{"rmtserver", {NULL}, 2416, "udp"}, -{"composit-server", {NULL}, 2417, "tcp"}, -{"composit-server", {NULL}, 2417, "udp"}, -{"cas", {NULL}, 2418, "tcp"}, -{"cas", {NULL}, 2418, "udp"}, -{"attachmate-s2s", {NULL}, 2419, "tcp"}, -{"attachmate-s2s", {NULL}, 2419, "udp"}, -{"dslremote-mgmt", {NULL}, 2420, "tcp"}, -{"dslremote-mgmt", {NULL}, 2420, "udp"}, -{"g-talk", {NULL}, 2421, "tcp"}, -{"g-talk", {NULL}, 2421, "udp"}, -{"crmsbits", {NULL}, 2422, "tcp"}, -{"crmsbits", {NULL}, 2422, "udp"}, -{"rnrp", {NULL}, 2423, "tcp"}, -{"rnrp", {NULL}, 2423, "udp"}, -{"kofax-svr", {NULL}, 2424, "tcp"}, -{"kofax-svr", {NULL}, 2424, "udp"}, -{"fjitsuappmgr", {NULL}, 2425, "tcp"}, -{"fjitsuappmgr", {NULL}, 2425, "udp"}, -{"mgcp-gateway", {NULL}, 2427, "tcp"}, -{"mgcp-gateway", {NULL}, 2427, "udp"}, -{"ott", {NULL}, 2428, "tcp"}, -{"ott", {NULL}, 2428, "udp"}, -{"ft-role", {NULL}, 2429, "tcp"}, -{"ft-role", {NULL}, 2429, "udp"}, -{"venus", {NULL}, 2430, "tcp"}, -{"venus", {NULL}, 2430, "udp"}, -{"venus-se", {NULL}, 2431, "tcp"}, -{"venus-se", {NULL}, 2431, "udp"}, -{"codasrv", {NULL}, 2432, "tcp"}, -{"codasrv", {NULL}, 2432, "udp"}, -{"codasrv-se", {NULL}, 2433, "tcp"}, -{"codasrv-se", {NULL}, 2433, "udp"}, -{"pxc-epmap", {NULL}, 2434, "tcp"}, -{"pxc-epmap", {NULL}, 2434, "udp"}, -{"optilogic", {NULL}, 2435, "tcp"}, -{"optilogic", {NULL}, 2435, "udp"}, -{"topx", {NULL}, 2436, "tcp"}, -{"topx", {NULL}, 2436, "udp"}, -{"unicontrol", {NULL}, 2437, "tcp"}, -{"unicontrol", {NULL}, 2437, "udp"}, -{"msp", {NULL}, 2438, "tcp"}, -{"msp", {NULL}, 2438, "udp"}, -{"sybasedbsynch", {NULL}, 2439, "tcp"}, -{"sybasedbsynch", {NULL}, 2439, "udp"}, -{"spearway", {NULL}, 2440, "tcp"}, -{"spearway", {NULL}, 2440, "udp"}, -{"pvsw-inet", {NULL}, 2441, "tcp"}, -{"pvsw-inet", {NULL}, 2441, "udp"}, -{"netangel", {NULL}, 2442, "tcp"}, -{"netangel", {NULL}, 2442, "udp"}, -{"powerclientcsf", {NULL}, 2443, "tcp"}, -{"powerclientcsf", {NULL}, 2443, "udp"}, -{"btpp2sectrans", {NULL}, 2444, "tcp"}, -{"btpp2sectrans", {NULL}, 2444, "udp"}, -{"dtn1", {NULL}, 2445, "tcp"}, -{"dtn1", {NULL}, 2445, "udp"}, -{"bues_service", {NULL}, 2446, "tcp"}, -{"bues_service", {NULL}, 2446, "udp"}, -{"ovwdb", {NULL}, 2447, "tcp"}, -{"ovwdb", {NULL}, 2447, "udp"}, -{"hpppssvr", {NULL}, 2448, "tcp"}, -{"hpppssvr", {NULL}, 2448, "udp"}, -{"ratl", {NULL}, 2449, "tcp"}, -{"ratl", {NULL}, 2449, "udp"}, -{"netadmin", {NULL}, 2450, "tcp"}, -{"netadmin", {NULL}, 2450, "udp"}, -{"netchat", {NULL}, 2451, "tcp"}, -{"netchat", {NULL}, 2451, "udp"}, -{"snifferclient", {NULL}, 2452, "tcp"}, -{"snifferclient", {NULL}, 2452, "udp"}, -{"madge-ltd", {NULL}, 2453, "tcp"}, -{"madge-ltd", {NULL}, 2453, "udp"}, -{"indx-dds", {NULL}, 2454, "tcp"}, -{"indx-dds", {NULL}, 2454, "udp"}, -{"wago-io-system", {NULL}, 2455, "tcp"}, -{"wago-io-system", {NULL}, 2455, "udp"}, -{"altav-remmgt", {NULL}, 2456, "tcp"}, -{"altav-remmgt", {NULL}, 2456, "udp"}, -{"rapido-ip", {NULL}, 2457, "tcp"}, -{"rapido-ip", {NULL}, 2457, "udp"}, -{"griffin", {NULL}, 2458, "tcp"}, -{"griffin", {NULL}, 2458, "udp"}, -{"community", {NULL}, 2459, "tcp"}, -{"community", {NULL}, 2459, "udp"}, -{"ms-theater", {NULL}, 2460, "tcp"}, -{"ms-theater", {NULL}, 2460, "udp"}, -{"qadmifoper", {NULL}, 2461, "tcp"}, -{"qadmifoper", {NULL}, 2461, "udp"}, -{"qadmifevent", {NULL}, 2462, "tcp"}, -{"qadmifevent", {NULL}, 2462, "udp"}, -{"lsi-raid-mgmt", {NULL}, 2463, "tcp"}, -{"lsi-raid-mgmt", {NULL}, 2463, "udp"}, -{"direcpc-si", {NULL}, 2464, "tcp"}, -{"direcpc-si", {NULL}, 2464, "udp"}, -{"lbm", {NULL}, 2465, "tcp"}, -{"lbm", {NULL}, 2465, "udp"}, -{"lbf", {NULL}, 2466, "tcp"}, -{"lbf", {NULL}, 2466, "udp"}, -{"high-criteria", {NULL}, 2467, "tcp"}, -{"high-criteria", {NULL}, 2467, "udp"}, -{"qip-msgd", {NULL}, 2468, "tcp"}, -{"qip-msgd", {NULL}, 2468, "udp"}, -{"mti-tcs-comm", {NULL}, 2469, "tcp"}, -{"mti-tcs-comm", {NULL}, 2469, "udp"}, -{"taskman-port", {NULL}, 2470, "tcp"}, -{"taskman-port", {NULL}, 2470, "udp"}, -{"seaodbc", {NULL}, 2471, "tcp"}, -{"seaodbc", {NULL}, 2471, "udp"}, -{"c3", {NULL}, 2472, "tcp"}, -{"c3", {NULL}, 2472, "udp"}, -{"aker-cdp", {NULL}, 2473, "tcp"}, -{"aker-cdp", {NULL}, 2473, "udp"}, -{"vitalanalysis", {NULL}, 2474, "tcp"}, -{"vitalanalysis", {NULL}, 2474, "udp"}, -{"ace-server", {NULL}, 2475, "tcp"}, -{"ace-server", {NULL}, 2475, "udp"}, -{"ace-svr-prop", {NULL}, 2476, "tcp"}, -{"ace-svr-prop", {NULL}, 2476, "udp"}, -{"ssm-cvs", {NULL}, 2477, "tcp"}, -{"ssm-cvs", {NULL}, 2477, "udp"}, -{"ssm-cssps", {NULL}, 2478, "tcp"}, -{"ssm-cssps", {NULL}, 2478, "udp"}, -{"ssm-els", {NULL}, 2479, "tcp"}, -{"ssm-els", {NULL}, 2479, "udp"}, -{"powerexchange", {NULL}, 2480, "tcp"}, -{"powerexchange", {NULL}, 2480, "udp"}, -{"giop", {NULL}, 2481, "tcp"}, -{"giop", {NULL}, 2481, "udp"}, -{"giop-ssl", {NULL}, 2482, "tcp"}, -{"giop-ssl", {NULL}, 2482, "udp"}, -{"ttc", {NULL}, 2483, "tcp"}, -{"ttc", {NULL}, 2483, "udp"}, -{"ttc-ssl", {NULL}, 2484, "tcp"}, -{"ttc-ssl", {NULL}, 2484, "udp"}, -{"netobjects1", {NULL}, 2485, "tcp"}, -{"netobjects1", {NULL}, 2485, "udp"}, -{"netobjects2", {NULL}, 2486, "tcp"}, -{"netobjects2", {NULL}, 2486, "udp"}, -{"pns", {NULL}, 2487, "tcp"}, -{"pns", {NULL}, 2487, "udp"}, -{"moy-corp", {NULL}, 2488, "tcp"}, -{"moy-corp", {NULL}, 2488, "udp"}, -{"tsilb", {NULL}, 2489, "tcp"}, -{"tsilb", {NULL}, 2489, "udp"}, -{"qip-qdhcp", {NULL}, 2490, "tcp"}, -{"qip-qdhcp", {NULL}, 2490, "udp"}, -{"conclave-cpp", {NULL}, 2491, "tcp"}, -{"conclave-cpp", {NULL}, 2491, "udp"}, -{"groove", {NULL}, 2492, "tcp"}, -{"groove", {NULL}, 2492, "udp"}, -{"talarian-mqs", {NULL}, 2493, "tcp"}, -{"talarian-mqs", {NULL}, 2493, "udp"}, -{"bmc-ar", {NULL}, 2494, "tcp"}, -{"bmc-ar", {NULL}, 2494, "udp"}, -{"fast-rem-serv", {NULL}, 2495, "tcp"}, -{"fast-rem-serv", {NULL}, 2495, "udp"}, -{"dirgis", {NULL}, 2496, "tcp"}, -{"dirgis", {NULL}, 2496, "udp"}, -{"quaddb", {NULL}, 2497, "tcp"}, -{"quaddb", {NULL}, 2497, "udp"}, -{"odn-castraq", {NULL}, 2498, "tcp"}, -{"odn-castraq", {NULL}, 2498, "udp"}, -{"unicontrol", {NULL}, 2499, "tcp"}, -{"unicontrol", {NULL}, 2499, "udp"}, -{"rtsserv", {NULL}, 2500, "tcp"}, -{"rtsserv", {NULL}, 2500, "udp"}, -{"rtsclient", {NULL}, 2501, "tcp"}, -{"rtsclient", {NULL}, 2501, "udp"}, -{"kentrox-prot", {NULL}, 2502, "tcp"}, -{"kentrox-prot", {NULL}, 2502, "udp"}, -{"nms-dpnss", {NULL}, 2503, "tcp"}, -{"nms-dpnss", {NULL}, 2503, "udp"}, -{"wlbs", {NULL}, 2504, "tcp"}, -{"wlbs", {NULL}, 2504, "udp"}, -{"ppcontrol", {NULL}, 2505, "tcp"}, -{"ppcontrol", {NULL}, 2505, "udp"}, -{"jbroker", {NULL}, 2506, "tcp"}, -{"jbroker", {NULL}, 2506, "udp"}, -{"spock", {NULL}, 2507, "tcp"}, -{"spock", {NULL}, 2507, "udp"}, -{"jdatastore", {NULL}, 2508, "tcp"}, -{"jdatastore", {NULL}, 2508, "udp"}, -{"fjmpss", {NULL}, 2509, "tcp"}, -{"fjmpss", {NULL}, 2509, "udp"}, -{"fjappmgrbulk", {NULL}, 2510, "tcp"}, -{"fjappmgrbulk", {NULL}, 2510, "udp"}, -{"metastorm", {NULL}, 2511, "tcp"}, -{"metastorm", {NULL}, 2511, "udp"}, -{"citrixima", {NULL}, 2512, "tcp"}, -{"citrixima", {NULL}, 2512, "udp"}, -{"citrixadmin", {NULL}, 2513, "tcp"}, -{"citrixadmin", {NULL}, 2513, "udp"}, -{"facsys-ntp", {NULL}, 2514, "tcp"}, -{"facsys-ntp", {NULL}, 2514, "udp"}, -{"facsys-router", {NULL}, 2515, "tcp"}, -{"facsys-router", {NULL}, 2515, "udp"}, -{"maincontrol", {NULL}, 2516, "tcp"}, -{"maincontrol", {NULL}, 2516, "udp"}, -{"call-sig-trans", {NULL}, 2517, "tcp"}, -{"call-sig-trans", {NULL}, 2517, "udp"}, -{"willy", {NULL}, 2518, "tcp"}, -{"willy", {NULL}, 2518, "udp"}, -{"globmsgsvc", {NULL}, 2519, "tcp"}, -{"globmsgsvc", {NULL}, 2519, "udp"}, -{"pvsw", {NULL}, 2520, "tcp"}, -{"pvsw", {NULL}, 2520, "udp"}, -{"adaptecmgr", {NULL}, 2521, "tcp"}, -{"adaptecmgr", {NULL}, 2521, "udp"}, -{"windb", {NULL}, 2522, "tcp"}, -{"windb", {NULL}, 2522, "udp"}, -{"qke-llc-v3", {NULL}, 2523, "tcp"}, -{"qke-llc-v3", {NULL}, 2523, "udp"}, -{"optiwave-lm", {NULL}, 2524, "tcp"}, -{"optiwave-lm", {NULL}, 2524, "udp"}, -{"ms-v-worlds", {NULL}, 2525, "tcp"}, -{"ms-v-worlds", {NULL}, 2525, "udp"}, -{"ema-sent-lm", {NULL}, 2526, "tcp"}, -{"ema-sent-lm", {NULL}, 2526, "udp"}, -{"iqserver", {NULL}, 2527, "tcp"}, -{"iqserver", {NULL}, 2527, "udp"}, -{"ncr_ccl", {NULL}, 2528, "tcp"}, -{"ncr_ccl", {NULL}, 2528, "udp"}, -{"utsftp", {NULL}, 2529, "tcp"}, -{"utsftp", {NULL}, 2529, "udp"}, -{"vrcommerce", {NULL}, 2530, "tcp"}, -{"vrcommerce", {NULL}, 2530, "udp"}, -{"ito-e-gui", {NULL}, 2531, "tcp"}, -{"ito-e-gui", {NULL}, 2531, "udp"}, -{"ovtopmd", {NULL}, 2532, "tcp"}, -{"ovtopmd", {NULL}, 2532, "udp"}, -{"snifferserver", {NULL}, 2533, "tcp"}, -{"snifferserver", {NULL}, 2533, "udp"}, -{"combox-web-acc", {NULL}, 2534, "tcp"}, -{"combox-web-acc", {NULL}, 2534, "udp"}, -{"madcap", {NULL}, 2535, "tcp"}, -{"madcap", {NULL}, 2535, "udp"}, -{"btpp2audctr1", {NULL}, 2536, "tcp"}, -{"btpp2audctr1", {NULL}, 2536, "udp"}, -{"upgrade", {NULL}, 2537, "tcp"}, -{"upgrade", {NULL}, 2537, "udp"}, -{"vnwk-prapi", {NULL}, 2538, "tcp"}, -{"vnwk-prapi", {NULL}, 2538, "udp"}, -{"vsiadmin", {NULL}, 2539, "tcp"}, -{"vsiadmin", {NULL}, 2539, "udp"}, -{"lonworks", {NULL}, 2540, "tcp"}, -{"lonworks", {NULL}, 2540, "udp"}, -{"lonworks2", {NULL}, 2541, "tcp"}, -{"lonworks2", {NULL}, 2541, "udp"}, -{"udrawgraph", {NULL}, 2542, "tcp"}, -{"udrawgraph", {NULL}, 2542, "udp"}, -{"reftek", {NULL}, 2543, "tcp"}, -{"reftek", {NULL}, 2543, "udp"}, -{"novell-zen", {NULL}, 2544, "tcp"}, -{"novell-zen", {NULL}, 2544, "udp"}, -{"sis-emt", {NULL}, 2545, "tcp"}, -{"sis-emt", {NULL}, 2545, "udp"}, -{"vytalvaultbrtp", {NULL}, 2546, "tcp"}, -{"vytalvaultbrtp", {NULL}, 2546, "udp"}, -{"vytalvaultvsmp", {NULL}, 2547, "tcp"}, -{"vytalvaultvsmp", {NULL}, 2547, "udp"}, -{"vytalvaultpipe", {NULL}, 2548, "tcp"}, -{"vytalvaultpipe", {NULL}, 2548, "udp"}, -{"ipass", {NULL}, 2549, "tcp"}, -{"ipass", {NULL}, 2549, "udp"}, -{"ads", {NULL}, 2550, "tcp"}, -{"ads", {NULL}, 2550, "udp"}, -{"isg-uda-server", {NULL}, 2551, "tcp"}, -{"isg-uda-server", {NULL}, 2551, "udp"}, -{"call-logging", {NULL}, 2552, "tcp"}, -{"call-logging", {NULL}, 2552, "udp"}, -{"efidiningport", {NULL}, 2553, "tcp"}, -{"efidiningport", {NULL}, 2553, "udp"}, -{"vcnet-link-v10", {NULL}, 2554, "tcp"}, -{"vcnet-link-v10", {NULL}, 2554, "udp"}, -{"compaq-wcp", {NULL}, 2555, "tcp"}, -{"compaq-wcp", {NULL}, 2555, "udp"}, -{"nicetec-nmsvc", {NULL}, 2556, "tcp"}, -{"nicetec-nmsvc", {NULL}, 2556, "udp"}, -{"nicetec-mgmt", {NULL}, 2557, "tcp"}, -{"nicetec-mgmt", {NULL}, 2557, "udp"}, -{"pclemultimedia", {NULL}, 2558, "tcp"}, -{"pclemultimedia", {NULL}, 2558, "udp"}, -{"lstp", {NULL}, 2559, "tcp"}, -{"lstp", {NULL}, 2559, "udp"}, -{"labrat", {NULL}, 2560, "tcp"}, -{"labrat", {NULL}, 2560, "udp"}, -{"mosaixcc", {NULL}, 2561, "tcp"}, -{"mosaixcc", {NULL}, 2561, "udp"}, -{"delibo", {NULL}, 2562, "tcp"}, -{"delibo", {NULL}, 2562, "udp"}, -{"cti-redwood", {NULL}, 2563, "tcp"}, -{"cti-redwood", {NULL}, 2563, "udp"}, -{"hp-3000-telnet", {NULL}, 2564, "tcp"}, -{"coord-svr", {NULL}, 2565, "tcp"}, -{"coord-svr", {NULL}, 2565, "udp"}, -{"pcs-pcw", {NULL}, 2566, "tcp"}, -{"pcs-pcw", {NULL}, 2566, "udp"}, -{"clp", {NULL}, 2567, "tcp"}, -{"clp", {NULL}, 2567, "udp"}, -{"spamtrap", {NULL}, 2568, "tcp"}, -{"spamtrap", {NULL}, 2568, "udp"}, -{"sonuscallsig", {NULL}, 2569, "tcp"}, -{"sonuscallsig", {NULL}, 2569, "udp"}, -{"hs-port", {NULL}, 2570, "tcp"}, -{"hs-port", {NULL}, 2570, "udp"}, -{"cecsvc", {NULL}, 2571, "tcp"}, -{"cecsvc", {NULL}, 2571, "udp"}, -{"ibp", {NULL}, 2572, "tcp"}, -{"ibp", {NULL}, 2572, "udp"}, -{"trustestablish", {NULL}, 2573, "tcp"}, -{"trustestablish", {NULL}, 2573, "udp"}, -{"blockade-bpsp", {NULL}, 2574, "tcp"}, -{"blockade-bpsp", {NULL}, 2574, "udp"}, -{"hl7", {NULL}, 2575, "tcp"}, -{"hl7", {NULL}, 2575, "udp"}, -{"tclprodebugger", {NULL}, 2576, "tcp"}, -{"tclprodebugger", {NULL}, 2576, "udp"}, -{"scipticslsrvr", {NULL}, 2577, "tcp"}, -{"scipticslsrvr", {NULL}, 2577, "udp"}, -{"rvs-isdn-dcp", {NULL}, 2578, "tcp"}, -{"rvs-isdn-dcp", {NULL}, 2578, "udp"}, -{"mpfoncl", {NULL}, 2579, "tcp"}, -{"mpfoncl", {NULL}, 2579, "udp"}, -{"tributary", {NULL}, 2580, "tcp"}, -{"tributary", {NULL}, 2580, "udp"}, -{"argis-te", {NULL}, 2581, "tcp"}, -{"argis-te", {NULL}, 2581, "udp"}, -{"argis-ds", {NULL}, 2582, "tcp"}, -{"argis-ds", {NULL}, 2582, "udp"}, -{"mon", {NULL}, 2583, "tcp"}, -{"mon", {NULL}, 2583, "udp"}, -{"cyaserv", {NULL}, 2584, "tcp"}, -{"cyaserv", {NULL}, 2584, "udp"}, -{"netx-server", {NULL}, 2585, "tcp"}, -{"netx-server", {NULL}, 2585, "udp"}, -{"netx-agent", {NULL}, 2586, "tcp"}, -{"netx-agent", {NULL}, 2586, "udp"}, -{"masc", {NULL}, 2587, "tcp"}, -{"masc", {NULL}, 2587, "udp"}, -{"privilege", {NULL}, 2588, "tcp"}, -{"privilege", {NULL}, 2588, "udp"}, -{"quartus-tcl", {NULL}, 2589, "tcp"}, -{"quartus-tcl", {NULL}, 2589, "udp"}, -{"idotdist", {NULL}, 2590, "tcp"}, -{"idotdist", {NULL}, 2590, "udp"}, -{"maytagshuffle", {NULL}, 2591, "tcp"}, -{"maytagshuffle", {NULL}, 2591, "udp"}, -{"netrek", {NULL}, 2592, "tcp"}, -{"netrek", {NULL}, 2592, "udp"}, -{"mns-mail", {NULL}, 2593, "tcp"}, -{"mns-mail", {NULL}, 2593, "udp"}, -{"dts", {NULL}, 2594, "tcp"}, -{"dts", {NULL}, 2594, "udp"}, -{"worldfusion1", {NULL}, 2595, "tcp"}, -{"worldfusion1", {NULL}, 2595, "udp"}, -{"worldfusion2", {NULL}, 2596, "tcp"}, -{"worldfusion2", {NULL}, 2596, "udp"}, -{"homesteadglory", {NULL}, 2597, "tcp"}, -{"homesteadglory", {NULL}, 2597, "udp"}, -{"citriximaclient", {NULL}, 2598, "tcp"}, -{"citriximaclient", {NULL}, 2598, "udp"}, -{"snapd", {NULL}, 2599, "tcp"}, -{"snapd", {NULL}, 2599, "udp"}, -{"hpstgmgr", {NULL}, 2600, "tcp"}, -{"hpstgmgr", {NULL}, 2600, "udp"}, -{"discp-client", {NULL}, 2601, "tcp"}, -{"discp-client", {NULL}, 2601, "udp"}, -{"discp-server", {NULL}, 2602, "tcp"}, -{"discp-server", {NULL}, 2602, "udp"}, -{"servicemeter", {NULL}, 2603, "tcp"}, -{"servicemeter", {NULL}, 2603, "udp"}, -{"nsc-ccs", {NULL}, 2604, "tcp"}, -{"nsc-ccs", {NULL}, 2604, "udp"}, -{"nsc-posa", {NULL}, 2605, "tcp"}, -{"nsc-posa", {NULL}, 2605, "udp"}, -{"netmon", {NULL}, 2606, "tcp"}, -{"netmon", {NULL}, 2606, "udp"}, -{"connection", {NULL}, 2607, "tcp"}, -{"connection", {NULL}, 2607, "udp"}, -{"wag-service", {NULL}, 2608, "tcp"}, -{"wag-service", {NULL}, 2608, "udp"}, -{"system-monitor", {NULL}, 2609, "tcp"}, -{"system-monitor", {NULL}, 2609, "udp"}, -{"versa-tek", {NULL}, 2610, "tcp"}, -{"versa-tek", {NULL}, 2610, "udp"}, -{"lionhead", {NULL}, 2611, "tcp"}, -{"lionhead", {NULL}, 2611, "udp"}, -{"qpasa-agent", {NULL}, 2612, "tcp"}, -{"qpasa-agent", {NULL}, 2612, "udp"}, -{"smntubootstrap", {NULL}, 2613, "tcp"}, -{"smntubootstrap", {NULL}, 2613, "udp"}, -{"neveroffline", {NULL}, 2614, "tcp"}, -{"neveroffline", {NULL}, 2614, "udp"}, -{"firepower", {NULL}, 2615, "tcp"}, -{"firepower", {NULL}, 2615, "udp"}, -{"appswitch-emp", {NULL}, 2616, "tcp"}, -{"appswitch-emp", {NULL}, 2616, "udp"}, -{"cmadmin", {NULL}, 2617, "tcp"}, -{"cmadmin", {NULL}, 2617, "udp"}, -{"priority-e-com", {NULL}, 2618, "tcp"}, -{"priority-e-com", {NULL}, 2618, "udp"}, -{"bruce", {NULL}, 2619, "tcp"}, -{"bruce", {NULL}, 2619, "udp"}, -{"lpsrecommender", {NULL}, 2620, "tcp"}, -{"lpsrecommender", {NULL}, 2620, "udp"}, -{"miles-apart", {NULL}, 2621, "tcp"}, -{"miles-apart", {NULL}, 2621, "udp"}, -{"metricadbc", {NULL}, 2622, "tcp"}, -{"metricadbc", {NULL}, 2622, "udp"}, -{"lmdp", {NULL}, 2623, "tcp"}, -{"lmdp", {NULL}, 2623, "udp"}, -{"aria", {NULL}, 2624, "tcp"}, -{"aria", {NULL}, 2624, "udp"}, -{"blwnkl-port", {NULL}, 2625, "tcp"}, -{"blwnkl-port", {NULL}, 2625, "udp"}, -{"gbjd816", {NULL}, 2626, "tcp"}, -{"gbjd816", {NULL}, 2626, "udp"}, -{"moshebeeri", {NULL}, 2627, "tcp"}, -{"moshebeeri", {NULL}, 2627, "udp"}, -{"dict", {NULL}, 2628, "tcp"}, -{"dict", {NULL}, 2628, "udp"}, -{"sitaraserver", {NULL}, 2629, "tcp"}, -{"sitaraserver", {NULL}, 2629, "udp"}, -{"sitaramgmt", {NULL}, 2630, "tcp"}, -{"sitaramgmt", {NULL}, 2630, "udp"}, -{"sitaradir", {NULL}, 2631, "tcp"}, -{"sitaradir", {NULL}, 2631, "udp"}, -{"irdg-post", {NULL}, 2632, "tcp"}, -{"irdg-post", {NULL}, 2632, "udp"}, -{"interintelli", {NULL}, 2633, "tcp"}, -{"interintelli", {NULL}, 2633, "udp"}, -{"pk-electronics", {NULL}, 2634, "tcp"}, -{"pk-electronics", {NULL}, 2634, "udp"}, -{"backburner", {NULL}, 2635, "tcp"}, -{"backburner", {NULL}, 2635, "udp"}, -{"solve", {NULL}, 2636, "tcp"}, -{"solve", {NULL}, 2636, "udp"}, -{"imdocsvc", {NULL}, 2637, "tcp"}, -{"imdocsvc", {NULL}, 2637, "udp"}, -{"sybaseanywhere", {NULL}, 2638, "tcp"}, -{"sybaseanywhere", {NULL}, 2638, "udp"}, -{"aminet", {NULL}, 2639, "tcp"}, -{"aminet", {NULL}, 2639, "udp"}, -{"sai_sentlm", {NULL}, 2640, "tcp"}, -{"sai_sentlm", {NULL}, 2640, "udp"}, -{"hdl-srv", {NULL}, 2641, "tcp"}, -{"hdl-srv", {NULL}, 2641, "udp"}, -{"tragic", {NULL}, 2642, "tcp"}, -{"tragic", {NULL}, 2642, "udp"}, -{"gte-samp", {NULL}, 2643, "tcp"}, -{"gte-samp", {NULL}, 2643, "udp"}, -{"travsoft-ipx-t", {NULL}, 2644, "tcp"}, -{"travsoft-ipx-t", {NULL}, 2644, "udp"}, -{"novell-ipx-cmd", {NULL}, 2645, "tcp"}, -{"novell-ipx-cmd", {NULL}, 2645, "udp"}, -{"and-lm", {NULL}, 2646, "tcp"}, -{"and-lm", {NULL}, 2646, "udp"}, -{"syncserver", {NULL}, 2647, "tcp"}, -{"syncserver", {NULL}, 2647, "udp"}, -{"upsnotifyprot", {NULL}, 2648, "tcp"}, -{"upsnotifyprot", {NULL}, 2648, "udp"}, -{"vpsipport", {NULL}, 2649, "tcp"}, -{"vpsipport", {NULL}, 2649, "udp"}, -{"eristwoguns", {NULL}, 2650, "tcp"}, -{"eristwoguns", {NULL}, 2650, "udp"}, -{"ebinsite", {NULL}, 2651, "tcp"}, -{"ebinsite", {NULL}, 2651, "udp"}, -{"interpathpanel", {NULL}, 2652, "tcp"}, -{"interpathpanel", {NULL}, 2652, "udp"}, -{"sonus", {NULL}, 2653, "tcp"}, -{"sonus", {NULL}, 2653, "udp"}, -{"corel_vncadmin", {NULL}, 2654, "tcp"}, -{"corel_vncadmin", {NULL}, 2654, "udp"}, -{"unglue", {NULL}, 2655, "tcp"}, -{"unglue", {NULL}, 2655, "udp"}, -{"kana", {NULL}, 2656, "tcp"}, -{"kana", {NULL}, 2656, "udp"}, -{"sns-dispatcher", {NULL}, 2657, "tcp"}, -{"sns-dispatcher", {NULL}, 2657, "udp"}, -{"sns-admin", {NULL}, 2658, "tcp"}, -{"sns-admin", {NULL}, 2658, "udp"}, -{"sns-query", {NULL}, 2659, "tcp"}, -{"sns-query", {NULL}, 2659, "udp"}, -{"gcmonitor", {NULL}, 2660, "tcp"}, -{"gcmonitor", {NULL}, 2660, "udp"}, -{"olhost", {NULL}, 2661, "tcp"}, -{"olhost", {NULL}, 2661, "udp"}, -{"bintec-capi", {NULL}, 2662, "tcp"}, -{"bintec-capi", {NULL}, 2662, "udp"}, -{"bintec-tapi", {NULL}, 2663, "tcp"}, -{"bintec-tapi", {NULL}, 2663, "udp"}, -{"patrol-mq-gm", {NULL}, 2664, "tcp"}, -{"patrol-mq-gm", {NULL}, 2664, "udp"}, -{"patrol-mq-nm", {NULL}, 2665, "tcp"}, -{"patrol-mq-nm", {NULL}, 2665, "udp"}, -{"extensis", {NULL}, 2666, "tcp"}, -{"extensis", {NULL}, 2666, "udp"}, -{"alarm-clock-s", {NULL}, 2667, "tcp"}, -{"alarm-clock-s", {NULL}, 2667, "udp"}, -{"alarm-clock-c", {NULL}, 2668, "tcp"}, -{"alarm-clock-c", {NULL}, 2668, "udp"}, -{"toad", {NULL}, 2669, "tcp"}, -{"toad", {NULL}, 2669, "udp"}, -{"tve-announce", {NULL}, 2670, "tcp"}, -{"tve-announce", {NULL}, 2670, "udp"}, -{"newlixreg", {NULL}, 2671, "tcp"}, -{"newlixreg", {NULL}, 2671, "udp"}, -{"nhserver", {NULL}, 2672, "tcp"}, -{"nhserver", {NULL}, 2672, "udp"}, -{"firstcall42", {NULL}, 2673, "tcp"}, -{"firstcall42", {NULL}, 2673, "udp"}, -{"ewnn", {NULL}, 2674, "tcp"}, -{"ewnn", {NULL}, 2674, "udp"}, -{"ttc-etap", {NULL}, 2675, "tcp"}, -{"ttc-etap", {NULL}, 2675, "udp"}, -{"simslink", {NULL}, 2676, "tcp"}, -{"simslink", {NULL}, 2676, "udp"}, -{"gadgetgate1way", {NULL}, 2677, "tcp"}, -{"gadgetgate1way", {NULL}, 2677, "udp"}, -{"gadgetgate2way", {NULL}, 2678, "tcp"}, -{"gadgetgate2way", {NULL}, 2678, "udp"}, -{"syncserverssl", {NULL}, 2679, "tcp"}, -{"syncserverssl", {NULL}, 2679, "udp"}, -{"pxc-sapxom", {NULL}, 2680, "tcp"}, -{"pxc-sapxom", {NULL}, 2680, "udp"}, -{"mpnjsomb", {NULL}, 2681, "tcp"}, -{"mpnjsomb", {NULL}, 2681, "udp"}, -{"ncdloadbalance", {NULL}, 2683, "tcp"}, -{"ncdloadbalance", {NULL}, 2683, "udp"}, -{"mpnjsosv", {NULL}, 2684, "tcp"}, -{"mpnjsosv", {NULL}, 2684, "udp"}, -{"mpnjsocl", {NULL}, 2685, "tcp"}, -{"mpnjsocl", {NULL}, 2685, "udp"}, -{"mpnjsomg", {NULL}, 2686, "tcp"}, -{"mpnjsomg", {NULL}, 2686, "udp"}, -{"pq-lic-mgmt", {NULL}, 2687, "tcp"}, -{"pq-lic-mgmt", {NULL}, 2687, "udp"}, -{"md-cg-http", {NULL}, 2688, "tcp"}, -{"md-cg-http", {NULL}, 2688, "udp"}, -{"fastlynx", {NULL}, 2689, "tcp"}, -{"fastlynx", {NULL}, 2689, "udp"}, -{"hp-nnm-data", {NULL}, 2690, "tcp"}, -{"hp-nnm-data", {NULL}, 2690, "udp"}, -{"itinternet", {NULL}, 2691, "tcp"}, -{"itinternet", {NULL}, 2691, "udp"}, -{"admins-lms", {NULL}, 2692, "tcp"}, -{"admins-lms", {NULL}, 2692, "udp"}, -{"pwrsevent", {NULL}, 2694, "tcp"}, -{"pwrsevent", {NULL}, 2694, "udp"}, -{"vspread", {NULL}, 2695, "tcp"}, -{"vspread", {NULL}, 2695, "udp"}, -{"unifyadmin", {NULL}, 2696, "tcp"}, -{"unifyadmin", {NULL}, 2696, "udp"}, -{"oce-snmp-trap", {NULL}, 2697, "tcp"}, -{"oce-snmp-trap", {NULL}, 2697, "udp"}, -{"mck-ivpip", {NULL}, 2698, "tcp"}, -{"mck-ivpip", {NULL}, 2698, "udp"}, -{"csoft-plusclnt", {NULL}, 2699, "tcp"}, -{"csoft-plusclnt", {NULL}, 2699, "udp"}, -{"tqdata", {NULL}, 2700, "tcp"}, -{"tqdata", {NULL}, 2700, "udp"}, -{"sms-rcinfo", {NULL}, 2701, "tcp"}, -{"sms-rcinfo", {NULL}, 2701, "udp"}, -{"sms-xfer", {NULL}, 2702, "tcp"}, -{"sms-xfer", {NULL}, 2702, "udp"}, -{"sms-chat", {NULL}, 2703, "tcp"}, -{"sms-chat", {NULL}, 2703, "udp"}, -{"sms-remctrl", {NULL}, 2704, "tcp"}, -{"sms-remctrl", {NULL}, 2704, "udp"}, -{"sds-admin", {NULL}, 2705, "tcp"}, -{"sds-admin", {NULL}, 2705, "udp"}, -{"ncdmirroring", {NULL}, 2706, "tcp"}, -{"ncdmirroring", {NULL}, 2706, "udp"}, -{"emcsymapiport", {NULL}, 2707, "tcp"}, -{"emcsymapiport", {NULL}, 2707, "udp"}, -{"banyan-net", {NULL}, 2708, "tcp"}, -{"banyan-net", {NULL}, 2708, "udp"}, -{"supermon", {NULL}, 2709, "tcp"}, -{"supermon", {NULL}, 2709, "udp"}, -{"sso-service", {NULL}, 2710, "tcp"}, -{"sso-service", {NULL}, 2710, "udp"}, -{"sso-control", {NULL}, 2711, "tcp"}, -{"sso-control", {NULL}, 2711, "udp"}, -{"aocp", {NULL}, 2712, "tcp"}, -{"aocp", {NULL}, 2712, "udp"}, -{"raventbs", {NULL}, 2713, "tcp"}, -{"raventbs", {NULL}, 2713, "udp"}, -{"raventdm", {NULL}, 2714, "tcp"}, -{"raventdm", {NULL}, 2714, "udp"}, -{"hpstgmgr2", {NULL}, 2715, "tcp"}, -{"hpstgmgr2", {NULL}, 2715, "udp"}, -{"inova-ip-disco", {NULL}, 2716, "tcp"}, -{"inova-ip-disco", {NULL}, 2716, "udp"}, -{"pn-requester", {NULL}, 2717, "tcp"}, -{"pn-requester", {NULL}, 2717, "udp"}, -{"pn-requester2", {NULL}, 2718, "tcp"}, -{"pn-requester2", {NULL}, 2718, "udp"}, -{"scan-change", {NULL}, 2719, "tcp"}, -{"scan-change", {NULL}, 2719, "udp"}, -{"wkars", {NULL}, 2720, "tcp"}, -{"wkars", {NULL}, 2720, "udp"}, -{"smart-diagnose", {NULL}, 2721, "tcp"}, -{"smart-diagnose", {NULL}, 2721, "udp"}, -{"proactivesrvr", {NULL}, 2722, "tcp"}, -{"proactivesrvr", {NULL}, 2722, "udp"}, -{"watchdog-nt", {NULL}, 2723, "tcp"}, -{"watchdog-nt", {NULL}, 2723, "udp"}, -{"qotps", {NULL}, 2724, "tcp"}, -{"qotps", {NULL}, 2724, "udp"}, -{"msolap-ptp2", {NULL}, 2725, "tcp"}, -{"msolap-ptp2", {NULL}, 2725, "udp"}, -{"tams", {NULL}, 2726, "tcp"}, -{"tams", {NULL}, 2726, "udp"}, -{"mgcp-callagent", {NULL}, 2727, "tcp"}, -{"mgcp-callagent", {NULL}, 2727, "udp"}, -{"sqdr", {NULL}, 2728, "tcp"}, -{"sqdr", {NULL}, 2728, "udp"}, -{"tcim-control", {NULL}, 2729, "tcp"}, -{"tcim-control", {NULL}, 2729, "udp"}, -{"nec-raidplus", {NULL}, 2730, "tcp"}, -{"nec-raidplus", {NULL}, 2730, "udp"}, -{"fyre-messanger", {NULL}, 2731, "tcp"}, -{"fyre-messanger", {NULL}, 2731, "udp"}, -{"g5m", {NULL}, 2732, "tcp"}, -{"g5m", {NULL}, 2732, "udp"}, -{"signet-ctf", {NULL}, 2733, "tcp"}, -{"signet-ctf", {NULL}, 2733, "udp"}, -{"ccs-software", {NULL}, 2734, "tcp"}, -{"ccs-software", {NULL}, 2734, "udp"}, -{"netiq-mc", {NULL}, 2735, "tcp"}, -{"netiq-mc", {NULL}, 2735, "udp"}, -{"radwiz-nms-srv", {NULL}, 2736, "tcp"}, -{"radwiz-nms-srv", {NULL}, 2736, "udp"}, -{"srp-feedback", {NULL}, 2737, "tcp"}, -{"srp-feedback", {NULL}, 2737, "udp"}, -{"ndl-tcp-ois-gw", {NULL}, 2738, "tcp"}, -{"ndl-tcp-ois-gw", {NULL}, 2738, "udp"}, -{"tn-timing", {NULL}, 2739, "tcp"}, -{"tn-timing", {NULL}, 2739, "udp"}, -{"alarm", {NULL}, 2740, "tcp"}, -{"alarm", {NULL}, 2740, "udp"}, -{"tsb", {NULL}, 2741, "tcp"}, -{"tsb", {NULL}, 2741, "udp"}, -{"tsb2", {NULL}, 2742, "tcp"}, -{"tsb2", {NULL}, 2742, "udp"}, -{"murx", {NULL}, 2743, "tcp"}, -{"murx", {NULL}, 2743, "udp"}, -{"honyaku", {NULL}, 2744, "tcp"}, -{"honyaku", {NULL}, 2744, "udp"}, -{"urbisnet", {NULL}, 2745, "tcp"}, -{"urbisnet", {NULL}, 2745, "udp"}, -{"cpudpencap", {NULL}, 2746, "tcp"}, -{"cpudpencap", {NULL}, 2746, "udp"}, -{"fjippol-swrly", {NULL}, 2747, "tcp"}, -{"fjippol-swrly", {NULL}, 2747, "udp"}, -{"fjippol-polsvr", {NULL}, 2748, "tcp"}, -{"fjippol-polsvr", {NULL}, 2748, "udp"}, -{"fjippol-cnsl", {NULL}, 2749, "tcp"}, -{"fjippol-cnsl", {NULL}, 2749, "udp"}, -{"fjippol-port1", {NULL}, 2750, "tcp"}, -{"fjippol-port1", {NULL}, 2750, "udp"}, -{"fjippol-port2", {NULL}, 2751, "tcp"}, -{"fjippol-port2", {NULL}, 2751, "udp"}, -{"rsisysaccess", {NULL}, 2752, "tcp"}, -{"rsisysaccess", {NULL}, 2752, "udp"}, -{"de-spot", {NULL}, 2753, "tcp"}, -{"de-spot", {NULL}, 2753, "udp"}, -{"apollo-cc", {NULL}, 2754, "tcp"}, -{"apollo-cc", {NULL}, 2754, "udp"}, -{"expresspay", {NULL}, 2755, "tcp"}, -{"expresspay", {NULL}, 2755, "udp"}, -{"simplement-tie", {NULL}, 2756, "tcp"}, -{"simplement-tie", {NULL}, 2756, "udp"}, -{"cnrp", {NULL}, 2757, "tcp"}, -{"cnrp", {NULL}, 2757, "udp"}, -{"apollo-status", {NULL}, 2758, "tcp"}, -{"apollo-status", {NULL}, 2758, "udp"}, -{"apollo-gms", {NULL}, 2759, "tcp"}, -{"apollo-gms", {NULL}, 2759, "udp"}, -{"sabams", {NULL}, 2760, "tcp"}, -{"sabams", {NULL}, 2760, "udp"}, -{"dicom-iscl", {NULL}, 2761, "tcp"}, -{"dicom-iscl", {NULL}, 2761, "udp"}, -{"dicom-tls", {NULL}, 2762, "tcp"}, -{"dicom-tls", {NULL}, 2762, "udp"}, -{"desktop-dna", {NULL}, 2763, "tcp"}, -{"desktop-dna", {NULL}, 2763, "udp"}, -{"data-insurance", {NULL}, 2764, "tcp"}, -{"data-insurance", {NULL}, 2764, "udp"}, -{"qip-audup", {NULL}, 2765, "tcp"}, -{"qip-audup", {NULL}, 2765, "udp"}, -{"compaq-scp", {NULL}, 2766, "tcp"}, -{"compaq-scp", {NULL}, 2766, "udp"}, -{"uadtc", {NULL}, 2767, "tcp"}, -{"uadtc", {NULL}, 2767, "udp"}, -{"uacs", {NULL}, 2768, "tcp"}, -{"uacs", {NULL}, 2768, "udp"}, -{"exce", {NULL}, 2769, "tcp"}, -{"exce", {NULL}, 2769, "udp"}, -{"veronica", {NULL}, 2770, "tcp"}, -{"veronica", {NULL}, 2770, "udp"}, -{"vergencecm", {NULL}, 2771, "tcp"}, -{"vergencecm", {NULL}, 2771, "udp"}, -{"auris", {NULL}, 2772, "tcp"}, -{"auris", {NULL}, 2772, "udp"}, -{"rbakcup1", {NULL}, 2773, "tcp"}, -{"rbakcup1", {NULL}, 2773, "udp"}, -{"rbakcup2", {NULL}, 2774, "tcp"}, -{"rbakcup2", {NULL}, 2774, "udp"}, -{"smpp", {NULL}, 2775, "tcp"}, -{"smpp", {NULL}, 2775, "udp"}, -{"ridgeway1", {NULL}, 2776, "tcp"}, -{"ridgeway1", {NULL}, 2776, "udp"}, -{"ridgeway2", {NULL}, 2777, "tcp"}, -{"ridgeway2", {NULL}, 2777, "udp"}, -{"gwen-sonya", {NULL}, 2778, "tcp"}, -{"gwen-sonya", {NULL}, 2778, "udp"}, -{"lbc-sync", {NULL}, 2779, "tcp"}, -{"lbc-sync", {NULL}, 2779, "udp"}, -{"lbc-control", {NULL}, 2780, "tcp"}, -{"lbc-control", {NULL}, 2780, "udp"}, -{"whosells", {NULL}, 2781, "tcp"}, -{"whosells", {NULL}, 2781, "udp"}, -{"everydayrc", {NULL}, 2782, "tcp"}, -{"everydayrc", {NULL}, 2782, "udp"}, -{"aises", {NULL}, 2783, "tcp"}, -{"aises", {NULL}, 2783, "udp"}, -{"www-dev", {NULL}, 2784, "tcp"}, -{"www-dev", {NULL}, 2784, "udp"}, -{"aic-np", {NULL}, 2785, "tcp"}, -{"aic-np", {NULL}, 2785, "udp"}, -{"aic-oncrpc", {NULL}, 2786, "tcp"}, -{"aic-oncrpc", {NULL}, 2786, "udp"}, -{"piccolo", {NULL}, 2787, "tcp"}, -{"piccolo", {NULL}, 2787, "udp"}, -{"fryeserv", {NULL}, 2788, "tcp"}, -{"fryeserv", {NULL}, 2788, "udp"}, -{"media-agent", {NULL}, 2789, "tcp"}, -{"media-agent", {NULL}, 2789, "udp"}, -{"plgproxy", {NULL}, 2790, "tcp"}, -{"plgproxy", {NULL}, 2790, "udp"}, -{"mtport-regist", {NULL}, 2791, "tcp"}, -{"mtport-regist", {NULL}, 2791, "udp"}, -{"f5-globalsite", {NULL}, 2792, "tcp"}, -{"f5-globalsite", {NULL}, 2792, "udp"}, -{"initlsmsad", {NULL}, 2793, "tcp"}, -{"initlsmsad", {NULL}, 2793, "udp"}, -{"livestats", {NULL}, 2795, "tcp"}, -{"livestats", {NULL}, 2795, "udp"}, -{"ac-tech", {NULL}, 2796, "tcp"}, -{"ac-tech", {NULL}, 2796, "udp"}, -{"esp-encap", {NULL}, 2797, "tcp"}, -{"esp-encap", {NULL}, 2797, "udp"}, -{"tmesis-upshot", {NULL}, 2798, "tcp"}, -{"tmesis-upshot", {NULL}, 2798, "udp"}, -{"icon-discover", {NULL}, 2799, "tcp"}, -{"icon-discover", {NULL}, 2799, "udp"}, -{"acc-raid", {NULL}, 2800, "tcp"}, -{"acc-raid", {NULL}, 2800, "udp"}, -{"igcp", {NULL}, 2801, "tcp"}, -{"igcp", {NULL}, 2801, "udp"}, -{"veritas-tcp1", {NULL}, 2802, "tcp"}, -{"veritas-udp1", {NULL}, 2802, "udp"}, -{"btprjctrl", {NULL}, 2803, "tcp"}, -{"btprjctrl", {NULL}, 2803, "udp"}, -{"dvr-esm", {NULL}, 2804, "tcp"}, -{"dvr-esm", {NULL}, 2804, "udp"}, -{"wta-wsp-s", {NULL}, 2805, "tcp"}, -{"wta-wsp-s", {NULL}, 2805, "udp"}, -{"cspuni", {NULL}, 2806, "tcp"}, -{"cspuni", {NULL}, 2806, "udp"}, -{"cspmulti", {NULL}, 2807, "tcp"}, -{"cspmulti", {NULL}, 2807, "udp"}, -{"j-lan-p", {NULL}, 2808, "tcp"}, -{"j-lan-p", {NULL}, 2808, "udp"}, -{"corbaloc", {NULL}, 2809, "tcp"}, -{"corbaloc", {NULL}, 2809, "udp"}, -{"netsteward", {NULL}, 2810, "tcp"}, -{"netsteward", {NULL}, 2810, "udp"}, -{"gsiftp", {NULL}, 2811, "tcp"}, -{"gsiftp", {NULL}, 2811, "udp"}, -{"atmtcp", {NULL}, 2812, "tcp"}, -{"atmtcp", {NULL}, 2812, "udp"}, -{"llm-pass", {NULL}, 2813, "tcp"}, -{"llm-pass", {NULL}, 2813, "udp"}, -{"llm-csv", {NULL}, 2814, "tcp"}, -{"llm-csv", {NULL}, 2814, "udp"}, -{"lbc-measure", {NULL}, 2815, "tcp"}, -{"lbc-measure", {NULL}, 2815, "udp"}, -{"lbc-watchdog", {NULL}, 2816, "tcp"}, -{"lbc-watchdog", {NULL}, 2816, "udp"}, -{"nmsigport", {NULL}, 2817, "tcp"}, -{"nmsigport", {NULL}, 2817, "udp"}, -{"rmlnk", {NULL}, 2818, "tcp"}, -{"rmlnk", {NULL}, 2818, "udp"}, -{"fc-faultnotify", {NULL}, 2819, "tcp"}, -{"fc-faultnotify", {NULL}, 2819, "udp"}, -{"univision", {NULL}, 2820, "tcp"}, -{"univision", {NULL}, 2820, "udp"}, -{"vrts-at-port", {NULL}, 2821, "tcp"}, -{"vrts-at-port", {NULL}, 2821, "udp"}, -{"ka0wuc", {NULL}, 2822, "tcp"}, -{"ka0wuc", {NULL}, 2822, "udp"}, -{"cqg-netlan", {NULL}, 2823, "tcp"}, -{"cqg-netlan", {NULL}, 2823, "udp"}, -{"cqg-netlan-1", {NULL}, 2824, "tcp"}, -{"cqg-netlan-1", {NULL}, 2824, "udp"}, -{"slc-systemlog", {NULL}, 2826, "tcp"}, -{"slc-systemlog", {NULL}, 2826, "udp"}, -{"slc-ctrlrloops", {NULL}, 2827, "tcp"}, -{"slc-ctrlrloops", {NULL}, 2827, "udp"}, -{"itm-lm", {NULL}, 2828, "tcp"}, -{"itm-lm", {NULL}, 2828, "udp"}, -{"silkp1", {NULL}, 2829, "tcp"}, -{"silkp1", {NULL}, 2829, "udp"}, -{"silkp2", {NULL}, 2830, "tcp"}, -{"silkp2", {NULL}, 2830, "udp"}, -{"silkp3", {NULL}, 2831, "tcp"}, -{"silkp3", {NULL}, 2831, "udp"}, -{"silkp4", {NULL}, 2832, "tcp"}, -{"silkp4", {NULL}, 2832, "udp"}, -{"glishd", {NULL}, 2833, "tcp"}, -{"glishd", {NULL}, 2833, "udp"}, -{"evtp", {NULL}, 2834, "tcp"}, -{"evtp", {NULL}, 2834, "udp"}, -{"evtp-data", {NULL}, 2835, "tcp"}, -{"evtp-data", {NULL}, 2835, "udp"}, -{"catalyst", {NULL}, 2836, "tcp"}, -{"catalyst", {NULL}, 2836, "udp"}, -{"repliweb", {NULL}, 2837, "tcp"}, -{"repliweb", {NULL}, 2837, "udp"}, -{"starbot", {NULL}, 2838, "tcp"}, -{"starbot", {NULL}, 2838, "udp"}, -{"nmsigport", {NULL}, 2839, "tcp"}, -{"nmsigport", {NULL}, 2839, "udp"}, -{"l3-exprt", {NULL}, 2840, "tcp"}, -{"l3-exprt", {NULL}, 2840, "udp"}, -{"l3-ranger", {NULL}, 2841, "tcp"}, -{"l3-ranger", {NULL}, 2841, "udp"}, -{"l3-hawk", {NULL}, 2842, "tcp"}, -{"l3-hawk", {NULL}, 2842, "udp"}, -{"pdnet", {NULL}, 2843, "tcp"}, -{"pdnet", {NULL}, 2843, "udp"}, -{"bpcp-poll", {NULL}, 2844, "tcp"}, -{"bpcp-poll", {NULL}, 2844, "udp"}, -{"bpcp-trap", {NULL}, 2845, "tcp"}, -{"bpcp-trap", {NULL}, 2845, "udp"}, -{"aimpp-hello", {NULL}, 2846, "tcp"}, -{"aimpp-hello", {NULL}, 2846, "udp"}, -{"aimpp-port-req", {NULL}, 2847, "tcp"}, -{"aimpp-port-req", {NULL}, 2847, "udp"}, -{"amt-blc-port", {NULL}, 2848, "tcp"}, -{"amt-blc-port", {NULL}, 2848, "udp"}, -{"fxp", {NULL}, 2849, "tcp"}, -{"fxp", {NULL}, 2849, "udp"}, -{"metaconsole", {NULL}, 2850, "tcp"}, -{"metaconsole", {NULL}, 2850, "udp"}, -{"webemshttp", {NULL}, 2851, "tcp"}, -{"webemshttp", {NULL}, 2851, "udp"}, -{"bears-01", {NULL}, 2852, "tcp"}, -{"bears-01", {NULL}, 2852, "udp"}, -{"ispipes", {NULL}, 2853, "tcp"}, -{"ispipes", {NULL}, 2853, "udp"}, -{"infomover", {NULL}, 2854, "tcp"}, -{"infomover", {NULL}, 2854, "udp"}, -{"msrp", {NULL}, 2855, "tcp"}, -{"msrp", {NULL}, 2855, "udp"}, -{"cesdinv", {NULL}, 2856, "tcp"}, -{"cesdinv", {NULL}, 2856, "udp"}, -{"simctlp", {NULL}, 2857, "tcp"}, -{"simctlp", {NULL}, 2857, "udp"}, -{"ecnp", {NULL}, 2858, "tcp"}, -{"ecnp", {NULL}, 2858, "udp"}, -{"activememory", {NULL}, 2859, "tcp"}, -{"activememory", {NULL}, 2859, "udp"}, -{"dialpad-voice1", {NULL}, 2860, "tcp"}, -{"dialpad-voice1", {NULL}, 2860, "udp"}, -{"dialpad-voice2", {NULL}, 2861, "tcp"}, -{"dialpad-voice2", {NULL}, 2861, "udp"}, -{"ttg-protocol", {NULL}, 2862, "tcp"}, -{"ttg-protocol", {NULL}, 2862, "udp"}, -{"sonardata", {NULL}, 2863, "tcp"}, -{"sonardata", {NULL}, 2863, "udp"}, -{"astromed-main", {NULL}, 2864, "tcp"}, -{"astromed-main", {NULL}, 2864, "udp"}, -{"pit-vpn", {NULL}, 2865, "tcp"}, -{"pit-vpn", {NULL}, 2865, "udp"}, -{"iwlistener", {NULL}, 2866, "tcp"}, -{"iwlistener", {NULL}, 2866, "udp"}, -{"esps-portal", {NULL}, 2867, "tcp"}, -{"esps-portal", {NULL}, 2867, "udp"}, -{"npep-messaging", {NULL}, 2868, "tcp"}, -{"npep-messaging", {NULL}, 2868, "udp"}, -{"icslap", {NULL}, 2869, "tcp"}, -{"icslap", {NULL}, 2869, "udp"}, -{"daishi", {NULL}, 2870, "tcp"}, -{"daishi", {NULL}, 2870, "udp"}, -{"msi-selectplay", {NULL}, 2871, "tcp"}, -{"msi-selectplay", {NULL}, 2871, "udp"}, -{"radix", {NULL}, 2872, "tcp"}, -{"radix", {NULL}, 2872, "udp"}, -{"dxmessagebase1", {NULL}, 2874, "tcp"}, -{"dxmessagebase1", {NULL}, 2874, "udp"}, -{"dxmessagebase2", {NULL}, 2875, "tcp"}, -{"dxmessagebase2", {NULL}, 2875, "udp"}, -{"sps-tunnel", {NULL}, 2876, "tcp"}, -{"sps-tunnel", {NULL}, 2876, "udp"}, -{"bluelance", {NULL}, 2877, "tcp"}, -{"bluelance", {NULL}, 2877, "udp"}, -{"aap", {NULL}, 2878, "tcp"}, -{"aap", {NULL}, 2878, "udp"}, -{"ucentric-ds", {NULL}, 2879, "tcp"}, -{"ucentric-ds", {NULL}, 2879, "udp"}, -{"synapse", {NULL}, 2880, "tcp"}, -{"synapse", {NULL}, 2880, "udp"}, -{"ndsp", {NULL}, 2881, "tcp"}, -{"ndsp", {NULL}, 2881, "udp"}, -{"ndtp", {NULL}, 2882, "tcp"}, -{"ndtp", {NULL}, 2882, "udp"}, -{"ndnp", {NULL}, 2883, "tcp"}, -{"ndnp", {NULL}, 2883, "udp"}, -{"flashmsg", {NULL}, 2884, "tcp"}, -{"flashmsg", {NULL}, 2884, "udp"}, -{"topflow", {NULL}, 2885, "tcp"}, -{"topflow", {NULL}, 2885, "udp"}, -{"responselogic", {NULL}, 2886, "tcp"}, -{"responselogic", {NULL}, 2886, "udp"}, -{"aironetddp", {NULL}, 2887, "tcp"}, -{"aironetddp", {NULL}, 2887, "udp"}, -{"spcsdlobby", {NULL}, 2888, "tcp"}, -{"spcsdlobby", {NULL}, 2888, "udp"}, -{"rsom", {NULL}, 2889, "tcp"}, -{"rsom", {NULL}, 2889, "udp"}, -{"cspclmulti", {NULL}, 2890, "tcp"}, -{"cspclmulti", {NULL}, 2890, "udp"}, -{"cinegrfx-elmd", {NULL}, 2891, "tcp"}, -{"cinegrfx-elmd", {NULL}, 2891, "udp"}, -{"snifferdata", {NULL}, 2892, "tcp"}, -{"snifferdata", {NULL}, 2892, "udp"}, -{"vseconnector", {NULL}, 2893, "tcp"}, -{"vseconnector", {NULL}, 2893, "udp"}, -{"abacus-remote", {NULL}, 2894, "tcp"}, -{"abacus-remote", {NULL}, 2894, "udp"}, -{"natuslink", {NULL}, 2895, "tcp"}, -{"natuslink", {NULL}, 2895, "udp"}, -{"ecovisiong6-1", {NULL}, 2896, "tcp"}, -{"ecovisiong6-1", {NULL}, 2896, "udp"}, -{"citrix-rtmp", {NULL}, 2897, "tcp"}, -{"citrix-rtmp", {NULL}, 2897, "udp"}, -{"appliance-cfg", {NULL}, 2898, "tcp"}, -{"appliance-cfg", {NULL}, 2898, "udp"}, -{"powergemplus", {NULL}, 2899, "tcp"}, -{"powergemplus", {NULL}, 2899, "udp"}, -{"quicksuite", {NULL}, 2900, "tcp"}, -{"quicksuite", {NULL}, 2900, "udp"}, -{"allstorcns", {NULL}, 2901, "tcp"}, -{"allstorcns", {NULL}, 2901, "udp"}, -{"netaspi", {NULL}, 2902, "tcp"}, -{"netaspi", {NULL}, 2902, "udp"}, -{"suitcase", {NULL}, 2903, "tcp"}, -{"suitcase", {NULL}, 2903, "udp"}, -{"m2ua", {NULL}, 2904, "tcp"}, -{"m2ua", {NULL}, 2904, "udp"}, -{"m2ua", {NULL}, 2904, "sctp"}, -{"m3ua", {NULL}, 2905, "tcp"}, -{"m3ua", {NULL}, 2905, "sctp"}, -{"caller9", {NULL}, 2906, "tcp"}, -{"caller9", {NULL}, 2906, "udp"}, -{"webmethods-b2b", {NULL}, 2907, "tcp"}, -{"webmethods-b2b", {NULL}, 2907, "udp"}, -{"mao", {NULL}, 2908, "tcp"}, -{"mao", {NULL}, 2908, "udp"}, -{"funk-dialout", {NULL}, 2909, "tcp"}, -{"funk-dialout", {NULL}, 2909, "udp"}, -{"tdaccess", {NULL}, 2910, "tcp"}, -{"tdaccess", {NULL}, 2910, "udp"}, -{"blockade", {NULL}, 2911, "tcp"}, -{"blockade", {NULL}, 2911, "udp"}, -{"epicon", {NULL}, 2912, "tcp"}, -{"epicon", {NULL}, 2912, "udp"}, -{"boosterware", {NULL}, 2913, "tcp"}, -{"boosterware", {NULL}, 2913, "udp"}, -{"gamelobby", {NULL}, 2914, "tcp"}, -{"gamelobby", {NULL}, 2914, "udp"}, -{"tksocket", {NULL}, 2915, "tcp"}, -{"tksocket", {NULL}, 2915, "udp"}, -{"elvin_server", {NULL}, 2916, "tcp"}, -{"elvin_server", {NULL}, 2916, "udp"}, -{"elvin_client", {NULL}, 2917, "tcp"}, -{"elvin_client", {NULL}, 2917, "udp"}, -{"kastenchasepad", {NULL}, 2918, "tcp"}, -{"kastenchasepad", {NULL}, 2918, "udp"}, -{"roboer", {NULL}, 2919, "tcp"}, -{"roboer", {NULL}, 2919, "udp"}, -{"roboeda", {NULL}, 2920, "tcp"}, -{"roboeda", {NULL}, 2920, "udp"}, -{"cesdcdman", {NULL}, 2921, "tcp"}, -{"cesdcdman", {NULL}, 2921, "udp"}, -{"cesdcdtrn", {NULL}, 2922, "tcp"}, -{"cesdcdtrn", {NULL}, 2922, "udp"}, -{"wta-wsp-wtp-s", {NULL}, 2923, "tcp"}, -{"wta-wsp-wtp-s", {NULL}, 2923, "udp"}, -{"precise-vip", {NULL}, 2924, "tcp"}, -{"precise-vip", {NULL}, 2924, "udp"}, -{"mobile-file-dl", {NULL}, 2926, "tcp"}, -{"mobile-file-dl", {NULL}, 2926, "udp"}, -{"unimobilectrl", {NULL}, 2927, "tcp"}, -{"unimobilectrl", {NULL}, 2927, "udp"}, -{"redstone-cpss", {NULL}, 2928, "tcp"}, -{"redstone-cpss", {NULL}, 2928, "udp"}, -{"amx-webadmin", {NULL}, 2929, "tcp"}, -{"amx-webadmin", {NULL}, 2929, "udp"}, -{"amx-weblinx", {NULL}, 2930, "tcp"}, -{"amx-weblinx", {NULL}, 2930, "udp"}, -{"circle-x", {NULL}, 2931, "tcp"}, -{"circle-x", {NULL}, 2931, "udp"}, -{"incp", {NULL}, 2932, "tcp"}, -{"incp", {NULL}, 2932, "udp"}, -{"4-tieropmgw", {NULL}, 2933, "tcp"}, -{"4-tieropmgw", {NULL}, 2933, "udp"}, -{"4-tieropmcli", {NULL}, 2934, "tcp"}, -{"4-tieropmcli", {NULL}, 2934, "udp"}, -{"qtp", {NULL}, 2935, "tcp"}, -{"qtp", {NULL}, 2935, "udp"}, -{"otpatch", {NULL}, 2936, "tcp"}, -{"otpatch", {NULL}, 2936, "udp"}, -{"pnaconsult-lm", {NULL}, 2937, "tcp"}, -{"pnaconsult-lm", {NULL}, 2937, "udp"}, -{"sm-pas-1", {NULL}, 2938, "tcp"}, -{"sm-pas-1", {NULL}, 2938, "udp"}, -{"sm-pas-2", {NULL}, 2939, "tcp"}, -{"sm-pas-2", {NULL}, 2939, "udp"}, -{"sm-pas-3", {NULL}, 2940, "tcp"}, -{"sm-pas-3", {NULL}, 2940, "udp"}, -{"sm-pas-4", {NULL}, 2941, "tcp"}, -{"sm-pas-4", {NULL}, 2941, "udp"}, -{"sm-pas-5", {NULL}, 2942, "tcp"}, -{"sm-pas-5", {NULL}, 2942, "udp"}, -{"ttnrepository", {NULL}, 2943, "tcp"}, -{"ttnrepository", {NULL}, 2943, "udp"}, -{"megaco-h248", {NULL}, 2944, "tcp"}, -{"megaco-h248", {NULL}, 2944, "udp"}, -{"megaco-h248", {NULL}, 2944, "sctp"}, -{"h248-binary", {NULL}, 2945, "tcp"}, -{"h248-binary", {NULL}, 2945, "udp"}, -{"h248-binary", {NULL}, 2945, "sctp"}, -{"fjsvmpor", {NULL}, 2946, "tcp"}, -{"fjsvmpor", {NULL}, 2946, "udp"}, -{"gpsd", {NULL}, 2947, "tcp"}, -{"gpsd", {NULL}, 2947, "udp"}, -{"wap-push", {NULL}, 2948, "tcp"}, -{"wap-push", {NULL}, 2948, "udp"}, -{"wap-pushsecure", {NULL}, 2949, "tcp"}, -{"wap-pushsecure", {NULL}, 2949, "udp"}, -{"esip", {NULL}, 2950, "tcp"}, -{"esip", {NULL}, 2950, "udp"}, -{"ottp", {NULL}, 2951, "tcp"}, -{"ottp", {NULL}, 2951, "udp"}, -{"mpfwsas", {NULL}, 2952, "tcp"}, -{"mpfwsas", {NULL}, 2952, "udp"}, -{"ovalarmsrv", {NULL}, 2953, "tcp"}, -{"ovalarmsrv", {NULL}, 2953, "udp"}, -{"ovalarmsrv-cmd", {NULL}, 2954, "tcp"}, -{"ovalarmsrv-cmd", {NULL}, 2954, "udp"}, -{"csnotify", {NULL}, 2955, "tcp"}, -{"csnotify", {NULL}, 2955, "udp"}, -{"ovrimosdbman", {NULL}, 2956, "tcp"}, -{"ovrimosdbman", {NULL}, 2956, "udp"}, -{"jmact5", {NULL}, 2957, "tcp"}, -{"jmact5", {NULL}, 2957, "udp"}, -{"jmact6", {NULL}, 2958, "tcp"}, -{"jmact6", {NULL}, 2958, "udp"}, -{"rmopagt", {NULL}, 2959, "tcp"}, -{"rmopagt", {NULL}, 2959, "udp"}, -{"dfoxserver", {NULL}, 2960, "tcp"}, -{"dfoxserver", {NULL}, 2960, "udp"}, -{"boldsoft-lm", {NULL}, 2961, "tcp"}, -{"boldsoft-lm", {NULL}, 2961, "udp"}, -{"iph-policy-cli", {NULL}, 2962, "tcp"}, -{"iph-policy-cli", {NULL}, 2962, "udp"}, -{"iph-policy-adm", {NULL}, 2963, "tcp"}, -{"iph-policy-adm", {NULL}, 2963, "udp"}, -{"bullant-srap", {NULL}, 2964, "tcp"}, -{"bullant-srap", {NULL}, 2964, "udp"}, -{"bullant-rap", {NULL}, 2965, "tcp"}, -{"bullant-rap", {NULL}, 2965, "udp"}, -{"idp-infotrieve", {NULL}, 2966, "tcp"}, -{"idp-infotrieve", {NULL}, 2966, "udp"}, -{"ssc-agent", {NULL}, 2967, "tcp"}, -{"ssc-agent", {NULL}, 2967, "udp"}, -{"enpp", {NULL}, 2968, "tcp"}, -{"enpp", {NULL}, 2968, "udp"}, -{"essp", {NULL}, 2969, "tcp"}, -{"essp", {NULL}, 2969, "udp"}, -{"index-net", {NULL}, 2970, "tcp"}, -{"index-net", {NULL}, 2970, "udp"}, -{"netclip", {NULL}, 2971, "tcp"}, -{"netclip", {NULL}, 2971, "udp"}, -{"pmsm-webrctl", {NULL}, 2972, "tcp"}, -{"pmsm-webrctl", {NULL}, 2972, "udp"}, -{"svnetworks", {NULL}, 2973, "tcp"}, -{"svnetworks", {NULL}, 2973, "udp"}, -{"signal", {NULL}, 2974, "tcp"}, -{"signal", {NULL}, 2974, "udp"}, -{"fjmpcm", {NULL}, 2975, "tcp"}, -{"fjmpcm", {NULL}, 2975, "udp"}, -{"cns-srv-port", {NULL}, 2976, "tcp"}, -{"cns-srv-port", {NULL}, 2976, "udp"}, -{"ttc-etap-ns", {NULL}, 2977, "tcp"}, -{"ttc-etap-ns", {NULL}, 2977, "udp"}, -{"ttc-etap-ds", {NULL}, 2978, "tcp"}, -{"ttc-etap-ds", {NULL}, 2978, "udp"}, -{"h263-video", {NULL}, 2979, "tcp"}, -{"h263-video", {NULL}, 2979, "udp"}, -{"wimd", {NULL}, 2980, "tcp"}, -{"wimd", {NULL}, 2980, "udp"}, -{"mylxamport", {NULL}, 2981, "tcp"}, -{"mylxamport", {NULL}, 2981, "udp"}, -{"iwb-whiteboard", {NULL}, 2982, "tcp"}, -{"iwb-whiteboard", {NULL}, 2982, "udp"}, -{"netplan", {NULL}, 2983, "tcp"}, -{"netplan", {NULL}, 2983, "udp"}, -{"hpidsadmin", {NULL}, 2984, "tcp"}, -{"hpidsadmin", {NULL}, 2984, "udp"}, -{"hpidsagent", {NULL}, 2985, "tcp"}, -{"hpidsagent", {NULL}, 2985, "udp"}, -{"stonefalls", {NULL}, 2986, "tcp"}, -{"stonefalls", {NULL}, 2986, "udp"}, -{"identify", {NULL}, 2987, "tcp"}, -{"identify", {NULL}, 2987, "udp"}, -{"hippad", {NULL}, 2988, "tcp"}, -{"hippad", {NULL}, 2988, "udp"}, -{"zarkov", {NULL}, 2989, "tcp"}, -{"zarkov", {NULL}, 2989, "udp"}, -{"boscap", {NULL}, 2990, "tcp"}, -{"boscap", {NULL}, 2990, "udp"}, -{"wkstn-mon", {NULL}, 2991, "tcp"}, -{"wkstn-mon", {NULL}, 2991, "udp"}, -{"avenyo", {NULL}, 2992, "tcp"}, -{"avenyo", {NULL}, 2992, "udp"}, -{"veritas-vis1", {NULL}, 2993, "tcp"}, -{"veritas-vis1", {NULL}, 2993, "udp"}, -{"veritas-vis2", {NULL}, 2994, "tcp"}, -{"veritas-vis2", {NULL}, 2994, "udp"}, -{"idrs", {NULL}, 2995, "tcp"}, -{"idrs", {NULL}, 2995, "udp"}, -{"vsixml", {NULL}, 2996, "tcp"}, -{"vsixml", {NULL}, 2996, "udp"}, -{"rebol", {NULL}, 2997, "tcp"}, -{"rebol", {NULL}, 2997, "udp"}, -{"realsecure", {NULL}, 2998, "tcp"}, -{"realsecure", {NULL}, 2998, "udp"}, -{"remoteware-un", {NULL}, 2999, "tcp"}, -{"remoteware-un", {NULL}, 2999, "udp"}, -{"hbci", {NULL}, 3000, "tcp"}, -{"hbci", {NULL}, 3000, "udp"}, -{"remoteware-cl", {NULL}, 3000, "tcp"}, -{"remoteware-cl", {NULL}, 3000, "udp"}, -{"exlm-agent", {NULL}, 3002, "tcp"}, -{"exlm-agent", {NULL}, 3002, "udp"}, -{"remoteware-srv", {NULL}, 3002, "tcp"}, -{"remoteware-srv", {NULL}, 3002, "udp"}, -{"cgms", {NULL}, 3003, "tcp"}, -{"cgms", {NULL}, 3003, "udp"}, -{"csoftragent", {NULL}, 3004, "tcp"}, -{"csoftragent", {NULL}, 3004, "udp"}, -{"geniuslm", {NULL}, 3005, "tcp"}, -{"geniuslm", {NULL}, 3005, "udp"}, -{"ii-admin", {NULL}, 3006, "tcp"}, -{"ii-admin", {NULL}, 3006, "udp"}, -{"lotusmtap", {NULL}, 3007, "tcp"}, -{"lotusmtap", {NULL}, 3007, "udp"}, -{"midnight-tech", {NULL}, 3008, "tcp"}, -{"midnight-tech", {NULL}, 3008, "udp"}, -{"pxc-ntfy", {NULL}, 3009, "tcp"}, -{"pxc-ntfy", {NULL}, 3009, "udp"}, -{"gw", {NULL}, 3010, "tcp"}, -{"ping-pong", {NULL}, 3010, "udp"}, -{"trusted-web", {NULL}, 3011, "tcp"}, -{"trusted-web", {NULL}, 3011, "udp"}, -{"twsdss", {NULL}, 3012, "tcp"}, -{"twsdss", {NULL}, 3012, "udp"}, -{"gilatskysurfer", {NULL}, 3013, "tcp"}, -{"gilatskysurfer", {NULL}, 3013, "udp"}, -{"broker_service", {NULL}, 3014, "tcp"}, -{"broker_service", {NULL}, 3014, "udp"}, -{"nati-dstp", {NULL}, 3015, "tcp"}, -{"nati-dstp", {NULL}, 3015, "udp"}, -{"notify_srvr", {NULL}, 3016, "tcp"}, -{"notify_srvr", {NULL}, 3016, "udp"}, -{"event_listener", {NULL}, 3017, "tcp"}, -{"event_listener", {NULL}, 3017, "udp"}, -{"srvc_registry", {NULL}, 3018, "tcp"}, -{"srvc_registry", {NULL}, 3018, "udp"}, -{"resource_mgr", {NULL}, 3019, "tcp"}, -{"resource_mgr", {NULL}, 3019, "udp"}, -{"cifs", {NULL}, 3020, "tcp"}, -{"cifs", {NULL}, 3020, "udp"}, -{"agriserver", {NULL}, 3021, "tcp"}, -{"agriserver", {NULL}, 3021, "udp"}, -{"csregagent", {NULL}, 3022, "tcp"}, -{"csregagent", {NULL}, 3022, "udp"}, -{"magicnotes", {NULL}, 3023, "tcp"}, -{"magicnotes", {NULL}, 3023, "udp"}, -{"nds_sso", {NULL}, 3024, "tcp"}, -{"nds_sso", {NULL}, 3024, "udp"}, -{"arepa-raft", {NULL}, 3025, "tcp"}, -{"arepa-raft", {NULL}, 3025, "udp"}, -{"agri-gateway", {NULL}, 3026, "tcp"}, -{"agri-gateway", {NULL}, 3026, "udp"}, -{"LiebDevMgmt_C", {NULL}, 3027, "tcp"}, -{"LiebDevMgmt_C", {NULL}, 3027, "udp"}, -{"LiebDevMgmt_DM", {NULL}, 3028, "tcp"}, -{"LiebDevMgmt_DM", {NULL}, 3028, "udp"}, -{"LiebDevMgmt_A", {NULL}, 3029, "tcp"}, -{"LiebDevMgmt_A", {NULL}, 3029, "udp"}, -{"arepa-cas", {NULL}, 3030, "tcp"}, -{"arepa-cas", {NULL}, 3030, "udp"}, -{"eppc", {NULL}, 3031, "tcp"}, -{"eppc", {NULL}, 3031, "udp"}, -{"redwood-chat", {NULL}, 3032, "tcp"}, -{"redwood-chat", {NULL}, 3032, "udp"}, -{"pdb", {NULL}, 3033, "tcp"}, -{"pdb", {NULL}, 3033, "udp"}, -{"osmosis-aeea", {NULL}, 3034, "tcp"}, -{"osmosis-aeea", {NULL}, 3034, "udp"}, -{"fjsv-gssagt", {NULL}, 3035, "tcp"}, -{"fjsv-gssagt", {NULL}, 3035, "udp"}, -{"hagel-dump", {NULL}, 3036, "tcp"}, -{"hagel-dump", {NULL}, 3036, "udp"}, -{"hp-san-mgmt", {NULL}, 3037, "tcp"}, -{"hp-san-mgmt", {NULL}, 3037, "udp"}, -{"santak-ups", {NULL}, 3038, "tcp"}, -{"santak-ups", {NULL}, 3038, "udp"}, -{"cogitate", {NULL}, 3039, "tcp"}, -{"cogitate", {NULL}, 3039, "udp"}, -{"tomato-springs", {NULL}, 3040, "tcp"}, -{"tomato-springs", {NULL}, 3040, "udp"}, -{"di-traceware", {NULL}, 3041, "tcp"}, -{"di-traceware", {NULL}, 3041, "udp"}, -{"journee", {NULL}, 3042, "tcp"}, -{"journee", {NULL}, 3042, "udp"}, -{"brp", {NULL}, 3043, "tcp"}, -{"brp", {NULL}, 3043, "udp"}, -{"epp", {NULL}, 3044, "tcp"}, -{"epp", {NULL}, 3044, "udp"}, -{"responsenet", {NULL}, 3045, "tcp"}, -{"responsenet", {NULL}, 3045, "udp"}, -{"di-ase", {NULL}, 3046, "tcp"}, -{"di-ase", {NULL}, 3046, "udp"}, -{"hlserver", {NULL}, 3047, "tcp"}, -{"hlserver", {NULL}, 3047, "udp"}, -{"pctrader", {NULL}, 3048, "tcp"}, -{"pctrader", {NULL}, 3048, "udp"}, -{"nsws", {NULL}, 3049, "tcp"}, -{"nsws", {NULL}, 3049, "udp"}, -{"gds_db", {NULL}, 3050, "tcp"}, -{"gds_db", {NULL}, 3050, "udp"}, -{"galaxy-server", {NULL}, 3051, "tcp"}, -{"galaxy-server", {NULL}, 3051, "udp"}, -{"apc-3052", {NULL}, 3052, "tcp"}, -{"apc-3052", {NULL}, 3052, "udp"}, -{"dsom-server", {NULL}, 3053, "tcp"}, -{"dsom-server", {NULL}, 3053, "udp"}, -{"amt-cnf-prot", {NULL}, 3054, "tcp"}, -{"amt-cnf-prot", {NULL}, 3054, "udp"}, -{"policyserver", {NULL}, 3055, "tcp"}, -{"policyserver", {NULL}, 3055, "udp"}, -{"cdl-server", {NULL}, 3056, "tcp"}, -{"cdl-server", {NULL}, 3056, "udp"}, -{"goahead-fldup", {NULL}, 3057, "tcp"}, -{"goahead-fldup", {NULL}, 3057, "udp"}, -{"videobeans", {NULL}, 3058, "tcp"}, -{"videobeans", {NULL}, 3058, "udp"}, -{"qsoft", {NULL}, 3059, "tcp"}, -{"qsoft", {NULL}, 3059, "udp"}, -{"interserver", {NULL}, 3060, "tcp"}, -{"interserver", {NULL}, 3060, "udp"}, -{"cautcpd", {NULL}, 3061, "tcp"}, -{"cautcpd", {NULL}, 3061, "udp"}, -{"ncacn-ip-tcp", {NULL}, 3062, "tcp"}, -{"ncacn-ip-tcp", {NULL}, 3062, "udp"}, -{"ncadg-ip-udp", {NULL}, 3063, "tcp"}, -{"ncadg-ip-udp", {NULL}, 3063, "udp"}, -{"rprt", {NULL}, 3064, "tcp"}, -{"rprt", {NULL}, 3064, "udp"}, -{"slinterbase", {NULL}, 3065, "tcp"}, -{"slinterbase", {NULL}, 3065, "udp"}, -{"netattachsdmp", {NULL}, 3066, "tcp"}, -{"netattachsdmp", {NULL}, 3066, "udp"}, -{"fjhpjp", {NULL}, 3067, "tcp"}, -{"fjhpjp", {NULL}, 3067, "udp"}, -{"ls3bcast", {NULL}, 3068, "tcp"}, -{"ls3bcast", {NULL}, 3068, "udp"}, -{"ls3", {NULL}, 3069, "tcp"}, -{"ls3", {NULL}, 3069, "udp"}, -{"mgxswitch", {NULL}, 3070, "tcp"}, -{"mgxswitch", {NULL}, 3070, "udp"}, -{"csd-mgmt-port", {NULL}, 3071, "tcp"}, -{"csd-mgmt-port", {NULL}, 3071, "udp"}, -{"csd-monitor", {NULL}, 3072, "tcp"}, -{"csd-monitor", {NULL}, 3072, "udp"}, -{"vcrp", {NULL}, 3073, "tcp"}, -{"vcrp", {NULL}, 3073, "udp"}, -{"xbox", {NULL}, 3074, "tcp"}, -{"xbox", {NULL}, 3074, "udp"}, -{"orbix-locator", {NULL}, 3075, "tcp"}, -{"orbix-locator", {NULL}, 3075, "udp"}, -{"orbix-config", {NULL}, 3076, "tcp"}, -{"orbix-config", {NULL}, 3076, "udp"}, -{"orbix-loc-ssl", {NULL}, 3077, "tcp"}, -{"orbix-loc-ssl", {NULL}, 3077, "udp"}, -{"orbix-cfg-ssl", {NULL}, 3078, "tcp"}, -{"orbix-cfg-ssl", {NULL}, 3078, "udp"}, -{"lv-frontpanel", {NULL}, 3079, "tcp"}, -{"lv-frontpanel", {NULL}, 3079, "udp"}, -{"stm_pproc", {NULL}, 3080, "tcp"}, -{"stm_pproc", {NULL}, 3080, "udp"}, -{"tl1-lv", {NULL}, 3081, "tcp"}, -{"tl1-lv", {NULL}, 3081, "udp"}, -{"tl1-raw", {NULL}, 3082, "tcp"}, -{"tl1-raw", {NULL}, 3082, "udp"}, -{"tl1-telnet", {NULL}, 3083, "tcp"}, -{"tl1-telnet", {NULL}, 3083, "udp"}, -{"itm-mccs", {NULL}, 3084, "tcp"}, -{"itm-mccs", {NULL}, 3084, "udp"}, -{"pcihreq", {NULL}, 3085, "tcp"}, -{"pcihreq", {NULL}, 3085, "udp"}, -{"jdl-dbkitchen", {NULL}, 3086, "tcp"}, -{"jdl-dbkitchen", {NULL}, 3086, "udp"}, -{"asoki-sma", {NULL}, 3087, "tcp"}, -{"asoki-sma", {NULL}, 3087, "udp"}, -{"xdtp", {NULL}, 3088, "tcp"}, -{"xdtp", {NULL}, 3088, "udp"}, -{"ptk-alink", {NULL}, 3089, "tcp"}, -{"ptk-alink", {NULL}, 3089, "udp"}, -{"stss", {NULL}, 3090, "tcp"}, -{"stss", {NULL}, 3090, "udp"}, -{"1ci-smcs", {NULL}, 3091, "tcp"}, -{"1ci-smcs", {NULL}, 3091, "udp"}, -{"rapidmq-center", {NULL}, 3093, "tcp"}, -{"rapidmq-center", {NULL}, 3093, "udp"}, -{"rapidmq-reg", {NULL}, 3094, "tcp"}, -{"rapidmq-reg", {NULL}, 3094, "udp"}, -{"panasas", {NULL}, 3095, "tcp"}, -{"panasas", {NULL}, 3095, "udp"}, -{"ndl-aps", {NULL}, 3096, "tcp"}, -{"ndl-aps", {NULL}, 3096, "udp"}, -{"itu-bicc-stc", {NULL}, 3097, "sctp"}, -{"umm-port", {NULL}, 3098, "tcp"}, -{"umm-port", {NULL}, 3098, "udp"}, -{"chmd", {NULL}, 3099, "tcp"}, -{"chmd", {NULL}, 3099, "udp"}, -{"opcon-xps", {NULL}, 3100, "tcp"}, -{"opcon-xps", {NULL}, 3100, "udp"}, -{"hp-pxpib", {NULL}, 3101, "tcp"}, -{"hp-pxpib", {NULL}, 3101, "udp"}, -{"slslavemon", {NULL}, 3102, "tcp"}, -{"slslavemon", {NULL}, 3102, "udp"}, -{"autocuesmi", {NULL}, 3103, "tcp"}, -{"autocuesmi", {NULL}, 3103, "udp"}, -{"autocuelog", {NULL}, 3104, "tcp"}, -{"autocuetime", {NULL}, 3104, "udp"}, -{"cardbox", {NULL}, 3105, "tcp"}, -{"cardbox", {NULL}, 3105, "udp"}, -{"cardbox-http", {NULL}, 3106, "tcp"}, -{"cardbox-http", {NULL}, 3106, "udp"}, -{"business", {NULL}, 3107, "tcp"}, -{"business", {NULL}, 3107, "udp"}, -{"geolocate", {NULL}, 3108, "tcp"}, -{"geolocate", {NULL}, 3108, "udp"}, -{"personnel", {NULL}, 3109, "tcp"}, -{"personnel", {NULL}, 3109, "udp"}, -{"sim-control", {NULL}, 3110, "tcp"}, -{"sim-control", {NULL}, 3110, "udp"}, -{"wsynch", {NULL}, 3111, "tcp"}, -{"wsynch", {NULL}, 3111, "udp"}, -{"ksysguard", {NULL}, 3112, "tcp"}, -{"ksysguard", {NULL}, 3112, "udp"}, -{"cs-auth-svr", {NULL}, 3113, "tcp"}, -{"cs-auth-svr", {NULL}, 3113, "udp"}, -{"ccmad", {NULL}, 3114, "tcp"}, -{"ccmad", {NULL}, 3114, "udp"}, -{"mctet-master", {NULL}, 3115, "tcp"}, -{"mctet-master", {NULL}, 3115, "udp"}, -{"mctet-gateway", {NULL}, 3116, "tcp"}, -{"mctet-gateway", {NULL}, 3116, "udp"}, -{"mctet-jserv", {NULL}, 3117, "tcp"}, -{"mctet-jserv", {NULL}, 3117, "udp"}, -{"pkagent", {NULL}, 3118, "tcp"}, -{"pkagent", {NULL}, 3118, "udp"}, -{"d2000kernel", {NULL}, 3119, "tcp"}, -{"d2000kernel", {NULL}, 3119, "udp"}, -{"d2000webserver", {NULL}, 3120, "tcp"}, -{"d2000webserver", {NULL}, 3120, "udp"}, -{"vtr-emulator", {NULL}, 3122, "tcp"}, -{"vtr-emulator", {NULL}, 3122, "udp"}, -{"edix", {NULL}, 3123, "tcp"}, -{"edix", {NULL}, 3123, "udp"}, -{"beacon-port", {NULL}, 3124, "tcp"}, -{"beacon-port", {NULL}, 3124, "udp"}, -{"a13-an", {NULL}, 3125, "tcp"}, -{"a13-an", {NULL}, 3125, "udp"}, -{"ctx-bridge", {NULL}, 3127, "tcp"}, -{"ctx-bridge", {NULL}, 3127, "udp"}, -{"ndl-aas", {NULL}, 3128, "tcp"}, -{"ndl-aas", {NULL}, 3128, "udp"}, -{"netport-id", {NULL}, 3129, "tcp"}, -{"netport-id", {NULL}, 3129, "udp"}, -{"icpv2", {NULL}, 3130, "tcp"}, -{"icpv2", {NULL}, 3130, "udp"}, -{"netbookmark", {NULL}, 3131, "tcp"}, -{"netbookmark", {NULL}, 3131, "udp"}, -{"ms-rule-engine", {NULL}, 3132, "tcp"}, -{"ms-rule-engine", {NULL}, 3132, "udp"}, -{"prism-deploy", {NULL}, 3133, "tcp"}, -{"prism-deploy", {NULL}, 3133, "udp"}, -{"ecp", {NULL}, 3134, "tcp"}, -{"ecp", {NULL}, 3134, "udp"}, -{"peerbook-port", {NULL}, 3135, "tcp"}, -{"peerbook-port", {NULL}, 3135, "udp"}, -{"grubd", {NULL}, 3136, "tcp"}, -{"grubd", {NULL}, 3136, "udp"}, -{"rtnt-1", {NULL}, 3137, "tcp"}, -{"rtnt-1", {NULL}, 3137, "udp"}, -{"rtnt-2", {NULL}, 3138, "tcp"}, -{"rtnt-2", {NULL}, 3138, "udp"}, -{"incognitorv", {NULL}, 3139, "tcp"}, -{"incognitorv", {NULL}, 3139, "udp"}, -{"ariliamulti", {NULL}, 3140, "tcp"}, -{"ariliamulti", {NULL}, 3140, "udp"}, -{"vmodem", {NULL}, 3141, "tcp"}, -{"vmodem", {NULL}, 3141, "udp"}, -{"rdc-wh-eos", {NULL}, 3142, "tcp"}, -{"rdc-wh-eos", {NULL}, 3142, "udp"}, -{"seaview", {NULL}, 3143, "tcp"}, -{"seaview", {NULL}, 3143, "udp"}, -{"tarantella", {NULL}, 3144, "tcp"}, -{"tarantella", {NULL}, 3144, "udp"}, -{"csi-lfap", {NULL}, 3145, "tcp"}, -{"csi-lfap", {NULL}, 3145, "udp"}, -{"bears-02", {NULL}, 3146, "tcp"}, -{"bears-02", {NULL}, 3146, "udp"}, -{"rfio", {NULL}, 3147, "tcp"}, -{"rfio", {NULL}, 3147, "udp"}, -{"nm-game-admin", {NULL}, 3148, "tcp"}, -{"nm-game-admin", {NULL}, 3148, "udp"}, -{"nm-game-server", {NULL}, 3149, "tcp"}, -{"nm-game-server", {NULL}, 3149, "udp"}, -{"nm-asses-admin", {NULL}, 3150, "tcp"}, -{"nm-asses-admin", {NULL}, 3150, "udp"}, -{"nm-assessor", {NULL}, 3151, "tcp"}, -{"nm-assessor", {NULL}, 3151, "udp"}, -{"feitianrockey", {NULL}, 3152, "tcp"}, -{"feitianrockey", {NULL}, 3152, "udp"}, -{"s8-client-port", {NULL}, 3153, "tcp"}, -{"s8-client-port", {NULL}, 3153, "udp"}, -{"ccmrmi", {NULL}, 3154, "tcp"}, -{"ccmrmi", {NULL}, 3154, "udp"}, -{"jpegmpeg", {NULL}, 3155, "tcp"}, -{"jpegmpeg", {NULL}, 3155, "udp"}, -{"indura", {NULL}, 3156, "tcp"}, -{"indura", {NULL}, 3156, "udp"}, -{"e3consultants", {NULL}, 3157, "tcp"}, -{"e3consultants", {NULL}, 3157, "udp"}, -{"stvp", {NULL}, 3158, "tcp"}, -{"stvp", {NULL}, 3158, "udp"}, -{"navegaweb-port", {NULL}, 3159, "tcp"}, -{"navegaweb-port", {NULL}, 3159, "udp"}, -{"tip-app-server", {NULL}, 3160, "tcp"}, -{"tip-app-server", {NULL}, 3160, "udp"}, -{"doc1lm", {NULL}, 3161, "tcp"}, -{"doc1lm", {NULL}, 3161, "udp"}, -{"sflm", {NULL}, 3162, "tcp"}, -{"sflm", {NULL}, 3162, "udp"}, -{"res-sap", {NULL}, 3163, "tcp"}, -{"res-sap", {NULL}, 3163, "udp"}, -{"imprs", {NULL}, 3164, "tcp"}, -{"imprs", {NULL}, 3164, "udp"}, -{"newgenpay", {NULL}, 3165, "tcp"}, -{"newgenpay", {NULL}, 3165, "udp"}, -{"sossecollector", {NULL}, 3166, "tcp"}, -{"sossecollector", {NULL}, 3166, "udp"}, -{"nowcontact", {NULL}, 3167, "tcp"}, -{"nowcontact", {NULL}, 3167, "udp"}, -{"poweronnud", {NULL}, 3168, "tcp"}, -{"poweronnud", {NULL}, 3168, "udp"}, -{"serverview-as", {NULL}, 3169, "tcp"}, -{"serverview-as", {NULL}, 3169, "udp"}, -{"serverview-asn", {NULL}, 3170, "tcp"}, -{"serverview-asn", {NULL}, 3170, "udp"}, -{"serverview-gf", {NULL}, 3171, "tcp"}, -{"serverview-gf", {NULL}, 3171, "udp"}, -{"serverview-rm", {NULL}, 3172, "tcp"}, -{"serverview-rm", {NULL}, 3172, "udp"}, -{"serverview-icc", {NULL}, 3173, "tcp"}, -{"serverview-icc", {NULL}, 3173, "udp"}, -{"armi-server", {NULL}, 3174, "tcp"}, -{"armi-server", {NULL}, 3174, "udp"}, -{"t1-e1-over-ip", {NULL}, 3175, "tcp"}, -{"t1-e1-over-ip", {NULL}, 3175, "udp"}, -{"ars-master", {NULL}, 3176, "tcp"}, -{"ars-master", {NULL}, 3176, "udp"}, -{"phonex-port", {NULL}, 3177, "tcp"}, -{"phonex-port", {NULL}, 3177, "udp"}, -{"radclientport", {NULL}, 3178, "tcp"}, -{"radclientport", {NULL}, 3178, "udp"}, -{"h2gf-w-2m", {NULL}, 3179, "tcp"}, -{"h2gf-w-2m", {NULL}, 3179, "udp"}, -{"mc-brk-srv", {NULL}, 3180, "tcp"}, -{"mc-brk-srv", {NULL}, 3180, "udp"}, -{"bmcpatrolagent", {NULL}, 3181, "tcp"}, -{"bmcpatrolagent", {NULL}, 3181, "udp"}, -{"bmcpatrolrnvu", {NULL}, 3182, "tcp"}, -{"bmcpatrolrnvu", {NULL}, 3182, "udp"}, -{"cops-tls", {NULL}, 3183, "tcp"}, -{"cops-tls", {NULL}, 3183, "udp"}, -{"apogeex-port", {NULL}, 3184, "tcp"}, -{"apogeex-port", {NULL}, 3184, "udp"}, -{"smpppd", {NULL}, 3185, "tcp"}, -{"smpppd", {NULL}, 3185, "udp"}, -{"iiw-port", {NULL}, 3186, "tcp"}, -{"iiw-port", {NULL}, 3186, "udp"}, -{"odi-port", {NULL}, 3187, "tcp"}, -{"odi-port", {NULL}, 3187, "udp"}, -{"brcm-comm-port", {NULL}, 3188, "tcp"}, -{"brcm-comm-port", {NULL}, 3188, "udp"}, -{"pcle-infex", {NULL}, 3189, "tcp"}, -{"pcle-infex", {NULL}, 3189, "udp"}, -{"csvr-proxy", {NULL}, 3190, "tcp"}, -{"csvr-proxy", {NULL}, 3190, "udp"}, -{"csvr-sslproxy", {NULL}, 3191, "tcp"}, -{"csvr-sslproxy", {NULL}, 3191, "udp"}, -{"firemonrcc", {NULL}, 3192, "tcp"}, -{"firemonrcc", {NULL}, 3192, "udp"}, -{"spandataport", {NULL}, 3193, "tcp"}, -{"spandataport", {NULL}, 3193, "udp"}, -{"magbind", {NULL}, 3194, "tcp"}, -{"magbind", {NULL}, 3194, "udp"}, -{"ncu-1", {NULL}, 3195, "tcp"}, -{"ncu-1", {NULL}, 3195, "udp"}, -{"ncu-2", {NULL}, 3196, "tcp"}, -{"ncu-2", {NULL}, 3196, "udp"}, -{"embrace-dp-s", {NULL}, 3197, "tcp"}, -{"embrace-dp-s", {NULL}, 3197, "udp"}, -{"embrace-dp-c", {NULL}, 3198, "tcp"}, -{"embrace-dp-c", {NULL}, 3198, "udp"}, -{"dmod-workspace", {NULL}, 3199, "tcp"}, -{"dmod-workspace", {NULL}, 3199, "udp"}, -{"tick-port", {NULL}, 3200, "tcp"}, -{"tick-port", {NULL}, 3200, "udp"}, -{"cpq-tasksmart", {NULL}, 3201, "tcp"}, -{"cpq-tasksmart", {NULL}, 3201, "udp"}, -{"intraintra", {NULL}, 3202, "tcp"}, -{"intraintra", {NULL}, 3202, "udp"}, -{"netwatcher-mon", {NULL}, 3203, "tcp"}, -{"netwatcher-mon", {NULL}, 3203, "udp"}, -{"netwatcher-db", {NULL}, 3204, "tcp"}, -{"netwatcher-db", {NULL}, 3204, "udp"}, -{"isns", {NULL}, 3205, "tcp"}, -{"isns", {NULL}, 3205, "udp"}, -{"ironmail", {NULL}, 3206, "tcp"}, -{"ironmail", {NULL}, 3206, "udp"}, -{"vx-auth-port", {NULL}, 3207, "tcp"}, -{"vx-auth-port", {NULL}, 3207, "udp"}, -{"pfu-prcallback", {NULL}, 3208, "tcp"}, -{"pfu-prcallback", {NULL}, 3208, "udp"}, -{"netwkpathengine", {NULL}, 3209, "tcp"}, -{"netwkpathengine", {NULL}, 3209, "udp"}, -{"flamenco-proxy", {NULL}, 3210, "tcp"}, -{"flamenco-proxy", {NULL}, 3210, "udp"}, -{"avsecuremgmt", {NULL}, 3211, "tcp"}, -{"avsecuremgmt", {NULL}, 3211, "udp"}, -{"surveyinst", {NULL}, 3212, "tcp"}, -{"surveyinst", {NULL}, 3212, "udp"}, -{"neon24x7", {NULL}, 3213, "tcp"}, -{"neon24x7", {NULL}, 3213, "udp"}, -{"jmq-daemon-1", {NULL}, 3214, "tcp"}, -{"jmq-daemon-1", {NULL}, 3214, "udp"}, -{"jmq-daemon-2", {NULL}, 3215, "tcp"}, -{"jmq-daemon-2", {NULL}, 3215, "udp"}, -{"ferrari-foam", {NULL}, 3216, "tcp"}, -{"ferrari-foam", {NULL}, 3216, "udp"}, -{"unite", {NULL}, 3217, "tcp"}, -{"unite", {NULL}, 3217, "udp"}, -{"smartpackets", {NULL}, 3218, "tcp"}, -{"smartpackets", {NULL}, 3218, "udp"}, -{"wms-messenger", {NULL}, 3219, "tcp"}, -{"wms-messenger", {NULL}, 3219, "udp"}, -{"xnm-ssl", {NULL}, 3220, "tcp"}, -{"xnm-ssl", {NULL}, 3220, "udp"}, -{"xnm-clear-text", {NULL}, 3221, "tcp"}, -{"xnm-clear-text", {NULL}, 3221, "udp"}, -{"glbp", {NULL}, 3222, "tcp"}, -{"glbp", {NULL}, 3222, "udp"}, -{"digivote", {NULL}, 3223, "tcp"}, -{"digivote", {NULL}, 3223, "udp"}, -{"aes-discovery", {NULL}, 3224, "tcp"}, -{"aes-discovery", {NULL}, 3224, "udp"}, -{"fcip-port", {NULL}, 3225, "tcp"}, -{"fcip-port", {NULL}, 3225, "udp"}, -{"isi-irp", {NULL}, 3226, "tcp"}, -{"isi-irp", {NULL}, 3226, "udp"}, -{"dwnmshttp", {NULL}, 3227, "tcp"}, -{"dwnmshttp", {NULL}, 3227, "udp"}, -{"dwmsgserver", {NULL}, 3228, "tcp"}, -{"dwmsgserver", {NULL}, 3228, "udp"}, -{"global-cd-port", {NULL}, 3229, "tcp"}, -{"global-cd-port", {NULL}, 3229, "udp"}, -{"sftdst-port", {NULL}, 3230, "tcp"}, -{"sftdst-port", {NULL}, 3230, "udp"}, -{"vidigo", {NULL}, 3231, "tcp"}, -{"vidigo", {NULL}, 3231, "udp"}, -{"mdtp", {NULL}, 3232, "tcp"}, -{"mdtp", {NULL}, 3232, "udp"}, -{"whisker", {NULL}, 3233, "tcp"}, -{"whisker", {NULL}, 3233, "udp"}, -{"alchemy", {NULL}, 3234, "tcp"}, -{"alchemy", {NULL}, 3234, "udp"}, -{"mdap-port", {NULL}, 3235, "tcp"}, -{"mdap-port", {NULL}, 3235, "udp"}, -{"apparenet-ts", {NULL}, 3236, "tcp"}, -{"apparenet-ts", {NULL}, 3236, "udp"}, -{"apparenet-tps", {NULL}, 3237, "tcp"}, -{"apparenet-tps", {NULL}, 3237, "udp"}, -{"apparenet-as", {NULL}, 3238, "tcp"}, -{"apparenet-as", {NULL}, 3238, "udp"}, -{"apparenet-ui", {NULL}, 3239, "tcp"}, -{"apparenet-ui", {NULL}, 3239, "udp"}, -{"triomotion", {NULL}, 3240, "tcp"}, -{"triomotion", {NULL}, 3240, "udp"}, -{"sysorb", {NULL}, 3241, "tcp"}, -{"sysorb", {NULL}, 3241, "udp"}, -{"sdp-id-port", {NULL}, 3242, "tcp"}, -{"sdp-id-port", {NULL}, 3242, "udp"}, -{"timelot", {NULL}, 3243, "tcp"}, -{"timelot", {NULL}, 3243, "udp"}, -{"onesaf", {NULL}, 3244, "tcp"}, -{"onesaf", {NULL}, 3244, "udp"}, -{"vieo-fe", {NULL}, 3245, "tcp"}, -{"vieo-fe", {NULL}, 3245, "udp"}, -{"dvt-system", {NULL}, 3246, "tcp"}, -{"dvt-system", {NULL}, 3246, "udp"}, -{"dvt-data", {NULL}, 3247, "tcp"}, -{"dvt-data", {NULL}, 3247, "udp"}, -{"procos-lm", {NULL}, 3248, "tcp"}, -{"procos-lm", {NULL}, 3248, "udp"}, -{"ssp", {NULL}, 3249, "tcp"}, -{"ssp", {NULL}, 3249, "udp"}, -{"hicp", {NULL}, 3250, "tcp"}, -{"hicp", {NULL}, 3250, "udp"}, -{"sysscanner", {NULL}, 3251, "tcp"}, -{"sysscanner", {NULL}, 3251, "udp"}, -{"dhe", {NULL}, 3252, "tcp"}, -{"dhe", {NULL}, 3252, "udp"}, -{"pda-data", {NULL}, 3253, "tcp"}, -{"pda-data", {NULL}, 3253, "udp"}, -{"pda-sys", {NULL}, 3254, "tcp"}, -{"pda-sys", {NULL}, 3254, "udp"}, -{"semaphore", {NULL}, 3255, "tcp"}, -{"semaphore", {NULL}, 3255, "udp"}, -{"cpqrpm-agent", {NULL}, 3256, "tcp"}, -{"cpqrpm-agent", {NULL}, 3256, "udp"}, -{"cpqrpm-server", {NULL}, 3257, "tcp"}, -{"cpqrpm-server", {NULL}, 3257, "udp"}, -{"ivecon-port", {NULL}, 3258, "tcp"}, -{"ivecon-port", {NULL}, 3258, "udp"}, -{"epncdp2", {NULL}, 3259, "tcp"}, -{"epncdp2", {NULL}, 3259, "udp"}, -{"iscsi-target", {NULL}, 3260, "tcp"}, -{"iscsi-target", {NULL}, 3260, "udp"}, -{"winshadow", {NULL}, 3261, "tcp"}, -{"winshadow", {NULL}, 3261, "udp"}, -{"necp", {NULL}, 3262, "tcp"}, -{"necp", {NULL}, 3262, "udp"}, -{"ecolor-imager", {NULL}, 3263, "tcp"}, -{"ecolor-imager", {NULL}, 3263, "udp"}, -{"ccmail", {NULL}, 3264, "tcp"}, -{"ccmail", {NULL}, 3264, "udp"}, -{"altav-tunnel", {NULL}, 3265, "tcp"}, -{"altav-tunnel", {NULL}, 3265, "udp"}, -{"ns-cfg-server", {NULL}, 3266, "tcp"}, -{"ns-cfg-server", {NULL}, 3266, "udp"}, -{"ibm-dial-out", {NULL}, 3267, "tcp"}, -{"ibm-dial-out", {NULL}, 3267, "udp"}, -{"msft-gc", {NULL}, 3268, "tcp"}, -{"msft-gc", {NULL}, 3268, "udp"}, -{"msft-gc-ssl", {NULL}, 3269, "tcp"}, -{"msft-gc-ssl", {NULL}, 3269, "udp"}, -{"verismart", {NULL}, 3270, "tcp"}, -{"verismart", {NULL}, 3270, "udp"}, -{"csoft-prev", {NULL}, 3271, "tcp"}, -{"csoft-prev", {NULL}, 3271, "udp"}, -{"user-manager", {NULL}, 3272, "tcp"}, -{"user-manager", {NULL}, 3272, "udp"}, -{"sxmp", {NULL}, 3273, "tcp"}, -{"sxmp", {NULL}, 3273, "udp"}, -{"ordinox-server", {NULL}, 3274, "tcp"}, -{"ordinox-server", {NULL}, 3274, "udp"}, -{"samd", {NULL}, 3275, "tcp"}, -{"samd", {NULL}, 3275, "udp"}, -{"maxim-asics", {NULL}, 3276, "tcp"}, -{"maxim-asics", {NULL}, 3276, "udp"}, -{"awg-proxy", {NULL}, 3277, "tcp"}, -{"awg-proxy", {NULL}, 3277, "udp"}, -{"lkcmserver", {NULL}, 3278, "tcp"}, -{"lkcmserver", {NULL}, 3278, "udp"}, -{"admind", {NULL}, 3279, "tcp"}, -{"admind", {NULL}, 3279, "udp"}, -{"vs-server", {NULL}, 3280, "tcp"}, -{"vs-server", {NULL}, 3280, "udp"}, -{"sysopt", {NULL}, 3281, "tcp"}, -{"sysopt", {NULL}, 3281, "udp"}, -{"datusorb", {NULL}, 3282, "tcp"}, -{"datusorb", {NULL}, 3282, "udp"}, -{"net-assistant", {NULL}, 3283, "tcp"}, -{"net-assistant", {NULL}, 3283, "udp"}, -{"4talk", {NULL}, 3284, "tcp"}, -{"4talk", {NULL}, 3284, "udp"}, -{"plato", {NULL}, 3285, "tcp"}, -{"plato", {NULL}, 3285, "udp"}, -{"e-net", {NULL}, 3286, "tcp"}, -{"e-net", {NULL}, 3286, "udp"}, -{"directvdata", {NULL}, 3287, "tcp"}, -{"directvdata", {NULL}, 3287, "udp"}, -{"cops", {NULL}, 3288, "tcp"}, -{"cops", {NULL}, 3288, "udp"}, -{"enpc", {NULL}, 3289, "tcp"}, -{"enpc", {NULL}, 3289, "udp"}, -{"caps-lm", {NULL}, 3290, "tcp"}, -{"caps-lm", {NULL}, 3290, "udp"}, -{"sah-lm", {NULL}, 3291, "tcp"}, -{"sah-lm", {NULL}, 3291, "udp"}, -{"cart-o-rama", {NULL}, 3292, "tcp"}, -{"cart-o-rama", {NULL}, 3292, "udp"}, -{"fg-fps", {NULL}, 3293, "tcp"}, -{"fg-fps", {NULL}, 3293, "udp"}, -{"fg-gip", {NULL}, 3294, "tcp"}, -{"fg-gip", {NULL}, 3294, "udp"}, -{"dyniplookup", {NULL}, 3295, "tcp"}, -{"dyniplookup", {NULL}, 3295, "udp"}, -{"rib-slm", {NULL}, 3296, "tcp"}, -{"rib-slm", {NULL}, 3296, "udp"}, -{"cytel-lm", {NULL}, 3297, "tcp"}, -{"cytel-lm", {NULL}, 3297, "udp"}, -{"deskview", {NULL}, 3298, "tcp"}, -{"deskview", {NULL}, 3298, "udp"}, -{"pdrncs", {NULL}, 3299, "tcp"}, -{"pdrncs", {NULL}, 3299, "udp"}, -{"mcs-fastmail", {NULL}, 3302, "tcp"}, -{"mcs-fastmail", {NULL}, 3302, "udp"}, -{"opsession-clnt", {NULL}, 3303, "tcp"}, -{"opsession-clnt", {NULL}, 3303, "udp"}, -{"opsession-srvr", {NULL}, 3304, "tcp"}, -{"opsession-srvr", {NULL}, 3304, "udp"}, -{"odette-ftp", {NULL}, 3305, "tcp"}, -{"odette-ftp", {NULL}, 3305, "udp"}, -{"mysql", {NULL}, 3306, "tcp"}, -{"mysql", {NULL}, 3306, "udp"}, -{"opsession-prxy", {NULL}, 3307, "tcp"}, -{"opsession-prxy", {NULL}, 3307, "udp"}, -{"tns-server", {NULL}, 3308, "tcp"}, -{"tns-server", {NULL}, 3308, "udp"}, -{"tns-adv", {NULL}, 3309, "tcp"}, -{"tns-adv", {NULL}, 3309, "udp"}, -{"dyna-access", {NULL}, 3310, "tcp"}, -{"dyna-access", {NULL}, 3310, "udp"}, -{"mcns-tel-ret", {NULL}, 3311, "tcp"}, -{"mcns-tel-ret", {NULL}, 3311, "udp"}, -{"appman-server", {NULL}, 3312, "tcp"}, -{"appman-server", {NULL}, 3312, "udp"}, -{"uorb", {NULL}, 3313, "tcp"}, -{"uorb", {NULL}, 3313, "udp"}, -{"uohost", {NULL}, 3314, "tcp"}, -{"uohost", {NULL}, 3314, "udp"}, -{"cdid", {NULL}, 3315, "tcp"}, -{"cdid", {NULL}, 3315, "udp"}, -{"aicc-cmi", {NULL}, 3316, "tcp"}, -{"aicc-cmi", {NULL}, 3316, "udp"}, -{"vsaiport", {NULL}, 3317, "tcp"}, -{"vsaiport", {NULL}, 3317, "udp"}, -{"ssrip", {NULL}, 3318, "tcp"}, -{"ssrip", {NULL}, 3318, "udp"}, -{"sdt-lmd", {NULL}, 3319, "tcp"}, -{"sdt-lmd", {NULL}, 3319, "udp"}, -{"officelink2000", {NULL}, 3320, "tcp"}, -{"officelink2000", {NULL}, 3320, "udp"}, -{"vnsstr", {NULL}, 3321, "tcp"}, -{"vnsstr", {NULL}, 3321, "udp"}, -{"sftu", {NULL}, 3326, "tcp"}, -{"sftu", {NULL}, 3326, "udp"}, -{"bbars", {NULL}, 3327, "tcp"}, -{"bbars", {NULL}, 3327, "udp"}, -{"egptlm", {NULL}, 3328, "tcp"}, -{"egptlm", {NULL}, 3328, "udp"}, -{"hp-device-disc", {NULL}, 3329, "tcp"}, -{"hp-device-disc", {NULL}, 3329, "udp"}, -{"mcs-calypsoicf", {NULL}, 3330, "tcp"}, -{"mcs-calypsoicf", {NULL}, 3330, "udp"}, -{"mcs-messaging", {NULL}, 3331, "tcp"}, -{"mcs-messaging", {NULL}, 3331, "udp"}, -{"mcs-mailsvr", {NULL}, 3332, "tcp"}, -{"mcs-mailsvr", {NULL}, 3332, "udp"}, -{"dec-notes", {NULL}, 3333, "tcp"}, -{"dec-notes", {NULL}, 3333, "udp"}, -{"directv-web", {NULL}, 3334, "tcp"}, -{"directv-web", {NULL}, 3334, "udp"}, -{"directv-soft", {NULL}, 3335, "tcp"}, -{"directv-soft", {NULL}, 3335, "udp"}, -{"directv-tick", {NULL}, 3336, "tcp"}, -{"directv-tick", {NULL}, 3336, "udp"}, -{"directv-catlg", {NULL}, 3337, "tcp"}, -{"directv-catlg", {NULL}, 3337, "udp"}, -{"anet-b", {NULL}, 3338, "tcp"}, -{"anet-b", {NULL}, 3338, "udp"}, -{"anet-l", {NULL}, 3339, "tcp"}, -{"anet-l", {NULL}, 3339, "udp"}, -{"anet-m", {NULL}, 3340, "tcp"}, -{"anet-m", {NULL}, 3340, "udp"}, -{"anet-h", {NULL}, 3341, "tcp"}, -{"anet-h", {NULL}, 3341, "udp"}, -{"webtie", {NULL}, 3342, "tcp"}, -{"webtie", {NULL}, 3342, "udp"}, -{"ms-cluster-net", {NULL}, 3343, "tcp"}, -{"ms-cluster-net", {NULL}, 3343, "udp"}, -{"bnt-manager", {NULL}, 3344, "tcp"}, -{"bnt-manager", {NULL}, 3344, "udp"}, -{"influence", {NULL}, 3345, "tcp"}, -{"influence", {NULL}, 3345, "udp"}, -{"trnsprntproxy", {NULL}, 3346, "tcp"}, -{"trnsprntproxy", {NULL}, 3346, "udp"}, -{"phoenix-rpc", {NULL}, 3347, "tcp"}, -{"phoenix-rpc", {NULL}, 3347, "udp"}, -{"pangolin-laser", {NULL}, 3348, "tcp"}, -{"pangolin-laser", {NULL}, 3348, "udp"}, -{"chevinservices", {NULL}, 3349, "tcp"}, -{"chevinservices", {NULL}, 3349, "udp"}, -{"findviatv", {NULL}, 3350, "tcp"}, -{"findviatv", {NULL}, 3350, "udp"}, -{"btrieve", {NULL}, 3351, "tcp"}, -{"btrieve", {NULL}, 3351, "udp"}, -{"ssql", {NULL}, 3352, "tcp"}, -{"ssql", {NULL}, 3352, "udp"}, -{"fatpipe", {NULL}, 3353, "tcp"}, -{"fatpipe", {NULL}, 3353, "udp"}, -{"suitjd", {NULL}, 3354, "tcp"}, -{"suitjd", {NULL}, 3354, "udp"}, -{"ordinox-dbase", {NULL}, 3355, "tcp"}, -{"ordinox-dbase", {NULL}, 3355, "udp"}, -{"upnotifyps", {NULL}, 3356, "tcp"}, -{"upnotifyps", {NULL}, 3356, "udp"}, -{"adtech-test", {NULL}, 3357, "tcp"}, -{"adtech-test", {NULL}, 3357, "udp"}, -{"mpsysrmsvr", {NULL}, 3358, "tcp"}, -{"mpsysrmsvr", {NULL}, 3358, "udp"}, -{"wg-netforce", {NULL}, 3359, "tcp"}, -{"wg-netforce", {NULL}, 3359, "udp"}, -{"kv-server", {NULL}, 3360, "tcp"}, -{"kv-server", {NULL}, 3360, "udp"}, -{"kv-agent", {NULL}, 3361, "tcp"}, -{"kv-agent", {NULL}, 3361, "udp"}, -{"dj-ilm", {NULL}, 3362, "tcp"}, -{"dj-ilm", {NULL}, 3362, "udp"}, -{"nati-vi-server", {NULL}, 3363, "tcp"}, -{"nati-vi-server", {NULL}, 3363, "udp"}, -{"creativeserver", {NULL}, 3364, "tcp"}, -{"creativeserver", {NULL}, 3364, "udp"}, -{"contentserver", {NULL}, 3365, "tcp"}, -{"contentserver", {NULL}, 3365, "udp"}, -{"creativepartnr", {NULL}, 3366, "tcp"}, -{"creativepartnr", {NULL}, 3366, "udp"}, -{"tip2", {NULL}, 3372, "tcp"}, -{"tip2", {NULL}, 3372, "udp"}, -{"lavenir-lm", {NULL}, 3373, "tcp"}, -{"lavenir-lm", {NULL}, 3373, "udp"}, -{"cluster-disc", {NULL}, 3374, "tcp"}, -{"cluster-disc", {NULL}, 3374, "udp"}, -{"vsnm-agent", {NULL}, 3375, "tcp"}, -{"vsnm-agent", {NULL}, 3375, "udp"}, -{"cdbroker", {NULL}, 3376, "tcp"}, -{"cdbroker", {NULL}, 3376, "udp"}, -{"cogsys-lm", {NULL}, 3377, "tcp"}, -{"cogsys-lm", {NULL}, 3377, "udp"}, -{"wsicopy", {NULL}, 3378, "tcp"}, -{"wsicopy", {NULL}, 3378, "udp"}, -{"socorfs", {NULL}, 3379, "tcp"}, -{"socorfs", {NULL}, 3379, "udp"}, -{"sns-channels", {NULL}, 3380, "tcp"}, -{"sns-channels", {NULL}, 3380, "udp"}, -{"geneous", {NULL}, 3381, "tcp"}, -{"geneous", {NULL}, 3381, "udp"}, -{"fujitsu-neat", {NULL}, 3382, "tcp"}, -{"fujitsu-neat", {NULL}, 3382, "udp"}, -{"esp-lm", {NULL}, 3383, "tcp"}, -{"esp-lm", {NULL}, 3383, "udp"}, -{"hp-clic", {NULL}, 3384, "tcp"}, -{"hp-clic", {NULL}, 3384, "udp"}, -{"qnxnetman", {NULL}, 3385, "tcp"}, -{"qnxnetman", {NULL}, 3385, "udp"}, -{"gprs-data", {NULL}, 3386, "tcp"}, -{"gprs-sig", {NULL}, 3386, "udp"}, -{"backroomnet", {NULL}, 3387, "tcp"}, -{"backroomnet", {NULL}, 3387, "udp"}, -{"cbserver", {NULL}, 3388, "tcp"}, -{"cbserver", {NULL}, 3388, "udp"}, -{"ms-wbt-server", {NULL}, 3389, "tcp"}, -{"ms-wbt-server", {NULL}, 3389, "udp"}, -{"dsc", {NULL}, 3390, "tcp"}, -{"dsc", {NULL}, 3390, "udp"}, -{"savant", {NULL}, 3391, "tcp"}, -{"savant", {NULL}, 3391, "udp"}, -{"efi-lm", {NULL}, 3392, "tcp"}, -{"efi-lm", {NULL}, 3392, "udp"}, -{"d2k-tapestry1", {NULL}, 3393, "tcp"}, -{"d2k-tapestry1", {NULL}, 3393, "udp"}, -{"d2k-tapestry2", {NULL}, 3394, "tcp"}, -{"d2k-tapestry2", {NULL}, 3394, "udp"}, -{"dyna-lm", {NULL}, 3395, "tcp"}, -{"dyna-lm", {NULL}, 3395, "udp"}, -{"printer_agent", {NULL}, 3396, "tcp"}, -{"printer_agent", {NULL}, 3396, "udp"}, -{"cloanto-lm", {NULL}, 3397, "tcp"}, -{"cloanto-lm", {NULL}, 3397, "udp"}, -{"mercantile", {NULL}, 3398, "tcp"}, -{"mercantile", {NULL}, 3398, "udp"}, -{"csms", {NULL}, 3399, "tcp"}, -{"csms", {NULL}, 3399, "udp"}, -{"csms2", {NULL}, 3400, "tcp"}, -{"csms2", {NULL}, 3400, "udp"}, -{"filecast", {NULL}, 3401, "tcp"}, -{"filecast", {NULL}, 3401, "udp"}, -{"fxaengine-net", {NULL}, 3402, "tcp"}, -{"fxaengine-net", {NULL}, 3402, "udp"}, -{"nokia-ann-ch1", {NULL}, 3405, "tcp"}, -{"nokia-ann-ch1", {NULL}, 3405, "udp"}, -{"nokia-ann-ch2", {NULL}, 3406, "tcp"}, -{"nokia-ann-ch2", {NULL}, 3406, "udp"}, -{"ldap-admin", {NULL}, 3407, "tcp"}, -{"ldap-admin", {NULL}, 3407, "udp"}, -{"BESApi", {NULL}, 3408, "tcp"}, -{"BESApi", {NULL}, 3408, "udp"}, -{"networklens", {NULL}, 3409, "tcp"}, -{"networklens", {NULL}, 3409, "udp"}, -{"networklenss", {NULL}, 3410, "tcp"}, -{"networklenss", {NULL}, 3410, "udp"}, -{"biolink-auth", {NULL}, 3411, "tcp"}, -{"biolink-auth", {NULL}, 3411, "udp"}, -{"xmlblaster", {NULL}, 3412, "tcp"}, -{"xmlblaster", {NULL}, 3412, "udp"}, -{"svnet", {NULL}, 3413, "tcp"}, -{"svnet", {NULL}, 3413, "udp"}, -{"wip-port", {NULL}, 3414, "tcp"}, -{"wip-port", {NULL}, 3414, "udp"}, -{"bcinameservice", {NULL}, 3415, "tcp"}, -{"bcinameservice", {NULL}, 3415, "udp"}, -{"commandport", {NULL}, 3416, "tcp"}, -{"commandport", {NULL}, 3416, "udp"}, -{"csvr", {NULL}, 3417, "tcp"}, -{"csvr", {NULL}, 3417, "udp"}, -{"rnmap", {NULL}, 3418, "tcp"}, -{"rnmap", {NULL}, 3418, "udp"}, -{"softaudit", {NULL}, 3419, "tcp"}, -{"softaudit", {NULL}, 3419, "udp"}, -{"ifcp-port", {NULL}, 3420, "tcp"}, -{"ifcp-port", {NULL}, 3420, "udp"}, -{"bmap", {NULL}, 3421, "tcp"}, -{"bmap", {NULL}, 3421, "udp"}, -{"rusb-sys-port", {NULL}, 3422, "tcp"}, -{"rusb-sys-port", {NULL}, 3422, "udp"}, -{"xtrm", {NULL}, 3423, "tcp"}, -{"xtrm", {NULL}, 3423, "udp"}, -{"xtrms", {NULL}, 3424, "tcp"}, -{"xtrms", {NULL}, 3424, "udp"}, -{"agps-port", {NULL}, 3425, "tcp"}, -{"agps-port", {NULL}, 3425, "udp"}, -{"arkivio", {NULL}, 3426, "tcp"}, -{"arkivio", {NULL}, 3426, "udp"}, -{"websphere-snmp", {NULL}, 3427, "tcp"}, -{"websphere-snmp", {NULL}, 3427, "udp"}, -{"twcss", {NULL}, 3428, "tcp"}, -{"twcss", {NULL}, 3428, "udp"}, -{"gcsp", {NULL}, 3429, "tcp"}, -{"gcsp", {NULL}, 3429, "udp"}, -{"ssdispatch", {NULL}, 3430, "tcp"}, -{"ssdispatch", {NULL}, 3430, "udp"}, -{"ndl-als", {NULL}, 3431, "tcp"}, -{"ndl-als", {NULL}, 3431, "udp"}, -{"osdcp", {NULL}, 3432, "tcp"}, -{"osdcp", {NULL}, 3432, "udp"}, -{"alta-smp", {NULL}, 3433, "tcp"}, -{"alta-smp", {NULL}, 3433, "udp"}, -{"opencm", {NULL}, 3434, "tcp"}, -{"opencm", {NULL}, 3434, "udp"}, -{"pacom", {NULL}, 3435, "tcp"}, -{"pacom", {NULL}, 3435, "udp"}, -{"gc-config", {NULL}, 3436, "tcp"}, -{"gc-config", {NULL}, 3436, "udp"}, -{"autocueds", {NULL}, 3437, "tcp"}, -{"autocueds", {NULL}, 3437, "udp"}, -{"spiral-admin", {NULL}, 3438, "tcp"}, -{"spiral-admin", {NULL}, 3438, "udp"}, -{"hri-port", {NULL}, 3439, "tcp"}, -{"hri-port", {NULL}, 3439, "udp"}, -{"ans-console", {NULL}, 3440, "tcp"}, -{"ans-console", {NULL}, 3440, "udp"}, -{"connect-client", {NULL}, 3441, "tcp"}, -{"connect-client", {NULL}, 3441, "udp"}, -{"connect-server", {NULL}, 3442, "tcp"}, -{"connect-server", {NULL}, 3442, "udp"}, -{"ov-nnm-websrv", {NULL}, 3443, "tcp"}, -{"ov-nnm-websrv", {NULL}, 3443, "udp"}, -{"denali-server", {NULL}, 3444, "tcp"}, -{"denali-server", {NULL}, 3444, "udp"}, -{"monp", {NULL}, 3445, "tcp"}, -{"monp", {NULL}, 3445, "udp"}, -{"3comfaxrpc", {NULL}, 3446, "tcp"}, -{"3comfaxrpc", {NULL}, 3446, "udp"}, -{"directnet", {NULL}, 3447, "tcp"}, -{"directnet", {NULL}, 3447, "udp"}, -{"dnc-port", {NULL}, 3448, "tcp"}, -{"dnc-port", {NULL}, 3448, "udp"}, -{"hotu-chat", {NULL}, 3449, "tcp"}, -{"hotu-chat", {NULL}, 3449, "udp"}, -{"castorproxy", {NULL}, 3450, "tcp"}, -{"castorproxy", {NULL}, 3450, "udp"}, -{"asam", {NULL}, 3451, "tcp"}, -{"asam", {NULL}, 3451, "udp"}, -{"sabp-signal", {NULL}, 3452, "tcp"}, -{"sabp-signal", {NULL}, 3452, "udp"}, -{"pscupd", {NULL}, 3453, "tcp"}, -{"pscupd", {NULL}, 3453, "udp"}, -{"mira", {NULL}, 3454, "tcp"}, -{"prsvp", {NULL}, 3455, "tcp"}, -{"prsvp", {NULL}, 3455, "udp"}, -{"vat", {NULL}, 3456, "tcp"}, -{"vat", {NULL}, 3456, "udp"}, -{"vat-control", {NULL}, 3457, "tcp"}, -{"vat-control", {NULL}, 3457, "udp"}, -{"d3winosfi", {NULL}, 3458, "tcp"}, -{"d3winosfi", {NULL}, 3458, "udp"}, -{"integral", {NULL}, 3459, "tcp"}, -{"integral", {NULL}, 3459, "udp"}, -{"edm-manager", {NULL}, 3460, "tcp"}, -{"edm-manager", {NULL}, 3460, "udp"}, -{"edm-stager", {NULL}, 3461, "tcp"}, -{"edm-stager", {NULL}, 3461, "udp"}, -{"edm-std-notify", {NULL}, 3462, "tcp"}, -{"edm-std-notify", {NULL}, 3462, "udp"}, -{"edm-adm-notify", {NULL}, 3463, "tcp"}, -{"edm-adm-notify", {NULL}, 3463, "udp"}, -{"edm-mgr-sync", {NULL}, 3464, "tcp"}, -{"edm-mgr-sync", {NULL}, 3464, "udp"}, -{"edm-mgr-cntrl", {NULL}, 3465, "tcp"}, -{"edm-mgr-cntrl", {NULL}, 3465, "udp"}, -{"workflow", {NULL}, 3466, "tcp"}, -{"workflow", {NULL}, 3466, "udp"}, -{"rcst", {NULL}, 3467, "tcp"}, -{"rcst", {NULL}, 3467, "udp"}, -{"ttcmremotectrl", {NULL}, 3468, "tcp"}, -{"ttcmremotectrl", {NULL}, 3468, "udp"}, -{"pluribus", {NULL}, 3469, "tcp"}, -{"pluribus", {NULL}, 3469, "udp"}, -{"jt400", {NULL}, 3470, "tcp"}, -{"jt400", {NULL}, 3470, "udp"}, -{"jt400-ssl", {NULL}, 3471, "tcp"}, -{"jt400-ssl", {NULL}, 3471, "udp"}, -{"jaugsremotec-1", {NULL}, 3472, "tcp"}, -{"jaugsremotec-1", {NULL}, 3472, "udp"}, -{"jaugsremotec-2", {NULL}, 3473, "tcp"}, -{"jaugsremotec-2", {NULL}, 3473, "udp"}, -{"ttntspauto", {NULL}, 3474, "tcp"}, -{"ttntspauto", {NULL}, 3474, "udp"}, -{"genisar-port", {NULL}, 3475, "tcp"}, -{"genisar-port", {NULL}, 3475, "udp"}, -{"nppmp", {NULL}, 3476, "tcp"}, -{"nppmp", {NULL}, 3476, "udp"}, -{"ecomm", {NULL}, 3477, "tcp"}, -{"ecomm", {NULL}, 3477, "udp"}, -{"stun", {NULL}, 3478, "tcp"}, -{"stun", {NULL}, 3478, "udp"}, -{"turn", {NULL}, 3478, "tcp"}, -{"turn", {NULL}, 3478, "udp"}, -{"stun-behavior", {NULL}, 3478, "tcp"}, -{"stun-behavior", {NULL}, 3478, "udp"}, -{"twrpc", {NULL}, 3479, "tcp"}, -{"twrpc", {NULL}, 3479, "udp"}, -{"plethora", {NULL}, 3480, "tcp"}, -{"plethora", {NULL}, 3480, "udp"}, -{"cleanerliverc", {NULL}, 3481, "tcp"}, -{"cleanerliverc", {NULL}, 3481, "udp"}, -{"vulture", {NULL}, 3482, "tcp"}, -{"vulture", {NULL}, 3482, "udp"}, -{"slim-devices", {NULL}, 3483, "tcp"}, -{"slim-devices", {NULL}, 3483, "udp"}, -{"gbs-stp", {NULL}, 3484, "tcp"}, -{"gbs-stp", {NULL}, 3484, "udp"}, -{"celatalk", {NULL}, 3485, "tcp"}, -{"celatalk", {NULL}, 3485, "udp"}, -{"ifsf-hb-port", {NULL}, 3486, "tcp"}, -{"ifsf-hb-port", {NULL}, 3486, "udp"}, -{"ltctcp", {NULL}, 3487, "tcp"}, -{"ltcudp", {NULL}, 3487, "udp"}, -{"fs-rh-srv", {NULL}, 3488, "tcp"}, -{"fs-rh-srv", {NULL}, 3488, "udp"}, -{"dtp-dia", {NULL}, 3489, "tcp"}, -{"dtp-dia", {NULL}, 3489, "udp"}, -{"colubris", {NULL}, 3490, "tcp"}, -{"colubris", {NULL}, 3490, "udp"}, -{"swr-port", {NULL}, 3491, "tcp"}, -{"swr-port", {NULL}, 3491, "udp"}, -{"tvdumtray-port", {NULL}, 3492, "tcp"}, -{"tvdumtray-port", {NULL}, 3492, "udp"}, -{"nut", {NULL}, 3493, "tcp"}, -{"nut", {NULL}, 3493, "udp"}, -{"ibm3494", {NULL}, 3494, "tcp"}, -{"ibm3494", {NULL}, 3494, "udp"}, -{"seclayer-tcp", {NULL}, 3495, "tcp"}, -{"seclayer-tcp", {NULL}, 3495, "udp"}, -{"seclayer-tls", {NULL}, 3496, "tcp"}, -{"seclayer-tls", {NULL}, 3496, "udp"}, -{"ipether232port", {NULL}, 3497, "tcp"}, -{"ipether232port", {NULL}, 3497, "udp"}, -{"dashpas-port", {NULL}, 3498, "tcp"}, -{"dashpas-port", {NULL}, 3498, "udp"}, -{"sccip-media", {NULL}, 3499, "tcp"}, -{"sccip-media", {NULL}, 3499, "udp"}, -{"rtmp-port", {NULL}, 3500, "tcp"}, -{"rtmp-port", {NULL}, 3500, "udp"}, -{"isoft-p2p", {NULL}, 3501, "tcp"}, -{"isoft-p2p", {NULL}, 3501, "udp"}, -{"avinstalldisc", {NULL}, 3502, "tcp"}, -{"avinstalldisc", {NULL}, 3502, "udp"}, -{"lsp-ping", {NULL}, 3503, "tcp"}, -{"lsp-ping", {NULL}, 3503, "udp"}, -{"ironstorm", {NULL}, 3504, "tcp"}, -{"ironstorm", {NULL}, 3504, "udp"}, -{"ccmcomm", {NULL}, 3505, "tcp"}, -{"ccmcomm", {NULL}, 3505, "udp"}, -{"apc-3506", {NULL}, 3506, "tcp"}, -{"apc-3506", {NULL}, 3506, "udp"}, -{"nesh-broker", {NULL}, 3507, "tcp"}, -{"nesh-broker", {NULL}, 3507, "udp"}, -{"interactionweb", {NULL}, 3508, "tcp"}, -{"interactionweb", {NULL}, 3508, "udp"}, -{"vt-ssl", {NULL}, 3509, "tcp"}, -{"vt-ssl", {NULL}, 3509, "udp"}, -{"xss-port", {NULL}, 3510, "tcp"}, -{"xss-port", {NULL}, 3510, "udp"}, -{"webmail-2", {NULL}, 3511, "tcp"}, -{"webmail-2", {NULL}, 3511, "udp"}, -{"aztec", {NULL}, 3512, "tcp"}, -{"aztec", {NULL}, 3512, "udp"}, -{"arcpd", {NULL}, 3513, "tcp"}, -{"arcpd", {NULL}, 3513, "udp"}, -{"must-p2p", {NULL}, 3514, "tcp"}, -{"must-p2p", {NULL}, 3514, "udp"}, -{"must-backplane", {NULL}, 3515, "tcp"}, -{"must-backplane", {NULL}, 3515, "udp"}, -{"smartcard-port", {NULL}, 3516, "tcp"}, -{"smartcard-port", {NULL}, 3516, "udp"}, -{"802-11-iapp", {NULL}, 3517, "tcp"}, -{"802-11-iapp", {NULL}, 3517, "udp"}, -{"artifact-msg", {NULL}, 3518, "tcp"}, -{"artifact-msg", {NULL}, 3518, "udp"}, -{"nvmsgd", {NULL}, 3519, "tcp"}, -{"galileo", {NULL}, 3519, "udp"}, -{"galileolog", {NULL}, 3520, "tcp"}, -{"galileolog", {NULL}, 3520, "udp"}, -{"mc3ss", {NULL}, 3521, "tcp"}, -{"mc3ss", {NULL}, 3521, "udp"}, -{"nssocketport", {NULL}, 3522, "tcp"}, -{"nssocketport", {NULL}, 3522, "udp"}, -{"odeumservlink", {NULL}, 3523, "tcp"}, -{"odeumservlink", {NULL}, 3523, "udp"}, -{"ecmport", {NULL}, 3524, "tcp"}, -{"ecmport", {NULL}, 3524, "udp"}, -{"eisport", {NULL}, 3525, "tcp"}, -{"eisport", {NULL}, 3525, "udp"}, -{"starquiz-port", {NULL}, 3526, "tcp"}, -{"starquiz-port", {NULL}, 3526, "udp"}, -{"beserver-msg-q", {NULL}, 3527, "tcp"}, -{"beserver-msg-q", {NULL}, 3527, "udp"}, -{"jboss-iiop", {NULL}, 3528, "tcp"}, -{"jboss-iiop", {NULL}, 3528, "udp"}, -{"jboss-iiop-ssl", {NULL}, 3529, "tcp"}, -{"jboss-iiop-ssl", {NULL}, 3529, "udp"}, -{"gf", {NULL}, 3530, "tcp"}, -{"gf", {NULL}, 3530, "udp"}, -{"joltid", {NULL}, 3531, "tcp"}, -{"joltid", {NULL}, 3531, "udp"}, -{"raven-rmp", {NULL}, 3532, "tcp"}, -{"raven-rmp", {NULL}, 3532, "udp"}, -{"raven-rdp", {NULL}, 3533, "tcp"}, -{"raven-rdp", {NULL}, 3533, "udp"}, -{"urld-port", {NULL}, 3534, "tcp"}, -{"urld-port", {NULL}, 3534, "udp"}, -{"ms-la", {NULL}, 3535, "tcp"}, -{"ms-la", {NULL}, 3535, "udp"}, -{"snac", {NULL}, 3536, "tcp"}, -{"snac", {NULL}, 3536, "udp"}, -{"ni-visa-remote", {NULL}, 3537, "tcp"}, -{"ni-visa-remote", {NULL}, 3537, "udp"}, -{"ibm-diradm", {NULL}, 3538, "tcp"}, -{"ibm-diradm", {NULL}, 3538, "udp"}, -{"ibm-diradm-ssl", {NULL}, 3539, "tcp"}, -{"ibm-diradm-ssl", {NULL}, 3539, "udp"}, -{"pnrp-port", {NULL}, 3540, "tcp"}, -{"pnrp-port", {NULL}, 3540, "udp"}, -{"voispeed-port", {NULL}, 3541, "tcp"}, -{"voispeed-port", {NULL}, 3541, "udp"}, -{"hacl-monitor", {NULL}, 3542, "tcp"}, -{"hacl-monitor", {NULL}, 3542, "udp"}, -{"qftest-lookup", {NULL}, 3543, "tcp"}, -{"qftest-lookup", {NULL}, 3543, "udp"}, -{"teredo", {NULL}, 3544, "tcp"}, -{"teredo", {NULL}, 3544, "udp"}, -{"camac", {NULL}, 3545, "tcp"}, -{"camac", {NULL}, 3545, "udp"}, -{"symantec-sim", {NULL}, 3547, "tcp"}, -{"symantec-sim", {NULL}, 3547, "udp"}, -{"interworld", {NULL}, 3548, "tcp"}, -{"interworld", {NULL}, 3548, "udp"}, -{"tellumat-nms", {NULL}, 3549, "tcp"}, -{"tellumat-nms", {NULL}, 3549, "udp"}, -{"ssmpp", {NULL}, 3550, "tcp"}, -{"ssmpp", {NULL}, 3550, "udp"}, -{"apcupsd", {NULL}, 3551, "tcp"}, -{"apcupsd", {NULL}, 3551, "udp"}, -{"taserver", {NULL}, 3552, "tcp"}, -{"taserver", {NULL}, 3552, "udp"}, -{"rbr-discovery", {NULL}, 3553, "tcp"}, -{"rbr-discovery", {NULL}, 3553, "udp"}, -{"questnotify", {NULL}, 3554, "tcp"}, -{"questnotify", {NULL}, 3554, "udp"}, -{"razor", {NULL}, 3555, "tcp"}, -{"razor", {NULL}, 3555, "udp"}, -{"sky-transport", {NULL}, 3556, "tcp"}, -{"sky-transport", {NULL}, 3556, "udp"}, -{"personalos-001", {NULL}, 3557, "tcp"}, -{"personalos-001", {NULL}, 3557, "udp"}, -{"mcp-port", {NULL}, 3558, "tcp"}, -{"mcp-port", {NULL}, 3558, "udp"}, -{"cctv-port", {NULL}, 3559, "tcp"}, -{"cctv-port", {NULL}, 3559, "udp"}, -{"iniserve-port", {NULL}, 3560, "tcp"}, -{"iniserve-port", {NULL}, 3560, "udp"}, -{"bmc-onekey", {NULL}, 3561, "tcp"}, -{"bmc-onekey", {NULL}, 3561, "udp"}, -{"sdbproxy", {NULL}, 3562, "tcp"}, -{"sdbproxy", {NULL}, 3562, "udp"}, -{"watcomdebug", {NULL}, 3563, "tcp"}, -{"watcomdebug", {NULL}, 3563, "udp"}, -{"esimport", {NULL}, 3564, "tcp"}, -{"esimport", {NULL}, 3564, "udp"}, -{"m2pa", {NULL}, 3565, "tcp"}, -{"m2pa", {NULL}, 3565, "sctp"}, -{"quest-data-hub", {NULL}, 3566, "tcp"}, -{"oap", {NULL}, 3567, "tcp"}, -{"oap", {NULL}, 3567, "udp"}, -{"oap-s", {NULL}, 3568, "tcp"}, -{"oap-s", {NULL}, 3568, "udp"}, -{"mbg-ctrl", {NULL}, 3569, "tcp"}, -{"mbg-ctrl", {NULL}, 3569, "udp"}, -{"mccwebsvr-port", {NULL}, 3570, "tcp"}, -{"mccwebsvr-port", {NULL}, 3570, "udp"}, -{"megardsvr-port", {NULL}, 3571, "tcp"}, -{"megardsvr-port", {NULL}, 3571, "udp"}, -{"megaregsvrport", {NULL}, 3572, "tcp"}, -{"megaregsvrport", {NULL}, 3572, "udp"}, -{"tag-ups-1", {NULL}, 3573, "tcp"}, -{"tag-ups-1", {NULL}, 3573, "udp"}, -{"dmaf-server", {NULL}, 3574, "tcp"}, -{"dmaf-caster", {NULL}, 3574, "udp"}, -{"ccm-port", {NULL}, 3575, "tcp"}, -{"ccm-port", {NULL}, 3575, "udp"}, -{"cmc-port", {NULL}, 3576, "tcp"}, -{"cmc-port", {NULL}, 3576, "udp"}, -{"config-port", {NULL}, 3577, "tcp"}, -{"config-port", {NULL}, 3577, "udp"}, -{"data-port", {NULL}, 3578, "tcp"}, -{"data-port", {NULL}, 3578, "udp"}, -{"ttat3lb", {NULL}, 3579, "tcp"}, -{"ttat3lb", {NULL}, 3579, "udp"}, -{"nati-svrloc", {NULL}, 3580, "tcp"}, -{"nati-svrloc", {NULL}, 3580, "udp"}, -{"kfxaclicensing", {NULL}, 3581, "tcp"}, -{"kfxaclicensing", {NULL}, 3581, "udp"}, -{"press", {NULL}, 3582, "tcp"}, -{"press", {NULL}, 3582, "udp"}, -{"canex-watch", {NULL}, 3583, "tcp"}, -{"canex-watch", {NULL}, 3583, "udp"}, -{"u-dbap", {NULL}, 3584, "tcp"}, -{"u-dbap", {NULL}, 3584, "udp"}, -{"emprise-lls", {NULL}, 3585, "tcp"}, -{"emprise-lls", {NULL}, 3585, "udp"}, -{"emprise-lsc", {NULL}, 3586, "tcp"}, -{"emprise-lsc", {NULL}, 3586, "udp"}, -{"p2pgroup", {NULL}, 3587, "tcp"}, -{"p2pgroup", {NULL}, 3587, "udp"}, -{"sentinel", {NULL}, 3588, "tcp"}, -{"sentinel", {NULL}, 3588, "udp"}, -{"isomair", {NULL}, 3589, "tcp"}, -{"isomair", {NULL}, 3589, "udp"}, -{"wv-csp-sms", {NULL}, 3590, "tcp"}, -{"wv-csp-sms", {NULL}, 3590, "udp"}, -{"gtrack-server", {NULL}, 3591, "tcp"}, -{"gtrack-server", {NULL}, 3591, "udp"}, -{"gtrack-ne", {NULL}, 3592, "tcp"}, -{"gtrack-ne", {NULL}, 3592, "udp"}, -{"bpmd", {NULL}, 3593, "tcp"}, -{"bpmd", {NULL}, 3593, "udp"}, -{"mediaspace", {NULL}, 3594, "tcp"}, -{"mediaspace", {NULL}, 3594, "udp"}, -{"shareapp", {NULL}, 3595, "tcp"}, -{"shareapp", {NULL}, 3595, "udp"}, -{"iw-mmogame", {NULL}, 3596, "tcp"}, -{"iw-mmogame", {NULL}, 3596, "udp"}, -{"a14", {NULL}, 3597, "tcp"}, -{"a14", {NULL}, 3597, "udp"}, -{"a15", {NULL}, 3598, "tcp"}, -{"a15", {NULL}, 3598, "udp"}, -{"quasar-server", {NULL}, 3599, "tcp"}, -{"quasar-server", {NULL}, 3599, "udp"}, -{"trap-daemon", {NULL}, 3600, "tcp"}, -{"trap-daemon", {NULL}, 3600, "udp"}, -{"visinet-gui", {NULL}, 3601, "tcp"}, -{"visinet-gui", {NULL}, 3601, "udp"}, -{"infiniswitchcl", {NULL}, 3602, "tcp"}, -{"infiniswitchcl", {NULL}, 3602, "udp"}, -{"int-rcv-cntrl", {NULL}, 3603, "tcp"}, -{"int-rcv-cntrl", {NULL}, 3603, "udp"}, -{"bmc-jmx-port", {NULL}, 3604, "tcp"}, -{"bmc-jmx-port", {NULL}, 3604, "udp"}, -{"comcam-io", {NULL}, 3605, "tcp"}, -{"comcam-io", {NULL}, 3605, "udp"}, -{"splitlock", {NULL}, 3606, "tcp"}, -{"splitlock", {NULL}, 3606, "udp"}, -{"precise-i3", {NULL}, 3607, "tcp"}, -{"precise-i3", {NULL}, 3607, "udp"}, -{"trendchip-dcp", {NULL}, 3608, "tcp"}, -{"trendchip-dcp", {NULL}, 3608, "udp"}, -{"cpdi-pidas-cm", {NULL}, 3609, "tcp"}, -{"cpdi-pidas-cm", {NULL}, 3609, "udp"}, -{"echonet", {NULL}, 3610, "tcp"}, -{"echonet", {NULL}, 3610, "udp"}, -{"six-degrees", {NULL}, 3611, "tcp"}, -{"six-degrees", {NULL}, 3611, "udp"}, -{"hp-dataprotect", {NULL}, 3612, "tcp"}, -{"hp-dataprotect", {NULL}, 3612, "udp"}, -{"alaris-disc", {NULL}, 3613, "tcp"}, -{"alaris-disc", {NULL}, 3613, "udp"}, -{"sigma-port", {NULL}, 3614, "tcp"}, -{"sigma-port", {NULL}, 3614, "udp"}, -{"start-network", {NULL}, 3615, "tcp"}, -{"start-network", {NULL}, 3615, "udp"}, -{"cd3o-protocol", {NULL}, 3616, "tcp"}, -{"cd3o-protocol", {NULL}, 3616, "udp"}, -{"sharp-server", {NULL}, 3617, "tcp"}, -{"sharp-server", {NULL}, 3617, "udp"}, -{"aairnet-1", {NULL}, 3618, "tcp"}, -{"aairnet-1", {NULL}, 3618, "udp"}, -{"aairnet-2", {NULL}, 3619, "tcp"}, -{"aairnet-2", {NULL}, 3619, "udp"}, -{"ep-pcp", {NULL}, 3620, "tcp"}, -{"ep-pcp", {NULL}, 3620, "udp"}, -{"ep-nsp", {NULL}, 3621, "tcp"}, -{"ep-nsp", {NULL}, 3621, "udp"}, -{"ff-lr-port", {NULL}, 3622, "tcp"}, -{"ff-lr-port", {NULL}, 3622, "udp"}, -{"haipe-discover", {NULL}, 3623, "tcp"}, -{"haipe-discover", {NULL}, 3623, "udp"}, -{"dist-upgrade", {NULL}, 3624, "tcp"}, -{"dist-upgrade", {NULL}, 3624, "udp"}, -{"volley", {NULL}, 3625, "tcp"}, -{"volley", {NULL}, 3625, "udp"}, -{"bvcdaemon-port", {NULL}, 3626, "tcp"}, -{"bvcdaemon-port", {NULL}, 3626, "udp"}, -{"jamserverport", {NULL}, 3627, "tcp"}, -{"jamserverport", {NULL}, 3627, "udp"}, -{"ept-machine", {NULL}, 3628, "tcp"}, -{"ept-machine", {NULL}, 3628, "udp"}, -{"escvpnet", {NULL}, 3629, "tcp"}, -{"escvpnet", {NULL}, 3629, "udp"}, -{"cs-remote-db", {NULL}, 3630, "tcp"}, -{"cs-remote-db", {NULL}, 3630, "udp"}, -{"cs-services", {NULL}, 3631, "tcp"}, -{"cs-services", {NULL}, 3631, "udp"}, -{"distcc", {NULL}, 3632, "tcp"}, -{"distcc", {NULL}, 3632, "udp"}, -{"wacp", {NULL}, 3633, "tcp"}, -{"wacp", {NULL}, 3633, "udp"}, -{"hlibmgr", {NULL}, 3634, "tcp"}, -{"hlibmgr", {NULL}, 3634, "udp"}, -{"sdo", {NULL}, 3635, "tcp"}, -{"sdo", {NULL}, 3635, "udp"}, -{"servistaitsm", {NULL}, 3636, "tcp"}, -{"servistaitsm", {NULL}, 3636, "udp"}, -{"scservp", {NULL}, 3637, "tcp"}, -{"scservp", {NULL}, 3637, "udp"}, -{"ehp-backup", {NULL}, 3638, "tcp"}, -{"ehp-backup", {NULL}, 3638, "udp"}, -{"xap-ha", {NULL}, 3639, "tcp"}, -{"xap-ha", {NULL}, 3639, "udp"}, -{"netplay-port1", {NULL}, 3640, "tcp"}, -{"netplay-port1", {NULL}, 3640, "udp"}, -{"netplay-port2", {NULL}, 3641, "tcp"}, -{"netplay-port2", {NULL}, 3641, "udp"}, -{"juxml-port", {NULL}, 3642, "tcp"}, -{"juxml-port", {NULL}, 3642, "udp"}, -{"audiojuggler", {NULL}, 3643, "tcp"}, -{"audiojuggler", {NULL}, 3643, "udp"}, -{"ssowatch", {NULL}, 3644, "tcp"}, -{"ssowatch", {NULL}, 3644, "udp"}, -{"cyc", {NULL}, 3645, "tcp"}, -{"cyc", {NULL}, 3645, "udp"}, -{"xss-srv-port", {NULL}, 3646, "tcp"}, -{"xss-srv-port", {NULL}, 3646, "udp"}, -{"splitlock-gw", {NULL}, 3647, "tcp"}, -{"splitlock-gw", {NULL}, 3647, "udp"}, -{"fjcp", {NULL}, 3648, "tcp"}, -{"fjcp", {NULL}, 3648, "udp"}, -{"nmmp", {NULL}, 3649, "tcp"}, -{"nmmp", {NULL}, 3649, "udp"}, -{"prismiq-plugin", {NULL}, 3650, "tcp"}, -{"prismiq-plugin", {NULL}, 3650, "udp"}, -{"xrpc-registry", {NULL}, 3651, "tcp"}, -{"xrpc-registry", {NULL}, 3651, "udp"}, -{"vxcrnbuport", {NULL}, 3652, "tcp"}, -{"vxcrnbuport", {NULL}, 3652, "udp"}, -{"tsp", {NULL}, 3653, "tcp"}, -{"tsp", {NULL}, 3653, "udp"}, -{"vaprtm", {NULL}, 3654, "tcp"}, -{"vaprtm", {NULL}, 3654, "udp"}, -{"abatemgr", {NULL}, 3655, "tcp"}, -{"abatemgr", {NULL}, 3655, "udp"}, -{"abatjss", {NULL}, 3656, "tcp"}, -{"abatjss", {NULL}, 3656, "udp"}, -{"immedianet-bcn", {NULL}, 3657, "tcp"}, -{"immedianet-bcn", {NULL}, 3657, "udp"}, -{"ps-ams", {NULL}, 3658, "tcp"}, -{"ps-ams", {NULL}, 3658, "udp"}, -{"apple-sasl", {NULL}, 3659, "tcp"}, -{"apple-sasl", {NULL}, 3659, "udp"}, -{"can-nds-ssl", {NULL}, 3660, "tcp"}, -{"can-nds-ssl", {NULL}, 3660, "udp"}, -{"can-ferret-ssl", {NULL}, 3661, "tcp"}, -{"can-ferret-ssl", {NULL}, 3661, "udp"}, -{"pserver", {NULL}, 3662, "tcp"}, -{"pserver", {NULL}, 3662, "udp"}, -{"dtp", {NULL}, 3663, "tcp"}, -{"dtp", {NULL}, 3663, "udp"}, -{"ups-engine", {NULL}, 3664, "tcp"}, -{"ups-engine", {NULL}, 3664, "udp"}, -{"ent-engine", {NULL}, 3665, "tcp"}, -{"ent-engine", {NULL}, 3665, "udp"}, -{"eserver-pap", {NULL}, 3666, "tcp"}, -{"eserver-pap", {NULL}, 3666, "udp"}, -{"infoexch", {NULL}, 3667, "tcp"}, -{"infoexch", {NULL}, 3667, "udp"}, -{"dell-rm-port", {NULL}, 3668, "tcp"}, -{"dell-rm-port", {NULL}, 3668, "udp"}, -{"casanswmgmt", {NULL}, 3669, "tcp"}, -{"casanswmgmt", {NULL}, 3669, "udp"}, -{"smile", {NULL}, 3670, "tcp"}, -{"smile", {NULL}, 3670, "udp"}, -{"efcp", {NULL}, 3671, "tcp"}, -{"efcp", {NULL}, 3671, "udp"}, -{"lispworks-orb", {NULL}, 3672, "tcp"}, -{"lispworks-orb", {NULL}, 3672, "udp"}, -{"mediavault-gui", {NULL}, 3673, "tcp"}, -{"mediavault-gui", {NULL}, 3673, "udp"}, -{"wininstall-ipc", {NULL}, 3674, "tcp"}, -{"wininstall-ipc", {NULL}, 3674, "udp"}, -{"calltrax", {NULL}, 3675, "tcp"}, -{"calltrax", {NULL}, 3675, "udp"}, -{"va-pacbase", {NULL}, 3676, "tcp"}, -{"va-pacbase", {NULL}, 3676, "udp"}, -{"roverlog", {NULL}, 3677, "tcp"}, -{"roverlog", {NULL}, 3677, "udp"}, -{"ipr-dglt", {NULL}, 3678, "tcp"}, -{"ipr-dglt", {NULL}, 3678, "udp"}, -{"newton-dock", {NULL}, 3679, "tcp"}, -{"newton-dock", {NULL}, 3679, "udp"}, -{"npds-tracker", {NULL}, 3680, "tcp"}, -{"npds-tracker", {NULL}, 3680, "udp"}, -{"bts-x73", {NULL}, 3681, "tcp"}, -{"bts-x73", {NULL}, 3681, "udp"}, -{"cas-mapi", {NULL}, 3682, "tcp"}, -{"cas-mapi", {NULL}, 3682, "udp"}, -{"bmc-ea", {NULL}, 3683, "tcp"}, -{"bmc-ea", {NULL}, 3683, "udp"}, -{"faxstfx-port", {NULL}, 3684, "tcp"}, -{"faxstfx-port", {NULL}, 3684, "udp"}, -{"dsx-agent", {NULL}, 3685, "tcp"}, -{"dsx-agent", {NULL}, 3685, "udp"}, -{"tnmpv2", {NULL}, 3686, "tcp"}, -{"tnmpv2", {NULL}, 3686, "udp"}, -{"simple-push", {NULL}, 3687, "tcp"}, -{"simple-push", {NULL}, 3687, "udp"}, -{"simple-push-s", {NULL}, 3688, "tcp"}, -{"simple-push-s", {NULL}, 3688, "udp"}, -{"daap", {NULL}, 3689, "tcp"}, -{"daap", {NULL}, 3689, "udp"}, -{"svn", {NULL}, 3690, "tcp"}, -{"svn", {NULL}, 3690, "udp"}, -{"magaya-network", {NULL}, 3691, "tcp"}, -{"magaya-network", {NULL}, 3691, "udp"}, -{"intelsync", {NULL}, 3692, "tcp"}, -{"intelsync", {NULL}, 3692, "udp"}, -{"bmc-data-coll", {NULL}, 3695, "tcp"}, -{"bmc-data-coll", {NULL}, 3695, "udp"}, -{"telnetcpcd", {NULL}, 3696, "tcp"}, -{"telnetcpcd", {NULL}, 3696, "udp"}, -{"nw-license", {NULL}, 3697, "tcp"}, -{"nw-license", {NULL}, 3697, "udp"}, -{"sagectlpanel", {NULL}, 3698, "tcp"}, -{"sagectlpanel", {NULL}, 3698, "udp"}, -{"kpn-icw", {NULL}, 3699, "tcp"}, -{"kpn-icw", {NULL}, 3699, "udp"}, -{"lrs-paging", {NULL}, 3700, "tcp"}, -{"lrs-paging", {NULL}, 3700, "udp"}, -{"netcelera", {NULL}, 3701, "tcp"}, -{"netcelera", {NULL}, 3701, "udp"}, -{"ws-discovery", {NULL}, 3702, "tcp"}, -{"ws-discovery", {NULL}, 3702, "udp"}, -{"adobeserver-3", {NULL}, 3703, "tcp"}, -{"adobeserver-3", {NULL}, 3703, "udp"}, -{"adobeserver-4", {NULL}, 3704, "tcp"}, -{"adobeserver-4", {NULL}, 3704, "udp"}, -{"adobeserver-5", {NULL}, 3705, "tcp"}, -{"adobeserver-5", {NULL}, 3705, "udp"}, -{"rt-event", {NULL}, 3706, "tcp"}, -{"rt-event", {NULL}, 3706, "udp"}, -{"rt-event-s", {NULL}, 3707, "tcp"}, -{"rt-event-s", {NULL}, 3707, "udp"}, -{"sun-as-iiops", {NULL}, 3708, "tcp"}, -{"sun-as-iiops", {NULL}, 3708, "udp"}, -{"ca-idms", {NULL}, 3709, "tcp"}, -{"ca-idms", {NULL}, 3709, "udp"}, -{"portgate-auth", {NULL}, 3710, "tcp"}, -{"portgate-auth", {NULL}, 3710, "udp"}, -{"edb-server2", {NULL}, 3711, "tcp"}, -{"edb-server2", {NULL}, 3711, "udp"}, -{"sentinel-ent", {NULL}, 3712, "tcp"}, -{"sentinel-ent", {NULL}, 3712, "udp"}, -{"tftps", {NULL}, 3713, "tcp"}, -{"tftps", {NULL}, 3713, "udp"}, -{"delos-dms", {NULL}, 3714, "tcp"}, -{"delos-dms", {NULL}, 3714, "udp"}, -{"anoto-rendezv", {NULL}, 3715, "tcp"}, -{"anoto-rendezv", {NULL}, 3715, "udp"}, -{"wv-csp-sms-cir", {NULL}, 3716, "tcp"}, -{"wv-csp-sms-cir", {NULL}, 3716, "udp"}, -{"wv-csp-udp-cir", {NULL}, 3717, "tcp"}, -{"wv-csp-udp-cir", {NULL}, 3717, "udp"}, -{"opus-services", {NULL}, 3718, "tcp"}, -{"opus-services", {NULL}, 3718, "udp"}, -{"itelserverport", {NULL}, 3719, "tcp"}, -{"itelserverport", {NULL}, 3719, "udp"}, -{"ufastro-instr", {NULL}, 3720, "tcp"}, -{"ufastro-instr", {NULL}, 3720, "udp"}, -{"xsync", {NULL}, 3721, "tcp"}, -{"xsync", {NULL}, 3721, "udp"}, -{"xserveraid", {NULL}, 3722, "tcp"}, -{"xserveraid", {NULL}, 3722, "udp"}, -{"sychrond", {NULL}, 3723, "tcp"}, -{"sychrond", {NULL}, 3723, "udp"}, -{"blizwow", {NULL}, 3724, "tcp"}, -{"blizwow", {NULL}, 3724, "udp"}, -{"na-er-tip", {NULL}, 3725, "tcp"}, -{"na-er-tip", {NULL}, 3725, "udp"}, -{"array-manager", {NULL}, 3726, "tcp"}, -{"array-manager", {NULL}, 3726, "udp"}, -{"e-mdu", {NULL}, 3727, "tcp"}, -{"e-mdu", {NULL}, 3727, "udp"}, -{"e-woa", {NULL}, 3728, "tcp"}, -{"e-woa", {NULL}, 3728, "udp"}, -{"fksp-audit", {NULL}, 3729, "tcp"}, -{"fksp-audit", {NULL}, 3729, "udp"}, -{"client-ctrl", {NULL}, 3730, "tcp"}, -{"client-ctrl", {NULL}, 3730, "udp"}, -{"smap", {NULL}, 3731, "tcp"}, -{"smap", {NULL}, 3731, "udp"}, -{"m-wnn", {NULL}, 3732, "tcp"}, -{"m-wnn", {NULL}, 3732, "udp"}, -{"multip-msg", {NULL}, 3733, "tcp"}, -{"multip-msg", {NULL}, 3733, "udp"}, -{"synel-data", {NULL}, 3734, "tcp"}, -{"synel-data", {NULL}, 3734, "udp"}, -{"pwdis", {NULL}, 3735, "tcp"}, -{"pwdis", {NULL}, 3735, "udp"}, -{"rs-rmi", {NULL}, 3736, "tcp"}, -{"rs-rmi", {NULL}, 3736, "udp"}, -{"xpanel", {NULL}, 3737, "tcp"}, -{"versatalk", {NULL}, 3738, "tcp"}, -{"versatalk", {NULL}, 3738, "udp"}, -{"launchbird-lm", {NULL}, 3739, "tcp"}, -{"launchbird-lm", {NULL}, 3739, "udp"}, -{"heartbeat", {NULL}, 3740, "tcp"}, -{"heartbeat", {NULL}, 3740, "udp"}, -{"wysdma", {NULL}, 3741, "tcp"}, -{"wysdma", {NULL}, 3741, "udp"}, -{"cst-port", {NULL}, 3742, "tcp"}, -{"cst-port", {NULL}, 3742, "udp"}, -{"ipcs-command", {NULL}, 3743, "tcp"}, -{"ipcs-command", {NULL}, 3743, "udp"}, -{"sasg", {NULL}, 3744, "tcp"}, -{"sasg", {NULL}, 3744, "udp"}, -{"gw-call-port", {NULL}, 3745, "tcp"}, -{"gw-call-port", {NULL}, 3745, "udp"}, -{"linktest", {NULL}, 3746, "tcp"}, -{"linktest", {NULL}, 3746, "udp"}, -{"linktest-s", {NULL}, 3747, "tcp"}, -{"linktest-s", {NULL}, 3747, "udp"}, -{"webdata", {NULL}, 3748, "tcp"}, -{"webdata", {NULL}, 3748, "udp"}, -{"cimtrak", {NULL}, 3749, "tcp"}, -{"cimtrak", {NULL}, 3749, "udp"}, -{"cbos-ip-port", {NULL}, 3750, "tcp"}, -{"cbos-ip-port", {NULL}, 3750, "udp"}, -{"gprs-cube", {NULL}, 3751, "tcp"}, -{"gprs-cube", {NULL}, 3751, "udp"}, -{"vipremoteagent", {NULL}, 3752, "tcp"}, -{"vipremoteagent", {NULL}, 3752, "udp"}, -{"nattyserver", {NULL}, 3753, "tcp"}, -{"nattyserver", {NULL}, 3753, "udp"}, -{"timestenbroker", {NULL}, 3754, "tcp"}, -{"timestenbroker", {NULL}, 3754, "udp"}, -{"sas-remote-hlp", {NULL}, 3755, "tcp"}, -{"sas-remote-hlp", {NULL}, 3755, "udp"}, -{"canon-capt", {NULL}, 3756, "tcp"}, -{"canon-capt", {NULL}, 3756, "udp"}, -{"grf-port", {NULL}, 3757, "tcp"}, -{"grf-port", {NULL}, 3757, "udp"}, -{"apw-registry", {NULL}, 3758, "tcp"}, -{"apw-registry", {NULL}, 3758, "udp"}, -{"exapt-lmgr", {NULL}, 3759, "tcp"}, -{"exapt-lmgr", {NULL}, 3759, "udp"}, -{"adtempusclient", {NULL}, 3760, "tcp"}, -{"adtempusclient", {NULL}, 3760, "udp"}, -{"gsakmp", {NULL}, 3761, "tcp"}, -{"gsakmp", {NULL}, 3761, "udp"}, -{"gbs-smp", {NULL}, 3762, "tcp"}, -{"gbs-smp", {NULL}, 3762, "udp"}, -{"xo-wave", {NULL}, 3763, "tcp"}, -{"xo-wave", {NULL}, 3763, "udp"}, -{"mni-prot-rout", {NULL}, 3764, "tcp"}, -{"mni-prot-rout", {NULL}, 3764, "udp"}, -{"rtraceroute", {NULL}, 3765, "tcp"}, -{"rtraceroute", {NULL}, 3765, "udp"}, -{"listmgr-port", {NULL}, 3767, "tcp"}, -{"listmgr-port", {NULL}, 3767, "udp"}, -{"rblcheckd", {NULL}, 3768, "tcp"}, -{"rblcheckd", {NULL}, 3768, "udp"}, -{"haipe-otnk", {NULL}, 3769, "tcp"}, -{"haipe-otnk", {NULL}, 3769, "udp"}, -{"cindycollab", {NULL}, 3770, "tcp"}, -{"cindycollab", {NULL}, 3770, "udp"}, -{"paging-port", {NULL}, 3771, "tcp"}, -{"paging-port", {NULL}, 3771, "udp"}, -{"ctp", {NULL}, 3772, "tcp"}, -{"ctp", {NULL}, 3772, "udp"}, -{"ctdhercules", {NULL}, 3773, "tcp"}, -{"ctdhercules", {NULL}, 3773, "udp"}, -{"zicom", {NULL}, 3774, "tcp"}, -{"zicom", {NULL}, 3774, "udp"}, -{"ispmmgr", {NULL}, 3775, "tcp"}, -{"ispmmgr", {NULL}, 3775, "udp"}, -{"dvcprov-port", {NULL}, 3776, "tcp"}, -{"dvcprov-port", {NULL}, 3776, "udp"}, -{"jibe-eb", {NULL}, 3777, "tcp"}, -{"jibe-eb", {NULL}, 3777, "udp"}, -{"c-h-it-port", {NULL}, 3778, "tcp"}, -{"c-h-it-port", {NULL}, 3778, "udp"}, -{"cognima", {NULL}, 3779, "tcp"}, -{"cognima", {NULL}, 3779, "udp"}, -{"nnp", {NULL}, 3780, "tcp"}, -{"nnp", {NULL}, 3780, "udp"}, -{"abcvoice-port", {NULL}, 3781, "tcp"}, -{"abcvoice-port", {NULL}, 3781, "udp"}, -{"iso-tp0s", {NULL}, 3782, "tcp"}, -{"iso-tp0s", {NULL}, 3782, "udp"}, -{"bim-pem", {NULL}, 3783, "tcp"}, -{"bim-pem", {NULL}, 3783, "udp"}, -{"bfd-control", {NULL}, 3784, "tcp"}, -{"bfd-control", {NULL}, 3784, "udp"}, -{"bfd-echo", {NULL}, 3785, "tcp"}, -{"bfd-echo", {NULL}, 3785, "udp"}, -{"upstriggervsw", {NULL}, 3786, "tcp"}, -{"upstriggervsw", {NULL}, 3786, "udp"}, -{"fintrx", {NULL}, 3787, "tcp"}, -{"fintrx", {NULL}, 3787, "udp"}, -{"isrp-port", {NULL}, 3788, "tcp"}, -{"isrp-port", {NULL}, 3788, "udp"}, -{"remotedeploy", {NULL}, 3789, "tcp"}, -{"remotedeploy", {NULL}, 3789, "udp"}, -{"quickbooksrds", {NULL}, 3790, "tcp"}, -{"quickbooksrds", {NULL}, 3790, "udp"}, -{"tvnetworkvideo", {NULL}, 3791, "tcp"}, -{"tvnetworkvideo", {NULL}, 3791, "udp"}, -{"sitewatch", {NULL}, 3792, "tcp"}, -{"sitewatch", {NULL}, 3792, "udp"}, -{"dcsoftware", {NULL}, 3793, "tcp"}, -{"dcsoftware", {NULL}, 3793, "udp"}, -{"jaus", {NULL}, 3794, "tcp"}, -{"jaus", {NULL}, 3794, "udp"}, -{"myblast", {NULL}, 3795, "tcp"}, -{"myblast", {NULL}, 3795, "udp"}, -{"spw-dialer", {NULL}, 3796, "tcp"}, -{"spw-dialer", {NULL}, 3796, "udp"}, -{"idps", {NULL}, 3797, "tcp"}, -{"idps", {NULL}, 3797, "udp"}, -{"minilock", {NULL}, 3798, "tcp"}, -{"minilock", {NULL}, 3798, "udp"}, -{"radius-dynauth", {NULL}, 3799, "tcp"}, -{"radius-dynauth", {NULL}, 3799, "udp"}, -{"pwgpsi", {NULL}, 3800, "tcp"}, -{"pwgpsi", {NULL}, 3800, "udp"}, -{"ibm-mgr", {NULL}, 3801, "tcp"}, -{"ibm-mgr", {NULL}, 3801, "udp"}, -{"vhd", {NULL}, 3802, "tcp"}, -{"vhd", {NULL}, 3802, "udp"}, -{"soniqsync", {NULL}, 3803, "tcp"}, -{"soniqsync", {NULL}, 3803, "udp"}, -{"iqnet-port", {NULL}, 3804, "tcp"}, -{"iqnet-port", {NULL}, 3804, "udp"}, -{"tcpdataserver", {NULL}, 3805, "tcp"}, -{"tcpdataserver", {NULL}, 3805, "udp"}, -{"wsmlb", {NULL}, 3806, "tcp"}, -{"wsmlb", {NULL}, 3806, "udp"}, -{"spugna", {NULL}, 3807, "tcp"}, -{"spugna", {NULL}, 3807, "udp"}, -{"sun-as-iiops-ca", {NULL}, 3808, "tcp"}, -{"sun-as-iiops-ca", {NULL}, 3808, "udp"}, -{"apocd", {NULL}, 3809, "tcp"}, -{"apocd", {NULL}, 3809, "udp"}, -{"wlanauth", {NULL}, 3810, "tcp"}, -{"wlanauth", {NULL}, 3810, "udp"}, -{"amp", {NULL}, 3811, "tcp"}, -{"amp", {NULL}, 3811, "udp"}, -{"neto-wol-server", {NULL}, 3812, "tcp"}, -{"neto-wol-server", {NULL}, 3812, "udp"}, -{"rap-ip", {NULL}, 3813, "tcp"}, -{"rap-ip", {NULL}, 3813, "udp"}, -{"neto-dcs", {NULL}, 3814, "tcp"}, -{"neto-dcs", {NULL}, 3814, "udp"}, -{"lansurveyorxml", {NULL}, 3815, "tcp"}, -{"lansurveyorxml", {NULL}, 3815, "udp"}, -{"sunlps-http", {NULL}, 3816, "tcp"}, -{"sunlps-http", {NULL}, 3816, "udp"}, -{"tapeware", {NULL}, 3817, "tcp"}, -{"tapeware", {NULL}, 3817, "udp"}, -{"crinis-hb", {NULL}, 3818, "tcp"}, -{"crinis-hb", {NULL}, 3818, "udp"}, -{"epl-slp", {NULL}, 3819, "tcp"}, -{"epl-slp", {NULL}, 3819, "udp"}, -{"scp", {NULL}, 3820, "tcp"}, -{"scp", {NULL}, 3820, "udp"}, -{"pmcp", {NULL}, 3821, "tcp"}, -{"pmcp", {NULL}, 3821, "udp"}, -{"acp-discovery", {NULL}, 3822, "tcp"}, -{"acp-discovery", {NULL}, 3822, "udp"}, -{"acp-conduit", {NULL}, 3823, "tcp"}, -{"acp-conduit", {NULL}, 3823, "udp"}, -{"acp-policy", {NULL}, 3824, "tcp"}, -{"acp-policy", {NULL}, 3824, "udp"}, -{"ffserver", {NULL}, 3825, "tcp"}, -{"ffserver", {NULL}, 3825, "udp"}, -{"wormux", {NULL}, 3826, "tcp"}, -{"wormux", {NULL}, 3826, "udp"}, -{"netmpi", {NULL}, 3827, "tcp"}, -{"netmpi", {NULL}, 3827, "udp"}, -{"neteh", {NULL}, 3828, "tcp"}, -{"neteh", {NULL}, 3828, "udp"}, -{"neteh-ext", {NULL}, 3829, "tcp"}, -{"neteh-ext", {NULL}, 3829, "udp"}, -{"cernsysmgmtagt", {NULL}, 3830, "tcp"}, -{"cernsysmgmtagt", {NULL}, 3830, "udp"}, -{"dvapps", {NULL}, 3831, "tcp"}, -{"dvapps", {NULL}, 3831, "udp"}, -{"xxnetserver", {NULL}, 3832, "tcp"}, -{"xxnetserver", {NULL}, 3832, "udp"}, -{"aipn-auth", {NULL}, 3833, "tcp"}, -{"aipn-auth", {NULL}, 3833, "udp"}, -{"spectardata", {NULL}, 3834, "tcp"}, -{"spectardata", {NULL}, 3834, "udp"}, -{"spectardb", {NULL}, 3835, "tcp"}, -{"spectardb", {NULL}, 3835, "udp"}, -{"markem-dcp", {NULL}, 3836, "tcp"}, -{"markem-dcp", {NULL}, 3836, "udp"}, -{"mkm-discovery", {NULL}, 3837, "tcp"}, -{"mkm-discovery", {NULL}, 3837, "udp"}, -{"sos", {NULL}, 3838, "tcp"}, -{"sos", {NULL}, 3838, "udp"}, -{"amx-rms", {NULL}, 3839, "tcp"}, -{"amx-rms", {NULL}, 3839, "udp"}, -{"flirtmitmir", {NULL}, 3840, "tcp"}, -{"flirtmitmir", {NULL}, 3840, "udp"}, -{"zfirm-shiprush3", {NULL}, 3841, "tcp"}, -{"zfirm-shiprush3", {NULL}, 3841, "udp"}, -{"nhci", {NULL}, 3842, "tcp"}, -{"nhci", {NULL}, 3842, "udp"}, -{"quest-agent", {NULL}, 3843, "tcp"}, -{"quest-agent", {NULL}, 3843, "udp"}, -{"rnm", {NULL}, 3844, "tcp"}, -{"rnm", {NULL}, 3844, "udp"}, -{"v-one-spp", {NULL}, 3845, "tcp"}, -{"v-one-spp", {NULL}, 3845, "udp"}, -{"an-pcp", {NULL}, 3846, "tcp"}, -{"an-pcp", {NULL}, 3846, "udp"}, -{"msfw-control", {NULL}, 3847, "tcp"}, -{"msfw-control", {NULL}, 3847, "udp"}, -{"item", {NULL}, 3848, "tcp"}, -{"item", {NULL}, 3848, "udp"}, -{"spw-dnspreload", {NULL}, 3849, "tcp"}, -{"spw-dnspreload", {NULL}, 3849, "udp"}, -{"qtms-bootstrap", {NULL}, 3850, "tcp"}, -{"qtms-bootstrap", {NULL}, 3850, "udp"}, -{"spectraport", {NULL}, 3851, "tcp"}, -{"spectraport", {NULL}, 3851, "udp"}, -{"sse-app-config", {NULL}, 3852, "tcp"}, -{"sse-app-config", {NULL}, 3852, "udp"}, -{"sscan", {NULL}, 3853, "tcp"}, -{"sscan", {NULL}, 3853, "udp"}, -{"stryker-com", {NULL}, 3854, "tcp"}, -{"stryker-com", {NULL}, 3854, "udp"}, -{"opentrac", {NULL}, 3855, "tcp"}, -{"opentrac", {NULL}, 3855, "udp"}, -{"informer", {NULL}, 3856, "tcp"}, -{"informer", {NULL}, 3856, "udp"}, -{"trap-port", {NULL}, 3857, "tcp"}, -{"trap-port", {NULL}, 3857, "udp"}, -{"trap-port-mom", {NULL}, 3858, "tcp"}, -{"trap-port-mom", {NULL}, 3858, "udp"}, -{"nav-port", {NULL}, 3859, "tcp"}, -{"nav-port", {NULL}, 3859, "udp"}, -{"sasp", {NULL}, 3860, "tcp"}, -{"sasp", {NULL}, 3860, "udp"}, -{"winshadow-hd", {NULL}, 3861, "tcp"}, -{"winshadow-hd", {NULL}, 3861, "udp"}, -{"giga-pocket", {NULL}, 3862, "tcp"}, -{"giga-pocket", {NULL}, 3862, "udp"}, -{"asap-tcp", {NULL}, 3863, "tcp"}, -{"asap-udp", {NULL}, 3863, "udp"}, -{"asap-sctp", {NULL}, 3863, "sctp"}, -{"asap-tcp-tls", {NULL}, 3864, "tcp"}, -{"asap-sctp-tls", {NULL}, 3864, "sctp"}, -{"xpl", {NULL}, 3865, "tcp"}, -{"xpl", {NULL}, 3865, "udp"}, -{"dzdaemon", {NULL}, 3866, "tcp"}, -{"dzdaemon", {NULL}, 3866, "udp"}, -{"dzoglserver", {NULL}, 3867, "tcp"}, -{"dzoglserver", {NULL}, 3867, "udp"}, -{"diameter", {NULL}, 3868, "tcp"}, -{"diameter", {NULL}, 3868, "sctp"}, -{"ovsam-mgmt", {NULL}, 3869, "tcp"}, -{"ovsam-mgmt", {NULL}, 3869, "udp"}, -{"ovsam-d-agent", {NULL}, 3870, "tcp"}, -{"ovsam-d-agent", {NULL}, 3870, "udp"}, -{"avocent-adsap", {NULL}, 3871, "tcp"}, -{"avocent-adsap", {NULL}, 3871, "udp"}, -{"oem-agent", {NULL}, 3872, "tcp"}, -{"oem-agent", {NULL}, 3872, "udp"}, -{"fagordnc", {NULL}, 3873, "tcp"}, -{"fagordnc", {NULL}, 3873, "udp"}, -{"sixxsconfig", {NULL}, 3874, "tcp"}, -{"sixxsconfig", {NULL}, 3874, "udp"}, -{"pnbscada", {NULL}, 3875, "tcp"}, -{"pnbscada", {NULL}, 3875, "udp"}, -{"dl_agent", {NULL}, 3876, "tcp"}, -{"dl_agent", {NULL}, 3876, "udp"}, -{"xmpcr-interface", {NULL}, 3877, "tcp"}, -{"xmpcr-interface", {NULL}, 3877, "udp"}, -{"fotogcad", {NULL}, 3878, "tcp"}, -{"fotogcad", {NULL}, 3878, "udp"}, -{"appss-lm", {NULL}, 3879, "tcp"}, -{"appss-lm", {NULL}, 3879, "udp"}, -{"igrs", {NULL}, 3880, "tcp"}, -{"igrs", {NULL}, 3880, "udp"}, -{"idac", {NULL}, 3881, "tcp"}, -{"idac", {NULL}, 3881, "udp"}, -{"msdts1", {NULL}, 3882, "tcp"}, -{"msdts1", {NULL}, 3882, "udp"}, -{"vrpn", {NULL}, 3883, "tcp"}, -{"vrpn", {NULL}, 3883, "udp"}, -{"softrack-meter", {NULL}, 3884, "tcp"}, -{"softrack-meter", {NULL}, 3884, "udp"}, -{"topflow-ssl", {NULL}, 3885, "tcp"}, -{"topflow-ssl", {NULL}, 3885, "udp"}, -{"nei-management", {NULL}, 3886, "tcp"}, -{"nei-management", {NULL}, 3886, "udp"}, -{"ciphire-data", {NULL}, 3887, "tcp"}, -{"ciphire-data", {NULL}, 3887, "udp"}, -{"ciphire-serv", {NULL}, 3888, "tcp"}, -{"ciphire-serv", {NULL}, 3888, "udp"}, -{"dandv-tester", {NULL}, 3889, "tcp"}, -{"dandv-tester", {NULL}, 3889, "udp"}, -{"ndsconnect", {NULL}, 3890, "tcp"}, -{"ndsconnect", {NULL}, 3890, "udp"}, -{"rtc-pm-port", {NULL}, 3891, "tcp"}, -{"rtc-pm-port", {NULL}, 3891, "udp"}, -{"pcc-image-port", {NULL}, 3892, "tcp"}, -{"pcc-image-port", {NULL}, 3892, "udp"}, -{"cgi-starapi", {NULL}, 3893, "tcp"}, -{"cgi-starapi", {NULL}, 3893, "udp"}, -{"syam-agent", {NULL}, 3894, "tcp"}, -{"syam-agent", {NULL}, 3894, "udp"}, -{"syam-smc", {NULL}, 3895, "tcp"}, -{"syam-smc", {NULL}, 3895, "udp"}, -{"sdo-tls", {NULL}, 3896, "tcp"}, -{"sdo-tls", {NULL}, 3896, "udp"}, -{"sdo-ssh", {NULL}, 3897, "tcp"}, -{"sdo-ssh", {NULL}, 3897, "udp"}, -{"senip", {NULL}, 3898, "tcp"}, -{"senip", {NULL}, 3898, "udp"}, -{"itv-control", {NULL}, 3899, "tcp"}, -{"itv-control", {NULL}, 3899, "udp"}, -{"udt_os", {NULL}, 3900, "tcp"}, -{"udt_os", {NULL}, 3900, "udp"}, -{"nimsh", {NULL}, 3901, "tcp"}, -{"nimsh", {NULL}, 3901, "udp"}, -{"nimaux", {NULL}, 3902, "tcp"}, -{"nimaux", {NULL}, 3902, "udp"}, -{"charsetmgr", {NULL}, 3903, "tcp"}, -{"charsetmgr", {NULL}, 3903, "udp"}, -{"omnilink-port", {NULL}, 3904, "tcp"}, -{"omnilink-port", {NULL}, 3904, "udp"}, -{"mupdate", {NULL}, 3905, "tcp"}, -{"mupdate", {NULL}, 3905, "udp"}, -{"topovista-data", {NULL}, 3906, "tcp"}, -{"topovista-data", {NULL}, 3906, "udp"}, -{"imoguia-port", {NULL}, 3907, "tcp"}, -{"imoguia-port", {NULL}, 3907, "udp"}, -{"hppronetman", {NULL}, 3908, "tcp"}, -{"hppronetman", {NULL}, 3908, "udp"}, -{"surfcontrolcpa", {NULL}, 3909, "tcp"}, -{"surfcontrolcpa", {NULL}, 3909, "udp"}, -{"prnrequest", {NULL}, 3910, "tcp"}, -{"prnrequest", {NULL}, 3910, "udp"}, -{"prnstatus", {NULL}, 3911, "tcp"}, -{"prnstatus", {NULL}, 3911, "udp"}, -{"gbmt-stars", {NULL}, 3912, "tcp"}, -{"gbmt-stars", {NULL}, 3912, "udp"}, -{"listcrt-port", {NULL}, 3913, "tcp"}, -{"listcrt-port", {NULL}, 3913, "udp"}, -{"listcrt-port-2", {NULL}, 3914, "tcp"}, -{"listcrt-port-2", {NULL}, 3914, "udp"}, -{"agcat", {NULL}, 3915, "tcp"}, -{"agcat", {NULL}, 3915, "udp"}, -{"wysdmc", {NULL}, 3916, "tcp"}, -{"wysdmc", {NULL}, 3916, "udp"}, -{"aftmux", {NULL}, 3917, "tcp"}, -{"aftmux", {NULL}, 3917, "udp"}, -{"pktcablemmcops", {NULL}, 3918, "tcp"}, -{"pktcablemmcops", {NULL}, 3918, "udp"}, -{"hyperip", {NULL}, 3919, "tcp"}, -{"hyperip", {NULL}, 3919, "udp"}, -{"exasoftport1", {NULL}, 3920, "tcp"}, -{"exasoftport1", {NULL}, 3920, "udp"}, -{"herodotus-net", {NULL}, 3921, "tcp"}, -{"herodotus-net", {NULL}, 3921, "udp"}, -{"sor-update", {NULL}, 3922, "tcp"}, -{"sor-update", {NULL}, 3922, "udp"}, -{"symb-sb-port", {NULL}, 3923, "tcp"}, -{"symb-sb-port", {NULL}, 3923, "udp"}, -{"mpl-gprs-port", {NULL}, 3924, "tcp"}, -{"mpl-gprs-port", {NULL}, 3924, "udp"}, -{"zmp", {NULL}, 3925, "tcp"}, -{"zmp", {NULL}, 3925, "udp"}, -{"winport", {NULL}, 3926, "tcp"}, -{"winport", {NULL}, 3926, "udp"}, -{"natdataservice", {NULL}, 3927, "tcp"}, -{"natdataservice", {NULL}, 3927, "udp"}, -{"netboot-pxe", {NULL}, 3928, "tcp"}, -{"netboot-pxe", {NULL}, 3928, "udp"}, -{"smauth-port", {NULL}, 3929, "tcp"}, -{"smauth-port", {NULL}, 3929, "udp"}, -{"syam-webserver", {NULL}, 3930, "tcp"}, -{"syam-webserver", {NULL}, 3930, "udp"}, -{"msr-plugin-port", {NULL}, 3931, "tcp"}, -{"msr-plugin-port", {NULL}, 3931, "udp"}, -{"dyn-site", {NULL}, 3932, "tcp"}, -{"dyn-site", {NULL}, 3932, "udp"}, -{"plbserve-port", {NULL}, 3933, "tcp"}, -{"plbserve-port", {NULL}, 3933, "udp"}, -{"sunfm-port", {NULL}, 3934, "tcp"}, -{"sunfm-port", {NULL}, 3934, "udp"}, -{"sdp-portmapper", {NULL}, 3935, "tcp"}, -{"sdp-portmapper", {NULL}, 3935, "udp"}, -{"mailprox", {NULL}, 3936, "tcp"}, -{"mailprox", {NULL}, 3936, "udp"}, -{"dvbservdsc", {NULL}, 3937, "tcp"}, -{"dvbservdsc", {NULL}, 3937, "udp"}, -{"dbcontrol_agent", {NULL}, 3938, "tcp"}, -{"dbcontrol_agent", {NULL}, 3938, "udp"}, -{"aamp", {NULL}, 3939, "tcp"}, -{"aamp", {NULL}, 3939, "udp"}, -{"xecp-node", {NULL}, 3940, "tcp"}, -{"xecp-node", {NULL}, 3940, "udp"}, -{"homeportal-web", {NULL}, 3941, "tcp"}, -{"homeportal-web", {NULL}, 3941, "udp"}, -{"srdp", {NULL}, 3942, "tcp"}, -{"srdp", {NULL}, 3942, "udp"}, -{"tig", {NULL}, 3943, "tcp"}, -{"tig", {NULL}, 3943, "udp"}, -{"sops", {NULL}, 3944, "tcp"}, -{"sops", {NULL}, 3944, "udp"}, -{"emcads", {NULL}, 3945, "tcp"}, -{"emcads", {NULL}, 3945, "udp"}, -{"backupedge", {NULL}, 3946, "tcp"}, -{"backupedge", {NULL}, 3946, "udp"}, -{"ccp", {NULL}, 3947, "tcp"}, -{"ccp", {NULL}, 3947, "udp"}, -{"apdap", {NULL}, 3948, "tcp"}, -{"apdap", {NULL}, 3948, "udp"}, -{"drip", {NULL}, 3949, "tcp"}, -{"drip", {NULL}, 3949, "udp"}, -{"namemunge", {NULL}, 3950, "tcp"}, -{"namemunge", {NULL}, 3950, "udp"}, -{"pwgippfax", {NULL}, 3951, "tcp"}, -{"pwgippfax", {NULL}, 3951, "udp"}, -{"i3-sessionmgr", {NULL}, 3952, "tcp"}, -{"i3-sessionmgr", {NULL}, 3952, "udp"}, -{"xmlink-connect", {NULL}, 3953, "tcp"}, -{"xmlink-connect", {NULL}, 3953, "udp"}, -{"adrep", {NULL}, 3954, "tcp"}, -{"adrep", {NULL}, 3954, "udp"}, -{"p2pcommunity", {NULL}, 3955, "tcp"}, -{"p2pcommunity", {NULL}, 3955, "udp"}, -{"gvcp", {NULL}, 3956, "tcp"}, -{"gvcp", {NULL}, 3956, "udp"}, -{"mqe-broker", {NULL}, 3957, "tcp"}, -{"mqe-broker", {NULL}, 3957, "udp"}, -{"mqe-agent", {NULL}, 3958, "tcp"}, -{"mqe-agent", {NULL}, 3958, "udp"}, -{"treehopper", {NULL}, 3959, "tcp"}, -{"treehopper", {NULL}, 3959, "udp"}, -{"bess", {NULL}, 3960, "tcp"}, -{"bess", {NULL}, 3960, "udp"}, -{"proaxess", {NULL}, 3961, "tcp"}, -{"proaxess", {NULL}, 3961, "udp"}, -{"sbi-agent", {NULL}, 3962, "tcp"}, -{"sbi-agent", {NULL}, 3962, "udp"}, -{"thrp", {NULL}, 3963, "tcp"}, -{"thrp", {NULL}, 3963, "udp"}, -{"sasggprs", {NULL}, 3964, "tcp"}, -{"sasggprs", {NULL}, 3964, "udp"}, -{"ati-ip-to-ncpe", {NULL}, 3965, "tcp"}, -{"ati-ip-to-ncpe", {NULL}, 3965, "udp"}, -{"bflckmgr", {NULL}, 3966, "tcp"}, -{"bflckmgr", {NULL}, 3966, "udp"}, -{"ppsms", {NULL}, 3967, "tcp"}, -{"ppsms", {NULL}, 3967, "udp"}, -{"ianywhere-dbns", {NULL}, 3968, "tcp"}, -{"ianywhere-dbns", {NULL}, 3968, "udp"}, -{"landmarks", {NULL}, 3969, "tcp"}, -{"landmarks", {NULL}, 3969, "udp"}, -{"lanrevagent", {NULL}, 3970, "tcp"}, -{"lanrevagent", {NULL}, 3970, "udp"}, -{"lanrevserver", {NULL}, 3971, "tcp"}, -{"lanrevserver", {NULL}, 3971, "udp"}, -{"iconp", {NULL}, 3972, "tcp"}, -{"iconp", {NULL}, 3972, "udp"}, -{"progistics", {NULL}, 3973, "tcp"}, -{"progistics", {NULL}, 3973, "udp"}, -{"citysearch", {NULL}, 3974, "tcp"}, -{"citysearch", {NULL}, 3974, "udp"}, -{"airshot", {NULL}, 3975, "tcp"}, -{"airshot", {NULL}, 3975, "udp"}, -{"opswagent", {NULL}, 3976, "tcp"}, -{"opswagent", {NULL}, 3976, "udp"}, -{"opswmanager", {NULL}, 3977, "tcp"}, -{"opswmanager", {NULL}, 3977, "udp"}, -{"secure-cfg-svr", {NULL}, 3978, "tcp"}, -{"secure-cfg-svr", {NULL}, 3978, "udp"}, -{"smwan", {NULL}, 3979, "tcp"}, -{"smwan", {NULL}, 3979, "udp"}, -{"acms", {NULL}, 3980, "tcp"}, -{"acms", {NULL}, 3980, "udp"}, -{"starfish", {NULL}, 3981, "tcp"}, -{"starfish", {NULL}, 3981, "udp"}, -{"eis", {NULL}, 3982, "tcp"}, -{"eis", {NULL}, 3982, "udp"}, -{"eisp", {NULL}, 3983, "tcp"}, -{"eisp", {NULL}, 3983, "udp"}, -{"mapper-nodemgr", {NULL}, 3984, "tcp"}, -{"mapper-nodemgr", {NULL}, 3984, "udp"}, -{"mapper-mapethd", {NULL}, 3985, "tcp"}, -{"mapper-mapethd", {NULL}, 3985, "udp"}, -{"mapper-ws_ethd", {NULL}, 3986, "tcp"}, -{"mapper-ws_ethd", {NULL}, 3986, "udp"}, -{"centerline", {NULL}, 3987, "tcp"}, -{"centerline", {NULL}, 3987, "udp"}, -{"dcs-config", {NULL}, 3988, "tcp"}, -{"dcs-config", {NULL}, 3988, "udp"}, -{"bv-queryengine", {NULL}, 3989, "tcp"}, -{"bv-queryengine", {NULL}, 3989, "udp"}, -{"bv-is", {NULL}, 3990, "tcp"}, -{"bv-is", {NULL}, 3990, "udp"}, -{"bv-smcsrv", {NULL}, 3991, "tcp"}, -{"bv-smcsrv", {NULL}, 3991, "udp"}, -{"bv-ds", {NULL}, 3992, "tcp"}, -{"bv-ds", {NULL}, 3992, "udp"}, -{"bv-agent", {NULL}, 3993, "tcp"}, -{"bv-agent", {NULL}, 3993, "udp"}, -{"iss-mgmt-ssl", {NULL}, 3995, "tcp"}, -{"iss-mgmt-ssl", {NULL}, 3995, "udp"}, -{"abcsoftware", {NULL}, 3996, "tcp"}, -{"abcsoftware", {NULL}, 3996, "udp"}, -{"agentsease-db", {NULL}, 3997, "tcp"}, -{"agentsease-db", {NULL}, 3997, "udp"}, -{"dnx", {NULL}, 3998, "tcp"}, -{"dnx", {NULL}, 3998, "udp"}, -{"nvcnet", {NULL}, 3999, "tcp"}, -{"nvcnet", {NULL}, 3999, "udp"}, -{"terabase", {NULL}, 4000, "tcp"}, -{"terabase", {NULL}, 4000, "udp"}, -{"newoak", {NULL}, 4001, "tcp"}, -{"newoak", {NULL}, 4001, "udp"}, -{"pxc-spvr-ft", {NULL}, 4002, "tcp"}, -{"pxc-spvr-ft", {NULL}, 4002, "udp"}, -{"pxc-splr-ft", {NULL}, 4003, "tcp"}, -{"pxc-splr-ft", {NULL}, 4003, "udp"}, -{"pxc-roid", {NULL}, 4004, "tcp"}, -{"pxc-roid", {NULL}, 4004, "udp"}, -{"pxc-pin", {NULL}, 4005, "tcp"}, -{"pxc-pin", {NULL}, 4005, "udp"}, -{"pxc-spvr", {NULL}, 4006, "tcp"}, -{"pxc-spvr", {NULL}, 4006, "udp"}, -{"pxc-splr", {NULL}, 4007, "tcp"}, -{"pxc-splr", {NULL}, 4007, "udp"}, -{"netcheque", {NULL}, 4008, "tcp"}, -{"netcheque", {NULL}, 4008, "udp"}, -{"chimera-hwm", {NULL}, 4009, "tcp"}, -{"chimera-hwm", {NULL}, 4009, "udp"}, -{"samsung-unidex", {NULL}, 4010, "tcp"}, -{"samsung-unidex", {NULL}, 4010, "udp"}, -{"altserviceboot", {NULL}, 4011, "tcp"}, -{"altserviceboot", {NULL}, 4011, "udp"}, -{"pda-gate", {NULL}, 4012, "tcp"}, -{"pda-gate", {NULL}, 4012, "udp"}, -{"acl-manager", {NULL}, 4013, "tcp"}, -{"acl-manager", {NULL}, 4013, "udp"}, -{"taiclock", {NULL}, 4014, "tcp"}, -{"taiclock", {NULL}, 4014, "udp"}, -{"talarian-mcast1", {NULL}, 4015, "tcp"}, -{"talarian-mcast1", {NULL}, 4015, "udp"}, -{"talarian-mcast2", {NULL}, 4016, "tcp"}, -{"talarian-mcast2", {NULL}, 4016, "udp"}, -{"talarian-mcast3", {NULL}, 4017, "tcp"}, -{"talarian-mcast3", {NULL}, 4017, "udp"}, -{"talarian-mcast4", {NULL}, 4018, "tcp"}, -{"talarian-mcast4", {NULL}, 4018, "udp"}, -{"talarian-mcast5", {NULL}, 4019, "tcp"}, -{"talarian-mcast5", {NULL}, 4019, "udp"}, -{"trap", {NULL}, 4020, "tcp"}, -{"trap", {NULL}, 4020, "udp"}, -{"nexus-portal", {NULL}, 4021, "tcp"}, -{"nexus-portal", {NULL}, 4021, "udp"}, -{"dnox", {NULL}, 4022, "tcp"}, -{"dnox", {NULL}, 4022, "udp"}, -{"esnm-zoning", {NULL}, 4023, "tcp"}, -{"esnm-zoning", {NULL}, 4023, "udp"}, -{"tnp1-port", {NULL}, 4024, "tcp"}, -{"tnp1-port", {NULL}, 4024, "udp"}, -{"partimage", {NULL}, 4025, "tcp"}, -{"partimage", {NULL}, 4025, "udp"}, -{"as-debug", {NULL}, 4026, "tcp"}, -{"as-debug", {NULL}, 4026, "udp"}, -{"bxp", {NULL}, 4027, "tcp"}, -{"bxp", {NULL}, 4027, "udp"}, -{"dtserver-port", {NULL}, 4028, "tcp"}, -{"dtserver-port", {NULL}, 4028, "udp"}, -{"ip-qsig", {NULL}, 4029, "tcp"}, -{"ip-qsig", {NULL}, 4029, "udp"}, -{"jdmn-port", {NULL}, 4030, "tcp"}, -{"jdmn-port", {NULL}, 4030, "udp"}, -{"suucp", {NULL}, 4031, "tcp"}, -{"suucp", {NULL}, 4031, "udp"}, -{"vrts-auth-port", {NULL}, 4032, "tcp"}, -{"vrts-auth-port", {NULL}, 4032, "udp"}, -{"sanavigator", {NULL}, 4033, "tcp"}, -{"sanavigator", {NULL}, 4033, "udp"}, -{"ubxd", {NULL}, 4034, "tcp"}, -{"ubxd", {NULL}, 4034, "udp"}, -{"wap-push-http", {NULL}, 4035, "tcp"}, -{"wap-push-http", {NULL}, 4035, "udp"}, -{"wap-push-https", {NULL}, 4036, "tcp"}, -{"wap-push-https", {NULL}, 4036, "udp"}, -{"ravehd", {NULL}, 4037, "tcp"}, -{"ravehd", {NULL}, 4037, "udp"}, -{"fazzt-ptp", {NULL}, 4038, "tcp"}, -{"fazzt-ptp", {NULL}, 4038, "udp"}, -{"fazzt-admin", {NULL}, 4039, "tcp"}, -{"fazzt-admin", {NULL}, 4039, "udp"}, -{"yo-main", {NULL}, 4040, "tcp"}, -{"yo-main", {NULL}, 4040, "udp"}, -{"houston", {NULL}, 4041, "tcp"}, -{"houston", {NULL}, 4041, "udp"}, -{"ldxp", {NULL}, 4042, "tcp"}, -{"ldxp", {NULL}, 4042, "udp"}, -{"nirp", {NULL}, 4043, "tcp"}, -{"nirp", {NULL}, 4043, "udp"}, -{"ltp", {NULL}, 4044, "tcp"}, -{"ltp", {NULL}, 4044, "udp"}, -{"npp", {NULL}, 4045, "tcp"}, -{"npp", {NULL}, 4045, "udp"}, -{"acp-proto", {NULL}, 4046, "tcp"}, -{"acp-proto", {NULL}, 4046, "udp"}, -{"ctp-state", {NULL}, 4047, "tcp"}, -{"ctp-state", {NULL}, 4047, "udp"}, -{"wafs", {NULL}, 4049, "tcp"}, -{"wafs", {NULL}, 4049, "udp"}, -{"cisco-wafs", {NULL}, 4050, "tcp"}, -{"cisco-wafs", {NULL}, 4050, "udp"}, -{"cppdp", {NULL}, 4051, "tcp"}, -{"cppdp", {NULL}, 4051, "udp"}, -{"interact", {NULL}, 4052, "tcp"}, -{"interact", {NULL}, 4052, "udp"}, -{"ccu-comm-1", {NULL}, 4053, "tcp"}, -{"ccu-comm-1", {NULL}, 4053, "udp"}, -{"ccu-comm-2", {NULL}, 4054, "tcp"}, -{"ccu-comm-2", {NULL}, 4054, "udp"}, -{"ccu-comm-3", {NULL}, 4055, "tcp"}, -{"ccu-comm-3", {NULL}, 4055, "udp"}, -{"lms", {NULL}, 4056, "tcp"}, -{"lms", {NULL}, 4056, "udp"}, -{"wfm", {NULL}, 4057, "tcp"}, -{"wfm", {NULL}, 4057, "udp"}, -{"kingfisher", {NULL}, 4058, "tcp"}, -{"kingfisher", {NULL}, 4058, "udp"}, -{"dlms-cosem", {NULL}, 4059, "tcp"}, -{"dlms-cosem", {NULL}, 4059, "udp"}, -{"dsmeter_iatc", {NULL}, 4060, "tcp"}, -{"dsmeter_iatc", {NULL}, 4060, "udp"}, -{"ice-location", {NULL}, 4061, "tcp"}, -{"ice-location", {NULL}, 4061, "udp"}, -{"ice-slocation", {NULL}, 4062, "tcp"}, -{"ice-slocation", {NULL}, 4062, "udp"}, -{"ice-router", {NULL}, 4063, "tcp"}, -{"ice-router", {NULL}, 4063, "udp"}, -{"ice-srouter", {NULL}, 4064, "tcp"}, -{"ice-srouter", {NULL}, 4064, "udp"}, -{"avanti_cdp", {NULL}, 4065, "tcp"}, -{"avanti_cdp", {NULL}, 4065, "udp"}, -{"pmas", {NULL}, 4066, "tcp"}, -{"pmas", {NULL}, 4066, "udp"}, -{"idp", {NULL}, 4067, "tcp"}, -{"idp", {NULL}, 4067, "udp"}, -{"ipfltbcst", {NULL}, 4068, "tcp"}, -{"ipfltbcst", {NULL}, 4068, "udp"}, -{"minger", {NULL}, 4069, "tcp"}, -{"minger", {NULL}, 4069, "udp"}, -{"tripe", {NULL}, 4070, "tcp"}, -{"tripe", {NULL}, 4070, "udp"}, -{"aibkup", {NULL}, 4071, "tcp"}, -{"aibkup", {NULL}, 4071, "udp"}, -{"zieto-sock", {NULL}, 4072, "tcp"}, -{"zieto-sock", {NULL}, 4072, "udp"}, -{"iRAPP", {NULL}, 4073, "tcp"}, -{"iRAPP", {NULL}, 4073, "udp"}, -{"cequint-cityid", {NULL}, 4074, "tcp"}, -{"cequint-cityid", {NULL}, 4074, "udp"}, -{"perimlan", {NULL}, 4075, "tcp"}, -{"perimlan", {NULL}, 4075, "udp"}, -{"seraph", {NULL}, 4076, "tcp"}, -{"seraph", {NULL}, 4076, "udp"}, -{"ascomalarm", {NULL}, 4077, "udp"}, -{"cssp", {NULL}, 4078, "tcp"}, -{"santools", {NULL}, 4079, "tcp"}, -{"santools", {NULL}, 4079, "udp"}, -{"lorica-in", {NULL}, 4080, "tcp"}, -{"lorica-in", {NULL}, 4080, "udp"}, -{"lorica-in-sec", {NULL}, 4081, "tcp"}, -{"lorica-in-sec", {NULL}, 4081, "udp"}, -{"lorica-out", {NULL}, 4082, "tcp"}, -{"lorica-out", {NULL}, 4082, "udp"}, -{"lorica-out-sec", {NULL}, 4083, "tcp"}, -{"lorica-out-sec", {NULL}, 4083, "udp"}, -{"fortisphere-vm", {NULL}, 4084, "udp"}, -{"ezmessagesrv", {NULL}, 4085, "tcp"}, -{"ftsync", {NULL}, 4086, "udp"}, -{"applusservice", {NULL}, 4087, "tcp"}, -{"npsp", {NULL}, 4088, "tcp"}, -{"opencore", {NULL}, 4089, "tcp"}, -{"opencore", {NULL}, 4089, "udp"}, -{"omasgport", {NULL}, 4090, "tcp"}, -{"omasgport", {NULL}, 4090, "udp"}, -{"ewinstaller", {NULL}, 4091, "tcp"}, -{"ewinstaller", {NULL}, 4091, "udp"}, -{"ewdgs", {NULL}, 4092, "tcp"}, -{"ewdgs", {NULL}, 4092, "udp"}, -{"pvxpluscs", {NULL}, 4093, "tcp"}, -{"pvxpluscs", {NULL}, 4093, "udp"}, -{"sysrqd", {NULL}, 4094, "tcp"}, -{"sysrqd", {NULL}, 4094, "udp"}, -{"xtgui", {NULL}, 4095, "tcp"}, -{"xtgui", {NULL}, 4095, "udp"}, -{"bre", {NULL}, 4096, "tcp"}, -{"bre", {NULL}, 4096, "udp"}, -{"patrolview", {NULL}, 4097, "tcp"}, -{"patrolview", {NULL}, 4097, "udp"}, -{"drmsfsd", {NULL}, 4098, "tcp"}, -{"drmsfsd", {NULL}, 4098, "udp"}, -{"dpcp", {NULL}, 4099, "tcp"}, -{"dpcp", {NULL}, 4099, "udp"}, -{"igo-incognito", {NULL}, 4100, "tcp"}, -{"igo-incognito", {NULL}, 4100, "udp"}, -{"brlp-0", {NULL}, 4101, "tcp"}, -{"brlp-0", {NULL}, 4101, "udp"}, -{"brlp-1", {NULL}, 4102, "tcp"}, -{"brlp-1", {NULL}, 4102, "udp"}, -{"brlp-2", {NULL}, 4103, "tcp"}, -{"brlp-2", {NULL}, 4103, "udp"}, -{"brlp-3", {NULL}, 4104, "tcp"}, -{"brlp-3", {NULL}, 4104, "udp"}, -{"shofarplayer", {NULL}, 4105, "tcp"}, -{"shofarplayer", {NULL}, 4105, "udp"}, -{"synchronite", {NULL}, 4106, "tcp"}, -{"synchronite", {NULL}, 4106, "udp"}, -{"j-ac", {NULL}, 4107, "tcp"}, -{"j-ac", {NULL}, 4107, "udp"}, -{"accel", {NULL}, 4108, "tcp"}, -{"accel", {NULL}, 4108, "udp"}, -{"izm", {NULL}, 4109, "tcp"}, -{"izm", {NULL}, 4109, "udp"}, -{"g2tag", {NULL}, 4110, "tcp"}, -{"g2tag", {NULL}, 4110, "udp"}, -{"xgrid", {NULL}, 4111, "tcp"}, -{"xgrid", {NULL}, 4111, "udp"}, -{"apple-vpns-rp", {NULL}, 4112, "tcp"}, -{"apple-vpns-rp", {NULL}, 4112, "udp"}, -{"aipn-reg", {NULL}, 4113, "tcp"}, -{"aipn-reg", {NULL}, 4113, "udp"}, -{"jomamqmonitor", {NULL}, 4114, "tcp"}, -{"jomamqmonitor", {NULL}, 4114, "udp"}, -{"cds", {NULL}, 4115, "tcp"}, -{"cds", {NULL}, 4115, "udp"}, -{"smartcard-tls", {NULL}, 4116, "tcp"}, -{"smartcard-tls", {NULL}, 4116, "udp"}, -{"hillrserv", {NULL}, 4117, "tcp"}, -{"hillrserv", {NULL}, 4117, "udp"}, -{"netscript", {NULL}, 4118, "tcp"}, -{"netscript", {NULL}, 4118, "udp"}, -{"assuria-slm", {NULL}, 4119, "tcp"}, -{"assuria-slm", {NULL}, 4119, "udp"}, -{"e-builder", {NULL}, 4121, "tcp"}, -{"e-builder", {NULL}, 4121, "udp"}, -{"fprams", {NULL}, 4122, "tcp"}, -{"fprams", {NULL}, 4122, "udp"}, -{"z-wave", {NULL}, 4123, "tcp"}, -{"z-wave", {NULL}, 4123, "udp"}, -{"tigv2", {NULL}, 4124, "tcp"}, -{"tigv2", {NULL}, 4124, "udp"}, -{"opsview-envoy", {NULL}, 4125, "tcp"}, -{"opsview-envoy", {NULL}, 4125, "udp"}, -{"ddrepl", {NULL}, 4126, "tcp"}, -{"ddrepl", {NULL}, 4126, "udp"}, -{"unikeypro", {NULL}, 4127, "tcp"}, -{"unikeypro", {NULL}, 4127, "udp"}, -{"nufw", {NULL}, 4128, "tcp"}, -{"nufw", {NULL}, 4128, "udp"}, -{"nuauth", {NULL}, 4129, "tcp"}, -{"nuauth", {NULL}, 4129, "udp"}, -{"fronet", {NULL}, 4130, "tcp"}, -{"fronet", {NULL}, 4130, "udp"}, -{"stars", {NULL}, 4131, "tcp"}, -{"stars", {NULL}, 4131, "udp"}, -{"nuts_dem", {NULL}, 4132, "tcp"}, -{"nuts_dem", {NULL}, 4132, "udp"}, -{"nuts_bootp", {NULL}, 4133, "tcp"}, -{"nuts_bootp", {NULL}, 4133, "udp"}, -{"nifty-hmi", {NULL}, 4134, "tcp"}, -{"nifty-hmi", {NULL}, 4134, "udp"}, -{"cl-db-attach", {NULL}, 4135, "tcp"}, -{"cl-db-attach", {NULL}, 4135, "udp"}, -{"cl-db-request", {NULL}, 4136, "tcp"}, -{"cl-db-request", {NULL}, 4136, "udp"}, -{"cl-db-remote", {NULL}, 4137, "tcp"}, -{"cl-db-remote", {NULL}, 4137, "udp"}, -{"nettest", {NULL}, 4138, "tcp"}, -{"nettest", {NULL}, 4138, "udp"}, -{"thrtx", {NULL}, 4139, "tcp"}, -{"thrtx", {NULL}, 4139, "udp"}, -{"cedros_fds", {NULL}, 4140, "tcp"}, -{"cedros_fds", {NULL}, 4140, "udp"}, -{"oirtgsvc", {NULL}, 4141, "tcp"}, -{"oirtgsvc", {NULL}, 4141, "udp"}, -{"oidocsvc", {NULL}, 4142, "tcp"}, -{"oidocsvc", {NULL}, 4142, "udp"}, -{"oidsr", {NULL}, 4143, "tcp"}, -{"oidsr", {NULL}, 4143, "udp"}, -{"vvr-control", {NULL}, 4145, "tcp"}, -{"vvr-control", {NULL}, 4145, "udp"}, -{"tgcconnect", {NULL}, 4146, "tcp"}, -{"tgcconnect", {NULL}, 4146, "udp"}, -{"vrxpservman", {NULL}, 4147, "tcp"}, -{"vrxpservman", {NULL}, 4147, "udp"}, -{"hhb-handheld", {NULL}, 4148, "tcp"}, -{"hhb-handheld", {NULL}, 4148, "udp"}, -{"agslb", {NULL}, 4149, "tcp"}, -{"agslb", {NULL}, 4149, "udp"}, -{"PowerAlert-nsa", {NULL}, 4150, "tcp"}, -{"PowerAlert-nsa", {NULL}, 4150, "udp"}, -{"menandmice_noh", {NULL}, 4151, "tcp"}, -{"menandmice_noh", {NULL}, 4151, "udp"}, -{"idig_mux", {NULL}, 4152, "tcp"}, -{"idig_mux", {NULL}, 4152, "udp"}, -{"mbl-battd", {NULL}, 4153, "tcp"}, -{"mbl-battd", {NULL}, 4153, "udp"}, -{"atlinks", {NULL}, 4154, "tcp"}, -{"atlinks", {NULL}, 4154, "udp"}, -{"bzr", {NULL}, 4155, "tcp"}, -{"bzr", {NULL}, 4155, "udp"}, -{"stat-results", {NULL}, 4156, "tcp"}, -{"stat-results", {NULL}, 4156, "udp"}, -{"stat-scanner", {NULL}, 4157, "tcp"}, -{"stat-scanner", {NULL}, 4157, "udp"}, -{"stat-cc", {NULL}, 4158, "tcp"}, -{"stat-cc", {NULL}, 4158, "udp"}, -{"nss", {NULL}, 4159, "tcp"}, -{"nss", {NULL}, 4159, "udp"}, -{"jini-discovery", {NULL}, 4160, "tcp"}, -{"jini-discovery", {NULL}, 4160, "udp"}, -{"omscontact", {NULL}, 4161, "tcp"}, -{"omscontact", {NULL}, 4161, "udp"}, -{"omstopology", {NULL}, 4162, "tcp"}, -{"omstopology", {NULL}, 4162, "udp"}, -{"silverpeakpeer", {NULL}, 4163, "tcp"}, -{"silverpeakpeer", {NULL}, 4163, "udp"}, -{"silverpeakcomm", {NULL}, 4164, "tcp"}, -{"silverpeakcomm", {NULL}, 4164, "udp"}, -{"altcp", {NULL}, 4165, "tcp"}, -{"altcp", {NULL}, 4165, "udp"}, -{"joost", {NULL}, 4166, "tcp"}, -{"joost", {NULL}, 4166, "udp"}, -{"ddgn", {NULL}, 4167, "tcp"}, -{"ddgn", {NULL}, 4167, "udp"}, -{"pslicser", {NULL}, 4168, "tcp"}, -{"pslicser", {NULL}, 4168, "udp"}, -{"iadt", {NULL}, 4169, "tcp"}, -{"iadt-disc", {NULL}, 4169, "udp"}, -{"d-cinema-csp", {NULL}, 4170, "tcp"}, -{"ml-svnet", {NULL}, 4171, "tcp"}, -{"pcoip", {NULL}, 4172, "tcp"}, -{"pcoip", {NULL}, 4172, "udp"}, -{"smcluster", {NULL}, 4174, "tcp"}, -{"bccp", {NULL}, 4175, "tcp"}, -{"tl-ipcproxy", {NULL}, 4176, "tcp"}, -{"wello", {NULL}, 4177, "tcp"}, -{"wello", {NULL}, 4177, "udp"}, -{"storman", {NULL}, 4178, "tcp"}, -{"storman", {NULL}, 4178, "udp"}, -{"MaxumSP", {NULL}, 4179, "tcp"}, -{"MaxumSP", {NULL}, 4179, "udp"}, -{"httpx", {NULL}, 4180, "tcp"}, -{"httpx", {NULL}, 4180, "udp"}, -{"macbak", {NULL}, 4181, "tcp"}, -{"macbak", {NULL}, 4181, "udp"}, -{"pcptcpservice", {NULL}, 4182, "tcp"}, -{"pcptcpservice", {NULL}, 4182, "udp"}, -{"gmmp", {NULL}, 4183, "tcp"}, -{"gmmp", {NULL}, 4183, "udp"}, -{"universe_suite", {NULL}, 4184, "tcp"}, -{"universe_suite", {NULL}, 4184, "udp"}, -{"wcpp", {NULL}, 4185, "tcp"}, -{"wcpp", {NULL}, 4185, "udp"}, -{"boxbackupstore", {NULL}, 4186, "tcp"}, -{"csc_proxy", {NULL}, 4187, "tcp"}, -{"vatata", {NULL}, 4188, "tcp"}, -{"vatata", {NULL}, 4188, "udp"}, -{"pcep", {NULL}, 4189, "tcp"}, -{"sieve", {NULL}, 4190, "tcp"}, -{"dsmipv6", {NULL}, 4191, "udp"}, -{"azeti", {NULL}, 4192, "tcp"}, -{"azeti-bd", {NULL}, 4192, "udp"}, -{"pvxplusio", {NULL}, 4193, "tcp"}, -{"eims-admin", {NULL}, 4199, "tcp"}, -{"eims-admin", {NULL}, 4199, "udp"}, -{"corelccam", {NULL}, 4300, "tcp"}, -{"corelccam", {NULL}, 4300, "udp"}, -{"d-data", {NULL}, 4301, "tcp"}, -{"d-data", {NULL}, 4301, "udp"}, -{"d-data-control", {NULL}, 4302, "tcp"}, -{"d-data-control", {NULL}, 4302, "udp"}, -{"srcp", {NULL}, 4303, "tcp"}, -{"srcp", {NULL}, 4303, "udp"}, -{"owserver", {NULL}, 4304, "tcp"}, -{"owserver", {NULL}, 4304, "udp"}, -{"batman", {NULL}, 4305, "tcp"}, -{"batman", {NULL}, 4305, "udp"}, -{"pinghgl", {NULL}, 4306, "tcp"}, -{"pinghgl", {NULL}, 4306, "udp"}, -{"visicron-vs", {NULL}, 4307, "tcp"}, -{"visicron-vs", {NULL}, 4307, "udp"}, -{"compx-lockview", {NULL}, 4308, "tcp"}, -{"compx-lockview", {NULL}, 4308, "udp"}, -{"dserver", {NULL}, 4309, "tcp"}, -{"dserver", {NULL}, 4309, "udp"}, -{"mirrtex", {NULL}, 4310, "tcp"}, -{"mirrtex", {NULL}, 4310, "udp"}, -{"p6ssmc", {NULL}, 4311, "tcp"}, -{"pscl-mgt", {NULL}, 4312, "tcp"}, -{"perrla", {NULL}, 4313, "tcp"}, -{"fdt-rcatp", {NULL}, 4320, "tcp"}, -{"fdt-rcatp", {NULL}, 4320, "udp"}, -{"rwhois", {NULL}, 4321, "tcp"}, -{"rwhois", {NULL}, 4321, "udp"}, -{"trim-event", {NULL}, 4322, "tcp"}, -{"trim-event", {NULL}, 4322, "udp"}, -{"trim-ice", {NULL}, 4323, "tcp"}, -{"trim-ice", {NULL}, 4323, "udp"}, -{"balour", {NULL}, 4324, "tcp"}, -{"balour", {NULL}, 4324, "udp"}, -{"geognosisman", {NULL}, 4325, "tcp"}, -{"geognosisman", {NULL}, 4325, "udp"}, -{"geognosis", {NULL}, 4326, "tcp"}, -{"geognosis", {NULL}, 4326, "udp"}, -{"jaxer-web", {NULL}, 4327, "tcp"}, -{"jaxer-web", {NULL}, 4327, "udp"}, -{"jaxer-manager", {NULL}, 4328, "tcp"}, -{"jaxer-manager", {NULL}, 4328, "udp"}, -{"publiqare-sync", {NULL}, 4329, "tcp"}, -{"gaia", {NULL}, 4340, "tcp"}, -{"gaia", {NULL}, 4340, "udp"}, -{"lisp-data", {NULL}, 4341, "tcp"}, -{"lisp-data", {NULL}, 4341, "udp"}, -{"lisp-cons", {NULL}, 4342, "tcp"}, -{"lisp-control", {NULL}, 4342, "udp"}, -{"unicall", {NULL}, 4343, "tcp"}, -{"unicall", {NULL}, 4343, "udp"}, -{"vinainstall", {NULL}, 4344, "tcp"}, -{"vinainstall", {NULL}, 4344, "udp"}, -{"m4-network-as", {NULL}, 4345, "tcp"}, -{"m4-network-as", {NULL}, 4345, "udp"}, -{"elanlm", {NULL}, 4346, "tcp"}, -{"elanlm", {NULL}, 4346, "udp"}, -{"lansurveyor", {NULL}, 4347, "tcp"}, -{"lansurveyor", {NULL}, 4347, "udp"}, -{"itose", {NULL}, 4348, "tcp"}, -{"itose", {NULL}, 4348, "udp"}, -{"fsportmap", {NULL}, 4349, "tcp"}, -{"fsportmap", {NULL}, 4349, "udp"}, -{"net-device", {NULL}, 4350, "tcp"}, -{"net-device", {NULL}, 4350, "udp"}, -{"plcy-net-svcs", {NULL}, 4351, "tcp"}, -{"plcy-net-svcs", {NULL}, 4351, "udp"}, -{"pjlink", {NULL}, 4352, "tcp"}, -{"pjlink", {NULL}, 4352, "udp"}, -{"f5-iquery", {NULL}, 4353, "tcp"}, -{"f5-iquery", {NULL}, 4353, "udp"}, -{"qsnet-trans", {NULL}, 4354, "tcp"}, -{"qsnet-trans", {NULL}, 4354, "udp"}, -{"qsnet-workst", {NULL}, 4355, "tcp"}, -{"qsnet-workst", {NULL}, 4355, "udp"}, -{"qsnet-assist", {NULL}, 4356, "tcp"}, -{"qsnet-assist", {NULL}, 4356, "udp"}, -{"qsnet-cond", {NULL}, 4357, "tcp"}, -{"qsnet-cond", {NULL}, 4357, "udp"}, -{"qsnet-nucl", {NULL}, 4358, "tcp"}, -{"qsnet-nucl", {NULL}, 4358, "udp"}, -{"omabcastltkm", {NULL}, 4359, "tcp"}, -{"omabcastltkm", {NULL}, 4359, "udp"}, -{"matrix_vnet", {NULL}, 4360, "tcp"}, -{"nacnl", {NULL}, 4361, "udp"}, -{"afore-vdp-disc", {NULL}, 4362, "udp"}, -{"wxbrief", {NULL}, 4368, "tcp"}, -{"wxbrief", {NULL}, 4368, "udp"}, -{"epmd", {NULL}, 4369, "tcp"}, -{"epmd", {NULL}, 4369, "udp"}, -{"elpro_tunnel", {NULL}, 4370, "tcp"}, -{"elpro_tunnel", {NULL}, 4370, "udp"}, -{"l2c-control", {NULL}, 4371, "tcp"}, -{"l2c-disc", {NULL}, 4371, "udp"}, -{"l2c-data", {NULL}, 4372, "tcp"}, -{"l2c-data", {NULL}, 4372, "udp"}, -{"remctl", {NULL}, 4373, "tcp"}, -{"remctl", {NULL}, 4373, "udp"}, -{"psi-ptt", {NULL}, 4374, "tcp"}, -{"tolteces", {NULL}, 4375, "tcp"}, -{"tolteces", {NULL}, 4375, "udp"}, -{"bip", {NULL}, 4376, "tcp"}, -{"bip", {NULL}, 4376, "udp"}, -{"cp-spxsvr", {NULL}, 4377, "tcp"}, -{"cp-spxsvr", {NULL}, 4377, "udp"}, -{"cp-spxdpy", {NULL}, 4378, "tcp"}, -{"cp-spxdpy", {NULL}, 4378, "udp"}, -{"ctdb", {NULL}, 4379, "tcp"}, -{"ctdb", {NULL}, 4379, "udp"}, -{"xandros-cms", {NULL}, 4389, "tcp"}, -{"xandros-cms", {NULL}, 4389, "udp"}, -{"wiegand", {NULL}, 4390, "tcp"}, -{"wiegand", {NULL}, 4390, "udp"}, -{"apwi-imserver", {NULL}, 4391, "tcp"}, -{"apwi-rxserver", {NULL}, 4392, "tcp"}, -{"apwi-rxspooler", {NULL}, 4393, "tcp"}, -{"apwi-disc", {NULL}, 4394, "udp"}, -{"omnivisionesx", {NULL}, 4395, "tcp"}, -{"omnivisionesx", {NULL}, 4395, "udp"}, -{"fly", {NULL}, 4396, "tcp"}, -{"ds-srv", {NULL}, 4400, "tcp"}, -{"ds-srv", {NULL}, 4400, "udp"}, -{"ds-srvr", {NULL}, 4401, "tcp"}, -{"ds-srvr", {NULL}, 4401, "udp"}, -{"ds-clnt", {NULL}, 4402, "tcp"}, -{"ds-clnt", {NULL}, 4402, "udp"}, -{"ds-user", {NULL}, 4403, "tcp"}, -{"ds-user", {NULL}, 4403, "udp"}, -{"ds-admin", {NULL}, 4404, "tcp"}, -{"ds-admin", {NULL}, 4404, "udp"}, -{"ds-mail", {NULL}, 4405, "tcp"}, -{"ds-mail", {NULL}, 4405, "udp"}, -{"ds-slp", {NULL}, 4406, "tcp"}, -{"ds-slp", {NULL}, 4406, "udp"}, -{"nacagent", {NULL}, 4407, "tcp"}, -{"slscc", {NULL}, 4408, "tcp"}, -{"netcabinet-com", {NULL}, 4409, "tcp"}, -{"itwo-server", {NULL}, 4410, "tcp"}, -{"netrockey6", {NULL}, 4425, "tcp"}, -{"netrockey6", {NULL}, 4425, "udp"}, -{"beacon-port-2", {NULL}, 4426, "tcp"}, -{"beacon-port-2", {NULL}, 4426, "udp"}, -{"drizzle", {NULL}, 4427, "tcp"}, -{"omviserver", {NULL}, 4428, "tcp"}, -{"omviagent", {NULL}, 4429, "tcp"}, -{"rsqlserver", {NULL}, 4430, "tcp"}, -{"rsqlserver", {NULL}, 4430, "udp"}, -{"wspipe", {NULL}, 4431, "tcp"}, -{"netblox", {NULL}, 4441, "udp"}, -{"saris", {NULL}, 4442, "tcp"}, -{"saris", {NULL}, 4442, "udp"}, -{"pharos", {NULL}, 4443, "tcp"}, -{"pharos", {NULL}, 4443, "udp"}, -{"krb524", {NULL}, 4444, "tcp"}, -{"krb524", {NULL}, 4444, "udp"}, -{"nv-video", {NULL}, 4444, "tcp"}, -{"nv-video", {NULL}, 4444, "udp"}, -{"upnotifyp", {NULL}, 4445, "tcp"}, -{"upnotifyp", {NULL}, 4445, "udp"}, -{"n1-fwp", {NULL}, 4446, "tcp"}, -{"n1-fwp", {NULL}, 4446, "udp"}, -{"n1-rmgmt", {NULL}, 4447, "tcp"}, -{"n1-rmgmt", {NULL}, 4447, "udp"}, -{"asc-slmd", {NULL}, 4448, "tcp"}, -{"asc-slmd", {NULL}, 4448, "udp"}, -{"privatewire", {NULL}, 4449, "tcp"}, -{"privatewire", {NULL}, 4449, "udp"}, -{"camp", {NULL}, 4450, "tcp"}, -{"camp", {NULL}, 4450, "udp"}, -{"ctisystemmsg", {NULL}, 4451, "tcp"}, -{"ctisystemmsg", {NULL}, 4451, "udp"}, -{"ctiprogramload", {NULL}, 4452, "tcp"}, -{"ctiprogramload", {NULL}, 4452, "udp"}, -{"nssalertmgr", {NULL}, 4453, "tcp"}, -{"nssalertmgr", {NULL}, 4453, "udp"}, -{"nssagentmgr", {NULL}, 4454, "tcp"}, -{"nssagentmgr", {NULL}, 4454, "udp"}, -{"prchat-user", {NULL}, 4455, "tcp"}, -{"prchat-user", {NULL}, 4455, "udp"}, -{"prchat-server", {NULL}, 4456, "tcp"}, -{"prchat-server", {NULL}, 4456, "udp"}, -{"prRegister", {NULL}, 4457, "tcp"}, -{"prRegister", {NULL}, 4457, "udp"}, -{"mcp", {NULL}, 4458, "tcp"}, -{"mcp", {NULL}, 4458, "udp"}, -{"hpssmgmt", {NULL}, 4484, "tcp"}, -{"hpssmgmt", {NULL}, 4484, "udp"}, -{"assyst-dr", {NULL}, 4485, "tcp"}, -{"icms", {NULL}, 4486, "tcp"}, -{"icms", {NULL}, 4486, "udp"}, -{"prex-tcp", {NULL}, 4487, "tcp"}, -{"awacs-ice", {NULL}, 4488, "tcp"}, -{"awacs-ice", {NULL}, 4488, "udp"}, -{"ipsec-nat-t", {NULL}, 4500, "tcp"}, -{"ipsec-nat-t", {NULL}, 4500, "udp"}, -{"ehs", {NULL}, 4535, "tcp"}, -{"ehs", {NULL}, 4535, "udp"}, -{"ehs-ssl", {NULL}, 4536, "tcp"}, -{"ehs-ssl", {NULL}, 4536, "udp"}, -{"wssauthsvc", {NULL}, 4537, "tcp"}, -{"wssauthsvc", {NULL}, 4537, "udp"}, -{"swx-gate", {NULL}, 4538, "tcp"}, -{"swx-gate", {NULL}, 4538, "udp"}, -{"worldscores", {NULL}, 4545, "tcp"}, -{"worldscores", {NULL}, 4545, "udp"}, -{"sf-lm", {NULL}, 4546, "tcp"}, -{"sf-lm", {NULL}, 4546, "udp"}, -{"lanner-lm", {NULL}, 4547, "tcp"}, -{"lanner-lm", {NULL}, 4547, "udp"}, -{"synchromesh", {NULL}, 4548, "tcp"}, -{"synchromesh", {NULL}, 4548, "udp"}, -{"aegate", {NULL}, 4549, "tcp"}, -{"aegate", {NULL}, 4549, "udp"}, -{"gds-adppiw-db", {NULL}, 4550, "tcp"}, -{"gds-adppiw-db", {NULL}, 4550, "udp"}, -{"ieee-mih", {NULL}, 4551, "tcp"}, -{"ieee-mih", {NULL}, 4551, "udp"}, -{"menandmice-mon", {NULL}, 4552, "tcp"}, -{"menandmice-mon", {NULL}, 4552, "udp"}, -{"icshostsvc", {NULL}, 4553, "tcp"}, -{"msfrs", {NULL}, 4554, "tcp"}, -{"msfrs", {NULL}, 4554, "udp"}, -{"rsip", {NULL}, 4555, "tcp"}, -{"rsip", {NULL}, 4555, "udp"}, -{"dtn-bundle-tcp", {NULL}, 4556, "tcp"}, -{"dtn-bundle-udp", {NULL}, 4556, "udp"}, -{"mtcevrunqss", {NULL}, 4557, "udp"}, -{"mtcevrunqman", {NULL}, 4558, "udp"}, -{"hylafax", {NULL}, 4559, "tcp"}, -{"hylafax", {NULL}, 4559, "udp"}, -{"kwtc", {NULL}, 4566, "tcp"}, -{"kwtc", {NULL}, 4566, "udp"}, -{"tram", {NULL}, 4567, "tcp"}, -{"tram", {NULL}, 4567, "udp"}, -{"bmc-reporting", {NULL}, 4568, "tcp"}, -{"bmc-reporting", {NULL}, 4568, "udp"}, -{"iax", {NULL}, 4569, "tcp"}, -{"iax", {NULL}, 4569, "udp"}, -{"rid", {NULL}, 4590, "tcp"}, -{"l3t-at-an", {NULL}, 4591, "tcp"}, -{"l3t-at-an", {NULL}, 4591, "udp"}, -{"hrpd-ith-at-an", {NULL}, 4592, "udp"}, -{"ipt-anri-anri", {NULL}, 4593, "tcp"}, -{"ipt-anri-anri", {NULL}, 4593, "udp"}, -{"ias-session", {NULL}, 4594, "tcp"}, -{"ias-session", {NULL}, 4594, "udp"}, -{"ias-paging", {NULL}, 4595, "tcp"}, -{"ias-paging", {NULL}, 4595, "udp"}, -{"ias-neighbor", {NULL}, 4596, "tcp"}, -{"ias-neighbor", {NULL}, 4596, "udp"}, -{"a21-an-1xbs", {NULL}, 4597, "tcp"}, -{"a21-an-1xbs", {NULL}, 4597, "udp"}, -{"a16-an-an", {NULL}, 4598, "tcp"}, -{"a16-an-an", {NULL}, 4598, "udp"}, -{"a17-an-an", {NULL}, 4599, "tcp"}, -{"a17-an-an", {NULL}, 4599, "udp"}, -{"piranha1", {NULL}, 4600, "tcp"}, -{"piranha1", {NULL}, 4600, "udp"}, -{"piranha2", {NULL}, 4601, "tcp"}, -{"piranha2", {NULL}, 4601, "udp"}, -{"mtsserver", {NULL}, 4602, "tcp"}, -{"menandmice-upg", {NULL}, 4603, "tcp"}, -{"playsta2-app", {NULL}, 4658, "tcp"}, -{"playsta2-app", {NULL}, 4658, "udp"}, -{"playsta2-lob", {NULL}, 4659, "tcp"}, -{"playsta2-lob", {NULL}, 4659, "udp"}, -{"smaclmgr", {NULL}, 4660, "tcp"}, -{"smaclmgr", {NULL}, 4660, "udp"}, -{"kar2ouche", {NULL}, 4661, "tcp"}, -{"kar2ouche", {NULL}, 4661, "udp"}, -{"oms", {NULL}, 4662, "tcp"}, -{"oms", {NULL}, 4662, "udp"}, -{"noteit", {NULL}, 4663, "tcp"}, -{"noteit", {NULL}, 4663, "udp"}, -{"ems", {NULL}, 4664, "tcp"}, -{"ems", {NULL}, 4664, "udp"}, -{"contclientms", {NULL}, 4665, "tcp"}, -{"contclientms", {NULL}, 4665, "udp"}, -{"eportcomm", {NULL}, 4666, "tcp"}, -{"eportcomm", {NULL}, 4666, "udp"}, -{"mmacomm", {NULL}, 4667, "tcp"}, -{"mmacomm", {NULL}, 4667, "udp"}, -{"mmaeds", {NULL}, 4668, "tcp"}, -{"mmaeds", {NULL}, 4668, "udp"}, -{"eportcommdata", {NULL}, 4669, "tcp"}, -{"eportcommdata", {NULL}, 4669, "udp"}, -{"light", {NULL}, 4670, "tcp"}, -{"light", {NULL}, 4670, "udp"}, -{"acter", {NULL}, 4671, "tcp"}, -{"acter", {NULL}, 4671, "udp"}, -{"rfa", {NULL}, 4672, "tcp"}, -{"rfa", {NULL}, 4672, "udp"}, -{"cxws", {NULL}, 4673, "tcp"}, -{"cxws", {NULL}, 4673, "udp"}, -{"appiq-mgmt", {NULL}, 4674, "tcp"}, -{"appiq-mgmt", {NULL}, 4674, "udp"}, -{"dhct-status", {NULL}, 4675, "tcp"}, -{"dhct-status", {NULL}, 4675, "udp"}, -{"dhct-alerts", {NULL}, 4676, "tcp"}, -{"dhct-alerts", {NULL}, 4676, "udp"}, -{"bcs", {NULL}, 4677, "tcp"}, -{"bcs", {NULL}, 4677, "udp"}, -{"traversal", {NULL}, 4678, "tcp"}, -{"traversal", {NULL}, 4678, "udp"}, -{"mgesupervision", {NULL}, 4679, "tcp"}, -{"mgesupervision", {NULL}, 4679, "udp"}, -{"mgemanagement", {NULL}, 4680, "tcp"}, -{"mgemanagement", {NULL}, 4680, "udp"}, -{"parliant", {NULL}, 4681, "tcp"}, -{"parliant", {NULL}, 4681, "udp"}, -{"finisar", {NULL}, 4682, "tcp"}, -{"finisar", {NULL}, 4682, "udp"}, -{"spike", {NULL}, 4683, "tcp"}, -{"spike", {NULL}, 4683, "udp"}, -{"rfid-rp1", {NULL}, 4684, "tcp"}, -{"rfid-rp1", {NULL}, 4684, "udp"}, -{"autopac", {NULL}, 4685, "tcp"}, -{"autopac", {NULL}, 4685, "udp"}, -{"msp-os", {NULL}, 4686, "tcp"}, -{"msp-os", {NULL}, 4686, "udp"}, -{"nst", {NULL}, 4687, "tcp"}, -{"nst", {NULL}, 4687, "udp"}, -{"mobile-p2p", {NULL}, 4688, "tcp"}, -{"mobile-p2p", {NULL}, 4688, "udp"}, -{"altovacentral", {NULL}, 4689, "tcp"}, -{"altovacentral", {NULL}, 4689, "udp"}, -{"prelude", {NULL}, 4690, "tcp"}, -{"prelude", {NULL}, 4690, "udp"}, -{"mtn", {NULL}, 4691, "tcp"}, -{"mtn", {NULL}, 4691, "udp"}, -{"conspiracy", {NULL}, 4692, "tcp"}, -{"conspiracy", {NULL}, 4692, "udp"}, -{"netxms-agent", {NULL}, 4700, "tcp"}, -{"netxms-agent", {NULL}, 4700, "udp"}, -{"netxms-mgmt", {NULL}, 4701, "tcp"}, -{"netxms-mgmt", {NULL}, 4701, "udp"}, -{"netxms-sync", {NULL}, 4702, "tcp"}, -{"netxms-sync", {NULL}, 4702, "udp"}, -{"npqes-test", {NULL}, 4703, "tcp"}, -{"assuria-ins", {NULL}, 4704, "tcp"}, -{"truckstar", {NULL}, 4725, "tcp"}, -{"truckstar", {NULL}, 4725, "udp"}, -{"a26-fap-fgw", {NULL}, 4726, "udp"}, -{"fcis", {NULL}, 4727, "tcp"}, -{"fcis-disc", {NULL}, 4727, "udp"}, -{"capmux", {NULL}, 4728, "tcp"}, -{"capmux", {NULL}, 4728, "udp"}, -{"gsmtap", {NULL}, 4729, "udp"}, -{"gearman", {NULL}, 4730, "tcp"}, -{"gearman", {NULL}, 4730, "udp"}, -{"remcap", {NULL}, 4731, "tcp"}, -{"ohmtrigger", {NULL}, 4732, "udp"}, -{"resorcs", {NULL}, 4733, "tcp"}, -{"ipdr-sp", {NULL}, 4737, "tcp"}, -{"ipdr-sp", {NULL}, 4737, "udp"}, -{"solera-lpn", {NULL}, 4738, "tcp"}, -{"solera-lpn", {NULL}, 4738, "udp"}, -{"ipfix", {NULL}, 4739, "tcp"}, -{"ipfix", {NULL}, 4739, "udp"}, -{"ipfix", {NULL}, 4739, "sctp"}, -{"ipfixs", {NULL}, 4740, "tcp"}, -{"ipfixs", {NULL}, 4740, "sctp"}, -{"ipfixs", {NULL}, 4740, "udp"}, -{"lumimgrd", {NULL}, 4741, "tcp"}, -{"lumimgrd", {NULL}, 4741, "udp"}, -{"sicct", {NULL}, 4742, "tcp"}, -{"sicct-sdp", {NULL}, 4742, "udp"}, -{"openhpid", {NULL}, 4743, "tcp"}, -{"openhpid", {NULL}, 4743, "udp"}, -{"ifsp", {NULL}, 4744, "tcp"}, -{"ifsp", {NULL}, 4744, "udp"}, -{"fmp", {NULL}, 4745, "tcp"}, -{"fmp", {NULL}, 4745, "udp"}, -{"profilemac", {NULL}, 4749, "tcp"}, -{"profilemac", {NULL}, 4749, "udp"}, -{"ssad", {NULL}, 4750, "tcp"}, -{"ssad", {NULL}, 4750, "udp"}, -{"spocp", {NULL}, 4751, "tcp"}, -{"spocp", {NULL}, 4751, "udp"}, -{"snap", {NULL}, 4752, "tcp"}, -{"snap", {NULL}, 4752, "udp"}, -{"bfd-multi-ctl", {NULL}, 4784, "tcp"}, -{"bfd-multi-ctl", {NULL}, 4784, "udp"}, -{"cncp", {NULL}, 4785, "udp"}, -{"smart-install", {NULL}, 4786, "tcp"}, -{"sia-ctrl-plane", {NULL}, 4787, "tcp"}, -{"iims", {NULL}, 4800, "tcp"}, -{"iims", {NULL}, 4800, "udp"}, -{"iwec", {NULL}, 4801, "tcp"}, -{"iwec", {NULL}, 4801, "udp"}, -{"ilss", {NULL}, 4802, "tcp"}, -{"ilss", {NULL}, 4802, "udp"}, -{"notateit", {NULL}, 4803, "tcp"}, -{"notateit-disc", {NULL}, 4803, "udp"}, -{"aja-ntv4-disc", {NULL}, 4804, "udp"}, -{"htcp", {NULL}, 4827, "tcp"}, -{"htcp", {NULL}, 4827, "udp"}, -{"varadero-0", {NULL}, 4837, "tcp"}, -{"varadero-0", {NULL}, 4837, "udp"}, -{"varadero-1", {NULL}, 4838, "tcp"}, -{"varadero-1", {NULL}, 4838, "udp"}, -{"varadero-2", {NULL}, 4839, "tcp"}, -{"varadero-2", {NULL}, 4839, "udp"}, -{"opcua-tcp", {NULL}, 4840, "tcp"}, -{"opcua-udp", {NULL}, 4840, "udp"}, -{"quosa", {NULL}, 4841, "tcp"}, -{"quosa", {NULL}, 4841, "udp"}, -{"gw-asv", {NULL}, 4842, "tcp"}, -{"gw-asv", {NULL}, 4842, "udp"}, -{"opcua-tls", {NULL}, 4843, "tcp"}, -{"opcua-tls", {NULL}, 4843, "udp"}, -{"gw-log", {NULL}, 4844, "tcp"}, -{"gw-log", {NULL}, 4844, "udp"}, -{"wcr-remlib", {NULL}, 4845, "tcp"}, -{"wcr-remlib", {NULL}, 4845, "udp"}, -{"contamac_icm", {NULL}, 4846, "tcp"}, -{"contamac_icm", {NULL}, 4846, "udp"}, -{"wfc", {NULL}, 4847, "tcp"}, -{"wfc", {NULL}, 4847, "udp"}, -{"appserv-http", {NULL}, 4848, "tcp"}, -{"appserv-http", {NULL}, 4848, "udp"}, -{"appserv-https", {NULL}, 4849, "tcp"}, -{"appserv-https", {NULL}, 4849, "udp"}, -{"sun-as-nodeagt", {NULL}, 4850, "tcp"}, -{"sun-as-nodeagt", {NULL}, 4850, "udp"}, -{"derby-repli", {NULL}, 4851, "tcp"}, -{"derby-repli", {NULL}, 4851, "udp"}, -{"unify-debug", {NULL}, 4867, "tcp"}, -{"unify-debug", {NULL}, 4867, "udp"}, -{"phrelay", {NULL}, 4868, "tcp"}, -{"phrelay", {NULL}, 4868, "udp"}, -{"phrelaydbg", {NULL}, 4869, "tcp"}, -{"phrelaydbg", {NULL}, 4869, "udp"}, -{"cc-tracking", {NULL}, 4870, "tcp"}, -{"cc-tracking", {NULL}, 4870, "udp"}, -{"wired", {NULL}, 4871, "tcp"}, -{"wired", {NULL}, 4871, "udp"}, -{"tritium-can", {NULL}, 4876, "tcp"}, -{"tritium-can", {NULL}, 4876, "udp"}, -{"lmcs", {NULL}, 4877, "tcp"}, -{"lmcs", {NULL}, 4877, "udp"}, -{"inst-discovery", {NULL}, 4878, "udp"}, -{"wsdl-event", {NULL}, 4879, "tcp"}, -{"hislip", {NULL}, 4880, "tcp"}, -{"socp-t", {NULL}, 4881, "udp"}, -{"socp-c", {NULL}, 4882, "udp"}, -{"wmlserver", {NULL}, 4883, "tcp"}, -{"hivestor", {NULL}, 4884, "tcp"}, -{"hivestor", {NULL}, 4884, "udp"}, -{"abbs", {NULL}, 4885, "tcp"}, -{"abbs", {NULL}, 4885, "udp"}, -{"lyskom", {NULL}, 4894, "tcp"}, -{"lyskom", {NULL}, 4894, "udp"}, -{"radmin-port", {NULL}, 4899, "tcp"}, -{"radmin-port", {NULL}, 4899, "udp"}, -{"hfcs", {NULL}, 4900, "tcp"}, -{"hfcs", {NULL}, 4900, "udp"}, -{"flr_agent", {NULL}, 4901, "tcp"}, -{"magiccontrol", {NULL}, 4902, "tcp"}, -{"lutap", {NULL}, 4912, "tcp"}, -{"lutcp", {NULL}, 4913, "tcp"}, -{"bones", {NULL}, 4914, "tcp"}, -{"bones", {NULL}, 4914, "udp"}, -{"frcs", {NULL}, 4915, "tcp"}, -{"atsc-mh-ssc", {NULL}, 4937, "udp"}, -{"eq-office-4940", {NULL}, 4940, "tcp"}, -{"eq-office-4940", {NULL}, 4940, "udp"}, -{"eq-office-4941", {NULL}, 4941, "tcp"}, -{"eq-office-4941", {NULL}, 4941, "udp"}, -{"eq-office-4942", {NULL}, 4942, "tcp"}, -{"eq-office-4942", {NULL}, 4942, "udp"}, -{"munin", {NULL}, 4949, "tcp"}, -{"munin", {NULL}, 4949, "udp"}, -{"sybasesrvmon", {NULL}, 4950, "tcp"}, -{"sybasesrvmon", {NULL}, 4950, "udp"}, -{"pwgwims", {NULL}, 4951, "tcp"}, -{"pwgwims", {NULL}, 4951, "udp"}, -{"sagxtsds", {NULL}, 4952, "tcp"}, -{"sagxtsds", {NULL}, 4952, "udp"}, -{"dbsyncarbiter", {NULL}, 4953, "tcp"}, -{"ccss-qmm", {NULL}, 4969, "tcp"}, -{"ccss-qmm", {NULL}, 4969, "udp"}, -{"ccss-qsm", {NULL}, 4970, "tcp"}, -{"ccss-qsm", {NULL}, 4970, "udp"}, -{"webyast", {NULL}, 4984, "tcp"}, -{"gerhcs", {NULL}, 4985, "tcp"}, -{"mrip", {NULL}, 4986, "tcp"}, -{"mrip", {NULL}, 4986, "udp"}, -{"smar-se-port1", {NULL}, 4987, "tcp"}, -{"smar-se-port1", {NULL}, 4987, "udp"}, -{"smar-se-port2", {NULL}, 4988, "tcp"}, -{"smar-se-port2", {NULL}, 4988, "udp"}, -{"parallel", {NULL}, 4989, "tcp"}, -{"parallel", {NULL}, 4989, "udp"}, -{"busycal", {NULL}, 4990, "tcp"}, -{"busycal", {NULL}, 4990, "udp"}, -{"vrt", {NULL}, 4991, "tcp"}, -{"vrt", {NULL}, 4991, "udp"}, -{"hfcs-manager", {NULL}, 4999, "tcp"}, -{"hfcs-manager", {NULL}, 4999, "udp"}, -{"commplex-main", {NULL}, 5000, "tcp"}, -{"commplex-main", {NULL}, 5000, "udp"}, -{"commplex-link", {NULL}, 5001, "tcp"}, -{"commplex-link", {NULL}, 5001, "udp"}, -{"rfe", {NULL}, 5002, "tcp"}, -{"rfe", {NULL}, 5002, "udp"}, -{"fmpro-internal", {NULL}, 5003, "tcp"}, -{"fmpro-internal", {NULL}, 5003, "udp"}, -{"avt-profile-1", {NULL}, 5004, "tcp"}, -{"avt-profile-1", {NULL}, 5004, "udp"}, -{"avt-profile-1", {NULL}, 5004, "dccp"}, -{"avt-profile-2", {NULL}, 5005, "tcp"}, -{"avt-profile-2", {NULL}, 5005, "udp"}, -{"avt-profile-2", {NULL}, 5005, "dccp"}, -{"wsm-server", {NULL}, 5006, "tcp"}, -{"wsm-server", {NULL}, 5006, "udp"}, -{"wsm-server-ssl", {NULL}, 5007, "tcp"}, -{"wsm-server-ssl", {NULL}, 5007, "udp"}, -{"synapsis-edge", {NULL}, 5008, "tcp"}, -{"synapsis-edge", {NULL}, 5008, "udp"}, -{"winfs", {NULL}, 5009, "tcp"}, -{"winfs", {NULL}, 5009, "udp"}, -{"telelpathstart", {NULL}, 5010, "tcp"}, -{"telelpathstart", {NULL}, 5010, "udp"}, -{"telelpathattack", {NULL}, 5011, "tcp"}, -{"telelpathattack", {NULL}, 5011, "udp"}, -{"nsp", {NULL}, 5012, "tcp"}, -{"nsp", {NULL}, 5012, "udp"}, -{"fmpro-v6", {NULL}, 5013, "tcp"}, -{"fmpro-v6", {NULL}, 5013, "udp"}, -{"onpsocket", {NULL}, 5014, "udp"}, -{"fmwp", {NULL}, 5015, "tcp"}, -{"zenginkyo-1", {NULL}, 5020, "tcp"}, -{"zenginkyo-1", {NULL}, 5020, "udp"}, -{"zenginkyo-2", {NULL}, 5021, "tcp"}, -{"zenginkyo-2", {NULL}, 5021, "udp"}, -{"mice", {NULL}, 5022, "tcp"}, -{"mice", {NULL}, 5022, "udp"}, -{"htuilsrv", {NULL}, 5023, "tcp"}, -{"htuilsrv", {NULL}, 5023, "udp"}, -{"scpi-telnet", {NULL}, 5024, "tcp"}, -{"scpi-telnet", {NULL}, 5024, "udp"}, -{"scpi-raw", {NULL}, 5025, "tcp"}, -{"scpi-raw", {NULL}, 5025, "udp"}, -{"strexec-d", {NULL}, 5026, "tcp"}, -{"strexec-d", {NULL}, 5026, "udp"}, -{"strexec-s", {NULL}, 5027, "tcp"}, -{"strexec-s", {NULL}, 5027, "udp"}, -{"qvr", {NULL}, 5028, "tcp"}, -{"infobright", {NULL}, 5029, "tcp"}, -{"infobright", {NULL}, 5029, "udp"}, -{"surfpass", {NULL}, 5030, "tcp"}, -{"surfpass", {NULL}, 5030, "udp"}, -{"dmp", {NULL}, 5031, "udp"}, -{"asnaacceler8db", {NULL}, 5042, "tcp"}, -{"asnaacceler8db", {NULL}, 5042, "udp"}, -{"swxadmin", {NULL}, 5043, "tcp"}, -{"swxadmin", {NULL}, 5043, "udp"}, -{"lxi-evntsvc", {NULL}, 5044, "tcp"}, -{"lxi-evntsvc", {NULL}, 5044, "udp"}, -{"osp", {NULL}, 5045, "tcp"}, -{"vpm-udp", {NULL}, 5046, "udp"}, -{"iscape", {NULL}, 5047, "udp"}, -{"texai", {NULL}, 5048, "tcp"}, -{"ivocalize", {NULL}, 5049, "tcp"}, -{"ivocalize", {NULL}, 5049, "udp"}, -{"mmcc", {NULL}, 5050, "tcp"}, -{"mmcc", {NULL}, 5050, "udp"}, -{"ita-agent", {NULL}, 5051, "tcp"}, -{"ita-agent", {NULL}, 5051, "udp"}, -{"ita-manager", {NULL}, 5052, "tcp"}, -{"ita-manager", {NULL}, 5052, "udp"}, -{"rlm", {NULL}, 5053, "tcp"}, -{"rlm-admin", {NULL}, 5054, "tcp"}, -{"unot", {NULL}, 5055, "tcp"}, -{"unot", {NULL}, 5055, "udp"}, -{"intecom-ps1", {NULL}, 5056, "tcp"}, -{"intecom-ps1", {NULL}, 5056, "udp"}, -{"intecom-ps2", {NULL}, 5057, "tcp"}, -{"intecom-ps2", {NULL}, 5057, "udp"}, -{"locus-disc", {NULL}, 5058, "udp"}, -{"sds", {NULL}, 5059, "tcp"}, -{"sds", {NULL}, 5059, "udp"}, -{"sip", {NULL}, 5060, "tcp"}, -{"sip", {NULL}, 5060, "udp"}, -{"sip-tls", {NULL}, 5061, "tcp"}, -{"sip-tls", {NULL}, 5061, "udp"}, -{"na-localise", {NULL}, 5062, "tcp"}, -{"na-localise", {NULL}, 5062, "udp"}, -{"csrpc", {NULL}, 5063, "tcp"}, -{"ca-1", {NULL}, 5064, "tcp"}, -{"ca-1", {NULL}, 5064, "udp"}, -{"ca-2", {NULL}, 5065, "tcp"}, -{"ca-2", {NULL}, 5065, "udp"}, -{"stanag-5066", {NULL}, 5066, "tcp"}, -{"stanag-5066", {NULL}, 5066, "udp"}, -{"authentx", {NULL}, 5067, "tcp"}, -{"authentx", {NULL}, 5067, "udp"}, -{"bitforestsrv", {NULL}, 5068, "tcp"}, -{"i-net-2000-npr", {NULL}, 5069, "tcp"}, -{"i-net-2000-npr", {NULL}, 5069, "udp"}, -{"vtsas", {NULL}, 5070, "tcp"}, -{"vtsas", {NULL}, 5070, "udp"}, -{"powerschool", {NULL}, 5071, "tcp"}, -{"powerschool", {NULL}, 5071, "udp"}, -{"ayiya", {NULL}, 5072, "tcp"}, -{"ayiya", {NULL}, 5072, "udp"}, -{"tag-pm", {NULL}, 5073, "tcp"}, -{"tag-pm", {NULL}, 5073, "udp"}, -{"alesquery", {NULL}, 5074, "tcp"}, -{"alesquery", {NULL}, 5074, "udp"}, -{"cp-spxrpts", {NULL}, 5079, "udp"}, -{"onscreen", {NULL}, 5080, "tcp"}, -{"onscreen", {NULL}, 5080, "udp"}, -{"sdl-ets", {NULL}, 5081, "tcp"}, -{"sdl-ets", {NULL}, 5081, "udp"}, -{"qcp", {NULL}, 5082, "tcp"}, -{"qcp", {NULL}, 5082, "udp"}, -{"qfp", {NULL}, 5083, "tcp"}, -{"qfp", {NULL}, 5083, "udp"}, -{"llrp", {NULL}, 5084, "tcp"}, -{"llrp", {NULL}, 5084, "udp"}, -{"encrypted-llrp", {NULL}, 5085, "tcp"}, -{"encrypted-llrp", {NULL}, 5085, "udp"}, -{"aprigo-cs", {NULL}, 5086, "tcp"}, -{"car", {NULL}, 5090, "sctp"}, -{"cxtp", {NULL}, 5091, "sctp"}, -{"magpie", {NULL}, 5092, "udp"}, -{"sentinel-lm", {NULL}, 5093, "tcp"}, -{"sentinel-lm", {NULL}, 5093, "udp"}, -{"hart-ip", {NULL}, 5094, "tcp"}, -{"hart-ip", {NULL}, 5094, "udp"}, -{"sentlm-srv2srv", {NULL}, 5099, "tcp"}, -{"sentlm-srv2srv", {NULL}, 5099, "udp"}, -{"socalia", {NULL}, 5100, "tcp"}, -{"socalia", {NULL}, 5100, "udp"}, -{"talarian-tcp", {NULL}, 5101, "tcp"}, -{"talarian-udp", {NULL}, 5101, "udp"}, -{"oms-nonsecure", {NULL}, 5102, "tcp"}, -{"oms-nonsecure", {NULL}, 5102, "udp"}, -{"actifio-c2c", {NULL}, 5103, "tcp"}, -{"tinymessage", {NULL}, 5104, "udp"}, -{"hughes-ap", {NULL}, 5105, "udp"}, -{"taep-as-svc", {NULL}, 5111, "tcp"}, -{"taep-as-svc", {NULL}, 5111, "udp"}, -{"pm-cmdsvr", {NULL}, 5112, "tcp"}, -{"pm-cmdsvr", {NULL}, 5112, "udp"}, -{"ev-services", {NULL}, 5114, "tcp"}, -{"autobuild", {NULL}, 5115, "tcp"}, -{"emb-proj-cmd", {NULL}, 5116, "udp"}, -{"gradecam", {NULL}, 5117, "tcp"}, -{"nbt-pc", {NULL}, 5133, "tcp"}, -{"nbt-pc", {NULL}, 5133, "udp"}, -{"ppactivation", {NULL}, 5134, "tcp"}, -{"erp-scale", {NULL}, 5135, "tcp"}, -{"minotaur-sa", {NULL}, 5136, "udp"}, -{"ctsd", {NULL}, 5137, "tcp"}, -{"ctsd", {NULL}, 5137, "udp"}, -{"rmonitor_secure", {NULL}, 5145, "tcp"}, -{"rmonitor_secure", {NULL}, 5145, "udp"}, -{"social-alarm", {NULL}, 5146, "tcp"}, -{"atmp", {NULL}, 5150, "tcp"}, -{"atmp", {NULL}, 5150, "udp"}, -{"esri_sde", {NULL}, 5151, "tcp"}, -{"esri_sde", {NULL}, 5151, "udp"}, -{"sde-discovery", {NULL}, 5152, "tcp"}, -{"sde-discovery", {NULL}, 5152, "udp"}, -{"toruxserver", {NULL}, 5153, "tcp"}, -{"bzflag", {NULL}, 5154, "tcp"}, -{"bzflag", {NULL}, 5154, "udp"}, -{"asctrl-agent", {NULL}, 5155, "tcp"}, -{"asctrl-agent", {NULL}, 5155, "udp"}, -{"rugameonline", {NULL}, 5156, "tcp"}, -{"mediat", {NULL}, 5157, "tcp"}, -{"snmpssh", {NULL}, 5161, "tcp"}, -{"snmpssh-trap", {NULL}, 5162, "tcp"}, -{"sbackup", {NULL}, 5163, "tcp"}, -{"vpa", {NULL}, 5164, "tcp"}, -{"vpa-disc", {NULL}, 5164, "udp"}, -{"ife_icorp", {NULL}, 5165, "tcp"}, -{"ife_icorp", {NULL}, 5165, "udp"}, -{"winpcs", {NULL}, 5166, "tcp"}, -{"winpcs", {NULL}, 5166, "udp"}, -{"scte104", {NULL}, 5167, "tcp"}, -{"scte104", {NULL}, 5167, "udp"}, -{"scte30", {NULL}, 5168, "tcp"}, -{"scte30", {NULL}, 5168, "udp"}, -{"aol", {NULL}, 5190, "tcp"}, -{"aol", {NULL}, 5190, "udp"}, -{"aol-1", {NULL}, 5191, "tcp"}, -{"aol-1", {NULL}, 5191, "udp"}, -{"aol-2", {NULL}, 5192, "tcp"}, -{"aol-2", {NULL}, 5192, "udp"}, -{"aol-3", {NULL}, 5193, "tcp"}, -{"aol-3", {NULL}, 5193, "udp"}, -{"cpscomm", {NULL}, 5194, "tcp"}, -{"targus-getdata", {NULL}, 5200, "tcp"}, -{"targus-getdata", {NULL}, 5200, "udp"}, -{"targus-getdata1", {NULL}, 5201, "tcp"}, -{"targus-getdata1", {NULL}, 5201, "udp"}, -{"targus-getdata2", {NULL}, 5202, "tcp"}, -{"targus-getdata2", {NULL}, 5202, "udp"}, -{"targus-getdata3", {NULL}, 5203, "tcp"}, -{"targus-getdata3", {NULL}, 5203, "udp"}, -{"3exmp", {NULL}, 5221, "tcp"}, -{"xmpp-client", {NULL}, 5222, "tcp"}, -{"hpvirtgrp", {NULL}, 5223, "tcp"}, -{"hpvirtgrp", {NULL}, 5223, "udp"}, -{"hpvirtctrl", {NULL}, 5224, "tcp"}, -{"hpvirtctrl", {NULL}, 5224, "udp"}, -{"hp-server", {NULL}, 5225, "tcp"}, -{"hp-server", {NULL}, 5225, "udp"}, -{"hp-status", {NULL}, 5226, "tcp"}, -{"hp-status", {NULL}, 5226, "udp"}, -{"perfd", {NULL}, 5227, "tcp"}, -{"perfd", {NULL}, 5227, "udp"}, -{"hpvroom", {NULL}, 5228, "tcp"}, -{"csedaemon", {NULL}, 5232, "tcp"}, -{"enfs", {NULL}, 5233, "tcp"}, -{"eenet", {NULL}, 5234, "tcp"}, -{"eenet", {NULL}, 5234, "udp"}, -{"galaxy-network", {NULL}, 5235, "tcp"}, -{"galaxy-network", {NULL}, 5235, "udp"}, -{"padl2sim", {NULL}, 5236, "tcp"}, -{"padl2sim", {NULL}, 5236, "udp"}, -{"mnet-discovery", {NULL}, 5237, "tcp"}, -{"mnet-discovery", {NULL}, 5237, "udp"}, -{"downtools", {NULL}, 5245, "tcp"}, -{"downtools-disc", {NULL}, 5245, "udp"}, -{"capwap-control", {NULL}, 5246, "udp"}, -{"capwap-data", {NULL}, 5247, "udp"}, -{"caacws", {NULL}, 5248, "tcp"}, -{"caacws", {NULL}, 5248, "udp"}, -{"caaclang2", {NULL}, 5249, "tcp"}, -{"caaclang2", {NULL}, 5249, "udp"}, -{"soagateway", {NULL}, 5250, "tcp"}, -{"soagateway", {NULL}, 5250, "udp"}, -{"caevms", {NULL}, 5251, "tcp"}, -{"caevms", {NULL}, 5251, "udp"}, -{"movaz-ssc", {NULL}, 5252, "tcp"}, -{"movaz-ssc", {NULL}, 5252, "udp"}, -{"kpdp", {NULL}, 5253, "tcp"}, -{"3com-njack-1", {NULL}, 5264, "tcp"}, -{"3com-njack-1", {NULL}, 5264, "udp"}, -{"3com-njack-2", {NULL}, 5265, "tcp"}, -{"3com-njack-2", {NULL}, 5265, "udp"}, -{"xmpp-server", {NULL}, 5269, "tcp"}, -{"xmp", {NULL}, 5270, "tcp"}, -{"xmp", {NULL}, 5270, "udp"}, -{"cuelink", {NULL}, 5271, "tcp"}, -{"cuelink-disc", {NULL}, 5271, "udp"}, -{"pk", {NULL}, 5272, "tcp"}, -{"pk", {NULL}, 5272, "udp"}, -{"xmpp-bosh", {NULL}, 5280, "tcp"}, -{"undo-lm", {NULL}, 5281, "tcp"}, -{"transmit-port", {NULL}, 5282, "tcp"}, -{"transmit-port", {NULL}, 5282, "udp"}, -{"presence", {NULL}, 5298, "tcp"}, -{"presence", {NULL}, 5298, "udp"}, -{"nlg-data", {NULL}, 5299, "tcp"}, -{"nlg-data", {NULL}, 5299, "udp"}, -{"hacl-hb", {NULL}, 5300, "tcp"}, -{"hacl-hb", {NULL}, 5300, "udp"}, -{"hacl-gs", {NULL}, 5301, "tcp"}, -{"hacl-gs", {NULL}, 5301, "udp"}, -{"hacl-cfg", {NULL}, 5302, "tcp"}, -{"hacl-cfg", {NULL}, 5302, "udp"}, -{"hacl-probe", {NULL}, 5303, "tcp"}, -{"hacl-probe", {NULL}, 5303, "udp"}, -{"hacl-local", {NULL}, 5304, "tcp"}, -{"hacl-local", {NULL}, 5304, "udp"}, -{"hacl-test", {NULL}, 5305, "tcp"}, -{"hacl-test", {NULL}, 5305, "udp"}, -{"sun-mc-grp", {NULL}, 5306, "tcp"}, -{"sun-mc-grp", {NULL}, 5306, "udp"}, -{"sco-aip", {NULL}, 5307, "tcp"}, -{"sco-aip", {NULL}, 5307, "udp"}, -{"cfengine", {NULL}, 5308, "tcp"}, -{"cfengine", {NULL}, 5308, "udp"}, -{"jprinter", {NULL}, 5309, "tcp"}, -{"jprinter", {NULL}, 5309, "udp"}, -{"outlaws", {NULL}, 5310, "tcp"}, -{"outlaws", {NULL}, 5310, "udp"}, -{"permabit-cs", {NULL}, 5312, "tcp"}, -{"permabit-cs", {NULL}, 5312, "udp"}, -{"rrdp", {NULL}, 5313, "tcp"}, -{"rrdp", {NULL}, 5313, "udp"}, -{"opalis-rbt-ipc", {NULL}, 5314, "tcp"}, -{"opalis-rbt-ipc", {NULL}, 5314, "udp"}, -{"hacl-poll", {NULL}, 5315, "tcp"}, -{"hacl-poll", {NULL}, 5315, "udp"}, -{"hpdevms", {NULL}, 5316, "tcp"}, -{"hpdevms", {NULL}, 5316, "udp"}, -{"bsfserver-zn", {NULL}, 5320, "tcp"}, -{"bsfsvr-zn-ssl", {NULL}, 5321, "tcp"}, -{"kfserver", {NULL}, 5343, "tcp"}, -{"kfserver", {NULL}, 5343, "udp"}, -{"xkotodrcp", {NULL}, 5344, "tcp"}, -{"xkotodrcp", {NULL}, 5344, "udp"}, -{"stuns", {NULL}, 5349, "tcp"}, -{"stuns", {NULL}, 5349, "udp"}, -{"turns", {NULL}, 5349, "tcp"}, -{"turns", {NULL}, 5349, "udp"}, -{"stun-behaviors", {NULL}, 5349, "tcp"}, -{"stun-behaviors", {NULL}, 5349, "udp"}, -{"nat-pmp-status", {NULL}, 5350, "tcp"}, -{"nat-pmp-status", {NULL}, 5350, "udp"}, -{"nat-pmp", {NULL}, 5351, "tcp"}, -{"nat-pmp", {NULL}, 5351, "udp"}, -{"dns-llq", {NULL}, 5352, "tcp"}, -{"dns-llq", {NULL}, 5352, "udp"}, -{"mdns", {NULL}, 5353, "tcp"}, -{"mdns", {NULL}, 5353, "udp"}, -{"mdnsresponder", {NULL}, 5354, "tcp"}, -{"mdnsresponder", {NULL}, 5354, "udp"}, -{"llmnr", {NULL}, 5355, "tcp"}, -{"llmnr", {NULL}, 5355, "udp"}, -{"ms-smlbiz", {NULL}, 5356, "tcp"}, -{"ms-smlbiz", {NULL}, 5356, "udp"}, -{"wsdapi", {NULL}, 5357, "tcp"}, -{"wsdapi", {NULL}, 5357, "udp"}, -{"wsdapi-s", {NULL}, 5358, "tcp"}, -{"wsdapi-s", {NULL}, 5358, "udp"}, -{"ms-alerter", {NULL}, 5359, "tcp"}, -{"ms-alerter", {NULL}, 5359, "udp"}, -{"ms-sideshow", {NULL}, 5360, "tcp"}, -{"ms-sideshow", {NULL}, 5360, "udp"}, -{"ms-s-sideshow", {NULL}, 5361, "tcp"}, -{"ms-s-sideshow", {NULL}, 5361, "udp"}, -{"serverwsd2", {NULL}, 5362, "tcp"}, -{"serverwsd2", {NULL}, 5362, "udp"}, -{"net-projection", {NULL}, 5363, "tcp"}, -{"net-projection", {NULL}, 5363, "udp"}, -{"stresstester", {NULL}, 5397, "tcp"}, -{"stresstester", {NULL}, 5397, "udp"}, -{"elektron-admin", {NULL}, 5398, "tcp"}, -{"elektron-admin", {NULL}, 5398, "udp"}, -{"securitychase", {NULL}, 5399, "tcp"}, -{"securitychase", {NULL}, 5399, "udp"}, -{"excerpt", {NULL}, 5400, "tcp"}, -{"excerpt", {NULL}, 5400, "udp"}, -{"excerpts", {NULL}, 5401, "tcp"}, -{"excerpts", {NULL}, 5401, "udp"}, -{"mftp", {NULL}, 5402, "tcp"}, -{"mftp", {NULL}, 5402, "udp"}, -{"hpoms-ci-lstn", {NULL}, 5403, "tcp"}, -{"hpoms-ci-lstn", {NULL}, 5403, "udp"}, -{"hpoms-dps-lstn", {NULL}, 5404, "tcp"}, -{"hpoms-dps-lstn", {NULL}, 5404, "udp"}, -{"netsupport", {NULL}, 5405, "tcp"}, -{"netsupport", {NULL}, 5405, "udp"}, -{"systemics-sox", {NULL}, 5406, "tcp"}, -{"systemics-sox", {NULL}, 5406, "udp"}, -{"foresyte-clear", {NULL}, 5407, "tcp"}, -{"foresyte-clear", {NULL}, 5407, "udp"}, -{"foresyte-sec", {NULL}, 5408, "tcp"}, -{"foresyte-sec", {NULL}, 5408, "udp"}, -{"salient-dtasrv", {NULL}, 5409, "tcp"}, -{"salient-dtasrv", {NULL}, 5409, "udp"}, -{"salient-usrmgr", {NULL}, 5410, "tcp"}, -{"salient-usrmgr", {NULL}, 5410, "udp"}, -{"actnet", {NULL}, 5411, "tcp"}, -{"actnet", {NULL}, 5411, "udp"}, -{"continuus", {NULL}, 5412, "tcp"}, -{"continuus", {NULL}, 5412, "udp"}, -{"wwiotalk", {NULL}, 5413, "tcp"}, -{"wwiotalk", {NULL}, 5413, "udp"}, -{"statusd", {NULL}, 5414, "tcp"}, -{"statusd", {NULL}, 5414, "udp"}, -{"ns-server", {NULL}, 5415, "tcp"}, -{"ns-server", {NULL}, 5415, "udp"}, -{"sns-gateway", {NULL}, 5416, "tcp"}, -{"sns-gateway", {NULL}, 5416, "udp"}, -{"sns-agent", {NULL}, 5417, "tcp"}, -{"sns-agent", {NULL}, 5417, "udp"}, -{"mcntp", {NULL}, 5418, "tcp"}, -{"mcntp", {NULL}, 5418, "udp"}, -{"dj-ice", {NULL}, 5419, "tcp"}, -{"dj-ice", {NULL}, 5419, "udp"}, -{"cylink-c", {NULL}, 5420, "tcp"}, -{"cylink-c", {NULL}, 5420, "udp"}, -{"netsupport2", {NULL}, 5421, "tcp"}, -{"netsupport2", {NULL}, 5421, "udp"}, -{"salient-mux", {NULL}, 5422, "tcp"}, -{"salient-mux", {NULL}, 5422, "udp"}, -{"virtualuser", {NULL}, 5423, "tcp"}, -{"virtualuser", {NULL}, 5423, "udp"}, -{"beyond-remote", {NULL}, 5424, "tcp"}, -{"beyond-remote", {NULL}, 5424, "udp"}, -{"br-channel", {NULL}, 5425, "tcp"}, -{"br-channel", {NULL}, 5425, "udp"}, -{"devbasic", {NULL}, 5426, "tcp"}, -{"devbasic", {NULL}, 5426, "udp"}, -{"sco-peer-tta", {NULL}, 5427, "tcp"}, -{"sco-peer-tta", {NULL}, 5427, "udp"}, -{"telaconsole", {NULL}, 5428, "tcp"}, -{"telaconsole", {NULL}, 5428, "udp"}, -{"base", {NULL}, 5429, "tcp"}, -{"base", {NULL}, 5429, "udp"}, -{"radec-corp", {NULL}, 5430, "tcp"}, -{"radec-corp", {NULL}, 5430, "udp"}, -{"park-agent", {NULL}, 5431, "tcp"}, -{"park-agent", {NULL}, 5431, "udp"}, -{"postgresql", {NULL}, 5432, "tcp"}, -{"postgresql", {NULL}, 5432, "udp"}, -{"pyrrho", {NULL}, 5433, "tcp"}, -{"pyrrho", {NULL}, 5433, "udp"}, -{"sgi-arrayd", {NULL}, 5434, "tcp"}, -{"sgi-arrayd", {NULL}, 5434, "udp"}, -{"sceanics", {NULL}, 5435, "tcp"}, -{"sceanics", {NULL}, 5435, "udp"}, -{"pmip6-cntl", {NULL}, 5436, "udp"}, -{"pmip6-data", {NULL}, 5437, "udp"}, -{"spss", {NULL}, 5443, "tcp"}, -{"spss", {NULL}, 5443, "udp"}, -{"surebox", {NULL}, 5453, "tcp"}, -{"surebox", {NULL}, 5453, "udp"}, -{"apc-5454", {NULL}, 5454, "tcp"}, -{"apc-5454", {NULL}, 5454, "udp"}, -{"apc-5455", {NULL}, 5455, "tcp"}, -{"apc-5455", {NULL}, 5455, "udp"}, -{"apc-5456", {NULL}, 5456, "tcp"}, -{"apc-5456", {NULL}, 5456, "udp"}, -{"silkmeter", {NULL}, 5461, "tcp"}, -{"silkmeter", {NULL}, 5461, "udp"}, -{"ttl-publisher", {NULL}, 5462, "tcp"}, -{"ttl-publisher", {NULL}, 5462, "udp"}, -{"ttlpriceproxy", {NULL}, 5463, "tcp"}, -{"ttlpriceproxy", {NULL}, 5463, "udp"}, -{"quailnet", {NULL}, 5464, "tcp"}, -{"quailnet", {NULL}, 5464, "udp"}, -{"netops-broker", {NULL}, 5465, "tcp"}, -{"netops-broker", {NULL}, 5465, "udp"}, -{"fcp-addr-srvr1", {NULL}, 5500, "tcp"}, -{"fcp-addr-srvr1", {NULL}, 5500, "udp"}, -{"fcp-addr-srvr2", {NULL}, 5501, "tcp"}, -{"fcp-addr-srvr2", {NULL}, 5501, "udp"}, -{"fcp-srvr-inst1", {NULL}, 5502, "tcp"}, -{"fcp-srvr-inst1", {NULL}, 5502, "udp"}, -{"fcp-srvr-inst2", {NULL}, 5503, "tcp"}, -{"fcp-srvr-inst2", {NULL}, 5503, "udp"}, -{"fcp-cics-gw1", {NULL}, 5504, "tcp"}, -{"fcp-cics-gw1", {NULL}, 5504, "udp"}, -{"checkoutdb", {NULL}, 5505, "tcp"}, -{"checkoutdb", {NULL}, 5505, "udp"}, -{"amc", {NULL}, 5506, "tcp"}, -{"amc", {NULL}, 5506, "udp"}, -{"sgi-eventmond", {NULL}, 5553, "tcp"}, -{"sgi-eventmond", {NULL}, 5553, "udp"}, -{"sgi-esphttp", {NULL}, 5554, "tcp"}, -{"sgi-esphttp", {NULL}, 5554, "udp"}, -{"personal-agent", {NULL}, 5555, "tcp"}, -{"personal-agent", {NULL}, 5555, "udp"}, -{"freeciv", {NULL}, 5556, "tcp"}, -{"freeciv", {NULL}, 5556, "udp"}, -{"farenet", {NULL}, 5557, "tcp"}, -{"westec-connect", {NULL}, 5566, "tcp"}, -{"m-oap", {NULL}, 5567, "tcp"}, -{"m-oap", {NULL}, 5567, "udp"}, -{"sdt", {NULL}, 5568, "tcp"}, -{"sdt", {NULL}, 5568, "udp"}, -{"sdmmp", {NULL}, 5573, "tcp"}, -{"sdmmp", {NULL}, 5573, "udp"}, -{"lsi-bobcat", {NULL}, 5574, "tcp"}, -{"ora-oap", {NULL}, 5575, "tcp"}, -{"fdtracks", {NULL}, 5579, "tcp"}, -{"tmosms0", {NULL}, 5580, "tcp"}, -{"tmosms0", {NULL}, 5580, "udp"}, -{"tmosms1", {NULL}, 5581, "tcp"}, -{"tmosms1", {NULL}, 5581, "udp"}, -{"fac-restore", {NULL}, 5582, "tcp"}, -{"fac-restore", {NULL}, 5582, "udp"}, -{"tmo-icon-sync", {NULL}, 5583, "tcp"}, -{"tmo-icon-sync", {NULL}, 5583, "udp"}, -{"bis-web", {NULL}, 5584, "tcp"}, -{"bis-web", {NULL}, 5584, "udp"}, -{"bis-sync", {NULL}, 5585, "tcp"}, -{"bis-sync", {NULL}, 5585, "udp"}, -{"ininmessaging", {NULL}, 5597, "tcp"}, -{"ininmessaging", {NULL}, 5597, "udp"}, -{"mctfeed", {NULL}, 5598, "tcp"}, -{"mctfeed", {NULL}, 5598, "udp"}, -{"esinstall", {NULL}, 5599, "tcp"}, -{"esinstall", {NULL}, 5599, "udp"}, -{"esmmanager", {NULL}, 5600, "tcp"}, -{"esmmanager", {NULL}, 5600, "udp"}, -{"esmagent", {NULL}, 5601, "tcp"}, -{"esmagent", {NULL}, 5601, "udp"}, -{"a1-msc", {NULL}, 5602, "tcp"}, -{"a1-msc", {NULL}, 5602, "udp"}, -{"a1-bs", {NULL}, 5603, "tcp"}, -{"a1-bs", {NULL}, 5603, "udp"}, -{"a3-sdunode", {NULL}, 5604, "tcp"}, -{"a3-sdunode", {NULL}, 5604, "udp"}, -{"a4-sdunode", {NULL}, 5605, "tcp"}, -{"a4-sdunode", {NULL}, 5605, "udp"}, -{"ninaf", {NULL}, 5627, "tcp"}, -{"ninaf", {NULL}, 5627, "udp"}, -{"htrust", {NULL}, 5628, "tcp"}, -{"htrust", {NULL}, 5628, "udp"}, -{"symantec-sfdb", {NULL}, 5629, "tcp"}, -{"symantec-sfdb", {NULL}, 5629, "udp"}, -{"precise-comm", {NULL}, 5630, "tcp"}, -{"precise-comm", {NULL}, 5630, "udp"}, -{"pcanywheredata", {NULL}, 5631, "tcp"}, -{"pcanywheredata", {NULL}, 5631, "udp"}, -{"pcanywherestat", {NULL}, 5632, "tcp"}, -{"pcanywherestat", {NULL}, 5632, "udp"}, -{"beorl", {NULL}, 5633, "tcp"}, -{"beorl", {NULL}, 5633, "udp"}, -{"xprtld", {NULL}, 5634, "tcp"}, -{"xprtld", {NULL}, 5634, "udp"}, -{"sfmsso", {NULL}, 5635, "tcp"}, -{"sfm-db-server", {NULL}, 5636, "tcp"}, -{"cssc", {NULL}, 5637, "tcp"}, -{"amqps", {NULL}, 5671, "tcp"}, -{"amqps", {NULL}, 5671, "udp"}, -{"amqp", {NULL}, 5672, "tcp"}, -{"amqp", {NULL}, 5672, "udp"}, -{"amqp", {NULL}, 5672, "sctp"}, -{"jms", {NULL}, 5673, "tcp"}, -{"jms", {NULL}, 5673, "udp"}, -{"hyperscsi-port", {NULL}, 5674, "tcp"}, -{"hyperscsi-port", {NULL}, 5674, "udp"}, -{"v5ua", {NULL}, 5675, "tcp"}, -{"v5ua", {NULL}, 5675, "udp"}, -{"v5ua", {NULL}, 5675, "sctp"}, -{"raadmin", {NULL}, 5676, "tcp"}, -{"raadmin", {NULL}, 5676, "udp"}, -{"questdb2-lnchr", {NULL}, 5677, "tcp"}, -{"questdb2-lnchr", {NULL}, 5677, "udp"}, -{"rrac", {NULL}, 5678, "tcp"}, -{"rrac", {NULL}, 5678, "udp"}, -{"dccm", {NULL}, 5679, "tcp"}, -{"dccm", {NULL}, 5679, "udp"}, -{"auriga-router", {NULL}, 5680, "tcp"}, -{"auriga-router", {NULL}, 5680, "udp"}, -{"ncxcp", {NULL}, 5681, "tcp"}, -{"ncxcp", {NULL}, 5681, "udp"}, -{"brightcore", {NULL}, 5682, "udp"}, -{"ggz", {NULL}, 5688, "tcp"}, -{"ggz", {NULL}, 5688, "udp"}, -{"qmvideo", {NULL}, 5689, "tcp"}, -{"qmvideo", {NULL}, 5689, "udp"}, -{"proshareaudio", {NULL}, 5713, "tcp"}, -{"proshareaudio", {NULL}, 5713, "udp"}, -{"prosharevideo", {NULL}, 5714, "tcp"}, -{"prosharevideo", {NULL}, 5714, "udp"}, -{"prosharedata", {NULL}, 5715, "tcp"}, -{"prosharedata", {NULL}, 5715, "udp"}, -{"prosharerequest", {NULL}, 5716, "tcp"}, -{"prosharerequest", {NULL}, 5716, "udp"}, -{"prosharenotify", {NULL}, 5717, "tcp"}, -{"prosharenotify", {NULL}, 5717, "udp"}, -{"dpm", {NULL}, 5718, "tcp"}, -{"dpm", {NULL}, 5718, "udp"}, -{"dpm-agent", {NULL}, 5719, "tcp"}, -{"dpm-agent", {NULL}, 5719, "udp"}, -{"ms-licensing", {NULL}, 5720, "tcp"}, -{"ms-licensing", {NULL}, 5720, "udp"}, -{"dtpt", {NULL}, 5721, "tcp"}, -{"dtpt", {NULL}, 5721, "udp"}, -{"msdfsr", {NULL}, 5722, "tcp"}, -{"msdfsr", {NULL}, 5722, "udp"}, -{"omhs", {NULL}, 5723, "tcp"}, -{"omhs", {NULL}, 5723, "udp"}, -{"omsdk", {NULL}, 5724, "tcp"}, -{"omsdk", {NULL}, 5724, "udp"}, -{"ms-ilm", {NULL}, 5725, "tcp"}, -{"ms-ilm-sts", {NULL}, 5726, "tcp"}, -{"asgenf", {NULL}, 5727, "tcp"}, -{"io-dist-data", {NULL}, 5728, "tcp"}, -{"io-dist-group", {NULL}, 5728, "udp"}, -{"openmail", {NULL}, 5729, "tcp"}, -{"openmail", {NULL}, 5729, "udp"}, -{"unieng", {NULL}, 5730, "tcp"}, -{"unieng", {NULL}, 5730, "udp"}, -{"ida-discover1", {NULL}, 5741, "tcp"}, -{"ida-discover1", {NULL}, 5741, "udp"}, -{"ida-discover2", {NULL}, 5742, "tcp"}, -{"ida-discover2", {NULL}, 5742, "udp"}, -{"watchdoc-pod", {NULL}, 5743, "tcp"}, -{"watchdoc-pod", {NULL}, 5743, "udp"}, -{"watchdoc", {NULL}, 5744, "tcp"}, -{"watchdoc", {NULL}, 5744, "udp"}, -{"fcopy-server", {NULL}, 5745, "tcp"}, -{"fcopy-server", {NULL}, 5745, "udp"}, -{"fcopys-server", {NULL}, 5746, "tcp"}, -{"fcopys-server", {NULL}, 5746, "udp"}, -{"tunatic", {NULL}, 5747, "tcp"}, -{"tunatic", {NULL}, 5747, "udp"}, -{"tunalyzer", {NULL}, 5748, "tcp"}, -{"tunalyzer", {NULL}, 5748, "udp"}, -{"rscd", {NULL}, 5750, "tcp"}, -{"rscd", {NULL}, 5750, "udp"}, -{"openmailg", {NULL}, 5755, "tcp"}, -{"openmailg", {NULL}, 5755, "udp"}, -{"x500ms", {NULL}, 5757, "tcp"}, -{"x500ms", {NULL}, 5757, "udp"}, -{"openmailns", {NULL}, 5766, "tcp"}, -{"openmailns", {NULL}, 5766, "udp"}, -{"s-openmail", {NULL}, 5767, "tcp"}, -{"s-openmail", {NULL}, 5767, "udp"}, -{"openmailpxy", {NULL}, 5768, "tcp"}, -{"openmailpxy", {NULL}, 5768, "udp"}, -{"spramsca", {NULL}, 5769, "tcp"}, -{"spramsca", {NULL}, 5769, "udp"}, -{"spramsd", {NULL}, 5770, "tcp"}, -{"spramsd", {NULL}, 5770, "udp"}, -{"netagent", {NULL}, 5771, "tcp"}, -{"netagent", {NULL}, 5771, "udp"}, -{"dali-port", {NULL}, 5777, "tcp"}, -{"dali-port", {NULL}, 5777, "udp"}, -{"vts-rpc", {NULL}, 5780, "tcp"}, -{"3par-evts", {NULL}, 5781, "tcp"}, -{"3par-evts", {NULL}, 5781, "udp"}, -{"3par-mgmt", {NULL}, 5782, "tcp"}, -{"3par-mgmt", {NULL}, 5782, "udp"}, -{"3par-mgmt-ssl", {NULL}, 5783, "tcp"}, -{"3par-mgmt-ssl", {NULL}, 5783, "udp"}, -{"ibar", {NULL}, 5784, "udp"}, -{"3par-rcopy", {NULL}, 5785, "tcp"}, -{"3par-rcopy", {NULL}, 5785, "udp"}, -{"cisco-redu", {NULL}, 5786, "udp"}, -{"waascluster", {NULL}, 5787, "udp"}, -{"xtreamx", {NULL}, 5793, "tcp"}, -{"xtreamx", {NULL}, 5793, "udp"}, -{"spdp", {NULL}, 5794, "udp"}, -{"icmpd", {NULL}, 5813, "tcp"}, -{"icmpd", {NULL}, 5813, "udp"}, -{"spt-automation", {NULL}, 5814, "tcp"}, -{"spt-automation", {NULL}, 5814, "udp"}, -{"wherehoo", {NULL}, 5859, "tcp"}, -{"wherehoo", {NULL}, 5859, "udp"}, -{"ppsuitemsg", {NULL}, 5863, "tcp"}, -{"ppsuitemsg", {NULL}, 5863, "udp"}, -{"rfb", {NULL}, 5900, "tcp"}, -{"rfb", {NULL}, 5900, "udp"}, -{"cm", {NULL}, 5910, "tcp"}, -{"cm", {NULL}, 5910, "udp"}, -{"cpdlc", {NULL}, 5911, "tcp"}, -{"cpdlc", {NULL}, 5911, "udp"}, -{"fis", {NULL}, 5912, "tcp"}, -{"fis", {NULL}, 5912, "udp"}, -{"ads-c", {NULL}, 5913, "tcp"}, -{"ads-c", {NULL}, 5913, "udp"}, -{"indy", {NULL}, 5963, "tcp"}, -{"indy", {NULL}, 5963, "udp"}, -{"mppolicy-v5", {NULL}, 5968, "tcp"}, -{"mppolicy-v5", {NULL}, 5968, "udp"}, -{"mppolicy-mgr", {NULL}, 5969, "tcp"}, -{"mppolicy-mgr", {NULL}, 5969, "udp"}, -{"couchdb", {NULL}, 5984, "tcp"}, -{"couchdb", {NULL}, 5984, "udp"}, -{"wsman", {NULL}, 5985, "tcp"}, -{"wsman", {NULL}, 5985, "udp"}, -{"wsmans", {NULL}, 5986, "tcp"}, -{"wsmans", {NULL}, 5986, "udp"}, -{"wbem-rmi", {NULL}, 5987, "tcp"}, -{"wbem-rmi", {NULL}, 5987, "udp"}, -{"wbem-http", {NULL}, 5988, "tcp"}, -{"wbem-http", {NULL}, 5988, "udp"}, -{"wbem-https", {NULL}, 5989, "tcp"}, -{"wbem-https", {NULL}, 5989, "udp"}, -{"wbem-exp-https", {NULL}, 5990, "tcp"}, -{"wbem-exp-https", {NULL}, 5990, "udp"}, -{"nuxsl", {NULL}, 5991, "tcp"}, -{"nuxsl", {NULL}, 5991, "udp"}, -{"consul-insight", {NULL}, 5992, "tcp"}, -{"consul-insight", {NULL}, 5992, "udp"}, -{"cvsup", {NULL}, 5999, "tcp"}, -{"cvsup", {NULL}, 5999, "udp"}, -{"ndl-ahp-svc", {NULL}, 6064, "tcp"}, -{"ndl-ahp-svc", {NULL}, 6064, "udp"}, -{"winpharaoh", {NULL}, 6065, "tcp"}, -{"winpharaoh", {NULL}, 6065, "udp"}, -{"ewctsp", {NULL}, 6066, "tcp"}, -{"ewctsp", {NULL}, 6066, "udp"}, -{"gsmp", {NULL}, 6068, "tcp"}, -{"gsmp", {NULL}, 6068, "udp"}, -{"trip", {NULL}, 6069, "tcp"}, -{"trip", {NULL}, 6069, "udp"}, -{"messageasap", {NULL}, 6070, "tcp"}, -{"messageasap", {NULL}, 6070, "udp"}, -{"ssdtp", {NULL}, 6071, "tcp"}, -{"ssdtp", {NULL}, 6071, "udp"}, -{"diagnose-proc", {NULL}, 6072, "tcp"}, -{"diagnose-proc", {NULL}, 6072, "udp"}, -{"directplay8", {NULL}, 6073, "tcp"}, -{"directplay8", {NULL}, 6073, "udp"}, -{"max", {NULL}, 6074, "tcp"}, -{"max", {NULL}, 6074, "udp"}, -{"dpm-acm", {NULL}, 6075, "tcp"}, -{"miami-bcast", {NULL}, 6083, "udp"}, -{"p2p-sip", {NULL}, 6084, "tcp"}, -{"konspire2b", {NULL}, 6085, "tcp"}, -{"konspire2b", {NULL}, 6085, "udp"}, -{"pdtp", {NULL}, 6086, "tcp"}, -{"pdtp", {NULL}, 6086, "udp"}, -{"ldss", {NULL}, 6087, "tcp"}, -{"ldss", {NULL}, 6087, "udp"}, -{"raxa-mgmt", {NULL}, 6099, "tcp"}, -{"synchronet-db", {NULL}, 6100, "tcp"}, -{"synchronet-db", {NULL}, 6100, "udp"}, -{"synchronet-rtc", {NULL}, 6101, "tcp"}, -{"synchronet-rtc", {NULL}, 6101, "udp"}, -{"synchronet-upd", {NULL}, 6102, "tcp"}, -{"synchronet-upd", {NULL}, 6102, "udp"}, -{"rets", {NULL}, 6103, "tcp"}, -{"rets", {NULL}, 6103, "udp"}, -{"dbdb", {NULL}, 6104, "tcp"}, -{"dbdb", {NULL}, 6104, "udp"}, -{"primaserver", {NULL}, 6105, "tcp"}, -{"primaserver", {NULL}, 6105, "udp"}, -{"mpsserver", {NULL}, 6106, "tcp"}, -{"mpsserver", {NULL}, 6106, "udp"}, -{"etc-control", {NULL}, 6107, "tcp"}, -{"etc-control", {NULL}, 6107, "udp"}, -{"sercomm-scadmin", {NULL}, 6108, "tcp"}, -{"sercomm-scadmin", {NULL}, 6108, "udp"}, -{"globecast-id", {NULL}, 6109, "tcp"}, -{"globecast-id", {NULL}, 6109, "udp"}, -{"softcm", {NULL}, 6110, "tcp"}, -{"softcm", {NULL}, 6110, "udp"}, -{"spc", {NULL}, 6111, "tcp"}, -{"spc", {NULL}, 6111, "udp"}, -{"dtspcd", {NULL}, 6112, "tcp"}, -{"dtspcd", {NULL}, 6112, "udp"}, -{"dayliteserver", {NULL}, 6113, "tcp"}, -{"wrspice", {NULL}, 6114, "tcp"}, -{"xic", {NULL}, 6115, "tcp"}, -{"xtlserv", {NULL}, 6116, "tcp"}, -{"daylitetouch", {NULL}, 6117, "tcp"}, -{"spdy", {NULL}, 6121, "tcp"}, -{"bex-webadmin", {NULL}, 6122, "tcp"}, -{"bex-webadmin", {NULL}, 6122, "udp"}, -{"backup-express", {NULL}, 6123, "tcp"}, -{"backup-express", {NULL}, 6123, "udp"}, -{"pnbs", {NULL}, 6124, "tcp"}, -{"pnbs", {NULL}, 6124, "udp"}, -{"nbt-wol", {NULL}, 6133, "tcp"}, -{"nbt-wol", {NULL}, 6133, "udp"}, -{"pulsonixnls", {NULL}, 6140, "tcp"}, -{"pulsonixnls", {NULL}, 6140, "udp"}, -{"meta-corp", {NULL}, 6141, "tcp"}, -{"meta-corp", {NULL}, 6141, "udp"}, -{"aspentec-lm", {NULL}, 6142, "tcp"}, -{"aspentec-lm", {NULL}, 6142, "udp"}, -{"watershed-lm", {NULL}, 6143, "tcp"}, -{"watershed-lm", {NULL}, 6143, "udp"}, -{"statsci1-lm", {NULL}, 6144, "tcp"}, -{"statsci1-lm", {NULL}, 6144, "udp"}, -{"statsci2-lm", {NULL}, 6145, "tcp"}, -{"statsci2-lm", {NULL}, 6145, "udp"}, -{"lonewolf-lm", {NULL}, 6146, "tcp"}, -{"lonewolf-lm", {NULL}, 6146, "udp"}, -{"montage-lm", {NULL}, 6147, "tcp"}, -{"montage-lm", {NULL}, 6147, "udp"}, -{"ricardo-lm", {NULL}, 6148, "tcp"}, -{"ricardo-lm", {NULL}, 6148, "udp"}, -{"tal-pod", {NULL}, 6149, "tcp"}, -{"tal-pod", {NULL}, 6149, "udp"}, -{"efb-aci", {NULL}, 6159, "tcp"}, -{"patrol-ism", {NULL}, 6161, "tcp"}, -{"patrol-ism", {NULL}, 6161, "udp"}, -{"patrol-coll", {NULL}, 6162, "tcp"}, -{"patrol-coll", {NULL}, 6162, "udp"}, -{"pscribe", {NULL}, 6163, "tcp"}, -{"pscribe", {NULL}, 6163, "udp"}, -{"lm-x", {NULL}, 6200, "tcp"}, -{"lm-x", {NULL}, 6200, "udp"}, -{"radmind", {NULL}, 6222, "tcp"}, -{"radmind", {NULL}, 6222, "udp"}, -{"jeol-nsdtp-1", {NULL}, 6241, "tcp"}, -{"jeol-nsddp-1", {NULL}, 6241, "udp"}, -{"jeol-nsdtp-2", {NULL}, 6242, "tcp"}, -{"jeol-nsddp-2", {NULL}, 6242, "udp"}, -{"jeol-nsdtp-3", {NULL}, 6243, "tcp"}, -{"jeol-nsddp-3", {NULL}, 6243, "udp"}, -{"jeol-nsdtp-4", {NULL}, 6244, "tcp"}, -{"jeol-nsddp-4", {NULL}, 6244, "udp"}, -{"tl1-raw-ssl", {NULL}, 6251, "tcp"}, -{"tl1-raw-ssl", {NULL}, 6251, "udp"}, -{"tl1-ssh", {NULL}, 6252, "tcp"}, -{"tl1-ssh", {NULL}, 6252, "udp"}, -{"crip", {NULL}, 6253, "tcp"}, -{"crip", {NULL}, 6253, "udp"}, -{"gld", {NULL}, 6267, "tcp"}, -{"grid", {NULL}, 6268, "tcp"}, -{"grid", {NULL}, 6268, "udp"}, -{"grid-alt", {NULL}, 6269, "tcp"}, -{"grid-alt", {NULL}, 6269, "udp"}, -{"bmc-grx", {NULL}, 6300, "tcp"}, -{"bmc-grx", {NULL}, 6300, "udp"}, -{"bmc_ctd_ldap", {NULL}, 6301, "tcp"}, -{"bmc_ctd_ldap", {NULL}, 6301, "udp"}, -{"ufmp", {NULL}, 6306, "tcp"}, -{"ufmp", {NULL}, 6306, "udp"}, -{"scup", {NULL}, 6315, "tcp"}, -{"scup-disc", {NULL}, 6315, "udp"}, -{"abb-escp", {NULL}, 6316, "tcp"}, -{"abb-escp", {NULL}, 6316, "udp"}, -{"repsvc", {NULL}, 6320, "tcp"}, -{"repsvc", {NULL}, 6320, "udp"}, -{"emp-server1", {NULL}, 6321, "tcp"}, -{"emp-server1", {NULL}, 6321, "udp"}, -{"emp-server2", {NULL}, 6322, "tcp"}, -{"emp-server2", {NULL}, 6322, "udp"}, -{"sflow", {NULL}, 6343, "tcp"}, -{"sflow", {NULL}, 6343, "udp"}, -{"gnutella-svc", {NULL}, 6346, "tcp"}, -{"gnutella-svc", {NULL}, 6346, "udp"}, -{"gnutella-rtr", {NULL}, 6347, "tcp"}, -{"gnutella-rtr", {NULL}, 6347, "udp"}, -{"adap", {NULL}, 6350, "tcp"}, -{"adap", {NULL}, 6350, "udp"}, -{"pmcs", {NULL}, 6355, "tcp"}, -{"pmcs", {NULL}, 6355, "udp"}, -{"metaedit-mu", {NULL}, 6360, "tcp"}, -{"metaedit-mu", {NULL}, 6360, "udp"}, -{"metaedit-se", {NULL}, 6370, "tcp"}, -{"metaedit-se", {NULL}, 6370, "udp"}, -{"metatude-mds", {NULL}, 6382, "tcp"}, -{"metatude-mds", {NULL}, 6382, "udp"}, -{"clariion-evr01", {NULL}, 6389, "tcp"}, -{"clariion-evr01", {NULL}, 6389, "udp"}, -{"metaedit-ws", {NULL}, 6390, "tcp"}, -{"metaedit-ws", {NULL}, 6390, "udp"}, -{"faxcomservice", {NULL}, 6417, "tcp"}, -{"faxcomservice", {NULL}, 6417, "udp"}, -{"syserverremote", {NULL}, 6418, "tcp"}, -{"svdrp", {NULL}, 6419, "tcp"}, -{"nim-vdrshell", {NULL}, 6420, "tcp"}, -{"nim-vdrshell", {NULL}, 6420, "udp"}, -{"nim-wan", {NULL}, 6421, "tcp"}, -{"nim-wan", {NULL}, 6421, "udp"}, -{"pgbouncer", {NULL}, 6432, "tcp"}, -{"sun-sr-https", {NULL}, 6443, "tcp"}, -{"sun-sr-https", {NULL}, 6443, "udp"}, -{"sge_qmaster", {NULL}, 6444, "tcp"}, -{"sge_qmaster", {NULL}, 6444, "udp"}, -{"sge_execd", {NULL}, 6445, "tcp"}, -{"sge_execd", {NULL}, 6445, "udp"}, -{"mysql-proxy", {NULL}, 6446, "tcp"}, -{"mysql-proxy", {NULL}, 6446, "udp"}, -{"skip-cert-recv", {NULL}, 6455, "tcp"}, -{"skip-cert-send", {NULL}, 6456, "udp"}, -{"lvision-lm", {NULL}, 6471, "tcp"}, -{"lvision-lm", {NULL}, 6471, "udp"}, -{"sun-sr-http", {NULL}, 6480, "tcp"}, -{"sun-sr-http", {NULL}, 6480, "udp"}, -{"servicetags", {NULL}, 6481, "tcp"}, -{"servicetags", {NULL}, 6481, "udp"}, -{"ldoms-mgmt", {NULL}, 6482, "tcp"}, -{"ldoms-mgmt", {NULL}, 6482, "udp"}, -{"SunVTS-RMI", {NULL}, 6483, "tcp"}, -{"SunVTS-RMI", {NULL}, 6483, "udp"}, -{"sun-sr-jms", {NULL}, 6484, "tcp"}, -{"sun-sr-jms", {NULL}, 6484, "udp"}, -{"sun-sr-iiop", {NULL}, 6485, "tcp"}, -{"sun-sr-iiop", {NULL}, 6485, "udp"}, -{"sun-sr-iiops", {NULL}, 6486, "tcp"}, -{"sun-sr-iiops", {NULL}, 6486, "udp"}, -{"sun-sr-iiop-aut", {NULL}, 6487, "tcp"}, -{"sun-sr-iiop-aut", {NULL}, 6487, "udp"}, -{"sun-sr-jmx", {NULL}, 6488, "tcp"}, -{"sun-sr-jmx", {NULL}, 6488, "udp"}, -{"sun-sr-admin", {NULL}, 6489, "tcp"}, -{"sun-sr-admin", {NULL}, 6489, "udp"}, -{"boks", {NULL}, 6500, "tcp"}, -{"boks", {NULL}, 6500, "udp"}, -{"boks_servc", {NULL}, 6501, "tcp"}, -{"boks_servc", {NULL}, 6501, "udp"}, -{"boks_servm", {NULL}, 6502, "tcp"}, -{"boks_servm", {NULL}, 6502, "udp"}, -{"boks_clntd", {NULL}, 6503, "tcp"}, -{"boks_clntd", {NULL}, 6503, "udp"}, -{"badm_priv", {NULL}, 6505, "tcp"}, -{"badm_priv", {NULL}, 6505, "udp"}, -{"badm_pub", {NULL}, 6506, "tcp"}, -{"badm_pub", {NULL}, 6506, "udp"}, -{"bdir_priv", {NULL}, 6507, "tcp"}, -{"bdir_priv", {NULL}, 6507, "udp"}, -{"bdir_pub", {NULL}, 6508, "tcp"}, -{"bdir_pub", {NULL}, 6508, "udp"}, -{"mgcs-mfp-port", {NULL}, 6509, "tcp"}, -{"mgcs-mfp-port", {NULL}, 6509, "udp"}, -{"mcer-port", {NULL}, 6510, "tcp"}, -{"mcer-port", {NULL}, 6510, "udp"}, -{"netconf-tls", {NULL}, 6513, "tcp"}, -{"syslog-tls", {NULL}, 6514, "tcp"}, -{"syslog-tls", {NULL}, 6514, "udp"}, -{"syslog-tls", {NULL}, 6514, "dccp"}, -{"elipse-rec", {NULL}, 6515, "tcp"}, -{"elipse-rec", {NULL}, 6515, "udp"}, -{"lds-distrib", {NULL}, 6543, "tcp"}, -{"lds-distrib", {NULL}, 6543, "udp"}, -{"lds-dump", {NULL}, 6544, "tcp"}, -{"lds-dump", {NULL}, 6544, "udp"}, -{"apc-6547", {NULL}, 6547, "tcp"}, -{"apc-6547", {NULL}, 6547, "udp"}, -{"apc-6548", {NULL}, 6548, "tcp"}, -{"apc-6548", {NULL}, 6548, "udp"}, -{"apc-6549", {NULL}, 6549, "tcp"}, -{"apc-6549", {NULL}, 6549, "udp"}, -{"fg-sysupdate", {NULL}, 6550, "tcp"}, -{"fg-sysupdate", {NULL}, 6550, "udp"}, -{"sum", {NULL}, 6551, "tcp"}, -{"sum", {NULL}, 6551, "udp"}, -{"xdsxdm", {NULL}, 6558, "tcp"}, -{"xdsxdm", {NULL}, 6558, "udp"}, -{"sane-port", {NULL}, 6566, "tcp"}, -{"sane-port", {NULL}, 6566, "udp"}, -{"esp", {NULL}, 6567, "tcp"}, -{"esp", {NULL}, 6567, "udp"}, -{"canit_store", {NULL}, 6568, "tcp"}, -{"rp-reputation", {NULL}, 6568, "udp"}, -{"affiliate", {NULL}, 6579, "tcp"}, -{"affiliate", {NULL}, 6579, "udp"}, -{"parsec-master", {NULL}, 6580, "tcp"}, -{"parsec-master", {NULL}, 6580, "udp"}, -{"parsec-peer", {NULL}, 6581, "tcp"}, -{"parsec-peer", {NULL}, 6581, "udp"}, -{"parsec-game", {NULL}, 6582, "tcp"}, -{"parsec-game", {NULL}, 6582, "udp"}, -{"joaJewelSuite", {NULL}, 6583, "tcp"}, -{"joaJewelSuite", {NULL}, 6583, "udp"}, -{"mshvlm", {NULL}, 6600, "tcp"}, -{"mstmg-sstp", {NULL}, 6601, "tcp"}, -{"wsscomfrmwk", {NULL}, 6602, "tcp"}, -{"odette-ftps", {NULL}, 6619, "tcp"}, -{"odette-ftps", {NULL}, 6619, "udp"}, -{"kftp-data", {NULL}, 6620, "tcp"}, -{"kftp-data", {NULL}, 6620, "udp"}, -{"kftp", {NULL}, 6621, "tcp"}, -{"kftp", {NULL}, 6621, "udp"}, -{"mcftp", {NULL}, 6622, "tcp"}, -{"mcftp", {NULL}, 6622, "udp"}, -{"ktelnet", {NULL}, 6623, "tcp"}, -{"ktelnet", {NULL}, 6623, "udp"}, -{"datascaler-db", {NULL}, 6624, "tcp"}, -{"datascaler-ctl", {NULL}, 6625, "tcp"}, -{"wago-service", {NULL}, 6626, "tcp"}, -{"wago-service", {NULL}, 6626, "udp"}, -{"nexgen", {NULL}, 6627, "tcp"}, -{"nexgen", {NULL}, 6627, "udp"}, -{"afesc-mc", {NULL}, 6628, "tcp"}, -{"afesc-mc", {NULL}, 6628, "udp"}, -{"mxodbc-connect", {NULL}, 6632, "tcp"}, -{"pcs-sf-ui-man", {NULL}, 6655, "tcp"}, -{"emgmsg", {NULL}, 6656, "tcp"}, -{"palcom-disc", {NULL}, 6657, "udp"}, -{"vocaltec-gold", {NULL}, 6670, "tcp"}, -{"vocaltec-gold", {NULL}, 6670, "udp"}, -{"p4p-portal", {NULL}, 6671, "tcp"}, -{"p4p-portal", {NULL}, 6671, "udp"}, -{"vision_server", {NULL}, 6672, "tcp"}, -{"vision_server", {NULL}, 6672, "udp"}, -{"vision_elmd", {NULL}, 6673, "tcp"}, -{"vision_elmd", {NULL}, 6673, "udp"}, -{"vfbp", {NULL}, 6678, "tcp"}, -{"vfbp-disc", {NULL}, 6678, "udp"}, -{"osaut", {NULL}, 6679, "tcp"}, -{"osaut", {NULL}, 6679, "udp"}, -{"clever-ctrace", {NULL}, 6687, "tcp"}, -{"clever-tcpip", {NULL}, 6688, "tcp"}, -{"tsa", {NULL}, 6689, "tcp"}, -{"tsa", {NULL}, 6689, "udp"}, -{"babel", {NULL}, 6697, "udp"}, -{"kti-icad-srvr", {NULL}, 6701, "tcp"}, -{"kti-icad-srvr", {NULL}, 6701, "udp"}, -{"e-design-net", {NULL}, 6702, "tcp"}, -{"e-design-net", {NULL}, 6702, "udp"}, -{"e-design-web", {NULL}, 6703, "tcp"}, -{"e-design-web", {NULL}, 6703, "udp"}, -{"frc-hp", {NULL}, 6704, "sctp"}, -{"frc-mp", {NULL}, 6705, "sctp"}, -{"frc-lp", {NULL}, 6706, "sctp"}, -{"ibprotocol", {NULL}, 6714, "tcp"}, -{"ibprotocol", {NULL}, 6714, "udp"}, -{"fibotrader-com", {NULL}, 6715, "tcp"}, -{"fibotrader-com", {NULL}, 6715, "udp"}, -{"bmc-perf-agent", {NULL}, 6767, "tcp"}, -{"bmc-perf-agent", {NULL}, 6767, "udp"}, -{"bmc-perf-mgrd", {NULL}, 6768, "tcp"}, -{"bmc-perf-mgrd", {NULL}, 6768, "udp"}, -{"adi-gxp-srvprt", {NULL}, 6769, "tcp"}, -{"adi-gxp-srvprt", {NULL}, 6769, "udp"}, -{"plysrv-http", {NULL}, 6770, "tcp"}, -{"plysrv-http", {NULL}, 6770, "udp"}, -{"plysrv-https", {NULL}, 6771, "tcp"}, -{"plysrv-https", {NULL}, 6771, "udp"}, -{"dgpf-exchg", {NULL}, 6785, "tcp"}, -{"dgpf-exchg", {NULL}, 6785, "udp"}, -{"smc-jmx", {NULL}, 6786, "tcp"}, -{"smc-jmx", {NULL}, 6786, "udp"}, -{"smc-admin", {NULL}, 6787, "tcp"}, -{"smc-admin", {NULL}, 6787, "udp"}, -{"smc-http", {NULL}, 6788, "tcp"}, -{"smc-http", {NULL}, 6788, "udp"}, -{"smc-https", {NULL}, 6789, "tcp"}, -{"smc-https", {NULL}, 6789, "udp"}, -{"hnmp", {NULL}, 6790, "tcp"}, -{"hnmp", {NULL}, 6790, "udp"}, -{"hnm", {NULL}, 6791, "tcp"}, -{"hnm", {NULL}, 6791, "udp"}, -{"acnet", {NULL}, 6801, "tcp"}, -{"acnet", {NULL}, 6801, "udp"}, -{"pentbox-sim", {NULL}, 6817, "tcp"}, -{"ambit-lm", {NULL}, 6831, "tcp"}, -{"ambit-lm", {NULL}, 6831, "udp"}, -{"netmo-default", {NULL}, 6841, "tcp"}, -{"netmo-default", {NULL}, 6841, "udp"}, -{"netmo-http", {NULL}, 6842, "tcp"}, -{"netmo-http", {NULL}, 6842, "udp"}, -{"iccrushmore", {NULL}, 6850, "tcp"}, -{"iccrushmore", {NULL}, 6850, "udp"}, -{"acctopus-cc", {NULL}, 6868, "tcp"}, -{"acctopus-st", {NULL}, 6868, "udp"}, -{"muse", {NULL}, 6888, "tcp"}, -{"muse", {NULL}, 6888, "udp"}, -{"jetstream", {NULL}, 6901, "tcp"}, -{"xsmsvc", {NULL}, 6936, "tcp"}, -{"xsmsvc", {NULL}, 6936, "udp"}, -{"bioserver", {NULL}, 6946, "tcp"}, -{"bioserver", {NULL}, 6946, "udp"}, -{"otlp", {NULL}, 6951, "tcp"}, -{"otlp", {NULL}, 6951, "udp"}, -{"jmact3", {NULL}, 6961, "tcp"}, -{"jmact3", {NULL}, 6961, "udp"}, -{"jmevt2", {NULL}, 6962, "tcp"}, -{"jmevt2", {NULL}, 6962, "udp"}, -{"swismgr1", {NULL}, 6963, "tcp"}, -{"swismgr1", {NULL}, 6963, "udp"}, -{"swismgr2", {NULL}, 6964, "tcp"}, -{"swismgr2", {NULL}, 6964, "udp"}, -{"swistrap", {NULL}, 6965, "tcp"}, -{"swistrap", {NULL}, 6965, "udp"}, -{"swispol", {NULL}, 6966, "tcp"}, -{"swispol", {NULL}, 6966, "udp"}, -{"acmsoda", {NULL}, 6969, "tcp"}, -{"acmsoda", {NULL}, 6969, "udp"}, -{"MobilitySrv", {NULL}, 6997, "tcp"}, -{"MobilitySrv", {NULL}, 6997, "udp"}, -{"iatp-highpri", {NULL}, 6998, "tcp"}, -{"iatp-highpri", {NULL}, 6998, "udp"}, -{"iatp-normalpri", {NULL}, 6999, "tcp"}, -{"iatp-normalpri", {NULL}, 6999, "udp"}, -{"afs3-fileserver", {NULL}, 7000, "tcp"}, -{"afs3-fileserver", {NULL}, 7000, "udp"}, -{"afs3-callback", {NULL}, 7001, "tcp"}, -{"afs3-callback", {NULL}, 7001, "udp"}, -{"afs3-prserver", {NULL}, 7002, "tcp"}, -{"afs3-prserver", {NULL}, 7002, "udp"}, -{"afs3-vlserver", {NULL}, 7003, "tcp"}, -{"afs3-vlserver", {NULL}, 7003, "udp"}, -{"afs3-kaserver", {NULL}, 7004, "tcp"}, -{"afs3-kaserver", {NULL}, 7004, "udp"}, -{"afs3-volser", {NULL}, 7005, "tcp"}, -{"afs3-volser", {NULL}, 7005, "udp"}, -{"afs3-errors", {NULL}, 7006, "tcp"}, -{"afs3-errors", {NULL}, 7006, "udp"}, -{"afs3-bos", {NULL}, 7007, "tcp"}, -{"afs3-bos", {NULL}, 7007, "udp"}, -{"afs3-update", {NULL}, 7008, "tcp"}, -{"afs3-update", {NULL}, 7008, "udp"}, -{"afs3-rmtsys", {NULL}, 7009, "tcp"}, -{"afs3-rmtsys", {NULL}, 7009, "udp"}, -{"ups-onlinet", {NULL}, 7010, "tcp"}, -{"ups-onlinet", {NULL}, 7010, "udp"}, -{"talon-disc", {NULL}, 7011, "tcp"}, -{"talon-disc", {NULL}, 7011, "udp"}, -{"talon-engine", {NULL}, 7012, "tcp"}, -{"talon-engine", {NULL}, 7012, "udp"}, -{"microtalon-dis", {NULL}, 7013, "tcp"}, -{"microtalon-dis", {NULL}, 7013, "udp"}, -{"microtalon-com", {NULL}, 7014, "tcp"}, -{"microtalon-com", {NULL}, 7014, "udp"}, -{"talon-webserver", {NULL}, 7015, "tcp"}, -{"talon-webserver", {NULL}, 7015, "udp"}, -{"dpserve", {NULL}, 7020, "tcp"}, -{"dpserve", {NULL}, 7020, "udp"}, -{"dpserveadmin", {NULL}, 7021, "tcp"}, -{"dpserveadmin", {NULL}, 7021, "udp"}, -{"ctdp", {NULL}, 7022, "tcp"}, -{"ctdp", {NULL}, 7022, "udp"}, -{"ct2nmcs", {NULL}, 7023, "tcp"}, -{"ct2nmcs", {NULL}, 7023, "udp"}, -{"vmsvc", {NULL}, 7024, "tcp"}, -{"vmsvc", {NULL}, 7024, "udp"}, -{"vmsvc-2", {NULL}, 7025, "tcp"}, -{"vmsvc-2", {NULL}, 7025, "udp"}, -{"op-probe", {NULL}, 7030, "tcp"}, -{"op-probe", {NULL}, 7030, "udp"}, -{"arcp", {NULL}, 7070, "tcp"}, -{"arcp", {NULL}, 7070, "udp"}, -{"iwg1", {NULL}, 7071, "tcp"}, -{"iwg1", {NULL}, 7071, "udp"}, -{"empowerid", {NULL}, 7080, "tcp"}, -{"empowerid", {NULL}, 7080, "udp"}, -{"lazy-ptop", {NULL}, 7099, "tcp"}, -{"lazy-ptop", {NULL}, 7099, "udp"}, -{"font-service", {NULL}, 7100, "tcp"}, -{"font-service", {NULL}, 7100, "udp"}, -{"elcn", {NULL}, 7101, "tcp"}, -{"elcn", {NULL}, 7101, "udp"}, -{"aes-x170", {NULL}, 7107, "udp"}, -{"virprot-lm", {NULL}, 7121, "tcp"}, -{"virprot-lm", {NULL}, 7121, "udp"}, -{"scenidm", {NULL}, 7128, "tcp"}, -{"scenidm", {NULL}, 7128, "udp"}, -{"scenccs", {NULL}, 7129, "tcp"}, -{"scenccs", {NULL}, 7129, "udp"}, -{"cabsm-comm", {NULL}, 7161, "tcp"}, -{"cabsm-comm", {NULL}, 7161, "udp"}, -{"caistoragemgr", {NULL}, 7162, "tcp"}, -{"caistoragemgr", {NULL}, 7162, "udp"}, -{"cacsambroker", {NULL}, 7163, "tcp"}, -{"cacsambroker", {NULL}, 7163, "udp"}, -{"fsr", {NULL}, 7164, "tcp"}, -{"fsr", {NULL}, 7164, "udp"}, -{"doc-server", {NULL}, 7165, "tcp"}, -{"doc-server", {NULL}, 7165, "udp"}, -{"aruba-server", {NULL}, 7166, "tcp"}, -{"aruba-server", {NULL}, 7166, "udp"}, -{"casrmagent", {NULL}, 7167, "tcp"}, -{"cnckadserver", {NULL}, 7168, "tcp"}, -{"ccag-pib", {NULL}, 7169, "tcp"}, -{"ccag-pib", {NULL}, 7169, "udp"}, -{"nsrp", {NULL}, 7170, "tcp"}, -{"nsrp", {NULL}, 7170, "udp"}, -{"drm-production", {NULL}, 7171, "tcp"}, -{"drm-production", {NULL}, 7171, "udp"}, -{"zsecure", {NULL}, 7173, "tcp"}, -{"clutild", {NULL}, 7174, "tcp"}, -{"clutild", {NULL}, 7174, "udp"}, -{"fodms", {NULL}, 7200, "tcp"}, -{"fodms", {NULL}, 7200, "udp"}, -{"dlip", {NULL}, 7201, "tcp"}, -{"dlip", {NULL}, 7201, "udp"}, -{"ramp", {NULL}, 7227, "tcp"}, -{"ramp", {NULL}, 7227, "udp"}, -{"citrixupp", {NULL}, 7228, "tcp"}, -{"citrixuppg", {NULL}, 7229, "tcp"}, -{"pads", {NULL}, 7237, "tcp"}, -{"cnap", {NULL}, 7262, "tcp"}, -{"cnap", {NULL}, 7262, "udp"}, -{"watchme-7272", {NULL}, 7272, "tcp"}, -{"watchme-7272", {NULL}, 7272, "udp"}, -{"oma-rlp", {NULL}, 7273, "tcp"}, -{"oma-rlp", {NULL}, 7273, "udp"}, -{"oma-rlp-s", {NULL}, 7274, "tcp"}, -{"oma-rlp-s", {NULL}, 7274, "udp"}, -{"oma-ulp", {NULL}, 7275, "tcp"}, -{"oma-ulp", {NULL}, 7275, "udp"}, -{"oma-ilp", {NULL}, 7276, "tcp"}, -{"oma-ilp", {NULL}, 7276, "udp"}, -{"oma-ilp-s", {NULL}, 7277, "tcp"}, -{"oma-ilp-s", {NULL}, 7277, "udp"}, -{"oma-dcdocbs", {NULL}, 7278, "tcp"}, -{"oma-dcdocbs", {NULL}, 7278, "udp"}, -{"ctxlic", {NULL}, 7279, "tcp"}, -{"ctxlic", {NULL}, 7279, "udp"}, -{"itactionserver1", {NULL}, 7280, "tcp"}, -{"itactionserver1", {NULL}, 7280, "udp"}, -{"itactionserver2", {NULL}, 7281, "tcp"}, -{"itactionserver2", {NULL}, 7281, "udp"}, -{"mzca-action", {NULL}, 7282, "tcp"}, -{"mzca-alert", {NULL}, 7282, "udp"}, -{"lcm-server", {NULL}, 7365, "tcp"}, -{"lcm-server", {NULL}, 7365, "udp"}, -{"mindfilesys", {NULL}, 7391, "tcp"}, -{"mindfilesys", {NULL}, 7391, "udp"}, -{"mrssrendezvous", {NULL}, 7392, "tcp"}, -{"mrssrendezvous", {NULL}, 7392, "udp"}, -{"nfoldman", {NULL}, 7393, "tcp"}, -{"nfoldman", {NULL}, 7393, "udp"}, -{"fse", {NULL}, 7394, "tcp"}, -{"fse", {NULL}, 7394, "udp"}, -{"winqedit", {NULL}, 7395, "tcp"}, -{"winqedit", {NULL}, 7395, "udp"}, -{"hexarc", {NULL}, 7397, "tcp"}, -{"hexarc", {NULL}, 7397, "udp"}, -{"rtps-discovery", {NULL}, 7400, "tcp"}, -{"rtps-discovery", {NULL}, 7400, "udp"}, -{"rtps-dd-ut", {NULL}, 7401, "tcp"}, -{"rtps-dd-ut", {NULL}, 7401, "udp"}, -{"rtps-dd-mt", {NULL}, 7402, "tcp"}, -{"rtps-dd-mt", {NULL}, 7402, "udp"}, -{"ionixnetmon", {NULL}, 7410, "tcp"}, -{"ionixnetmon", {NULL}, 7410, "udp"}, -{"mtportmon", {NULL}, 7421, "tcp"}, -{"mtportmon", {NULL}, 7421, "udp"}, -{"pmdmgr", {NULL}, 7426, "tcp"}, -{"pmdmgr", {NULL}, 7426, "udp"}, -{"oveadmgr", {NULL}, 7427, "tcp"}, -{"oveadmgr", {NULL}, 7427, "udp"}, -{"ovladmgr", {NULL}, 7428, "tcp"}, -{"ovladmgr", {NULL}, 7428, "udp"}, -{"opi-sock", {NULL}, 7429, "tcp"}, -{"opi-sock", {NULL}, 7429, "udp"}, -{"xmpv7", {NULL}, 7430, "tcp"}, -{"xmpv7", {NULL}, 7430, "udp"}, -{"pmd", {NULL}, 7431, "tcp"}, -{"pmd", {NULL}, 7431, "udp"}, -{"faximum", {NULL}, 7437, "tcp"}, -{"faximum", {NULL}, 7437, "udp"}, -{"oracleas-https", {NULL}, 7443, "tcp"}, -{"oracleas-https", {NULL}, 7443, "udp"}, -{"rise", {NULL}, 7473, "tcp"}, -{"rise", {NULL}, 7473, "udp"}, -{"telops-lmd", {NULL}, 7491, "tcp"}, -{"telops-lmd", {NULL}, 7491, "udp"}, -{"silhouette", {NULL}, 7500, "tcp"}, -{"silhouette", {NULL}, 7500, "udp"}, -{"ovbus", {NULL}, 7501, "tcp"}, -{"ovbus", {NULL}, 7501, "udp"}, -{"acplt", {NULL}, 7509, "tcp"}, -{"ovhpas", {NULL}, 7510, "tcp"}, -{"ovhpas", {NULL}, 7510, "udp"}, -{"pafec-lm", {NULL}, 7511, "tcp"}, -{"pafec-lm", {NULL}, 7511, "udp"}, -{"saratoga", {NULL}, 7542, "tcp"}, -{"saratoga", {NULL}, 7542, "udp"}, -{"atul", {NULL}, 7543, "tcp"}, -{"atul", {NULL}, 7543, "udp"}, -{"nta-ds", {NULL}, 7544, "tcp"}, -{"nta-ds", {NULL}, 7544, "udp"}, -{"nta-us", {NULL}, 7545, "tcp"}, -{"nta-us", {NULL}, 7545, "udp"}, -{"cfs", {NULL}, 7546, "tcp"}, -{"cfs", {NULL}, 7546, "udp"}, -{"cwmp", {NULL}, 7547, "tcp"}, -{"cwmp", {NULL}, 7547, "udp"}, -{"tidp", {NULL}, 7548, "tcp"}, -{"tidp", {NULL}, 7548, "udp"}, -{"nls-tl", {NULL}, 7549, "tcp"}, -{"nls-tl", {NULL}, 7549, "udp"}, -{"sncp", {NULL}, 7560, "tcp"}, -{"sncp", {NULL}, 7560, "udp"}, -{"cfw", {NULL}, 7563, "tcp"}, -{"vsi-omega", {NULL}, 7566, "tcp"}, -{"vsi-omega", {NULL}, 7566, "udp"}, -{"dell-eql-asm", {NULL}, 7569, "tcp"}, -{"aries-kfinder", {NULL}, 7570, "tcp"}, -{"aries-kfinder", {NULL}, 7570, "udp"}, -{"sun-lm", {NULL}, 7588, "tcp"}, -{"sun-lm", {NULL}, 7588, "udp"}, -{"indi", {NULL}, 7624, "tcp"}, -{"indi", {NULL}, 7624, "udp"}, -{"simco", {NULL}, 7626, "tcp"}, -{"simco", {NULL}, 7626, "sctp"}, -{"soap-http", {NULL}, 7627, "tcp"}, -{"soap-http", {NULL}, 7627, "udp"}, -{"zen-pawn", {NULL}, 7628, "tcp"}, -{"zen-pawn", {NULL}, 7628, "udp"}, -{"xdas", {NULL}, 7629, "tcp"}, -{"xdas", {NULL}, 7629, "udp"}, -{"hawk", {NULL}, 7630, "tcp"}, -{"tesla-sys-msg", {NULL}, 7631, "tcp"}, -{"pmdfmgt", {NULL}, 7633, "tcp"}, -{"pmdfmgt", {NULL}, 7633, "udp"}, -{"cuseeme", {NULL}, 7648, "tcp"}, -{"cuseeme", {NULL}, 7648, "udp"}, -{"imqstomp", {NULL}, 7672, "tcp"}, -{"imqstomps", {NULL}, 7673, "tcp"}, -{"imqtunnels", {NULL}, 7674, "tcp"}, -{"imqtunnels", {NULL}, 7674, "udp"}, -{"imqtunnel", {NULL}, 7675, "tcp"}, -{"imqtunnel", {NULL}, 7675, "udp"}, -{"imqbrokerd", {NULL}, 7676, "tcp"}, -{"imqbrokerd", {NULL}, 7676, "udp"}, -{"sun-user-https", {NULL}, 7677, "tcp"}, -{"sun-user-https", {NULL}, 7677, "udp"}, -{"pando-pub", {NULL}, 7680, "tcp"}, -{"pando-pub", {NULL}, 7680, "udp"}, -{"collaber", {NULL}, 7689, "tcp"}, -{"collaber", {NULL}, 7689, "udp"}, -{"klio", {NULL}, 7697, "tcp"}, -{"klio", {NULL}, 7697, "udp"}, -{"em7-secom", {NULL}, 7700, "tcp"}, -{"sync-em7", {NULL}, 7707, "tcp"}, -{"sync-em7", {NULL}, 7707, "udp"}, -{"scinet", {NULL}, 7708, "tcp"}, -{"scinet", {NULL}, 7708, "udp"}, -{"medimageportal", {NULL}, 7720, "tcp"}, -{"medimageportal", {NULL}, 7720, "udp"}, -{"nsdeepfreezectl", {NULL}, 7724, "tcp"}, -{"nsdeepfreezectl", {NULL}, 7724, "udp"}, -{"nitrogen", {NULL}, 7725, "tcp"}, -{"nitrogen", {NULL}, 7725, "udp"}, -{"freezexservice", {NULL}, 7726, "tcp"}, -{"freezexservice", {NULL}, 7726, "udp"}, -{"trident-data", {NULL}, 7727, "tcp"}, -{"trident-data", {NULL}, 7727, "udp"}, -{"smip", {NULL}, 7734, "tcp"}, -{"smip", {NULL}, 7734, "udp"}, -{"aiagent", {NULL}, 7738, "tcp"}, -{"aiagent", {NULL}, 7738, "udp"}, -{"scriptview", {NULL}, 7741, "tcp"}, -{"scriptview", {NULL}, 7741, "udp"}, -{"msss", {NULL}, 7742, "tcp"}, -{"sstp-1", {NULL}, 7743, "tcp"}, -{"sstp-1", {NULL}, 7743, "udp"}, -{"raqmon-pdu", {NULL}, 7744, "tcp"}, -{"raqmon-pdu", {NULL}, 7744, "udp"}, -{"prgp", {NULL}, 7747, "tcp"}, -{"prgp", {NULL}, 7747, "udp"}, -{"cbt", {NULL}, 7777, "tcp"}, -{"cbt", {NULL}, 7777, "udp"}, -{"interwise", {NULL}, 7778, "tcp"}, -{"interwise", {NULL}, 7778, "udp"}, -{"vstat", {NULL}, 7779, "tcp"}, -{"vstat", {NULL}, 7779, "udp"}, -{"accu-lmgr", {NULL}, 7781, "tcp"}, -{"accu-lmgr", {NULL}, 7781, "udp"}, -{"minivend", {NULL}, 7786, "tcp"}, -{"minivend", {NULL}, 7786, "udp"}, -{"popup-reminders", {NULL}, 7787, "tcp"}, -{"popup-reminders", {NULL}, 7787, "udp"}, -{"office-tools", {NULL}, 7789, "tcp"}, -{"office-tools", {NULL}, 7789, "udp"}, -{"q3ade", {NULL}, 7794, "tcp"}, -{"q3ade", {NULL}, 7794, "udp"}, -{"pnet-conn", {NULL}, 7797, "tcp"}, -{"pnet-conn", {NULL}, 7797, "udp"}, -{"pnet-enc", {NULL}, 7798, "tcp"}, -{"pnet-enc", {NULL}, 7798, "udp"}, -{"altbsdp", {NULL}, 7799, "tcp"}, -{"altbsdp", {NULL}, 7799, "udp"}, -{"asr", {NULL}, 7800, "tcp"}, -{"asr", {NULL}, 7800, "udp"}, -{"ssp-client", {NULL}, 7801, "tcp"}, -{"ssp-client", {NULL}, 7801, "udp"}, -{"rbt-wanopt", {NULL}, 7810, "tcp"}, -{"rbt-wanopt", {NULL}, 7810, "udp"}, -{"apc-7845", {NULL}, 7845, "tcp"}, -{"apc-7845", {NULL}, 7845, "udp"}, -{"apc-7846", {NULL}, 7846, "tcp"}, -{"apc-7846", {NULL}, 7846, "udp"}, -{"mobileanalyzer", {NULL}, 7869, "tcp"}, -{"rbt-smc", {NULL}, 7870, "tcp"}, -{"pss", {NULL}, 7880, "tcp"}, -{"pss", {NULL}, 7880, "udp"}, -{"ubroker", {NULL}, 7887, "tcp"}, -{"ubroker", {NULL}, 7887, "udp"}, -{"mevent", {NULL}, 7900, "tcp"}, -{"mevent", {NULL}, 7900, "udp"}, -{"tnos-sp", {NULL}, 7901, "tcp"}, -{"tnos-sp", {NULL}, 7901, "udp"}, -{"tnos-dp", {NULL}, 7902, "tcp"}, -{"tnos-dp", {NULL}, 7902, "udp"}, -{"tnos-dps", {NULL}, 7903, "tcp"}, -{"tnos-dps", {NULL}, 7903, "udp"}, -{"qo-secure", {NULL}, 7913, "tcp"}, -{"qo-secure", {NULL}, 7913, "udp"}, -{"t2-drm", {NULL}, 7932, "tcp"}, -{"t2-drm", {NULL}, 7932, "udp"}, -{"t2-brm", {NULL}, 7933, "tcp"}, -{"t2-brm", {NULL}, 7933, "udp"}, -{"supercell", {NULL}, 7967, "tcp"}, -{"supercell", {NULL}, 7967, "udp"}, -{"micromuse-ncps", {NULL}, 7979, "tcp"}, -{"micromuse-ncps", {NULL}, 7979, "udp"}, -{"quest-vista", {NULL}, 7980, "tcp"}, -{"quest-vista", {NULL}, 7980, "udp"}, -{"sossd-collect", {NULL}, 7981, "tcp"}, -{"sossd-agent", {NULL}, 7982, "tcp"}, -{"sossd-disc", {NULL}, 7982, "udp"}, -{"pushns", {NULL}, 7997, "tcp"}, -{"usicontentpush", {NULL}, 7998, "udp"}, -{"irdmi2", {NULL}, 7999, "tcp"}, -{"irdmi2", {NULL}, 7999, "udp"}, -{"irdmi", {NULL}, 8000, "tcp"}, -{"irdmi", {NULL}, 8000, "udp"}, -{"vcom-tunnel", {NULL}, 8001, "tcp"}, -{"vcom-tunnel", {NULL}, 8001, "udp"}, -{"teradataordbms", {NULL}, 8002, "tcp"}, -{"teradataordbms", {NULL}, 8002, "udp"}, -{"mcreport", {NULL}, 8003, "tcp"}, -{"mcreport", {NULL}, 8003, "udp"}, -{"mxi", {NULL}, 8005, "tcp"}, -{"mxi", {NULL}, 8005, "udp"}, -{"http-alt", {NULL}, 8008, "tcp"}, -{"http-alt", {NULL}, 8008, "udp"}, -{"qbdb", {NULL}, 8019, "tcp"}, -{"qbdb", {NULL}, 8019, "udp"}, -{"intu-ec-svcdisc", {NULL}, 8020, "tcp"}, -{"intu-ec-svcdisc", {NULL}, 8020, "udp"}, -{"intu-ec-client", {NULL}, 8021, "tcp"}, -{"intu-ec-client", {NULL}, 8021, "udp"}, -{"oa-system", {NULL}, 8022, "tcp"}, -{"oa-system", {NULL}, 8022, "udp"}, -{"ca-audit-da", {NULL}, 8025, "tcp"}, -{"ca-audit-da", {NULL}, 8025, "udp"}, -{"ca-audit-ds", {NULL}, 8026, "tcp"}, -{"ca-audit-ds", {NULL}, 8026, "udp"}, -{"pro-ed", {NULL}, 8032, "tcp"}, -{"pro-ed", {NULL}, 8032, "udp"}, -{"mindprint", {NULL}, 8033, "tcp"}, -{"mindprint", {NULL}, 8033, "udp"}, -{"vantronix-mgmt", {NULL}, 8034, "tcp"}, -{"vantronix-mgmt", {NULL}, 8034, "udp"}, -{"ampify", {NULL}, 8040, "tcp"}, -{"ampify", {NULL}, 8040, "udp"}, -{"fs-agent", {NULL}, 8042, "tcp"}, -{"fs-server", {NULL}, 8043, "tcp"}, -{"fs-mgmt", {NULL}, 8044, "tcp"}, -{"senomix01", {NULL}, 8052, "tcp"}, -{"senomix01", {NULL}, 8052, "udp"}, -{"senomix02", {NULL}, 8053, "tcp"}, -{"senomix02", {NULL}, 8053, "udp"}, -{"senomix03", {NULL}, 8054, "tcp"}, -{"senomix03", {NULL}, 8054, "udp"}, -{"senomix04", {NULL}, 8055, "tcp"}, -{"senomix04", {NULL}, 8055, "udp"}, -{"senomix05", {NULL}, 8056, "tcp"}, -{"senomix05", {NULL}, 8056, "udp"}, -{"senomix06", {NULL}, 8057, "tcp"}, -{"senomix06", {NULL}, 8057, "udp"}, -{"senomix07", {NULL}, 8058, "tcp"}, -{"senomix07", {NULL}, 8058, "udp"}, -{"senomix08", {NULL}, 8059, "tcp"}, -{"senomix08", {NULL}, 8059, "udp"}, -{"gadugadu", {NULL}, 8074, "tcp"}, -{"gadugadu", {NULL}, 8074, "udp"}, -{"http-alt", {NULL}, 8080, "tcp"}, -{"http-alt", {NULL}, 8080, "udp"}, -{"sunproxyadmin", {NULL}, 8081, "tcp"}, -{"sunproxyadmin", {NULL}, 8081, "udp"}, -{"us-cli", {NULL}, 8082, "tcp"}, -{"us-cli", {NULL}, 8082, "udp"}, -{"us-srv", {NULL}, 8083, "tcp"}, -{"us-srv", {NULL}, 8083, "udp"}, -{"d-s-n", {NULL}, 8086, "tcp"}, -{"d-s-n", {NULL}, 8086, "udp"}, -{"simplifymedia", {NULL}, 8087, "tcp"}, -{"simplifymedia", {NULL}, 8087, "udp"}, -{"radan-http", {NULL}, 8088, "tcp"}, -{"radan-http", {NULL}, 8088, "udp"}, -{"jamlink", {NULL}, 8091, "tcp"}, -{"sac", {NULL}, 8097, "tcp"}, -{"sac", {NULL}, 8097, "udp"}, -{"xprint-server", {NULL}, 8100, "tcp"}, -{"xprint-server", {NULL}, 8100, "udp"}, -{"ldoms-migr", {NULL}, 8101, "tcp"}, -{"mtl8000-matrix", {NULL}, 8115, "tcp"}, -{"mtl8000-matrix", {NULL}, 8115, "udp"}, -{"cp-cluster", {NULL}, 8116, "tcp"}, -{"cp-cluster", {NULL}, 8116, "udp"}, -{"privoxy", {NULL}, 8118, "tcp"}, -{"privoxy", {NULL}, 8118, "udp"}, -{"apollo-data", {NULL}, 8121, "tcp"}, -{"apollo-data", {NULL}, 8121, "udp"}, -{"apollo-admin", {NULL}, 8122, "tcp"}, -{"apollo-admin", {NULL}, 8122, "udp"}, -{"paycash-online", {NULL}, 8128, "tcp"}, -{"paycash-online", {NULL}, 8128, "udp"}, -{"paycash-wbp", {NULL}, 8129, "tcp"}, -{"paycash-wbp", {NULL}, 8129, "udp"}, -{"indigo-vrmi", {NULL}, 8130, "tcp"}, -{"indigo-vrmi", {NULL}, 8130, "udp"}, -{"indigo-vbcp", {NULL}, 8131, "tcp"}, -{"indigo-vbcp", {NULL}, 8131, "udp"}, -{"dbabble", {NULL}, 8132, "tcp"}, -{"dbabble", {NULL}, 8132, "udp"}, -{"isdd", {NULL}, 8148, "tcp"}, -{"isdd", {NULL}, 8148, "udp"}, -{"patrol", {NULL}, 8160, "tcp"}, -{"patrol", {NULL}, 8160, "udp"}, -{"patrol-snmp", {NULL}, 8161, "tcp"}, -{"patrol-snmp", {NULL}, 8161, "udp"}, -{"vmware-fdm", {NULL}, 8182, "tcp"}, -{"vmware-fdm", {NULL}, 8182, "udp"}, -{"proremote", {NULL}, 8183, "tcp"}, -{"itach", {NULL}, 8184, "tcp"}, -{"itach", {NULL}, 8184, "udp"}, -{"spytechphone", {NULL}, 8192, "tcp"}, -{"spytechphone", {NULL}, 8192, "udp"}, -{"blp1", {NULL}, 8194, "tcp"}, -{"blp1", {NULL}, 8194, "udp"}, -{"blp2", {NULL}, 8195, "tcp"}, -{"blp2", {NULL}, 8195, "udp"}, -{"vvr-data", {NULL}, 8199, "tcp"}, -{"vvr-data", {NULL}, 8199, "udp"}, -{"trivnet1", {NULL}, 8200, "tcp"}, -{"trivnet1", {NULL}, 8200, "udp"}, -{"trivnet2", {NULL}, 8201, "tcp"}, -{"trivnet2", {NULL}, 8201, "udp"}, -{"lm-perfworks", {NULL}, 8204, "tcp"}, -{"lm-perfworks", {NULL}, 8204, "udp"}, -{"lm-instmgr", {NULL}, 8205, "tcp"}, -{"lm-instmgr", {NULL}, 8205, "udp"}, -{"lm-dta", {NULL}, 8206, "tcp"}, -{"lm-dta", {NULL}, 8206, "udp"}, -{"lm-sserver", {NULL}, 8207, "tcp"}, -{"lm-sserver", {NULL}, 8207, "udp"}, -{"lm-webwatcher", {NULL}, 8208, "tcp"}, -{"lm-webwatcher", {NULL}, 8208, "udp"}, -{"rexecj", {NULL}, 8230, "tcp"}, -{"rexecj", {NULL}, 8230, "udp"}, -{"synapse-nhttps", {NULL}, 8243, "tcp"}, -{"synapse-nhttps", {NULL}, 8243, "udp"}, -{"pando-sec", {NULL}, 8276, "tcp"}, -{"pando-sec", {NULL}, 8276, "udp"}, -{"synapse-nhttp", {NULL}, 8280, "tcp"}, -{"synapse-nhttp", {NULL}, 8280, "udp"}, -{"blp3", {NULL}, 8292, "tcp"}, -{"blp3", {NULL}, 8292, "udp"}, -{"hiperscan-id", {NULL}, 8293, "tcp"}, -{"blp4", {NULL}, 8294, "tcp"}, -{"blp4", {NULL}, 8294, "udp"}, -{"tmi", {NULL}, 8300, "tcp"}, -{"tmi", {NULL}, 8300, "udp"}, -{"amberon", {NULL}, 8301, "tcp"}, -{"amberon", {NULL}, 8301, "udp"}, -{"tnp-discover", {NULL}, 8320, "tcp"}, -{"tnp-discover", {NULL}, 8320, "udp"}, -{"tnp", {NULL}, 8321, "tcp"}, -{"tnp", {NULL}, 8321, "udp"}, -{"server-find", {NULL}, 8351, "tcp"}, -{"server-find", {NULL}, 8351, "udp"}, -{"cruise-enum", {NULL}, 8376, "tcp"}, -{"cruise-enum", {NULL}, 8376, "udp"}, -{"cruise-swroute", {NULL}, 8377, "tcp"}, -{"cruise-swroute", {NULL}, 8377, "udp"}, -{"cruise-config", {NULL}, 8378, "tcp"}, -{"cruise-config", {NULL}, 8378, "udp"}, -{"cruise-diags", {NULL}, 8379, "tcp"}, -{"cruise-diags", {NULL}, 8379, "udp"}, -{"cruise-update", {NULL}, 8380, "tcp"}, -{"cruise-update", {NULL}, 8380, "udp"}, -{"m2mservices", {NULL}, 8383, "tcp"}, -{"m2mservices", {NULL}, 8383, "udp"}, -{"cvd", {NULL}, 8400, "tcp"}, -{"cvd", {NULL}, 8400, "udp"}, -{"sabarsd", {NULL}, 8401, "tcp"}, -{"sabarsd", {NULL}, 8401, "udp"}, -{"abarsd", {NULL}, 8402, "tcp"}, -{"abarsd", {NULL}, 8402, "udp"}, -{"admind", {NULL}, 8403, "tcp"}, -{"admind", {NULL}, 8403, "udp"}, -{"svcloud", {NULL}, 8404, "tcp"}, -{"svbackup", {NULL}, 8405, "tcp"}, -{"espeech", {NULL}, 8416, "tcp"}, -{"espeech", {NULL}, 8416, "udp"}, -{"espeech-rtp", {NULL}, 8417, "tcp"}, -{"espeech-rtp", {NULL}, 8417, "udp"}, -{"cybro-a-bus", {NULL}, 8442, "tcp"}, -{"cybro-a-bus", {NULL}, 8442, "udp"}, -{"pcsync-https", {NULL}, 8443, "tcp"}, -{"pcsync-https", {NULL}, 8443, "udp"}, -{"pcsync-http", {NULL}, 8444, "tcp"}, -{"pcsync-http", {NULL}, 8444, "udp"}, -{"npmp", {NULL}, 8450, "tcp"}, -{"npmp", {NULL}, 8450, "udp"}, -{"cisco-avp", {NULL}, 8470, "tcp"}, -{"pim-port", {NULL}, 8471, "tcp"}, -{"pim-port", {NULL}, 8471, "sctp"}, -{"otv", {NULL}, 8472, "tcp"}, -{"otv", {NULL}, 8472, "udp"}, -{"vp2p", {NULL}, 8473, "tcp"}, -{"vp2p", {NULL}, 8473, "udp"}, -{"noteshare", {NULL}, 8474, "tcp"}, -{"noteshare", {NULL}, 8474, "udp"}, -{"fmtp", {NULL}, 8500, "tcp"}, -{"fmtp", {NULL}, 8500, "udp"}, -{"rtsp-alt", {NULL}, 8554, "tcp"}, -{"rtsp-alt", {NULL}, 8554, "udp"}, -{"d-fence", {NULL}, 8555, "tcp"}, -{"d-fence", {NULL}, 8555, "udp"}, -{"oap-admin", {NULL}, 8567, "tcp"}, -{"oap-admin", {NULL}, 8567, "udp"}, -{"asterix", {NULL}, 8600, "tcp"}, -{"asterix", {NULL}, 8600, "udp"}, -{"canon-mfnp", {NULL}, 8610, "tcp"}, -{"canon-mfnp", {NULL}, 8610, "udp"}, -{"canon-bjnp1", {NULL}, 8611, "tcp"}, -{"canon-bjnp1", {NULL}, 8611, "udp"}, -{"canon-bjnp2", {NULL}, 8612, "tcp"}, -{"canon-bjnp2", {NULL}, 8612, "udp"}, -{"canon-bjnp3", {NULL}, 8613, "tcp"}, -{"canon-bjnp3", {NULL}, 8613, "udp"}, -{"canon-bjnp4", {NULL}, 8614, "tcp"}, -{"canon-bjnp4", {NULL}, 8614, "udp"}, -{"sun-as-jmxrmi", {NULL}, 8686, "tcp"}, -{"sun-as-jmxrmi", {NULL}, 8686, "udp"}, -{"vnyx", {NULL}, 8699, "tcp"}, -{"vnyx", {NULL}, 8699, "udp"}, -{"dtp-net", {NULL}, 8732, "udp"}, -{"ibus", {NULL}, 8733, "tcp"}, -{"ibus", {NULL}, 8733, "udp"}, -{"mc-appserver", {NULL}, 8763, "tcp"}, -{"mc-appserver", {NULL}, 8763, "udp"}, -{"openqueue", {NULL}, 8764, "tcp"}, -{"openqueue", {NULL}, 8764, "udp"}, -{"ultraseek-http", {NULL}, 8765, "tcp"}, -{"ultraseek-http", {NULL}, 8765, "udp"}, -{"dpap", {NULL}, 8770, "tcp"}, -{"dpap", {NULL}, 8770, "udp"}, -{"msgclnt", {NULL}, 8786, "tcp"}, -{"msgclnt", {NULL}, 8786, "udp"}, -{"msgsrvr", {NULL}, 8787, "tcp"}, -{"msgsrvr", {NULL}, 8787, "udp"}, -{"sunwebadmin", {NULL}, 8800, "tcp"}, -{"sunwebadmin", {NULL}, 8800, "udp"}, -{"truecm", {NULL}, 8804, "tcp"}, -{"truecm", {NULL}, 8804, "udp"}, -{"dxspider", {NULL}, 8873, "tcp"}, -{"dxspider", {NULL}, 8873, "udp"}, -{"cddbp-alt", {NULL}, 8880, "tcp"}, -{"cddbp-alt", {NULL}, 8880, "udp"}, -{"secure-mqtt", {NULL}, 8883, "tcp"}, -{"secure-mqtt", {NULL}, 8883, "udp"}, -{"ddi-tcp-1", {NULL}, 8888, "tcp"}, -{"ddi-udp-1", {NULL}, 8888, "udp"}, -{"ddi-tcp-2", {NULL}, 8889, "tcp"}, -{"ddi-udp-2", {NULL}, 8889, "udp"}, -{"ddi-tcp-3", {NULL}, 8890, "tcp"}, -{"ddi-udp-3", {NULL}, 8890, "udp"}, -{"ddi-tcp-4", {NULL}, 8891, "tcp"}, -{"ddi-udp-4", {NULL}, 8891, "udp"}, -{"ddi-tcp-5", {NULL}, 8892, "tcp"}, -{"ddi-udp-5", {NULL}, 8892, "udp"}, -{"ddi-tcp-6", {NULL}, 8893, "tcp"}, -{"ddi-udp-6", {NULL}, 8893, "udp"}, -{"ddi-tcp-7", {NULL}, 8894, "tcp"}, -{"ddi-udp-7", {NULL}, 8894, "udp"}, -{"ospf-lite", {NULL}, 8899, "tcp"}, -{"ospf-lite", {NULL}, 8899, "udp"}, -{"jmb-cds1", {NULL}, 8900, "tcp"}, -{"jmb-cds1", {NULL}, 8900, "udp"}, -{"jmb-cds2", {NULL}, 8901, "tcp"}, -{"jmb-cds2", {NULL}, 8901, "udp"}, -{"manyone-http", {NULL}, 8910, "tcp"}, -{"manyone-http", {NULL}, 8910, "udp"}, -{"manyone-xml", {NULL}, 8911, "tcp"}, -{"manyone-xml", {NULL}, 8911, "udp"}, -{"wcbackup", {NULL}, 8912, "tcp"}, -{"wcbackup", {NULL}, 8912, "udp"}, -{"dragonfly", {NULL}, 8913, "tcp"}, -{"dragonfly", {NULL}, 8913, "udp"}, -{"twds", {NULL}, 8937, "tcp"}, -{"cumulus-admin", {NULL}, 8954, "tcp"}, -{"cumulus-admin", {NULL}, 8954, "udp"}, -{"sunwebadmins", {NULL}, 8989, "tcp"}, -{"sunwebadmins", {NULL}, 8989, "udp"}, -{"http-wmap", {NULL}, 8990, "tcp"}, -{"http-wmap", {NULL}, 8990, "udp"}, -{"https-wmap", {NULL}, 8991, "tcp"}, -{"https-wmap", {NULL}, 8991, "udp"}, -{"bctp", {NULL}, 8999, "tcp"}, -{"bctp", {NULL}, 8999, "udp"}, -{"cslistener", {NULL}, 9000, "tcp"}, -{"cslistener", {NULL}, 9000, "udp"}, -{"etlservicemgr", {NULL}, 9001, "tcp"}, -{"etlservicemgr", {NULL}, 9001, "udp"}, -{"dynamid", {NULL}, 9002, "tcp"}, -{"dynamid", {NULL}, 9002, "udp"}, -{"ogs-client", {NULL}, 9007, "udp"}, -{"ogs-server", {NULL}, 9008, "tcp"}, -{"pichat", {NULL}, 9009, "tcp"}, -{"pichat", {NULL}, 9009, "udp"}, -{"sdr", {NULL}, 9010, "tcp"}, -{"tambora", {NULL}, 9020, "tcp"}, -{"tambora", {NULL}, 9020, "udp"}, -{"panagolin-ident", {NULL}, 9021, "tcp"}, -{"panagolin-ident", {NULL}, 9021, "udp"}, -{"paragent", {NULL}, 9022, "tcp"}, -{"paragent", {NULL}, 9022, "udp"}, -{"swa-1", {NULL}, 9023, "tcp"}, -{"swa-1", {NULL}, 9023, "udp"}, -{"swa-2", {NULL}, 9024, "tcp"}, -{"swa-2", {NULL}, 9024, "udp"}, -{"swa-3", {NULL}, 9025, "tcp"}, -{"swa-3", {NULL}, 9025, "udp"}, -{"swa-4", {NULL}, 9026, "tcp"}, -{"swa-4", {NULL}, 9026, "udp"}, -{"versiera", {NULL}, 9050, "tcp"}, -{"fio-cmgmt", {NULL}, 9051, "tcp"}, -{"glrpc", {NULL}, 9080, "tcp"}, -{"glrpc", {NULL}, 9080, "udp"}, -{"lcs-ap", {NULL}, 9082, "sctp"}, -{"emc-pp-mgmtsvc", {NULL}, 9083, "tcp"}, -{"aurora", {NULL}, 9084, "tcp"}, -{"aurora", {NULL}, 9084, "udp"}, -{"aurora", {NULL}, 9084, "sctp"}, -{"ibm-rsyscon", {NULL}, 9085, "tcp"}, -{"ibm-rsyscon", {NULL}, 9085, "udp"}, -{"net2display", {NULL}, 9086, "tcp"}, -{"net2display", {NULL}, 9086, "udp"}, -{"classic", {NULL}, 9087, "tcp"}, -{"classic", {NULL}, 9087, "udp"}, -{"sqlexec", {NULL}, 9088, "tcp"}, -{"sqlexec", {NULL}, 9088, "udp"}, -{"sqlexec-ssl", {NULL}, 9089, "tcp"}, -{"sqlexec-ssl", {NULL}, 9089, "udp"}, -{"websm", {NULL}, 9090, "tcp"}, -{"websm", {NULL}, 9090, "udp"}, -{"xmltec-xmlmail", {NULL}, 9091, "tcp"}, -{"xmltec-xmlmail", {NULL}, 9091, "udp"}, -{"XmlIpcRegSvc", {NULL}, 9092, "tcp"}, -{"XmlIpcRegSvc", {NULL}, 9092, "udp"}, -{"hp-pdl-datastr", {NULL}, 9100, "tcp"}, -{"hp-pdl-datastr", {NULL}, 9100, "udp"}, -{"pdl-datastream", {NULL}, 9100, "tcp"}, -{"pdl-datastream", {NULL}, 9100, "udp"}, -{"bacula-dir", {NULL}, 9101, "tcp"}, -{"bacula-dir", {NULL}, 9101, "udp"}, -{"bacula-fd", {NULL}, 9102, "tcp"}, -{"bacula-fd", {NULL}, 9102, "udp"}, -{"bacula-sd", {NULL}, 9103, "tcp"}, -{"bacula-sd", {NULL}, 9103, "udp"}, -{"peerwire", {NULL}, 9104, "tcp"}, -{"peerwire", {NULL}, 9104, "udp"}, -{"xadmin", {NULL}, 9105, "tcp"}, -{"xadmin", {NULL}, 9105, "udp"}, -{"astergate", {NULL}, 9106, "tcp"}, -{"astergate-disc", {NULL}, 9106, "udp"}, -{"astergatefax", {NULL}, 9107, "tcp"}, -{"mxit", {NULL}, 9119, "tcp"}, -{"mxit", {NULL}, 9119, "udp"}, -{"dddp", {NULL}, 9131, "tcp"}, -{"dddp", {NULL}, 9131, "udp"}, -{"apani1", {NULL}, 9160, "tcp"}, -{"apani1", {NULL}, 9160, "udp"}, -{"apani2", {NULL}, 9161, "tcp"}, -{"apani2", {NULL}, 9161, "udp"}, -{"apani3", {NULL}, 9162, "tcp"}, -{"apani3", {NULL}, 9162, "udp"}, -{"apani4", {NULL}, 9163, "tcp"}, -{"apani4", {NULL}, 9163, "udp"}, -{"apani5", {NULL}, 9164, "tcp"}, -{"apani5", {NULL}, 9164, "udp"}, -{"sun-as-jpda", {NULL}, 9191, "tcp"}, -{"sun-as-jpda", {NULL}, 9191, "udp"}, -{"wap-wsp", {NULL}, 9200, "tcp"}, -{"wap-wsp", {NULL}, 9200, "udp"}, -{"wap-wsp-wtp", {NULL}, 9201, "tcp"}, -{"wap-wsp-wtp", {NULL}, 9201, "udp"}, -{"wap-wsp-s", {NULL}, 9202, "tcp"}, -{"wap-wsp-s", {NULL}, 9202, "udp"}, -{"wap-wsp-wtp-s", {NULL}, 9203, "tcp"}, -{"wap-wsp-wtp-s", {NULL}, 9203, "udp"}, -{"wap-vcard", {NULL}, 9204, "tcp"}, -{"wap-vcard", {NULL}, 9204, "udp"}, -{"wap-vcal", {NULL}, 9205, "tcp"}, -{"wap-vcal", {NULL}, 9205, "udp"}, -{"wap-vcard-s", {NULL}, 9206, "tcp"}, -{"wap-vcard-s", {NULL}, 9206, "udp"}, -{"wap-vcal-s", {NULL}, 9207, "tcp"}, -{"wap-vcal-s", {NULL}, 9207, "udp"}, -{"rjcdb-vcards", {NULL}, 9208, "tcp"}, -{"rjcdb-vcards", {NULL}, 9208, "udp"}, -{"almobile-system", {NULL}, 9209, "tcp"}, -{"almobile-system", {NULL}, 9209, "udp"}, -{"oma-mlp", {NULL}, 9210, "tcp"}, -{"oma-mlp", {NULL}, 9210, "udp"}, -{"oma-mlp-s", {NULL}, 9211, "tcp"}, -{"oma-mlp-s", {NULL}, 9211, "udp"}, -{"serverviewdbms", {NULL}, 9212, "tcp"}, -{"serverviewdbms", {NULL}, 9212, "udp"}, -{"serverstart", {NULL}, 9213, "tcp"}, -{"serverstart", {NULL}, 9213, "udp"}, -{"ipdcesgbs", {NULL}, 9214, "tcp"}, -{"ipdcesgbs", {NULL}, 9214, "udp"}, -{"insis", {NULL}, 9215, "tcp"}, -{"insis", {NULL}, 9215, "udp"}, -{"acme", {NULL}, 9216, "tcp"}, -{"acme", {NULL}, 9216, "udp"}, -{"fsc-port", {NULL}, 9217, "tcp"}, -{"fsc-port", {NULL}, 9217, "udp"}, -{"teamcoherence", {NULL}, 9222, "tcp"}, -{"teamcoherence", {NULL}, 9222, "udp"}, -{"mon", {NULL}, 9255, "tcp"}, -{"mon", {NULL}, 9255, "udp"}, -{"pegasus", {NULL}, 9278, "tcp"}, -{"pegasus", {NULL}, 9278, "udp"}, -{"pegasus-ctl", {NULL}, 9279, "tcp"}, -{"pegasus-ctl", {NULL}, 9279, "udp"}, -{"pgps", {NULL}, 9280, "tcp"}, -{"pgps", {NULL}, 9280, "udp"}, -{"swtp-port1", {NULL}, 9281, "tcp"}, -{"swtp-port1", {NULL}, 9281, "udp"}, -{"swtp-port2", {NULL}, 9282, "tcp"}, -{"swtp-port2", {NULL}, 9282, "udp"}, -{"callwaveiam", {NULL}, 9283, "tcp"}, -{"callwaveiam", {NULL}, 9283, "udp"}, -{"visd", {NULL}, 9284, "tcp"}, -{"visd", {NULL}, 9284, "udp"}, -{"n2h2server", {NULL}, 9285, "tcp"}, -{"n2h2server", {NULL}, 9285, "udp"}, -{"n2receive", {NULL}, 9286, "udp"}, -{"cumulus", {NULL}, 9287, "tcp"}, -{"cumulus", {NULL}, 9287, "udp"}, -{"armtechdaemon", {NULL}, 9292, "tcp"}, -{"armtechdaemon", {NULL}, 9292, "udp"}, -{"storview", {NULL}, 9293, "tcp"}, -{"storview", {NULL}, 9293, "udp"}, -{"armcenterhttp", {NULL}, 9294, "tcp"}, -{"armcenterhttp", {NULL}, 9294, "udp"}, -{"armcenterhttps", {NULL}, 9295, "tcp"}, -{"armcenterhttps", {NULL}, 9295, "udp"}, -{"vrace", {NULL}, 9300, "tcp"}, -{"vrace", {NULL}, 9300, "udp"}, -{"sphinxql", {NULL}, 9306, "tcp"}, -{"sphinxapi", {NULL}, 9312, "tcp"}, -{"secure-ts", {NULL}, 9318, "tcp"}, -{"secure-ts", {NULL}, 9318, "udp"}, -{"guibase", {NULL}, 9321, "tcp"}, -{"guibase", {NULL}, 9321, "udp"}, -{"mpidcmgr", {NULL}, 9343, "tcp"}, -{"mpidcmgr", {NULL}, 9343, "udp"}, -{"mphlpdmc", {NULL}, 9344, "tcp"}, -{"mphlpdmc", {NULL}, 9344, "udp"}, -{"ctechlicensing", {NULL}, 9346, "tcp"}, -{"ctechlicensing", {NULL}, 9346, "udp"}, -{"fjdmimgr", {NULL}, 9374, "tcp"}, -{"fjdmimgr", {NULL}, 9374, "udp"}, -{"boxp", {NULL}, 9380, "tcp"}, -{"boxp", {NULL}, 9380, "udp"}, -{"d2dconfig", {NULL}, 9387, "tcp"}, -{"d2ddatatrans", {NULL}, 9388, "tcp"}, -{"adws", {NULL}, 9389, "tcp"}, -{"otp", {NULL}, 9390, "tcp"}, -{"fjinvmgr", {NULL}, 9396, "tcp"}, -{"fjinvmgr", {NULL}, 9396, "udp"}, -{"mpidcagt", {NULL}, 9397, "tcp"}, -{"mpidcagt", {NULL}, 9397, "udp"}, -{"sec-t4net-srv", {NULL}, 9400, "tcp"}, -{"sec-t4net-srv", {NULL}, 9400, "udp"}, -{"sec-t4net-clt", {NULL}, 9401, "tcp"}, -{"sec-t4net-clt", {NULL}, 9401, "udp"}, -{"sec-pc2fax-srv", {NULL}, 9402, "tcp"}, -{"sec-pc2fax-srv", {NULL}, 9402, "udp"}, -{"git", {NULL}, 9418, "tcp"}, -{"git", {NULL}, 9418, "udp"}, -{"tungsten-https", {NULL}, 9443, "tcp"}, -{"tungsten-https", {NULL}, 9443, "udp"}, -{"wso2esb-console", {NULL}, 9444, "tcp"}, -{"wso2esb-console", {NULL}, 9444, "udp"}, -{"sntlkeyssrvr", {NULL}, 9450, "tcp"}, -{"sntlkeyssrvr", {NULL}, 9450, "udp"}, -{"ismserver", {NULL}, 9500, "tcp"}, -{"ismserver", {NULL}, 9500, "udp"}, -{"sma-spw", {NULL}, 9522, "udp"}, -{"mngsuite", {NULL}, 9535, "tcp"}, -{"mngsuite", {NULL}, 9535, "udp"}, -{"laes-bf", {NULL}, 9536, "tcp"}, -{"laes-bf", {NULL}, 9536, "udp"}, -{"trispen-sra", {NULL}, 9555, "tcp"}, -{"trispen-sra", {NULL}, 9555, "udp"}, -{"ldgateway", {NULL}, 9592, "tcp"}, -{"ldgateway", {NULL}, 9592, "udp"}, -{"cba8", {NULL}, 9593, "tcp"}, -{"cba8", {NULL}, 9593, "udp"}, -{"msgsys", {NULL}, 9594, "tcp"}, -{"msgsys", {NULL}, 9594, "udp"}, -{"pds", {NULL}, 9595, "tcp"}, -{"pds", {NULL}, 9595, "udp"}, -{"mercury-disc", {NULL}, 9596, "tcp"}, -{"mercury-disc", {NULL}, 9596, "udp"}, -{"pd-admin", {NULL}, 9597, "tcp"}, -{"pd-admin", {NULL}, 9597, "udp"}, -{"vscp", {NULL}, 9598, "tcp"}, -{"vscp", {NULL}, 9598, "udp"}, -{"robix", {NULL}, 9599, "tcp"}, -{"robix", {NULL}, 9599, "udp"}, -{"micromuse-ncpw", {NULL}, 9600, "tcp"}, -{"micromuse-ncpw", {NULL}, 9600, "udp"}, -{"streamcomm-ds", {NULL}, 9612, "tcp"}, -{"streamcomm-ds", {NULL}, 9612, "udp"}, -{"iadt-tls", {NULL}, 9614, "tcp"}, -{"erunbook_agent", {NULL}, 9616, "tcp"}, -{"erunbook_server", {NULL}, 9617, "tcp"}, -{"condor", {NULL}, 9618, "tcp"}, -{"condor", {NULL}, 9618, "udp"}, -{"odbcpathway", {NULL}, 9628, "tcp"}, -{"odbcpathway", {NULL}, 9628, "udp"}, -{"uniport", {NULL}, 9629, "tcp"}, -{"uniport", {NULL}, 9629, "udp"}, -{"peoctlr", {NULL}, 9630, "tcp"}, -{"peocoll", {NULL}, 9631, "tcp"}, -{"mc-comm", {NULL}, 9632, "udp"}, -{"pqsflows", {NULL}, 9640, "tcp"}, -{"xmms2", {NULL}, 9667, "tcp"}, -{"xmms2", {NULL}, 9667, "udp"}, -{"tec5-sdctp", {NULL}, 9668, "tcp"}, -{"tec5-sdctp", {NULL}, 9668, "udp"}, -{"client-wakeup", {NULL}, 9694, "tcp"}, -{"client-wakeup", {NULL}, 9694, "udp"}, -{"ccnx", {NULL}, 9695, "tcp"}, -{"ccnx", {NULL}, 9695, "udp"}, -{"board-roar", {NULL}, 9700, "tcp"}, -{"board-roar", {NULL}, 9700, "udp"}, -{"l5nas-parchan", {NULL}, 9747, "tcp"}, -{"l5nas-parchan", {NULL}, 9747, "udp"}, -{"board-voip", {NULL}, 9750, "tcp"}, -{"board-voip", {NULL}, 9750, "udp"}, -{"rasadv", {NULL}, 9753, "tcp"}, -{"rasadv", {NULL}, 9753, "udp"}, -{"tungsten-http", {NULL}, 9762, "tcp"}, -{"tungsten-http", {NULL}, 9762, "udp"}, -{"davsrc", {NULL}, 9800, "tcp"}, -{"davsrc", {NULL}, 9800, "udp"}, -{"sstp-2", {NULL}, 9801, "tcp"}, -{"sstp-2", {NULL}, 9801, "udp"}, -{"davsrcs", {NULL}, 9802, "tcp"}, -{"davsrcs", {NULL}, 9802, "udp"}, -{"sapv1", {NULL}, 9875, "tcp"}, -{"sapv1", {NULL}, 9875, "udp"}, -{"sd", {NULL}, 9876, "tcp"}, -{"sd", {NULL}, 9876, "udp"}, -{"cyborg-systems", {NULL}, 9888, "tcp"}, -{"cyborg-systems", {NULL}, 9888, "udp"}, -{"gt-proxy", {NULL}, 9889, "tcp"}, -{"gt-proxy", {NULL}, 9889, "udp"}, -{"monkeycom", {NULL}, 9898, "tcp"}, -{"monkeycom", {NULL}, 9898, "udp"}, -{"sctp-tunneling", {NULL}, 9899, "tcp"}, -{"sctp-tunneling", {NULL}, 9899, "udp"}, -{"iua", {NULL}, 9900, "tcp"}, -{"iua", {NULL}, 9900, "udp"}, -{"iua", {NULL}, 9900, "sctp"}, -{"enrp", {NULL}, 9901, "udp"}, -{"enrp-sctp", {NULL}, 9901, "sctp"}, -{"enrp-sctp-tls", {NULL}, 9902, "sctp"}, -{"domaintime", {NULL}, 9909, "tcp"}, -{"domaintime", {NULL}, 9909, "udp"}, -{"sype-transport", {NULL}, 9911, "tcp"}, -{"sype-transport", {NULL}, 9911, "udp"}, -{"apc-9950", {NULL}, 9950, "tcp"}, -{"apc-9950", {NULL}, 9950, "udp"}, -{"apc-9951", {NULL}, 9951, "tcp"}, -{"apc-9951", {NULL}, 9951, "udp"}, -{"apc-9952", {NULL}, 9952, "tcp"}, -{"apc-9952", {NULL}, 9952, "udp"}, -{"acis", {NULL}, 9953, "tcp"}, -{"acis", {NULL}, 9953, "udp"}, -{"odnsp", {NULL}, 9966, "tcp"}, -{"odnsp", {NULL}, 9966, "udp"}, -{"dsm-scm-target", {NULL}, 9987, "tcp"}, -{"dsm-scm-target", {NULL}, 9987, "udp"}, -{"nsesrvr", {NULL}, 9988, "tcp"}, -{"osm-appsrvr", {NULL}, 9990, "tcp"}, -{"osm-appsrvr", {NULL}, 9990, "udp"}, -{"osm-oev", {NULL}, 9991, "tcp"}, -{"osm-oev", {NULL}, 9991, "udp"}, -{"palace-1", {NULL}, 9992, "tcp"}, -{"palace-1", {NULL}, 9992, "udp"}, -{"palace-2", {NULL}, 9993, "tcp"}, -{"palace-2", {NULL}, 9993, "udp"}, -{"palace-3", {NULL}, 9994, "tcp"}, -{"palace-3", {NULL}, 9994, "udp"}, -{"palace-4", {NULL}, 9995, "tcp"}, -{"palace-4", {NULL}, 9995, "udp"}, -{"palace-5", {NULL}, 9996, "tcp"}, -{"palace-5", {NULL}, 9996, "udp"}, -{"palace-6", {NULL}, 9997, "tcp"}, -{"palace-6", {NULL}, 9997, "udp"}, -{"distinct32", {NULL}, 9998, "tcp"}, -{"distinct32", {NULL}, 9998, "udp"}, -{"distinct", {NULL}, 9999, "tcp"}, -{"distinct", {NULL}, 9999, "udp"}, -{"ndmp", {NULL}, 10000, "tcp"}, -{"ndmp", {NULL}, 10000, "udp"}, -{"scp-config", {NULL}, 10001, "tcp"}, -{"scp-config", {NULL}, 10001, "udp"}, -{"documentum", {NULL}, 10002, "tcp"}, -{"documentum", {NULL}, 10002, "udp"}, -{"documentum_s", {NULL}, 10003, "tcp"}, -{"documentum_s", {NULL}, 10003, "udp"}, -{"emcrmirccd", {NULL}, 10004, "tcp"}, -{"emcrmird", {NULL}, 10005, "tcp"}, -{"mvs-capacity", {NULL}, 10007, "tcp"}, -{"mvs-capacity", {NULL}, 10007, "udp"}, -{"octopus", {NULL}, 10008, "tcp"}, -{"octopus", {NULL}, 10008, "udp"}, -{"swdtp-sv", {NULL}, 10009, "tcp"}, -{"swdtp-sv", {NULL}, 10009, "udp"}, -{"rxapi", {NULL}, 10010, "tcp"}, -{"zabbix-agent", {NULL}, 10050, "tcp"}, -{"zabbix-agent", {NULL}, 10050, "udp"}, -{"zabbix-trapper", {NULL}, 10051, "tcp"}, -{"zabbix-trapper", {NULL}, 10051, "udp"}, -{"qptlmd", {NULL}, 10055, "tcp"}, -{"amanda", {NULL}, 10080, "tcp"}, -{"amanda", {NULL}, 10080, "udp"}, -{"famdc", {NULL}, 10081, "tcp"}, -{"famdc", {NULL}, 10081, "udp"}, -{"itap-ddtp", {NULL}, 10100, "tcp"}, -{"itap-ddtp", {NULL}, 10100, "udp"}, -{"ezmeeting-2", {NULL}, 10101, "tcp"}, -{"ezmeeting-2", {NULL}, 10101, "udp"}, -{"ezproxy-2", {NULL}, 10102, "tcp"}, -{"ezproxy-2", {NULL}, 10102, "udp"}, -{"ezrelay", {NULL}, 10103, "tcp"}, -{"ezrelay", {NULL}, 10103, "udp"}, -{"swdtp", {NULL}, 10104, "tcp"}, -{"swdtp", {NULL}, 10104, "udp"}, -{"bctp-server", {NULL}, 10107, "tcp"}, -{"bctp-server", {NULL}, 10107, "udp"}, -{"nmea-0183", {NULL}, 10110, "tcp"}, -{"nmea-0183", {NULL}, 10110, "udp"}, -{"netiq-endpoint", {NULL}, 10113, "tcp"}, -{"netiq-endpoint", {NULL}, 10113, "udp"}, -{"netiq-qcheck", {NULL}, 10114, "tcp"}, -{"netiq-qcheck", {NULL}, 10114, "udp"}, -{"netiq-endpt", {NULL}, 10115, "tcp"}, -{"netiq-endpt", {NULL}, 10115, "udp"}, -{"netiq-voipa", {NULL}, 10116, "tcp"}, -{"netiq-voipa", {NULL}, 10116, "udp"}, -{"iqrm", {NULL}, 10117, "tcp"}, -{"iqrm", {NULL}, 10117, "udp"}, -{"bmc-perf-sd", {NULL}, 10128, "tcp"}, -{"bmc-perf-sd", {NULL}, 10128, "udp"}, -{"bmc-gms", {NULL}, 10129, "tcp"}, -{"qb-db-server", {NULL}, 10160, "tcp"}, -{"qb-db-server", {NULL}, 10160, "udp"}, -{"snmptls", {NULL}, 10161, "tcp"}, -{"snmpdtls", {NULL}, 10161, "udp"}, -{"snmptls-trap", {NULL}, 10162, "tcp"}, -{"snmpdtls-trap", {NULL}, 10162, "udp"}, -{"trisoap", {NULL}, 10200, "tcp"}, -{"trisoap", {NULL}, 10200, "udp"}, -{"rsms", {NULL}, 10201, "tcp"}, -{"rscs", {NULL}, 10201, "udp"}, -{"apollo-relay", {NULL}, 10252, "tcp"}, -{"apollo-relay", {NULL}, 10252, "udp"}, -{"axis-wimp-port", {NULL}, 10260, "tcp"}, -{"axis-wimp-port", {NULL}, 10260, "udp"}, -{"blocks", {NULL}, 10288, "tcp"}, -{"blocks", {NULL}, 10288, "udp"}, -{"cosir", {NULL}, 10321, "tcp"}, -{"hip-nat-t", {NULL}, 10500, "udp"}, -{"MOS-lower", {NULL}, 10540, "tcp"}, -{"MOS-lower", {NULL}, 10540, "udp"}, -{"MOS-upper", {NULL}, 10541, "tcp"}, -{"MOS-upper", {NULL}, 10541, "udp"}, -{"MOS-aux", {NULL}, 10542, "tcp"}, -{"MOS-aux", {NULL}, 10542, "udp"}, -{"MOS-soap", {NULL}, 10543, "tcp"}, -{"MOS-soap", {NULL}, 10543, "udp"}, -{"MOS-soap-opt", {NULL}, 10544, "tcp"}, -{"MOS-soap-opt", {NULL}, 10544, "udp"}, -{"gap", {NULL}, 10800, "tcp"}, -{"gap", {NULL}, 10800, "udp"}, -{"lpdg", {NULL}, 10805, "tcp"}, -{"lpdg", {NULL}, 10805, "udp"}, -{"nbd", {NULL}, 10809, "tcp"}, -{"nmc-disc", {NULL}, 10810, "udp"}, -{"helix", {NULL}, 10860, "tcp"}, -{"helix", {NULL}, 10860, "udp"}, -{"rmiaux", {NULL}, 10990, "tcp"}, -{"rmiaux", {NULL}, 10990, "udp"}, -{"irisa", {NULL}, 11000, "tcp"}, -{"irisa", {NULL}, 11000, "udp"}, -{"metasys", {NULL}, 11001, "tcp"}, -{"metasys", {NULL}, 11001, "udp"}, -{"netapp-icmgmt", {NULL}, 11104, "tcp"}, -{"netapp-icdata", {NULL}, 11105, "tcp"}, -{"sgi-lk", {NULL}, 11106, "tcp"}, -{"sgi-lk", {NULL}, 11106, "udp"}, -{"vce", {NULL}, 11111, "tcp"}, -{"vce", {NULL}, 11111, "udp"}, -{"dicom", {NULL}, 11112, "tcp"}, -{"dicom", {NULL}, 11112, "udp"}, -{"suncacao-snmp", {NULL}, 11161, "tcp"}, -{"suncacao-snmp", {NULL}, 11161, "udp"}, -{"suncacao-jmxmp", {NULL}, 11162, "tcp"}, -{"suncacao-jmxmp", {NULL}, 11162, "udp"}, -{"suncacao-rmi", {NULL}, 11163, "tcp"}, -{"suncacao-rmi", {NULL}, 11163, "udp"}, -{"suncacao-csa", {NULL}, 11164, "tcp"}, -{"suncacao-csa", {NULL}, 11164, "udp"}, -{"suncacao-websvc", {NULL}, 11165, "tcp"}, -{"suncacao-websvc", {NULL}, 11165, "udp"}, -{"snss", {NULL}, 11171, "udp"}, -{"oemcacao-jmxmp", {NULL}, 11172, "tcp"}, -{"oemcacao-rmi", {NULL}, 11174, "tcp"}, -{"oemcacao-websvc", {NULL}, 11175, "tcp"}, -{"smsqp", {NULL}, 11201, "tcp"}, -{"smsqp", {NULL}, 11201, "udp"}, -{"wifree", {NULL}, 11208, "tcp"}, -{"wifree", {NULL}, 11208, "udp"}, -{"memcache", {NULL}, 11211, "tcp"}, -{"memcache", {NULL}, 11211, "udp"}, -{"imip", {NULL}, 11319, "tcp"}, -{"imip", {NULL}, 11319, "udp"}, -{"imip-channels", {NULL}, 11320, "tcp"}, -{"imip-channels", {NULL}, 11320, "udp"}, -{"arena-server", {NULL}, 11321, "tcp"}, -{"arena-server", {NULL}, 11321, "udp"}, -{"atm-uhas", {NULL}, 11367, "tcp"}, -{"atm-uhas", {NULL}, 11367, "udp"}, -{"hkp", {NULL}, 11371, "tcp"}, -{"hkp", {NULL}, 11371, "udp"}, -{"asgcypresstcps", {NULL}, 11489, "tcp"}, -{"tempest-port", {NULL}, 11600, "tcp"}, -{"tempest-port", {NULL}, 11600, "udp"}, -{"h323callsigalt", {NULL}, 11720, "tcp"}, -{"h323callsigalt", {NULL}, 11720, "udp"}, -{"intrepid-ssl", {NULL}, 11751, "tcp"}, -{"intrepid-ssl", {NULL}, 11751, "udp"}, -{"xoraya", {NULL}, 11876, "tcp"}, -{"xoraya", {NULL}, 11876, "udp"}, -{"x2e-disc", {NULL}, 11877, "udp"}, -{"sysinfo-sp", {NULL}, 11967, "tcp"}, -{"sysinfo-sp", {NULL}, 11967, "udp"}, -{"wmereceiving", {NULL}, 11997, "sctp"}, -{"wmedistribution", {NULL}, 11998, "sctp"}, -{"wmereporting", {NULL}, 11999, "sctp"}, -{"entextxid", {NULL}, 12000, "tcp"}, -{"entextxid", {NULL}, 12000, "udp"}, -{"entextnetwk", {NULL}, 12001, "tcp"}, -{"entextnetwk", {NULL}, 12001, "udp"}, -{"entexthigh", {NULL}, 12002, "tcp"}, -{"entexthigh", {NULL}, 12002, "udp"}, -{"entextmed", {NULL}, 12003, "tcp"}, -{"entextmed", {NULL}, 12003, "udp"}, -{"entextlow", {NULL}, 12004, "tcp"}, -{"entextlow", {NULL}, 12004, "udp"}, -{"dbisamserver1", {NULL}, 12005, "tcp"}, -{"dbisamserver1", {NULL}, 12005, "udp"}, -{"dbisamserver2", {NULL}, 12006, "tcp"}, -{"dbisamserver2", {NULL}, 12006, "udp"}, -{"accuracer", {NULL}, 12007, "tcp"}, -{"accuracer", {NULL}, 12007, "udp"}, -{"accuracer-dbms", {NULL}, 12008, "tcp"}, -{"accuracer-dbms", {NULL}, 12008, "udp"}, -{"edbsrvr", {NULL}, 12010, "tcp"}, -{"vipera", {NULL}, 12012, "tcp"}, -{"vipera", {NULL}, 12012, "udp"}, -{"vipera-ssl", {NULL}, 12013, "tcp"}, -{"vipera-ssl", {NULL}, 12013, "udp"}, -{"rets-ssl", {NULL}, 12109, "tcp"}, -{"rets-ssl", {NULL}, 12109, "udp"}, -{"nupaper-ss", {NULL}, 12121, "tcp"}, -{"nupaper-ss", {NULL}, 12121, "udp"}, -{"cawas", {NULL}, 12168, "tcp"}, -{"cawas", {NULL}, 12168, "udp"}, -{"hivep", {NULL}, 12172, "tcp"}, -{"hivep", {NULL}, 12172, "udp"}, -{"linogridengine", {NULL}, 12300, "tcp"}, -{"linogridengine", {NULL}, 12300, "udp"}, -{"warehouse-sss", {NULL}, 12321, "tcp"}, -{"warehouse-sss", {NULL}, 12321, "udp"}, -{"warehouse", {NULL}, 12322, "tcp"}, -{"warehouse", {NULL}, 12322, "udp"}, -{"italk", {NULL}, 12345, "tcp"}, -{"italk", {NULL}, 12345, "udp"}, -{"tsaf", {NULL}, 12753, "tcp"}, -{"tsaf", {NULL}, 12753, "udp"}, -{"i-zipqd", {NULL}, 13160, "tcp"}, -{"i-zipqd", {NULL}, 13160, "udp"}, -{"bcslogc", {NULL}, 13216, "tcp"}, -{"bcslogc", {NULL}, 13216, "udp"}, -{"rs-pias", {NULL}, 13217, "tcp"}, -{"rs-pias", {NULL}, 13217, "udp"}, -{"emc-vcas-tcp", {NULL}, 13218, "tcp"}, -{"emc-vcas-udp", {NULL}, 13218, "udp"}, -{"powwow-client", {NULL}, 13223, "tcp"}, -{"powwow-client", {NULL}, 13223, "udp"}, -{"powwow-server", {NULL}, 13224, "tcp"}, -{"powwow-server", {NULL}, 13224, "udp"}, -{"doip-data", {NULL}, 13400, "tcp"}, -{"doip-disc", {NULL}, 13400, "udp"}, -{"bprd", {NULL}, 13720, "tcp"}, -{"bprd", {NULL}, 13720, "udp"}, -{"bpdbm", {NULL}, 13721, "tcp"}, -{"bpdbm", {NULL}, 13721, "udp"}, -{"bpjava-msvc", {NULL}, 13722, "tcp"}, -{"bpjava-msvc", {NULL}, 13722, "udp"}, -{"vnetd", {NULL}, 13724, "tcp"}, -{"vnetd", {NULL}, 13724, "udp"}, -{"bpcd", {NULL}, 13782, "tcp"}, -{"bpcd", {NULL}, 13782, "udp"}, -{"vopied", {NULL}, 13783, "tcp"}, -{"vopied", {NULL}, 13783, "udp"}, -{"nbdb", {NULL}, 13785, "tcp"}, -{"nbdb", {NULL}, 13785, "udp"}, -{"nomdb", {NULL}, 13786, "tcp"}, -{"nomdb", {NULL}, 13786, "udp"}, -{"dsmcc-config", {NULL}, 13818, "tcp"}, -{"dsmcc-config", {NULL}, 13818, "udp"}, -{"dsmcc-session", {NULL}, 13819, "tcp"}, -{"dsmcc-session", {NULL}, 13819, "udp"}, -{"dsmcc-passthru", {NULL}, 13820, "tcp"}, -{"dsmcc-passthru", {NULL}, 13820, "udp"}, -{"dsmcc-download", {NULL}, 13821, "tcp"}, -{"dsmcc-download", {NULL}, 13821, "udp"}, -{"dsmcc-ccp", {NULL}, 13822, "tcp"}, -{"dsmcc-ccp", {NULL}, 13822, "udp"}, -{"bmdss", {NULL}, 13823, "tcp"}, -{"dta-systems", {NULL}, 13929, "tcp"}, -{"dta-systems", {NULL}, 13929, "udp"}, -{"medevolve", {NULL}, 13930, "tcp"}, -{"scotty-ft", {NULL}, 14000, "tcp"}, -{"scotty-ft", {NULL}, 14000, "udp"}, -{"sua", {NULL}, 14001, "tcp"}, -{"sua", {NULL}, 14001, "udp"}, -{"sua", {NULL}, 14001, "sctp"}, -{"sage-best-com1", {NULL}, 14033, "tcp"}, -{"sage-best-com1", {NULL}, 14033, "udp"}, -{"sage-best-com2", {NULL}, 14034, "tcp"}, -{"sage-best-com2", {NULL}, 14034, "udp"}, -{"vcs-app", {NULL}, 14141, "tcp"}, -{"vcs-app", {NULL}, 14141, "udp"}, -{"icpp", {NULL}, 14142, "tcp"}, -{"icpp", {NULL}, 14142, "udp"}, -{"gcm-app", {NULL}, 14145, "tcp"}, -{"gcm-app", {NULL}, 14145, "udp"}, -{"vrts-tdd", {NULL}, 14149, "tcp"}, -{"vrts-tdd", {NULL}, 14149, "udp"}, -{"vcscmd", {NULL}, 14150, "tcp"}, -{"vad", {NULL}, 14154, "tcp"}, -{"vad", {NULL}, 14154, "udp"}, -{"cps", {NULL}, 14250, "tcp"}, -{"cps", {NULL}, 14250, "udp"}, -{"ca-web-update", {NULL}, 14414, "tcp"}, -{"ca-web-update", {NULL}, 14414, "udp"}, -{"hde-lcesrvr-1", {NULL}, 14936, "tcp"}, -{"hde-lcesrvr-1", {NULL}, 14936, "udp"}, -{"hde-lcesrvr-2", {NULL}, 14937, "tcp"}, -{"hde-lcesrvr-2", {NULL}, 14937, "udp"}, -{"hydap", {NULL}, 15000, "tcp"}, -{"hydap", {NULL}, 15000, "udp"}, -{"xpilot", {NULL}, 15345, "tcp"}, -{"xpilot", {NULL}, 15345, "udp"}, -{"3link", {NULL}, 15363, "tcp"}, -{"3link", {NULL}, 15363, "udp"}, -{"cisco-snat", {NULL}, 15555, "tcp"}, -{"cisco-snat", {NULL}, 15555, "udp"}, -{"bex-xr", {NULL}, 15660, "tcp"}, -{"bex-xr", {NULL}, 15660, "udp"}, -{"ptp", {NULL}, 15740, "tcp"}, -{"ptp", {NULL}, 15740, "udp"}, -{"2ping", {NULL}, 15998, "udp"}, -{"programmar", {NULL}, 15999, "tcp"}, -{"fmsas", {NULL}, 16000, "tcp"}, -{"fmsascon", {NULL}, 16001, "tcp"}, -{"gsms", {NULL}, 16002, "tcp"}, -{"alfin", {NULL}, 16003, "udp"}, -{"jwpc", {NULL}, 16020, "tcp"}, -{"jwpc-bin", {NULL}, 16021, "tcp"}, -{"sun-sea-port", {NULL}, 16161, "tcp"}, -{"sun-sea-port", {NULL}, 16161, "udp"}, -{"solaris-audit", {NULL}, 16162, "tcp"}, -{"etb4j", {NULL}, 16309, "tcp"}, -{"etb4j", {NULL}, 16309, "udp"}, -{"pduncs", {NULL}, 16310, "tcp"}, -{"pduncs", {NULL}, 16310, "udp"}, -{"pdefmns", {NULL}, 16311, "tcp"}, -{"pdefmns", {NULL}, 16311, "udp"}, -{"netserialext1", {NULL}, 16360, "tcp"}, -{"netserialext1", {NULL}, 16360, "udp"}, -{"netserialext2", {NULL}, 16361, "tcp"}, -{"netserialext2", {NULL}, 16361, "udp"}, -{"netserialext3", {NULL}, 16367, "tcp"}, -{"netserialext3", {NULL}, 16367, "udp"}, -{"netserialext4", {NULL}, 16368, "tcp"}, -{"netserialext4", {NULL}, 16368, "udp"}, -{"connected", {NULL}, 16384, "tcp"}, -{"connected", {NULL}, 16384, "udp"}, -{"xoms", {NULL}, 16619, "tcp"}, -{"newbay-snc-mc", {NULL}, 16900, "tcp"}, -{"newbay-snc-mc", {NULL}, 16900, "udp"}, -{"sgcip", {NULL}, 16950, "tcp"}, -{"sgcip", {NULL}, 16950, "udp"}, -{"intel-rci-mp", {NULL}, 16991, "tcp"}, -{"intel-rci-mp", {NULL}, 16991, "udp"}, -{"amt-soap-http", {NULL}, 16992, "tcp"}, -{"amt-soap-http", {NULL}, 16992, "udp"}, -{"amt-soap-https", {NULL}, 16993, "tcp"}, -{"amt-soap-https", {NULL}, 16993, "udp"}, -{"amt-redir-tcp", {NULL}, 16994, "tcp"}, -{"amt-redir-tcp", {NULL}, 16994, "udp"}, -{"amt-redir-tls", {NULL}, 16995, "tcp"}, -{"amt-redir-tls", {NULL}, 16995, "udp"}, -{"isode-dua", {NULL}, 17007, "tcp"}, -{"isode-dua", {NULL}, 17007, "udp"}, -{"soundsvirtual", {NULL}, 17185, "tcp"}, -{"soundsvirtual", {NULL}, 17185, "udp"}, -{"chipper", {NULL}, 17219, "tcp"}, -{"chipper", {NULL}, 17219, "udp"}, -{"integrius-stp", {NULL}, 17234, "tcp"}, -{"integrius-stp", {NULL}, 17234, "udp"}, -{"ssh-mgmt", {NULL}, 17235, "tcp"}, -{"ssh-mgmt", {NULL}, 17235, "udp"}, -{"db-lsp", {NULL}, 17500, "tcp"}, -{"db-lsp-disc", {NULL}, 17500, "udp"}, -{"ea", {NULL}, 17729, "tcp"}, -{"ea", {NULL}, 17729, "udp"}, -{"zep", {NULL}, 17754, "tcp"}, -{"zep", {NULL}, 17754, "udp"}, -{"zigbee-ip", {NULL}, 17755, "tcp"}, -{"zigbee-ip", {NULL}, 17755, "udp"}, -{"zigbee-ips", {NULL}, 17756, "tcp"}, -{"zigbee-ips", {NULL}, 17756, "udp"}, -{"sw-orion", {NULL}, 17777, "tcp"}, -{"biimenu", {NULL}, 18000, "tcp"}, -{"biimenu", {NULL}, 18000, "udp"}, -{"radpdf", {NULL}, 18104, "tcp"}, -{"racf", {NULL}, 18136, "tcp"}, -{"opsec-cvp", {NULL}, 18181, "tcp"}, -{"opsec-cvp", {NULL}, 18181, "udp"}, -{"opsec-ufp", {NULL}, 18182, "tcp"}, -{"opsec-ufp", {NULL}, 18182, "udp"}, -{"opsec-sam", {NULL}, 18183, "tcp"}, -{"opsec-sam", {NULL}, 18183, "udp"}, -{"opsec-lea", {NULL}, 18184, "tcp"}, -{"opsec-lea", {NULL}, 18184, "udp"}, -{"opsec-omi", {NULL}, 18185, "tcp"}, -{"opsec-omi", {NULL}, 18185, "udp"}, -{"ohsc", {NULL}, 18186, "tcp"}, -{"ohsc", {NULL}, 18186, "udp"}, -{"opsec-ela", {NULL}, 18187, "tcp"}, -{"opsec-ela", {NULL}, 18187, "udp"}, -{"checkpoint-rtm", {NULL}, 18241, "tcp"}, -{"checkpoint-rtm", {NULL}, 18241, "udp"}, -{"gv-pf", {NULL}, 18262, "tcp"}, -{"gv-pf", {NULL}, 18262, "udp"}, -{"ac-cluster", {NULL}, 18463, "tcp"}, -{"ac-cluster", {NULL}, 18463, "udp"}, -{"rds-ib", {NULL}, 18634, "tcp"}, -{"rds-ib", {NULL}, 18634, "udp"}, -{"rds-ip", {NULL}, 18635, "tcp"}, -{"rds-ip", {NULL}, 18635, "udp"}, -{"ique", {NULL}, 18769, "tcp"}, -{"ique", {NULL}, 18769, "udp"}, -{"infotos", {NULL}, 18881, "tcp"}, -{"infotos", {NULL}, 18881, "udp"}, -{"apc-necmp", {NULL}, 18888, "tcp"}, -{"apc-necmp", {NULL}, 18888, "udp"}, -{"igrid", {NULL}, 19000, "tcp"}, -{"igrid", {NULL}, 19000, "udp"}, -{"j-link", {NULL}, 19020, "tcp"}, -{"opsec-uaa", {NULL}, 19191, "tcp"}, -{"opsec-uaa", {NULL}, 19191, "udp"}, -{"ua-secureagent", {NULL}, 19194, "tcp"}, -{"ua-secureagent", {NULL}, 19194, "udp"}, -{"keysrvr", {NULL}, 19283, "tcp"}, -{"keysrvr", {NULL}, 19283, "udp"}, -{"keyshadow", {NULL}, 19315, "tcp"}, -{"keyshadow", {NULL}, 19315, "udp"}, -{"mtrgtrans", {NULL}, 19398, "tcp"}, -{"mtrgtrans", {NULL}, 19398, "udp"}, -{"hp-sco", {NULL}, 19410, "tcp"}, -{"hp-sco", {NULL}, 19410, "udp"}, -{"hp-sca", {NULL}, 19411, "tcp"}, -{"hp-sca", {NULL}, 19411, "udp"}, -{"hp-sessmon", {NULL}, 19412, "tcp"}, -{"hp-sessmon", {NULL}, 19412, "udp"}, -{"fxuptp", {NULL}, 19539, "tcp"}, -{"fxuptp", {NULL}, 19539, "udp"}, -{"sxuptp", {NULL}, 19540, "tcp"}, -{"sxuptp", {NULL}, 19540, "udp"}, -{"jcp", {NULL}, 19541, "tcp"}, -{"jcp", {NULL}, 19541, "udp"}, -{"iec-104-sec", {NULL}, 19998, "tcp"}, -{"dnp-sec", {NULL}, 19999, "tcp"}, -{"dnp-sec", {NULL}, 19999, "udp"}, -{"dnp", {NULL}, 20000, "tcp"}, -{"dnp", {NULL}, 20000, "udp"}, -{"microsan", {NULL}, 20001, "tcp"}, -{"microsan", {NULL}, 20001, "udp"}, -{"commtact-http", {NULL}, 20002, "tcp"}, -{"commtact-http", {NULL}, 20002, "udp"}, -{"commtact-https", {NULL}, 20003, "tcp"}, -{"commtact-https", {NULL}, 20003, "udp"}, -{"openwebnet", {NULL}, 20005, "tcp"}, -{"openwebnet", {NULL}, 20005, "udp"}, -{"ss-idi-disc", {NULL}, 20012, "udp"}, -{"ss-idi", {NULL}, 20013, "tcp"}, -{"opendeploy", {NULL}, 20014, "tcp"}, -{"opendeploy", {NULL}, 20014, "udp"}, -{"nburn_id", {NULL}, 20034, "tcp"}, -{"nburn_id", {NULL}, 20034, "udp"}, -{"tmophl7mts", {NULL}, 20046, "tcp"}, -{"tmophl7mts", {NULL}, 20046, "udp"}, -{"mountd", {NULL}, 20048, "tcp"}, -{"mountd", {NULL}, 20048, "udp"}, -{"nfsrdma", {NULL}, 20049, "tcp"}, -{"nfsrdma", {NULL}, 20049, "udp"}, -{"nfsrdma", {NULL}, 20049, "sctp"}, -{"tolfab", {NULL}, 20167, "tcp"}, -{"tolfab", {NULL}, 20167, "udp"}, -{"ipdtp-port", {NULL}, 20202, "tcp"}, -{"ipdtp-port", {NULL}, 20202, "udp"}, -{"ipulse-ics", {NULL}, 20222, "tcp"}, -{"ipulse-ics", {NULL}, 20222, "udp"}, -{"emwavemsg", {NULL}, 20480, "tcp"}, -{"emwavemsg", {NULL}, 20480, "udp"}, -{"track", {NULL}, 20670, "tcp"}, -{"track", {NULL}, 20670, "udp"}, -{"athand-mmp", {NULL}, 20999, "tcp"}, -{"athand-mmp", {NULL}, 20999, "udp"}, -{"irtrans", {NULL}, 21000, "tcp"}, -{"irtrans", {NULL}, 21000, "udp"}, -{"dfserver", {NULL}, 21554, "tcp"}, -{"dfserver", {NULL}, 21554, "udp"}, -{"vofr-gateway", {NULL}, 21590, "tcp"}, -{"vofr-gateway", {NULL}, 21590, "udp"}, -{"tvpm", {NULL}, 21800, "tcp"}, -{"tvpm", {NULL}, 21800, "udp"}, -{"webphone", {NULL}, 21845, "tcp"}, -{"webphone", {NULL}, 21845, "udp"}, -{"netspeak-is", {NULL}, 21846, "tcp"}, -{"netspeak-is", {NULL}, 21846, "udp"}, -{"netspeak-cs", {NULL}, 21847, "tcp"}, -{"netspeak-cs", {NULL}, 21847, "udp"}, -{"netspeak-acd", {NULL}, 21848, "tcp"}, -{"netspeak-acd", {NULL}, 21848, "udp"}, -{"netspeak-cps", {NULL}, 21849, "tcp"}, -{"netspeak-cps", {NULL}, 21849, "udp"}, -{"snapenetio", {NULL}, 22000, "tcp"}, -{"snapenetio", {NULL}, 22000, "udp"}, -{"optocontrol", {NULL}, 22001, "tcp"}, -{"optocontrol", {NULL}, 22001, "udp"}, -{"optohost002", {NULL}, 22002, "tcp"}, -{"optohost002", {NULL}, 22002, "udp"}, -{"optohost003", {NULL}, 22003, "tcp"}, -{"optohost003", {NULL}, 22003, "udp"}, -{"optohost004", {NULL}, 22004, "tcp"}, -{"optohost004", {NULL}, 22004, "udp"}, -{"optohost004", {NULL}, 22005, "tcp"}, -{"optohost004", {NULL}, 22005, "udp"}, -{"dcap", {NULL}, 22125, "tcp"}, -{"gsidcap", {NULL}, 22128, "tcp"}, -{"wnn6", {NULL}, 22273, "tcp"}, -{"wnn6", {NULL}, 22273, "udp"}, -{"cis", {NULL}, 22305, "tcp"}, -{"cis", {NULL}, 22305, "udp"}, -{"cis-secure", {NULL}, 22343, "tcp"}, -{"cis-secure", {NULL}, 22343, "udp"}, -{"WibuKey", {NULL}, 22347, "tcp"}, -{"WibuKey", {NULL}, 22347, "udp"}, -{"CodeMeter", {NULL}, 22350, "tcp"}, -{"CodeMeter", {NULL}, 22350, "udp"}, -{"vocaltec-wconf", {NULL}, 22555, "tcp"}, -{"vocaltec-phone", {NULL}, 22555, "udp"}, -{"talikaserver", {NULL}, 22763, "tcp"}, -{"talikaserver", {NULL}, 22763, "udp"}, -{"aws-brf", {NULL}, 22800, "tcp"}, -{"aws-brf", {NULL}, 22800, "udp"}, -{"brf-gw", {NULL}, 22951, "tcp"}, -{"brf-gw", {NULL}, 22951, "udp"}, -{"inovaport1", {NULL}, 23000, "tcp"}, -{"inovaport1", {NULL}, 23000, "udp"}, -{"inovaport2", {NULL}, 23001, "tcp"}, -{"inovaport2", {NULL}, 23001, "udp"}, -{"inovaport3", {NULL}, 23002, "tcp"}, -{"inovaport3", {NULL}, 23002, "udp"}, -{"inovaport4", {NULL}, 23003, "tcp"}, -{"inovaport4", {NULL}, 23003, "udp"}, -{"inovaport5", {NULL}, 23004, "tcp"}, -{"inovaport5", {NULL}, 23004, "udp"}, -{"inovaport6", {NULL}, 23005, "tcp"}, -{"inovaport6", {NULL}, 23005, "udp"}, -{"s102", {NULL}, 23272, "udp"}, -{"elxmgmt", {NULL}, 23333, "tcp"}, -{"elxmgmt", {NULL}, 23333, "udp"}, -{"novar-dbase", {NULL}, 23400, "tcp"}, -{"novar-dbase", {NULL}, 23400, "udp"}, -{"novar-alarm", {NULL}, 23401, "tcp"}, -{"novar-alarm", {NULL}, 23401, "udp"}, -{"novar-global", {NULL}, 23402, "tcp"}, -{"novar-global", {NULL}, 23402, "udp"}, -{"aequus", {NULL}, 23456, "tcp"}, -{"aequus-alt", {NULL}, 23457, "tcp"}, -{"med-ltp", {NULL}, 24000, "tcp"}, -{"med-ltp", {NULL}, 24000, "udp"}, -{"med-fsp-rx", {NULL}, 24001, "tcp"}, -{"med-fsp-rx", {NULL}, 24001, "udp"}, -{"med-fsp-tx", {NULL}, 24002, "tcp"}, -{"med-fsp-tx", {NULL}, 24002, "udp"}, -{"med-supp", {NULL}, 24003, "tcp"}, -{"med-supp", {NULL}, 24003, "udp"}, -{"med-ovw", {NULL}, 24004, "tcp"}, -{"med-ovw", {NULL}, 24004, "udp"}, -{"med-ci", {NULL}, 24005, "tcp"}, -{"med-ci", {NULL}, 24005, "udp"}, -{"med-net-svc", {NULL}, 24006, "tcp"}, -{"med-net-svc", {NULL}, 24006, "udp"}, -{"filesphere", {NULL}, 24242, "tcp"}, -{"filesphere", {NULL}, 24242, "udp"}, -{"vista-4gl", {NULL}, 24249, "tcp"}, -{"vista-4gl", {NULL}, 24249, "udp"}, -{"ild", {NULL}, 24321, "tcp"}, -{"ild", {NULL}, 24321, "udp"}, -{"intel_rci", {NULL}, 24386, "tcp"}, -{"intel_rci", {NULL}, 24386, "udp"}, -{"tonidods", {NULL}, 24465, "tcp"}, -{"tonidods", {NULL}, 24465, "udp"}, -{"binkp", {NULL}, 24554, "tcp"}, -{"binkp", {NULL}, 24554, "udp"}, -{"canditv", {NULL}, 24676, "tcp"}, -{"canditv", {NULL}, 24676, "udp"}, -{"flashfiler", {NULL}, 24677, "tcp"}, -{"flashfiler", {NULL}, 24677, "udp"}, -{"proactivate", {NULL}, 24678, "tcp"}, -{"proactivate", {NULL}, 24678, "udp"}, -{"tcc-http", {NULL}, 24680, "tcp"}, -{"tcc-http", {NULL}, 24680, "udp"}, -{"cslg", {NULL}, 24754, "tcp"}, -{"find", {NULL}, 24922, "tcp"}, -{"find", {NULL}, 24922, "udp"}, -{"icl-twobase1", {NULL}, 25000, "tcp"}, -{"icl-twobase1", {NULL}, 25000, "udp"}, -{"icl-twobase2", {NULL}, 25001, "tcp"}, -{"icl-twobase2", {NULL}, 25001, "udp"}, -{"icl-twobase3", {NULL}, 25002, "tcp"}, -{"icl-twobase3", {NULL}, 25002, "udp"}, -{"icl-twobase4", {NULL}, 25003, "tcp"}, -{"icl-twobase4", {NULL}, 25003, "udp"}, -{"icl-twobase5", {NULL}, 25004, "tcp"}, -{"icl-twobase5", {NULL}, 25004, "udp"}, -{"icl-twobase6", {NULL}, 25005, "tcp"}, -{"icl-twobase6", {NULL}, 25005, "udp"}, -{"icl-twobase7", {NULL}, 25006, "tcp"}, -{"icl-twobase7", {NULL}, 25006, "udp"}, -{"icl-twobase8", {NULL}, 25007, "tcp"}, -{"icl-twobase8", {NULL}, 25007, "udp"}, -{"icl-twobase9", {NULL}, 25008, "tcp"}, -{"icl-twobase9", {NULL}, 25008, "udp"}, -{"icl-twobase10", {NULL}, 25009, "tcp"}, -{"icl-twobase10", {NULL}, 25009, "udp"}, -{"rna", {NULL}, 25471, "sctp"}, -{"sauterdongle", {NULL}, 25576, "tcp"}, -{"vocaltec-hos", {NULL}, 25793, "tcp"}, -{"vocaltec-hos", {NULL}, 25793, "udp"}, -{"tasp-net", {NULL}, 25900, "tcp"}, -{"tasp-net", {NULL}, 25900, "udp"}, -{"niobserver", {NULL}, 25901, "tcp"}, -{"niobserver", {NULL}, 25901, "udp"}, -{"nilinkanalyst", {NULL}, 25902, "tcp"}, -{"nilinkanalyst", {NULL}, 25902, "udp"}, -{"niprobe", {NULL}, 25903, "tcp"}, -{"niprobe", {NULL}, 25903, "udp"}, -{"quake", {NULL}, 26000, "tcp"}, -{"quake", {NULL}, 26000, "udp"}, -{"scscp", {NULL}, 26133, "tcp"}, -{"scscp", {NULL}, 26133, "udp"}, -{"wnn6-ds", {NULL}, 26208, "tcp"}, -{"wnn6-ds", {NULL}, 26208, "udp"}, -{"ezproxy", {NULL}, 26260, "tcp"}, -{"ezproxy", {NULL}, 26260, "udp"}, -{"ezmeeting", {NULL}, 26261, "tcp"}, -{"ezmeeting", {NULL}, 26261, "udp"}, -{"k3software-svr", {NULL}, 26262, "tcp"}, -{"k3software-svr", {NULL}, 26262, "udp"}, -{"k3software-cli", {NULL}, 26263, "tcp"}, -{"k3software-cli", {NULL}, 26263, "udp"}, -{"exoline-tcp", {NULL}, 26486, "tcp"}, -{"exoline-udp", {NULL}, 26486, "udp"}, -{"exoconfig", {NULL}, 26487, "tcp"}, -{"exoconfig", {NULL}, 26487, "udp"}, -{"exonet", {NULL}, 26489, "tcp"}, -{"exonet", {NULL}, 26489, "udp"}, -{"imagepump", {NULL}, 27345, "tcp"}, -{"imagepump", {NULL}, 27345, "udp"}, -{"jesmsjc", {NULL}, 27442, "tcp"}, -{"jesmsjc", {NULL}, 27442, "udp"}, -{"kopek-httphead", {NULL}, 27504, "tcp"}, -{"kopek-httphead", {NULL}, 27504, "udp"}, -{"ars-vista", {NULL}, 27782, "tcp"}, -{"ars-vista", {NULL}, 27782, "udp"}, -{"tw-auth-key", {NULL}, 27999, "tcp"}, -{"tw-auth-key", {NULL}, 27999, "udp"}, -{"nxlmd", {NULL}, 28000, "tcp"}, -{"nxlmd", {NULL}, 28000, "udp"}, -{"pqsp", {NULL}, 28001, "tcp"}, -{"siemensgsm", {NULL}, 28240, "tcp"}, -{"siemensgsm", {NULL}, 28240, "udp"}, -{"sgsap", {NULL}, 29118, "sctp"}, -{"otmp", {NULL}, 29167, "tcp"}, -{"otmp", {NULL}, 29167, "udp"}, -{"sbcap", {NULL}, 29168, "sctp"}, -{"iuhsctpassoc", {NULL}, 29169, "sctp"}, -{"pago-services1", {NULL}, 30001, "tcp"}, -{"pago-services1", {NULL}, 30001, "udp"}, -{"pago-services2", {NULL}, 30002, "tcp"}, -{"pago-services2", {NULL}, 30002, "udp"}, -{"kingdomsonline", {NULL}, 30260, "tcp"}, -{"kingdomsonline", {NULL}, 30260, "udp"}, -{"ovobs", {NULL}, 30999, "tcp"}, -{"ovobs", {NULL}, 30999, "udp"}, -{"autotrac-acp", {NULL}, 31020, "tcp"}, -{"yawn", {NULL}, 31029, "udp"}, -{"xqosd", {NULL}, 31416, "tcp"}, -{"xqosd", {NULL}, 31416, "udp"}, -{"tetrinet", {NULL}, 31457, "tcp"}, -{"tetrinet", {NULL}, 31457, "udp"}, -{"lm-mon", {NULL}, 31620, "tcp"}, -{"lm-mon", {NULL}, 31620, "udp"}, -{"dsx_monitor", {NULL}, 31685, "tcp"}, -{"gamesmith-port", {NULL}, 31765, "tcp"}, -{"gamesmith-port", {NULL}, 31765, "udp"}, -{"iceedcp_tx", {NULL}, 31948, "tcp"}, -{"iceedcp_tx", {NULL}, 31948, "udp"}, -{"iceedcp_rx", {NULL}, 31949, "tcp"}, -{"iceedcp_rx", {NULL}, 31949, "udp"}, -{"iracinghelper", {NULL}, 32034, "tcp"}, -{"iracinghelper", {NULL}, 32034, "udp"}, -{"t1distproc60", {NULL}, 32249, "tcp"}, -{"t1distproc60", {NULL}, 32249, "udp"}, -{"apm-link", {NULL}, 32483, "tcp"}, -{"apm-link", {NULL}, 32483, "udp"}, -{"sec-ntb-clnt", {NULL}, 32635, "tcp"}, -{"sec-ntb-clnt", {NULL}, 32635, "udp"}, -{"DMExpress", {NULL}, 32636, "tcp"}, -{"DMExpress", {NULL}, 32636, "udp"}, -{"filenet-powsrm", {NULL}, 32767, "tcp"}, -{"filenet-powsrm", {NULL}, 32767, "udp"}, -{"filenet-tms", {NULL}, 32768, "tcp"}, -{"filenet-tms", {NULL}, 32768, "udp"}, -{"filenet-rpc", {NULL}, 32769, "tcp"}, -{"filenet-rpc", {NULL}, 32769, "udp"}, -{"filenet-nch", {NULL}, 32770, "tcp"}, -{"filenet-nch", {NULL}, 32770, "udp"}, -{"filenet-rmi", {NULL}, 32771, "tcp"}, -{"filenet-rmi", {NULL}, 32771, "udp"}, -{"filenet-pa", {NULL}, 32772, "tcp"}, -{"filenet-pa", {NULL}, 32772, "udp"}, -{"filenet-cm", {NULL}, 32773, "tcp"}, -{"filenet-cm", {NULL}, 32773, "udp"}, -{"filenet-re", {NULL}, 32774, "tcp"}, -{"filenet-re", {NULL}, 32774, "udp"}, -{"filenet-pch", {NULL}, 32775, "tcp"}, -{"filenet-pch", {NULL}, 32775, "udp"}, -{"filenet-peior", {NULL}, 32776, "tcp"}, -{"filenet-peior", {NULL}, 32776, "udp"}, -{"filenet-obrok", {NULL}, 32777, "tcp"}, -{"filenet-obrok", {NULL}, 32777, "udp"}, -{"mlsn", {NULL}, 32801, "tcp"}, -{"mlsn", {NULL}, 32801, "udp"}, -{"retp", {NULL}, 32811, "tcp"}, -{"idmgratm", {NULL}, 32896, "tcp"}, -{"idmgratm", {NULL}, 32896, "udp"}, -{"aurora-balaena", {NULL}, 33123, "tcp"}, -{"aurora-balaena", {NULL}, 33123, "udp"}, -{"diamondport", {NULL}, 33331, "tcp"}, -{"diamondport", {NULL}, 33331, "udp"}, -{"dgi-serv", {NULL}, 33333, "tcp"}, -{"traceroute", {NULL}, 33434, "tcp"}, -{"traceroute", {NULL}, 33434, "udp"}, -{"snip-slave", {NULL}, 33656, "tcp"}, -{"snip-slave", {NULL}, 33656, "udp"}, -{"turbonote-2", {NULL}, 34249, "tcp"}, -{"turbonote-2", {NULL}, 34249, "udp"}, -{"p-net-local", {NULL}, 34378, "tcp"}, -{"p-net-local", {NULL}, 34378, "udp"}, -{"p-net-remote", {NULL}, 34379, "tcp"}, -{"p-net-remote", {NULL}, 34379, "udp"}, -{"dhanalakshmi", {NULL}, 34567, "tcp"}, -{"profinet-rt", {NULL}, 34962, "tcp"}, -{"profinet-rt", {NULL}, 34962, "udp"}, -{"profinet-rtm", {NULL}, 34963, "tcp"}, -{"profinet-rtm", {NULL}, 34963, "udp"}, -{"profinet-cm", {NULL}, 34964, "tcp"}, -{"profinet-cm", {NULL}, 34964, "udp"}, -{"ethercat", {NULL}, 34980, "tcp"}, -{"ethercat", {NULL}, 34980, "udp"}, -{"allpeers", {NULL}, 36001, "tcp"}, -{"allpeers", {NULL}, 36001, "udp"}, -{"s1-control", {NULL}, 36412, "sctp"}, -{"x2-control", {NULL}, 36422, "sctp"}, -{"m2ap", {NULL}, 36443, "sctp"}, -{"m3ap", {NULL}, 36444, "sctp"}, -{"kastenxpipe", {NULL}, 36865, "tcp"}, -{"kastenxpipe", {NULL}, 36865, "udp"}, -{"neckar", {NULL}, 37475, "tcp"}, -{"neckar", {NULL}, 37475, "udp"}, -{"unisys-eportal", {NULL}, 37654, "tcp"}, -{"unisys-eportal", {NULL}, 37654, "udp"}, -{"galaxy7-data", {NULL}, 38201, "tcp"}, -{"galaxy7-data", {NULL}, 38201, "udp"}, -{"fairview", {NULL}, 38202, "tcp"}, -{"fairview", {NULL}, 38202, "udp"}, -{"agpolicy", {NULL}, 38203, "tcp"}, -{"agpolicy", {NULL}, 38203, "udp"}, -{"turbonote-1", {NULL}, 39681, "tcp"}, -{"turbonote-1", {NULL}, 39681, "udp"}, -{"safetynetp", {NULL}, 40000, "tcp"}, -{"safetynetp", {NULL}, 40000, "udp"}, -{"cscp", {NULL}, 40841, "tcp"}, -{"cscp", {NULL}, 40841, "udp"}, -{"csccredir", {NULL}, 40842, "tcp"}, -{"csccredir", {NULL}, 40842, "udp"}, -{"csccfirewall", {NULL}, 40843, "tcp"}, -{"csccfirewall", {NULL}, 40843, "udp"}, -{"ortec-disc", {NULL}, 40853, "udp"}, -{"fs-qos", {NULL}, 41111, "tcp"}, -{"fs-qos", {NULL}, 41111, "udp"}, -{"tentacle", {NULL}, 41121, "tcp"}, -{"crestron-cip", {NULL}, 41794, "tcp"}, -{"crestron-cip", {NULL}, 41794, "udp"}, -{"crestron-ctp", {NULL}, 41795, "tcp"}, -{"crestron-ctp", {NULL}, 41795, "udp"}, -{"candp", {NULL}, 42508, "tcp"}, -{"candp", {NULL}, 42508, "udp"}, -{"candrp", {NULL}, 42509, "tcp"}, -{"candrp", {NULL}, 42509, "udp"}, -{"caerpc", {NULL}, 42510, "tcp"}, -{"caerpc", {NULL}, 42510, "udp"}, -{"reachout", {NULL}, 43188, "tcp"}, -{"reachout", {NULL}, 43188, "udp"}, -{"ndm-agent-port", {NULL}, 43189, "tcp"}, -{"ndm-agent-port", {NULL}, 43189, "udp"}, -{"ip-provision", {NULL}, 43190, "tcp"}, -{"ip-provision", {NULL}, 43190, "udp"}, -{"noit-transport", {NULL}, 43191, "tcp"}, -{"ew-mgmt", {NULL}, 43440, "tcp"}, -{"ew-disc-cmd", {NULL}, 43440, "udp"}, -{"ciscocsdb", {NULL}, 43441, "tcp"}, -{"ciscocsdb", {NULL}, 43441, "udp"}, -{"pmcd", {NULL}, 44321, "tcp"}, -{"pmcd", {NULL}, 44321, "udp"}, -{"pmcdproxy", {NULL}, 44322, "tcp"}, -{"pmcdproxy", {NULL}, 44322, "udp"}, -{"pcp", {NULL}, 44323, "udp"}, -{"rbr-debug", {NULL}, 44553, "tcp"}, -{"rbr-debug", {NULL}, 44553, "udp"}, -{"EtherNet/IP-2", {NULL}, 44818, "tcp"}, -{"EtherNet/IP-2", {NULL}, 44818, "udp"}, -{"invision-ag", {NULL}, 45054, "tcp"}, -{"invision-ag", {NULL}, 45054, "udp"}, -{"eba", {NULL}, 45678, "tcp"}, -{"eba", {NULL}, 45678, "udp"}, -{"qdb2service", {NULL}, 45825, "tcp"}, -{"qdb2service", {NULL}, 45825, "udp"}, -{"ssr-servermgr", {NULL}, 45966, "tcp"}, -{"ssr-servermgr", {NULL}, 45966, "udp"}, -{"mediabox", {NULL}, 46999, "tcp"}, -{"mediabox", {NULL}, 46999, "udp"}, -{"mbus", {NULL}, 47000, "tcp"}, -{"mbus", {NULL}, 47000, "udp"}, -{"winrm", {NULL}, 47001, "tcp"}, -{"dbbrowse", {NULL}, 47557, "tcp"}, -{"dbbrowse", {NULL}, 47557, "udp"}, -{"directplaysrvr", {NULL}, 47624, "tcp"}, -{"directplaysrvr", {NULL}, 47624, "udp"}, -{"ap", {NULL}, 47806, "tcp"}, -{"ap", {NULL}, 47806, "udp"}, -{"bacnet", {NULL}, 47808, "tcp"}, -{"bacnet", {NULL}, 47808, "udp"}, -{"nimcontroller", {NULL}, 48000, "tcp"}, -{"nimcontroller", {NULL}, 48000, "udp"}, -{"nimspooler", {NULL}, 48001, "tcp"}, -{"nimspooler", {NULL}, 48001, "udp"}, -{"nimhub", {NULL}, 48002, "tcp"}, -{"nimhub", {NULL}, 48002, "udp"}, -{"nimgtw", {NULL}, 48003, "tcp"}, -{"nimgtw", {NULL}, 48003, "udp"}, -{"nimbusdb", {NULL}, 48004, "tcp"}, -{"nimbusdbctrl", {NULL}, 48005, "tcp"}, -{"3gpp-cbsp", {NULL}, 48049, "tcp"}, -{"isnetserv", {NULL}, 48128, "tcp"}, -{"isnetserv", {NULL}, 48128, "udp"}, -{"blp5", {NULL}, 48129, "tcp"}, -{"blp5", {NULL}, 48129, "udp"}, -{"com-bardac-dw", {NULL}, 48556, "tcp"}, -{"com-bardac-dw", {NULL}, 48556, "udp"}, -{"iqobject", {NULL}, 48619, "tcp"}, -{"iqobject", {NULL}, 48619, "udp"}, -#endif /* USE_IANA_REGISTERED_PORTS */ -{ NULL, {NULL}, 0, NULL } -}; - -struct servent *getservbyport(int port, const char *proto) -{ - unsigned short u_port; - const char *protocol = NULL; - int i, error = 0; - - u_port = ntohs((unsigned short)port); - - if (proto) - { - switch (strlen(proto)) { - case 3: - if (!strncasecmp(proto, "tcp", 3)) - protocol = "tcp"; - else if (!strncasecmp(proto, "udp", 3)) - protocol = "udp"; - else - error = WSAEFAULT; - break; - case 4: - if (!strncasecmp(proto, "sctp", 4)) - protocol = "sctp"; - else if (!strncasecmp(proto, "dccp", 4)) - protocol = "dccp"; - else - error = WSAEFAULT; - break; - default: - error = WSAEFAULT; - } - } - - if (!error) - { - for (i = 0; i < (sizeof(IANAports) / sizeof(IANAports[0])) - 1; i++) - { - if (u_port == IANAports[i].s_port) - { - if (!protocol || !strcasecmp(protocol, IANAports[i].s_proto)) - return (struct servent *)&IANAports[i]; - } - } - error = WSANO_DATA; - } - - SET_SOCKERRNO(error); - return NULL; -} - -#endif /* _WIN32_WCE */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_platform.h nodejs-mozilla-12.22.12/deps/cares/src/ares_platform.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_platform.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_platform.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -#ifndef HEADER_CARES_PLATFORM_H -#define HEADER_CARES_PLATFORM_H - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004 - 2011 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#if defined(WIN32) && !defined(MSDOS) - -typedef enum { - WIN_UNKNOWN, - WIN_3X, - WIN_9X, - WIN_NT, - WIN_CE -} win_platform; - -win_platform ares__getplatform(void); - -#endif - -#if defined(_WIN32_WCE) - -struct servent *getservbyport(int port, const char *proto); - -#endif - -#endif /* HEADER_CARES_PLATFORM_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_private.h nodejs-mozilla-12.22.12/deps/cares/src/ares_private.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_private.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_private.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,422 +0,0 @@ -#ifndef __ARES_PRIVATE_H -#define __ARES_PRIVATE_H - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004-2010 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -/* - * Define WIN32 when build target is Win32 API - */ - -#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) -#define WIN32 -#endif - -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#ifdef WATT32 -#include -#include -#define writev(s,v,c) writev_s(s,v,c) -#define HAVE_WRITEV 1 -#endif - -#define DEFAULT_TIMEOUT 5000 /* milliseconds */ -#define DEFAULT_TRIES 4 -#ifndef INADDR_NONE -#define INADDR_NONE 0xffffffff -#endif - -#ifdef CARES_EXPOSE_STATICS -/* Make some internal functions visible for testing */ -#define STATIC_TESTABLE -#else -#define STATIC_TESTABLE static -#endif - -#if defined(WIN32) && !defined(WATT32) - -#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP" -#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters" -#define WIN_DNSCLIENT "Software\\Policies\\Microsoft\\System\\DNSClient" -#define WIN_NT_DNSCLIENT "Software\\Policies\\Microsoft\\Windows NT\\DNSClient" -#define NAMESERVER "NameServer" -#define DHCPNAMESERVER "DhcpNameServer" -#define DATABASEPATH "DatabasePath" -#define WIN_PATH_HOSTS "\\hosts" -#define SEARCHLIST_KEY "SearchList" -#define PRIMARYDNSSUFFIX_KEY "PrimaryDNSSuffix" -#define INTERFACES_KEY "Interfaces" -#define DOMAIN_KEY "Domain" -#define DHCPDOMAIN_KEY "DhcpDomain" - -#elif defined(WATT32) - -#define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf" - -#elif defined(NETWARE) - -#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg" -#define PATH_HOSTS "sys:/etc/hosts" - -#elif defined(__riscos__) - -#define PATH_HOSTS "InetDBase:Hosts" - -#else - -#define PATH_RESOLV_CONF "/etc/resolv.conf" -#ifdef ETC_INET -#define PATH_HOSTS "/etc/inet/hosts" -#else -#define PATH_HOSTS "/etc/hosts" -#endif - -#endif - -#define ARES_ID_KEY_LEN 31 - -#include "ares_ipv6.h" -#include "ares_llist.h" - -#ifndef HAVE_GETENV -# include "ares_getenv.h" -# define getenv(ptr) ares_getenv(ptr) -#endif - -#include "ares_strdup.h" -#include "ares_strsplit.h" - -#ifndef HAVE_STRCASECMP -# include "ares_strcasecmp.h" -# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2) -#endif - -#ifndef HAVE_STRNCASECMP -# include "ares_strcasecmp.h" -# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n) -#endif - -#ifndef HAVE_WRITEV -# include "ares_writev.h" -# define writev(s,ptr,cnt) ares_writev(s,ptr,cnt) -#endif - -/********* EDNS defines section ******/ -#define EDNSPACKETSZ 1280 /* Reasonable UDP payload size, as suggested - in RFC2671 */ -#define MAXENDSSZ 4096 /* Maximum (local) limit for edns packet size */ -#define EDNSFIXEDSZ 11 /* Size of EDNS header */ -/********* EDNS defines section ******/ - -struct ares_addr { - int family; - union { - struct in_addr addr4; - struct ares_in6_addr addr6; - } addr; - int udp_port; /* stored in network order */ - int tcp_port; /* stored in network order */ -}; -#define addrV4 addr.addr4 -#define addrV6 addr.addr6 - -struct query; - -struct send_request { - /* Remaining data to send */ - const unsigned char *data; - size_t len; - - /* The query for which we're sending this data */ - struct query* owner_query; - /* The buffer we're using, if we have our own copy of the packet */ - unsigned char *data_storage; - - /* Next request in queue */ - struct send_request *next; -}; - -struct server_state { - struct ares_addr addr; - ares_socket_t udp_socket; - ares_socket_t tcp_socket; - - /* Mini-buffer for reading the length word */ - unsigned char tcp_lenbuf[2]; - int tcp_lenbuf_pos; - int tcp_length; - - /* Buffer for reading actual TCP data */ - unsigned char *tcp_buffer; - int tcp_buffer_pos; - - /* TCP output queue */ - struct send_request *qhead; - struct send_request *qtail; - - /* Which incarnation of this connection is this? We don't want to - * retransmit requests into the very same socket, but if the server - * closes on us and we re-open the connection, then we do want to - * re-send. */ - int tcp_connection_generation; - - /* Circular, doubly-linked list of outstanding queries to this server */ - struct list_node queries_to_server; - - /* Link back to owning channel */ - ares_channel channel; - - /* Is this server broken? We mark connections as broken when a - * request that is queued for sending times out. - */ - int is_broken; -}; - -/* State to represent a DNS query */ -struct query { - /* Query ID from qbuf, for faster lookup, and current timeout */ - unsigned short qid; - struct timeval timeout; - - /* - * Links for the doubly-linked lists in which we insert a query. - * These circular, doubly-linked lists that are hash-bucketed based - * the attributes we care about, help making most important - * operations O(1). - */ - struct list_node queries_by_qid; /* hopefully in same cache line as qid */ - struct list_node queries_by_timeout; - struct list_node queries_to_server; - struct list_node all_queries; - - /* Query buf with length at beginning, for TCP transmission */ - unsigned char *tcpbuf; - int tcplen; - - /* Arguments passed to ares_send() (qbuf points into tcpbuf) */ - const unsigned char *qbuf; - int qlen; - ares_callback callback; - void *arg; - - /* Query status */ - int try_count; /* Number of times we tried this query already. */ - int server; /* Server this query has last been sent to. */ - struct query_server_info *server_info; /* per-server state */ - int using_tcp; - int error_status; - int timeouts; /* number of timeouts we saw for this request */ -}; - -/* Per-server state for a query */ -struct query_server_info { - int skip_server; /* should we skip server, due to errors, etc? */ - int tcp_connection_generation; /* into which TCP connection did we send? */ -}; - -/* An IP address pattern; matches an IP address X if X & mask == addr */ -#define PATTERN_MASK 0x1 -#define PATTERN_CIDR 0x2 - -struct apattern { - union - { - struct in_addr addr4; - struct ares_in6_addr addr6; - } addr; - union - { - struct in_addr addr4; - struct ares_in6_addr addr6; - unsigned short bits; - } mask; - int family; - unsigned short type; -}; - -typedef struct rc4_key -{ - unsigned char state[256]; - unsigned char x; - unsigned char y; -} rc4_key; - -struct ares_channeldata { - /* Configuration data */ - int flags; - int timeout; /* in milliseconds */ - int tries; - int ndots; - int rotate; /* if true, all servers specified are used */ - int udp_port; /* stored in network order */ - int tcp_port; /* stored in network order */ - int socket_send_buffer_size; - int socket_receive_buffer_size; - char **domains; - int ndomains; - struct apattern *sortlist; - int nsort; - char *lookups; - int ednspsz; - - /* For binding to local devices and/or IP addresses. Leave - * them null/zero for no binding. - */ - char local_dev_name[32]; - unsigned int local_ip4; - unsigned char local_ip6[16]; - - int optmask; /* the option bitfield passed in at init time */ - - /* Server addresses and communications state */ - struct server_state *servers; - int nservers; - - /* ID to use for next query */ - unsigned short next_id; - /* key to use when generating new ids */ - rc4_key id_key; - - /* Generation number to use for the next TCP socket open/close */ - int tcp_connection_generation; - - /* The time at which we last called process_timeouts(). Uses integer seconds - just to draw the line somewhere. */ - time_t last_timeout_processed; - - /* Last server we sent a query to. */ - int last_server; - - /* Circular, doubly-linked list of queries, bucketed various ways.... */ - /* All active queries in a single list: */ - struct list_node all_queries; - /* Queries bucketed by qid, for quickly dispatching DNS responses: */ -#define ARES_QID_TABLE_SIZE 2048 - struct list_node queries_by_qid[ARES_QID_TABLE_SIZE]; - /* Queries bucketed by timeout, for quickly handling timeouts: */ -#define ARES_TIMEOUT_TABLE_SIZE 1024 - struct list_node queries_by_timeout[ARES_TIMEOUT_TABLE_SIZE]; - - ares_sock_state_cb sock_state_cb; - void *sock_state_cb_data; - - ares_sock_create_callback sock_create_cb; - void *sock_create_cb_data; - - ares_sock_config_callback sock_config_cb; - void *sock_config_cb_data; - - const struct ares_socket_functions * sock_funcs; - void *sock_func_cb_data; - - /* Path for resolv.conf file, configurable via ares_options */ - char *resolvconf_path; -}; - -/* Does the domain end in ".onion" or ".onion."? Case-insensitive. */ -int ares__is_onion_domain(const char *name); - -/* Memory management functions */ -extern void *(*ares_malloc)(size_t size); -extern void *(*ares_realloc)(void *ptr, size_t size); -extern void (*ares_free)(void *ptr); - -/* return true if now is exactly check time or later */ -int ares__timedout(struct timeval *now, - struct timeval *check); - -void ares__send_query(ares_channel channel, struct query *query, - struct timeval *now); -void ares__close_sockets(ares_channel channel, struct server_state *server); -int ares__get_hostent(FILE *fp, int family, struct hostent **host); -int ares__read_line(FILE *fp, char **buf, size_t *bufsize); -void ares__free_query(struct query *query); -unsigned short ares__generate_new_id(rc4_key* key); -struct timeval ares__tvnow(void); -int ares__expand_name_for_response(const unsigned char *encoded, - const unsigned char *abuf, int alen, - char **s, long *enclen); -void ares__init_servers_state(ares_channel channel); -void ares__destroy_servers_state(ares_channel channel); -int ares__parse_qtype_reply(const unsigned char* abuf, int alen, int* qtype); -int ares__single_domain(ares_channel channel, const char *name, char **s); -int ares__cat_domain(const char *name, const char *domain, char **s); -int ares__sortaddrinfo(ares_channel channel, struct ares_addrinfo_node *ai_node); -int ares__readaddrinfo(FILE *fp, const char *name, unsigned short port, - const struct ares_addrinfo_hints *hints, - struct ares_addrinfo *ai); - -struct ares_addrinfo *ares__malloc_addrinfo(void); - -struct ares_addrinfo_node *ares__malloc_addrinfo_node(void); -void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *ai_node); - -struct ares_addrinfo_node *ares__append_addrinfo_node(struct ares_addrinfo_node **ai_node); -void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head, - struct ares_addrinfo_node *tail); - -struct ares_addrinfo_cname *ares__malloc_addrinfo_cname(void); -void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *ai_cname); - -struct ares_addrinfo_cname *ares__append_addrinfo_cname(struct ares_addrinfo_cname **ai_cname); - -void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head, - struct ares_addrinfo_cname *tail); - -int ares__parse_into_addrinfo(const unsigned char *abuf, - int alen, - struct ares_addrinfo *ai); - -int ares__parse_into_addrinfo2(const unsigned char *abuf, - int alen, - char **question_hostname, - struct ares_addrinfo *ai); - -#if 0 /* Not used */ -long ares__tvdiff(struct timeval t1, struct timeval t2); -#endif - -ares_socket_t ares__open_socket(ares_channel channel, - int af, int type, int protocol); -void ares__close_socket(ares_channel, ares_socket_t); -int ares__connect_socket(ares_channel channel, - ares_socket_t sockfd, - const struct sockaddr *addr, - ares_socklen_t addrlen); - -#define ARES_SWAP_BYTE(a,b) \ - { unsigned char swapByte = *(a); *(a) = *(b); *(b) = swapByte; } - -#define SOCK_STATE_CALLBACK(c, s, r, w) \ - do { \ - if ((c)->sock_state_cb) \ - (c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w)); \ - } WHILE_FALSE - -#ifdef CURLDEBUG -/* This is low-level hard-hacking memory leak tracking and similar. Using the - libcurl lowlevel code from within library is ugly and only works when - c-ares is built and linked with a similarly curldebug-enabled libcurl, - but we do this anyway for convenience. */ -#define HEADER_CURL_SETUP_ONCE_H -#include "../lib/memdebug.h" -#endif - -#endif /* __ARES_PRIVATE_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_process.c nodejs-mozilla-12.22.12/deps/cares/src/ares_process.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_process.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_process.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,1475 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * Copyright (C) 2004-2017 by Daniel Stenberg - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_SYS_UIO_H -# include -#endif -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETINET_TCP_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_IOCTL_H -# include -#endif -#ifdef NETWARE -# include -#endif - -#include -#include -#include - -#include "ares.h" -#include "ares_dns.h" -#include "ares_nowarn.h" -#include "ares_private.h" - - -static int try_again(int errnum); -static void write_tcp_data(ares_channel channel, fd_set *write_fds, - ares_socket_t write_fd, struct timeval *now); -static void read_tcp_data(ares_channel channel, fd_set *read_fds, - ares_socket_t read_fd, struct timeval *now); -static void read_udp_packets(ares_channel channel, fd_set *read_fds, - ares_socket_t read_fd, struct timeval *now); -static void advance_tcp_send_queue(ares_channel channel, int whichserver, - ares_ssize_t num_bytes); -static void process_timeouts(ares_channel channel, struct timeval *now); -static void process_broken_connections(ares_channel channel, - struct timeval *now); -static void process_answer(ares_channel channel, unsigned char *abuf, - int alen, int whichserver, int tcp, - struct timeval *now); -static void handle_error(ares_channel channel, int whichserver, - struct timeval *now); -static void skip_server(ares_channel channel, struct query *query, - int whichserver); -static void next_server(ares_channel channel, struct query *query, - struct timeval *now); -static int open_tcp_socket(ares_channel channel, struct server_state *server); -static int open_udp_socket(ares_channel channel, struct server_state *server); -static int same_questions(const unsigned char *qbuf, int qlen, - const unsigned char *abuf, int alen); -static int same_address(struct sockaddr *sa, struct ares_addr *aa); -static void end_query(ares_channel channel, struct query *query, int status, - unsigned char *abuf, int alen); - -/* return true if now is exactly check time or later */ -int ares__timedout(struct timeval *now, - struct timeval *check) -{ - long secs = (now->tv_sec - check->tv_sec); - - if(secs > 0) - return 1; /* yes, timed out */ - if(secs < 0) - return 0; /* nope, not timed out */ - - /* if the full seconds were identical, check the sub second parts */ - return (now->tv_usec - check->tv_usec >= 0); -} - -/* add the specific number of milliseconds to the time in the first argument */ -static void timeadd(struct timeval *now, int millisecs) -{ - now->tv_sec += millisecs/1000; - now->tv_usec += (millisecs%1000)*1000; - - if(now->tv_usec >= 1000000) { - ++(now->tv_sec); - now->tv_usec -= 1000000; - } -} - -/* - * generic process function - */ -static void processfds(ares_channel channel, - fd_set *read_fds, ares_socket_t read_fd, - fd_set *write_fds, ares_socket_t write_fd) -{ - struct timeval now = ares__tvnow(); - - write_tcp_data(channel, write_fds, write_fd, &now); - read_tcp_data(channel, read_fds, read_fd, &now); - read_udp_packets(channel, read_fds, read_fd, &now); - process_timeouts(channel, &now); - process_broken_connections(channel, &now); -} - -/* Something interesting happened on the wire, or there was a timeout. - * See what's up and respond accordingly. - */ -void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds) -{ - processfds(channel, read_fds, ARES_SOCKET_BAD, write_fds, ARES_SOCKET_BAD); -} - -/* Something interesting happened on the wire, or there was a timeout. - * See what's up and respond accordingly. - */ -void ares_process_fd(ares_channel channel, - ares_socket_t read_fd, /* use ARES_SOCKET_BAD or valid - file descriptors */ - ares_socket_t write_fd) -{ - processfds(channel, NULL, read_fd, NULL, write_fd); -} - - -/* Return 1 if the specified error number describes a readiness error, or 0 - * otherwise. This is mostly for HP-UX, which could return EAGAIN or - * EWOULDBLOCK. See this man page - * - * http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html? - * manpage=/usr/share/man/man2.Z/send.2 - */ -static int try_again(int errnum) -{ -#if !defined EWOULDBLOCK && !defined EAGAIN -#error "Neither EWOULDBLOCK nor EAGAIN defined" -#endif - switch (errnum) - { -#ifdef EWOULDBLOCK - case EWOULDBLOCK: - return 1; -#endif -#if defined EAGAIN && EAGAIN != EWOULDBLOCK - case EAGAIN: - return 1; -#endif - } - return 0; -} - -static ares_ssize_t socket_writev(ares_channel channel, ares_socket_t s, const struct iovec * vec, int len) -{ - if (channel->sock_funcs) - return channel->sock_funcs->asendv(s, vec, len, channel->sock_func_cb_data); - - return writev(s, vec, len); -} - -static ares_ssize_t socket_write(ares_channel channel, ares_socket_t s, const void * data, size_t len) -{ - if (channel->sock_funcs) - { - struct iovec vec; - vec.iov_base = (void*)data; - vec.iov_len = len; - return channel->sock_funcs->asendv(s, &vec, 1, channel->sock_func_cb_data); - } - return swrite(s, data, len); -} - -/* If any TCP sockets select true for writing, write out queued data - * we have for them. - */ -static void write_tcp_data(ares_channel channel, - fd_set *write_fds, - ares_socket_t write_fd, - struct timeval *now) -{ - struct server_state *server; - struct send_request *sendreq; - struct iovec *vec; - int i; - ares_ssize_t scount; - ares_ssize_t wcount; - size_t n; - - if(!write_fds && (write_fd == ARES_SOCKET_BAD)) - /* no possible action */ - return; - - for (i = 0; i < channel->nservers; i++) - { - /* Make sure server has data to send and is selected in write_fds or - write_fd. */ - server = &channel->servers[i]; - if (!server->qhead || server->tcp_socket == ARES_SOCKET_BAD || - server->is_broken) - continue; - - if(write_fds) { - if(!FD_ISSET(server->tcp_socket, write_fds)) - continue; - } - else { - if(server->tcp_socket != write_fd) - continue; - } - - if(write_fds) - /* If there's an error and we close this socket, then open - * another with the same fd to talk to another server, then we - * don't want to think that it was the new socket that was - * ready. This is not disastrous, but is likely to result in - * extra system calls and confusion. */ - FD_CLR(server->tcp_socket, write_fds); - - /* Count the number of send queue items. */ - n = 0; - for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) - n++; - - /* Allocate iovecs so we can send all our data at once. */ - vec = ares_malloc(n * sizeof(struct iovec)); - if (vec) - { - /* Fill in the iovecs and send. */ - n = 0; - for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) - { - vec[n].iov_base = (char *) sendreq->data; - vec[n].iov_len = sendreq->len; - n++; - } - wcount = socket_writev(channel, server->tcp_socket, vec, (int)n); - ares_free(vec); - if (wcount < 0) - { - if (!try_again(SOCKERRNO)) - handle_error(channel, i, now); - continue; - } - - /* Advance the send queue by as many bytes as we sent. */ - advance_tcp_send_queue(channel, i, wcount); - } - else - { - /* Can't allocate iovecs; just send the first request. */ - sendreq = server->qhead; - - scount = socket_write(channel, server->tcp_socket, sendreq->data, sendreq->len); - if (scount < 0) - { - if (!try_again(SOCKERRNO)) - handle_error(channel, i, now); - continue; - } - - /* Advance the send queue by as many bytes as we sent. */ - advance_tcp_send_queue(channel, i, scount); - } - } -} - -/* Consume the given number of bytes from the head of the TCP send queue. */ -static void advance_tcp_send_queue(ares_channel channel, int whichserver, - ares_ssize_t num_bytes) -{ - struct send_request *sendreq; - struct server_state *server = &channel->servers[whichserver]; - while (num_bytes > 0) { - sendreq = server->qhead; - if ((size_t)num_bytes >= sendreq->len) { - num_bytes -= sendreq->len; - server->qhead = sendreq->next; - if (sendreq->data_storage) - ares_free(sendreq->data_storage); - ares_free(sendreq); - if (server->qhead == NULL) { - SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0); - server->qtail = NULL; - - /* qhead is NULL so we cannot continue this loop */ - break; - } - } - else { - sendreq->data += num_bytes; - sendreq->len -= num_bytes; - num_bytes = 0; - } - } -} - -static ares_ssize_t socket_recvfrom(ares_channel channel, - ares_socket_t s, - void * data, - size_t data_len, - int flags, - struct sockaddr *from, - ares_socklen_t *from_len) -{ - if (channel->sock_funcs) - return channel->sock_funcs->arecvfrom(s, data, data_len, - flags, from, from_len, - channel->sock_func_cb_data); - -#ifdef HAVE_RECVFROM - return recvfrom(s, data, data_len, flags, from, from_len); -#else - return sread(s, data, data_len); -#endif -} - -static ares_ssize_t socket_recv(ares_channel channel, - ares_socket_t s, - void * data, - size_t data_len) -{ - if (channel->sock_funcs) - return channel->sock_funcs->arecvfrom(s, data, data_len, 0, 0, 0, - channel->sock_func_cb_data); - - return sread(s, data, data_len); -} - -/* If any TCP socket selects true for reading, read some data, - * allocate a buffer if we finish reading the length word, and process - * a packet if we finish reading one. - */ -static void read_tcp_data(ares_channel channel, fd_set *read_fds, - ares_socket_t read_fd, struct timeval *now) -{ - struct server_state *server; - int i; - ares_ssize_t count; - - if(!read_fds && (read_fd == ARES_SOCKET_BAD)) - /* no possible action */ - return; - - for (i = 0; i < channel->nservers; i++) - { - /* Make sure the server has a socket and is selected in read_fds. */ - server = &channel->servers[i]; - if (server->tcp_socket == ARES_SOCKET_BAD || server->is_broken) - continue; - - if(read_fds) { - if(!FD_ISSET(server->tcp_socket, read_fds)) - continue; - } - else { - if(server->tcp_socket != read_fd) - continue; - } - - if(read_fds) - /* If there's an error and we close this socket, then open another - * with the same fd to talk to another server, then we don't want to - * think that it was the new socket that was ready. This is not - * disastrous, but is likely to result in extra system calls and - * confusion. */ - FD_CLR(server->tcp_socket, read_fds); - - if (server->tcp_lenbuf_pos != 2) - { - /* We haven't yet read a length word, so read that (or - * what's left to read of it). - */ - count = socket_recv(channel, server->tcp_socket, - server->tcp_lenbuf + server->tcp_lenbuf_pos, - 2 - server->tcp_lenbuf_pos); - if (count <= 0) - { - if (!(count == -1 && try_again(SOCKERRNO))) - handle_error(channel, i, now); - continue; - } - - server->tcp_lenbuf_pos += (int)count; - if (server->tcp_lenbuf_pos == 2) - { - /* We finished reading the length word. Decode the - * length and allocate a buffer for the data. - */ - server->tcp_length = server->tcp_lenbuf[0] << 8 - | server->tcp_lenbuf[1]; - server->tcp_buffer = ares_malloc(server->tcp_length); - if (!server->tcp_buffer) { - handle_error(channel, i, now); - return; /* bail out on malloc failure. TODO: make this - function return error codes */ - } - server->tcp_buffer_pos = 0; - } - } - else - { - /* Read data into the allocated buffer. */ - count = socket_recv(channel, server->tcp_socket, - server->tcp_buffer + server->tcp_buffer_pos, - server->tcp_length - server->tcp_buffer_pos); - if (count <= 0) - { - if (!(count == -1 && try_again(SOCKERRNO))) - handle_error(channel, i, now); - continue; - } - - server->tcp_buffer_pos += (int)count; - if (server->tcp_buffer_pos == server->tcp_length) - { - /* We finished reading this answer; process it and - * prepare to read another length word. - */ - process_answer(channel, server->tcp_buffer, server->tcp_length, - i, 1, now); - ares_free(server->tcp_buffer); - server->tcp_buffer = NULL; - server->tcp_lenbuf_pos = 0; - server->tcp_buffer_pos = 0; - } - } - } -} - -/* If any UDP sockets select true for reading, process them. */ -static void read_udp_packets(ares_channel channel, fd_set *read_fds, - ares_socket_t read_fd, struct timeval *now) -{ - struct server_state *server; - int i; - ares_ssize_t count; - unsigned char buf[MAXENDSSZ + 1]; -#ifdef HAVE_RECVFROM - ares_socklen_t fromlen; - union { - struct sockaddr sa; - struct sockaddr_in sa4; - struct sockaddr_in6 sa6; - } from; -#endif - - if(!read_fds && (read_fd == ARES_SOCKET_BAD)) - /* no possible action */ - return; - - for (i = 0; i < channel->nservers; i++) - { - /* Make sure the server has a socket and is selected in read_fds. */ - server = &channel->servers[i]; - - if (server->udp_socket == ARES_SOCKET_BAD || server->is_broken) - continue; - - if(read_fds) { - if(!FD_ISSET(server->udp_socket, read_fds)) - continue; - } - else { - if(server->udp_socket != read_fd) - continue; - } - - if(read_fds) - /* If there's an error and we close this socket, then open - * another with the same fd to talk to another server, then we - * don't want to think that it was the new socket that was - * ready. This is not disastrous, but is likely to result in - * extra system calls and confusion. */ - FD_CLR(server->udp_socket, read_fds); - - /* To reduce event loop overhead, read and process as many - * packets as we can. */ - do { - if (server->udp_socket == ARES_SOCKET_BAD) - count = 0; - - else { - if (server->addr.family == AF_INET) - fromlen = sizeof(from.sa4); - else - fromlen = sizeof(from.sa6); - count = socket_recvfrom(channel, server->udp_socket, (void *)buf, - sizeof(buf), 0, &from.sa, &fromlen); - } - - if (count == -1 && try_again(SOCKERRNO)) - continue; - else if (count <= 0) - handle_error(channel, i, now); -#ifdef HAVE_RECVFROM - else if (!same_address(&from.sa, &server->addr)) - /* The address the response comes from does not match the address we - * sent the request to. Someone may be attempting to perform a cache - * poisoning attack. */ - break; -#endif - else - process_answer(channel, buf, (int)count, i, 0, now); - } while (count > 0); - } -} - -/* If any queries have timed out, note the timeout and move them on. */ -static void process_timeouts(ares_channel channel, struct timeval *now) -{ - time_t t; /* the time of the timeouts we're processing */ - struct query *query; - struct list_node* list_head; - struct list_node* list_node; - - /* Process all the timeouts that have fired since the last time we processed - * timeouts. If things are going well, then we'll have hundreds/thousands of - * queries that fall into future buckets, and only a handful of requests - * that fall into the "now" bucket, so this should be quite quick. - */ - for (t = channel->last_timeout_processed; t <= now->tv_sec; t++) - { - list_head = &(channel->queries_by_timeout[t % ARES_TIMEOUT_TABLE_SIZE]); - for (list_node = list_head->next; list_node != list_head; ) - { - query = list_node->data; - list_node = list_node->next; /* in case the query gets deleted */ - if (query->timeout.tv_sec && ares__timedout(now, &query->timeout)) - { - query->error_status = ARES_ETIMEOUT; - ++query->timeouts; - next_server(channel, query, now); - } - } - } - channel->last_timeout_processed = now->tv_sec; -} - -/* Handle an answer from a server. */ -static void process_answer(ares_channel channel, unsigned char *abuf, - int alen, int whichserver, int tcp, - struct timeval *now) -{ - int tc, rcode, packetsz; - unsigned short id; - struct query *query; - struct list_node* list_head; - struct list_node* list_node; - - /* If there's no room in the answer for a header, we can't do much - * with it. */ - if (alen < HFIXEDSZ) - return; - - /* Grab the query ID, truncate bit, and response code from the packet. */ - id = DNS_HEADER_QID(abuf); - tc = DNS_HEADER_TC(abuf); - rcode = DNS_HEADER_RCODE(abuf); - - /* Find the query corresponding to this packet. The queries are - * hashed/bucketed by query id, so this lookup should be quick. Note that - * both the query id and the questions must be the same; when the query id - * wraps around we can have multiple outstanding queries with the same query - * id, so we need to check both the id and question. - */ - query = NULL; - list_head = &(channel->queries_by_qid[id % ARES_QID_TABLE_SIZE]); - for (list_node = list_head->next; list_node != list_head; - list_node = list_node->next) - { - struct query *q = list_node->data; - if ((q->qid == id) && same_questions(q->qbuf, q->qlen, abuf, alen)) - { - query = q; - break; - } - } - if (!query) - return; - - packetsz = PACKETSZ; - /* If we use EDNS and server answers with one of these RCODES, the protocol - * extension is not understood by the responder. We must retry the query - * without EDNS enabled. - */ - if (channel->flags & ARES_FLAG_EDNS) - { - packetsz = channel->ednspsz; - if (rcode == NOTIMP || rcode == FORMERR || rcode == SERVFAIL) - { - int qlen = (query->tcplen - 2) - EDNSFIXEDSZ; - channel->flags ^= ARES_FLAG_EDNS; - query->tcplen -= EDNSFIXEDSZ; - query->qlen -= EDNSFIXEDSZ; - query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff); - query->tcpbuf[1] = (unsigned char)(qlen & 0xff); - DNS_HEADER_SET_ARCOUNT(query->tcpbuf + 2, 0); - query->tcpbuf = ares_realloc(query->tcpbuf, query->tcplen); - query->qbuf = query->tcpbuf + 2; - ares__send_query(channel, query, now); - return; - } - } - - /* If we got a truncated UDP packet and are not ignoring truncation, - * don't accept the packet, and switch the query to TCP if we hadn't - * done so already. - */ - if ((tc || alen > packetsz) && !tcp && !(channel->flags & ARES_FLAG_IGNTC)) - { - if (!query->using_tcp) - { - query->using_tcp = 1; - ares__send_query(channel, query, now); - } - return; - } - - /* Limit alen to PACKETSZ if we aren't using TCP (only relevant if we - * are ignoring truncation. - */ - if (alen > packetsz && !tcp) - alen = packetsz; - - /* If we aren't passing through all error packets, discard packets - * with SERVFAIL, NOTIMP, or REFUSED response codes. - */ - if (!(channel->flags & ARES_FLAG_NOCHECKRESP)) - { - if (rcode == SERVFAIL || rcode == NOTIMP || rcode == REFUSED) - { - skip_server(channel, query, whichserver); - if (query->server == whichserver) - next_server(channel, query, now); - return; - } - } - - end_query(channel, query, ARES_SUCCESS, abuf, alen); -} - -/* Close all the connections that are no longer usable. */ -static void process_broken_connections(ares_channel channel, - struct timeval *now) -{ - int i; - for (i = 0; i < channel->nservers; i++) - { - struct server_state *server = &channel->servers[i]; - if (server->is_broken) - { - handle_error(channel, i, now); - } - } -} - -/* Swap the contents of two lists */ -static void swap_lists(struct list_node* head_a, - struct list_node* head_b) -{ - int is_a_empty = ares__is_list_empty(head_a); - int is_b_empty = ares__is_list_empty(head_b); - struct list_node old_a = *head_a; - struct list_node old_b = *head_b; - - if (is_a_empty) { - ares__init_list_head(head_b); - } else { - *head_b = old_a; - old_a.next->prev = head_b; - old_a.prev->next = head_b; - } - if (is_b_empty) { - ares__init_list_head(head_a); - } else { - *head_a = old_b; - old_b.next->prev = head_a; - old_b.prev->next = head_a; - } -} - -static void handle_error(ares_channel channel, int whichserver, - struct timeval *now) -{ - struct server_state *server; - struct query *query; - struct list_node list_head; - struct list_node* list_node; - - server = &channel->servers[whichserver]; - - /* Reset communications with this server. */ - ares__close_sockets(channel, server); - - /* Tell all queries talking to this server to move on and not try this - * server again. We steal the current list of queries that were in-flight to - * this server, since when we call next_server this can cause the queries to - * be re-sent to this server, which will re-insert these queries in that - * same server->queries_to_server list. - */ - ares__init_list_head(&list_head); - swap_lists(&list_head, &(server->queries_to_server)); - for (list_node = list_head.next; list_node != &list_head; ) - { - query = list_node->data; - list_node = list_node->next; /* in case the query gets deleted */ - assert(query->server == whichserver); - skip_server(channel, query, whichserver); - next_server(channel, query, now); - } - /* Each query should have removed itself from our temporary list as - * it re-sent itself or finished up... - */ - assert(ares__is_list_empty(&list_head)); -} - -static void skip_server(ares_channel channel, struct query *query, - int whichserver) -{ - /* The given server gave us problems with this query, so if we have the - * luxury of using other servers, then let's skip the potentially broken - * server and just use the others. If we only have one server and we need to - * retry then we should just go ahead and re-use that server, since it's our - * only hope; perhaps we just got unlucky, and retrying will work (eg, the - * server timed out our TCP connection just as we were sending another - * request). - */ - if (channel->nservers > 1) - { - query->server_info[whichserver].skip_server = 1; - } -} - -static void next_server(ares_channel channel, struct query *query, - struct timeval *now) -{ - /* We need to try each server channel->tries times. We have channel->nservers - * servers to try. In total, we need to do channel->nservers * channel->tries - * attempts. Use query->try to remember how many times we already attempted - * this query. Use modular arithmetic to find the next server to try. */ - while (++(query->try_count) < (channel->nservers * channel->tries)) - { - struct server_state *server; - - /* Move on to the next server. */ - query->server = (query->server + 1) % channel->nservers; - server = &channel->servers[query->server]; - - /* We don't want to use this server if (1) we decided this connection is - * broken, and thus about to be closed, (2) we've decided to skip this - * server because of earlier errors we encountered, or (3) we already - * sent this query over this exact connection. - */ - if (!server->is_broken && - !query->server_info[query->server].skip_server && - !(query->using_tcp && - (query->server_info[query->server].tcp_connection_generation == - server->tcp_connection_generation))) - { - ares__send_query(channel, query, now); - return; - } - - /* You might think that with TCP we only need one try. However, even - * when using TCP, servers can time-out our connection just as we're - * sending a request, or close our connection because they die, or never - * send us a reply because they get wedged or tickle a bug that drops - * our request. - */ - } - - /* If we are here, all attempts to perform query failed. */ - end_query(channel, query, query->error_status, NULL, 0); -} - -void ares__send_query(ares_channel channel, struct query *query, - struct timeval *now) -{ - struct send_request *sendreq; - struct server_state *server; - int timeplus; - - server = &channel->servers[query->server]; - if (query->using_tcp) - { - /* Make sure the TCP socket for this server is set up and queue - * a send request. - */ - if (server->tcp_socket == ARES_SOCKET_BAD) - { - if (open_tcp_socket(channel, server) == -1) - { - skip_server(channel, query, query->server); - next_server(channel, query, now); - return; - } - } - sendreq = ares_malloc(sizeof(struct send_request)); - if (!sendreq) - { - end_query(channel, query, ARES_ENOMEM, NULL, 0); - return; - } - memset(sendreq, 0, sizeof(struct send_request)); - /* To make the common case fast, we avoid copies by using the query's - * tcpbuf for as long as the query is alive. In the rare case where the - * query ends while it's queued for transmission, then we give the - * sendreq its own copy of the request packet and put it in - * sendreq->data_storage. - */ - sendreq->data_storage = NULL; - sendreq->data = query->tcpbuf; - sendreq->len = query->tcplen; - sendreq->owner_query = query; - sendreq->next = NULL; - if (server->qtail) - server->qtail->next = sendreq; - else - { - SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 1); - server->qhead = sendreq; - } - server->qtail = sendreq; - query->server_info[query->server].tcp_connection_generation = - server->tcp_connection_generation; - } - else - { - if (server->udp_socket == ARES_SOCKET_BAD) - { - if (open_udp_socket(channel, server) == -1) - { - skip_server(channel, query, query->server); - next_server(channel, query, now); - return; - } - } - if (socket_write(channel, server->udp_socket, query->qbuf, query->qlen) == -1) - { - /* FIXME: Handle EAGAIN here since it likely can happen. */ - skip_server(channel, query, query->server); - next_server(channel, query, now); - return; - } - } - - /* For each trip through the entire server list, double the channel's - * assigned timeout, avoiding overflow. If channel->timeout is negative, - * leave it as-is, even though that should be impossible here. - */ - timeplus = channel->timeout; - { - /* How many times do we want to double it? Presume sane values here. */ - const int shift = query->try_count / channel->nservers; - - /* Is there enough room to shift timeplus left that many times? - * - * To find out, confirm that all of the bits we'll shift away are zero. - * Stop considering a shift if we get to the point where we could shift - * a 1 into the sign bit (i.e. when shift is within two of the bit - * count). - * - * This has the side benefit of leaving negative numbers unchanged. - */ - if(shift <= (int)(sizeof(int) * CHAR_BIT - 1) - && (timeplus >> (sizeof(int) * CHAR_BIT - 1 - shift)) == 0) - { - timeplus <<= shift; - } - } - - query->timeout = *now; - timeadd(&query->timeout, timeplus); - /* Keep track of queries bucketed by timeout, so we can process - * timeout events quickly. - */ - ares__remove_from_list(&(query->queries_by_timeout)); - ares__insert_in_list( - &(query->queries_by_timeout), - &(channel->queries_by_timeout[query->timeout.tv_sec % - ARES_TIMEOUT_TABLE_SIZE])); - - /* Keep track of queries bucketed by server, so we can process server - * errors quickly. - */ - ares__remove_from_list(&(query->queries_to_server)); - ares__insert_in_list(&(query->queries_to_server), - &(server->queries_to_server)); -} - -/* - * setsocknonblock sets the given socket to either blocking or non-blocking - * mode based on the 'nonblock' boolean argument. This function is highly - * portable. - */ -static int setsocknonblock(ares_socket_t sockfd, /* operate on this */ - int nonblock /* TRUE or FALSE */) -{ -#if defined(USE_BLOCKING_SOCKETS) - - return 0; /* returns success */ - -#elif defined(HAVE_FCNTL_O_NONBLOCK) - - /* most recent unix versions */ - int flags; - flags = fcntl(sockfd, F_GETFL, 0); - if (FALSE != nonblock) - return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); - else - return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); /* LCOV_EXCL_LINE */ - -#elif defined(HAVE_IOCTL_FIONBIO) - - /* older unix versions */ - int flags = nonblock ? 1 : 0; - return ioctl(sockfd, FIONBIO, &flags); - -#elif defined(HAVE_IOCTLSOCKET_FIONBIO) - -#ifdef WATT32 - char flags = nonblock ? 1 : 0; -#else - /* Windows */ - unsigned long flags = nonblock ? 1UL : 0UL; -#endif - return ioctlsocket(sockfd, FIONBIO, &flags); - -#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO) - - /* Amiga */ - long flags = nonblock ? 1L : 0L; - return IoctlSocket(sockfd, FIONBIO, flags); - -#elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK) - - /* BeOS */ - long b = nonblock ? 1L : 0L; - return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); - -#else -# error "no non-blocking method was found/used/set" -#endif -} - -static int configure_socket(ares_socket_t s, int family, ares_channel channel) -{ - union { - struct sockaddr sa; - struct sockaddr_in sa4; - struct sockaddr_in6 sa6; - } local; - - /* do not set options for user-managed sockets */ - if (channel->sock_funcs) - return 0; - - (void)setsocknonblock(s, TRUE); - -#if defined(FD_CLOEXEC) && !defined(MSDOS) - /* Configure the socket fd as close-on-exec. */ - if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) - return -1; /* LCOV_EXCL_LINE */ -#endif - - /* Set the socket's send and receive buffer sizes. */ - if ((channel->socket_send_buffer_size > 0) && - setsockopt(s, SOL_SOCKET, SO_SNDBUF, - (void *)&channel->socket_send_buffer_size, - sizeof(channel->socket_send_buffer_size)) == -1) - return -1; - - if ((channel->socket_receive_buffer_size > 0) && - setsockopt(s, SOL_SOCKET, SO_RCVBUF, - (void *)&channel->socket_receive_buffer_size, - sizeof(channel->socket_receive_buffer_size)) == -1) - return -1; - -#ifdef SO_BINDTODEVICE - if (channel->local_dev_name[0]) { - if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, - channel->local_dev_name, sizeof(channel->local_dev_name))) { - /* Only root can do this, and usually not fatal if it doesn't work, so */ - /* just continue on. */ - } - } -#endif - - if (family == AF_INET) { - if (channel->local_ip4) { - memset(&local.sa4, 0, sizeof(local.sa4)); - local.sa4.sin_family = AF_INET; - local.sa4.sin_addr.s_addr = htonl(channel->local_ip4); - if (bind(s, &local.sa, sizeof(local.sa4)) < 0) - return -1; - } - } - else if (family == AF_INET6) { - if (memcmp(channel->local_ip6, &ares_in6addr_any, - sizeof(channel->local_ip6)) != 0) { - memset(&local.sa6, 0, sizeof(local.sa6)); - local.sa6.sin6_family = AF_INET6; - memcpy(&local.sa6.sin6_addr, channel->local_ip6, - sizeof(channel->local_ip6)); - if (bind(s, &local.sa, sizeof(local.sa6)) < 0) - return -1; - } - } - - return 0; -} - -static int open_tcp_socket(ares_channel channel, struct server_state *server) -{ - ares_socket_t s; - int opt; - ares_socklen_t salen; - union { - struct sockaddr_in sa4; - struct sockaddr_in6 sa6; - } saddr; - struct sockaddr *sa; - - switch (server->addr.family) - { - case AF_INET: - sa = (void *)&saddr.sa4; - salen = sizeof(saddr.sa4); - memset(sa, 0, salen); - saddr.sa4.sin_family = AF_INET; - if (server->addr.tcp_port) { - saddr.sa4.sin_port = aresx_sitous(server->addr.tcp_port); - } else { - saddr.sa4.sin_port = aresx_sitous(channel->tcp_port); - } - memcpy(&saddr.sa4.sin_addr, &server->addr.addrV4, - sizeof(server->addr.addrV4)); - break; - case AF_INET6: - sa = (void *)&saddr.sa6; - salen = sizeof(saddr.sa6); - memset(sa, 0, salen); - saddr.sa6.sin6_family = AF_INET6; - if (server->addr.tcp_port) { - saddr.sa6.sin6_port = aresx_sitous(server->addr.tcp_port); - } else { - saddr.sa6.sin6_port = aresx_sitous(channel->tcp_port); - } - memcpy(&saddr.sa6.sin6_addr, &server->addr.addrV6, - sizeof(server->addr.addrV6)); - break; - default: - return -1; /* LCOV_EXCL_LINE */ - } - - /* Acquire a socket. */ - s = ares__open_socket(channel, server->addr.family, SOCK_STREAM, 0); - if (s == ARES_SOCKET_BAD) - return -1; - - /* Configure it. */ - if (configure_socket(s, server->addr.family, channel) < 0) - { - ares__close_socket(channel, s); - return -1; - } - -#ifdef TCP_NODELAY - /* - * Disable the Nagle algorithm (only relevant for TCP sockets, and thus not - * in configure_socket). In general, in DNS lookups we're pretty much - * interested in firing off a single request and then waiting for a reply, - * so batching isn't very interesting. - */ - opt = 1; - if (channel->sock_funcs == 0 - && - setsockopt(s, IPPROTO_TCP, TCP_NODELAY, - (void *)&opt, sizeof(opt)) == -1) - { - ares__close_socket(channel, s); - return -1; - } -#endif - - if (channel->sock_config_cb) - { - int err = channel->sock_config_cb(s, SOCK_STREAM, - channel->sock_config_cb_data); - if (err < 0) - { - ares__close_socket(channel, s); - return err; - } - } - - /* Connect to the server. */ - if (ares__connect_socket(channel, s, sa, salen) == -1) - { - int err = SOCKERRNO; - - if (err != EINPROGRESS && err != EWOULDBLOCK) - { - ares__close_socket(channel, s); - return -1; - } - } - - if (channel->sock_create_cb) - { - int err = channel->sock_create_cb(s, SOCK_STREAM, - channel->sock_create_cb_data); - if (err < 0) - { - ares__close_socket(channel, s); - return err; - } - } - - SOCK_STATE_CALLBACK(channel, s, 1, 0); - server->tcp_buffer_pos = 0; - server->tcp_socket = s; - server->tcp_connection_generation = ++channel->tcp_connection_generation; - return 0; -} - -static int open_udp_socket(ares_channel channel, struct server_state *server) -{ - ares_socket_t s; - ares_socklen_t salen; - union { - struct sockaddr_in sa4; - struct sockaddr_in6 sa6; - } saddr; - struct sockaddr *sa; - - switch (server->addr.family) - { - case AF_INET: - sa = (void *)&saddr.sa4; - salen = sizeof(saddr.sa4); - memset(sa, 0, salen); - saddr.sa4.sin_family = AF_INET; - if (server->addr.udp_port) { - saddr.sa4.sin_port = aresx_sitous(server->addr.udp_port); - } else { - saddr.sa4.sin_port = aresx_sitous(channel->udp_port); - } - memcpy(&saddr.sa4.sin_addr, &server->addr.addrV4, - sizeof(server->addr.addrV4)); - break; - case AF_INET6: - sa = (void *)&saddr.sa6; - salen = sizeof(saddr.sa6); - memset(sa, 0, salen); - saddr.sa6.sin6_family = AF_INET6; - if (server->addr.udp_port) { - saddr.sa6.sin6_port = aresx_sitous(server->addr.udp_port); - } else { - saddr.sa6.sin6_port = aresx_sitous(channel->udp_port); - } - memcpy(&saddr.sa6.sin6_addr, &server->addr.addrV6, - sizeof(server->addr.addrV6)); - break; - default: - return -1; /* LCOV_EXCL_LINE */ - } - - /* Acquire a socket. */ - s = ares__open_socket(channel, server->addr.family, SOCK_DGRAM, 0); - if (s == ARES_SOCKET_BAD) - return -1; - - /* Set the socket non-blocking. */ - if (configure_socket(s, server->addr.family, channel) < 0) - { - ares__close_socket(channel, s); - return -1; - } - - if (channel->sock_config_cb) - { - int err = channel->sock_config_cb(s, SOCK_DGRAM, - channel->sock_config_cb_data); - if (err < 0) - { - ares__close_socket(channel, s); - return err; - } - } - - /* Connect to the server. */ - if (ares__connect_socket(channel, s, sa, salen) == -1) - { - int err = SOCKERRNO; - - if (err != EINPROGRESS && err != EWOULDBLOCK) - { - ares__close_socket(channel, s); - return -1; - } - } - - if (channel->sock_create_cb) - { - int err = channel->sock_create_cb(s, SOCK_DGRAM, - channel->sock_create_cb_data); - if (err < 0) - { - ares__close_socket(channel, s); - return err; - } - } - - SOCK_STATE_CALLBACK(channel, s, 1, 0); - - server->udp_socket = s; - return 0; -} - -static int same_questions(const unsigned char *qbuf, int qlen, - const unsigned char *abuf, int alen) -{ - struct { - const unsigned char *p; - int qdcount; - char *name; - long namelen; - int type; - int dnsclass; - } q, a; - int i, j; - - if (qlen < HFIXEDSZ || alen < HFIXEDSZ) - return 0; - - /* Extract qdcount from the request and reply buffers and compare them. */ - q.qdcount = DNS_HEADER_QDCOUNT(qbuf); - a.qdcount = DNS_HEADER_QDCOUNT(abuf); - if (q.qdcount != a.qdcount) - return 0; - - /* For each question in qbuf, find it in abuf. */ - q.p = qbuf + HFIXEDSZ; - for (i = 0; i < q.qdcount; i++) - { - /* Decode the question in the query. */ - if (ares_expand_name(q.p, qbuf, qlen, &q.name, &q.namelen) - != ARES_SUCCESS) - return 0; - q.p += q.namelen; - if (q.p + QFIXEDSZ > qbuf + qlen) - { - ares_free(q.name); - return 0; - } - q.type = DNS_QUESTION_TYPE(q.p); - q.dnsclass = DNS_QUESTION_CLASS(q.p); - q.p += QFIXEDSZ; - - /* Search for this question in the answer. */ - a.p = abuf + HFIXEDSZ; - for (j = 0; j < a.qdcount; j++) - { - /* Decode the question in the answer. */ - if (ares_expand_name(a.p, abuf, alen, &a.name, &a.namelen) - != ARES_SUCCESS) - { - ares_free(q.name); - return 0; - } - a.p += a.namelen; - if (a.p + QFIXEDSZ > abuf + alen) - { - ares_free(q.name); - ares_free(a.name); - return 0; - } - a.type = DNS_QUESTION_TYPE(a.p); - a.dnsclass = DNS_QUESTION_CLASS(a.p); - a.p += QFIXEDSZ; - - /* Compare the decoded questions. */ - if (strcasecmp(q.name, a.name) == 0 && q.type == a.type - && q.dnsclass == a.dnsclass) - { - ares_free(a.name); - break; - } - ares_free(a.name); - } - - ares_free(q.name); - if (j == a.qdcount) - return 0; - } - return 1; -} - -static int same_address(struct sockaddr *sa, struct ares_addr *aa) -{ - void *addr1; - void *addr2; - - if (sa->sa_family == aa->family) - { - switch (aa->family) - { - case AF_INET: - addr1 = &aa->addrV4; - addr2 = &((struct sockaddr_in *)sa)->sin_addr; - if (memcmp(addr1, addr2, sizeof(aa->addrV4)) == 0) - return 1; /* match */ - break; - case AF_INET6: - addr1 = &aa->addrV6; - addr2 = &((struct sockaddr_in6 *)sa)->sin6_addr; - if (memcmp(addr1, addr2, sizeof(aa->addrV6)) == 0) - return 1; /* match */ - break; - default: - break; /* LCOV_EXCL_LINE */ - } - } - return 0; /* different */ -} - -static void end_query (ares_channel channel, struct query *query, int status, - unsigned char *abuf, int alen) -{ - int i; - - /* First we check to see if this query ended while one of our send - * queues still has pointers to it. - */ - for (i = 0; i < channel->nservers; i++) - { - struct server_state *server = &channel->servers[i]; - struct send_request *sendreq; - for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) - if (sendreq->owner_query == query) - { - sendreq->owner_query = NULL; - assert(sendreq->data_storage == NULL); - if (status == ARES_SUCCESS) - { - /* We got a reply for this query, but this queued sendreq - * points into this soon-to-be-gone query's tcpbuf. Probably - * this means we timed out and queued the query for - * retransmission, then received a response before actually - * retransmitting. This is perfectly fine, so we want to keep - * the connection running smoothly if we can. But in the worst - * case we may have sent only some prefix of the query, with - * some suffix of the query left to send. Also, the buffer may - * be queued on multiple queues. To prevent dangling pointers - * to the query's tcpbuf and handle these cases, we just give - * such sendreqs their own copy of the query packet. - */ - sendreq->data_storage = ares_malloc(sendreq->len); - if (sendreq->data_storage != NULL) - { - memcpy(sendreq->data_storage, sendreq->data, sendreq->len); - sendreq->data = sendreq->data_storage; - } - } - if ((status != ARES_SUCCESS) || (sendreq->data_storage == NULL)) - { - /* We encountered an error (probably a timeout, suggesting the - * DNS server we're talking to is probably unreachable, - * wedged, or severely overloaded) or we couldn't copy the - * request, so mark the connection as broken. When we get to - * process_broken_connections() we'll close the connection and - * try to re-send requests to another server. - */ - server->is_broken = 1; - /* Just to be paranoid, zero out this sendreq... */ - sendreq->data = NULL; - sendreq->len = 0; - } - } - } - - /* Invoke the callback */ - query->callback(query->arg, status, query->timeouts, abuf, alen); - ares__free_query(query); - - /* Simple cleanup policy: if no queries are remaining, close all network - * sockets unless STAYOPEN is set. - */ - if (!(channel->flags & ARES_FLAG_STAYOPEN) && - ares__is_list_empty(&(channel->all_queries))) - { - for (i = 0; i < channel->nservers; i++) - ares__close_sockets(channel, &channel->servers[i]); - } -} - -void ares__free_query(struct query *query) -{ - /* Remove the query from all the lists in which it is linked */ - ares__remove_from_list(&(query->queries_by_qid)); - ares__remove_from_list(&(query->queries_by_timeout)); - ares__remove_from_list(&(query->queries_to_server)); - ares__remove_from_list(&(query->all_queries)); - /* Zero out some important stuff, to help catch bugs */ - query->callback = NULL; - query->arg = NULL; - /* Deallocate the memory associated with the query */ - ares_free(query->tcpbuf); - ares_free(query->server_info); - ares_free(query); -} - -ares_socket_t ares__open_socket(ares_channel channel, - int af, int type, int protocol) -{ - if (channel->sock_funcs) - return channel->sock_funcs->asocket(af, - type, - protocol, - channel->sock_func_cb_data); - else - return socket(af, type, protocol); -} - -int ares__connect_socket(ares_channel channel, - ares_socket_t sockfd, - const struct sockaddr *addr, - ares_socklen_t addrlen) -{ - if (channel->sock_funcs) - return channel->sock_funcs->aconnect(sockfd, - addr, - addrlen, - channel->sock_func_cb_data); - else - return connect(sockfd, addr, addrlen); -} - -void ares__close_socket(ares_channel channel, ares_socket_t s) -{ - if (channel->sock_funcs) - channel->sock_funcs->aclose(s, channel->sock_func_cb_data); - else - sclose(s); -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_query.c nodejs-mozilla-12.22.12/deps/cares/src/ares_query.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_query.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_query.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,186 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_private.h" - -struct qquery { - ares_callback callback; - void *arg; -}; - -static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen); - -static void rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len) -{ - unsigned char x; - unsigned char y; - unsigned char* state; - unsigned char xorIndex; - short counter; - - x = key->x; - y = key->y; - - state = &key->state[0]; - for(counter = 0; counter < buffer_len; counter ++) - { - x = (unsigned char)((x + 1) % 256); - y = (unsigned char)((state[x] + y) % 256); - ARES_SWAP_BYTE(&state[x], &state[y]); - - xorIndex = (unsigned char)((state[x] + state[y]) % 256); - - buffer_ptr[counter] = (unsigned char)(buffer_ptr[counter]^state[xorIndex]); - } - key->x = x; - key->y = y; -} - -static struct query* find_query_by_id(ares_channel channel, unsigned short id) -{ - unsigned short qid; - struct list_node* list_head; - struct list_node* list_node; - DNS_HEADER_SET_QID(((unsigned char*)&qid), id); - - /* Find the query corresponding to this packet. */ - list_head = &(channel->queries_by_qid[qid % ARES_QID_TABLE_SIZE]); - for (list_node = list_head->next; list_node != list_head; - list_node = list_node->next) - { - struct query *q = list_node->data; - if (q->qid == qid) - return q; - } - return NULL; -} - - -/* a unique query id is generated using an rc4 key. Since the id may already - be used by a running query (as infrequent as it may be), a lookup is - performed per id generation. In practice this search should happen only - once per newly generated id -*/ -static unsigned short generate_unique_id(ares_channel channel) -{ - unsigned short id; - - do { - id = ares__generate_new_id(&channel->id_key); - } while (find_query_by_id(channel, id)); - - return (unsigned short)id; -} - -unsigned short ares__generate_new_id(rc4_key* key) -{ - unsigned short r=0; - rc4(key, (unsigned char *)&r, sizeof(r)); - return r; -} - -void ares_query(ares_channel channel, const char *name, int dnsclass, - int type, ares_callback callback, void *arg) -{ - struct qquery *qquery; - unsigned char *qbuf; - int qlen, rd, status; - - /* Compose the query. */ - rd = !(channel->flags & ARES_FLAG_NORECURSE); - status = ares_create_query(name, dnsclass, type, channel->next_id, rd, &qbuf, - &qlen, (channel->flags & ARES_FLAG_EDNS) ? channel->ednspsz : 0); - if (status != ARES_SUCCESS) - { - if (qbuf != NULL) ares_free(qbuf); - callback(arg, status, 0, NULL, 0); - return; - } - - channel->next_id = generate_unique_id(channel); - - /* Allocate and fill in the query structure. */ - qquery = ares_malloc(sizeof(struct qquery)); - if (!qquery) - { - ares_free_string(qbuf); - callback(arg, ARES_ENOMEM, 0, NULL, 0); - return; - } - qquery->callback = callback; - qquery->arg = arg; - - /* Send it off. qcallback will be called when we get an answer. */ - ares_send(channel, qbuf, qlen, qcallback, qquery); - ares_free_string(qbuf); -} - -static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen) -{ - struct qquery *qquery = (struct qquery *) arg; - unsigned int ancount; - int rcode; - - if (status != ARES_SUCCESS) - qquery->callback(qquery->arg, status, timeouts, abuf, alen); - else - { - /* Pull the response code and answer count from the packet. */ - rcode = DNS_HEADER_RCODE(abuf); - ancount = DNS_HEADER_ANCOUNT(abuf); - - /* Convert errors. */ - switch (rcode) - { - case NOERROR: - status = (ancount > 0) ? ARES_SUCCESS : ARES_ENODATA; - break; - case FORMERR: - status = ARES_EFORMERR; - break; - case SERVFAIL: - status = ARES_ESERVFAIL; - break; - case NXDOMAIN: - status = ARES_ENOTFOUND; - break; - case NOTIMP: - status = ARES_ENOTIMP; - break; - case REFUSED: - status = ARES_EREFUSED; - break; - } - qquery->callback(qquery->arg, status, timeouts, abuf, alen); - } - ares_free(qquery); -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares__readaddrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/ares__readaddrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares__readaddrinfo.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares__readaddrinfo.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,260 +0,0 @@ -/* Copyright (C) 2019 by Andrew Selivanov - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif - -#include "ares.h" -#include "ares_inet_net_pton.h" -#include "ares_nowarn.h" -#include "ares_private.h" - -#define MAX_ALIASES 40 - -int ares__readaddrinfo(FILE *fp, - const char *name, - unsigned short port, - const struct ares_addrinfo_hints *hints, - struct ares_addrinfo *ai) -{ - char *line = NULL, *p, *q; - char *txtaddr, *txthost, *txtalias; - char *aliases[MAX_ALIASES]; - unsigned int i, alias_count; - int status; - size_t linesize; - ares_sockaddr addr; - struct ares_addrinfo_cname *cname = NULL, *cnames = NULL; - struct ares_addrinfo_node *node = NULL, *nodes = NULL; - int match_with_alias, match_with_canonical; - int want_cname = hints->ai_flags & ARES_AI_CANONNAME; - - /* Validate family */ - switch (hints->ai_family) { - case AF_INET: - case AF_INET6: - case AF_UNSPEC: - break; - default: - return ARES_EBADFAMILY; - } - - - while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) - { - match_with_alias = 0; - match_with_canonical = 0; - alias_count = 0; - /* Trim line comment. */ - p = line; - while (*p && (*p != '#')) - p++; - *p = '\0'; - - /* Trim trailing whitespace. */ - q = p - 1; - while ((q >= line) && ISSPACE(*q)) - q--; - *++q = '\0'; - - /* Skip leading whitespace. */ - p = line; - while (*p && ISSPACE(*p)) - p++; - if (!*p) - /* Ignore line if empty. */ - continue; - - /* Pointer to start of IPv4 or IPv6 address part. */ - txtaddr = p; - - /* Advance past address part. */ - while (*p && !ISSPACE(*p)) - p++; - if (!*p) - /* Ignore line if reached end of line. */ - continue; - - /* Null terminate address part. */ - *p = '\0'; - - /* Advance to host name */ - p++; - while (*p && ISSPACE(*p)) - p++; - if (!*p) - /* Ignore line if reached end of line. */ - continue; /* LCOV_EXCL_LINE: trailing whitespace already stripped */ - - /* Pointer to start of host name. */ - txthost = p; - - /* Advance past host name. */ - while (*p && !ISSPACE(*p)) - p++; - - /* Pointer to start of first alias. */ - txtalias = NULL; - if (*p) - { - q = p + 1; - while (*q && ISSPACE(*q)) - q++; - if (*q) - txtalias = q; - } - - /* Null terminate host name. */ - *p = '\0'; - - /* Find out if host name matches with canonical host name. */ - if (strcasecmp(txthost, name) == 0) - { - match_with_canonical = 1; - } - - /* Find out if host name matches with one of the aliases. */ - while (txtalias) - { - p = txtalias; - while (*p && !ISSPACE(*p)) - p++; - q = p; - while (*q && ISSPACE(*q)) - q++; - *p = '\0'; - if (strcasecmp(txtalias, name) == 0) - { - match_with_alias = 1; - if (!want_cname) - break; - } - if (alias_count < MAX_ALIASES) - { - aliases[alias_count++] = txtalias; - } - txtalias = *q ? q : NULL; - } - - /* Try next line if host does not match. */ - if (!match_with_alias && !match_with_canonical) - { - continue; - } - - /* - * Convert address string to network address for the requested families. - * Actual address family possible values are AF_INET and AF_INET6 only. - */ - if ((hints->ai_family == AF_INET) || (hints->ai_family == AF_UNSPEC)) - { - addr.sa4.sin_port = htons(port); - if (ares_inet_pton(AF_INET, txtaddr, &addr.sa4.sin_addr) > 0) - { - node = ares__append_addrinfo_node(&nodes); - if(!node) - { - goto enomem; - } - - node->ai_family = addr.sa.sa_family = AF_INET; - node->ai_addrlen = sizeof(sizeof(addr.sa4)); - node->ai_addr = ares_malloc(sizeof(addr.sa4)); - if (!node->ai_addr) - { - goto enomem; - } - memcpy(node->ai_addr, &addr.sa4, sizeof(addr.sa4)); - } - } - if ((hints->ai_family == AF_INET6) || (hints->ai_family == AF_UNSPEC)) - { - addr.sa6.sin6_port = htons(port); - if (ares_inet_pton(AF_INET6, txtaddr, &addr.sa6.sin6_addr) > 0) - { - node = ares__append_addrinfo_node(&nodes); - if (!node) - { - goto enomem; - } - - node->ai_family = addr.sa.sa_family = AF_INET6; - node->ai_addrlen = sizeof(sizeof(addr.sa6)); - node->ai_addr = ares_malloc(sizeof(addr.sa6)); - if (!node->ai_addr) - { - goto enomem; - } - memcpy(node->ai_addr, &addr.sa6, sizeof(addr.sa6)); - } - } - if (!node) - /* Ignore line if invalid address string for the requested family. */ - continue; - - if (want_cname) - { - for (i = 0; i < alias_count; ++i) - { - cname = ares__append_addrinfo_cname(&cnames); - if (!cname) - { - goto enomem; - } - cname->alias = ares_strdup(aliases[i]); - cname->name = ares_strdup(txthost); - } - /* No aliases, cname only. */ - if(!alias_count) - { - cname = ares__append_addrinfo_cname(&cnames); - if (!cname) - { - goto enomem; - } - cname->name = ares_strdup(txthost); - } - } - } - - /* Last read failed. */ - if (status == ARES_ENOMEM) - { - goto enomem; - } - - /* Free line buffer. */ - ares_free(line); - - ares__addrinfo_cat_cnames(&ai->cnames, cnames); - ares__addrinfo_cat_nodes(&ai->nodes, nodes); - - return node ? ARES_SUCCESS : ARES_ENOTFOUND; - -enomem: - ares_free(line); - ares__freeaddrinfo_cnames(cnames); - ares__freeaddrinfo_nodes(nodes); - return ARES_ENOMEM; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares__read_line.c nodejs-mozilla-12.22.12/deps/cares/src/ares__read_line.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares__read_line.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares__read_line.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#include "ares.h" -#include "ares_nowarn.h" -#include "ares_private.h" - -/* This is an internal function. Its contract is to read a line from - * a file into a dynamically allocated buffer, zeroing the trailing - * newline if there is one. The calling routine may call - * ares__read_line multiple times with the same buf and bufsize - * pointers; *buf will be reallocated and *bufsize adjusted as - * appropriate. The initial value of *buf should be NULL. After the - * calling routine is done reading lines, it should free *buf. - */ -int ares__read_line(FILE *fp, char **buf, size_t *bufsize) -{ - char *newbuf; - size_t offset = 0; - size_t len; - - if (*buf == NULL) - { - *buf = ares_malloc(128); - if (!*buf) - return ARES_ENOMEM; - *bufsize = 128; - } - - for (;;) - { - int bytestoread = aresx_uztosi(*bufsize - offset); - - if (!fgets(*buf + offset, bytestoread, fp)) - return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF; - len = offset + strlen(*buf + offset); - if ((*buf)[len - 1] == '\n') - { - (*buf)[len - 1] = 0; - break; - } - offset = len; - if(len < *bufsize - 1) - continue; - - /* Allocate more space. */ - newbuf = ares_realloc(*buf, *bufsize * 2); - if (!newbuf) - { - ares_free(*buf); - *buf = NULL; - return ARES_ENOMEM; - } - *buf = newbuf; - *bufsize *= 2; - } - return ARES_SUCCESS; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_search.c nodejs-mozilla-12.22.12/deps/cares/src/ares_search.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_search.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_search.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,321 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_STRINGS_H -# include -#endif - -#include "ares.h" -#include "ares_private.h" - -struct search_query { - /* Arguments passed to ares_search */ - ares_channel channel; - char *name; /* copied into an allocated buffer */ - int dnsclass; - int type; - ares_callback callback; - void *arg; - - int status_as_is; /* error status from trying as-is */ - int next_domain; /* next search domain to try */ - int trying_as_is; /* current query is for name as-is */ - int timeouts; /* number of timeouts we saw for this request */ - int ever_got_nodata; /* did we ever get ARES_ENODATA along the way? */ -}; - -static void search_callback(void *arg, int status, int timeouts, - unsigned char *abuf, int alen); -static void end_squery(struct search_query *squery, int status, - unsigned char *abuf, int alen); - -void ares_search(ares_channel channel, const char *name, int dnsclass, - int type, ares_callback callback, void *arg) -{ - struct search_query *squery; - char *s; - const char *p; - int status, ndots; - - /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ - if (ares__is_onion_domain(name)) - { - callback(arg, ARES_ENOTFOUND, 0, NULL, 0); - return; - } - - /* If name only yields one domain to search, then we don't have - * to keep extra state, so just do an ares_query(). - */ - status = ares__single_domain(channel, name, &s); - if (status != ARES_SUCCESS) - { - callback(arg, status, 0, NULL, 0); - return; - } - if (s) - { - ares_query(channel, s, dnsclass, type, callback, arg); - ares_free(s); - return; - } - - /* Allocate a search_query structure to hold the state necessary for - * doing multiple lookups. - */ - squery = ares_malloc(sizeof(struct search_query)); - if (!squery) - { - callback(arg, ARES_ENOMEM, 0, NULL, 0); - return; - } - squery->channel = channel; - squery->name = ares_strdup(name); - if (!squery->name) - { - ares_free(squery); - callback(arg, ARES_ENOMEM, 0, NULL, 0); - return; - } - squery->dnsclass = dnsclass; - squery->type = type; - squery->status_as_is = -1; - squery->callback = callback; - squery->arg = arg; - squery->timeouts = 0; - squery->ever_got_nodata = 0; - - /* Count the number of dots in name. */ - ndots = 0; - for (p = name; *p; p++) - { - if (*p == '.') - ndots++; - } - - /* If ndots is at least the channel ndots threshold (usually 1), - * then we try the name as-is first. Otherwise, we try the name - * as-is last. - */ - if (ndots >= channel->ndots) - { - /* Try the name as-is first. */ - squery->next_domain = 0; - squery->trying_as_is = 1; - ares_query(channel, name, dnsclass, type, search_callback, squery); - } - else - { - /* Try the name as-is last; start with the first search domain. */ - squery->next_domain = 1; - squery->trying_as_is = 0; - status = ares__cat_domain(name, channel->domains[0], &s); - if (status == ARES_SUCCESS) - { - ares_query(channel, s, dnsclass, type, search_callback, squery); - ares_free(s); - } - else - { - /* failed, free the malloc()ed memory */ - ares_free(squery->name); - ares_free(squery); - callback(arg, status, 0, NULL, 0); - } - } -} - -static void search_callback(void *arg, int status, int timeouts, - unsigned char *abuf, int alen) -{ - struct search_query *squery = (struct search_query *) arg; - ares_channel channel = squery->channel; - char *s; - - squery->timeouts += timeouts; - - /* Stop searching unless we got a non-fatal error. */ - if (status != ARES_ENODATA && status != ARES_ESERVFAIL - && status != ARES_ENOTFOUND) - end_squery(squery, status, abuf, alen); - else - { - /* Save the status if we were trying as-is. */ - if (squery->trying_as_is) - squery->status_as_is = status; - - /* - * If we ever get ARES_ENODATA along the way, record that; if the search - * should run to the very end and we got at least one ARES_ENODATA, - * then callers like ares_gethostbyname() may want to try a T_A search - * even if the last domain we queried for T_AAAA resource records - * returned ARES_ENOTFOUND. - */ - if (status == ARES_ENODATA) - squery->ever_got_nodata = 1; - - if (squery->next_domain < channel->ndomains) - { - /* Try the next domain. */ - status = ares__cat_domain(squery->name, - channel->domains[squery->next_domain], &s); - if (status != ARES_SUCCESS) - end_squery(squery, status, NULL, 0); - else - { - squery->trying_as_is = 0; - squery->next_domain++; - ares_query(channel, s, squery->dnsclass, squery->type, - search_callback, squery); - ares_free(s); - } - } - else if (squery->status_as_is == -1) - { - /* Try the name as-is at the end. */ - squery->trying_as_is = 1; - ares_query(channel, squery->name, squery->dnsclass, squery->type, - search_callback, squery); - } - else { - if (squery->status_as_is == ARES_ENOTFOUND && squery->ever_got_nodata) { - end_squery(squery, ARES_ENODATA, NULL, 0); - } - else - end_squery(squery, squery->status_as_is, NULL, 0); - } - } -} - -static void end_squery(struct search_query *squery, int status, - unsigned char *abuf, int alen) -{ - squery->callback(squery->arg, status, squery->timeouts, abuf, alen); - ares_free(squery->name); - ares_free(squery); -} - -/* Concatenate two domains. */ -int ares__cat_domain(const char *name, const char *domain, char **s) -{ - size_t nlen = strlen(name); - size_t dlen = strlen(domain); - - *s = ares_malloc(nlen + 1 + dlen + 1); - if (!*s) - return ARES_ENOMEM; - memcpy(*s, name, nlen); - (*s)[nlen] = '.'; - memcpy(*s + nlen + 1, domain, dlen); - (*s)[nlen + 1 + dlen] = 0; - return ARES_SUCCESS; -} - -/* Determine if this name only yields one query. If it does, set *s to - * the string we should query, in an allocated buffer. If not, set *s - * to NULL. - */ -int ares__single_domain(ares_channel channel, const char *name, char **s) -{ - size_t len = strlen(name); - const char *hostaliases; - FILE *fp; - char *line = NULL; - int status; - size_t linesize; - const char *p, *q; - int error; - - /* If the name contains a trailing dot, then the single query is the name - * sans the trailing dot. - */ - if ((len > 0) && (name[len - 1] == '.')) - { - *s = ares_strdup(name); - return (*s) ? ARES_SUCCESS : ARES_ENOMEM; - } - - if (!(channel->flags & ARES_FLAG_NOALIASES) && !strchr(name, '.')) - { - /* The name might be a host alias. */ - hostaliases = getenv("HOSTALIASES"); - if (hostaliases) - { - fp = fopen(hostaliases, "r"); - if (fp) - { - while ((status = ares__read_line(fp, &line, &linesize)) - == ARES_SUCCESS) - { - if (strncasecmp(line, name, len) != 0 || - !ISSPACE(line[len])) - continue; - p = line + len; - while (ISSPACE(*p)) - p++; - if (*p) - { - q = p + 1; - while (*q && !ISSPACE(*q)) - q++; - *s = ares_malloc(q - p + 1); - if (*s) - { - memcpy(*s, p, q - p); - (*s)[q - p] = 0; - } - ares_free(line); - fclose(fp); - return (*s) ? ARES_SUCCESS : ARES_ENOMEM; - } - } - ares_free(line); - fclose(fp); - if (status != ARES_SUCCESS && status != ARES_EOF) - return status; - } - else - { - error = ERRNO; - switch(error) - { - case ENOENT: - case ESRCH: - break; - default: - DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", - error, strerror(error))); - DEBUGF(fprintf(stderr, "Error opening file: %s\n", - hostaliases)); - *s = NULL; - return ARES_EFILE; - } - } - } - } - - if (channel->flags & ARES_FLAG_NOSEARCH || channel->ndomains == 0) - { - /* No domain search to do; just try the name as-is. */ - *s = ares_strdup(name); - return (*s) ? ARES_SUCCESS : ARES_ENOMEM; - } - - *s = NULL; - return ARES_SUCCESS; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_send.c nodejs-mozilla-12.22.12/deps/cares/src/ares_send.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_send.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_send.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,137 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_dns.h" -#include "ares_private.h" - -void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen, - ares_callback callback, void *arg) -{ - struct query *query; - int i, packetsz; - struct timeval now; - - /* Verify that the query is at least long enough to hold the header. */ - if (qlen < HFIXEDSZ || qlen >= (1 << 16)) - { - callback(arg, ARES_EBADQUERY, 0, NULL, 0); - return; - } - - /* Allocate space for query and allocated fields. */ - query = ares_malloc(sizeof(struct query)); - if (!query) - { - callback(arg, ARES_ENOMEM, 0, NULL, 0); - return; - } - query->tcpbuf = ares_malloc(qlen + 2); - if (!query->tcpbuf) - { - ares_free(query); - callback(arg, ARES_ENOMEM, 0, NULL, 0); - return; - } - if (channel->nservers < 1) - { - ares_free(query); - callback(arg, ARES_ESERVFAIL, 0, NULL, 0); - return; - } - query->server_info = ares_malloc(channel->nservers * - sizeof(query->server_info[0])); - if (!query->server_info) - { - ares_free(query->tcpbuf); - ares_free(query); - callback(arg, ARES_ENOMEM, 0, NULL, 0); - return; - } - - /* Compute the query ID. Start with no timeout. */ - query->qid = DNS_HEADER_QID(qbuf); - query->timeout.tv_sec = 0; - query->timeout.tv_usec = 0; - - /* Form the TCP query buffer by prepending qlen (as two - * network-order bytes) to qbuf. - */ - query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff); - query->tcpbuf[1] = (unsigned char)(qlen & 0xff); - memcpy(query->tcpbuf + 2, qbuf, qlen); - query->tcplen = qlen + 2; - - /* Fill in query arguments. */ - query->qbuf = query->tcpbuf + 2; - query->qlen = qlen; - query->callback = callback; - query->arg = arg; - - /* Initialize query status. */ - query->try_count = 0; - - /* Choose the server to send the query to. If rotation is enabled, keep track - * of the next server we want to use. */ - query->server = channel->last_server; - if (channel->rotate == 1) - channel->last_server = (channel->last_server + 1) % channel->nservers; - - for (i = 0; i < channel->nservers; i++) - { - query->server_info[i].skip_server = 0; - query->server_info[i].tcp_connection_generation = 0; - } - - packetsz = (channel->flags & ARES_FLAG_EDNS) ? channel->ednspsz : PACKETSZ; - query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > packetsz; - - query->error_status = ARES_ECONNREFUSED; - query->timeouts = 0; - - /* Initialize our list nodes. */ - ares__init_list_node(&(query->queries_by_qid), query); - ares__init_list_node(&(query->queries_by_timeout), query); - ares__init_list_node(&(query->queries_to_server), query); - ares__init_list_node(&(query->all_queries), query); - - /* Chain the query into the list of all queries. */ - ares__insert_in_list(&(query->all_queries), &(channel->all_queries)); - /* Keep track of queries bucketed by qid, so we can process DNS - * responses quickly. - */ - ares__insert_in_list( - &(query->queries_by_qid), - &(channel->queries_by_qid[query->qid % ARES_QID_TABLE_SIZE])); - - /* Perform the first query action. */ - now = ares__tvnow(); - ares__send_query(channel, query, &now); -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_setup.h nodejs-mozilla-12.22.12/deps/cares/src/ares_setup.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_setup.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_setup.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,217 +0,0 @@ -#ifndef HEADER_CARES_SETUP_H -#define HEADER_CARES_SETUP_H - - -/* Copyright (C) 2004 - 2012 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. M.I.T. makes no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -/* - * Define WIN32 when build target is Win32 API - */ - -#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) -#define WIN32 -#endif - -/* - * Include configuration script results or hand-crafted - * configuration file for platforms which lack config tool. - */ - -#ifdef HAVE_CONFIG_H -#include "ares_config.h" -#else - -#ifdef WIN32 -#include "config-win32.h" -#endif - -#endif /* HAVE_CONFIG_H */ - -/* ================================================================ */ -/* Definition of preprocessor macros/symbols which modify compiler */ -/* behaviour or generated code characteristics must be done here, */ -/* as appropriate, before any system header file is included. It is */ -/* also possible to have them defined in the config file included */ -/* before this point. As a result of all this we frown inclusion of */ -/* system header files in our config files, avoid this at any cost. */ -/* ================================================================ */ - -/* - * AIX 4.3 and newer needs _THREAD_SAFE defined to build - * proper reentrant code. Others may also need it. - */ - -#ifdef NEED_THREAD_SAFE -# ifndef _THREAD_SAFE -# define _THREAD_SAFE -# endif -#endif - -/* - * Tru64 needs _REENTRANT set for a few function prototypes and - * things to appear in the system header files. Unixware needs it - * to build proper reentrant code. Others may also need it. - */ - -#ifdef NEED_REENTRANT -# ifndef _REENTRANT -# define _REENTRANT -# endif -#endif - -/* ================================================================ */ -/* If you need to include a system header file for your platform, */ -/* please, do it beyond the point further indicated in this file. */ -/* ================================================================ */ - -/* - * c-ares external interface definitions are also used internally, - * and might also include required system header files to define them. - */ - -#include - -/* - * Compile time sanity checks must also be done when building the library. - */ - -#include - -/* ================================================================= */ -/* No system header file shall be included in this file before this */ -/* point. The only allowed ones are those included from ares_build.h */ -/* ================================================================= */ - -/* - * Include header files for windows builds before redefining anything. - * Use this preproessor block only to include or exclude windows.h, - * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs - * to any other further and independent block. Under Cygwin things work - * just as under linux (e.g. ) and the winsock headers should - * never be included when __CYGWIN__ is defined. configure script takes - * care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H, - * neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined. - */ - -#ifdef HAVE_WINDOWS_H -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include -# ifdef HAVE_WINSOCK2_H -# include -# ifdef HAVE_WS2TCPIP_H -# include -# endif -# else -# ifdef HAVE_WINSOCK_H -# include -# endif -# endif -#endif - -/* - * Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else - * define USE_WINSOCK to 1 if we have and use WINSOCK API, else - * undefine USE_WINSOCK. - */ - -#undef USE_WINSOCK - -#ifdef HAVE_WINSOCK2_H -# define USE_WINSOCK 2 -#else -# ifdef HAVE_WINSOCK_H -# define USE_WINSOCK 1 -# endif -#endif - -/* - * Work-arounds for systems without configure support - */ - -#ifndef HAVE_CONFIG_H - -#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) && !defined(__WATCOMC__) -#define HAVE_SYS_TIME_H -#endif - -#if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER) -#define HAVE_UNISTD_H 1 -#endif - -#if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS) -#define HAVE_SYS_UIO_H -#endif - -#endif /* HAVE_CONFIG_H */ - -/* - * Arg 2 type for gethostname in case it hasn't been defined in config file. - */ - -#ifndef GETHOSTNAME_TYPE_ARG2 -# ifdef USE_WINSOCK -# define GETHOSTNAME_TYPE_ARG2 int -# else -# define GETHOSTNAME_TYPE_ARG2 size_t -# endif -#endif - -#ifdef __POCC__ -# include -# include -# define ESRCH 3 -#endif - -/* - * Android does have the arpa/nameser.h header which is detected by configure - * but it appears to be empty with recent NDK r7b / r7c, so we undefine here. - */ -#if (defined(ANDROID) || defined(__ANDROID__)) && defined(HAVE_ARPA_NAMESER_H) -# undef HAVE_ARPA_NAMESER_H -#endif - -/* - * Recent autoconf versions define these symbols in ares_config.h. We don't - * want them (since they collide with the libcurl ones when we build - * --enable-debug) so we undef them again here. - */ - -#undef PACKAGE_STRING -#undef PACKAGE_TARNAME -#undef PACKAGE_VERSION -#undef PACKAGE_BUGREPORT -#undef PACKAGE_NAME -#undef VERSION -#undef PACKAGE - -/* IPv6 compatibility */ -#if !defined(HAVE_AF_INET6) -#if defined(HAVE_PF_INET6) -#define AF_INET6 PF_INET6 -#else -#define AF_INET6 AF_MAX+1 -#endif -#endif - -/* - * Include macros and defines that should only be processed once. - */ - -#ifndef __SETUP_ONCE_H -#include "setup_once.h" -#endif - -#endif /* HEADER_CARES_SETUP_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares__sortaddrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/ares__sortaddrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares__sortaddrinfo.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares__sortaddrinfo.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,494 +0,0 @@ -/* - * Original file name getaddrinfo.c - * Lifted from the 'Android Bionic' project with the BSD license. - */ - -/* - * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. - * Copyright (C) 2018 The Android Open Source Project - * Copyright (C) 2019 by Andrew Selivanov - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the project nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_NETDB_H -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif - -#include -#include - -#include "ares.h" -#include "ares_private.h" - -struct addrinfo_sort_elem -{ - struct ares_addrinfo_node *ai; - int has_src_addr; - ares_sockaddr src_addr; - int original_order; -}; - -#define ARES_IPV6_ADDR_MC_SCOPE(a) ((a)->s6_addr[1] & 0x0f) - -#define ARES_IPV6_ADDR_SCOPE_NODELOCAL 0x01 -#define ARES_IPV6_ADDR_SCOPE_INTFACELOCAL 0x01 -#define ARES_IPV6_ADDR_SCOPE_LINKLOCAL 0x02 -#define ARES_IPV6_ADDR_SCOPE_SITELOCAL 0x05 -#define ARES_IPV6_ADDR_SCOPE_ORGLOCAL 0x08 -#define ARES_IPV6_ADDR_SCOPE_GLOBAL 0x0e - -#define ARES_IN_LOOPBACK(a) ((((long int)(a)) & 0xff000000) == 0x7f000000) - -/* RFC 4193. */ -#define ARES_IN6_IS_ADDR_ULA(a) (((a)->s6_addr[0] & 0xfe) == 0xfc) - -/* These macros are modelled after the ones in . */ -/* RFC 4380, section 2.6 */ -#define ARES_IN6_IS_ADDR_TEREDO(a) \ - ((*(const unsigned int *)(const void *)(&(a)->s6_addr[0]) == ntohl(0x20010000))) -/* RFC 3056, section 2. */ -#define ARES_IN6_IS_ADDR_6TO4(a) \ - (((a)->s6_addr[0] == 0x20) && ((a)->s6_addr[1] == 0x02)) -/* 6bone testing address area (3ffe::/16), deprecated in RFC 3701. */ -#define ARES_IN6_IS_ADDR_6BONE(a) \ - (((a)->s6_addr[0] == 0x3f) && ((a)->s6_addr[1] == 0xfe)) - -static int get_scope(const struct sockaddr *addr) -{ - if (addr->sa_family == AF_INET6) - { - const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)addr; - if (IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr)) - { - return ARES_IPV6_ADDR_MC_SCOPE(&addr6->sin6_addr); - } - else if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr) || - IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)) - { - /* - * RFC 4291 section 2.5.3 says loopback is to be treated as having - * link-local scope. - */ - return ARES_IPV6_ADDR_SCOPE_LINKLOCAL; - } - else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr)) - { - return ARES_IPV6_ADDR_SCOPE_SITELOCAL; - } - else - { - return ARES_IPV6_ADDR_SCOPE_GLOBAL; - } - } - else if (addr->sa_family == AF_INET) - { - const struct sockaddr_in *addr4 = (const struct sockaddr_in *)addr; - unsigned long int na = ntohl(addr4->sin_addr.s_addr); - if (ARES_IN_LOOPBACK(na) || /* 127.0.0.0/8 */ - (na & 0xffff0000) == 0xa9fe0000) /* 169.254.0.0/16 */ - { - return ARES_IPV6_ADDR_SCOPE_LINKLOCAL; - } - else - { - /* - * RFC 6724 section 3.2. Other IPv4 addresses, including private - * addresses and shared addresses (100.64.0.0/10), are assigned global - * scope. - */ - return ARES_IPV6_ADDR_SCOPE_GLOBAL; - } - } - else - { - /* - * This should never happen. - * Return a scope with low priority as a last resort. - */ - return ARES_IPV6_ADDR_SCOPE_NODELOCAL; - } -} - -static int get_label(const struct sockaddr *addr) -{ - if (addr->sa_family == AF_INET) - { - return 4; - } - else if (addr->sa_family == AF_INET6) - { - const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)addr; - if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr)) - { - return 0; - } - else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) - { - return 4; - } - else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr)) - { - return 2; - } - else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr)) - { - return 5; - } - else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr)) - { - return 13; - } - else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr)) - { - return 3; - } - else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr)) - { - return 11; - } - else if (ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr)) - { - return 12; - } - else - { - /* All other IPv6 addresses, including global unicast addresses. */ - return 1; - } - } - else - { - /* - * This should never happen. - * Return a semi-random label as a last resort. - */ - return 1; - } -} - -/* - * Get the precedence for a given IPv4/IPv6 address. - * RFC 6724, section 2.1. - */ -static int get_precedence(const struct sockaddr *addr) -{ - if (addr->sa_family == AF_INET) - { - return 35; - } - else if (addr->sa_family == AF_INET6) - { - const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)addr; - if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr)) - { - return 50; - } - else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) - { - return 35; - } - else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr)) - { - return 30; - } - else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr)) - { - return 5; - } - else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr)) - { - return 3; - } - else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr) || - IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr) || - ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr)) - { - return 1; - } - else - { - /* All other IPv6 addresses, including global unicast addresses. */ - return 40; - } - } - else - { - return 1; - } -} - -/* - * Find number of matching initial bits between the two addresses a1 and a2. - */ -static int common_prefix_len(const struct in6_addr *a1, - const struct in6_addr *a2) -{ - const char *p1 = (const char *)a1; - const char *p2 = (const char *)a2; - unsigned i; - for (i = 0; i < sizeof(*a1); ++i) - { - int x, j; - if (p1[i] == p2[i]) - { - continue; - } - x = p1[i] ^ p2[i]; - for (j = 0; j < CHAR_BIT; ++j) - { - if (x & (1 << (CHAR_BIT - 1))) - { - return i * CHAR_BIT + j; - } - x <<= 1; - } - } - return sizeof(*a1) * CHAR_BIT; -} - -/* - * Compare two source/destination address pairs. - * RFC 6724, section 6. - */ -static int rfc6724_compare(const void *ptr1, const void *ptr2) -{ - const struct addrinfo_sort_elem *a1 = (const struct addrinfo_sort_elem *)ptr1; - const struct addrinfo_sort_elem *a2 = (const struct addrinfo_sort_elem *)ptr2; - int scope_src1, scope_dst1, scope_match1; - int scope_src2, scope_dst2, scope_match2; - int label_src1, label_dst1, label_match1; - int label_src2, label_dst2, label_match2; - int precedence1, precedence2; - int prefixlen1, prefixlen2; - - /* Rule 1: Avoid unusable destinations. */ - if (a1->has_src_addr != a2->has_src_addr) - { - return a2->has_src_addr - a1->has_src_addr; - } - - /* Rule 2: Prefer matching scope. */ - scope_src1 = get_scope(&a1->src_addr.sa); - scope_dst1 = get_scope(a1->ai->ai_addr); - scope_match1 = (scope_src1 == scope_dst1); - - scope_src2 = get_scope(&a2->src_addr.sa); - scope_dst2 = get_scope(a2->ai->ai_addr); - scope_match2 = (scope_src2 == scope_dst2); - - if (scope_match1 != scope_match2) - { - return scope_match2 - scope_match1; - } - - /* Rule 3: Avoid deprecated addresses. */ - - /* Rule 4: Prefer home addresses. */ - - /* Rule 5: Prefer matching label. */ - label_src1 = get_label(&a1->src_addr.sa); - label_dst1 = get_label(a1->ai->ai_addr); - label_match1 = (label_src1 == label_dst1); - - label_src2 = get_label(&a2->src_addr.sa); - label_dst2 = get_label(a2->ai->ai_addr); - label_match2 = (label_src2 == label_dst2); - - if (label_match1 != label_match2) - { - return label_match2 - label_match1; - } - - /* Rule 6: Prefer higher precedence. */ - precedence1 = get_precedence(a1->ai->ai_addr); - precedence2 = get_precedence(a2->ai->ai_addr); - if (precedence1 != precedence2) - { - return precedence2 - precedence1; - } - - /* Rule 7: Prefer native transport. */ - - /* Rule 8: Prefer smaller scope. */ - if (scope_dst1 != scope_dst2) - { - return scope_dst1 - scope_dst2; - } - - /* Rule 9: Use longest matching prefix. */ - if (a1->has_src_addr && a1->ai->ai_addr->sa_family == AF_INET6 && - a2->has_src_addr && a2->ai->ai_addr->sa_family == AF_INET6) - { - const struct sockaddr_in6 *a1_src = &a1->src_addr.sa6; - const struct sockaddr_in6 *a1_dst = - (const struct sockaddr_in6 *)a1->ai->ai_addr; - const struct sockaddr_in6 *a2_src = &a2->src_addr.sa6; - const struct sockaddr_in6 *a2_dst = - (const struct sockaddr_in6 *)a2->ai->ai_addr; - prefixlen1 = common_prefix_len(&a1_src->sin6_addr, &a1_dst->sin6_addr); - prefixlen2 = common_prefix_len(&a2_src->sin6_addr, &a2_dst->sin6_addr); - if (prefixlen1 != prefixlen2) - { - return prefixlen2 - prefixlen1; - } - } - - /* - * Rule 10: Leave the order unchanged. - * We need this since qsort() is not necessarily stable. - */ - return a1->original_order - a2->original_order; -} - -/* - * Find the source address that will be used if trying to connect to the given - * address. - * - * Returns 1 if a source address was found, 0 if the address is unreachable, - * and -1 if a fatal error occurred. If 0 or 1, the contents of src_addr are - * undefined. - */ -static int find_src_addr(ares_channel channel, - const struct sockaddr *addr, - struct sockaddr *src_addr) -{ - int sock; - int ret; - ares_socklen_t len; - - switch (addr->sa_family) - { - case AF_INET: - len = sizeof(struct sockaddr_in); - break; - case AF_INET6: - len = sizeof(struct sockaddr_in6); - break; - default: - /* No known usable source address for non-INET families. */ - return 0; - } - - sock = ares__open_socket(channel, addr->sa_family, SOCK_DGRAM, IPPROTO_UDP); - if (sock == -1) - { - if (errno == EAFNOSUPPORT) - { - return 0; - } - else - { - return -1; - } - } - - do - { - ret = ares__connect_socket(channel, sock, addr, len); - } - while (ret == -1 && errno == EINTR); - - if (ret == -1) - { - ares__close_socket(channel, sock); - return 0; - } - - if (getsockname(sock, src_addr, &len) == -1) - { - ares__close_socket(channel, sock); - return -1; - } - ares__close_socket(channel, sock); - return 1; -} - -/* - * Sort the linked list starting at sentinel->ai_next in RFC6724 order. - * Will leave the list unchanged if an error occurs. - */ -int ares__sortaddrinfo(ares_channel channel, struct ares_addrinfo_node *list_sentinel) -{ - struct ares_addrinfo_node *cur; - int nelem = 0, i; - int has_src_addr; - struct addrinfo_sort_elem *elems; - - cur = list_sentinel->ai_next; - while (cur) - { - ++nelem; - cur = cur->ai_next; - } - elems = (struct addrinfo_sort_elem *)ares_malloc( - nelem * sizeof(struct addrinfo_sort_elem)); - if (!elems) - { - return ARES_ENOMEM; - } - - /* - * Convert the linked list to an array that also contains the candidate - * source address for each destination address. - */ - for (i = 0, cur = list_sentinel->ai_next; i < nelem; ++i, cur = cur->ai_next) - { - assert(cur != NULL); - elems[i].ai = cur; - elems[i].original_order = i; - has_src_addr = find_src_addr(channel, cur->ai_addr, &elems[i].src_addr.sa); - if (has_src_addr == -1) - { - ares_free(elems); - return ARES_ENOTFOUND; - } - elems[i].has_src_addr = has_src_addr; - } - - /* Sort the addresses, and rearrange the linked list so it matches the sorted - * order. */ - qsort((void *)elems, nelem, sizeof(struct addrinfo_sort_elem), - rfc6724_compare); - - list_sentinel->ai_next = elems[0].ai; - for (i = 0; i < nelem - 1; ++i) - { - elems[i].ai->ai_next = elems[i + 1].ai; - } - elems[nelem - 1].ai->ai_next = NULL; - - ares_free(elems); - return ARES_SUCCESS; -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_strcasecmp.c nodejs-mozilla-12.22.12/deps/cares/src/ares_strcasecmp.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_strcasecmp.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_strcasecmp.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,66 +0,0 @@ - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include "ares_strcasecmp.h" - -#ifndef HAVE_STRCASECMP -int ares_strcasecmp(const char *a, const char *b) -{ -#if defined(HAVE_STRCMPI) - return strcmpi(a, b); -#elif defined(HAVE_STRICMP) - return stricmp(a, b); -#else - size_t i; - - for (i = 0; i < (size_t)-1; i++) { - int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i]; - int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i]; - if (c1 != c2) - return c1-c2; - if (!c1) - break; - } - return 0; -#endif -} -#endif - -#ifndef HAVE_STRNCASECMP -int ares_strncasecmp(const char *a, const char *b, size_t n) -{ -#if defined(HAVE_STRNCMPI) - return strncmpi(a, b, n); -#elif defined(HAVE_STRNICMP) - return strnicmp(a, b, n); -#else - size_t i; - - for (i = 0; i < n; i++) { - int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i]; - int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i]; - if (c1 != c2) - return c1-c2; - if (!c1) - break; - } - return 0; -#endif -} -#endif - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_strcasecmp.h nodejs-mozilla-12.22.12/deps/cares/src/ares_strcasecmp.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_strcasecmp.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_strcasecmp.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,30 +0,0 @@ -#ifndef HEADER_CARES_STRCASECMP_H -#define HEADER_CARES_STRCASECMP_H - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifndef HAVE_STRCASECMP -extern int ares_strcasecmp(const char *a, const char *b); -#endif - -#ifndef HAVE_STRNCASECMP -extern int ares_strncasecmp(const char *a, const char *b, size_t n); -#endif - -#endif /* HEADER_CARES_STRCASECMP_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_strdup.c nodejs-mozilla-12.22.12/deps/cares/src/ares_strdup.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_strdup.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_strdup.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include "ares_strdup.h" -#include "ares.h" -#include "ares_private.h" - -char *ares_strdup(const char *s1) -{ -#ifdef HAVE_STRDUP - if (ares_malloc == malloc) - return strdup(s1); - else -#endif - { - size_t sz; - char * s2; - - if(s1) { - sz = strlen(s1); - if(sz < (size_t)-1) { - sz++; - if(sz < ((size_t)-1) / sizeof(char)) { - s2 = ares_malloc(sz * sizeof(char)); - if(s2) { - memcpy(s2, s1, sz * sizeof(char)); - return s2; - } - } - } - } - return (char *)NULL; - } -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_strdup.h nodejs-mozilla-12.22.12/deps/cares/src/ares_strdup.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_strdup.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_strdup.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -#ifndef HEADER_CARES_STRDUP_H -#define HEADER_CARES_STRDUP_H - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -extern char *ares_strdup(const char *s1); - -#endif /* HEADER_CARES_STRDUP_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_strerror.c nodejs-mozilla-12.22.12/deps/cares/src/ares_strerror.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_strerror.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_strerror.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include -#include "ares.h" - -const char *ares_strerror(int code) -{ - /* Return a string literal from a table. */ - const char *errtext[] = { - "Successful completion", - "DNS server returned answer with no data", - "DNS server claims query was misformatted", - "DNS server returned general failure", - "Domain name not found", - "DNS server does not implement requested operation", - "DNS server refused query", - "Misformatted DNS query", - "Misformatted domain name", - "Unsupported address family", - "Misformatted DNS reply", - "Could not contact DNS servers", - "Timeout while contacting DNS servers", - "End of file", - "Error reading file", - "Out of memory", - "Channel is being destroyed", - "Misformatted string", - "Illegal flags specified", - "Given hostname is not numeric", - "Illegal hints flags specified", - "c-ares library initialization not yet performed", - "Error loading iphlpapi.dll", - "Could not find GetNetworkParams function", - "DNS query cancelled" - }; - - if(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext))) - return errtext[code]; - else - return "unknown"; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_strsplit.c nodejs-mozilla-12.22.12/deps/cares/src/ares_strsplit.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_strsplit.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_strsplit.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/* Copyright (C) 2018 by John Schember - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include "ares_strsplit.h" -#include "ares.h" -#include "ares_private.h" - -static int list_contains(char * const *list, size_t num_elem, const char *str, int insensitive) -{ - size_t len; - size_t i; - - len = strlen(str); - for (i=0; i - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -/* Split a string on delem skipping empty elements. - * - * param in String to split. - * param delims String of characters to treat as a delimitor. - * Each character in the string is a delimitor so - * there can be multiple delimitors to split on. - * E.g. ", " will split on all comma's and spaces. - * param make_set Have the list be a Set where there are no - * duplicate entries. 1 for true, 0 or false. - * param num_elm Return parameter of the number of elements - * in the result array. - * - * returns an allocated array of allocated string elements. - * - */ -char **ares_strsplit(const char *in, const char *delms, int make_set, size_t *num_elm); - -/* Frees the result returned from ares_strsplit(). */ -void ares_strsplit_free(char **elms, size_t num_elm); - - -#endif /* HEADER_CARES_STRSPLIT_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_timeout.c nodejs-mozilla-12.22.12/deps/cares/src/ares_timeout.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_timeout.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_timeout.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_LIMITS_H -#include -#endif - -#include "ares.h" -#include "ares_private.h" - -/* return time offset between now and (future) check, in milliseconds */ -static long timeoffset(struct timeval *now, struct timeval *check) -{ - return (check->tv_sec - now->tv_sec)*1000 + - (check->tv_usec - now->tv_usec)/1000; -} - -/* WARNING: Beware that this is linear in the number of outstanding - * requests! You are probably far better off just calling ares_process() - * once per second, rather than calling ares_timeout() to figure out - * when to next call ares_process(). - */ -struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv, - struct timeval *tvbuf) -{ - struct query *query; - struct list_node* list_head; - struct list_node* list_node; - struct timeval now; - struct timeval nextstop; - long offset, min_offset; - - /* No queries, no timeout (and no fetch of the current time). */ - if (ares__is_list_empty(&(channel->all_queries))) - return maxtv; - - /* Find the minimum timeout for the current set of queries. */ - now = ares__tvnow(); - min_offset = -1; - - list_head = &(channel->all_queries); - for (list_node = list_head->next; list_node != list_head; - list_node = list_node->next) - { - query = list_node->data; - if (query->timeout.tv_sec == 0) - continue; - offset = timeoffset(&now, &query->timeout); - if (offset < 0) - offset = 0; - if (min_offset == -1 || offset < min_offset) - min_offset = offset; - } - - /* If we found a minimum timeout and it's sooner than the one specified in - * maxtv (if any), return it. Otherwise go with maxtv. - */ - if (min_offset != -1) - { - int ioffset = (min_offset > (long)INT_MAX) ? INT_MAX : (int)min_offset; - - nextstop.tv_sec = ioffset/1000; - nextstop.tv_usec = (ioffset%1000)*1000; - - if (!maxtv || ares__timedout(maxtv, &nextstop)) - { - *tvbuf = nextstop; - return tvbuf; - } - } - - return maxtv; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares__timeval.c nodejs-mozilla-12.22.12/deps/cares/src/ares__timeval.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares__timeval.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares__timeval.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ - -/* Copyright (C) 2008 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. M.I.T. makes no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include "ares.h" -#include "ares_private.h" - -#if defined(WIN32) && !defined(MSDOS) - -struct timeval ares__tvnow(void) -{ - /* - ** GetTickCount() is available on _all_ Windows versions from W95 up - ** to nowadays. Returns milliseconds elapsed since last system boot, - ** increases monotonically and wraps once 49.7 days have elapsed. - */ - struct timeval now; - DWORD milliseconds = GetTickCount(); - now.tv_sec = milliseconds / 1000; - now.tv_usec = (milliseconds % 1000) * 1000; - return now; -} - -#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC) - -struct timeval ares__tvnow(void) -{ - /* - ** clock_gettime() is granted to be increased monotonically when the - ** monotonic clock is queried. Time starting point is unspecified, it - ** could be the system start-up time, the Epoch, or something else, - ** in any case the time starting point does not change once that the - ** system has started up. - */ - struct timeval now; - struct timespec tsnow; - if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) { - now.tv_sec = tsnow.tv_sec; - now.tv_usec = tsnow.tv_nsec / 1000; - } - /* - ** Even when the configure process has truly detected monotonic clock - ** availability, it might happen that it is not actually available at - ** run-time. When this occurs simply fallback to other time source. - */ -#ifdef HAVE_GETTIMEOFDAY - else - (void)gettimeofday(&now, NULL); /* LCOV_EXCL_LINE */ -#else - else { - now.tv_sec = (long)time(NULL); - now.tv_usec = 0; - } -#endif - return now; -} - -#elif defined(HAVE_GETTIMEOFDAY) - -struct timeval ares__tvnow(void) -{ - /* - ** gettimeofday() is not granted to be increased monotonically, due to - ** clock drifting and external source time synchronization it can jump - ** forward or backward in time. - */ - struct timeval now; - (void)gettimeofday(&now, NULL); - return now; -} - -#else - -struct timeval ares__tvnow(void) -{ - /* - ** time() returns the value of time in seconds since the Epoch. - */ - struct timeval now; - now.tv_sec = (long)time(NULL); - now.tv_usec = 0; - return now; -} - -#endif - -#if 0 /* Not used */ -/* - * Make sure that the first argument is the more recent time, as otherwise - * we'll get a weird negative time-diff back... - * - * Returns: the time difference in number of milliseconds. - */ -long ares__tvdiff(struct timeval newer, struct timeval older) -{ - return (newer.tv_sec-older.tv_sec)*1000+ - (newer.tv_usec-older.tv_usec)/1000; -} -#endif - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_version.c nodejs-mozilla-12.22.12/deps/cares/src/ares_version.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_version.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_version.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ - -#include "ares_setup.h" -#include "ares.h" - -const char *ares_version(int *version) -{ - if(version) - *version = ARES_VERSION; - - return ARES_VERSION_STR; -} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_writev.c nodejs-mozilla-12.22.12/deps/cares/src/ares_writev.c --- nodejs-mozilla-12.18.1/deps/cares/src/ares_writev.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_writev.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" - -#ifdef HAVE_LIMITS_H -# include -#endif - -#include "ares.h" -#include "ares_private.h" - -#ifndef HAVE_WRITEV -ares_ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt) -{ - char *buffer, *bp; - int i; - size_t bytes = 0; - ares_ssize_t result; - - /* Validate iovcnt */ - if (iovcnt <= 0) - { - SET_ERRNO(EINVAL); - return (-1); - } - - /* Validate and find the sum of the iov_len values in the iov array */ - for (i = 0; i < iovcnt; i++) - { - if (iov[i].iov_len > INT_MAX - bytes) - { - SET_ERRNO(EINVAL); - return (-1); - } - bytes += iov[i].iov_len; - } - - if (bytes == 0) - return (0); - - /* Allocate a temporary buffer to hold the data */ - buffer = ares_malloc(bytes); - if (!buffer) - { - SET_ERRNO(ENOMEM); - return (-1); - } - - /* Copy the data into buffer */ - for (bp = buffer, i = 0; i < iovcnt; ++i) - { - memcpy (bp, iov[i].iov_base, iov[i].iov_len); - bp += iov[i].iov_len; - } - - /* Send buffer contents */ - result = swrite(s, buffer, bytes); - - ares_free(buffer); - - return (result); -} -#endif - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/ares_writev.h nodejs-mozilla-12.22.12/deps/cares/src/ares_writev.h --- nodejs-mozilla-12.18.1/deps/cares/src/ares_writev.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/ares_writev.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -#ifndef HEADER_CARES_WRITEV_H -#define HEADER_CARES_WRITEV_H - - -/* Copyright 1998 by the Massachusetts Institute of Technology. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#include "ares_setup.h" -#include "ares.h" - -#ifndef HAVE_WRITEV - -/* Structure for scatter/gather I/O. */ -struct iovec -{ - void *iov_base; /* Pointer to data. */ - size_t iov_len; /* Length of data. */ -}; - -extern ares_ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt); - -#endif - -#endif /* HEADER_CARES_WRITEV_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/AUTHORS nodejs-mozilla-12.22.12/deps/cares/src/AUTHORS --- nodejs-mozilla-12.18.1/deps/cares/src/AUTHORS 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/AUTHORS 1970-01-01 00:00:00.000000000 +0000 @@ -1,84 +0,0 @@ -c-ares is based on ares, and these are the people that have worked on it since -the fork was made: - -Albert Chin -Alex Loukissas -Alexander Klauer -Alexander Lazic -Alexey Simak -Andreas Rieke -Andrew Andkjar -Andrew Ayer -Andrew C. Morrow -Ashish Sharma -Ben Greear -Ben Noordhuis -BogDan Vatra -Brad House -Brad Spencer -Bram Matthys -Chris Araman -Dan Fandrich -Daniel Johnson -Daniel Stenberg -David Drysdale -David Stuart -Denis Bilenko -Dima Tisnek -Dirk Manske -Dominick Meglio -Doug Goldstein -Doug Kwan -Duncan Wilcox -Eino Tuominen -Erik Kline -Fedor Indutny -Frederic Germain -Geert Uytterhoeven -George Neill -Gisle Vanem -Google LLC -Gregor Jasny -Guenter Knauf -Guilherme Balena Versiani -Gunter Knauf -Henrik Stoerner -Jakub Hrozek -James Bursa -Jérémy Lal -John Schember -Keith Shaw -Lei Shi -Marko Kreen -Michael Wallner -Mike Crowe -Nick Alcock -Nick Mathewson -Nicolas "Pixel" Noble -Ning Dong -Oleg Pudeyev -Patrick Valsecchi -Patrik Thunstrom -Paul Saab -Peter Pentchev -Phil Blundell -Poul Thomas Lomholt -Ravi Pratap -Robin Cornelius -Saúl Ibarra Corretgé -Sebastian at basti79.de -Shmulik Regev -Stefan Bühler -Steinar H. Gunderson -Svante Karlsson -Tofu Linden -Tom Hughes -Tor Arntsen -Viktor Szakats -Vlad Dinulescu -William Ahern -Yang Tse -hpopescu at ixiacom.com -liren at vivisimo.com -nordsturm -saghul diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/bitncmp.c nodejs-mozilla-12.22.12/deps/cares/src/bitncmp.c --- nodejs-mozilla-12.18.1/deps/cares/src/bitncmp.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/bitncmp.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ - -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Copyright (c) 1996,1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef HAVE_BITNCMP - -#include "ares_setup.h" -#include "bitncmp.h" - -/* - * int - * bitncmp(l, r, n) - * compare bit masks l and r, for n bits. - * return: - * <0, >0, or 0 in the libc tradition. - * note: - * network byte order assumed. this means 192.5.5.240/28 has - * 0x11110000 in its fourth octet. - * author: - * Paul Vixie (ISC), June 1996 - */ -int ares__bitncmp(const void *l, const void *r, int n) -{ - unsigned int lb, rb; - int x, b; - - b = n / 8; - x = memcmp(l, r, b); - if (x || (n % 8) == 0) - return (x); - - lb = ((const unsigned char *)l)[b]; - rb = ((const unsigned char *)r)[b]; - for (b = n % 8; b > 0; b--) { - if ((lb & 0x80) != (rb & 0x80)) { - if (lb & 0x80) - return (1); - return (-1); - } - lb <<= 1; - rb <<= 1; - } - return (0); -} -#endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/bitncmp.h nodejs-mozilla-12.22.12/deps/cares/src/bitncmp.h --- nodejs-mozilla-12.18.1/deps/cares/src/bitncmp.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/bitncmp.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -#ifndef __ARES_BITNCMP_H -#define __ARES_BITNCMP_H - - -/* Copyright (C) 2005, 2013 by Dominick Meglio - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * M.I.T. makes no representations about the suitability of - * this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -#ifndef HAVE_BITNCMP -int ares__bitncmp(const void *l, const void *r, int n); -#else -#define ares__bitncmp(x,y,z) bitncmp(x,y,z) -#endif - -#endif /* __ARES_BITNCMP_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/CMakeLists.txt nodejs-mozilla-12.22.12/deps/cares/src/CMakeLists.txt --- nodejs-mozilla-12.18.1/deps/cares/src/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/CMakeLists.txt 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,2 @@ +ADD_SUBDIRECTORY (lib) +ADD_SUBDIRECTORY (tools) diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/config-win32.h nodejs-mozilla-12.22.12/deps/cares/src/config-win32.h --- nodejs-mozilla-12.18.1/deps/cares/src/config-win32.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/config-win32.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,351 +0,0 @@ -#ifndef HEADER_CARES_CONFIG_WIN32_H -#define HEADER_CARES_CONFIG_WIN32_H - -/* Copyright (C) 2004 - 2011 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. M.I.T. makes no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - -/* ================================================================ */ -/* c-ares/config-win32.h - Hand crafted config file for Windows */ -/* ================================================================ */ - -/* ---------------------------------------------------------------- */ -/* HEADER FILES */ -/* ---------------------------------------------------------------- */ - -/* Define if you have the header file. */ -#define HAVE_ASSERT_H 1 - -/* Define if you have the header file. */ -#define HAVE_ERRNO_H 1 - -/* Define if you have the header file. */ -#if defined(__MINGW32__) || defined(__POCC__) -#define HAVE_GETOPT_H 1 -#endif - -/* Define if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define if you have the header file. */ -#ifndef __SALFORDC__ -#define HAVE_PROCESS_H 1 -#endif - -/* Define if you have the header file. */ -#define HAVE_SIGNAL_H 1 - -/* Define if you have the header file */ -/* #define HAVE_SYS_TIME_H 1 */ - -/* Define if you have the header file. */ -#define HAVE_TIME_H 1 - -/* Define if you have the header file. */ -#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \ - defined(__POCC__) -#define HAVE_UNISTD_H 1 -#endif - -/* Define if you have the header file. */ -#define HAVE_WINDOWS_H 1 - -/* Define if you have the header file. */ -#define HAVE_WINSOCK_H 1 - -/* Define if you have the header file. */ -#ifndef __SALFORDC__ -#define HAVE_WINSOCK2_H 1 -#endif - -/* Define if you have the header file. */ -#ifndef __SALFORDC__ -#define HAVE_WS2TCPIP_H 1 -#endif - -/* ---------------------------------------------------------------- */ -/* OTHER HEADER INFO */ -/* ---------------------------------------------------------------- */ - -/* Define if sig_atomic_t is an available typedef. */ -#define HAVE_SIG_ATOMIC_T 1 - -/* Define if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define if you can safely include both and . */ -/* #define TIME_WITH_SYS_TIME 1 */ - -/* ---------------------------------------------------------------- */ -/* FUNCTIONS */ -/* ---------------------------------------------------------------- */ - -/* Define if you have the closesocket function. */ -#define HAVE_CLOSESOCKET 1 - -/* Define if you have the getenv function. */ -#define HAVE_GETENV 1 - -/* Define if you have the gethostname function. */ -#define HAVE_GETHOSTNAME 1 - -/* Define if you have the ioctlsocket function. */ -#define HAVE_IOCTLSOCKET 1 - -/* Define if you have a working ioctlsocket FIONBIO function. */ -#define HAVE_IOCTLSOCKET_FIONBIO 1 - -/* Define if you have the strcasecmp function. */ -/* #define HAVE_STRCASECMP 1 */ - -/* Define if you have the strdup function. */ -#define HAVE_STRDUP 1 - -/* Define if you have the stricmp function. */ -#define HAVE_STRICMP 1 - -/* Define if you have the strncasecmp function. */ -/* #define HAVE_STRNCASECMP 1 */ - -/* Define if you have the strnicmp function. */ -#define HAVE_STRNICMP 1 - -/* Define if you have the recv function. */ -#define HAVE_RECV 1 - -/* Define to the type of arg 1 for recv. */ -#define RECV_TYPE_ARG1 SOCKET - -/* Define to the type of arg 2 for recv. */ -#define RECV_TYPE_ARG2 char * - -/* Define to the type of arg 3 for recv. */ -#define RECV_TYPE_ARG3 int - -/* Define to the type of arg 4 for recv. */ -#define RECV_TYPE_ARG4 int - -/* Define to the function return type for recv. */ -#define RECV_TYPE_RETV int - -/* Define if you have the recvfrom function. */ -#define HAVE_RECVFROM 1 - -/* Define to the type of arg 1 for recvfrom. */ -#define RECVFROM_TYPE_ARG1 SOCKET - -/* Define to the type pointed by arg 2 for recvfrom. */ -#define RECVFROM_TYPE_ARG2 char - -/* Define to the type of arg 3 for recvfrom. */ -#define RECVFROM_TYPE_ARG3 int - -/* Define to the type of arg 4 for recvfrom. */ -#define RECVFROM_TYPE_ARG4 int - -/* Define to the type pointed by arg 5 for recvfrom. */ -#define RECVFROM_TYPE_ARG5 struct sockaddr - -/* Define to the type pointed by arg 6 for recvfrom. */ -#define RECVFROM_TYPE_ARG6 int - -/* Define to the function return type for recvfrom. */ -#define RECVFROM_TYPE_RETV int - -/* Define if you have the send function. */ -#define HAVE_SEND 1 - -/* Define to the type of arg 1 for send. */ -#define SEND_TYPE_ARG1 SOCKET - -/* Define to the type qualifier of arg 2 for send. */ -#define SEND_QUAL_ARG2 const - -/* Define to the type of arg 2 for send. */ -#define SEND_TYPE_ARG2 char * - -/* Define to the type of arg 3 for send. */ -#define SEND_TYPE_ARG3 int - -/* Define to the type of arg 4 for send. */ -#define SEND_TYPE_ARG4 int - -/* Define to the function return type for send. */ -#define SEND_TYPE_RETV int - -/* Specifics for the Watt-32 tcp/ip stack. */ -#ifdef WATT32 - #define SOCKET int - #define NS_INADDRSZ 4 - #define HAVE_ARPA_NAMESER_H 1 - #define HAVE_ARPA_INET_H 1 - #define HAVE_NETDB_H 1 - #define HAVE_NETINET_IN_H 1 - #define HAVE_SYS_SOCKET_H 1 - #define HAVE_NETINET_TCP_H 1 - #define HAVE_AF_INET6 1 - #define HAVE_PF_INET6 1 - #define HAVE_STRUCT_IN6_ADDR 1 - #define HAVE_STRUCT_SOCKADDR_IN6 1 - #undef HAVE_WINSOCK_H - #undef HAVE_WINSOCK2_H - #undef HAVE_WS2TCPIP_H -#endif - -/* ---------------------------------------------------------------- */ -/* TYPEDEF REPLACEMENTS */ -/* ---------------------------------------------------------------- */ - -/* Define if in_addr_t is not an available 'typedefed' type. */ -#define in_addr_t unsigned long - -/* Define to the return type of signal handlers (int or void). */ -#define RETSIGTYPE void - -#ifdef __cplusplus -/* Compiling headers in C++ mode means bool is available */ -#define HAVE_BOOL_T -#endif - -/* ---------------------------------------------------------------- */ -/* TYPE SIZES */ -/* ---------------------------------------------------------------- */ - -/* ---------------------------------------------------------------- */ -/* STRUCT RELATED */ -/* ---------------------------------------------------------------- */ - -/* Define if you have struct addrinfo. */ -#define HAVE_STRUCT_ADDRINFO 1 - -/* Define if you have struct sockaddr_storage. */ -#if !defined(__SALFORDC__) && !defined(__BORLANDC__) -#define HAVE_STRUCT_SOCKADDR_STORAGE 1 -#endif - -/* Define if you have struct timeval. */ -#define HAVE_STRUCT_TIMEVAL 1 - -/* ---------------------------------------------------------------- */ -/* COMPILER SPECIFIC */ -/* ---------------------------------------------------------------- */ - -/* Define to avoid VS2005 complaining about portable C functions. */ -#if defined(_MSC_VER) && (_MSC_VER >= 1400) -# define _CRT_SECURE_NO_DEPRECATE 1 -# define _CRT_NONSTDC_NO_DEPRECATE 1 -#endif - -/* Set the Target to Vista. However, any symbols required above Win2000 - * should be loaded via LoadLibrary() */ -#if defined(_MSC_VER) && (_MSC_VER >= 1500) -# define VS2008_MIN_TARGET 0x0600 -#endif - -/* VS2008 default target settings and minimum build target check. */ -#if defined(_MSC_VER) && (_MSC_VER >= 1500) -# ifndef _WIN32_WINNT -# define _WIN32_WINNT VS2008_MIN_TARGET -# endif -# ifndef WINVER -# define WINVER VS2008_MIN_TARGET -# endif -# if (_WIN32_WINNT < VS2008_MIN_TARGET) || (WINVER < VS2008_MIN_TARGET) -# error VS2008 does not support Windows build targets prior to Windows 2000 -# endif -#endif - -/* When no build target is specified Pelles C 5.00 and later default build - target is Windows Vista. */ -#if defined(__POCC__) && (__POCC__ >= 500) -# ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x0600 -# endif -# ifndef WINVER -# define WINVER 0x0600 -# endif -#endif - -/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is - quite convoluted, compiler dependent and even build target dependent. */ -#if defined(HAVE_WS2TCPIP_H) -# if defined(__POCC__) -# define HAVE_FREEADDRINFO 1 -# define HAVE_GETADDRINFO 1 -# define HAVE_GETNAMEINFO 1 -# elif defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501) -# define HAVE_FREEADDRINFO 1 -# define HAVE_GETADDRINFO 1 -# define HAVE_GETNAMEINFO 1 -# elif defined(_MSC_VER) && (_MSC_VER >= 1200) -# define HAVE_FREEADDRINFO 1 -# define HAVE_GETADDRINFO 1 -# define HAVE_GETNAMEINFO 1 -# endif -#endif - -#if defined(__POCC__) -# ifndef _MSC_VER -# error Microsoft extensions /Ze compiler option is required -# endif -# ifndef __POCC__OLDNAMES -# error Compatibility names /Go compiler option is required -# endif -#endif - -/* ---------------------------------------------------------------- */ -/* IPV6 COMPATIBILITY */ -/* ---------------------------------------------------------------- */ - -/* Define if you have address family AF_INET6. */ -#ifdef HAVE_WINSOCK2_H -#define HAVE_AF_INET6 1 -#endif - -/* Define if you have protocol family PF_INET6. */ -#ifdef HAVE_WINSOCK2_H -#define HAVE_PF_INET6 1 -#endif - -/* Define if you have struct in6_addr. */ -#ifdef HAVE_WS2TCPIP_H -#define HAVE_STRUCT_IN6_ADDR 1 -#endif - -/* Define if you have struct sockaddr_in6. */ -#ifdef HAVE_WS2TCPIP_H -#define HAVE_STRUCT_SOCKADDR_IN6 1 -#endif - -/* Define if you have sockaddr_in6 with scopeid. */ -#ifdef HAVE_WS2TCPIP_H -#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 -#endif - -/* ---------------------------------------------------------------- */ -/* Win CE */ -/* ---------------------------------------------------------------- */ - -/* FIXME: A proper config-win32ce.h should be created to hold these */ - -/* - * System error codes for Windows CE - */ - -#if defined(_WIN32_WCE) && !defined(HAVE_ERRNO_H) -# define ENOENT ERROR_FILE_NOT_FOUND -# define ESRCH ERROR_PATH_NOT_FOUND -# define ENOMEM ERROR_NOT_ENOUGH_MEMORY -# define ENOSPC ERROR_INVALID_PARAMETER -#endif - -#endif /* HEADER_CARES_CONFIG_WIN32_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/inet_net_pton.c nodejs-mozilla-12.22.12/deps/cares/src/inet_net_pton.c --- nodejs-mozilla-12.18.1/deps/cares/src/inet_net_pton.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/inet_net_pton.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,450 +0,0 @@ - -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Copyright (c) 1996,1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_ipv6.h" -#include "ares_nowarn.h" -#include "ares_inet_net_pton.h" - - -const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }; - - -#ifndef HAVE_INET_NET_PTON - -/* - * static int - * inet_net_pton_ipv4(src, dst, size) - * convert IPv4 network number from presentation to network format. - * accepts hex octets, hex strings, decimal octets, and /CIDR. - * "size" is in bytes and describes "dst". - * return: - * number of bits, either imputed classfully or specified with /CIDR, - * or -1 if some failure occurred (check errno). ENOENT means it was - * not an IPv4 network specification. - * note: - * network byte order assumed. this means 192.5.5.240/28 has - * 0b11110000 in its fourth octet. - * note: - * On Windows we store the error in the thread errno, not - * in the winsock error code. This is to avoid loosing the - * actual last winsock error. So use macro ERRNO to fetch the - * errno this funtion sets when returning (-1), not SOCKERRNO. - * author: - * Paul Vixie (ISC), June 1996 - */ -static int -inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size) -{ - static const char xdigits[] = "0123456789abcdef"; - static const char digits[] = "0123456789"; - int n, ch, tmp = 0, dirty, bits; - const unsigned char *odst = dst; - - ch = *src++; - if (ch == '0' && (src[0] == 'x' || src[0] == 'X') - && ISASCII(src[1]) - && ISXDIGIT(src[1])) { - /* Hexadecimal: Eat nybble string. */ - if (!size) - goto emsgsize; - dirty = 0; - src++; /* skip x or X. */ - while ((ch = *src++) != '\0' && ISASCII(ch) && ISXDIGIT(ch)) { - if (ISUPPER(ch)) - ch = tolower(ch); - n = aresx_sztosi(strchr(xdigits, ch) - xdigits); - if (dirty == 0) - tmp = n; - else - tmp = (tmp << 4) | n; - if (++dirty == 2) { - if (!size--) - goto emsgsize; - *dst++ = (unsigned char) tmp; - dirty = 0; - } - } - if (dirty) { /* Odd trailing nybble? */ - if (!size--) - goto emsgsize; - *dst++ = (unsigned char) (tmp << 4); - } - } else if (ISASCII(ch) && ISDIGIT(ch)) { - /* Decimal: eat dotted digit string. */ - for (;;) { - tmp = 0; - do { - n = aresx_sztosi(strchr(digits, ch) - digits); - tmp *= 10; - tmp += n; - if (tmp > 255) - goto enoent; - } while ((ch = *src++) != '\0' && - ISASCII(ch) && ISDIGIT(ch)); - if (!size--) - goto emsgsize; - *dst++ = (unsigned char) tmp; - if (ch == '\0' || ch == '/') - break; - if (ch != '.') - goto enoent; - ch = *src++; - if (!ISASCII(ch) || !ISDIGIT(ch)) - goto enoent; - } - } else - goto enoent; - - bits = -1; - if (ch == '/' && ISASCII(src[0]) && - ISDIGIT(src[0]) && dst > odst) { - /* CIDR width specifier. Nothing can follow it. */ - ch = *src++; /* Skip over the /. */ - bits = 0; - do { - n = aresx_sztosi(strchr(digits, ch) - digits); - bits *= 10; - bits += n; - if (bits > 32) - goto enoent; - } while ((ch = *src++) != '\0' && ISASCII(ch) && ISDIGIT(ch)); - if (ch != '\0') - goto enoent; - } - - /* Firey death and destruction unless we prefetched EOS. */ - if (ch != '\0') - goto enoent; - - /* If nothing was written to the destination, we found no address. */ - if (dst == odst) - goto enoent; /* LCOV_EXCL_LINE: all valid paths above increment dst */ - /* If no CIDR spec was given, infer width from net class. */ - if (bits == -1) { - if (*odst >= 240) /* Class E */ - bits = 32; - else if (*odst >= 224) /* Class D */ - bits = 8; - else if (*odst >= 192) /* Class C */ - bits = 24; - else if (*odst >= 128) /* Class B */ - bits = 16; - else /* Class A */ - bits = 8; - /* If imputed mask is narrower than specified octets, widen. */ - if (bits < ((dst - odst) * 8)) - bits = aresx_sztosi(dst - odst) * 8; - /* - * If there are no additional bits specified for a class D - * address adjust bits to 4. - */ - if (bits == 8 && *odst == 224) - bits = 4; - } - /* Extend network to cover the actual mask. */ - while (bits > ((dst - odst) * 8)) { - if (!size--) - goto emsgsize; - *dst++ = '\0'; - } - return (bits); - - enoent: - SET_ERRNO(ENOENT); - return (-1); - - emsgsize: - SET_ERRNO(EMSGSIZE); - return (-1); -} - -static int -getbits(const char *src, int *bitsp) -{ - static const char digits[] = "0123456789"; - int n; - int val; - char ch; - - val = 0; - n = 0; - while ((ch = *src++) != '\0') { - const char *pch; - - pch = strchr(digits, ch); - if (pch != NULL) { - if (n++ != 0 && val == 0) /* no leading zeros */ - return (0); - val *= 10; - val += aresx_sztosi(pch - digits); - if (val > 128) /* range */ - return (0); - continue; - } - return (0); - } - if (n == 0) - return (0); - *bitsp = val; - return (1); -} - -static int -getv4(const char *src, unsigned char *dst, int *bitsp) -{ - static const char digits[] = "0123456789"; - unsigned char *odst = dst; - int n; - unsigned int val; - char ch; - - val = 0; - n = 0; - while ((ch = *src++) != '\0') { - const char *pch; - - pch = strchr(digits, ch); - if (pch != NULL) { - if (n++ != 0 && val == 0) /* no leading zeros */ - return (0); - val *= 10; - val += aresx_sztoui(pch - digits); - if (val > 255) /* range */ - return (0); - continue; - } - if (ch == '.' || ch == '/') { - if (dst - odst > 3) /* too many octets? */ - return (0); - *dst++ = (unsigned char)val; - if (ch == '/') - return (getbits(src, bitsp)); - val = 0; - n = 0; - continue; - } - return (0); - } - if (n == 0) - return (0); - if (dst - odst > 3) /* too many octets? */ - return (0); - *dst = (unsigned char)val; - return 1; -} - -static int -inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size) -{ - static const char xdigits_l[] = "0123456789abcdef", - xdigits_u[] = "0123456789ABCDEF"; - unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; - const char *xdigits, *curtok; - int ch, saw_xdigit; - unsigned int val; - int digits; - int bits; - size_t bytes; - int words; - int ipv4; - - memset((tp = tmp), '\0', NS_IN6ADDRSZ); - endp = tp + NS_IN6ADDRSZ; - colonp = NULL; - /* Leading :: requires some special handling. */ - if (*src == ':') - if (*++src != ':') - goto enoent; - curtok = src; - saw_xdigit = 0; - val = 0; - digits = 0; - bits = -1; - ipv4 = 0; - while ((ch = *src++) != '\0') { - const char *pch; - - if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) - pch = strchr((xdigits = xdigits_u), ch); - if (pch != NULL) { - val <<= 4; - val |= aresx_sztoui(pch - xdigits); - if (++digits > 4) - goto enoent; - saw_xdigit = 1; - continue; - } - if (ch == ':') { - curtok = src; - if (!saw_xdigit) { - if (colonp) - goto enoent; - colonp = tp; - continue; - } else if (*src == '\0') - goto enoent; - if (tp + NS_INT16SZ > endp) - return (0); - *tp++ = (unsigned char)((val >> 8) & 0xff); - *tp++ = (unsigned char)(val & 0xff); - saw_xdigit = 0; - digits = 0; - val = 0; - continue; - } - if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && - getv4(curtok, tp, &bits) > 0) { - tp += NS_INADDRSZ; - saw_xdigit = 0; - ipv4 = 1; - break; /* '\0' was seen by inet_pton4(). */ - } - if (ch == '/' && getbits(src, &bits) > 0) - break; - goto enoent; - } - if (saw_xdigit) { - if (tp + NS_INT16SZ > endp) - goto enoent; - *tp++ = (unsigned char)((val >> 8) & 0xff); - *tp++ = (unsigned char)(val & 0xff); - } - if (bits == -1) - bits = 128; - - words = (bits + 15) / 16; - if (words < 2) - words = 2; - if (ipv4) - words = 8; - endp = tmp + 2 * words; - - if (colonp != NULL) { - /* - * Since some memmove()'s erroneously fail to handle - * overlapping regions, we'll do the shift by hand. - */ - const ares_ssize_t n = tp - colonp; - ares_ssize_t i; - - if (tp == endp) - goto enoent; - for (i = 1; i <= n; i++) { - *(endp - i) = *(colonp + n - i); - *(colonp + n - i) = 0; - } - tp = endp; - } - if (tp != endp) - goto enoent; - - bytes = (bits + 7) / 8; - if (bytes > size) - goto emsgsize; - memcpy(dst, tmp, bytes); - return (bits); - - enoent: - SET_ERRNO(ENOENT); - return (-1); - - emsgsize: - SET_ERRNO(EMSGSIZE); - return (-1); -} - -/* - * int - * inet_net_pton(af, src, dst, size) - * convert network number from presentation to network format. - * accepts hex octets, hex strings, decimal octets, and /CIDR. - * "size" is in bytes and describes "dst". - * return: - * number of bits, either imputed classfully or specified with /CIDR, - * or -1 if some failure occurred (check errno). ENOENT means it was - * not a valid network specification. - * note: - * On Windows we store the error in the thread errno, not - * in the winsock error code. This is to avoid loosing the - * actual last winsock error. So use macro ERRNO to fetch the - * errno this funtion sets when returning (-1), not SOCKERRNO. - * author: - * Paul Vixie (ISC), June 1996 - */ -int -ares_inet_net_pton(int af, const char *src, void *dst, size_t size) -{ - switch (af) { - case AF_INET: - return (inet_net_pton_ipv4(src, dst, size)); - case AF_INET6: - return (inet_net_pton_ipv6(src, dst, size)); - default: - SET_ERRNO(EAFNOSUPPORT); - return (-1); - } -} - -#endif /* HAVE_INET_NET_PTON */ - -#ifndef HAVE_INET_PTON -int ares_inet_pton(int af, const char *src, void *dst) -{ - int result; - size_t size; - - if (af == AF_INET) - size = sizeof(struct in_addr); - else if (af == AF_INET6) - size = sizeof(struct ares_in6_addr); - else - { - SET_ERRNO(EAFNOSUPPORT); - return -1; - } - result = ares_inet_net_pton(af, src, dst, size); - if (result == -1 && ERRNO == ENOENT) - return 0; - return (result > -1 ? 1 : -1); -} -#else /* HAVE_INET_PTON */ -int ares_inet_pton(int af, const char *src, void *dst) -{ - /* just relay this to the underlying function */ - return inet_pton(af, src, dst); -} - -#endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/inet_ntop.c nodejs-mozilla-12.22.12/deps/cares/src/inet_ntop.c --- nodejs-mozilla-12.18.1/deps/cares/src/inet_ntop.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/inet_ntop.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") - * Copyright (c) 1996-1999 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ares_setup.h" - -#ifdef HAVE_NETINET_IN_H -# include -#endif -#ifdef HAVE_ARPA_INET_H -# include -#endif -#ifdef HAVE_ARPA_NAMESER_H -# include -#else -# include "nameser.h" -#endif -#ifdef HAVE_ARPA_NAMESER_COMPAT_H -# include -#endif - -#include "ares.h" -#include "ares_ipv6.h" - -#ifndef HAVE_INET_NTOP - -/* - * WARNING: Don't even consider trying to compile this on a system where - * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. - */ - -static const char *inet_ntop4(const unsigned char *src, char *dst, size_t size); -static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size); - -/* char * - * inet_ntop(af, src, dst, size) - * convert a network format address to presentation format. - * return: - * pointer to presentation format address (`dst'), or NULL (see errno). - * note: - * On Windows we store the error in the thread errno, not - * in the winsock error code. This is to avoid loosing the - * actual last winsock error. So use macro ERRNO to fetch the - * errno this function sets when returning NULL, not SOCKERRNO. - * author: - * Paul Vixie, 1996. - */ -const char * -ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size) -{ - switch (af) { - case AF_INET: - return (inet_ntop4(src, dst, (size_t)size)); - case AF_INET6: - return (inet_ntop6(src, dst, (size_t)size)); - default: - SET_ERRNO(EAFNOSUPPORT); - return (NULL); - } - /* NOTREACHED */ -} - -/* const char * - * inet_ntop4(src, dst, size) - * format an IPv4 address - * return: - * `dst' (as a const) - * notes: - * (1) uses no statics - * (2) takes a unsigned char* not an in_addr as input - * author: - * Paul Vixie, 1996. - */ -static const char * -inet_ntop4(const unsigned char *src, char *dst, size_t size) -{ - static const char fmt[] = "%u.%u.%u.%u"; - char tmp[sizeof("255.255.255.255")]; - - if ((size_t)sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) >= size) { - SET_ERRNO(ENOSPC); - return (NULL); - } - strcpy(dst, tmp); - return (dst); -} - -/* const char * - * inet_ntop6(src, dst, size) - * convert IPv6 binary address into presentation (printable) format - * author: - * Paul Vixie, 1996. - */ -static const char * -inet_ntop6(const unsigned char *src, char *dst, size_t size) -{ - /* - * Note that int32_t and int16_t need only be "at least" large enough - * to contain a value of the specified size. On some systems, like - * Crays, there is no such thing as an integer variable with 16 bits. - * Keep this in mind if you think this function should have been coded - * to use pointer overlays. All the world's not a VAX. - */ - char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; - char *tp; - struct { int base, len; } best, cur; - unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; - int i; - - /* - * Preprocess: - * Copy the input (bytewise) array into a wordwise array. - * Find the longest run of 0x00's in src[] for :: shorthanding. - */ - memset(words, '\0', sizeof(words)); - for (i = 0; i < NS_IN6ADDRSZ; i++) - words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); - best.base = -1; - best.len = 0; - cur.base = -1; - cur.len = 0; - for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { - if (words[i] == 0) { - if (cur.base == -1) - cur.base = i, cur.len = 1; - else - cur.len++; - } else { - if (cur.base != -1) { - if (best.base == -1 || cur.len > best.len) - best = cur; - cur.base = -1; - } - } - } - if (cur.base != -1) { - if (best.base == -1 || cur.len > best.len) - best = cur; - } - if (best.base != -1 && best.len < 2) - best.base = -1; - - /* - * Format the result. - */ - tp = tmp; - for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { - /* Are we inside the best run of 0x00's? */ - if (best.base != -1 && i >= best.base && - i < (best.base + best.len)) { - if (i == best.base) - *tp++ = ':'; - continue; - } - /* Are we following an initial run of 0x00s or any real hex? */ - if (i != 0) - *tp++ = ':'; - /* Is this address an encapsulated IPv4? */ - if (i == 6 && best.base == 0 && (best.len == 6 || - (best.len == 7 && words[7] != 0x0001) || - (best.len == 5 && words[5] == 0xffff))) { - if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp))) - return (NULL); - tp += strlen(tp); - break; - } - tp += sprintf(tp, "%x", words[i]); - } - /* Was it a trailing run of 0x00's? */ - if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) - *tp++ = ':'; - *tp++ = '\0'; - - /* - * Check for overflow, copy, and we're done. - */ - if ((size_t)(tp - tmp) > size) { - SET_ERRNO(ENOSPC); - return (NULL); - } - strcpy(dst, tmp); - return (dst); -} - -#else /* HAVE_INET_NTOP */ - -const char * -ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size) -{ - /* just relay this to the underlying function */ - return inet_ntop(af, src, dst, size); -} - -#endif /* HAVE_INET_NTOP */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__addrinfo2hostent.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__addrinfo2hostent.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__addrinfo2hostent.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__addrinfo2hostent.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,266 @@ +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright 2005 Dominick Meglio + * Copyright (C) 2019 by Andrew Selivanov + * Copyright (C) 2021 by Brad House + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#ifdef HAVE_LIMITS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_inet_net_pton.h" +#include "ares_private.h" + +int ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family, + struct hostent **host) +{ + struct ares_addrinfo_node *next; + struct ares_addrinfo_cname *next_cname; + char **aliases = NULL; + char *addrs = NULL; + int naliases = 0, naddrs = 0, alias = 0, i; + + if (ai == NULL || host == NULL) + return ARES_EBADQUERY; + + *host = ares_malloc(sizeof(**host)); + if (!(*host)) + { + goto enomem; + } + memset(*host, 0, sizeof(**host)); + + /* Use the first node of the response as the family, since hostent can only + * represent one family. We assume getaddrinfo() returned a sorted list if + * the user requested AF_UNSPEC. */ + if (family == AF_UNSPEC && ai->nodes) + family = ai->nodes->ai_family; + + next = ai->nodes; + while (next) + { + if(next->ai_family == family) + { + ++naddrs; + } + next = next->ai_next; + } + + next_cname = ai->cnames; + while (next_cname) + { + if(next_cname->alias) + ++naliases; + next_cname = next_cname->next; + } + + aliases = ares_malloc((naliases + 1) * sizeof(char *)); + if (!aliases) + { + goto enomem; + } + (*host)->h_aliases = aliases; + memset(aliases, 0, (naliases + 1) * sizeof(char *)); + + if (naliases) + { + next_cname = ai->cnames; + while (next_cname) + { + if(next_cname->alias) { + aliases[alias] = ares_strdup(next_cname->alias); + if (!aliases[alias]) { + goto enomem; + } + alias++; + } + next_cname = next_cname->next; + } + } + + + (*host)->h_addr_list = ares_malloc((naddrs + 1) * sizeof(char *)); + if (!(*host)->h_addr_list) + { + goto enomem; + } + + memset((*host)->h_addr_list, 0, (naddrs + 1) * sizeof(char *)); + + if (ai->cnames) + { + (*host)->h_name = ares_strdup(ai->cnames->name); + if ((*host)->h_name == NULL && ai->cnames->name) + { + goto enomem; + } + } + else + { + (*host)->h_name = ares_strdup(ai->name); + if ((*host)->h_name == NULL && ai->name) + { + goto enomem; + } + } + + (*host)->h_addrtype = family; + (*host)->h_length = (family == AF_INET)? + sizeof(struct in_addr):sizeof(struct ares_in6_addr); + + if (naddrs) + { + addrs = ares_malloc(naddrs * (*host)->h_length); + if (!addrs) + { + goto enomem; + } + + i = 0; + next = ai->nodes; + while (next) + { + if(next->ai_family == family) + { + (*host)->h_addr_list[i] = addrs + (i * (*host)->h_length); + if (family == AF_INET6) + { + memcpy((*host)->h_addr_list[i], + &(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr), + (*host)->h_length); + } + else + { + memcpy((*host)->h_addr_list[i], + &(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr), + (*host)->h_length); + } + ++i; + } + next = next->ai_next; + } + + if (i == 0) + { + ares_free(addrs); + } + } + + if (naddrs == 0 && naliases == 0) + { + ares_free_hostent(*host); + *host = NULL; + return ARES_ENODATA; + } + + return ARES_SUCCESS; + +enomem: + ares_free_hostent(*host); + *host = NULL; + return ARES_ENOMEM; +} + + +int ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family, + int req_naddrttls, struct ares_addrttl *addrttls, + struct ares_addr6ttl *addr6ttls, int *naddrttls) +{ + struct ares_addrinfo_node *next; + struct ares_addrinfo_cname *next_cname; + int cname_ttl = INT_MAX; + + if (family != AF_INET && family != AF_INET6) + return ARES_EBADQUERY; + + if (ai == NULL || naddrttls == NULL) + return ARES_EBADQUERY; + + if (family == AF_INET && addrttls == NULL) + return ARES_EBADQUERY; + + if (family == AF_INET6 && addr6ttls == NULL) + return ARES_EBADQUERY; + + if (req_naddrttls == 0) + return ARES_EBADQUERY; + + *naddrttls = 0; + + next_cname = ai->cnames; + while (next_cname) + { + if(next_cname->ttl < cname_ttl) + cname_ttl = next_cname->ttl; + next_cname = next_cname->next; + } + + next = ai->nodes; + while (next) + { + if(next->ai_family == family) + { + if (*naddrttls < req_naddrttls) + { + if (family == AF_INET6) + { + if(next->ai_ttl > cname_ttl) + addr6ttls[*naddrttls].ttl = cname_ttl; + else + addr6ttls[*naddrttls].ttl = next->ai_ttl; + + memcpy(&addr6ttls[*naddrttls].ip6addr, + &(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr), + sizeof(struct ares_in6_addr)); + } + else + { + if(next->ai_ttl > cname_ttl) + addrttls[*naddrttls].ttl = cname_ttl; + else + addrttls[*naddrttls].ttl = next->ai_ttl; + memcpy(&addrttls[*naddrttls].ipaddr, + &(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr), + sizeof(struct in_addr)); + } + (*naddrttls)++; + } + } + next = next->ai_next; + } + + return ARES_SUCCESS; +} + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__addrinfo_localhost.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__addrinfo_localhost.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__addrinfo_localhost.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__addrinfo_localhost.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,240 @@ +/* Copyright (C) 2021 + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#if defined(_WIN32) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600 +#include +#include +#endif + +#include "ares.h" +#include "ares_inet_net_pton.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +int ares_append_ai_node(int aftype, + unsigned short port, + int ttl, + const void *adata, + struct ares_addrinfo_node **nodes) +{ + struct ares_addrinfo_node *node; + + node = ares__append_addrinfo_node(nodes); + if (!node) + { + return ARES_ENOMEM; + } + + memset(node, 0, sizeof(*node)); + + if (aftype == AF_INET) + { + struct sockaddr_in *sin = ares_malloc(sizeof(*sin)); + if (!sin) + { + return ARES_ENOMEM; + } + + memset(sin, 0, sizeof(*sin)); + memcpy(&sin->sin_addr.s_addr, adata, sizeof(sin->sin_addr.s_addr)); + sin->sin_family = AF_INET; + sin->sin_port = htons(port); + + node->ai_addr = (struct sockaddr *)sin; + node->ai_family = AF_INET; + node->ai_addrlen = sizeof(*sin); + node->ai_addr = (struct sockaddr *)sin; + node->ai_ttl = ttl; + } + + if (aftype == AF_INET6) + { + struct sockaddr_in6 *sin6 = ares_malloc(sizeof(*sin6)); + if (!sin6) + { + return ARES_ENOMEM; + } + + memset(sin6, 0, sizeof(*sin6)); + memcpy(&sin6->sin6_addr.s6_addr, adata, sizeof(sin6->sin6_addr.s6_addr)); + sin6->sin6_family = AF_INET6; + sin6->sin6_port = htons(port); + + node->ai_addr = (struct sockaddr *)sin6; + node->ai_family = AF_INET6; + node->ai_addrlen = sizeof(*sin6); + node->ai_addr = (struct sockaddr *)sin6; + node->ai_ttl = ttl; + } + + return ARES_SUCCESS; +} + + +static int ares__default_loopback_addrs(int aftype, + unsigned short port, + struct ares_addrinfo_node **nodes) +{ + int status = ARES_SUCCESS; + + if (aftype == AF_UNSPEC || aftype == AF_INET6) + { + struct ares_in6_addr addr6; + ares_inet_pton(AF_INET6, "::1", &addr6); + status = ares_append_ai_node(AF_INET6, port, 0, &addr6, nodes); + if (status != ARES_SUCCESS) + { + return status; + } + } + + if (aftype == AF_UNSPEC || aftype == AF_INET) + { + struct in_addr addr4; + ares_inet_pton(AF_INET, "127.0.0.1", &addr4); + status = ares_append_ai_node(AF_INET, port, 0, &addr4, nodes); + if (status != ARES_SUCCESS) + { + return status; + } + } + + return status; +} + + +static int ares__system_loopback_addrs(int aftype, + unsigned short port, + struct ares_addrinfo_node **nodes) +{ +#if defined(_WIN32) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600 + PMIB_UNICASTIPADDRESS_TABLE table; + unsigned int i; + int status; + + *nodes = NULL; + + if (GetUnicastIpAddressTable(aftype, &table) != NO_ERROR) + return ARES_ENOTFOUND; + + for (i=0; iNumEntries; i++) + { + if (table->Table[i].InterfaceLuid.Info.IfType != + IF_TYPE_SOFTWARE_LOOPBACK) + { + continue; + } + + if (table->Table[i].Address.si_family == AF_INET) + { + status = ares_append_ai_node(table->Table[i].Address.si_family, port, 0, + &table->Table[i].Address.Ipv4.sin_addr, + nodes); + } + else if (table->Table[i].Address.si_family == AF_INET6) + { + status = ares_append_ai_node(table->Table[i].Address.si_family, port, 0, + &table->Table[i].Address.Ipv6.sin6_addr, + nodes); + } + else + { + /* Ignore any others */ + continue; + } + + if (status != ARES_SUCCESS) + { + goto fail; + } + } + + if (*nodes == NULL) + status = ARES_ENOTFOUND; + +fail: + FreeMibTable(table); + + if (status != ARES_SUCCESS) + { + ares__freeaddrinfo_nodes(*nodes); + *nodes = NULL; + } + + return status; + +#else + (void)aftype; + (void)port; + (void)nodes; + /* Not supported on any other OS at this time */ + return ARES_ENOTFOUND; +#endif +} + + +int ares__addrinfo_localhost(const char *name, + unsigned short port, + const struct ares_addrinfo_hints *hints, + struct ares_addrinfo *ai) +{ + struct ares_addrinfo_node *nodes = NULL; + int result; + + /* Validate family */ + switch (hints->ai_family) { + case AF_INET: + case AF_INET6: + case AF_UNSPEC: + break; + default: + return ARES_EBADFAMILY; + } + + ai->name = ares_strdup(name); + if(!ai->name) + { + goto enomem; + } + + result = ares__system_loopback_addrs(hints->ai_family, port, &nodes); + + if (result == ARES_ENOTFOUND) + { + result = ares__default_loopback_addrs(hints->ai_family, port, &nodes); + } + + ares__addrinfo_cat_nodes(&ai->nodes, nodes); + + return result; + +enomem: + ares__freeaddrinfo_nodes(nodes); + ares_free(ai->name); + ai->name = NULL; + return ARES_ENOMEM; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_android.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_android.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_android.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_android.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,444 @@ +/* Copyright (C) 2017 by John Schember + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ +#if defined(ANDROID) || defined(__ANDROID__) + +#include + +#include "ares_setup.h" +#include "ares.h" +#include "ares_android.h" +#include "ares_private.h" + +static JavaVM *android_jvm = NULL; +static jobject android_connectivity_manager = NULL; + +/* ConnectivityManager.getActiveNetwork */ +static jmethodID android_cm_active_net_mid = NULL; +/* ConnectivityManager.getLinkProperties */ +static jmethodID android_cm_link_props_mid = NULL; +/* LinkProperties.getDnsServers */ +static jmethodID android_lp_dns_servers_mid = NULL; +/* LinkProperties.getDomains */ +static jmethodID android_lp_domains_mid = NULL; +/* List.size */ +static jmethodID android_list_size_mid = NULL; +/* List.get */ +static jmethodID android_list_get_mid = NULL; +/* InetAddress.getHostAddress */ +static jmethodID android_ia_host_addr_mid = NULL; + +static jclass jni_get_class(JNIEnv *env, const char *path) +{ + jclass cls = NULL; + + if (env == NULL || path == NULL || *path == '\0') + return NULL; + + cls = (*env)->FindClass(env, path); + if ((*env)->ExceptionOccurred(env)) { + (*env)->ExceptionClear(env); + return NULL; + } + return cls; +} + +static jmethodID jni_get_method_id(JNIEnv *env, jclass cls, + const char *func_name, const char *signature) +{ + jmethodID mid = NULL; + + if (env == NULL || cls == NULL || func_name == NULL || *func_name == '\0' || + signature == NULL || *signature == '\0') + { + return NULL; + } + + mid = (*env)->GetMethodID(env, cls, func_name, signature); + if ((*env)->ExceptionOccurred(env)) + { + (*env)->ExceptionClear(env); + return NULL; + } + + return mid; +} + +void ares_library_init_jvm(JavaVM *jvm) +{ + android_jvm = jvm; +} + +int ares_library_init_android(jobject connectivity_manager) +{ + JNIEnv *env = NULL; + int need_detatch = 0; + int res; + int ret = ARES_ENOTINITIALIZED; + jclass obj_cls = NULL; + + if (android_jvm == NULL) + goto cleanup; + + res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6); + if (res == JNI_EDETACHED) + { + env = NULL; + res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL); + need_detatch = 1; + } + if (res != JNI_OK || env == NULL) + goto cleanup; + + android_connectivity_manager = + (*env)->NewGlobalRef(env, connectivity_manager); + if (android_connectivity_manager == NULL) + goto cleanup; + + /* Initialization has succeeded. Now attempt to cache the methods that will be + * called by ares_get_android_server_list. */ + ret = ARES_SUCCESS; + + /* ConnectivityManager in API 1. */ + obj_cls = jni_get_class(env, "android/net/ConnectivityManager"); + if (obj_cls == NULL) + goto cleanup; + + /* ConnectivityManager.getActiveNetwork in API 23. */ + android_cm_active_net_mid = + jni_get_method_id(env, obj_cls, "getActiveNetwork", + "()Landroid/net/Network;"); + if (android_cm_active_net_mid == NULL) + goto cleanup; + + /* ConnectivityManager.getLinkProperties in API 21. */ + android_cm_link_props_mid = + jni_get_method_id(env, obj_cls, "getLinkProperties", + "(Landroid/net/Network;)Landroid/net/LinkProperties;"); + if (android_cm_link_props_mid == NULL) + goto cleanup; + + /* LinkProperties in API 21. */ + (*env)->DeleteLocalRef(env, obj_cls); + obj_cls = jni_get_class(env, "android/net/LinkProperties"); + if (obj_cls == NULL) + goto cleanup; + + /* getDnsServers in API 21. */ + android_lp_dns_servers_mid = jni_get_method_id(env, obj_cls, "getDnsServers", + "()Ljava/util/List;"); + if (android_lp_dns_servers_mid == NULL) + goto cleanup; + + /* getDomains in API 21. */ + android_lp_domains_mid = jni_get_method_id(env, obj_cls, "getDomains", + "()Ljava/lang/String;"); + if (android_lp_domains_mid == NULL) + goto cleanup; + + (*env)->DeleteLocalRef(env, obj_cls); + obj_cls = jni_get_class(env, "java/util/List"); + if (obj_cls == NULL) + goto cleanup; + + android_list_size_mid = jni_get_method_id(env, obj_cls, "size", "()I"); + if (android_list_size_mid == NULL) + goto cleanup; + + android_list_get_mid = jni_get_method_id(env, obj_cls, "get", + "(I)Ljava/lang/Object;"); + if (android_list_get_mid == NULL) + goto cleanup; + + (*env)->DeleteLocalRef(env, obj_cls); + obj_cls = jni_get_class(env, "java/net/InetAddress"); + if (obj_cls == NULL) + goto cleanup; + + android_ia_host_addr_mid = jni_get_method_id(env, obj_cls, "getHostAddress", + "()Ljava/lang/String;"); + if (android_ia_host_addr_mid == NULL) + goto cleanup; + + (*env)->DeleteLocalRef(env, obj_cls); + goto done; + +cleanup: + if (obj_cls != NULL) + (*env)->DeleteLocalRef(env, obj_cls); + + android_cm_active_net_mid = NULL; + android_cm_link_props_mid = NULL; + android_lp_dns_servers_mid = NULL; + android_lp_domains_mid = NULL; + android_list_size_mid = NULL; + android_list_get_mid = NULL; + android_ia_host_addr_mid = NULL; + +done: + if (need_detatch) + (*android_jvm)->DetachCurrentThread(android_jvm); + + return ret; +} + +int ares_library_android_initialized(void) +{ + if (android_jvm == NULL || android_connectivity_manager == NULL) + return ARES_ENOTINITIALIZED; + return ARES_SUCCESS; +} + +void ares_library_cleanup_android(void) +{ + JNIEnv *env = NULL; + int need_detatch = 0; + int res; + + if (android_jvm == NULL || android_connectivity_manager == NULL) + return; + + res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6); + if (res == JNI_EDETACHED) + { + env = NULL; + res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL); + need_detatch = 1; + } + if (res != JNI_OK || env == NULL) + return; + + android_cm_active_net_mid = NULL; + android_cm_link_props_mid = NULL; + android_lp_dns_servers_mid = NULL; + android_lp_domains_mid = NULL; + android_list_size_mid = NULL; + android_list_get_mid = NULL; + android_ia_host_addr_mid = NULL; + + (*env)->DeleteGlobalRef(env, android_connectivity_manager); + android_connectivity_manager = NULL; + + if (need_detatch) + (*android_jvm)->DetachCurrentThread(android_jvm); +} + +char **ares_get_android_server_list(size_t max_servers, + size_t *num_servers) +{ + JNIEnv *env = NULL; + jobject active_network = NULL; + jobject link_properties = NULL; + jobject server_list = NULL; + jobject server = NULL; + jstring str = NULL; + jint nserv; + const char *ch_server_address; + int res; + size_t i; + char **dns_list = NULL; + int need_detatch = 0; + + if (android_jvm == NULL || android_connectivity_manager == NULL || + max_servers == 0 || num_servers == NULL) + { + return NULL; + } + + if (android_cm_active_net_mid == NULL || android_cm_link_props_mid == NULL || + android_lp_dns_servers_mid == NULL || android_list_size_mid == NULL || + android_list_get_mid == NULL || android_ia_host_addr_mid == NULL) + { + return NULL; + } + + res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6); + if (res == JNI_EDETACHED) + { + env = NULL; + res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL); + need_detatch = 1; + } + if (res != JNI_OK || env == NULL) + goto done; + + /* JNI below is equivalent to this Java code. + import android.content.Context; + import android.net.ConnectivityManager; + import android.net.LinkProperties; + import android.net.Network; + import java.net.InetAddress; + import java.util.List; + + ConnectivityManager cm = (ConnectivityManager)this.getApplicationContext() + .getSystemService(Context.CONNECTIVITY_SERVICE); + Network an = cm.getActiveNetwork(); + LinkProperties lp = cm.getLinkProperties(an); + List dns = lp.getDnsServers(); + for (InetAddress ia: dns) { + String ha = ia.getHostAddress(); + } + + Note: The JNI ConnectivityManager object and all method IDs were previously + initialized in ares_library_init_android. + */ + + active_network = (*env)->CallObjectMethod(env, android_connectivity_manager, + android_cm_active_net_mid); + if (active_network == NULL) + goto done; + + link_properties = + (*env)->CallObjectMethod(env, android_connectivity_manager, + android_cm_link_props_mid, active_network); + if (link_properties == NULL) + goto done; + + server_list = (*env)->CallObjectMethod(env, link_properties, + android_lp_dns_servers_mid); + if (server_list == NULL) + goto done; + + nserv = (*env)->CallIntMethod(env, server_list, android_list_size_mid); + if (nserv > (jint)max_servers) + nserv = (jint)max_servers; + if (nserv <= 0) + goto done; + *num_servers = (size_t)nserv; + + dns_list = ares_malloc(sizeof(*dns_list)*(*num_servers)); + for (i=0; i<*num_servers; i++) + { + server = (*env)->CallObjectMethod(env, server_list, android_list_get_mid, + (jint)i); + dns_list[i] = ares_malloc(64); + dns_list[i][0] = 0; + if (server == NULL) + { + continue; + } + str = (*env)->CallObjectMethod(env, server, android_ia_host_addr_mid); + ch_server_address = (*env)->GetStringUTFChars(env, str, 0); + strncpy(dns_list[i], ch_server_address, 64); + (*env)->ReleaseStringUTFChars(env, str, ch_server_address); + (*env)->DeleteLocalRef(env, str); + (*env)->DeleteLocalRef(env, server); + } + +done: + if ((*env)->ExceptionOccurred(env)) + (*env)->ExceptionClear(env); + + if (server_list != NULL) + (*env)->DeleteLocalRef(env, server_list); + if (link_properties != NULL) + (*env)->DeleteLocalRef(env, link_properties); + if (active_network != NULL) + (*env)->DeleteLocalRef(env, active_network); + + if (need_detatch) + (*android_jvm)->DetachCurrentThread(android_jvm); + return dns_list; +} + +char *ares_get_android_search_domains_list(void) +{ + JNIEnv *env = NULL; + jobject active_network = NULL; + jobject link_properties = NULL; + jstring domains = NULL; + const char *domain; + int res; + char *domain_list = NULL; + int need_detatch = 0; + + if (android_jvm == NULL || android_connectivity_manager == NULL) + { + return NULL; + } + + if (android_cm_active_net_mid == NULL || android_cm_link_props_mid == NULL || + android_lp_domains_mid == NULL) + { + return NULL; + } + + res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6); + if (res == JNI_EDETACHED) + { + env = NULL; + res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL); + need_detatch = 1; + } + if (res != JNI_OK || env == NULL) + goto done; + + /* JNI below is equivalent to this Java code. + import android.content.Context; + import android.net.ConnectivityManager; + import android.net.LinkProperties; + + ConnectivityManager cm = (ConnectivityManager)this.getApplicationContext() + .getSystemService(Context.CONNECTIVITY_SERVICE); + Network an = cm.getActiveNetwork(); + LinkProperties lp = cm.getLinkProperties(an); + String domains = lp.getDomains(); + for (String domain: domains.split(",")) { + String d = domain; + } + + Note: The JNI ConnectivityManager object and all method IDs were previously + initialized in ares_library_init_android. + */ + + active_network = (*env)->CallObjectMethod(env, android_connectivity_manager, + android_cm_active_net_mid); + if (active_network == NULL) + goto done; + + link_properties = + (*env)->CallObjectMethod(env, android_connectivity_manager, + android_cm_link_props_mid, active_network); + if (link_properties == NULL) + goto done; + + /* Get the domains. It is a common separated list of domains to search. */ + domains = (*env)->CallObjectMethod(env, link_properties, + android_lp_domains_mid); + if (domains == NULL) + goto done; + + /* Split on , */ + domain = (*env)->GetStringUTFChars(env, domains, 0); + domain_list = ares_strdup(domain); + (*env)->ReleaseStringUTFChars(env, domains, domain); + (*env)->DeleteLocalRef(env, domains); + +done: + if ((*env)->ExceptionOccurred(env)) + (*env)->ExceptionClear(env); + + if (link_properties != NULL) + (*env)->DeleteLocalRef(env, link_properties); + if (active_network != NULL) + (*env)->DeleteLocalRef(env, active_network); + + if (need_detatch) + (*android_jvm)->DetachCurrentThread(android_jvm); + return domain_list; +} +#else +/* warning: ISO C forbids an empty translation unit */ +typedef int dummy_make_iso_compilers_happy; +#endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_android.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_android.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_android.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_android.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,27 @@ +/* Copyright (C) 2017 by John Schember + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#ifndef __ARES_ANDROID_H__ +#define __ARES_ANDROID_H__ + +#if defined(ANDROID) || defined(__ANDROID__) + +char **ares_get_android_server_list(size_t max_servers, size_t *num_servers); +char *ares_get_android_search_domains_list(void); +void ares_library_cleanup_android(void); + +#endif + +#endif /* __ARES_ANDROID_H__ */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_cancel.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_cancel.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_cancel.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_cancel.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,63 @@ + +/* Copyright (C) 2004 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include + +#include "ares.h" +#include "ares_private.h" + +/* + * ares_cancel() cancels all ongoing requests/resolves that might be going on + * on the given channel. It does NOT kill the channel, use ares_destroy() for + * that. + */ +void ares_cancel(ares_channel channel) +{ + struct query *query; + struct list_node list_head_copy; + struct list_node* list_head; + struct list_node* list_node; + int i; + + if (!ares__is_list_empty(&(channel->all_queries))) + { + /* Swap list heads, so that only those queries which were present on entry + * into this function are cancelled. New queries added by callbacks of + * queries being cancelled will not be cancelled themselves. + */ + list_head = &(channel->all_queries); + list_head_copy.prev = list_head->prev; + list_head_copy.next = list_head->next; + list_head_copy.prev->next = &list_head_copy; + list_head_copy.next->prev = &list_head_copy; + list_head->prev = list_head; + list_head->next = list_head; + for (list_node = list_head_copy.next; list_node != &list_head_copy; ) + { + query = list_node->data; + list_node = list_node->next; /* since we're deleting the query */ + query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0); + ares__free_query(query); + } + } + if (!(channel->flags & ARES_FLAG_STAYOPEN) && ares__is_list_empty(&(channel->all_queries))) + { + if (channel->servers) + { + for (i = 0; i < channel->nservers; i++) + ares__close_sockets(channel, &channel->servers[i]); + } + } +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__close_sockets.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__close_sockets.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__close_sockets.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__close_sockets.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,61 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_private.h" + +void ares__close_sockets(ares_channel channel, struct server_state *server) +{ + struct send_request *sendreq; + + /* Free all pending output buffers. */ + while (server->qhead) + { + /* Advance server->qhead; pull out query as we go. */ + sendreq = server->qhead; + server->qhead = sendreq->next; + if (sendreq->data_storage != NULL) + ares_free(sendreq->data_storage); + ares_free(sendreq); + } + server->qtail = NULL; + + /* Reset any existing input buffer. */ + if (server->tcp_buffer) + ares_free(server->tcp_buffer); + server->tcp_buffer = NULL; + server->tcp_lenbuf_pos = 0; + + /* Reset brokenness */ + server->is_broken = 0; + + /* Close the TCP and UDP sockets. */ + if (server->tcp_socket != ARES_SOCKET_BAD) + { + SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0); + ares__close_socket(channel, server->tcp_socket); + server->tcp_socket = ARES_SOCKET_BAD; + server->tcp_connection_generation = ++channel->tcp_connection_generation; + } + if (server->udp_socket != ARES_SOCKET_BAD) + { + SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0); + ares__close_socket(channel, server->udp_socket); + server->udp_socket = ARES_SOCKET_BAD; + } +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_config.h.cmake nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_config.h.cmake --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_config.h.cmake 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_config.h.cmake 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,432 @@ +/* Generated from ares_config.h.cmake */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* define this if ares is built for a big endian system */ +#undef ARES_BIG_ENDIAN + +/* when building as static part of libcurl */ +#undef BUILDING_LIBCURL + +/* Defined for build that exposes internal static functions for testing. */ +#undef CARES_EXPOSE_STATICS + +/* Defined for build with symbol hiding. */ +#undef CARES_SYMBOL_HIDING + +/* Definition to make a library symbol externally visible. */ +#undef CARES_SYMBOL_SCOPE_EXTERN + +/* Use resolver library to configure cares */ +#cmakedefine CARES_USE_LIBRESOLV + +/* if a /etc/inet dir is being used */ +#undef ETC_INET + +/* Define to the type of arg 2 for gethostname. */ +#define GETHOSTNAME_TYPE_ARG2 @GETHOSTNAME_TYPE_ARG2@ + +/* Define to the type qualifier of arg 1 for getnameinfo. */ +#define GETNAMEINFO_QUAL_ARG1 @GETNAMEINFO_QUAL_ARG1@ + +/* Define to the type of arg 1 for getnameinfo. */ +#define GETNAMEINFO_TYPE_ARG1 @GETNAMEINFO_TYPE_ARG1@ + +/* Define to the type of arg 2 for getnameinfo. */ +#define GETNAMEINFO_TYPE_ARG2 @GETNAMEINFO_TYPE_ARG2@ + +/* Define to the type of args 4 and 6 for getnameinfo. */ +#define GETNAMEINFO_TYPE_ARG46 @GETNAMEINFO_TYPE_ARG46@ + +/* Define to the type of arg 7 for getnameinfo. */ +#define GETNAMEINFO_TYPE_ARG7 @GETNAMEINFO_TYPE_ARG7@ + +/* Specifies the number of arguments to getservbyport_r */ +#define GETSERVBYPORT_R_ARGS @GETSERVBYPORT_R_ARGS@ + +/* Specifies the number of arguments to getservbyname_r */ +#define GETSERVBYNAME_R_ARGS @GETSERVBYNAME_R_ARGS@ + +/* Define to 1 if you have AF_INET6. */ +#cmakedefine HAVE_AF_INET6 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ARPA_INET_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ARPA_NAMESER_COMPAT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ARPA_NAMESER_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ASSERT_H + +/* Define to 1 if you have the `bitncmp' function. */ +#cmakedefine HAVE_BITNCMP + +/* Define to 1 if bool is an available type. */ +#cmakedefine HAVE_BOOL_T + +/* Define to 1 if you have the clock_gettime function and monotonic timer. */ +#cmakedefine HAVE_CLOCK_GETTIME_MONOTONIC + +/* Define to 1 if you have the closesocket function. */ +#cmakedefine HAVE_CLOSESOCKET + +/* Define to 1 if you have the CloseSocket camel case function. */ +#cmakedefine HAVE_CLOSESOCKET_CAMEL + +/* Define to 1 if you have the connect function. */ +#cmakedefine HAVE_CONNECT + +/* define if the compiler supports basic C++11 syntax */ +#cmakedefine HAVE_CXX11 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_ERRNO_H + +/* Define to 1 if you have the fcntl function. */ +#cmakedefine HAVE_FCNTL + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_FCNTL_H + +/* Define to 1 if you have a working fcntl O_NONBLOCK function. */ +#cmakedefine HAVE_FCNTL_O_NONBLOCK + +/* Define to 1 if you have the freeaddrinfo function. */ +#cmakedefine HAVE_FREEADDRINFO + +/* Define to 1 if you have a working getaddrinfo function. */ +#cmakedefine HAVE_GETADDRINFO + +/* Define to 1 if the getaddrinfo function is threadsafe. */ +#cmakedefine HAVE_GETADDRINFO_THREADSAFE + +/* Define to 1 if you have the getenv function. */ +#cmakedefine HAVE_GETENV + +/* Define to 1 if you have the gethostbyaddr function. */ +#cmakedefine HAVE_GETHOSTBYADDR + +/* Define to 1 if you have the gethostbyname function. */ +#cmakedefine HAVE_GETHOSTBYNAME + +/* Define to 1 if you have the gethostname function. */ +#cmakedefine HAVE_GETHOSTNAME + +/* Define to 1 if you have the getnameinfo function. */ +#cmakedefine HAVE_GETNAMEINFO + +/* Define to 1 if you have the getservbyport_r function. */ +#cmakedefine HAVE_GETSERVBYPORT_R + +/* Define to 1 if you have the getservbyname_r function. */ +#cmakedefine HAVE_GETSERVBYNAME_R + +/* Define to 1 if you have the `gettimeofday' function. */ +#cmakedefine HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the `if_indextoname' function. */ +#cmakedefine HAVE_IF_INDEXTONAME + +/* Define to 1 if you have a IPv6 capable working inet_net_pton function. */ +#cmakedefine HAVE_INET_NET_PTON + +/* Define to 1 if you have a IPv6 capable working inet_ntop function. */ +#cmakedefine HAVE_INET_NTOP + +/* Define to 1 if you have a IPv6 capable working inet_pton function. */ +#cmakedefine HAVE_INET_PTON + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_INTTYPES_H + +/* Define to 1 if you have the ioctl function. */ +#cmakedefine HAVE_IOCTL + +/* Define to 1 if you have the ioctlsocket function. */ +#cmakedefine HAVE_IOCTLSOCKET + +/* Define to 1 if you have the IoctlSocket camel case function. */ +#cmakedefine HAVE_IOCTLSOCKET_CAMEL + +/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function. + */ +#cmakedefine HAVE_IOCTLSOCKET_CAMEL_FIONBIO + +/* Define to 1 if you have a working ioctlsocket FIONBIO function. */ +#cmakedefine HAVE_IOCTLSOCKET_FIONBIO + +/* Define to 1 if you have a working ioctl FIONBIO function. */ +#cmakedefine HAVE_IOCTL_FIONBIO + +/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */ +#cmakedefine HAVE_IOCTL_SIOCGIFADDR + +/* Define to 1 if you have the `resolve' library (-lresolve). */ +#cmakedefine HAVE_LIBRESOLV + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIMITS_H + +/* if your compiler supports LL */ +#cmakedefine HAVE_LL + +/* Define to 1 if the compiler supports the 'long long' data type. */ +#cmakedefine HAVE_LONGLONG + +/* Define to 1 if you have the malloc.h header file. */ +#cmakedefine HAVE_MALLOC_H + +/* Define to 1 if you have the memory.h header file. */ +#cmakedefine HAVE_MEMORY_H + +/* Define to 1 if you have the MSG_NOSIGNAL flag. */ +#cmakedefine HAVE_MSG_NOSIGNAL + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_NETINET_IN_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_NETINET_TCP_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_NET_IF_H + +/* Define to 1 if you have PF_INET6. */ +#cmakedefine HAVE_PF_INET6 + +/* Define to 1 if you have the recv function. */ +#cmakedefine HAVE_RECV + +/* Define to 1 if you have the recvfrom function. */ +#cmakedefine HAVE_RECVFROM + +/* Define to 1 if you have the send function. */ +#cmakedefine HAVE_SEND + +/* Define to 1 if you have the setsockopt function. */ +#cmakedefine HAVE_SETSOCKOPT + +/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */ +#cmakedefine HAVE_SETSOCKOPT_SO_NONBLOCK + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SIGNAL_H + +/* Define to 1 if sig_atomic_t is an available typedef. */ +#cmakedefine HAVE_SIG_ATOMIC_T + +/* Define to 1 if sig_atomic_t is already defined as volatile. */ +#cmakedefine HAVE_SIG_ATOMIC_T_VOLATILE + +/* Define to 1 if your struct sockaddr_in6 has sin6_scope_id. */ +#cmakedefine HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID + +/* Define to 1 if you have the socket function. */ +#cmakedefine HAVE_SOCKET + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SOCKET_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STDLIB_H + +/* Define to 1 if you have the strcasecmp function. */ +#cmakedefine HAVE_STRCASECMP + +/* Define to 1 if you have the strcmpi function. */ +#cmakedefine HAVE_STRCMPI + +/* Define to 1 if you have the strdup function. */ +#cmakedefine HAVE_STRDUP + +/* Define to 1 if you have the stricmp function. */ +#cmakedefine HAVE_STRICMP + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STRING_H + +/* Define to 1 if you have the strncasecmp function. */ +#cmakedefine HAVE_STRNCASECMP + +/* Define to 1 if you have the strncmpi function. */ +#cmakedefine HAVE_STRNCMPI + +/* Define to 1 if you have the strnicmp function. */ +#cmakedefine HAVE_STRNICMP + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_STROPTS_H + +/* Define to 1 if you have struct addrinfo. */ +#cmakedefine HAVE_STRUCT_ADDRINFO + +/* Define to 1 if you have struct in6_addr. */ +#cmakedefine HAVE_STRUCT_IN6_ADDR + +/* Define to 1 if you have struct sockaddr_in6. */ +#cmakedefine HAVE_STRUCT_SOCKADDR_IN6 + +/* if struct sockaddr_storage is defined */ +#cmakedefine HAVE_STRUCT_SOCKADDR_STORAGE + +/* Define to 1 if you have the timeval struct. */ +#cmakedefine HAVE_STRUCT_TIMEVAL + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SELECT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_UIO_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_TIME_H + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_UNISTD_H + +/* Define to 1 if you have the windows.h header file. */ +#cmakedefine HAVE_WINDOWS_H + +/* Define to 1 if you have the winsock2.h header file. */ +#cmakedefine HAVE_WINSOCK2_H + +/* Define to 1 if you have the winsock.h header file. */ +#cmakedefine HAVE_WINSOCK_H + +/* Define to 1 if you have the writev function. */ +#cmakedefine HAVE_WRITEV + +/* Define to 1 if you have the ws2tcpip.h header file. */ +#cmakedefine HAVE_WS2TCPIP_H + +/* Define to 1 if you have the __system_property_get function */ +#cmakedefine HAVE___SYSTEM_PROPERTY_GET + +/* Define to 1 if you need the malloc.h header file even with stdlib.h */ +#cmakedefine NEED_MALLOC_H + +/* Define to 1 if you need the memory.h header file even with stdlib.h */ +#cmakedefine NEED_MEMORY_H + +/* a suitable file/device to read random data from */ +#cmakedefine CARES_RANDOM_FILE "@CARES_RANDOM_FILE@" + +/* Define to the type qualifier pointed by arg 5 for recvfrom. */ +#define RECVFROM_QUAL_ARG5 @RECVFROM_QUAL_ARG5@ + +/* Define to the type of arg 1 for recvfrom. */ +#define RECVFROM_TYPE_ARG1 @RECVFROM_TYPE_ARG1@ + +/* Define to the type pointed by arg 2 for recvfrom. */ +#define RECVFROM_TYPE_ARG2 @RECVFROM_TYPE_ARG2@ + +/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */ +#cmakedefine01 RECVFROM_TYPE_ARG2_IS_VOID + +/* Define to the type of arg 3 for recvfrom. */ +#define RECVFROM_TYPE_ARG3 @RECVFROM_TYPE_ARG3@ + +/* Define to the type of arg 4 for recvfrom. */ +#define RECVFROM_TYPE_ARG4 @RECVFROM_TYPE_ARG4@ + +/* Define to the type pointed by arg 5 for recvfrom. */ +#define RECVFROM_TYPE_ARG5 @RECVFROM_TYPE_ARG5@ + +/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */ +#cmakedefine01 RECVFROM_TYPE_ARG5_IS_VOID + +/* Define to the type pointed by arg 6 for recvfrom. */ +#define RECVFROM_TYPE_ARG6 @RECVFROM_TYPE_ARG6@ + +/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */ +#cmakedefine01 RECVFROM_TYPE_ARG6_IS_VOID + +/* Define to the function return type for recvfrom. */ +#define RECVFROM_TYPE_RETV @RECVFROM_TYPE_RETV@ + +/* Define to the type of arg 1 for recv. */ +#define RECV_TYPE_ARG1 @RECV_TYPE_ARG1@ + +/* Define to the type of arg 2 for recv. */ +#define RECV_TYPE_ARG2 @RECV_TYPE_ARG2@ + +/* Define to the type of arg 3 for recv. */ +#define RECV_TYPE_ARG3 @RECV_TYPE_ARG3@ + +/* Define to the type of arg 4 for recv. */ +#define RECV_TYPE_ARG4 @RECV_TYPE_ARG4@ + +/* Define to the function return type for recv. */ +#define RECV_TYPE_RETV @RECV_TYPE_RETV@ + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE @RETSIGTYPE@ + +/* Define to the type qualifier of arg 2 for send. */ +#define SEND_QUAL_ARG2 @SEND_QUAL_ARG2@ + +/* Define to the type of arg 1 for send. */ +#define SEND_TYPE_ARG1 @SEND_TYPE_ARG1@ + +/* Define to the type of arg 2 for send. */ +#define SEND_TYPE_ARG2 @SEND_TYPE_ARG2@ + +/* Define to the type of arg 3 for send. */ +#define SEND_TYPE_ARG3 @SEND_TYPE_ARG3@ + +/* Define to the type of arg 4 for send. */ +#define SEND_TYPE_ARG4 @SEND_TYPE_ARG4@ + +/* Define to the function return type for send. */ +#define SEND_TYPE_RETV @SEND_TYPE_RETV@ + +/* Define to 1 if you can safely include both and . */ +#cmakedefine TIME_WITH_SYS_TIME + +/* Define to disable non-blocking sockets. */ +#undef USE_BLOCKING_SOCKETS + +/* Define to avoid automatic inclusion of winsock.h */ +#undef WIN32_LEAN_AND_MEAN + +/* Type to use in place of in_addr_t when system does not provide it. */ +#undef in_addr_t + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_config.h.in nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_config.h.in --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_config.h.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_config.h.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,502 @@ +/* src/lib/ares_config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* define this if ares is built for a big endian system */ +#undef ARES_BIG_ENDIAN + +/* Defined for build that exposes internal static functions for testing. */ +#undef CARES_EXPOSE_STATICS + +/* a suitable file/device to read random data from */ +#undef CARES_RANDOM_FILE + +/* Defined for build with symbol hiding. */ +#undef CARES_SYMBOL_HIDING + +/* Definition to make a library symbol externally visible. */ +#undef CARES_SYMBOL_SCOPE_EXTERN + +/* the signed version of size_t */ +#undef CARES_TYPEOF_ARES_SSIZE_T + +/* Use resolver library to configure cares */ +#undef CARES_USE_LIBRESOLV + +/* if a /etc/inet dir is being used */ +#undef ETC_INET + +/* Define to the type of arg 2 for gethostname. */ +#undef GETHOSTNAME_TYPE_ARG2 + +/* Define to the type qualifier of arg 1 for getnameinfo. */ +#undef GETNAMEINFO_QUAL_ARG1 + +/* Define to the type of arg 1 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG1 + +/* Define to the type of arg 2 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG2 + +/* Define to the type of args 4 and 6 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG46 + +/* Define to the type of arg 7 for getnameinfo. */ +#undef GETNAMEINFO_TYPE_ARG7 + +/* Specifies the number of arguments to getservbyport_r */ +#undef GETSERVBYPORT_R_ARGS + +/* Specifies the size of the buffer to pass to getservbyport_r */ +#undef GETSERVBYPORT_R_BUFSIZE + +/* Define to 1 if you have AF_INET6. */ +#undef HAVE_AF_INET6 + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_NAMESER_COMPAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_NAMESER_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ASSERT_H + +/* Define to 1 if you have the `bitncmp' function. */ +#undef HAVE_BITNCMP + +/* Define to 1 if bool is an available type. */ +#undef HAVE_BOOL_T + +/* Define to 1 if you have the clock_gettime function and monotonic timer. */ +#undef HAVE_CLOCK_GETTIME_MONOTONIC + +/* Define to 1 if you have the closesocket function. */ +#undef HAVE_CLOSESOCKET + +/* Define to 1 if you have the CloseSocket camel case function. */ +#undef HAVE_CLOSESOCKET_CAMEL + +/* Define to 1 if you have the connect function. */ +#undef HAVE_CONNECT + +/* define if the compiler supports basic C++11 syntax */ +#undef HAVE_CXX11 + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the fcntl function. */ +#undef HAVE_FCNTL + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have a working fcntl O_NONBLOCK function. */ +#undef HAVE_FCNTL_O_NONBLOCK + +/* Define to 1 if you have the freeaddrinfo function. */ +#undef HAVE_FREEADDRINFO + +/* Define to 1 if you have a working getaddrinfo function. */ +#undef HAVE_GETADDRINFO + +/* Define to 1 if the getaddrinfo function is threadsafe. */ +#undef HAVE_GETADDRINFO_THREADSAFE + +/* Define to 1 if you have the getenv function. */ +#undef HAVE_GETENV + +/* Define to 1 if you have the gethostbyaddr function. */ +#undef HAVE_GETHOSTBYADDR + +/* Define to 1 if you have the gethostbyname function. */ +#undef HAVE_GETHOSTBYNAME + +/* Define to 1 if you have the gethostname function. */ +#undef HAVE_GETHOSTNAME + +/* Define to 1 if you have the getnameinfo function. */ +#undef HAVE_GETNAMEINFO + +/* Define to 1 if you have the getservbyport_r function. */ +#undef HAVE_GETSERVBYPORT_R + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the `if_indextoname' function. */ +#undef HAVE_IF_INDEXTONAME + +/* Define to 1 if you have a IPv6 capable working inet_net_pton function. */ +#undef HAVE_INET_NET_PTON + +/* Define to 1 if you have a IPv6 capable working inet_ntop function. */ +#undef HAVE_INET_NTOP + +/* Define to 1 if you have a IPv6 capable working inet_pton function. */ +#undef HAVE_INET_PTON + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the ioctl function. */ +#undef HAVE_IOCTL + +/* Define to 1 if you have the ioctlsocket function. */ +#undef HAVE_IOCTLSOCKET + +/* Define to 1 if you have the IoctlSocket camel case function. */ +#undef HAVE_IOCTLSOCKET_CAMEL + +/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function. + */ +#undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO + +/* Define to 1 if you have a working ioctlsocket FIONBIO function. */ +#undef HAVE_IOCTLSOCKET_FIONBIO + +/* Define to 1 if you have a working ioctl FIONBIO function. */ +#undef HAVE_IOCTL_FIONBIO + +/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */ +#undef HAVE_IOCTL_SIOCGIFADDR + +/* Define to 1 if you have the `resolve' library (-lresolve). */ +#undef HAVE_LIBRESOLVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* if your compiler supports LL */ +#undef HAVE_LL + +/* Define to 1 if the compiler supports the 'long long' data type. */ +#undef HAVE_LONGLONG + +/* Define to 1 if you have the malloc.h header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the memory.h header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the MSG_NOSIGNAL flag. */ +#undef HAVE_MSG_NOSIGNAL + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_TCP_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NET_IF_H + +/* Define to 1 if you have PF_INET6. */ +#undef HAVE_PF_INET6 + +/* Define to 1 if you have the recv function. */ +#undef HAVE_RECV + +/* Define to 1 if you have the recvfrom function. */ +#undef HAVE_RECVFROM + +/* Define to 1 if you have the send function. */ +#undef HAVE_SEND + +/* Define to 1 if you have the setsockopt function. */ +#undef HAVE_SETSOCKOPT + +/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */ +#undef HAVE_SETSOCKOPT_SO_NONBLOCK + +/* Define to 1 if you have the header file. */ +#undef HAVE_SIGNAL_H + +/* Define to 1 if sig_atomic_t is an available typedef. */ +#undef HAVE_SIG_ATOMIC_T + +/* Define to 1 if sig_atomic_t is already defined as volatile. */ +#undef HAVE_SIG_ATOMIC_T_VOLATILE + +/* Define to 1 if your struct sockaddr_in6 has sin6_scope_id. */ +#undef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID + +/* Define to 1 if you have the socket function. */ +#undef HAVE_SOCKET + +/* Define to 1 if you have the header file. */ +#undef HAVE_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the strcmpi function. */ +#undef HAVE_STRCMPI + +/* Define to 1 if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the stricmp function. */ +#undef HAVE_STRICMP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the strncasecmp function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the strncmpi function. */ +#undef HAVE_STRNCMPI + +/* Define to 1 if you have the strnicmp function. */ +#undef HAVE_STRNICMP + +/* Define to 1 if you have the header file. */ +#undef HAVE_STROPTS_H + +/* Define to 1 if you have struct addrinfo. */ +#undef HAVE_STRUCT_ADDRINFO + +/* Define to 1 if you have struct in6_addr. */ +#undef HAVE_STRUCT_IN6_ADDR + +/* Define to 1 if you have struct sockaddr_in6. */ +#undef HAVE_STRUCT_SOCKADDR_IN6 + +/* if struct sockaddr_storage is defined */ +#undef HAVE_STRUCT_SOCKADDR_STORAGE + +/* Define to 1 if you have the timeval struct. */ +#undef HAVE_STRUCT_TIMEVAL + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_UIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the windows.h header file. */ +#undef HAVE_WINDOWS_H + +/* Define to 1 if you have the winsock2.h header file. */ +#undef HAVE_WINSOCK2_H + +/* Define to 1 if you have the winsock.h header file. */ +#undef HAVE_WINSOCK_H + +/* Define to 1 if you have the writev function. */ +#undef HAVE_WRITEV + +/* Define to 1 if you have the ws2tcpip.h header file. */ +#undef HAVE_WS2TCPIP_H + +/* Define if __system_property_get exists. */ +#undef HAVE___SYSTEM_PROPERTY_GET + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Define to 1 if you need the malloc.h header file even with stdlib.h */ +#undef NEED_MALLOC_H + +/* Define to 1 if you need the memory.h header file even with stdlib.h */ +#undef NEED_MEMORY_H + +/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */ +#undef NEED_REENTRANT + +/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */ +#undef NEED_THREAD_SAFE + +/* cpu-machine-OS */ +#undef OS + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to the type qualifier pointed by arg 5 for recvfrom. */ +#undef RECVFROM_QUAL_ARG5 + +/* Define to the type of arg 1 for recvfrom. */ +#undef RECVFROM_TYPE_ARG1 + +/* Define to the type pointed by arg 2 for recvfrom. */ +#undef RECVFROM_TYPE_ARG2 + +/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG2_IS_VOID + +/* Define to the type of arg 3 for recvfrom. */ +#undef RECVFROM_TYPE_ARG3 + +/* Define to the type of arg 4 for recvfrom. */ +#undef RECVFROM_TYPE_ARG4 + +/* Define to the type pointed by arg 5 for recvfrom. */ +#undef RECVFROM_TYPE_ARG5 + +/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG5_IS_VOID + +/* Define to the type pointed by arg 6 for recvfrom. */ +#undef RECVFROM_TYPE_ARG6 + +/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */ +#undef RECVFROM_TYPE_ARG6_IS_VOID + +/* Define to the function return type for recvfrom. */ +#undef RECVFROM_TYPE_RETV + +/* Define to the type of arg 1 for recv. */ +#undef RECV_TYPE_ARG1 + +/* Define to the type of arg 2 for recv. */ +#undef RECV_TYPE_ARG2 + +/* Define to the type of arg 3 for recv. */ +#undef RECV_TYPE_ARG3 + +/* Define to the type of arg 4 for recv. */ +#undef RECV_TYPE_ARG4 + +/* Define to the function return type for recv. */ +#undef RECV_TYPE_RETV + +/* Define as the return type of signal handlers (`int' or `void'). */ +#undef RETSIGTYPE + +/* Define to the type qualifier of arg 2 for send. */ +#undef SEND_QUAL_ARG2 + +/* Define to the type of arg 1 for send. */ +#undef SEND_TYPE_ARG1 + +/* Define to the type of arg 2 for send. */ +#undef SEND_TYPE_ARG2 + +/* Define to the type of arg 3 for send. */ +#undef SEND_TYPE_ARG3 + +/* Define to the type of arg 4 for send. */ +#undef SEND_TYPE_ARG4 + +/* Define to the function return type for send. */ +#undef SEND_TYPE_RETV + +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both and . This + macro is obsolete. */ +#undef TIME_WITH_SYS_TIME + +/* Define to disable non-blocking sockets. */ +#undef USE_BLOCKING_SOCKETS + +/* Version number of package */ +#undef VERSION + +/* Define to avoid automatic inclusion of winsock.h */ +#undef WIN32_LEAN_AND_MEAN + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to 1 if OS is AIX. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Type to use in place of in_addr_t when system does not provide it. */ +#undef in_addr_t + +/* Define to `unsigned int' if does not define. */ +#undef size_t diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_create_query.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_create_query.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_create_query.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_create_query.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,197 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + + +/* Header format, from RFC 1035: + * 1 1 1 1 1 1 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | ID | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * |QR| Opcode |AA|TC|RD|RA| Z | RCODE | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | QDCOUNT | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | ANCOUNT | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | NSCOUNT | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | ARCOUNT | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * + * AA, TC, RA, and RCODE are only set in responses. Brief description + * of the remaining fields: + * ID Identifier to match responses with queries + * QR Query (0) or response (1) + * Opcode For our purposes, always O_QUERY + * RD Recursion desired + * Z Reserved (zero) + * QDCOUNT Number of queries + * ANCOUNT Number of answers + * NSCOUNT Number of name server records + * ARCOUNT Number of additional records + * + * Question format, from RFC 1035: + * 1 1 1 1 1 1 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | | + * / QNAME / + * / / + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | QTYPE | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * | QCLASS | + * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ + * + * The query name is encoded as a series of labels, each represented + * as a one-byte length (maximum 63) followed by the text of the + * label. The list is terminated by a label of length zero (which can + * be thought of as the root domain). + */ + +int ares_create_query(const char *name, int dnsclass, int type, + unsigned short id, int rd, unsigned char **bufp, + int *buflenp, int max_udp_size) +{ + size_t len; + unsigned char *q; + const char *p; + size_t buflen; + unsigned char *buf; + + /* Set our results early, in case we bail out early with an error. */ + *buflenp = 0; + *bufp = NULL; + + /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ + if (ares__is_onion_domain(name)) + return ARES_ENOTFOUND; + + /* Allocate a memory area for the maximum size this packet might need. +2 + * is for the length byte and zero termination if no dots or ecscaping is + * used. + */ + len = strlen(name) + 2 + HFIXEDSZ + QFIXEDSZ + + (max_udp_size ? EDNSFIXEDSZ : 0); + buf = ares_malloc(len); + if (!buf) + return ARES_ENOMEM; + + /* Set up the header. */ + q = buf; + memset(q, 0, HFIXEDSZ); + DNS_HEADER_SET_QID(q, id); + DNS_HEADER_SET_OPCODE(q, O_QUERY); + if (rd) { + DNS_HEADER_SET_RD(q, 1); + } + else { + DNS_HEADER_SET_RD(q, 0); + } + DNS_HEADER_SET_QDCOUNT(q, 1); + + if (max_udp_size) { + DNS_HEADER_SET_ARCOUNT(q, 1); + } + + /* A name of "." is a screw case for the loop below, so adjust it. */ + if (strcmp(name, ".") == 0) + name++; + + /* Start writing out the name after the header. */ + q += HFIXEDSZ; + while (*name) + { + if (*name == '.') { + ares_free (buf); + return ARES_EBADNAME; + } + + /* Count the number of bytes in this label. */ + len = 0; + for (p = name; *p && *p != '.'; p++) + { + if (*p == '\\' && *(p + 1) != 0) + p++; + len++; + } + if (len > MAXLABEL) { + ares_free (buf); + return ARES_EBADNAME; + } + + /* Encode the length and copy the data. */ + *q++ = (unsigned char)len; + for (p = name; *p && *p != '.'; p++) + { + if (*p == '\\' && *(p + 1) != 0) + p++; + *q++ = *p; + } + + /* Go to the next label and repeat, unless we hit the end. */ + if (!*p) + break; + name = p + 1; + } + + /* Add the zero-length label at the end. */ + *q++ = 0; + + /* Finish off the question with the type and class. */ + DNS_QUESTION_SET_TYPE(q, type); + DNS_QUESTION_SET_CLASS(q, dnsclass); + + q += QFIXEDSZ; + if (max_udp_size) + { + memset(q, 0, EDNSFIXEDSZ); + q++; + DNS_RR_SET_TYPE(q, T_OPT); + DNS_RR_SET_CLASS(q, max_udp_size); + q += (EDNSFIXEDSZ-1); + } + buflen = (q - buf); + + /* Reject names that are longer than the maximum of 255 bytes that's + * specified in RFC 1035 ("To simplify implementations, the total length of + * a domain name (i.e., label octets and label length octets) is restricted + * to 255 octets or less."). */ + if (buflen > (size_t)(MAXCDNAME + HFIXEDSZ + QFIXEDSZ + + (max_udp_size ? EDNSFIXEDSZ : 0))) { + ares_free (buf); + return ARES_EBADNAME; + } + + /* we know this fits in an int at this point */ + *buflenp = (int) buflen; + *bufp = buf; + + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_data.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_data.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_data.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_data.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,256 @@ + +/* Copyright (C) 2009-2013 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +#include "ares_setup.h" + +#include + +#include "ares.h" +#include "ares_data.h" +#include "ares_private.h" + + +/* +** ares_free_data() - c-ares external API function. +** +** This function must be used by the application to free data memory that +** has been internally allocated by some c-ares function and for which a +** pointer has already been returned to the calling application. The list +** of c-ares functions returning pointers that must be free'ed using this +** function is: +** +** ares_get_servers() +** ares_parse_srv_reply() +** ares_parse_txt_reply() +*/ + +void ares_free_data(void *dataptr) +{ + while (dataptr != NULL) { + struct ares_data *ptr; + void *next_data = NULL; + +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:1684) + /* 1684: conversion from pointer to same-sized integral type */ +#endif + + ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data)); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif + + if (ptr->mark != ARES_DATATYPE_MARK) + return; + + switch (ptr->type) + { + case ARES_DATATYPE_MX_REPLY: + + if (ptr->data.mx_reply.next) + next_data = ptr->data.mx_reply.next; + if (ptr->data.mx_reply.host) + ares_free(ptr->data.mx_reply.host); + break; + + case ARES_DATATYPE_SRV_REPLY: + + if (ptr->data.srv_reply.next) + next_data = ptr->data.srv_reply.next; + if (ptr->data.srv_reply.host) + ares_free(ptr->data.srv_reply.host); + break; + + case ARES_DATATYPE_URI_REPLY: + + if (ptr->data.uri_reply.next) + next_data = ptr->data.uri_reply.next; + if (ptr->data.uri_reply.uri) + ares_free(ptr->data.uri_reply.uri); + break; + + case ARES_DATATYPE_TXT_REPLY: + case ARES_DATATYPE_TXT_EXT: + + if (ptr->data.txt_reply.next) + next_data = ptr->data.txt_reply.next; + if (ptr->data.txt_reply.txt) + ares_free(ptr->data.txt_reply.txt); + break; + + case ARES_DATATYPE_ADDR_NODE: + + if (ptr->data.addr_node.next) + next_data = ptr->data.addr_node.next; + break; + + case ARES_DATATYPE_ADDR_PORT_NODE: + + if (ptr->data.addr_port_node.next) + next_data = ptr->data.addr_port_node.next; + break; + + case ARES_DATATYPE_NAPTR_REPLY: + + if (ptr->data.naptr_reply.next) + next_data = ptr->data.naptr_reply.next; + if (ptr->data.naptr_reply.flags) + ares_free(ptr->data.naptr_reply.flags); + if (ptr->data.naptr_reply.service) + ares_free(ptr->data.naptr_reply.service); + if (ptr->data.naptr_reply.regexp) + ares_free(ptr->data.naptr_reply.regexp); + if (ptr->data.naptr_reply.replacement) + ares_free(ptr->data.naptr_reply.replacement); + break; + + case ARES_DATATYPE_SOA_REPLY: + if (ptr->data.soa_reply.nsname) + ares_free(ptr->data.soa_reply.nsname); + if (ptr->data.soa_reply.hostmaster) + ares_free(ptr->data.soa_reply.hostmaster); + break; + + case ARES_DATATYPE_CAA_REPLY: + + if (ptr->data.caa_reply.next) + next_data = ptr->data.caa_reply.next; + if (ptr->data.caa_reply.property) + ares_free(ptr->data.caa_reply.property); + if (ptr->data.caa_reply.value) + ares_free(ptr->data.caa_reply.value); + break; + + default: + return; + } + + ares_free(ptr); + dataptr = next_data; + } +} + + +/* +** ares_malloc_data() - c-ares internal helper function. +** +** This function allocates memory for a c-ares private ares_data struct +** for the specified ares_datatype, initializes c-ares private fields +** and zero initializes those which later might be used from the public +** API. It returns an interior pointer which can be passed by c-ares +** functions to the calling application, and that must be free'ed using +** c-ares external API function ares_free_data(). +*/ + +void *ares_malloc_data(ares_datatype type) +{ + struct ares_data *ptr; + + ptr = ares_malloc(sizeof(struct ares_data)); + if (!ptr) + return NULL; + + switch (type) + { + case ARES_DATATYPE_MX_REPLY: + ptr->data.mx_reply.next = NULL; + ptr->data.mx_reply.host = NULL; + ptr->data.mx_reply.priority = 0; + break; + + case ARES_DATATYPE_SRV_REPLY: + ptr->data.srv_reply.next = NULL; + ptr->data.srv_reply.host = NULL; + ptr->data.srv_reply.priority = 0; + ptr->data.srv_reply.weight = 0; + ptr->data.srv_reply.port = 0; + break; + + case ARES_DATATYPE_URI_REPLY: + ptr->data.uri_reply.next = NULL; + ptr->data.uri_reply.priority = 0; + ptr->data.uri_reply.weight = 0; + ptr->data.uri_reply.uri = NULL; + ptr->data.uri_reply.ttl = 0; + break; + + case ARES_DATATYPE_TXT_EXT: + ptr->data.txt_ext.record_start = 0; + /* FALLTHROUGH */ + + case ARES_DATATYPE_TXT_REPLY: + ptr->data.txt_reply.next = NULL; + ptr->data.txt_reply.txt = NULL; + ptr->data.txt_reply.length = 0; + break; + + case ARES_DATATYPE_CAA_REPLY: + ptr->data.caa_reply.next = NULL; + ptr->data.caa_reply.plength = 0; + ptr->data.caa_reply.property = NULL; + ptr->data.caa_reply.length = 0; + ptr->data.caa_reply.value = NULL; + break; + + case ARES_DATATYPE_ADDR_NODE: + ptr->data.addr_node.next = NULL; + ptr->data.addr_node.family = 0; + memset(&ptr->data.addr_node.addrV6, 0, + sizeof(ptr->data.addr_node.addrV6)); + break; + + case ARES_DATATYPE_ADDR_PORT_NODE: + ptr->data.addr_port_node.next = NULL; + ptr->data.addr_port_node.family = 0; + ptr->data.addr_port_node.udp_port = 0; + ptr->data.addr_port_node.tcp_port = 0; + memset(&ptr->data.addr_port_node.addrV6, 0, + sizeof(ptr->data.addr_port_node.addrV6)); + break; + + case ARES_DATATYPE_NAPTR_REPLY: + ptr->data.naptr_reply.next = NULL; + ptr->data.naptr_reply.flags = NULL; + ptr->data.naptr_reply.service = NULL; + ptr->data.naptr_reply.regexp = NULL; + ptr->data.naptr_reply.replacement = NULL; + ptr->data.naptr_reply.order = 0; + ptr->data.naptr_reply.preference = 0; + break; + + case ARES_DATATYPE_SOA_REPLY: + ptr->data.soa_reply.nsname = NULL; + ptr->data.soa_reply.hostmaster = NULL; + ptr->data.soa_reply.serial = 0; + ptr->data.soa_reply.refresh = 0; + ptr->data.soa_reply.retry = 0; + ptr->data.soa_reply.expire = 0; + ptr->data.soa_reply.minttl = 0; + break; + + default: + ares_free(ptr); + return NULL; + } + + ptr->mark = ARES_DATATYPE_MARK; + ptr->type = type; + + return &ptr->data; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_data.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_data.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_data.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_data.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,76 @@ + +/* Copyright (C) 2009-2013 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +typedef enum { + ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */ + ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */ + ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */ + ARES_DATATYPE_TXT_EXT, /* struct ares_txt_ext - introduced in 1.11.0 */ + ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */ + ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */ + ARES_DATATYPE_NAPTR_REPLY,/* struct ares_naptr_reply - introduced in 1.7.6 */ + ARES_DATATYPE_SOA_REPLY, /* struct ares_soa_reply - introduced in 1.9.0 */ + ARES_DATATYPE_URI_REPLY, /* struct ares_uri_reply */ +#if 0 + ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */ + ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */ + ARES_DATATYPE_HOSTENT, /* struct hostent */ + ARES_DATATYPE_OPTIONS, /* struct ares_options */ +#endif + ARES_DATATYPE_ADDR_PORT_NODE, /* struct ares_addr_port_node - introduced in 1.11.0 */ + ARES_DATATYPE_CAA_REPLY, /* struct ares_caa_reply - introduced in 1.17 */ + ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */ +} ares_datatype; + +#define ARES_DATATYPE_MARK 0xbead + +/* + * ares_data struct definition is internal to c-ares and shall not + * be exposed by the public API in order to allow future changes + * and extensions to it without breaking ABI. This will be used + * internally by c-ares as the container of multiple types of data + * dynamically allocated for which a reference will be returned + * to the calling application. + * + * c-ares API functions returning a pointer to c-ares internally + * allocated data will actually be returning an interior pointer + * into this ares_data struct. + * + * All this is 'invisible' to the calling application, the only + * requirement is that this kind of data must be free'ed by the + * calling application using ares_free_data() with the pointer + * it has received from a previous c-ares function call. + */ + +struct ares_data { + ares_datatype type; /* Actual data type identifier. */ + unsigned int mark; /* Private ares_data signature. */ + union { + struct ares_txt_reply txt_reply; + struct ares_txt_ext txt_ext; + struct ares_srv_reply srv_reply; + struct ares_addr_node addr_node; + struct ares_addr_port_node addr_port_node; + struct ares_mx_reply mx_reply; + struct ares_naptr_reply naptr_reply; + struct ares_soa_reply soa_reply; + struct ares_caa_reply caa_reply; + struct ares_uri_reply uri_reply; + } data; +}; + +void *ares_malloc_data(ares_datatype type); + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_destroy.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_destroy.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_destroy.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_destroy.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,113 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004-2011 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include + +#include "ares.h" +#include "ares_private.h" + +void ares_destroy_options(struct ares_options *options) +{ + int i; + + if(options->servers) + ares_free(options->servers); + for (i = 0; i < options->ndomains; i++) + ares_free(options->domains[i]); + if(options->domains) + ares_free(options->domains); + if(options->sortlist) + ares_free(options->sortlist); + if(options->lookups) + ares_free(options->lookups); + if(options->resolvconf_path) + ares_free(options->resolvconf_path); +} + +void ares_destroy(ares_channel channel) +{ + int i; + struct query *query; + struct list_node* list_head; + struct list_node* list_node; + + if (!channel) + return; + + list_head = &(channel->all_queries); + for (list_node = list_head->next; list_node != list_head; ) + { + query = list_node->data; + list_node = list_node->next; /* since we're deleting the query */ + query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0); + ares__free_query(query); + } +#ifndef NDEBUG + /* Freeing the query should remove it from all the lists in which it sits, + * so all query lists should be empty now. + */ + assert(ares__is_list_empty(&(channel->all_queries))); + for (i = 0; i < ARES_QID_TABLE_SIZE; i++) + { + assert(ares__is_list_empty(&(channel->queries_by_qid[i]))); + } + for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) + { + assert(ares__is_list_empty(&(channel->queries_by_timeout[i]))); + } +#endif + + ares__destroy_servers_state(channel); + + if (channel->domains) { + for (i = 0; i < channel->ndomains; i++) + ares_free(channel->domains[i]); + ares_free(channel->domains); + } + + if(channel->sortlist) + ares_free(channel->sortlist); + + if (channel->lookups) + ares_free(channel->lookups); + + if (channel->resolvconf_path) + ares_free(channel->resolvconf_path); + + ares_free(channel); +} + +void ares__destroy_servers_state(ares_channel channel) +{ + struct server_state *server; + int i; + + if (channel->servers) + { + for (i = 0; i < channel->nservers; i++) + { + server = &channel->servers[i]; + ares__close_sockets(channel, server); + assert(ares__is_list_empty(&server->queries_to_server)); + } + ares_free(channel->servers); + channel->servers = NULL; + } + channel->nservers = -1; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_expand_name.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_expand_name.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_expand_name.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_expand_name.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,309 @@ + +/* Copyright 1998, 2011 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_nowarn.h" +#include "ares_private.h" /* for the memdebug */ + +/* Maximum number of indirections allowed for a name */ +#define MAX_INDIRS 50 + +static int name_length(const unsigned char *encoded, const unsigned char *abuf, + int alen, int is_hostname); + +/* Reserved characters for names that need to be escaped */ +static int is_reservedch(int ch) +{ + switch (ch) { + case '"': + case '.': + case ';': + case '\\': + case '(': + case ')': + case '@': + case '$': + return 1; + default: + break; + } + + return 0; +} + +static int ares__isprint(int ch) +{ + if (ch >= 0x20 && ch <= 0x7E) + return 1; + return 0; +} + +/* Character set allowed by hostnames. This is to include the normal + * domain name character set plus: + * - underscores which are used in SRV records. + * - Forward slashes such as are used for classless in-addr.arpa + * delegation (CNAMEs) + * While RFC 2181 section 11 does state not to do validation, + * that applies to servers, not clients. Vulnerabilities have been + * reported when this validation is not performed. Security is more + * important than edge-case compatibility (which is probably invalid + * anyhow). */ +static int is_hostnamech(int ch) +{ + /* [A-Za-z0-9-._/] + * Don't use isalnum() as it is locale-specific + */ + if (ch >= 'A' && ch <= 'Z') + return 1; + if (ch >= 'a' && ch <= 'z') + return 1; + if (ch >= '0' && ch <= '9') + return 1; + if (ch == '-' || ch == '.' || ch == '_' || ch == '/') + return 1; + + return 0; +} + +/* Expand an RFC1035-encoded domain name given by encoded. The + * containing message is given by abuf and alen. The result given by + * *s, which is set to a NUL-terminated allocated buffer. *enclen is + * set to the length of the encoded name (not the length of the + * expanded name; the goal is to tell the caller how many bytes to + * move forward to get past the encoded name). + * + * In the simple case, an encoded name is a series of labels, each + * composed of a one-byte length (limited to values between 0 and 63 + * inclusive) followed by the label contents. The name is terminated + * by a zero-length label. + * + * In the more complicated case, a label may be terminated by an + * indirection pointer, specified by two bytes with the high bits of + * the first byte (corresponding to INDIR_MASK) set to 11. With the + * two high bits of the first byte stripped off, the indirection + * pointer gives an offset from the beginning of the containing + * message with more labels to decode. Indirection can happen an + * arbitrary number of times, so we have to detect loops. + * + * Since the expanded name uses '.' as a label separator, we use + * backslashes to escape periods or backslashes in the expanded name. + * + * If the result is expected to be a hostname, then no escaped data is allowed + * and will return error. + */ + +int ares__expand_name_validated(const unsigned char *encoded, + const unsigned char *abuf, + int alen, char **s, long *enclen, + int is_hostname) +{ + int len, indir = 0; + char *q; + const unsigned char *p; + union { + ares_ssize_t sig; + size_t uns; + } nlen; + + nlen.sig = name_length(encoded, abuf, alen, is_hostname); + if (nlen.sig < 0) + return ARES_EBADNAME; + + *s = ares_malloc(nlen.uns + 1); + if (!*s) + return ARES_ENOMEM; + q = *s; + + if (nlen.uns == 0) { + /* RFC2181 says this should be ".": the root of the DNS tree. + * Since this function strips trailing dots though, it becomes "" + */ + q[0] = '\0'; + + /* indirect root label (like 0xc0 0x0c) is 2 bytes long (stupid, but + valid) */ + if ((*encoded & INDIR_MASK) == INDIR_MASK) + *enclen = 2L; + else + *enclen = 1L; /* the caller should move one byte to get past this */ + + return ARES_SUCCESS; + } + + /* No error-checking necessary; it was all done by name_length(). */ + p = encoded; + while (*p) + { + if ((*p & INDIR_MASK) == INDIR_MASK) + { + if (!indir) + { + *enclen = aresx_uztosl(p + 2U - encoded); + indir = 1; + } + p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1)); + } + else + { + int name_len = *p; + len = name_len; + p++; + + while (len--) + { + /* Output as \DDD for consistency with RFC1035 5.1, except + * for the special case of a root name response */ + if (!ares__isprint(*p) && !(name_len == 1 && *p == 0)) + { + *q++ = '\\'; + *q++ = '0' + *p / 100; + *q++ = '0' + (*p % 100) / 10; + *q++ = '0' + (*p % 10); + } + else if (is_reservedch(*p)) + { + *q++ = '\\'; + *q++ = *p; + } + else + { + *q++ = *p; + } + p++; + } + *q++ = '.'; + } + } + + if (!indir) + *enclen = aresx_uztosl(p + 1U - encoded); + + /* Nuke the trailing period if we wrote one. */ + if (q > *s) + *(q - 1) = 0; + else + *q = 0; /* zero terminate; LCOV_EXCL_LINE: empty names exit above */ + + return ARES_SUCCESS; +} + + +int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, + int alen, char **s, long *enclen) +{ + return ares__expand_name_validated(encoded, abuf, alen, s, enclen, 0); +} + +/* Return the length of the expansion of an encoded domain name, or + * -1 if the encoding is invalid. + */ +static int name_length(const unsigned char *encoded, const unsigned char *abuf, + int alen, int is_hostname) +{ + int n = 0, offset, indir = 0, top; + + /* Allow the caller to pass us abuf + alen and have us check for it. */ + if (encoded >= abuf + alen) + return -1; + + while (*encoded) + { + top = (*encoded & INDIR_MASK); + if (top == INDIR_MASK) + { + /* Check the offset and go there. */ + if (encoded + 1 >= abuf + alen) + return -1; + offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1); + if (offset >= alen) + return -1; + encoded = abuf + offset; + + /* If we've seen more indirects than the message length, + * then there's a loop. + */ + ++indir; + if (indir > alen || indir > MAX_INDIRS) + return -1; + } + else if (top == 0x00) + { + int name_len = *encoded; + offset = name_len; + if (encoded + offset + 1 >= abuf + alen) + return -1; + encoded++; + + while (offset--) + { + if (!ares__isprint(*encoded) && !(name_len == 1 && *encoded == 0)) + { + if (is_hostname) + return -1; + n += 4; + } + else if (is_reservedch(*encoded)) + { + if (is_hostname) + return -1; + n += 2; + } + else + { + if (is_hostname && !is_hostnamech(*encoded)) + return -1; + n += 1; + } + encoded++; + } + + n++; + } + else + { + /* RFC 1035 4.1.4 says other options (01, 10) for top 2 + * bits are reserved. + */ + return -1; + } + } + + /* If there were any labels at all, then the number of dots is one + * less than the number of labels, so subtract one. + */ + return (n) ? n - 1 : n; +} + +/* Like ares_expand_name_validated but returns EBADRESP in case of invalid + * input. */ +int ares__expand_name_for_response(const unsigned char *encoded, + const unsigned char *abuf, int alen, + char **s, long *enclen, int is_hostname) +{ + int status = ares__expand_name_validated(encoded, abuf, alen, s, enclen, + is_hostname); + if (status == ARES_EBADNAME) + status = ARES_EBADRESP; + return status; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_expand_string.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_expand_string.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_expand_string.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_expand_string.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,67 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_private.h" /* for the memdebug */ + +/* Simply decodes a length-encoded character string. The first byte of the + * input is the length of the string to be returned and the bytes thereafter + * are the characters of the string. The returned result will be NULL + * terminated. + */ +int ares_expand_string(const unsigned char *encoded, + const unsigned char *abuf, + int alen, + unsigned char **s, + long *enclen) +{ + unsigned char *q; + union { + ares_ssize_t sig; + size_t uns; + } elen; + + if (encoded == abuf+alen) + return ARES_EBADSTR; + + elen.uns = *encoded; + if (encoded+elen.sig+1 > abuf+alen) + return ARES_EBADSTR; + + encoded++; + + *s = ares_malloc(elen.uns+1); + if (*s == NULL) + return ARES_ENOMEM; + q = *s; + strncpy((char *)q, (char *)encoded, elen.uns); + q[elen.uns] = '\0'; + + *s = q; + + *enclen = (long)(elen.sig+1); + + return ARES_SUCCESS; +} + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_fds.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_fds.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_fds.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_fds.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,59 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds) +{ + struct server_state *server; + ares_socket_t nfds; + int i; + + /* Are there any active queries? */ + int active_queries = !ares__is_list_empty(&(channel->all_queries)); + + nfds = 0; + for (i = 0; i < channel->nservers; i++) + { + server = &channel->servers[i]; + /* We only need to register interest in UDP sockets if we have + * outstanding queries. + */ + if (active_queries && server->udp_socket != ARES_SOCKET_BAD) + { + FD_SET(server->udp_socket, read_fds); + if (server->udp_socket >= nfds) + nfds = server->udp_socket + 1; + } + /* We always register for TCP events, because we want to know + * when the other side closes the connection, so we don't waste + * time trying to use a broken connection. + */ + if (server->tcp_socket != ARES_SOCKET_BAD) + { + FD_SET(server->tcp_socket, read_fds); + if (server->qhead) + FD_SET(server->tcp_socket, write_fds); + if (server->tcp_socket >= nfds) + nfds = server->tcp_socket + 1; + } + } + return (int)nfds; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_freeaddrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_freeaddrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_freeaddrinfo.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_freeaddrinfo.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,60 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2019 by Andrew Selivanov + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETDB_H +# include +#endif + +#include "ares.h" +#include "ares_private.h" + +void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *head) +{ + struct ares_addrinfo_cname *current; + while (head) + { + current = head; + head = head->next; + ares_free(current->alias); + ares_free(current->name); + ares_free(current); + } +} + +void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *head) +{ + struct ares_addrinfo_node *current; + while (head) + { + current = head; + head = head->ai_next; + ares_free(current->ai_addr); + ares_free(current); + } +} + +void ares_freeaddrinfo(struct ares_addrinfo *ai) +{ + if (ai == NULL) + return; + ares__freeaddrinfo_cnames(ai->cnames); + ares__freeaddrinfo_nodes(ai->nodes); + ares_free(ai->name); + ares_free(ai); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_free_hostent.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_free_hostent.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_free_hostent.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_free_hostent.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,43 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETDB_H +#include +#endif + +#include "ares.h" +#include "ares_private.h" /* for memdebug */ + +void ares_free_hostent(struct hostent *host) +{ + char **p; + + if (!host) + return; + + ares_free((char *)(host->h_name)); + for (p = host->h_aliases; p && *p; p++) + ares_free(*p); + ares_free(host->h_aliases); + if (host->h_addr_list) { + ares_free(host->h_addr_list[0]); /* no matter if there is one or many entries, + there is only one malloc for all of them */ + ares_free(host->h_addr_list); + } + ares_free(host); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_free_string.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_free_string.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_free_string.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_free_string.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,25 @@ + +/* Copyright 2000 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_private.h" + +void ares_free_string(void *str) +{ + ares_free(str); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getaddrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getaddrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getaddrinfo.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getaddrinfo.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,797 @@ + +/* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology. + * Copyright (C) 2017 - 2018 by Christian Ammer + * Copyright (C) 2019 by Andrew Selivanov + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_GETSERVBYNAME_R +# if !defined(GETSERVBYNAME_R_ARGS) || \ + (GETSERVBYNAME_R_ARGS < 4) || (GETSERVBYNAME_R_ARGS > 6) +# error "you MUST specifiy a valid number of arguments for getservbyname_r" +# endif +#endif + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +#include +#endif +#include + +#ifdef HAVE_LIMITS_H +#include +#endif + +#include "ares.h" +#include "bitncmp.h" +#include "ares_private.h" + +#ifdef WATT32 +#undef WIN32 +#endif +#ifdef WIN32 +# include "ares_platform.h" +#endif + +struct host_query +{ + ares_channel channel; + char *name; + unsigned short port; /* in host order */ + ares_addrinfo_callback callback; + void *arg; + struct ares_addrinfo_hints hints; + int sent_family; /* this family is what was is being used */ + int timeouts; /* number of timeouts we saw for this request */ + const char *remaining_lookups; /* types of lookup we need to perform ("fb" by + default, file and dns respectively) */ + struct ares_addrinfo *ai; /* store results between lookups */ + int remaining; /* number of DNS answers waiting for */ + int next_domain; /* next search domain to try */ + int nodata_cnt; /* Track nodata responses to possibly override final result */ +}; + +static const struct ares_addrinfo_hints default_hints = { + 0, /* ai_flags */ + AF_UNSPEC, /* ai_family */ + 0, /* ai_socktype */ + 0, /* ai_protocol */ +}; + +static const struct ares_addrinfo_cname empty_addrinfo_cname = { + INT_MAX, /* ttl */ + NULL, /* alias */ + NULL, /* name */ + NULL, /* next */ +}; + +static const struct ares_addrinfo_node empty_addrinfo_node = { + 0, /* ai_ttl */ + 0, /* ai_flags */ + 0, /* ai_family */ + 0, /* ai_socktype */ + 0, /* ai_protocol */ + 0, /* ai_addrlen */ + NULL, /* ai_addr */ + NULL /* ai_next */ +}; + +static const struct ares_addrinfo empty_addrinfo = { + NULL, /* cnames */ + NULL, /* nodes */ + NULL /* name */ +}; + +/* forward declarations */ +static void host_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen); +static int as_is_first(const struct host_query *hquery); +static int as_is_only(const struct host_query* hquery); +static int next_dns_lookup(struct host_query *hquery); + +struct ares_addrinfo_cname *ares__malloc_addrinfo_cname() +{ + struct ares_addrinfo_cname *cname = ares_malloc(sizeof(struct ares_addrinfo_cname)); + if (!cname) + return NULL; + + *cname = empty_addrinfo_cname; + return cname; +} + +struct ares_addrinfo_cname *ares__append_addrinfo_cname(struct ares_addrinfo_cname **head) +{ + struct ares_addrinfo_cname *tail = ares__malloc_addrinfo_cname(); + struct ares_addrinfo_cname *last = *head; + if (!last) + { + *head = tail; + return tail; + } + + while (last->next) + { + last = last->next; + } + + last->next = tail; + return tail; +} + +void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head, + struct ares_addrinfo_cname *tail) +{ + struct ares_addrinfo_cname *last = *head; + if (!last) + { + *head = tail; + return; + } + + while (last->next) + { + last = last->next; + } + + last->next = tail; +} + +struct ares_addrinfo *ares__malloc_addrinfo() +{ + struct ares_addrinfo *ai = ares_malloc(sizeof(struct ares_addrinfo)); + if (!ai) + return NULL; + + *ai = empty_addrinfo; + return ai; +} + +struct ares_addrinfo_node *ares__malloc_addrinfo_node() +{ + struct ares_addrinfo_node *node = + ares_malloc(sizeof(struct ares_addrinfo_node)); + if (!node) + return NULL; + + *node = empty_addrinfo_node; + return node; +} + +/* Allocate new addrinfo and append to the tail. */ +struct ares_addrinfo_node *ares__append_addrinfo_node(struct ares_addrinfo_node **head) +{ + struct ares_addrinfo_node *tail = ares__malloc_addrinfo_node(); + struct ares_addrinfo_node *last = *head; + if (!last) + { + *head = tail; + return tail; + } + + while (last->ai_next) + { + last = last->ai_next; + } + + last->ai_next = tail; + return tail; +} + +void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head, + struct ares_addrinfo_node *tail) +{ + struct ares_addrinfo_node *last = *head; + if (!last) + { + *head = tail; + return; + } + + while (last->ai_next) + { + last = last->ai_next; + } + + last->ai_next = tail; +} + +/* Resolve service name into port number given in host byte order. + * If not resolved, return 0. + */ +static unsigned short lookup_service(const char *service, int flags) +{ + const char *proto; + struct servent *sep; +#ifdef HAVE_GETSERVBYNAME_R + struct servent se; + char tmpbuf[4096]; +#endif + + if (service) + { + if (flags & ARES_NI_UDP) + proto = "udp"; + else if (flags & ARES_NI_SCTP) + proto = "sctp"; + else if (flags & ARES_NI_DCCP) + proto = "dccp"; + else + proto = "tcp"; +#ifdef HAVE_GETSERVBYNAME_R + memset(&se, 0, sizeof(se)); + sep = &se; + memset(tmpbuf, 0, sizeof(tmpbuf)); +#if GETSERVBYNAME_R_ARGS == 6 + if (getservbyname_r(service, proto, &se, (void *)tmpbuf, sizeof(tmpbuf), + &sep) != 0) + sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */ +#elif GETSERVBYNAME_R_ARGS == 5 + sep = + getservbyname_r(service, proto, &se, (void *)tmpbuf, sizeof(tmpbuf)); +#elif GETSERVBYNAME_R_ARGS == 4 + if (getservbyname_r(service, proto, &se, (void *)tmpbuf) != 0) + sep = NULL; +#else + /* Lets just hope the OS uses TLS! */ + sep = getservbyname(service, proto); +#endif +#else + /* Lets just hope the OS uses TLS! */ +#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) + sep = getservbyname(service, (char *)proto); +#else + sep = getservbyname(service, proto); +#endif +#endif + return (sep ? ntohs((unsigned short)sep->s_port) : 0); + } + return 0; +} + +/* If the name looks like an IP address or an error occured, + * fake up a host entry, end the query immediately, and return true. + * Otherwise return false. + */ +static int fake_addrinfo(const char *name, + unsigned short port, + const struct ares_addrinfo_hints *hints, + struct ares_addrinfo *ai, + ares_addrinfo_callback callback, + void *arg) +{ + struct ares_addrinfo_cname *cname; + int status = ARES_SUCCESS; + int result = 0; + int family = hints->ai_family; + if (family == AF_INET || family == AF_INET6 || family == AF_UNSPEC) + { + /* It only looks like an IP address if it's all numbers and dots. */ + int numdots = 0, valid = 1; + const char *p; + for (p = name; *p; p++) + { + if (!ISDIGIT(*p) && *p != '.') + { + valid = 0; + break; + } + else if (*p == '.') + { + numdots++; + } + } + + /* if we don't have 3 dots, it is illegal + * (although inet_pton doesn't think so). + */ + if (numdots != 3 || !valid) + result = 0; + else + { + struct in_addr addr4; + result = ares_inet_pton(AF_INET, name, &addr4) < 1 ? 0 : 1; + if (result) + { + status = ares_append_ai_node(AF_INET, port, 0, &addr4, &ai->nodes); + if (status != ARES_SUCCESS) + { + callback(arg, status, 0, NULL); + return 1; + } + } + } + } + + if (family == AF_INET6 || family == AF_UNSPEC) + { + struct ares_in6_addr addr6; + result = ares_inet_pton(AF_INET6, name, &addr6) < 1 ? 0 : 1; + if (result) + { + status = ares_append_ai_node(AF_INET6, port, 0, &addr6, &ai->nodes); + if (status != ARES_SUCCESS) + { + callback(arg, status, 0, NULL); + return 1; + } + } + } + + if (!result) + return 0; + + if (hints->ai_flags & ARES_AI_CANONNAME) + { + cname = ares__append_addrinfo_cname(&ai->cnames); + if (!cname) + { + ares_freeaddrinfo(ai); + callback(arg, ARES_ENOMEM, 0, NULL); + return 1; + } + + /* Duplicate the name, to avoid a constness violation. */ + cname->name = ares_strdup(name); + if (!cname->name) + { + ares_freeaddrinfo(ai); + callback(arg, ARES_ENOMEM, 0, NULL); + return 1; + } + } + + ai->nodes->ai_socktype = hints->ai_socktype; + ai->nodes->ai_protocol = hints->ai_protocol; + + callback(arg, ARES_SUCCESS, 0, ai); + return 1; +} + +static void end_hquery(struct host_query *hquery, int status) +{ + struct ares_addrinfo_node sentinel; + struct ares_addrinfo_node *next; + if (status == ARES_SUCCESS) + { + if (!(hquery->hints.ai_flags & ARES_AI_NOSORT) && hquery->ai->nodes) + { + sentinel.ai_next = hquery->ai->nodes; + ares__sortaddrinfo(hquery->channel, &sentinel); + hquery->ai->nodes = sentinel.ai_next; + } + next = hquery->ai->nodes; + + while (next) + { + next->ai_socktype = hquery->hints.ai_socktype; + next->ai_protocol = hquery->hints.ai_protocol; + next = next->ai_next; + } + } + else + { + /* Clean up what we have collected by so far. */ + ares_freeaddrinfo(hquery->ai); + hquery->ai = NULL; + } + + hquery->callback(hquery->arg, status, hquery->timeouts, hquery->ai); + ares_free(hquery->name); + ares_free(hquery); +} + +static int file_lookup(struct host_query *hquery) +{ + FILE *fp; + int error; + int status; + const char *path_hosts = NULL; + + if (hquery->hints.ai_flags & ARES_AI_ENVHOSTS) + { + path_hosts = getenv("CARES_HOSTS"); + } + + if (!path_hosts) + { +#ifdef WIN32 + char PATH_HOSTS[MAX_PATH]; + win_platform platform; + + PATH_HOSTS[0] = '\0'; + + platform = ares__getplatform(); + + if (platform == WIN_NT) + { + char tmp[MAX_PATH]; + HKEY hkeyHosts; + + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, + &hkeyHosts) == ERROR_SUCCESS) + { + DWORD dwLength = MAX_PATH; + RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, + &dwLength); + ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH); + RegCloseKey(hkeyHosts); + } + } + else if (platform == WIN_9X) + GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH); + else + return ARES_ENOTFOUND; + + strcat(PATH_HOSTS, WIN_PATH_HOSTS); + path_hosts = PATH_HOSTS; + +#elif defined(WATT32) + const char *PATH_HOSTS = _w32_GetHostsFile(); + + if (!PATH_HOSTS) + return ARES_ENOTFOUND; +#endif + path_hosts = PATH_HOSTS; + } + + fp = fopen(path_hosts, "r"); + if (!fp) + { + error = ERRNO; + switch (error) + { + case ENOENT: + case ESRCH: + return ARES_ENOTFOUND; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error, + strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", path_hosts)); + return ARES_EFILE; + } + } + status = ares__readaddrinfo(fp, hquery->name, hquery->port, &hquery->hints, hquery->ai); + fclose(fp); + + /* RFC6761 section 6.3 #3 states that "Name resolution APIs and libraries + * SHOULD recognize localhost names as special and SHOULD always return the + * IP loopback address for address queries" */ + if (status == ARES_ENOTFOUND && strcmp(hquery->name, "localhost") == 0) + { + return ares__addrinfo_localhost(hquery->name, hquery->port, + &hquery->hints, hquery->ai); + } + + return status; +} + +static void next_lookup(struct host_query *hquery, int status) +{ + switch (*hquery->remaining_lookups) + { + case 'b': + /* RFC6761 section 6.3 #3 says "Name resolution APIs SHOULD NOT send + * queries for localhost names to their configured caching DNS + * server(s)." */ + if (strcmp(hquery->name, "localhost") != 0) + { + /* DNS lookup */ + if (next_dns_lookup(hquery)) + break; + } + + hquery->remaining_lookups++; + next_lookup(hquery, status); + break; + + case 'f': + /* Host file lookup */ + if (file_lookup(hquery) == ARES_SUCCESS) + { + end_hquery(hquery, ARES_SUCCESS); + break; + } + hquery->remaining_lookups++; + next_lookup(hquery, status); + break; + default: + /* No lookup left */ + end_hquery(hquery, status); + break; + } +} + +static void host_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen) +{ + struct host_query *hquery = (struct host_query*)arg; + int addinfostatus = ARES_SUCCESS; + hquery->timeouts += timeouts; + hquery->remaining--; + + if (status == ARES_SUCCESS) + { + addinfostatus = ares__parse_into_addrinfo(abuf, alen, 1, hquery->port, hquery->ai); + } + + if (!hquery->remaining) + { + if (addinfostatus != ARES_SUCCESS && addinfostatus != ARES_ENODATA) + { + /* error in parsing result e.g. no memory */ + end_hquery(hquery, addinfostatus); + } + else if (hquery->ai->nodes) + { + /* at least one query ended with ARES_SUCCESS */ + end_hquery(hquery, ARES_SUCCESS); + } + else if (status == ARES_ENOTFOUND || status == ARES_ENODATA || + addinfostatus == ARES_ENODATA) + { + if (status == ARES_ENODATA || addinfostatus == ARES_ENODATA) + hquery->nodata_cnt++; + next_lookup(hquery, hquery->nodata_cnt?ARES_ENODATA:status); + } + else if (status == ARES_EDESTRUCTION) + { + /* NOTE: Could also be ARES_EDESTRUCTION. We need to only call this + * once all queries (there can be multiple for getaddrinfo) are + * terminated. */ + end_hquery(hquery, status); + } + else + { + end_hquery(hquery, status); + } + } + + /* at this point we keep on waiting for the next query to finish */ +} + +void ares_getaddrinfo(ares_channel channel, + const char* name, const char* service, + const struct ares_addrinfo_hints* hints, + ares_addrinfo_callback callback, void* arg) +{ + struct host_query *hquery; + unsigned short port = 0; + int family; + struct ares_addrinfo *ai; + char *alias_name = NULL; + int status; + + if (!hints) + { + hints = &default_hints; + } + + family = hints->ai_family; + + /* Right now we only know how to look up Internet addresses + and unspec means try both basically. */ + if (family != AF_INET && + family != AF_INET6 && + family != AF_UNSPEC) + { + callback(arg, ARES_ENOTIMP, 0, NULL); + return; + } + + if (ares__is_onion_domain(name)) + { + callback(arg, ARES_ENOTFOUND, 0, NULL); + return; + } + + /* perform HOSTALIAS resolution (technically this function does some other + * things we are going to ignore) */ + status = ares__single_domain(channel, name, &alias_name); + if (status != ARES_SUCCESS) { + callback(arg, status, 0, NULL); + return; + } + + if (alias_name) + name = alias_name; + + if (service) + { + if (hints->ai_flags & ARES_AI_NUMERICSERV) + { + port = (unsigned short)strtoul(service, NULL, 0); + if (!port) + { + ares_free(alias_name); + callback(arg, ARES_ESERVICE, 0, NULL); + return; + } + } + else + { + port = lookup_service(service, 0); + if (!port) + { + port = (unsigned short)strtoul(service, NULL, 0); + if (!port) + { + ares_free(alias_name); + callback(arg, ARES_ESERVICE, 0, NULL); + return; + } + } + } + } + + ai = ares__malloc_addrinfo(); + if (!ai) + { + ares_free(alias_name); + callback(arg, ARES_ENOMEM, 0, NULL); + return; + } + + if (fake_addrinfo(name, port, hints, ai, callback, arg)) + { + ares_free(alias_name); + return; + } + + /* Allocate and fill in the host query structure. */ + hquery = ares_malloc(sizeof(struct host_query)); + if (!hquery) + { + ares_free(alias_name); + ares_freeaddrinfo(ai); + callback(arg, ARES_ENOMEM, 0, NULL); + return; + } + + hquery->name = ares_strdup(name); + ares_free(alias_name); + if (!hquery->name) + { + ares_free(hquery); + ares_freeaddrinfo(ai); + callback(arg, ARES_ENOMEM, 0, NULL); + return; + } + + hquery->port = port; + hquery->channel = channel; + hquery->hints = *hints; + hquery->sent_family = -1; /* nothing is sent yet */ + hquery->callback = callback; + hquery->arg = arg; + hquery->remaining_lookups = channel->lookups; + hquery->timeouts = 0; + hquery->ai = ai; + hquery->next_domain = -1; + hquery->remaining = 0; + hquery->nodata_cnt = 0; + + /* Start performing lookups according to channel->lookups. */ + next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */); +} + +static int next_dns_lookup(struct host_query *hquery) +{ + char *s = NULL; + int is_s_allocated = 0; + int status; + + /* if next_domain == -1 and as_is_first is true, try hquery->name */ + if (hquery->next_domain == -1) + { + if (as_is_first(hquery)) + { + s = hquery->name; + } + hquery->next_domain = 0; + } + + /* if as_is_first is false, try hquery->name at last */ + if (!s && hquery->next_domain == hquery->channel->ndomains) { + if (!as_is_first(hquery)) + { + s = hquery->name; + } + hquery->next_domain++; + } + + if (!s && hquery->next_domain < hquery->channel->ndomains && !as_is_only(hquery)) + { + status = ares__cat_domain( + hquery->name, + hquery->channel->domains[hquery->next_domain++], + &s); + if (status == ARES_SUCCESS) + { + is_s_allocated = 1; + } + } + + if (s) + { + switch (hquery->hints.ai_family) + { + case AF_INET: + hquery->remaining += 1; + ares_query(hquery->channel, s, C_IN, T_A, host_callback, hquery); + break; + case AF_INET6: + hquery->remaining += 1; + ares_query(hquery->channel, s, C_IN, T_AAAA, host_callback, hquery); + break; + case AF_UNSPEC: + hquery->remaining += 2; + ares_query(hquery->channel, s, C_IN, T_A, host_callback, hquery); + ares_query(hquery->channel, s, C_IN, T_AAAA, host_callback, hquery); + break; + default: break; + } + if (is_s_allocated) + { + ares_free(s); + } + return 1; + } + else + { + assert(!hquery->ai->nodes); + return 0; + } +} + +static int as_is_first(const struct host_query* hquery) +{ + char* p; + int ndots = 0; + size_t nname = hquery->name?strlen(hquery->name):0; + for (p = hquery->name; *p; p++) + { + if (*p == '.') + { + ndots++; + } + } + if (nname && hquery->name[nname-1] == '.') + { + /* prevent ARES_EBADNAME for valid FQDN, where ndots < channel->ndots */ + return 1; + } + return ndots >= hquery->channel->ndots; +} + +static int as_is_only(const struct host_query* hquery) +{ + size_t nname = hquery->name?strlen(hquery->name):0; + if (nname && hquery->name[nname-1] == '.') + return 1; + return 0; +} + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getenv.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getenv.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getenv.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getenv.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,28 @@ + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include "ares_getenv.h" + +#ifndef HAVE_GETENV + +char *ares_getenv(const char *name) +{ + return NULL; +} + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getenv.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getenv.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getenv.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getenv.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,26 @@ +#ifndef HEADER_CARES_GETENV_H +#define HEADER_CARES_GETENV_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifndef HAVE_GETENV +extern char *ares_getenv(const char *name); +#endif + +#endif /* HEADER_CARES_GETENV_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_gethostbyaddr.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_gethostbyaddr.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_gethostbyaddr.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_gethostbyaddr.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,287 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_inet_net_pton.h" +#include "ares_platform.h" +#include "ares_private.h" + +#ifdef WATT32 +#undef WIN32 +#endif + +struct addr_query { + /* Arguments passed to ares_gethostbyaddr() */ + ares_channel channel; + struct ares_addr addr; + ares_host_callback callback; + void *arg; + + const char *remaining_lookups; + int timeouts; +}; + +static void next_lookup(struct addr_query *aquery); +static void addr_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen); +static void end_aquery(struct addr_query *aquery, int status, + struct hostent *host); +static int file_lookup(struct ares_addr *addr, struct hostent **host); +static void ptr_rr_name(char *name, const struct ares_addr *addr); + +void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen, + int family, ares_host_callback callback, void *arg) +{ + struct addr_query *aquery; + + if (family != AF_INET && family != AF_INET6) + { + callback(arg, ARES_ENOTIMP, 0, NULL); + return; + } + + if ((family == AF_INET && addrlen != sizeof(aquery->addr.addrV4)) || + (family == AF_INET6 && addrlen != sizeof(aquery->addr.addrV6))) + { + callback(arg, ARES_ENOTIMP, 0, NULL); + return; + } + + aquery = ares_malloc(sizeof(struct addr_query)); + if (!aquery) + { + callback(arg, ARES_ENOMEM, 0, NULL); + return; + } + aquery->channel = channel; + if (family == AF_INET) + memcpy(&aquery->addr.addrV4, addr, sizeof(aquery->addr.addrV4)); + else + memcpy(&aquery->addr.addrV6, addr, sizeof(aquery->addr.addrV6)); + aquery->addr.family = family; + aquery->callback = callback; + aquery->arg = arg; + aquery->remaining_lookups = channel->lookups; + aquery->timeouts = 0; + + next_lookup(aquery); +} + +static void next_lookup(struct addr_query *aquery) +{ + const char *p; + char name[128]; + int status; + struct hostent *host; + + for (p = aquery->remaining_lookups; *p; p++) + { + switch (*p) + { + case 'b': + ptr_rr_name(name, &aquery->addr); + aquery->remaining_lookups = p + 1; + ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback, + aquery); + return; + case 'f': + status = file_lookup(&aquery->addr, &host); + + /* this status check below previously checked for !ARES_ENOTFOUND, + but we should not assume that this single error code is the one + that can occur, as that is in fact no longer the case */ + if (status == ARES_SUCCESS) + { + end_aquery(aquery, status, host); + return; + } + break; + } + } + end_aquery(aquery, ARES_ENOTFOUND, NULL); +} + +static void addr_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen) +{ + struct addr_query *aquery = (struct addr_query *) arg; + struct hostent *host; + size_t addrlen; + + aquery->timeouts += timeouts; + if (status == ARES_SUCCESS) + { + if (aquery->addr.family == AF_INET) + { + addrlen = sizeof(aquery->addr.addrV4); + status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4, + (int)addrlen, AF_INET, &host); + } + else + { + addrlen = sizeof(aquery->addr.addrV6); + status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6, + (int)addrlen, AF_INET6, &host); + } + end_aquery(aquery, status, host); + } + else if (status == ARES_EDESTRUCTION || status == ARES_ECANCELLED) + end_aquery(aquery, status, NULL); + else + next_lookup(aquery); +} + +static void end_aquery(struct addr_query *aquery, int status, + struct hostent *host) +{ + aquery->callback(aquery->arg, status, aquery->timeouts, host); + if (host) + ares_free_hostent(host); + ares_free(aquery); +} + +static int file_lookup(struct ares_addr *addr, struct hostent **host) +{ + FILE *fp; + int status; + int error; + +#ifdef WIN32 + char PATH_HOSTS[MAX_PATH]; + win_platform platform; + + PATH_HOSTS[0] = '\0'; + + platform = ares__getplatform(); + + if (platform == WIN_NT) { + char tmp[MAX_PATH]; + HKEY hkeyHosts; + + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, + &hkeyHosts) == ERROR_SUCCESS) + { + DWORD dwLength = MAX_PATH; + RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, + &dwLength); + ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH); + RegCloseKey(hkeyHosts); + } + } + else if (platform == WIN_9X) + GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH); + else + return ARES_ENOTFOUND; + + strcat(PATH_HOSTS, WIN_PATH_HOSTS); + +#elif defined(WATT32) + const char *PATH_HOSTS = _w32_GetHostsFile(); + + if (!PATH_HOSTS) + return ARES_ENOTFOUND; +#endif + + fp = fopen(PATH_HOSTS, "r"); + if (!fp) + { + error = ERRNO; + switch(error) + { + case ENOENT: + case ESRCH: + return ARES_ENOTFOUND; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", + PATH_HOSTS)); + *host = NULL; + return ARES_EFILE; + } + } + while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS) + { + if (addr->family != (*host)->h_addrtype) + { + ares_free_hostent(*host); + continue; + } + if (addr->family == AF_INET) + { + if (memcmp((*host)->h_addr, &addr->addrV4, + sizeof(addr->addrV4)) == 0) + break; + } + else if (addr->family == AF_INET6) + { + if (memcmp((*host)->h_addr, &addr->addrV6, + sizeof(addr->addrV6)) == 0) + break; + } + ares_free_hostent(*host); + } + fclose(fp); + if (status == ARES_EOF) + status = ARES_ENOTFOUND; + if (status != ARES_SUCCESS) + *host = NULL; + return status; +} + +static void ptr_rr_name(char *name, const struct ares_addr *addr) +{ + if (addr->family == AF_INET) + { + unsigned long laddr = ntohl(addr->addrV4.s_addr); + unsigned long a1 = (laddr >> 24UL) & 0xFFUL; + unsigned long a2 = (laddr >> 16UL) & 0xFFUL; + unsigned long a3 = (laddr >> 8UL) & 0xFFUL; + unsigned long a4 = laddr & 0xFFUL; + sprintf(name, "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1); + } + else + { + unsigned char *bytes = (unsigned char *)&addr->addrV6; + /* There are too many arguments to do this in one line using + * minimally C89-compliant compilers */ + sprintf(name, + "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.", + bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4, + bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4, + bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4, + bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4); + sprintf(name+strlen(name), + "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa", + bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4, + bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4, + bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4, + bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4); + } +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_gethostbyname.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_gethostbyname.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_gethostbyname.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_gethostbyname.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,338 @@ +/* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +#include +#endif + +#include "ares.h" +#include "ares_inet_net_pton.h" +#include "bitncmp.h" +#include "ares_platform.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +static void sort_addresses(struct hostent *host, + const struct apattern *sortlist, int nsort); +static void sort6_addresses(struct hostent *host, + const struct apattern *sortlist, int nsort); +static int get_address_index(const struct in_addr *addr, + const struct apattern *sortlist, int nsort); +static int get6_address_index(const struct ares_in6_addr *addr, + const struct apattern *sortlist, int nsort); + +struct host_query { + ares_host_callback callback; + void *arg; + ares_channel channel; +}; + +static void ares_gethostbyname_callback(void *arg, int status, int timeouts, + struct ares_addrinfo *result) +{ + struct hostent *hostent = NULL; + struct host_query *ghbn_arg = arg; + + if (status == ARES_SUCCESS) + { + status = ares__addrinfo2hostent(result, AF_UNSPEC, &hostent); + } + + /* addrinfo2hostent will only return ENODATA if there are no addresses _and_ + * no cname/aliases. However, gethostbyname will return ENODATA even if there + * is cname/alias data */ + if (status == ARES_SUCCESS && hostent && + (!hostent->h_addr_list || !hostent->h_addr_list[0])) + { + status = ARES_ENODATA; + } + + if (status == ARES_SUCCESS && ghbn_arg->channel->nsort && hostent) + { + if (hostent->h_addrtype == AF_INET6) + sort6_addresses(hostent, ghbn_arg->channel->sortlist, + ghbn_arg->channel->nsort); + if (hostent->h_addrtype == AF_INET) + sort_addresses(hostent, ghbn_arg->channel->sortlist, + ghbn_arg->channel->nsort); + } + + ghbn_arg->callback(ghbn_arg->arg, status, timeouts, hostent); + + ares_freeaddrinfo(result); + ares_free(ghbn_arg); + ares_free_hostent(hostent); +} + +void ares_gethostbyname(ares_channel channel, const char *name, int family, + ares_host_callback callback, void *arg) +{ + const struct ares_addrinfo_hints hints = { ARES_AI_CANONNAME, family, 0, 0 }; + struct host_query *ghbn_arg; + + if (!callback) + return; + + ghbn_arg = ares_malloc(sizeof(*ghbn_arg)); + if (!ghbn_arg) + { + callback(arg, ARES_ENOMEM, 0, NULL); + return; + } + + ghbn_arg->callback=callback; + ghbn_arg->arg=arg; + ghbn_arg->channel=channel; + + ares_getaddrinfo(channel, name, NULL, &hints, ares_gethostbyname_callback, + ghbn_arg); +} + + +static void sort_addresses(struct hostent *host, + const struct apattern *sortlist, int nsort) +{ + struct in_addr a1, a2; + int i1, i2, ind1, ind2; + + /* This is a simple insertion sort, not optimized at all. i1 walks + * through the address list, with the loop invariant that everything + * to the left of i1 is sorted. In the loop body, the value at i1 is moved + * back through the list (via i2) until it is in sorted order. + */ + for (i1 = 0; host->h_addr_list[i1]; i1++) + { + memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr)); + ind1 = get_address_index(&a1, sortlist, nsort); + for (i2 = i1 - 1; i2 >= 0; i2--) + { + memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr)); + ind2 = get_address_index(&a2, sortlist, nsort); + if (ind2 <= ind1) + break; + memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr)); + } + memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr)); + } +} + +/* Find the first entry in sortlist which matches addr. Return nsort + * if none of them match. + */ +static int get_address_index(const struct in_addr *addr, + const struct apattern *sortlist, + int nsort) +{ + int i; + + for (i = 0; i < nsort; i++) + { + if (sortlist[i].family != AF_INET) + continue; + if (sortlist[i].type == PATTERN_MASK) + { + if ((addr->s_addr & sortlist[i].mask.addr4.s_addr) + == sortlist[i].addrV4.s_addr) + break; + } + else + { + if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr, + sortlist[i].mask.bits)) + break; + } + } + return i; +} + +static void sort6_addresses(struct hostent *host, + const struct apattern *sortlist, int nsort) +{ + struct ares_in6_addr a1, a2; + int i1, i2, ind1, ind2; + + /* This is a simple insertion sort, not optimized at all. i1 walks + * through the address list, with the loop invariant that everything + * to the left of i1 is sorted. In the loop body, the value at i1 is moved + * back through the list (via i2) until it is in sorted order. + */ + for (i1 = 0; host->h_addr_list[i1]; i1++) + { + memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr)); + ind1 = get6_address_index(&a1, sortlist, nsort); + for (i2 = i1 - 1; i2 >= 0; i2--) + { + memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr)); + ind2 = get6_address_index(&a2, sortlist, nsort); + if (ind2 <= ind1) + break; + memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr)); + } + memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr)); + } +} + +/* Find the first entry in sortlist which matches addr. Return nsort + * if none of them match. + */ +static int get6_address_index(const struct ares_in6_addr *addr, + const struct apattern *sortlist, + int nsort) +{ + int i; + + for (i = 0; i < nsort; i++) + { + if (sortlist[i].family != AF_INET6) + continue; + if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits)) + break; + } + return i; +} + + + +static int file_lookup(const char *name, int family, struct hostent **host); + +/* I really have no idea why this is exposed as a public function, but since + * it is, we can't kill this legacy function. */ +int ares_gethostbyname_file(ares_channel channel, const char *name, + int family, struct hostent **host) +{ + int result; + + /* We only take the channel to ensure that ares_init() been called. */ + if(channel == NULL) + { + /* Anything will do, really. This seems fine, and is consistent with + other error cases. */ + *host = NULL; + return ARES_ENOTFOUND; + } + + /* Just chain to the internal implementation we use here; it's exactly + * what we want. + */ + result = file_lookup(name, family, host); + if(result != ARES_SUCCESS) + { + /* We guarantee a NULL hostent on failure. */ + *host = NULL; + } + return result; +} + +static int file_lookup(const char *name, int family, struct hostent **host) +{ + FILE *fp; + char **alias; + int status; + int error; + +#ifdef WIN32 + char PATH_HOSTS[MAX_PATH]; + win_platform platform; + + PATH_HOSTS[0] = '\0'; + + platform = ares__getplatform(); + + if (platform == WIN_NT) { + char tmp[MAX_PATH]; + HKEY hkeyHosts; + + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, + &hkeyHosts) == ERROR_SUCCESS) + { + DWORD dwLength = MAX_PATH; + RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp, + &dwLength); + ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH); + RegCloseKey(hkeyHosts); + } + } + else if (platform == WIN_9X) + GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH); + else + return ARES_ENOTFOUND; + + strcat(PATH_HOSTS, WIN_PATH_HOSTS); + +#elif defined(WATT32) + const char *PATH_HOSTS = _w32_GetHostsFile(); + + if (!PATH_HOSTS) + return ARES_ENOTFOUND; +#endif + + /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ + if (ares__is_onion_domain(name)) + return ARES_ENOTFOUND; + + + fp = fopen(PATH_HOSTS, "r"); + if (!fp) + { + error = ERRNO; + switch(error) + { + case ENOENT: + case ESRCH: + return ARES_ENOTFOUND; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", + PATH_HOSTS)); + *host = NULL; + return ARES_EFILE; + } + } + while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS) + { + if (strcasecmp((*host)->h_name, name) == 0) + break; + for (alias = (*host)->h_aliases; *alias; alias++) + { + if (strcasecmp(*alias, name) == 0) + break; + } + if (*alias) + break; + ares_free_hostent(*host); + } + fclose(fp); + if (status == ARES_EOF) + status = ARES_ENOTFOUND; + if (status != ARES_SUCCESS) + *host = NULL; + return status; +} + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__get_hostent.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__get_hostent.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__get_hostent.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__get_hostent.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,260 @@ + +/* Copyright 1998, 2011 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares.h" +#include "ares_inet_net_pton.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +int ares__get_hostent(FILE *fp, int family, struct hostent **host) +{ + char *line = NULL, *p, *q, **alias; + char *txtaddr, *txthost, *txtalias; + int status; + size_t addrlen, linesize, naliases; + struct ares_addr addr; + struct hostent *hostent = NULL; + + *host = NULL; /* Assume failure */ + + /* Validate family */ + switch (family) { + case AF_INET: + case AF_INET6: + case AF_UNSPEC: + break; + default: + return ARES_EBADFAMILY; + } + + while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) + { + + /* Trim line comment. */ + p = line; + while (*p && (*p != '#')) + p++; + *p = '\0'; + + /* Trim trailing whitespace. */ + q = p - 1; + while ((q >= line) && ISSPACE(*q)) + q--; + *++q = '\0'; + + /* Skip leading whitespace. */ + p = line; + while (*p && ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if empty. */ + continue; + + /* Pointer to start of IPv4 or IPv6 address part. */ + txtaddr = p; + + /* Advance past address part. */ + while (*p && !ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if reached end of line. */ + continue; + + /* Null terminate address part. */ + *p = '\0'; + + /* Advance to host name */ + p++; + while (*p && ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if reached end of line. */ + continue; /* LCOV_EXCL_LINE: trailing whitespace already stripped */ + + /* Pointer to start of host name. */ + txthost = p; + + /* Advance past host name. */ + while (*p && !ISSPACE(*p)) + p++; + + /* Pointer to start of first alias. */ + txtalias = NULL; + if (*p) + { + q = p + 1; + while (*q && ISSPACE(*q)) + q++; + if (*q) + txtalias = q; + } + + /* Null terminate host name. */ + *p = '\0'; + + /* find out number of aliases. */ + naliases = 0; + if (txtalias) + { + p = txtalias; + while (*p) + { + while (*p && !ISSPACE(*p)) + p++; + while (*p && ISSPACE(*p)) + p++; + naliases++; + } + } + + /* Convert address string to network address for the requested family. */ + addrlen = 0; + addr.family = AF_UNSPEC; + addr.addrV4.s_addr = INADDR_NONE; + if ((family == AF_INET) || (family == AF_UNSPEC)) + { + if (ares_inet_pton(AF_INET, txtaddr, &addr.addrV4) > 0) + { + /* Actual network address family and length. */ + addr.family = AF_INET; + addrlen = sizeof(addr.addrV4); + } + } + if ((family == AF_INET6) || ((family == AF_UNSPEC) && (!addrlen))) + { + if (ares_inet_pton(AF_INET6, txtaddr, &addr.addrV6) > 0) + { + /* Actual network address family and length. */ + addr.family = AF_INET6; + addrlen = sizeof(addr.addrV6); + } + } + if (!addrlen) + /* Ignore line if invalid address string for the requested family. */ + continue; + + /* + ** Actual address family possible values are AF_INET and AF_INET6 only. + */ + + /* Allocate memory for the hostent structure. */ + hostent = ares_malloc(sizeof(struct hostent)); + if (!hostent) + break; + + /* Initialize fields for out of memory condition. */ + hostent->h_aliases = NULL; + hostent->h_addr_list = NULL; + + /* Copy official host name. */ + hostent->h_name = ares_strdup(txthost); + if (!hostent->h_name) + break; + + /* Copy network address. */ + hostent->h_addr_list = ares_malloc(2 * sizeof(char *)); + if (!hostent->h_addr_list) + break; + hostent->h_addr_list[1] = NULL; + hostent->h_addr_list[0] = ares_malloc(addrlen); + if (!hostent->h_addr_list[0]) + break; + if (addr.family == AF_INET) + memcpy(hostent->h_addr_list[0], &addr.addrV4, sizeof(addr.addrV4)); + else + memcpy(hostent->h_addr_list[0], &addr.addrV6, sizeof(addr.addrV6)); + + /* Copy aliases. */ + hostent->h_aliases = ares_malloc((naliases + 1) * sizeof(char *)); + if (!hostent->h_aliases) + break; + alias = hostent->h_aliases; + while (naliases) + *(alias + naliases--) = NULL; + *alias = NULL; + while (txtalias) + { + p = txtalias; + while (*p && !ISSPACE(*p)) + p++; + q = p; + while (*q && ISSPACE(*q)) + q++; + *p = '\0'; + if ((*alias = ares_strdup(txtalias)) == NULL) + break; + alias++; + txtalias = *q ? q : NULL; + } + if (txtalias) + /* Alias memory allocation failure. */ + break; + + /* Copy actual network address family and length. */ + hostent->h_addrtype = aresx_sitoss(addr.family); + hostent->h_length = aresx_uztoss(addrlen); + + /* Free line buffer. */ + ares_free(line); + + /* Return hostent successfully */ + *host = hostent; + return ARES_SUCCESS; + + } + + /* If allocated, free line buffer. */ + if (line) + ares_free(line); + + if (status == ARES_SUCCESS) + { + /* Memory allocation failure; clean up. */ + if (hostent) + { + if (hostent->h_name) + ares_free((char *) hostent->h_name); + if (hostent->h_aliases) + { + for (alias = hostent->h_aliases; *alias; alias++) + ares_free(*alias); + ares_free(hostent->h_aliases); + } + if (hostent->h_addr_list) + { + if (hostent->h_addr_list[0]) + ares_free(hostent->h_addr_list[0]); + ares_free(hostent->h_addr_list); + } + ares_free(hostent); + } + return ARES_ENOMEM; + } + + return status; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getnameinfo.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getnameinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getnameinfo.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getnameinfo.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,447 @@ + +/* Copyright 2005 by Dominick Meglio + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ +#include "ares_setup.h" + +#ifdef HAVE_GETSERVBYPORT_R +# if !defined(GETSERVBYPORT_R_ARGS) || \ + (GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6) +# error "you MUST specifiy a valid number of arguments for getservbyport_r" +# endif +#endif + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_NET_IF_H +#include +#endif + +#include "ares.h" +#include "ares_ipv6.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +struct nameinfo_query { + ares_nameinfo_callback callback; + void *arg; + union { + struct sockaddr_in addr4; + struct sockaddr_in6 addr6; + } addr; + int family; + int flags; + int timeouts; +}; + +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID +#define IPBUFSIZ \ + (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE) +#else +#define IPBUFSIZ \ + (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")) +#endif + +static void nameinfo_callback(void *arg, int status, int timeouts, + struct hostent *host); +static char *lookup_service(unsigned short port, int flags, + char *buf, size_t buflen); +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID +static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid, + char *buf, size_t buflen); +#endif +STATIC_TESTABLE char *ares_striendstr(const char *s1, const char *s2); + +void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa, + ares_socklen_t salen, + int flags, ares_nameinfo_callback callback, void *arg) +{ + struct sockaddr_in *addr = NULL; + struct sockaddr_in6 *addr6 = NULL; + struct nameinfo_query *niquery; + unsigned int port = 0; + + /* Validate socket address family and length */ + if ((sa->sa_family == AF_INET) && + (salen == sizeof(struct sockaddr_in))) + { + addr = CARES_INADDR_CAST(struct sockaddr_in *, sa); + port = addr->sin_port; + } + else if ((sa->sa_family == AF_INET6) && + (salen == sizeof(struct sockaddr_in6))) + { + addr6 = CARES_INADDR_CAST(struct sockaddr_in6 *, sa); + port = addr6->sin6_port; + } + else + { + callback(arg, ARES_ENOTIMP, 0, NULL, NULL); + return; + } + + /* If neither, assume they want a host */ + if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) + flags |= ARES_NI_LOOKUPHOST; + + /* All they want is a service, no need for DNS */ + if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) + { + char buf[33], *service; + + service = lookup_service((unsigned short)(port & 0xffff), + flags, buf, sizeof(buf)); + callback(arg, ARES_SUCCESS, 0, NULL, service); + return; + } + + /* They want a host lookup */ + if ((flags & ARES_NI_LOOKUPHOST)) + { + /* A numeric host can be handled without DNS */ + if ((flags & ARES_NI_NUMERICHOST)) + { + char ipbuf[IPBUFSIZ]; + char srvbuf[33]; + char *service = NULL; + ipbuf[0] = 0; + + /* Specifying not to lookup a host, but then saying a host + * is required has to be illegal. + */ + if (flags & ARES_NI_NAMEREQD) + { + callback(arg, ARES_EBADFLAGS, 0, NULL, NULL); + return; + } + if (salen == sizeof(struct sockaddr_in6)) + { + ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ); + /* If the system supports scope IDs, use it */ +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID + append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf)); +#endif + } + else + { + ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ); + } + /* They also want a service */ + if (flags & ARES_NI_LOOKUPSERVICE) + service = lookup_service((unsigned short)(port & 0xffff), + flags, srvbuf, sizeof(srvbuf)); + callback(arg, ARES_SUCCESS, 0, ipbuf, service); + return; + } + /* This is where a DNS lookup becomes necessary */ + else + { + niquery = ares_malloc(sizeof(struct nameinfo_query)); + if (!niquery) + { + callback(arg, ARES_ENOMEM, 0, NULL, NULL); + return; + } + niquery->callback = callback; + niquery->arg = arg; + niquery->flags = flags; + niquery->timeouts = 0; + if (sa->sa_family == AF_INET) + { + niquery->family = AF_INET; + memcpy(&niquery->addr.addr4, addr, sizeof(niquery->addr.addr4)); + ares_gethostbyaddr(channel, &addr->sin_addr, + sizeof(struct in_addr), AF_INET, + nameinfo_callback, niquery); + } + else + { + niquery->family = AF_INET6; + memcpy(&niquery->addr.addr6, addr6, sizeof(niquery->addr.addr6)); + ares_gethostbyaddr(channel, &addr6->sin6_addr, + sizeof(struct ares_in6_addr), AF_INET6, + nameinfo_callback, niquery); + } + } + } +} + +static void nameinfo_callback(void *arg, int status, int timeouts, + struct hostent *host) +{ + struct nameinfo_query *niquery = (struct nameinfo_query *) arg; + char srvbuf[33]; + char *service = NULL; + + niquery->timeouts += timeouts; + if (status == ARES_SUCCESS) + { + /* They want a service too */ + if (niquery->flags & ARES_NI_LOOKUPSERVICE) + { + if (niquery->family == AF_INET) + service = lookup_service(niquery->addr.addr4.sin_port, + niquery->flags, srvbuf, sizeof(srvbuf)); + else + service = lookup_service(niquery->addr.addr6.sin6_port, + niquery->flags, srvbuf, sizeof(srvbuf)); + } + /* NOFQDN means we have to strip off the domain name portion. We do + this by determining our own domain name, then searching the string + for this domain name and removing it. + */ +#ifdef HAVE_GETHOSTNAME + if (niquery->flags & ARES_NI_NOFQDN) + { + char buf[255]; + char *domain; + gethostname(buf, 255); + if ((domain = strchr(buf, '.')) != NULL) + { + char *end = ares_striendstr(host->h_name, domain); + if (end) + *end = 0; + } + } +#endif + niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, + (char *)(host->h_name), + service); + ares_free(niquery); + return; + } + /* We couldn't find the host, but it's OK, we can use the IP */ + else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD)) + { + char ipbuf[IPBUFSIZ]; + if (niquery->family == AF_INET) + ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, + IPBUFSIZ); + else + { + ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, + IPBUFSIZ); +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID + append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf, + sizeof(ipbuf)); +#endif + } + /* They want a service too */ + if (niquery->flags & ARES_NI_LOOKUPSERVICE) + { + if (niquery->family == AF_INET) + service = lookup_service(niquery->addr.addr4.sin_port, + niquery->flags, srvbuf, sizeof(srvbuf)); + else + service = lookup_service(niquery->addr.addr6.sin6_port, + niquery->flags, srvbuf, sizeof(srvbuf)); + } + niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf, + service); + ares_free(niquery); + return; + } + niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL); + ares_free(niquery); +} + +static char *lookup_service(unsigned short port, int flags, + char *buf, size_t buflen) +{ + const char *proto; + struct servent *sep; +#ifdef HAVE_GETSERVBYPORT_R + struct servent se; +#endif + char tmpbuf[4096]; + char *name; + size_t name_len; + + if (port) + { + if (flags & ARES_NI_NUMERICSERV) + sep = NULL; + else + { + if (flags & ARES_NI_UDP) + proto = "udp"; + else if (flags & ARES_NI_SCTP) + proto = "sctp"; + else if (flags & ARES_NI_DCCP) + proto = "dccp"; + else + proto = "tcp"; +#ifdef HAVE_GETSERVBYPORT_R + memset(&se, 0, sizeof(se)); + sep = &se; + memset(tmpbuf, 0, sizeof(tmpbuf)); +#if GETSERVBYPORT_R_ARGS == 6 + if (getservbyport_r(port, proto, &se, (void *)tmpbuf, + sizeof(tmpbuf), &sep) != 0) + sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */ +#elif GETSERVBYPORT_R_ARGS == 5 + sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, + sizeof(tmpbuf)); +#elif GETSERVBYPORT_R_ARGS == 4 + if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0) + sep = NULL; +#else + /* Lets just hope the OS uses TLS! */ + sep = getservbyport(port, proto); +#endif +#else + /* Lets just hope the OS uses TLS! */ +#if (defined(NETWARE) && !defined(__NOVELL_LIBC__)) + sep = getservbyport(port, (char*)proto); +#else + sep = getservbyport(port, proto); +#endif +#endif + } + if (sep && sep->s_name) + { + /* get service name */ + name = sep->s_name; + } + else + { + /* get port as a string */ + sprintf(tmpbuf, "%u", (unsigned int)ntohs(port)); + name = tmpbuf; + } + name_len = strlen(name); + if (name_len < buflen) + /* return it if buffer big enough */ + memcpy(buf, name, name_len + 1); + else + /* avoid reusing previous one */ + buf[0] = '\0'; /* LCOV_EXCL_LINE: no real service names are too big */ + return buf; + } + buf[0] = '\0'; + return NULL; +} + +#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID +static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags, + char *buf, size_t buflen) +{ +#ifdef HAVE_IF_INDEXTONAME + int is_ll, is_mcll; +#endif + char tmpbuf[IF_NAMESIZE + 2]; + size_t bufl; + int is_scope_long = sizeof(addr6->sin6_scope_id) > sizeof(unsigned int); + + tmpbuf[0] = '%'; + +#ifdef HAVE_IF_INDEXTONAME + is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr); + is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr); + if ((flags & ARES_NI_NUMERICSCOPE) || + (!is_ll && !is_mcll)) + { + if (is_scope_long) + { + sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id); + } + else + { + sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id); + } + } + else + { + if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL) + { + if (is_scope_long) + { + sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id); + } + else + { + sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id); + } + } + } +#else + if (is_scope_long) + { + sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id); + } + else + { + sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id); + } + (void) flags; +#endif + tmpbuf[IF_NAMESIZE + 1] = '\0'; + bufl = strlen(buf); + + if(bufl + strlen(tmpbuf) < buflen) + /* only append the scopeid string if it fits in the target buffer */ + strcpy(&buf[bufl], tmpbuf); +} +#endif + +/* Determines if s1 ends with the string in s2 (case-insensitive) */ +STATIC_TESTABLE char *ares_striendstr(const char *s1, const char *s2) +{ + const char *c1, *c2, *c1_begin; + int lo1, lo2; + size_t s1_len = strlen(s1), s2_len = strlen(s2); + + /* If the substr is longer than the full str, it can't match */ + if (s2_len > s1_len) + return NULL; + + /* Jump to the end of s1 minus the length of s2 */ + c1_begin = s1+s1_len-s2_len; + c1 = (const char *)c1_begin; + c2 = s2; + while (c2 < s2+s2_len) + { + lo1 = TOLOWER(*c1); + lo2 = TOLOWER(*c2); + if (lo1 != lo2) + return NULL; + else + { + c1++; + c2++; + } + } + return (char *)c1_begin; +} + +int ares__is_onion_domain(const char *name) +{ + if (ares_striendstr(name, ".onion")) + return 1; + + if (ares_striendstr(name, ".onion.")) + return 1; + + return 0; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getsock.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getsock.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_getsock.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_getsock.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,66 @@ + +/* Copyright (C) 2005 - 2010, Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_private.h" + +int ares_getsock(ares_channel channel, + ares_socket_t *socks, + int numsocks) /* size of the 'socks' array */ +{ + struct server_state *server; + int i; + int sockindex=0; + int bitmap = 0; + unsigned int setbits = 0xffffffff; + + /* Are there any active queries? */ + int active_queries = !ares__is_list_empty(&(channel->all_queries)); + + for (i = 0; i < channel->nservers; i++) + { + server = &channel->servers[i]; + /* We only need to register interest in UDP sockets if we have + * outstanding queries. + */ + if (active_queries && server->udp_socket != ARES_SOCKET_BAD) + { + if(sockindex >= numsocks || sockindex >= ARES_GETSOCK_MAXNUM) + break; + socks[sockindex] = server->udp_socket; + bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); + sockindex++; + } + /* We always register for TCP events, because we want to know + * when the other side closes the connection, so we don't waste + * time trying to use a broken connection. + */ + if (server->tcp_socket != ARES_SOCKET_BAD) + { + if(sockindex >= numsocks || sockindex >= ARES_GETSOCK_MAXNUM) + break; + socks[sockindex] = server->tcp_socket; + bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex); + + if (server->qhead && active_queries) + /* then the tcp socket is also writable! */ + bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex); + + sockindex++; + } + } + return bitmap; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_inet_net_pton.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_inet_net_pton.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_inet_net_pton.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_inet_net_pton.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,25 @@ +#ifndef HEADER_CARES_INET_NET_PTON_H +#define HEADER_CARES_INET_NET_PTON_H + +/* Copyright (C) 2005-2013 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#ifdef HAVE_INET_NET_PTON +#define ares_inet_net_pton(w,x,y,z) inet_net_pton(w,x,y,z) +#else +int ares_inet_net_pton(int af, const char *src, void *dst, size_t size); +#endif + +#endif /* HEADER_CARES_INET_NET_PTON_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_init.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_init.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_init.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_init.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,2654 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2007-2013 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_PARAM_H +#include +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef HAVE_NETDB_H +#include +#endif + +#ifdef HAVE_ARPA_INET_H +#include +#endif + +#include "ares_nameser.h" + +#if defined(ANDROID) || defined(__ANDROID__) +#include +#include "ares_android.h" +/* From the Bionic sources */ +#define DNS_PROP_NAME_PREFIX "net.dns" +#define MAX_DNS_PROPERTIES 8 +#endif + +#if defined(CARES_USE_LIBRESOLV) +#include +#endif + +#include "ares.h" +#include "ares_inet_net_pton.h" +#include "ares_library_init.h" +#include "ares_nowarn.h" +#include "ares_platform.h" +#include "ares_private.h" + +#ifdef WATT32 +#undef WIN32 /* Redefined in MingW/MSVC headers */ +#endif + +static int init_by_options(ares_channel channel, + const struct ares_options *options, + int optmask); +static int init_by_environment(ares_channel channel); +static int init_by_resolv_conf(ares_channel channel); +static int init_by_defaults(ares_channel channel); + +#ifndef WATT32 +static int config_nameserver(struct server_state **servers, int *nservers, + char *str); +#endif +static int set_search(ares_channel channel, const char *str); +static int set_options(ares_channel channel, const char *str); +static const char *try_option(const char *p, const char *q, const char *opt); +static int init_id_key(rc4_key* key,int key_data_len); + +static int config_sortlist(struct apattern **sortlist, int *nsort, + const char *str); +static int sortlist_alloc(struct apattern **sortlist, int *nsort, + struct apattern *pat); +static int ip_addr(const char *s, ares_ssize_t len, struct in_addr *addr); +static void natural_mask(struct apattern *pat); +#if !defined(WIN32) && !defined(WATT32) && \ + !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV) +static int config_domain(ares_channel channel, char *str); +static int config_lookup(ares_channel channel, const char *str, + const char *bindch, const char *altbindch, + const char *filech); +static char *try_config(char *s, const char *opt, char scc); +#endif + +#define ARES_CONFIG_CHECK(x) (x->lookups && x->nsort > -1 && \ + x->nservers > -1 && \ + x->ndomains > -1 && \ + x->ndots > -1 && x->timeout > -1 && \ + x->tries > -1) + +int ares_init(ares_channel *channelptr) +{ + return ares_init_options(channelptr, NULL, 0); +} + +int ares_init_options(ares_channel *channelptr, struct ares_options *options, + int optmask) +{ + ares_channel channel; + int i; + int status = ARES_SUCCESS; + struct timeval now; + + if (ares_library_initialized() != ARES_SUCCESS) + return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */ + + channel = ares_malloc(sizeof(struct ares_channeldata)); + if (!channel) { + *channelptr = NULL; + return ARES_ENOMEM; + } + + now = ares__tvnow(); + + /* Set everything to distinguished values so we know they haven't + * been set yet. + */ + channel->flags = -1; + channel->timeout = -1; + channel->tries = -1; + channel->ndots = -1; + channel->rotate = -1; + channel->udp_port = -1; + channel->tcp_port = -1; + channel->ednspsz = -1; + channel->socket_send_buffer_size = -1; + channel->socket_receive_buffer_size = -1; + channel->nservers = -1; + channel->ndomains = -1; + channel->nsort = -1; + channel->tcp_connection_generation = 0; + channel->lookups = NULL; + channel->domains = NULL; + channel->sortlist = NULL; + channel->servers = NULL; + channel->sock_state_cb = NULL; + channel->sock_state_cb_data = NULL; + channel->sock_create_cb = NULL; + channel->sock_create_cb_data = NULL; + channel->sock_config_cb = NULL; + channel->sock_config_cb_data = NULL; + channel->sock_funcs = NULL; + channel->sock_func_cb_data = NULL; + channel->resolvconf_path = NULL; + + channel->last_server = 0; + channel->last_timeout_processed = (time_t)now.tv_sec; + + memset(&channel->local_dev_name, 0, sizeof(channel->local_dev_name)); + channel->local_ip4 = 0; + memset(&channel->local_ip6, 0, sizeof(channel->local_ip6)); + + /* Initialize our lists of queries */ + ares__init_list_head(&(channel->all_queries)); + for (i = 0; i < ARES_QID_TABLE_SIZE; i++) + { + ares__init_list_head(&(channel->queries_by_qid[i])); + } + for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++) + { + ares__init_list_head(&(channel->queries_by_timeout[i])); + } + + /* Initialize configuration by each of the four sources, from highest + * precedence to lowest. + */ + + status = init_by_options(channel, options, optmask); + if (status != ARES_SUCCESS) { + DEBUGF(fprintf(stderr, "Error: init_by_options failed: %s\n", + ares_strerror(status))); + /* If we fail to apply user-specified options, fail the whole init process */ + goto done; + } + status = init_by_environment(channel); + if (status != ARES_SUCCESS) + DEBUGF(fprintf(stderr, "Error: init_by_environment failed: %s\n", + ares_strerror(status))); + if (status == ARES_SUCCESS) { + status = init_by_resolv_conf(channel); + if (status != ARES_SUCCESS) + DEBUGF(fprintf(stderr, "Error: init_by_resolv_conf failed: %s\n", + ares_strerror(status))); + } + + /* + * No matter what failed or succeeded, seed defaults to provide + * useful behavior for things that we missed. + */ + status = init_by_defaults(channel); + if (status != ARES_SUCCESS) + DEBUGF(fprintf(stderr, "Error: init_by_defaults failed: %s\n", + ares_strerror(status))); + + /* Generate random key */ + + if (status == ARES_SUCCESS) { + status = init_id_key(&channel->id_key, ARES_ID_KEY_LEN); + if (status == ARES_SUCCESS) + channel->next_id = ares__generate_new_id(&channel->id_key); + else + DEBUGF(fprintf(stderr, "Error: init_id_key failed: %s\n", + ares_strerror(status))); + } + +done: + if (status != ARES_SUCCESS) + { + /* Something failed; clean up memory we may have allocated. */ + if (channel->servers) + ares_free(channel->servers); + if (channel->ndomains != -1) + ares_strsplit_free(channel->domains, channel->ndomains); + if (channel->sortlist) + ares_free(channel->sortlist); + if(channel->lookups) + ares_free(channel->lookups); + if(channel->resolvconf_path) + ares_free(channel->resolvconf_path); + ares_free(channel); + return status; + } + + /* Trim to one server if ARES_FLAG_PRIMARY is set. */ + if ((channel->flags & ARES_FLAG_PRIMARY) && channel->nservers > 1) + channel->nservers = 1; + + ares__init_servers_state(channel); + + *channelptr = channel; + return ARES_SUCCESS; +} + +/* ares_dup() duplicates a channel handle with all its options and returns a + new channel handle */ +int ares_dup(ares_channel *dest, ares_channel src) +{ + struct ares_options opts; + struct ares_addr_port_node *servers; + int non_v4_default_port = 0; + int i, rc; + int optmask; + + *dest = NULL; /* in case of failure return NULL explicitly */ + + /* First get the options supported by the old ares_save_options() function, + which is most of them */ + rc = ares_save_options(src, &opts, &optmask); + if(rc) + { + ares_destroy_options(&opts); + return rc; + } + + /* Then create the new channel with those options */ + rc = ares_init_options(dest, &opts, optmask); + + /* destroy the options copy to not leak any memory */ + ares_destroy_options(&opts); + + if(rc) + return rc; + + /* Now clone the options that ares_save_options() doesn't support. */ + (*dest)->sock_create_cb = src->sock_create_cb; + (*dest)->sock_create_cb_data = src->sock_create_cb_data; + (*dest)->sock_config_cb = src->sock_config_cb; + (*dest)->sock_config_cb_data = src->sock_config_cb_data; + (*dest)->sock_funcs = src->sock_funcs; + (*dest)->sock_func_cb_data = src->sock_func_cb_data; + + strncpy((*dest)->local_dev_name, src->local_dev_name, + sizeof((*dest)->local_dev_name)); + (*dest)->local_ip4 = src->local_ip4; + memcpy((*dest)->local_ip6, src->local_ip6, sizeof(src->local_ip6)); + + /* Full name server cloning required if there is a non-IPv4, or non-default port, nameserver */ + for (i = 0; i < src->nservers; i++) + { + if ((src->servers[i].addr.family != AF_INET) || + (src->servers[i].addr.udp_port != 0) || + (src->servers[i].addr.tcp_port != 0)) { + non_v4_default_port++; + break; + } + } + if (non_v4_default_port) { + rc = ares_get_servers_ports(src, &servers); + if (rc != ARES_SUCCESS) { + ares_destroy(*dest); + *dest = NULL; + return rc; + } + rc = ares_set_servers_ports(*dest, servers); + ares_free_data(servers); + if (rc != ARES_SUCCESS) { + ares_destroy(*dest); + *dest = NULL; + return rc; + } + } + + return ARES_SUCCESS; /* everything went fine */ +} + +/* Save options from initialized channel */ +int ares_save_options(ares_channel channel, struct ares_options *options, + int *optmask) +{ + int i, j; + int ipv4_nservers = 0; + + /* Zero everything out */ + memset(options, 0, sizeof(struct ares_options)); + + if (!ARES_CONFIG_CHECK(channel)) + return ARES_ENODATA; + + /* Traditionally the optmask wasn't saved in the channel struct so it was + recreated here. ROTATE is the first option that has no struct field of + its own in the public config struct */ + (*optmask) = (ARES_OPT_FLAGS|ARES_OPT_TRIES|ARES_OPT_NDOTS| + ARES_OPT_UDP_PORT|ARES_OPT_TCP_PORT|ARES_OPT_SOCK_STATE_CB| + ARES_OPT_SERVERS|ARES_OPT_DOMAINS|ARES_OPT_LOOKUPS| + ARES_OPT_SORTLIST|ARES_OPT_TIMEOUTMS); + (*optmask) |= (channel->rotate ? ARES_OPT_ROTATE : ARES_OPT_NOROTATE); + + if (channel->resolvconf_path) + (*optmask) |= ARES_OPT_RESOLVCONF; + + /* Copy easy stuff */ + options->flags = channel->flags; + + /* We return full millisecond resolution but that's only because we don't + set the ARES_OPT_TIMEOUT anymore, only the new ARES_OPT_TIMEOUTMS */ + options->timeout = channel->timeout; + options->tries = channel->tries; + options->ndots = channel->ndots; + options->udp_port = ntohs(aresx_sitous(channel->udp_port)); + options->tcp_port = ntohs(aresx_sitous(channel->tcp_port)); + options->sock_state_cb = channel->sock_state_cb; + options->sock_state_cb_data = channel->sock_state_cb_data; + + /* Copy IPv4 servers that use the default port */ + if (channel->nservers) { + for (i = 0; i < channel->nservers; i++) + { + if ((channel->servers[i].addr.family == AF_INET) && + (channel->servers[i].addr.udp_port == 0) && + (channel->servers[i].addr.tcp_port == 0)) + ipv4_nservers++; + } + if (ipv4_nservers) { + options->servers = ares_malloc(ipv4_nservers * sizeof(struct in_addr)); + if (!options->servers) + return ARES_ENOMEM; + for (i = j = 0; i < channel->nservers; i++) + { + if ((channel->servers[i].addr.family == AF_INET) && + (channel->servers[i].addr.udp_port == 0) && + (channel->servers[i].addr.tcp_port == 0)) + memcpy(&options->servers[j++], + &channel->servers[i].addr.addrV4, + sizeof(channel->servers[i].addr.addrV4)); + } + } + } + options->nservers = ipv4_nservers; + + /* copy domains */ + if (channel->ndomains) { + options->domains = ares_malloc(channel->ndomains * sizeof(char *)); + if (!options->domains) + return ARES_ENOMEM; + + for (i = 0; i < channel->ndomains; i++) + { + options->ndomains = i; + options->domains[i] = ares_strdup(channel->domains[i]); + if (!options->domains[i]) + return ARES_ENOMEM; + } + } + options->ndomains = channel->ndomains; + + /* copy lookups */ + if (channel->lookups) { + options->lookups = ares_strdup(channel->lookups); + if (!options->lookups && channel->lookups) + return ARES_ENOMEM; + } + + /* copy sortlist */ + if (channel->nsort) { + options->sortlist = ares_malloc(channel->nsort * sizeof(struct apattern)); + if (!options->sortlist) + return ARES_ENOMEM; + for (i = 0; i < channel->nsort; i++) + options->sortlist[i] = channel->sortlist[i]; + } + options->nsort = channel->nsort; + + /* copy path for resolv.conf file */ + if (channel->resolvconf_path) { + options->resolvconf_path = ares_strdup(channel->resolvconf_path); + if (!options->resolvconf_path) + return ARES_ENOMEM; + } + + return ARES_SUCCESS; +} + +static int init_by_options(ares_channel channel, + const struct ares_options *options, + int optmask) +{ + int i; + + /* Easy stuff. */ + if ((optmask & ARES_OPT_FLAGS) && channel->flags == -1) + channel->flags = options->flags; + if ((optmask & ARES_OPT_TIMEOUTMS) && channel->timeout == -1) + channel->timeout = options->timeout; + else if ((optmask & ARES_OPT_TIMEOUT) && channel->timeout == -1) + channel->timeout = options->timeout * 1000; + if ((optmask & ARES_OPT_TRIES) && channel->tries == -1) + channel->tries = options->tries; + if ((optmask & ARES_OPT_NDOTS) && channel->ndots == -1) + channel->ndots = options->ndots; + if ((optmask & ARES_OPT_ROTATE) && channel->rotate == -1) + channel->rotate = 1; + if ((optmask & ARES_OPT_NOROTATE) && channel->rotate == -1) + channel->rotate = 0; + if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == -1) + channel->udp_port = htons(options->udp_port); + if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1) + channel->tcp_port = htons(options->tcp_port); + if ((optmask & ARES_OPT_SOCK_STATE_CB) && channel->sock_state_cb == NULL) + { + channel->sock_state_cb = options->sock_state_cb; + channel->sock_state_cb_data = options->sock_state_cb_data; + } + if ((optmask & ARES_OPT_SOCK_SNDBUF) + && channel->socket_send_buffer_size == -1) + channel->socket_send_buffer_size = options->socket_send_buffer_size; + if ((optmask & ARES_OPT_SOCK_RCVBUF) + && channel->socket_receive_buffer_size == -1) + channel->socket_receive_buffer_size = options->socket_receive_buffer_size; + + if ((optmask & ARES_OPT_EDNSPSZ) && channel->ednspsz == -1) + channel->ednspsz = options->ednspsz; + + /* Copy the IPv4 servers, if given. */ + if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1) + { + /* Avoid zero size allocations at any cost */ + if (options->nservers > 0) + { + channel->servers = + ares_malloc(options->nservers * sizeof(struct server_state)); + if (!channel->servers) + return ARES_ENOMEM; + for (i = 0; i < options->nservers; i++) + { + channel->servers[i].addr.family = AF_INET; + channel->servers[i].addr.udp_port = 0; + channel->servers[i].addr.tcp_port = 0; + memcpy(&channel->servers[i].addr.addrV4, + &options->servers[i], + sizeof(channel->servers[i].addr.addrV4)); + } + } + channel->nservers = options->nservers; + } + + /* Copy the domains, if given. Keep channel->ndomains consistent so + * we can clean up in case of error. + */ + if ((optmask & ARES_OPT_DOMAINS) && channel->ndomains == -1) + { + /* Avoid zero size allocations at any cost */ + if (options->ndomains > 0) + { + channel->domains = ares_malloc(options->ndomains * sizeof(char *)); + if (!channel->domains) + return ARES_ENOMEM; + for (i = 0; i < options->ndomains; i++) + { + channel->ndomains = i; + channel->domains[i] = ares_strdup(options->domains[i]); + if (!channel->domains[i]) + return ARES_ENOMEM; + } + } + channel->ndomains = options->ndomains; + } + + /* Set lookups, if given. */ + if ((optmask & ARES_OPT_LOOKUPS) && !channel->lookups) + { + channel->lookups = ares_strdup(options->lookups); + if (!channel->lookups) + return ARES_ENOMEM; + } + + /* copy sortlist */ + if ((optmask & ARES_OPT_SORTLIST) && (channel->nsort == -1)) { + if (options->nsort > 0) { + channel->sortlist = ares_malloc(options->nsort * sizeof(struct apattern)); + if (!channel->sortlist) + return ARES_ENOMEM; + for (i = 0; i < options->nsort; i++) + channel->sortlist[i] = options->sortlist[i]; + } + channel->nsort = options->nsort; + } + + /* Set path for resolv.conf file, if given. */ + if ((optmask & ARES_OPT_RESOLVCONF) && !channel->resolvconf_path) + { + channel->resolvconf_path = ares_strdup(options->resolvconf_path); + if (!channel->resolvconf_path && options->resolvconf_path) + return ARES_ENOMEM; + } + + channel->optmask = optmask; + + return ARES_SUCCESS; +} + +static int init_by_environment(ares_channel channel) +{ + const char *localdomain, *res_options; + int status; + + localdomain = getenv("LOCALDOMAIN"); + if (localdomain && channel->ndomains == -1) + { + status = set_search(channel, localdomain); + if (status != ARES_SUCCESS) + return status; + } + + res_options = getenv("RES_OPTIONS"); + if (res_options) + { + status = set_options(channel, res_options); + if (status != ARES_SUCCESS) + return status; /* LCOV_EXCL_LINE: set_options() never fails */ + } + + return ARES_SUCCESS; +} + +#ifdef WIN32 +/* + * get_REG_SZ() + * + * Given a 'hKey' handle to an open registry key and a 'leafKeyName' pointer + * to the name of the registry leaf key to be queried, fetch it's string + * value and return a pointer in *outptr to a newly allocated memory area + * holding it as a null-terminated string. + * + * Returns 0 and nullifies *outptr upon inability to return a string value. + * + * Returns 1 and sets *outptr when returning a dynamically allocated string. + * + * Supported on Windows NT 3.5 and newer. + */ +static int get_REG_SZ(HKEY hKey, const char *leafKeyName, char **outptr) +{ + DWORD size = 0; + int res; + + *outptr = NULL; + + /* Find out size of string stored in registry */ + res = RegQueryValueExA(hKey, leafKeyName, 0, NULL, NULL, &size); + if ((res != ERROR_SUCCESS && res != ERROR_MORE_DATA) || !size) + return 0; + + /* Allocate buffer of indicated size plus one given that string + might have been stored without null termination */ + *outptr = ares_malloc(size+1); + if (!*outptr) + return 0; + + /* Get the value for real */ + res = RegQueryValueExA(hKey, leafKeyName, 0, NULL, + (unsigned char *)*outptr, &size); + if ((res != ERROR_SUCCESS) || (size == 1)) + { + ares_free(*outptr); + *outptr = NULL; + return 0; + } + + /* Null terminate buffer allways */ + *(*outptr + size) = '\0'; + + return 1; +} + +/* + * get_REG_SZ_9X() + * + * Functionally identical to get_REG_SZ() + * + * Supported on Windows 95, 98 and ME. + */ +static int get_REG_SZ_9X(HKEY hKey, const char *leafKeyName, char **outptr) +{ + DWORD dataType = 0; + DWORD size = 0; + int res; + + *outptr = NULL; + + /* Find out size of string stored in registry */ + res = RegQueryValueExA(hKey, leafKeyName, 0, &dataType, NULL, &size); + if ((res != ERROR_SUCCESS && res != ERROR_MORE_DATA) || !size) + return 0; + + /* Allocate buffer of indicated size plus one given that string + might have been stored without null termination */ + *outptr = ares_malloc(size+1); + if (!*outptr) + return 0; + + /* Get the value for real */ + res = RegQueryValueExA(hKey, leafKeyName, 0, &dataType, + (unsigned char *)*outptr, &size); + if ((res != ERROR_SUCCESS) || (size == 1)) + { + ares_free(*outptr); + *outptr = NULL; + return 0; + } + + /* Null terminate buffer allways */ + *(*outptr + size) = '\0'; + + return 1; +} + +/* + * get_enum_REG_SZ() + * + * Given a 'hKeyParent' handle to an open registry key and a 'leafKeyName' + * pointer to the name of the registry leaf key to be queried, parent key + * is enumerated searching in child keys for given leaf key name and its + * associated string value. When located, this returns a pointer in *outptr + * to a newly allocated memory area holding it as a null-terminated string. + * + * Returns 0 and nullifies *outptr upon inability to return a string value. + * + * Returns 1 and sets *outptr when returning a dynamically allocated string. + * + * Supported on Windows NT 3.5 and newer. + */ +static int get_enum_REG_SZ(HKEY hKeyParent, const char *leafKeyName, + char **outptr) +{ + char enumKeyName[256]; + DWORD enumKeyNameBuffSize; + DWORD enumKeyIdx = 0; + HKEY hKeyEnum; + int gotString; + int res; + + *outptr = NULL; + + for(;;) + { + enumKeyNameBuffSize = sizeof(enumKeyName); + res = RegEnumKeyExA(hKeyParent, enumKeyIdx++, enumKeyName, + &enumKeyNameBuffSize, 0, NULL, NULL, NULL); + if (res != ERROR_SUCCESS) + break; + res = RegOpenKeyExA(hKeyParent, enumKeyName, 0, KEY_QUERY_VALUE, + &hKeyEnum); + if (res != ERROR_SUCCESS) + continue; + gotString = get_REG_SZ(hKeyEnum, leafKeyName, outptr); + RegCloseKey(hKeyEnum); + if (gotString) + break; + } + + if (!*outptr) + return 0; + + return 1; +} + +/* + * get_DNS_Registry_9X() + * + * Functionally identical to get_DNS_Registry() + * + * Implementation supports Windows 95, 98 and ME. + */ +static int get_DNS_Registry_9X(char **outptr) +{ + HKEY hKey_VxD_MStcp; + int gotString; + int res; + + *outptr = NULL; + + res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_9X, 0, KEY_READ, + &hKey_VxD_MStcp); + if (res != ERROR_SUCCESS) + return 0; + + gotString = get_REG_SZ_9X(hKey_VxD_MStcp, NAMESERVER, outptr); + RegCloseKey(hKey_VxD_MStcp); + + if (!gotString || !*outptr) + return 0; + + return 1; +} + +/* + * get_DNS_Registry_NT() + * + * Functionally identical to get_DNS_Registry() + * + * Refs: Microsoft Knowledge Base articles KB120642 and KB314053. + * + * Implementation supports Windows NT 3.5 and newer. + */ +static int get_DNS_Registry_NT(char **outptr) +{ + HKEY hKey_Interfaces = NULL; + HKEY hKey_Tcpip_Parameters; + int gotString; + int res; + + *outptr = NULL; + + res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, + &hKey_Tcpip_Parameters); + if (res != ERROR_SUCCESS) + return 0; + + /* + ** Global DNS settings override adapter specific parameters when both + ** are set. Additionally static DNS settings override DHCP-configured + ** parameters when both are set. + */ + + /* Global DNS static parameters */ + gotString = get_REG_SZ(hKey_Tcpip_Parameters, NAMESERVER, outptr); + if (gotString) + goto done; + + /* Global DNS DHCP-configured parameters */ + gotString = get_REG_SZ(hKey_Tcpip_Parameters, DHCPNAMESERVER, outptr); + if (gotString) + goto done; + + /* Try adapter specific parameters */ + res = RegOpenKeyExA(hKey_Tcpip_Parameters, "Interfaces", 0, + KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS, + &hKey_Interfaces); + if (res != ERROR_SUCCESS) + { + hKey_Interfaces = NULL; + goto done; + } + + /* Adapter specific DNS static parameters */ + gotString = get_enum_REG_SZ(hKey_Interfaces, NAMESERVER, outptr); + if (gotString) + goto done; + + /* Adapter specific DNS DHCP-configured parameters */ + gotString = get_enum_REG_SZ(hKey_Interfaces, DHCPNAMESERVER, outptr); + +done: + if (hKey_Interfaces) + RegCloseKey(hKey_Interfaces); + + RegCloseKey(hKey_Tcpip_Parameters); + + if (!gotString || !*outptr) + return 0; + + return 1; +} + +/* + * get_DNS_Registry() + * + * Locates DNS info in the registry. When located, this returns a pointer + * in *outptr to a newly allocated memory area holding a null-terminated + * string with a space or comma seperated list of DNS IP addresses. + * + * Returns 0 and nullifies *outptr upon inability to return DNSes string. + * + * Returns 1 and sets *outptr when returning a dynamically allocated string. + */ +static int get_DNS_Registry(char **outptr) +{ + win_platform platform; + int gotString = 0; + + *outptr = NULL; + + platform = ares__getplatform(); + + if (platform == WIN_NT) + gotString = get_DNS_Registry_NT(outptr); + else if (platform == WIN_9X) + gotString = get_DNS_Registry_9X(outptr); + + if (!gotString) + return 0; + + return 1; +} + +static void commanjoin(char** dst, const char* const src, const size_t len) +{ + char *newbuf; + size_t newsize; + + /* 1 for terminating 0 and 2 for , and terminating 0 */ + newsize = len + (*dst ? (strlen(*dst) + 2) : 1); + newbuf = ares_realloc(*dst, newsize); + if (!newbuf) + return; + if (*dst == NULL) + *newbuf = '\0'; + *dst = newbuf; + if (strlen(*dst) != 0) + strcat(*dst, ","); + strncat(*dst, src, len); +} + +/* + * commajoin() + * + * RTF code. + */ +static void commajoin(char **dst, const char *src) +{ + commanjoin(dst, src, strlen(src)); +} + +/* + * get_DNS_NetworkParams() + * + * Locates DNS info using GetNetworkParams() function from the Internet + * Protocol Helper (IP Helper) API. When located, this returns a pointer + * in *outptr to a newly allocated memory area holding a null-terminated + * string with a space or comma seperated list of DNS IP addresses. + * + * Returns 0 and nullifies *outptr upon inability to return DNSes string. + * + * Returns 1 and sets *outptr when returning a dynamically allocated string. + * + * Implementation supports Windows 98 and newer. + * + * Note: Ancient PSDK required in order to build a W98 target. + */ +static int get_DNS_NetworkParams(char **outptr) +{ + FIXED_INFO *fi, *newfi; + struct ares_addr namesrvr; + char *txtaddr; + IP_ADDR_STRING *ipAddr; + int res; + DWORD size = sizeof (*fi); + + *outptr = NULL; + + /* Verify run-time availability of GetNetworkParams() */ + if (ares_fpGetNetworkParams == ZERO_NULL) + return 0; + + fi = ares_malloc(size); + if (!fi) + return 0; + + res = (*ares_fpGetNetworkParams) (fi, &size); + if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS)) + goto done; + + newfi = ares_realloc(fi, size); + if (!newfi) + goto done; + + fi = newfi; + res = (*ares_fpGetNetworkParams) (fi, &size); + if (res != ERROR_SUCCESS) + goto done; + + for (ipAddr = &fi->DnsServerList; ipAddr; ipAddr = ipAddr->Next) + { + txtaddr = &ipAddr->IpAddress.String[0]; + + /* Validate converting textual address to binary format. */ + if (ares_inet_pton(AF_INET, txtaddr, &namesrvr.addrV4) == 1) + { + if ((namesrvr.addrV4.S_un.S_addr == INADDR_ANY) || + (namesrvr.addrV4.S_un.S_addr == INADDR_NONE)) + continue; + } + else if (ares_inet_pton(AF_INET6, txtaddr, &namesrvr.addrV6) == 1) + { + if (memcmp(&namesrvr.addrV6, &ares_in6addr_any, + sizeof(namesrvr.addrV6)) == 0) + continue; + } + else + continue; + + commajoin(outptr, txtaddr); + + if (!*outptr) + break; + } + +done: + if (fi) + ares_free(fi); + + if (!*outptr) + return 0; + + return 1; +} + +static BOOL ares_IsWindowsVistaOrGreater(void) +{ + OSVERSIONINFO vinfo; + memset(&vinfo, 0, sizeof(vinfo)); + vinfo.dwOSVersionInfoSize = sizeof(vinfo); +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4996) /* warning C4996: 'GetVersionExW': was declared deprecated */ +#endif + if (!GetVersionEx(&vinfo) || vinfo.dwMajorVersion < 6) + return FALSE; + return TRUE; +#ifdef _MSC_VER +#pragma warning(pop) +#endif +} + +/* A structure to hold the string form of IPv4 and IPv6 addresses so we can + * sort them by a metric. + */ +typedef struct +{ + /* The metric we sort them by. */ + ULONG metric; + + /* Original index of the item, used as a secondary sort parameter to make + * qsort() stable if the metrics are equal */ + size_t orig_idx; + + /* Room enough for the string form of any IPv4 or IPv6 address that + * ares_inet_ntop() will create. Based on the existing c-ares practice. + */ + char text[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; +} Address; + +/* Sort Address values \a left and \a right by metric, returning the usual + * indicators for qsort(). + */ +static int compareAddresses(const void *arg1, + const void *arg2) +{ + const Address * const left = arg1; + const Address * const right = arg2; + /* Lower metric the more preferred */ + if(left->metric < right->metric) return -1; + if(left->metric > right->metric) return 1; + /* If metrics are equal, lower original index more preferred */ + if(left->orig_idx < right->orig_idx) return -1; + if(left->orig_idx > right->orig_idx) return 1; + return 0; +} + +/* There can be multiple routes to "the Internet". And there can be different + * DNS servers associated with each of the interfaces that offer those routes. + * We have to assume that any DNS server can serve any request. But, some DNS + * servers may only respond if requested over their associated interface. But + * we also want to use "the preferred route to the Internet" whenever possible + * (and not use DNS servers on a non-preferred route even by forcing request + * to go out on the associated non-preferred interface). i.e. We want to use + * the DNS servers associated with the same interface that we would use to + * make a general request to anything else. + * + * But, Windows won't sort the DNS servers by the metrics associated with the + * routes and interfaces _even_ though it obviously sends IP packets based on + * those same routes and metrics. So, we must do it ourselves. + * + * So, we sort the DNS servers by the same metric values used to determine how + * an outgoing IP packet will go, thus effectively using the DNS servers + * associated with the interface that the DNS requests themselves will + * travel. This gives us optimal routing and avoids issues where DNS servers + * won't respond to requests that don't arrive via some specific subnetwork + * (and thus some specific interface). + * + * This function computes the metric we use to sort. On the interface + * identified by \a luid, it determines the best route to \a dest and combines + * that route's metric with \a interfaceMetric to compute a metric for the + * destination address on that interface. This metric can be used as a weight + * to sort the DNS server addresses associated with each interface (lower is + * better). + * + * Note that by restricting the route search to the specific interface with + * which the DNS servers are associated, this function asks the question "What + * is the metric for sending IP packets to this DNS server?" which allows us + * to sort the DNS servers correctly. + */ +static ULONG getBestRouteMetric(IF_LUID * const luid, /* Can't be const :( */ + const SOCKADDR_INET * const dest, + const ULONG interfaceMetric) +{ + /* On this interface, get the best route to that destination. */ + MIB_IPFORWARD_ROW2 row; + SOCKADDR_INET ignored; + if(!ares_fpGetBestRoute2 || + ares_fpGetBestRoute2(/* The interface to use. The index is ignored since we are + * passing a LUID. + */ + luid, 0, + /* No specific source address. */ + NULL, + /* Our destination address. */ + dest, + /* No options. */ + 0, + /* The route row. */ + &row, + /* The best source address, which we don't need. */ + &ignored) != NO_ERROR + /* If the metric is "unused" (-1) or too large for us to add the two + * metrics, use the worst possible, thus sorting this last. + */ + || row.Metric == (ULONG)-1 + || row.Metric > ((ULONG)-1) - interfaceMetric) { + /* Return the worst possible metric. */ + return (ULONG)-1; + } + + /* Return the metric value from that row, plus the interface metric. + * + * See + * http://msdn.microsoft.com/en-us/library/windows/desktop/aa814494(v=vs.85).aspx + * which describes the combination as a "sum". + */ + return row.Metric + interfaceMetric; +} + +/* + * get_DNS_AdaptersAddresses() + * + * Locates DNS info using GetAdaptersAddresses() function from the Internet + * Protocol Helper (IP Helper) API. When located, this returns a pointer + * in *outptr to a newly allocated memory area holding a null-terminated + * string with a space or comma seperated list of DNS IP addresses. + * + * Returns 0 and nullifies *outptr upon inability to return DNSes string. + * + * Returns 1 and sets *outptr when returning a dynamically allocated string. + * + * Implementation supports Windows XP and newer. + */ +#define IPAA_INITIAL_BUF_SZ 15 * 1024 +#define IPAA_MAX_TRIES 3 +static int get_DNS_AdaptersAddresses(char **outptr) +{ + IP_ADAPTER_DNS_SERVER_ADDRESS *ipaDNSAddr; + IP_ADAPTER_ADDRESSES *ipaa, *newipaa, *ipaaEntry; + ULONG ReqBufsz = IPAA_INITIAL_BUF_SZ; + ULONG Bufsz = IPAA_INITIAL_BUF_SZ; + ULONG AddrFlags = 0; + int trying = IPAA_MAX_TRIES; + int res; + + /* The capacity of addresses, in elements. */ + size_t addressesSize; + /* The number of elements in addresses. */ + size_t addressesIndex = 0; + /* The addresses we will sort. */ + Address *addresses; + + union { + struct sockaddr *sa; + struct sockaddr_in *sa4; + struct sockaddr_in6 *sa6; + } namesrvr; + + *outptr = NULL; + + /* Verify run-time availability of GetAdaptersAddresses() */ + if (ares_fpGetAdaptersAddresses == ZERO_NULL) + return 0; + + ipaa = ares_malloc(Bufsz); + if (!ipaa) + return 0; + + /* Start with enough room for a few DNS server addresses and we'll grow it + * as we encounter more. + */ + addressesSize = 4; + addresses = (Address*)ares_malloc(sizeof(Address) * addressesSize); + if(addresses == NULL) { + /* We need room for at least some addresses to function. */ + ares_free(ipaa); + return 0; + } + + /* Usually this call suceeds with initial buffer size */ + res = (*ares_fpGetAdaptersAddresses) (AF_UNSPEC, AddrFlags, NULL, + ipaa, &ReqBufsz); + if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS)) + goto done; + + while ((res == ERROR_BUFFER_OVERFLOW) && (--trying)) + { + if (Bufsz < ReqBufsz) + { + newipaa = ares_realloc(ipaa, ReqBufsz); + if (!newipaa) + goto done; + Bufsz = ReqBufsz; + ipaa = newipaa; + } + res = (*ares_fpGetAdaptersAddresses) (AF_UNSPEC, AddrFlags, NULL, + ipaa, &ReqBufsz); + if (res == ERROR_SUCCESS) + break; + } + if (res != ERROR_SUCCESS) + goto done; + + for (ipaaEntry = ipaa; ipaaEntry; ipaaEntry = ipaaEntry->Next) + { + if(ipaaEntry->OperStatus != IfOperStatusUp) + continue; + + /* For each interface, find any associated DNS servers as IPv4 or IPv6 + * addresses. For each found address, find the best route to that DNS + * server address _on_ _that_ _interface_ (at this moment in time) and + * compute the resulting total metric, just as Windows routing will do. + * Then, sort all the addresses found by the metric. + */ + for (ipaDNSAddr = ipaaEntry->FirstDnsServerAddress; + ipaDNSAddr; + ipaDNSAddr = ipaDNSAddr->Next) + { + namesrvr.sa = ipaDNSAddr->Address.lpSockaddr; + + if (namesrvr.sa->sa_family == AF_INET) + { + if ((namesrvr.sa4->sin_addr.S_un.S_addr == INADDR_ANY) || + (namesrvr.sa4->sin_addr.S_un.S_addr == INADDR_NONE)) + continue; + + /* Allocate room for another address, if necessary, else skip. */ + if(addressesIndex == addressesSize) { + const size_t newSize = addressesSize + 4; + Address * const newMem = + (Address*)ares_realloc(addresses, sizeof(Address) * newSize); + if(newMem == NULL) { + continue; + } + addresses = newMem; + addressesSize = newSize; + } + + /* Vista required for Luid or Ipv4Metric */ + if (ares_IsWindowsVistaOrGreater()) + { + /* Save the address as the next element in addresses. */ + addresses[addressesIndex].metric = + getBestRouteMetric(&ipaaEntry->Luid, + (SOCKADDR_INET*)(namesrvr.sa), + ipaaEntry->Ipv4Metric); + } + else + { + addresses[addressesIndex].metric = (ULONG)-1; + } + + /* Record insertion index to make qsort stable */ + addresses[addressesIndex].orig_idx = addressesIndex; + + if (! ares_inet_ntop(AF_INET, &namesrvr.sa4->sin_addr, + addresses[addressesIndex].text, + sizeof(addresses[0].text))) { + continue; + } + ++addressesIndex; + } + else if (namesrvr.sa->sa_family == AF_INET6) + { + if (memcmp(&namesrvr.sa6->sin6_addr, &ares_in6addr_any, + sizeof(namesrvr.sa6->sin6_addr)) == 0) + continue; + + /* Allocate room for another address, if necessary, else skip. */ + if(addressesIndex == addressesSize) { + const size_t newSize = addressesSize + 4; + Address * const newMem = + (Address*)ares_realloc(addresses, sizeof(Address) * newSize); + if(newMem == NULL) { + continue; + } + addresses = newMem; + addressesSize = newSize; + } + + /* Vista required for Luid or Ipv4Metric */ + if (ares_IsWindowsVistaOrGreater()) + { + /* Save the address as the next element in addresses. */ + addresses[addressesIndex].metric = + getBestRouteMetric(&ipaaEntry->Luid, + (SOCKADDR_INET*)(namesrvr.sa), + ipaaEntry->Ipv6Metric); + } + else + { + addresses[addressesIndex].metric = (ULONG)-1; + } + + /* Record insertion index to make qsort stable */ + addresses[addressesIndex].orig_idx = addressesIndex; + + if (! ares_inet_ntop(AF_INET6, &namesrvr.sa6->sin6_addr, + addresses[addressesIndex].text, + sizeof(addresses[0].text))) { + continue; + } + ++addressesIndex; + } + else { + /* Skip non-IPv4/IPv6 addresses completely. */ + continue; + } + } + } + + /* Sort all of the textual addresses by their metric (and original index if + * metrics are equal). */ + qsort(addresses, addressesIndex, sizeof(*addresses), compareAddresses); + + /* Join them all into a single string, removing duplicates. */ + { + size_t i; + for(i = 0; i < addressesIndex; ++i) { + size_t j; + /* Look for this address text appearing previously in the results. */ + for(j = 0; j < i; ++j) { + if(strcmp(addresses[j].text, addresses[i].text) == 0) { + break; + } + } + /* Iff we didn't emit this address already, emit it now. */ + if(j == i) { + /* Add that to outptr (if we can). */ + commajoin(outptr, addresses[i].text); + } + } + } + +done: + ares_free(addresses); + + if (ipaa) + ares_free(ipaa); + + if (!*outptr) { + return 0; + } + + return 1; +} + +/* + * get_DNS_Windows() + * + * Locates DNS info from Windows employing most suitable methods available at + * run-time no matter which Windows version it is. When located, this returns + * a pointer in *outptr to a newly allocated memory area holding a string with + * a space or comma seperated list of DNS IP addresses, null-terminated. + * + * Returns 0 and nullifies *outptr upon inability to return DNSes string. + * + * Returns 1 and sets *outptr when returning a dynamically allocated string. + * + * Implementation supports Windows 95 and newer. + */ +static int get_DNS_Windows(char **outptr) +{ + /* Try using IP helper API GetAdaptersAddresses(). IPv4 + IPv6, also sorts + * DNS servers by interface route metrics to try to use the best DNS server. */ + if (get_DNS_AdaptersAddresses(outptr)) + return 1; + + /* Try using IP helper API GetNetworkParams(). IPv4 only. */ + if (get_DNS_NetworkParams(outptr)) + return 1; + + /* Fall-back to registry information */ + return get_DNS_Registry(outptr); +} + +/* + * get_SuffixList_Windows() + * + * Reads the "DNS Suffix Search List" from registry and writes the list items + * whitespace separated to outptr. If the Search List is empty, the + * "Primary Dns Suffix" is written to outptr. + * + * Returns 0 and nullifies *outptr upon inability to return the suffix list. + * + * Returns 1 and sets *outptr when returning a dynamically allocated string. + * + * Implementation supports Windows Server 2003 and newer + */ +static int get_SuffixList_Windows(char **outptr) +{ + HKEY hKey, hKeyEnum; + char keyName[256]; + DWORD keyNameBuffSize; + DWORD keyIdx = 0; + char *p = NULL; + + *outptr = NULL; + + if (ares__getplatform() != WIN_NT) + return 0; + + /* 1. Global DNS Suffix Search List */ + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, + KEY_READ, &hKey) == ERROR_SUCCESS) + { + get_REG_SZ(hKey, SEARCHLIST_KEY, outptr); + if (get_REG_SZ(hKey, DOMAIN_KEY, &p)) + { + commajoin(outptr, p); + ares_free(p); + p = NULL; + } + RegCloseKey(hKey); + } + + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NT_DNSCLIENT, 0, + KEY_READ, &hKey) == ERROR_SUCCESS) + { + if (get_REG_SZ(hKey, SEARCHLIST_KEY, &p)) + { + commajoin(outptr, p); + ares_free(p); + p = NULL; + } + RegCloseKey(hKey); + } + + /* 2. Connection Specific Search List composed of: + * a. Primary DNS Suffix */ + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_DNSCLIENT, 0, + KEY_READ, &hKey) == ERROR_SUCCESS) + { + if (get_REG_SZ(hKey, PRIMARYDNSSUFFIX_KEY, &p)) + { + commajoin(outptr, p); + ares_free(p); + p = NULL; + } + RegCloseKey(hKey); + } + + /* b. Interface SearchList, Domain, DhcpDomain */ + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY "\\" INTERFACES_KEY, 0, + KEY_READ, &hKey) == ERROR_SUCCESS) + { + for(;;) + { + keyNameBuffSize = sizeof(keyName); + if (RegEnumKeyExA(hKey, keyIdx++, keyName, &keyNameBuffSize, + 0, NULL, NULL, NULL) + != ERROR_SUCCESS) + break; + if (RegOpenKeyExA(hKey, keyName, 0, KEY_QUERY_VALUE, &hKeyEnum) + != ERROR_SUCCESS) + continue; + /* p can be comma separated (SearchList) */ + if (get_REG_SZ(hKeyEnum, SEARCHLIST_KEY, &p)) + { + commajoin(outptr, p); + ares_free(p); + p = NULL; + } + if (get_REG_SZ(hKeyEnum, DOMAIN_KEY, &p)) + { + commajoin(outptr, p); + ares_free(p); + p = NULL; + } + if (get_REG_SZ(hKeyEnum, DHCPDOMAIN_KEY, &p)) + { + commajoin(outptr, p); + ares_free(p); + p = NULL; + } + RegCloseKey(hKeyEnum); + } + RegCloseKey(hKey); + } + + return *outptr != NULL; +} + +#endif + +static int init_by_resolv_conf(ares_channel channel) +{ +#if !defined(ANDROID) && !defined(__ANDROID__) && !defined(WATT32) && \ + !defined(CARES_USE_LIBRESOLV) + char *line = NULL; +#endif + int status = -1, nservers = 0, nsort = 0; + struct server_state *servers = NULL; + struct apattern *sortlist = NULL; + +#ifdef WIN32 + + if (channel->nservers > -1) /* don't override ARES_OPT_SERVER */ + return ARES_SUCCESS; + + if (get_DNS_Windows(&line)) + { + status = config_nameserver(&servers, &nservers, line); + ares_free(line); + } + + if (channel->ndomains == -1 && get_SuffixList_Windows(&line)) + { + status = set_search(channel, line); + ares_free(line); + } + + if (status == ARES_SUCCESS) + status = ARES_EOF; + else + /* Catch the case when all the above checks fail (which happens when there + is no network card or the cable is unplugged) */ + status = ARES_EFILE; +#elif defined(__MVS__) + + struct __res_state *res = 0; + int count4, count6; + __STATEEXTIPV6 *v6; + struct server_state *pserver; + if (0 == res) { + int rc = res_init(); + while (rc == -1 && h_errno == TRY_AGAIN) { + rc = res_init(); + } + if (rc == -1) { + return ARES_ENOMEM; + } + res = __res(); + } + + v6 = res->__res_extIPv6; + count4 = res->nscount; + if (v6) { + count6 = v6->__stat_nscount; + } else { + count6 = 0; + } + + nservers = count4 + count6; + servers = ares_malloc(nservers * sizeof(struct server_state)); + if (!servers) + return ARES_ENOMEM; + + memset(servers, 0, nservers * sizeof(struct server_state)); + + pserver = servers; + for (int i = 0; i < count4; ++i, ++pserver) { + struct sockaddr_in *addr_in = &(res->nsaddr_list[i]); + pserver->addr.addrV4.s_addr = addr_in->sin_addr.s_addr; + pserver->addr.family = AF_INET; + pserver->addr.udp_port = addr_in->sin_port; + pserver->addr.tcp_port = addr_in->sin_port; + } + + for (int j = 0; j < count6; ++j, ++pserver) { + struct sockaddr_in6 *addr_in = &(v6->__stat_nsaddr_list[j]); + memcpy(&(pserver->addr.addr.addr6), &(addr_in->sin6_addr), + sizeof(addr_in->sin6_addr)); + pserver->addr.family = AF_INET6; + pserver->addr.udp_port = addr_in->sin6_port; + pserver->addr.tcp_port = addr_in->sin6_port; + } + + status = ARES_EOF; + +#elif defined(__riscos__) + + /* Under RISC OS, name servers are listed in the + system variable Inet$Resolvers, space separated. */ + + line = getenv("Inet$Resolvers"); + status = ARES_EOF; + if (line) { + char *resolvers = ares_strdup(line), *pos, *space; + + if (!resolvers) + return ARES_ENOMEM; + + pos = resolvers; + do { + space = strchr(pos, ' '); + if (space) + *space = '\0'; + status = config_nameserver(&servers, &nservers, pos); + if (status != ARES_SUCCESS) + break; + pos = space + 1; + } while (space); + + if (status == ARES_SUCCESS) + status = ARES_EOF; + + ares_free(resolvers); + } + +#elif defined(WATT32) + int i; + + sock_init(); + for (i = 0; def_nameservers[i]; i++) + ; + if (i == 0) + return ARES_SUCCESS; /* use localhost DNS server */ + + nservers = i; + servers = ares_malloc(sizeof(struct server_state)); + if (!servers) + return ARES_ENOMEM; + memset(servers, 0, sizeof(struct server_state)); + + for (i = 0; def_nameservers[i]; i++) + { + servers[i].addr.addrV4.s_addr = htonl(def_nameservers[i]); + servers[i].addr.family = AF_INET; + servers[i].addr.udp_port = 0; + servers[i].addr.tcp_port = 0; + } + status = ARES_EOF; + +#elif defined(ANDROID) || defined(__ANDROID__) + unsigned int i; + char **dns_servers; + char *domains; + size_t num_servers; + + /* Use the Android connectivity manager to get a list + * of DNS servers. As of Android 8 (Oreo) net.dns# + * system properties are no longer available. Google claims this + * improves privacy. Apps now need the ACCESS_NETWORK_STATE + * permission and must use the ConnectivityManager which + * is Java only. */ + dns_servers = ares_get_android_server_list(MAX_DNS_PROPERTIES, &num_servers); + if (dns_servers != NULL) + { + for (i = 0; i < num_servers; i++) + { + status = config_nameserver(&servers, &nservers, dns_servers[i]); + if (status != ARES_SUCCESS) + break; + status = ARES_EOF; + } + for (i = 0; i < num_servers; i++) + { + ares_free(dns_servers[i]); + } + ares_free(dns_servers); + } + if (channel->ndomains == -1) + { + domains = ares_get_android_search_domains_list(); + set_search(channel, domains); + ares_free(domains); + } + +# ifdef HAVE___SYSTEM_PROPERTY_GET + /* Old way using the system property still in place as + * a fallback. Older android versions can still use this. + * it's possible for older apps not not have added the new + * permission and we want to try to avoid breaking those. + * + * We'll only run this if we don't have any dns servers + * because this will get the same ones (if it works). */ + if (status != ARES_EOF) { + char propname[PROP_NAME_MAX]; + char propvalue[PROP_VALUE_MAX]=""; + for (i = 1; i <= MAX_DNS_PROPERTIES; i++) { + snprintf(propname, sizeof(propname), "%s%u", DNS_PROP_NAME_PREFIX, i); + if (__system_property_get(propname, propvalue) < 1) { + status = ARES_EOF; + break; + } + + status = config_nameserver(&servers, &nservers, propvalue); + if (status != ARES_SUCCESS) + break; + status = ARES_EOF; + } + } +# endif /* HAVE___SYSTEM_PROPERTY_GET */ +#elif defined(CARES_USE_LIBRESOLV) + struct __res_state res; + memset(&res, 0, sizeof(res)); + int result = res_ninit(&res); + if (result == 0 && (res.options & RES_INIT)) { + status = ARES_EOF; + + if (channel->nservers == -1) { + union res_sockaddr_union addr[MAXNS]; + int nscount = res_getservers(&res, addr, MAXNS); + int i; + for (i = 0; i < nscount; ++i) { + char str[INET6_ADDRSTRLEN]; + int config_status; + sa_family_t family = addr[i].sin.sin_family; + if (family == AF_INET) { + ares_inet_ntop(family, &addr[i].sin.sin_addr, str, sizeof(str)); + } else if (family == AF_INET6) { + ares_inet_ntop(family, &addr[i].sin6.sin6_addr, str, sizeof(str)); + } else { + continue; + } + + config_status = config_nameserver(&servers, &nservers, str); + if (config_status != ARES_SUCCESS) { + status = config_status; + break; + } + } + } + if (channel->ndomains == -1) { + int entries = 0; + while ((entries < MAXDNSRCH) && res.dnsrch[entries]) + entries++; + if(entries) { + channel->domains = ares_malloc(entries * sizeof(char *)); + if (!channel->domains) { + status = ARES_ENOMEM; + } else { + int i; + channel->ndomains = entries; + for (i = 0; i < channel->ndomains; ++i) { + channel->domains[i] = ares_strdup(res.dnsrch[i]); + if (!channel->domains[i]) + status = ARES_ENOMEM; + } + } + } + } + if (channel->ndots == -1) + channel->ndots = res.ndots; + if (channel->tries == -1) + channel->tries = res.retry; + if (channel->rotate == -1) + channel->rotate = res.options & RES_ROTATE; + if (channel->timeout == -1) + channel->timeout = res.retrans * 1000; + + res_ndestroy(&res); + } +#else + { + char *p; + FILE *fp; + size_t linesize; + int error; + int update_domains; + const char *resolvconf_path; + + /* Don't read resolv.conf and friends if we don't have to */ + if (ARES_CONFIG_CHECK(channel)) + return ARES_SUCCESS; + + /* Only update search domains if they're not already specified */ + update_domains = (channel->ndomains == -1); + + /* Support path for resolvconf filename set by ares_init_options */ + if(channel->resolvconf_path) { + resolvconf_path = channel->resolvconf_path; + } else { + resolvconf_path = PATH_RESOLV_CONF; + } + + fp = fopen(resolvconf_path, "r"); + if (fp) { + while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) + { + if ((p = try_config(line, "domain", ';')) && update_domains) + status = config_domain(channel, p); + else if ((p = try_config(line, "lookup", ';')) && !channel->lookups) + status = config_lookup(channel, p, "bind", NULL, "file"); + else if ((p = try_config(line, "search", ';')) && update_domains) + status = set_search(channel, p); + else if ((p = try_config(line, "nameserver", ';')) && + channel->nservers == -1) + status = config_nameserver(&servers, &nservers, p); + else if ((p = try_config(line, "sortlist", ';')) && + channel->nsort == -1) + status = config_sortlist(&sortlist, &nsort, p); + else if ((p = try_config(line, "options", ';'))) + status = set_options(channel, p); + else + status = ARES_SUCCESS; + if (status != ARES_SUCCESS) + break; + } + fclose(fp); + } + else { + error = ERRNO; + switch(error) { + case ENOENT: + case ESRCH: + status = ARES_EOF; + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_RESOLV_CONF)); + status = ARES_EFILE; + } + } + + if ((status == ARES_EOF) && (!channel->lookups)) { + /* Many systems (Solaris, Linux, BSD's) use nsswitch.conf */ + fp = fopen("/etc/nsswitch.conf", "r"); + if (fp) { + while ((status = ares__read_line(fp, &line, &linesize)) == + ARES_SUCCESS) + { + if ((p = try_config(line, "hosts:", '\0')) && !channel->lookups) + (void)config_lookup(channel, p, "dns", "resolve", "files"); + } + fclose(fp); + } + else { + error = ERRNO; + switch(error) { + case ENOENT: + case ESRCH: + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", + "/etc/nsswitch.conf")); + } + + /* ignore error, maybe we will get luck in next if clause */ + status = ARES_EOF; + } + } + + if ((status == ARES_EOF) && (!channel->lookups)) { + /* Linux / GNU libc 2.x and possibly others have host.conf */ + fp = fopen("/etc/host.conf", "r"); + if (fp) { + while ((status = ares__read_line(fp, &line, &linesize)) == + ARES_SUCCESS) + { + if ((p = try_config(line, "order", '\0')) && !channel->lookups) + /* ignore errors */ + (void)config_lookup(channel, p, "bind", NULL, "hosts"); + } + fclose(fp); + } + else { + error = ERRNO; + switch(error) { + case ENOENT: + case ESRCH: + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", + "/etc/host.conf")); + } + + /* ignore error, maybe we will get luck in next if clause */ + status = ARES_EOF; + } + } + + if ((status == ARES_EOF) && (!channel->lookups)) { + /* Tru64 uses /etc/svc.conf */ + fp = fopen("/etc/svc.conf", "r"); + if (fp) { + while ((status = ares__read_line(fp, &line, &linesize)) == + ARES_SUCCESS) + { + if ((p = try_config(line, "hosts=", '\0')) && !channel->lookups) + /* ignore errors */ + (void)config_lookup(channel, p, "bind", NULL, "local"); + } + fclose(fp); + } + else { + error = ERRNO; + switch(error) { + case ENOENT: + case ESRCH: + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/svc.conf")); + } + + /* ignore error, default value will be chosen for `channel->lookups` */ + status = ARES_EOF; + } + } + + if(line) + ares_free(line); + } + +#endif + + /* Handle errors. */ + if (status != ARES_EOF) + { + if (servers != NULL) + ares_free(servers); + if (sortlist != NULL) + ares_free(sortlist); + return status; + } + + /* If we got any name server entries, fill them in. */ + if (servers) + { + channel->servers = servers; + channel->nservers = nservers; + } + + /* If we got any sortlist entries, fill them in. */ + if (sortlist) + { + channel->sortlist = sortlist; + channel->nsort = nsort; + } + + return ARES_SUCCESS; +} + +static int init_by_defaults(ares_channel channel) +{ + char *hostname = NULL; + int rc = ARES_SUCCESS; +#ifdef HAVE_GETHOSTNAME + char *dot; +#endif + + if (channel->flags == -1) + channel->flags = 0; + if (channel->timeout == -1) + channel->timeout = DEFAULT_TIMEOUT; + if (channel->tries == -1) + channel->tries = DEFAULT_TRIES; + if (channel->ndots == -1) + channel->ndots = 1; + if (channel->rotate == -1) + channel->rotate = 0; + if (channel->udp_port == -1) + channel->udp_port = htons(NAMESERVER_PORT); + if (channel->tcp_port == -1) + channel->tcp_port = htons(NAMESERVER_PORT); + + if (channel->ednspsz == -1) + channel->ednspsz = EDNSPACKETSZ; + + if (channel->nservers == -1) { + /* If nobody specified servers, try a local named. */ + channel->servers = ares_malloc(sizeof(struct server_state)); + if (!channel->servers) { + rc = ARES_ENOMEM; + goto error; + } + channel->servers[0].addr.family = AF_INET; + channel->servers[0].addr.addrV4.s_addr = htonl(INADDR_LOOPBACK); + channel->servers[0].addr.udp_port = 0; + channel->servers[0].addr.tcp_port = 0; + channel->nservers = 1; + } + +#if defined(USE_WINSOCK) +#define toolong(x) (x == -1) && (SOCKERRNO == WSAEFAULT) +#elif defined(ENAMETOOLONG) +#define toolong(x) (x == -1) && ((SOCKERRNO == ENAMETOOLONG) || \ + (SOCKERRNO == EINVAL)) +#else +#define toolong(x) (x == -1) && (SOCKERRNO == EINVAL) +#endif + + if (channel->ndomains == -1) { + /* Derive a default domain search list from the kernel hostname, + * or set it to empty if the hostname isn't helpful. + */ +#ifndef HAVE_GETHOSTNAME + channel->ndomains = 0; /* default to none */ +#else + GETHOSTNAME_TYPE_ARG2 lenv = 64; + size_t len = 64; + int res; + channel->ndomains = 0; /* default to none */ + + hostname = ares_malloc(len); + if(!hostname) { + rc = ARES_ENOMEM; + goto error; + } + + do { + res = gethostname(hostname, lenv); + + if(toolong(res)) { + char *p; + len *= 2; + lenv *= 2; + p = ares_realloc(hostname, len); + if(!p) { + rc = ARES_ENOMEM; + goto error; + } + hostname = p; + continue; + } + else if(res) { + /* Lets not treat a gethostname failure as critical, since we + * are ok if gethostname doesn't even exist */ + *hostname = '\0'; + break; + } + + } while (res != 0); + + dot = strchr(hostname, '.'); + if (dot) { + /* a dot was found */ + channel->domains = ares_malloc(sizeof(char *)); + if (!channel->domains) { + rc = ARES_ENOMEM; + goto error; + } + channel->domains[0] = ares_strdup(dot + 1); + if (!channel->domains[0]) { + rc = ARES_ENOMEM; + goto error; + } + channel->ndomains = 1; + } +#endif + } + + if (channel->nsort == -1) { + channel->sortlist = NULL; + channel->nsort = 0; + } + + if (!channel->lookups) { + channel->lookups = ares_strdup("fb"); + if (!channel->lookups) + rc = ARES_ENOMEM; + } + + error: + if(rc) { + if(channel->servers) { + ares_free(channel->servers); + channel->servers = NULL; + } + + if(channel->domains && channel->domains[0]) + ares_free(channel->domains[0]); + if(channel->domains) { + ares_free(channel->domains); + channel->domains = NULL; + } + + if(channel->lookups) { + ares_free(channel->lookups); + channel->lookups = NULL; + } + + if(channel->resolvconf_path) { + ares_free(channel->resolvconf_path); + channel->resolvconf_path = NULL; + } + } + + if(hostname) + ares_free(hostname); + + return rc; +} + +#if !defined(WIN32) && !defined(WATT32) && \ + !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV) +static int config_domain(ares_channel channel, char *str) +{ + char *q; + + /* Set a single search domain. */ + q = str; + while (*q && !ISSPACE(*q)) + q++; + *q = '\0'; + return set_search(channel, str); +} + +#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 910) && \ + defined(__OPTIMIZE__) && defined(__unix__) && defined(__i386__) + /* workaround icc 9.1 optimizer issue */ +# define vqualifier volatile +#else +# define vqualifier +#endif + +static int config_lookup(ares_channel channel, const char *str, + const char *bindch, const char *altbindch, + const char *filech) +{ + char lookups[3], *l; + const char *vqualifier p; + int found; + + if (altbindch == NULL) + altbindch = bindch; + + /* Set the lookup order. Only the first letter of each work + * is relevant, and it has to be "b" for DNS or "f" for the + * host file. Ignore everything else. + */ + l = lookups; + p = str; + found = 0; + while (*p) + { + if ((*p == *bindch || *p == *altbindch || *p == *filech) && l < lookups + 2) { + if (*p == *bindch || *p == *altbindch) *l++ = 'b'; + else *l++ = 'f'; + found = 1; + } + while (*p && !ISSPACE(*p) && (*p != ',')) + p++; + while (*p && (ISSPACE(*p) || (*p == ','))) + p++; + } + if (!found) + return ARES_ENOTINITIALIZED; + *l = '\0'; + channel->lookups = ares_strdup(lookups); + return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM; +} +#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ & !CARES_USE_LIBRESOLV */ + +#ifndef WATT32 +/* Validate that the ip address matches the subnet (network base and network + * mask) specified. Addresses are specified in standard Network Byte Order as + * 16 bytes, and the netmask is 0 to 128 (bits). + */ +static int ares_ipv6_subnet_matches(const unsigned char netbase[16], + unsigned char netmask, + const unsigned char ipaddr[16]) +{ + unsigned char mask[16] = { 0 }; + unsigned char i; + + /* Misuse */ + if (netmask > 128) + return 0; + + /* Quickly set whole bytes */ + memset(mask, 0xFF, netmask / 8); + + /* Set remaining bits */ + if(netmask % 8) { + mask[netmask / 8] = (unsigned char)(0xff << (8 - (netmask % 8))); + } + + for (i=0; i<16; i++) { + if ((netbase[i] & mask[i]) != (ipaddr[i] & mask[i])) + return 0; + } + + return 1; +} + +/* Return true iff the IPv6 ipaddr is blacklisted. */ +static int ares_ipv6_server_blacklisted(const unsigned char ipaddr[16]) +{ + /* A list of blacklisted IPv6 subnets. */ + const struct { + const unsigned char netbase[16]; + unsigned char netmask; + } blacklist[] = { + /* fec0::/10 was deprecated by [RFC3879] in September 2004. Formerly a + * Site-Local scoped address prefix. These are never valid DNS servers, + * but are known to be returned at least sometimes on Windows and Android. + */ + { + { + 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + 10 + } + }; + size_t i; + + /* See if ipaddr matches any of the entries in the blacklist. */ + for (i = 0; i < sizeof(blacklist) / sizeof(blacklist[0]); ++i) { + if (ares_ipv6_subnet_matches( + blacklist[i].netbase, blacklist[i].netmask, ipaddr)) + return 1; + } + return 0; +} + +/* Add the IPv4 or IPv6 nameservers in str (separated by commas) to the + * servers list, updating servers and nservers as required. + * + * This will silently ignore blacklisted IPv6 nameservers as detected by + * ares_ipv6_server_blacklisted(). + * + * Returns an error code on failure, else ARES_SUCCESS. + */ +static int config_nameserver(struct server_state **servers, int *nservers, + char *str) +{ + struct ares_addr host; + struct server_state *newserv; + char *p, *txtaddr; + /* On Windows, there may be more than one nameserver specified in the same + * registry key, so we parse input as a space or comma seperated list. + */ + for (p = str; p;) + { + /* Skip whitespace and commas. */ + while (*p && (ISSPACE(*p) || (*p == ','))) + p++; + if (!*p) + /* No more input, done. */ + break; + + /* Pointer to start of IPv4 or IPv6 address part. */ + txtaddr = p; + + /* Advance past this address. */ + while (*p && !ISSPACE(*p) && (*p != ',')) + p++; + if (*p) + /* Null terminate this address. */ + *p++ = '\0'; + else + /* Reached end of input, done when this address is processed. */ + p = NULL; + + /* Convert textual address to binary format. */ + if (ares_inet_pton(AF_INET, txtaddr, &host.addrV4) == 1) + host.family = AF_INET; + else if (ares_inet_pton(AF_INET6, txtaddr, &host.addrV6) == 1 + /* Silently skip blacklisted IPv6 servers. */ + && !ares_ipv6_server_blacklisted( + (const unsigned char *)&host.addrV6)) + host.family = AF_INET6; + else + continue; + + /* Resize servers state array. */ + newserv = ares_realloc(*servers, (*nservers + 1) * + sizeof(struct server_state)); + if (!newserv) + return ARES_ENOMEM; + + /* Store address data. */ + newserv[*nservers].addr.family = host.family; + newserv[*nservers].addr.udp_port = 0; + newserv[*nservers].addr.tcp_port = 0; + if (host.family == AF_INET) + memcpy(&newserv[*nservers].addr.addrV4, &host.addrV4, + sizeof(host.addrV4)); + else + memcpy(&newserv[*nservers].addr.addrV6, &host.addrV6, + sizeof(host.addrV6)); + + /* Update arguments. */ + *servers = newserv; + *nservers += 1; + } + + return ARES_SUCCESS; +} +#endif /* !WATT32 */ + +static int config_sortlist(struct apattern **sortlist, int *nsort, + const char *str) +{ + struct apattern pat; + const char *q; + + /* Add sortlist entries. */ + while (*str && *str != ';') + { + int bits; + char ipbuf[16], ipbufpfx[32]; + /* Find just the IP */ + q = str; + while (*q && *q != '/' && *q != ';' && !ISSPACE(*q)) + q++; + memcpy(ipbuf, str, q-str); + ipbuf[q-str] = '\0'; + /* Find the prefix */ + if (*q == '/') + { + const char *str2 = q+1; + while (*q && *q != ';' && !ISSPACE(*q)) + q++; + memcpy(ipbufpfx, str, q-str); + ipbufpfx[q-str] = '\0'; + str = str2; + } + else + ipbufpfx[0] = '\0'; + /* Lets see if it is CIDR */ + /* First we'll try IPv6 */ + if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx[0] ? ipbufpfx : ipbuf, + &pat.addrV6, + sizeof(pat.addrV6))) > 0) + { + pat.type = PATTERN_CIDR; + pat.mask.bits = (unsigned short)bits; + pat.family = AF_INET6; + if (!sortlist_alloc(sortlist, nsort, &pat)) { + ares_free(*sortlist); + *sortlist = NULL; + return ARES_ENOMEM; + } + } + else if (ipbufpfx[0] && + (bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addrV4, + sizeof(pat.addrV4))) > 0) + { + pat.type = PATTERN_CIDR; + pat.mask.bits = (unsigned short)bits; + pat.family = AF_INET; + if (!sortlist_alloc(sortlist, nsort, &pat)) { + ares_free(*sortlist); + *sortlist = NULL; + return ARES_ENOMEM; + } + } + /* See if it is just a regular IP */ + else if (ip_addr(ipbuf, q-str, &pat.addrV4) == 0) + { + if (ipbufpfx[0]) + { + memcpy(ipbuf, str, q-str); + ipbuf[q-str] = '\0'; + if (ip_addr(ipbuf, q-str, &pat.mask.addr4) != 0) + natural_mask(&pat); + } + else + natural_mask(&pat); + pat.family = AF_INET; + pat.type = PATTERN_MASK; + if (!sortlist_alloc(sortlist, nsort, &pat)) { + ares_free(*sortlist); + *sortlist = NULL; + return ARES_ENOMEM; + } + } + else + { + while (*q && *q != ';' && !ISSPACE(*q)) + q++; + } + str = q; + while (ISSPACE(*str)) + str++; + } + + return ARES_SUCCESS; +} + +static int set_search(ares_channel channel, const char *str) +{ + size_t cnt; + + if(channel->ndomains != -1) { + /* LCOV_EXCL_START: all callers check ndomains == -1 */ + /* if we already have some domains present, free them first */ + ares_strsplit_free(channel->domains, channel->ndomains); + channel->domains = NULL; + channel->ndomains = -1; + } /* LCOV_EXCL_STOP */ + + channel->domains = ares_strsplit(str, ", ", 1, &cnt); + channel->ndomains = (int)cnt; + if (channel->domains == NULL || channel->ndomains == 0) { + channel->domains = NULL; + channel->ndomains = -1; + } + + return ARES_SUCCESS; +} + +static int set_options(ares_channel channel, const char *str) +{ + const char *p, *q, *val; + + p = str; + while (*p) + { + q = p; + while (*q && !ISSPACE(*q)) + q++; + val = try_option(p, q, "ndots:"); + if (val && channel->ndots == -1) + channel->ndots = aresx_sltosi(strtol(val, NULL, 10)); + val = try_option(p, q, "retrans:"); + if (val && channel->timeout == -1) + channel->timeout = aresx_sltosi(strtol(val, NULL, 10)); + val = try_option(p, q, "retry:"); + if (val && channel->tries == -1) + channel->tries = aresx_sltosi(strtol(val, NULL, 10)); + val = try_option(p, q, "rotate"); + if (val && channel->rotate == -1) + channel->rotate = 1; + p = q; + while (ISSPACE(*p)) + p++; + } + + return ARES_SUCCESS; +} + +static const char *try_option(const char *p, const char *q, const char *opt) +{ + size_t len = strlen(opt); + return ((size_t)(q - p) >= len && !strncmp(p, opt, len)) ? &p[len] : NULL; +} + +#if !defined(WIN32) && !defined(WATT32) && \ + !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV) +static char *try_config(char *s, const char *opt, char scc) +{ + size_t len; + char *p; + char *q; + + if (!s || !opt) + /* no line or no option */ + return NULL; /* LCOV_EXCL_LINE */ + + /* Hash '#' character is always used as primary comment char, additionally + a not-NUL secondary comment char will be considered when specified. */ + + /* trim line comment */ + p = s; + if(scc) + while (*p && (*p != '#') && (*p != scc)) + p++; + else + while (*p && (*p != '#')) + p++; + *p = '\0'; + + /* trim trailing whitespace */ + q = p - 1; + while ((q >= s) && ISSPACE(*q)) + q--; + *++q = '\0'; + + /* skip leading whitespace */ + p = s; + while (*p && ISSPACE(*p)) + p++; + + if (!*p) + /* empty line */ + return NULL; + + if ((len = strlen(opt)) == 0) + /* empty option */ + return NULL; /* LCOV_EXCL_LINE */ + + if (strncmp(p, opt, len) != 0) + /* line and option do not match */ + return NULL; + + /* skip over given option name */ + p += len; + + if (!*p) + /* no option value */ + return NULL; /* LCOV_EXCL_LINE */ + + if ((opt[len-1] != ':') && (opt[len-1] != '=') && !ISSPACE(*p)) + /* whitespace between option name and value is mandatory + for given option names which do not end with ':' or '=' */ + return NULL; + + /* skip over whitespace */ + while (*p && ISSPACE(*p)) + p++; + + if (!*p) + /* no option value */ + return NULL; + + /* return pointer to option value */ + return p; +} +#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ */ + +static int ip_addr(const char *ipbuf, ares_ssize_t len, struct in_addr *addr) +{ + + /* Four octets and three periods yields at most 15 characters. */ + if (len > 15) + return -1; + + if (ares_inet_pton(AF_INET, ipbuf, addr) < 1) + return -1; + + return 0; +} + +static void natural_mask(struct apattern *pat) +{ + struct in_addr addr; + + /* Store a host-byte-order copy of pat in a struct in_addr. Icky, + * but portable. + */ + addr.s_addr = ntohl(pat->addrV4.s_addr); + + /* This is out of date in the CIDR world, but some people might + * still rely on it. + */ + if (IN_CLASSA(addr.s_addr)) + pat->mask.addr4.s_addr = htonl(IN_CLASSA_NET); + else if (IN_CLASSB(addr.s_addr)) + pat->mask.addr4.s_addr = htonl(IN_CLASSB_NET); + else + pat->mask.addr4.s_addr = htonl(IN_CLASSC_NET); +} + +static int sortlist_alloc(struct apattern **sortlist, int *nsort, + struct apattern *pat) +{ + struct apattern *newsort; + newsort = ares_realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern)); + if (!newsort) + return 0; + newsort[*nsort] = *pat; + *sortlist = newsort; + (*nsort)++; + return 1; +} + +/* initialize an rc4 key. If possible a cryptographically secure random key + is generated using a suitable function (for example win32's RtlGenRandom as + described in + http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx + otherwise the code defaults to cross-platform albeit less secure mechanism + using rand +*/ +static void randomize_key(unsigned char* key,int key_data_len) +{ + int randomized = 0; + int counter=0; +#ifdef WIN32 + BOOLEAN res; + if (ares_fpSystemFunction036) + { + res = (*ares_fpSystemFunction036) (key, key_data_len); + if (res) + randomized = 1; + } +#else /* !WIN32 */ +#ifdef CARES_RANDOM_FILE + FILE *f = fopen(CARES_RANDOM_FILE, "rb"); + if(f) { + setvbuf(f, NULL, _IONBF, 0); + counter = aresx_uztosi(fread(key, 1, key_data_len, f)); + fclose(f); + } +#endif +#endif /* WIN32 */ + + if (!randomized) { + for (;counterstate[0]; + for(counter = 0; counter < 256; counter++) + /* unnecessary AND but it keeps some compilers happier */ + state[counter] = (unsigned char)(counter & 0xff); + randomize_key(key->state,key_data_len); + key->x = 0; + key->y = 0; + index1 = 0; + index2 = 0; + for(counter = 0; counter < 256; counter++) + { + index2 = (unsigned char)((key_data_ptr[index1] + state[counter] + + index2) % 256); + ARES_SWAP_BYTE(&state[counter], &state[index2]); + + index1 = (unsigned char)((index1 + 1) % key_data_len); + } + ares_free(key_data_ptr); + return ARES_SUCCESS; +} + +void ares_set_local_ip4(ares_channel channel, unsigned int local_ip) +{ + channel->local_ip4 = local_ip; +} + +/* local_ip6 should be 16 bytes in length */ +void ares_set_local_ip6(ares_channel channel, + const unsigned char* local_ip6) +{ + memcpy(&channel->local_ip6, local_ip6, sizeof(channel->local_ip6)); +} + +/* local_dev_name should be null terminated. */ +void ares_set_local_dev(ares_channel channel, + const char* local_dev_name) +{ + strncpy(channel->local_dev_name, local_dev_name, + sizeof(channel->local_dev_name)); + channel->local_dev_name[sizeof(channel->local_dev_name) - 1] = 0; +} + + +void ares_set_socket_callback(ares_channel channel, + ares_sock_create_callback cb, + void *data) +{ + channel->sock_create_cb = cb; + channel->sock_create_cb_data = data; +} + +void ares_set_socket_configure_callback(ares_channel channel, + ares_sock_config_callback cb, + void *data) +{ + channel->sock_config_cb = cb; + channel->sock_config_cb_data = data; +} + +void ares_set_socket_functions(ares_channel channel, + const struct ares_socket_functions * funcs, + void *data) +{ + channel->sock_funcs = funcs; + channel->sock_func_cb_data = data; +} + +int ares_set_sortlist(ares_channel channel, const char *sortstr) +{ + int nsort = 0; + struct apattern *sortlist = NULL; + int status; + + if (!channel) + return ARES_ENODATA; + + status = config_sortlist(&sortlist, &nsort, sortstr); + if (status == ARES_SUCCESS && sortlist) { + if (channel->sortlist) + ares_free(channel->sortlist); + channel->sortlist = sortlist; + channel->nsort = nsort; + } + return status; +} + +void ares__init_servers_state(ares_channel channel) +{ + struct server_state *server; + int i; + + for (i = 0; i < channel->nservers; i++) + { + server = &channel->servers[i]; + server->udp_socket = ARES_SOCKET_BAD; + server->tcp_socket = ARES_SOCKET_BAD; + server->tcp_connection_generation = ++channel->tcp_connection_generation; + server->tcp_lenbuf_pos = 0; + server->tcp_buffer_pos = 0; + server->tcp_buffer = NULL; + server->tcp_length = 0; + server->qhead = NULL; + server->qtail = NULL; + ares__init_list_head(&server->queries_to_server); + server->channel = channel; + server->is_broken = 0; + } +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_iphlpapi.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_iphlpapi.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_iphlpapi.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_iphlpapi.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,221 @@ +#ifndef HEADER_CARES_IPHLPAPI_H +#define HEADER_CARES_IPHLPAPI_H + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004 - 2011 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#if defined(USE_WINSOCK) + +#ifndef INET_ADDRSTRLEN +#define INET_ADDRSTRLEN 22 +#endif + +#ifndef INET6_ADDRSTRLEN +#define INET6_ADDRSTRLEN 65 +#endif + +/* ---------------------------------- */ +#if !defined(_WS2DEF_) && \ + !defined(__CSADDR_DEFINED__) && \ + !defined(__CSADDR_T_DEFINED) +/* ---------------------------------- */ + +typedef struct _SOCKET_ADDRESS { + LPSOCKADDR lpSockaddr; + INT iSockaddrLength; +} SOCKET_ADDRESS, *PSOCKET_ADDRESS; + +typedef struct _CSADDR_INFO { + SOCKET_ADDRESS LocalAddr; + SOCKET_ADDRESS RemoteAddr; + INT iSocketType; + INT iProtocol; +} CSADDR_INFO, *PCSADDR_INFO; + +/* --------------------------------- */ +#endif /* ! _WS2DEF_ && \ */ +/* ! __CSADDR_DEFINED__ && \ */ +/* ! __CSADDR_T_DEFINED */ +/* --------------------------------- */ + +/* ------------------------------- */ +#if !defined(IP_ADAPTER_DDNS_ENABLED) +/* ------------------------------- */ + +#define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x0001 +#define IP_ADAPTER_ADDRESS_TRANSIENT 0x0002 + +#define IP_ADAPTER_DDNS_ENABLED 0x0001 +#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x0002 +#define IP_ADAPTER_DHCP_ENABLED 0x0004 +#define IP_ADAPTER_RECEIVE_ONLY 0x0008 +#define IP_ADAPTER_NO_MULTICAST 0x0010 +#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x0020 + +#define GAA_FLAG_SKIP_UNICAST 0x0001 +#define GAA_FLAG_SKIP_ANYCAST 0x0002 +#define GAA_FLAG_SKIP_MULTICAST 0x0004 +#define GAA_FLAG_SKIP_DNS_SERVER 0x0008 +#define GAA_FLAG_INCLUDE_PREFIX 0x0010 +#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020 + +typedef enum { + IpPrefixOriginOther = 0, + IpPrefixOriginManual, + IpPrefixOriginWellKnown, + IpPrefixOriginDhcp, + IpPrefixOriginRouterAdvertisement +} IP_PREFIX_ORIGIN; + +typedef enum { + IpSuffixOriginOther = 0, + IpSuffixOriginManual, + IpSuffixOriginWellKnown, + IpSuffixOriginDhcp, + IpSuffixOriginLinkLayerAddress, + IpSuffixOriginRandom +} IP_SUFFIX_ORIGIN; + +typedef enum { + IpDadStateInvalid = 0, + IpDadStateTentative, + IpDadStateDuplicate, + IpDadStateDeprecated, + IpDadStatePreferred +} IP_DAD_STATE; + +typedef enum { + IfOperStatusUp = 1, + IfOperStatusDown, + IfOperStatusTesting, + IfOperStatusUnknown, + IfOperStatusDormant, + IfOperStatusNotPresent, + IfOperStatusLowerLayerDown +} IF_OPER_STATUS; + +typedef enum { + ScopeLevelInterface = 0x0001, + ScopeLevelLink = 0x0002, + ScopeLevelSubnet = 0x0003, + ScopeLevelAdmin = 0x0004, + ScopeLevelSite = 0x0005, + ScopeLevelOrganization = 0x0008, + ScopeLevelGlobal = 0x000E +} SCOPE_LEVEL; + +typedef struct _IP_ADAPTER_UNICAST_ADDRESS { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + } s; + } u; + struct _IP_ADAPTER_UNICAST_ADDRESS *Next; + SOCKET_ADDRESS Address; + IP_PREFIX_ORIGIN PrefixOrigin; + IP_SUFFIX_ORIGIN SuffixOrigin; + IP_DAD_STATE DadState; + ULONG ValidLifetime; + ULONG PreferredLifetime; + ULONG LeaseLifetime; +} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS; + +typedef struct _IP_ADAPTER_ANYCAST_ADDRESS { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + } s; + } u; + struct _IP_ADAPTER_ANYCAST_ADDRESS *Next; + SOCKET_ADDRESS Address; +} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS; + +typedef struct _IP_ADAPTER_MULTICAST_ADDRESS { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + } s; + } u; + struct _IP_ADAPTER_MULTICAST_ADDRESS *Next; + SOCKET_ADDRESS Address; +} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS; + +typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Reserved; + } s; + } u; + struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next; + SOCKET_ADDRESS Address; +} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS; + +typedef struct _IP_ADAPTER_PREFIX { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD Flags; + } s; + } u; + struct _IP_ADAPTER_PREFIX *Next; + SOCKET_ADDRESS Address; + ULONG PrefixLength; +} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX; + +typedef struct _IP_ADAPTER_ADDRESSES { + union { + ULONGLONG Alignment; + struct { + ULONG Length; + DWORD IfIndex; + } s; + } u; + struct _IP_ADAPTER_ADDRESSES *Next; + PCHAR AdapterName; + PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress; + PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress; + PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress; + PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress; + PWCHAR DnsSuffix; + PWCHAR Description; + PWCHAR FriendlyName; + BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH]; + DWORD PhysicalAddressLength; + DWORD Flags; + DWORD Mtu; + DWORD IfType; + IF_OPER_STATUS OperStatus; + DWORD Ipv6IfIndex; + DWORD ZoneIndices[16]; + PIP_ADAPTER_PREFIX FirstPrefix; +} IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES; + +/* -------------------------------- */ +#endif /* ! IP_ADAPTER_DDNS_ENABLED */ +/* -------------------------------- */ + +#endif /* USE_WINSOCK */ + +#endif /* HEADER_CARES_IPHLPAPI_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_ipv6.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_ipv6.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_ipv6.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_ipv6.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,85 @@ + +/* Copyright (C) 2005 by Dominick Meglio + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#ifndef ARES_IPV6_H +#define ARES_IPV6_H + +#ifndef HAVE_PF_INET6 +#define PF_INET6 AF_INET6 +#endif + +#ifndef HAVE_STRUCT_SOCKADDR_IN6 +struct sockaddr_in6 +{ + unsigned short sin6_family; + unsigned short sin6_port; + unsigned long sin6_flowinfo; + struct ares_in6_addr sin6_addr; + unsigned int sin6_scope_id; +}; +#endif + +typedef union +{ + struct sockaddr sa; + struct sockaddr_in sa4; + struct sockaddr_in6 sa6; +} ares_sockaddr; + +#ifndef HAVE_STRUCT_ADDRINFO +struct addrinfo +{ + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ + char *ai_canonname; + struct sockaddr *ai_addr; + struct addrinfo *ai_next; +}; +#endif + +#ifndef NS_IN6ADDRSZ +#ifndef HAVE_STRUCT_IN6_ADDR +/* We cannot have it set to zero, so we pick a fixed value here */ +#define NS_IN6ADDRSZ 16 +#else +#define NS_IN6ADDRSZ sizeof(struct in6_addr) +#endif +#endif + +#ifndef NS_INADDRSZ +#define NS_INADDRSZ sizeof(struct in_addr) +#endif + +#ifndef NS_INT16SZ +#define NS_INT16SZ 2 +#endif + +#ifndef IF_NAMESIZE +#ifdef IFNAMSIZ +#define IF_NAMESIZE IFNAMSIZ +#else +#define IF_NAMESIZE 256 +#endif +#endif + +/* Defined in inet_net_pton.c for no particular reason. */ +extern const struct ares_in6_addr ares_in6addr_any; /* :: */ + + +#endif /* ARES_IPV6_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_library_init.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_library_init.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_library_init.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_library_init.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,200 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004-2009 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_library_init.h" +#include "ares_private.h" + +/* library-private global and unique instance vars */ + +#ifdef USE_WINSOCK +fpGetNetworkParams_t ares_fpGetNetworkParams = ZERO_NULL; +fpSystemFunction036_t ares_fpSystemFunction036 = ZERO_NULL; +fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses = ZERO_NULL; +fpGetBestRoute2_t ares_fpGetBestRoute2 = ZERO_NULL; +#endif + +#if defined(ANDROID) || defined(__ANDROID__) +#include "ares_android.h" +#endif + +/* library-private global vars with source visibility restricted to this file */ + +static unsigned int ares_initialized; +static int ares_init_flags; + +/* library-private global vars with visibility across the whole library */ + +/* Some systems may return either NULL or a valid pointer on malloc(0). c-ares should + * never call malloc(0) so lets return NULL so we're more likely to find an issue if it + * were to occur. */ + +static void *default_malloc(size_t size) { if (size == 0) { return NULL; } return malloc(size); } + +#if defined(WIN32) +/* We need indirections to handle Windows DLL rules. */ +static void *default_realloc(void *p, size_t size) { return realloc(p, size); } +static void default_free(void *p) { free(p); } +#else +# define default_realloc realloc +# define default_free free +#endif +void *(*ares_malloc)(size_t size) = default_malloc; +void *(*ares_realloc)(void *ptr, size_t size) = default_realloc; +void (*ares_free)(void *ptr) = default_free; + +#ifdef USE_WINSOCK +static HMODULE hnd_iphlpapi; +static HMODULE hnd_advapi32; +#endif + + +static int ares_win32_init(void) +{ +#ifdef USE_WINSOCK + + hnd_iphlpapi = 0; + hnd_iphlpapi = LoadLibraryW(L"iphlpapi.dll"); + if (!hnd_iphlpapi) + return ARES_ELOADIPHLPAPI; + + ares_fpGetNetworkParams = (fpGetNetworkParams_t) + GetProcAddress(hnd_iphlpapi, "GetNetworkParams"); + if (!ares_fpGetNetworkParams) + { + FreeLibrary(hnd_iphlpapi); + return ARES_EADDRGETNETWORKPARAMS; + } + + ares_fpGetAdaptersAddresses = (fpGetAdaptersAddresses_t) + GetProcAddress(hnd_iphlpapi, "GetAdaptersAddresses"); + if (!ares_fpGetAdaptersAddresses) + { + /* This can happen on clients before WinXP, I don't + think it should be an error, unless we don't want to + support Windows 2000 anymore */ + } + + ares_fpGetBestRoute2 = (fpGetBestRoute2_t) + GetProcAddress(hnd_iphlpapi, "GetBestRoute2"); + if (!ares_fpGetBestRoute2) + { + /* This can happen on clients before Vista, I don't + think it should be an error, unless we don't want to + support Windows XP anymore */ + } + + /* + * When advapi32.dll is unavailable or advapi32.dll has no SystemFunction036, + * also known as RtlGenRandom, which is the case for Windows versions prior + * to WinXP then c-ares uses portable rand() function. Then don't error here. + */ + + hnd_advapi32 = 0; + hnd_advapi32 = LoadLibraryW(L"advapi32.dll"); + if (hnd_advapi32) + { + ares_fpSystemFunction036 = (fpSystemFunction036_t) + GetProcAddress(hnd_advapi32, "SystemFunction036"); + } + +#endif + return ARES_SUCCESS; +} + + +static void ares_win32_cleanup(void) +{ +#ifdef USE_WINSOCK + if (hnd_advapi32) + FreeLibrary(hnd_advapi32); + if (hnd_iphlpapi) + FreeLibrary(hnd_iphlpapi); +#endif +} + + +int ares_library_init(int flags) +{ + int res; + + if (ares_initialized) + { + ares_initialized++; + return ARES_SUCCESS; + } + ares_initialized++; + + if (flags & ARES_LIB_INIT_WIN32) + { + res = ares_win32_init(); + if (res != ARES_SUCCESS) + return res; /* LCOV_EXCL_LINE: can't test Win32 init failure */ + } + + ares_init_flags = flags; + + return ARES_SUCCESS; +} + +int ares_library_init_mem(int flags, + void *(*amalloc)(size_t size), + void (*afree)(void *ptr), + void *(*arealloc)(void *ptr, size_t size)) +{ + if (amalloc) + ares_malloc = amalloc; + if (arealloc) + ares_realloc = arealloc; + if (afree) + ares_free = afree; + return ares_library_init(flags); +} + + +void ares_library_cleanup(void) +{ + if (!ares_initialized) + return; + ares_initialized--; + if (ares_initialized) + return; + + if (ares_init_flags & ARES_LIB_INIT_WIN32) + ares_win32_cleanup(); + +#if defined(ANDROID) || defined(__ANDROID__) + ares_library_cleanup_android(); +#endif + + ares_init_flags = ARES_LIB_INIT_NONE; + ares_malloc = malloc; + ares_realloc = realloc; + ares_free = free; +} + + +int ares_library_initialized(void) +{ +#ifdef USE_WINSOCK + if (!ares_initialized) + return ARES_ENOTINITIALIZED; +#endif + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_library_init.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_library_init.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_library_init.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_library_init.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,43 @@ +#ifndef HEADER_CARES_LIBRARY_INIT_H +#define HEADER_CARES_LIBRARY_INIT_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004-2011 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef USE_WINSOCK + +#include +#include "ares_iphlpapi.h" + +typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*); +typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG); +typedef ULONG (WINAPI *fpGetAdaptersAddresses_t) ( ULONG, ULONG, void*, IP_ADAPTER_ADDRESSES*, ULONG* ); +typedef NETIO_STATUS (WINAPI *fpGetBestRoute2_t) ( NET_LUID *, NET_IFINDEX, const SOCKADDR_INET *, const SOCKADDR_INET *, ULONG, PMIB_IPFORWARD_ROW2, SOCKADDR_INET * ); +/* Forward-declaration of variables defined in ares_library_init.c */ +/* that are global and unique instances for whole c-ares library. */ + +extern fpGetNetworkParams_t ares_fpGetNetworkParams; +extern fpSystemFunction036_t ares_fpSystemFunction036; +extern fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses; +extern fpGetBestRoute2_t ares_fpGetBestRoute2; + +#endif /* USE_WINSOCK */ + +#endif /* HEADER_CARES_LIBRARY_INIT_H */ + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_llist.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_llist.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_llist.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_llist.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,63 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_private.h" + +/* Routines for managing doubly-linked circular linked lists with a + * dummy head. + */ + +/* Initialize a new head node */ +void ares__init_list_head(struct list_node* head) { + head->prev = head; + head->next = head; + head->data = NULL; +} + +/* Initialize a list node */ +void ares__init_list_node(struct list_node* node, void* d) { + node->prev = NULL; + node->next = NULL; + node->data = d; +} + +/* Returns true iff the given list is empty */ +int ares__is_list_empty(struct list_node* head) { + return ((head->next == head) && (head->prev == head)); +} + +/* Inserts new_node before old_node */ +void ares__insert_in_list(struct list_node* new_node, + struct list_node* old_node) { + new_node->next = old_node; + new_node->prev = old_node->prev; + old_node->prev->next = new_node; + old_node->prev = new_node; +} + +/* Removes the node from the list it's in, if any */ +void ares__remove_from_list(struct list_node* node) { + if (node->next != NULL) { + node->prev->next = node->next; + node->next->prev = node->prev; + node->prev = NULL; + node->next = NULL; + } +} + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_llist.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_llist.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_llist.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_llist.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,39 @@ +#ifndef __ARES_LLIST_H +#define __ARES_LLIST_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +/* Node definition for circular, doubly-linked list */ +struct list_node { + struct list_node *prev; + struct list_node *next; + void* data; +}; + +void ares__init_list_head(struct list_node* head); + +void ares__init_list_node(struct list_node* node, void* d); + +int ares__is_list_empty(struct list_node* head); + +void ares__insert_in_list(struct list_node* new_node, + struct list_node* old_node); + +void ares__remove_from_list(struct list_node* node); + +#endif /* __ARES_LLIST_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_mkquery.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_mkquery.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_mkquery.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_mkquery.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,24 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include "ares.h" + +int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id, + int rd, unsigned char **buf, int *buflen) +{ + return ares_create_query(name, dnsclass, type, id, rd, buf, buflen, 0); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_nowarn.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_nowarn.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_nowarn.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_nowarn.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,260 @@ + +/* Copyright (C) 2010-2013 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +#include "ares_setup.h" + +#ifdef HAVE_ASSERT_H +# include +#endif + +#ifdef HAVE_LIMITS_H +#include +#endif + +#if defined(__INTEL_COMPILER) && defined(__unix__) + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#endif /* __INTEL_COMPILER && __unix__ */ + +#define BUILDING_ARES_NOWARN_C 1 + +#include "ares_nowarn.h" + +#ifndef HAVE_LIMITS_H +/* systems without we guess have 16 bit shorts, 32bit ints and + 32bit longs */ +# define CARES_MASK_SSHORT 0x7FFF +# define CARES_MASK_USHORT 0xFFFF +# define CARES_MASK_SINT 0x7FFFFFFF +# define CARES_MASK_UINT 0xFFFFFFFF +# define CARES_MASK_SLONG 0x7FFFFFFFL +# define CARES_MASK_ULONG 0xFFFFFFFFUL +#else +# define CARES_MASK_SSHORT SHRT_MAX +# define CARES_MASK_USHORT USHRT_MAX +# define CARES_MASK_SINT INT_MAX +# define CARES_MASK_UINT UINT_MAX +# define CARES_MASK_SLONG LONG_MAX +# define CARES_MASK_ULONG ULONG_MAX +#endif + +/* +** unsigned size_t to signed long +*/ + +long aresx_uztosl(size_t uznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + return (long)(uznum & (size_t) CARES_MASK_SLONG); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** unsigned size_t to signed int +*/ + +int aresx_uztosi(size_t uznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + return (int)(uznum & (size_t) CARES_MASK_SINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** unsigned size_t to signed short +*/ + +short aresx_uztoss(size_t uznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + return (short)(uznum & (size_t) CARES_MASK_SSHORT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** signed int to signed short +*/ + +short aresx_sitoss(int sinum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + DEBUGASSERT(sinum >= 0); + return (short)(sinum & (int) CARES_MASK_SSHORT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** signed long to signed int +*/ + +int aresx_sltosi(long slnum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + DEBUGASSERT(slnum >= 0); + return (int)(slnum & (long) CARES_MASK_SINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** signed ares_ssize_t to signed int +*/ + +int aresx_sztosi(ares_ssize_t sznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + DEBUGASSERT(sznum >= 0); + return (int)(sznum & (ares_ssize_t) CARES_MASK_SINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** signed ares_ssize_t to unsigned int +*/ + +unsigned int aresx_sztoui(ares_ssize_t sznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + DEBUGASSERT(sznum >= 0); + return (unsigned int)(sznum & (ares_ssize_t) CARES_MASK_UINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +/* +** signed int to unsigned short +*/ + +unsigned short aresx_sitous(int sinum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + DEBUGASSERT(sinum >= 0); + return (unsigned short)(sinum & (int) CARES_MASK_USHORT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} + +#if defined(__INTEL_COMPILER) && defined(__unix__) + +int aresx_FD_ISSET(int fd, fd_set *fdset) +{ + #pragma warning(push) + #pragma warning(disable:1469) /* clobber ignored */ + return FD_ISSET(fd, fdset); + #pragma warning(pop) +} + +void aresx_FD_SET(int fd, fd_set *fdset) +{ + #pragma warning(push) + #pragma warning(disable:1469) /* clobber ignored */ + FD_SET(fd, fdset); + #pragma warning(pop) +} + +void aresx_FD_ZERO(fd_set *fdset) +{ + #pragma warning(push) + #pragma warning(disable:593) /* variable was set but never used */ + FD_ZERO(fdset); + #pragma warning(pop) +} + +unsigned short aresx_htons(unsigned short usnum) +{ +#if (__INTEL_COMPILER == 910) && defined(__i386__) + return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); +#else + #pragma warning(push) + #pragma warning(disable:810) /* conversion may lose significant bits */ + return htons(usnum); + #pragma warning(pop) +#endif +} + +unsigned short aresx_ntohs(unsigned short usnum) +{ +#if (__INTEL_COMPILER == 910) && defined(__i386__) + return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF)); +#else + #pragma warning(push) + #pragma warning(disable:810) /* conversion may lose significant bits */ + return ntohs(usnum); + #pragma warning(pop) +#endif +} + +#endif /* __INTEL_COMPILER && __unix__ */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_nowarn.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_nowarn.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_nowarn.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_nowarn.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,61 @@ +#ifndef HEADER_CARES_NOWARN_H +#define HEADER_CARES_NOWARN_H + + +/* Copyright (C) 2010-2012 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +long aresx_uztosl(size_t uznum); +int aresx_uztosi(size_t uznum); +short aresx_uztoss(size_t uznum); + +short aresx_sitoss(int sinum); + +int aresx_sltosi(long slnum); + +int aresx_sztosi(ares_ssize_t sznum); + +unsigned int aresx_sztoui(ares_ssize_t sznum); + +unsigned short aresx_sitous(int sinum); + +#if defined(__INTEL_COMPILER) && defined(__unix__) + +int aresx_FD_ISSET(int fd, fd_set *fdset); + +void aresx_FD_SET(int fd, fd_set *fdset); + +void aresx_FD_ZERO(fd_set *fdset); + +unsigned short aresx_htons(unsigned short usnum); + +unsigned short aresx_ntohs(unsigned short usnum); + +#ifndef BUILDING_ARES_NOWARN_C +# undef FD_ISSET +# define FD_ISSET(a,b) aresx_FD_ISSET((a),(b)) +# undef FD_SET +# define FD_SET(a,b) aresx_FD_SET((a),(b)) +# undef FD_ZERO +# define FD_ZERO(a) aresx_FD_ZERO((a)) +# undef htons +# define htons(a) aresx_htons((a)) +# undef ntohs +# define ntohs(a) aresx_ntohs((a)) +#endif + +#endif /* __INTEL_COMPILER && __unix__ */ + +#endif /* HEADER_CARES_NOWARN_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_options.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_options.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_options.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_options.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,406 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2008-2013 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +#include "ares_setup.h" + +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares.h" +#include "ares_data.h" +#include "ares_inet_net_pton.h" +#include "ares_private.h" + + +int ares_get_servers(ares_channel channel, + struct ares_addr_node **servers) +{ + struct ares_addr_node *srvr_head = NULL; + struct ares_addr_node *srvr_last = NULL; + struct ares_addr_node *srvr_curr; + int status = ARES_SUCCESS; + int i; + + if (!channel) + return ARES_ENODATA; + + for (i = 0; i < channel->nservers; i++) + { + /* Allocate storage for this server node appending it to the list */ + srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE); + if (!srvr_curr) + { + status = ARES_ENOMEM; + break; + } + if (srvr_last) + { + srvr_last->next = srvr_curr; + } + else + { + srvr_head = srvr_curr; + } + srvr_last = srvr_curr; + + /* Fill this server node data */ + srvr_curr->family = channel->servers[i].addr.family; + if (srvr_curr->family == AF_INET) + memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4, + sizeof(srvr_curr->addrV4)); + else + memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6, + sizeof(srvr_curr->addrV6)); + } + + if (status != ARES_SUCCESS) + { + if (srvr_head) + { + ares_free_data(srvr_head); + srvr_head = NULL; + } + } + + *servers = srvr_head; + + return status; +} + +int ares_get_servers_ports(ares_channel channel, + struct ares_addr_port_node **servers) +{ + struct ares_addr_port_node *srvr_head = NULL; + struct ares_addr_port_node *srvr_last = NULL; + struct ares_addr_port_node *srvr_curr; + int status = ARES_SUCCESS; + int i; + + if (!channel) + return ARES_ENODATA; + + for (i = 0; i < channel->nservers; i++) + { + /* Allocate storage for this server node appending it to the list */ + srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_PORT_NODE); + if (!srvr_curr) + { + status = ARES_ENOMEM; + break; + } + if (srvr_last) + { + srvr_last->next = srvr_curr; + } + else + { + srvr_head = srvr_curr; + } + srvr_last = srvr_curr; + + /* Fill this server node data */ + srvr_curr->family = channel->servers[i].addr.family; + srvr_curr->udp_port = ntohs((unsigned short)channel->servers[i].addr.udp_port); + srvr_curr->tcp_port = ntohs((unsigned short)channel->servers[i].addr.tcp_port); + if (srvr_curr->family == AF_INET) + memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4, + sizeof(srvr_curr->addrV4)); + else + memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6, + sizeof(srvr_curr->addrV6)); + } + + if (status != ARES_SUCCESS) + { + if (srvr_head) + { + ares_free_data(srvr_head); + srvr_head = NULL; + } + } + + *servers = srvr_head; + + return status; +} + +int ares_set_servers(ares_channel channel, + struct ares_addr_node *servers) +{ + struct ares_addr_node *srvr; + int num_srvrs = 0; + int i; + + if (ares_library_initialized() != ARES_SUCCESS) + return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */ + + if (!channel) + return ARES_ENODATA; + + if (!ares__is_list_empty(&channel->all_queries)) + return ARES_ENOTIMP; + + ares__destroy_servers_state(channel); + + for (srvr = servers; srvr; srvr = srvr->next) + { + num_srvrs++; + } + + if (num_srvrs > 0) + { + /* Allocate storage for servers state */ + channel->servers = ares_malloc(num_srvrs * sizeof(struct server_state)); + if (!channel->servers) + { + return ARES_ENOMEM; + } + channel->nservers = num_srvrs; + /* Fill servers state address data */ + for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next) + { + channel->servers[i].addr.family = srvr->family; + channel->servers[i].addr.udp_port = 0; + channel->servers[i].addr.tcp_port = 0; + if (srvr->family == AF_INET) + memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4, + sizeof(srvr->addrV4)); + else + memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6, + sizeof(srvr->addrV6)); + } + /* Initialize servers state remaining data */ + ares__init_servers_state(channel); + } + + return ARES_SUCCESS; +} + +int ares_set_servers_ports(ares_channel channel, + struct ares_addr_port_node *servers) +{ + struct ares_addr_port_node *srvr; + int num_srvrs = 0; + int i; + + if (ares_library_initialized() != ARES_SUCCESS) + return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */ + + if (!channel) + return ARES_ENODATA; + + if (!ares__is_list_empty(&channel->all_queries)) + return ARES_ENOTIMP; + + ares__destroy_servers_state(channel); + + for (srvr = servers; srvr; srvr = srvr->next) + { + num_srvrs++; + } + + if (num_srvrs > 0) + { + /* Allocate storage for servers state */ + channel->servers = ares_malloc(num_srvrs * sizeof(struct server_state)); + if (!channel->servers) + { + return ARES_ENOMEM; + } + channel->nservers = num_srvrs; + /* Fill servers state address data */ + for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next) + { + channel->servers[i].addr.family = srvr->family; + channel->servers[i].addr.udp_port = htons((unsigned short)srvr->udp_port); + channel->servers[i].addr.tcp_port = htons((unsigned short)srvr->tcp_port); + if (srvr->family == AF_INET) + memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4, + sizeof(srvr->addrV4)); + else + memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6, + sizeof(srvr->addrV6)); + } + /* Initialize servers state remaining data */ + ares__init_servers_state(channel); + } + + return ARES_SUCCESS; +} + +/* Incomming string format: host[:port][,host[:port]]... */ +/* IPv6 addresses with ports require square brackets [fe80::1%lo0]:53 */ +static int set_servers_csv(ares_channel channel, + const char* _csv, int use_port) +{ + size_t i; + char* csv = NULL; + char* ptr; + char* start_host; + int cc = 0; + int rv = ARES_SUCCESS; + struct ares_addr_port_node *servers = NULL; + struct ares_addr_port_node *last = NULL; + + if (ares_library_initialized() != ARES_SUCCESS) + return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */ + + if (!channel) + return ARES_ENODATA; + + i = strlen(_csv); + if (i == 0) + return ARES_SUCCESS; /* blank all servers */ + + csv = ares_malloc(i + 2); + if (!csv) + return ARES_ENOMEM; + + strcpy(csv, _csv); + if (csv[i-1] != ',') { /* make parsing easier by ensuring ending ',' */ + csv[i] = ','; + csv[i+1] = 0; + } + + start_host = csv; + for (ptr = csv; *ptr; ptr++) { + if (*ptr == ':') { + /* count colons to determine if we have an IPv6 number or IPv4 with + port */ + cc++; + } + else if (*ptr == '[') { + /* move start_host if an open square bracket is found wrapping an IPv6 + address */ + start_host = ptr + 1; + } + else if (*ptr == ',') { + char* pp = ptr - 1; + char* p = ptr; + int port = 0; + struct in_addr in4; + struct ares_in6_addr in6; + struct ares_addr_port_node *s = NULL; + + *ptr = 0; /* null terminate host:port string */ + /* Got an entry..see if the port was specified. */ + if (cc > 0) { + while (pp > start_host) { + /* a single close square bracket followed by a colon, ']:' indicates + an IPv6 address with port */ + if ((*pp == ']') && (*p == ':')) + break; /* found port */ + /* a single colon, ':' indicates an IPv4 address with port */ + if ((*pp == ':') && (cc == 1)) + break; /* found port */ + if (!(ISDIGIT(*pp) || (*pp == ':'))) { + /* Found end of digits before we found :, so wasn't a port */ + /* must allow ':' for IPv6 case of ']:' indicates we found a port */ + pp = p = ptr; + break; + } + pp--; + p--; + } + if ((pp != start_host) && ((pp + 1) < ptr)) { + /* Found it. Parse over the port number */ + /* when an IPv6 address is wrapped with square brackets the port + starts at pp + 2 */ + if (*pp == ']') + p++; /* move p before ':' */ + /* p will point to the start of the port */ + port = (int)strtol(p, NULL, 10); + *pp = 0; /* null terminate host */ + } + } + /* resolve host, try ipv4 first, rslt is in network byte order */ + rv = ares_inet_pton(AF_INET, start_host, &in4); + if (!rv) { + /* Ok, try IPv6 then */ + rv = ares_inet_pton(AF_INET6, start_host, &in6); + if (!rv) { + rv = ARES_EBADSTR; + goto out; + } + /* was ipv6, add new server */ + s = ares_malloc(sizeof(*s)); + if (!s) { + rv = ARES_ENOMEM; + goto out; + } + s->family = AF_INET6; + memcpy(&s->addr, &in6, sizeof(struct ares_in6_addr)); + } + else { + /* was ipv4, add new server */ + s = ares_malloc(sizeof(*s)); + if (!s) { + rv = ARES_ENOMEM; + goto out; + } + s->family = AF_INET; + memcpy(&s->addr, &in4, sizeof(struct in_addr)); + } + if (s) { + s->udp_port = use_port ? port: 0; + s->tcp_port = s->udp_port; + s->next = NULL; + if (last) { + last->next = s; + /* need to move last to maintain the linked list */ + last = last->next; + } + else { + servers = s; + last = s; + } + } + + /* Set up for next one */ + start_host = ptr + 1; + cc = 0; + } + } + + rv = ares_set_servers_ports(channel, servers); + + out: + if (csv) + ares_free(csv); + while (servers) { + struct ares_addr_port_node *s = servers; + servers = servers->next; + ares_free(s); + } + + return rv; +} + +int ares_set_servers_csv(ares_channel channel, + const char* _csv) +{ + return set_servers_csv(channel, _csv, FALSE); +} + +int ares_set_servers_ports_csv(ares_channel channel, + const char* _csv) +{ + return set_servers_csv(channel, _csv, TRUE); +} + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_aaaa_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_aaaa_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_aaaa_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_aaaa_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,92 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright 2005 Dominick Meglio + * Copyright (C) 2019 by Andrew Selivanov + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#ifdef HAVE_LIMITS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_inet_net_pton.h" +#include "ares_private.h" + +int ares_parse_aaaa_reply(const unsigned char *abuf, int alen, + struct hostent **host, struct ares_addr6ttl *addrttls, + int *naddrttls) +{ + struct ares_addrinfo ai; + char *question_hostname = NULL; + int status; + int req_naddrttls = 0; + + if (naddrttls) + { + req_naddrttls = *naddrttls; + *naddrttls = 0; + } + + memset(&ai, 0, sizeof(ai)); + + status = ares__parse_into_addrinfo(abuf, alen, 0, 0, &ai); + if (status != ARES_SUCCESS && status != ARES_ENODATA) + { + goto fail; + } + + if (host != NULL) + { + status = ares__addrinfo2hostent(&ai, AF_INET6, host); + if (status != ARES_SUCCESS && status != ARES_ENODATA) + { + goto fail; + } + } + + if (addrttls != NULL && req_naddrttls) + { + ares__addrinfo2addrttl(&ai, AF_INET6, req_naddrttls, NULL, + addrttls, naddrttls); + } + +fail: + ares__freeaddrinfo_cnames(ai.cnames); + ares__freeaddrinfo_nodes(ai.nodes); + ares_free(question_hostname); + ares_free(ai.name); + + return status; +} + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_a_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_a_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_a_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_a_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,90 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2019 by Andrew Selivanov + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#ifdef HAVE_LIMITS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +int ares_parse_a_reply(const unsigned char *abuf, int alen, + struct hostent **host, struct ares_addrttl *addrttls, + int *naddrttls) +{ + struct ares_addrinfo ai; + char *question_hostname = NULL; + int status; + int req_naddrttls = 0; + + if (naddrttls) + { + req_naddrttls = *naddrttls; + *naddrttls = 0; + } + + memset(&ai, 0, sizeof(ai)); + + status = ares__parse_into_addrinfo(abuf, alen, 0, 0, &ai); + if (status != ARES_SUCCESS && status != ARES_ENODATA) + { + goto fail; + } + + if (host != NULL) + { + status = ares__addrinfo2hostent(&ai, AF_INET, host); + if (status != ARES_SUCCESS && status != ARES_ENODATA) + { + goto fail; + } + } + + if (addrttls != NULL && req_naddrttls) + { + ares__addrinfo2addrttl(&ai, AF_INET, req_naddrttls, addrttls, + NULL, naddrttls); + } + + +fail: + ares__freeaddrinfo_cnames(ai.cnames); + ares__freeaddrinfo_nodes(ai.nodes); + ares_free(ai.name); + ares_free(question_hostname); + + return status; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_caa_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_caa_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_caa_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_caa_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,199 @@ + +/* Copyright 2020 by + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +int +ares_parse_caa_reply (const unsigned char *abuf, int alen, + struct ares_caa_reply **caa_out) +{ + unsigned int qdcount, ancount, i; + const unsigned char *aptr; + const unsigned char *strptr; + int status, rr_type, rr_class, rr_len; + long len; + char *hostname = NULL, *rr_name = NULL; + struct ares_caa_reply *caa_head = NULL; + struct ares_caa_reply *caa_last = NULL; + struct ares_caa_reply *caa_curr; + + /* Set *caa_out to NULL for all failure cases. */ + *caa_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_ENODATA; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares_expand_name (aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + + if (aptr + len + QFIXEDSZ > abuf + alen) + { + ares_free (hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + + /* Check if we are really looking at a CAA record */ + if ((rr_class == C_IN || rr_class == C_CHAOS) && rr_type == T_CAA) + { + strptr = aptr; + + /* Allocate storage for this CAA answer appending it to the list */ + caa_curr = ares_malloc_data(ARES_DATATYPE_CAA_REPLY); + if (!caa_curr) + { + status = ARES_ENOMEM; + break; + } + if (caa_last) + { + caa_last->next = caa_curr; + } + else + { + caa_head = caa_curr; + } + caa_last = caa_curr; + if (rr_len < 2) + { + status = ARES_EBADRESP; + break; + } + caa_curr->critical = (int)*strptr++; + caa_curr->plength = (int)*strptr++; + if (caa_curr->plength <= 0 || (int)caa_curr->plength >= rr_len - 2) + { + status = ARES_EBADRESP; + break; + } + caa_curr->property = ares_malloc (caa_curr->plength + 1/* Including null byte */); + if (caa_curr->property == NULL) + { + status = ARES_ENOMEM; + break; + } + memcpy ((char *) caa_curr->property, strptr, caa_curr->plength); + /* Make sure we NULL-terminate */ + caa_curr->property[caa_curr->plength] = 0; + strptr += caa_curr->plength; + + caa_curr->length = rr_len - caa_curr->plength - 2; + if (caa_curr->length <= 0) + { + status = ARES_EBADRESP; + break; + } + caa_curr->value = ares_malloc (caa_curr->length + 1/* Including null byte */); + if (caa_curr->value == NULL) + { + status = ARES_ENOMEM; + break; + } + memcpy ((char *) caa_curr->value, strptr, caa_curr->length); + /* Make sure we NULL-terminate */ + caa_curr->value[caa_curr->length] = 0; + } + + /* Propagate any failures */ + if (status != ARES_SUCCESS) + { + break; + } + + /* Don't lose memory in the next iteration */ + ares_free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (hostname) + ares_free (hostname); + if (rr_name) + ares_free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (caa_head) + ares_free_data (caa_head); + return status; + } + + /* everything looks fine, return the data */ + *caa_out = caa_head; + + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__parse_into_addrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__parse_into_addrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__parse_into_addrinfo.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__parse_into_addrinfo.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,229 @@ +/* Copyright (C) 2019 by Andrew Selivanov + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#ifdef HAVE_LIMITS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +int ares__parse_into_addrinfo(const unsigned char *abuf, + int alen, int cname_only_is_enodata, + unsigned short port, + struct ares_addrinfo *ai) +{ + unsigned int qdcount, ancount; + int status, i, rr_type, rr_class, rr_len, rr_ttl; + int got_a = 0, got_aaaa = 0, got_cname = 0; + long len; + const unsigned char *aptr; + char *question_hostname = NULL; + char *hostname, *rr_name = NULL, *rr_data; + struct ares_addrinfo_cname *cname, *cnames = NULL; + struct ares_addrinfo_node *nodes = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + if (qdcount != 1) + return ARES_EBADRESP; + + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares__expand_name_for_response(aptr, abuf, alen, &question_hostname, &len, 0); + if (status != ARES_SUCCESS) + return status; + if (aptr + len + QFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + goto failed_stat; + } + + hostname = question_hostname; + + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < (int)ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len, 0); + if (status != ARES_SUCCESS) + { + rr_name = NULL; + goto failed_stat; + } + + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + goto failed_stat; + } + rr_type = DNS_RR_TYPE(aptr); + rr_class = DNS_RR_CLASS(aptr); + rr_len = DNS_RR_LEN(aptr); + rr_ttl = DNS_RR_TTL(aptr); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + status = ARES_EBADRESP; + goto failed_stat; + } + + if (rr_class == C_IN && rr_type == T_A + && rr_len == sizeof(struct in_addr) + && strcasecmp(rr_name, hostname) == 0) + { + got_a = 1; + if (aptr + sizeof(struct in_addr) > abuf + alen) + { /* LCOV_EXCL_START: already checked above */ + status = ARES_EBADRESP; + goto failed_stat; + } /* LCOV_EXCL_STOP */ + + status = ares_append_ai_node(AF_INET, port, rr_ttl, aptr, &nodes); + if (status != ARES_SUCCESS) + goto failed_stat; + } + else if (rr_class == C_IN && rr_type == T_AAAA + && rr_len == sizeof(struct ares_in6_addr) + && strcasecmp(rr_name, hostname) == 0) + { + got_aaaa = 1; + if (aptr + sizeof(struct ares_in6_addr) > abuf + alen) + { /* LCOV_EXCL_START: already checked above */ + status = ARES_EBADRESP; + goto failed_stat; + } /* LCOV_EXCL_STOP */ + + status = ares_append_ai_node(AF_INET6, port, rr_ttl, aptr, &nodes); + if (status != ARES_SUCCESS) + goto failed_stat; + } + + if (rr_class == C_IN && rr_type == T_CNAME) + { + got_cname = 1; + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, + &len, 1); + if (status != ARES_SUCCESS) + { + goto failed_stat; + } + + /* Decode the RR data and replace the hostname with it. */ + /* SA: Seems wrong as it introduses order dependency. */ + hostname = rr_data; + + cname = ares__append_addrinfo_cname(&cnames); + if (!cname) + { + status = ARES_ENOMEM; + ares_free(rr_data); + goto failed_stat; + } + cname->ttl = rr_ttl; + cname->alias = rr_name; + cname->name = rr_data; + rr_name = NULL; + } + else + { + /* rr_name is only saved for cname */ + ares_free(rr_name); + rr_name = NULL; + } + + + aptr += rr_len; + if (aptr > abuf + alen) + { /* LCOV_EXCL_START: already checked above */ + status = ARES_EBADRESP; + goto failed_stat; + } /* LCOV_EXCL_STOP */ + } + + if (status == ARES_SUCCESS) + { + if (!got_a && !got_aaaa) + { + if (!got_cname || (got_cname && cname_only_is_enodata)) + { + status = ARES_ENODATA; + goto failed_stat; + } + } + + /* save the question hostname as ai->name */ + if (ai->name == NULL || strcasecmp(ai->name, question_hostname) != 0) + { + ares_free(ai->name); + ai->name = ares_strdup(question_hostname); + if (!ai->name) + { + status = ARES_ENOMEM; + goto failed_stat; + } + } + + if (got_a || got_aaaa) + { + ares__addrinfo_cat_nodes(&ai->nodes, nodes); + nodes = NULL; + } + + if (got_cname) + { + ares__addrinfo_cat_cnames(&ai->cnames, cnames); + cnames = NULL; + } + } + + ares_free(question_hostname); + return status; + +failed_stat: + ares_free(question_hostname); + ares_free(rr_name); + ares__freeaddrinfo_cnames(cnames); + ares__freeaddrinfo_nodes(nodes); + return status; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_mx_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_mx_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_mx_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_mx_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,164 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2010 Jeremy Lal + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +int +ares_parse_mx_reply (const unsigned char *abuf, int alen, + struct ares_mx_reply **mx_out) +{ + unsigned int qdcount, ancount, i; + const unsigned char *aptr, *vptr; + int status, rr_type, rr_class, rr_len; + long len; + char *hostname = NULL, *rr_name = NULL; + struct ares_mx_reply *mx_head = NULL; + struct ares_mx_reply *mx_last = NULL; + struct ares_mx_reply *mx_curr; + + /* Set *mx_out to NULL for all failure cases. */ + *mx_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_ENODATA; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares_expand_name (aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + + if (aptr + len + QFIXEDSZ > abuf + alen) + { + ares_free (hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + + /* Check if we are really looking at a MX record */ + if (rr_class == C_IN && rr_type == T_MX) + { + /* parse the MX record itself */ + if (rr_len < 2) + { + status = ARES_EBADRESP; + break; + } + + /* Allocate storage for this MX answer appending it to the list */ + mx_curr = ares_malloc_data(ARES_DATATYPE_MX_REPLY); + if (!mx_curr) + { + status = ARES_ENOMEM; + break; + } + if (mx_last) + { + mx_last->next = mx_curr; + } + else + { + mx_head = mx_curr; + } + mx_last = mx_curr; + + vptr = aptr; + mx_curr->priority = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + + status = ares_expand_name (vptr, abuf, alen, &mx_curr->host, &len); + if (status != ARES_SUCCESS) + break; + } + + /* Don't lose memory in the next iteration */ + ares_free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (hostname) + ares_free (hostname); + if (rr_name) + ares_free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (mx_head) + ares_free_data (mx_head); + return status; + } + + /* everything looks fine, return the data */ + *mx_out = mx_head; + + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_naptr_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_naptr_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_naptr_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_naptr_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,183 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2009 by Jakub Hrozek + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +int +ares_parse_naptr_reply (const unsigned char *abuf, int alen, + struct ares_naptr_reply **naptr_out) +{ + unsigned int qdcount, ancount, i; + const unsigned char *aptr, *vptr; + int status, rr_type, rr_class, rr_len; + long len; + char *hostname = NULL, *rr_name = NULL; + struct ares_naptr_reply *naptr_head = NULL; + struct ares_naptr_reply *naptr_last = NULL; + struct ares_naptr_reply *naptr_curr; + + /* Set *naptr_out to NULL for all failure cases. */ + *naptr_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_ENODATA; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares_expand_name (aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + + if (aptr + len + QFIXEDSZ > abuf + alen) + { + ares_free (hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + + /* Check if we are really looking at a NAPTR record */ + if (rr_class == C_IN && rr_type == T_NAPTR) + { + /* parse the NAPTR record itself */ + + /* RR must contain at least 7 bytes = 2 x int16 + 3 x name */ + if (rr_len < 7) + { + status = ARES_EBADRESP; + break; + } + + /* Allocate storage for this NAPTR answer appending it to the list */ + naptr_curr = ares_malloc_data(ARES_DATATYPE_NAPTR_REPLY); + if (!naptr_curr) + { + status = ARES_ENOMEM; + break; + } + if (naptr_last) + { + naptr_last->next = naptr_curr; + } + else + { + naptr_head = naptr_curr; + } + naptr_last = naptr_curr; + + vptr = aptr; + naptr_curr->order = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + naptr_curr->preference = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + + status = ares_expand_string(vptr, abuf, alen, &naptr_curr->flags, &len); + if (status != ARES_SUCCESS) + break; + vptr += len; + + status = ares_expand_string(vptr, abuf, alen, &naptr_curr->service, &len); + if (status != ARES_SUCCESS) + break; + vptr += len; + + status = ares_expand_string(vptr, abuf, alen, &naptr_curr->regexp, &len); + if (status != ARES_SUCCESS) + break; + vptr += len; + + status = ares_expand_name(vptr, abuf, alen, &naptr_curr->replacement, &len); + if (status != ARES_SUCCESS) + break; + } + + /* Don't lose memory in the next iteration */ + ares_free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (hostname) + ares_free (hostname); + if (rr_name) + ares_free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (naptr_head) + ares_free_data (naptr_head); + return status; + } + + /* everything looks fine, return the data */ + *naptr_out = naptr_head; + + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_ns_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_ns_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_ns_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_ns_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,177 @@ +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +/* + * ares_parse_ns_reply created by Vlad Dinulescu + * on behalf of AVIRA Gmbh - http://www.avira.com + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +int ares_parse_ns_reply( const unsigned char* abuf, int alen, + struct hostent** host ) +{ + unsigned int qdcount, ancount; + int status, i, rr_type, rr_class, rr_len; + int nameservers_num; + long len; + const unsigned char *aptr; + char* hostname, *rr_name, *rr_data, **nameservers; + struct hostent *hostent; + + /* Set *host to NULL for all failure cases. */ + *host = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if ( alen < HFIXEDSZ ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT( abuf ); + ancount = DNS_HEADER_ANCOUNT( abuf ); + if ( qdcount != 1 ) + return ARES_EBADRESP; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares__expand_name_for_response( aptr, abuf, alen, &hostname, &len, 0); + if ( status != ARES_SUCCESS ) + return status; + if ( aptr + len + QFIXEDSZ > abuf + alen ) + { + ares_free( hostname ); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Allocate nameservers array; ancount gives an upper bound */ + nameservers = ares_malloc( ( ancount + 1 ) * sizeof( char * ) ); + if ( !nameservers ) + { + ares_free( hostname ); + return ARES_ENOMEM; + } + nameservers_num = 0; + + /* Examine each answer resource record (RR) in turn. */ + for ( i = 0; i < ( int ) ancount; i++ ) + { + /* Decode the RR up to the data field. */ + status = ares__expand_name_for_response( aptr, abuf, alen, &rr_name, &len, 0); + if ( status != ARES_SUCCESS ) + break; + aptr += len; + if ( aptr + RRFIXEDSZ > abuf + alen ) + { + status = ARES_EBADRESP; + ares_free(rr_name); + break; + } + rr_type = DNS_RR_TYPE( aptr ); + rr_class = DNS_RR_CLASS( aptr ); + rr_len = DNS_RR_LEN( aptr ); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + ares_free(rr_name); + status = ARES_EBADRESP; + break; + } + + if ( rr_class == C_IN && rr_type == T_NS ) + { + /* Decode the RR data and add it to the nameservers list */ + status = ares__expand_name_for_response( aptr, abuf, alen, &rr_data, + &len, 1); + if ( status != ARES_SUCCESS ) + { + ares_free(rr_name); + break; + } + + nameservers[nameservers_num] = ares_malloc(strlen(rr_data)+1); + + if (nameservers[nameservers_num]==NULL) + { + ares_free(rr_name); + ares_free(rr_data); + status=ARES_ENOMEM; + break; + } + strcpy(nameservers[nameservers_num],rr_data); + ares_free(rr_data); + + nameservers_num++; + } + + ares_free( rr_name ); + + aptr += rr_len; + if ( aptr > abuf + alen ) + { /* LCOV_EXCL_START: already checked above */ + status = ARES_EBADRESP; + break; + } /* LCOV_EXCL_STOP */ + } + + if ( status == ARES_SUCCESS && nameservers_num == 0 ) + { + status = ARES_ENODATA; + } + if ( status == ARES_SUCCESS ) + { + /* We got our answer. Allocate memory to build the host entry. */ + nameservers[nameservers_num] = NULL; + hostent = ares_malloc( sizeof( struct hostent ) ); + if ( hostent ) + { + hostent->h_addr_list = ares_malloc( 1 * sizeof( char * ) ); + if ( hostent->h_addr_list ) + { + /* Fill in the hostent and return successfully. */ + hostent->h_name = hostname; + hostent->h_aliases = nameservers; + hostent->h_addrtype = AF_INET; + hostent->h_length = sizeof( struct in_addr ); + hostent->h_addr_list[0] = NULL; + *host = hostent; + return ARES_SUCCESS; + } + ares_free( hostent ); + } + status = ARES_ENOMEM; + } + for ( i = 0; i < nameservers_num; i++ ) + ares_free( nameservers[i] ); + ares_free( nameservers ); + ares_free( hostname ); + return status; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_ptr_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_ptr_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_ptr_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_ptr_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,228 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr, + int addrlen, int family, struct hostent **host) +{ + unsigned int qdcount, ancount; + int status, i, rr_type, rr_class, rr_len; + long len; + const unsigned char *aptr; + char *ptrname, *hostname, *rr_name, *rr_data; + struct hostent *hostent = NULL; + int aliascnt = 0; + int alias_alloc = 8; + char ** aliases; + size_t rr_data_len; + + /* Set *host to NULL for all failure cases. */ + *host = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + if (qdcount != 1) + return ARES_EBADRESP; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares__expand_name_for_response(aptr, abuf, alen, &ptrname, &len, 0); + if (status != ARES_SUCCESS) + return status; + if (aptr + len + QFIXEDSZ > abuf + alen) + { + ares_free(ptrname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + hostname = NULL; + aliases = ares_malloc(alias_alloc * sizeof(char *)); + if (!aliases) + { + ares_free(ptrname); + return ARES_ENOMEM; + } + for (i = 0; i < (int)ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len, 0); + if (status != ARES_SUCCESS) + break; + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + ares_free(rr_name); + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE(aptr); + rr_class = DNS_RR_CLASS(aptr); + rr_len = DNS_RR_LEN(aptr); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + ares_free(rr_name); + status = ARES_EBADRESP; + break; + } + + if (rr_class == C_IN && rr_type == T_PTR + && strcasecmp(rr_name, ptrname) == 0) + { + /* Decode the RR data and set hostname to it. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, + &len, 1); + if (status != ARES_SUCCESS) + { + ares_free(rr_name); + break; + } + if (hostname) + ares_free(hostname); + hostname = rr_data; + rr_data_len = strlen(rr_data)+1; + aliases[aliascnt] = ares_malloc(rr_data_len * sizeof(char)); + if (!aliases[aliascnt]) + { + ares_free(rr_name); + status = ARES_ENOMEM; + break; + } + strncpy(aliases[aliascnt], rr_data, rr_data_len); + aliascnt++; + if (aliascnt >= alias_alloc) { + char **ptr; + alias_alloc *= 2; + ptr = ares_realloc(aliases, alias_alloc * sizeof(char *)); + if(!ptr) { + ares_free(rr_name); + status = ARES_ENOMEM; + break; + } + aliases = ptr; + } + } + + if (rr_class == C_IN && rr_type == T_CNAME) + { + /* Decode the RR data and replace ptrname with it. */ + status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data, + &len, 1); + if (status != ARES_SUCCESS) + { + ares_free(rr_name); + break; + } + ares_free(ptrname); + ptrname = rr_data; + } + + ares_free(rr_name); + aptr += rr_len; + if (aptr > abuf + alen) + { /* LCOV_EXCL_START: already checked above */ + status = ARES_EBADRESP; + break; + } /* LCOV_EXCL_STOP */ + } + + if (status == ARES_SUCCESS && !hostname) + status = ARES_ENODATA; + if (status == ARES_SUCCESS) + { + /* If we don't reach the end, we must have failed due to out of memory */ + status = ARES_ENOMEM; + + /* We got our answer. Allocate memory to build the host entry. */ + hostent = ares_malloc(sizeof(*hostent)); + if (!hostent) + goto fail; + + /* If we don't memset here, cleanups may fail */ + memset(hostent, 0, sizeof(*hostent)); + + hostent->h_addr_list = ares_malloc(2 * sizeof(char *)); + if (!hostent->h_addr_list) + goto fail; + + + if (addr && addrlen) { + hostent->h_addr_list[0] = ares_malloc(addrlen); + if (!hostent->h_addr_list[0]) + goto fail; + } else { + hostent->h_addr_list[0] = NULL; + } + + hostent->h_aliases = ares_malloc((aliascnt+1) * sizeof (char *)); + if (!hostent->h_aliases) + goto fail; + + /* Fill in the hostent and return successfully. */ + hostent->h_name = hostname; + for (i=0 ; ih_aliases[i] = aliases[i]; + hostent->h_aliases[aliascnt] = NULL; + hostent->h_addrtype = aresx_sitoss(family); + hostent->h_length = aresx_sitoss(addrlen); + if (addr && addrlen) + memcpy(hostent->h_addr_list[0], addr, addrlen); + hostent->h_addr_list[1] = NULL; + *host = hostent; + ares_free(aliases); + ares_free(ptrname); + + return ARES_SUCCESS; + } + +fail: + ares_free_hostent(hostent); + + for (i=0 ; i + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +int +ares_parse_soa_reply(const unsigned char *abuf, int alen, + struct ares_soa_reply **soa_out) +{ + const unsigned char *aptr; + long len; + char *qname = NULL, *rr_name = NULL; + struct ares_soa_reply *soa = NULL; + int qdcount, ancount, qclass; + int status, i, rr_type, rr_class, rr_len; + + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* parse message header */ + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_EBADRESP; + + aptr = abuf + HFIXEDSZ; + + /* query name */ + status = ares__expand_name_for_response(aptr, abuf, alen, &qname, &len, 0); + if (status != ARES_SUCCESS) + goto failed_stat; + + if (alen <= len + HFIXEDSZ + 1) + goto failed; + aptr += len; + + qclass = DNS_QUESTION_TYPE(aptr); + + /* skip qtype & qclass */ + if (aptr + QFIXEDSZ > abuf + alen) + goto failed; + aptr += QFIXEDSZ; + + /* qclass of SOA with multiple answers */ + if (qclass == T_SOA && ancount > 1) + goto failed; + + /* examine all the records, break and return if found soa */ + for (i = 0; i < ancount; i++) + { + rr_name = NULL; + status = ares__expand_name_for_response (aptr, abuf, alen, &rr_name, &len, 0); + if (status != ARES_SUCCESS) + { + ares_free(rr_name); + goto failed_stat; + } + + aptr += len; + if ( aptr + RRFIXEDSZ > abuf + alen ) + { + ares_free(rr_name); + status = ARES_EBADRESP; + goto failed_stat; + } + rr_type = DNS_RR_TYPE( aptr ); + rr_class = DNS_RR_CLASS( aptr ); + rr_len = DNS_RR_LEN( aptr ); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + ares_free(rr_name); + status = ARES_EBADRESP; + goto failed_stat; + } + if ( rr_class == C_IN && rr_type == T_SOA ) + { + /* allocate result struct */ + soa = ares_malloc_data(ARES_DATATYPE_SOA_REPLY); + if (!soa) + { + ares_free(rr_name); + status = ARES_ENOMEM; + goto failed_stat; + } + + /* nsname */ + status = ares__expand_name_for_response(aptr, abuf, alen, &soa->nsname, + &len, 0); + if (status != ARES_SUCCESS) + { + ares_free(rr_name); + goto failed_stat; + } + aptr += len; + + /* hostmaster */ + status = ares__expand_name_for_response(aptr, abuf, alen, + &soa->hostmaster, &len, 0); + if (status != ARES_SUCCESS) + { + ares_free(rr_name); + goto failed_stat; + } + aptr += len; + + /* integer fields */ + if (aptr + 5 * 4 > abuf + alen) + { + ares_free(rr_name); + goto failed; + } + soa->serial = DNS__32BIT(aptr + 0 * 4); + soa->refresh = DNS__32BIT(aptr + 1 * 4); + soa->retry = DNS__32BIT(aptr + 2 * 4); + soa->expire = DNS__32BIT(aptr + 3 * 4); + soa->minttl = DNS__32BIT(aptr + 4 * 4); + + ares_free(qname); + ares_free(rr_name); + + *soa_out = soa; + + return ARES_SUCCESS; + } + aptr += rr_len; + + ares_free(rr_name); + + if (aptr > abuf + alen) + goto failed_stat; + } + /* no SOA record found */ + status = ARES_EBADRESP; + goto failed_stat; +failed: + status = ARES_EBADRESP; + +failed_stat: + if (soa) + ares_free_data(soa); + if (qname) + ares_free(qname); + return status; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_srv_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_srv_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_srv_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_srv_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,168 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2009 by Jakub Hrozek + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +int +ares_parse_srv_reply (const unsigned char *abuf, int alen, + struct ares_srv_reply **srv_out) +{ + unsigned int qdcount, ancount, i; + const unsigned char *aptr, *vptr; + int status, rr_type, rr_class, rr_len; + long len; + char *hostname = NULL, *rr_name = NULL; + struct ares_srv_reply *srv_head = NULL; + struct ares_srv_reply *srv_last = NULL; + struct ares_srv_reply *srv_curr; + + /* Set *srv_out to NULL for all failure cases. */ + *srv_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_ENODATA; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares_expand_name (aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + + if (aptr + len + QFIXEDSZ > abuf + alen) + { + ares_free (hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + + /* Check if we are really looking at a SRV record */ + if (rr_class == C_IN && rr_type == T_SRV) + { + /* parse the SRV record itself */ + if (rr_len < 6) + { + status = ARES_EBADRESP; + break; + } + + /* Allocate storage for this SRV answer appending it to the list */ + srv_curr = ares_malloc_data(ARES_DATATYPE_SRV_REPLY); + if (!srv_curr) + { + status = ARES_ENOMEM; + break; + } + if (srv_last) + { + srv_last->next = srv_curr; + } + else + { + srv_head = srv_curr; + } + srv_last = srv_curr; + + vptr = aptr; + srv_curr->priority = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + srv_curr->weight = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + srv_curr->port = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + + status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len); + if (status != ARES_SUCCESS) + break; + } + + /* Don't lose memory in the next iteration */ + ares_free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (hostname) + ares_free (hostname); + if (rr_name) + ares_free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (srv_head) + ares_free_data (srv_head); + return status; + } + + /* everything looks fine, return the data */ + *srv_out = srv_head; + + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_txt_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_txt_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_txt_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_txt_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,214 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2009 by Jakub Hrozek + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +static int +ares__parse_txt_reply (const unsigned char *abuf, int alen, + int ex, void **txt_out) +{ + size_t substr_len; + unsigned int qdcount, ancount, i; + const unsigned char *aptr; + const unsigned char *strptr; + int status, rr_type, rr_class, rr_len; + long len; + char *hostname = NULL, *rr_name = NULL; + struct ares_txt_ext *txt_head = NULL; + struct ares_txt_ext *txt_last = NULL; + struct ares_txt_ext *txt_curr; + + /* Set *txt_out to NULL for all failure cases. */ + *txt_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ) + return ARES_EBADRESP; + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) + return ARES_EBADRESP; + if (ancount == 0) + return ARES_ENODATA; + + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + status = ares_expand_name (aptr, abuf, alen, &hostname, &len); + if (status != ARES_SUCCESS) + return status; + + if (aptr + len + QFIXEDSZ > abuf + alen) + { + ares_free (hostname); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + if (aptr + rr_len > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + + /* Check if we are really looking at a TXT record */ + if ((rr_class == C_IN || rr_class == C_CHAOS) && rr_type == T_TXT) + { + /* + * There may be multiple substrings in a single TXT record. Each + * substring may be up to 255 characters in length, with a + * "length byte" indicating the size of the substring payload. + * RDATA contains both the length-bytes and payloads of all + * substrings contained therein. + */ + + strptr = aptr; + while (strptr < (aptr + rr_len)) + { + substr_len = (unsigned char)*strptr; + if (strptr + substr_len + 1 > aptr + rr_len) + { + status = ARES_EBADRESP; + break; + } + + /* Allocate storage for this TXT answer appending it to the list */ + txt_curr = ares_malloc_data(ex ? ARES_DATATYPE_TXT_EXT : + ARES_DATATYPE_TXT_REPLY); + if (!txt_curr) + { + status = ARES_ENOMEM; + break; + } + if (txt_last) + { + txt_last->next = txt_curr; + } + else + { + txt_head = txt_curr; + } + txt_last = txt_curr; + + if (ex) + txt_curr->record_start = (strptr == aptr); + txt_curr->length = substr_len; + txt_curr->txt = ares_malloc (substr_len + 1/* Including null byte */); + if (txt_curr->txt == NULL) + { + status = ARES_ENOMEM; + break; + } + + ++strptr; + memcpy ((char *) txt_curr->txt, strptr, substr_len); + + /* Make sure we NULL-terminate */ + txt_curr->txt[substr_len] = 0; + + strptr += substr_len; + } + } + + /* Propagate any failures */ + if (status != ARES_SUCCESS) + { + break; + } + + /* Don't lose memory in the next iteration */ + ares_free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (hostname) + ares_free (hostname); + if (rr_name) + ares_free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (txt_head) + ares_free_data (txt_head); + return status; + } + + /* everything looks fine, return the data */ + *txt_out = txt_head; + + return ARES_SUCCESS; +} + +int +ares_parse_txt_reply (const unsigned char *abuf, int alen, + struct ares_txt_reply **txt_out) +{ + return ares__parse_txt_reply(abuf, alen, 0, (void **) txt_out); +} + + +int +ares_parse_txt_reply_ext (const unsigned char *abuf, int alen, + struct ares_txt_ext **txt_out) +{ + return ares__parse_txt_reply(abuf, alen, 1, (void **) txt_out); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_uri_reply.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_uri_reply.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_parse_uri_reply.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_parse_uri_reply.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,184 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2009 by Jakub Hrozek + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_data.h" +#include "ares_private.h" + +/* AIX portability check */ +#ifndef T_URI +# define T_URI 256 /* uri selection */ +#endif + +int +ares_parse_uri_reply (const unsigned char *abuf, int alen, + struct ares_uri_reply **uri_out) +{ + unsigned int qdcount, ancount, i; + const unsigned char *aptr, *vptr; + int status, rr_type, rr_class, rr_len, rr_ttl; + long len; + char *uri_str = NULL, *rr_name = NULL; + struct ares_uri_reply *uri_head = NULL; + struct ares_uri_reply *uri_last = NULL; + struct ares_uri_reply *uri_curr; + + /* Set *uri_out to NULL for all failure cases. */ + *uri_out = NULL; + + /* Give up if abuf doesn't have room for a header. */ + if (alen < HFIXEDSZ){ + return ARES_EBADRESP; + } + + /* Fetch the question and answer count from the header. */ + qdcount = DNS_HEADER_QDCOUNT (abuf); + ancount = DNS_HEADER_ANCOUNT (abuf); + if (qdcount != 1) { + return ARES_EBADRESP; + } + if (ancount == 0) { + return ARES_ENODATA; + } + /* Expand the name from the question, and skip past the question. */ + aptr = abuf + HFIXEDSZ; + + status = ares_expand_name (aptr, abuf, alen, &uri_str, &len); + if (status != ARES_SUCCESS){ + return status; + } + if (aptr + len + QFIXEDSZ > abuf + alen) + { + ares_free (uri_str); + return ARES_EBADRESP; + } + aptr += len + QFIXEDSZ; + + /* Examine each answer resource record (RR) in turn. */ + for (i = 0; i < ancount; i++) + { + /* Decode the RR up to the data field. */ + status = ares_expand_name (aptr, abuf, alen, &rr_name, &len); + if (status != ARES_SUCCESS) + { + break; + } + aptr += len; + if (aptr + RRFIXEDSZ > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + + rr_type = DNS_RR_TYPE (aptr); + rr_class = DNS_RR_CLASS (aptr); + rr_ttl = DNS_RR_TTL(aptr); + rr_len = DNS_RR_LEN (aptr); + aptr += RRFIXEDSZ; + + if (aptr + rr_len > abuf + alen) + { + status = ARES_EBADRESP; + break; + } + + /* Check if we are really looking at a URI record */ + if (rr_class == C_IN && rr_type == T_URI) + { + /* parse the URI record itself */ + if (rr_len < 5) + { + status = ARES_EBADRESP; + break; + } + /* Allocate storage for this URI answer appending it to the list */ + uri_curr = ares_malloc_data(ARES_DATATYPE_URI_REPLY); + if (!uri_curr) + { + status = ARES_ENOMEM; + break; + } + if (uri_last) + { + uri_last->next = uri_curr; + } + else + { + uri_head = uri_curr; + } + uri_last = uri_curr; + + vptr = aptr; + uri_curr->priority = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + uri_curr->weight = DNS__16BIT(vptr); + vptr += sizeof(unsigned short); + uri_curr->uri = (char *)ares_malloc(rr_len-3); + if (!uri_curr->uri) + { + status = ARES_ENOMEM; + break; + } + uri_curr->uri = strncpy(uri_curr->uri, (const char *)vptr, rr_len-4); + uri_curr->uri[rr_len-4]='\0'; + uri_curr->ttl = rr_ttl; + + if (status != ARES_SUCCESS) + break; + } + + /* Don't lose memory in the next iteration */ + ares_free (rr_name); + rr_name = NULL; + + /* Move on to the next record */ + aptr += rr_len; + } + + if (uri_str) + ares_free (uri_str); + if (rr_name) + ares_free (rr_name); + + /* clean up on error */ + if (status != ARES_SUCCESS) + { + if (uri_head) + ares_free_data (uri_head); + return status; + } + + /* everything looks fine, return the data */ + *uri_out = uri_head; + + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_platform.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_platform.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_platform.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_platform.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,11042 @@ + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004 - 2011 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_platform.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +#if defined(WIN32) && !defined(MSDOS) + +#define V_PLATFORM_WIN32s 0 +#define V_PLATFORM_WIN32_WINDOWS 1 +#define V_PLATFORM_WIN32_NT 2 +#define V_PLATFORM_WIN32_CE 3 + +win_platform ares__getplatform(void) +{ + OSVERSIONINFOEX OsvEx; + + memset(&OsvEx, 0, sizeof(OsvEx)); + OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4996) /* warning C4996: 'GetVersionExW': was declared deprecated */ +#endif + if (!GetVersionEx((void *)&OsvEx)) + { + memset(&OsvEx, 0, sizeof(OsvEx)); + OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + if (!GetVersionEx((void *)&OsvEx)) + return WIN_UNKNOWN; + } +#ifdef _MSC_VER +#pragma warning(pop) +#endif + + switch(OsvEx.dwPlatformId) + { + case V_PLATFORM_WIN32s: + return WIN_3X; + + case V_PLATFORM_WIN32_WINDOWS: + return WIN_9X; + + case V_PLATFORM_WIN32_NT: + return WIN_NT; + + case V_PLATFORM_WIN32_CE: + return WIN_CE; + + default: + return WIN_UNKNOWN; + } +} + +#endif /* WIN32 && ! MSDOS */ + +#if defined(_WIN32_WCE) + +/* IANA Well Known Ports are in range 0-1023 */ +#define USE_IANA_WELL_KNOWN_PORTS 1 + +/* IANA Registered Ports are in range 1024-49151 */ +#define USE_IANA_REGISTERED_PORTS 1 + +struct pvt_servent { + char *s_name; + char **s_aliases; + unsigned short s_port; + char *s_proto; +}; + +/* + * Ref: http://www.iana.org/assignments/port-numbers + */ + +static struct pvt_servent IANAports[] = { +#ifdef USE_IANA_WELL_KNOWN_PORTS +{"tcpmux", {NULL}, 1, "tcp"}, +{"tcpmux", {NULL}, 1, "udp"}, +{"compressnet", {NULL}, 2, "tcp"}, +{"compressnet", {NULL}, 2, "udp"}, +{"compressnet", {NULL}, 3, "tcp"}, +{"compressnet", {NULL}, 3, "udp"}, +{"rje", {NULL}, 5, "tcp"}, +{"rje", {NULL}, 5, "udp"}, +{"echo", {NULL}, 7, "tcp"}, +{"echo", {NULL}, 7, "udp"}, +{"discard", {NULL}, 9, "tcp"}, +{"discard", {NULL}, 9, "udp"}, +{"discard", {NULL}, 9, "sctp"}, +{"discard", {NULL}, 9, "dccp"}, +{"systat", {NULL}, 11, "tcp"}, +{"systat", {NULL}, 11, "udp"}, +{"daytime", {NULL}, 13, "tcp"}, +{"daytime", {NULL}, 13, "udp"}, +{"qotd", {NULL}, 17, "tcp"}, +{"qotd", {NULL}, 17, "udp"}, +{"msp", {NULL}, 18, "tcp"}, +{"msp", {NULL}, 18, "udp"}, +{"chargen", {NULL}, 19, "tcp"}, +{"chargen", {NULL}, 19, "udp"}, +{"ftp-data", {NULL}, 20, "tcp"}, +{"ftp-data", {NULL}, 20, "udp"}, +{"ftp-data", {NULL}, 20, "sctp"}, +{"ftp", {NULL}, 21, "tcp"}, +{"ftp", {NULL}, 21, "udp"}, +{"ftp", {NULL}, 21, "sctp"}, +{"ssh", {NULL}, 22, "tcp"}, +{"ssh", {NULL}, 22, "udp"}, +{"ssh", {NULL}, 22, "sctp"}, +{"telnet", {NULL}, 23, "tcp"}, +{"telnet", {NULL}, 23, "udp"}, +{"smtp", {NULL}, 25, "tcp"}, +{"smtp", {NULL}, 25, "udp"}, +{"nsw-fe", {NULL}, 27, "tcp"}, +{"nsw-fe", {NULL}, 27, "udp"}, +{"msg-icp", {NULL}, 29, "tcp"}, +{"msg-icp", {NULL}, 29, "udp"}, +{"msg-auth", {NULL}, 31, "tcp"}, +{"msg-auth", {NULL}, 31, "udp"}, +{"dsp", {NULL}, 33, "tcp"}, +{"dsp", {NULL}, 33, "udp"}, +{"time", {NULL}, 37, "tcp"}, +{"time", {NULL}, 37, "udp"}, +{"rap", {NULL}, 38, "tcp"}, +{"rap", {NULL}, 38, "udp"}, +{"rlp", {NULL}, 39, "tcp"}, +{"rlp", {NULL}, 39, "udp"}, +{"graphics", {NULL}, 41, "tcp"}, +{"graphics", {NULL}, 41, "udp"}, +{"name", {NULL}, 42, "tcp"}, +{"name", {NULL}, 42, "udp"}, +{"nameserver", {NULL}, 42, "tcp"}, +{"nameserver", {NULL}, 42, "udp"}, +{"nicname", {NULL}, 43, "tcp"}, +{"nicname", {NULL}, 43, "udp"}, +{"mpm-flags", {NULL}, 44, "tcp"}, +{"mpm-flags", {NULL}, 44, "udp"}, +{"mpm", {NULL}, 45, "tcp"}, +{"mpm", {NULL}, 45, "udp"}, +{"mpm-snd", {NULL}, 46, "tcp"}, +{"mpm-snd", {NULL}, 46, "udp"}, +{"ni-ftp", {NULL}, 47, "tcp"}, +{"ni-ftp", {NULL}, 47, "udp"}, +{"auditd", {NULL}, 48, "tcp"}, +{"auditd", {NULL}, 48, "udp"}, +{"tacacs", {NULL}, 49, "tcp"}, +{"tacacs", {NULL}, 49, "udp"}, +{"re-mail-ck", {NULL}, 50, "tcp"}, +{"re-mail-ck", {NULL}, 50, "udp"}, +{"la-maint", {NULL}, 51, "tcp"}, +{"la-maint", {NULL}, 51, "udp"}, +{"xns-time", {NULL}, 52, "tcp"}, +{"xns-time", {NULL}, 52, "udp"}, +{"domain", {NULL}, 53, "tcp"}, +{"domain", {NULL}, 53, "udp"}, +{"xns-ch", {NULL}, 54, "tcp"}, +{"xns-ch", {NULL}, 54, "udp"}, +{"isi-gl", {NULL}, 55, "tcp"}, +{"isi-gl", {NULL}, 55, "udp"}, +{"xns-auth", {NULL}, 56, "tcp"}, +{"xns-auth", {NULL}, 56, "udp"}, +{"xns-mail", {NULL}, 58, "tcp"}, +{"xns-mail", {NULL}, 58, "udp"}, +{"ni-mail", {NULL}, 61, "tcp"}, +{"ni-mail", {NULL}, 61, "udp"}, +{"acas", {NULL}, 62, "tcp"}, +{"acas", {NULL}, 62, "udp"}, +{"whois++", {NULL}, 63, "tcp"}, +{"whois++", {NULL}, 63, "udp"}, +{"covia", {NULL}, 64, "tcp"}, +{"covia", {NULL}, 64, "udp"}, +{"tacacs-ds", {NULL}, 65, "tcp"}, +{"tacacs-ds", {NULL}, 65, "udp"}, +{"sql*net", {NULL}, 66, "tcp"}, +{"sql*net", {NULL}, 66, "udp"}, +{"bootps", {NULL}, 67, "tcp"}, +{"bootps", {NULL}, 67, "udp"}, +{"bootpc", {NULL}, 68, "tcp"}, +{"bootpc", {NULL}, 68, "udp"}, +{"tftp", {NULL}, 69, "tcp"}, +{"tftp", {NULL}, 69, "udp"}, +{"gopher", {NULL}, 70, "tcp"}, +{"gopher", {NULL}, 70, "udp"}, +{"netrjs-1", {NULL}, 71, "tcp"}, +{"netrjs-1", {NULL}, 71, "udp"}, +{"netrjs-2", {NULL}, 72, "tcp"}, +{"netrjs-2", {NULL}, 72, "udp"}, +{"netrjs-3", {NULL}, 73, "tcp"}, +{"netrjs-3", {NULL}, 73, "udp"}, +{"netrjs-4", {NULL}, 74, "tcp"}, +{"netrjs-4", {NULL}, 74, "udp"}, +{"deos", {NULL}, 76, "tcp"}, +{"deos", {NULL}, 76, "udp"}, +{"vettcp", {NULL}, 78, "tcp"}, +{"vettcp", {NULL}, 78, "udp"}, +{"finger", {NULL}, 79, "tcp"}, +{"finger", {NULL}, 79, "udp"}, +{"http", {NULL}, 80, "tcp"}, +{"http", {NULL}, 80, "udp"}, +{"www", {NULL}, 80, "tcp"}, +{"www", {NULL}, 80, "udp"}, +{"www-http", {NULL}, 80, "tcp"}, +{"www-http", {NULL}, 80, "udp"}, +{"http", {NULL}, 80, "sctp"}, +{"xfer", {NULL}, 82, "tcp"}, +{"xfer", {NULL}, 82, "udp"}, +{"mit-ml-dev", {NULL}, 83, "tcp"}, +{"mit-ml-dev", {NULL}, 83, "udp"}, +{"ctf", {NULL}, 84, "tcp"}, +{"ctf", {NULL}, 84, "udp"}, +{"mit-ml-dev", {NULL}, 85, "tcp"}, +{"mit-ml-dev", {NULL}, 85, "udp"}, +{"mfcobol", {NULL}, 86, "tcp"}, +{"mfcobol", {NULL}, 86, "udp"}, +{"kerberos", {NULL}, 88, "tcp"}, +{"kerberos", {NULL}, 88, "udp"}, +{"su-mit-tg", {NULL}, 89, "tcp"}, +{"su-mit-tg", {NULL}, 89, "udp"}, +{"dnsix", {NULL}, 90, "tcp"}, +{"dnsix", {NULL}, 90, "udp"}, +{"mit-dov", {NULL}, 91, "tcp"}, +{"mit-dov", {NULL}, 91, "udp"}, +{"npp", {NULL}, 92, "tcp"}, +{"npp", {NULL}, 92, "udp"}, +{"dcp", {NULL}, 93, "tcp"}, +{"dcp", {NULL}, 93, "udp"}, +{"objcall", {NULL}, 94, "tcp"}, +{"objcall", {NULL}, 94, "udp"}, +{"supdup", {NULL}, 95, "tcp"}, +{"supdup", {NULL}, 95, "udp"}, +{"dixie", {NULL}, 96, "tcp"}, +{"dixie", {NULL}, 96, "udp"}, +{"swift-rvf", {NULL}, 97, "tcp"}, +{"swift-rvf", {NULL}, 97, "udp"}, +{"tacnews", {NULL}, 98, "tcp"}, +{"tacnews", {NULL}, 98, "udp"}, +{"metagram", {NULL}, 99, "tcp"}, +{"metagram", {NULL}, 99, "udp"}, +{"newacct", {NULL}, 100, "tcp"}, +{"hostname", {NULL}, 101, "tcp"}, +{"hostname", {NULL}, 101, "udp"}, +{"iso-tsap", {NULL}, 102, "tcp"}, +{"iso-tsap", {NULL}, 102, "udp"}, +{"gppitnp", {NULL}, 103, "tcp"}, +{"gppitnp", {NULL}, 103, "udp"}, +{"acr-nema", {NULL}, 104, "tcp"}, +{"acr-nema", {NULL}, 104, "udp"}, +{"cso", {NULL}, 105, "tcp"}, +{"cso", {NULL}, 105, "udp"}, +{"csnet-ns", {NULL}, 105, "tcp"}, +{"csnet-ns", {NULL}, 105, "udp"}, +{"3com-tsmux", {NULL}, 106, "tcp"}, +{"3com-tsmux", {NULL}, 106, "udp"}, +{"rtelnet", {NULL}, 107, "tcp"}, +{"rtelnet", {NULL}, 107, "udp"}, +{"snagas", {NULL}, 108, "tcp"}, +{"snagas", {NULL}, 108, "udp"}, +{"pop2", {NULL}, 109, "tcp"}, +{"pop2", {NULL}, 109, "udp"}, +{"pop3", {NULL}, 110, "tcp"}, +{"pop3", {NULL}, 110, "udp"}, +{"sunrpc", {NULL}, 111, "tcp"}, +{"sunrpc", {NULL}, 111, "udp"}, +{"mcidas", {NULL}, 112, "tcp"}, +{"mcidas", {NULL}, 112, "udp"}, +{"ident", {NULL}, 113, "tcp"}, +{"auth", {NULL}, 113, "tcp"}, +{"auth", {NULL}, 113, "udp"}, +{"sftp", {NULL}, 115, "tcp"}, +{"sftp", {NULL}, 115, "udp"}, +{"ansanotify", {NULL}, 116, "tcp"}, +{"ansanotify", {NULL}, 116, "udp"}, +{"uucp-path", {NULL}, 117, "tcp"}, +{"uucp-path", {NULL}, 117, "udp"}, +{"sqlserv", {NULL}, 118, "tcp"}, +{"sqlserv", {NULL}, 118, "udp"}, +{"nntp", {NULL}, 119, "tcp"}, +{"nntp", {NULL}, 119, "udp"}, +{"cfdptkt", {NULL}, 120, "tcp"}, +{"cfdptkt", {NULL}, 120, "udp"}, +{"erpc", {NULL}, 121, "tcp"}, +{"erpc", {NULL}, 121, "udp"}, +{"smakynet", {NULL}, 122, "tcp"}, +{"smakynet", {NULL}, 122, "udp"}, +{"ntp", {NULL}, 123, "tcp"}, +{"ntp", {NULL}, 123, "udp"}, +{"ansatrader", {NULL}, 124, "tcp"}, +{"ansatrader", {NULL}, 124, "udp"}, +{"locus-map", {NULL}, 125, "tcp"}, +{"locus-map", {NULL}, 125, "udp"}, +{"nxedit", {NULL}, 126, "tcp"}, +{"nxedit", {NULL}, 126, "udp"}, +{"locus-con", {NULL}, 127, "tcp"}, +{"locus-con", {NULL}, 127, "udp"}, +{"gss-xlicen", {NULL}, 128, "tcp"}, +{"gss-xlicen", {NULL}, 128, "udp"}, +{"pwdgen", {NULL}, 129, "tcp"}, +{"pwdgen", {NULL}, 129, "udp"}, +{"cisco-fna", {NULL}, 130, "tcp"}, +{"cisco-fna", {NULL}, 130, "udp"}, +{"cisco-tna", {NULL}, 131, "tcp"}, +{"cisco-tna", {NULL}, 131, "udp"}, +{"cisco-sys", {NULL}, 132, "tcp"}, +{"cisco-sys", {NULL}, 132, "udp"}, +{"statsrv", {NULL}, 133, "tcp"}, +{"statsrv", {NULL}, 133, "udp"}, +{"ingres-net", {NULL}, 134, "tcp"}, +{"ingres-net", {NULL}, 134, "udp"}, +{"epmap", {NULL}, 135, "tcp"}, +{"epmap", {NULL}, 135, "udp"}, +{"profile", {NULL}, 136, "tcp"}, +{"profile", {NULL}, 136, "udp"}, +{"netbios-ns", {NULL}, 137, "tcp"}, +{"netbios-ns", {NULL}, 137, "udp"}, +{"netbios-dgm", {NULL}, 138, "tcp"}, +{"netbios-dgm", {NULL}, 138, "udp"}, +{"netbios-ssn", {NULL}, 139, "tcp"}, +{"netbios-ssn", {NULL}, 139, "udp"}, +{"emfis-data", {NULL}, 140, "tcp"}, +{"emfis-data", {NULL}, 140, "udp"}, +{"emfis-cntl", {NULL}, 141, "tcp"}, +{"emfis-cntl", {NULL}, 141, "udp"}, +{"bl-idm", {NULL}, 142, "tcp"}, +{"bl-idm", {NULL}, 142, "udp"}, +{"imap", {NULL}, 143, "tcp"}, +{"imap", {NULL}, 143, "udp"}, +{"uma", {NULL}, 144, "tcp"}, +{"uma", {NULL}, 144, "udp"}, +{"uaac", {NULL}, 145, "tcp"}, +{"uaac", {NULL}, 145, "udp"}, +{"iso-tp0", {NULL}, 146, "tcp"}, +{"iso-tp0", {NULL}, 146, "udp"}, +{"iso-ip", {NULL}, 147, "tcp"}, +{"iso-ip", {NULL}, 147, "udp"}, +{"jargon", {NULL}, 148, "tcp"}, +{"jargon", {NULL}, 148, "udp"}, +{"aed-512", {NULL}, 149, "tcp"}, +{"aed-512", {NULL}, 149, "udp"}, +{"sql-net", {NULL}, 150, "tcp"}, +{"sql-net", {NULL}, 150, "udp"}, +{"hems", {NULL}, 151, "tcp"}, +{"hems", {NULL}, 151, "udp"}, +{"bftp", {NULL}, 152, "tcp"}, +{"bftp", {NULL}, 152, "udp"}, +{"sgmp", {NULL}, 153, "tcp"}, +{"sgmp", {NULL}, 153, "udp"}, +{"netsc-prod", {NULL}, 154, "tcp"}, +{"netsc-prod", {NULL}, 154, "udp"}, +{"netsc-dev", {NULL}, 155, "tcp"}, +{"netsc-dev", {NULL}, 155, "udp"}, +{"sqlsrv", {NULL}, 156, "tcp"}, +{"sqlsrv", {NULL}, 156, "udp"}, +{"knet-cmp", {NULL}, 157, "tcp"}, +{"knet-cmp", {NULL}, 157, "udp"}, +{"pcmail-srv", {NULL}, 158, "tcp"}, +{"pcmail-srv", {NULL}, 158, "udp"}, +{"nss-routing", {NULL}, 159, "tcp"}, +{"nss-routing", {NULL}, 159, "udp"}, +{"sgmp-traps", {NULL}, 160, "tcp"}, +{"sgmp-traps", {NULL}, 160, "udp"}, +{"snmp", {NULL}, 161, "tcp"}, +{"snmp", {NULL}, 161, "udp"}, +{"snmptrap", {NULL}, 162, "tcp"}, +{"snmptrap", {NULL}, 162, "udp"}, +{"cmip-man", {NULL}, 163, "tcp"}, +{"cmip-man", {NULL}, 163, "udp"}, +{"cmip-agent", {NULL}, 164, "tcp"}, +{"cmip-agent", {NULL}, 164, "udp"}, +{"xns-courier", {NULL}, 165, "tcp"}, +{"xns-courier", {NULL}, 165, "udp"}, +{"s-net", {NULL}, 166, "tcp"}, +{"s-net", {NULL}, 166, "udp"}, +{"namp", {NULL}, 167, "tcp"}, +{"namp", {NULL}, 167, "udp"}, +{"rsvd", {NULL}, 168, "tcp"}, +{"rsvd", {NULL}, 168, "udp"}, +{"send", {NULL}, 169, "tcp"}, +{"send", {NULL}, 169, "udp"}, +{"print-srv", {NULL}, 170, "tcp"}, +{"print-srv", {NULL}, 170, "udp"}, +{"multiplex", {NULL}, 171, "tcp"}, +{"multiplex", {NULL}, 171, "udp"}, +{"cl/1", {NULL}, 172, "tcp"}, +{"cl/1", {NULL}, 172, "udp"}, +{"xyplex-mux", {NULL}, 173, "tcp"}, +{"xyplex-mux", {NULL}, 173, "udp"}, +{"mailq", {NULL}, 174, "tcp"}, +{"mailq", {NULL}, 174, "udp"}, +{"vmnet", {NULL}, 175, "tcp"}, +{"vmnet", {NULL}, 175, "udp"}, +{"genrad-mux", {NULL}, 176, "tcp"}, +{"genrad-mux", {NULL}, 176, "udp"}, +{"xdmcp", {NULL}, 177, "tcp"}, +{"xdmcp", {NULL}, 177, "udp"}, +{"nextstep", {NULL}, 178, "tcp"}, +{"nextstep", {NULL}, 178, "udp"}, +{"bgp", {NULL}, 179, "tcp"}, +{"bgp", {NULL}, 179, "udp"}, +{"bgp", {NULL}, 179, "sctp"}, +{"ris", {NULL}, 180, "tcp"}, +{"ris", {NULL}, 180, "udp"}, +{"unify", {NULL}, 181, "tcp"}, +{"unify", {NULL}, 181, "udp"}, +{"audit", {NULL}, 182, "tcp"}, +{"audit", {NULL}, 182, "udp"}, +{"ocbinder", {NULL}, 183, "tcp"}, +{"ocbinder", {NULL}, 183, "udp"}, +{"ocserver", {NULL}, 184, "tcp"}, +{"ocserver", {NULL}, 184, "udp"}, +{"remote-kis", {NULL}, 185, "tcp"}, +{"remote-kis", {NULL}, 185, "udp"}, +{"kis", {NULL}, 186, "tcp"}, +{"kis", {NULL}, 186, "udp"}, +{"aci", {NULL}, 187, "tcp"}, +{"aci", {NULL}, 187, "udp"}, +{"mumps", {NULL}, 188, "tcp"}, +{"mumps", {NULL}, 188, "udp"}, +{"qft", {NULL}, 189, "tcp"}, +{"qft", {NULL}, 189, "udp"}, +{"gacp", {NULL}, 190, "tcp"}, +{"gacp", {NULL}, 190, "udp"}, +{"prospero", {NULL}, 191, "tcp"}, +{"prospero", {NULL}, 191, "udp"}, +{"osu-nms", {NULL}, 192, "tcp"}, +{"osu-nms", {NULL}, 192, "udp"}, +{"srmp", {NULL}, 193, "tcp"}, +{"srmp", {NULL}, 193, "udp"}, +{"irc", {NULL}, 194, "tcp"}, +{"irc", {NULL}, 194, "udp"}, +{"dn6-nlm-aud", {NULL}, 195, "tcp"}, +{"dn6-nlm-aud", {NULL}, 195, "udp"}, +{"dn6-smm-red", {NULL}, 196, "tcp"}, +{"dn6-smm-red", {NULL}, 196, "udp"}, +{"dls", {NULL}, 197, "tcp"}, +{"dls", {NULL}, 197, "udp"}, +{"dls-mon", {NULL}, 198, "tcp"}, +{"dls-mon", {NULL}, 198, "udp"}, +{"smux", {NULL}, 199, "tcp"}, +{"smux", {NULL}, 199, "udp"}, +{"src", {NULL}, 200, "tcp"}, +{"src", {NULL}, 200, "udp"}, +{"at-rtmp", {NULL}, 201, "tcp"}, +{"at-rtmp", {NULL}, 201, "udp"}, +{"at-nbp", {NULL}, 202, "tcp"}, +{"at-nbp", {NULL}, 202, "udp"}, +{"at-3", {NULL}, 203, "tcp"}, +{"at-3", {NULL}, 203, "udp"}, +{"at-echo", {NULL}, 204, "tcp"}, +{"at-echo", {NULL}, 204, "udp"}, +{"at-5", {NULL}, 205, "tcp"}, +{"at-5", {NULL}, 205, "udp"}, +{"at-zis", {NULL}, 206, "tcp"}, +{"at-zis", {NULL}, 206, "udp"}, +{"at-7", {NULL}, 207, "tcp"}, +{"at-7", {NULL}, 207, "udp"}, +{"at-8", {NULL}, 208, "tcp"}, +{"at-8", {NULL}, 208, "udp"}, +{"qmtp", {NULL}, 209, "tcp"}, +{"qmtp", {NULL}, 209, "udp"}, +{"z39.50", {NULL}, 210, "tcp"}, +{"z39.50", {NULL}, 210, "udp"}, +{"914c/g", {NULL}, 211, "tcp"}, +{"914c/g", {NULL}, 211, "udp"}, +{"anet", {NULL}, 212, "tcp"}, +{"anet", {NULL}, 212, "udp"}, +{"ipx", {NULL}, 213, "tcp"}, +{"ipx", {NULL}, 213, "udp"}, +{"vmpwscs", {NULL}, 214, "tcp"}, +{"vmpwscs", {NULL}, 214, "udp"}, +{"softpc", {NULL}, 215, "tcp"}, +{"softpc", {NULL}, 215, "udp"}, +{"CAIlic", {NULL}, 216, "tcp"}, +{"CAIlic", {NULL}, 216, "udp"}, +{"dbase", {NULL}, 217, "tcp"}, +{"dbase", {NULL}, 217, "udp"}, +{"mpp", {NULL}, 218, "tcp"}, +{"mpp", {NULL}, 218, "udp"}, +{"uarps", {NULL}, 219, "tcp"}, +{"uarps", {NULL}, 219, "udp"}, +{"imap3", {NULL}, 220, "tcp"}, +{"imap3", {NULL}, 220, "udp"}, +{"fln-spx", {NULL}, 221, "tcp"}, +{"fln-spx", {NULL}, 221, "udp"}, +{"rsh-spx", {NULL}, 222, "tcp"}, +{"rsh-spx", {NULL}, 222, "udp"}, +{"cdc", {NULL}, 223, "tcp"}, +{"cdc", {NULL}, 223, "udp"}, +{"masqdialer", {NULL}, 224, "tcp"}, +{"masqdialer", {NULL}, 224, "udp"}, +{"direct", {NULL}, 242, "tcp"}, +{"direct", {NULL}, 242, "udp"}, +{"sur-meas", {NULL}, 243, "tcp"}, +{"sur-meas", {NULL}, 243, "udp"}, +{"inbusiness", {NULL}, 244, "tcp"}, +{"inbusiness", {NULL}, 244, "udp"}, +{"link", {NULL}, 245, "tcp"}, +{"link", {NULL}, 245, "udp"}, +{"dsp3270", {NULL}, 246, "tcp"}, +{"dsp3270", {NULL}, 246, "udp"}, +{"subntbcst_tftp", {NULL}, 247, "tcp"}, +{"subntbcst_tftp", {NULL}, 247, "udp"}, +{"bhfhs", {NULL}, 248, "tcp"}, +{"bhfhs", {NULL}, 248, "udp"}, +{"rap", {NULL}, 256, "tcp"}, +{"rap", {NULL}, 256, "udp"}, +{"set", {NULL}, 257, "tcp"}, +{"set", {NULL}, 257, "udp"}, +{"esro-gen", {NULL}, 259, "tcp"}, +{"esro-gen", {NULL}, 259, "udp"}, +{"openport", {NULL}, 260, "tcp"}, +{"openport", {NULL}, 260, "udp"}, +{"nsiiops", {NULL}, 261, "tcp"}, +{"nsiiops", {NULL}, 261, "udp"}, +{"arcisdms", {NULL}, 262, "tcp"}, +{"arcisdms", {NULL}, 262, "udp"}, +{"hdap", {NULL}, 263, "tcp"}, +{"hdap", {NULL}, 263, "udp"}, +{"bgmp", {NULL}, 264, "tcp"}, +{"bgmp", {NULL}, 264, "udp"}, +{"x-bone-ctl", {NULL}, 265, "tcp"}, +{"x-bone-ctl", {NULL}, 265, "udp"}, +{"sst", {NULL}, 266, "tcp"}, +{"sst", {NULL}, 266, "udp"}, +{"td-service", {NULL}, 267, "tcp"}, +{"td-service", {NULL}, 267, "udp"}, +{"td-replica", {NULL}, 268, "tcp"}, +{"td-replica", {NULL}, 268, "udp"}, +{"manet", {NULL}, 269, "tcp"}, +{"manet", {NULL}, 269, "udp"}, +{"gist", {NULL}, 270, "udp"}, +{"http-mgmt", {NULL}, 280, "tcp"}, +{"http-mgmt", {NULL}, 280, "udp"}, +{"personal-link", {NULL}, 281, "tcp"}, +{"personal-link", {NULL}, 281, "udp"}, +{"cableport-ax", {NULL}, 282, "tcp"}, +{"cableport-ax", {NULL}, 282, "udp"}, +{"rescap", {NULL}, 283, "tcp"}, +{"rescap", {NULL}, 283, "udp"}, +{"corerjd", {NULL}, 284, "tcp"}, +{"corerjd", {NULL}, 284, "udp"}, +{"fxp", {NULL}, 286, "tcp"}, +{"fxp", {NULL}, 286, "udp"}, +{"k-block", {NULL}, 287, "tcp"}, +{"k-block", {NULL}, 287, "udp"}, +{"novastorbakcup", {NULL}, 308, "tcp"}, +{"novastorbakcup", {NULL}, 308, "udp"}, +{"entrusttime", {NULL}, 309, "tcp"}, +{"entrusttime", {NULL}, 309, "udp"}, +{"bhmds", {NULL}, 310, "tcp"}, +{"bhmds", {NULL}, 310, "udp"}, +{"asip-webadmin", {NULL}, 311, "tcp"}, +{"asip-webadmin", {NULL}, 311, "udp"}, +{"vslmp", {NULL}, 312, "tcp"}, +{"vslmp", {NULL}, 312, "udp"}, +{"magenta-logic", {NULL}, 313, "tcp"}, +{"magenta-logic", {NULL}, 313, "udp"}, +{"opalis-robot", {NULL}, 314, "tcp"}, +{"opalis-robot", {NULL}, 314, "udp"}, +{"dpsi", {NULL}, 315, "tcp"}, +{"dpsi", {NULL}, 315, "udp"}, +{"decauth", {NULL}, 316, "tcp"}, +{"decauth", {NULL}, 316, "udp"}, +{"zannet", {NULL}, 317, "tcp"}, +{"zannet", {NULL}, 317, "udp"}, +{"pkix-timestamp", {NULL}, 318, "tcp"}, +{"pkix-timestamp", {NULL}, 318, "udp"}, +{"ptp-event", {NULL}, 319, "tcp"}, +{"ptp-event", {NULL}, 319, "udp"}, +{"ptp-general", {NULL}, 320, "tcp"}, +{"ptp-general", {NULL}, 320, "udp"}, +{"pip", {NULL}, 321, "tcp"}, +{"pip", {NULL}, 321, "udp"}, +{"rtsps", {NULL}, 322, "tcp"}, +{"rtsps", {NULL}, 322, "udp"}, +{"texar", {NULL}, 333, "tcp"}, +{"texar", {NULL}, 333, "udp"}, +{"pdap", {NULL}, 344, "tcp"}, +{"pdap", {NULL}, 344, "udp"}, +{"pawserv", {NULL}, 345, "tcp"}, +{"pawserv", {NULL}, 345, "udp"}, +{"zserv", {NULL}, 346, "tcp"}, +{"zserv", {NULL}, 346, "udp"}, +{"fatserv", {NULL}, 347, "tcp"}, +{"fatserv", {NULL}, 347, "udp"}, +{"csi-sgwp", {NULL}, 348, "tcp"}, +{"csi-sgwp", {NULL}, 348, "udp"}, +{"mftp", {NULL}, 349, "tcp"}, +{"mftp", {NULL}, 349, "udp"}, +{"matip-type-a", {NULL}, 350, "tcp"}, +{"matip-type-a", {NULL}, 350, "udp"}, +{"matip-type-b", {NULL}, 351, "tcp"}, +{"matip-type-b", {NULL}, 351, "udp"}, +{"bhoetty", {NULL}, 351, "tcp"}, +{"bhoetty", {NULL}, 351, "udp"}, +{"dtag-ste-sb", {NULL}, 352, "tcp"}, +{"dtag-ste-sb", {NULL}, 352, "udp"}, +{"bhoedap4", {NULL}, 352, "tcp"}, +{"bhoedap4", {NULL}, 352, "udp"}, +{"ndsauth", {NULL}, 353, "tcp"}, +{"ndsauth", {NULL}, 353, "udp"}, +{"bh611", {NULL}, 354, "tcp"}, +{"bh611", {NULL}, 354, "udp"}, +{"datex-asn", {NULL}, 355, "tcp"}, +{"datex-asn", {NULL}, 355, "udp"}, +{"cloanto-net-1", {NULL}, 356, "tcp"}, +{"cloanto-net-1", {NULL}, 356, "udp"}, +{"bhevent", {NULL}, 357, "tcp"}, +{"bhevent", {NULL}, 357, "udp"}, +{"shrinkwrap", {NULL}, 358, "tcp"}, +{"shrinkwrap", {NULL}, 358, "udp"}, +{"nsrmp", {NULL}, 359, "tcp"}, +{"nsrmp", {NULL}, 359, "udp"}, +{"scoi2odialog", {NULL}, 360, "tcp"}, +{"scoi2odialog", {NULL}, 360, "udp"}, +{"semantix", {NULL}, 361, "tcp"}, +{"semantix", {NULL}, 361, "udp"}, +{"srssend", {NULL}, 362, "tcp"}, +{"srssend", {NULL}, 362, "udp"}, +{"rsvp_tunnel", {NULL}, 363, "tcp"}, +{"rsvp_tunnel", {NULL}, 363, "udp"}, +{"aurora-cmgr", {NULL}, 364, "tcp"}, +{"aurora-cmgr", {NULL}, 364, "udp"}, +{"dtk", {NULL}, 365, "tcp"}, +{"dtk", {NULL}, 365, "udp"}, +{"odmr", {NULL}, 366, "tcp"}, +{"odmr", {NULL}, 366, "udp"}, +{"mortgageware", {NULL}, 367, "tcp"}, +{"mortgageware", {NULL}, 367, "udp"}, +{"qbikgdp", {NULL}, 368, "tcp"}, +{"qbikgdp", {NULL}, 368, "udp"}, +{"rpc2portmap", {NULL}, 369, "tcp"}, +{"rpc2portmap", {NULL}, 369, "udp"}, +{"codaauth2", {NULL}, 370, "tcp"}, +{"codaauth2", {NULL}, 370, "udp"}, +{"clearcase", {NULL}, 371, "tcp"}, +{"clearcase", {NULL}, 371, "udp"}, +{"ulistproc", {NULL}, 372, "tcp"}, +{"ulistproc", {NULL}, 372, "udp"}, +{"legent-1", {NULL}, 373, "tcp"}, +{"legent-1", {NULL}, 373, "udp"}, +{"legent-2", {NULL}, 374, "tcp"}, +{"legent-2", {NULL}, 374, "udp"}, +{"hassle", {NULL}, 375, "tcp"}, +{"hassle", {NULL}, 375, "udp"}, +{"nip", {NULL}, 376, "tcp"}, +{"nip", {NULL}, 376, "udp"}, +{"tnETOS", {NULL}, 377, "tcp"}, +{"tnETOS", {NULL}, 377, "udp"}, +{"dsETOS", {NULL}, 378, "tcp"}, +{"dsETOS", {NULL}, 378, "udp"}, +{"is99c", {NULL}, 379, "tcp"}, +{"is99c", {NULL}, 379, "udp"}, +{"is99s", {NULL}, 380, "tcp"}, +{"is99s", {NULL}, 380, "udp"}, +{"hp-collector", {NULL}, 381, "tcp"}, +{"hp-collector", {NULL}, 381, "udp"}, +{"hp-managed-node", {NULL}, 382, "tcp"}, +{"hp-managed-node", {NULL}, 382, "udp"}, +{"hp-alarm-mgr", {NULL}, 383, "tcp"}, +{"hp-alarm-mgr", {NULL}, 383, "udp"}, +{"arns", {NULL}, 384, "tcp"}, +{"arns", {NULL}, 384, "udp"}, +{"ibm-app", {NULL}, 385, "tcp"}, +{"ibm-app", {NULL}, 385, "udp"}, +{"asa", {NULL}, 386, "tcp"}, +{"asa", {NULL}, 386, "udp"}, +{"aurp", {NULL}, 387, "tcp"}, +{"aurp", {NULL}, 387, "udp"}, +{"unidata-ldm", {NULL}, 388, "tcp"}, +{"unidata-ldm", {NULL}, 388, "udp"}, +{"ldap", {NULL}, 389, "tcp"}, +{"ldap", {NULL}, 389, "udp"}, +{"uis", {NULL}, 390, "tcp"}, +{"uis", {NULL}, 390, "udp"}, +{"synotics-relay", {NULL}, 391, "tcp"}, +{"synotics-relay", {NULL}, 391, "udp"}, +{"synotics-broker", {NULL}, 392, "tcp"}, +{"synotics-broker", {NULL}, 392, "udp"}, +{"meta5", {NULL}, 393, "tcp"}, +{"meta5", {NULL}, 393, "udp"}, +{"embl-ndt", {NULL}, 394, "tcp"}, +{"embl-ndt", {NULL}, 394, "udp"}, +{"netcp", {NULL}, 395, "tcp"}, +{"netcp", {NULL}, 395, "udp"}, +{"netware-ip", {NULL}, 396, "tcp"}, +{"netware-ip", {NULL}, 396, "udp"}, +{"mptn", {NULL}, 397, "tcp"}, +{"mptn", {NULL}, 397, "udp"}, +{"kryptolan", {NULL}, 398, "tcp"}, +{"kryptolan", {NULL}, 398, "udp"}, +{"iso-tsap-c2", {NULL}, 399, "tcp"}, +{"iso-tsap-c2", {NULL}, 399, "udp"}, +{"osb-sd", {NULL}, 400, "tcp"}, +{"osb-sd", {NULL}, 400, "udp"}, +{"ups", {NULL}, 401, "tcp"}, +{"ups", {NULL}, 401, "udp"}, +{"genie", {NULL}, 402, "tcp"}, +{"genie", {NULL}, 402, "udp"}, +{"decap", {NULL}, 403, "tcp"}, +{"decap", {NULL}, 403, "udp"}, +{"nced", {NULL}, 404, "tcp"}, +{"nced", {NULL}, 404, "udp"}, +{"ncld", {NULL}, 405, "tcp"}, +{"ncld", {NULL}, 405, "udp"}, +{"imsp", {NULL}, 406, "tcp"}, +{"imsp", {NULL}, 406, "udp"}, +{"timbuktu", {NULL}, 407, "tcp"}, +{"timbuktu", {NULL}, 407, "udp"}, +{"prm-sm", {NULL}, 408, "tcp"}, +{"prm-sm", {NULL}, 408, "udp"}, +{"prm-nm", {NULL}, 409, "tcp"}, +{"prm-nm", {NULL}, 409, "udp"}, +{"decladebug", {NULL}, 410, "tcp"}, +{"decladebug", {NULL}, 410, "udp"}, +{"rmt", {NULL}, 411, "tcp"}, +{"rmt", {NULL}, 411, "udp"}, +{"synoptics-trap", {NULL}, 412, "tcp"}, +{"synoptics-trap", {NULL}, 412, "udp"}, +{"smsp", {NULL}, 413, "tcp"}, +{"smsp", {NULL}, 413, "udp"}, +{"infoseek", {NULL}, 414, "tcp"}, +{"infoseek", {NULL}, 414, "udp"}, +{"bnet", {NULL}, 415, "tcp"}, +{"bnet", {NULL}, 415, "udp"}, +{"silverplatter", {NULL}, 416, "tcp"}, +{"silverplatter", {NULL}, 416, "udp"}, +{"onmux", {NULL}, 417, "tcp"}, +{"onmux", {NULL}, 417, "udp"}, +{"hyper-g", {NULL}, 418, "tcp"}, +{"hyper-g", {NULL}, 418, "udp"}, +{"ariel1", {NULL}, 419, "tcp"}, +{"ariel1", {NULL}, 419, "udp"}, +{"smpte", {NULL}, 420, "tcp"}, +{"smpte", {NULL}, 420, "udp"}, +{"ariel2", {NULL}, 421, "tcp"}, +{"ariel2", {NULL}, 421, "udp"}, +{"ariel3", {NULL}, 422, "tcp"}, +{"ariel3", {NULL}, 422, "udp"}, +{"opc-job-start", {NULL}, 423, "tcp"}, +{"opc-job-start", {NULL}, 423, "udp"}, +{"opc-job-track", {NULL}, 424, "tcp"}, +{"opc-job-track", {NULL}, 424, "udp"}, +{"icad-el", {NULL}, 425, "tcp"}, +{"icad-el", {NULL}, 425, "udp"}, +{"smartsdp", {NULL}, 426, "tcp"}, +{"smartsdp", {NULL}, 426, "udp"}, +{"svrloc", {NULL}, 427, "tcp"}, +{"svrloc", {NULL}, 427, "udp"}, +{"ocs_cmu", {NULL}, 428, "tcp"}, +{"ocs_cmu", {NULL}, 428, "udp"}, +{"ocs_amu", {NULL}, 429, "tcp"}, +{"ocs_amu", {NULL}, 429, "udp"}, +{"utmpsd", {NULL}, 430, "tcp"}, +{"utmpsd", {NULL}, 430, "udp"}, +{"utmpcd", {NULL}, 431, "tcp"}, +{"utmpcd", {NULL}, 431, "udp"}, +{"iasd", {NULL}, 432, "tcp"}, +{"iasd", {NULL}, 432, "udp"}, +{"nnsp", {NULL}, 433, "tcp"}, +{"nnsp", {NULL}, 433, "udp"}, +{"mobileip-agent", {NULL}, 434, "tcp"}, +{"mobileip-agent", {NULL}, 434, "udp"}, +{"mobilip-mn", {NULL}, 435, "tcp"}, +{"mobilip-mn", {NULL}, 435, "udp"}, +{"dna-cml", {NULL}, 436, "tcp"}, +{"dna-cml", {NULL}, 436, "udp"}, +{"comscm", {NULL}, 437, "tcp"}, +{"comscm", {NULL}, 437, "udp"}, +{"dsfgw", {NULL}, 438, "tcp"}, +{"dsfgw", {NULL}, 438, "udp"}, +{"dasp", {NULL}, 439, "tcp"}, +{"dasp", {NULL}, 439, "udp"}, +{"sgcp", {NULL}, 440, "tcp"}, +{"sgcp", {NULL}, 440, "udp"}, +{"decvms-sysmgt", {NULL}, 441, "tcp"}, +{"decvms-sysmgt", {NULL}, 441, "udp"}, +{"cvc_hostd", {NULL}, 442, "tcp"}, +{"cvc_hostd", {NULL}, 442, "udp"}, +{"https", {NULL}, 443, "tcp"}, +{"https", {NULL}, 443, "udp"}, +{"https", {NULL}, 443, "sctp"}, +{"snpp", {NULL}, 444, "tcp"}, +{"snpp", {NULL}, 444, "udp"}, +{"microsoft-ds", {NULL}, 445, "tcp"}, +{"microsoft-ds", {NULL}, 445, "udp"}, +{"ddm-rdb", {NULL}, 446, "tcp"}, +{"ddm-rdb", {NULL}, 446, "udp"}, +{"ddm-dfm", {NULL}, 447, "tcp"}, +{"ddm-dfm", {NULL}, 447, "udp"}, +{"ddm-ssl", {NULL}, 448, "tcp"}, +{"ddm-ssl", {NULL}, 448, "udp"}, +{"as-servermap", {NULL}, 449, "tcp"}, +{"as-servermap", {NULL}, 449, "udp"}, +{"tserver", {NULL}, 450, "tcp"}, +{"tserver", {NULL}, 450, "udp"}, +{"sfs-smp-net", {NULL}, 451, "tcp"}, +{"sfs-smp-net", {NULL}, 451, "udp"}, +{"sfs-config", {NULL}, 452, "tcp"}, +{"sfs-config", {NULL}, 452, "udp"}, +{"creativeserver", {NULL}, 453, "tcp"}, +{"creativeserver", {NULL}, 453, "udp"}, +{"contentserver", {NULL}, 454, "tcp"}, +{"contentserver", {NULL}, 454, "udp"}, +{"creativepartnr", {NULL}, 455, "tcp"}, +{"creativepartnr", {NULL}, 455, "udp"}, +{"macon-tcp", {NULL}, 456, "tcp"}, +{"macon-udp", {NULL}, 456, "udp"}, +{"scohelp", {NULL}, 457, "tcp"}, +{"scohelp", {NULL}, 457, "udp"}, +{"appleqtc", {NULL}, 458, "tcp"}, +{"appleqtc", {NULL}, 458, "udp"}, +{"ampr-rcmd", {NULL}, 459, "tcp"}, +{"ampr-rcmd", {NULL}, 459, "udp"}, +{"skronk", {NULL}, 460, "tcp"}, +{"skronk", {NULL}, 460, "udp"}, +{"datasurfsrv", {NULL}, 461, "tcp"}, +{"datasurfsrv", {NULL}, 461, "udp"}, +{"datasurfsrvsec", {NULL}, 462, "tcp"}, +{"datasurfsrvsec", {NULL}, 462, "udp"}, +{"alpes", {NULL}, 463, "tcp"}, +{"alpes", {NULL}, 463, "udp"}, +{"kpasswd", {NULL}, 464, "tcp"}, +{"kpasswd", {NULL}, 464, "udp"}, +{"urd", {NULL}, 465, "tcp"}, +{"igmpv3lite", {NULL}, 465, "udp"}, +{"digital-vrc", {NULL}, 466, "tcp"}, +{"digital-vrc", {NULL}, 466, "udp"}, +{"mylex-mapd", {NULL}, 467, "tcp"}, +{"mylex-mapd", {NULL}, 467, "udp"}, +{"photuris", {NULL}, 468, "tcp"}, +{"photuris", {NULL}, 468, "udp"}, +{"rcp", {NULL}, 469, "tcp"}, +{"rcp", {NULL}, 469, "udp"}, +{"scx-proxy", {NULL}, 470, "tcp"}, +{"scx-proxy", {NULL}, 470, "udp"}, +{"mondex", {NULL}, 471, "tcp"}, +{"mondex", {NULL}, 471, "udp"}, +{"ljk-login", {NULL}, 472, "tcp"}, +{"ljk-login", {NULL}, 472, "udp"}, +{"hybrid-pop", {NULL}, 473, "tcp"}, +{"hybrid-pop", {NULL}, 473, "udp"}, +{"tn-tl-w1", {NULL}, 474, "tcp"}, +{"tn-tl-w2", {NULL}, 474, "udp"}, +{"tcpnethaspsrv", {NULL}, 475, "tcp"}, +{"tcpnethaspsrv", {NULL}, 475, "udp"}, +{"tn-tl-fd1", {NULL}, 476, "tcp"}, +{"tn-tl-fd1", {NULL}, 476, "udp"}, +{"ss7ns", {NULL}, 477, "tcp"}, +{"ss7ns", {NULL}, 477, "udp"}, +{"spsc", {NULL}, 478, "tcp"}, +{"spsc", {NULL}, 478, "udp"}, +{"iafserver", {NULL}, 479, "tcp"}, +{"iafserver", {NULL}, 479, "udp"}, +{"iafdbase", {NULL}, 480, "tcp"}, +{"iafdbase", {NULL}, 480, "udp"}, +{"ph", {NULL}, 481, "tcp"}, +{"ph", {NULL}, 481, "udp"}, +{"bgs-nsi", {NULL}, 482, "tcp"}, +{"bgs-nsi", {NULL}, 482, "udp"}, +{"ulpnet", {NULL}, 483, "tcp"}, +{"ulpnet", {NULL}, 483, "udp"}, +{"integra-sme", {NULL}, 484, "tcp"}, +{"integra-sme", {NULL}, 484, "udp"}, +{"powerburst", {NULL}, 485, "tcp"}, +{"powerburst", {NULL}, 485, "udp"}, +{"avian", {NULL}, 486, "tcp"}, +{"avian", {NULL}, 486, "udp"}, +{"saft", {NULL}, 487, "tcp"}, +{"saft", {NULL}, 487, "udp"}, +{"gss-http", {NULL}, 488, "tcp"}, +{"gss-http", {NULL}, 488, "udp"}, +{"nest-protocol", {NULL}, 489, "tcp"}, +{"nest-protocol", {NULL}, 489, "udp"}, +{"micom-pfs", {NULL}, 490, "tcp"}, +{"micom-pfs", {NULL}, 490, "udp"}, +{"go-login", {NULL}, 491, "tcp"}, +{"go-login", {NULL}, 491, "udp"}, +{"ticf-1", {NULL}, 492, "tcp"}, +{"ticf-1", {NULL}, 492, "udp"}, +{"ticf-2", {NULL}, 493, "tcp"}, +{"ticf-2", {NULL}, 493, "udp"}, +{"pov-ray", {NULL}, 494, "tcp"}, +{"pov-ray", {NULL}, 494, "udp"}, +{"intecourier", {NULL}, 495, "tcp"}, +{"intecourier", {NULL}, 495, "udp"}, +{"pim-rp-disc", {NULL}, 496, "tcp"}, +{"pim-rp-disc", {NULL}, 496, "udp"}, +{"dantz", {NULL}, 497, "tcp"}, +{"dantz", {NULL}, 497, "udp"}, +{"siam", {NULL}, 498, "tcp"}, +{"siam", {NULL}, 498, "udp"}, +{"iso-ill", {NULL}, 499, "tcp"}, +{"iso-ill", {NULL}, 499, "udp"}, +{"isakmp", {NULL}, 500, "tcp"}, +{"isakmp", {NULL}, 500, "udp"}, +{"stmf", {NULL}, 501, "tcp"}, +{"stmf", {NULL}, 501, "udp"}, +{"asa-appl-proto", {NULL}, 502, "tcp"}, +{"asa-appl-proto", {NULL}, 502, "udp"}, +{"intrinsa", {NULL}, 503, "tcp"}, +{"intrinsa", {NULL}, 503, "udp"}, +{"citadel", {NULL}, 504, "tcp"}, +{"citadel", {NULL}, 504, "udp"}, +{"mailbox-lm", {NULL}, 505, "tcp"}, +{"mailbox-lm", {NULL}, 505, "udp"}, +{"ohimsrv", {NULL}, 506, "tcp"}, +{"ohimsrv", {NULL}, 506, "udp"}, +{"crs", {NULL}, 507, "tcp"}, +{"crs", {NULL}, 507, "udp"}, +{"xvttp", {NULL}, 508, "tcp"}, +{"xvttp", {NULL}, 508, "udp"}, +{"snare", {NULL}, 509, "tcp"}, +{"snare", {NULL}, 509, "udp"}, +{"fcp", {NULL}, 510, "tcp"}, +{"fcp", {NULL}, 510, "udp"}, +{"passgo", {NULL}, 511, "tcp"}, +{"passgo", {NULL}, 511, "udp"}, +{"exec", {NULL}, 512, "tcp"}, +{"comsat", {NULL}, 512, "udp"}, +{"biff", {NULL}, 512, "udp"}, +{"login", {NULL}, 513, "tcp"}, +{"who", {NULL}, 513, "udp"}, +{"shell", {NULL}, 514, "tcp"}, +{"syslog", {NULL}, 514, "udp"}, +{"printer", {NULL}, 515, "tcp"}, +{"printer", {NULL}, 515, "udp"}, +{"videotex", {NULL}, 516, "tcp"}, +{"videotex", {NULL}, 516, "udp"}, +{"talk", {NULL}, 517, "tcp"}, +{"talk", {NULL}, 517, "udp"}, +{"ntalk", {NULL}, 518, "tcp"}, +{"ntalk", {NULL}, 518, "udp"}, +{"utime", {NULL}, 519, "tcp"}, +{"utime", {NULL}, 519, "udp"}, +{"efs", {NULL}, 520, "tcp"}, +{"router", {NULL}, 520, "udp"}, +{"ripng", {NULL}, 521, "tcp"}, +{"ripng", {NULL}, 521, "udp"}, +{"ulp", {NULL}, 522, "tcp"}, +{"ulp", {NULL}, 522, "udp"}, +{"ibm-db2", {NULL}, 523, "tcp"}, +{"ibm-db2", {NULL}, 523, "udp"}, +{"ncp", {NULL}, 524, "tcp"}, +{"ncp", {NULL}, 524, "udp"}, +{"timed", {NULL}, 525, "tcp"}, +{"timed", {NULL}, 525, "udp"}, +{"tempo", {NULL}, 526, "tcp"}, +{"tempo", {NULL}, 526, "udp"}, +{"stx", {NULL}, 527, "tcp"}, +{"stx", {NULL}, 527, "udp"}, +{"custix", {NULL}, 528, "tcp"}, +{"custix", {NULL}, 528, "udp"}, +{"irc-serv", {NULL}, 529, "tcp"}, +{"irc-serv", {NULL}, 529, "udp"}, +{"courier", {NULL}, 530, "tcp"}, +{"courier", {NULL}, 530, "udp"}, +{"conference", {NULL}, 531, "tcp"}, +{"conference", {NULL}, 531, "udp"}, +{"netnews", {NULL}, 532, "tcp"}, +{"netnews", {NULL}, 532, "udp"}, +{"netwall", {NULL}, 533, "tcp"}, +{"netwall", {NULL}, 533, "udp"}, +{"windream", {NULL}, 534, "tcp"}, +{"windream", {NULL}, 534, "udp"}, +{"iiop", {NULL}, 535, "tcp"}, +{"iiop", {NULL}, 535, "udp"}, +{"opalis-rdv", {NULL}, 536, "tcp"}, +{"opalis-rdv", {NULL}, 536, "udp"}, +{"nmsp", {NULL}, 537, "tcp"}, +{"nmsp", {NULL}, 537, "udp"}, +{"gdomap", {NULL}, 538, "tcp"}, +{"gdomap", {NULL}, 538, "udp"}, +{"apertus-ldp", {NULL}, 539, "tcp"}, +{"apertus-ldp", {NULL}, 539, "udp"}, +{"uucp", {NULL}, 540, "tcp"}, +{"uucp", {NULL}, 540, "udp"}, +{"uucp-rlogin", {NULL}, 541, "tcp"}, +{"uucp-rlogin", {NULL}, 541, "udp"}, +{"commerce", {NULL}, 542, "tcp"}, +{"commerce", {NULL}, 542, "udp"}, +{"klogin", {NULL}, 543, "tcp"}, +{"klogin", {NULL}, 543, "udp"}, +{"kshell", {NULL}, 544, "tcp"}, +{"kshell", {NULL}, 544, "udp"}, +{"appleqtcsrvr", {NULL}, 545, "tcp"}, +{"appleqtcsrvr", {NULL}, 545, "udp"}, +{"dhcpv6-client", {NULL}, 546, "tcp"}, +{"dhcpv6-client", {NULL}, 546, "udp"}, +{"dhcpv6-server", {NULL}, 547, "tcp"}, +{"dhcpv6-server", {NULL}, 547, "udp"}, +{"afpovertcp", {NULL}, 548, "tcp"}, +{"afpovertcp", {NULL}, 548, "udp"}, +{"idfp", {NULL}, 549, "tcp"}, +{"idfp", {NULL}, 549, "udp"}, +{"new-rwho", {NULL}, 550, "tcp"}, +{"new-rwho", {NULL}, 550, "udp"}, +{"cybercash", {NULL}, 551, "tcp"}, +{"cybercash", {NULL}, 551, "udp"}, +{"devshr-nts", {NULL}, 552, "tcp"}, +{"devshr-nts", {NULL}, 552, "udp"}, +{"pirp", {NULL}, 553, "tcp"}, +{"pirp", {NULL}, 553, "udp"}, +{"rtsp", {NULL}, 554, "tcp"}, +{"rtsp", {NULL}, 554, "udp"}, +{"dsf", {NULL}, 555, "tcp"}, +{"dsf", {NULL}, 555, "udp"}, +{"remotefs", {NULL}, 556, "tcp"}, +{"remotefs", {NULL}, 556, "udp"}, +{"openvms-sysipc", {NULL}, 557, "tcp"}, +{"openvms-sysipc", {NULL}, 557, "udp"}, +{"sdnskmp", {NULL}, 558, "tcp"}, +{"sdnskmp", {NULL}, 558, "udp"}, +{"teedtap", {NULL}, 559, "tcp"}, +{"teedtap", {NULL}, 559, "udp"}, +{"rmonitor", {NULL}, 560, "tcp"}, +{"rmonitor", {NULL}, 560, "udp"}, +{"monitor", {NULL}, 561, "tcp"}, +{"monitor", {NULL}, 561, "udp"}, +{"chshell", {NULL}, 562, "tcp"}, +{"chshell", {NULL}, 562, "udp"}, +{"nntps", {NULL}, 563, "tcp"}, +{"nntps", {NULL}, 563, "udp"}, +{"9pfs", {NULL}, 564, "tcp"}, +{"9pfs", {NULL}, 564, "udp"}, +{"whoami", {NULL}, 565, "tcp"}, +{"whoami", {NULL}, 565, "udp"}, +{"streettalk", {NULL}, 566, "tcp"}, +{"streettalk", {NULL}, 566, "udp"}, +{"banyan-rpc", {NULL}, 567, "tcp"}, +{"banyan-rpc", {NULL}, 567, "udp"}, +{"ms-shuttle", {NULL}, 568, "tcp"}, +{"ms-shuttle", {NULL}, 568, "udp"}, +{"ms-rome", {NULL}, 569, "tcp"}, +{"ms-rome", {NULL}, 569, "udp"}, +{"meter", {NULL}, 570, "tcp"}, +{"meter", {NULL}, 570, "udp"}, +{"meter", {NULL}, 571, "tcp"}, +{"meter", {NULL}, 571, "udp"}, +{"sonar", {NULL}, 572, "tcp"}, +{"sonar", {NULL}, 572, "udp"}, +{"banyan-vip", {NULL}, 573, "tcp"}, +{"banyan-vip", {NULL}, 573, "udp"}, +{"ftp-agent", {NULL}, 574, "tcp"}, +{"ftp-agent", {NULL}, 574, "udp"}, +{"vemmi", {NULL}, 575, "tcp"}, +{"vemmi", {NULL}, 575, "udp"}, +{"ipcd", {NULL}, 576, "tcp"}, +{"ipcd", {NULL}, 576, "udp"}, +{"vnas", {NULL}, 577, "tcp"}, +{"vnas", {NULL}, 577, "udp"}, +{"ipdd", {NULL}, 578, "tcp"}, +{"ipdd", {NULL}, 578, "udp"}, +{"decbsrv", {NULL}, 579, "tcp"}, +{"decbsrv", {NULL}, 579, "udp"}, +{"sntp-heartbeat", {NULL}, 580, "tcp"}, +{"sntp-heartbeat", {NULL}, 580, "udp"}, +{"bdp", {NULL}, 581, "tcp"}, +{"bdp", {NULL}, 581, "udp"}, +{"scc-security", {NULL}, 582, "tcp"}, +{"scc-security", {NULL}, 582, "udp"}, +{"philips-vc", {NULL}, 583, "tcp"}, +{"philips-vc", {NULL}, 583, "udp"}, +{"keyserver", {NULL}, 584, "tcp"}, +{"keyserver", {NULL}, 584, "udp"}, +{"password-chg", {NULL}, 586, "tcp"}, +{"password-chg", {NULL}, 586, "udp"}, +{"submission", {NULL}, 587, "tcp"}, +{"submission", {NULL}, 587, "udp"}, +{"cal", {NULL}, 588, "tcp"}, +{"cal", {NULL}, 588, "udp"}, +{"eyelink", {NULL}, 589, "tcp"}, +{"eyelink", {NULL}, 589, "udp"}, +{"tns-cml", {NULL}, 590, "tcp"}, +{"tns-cml", {NULL}, 590, "udp"}, +{"http-alt", {NULL}, 591, "tcp"}, +{"http-alt", {NULL}, 591, "udp"}, +{"eudora-set", {NULL}, 592, "tcp"}, +{"eudora-set", {NULL}, 592, "udp"}, +{"http-rpc-epmap", {NULL}, 593, "tcp"}, +{"http-rpc-epmap", {NULL}, 593, "udp"}, +{"tpip", {NULL}, 594, "tcp"}, +{"tpip", {NULL}, 594, "udp"}, +{"cab-protocol", {NULL}, 595, "tcp"}, +{"cab-protocol", {NULL}, 595, "udp"}, +{"smsd", {NULL}, 596, "tcp"}, +{"smsd", {NULL}, 596, "udp"}, +{"ptcnameservice", {NULL}, 597, "tcp"}, +{"ptcnameservice", {NULL}, 597, "udp"}, +{"sco-websrvrmg3", {NULL}, 598, "tcp"}, +{"sco-websrvrmg3", {NULL}, 598, "udp"}, +{"acp", {NULL}, 599, "tcp"}, +{"acp", {NULL}, 599, "udp"}, +{"ipcserver", {NULL}, 600, "tcp"}, +{"ipcserver", {NULL}, 600, "udp"}, +{"syslog-conn", {NULL}, 601, "tcp"}, +{"syslog-conn", {NULL}, 601, "udp"}, +{"xmlrpc-beep", {NULL}, 602, "tcp"}, +{"xmlrpc-beep", {NULL}, 602, "udp"}, +{"idxp", {NULL}, 603, "tcp"}, +{"idxp", {NULL}, 603, "udp"}, +{"tunnel", {NULL}, 604, "tcp"}, +{"tunnel", {NULL}, 604, "udp"}, +{"soap-beep", {NULL}, 605, "tcp"}, +{"soap-beep", {NULL}, 605, "udp"}, +{"urm", {NULL}, 606, "tcp"}, +{"urm", {NULL}, 606, "udp"}, +{"nqs", {NULL}, 607, "tcp"}, +{"nqs", {NULL}, 607, "udp"}, +{"sift-uft", {NULL}, 608, "tcp"}, +{"sift-uft", {NULL}, 608, "udp"}, +{"npmp-trap", {NULL}, 609, "tcp"}, +{"npmp-trap", {NULL}, 609, "udp"}, +{"npmp-local", {NULL}, 610, "tcp"}, +{"npmp-local", {NULL}, 610, "udp"}, +{"npmp-gui", {NULL}, 611, "tcp"}, +{"npmp-gui", {NULL}, 611, "udp"}, +{"hmmp-ind", {NULL}, 612, "tcp"}, +{"hmmp-ind", {NULL}, 612, "udp"}, +{"hmmp-op", {NULL}, 613, "tcp"}, +{"hmmp-op", {NULL}, 613, "udp"}, +{"sshell", {NULL}, 614, "tcp"}, +{"sshell", {NULL}, 614, "udp"}, +{"sco-inetmgr", {NULL}, 615, "tcp"}, +{"sco-inetmgr", {NULL}, 615, "udp"}, +{"sco-sysmgr", {NULL}, 616, "tcp"}, +{"sco-sysmgr", {NULL}, 616, "udp"}, +{"sco-dtmgr", {NULL}, 617, "tcp"}, +{"sco-dtmgr", {NULL}, 617, "udp"}, +{"dei-icda", {NULL}, 618, "tcp"}, +{"dei-icda", {NULL}, 618, "udp"}, +{"compaq-evm", {NULL}, 619, "tcp"}, +{"compaq-evm", {NULL}, 619, "udp"}, +{"sco-websrvrmgr", {NULL}, 620, "tcp"}, +{"sco-websrvrmgr", {NULL}, 620, "udp"}, +{"escp-ip", {NULL}, 621, "tcp"}, +{"escp-ip", {NULL}, 621, "udp"}, +{"collaborator", {NULL}, 622, "tcp"}, +{"collaborator", {NULL}, 622, "udp"}, +{"oob-ws-http", {NULL}, 623, "tcp"}, +{"asf-rmcp", {NULL}, 623, "udp"}, +{"cryptoadmin", {NULL}, 624, "tcp"}, +{"cryptoadmin", {NULL}, 624, "udp"}, +{"dec_dlm", {NULL}, 625, "tcp"}, +{"dec_dlm", {NULL}, 625, "udp"}, +{"asia", {NULL}, 626, "tcp"}, +{"asia", {NULL}, 626, "udp"}, +{"passgo-tivoli", {NULL}, 627, "tcp"}, +{"passgo-tivoli", {NULL}, 627, "udp"}, +{"qmqp", {NULL}, 628, "tcp"}, +{"qmqp", {NULL}, 628, "udp"}, +{"3com-amp3", {NULL}, 629, "tcp"}, +{"3com-amp3", {NULL}, 629, "udp"}, +{"rda", {NULL}, 630, "tcp"}, +{"rda", {NULL}, 630, "udp"}, +{"ipp", {NULL}, 631, "tcp"}, +{"ipp", {NULL}, 631, "udp"}, +{"bmpp", {NULL}, 632, "tcp"}, +{"bmpp", {NULL}, 632, "udp"}, +{"servstat", {NULL}, 633, "tcp"}, +{"servstat", {NULL}, 633, "udp"}, +{"ginad", {NULL}, 634, "tcp"}, +{"ginad", {NULL}, 634, "udp"}, +{"rlzdbase", {NULL}, 635, "tcp"}, +{"rlzdbase", {NULL}, 635, "udp"}, +{"ldaps", {NULL}, 636, "tcp"}, +{"ldaps", {NULL}, 636, "udp"}, +{"lanserver", {NULL}, 637, "tcp"}, +{"lanserver", {NULL}, 637, "udp"}, +{"mcns-sec", {NULL}, 638, "tcp"}, +{"mcns-sec", {NULL}, 638, "udp"}, +{"msdp", {NULL}, 639, "tcp"}, +{"msdp", {NULL}, 639, "udp"}, +{"entrust-sps", {NULL}, 640, "tcp"}, +{"entrust-sps", {NULL}, 640, "udp"}, +{"repcmd", {NULL}, 641, "tcp"}, +{"repcmd", {NULL}, 641, "udp"}, +{"esro-emsdp", {NULL}, 642, "tcp"}, +{"esro-emsdp", {NULL}, 642, "udp"}, +{"sanity", {NULL}, 643, "tcp"}, +{"sanity", {NULL}, 643, "udp"}, +{"dwr", {NULL}, 644, "tcp"}, +{"dwr", {NULL}, 644, "udp"}, +{"pssc", {NULL}, 645, "tcp"}, +{"pssc", {NULL}, 645, "udp"}, +{"ldp", {NULL}, 646, "tcp"}, +{"ldp", {NULL}, 646, "udp"}, +{"dhcp-failover", {NULL}, 647, "tcp"}, +{"dhcp-failover", {NULL}, 647, "udp"}, +{"rrp", {NULL}, 648, "tcp"}, +{"rrp", {NULL}, 648, "udp"}, +{"cadview-3d", {NULL}, 649, "tcp"}, +{"cadview-3d", {NULL}, 649, "udp"}, +{"obex", {NULL}, 650, "tcp"}, +{"obex", {NULL}, 650, "udp"}, +{"ieee-mms", {NULL}, 651, "tcp"}, +{"ieee-mms", {NULL}, 651, "udp"}, +{"hello-port", {NULL}, 652, "tcp"}, +{"hello-port", {NULL}, 652, "udp"}, +{"repscmd", {NULL}, 653, "tcp"}, +{"repscmd", {NULL}, 653, "udp"}, +{"aodv", {NULL}, 654, "tcp"}, +{"aodv", {NULL}, 654, "udp"}, +{"tinc", {NULL}, 655, "tcp"}, +{"tinc", {NULL}, 655, "udp"}, +{"spmp", {NULL}, 656, "tcp"}, +{"spmp", {NULL}, 656, "udp"}, +{"rmc", {NULL}, 657, "tcp"}, +{"rmc", {NULL}, 657, "udp"}, +{"tenfold", {NULL}, 658, "tcp"}, +{"tenfold", {NULL}, 658, "udp"}, +{"mac-srvr-admin", {NULL}, 660, "tcp"}, +{"mac-srvr-admin", {NULL}, 660, "udp"}, +{"hap", {NULL}, 661, "tcp"}, +{"hap", {NULL}, 661, "udp"}, +{"pftp", {NULL}, 662, "tcp"}, +{"pftp", {NULL}, 662, "udp"}, +{"purenoise", {NULL}, 663, "tcp"}, +{"purenoise", {NULL}, 663, "udp"}, +{"oob-ws-https", {NULL}, 664, "tcp"}, +{"asf-secure-rmcp", {NULL}, 664, "udp"}, +{"sun-dr", {NULL}, 665, "tcp"}, +{"sun-dr", {NULL}, 665, "udp"}, +{"mdqs", {NULL}, 666, "tcp"}, +{"mdqs", {NULL}, 666, "udp"}, +{"doom", {NULL}, 666, "tcp"}, +{"doom", {NULL}, 666, "udp"}, +{"disclose", {NULL}, 667, "tcp"}, +{"disclose", {NULL}, 667, "udp"}, +{"mecomm", {NULL}, 668, "tcp"}, +{"mecomm", {NULL}, 668, "udp"}, +{"meregister", {NULL}, 669, "tcp"}, +{"meregister", {NULL}, 669, "udp"}, +{"vacdsm-sws", {NULL}, 670, "tcp"}, +{"vacdsm-sws", {NULL}, 670, "udp"}, +{"vacdsm-app", {NULL}, 671, "tcp"}, +{"vacdsm-app", {NULL}, 671, "udp"}, +{"vpps-qua", {NULL}, 672, "tcp"}, +{"vpps-qua", {NULL}, 672, "udp"}, +{"cimplex", {NULL}, 673, "tcp"}, +{"cimplex", {NULL}, 673, "udp"}, +{"acap", {NULL}, 674, "tcp"}, +{"acap", {NULL}, 674, "udp"}, +{"dctp", {NULL}, 675, "tcp"}, +{"dctp", {NULL}, 675, "udp"}, +{"vpps-via", {NULL}, 676, "tcp"}, +{"vpps-via", {NULL}, 676, "udp"}, +{"vpp", {NULL}, 677, "tcp"}, +{"vpp", {NULL}, 677, "udp"}, +{"ggf-ncp", {NULL}, 678, "tcp"}, +{"ggf-ncp", {NULL}, 678, "udp"}, +{"mrm", {NULL}, 679, "tcp"}, +{"mrm", {NULL}, 679, "udp"}, +{"entrust-aaas", {NULL}, 680, "tcp"}, +{"entrust-aaas", {NULL}, 680, "udp"}, +{"entrust-aams", {NULL}, 681, "tcp"}, +{"entrust-aams", {NULL}, 681, "udp"}, +{"xfr", {NULL}, 682, "tcp"}, +{"xfr", {NULL}, 682, "udp"}, +{"corba-iiop", {NULL}, 683, "tcp"}, +{"corba-iiop", {NULL}, 683, "udp"}, +{"corba-iiop-ssl", {NULL}, 684, "tcp"}, +{"corba-iiop-ssl", {NULL}, 684, "udp"}, +{"mdc-portmapper", {NULL}, 685, "tcp"}, +{"mdc-portmapper", {NULL}, 685, "udp"}, +{"hcp-wismar", {NULL}, 686, "tcp"}, +{"hcp-wismar", {NULL}, 686, "udp"}, +{"asipregistry", {NULL}, 687, "tcp"}, +{"asipregistry", {NULL}, 687, "udp"}, +{"realm-rusd", {NULL}, 688, "tcp"}, +{"realm-rusd", {NULL}, 688, "udp"}, +{"nmap", {NULL}, 689, "tcp"}, +{"nmap", {NULL}, 689, "udp"}, +{"vatp", {NULL}, 690, "tcp"}, +{"vatp", {NULL}, 690, "udp"}, +{"msexch-routing", {NULL}, 691, "tcp"}, +{"msexch-routing", {NULL}, 691, "udp"}, +{"hyperwave-isp", {NULL}, 692, "tcp"}, +{"hyperwave-isp", {NULL}, 692, "udp"}, +{"connendp", {NULL}, 693, "tcp"}, +{"connendp", {NULL}, 693, "udp"}, +{"ha-cluster", {NULL}, 694, "tcp"}, +{"ha-cluster", {NULL}, 694, "udp"}, +{"ieee-mms-ssl", {NULL}, 695, "tcp"}, +{"ieee-mms-ssl", {NULL}, 695, "udp"}, +{"rushd", {NULL}, 696, "tcp"}, +{"rushd", {NULL}, 696, "udp"}, +{"uuidgen", {NULL}, 697, "tcp"}, +{"uuidgen", {NULL}, 697, "udp"}, +{"olsr", {NULL}, 698, "tcp"}, +{"olsr", {NULL}, 698, "udp"}, +{"accessnetwork", {NULL}, 699, "tcp"}, +{"accessnetwork", {NULL}, 699, "udp"}, +{"epp", {NULL}, 700, "tcp"}, +{"epp", {NULL}, 700, "udp"}, +{"lmp", {NULL}, 701, "tcp"}, +{"lmp", {NULL}, 701, "udp"}, +{"iris-beep", {NULL}, 702, "tcp"}, +{"iris-beep", {NULL}, 702, "udp"}, +{"elcsd", {NULL}, 704, "tcp"}, +{"elcsd", {NULL}, 704, "udp"}, +{"agentx", {NULL}, 705, "tcp"}, +{"agentx", {NULL}, 705, "udp"}, +{"silc", {NULL}, 706, "tcp"}, +{"silc", {NULL}, 706, "udp"}, +{"borland-dsj", {NULL}, 707, "tcp"}, +{"borland-dsj", {NULL}, 707, "udp"}, +{"entrust-kmsh", {NULL}, 709, "tcp"}, +{"entrust-kmsh", {NULL}, 709, "udp"}, +{"entrust-ash", {NULL}, 710, "tcp"}, +{"entrust-ash", {NULL}, 710, "udp"}, +{"cisco-tdp", {NULL}, 711, "tcp"}, +{"cisco-tdp", {NULL}, 711, "udp"}, +{"tbrpf", {NULL}, 712, "tcp"}, +{"tbrpf", {NULL}, 712, "udp"}, +{"iris-xpc", {NULL}, 713, "tcp"}, +{"iris-xpc", {NULL}, 713, "udp"}, +{"iris-xpcs", {NULL}, 714, "tcp"}, +{"iris-xpcs", {NULL}, 714, "udp"}, +{"iris-lwz", {NULL}, 715, "tcp"}, +{"iris-lwz", {NULL}, 715, "udp"}, +{"pana", {NULL}, 716, "udp"}, +{"netviewdm1", {NULL}, 729, "tcp"}, +{"netviewdm1", {NULL}, 729, "udp"}, +{"netviewdm2", {NULL}, 730, "tcp"}, +{"netviewdm2", {NULL}, 730, "udp"}, +{"netviewdm3", {NULL}, 731, "tcp"}, +{"netviewdm3", {NULL}, 731, "udp"}, +{"netgw", {NULL}, 741, "tcp"}, +{"netgw", {NULL}, 741, "udp"}, +{"netrcs", {NULL}, 742, "tcp"}, +{"netrcs", {NULL}, 742, "udp"}, +{"flexlm", {NULL}, 744, "tcp"}, +{"flexlm", {NULL}, 744, "udp"}, +{"fujitsu-dev", {NULL}, 747, "tcp"}, +{"fujitsu-dev", {NULL}, 747, "udp"}, +{"ris-cm", {NULL}, 748, "tcp"}, +{"ris-cm", {NULL}, 748, "udp"}, +{"kerberos-adm", {NULL}, 749, "tcp"}, +{"kerberos-adm", {NULL}, 749, "udp"}, +{"rfile", {NULL}, 750, "tcp"}, +{"loadav", {NULL}, 750, "udp"}, +{"kerberos-iv", {NULL}, 750, "udp"}, +{"pump", {NULL}, 751, "tcp"}, +{"pump", {NULL}, 751, "udp"}, +{"qrh", {NULL}, 752, "tcp"}, +{"qrh", {NULL}, 752, "udp"}, +{"rrh", {NULL}, 753, "tcp"}, +{"rrh", {NULL}, 753, "udp"}, +{"tell", {NULL}, 754, "tcp"}, +{"tell", {NULL}, 754, "udp"}, +{"nlogin", {NULL}, 758, "tcp"}, +{"nlogin", {NULL}, 758, "udp"}, +{"con", {NULL}, 759, "tcp"}, +{"con", {NULL}, 759, "udp"}, +{"ns", {NULL}, 760, "tcp"}, +{"ns", {NULL}, 760, "udp"}, +{"rxe", {NULL}, 761, "tcp"}, +{"rxe", {NULL}, 761, "udp"}, +{"quotad", {NULL}, 762, "tcp"}, +{"quotad", {NULL}, 762, "udp"}, +{"cycleserv", {NULL}, 763, "tcp"}, +{"cycleserv", {NULL}, 763, "udp"}, +{"omserv", {NULL}, 764, "tcp"}, +{"omserv", {NULL}, 764, "udp"}, +{"webster", {NULL}, 765, "tcp"}, +{"webster", {NULL}, 765, "udp"}, +{"phonebook", {NULL}, 767, "tcp"}, +{"phonebook", {NULL}, 767, "udp"}, +{"vid", {NULL}, 769, "tcp"}, +{"vid", {NULL}, 769, "udp"}, +{"cadlock", {NULL}, 770, "tcp"}, +{"cadlock", {NULL}, 770, "udp"}, +{"rtip", {NULL}, 771, "tcp"}, +{"rtip", {NULL}, 771, "udp"}, +{"cycleserv2", {NULL}, 772, "tcp"}, +{"cycleserv2", {NULL}, 772, "udp"}, +{"submit", {NULL}, 773, "tcp"}, +{"notify", {NULL}, 773, "udp"}, +{"rpasswd", {NULL}, 774, "tcp"}, +{"acmaint_dbd", {NULL}, 774, "udp"}, +{"entomb", {NULL}, 775, "tcp"}, +{"acmaint_transd", {NULL}, 775, "udp"}, +{"wpages", {NULL}, 776, "tcp"}, +{"wpages", {NULL}, 776, "udp"}, +{"multiling-http", {NULL}, 777, "tcp"}, +{"multiling-http", {NULL}, 777, "udp"}, +{"wpgs", {NULL}, 780, "tcp"}, +{"wpgs", {NULL}, 780, "udp"}, +{"mdbs_daemon", {NULL}, 800, "tcp"}, +{"mdbs_daemon", {NULL}, 800, "udp"}, +{"device", {NULL}, 801, "tcp"}, +{"device", {NULL}, 801, "udp"}, +{"fcp-udp", {NULL}, 810, "tcp"}, +{"fcp-udp", {NULL}, 810, "udp"}, +{"itm-mcell-s", {NULL}, 828, "tcp"}, +{"itm-mcell-s", {NULL}, 828, "udp"}, +{"pkix-3-ca-ra", {NULL}, 829, "tcp"}, +{"pkix-3-ca-ra", {NULL}, 829, "udp"}, +{"netconf-ssh", {NULL}, 830, "tcp"}, +{"netconf-ssh", {NULL}, 830, "udp"}, +{"netconf-beep", {NULL}, 831, "tcp"}, +{"netconf-beep", {NULL}, 831, "udp"}, +{"netconfsoaphttp", {NULL}, 832, "tcp"}, +{"netconfsoaphttp", {NULL}, 832, "udp"}, +{"netconfsoapbeep", {NULL}, 833, "tcp"}, +{"netconfsoapbeep", {NULL}, 833, "udp"}, +{"dhcp-failover2", {NULL}, 847, "tcp"}, +{"dhcp-failover2", {NULL}, 847, "udp"}, +{"gdoi", {NULL}, 848, "tcp"}, +{"gdoi", {NULL}, 848, "udp"}, +{"iscsi", {NULL}, 860, "tcp"}, +{"iscsi", {NULL}, 860, "udp"}, +{"owamp-control", {NULL}, 861, "tcp"}, +{"owamp-control", {NULL}, 861, "udp"}, +{"twamp-control", {NULL}, 862, "tcp"}, +{"twamp-control", {NULL}, 862, "udp"}, +{"rsync", {NULL}, 873, "tcp"}, +{"rsync", {NULL}, 873, "udp"}, +{"iclcnet-locate", {NULL}, 886, "tcp"}, +{"iclcnet-locate", {NULL}, 886, "udp"}, +{"iclcnet_svinfo", {NULL}, 887, "tcp"}, +{"iclcnet_svinfo", {NULL}, 887, "udp"}, +{"accessbuilder", {NULL}, 888, "tcp"}, +{"accessbuilder", {NULL}, 888, "udp"}, +{"cddbp", {NULL}, 888, "tcp"}, +{"omginitialrefs", {NULL}, 900, "tcp"}, +{"omginitialrefs", {NULL}, 900, "udp"}, +{"smpnameres", {NULL}, 901, "tcp"}, +{"smpnameres", {NULL}, 901, "udp"}, +{"ideafarm-door", {NULL}, 902, "tcp"}, +{"ideafarm-door", {NULL}, 902, "udp"}, +{"ideafarm-panic", {NULL}, 903, "tcp"}, +{"ideafarm-panic", {NULL}, 903, "udp"}, +{"kink", {NULL}, 910, "tcp"}, +{"kink", {NULL}, 910, "udp"}, +{"xact-backup", {NULL}, 911, "tcp"}, +{"xact-backup", {NULL}, 911, "udp"}, +{"apex-mesh", {NULL}, 912, "tcp"}, +{"apex-mesh", {NULL}, 912, "udp"}, +{"apex-edge", {NULL}, 913, "tcp"}, +{"apex-edge", {NULL}, 913, "udp"}, +{"ftps-data", {NULL}, 989, "tcp"}, +{"ftps-data", {NULL}, 989, "udp"}, +{"ftps", {NULL}, 990, "tcp"}, +{"ftps", {NULL}, 990, "udp"}, +{"nas", {NULL}, 991, "tcp"}, +{"nas", {NULL}, 991, "udp"}, +{"telnets", {NULL}, 992, "tcp"}, +{"telnets", {NULL}, 992, "udp"}, +{"imaps", {NULL}, 993, "tcp"}, +{"imaps", {NULL}, 993, "udp"}, +{"ircs", {NULL}, 994, "tcp"}, +{"ircs", {NULL}, 994, "udp"}, +{"pop3s", {NULL}, 995, "tcp"}, +{"pop3s", {NULL}, 995, "udp"}, +{"vsinet", {NULL}, 996, "tcp"}, +{"vsinet", {NULL}, 996, "udp"}, +{"maitrd", {NULL}, 997, "tcp"}, +{"maitrd", {NULL}, 997, "udp"}, +{"busboy", {NULL}, 998, "tcp"}, +{"puparp", {NULL}, 998, "udp"}, +{"garcon", {NULL}, 999, "tcp"}, +{"applix", {NULL}, 999, "udp"}, +{"puprouter", {NULL}, 999, "tcp"}, +{"puprouter", {NULL}, 999, "udp"}, +{"cadlock2", {NULL}, 1000, "tcp"}, +{"cadlock2", {NULL}, 1000, "udp"}, +{"surf", {NULL}, 1010, "tcp"}, +{"surf", {NULL}, 1010, "udp"}, +{"exp1", {NULL}, 1021, "tcp"}, +{"exp1", {NULL}, 1021, "udp"}, +{"exp2", {NULL}, 1022, "tcp"}, +{"exp2", {NULL}, 1022, "udp"}, +#endif /* USE_IANA_WELL_KNOWN_PORTS */ +#ifdef USE_IANA_REGISTERED_PORTS +{"blackjack", {NULL}, 1025, "tcp"}, +{"blackjack", {NULL}, 1025, "udp"}, +{"cap", {NULL}, 1026, "tcp"}, +{"cap", {NULL}, 1026, "udp"}, +{"solid-mux", {NULL}, 1029, "tcp"}, +{"solid-mux", {NULL}, 1029, "udp"}, +{"iad1", {NULL}, 1030, "tcp"}, +{"iad1", {NULL}, 1030, "udp"}, +{"iad2", {NULL}, 1031, "tcp"}, +{"iad2", {NULL}, 1031, "udp"}, +{"iad3", {NULL}, 1032, "tcp"}, +{"iad3", {NULL}, 1032, "udp"}, +{"netinfo-local", {NULL}, 1033, "tcp"}, +{"netinfo-local", {NULL}, 1033, "udp"}, +{"activesync", {NULL}, 1034, "tcp"}, +{"activesync", {NULL}, 1034, "udp"}, +{"mxxrlogin", {NULL}, 1035, "tcp"}, +{"mxxrlogin", {NULL}, 1035, "udp"}, +{"nsstp", {NULL}, 1036, "tcp"}, +{"nsstp", {NULL}, 1036, "udp"}, +{"ams", {NULL}, 1037, "tcp"}, +{"ams", {NULL}, 1037, "udp"}, +{"mtqp", {NULL}, 1038, "tcp"}, +{"mtqp", {NULL}, 1038, "udp"}, +{"sbl", {NULL}, 1039, "tcp"}, +{"sbl", {NULL}, 1039, "udp"}, +{"netarx", {NULL}, 1040, "tcp"}, +{"netarx", {NULL}, 1040, "udp"}, +{"danf-ak2", {NULL}, 1041, "tcp"}, +{"danf-ak2", {NULL}, 1041, "udp"}, +{"afrog", {NULL}, 1042, "tcp"}, +{"afrog", {NULL}, 1042, "udp"}, +{"boinc-client", {NULL}, 1043, "tcp"}, +{"boinc-client", {NULL}, 1043, "udp"}, +{"dcutility", {NULL}, 1044, "tcp"}, +{"dcutility", {NULL}, 1044, "udp"}, +{"fpitp", {NULL}, 1045, "tcp"}, +{"fpitp", {NULL}, 1045, "udp"}, +{"wfremotertm", {NULL}, 1046, "tcp"}, +{"wfremotertm", {NULL}, 1046, "udp"}, +{"neod1", {NULL}, 1047, "tcp"}, +{"neod1", {NULL}, 1047, "udp"}, +{"neod2", {NULL}, 1048, "tcp"}, +{"neod2", {NULL}, 1048, "udp"}, +{"td-postman", {NULL}, 1049, "tcp"}, +{"td-postman", {NULL}, 1049, "udp"}, +{"cma", {NULL}, 1050, "tcp"}, +{"cma", {NULL}, 1050, "udp"}, +{"optima-vnet", {NULL}, 1051, "tcp"}, +{"optima-vnet", {NULL}, 1051, "udp"}, +{"ddt", {NULL}, 1052, "tcp"}, +{"ddt", {NULL}, 1052, "udp"}, +{"remote-as", {NULL}, 1053, "tcp"}, +{"remote-as", {NULL}, 1053, "udp"}, +{"brvread", {NULL}, 1054, "tcp"}, +{"brvread", {NULL}, 1054, "udp"}, +{"ansyslmd", {NULL}, 1055, "tcp"}, +{"ansyslmd", {NULL}, 1055, "udp"}, +{"vfo", {NULL}, 1056, "tcp"}, +{"vfo", {NULL}, 1056, "udp"}, +{"startron", {NULL}, 1057, "tcp"}, +{"startron", {NULL}, 1057, "udp"}, +{"nim", {NULL}, 1058, "tcp"}, +{"nim", {NULL}, 1058, "udp"}, +{"nimreg", {NULL}, 1059, "tcp"}, +{"nimreg", {NULL}, 1059, "udp"}, +{"polestar", {NULL}, 1060, "tcp"}, +{"polestar", {NULL}, 1060, "udp"}, +{"kiosk", {NULL}, 1061, "tcp"}, +{"kiosk", {NULL}, 1061, "udp"}, +{"veracity", {NULL}, 1062, "tcp"}, +{"veracity", {NULL}, 1062, "udp"}, +{"kyoceranetdev", {NULL}, 1063, "tcp"}, +{"kyoceranetdev", {NULL}, 1063, "udp"}, +{"jstel", {NULL}, 1064, "tcp"}, +{"jstel", {NULL}, 1064, "udp"}, +{"syscomlan", {NULL}, 1065, "tcp"}, +{"syscomlan", {NULL}, 1065, "udp"}, +{"fpo-fns", {NULL}, 1066, "tcp"}, +{"fpo-fns", {NULL}, 1066, "udp"}, +{"instl_boots", {NULL}, 1067, "tcp"}, +{"instl_boots", {NULL}, 1067, "udp"}, +{"instl_bootc", {NULL}, 1068, "tcp"}, +{"instl_bootc", {NULL}, 1068, "udp"}, +{"cognex-insight", {NULL}, 1069, "tcp"}, +{"cognex-insight", {NULL}, 1069, "udp"}, +{"gmrupdateserv", {NULL}, 1070, "tcp"}, +{"gmrupdateserv", {NULL}, 1070, "udp"}, +{"bsquare-voip", {NULL}, 1071, "tcp"}, +{"bsquare-voip", {NULL}, 1071, "udp"}, +{"cardax", {NULL}, 1072, "tcp"}, +{"cardax", {NULL}, 1072, "udp"}, +{"bridgecontrol", {NULL}, 1073, "tcp"}, +{"bridgecontrol", {NULL}, 1073, "udp"}, +{"warmspotMgmt", {NULL}, 1074, "tcp"}, +{"warmspotMgmt", {NULL}, 1074, "udp"}, +{"rdrmshc", {NULL}, 1075, "tcp"}, +{"rdrmshc", {NULL}, 1075, "udp"}, +{"dab-sti-c", {NULL}, 1076, "tcp"}, +{"dab-sti-c", {NULL}, 1076, "udp"}, +{"imgames", {NULL}, 1077, "tcp"}, +{"imgames", {NULL}, 1077, "udp"}, +{"avocent-proxy", {NULL}, 1078, "tcp"}, +{"avocent-proxy", {NULL}, 1078, "udp"}, +{"asprovatalk", {NULL}, 1079, "tcp"}, +{"asprovatalk", {NULL}, 1079, "udp"}, +{"socks", {NULL}, 1080, "tcp"}, +{"socks", {NULL}, 1080, "udp"}, +{"pvuniwien", {NULL}, 1081, "tcp"}, +{"pvuniwien", {NULL}, 1081, "udp"}, +{"amt-esd-prot", {NULL}, 1082, "tcp"}, +{"amt-esd-prot", {NULL}, 1082, "udp"}, +{"ansoft-lm-1", {NULL}, 1083, "tcp"}, +{"ansoft-lm-1", {NULL}, 1083, "udp"}, +{"ansoft-lm-2", {NULL}, 1084, "tcp"}, +{"ansoft-lm-2", {NULL}, 1084, "udp"}, +{"webobjects", {NULL}, 1085, "tcp"}, +{"webobjects", {NULL}, 1085, "udp"}, +{"cplscrambler-lg", {NULL}, 1086, "tcp"}, +{"cplscrambler-lg", {NULL}, 1086, "udp"}, +{"cplscrambler-in", {NULL}, 1087, "tcp"}, +{"cplscrambler-in", {NULL}, 1087, "udp"}, +{"cplscrambler-al", {NULL}, 1088, "tcp"}, +{"cplscrambler-al", {NULL}, 1088, "udp"}, +{"ff-annunc", {NULL}, 1089, "tcp"}, +{"ff-annunc", {NULL}, 1089, "udp"}, +{"ff-fms", {NULL}, 1090, "tcp"}, +{"ff-fms", {NULL}, 1090, "udp"}, +{"ff-sm", {NULL}, 1091, "tcp"}, +{"ff-sm", {NULL}, 1091, "udp"}, +{"obrpd", {NULL}, 1092, "tcp"}, +{"obrpd", {NULL}, 1092, "udp"}, +{"proofd", {NULL}, 1093, "tcp"}, +{"proofd", {NULL}, 1093, "udp"}, +{"rootd", {NULL}, 1094, "tcp"}, +{"rootd", {NULL}, 1094, "udp"}, +{"nicelink", {NULL}, 1095, "tcp"}, +{"nicelink", {NULL}, 1095, "udp"}, +{"cnrprotocol", {NULL}, 1096, "tcp"}, +{"cnrprotocol", {NULL}, 1096, "udp"}, +{"sunclustermgr", {NULL}, 1097, "tcp"}, +{"sunclustermgr", {NULL}, 1097, "udp"}, +{"rmiactivation", {NULL}, 1098, "tcp"}, +{"rmiactivation", {NULL}, 1098, "udp"}, +{"rmiregistry", {NULL}, 1099, "tcp"}, +{"rmiregistry", {NULL}, 1099, "udp"}, +{"mctp", {NULL}, 1100, "tcp"}, +{"mctp", {NULL}, 1100, "udp"}, +{"pt2-discover", {NULL}, 1101, "tcp"}, +{"pt2-discover", {NULL}, 1101, "udp"}, +{"adobeserver-1", {NULL}, 1102, "tcp"}, +{"adobeserver-1", {NULL}, 1102, "udp"}, +{"adobeserver-2", {NULL}, 1103, "tcp"}, +{"adobeserver-2", {NULL}, 1103, "udp"}, +{"xrl", {NULL}, 1104, "tcp"}, +{"xrl", {NULL}, 1104, "udp"}, +{"ftranhc", {NULL}, 1105, "tcp"}, +{"ftranhc", {NULL}, 1105, "udp"}, +{"isoipsigport-1", {NULL}, 1106, "tcp"}, +{"isoipsigport-1", {NULL}, 1106, "udp"}, +{"isoipsigport-2", {NULL}, 1107, "tcp"}, +{"isoipsigport-2", {NULL}, 1107, "udp"}, +{"ratio-adp", {NULL}, 1108, "tcp"}, +{"ratio-adp", {NULL}, 1108, "udp"}, +{"webadmstart", {NULL}, 1110, "tcp"}, +{"nfsd-keepalive", {NULL}, 1110, "udp"}, +{"lmsocialserver", {NULL}, 1111, "tcp"}, +{"lmsocialserver", {NULL}, 1111, "udp"}, +{"icp", {NULL}, 1112, "tcp"}, +{"icp", {NULL}, 1112, "udp"}, +{"ltp-deepspace", {NULL}, 1113, "tcp"}, +{"ltp-deepspace", {NULL}, 1113, "udp"}, +{"mini-sql", {NULL}, 1114, "tcp"}, +{"mini-sql", {NULL}, 1114, "udp"}, +{"ardus-trns", {NULL}, 1115, "tcp"}, +{"ardus-trns", {NULL}, 1115, "udp"}, +{"ardus-cntl", {NULL}, 1116, "tcp"}, +{"ardus-cntl", {NULL}, 1116, "udp"}, +{"ardus-mtrns", {NULL}, 1117, "tcp"}, +{"ardus-mtrns", {NULL}, 1117, "udp"}, +{"sacred", {NULL}, 1118, "tcp"}, +{"sacred", {NULL}, 1118, "udp"}, +{"bnetgame", {NULL}, 1119, "tcp"}, +{"bnetgame", {NULL}, 1119, "udp"}, +{"bnetfile", {NULL}, 1120, "tcp"}, +{"bnetfile", {NULL}, 1120, "udp"}, +{"rmpp", {NULL}, 1121, "tcp"}, +{"rmpp", {NULL}, 1121, "udp"}, +{"availant-mgr", {NULL}, 1122, "tcp"}, +{"availant-mgr", {NULL}, 1122, "udp"}, +{"murray", {NULL}, 1123, "tcp"}, +{"murray", {NULL}, 1123, "udp"}, +{"hpvmmcontrol", {NULL}, 1124, "tcp"}, +{"hpvmmcontrol", {NULL}, 1124, "udp"}, +{"hpvmmagent", {NULL}, 1125, "tcp"}, +{"hpvmmagent", {NULL}, 1125, "udp"}, +{"hpvmmdata", {NULL}, 1126, "tcp"}, +{"hpvmmdata", {NULL}, 1126, "udp"}, +{"kwdb-commn", {NULL}, 1127, "tcp"}, +{"kwdb-commn", {NULL}, 1127, "udp"}, +{"saphostctrl", {NULL}, 1128, "tcp"}, +{"saphostctrl", {NULL}, 1128, "udp"}, +{"saphostctrls", {NULL}, 1129, "tcp"}, +{"saphostctrls", {NULL}, 1129, "udp"}, +{"casp", {NULL}, 1130, "tcp"}, +{"casp", {NULL}, 1130, "udp"}, +{"caspssl", {NULL}, 1131, "tcp"}, +{"caspssl", {NULL}, 1131, "udp"}, +{"kvm-via-ip", {NULL}, 1132, "tcp"}, +{"kvm-via-ip", {NULL}, 1132, "udp"}, +{"dfn", {NULL}, 1133, "tcp"}, +{"dfn", {NULL}, 1133, "udp"}, +{"aplx", {NULL}, 1134, "tcp"}, +{"aplx", {NULL}, 1134, "udp"}, +{"omnivision", {NULL}, 1135, "tcp"}, +{"omnivision", {NULL}, 1135, "udp"}, +{"hhb-gateway", {NULL}, 1136, "tcp"}, +{"hhb-gateway", {NULL}, 1136, "udp"}, +{"trim", {NULL}, 1137, "tcp"}, +{"trim", {NULL}, 1137, "udp"}, +{"encrypted_admin", {NULL}, 1138, "tcp"}, +{"encrypted_admin", {NULL}, 1138, "udp"}, +{"evm", {NULL}, 1139, "tcp"}, +{"evm", {NULL}, 1139, "udp"}, +{"autonoc", {NULL}, 1140, "tcp"}, +{"autonoc", {NULL}, 1140, "udp"}, +{"mxomss", {NULL}, 1141, "tcp"}, +{"mxomss", {NULL}, 1141, "udp"}, +{"edtools", {NULL}, 1142, "tcp"}, +{"edtools", {NULL}, 1142, "udp"}, +{"imyx", {NULL}, 1143, "tcp"}, +{"imyx", {NULL}, 1143, "udp"}, +{"fuscript", {NULL}, 1144, "tcp"}, +{"fuscript", {NULL}, 1144, "udp"}, +{"x9-icue", {NULL}, 1145, "tcp"}, +{"x9-icue", {NULL}, 1145, "udp"}, +{"audit-transfer", {NULL}, 1146, "tcp"}, +{"audit-transfer", {NULL}, 1146, "udp"}, +{"capioverlan", {NULL}, 1147, "tcp"}, +{"capioverlan", {NULL}, 1147, "udp"}, +{"elfiq-repl", {NULL}, 1148, "tcp"}, +{"elfiq-repl", {NULL}, 1148, "udp"}, +{"bvtsonar", {NULL}, 1149, "tcp"}, +{"bvtsonar", {NULL}, 1149, "udp"}, +{"blaze", {NULL}, 1150, "tcp"}, +{"blaze", {NULL}, 1150, "udp"}, +{"unizensus", {NULL}, 1151, "tcp"}, +{"unizensus", {NULL}, 1151, "udp"}, +{"winpoplanmess", {NULL}, 1152, "tcp"}, +{"winpoplanmess", {NULL}, 1152, "udp"}, +{"c1222-acse", {NULL}, 1153, "tcp"}, +{"c1222-acse", {NULL}, 1153, "udp"}, +{"resacommunity", {NULL}, 1154, "tcp"}, +{"resacommunity", {NULL}, 1154, "udp"}, +{"nfa", {NULL}, 1155, "tcp"}, +{"nfa", {NULL}, 1155, "udp"}, +{"iascontrol-oms", {NULL}, 1156, "tcp"}, +{"iascontrol-oms", {NULL}, 1156, "udp"}, +{"iascontrol", {NULL}, 1157, "tcp"}, +{"iascontrol", {NULL}, 1157, "udp"}, +{"dbcontrol-oms", {NULL}, 1158, "tcp"}, +{"dbcontrol-oms", {NULL}, 1158, "udp"}, +{"oracle-oms", {NULL}, 1159, "tcp"}, +{"oracle-oms", {NULL}, 1159, "udp"}, +{"olsv", {NULL}, 1160, "tcp"}, +{"olsv", {NULL}, 1160, "udp"}, +{"health-polling", {NULL}, 1161, "tcp"}, +{"health-polling", {NULL}, 1161, "udp"}, +{"health-trap", {NULL}, 1162, "tcp"}, +{"health-trap", {NULL}, 1162, "udp"}, +{"sddp", {NULL}, 1163, "tcp"}, +{"sddp", {NULL}, 1163, "udp"}, +{"qsm-proxy", {NULL}, 1164, "tcp"}, +{"qsm-proxy", {NULL}, 1164, "udp"}, +{"qsm-gui", {NULL}, 1165, "tcp"}, +{"qsm-gui", {NULL}, 1165, "udp"}, +{"qsm-remote", {NULL}, 1166, "tcp"}, +{"qsm-remote", {NULL}, 1166, "udp"}, +{"cisco-ipsla", {NULL}, 1167, "tcp"}, +{"cisco-ipsla", {NULL}, 1167, "udp"}, +{"cisco-ipsla", {NULL}, 1167, "sctp"}, +{"vchat", {NULL}, 1168, "tcp"}, +{"vchat", {NULL}, 1168, "udp"}, +{"tripwire", {NULL}, 1169, "tcp"}, +{"tripwire", {NULL}, 1169, "udp"}, +{"atc-lm", {NULL}, 1170, "tcp"}, +{"atc-lm", {NULL}, 1170, "udp"}, +{"atc-appserver", {NULL}, 1171, "tcp"}, +{"atc-appserver", {NULL}, 1171, "udp"}, +{"dnap", {NULL}, 1172, "tcp"}, +{"dnap", {NULL}, 1172, "udp"}, +{"d-cinema-rrp", {NULL}, 1173, "tcp"}, +{"d-cinema-rrp", {NULL}, 1173, "udp"}, +{"fnet-remote-ui", {NULL}, 1174, "tcp"}, +{"fnet-remote-ui", {NULL}, 1174, "udp"}, +{"dossier", {NULL}, 1175, "tcp"}, +{"dossier", {NULL}, 1175, "udp"}, +{"indigo-server", {NULL}, 1176, "tcp"}, +{"indigo-server", {NULL}, 1176, "udp"}, +{"dkmessenger", {NULL}, 1177, "tcp"}, +{"dkmessenger", {NULL}, 1177, "udp"}, +{"sgi-storman", {NULL}, 1178, "tcp"}, +{"sgi-storman", {NULL}, 1178, "udp"}, +{"b2n", {NULL}, 1179, "tcp"}, +{"b2n", {NULL}, 1179, "udp"}, +{"mc-client", {NULL}, 1180, "tcp"}, +{"mc-client", {NULL}, 1180, "udp"}, +{"3comnetman", {NULL}, 1181, "tcp"}, +{"3comnetman", {NULL}, 1181, "udp"}, +{"accelenet", {NULL}, 1182, "tcp"}, +{"accelenet-data", {NULL}, 1182, "udp"}, +{"llsurfup-http", {NULL}, 1183, "tcp"}, +{"llsurfup-http", {NULL}, 1183, "udp"}, +{"llsurfup-https", {NULL}, 1184, "tcp"}, +{"llsurfup-https", {NULL}, 1184, "udp"}, +{"catchpole", {NULL}, 1185, "tcp"}, +{"catchpole", {NULL}, 1185, "udp"}, +{"mysql-cluster", {NULL}, 1186, "tcp"}, +{"mysql-cluster", {NULL}, 1186, "udp"}, +{"alias", {NULL}, 1187, "tcp"}, +{"alias", {NULL}, 1187, "udp"}, +{"hp-webadmin", {NULL}, 1188, "tcp"}, +{"hp-webadmin", {NULL}, 1188, "udp"}, +{"unet", {NULL}, 1189, "tcp"}, +{"unet", {NULL}, 1189, "udp"}, +{"commlinx-avl", {NULL}, 1190, "tcp"}, +{"commlinx-avl", {NULL}, 1190, "udp"}, +{"gpfs", {NULL}, 1191, "tcp"}, +{"gpfs", {NULL}, 1191, "udp"}, +{"caids-sensor", {NULL}, 1192, "tcp"}, +{"caids-sensor", {NULL}, 1192, "udp"}, +{"fiveacross", {NULL}, 1193, "tcp"}, +{"fiveacross", {NULL}, 1193, "udp"}, +{"openvpn", {NULL}, 1194, "tcp"}, +{"openvpn", {NULL}, 1194, "udp"}, +{"rsf-1", {NULL}, 1195, "tcp"}, +{"rsf-1", {NULL}, 1195, "udp"}, +{"netmagic", {NULL}, 1196, "tcp"}, +{"netmagic", {NULL}, 1196, "udp"}, +{"carrius-rshell", {NULL}, 1197, "tcp"}, +{"carrius-rshell", {NULL}, 1197, "udp"}, +{"cajo-discovery", {NULL}, 1198, "tcp"}, +{"cajo-discovery", {NULL}, 1198, "udp"}, +{"dmidi", {NULL}, 1199, "tcp"}, +{"dmidi", {NULL}, 1199, "udp"}, +{"scol", {NULL}, 1200, "tcp"}, +{"scol", {NULL}, 1200, "udp"}, +{"nucleus-sand", {NULL}, 1201, "tcp"}, +{"nucleus-sand", {NULL}, 1201, "udp"}, +{"caiccipc", {NULL}, 1202, "tcp"}, +{"caiccipc", {NULL}, 1202, "udp"}, +{"ssslic-mgr", {NULL}, 1203, "tcp"}, +{"ssslic-mgr", {NULL}, 1203, "udp"}, +{"ssslog-mgr", {NULL}, 1204, "tcp"}, +{"ssslog-mgr", {NULL}, 1204, "udp"}, +{"accord-mgc", {NULL}, 1205, "tcp"}, +{"accord-mgc", {NULL}, 1205, "udp"}, +{"anthony-data", {NULL}, 1206, "tcp"}, +{"anthony-data", {NULL}, 1206, "udp"}, +{"metasage", {NULL}, 1207, "tcp"}, +{"metasage", {NULL}, 1207, "udp"}, +{"seagull-ais", {NULL}, 1208, "tcp"}, +{"seagull-ais", {NULL}, 1208, "udp"}, +{"ipcd3", {NULL}, 1209, "tcp"}, +{"ipcd3", {NULL}, 1209, "udp"}, +{"eoss", {NULL}, 1210, "tcp"}, +{"eoss", {NULL}, 1210, "udp"}, +{"groove-dpp", {NULL}, 1211, "tcp"}, +{"groove-dpp", {NULL}, 1211, "udp"}, +{"lupa", {NULL}, 1212, "tcp"}, +{"lupa", {NULL}, 1212, "udp"}, +{"mpc-lifenet", {NULL}, 1213, "tcp"}, +{"mpc-lifenet", {NULL}, 1213, "udp"}, +{"kazaa", {NULL}, 1214, "tcp"}, +{"kazaa", {NULL}, 1214, "udp"}, +{"scanstat-1", {NULL}, 1215, "tcp"}, +{"scanstat-1", {NULL}, 1215, "udp"}, +{"etebac5", {NULL}, 1216, "tcp"}, +{"etebac5", {NULL}, 1216, "udp"}, +{"hpss-ndapi", {NULL}, 1217, "tcp"}, +{"hpss-ndapi", {NULL}, 1217, "udp"}, +{"aeroflight-ads", {NULL}, 1218, "tcp"}, +{"aeroflight-ads", {NULL}, 1218, "udp"}, +{"aeroflight-ret", {NULL}, 1219, "tcp"}, +{"aeroflight-ret", {NULL}, 1219, "udp"}, +{"qt-serveradmin", {NULL}, 1220, "tcp"}, +{"qt-serveradmin", {NULL}, 1220, "udp"}, +{"sweetware-apps", {NULL}, 1221, "tcp"}, +{"sweetware-apps", {NULL}, 1221, "udp"}, +{"nerv", {NULL}, 1222, "tcp"}, +{"nerv", {NULL}, 1222, "udp"}, +{"tgp", {NULL}, 1223, "tcp"}, +{"tgp", {NULL}, 1223, "udp"}, +{"vpnz", {NULL}, 1224, "tcp"}, +{"vpnz", {NULL}, 1224, "udp"}, +{"slinkysearch", {NULL}, 1225, "tcp"}, +{"slinkysearch", {NULL}, 1225, "udp"}, +{"stgxfws", {NULL}, 1226, "tcp"}, +{"stgxfws", {NULL}, 1226, "udp"}, +{"dns2go", {NULL}, 1227, "tcp"}, +{"dns2go", {NULL}, 1227, "udp"}, +{"florence", {NULL}, 1228, "tcp"}, +{"florence", {NULL}, 1228, "udp"}, +{"zented", {NULL}, 1229, "tcp"}, +{"zented", {NULL}, 1229, "udp"}, +{"periscope", {NULL}, 1230, "tcp"}, +{"periscope", {NULL}, 1230, "udp"}, +{"menandmice-lpm", {NULL}, 1231, "tcp"}, +{"menandmice-lpm", {NULL}, 1231, "udp"}, +{"univ-appserver", {NULL}, 1233, "tcp"}, +{"univ-appserver", {NULL}, 1233, "udp"}, +{"search-agent", {NULL}, 1234, "tcp"}, +{"search-agent", {NULL}, 1234, "udp"}, +{"mosaicsyssvc1", {NULL}, 1235, "tcp"}, +{"mosaicsyssvc1", {NULL}, 1235, "udp"}, +{"bvcontrol", {NULL}, 1236, "tcp"}, +{"bvcontrol", {NULL}, 1236, "udp"}, +{"tsdos390", {NULL}, 1237, "tcp"}, +{"tsdos390", {NULL}, 1237, "udp"}, +{"hacl-qs", {NULL}, 1238, "tcp"}, +{"hacl-qs", {NULL}, 1238, "udp"}, +{"nmsd", {NULL}, 1239, "tcp"}, +{"nmsd", {NULL}, 1239, "udp"}, +{"instantia", {NULL}, 1240, "tcp"}, +{"instantia", {NULL}, 1240, "udp"}, +{"nessus", {NULL}, 1241, "tcp"}, +{"nessus", {NULL}, 1241, "udp"}, +{"nmasoverip", {NULL}, 1242, "tcp"}, +{"nmasoverip", {NULL}, 1242, "udp"}, +{"serialgateway", {NULL}, 1243, "tcp"}, +{"serialgateway", {NULL}, 1243, "udp"}, +{"isbconference1", {NULL}, 1244, "tcp"}, +{"isbconference1", {NULL}, 1244, "udp"}, +{"isbconference2", {NULL}, 1245, "tcp"}, +{"isbconference2", {NULL}, 1245, "udp"}, +{"payrouter", {NULL}, 1246, "tcp"}, +{"payrouter", {NULL}, 1246, "udp"}, +{"visionpyramid", {NULL}, 1247, "tcp"}, +{"visionpyramid", {NULL}, 1247, "udp"}, +{"hermes", {NULL}, 1248, "tcp"}, +{"hermes", {NULL}, 1248, "udp"}, +{"mesavistaco", {NULL}, 1249, "tcp"}, +{"mesavistaco", {NULL}, 1249, "udp"}, +{"swldy-sias", {NULL}, 1250, "tcp"}, +{"swldy-sias", {NULL}, 1250, "udp"}, +{"servergraph", {NULL}, 1251, "tcp"}, +{"servergraph", {NULL}, 1251, "udp"}, +{"bspne-pcc", {NULL}, 1252, "tcp"}, +{"bspne-pcc", {NULL}, 1252, "udp"}, +{"q55-pcc", {NULL}, 1253, "tcp"}, +{"q55-pcc", {NULL}, 1253, "udp"}, +{"de-noc", {NULL}, 1254, "tcp"}, +{"de-noc", {NULL}, 1254, "udp"}, +{"de-cache-query", {NULL}, 1255, "tcp"}, +{"de-cache-query", {NULL}, 1255, "udp"}, +{"de-server", {NULL}, 1256, "tcp"}, +{"de-server", {NULL}, 1256, "udp"}, +{"shockwave2", {NULL}, 1257, "tcp"}, +{"shockwave2", {NULL}, 1257, "udp"}, +{"opennl", {NULL}, 1258, "tcp"}, +{"opennl", {NULL}, 1258, "udp"}, +{"opennl-voice", {NULL}, 1259, "tcp"}, +{"opennl-voice", {NULL}, 1259, "udp"}, +{"ibm-ssd", {NULL}, 1260, "tcp"}, +{"ibm-ssd", {NULL}, 1260, "udp"}, +{"mpshrsv", {NULL}, 1261, "tcp"}, +{"mpshrsv", {NULL}, 1261, "udp"}, +{"qnts-orb", {NULL}, 1262, "tcp"}, +{"qnts-orb", {NULL}, 1262, "udp"}, +{"dka", {NULL}, 1263, "tcp"}, +{"dka", {NULL}, 1263, "udp"}, +{"prat", {NULL}, 1264, "tcp"}, +{"prat", {NULL}, 1264, "udp"}, +{"dssiapi", {NULL}, 1265, "tcp"}, +{"dssiapi", {NULL}, 1265, "udp"}, +{"dellpwrappks", {NULL}, 1266, "tcp"}, +{"dellpwrappks", {NULL}, 1266, "udp"}, +{"epc", {NULL}, 1267, "tcp"}, +{"epc", {NULL}, 1267, "udp"}, +{"propel-msgsys", {NULL}, 1268, "tcp"}, +{"propel-msgsys", {NULL}, 1268, "udp"}, +{"watilapp", {NULL}, 1269, "tcp"}, +{"watilapp", {NULL}, 1269, "udp"}, +{"opsmgr", {NULL}, 1270, "tcp"}, +{"opsmgr", {NULL}, 1270, "udp"}, +{"excw", {NULL}, 1271, "tcp"}, +{"excw", {NULL}, 1271, "udp"}, +{"cspmlockmgr", {NULL}, 1272, "tcp"}, +{"cspmlockmgr", {NULL}, 1272, "udp"}, +{"emc-gateway", {NULL}, 1273, "tcp"}, +{"emc-gateway", {NULL}, 1273, "udp"}, +{"t1distproc", {NULL}, 1274, "tcp"}, +{"t1distproc", {NULL}, 1274, "udp"}, +{"ivcollector", {NULL}, 1275, "tcp"}, +{"ivcollector", {NULL}, 1275, "udp"}, +{"ivmanager", {NULL}, 1276, "tcp"}, +{"ivmanager", {NULL}, 1276, "udp"}, +{"miva-mqs", {NULL}, 1277, "tcp"}, +{"miva-mqs", {NULL}, 1277, "udp"}, +{"dellwebadmin-1", {NULL}, 1278, "tcp"}, +{"dellwebadmin-1", {NULL}, 1278, "udp"}, +{"dellwebadmin-2", {NULL}, 1279, "tcp"}, +{"dellwebadmin-2", {NULL}, 1279, "udp"}, +{"pictrography", {NULL}, 1280, "tcp"}, +{"pictrography", {NULL}, 1280, "udp"}, +{"healthd", {NULL}, 1281, "tcp"}, +{"healthd", {NULL}, 1281, "udp"}, +{"emperion", {NULL}, 1282, "tcp"}, +{"emperion", {NULL}, 1282, "udp"}, +{"productinfo", {NULL}, 1283, "tcp"}, +{"productinfo", {NULL}, 1283, "udp"}, +{"iee-qfx", {NULL}, 1284, "tcp"}, +{"iee-qfx", {NULL}, 1284, "udp"}, +{"neoiface", {NULL}, 1285, "tcp"}, +{"neoiface", {NULL}, 1285, "udp"}, +{"netuitive", {NULL}, 1286, "tcp"}, +{"netuitive", {NULL}, 1286, "udp"}, +{"routematch", {NULL}, 1287, "tcp"}, +{"routematch", {NULL}, 1287, "udp"}, +{"navbuddy", {NULL}, 1288, "tcp"}, +{"navbuddy", {NULL}, 1288, "udp"}, +{"jwalkserver", {NULL}, 1289, "tcp"}, +{"jwalkserver", {NULL}, 1289, "udp"}, +{"winjaserver", {NULL}, 1290, "tcp"}, +{"winjaserver", {NULL}, 1290, "udp"}, +{"seagulllms", {NULL}, 1291, "tcp"}, +{"seagulllms", {NULL}, 1291, "udp"}, +{"dsdn", {NULL}, 1292, "tcp"}, +{"dsdn", {NULL}, 1292, "udp"}, +{"pkt-krb-ipsec", {NULL}, 1293, "tcp"}, +{"pkt-krb-ipsec", {NULL}, 1293, "udp"}, +{"cmmdriver", {NULL}, 1294, "tcp"}, +{"cmmdriver", {NULL}, 1294, "udp"}, +{"ehtp", {NULL}, 1295, "tcp"}, +{"ehtp", {NULL}, 1295, "udp"}, +{"dproxy", {NULL}, 1296, "tcp"}, +{"dproxy", {NULL}, 1296, "udp"}, +{"sdproxy", {NULL}, 1297, "tcp"}, +{"sdproxy", {NULL}, 1297, "udp"}, +{"lpcp", {NULL}, 1298, "tcp"}, +{"lpcp", {NULL}, 1298, "udp"}, +{"hp-sci", {NULL}, 1299, "tcp"}, +{"hp-sci", {NULL}, 1299, "udp"}, +{"h323hostcallsc", {NULL}, 1300, "tcp"}, +{"h323hostcallsc", {NULL}, 1300, "udp"}, +{"ci3-software-1", {NULL}, 1301, "tcp"}, +{"ci3-software-1", {NULL}, 1301, "udp"}, +{"ci3-software-2", {NULL}, 1302, "tcp"}, +{"ci3-software-2", {NULL}, 1302, "udp"}, +{"sftsrv", {NULL}, 1303, "tcp"}, +{"sftsrv", {NULL}, 1303, "udp"}, +{"boomerang", {NULL}, 1304, "tcp"}, +{"boomerang", {NULL}, 1304, "udp"}, +{"pe-mike", {NULL}, 1305, "tcp"}, +{"pe-mike", {NULL}, 1305, "udp"}, +{"re-conn-proto", {NULL}, 1306, "tcp"}, +{"re-conn-proto", {NULL}, 1306, "udp"}, +{"pacmand", {NULL}, 1307, "tcp"}, +{"pacmand", {NULL}, 1307, "udp"}, +{"odsi", {NULL}, 1308, "tcp"}, +{"odsi", {NULL}, 1308, "udp"}, +{"jtag-server", {NULL}, 1309, "tcp"}, +{"jtag-server", {NULL}, 1309, "udp"}, +{"husky", {NULL}, 1310, "tcp"}, +{"husky", {NULL}, 1310, "udp"}, +{"rxmon", {NULL}, 1311, "tcp"}, +{"rxmon", {NULL}, 1311, "udp"}, +{"sti-envision", {NULL}, 1312, "tcp"}, +{"sti-envision", {NULL}, 1312, "udp"}, +{"bmc_patroldb", {NULL}, 1313, "tcp"}, +{"bmc_patroldb", {NULL}, 1313, "udp"}, +{"pdps", {NULL}, 1314, "tcp"}, +{"pdps", {NULL}, 1314, "udp"}, +{"els", {NULL}, 1315, "tcp"}, +{"els", {NULL}, 1315, "udp"}, +{"exbit-escp", {NULL}, 1316, "tcp"}, +{"exbit-escp", {NULL}, 1316, "udp"}, +{"vrts-ipcserver", {NULL}, 1317, "tcp"}, +{"vrts-ipcserver", {NULL}, 1317, "udp"}, +{"krb5gatekeeper", {NULL}, 1318, "tcp"}, +{"krb5gatekeeper", {NULL}, 1318, "udp"}, +{"amx-icsp", {NULL}, 1319, "tcp"}, +{"amx-icsp", {NULL}, 1319, "udp"}, +{"amx-axbnet", {NULL}, 1320, "tcp"}, +{"amx-axbnet", {NULL}, 1320, "udp"}, +{"pip", {NULL}, 1321, "tcp"}, +{"pip", {NULL}, 1321, "udp"}, +{"novation", {NULL}, 1322, "tcp"}, +{"novation", {NULL}, 1322, "udp"}, +{"brcd", {NULL}, 1323, "tcp"}, +{"brcd", {NULL}, 1323, "udp"}, +{"delta-mcp", {NULL}, 1324, "tcp"}, +{"delta-mcp", {NULL}, 1324, "udp"}, +{"dx-instrument", {NULL}, 1325, "tcp"}, +{"dx-instrument", {NULL}, 1325, "udp"}, +{"wimsic", {NULL}, 1326, "tcp"}, +{"wimsic", {NULL}, 1326, "udp"}, +{"ultrex", {NULL}, 1327, "tcp"}, +{"ultrex", {NULL}, 1327, "udp"}, +{"ewall", {NULL}, 1328, "tcp"}, +{"ewall", {NULL}, 1328, "udp"}, +{"netdb-export", {NULL}, 1329, "tcp"}, +{"netdb-export", {NULL}, 1329, "udp"}, +{"streetperfect", {NULL}, 1330, "tcp"}, +{"streetperfect", {NULL}, 1330, "udp"}, +{"intersan", {NULL}, 1331, "tcp"}, +{"intersan", {NULL}, 1331, "udp"}, +{"pcia-rxp-b", {NULL}, 1332, "tcp"}, +{"pcia-rxp-b", {NULL}, 1332, "udp"}, +{"passwrd-policy", {NULL}, 1333, "tcp"}, +{"passwrd-policy", {NULL}, 1333, "udp"}, +{"writesrv", {NULL}, 1334, "tcp"}, +{"writesrv", {NULL}, 1334, "udp"}, +{"digital-notary", {NULL}, 1335, "tcp"}, +{"digital-notary", {NULL}, 1335, "udp"}, +{"ischat", {NULL}, 1336, "tcp"}, +{"ischat", {NULL}, 1336, "udp"}, +{"menandmice-dns", {NULL}, 1337, "tcp"}, +{"menandmice-dns", {NULL}, 1337, "udp"}, +{"wmc-log-svc", {NULL}, 1338, "tcp"}, +{"wmc-log-svc", {NULL}, 1338, "udp"}, +{"kjtsiteserver", {NULL}, 1339, "tcp"}, +{"kjtsiteserver", {NULL}, 1339, "udp"}, +{"naap", {NULL}, 1340, "tcp"}, +{"naap", {NULL}, 1340, "udp"}, +{"qubes", {NULL}, 1341, "tcp"}, +{"qubes", {NULL}, 1341, "udp"}, +{"esbroker", {NULL}, 1342, "tcp"}, +{"esbroker", {NULL}, 1342, "udp"}, +{"re101", {NULL}, 1343, "tcp"}, +{"re101", {NULL}, 1343, "udp"}, +{"icap", {NULL}, 1344, "tcp"}, +{"icap", {NULL}, 1344, "udp"}, +{"vpjp", {NULL}, 1345, "tcp"}, +{"vpjp", {NULL}, 1345, "udp"}, +{"alta-ana-lm", {NULL}, 1346, "tcp"}, +{"alta-ana-lm", {NULL}, 1346, "udp"}, +{"bbn-mmc", {NULL}, 1347, "tcp"}, +{"bbn-mmc", {NULL}, 1347, "udp"}, +{"bbn-mmx", {NULL}, 1348, "tcp"}, +{"bbn-mmx", {NULL}, 1348, "udp"}, +{"sbook", {NULL}, 1349, "tcp"}, +{"sbook", {NULL}, 1349, "udp"}, +{"editbench", {NULL}, 1350, "tcp"}, +{"editbench", {NULL}, 1350, "udp"}, +{"equationbuilder", {NULL}, 1351, "tcp"}, +{"equationbuilder", {NULL}, 1351, "udp"}, +{"lotusnote", {NULL}, 1352, "tcp"}, +{"lotusnote", {NULL}, 1352, "udp"}, +{"relief", {NULL}, 1353, "tcp"}, +{"relief", {NULL}, 1353, "udp"}, +{"XSIP-network", {NULL}, 1354, "tcp"}, +{"XSIP-network", {NULL}, 1354, "udp"}, +{"intuitive-edge", {NULL}, 1355, "tcp"}, +{"intuitive-edge", {NULL}, 1355, "udp"}, +{"cuillamartin", {NULL}, 1356, "tcp"}, +{"cuillamartin", {NULL}, 1356, "udp"}, +{"pegboard", {NULL}, 1357, "tcp"}, +{"pegboard", {NULL}, 1357, "udp"}, +{"connlcli", {NULL}, 1358, "tcp"}, +{"connlcli", {NULL}, 1358, "udp"}, +{"ftsrv", {NULL}, 1359, "tcp"}, +{"ftsrv", {NULL}, 1359, "udp"}, +{"mimer", {NULL}, 1360, "tcp"}, +{"mimer", {NULL}, 1360, "udp"}, +{"linx", {NULL}, 1361, "tcp"}, +{"linx", {NULL}, 1361, "udp"}, +{"timeflies", {NULL}, 1362, "tcp"}, +{"timeflies", {NULL}, 1362, "udp"}, +{"ndm-requester", {NULL}, 1363, "tcp"}, +{"ndm-requester", {NULL}, 1363, "udp"}, +{"ndm-server", {NULL}, 1364, "tcp"}, +{"ndm-server", {NULL}, 1364, "udp"}, +{"adapt-sna", {NULL}, 1365, "tcp"}, +{"adapt-sna", {NULL}, 1365, "udp"}, +{"netware-csp", {NULL}, 1366, "tcp"}, +{"netware-csp", {NULL}, 1366, "udp"}, +{"dcs", {NULL}, 1367, "tcp"}, +{"dcs", {NULL}, 1367, "udp"}, +{"screencast", {NULL}, 1368, "tcp"}, +{"screencast", {NULL}, 1368, "udp"}, +{"gv-us", {NULL}, 1369, "tcp"}, +{"gv-us", {NULL}, 1369, "udp"}, +{"us-gv", {NULL}, 1370, "tcp"}, +{"us-gv", {NULL}, 1370, "udp"}, +{"fc-cli", {NULL}, 1371, "tcp"}, +{"fc-cli", {NULL}, 1371, "udp"}, +{"fc-ser", {NULL}, 1372, "tcp"}, +{"fc-ser", {NULL}, 1372, "udp"}, +{"chromagrafx", {NULL}, 1373, "tcp"}, +{"chromagrafx", {NULL}, 1373, "udp"}, +{"molly", {NULL}, 1374, "tcp"}, +{"molly", {NULL}, 1374, "udp"}, +{"bytex", {NULL}, 1375, "tcp"}, +{"bytex", {NULL}, 1375, "udp"}, +{"ibm-pps", {NULL}, 1376, "tcp"}, +{"ibm-pps", {NULL}, 1376, "udp"}, +{"cichlid", {NULL}, 1377, "tcp"}, +{"cichlid", {NULL}, 1377, "udp"}, +{"elan", {NULL}, 1378, "tcp"}, +{"elan", {NULL}, 1378, "udp"}, +{"dbreporter", {NULL}, 1379, "tcp"}, +{"dbreporter", {NULL}, 1379, "udp"}, +{"telesis-licman", {NULL}, 1380, "tcp"}, +{"telesis-licman", {NULL}, 1380, "udp"}, +{"apple-licman", {NULL}, 1381, "tcp"}, +{"apple-licman", {NULL}, 1381, "udp"}, +{"udt_os", {NULL}, 1382, "tcp"}, +{"udt_os", {NULL}, 1382, "udp"}, +{"gwha", {NULL}, 1383, "tcp"}, +{"gwha", {NULL}, 1383, "udp"}, +{"os-licman", {NULL}, 1384, "tcp"}, +{"os-licman", {NULL}, 1384, "udp"}, +{"atex_elmd", {NULL}, 1385, "tcp"}, +{"atex_elmd", {NULL}, 1385, "udp"}, +{"checksum", {NULL}, 1386, "tcp"}, +{"checksum", {NULL}, 1386, "udp"}, +{"cadsi-lm", {NULL}, 1387, "tcp"}, +{"cadsi-lm", {NULL}, 1387, "udp"}, +{"objective-dbc", {NULL}, 1388, "tcp"}, +{"objective-dbc", {NULL}, 1388, "udp"}, +{"iclpv-dm", {NULL}, 1389, "tcp"}, +{"iclpv-dm", {NULL}, 1389, "udp"}, +{"iclpv-sc", {NULL}, 1390, "tcp"}, +{"iclpv-sc", {NULL}, 1390, "udp"}, +{"iclpv-sas", {NULL}, 1391, "tcp"}, +{"iclpv-sas", {NULL}, 1391, "udp"}, +{"iclpv-pm", {NULL}, 1392, "tcp"}, +{"iclpv-pm", {NULL}, 1392, "udp"}, +{"iclpv-nls", {NULL}, 1393, "tcp"}, +{"iclpv-nls", {NULL}, 1393, "udp"}, +{"iclpv-nlc", {NULL}, 1394, "tcp"}, +{"iclpv-nlc", {NULL}, 1394, "udp"}, +{"iclpv-wsm", {NULL}, 1395, "tcp"}, +{"iclpv-wsm", {NULL}, 1395, "udp"}, +{"dvl-activemail", {NULL}, 1396, "tcp"}, +{"dvl-activemail", {NULL}, 1396, "udp"}, +{"audio-activmail", {NULL}, 1397, "tcp"}, +{"audio-activmail", {NULL}, 1397, "udp"}, +{"video-activmail", {NULL}, 1398, "tcp"}, +{"video-activmail", {NULL}, 1398, "udp"}, +{"cadkey-licman", {NULL}, 1399, "tcp"}, +{"cadkey-licman", {NULL}, 1399, "udp"}, +{"cadkey-tablet", {NULL}, 1400, "tcp"}, +{"cadkey-tablet", {NULL}, 1400, "udp"}, +{"goldleaf-licman", {NULL}, 1401, "tcp"}, +{"goldleaf-licman", {NULL}, 1401, "udp"}, +{"prm-sm-np", {NULL}, 1402, "tcp"}, +{"prm-sm-np", {NULL}, 1402, "udp"}, +{"prm-nm-np", {NULL}, 1403, "tcp"}, +{"prm-nm-np", {NULL}, 1403, "udp"}, +{"igi-lm", {NULL}, 1404, "tcp"}, +{"igi-lm", {NULL}, 1404, "udp"}, +{"ibm-res", {NULL}, 1405, "tcp"}, +{"ibm-res", {NULL}, 1405, "udp"}, +{"netlabs-lm", {NULL}, 1406, "tcp"}, +{"netlabs-lm", {NULL}, 1406, "udp"}, +{"dbsa-lm", {NULL}, 1407, "tcp"}, +{"dbsa-lm", {NULL}, 1407, "udp"}, +{"sophia-lm", {NULL}, 1408, "tcp"}, +{"sophia-lm", {NULL}, 1408, "udp"}, +{"here-lm", {NULL}, 1409, "tcp"}, +{"here-lm", {NULL}, 1409, "udp"}, +{"hiq", {NULL}, 1410, "tcp"}, +{"hiq", {NULL}, 1410, "udp"}, +{"af", {NULL}, 1411, "tcp"}, +{"af", {NULL}, 1411, "udp"}, +{"innosys", {NULL}, 1412, "tcp"}, +{"innosys", {NULL}, 1412, "udp"}, +{"innosys-acl", {NULL}, 1413, "tcp"}, +{"innosys-acl", {NULL}, 1413, "udp"}, +{"ibm-mqseries", {NULL}, 1414, "tcp"}, +{"ibm-mqseries", {NULL}, 1414, "udp"}, +{"dbstar", {NULL}, 1415, "tcp"}, +{"dbstar", {NULL}, 1415, "udp"}, +{"novell-lu6.2", {NULL}, 1416, "tcp"}, +{"novell-lu6.2", {NULL}, 1416, "udp"}, +{"timbuktu-srv1", {NULL}, 1417, "tcp"}, +{"timbuktu-srv1", {NULL}, 1417, "udp"}, +{"timbuktu-srv2", {NULL}, 1418, "tcp"}, +{"timbuktu-srv2", {NULL}, 1418, "udp"}, +{"timbuktu-srv3", {NULL}, 1419, "tcp"}, +{"timbuktu-srv3", {NULL}, 1419, "udp"}, +{"timbuktu-srv4", {NULL}, 1420, "tcp"}, +{"timbuktu-srv4", {NULL}, 1420, "udp"}, +{"gandalf-lm", {NULL}, 1421, "tcp"}, +{"gandalf-lm", {NULL}, 1421, "udp"}, +{"autodesk-lm", {NULL}, 1422, "tcp"}, +{"autodesk-lm", {NULL}, 1422, "udp"}, +{"essbase", {NULL}, 1423, "tcp"}, +{"essbase", {NULL}, 1423, "udp"}, +{"hybrid", {NULL}, 1424, "tcp"}, +{"hybrid", {NULL}, 1424, "udp"}, +{"zion-lm", {NULL}, 1425, "tcp"}, +{"zion-lm", {NULL}, 1425, "udp"}, +{"sais", {NULL}, 1426, "tcp"}, +{"sais", {NULL}, 1426, "udp"}, +{"mloadd", {NULL}, 1427, "tcp"}, +{"mloadd", {NULL}, 1427, "udp"}, +{"informatik-lm", {NULL}, 1428, "tcp"}, +{"informatik-lm", {NULL}, 1428, "udp"}, +{"nms", {NULL}, 1429, "tcp"}, +{"nms", {NULL}, 1429, "udp"}, +{"tpdu", {NULL}, 1430, "tcp"}, +{"tpdu", {NULL}, 1430, "udp"}, +{"rgtp", {NULL}, 1431, "tcp"}, +{"rgtp", {NULL}, 1431, "udp"}, +{"blueberry-lm", {NULL}, 1432, "tcp"}, +{"blueberry-lm", {NULL}, 1432, "udp"}, +{"ms-sql-s", {NULL}, 1433, "tcp"}, +{"ms-sql-s", {NULL}, 1433, "udp"}, +{"ms-sql-m", {NULL}, 1434, "tcp"}, +{"ms-sql-m", {NULL}, 1434, "udp"}, +{"ibm-cics", {NULL}, 1435, "tcp"}, +{"ibm-cics", {NULL}, 1435, "udp"}, +{"saism", {NULL}, 1436, "tcp"}, +{"saism", {NULL}, 1436, "udp"}, +{"tabula", {NULL}, 1437, "tcp"}, +{"tabula", {NULL}, 1437, "udp"}, +{"eicon-server", {NULL}, 1438, "tcp"}, +{"eicon-server", {NULL}, 1438, "udp"}, +{"eicon-x25", {NULL}, 1439, "tcp"}, +{"eicon-x25", {NULL}, 1439, "udp"}, +{"eicon-slp", {NULL}, 1440, "tcp"}, +{"eicon-slp", {NULL}, 1440, "udp"}, +{"cadis-1", {NULL}, 1441, "tcp"}, +{"cadis-1", {NULL}, 1441, "udp"}, +{"cadis-2", {NULL}, 1442, "tcp"}, +{"cadis-2", {NULL}, 1442, "udp"}, +{"ies-lm", {NULL}, 1443, "tcp"}, +{"ies-lm", {NULL}, 1443, "udp"}, +{"marcam-lm", {NULL}, 1444, "tcp"}, +{"marcam-lm", {NULL}, 1444, "udp"}, +{"proxima-lm", {NULL}, 1445, "tcp"}, +{"proxima-lm", {NULL}, 1445, "udp"}, +{"ora-lm", {NULL}, 1446, "tcp"}, +{"ora-lm", {NULL}, 1446, "udp"}, +{"apri-lm", {NULL}, 1447, "tcp"}, +{"apri-lm", {NULL}, 1447, "udp"}, +{"oc-lm", {NULL}, 1448, "tcp"}, +{"oc-lm", {NULL}, 1448, "udp"}, +{"peport", {NULL}, 1449, "tcp"}, +{"peport", {NULL}, 1449, "udp"}, +{"dwf", {NULL}, 1450, "tcp"}, +{"dwf", {NULL}, 1450, "udp"}, +{"infoman", {NULL}, 1451, "tcp"}, +{"infoman", {NULL}, 1451, "udp"}, +{"gtegsc-lm", {NULL}, 1452, "tcp"}, +{"gtegsc-lm", {NULL}, 1452, "udp"}, +{"genie-lm", {NULL}, 1453, "tcp"}, +{"genie-lm", {NULL}, 1453, "udp"}, +{"interhdl_elmd", {NULL}, 1454, "tcp"}, +{"interhdl_elmd", {NULL}, 1454, "udp"}, +{"esl-lm", {NULL}, 1455, "tcp"}, +{"esl-lm", {NULL}, 1455, "udp"}, +{"dca", {NULL}, 1456, "tcp"}, +{"dca", {NULL}, 1456, "udp"}, +{"valisys-lm", {NULL}, 1457, "tcp"}, +{"valisys-lm", {NULL}, 1457, "udp"}, +{"nrcabq-lm", {NULL}, 1458, "tcp"}, +{"nrcabq-lm", {NULL}, 1458, "udp"}, +{"proshare1", {NULL}, 1459, "tcp"}, +{"proshare1", {NULL}, 1459, "udp"}, +{"proshare2", {NULL}, 1460, "tcp"}, +{"proshare2", {NULL}, 1460, "udp"}, +{"ibm_wrless_lan", {NULL}, 1461, "tcp"}, +{"ibm_wrless_lan", {NULL}, 1461, "udp"}, +{"world-lm", {NULL}, 1462, "tcp"}, +{"world-lm", {NULL}, 1462, "udp"}, +{"nucleus", {NULL}, 1463, "tcp"}, +{"nucleus", {NULL}, 1463, "udp"}, +{"msl_lmd", {NULL}, 1464, "tcp"}, +{"msl_lmd", {NULL}, 1464, "udp"}, +{"pipes", {NULL}, 1465, "tcp"}, +{"pipes", {NULL}, 1465, "udp"}, +{"oceansoft-lm", {NULL}, 1466, "tcp"}, +{"oceansoft-lm", {NULL}, 1466, "udp"}, +{"csdmbase", {NULL}, 1467, "tcp"}, +{"csdmbase", {NULL}, 1467, "udp"}, +{"csdm", {NULL}, 1468, "tcp"}, +{"csdm", {NULL}, 1468, "udp"}, +{"aal-lm", {NULL}, 1469, "tcp"}, +{"aal-lm", {NULL}, 1469, "udp"}, +{"uaiact", {NULL}, 1470, "tcp"}, +{"uaiact", {NULL}, 1470, "udp"}, +{"csdmbase", {NULL}, 1471, "tcp"}, +{"csdmbase", {NULL}, 1471, "udp"}, +{"csdm", {NULL}, 1472, "tcp"}, +{"csdm", {NULL}, 1472, "udp"}, +{"openmath", {NULL}, 1473, "tcp"}, +{"openmath", {NULL}, 1473, "udp"}, +{"telefinder", {NULL}, 1474, "tcp"}, +{"telefinder", {NULL}, 1474, "udp"}, +{"taligent-lm", {NULL}, 1475, "tcp"}, +{"taligent-lm", {NULL}, 1475, "udp"}, +{"clvm-cfg", {NULL}, 1476, "tcp"}, +{"clvm-cfg", {NULL}, 1476, "udp"}, +{"ms-sna-server", {NULL}, 1477, "tcp"}, +{"ms-sna-server", {NULL}, 1477, "udp"}, +{"ms-sna-base", {NULL}, 1478, "tcp"}, +{"ms-sna-base", {NULL}, 1478, "udp"}, +{"dberegister", {NULL}, 1479, "tcp"}, +{"dberegister", {NULL}, 1479, "udp"}, +{"pacerforum", {NULL}, 1480, "tcp"}, +{"pacerforum", {NULL}, 1480, "udp"}, +{"airs", {NULL}, 1481, "tcp"}, +{"airs", {NULL}, 1481, "udp"}, +{"miteksys-lm", {NULL}, 1482, "tcp"}, +{"miteksys-lm", {NULL}, 1482, "udp"}, +{"afs", {NULL}, 1483, "tcp"}, +{"afs", {NULL}, 1483, "udp"}, +{"confluent", {NULL}, 1484, "tcp"}, +{"confluent", {NULL}, 1484, "udp"}, +{"lansource", {NULL}, 1485, "tcp"}, +{"lansource", {NULL}, 1485, "udp"}, +{"nms_topo_serv", {NULL}, 1486, "tcp"}, +{"nms_topo_serv", {NULL}, 1486, "udp"}, +{"localinfosrvr", {NULL}, 1487, "tcp"}, +{"localinfosrvr", {NULL}, 1487, "udp"}, +{"docstor", {NULL}, 1488, "tcp"}, +{"docstor", {NULL}, 1488, "udp"}, +{"dmdocbroker", {NULL}, 1489, "tcp"}, +{"dmdocbroker", {NULL}, 1489, "udp"}, +{"insitu-conf", {NULL}, 1490, "tcp"}, +{"insitu-conf", {NULL}, 1490, "udp"}, +{"stone-design-1", {NULL}, 1492, "tcp"}, +{"stone-design-1", {NULL}, 1492, "udp"}, +{"netmap_lm", {NULL}, 1493, "tcp"}, +{"netmap_lm", {NULL}, 1493, "udp"}, +{"ica", {NULL}, 1494, "tcp"}, +{"ica", {NULL}, 1494, "udp"}, +{"cvc", {NULL}, 1495, "tcp"}, +{"cvc", {NULL}, 1495, "udp"}, +{"liberty-lm", {NULL}, 1496, "tcp"}, +{"liberty-lm", {NULL}, 1496, "udp"}, +{"rfx-lm", {NULL}, 1497, "tcp"}, +{"rfx-lm", {NULL}, 1497, "udp"}, +{"sybase-sqlany", {NULL}, 1498, "tcp"}, +{"sybase-sqlany", {NULL}, 1498, "udp"}, +{"fhc", {NULL}, 1499, "tcp"}, +{"fhc", {NULL}, 1499, "udp"}, +{"vlsi-lm", {NULL}, 1500, "tcp"}, +{"vlsi-lm", {NULL}, 1500, "udp"}, +{"saiscm", {NULL}, 1501, "tcp"}, +{"saiscm", {NULL}, 1501, "udp"}, +{"shivadiscovery", {NULL}, 1502, "tcp"}, +{"shivadiscovery", {NULL}, 1502, "udp"}, +{"imtc-mcs", {NULL}, 1503, "tcp"}, +{"imtc-mcs", {NULL}, 1503, "udp"}, +{"evb-elm", {NULL}, 1504, "tcp"}, +{"evb-elm", {NULL}, 1504, "udp"}, +{"funkproxy", {NULL}, 1505, "tcp"}, +{"funkproxy", {NULL}, 1505, "udp"}, +{"utcd", {NULL}, 1506, "tcp"}, +{"utcd", {NULL}, 1506, "udp"}, +{"symplex", {NULL}, 1507, "tcp"}, +{"symplex", {NULL}, 1507, "udp"}, +{"diagmond", {NULL}, 1508, "tcp"}, +{"diagmond", {NULL}, 1508, "udp"}, +{"robcad-lm", {NULL}, 1509, "tcp"}, +{"robcad-lm", {NULL}, 1509, "udp"}, +{"mvx-lm", {NULL}, 1510, "tcp"}, +{"mvx-lm", {NULL}, 1510, "udp"}, +{"3l-l1", {NULL}, 1511, "tcp"}, +{"3l-l1", {NULL}, 1511, "udp"}, +{"wins", {NULL}, 1512, "tcp"}, +{"wins", {NULL}, 1512, "udp"}, +{"fujitsu-dtc", {NULL}, 1513, "tcp"}, +{"fujitsu-dtc", {NULL}, 1513, "udp"}, +{"fujitsu-dtcns", {NULL}, 1514, "tcp"}, +{"fujitsu-dtcns", {NULL}, 1514, "udp"}, +{"ifor-protocol", {NULL}, 1515, "tcp"}, +{"ifor-protocol", {NULL}, 1515, "udp"}, +{"vpad", {NULL}, 1516, "tcp"}, +{"vpad", {NULL}, 1516, "udp"}, +{"vpac", {NULL}, 1517, "tcp"}, +{"vpac", {NULL}, 1517, "udp"}, +{"vpvd", {NULL}, 1518, "tcp"}, +{"vpvd", {NULL}, 1518, "udp"}, +{"vpvc", {NULL}, 1519, "tcp"}, +{"vpvc", {NULL}, 1519, "udp"}, +{"atm-zip-office", {NULL}, 1520, "tcp"}, +{"atm-zip-office", {NULL}, 1520, "udp"}, +{"ncube-lm", {NULL}, 1521, "tcp"}, +{"ncube-lm", {NULL}, 1521, "udp"}, +{"ricardo-lm", {NULL}, 1522, "tcp"}, +{"ricardo-lm", {NULL}, 1522, "udp"}, +{"cichild-lm", {NULL}, 1523, "tcp"}, +{"cichild-lm", {NULL}, 1523, "udp"}, +{"ingreslock", {NULL}, 1524, "tcp"}, +{"ingreslock", {NULL}, 1524, "udp"}, +{"orasrv", {NULL}, 1525, "tcp"}, +{"orasrv", {NULL}, 1525, "udp"}, +{"prospero-np", {NULL}, 1525, "tcp"}, +{"prospero-np", {NULL}, 1525, "udp"}, +{"pdap-np", {NULL}, 1526, "tcp"}, +{"pdap-np", {NULL}, 1526, "udp"}, +{"tlisrv", {NULL}, 1527, "tcp"}, +{"tlisrv", {NULL}, 1527, "udp"}, +{"coauthor", {NULL}, 1529, "tcp"}, +{"coauthor", {NULL}, 1529, "udp"}, +{"rap-service", {NULL}, 1530, "tcp"}, +{"rap-service", {NULL}, 1530, "udp"}, +{"rap-listen", {NULL}, 1531, "tcp"}, +{"rap-listen", {NULL}, 1531, "udp"}, +{"miroconnect", {NULL}, 1532, "tcp"}, +{"miroconnect", {NULL}, 1532, "udp"}, +{"virtual-places", {NULL}, 1533, "tcp"}, +{"virtual-places", {NULL}, 1533, "udp"}, +{"micromuse-lm", {NULL}, 1534, "tcp"}, +{"micromuse-lm", {NULL}, 1534, "udp"}, +{"ampr-info", {NULL}, 1535, "tcp"}, +{"ampr-info", {NULL}, 1535, "udp"}, +{"ampr-inter", {NULL}, 1536, "tcp"}, +{"ampr-inter", {NULL}, 1536, "udp"}, +{"sdsc-lm", {NULL}, 1537, "tcp"}, +{"sdsc-lm", {NULL}, 1537, "udp"}, +{"3ds-lm", {NULL}, 1538, "tcp"}, +{"3ds-lm", {NULL}, 1538, "udp"}, +{"intellistor-lm", {NULL}, 1539, "tcp"}, +{"intellistor-lm", {NULL}, 1539, "udp"}, +{"rds", {NULL}, 1540, "tcp"}, +{"rds", {NULL}, 1540, "udp"}, +{"rds2", {NULL}, 1541, "tcp"}, +{"rds2", {NULL}, 1541, "udp"}, +{"gridgen-elmd", {NULL}, 1542, "tcp"}, +{"gridgen-elmd", {NULL}, 1542, "udp"}, +{"simba-cs", {NULL}, 1543, "tcp"}, +{"simba-cs", {NULL}, 1543, "udp"}, +{"aspeclmd", {NULL}, 1544, "tcp"}, +{"aspeclmd", {NULL}, 1544, "udp"}, +{"vistium-share", {NULL}, 1545, "tcp"}, +{"vistium-share", {NULL}, 1545, "udp"}, +{"abbaccuray", {NULL}, 1546, "tcp"}, +{"abbaccuray", {NULL}, 1546, "udp"}, +{"laplink", {NULL}, 1547, "tcp"}, +{"laplink", {NULL}, 1547, "udp"}, +{"axon-lm", {NULL}, 1548, "tcp"}, +{"axon-lm", {NULL}, 1548, "udp"}, +{"shivahose", {NULL}, 1549, "tcp"}, +{"shivasound", {NULL}, 1549, "udp"}, +{"3m-image-lm", {NULL}, 1550, "tcp"}, +{"3m-image-lm", {NULL}, 1550, "udp"}, +{"hecmtl-db", {NULL}, 1551, "tcp"}, +{"hecmtl-db", {NULL}, 1551, "udp"}, +{"pciarray", {NULL}, 1552, "tcp"}, +{"pciarray", {NULL}, 1552, "udp"}, +{"sna-cs", {NULL}, 1553, "tcp"}, +{"sna-cs", {NULL}, 1553, "udp"}, +{"caci-lm", {NULL}, 1554, "tcp"}, +{"caci-lm", {NULL}, 1554, "udp"}, +{"livelan", {NULL}, 1555, "tcp"}, +{"livelan", {NULL}, 1555, "udp"}, +{"veritas_pbx", {NULL}, 1556, "tcp"}, +{"veritas_pbx", {NULL}, 1556, "udp"}, +{"arbortext-lm", {NULL}, 1557, "tcp"}, +{"arbortext-lm", {NULL}, 1557, "udp"}, +{"xingmpeg", {NULL}, 1558, "tcp"}, +{"xingmpeg", {NULL}, 1558, "udp"}, +{"web2host", {NULL}, 1559, "tcp"}, +{"web2host", {NULL}, 1559, "udp"}, +{"asci-val", {NULL}, 1560, "tcp"}, +{"asci-val", {NULL}, 1560, "udp"}, +{"facilityview", {NULL}, 1561, "tcp"}, +{"facilityview", {NULL}, 1561, "udp"}, +{"pconnectmgr", {NULL}, 1562, "tcp"}, +{"pconnectmgr", {NULL}, 1562, "udp"}, +{"cadabra-lm", {NULL}, 1563, "tcp"}, +{"cadabra-lm", {NULL}, 1563, "udp"}, +{"pay-per-view", {NULL}, 1564, "tcp"}, +{"pay-per-view", {NULL}, 1564, "udp"}, +{"winddlb", {NULL}, 1565, "tcp"}, +{"winddlb", {NULL}, 1565, "udp"}, +{"corelvideo", {NULL}, 1566, "tcp"}, +{"corelvideo", {NULL}, 1566, "udp"}, +{"jlicelmd", {NULL}, 1567, "tcp"}, +{"jlicelmd", {NULL}, 1567, "udp"}, +{"tsspmap", {NULL}, 1568, "tcp"}, +{"tsspmap", {NULL}, 1568, "udp"}, +{"ets", {NULL}, 1569, "tcp"}, +{"ets", {NULL}, 1569, "udp"}, +{"orbixd", {NULL}, 1570, "tcp"}, +{"orbixd", {NULL}, 1570, "udp"}, +{"rdb-dbs-disp", {NULL}, 1571, "tcp"}, +{"rdb-dbs-disp", {NULL}, 1571, "udp"}, +{"chip-lm", {NULL}, 1572, "tcp"}, +{"chip-lm", {NULL}, 1572, "udp"}, +{"itscomm-ns", {NULL}, 1573, "tcp"}, +{"itscomm-ns", {NULL}, 1573, "udp"}, +{"mvel-lm", {NULL}, 1574, "tcp"}, +{"mvel-lm", {NULL}, 1574, "udp"}, +{"oraclenames", {NULL}, 1575, "tcp"}, +{"oraclenames", {NULL}, 1575, "udp"}, +{"moldflow-lm", {NULL}, 1576, "tcp"}, +{"moldflow-lm", {NULL}, 1576, "udp"}, +{"hypercube-lm", {NULL}, 1577, "tcp"}, +{"hypercube-lm", {NULL}, 1577, "udp"}, +{"jacobus-lm", {NULL}, 1578, "tcp"}, +{"jacobus-lm", {NULL}, 1578, "udp"}, +{"ioc-sea-lm", {NULL}, 1579, "tcp"}, +{"ioc-sea-lm", {NULL}, 1579, "udp"}, +{"tn-tl-r1", {NULL}, 1580, "tcp"}, +{"tn-tl-r2", {NULL}, 1580, "udp"}, +{"mil-2045-47001", {NULL}, 1581, "tcp"}, +{"mil-2045-47001", {NULL}, 1581, "udp"}, +{"msims", {NULL}, 1582, "tcp"}, +{"msims", {NULL}, 1582, "udp"}, +{"simbaexpress", {NULL}, 1583, "tcp"}, +{"simbaexpress", {NULL}, 1583, "udp"}, +{"tn-tl-fd2", {NULL}, 1584, "tcp"}, +{"tn-tl-fd2", {NULL}, 1584, "udp"}, +{"intv", {NULL}, 1585, "tcp"}, +{"intv", {NULL}, 1585, "udp"}, +{"ibm-abtact", {NULL}, 1586, "tcp"}, +{"ibm-abtact", {NULL}, 1586, "udp"}, +{"pra_elmd", {NULL}, 1587, "tcp"}, +{"pra_elmd", {NULL}, 1587, "udp"}, +{"triquest-lm", {NULL}, 1588, "tcp"}, +{"triquest-lm", {NULL}, 1588, "udp"}, +{"vqp", {NULL}, 1589, "tcp"}, +{"vqp", {NULL}, 1589, "udp"}, +{"gemini-lm", {NULL}, 1590, "tcp"}, +{"gemini-lm", {NULL}, 1590, "udp"}, +{"ncpm-pm", {NULL}, 1591, "tcp"}, +{"ncpm-pm", {NULL}, 1591, "udp"}, +{"commonspace", {NULL}, 1592, "tcp"}, +{"commonspace", {NULL}, 1592, "udp"}, +{"mainsoft-lm", {NULL}, 1593, "tcp"}, +{"mainsoft-lm", {NULL}, 1593, "udp"}, +{"sixtrak", {NULL}, 1594, "tcp"}, +{"sixtrak", {NULL}, 1594, "udp"}, +{"radio", {NULL}, 1595, "tcp"}, +{"radio", {NULL}, 1595, "udp"}, +{"radio-sm", {NULL}, 1596, "tcp"}, +{"radio-bc", {NULL}, 1596, "udp"}, +{"orbplus-iiop", {NULL}, 1597, "tcp"}, +{"orbplus-iiop", {NULL}, 1597, "udp"}, +{"picknfs", {NULL}, 1598, "tcp"}, +{"picknfs", {NULL}, 1598, "udp"}, +{"simbaservices", {NULL}, 1599, "tcp"}, +{"simbaservices", {NULL}, 1599, "udp"}, +{"issd", {NULL}, 1600, "tcp"}, +{"issd", {NULL}, 1600, "udp"}, +{"aas", {NULL}, 1601, "tcp"}, +{"aas", {NULL}, 1601, "udp"}, +{"inspect", {NULL}, 1602, "tcp"}, +{"inspect", {NULL}, 1602, "udp"}, +{"picodbc", {NULL}, 1603, "tcp"}, +{"picodbc", {NULL}, 1603, "udp"}, +{"icabrowser", {NULL}, 1604, "tcp"}, +{"icabrowser", {NULL}, 1604, "udp"}, +{"slp", {NULL}, 1605, "tcp"}, +{"slp", {NULL}, 1605, "udp"}, +{"slm-api", {NULL}, 1606, "tcp"}, +{"slm-api", {NULL}, 1606, "udp"}, +{"stt", {NULL}, 1607, "tcp"}, +{"stt", {NULL}, 1607, "udp"}, +{"smart-lm", {NULL}, 1608, "tcp"}, +{"smart-lm", {NULL}, 1608, "udp"}, +{"isysg-lm", {NULL}, 1609, "tcp"}, +{"isysg-lm", {NULL}, 1609, "udp"}, +{"taurus-wh", {NULL}, 1610, "tcp"}, +{"taurus-wh", {NULL}, 1610, "udp"}, +{"ill", {NULL}, 1611, "tcp"}, +{"ill", {NULL}, 1611, "udp"}, +{"netbill-trans", {NULL}, 1612, "tcp"}, +{"netbill-trans", {NULL}, 1612, "udp"}, +{"netbill-keyrep", {NULL}, 1613, "tcp"}, +{"netbill-keyrep", {NULL}, 1613, "udp"}, +{"netbill-cred", {NULL}, 1614, "tcp"}, +{"netbill-cred", {NULL}, 1614, "udp"}, +{"netbill-auth", {NULL}, 1615, "tcp"}, +{"netbill-auth", {NULL}, 1615, "udp"}, +{"netbill-prod", {NULL}, 1616, "tcp"}, +{"netbill-prod", {NULL}, 1616, "udp"}, +{"nimrod-agent", {NULL}, 1617, "tcp"}, +{"nimrod-agent", {NULL}, 1617, "udp"}, +{"skytelnet", {NULL}, 1618, "tcp"}, +{"skytelnet", {NULL}, 1618, "udp"}, +{"xs-openstorage", {NULL}, 1619, "tcp"}, +{"xs-openstorage", {NULL}, 1619, "udp"}, +{"faxportwinport", {NULL}, 1620, "tcp"}, +{"faxportwinport", {NULL}, 1620, "udp"}, +{"softdataphone", {NULL}, 1621, "tcp"}, +{"softdataphone", {NULL}, 1621, "udp"}, +{"ontime", {NULL}, 1622, "tcp"}, +{"ontime", {NULL}, 1622, "udp"}, +{"jaleosnd", {NULL}, 1623, "tcp"}, +{"jaleosnd", {NULL}, 1623, "udp"}, +{"udp-sr-port", {NULL}, 1624, "tcp"}, +{"udp-sr-port", {NULL}, 1624, "udp"}, +{"svs-omagent", {NULL}, 1625, "tcp"}, +{"svs-omagent", {NULL}, 1625, "udp"}, +{"shockwave", {NULL}, 1626, "tcp"}, +{"shockwave", {NULL}, 1626, "udp"}, +{"t128-gateway", {NULL}, 1627, "tcp"}, +{"t128-gateway", {NULL}, 1627, "udp"}, +{"lontalk-norm", {NULL}, 1628, "tcp"}, +{"lontalk-norm", {NULL}, 1628, "udp"}, +{"lontalk-urgnt", {NULL}, 1629, "tcp"}, +{"lontalk-urgnt", {NULL}, 1629, "udp"}, +{"oraclenet8cman", {NULL}, 1630, "tcp"}, +{"oraclenet8cman", {NULL}, 1630, "udp"}, +{"visitview", {NULL}, 1631, "tcp"}, +{"visitview", {NULL}, 1631, "udp"}, +{"pammratc", {NULL}, 1632, "tcp"}, +{"pammratc", {NULL}, 1632, "udp"}, +{"pammrpc", {NULL}, 1633, "tcp"}, +{"pammrpc", {NULL}, 1633, "udp"}, +{"loaprobe", {NULL}, 1634, "tcp"}, +{"loaprobe", {NULL}, 1634, "udp"}, +{"edb-server1", {NULL}, 1635, "tcp"}, +{"edb-server1", {NULL}, 1635, "udp"}, +{"isdc", {NULL}, 1636, "tcp"}, +{"isdc", {NULL}, 1636, "udp"}, +{"islc", {NULL}, 1637, "tcp"}, +{"islc", {NULL}, 1637, "udp"}, +{"ismc", {NULL}, 1638, "tcp"}, +{"ismc", {NULL}, 1638, "udp"}, +{"cert-initiator", {NULL}, 1639, "tcp"}, +{"cert-initiator", {NULL}, 1639, "udp"}, +{"cert-responder", {NULL}, 1640, "tcp"}, +{"cert-responder", {NULL}, 1640, "udp"}, +{"invision", {NULL}, 1641, "tcp"}, +{"invision", {NULL}, 1641, "udp"}, +{"isis-am", {NULL}, 1642, "tcp"}, +{"isis-am", {NULL}, 1642, "udp"}, +{"isis-ambc", {NULL}, 1643, "tcp"}, +{"isis-ambc", {NULL}, 1643, "udp"}, +{"saiseh", {NULL}, 1644, "tcp"}, +{"sightline", {NULL}, 1645, "tcp"}, +{"sightline", {NULL}, 1645, "udp"}, +{"sa-msg-port", {NULL}, 1646, "tcp"}, +{"sa-msg-port", {NULL}, 1646, "udp"}, +{"rsap", {NULL}, 1647, "tcp"}, +{"rsap", {NULL}, 1647, "udp"}, +{"concurrent-lm", {NULL}, 1648, "tcp"}, +{"concurrent-lm", {NULL}, 1648, "udp"}, +{"kermit", {NULL}, 1649, "tcp"}, +{"kermit", {NULL}, 1649, "udp"}, +{"nkd", {NULL}, 1650, "tcp"}, +{"nkd", {NULL}, 1650, "udp"}, +{"shiva_confsrvr", {NULL}, 1651, "tcp"}, +{"shiva_confsrvr", {NULL}, 1651, "udp"}, +{"xnmp", {NULL}, 1652, "tcp"}, +{"xnmp", {NULL}, 1652, "udp"}, +{"alphatech-lm", {NULL}, 1653, "tcp"}, +{"alphatech-lm", {NULL}, 1653, "udp"}, +{"stargatealerts", {NULL}, 1654, "tcp"}, +{"stargatealerts", {NULL}, 1654, "udp"}, +{"dec-mbadmin", {NULL}, 1655, "tcp"}, +{"dec-mbadmin", {NULL}, 1655, "udp"}, +{"dec-mbadmin-h", {NULL}, 1656, "tcp"}, +{"dec-mbadmin-h", {NULL}, 1656, "udp"}, +{"fujitsu-mmpdc", {NULL}, 1657, "tcp"}, +{"fujitsu-mmpdc", {NULL}, 1657, "udp"}, +{"sixnetudr", {NULL}, 1658, "tcp"}, +{"sixnetudr", {NULL}, 1658, "udp"}, +{"sg-lm", {NULL}, 1659, "tcp"}, +{"sg-lm", {NULL}, 1659, "udp"}, +{"skip-mc-gikreq", {NULL}, 1660, "tcp"}, +{"skip-mc-gikreq", {NULL}, 1660, "udp"}, +{"netview-aix-1", {NULL}, 1661, "tcp"}, +{"netview-aix-1", {NULL}, 1661, "udp"}, +{"netview-aix-2", {NULL}, 1662, "tcp"}, +{"netview-aix-2", {NULL}, 1662, "udp"}, +{"netview-aix-3", {NULL}, 1663, "tcp"}, +{"netview-aix-3", {NULL}, 1663, "udp"}, +{"netview-aix-4", {NULL}, 1664, "tcp"}, +{"netview-aix-4", {NULL}, 1664, "udp"}, +{"netview-aix-5", {NULL}, 1665, "tcp"}, +{"netview-aix-5", {NULL}, 1665, "udp"}, +{"netview-aix-6", {NULL}, 1666, "tcp"}, +{"netview-aix-6", {NULL}, 1666, "udp"}, +{"netview-aix-7", {NULL}, 1667, "tcp"}, +{"netview-aix-7", {NULL}, 1667, "udp"}, +{"netview-aix-8", {NULL}, 1668, "tcp"}, +{"netview-aix-8", {NULL}, 1668, "udp"}, +{"netview-aix-9", {NULL}, 1669, "tcp"}, +{"netview-aix-9", {NULL}, 1669, "udp"}, +{"netview-aix-10", {NULL}, 1670, "tcp"}, +{"netview-aix-10", {NULL}, 1670, "udp"}, +{"netview-aix-11", {NULL}, 1671, "tcp"}, +{"netview-aix-11", {NULL}, 1671, "udp"}, +{"netview-aix-12", {NULL}, 1672, "tcp"}, +{"netview-aix-12", {NULL}, 1672, "udp"}, +{"proshare-mc-1", {NULL}, 1673, "tcp"}, +{"proshare-mc-1", {NULL}, 1673, "udp"}, +{"proshare-mc-2", {NULL}, 1674, "tcp"}, +{"proshare-mc-2", {NULL}, 1674, "udp"}, +{"pdp", {NULL}, 1675, "tcp"}, +{"pdp", {NULL}, 1675, "udp"}, +{"netcomm1", {NULL}, 1676, "tcp"}, +{"netcomm2", {NULL}, 1676, "udp"}, +{"groupwise", {NULL}, 1677, "tcp"}, +{"groupwise", {NULL}, 1677, "udp"}, +{"prolink", {NULL}, 1678, "tcp"}, +{"prolink", {NULL}, 1678, "udp"}, +{"darcorp-lm", {NULL}, 1679, "tcp"}, +{"darcorp-lm", {NULL}, 1679, "udp"}, +{"microcom-sbp", {NULL}, 1680, "tcp"}, +{"microcom-sbp", {NULL}, 1680, "udp"}, +{"sd-elmd", {NULL}, 1681, "tcp"}, +{"sd-elmd", {NULL}, 1681, "udp"}, +{"lanyon-lantern", {NULL}, 1682, "tcp"}, +{"lanyon-lantern", {NULL}, 1682, "udp"}, +{"ncpm-hip", {NULL}, 1683, "tcp"}, +{"ncpm-hip", {NULL}, 1683, "udp"}, +{"snaresecure", {NULL}, 1684, "tcp"}, +{"snaresecure", {NULL}, 1684, "udp"}, +{"n2nremote", {NULL}, 1685, "tcp"}, +{"n2nremote", {NULL}, 1685, "udp"}, +{"cvmon", {NULL}, 1686, "tcp"}, +{"cvmon", {NULL}, 1686, "udp"}, +{"nsjtp-ctrl", {NULL}, 1687, "tcp"}, +{"nsjtp-ctrl", {NULL}, 1687, "udp"}, +{"nsjtp-data", {NULL}, 1688, "tcp"}, +{"nsjtp-data", {NULL}, 1688, "udp"}, +{"firefox", {NULL}, 1689, "tcp"}, +{"firefox", {NULL}, 1689, "udp"}, +{"ng-umds", {NULL}, 1690, "tcp"}, +{"ng-umds", {NULL}, 1690, "udp"}, +{"empire-empuma", {NULL}, 1691, "tcp"}, +{"empire-empuma", {NULL}, 1691, "udp"}, +{"sstsys-lm", {NULL}, 1692, "tcp"}, +{"sstsys-lm", {NULL}, 1692, "udp"}, +{"rrirtr", {NULL}, 1693, "tcp"}, +{"rrirtr", {NULL}, 1693, "udp"}, +{"rrimwm", {NULL}, 1694, "tcp"}, +{"rrimwm", {NULL}, 1694, "udp"}, +{"rrilwm", {NULL}, 1695, "tcp"}, +{"rrilwm", {NULL}, 1695, "udp"}, +{"rrifmm", {NULL}, 1696, "tcp"}, +{"rrifmm", {NULL}, 1696, "udp"}, +{"rrisat", {NULL}, 1697, "tcp"}, +{"rrisat", {NULL}, 1697, "udp"}, +{"rsvp-encap-1", {NULL}, 1698, "tcp"}, +{"rsvp-encap-1", {NULL}, 1698, "udp"}, +{"rsvp-encap-2", {NULL}, 1699, "tcp"}, +{"rsvp-encap-2", {NULL}, 1699, "udp"}, +{"mps-raft", {NULL}, 1700, "tcp"}, +{"mps-raft", {NULL}, 1700, "udp"}, +{"l2f", {NULL}, 1701, "tcp"}, +{"l2f", {NULL}, 1701, "udp"}, +{"l2tp", {NULL}, 1701, "tcp"}, +{"l2tp", {NULL}, 1701, "udp"}, +{"deskshare", {NULL}, 1702, "tcp"}, +{"deskshare", {NULL}, 1702, "udp"}, +{"hb-engine", {NULL}, 1703, "tcp"}, +{"hb-engine", {NULL}, 1703, "udp"}, +{"bcs-broker", {NULL}, 1704, "tcp"}, +{"bcs-broker", {NULL}, 1704, "udp"}, +{"slingshot", {NULL}, 1705, "tcp"}, +{"slingshot", {NULL}, 1705, "udp"}, +{"jetform", {NULL}, 1706, "tcp"}, +{"jetform", {NULL}, 1706, "udp"}, +{"vdmplay", {NULL}, 1707, "tcp"}, +{"vdmplay", {NULL}, 1707, "udp"}, +{"gat-lmd", {NULL}, 1708, "tcp"}, +{"gat-lmd", {NULL}, 1708, "udp"}, +{"centra", {NULL}, 1709, "tcp"}, +{"centra", {NULL}, 1709, "udp"}, +{"impera", {NULL}, 1710, "tcp"}, +{"impera", {NULL}, 1710, "udp"}, +{"pptconference", {NULL}, 1711, "tcp"}, +{"pptconference", {NULL}, 1711, "udp"}, +{"registrar", {NULL}, 1712, "tcp"}, +{"registrar", {NULL}, 1712, "udp"}, +{"conferencetalk", {NULL}, 1713, "tcp"}, +{"conferencetalk", {NULL}, 1713, "udp"}, +{"sesi-lm", {NULL}, 1714, "tcp"}, +{"sesi-lm", {NULL}, 1714, "udp"}, +{"houdini-lm", {NULL}, 1715, "tcp"}, +{"houdini-lm", {NULL}, 1715, "udp"}, +{"xmsg", {NULL}, 1716, "tcp"}, +{"xmsg", {NULL}, 1716, "udp"}, +{"fj-hdnet", {NULL}, 1717, "tcp"}, +{"fj-hdnet", {NULL}, 1717, "udp"}, +{"h323gatedisc", {NULL}, 1718, "tcp"}, +{"h323gatedisc", {NULL}, 1718, "udp"}, +{"h323gatestat", {NULL}, 1719, "tcp"}, +{"h323gatestat", {NULL}, 1719, "udp"}, +{"h323hostcall", {NULL}, 1720, "tcp"}, +{"h323hostcall", {NULL}, 1720, "udp"}, +{"caicci", {NULL}, 1721, "tcp"}, +{"caicci", {NULL}, 1721, "udp"}, +{"hks-lm", {NULL}, 1722, "tcp"}, +{"hks-lm", {NULL}, 1722, "udp"}, +{"pptp", {NULL}, 1723, "tcp"}, +{"pptp", {NULL}, 1723, "udp"}, +{"csbphonemaster", {NULL}, 1724, "tcp"}, +{"csbphonemaster", {NULL}, 1724, "udp"}, +{"iden-ralp", {NULL}, 1725, "tcp"}, +{"iden-ralp", {NULL}, 1725, "udp"}, +{"iberiagames", {NULL}, 1726, "tcp"}, +{"iberiagames", {NULL}, 1726, "udp"}, +{"winddx", {NULL}, 1727, "tcp"}, +{"winddx", {NULL}, 1727, "udp"}, +{"telindus", {NULL}, 1728, "tcp"}, +{"telindus", {NULL}, 1728, "udp"}, +{"citynl", {NULL}, 1729, "tcp"}, +{"citynl", {NULL}, 1729, "udp"}, +{"roketz", {NULL}, 1730, "tcp"}, +{"roketz", {NULL}, 1730, "udp"}, +{"msiccp", {NULL}, 1731, "tcp"}, +{"msiccp", {NULL}, 1731, "udp"}, +{"proxim", {NULL}, 1732, "tcp"}, +{"proxim", {NULL}, 1732, "udp"}, +{"siipat", {NULL}, 1733, "tcp"}, +{"siipat", {NULL}, 1733, "udp"}, +{"cambertx-lm", {NULL}, 1734, "tcp"}, +{"cambertx-lm", {NULL}, 1734, "udp"}, +{"privatechat", {NULL}, 1735, "tcp"}, +{"privatechat", {NULL}, 1735, "udp"}, +{"street-stream", {NULL}, 1736, "tcp"}, +{"street-stream", {NULL}, 1736, "udp"}, +{"ultimad", {NULL}, 1737, "tcp"}, +{"ultimad", {NULL}, 1737, "udp"}, +{"gamegen1", {NULL}, 1738, "tcp"}, +{"gamegen1", {NULL}, 1738, "udp"}, +{"webaccess", {NULL}, 1739, "tcp"}, +{"webaccess", {NULL}, 1739, "udp"}, +{"encore", {NULL}, 1740, "tcp"}, +{"encore", {NULL}, 1740, "udp"}, +{"cisco-net-mgmt", {NULL}, 1741, "tcp"}, +{"cisco-net-mgmt", {NULL}, 1741, "udp"}, +{"3Com-nsd", {NULL}, 1742, "tcp"}, +{"3Com-nsd", {NULL}, 1742, "udp"}, +{"cinegrfx-lm", {NULL}, 1743, "tcp"}, +{"cinegrfx-lm", {NULL}, 1743, "udp"}, +{"ncpm-ft", {NULL}, 1744, "tcp"}, +{"ncpm-ft", {NULL}, 1744, "udp"}, +{"remote-winsock", {NULL}, 1745, "tcp"}, +{"remote-winsock", {NULL}, 1745, "udp"}, +{"ftrapid-1", {NULL}, 1746, "tcp"}, +{"ftrapid-1", {NULL}, 1746, "udp"}, +{"ftrapid-2", {NULL}, 1747, "tcp"}, +{"ftrapid-2", {NULL}, 1747, "udp"}, +{"oracle-em1", {NULL}, 1748, "tcp"}, +{"oracle-em1", {NULL}, 1748, "udp"}, +{"aspen-services", {NULL}, 1749, "tcp"}, +{"aspen-services", {NULL}, 1749, "udp"}, +{"sslp", {NULL}, 1750, "tcp"}, +{"sslp", {NULL}, 1750, "udp"}, +{"swiftnet", {NULL}, 1751, "tcp"}, +{"swiftnet", {NULL}, 1751, "udp"}, +{"lofr-lm", {NULL}, 1752, "tcp"}, +{"lofr-lm", {NULL}, 1752, "udp"}, +{"oracle-em2", {NULL}, 1754, "tcp"}, +{"oracle-em2", {NULL}, 1754, "udp"}, +{"ms-streaming", {NULL}, 1755, "tcp"}, +{"ms-streaming", {NULL}, 1755, "udp"}, +{"capfast-lmd", {NULL}, 1756, "tcp"}, +{"capfast-lmd", {NULL}, 1756, "udp"}, +{"cnhrp", {NULL}, 1757, "tcp"}, +{"cnhrp", {NULL}, 1757, "udp"}, +{"tftp-mcast", {NULL}, 1758, "tcp"}, +{"tftp-mcast", {NULL}, 1758, "udp"}, +{"spss-lm", {NULL}, 1759, "tcp"}, +{"spss-lm", {NULL}, 1759, "udp"}, +{"www-ldap-gw", {NULL}, 1760, "tcp"}, +{"www-ldap-gw", {NULL}, 1760, "udp"}, +{"cft-0", {NULL}, 1761, "tcp"}, +{"cft-0", {NULL}, 1761, "udp"}, +{"cft-1", {NULL}, 1762, "tcp"}, +{"cft-1", {NULL}, 1762, "udp"}, +{"cft-2", {NULL}, 1763, "tcp"}, +{"cft-2", {NULL}, 1763, "udp"}, +{"cft-3", {NULL}, 1764, "tcp"}, +{"cft-3", {NULL}, 1764, "udp"}, +{"cft-4", {NULL}, 1765, "tcp"}, +{"cft-4", {NULL}, 1765, "udp"}, +{"cft-5", {NULL}, 1766, "tcp"}, +{"cft-5", {NULL}, 1766, "udp"}, +{"cft-6", {NULL}, 1767, "tcp"}, +{"cft-6", {NULL}, 1767, "udp"}, +{"cft-7", {NULL}, 1768, "tcp"}, +{"cft-7", {NULL}, 1768, "udp"}, +{"bmc-net-adm", {NULL}, 1769, "tcp"}, +{"bmc-net-adm", {NULL}, 1769, "udp"}, +{"bmc-net-svc", {NULL}, 1770, "tcp"}, +{"bmc-net-svc", {NULL}, 1770, "udp"}, +{"vaultbase", {NULL}, 1771, "tcp"}, +{"vaultbase", {NULL}, 1771, "udp"}, +{"essweb-gw", {NULL}, 1772, "tcp"}, +{"essweb-gw", {NULL}, 1772, "udp"}, +{"kmscontrol", {NULL}, 1773, "tcp"}, +{"kmscontrol", {NULL}, 1773, "udp"}, +{"global-dtserv", {NULL}, 1774, "tcp"}, +{"global-dtserv", {NULL}, 1774, "udp"}, +{"femis", {NULL}, 1776, "tcp"}, +{"femis", {NULL}, 1776, "udp"}, +{"powerguardian", {NULL}, 1777, "tcp"}, +{"powerguardian", {NULL}, 1777, "udp"}, +{"prodigy-intrnet", {NULL}, 1778, "tcp"}, +{"prodigy-intrnet", {NULL}, 1778, "udp"}, +{"pharmasoft", {NULL}, 1779, "tcp"}, +{"pharmasoft", {NULL}, 1779, "udp"}, +{"dpkeyserv", {NULL}, 1780, "tcp"}, +{"dpkeyserv", {NULL}, 1780, "udp"}, +{"answersoft-lm", {NULL}, 1781, "tcp"}, +{"answersoft-lm", {NULL}, 1781, "udp"}, +{"hp-hcip", {NULL}, 1782, "tcp"}, +{"hp-hcip", {NULL}, 1782, "udp"}, +{"finle-lm", {NULL}, 1784, "tcp"}, +{"finle-lm", {NULL}, 1784, "udp"}, +{"windlm", {NULL}, 1785, "tcp"}, +{"windlm", {NULL}, 1785, "udp"}, +{"funk-logger", {NULL}, 1786, "tcp"}, +{"funk-logger", {NULL}, 1786, "udp"}, +{"funk-license", {NULL}, 1787, "tcp"}, +{"funk-license", {NULL}, 1787, "udp"}, +{"psmond", {NULL}, 1788, "tcp"}, +{"psmond", {NULL}, 1788, "udp"}, +{"hello", {NULL}, 1789, "tcp"}, +{"hello", {NULL}, 1789, "udp"}, +{"nmsp", {NULL}, 1790, "tcp"}, +{"nmsp", {NULL}, 1790, "udp"}, +{"ea1", {NULL}, 1791, "tcp"}, +{"ea1", {NULL}, 1791, "udp"}, +{"ibm-dt-2", {NULL}, 1792, "tcp"}, +{"ibm-dt-2", {NULL}, 1792, "udp"}, +{"rsc-robot", {NULL}, 1793, "tcp"}, +{"rsc-robot", {NULL}, 1793, "udp"}, +{"cera-bcm", {NULL}, 1794, "tcp"}, +{"cera-bcm", {NULL}, 1794, "udp"}, +{"dpi-proxy", {NULL}, 1795, "tcp"}, +{"dpi-proxy", {NULL}, 1795, "udp"}, +{"vocaltec-admin", {NULL}, 1796, "tcp"}, +{"vocaltec-admin", {NULL}, 1796, "udp"}, +{"uma", {NULL}, 1797, "tcp"}, +{"uma", {NULL}, 1797, "udp"}, +{"etp", {NULL}, 1798, "tcp"}, +{"etp", {NULL}, 1798, "udp"}, +{"netrisk", {NULL}, 1799, "tcp"}, +{"netrisk", {NULL}, 1799, "udp"}, +{"ansys-lm", {NULL}, 1800, "tcp"}, +{"ansys-lm", {NULL}, 1800, "udp"}, +{"msmq", {NULL}, 1801, "tcp"}, +{"msmq", {NULL}, 1801, "udp"}, +{"concomp1", {NULL}, 1802, "tcp"}, +{"concomp1", {NULL}, 1802, "udp"}, +{"hp-hcip-gwy", {NULL}, 1803, "tcp"}, +{"hp-hcip-gwy", {NULL}, 1803, "udp"}, +{"enl", {NULL}, 1804, "tcp"}, +{"enl", {NULL}, 1804, "udp"}, +{"enl-name", {NULL}, 1805, "tcp"}, +{"enl-name", {NULL}, 1805, "udp"}, +{"musiconline", {NULL}, 1806, "tcp"}, +{"musiconline", {NULL}, 1806, "udp"}, +{"fhsp", {NULL}, 1807, "tcp"}, +{"fhsp", {NULL}, 1807, "udp"}, +{"oracle-vp2", {NULL}, 1808, "tcp"}, +{"oracle-vp2", {NULL}, 1808, "udp"}, +{"oracle-vp1", {NULL}, 1809, "tcp"}, +{"oracle-vp1", {NULL}, 1809, "udp"}, +{"jerand-lm", {NULL}, 1810, "tcp"}, +{"jerand-lm", {NULL}, 1810, "udp"}, +{"scientia-sdb", {NULL}, 1811, "tcp"}, +{"scientia-sdb", {NULL}, 1811, "udp"}, +{"radius", {NULL}, 1812, "tcp"}, +{"radius", {NULL}, 1812, "udp"}, +{"radius-acct", {NULL}, 1813, "tcp"}, +{"radius-acct", {NULL}, 1813, "udp"}, +{"tdp-suite", {NULL}, 1814, "tcp"}, +{"tdp-suite", {NULL}, 1814, "udp"}, +{"mmpft", {NULL}, 1815, "tcp"}, +{"mmpft", {NULL}, 1815, "udp"}, +{"harp", {NULL}, 1816, "tcp"}, +{"harp", {NULL}, 1816, "udp"}, +{"rkb-oscs", {NULL}, 1817, "tcp"}, +{"rkb-oscs", {NULL}, 1817, "udp"}, +{"etftp", {NULL}, 1818, "tcp"}, +{"etftp", {NULL}, 1818, "udp"}, +{"plato-lm", {NULL}, 1819, "tcp"}, +{"plato-lm", {NULL}, 1819, "udp"}, +{"mcagent", {NULL}, 1820, "tcp"}, +{"mcagent", {NULL}, 1820, "udp"}, +{"donnyworld", {NULL}, 1821, "tcp"}, +{"donnyworld", {NULL}, 1821, "udp"}, +{"es-elmd", {NULL}, 1822, "tcp"}, +{"es-elmd", {NULL}, 1822, "udp"}, +{"unisys-lm", {NULL}, 1823, "tcp"}, +{"unisys-lm", {NULL}, 1823, "udp"}, +{"metrics-pas", {NULL}, 1824, "tcp"}, +{"metrics-pas", {NULL}, 1824, "udp"}, +{"direcpc-video", {NULL}, 1825, "tcp"}, +{"direcpc-video", {NULL}, 1825, "udp"}, +{"ardt", {NULL}, 1826, "tcp"}, +{"ardt", {NULL}, 1826, "udp"}, +{"asi", {NULL}, 1827, "tcp"}, +{"asi", {NULL}, 1827, "udp"}, +{"itm-mcell-u", {NULL}, 1828, "tcp"}, +{"itm-mcell-u", {NULL}, 1828, "udp"}, +{"optika-emedia", {NULL}, 1829, "tcp"}, +{"optika-emedia", {NULL}, 1829, "udp"}, +{"net8-cman", {NULL}, 1830, "tcp"}, +{"net8-cman", {NULL}, 1830, "udp"}, +{"myrtle", {NULL}, 1831, "tcp"}, +{"myrtle", {NULL}, 1831, "udp"}, +{"tht-treasure", {NULL}, 1832, "tcp"}, +{"tht-treasure", {NULL}, 1832, "udp"}, +{"udpradio", {NULL}, 1833, "tcp"}, +{"udpradio", {NULL}, 1833, "udp"}, +{"ardusuni", {NULL}, 1834, "tcp"}, +{"ardusuni", {NULL}, 1834, "udp"}, +{"ardusmul", {NULL}, 1835, "tcp"}, +{"ardusmul", {NULL}, 1835, "udp"}, +{"ste-smsc", {NULL}, 1836, "tcp"}, +{"ste-smsc", {NULL}, 1836, "udp"}, +{"csoft1", {NULL}, 1837, "tcp"}, +{"csoft1", {NULL}, 1837, "udp"}, +{"talnet", {NULL}, 1838, "tcp"}, +{"talnet", {NULL}, 1838, "udp"}, +{"netopia-vo1", {NULL}, 1839, "tcp"}, +{"netopia-vo1", {NULL}, 1839, "udp"}, +{"netopia-vo2", {NULL}, 1840, "tcp"}, +{"netopia-vo2", {NULL}, 1840, "udp"}, +{"netopia-vo3", {NULL}, 1841, "tcp"}, +{"netopia-vo3", {NULL}, 1841, "udp"}, +{"netopia-vo4", {NULL}, 1842, "tcp"}, +{"netopia-vo4", {NULL}, 1842, "udp"}, +{"netopia-vo5", {NULL}, 1843, "tcp"}, +{"netopia-vo5", {NULL}, 1843, "udp"}, +{"direcpc-dll", {NULL}, 1844, "tcp"}, +{"direcpc-dll", {NULL}, 1844, "udp"}, +{"altalink", {NULL}, 1845, "tcp"}, +{"altalink", {NULL}, 1845, "udp"}, +{"tunstall-pnc", {NULL}, 1846, "tcp"}, +{"tunstall-pnc", {NULL}, 1846, "udp"}, +{"slp-notify", {NULL}, 1847, "tcp"}, +{"slp-notify", {NULL}, 1847, "udp"}, +{"fjdocdist", {NULL}, 1848, "tcp"}, +{"fjdocdist", {NULL}, 1848, "udp"}, +{"alpha-sms", {NULL}, 1849, "tcp"}, +{"alpha-sms", {NULL}, 1849, "udp"}, +{"gsi", {NULL}, 1850, "tcp"}, +{"gsi", {NULL}, 1850, "udp"}, +{"ctcd", {NULL}, 1851, "tcp"}, +{"ctcd", {NULL}, 1851, "udp"}, +{"virtual-time", {NULL}, 1852, "tcp"}, +{"virtual-time", {NULL}, 1852, "udp"}, +{"vids-avtp", {NULL}, 1853, "tcp"}, +{"vids-avtp", {NULL}, 1853, "udp"}, +{"buddy-draw", {NULL}, 1854, "tcp"}, +{"buddy-draw", {NULL}, 1854, "udp"}, +{"fiorano-rtrsvc", {NULL}, 1855, "tcp"}, +{"fiorano-rtrsvc", {NULL}, 1855, "udp"}, +{"fiorano-msgsvc", {NULL}, 1856, "tcp"}, +{"fiorano-msgsvc", {NULL}, 1856, "udp"}, +{"datacaptor", {NULL}, 1857, "tcp"}, +{"datacaptor", {NULL}, 1857, "udp"}, +{"privateark", {NULL}, 1858, "tcp"}, +{"privateark", {NULL}, 1858, "udp"}, +{"gammafetchsvr", {NULL}, 1859, "tcp"}, +{"gammafetchsvr", {NULL}, 1859, "udp"}, +{"sunscalar-svc", {NULL}, 1860, "tcp"}, +{"sunscalar-svc", {NULL}, 1860, "udp"}, +{"lecroy-vicp", {NULL}, 1861, "tcp"}, +{"lecroy-vicp", {NULL}, 1861, "udp"}, +{"mysql-cm-agent", {NULL}, 1862, "tcp"}, +{"mysql-cm-agent", {NULL}, 1862, "udp"}, +{"msnp", {NULL}, 1863, "tcp"}, +{"msnp", {NULL}, 1863, "udp"}, +{"paradym-31port", {NULL}, 1864, "tcp"}, +{"paradym-31port", {NULL}, 1864, "udp"}, +{"entp", {NULL}, 1865, "tcp"}, +{"entp", {NULL}, 1865, "udp"}, +{"swrmi", {NULL}, 1866, "tcp"}, +{"swrmi", {NULL}, 1866, "udp"}, +{"udrive", {NULL}, 1867, "tcp"}, +{"udrive", {NULL}, 1867, "udp"}, +{"viziblebrowser", {NULL}, 1868, "tcp"}, +{"viziblebrowser", {NULL}, 1868, "udp"}, +{"transact", {NULL}, 1869, "tcp"}, +{"transact", {NULL}, 1869, "udp"}, +{"sunscalar-dns", {NULL}, 1870, "tcp"}, +{"sunscalar-dns", {NULL}, 1870, "udp"}, +{"canocentral0", {NULL}, 1871, "tcp"}, +{"canocentral0", {NULL}, 1871, "udp"}, +{"canocentral1", {NULL}, 1872, "tcp"}, +{"canocentral1", {NULL}, 1872, "udp"}, +{"fjmpjps", {NULL}, 1873, "tcp"}, +{"fjmpjps", {NULL}, 1873, "udp"}, +{"fjswapsnp", {NULL}, 1874, "tcp"}, +{"fjswapsnp", {NULL}, 1874, "udp"}, +{"westell-stats", {NULL}, 1875, "tcp"}, +{"westell-stats", {NULL}, 1875, "udp"}, +{"ewcappsrv", {NULL}, 1876, "tcp"}, +{"ewcappsrv", {NULL}, 1876, "udp"}, +{"hp-webqosdb", {NULL}, 1877, "tcp"}, +{"hp-webqosdb", {NULL}, 1877, "udp"}, +{"drmsmc", {NULL}, 1878, "tcp"}, +{"drmsmc", {NULL}, 1878, "udp"}, +{"nettgain-nms", {NULL}, 1879, "tcp"}, +{"nettgain-nms", {NULL}, 1879, "udp"}, +{"vsat-control", {NULL}, 1880, "tcp"}, +{"vsat-control", {NULL}, 1880, "udp"}, +{"ibm-mqseries2", {NULL}, 1881, "tcp"}, +{"ibm-mqseries2", {NULL}, 1881, "udp"}, +{"ecsqdmn", {NULL}, 1882, "tcp"}, +{"ecsqdmn", {NULL}, 1882, "udp"}, +{"ibm-mqisdp", {NULL}, 1883, "tcp"}, +{"ibm-mqisdp", {NULL}, 1883, "udp"}, +{"idmaps", {NULL}, 1884, "tcp"}, +{"idmaps", {NULL}, 1884, "udp"}, +{"vrtstrapserver", {NULL}, 1885, "tcp"}, +{"vrtstrapserver", {NULL}, 1885, "udp"}, +{"leoip", {NULL}, 1886, "tcp"}, +{"leoip", {NULL}, 1886, "udp"}, +{"filex-lport", {NULL}, 1887, "tcp"}, +{"filex-lport", {NULL}, 1887, "udp"}, +{"ncconfig", {NULL}, 1888, "tcp"}, +{"ncconfig", {NULL}, 1888, "udp"}, +{"unify-adapter", {NULL}, 1889, "tcp"}, +{"unify-adapter", {NULL}, 1889, "udp"}, +{"wilkenlistener", {NULL}, 1890, "tcp"}, +{"wilkenlistener", {NULL}, 1890, "udp"}, +{"childkey-notif", {NULL}, 1891, "tcp"}, +{"childkey-notif", {NULL}, 1891, "udp"}, +{"childkey-ctrl", {NULL}, 1892, "tcp"}, +{"childkey-ctrl", {NULL}, 1892, "udp"}, +{"elad", {NULL}, 1893, "tcp"}, +{"elad", {NULL}, 1893, "udp"}, +{"o2server-port", {NULL}, 1894, "tcp"}, +{"o2server-port", {NULL}, 1894, "udp"}, +{"b-novative-ls", {NULL}, 1896, "tcp"}, +{"b-novative-ls", {NULL}, 1896, "udp"}, +{"metaagent", {NULL}, 1897, "tcp"}, +{"metaagent", {NULL}, 1897, "udp"}, +{"cymtec-port", {NULL}, 1898, "tcp"}, +{"cymtec-port", {NULL}, 1898, "udp"}, +{"mc2studios", {NULL}, 1899, "tcp"}, +{"mc2studios", {NULL}, 1899, "udp"}, +{"ssdp", {NULL}, 1900, "tcp"}, +{"ssdp", {NULL}, 1900, "udp"}, +{"fjicl-tep-a", {NULL}, 1901, "tcp"}, +{"fjicl-tep-a", {NULL}, 1901, "udp"}, +{"fjicl-tep-b", {NULL}, 1902, "tcp"}, +{"fjicl-tep-b", {NULL}, 1902, "udp"}, +{"linkname", {NULL}, 1903, "tcp"}, +{"linkname", {NULL}, 1903, "udp"}, +{"fjicl-tep-c", {NULL}, 1904, "tcp"}, +{"fjicl-tep-c", {NULL}, 1904, "udp"}, +{"sugp", {NULL}, 1905, "tcp"}, +{"sugp", {NULL}, 1905, "udp"}, +{"tpmd", {NULL}, 1906, "tcp"}, +{"tpmd", {NULL}, 1906, "udp"}, +{"intrastar", {NULL}, 1907, "tcp"}, +{"intrastar", {NULL}, 1907, "udp"}, +{"dawn", {NULL}, 1908, "tcp"}, +{"dawn", {NULL}, 1908, "udp"}, +{"global-wlink", {NULL}, 1909, "tcp"}, +{"global-wlink", {NULL}, 1909, "udp"}, +{"ultrabac", {NULL}, 1910, "tcp"}, +{"ultrabac", {NULL}, 1910, "udp"}, +{"mtp", {NULL}, 1911, "tcp"}, +{"mtp", {NULL}, 1911, "udp"}, +{"rhp-iibp", {NULL}, 1912, "tcp"}, +{"rhp-iibp", {NULL}, 1912, "udp"}, +{"armadp", {NULL}, 1913, "tcp"}, +{"armadp", {NULL}, 1913, "udp"}, +{"elm-momentum", {NULL}, 1914, "tcp"}, +{"elm-momentum", {NULL}, 1914, "udp"}, +{"facelink", {NULL}, 1915, "tcp"}, +{"facelink", {NULL}, 1915, "udp"}, +{"persona", {NULL}, 1916, "tcp"}, +{"persona", {NULL}, 1916, "udp"}, +{"noagent", {NULL}, 1917, "tcp"}, +{"noagent", {NULL}, 1917, "udp"}, +{"can-nds", {NULL}, 1918, "tcp"}, +{"can-nds", {NULL}, 1918, "udp"}, +{"can-dch", {NULL}, 1919, "tcp"}, +{"can-dch", {NULL}, 1919, "udp"}, +{"can-ferret", {NULL}, 1920, "tcp"}, +{"can-ferret", {NULL}, 1920, "udp"}, +{"noadmin", {NULL}, 1921, "tcp"}, +{"noadmin", {NULL}, 1921, "udp"}, +{"tapestry", {NULL}, 1922, "tcp"}, +{"tapestry", {NULL}, 1922, "udp"}, +{"spice", {NULL}, 1923, "tcp"}, +{"spice", {NULL}, 1923, "udp"}, +{"xiip", {NULL}, 1924, "tcp"}, +{"xiip", {NULL}, 1924, "udp"}, +{"discovery-port", {NULL}, 1925, "tcp"}, +{"discovery-port", {NULL}, 1925, "udp"}, +{"egs", {NULL}, 1926, "tcp"}, +{"egs", {NULL}, 1926, "udp"}, +{"videte-cipc", {NULL}, 1927, "tcp"}, +{"videte-cipc", {NULL}, 1927, "udp"}, +{"emsd-port", {NULL}, 1928, "tcp"}, +{"emsd-port", {NULL}, 1928, "udp"}, +{"bandwiz-system", {NULL}, 1929, "tcp"}, +{"bandwiz-system", {NULL}, 1929, "udp"}, +{"driveappserver", {NULL}, 1930, "tcp"}, +{"driveappserver", {NULL}, 1930, "udp"}, +{"amdsched", {NULL}, 1931, "tcp"}, +{"amdsched", {NULL}, 1931, "udp"}, +{"ctt-broker", {NULL}, 1932, "tcp"}, +{"ctt-broker", {NULL}, 1932, "udp"}, +{"xmapi", {NULL}, 1933, "tcp"}, +{"xmapi", {NULL}, 1933, "udp"}, +{"xaapi", {NULL}, 1934, "tcp"}, +{"xaapi", {NULL}, 1934, "udp"}, +{"macromedia-fcs", {NULL}, 1935, "tcp"}, +{"macromedia-fcs", {NULL}, 1935, "udp"}, +{"jetcmeserver", {NULL}, 1936, "tcp"}, +{"jetcmeserver", {NULL}, 1936, "udp"}, +{"jwserver", {NULL}, 1937, "tcp"}, +{"jwserver", {NULL}, 1937, "udp"}, +{"jwclient", {NULL}, 1938, "tcp"}, +{"jwclient", {NULL}, 1938, "udp"}, +{"jvserver", {NULL}, 1939, "tcp"}, +{"jvserver", {NULL}, 1939, "udp"}, +{"jvclient", {NULL}, 1940, "tcp"}, +{"jvclient", {NULL}, 1940, "udp"}, +{"dic-aida", {NULL}, 1941, "tcp"}, +{"dic-aida", {NULL}, 1941, "udp"}, +{"res", {NULL}, 1942, "tcp"}, +{"res", {NULL}, 1942, "udp"}, +{"beeyond-media", {NULL}, 1943, "tcp"}, +{"beeyond-media", {NULL}, 1943, "udp"}, +{"close-combat", {NULL}, 1944, "tcp"}, +{"close-combat", {NULL}, 1944, "udp"}, +{"dialogic-elmd", {NULL}, 1945, "tcp"}, +{"dialogic-elmd", {NULL}, 1945, "udp"}, +{"tekpls", {NULL}, 1946, "tcp"}, +{"tekpls", {NULL}, 1946, "udp"}, +{"sentinelsrm", {NULL}, 1947, "tcp"}, +{"sentinelsrm", {NULL}, 1947, "udp"}, +{"eye2eye", {NULL}, 1948, "tcp"}, +{"eye2eye", {NULL}, 1948, "udp"}, +{"ismaeasdaqlive", {NULL}, 1949, "tcp"}, +{"ismaeasdaqlive", {NULL}, 1949, "udp"}, +{"ismaeasdaqtest", {NULL}, 1950, "tcp"}, +{"ismaeasdaqtest", {NULL}, 1950, "udp"}, +{"bcs-lmserver", {NULL}, 1951, "tcp"}, +{"bcs-lmserver", {NULL}, 1951, "udp"}, +{"mpnjsc", {NULL}, 1952, "tcp"}, +{"mpnjsc", {NULL}, 1952, "udp"}, +{"rapidbase", {NULL}, 1953, "tcp"}, +{"rapidbase", {NULL}, 1953, "udp"}, +{"abr-api", {NULL}, 1954, "tcp"}, +{"abr-api", {NULL}, 1954, "udp"}, +{"abr-secure", {NULL}, 1955, "tcp"}, +{"abr-secure", {NULL}, 1955, "udp"}, +{"vrtl-vmf-ds", {NULL}, 1956, "tcp"}, +{"vrtl-vmf-ds", {NULL}, 1956, "udp"}, +{"unix-status", {NULL}, 1957, "tcp"}, +{"unix-status", {NULL}, 1957, "udp"}, +{"dxadmind", {NULL}, 1958, "tcp"}, +{"dxadmind", {NULL}, 1958, "udp"}, +{"simp-all", {NULL}, 1959, "tcp"}, +{"simp-all", {NULL}, 1959, "udp"}, +{"nasmanager", {NULL}, 1960, "tcp"}, +{"nasmanager", {NULL}, 1960, "udp"}, +{"bts-appserver", {NULL}, 1961, "tcp"}, +{"bts-appserver", {NULL}, 1961, "udp"}, +{"biap-mp", {NULL}, 1962, "tcp"}, +{"biap-mp", {NULL}, 1962, "udp"}, +{"webmachine", {NULL}, 1963, "tcp"}, +{"webmachine", {NULL}, 1963, "udp"}, +{"solid-e-engine", {NULL}, 1964, "tcp"}, +{"solid-e-engine", {NULL}, 1964, "udp"}, +{"tivoli-npm", {NULL}, 1965, "tcp"}, +{"tivoli-npm", {NULL}, 1965, "udp"}, +{"slush", {NULL}, 1966, "tcp"}, +{"slush", {NULL}, 1966, "udp"}, +{"sns-quote", {NULL}, 1967, "tcp"}, +{"sns-quote", {NULL}, 1967, "udp"}, +{"lipsinc", {NULL}, 1968, "tcp"}, +{"lipsinc", {NULL}, 1968, "udp"}, +{"lipsinc1", {NULL}, 1969, "tcp"}, +{"lipsinc1", {NULL}, 1969, "udp"}, +{"netop-rc", {NULL}, 1970, "tcp"}, +{"netop-rc", {NULL}, 1970, "udp"}, +{"netop-school", {NULL}, 1971, "tcp"}, +{"netop-school", {NULL}, 1971, "udp"}, +{"intersys-cache", {NULL}, 1972, "tcp"}, +{"intersys-cache", {NULL}, 1972, "udp"}, +{"dlsrap", {NULL}, 1973, "tcp"}, +{"dlsrap", {NULL}, 1973, "udp"}, +{"drp", {NULL}, 1974, "tcp"}, +{"drp", {NULL}, 1974, "udp"}, +{"tcoflashagent", {NULL}, 1975, "tcp"}, +{"tcoflashagent", {NULL}, 1975, "udp"}, +{"tcoregagent", {NULL}, 1976, "tcp"}, +{"tcoregagent", {NULL}, 1976, "udp"}, +{"tcoaddressbook", {NULL}, 1977, "tcp"}, +{"tcoaddressbook", {NULL}, 1977, "udp"}, +{"unisql", {NULL}, 1978, "tcp"}, +{"unisql", {NULL}, 1978, "udp"}, +{"unisql-java", {NULL}, 1979, "tcp"}, +{"unisql-java", {NULL}, 1979, "udp"}, +{"pearldoc-xact", {NULL}, 1980, "tcp"}, +{"pearldoc-xact", {NULL}, 1980, "udp"}, +{"p2pq", {NULL}, 1981, "tcp"}, +{"p2pq", {NULL}, 1981, "udp"}, +{"estamp", {NULL}, 1982, "tcp"}, +{"estamp", {NULL}, 1982, "udp"}, +{"lhtp", {NULL}, 1983, "tcp"}, +{"lhtp", {NULL}, 1983, "udp"}, +{"bb", {NULL}, 1984, "tcp"}, +{"bb", {NULL}, 1984, "udp"}, +{"hsrp", {NULL}, 1985, "tcp"}, +{"hsrp", {NULL}, 1985, "udp"}, +{"licensedaemon", {NULL}, 1986, "tcp"}, +{"licensedaemon", {NULL}, 1986, "udp"}, +{"tr-rsrb-p1", {NULL}, 1987, "tcp"}, +{"tr-rsrb-p1", {NULL}, 1987, "udp"}, +{"tr-rsrb-p2", {NULL}, 1988, "tcp"}, +{"tr-rsrb-p2", {NULL}, 1988, "udp"}, +{"tr-rsrb-p3", {NULL}, 1989, "tcp"}, +{"tr-rsrb-p3", {NULL}, 1989, "udp"}, +{"mshnet", {NULL}, 1989, "tcp"}, +{"mshnet", {NULL}, 1989, "udp"}, +{"stun-p1", {NULL}, 1990, "tcp"}, +{"stun-p1", {NULL}, 1990, "udp"}, +{"stun-p2", {NULL}, 1991, "tcp"}, +{"stun-p2", {NULL}, 1991, "udp"}, +{"stun-p3", {NULL}, 1992, "tcp"}, +{"stun-p3", {NULL}, 1992, "udp"}, +{"ipsendmsg", {NULL}, 1992, "tcp"}, +{"ipsendmsg", {NULL}, 1992, "udp"}, +{"snmp-tcp-port", {NULL}, 1993, "tcp"}, +{"snmp-tcp-port", {NULL}, 1993, "udp"}, +{"stun-port", {NULL}, 1994, "tcp"}, +{"stun-port", {NULL}, 1994, "udp"}, +{"perf-port", {NULL}, 1995, "tcp"}, +{"perf-port", {NULL}, 1995, "udp"}, +{"tr-rsrb-port", {NULL}, 1996, "tcp"}, +{"tr-rsrb-port", {NULL}, 1996, "udp"}, +{"gdp-port", {NULL}, 1997, "tcp"}, +{"gdp-port", {NULL}, 1997, "udp"}, +{"x25-svc-port", {NULL}, 1998, "tcp"}, +{"x25-svc-port", {NULL}, 1998, "udp"}, +{"tcp-id-port", {NULL}, 1999, "tcp"}, +{"tcp-id-port", {NULL}, 1999, "udp"}, +{"cisco-sccp", {NULL}, 2000, "tcp"}, +{"cisco-sccp", {NULL}, 2000, "udp"}, +{"dc", {NULL}, 2001, "tcp"}, +{"wizard", {NULL}, 2001, "udp"}, +{"globe", {NULL}, 2002, "tcp"}, +{"globe", {NULL}, 2002, "udp"}, +{"brutus", {NULL}, 2003, "tcp"}, +{"brutus", {NULL}, 2003, "udp"}, +{"mailbox", {NULL}, 2004, "tcp"}, +{"emce", {NULL}, 2004, "udp"}, +{"berknet", {NULL}, 2005, "tcp"}, +{"oracle", {NULL}, 2005, "udp"}, +{"invokator", {NULL}, 2006, "tcp"}, +{"raid-cd", {NULL}, 2006, "udp"}, +{"dectalk", {NULL}, 2007, "tcp"}, +{"raid-am", {NULL}, 2007, "udp"}, +{"conf", {NULL}, 2008, "tcp"}, +{"terminaldb", {NULL}, 2008, "udp"}, +{"news", {NULL}, 2009, "tcp"}, +{"whosockami", {NULL}, 2009, "udp"}, +{"search", {NULL}, 2010, "tcp"}, +{"pipe_server", {NULL}, 2010, "udp"}, +{"raid-cc", {NULL}, 2011, "tcp"}, +{"servserv", {NULL}, 2011, "udp"}, +{"ttyinfo", {NULL}, 2012, "tcp"}, +{"raid-ac", {NULL}, 2012, "udp"}, +{"raid-am", {NULL}, 2013, "tcp"}, +{"raid-cd", {NULL}, 2013, "udp"}, +{"troff", {NULL}, 2014, "tcp"}, +{"raid-sf", {NULL}, 2014, "udp"}, +{"cypress", {NULL}, 2015, "tcp"}, +{"raid-cs", {NULL}, 2015, "udp"}, +{"bootserver", {NULL}, 2016, "tcp"}, +{"bootserver", {NULL}, 2016, "udp"}, +{"cypress-stat", {NULL}, 2017, "tcp"}, +{"bootclient", {NULL}, 2017, "udp"}, +{"terminaldb", {NULL}, 2018, "tcp"}, +{"rellpack", {NULL}, 2018, "udp"}, +{"whosockami", {NULL}, 2019, "tcp"}, +{"about", {NULL}, 2019, "udp"}, +{"xinupageserver", {NULL}, 2020, "tcp"}, +{"xinupageserver", {NULL}, 2020, "udp"}, +{"servexec", {NULL}, 2021, "tcp"}, +{"xinuexpansion1", {NULL}, 2021, "udp"}, +{"down", {NULL}, 2022, "tcp"}, +{"xinuexpansion2", {NULL}, 2022, "udp"}, +{"xinuexpansion3", {NULL}, 2023, "tcp"}, +{"xinuexpansion3", {NULL}, 2023, "udp"}, +{"xinuexpansion4", {NULL}, 2024, "tcp"}, +{"xinuexpansion4", {NULL}, 2024, "udp"}, +{"ellpack", {NULL}, 2025, "tcp"}, +{"xribs", {NULL}, 2025, "udp"}, +{"scrabble", {NULL}, 2026, "tcp"}, +{"scrabble", {NULL}, 2026, "udp"}, +{"shadowserver", {NULL}, 2027, "tcp"}, +{"shadowserver", {NULL}, 2027, "udp"}, +{"submitserver", {NULL}, 2028, "tcp"}, +{"submitserver", {NULL}, 2028, "udp"}, +{"hsrpv6", {NULL}, 2029, "tcp"}, +{"hsrpv6", {NULL}, 2029, "udp"}, +{"device2", {NULL}, 2030, "tcp"}, +{"device2", {NULL}, 2030, "udp"}, +{"mobrien-chat", {NULL}, 2031, "tcp"}, +{"mobrien-chat", {NULL}, 2031, "udp"}, +{"blackboard", {NULL}, 2032, "tcp"}, +{"blackboard", {NULL}, 2032, "udp"}, +{"glogger", {NULL}, 2033, "tcp"}, +{"glogger", {NULL}, 2033, "udp"}, +{"scoremgr", {NULL}, 2034, "tcp"}, +{"scoremgr", {NULL}, 2034, "udp"}, +{"imsldoc", {NULL}, 2035, "tcp"}, +{"imsldoc", {NULL}, 2035, "udp"}, +{"e-dpnet", {NULL}, 2036, "tcp"}, +{"e-dpnet", {NULL}, 2036, "udp"}, +{"applus", {NULL}, 2037, "tcp"}, +{"applus", {NULL}, 2037, "udp"}, +{"objectmanager", {NULL}, 2038, "tcp"}, +{"objectmanager", {NULL}, 2038, "udp"}, +{"prizma", {NULL}, 2039, "tcp"}, +{"prizma", {NULL}, 2039, "udp"}, +{"lam", {NULL}, 2040, "tcp"}, +{"lam", {NULL}, 2040, "udp"}, +{"interbase", {NULL}, 2041, "tcp"}, +{"interbase", {NULL}, 2041, "udp"}, +{"isis", {NULL}, 2042, "tcp"}, +{"isis", {NULL}, 2042, "udp"}, +{"isis-bcast", {NULL}, 2043, "tcp"}, +{"isis-bcast", {NULL}, 2043, "udp"}, +{"rimsl", {NULL}, 2044, "tcp"}, +{"rimsl", {NULL}, 2044, "udp"}, +{"cdfunc", {NULL}, 2045, "tcp"}, +{"cdfunc", {NULL}, 2045, "udp"}, +{"sdfunc", {NULL}, 2046, "tcp"}, +{"sdfunc", {NULL}, 2046, "udp"}, +{"dls", {NULL}, 2047, "tcp"}, +{"dls", {NULL}, 2047, "udp"}, +{"dls-monitor", {NULL}, 2048, "tcp"}, +{"dls-monitor", {NULL}, 2048, "udp"}, +{"shilp", {NULL}, 2049, "tcp"}, +{"shilp", {NULL}, 2049, "udp"}, +{"nfs", {NULL}, 2049, "tcp"}, +{"nfs", {NULL}, 2049, "udp"}, +{"nfs", {NULL}, 2049, "sctp"}, +{"av-emb-config", {NULL}, 2050, "tcp"}, +{"av-emb-config", {NULL}, 2050, "udp"}, +{"epnsdp", {NULL}, 2051, "tcp"}, +{"epnsdp", {NULL}, 2051, "udp"}, +{"clearvisn", {NULL}, 2052, "tcp"}, +{"clearvisn", {NULL}, 2052, "udp"}, +{"lot105-ds-upd", {NULL}, 2053, "tcp"}, +{"lot105-ds-upd", {NULL}, 2053, "udp"}, +{"weblogin", {NULL}, 2054, "tcp"}, +{"weblogin", {NULL}, 2054, "udp"}, +{"iop", {NULL}, 2055, "tcp"}, +{"iop", {NULL}, 2055, "udp"}, +{"omnisky", {NULL}, 2056, "tcp"}, +{"omnisky", {NULL}, 2056, "udp"}, +{"rich-cp", {NULL}, 2057, "tcp"}, +{"rich-cp", {NULL}, 2057, "udp"}, +{"newwavesearch", {NULL}, 2058, "tcp"}, +{"newwavesearch", {NULL}, 2058, "udp"}, +{"bmc-messaging", {NULL}, 2059, "tcp"}, +{"bmc-messaging", {NULL}, 2059, "udp"}, +{"teleniumdaemon", {NULL}, 2060, "tcp"}, +{"teleniumdaemon", {NULL}, 2060, "udp"}, +{"netmount", {NULL}, 2061, "tcp"}, +{"netmount", {NULL}, 2061, "udp"}, +{"icg-swp", {NULL}, 2062, "tcp"}, +{"icg-swp", {NULL}, 2062, "udp"}, +{"icg-bridge", {NULL}, 2063, "tcp"}, +{"icg-bridge", {NULL}, 2063, "udp"}, +{"icg-iprelay", {NULL}, 2064, "tcp"}, +{"icg-iprelay", {NULL}, 2064, "udp"}, +{"dlsrpn", {NULL}, 2065, "tcp"}, +{"dlsrpn", {NULL}, 2065, "udp"}, +{"aura", {NULL}, 2066, "tcp"}, +{"aura", {NULL}, 2066, "udp"}, +{"dlswpn", {NULL}, 2067, "tcp"}, +{"dlswpn", {NULL}, 2067, "udp"}, +{"avauthsrvprtcl", {NULL}, 2068, "tcp"}, +{"avauthsrvprtcl", {NULL}, 2068, "udp"}, +{"event-port", {NULL}, 2069, "tcp"}, +{"event-port", {NULL}, 2069, "udp"}, +{"ah-esp-encap", {NULL}, 2070, "tcp"}, +{"ah-esp-encap", {NULL}, 2070, "udp"}, +{"acp-port", {NULL}, 2071, "tcp"}, +{"acp-port", {NULL}, 2071, "udp"}, +{"msync", {NULL}, 2072, "tcp"}, +{"msync", {NULL}, 2072, "udp"}, +{"gxs-data-port", {NULL}, 2073, "tcp"}, +{"gxs-data-port", {NULL}, 2073, "udp"}, +{"vrtl-vmf-sa", {NULL}, 2074, "tcp"}, +{"vrtl-vmf-sa", {NULL}, 2074, "udp"}, +{"newlixengine", {NULL}, 2075, "tcp"}, +{"newlixengine", {NULL}, 2075, "udp"}, +{"newlixconfig", {NULL}, 2076, "tcp"}, +{"newlixconfig", {NULL}, 2076, "udp"}, +{"tsrmagt", {NULL}, 2077, "tcp"}, +{"tsrmagt", {NULL}, 2077, "udp"}, +{"tpcsrvr", {NULL}, 2078, "tcp"}, +{"tpcsrvr", {NULL}, 2078, "udp"}, +{"idware-router", {NULL}, 2079, "tcp"}, +{"idware-router", {NULL}, 2079, "udp"}, +{"autodesk-nlm", {NULL}, 2080, "tcp"}, +{"autodesk-nlm", {NULL}, 2080, "udp"}, +{"kme-trap-port", {NULL}, 2081, "tcp"}, +{"kme-trap-port", {NULL}, 2081, "udp"}, +{"infowave", {NULL}, 2082, "tcp"}, +{"infowave", {NULL}, 2082, "udp"}, +{"radsec", {NULL}, 2083, "tcp"}, +{"radsec", {NULL}, 2083, "udp"}, +{"sunclustergeo", {NULL}, 2084, "tcp"}, +{"sunclustergeo", {NULL}, 2084, "udp"}, +{"ada-cip", {NULL}, 2085, "tcp"}, +{"ada-cip", {NULL}, 2085, "udp"}, +{"gnunet", {NULL}, 2086, "tcp"}, +{"gnunet", {NULL}, 2086, "udp"}, +{"eli", {NULL}, 2087, "tcp"}, +{"eli", {NULL}, 2087, "udp"}, +{"ip-blf", {NULL}, 2088, "tcp"}, +{"ip-blf", {NULL}, 2088, "udp"}, +{"sep", {NULL}, 2089, "tcp"}, +{"sep", {NULL}, 2089, "udp"}, +{"lrp", {NULL}, 2090, "tcp"}, +{"lrp", {NULL}, 2090, "udp"}, +{"prp", {NULL}, 2091, "tcp"}, +{"prp", {NULL}, 2091, "udp"}, +{"descent3", {NULL}, 2092, "tcp"}, +{"descent3", {NULL}, 2092, "udp"}, +{"nbx-cc", {NULL}, 2093, "tcp"}, +{"nbx-cc", {NULL}, 2093, "udp"}, +{"nbx-au", {NULL}, 2094, "tcp"}, +{"nbx-au", {NULL}, 2094, "udp"}, +{"nbx-ser", {NULL}, 2095, "tcp"}, +{"nbx-ser", {NULL}, 2095, "udp"}, +{"nbx-dir", {NULL}, 2096, "tcp"}, +{"nbx-dir", {NULL}, 2096, "udp"}, +{"jetformpreview", {NULL}, 2097, "tcp"}, +{"jetformpreview", {NULL}, 2097, "udp"}, +{"dialog-port", {NULL}, 2098, "tcp"}, +{"dialog-port", {NULL}, 2098, "udp"}, +{"h2250-annex-g", {NULL}, 2099, "tcp"}, +{"h2250-annex-g", {NULL}, 2099, "udp"}, +{"amiganetfs", {NULL}, 2100, "tcp"}, +{"amiganetfs", {NULL}, 2100, "udp"}, +{"rtcm-sc104", {NULL}, 2101, "tcp"}, +{"rtcm-sc104", {NULL}, 2101, "udp"}, +{"zephyr-srv", {NULL}, 2102, "tcp"}, +{"zephyr-srv", {NULL}, 2102, "udp"}, +{"zephyr-clt", {NULL}, 2103, "tcp"}, +{"zephyr-clt", {NULL}, 2103, "udp"}, +{"zephyr-hm", {NULL}, 2104, "tcp"}, +{"zephyr-hm", {NULL}, 2104, "udp"}, +{"minipay", {NULL}, 2105, "tcp"}, +{"minipay", {NULL}, 2105, "udp"}, +{"mzap", {NULL}, 2106, "tcp"}, +{"mzap", {NULL}, 2106, "udp"}, +{"bintec-admin", {NULL}, 2107, "tcp"}, +{"bintec-admin", {NULL}, 2107, "udp"}, +{"comcam", {NULL}, 2108, "tcp"}, +{"comcam", {NULL}, 2108, "udp"}, +{"ergolight", {NULL}, 2109, "tcp"}, +{"ergolight", {NULL}, 2109, "udp"}, +{"umsp", {NULL}, 2110, "tcp"}, +{"umsp", {NULL}, 2110, "udp"}, +{"dsatp", {NULL}, 2111, "tcp"}, +{"dsatp", {NULL}, 2111, "udp"}, +{"idonix-metanet", {NULL}, 2112, "tcp"}, +{"idonix-metanet", {NULL}, 2112, "udp"}, +{"hsl-storm", {NULL}, 2113, "tcp"}, +{"hsl-storm", {NULL}, 2113, "udp"}, +{"newheights", {NULL}, 2114, "tcp"}, +{"newheights", {NULL}, 2114, "udp"}, +{"kdm", {NULL}, 2115, "tcp"}, +{"kdm", {NULL}, 2115, "udp"}, +{"ccowcmr", {NULL}, 2116, "tcp"}, +{"ccowcmr", {NULL}, 2116, "udp"}, +{"mentaclient", {NULL}, 2117, "tcp"}, +{"mentaclient", {NULL}, 2117, "udp"}, +{"mentaserver", {NULL}, 2118, "tcp"}, +{"mentaserver", {NULL}, 2118, "udp"}, +{"gsigatekeeper", {NULL}, 2119, "tcp"}, +{"gsigatekeeper", {NULL}, 2119, "udp"}, +{"qencp", {NULL}, 2120, "tcp"}, +{"qencp", {NULL}, 2120, "udp"}, +{"scientia-ssdb", {NULL}, 2121, "tcp"}, +{"scientia-ssdb", {NULL}, 2121, "udp"}, +{"caupc-remote", {NULL}, 2122, "tcp"}, +{"caupc-remote", {NULL}, 2122, "udp"}, +{"gtp-control", {NULL}, 2123, "tcp"}, +{"gtp-control", {NULL}, 2123, "udp"}, +{"elatelink", {NULL}, 2124, "tcp"}, +{"elatelink", {NULL}, 2124, "udp"}, +{"lockstep", {NULL}, 2125, "tcp"}, +{"lockstep", {NULL}, 2125, "udp"}, +{"pktcable-cops", {NULL}, 2126, "tcp"}, +{"pktcable-cops", {NULL}, 2126, "udp"}, +{"index-pc-wb", {NULL}, 2127, "tcp"}, +{"index-pc-wb", {NULL}, 2127, "udp"}, +{"net-steward", {NULL}, 2128, "tcp"}, +{"net-steward", {NULL}, 2128, "udp"}, +{"cs-live", {NULL}, 2129, "tcp"}, +{"cs-live", {NULL}, 2129, "udp"}, +{"xds", {NULL}, 2130, "tcp"}, +{"xds", {NULL}, 2130, "udp"}, +{"avantageb2b", {NULL}, 2131, "tcp"}, +{"avantageb2b", {NULL}, 2131, "udp"}, +{"solera-epmap", {NULL}, 2132, "tcp"}, +{"solera-epmap", {NULL}, 2132, "udp"}, +{"zymed-zpp", {NULL}, 2133, "tcp"}, +{"zymed-zpp", {NULL}, 2133, "udp"}, +{"avenue", {NULL}, 2134, "tcp"}, +{"avenue", {NULL}, 2134, "udp"}, +{"gris", {NULL}, 2135, "tcp"}, +{"gris", {NULL}, 2135, "udp"}, +{"appworxsrv", {NULL}, 2136, "tcp"}, +{"appworxsrv", {NULL}, 2136, "udp"}, +{"connect", {NULL}, 2137, "tcp"}, +{"connect", {NULL}, 2137, "udp"}, +{"unbind-cluster", {NULL}, 2138, "tcp"}, +{"unbind-cluster", {NULL}, 2138, "udp"}, +{"ias-auth", {NULL}, 2139, "tcp"}, +{"ias-auth", {NULL}, 2139, "udp"}, +{"ias-reg", {NULL}, 2140, "tcp"}, +{"ias-reg", {NULL}, 2140, "udp"}, +{"ias-admind", {NULL}, 2141, "tcp"}, +{"ias-admind", {NULL}, 2141, "udp"}, +{"tdmoip", {NULL}, 2142, "tcp"}, +{"tdmoip", {NULL}, 2142, "udp"}, +{"lv-jc", {NULL}, 2143, "tcp"}, +{"lv-jc", {NULL}, 2143, "udp"}, +{"lv-ffx", {NULL}, 2144, "tcp"}, +{"lv-ffx", {NULL}, 2144, "udp"}, +{"lv-pici", {NULL}, 2145, "tcp"}, +{"lv-pici", {NULL}, 2145, "udp"}, +{"lv-not", {NULL}, 2146, "tcp"}, +{"lv-not", {NULL}, 2146, "udp"}, +{"lv-auth", {NULL}, 2147, "tcp"}, +{"lv-auth", {NULL}, 2147, "udp"}, +{"veritas-ucl", {NULL}, 2148, "tcp"}, +{"veritas-ucl", {NULL}, 2148, "udp"}, +{"acptsys", {NULL}, 2149, "tcp"}, +{"acptsys", {NULL}, 2149, "udp"}, +{"dynamic3d", {NULL}, 2150, "tcp"}, +{"dynamic3d", {NULL}, 2150, "udp"}, +{"docent", {NULL}, 2151, "tcp"}, +{"docent", {NULL}, 2151, "udp"}, +{"gtp-user", {NULL}, 2152, "tcp"}, +{"gtp-user", {NULL}, 2152, "udp"}, +{"ctlptc", {NULL}, 2153, "tcp"}, +{"ctlptc", {NULL}, 2153, "udp"}, +{"stdptc", {NULL}, 2154, "tcp"}, +{"stdptc", {NULL}, 2154, "udp"}, +{"brdptc", {NULL}, 2155, "tcp"}, +{"brdptc", {NULL}, 2155, "udp"}, +{"trp", {NULL}, 2156, "tcp"}, +{"trp", {NULL}, 2156, "udp"}, +{"xnds", {NULL}, 2157, "tcp"}, +{"xnds", {NULL}, 2157, "udp"}, +{"touchnetplus", {NULL}, 2158, "tcp"}, +{"touchnetplus", {NULL}, 2158, "udp"}, +{"gdbremote", {NULL}, 2159, "tcp"}, +{"gdbremote", {NULL}, 2159, "udp"}, +{"apc-2160", {NULL}, 2160, "tcp"}, +{"apc-2160", {NULL}, 2160, "udp"}, +{"apc-2161", {NULL}, 2161, "tcp"}, +{"apc-2161", {NULL}, 2161, "udp"}, +{"navisphere", {NULL}, 2162, "tcp"}, +{"navisphere", {NULL}, 2162, "udp"}, +{"navisphere-sec", {NULL}, 2163, "tcp"}, +{"navisphere-sec", {NULL}, 2163, "udp"}, +{"ddns-v3", {NULL}, 2164, "tcp"}, +{"ddns-v3", {NULL}, 2164, "udp"}, +{"x-bone-api", {NULL}, 2165, "tcp"}, +{"x-bone-api", {NULL}, 2165, "udp"}, +{"iwserver", {NULL}, 2166, "tcp"}, +{"iwserver", {NULL}, 2166, "udp"}, +{"raw-serial", {NULL}, 2167, "tcp"}, +{"raw-serial", {NULL}, 2167, "udp"}, +{"easy-soft-mux", {NULL}, 2168, "tcp"}, +{"easy-soft-mux", {NULL}, 2168, "udp"}, +{"brain", {NULL}, 2169, "tcp"}, +{"brain", {NULL}, 2169, "udp"}, +{"eyetv", {NULL}, 2170, "tcp"}, +{"eyetv", {NULL}, 2170, "udp"}, +{"msfw-storage", {NULL}, 2171, "tcp"}, +{"msfw-storage", {NULL}, 2171, "udp"}, +{"msfw-s-storage", {NULL}, 2172, "tcp"}, +{"msfw-s-storage", {NULL}, 2172, "udp"}, +{"msfw-replica", {NULL}, 2173, "tcp"}, +{"msfw-replica", {NULL}, 2173, "udp"}, +{"msfw-array", {NULL}, 2174, "tcp"}, +{"msfw-array", {NULL}, 2174, "udp"}, +{"airsync", {NULL}, 2175, "tcp"}, +{"airsync", {NULL}, 2175, "udp"}, +{"rapi", {NULL}, 2176, "tcp"}, +{"rapi", {NULL}, 2176, "udp"}, +{"qwave", {NULL}, 2177, "tcp"}, +{"qwave", {NULL}, 2177, "udp"}, +{"bitspeer", {NULL}, 2178, "tcp"}, +{"bitspeer", {NULL}, 2178, "udp"}, +{"vmrdp", {NULL}, 2179, "tcp"}, +{"vmrdp", {NULL}, 2179, "udp"}, +{"mc-gt-srv", {NULL}, 2180, "tcp"}, +{"mc-gt-srv", {NULL}, 2180, "udp"}, +{"eforward", {NULL}, 2181, "tcp"}, +{"eforward", {NULL}, 2181, "udp"}, +{"cgn-stat", {NULL}, 2182, "tcp"}, +{"cgn-stat", {NULL}, 2182, "udp"}, +{"cgn-config", {NULL}, 2183, "tcp"}, +{"cgn-config", {NULL}, 2183, "udp"}, +{"nvd", {NULL}, 2184, "tcp"}, +{"nvd", {NULL}, 2184, "udp"}, +{"onbase-dds", {NULL}, 2185, "tcp"}, +{"onbase-dds", {NULL}, 2185, "udp"}, +{"gtaua", {NULL}, 2186, "tcp"}, +{"gtaua", {NULL}, 2186, "udp"}, +{"ssmc", {NULL}, 2187, "tcp"}, +{"ssmd", {NULL}, 2187, "udp"}, +{"tivoconnect", {NULL}, 2190, "tcp"}, +{"tivoconnect", {NULL}, 2190, "udp"}, +{"tvbus", {NULL}, 2191, "tcp"}, +{"tvbus", {NULL}, 2191, "udp"}, +{"asdis", {NULL}, 2192, "tcp"}, +{"asdis", {NULL}, 2192, "udp"}, +{"drwcs", {NULL}, 2193, "tcp"}, +{"drwcs", {NULL}, 2193, "udp"}, +{"mnp-exchange", {NULL}, 2197, "tcp"}, +{"mnp-exchange", {NULL}, 2197, "udp"}, +{"onehome-remote", {NULL}, 2198, "tcp"}, +{"onehome-remote", {NULL}, 2198, "udp"}, +{"onehome-help", {NULL}, 2199, "tcp"}, +{"onehome-help", {NULL}, 2199, "udp"}, +{"ici", {NULL}, 2200, "tcp"}, +{"ici", {NULL}, 2200, "udp"}, +{"ats", {NULL}, 2201, "tcp"}, +{"ats", {NULL}, 2201, "udp"}, +{"imtc-map", {NULL}, 2202, "tcp"}, +{"imtc-map", {NULL}, 2202, "udp"}, +{"b2-runtime", {NULL}, 2203, "tcp"}, +{"b2-runtime", {NULL}, 2203, "udp"}, +{"b2-license", {NULL}, 2204, "tcp"}, +{"b2-license", {NULL}, 2204, "udp"}, +{"jps", {NULL}, 2205, "tcp"}, +{"jps", {NULL}, 2205, "udp"}, +{"hpocbus", {NULL}, 2206, "tcp"}, +{"hpocbus", {NULL}, 2206, "udp"}, +{"hpssd", {NULL}, 2207, "tcp"}, +{"hpssd", {NULL}, 2207, "udp"}, +{"hpiod", {NULL}, 2208, "tcp"}, +{"hpiod", {NULL}, 2208, "udp"}, +{"rimf-ps", {NULL}, 2209, "tcp"}, +{"rimf-ps", {NULL}, 2209, "udp"}, +{"noaaport", {NULL}, 2210, "tcp"}, +{"noaaport", {NULL}, 2210, "udp"}, +{"emwin", {NULL}, 2211, "tcp"}, +{"emwin", {NULL}, 2211, "udp"}, +{"leecoposserver", {NULL}, 2212, "tcp"}, +{"leecoposserver", {NULL}, 2212, "udp"}, +{"kali", {NULL}, 2213, "tcp"}, +{"kali", {NULL}, 2213, "udp"}, +{"rpi", {NULL}, 2214, "tcp"}, +{"rpi", {NULL}, 2214, "udp"}, +{"ipcore", {NULL}, 2215, "tcp"}, +{"ipcore", {NULL}, 2215, "udp"}, +{"vtu-comms", {NULL}, 2216, "tcp"}, +{"vtu-comms", {NULL}, 2216, "udp"}, +{"gotodevice", {NULL}, 2217, "tcp"}, +{"gotodevice", {NULL}, 2217, "udp"}, +{"bounzza", {NULL}, 2218, "tcp"}, +{"bounzza", {NULL}, 2218, "udp"}, +{"netiq-ncap", {NULL}, 2219, "tcp"}, +{"netiq-ncap", {NULL}, 2219, "udp"}, +{"netiq", {NULL}, 2220, "tcp"}, +{"netiq", {NULL}, 2220, "udp"}, +{"rockwell-csp1", {NULL}, 2221, "tcp"}, +{"rockwell-csp1", {NULL}, 2221, "udp"}, +{"EtherNet/IP-1", {NULL}, 2222, "tcp"}, +{"EtherNet/IP-1", {NULL}, 2222, "udp"}, +{"rockwell-csp2", {NULL}, 2223, "tcp"}, +{"rockwell-csp2", {NULL}, 2223, "udp"}, +{"efi-mg", {NULL}, 2224, "tcp"}, +{"efi-mg", {NULL}, 2224, "udp"}, +{"rcip-itu", {NULL}, 2225, "tcp"}, +{"rcip-itu", {NULL}, 2225, "sctp"}, +{"di-drm", {NULL}, 2226, "tcp"}, +{"di-drm", {NULL}, 2226, "udp"}, +{"di-msg", {NULL}, 2227, "tcp"}, +{"di-msg", {NULL}, 2227, "udp"}, +{"ehome-ms", {NULL}, 2228, "tcp"}, +{"ehome-ms", {NULL}, 2228, "udp"}, +{"datalens", {NULL}, 2229, "tcp"}, +{"datalens", {NULL}, 2229, "udp"}, +{"queueadm", {NULL}, 2230, "tcp"}, +{"queueadm", {NULL}, 2230, "udp"}, +{"wimaxasncp", {NULL}, 2231, "tcp"}, +{"wimaxasncp", {NULL}, 2231, "udp"}, +{"ivs-video", {NULL}, 2232, "tcp"}, +{"ivs-video", {NULL}, 2232, "udp"}, +{"infocrypt", {NULL}, 2233, "tcp"}, +{"infocrypt", {NULL}, 2233, "udp"}, +{"directplay", {NULL}, 2234, "tcp"}, +{"directplay", {NULL}, 2234, "udp"}, +{"sercomm-wlink", {NULL}, 2235, "tcp"}, +{"sercomm-wlink", {NULL}, 2235, "udp"}, +{"nani", {NULL}, 2236, "tcp"}, +{"nani", {NULL}, 2236, "udp"}, +{"optech-port1-lm", {NULL}, 2237, "tcp"}, +{"optech-port1-lm", {NULL}, 2237, "udp"}, +{"aviva-sna", {NULL}, 2238, "tcp"}, +{"aviva-sna", {NULL}, 2238, "udp"}, +{"imagequery", {NULL}, 2239, "tcp"}, +{"imagequery", {NULL}, 2239, "udp"}, +{"recipe", {NULL}, 2240, "tcp"}, +{"recipe", {NULL}, 2240, "udp"}, +{"ivsd", {NULL}, 2241, "tcp"}, +{"ivsd", {NULL}, 2241, "udp"}, +{"foliocorp", {NULL}, 2242, "tcp"}, +{"foliocorp", {NULL}, 2242, "udp"}, +{"magicom", {NULL}, 2243, "tcp"}, +{"magicom", {NULL}, 2243, "udp"}, +{"nmsserver", {NULL}, 2244, "tcp"}, +{"nmsserver", {NULL}, 2244, "udp"}, +{"hao", {NULL}, 2245, "tcp"}, +{"hao", {NULL}, 2245, "udp"}, +{"pc-mta-addrmap", {NULL}, 2246, "tcp"}, +{"pc-mta-addrmap", {NULL}, 2246, "udp"}, +{"antidotemgrsvr", {NULL}, 2247, "tcp"}, +{"antidotemgrsvr", {NULL}, 2247, "udp"}, +{"ums", {NULL}, 2248, "tcp"}, +{"ums", {NULL}, 2248, "udp"}, +{"rfmp", {NULL}, 2249, "tcp"}, +{"rfmp", {NULL}, 2249, "udp"}, +{"remote-collab", {NULL}, 2250, "tcp"}, +{"remote-collab", {NULL}, 2250, "udp"}, +{"dif-port", {NULL}, 2251, "tcp"}, +{"dif-port", {NULL}, 2251, "udp"}, +{"njenet-ssl", {NULL}, 2252, "tcp"}, +{"njenet-ssl", {NULL}, 2252, "udp"}, +{"dtv-chan-req", {NULL}, 2253, "tcp"}, +{"dtv-chan-req", {NULL}, 2253, "udp"}, +{"seispoc", {NULL}, 2254, "tcp"}, +{"seispoc", {NULL}, 2254, "udp"}, +{"vrtp", {NULL}, 2255, "tcp"}, +{"vrtp", {NULL}, 2255, "udp"}, +{"pcc-mfp", {NULL}, 2256, "tcp"}, +{"pcc-mfp", {NULL}, 2256, "udp"}, +{"simple-tx-rx", {NULL}, 2257, "tcp"}, +{"simple-tx-rx", {NULL}, 2257, "udp"}, +{"rcts", {NULL}, 2258, "tcp"}, +{"rcts", {NULL}, 2258, "udp"}, +{"acd-pm", {NULL}, 2259, "tcp"}, +{"acd-pm", {NULL}, 2259, "udp"}, +{"apc-2260", {NULL}, 2260, "tcp"}, +{"apc-2260", {NULL}, 2260, "udp"}, +{"comotionmaster", {NULL}, 2261, "tcp"}, +{"comotionmaster", {NULL}, 2261, "udp"}, +{"comotionback", {NULL}, 2262, "tcp"}, +{"comotionback", {NULL}, 2262, "udp"}, +{"ecwcfg", {NULL}, 2263, "tcp"}, +{"ecwcfg", {NULL}, 2263, "udp"}, +{"apx500api-1", {NULL}, 2264, "tcp"}, +{"apx500api-1", {NULL}, 2264, "udp"}, +{"apx500api-2", {NULL}, 2265, "tcp"}, +{"apx500api-2", {NULL}, 2265, "udp"}, +{"mfserver", {NULL}, 2266, "tcp"}, +{"mfserver", {NULL}, 2266, "udp"}, +{"ontobroker", {NULL}, 2267, "tcp"}, +{"ontobroker", {NULL}, 2267, "udp"}, +{"amt", {NULL}, 2268, "tcp"}, +{"amt", {NULL}, 2268, "udp"}, +{"mikey", {NULL}, 2269, "tcp"}, +{"mikey", {NULL}, 2269, "udp"}, +{"starschool", {NULL}, 2270, "tcp"}, +{"starschool", {NULL}, 2270, "udp"}, +{"mmcals", {NULL}, 2271, "tcp"}, +{"mmcals", {NULL}, 2271, "udp"}, +{"mmcal", {NULL}, 2272, "tcp"}, +{"mmcal", {NULL}, 2272, "udp"}, +{"mysql-im", {NULL}, 2273, "tcp"}, +{"mysql-im", {NULL}, 2273, "udp"}, +{"pcttunnell", {NULL}, 2274, "tcp"}, +{"pcttunnell", {NULL}, 2274, "udp"}, +{"ibridge-data", {NULL}, 2275, "tcp"}, +{"ibridge-data", {NULL}, 2275, "udp"}, +{"ibridge-mgmt", {NULL}, 2276, "tcp"}, +{"ibridge-mgmt", {NULL}, 2276, "udp"}, +{"bluectrlproxy", {NULL}, 2277, "tcp"}, +{"bluectrlproxy", {NULL}, 2277, "udp"}, +{"s3db", {NULL}, 2278, "tcp"}, +{"s3db", {NULL}, 2278, "udp"}, +{"xmquery", {NULL}, 2279, "tcp"}, +{"xmquery", {NULL}, 2279, "udp"}, +{"lnvpoller", {NULL}, 2280, "tcp"}, +{"lnvpoller", {NULL}, 2280, "udp"}, +{"lnvconsole", {NULL}, 2281, "tcp"}, +{"lnvconsole", {NULL}, 2281, "udp"}, +{"lnvalarm", {NULL}, 2282, "tcp"}, +{"lnvalarm", {NULL}, 2282, "udp"}, +{"lnvstatus", {NULL}, 2283, "tcp"}, +{"lnvstatus", {NULL}, 2283, "udp"}, +{"lnvmaps", {NULL}, 2284, "tcp"}, +{"lnvmaps", {NULL}, 2284, "udp"}, +{"lnvmailmon", {NULL}, 2285, "tcp"}, +{"lnvmailmon", {NULL}, 2285, "udp"}, +{"nas-metering", {NULL}, 2286, "tcp"}, +{"nas-metering", {NULL}, 2286, "udp"}, +{"dna", {NULL}, 2287, "tcp"}, +{"dna", {NULL}, 2287, "udp"}, +{"netml", {NULL}, 2288, "tcp"}, +{"netml", {NULL}, 2288, "udp"}, +{"dict-lookup", {NULL}, 2289, "tcp"}, +{"dict-lookup", {NULL}, 2289, "udp"}, +{"sonus-logging", {NULL}, 2290, "tcp"}, +{"sonus-logging", {NULL}, 2290, "udp"}, +{"eapsp", {NULL}, 2291, "tcp"}, +{"eapsp", {NULL}, 2291, "udp"}, +{"mib-streaming", {NULL}, 2292, "tcp"}, +{"mib-streaming", {NULL}, 2292, "udp"}, +{"npdbgmngr", {NULL}, 2293, "tcp"}, +{"npdbgmngr", {NULL}, 2293, "udp"}, +{"konshus-lm", {NULL}, 2294, "tcp"}, +{"konshus-lm", {NULL}, 2294, "udp"}, +{"advant-lm", {NULL}, 2295, "tcp"}, +{"advant-lm", {NULL}, 2295, "udp"}, +{"theta-lm", {NULL}, 2296, "tcp"}, +{"theta-lm", {NULL}, 2296, "udp"}, +{"d2k-datamover1", {NULL}, 2297, "tcp"}, +{"d2k-datamover1", {NULL}, 2297, "udp"}, +{"d2k-datamover2", {NULL}, 2298, "tcp"}, +{"d2k-datamover2", {NULL}, 2298, "udp"}, +{"pc-telecommute", {NULL}, 2299, "tcp"}, +{"pc-telecommute", {NULL}, 2299, "udp"}, +{"cvmmon", {NULL}, 2300, "tcp"}, +{"cvmmon", {NULL}, 2300, "udp"}, +{"cpq-wbem", {NULL}, 2301, "tcp"}, +{"cpq-wbem", {NULL}, 2301, "udp"}, +{"binderysupport", {NULL}, 2302, "tcp"}, +{"binderysupport", {NULL}, 2302, "udp"}, +{"proxy-gateway", {NULL}, 2303, "tcp"}, +{"proxy-gateway", {NULL}, 2303, "udp"}, +{"attachmate-uts", {NULL}, 2304, "tcp"}, +{"attachmate-uts", {NULL}, 2304, "udp"}, +{"mt-scaleserver", {NULL}, 2305, "tcp"}, +{"mt-scaleserver", {NULL}, 2305, "udp"}, +{"tappi-boxnet", {NULL}, 2306, "tcp"}, +{"tappi-boxnet", {NULL}, 2306, "udp"}, +{"pehelp", {NULL}, 2307, "tcp"}, +{"pehelp", {NULL}, 2307, "udp"}, +{"sdhelp", {NULL}, 2308, "tcp"}, +{"sdhelp", {NULL}, 2308, "udp"}, +{"sdserver", {NULL}, 2309, "tcp"}, +{"sdserver", {NULL}, 2309, "udp"}, +{"sdclient", {NULL}, 2310, "tcp"}, +{"sdclient", {NULL}, 2310, "udp"}, +{"messageservice", {NULL}, 2311, "tcp"}, +{"messageservice", {NULL}, 2311, "udp"}, +{"wanscaler", {NULL}, 2312, "tcp"}, +{"wanscaler", {NULL}, 2312, "udp"}, +{"iapp", {NULL}, 2313, "tcp"}, +{"iapp", {NULL}, 2313, "udp"}, +{"cr-websystems", {NULL}, 2314, "tcp"}, +{"cr-websystems", {NULL}, 2314, "udp"}, +{"precise-sft", {NULL}, 2315, "tcp"}, +{"precise-sft", {NULL}, 2315, "udp"}, +{"sent-lm", {NULL}, 2316, "tcp"}, +{"sent-lm", {NULL}, 2316, "udp"}, +{"attachmate-g32", {NULL}, 2317, "tcp"}, +{"attachmate-g32", {NULL}, 2317, "udp"}, +{"cadencecontrol", {NULL}, 2318, "tcp"}, +{"cadencecontrol", {NULL}, 2318, "udp"}, +{"infolibria", {NULL}, 2319, "tcp"}, +{"infolibria", {NULL}, 2319, "udp"}, +{"siebel-ns", {NULL}, 2320, "tcp"}, +{"siebel-ns", {NULL}, 2320, "udp"}, +{"rdlap", {NULL}, 2321, "tcp"}, +{"rdlap", {NULL}, 2321, "udp"}, +{"ofsd", {NULL}, 2322, "tcp"}, +{"ofsd", {NULL}, 2322, "udp"}, +{"3d-nfsd", {NULL}, 2323, "tcp"}, +{"3d-nfsd", {NULL}, 2323, "udp"}, +{"cosmocall", {NULL}, 2324, "tcp"}, +{"cosmocall", {NULL}, 2324, "udp"}, +{"ansysli", {NULL}, 2325, "tcp"}, +{"ansysli", {NULL}, 2325, "udp"}, +{"idcp", {NULL}, 2326, "tcp"}, +{"idcp", {NULL}, 2326, "udp"}, +{"xingcsm", {NULL}, 2327, "tcp"}, +{"xingcsm", {NULL}, 2327, "udp"}, +{"netrix-sftm", {NULL}, 2328, "tcp"}, +{"netrix-sftm", {NULL}, 2328, "udp"}, +{"nvd", {NULL}, 2329, "tcp"}, +{"nvd", {NULL}, 2329, "udp"}, +{"tscchat", {NULL}, 2330, "tcp"}, +{"tscchat", {NULL}, 2330, "udp"}, +{"agentview", {NULL}, 2331, "tcp"}, +{"agentview", {NULL}, 2331, "udp"}, +{"rcc-host", {NULL}, 2332, "tcp"}, +{"rcc-host", {NULL}, 2332, "udp"}, +{"snapp", {NULL}, 2333, "tcp"}, +{"snapp", {NULL}, 2333, "udp"}, +{"ace-client", {NULL}, 2334, "tcp"}, +{"ace-client", {NULL}, 2334, "udp"}, +{"ace-proxy", {NULL}, 2335, "tcp"}, +{"ace-proxy", {NULL}, 2335, "udp"}, +{"appleugcontrol", {NULL}, 2336, "tcp"}, +{"appleugcontrol", {NULL}, 2336, "udp"}, +{"ideesrv", {NULL}, 2337, "tcp"}, +{"ideesrv", {NULL}, 2337, "udp"}, +{"norton-lambert", {NULL}, 2338, "tcp"}, +{"norton-lambert", {NULL}, 2338, "udp"}, +{"3com-webview", {NULL}, 2339, "tcp"}, +{"3com-webview", {NULL}, 2339, "udp"}, +{"wrs_registry", {NULL}, 2340, "tcp"}, +{"wrs_registry", {NULL}, 2340, "udp"}, +{"xiostatus", {NULL}, 2341, "tcp"}, +{"xiostatus", {NULL}, 2341, "udp"}, +{"manage-exec", {NULL}, 2342, "tcp"}, +{"manage-exec", {NULL}, 2342, "udp"}, +{"nati-logos", {NULL}, 2343, "tcp"}, +{"nati-logos", {NULL}, 2343, "udp"}, +{"fcmsys", {NULL}, 2344, "tcp"}, +{"fcmsys", {NULL}, 2344, "udp"}, +{"dbm", {NULL}, 2345, "tcp"}, +{"dbm", {NULL}, 2345, "udp"}, +{"redstorm_join", {NULL}, 2346, "tcp"}, +{"redstorm_join", {NULL}, 2346, "udp"}, +{"redstorm_find", {NULL}, 2347, "tcp"}, +{"redstorm_find", {NULL}, 2347, "udp"}, +{"redstorm_info", {NULL}, 2348, "tcp"}, +{"redstorm_info", {NULL}, 2348, "udp"}, +{"redstorm_diag", {NULL}, 2349, "tcp"}, +{"redstorm_diag", {NULL}, 2349, "udp"}, +{"psbserver", {NULL}, 2350, "tcp"}, +{"psbserver", {NULL}, 2350, "udp"}, +{"psrserver", {NULL}, 2351, "tcp"}, +{"psrserver", {NULL}, 2351, "udp"}, +{"pslserver", {NULL}, 2352, "tcp"}, +{"pslserver", {NULL}, 2352, "udp"}, +{"pspserver", {NULL}, 2353, "tcp"}, +{"pspserver", {NULL}, 2353, "udp"}, +{"psprserver", {NULL}, 2354, "tcp"}, +{"psprserver", {NULL}, 2354, "udp"}, +{"psdbserver", {NULL}, 2355, "tcp"}, +{"psdbserver", {NULL}, 2355, "udp"}, +{"gxtelmd", {NULL}, 2356, "tcp"}, +{"gxtelmd", {NULL}, 2356, "udp"}, +{"unihub-server", {NULL}, 2357, "tcp"}, +{"unihub-server", {NULL}, 2357, "udp"}, +{"futrix", {NULL}, 2358, "tcp"}, +{"futrix", {NULL}, 2358, "udp"}, +{"flukeserver", {NULL}, 2359, "tcp"}, +{"flukeserver", {NULL}, 2359, "udp"}, +{"nexstorindltd", {NULL}, 2360, "tcp"}, +{"nexstorindltd", {NULL}, 2360, "udp"}, +{"tl1", {NULL}, 2361, "tcp"}, +{"tl1", {NULL}, 2361, "udp"}, +{"digiman", {NULL}, 2362, "tcp"}, +{"digiman", {NULL}, 2362, "udp"}, +{"mediacntrlnfsd", {NULL}, 2363, "tcp"}, +{"mediacntrlnfsd", {NULL}, 2363, "udp"}, +{"oi-2000", {NULL}, 2364, "tcp"}, +{"oi-2000", {NULL}, 2364, "udp"}, +{"dbref", {NULL}, 2365, "tcp"}, +{"dbref", {NULL}, 2365, "udp"}, +{"qip-login", {NULL}, 2366, "tcp"}, +{"qip-login", {NULL}, 2366, "udp"}, +{"service-ctrl", {NULL}, 2367, "tcp"}, +{"service-ctrl", {NULL}, 2367, "udp"}, +{"opentable", {NULL}, 2368, "tcp"}, +{"opentable", {NULL}, 2368, "udp"}, +{"l3-hbmon", {NULL}, 2370, "tcp"}, +{"l3-hbmon", {NULL}, 2370, "udp"}, +{"worldwire", {NULL}, 2371, "tcp"}, +{"worldwire", {NULL}, 2371, "udp"}, +{"lanmessenger", {NULL}, 2372, "tcp"}, +{"lanmessenger", {NULL}, 2372, "udp"}, +{"remographlm", {NULL}, 2373, "tcp"}, +{"hydra", {NULL}, 2374, "tcp"}, +{"compaq-https", {NULL}, 2381, "tcp"}, +{"compaq-https", {NULL}, 2381, "udp"}, +{"ms-olap3", {NULL}, 2382, "tcp"}, +{"ms-olap3", {NULL}, 2382, "udp"}, +{"ms-olap4", {NULL}, 2383, "tcp"}, +{"ms-olap4", {NULL}, 2383, "udp"}, +{"sd-request", {NULL}, 2384, "tcp"}, +{"sd-capacity", {NULL}, 2384, "udp"}, +{"sd-data", {NULL}, 2385, "tcp"}, +{"sd-data", {NULL}, 2385, "udp"}, +{"virtualtape", {NULL}, 2386, "tcp"}, +{"virtualtape", {NULL}, 2386, "udp"}, +{"vsamredirector", {NULL}, 2387, "tcp"}, +{"vsamredirector", {NULL}, 2387, "udp"}, +{"mynahautostart", {NULL}, 2388, "tcp"}, +{"mynahautostart", {NULL}, 2388, "udp"}, +{"ovsessionmgr", {NULL}, 2389, "tcp"}, +{"ovsessionmgr", {NULL}, 2389, "udp"}, +{"rsmtp", {NULL}, 2390, "tcp"}, +{"rsmtp", {NULL}, 2390, "udp"}, +{"3com-net-mgmt", {NULL}, 2391, "tcp"}, +{"3com-net-mgmt", {NULL}, 2391, "udp"}, +{"tacticalauth", {NULL}, 2392, "tcp"}, +{"tacticalauth", {NULL}, 2392, "udp"}, +{"ms-olap1", {NULL}, 2393, "tcp"}, +{"ms-olap1", {NULL}, 2393, "udp"}, +{"ms-olap2", {NULL}, 2394, "tcp"}, +{"ms-olap2", {NULL}, 2394, "udp"}, +{"lan900_remote", {NULL}, 2395, "tcp"}, +{"lan900_remote", {NULL}, 2395, "udp"}, +{"wusage", {NULL}, 2396, "tcp"}, +{"wusage", {NULL}, 2396, "udp"}, +{"ncl", {NULL}, 2397, "tcp"}, +{"ncl", {NULL}, 2397, "udp"}, +{"orbiter", {NULL}, 2398, "tcp"}, +{"orbiter", {NULL}, 2398, "udp"}, +{"fmpro-fdal", {NULL}, 2399, "tcp"}, +{"fmpro-fdal", {NULL}, 2399, "udp"}, +{"opequus-server", {NULL}, 2400, "tcp"}, +{"opequus-server", {NULL}, 2400, "udp"}, +{"cvspserver", {NULL}, 2401, "tcp"}, +{"cvspserver", {NULL}, 2401, "udp"}, +{"taskmaster2000", {NULL}, 2402, "tcp"}, +{"taskmaster2000", {NULL}, 2402, "udp"}, +{"taskmaster2000", {NULL}, 2403, "tcp"}, +{"taskmaster2000", {NULL}, 2403, "udp"}, +{"iec-104", {NULL}, 2404, "tcp"}, +{"iec-104", {NULL}, 2404, "udp"}, +{"trc-netpoll", {NULL}, 2405, "tcp"}, +{"trc-netpoll", {NULL}, 2405, "udp"}, +{"jediserver", {NULL}, 2406, "tcp"}, +{"jediserver", {NULL}, 2406, "udp"}, +{"orion", {NULL}, 2407, "tcp"}, +{"orion", {NULL}, 2407, "udp"}, +{"optimanet", {NULL}, 2408, "tcp"}, +{"optimanet", {NULL}, 2408, "udp"}, +{"sns-protocol", {NULL}, 2409, "tcp"}, +{"sns-protocol", {NULL}, 2409, "udp"}, +{"vrts-registry", {NULL}, 2410, "tcp"}, +{"vrts-registry", {NULL}, 2410, "udp"}, +{"netwave-ap-mgmt", {NULL}, 2411, "tcp"}, +{"netwave-ap-mgmt", {NULL}, 2411, "udp"}, +{"cdn", {NULL}, 2412, "tcp"}, +{"cdn", {NULL}, 2412, "udp"}, +{"orion-rmi-reg", {NULL}, 2413, "tcp"}, +{"orion-rmi-reg", {NULL}, 2413, "udp"}, +{"beeyond", {NULL}, 2414, "tcp"}, +{"beeyond", {NULL}, 2414, "udp"}, +{"codima-rtp", {NULL}, 2415, "tcp"}, +{"codima-rtp", {NULL}, 2415, "udp"}, +{"rmtserver", {NULL}, 2416, "tcp"}, +{"rmtserver", {NULL}, 2416, "udp"}, +{"composit-server", {NULL}, 2417, "tcp"}, +{"composit-server", {NULL}, 2417, "udp"}, +{"cas", {NULL}, 2418, "tcp"}, +{"cas", {NULL}, 2418, "udp"}, +{"attachmate-s2s", {NULL}, 2419, "tcp"}, +{"attachmate-s2s", {NULL}, 2419, "udp"}, +{"dslremote-mgmt", {NULL}, 2420, "tcp"}, +{"dslremote-mgmt", {NULL}, 2420, "udp"}, +{"g-talk", {NULL}, 2421, "tcp"}, +{"g-talk", {NULL}, 2421, "udp"}, +{"crmsbits", {NULL}, 2422, "tcp"}, +{"crmsbits", {NULL}, 2422, "udp"}, +{"rnrp", {NULL}, 2423, "tcp"}, +{"rnrp", {NULL}, 2423, "udp"}, +{"kofax-svr", {NULL}, 2424, "tcp"}, +{"kofax-svr", {NULL}, 2424, "udp"}, +{"fjitsuappmgr", {NULL}, 2425, "tcp"}, +{"fjitsuappmgr", {NULL}, 2425, "udp"}, +{"mgcp-gateway", {NULL}, 2427, "tcp"}, +{"mgcp-gateway", {NULL}, 2427, "udp"}, +{"ott", {NULL}, 2428, "tcp"}, +{"ott", {NULL}, 2428, "udp"}, +{"ft-role", {NULL}, 2429, "tcp"}, +{"ft-role", {NULL}, 2429, "udp"}, +{"venus", {NULL}, 2430, "tcp"}, +{"venus", {NULL}, 2430, "udp"}, +{"venus-se", {NULL}, 2431, "tcp"}, +{"venus-se", {NULL}, 2431, "udp"}, +{"codasrv", {NULL}, 2432, "tcp"}, +{"codasrv", {NULL}, 2432, "udp"}, +{"codasrv-se", {NULL}, 2433, "tcp"}, +{"codasrv-se", {NULL}, 2433, "udp"}, +{"pxc-epmap", {NULL}, 2434, "tcp"}, +{"pxc-epmap", {NULL}, 2434, "udp"}, +{"optilogic", {NULL}, 2435, "tcp"}, +{"optilogic", {NULL}, 2435, "udp"}, +{"topx", {NULL}, 2436, "tcp"}, +{"topx", {NULL}, 2436, "udp"}, +{"unicontrol", {NULL}, 2437, "tcp"}, +{"unicontrol", {NULL}, 2437, "udp"}, +{"msp", {NULL}, 2438, "tcp"}, +{"msp", {NULL}, 2438, "udp"}, +{"sybasedbsynch", {NULL}, 2439, "tcp"}, +{"sybasedbsynch", {NULL}, 2439, "udp"}, +{"spearway", {NULL}, 2440, "tcp"}, +{"spearway", {NULL}, 2440, "udp"}, +{"pvsw-inet", {NULL}, 2441, "tcp"}, +{"pvsw-inet", {NULL}, 2441, "udp"}, +{"netangel", {NULL}, 2442, "tcp"}, +{"netangel", {NULL}, 2442, "udp"}, +{"powerclientcsf", {NULL}, 2443, "tcp"}, +{"powerclientcsf", {NULL}, 2443, "udp"}, +{"btpp2sectrans", {NULL}, 2444, "tcp"}, +{"btpp2sectrans", {NULL}, 2444, "udp"}, +{"dtn1", {NULL}, 2445, "tcp"}, +{"dtn1", {NULL}, 2445, "udp"}, +{"bues_service", {NULL}, 2446, "tcp"}, +{"bues_service", {NULL}, 2446, "udp"}, +{"ovwdb", {NULL}, 2447, "tcp"}, +{"ovwdb", {NULL}, 2447, "udp"}, +{"hpppssvr", {NULL}, 2448, "tcp"}, +{"hpppssvr", {NULL}, 2448, "udp"}, +{"ratl", {NULL}, 2449, "tcp"}, +{"ratl", {NULL}, 2449, "udp"}, +{"netadmin", {NULL}, 2450, "tcp"}, +{"netadmin", {NULL}, 2450, "udp"}, +{"netchat", {NULL}, 2451, "tcp"}, +{"netchat", {NULL}, 2451, "udp"}, +{"snifferclient", {NULL}, 2452, "tcp"}, +{"snifferclient", {NULL}, 2452, "udp"}, +{"madge-ltd", {NULL}, 2453, "tcp"}, +{"madge-ltd", {NULL}, 2453, "udp"}, +{"indx-dds", {NULL}, 2454, "tcp"}, +{"indx-dds", {NULL}, 2454, "udp"}, +{"wago-io-system", {NULL}, 2455, "tcp"}, +{"wago-io-system", {NULL}, 2455, "udp"}, +{"altav-remmgt", {NULL}, 2456, "tcp"}, +{"altav-remmgt", {NULL}, 2456, "udp"}, +{"rapido-ip", {NULL}, 2457, "tcp"}, +{"rapido-ip", {NULL}, 2457, "udp"}, +{"griffin", {NULL}, 2458, "tcp"}, +{"griffin", {NULL}, 2458, "udp"}, +{"community", {NULL}, 2459, "tcp"}, +{"community", {NULL}, 2459, "udp"}, +{"ms-theater", {NULL}, 2460, "tcp"}, +{"ms-theater", {NULL}, 2460, "udp"}, +{"qadmifoper", {NULL}, 2461, "tcp"}, +{"qadmifoper", {NULL}, 2461, "udp"}, +{"qadmifevent", {NULL}, 2462, "tcp"}, +{"qadmifevent", {NULL}, 2462, "udp"}, +{"lsi-raid-mgmt", {NULL}, 2463, "tcp"}, +{"lsi-raid-mgmt", {NULL}, 2463, "udp"}, +{"direcpc-si", {NULL}, 2464, "tcp"}, +{"direcpc-si", {NULL}, 2464, "udp"}, +{"lbm", {NULL}, 2465, "tcp"}, +{"lbm", {NULL}, 2465, "udp"}, +{"lbf", {NULL}, 2466, "tcp"}, +{"lbf", {NULL}, 2466, "udp"}, +{"high-criteria", {NULL}, 2467, "tcp"}, +{"high-criteria", {NULL}, 2467, "udp"}, +{"qip-msgd", {NULL}, 2468, "tcp"}, +{"qip-msgd", {NULL}, 2468, "udp"}, +{"mti-tcs-comm", {NULL}, 2469, "tcp"}, +{"mti-tcs-comm", {NULL}, 2469, "udp"}, +{"taskman-port", {NULL}, 2470, "tcp"}, +{"taskman-port", {NULL}, 2470, "udp"}, +{"seaodbc", {NULL}, 2471, "tcp"}, +{"seaodbc", {NULL}, 2471, "udp"}, +{"c3", {NULL}, 2472, "tcp"}, +{"c3", {NULL}, 2472, "udp"}, +{"aker-cdp", {NULL}, 2473, "tcp"}, +{"aker-cdp", {NULL}, 2473, "udp"}, +{"vitalanalysis", {NULL}, 2474, "tcp"}, +{"vitalanalysis", {NULL}, 2474, "udp"}, +{"ace-server", {NULL}, 2475, "tcp"}, +{"ace-server", {NULL}, 2475, "udp"}, +{"ace-svr-prop", {NULL}, 2476, "tcp"}, +{"ace-svr-prop", {NULL}, 2476, "udp"}, +{"ssm-cvs", {NULL}, 2477, "tcp"}, +{"ssm-cvs", {NULL}, 2477, "udp"}, +{"ssm-cssps", {NULL}, 2478, "tcp"}, +{"ssm-cssps", {NULL}, 2478, "udp"}, +{"ssm-els", {NULL}, 2479, "tcp"}, +{"ssm-els", {NULL}, 2479, "udp"}, +{"powerexchange", {NULL}, 2480, "tcp"}, +{"powerexchange", {NULL}, 2480, "udp"}, +{"giop", {NULL}, 2481, "tcp"}, +{"giop", {NULL}, 2481, "udp"}, +{"giop-ssl", {NULL}, 2482, "tcp"}, +{"giop-ssl", {NULL}, 2482, "udp"}, +{"ttc", {NULL}, 2483, "tcp"}, +{"ttc", {NULL}, 2483, "udp"}, +{"ttc-ssl", {NULL}, 2484, "tcp"}, +{"ttc-ssl", {NULL}, 2484, "udp"}, +{"netobjects1", {NULL}, 2485, "tcp"}, +{"netobjects1", {NULL}, 2485, "udp"}, +{"netobjects2", {NULL}, 2486, "tcp"}, +{"netobjects2", {NULL}, 2486, "udp"}, +{"pns", {NULL}, 2487, "tcp"}, +{"pns", {NULL}, 2487, "udp"}, +{"moy-corp", {NULL}, 2488, "tcp"}, +{"moy-corp", {NULL}, 2488, "udp"}, +{"tsilb", {NULL}, 2489, "tcp"}, +{"tsilb", {NULL}, 2489, "udp"}, +{"qip-qdhcp", {NULL}, 2490, "tcp"}, +{"qip-qdhcp", {NULL}, 2490, "udp"}, +{"conclave-cpp", {NULL}, 2491, "tcp"}, +{"conclave-cpp", {NULL}, 2491, "udp"}, +{"groove", {NULL}, 2492, "tcp"}, +{"groove", {NULL}, 2492, "udp"}, +{"talarian-mqs", {NULL}, 2493, "tcp"}, +{"talarian-mqs", {NULL}, 2493, "udp"}, +{"bmc-ar", {NULL}, 2494, "tcp"}, +{"bmc-ar", {NULL}, 2494, "udp"}, +{"fast-rem-serv", {NULL}, 2495, "tcp"}, +{"fast-rem-serv", {NULL}, 2495, "udp"}, +{"dirgis", {NULL}, 2496, "tcp"}, +{"dirgis", {NULL}, 2496, "udp"}, +{"quaddb", {NULL}, 2497, "tcp"}, +{"quaddb", {NULL}, 2497, "udp"}, +{"odn-castraq", {NULL}, 2498, "tcp"}, +{"odn-castraq", {NULL}, 2498, "udp"}, +{"unicontrol", {NULL}, 2499, "tcp"}, +{"unicontrol", {NULL}, 2499, "udp"}, +{"rtsserv", {NULL}, 2500, "tcp"}, +{"rtsserv", {NULL}, 2500, "udp"}, +{"rtsclient", {NULL}, 2501, "tcp"}, +{"rtsclient", {NULL}, 2501, "udp"}, +{"kentrox-prot", {NULL}, 2502, "tcp"}, +{"kentrox-prot", {NULL}, 2502, "udp"}, +{"nms-dpnss", {NULL}, 2503, "tcp"}, +{"nms-dpnss", {NULL}, 2503, "udp"}, +{"wlbs", {NULL}, 2504, "tcp"}, +{"wlbs", {NULL}, 2504, "udp"}, +{"ppcontrol", {NULL}, 2505, "tcp"}, +{"ppcontrol", {NULL}, 2505, "udp"}, +{"jbroker", {NULL}, 2506, "tcp"}, +{"jbroker", {NULL}, 2506, "udp"}, +{"spock", {NULL}, 2507, "tcp"}, +{"spock", {NULL}, 2507, "udp"}, +{"jdatastore", {NULL}, 2508, "tcp"}, +{"jdatastore", {NULL}, 2508, "udp"}, +{"fjmpss", {NULL}, 2509, "tcp"}, +{"fjmpss", {NULL}, 2509, "udp"}, +{"fjappmgrbulk", {NULL}, 2510, "tcp"}, +{"fjappmgrbulk", {NULL}, 2510, "udp"}, +{"metastorm", {NULL}, 2511, "tcp"}, +{"metastorm", {NULL}, 2511, "udp"}, +{"citrixima", {NULL}, 2512, "tcp"}, +{"citrixima", {NULL}, 2512, "udp"}, +{"citrixadmin", {NULL}, 2513, "tcp"}, +{"citrixadmin", {NULL}, 2513, "udp"}, +{"facsys-ntp", {NULL}, 2514, "tcp"}, +{"facsys-ntp", {NULL}, 2514, "udp"}, +{"facsys-router", {NULL}, 2515, "tcp"}, +{"facsys-router", {NULL}, 2515, "udp"}, +{"maincontrol", {NULL}, 2516, "tcp"}, +{"maincontrol", {NULL}, 2516, "udp"}, +{"call-sig-trans", {NULL}, 2517, "tcp"}, +{"call-sig-trans", {NULL}, 2517, "udp"}, +{"willy", {NULL}, 2518, "tcp"}, +{"willy", {NULL}, 2518, "udp"}, +{"globmsgsvc", {NULL}, 2519, "tcp"}, +{"globmsgsvc", {NULL}, 2519, "udp"}, +{"pvsw", {NULL}, 2520, "tcp"}, +{"pvsw", {NULL}, 2520, "udp"}, +{"adaptecmgr", {NULL}, 2521, "tcp"}, +{"adaptecmgr", {NULL}, 2521, "udp"}, +{"windb", {NULL}, 2522, "tcp"}, +{"windb", {NULL}, 2522, "udp"}, +{"qke-llc-v3", {NULL}, 2523, "tcp"}, +{"qke-llc-v3", {NULL}, 2523, "udp"}, +{"optiwave-lm", {NULL}, 2524, "tcp"}, +{"optiwave-lm", {NULL}, 2524, "udp"}, +{"ms-v-worlds", {NULL}, 2525, "tcp"}, +{"ms-v-worlds", {NULL}, 2525, "udp"}, +{"ema-sent-lm", {NULL}, 2526, "tcp"}, +{"ema-sent-lm", {NULL}, 2526, "udp"}, +{"iqserver", {NULL}, 2527, "tcp"}, +{"iqserver", {NULL}, 2527, "udp"}, +{"ncr_ccl", {NULL}, 2528, "tcp"}, +{"ncr_ccl", {NULL}, 2528, "udp"}, +{"utsftp", {NULL}, 2529, "tcp"}, +{"utsftp", {NULL}, 2529, "udp"}, +{"vrcommerce", {NULL}, 2530, "tcp"}, +{"vrcommerce", {NULL}, 2530, "udp"}, +{"ito-e-gui", {NULL}, 2531, "tcp"}, +{"ito-e-gui", {NULL}, 2531, "udp"}, +{"ovtopmd", {NULL}, 2532, "tcp"}, +{"ovtopmd", {NULL}, 2532, "udp"}, +{"snifferserver", {NULL}, 2533, "tcp"}, +{"snifferserver", {NULL}, 2533, "udp"}, +{"combox-web-acc", {NULL}, 2534, "tcp"}, +{"combox-web-acc", {NULL}, 2534, "udp"}, +{"madcap", {NULL}, 2535, "tcp"}, +{"madcap", {NULL}, 2535, "udp"}, +{"btpp2audctr1", {NULL}, 2536, "tcp"}, +{"btpp2audctr1", {NULL}, 2536, "udp"}, +{"upgrade", {NULL}, 2537, "tcp"}, +{"upgrade", {NULL}, 2537, "udp"}, +{"vnwk-prapi", {NULL}, 2538, "tcp"}, +{"vnwk-prapi", {NULL}, 2538, "udp"}, +{"vsiadmin", {NULL}, 2539, "tcp"}, +{"vsiadmin", {NULL}, 2539, "udp"}, +{"lonworks", {NULL}, 2540, "tcp"}, +{"lonworks", {NULL}, 2540, "udp"}, +{"lonworks2", {NULL}, 2541, "tcp"}, +{"lonworks2", {NULL}, 2541, "udp"}, +{"udrawgraph", {NULL}, 2542, "tcp"}, +{"udrawgraph", {NULL}, 2542, "udp"}, +{"reftek", {NULL}, 2543, "tcp"}, +{"reftek", {NULL}, 2543, "udp"}, +{"novell-zen", {NULL}, 2544, "tcp"}, +{"novell-zen", {NULL}, 2544, "udp"}, +{"sis-emt", {NULL}, 2545, "tcp"}, +{"sis-emt", {NULL}, 2545, "udp"}, +{"vytalvaultbrtp", {NULL}, 2546, "tcp"}, +{"vytalvaultbrtp", {NULL}, 2546, "udp"}, +{"vytalvaultvsmp", {NULL}, 2547, "tcp"}, +{"vytalvaultvsmp", {NULL}, 2547, "udp"}, +{"vytalvaultpipe", {NULL}, 2548, "tcp"}, +{"vytalvaultpipe", {NULL}, 2548, "udp"}, +{"ipass", {NULL}, 2549, "tcp"}, +{"ipass", {NULL}, 2549, "udp"}, +{"ads", {NULL}, 2550, "tcp"}, +{"ads", {NULL}, 2550, "udp"}, +{"isg-uda-server", {NULL}, 2551, "tcp"}, +{"isg-uda-server", {NULL}, 2551, "udp"}, +{"call-logging", {NULL}, 2552, "tcp"}, +{"call-logging", {NULL}, 2552, "udp"}, +{"efidiningport", {NULL}, 2553, "tcp"}, +{"efidiningport", {NULL}, 2553, "udp"}, +{"vcnet-link-v10", {NULL}, 2554, "tcp"}, +{"vcnet-link-v10", {NULL}, 2554, "udp"}, +{"compaq-wcp", {NULL}, 2555, "tcp"}, +{"compaq-wcp", {NULL}, 2555, "udp"}, +{"nicetec-nmsvc", {NULL}, 2556, "tcp"}, +{"nicetec-nmsvc", {NULL}, 2556, "udp"}, +{"nicetec-mgmt", {NULL}, 2557, "tcp"}, +{"nicetec-mgmt", {NULL}, 2557, "udp"}, +{"pclemultimedia", {NULL}, 2558, "tcp"}, +{"pclemultimedia", {NULL}, 2558, "udp"}, +{"lstp", {NULL}, 2559, "tcp"}, +{"lstp", {NULL}, 2559, "udp"}, +{"labrat", {NULL}, 2560, "tcp"}, +{"labrat", {NULL}, 2560, "udp"}, +{"mosaixcc", {NULL}, 2561, "tcp"}, +{"mosaixcc", {NULL}, 2561, "udp"}, +{"delibo", {NULL}, 2562, "tcp"}, +{"delibo", {NULL}, 2562, "udp"}, +{"cti-redwood", {NULL}, 2563, "tcp"}, +{"cti-redwood", {NULL}, 2563, "udp"}, +{"hp-3000-telnet", {NULL}, 2564, "tcp"}, +{"coord-svr", {NULL}, 2565, "tcp"}, +{"coord-svr", {NULL}, 2565, "udp"}, +{"pcs-pcw", {NULL}, 2566, "tcp"}, +{"pcs-pcw", {NULL}, 2566, "udp"}, +{"clp", {NULL}, 2567, "tcp"}, +{"clp", {NULL}, 2567, "udp"}, +{"spamtrap", {NULL}, 2568, "tcp"}, +{"spamtrap", {NULL}, 2568, "udp"}, +{"sonuscallsig", {NULL}, 2569, "tcp"}, +{"sonuscallsig", {NULL}, 2569, "udp"}, +{"hs-port", {NULL}, 2570, "tcp"}, +{"hs-port", {NULL}, 2570, "udp"}, +{"cecsvc", {NULL}, 2571, "tcp"}, +{"cecsvc", {NULL}, 2571, "udp"}, +{"ibp", {NULL}, 2572, "tcp"}, +{"ibp", {NULL}, 2572, "udp"}, +{"trustestablish", {NULL}, 2573, "tcp"}, +{"trustestablish", {NULL}, 2573, "udp"}, +{"blockade-bpsp", {NULL}, 2574, "tcp"}, +{"blockade-bpsp", {NULL}, 2574, "udp"}, +{"hl7", {NULL}, 2575, "tcp"}, +{"hl7", {NULL}, 2575, "udp"}, +{"tclprodebugger", {NULL}, 2576, "tcp"}, +{"tclprodebugger", {NULL}, 2576, "udp"}, +{"scipticslsrvr", {NULL}, 2577, "tcp"}, +{"scipticslsrvr", {NULL}, 2577, "udp"}, +{"rvs-isdn-dcp", {NULL}, 2578, "tcp"}, +{"rvs-isdn-dcp", {NULL}, 2578, "udp"}, +{"mpfoncl", {NULL}, 2579, "tcp"}, +{"mpfoncl", {NULL}, 2579, "udp"}, +{"tributary", {NULL}, 2580, "tcp"}, +{"tributary", {NULL}, 2580, "udp"}, +{"argis-te", {NULL}, 2581, "tcp"}, +{"argis-te", {NULL}, 2581, "udp"}, +{"argis-ds", {NULL}, 2582, "tcp"}, +{"argis-ds", {NULL}, 2582, "udp"}, +{"mon", {NULL}, 2583, "tcp"}, +{"mon", {NULL}, 2583, "udp"}, +{"cyaserv", {NULL}, 2584, "tcp"}, +{"cyaserv", {NULL}, 2584, "udp"}, +{"netx-server", {NULL}, 2585, "tcp"}, +{"netx-server", {NULL}, 2585, "udp"}, +{"netx-agent", {NULL}, 2586, "tcp"}, +{"netx-agent", {NULL}, 2586, "udp"}, +{"masc", {NULL}, 2587, "tcp"}, +{"masc", {NULL}, 2587, "udp"}, +{"privilege", {NULL}, 2588, "tcp"}, +{"privilege", {NULL}, 2588, "udp"}, +{"quartus-tcl", {NULL}, 2589, "tcp"}, +{"quartus-tcl", {NULL}, 2589, "udp"}, +{"idotdist", {NULL}, 2590, "tcp"}, +{"idotdist", {NULL}, 2590, "udp"}, +{"maytagshuffle", {NULL}, 2591, "tcp"}, +{"maytagshuffle", {NULL}, 2591, "udp"}, +{"netrek", {NULL}, 2592, "tcp"}, +{"netrek", {NULL}, 2592, "udp"}, +{"mns-mail", {NULL}, 2593, "tcp"}, +{"mns-mail", {NULL}, 2593, "udp"}, +{"dts", {NULL}, 2594, "tcp"}, +{"dts", {NULL}, 2594, "udp"}, +{"worldfusion1", {NULL}, 2595, "tcp"}, +{"worldfusion1", {NULL}, 2595, "udp"}, +{"worldfusion2", {NULL}, 2596, "tcp"}, +{"worldfusion2", {NULL}, 2596, "udp"}, +{"homesteadglory", {NULL}, 2597, "tcp"}, +{"homesteadglory", {NULL}, 2597, "udp"}, +{"citriximaclient", {NULL}, 2598, "tcp"}, +{"citriximaclient", {NULL}, 2598, "udp"}, +{"snapd", {NULL}, 2599, "tcp"}, +{"snapd", {NULL}, 2599, "udp"}, +{"hpstgmgr", {NULL}, 2600, "tcp"}, +{"hpstgmgr", {NULL}, 2600, "udp"}, +{"discp-client", {NULL}, 2601, "tcp"}, +{"discp-client", {NULL}, 2601, "udp"}, +{"discp-server", {NULL}, 2602, "tcp"}, +{"discp-server", {NULL}, 2602, "udp"}, +{"servicemeter", {NULL}, 2603, "tcp"}, +{"servicemeter", {NULL}, 2603, "udp"}, +{"nsc-ccs", {NULL}, 2604, "tcp"}, +{"nsc-ccs", {NULL}, 2604, "udp"}, +{"nsc-posa", {NULL}, 2605, "tcp"}, +{"nsc-posa", {NULL}, 2605, "udp"}, +{"netmon", {NULL}, 2606, "tcp"}, +{"netmon", {NULL}, 2606, "udp"}, +{"connection", {NULL}, 2607, "tcp"}, +{"connection", {NULL}, 2607, "udp"}, +{"wag-service", {NULL}, 2608, "tcp"}, +{"wag-service", {NULL}, 2608, "udp"}, +{"system-monitor", {NULL}, 2609, "tcp"}, +{"system-monitor", {NULL}, 2609, "udp"}, +{"versa-tek", {NULL}, 2610, "tcp"}, +{"versa-tek", {NULL}, 2610, "udp"}, +{"lionhead", {NULL}, 2611, "tcp"}, +{"lionhead", {NULL}, 2611, "udp"}, +{"qpasa-agent", {NULL}, 2612, "tcp"}, +{"qpasa-agent", {NULL}, 2612, "udp"}, +{"smntubootstrap", {NULL}, 2613, "tcp"}, +{"smntubootstrap", {NULL}, 2613, "udp"}, +{"neveroffline", {NULL}, 2614, "tcp"}, +{"neveroffline", {NULL}, 2614, "udp"}, +{"firepower", {NULL}, 2615, "tcp"}, +{"firepower", {NULL}, 2615, "udp"}, +{"appswitch-emp", {NULL}, 2616, "tcp"}, +{"appswitch-emp", {NULL}, 2616, "udp"}, +{"cmadmin", {NULL}, 2617, "tcp"}, +{"cmadmin", {NULL}, 2617, "udp"}, +{"priority-e-com", {NULL}, 2618, "tcp"}, +{"priority-e-com", {NULL}, 2618, "udp"}, +{"bruce", {NULL}, 2619, "tcp"}, +{"bruce", {NULL}, 2619, "udp"}, +{"lpsrecommender", {NULL}, 2620, "tcp"}, +{"lpsrecommender", {NULL}, 2620, "udp"}, +{"miles-apart", {NULL}, 2621, "tcp"}, +{"miles-apart", {NULL}, 2621, "udp"}, +{"metricadbc", {NULL}, 2622, "tcp"}, +{"metricadbc", {NULL}, 2622, "udp"}, +{"lmdp", {NULL}, 2623, "tcp"}, +{"lmdp", {NULL}, 2623, "udp"}, +{"aria", {NULL}, 2624, "tcp"}, +{"aria", {NULL}, 2624, "udp"}, +{"blwnkl-port", {NULL}, 2625, "tcp"}, +{"blwnkl-port", {NULL}, 2625, "udp"}, +{"gbjd816", {NULL}, 2626, "tcp"}, +{"gbjd816", {NULL}, 2626, "udp"}, +{"moshebeeri", {NULL}, 2627, "tcp"}, +{"moshebeeri", {NULL}, 2627, "udp"}, +{"dict", {NULL}, 2628, "tcp"}, +{"dict", {NULL}, 2628, "udp"}, +{"sitaraserver", {NULL}, 2629, "tcp"}, +{"sitaraserver", {NULL}, 2629, "udp"}, +{"sitaramgmt", {NULL}, 2630, "tcp"}, +{"sitaramgmt", {NULL}, 2630, "udp"}, +{"sitaradir", {NULL}, 2631, "tcp"}, +{"sitaradir", {NULL}, 2631, "udp"}, +{"irdg-post", {NULL}, 2632, "tcp"}, +{"irdg-post", {NULL}, 2632, "udp"}, +{"interintelli", {NULL}, 2633, "tcp"}, +{"interintelli", {NULL}, 2633, "udp"}, +{"pk-electronics", {NULL}, 2634, "tcp"}, +{"pk-electronics", {NULL}, 2634, "udp"}, +{"backburner", {NULL}, 2635, "tcp"}, +{"backburner", {NULL}, 2635, "udp"}, +{"solve", {NULL}, 2636, "tcp"}, +{"solve", {NULL}, 2636, "udp"}, +{"imdocsvc", {NULL}, 2637, "tcp"}, +{"imdocsvc", {NULL}, 2637, "udp"}, +{"sybaseanywhere", {NULL}, 2638, "tcp"}, +{"sybaseanywhere", {NULL}, 2638, "udp"}, +{"aminet", {NULL}, 2639, "tcp"}, +{"aminet", {NULL}, 2639, "udp"}, +{"sai_sentlm", {NULL}, 2640, "tcp"}, +{"sai_sentlm", {NULL}, 2640, "udp"}, +{"hdl-srv", {NULL}, 2641, "tcp"}, +{"hdl-srv", {NULL}, 2641, "udp"}, +{"tragic", {NULL}, 2642, "tcp"}, +{"tragic", {NULL}, 2642, "udp"}, +{"gte-samp", {NULL}, 2643, "tcp"}, +{"gte-samp", {NULL}, 2643, "udp"}, +{"travsoft-ipx-t", {NULL}, 2644, "tcp"}, +{"travsoft-ipx-t", {NULL}, 2644, "udp"}, +{"novell-ipx-cmd", {NULL}, 2645, "tcp"}, +{"novell-ipx-cmd", {NULL}, 2645, "udp"}, +{"and-lm", {NULL}, 2646, "tcp"}, +{"and-lm", {NULL}, 2646, "udp"}, +{"syncserver", {NULL}, 2647, "tcp"}, +{"syncserver", {NULL}, 2647, "udp"}, +{"upsnotifyprot", {NULL}, 2648, "tcp"}, +{"upsnotifyprot", {NULL}, 2648, "udp"}, +{"vpsipport", {NULL}, 2649, "tcp"}, +{"vpsipport", {NULL}, 2649, "udp"}, +{"eristwoguns", {NULL}, 2650, "tcp"}, +{"eristwoguns", {NULL}, 2650, "udp"}, +{"ebinsite", {NULL}, 2651, "tcp"}, +{"ebinsite", {NULL}, 2651, "udp"}, +{"interpathpanel", {NULL}, 2652, "tcp"}, +{"interpathpanel", {NULL}, 2652, "udp"}, +{"sonus", {NULL}, 2653, "tcp"}, +{"sonus", {NULL}, 2653, "udp"}, +{"corel_vncadmin", {NULL}, 2654, "tcp"}, +{"corel_vncadmin", {NULL}, 2654, "udp"}, +{"unglue", {NULL}, 2655, "tcp"}, +{"unglue", {NULL}, 2655, "udp"}, +{"kana", {NULL}, 2656, "tcp"}, +{"kana", {NULL}, 2656, "udp"}, +{"sns-dispatcher", {NULL}, 2657, "tcp"}, +{"sns-dispatcher", {NULL}, 2657, "udp"}, +{"sns-admin", {NULL}, 2658, "tcp"}, +{"sns-admin", {NULL}, 2658, "udp"}, +{"sns-query", {NULL}, 2659, "tcp"}, +{"sns-query", {NULL}, 2659, "udp"}, +{"gcmonitor", {NULL}, 2660, "tcp"}, +{"gcmonitor", {NULL}, 2660, "udp"}, +{"olhost", {NULL}, 2661, "tcp"}, +{"olhost", {NULL}, 2661, "udp"}, +{"bintec-capi", {NULL}, 2662, "tcp"}, +{"bintec-capi", {NULL}, 2662, "udp"}, +{"bintec-tapi", {NULL}, 2663, "tcp"}, +{"bintec-tapi", {NULL}, 2663, "udp"}, +{"patrol-mq-gm", {NULL}, 2664, "tcp"}, +{"patrol-mq-gm", {NULL}, 2664, "udp"}, +{"patrol-mq-nm", {NULL}, 2665, "tcp"}, +{"patrol-mq-nm", {NULL}, 2665, "udp"}, +{"extensis", {NULL}, 2666, "tcp"}, +{"extensis", {NULL}, 2666, "udp"}, +{"alarm-clock-s", {NULL}, 2667, "tcp"}, +{"alarm-clock-s", {NULL}, 2667, "udp"}, +{"alarm-clock-c", {NULL}, 2668, "tcp"}, +{"alarm-clock-c", {NULL}, 2668, "udp"}, +{"toad", {NULL}, 2669, "tcp"}, +{"toad", {NULL}, 2669, "udp"}, +{"tve-announce", {NULL}, 2670, "tcp"}, +{"tve-announce", {NULL}, 2670, "udp"}, +{"newlixreg", {NULL}, 2671, "tcp"}, +{"newlixreg", {NULL}, 2671, "udp"}, +{"nhserver", {NULL}, 2672, "tcp"}, +{"nhserver", {NULL}, 2672, "udp"}, +{"firstcall42", {NULL}, 2673, "tcp"}, +{"firstcall42", {NULL}, 2673, "udp"}, +{"ewnn", {NULL}, 2674, "tcp"}, +{"ewnn", {NULL}, 2674, "udp"}, +{"ttc-etap", {NULL}, 2675, "tcp"}, +{"ttc-etap", {NULL}, 2675, "udp"}, +{"simslink", {NULL}, 2676, "tcp"}, +{"simslink", {NULL}, 2676, "udp"}, +{"gadgetgate1way", {NULL}, 2677, "tcp"}, +{"gadgetgate1way", {NULL}, 2677, "udp"}, +{"gadgetgate2way", {NULL}, 2678, "tcp"}, +{"gadgetgate2way", {NULL}, 2678, "udp"}, +{"syncserverssl", {NULL}, 2679, "tcp"}, +{"syncserverssl", {NULL}, 2679, "udp"}, +{"pxc-sapxom", {NULL}, 2680, "tcp"}, +{"pxc-sapxom", {NULL}, 2680, "udp"}, +{"mpnjsomb", {NULL}, 2681, "tcp"}, +{"mpnjsomb", {NULL}, 2681, "udp"}, +{"ncdloadbalance", {NULL}, 2683, "tcp"}, +{"ncdloadbalance", {NULL}, 2683, "udp"}, +{"mpnjsosv", {NULL}, 2684, "tcp"}, +{"mpnjsosv", {NULL}, 2684, "udp"}, +{"mpnjsocl", {NULL}, 2685, "tcp"}, +{"mpnjsocl", {NULL}, 2685, "udp"}, +{"mpnjsomg", {NULL}, 2686, "tcp"}, +{"mpnjsomg", {NULL}, 2686, "udp"}, +{"pq-lic-mgmt", {NULL}, 2687, "tcp"}, +{"pq-lic-mgmt", {NULL}, 2687, "udp"}, +{"md-cg-http", {NULL}, 2688, "tcp"}, +{"md-cg-http", {NULL}, 2688, "udp"}, +{"fastlynx", {NULL}, 2689, "tcp"}, +{"fastlynx", {NULL}, 2689, "udp"}, +{"hp-nnm-data", {NULL}, 2690, "tcp"}, +{"hp-nnm-data", {NULL}, 2690, "udp"}, +{"itinternet", {NULL}, 2691, "tcp"}, +{"itinternet", {NULL}, 2691, "udp"}, +{"admins-lms", {NULL}, 2692, "tcp"}, +{"admins-lms", {NULL}, 2692, "udp"}, +{"pwrsevent", {NULL}, 2694, "tcp"}, +{"pwrsevent", {NULL}, 2694, "udp"}, +{"vspread", {NULL}, 2695, "tcp"}, +{"vspread", {NULL}, 2695, "udp"}, +{"unifyadmin", {NULL}, 2696, "tcp"}, +{"unifyadmin", {NULL}, 2696, "udp"}, +{"oce-snmp-trap", {NULL}, 2697, "tcp"}, +{"oce-snmp-trap", {NULL}, 2697, "udp"}, +{"mck-ivpip", {NULL}, 2698, "tcp"}, +{"mck-ivpip", {NULL}, 2698, "udp"}, +{"csoft-plusclnt", {NULL}, 2699, "tcp"}, +{"csoft-plusclnt", {NULL}, 2699, "udp"}, +{"tqdata", {NULL}, 2700, "tcp"}, +{"tqdata", {NULL}, 2700, "udp"}, +{"sms-rcinfo", {NULL}, 2701, "tcp"}, +{"sms-rcinfo", {NULL}, 2701, "udp"}, +{"sms-xfer", {NULL}, 2702, "tcp"}, +{"sms-xfer", {NULL}, 2702, "udp"}, +{"sms-chat", {NULL}, 2703, "tcp"}, +{"sms-chat", {NULL}, 2703, "udp"}, +{"sms-remctrl", {NULL}, 2704, "tcp"}, +{"sms-remctrl", {NULL}, 2704, "udp"}, +{"sds-admin", {NULL}, 2705, "tcp"}, +{"sds-admin", {NULL}, 2705, "udp"}, +{"ncdmirroring", {NULL}, 2706, "tcp"}, +{"ncdmirroring", {NULL}, 2706, "udp"}, +{"emcsymapiport", {NULL}, 2707, "tcp"}, +{"emcsymapiport", {NULL}, 2707, "udp"}, +{"banyan-net", {NULL}, 2708, "tcp"}, +{"banyan-net", {NULL}, 2708, "udp"}, +{"supermon", {NULL}, 2709, "tcp"}, +{"supermon", {NULL}, 2709, "udp"}, +{"sso-service", {NULL}, 2710, "tcp"}, +{"sso-service", {NULL}, 2710, "udp"}, +{"sso-control", {NULL}, 2711, "tcp"}, +{"sso-control", {NULL}, 2711, "udp"}, +{"aocp", {NULL}, 2712, "tcp"}, +{"aocp", {NULL}, 2712, "udp"}, +{"raventbs", {NULL}, 2713, "tcp"}, +{"raventbs", {NULL}, 2713, "udp"}, +{"raventdm", {NULL}, 2714, "tcp"}, +{"raventdm", {NULL}, 2714, "udp"}, +{"hpstgmgr2", {NULL}, 2715, "tcp"}, +{"hpstgmgr2", {NULL}, 2715, "udp"}, +{"inova-ip-disco", {NULL}, 2716, "tcp"}, +{"inova-ip-disco", {NULL}, 2716, "udp"}, +{"pn-requester", {NULL}, 2717, "tcp"}, +{"pn-requester", {NULL}, 2717, "udp"}, +{"pn-requester2", {NULL}, 2718, "tcp"}, +{"pn-requester2", {NULL}, 2718, "udp"}, +{"scan-change", {NULL}, 2719, "tcp"}, +{"scan-change", {NULL}, 2719, "udp"}, +{"wkars", {NULL}, 2720, "tcp"}, +{"wkars", {NULL}, 2720, "udp"}, +{"smart-diagnose", {NULL}, 2721, "tcp"}, +{"smart-diagnose", {NULL}, 2721, "udp"}, +{"proactivesrvr", {NULL}, 2722, "tcp"}, +{"proactivesrvr", {NULL}, 2722, "udp"}, +{"watchdog-nt", {NULL}, 2723, "tcp"}, +{"watchdog-nt", {NULL}, 2723, "udp"}, +{"qotps", {NULL}, 2724, "tcp"}, +{"qotps", {NULL}, 2724, "udp"}, +{"msolap-ptp2", {NULL}, 2725, "tcp"}, +{"msolap-ptp2", {NULL}, 2725, "udp"}, +{"tams", {NULL}, 2726, "tcp"}, +{"tams", {NULL}, 2726, "udp"}, +{"mgcp-callagent", {NULL}, 2727, "tcp"}, +{"mgcp-callagent", {NULL}, 2727, "udp"}, +{"sqdr", {NULL}, 2728, "tcp"}, +{"sqdr", {NULL}, 2728, "udp"}, +{"tcim-control", {NULL}, 2729, "tcp"}, +{"tcim-control", {NULL}, 2729, "udp"}, +{"nec-raidplus", {NULL}, 2730, "tcp"}, +{"nec-raidplus", {NULL}, 2730, "udp"}, +{"fyre-messanger", {NULL}, 2731, "tcp"}, +{"fyre-messanger", {NULL}, 2731, "udp"}, +{"g5m", {NULL}, 2732, "tcp"}, +{"g5m", {NULL}, 2732, "udp"}, +{"signet-ctf", {NULL}, 2733, "tcp"}, +{"signet-ctf", {NULL}, 2733, "udp"}, +{"ccs-software", {NULL}, 2734, "tcp"}, +{"ccs-software", {NULL}, 2734, "udp"}, +{"netiq-mc", {NULL}, 2735, "tcp"}, +{"netiq-mc", {NULL}, 2735, "udp"}, +{"radwiz-nms-srv", {NULL}, 2736, "tcp"}, +{"radwiz-nms-srv", {NULL}, 2736, "udp"}, +{"srp-feedback", {NULL}, 2737, "tcp"}, +{"srp-feedback", {NULL}, 2737, "udp"}, +{"ndl-tcp-ois-gw", {NULL}, 2738, "tcp"}, +{"ndl-tcp-ois-gw", {NULL}, 2738, "udp"}, +{"tn-timing", {NULL}, 2739, "tcp"}, +{"tn-timing", {NULL}, 2739, "udp"}, +{"alarm", {NULL}, 2740, "tcp"}, +{"alarm", {NULL}, 2740, "udp"}, +{"tsb", {NULL}, 2741, "tcp"}, +{"tsb", {NULL}, 2741, "udp"}, +{"tsb2", {NULL}, 2742, "tcp"}, +{"tsb2", {NULL}, 2742, "udp"}, +{"murx", {NULL}, 2743, "tcp"}, +{"murx", {NULL}, 2743, "udp"}, +{"honyaku", {NULL}, 2744, "tcp"}, +{"honyaku", {NULL}, 2744, "udp"}, +{"urbisnet", {NULL}, 2745, "tcp"}, +{"urbisnet", {NULL}, 2745, "udp"}, +{"cpudpencap", {NULL}, 2746, "tcp"}, +{"cpudpencap", {NULL}, 2746, "udp"}, +{"fjippol-swrly", {NULL}, 2747, "tcp"}, +{"fjippol-swrly", {NULL}, 2747, "udp"}, +{"fjippol-polsvr", {NULL}, 2748, "tcp"}, +{"fjippol-polsvr", {NULL}, 2748, "udp"}, +{"fjippol-cnsl", {NULL}, 2749, "tcp"}, +{"fjippol-cnsl", {NULL}, 2749, "udp"}, +{"fjippol-port1", {NULL}, 2750, "tcp"}, +{"fjippol-port1", {NULL}, 2750, "udp"}, +{"fjippol-port2", {NULL}, 2751, "tcp"}, +{"fjippol-port2", {NULL}, 2751, "udp"}, +{"rsisysaccess", {NULL}, 2752, "tcp"}, +{"rsisysaccess", {NULL}, 2752, "udp"}, +{"de-spot", {NULL}, 2753, "tcp"}, +{"de-spot", {NULL}, 2753, "udp"}, +{"apollo-cc", {NULL}, 2754, "tcp"}, +{"apollo-cc", {NULL}, 2754, "udp"}, +{"expresspay", {NULL}, 2755, "tcp"}, +{"expresspay", {NULL}, 2755, "udp"}, +{"simplement-tie", {NULL}, 2756, "tcp"}, +{"simplement-tie", {NULL}, 2756, "udp"}, +{"cnrp", {NULL}, 2757, "tcp"}, +{"cnrp", {NULL}, 2757, "udp"}, +{"apollo-status", {NULL}, 2758, "tcp"}, +{"apollo-status", {NULL}, 2758, "udp"}, +{"apollo-gms", {NULL}, 2759, "tcp"}, +{"apollo-gms", {NULL}, 2759, "udp"}, +{"sabams", {NULL}, 2760, "tcp"}, +{"sabams", {NULL}, 2760, "udp"}, +{"dicom-iscl", {NULL}, 2761, "tcp"}, +{"dicom-iscl", {NULL}, 2761, "udp"}, +{"dicom-tls", {NULL}, 2762, "tcp"}, +{"dicom-tls", {NULL}, 2762, "udp"}, +{"desktop-dna", {NULL}, 2763, "tcp"}, +{"desktop-dna", {NULL}, 2763, "udp"}, +{"data-insurance", {NULL}, 2764, "tcp"}, +{"data-insurance", {NULL}, 2764, "udp"}, +{"qip-audup", {NULL}, 2765, "tcp"}, +{"qip-audup", {NULL}, 2765, "udp"}, +{"compaq-scp", {NULL}, 2766, "tcp"}, +{"compaq-scp", {NULL}, 2766, "udp"}, +{"uadtc", {NULL}, 2767, "tcp"}, +{"uadtc", {NULL}, 2767, "udp"}, +{"uacs", {NULL}, 2768, "tcp"}, +{"uacs", {NULL}, 2768, "udp"}, +{"exce", {NULL}, 2769, "tcp"}, +{"exce", {NULL}, 2769, "udp"}, +{"veronica", {NULL}, 2770, "tcp"}, +{"veronica", {NULL}, 2770, "udp"}, +{"vergencecm", {NULL}, 2771, "tcp"}, +{"vergencecm", {NULL}, 2771, "udp"}, +{"auris", {NULL}, 2772, "tcp"}, +{"auris", {NULL}, 2772, "udp"}, +{"rbakcup1", {NULL}, 2773, "tcp"}, +{"rbakcup1", {NULL}, 2773, "udp"}, +{"rbakcup2", {NULL}, 2774, "tcp"}, +{"rbakcup2", {NULL}, 2774, "udp"}, +{"smpp", {NULL}, 2775, "tcp"}, +{"smpp", {NULL}, 2775, "udp"}, +{"ridgeway1", {NULL}, 2776, "tcp"}, +{"ridgeway1", {NULL}, 2776, "udp"}, +{"ridgeway2", {NULL}, 2777, "tcp"}, +{"ridgeway2", {NULL}, 2777, "udp"}, +{"gwen-sonya", {NULL}, 2778, "tcp"}, +{"gwen-sonya", {NULL}, 2778, "udp"}, +{"lbc-sync", {NULL}, 2779, "tcp"}, +{"lbc-sync", {NULL}, 2779, "udp"}, +{"lbc-control", {NULL}, 2780, "tcp"}, +{"lbc-control", {NULL}, 2780, "udp"}, +{"whosells", {NULL}, 2781, "tcp"}, +{"whosells", {NULL}, 2781, "udp"}, +{"everydayrc", {NULL}, 2782, "tcp"}, +{"everydayrc", {NULL}, 2782, "udp"}, +{"aises", {NULL}, 2783, "tcp"}, +{"aises", {NULL}, 2783, "udp"}, +{"www-dev", {NULL}, 2784, "tcp"}, +{"www-dev", {NULL}, 2784, "udp"}, +{"aic-np", {NULL}, 2785, "tcp"}, +{"aic-np", {NULL}, 2785, "udp"}, +{"aic-oncrpc", {NULL}, 2786, "tcp"}, +{"aic-oncrpc", {NULL}, 2786, "udp"}, +{"piccolo", {NULL}, 2787, "tcp"}, +{"piccolo", {NULL}, 2787, "udp"}, +{"fryeserv", {NULL}, 2788, "tcp"}, +{"fryeserv", {NULL}, 2788, "udp"}, +{"media-agent", {NULL}, 2789, "tcp"}, +{"media-agent", {NULL}, 2789, "udp"}, +{"plgproxy", {NULL}, 2790, "tcp"}, +{"plgproxy", {NULL}, 2790, "udp"}, +{"mtport-regist", {NULL}, 2791, "tcp"}, +{"mtport-regist", {NULL}, 2791, "udp"}, +{"f5-globalsite", {NULL}, 2792, "tcp"}, +{"f5-globalsite", {NULL}, 2792, "udp"}, +{"initlsmsad", {NULL}, 2793, "tcp"}, +{"initlsmsad", {NULL}, 2793, "udp"}, +{"livestats", {NULL}, 2795, "tcp"}, +{"livestats", {NULL}, 2795, "udp"}, +{"ac-tech", {NULL}, 2796, "tcp"}, +{"ac-tech", {NULL}, 2796, "udp"}, +{"esp-encap", {NULL}, 2797, "tcp"}, +{"esp-encap", {NULL}, 2797, "udp"}, +{"tmesis-upshot", {NULL}, 2798, "tcp"}, +{"tmesis-upshot", {NULL}, 2798, "udp"}, +{"icon-discover", {NULL}, 2799, "tcp"}, +{"icon-discover", {NULL}, 2799, "udp"}, +{"acc-raid", {NULL}, 2800, "tcp"}, +{"acc-raid", {NULL}, 2800, "udp"}, +{"igcp", {NULL}, 2801, "tcp"}, +{"igcp", {NULL}, 2801, "udp"}, +{"veritas-tcp1", {NULL}, 2802, "tcp"}, +{"veritas-udp1", {NULL}, 2802, "udp"}, +{"btprjctrl", {NULL}, 2803, "tcp"}, +{"btprjctrl", {NULL}, 2803, "udp"}, +{"dvr-esm", {NULL}, 2804, "tcp"}, +{"dvr-esm", {NULL}, 2804, "udp"}, +{"wta-wsp-s", {NULL}, 2805, "tcp"}, +{"wta-wsp-s", {NULL}, 2805, "udp"}, +{"cspuni", {NULL}, 2806, "tcp"}, +{"cspuni", {NULL}, 2806, "udp"}, +{"cspmulti", {NULL}, 2807, "tcp"}, +{"cspmulti", {NULL}, 2807, "udp"}, +{"j-lan-p", {NULL}, 2808, "tcp"}, +{"j-lan-p", {NULL}, 2808, "udp"}, +{"corbaloc", {NULL}, 2809, "tcp"}, +{"corbaloc", {NULL}, 2809, "udp"}, +{"netsteward", {NULL}, 2810, "tcp"}, +{"netsteward", {NULL}, 2810, "udp"}, +{"gsiftp", {NULL}, 2811, "tcp"}, +{"gsiftp", {NULL}, 2811, "udp"}, +{"atmtcp", {NULL}, 2812, "tcp"}, +{"atmtcp", {NULL}, 2812, "udp"}, +{"llm-pass", {NULL}, 2813, "tcp"}, +{"llm-pass", {NULL}, 2813, "udp"}, +{"llm-csv", {NULL}, 2814, "tcp"}, +{"llm-csv", {NULL}, 2814, "udp"}, +{"lbc-measure", {NULL}, 2815, "tcp"}, +{"lbc-measure", {NULL}, 2815, "udp"}, +{"lbc-watchdog", {NULL}, 2816, "tcp"}, +{"lbc-watchdog", {NULL}, 2816, "udp"}, +{"nmsigport", {NULL}, 2817, "tcp"}, +{"nmsigport", {NULL}, 2817, "udp"}, +{"rmlnk", {NULL}, 2818, "tcp"}, +{"rmlnk", {NULL}, 2818, "udp"}, +{"fc-faultnotify", {NULL}, 2819, "tcp"}, +{"fc-faultnotify", {NULL}, 2819, "udp"}, +{"univision", {NULL}, 2820, "tcp"}, +{"univision", {NULL}, 2820, "udp"}, +{"vrts-at-port", {NULL}, 2821, "tcp"}, +{"vrts-at-port", {NULL}, 2821, "udp"}, +{"ka0wuc", {NULL}, 2822, "tcp"}, +{"ka0wuc", {NULL}, 2822, "udp"}, +{"cqg-netlan", {NULL}, 2823, "tcp"}, +{"cqg-netlan", {NULL}, 2823, "udp"}, +{"cqg-netlan-1", {NULL}, 2824, "tcp"}, +{"cqg-netlan-1", {NULL}, 2824, "udp"}, +{"slc-systemlog", {NULL}, 2826, "tcp"}, +{"slc-systemlog", {NULL}, 2826, "udp"}, +{"slc-ctrlrloops", {NULL}, 2827, "tcp"}, +{"slc-ctrlrloops", {NULL}, 2827, "udp"}, +{"itm-lm", {NULL}, 2828, "tcp"}, +{"itm-lm", {NULL}, 2828, "udp"}, +{"silkp1", {NULL}, 2829, "tcp"}, +{"silkp1", {NULL}, 2829, "udp"}, +{"silkp2", {NULL}, 2830, "tcp"}, +{"silkp2", {NULL}, 2830, "udp"}, +{"silkp3", {NULL}, 2831, "tcp"}, +{"silkp3", {NULL}, 2831, "udp"}, +{"silkp4", {NULL}, 2832, "tcp"}, +{"silkp4", {NULL}, 2832, "udp"}, +{"glishd", {NULL}, 2833, "tcp"}, +{"glishd", {NULL}, 2833, "udp"}, +{"evtp", {NULL}, 2834, "tcp"}, +{"evtp", {NULL}, 2834, "udp"}, +{"evtp-data", {NULL}, 2835, "tcp"}, +{"evtp-data", {NULL}, 2835, "udp"}, +{"catalyst", {NULL}, 2836, "tcp"}, +{"catalyst", {NULL}, 2836, "udp"}, +{"repliweb", {NULL}, 2837, "tcp"}, +{"repliweb", {NULL}, 2837, "udp"}, +{"starbot", {NULL}, 2838, "tcp"}, +{"starbot", {NULL}, 2838, "udp"}, +{"nmsigport", {NULL}, 2839, "tcp"}, +{"nmsigport", {NULL}, 2839, "udp"}, +{"l3-exprt", {NULL}, 2840, "tcp"}, +{"l3-exprt", {NULL}, 2840, "udp"}, +{"l3-ranger", {NULL}, 2841, "tcp"}, +{"l3-ranger", {NULL}, 2841, "udp"}, +{"l3-hawk", {NULL}, 2842, "tcp"}, +{"l3-hawk", {NULL}, 2842, "udp"}, +{"pdnet", {NULL}, 2843, "tcp"}, +{"pdnet", {NULL}, 2843, "udp"}, +{"bpcp-poll", {NULL}, 2844, "tcp"}, +{"bpcp-poll", {NULL}, 2844, "udp"}, +{"bpcp-trap", {NULL}, 2845, "tcp"}, +{"bpcp-trap", {NULL}, 2845, "udp"}, +{"aimpp-hello", {NULL}, 2846, "tcp"}, +{"aimpp-hello", {NULL}, 2846, "udp"}, +{"aimpp-port-req", {NULL}, 2847, "tcp"}, +{"aimpp-port-req", {NULL}, 2847, "udp"}, +{"amt-blc-port", {NULL}, 2848, "tcp"}, +{"amt-blc-port", {NULL}, 2848, "udp"}, +{"fxp", {NULL}, 2849, "tcp"}, +{"fxp", {NULL}, 2849, "udp"}, +{"metaconsole", {NULL}, 2850, "tcp"}, +{"metaconsole", {NULL}, 2850, "udp"}, +{"webemshttp", {NULL}, 2851, "tcp"}, +{"webemshttp", {NULL}, 2851, "udp"}, +{"bears-01", {NULL}, 2852, "tcp"}, +{"bears-01", {NULL}, 2852, "udp"}, +{"ispipes", {NULL}, 2853, "tcp"}, +{"ispipes", {NULL}, 2853, "udp"}, +{"infomover", {NULL}, 2854, "tcp"}, +{"infomover", {NULL}, 2854, "udp"}, +{"msrp", {NULL}, 2855, "tcp"}, +{"msrp", {NULL}, 2855, "udp"}, +{"cesdinv", {NULL}, 2856, "tcp"}, +{"cesdinv", {NULL}, 2856, "udp"}, +{"simctlp", {NULL}, 2857, "tcp"}, +{"simctlp", {NULL}, 2857, "udp"}, +{"ecnp", {NULL}, 2858, "tcp"}, +{"ecnp", {NULL}, 2858, "udp"}, +{"activememory", {NULL}, 2859, "tcp"}, +{"activememory", {NULL}, 2859, "udp"}, +{"dialpad-voice1", {NULL}, 2860, "tcp"}, +{"dialpad-voice1", {NULL}, 2860, "udp"}, +{"dialpad-voice2", {NULL}, 2861, "tcp"}, +{"dialpad-voice2", {NULL}, 2861, "udp"}, +{"ttg-protocol", {NULL}, 2862, "tcp"}, +{"ttg-protocol", {NULL}, 2862, "udp"}, +{"sonardata", {NULL}, 2863, "tcp"}, +{"sonardata", {NULL}, 2863, "udp"}, +{"astromed-main", {NULL}, 2864, "tcp"}, +{"astromed-main", {NULL}, 2864, "udp"}, +{"pit-vpn", {NULL}, 2865, "tcp"}, +{"pit-vpn", {NULL}, 2865, "udp"}, +{"iwlistener", {NULL}, 2866, "tcp"}, +{"iwlistener", {NULL}, 2866, "udp"}, +{"esps-portal", {NULL}, 2867, "tcp"}, +{"esps-portal", {NULL}, 2867, "udp"}, +{"npep-messaging", {NULL}, 2868, "tcp"}, +{"npep-messaging", {NULL}, 2868, "udp"}, +{"icslap", {NULL}, 2869, "tcp"}, +{"icslap", {NULL}, 2869, "udp"}, +{"daishi", {NULL}, 2870, "tcp"}, +{"daishi", {NULL}, 2870, "udp"}, +{"msi-selectplay", {NULL}, 2871, "tcp"}, +{"msi-selectplay", {NULL}, 2871, "udp"}, +{"radix", {NULL}, 2872, "tcp"}, +{"radix", {NULL}, 2872, "udp"}, +{"dxmessagebase1", {NULL}, 2874, "tcp"}, +{"dxmessagebase1", {NULL}, 2874, "udp"}, +{"dxmessagebase2", {NULL}, 2875, "tcp"}, +{"dxmessagebase2", {NULL}, 2875, "udp"}, +{"sps-tunnel", {NULL}, 2876, "tcp"}, +{"sps-tunnel", {NULL}, 2876, "udp"}, +{"bluelance", {NULL}, 2877, "tcp"}, +{"bluelance", {NULL}, 2877, "udp"}, +{"aap", {NULL}, 2878, "tcp"}, +{"aap", {NULL}, 2878, "udp"}, +{"ucentric-ds", {NULL}, 2879, "tcp"}, +{"ucentric-ds", {NULL}, 2879, "udp"}, +{"synapse", {NULL}, 2880, "tcp"}, +{"synapse", {NULL}, 2880, "udp"}, +{"ndsp", {NULL}, 2881, "tcp"}, +{"ndsp", {NULL}, 2881, "udp"}, +{"ndtp", {NULL}, 2882, "tcp"}, +{"ndtp", {NULL}, 2882, "udp"}, +{"ndnp", {NULL}, 2883, "tcp"}, +{"ndnp", {NULL}, 2883, "udp"}, +{"flashmsg", {NULL}, 2884, "tcp"}, +{"flashmsg", {NULL}, 2884, "udp"}, +{"topflow", {NULL}, 2885, "tcp"}, +{"topflow", {NULL}, 2885, "udp"}, +{"responselogic", {NULL}, 2886, "tcp"}, +{"responselogic", {NULL}, 2886, "udp"}, +{"aironetddp", {NULL}, 2887, "tcp"}, +{"aironetddp", {NULL}, 2887, "udp"}, +{"spcsdlobby", {NULL}, 2888, "tcp"}, +{"spcsdlobby", {NULL}, 2888, "udp"}, +{"rsom", {NULL}, 2889, "tcp"}, +{"rsom", {NULL}, 2889, "udp"}, +{"cspclmulti", {NULL}, 2890, "tcp"}, +{"cspclmulti", {NULL}, 2890, "udp"}, +{"cinegrfx-elmd", {NULL}, 2891, "tcp"}, +{"cinegrfx-elmd", {NULL}, 2891, "udp"}, +{"snifferdata", {NULL}, 2892, "tcp"}, +{"snifferdata", {NULL}, 2892, "udp"}, +{"vseconnector", {NULL}, 2893, "tcp"}, +{"vseconnector", {NULL}, 2893, "udp"}, +{"abacus-remote", {NULL}, 2894, "tcp"}, +{"abacus-remote", {NULL}, 2894, "udp"}, +{"natuslink", {NULL}, 2895, "tcp"}, +{"natuslink", {NULL}, 2895, "udp"}, +{"ecovisiong6-1", {NULL}, 2896, "tcp"}, +{"ecovisiong6-1", {NULL}, 2896, "udp"}, +{"citrix-rtmp", {NULL}, 2897, "tcp"}, +{"citrix-rtmp", {NULL}, 2897, "udp"}, +{"appliance-cfg", {NULL}, 2898, "tcp"}, +{"appliance-cfg", {NULL}, 2898, "udp"}, +{"powergemplus", {NULL}, 2899, "tcp"}, +{"powergemplus", {NULL}, 2899, "udp"}, +{"quicksuite", {NULL}, 2900, "tcp"}, +{"quicksuite", {NULL}, 2900, "udp"}, +{"allstorcns", {NULL}, 2901, "tcp"}, +{"allstorcns", {NULL}, 2901, "udp"}, +{"netaspi", {NULL}, 2902, "tcp"}, +{"netaspi", {NULL}, 2902, "udp"}, +{"suitcase", {NULL}, 2903, "tcp"}, +{"suitcase", {NULL}, 2903, "udp"}, +{"m2ua", {NULL}, 2904, "tcp"}, +{"m2ua", {NULL}, 2904, "udp"}, +{"m2ua", {NULL}, 2904, "sctp"}, +{"m3ua", {NULL}, 2905, "tcp"}, +{"m3ua", {NULL}, 2905, "sctp"}, +{"caller9", {NULL}, 2906, "tcp"}, +{"caller9", {NULL}, 2906, "udp"}, +{"webmethods-b2b", {NULL}, 2907, "tcp"}, +{"webmethods-b2b", {NULL}, 2907, "udp"}, +{"mao", {NULL}, 2908, "tcp"}, +{"mao", {NULL}, 2908, "udp"}, +{"funk-dialout", {NULL}, 2909, "tcp"}, +{"funk-dialout", {NULL}, 2909, "udp"}, +{"tdaccess", {NULL}, 2910, "tcp"}, +{"tdaccess", {NULL}, 2910, "udp"}, +{"blockade", {NULL}, 2911, "tcp"}, +{"blockade", {NULL}, 2911, "udp"}, +{"epicon", {NULL}, 2912, "tcp"}, +{"epicon", {NULL}, 2912, "udp"}, +{"boosterware", {NULL}, 2913, "tcp"}, +{"boosterware", {NULL}, 2913, "udp"}, +{"gamelobby", {NULL}, 2914, "tcp"}, +{"gamelobby", {NULL}, 2914, "udp"}, +{"tksocket", {NULL}, 2915, "tcp"}, +{"tksocket", {NULL}, 2915, "udp"}, +{"elvin_server", {NULL}, 2916, "tcp"}, +{"elvin_server", {NULL}, 2916, "udp"}, +{"elvin_client", {NULL}, 2917, "tcp"}, +{"elvin_client", {NULL}, 2917, "udp"}, +{"kastenchasepad", {NULL}, 2918, "tcp"}, +{"kastenchasepad", {NULL}, 2918, "udp"}, +{"roboer", {NULL}, 2919, "tcp"}, +{"roboer", {NULL}, 2919, "udp"}, +{"roboeda", {NULL}, 2920, "tcp"}, +{"roboeda", {NULL}, 2920, "udp"}, +{"cesdcdman", {NULL}, 2921, "tcp"}, +{"cesdcdman", {NULL}, 2921, "udp"}, +{"cesdcdtrn", {NULL}, 2922, "tcp"}, +{"cesdcdtrn", {NULL}, 2922, "udp"}, +{"wta-wsp-wtp-s", {NULL}, 2923, "tcp"}, +{"wta-wsp-wtp-s", {NULL}, 2923, "udp"}, +{"precise-vip", {NULL}, 2924, "tcp"}, +{"precise-vip", {NULL}, 2924, "udp"}, +{"mobile-file-dl", {NULL}, 2926, "tcp"}, +{"mobile-file-dl", {NULL}, 2926, "udp"}, +{"unimobilectrl", {NULL}, 2927, "tcp"}, +{"unimobilectrl", {NULL}, 2927, "udp"}, +{"redstone-cpss", {NULL}, 2928, "tcp"}, +{"redstone-cpss", {NULL}, 2928, "udp"}, +{"amx-webadmin", {NULL}, 2929, "tcp"}, +{"amx-webadmin", {NULL}, 2929, "udp"}, +{"amx-weblinx", {NULL}, 2930, "tcp"}, +{"amx-weblinx", {NULL}, 2930, "udp"}, +{"circle-x", {NULL}, 2931, "tcp"}, +{"circle-x", {NULL}, 2931, "udp"}, +{"incp", {NULL}, 2932, "tcp"}, +{"incp", {NULL}, 2932, "udp"}, +{"4-tieropmgw", {NULL}, 2933, "tcp"}, +{"4-tieropmgw", {NULL}, 2933, "udp"}, +{"4-tieropmcli", {NULL}, 2934, "tcp"}, +{"4-tieropmcli", {NULL}, 2934, "udp"}, +{"qtp", {NULL}, 2935, "tcp"}, +{"qtp", {NULL}, 2935, "udp"}, +{"otpatch", {NULL}, 2936, "tcp"}, +{"otpatch", {NULL}, 2936, "udp"}, +{"pnaconsult-lm", {NULL}, 2937, "tcp"}, +{"pnaconsult-lm", {NULL}, 2937, "udp"}, +{"sm-pas-1", {NULL}, 2938, "tcp"}, +{"sm-pas-1", {NULL}, 2938, "udp"}, +{"sm-pas-2", {NULL}, 2939, "tcp"}, +{"sm-pas-2", {NULL}, 2939, "udp"}, +{"sm-pas-3", {NULL}, 2940, "tcp"}, +{"sm-pas-3", {NULL}, 2940, "udp"}, +{"sm-pas-4", {NULL}, 2941, "tcp"}, +{"sm-pas-4", {NULL}, 2941, "udp"}, +{"sm-pas-5", {NULL}, 2942, "tcp"}, +{"sm-pas-5", {NULL}, 2942, "udp"}, +{"ttnrepository", {NULL}, 2943, "tcp"}, +{"ttnrepository", {NULL}, 2943, "udp"}, +{"megaco-h248", {NULL}, 2944, "tcp"}, +{"megaco-h248", {NULL}, 2944, "udp"}, +{"megaco-h248", {NULL}, 2944, "sctp"}, +{"h248-binary", {NULL}, 2945, "tcp"}, +{"h248-binary", {NULL}, 2945, "udp"}, +{"h248-binary", {NULL}, 2945, "sctp"}, +{"fjsvmpor", {NULL}, 2946, "tcp"}, +{"fjsvmpor", {NULL}, 2946, "udp"}, +{"gpsd", {NULL}, 2947, "tcp"}, +{"gpsd", {NULL}, 2947, "udp"}, +{"wap-push", {NULL}, 2948, "tcp"}, +{"wap-push", {NULL}, 2948, "udp"}, +{"wap-pushsecure", {NULL}, 2949, "tcp"}, +{"wap-pushsecure", {NULL}, 2949, "udp"}, +{"esip", {NULL}, 2950, "tcp"}, +{"esip", {NULL}, 2950, "udp"}, +{"ottp", {NULL}, 2951, "tcp"}, +{"ottp", {NULL}, 2951, "udp"}, +{"mpfwsas", {NULL}, 2952, "tcp"}, +{"mpfwsas", {NULL}, 2952, "udp"}, +{"ovalarmsrv", {NULL}, 2953, "tcp"}, +{"ovalarmsrv", {NULL}, 2953, "udp"}, +{"ovalarmsrv-cmd", {NULL}, 2954, "tcp"}, +{"ovalarmsrv-cmd", {NULL}, 2954, "udp"}, +{"csnotify", {NULL}, 2955, "tcp"}, +{"csnotify", {NULL}, 2955, "udp"}, +{"ovrimosdbman", {NULL}, 2956, "tcp"}, +{"ovrimosdbman", {NULL}, 2956, "udp"}, +{"jmact5", {NULL}, 2957, "tcp"}, +{"jmact5", {NULL}, 2957, "udp"}, +{"jmact6", {NULL}, 2958, "tcp"}, +{"jmact6", {NULL}, 2958, "udp"}, +{"rmopagt", {NULL}, 2959, "tcp"}, +{"rmopagt", {NULL}, 2959, "udp"}, +{"dfoxserver", {NULL}, 2960, "tcp"}, +{"dfoxserver", {NULL}, 2960, "udp"}, +{"boldsoft-lm", {NULL}, 2961, "tcp"}, +{"boldsoft-lm", {NULL}, 2961, "udp"}, +{"iph-policy-cli", {NULL}, 2962, "tcp"}, +{"iph-policy-cli", {NULL}, 2962, "udp"}, +{"iph-policy-adm", {NULL}, 2963, "tcp"}, +{"iph-policy-adm", {NULL}, 2963, "udp"}, +{"bullant-srap", {NULL}, 2964, "tcp"}, +{"bullant-srap", {NULL}, 2964, "udp"}, +{"bullant-rap", {NULL}, 2965, "tcp"}, +{"bullant-rap", {NULL}, 2965, "udp"}, +{"idp-infotrieve", {NULL}, 2966, "tcp"}, +{"idp-infotrieve", {NULL}, 2966, "udp"}, +{"ssc-agent", {NULL}, 2967, "tcp"}, +{"ssc-agent", {NULL}, 2967, "udp"}, +{"enpp", {NULL}, 2968, "tcp"}, +{"enpp", {NULL}, 2968, "udp"}, +{"essp", {NULL}, 2969, "tcp"}, +{"essp", {NULL}, 2969, "udp"}, +{"index-net", {NULL}, 2970, "tcp"}, +{"index-net", {NULL}, 2970, "udp"}, +{"netclip", {NULL}, 2971, "tcp"}, +{"netclip", {NULL}, 2971, "udp"}, +{"pmsm-webrctl", {NULL}, 2972, "tcp"}, +{"pmsm-webrctl", {NULL}, 2972, "udp"}, +{"svnetworks", {NULL}, 2973, "tcp"}, +{"svnetworks", {NULL}, 2973, "udp"}, +{"signal", {NULL}, 2974, "tcp"}, +{"signal", {NULL}, 2974, "udp"}, +{"fjmpcm", {NULL}, 2975, "tcp"}, +{"fjmpcm", {NULL}, 2975, "udp"}, +{"cns-srv-port", {NULL}, 2976, "tcp"}, +{"cns-srv-port", {NULL}, 2976, "udp"}, +{"ttc-etap-ns", {NULL}, 2977, "tcp"}, +{"ttc-etap-ns", {NULL}, 2977, "udp"}, +{"ttc-etap-ds", {NULL}, 2978, "tcp"}, +{"ttc-etap-ds", {NULL}, 2978, "udp"}, +{"h263-video", {NULL}, 2979, "tcp"}, +{"h263-video", {NULL}, 2979, "udp"}, +{"wimd", {NULL}, 2980, "tcp"}, +{"wimd", {NULL}, 2980, "udp"}, +{"mylxamport", {NULL}, 2981, "tcp"}, +{"mylxamport", {NULL}, 2981, "udp"}, +{"iwb-whiteboard", {NULL}, 2982, "tcp"}, +{"iwb-whiteboard", {NULL}, 2982, "udp"}, +{"netplan", {NULL}, 2983, "tcp"}, +{"netplan", {NULL}, 2983, "udp"}, +{"hpidsadmin", {NULL}, 2984, "tcp"}, +{"hpidsadmin", {NULL}, 2984, "udp"}, +{"hpidsagent", {NULL}, 2985, "tcp"}, +{"hpidsagent", {NULL}, 2985, "udp"}, +{"stonefalls", {NULL}, 2986, "tcp"}, +{"stonefalls", {NULL}, 2986, "udp"}, +{"identify", {NULL}, 2987, "tcp"}, +{"identify", {NULL}, 2987, "udp"}, +{"hippad", {NULL}, 2988, "tcp"}, +{"hippad", {NULL}, 2988, "udp"}, +{"zarkov", {NULL}, 2989, "tcp"}, +{"zarkov", {NULL}, 2989, "udp"}, +{"boscap", {NULL}, 2990, "tcp"}, +{"boscap", {NULL}, 2990, "udp"}, +{"wkstn-mon", {NULL}, 2991, "tcp"}, +{"wkstn-mon", {NULL}, 2991, "udp"}, +{"avenyo", {NULL}, 2992, "tcp"}, +{"avenyo", {NULL}, 2992, "udp"}, +{"veritas-vis1", {NULL}, 2993, "tcp"}, +{"veritas-vis1", {NULL}, 2993, "udp"}, +{"veritas-vis2", {NULL}, 2994, "tcp"}, +{"veritas-vis2", {NULL}, 2994, "udp"}, +{"idrs", {NULL}, 2995, "tcp"}, +{"idrs", {NULL}, 2995, "udp"}, +{"vsixml", {NULL}, 2996, "tcp"}, +{"vsixml", {NULL}, 2996, "udp"}, +{"rebol", {NULL}, 2997, "tcp"}, +{"rebol", {NULL}, 2997, "udp"}, +{"realsecure", {NULL}, 2998, "tcp"}, +{"realsecure", {NULL}, 2998, "udp"}, +{"remoteware-un", {NULL}, 2999, "tcp"}, +{"remoteware-un", {NULL}, 2999, "udp"}, +{"hbci", {NULL}, 3000, "tcp"}, +{"hbci", {NULL}, 3000, "udp"}, +{"remoteware-cl", {NULL}, 3000, "tcp"}, +{"remoteware-cl", {NULL}, 3000, "udp"}, +{"exlm-agent", {NULL}, 3002, "tcp"}, +{"exlm-agent", {NULL}, 3002, "udp"}, +{"remoteware-srv", {NULL}, 3002, "tcp"}, +{"remoteware-srv", {NULL}, 3002, "udp"}, +{"cgms", {NULL}, 3003, "tcp"}, +{"cgms", {NULL}, 3003, "udp"}, +{"csoftragent", {NULL}, 3004, "tcp"}, +{"csoftragent", {NULL}, 3004, "udp"}, +{"geniuslm", {NULL}, 3005, "tcp"}, +{"geniuslm", {NULL}, 3005, "udp"}, +{"ii-admin", {NULL}, 3006, "tcp"}, +{"ii-admin", {NULL}, 3006, "udp"}, +{"lotusmtap", {NULL}, 3007, "tcp"}, +{"lotusmtap", {NULL}, 3007, "udp"}, +{"midnight-tech", {NULL}, 3008, "tcp"}, +{"midnight-tech", {NULL}, 3008, "udp"}, +{"pxc-ntfy", {NULL}, 3009, "tcp"}, +{"pxc-ntfy", {NULL}, 3009, "udp"}, +{"gw", {NULL}, 3010, "tcp"}, +{"ping-pong", {NULL}, 3010, "udp"}, +{"trusted-web", {NULL}, 3011, "tcp"}, +{"trusted-web", {NULL}, 3011, "udp"}, +{"twsdss", {NULL}, 3012, "tcp"}, +{"twsdss", {NULL}, 3012, "udp"}, +{"gilatskysurfer", {NULL}, 3013, "tcp"}, +{"gilatskysurfer", {NULL}, 3013, "udp"}, +{"broker_service", {NULL}, 3014, "tcp"}, +{"broker_service", {NULL}, 3014, "udp"}, +{"nati-dstp", {NULL}, 3015, "tcp"}, +{"nati-dstp", {NULL}, 3015, "udp"}, +{"notify_srvr", {NULL}, 3016, "tcp"}, +{"notify_srvr", {NULL}, 3016, "udp"}, +{"event_listener", {NULL}, 3017, "tcp"}, +{"event_listener", {NULL}, 3017, "udp"}, +{"srvc_registry", {NULL}, 3018, "tcp"}, +{"srvc_registry", {NULL}, 3018, "udp"}, +{"resource_mgr", {NULL}, 3019, "tcp"}, +{"resource_mgr", {NULL}, 3019, "udp"}, +{"cifs", {NULL}, 3020, "tcp"}, +{"cifs", {NULL}, 3020, "udp"}, +{"agriserver", {NULL}, 3021, "tcp"}, +{"agriserver", {NULL}, 3021, "udp"}, +{"csregagent", {NULL}, 3022, "tcp"}, +{"csregagent", {NULL}, 3022, "udp"}, +{"magicnotes", {NULL}, 3023, "tcp"}, +{"magicnotes", {NULL}, 3023, "udp"}, +{"nds_sso", {NULL}, 3024, "tcp"}, +{"nds_sso", {NULL}, 3024, "udp"}, +{"arepa-raft", {NULL}, 3025, "tcp"}, +{"arepa-raft", {NULL}, 3025, "udp"}, +{"agri-gateway", {NULL}, 3026, "tcp"}, +{"agri-gateway", {NULL}, 3026, "udp"}, +{"LiebDevMgmt_C", {NULL}, 3027, "tcp"}, +{"LiebDevMgmt_C", {NULL}, 3027, "udp"}, +{"LiebDevMgmt_DM", {NULL}, 3028, "tcp"}, +{"LiebDevMgmt_DM", {NULL}, 3028, "udp"}, +{"LiebDevMgmt_A", {NULL}, 3029, "tcp"}, +{"LiebDevMgmt_A", {NULL}, 3029, "udp"}, +{"arepa-cas", {NULL}, 3030, "tcp"}, +{"arepa-cas", {NULL}, 3030, "udp"}, +{"eppc", {NULL}, 3031, "tcp"}, +{"eppc", {NULL}, 3031, "udp"}, +{"redwood-chat", {NULL}, 3032, "tcp"}, +{"redwood-chat", {NULL}, 3032, "udp"}, +{"pdb", {NULL}, 3033, "tcp"}, +{"pdb", {NULL}, 3033, "udp"}, +{"osmosis-aeea", {NULL}, 3034, "tcp"}, +{"osmosis-aeea", {NULL}, 3034, "udp"}, +{"fjsv-gssagt", {NULL}, 3035, "tcp"}, +{"fjsv-gssagt", {NULL}, 3035, "udp"}, +{"hagel-dump", {NULL}, 3036, "tcp"}, +{"hagel-dump", {NULL}, 3036, "udp"}, +{"hp-san-mgmt", {NULL}, 3037, "tcp"}, +{"hp-san-mgmt", {NULL}, 3037, "udp"}, +{"santak-ups", {NULL}, 3038, "tcp"}, +{"santak-ups", {NULL}, 3038, "udp"}, +{"cogitate", {NULL}, 3039, "tcp"}, +{"cogitate", {NULL}, 3039, "udp"}, +{"tomato-springs", {NULL}, 3040, "tcp"}, +{"tomato-springs", {NULL}, 3040, "udp"}, +{"di-traceware", {NULL}, 3041, "tcp"}, +{"di-traceware", {NULL}, 3041, "udp"}, +{"journee", {NULL}, 3042, "tcp"}, +{"journee", {NULL}, 3042, "udp"}, +{"brp", {NULL}, 3043, "tcp"}, +{"brp", {NULL}, 3043, "udp"}, +{"epp", {NULL}, 3044, "tcp"}, +{"epp", {NULL}, 3044, "udp"}, +{"responsenet", {NULL}, 3045, "tcp"}, +{"responsenet", {NULL}, 3045, "udp"}, +{"di-ase", {NULL}, 3046, "tcp"}, +{"di-ase", {NULL}, 3046, "udp"}, +{"hlserver", {NULL}, 3047, "tcp"}, +{"hlserver", {NULL}, 3047, "udp"}, +{"pctrader", {NULL}, 3048, "tcp"}, +{"pctrader", {NULL}, 3048, "udp"}, +{"nsws", {NULL}, 3049, "tcp"}, +{"nsws", {NULL}, 3049, "udp"}, +{"gds_db", {NULL}, 3050, "tcp"}, +{"gds_db", {NULL}, 3050, "udp"}, +{"galaxy-server", {NULL}, 3051, "tcp"}, +{"galaxy-server", {NULL}, 3051, "udp"}, +{"apc-3052", {NULL}, 3052, "tcp"}, +{"apc-3052", {NULL}, 3052, "udp"}, +{"dsom-server", {NULL}, 3053, "tcp"}, +{"dsom-server", {NULL}, 3053, "udp"}, +{"amt-cnf-prot", {NULL}, 3054, "tcp"}, +{"amt-cnf-prot", {NULL}, 3054, "udp"}, +{"policyserver", {NULL}, 3055, "tcp"}, +{"policyserver", {NULL}, 3055, "udp"}, +{"cdl-server", {NULL}, 3056, "tcp"}, +{"cdl-server", {NULL}, 3056, "udp"}, +{"goahead-fldup", {NULL}, 3057, "tcp"}, +{"goahead-fldup", {NULL}, 3057, "udp"}, +{"videobeans", {NULL}, 3058, "tcp"}, +{"videobeans", {NULL}, 3058, "udp"}, +{"qsoft", {NULL}, 3059, "tcp"}, +{"qsoft", {NULL}, 3059, "udp"}, +{"interserver", {NULL}, 3060, "tcp"}, +{"interserver", {NULL}, 3060, "udp"}, +{"cautcpd", {NULL}, 3061, "tcp"}, +{"cautcpd", {NULL}, 3061, "udp"}, +{"ncacn-ip-tcp", {NULL}, 3062, "tcp"}, +{"ncacn-ip-tcp", {NULL}, 3062, "udp"}, +{"ncadg-ip-udp", {NULL}, 3063, "tcp"}, +{"ncadg-ip-udp", {NULL}, 3063, "udp"}, +{"rprt", {NULL}, 3064, "tcp"}, +{"rprt", {NULL}, 3064, "udp"}, +{"slinterbase", {NULL}, 3065, "tcp"}, +{"slinterbase", {NULL}, 3065, "udp"}, +{"netattachsdmp", {NULL}, 3066, "tcp"}, +{"netattachsdmp", {NULL}, 3066, "udp"}, +{"fjhpjp", {NULL}, 3067, "tcp"}, +{"fjhpjp", {NULL}, 3067, "udp"}, +{"ls3bcast", {NULL}, 3068, "tcp"}, +{"ls3bcast", {NULL}, 3068, "udp"}, +{"ls3", {NULL}, 3069, "tcp"}, +{"ls3", {NULL}, 3069, "udp"}, +{"mgxswitch", {NULL}, 3070, "tcp"}, +{"mgxswitch", {NULL}, 3070, "udp"}, +{"csd-mgmt-port", {NULL}, 3071, "tcp"}, +{"csd-mgmt-port", {NULL}, 3071, "udp"}, +{"csd-monitor", {NULL}, 3072, "tcp"}, +{"csd-monitor", {NULL}, 3072, "udp"}, +{"vcrp", {NULL}, 3073, "tcp"}, +{"vcrp", {NULL}, 3073, "udp"}, +{"xbox", {NULL}, 3074, "tcp"}, +{"xbox", {NULL}, 3074, "udp"}, +{"orbix-locator", {NULL}, 3075, "tcp"}, +{"orbix-locator", {NULL}, 3075, "udp"}, +{"orbix-config", {NULL}, 3076, "tcp"}, +{"orbix-config", {NULL}, 3076, "udp"}, +{"orbix-loc-ssl", {NULL}, 3077, "tcp"}, +{"orbix-loc-ssl", {NULL}, 3077, "udp"}, +{"orbix-cfg-ssl", {NULL}, 3078, "tcp"}, +{"orbix-cfg-ssl", {NULL}, 3078, "udp"}, +{"lv-frontpanel", {NULL}, 3079, "tcp"}, +{"lv-frontpanel", {NULL}, 3079, "udp"}, +{"stm_pproc", {NULL}, 3080, "tcp"}, +{"stm_pproc", {NULL}, 3080, "udp"}, +{"tl1-lv", {NULL}, 3081, "tcp"}, +{"tl1-lv", {NULL}, 3081, "udp"}, +{"tl1-raw", {NULL}, 3082, "tcp"}, +{"tl1-raw", {NULL}, 3082, "udp"}, +{"tl1-telnet", {NULL}, 3083, "tcp"}, +{"tl1-telnet", {NULL}, 3083, "udp"}, +{"itm-mccs", {NULL}, 3084, "tcp"}, +{"itm-mccs", {NULL}, 3084, "udp"}, +{"pcihreq", {NULL}, 3085, "tcp"}, +{"pcihreq", {NULL}, 3085, "udp"}, +{"jdl-dbkitchen", {NULL}, 3086, "tcp"}, +{"jdl-dbkitchen", {NULL}, 3086, "udp"}, +{"asoki-sma", {NULL}, 3087, "tcp"}, +{"asoki-sma", {NULL}, 3087, "udp"}, +{"xdtp", {NULL}, 3088, "tcp"}, +{"xdtp", {NULL}, 3088, "udp"}, +{"ptk-alink", {NULL}, 3089, "tcp"}, +{"ptk-alink", {NULL}, 3089, "udp"}, +{"stss", {NULL}, 3090, "tcp"}, +{"stss", {NULL}, 3090, "udp"}, +{"1ci-smcs", {NULL}, 3091, "tcp"}, +{"1ci-smcs", {NULL}, 3091, "udp"}, +{"rapidmq-center", {NULL}, 3093, "tcp"}, +{"rapidmq-center", {NULL}, 3093, "udp"}, +{"rapidmq-reg", {NULL}, 3094, "tcp"}, +{"rapidmq-reg", {NULL}, 3094, "udp"}, +{"panasas", {NULL}, 3095, "tcp"}, +{"panasas", {NULL}, 3095, "udp"}, +{"ndl-aps", {NULL}, 3096, "tcp"}, +{"ndl-aps", {NULL}, 3096, "udp"}, +{"itu-bicc-stc", {NULL}, 3097, "sctp"}, +{"umm-port", {NULL}, 3098, "tcp"}, +{"umm-port", {NULL}, 3098, "udp"}, +{"chmd", {NULL}, 3099, "tcp"}, +{"chmd", {NULL}, 3099, "udp"}, +{"opcon-xps", {NULL}, 3100, "tcp"}, +{"opcon-xps", {NULL}, 3100, "udp"}, +{"hp-pxpib", {NULL}, 3101, "tcp"}, +{"hp-pxpib", {NULL}, 3101, "udp"}, +{"slslavemon", {NULL}, 3102, "tcp"}, +{"slslavemon", {NULL}, 3102, "udp"}, +{"autocuesmi", {NULL}, 3103, "tcp"}, +{"autocuesmi", {NULL}, 3103, "udp"}, +{"autocuelog", {NULL}, 3104, "tcp"}, +{"autocuetime", {NULL}, 3104, "udp"}, +{"cardbox", {NULL}, 3105, "tcp"}, +{"cardbox", {NULL}, 3105, "udp"}, +{"cardbox-http", {NULL}, 3106, "tcp"}, +{"cardbox-http", {NULL}, 3106, "udp"}, +{"business", {NULL}, 3107, "tcp"}, +{"business", {NULL}, 3107, "udp"}, +{"geolocate", {NULL}, 3108, "tcp"}, +{"geolocate", {NULL}, 3108, "udp"}, +{"personnel", {NULL}, 3109, "tcp"}, +{"personnel", {NULL}, 3109, "udp"}, +{"sim-control", {NULL}, 3110, "tcp"}, +{"sim-control", {NULL}, 3110, "udp"}, +{"wsynch", {NULL}, 3111, "tcp"}, +{"wsynch", {NULL}, 3111, "udp"}, +{"ksysguard", {NULL}, 3112, "tcp"}, +{"ksysguard", {NULL}, 3112, "udp"}, +{"cs-auth-svr", {NULL}, 3113, "tcp"}, +{"cs-auth-svr", {NULL}, 3113, "udp"}, +{"ccmad", {NULL}, 3114, "tcp"}, +{"ccmad", {NULL}, 3114, "udp"}, +{"mctet-master", {NULL}, 3115, "tcp"}, +{"mctet-master", {NULL}, 3115, "udp"}, +{"mctet-gateway", {NULL}, 3116, "tcp"}, +{"mctet-gateway", {NULL}, 3116, "udp"}, +{"mctet-jserv", {NULL}, 3117, "tcp"}, +{"mctet-jserv", {NULL}, 3117, "udp"}, +{"pkagent", {NULL}, 3118, "tcp"}, +{"pkagent", {NULL}, 3118, "udp"}, +{"d2000kernel", {NULL}, 3119, "tcp"}, +{"d2000kernel", {NULL}, 3119, "udp"}, +{"d2000webserver", {NULL}, 3120, "tcp"}, +{"d2000webserver", {NULL}, 3120, "udp"}, +{"vtr-emulator", {NULL}, 3122, "tcp"}, +{"vtr-emulator", {NULL}, 3122, "udp"}, +{"edix", {NULL}, 3123, "tcp"}, +{"edix", {NULL}, 3123, "udp"}, +{"beacon-port", {NULL}, 3124, "tcp"}, +{"beacon-port", {NULL}, 3124, "udp"}, +{"a13-an", {NULL}, 3125, "tcp"}, +{"a13-an", {NULL}, 3125, "udp"}, +{"ctx-bridge", {NULL}, 3127, "tcp"}, +{"ctx-bridge", {NULL}, 3127, "udp"}, +{"ndl-aas", {NULL}, 3128, "tcp"}, +{"ndl-aas", {NULL}, 3128, "udp"}, +{"netport-id", {NULL}, 3129, "tcp"}, +{"netport-id", {NULL}, 3129, "udp"}, +{"icpv2", {NULL}, 3130, "tcp"}, +{"icpv2", {NULL}, 3130, "udp"}, +{"netbookmark", {NULL}, 3131, "tcp"}, +{"netbookmark", {NULL}, 3131, "udp"}, +{"ms-rule-engine", {NULL}, 3132, "tcp"}, +{"ms-rule-engine", {NULL}, 3132, "udp"}, +{"prism-deploy", {NULL}, 3133, "tcp"}, +{"prism-deploy", {NULL}, 3133, "udp"}, +{"ecp", {NULL}, 3134, "tcp"}, +{"ecp", {NULL}, 3134, "udp"}, +{"peerbook-port", {NULL}, 3135, "tcp"}, +{"peerbook-port", {NULL}, 3135, "udp"}, +{"grubd", {NULL}, 3136, "tcp"}, +{"grubd", {NULL}, 3136, "udp"}, +{"rtnt-1", {NULL}, 3137, "tcp"}, +{"rtnt-1", {NULL}, 3137, "udp"}, +{"rtnt-2", {NULL}, 3138, "tcp"}, +{"rtnt-2", {NULL}, 3138, "udp"}, +{"incognitorv", {NULL}, 3139, "tcp"}, +{"incognitorv", {NULL}, 3139, "udp"}, +{"ariliamulti", {NULL}, 3140, "tcp"}, +{"ariliamulti", {NULL}, 3140, "udp"}, +{"vmodem", {NULL}, 3141, "tcp"}, +{"vmodem", {NULL}, 3141, "udp"}, +{"rdc-wh-eos", {NULL}, 3142, "tcp"}, +{"rdc-wh-eos", {NULL}, 3142, "udp"}, +{"seaview", {NULL}, 3143, "tcp"}, +{"seaview", {NULL}, 3143, "udp"}, +{"tarantella", {NULL}, 3144, "tcp"}, +{"tarantella", {NULL}, 3144, "udp"}, +{"csi-lfap", {NULL}, 3145, "tcp"}, +{"csi-lfap", {NULL}, 3145, "udp"}, +{"bears-02", {NULL}, 3146, "tcp"}, +{"bears-02", {NULL}, 3146, "udp"}, +{"rfio", {NULL}, 3147, "tcp"}, +{"rfio", {NULL}, 3147, "udp"}, +{"nm-game-admin", {NULL}, 3148, "tcp"}, +{"nm-game-admin", {NULL}, 3148, "udp"}, +{"nm-game-server", {NULL}, 3149, "tcp"}, +{"nm-game-server", {NULL}, 3149, "udp"}, +{"nm-asses-admin", {NULL}, 3150, "tcp"}, +{"nm-asses-admin", {NULL}, 3150, "udp"}, +{"nm-assessor", {NULL}, 3151, "tcp"}, +{"nm-assessor", {NULL}, 3151, "udp"}, +{"feitianrockey", {NULL}, 3152, "tcp"}, +{"feitianrockey", {NULL}, 3152, "udp"}, +{"s8-client-port", {NULL}, 3153, "tcp"}, +{"s8-client-port", {NULL}, 3153, "udp"}, +{"ccmrmi", {NULL}, 3154, "tcp"}, +{"ccmrmi", {NULL}, 3154, "udp"}, +{"jpegmpeg", {NULL}, 3155, "tcp"}, +{"jpegmpeg", {NULL}, 3155, "udp"}, +{"indura", {NULL}, 3156, "tcp"}, +{"indura", {NULL}, 3156, "udp"}, +{"e3consultants", {NULL}, 3157, "tcp"}, +{"e3consultants", {NULL}, 3157, "udp"}, +{"stvp", {NULL}, 3158, "tcp"}, +{"stvp", {NULL}, 3158, "udp"}, +{"navegaweb-port", {NULL}, 3159, "tcp"}, +{"navegaweb-port", {NULL}, 3159, "udp"}, +{"tip-app-server", {NULL}, 3160, "tcp"}, +{"tip-app-server", {NULL}, 3160, "udp"}, +{"doc1lm", {NULL}, 3161, "tcp"}, +{"doc1lm", {NULL}, 3161, "udp"}, +{"sflm", {NULL}, 3162, "tcp"}, +{"sflm", {NULL}, 3162, "udp"}, +{"res-sap", {NULL}, 3163, "tcp"}, +{"res-sap", {NULL}, 3163, "udp"}, +{"imprs", {NULL}, 3164, "tcp"}, +{"imprs", {NULL}, 3164, "udp"}, +{"newgenpay", {NULL}, 3165, "tcp"}, +{"newgenpay", {NULL}, 3165, "udp"}, +{"sossecollector", {NULL}, 3166, "tcp"}, +{"sossecollector", {NULL}, 3166, "udp"}, +{"nowcontact", {NULL}, 3167, "tcp"}, +{"nowcontact", {NULL}, 3167, "udp"}, +{"poweronnud", {NULL}, 3168, "tcp"}, +{"poweronnud", {NULL}, 3168, "udp"}, +{"serverview-as", {NULL}, 3169, "tcp"}, +{"serverview-as", {NULL}, 3169, "udp"}, +{"serverview-asn", {NULL}, 3170, "tcp"}, +{"serverview-asn", {NULL}, 3170, "udp"}, +{"serverview-gf", {NULL}, 3171, "tcp"}, +{"serverview-gf", {NULL}, 3171, "udp"}, +{"serverview-rm", {NULL}, 3172, "tcp"}, +{"serverview-rm", {NULL}, 3172, "udp"}, +{"serverview-icc", {NULL}, 3173, "tcp"}, +{"serverview-icc", {NULL}, 3173, "udp"}, +{"armi-server", {NULL}, 3174, "tcp"}, +{"armi-server", {NULL}, 3174, "udp"}, +{"t1-e1-over-ip", {NULL}, 3175, "tcp"}, +{"t1-e1-over-ip", {NULL}, 3175, "udp"}, +{"ars-master", {NULL}, 3176, "tcp"}, +{"ars-master", {NULL}, 3176, "udp"}, +{"phonex-port", {NULL}, 3177, "tcp"}, +{"phonex-port", {NULL}, 3177, "udp"}, +{"radclientport", {NULL}, 3178, "tcp"}, +{"radclientport", {NULL}, 3178, "udp"}, +{"h2gf-w-2m", {NULL}, 3179, "tcp"}, +{"h2gf-w-2m", {NULL}, 3179, "udp"}, +{"mc-brk-srv", {NULL}, 3180, "tcp"}, +{"mc-brk-srv", {NULL}, 3180, "udp"}, +{"bmcpatrolagent", {NULL}, 3181, "tcp"}, +{"bmcpatrolagent", {NULL}, 3181, "udp"}, +{"bmcpatrolrnvu", {NULL}, 3182, "tcp"}, +{"bmcpatrolrnvu", {NULL}, 3182, "udp"}, +{"cops-tls", {NULL}, 3183, "tcp"}, +{"cops-tls", {NULL}, 3183, "udp"}, +{"apogeex-port", {NULL}, 3184, "tcp"}, +{"apogeex-port", {NULL}, 3184, "udp"}, +{"smpppd", {NULL}, 3185, "tcp"}, +{"smpppd", {NULL}, 3185, "udp"}, +{"iiw-port", {NULL}, 3186, "tcp"}, +{"iiw-port", {NULL}, 3186, "udp"}, +{"odi-port", {NULL}, 3187, "tcp"}, +{"odi-port", {NULL}, 3187, "udp"}, +{"brcm-comm-port", {NULL}, 3188, "tcp"}, +{"brcm-comm-port", {NULL}, 3188, "udp"}, +{"pcle-infex", {NULL}, 3189, "tcp"}, +{"pcle-infex", {NULL}, 3189, "udp"}, +{"csvr-proxy", {NULL}, 3190, "tcp"}, +{"csvr-proxy", {NULL}, 3190, "udp"}, +{"csvr-sslproxy", {NULL}, 3191, "tcp"}, +{"csvr-sslproxy", {NULL}, 3191, "udp"}, +{"firemonrcc", {NULL}, 3192, "tcp"}, +{"firemonrcc", {NULL}, 3192, "udp"}, +{"spandataport", {NULL}, 3193, "tcp"}, +{"spandataport", {NULL}, 3193, "udp"}, +{"magbind", {NULL}, 3194, "tcp"}, +{"magbind", {NULL}, 3194, "udp"}, +{"ncu-1", {NULL}, 3195, "tcp"}, +{"ncu-1", {NULL}, 3195, "udp"}, +{"ncu-2", {NULL}, 3196, "tcp"}, +{"ncu-2", {NULL}, 3196, "udp"}, +{"embrace-dp-s", {NULL}, 3197, "tcp"}, +{"embrace-dp-s", {NULL}, 3197, "udp"}, +{"embrace-dp-c", {NULL}, 3198, "tcp"}, +{"embrace-dp-c", {NULL}, 3198, "udp"}, +{"dmod-workspace", {NULL}, 3199, "tcp"}, +{"dmod-workspace", {NULL}, 3199, "udp"}, +{"tick-port", {NULL}, 3200, "tcp"}, +{"tick-port", {NULL}, 3200, "udp"}, +{"cpq-tasksmart", {NULL}, 3201, "tcp"}, +{"cpq-tasksmart", {NULL}, 3201, "udp"}, +{"intraintra", {NULL}, 3202, "tcp"}, +{"intraintra", {NULL}, 3202, "udp"}, +{"netwatcher-mon", {NULL}, 3203, "tcp"}, +{"netwatcher-mon", {NULL}, 3203, "udp"}, +{"netwatcher-db", {NULL}, 3204, "tcp"}, +{"netwatcher-db", {NULL}, 3204, "udp"}, +{"isns", {NULL}, 3205, "tcp"}, +{"isns", {NULL}, 3205, "udp"}, +{"ironmail", {NULL}, 3206, "tcp"}, +{"ironmail", {NULL}, 3206, "udp"}, +{"vx-auth-port", {NULL}, 3207, "tcp"}, +{"vx-auth-port", {NULL}, 3207, "udp"}, +{"pfu-prcallback", {NULL}, 3208, "tcp"}, +{"pfu-prcallback", {NULL}, 3208, "udp"}, +{"netwkpathengine", {NULL}, 3209, "tcp"}, +{"netwkpathengine", {NULL}, 3209, "udp"}, +{"flamenco-proxy", {NULL}, 3210, "tcp"}, +{"flamenco-proxy", {NULL}, 3210, "udp"}, +{"avsecuremgmt", {NULL}, 3211, "tcp"}, +{"avsecuremgmt", {NULL}, 3211, "udp"}, +{"surveyinst", {NULL}, 3212, "tcp"}, +{"surveyinst", {NULL}, 3212, "udp"}, +{"neon24x7", {NULL}, 3213, "tcp"}, +{"neon24x7", {NULL}, 3213, "udp"}, +{"jmq-daemon-1", {NULL}, 3214, "tcp"}, +{"jmq-daemon-1", {NULL}, 3214, "udp"}, +{"jmq-daemon-2", {NULL}, 3215, "tcp"}, +{"jmq-daemon-2", {NULL}, 3215, "udp"}, +{"ferrari-foam", {NULL}, 3216, "tcp"}, +{"ferrari-foam", {NULL}, 3216, "udp"}, +{"unite", {NULL}, 3217, "tcp"}, +{"unite", {NULL}, 3217, "udp"}, +{"smartpackets", {NULL}, 3218, "tcp"}, +{"smartpackets", {NULL}, 3218, "udp"}, +{"wms-messenger", {NULL}, 3219, "tcp"}, +{"wms-messenger", {NULL}, 3219, "udp"}, +{"xnm-ssl", {NULL}, 3220, "tcp"}, +{"xnm-ssl", {NULL}, 3220, "udp"}, +{"xnm-clear-text", {NULL}, 3221, "tcp"}, +{"xnm-clear-text", {NULL}, 3221, "udp"}, +{"glbp", {NULL}, 3222, "tcp"}, +{"glbp", {NULL}, 3222, "udp"}, +{"digivote", {NULL}, 3223, "tcp"}, +{"digivote", {NULL}, 3223, "udp"}, +{"aes-discovery", {NULL}, 3224, "tcp"}, +{"aes-discovery", {NULL}, 3224, "udp"}, +{"fcip-port", {NULL}, 3225, "tcp"}, +{"fcip-port", {NULL}, 3225, "udp"}, +{"isi-irp", {NULL}, 3226, "tcp"}, +{"isi-irp", {NULL}, 3226, "udp"}, +{"dwnmshttp", {NULL}, 3227, "tcp"}, +{"dwnmshttp", {NULL}, 3227, "udp"}, +{"dwmsgserver", {NULL}, 3228, "tcp"}, +{"dwmsgserver", {NULL}, 3228, "udp"}, +{"global-cd-port", {NULL}, 3229, "tcp"}, +{"global-cd-port", {NULL}, 3229, "udp"}, +{"sftdst-port", {NULL}, 3230, "tcp"}, +{"sftdst-port", {NULL}, 3230, "udp"}, +{"vidigo", {NULL}, 3231, "tcp"}, +{"vidigo", {NULL}, 3231, "udp"}, +{"mdtp", {NULL}, 3232, "tcp"}, +{"mdtp", {NULL}, 3232, "udp"}, +{"whisker", {NULL}, 3233, "tcp"}, +{"whisker", {NULL}, 3233, "udp"}, +{"alchemy", {NULL}, 3234, "tcp"}, +{"alchemy", {NULL}, 3234, "udp"}, +{"mdap-port", {NULL}, 3235, "tcp"}, +{"mdap-port", {NULL}, 3235, "udp"}, +{"apparenet-ts", {NULL}, 3236, "tcp"}, +{"apparenet-ts", {NULL}, 3236, "udp"}, +{"apparenet-tps", {NULL}, 3237, "tcp"}, +{"apparenet-tps", {NULL}, 3237, "udp"}, +{"apparenet-as", {NULL}, 3238, "tcp"}, +{"apparenet-as", {NULL}, 3238, "udp"}, +{"apparenet-ui", {NULL}, 3239, "tcp"}, +{"apparenet-ui", {NULL}, 3239, "udp"}, +{"triomotion", {NULL}, 3240, "tcp"}, +{"triomotion", {NULL}, 3240, "udp"}, +{"sysorb", {NULL}, 3241, "tcp"}, +{"sysorb", {NULL}, 3241, "udp"}, +{"sdp-id-port", {NULL}, 3242, "tcp"}, +{"sdp-id-port", {NULL}, 3242, "udp"}, +{"timelot", {NULL}, 3243, "tcp"}, +{"timelot", {NULL}, 3243, "udp"}, +{"onesaf", {NULL}, 3244, "tcp"}, +{"onesaf", {NULL}, 3244, "udp"}, +{"vieo-fe", {NULL}, 3245, "tcp"}, +{"vieo-fe", {NULL}, 3245, "udp"}, +{"dvt-system", {NULL}, 3246, "tcp"}, +{"dvt-system", {NULL}, 3246, "udp"}, +{"dvt-data", {NULL}, 3247, "tcp"}, +{"dvt-data", {NULL}, 3247, "udp"}, +{"procos-lm", {NULL}, 3248, "tcp"}, +{"procos-lm", {NULL}, 3248, "udp"}, +{"ssp", {NULL}, 3249, "tcp"}, +{"ssp", {NULL}, 3249, "udp"}, +{"hicp", {NULL}, 3250, "tcp"}, +{"hicp", {NULL}, 3250, "udp"}, +{"sysscanner", {NULL}, 3251, "tcp"}, +{"sysscanner", {NULL}, 3251, "udp"}, +{"dhe", {NULL}, 3252, "tcp"}, +{"dhe", {NULL}, 3252, "udp"}, +{"pda-data", {NULL}, 3253, "tcp"}, +{"pda-data", {NULL}, 3253, "udp"}, +{"pda-sys", {NULL}, 3254, "tcp"}, +{"pda-sys", {NULL}, 3254, "udp"}, +{"semaphore", {NULL}, 3255, "tcp"}, +{"semaphore", {NULL}, 3255, "udp"}, +{"cpqrpm-agent", {NULL}, 3256, "tcp"}, +{"cpqrpm-agent", {NULL}, 3256, "udp"}, +{"cpqrpm-server", {NULL}, 3257, "tcp"}, +{"cpqrpm-server", {NULL}, 3257, "udp"}, +{"ivecon-port", {NULL}, 3258, "tcp"}, +{"ivecon-port", {NULL}, 3258, "udp"}, +{"epncdp2", {NULL}, 3259, "tcp"}, +{"epncdp2", {NULL}, 3259, "udp"}, +{"iscsi-target", {NULL}, 3260, "tcp"}, +{"iscsi-target", {NULL}, 3260, "udp"}, +{"winshadow", {NULL}, 3261, "tcp"}, +{"winshadow", {NULL}, 3261, "udp"}, +{"necp", {NULL}, 3262, "tcp"}, +{"necp", {NULL}, 3262, "udp"}, +{"ecolor-imager", {NULL}, 3263, "tcp"}, +{"ecolor-imager", {NULL}, 3263, "udp"}, +{"ccmail", {NULL}, 3264, "tcp"}, +{"ccmail", {NULL}, 3264, "udp"}, +{"altav-tunnel", {NULL}, 3265, "tcp"}, +{"altav-tunnel", {NULL}, 3265, "udp"}, +{"ns-cfg-server", {NULL}, 3266, "tcp"}, +{"ns-cfg-server", {NULL}, 3266, "udp"}, +{"ibm-dial-out", {NULL}, 3267, "tcp"}, +{"ibm-dial-out", {NULL}, 3267, "udp"}, +{"msft-gc", {NULL}, 3268, "tcp"}, +{"msft-gc", {NULL}, 3268, "udp"}, +{"msft-gc-ssl", {NULL}, 3269, "tcp"}, +{"msft-gc-ssl", {NULL}, 3269, "udp"}, +{"verismart", {NULL}, 3270, "tcp"}, +{"verismart", {NULL}, 3270, "udp"}, +{"csoft-prev", {NULL}, 3271, "tcp"}, +{"csoft-prev", {NULL}, 3271, "udp"}, +{"user-manager", {NULL}, 3272, "tcp"}, +{"user-manager", {NULL}, 3272, "udp"}, +{"sxmp", {NULL}, 3273, "tcp"}, +{"sxmp", {NULL}, 3273, "udp"}, +{"ordinox-server", {NULL}, 3274, "tcp"}, +{"ordinox-server", {NULL}, 3274, "udp"}, +{"samd", {NULL}, 3275, "tcp"}, +{"samd", {NULL}, 3275, "udp"}, +{"maxim-asics", {NULL}, 3276, "tcp"}, +{"maxim-asics", {NULL}, 3276, "udp"}, +{"awg-proxy", {NULL}, 3277, "tcp"}, +{"awg-proxy", {NULL}, 3277, "udp"}, +{"lkcmserver", {NULL}, 3278, "tcp"}, +{"lkcmserver", {NULL}, 3278, "udp"}, +{"admind", {NULL}, 3279, "tcp"}, +{"admind", {NULL}, 3279, "udp"}, +{"vs-server", {NULL}, 3280, "tcp"}, +{"vs-server", {NULL}, 3280, "udp"}, +{"sysopt", {NULL}, 3281, "tcp"}, +{"sysopt", {NULL}, 3281, "udp"}, +{"datusorb", {NULL}, 3282, "tcp"}, +{"datusorb", {NULL}, 3282, "udp"}, +{"net-assistant", {NULL}, 3283, "tcp"}, +{"net-assistant", {NULL}, 3283, "udp"}, +{"4talk", {NULL}, 3284, "tcp"}, +{"4talk", {NULL}, 3284, "udp"}, +{"plato", {NULL}, 3285, "tcp"}, +{"plato", {NULL}, 3285, "udp"}, +{"e-net", {NULL}, 3286, "tcp"}, +{"e-net", {NULL}, 3286, "udp"}, +{"directvdata", {NULL}, 3287, "tcp"}, +{"directvdata", {NULL}, 3287, "udp"}, +{"cops", {NULL}, 3288, "tcp"}, +{"cops", {NULL}, 3288, "udp"}, +{"enpc", {NULL}, 3289, "tcp"}, +{"enpc", {NULL}, 3289, "udp"}, +{"caps-lm", {NULL}, 3290, "tcp"}, +{"caps-lm", {NULL}, 3290, "udp"}, +{"sah-lm", {NULL}, 3291, "tcp"}, +{"sah-lm", {NULL}, 3291, "udp"}, +{"cart-o-rama", {NULL}, 3292, "tcp"}, +{"cart-o-rama", {NULL}, 3292, "udp"}, +{"fg-fps", {NULL}, 3293, "tcp"}, +{"fg-fps", {NULL}, 3293, "udp"}, +{"fg-gip", {NULL}, 3294, "tcp"}, +{"fg-gip", {NULL}, 3294, "udp"}, +{"dyniplookup", {NULL}, 3295, "tcp"}, +{"dyniplookup", {NULL}, 3295, "udp"}, +{"rib-slm", {NULL}, 3296, "tcp"}, +{"rib-slm", {NULL}, 3296, "udp"}, +{"cytel-lm", {NULL}, 3297, "tcp"}, +{"cytel-lm", {NULL}, 3297, "udp"}, +{"deskview", {NULL}, 3298, "tcp"}, +{"deskview", {NULL}, 3298, "udp"}, +{"pdrncs", {NULL}, 3299, "tcp"}, +{"pdrncs", {NULL}, 3299, "udp"}, +{"mcs-fastmail", {NULL}, 3302, "tcp"}, +{"mcs-fastmail", {NULL}, 3302, "udp"}, +{"opsession-clnt", {NULL}, 3303, "tcp"}, +{"opsession-clnt", {NULL}, 3303, "udp"}, +{"opsession-srvr", {NULL}, 3304, "tcp"}, +{"opsession-srvr", {NULL}, 3304, "udp"}, +{"odette-ftp", {NULL}, 3305, "tcp"}, +{"odette-ftp", {NULL}, 3305, "udp"}, +{"mysql", {NULL}, 3306, "tcp"}, +{"mysql", {NULL}, 3306, "udp"}, +{"opsession-prxy", {NULL}, 3307, "tcp"}, +{"opsession-prxy", {NULL}, 3307, "udp"}, +{"tns-server", {NULL}, 3308, "tcp"}, +{"tns-server", {NULL}, 3308, "udp"}, +{"tns-adv", {NULL}, 3309, "tcp"}, +{"tns-adv", {NULL}, 3309, "udp"}, +{"dyna-access", {NULL}, 3310, "tcp"}, +{"dyna-access", {NULL}, 3310, "udp"}, +{"mcns-tel-ret", {NULL}, 3311, "tcp"}, +{"mcns-tel-ret", {NULL}, 3311, "udp"}, +{"appman-server", {NULL}, 3312, "tcp"}, +{"appman-server", {NULL}, 3312, "udp"}, +{"uorb", {NULL}, 3313, "tcp"}, +{"uorb", {NULL}, 3313, "udp"}, +{"uohost", {NULL}, 3314, "tcp"}, +{"uohost", {NULL}, 3314, "udp"}, +{"cdid", {NULL}, 3315, "tcp"}, +{"cdid", {NULL}, 3315, "udp"}, +{"aicc-cmi", {NULL}, 3316, "tcp"}, +{"aicc-cmi", {NULL}, 3316, "udp"}, +{"vsaiport", {NULL}, 3317, "tcp"}, +{"vsaiport", {NULL}, 3317, "udp"}, +{"ssrip", {NULL}, 3318, "tcp"}, +{"ssrip", {NULL}, 3318, "udp"}, +{"sdt-lmd", {NULL}, 3319, "tcp"}, +{"sdt-lmd", {NULL}, 3319, "udp"}, +{"officelink2000", {NULL}, 3320, "tcp"}, +{"officelink2000", {NULL}, 3320, "udp"}, +{"vnsstr", {NULL}, 3321, "tcp"}, +{"vnsstr", {NULL}, 3321, "udp"}, +{"sftu", {NULL}, 3326, "tcp"}, +{"sftu", {NULL}, 3326, "udp"}, +{"bbars", {NULL}, 3327, "tcp"}, +{"bbars", {NULL}, 3327, "udp"}, +{"egptlm", {NULL}, 3328, "tcp"}, +{"egptlm", {NULL}, 3328, "udp"}, +{"hp-device-disc", {NULL}, 3329, "tcp"}, +{"hp-device-disc", {NULL}, 3329, "udp"}, +{"mcs-calypsoicf", {NULL}, 3330, "tcp"}, +{"mcs-calypsoicf", {NULL}, 3330, "udp"}, +{"mcs-messaging", {NULL}, 3331, "tcp"}, +{"mcs-messaging", {NULL}, 3331, "udp"}, +{"mcs-mailsvr", {NULL}, 3332, "tcp"}, +{"mcs-mailsvr", {NULL}, 3332, "udp"}, +{"dec-notes", {NULL}, 3333, "tcp"}, +{"dec-notes", {NULL}, 3333, "udp"}, +{"directv-web", {NULL}, 3334, "tcp"}, +{"directv-web", {NULL}, 3334, "udp"}, +{"directv-soft", {NULL}, 3335, "tcp"}, +{"directv-soft", {NULL}, 3335, "udp"}, +{"directv-tick", {NULL}, 3336, "tcp"}, +{"directv-tick", {NULL}, 3336, "udp"}, +{"directv-catlg", {NULL}, 3337, "tcp"}, +{"directv-catlg", {NULL}, 3337, "udp"}, +{"anet-b", {NULL}, 3338, "tcp"}, +{"anet-b", {NULL}, 3338, "udp"}, +{"anet-l", {NULL}, 3339, "tcp"}, +{"anet-l", {NULL}, 3339, "udp"}, +{"anet-m", {NULL}, 3340, "tcp"}, +{"anet-m", {NULL}, 3340, "udp"}, +{"anet-h", {NULL}, 3341, "tcp"}, +{"anet-h", {NULL}, 3341, "udp"}, +{"webtie", {NULL}, 3342, "tcp"}, +{"webtie", {NULL}, 3342, "udp"}, +{"ms-cluster-net", {NULL}, 3343, "tcp"}, +{"ms-cluster-net", {NULL}, 3343, "udp"}, +{"bnt-manager", {NULL}, 3344, "tcp"}, +{"bnt-manager", {NULL}, 3344, "udp"}, +{"influence", {NULL}, 3345, "tcp"}, +{"influence", {NULL}, 3345, "udp"}, +{"trnsprntproxy", {NULL}, 3346, "tcp"}, +{"trnsprntproxy", {NULL}, 3346, "udp"}, +{"phoenix-rpc", {NULL}, 3347, "tcp"}, +{"phoenix-rpc", {NULL}, 3347, "udp"}, +{"pangolin-laser", {NULL}, 3348, "tcp"}, +{"pangolin-laser", {NULL}, 3348, "udp"}, +{"chevinservices", {NULL}, 3349, "tcp"}, +{"chevinservices", {NULL}, 3349, "udp"}, +{"findviatv", {NULL}, 3350, "tcp"}, +{"findviatv", {NULL}, 3350, "udp"}, +{"btrieve", {NULL}, 3351, "tcp"}, +{"btrieve", {NULL}, 3351, "udp"}, +{"ssql", {NULL}, 3352, "tcp"}, +{"ssql", {NULL}, 3352, "udp"}, +{"fatpipe", {NULL}, 3353, "tcp"}, +{"fatpipe", {NULL}, 3353, "udp"}, +{"suitjd", {NULL}, 3354, "tcp"}, +{"suitjd", {NULL}, 3354, "udp"}, +{"ordinox-dbase", {NULL}, 3355, "tcp"}, +{"ordinox-dbase", {NULL}, 3355, "udp"}, +{"upnotifyps", {NULL}, 3356, "tcp"}, +{"upnotifyps", {NULL}, 3356, "udp"}, +{"adtech-test", {NULL}, 3357, "tcp"}, +{"adtech-test", {NULL}, 3357, "udp"}, +{"mpsysrmsvr", {NULL}, 3358, "tcp"}, +{"mpsysrmsvr", {NULL}, 3358, "udp"}, +{"wg-netforce", {NULL}, 3359, "tcp"}, +{"wg-netforce", {NULL}, 3359, "udp"}, +{"kv-server", {NULL}, 3360, "tcp"}, +{"kv-server", {NULL}, 3360, "udp"}, +{"kv-agent", {NULL}, 3361, "tcp"}, +{"kv-agent", {NULL}, 3361, "udp"}, +{"dj-ilm", {NULL}, 3362, "tcp"}, +{"dj-ilm", {NULL}, 3362, "udp"}, +{"nati-vi-server", {NULL}, 3363, "tcp"}, +{"nati-vi-server", {NULL}, 3363, "udp"}, +{"creativeserver", {NULL}, 3364, "tcp"}, +{"creativeserver", {NULL}, 3364, "udp"}, +{"contentserver", {NULL}, 3365, "tcp"}, +{"contentserver", {NULL}, 3365, "udp"}, +{"creativepartnr", {NULL}, 3366, "tcp"}, +{"creativepartnr", {NULL}, 3366, "udp"}, +{"tip2", {NULL}, 3372, "tcp"}, +{"tip2", {NULL}, 3372, "udp"}, +{"lavenir-lm", {NULL}, 3373, "tcp"}, +{"lavenir-lm", {NULL}, 3373, "udp"}, +{"cluster-disc", {NULL}, 3374, "tcp"}, +{"cluster-disc", {NULL}, 3374, "udp"}, +{"vsnm-agent", {NULL}, 3375, "tcp"}, +{"vsnm-agent", {NULL}, 3375, "udp"}, +{"cdbroker", {NULL}, 3376, "tcp"}, +{"cdbroker", {NULL}, 3376, "udp"}, +{"cogsys-lm", {NULL}, 3377, "tcp"}, +{"cogsys-lm", {NULL}, 3377, "udp"}, +{"wsicopy", {NULL}, 3378, "tcp"}, +{"wsicopy", {NULL}, 3378, "udp"}, +{"socorfs", {NULL}, 3379, "tcp"}, +{"socorfs", {NULL}, 3379, "udp"}, +{"sns-channels", {NULL}, 3380, "tcp"}, +{"sns-channels", {NULL}, 3380, "udp"}, +{"geneous", {NULL}, 3381, "tcp"}, +{"geneous", {NULL}, 3381, "udp"}, +{"fujitsu-neat", {NULL}, 3382, "tcp"}, +{"fujitsu-neat", {NULL}, 3382, "udp"}, +{"esp-lm", {NULL}, 3383, "tcp"}, +{"esp-lm", {NULL}, 3383, "udp"}, +{"hp-clic", {NULL}, 3384, "tcp"}, +{"hp-clic", {NULL}, 3384, "udp"}, +{"qnxnetman", {NULL}, 3385, "tcp"}, +{"qnxnetman", {NULL}, 3385, "udp"}, +{"gprs-data", {NULL}, 3386, "tcp"}, +{"gprs-sig", {NULL}, 3386, "udp"}, +{"backroomnet", {NULL}, 3387, "tcp"}, +{"backroomnet", {NULL}, 3387, "udp"}, +{"cbserver", {NULL}, 3388, "tcp"}, +{"cbserver", {NULL}, 3388, "udp"}, +{"ms-wbt-server", {NULL}, 3389, "tcp"}, +{"ms-wbt-server", {NULL}, 3389, "udp"}, +{"dsc", {NULL}, 3390, "tcp"}, +{"dsc", {NULL}, 3390, "udp"}, +{"savant", {NULL}, 3391, "tcp"}, +{"savant", {NULL}, 3391, "udp"}, +{"efi-lm", {NULL}, 3392, "tcp"}, +{"efi-lm", {NULL}, 3392, "udp"}, +{"d2k-tapestry1", {NULL}, 3393, "tcp"}, +{"d2k-tapestry1", {NULL}, 3393, "udp"}, +{"d2k-tapestry2", {NULL}, 3394, "tcp"}, +{"d2k-tapestry2", {NULL}, 3394, "udp"}, +{"dyna-lm", {NULL}, 3395, "tcp"}, +{"dyna-lm", {NULL}, 3395, "udp"}, +{"printer_agent", {NULL}, 3396, "tcp"}, +{"printer_agent", {NULL}, 3396, "udp"}, +{"cloanto-lm", {NULL}, 3397, "tcp"}, +{"cloanto-lm", {NULL}, 3397, "udp"}, +{"mercantile", {NULL}, 3398, "tcp"}, +{"mercantile", {NULL}, 3398, "udp"}, +{"csms", {NULL}, 3399, "tcp"}, +{"csms", {NULL}, 3399, "udp"}, +{"csms2", {NULL}, 3400, "tcp"}, +{"csms2", {NULL}, 3400, "udp"}, +{"filecast", {NULL}, 3401, "tcp"}, +{"filecast", {NULL}, 3401, "udp"}, +{"fxaengine-net", {NULL}, 3402, "tcp"}, +{"fxaengine-net", {NULL}, 3402, "udp"}, +{"nokia-ann-ch1", {NULL}, 3405, "tcp"}, +{"nokia-ann-ch1", {NULL}, 3405, "udp"}, +{"nokia-ann-ch2", {NULL}, 3406, "tcp"}, +{"nokia-ann-ch2", {NULL}, 3406, "udp"}, +{"ldap-admin", {NULL}, 3407, "tcp"}, +{"ldap-admin", {NULL}, 3407, "udp"}, +{"BESApi", {NULL}, 3408, "tcp"}, +{"BESApi", {NULL}, 3408, "udp"}, +{"networklens", {NULL}, 3409, "tcp"}, +{"networklens", {NULL}, 3409, "udp"}, +{"networklenss", {NULL}, 3410, "tcp"}, +{"networklenss", {NULL}, 3410, "udp"}, +{"biolink-auth", {NULL}, 3411, "tcp"}, +{"biolink-auth", {NULL}, 3411, "udp"}, +{"xmlblaster", {NULL}, 3412, "tcp"}, +{"xmlblaster", {NULL}, 3412, "udp"}, +{"svnet", {NULL}, 3413, "tcp"}, +{"svnet", {NULL}, 3413, "udp"}, +{"wip-port", {NULL}, 3414, "tcp"}, +{"wip-port", {NULL}, 3414, "udp"}, +{"bcinameservice", {NULL}, 3415, "tcp"}, +{"bcinameservice", {NULL}, 3415, "udp"}, +{"commandport", {NULL}, 3416, "tcp"}, +{"commandport", {NULL}, 3416, "udp"}, +{"csvr", {NULL}, 3417, "tcp"}, +{"csvr", {NULL}, 3417, "udp"}, +{"rnmap", {NULL}, 3418, "tcp"}, +{"rnmap", {NULL}, 3418, "udp"}, +{"softaudit", {NULL}, 3419, "tcp"}, +{"softaudit", {NULL}, 3419, "udp"}, +{"ifcp-port", {NULL}, 3420, "tcp"}, +{"ifcp-port", {NULL}, 3420, "udp"}, +{"bmap", {NULL}, 3421, "tcp"}, +{"bmap", {NULL}, 3421, "udp"}, +{"rusb-sys-port", {NULL}, 3422, "tcp"}, +{"rusb-sys-port", {NULL}, 3422, "udp"}, +{"xtrm", {NULL}, 3423, "tcp"}, +{"xtrm", {NULL}, 3423, "udp"}, +{"xtrms", {NULL}, 3424, "tcp"}, +{"xtrms", {NULL}, 3424, "udp"}, +{"agps-port", {NULL}, 3425, "tcp"}, +{"agps-port", {NULL}, 3425, "udp"}, +{"arkivio", {NULL}, 3426, "tcp"}, +{"arkivio", {NULL}, 3426, "udp"}, +{"websphere-snmp", {NULL}, 3427, "tcp"}, +{"websphere-snmp", {NULL}, 3427, "udp"}, +{"twcss", {NULL}, 3428, "tcp"}, +{"twcss", {NULL}, 3428, "udp"}, +{"gcsp", {NULL}, 3429, "tcp"}, +{"gcsp", {NULL}, 3429, "udp"}, +{"ssdispatch", {NULL}, 3430, "tcp"}, +{"ssdispatch", {NULL}, 3430, "udp"}, +{"ndl-als", {NULL}, 3431, "tcp"}, +{"ndl-als", {NULL}, 3431, "udp"}, +{"osdcp", {NULL}, 3432, "tcp"}, +{"osdcp", {NULL}, 3432, "udp"}, +{"alta-smp", {NULL}, 3433, "tcp"}, +{"alta-smp", {NULL}, 3433, "udp"}, +{"opencm", {NULL}, 3434, "tcp"}, +{"opencm", {NULL}, 3434, "udp"}, +{"pacom", {NULL}, 3435, "tcp"}, +{"pacom", {NULL}, 3435, "udp"}, +{"gc-config", {NULL}, 3436, "tcp"}, +{"gc-config", {NULL}, 3436, "udp"}, +{"autocueds", {NULL}, 3437, "tcp"}, +{"autocueds", {NULL}, 3437, "udp"}, +{"spiral-admin", {NULL}, 3438, "tcp"}, +{"spiral-admin", {NULL}, 3438, "udp"}, +{"hri-port", {NULL}, 3439, "tcp"}, +{"hri-port", {NULL}, 3439, "udp"}, +{"ans-console", {NULL}, 3440, "tcp"}, +{"ans-console", {NULL}, 3440, "udp"}, +{"connect-client", {NULL}, 3441, "tcp"}, +{"connect-client", {NULL}, 3441, "udp"}, +{"connect-server", {NULL}, 3442, "tcp"}, +{"connect-server", {NULL}, 3442, "udp"}, +{"ov-nnm-websrv", {NULL}, 3443, "tcp"}, +{"ov-nnm-websrv", {NULL}, 3443, "udp"}, +{"denali-server", {NULL}, 3444, "tcp"}, +{"denali-server", {NULL}, 3444, "udp"}, +{"monp", {NULL}, 3445, "tcp"}, +{"monp", {NULL}, 3445, "udp"}, +{"3comfaxrpc", {NULL}, 3446, "tcp"}, +{"3comfaxrpc", {NULL}, 3446, "udp"}, +{"directnet", {NULL}, 3447, "tcp"}, +{"directnet", {NULL}, 3447, "udp"}, +{"dnc-port", {NULL}, 3448, "tcp"}, +{"dnc-port", {NULL}, 3448, "udp"}, +{"hotu-chat", {NULL}, 3449, "tcp"}, +{"hotu-chat", {NULL}, 3449, "udp"}, +{"castorproxy", {NULL}, 3450, "tcp"}, +{"castorproxy", {NULL}, 3450, "udp"}, +{"asam", {NULL}, 3451, "tcp"}, +{"asam", {NULL}, 3451, "udp"}, +{"sabp-signal", {NULL}, 3452, "tcp"}, +{"sabp-signal", {NULL}, 3452, "udp"}, +{"pscupd", {NULL}, 3453, "tcp"}, +{"pscupd", {NULL}, 3453, "udp"}, +{"mira", {NULL}, 3454, "tcp"}, +{"prsvp", {NULL}, 3455, "tcp"}, +{"prsvp", {NULL}, 3455, "udp"}, +{"vat", {NULL}, 3456, "tcp"}, +{"vat", {NULL}, 3456, "udp"}, +{"vat-control", {NULL}, 3457, "tcp"}, +{"vat-control", {NULL}, 3457, "udp"}, +{"d3winosfi", {NULL}, 3458, "tcp"}, +{"d3winosfi", {NULL}, 3458, "udp"}, +{"integral", {NULL}, 3459, "tcp"}, +{"integral", {NULL}, 3459, "udp"}, +{"edm-manager", {NULL}, 3460, "tcp"}, +{"edm-manager", {NULL}, 3460, "udp"}, +{"edm-stager", {NULL}, 3461, "tcp"}, +{"edm-stager", {NULL}, 3461, "udp"}, +{"edm-std-notify", {NULL}, 3462, "tcp"}, +{"edm-std-notify", {NULL}, 3462, "udp"}, +{"edm-adm-notify", {NULL}, 3463, "tcp"}, +{"edm-adm-notify", {NULL}, 3463, "udp"}, +{"edm-mgr-sync", {NULL}, 3464, "tcp"}, +{"edm-mgr-sync", {NULL}, 3464, "udp"}, +{"edm-mgr-cntrl", {NULL}, 3465, "tcp"}, +{"edm-mgr-cntrl", {NULL}, 3465, "udp"}, +{"workflow", {NULL}, 3466, "tcp"}, +{"workflow", {NULL}, 3466, "udp"}, +{"rcst", {NULL}, 3467, "tcp"}, +{"rcst", {NULL}, 3467, "udp"}, +{"ttcmremotectrl", {NULL}, 3468, "tcp"}, +{"ttcmremotectrl", {NULL}, 3468, "udp"}, +{"pluribus", {NULL}, 3469, "tcp"}, +{"pluribus", {NULL}, 3469, "udp"}, +{"jt400", {NULL}, 3470, "tcp"}, +{"jt400", {NULL}, 3470, "udp"}, +{"jt400-ssl", {NULL}, 3471, "tcp"}, +{"jt400-ssl", {NULL}, 3471, "udp"}, +{"jaugsremotec-1", {NULL}, 3472, "tcp"}, +{"jaugsremotec-1", {NULL}, 3472, "udp"}, +{"jaugsremotec-2", {NULL}, 3473, "tcp"}, +{"jaugsremotec-2", {NULL}, 3473, "udp"}, +{"ttntspauto", {NULL}, 3474, "tcp"}, +{"ttntspauto", {NULL}, 3474, "udp"}, +{"genisar-port", {NULL}, 3475, "tcp"}, +{"genisar-port", {NULL}, 3475, "udp"}, +{"nppmp", {NULL}, 3476, "tcp"}, +{"nppmp", {NULL}, 3476, "udp"}, +{"ecomm", {NULL}, 3477, "tcp"}, +{"ecomm", {NULL}, 3477, "udp"}, +{"stun", {NULL}, 3478, "tcp"}, +{"stun", {NULL}, 3478, "udp"}, +{"turn", {NULL}, 3478, "tcp"}, +{"turn", {NULL}, 3478, "udp"}, +{"stun-behavior", {NULL}, 3478, "tcp"}, +{"stun-behavior", {NULL}, 3478, "udp"}, +{"twrpc", {NULL}, 3479, "tcp"}, +{"twrpc", {NULL}, 3479, "udp"}, +{"plethora", {NULL}, 3480, "tcp"}, +{"plethora", {NULL}, 3480, "udp"}, +{"cleanerliverc", {NULL}, 3481, "tcp"}, +{"cleanerliverc", {NULL}, 3481, "udp"}, +{"vulture", {NULL}, 3482, "tcp"}, +{"vulture", {NULL}, 3482, "udp"}, +{"slim-devices", {NULL}, 3483, "tcp"}, +{"slim-devices", {NULL}, 3483, "udp"}, +{"gbs-stp", {NULL}, 3484, "tcp"}, +{"gbs-stp", {NULL}, 3484, "udp"}, +{"celatalk", {NULL}, 3485, "tcp"}, +{"celatalk", {NULL}, 3485, "udp"}, +{"ifsf-hb-port", {NULL}, 3486, "tcp"}, +{"ifsf-hb-port", {NULL}, 3486, "udp"}, +{"ltctcp", {NULL}, 3487, "tcp"}, +{"ltcudp", {NULL}, 3487, "udp"}, +{"fs-rh-srv", {NULL}, 3488, "tcp"}, +{"fs-rh-srv", {NULL}, 3488, "udp"}, +{"dtp-dia", {NULL}, 3489, "tcp"}, +{"dtp-dia", {NULL}, 3489, "udp"}, +{"colubris", {NULL}, 3490, "tcp"}, +{"colubris", {NULL}, 3490, "udp"}, +{"swr-port", {NULL}, 3491, "tcp"}, +{"swr-port", {NULL}, 3491, "udp"}, +{"tvdumtray-port", {NULL}, 3492, "tcp"}, +{"tvdumtray-port", {NULL}, 3492, "udp"}, +{"nut", {NULL}, 3493, "tcp"}, +{"nut", {NULL}, 3493, "udp"}, +{"ibm3494", {NULL}, 3494, "tcp"}, +{"ibm3494", {NULL}, 3494, "udp"}, +{"seclayer-tcp", {NULL}, 3495, "tcp"}, +{"seclayer-tcp", {NULL}, 3495, "udp"}, +{"seclayer-tls", {NULL}, 3496, "tcp"}, +{"seclayer-tls", {NULL}, 3496, "udp"}, +{"ipether232port", {NULL}, 3497, "tcp"}, +{"ipether232port", {NULL}, 3497, "udp"}, +{"dashpas-port", {NULL}, 3498, "tcp"}, +{"dashpas-port", {NULL}, 3498, "udp"}, +{"sccip-media", {NULL}, 3499, "tcp"}, +{"sccip-media", {NULL}, 3499, "udp"}, +{"rtmp-port", {NULL}, 3500, "tcp"}, +{"rtmp-port", {NULL}, 3500, "udp"}, +{"isoft-p2p", {NULL}, 3501, "tcp"}, +{"isoft-p2p", {NULL}, 3501, "udp"}, +{"avinstalldisc", {NULL}, 3502, "tcp"}, +{"avinstalldisc", {NULL}, 3502, "udp"}, +{"lsp-ping", {NULL}, 3503, "tcp"}, +{"lsp-ping", {NULL}, 3503, "udp"}, +{"ironstorm", {NULL}, 3504, "tcp"}, +{"ironstorm", {NULL}, 3504, "udp"}, +{"ccmcomm", {NULL}, 3505, "tcp"}, +{"ccmcomm", {NULL}, 3505, "udp"}, +{"apc-3506", {NULL}, 3506, "tcp"}, +{"apc-3506", {NULL}, 3506, "udp"}, +{"nesh-broker", {NULL}, 3507, "tcp"}, +{"nesh-broker", {NULL}, 3507, "udp"}, +{"interactionweb", {NULL}, 3508, "tcp"}, +{"interactionweb", {NULL}, 3508, "udp"}, +{"vt-ssl", {NULL}, 3509, "tcp"}, +{"vt-ssl", {NULL}, 3509, "udp"}, +{"xss-port", {NULL}, 3510, "tcp"}, +{"xss-port", {NULL}, 3510, "udp"}, +{"webmail-2", {NULL}, 3511, "tcp"}, +{"webmail-2", {NULL}, 3511, "udp"}, +{"aztec", {NULL}, 3512, "tcp"}, +{"aztec", {NULL}, 3512, "udp"}, +{"arcpd", {NULL}, 3513, "tcp"}, +{"arcpd", {NULL}, 3513, "udp"}, +{"must-p2p", {NULL}, 3514, "tcp"}, +{"must-p2p", {NULL}, 3514, "udp"}, +{"must-backplane", {NULL}, 3515, "tcp"}, +{"must-backplane", {NULL}, 3515, "udp"}, +{"smartcard-port", {NULL}, 3516, "tcp"}, +{"smartcard-port", {NULL}, 3516, "udp"}, +{"802-11-iapp", {NULL}, 3517, "tcp"}, +{"802-11-iapp", {NULL}, 3517, "udp"}, +{"artifact-msg", {NULL}, 3518, "tcp"}, +{"artifact-msg", {NULL}, 3518, "udp"}, +{"nvmsgd", {NULL}, 3519, "tcp"}, +{"galileo", {NULL}, 3519, "udp"}, +{"galileolog", {NULL}, 3520, "tcp"}, +{"galileolog", {NULL}, 3520, "udp"}, +{"mc3ss", {NULL}, 3521, "tcp"}, +{"mc3ss", {NULL}, 3521, "udp"}, +{"nssocketport", {NULL}, 3522, "tcp"}, +{"nssocketport", {NULL}, 3522, "udp"}, +{"odeumservlink", {NULL}, 3523, "tcp"}, +{"odeumservlink", {NULL}, 3523, "udp"}, +{"ecmport", {NULL}, 3524, "tcp"}, +{"ecmport", {NULL}, 3524, "udp"}, +{"eisport", {NULL}, 3525, "tcp"}, +{"eisport", {NULL}, 3525, "udp"}, +{"starquiz-port", {NULL}, 3526, "tcp"}, +{"starquiz-port", {NULL}, 3526, "udp"}, +{"beserver-msg-q", {NULL}, 3527, "tcp"}, +{"beserver-msg-q", {NULL}, 3527, "udp"}, +{"jboss-iiop", {NULL}, 3528, "tcp"}, +{"jboss-iiop", {NULL}, 3528, "udp"}, +{"jboss-iiop-ssl", {NULL}, 3529, "tcp"}, +{"jboss-iiop-ssl", {NULL}, 3529, "udp"}, +{"gf", {NULL}, 3530, "tcp"}, +{"gf", {NULL}, 3530, "udp"}, +{"joltid", {NULL}, 3531, "tcp"}, +{"joltid", {NULL}, 3531, "udp"}, +{"raven-rmp", {NULL}, 3532, "tcp"}, +{"raven-rmp", {NULL}, 3532, "udp"}, +{"raven-rdp", {NULL}, 3533, "tcp"}, +{"raven-rdp", {NULL}, 3533, "udp"}, +{"urld-port", {NULL}, 3534, "tcp"}, +{"urld-port", {NULL}, 3534, "udp"}, +{"ms-la", {NULL}, 3535, "tcp"}, +{"ms-la", {NULL}, 3535, "udp"}, +{"snac", {NULL}, 3536, "tcp"}, +{"snac", {NULL}, 3536, "udp"}, +{"ni-visa-remote", {NULL}, 3537, "tcp"}, +{"ni-visa-remote", {NULL}, 3537, "udp"}, +{"ibm-diradm", {NULL}, 3538, "tcp"}, +{"ibm-diradm", {NULL}, 3538, "udp"}, +{"ibm-diradm-ssl", {NULL}, 3539, "tcp"}, +{"ibm-diradm-ssl", {NULL}, 3539, "udp"}, +{"pnrp-port", {NULL}, 3540, "tcp"}, +{"pnrp-port", {NULL}, 3540, "udp"}, +{"voispeed-port", {NULL}, 3541, "tcp"}, +{"voispeed-port", {NULL}, 3541, "udp"}, +{"hacl-monitor", {NULL}, 3542, "tcp"}, +{"hacl-monitor", {NULL}, 3542, "udp"}, +{"qftest-lookup", {NULL}, 3543, "tcp"}, +{"qftest-lookup", {NULL}, 3543, "udp"}, +{"teredo", {NULL}, 3544, "tcp"}, +{"teredo", {NULL}, 3544, "udp"}, +{"camac", {NULL}, 3545, "tcp"}, +{"camac", {NULL}, 3545, "udp"}, +{"symantec-sim", {NULL}, 3547, "tcp"}, +{"symantec-sim", {NULL}, 3547, "udp"}, +{"interworld", {NULL}, 3548, "tcp"}, +{"interworld", {NULL}, 3548, "udp"}, +{"tellumat-nms", {NULL}, 3549, "tcp"}, +{"tellumat-nms", {NULL}, 3549, "udp"}, +{"ssmpp", {NULL}, 3550, "tcp"}, +{"ssmpp", {NULL}, 3550, "udp"}, +{"apcupsd", {NULL}, 3551, "tcp"}, +{"apcupsd", {NULL}, 3551, "udp"}, +{"taserver", {NULL}, 3552, "tcp"}, +{"taserver", {NULL}, 3552, "udp"}, +{"rbr-discovery", {NULL}, 3553, "tcp"}, +{"rbr-discovery", {NULL}, 3553, "udp"}, +{"questnotify", {NULL}, 3554, "tcp"}, +{"questnotify", {NULL}, 3554, "udp"}, +{"razor", {NULL}, 3555, "tcp"}, +{"razor", {NULL}, 3555, "udp"}, +{"sky-transport", {NULL}, 3556, "tcp"}, +{"sky-transport", {NULL}, 3556, "udp"}, +{"personalos-001", {NULL}, 3557, "tcp"}, +{"personalos-001", {NULL}, 3557, "udp"}, +{"mcp-port", {NULL}, 3558, "tcp"}, +{"mcp-port", {NULL}, 3558, "udp"}, +{"cctv-port", {NULL}, 3559, "tcp"}, +{"cctv-port", {NULL}, 3559, "udp"}, +{"iniserve-port", {NULL}, 3560, "tcp"}, +{"iniserve-port", {NULL}, 3560, "udp"}, +{"bmc-onekey", {NULL}, 3561, "tcp"}, +{"bmc-onekey", {NULL}, 3561, "udp"}, +{"sdbproxy", {NULL}, 3562, "tcp"}, +{"sdbproxy", {NULL}, 3562, "udp"}, +{"watcomdebug", {NULL}, 3563, "tcp"}, +{"watcomdebug", {NULL}, 3563, "udp"}, +{"esimport", {NULL}, 3564, "tcp"}, +{"esimport", {NULL}, 3564, "udp"}, +{"m2pa", {NULL}, 3565, "tcp"}, +{"m2pa", {NULL}, 3565, "sctp"}, +{"quest-data-hub", {NULL}, 3566, "tcp"}, +{"oap", {NULL}, 3567, "tcp"}, +{"oap", {NULL}, 3567, "udp"}, +{"oap-s", {NULL}, 3568, "tcp"}, +{"oap-s", {NULL}, 3568, "udp"}, +{"mbg-ctrl", {NULL}, 3569, "tcp"}, +{"mbg-ctrl", {NULL}, 3569, "udp"}, +{"mccwebsvr-port", {NULL}, 3570, "tcp"}, +{"mccwebsvr-port", {NULL}, 3570, "udp"}, +{"megardsvr-port", {NULL}, 3571, "tcp"}, +{"megardsvr-port", {NULL}, 3571, "udp"}, +{"megaregsvrport", {NULL}, 3572, "tcp"}, +{"megaregsvrport", {NULL}, 3572, "udp"}, +{"tag-ups-1", {NULL}, 3573, "tcp"}, +{"tag-ups-1", {NULL}, 3573, "udp"}, +{"dmaf-server", {NULL}, 3574, "tcp"}, +{"dmaf-caster", {NULL}, 3574, "udp"}, +{"ccm-port", {NULL}, 3575, "tcp"}, +{"ccm-port", {NULL}, 3575, "udp"}, +{"cmc-port", {NULL}, 3576, "tcp"}, +{"cmc-port", {NULL}, 3576, "udp"}, +{"config-port", {NULL}, 3577, "tcp"}, +{"config-port", {NULL}, 3577, "udp"}, +{"data-port", {NULL}, 3578, "tcp"}, +{"data-port", {NULL}, 3578, "udp"}, +{"ttat3lb", {NULL}, 3579, "tcp"}, +{"ttat3lb", {NULL}, 3579, "udp"}, +{"nati-svrloc", {NULL}, 3580, "tcp"}, +{"nati-svrloc", {NULL}, 3580, "udp"}, +{"kfxaclicensing", {NULL}, 3581, "tcp"}, +{"kfxaclicensing", {NULL}, 3581, "udp"}, +{"press", {NULL}, 3582, "tcp"}, +{"press", {NULL}, 3582, "udp"}, +{"canex-watch", {NULL}, 3583, "tcp"}, +{"canex-watch", {NULL}, 3583, "udp"}, +{"u-dbap", {NULL}, 3584, "tcp"}, +{"u-dbap", {NULL}, 3584, "udp"}, +{"emprise-lls", {NULL}, 3585, "tcp"}, +{"emprise-lls", {NULL}, 3585, "udp"}, +{"emprise-lsc", {NULL}, 3586, "tcp"}, +{"emprise-lsc", {NULL}, 3586, "udp"}, +{"p2pgroup", {NULL}, 3587, "tcp"}, +{"p2pgroup", {NULL}, 3587, "udp"}, +{"sentinel", {NULL}, 3588, "tcp"}, +{"sentinel", {NULL}, 3588, "udp"}, +{"isomair", {NULL}, 3589, "tcp"}, +{"isomair", {NULL}, 3589, "udp"}, +{"wv-csp-sms", {NULL}, 3590, "tcp"}, +{"wv-csp-sms", {NULL}, 3590, "udp"}, +{"gtrack-server", {NULL}, 3591, "tcp"}, +{"gtrack-server", {NULL}, 3591, "udp"}, +{"gtrack-ne", {NULL}, 3592, "tcp"}, +{"gtrack-ne", {NULL}, 3592, "udp"}, +{"bpmd", {NULL}, 3593, "tcp"}, +{"bpmd", {NULL}, 3593, "udp"}, +{"mediaspace", {NULL}, 3594, "tcp"}, +{"mediaspace", {NULL}, 3594, "udp"}, +{"shareapp", {NULL}, 3595, "tcp"}, +{"shareapp", {NULL}, 3595, "udp"}, +{"iw-mmogame", {NULL}, 3596, "tcp"}, +{"iw-mmogame", {NULL}, 3596, "udp"}, +{"a14", {NULL}, 3597, "tcp"}, +{"a14", {NULL}, 3597, "udp"}, +{"a15", {NULL}, 3598, "tcp"}, +{"a15", {NULL}, 3598, "udp"}, +{"quasar-server", {NULL}, 3599, "tcp"}, +{"quasar-server", {NULL}, 3599, "udp"}, +{"trap-daemon", {NULL}, 3600, "tcp"}, +{"trap-daemon", {NULL}, 3600, "udp"}, +{"visinet-gui", {NULL}, 3601, "tcp"}, +{"visinet-gui", {NULL}, 3601, "udp"}, +{"infiniswitchcl", {NULL}, 3602, "tcp"}, +{"infiniswitchcl", {NULL}, 3602, "udp"}, +{"int-rcv-cntrl", {NULL}, 3603, "tcp"}, +{"int-rcv-cntrl", {NULL}, 3603, "udp"}, +{"bmc-jmx-port", {NULL}, 3604, "tcp"}, +{"bmc-jmx-port", {NULL}, 3604, "udp"}, +{"comcam-io", {NULL}, 3605, "tcp"}, +{"comcam-io", {NULL}, 3605, "udp"}, +{"splitlock", {NULL}, 3606, "tcp"}, +{"splitlock", {NULL}, 3606, "udp"}, +{"precise-i3", {NULL}, 3607, "tcp"}, +{"precise-i3", {NULL}, 3607, "udp"}, +{"trendchip-dcp", {NULL}, 3608, "tcp"}, +{"trendchip-dcp", {NULL}, 3608, "udp"}, +{"cpdi-pidas-cm", {NULL}, 3609, "tcp"}, +{"cpdi-pidas-cm", {NULL}, 3609, "udp"}, +{"echonet", {NULL}, 3610, "tcp"}, +{"echonet", {NULL}, 3610, "udp"}, +{"six-degrees", {NULL}, 3611, "tcp"}, +{"six-degrees", {NULL}, 3611, "udp"}, +{"hp-dataprotect", {NULL}, 3612, "tcp"}, +{"hp-dataprotect", {NULL}, 3612, "udp"}, +{"alaris-disc", {NULL}, 3613, "tcp"}, +{"alaris-disc", {NULL}, 3613, "udp"}, +{"sigma-port", {NULL}, 3614, "tcp"}, +{"sigma-port", {NULL}, 3614, "udp"}, +{"start-network", {NULL}, 3615, "tcp"}, +{"start-network", {NULL}, 3615, "udp"}, +{"cd3o-protocol", {NULL}, 3616, "tcp"}, +{"cd3o-protocol", {NULL}, 3616, "udp"}, +{"sharp-server", {NULL}, 3617, "tcp"}, +{"sharp-server", {NULL}, 3617, "udp"}, +{"aairnet-1", {NULL}, 3618, "tcp"}, +{"aairnet-1", {NULL}, 3618, "udp"}, +{"aairnet-2", {NULL}, 3619, "tcp"}, +{"aairnet-2", {NULL}, 3619, "udp"}, +{"ep-pcp", {NULL}, 3620, "tcp"}, +{"ep-pcp", {NULL}, 3620, "udp"}, +{"ep-nsp", {NULL}, 3621, "tcp"}, +{"ep-nsp", {NULL}, 3621, "udp"}, +{"ff-lr-port", {NULL}, 3622, "tcp"}, +{"ff-lr-port", {NULL}, 3622, "udp"}, +{"haipe-discover", {NULL}, 3623, "tcp"}, +{"haipe-discover", {NULL}, 3623, "udp"}, +{"dist-upgrade", {NULL}, 3624, "tcp"}, +{"dist-upgrade", {NULL}, 3624, "udp"}, +{"volley", {NULL}, 3625, "tcp"}, +{"volley", {NULL}, 3625, "udp"}, +{"bvcdaemon-port", {NULL}, 3626, "tcp"}, +{"bvcdaemon-port", {NULL}, 3626, "udp"}, +{"jamserverport", {NULL}, 3627, "tcp"}, +{"jamserverport", {NULL}, 3627, "udp"}, +{"ept-machine", {NULL}, 3628, "tcp"}, +{"ept-machine", {NULL}, 3628, "udp"}, +{"escvpnet", {NULL}, 3629, "tcp"}, +{"escvpnet", {NULL}, 3629, "udp"}, +{"cs-remote-db", {NULL}, 3630, "tcp"}, +{"cs-remote-db", {NULL}, 3630, "udp"}, +{"cs-services", {NULL}, 3631, "tcp"}, +{"cs-services", {NULL}, 3631, "udp"}, +{"distcc", {NULL}, 3632, "tcp"}, +{"distcc", {NULL}, 3632, "udp"}, +{"wacp", {NULL}, 3633, "tcp"}, +{"wacp", {NULL}, 3633, "udp"}, +{"hlibmgr", {NULL}, 3634, "tcp"}, +{"hlibmgr", {NULL}, 3634, "udp"}, +{"sdo", {NULL}, 3635, "tcp"}, +{"sdo", {NULL}, 3635, "udp"}, +{"servistaitsm", {NULL}, 3636, "tcp"}, +{"servistaitsm", {NULL}, 3636, "udp"}, +{"scservp", {NULL}, 3637, "tcp"}, +{"scservp", {NULL}, 3637, "udp"}, +{"ehp-backup", {NULL}, 3638, "tcp"}, +{"ehp-backup", {NULL}, 3638, "udp"}, +{"xap-ha", {NULL}, 3639, "tcp"}, +{"xap-ha", {NULL}, 3639, "udp"}, +{"netplay-port1", {NULL}, 3640, "tcp"}, +{"netplay-port1", {NULL}, 3640, "udp"}, +{"netplay-port2", {NULL}, 3641, "tcp"}, +{"netplay-port2", {NULL}, 3641, "udp"}, +{"juxml-port", {NULL}, 3642, "tcp"}, +{"juxml-port", {NULL}, 3642, "udp"}, +{"audiojuggler", {NULL}, 3643, "tcp"}, +{"audiojuggler", {NULL}, 3643, "udp"}, +{"ssowatch", {NULL}, 3644, "tcp"}, +{"ssowatch", {NULL}, 3644, "udp"}, +{"cyc", {NULL}, 3645, "tcp"}, +{"cyc", {NULL}, 3645, "udp"}, +{"xss-srv-port", {NULL}, 3646, "tcp"}, +{"xss-srv-port", {NULL}, 3646, "udp"}, +{"splitlock-gw", {NULL}, 3647, "tcp"}, +{"splitlock-gw", {NULL}, 3647, "udp"}, +{"fjcp", {NULL}, 3648, "tcp"}, +{"fjcp", {NULL}, 3648, "udp"}, +{"nmmp", {NULL}, 3649, "tcp"}, +{"nmmp", {NULL}, 3649, "udp"}, +{"prismiq-plugin", {NULL}, 3650, "tcp"}, +{"prismiq-plugin", {NULL}, 3650, "udp"}, +{"xrpc-registry", {NULL}, 3651, "tcp"}, +{"xrpc-registry", {NULL}, 3651, "udp"}, +{"vxcrnbuport", {NULL}, 3652, "tcp"}, +{"vxcrnbuport", {NULL}, 3652, "udp"}, +{"tsp", {NULL}, 3653, "tcp"}, +{"tsp", {NULL}, 3653, "udp"}, +{"vaprtm", {NULL}, 3654, "tcp"}, +{"vaprtm", {NULL}, 3654, "udp"}, +{"abatemgr", {NULL}, 3655, "tcp"}, +{"abatemgr", {NULL}, 3655, "udp"}, +{"abatjss", {NULL}, 3656, "tcp"}, +{"abatjss", {NULL}, 3656, "udp"}, +{"immedianet-bcn", {NULL}, 3657, "tcp"}, +{"immedianet-bcn", {NULL}, 3657, "udp"}, +{"ps-ams", {NULL}, 3658, "tcp"}, +{"ps-ams", {NULL}, 3658, "udp"}, +{"apple-sasl", {NULL}, 3659, "tcp"}, +{"apple-sasl", {NULL}, 3659, "udp"}, +{"can-nds-ssl", {NULL}, 3660, "tcp"}, +{"can-nds-ssl", {NULL}, 3660, "udp"}, +{"can-ferret-ssl", {NULL}, 3661, "tcp"}, +{"can-ferret-ssl", {NULL}, 3661, "udp"}, +{"pserver", {NULL}, 3662, "tcp"}, +{"pserver", {NULL}, 3662, "udp"}, +{"dtp", {NULL}, 3663, "tcp"}, +{"dtp", {NULL}, 3663, "udp"}, +{"ups-engine", {NULL}, 3664, "tcp"}, +{"ups-engine", {NULL}, 3664, "udp"}, +{"ent-engine", {NULL}, 3665, "tcp"}, +{"ent-engine", {NULL}, 3665, "udp"}, +{"eserver-pap", {NULL}, 3666, "tcp"}, +{"eserver-pap", {NULL}, 3666, "udp"}, +{"infoexch", {NULL}, 3667, "tcp"}, +{"infoexch", {NULL}, 3667, "udp"}, +{"dell-rm-port", {NULL}, 3668, "tcp"}, +{"dell-rm-port", {NULL}, 3668, "udp"}, +{"casanswmgmt", {NULL}, 3669, "tcp"}, +{"casanswmgmt", {NULL}, 3669, "udp"}, +{"smile", {NULL}, 3670, "tcp"}, +{"smile", {NULL}, 3670, "udp"}, +{"efcp", {NULL}, 3671, "tcp"}, +{"efcp", {NULL}, 3671, "udp"}, +{"lispworks-orb", {NULL}, 3672, "tcp"}, +{"lispworks-orb", {NULL}, 3672, "udp"}, +{"mediavault-gui", {NULL}, 3673, "tcp"}, +{"mediavault-gui", {NULL}, 3673, "udp"}, +{"wininstall-ipc", {NULL}, 3674, "tcp"}, +{"wininstall-ipc", {NULL}, 3674, "udp"}, +{"calltrax", {NULL}, 3675, "tcp"}, +{"calltrax", {NULL}, 3675, "udp"}, +{"va-pacbase", {NULL}, 3676, "tcp"}, +{"va-pacbase", {NULL}, 3676, "udp"}, +{"roverlog", {NULL}, 3677, "tcp"}, +{"roverlog", {NULL}, 3677, "udp"}, +{"ipr-dglt", {NULL}, 3678, "tcp"}, +{"ipr-dglt", {NULL}, 3678, "udp"}, +{"newton-dock", {NULL}, 3679, "tcp"}, +{"newton-dock", {NULL}, 3679, "udp"}, +{"npds-tracker", {NULL}, 3680, "tcp"}, +{"npds-tracker", {NULL}, 3680, "udp"}, +{"bts-x73", {NULL}, 3681, "tcp"}, +{"bts-x73", {NULL}, 3681, "udp"}, +{"cas-mapi", {NULL}, 3682, "tcp"}, +{"cas-mapi", {NULL}, 3682, "udp"}, +{"bmc-ea", {NULL}, 3683, "tcp"}, +{"bmc-ea", {NULL}, 3683, "udp"}, +{"faxstfx-port", {NULL}, 3684, "tcp"}, +{"faxstfx-port", {NULL}, 3684, "udp"}, +{"dsx-agent", {NULL}, 3685, "tcp"}, +{"dsx-agent", {NULL}, 3685, "udp"}, +{"tnmpv2", {NULL}, 3686, "tcp"}, +{"tnmpv2", {NULL}, 3686, "udp"}, +{"simple-push", {NULL}, 3687, "tcp"}, +{"simple-push", {NULL}, 3687, "udp"}, +{"simple-push-s", {NULL}, 3688, "tcp"}, +{"simple-push-s", {NULL}, 3688, "udp"}, +{"daap", {NULL}, 3689, "tcp"}, +{"daap", {NULL}, 3689, "udp"}, +{"svn", {NULL}, 3690, "tcp"}, +{"svn", {NULL}, 3690, "udp"}, +{"magaya-network", {NULL}, 3691, "tcp"}, +{"magaya-network", {NULL}, 3691, "udp"}, +{"intelsync", {NULL}, 3692, "tcp"}, +{"intelsync", {NULL}, 3692, "udp"}, +{"bmc-data-coll", {NULL}, 3695, "tcp"}, +{"bmc-data-coll", {NULL}, 3695, "udp"}, +{"telnetcpcd", {NULL}, 3696, "tcp"}, +{"telnetcpcd", {NULL}, 3696, "udp"}, +{"nw-license", {NULL}, 3697, "tcp"}, +{"nw-license", {NULL}, 3697, "udp"}, +{"sagectlpanel", {NULL}, 3698, "tcp"}, +{"sagectlpanel", {NULL}, 3698, "udp"}, +{"kpn-icw", {NULL}, 3699, "tcp"}, +{"kpn-icw", {NULL}, 3699, "udp"}, +{"lrs-paging", {NULL}, 3700, "tcp"}, +{"lrs-paging", {NULL}, 3700, "udp"}, +{"netcelera", {NULL}, 3701, "tcp"}, +{"netcelera", {NULL}, 3701, "udp"}, +{"ws-discovery", {NULL}, 3702, "tcp"}, +{"ws-discovery", {NULL}, 3702, "udp"}, +{"adobeserver-3", {NULL}, 3703, "tcp"}, +{"adobeserver-3", {NULL}, 3703, "udp"}, +{"adobeserver-4", {NULL}, 3704, "tcp"}, +{"adobeserver-4", {NULL}, 3704, "udp"}, +{"adobeserver-5", {NULL}, 3705, "tcp"}, +{"adobeserver-5", {NULL}, 3705, "udp"}, +{"rt-event", {NULL}, 3706, "tcp"}, +{"rt-event", {NULL}, 3706, "udp"}, +{"rt-event-s", {NULL}, 3707, "tcp"}, +{"rt-event-s", {NULL}, 3707, "udp"}, +{"sun-as-iiops", {NULL}, 3708, "tcp"}, +{"sun-as-iiops", {NULL}, 3708, "udp"}, +{"ca-idms", {NULL}, 3709, "tcp"}, +{"ca-idms", {NULL}, 3709, "udp"}, +{"portgate-auth", {NULL}, 3710, "tcp"}, +{"portgate-auth", {NULL}, 3710, "udp"}, +{"edb-server2", {NULL}, 3711, "tcp"}, +{"edb-server2", {NULL}, 3711, "udp"}, +{"sentinel-ent", {NULL}, 3712, "tcp"}, +{"sentinel-ent", {NULL}, 3712, "udp"}, +{"tftps", {NULL}, 3713, "tcp"}, +{"tftps", {NULL}, 3713, "udp"}, +{"delos-dms", {NULL}, 3714, "tcp"}, +{"delos-dms", {NULL}, 3714, "udp"}, +{"anoto-rendezv", {NULL}, 3715, "tcp"}, +{"anoto-rendezv", {NULL}, 3715, "udp"}, +{"wv-csp-sms-cir", {NULL}, 3716, "tcp"}, +{"wv-csp-sms-cir", {NULL}, 3716, "udp"}, +{"wv-csp-udp-cir", {NULL}, 3717, "tcp"}, +{"wv-csp-udp-cir", {NULL}, 3717, "udp"}, +{"opus-services", {NULL}, 3718, "tcp"}, +{"opus-services", {NULL}, 3718, "udp"}, +{"itelserverport", {NULL}, 3719, "tcp"}, +{"itelserverport", {NULL}, 3719, "udp"}, +{"ufastro-instr", {NULL}, 3720, "tcp"}, +{"ufastro-instr", {NULL}, 3720, "udp"}, +{"xsync", {NULL}, 3721, "tcp"}, +{"xsync", {NULL}, 3721, "udp"}, +{"xserveraid", {NULL}, 3722, "tcp"}, +{"xserveraid", {NULL}, 3722, "udp"}, +{"sychrond", {NULL}, 3723, "tcp"}, +{"sychrond", {NULL}, 3723, "udp"}, +{"blizwow", {NULL}, 3724, "tcp"}, +{"blizwow", {NULL}, 3724, "udp"}, +{"na-er-tip", {NULL}, 3725, "tcp"}, +{"na-er-tip", {NULL}, 3725, "udp"}, +{"array-manager", {NULL}, 3726, "tcp"}, +{"array-manager", {NULL}, 3726, "udp"}, +{"e-mdu", {NULL}, 3727, "tcp"}, +{"e-mdu", {NULL}, 3727, "udp"}, +{"e-woa", {NULL}, 3728, "tcp"}, +{"e-woa", {NULL}, 3728, "udp"}, +{"fksp-audit", {NULL}, 3729, "tcp"}, +{"fksp-audit", {NULL}, 3729, "udp"}, +{"client-ctrl", {NULL}, 3730, "tcp"}, +{"client-ctrl", {NULL}, 3730, "udp"}, +{"smap", {NULL}, 3731, "tcp"}, +{"smap", {NULL}, 3731, "udp"}, +{"m-wnn", {NULL}, 3732, "tcp"}, +{"m-wnn", {NULL}, 3732, "udp"}, +{"multip-msg", {NULL}, 3733, "tcp"}, +{"multip-msg", {NULL}, 3733, "udp"}, +{"synel-data", {NULL}, 3734, "tcp"}, +{"synel-data", {NULL}, 3734, "udp"}, +{"pwdis", {NULL}, 3735, "tcp"}, +{"pwdis", {NULL}, 3735, "udp"}, +{"rs-rmi", {NULL}, 3736, "tcp"}, +{"rs-rmi", {NULL}, 3736, "udp"}, +{"xpanel", {NULL}, 3737, "tcp"}, +{"versatalk", {NULL}, 3738, "tcp"}, +{"versatalk", {NULL}, 3738, "udp"}, +{"launchbird-lm", {NULL}, 3739, "tcp"}, +{"launchbird-lm", {NULL}, 3739, "udp"}, +{"heartbeat", {NULL}, 3740, "tcp"}, +{"heartbeat", {NULL}, 3740, "udp"}, +{"wysdma", {NULL}, 3741, "tcp"}, +{"wysdma", {NULL}, 3741, "udp"}, +{"cst-port", {NULL}, 3742, "tcp"}, +{"cst-port", {NULL}, 3742, "udp"}, +{"ipcs-command", {NULL}, 3743, "tcp"}, +{"ipcs-command", {NULL}, 3743, "udp"}, +{"sasg", {NULL}, 3744, "tcp"}, +{"sasg", {NULL}, 3744, "udp"}, +{"gw-call-port", {NULL}, 3745, "tcp"}, +{"gw-call-port", {NULL}, 3745, "udp"}, +{"linktest", {NULL}, 3746, "tcp"}, +{"linktest", {NULL}, 3746, "udp"}, +{"linktest-s", {NULL}, 3747, "tcp"}, +{"linktest-s", {NULL}, 3747, "udp"}, +{"webdata", {NULL}, 3748, "tcp"}, +{"webdata", {NULL}, 3748, "udp"}, +{"cimtrak", {NULL}, 3749, "tcp"}, +{"cimtrak", {NULL}, 3749, "udp"}, +{"cbos-ip-port", {NULL}, 3750, "tcp"}, +{"cbos-ip-port", {NULL}, 3750, "udp"}, +{"gprs-cube", {NULL}, 3751, "tcp"}, +{"gprs-cube", {NULL}, 3751, "udp"}, +{"vipremoteagent", {NULL}, 3752, "tcp"}, +{"vipremoteagent", {NULL}, 3752, "udp"}, +{"nattyserver", {NULL}, 3753, "tcp"}, +{"nattyserver", {NULL}, 3753, "udp"}, +{"timestenbroker", {NULL}, 3754, "tcp"}, +{"timestenbroker", {NULL}, 3754, "udp"}, +{"sas-remote-hlp", {NULL}, 3755, "tcp"}, +{"sas-remote-hlp", {NULL}, 3755, "udp"}, +{"canon-capt", {NULL}, 3756, "tcp"}, +{"canon-capt", {NULL}, 3756, "udp"}, +{"grf-port", {NULL}, 3757, "tcp"}, +{"grf-port", {NULL}, 3757, "udp"}, +{"apw-registry", {NULL}, 3758, "tcp"}, +{"apw-registry", {NULL}, 3758, "udp"}, +{"exapt-lmgr", {NULL}, 3759, "tcp"}, +{"exapt-lmgr", {NULL}, 3759, "udp"}, +{"adtempusclient", {NULL}, 3760, "tcp"}, +{"adtempusclient", {NULL}, 3760, "udp"}, +{"gsakmp", {NULL}, 3761, "tcp"}, +{"gsakmp", {NULL}, 3761, "udp"}, +{"gbs-smp", {NULL}, 3762, "tcp"}, +{"gbs-smp", {NULL}, 3762, "udp"}, +{"xo-wave", {NULL}, 3763, "tcp"}, +{"xo-wave", {NULL}, 3763, "udp"}, +{"mni-prot-rout", {NULL}, 3764, "tcp"}, +{"mni-prot-rout", {NULL}, 3764, "udp"}, +{"rtraceroute", {NULL}, 3765, "tcp"}, +{"rtraceroute", {NULL}, 3765, "udp"}, +{"listmgr-port", {NULL}, 3767, "tcp"}, +{"listmgr-port", {NULL}, 3767, "udp"}, +{"rblcheckd", {NULL}, 3768, "tcp"}, +{"rblcheckd", {NULL}, 3768, "udp"}, +{"haipe-otnk", {NULL}, 3769, "tcp"}, +{"haipe-otnk", {NULL}, 3769, "udp"}, +{"cindycollab", {NULL}, 3770, "tcp"}, +{"cindycollab", {NULL}, 3770, "udp"}, +{"paging-port", {NULL}, 3771, "tcp"}, +{"paging-port", {NULL}, 3771, "udp"}, +{"ctp", {NULL}, 3772, "tcp"}, +{"ctp", {NULL}, 3772, "udp"}, +{"ctdhercules", {NULL}, 3773, "tcp"}, +{"ctdhercules", {NULL}, 3773, "udp"}, +{"zicom", {NULL}, 3774, "tcp"}, +{"zicom", {NULL}, 3774, "udp"}, +{"ispmmgr", {NULL}, 3775, "tcp"}, +{"ispmmgr", {NULL}, 3775, "udp"}, +{"dvcprov-port", {NULL}, 3776, "tcp"}, +{"dvcprov-port", {NULL}, 3776, "udp"}, +{"jibe-eb", {NULL}, 3777, "tcp"}, +{"jibe-eb", {NULL}, 3777, "udp"}, +{"c-h-it-port", {NULL}, 3778, "tcp"}, +{"c-h-it-port", {NULL}, 3778, "udp"}, +{"cognima", {NULL}, 3779, "tcp"}, +{"cognima", {NULL}, 3779, "udp"}, +{"nnp", {NULL}, 3780, "tcp"}, +{"nnp", {NULL}, 3780, "udp"}, +{"abcvoice-port", {NULL}, 3781, "tcp"}, +{"abcvoice-port", {NULL}, 3781, "udp"}, +{"iso-tp0s", {NULL}, 3782, "tcp"}, +{"iso-tp0s", {NULL}, 3782, "udp"}, +{"bim-pem", {NULL}, 3783, "tcp"}, +{"bim-pem", {NULL}, 3783, "udp"}, +{"bfd-control", {NULL}, 3784, "tcp"}, +{"bfd-control", {NULL}, 3784, "udp"}, +{"bfd-echo", {NULL}, 3785, "tcp"}, +{"bfd-echo", {NULL}, 3785, "udp"}, +{"upstriggervsw", {NULL}, 3786, "tcp"}, +{"upstriggervsw", {NULL}, 3786, "udp"}, +{"fintrx", {NULL}, 3787, "tcp"}, +{"fintrx", {NULL}, 3787, "udp"}, +{"isrp-port", {NULL}, 3788, "tcp"}, +{"isrp-port", {NULL}, 3788, "udp"}, +{"remotedeploy", {NULL}, 3789, "tcp"}, +{"remotedeploy", {NULL}, 3789, "udp"}, +{"quickbooksrds", {NULL}, 3790, "tcp"}, +{"quickbooksrds", {NULL}, 3790, "udp"}, +{"tvnetworkvideo", {NULL}, 3791, "tcp"}, +{"tvnetworkvideo", {NULL}, 3791, "udp"}, +{"sitewatch", {NULL}, 3792, "tcp"}, +{"sitewatch", {NULL}, 3792, "udp"}, +{"dcsoftware", {NULL}, 3793, "tcp"}, +{"dcsoftware", {NULL}, 3793, "udp"}, +{"jaus", {NULL}, 3794, "tcp"}, +{"jaus", {NULL}, 3794, "udp"}, +{"myblast", {NULL}, 3795, "tcp"}, +{"myblast", {NULL}, 3795, "udp"}, +{"spw-dialer", {NULL}, 3796, "tcp"}, +{"spw-dialer", {NULL}, 3796, "udp"}, +{"idps", {NULL}, 3797, "tcp"}, +{"idps", {NULL}, 3797, "udp"}, +{"minilock", {NULL}, 3798, "tcp"}, +{"minilock", {NULL}, 3798, "udp"}, +{"radius-dynauth", {NULL}, 3799, "tcp"}, +{"radius-dynauth", {NULL}, 3799, "udp"}, +{"pwgpsi", {NULL}, 3800, "tcp"}, +{"pwgpsi", {NULL}, 3800, "udp"}, +{"ibm-mgr", {NULL}, 3801, "tcp"}, +{"ibm-mgr", {NULL}, 3801, "udp"}, +{"vhd", {NULL}, 3802, "tcp"}, +{"vhd", {NULL}, 3802, "udp"}, +{"soniqsync", {NULL}, 3803, "tcp"}, +{"soniqsync", {NULL}, 3803, "udp"}, +{"iqnet-port", {NULL}, 3804, "tcp"}, +{"iqnet-port", {NULL}, 3804, "udp"}, +{"tcpdataserver", {NULL}, 3805, "tcp"}, +{"tcpdataserver", {NULL}, 3805, "udp"}, +{"wsmlb", {NULL}, 3806, "tcp"}, +{"wsmlb", {NULL}, 3806, "udp"}, +{"spugna", {NULL}, 3807, "tcp"}, +{"spugna", {NULL}, 3807, "udp"}, +{"sun-as-iiops-ca", {NULL}, 3808, "tcp"}, +{"sun-as-iiops-ca", {NULL}, 3808, "udp"}, +{"apocd", {NULL}, 3809, "tcp"}, +{"apocd", {NULL}, 3809, "udp"}, +{"wlanauth", {NULL}, 3810, "tcp"}, +{"wlanauth", {NULL}, 3810, "udp"}, +{"amp", {NULL}, 3811, "tcp"}, +{"amp", {NULL}, 3811, "udp"}, +{"neto-wol-server", {NULL}, 3812, "tcp"}, +{"neto-wol-server", {NULL}, 3812, "udp"}, +{"rap-ip", {NULL}, 3813, "tcp"}, +{"rap-ip", {NULL}, 3813, "udp"}, +{"neto-dcs", {NULL}, 3814, "tcp"}, +{"neto-dcs", {NULL}, 3814, "udp"}, +{"lansurveyorxml", {NULL}, 3815, "tcp"}, +{"lansurveyorxml", {NULL}, 3815, "udp"}, +{"sunlps-http", {NULL}, 3816, "tcp"}, +{"sunlps-http", {NULL}, 3816, "udp"}, +{"tapeware", {NULL}, 3817, "tcp"}, +{"tapeware", {NULL}, 3817, "udp"}, +{"crinis-hb", {NULL}, 3818, "tcp"}, +{"crinis-hb", {NULL}, 3818, "udp"}, +{"epl-slp", {NULL}, 3819, "tcp"}, +{"epl-slp", {NULL}, 3819, "udp"}, +{"scp", {NULL}, 3820, "tcp"}, +{"scp", {NULL}, 3820, "udp"}, +{"pmcp", {NULL}, 3821, "tcp"}, +{"pmcp", {NULL}, 3821, "udp"}, +{"acp-discovery", {NULL}, 3822, "tcp"}, +{"acp-discovery", {NULL}, 3822, "udp"}, +{"acp-conduit", {NULL}, 3823, "tcp"}, +{"acp-conduit", {NULL}, 3823, "udp"}, +{"acp-policy", {NULL}, 3824, "tcp"}, +{"acp-policy", {NULL}, 3824, "udp"}, +{"ffserver", {NULL}, 3825, "tcp"}, +{"ffserver", {NULL}, 3825, "udp"}, +{"wormux", {NULL}, 3826, "tcp"}, +{"wormux", {NULL}, 3826, "udp"}, +{"netmpi", {NULL}, 3827, "tcp"}, +{"netmpi", {NULL}, 3827, "udp"}, +{"neteh", {NULL}, 3828, "tcp"}, +{"neteh", {NULL}, 3828, "udp"}, +{"neteh-ext", {NULL}, 3829, "tcp"}, +{"neteh-ext", {NULL}, 3829, "udp"}, +{"cernsysmgmtagt", {NULL}, 3830, "tcp"}, +{"cernsysmgmtagt", {NULL}, 3830, "udp"}, +{"dvapps", {NULL}, 3831, "tcp"}, +{"dvapps", {NULL}, 3831, "udp"}, +{"xxnetserver", {NULL}, 3832, "tcp"}, +{"xxnetserver", {NULL}, 3832, "udp"}, +{"aipn-auth", {NULL}, 3833, "tcp"}, +{"aipn-auth", {NULL}, 3833, "udp"}, +{"spectardata", {NULL}, 3834, "tcp"}, +{"spectardata", {NULL}, 3834, "udp"}, +{"spectardb", {NULL}, 3835, "tcp"}, +{"spectardb", {NULL}, 3835, "udp"}, +{"markem-dcp", {NULL}, 3836, "tcp"}, +{"markem-dcp", {NULL}, 3836, "udp"}, +{"mkm-discovery", {NULL}, 3837, "tcp"}, +{"mkm-discovery", {NULL}, 3837, "udp"}, +{"sos", {NULL}, 3838, "tcp"}, +{"sos", {NULL}, 3838, "udp"}, +{"amx-rms", {NULL}, 3839, "tcp"}, +{"amx-rms", {NULL}, 3839, "udp"}, +{"flirtmitmir", {NULL}, 3840, "tcp"}, +{"flirtmitmir", {NULL}, 3840, "udp"}, +{"zfirm-shiprush3", {NULL}, 3841, "tcp"}, +{"zfirm-shiprush3", {NULL}, 3841, "udp"}, +{"nhci", {NULL}, 3842, "tcp"}, +{"nhci", {NULL}, 3842, "udp"}, +{"quest-agent", {NULL}, 3843, "tcp"}, +{"quest-agent", {NULL}, 3843, "udp"}, +{"rnm", {NULL}, 3844, "tcp"}, +{"rnm", {NULL}, 3844, "udp"}, +{"v-one-spp", {NULL}, 3845, "tcp"}, +{"v-one-spp", {NULL}, 3845, "udp"}, +{"an-pcp", {NULL}, 3846, "tcp"}, +{"an-pcp", {NULL}, 3846, "udp"}, +{"msfw-control", {NULL}, 3847, "tcp"}, +{"msfw-control", {NULL}, 3847, "udp"}, +{"item", {NULL}, 3848, "tcp"}, +{"item", {NULL}, 3848, "udp"}, +{"spw-dnspreload", {NULL}, 3849, "tcp"}, +{"spw-dnspreload", {NULL}, 3849, "udp"}, +{"qtms-bootstrap", {NULL}, 3850, "tcp"}, +{"qtms-bootstrap", {NULL}, 3850, "udp"}, +{"spectraport", {NULL}, 3851, "tcp"}, +{"spectraport", {NULL}, 3851, "udp"}, +{"sse-app-config", {NULL}, 3852, "tcp"}, +{"sse-app-config", {NULL}, 3852, "udp"}, +{"sscan", {NULL}, 3853, "tcp"}, +{"sscan", {NULL}, 3853, "udp"}, +{"stryker-com", {NULL}, 3854, "tcp"}, +{"stryker-com", {NULL}, 3854, "udp"}, +{"opentrac", {NULL}, 3855, "tcp"}, +{"opentrac", {NULL}, 3855, "udp"}, +{"informer", {NULL}, 3856, "tcp"}, +{"informer", {NULL}, 3856, "udp"}, +{"trap-port", {NULL}, 3857, "tcp"}, +{"trap-port", {NULL}, 3857, "udp"}, +{"trap-port-mom", {NULL}, 3858, "tcp"}, +{"trap-port-mom", {NULL}, 3858, "udp"}, +{"nav-port", {NULL}, 3859, "tcp"}, +{"nav-port", {NULL}, 3859, "udp"}, +{"sasp", {NULL}, 3860, "tcp"}, +{"sasp", {NULL}, 3860, "udp"}, +{"winshadow-hd", {NULL}, 3861, "tcp"}, +{"winshadow-hd", {NULL}, 3861, "udp"}, +{"giga-pocket", {NULL}, 3862, "tcp"}, +{"giga-pocket", {NULL}, 3862, "udp"}, +{"asap-tcp", {NULL}, 3863, "tcp"}, +{"asap-udp", {NULL}, 3863, "udp"}, +{"asap-sctp", {NULL}, 3863, "sctp"}, +{"asap-tcp-tls", {NULL}, 3864, "tcp"}, +{"asap-sctp-tls", {NULL}, 3864, "sctp"}, +{"xpl", {NULL}, 3865, "tcp"}, +{"xpl", {NULL}, 3865, "udp"}, +{"dzdaemon", {NULL}, 3866, "tcp"}, +{"dzdaemon", {NULL}, 3866, "udp"}, +{"dzoglserver", {NULL}, 3867, "tcp"}, +{"dzoglserver", {NULL}, 3867, "udp"}, +{"diameter", {NULL}, 3868, "tcp"}, +{"diameter", {NULL}, 3868, "sctp"}, +{"ovsam-mgmt", {NULL}, 3869, "tcp"}, +{"ovsam-mgmt", {NULL}, 3869, "udp"}, +{"ovsam-d-agent", {NULL}, 3870, "tcp"}, +{"ovsam-d-agent", {NULL}, 3870, "udp"}, +{"avocent-adsap", {NULL}, 3871, "tcp"}, +{"avocent-adsap", {NULL}, 3871, "udp"}, +{"oem-agent", {NULL}, 3872, "tcp"}, +{"oem-agent", {NULL}, 3872, "udp"}, +{"fagordnc", {NULL}, 3873, "tcp"}, +{"fagordnc", {NULL}, 3873, "udp"}, +{"sixxsconfig", {NULL}, 3874, "tcp"}, +{"sixxsconfig", {NULL}, 3874, "udp"}, +{"pnbscada", {NULL}, 3875, "tcp"}, +{"pnbscada", {NULL}, 3875, "udp"}, +{"dl_agent", {NULL}, 3876, "tcp"}, +{"dl_agent", {NULL}, 3876, "udp"}, +{"xmpcr-interface", {NULL}, 3877, "tcp"}, +{"xmpcr-interface", {NULL}, 3877, "udp"}, +{"fotogcad", {NULL}, 3878, "tcp"}, +{"fotogcad", {NULL}, 3878, "udp"}, +{"appss-lm", {NULL}, 3879, "tcp"}, +{"appss-lm", {NULL}, 3879, "udp"}, +{"igrs", {NULL}, 3880, "tcp"}, +{"igrs", {NULL}, 3880, "udp"}, +{"idac", {NULL}, 3881, "tcp"}, +{"idac", {NULL}, 3881, "udp"}, +{"msdts1", {NULL}, 3882, "tcp"}, +{"msdts1", {NULL}, 3882, "udp"}, +{"vrpn", {NULL}, 3883, "tcp"}, +{"vrpn", {NULL}, 3883, "udp"}, +{"softrack-meter", {NULL}, 3884, "tcp"}, +{"softrack-meter", {NULL}, 3884, "udp"}, +{"topflow-ssl", {NULL}, 3885, "tcp"}, +{"topflow-ssl", {NULL}, 3885, "udp"}, +{"nei-management", {NULL}, 3886, "tcp"}, +{"nei-management", {NULL}, 3886, "udp"}, +{"ciphire-data", {NULL}, 3887, "tcp"}, +{"ciphire-data", {NULL}, 3887, "udp"}, +{"ciphire-serv", {NULL}, 3888, "tcp"}, +{"ciphire-serv", {NULL}, 3888, "udp"}, +{"dandv-tester", {NULL}, 3889, "tcp"}, +{"dandv-tester", {NULL}, 3889, "udp"}, +{"ndsconnect", {NULL}, 3890, "tcp"}, +{"ndsconnect", {NULL}, 3890, "udp"}, +{"rtc-pm-port", {NULL}, 3891, "tcp"}, +{"rtc-pm-port", {NULL}, 3891, "udp"}, +{"pcc-image-port", {NULL}, 3892, "tcp"}, +{"pcc-image-port", {NULL}, 3892, "udp"}, +{"cgi-starapi", {NULL}, 3893, "tcp"}, +{"cgi-starapi", {NULL}, 3893, "udp"}, +{"syam-agent", {NULL}, 3894, "tcp"}, +{"syam-agent", {NULL}, 3894, "udp"}, +{"syam-smc", {NULL}, 3895, "tcp"}, +{"syam-smc", {NULL}, 3895, "udp"}, +{"sdo-tls", {NULL}, 3896, "tcp"}, +{"sdo-tls", {NULL}, 3896, "udp"}, +{"sdo-ssh", {NULL}, 3897, "tcp"}, +{"sdo-ssh", {NULL}, 3897, "udp"}, +{"senip", {NULL}, 3898, "tcp"}, +{"senip", {NULL}, 3898, "udp"}, +{"itv-control", {NULL}, 3899, "tcp"}, +{"itv-control", {NULL}, 3899, "udp"}, +{"udt_os", {NULL}, 3900, "tcp"}, +{"udt_os", {NULL}, 3900, "udp"}, +{"nimsh", {NULL}, 3901, "tcp"}, +{"nimsh", {NULL}, 3901, "udp"}, +{"nimaux", {NULL}, 3902, "tcp"}, +{"nimaux", {NULL}, 3902, "udp"}, +{"charsetmgr", {NULL}, 3903, "tcp"}, +{"charsetmgr", {NULL}, 3903, "udp"}, +{"omnilink-port", {NULL}, 3904, "tcp"}, +{"omnilink-port", {NULL}, 3904, "udp"}, +{"mupdate", {NULL}, 3905, "tcp"}, +{"mupdate", {NULL}, 3905, "udp"}, +{"topovista-data", {NULL}, 3906, "tcp"}, +{"topovista-data", {NULL}, 3906, "udp"}, +{"imoguia-port", {NULL}, 3907, "tcp"}, +{"imoguia-port", {NULL}, 3907, "udp"}, +{"hppronetman", {NULL}, 3908, "tcp"}, +{"hppronetman", {NULL}, 3908, "udp"}, +{"surfcontrolcpa", {NULL}, 3909, "tcp"}, +{"surfcontrolcpa", {NULL}, 3909, "udp"}, +{"prnrequest", {NULL}, 3910, "tcp"}, +{"prnrequest", {NULL}, 3910, "udp"}, +{"prnstatus", {NULL}, 3911, "tcp"}, +{"prnstatus", {NULL}, 3911, "udp"}, +{"gbmt-stars", {NULL}, 3912, "tcp"}, +{"gbmt-stars", {NULL}, 3912, "udp"}, +{"listcrt-port", {NULL}, 3913, "tcp"}, +{"listcrt-port", {NULL}, 3913, "udp"}, +{"listcrt-port-2", {NULL}, 3914, "tcp"}, +{"listcrt-port-2", {NULL}, 3914, "udp"}, +{"agcat", {NULL}, 3915, "tcp"}, +{"agcat", {NULL}, 3915, "udp"}, +{"wysdmc", {NULL}, 3916, "tcp"}, +{"wysdmc", {NULL}, 3916, "udp"}, +{"aftmux", {NULL}, 3917, "tcp"}, +{"aftmux", {NULL}, 3917, "udp"}, +{"pktcablemmcops", {NULL}, 3918, "tcp"}, +{"pktcablemmcops", {NULL}, 3918, "udp"}, +{"hyperip", {NULL}, 3919, "tcp"}, +{"hyperip", {NULL}, 3919, "udp"}, +{"exasoftport1", {NULL}, 3920, "tcp"}, +{"exasoftport1", {NULL}, 3920, "udp"}, +{"herodotus-net", {NULL}, 3921, "tcp"}, +{"herodotus-net", {NULL}, 3921, "udp"}, +{"sor-update", {NULL}, 3922, "tcp"}, +{"sor-update", {NULL}, 3922, "udp"}, +{"symb-sb-port", {NULL}, 3923, "tcp"}, +{"symb-sb-port", {NULL}, 3923, "udp"}, +{"mpl-gprs-port", {NULL}, 3924, "tcp"}, +{"mpl-gprs-port", {NULL}, 3924, "udp"}, +{"zmp", {NULL}, 3925, "tcp"}, +{"zmp", {NULL}, 3925, "udp"}, +{"winport", {NULL}, 3926, "tcp"}, +{"winport", {NULL}, 3926, "udp"}, +{"natdataservice", {NULL}, 3927, "tcp"}, +{"natdataservice", {NULL}, 3927, "udp"}, +{"netboot-pxe", {NULL}, 3928, "tcp"}, +{"netboot-pxe", {NULL}, 3928, "udp"}, +{"smauth-port", {NULL}, 3929, "tcp"}, +{"smauth-port", {NULL}, 3929, "udp"}, +{"syam-webserver", {NULL}, 3930, "tcp"}, +{"syam-webserver", {NULL}, 3930, "udp"}, +{"msr-plugin-port", {NULL}, 3931, "tcp"}, +{"msr-plugin-port", {NULL}, 3931, "udp"}, +{"dyn-site", {NULL}, 3932, "tcp"}, +{"dyn-site", {NULL}, 3932, "udp"}, +{"plbserve-port", {NULL}, 3933, "tcp"}, +{"plbserve-port", {NULL}, 3933, "udp"}, +{"sunfm-port", {NULL}, 3934, "tcp"}, +{"sunfm-port", {NULL}, 3934, "udp"}, +{"sdp-portmapper", {NULL}, 3935, "tcp"}, +{"sdp-portmapper", {NULL}, 3935, "udp"}, +{"mailprox", {NULL}, 3936, "tcp"}, +{"mailprox", {NULL}, 3936, "udp"}, +{"dvbservdsc", {NULL}, 3937, "tcp"}, +{"dvbservdsc", {NULL}, 3937, "udp"}, +{"dbcontrol_agent", {NULL}, 3938, "tcp"}, +{"dbcontrol_agent", {NULL}, 3938, "udp"}, +{"aamp", {NULL}, 3939, "tcp"}, +{"aamp", {NULL}, 3939, "udp"}, +{"xecp-node", {NULL}, 3940, "tcp"}, +{"xecp-node", {NULL}, 3940, "udp"}, +{"homeportal-web", {NULL}, 3941, "tcp"}, +{"homeportal-web", {NULL}, 3941, "udp"}, +{"srdp", {NULL}, 3942, "tcp"}, +{"srdp", {NULL}, 3942, "udp"}, +{"tig", {NULL}, 3943, "tcp"}, +{"tig", {NULL}, 3943, "udp"}, +{"sops", {NULL}, 3944, "tcp"}, +{"sops", {NULL}, 3944, "udp"}, +{"emcads", {NULL}, 3945, "tcp"}, +{"emcads", {NULL}, 3945, "udp"}, +{"backupedge", {NULL}, 3946, "tcp"}, +{"backupedge", {NULL}, 3946, "udp"}, +{"ccp", {NULL}, 3947, "tcp"}, +{"ccp", {NULL}, 3947, "udp"}, +{"apdap", {NULL}, 3948, "tcp"}, +{"apdap", {NULL}, 3948, "udp"}, +{"drip", {NULL}, 3949, "tcp"}, +{"drip", {NULL}, 3949, "udp"}, +{"namemunge", {NULL}, 3950, "tcp"}, +{"namemunge", {NULL}, 3950, "udp"}, +{"pwgippfax", {NULL}, 3951, "tcp"}, +{"pwgippfax", {NULL}, 3951, "udp"}, +{"i3-sessionmgr", {NULL}, 3952, "tcp"}, +{"i3-sessionmgr", {NULL}, 3952, "udp"}, +{"xmlink-connect", {NULL}, 3953, "tcp"}, +{"xmlink-connect", {NULL}, 3953, "udp"}, +{"adrep", {NULL}, 3954, "tcp"}, +{"adrep", {NULL}, 3954, "udp"}, +{"p2pcommunity", {NULL}, 3955, "tcp"}, +{"p2pcommunity", {NULL}, 3955, "udp"}, +{"gvcp", {NULL}, 3956, "tcp"}, +{"gvcp", {NULL}, 3956, "udp"}, +{"mqe-broker", {NULL}, 3957, "tcp"}, +{"mqe-broker", {NULL}, 3957, "udp"}, +{"mqe-agent", {NULL}, 3958, "tcp"}, +{"mqe-agent", {NULL}, 3958, "udp"}, +{"treehopper", {NULL}, 3959, "tcp"}, +{"treehopper", {NULL}, 3959, "udp"}, +{"bess", {NULL}, 3960, "tcp"}, +{"bess", {NULL}, 3960, "udp"}, +{"proaxess", {NULL}, 3961, "tcp"}, +{"proaxess", {NULL}, 3961, "udp"}, +{"sbi-agent", {NULL}, 3962, "tcp"}, +{"sbi-agent", {NULL}, 3962, "udp"}, +{"thrp", {NULL}, 3963, "tcp"}, +{"thrp", {NULL}, 3963, "udp"}, +{"sasggprs", {NULL}, 3964, "tcp"}, +{"sasggprs", {NULL}, 3964, "udp"}, +{"ati-ip-to-ncpe", {NULL}, 3965, "tcp"}, +{"ati-ip-to-ncpe", {NULL}, 3965, "udp"}, +{"bflckmgr", {NULL}, 3966, "tcp"}, +{"bflckmgr", {NULL}, 3966, "udp"}, +{"ppsms", {NULL}, 3967, "tcp"}, +{"ppsms", {NULL}, 3967, "udp"}, +{"ianywhere-dbns", {NULL}, 3968, "tcp"}, +{"ianywhere-dbns", {NULL}, 3968, "udp"}, +{"landmarks", {NULL}, 3969, "tcp"}, +{"landmarks", {NULL}, 3969, "udp"}, +{"lanrevagent", {NULL}, 3970, "tcp"}, +{"lanrevagent", {NULL}, 3970, "udp"}, +{"lanrevserver", {NULL}, 3971, "tcp"}, +{"lanrevserver", {NULL}, 3971, "udp"}, +{"iconp", {NULL}, 3972, "tcp"}, +{"iconp", {NULL}, 3972, "udp"}, +{"progistics", {NULL}, 3973, "tcp"}, +{"progistics", {NULL}, 3973, "udp"}, +{"citysearch", {NULL}, 3974, "tcp"}, +{"citysearch", {NULL}, 3974, "udp"}, +{"airshot", {NULL}, 3975, "tcp"}, +{"airshot", {NULL}, 3975, "udp"}, +{"opswagent", {NULL}, 3976, "tcp"}, +{"opswagent", {NULL}, 3976, "udp"}, +{"opswmanager", {NULL}, 3977, "tcp"}, +{"opswmanager", {NULL}, 3977, "udp"}, +{"secure-cfg-svr", {NULL}, 3978, "tcp"}, +{"secure-cfg-svr", {NULL}, 3978, "udp"}, +{"smwan", {NULL}, 3979, "tcp"}, +{"smwan", {NULL}, 3979, "udp"}, +{"acms", {NULL}, 3980, "tcp"}, +{"acms", {NULL}, 3980, "udp"}, +{"starfish", {NULL}, 3981, "tcp"}, +{"starfish", {NULL}, 3981, "udp"}, +{"eis", {NULL}, 3982, "tcp"}, +{"eis", {NULL}, 3982, "udp"}, +{"eisp", {NULL}, 3983, "tcp"}, +{"eisp", {NULL}, 3983, "udp"}, +{"mapper-nodemgr", {NULL}, 3984, "tcp"}, +{"mapper-nodemgr", {NULL}, 3984, "udp"}, +{"mapper-mapethd", {NULL}, 3985, "tcp"}, +{"mapper-mapethd", {NULL}, 3985, "udp"}, +{"mapper-ws_ethd", {NULL}, 3986, "tcp"}, +{"mapper-ws_ethd", {NULL}, 3986, "udp"}, +{"centerline", {NULL}, 3987, "tcp"}, +{"centerline", {NULL}, 3987, "udp"}, +{"dcs-config", {NULL}, 3988, "tcp"}, +{"dcs-config", {NULL}, 3988, "udp"}, +{"bv-queryengine", {NULL}, 3989, "tcp"}, +{"bv-queryengine", {NULL}, 3989, "udp"}, +{"bv-is", {NULL}, 3990, "tcp"}, +{"bv-is", {NULL}, 3990, "udp"}, +{"bv-smcsrv", {NULL}, 3991, "tcp"}, +{"bv-smcsrv", {NULL}, 3991, "udp"}, +{"bv-ds", {NULL}, 3992, "tcp"}, +{"bv-ds", {NULL}, 3992, "udp"}, +{"bv-agent", {NULL}, 3993, "tcp"}, +{"bv-agent", {NULL}, 3993, "udp"}, +{"iss-mgmt-ssl", {NULL}, 3995, "tcp"}, +{"iss-mgmt-ssl", {NULL}, 3995, "udp"}, +{"abcsoftware", {NULL}, 3996, "tcp"}, +{"abcsoftware", {NULL}, 3996, "udp"}, +{"agentsease-db", {NULL}, 3997, "tcp"}, +{"agentsease-db", {NULL}, 3997, "udp"}, +{"dnx", {NULL}, 3998, "tcp"}, +{"dnx", {NULL}, 3998, "udp"}, +{"nvcnet", {NULL}, 3999, "tcp"}, +{"nvcnet", {NULL}, 3999, "udp"}, +{"terabase", {NULL}, 4000, "tcp"}, +{"terabase", {NULL}, 4000, "udp"}, +{"newoak", {NULL}, 4001, "tcp"}, +{"newoak", {NULL}, 4001, "udp"}, +{"pxc-spvr-ft", {NULL}, 4002, "tcp"}, +{"pxc-spvr-ft", {NULL}, 4002, "udp"}, +{"pxc-splr-ft", {NULL}, 4003, "tcp"}, +{"pxc-splr-ft", {NULL}, 4003, "udp"}, +{"pxc-roid", {NULL}, 4004, "tcp"}, +{"pxc-roid", {NULL}, 4004, "udp"}, +{"pxc-pin", {NULL}, 4005, "tcp"}, +{"pxc-pin", {NULL}, 4005, "udp"}, +{"pxc-spvr", {NULL}, 4006, "tcp"}, +{"pxc-spvr", {NULL}, 4006, "udp"}, +{"pxc-splr", {NULL}, 4007, "tcp"}, +{"pxc-splr", {NULL}, 4007, "udp"}, +{"netcheque", {NULL}, 4008, "tcp"}, +{"netcheque", {NULL}, 4008, "udp"}, +{"chimera-hwm", {NULL}, 4009, "tcp"}, +{"chimera-hwm", {NULL}, 4009, "udp"}, +{"samsung-unidex", {NULL}, 4010, "tcp"}, +{"samsung-unidex", {NULL}, 4010, "udp"}, +{"altserviceboot", {NULL}, 4011, "tcp"}, +{"altserviceboot", {NULL}, 4011, "udp"}, +{"pda-gate", {NULL}, 4012, "tcp"}, +{"pda-gate", {NULL}, 4012, "udp"}, +{"acl-manager", {NULL}, 4013, "tcp"}, +{"acl-manager", {NULL}, 4013, "udp"}, +{"taiclock", {NULL}, 4014, "tcp"}, +{"taiclock", {NULL}, 4014, "udp"}, +{"talarian-mcast1", {NULL}, 4015, "tcp"}, +{"talarian-mcast1", {NULL}, 4015, "udp"}, +{"talarian-mcast2", {NULL}, 4016, "tcp"}, +{"talarian-mcast2", {NULL}, 4016, "udp"}, +{"talarian-mcast3", {NULL}, 4017, "tcp"}, +{"talarian-mcast3", {NULL}, 4017, "udp"}, +{"talarian-mcast4", {NULL}, 4018, "tcp"}, +{"talarian-mcast4", {NULL}, 4018, "udp"}, +{"talarian-mcast5", {NULL}, 4019, "tcp"}, +{"talarian-mcast5", {NULL}, 4019, "udp"}, +{"trap", {NULL}, 4020, "tcp"}, +{"trap", {NULL}, 4020, "udp"}, +{"nexus-portal", {NULL}, 4021, "tcp"}, +{"nexus-portal", {NULL}, 4021, "udp"}, +{"dnox", {NULL}, 4022, "tcp"}, +{"dnox", {NULL}, 4022, "udp"}, +{"esnm-zoning", {NULL}, 4023, "tcp"}, +{"esnm-zoning", {NULL}, 4023, "udp"}, +{"tnp1-port", {NULL}, 4024, "tcp"}, +{"tnp1-port", {NULL}, 4024, "udp"}, +{"partimage", {NULL}, 4025, "tcp"}, +{"partimage", {NULL}, 4025, "udp"}, +{"as-debug", {NULL}, 4026, "tcp"}, +{"as-debug", {NULL}, 4026, "udp"}, +{"bxp", {NULL}, 4027, "tcp"}, +{"bxp", {NULL}, 4027, "udp"}, +{"dtserver-port", {NULL}, 4028, "tcp"}, +{"dtserver-port", {NULL}, 4028, "udp"}, +{"ip-qsig", {NULL}, 4029, "tcp"}, +{"ip-qsig", {NULL}, 4029, "udp"}, +{"jdmn-port", {NULL}, 4030, "tcp"}, +{"jdmn-port", {NULL}, 4030, "udp"}, +{"suucp", {NULL}, 4031, "tcp"}, +{"suucp", {NULL}, 4031, "udp"}, +{"vrts-auth-port", {NULL}, 4032, "tcp"}, +{"vrts-auth-port", {NULL}, 4032, "udp"}, +{"sanavigator", {NULL}, 4033, "tcp"}, +{"sanavigator", {NULL}, 4033, "udp"}, +{"ubxd", {NULL}, 4034, "tcp"}, +{"ubxd", {NULL}, 4034, "udp"}, +{"wap-push-http", {NULL}, 4035, "tcp"}, +{"wap-push-http", {NULL}, 4035, "udp"}, +{"wap-push-https", {NULL}, 4036, "tcp"}, +{"wap-push-https", {NULL}, 4036, "udp"}, +{"ravehd", {NULL}, 4037, "tcp"}, +{"ravehd", {NULL}, 4037, "udp"}, +{"fazzt-ptp", {NULL}, 4038, "tcp"}, +{"fazzt-ptp", {NULL}, 4038, "udp"}, +{"fazzt-admin", {NULL}, 4039, "tcp"}, +{"fazzt-admin", {NULL}, 4039, "udp"}, +{"yo-main", {NULL}, 4040, "tcp"}, +{"yo-main", {NULL}, 4040, "udp"}, +{"houston", {NULL}, 4041, "tcp"}, +{"houston", {NULL}, 4041, "udp"}, +{"ldxp", {NULL}, 4042, "tcp"}, +{"ldxp", {NULL}, 4042, "udp"}, +{"nirp", {NULL}, 4043, "tcp"}, +{"nirp", {NULL}, 4043, "udp"}, +{"ltp", {NULL}, 4044, "tcp"}, +{"ltp", {NULL}, 4044, "udp"}, +{"npp", {NULL}, 4045, "tcp"}, +{"npp", {NULL}, 4045, "udp"}, +{"acp-proto", {NULL}, 4046, "tcp"}, +{"acp-proto", {NULL}, 4046, "udp"}, +{"ctp-state", {NULL}, 4047, "tcp"}, +{"ctp-state", {NULL}, 4047, "udp"}, +{"wafs", {NULL}, 4049, "tcp"}, +{"wafs", {NULL}, 4049, "udp"}, +{"cisco-wafs", {NULL}, 4050, "tcp"}, +{"cisco-wafs", {NULL}, 4050, "udp"}, +{"cppdp", {NULL}, 4051, "tcp"}, +{"cppdp", {NULL}, 4051, "udp"}, +{"interact", {NULL}, 4052, "tcp"}, +{"interact", {NULL}, 4052, "udp"}, +{"ccu-comm-1", {NULL}, 4053, "tcp"}, +{"ccu-comm-1", {NULL}, 4053, "udp"}, +{"ccu-comm-2", {NULL}, 4054, "tcp"}, +{"ccu-comm-2", {NULL}, 4054, "udp"}, +{"ccu-comm-3", {NULL}, 4055, "tcp"}, +{"ccu-comm-3", {NULL}, 4055, "udp"}, +{"lms", {NULL}, 4056, "tcp"}, +{"lms", {NULL}, 4056, "udp"}, +{"wfm", {NULL}, 4057, "tcp"}, +{"wfm", {NULL}, 4057, "udp"}, +{"kingfisher", {NULL}, 4058, "tcp"}, +{"kingfisher", {NULL}, 4058, "udp"}, +{"dlms-cosem", {NULL}, 4059, "tcp"}, +{"dlms-cosem", {NULL}, 4059, "udp"}, +{"dsmeter_iatc", {NULL}, 4060, "tcp"}, +{"dsmeter_iatc", {NULL}, 4060, "udp"}, +{"ice-location", {NULL}, 4061, "tcp"}, +{"ice-location", {NULL}, 4061, "udp"}, +{"ice-slocation", {NULL}, 4062, "tcp"}, +{"ice-slocation", {NULL}, 4062, "udp"}, +{"ice-router", {NULL}, 4063, "tcp"}, +{"ice-router", {NULL}, 4063, "udp"}, +{"ice-srouter", {NULL}, 4064, "tcp"}, +{"ice-srouter", {NULL}, 4064, "udp"}, +{"avanti_cdp", {NULL}, 4065, "tcp"}, +{"avanti_cdp", {NULL}, 4065, "udp"}, +{"pmas", {NULL}, 4066, "tcp"}, +{"pmas", {NULL}, 4066, "udp"}, +{"idp", {NULL}, 4067, "tcp"}, +{"idp", {NULL}, 4067, "udp"}, +{"ipfltbcst", {NULL}, 4068, "tcp"}, +{"ipfltbcst", {NULL}, 4068, "udp"}, +{"minger", {NULL}, 4069, "tcp"}, +{"minger", {NULL}, 4069, "udp"}, +{"tripe", {NULL}, 4070, "tcp"}, +{"tripe", {NULL}, 4070, "udp"}, +{"aibkup", {NULL}, 4071, "tcp"}, +{"aibkup", {NULL}, 4071, "udp"}, +{"zieto-sock", {NULL}, 4072, "tcp"}, +{"zieto-sock", {NULL}, 4072, "udp"}, +{"iRAPP", {NULL}, 4073, "tcp"}, +{"iRAPP", {NULL}, 4073, "udp"}, +{"cequint-cityid", {NULL}, 4074, "tcp"}, +{"cequint-cityid", {NULL}, 4074, "udp"}, +{"perimlan", {NULL}, 4075, "tcp"}, +{"perimlan", {NULL}, 4075, "udp"}, +{"seraph", {NULL}, 4076, "tcp"}, +{"seraph", {NULL}, 4076, "udp"}, +{"ascomalarm", {NULL}, 4077, "udp"}, +{"cssp", {NULL}, 4078, "tcp"}, +{"santools", {NULL}, 4079, "tcp"}, +{"santools", {NULL}, 4079, "udp"}, +{"lorica-in", {NULL}, 4080, "tcp"}, +{"lorica-in", {NULL}, 4080, "udp"}, +{"lorica-in-sec", {NULL}, 4081, "tcp"}, +{"lorica-in-sec", {NULL}, 4081, "udp"}, +{"lorica-out", {NULL}, 4082, "tcp"}, +{"lorica-out", {NULL}, 4082, "udp"}, +{"lorica-out-sec", {NULL}, 4083, "tcp"}, +{"lorica-out-sec", {NULL}, 4083, "udp"}, +{"fortisphere-vm", {NULL}, 4084, "udp"}, +{"ezmessagesrv", {NULL}, 4085, "tcp"}, +{"ftsync", {NULL}, 4086, "udp"}, +{"applusservice", {NULL}, 4087, "tcp"}, +{"npsp", {NULL}, 4088, "tcp"}, +{"opencore", {NULL}, 4089, "tcp"}, +{"opencore", {NULL}, 4089, "udp"}, +{"omasgport", {NULL}, 4090, "tcp"}, +{"omasgport", {NULL}, 4090, "udp"}, +{"ewinstaller", {NULL}, 4091, "tcp"}, +{"ewinstaller", {NULL}, 4091, "udp"}, +{"ewdgs", {NULL}, 4092, "tcp"}, +{"ewdgs", {NULL}, 4092, "udp"}, +{"pvxpluscs", {NULL}, 4093, "tcp"}, +{"pvxpluscs", {NULL}, 4093, "udp"}, +{"sysrqd", {NULL}, 4094, "tcp"}, +{"sysrqd", {NULL}, 4094, "udp"}, +{"xtgui", {NULL}, 4095, "tcp"}, +{"xtgui", {NULL}, 4095, "udp"}, +{"bre", {NULL}, 4096, "tcp"}, +{"bre", {NULL}, 4096, "udp"}, +{"patrolview", {NULL}, 4097, "tcp"}, +{"patrolview", {NULL}, 4097, "udp"}, +{"drmsfsd", {NULL}, 4098, "tcp"}, +{"drmsfsd", {NULL}, 4098, "udp"}, +{"dpcp", {NULL}, 4099, "tcp"}, +{"dpcp", {NULL}, 4099, "udp"}, +{"igo-incognito", {NULL}, 4100, "tcp"}, +{"igo-incognito", {NULL}, 4100, "udp"}, +{"brlp-0", {NULL}, 4101, "tcp"}, +{"brlp-0", {NULL}, 4101, "udp"}, +{"brlp-1", {NULL}, 4102, "tcp"}, +{"brlp-1", {NULL}, 4102, "udp"}, +{"brlp-2", {NULL}, 4103, "tcp"}, +{"brlp-2", {NULL}, 4103, "udp"}, +{"brlp-3", {NULL}, 4104, "tcp"}, +{"brlp-3", {NULL}, 4104, "udp"}, +{"shofarplayer", {NULL}, 4105, "tcp"}, +{"shofarplayer", {NULL}, 4105, "udp"}, +{"synchronite", {NULL}, 4106, "tcp"}, +{"synchronite", {NULL}, 4106, "udp"}, +{"j-ac", {NULL}, 4107, "tcp"}, +{"j-ac", {NULL}, 4107, "udp"}, +{"accel", {NULL}, 4108, "tcp"}, +{"accel", {NULL}, 4108, "udp"}, +{"izm", {NULL}, 4109, "tcp"}, +{"izm", {NULL}, 4109, "udp"}, +{"g2tag", {NULL}, 4110, "tcp"}, +{"g2tag", {NULL}, 4110, "udp"}, +{"xgrid", {NULL}, 4111, "tcp"}, +{"xgrid", {NULL}, 4111, "udp"}, +{"apple-vpns-rp", {NULL}, 4112, "tcp"}, +{"apple-vpns-rp", {NULL}, 4112, "udp"}, +{"aipn-reg", {NULL}, 4113, "tcp"}, +{"aipn-reg", {NULL}, 4113, "udp"}, +{"jomamqmonitor", {NULL}, 4114, "tcp"}, +{"jomamqmonitor", {NULL}, 4114, "udp"}, +{"cds", {NULL}, 4115, "tcp"}, +{"cds", {NULL}, 4115, "udp"}, +{"smartcard-tls", {NULL}, 4116, "tcp"}, +{"smartcard-tls", {NULL}, 4116, "udp"}, +{"hillrserv", {NULL}, 4117, "tcp"}, +{"hillrserv", {NULL}, 4117, "udp"}, +{"netscript", {NULL}, 4118, "tcp"}, +{"netscript", {NULL}, 4118, "udp"}, +{"assuria-slm", {NULL}, 4119, "tcp"}, +{"assuria-slm", {NULL}, 4119, "udp"}, +{"e-builder", {NULL}, 4121, "tcp"}, +{"e-builder", {NULL}, 4121, "udp"}, +{"fprams", {NULL}, 4122, "tcp"}, +{"fprams", {NULL}, 4122, "udp"}, +{"z-wave", {NULL}, 4123, "tcp"}, +{"z-wave", {NULL}, 4123, "udp"}, +{"tigv2", {NULL}, 4124, "tcp"}, +{"tigv2", {NULL}, 4124, "udp"}, +{"opsview-envoy", {NULL}, 4125, "tcp"}, +{"opsview-envoy", {NULL}, 4125, "udp"}, +{"ddrepl", {NULL}, 4126, "tcp"}, +{"ddrepl", {NULL}, 4126, "udp"}, +{"unikeypro", {NULL}, 4127, "tcp"}, +{"unikeypro", {NULL}, 4127, "udp"}, +{"nufw", {NULL}, 4128, "tcp"}, +{"nufw", {NULL}, 4128, "udp"}, +{"nuauth", {NULL}, 4129, "tcp"}, +{"nuauth", {NULL}, 4129, "udp"}, +{"fronet", {NULL}, 4130, "tcp"}, +{"fronet", {NULL}, 4130, "udp"}, +{"stars", {NULL}, 4131, "tcp"}, +{"stars", {NULL}, 4131, "udp"}, +{"nuts_dem", {NULL}, 4132, "tcp"}, +{"nuts_dem", {NULL}, 4132, "udp"}, +{"nuts_bootp", {NULL}, 4133, "tcp"}, +{"nuts_bootp", {NULL}, 4133, "udp"}, +{"nifty-hmi", {NULL}, 4134, "tcp"}, +{"nifty-hmi", {NULL}, 4134, "udp"}, +{"cl-db-attach", {NULL}, 4135, "tcp"}, +{"cl-db-attach", {NULL}, 4135, "udp"}, +{"cl-db-request", {NULL}, 4136, "tcp"}, +{"cl-db-request", {NULL}, 4136, "udp"}, +{"cl-db-remote", {NULL}, 4137, "tcp"}, +{"cl-db-remote", {NULL}, 4137, "udp"}, +{"nettest", {NULL}, 4138, "tcp"}, +{"nettest", {NULL}, 4138, "udp"}, +{"thrtx", {NULL}, 4139, "tcp"}, +{"thrtx", {NULL}, 4139, "udp"}, +{"cedros_fds", {NULL}, 4140, "tcp"}, +{"cedros_fds", {NULL}, 4140, "udp"}, +{"oirtgsvc", {NULL}, 4141, "tcp"}, +{"oirtgsvc", {NULL}, 4141, "udp"}, +{"oidocsvc", {NULL}, 4142, "tcp"}, +{"oidocsvc", {NULL}, 4142, "udp"}, +{"oidsr", {NULL}, 4143, "tcp"}, +{"oidsr", {NULL}, 4143, "udp"}, +{"vvr-control", {NULL}, 4145, "tcp"}, +{"vvr-control", {NULL}, 4145, "udp"}, +{"tgcconnect", {NULL}, 4146, "tcp"}, +{"tgcconnect", {NULL}, 4146, "udp"}, +{"vrxpservman", {NULL}, 4147, "tcp"}, +{"vrxpservman", {NULL}, 4147, "udp"}, +{"hhb-handheld", {NULL}, 4148, "tcp"}, +{"hhb-handheld", {NULL}, 4148, "udp"}, +{"agslb", {NULL}, 4149, "tcp"}, +{"agslb", {NULL}, 4149, "udp"}, +{"PowerAlert-nsa", {NULL}, 4150, "tcp"}, +{"PowerAlert-nsa", {NULL}, 4150, "udp"}, +{"menandmice_noh", {NULL}, 4151, "tcp"}, +{"menandmice_noh", {NULL}, 4151, "udp"}, +{"idig_mux", {NULL}, 4152, "tcp"}, +{"idig_mux", {NULL}, 4152, "udp"}, +{"mbl-battd", {NULL}, 4153, "tcp"}, +{"mbl-battd", {NULL}, 4153, "udp"}, +{"atlinks", {NULL}, 4154, "tcp"}, +{"atlinks", {NULL}, 4154, "udp"}, +{"bzr", {NULL}, 4155, "tcp"}, +{"bzr", {NULL}, 4155, "udp"}, +{"stat-results", {NULL}, 4156, "tcp"}, +{"stat-results", {NULL}, 4156, "udp"}, +{"stat-scanner", {NULL}, 4157, "tcp"}, +{"stat-scanner", {NULL}, 4157, "udp"}, +{"stat-cc", {NULL}, 4158, "tcp"}, +{"stat-cc", {NULL}, 4158, "udp"}, +{"nss", {NULL}, 4159, "tcp"}, +{"nss", {NULL}, 4159, "udp"}, +{"jini-discovery", {NULL}, 4160, "tcp"}, +{"jini-discovery", {NULL}, 4160, "udp"}, +{"omscontact", {NULL}, 4161, "tcp"}, +{"omscontact", {NULL}, 4161, "udp"}, +{"omstopology", {NULL}, 4162, "tcp"}, +{"omstopology", {NULL}, 4162, "udp"}, +{"silverpeakpeer", {NULL}, 4163, "tcp"}, +{"silverpeakpeer", {NULL}, 4163, "udp"}, +{"silverpeakcomm", {NULL}, 4164, "tcp"}, +{"silverpeakcomm", {NULL}, 4164, "udp"}, +{"altcp", {NULL}, 4165, "tcp"}, +{"altcp", {NULL}, 4165, "udp"}, +{"joost", {NULL}, 4166, "tcp"}, +{"joost", {NULL}, 4166, "udp"}, +{"ddgn", {NULL}, 4167, "tcp"}, +{"ddgn", {NULL}, 4167, "udp"}, +{"pslicser", {NULL}, 4168, "tcp"}, +{"pslicser", {NULL}, 4168, "udp"}, +{"iadt", {NULL}, 4169, "tcp"}, +{"iadt-disc", {NULL}, 4169, "udp"}, +{"d-cinema-csp", {NULL}, 4170, "tcp"}, +{"ml-svnet", {NULL}, 4171, "tcp"}, +{"pcoip", {NULL}, 4172, "tcp"}, +{"pcoip", {NULL}, 4172, "udp"}, +{"smcluster", {NULL}, 4174, "tcp"}, +{"bccp", {NULL}, 4175, "tcp"}, +{"tl-ipcproxy", {NULL}, 4176, "tcp"}, +{"wello", {NULL}, 4177, "tcp"}, +{"wello", {NULL}, 4177, "udp"}, +{"storman", {NULL}, 4178, "tcp"}, +{"storman", {NULL}, 4178, "udp"}, +{"MaxumSP", {NULL}, 4179, "tcp"}, +{"MaxumSP", {NULL}, 4179, "udp"}, +{"httpx", {NULL}, 4180, "tcp"}, +{"httpx", {NULL}, 4180, "udp"}, +{"macbak", {NULL}, 4181, "tcp"}, +{"macbak", {NULL}, 4181, "udp"}, +{"pcptcpservice", {NULL}, 4182, "tcp"}, +{"pcptcpservice", {NULL}, 4182, "udp"}, +{"gmmp", {NULL}, 4183, "tcp"}, +{"gmmp", {NULL}, 4183, "udp"}, +{"universe_suite", {NULL}, 4184, "tcp"}, +{"universe_suite", {NULL}, 4184, "udp"}, +{"wcpp", {NULL}, 4185, "tcp"}, +{"wcpp", {NULL}, 4185, "udp"}, +{"boxbackupstore", {NULL}, 4186, "tcp"}, +{"csc_proxy", {NULL}, 4187, "tcp"}, +{"vatata", {NULL}, 4188, "tcp"}, +{"vatata", {NULL}, 4188, "udp"}, +{"pcep", {NULL}, 4189, "tcp"}, +{"sieve", {NULL}, 4190, "tcp"}, +{"dsmipv6", {NULL}, 4191, "udp"}, +{"azeti", {NULL}, 4192, "tcp"}, +{"azeti-bd", {NULL}, 4192, "udp"}, +{"pvxplusio", {NULL}, 4193, "tcp"}, +{"eims-admin", {NULL}, 4199, "tcp"}, +{"eims-admin", {NULL}, 4199, "udp"}, +{"corelccam", {NULL}, 4300, "tcp"}, +{"corelccam", {NULL}, 4300, "udp"}, +{"d-data", {NULL}, 4301, "tcp"}, +{"d-data", {NULL}, 4301, "udp"}, +{"d-data-control", {NULL}, 4302, "tcp"}, +{"d-data-control", {NULL}, 4302, "udp"}, +{"srcp", {NULL}, 4303, "tcp"}, +{"srcp", {NULL}, 4303, "udp"}, +{"owserver", {NULL}, 4304, "tcp"}, +{"owserver", {NULL}, 4304, "udp"}, +{"batman", {NULL}, 4305, "tcp"}, +{"batman", {NULL}, 4305, "udp"}, +{"pinghgl", {NULL}, 4306, "tcp"}, +{"pinghgl", {NULL}, 4306, "udp"}, +{"visicron-vs", {NULL}, 4307, "tcp"}, +{"visicron-vs", {NULL}, 4307, "udp"}, +{"compx-lockview", {NULL}, 4308, "tcp"}, +{"compx-lockview", {NULL}, 4308, "udp"}, +{"dserver", {NULL}, 4309, "tcp"}, +{"dserver", {NULL}, 4309, "udp"}, +{"mirrtex", {NULL}, 4310, "tcp"}, +{"mirrtex", {NULL}, 4310, "udp"}, +{"p6ssmc", {NULL}, 4311, "tcp"}, +{"pscl-mgt", {NULL}, 4312, "tcp"}, +{"perrla", {NULL}, 4313, "tcp"}, +{"fdt-rcatp", {NULL}, 4320, "tcp"}, +{"fdt-rcatp", {NULL}, 4320, "udp"}, +{"rwhois", {NULL}, 4321, "tcp"}, +{"rwhois", {NULL}, 4321, "udp"}, +{"trim-event", {NULL}, 4322, "tcp"}, +{"trim-event", {NULL}, 4322, "udp"}, +{"trim-ice", {NULL}, 4323, "tcp"}, +{"trim-ice", {NULL}, 4323, "udp"}, +{"balour", {NULL}, 4324, "tcp"}, +{"balour", {NULL}, 4324, "udp"}, +{"geognosisman", {NULL}, 4325, "tcp"}, +{"geognosisman", {NULL}, 4325, "udp"}, +{"geognosis", {NULL}, 4326, "tcp"}, +{"geognosis", {NULL}, 4326, "udp"}, +{"jaxer-web", {NULL}, 4327, "tcp"}, +{"jaxer-web", {NULL}, 4327, "udp"}, +{"jaxer-manager", {NULL}, 4328, "tcp"}, +{"jaxer-manager", {NULL}, 4328, "udp"}, +{"publiqare-sync", {NULL}, 4329, "tcp"}, +{"gaia", {NULL}, 4340, "tcp"}, +{"gaia", {NULL}, 4340, "udp"}, +{"lisp-data", {NULL}, 4341, "tcp"}, +{"lisp-data", {NULL}, 4341, "udp"}, +{"lisp-cons", {NULL}, 4342, "tcp"}, +{"lisp-control", {NULL}, 4342, "udp"}, +{"unicall", {NULL}, 4343, "tcp"}, +{"unicall", {NULL}, 4343, "udp"}, +{"vinainstall", {NULL}, 4344, "tcp"}, +{"vinainstall", {NULL}, 4344, "udp"}, +{"m4-network-as", {NULL}, 4345, "tcp"}, +{"m4-network-as", {NULL}, 4345, "udp"}, +{"elanlm", {NULL}, 4346, "tcp"}, +{"elanlm", {NULL}, 4346, "udp"}, +{"lansurveyor", {NULL}, 4347, "tcp"}, +{"lansurveyor", {NULL}, 4347, "udp"}, +{"itose", {NULL}, 4348, "tcp"}, +{"itose", {NULL}, 4348, "udp"}, +{"fsportmap", {NULL}, 4349, "tcp"}, +{"fsportmap", {NULL}, 4349, "udp"}, +{"net-device", {NULL}, 4350, "tcp"}, +{"net-device", {NULL}, 4350, "udp"}, +{"plcy-net-svcs", {NULL}, 4351, "tcp"}, +{"plcy-net-svcs", {NULL}, 4351, "udp"}, +{"pjlink", {NULL}, 4352, "tcp"}, +{"pjlink", {NULL}, 4352, "udp"}, +{"f5-iquery", {NULL}, 4353, "tcp"}, +{"f5-iquery", {NULL}, 4353, "udp"}, +{"qsnet-trans", {NULL}, 4354, "tcp"}, +{"qsnet-trans", {NULL}, 4354, "udp"}, +{"qsnet-workst", {NULL}, 4355, "tcp"}, +{"qsnet-workst", {NULL}, 4355, "udp"}, +{"qsnet-assist", {NULL}, 4356, "tcp"}, +{"qsnet-assist", {NULL}, 4356, "udp"}, +{"qsnet-cond", {NULL}, 4357, "tcp"}, +{"qsnet-cond", {NULL}, 4357, "udp"}, +{"qsnet-nucl", {NULL}, 4358, "tcp"}, +{"qsnet-nucl", {NULL}, 4358, "udp"}, +{"omabcastltkm", {NULL}, 4359, "tcp"}, +{"omabcastltkm", {NULL}, 4359, "udp"}, +{"matrix_vnet", {NULL}, 4360, "tcp"}, +{"nacnl", {NULL}, 4361, "udp"}, +{"afore-vdp-disc", {NULL}, 4362, "udp"}, +{"wxbrief", {NULL}, 4368, "tcp"}, +{"wxbrief", {NULL}, 4368, "udp"}, +{"epmd", {NULL}, 4369, "tcp"}, +{"epmd", {NULL}, 4369, "udp"}, +{"elpro_tunnel", {NULL}, 4370, "tcp"}, +{"elpro_tunnel", {NULL}, 4370, "udp"}, +{"l2c-control", {NULL}, 4371, "tcp"}, +{"l2c-disc", {NULL}, 4371, "udp"}, +{"l2c-data", {NULL}, 4372, "tcp"}, +{"l2c-data", {NULL}, 4372, "udp"}, +{"remctl", {NULL}, 4373, "tcp"}, +{"remctl", {NULL}, 4373, "udp"}, +{"psi-ptt", {NULL}, 4374, "tcp"}, +{"tolteces", {NULL}, 4375, "tcp"}, +{"tolteces", {NULL}, 4375, "udp"}, +{"bip", {NULL}, 4376, "tcp"}, +{"bip", {NULL}, 4376, "udp"}, +{"cp-spxsvr", {NULL}, 4377, "tcp"}, +{"cp-spxsvr", {NULL}, 4377, "udp"}, +{"cp-spxdpy", {NULL}, 4378, "tcp"}, +{"cp-spxdpy", {NULL}, 4378, "udp"}, +{"ctdb", {NULL}, 4379, "tcp"}, +{"ctdb", {NULL}, 4379, "udp"}, +{"xandros-cms", {NULL}, 4389, "tcp"}, +{"xandros-cms", {NULL}, 4389, "udp"}, +{"wiegand", {NULL}, 4390, "tcp"}, +{"wiegand", {NULL}, 4390, "udp"}, +{"apwi-imserver", {NULL}, 4391, "tcp"}, +{"apwi-rxserver", {NULL}, 4392, "tcp"}, +{"apwi-rxspooler", {NULL}, 4393, "tcp"}, +{"apwi-disc", {NULL}, 4394, "udp"}, +{"omnivisionesx", {NULL}, 4395, "tcp"}, +{"omnivisionesx", {NULL}, 4395, "udp"}, +{"fly", {NULL}, 4396, "tcp"}, +{"ds-srv", {NULL}, 4400, "tcp"}, +{"ds-srv", {NULL}, 4400, "udp"}, +{"ds-srvr", {NULL}, 4401, "tcp"}, +{"ds-srvr", {NULL}, 4401, "udp"}, +{"ds-clnt", {NULL}, 4402, "tcp"}, +{"ds-clnt", {NULL}, 4402, "udp"}, +{"ds-user", {NULL}, 4403, "tcp"}, +{"ds-user", {NULL}, 4403, "udp"}, +{"ds-admin", {NULL}, 4404, "tcp"}, +{"ds-admin", {NULL}, 4404, "udp"}, +{"ds-mail", {NULL}, 4405, "tcp"}, +{"ds-mail", {NULL}, 4405, "udp"}, +{"ds-slp", {NULL}, 4406, "tcp"}, +{"ds-slp", {NULL}, 4406, "udp"}, +{"nacagent", {NULL}, 4407, "tcp"}, +{"slscc", {NULL}, 4408, "tcp"}, +{"netcabinet-com", {NULL}, 4409, "tcp"}, +{"itwo-server", {NULL}, 4410, "tcp"}, +{"netrockey6", {NULL}, 4425, "tcp"}, +{"netrockey6", {NULL}, 4425, "udp"}, +{"beacon-port-2", {NULL}, 4426, "tcp"}, +{"beacon-port-2", {NULL}, 4426, "udp"}, +{"drizzle", {NULL}, 4427, "tcp"}, +{"omviserver", {NULL}, 4428, "tcp"}, +{"omviagent", {NULL}, 4429, "tcp"}, +{"rsqlserver", {NULL}, 4430, "tcp"}, +{"rsqlserver", {NULL}, 4430, "udp"}, +{"wspipe", {NULL}, 4431, "tcp"}, +{"netblox", {NULL}, 4441, "udp"}, +{"saris", {NULL}, 4442, "tcp"}, +{"saris", {NULL}, 4442, "udp"}, +{"pharos", {NULL}, 4443, "tcp"}, +{"pharos", {NULL}, 4443, "udp"}, +{"krb524", {NULL}, 4444, "tcp"}, +{"krb524", {NULL}, 4444, "udp"}, +{"nv-video", {NULL}, 4444, "tcp"}, +{"nv-video", {NULL}, 4444, "udp"}, +{"upnotifyp", {NULL}, 4445, "tcp"}, +{"upnotifyp", {NULL}, 4445, "udp"}, +{"n1-fwp", {NULL}, 4446, "tcp"}, +{"n1-fwp", {NULL}, 4446, "udp"}, +{"n1-rmgmt", {NULL}, 4447, "tcp"}, +{"n1-rmgmt", {NULL}, 4447, "udp"}, +{"asc-slmd", {NULL}, 4448, "tcp"}, +{"asc-slmd", {NULL}, 4448, "udp"}, +{"privatewire", {NULL}, 4449, "tcp"}, +{"privatewire", {NULL}, 4449, "udp"}, +{"camp", {NULL}, 4450, "tcp"}, +{"camp", {NULL}, 4450, "udp"}, +{"ctisystemmsg", {NULL}, 4451, "tcp"}, +{"ctisystemmsg", {NULL}, 4451, "udp"}, +{"ctiprogramload", {NULL}, 4452, "tcp"}, +{"ctiprogramload", {NULL}, 4452, "udp"}, +{"nssalertmgr", {NULL}, 4453, "tcp"}, +{"nssalertmgr", {NULL}, 4453, "udp"}, +{"nssagentmgr", {NULL}, 4454, "tcp"}, +{"nssagentmgr", {NULL}, 4454, "udp"}, +{"prchat-user", {NULL}, 4455, "tcp"}, +{"prchat-user", {NULL}, 4455, "udp"}, +{"prchat-server", {NULL}, 4456, "tcp"}, +{"prchat-server", {NULL}, 4456, "udp"}, +{"prRegister", {NULL}, 4457, "tcp"}, +{"prRegister", {NULL}, 4457, "udp"}, +{"mcp", {NULL}, 4458, "tcp"}, +{"mcp", {NULL}, 4458, "udp"}, +{"hpssmgmt", {NULL}, 4484, "tcp"}, +{"hpssmgmt", {NULL}, 4484, "udp"}, +{"assyst-dr", {NULL}, 4485, "tcp"}, +{"icms", {NULL}, 4486, "tcp"}, +{"icms", {NULL}, 4486, "udp"}, +{"prex-tcp", {NULL}, 4487, "tcp"}, +{"awacs-ice", {NULL}, 4488, "tcp"}, +{"awacs-ice", {NULL}, 4488, "udp"}, +{"ipsec-nat-t", {NULL}, 4500, "tcp"}, +{"ipsec-nat-t", {NULL}, 4500, "udp"}, +{"ehs", {NULL}, 4535, "tcp"}, +{"ehs", {NULL}, 4535, "udp"}, +{"ehs-ssl", {NULL}, 4536, "tcp"}, +{"ehs-ssl", {NULL}, 4536, "udp"}, +{"wssauthsvc", {NULL}, 4537, "tcp"}, +{"wssauthsvc", {NULL}, 4537, "udp"}, +{"swx-gate", {NULL}, 4538, "tcp"}, +{"swx-gate", {NULL}, 4538, "udp"}, +{"worldscores", {NULL}, 4545, "tcp"}, +{"worldscores", {NULL}, 4545, "udp"}, +{"sf-lm", {NULL}, 4546, "tcp"}, +{"sf-lm", {NULL}, 4546, "udp"}, +{"lanner-lm", {NULL}, 4547, "tcp"}, +{"lanner-lm", {NULL}, 4547, "udp"}, +{"synchromesh", {NULL}, 4548, "tcp"}, +{"synchromesh", {NULL}, 4548, "udp"}, +{"aegate", {NULL}, 4549, "tcp"}, +{"aegate", {NULL}, 4549, "udp"}, +{"gds-adppiw-db", {NULL}, 4550, "tcp"}, +{"gds-adppiw-db", {NULL}, 4550, "udp"}, +{"ieee-mih", {NULL}, 4551, "tcp"}, +{"ieee-mih", {NULL}, 4551, "udp"}, +{"menandmice-mon", {NULL}, 4552, "tcp"}, +{"menandmice-mon", {NULL}, 4552, "udp"}, +{"icshostsvc", {NULL}, 4553, "tcp"}, +{"msfrs", {NULL}, 4554, "tcp"}, +{"msfrs", {NULL}, 4554, "udp"}, +{"rsip", {NULL}, 4555, "tcp"}, +{"rsip", {NULL}, 4555, "udp"}, +{"dtn-bundle-tcp", {NULL}, 4556, "tcp"}, +{"dtn-bundle-udp", {NULL}, 4556, "udp"}, +{"mtcevrunqss", {NULL}, 4557, "udp"}, +{"mtcevrunqman", {NULL}, 4558, "udp"}, +{"hylafax", {NULL}, 4559, "tcp"}, +{"hylafax", {NULL}, 4559, "udp"}, +{"kwtc", {NULL}, 4566, "tcp"}, +{"kwtc", {NULL}, 4566, "udp"}, +{"tram", {NULL}, 4567, "tcp"}, +{"tram", {NULL}, 4567, "udp"}, +{"bmc-reporting", {NULL}, 4568, "tcp"}, +{"bmc-reporting", {NULL}, 4568, "udp"}, +{"iax", {NULL}, 4569, "tcp"}, +{"iax", {NULL}, 4569, "udp"}, +{"rid", {NULL}, 4590, "tcp"}, +{"l3t-at-an", {NULL}, 4591, "tcp"}, +{"l3t-at-an", {NULL}, 4591, "udp"}, +{"hrpd-ith-at-an", {NULL}, 4592, "udp"}, +{"ipt-anri-anri", {NULL}, 4593, "tcp"}, +{"ipt-anri-anri", {NULL}, 4593, "udp"}, +{"ias-session", {NULL}, 4594, "tcp"}, +{"ias-session", {NULL}, 4594, "udp"}, +{"ias-paging", {NULL}, 4595, "tcp"}, +{"ias-paging", {NULL}, 4595, "udp"}, +{"ias-neighbor", {NULL}, 4596, "tcp"}, +{"ias-neighbor", {NULL}, 4596, "udp"}, +{"a21-an-1xbs", {NULL}, 4597, "tcp"}, +{"a21-an-1xbs", {NULL}, 4597, "udp"}, +{"a16-an-an", {NULL}, 4598, "tcp"}, +{"a16-an-an", {NULL}, 4598, "udp"}, +{"a17-an-an", {NULL}, 4599, "tcp"}, +{"a17-an-an", {NULL}, 4599, "udp"}, +{"piranha1", {NULL}, 4600, "tcp"}, +{"piranha1", {NULL}, 4600, "udp"}, +{"piranha2", {NULL}, 4601, "tcp"}, +{"piranha2", {NULL}, 4601, "udp"}, +{"mtsserver", {NULL}, 4602, "tcp"}, +{"menandmice-upg", {NULL}, 4603, "tcp"}, +{"playsta2-app", {NULL}, 4658, "tcp"}, +{"playsta2-app", {NULL}, 4658, "udp"}, +{"playsta2-lob", {NULL}, 4659, "tcp"}, +{"playsta2-lob", {NULL}, 4659, "udp"}, +{"smaclmgr", {NULL}, 4660, "tcp"}, +{"smaclmgr", {NULL}, 4660, "udp"}, +{"kar2ouche", {NULL}, 4661, "tcp"}, +{"kar2ouche", {NULL}, 4661, "udp"}, +{"oms", {NULL}, 4662, "tcp"}, +{"oms", {NULL}, 4662, "udp"}, +{"noteit", {NULL}, 4663, "tcp"}, +{"noteit", {NULL}, 4663, "udp"}, +{"ems", {NULL}, 4664, "tcp"}, +{"ems", {NULL}, 4664, "udp"}, +{"contclientms", {NULL}, 4665, "tcp"}, +{"contclientms", {NULL}, 4665, "udp"}, +{"eportcomm", {NULL}, 4666, "tcp"}, +{"eportcomm", {NULL}, 4666, "udp"}, +{"mmacomm", {NULL}, 4667, "tcp"}, +{"mmacomm", {NULL}, 4667, "udp"}, +{"mmaeds", {NULL}, 4668, "tcp"}, +{"mmaeds", {NULL}, 4668, "udp"}, +{"eportcommdata", {NULL}, 4669, "tcp"}, +{"eportcommdata", {NULL}, 4669, "udp"}, +{"light", {NULL}, 4670, "tcp"}, +{"light", {NULL}, 4670, "udp"}, +{"acter", {NULL}, 4671, "tcp"}, +{"acter", {NULL}, 4671, "udp"}, +{"rfa", {NULL}, 4672, "tcp"}, +{"rfa", {NULL}, 4672, "udp"}, +{"cxws", {NULL}, 4673, "tcp"}, +{"cxws", {NULL}, 4673, "udp"}, +{"appiq-mgmt", {NULL}, 4674, "tcp"}, +{"appiq-mgmt", {NULL}, 4674, "udp"}, +{"dhct-status", {NULL}, 4675, "tcp"}, +{"dhct-status", {NULL}, 4675, "udp"}, +{"dhct-alerts", {NULL}, 4676, "tcp"}, +{"dhct-alerts", {NULL}, 4676, "udp"}, +{"bcs", {NULL}, 4677, "tcp"}, +{"bcs", {NULL}, 4677, "udp"}, +{"traversal", {NULL}, 4678, "tcp"}, +{"traversal", {NULL}, 4678, "udp"}, +{"mgesupervision", {NULL}, 4679, "tcp"}, +{"mgesupervision", {NULL}, 4679, "udp"}, +{"mgemanagement", {NULL}, 4680, "tcp"}, +{"mgemanagement", {NULL}, 4680, "udp"}, +{"parliant", {NULL}, 4681, "tcp"}, +{"parliant", {NULL}, 4681, "udp"}, +{"finisar", {NULL}, 4682, "tcp"}, +{"finisar", {NULL}, 4682, "udp"}, +{"spike", {NULL}, 4683, "tcp"}, +{"spike", {NULL}, 4683, "udp"}, +{"rfid-rp1", {NULL}, 4684, "tcp"}, +{"rfid-rp1", {NULL}, 4684, "udp"}, +{"autopac", {NULL}, 4685, "tcp"}, +{"autopac", {NULL}, 4685, "udp"}, +{"msp-os", {NULL}, 4686, "tcp"}, +{"msp-os", {NULL}, 4686, "udp"}, +{"nst", {NULL}, 4687, "tcp"}, +{"nst", {NULL}, 4687, "udp"}, +{"mobile-p2p", {NULL}, 4688, "tcp"}, +{"mobile-p2p", {NULL}, 4688, "udp"}, +{"altovacentral", {NULL}, 4689, "tcp"}, +{"altovacentral", {NULL}, 4689, "udp"}, +{"prelude", {NULL}, 4690, "tcp"}, +{"prelude", {NULL}, 4690, "udp"}, +{"mtn", {NULL}, 4691, "tcp"}, +{"mtn", {NULL}, 4691, "udp"}, +{"conspiracy", {NULL}, 4692, "tcp"}, +{"conspiracy", {NULL}, 4692, "udp"}, +{"netxms-agent", {NULL}, 4700, "tcp"}, +{"netxms-agent", {NULL}, 4700, "udp"}, +{"netxms-mgmt", {NULL}, 4701, "tcp"}, +{"netxms-mgmt", {NULL}, 4701, "udp"}, +{"netxms-sync", {NULL}, 4702, "tcp"}, +{"netxms-sync", {NULL}, 4702, "udp"}, +{"npqes-test", {NULL}, 4703, "tcp"}, +{"assuria-ins", {NULL}, 4704, "tcp"}, +{"truckstar", {NULL}, 4725, "tcp"}, +{"truckstar", {NULL}, 4725, "udp"}, +{"a26-fap-fgw", {NULL}, 4726, "udp"}, +{"fcis", {NULL}, 4727, "tcp"}, +{"fcis-disc", {NULL}, 4727, "udp"}, +{"capmux", {NULL}, 4728, "tcp"}, +{"capmux", {NULL}, 4728, "udp"}, +{"gsmtap", {NULL}, 4729, "udp"}, +{"gearman", {NULL}, 4730, "tcp"}, +{"gearman", {NULL}, 4730, "udp"}, +{"remcap", {NULL}, 4731, "tcp"}, +{"ohmtrigger", {NULL}, 4732, "udp"}, +{"resorcs", {NULL}, 4733, "tcp"}, +{"ipdr-sp", {NULL}, 4737, "tcp"}, +{"ipdr-sp", {NULL}, 4737, "udp"}, +{"solera-lpn", {NULL}, 4738, "tcp"}, +{"solera-lpn", {NULL}, 4738, "udp"}, +{"ipfix", {NULL}, 4739, "tcp"}, +{"ipfix", {NULL}, 4739, "udp"}, +{"ipfix", {NULL}, 4739, "sctp"}, +{"ipfixs", {NULL}, 4740, "tcp"}, +{"ipfixs", {NULL}, 4740, "sctp"}, +{"ipfixs", {NULL}, 4740, "udp"}, +{"lumimgrd", {NULL}, 4741, "tcp"}, +{"lumimgrd", {NULL}, 4741, "udp"}, +{"sicct", {NULL}, 4742, "tcp"}, +{"sicct-sdp", {NULL}, 4742, "udp"}, +{"openhpid", {NULL}, 4743, "tcp"}, +{"openhpid", {NULL}, 4743, "udp"}, +{"ifsp", {NULL}, 4744, "tcp"}, +{"ifsp", {NULL}, 4744, "udp"}, +{"fmp", {NULL}, 4745, "tcp"}, +{"fmp", {NULL}, 4745, "udp"}, +{"profilemac", {NULL}, 4749, "tcp"}, +{"profilemac", {NULL}, 4749, "udp"}, +{"ssad", {NULL}, 4750, "tcp"}, +{"ssad", {NULL}, 4750, "udp"}, +{"spocp", {NULL}, 4751, "tcp"}, +{"spocp", {NULL}, 4751, "udp"}, +{"snap", {NULL}, 4752, "tcp"}, +{"snap", {NULL}, 4752, "udp"}, +{"bfd-multi-ctl", {NULL}, 4784, "tcp"}, +{"bfd-multi-ctl", {NULL}, 4784, "udp"}, +{"cncp", {NULL}, 4785, "udp"}, +{"smart-install", {NULL}, 4786, "tcp"}, +{"sia-ctrl-plane", {NULL}, 4787, "tcp"}, +{"iims", {NULL}, 4800, "tcp"}, +{"iims", {NULL}, 4800, "udp"}, +{"iwec", {NULL}, 4801, "tcp"}, +{"iwec", {NULL}, 4801, "udp"}, +{"ilss", {NULL}, 4802, "tcp"}, +{"ilss", {NULL}, 4802, "udp"}, +{"notateit", {NULL}, 4803, "tcp"}, +{"notateit-disc", {NULL}, 4803, "udp"}, +{"aja-ntv4-disc", {NULL}, 4804, "udp"}, +{"htcp", {NULL}, 4827, "tcp"}, +{"htcp", {NULL}, 4827, "udp"}, +{"varadero-0", {NULL}, 4837, "tcp"}, +{"varadero-0", {NULL}, 4837, "udp"}, +{"varadero-1", {NULL}, 4838, "tcp"}, +{"varadero-1", {NULL}, 4838, "udp"}, +{"varadero-2", {NULL}, 4839, "tcp"}, +{"varadero-2", {NULL}, 4839, "udp"}, +{"opcua-tcp", {NULL}, 4840, "tcp"}, +{"opcua-udp", {NULL}, 4840, "udp"}, +{"quosa", {NULL}, 4841, "tcp"}, +{"quosa", {NULL}, 4841, "udp"}, +{"gw-asv", {NULL}, 4842, "tcp"}, +{"gw-asv", {NULL}, 4842, "udp"}, +{"opcua-tls", {NULL}, 4843, "tcp"}, +{"opcua-tls", {NULL}, 4843, "udp"}, +{"gw-log", {NULL}, 4844, "tcp"}, +{"gw-log", {NULL}, 4844, "udp"}, +{"wcr-remlib", {NULL}, 4845, "tcp"}, +{"wcr-remlib", {NULL}, 4845, "udp"}, +{"contamac_icm", {NULL}, 4846, "tcp"}, +{"contamac_icm", {NULL}, 4846, "udp"}, +{"wfc", {NULL}, 4847, "tcp"}, +{"wfc", {NULL}, 4847, "udp"}, +{"appserv-http", {NULL}, 4848, "tcp"}, +{"appserv-http", {NULL}, 4848, "udp"}, +{"appserv-https", {NULL}, 4849, "tcp"}, +{"appserv-https", {NULL}, 4849, "udp"}, +{"sun-as-nodeagt", {NULL}, 4850, "tcp"}, +{"sun-as-nodeagt", {NULL}, 4850, "udp"}, +{"derby-repli", {NULL}, 4851, "tcp"}, +{"derby-repli", {NULL}, 4851, "udp"}, +{"unify-debug", {NULL}, 4867, "tcp"}, +{"unify-debug", {NULL}, 4867, "udp"}, +{"phrelay", {NULL}, 4868, "tcp"}, +{"phrelay", {NULL}, 4868, "udp"}, +{"phrelaydbg", {NULL}, 4869, "tcp"}, +{"phrelaydbg", {NULL}, 4869, "udp"}, +{"cc-tracking", {NULL}, 4870, "tcp"}, +{"cc-tracking", {NULL}, 4870, "udp"}, +{"wired", {NULL}, 4871, "tcp"}, +{"wired", {NULL}, 4871, "udp"}, +{"tritium-can", {NULL}, 4876, "tcp"}, +{"tritium-can", {NULL}, 4876, "udp"}, +{"lmcs", {NULL}, 4877, "tcp"}, +{"lmcs", {NULL}, 4877, "udp"}, +{"inst-discovery", {NULL}, 4878, "udp"}, +{"wsdl-event", {NULL}, 4879, "tcp"}, +{"hislip", {NULL}, 4880, "tcp"}, +{"socp-t", {NULL}, 4881, "udp"}, +{"socp-c", {NULL}, 4882, "udp"}, +{"wmlserver", {NULL}, 4883, "tcp"}, +{"hivestor", {NULL}, 4884, "tcp"}, +{"hivestor", {NULL}, 4884, "udp"}, +{"abbs", {NULL}, 4885, "tcp"}, +{"abbs", {NULL}, 4885, "udp"}, +{"lyskom", {NULL}, 4894, "tcp"}, +{"lyskom", {NULL}, 4894, "udp"}, +{"radmin-port", {NULL}, 4899, "tcp"}, +{"radmin-port", {NULL}, 4899, "udp"}, +{"hfcs", {NULL}, 4900, "tcp"}, +{"hfcs", {NULL}, 4900, "udp"}, +{"flr_agent", {NULL}, 4901, "tcp"}, +{"magiccontrol", {NULL}, 4902, "tcp"}, +{"lutap", {NULL}, 4912, "tcp"}, +{"lutcp", {NULL}, 4913, "tcp"}, +{"bones", {NULL}, 4914, "tcp"}, +{"bones", {NULL}, 4914, "udp"}, +{"frcs", {NULL}, 4915, "tcp"}, +{"atsc-mh-ssc", {NULL}, 4937, "udp"}, +{"eq-office-4940", {NULL}, 4940, "tcp"}, +{"eq-office-4940", {NULL}, 4940, "udp"}, +{"eq-office-4941", {NULL}, 4941, "tcp"}, +{"eq-office-4941", {NULL}, 4941, "udp"}, +{"eq-office-4942", {NULL}, 4942, "tcp"}, +{"eq-office-4942", {NULL}, 4942, "udp"}, +{"munin", {NULL}, 4949, "tcp"}, +{"munin", {NULL}, 4949, "udp"}, +{"sybasesrvmon", {NULL}, 4950, "tcp"}, +{"sybasesrvmon", {NULL}, 4950, "udp"}, +{"pwgwims", {NULL}, 4951, "tcp"}, +{"pwgwims", {NULL}, 4951, "udp"}, +{"sagxtsds", {NULL}, 4952, "tcp"}, +{"sagxtsds", {NULL}, 4952, "udp"}, +{"dbsyncarbiter", {NULL}, 4953, "tcp"}, +{"ccss-qmm", {NULL}, 4969, "tcp"}, +{"ccss-qmm", {NULL}, 4969, "udp"}, +{"ccss-qsm", {NULL}, 4970, "tcp"}, +{"ccss-qsm", {NULL}, 4970, "udp"}, +{"webyast", {NULL}, 4984, "tcp"}, +{"gerhcs", {NULL}, 4985, "tcp"}, +{"mrip", {NULL}, 4986, "tcp"}, +{"mrip", {NULL}, 4986, "udp"}, +{"smar-se-port1", {NULL}, 4987, "tcp"}, +{"smar-se-port1", {NULL}, 4987, "udp"}, +{"smar-se-port2", {NULL}, 4988, "tcp"}, +{"smar-se-port2", {NULL}, 4988, "udp"}, +{"parallel", {NULL}, 4989, "tcp"}, +{"parallel", {NULL}, 4989, "udp"}, +{"busycal", {NULL}, 4990, "tcp"}, +{"busycal", {NULL}, 4990, "udp"}, +{"vrt", {NULL}, 4991, "tcp"}, +{"vrt", {NULL}, 4991, "udp"}, +{"hfcs-manager", {NULL}, 4999, "tcp"}, +{"hfcs-manager", {NULL}, 4999, "udp"}, +{"commplex-main", {NULL}, 5000, "tcp"}, +{"commplex-main", {NULL}, 5000, "udp"}, +{"commplex-link", {NULL}, 5001, "tcp"}, +{"commplex-link", {NULL}, 5001, "udp"}, +{"rfe", {NULL}, 5002, "tcp"}, +{"rfe", {NULL}, 5002, "udp"}, +{"fmpro-internal", {NULL}, 5003, "tcp"}, +{"fmpro-internal", {NULL}, 5003, "udp"}, +{"avt-profile-1", {NULL}, 5004, "tcp"}, +{"avt-profile-1", {NULL}, 5004, "udp"}, +{"avt-profile-1", {NULL}, 5004, "dccp"}, +{"avt-profile-2", {NULL}, 5005, "tcp"}, +{"avt-profile-2", {NULL}, 5005, "udp"}, +{"avt-profile-2", {NULL}, 5005, "dccp"}, +{"wsm-server", {NULL}, 5006, "tcp"}, +{"wsm-server", {NULL}, 5006, "udp"}, +{"wsm-server-ssl", {NULL}, 5007, "tcp"}, +{"wsm-server-ssl", {NULL}, 5007, "udp"}, +{"synapsis-edge", {NULL}, 5008, "tcp"}, +{"synapsis-edge", {NULL}, 5008, "udp"}, +{"winfs", {NULL}, 5009, "tcp"}, +{"winfs", {NULL}, 5009, "udp"}, +{"telelpathstart", {NULL}, 5010, "tcp"}, +{"telelpathstart", {NULL}, 5010, "udp"}, +{"telelpathattack", {NULL}, 5011, "tcp"}, +{"telelpathattack", {NULL}, 5011, "udp"}, +{"nsp", {NULL}, 5012, "tcp"}, +{"nsp", {NULL}, 5012, "udp"}, +{"fmpro-v6", {NULL}, 5013, "tcp"}, +{"fmpro-v6", {NULL}, 5013, "udp"}, +{"onpsocket", {NULL}, 5014, "udp"}, +{"fmwp", {NULL}, 5015, "tcp"}, +{"zenginkyo-1", {NULL}, 5020, "tcp"}, +{"zenginkyo-1", {NULL}, 5020, "udp"}, +{"zenginkyo-2", {NULL}, 5021, "tcp"}, +{"zenginkyo-2", {NULL}, 5021, "udp"}, +{"mice", {NULL}, 5022, "tcp"}, +{"mice", {NULL}, 5022, "udp"}, +{"htuilsrv", {NULL}, 5023, "tcp"}, +{"htuilsrv", {NULL}, 5023, "udp"}, +{"scpi-telnet", {NULL}, 5024, "tcp"}, +{"scpi-telnet", {NULL}, 5024, "udp"}, +{"scpi-raw", {NULL}, 5025, "tcp"}, +{"scpi-raw", {NULL}, 5025, "udp"}, +{"strexec-d", {NULL}, 5026, "tcp"}, +{"strexec-d", {NULL}, 5026, "udp"}, +{"strexec-s", {NULL}, 5027, "tcp"}, +{"strexec-s", {NULL}, 5027, "udp"}, +{"qvr", {NULL}, 5028, "tcp"}, +{"infobright", {NULL}, 5029, "tcp"}, +{"infobright", {NULL}, 5029, "udp"}, +{"surfpass", {NULL}, 5030, "tcp"}, +{"surfpass", {NULL}, 5030, "udp"}, +{"dmp", {NULL}, 5031, "udp"}, +{"asnaacceler8db", {NULL}, 5042, "tcp"}, +{"asnaacceler8db", {NULL}, 5042, "udp"}, +{"swxadmin", {NULL}, 5043, "tcp"}, +{"swxadmin", {NULL}, 5043, "udp"}, +{"lxi-evntsvc", {NULL}, 5044, "tcp"}, +{"lxi-evntsvc", {NULL}, 5044, "udp"}, +{"osp", {NULL}, 5045, "tcp"}, +{"vpm-udp", {NULL}, 5046, "udp"}, +{"iscape", {NULL}, 5047, "udp"}, +{"texai", {NULL}, 5048, "tcp"}, +{"ivocalize", {NULL}, 5049, "tcp"}, +{"ivocalize", {NULL}, 5049, "udp"}, +{"mmcc", {NULL}, 5050, "tcp"}, +{"mmcc", {NULL}, 5050, "udp"}, +{"ita-agent", {NULL}, 5051, "tcp"}, +{"ita-agent", {NULL}, 5051, "udp"}, +{"ita-manager", {NULL}, 5052, "tcp"}, +{"ita-manager", {NULL}, 5052, "udp"}, +{"rlm", {NULL}, 5053, "tcp"}, +{"rlm-admin", {NULL}, 5054, "tcp"}, +{"unot", {NULL}, 5055, "tcp"}, +{"unot", {NULL}, 5055, "udp"}, +{"intecom-ps1", {NULL}, 5056, "tcp"}, +{"intecom-ps1", {NULL}, 5056, "udp"}, +{"intecom-ps2", {NULL}, 5057, "tcp"}, +{"intecom-ps2", {NULL}, 5057, "udp"}, +{"locus-disc", {NULL}, 5058, "udp"}, +{"sds", {NULL}, 5059, "tcp"}, +{"sds", {NULL}, 5059, "udp"}, +{"sip", {NULL}, 5060, "tcp"}, +{"sip", {NULL}, 5060, "udp"}, +{"sip-tls", {NULL}, 5061, "tcp"}, +{"sip-tls", {NULL}, 5061, "udp"}, +{"na-localise", {NULL}, 5062, "tcp"}, +{"na-localise", {NULL}, 5062, "udp"}, +{"csrpc", {NULL}, 5063, "tcp"}, +{"ca-1", {NULL}, 5064, "tcp"}, +{"ca-1", {NULL}, 5064, "udp"}, +{"ca-2", {NULL}, 5065, "tcp"}, +{"ca-2", {NULL}, 5065, "udp"}, +{"stanag-5066", {NULL}, 5066, "tcp"}, +{"stanag-5066", {NULL}, 5066, "udp"}, +{"authentx", {NULL}, 5067, "tcp"}, +{"authentx", {NULL}, 5067, "udp"}, +{"bitforestsrv", {NULL}, 5068, "tcp"}, +{"i-net-2000-npr", {NULL}, 5069, "tcp"}, +{"i-net-2000-npr", {NULL}, 5069, "udp"}, +{"vtsas", {NULL}, 5070, "tcp"}, +{"vtsas", {NULL}, 5070, "udp"}, +{"powerschool", {NULL}, 5071, "tcp"}, +{"powerschool", {NULL}, 5071, "udp"}, +{"ayiya", {NULL}, 5072, "tcp"}, +{"ayiya", {NULL}, 5072, "udp"}, +{"tag-pm", {NULL}, 5073, "tcp"}, +{"tag-pm", {NULL}, 5073, "udp"}, +{"alesquery", {NULL}, 5074, "tcp"}, +{"alesquery", {NULL}, 5074, "udp"}, +{"cp-spxrpts", {NULL}, 5079, "udp"}, +{"onscreen", {NULL}, 5080, "tcp"}, +{"onscreen", {NULL}, 5080, "udp"}, +{"sdl-ets", {NULL}, 5081, "tcp"}, +{"sdl-ets", {NULL}, 5081, "udp"}, +{"qcp", {NULL}, 5082, "tcp"}, +{"qcp", {NULL}, 5082, "udp"}, +{"qfp", {NULL}, 5083, "tcp"}, +{"qfp", {NULL}, 5083, "udp"}, +{"llrp", {NULL}, 5084, "tcp"}, +{"llrp", {NULL}, 5084, "udp"}, +{"encrypted-llrp", {NULL}, 5085, "tcp"}, +{"encrypted-llrp", {NULL}, 5085, "udp"}, +{"aprigo-cs", {NULL}, 5086, "tcp"}, +{"car", {NULL}, 5090, "sctp"}, +{"cxtp", {NULL}, 5091, "sctp"}, +{"magpie", {NULL}, 5092, "udp"}, +{"sentinel-lm", {NULL}, 5093, "tcp"}, +{"sentinel-lm", {NULL}, 5093, "udp"}, +{"hart-ip", {NULL}, 5094, "tcp"}, +{"hart-ip", {NULL}, 5094, "udp"}, +{"sentlm-srv2srv", {NULL}, 5099, "tcp"}, +{"sentlm-srv2srv", {NULL}, 5099, "udp"}, +{"socalia", {NULL}, 5100, "tcp"}, +{"socalia", {NULL}, 5100, "udp"}, +{"talarian-tcp", {NULL}, 5101, "tcp"}, +{"talarian-udp", {NULL}, 5101, "udp"}, +{"oms-nonsecure", {NULL}, 5102, "tcp"}, +{"oms-nonsecure", {NULL}, 5102, "udp"}, +{"actifio-c2c", {NULL}, 5103, "tcp"}, +{"tinymessage", {NULL}, 5104, "udp"}, +{"hughes-ap", {NULL}, 5105, "udp"}, +{"taep-as-svc", {NULL}, 5111, "tcp"}, +{"taep-as-svc", {NULL}, 5111, "udp"}, +{"pm-cmdsvr", {NULL}, 5112, "tcp"}, +{"pm-cmdsvr", {NULL}, 5112, "udp"}, +{"ev-services", {NULL}, 5114, "tcp"}, +{"autobuild", {NULL}, 5115, "tcp"}, +{"emb-proj-cmd", {NULL}, 5116, "udp"}, +{"gradecam", {NULL}, 5117, "tcp"}, +{"nbt-pc", {NULL}, 5133, "tcp"}, +{"nbt-pc", {NULL}, 5133, "udp"}, +{"ppactivation", {NULL}, 5134, "tcp"}, +{"erp-scale", {NULL}, 5135, "tcp"}, +{"minotaur-sa", {NULL}, 5136, "udp"}, +{"ctsd", {NULL}, 5137, "tcp"}, +{"ctsd", {NULL}, 5137, "udp"}, +{"rmonitor_secure", {NULL}, 5145, "tcp"}, +{"rmonitor_secure", {NULL}, 5145, "udp"}, +{"social-alarm", {NULL}, 5146, "tcp"}, +{"atmp", {NULL}, 5150, "tcp"}, +{"atmp", {NULL}, 5150, "udp"}, +{"esri_sde", {NULL}, 5151, "tcp"}, +{"esri_sde", {NULL}, 5151, "udp"}, +{"sde-discovery", {NULL}, 5152, "tcp"}, +{"sde-discovery", {NULL}, 5152, "udp"}, +{"toruxserver", {NULL}, 5153, "tcp"}, +{"bzflag", {NULL}, 5154, "tcp"}, +{"bzflag", {NULL}, 5154, "udp"}, +{"asctrl-agent", {NULL}, 5155, "tcp"}, +{"asctrl-agent", {NULL}, 5155, "udp"}, +{"rugameonline", {NULL}, 5156, "tcp"}, +{"mediat", {NULL}, 5157, "tcp"}, +{"snmpssh", {NULL}, 5161, "tcp"}, +{"snmpssh-trap", {NULL}, 5162, "tcp"}, +{"sbackup", {NULL}, 5163, "tcp"}, +{"vpa", {NULL}, 5164, "tcp"}, +{"vpa-disc", {NULL}, 5164, "udp"}, +{"ife_icorp", {NULL}, 5165, "tcp"}, +{"ife_icorp", {NULL}, 5165, "udp"}, +{"winpcs", {NULL}, 5166, "tcp"}, +{"winpcs", {NULL}, 5166, "udp"}, +{"scte104", {NULL}, 5167, "tcp"}, +{"scte104", {NULL}, 5167, "udp"}, +{"scte30", {NULL}, 5168, "tcp"}, +{"scte30", {NULL}, 5168, "udp"}, +{"aol", {NULL}, 5190, "tcp"}, +{"aol", {NULL}, 5190, "udp"}, +{"aol-1", {NULL}, 5191, "tcp"}, +{"aol-1", {NULL}, 5191, "udp"}, +{"aol-2", {NULL}, 5192, "tcp"}, +{"aol-2", {NULL}, 5192, "udp"}, +{"aol-3", {NULL}, 5193, "tcp"}, +{"aol-3", {NULL}, 5193, "udp"}, +{"cpscomm", {NULL}, 5194, "tcp"}, +{"targus-getdata", {NULL}, 5200, "tcp"}, +{"targus-getdata", {NULL}, 5200, "udp"}, +{"targus-getdata1", {NULL}, 5201, "tcp"}, +{"targus-getdata1", {NULL}, 5201, "udp"}, +{"targus-getdata2", {NULL}, 5202, "tcp"}, +{"targus-getdata2", {NULL}, 5202, "udp"}, +{"targus-getdata3", {NULL}, 5203, "tcp"}, +{"targus-getdata3", {NULL}, 5203, "udp"}, +{"3exmp", {NULL}, 5221, "tcp"}, +{"xmpp-client", {NULL}, 5222, "tcp"}, +{"hpvirtgrp", {NULL}, 5223, "tcp"}, +{"hpvirtgrp", {NULL}, 5223, "udp"}, +{"hpvirtctrl", {NULL}, 5224, "tcp"}, +{"hpvirtctrl", {NULL}, 5224, "udp"}, +{"hp-server", {NULL}, 5225, "tcp"}, +{"hp-server", {NULL}, 5225, "udp"}, +{"hp-status", {NULL}, 5226, "tcp"}, +{"hp-status", {NULL}, 5226, "udp"}, +{"perfd", {NULL}, 5227, "tcp"}, +{"perfd", {NULL}, 5227, "udp"}, +{"hpvroom", {NULL}, 5228, "tcp"}, +{"csedaemon", {NULL}, 5232, "tcp"}, +{"enfs", {NULL}, 5233, "tcp"}, +{"eenet", {NULL}, 5234, "tcp"}, +{"eenet", {NULL}, 5234, "udp"}, +{"galaxy-network", {NULL}, 5235, "tcp"}, +{"galaxy-network", {NULL}, 5235, "udp"}, +{"padl2sim", {NULL}, 5236, "tcp"}, +{"padl2sim", {NULL}, 5236, "udp"}, +{"mnet-discovery", {NULL}, 5237, "tcp"}, +{"mnet-discovery", {NULL}, 5237, "udp"}, +{"downtools", {NULL}, 5245, "tcp"}, +{"downtools-disc", {NULL}, 5245, "udp"}, +{"capwap-control", {NULL}, 5246, "udp"}, +{"capwap-data", {NULL}, 5247, "udp"}, +{"caacws", {NULL}, 5248, "tcp"}, +{"caacws", {NULL}, 5248, "udp"}, +{"caaclang2", {NULL}, 5249, "tcp"}, +{"caaclang2", {NULL}, 5249, "udp"}, +{"soagateway", {NULL}, 5250, "tcp"}, +{"soagateway", {NULL}, 5250, "udp"}, +{"caevms", {NULL}, 5251, "tcp"}, +{"caevms", {NULL}, 5251, "udp"}, +{"movaz-ssc", {NULL}, 5252, "tcp"}, +{"movaz-ssc", {NULL}, 5252, "udp"}, +{"kpdp", {NULL}, 5253, "tcp"}, +{"3com-njack-1", {NULL}, 5264, "tcp"}, +{"3com-njack-1", {NULL}, 5264, "udp"}, +{"3com-njack-2", {NULL}, 5265, "tcp"}, +{"3com-njack-2", {NULL}, 5265, "udp"}, +{"xmpp-server", {NULL}, 5269, "tcp"}, +{"xmp", {NULL}, 5270, "tcp"}, +{"xmp", {NULL}, 5270, "udp"}, +{"cuelink", {NULL}, 5271, "tcp"}, +{"cuelink-disc", {NULL}, 5271, "udp"}, +{"pk", {NULL}, 5272, "tcp"}, +{"pk", {NULL}, 5272, "udp"}, +{"xmpp-bosh", {NULL}, 5280, "tcp"}, +{"undo-lm", {NULL}, 5281, "tcp"}, +{"transmit-port", {NULL}, 5282, "tcp"}, +{"transmit-port", {NULL}, 5282, "udp"}, +{"presence", {NULL}, 5298, "tcp"}, +{"presence", {NULL}, 5298, "udp"}, +{"nlg-data", {NULL}, 5299, "tcp"}, +{"nlg-data", {NULL}, 5299, "udp"}, +{"hacl-hb", {NULL}, 5300, "tcp"}, +{"hacl-hb", {NULL}, 5300, "udp"}, +{"hacl-gs", {NULL}, 5301, "tcp"}, +{"hacl-gs", {NULL}, 5301, "udp"}, +{"hacl-cfg", {NULL}, 5302, "tcp"}, +{"hacl-cfg", {NULL}, 5302, "udp"}, +{"hacl-probe", {NULL}, 5303, "tcp"}, +{"hacl-probe", {NULL}, 5303, "udp"}, +{"hacl-local", {NULL}, 5304, "tcp"}, +{"hacl-local", {NULL}, 5304, "udp"}, +{"hacl-test", {NULL}, 5305, "tcp"}, +{"hacl-test", {NULL}, 5305, "udp"}, +{"sun-mc-grp", {NULL}, 5306, "tcp"}, +{"sun-mc-grp", {NULL}, 5306, "udp"}, +{"sco-aip", {NULL}, 5307, "tcp"}, +{"sco-aip", {NULL}, 5307, "udp"}, +{"cfengine", {NULL}, 5308, "tcp"}, +{"cfengine", {NULL}, 5308, "udp"}, +{"jprinter", {NULL}, 5309, "tcp"}, +{"jprinter", {NULL}, 5309, "udp"}, +{"outlaws", {NULL}, 5310, "tcp"}, +{"outlaws", {NULL}, 5310, "udp"}, +{"permabit-cs", {NULL}, 5312, "tcp"}, +{"permabit-cs", {NULL}, 5312, "udp"}, +{"rrdp", {NULL}, 5313, "tcp"}, +{"rrdp", {NULL}, 5313, "udp"}, +{"opalis-rbt-ipc", {NULL}, 5314, "tcp"}, +{"opalis-rbt-ipc", {NULL}, 5314, "udp"}, +{"hacl-poll", {NULL}, 5315, "tcp"}, +{"hacl-poll", {NULL}, 5315, "udp"}, +{"hpdevms", {NULL}, 5316, "tcp"}, +{"hpdevms", {NULL}, 5316, "udp"}, +{"bsfserver-zn", {NULL}, 5320, "tcp"}, +{"bsfsvr-zn-ssl", {NULL}, 5321, "tcp"}, +{"kfserver", {NULL}, 5343, "tcp"}, +{"kfserver", {NULL}, 5343, "udp"}, +{"xkotodrcp", {NULL}, 5344, "tcp"}, +{"xkotodrcp", {NULL}, 5344, "udp"}, +{"stuns", {NULL}, 5349, "tcp"}, +{"stuns", {NULL}, 5349, "udp"}, +{"turns", {NULL}, 5349, "tcp"}, +{"turns", {NULL}, 5349, "udp"}, +{"stun-behaviors", {NULL}, 5349, "tcp"}, +{"stun-behaviors", {NULL}, 5349, "udp"}, +{"nat-pmp-status", {NULL}, 5350, "tcp"}, +{"nat-pmp-status", {NULL}, 5350, "udp"}, +{"nat-pmp", {NULL}, 5351, "tcp"}, +{"nat-pmp", {NULL}, 5351, "udp"}, +{"dns-llq", {NULL}, 5352, "tcp"}, +{"dns-llq", {NULL}, 5352, "udp"}, +{"mdns", {NULL}, 5353, "tcp"}, +{"mdns", {NULL}, 5353, "udp"}, +{"mdnsresponder", {NULL}, 5354, "tcp"}, +{"mdnsresponder", {NULL}, 5354, "udp"}, +{"llmnr", {NULL}, 5355, "tcp"}, +{"llmnr", {NULL}, 5355, "udp"}, +{"ms-smlbiz", {NULL}, 5356, "tcp"}, +{"ms-smlbiz", {NULL}, 5356, "udp"}, +{"wsdapi", {NULL}, 5357, "tcp"}, +{"wsdapi", {NULL}, 5357, "udp"}, +{"wsdapi-s", {NULL}, 5358, "tcp"}, +{"wsdapi-s", {NULL}, 5358, "udp"}, +{"ms-alerter", {NULL}, 5359, "tcp"}, +{"ms-alerter", {NULL}, 5359, "udp"}, +{"ms-sideshow", {NULL}, 5360, "tcp"}, +{"ms-sideshow", {NULL}, 5360, "udp"}, +{"ms-s-sideshow", {NULL}, 5361, "tcp"}, +{"ms-s-sideshow", {NULL}, 5361, "udp"}, +{"serverwsd2", {NULL}, 5362, "tcp"}, +{"serverwsd2", {NULL}, 5362, "udp"}, +{"net-projection", {NULL}, 5363, "tcp"}, +{"net-projection", {NULL}, 5363, "udp"}, +{"stresstester", {NULL}, 5397, "tcp"}, +{"stresstester", {NULL}, 5397, "udp"}, +{"elektron-admin", {NULL}, 5398, "tcp"}, +{"elektron-admin", {NULL}, 5398, "udp"}, +{"securitychase", {NULL}, 5399, "tcp"}, +{"securitychase", {NULL}, 5399, "udp"}, +{"excerpt", {NULL}, 5400, "tcp"}, +{"excerpt", {NULL}, 5400, "udp"}, +{"excerpts", {NULL}, 5401, "tcp"}, +{"excerpts", {NULL}, 5401, "udp"}, +{"mftp", {NULL}, 5402, "tcp"}, +{"mftp", {NULL}, 5402, "udp"}, +{"hpoms-ci-lstn", {NULL}, 5403, "tcp"}, +{"hpoms-ci-lstn", {NULL}, 5403, "udp"}, +{"hpoms-dps-lstn", {NULL}, 5404, "tcp"}, +{"hpoms-dps-lstn", {NULL}, 5404, "udp"}, +{"netsupport", {NULL}, 5405, "tcp"}, +{"netsupport", {NULL}, 5405, "udp"}, +{"systemics-sox", {NULL}, 5406, "tcp"}, +{"systemics-sox", {NULL}, 5406, "udp"}, +{"foresyte-clear", {NULL}, 5407, "tcp"}, +{"foresyte-clear", {NULL}, 5407, "udp"}, +{"foresyte-sec", {NULL}, 5408, "tcp"}, +{"foresyte-sec", {NULL}, 5408, "udp"}, +{"salient-dtasrv", {NULL}, 5409, "tcp"}, +{"salient-dtasrv", {NULL}, 5409, "udp"}, +{"salient-usrmgr", {NULL}, 5410, "tcp"}, +{"salient-usrmgr", {NULL}, 5410, "udp"}, +{"actnet", {NULL}, 5411, "tcp"}, +{"actnet", {NULL}, 5411, "udp"}, +{"continuus", {NULL}, 5412, "tcp"}, +{"continuus", {NULL}, 5412, "udp"}, +{"wwiotalk", {NULL}, 5413, "tcp"}, +{"wwiotalk", {NULL}, 5413, "udp"}, +{"statusd", {NULL}, 5414, "tcp"}, +{"statusd", {NULL}, 5414, "udp"}, +{"ns-server", {NULL}, 5415, "tcp"}, +{"ns-server", {NULL}, 5415, "udp"}, +{"sns-gateway", {NULL}, 5416, "tcp"}, +{"sns-gateway", {NULL}, 5416, "udp"}, +{"sns-agent", {NULL}, 5417, "tcp"}, +{"sns-agent", {NULL}, 5417, "udp"}, +{"mcntp", {NULL}, 5418, "tcp"}, +{"mcntp", {NULL}, 5418, "udp"}, +{"dj-ice", {NULL}, 5419, "tcp"}, +{"dj-ice", {NULL}, 5419, "udp"}, +{"cylink-c", {NULL}, 5420, "tcp"}, +{"cylink-c", {NULL}, 5420, "udp"}, +{"netsupport2", {NULL}, 5421, "tcp"}, +{"netsupport2", {NULL}, 5421, "udp"}, +{"salient-mux", {NULL}, 5422, "tcp"}, +{"salient-mux", {NULL}, 5422, "udp"}, +{"virtualuser", {NULL}, 5423, "tcp"}, +{"virtualuser", {NULL}, 5423, "udp"}, +{"beyond-remote", {NULL}, 5424, "tcp"}, +{"beyond-remote", {NULL}, 5424, "udp"}, +{"br-channel", {NULL}, 5425, "tcp"}, +{"br-channel", {NULL}, 5425, "udp"}, +{"devbasic", {NULL}, 5426, "tcp"}, +{"devbasic", {NULL}, 5426, "udp"}, +{"sco-peer-tta", {NULL}, 5427, "tcp"}, +{"sco-peer-tta", {NULL}, 5427, "udp"}, +{"telaconsole", {NULL}, 5428, "tcp"}, +{"telaconsole", {NULL}, 5428, "udp"}, +{"base", {NULL}, 5429, "tcp"}, +{"base", {NULL}, 5429, "udp"}, +{"radec-corp", {NULL}, 5430, "tcp"}, +{"radec-corp", {NULL}, 5430, "udp"}, +{"park-agent", {NULL}, 5431, "tcp"}, +{"park-agent", {NULL}, 5431, "udp"}, +{"postgresql", {NULL}, 5432, "tcp"}, +{"postgresql", {NULL}, 5432, "udp"}, +{"pyrrho", {NULL}, 5433, "tcp"}, +{"pyrrho", {NULL}, 5433, "udp"}, +{"sgi-arrayd", {NULL}, 5434, "tcp"}, +{"sgi-arrayd", {NULL}, 5434, "udp"}, +{"sceanics", {NULL}, 5435, "tcp"}, +{"sceanics", {NULL}, 5435, "udp"}, +{"pmip6-cntl", {NULL}, 5436, "udp"}, +{"pmip6-data", {NULL}, 5437, "udp"}, +{"spss", {NULL}, 5443, "tcp"}, +{"spss", {NULL}, 5443, "udp"}, +{"surebox", {NULL}, 5453, "tcp"}, +{"surebox", {NULL}, 5453, "udp"}, +{"apc-5454", {NULL}, 5454, "tcp"}, +{"apc-5454", {NULL}, 5454, "udp"}, +{"apc-5455", {NULL}, 5455, "tcp"}, +{"apc-5455", {NULL}, 5455, "udp"}, +{"apc-5456", {NULL}, 5456, "tcp"}, +{"apc-5456", {NULL}, 5456, "udp"}, +{"silkmeter", {NULL}, 5461, "tcp"}, +{"silkmeter", {NULL}, 5461, "udp"}, +{"ttl-publisher", {NULL}, 5462, "tcp"}, +{"ttl-publisher", {NULL}, 5462, "udp"}, +{"ttlpriceproxy", {NULL}, 5463, "tcp"}, +{"ttlpriceproxy", {NULL}, 5463, "udp"}, +{"quailnet", {NULL}, 5464, "tcp"}, +{"quailnet", {NULL}, 5464, "udp"}, +{"netops-broker", {NULL}, 5465, "tcp"}, +{"netops-broker", {NULL}, 5465, "udp"}, +{"fcp-addr-srvr1", {NULL}, 5500, "tcp"}, +{"fcp-addr-srvr1", {NULL}, 5500, "udp"}, +{"fcp-addr-srvr2", {NULL}, 5501, "tcp"}, +{"fcp-addr-srvr2", {NULL}, 5501, "udp"}, +{"fcp-srvr-inst1", {NULL}, 5502, "tcp"}, +{"fcp-srvr-inst1", {NULL}, 5502, "udp"}, +{"fcp-srvr-inst2", {NULL}, 5503, "tcp"}, +{"fcp-srvr-inst2", {NULL}, 5503, "udp"}, +{"fcp-cics-gw1", {NULL}, 5504, "tcp"}, +{"fcp-cics-gw1", {NULL}, 5504, "udp"}, +{"checkoutdb", {NULL}, 5505, "tcp"}, +{"checkoutdb", {NULL}, 5505, "udp"}, +{"amc", {NULL}, 5506, "tcp"}, +{"amc", {NULL}, 5506, "udp"}, +{"sgi-eventmond", {NULL}, 5553, "tcp"}, +{"sgi-eventmond", {NULL}, 5553, "udp"}, +{"sgi-esphttp", {NULL}, 5554, "tcp"}, +{"sgi-esphttp", {NULL}, 5554, "udp"}, +{"personal-agent", {NULL}, 5555, "tcp"}, +{"personal-agent", {NULL}, 5555, "udp"}, +{"freeciv", {NULL}, 5556, "tcp"}, +{"freeciv", {NULL}, 5556, "udp"}, +{"farenet", {NULL}, 5557, "tcp"}, +{"westec-connect", {NULL}, 5566, "tcp"}, +{"m-oap", {NULL}, 5567, "tcp"}, +{"m-oap", {NULL}, 5567, "udp"}, +{"sdt", {NULL}, 5568, "tcp"}, +{"sdt", {NULL}, 5568, "udp"}, +{"sdmmp", {NULL}, 5573, "tcp"}, +{"sdmmp", {NULL}, 5573, "udp"}, +{"lsi-bobcat", {NULL}, 5574, "tcp"}, +{"ora-oap", {NULL}, 5575, "tcp"}, +{"fdtracks", {NULL}, 5579, "tcp"}, +{"tmosms0", {NULL}, 5580, "tcp"}, +{"tmosms0", {NULL}, 5580, "udp"}, +{"tmosms1", {NULL}, 5581, "tcp"}, +{"tmosms1", {NULL}, 5581, "udp"}, +{"fac-restore", {NULL}, 5582, "tcp"}, +{"fac-restore", {NULL}, 5582, "udp"}, +{"tmo-icon-sync", {NULL}, 5583, "tcp"}, +{"tmo-icon-sync", {NULL}, 5583, "udp"}, +{"bis-web", {NULL}, 5584, "tcp"}, +{"bis-web", {NULL}, 5584, "udp"}, +{"bis-sync", {NULL}, 5585, "tcp"}, +{"bis-sync", {NULL}, 5585, "udp"}, +{"ininmessaging", {NULL}, 5597, "tcp"}, +{"ininmessaging", {NULL}, 5597, "udp"}, +{"mctfeed", {NULL}, 5598, "tcp"}, +{"mctfeed", {NULL}, 5598, "udp"}, +{"esinstall", {NULL}, 5599, "tcp"}, +{"esinstall", {NULL}, 5599, "udp"}, +{"esmmanager", {NULL}, 5600, "tcp"}, +{"esmmanager", {NULL}, 5600, "udp"}, +{"esmagent", {NULL}, 5601, "tcp"}, +{"esmagent", {NULL}, 5601, "udp"}, +{"a1-msc", {NULL}, 5602, "tcp"}, +{"a1-msc", {NULL}, 5602, "udp"}, +{"a1-bs", {NULL}, 5603, "tcp"}, +{"a1-bs", {NULL}, 5603, "udp"}, +{"a3-sdunode", {NULL}, 5604, "tcp"}, +{"a3-sdunode", {NULL}, 5604, "udp"}, +{"a4-sdunode", {NULL}, 5605, "tcp"}, +{"a4-sdunode", {NULL}, 5605, "udp"}, +{"ninaf", {NULL}, 5627, "tcp"}, +{"ninaf", {NULL}, 5627, "udp"}, +{"htrust", {NULL}, 5628, "tcp"}, +{"htrust", {NULL}, 5628, "udp"}, +{"symantec-sfdb", {NULL}, 5629, "tcp"}, +{"symantec-sfdb", {NULL}, 5629, "udp"}, +{"precise-comm", {NULL}, 5630, "tcp"}, +{"precise-comm", {NULL}, 5630, "udp"}, +{"pcanywheredata", {NULL}, 5631, "tcp"}, +{"pcanywheredata", {NULL}, 5631, "udp"}, +{"pcanywherestat", {NULL}, 5632, "tcp"}, +{"pcanywherestat", {NULL}, 5632, "udp"}, +{"beorl", {NULL}, 5633, "tcp"}, +{"beorl", {NULL}, 5633, "udp"}, +{"xprtld", {NULL}, 5634, "tcp"}, +{"xprtld", {NULL}, 5634, "udp"}, +{"sfmsso", {NULL}, 5635, "tcp"}, +{"sfm-db-server", {NULL}, 5636, "tcp"}, +{"cssc", {NULL}, 5637, "tcp"}, +{"amqps", {NULL}, 5671, "tcp"}, +{"amqps", {NULL}, 5671, "udp"}, +{"amqp", {NULL}, 5672, "tcp"}, +{"amqp", {NULL}, 5672, "udp"}, +{"amqp", {NULL}, 5672, "sctp"}, +{"jms", {NULL}, 5673, "tcp"}, +{"jms", {NULL}, 5673, "udp"}, +{"hyperscsi-port", {NULL}, 5674, "tcp"}, +{"hyperscsi-port", {NULL}, 5674, "udp"}, +{"v5ua", {NULL}, 5675, "tcp"}, +{"v5ua", {NULL}, 5675, "udp"}, +{"v5ua", {NULL}, 5675, "sctp"}, +{"raadmin", {NULL}, 5676, "tcp"}, +{"raadmin", {NULL}, 5676, "udp"}, +{"questdb2-lnchr", {NULL}, 5677, "tcp"}, +{"questdb2-lnchr", {NULL}, 5677, "udp"}, +{"rrac", {NULL}, 5678, "tcp"}, +{"rrac", {NULL}, 5678, "udp"}, +{"dccm", {NULL}, 5679, "tcp"}, +{"dccm", {NULL}, 5679, "udp"}, +{"auriga-router", {NULL}, 5680, "tcp"}, +{"auriga-router", {NULL}, 5680, "udp"}, +{"ncxcp", {NULL}, 5681, "tcp"}, +{"ncxcp", {NULL}, 5681, "udp"}, +{"brightcore", {NULL}, 5682, "udp"}, +{"ggz", {NULL}, 5688, "tcp"}, +{"ggz", {NULL}, 5688, "udp"}, +{"qmvideo", {NULL}, 5689, "tcp"}, +{"qmvideo", {NULL}, 5689, "udp"}, +{"proshareaudio", {NULL}, 5713, "tcp"}, +{"proshareaudio", {NULL}, 5713, "udp"}, +{"prosharevideo", {NULL}, 5714, "tcp"}, +{"prosharevideo", {NULL}, 5714, "udp"}, +{"prosharedata", {NULL}, 5715, "tcp"}, +{"prosharedata", {NULL}, 5715, "udp"}, +{"prosharerequest", {NULL}, 5716, "tcp"}, +{"prosharerequest", {NULL}, 5716, "udp"}, +{"prosharenotify", {NULL}, 5717, "tcp"}, +{"prosharenotify", {NULL}, 5717, "udp"}, +{"dpm", {NULL}, 5718, "tcp"}, +{"dpm", {NULL}, 5718, "udp"}, +{"dpm-agent", {NULL}, 5719, "tcp"}, +{"dpm-agent", {NULL}, 5719, "udp"}, +{"ms-licensing", {NULL}, 5720, "tcp"}, +{"ms-licensing", {NULL}, 5720, "udp"}, +{"dtpt", {NULL}, 5721, "tcp"}, +{"dtpt", {NULL}, 5721, "udp"}, +{"msdfsr", {NULL}, 5722, "tcp"}, +{"msdfsr", {NULL}, 5722, "udp"}, +{"omhs", {NULL}, 5723, "tcp"}, +{"omhs", {NULL}, 5723, "udp"}, +{"omsdk", {NULL}, 5724, "tcp"}, +{"omsdk", {NULL}, 5724, "udp"}, +{"ms-ilm", {NULL}, 5725, "tcp"}, +{"ms-ilm-sts", {NULL}, 5726, "tcp"}, +{"asgenf", {NULL}, 5727, "tcp"}, +{"io-dist-data", {NULL}, 5728, "tcp"}, +{"io-dist-group", {NULL}, 5728, "udp"}, +{"openmail", {NULL}, 5729, "tcp"}, +{"openmail", {NULL}, 5729, "udp"}, +{"unieng", {NULL}, 5730, "tcp"}, +{"unieng", {NULL}, 5730, "udp"}, +{"ida-discover1", {NULL}, 5741, "tcp"}, +{"ida-discover1", {NULL}, 5741, "udp"}, +{"ida-discover2", {NULL}, 5742, "tcp"}, +{"ida-discover2", {NULL}, 5742, "udp"}, +{"watchdoc-pod", {NULL}, 5743, "tcp"}, +{"watchdoc-pod", {NULL}, 5743, "udp"}, +{"watchdoc", {NULL}, 5744, "tcp"}, +{"watchdoc", {NULL}, 5744, "udp"}, +{"fcopy-server", {NULL}, 5745, "tcp"}, +{"fcopy-server", {NULL}, 5745, "udp"}, +{"fcopys-server", {NULL}, 5746, "tcp"}, +{"fcopys-server", {NULL}, 5746, "udp"}, +{"tunatic", {NULL}, 5747, "tcp"}, +{"tunatic", {NULL}, 5747, "udp"}, +{"tunalyzer", {NULL}, 5748, "tcp"}, +{"tunalyzer", {NULL}, 5748, "udp"}, +{"rscd", {NULL}, 5750, "tcp"}, +{"rscd", {NULL}, 5750, "udp"}, +{"openmailg", {NULL}, 5755, "tcp"}, +{"openmailg", {NULL}, 5755, "udp"}, +{"x500ms", {NULL}, 5757, "tcp"}, +{"x500ms", {NULL}, 5757, "udp"}, +{"openmailns", {NULL}, 5766, "tcp"}, +{"openmailns", {NULL}, 5766, "udp"}, +{"s-openmail", {NULL}, 5767, "tcp"}, +{"s-openmail", {NULL}, 5767, "udp"}, +{"openmailpxy", {NULL}, 5768, "tcp"}, +{"openmailpxy", {NULL}, 5768, "udp"}, +{"spramsca", {NULL}, 5769, "tcp"}, +{"spramsca", {NULL}, 5769, "udp"}, +{"spramsd", {NULL}, 5770, "tcp"}, +{"spramsd", {NULL}, 5770, "udp"}, +{"netagent", {NULL}, 5771, "tcp"}, +{"netagent", {NULL}, 5771, "udp"}, +{"dali-port", {NULL}, 5777, "tcp"}, +{"dali-port", {NULL}, 5777, "udp"}, +{"vts-rpc", {NULL}, 5780, "tcp"}, +{"3par-evts", {NULL}, 5781, "tcp"}, +{"3par-evts", {NULL}, 5781, "udp"}, +{"3par-mgmt", {NULL}, 5782, "tcp"}, +{"3par-mgmt", {NULL}, 5782, "udp"}, +{"3par-mgmt-ssl", {NULL}, 5783, "tcp"}, +{"3par-mgmt-ssl", {NULL}, 5783, "udp"}, +{"ibar", {NULL}, 5784, "udp"}, +{"3par-rcopy", {NULL}, 5785, "tcp"}, +{"3par-rcopy", {NULL}, 5785, "udp"}, +{"cisco-redu", {NULL}, 5786, "udp"}, +{"waascluster", {NULL}, 5787, "udp"}, +{"xtreamx", {NULL}, 5793, "tcp"}, +{"xtreamx", {NULL}, 5793, "udp"}, +{"spdp", {NULL}, 5794, "udp"}, +{"icmpd", {NULL}, 5813, "tcp"}, +{"icmpd", {NULL}, 5813, "udp"}, +{"spt-automation", {NULL}, 5814, "tcp"}, +{"spt-automation", {NULL}, 5814, "udp"}, +{"wherehoo", {NULL}, 5859, "tcp"}, +{"wherehoo", {NULL}, 5859, "udp"}, +{"ppsuitemsg", {NULL}, 5863, "tcp"}, +{"ppsuitemsg", {NULL}, 5863, "udp"}, +{"rfb", {NULL}, 5900, "tcp"}, +{"rfb", {NULL}, 5900, "udp"}, +{"cm", {NULL}, 5910, "tcp"}, +{"cm", {NULL}, 5910, "udp"}, +{"cpdlc", {NULL}, 5911, "tcp"}, +{"cpdlc", {NULL}, 5911, "udp"}, +{"fis", {NULL}, 5912, "tcp"}, +{"fis", {NULL}, 5912, "udp"}, +{"ads-c", {NULL}, 5913, "tcp"}, +{"ads-c", {NULL}, 5913, "udp"}, +{"indy", {NULL}, 5963, "tcp"}, +{"indy", {NULL}, 5963, "udp"}, +{"mppolicy-v5", {NULL}, 5968, "tcp"}, +{"mppolicy-v5", {NULL}, 5968, "udp"}, +{"mppolicy-mgr", {NULL}, 5969, "tcp"}, +{"mppolicy-mgr", {NULL}, 5969, "udp"}, +{"couchdb", {NULL}, 5984, "tcp"}, +{"couchdb", {NULL}, 5984, "udp"}, +{"wsman", {NULL}, 5985, "tcp"}, +{"wsman", {NULL}, 5985, "udp"}, +{"wsmans", {NULL}, 5986, "tcp"}, +{"wsmans", {NULL}, 5986, "udp"}, +{"wbem-rmi", {NULL}, 5987, "tcp"}, +{"wbem-rmi", {NULL}, 5987, "udp"}, +{"wbem-http", {NULL}, 5988, "tcp"}, +{"wbem-http", {NULL}, 5988, "udp"}, +{"wbem-https", {NULL}, 5989, "tcp"}, +{"wbem-https", {NULL}, 5989, "udp"}, +{"wbem-exp-https", {NULL}, 5990, "tcp"}, +{"wbem-exp-https", {NULL}, 5990, "udp"}, +{"nuxsl", {NULL}, 5991, "tcp"}, +{"nuxsl", {NULL}, 5991, "udp"}, +{"consul-insight", {NULL}, 5992, "tcp"}, +{"consul-insight", {NULL}, 5992, "udp"}, +{"cvsup", {NULL}, 5999, "tcp"}, +{"cvsup", {NULL}, 5999, "udp"}, +{"ndl-ahp-svc", {NULL}, 6064, "tcp"}, +{"ndl-ahp-svc", {NULL}, 6064, "udp"}, +{"winpharaoh", {NULL}, 6065, "tcp"}, +{"winpharaoh", {NULL}, 6065, "udp"}, +{"ewctsp", {NULL}, 6066, "tcp"}, +{"ewctsp", {NULL}, 6066, "udp"}, +{"gsmp", {NULL}, 6068, "tcp"}, +{"gsmp", {NULL}, 6068, "udp"}, +{"trip", {NULL}, 6069, "tcp"}, +{"trip", {NULL}, 6069, "udp"}, +{"messageasap", {NULL}, 6070, "tcp"}, +{"messageasap", {NULL}, 6070, "udp"}, +{"ssdtp", {NULL}, 6071, "tcp"}, +{"ssdtp", {NULL}, 6071, "udp"}, +{"diagnose-proc", {NULL}, 6072, "tcp"}, +{"diagnose-proc", {NULL}, 6072, "udp"}, +{"directplay8", {NULL}, 6073, "tcp"}, +{"directplay8", {NULL}, 6073, "udp"}, +{"max", {NULL}, 6074, "tcp"}, +{"max", {NULL}, 6074, "udp"}, +{"dpm-acm", {NULL}, 6075, "tcp"}, +{"miami-bcast", {NULL}, 6083, "udp"}, +{"p2p-sip", {NULL}, 6084, "tcp"}, +{"konspire2b", {NULL}, 6085, "tcp"}, +{"konspire2b", {NULL}, 6085, "udp"}, +{"pdtp", {NULL}, 6086, "tcp"}, +{"pdtp", {NULL}, 6086, "udp"}, +{"ldss", {NULL}, 6087, "tcp"}, +{"ldss", {NULL}, 6087, "udp"}, +{"raxa-mgmt", {NULL}, 6099, "tcp"}, +{"synchronet-db", {NULL}, 6100, "tcp"}, +{"synchronet-db", {NULL}, 6100, "udp"}, +{"synchronet-rtc", {NULL}, 6101, "tcp"}, +{"synchronet-rtc", {NULL}, 6101, "udp"}, +{"synchronet-upd", {NULL}, 6102, "tcp"}, +{"synchronet-upd", {NULL}, 6102, "udp"}, +{"rets", {NULL}, 6103, "tcp"}, +{"rets", {NULL}, 6103, "udp"}, +{"dbdb", {NULL}, 6104, "tcp"}, +{"dbdb", {NULL}, 6104, "udp"}, +{"primaserver", {NULL}, 6105, "tcp"}, +{"primaserver", {NULL}, 6105, "udp"}, +{"mpsserver", {NULL}, 6106, "tcp"}, +{"mpsserver", {NULL}, 6106, "udp"}, +{"etc-control", {NULL}, 6107, "tcp"}, +{"etc-control", {NULL}, 6107, "udp"}, +{"sercomm-scadmin", {NULL}, 6108, "tcp"}, +{"sercomm-scadmin", {NULL}, 6108, "udp"}, +{"globecast-id", {NULL}, 6109, "tcp"}, +{"globecast-id", {NULL}, 6109, "udp"}, +{"softcm", {NULL}, 6110, "tcp"}, +{"softcm", {NULL}, 6110, "udp"}, +{"spc", {NULL}, 6111, "tcp"}, +{"spc", {NULL}, 6111, "udp"}, +{"dtspcd", {NULL}, 6112, "tcp"}, +{"dtspcd", {NULL}, 6112, "udp"}, +{"dayliteserver", {NULL}, 6113, "tcp"}, +{"wrspice", {NULL}, 6114, "tcp"}, +{"xic", {NULL}, 6115, "tcp"}, +{"xtlserv", {NULL}, 6116, "tcp"}, +{"daylitetouch", {NULL}, 6117, "tcp"}, +{"spdy", {NULL}, 6121, "tcp"}, +{"bex-webadmin", {NULL}, 6122, "tcp"}, +{"bex-webadmin", {NULL}, 6122, "udp"}, +{"backup-express", {NULL}, 6123, "tcp"}, +{"backup-express", {NULL}, 6123, "udp"}, +{"pnbs", {NULL}, 6124, "tcp"}, +{"pnbs", {NULL}, 6124, "udp"}, +{"nbt-wol", {NULL}, 6133, "tcp"}, +{"nbt-wol", {NULL}, 6133, "udp"}, +{"pulsonixnls", {NULL}, 6140, "tcp"}, +{"pulsonixnls", {NULL}, 6140, "udp"}, +{"meta-corp", {NULL}, 6141, "tcp"}, +{"meta-corp", {NULL}, 6141, "udp"}, +{"aspentec-lm", {NULL}, 6142, "tcp"}, +{"aspentec-lm", {NULL}, 6142, "udp"}, +{"watershed-lm", {NULL}, 6143, "tcp"}, +{"watershed-lm", {NULL}, 6143, "udp"}, +{"statsci1-lm", {NULL}, 6144, "tcp"}, +{"statsci1-lm", {NULL}, 6144, "udp"}, +{"statsci2-lm", {NULL}, 6145, "tcp"}, +{"statsci2-lm", {NULL}, 6145, "udp"}, +{"lonewolf-lm", {NULL}, 6146, "tcp"}, +{"lonewolf-lm", {NULL}, 6146, "udp"}, +{"montage-lm", {NULL}, 6147, "tcp"}, +{"montage-lm", {NULL}, 6147, "udp"}, +{"ricardo-lm", {NULL}, 6148, "tcp"}, +{"ricardo-lm", {NULL}, 6148, "udp"}, +{"tal-pod", {NULL}, 6149, "tcp"}, +{"tal-pod", {NULL}, 6149, "udp"}, +{"efb-aci", {NULL}, 6159, "tcp"}, +{"patrol-ism", {NULL}, 6161, "tcp"}, +{"patrol-ism", {NULL}, 6161, "udp"}, +{"patrol-coll", {NULL}, 6162, "tcp"}, +{"patrol-coll", {NULL}, 6162, "udp"}, +{"pscribe", {NULL}, 6163, "tcp"}, +{"pscribe", {NULL}, 6163, "udp"}, +{"lm-x", {NULL}, 6200, "tcp"}, +{"lm-x", {NULL}, 6200, "udp"}, +{"radmind", {NULL}, 6222, "tcp"}, +{"radmind", {NULL}, 6222, "udp"}, +{"jeol-nsdtp-1", {NULL}, 6241, "tcp"}, +{"jeol-nsddp-1", {NULL}, 6241, "udp"}, +{"jeol-nsdtp-2", {NULL}, 6242, "tcp"}, +{"jeol-nsddp-2", {NULL}, 6242, "udp"}, +{"jeol-nsdtp-3", {NULL}, 6243, "tcp"}, +{"jeol-nsddp-3", {NULL}, 6243, "udp"}, +{"jeol-nsdtp-4", {NULL}, 6244, "tcp"}, +{"jeol-nsddp-4", {NULL}, 6244, "udp"}, +{"tl1-raw-ssl", {NULL}, 6251, "tcp"}, +{"tl1-raw-ssl", {NULL}, 6251, "udp"}, +{"tl1-ssh", {NULL}, 6252, "tcp"}, +{"tl1-ssh", {NULL}, 6252, "udp"}, +{"crip", {NULL}, 6253, "tcp"}, +{"crip", {NULL}, 6253, "udp"}, +{"gld", {NULL}, 6267, "tcp"}, +{"grid", {NULL}, 6268, "tcp"}, +{"grid", {NULL}, 6268, "udp"}, +{"grid-alt", {NULL}, 6269, "tcp"}, +{"grid-alt", {NULL}, 6269, "udp"}, +{"bmc-grx", {NULL}, 6300, "tcp"}, +{"bmc-grx", {NULL}, 6300, "udp"}, +{"bmc_ctd_ldap", {NULL}, 6301, "tcp"}, +{"bmc_ctd_ldap", {NULL}, 6301, "udp"}, +{"ufmp", {NULL}, 6306, "tcp"}, +{"ufmp", {NULL}, 6306, "udp"}, +{"scup", {NULL}, 6315, "tcp"}, +{"scup-disc", {NULL}, 6315, "udp"}, +{"abb-escp", {NULL}, 6316, "tcp"}, +{"abb-escp", {NULL}, 6316, "udp"}, +{"repsvc", {NULL}, 6320, "tcp"}, +{"repsvc", {NULL}, 6320, "udp"}, +{"emp-server1", {NULL}, 6321, "tcp"}, +{"emp-server1", {NULL}, 6321, "udp"}, +{"emp-server2", {NULL}, 6322, "tcp"}, +{"emp-server2", {NULL}, 6322, "udp"}, +{"sflow", {NULL}, 6343, "tcp"}, +{"sflow", {NULL}, 6343, "udp"}, +{"gnutella-svc", {NULL}, 6346, "tcp"}, +{"gnutella-svc", {NULL}, 6346, "udp"}, +{"gnutella-rtr", {NULL}, 6347, "tcp"}, +{"gnutella-rtr", {NULL}, 6347, "udp"}, +{"adap", {NULL}, 6350, "tcp"}, +{"adap", {NULL}, 6350, "udp"}, +{"pmcs", {NULL}, 6355, "tcp"}, +{"pmcs", {NULL}, 6355, "udp"}, +{"metaedit-mu", {NULL}, 6360, "tcp"}, +{"metaedit-mu", {NULL}, 6360, "udp"}, +{"metaedit-se", {NULL}, 6370, "tcp"}, +{"metaedit-se", {NULL}, 6370, "udp"}, +{"metatude-mds", {NULL}, 6382, "tcp"}, +{"metatude-mds", {NULL}, 6382, "udp"}, +{"clariion-evr01", {NULL}, 6389, "tcp"}, +{"clariion-evr01", {NULL}, 6389, "udp"}, +{"metaedit-ws", {NULL}, 6390, "tcp"}, +{"metaedit-ws", {NULL}, 6390, "udp"}, +{"faxcomservice", {NULL}, 6417, "tcp"}, +{"faxcomservice", {NULL}, 6417, "udp"}, +{"syserverremote", {NULL}, 6418, "tcp"}, +{"svdrp", {NULL}, 6419, "tcp"}, +{"nim-vdrshell", {NULL}, 6420, "tcp"}, +{"nim-vdrshell", {NULL}, 6420, "udp"}, +{"nim-wan", {NULL}, 6421, "tcp"}, +{"nim-wan", {NULL}, 6421, "udp"}, +{"pgbouncer", {NULL}, 6432, "tcp"}, +{"sun-sr-https", {NULL}, 6443, "tcp"}, +{"sun-sr-https", {NULL}, 6443, "udp"}, +{"sge_qmaster", {NULL}, 6444, "tcp"}, +{"sge_qmaster", {NULL}, 6444, "udp"}, +{"sge_execd", {NULL}, 6445, "tcp"}, +{"sge_execd", {NULL}, 6445, "udp"}, +{"mysql-proxy", {NULL}, 6446, "tcp"}, +{"mysql-proxy", {NULL}, 6446, "udp"}, +{"skip-cert-recv", {NULL}, 6455, "tcp"}, +{"skip-cert-send", {NULL}, 6456, "udp"}, +{"lvision-lm", {NULL}, 6471, "tcp"}, +{"lvision-lm", {NULL}, 6471, "udp"}, +{"sun-sr-http", {NULL}, 6480, "tcp"}, +{"sun-sr-http", {NULL}, 6480, "udp"}, +{"servicetags", {NULL}, 6481, "tcp"}, +{"servicetags", {NULL}, 6481, "udp"}, +{"ldoms-mgmt", {NULL}, 6482, "tcp"}, +{"ldoms-mgmt", {NULL}, 6482, "udp"}, +{"SunVTS-RMI", {NULL}, 6483, "tcp"}, +{"SunVTS-RMI", {NULL}, 6483, "udp"}, +{"sun-sr-jms", {NULL}, 6484, "tcp"}, +{"sun-sr-jms", {NULL}, 6484, "udp"}, +{"sun-sr-iiop", {NULL}, 6485, "tcp"}, +{"sun-sr-iiop", {NULL}, 6485, "udp"}, +{"sun-sr-iiops", {NULL}, 6486, "tcp"}, +{"sun-sr-iiops", {NULL}, 6486, "udp"}, +{"sun-sr-iiop-aut", {NULL}, 6487, "tcp"}, +{"sun-sr-iiop-aut", {NULL}, 6487, "udp"}, +{"sun-sr-jmx", {NULL}, 6488, "tcp"}, +{"sun-sr-jmx", {NULL}, 6488, "udp"}, +{"sun-sr-admin", {NULL}, 6489, "tcp"}, +{"sun-sr-admin", {NULL}, 6489, "udp"}, +{"boks", {NULL}, 6500, "tcp"}, +{"boks", {NULL}, 6500, "udp"}, +{"boks_servc", {NULL}, 6501, "tcp"}, +{"boks_servc", {NULL}, 6501, "udp"}, +{"boks_servm", {NULL}, 6502, "tcp"}, +{"boks_servm", {NULL}, 6502, "udp"}, +{"boks_clntd", {NULL}, 6503, "tcp"}, +{"boks_clntd", {NULL}, 6503, "udp"}, +{"badm_priv", {NULL}, 6505, "tcp"}, +{"badm_priv", {NULL}, 6505, "udp"}, +{"badm_pub", {NULL}, 6506, "tcp"}, +{"badm_pub", {NULL}, 6506, "udp"}, +{"bdir_priv", {NULL}, 6507, "tcp"}, +{"bdir_priv", {NULL}, 6507, "udp"}, +{"bdir_pub", {NULL}, 6508, "tcp"}, +{"bdir_pub", {NULL}, 6508, "udp"}, +{"mgcs-mfp-port", {NULL}, 6509, "tcp"}, +{"mgcs-mfp-port", {NULL}, 6509, "udp"}, +{"mcer-port", {NULL}, 6510, "tcp"}, +{"mcer-port", {NULL}, 6510, "udp"}, +{"netconf-tls", {NULL}, 6513, "tcp"}, +{"syslog-tls", {NULL}, 6514, "tcp"}, +{"syslog-tls", {NULL}, 6514, "udp"}, +{"syslog-tls", {NULL}, 6514, "dccp"}, +{"elipse-rec", {NULL}, 6515, "tcp"}, +{"elipse-rec", {NULL}, 6515, "udp"}, +{"lds-distrib", {NULL}, 6543, "tcp"}, +{"lds-distrib", {NULL}, 6543, "udp"}, +{"lds-dump", {NULL}, 6544, "tcp"}, +{"lds-dump", {NULL}, 6544, "udp"}, +{"apc-6547", {NULL}, 6547, "tcp"}, +{"apc-6547", {NULL}, 6547, "udp"}, +{"apc-6548", {NULL}, 6548, "tcp"}, +{"apc-6548", {NULL}, 6548, "udp"}, +{"apc-6549", {NULL}, 6549, "tcp"}, +{"apc-6549", {NULL}, 6549, "udp"}, +{"fg-sysupdate", {NULL}, 6550, "tcp"}, +{"fg-sysupdate", {NULL}, 6550, "udp"}, +{"sum", {NULL}, 6551, "tcp"}, +{"sum", {NULL}, 6551, "udp"}, +{"xdsxdm", {NULL}, 6558, "tcp"}, +{"xdsxdm", {NULL}, 6558, "udp"}, +{"sane-port", {NULL}, 6566, "tcp"}, +{"sane-port", {NULL}, 6566, "udp"}, +{"esp", {NULL}, 6567, "tcp"}, +{"esp", {NULL}, 6567, "udp"}, +{"canit_store", {NULL}, 6568, "tcp"}, +{"rp-reputation", {NULL}, 6568, "udp"}, +{"affiliate", {NULL}, 6579, "tcp"}, +{"affiliate", {NULL}, 6579, "udp"}, +{"parsec-master", {NULL}, 6580, "tcp"}, +{"parsec-master", {NULL}, 6580, "udp"}, +{"parsec-peer", {NULL}, 6581, "tcp"}, +{"parsec-peer", {NULL}, 6581, "udp"}, +{"parsec-game", {NULL}, 6582, "tcp"}, +{"parsec-game", {NULL}, 6582, "udp"}, +{"joaJewelSuite", {NULL}, 6583, "tcp"}, +{"joaJewelSuite", {NULL}, 6583, "udp"}, +{"mshvlm", {NULL}, 6600, "tcp"}, +{"mstmg-sstp", {NULL}, 6601, "tcp"}, +{"wsscomfrmwk", {NULL}, 6602, "tcp"}, +{"odette-ftps", {NULL}, 6619, "tcp"}, +{"odette-ftps", {NULL}, 6619, "udp"}, +{"kftp-data", {NULL}, 6620, "tcp"}, +{"kftp-data", {NULL}, 6620, "udp"}, +{"kftp", {NULL}, 6621, "tcp"}, +{"kftp", {NULL}, 6621, "udp"}, +{"mcftp", {NULL}, 6622, "tcp"}, +{"mcftp", {NULL}, 6622, "udp"}, +{"ktelnet", {NULL}, 6623, "tcp"}, +{"ktelnet", {NULL}, 6623, "udp"}, +{"datascaler-db", {NULL}, 6624, "tcp"}, +{"datascaler-ctl", {NULL}, 6625, "tcp"}, +{"wago-service", {NULL}, 6626, "tcp"}, +{"wago-service", {NULL}, 6626, "udp"}, +{"nexgen", {NULL}, 6627, "tcp"}, +{"nexgen", {NULL}, 6627, "udp"}, +{"afesc-mc", {NULL}, 6628, "tcp"}, +{"afesc-mc", {NULL}, 6628, "udp"}, +{"mxodbc-connect", {NULL}, 6632, "tcp"}, +{"pcs-sf-ui-man", {NULL}, 6655, "tcp"}, +{"emgmsg", {NULL}, 6656, "tcp"}, +{"palcom-disc", {NULL}, 6657, "udp"}, +{"vocaltec-gold", {NULL}, 6670, "tcp"}, +{"vocaltec-gold", {NULL}, 6670, "udp"}, +{"p4p-portal", {NULL}, 6671, "tcp"}, +{"p4p-portal", {NULL}, 6671, "udp"}, +{"vision_server", {NULL}, 6672, "tcp"}, +{"vision_server", {NULL}, 6672, "udp"}, +{"vision_elmd", {NULL}, 6673, "tcp"}, +{"vision_elmd", {NULL}, 6673, "udp"}, +{"vfbp", {NULL}, 6678, "tcp"}, +{"vfbp-disc", {NULL}, 6678, "udp"}, +{"osaut", {NULL}, 6679, "tcp"}, +{"osaut", {NULL}, 6679, "udp"}, +{"clever-ctrace", {NULL}, 6687, "tcp"}, +{"clever-tcpip", {NULL}, 6688, "tcp"}, +{"tsa", {NULL}, 6689, "tcp"}, +{"tsa", {NULL}, 6689, "udp"}, +{"babel", {NULL}, 6697, "udp"}, +{"kti-icad-srvr", {NULL}, 6701, "tcp"}, +{"kti-icad-srvr", {NULL}, 6701, "udp"}, +{"e-design-net", {NULL}, 6702, "tcp"}, +{"e-design-net", {NULL}, 6702, "udp"}, +{"e-design-web", {NULL}, 6703, "tcp"}, +{"e-design-web", {NULL}, 6703, "udp"}, +{"frc-hp", {NULL}, 6704, "sctp"}, +{"frc-mp", {NULL}, 6705, "sctp"}, +{"frc-lp", {NULL}, 6706, "sctp"}, +{"ibprotocol", {NULL}, 6714, "tcp"}, +{"ibprotocol", {NULL}, 6714, "udp"}, +{"fibotrader-com", {NULL}, 6715, "tcp"}, +{"fibotrader-com", {NULL}, 6715, "udp"}, +{"bmc-perf-agent", {NULL}, 6767, "tcp"}, +{"bmc-perf-agent", {NULL}, 6767, "udp"}, +{"bmc-perf-mgrd", {NULL}, 6768, "tcp"}, +{"bmc-perf-mgrd", {NULL}, 6768, "udp"}, +{"adi-gxp-srvprt", {NULL}, 6769, "tcp"}, +{"adi-gxp-srvprt", {NULL}, 6769, "udp"}, +{"plysrv-http", {NULL}, 6770, "tcp"}, +{"plysrv-http", {NULL}, 6770, "udp"}, +{"plysrv-https", {NULL}, 6771, "tcp"}, +{"plysrv-https", {NULL}, 6771, "udp"}, +{"dgpf-exchg", {NULL}, 6785, "tcp"}, +{"dgpf-exchg", {NULL}, 6785, "udp"}, +{"smc-jmx", {NULL}, 6786, "tcp"}, +{"smc-jmx", {NULL}, 6786, "udp"}, +{"smc-admin", {NULL}, 6787, "tcp"}, +{"smc-admin", {NULL}, 6787, "udp"}, +{"smc-http", {NULL}, 6788, "tcp"}, +{"smc-http", {NULL}, 6788, "udp"}, +{"smc-https", {NULL}, 6789, "tcp"}, +{"smc-https", {NULL}, 6789, "udp"}, +{"hnmp", {NULL}, 6790, "tcp"}, +{"hnmp", {NULL}, 6790, "udp"}, +{"hnm", {NULL}, 6791, "tcp"}, +{"hnm", {NULL}, 6791, "udp"}, +{"acnet", {NULL}, 6801, "tcp"}, +{"acnet", {NULL}, 6801, "udp"}, +{"pentbox-sim", {NULL}, 6817, "tcp"}, +{"ambit-lm", {NULL}, 6831, "tcp"}, +{"ambit-lm", {NULL}, 6831, "udp"}, +{"netmo-default", {NULL}, 6841, "tcp"}, +{"netmo-default", {NULL}, 6841, "udp"}, +{"netmo-http", {NULL}, 6842, "tcp"}, +{"netmo-http", {NULL}, 6842, "udp"}, +{"iccrushmore", {NULL}, 6850, "tcp"}, +{"iccrushmore", {NULL}, 6850, "udp"}, +{"acctopus-cc", {NULL}, 6868, "tcp"}, +{"acctopus-st", {NULL}, 6868, "udp"}, +{"muse", {NULL}, 6888, "tcp"}, +{"muse", {NULL}, 6888, "udp"}, +{"jetstream", {NULL}, 6901, "tcp"}, +{"xsmsvc", {NULL}, 6936, "tcp"}, +{"xsmsvc", {NULL}, 6936, "udp"}, +{"bioserver", {NULL}, 6946, "tcp"}, +{"bioserver", {NULL}, 6946, "udp"}, +{"otlp", {NULL}, 6951, "tcp"}, +{"otlp", {NULL}, 6951, "udp"}, +{"jmact3", {NULL}, 6961, "tcp"}, +{"jmact3", {NULL}, 6961, "udp"}, +{"jmevt2", {NULL}, 6962, "tcp"}, +{"jmevt2", {NULL}, 6962, "udp"}, +{"swismgr1", {NULL}, 6963, "tcp"}, +{"swismgr1", {NULL}, 6963, "udp"}, +{"swismgr2", {NULL}, 6964, "tcp"}, +{"swismgr2", {NULL}, 6964, "udp"}, +{"swistrap", {NULL}, 6965, "tcp"}, +{"swistrap", {NULL}, 6965, "udp"}, +{"swispol", {NULL}, 6966, "tcp"}, +{"swispol", {NULL}, 6966, "udp"}, +{"acmsoda", {NULL}, 6969, "tcp"}, +{"acmsoda", {NULL}, 6969, "udp"}, +{"MobilitySrv", {NULL}, 6997, "tcp"}, +{"MobilitySrv", {NULL}, 6997, "udp"}, +{"iatp-highpri", {NULL}, 6998, "tcp"}, +{"iatp-highpri", {NULL}, 6998, "udp"}, +{"iatp-normalpri", {NULL}, 6999, "tcp"}, +{"iatp-normalpri", {NULL}, 6999, "udp"}, +{"afs3-fileserver", {NULL}, 7000, "tcp"}, +{"afs3-fileserver", {NULL}, 7000, "udp"}, +{"afs3-callback", {NULL}, 7001, "tcp"}, +{"afs3-callback", {NULL}, 7001, "udp"}, +{"afs3-prserver", {NULL}, 7002, "tcp"}, +{"afs3-prserver", {NULL}, 7002, "udp"}, +{"afs3-vlserver", {NULL}, 7003, "tcp"}, +{"afs3-vlserver", {NULL}, 7003, "udp"}, +{"afs3-kaserver", {NULL}, 7004, "tcp"}, +{"afs3-kaserver", {NULL}, 7004, "udp"}, +{"afs3-volser", {NULL}, 7005, "tcp"}, +{"afs3-volser", {NULL}, 7005, "udp"}, +{"afs3-errors", {NULL}, 7006, "tcp"}, +{"afs3-errors", {NULL}, 7006, "udp"}, +{"afs3-bos", {NULL}, 7007, "tcp"}, +{"afs3-bos", {NULL}, 7007, "udp"}, +{"afs3-update", {NULL}, 7008, "tcp"}, +{"afs3-update", {NULL}, 7008, "udp"}, +{"afs3-rmtsys", {NULL}, 7009, "tcp"}, +{"afs3-rmtsys", {NULL}, 7009, "udp"}, +{"ups-onlinet", {NULL}, 7010, "tcp"}, +{"ups-onlinet", {NULL}, 7010, "udp"}, +{"talon-disc", {NULL}, 7011, "tcp"}, +{"talon-disc", {NULL}, 7011, "udp"}, +{"talon-engine", {NULL}, 7012, "tcp"}, +{"talon-engine", {NULL}, 7012, "udp"}, +{"microtalon-dis", {NULL}, 7013, "tcp"}, +{"microtalon-dis", {NULL}, 7013, "udp"}, +{"microtalon-com", {NULL}, 7014, "tcp"}, +{"microtalon-com", {NULL}, 7014, "udp"}, +{"talon-webserver", {NULL}, 7015, "tcp"}, +{"talon-webserver", {NULL}, 7015, "udp"}, +{"dpserve", {NULL}, 7020, "tcp"}, +{"dpserve", {NULL}, 7020, "udp"}, +{"dpserveadmin", {NULL}, 7021, "tcp"}, +{"dpserveadmin", {NULL}, 7021, "udp"}, +{"ctdp", {NULL}, 7022, "tcp"}, +{"ctdp", {NULL}, 7022, "udp"}, +{"ct2nmcs", {NULL}, 7023, "tcp"}, +{"ct2nmcs", {NULL}, 7023, "udp"}, +{"vmsvc", {NULL}, 7024, "tcp"}, +{"vmsvc", {NULL}, 7024, "udp"}, +{"vmsvc-2", {NULL}, 7025, "tcp"}, +{"vmsvc-2", {NULL}, 7025, "udp"}, +{"op-probe", {NULL}, 7030, "tcp"}, +{"op-probe", {NULL}, 7030, "udp"}, +{"arcp", {NULL}, 7070, "tcp"}, +{"arcp", {NULL}, 7070, "udp"}, +{"iwg1", {NULL}, 7071, "tcp"}, +{"iwg1", {NULL}, 7071, "udp"}, +{"empowerid", {NULL}, 7080, "tcp"}, +{"empowerid", {NULL}, 7080, "udp"}, +{"lazy-ptop", {NULL}, 7099, "tcp"}, +{"lazy-ptop", {NULL}, 7099, "udp"}, +{"font-service", {NULL}, 7100, "tcp"}, +{"font-service", {NULL}, 7100, "udp"}, +{"elcn", {NULL}, 7101, "tcp"}, +{"elcn", {NULL}, 7101, "udp"}, +{"aes-x170", {NULL}, 7107, "udp"}, +{"virprot-lm", {NULL}, 7121, "tcp"}, +{"virprot-lm", {NULL}, 7121, "udp"}, +{"scenidm", {NULL}, 7128, "tcp"}, +{"scenidm", {NULL}, 7128, "udp"}, +{"scenccs", {NULL}, 7129, "tcp"}, +{"scenccs", {NULL}, 7129, "udp"}, +{"cabsm-comm", {NULL}, 7161, "tcp"}, +{"cabsm-comm", {NULL}, 7161, "udp"}, +{"caistoragemgr", {NULL}, 7162, "tcp"}, +{"caistoragemgr", {NULL}, 7162, "udp"}, +{"cacsambroker", {NULL}, 7163, "tcp"}, +{"cacsambroker", {NULL}, 7163, "udp"}, +{"fsr", {NULL}, 7164, "tcp"}, +{"fsr", {NULL}, 7164, "udp"}, +{"doc-server", {NULL}, 7165, "tcp"}, +{"doc-server", {NULL}, 7165, "udp"}, +{"aruba-server", {NULL}, 7166, "tcp"}, +{"aruba-server", {NULL}, 7166, "udp"}, +{"casrmagent", {NULL}, 7167, "tcp"}, +{"cnckadserver", {NULL}, 7168, "tcp"}, +{"ccag-pib", {NULL}, 7169, "tcp"}, +{"ccag-pib", {NULL}, 7169, "udp"}, +{"nsrp", {NULL}, 7170, "tcp"}, +{"nsrp", {NULL}, 7170, "udp"}, +{"drm-production", {NULL}, 7171, "tcp"}, +{"drm-production", {NULL}, 7171, "udp"}, +{"zsecure", {NULL}, 7173, "tcp"}, +{"clutild", {NULL}, 7174, "tcp"}, +{"clutild", {NULL}, 7174, "udp"}, +{"fodms", {NULL}, 7200, "tcp"}, +{"fodms", {NULL}, 7200, "udp"}, +{"dlip", {NULL}, 7201, "tcp"}, +{"dlip", {NULL}, 7201, "udp"}, +{"ramp", {NULL}, 7227, "tcp"}, +{"ramp", {NULL}, 7227, "udp"}, +{"citrixupp", {NULL}, 7228, "tcp"}, +{"citrixuppg", {NULL}, 7229, "tcp"}, +{"pads", {NULL}, 7237, "tcp"}, +{"cnap", {NULL}, 7262, "tcp"}, +{"cnap", {NULL}, 7262, "udp"}, +{"watchme-7272", {NULL}, 7272, "tcp"}, +{"watchme-7272", {NULL}, 7272, "udp"}, +{"oma-rlp", {NULL}, 7273, "tcp"}, +{"oma-rlp", {NULL}, 7273, "udp"}, +{"oma-rlp-s", {NULL}, 7274, "tcp"}, +{"oma-rlp-s", {NULL}, 7274, "udp"}, +{"oma-ulp", {NULL}, 7275, "tcp"}, +{"oma-ulp", {NULL}, 7275, "udp"}, +{"oma-ilp", {NULL}, 7276, "tcp"}, +{"oma-ilp", {NULL}, 7276, "udp"}, +{"oma-ilp-s", {NULL}, 7277, "tcp"}, +{"oma-ilp-s", {NULL}, 7277, "udp"}, +{"oma-dcdocbs", {NULL}, 7278, "tcp"}, +{"oma-dcdocbs", {NULL}, 7278, "udp"}, +{"ctxlic", {NULL}, 7279, "tcp"}, +{"ctxlic", {NULL}, 7279, "udp"}, +{"itactionserver1", {NULL}, 7280, "tcp"}, +{"itactionserver1", {NULL}, 7280, "udp"}, +{"itactionserver2", {NULL}, 7281, "tcp"}, +{"itactionserver2", {NULL}, 7281, "udp"}, +{"mzca-action", {NULL}, 7282, "tcp"}, +{"mzca-alert", {NULL}, 7282, "udp"}, +{"lcm-server", {NULL}, 7365, "tcp"}, +{"lcm-server", {NULL}, 7365, "udp"}, +{"mindfilesys", {NULL}, 7391, "tcp"}, +{"mindfilesys", {NULL}, 7391, "udp"}, +{"mrssrendezvous", {NULL}, 7392, "tcp"}, +{"mrssrendezvous", {NULL}, 7392, "udp"}, +{"nfoldman", {NULL}, 7393, "tcp"}, +{"nfoldman", {NULL}, 7393, "udp"}, +{"fse", {NULL}, 7394, "tcp"}, +{"fse", {NULL}, 7394, "udp"}, +{"winqedit", {NULL}, 7395, "tcp"}, +{"winqedit", {NULL}, 7395, "udp"}, +{"hexarc", {NULL}, 7397, "tcp"}, +{"hexarc", {NULL}, 7397, "udp"}, +{"rtps-discovery", {NULL}, 7400, "tcp"}, +{"rtps-discovery", {NULL}, 7400, "udp"}, +{"rtps-dd-ut", {NULL}, 7401, "tcp"}, +{"rtps-dd-ut", {NULL}, 7401, "udp"}, +{"rtps-dd-mt", {NULL}, 7402, "tcp"}, +{"rtps-dd-mt", {NULL}, 7402, "udp"}, +{"ionixnetmon", {NULL}, 7410, "tcp"}, +{"ionixnetmon", {NULL}, 7410, "udp"}, +{"mtportmon", {NULL}, 7421, "tcp"}, +{"mtportmon", {NULL}, 7421, "udp"}, +{"pmdmgr", {NULL}, 7426, "tcp"}, +{"pmdmgr", {NULL}, 7426, "udp"}, +{"oveadmgr", {NULL}, 7427, "tcp"}, +{"oveadmgr", {NULL}, 7427, "udp"}, +{"ovladmgr", {NULL}, 7428, "tcp"}, +{"ovladmgr", {NULL}, 7428, "udp"}, +{"opi-sock", {NULL}, 7429, "tcp"}, +{"opi-sock", {NULL}, 7429, "udp"}, +{"xmpv7", {NULL}, 7430, "tcp"}, +{"xmpv7", {NULL}, 7430, "udp"}, +{"pmd", {NULL}, 7431, "tcp"}, +{"pmd", {NULL}, 7431, "udp"}, +{"faximum", {NULL}, 7437, "tcp"}, +{"faximum", {NULL}, 7437, "udp"}, +{"oracleas-https", {NULL}, 7443, "tcp"}, +{"oracleas-https", {NULL}, 7443, "udp"}, +{"rise", {NULL}, 7473, "tcp"}, +{"rise", {NULL}, 7473, "udp"}, +{"telops-lmd", {NULL}, 7491, "tcp"}, +{"telops-lmd", {NULL}, 7491, "udp"}, +{"silhouette", {NULL}, 7500, "tcp"}, +{"silhouette", {NULL}, 7500, "udp"}, +{"ovbus", {NULL}, 7501, "tcp"}, +{"ovbus", {NULL}, 7501, "udp"}, +{"acplt", {NULL}, 7509, "tcp"}, +{"ovhpas", {NULL}, 7510, "tcp"}, +{"ovhpas", {NULL}, 7510, "udp"}, +{"pafec-lm", {NULL}, 7511, "tcp"}, +{"pafec-lm", {NULL}, 7511, "udp"}, +{"saratoga", {NULL}, 7542, "tcp"}, +{"saratoga", {NULL}, 7542, "udp"}, +{"atul", {NULL}, 7543, "tcp"}, +{"atul", {NULL}, 7543, "udp"}, +{"nta-ds", {NULL}, 7544, "tcp"}, +{"nta-ds", {NULL}, 7544, "udp"}, +{"nta-us", {NULL}, 7545, "tcp"}, +{"nta-us", {NULL}, 7545, "udp"}, +{"cfs", {NULL}, 7546, "tcp"}, +{"cfs", {NULL}, 7546, "udp"}, +{"cwmp", {NULL}, 7547, "tcp"}, +{"cwmp", {NULL}, 7547, "udp"}, +{"tidp", {NULL}, 7548, "tcp"}, +{"tidp", {NULL}, 7548, "udp"}, +{"nls-tl", {NULL}, 7549, "tcp"}, +{"nls-tl", {NULL}, 7549, "udp"}, +{"sncp", {NULL}, 7560, "tcp"}, +{"sncp", {NULL}, 7560, "udp"}, +{"cfw", {NULL}, 7563, "tcp"}, +{"vsi-omega", {NULL}, 7566, "tcp"}, +{"vsi-omega", {NULL}, 7566, "udp"}, +{"dell-eql-asm", {NULL}, 7569, "tcp"}, +{"aries-kfinder", {NULL}, 7570, "tcp"}, +{"aries-kfinder", {NULL}, 7570, "udp"}, +{"sun-lm", {NULL}, 7588, "tcp"}, +{"sun-lm", {NULL}, 7588, "udp"}, +{"indi", {NULL}, 7624, "tcp"}, +{"indi", {NULL}, 7624, "udp"}, +{"simco", {NULL}, 7626, "tcp"}, +{"simco", {NULL}, 7626, "sctp"}, +{"soap-http", {NULL}, 7627, "tcp"}, +{"soap-http", {NULL}, 7627, "udp"}, +{"zen-pawn", {NULL}, 7628, "tcp"}, +{"zen-pawn", {NULL}, 7628, "udp"}, +{"xdas", {NULL}, 7629, "tcp"}, +{"xdas", {NULL}, 7629, "udp"}, +{"hawk", {NULL}, 7630, "tcp"}, +{"tesla-sys-msg", {NULL}, 7631, "tcp"}, +{"pmdfmgt", {NULL}, 7633, "tcp"}, +{"pmdfmgt", {NULL}, 7633, "udp"}, +{"cuseeme", {NULL}, 7648, "tcp"}, +{"cuseeme", {NULL}, 7648, "udp"}, +{"imqstomp", {NULL}, 7672, "tcp"}, +{"imqstomps", {NULL}, 7673, "tcp"}, +{"imqtunnels", {NULL}, 7674, "tcp"}, +{"imqtunnels", {NULL}, 7674, "udp"}, +{"imqtunnel", {NULL}, 7675, "tcp"}, +{"imqtunnel", {NULL}, 7675, "udp"}, +{"imqbrokerd", {NULL}, 7676, "tcp"}, +{"imqbrokerd", {NULL}, 7676, "udp"}, +{"sun-user-https", {NULL}, 7677, "tcp"}, +{"sun-user-https", {NULL}, 7677, "udp"}, +{"pando-pub", {NULL}, 7680, "tcp"}, +{"pando-pub", {NULL}, 7680, "udp"}, +{"collaber", {NULL}, 7689, "tcp"}, +{"collaber", {NULL}, 7689, "udp"}, +{"klio", {NULL}, 7697, "tcp"}, +{"klio", {NULL}, 7697, "udp"}, +{"em7-secom", {NULL}, 7700, "tcp"}, +{"sync-em7", {NULL}, 7707, "tcp"}, +{"sync-em7", {NULL}, 7707, "udp"}, +{"scinet", {NULL}, 7708, "tcp"}, +{"scinet", {NULL}, 7708, "udp"}, +{"medimageportal", {NULL}, 7720, "tcp"}, +{"medimageportal", {NULL}, 7720, "udp"}, +{"nsdeepfreezectl", {NULL}, 7724, "tcp"}, +{"nsdeepfreezectl", {NULL}, 7724, "udp"}, +{"nitrogen", {NULL}, 7725, "tcp"}, +{"nitrogen", {NULL}, 7725, "udp"}, +{"freezexservice", {NULL}, 7726, "tcp"}, +{"freezexservice", {NULL}, 7726, "udp"}, +{"trident-data", {NULL}, 7727, "tcp"}, +{"trident-data", {NULL}, 7727, "udp"}, +{"smip", {NULL}, 7734, "tcp"}, +{"smip", {NULL}, 7734, "udp"}, +{"aiagent", {NULL}, 7738, "tcp"}, +{"aiagent", {NULL}, 7738, "udp"}, +{"scriptview", {NULL}, 7741, "tcp"}, +{"scriptview", {NULL}, 7741, "udp"}, +{"msss", {NULL}, 7742, "tcp"}, +{"sstp-1", {NULL}, 7743, "tcp"}, +{"sstp-1", {NULL}, 7743, "udp"}, +{"raqmon-pdu", {NULL}, 7744, "tcp"}, +{"raqmon-pdu", {NULL}, 7744, "udp"}, +{"prgp", {NULL}, 7747, "tcp"}, +{"prgp", {NULL}, 7747, "udp"}, +{"cbt", {NULL}, 7777, "tcp"}, +{"cbt", {NULL}, 7777, "udp"}, +{"interwise", {NULL}, 7778, "tcp"}, +{"interwise", {NULL}, 7778, "udp"}, +{"vstat", {NULL}, 7779, "tcp"}, +{"vstat", {NULL}, 7779, "udp"}, +{"accu-lmgr", {NULL}, 7781, "tcp"}, +{"accu-lmgr", {NULL}, 7781, "udp"}, +{"minivend", {NULL}, 7786, "tcp"}, +{"minivend", {NULL}, 7786, "udp"}, +{"popup-reminders", {NULL}, 7787, "tcp"}, +{"popup-reminders", {NULL}, 7787, "udp"}, +{"office-tools", {NULL}, 7789, "tcp"}, +{"office-tools", {NULL}, 7789, "udp"}, +{"q3ade", {NULL}, 7794, "tcp"}, +{"q3ade", {NULL}, 7794, "udp"}, +{"pnet-conn", {NULL}, 7797, "tcp"}, +{"pnet-conn", {NULL}, 7797, "udp"}, +{"pnet-enc", {NULL}, 7798, "tcp"}, +{"pnet-enc", {NULL}, 7798, "udp"}, +{"altbsdp", {NULL}, 7799, "tcp"}, +{"altbsdp", {NULL}, 7799, "udp"}, +{"asr", {NULL}, 7800, "tcp"}, +{"asr", {NULL}, 7800, "udp"}, +{"ssp-client", {NULL}, 7801, "tcp"}, +{"ssp-client", {NULL}, 7801, "udp"}, +{"rbt-wanopt", {NULL}, 7810, "tcp"}, +{"rbt-wanopt", {NULL}, 7810, "udp"}, +{"apc-7845", {NULL}, 7845, "tcp"}, +{"apc-7845", {NULL}, 7845, "udp"}, +{"apc-7846", {NULL}, 7846, "tcp"}, +{"apc-7846", {NULL}, 7846, "udp"}, +{"mobileanalyzer", {NULL}, 7869, "tcp"}, +{"rbt-smc", {NULL}, 7870, "tcp"}, +{"pss", {NULL}, 7880, "tcp"}, +{"pss", {NULL}, 7880, "udp"}, +{"ubroker", {NULL}, 7887, "tcp"}, +{"ubroker", {NULL}, 7887, "udp"}, +{"mevent", {NULL}, 7900, "tcp"}, +{"mevent", {NULL}, 7900, "udp"}, +{"tnos-sp", {NULL}, 7901, "tcp"}, +{"tnos-sp", {NULL}, 7901, "udp"}, +{"tnos-dp", {NULL}, 7902, "tcp"}, +{"tnos-dp", {NULL}, 7902, "udp"}, +{"tnos-dps", {NULL}, 7903, "tcp"}, +{"tnos-dps", {NULL}, 7903, "udp"}, +{"qo-secure", {NULL}, 7913, "tcp"}, +{"qo-secure", {NULL}, 7913, "udp"}, +{"t2-drm", {NULL}, 7932, "tcp"}, +{"t2-drm", {NULL}, 7932, "udp"}, +{"t2-brm", {NULL}, 7933, "tcp"}, +{"t2-brm", {NULL}, 7933, "udp"}, +{"supercell", {NULL}, 7967, "tcp"}, +{"supercell", {NULL}, 7967, "udp"}, +{"micromuse-ncps", {NULL}, 7979, "tcp"}, +{"micromuse-ncps", {NULL}, 7979, "udp"}, +{"quest-vista", {NULL}, 7980, "tcp"}, +{"quest-vista", {NULL}, 7980, "udp"}, +{"sossd-collect", {NULL}, 7981, "tcp"}, +{"sossd-agent", {NULL}, 7982, "tcp"}, +{"sossd-disc", {NULL}, 7982, "udp"}, +{"pushns", {NULL}, 7997, "tcp"}, +{"usicontentpush", {NULL}, 7998, "udp"}, +{"irdmi2", {NULL}, 7999, "tcp"}, +{"irdmi2", {NULL}, 7999, "udp"}, +{"irdmi", {NULL}, 8000, "tcp"}, +{"irdmi", {NULL}, 8000, "udp"}, +{"vcom-tunnel", {NULL}, 8001, "tcp"}, +{"vcom-tunnel", {NULL}, 8001, "udp"}, +{"teradataordbms", {NULL}, 8002, "tcp"}, +{"teradataordbms", {NULL}, 8002, "udp"}, +{"mcreport", {NULL}, 8003, "tcp"}, +{"mcreport", {NULL}, 8003, "udp"}, +{"mxi", {NULL}, 8005, "tcp"}, +{"mxi", {NULL}, 8005, "udp"}, +{"http-alt", {NULL}, 8008, "tcp"}, +{"http-alt", {NULL}, 8008, "udp"}, +{"qbdb", {NULL}, 8019, "tcp"}, +{"qbdb", {NULL}, 8019, "udp"}, +{"intu-ec-svcdisc", {NULL}, 8020, "tcp"}, +{"intu-ec-svcdisc", {NULL}, 8020, "udp"}, +{"intu-ec-client", {NULL}, 8021, "tcp"}, +{"intu-ec-client", {NULL}, 8021, "udp"}, +{"oa-system", {NULL}, 8022, "tcp"}, +{"oa-system", {NULL}, 8022, "udp"}, +{"ca-audit-da", {NULL}, 8025, "tcp"}, +{"ca-audit-da", {NULL}, 8025, "udp"}, +{"ca-audit-ds", {NULL}, 8026, "tcp"}, +{"ca-audit-ds", {NULL}, 8026, "udp"}, +{"pro-ed", {NULL}, 8032, "tcp"}, +{"pro-ed", {NULL}, 8032, "udp"}, +{"mindprint", {NULL}, 8033, "tcp"}, +{"mindprint", {NULL}, 8033, "udp"}, +{"vantronix-mgmt", {NULL}, 8034, "tcp"}, +{"vantronix-mgmt", {NULL}, 8034, "udp"}, +{"ampify", {NULL}, 8040, "tcp"}, +{"ampify", {NULL}, 8040, "udp"}, +{"fs-agent", {NULL}, 8042, "tcp"}, +{"fs-server", {NULL}, 8043, "tcp"}, +{"fs-mgmt", {NULL}, 8044, "tcp"}, +{"senomix01", {NULL}, 8052, "tcp"}, +{"senomix01", {NULL}, 8052, "udp"}, +{"senomix02", {NULL}, 8053, "tcp"}, +{"senomix02", {NULL}, 8053, "udp"}, +{"senomix03", {NULL}, 8054, "tcp"}, +{"senomix03", {NULL}, 8054, "udp"}, +{"senomix04", {NULL}, 8055, "tcp"}, +{"senomix04", {NULL}, 8055, "udp"}, +{"senomix05", {NULL}, 8056, "tcp"}, +{"senomix05", {NULL}, 8056, "udp"}, +{"senomix06", {NULL}, 8057, "tcp"}, +{"senomix06", {NULL}, 8057, "udp"}, +{"senomix07", {NULL}, 8058, "tcp"}, +{"senomix07", {NULL}, 8058, "udp"}, +{"senomix08", {NULL}, 8059, "tcp"}, +{"senomix08", {NULL}, 8059, "udp"}, +{"gadugadu", {NULL}, 8074, "tcp"}, +{"gadugadu", {NULL}, 8074, "udp"}, +{"http-alt", {NULL}, 8080, "tcp"}, +{"http-alt", {NULL}, 8080, "udp"}, +{"sunproxyadmin", {NULL}, 8081, "tcp"}, +{"sunproxyadmin", {NULL}, 8081, "udp"}, +{"us-cli", {NULL}, 8082, "tcp"}, +{"us-cli", {NULL}, 8082, "udp"}, +{"us-srv", {NULL}, 8083, "tcp"}, +{"us-srv", {NULL}, 8083, "udp"}, +{"d-s-n", {NULL}, 8086, "tcp"}, +{"d-s-n", {NULL}, 8086, "udp"}, +{"simplifymedia", {NULL}, 8087, "tcp"}, +{"simplifymedia", {NULL}, 8087, "udp"}, +{"radan-http", {NULL}, 8088, "tcp"}, +{"radan-http", {NULL}, 8088, "udp"}, +{"jamlink", {NULL}, 8091, "tcp"}, +{"sac", {NULL}, 8097, "tcp"}, +{"sac", {NULL}, 8097, "udp"}, +{"xprint-server", {NULL}, 8100, "tcp"}, +{"xprint-server", {NULL}, 8100, "udp"}, +{"ldoms-migr", {NULL}, 8101, "tcp"}, +{"mtl8000-matrix", {NULL}, 8115, "tcp"}, +{"mtl8000-matrix", {NULL}, 8115, "udp"}, +{"cp-cluster", {NULL}, 8116, "tcp"}, +{"cp-cluster", {NULL}, 8116, "udp"}, +{"privoxy", {NULL}, 8118, "tcp"}, +{"privoxy", {NULL}, 8118, "udp"}, +{"apollo-data", {NULL}, 8121, "tcp"}, +{"apollo-data", {NULL}, 8121, "udp"}, +{"apollo-admin", {NULL}, 8122, "tcp"}, +{"apollo-admin", {NULL}, 8122, "udp"}, +{"paycash-online", {NULL}, 8128, "tcp"}, +{"paycash-online", {NULL}, 8128, "udp"}, +{"paycash-wbp", {NULL}, 8129, "tcp"}, +{"paycash-wbp", {NULL}, 8129, "udp"}, +{"indigo-vrmi", {NULL}, 8130, "tcp"}, +{"indigo-vrmi", {NULL}, 8130, "udp"}, +{"indigo-vbcp", {NULL}, 8131, "tcp"}, +{"indigo-vbcp", {NULL}, 8131, "udp"}, +{"dbabble", {NULL}, 8132, "tcp"}, +{"dbabble", {NULL}, 8132, "udp"}, +{"isdd", {NULL}, 8148, "tcp"}, +{"isdd", {NULL}, 8148, "udp"}, +{"patrol", {NULL}, 8160, "tcp"}, +{"patrol", {NULL}, 8160, "udp"}, +{"patrol-snmp", {NULL}, 8161, "tcp"}, +{"patrol-snmp", {NULL}, 8161, "udp"}, +{"vmware-fdm", {NULL}, 8182, "tcp"}, +{"vmware-fdm", {NULL}, 8182, "udp"}, +{"proremote", {NULL}, 8183, "tcp"}, +{"itach", {NULL}, 8184, "tcp"}, +{"itach", {NULL}, 8184, "udp"}, +{"spytechphone", {NULL}, 8192, "tcp"}, +{"spytechphone", {NULL}, 8192, "udp"}, +{"blp1", {NULL}, 8194, "tcp"}, +{"blp1", {NULL}, 8194, "udp"}, +{"blp2", {NULL}, 8195, "tcp"}, +{"blp2", {NULL}, 8195, "udp"}, +{"vvr-data", {NULL}, 8199, "tcp"}, +{"vvr-data", {NULL}, 8199, "udp"}, +{"trivnet1", {NULL}, 8200, "tcp"}, +{"trivnet1", {NULL}, 8200, "udp"}, +{"trivnet2", {NULL}, 8201, "tcp"}, +{"trivnet2", {NULL}, 8201, "udp"}, +{"lm-perfworks", {NULL}, 8204, "tcp"}, +{"lm-perfworks", {NULL}, 8204, "udp"}, +{"lm-instmgr", {NULL}, 8205, "tcp"}, +{"lm-instmgr", {NULL}, 8205, "udp"}, +{"lm-dta", {NULL}, 8206, "tcp"}, +{"lm-dta", {NULL}, 8206, "udp"}, +{"lm-sserver", {NULL}, 8207, "tcp"}, +{"lm-sserver", {NULL}, 8207, "udp"}, +{"lm-webwatcher", {NULL}, 8208, "tcp"}, +{"lm-webwatcher", {NULL}, 8208, "udp"}, +{"rexecj", {NULL}, 8230, "tcp"}, +{"rexecj", {NULL}, 8230, "udp"}, +{"synapse-nhttps", {NULL}, 8243, "tcp"}, +{"synapse-nhttps", {NULL}, 8243, "udp"}, +{"pando-sec", {NULL}, 8276, "tcp"}, +{"pando-sec", {NULL}, 8276, "udp"}, +{"synapse-nhttp", {NULL}, 8280, "tcp"}, +{"synapse-nhttp", {NULL}, 8280, "udp"}, +{"blp3", {NULL}, 8292, "tcp"}, +{"blp3", {NULL}, 8292, "udp"}, +{"hiperscan-id", {NULL}, 8293, "tcp"}, +{"blp4", {NULL}, 8294, "tcp"}, +{"blp4", {NULL}, 8294, "udp"}, +{"tmi", {NULL}, 8300, "tcp"}, +{"tmi", {NULL}, 8300, "udp"}, +{"amberon", {NULL}, 8301, "tcp"}, +{"amberon", {NULL}, 8301, "udp"}, +{"tnp-discover", {NULL}, 8320, "tcp"}, +{"tnp-discover", {NULL}, 8320, "udp"}, +{"tnp", {NULL}, 8321, "tcp"}, +{"tnp", {NULL}, 8321, "udp"}, +{"server-find", {NULL}, 8351, "tcp"}, +{"server-find", {NULL}, 8351, "udp"}, +{"cruise-enum", {NULL}, 8376, "tcp"}, +{"cruise-enum", {NULL}, 8376, "udp"}, +{"cruise-swroute", {NULL}, 8377, "tcp"}, +{"cruise-swroute", {NULL}, 8377, "udp"}, +{"cruise-config", {NULL}, 8378, "tcp"}, +{"cruise-config", {NULL}, 8378, "udp"}, +{"cruise-diags", {NULL}, 8379, "tcp"}, +{"cruise-diags", {NULL}, 8379, "udp"}, +{"cruise-update", {NULL}, 8380, "tcp"}, +{"cruise-update", {NULL}, 8380, "udp"}, +{"m2mservices", {NULL}, 8383, "tcp"}, +{"m2mservices", {NULL}, 8383, "udp"}, +{"cvd", {NULL}, 8400, "tcp"}, +{"cvd", {NULL}, 8400, "udp"}, +{"sabarsd", {NULL}, 8401, "tcp"}, +{"sabarsd", {NULL}, 8401, "udp"}, +{"abarsd", {NULL}, 8402, "tcp"}, +{"abarsd", {NULL}, 8402, "udp"}, +{"admind", {NULL}, 8403, "tcp"}, +{"admind", {NULL}, 8403, "udp"}, +{"svcloud", {NULL}, 8404, "tcp"}, +{"svbackup", {NULL}, 8405, "tcp"}, +{"espeech", {NULL}, 8416, "tcp"}, +{"espeech", {NULL}, 8416, "udp"}, +{"espeech-rtp", {NULL}, 8417, "tcp"}, +{"espeech-rtp", {NULL}, 8417, "udp"}, +{"cybro-a-bus", {NULL}, 8442, "tcp"}, +{"cybro-a-bus", {NULL}, 8442, "udp"}, +{"pcsync-https", {NULL}, 8443, "tcp"}, +{"pcsync-https", {NULL}, 8443, "udp"}, +{"pcsync-http", {NULL}, 8444, "tcp"}, +{"pcsync-http", {NULL}, 8444, "udp"}, +{"npmp", {NULL}, 8450, "tcp"}, +{"npmp", {NULL}, 8450, "udp"}, +{"cisco-avp", {NULL}, 8470, "tcp"}, +{"pim-port", {NULL}, 8471, "tcp"}, +{"pim-port", {NULL}, 8471, "sctp"}, +{"otv", {NULL}, 8472, "tcp"}, +{"otv", {NULL}, 8472, "udp"}, +{"vp2p", {NULL}, 8473, "tcp"}, +{"vp2p", {NULL}, 8473, "udp"}, +{"noteshare", {NULL}, 8474, "tcp"}, +{"noteshare", {NULL}, 8474, "udp"}, +{"fmtp", {NULL}, 8500, "tcp"}, +{"fmtp", {NULL}, 8500, "udp"}, +{"rtsp-alt", {NULL}, 8554, "tcp"}, +{"rtsp-alt", {NULL}, 8554, "udp"}, +{"d-fence", {NULL}, 8555, "tcp"}, +{"d-fence", {NULL}, 8555, "udp"}, +{"oap-admin", {NULL}, 8567, "tcp"}, +{"oap-admin", {NULL}, 8567, "udp"}, +{"asterix", {NULL}, 8600, "tcp"}, +{"asterix", {NULL}, 8600, "udp"}, +{"canon-mfnp", {NULL}, 8610, "tcp"}, +{"canon-mfnp", {NULL}, 8610, "udp"}, +{"canon-bjnp1", {NULL}, 8611, "tcp"}, +{"canon-bjnp1", {NULL}, 8611, "udp"}, +{"canon-bjnp2", {NULL}, 8612, "tcp"}, +{"canon-bjnp2", {NULL}, 8612, "udp"}, +{"canon-bjnp3", {NULL}, 8613, "tcp"}, +{"canon-bjnp3", {NULL}, 8613, "udp"}, +{"canon-bjnp4", {NULL}, 8614, "tcp"}, +{"canon-bjnp4", {NULL}, 8614, "udp"}, +{"sun-as-jmxrmi", {NULL}, 8686, "tcp"}, +{"sun-as-jmxrmi", {NULL}, 8686, "udp"}, +{"vnyx", {NULL}, 8699, "tcp"}, +{"vnyx", {NULL}, 8699, "udp"}, +{"dtp-net", {NULL}, 8732, "udp"}, +{"ibus", {NULL}, 8733, "tcp"}, +{"ibus", {NULL}, 8733, "udp"}, +{"mc-appserver", {NULL}, 8763, "tcp"}, +{"mc-appserver", {NULL}, 8763, "udp"}, +{"openqueue", {NULL}, 8764, "tcp"}, +{"openqueue", {NULL}, 8764, "udp"}, +{"ultraseek-http", {NULL}, 8765, "tcp"}, +{"ultraseek-http", {NULL}, 8765, "udp"}, +{"dpap", {NULL}, 8770, "tcp"}, +{"dpap", {NULL}, 8770, "udp"}, +{"msgclnt", {NULL}, 8786, "tcp"}, +{"msgclnt", {NULL}, 8786, "udp"}, +{"msgsrvr", {NULL}, 8787, "tcp"}, +{"msgsrvr", {NULL}, 8787, "udp"}, +{"sunwebadmin", {NULL}, 8800, "tcp"}, +{"sunwebadmin", {NULL}, 8800, "udp"}, +{"truecm", {NULL}, 8804, "tcp"}, +{"truecm", {NULL}, 8804, "udp"}, +{"dxspider", {NULL}, 8873, "tcp"}, +{"dxspider", {NULL}, 8873, "udp"}, +{"cddbp-alt", {NULL}, 8880, "tcp"}, +{"cddbp-alt", {NULL}, 8880, "udp"}, +{"secure-mqtt", {NULL}, 8883, "tcp"}, +{"secure-mqtt", {NULL}, 8883, "udp"}, +{"ddi-tcp-1", {NULL}, 8888, "tcp"}, +{"ddi-udp-1", {NULL}, 8888, "udp"}, +{"ddi-tcp-2", {NULL}, 8889, "tcp"}, +{"ddi-udp-2", {NULL}, 8889, "udp"}, +{"ddi-tcp-3", {NULL}, 8890, "tcp"}, +{"ddi-udp-3", {NULL}, 8890, "udp"}, +{"ddi-tcp-4", {NULL}, 8891, "tcp"}, +{"ddi-udp-4", {NULL}, 8891, "udp"}, +{"ddi-tcp-5", {NULL}, 8892, "tcp"}, +{"ddi-udp-5", {NULL}, 8892, "udp"}, +{"ddi-tcp-6", {NULL}, 8893, "tcp"}, +{"ddi-udp-6", {NULL}, 8893, "udp"}, +{"ddi-tcp-7", {NULL}, 8894, "tcp"}, +{"ddi-udp-7", {NULL}, 8894, "udp"}, +{"ospf-lite", {NULL}, 8899, "tcp"}, +{"ospf-lite", {NULL}, 8899, "udp"}, +{"jmb-cds1", {NULL}, 8900, "tcp"}, +{"jmb-cds1", {NULL}, 8900, "udp"}, +{"jmb-cds2", {NULL}, 8901, "tcp"}, +{"jmb-cds2", {NULL}, 8901, "udp"}, +{"manyone-http", {NULL}, 8910, "tcp"}, +{"manyone-http", {NULL}, 8910, "udp"}, +{"manyone-xml", {NULL}, 8911, "tcp"}, +{"manyone-xml", {NULL}, 8911, "udp"}, +{"wcbackup", {NULL}, 8912, "tcp"}, +{"wcbackup", {NULL}, 8912, "udp"}, +{"dragonfly", {NULL}, 8913, "tcp"}, +{"dragonfly", {NULL}, 8913, "udp"}, +{"twds", {NULL}, 8937, "tcp"}, +{"cumulus-admin", {NULL}, 8954, "tcp"}, +{"cumulus-admin", {NULL}, 8954, "udp"}, +{"sunwebadmins", {NULL}, 8989, "tcp"}, +{"sunwebadmins", {NULL}, 8989, "udp"}, +{"http-wmap", {NULL}, 8990, "tcp"}, +{"http-wmap", {NULL}, 8990, "udp"}, +{"https-wmap", {NULL}, 8991, "tcp"}, +{"https-wmap", {NULL}, 8991, "udp"}, +{"bctp", {NULL}, 8999, "tcp"}, +{"bctp", {NULL}, 8999, "udp"}, +{"cslistener", {NULL}, 9000, "tcp"}, +{"cslistener", {NULL}, 9000, "udp"}, +{"etlservicemgr", {NULL}, 9001, "tcp"}, +{"etlservicemgr", {NULL}, 9001, "udp"}, +{"dynamid", {NULL}, 9002, "tcp"}, +{"dynamid", {NULL}, 9002, "udp"}, +{"ogs-client", {NULL}, 9007, "udp"}, +{"ogs-server", {NULL}, 9008, "tcp"}, +{"pichat", {NULL}, 9009, "tcp"}, +{"pichat", {NULL}, 9009, "udp"}, +{"sdr", {NULL}, 9010, "tcp"}, +{"tambora", {NULL}, 9020, "tcp"}, +{"tambora", {NULL}, 9020, "udp"}, +{"panagolin-ident", {NULL}, 9021, "tcp"}, +{"panagolin-ident", {NULL}, 9021, "udp"}, +{"paragent", {NULL}, 9022, "tcp"}, +{"paragent", {NULL}, 9022, "udp"}, +{"swa-1", {NULL}, 9023, "tcp"}, +{"swa-1", {NULL}, 9023, "udp"}, +{"swa-2", {NULL}, 9024, "tcp"}, +{"swa-2", {NULL}, 9024, "udp"}, +{"swa-3", {NULL}, 9025, "tcp"}, +{"swa-3", {NULL}, 9025, "udp"}, +{"swa-4", {NULL}, 9026, "tcp"}, +{"swa-4", {NULL}, 9026, "udp"}, +{"versiera", {NULL}, 9050, "tcp"}, +{"fio-cmgmt", {NULL}, 9051, "tcp"}, +{"glrpc", {NULL}, 9080, "tcp"}, +{"glrpc", {NULL}, 9080, "udp"}, +{"lcs-ap", {NULL}, 9082, "sctp"}, +{"emc-pp-mgmtsvc", {NULL}, 9083, "tcp"}, +{"aurora", {NULL}, 9084, "tcp"}, +{"aurora", {NULL}, 9084, "udp"}, +{"aurora", {NULL}, 9084, "sctp"}, +{"ibm-rsyscon", {NULL}, 9085, "tcp"}, +{"ibm-rsyscon", {NULL}, 9085, "udp"}, +{"net2display", {NULL}, 9086, "tcp"}, +{"net2display", {NULL}, 9086, "udp"}, +{"classic", {NULL}, 9087, "tcp"}, +{"classic", {NULL}, 9087, "udp"}, +{"sqlexec", {NULL}, 9088, "tcp"}, +{"sqlexec", {NULL}, 9088, "udp"}, +{"sqlexec-ssl", {NULL}, 9089, "tcp"}, +{"sqlexec-ssl", {NULL}, 9089, "udp"}, +{"websm", {NULL}, 9090, "tcp"}, +{"websm", {NULL}, 9090, "udp"}, +{"xmltec-xmlmail", {NULL}, 9091, "tcp"}, +{"xmltec-xmlmail", {NULL}, 9091, "udp"}, +{"XmlIpcRegSvc", {NULL}, 9092, "tcp"}, +{"XmlIpcRegSvc", {NULL}, 9092, "udp"}, +{"hp-pdl-datastr", {NULL}, 9100, "tcp"}, +{"hp-pdl-datastr", {NULL}, 9100, "udp"}, +{"pdl-datastream", {NULL}, 9100, "tcp"}, +{"pdl-datastream", {NULL}, 9100, "udp"}, +{"bacula-dir", {NULL}, 9101, "tcp"}, +{"bacula-dir", {NULL}, 9101, "udp"}, +{"bacula-fd", {NULL}, 9102, "tcp"}, +{"bacula-fd", {NULL}, 9102, "udp"}, +{"bacula-sd", {NULL}, 9103, "tcp"}, +{"bacula-sd", {NULL}, 9103, "udp"}, +{"peerwire", {NULL}, 9104, "tcp"}, +{"peerwire", {NULL}, 9104, "udp"}, +{"xadmin", {NULL}, 9105, "tcp"}, +{"xadmin", {NULL}, 9105, "udp"}, +{"astergate", {NULL}, 9106, "tcp"}, +{"astergate-disc", {NULL}, 9106, "udp"}, +{"astergatefax", {NULL}, 9107, "tcp"}, +{"mxit", {NULL}, 9119, "tcp"}, +{"mxit", {NULL}, 9119, "udp"}, +{"dddp", {NULL}, 9131, "tcp"}, +{"dddp", {NULL}, 9131, "udp"}, +{"apani1", {NULL}, 9160, "tcp"}, +{"apani1", {NULL}, 9160, "udp"}, +{"apani2", {NULL}, 9161, "tcp"}, +{"apani2", {NULL}, 9161, "udp"}, +{"apani3", {NULL}, 9162, "tcp"}, +{"apani3", {NULL}, 9162, "udp"}, +{"apani4", {NULL}, 9163, "tcp"}, +{"apani4", {NULL}, 9163, "udp"}, +{"apani5", {NULL}, 9164, "tcp"}, +{"apani5", {NULL}, 9164, "udp"}, +{"sun-as-jpda", {NULL}, 9191, "tcp"}, +{"sun-as-jpda", {NULL}, 9191, "udp"}, +{"wap-wsp", {NULL}, 9200, "tcp"}, +{"wap-wsp", {NULL}, 9200, "udp"}, +{"wap-wsp-wtp", {NULL}, 9201, "tcp"}, +{"wap-wsp-wtp", {NULL}, 9201, "udp"}, +{"wap-wsp-s", {NULL}, 9202, "tcp"}, +{"wap-wsp-s", {NULL}, 9202, "udp"}, +{"wap-wsp-wtp-s", {NULL}, 9203, "tcp"}, +{"wap-wsp-wtp-s", {NULL}, 9203, "udp"}, +{"wap-vcard", {NULL}, 9204, "tcp"}, +{"wap-vcard", {NULL}, 9204, "udp"}, +{"wap-vcal", {NULL}, 9205, "tcp"}, +{"wap-vcal", {NULL}, 9205, "udp"}, +{"wap-vcard-s", {NULL}, 9206, "tcp"}, +{"wap-vcard-s", {NULL}, 9206, "udp"}, +{"wap-vcal-s", {NULL}, 9207, "tcp"}, +{"wap-vcal-s", {NULL}, 9207, "udp"}, +{"rjcdb-vcards", {NULL}, 9208, "tcp"}, +{"rjcdb-vcards", {NULL}, 9208, "udp"}, +{"almobile-system", {NULL}, 9209, "tcp"}, +{"almobile-system", {NULL}, 9209, "udp"}, +{"oma-mlp", {NULL}, 9210, "tcp"}, +{"oma-mlp", {NULL}, 9210, "udp"}, +{"oma-mlp-s", {NULL}, 9211, "tcp"}, +{"oma-mlp-s", {NULL}, 9211, "udp"}, +{"serverviewdbms", {NULL}, 9212, "tcp"}, +{"serverviewdbms", {NULL}, 9212, "udp"}, +{"serverstart", {NULL}, 9213, "tcp"}, +{"serverstart", {NULL}, 9213, "udp"}, +{"ipdcesgbs", {NULL}, 9214, "tcp"}, +{"ipdcesgbs", {NULL}, 9214, "udp"}, +{"insis", {NULL}, 9215, "tcp"}, +{"insis", {NULL}, 9215, "udp"}, +{"acme", {NULL}, 9216, "tcp"}, +{"acme", {NULL}, 9216, "udp"}, +{"fsc-port", {NULL}, 9217, "tcp"}, +{"fsc-port", {NULL}, 9217, "udp"}, +{"teamcoherence", {NULL}, 9222, "tcp"}, +{"teamcoherence", {NULL}, 9222, "udp"}, +{"mon", {NULL}, 9255, "tcp"}, +{"mon", {NULL}, 9255, "udp"}, +{"pegasus", {NULL}, 9278, "tcp"}, +{"pegasus", {NULL}, 9278, "udp"}, +{"pegasus-ctl", {NULL}, 9279, "tcp"}, +{"pegasus-ctl", {NULL}, 9279, "udp"}, +{"pgps", {NULL}, 9280, "tcp"}, +{"pgps", {NULL}, 9280, "udp"}, +{"swtp-port1", {NULL}, 9281, "tcp"}, +{"swtp-port1", {NULL}, 9281, "udp"}, +{"swtp-port2", {NULL}, 9282, "tcp"}, +{"swtp-port2", {NULL}, 9282, "udp"}, +{"callwaveiam", {NULL}, 9283, "tcp"}, +{"callwaveiam", {NULL}, 9283, "udp"}, +{"visd", {NULL}, 9284, "tcp"}, +{"visd", {NULL}, 9284, "udp"}, +{"n2h2server", {NULL}, 9285, "tcp"}, +{"n2h2server", {NULL}, 9285, "udp"}, +{"n2receive", {NULL}, 9286, "udp"}, +{"cumulus", {NULL}, 9287, "tcp"}, +{"cumulus", {NULL}, 9287, "udp"}, +{"armtechdaemon", {NULL}, 9292, "tcp"}, +{"armtechdaemon", {NULL}, 9292, "udp"}, +{"storview", {NULL}, 9293, "tcp"}, +{"storview", {NULL}, 9293, "udp"}, +{"armcenterhttp", {NULL}, 9294, "tcp"}, +{"armcenterhttp", {NULL}, 9294, "udp"}, +{"armcenterhttps", {NULL}, 9295, "tcp"}, +{"armcenterhttps", {NULL}, 9295, "udp"}, +{"vrace", {NULL}, 9300, "tcp"}, +{"vrace", {NULL}, 9300, "udp"}, +{"sphinxql", {NULL}, 9306, "tcp"}, +{"sphinxapi", {NULL}, 9312, "tcp"}, +{"secure-ts", {NULL}, 9318, "tcp"}, +{"secure-ts", {NULL}, 9318, "udp"}, +{"guibase", {NULL}, 9321, "tcp"}, +{"guibase", {NULL}, 9321, "udp"}, +{"mpidcmgr", {NULL}, 9343, "tcp"}, +{"mpidcmgr", {NULL}, 9343, "udp"}, +{"mphlpdmc", {NULL}, 9344, "tcp"}, +{"mphlpdmc", {NULL}, 9344, "udp"}, +{"ctechlicensing", {NULL}, 9346, "tcp"}, +{"ctechlicensing", {NULL}, 9346, "udp"}, +{"fjdmimgr", {NULL}, 9374, "tcp"}, +{"fjdmimgr", {NULL}, 9374, "udp"}, +{"boxp", {NULL}, 9380, "tcp"}, +{"boxp", {NULL}, 9380, "udp"}, +{"d2dconfig", {NULL}, 9387, "tcp"}, +{"d2ddatatrans", {NULL}, 9388, "tcp"}, +{"adws", {NULL}, 9389, "tcp"}, +{"otp", {NULL}, 9390, "tcp"}, +{"fjinvmgr", {NULL}, 9396, "tcp"}, +{"fjinvmgr", {NULL}, 9396, "udp"}, +{"mpidcagt", {NULL}, 9397, "tcp"}, +{"mpidcagt", {NULL}, 9397, "udp"}, +{"sec-t4net-srv", {NULL}, 9400, "tcp"}, +{"sec-t4net-srv", {NULL}, 9400, "udp"}, +{"sec-t4net-clt", {NULL}, 9401, "tcp"}, +{"sec-t4net-clt", {NULL}, 9401, "udp"}, +{"sec-pc2fax-srv", {NULL}, 9402, "tcp"}, +{"sec-pc2fax-srv", {NULL}, 9402, "udp"}, +{"git", {NULL}, 9418, "tcp"}, +{"git", {NULL}, 9418, "udp"}, +{"tungsten-https", {NULL}, 9443, "tcp"}, +{"tungsten-https", {NULL}, 9443, "udp"}, +{"wso2esb-console", {NULL}, 9444, "tcp"}, +{"wso2esb-console", {NULL}, 9444, "udp"}, +{"sntlkeyssrvr", {NULL}, 9450, "tcp"}, +{"sntlkeyssrvr", {NULL}, 9450, "udp"}, +{"ismserver", {NULL}, 9500, "tcp"}, +{"ismserver", {NULL}, 9500, "udp"}, +{"sma-spw", {NULL}, 9522, "udp"}, +{"mngsuite", {NULL}, 9535, "tcp"}, +{"mngsuite", {NULL}, 9535, "udp"}, +{"laes-bf", {NULL}, 9536, "tcp"}, +{"laes-bf", {NULL}, 9536, "udp"}, +{"trispen-sra", {NULL}, 9555, "tcp"}, +{"trispen-sra", {NULL}, 9555, "udp"}, +{"ldgateway", {NULL}, 9592, "tcp"}, +{"ldgateway", {NULL}, 9592, "udp"}, +{"cba8", {NULL}, 9593, "tcp"}, +{"cba8", {NULL}, 9593, "udp"}, +{"msgsys", {NULL}, 9594, "tcp"}, +{"msgsys", {NULL}, 9594, "udp"}, +{"pds", {NULL}, 9595, "tcp"}, +{"pds", {NULL}, 9595, "udp"}, +{"mercury-disc", {NULL}, 9596, "tcp"}, +{"mercury-disc", {NULL}, 9596, "udp"}, +{"pd-admin", {NULL}, 9597, "tcp"}, +{"pd-admin", {NULL}, 9597, "udp"}, +{"vscp", {NULL}, 9598, "tcp"}, +{"vscp", {NULL}, 9598, "udp"}, +{"robix", {NULL}, 9599, "tcp"}, +{"robix", {NULL}, 9599, "udp"}, +{"micromuse-ncpw", {NULL}, 9600, "tcp"}, +{"micromuse-ncpw", {NULL}, 9600, "udp"}, +{"streamcomm-ds", {NULL}, 9612, "tcp"}, +{"streamcomm-ds", {NULL}, 9612, "udp"}, +{"iadt-tls", {NULL}, 9614, "tcp"}, +{"erunbook_agent", {NULL}, 9616, "tcp"}, +{"erunbook_server", {NULL}, 9617, "tcp"}, +{"condor", {NULL}, 9618, "tcp"}, +{"condor", {NULL}, 9618, "udp"}, +{"odbcpathway", {NULL}, 9628, "tcp"}, +{"odbcpathway", {NULL}, 9628, "udp"}, +{"uniport", {NULL}, 9629, "tcp"}, +{"uniport", {NULL}, 9629, "udp"}, +{"peoctlr", {NULL}, 9630, "tcp"}, +{"peocoll", {NULL}, 9631, "tcp"}, +{"mc-comm", {NULL}, 9632, "udp"}, +{"pqsflows", {NULL}, 9640, "tcp"}, +{"xmms2", {NULL}, 9667, "tcp"}, +{"xmms2", {NULL}, 9667, "udp"}, +{"tec5-sdctp", {NULL}, 9668, "tcp"}, +{"tec5-sdctp", {NULL}, 9668, "udp"}, +{"client-wakeup", {NULL}, 9694, "tcp"}, +{"client-wakeup", {NULL}, 9694, "udp"}, +{"ccnx", {NULL}, 9695, "tcp"}, +{"ccnx", {NULL}, 9695, "udp"}, +{"board-roar", {NULL}, 9700, "tcp"}, +{"board-roar", {NULL}, 9700, "udp"}, +{"l5nas-parchan", {NULL}, 9747, "tcp"}, +{"l5nas-parchan", {NULL}, 9747, "udp"}, +{"board-voip", {NULL}, 9750, "tcp"}, +{"board-voip", {NULL}, 9750, "udp"}, +{"rasadv", {NULL}, 9753, "tcp"}, +{"rasadv", {NULL}, 9753, "udp"}, +{"tungsten-http", {NULL}, 9762, "tcp"}, +{"tungsten-http", {NULL}, 9762, "udp"}, +{"davsrc", {NULL}, 9800, "tcp"}, +{"davsrc", {NULL}, 9800, "udp"}, +{"sstp-2", {NULL}, 9801, "tcp"}, +{"sstp-2", {NULL}, 9801, "udp"}, +{"davsrcs", {NULL}, 9802, "tcp"}, +{"davsrcs", {NULL}, 9802, "udp"}, +{"sapv1", {NULL}, 9875, "tcp"}, +{"sapv1", {NULL}, 9875, "udp"}, +{"sd", {NULL}, 9876, "tcp"}, +{"sd", {NULL}, 9876, "udp"}, +{"cyborg-systems", {NULL}, 9888, "tcp"}, +{"cyborg-systems", {NULL}, 9888, "udp"}, +{"gt-proxy", {NULL}, 9889, "tcp"}, +{"gt-proxy", {NULL}, 9889, "udp"}, +{"monkeycom", {NULL}, 9898, "tcp"}, +{"monkeycom", {NULL}, 9898, "udp"}, +{"sctp-tunneling", {NULL}, 9899, "tcp"}, +{"sctp-tunneling", {NULL}, 9899, "udp"}, +{"iua", {NULL}, 9900, "tcp"}, +{"iua", {NULL}, 9900, "udp"}, +{"iua", {NULL}, 9900, "sctp"}, +{"enrp", {NULL}, 9901, "udp"}, +{"enrp-sctp", {NULL}, 9901, "sctp"}, +{"enrp-sctp-tls", {NULL}, 9902, "sctp"}, +{"domaintime", {NULL}, 9909, "tcp"}, +{"domaintime", {NULL}, 9909, "udp"}, +{"sype-transport", {NULL}, 9911, "tcp"}, +{"sype-transport", {NULL}, 9911, "udp"}, +{"apc-9950", {NULL}, 9950, "tcp"}, +{"apc-9950", {NULL}, 9950, "udp"}, +{"apc-9951", {NULL}, 9951, "tcp"}, +{"apc-9951", {NULL}, 9951, "udp"}, +{"apc-9952", {NULL}, 9952, "tcp"}, +{"apc-9952", {NULL}, 9952, "udp"}, +{"acis", {NULL}, 9953, "tcp"}, +{"acis", {NULL}, 9953, "udp"}, +{"odnsp", {NULL}, 9966, "tcp"}, +{"odnsp", {NULL}, 9966, "udp"}, +{"dsm-scm-target", {NULL}, 9987, "tcp"}, +{"dsm-scm-target", {NULL}, 9987, "udp"}, +{"nsesrvr", {NULL}, 9988, "tcp"}, +{"osm-appsrvr", {NULL}, 9990, "tcp"}, +{"osm-appsrvr", {NULL}, 9990, "udp"}, +{"osm-oev", {NULL}, 9991, "tcp"}, +{"osm-oev", {NULL}, 9991, "udp"}, +{"palace-1", {NULL}, 9992, "tcp"}, +{"palace-1", {NULL}, 9992, "udp"}, +{"palace-2", {NULL}, 9993, "tcp"}, +{"palace-2", {NULL}, 9993, "udp"}, +{"palace-3", {NULL}, 9994, "tcp"}, +{"palace-3", {NULL}, 9994, "udp"}, +{"palace-4", {NULL}, 9995, "tcp"}, +{"palace-4", {NULL}, 9995, "udp"}, +{"palace-5", {NULL}, 9996, "tcp"}, +{"palace-5", {NULL}, 9996, "udp"}, +{"palace-6", {NULL}, 9997, "tcp"}, +{"palace-6", {NULL}, 9997, "udp"}, +{"distinct32", {NULL}, 9998, "tcp"}, +{"distinct32", {NULL}, 9998, "udp"}, +{"distinct", {NULL}, 9999, "tcp"}, +{"distinct", {NULL}, 9999, "udp"}, +{"ndmp", {NULL}, 10000, "tcp"}, +{"ndmp", {NULL}, 10000, "udp"}, +{"scp-config", {NULL}, 10001, "tcp"}, +{"scp-config", {NULL}, 10001, "udp"}, +{"documentum", {NULL}, 10002, "tcp"}, +{"documentum", {NULL}, 10002, "udp"}, +{"documentum_s", {NULL}, 10003, "tcp"}, +{"documentum_s", {NULL}, 10003, "udp"}, +{"emcrmirccd", {NULL}, 10004, "tcp"}, +{"emcrmird", {NULL}, 10005, "tcp"}, +{"mvs-capacity", {NULL}, 10007, "tcp"}, +{"mvs-capacity", {NULL}, 10007, "udp"}, +{"octopus", {NULL}, 10008, "tcp"}, +{"octopus", {NULL}, 10008, "udp"}, +{"swdtp-sv", {NULL}, 10009, "tcp"}, +{"swdtp-sv", {NULL}, 10009, "udp"}, +{"rxapi", {NULL}, 10010, "tcp"}, +{"zabbix-agent", {NULL}, 10050, "tcp"}, +{"zabbix-agent", {NULL}, 10050, "udp"}, +{"zabbix-trapper", {NULL}, 10051, "tcp"}, +{"zabbix-trapper", {NULL}, 10051, "udp"}, +{"qptlmd", {NULL}, 10055, "tcp"}, +{"amanda", {NULL}, 10080, "tcp"}, +{"amanda", {NULL}, 10080, "udp"}, +{"famdc", {NULL}, 10081, "tcp"}, +{"famdc", {NULL}, 10081, "udp"}, +{"itap-ddtp", {NULL}, 10100, "tcp"}, +{"itap-ddtp", {NULL}, 10100, "udp"}, +{"ezmeeting-2", {NULL}, 10101, "tcp"}, +{"ezmeeting-2", {NULL}, 10101, "udp"}, +{"ezproxy-2", {NULL}, 10102, "tcp"}, +{"ezproxy-2", {NULL}, 10102, "udp"}, +{"ezrelay", {NULL}, 10103, "tcp"}, +{"ezrelay", {NULL}, 10103, "udp"}, +{"swdtp", {NULL}, 10104, "tcp"}, +{"swdtp", {NULL}, 10104, "udp"}, +{"bctp-server", {NULL}, 10107, "tcp"}, +{"bctp-server", {NULL}, 10107, "udp"}, +{"nmea-0183", {NULL}, 10110, "tcp"}, +{"nmea-0183", {NULL}, 10110, "udp"}, +{"netiq-endpoint", {NULL}, 10113, "tcp"}, +{"netiq-endpoint", {NULL}, 10113, "udp"}, +{"netiq-qcheck", {NULL}, 10114, "tcp"}, +{"netiq-qcheck", {NULL}, 10114, "udp"}, +{"netiq-endpt", {NULL}, 10115, "tcp"}, +{"netiq-endpt", {NULL}, 10115, "udp"}, +{"netiq-voipa", {NULL}, 10116, "tcp"}, +{"netiq-voipa", {NULL}, 10116, "udp"}, +{"iqrm", {NULL}, 10117, "tcp"}, +{"iqrm", {NULL}, 10117, "udp"}, +{"bmc-perf-sd", {NULL}, 10128, "tcp"}, +{"bmc-perf-sd", {NULL}, 10128, "udp"}, +{"bmc-gms", {NULL}, 10129, "tcp"}, +{"qb-db-server", {NULL}, 10160, "tcp"}, +{"qb-db-server", {NULL}, 10160, "udp"}, +{"snmptls", {NULL}, 10161, "tcp"}, +{"snmpdtls", {NULL}, 10161, "udp"}, +{"snmptls-trap", {NULL}, 10162, "tcp"}, +{"snmpdtls-trap", {NULL}, 10162, "udp"}, +{"trisoap", {NULL}, 10200, "tcp"}, +{"trisoap", {NULL}, 10200, "udp"}, +{"rsms", {NULL}, 10201, "tcp"}, +{"rscs", {NULL}, 10201, "udp"}, +{"apollo-relay", {NULL}, 10252, "tcp"}, +{"apollo-relay", {NULL}, 10252, "udp"}, +{"axis-wimp-port", {NULL}, 10260, "tcp"}, +{"axis-wimp-port", {NULL}, 10260, "udp"}, +{"blocks", {NULL}, 10288, "tcp"}, +{"blocks", {NULL}, 10288, "udp"}, +{"cosir", {NULL}, 10321, "tcp"}, +{"hip-nat-t", {NULL}, 10500, "udp"}, +{"MOS-lower", {NULL}, 10540, "tcp"}, +{"MOS-lower", {NULL}, 10540, "udp"}, +{"MOS-upper", {NULL}, 10541, "tcp"}, +{"MOS-upper", {NULL}, 10541, "udp"}, +{"MOS-aux", {NULL}, 10542, "tcp"}, +{"MOS-aux", {NULL}, 10542, "udp"}, +{"MOS-soap", {NULL}, 10543, "tcp"}, +{"MOS-soap", {NULL}, 10543, "udp"}, +{"MOS-soap-opt", {NULL}, 10544, "tcp"}, +{"MOS-soap-opt", {NULL}, 10544, "udp"}, +{"gap", {NULL}, 10800, "tcp"}, +{"gap", {NULL}, 10800, "udp"}, +{"lpdg", {NULL}, 10805, "tcp"}, +{"lpdg", {NULL}, 10805, "udp"}, +{"nbd", {NULL}, 10809, "tcp"}, +{"nmc-disc", {NULL}, 10810, "udp"}, +{"helix", {NULL}, 10860, "tcp"}, +{"helix", {NULL}, 10860, "udp"}, +{"rmiaux", {NULL}, 10990, "tcp"}, +{"rmiaux", {NULL}, 10990, "udp"}, +{"irisa", {NULL}, 11000, "tcp"}, +{"irisa", {NULL}, 11000, "udp"}, +{"metasys", {NULL}, 11001, "tcp"}, +{"metasys", {NULL}, 11001, "udp"}, +{"netapp-icmgmt", {NULL}, 11104, "tcp"}, +{"netapp-icdata", {NULL}, 11105, "tcp"}, +{"sgi-lk", {NULL}, 11106, "tcp"}, +{"sgi-lk", {NULL}, 11106, "udp"}, +{"vce", {NULL}, 11111, "tcp"}, +{"vce", {NULL}, 11111, "udp"}, +{"dicom", {NULL}, 11112, "tcp"}, +{"dicom", {NULL}, 11112, "udp"}, +{"suncacao-snmp", {NULL}, 11161, "tcp"}, +{"suncacao-snmp", {NULL}, 11161, "udp"}, +{"suncacao-jmxmp", {NULL}, 11162, "tcp"}, +{"suncacao-jmxmp", {NULL}, 11162, "udp"}, +{"suncacao-rmi", {NULL}, 11163, "tcp"}, +{"suncacao-rmi", {NULL}, 11163, "udp"}, +{"suncacao-csa", {NULL}, 11164, "tcp"}, +{"suncacao-csa", {NULL}, 11164, "udp"}, +{"suncacao-websvc", {NULL}, 11165, "tcp"}, +{"suncacao-websvc", {NULL}, 11165, "udp"}, +{"snss", {NULL}, 11171, "udp"}, +{"oemcacao-jmxmp", {NULL}, 11172, "tcp"}, +{"oemcacao-rmi", {NULL}, 11174, "tcp"}, +{"oemcacao-websvc", {NULL}, 11175, "tcp"}, +{"smsqp", {NULL}, 11201, "tcp"}, +{"smsqp", {NULL}, 11201, "udp"}, +{"wifree", {NULL}, 11208, "tcp"}, +{"wifree", {NULL}, 11208, "udp"}, +{"memcache", {NULL}, 11211, "tcp"}, +{"memcache", {NULL}, 11211, "udp"}, +{"imip", {NULL}, 11319, "tcp"}, +{"imip", {NULL}, 11319, "udp"}, +{"imip-channels", {NULL}, 11320, "tcp"}, +{"imip-channels", {NULL}, 11320, "udp"}, +{"arena-server", {NULL}, 11321, "tcp"}, +{"arena-server", {NULL}, 11321, "udp"}, +{"atm-uhas", {NULL}, 11367, "tcp"}, +{"atm-uhas", {NULL}, 11367, "udp"}, +{"hkp", {NULL}, 11371, "tcp"}, +{"hkp", {NULL}, 11371, "udp"}, +{"asgcypresstcps", {NULL}, 11489, "tcp"}, +{"tempest-port", {NULL}, 11600, "tcp"}, +{"tempest-port", {NULL}, 11600, "udp"}, +{"h323callsigalt", {NULL}, 11720, "tcp"}, +{"h323callsigalt", {NULL}, 11720, "udp"}, +{"intrepid-ssl", {NULL}, 11751, "tcp"}, +{"intrepid-ssl", {NULL}, 11751, "udp"}, +{"xoraya", {NULL}, 11876, "tcp"}, +{"xoraya", {NULL}, 11876, "udp"}, +{"x2e-disc", {NULL}, 11877, "udp"}, +{"sysinfo-sp", {NULL}, 11967, "tcp"}, +{"sysinfo-sp", {NULL}, 11967, "udp"}, +{"wmereceiving", {NULL}, 11997, "sctp"}, +{"wmedistribution", {NULL}, 11998, "sctp"}, +{"wmereporting", {NULL}, 11999, "sctp"}, +{"entextxid", {NULL}, 12000, "tcp"}, +{"entextxid", {NULL}, 12000, "udp"}, +{"entextnetwk", {NULL}, 12001, "tcp"}, +{"entextnetwk", {NULL}, 12001, "udp"}, +{"entexthigh", {NULL}, 12002, "tcp"}, +{"entexthigh", {NULL}, 12002, "udp"}, +{"entextmed", {NULL}, 12003, "tcp"}, +{"entextmed", {NULL}, 12003, "udp"}, +{"entextlow", {NULL}, 12004, "tcp"}, +{"entextlow", {NULL}, 12004, "udp"}, +{"dbisamserver1", {NULL}, 12005, "tcp"}, +{"dbisamserver1", {NULL}, 12005, "udp"}, +{"dbisamserver2", {NULL}, 12006, "tcp"}, +{"dbisamserver2", {NULL}, 12006, "udp"}, +{"accuracer", {NULL}, 12007, "tcp"}, +{"accuracer", {NULL}, 12007, "udp"}, +{"accuracer-dbms", {NULL}, 12008, "tcp"}, +{"accuracer-dbms", {NULL}, 12008, "udp"}, +{"edbsrvr", {NULL}, 12010, "tcp"}, +{"vipera", {NULL}, 12012, "tcp"}, +{"vipera", {NULL}, 12012, "udp"}, +{"vipera-ssl", {NULL}, 12013, "tcp"}, +{"vipera-ssl", {NULL}, 12013, "udp"}, +{"rets-ssl", {NULL}, 12109, "tcp"}, +{"rets-ssl", {NULL}, 12109, "udp"}, +{"nupaper-ss", {NULL}, 12121, "tcp"}, +{"nupaper-ss", {NULL}, 12121, "udp"}, +{"cawas", {NULL}, 12168, "tcp"}, +{"cawas", {NULL}, 12168, "udp"}, +{"hivep", {NULL}, 12172, "tcp"}, +{"hivep", {NULL}, 12172, "udp"}, +{"linogridengine", {NULL}, 12300, "tcp"}, +{"linogridengine", {NULL}, 12300, "udp"}, +{"warehouse-sss", {NULL}, 12321, "tcp"}, +{"warehouse-sss", {NULL}, 12321, "udp"}, +{"warehouse", {NULL}, 12322, "tcp"}, +{"warehouse", {NULL}, 12322, "udp"}, +{"italk", {NULL}, 12345, "tcp"}, +{"italk", {NULL}, 12345, "udp"}, +{"tsaf", {NULL}, 12753, "tcp"}, +{"tsaf", {NULL}, 12753, "udp"}, +{"i-zipqd", {NULL}, 13160, "tcp"}, +{"i-zipqd", {NULL}, 13160, "udp"}, +{"bcslogc", {NULL}, 13216, "tcp"}, +{"bcslogc", {NULL}, 13216, "udp"}, +{"rs-pias", {NULL}, 13217, "tcp"}, +{"rs-pias", {NULL}, 13217, "udp"}, +{"emc-vcas-tcp", {NULL}, 13218, "tcp"}, +{"emc-vcas-udp", {NULL}, 13218, "udp"}, +{"powwow-client", {NULL}, 13223, "tcp"}, +{"powwow-client", {NULL}, 13223, "udp"}, +{"powwow-server", {NULL}, 13224, "tcp"}, +{"powwow-server", {NULL}, 13224, "udp"}, +{"doip-data", {NULL}, 13400, "tcp"}, +{"doip-disc", {NULL}, 13400, "udp"}, +{"bprd", {NULL}, 13720, "tcp"}, +{"bprd", {NULL}, 13720, "udp"}, +{"bpdbm", {NULL}, 13721, "tcp"}, +{"bpdbm", {NULL}, 13721, "udp"}, +{"bpjava-msvc", {NULL}, 13722, "tcp"}, +{"bpjava-msvc", {NULL}, 13722, "udp"}, +{"vnetd", {NULL}, 13724, "tcp"}, +{"vnetd", {NULL}, 13724, "udp"}, +{"bpcd", {NULL}, 13782, "tcp"}, +{"bpcd", {NULL}, 13782, "udp"}, +{"vopied", {NULL}, 13783, "tcp"}, +{"vopied", {NULL}, 13783, "udp"}, +{"nbdb", {NULL}, 13785, "tcp"}, +{"nbdb", {NULL}, 13785, "udp"}, +{"nomdb", {NULL}, 13786, "tcp"}, +{"nomdb", {NULL}, 13786, "udp"}, +{"dsmcc-config", {NULL}, 13818, "tcp"}, +{"dsmcc-config", {NULL}, 13818, "udp"}, +{"dsmcc-session", {NULL}, 13819, "tcp"}, +{"dsmcc-session", {NULL}, 13819, "udp"}, +{"dsmcc-passthru", {NULL}, 13820, "tcp"}, +{"dsmcc-passthru", {NULL}, 13820, "udp"}, +{"dsmcc-download", {NULL}, 13821, "tcp"}, +{"dsmcc-download", {NULL}, 13821, "udp"}, +{"dsmcc-ccp", {NULL}, 13822, "tcp"}, +{"dsmcc-ccp", {NULL}, 13822, "udp"}, +{"bmdss", {NULL}, 13823, "tcp"}, +{"dta-systems", {NULL}, 13929, "tcp"}, +{"dta-systems", {NULL}, 13929, "udp"}, +{"medevolve", {NULL}, 13930, "tcp"}, +{"scotty-ft", {NULL}, 14000, "tcp"}, +{"scotty-ft", {NULL}, 14000, "udp"}, +{"sua", {NULL}, 14001, "tcp"}, +{"sua", {NULL}, 14001, "udp"}, +{"sua", {NULL}, 14001, "sctp"}, +{"sage-best-com1", {NULL}, 14033, "tcp"}, +{"sage-best-com1", {NULL}, 14033, "udp"}, +{"sage-best-com2", {NULL}, 14034, "tcp"}, +{"sage-best-com2", {NULL}, 14034, "udp"}, +{"vcs-app", {NULL}, 14141, "tcp"}, +{"vcs-app", {NULL}, 14141, "udp"}, +{"icpp", {NULL}, 14142, "tcp"}, +{"icpp", {NULL}, 14142, "udp"}, +{"gcm-app", {NULL}, 14145, "tcp"}, +{"gcm-app", {NULL}, 14145, "udp"}, +{"vrts-tdd", {NULL}, 14149, "tcp"}, +{"vrts-tdd", {NULL}, 14149, "udp"}, +{"vcscmd", {NULL}, 14150, "tcp"}, +{"vad", {NULL}, 14154, "tcp"}, +{"vad", {NULL}, 14154, "udp"}, +{"cps", {NULL}, 14250, "tcp"}, +{"cps", {NULL}, 14250, "udp"}, +{"ca-web-update", {NULL}, 14414, "tcp"}, +{"ca-web-update", {NULL}, 14414, "udp"}, +{"hde-lcesrvr-1", {NULL}, 14936, "tcp"}, +{"hde-lcesrvr-1", {NULL}, 14936, "udp"}, +{"hde-lcesrvr-2", {NULL}, 14937, "tcp"}, +{"hde-lcesrvr-2", {NULL}, 14937, "udp"}, +{"hydap", {NULL}, 15000, "tcp"}, +{"hydap", {NULL}, 15000, "udp"}, +{"xpilot", {NULL}, 15345, "tcp"}, +{"xpilot", {NULL}, 15345, "udp"}, +{"3link", {NULL}, 15363, "tcp"}, +{"3link", {NULL}, 15363, "udp"}, +{"cisco-snat", {NULL}, 15555, "tcp"}, +{"cisco-snat", {NULL}, 15555, "udp"}, +{"bex-xr", {NULL}, 15660, "tcp"}, +{"bex-xr", {NULL}, 15660, "udp"}, +{"ptp", {NULL}, 15740, "tcp"}, +{"ptp", {NULL}, 15740, "udp"}, +{"2ping", {NULL}, 15998, "udp"}, +{"programmar", {NULL}, 15999, "tcp"}, +{"fmsas", {NULL}, 16000, "tcp"}, +{"fmsascon", {NULL}, 16001, "tcp"}, +{"gsms", {NULL}, 16002, "tcp"}, +{"alfin", {NULL}, 16003, "udp"}, +{"jwpc", {NULL}, 16020, "tcp"}, +{"jwpc-bin", {NULL}, 16021, "tcp"}, +{"sun-sea-port", {NULL}, 16161, "tcp"}, +{"sun-sea-port", {NULL}, 16161, "udp"}, +{"solaris-audit", {NULL}, 16162, "tcp"}, +{"etb4j", {NULL}, 16309, "tcp"}, +{"etb4j", {NULL}, 16309, "udp"}, +{"pduncs", {NULL}, 16310, "tcp"}, +{"pduncs", {NULL}, 16310, "udp"}, +{"pdefmns", {NULL}, 16311, "tcp"}, +{"pdefmns", {NULL}, 16311, "udp"}, +{"netserialext1", {NULL}, 16360, "tcp"}, +{"netserialext1", {NULL}, 16360, "udp"}, +{"netserialext2", {NULL}, 16361, "tcp"}, +{"netserialext2", {NULL}, 16361, "udp"}, +{"netserialext3", {NULL}, 16367, "tcp"}, +{"netserialext3", {NULL}, 16367, "udp"}, +{"netserialext4", {NULL}, 16368, "tcp"}, +{"netserialext4", {NULL}, 16368, "udp"}, +{"connected", {NULL}, 16384, "tcp"}, +{"connected", {NULL}, 16384, "udp"}, +{"xoms", {NULL}, 16619, "tcp"}, +{"newbay-snc-mc", {NULL}, 16900, "tcp"}, +{"newbay-snc-mc", {NULL}, 16900, "udp"}, +{"sgcip", {NULL}, 16950, "tcp"}, +{"sgcip", {NULL}, 16950, "udp"}, +{"intel-rci-mp", {NULL}, 16991, "tcp"}, +{"intel-rci-mp", {NULL}, 16991, "udp"}, +{"amt-soap-http", {NULL}, 16992, "tcp"}, +{"amt-soap-http", {NULL}, 16992, "udp"}, +{"amt-soap-https", {NULL}, 16993, "tcp"}, +{"amt-soap-https", {NULL}, 16993, "udp"}, +{"amt-redir-tcp", {NULL}, 16994, "tcp"}, +{"amt-redir-tcp", {NULL}, 16994, "udp"}, +{"amt-redir-tls", {NULL}, 16995, "tcp"}, +{"amt-redir-tls", {NULL}, 16995, "udp"}, +{"isode-dua", {NULL}, 17007, "tcp"}, +{"isode-dua", {NULL}, 17007, "udp"}, +{"soundsvirtual", {NULL}, 17185, "tcp"}, +{"soundsvirtual", {NULL}, 17185, "udp"}, +{"chipper", {NULL}, 17219, "tcp"}, +{"chipper", {NULL}, 17219, "udp"}, +{"integrius-stp", {NULL}, 17234, "tcp"}, +{"integrius-stp", {NULL}, 17234, "udp"}, +{"ssh-mgmt", {NULL}, 17235, "tcp"}, +{"ssh-mgmt", {NULL}, 17235, "udp"}, +{"db-lsp", {NULL}, 17500, "tcp"}, +{"db-lsp-disc", {NULL}, 17500, "udp"}, +{"ea", {NULL}, 17729, "tcp"}, +{"ea", {NULL}, 17729, "udp"}, +{"zep", {NULL}, 17754, "tcp"}, +{"zep", {NULL}, 17754, "udp"}, +{"zigbee-ip", {NULL}, 17755, "tcp"}, +{"zigbee-ip", {NULL}, 17755, "udp"}, +{"zigbee-ips", {NULL}, 17756, "tcp"}, +{"zigbee-ips", {NULL}, 17756, "udp"}, +{"sw-orion", {NULL}, 17777, "tcp"}, +{"biimenu", {NULL}, 18000, "tcp"}, +{"biimenu", {NULL}, 18000, "udp"}, +{"radpdf", {NULL}, 18104, "tcp"}, +{"racf", {NULL}, 18136, "tcp"}, +{"opsec-cvp", {NULL}, 18181, "tcp"}, +{"opsec-cvp", {NULL}, 18181, "udp"}, +{"opsec-ufp", {NULL}, 18182, "tcp"}, +{"opsec-ufp", {NULL}, 18182, "udp"}, +{"opsec-sam", {NULL}, 18183, "tcp"}, +{"opsec-sam", {NULL}, 18183, "udp"}, +{"opsec-lea", {NULL}, 18184, "tcp"}, +{"opsec-lea", {NULL}, 18184, "udp"}, +{"opsec-omi", {NULL}, 18185, "tcp"}, +{"opsec-omi", {NULL}, 18185, "udp"}, +{"ohsc", {NULL}, 18186, "tcp"}, +{"ohsc", {NULL}, 18186, "udp"}, +{"opsec-ela", {NULL}, 18187, "tcp"}, +{"opsec-ela", {NULL}, 18187, "udp"}, +{"checkpoint-rtm", {NULL}, 18241, "tcp"}, +{"checkpoint-rtm", {NULL}, 18241, "udp"}, +{"gv-pf", {NULL}, 18262, "tcp"}, +{"gv-pf", {NULL}, 18262, "udp"}, +{"ac-cluster", {NULL}, 18463, "tcp"}, +{"ac-cluster", {NULL}, 18463, "udp"}, +{"rds-ib", {NULL}, 18634, "tcp"}, +{"rds-ib", {NULL}, 18634, "udp"}, +{"rds-ip", {NULL}, 18635, "tcp"}, +{"rds-ip", {NULL}, 18635, "udp"}, +{"ique", {NULL}, 18769, "tcp"}, +{"ique", {NULL}, 18769, "udp"}, +{"infotos", {NULL}, 18881, "tcp"}, +{"infotos", {NULL}, 18881, "udp"}, +{"apc-necmp", {NULL}, 18888, "tcp"}, +{"apc-necmp", {NULL}, 18888, "udp"}, +{"igrid", {NULL}, 19000, "tcp"}, +{"igrid", {NULL}, 19000, "udp"}, +{"j-link", {NULL}, 19020, "tcp"}, +{"opsec-uaa", {NULL}, 19191, "tcp"}, +{"opsec-uaa", {NULL}, 19191, "udp"}, +{"ua-secureagent", {NULL}, 19194, "tcp"}, +{"ua-secureagent", {NULL}, 19194, "udp"}, +{"keysrvr", {NULL}, 19283, "tcp"}, +{"keysrvr", {NULL}, 19283, "udp"}, +{"keyshadow", {NULL}, 19315, "tcp"}, +{"keyshadow", {NULL}, 19315, "udp"}, +{"mtrgtrans", {NULL}, 19398, "tcp"}, +{"mtrgtrans", {NULL}, 19398, "udp"}, +{"hp-sco", {NULL}, 19410, "tcp"}, +{"hp-sco", {NULL}, 19410, "udp"}, +{"hp-sca", {NULL}, 19411, "tcp"}, +{"hp-sca", {NULL}, 19411, "udp"}, +{"hp-sessmon", {NULL}, 19412, "tcp"}, +{"hp-sessmon", {NULL}, 19412, "udp"}, +{"fxuptp", {NULL}, 19539, "tcp"}, +{"fxuptp", {NULL}, 19539, "udp"}, +{"sxuptp", {NULL}, 19540, "tcp"}, +{"sxuptp", {NULL}, 19540, "udp"}, +{"jcp", {NULL}, 19541, "tcp"}, +{"jcp", {NULL}, 19541, "udp"}, +{"iec-104-sec", {NULL}, 19998, "tcp"}, +{"dnp-sec", {NULL}, 19999, "tcp"}, +{"dnp-sec", {NULL}, 19999, "udp"}, +{"dnp", {NULL}, 20000, "tcp"}, +{"dnp", {NULL}, 20000, "udp"}, +{"microsan", {NULL}, 20001, "tcp"}, +{"microsan", {NULL}, 20001, "udp"}, +{"commtact-http", {NULL}, 20002, "tcp"}, +{"commtact-http", {NULL}, 20002, "udp"}, +{"commtact-https", {NULL}, 20003, "tcp"}, +{"commtact-https", {NULL}, 20003, "udp"}, +{"openwebnet", {NULL}, 20005, "tcp"}, +{"openwebnet", {NULL}, 20005, "udp"}, +{"ss-idi-disc", {NULL}, 20012, "udp"}, +{"ss-idi", {NULL}, 20013, "tcp"}, +{"opendeploy", {NULL}, 20014, "tcp"}, +{"opendeploy", {NULL}, 20014, "udp"}, +{"nburn_id", {NULL}, 20034, "tcp"}, +{"nburn_id", {NULL}, 20034, "udp"}, +{"tmophl7mts", {NULL}, 20046, "tcp"}, +{"tmophl7mts", {NULL}, 20046, "udp"}, +{"mountd", {NULL}, 20048, "tcp"}, +{"mountd", {NULL}, 20048, "udp"}, +{"nfsrdma", {NULL}, 20049, "tcp"}, +{"nfsrdma", {NULL}, 20049, "udp"}, +{"nfsrdma", {NULL}, 20049, "sctp"}, +{"tolfab", {NULL}, 20167, "tcp"}, +{"tolfab", {NULL}, 20167, "udp"}, +{"ipdtp-port", {NULL}, 20202, "tcp"}, +{"ipdtp-port", {NULL}, 20202, "udp"}, +{"ipulse-ics", {NULL}, 20222, "tcp"}, +{"ipulse-ics", {NULL}, 20222, "udp"}, +{"emwavemsg", {NULL}, 20480, "tcp"}, +{"emwavemsg", {NULL}, 20480, "udp"}, +{"track", {NULL}, 20670, "tcp"}, +{"track", {NULL}, 20670, "udp"}, +{"athand-mmp", {NULL}, 20999, "tcp"}, +{"athand-mmp", {NULL}, 20999, "udp"}, +{"irtrans", {NULL}, 21000, "tcp"}, +{"irtrans", {NULL}, 21000, "udp"}, +{"dfserver", {NULL}, 21554, "tcp"}, +{"dfserver", {NULL}, 21554, "udp"}, +{"vofr-gateway", {NULL}, 21590, "tcp"}, +{"vofr-gateway", {NULL}, 21590, "udp"}, +{"tvpm", {NULL}, 21800, "tcp"}, +{"tvpm", {NULL}, 21800, "udp"}, +{"webphone", {NULL}, 21845, "tcp"}, +{"webphone", {NULL}, 21845, "udp"}, +{"netspeak-is", {NULL}, 21846, "tcp"}, +{"netspeak-is", {NULL}, 21846, "udp"}, +{"netspeak-cs", {NULL}, 21847, "tcp"}, +{"netspeak-cs", {NULL}, 21847, "udp"}, +{"netspeak-acd", {NULL}, 21848, "tcp"}, +{"netspeak-acd", {NULL}, 21848, "udp"}, +{"netspeak-cps", {NULL}, 21849, "tcp"}, +{"netspeak-cps", {NULL}, 21849, "udp"}, +{"snapenetio", {NULL}, 22000, "tcp"}, +{"snapenetio", {NULL}, 22000, "udp"}, +{"optocontrol", {NULL}, 22001, "tcp"}, +{"optocontrol", {NULL}, 22001, "udp"}, +{"optohost002", {NULL}, 22002, "tcp"}, +{"optohost002", {NULL}, 22002, "udp"}, +{"optohost003", {NULL}, 22003, "tcp"}, +{"optohost003", {NULL}, 22003, "udp"}, +{"optohost004", {NULL}, 22004, "tcp"}, +{"optohost004", {NULL}, 22004, "udp"}, +{"optohost004", {NULL}, 22005, "tcp"}, +{"optohost004", {NULL}, 22005, "udp"}, +{"dcap", {NULL}, 22125, "tcp"}, +{"gsidcap", {NULL}, 22128, "tcp"}, +{"wnn6", {NULL}, 22273, "tcp"}, +{"wnn6", {NULL}, 22273, "udp"}, +{"cis", {NULL}, 22305, "tcp"}, +{"cis", {NULL}, 22305, "udp"}, +{"cis-secure", {NULL}, 22343, "tcp"}, +{"cis-secure", {NULL}, 22343, "udp"}, +{"WibuKey", {NULL}, 22347, "tcp"}, +{"WibuKey", {NULL}, 22347, "udp"}, +{"CodeMeter", {NULL}, 22350, "tcp"}, +{"CodeMeter", {NULL}, 22350, "udp"}, +{"vocaltec-wconf", {NULL}, 22555, "tcp"}, +{"vocaltec-phone", {NULL}, 22555, "udp"}, +{"talikaserver", {NULL}, 22763, "tcp"}, +{"talikaserver", {NULL}, 22763, "udp"}, +{"aws-brf", {NULL}, 22800, "tcp"}, +{"aws-brf", {NULL}, 22800, "udp"}, +{"brf-gw", {NULL}, 22951, "tcp"}, +{"brf-gw", {NULL}, 22951, "udp"}, +{"inovaport1", {NULL}, 23000, "tcp"}, +{"inovaport1", {NULL}, 23000, "udp"}, +{"inovaport2", {NULL}, 23001, "tcp"}, +{"inovaport2", {NULL}, 23001, "udp"}, +{"inovaport3", {NULL}, 23002, "tcp"}, +{"inovaport3", {NULL}, 23002, "udp"}, +{"inovaport4", {NULL}, 23003, "tcp"}, +{"inovaport4", {NULL}, 23003, "udp"}, +{"inovaport5", {NULL}, 23004, "tcp"}, +{"inovaport5", {NULL}, 23004, "udp"}, +{"inovaport6", {NULL}, 23005, "tcp"}, +{"inovaport6", {NULL}, 23005, "udp"}, +{"s102", {NULL}, 23272, "udp"}, +{"elxmgmt", {NULL}, 23333, "tcp"}, +{"elxmgmt", {NULL}, 23333, "udp"}, +{"novar-dbase", {NULL}, 23400, "tcp"}, +{"novar-dbase", {NULL}, 23400, "udp"}, +{"novar-alarm", {NULL}, 23401, "tcp"}, +{"novar-alarm", {NULL}, 23401, "udp"}, +{"novar-global", {NULL}, 23402, "tcp"}, +{"novar-global", {NULL}, 23402, "udp"}, +{"aequus", {NULL}, 23456, "tcp"}, +{"aequus-alt", {NULL}, 23457, "tcp"}, +{"med-ltp", {NULL}, 24000, "tcp"}, +{"med-ltp", {NULL}, 24000, "udp"}, +{"med-fsp-rx", {NULL}, 24001, "tcp"}, +{"med-fsp-rx", {NULL}, 24001, "udp"}, +{"med-fsp-tx", {NULL}, 24002, "tcp"}, +{"med-fsp-tx", {NULL}, 24002, "udp"}, +{"med-supp", {NULL}, 24003, "tcp"}, +{"med-supp", {NULL}, 24003, "udp"}, +{"med-ovw", {NULL}, 24004, "tcp"}, +{"med-ovw", {NULL}, 24004, "udp"}, +{"med-ci", {NULL}, 24005, "tcp"}, +{"med-ci", {NULL}, 24005, "udp"}, +{"med-net-svc", {NULL}, 24006, "tcp"}, +{"med-net-svc", {NULL}, 24006, "udp"}, +{"filesphere", {NULL}, 24242, "tcp"}, +{"filesphere", {NULL}, 24242, "udp"}, +{"vista-4gl", {NULL}, 24249, "tcp"}, +{"vista-4gl", {NULL}, 24249, "udp"}, +{"ild", {NULL}, 24321, "tcp"}, +{"ild", {NULL}, 24321, "udp"}, +{"intel_rci", {NULL}, 24386, "tcp"}, +{"intel_rci", {NULL}, 24386, "udp"}, +{"tonidods", {NULL}, 24465, "tcp"}, +{"tonidods", {NULL}, 24465, "udp"}, +{"binkp", {NULL}, 24554, "tcp"}, +{"binkp", {NULL}, 24554, "udp"}, +{"canditv", {NULL}, 24676, "tcp"}, +{"canditv", {NULL}, 24676, "udp"}, +{"flashfiler", {NULL}, 24677, "tcp"}, +{"flashfiler", {NULL}, 24677, "udp"}, +{"proactivate", {NULL}, 24678, "tcp"}, +{"proactivate", {NULL}, 24678, "udp"}, +{"tcc-http", {NULL}, 24680, "tcp"}, +{"tcc-http", {NULL}, 24680, "udp"}, +{"cslg", {NULL}, 24754, "tcp"}, +{"find", {NULL}, 24922, "tcp"}, +{"find", {NULL}, 24922, "udp"}, +{"icl-twobase1", {NULL}, 25000, "tcp"}, +{"icl-twobase1", {NULL}, 25000, "udp"}, +{"icl-twobase2", {NULL}, 25001, "tcp"}, +{"icl-twobase2", {NULL}, 25001, "udp"}, +{"icl-twobase3", {NULL}, 25002, "tcp"}, +{"icl-twobase3", {NULL}, 25002, "udp"}, +{"icl-twobase4", {NULL}, 25003, "tcp"}, +{"icl-twobase4", {NULL}, 25003, "udp"}, +{"icl-twobase5", {NULL}, 25004, "tcp"}, +{"icl-twobase5", {NULL}, 25004, "udp"}, +{"icl-twobase6", {NULL}, 25005, "tcp"}, +{"icl-twobase6", {NULL}, 25005, "udp"}, +{"icl-twobase7", {NULL}, 25006, "tcp"}, +{"icl-twobase7", {NULL}, 25006, "udp"}, +{"icl-twobase8", {NULL}, 25007, "tcp"}, +{"icl-twobase8", {NULL}, 25007, "udp"}, +{"icl-twobase9", {NULL}, 25008, "tcp"}, +{"icl-twobase9", {NULL}, 25008, "udp"}, +{"icl-twobase10", {NULL}, 25009, "tcp"}, +{"icl-twobase10", {NULL}, 25009, "udp"}, +{"rna", {NULL}, 25471, "sctp"}, +{"sauterdongle", {NULL}, 25576, "tcp"}, +{"vocaltec-hos", {NULL}, 25793, "tcp"}, +{"vocaltec-hos", {NULL}, 25793, "udp"}, +{"tasp-net", {NULL}, 25900, "tcp"}, +{"tasp-net", {NULL}, 25900, "udp"}, +{"niobserver", {NULL}, 25901, "tcp"}, +{"niobserver", {NULL}, 25901, "udp"}, +{"nilinkanalyst", {NULL}, 25902, "tcp"}, +{"nilinkanalyst", {NULL}, 25902, "udp"}, +{"niprobe", {NULL}, 25903, "tcp"}, +{"niprobe", {NULL}, 25903, "udp"}, +{"quake", {NULL}, 26000, "tcp"}, +{"quake", {NULL}, 26000, "udp"}, +{"scscp", {NULL}, 26133, "tcp"}, +{"scscp", {NULL}, 26133, "udp"}, +{"wnn6-ds", {NULL}, 26208, "tcp"}, +{"wnn6-ds", {NULL}, 26208, "udp"}, +{"ezproxy", {NULL}, 26260, "tcp"}, +{"ezproxy", {NULL}, 26260, "udp"}, +{"ezmeeting", {NULL}, 26261, "tcp"}, +{"ezmeeting", {NULL}, 26261, "udp"}, +{"k3software-svr", {NULL}, 26262, "tcp"}, +{"k3software-svr", {NULL}, 26262, "udp"}, +{"k3software-cli", {NULL}, 26263, "tcp"}, +{"k3software-cli", {NULL}, 26263, "udp"}, +{"exoline-tcp", {NULL}, 26486, "tcp"}, +{"exoline-udp", {NULL}, 26486, "udp"}, +{"exoconfig", {NULL}, 26487, "tcp"}, +{"exoconfig", {NULL}, 26487, "udp"}, +{"exonet", {NULL}, 26489, "tcp"}, +{"exonet", {NULL}, 26489, "udp"}, +{"imagepump", {NULL}, 27345, "tcp"}, +{"imagepump", {NULL}, 27345, "udp"}, +{"jesmsjc", {NULL}, 27442, "tcp"}, +{"jesmsjc", {NULL}, 27442, "udp"}, +{"kopek-httphead", {NULL}, 27504, "tcp"}, +{"kopek-httphead", {NULL}, 27504, "udp"}, +{"ars-vista", {NULL}, 27782, "tcp"}, +{"ars-vista", {NULL}, 27782, "udp"}, +{"tw-auth-key", {NULL}, 27999, "tcp"}, +{"tw-auth-key", {NULL}, 27999, "udp"}, +{"nxlmd", {NULL}, 28000, "tcp"}, +{"nxlmd", {NULL}, 28000, "udp"}, +{"pqsp", {NULL}, 28001, "tcp"}, +{"siemensgsm", {NULL}, 28240, "tcp"}, +{"siemensgsm", {NULL}, 28240, "udp"}, +{"sgsap", {NULL}, 29118, "sctp"}, +{"otmp", {NULL}, 29167, "tcp"}, +{"otmp", {NULL}, 29167, "udp"}, +{"sbcap", {NULL}, 29168, "sctp"}, +{"iuhsctpassoc", {NULL}, 29169, "sctp"}, +{"pago-services1", {NULL}, 30001, "tcp"}, +{"pago-services1", {NULL}, 30001, "udp"}, +{"pago-services2", {NULL}, 30002, "tcp"}, +{"pago-services2", {NULL}, 30002, "udp"}, +{"kingdomsonline", {NULL}, 30260, "tcp"}, +{"kingdomsonline", {NULL}, 30260, "udp"}, +{"ovobs", {NULL}, 30999, "tcp"}, +{"ovobs", {NULL}, 30999, "udp"}, +{"autotrac-acp", {NULL}, 31020, "tcp"}, +{"yawn", {NULL}, 31029, "udp"}, +{"xqosd", {NULL}, 31416, "tcp"}, +{"xqosd", {NULL}, 31416, "udp"}, +{"tetrinet", {NULL}, 31457, "tcp"}, +{"tetrinet", {NULL}, 31457, "udp"}, +{"lm-mon", {NULL}, 31620, "tcp"}, +{"lm-mon", {NULL}, 31620, "udp"}, +{"dsx_monitor", {NULL}, 31685, "tcp"}, +{"gamesmith-port", {NULL}, 31765, "tcp"}, +{"gamesmith-port", {NULL}, 31765, "udp"}, +{"iceedcp_tx", {NULL}, 31948, "tcp"}, +{"iceedcp_tx", {NULL}, 31948, "udp"}, +{"iceedcp_rx", {NULL}, 31949, "tcp"}, +{"iceedcp_rx", {NULL}, 31949, "udp"}, +{"iracinghelper", {NULL}, 32034, "tcp"}, +{"iracinghelper", {NULL}, 32034, "udp"}, +{"t1distproc60", {NULL}, 32249, "tcp"}, +{"t1distproc60", {NULL}, 32249, "udp"}, +{"apm-link", {NULL}, 32483, "tcp"}, +{"apm-link", {NULL}, 32483, "udp"}, +{"sec-ntb-clnt", {NULL}, 32635, "tcp"}, +{"sec-ntb-clnt", {NULL}, 32635, "udp"}, +{"DMExpress", {NULL}, 32636, "tcp"}, +{"DMExpress", {NULL}, 32636, "udp"}, +{"filenet-powsrm", {NULL}, 32767, "tcp"}, +{"filenet-powsrm", {NULL}, 32767, "udp"}, +{"filenet-tms", {NULL}, 32768, "tcp"}, +{"filenet-tms", {NULL}, 32768, "udp"}, +{"filenet-rpc", {NULL}, 32769, "tcp"}, +{"filenet-rpc", {NULL}, 32769, "udp"}, +{"filenet-nch", {NULL}, 32770, "tcp"}, +{"filenet-nch", {NULL}, 32770, "udp"}, +{"filenet-rmi", {NULL}, 32771, "tcp"}, +{"filenet-rmi", {NULL}, 32771, "udp"}, +{"filenet-pa", {NULL}, 32772, "tcp"}, +{"filenet-pa", {NULL}, 32772, "udp"}, +{"filenet-cm", {NULL}, 32773, "tcp"}, +{"filenet-cm", {NULL}, 32773, "udp"}, +{"filenet-re", {NULL}, 32774, "tcp"}, +{"filenet-re", {NULL}, 32774, "udp"}, +{"filenet-pch", {NULL}, 32775, "tcp"}, +{"filenet-pch", {NULL}, 32775, "udp"}, +{"filenet-peior", {NULL}, 32776, "tcp"}, +{"filenet-peior", {NULL}, 32776, "udp"}, +{"filenet-obrok", {NULL}, 32777, "tcp"}, +{"filenet-obrok", {NULL}, 32777, "udp"}, +{"mlsn", {NULL}, 32801, "tcp"}, +{"mlsn", {NULL}, 32801, "udp"}, +{"retp", {NULL}, 32811, "tcp"}, +{"idmgratm", {NULL}, 32896, "tcp"}, +{"idmgratm", {NULL}, 32896, "udp"}, +{"aurora-balaena", {NULL}, 33123, "tcp"}, +{"aurora-balaena", {NULL}, 33123, "udp"}, +{"diamondport", {NULL}, 33331, "tcp"}, +{"diamondport", {NULL}, 33331, "udp"}, +{"dgi-serv", {NULL}, 33333, "tcp"}, +{"traceroute", {NULL}, 33434, "tcp"}, +{"traceroute", {NULL}, 33434, "udp"}, +{"snip-slave", {NULL}, 33656, "tcp"}, +{"snip-slave", {NULL}, 33656, "udp"}, +{"turbonote-2", {NULL}, 34249, "tcp"}, +{"turbonote-2", {NULL}, 34249, "udp"}, +{"p-net-local", {NULL}, 34378, "tcp"}, +{"p-net-local", {NULL}, 34378, "udp"}, +{"p-net-remote", {NULL}, 34379, "tcp"}, +{"p-net-remote", {NULL}, 34379, "udp"}, +{"dhanalakshmi", {NULL}, 34567, "tcp"}, +{"profinet-rt", {NULL}, 34962, "tcp"}, +{"profinet-rt", {NULL}, 34962, "udp"}, +{"profinet-rtm", {NULL}, 34963, "tcp"}, +{"profinet-rtm", {NULL}, 34963, "udp"}, +{"profinet-cm", {NULL}, 34964, "tcp"}, +{"profinet-cm", {NULL}, 34964, "udp"}, +{"ethercat", {NULL}, 34980, "tcp"}, +{"ethercat", {NULL}, 34980, "udp"}, +{"allpeers", {NULL}, 36001, "tcp"}, +{"allpeers", {NULL}, 36001, "udp"}, +{"s1-control", {NULL}, 36412, "sctp"}, +{"x2-control", {NULL}, 36422, "sctp"}, +{"m2ap", {NULL}, 36443, "sctp"}, +{"m3ap", {NULL}, 36444, "sctp"}, +{"kastenxpipe", {NULL}, 36865, "tcp"}, +{"kastenxpipe", {NULL}, 36865, "udp"}, +{"neckar", {NULL}, 37475, "tcp"}, +{"neckar", {NULL}, 37475, "udp"}, +{"unisys-eportal", {NULL}, 37654, "tcp"}, +{"unisys-eportal", {NULL}, 37654, "udp"}, +{"galaxy7-data", {NULL}, 38201, "tcp"}, +{"galaxy7-data", {NULL}, 38201, "udp"}, +{"fairview", {NULL}, 38202, "tcp"}, +{"fairview", {NULL}, 38202, "udp"}, +{"agpolicy", {NULL}, 38203, "tcp"}, +{"agpolicy", {NULL}, 38203, "udp"}, +{"turbonote-1", {NULL}, 39681, "tcp"}, +{"turbonote-1", {NULL}, 39681, "udp"}, +{"safetynetp", {NULL}, 40000, "tcp"}, +{"safetynetp", {NULL}, 40000, "udp"}, +{"cscp", {NULL}, 40841, "tcp"}, +{"cscp", {NULL}, 40841, "udp"}, +{"csccredir", {NULL}, 40842, "tcp"}, +{"csccredir", {NULL}, 40842, "udp"}, +{"csccfirewall", {NULL}, 40843, "tcp"}, +{"csccfirewall", {NULL}, 40843, "udp"}, +{"ortec-disc", {NULL}, 40853, "udp"}, +{"fs-qos", {NULL}, 41111, "tcp"}, +{"fs-qos", {NULL}, 41111, "udp"}, +{"tentacle", {NULL}, 41121, "tcp"}, +{"crestron-cip", {NULL}, 41794, "tcp"}, +{"crestron-cip", {NULL}, 41794, "udp"}, +{"crestron-ctp", {NULL}, 41795, "tcp"}, +{"crestron-ctp", {NULL}, 41795, "udp"}, +{"candp", {NULL}, 42508, "tcp"}, +{"candp", {NULL}, 42508, "udp"}, +{"candrp", {NULL}, 42509, "tcp"}, +{"candrp", {NULL}, 42509, "udp"}, +{"caerpc", {NULL}, 42510, "tcp"}, +{"caerpc", {NULL}, 42510, "udp"}, +{"reachout", {NULL}, 43188, "tcp"}, +{"reachout", {NULL}, 43188, "udp"}, +{"ndm-agent-port", {NULL}, 43189, "tcp"}, +{"ndm-agent-port", {NULL}, 43189, "udp"}, +{"ip-provision", {NULL}, 43190, "tcp"}, +{"ip-provision", {NULL}, 43190, "udp"}, +{"noit-transport", {NULL}, 43191, "tcp"}, +{"ew-mgmt", {NULL}, 43440, "tcp"}, +{"ew-disc-cmd", {NULL}, 43440, "udp"}, +{"ciscocsdb", {NULL}, 43441, "tcp"}, +{"ciscocsdb", {NULL}, 43441, "udp"}, +{"pmcd", {NULL}, 44321, "tcp"}, +{"pmcd", {NULL}, 44321, "udp"}, +{"pmcdproxy", {NULL}, 44322, "tcp"}, +{"pmcdproxy", {NULL}, 44322, "udp"}, +{"pcp", {NULL}, 44323, "udp"}, +{"rbr-debug", {NULL}, 44553, "tcp"}, +{"rbr-debug", {NULL}, 44553, "udp"}, +{"EtherNet/IP-2", {NULL}, 44818, "tcp"}, +{"EtherNet/IP-2", {NULL}, 44818, "udp"}, +{"invision-ag", {NULL}, 45054, "tcp"}, +{"invision-ag", {NULL}, 45054, "udp"}, +{"eba", {NULL}, 45678, "tcp"}, +{"eba", {NULL}, 45678, "udp"}, +{"qdb2service", {NULL}, 45825, "tcp"}, +{"qdb2service", {NULL}, 45825, "udp"}, +{"ssr-servermgr", {NULL}, 45966, "tcp"}, +{"ssr-servermgr", {NULL}, 45966, "udp"}, +{"mediabox", {NULL}, 46999, "tcp"}, +{"mediabox", {NULL}, 46999, "udp"}, +{"mbus", {NULL}, 47000, "tcp"}, +{"mbus", {NULL}, 47000, "udp"}, +{"winrm", {NULL}, 47001, "tcp"}, +{"dbbrowse", {NULL}, 47557, "tcp"}, +{"dbbrowse", {NULL}, 47557, "udp"}, +{"directplaysrvr", {NULL}, 47624, "tcp"}, +{"directplaysrvr", {NULL}, 47624, "udp"}, +{"ap", {NULL}, 47806, "tcp"}, +{"ap", {NULL}, 47806, "udp"}, +{"bacnet", {NULL}, 47808, "tcp"}, +{"bacnet", {NULL}, 47808, "udp"}, +{"nimcontroller", {NULL}, 48000, "tcp"}, +{"nimcontroller", {NULL}, 48000, "udp"}, +{"nimspooler", {NULL}, 48001, "tcp"}, +{"nimspooler", {NULL}, 48001, "udp"}, +{"nimhub", {NULL}, 48002, "tcp"}, +{"nimhub", {NULL}, 48002, "udp"}, +{"nimgtw", {NULL}, 48003, "tcp"}, +{"nimgtw", {NULL}, 48003, "udp"}, +{"nimbusdb", {NULL}, 48004, "tcp"}, +{"nimbusdbctrl", {NULL}, 48005, "tcp"}, +{"3gpp-cbsp", {NULL}, 48049, "tcp"}, +{"isnetserv", {NULL}, 48128, "tcp"}, +{"isnetserv", {NULL}, 48128, "udp"}, +{"blp5", {NULL}, 48129, "tcp"}, +{"blp5", {NULL}, 48129, "udp"}, +{"com-bardac-dw", {NULL}, 48556, "tcp"}, +{"com-bardac-dw", {NULL}, 48556, "udp"}, +{"iqobject", {NULL}, 48619, "tcp"}, +{"iqobject", {NULL}, 48619, "udp"}, +#endif /* USE_IANA_REGISTERED_PORTS */ +{ NULL, {NULL}, 0, NULL } +}; + +struct servent *getservbyport(int port, const char *proto) +{ + unsigned short u_port; + const char *protocol = NULL; + int i, error = 0; + + u_port = ntohs((unsigned short)port); + + if (proto) + { + switch (strlen(proto)) { + case 3: + if (!strncasecmp(proto, "tcp", 3)) + protocol = "tcp"; + else if (!strncasecmp(proto, "udp", 3)) + protocol = "udp"; + else + error = WSAEFAULT; + break; + case 4: + if (!strncasecmp(proto, "sctp", 4)) + protocol = "sctp"; + else if (!strncasecmp(proto, "dccp", 4)) + protocol = "dccp"; + else + error = WSAEFAULT; + break; + default: + error = WSAEFAULT; + } + } + + if (!error) + { + for (i = 0; i < (sizeof(IANAports) / sizeof(IANAports[0])) - 1; i++) + { + if (u_port == IANAports[i].s_port) + { + if (!protocol || !strcasecmp(protocol, IANAports[i].s_proto)) + return (struct servent *)&IANAports[i]; + } + } + error = WSANO_DATA; + } + + SET_SOCKERRNO(error); + return NULL; +} + +#endif /* _WIN32_WCE */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_platform.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_platform.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_platform.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_platform.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,43 @@ +#ifndef HEADER_CARES_PLATFORM_H +#define HEADER_CARES_PLATFORM_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004 - 2011 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#if defined(WIN32) && !defined(MSDOS) + +typedef enum { + WIN_UNKNOWN, + WIN_3X, + WIN_9X, + WIN_NT, + WIN_CE +} win_platform; + +win_platform ares__getplatform(void); + +#endif + +#if defined(_WIN32_WCE) + +struct servent *getservbyport(int port, const char *proto); + +#endif + +#endif /* HEADER_CARES_PLATFORM_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_private.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_private.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_private.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_private.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,437 @@ +#ifndef __ARES_PRIVATE_H +#define __ARES_PRIVATE_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004-2010 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +/* + * Define WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) +#define WIN32 +#endif + +#ifdef HAVE_NETINET_IN_H +#include +#endif + +#ifdef WATT32 +#include +#include +#define writev(s,v,c) writev_s(s,v,c) +#define HAVE_WRITEV 1 +#endif + +#define DEFAULT_TIMEOUT 5000 /* milliseconds */ +#define DEFAULT_TRIES 4 +#ifndef INADDR_NONE +#define INADDR_NONE 0xffffffff +#endif + +#ifdef CARES_EXPOSE_STATICS +/* Make some internal functions visible for testing */ +#define STATIC_TESTABLE +#else +#define STATIC_TESTABLE static +#endif + +/* By using a double cast, we can get rid of the bogus warning of + * warning: cast from 'const struct sockaddr *' to 'const struct sockaddr_in6 *' increases required alignment from 1 to 4 [-Wcast-align] + */ +#define CARES_INADDR_CAST(type, var) ((type)((void *)var)) + +#if defined(WIN32) && !defined(WATT32) + +#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP" +#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters" +#define WIN_DNSCLIENT "Software\\Policies\\Microsoft\\System\\DNSClient" +#define WIN_NT_DNSCLIENT "Software\\Policies\\Microsoft\\Windows NT\\DNSClient" +#define NAMESERVER "NameServer" +#define DHCPNAMESERVER "DhcpNameServer" +#define DATABASEPATH "DatabasePath" +#define WIN_PATH_HOSTS "\\hosts" +#define SEARCHLIST_KEY "SearchList" +#define PRIMARYDNSSUFFIX_KEY "PrimaryDNSSuffix" +#define INTERFACES_KEY "Interfaces" +#define DOMAIN_KEY "Domain" +#define DHCPDOMAIN_KEY "DhcpDomain" + +#elif defined(WATT32) + +#define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf" +W32_FUNC const char *_w32_GetHostsFile (void); + +#elif defined(NETWARE) + +#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg" +#define PATH_HOSTS "sys:/etc/hosts" + +#elif defined(__riscos__) + +#define PATH_HOSTS "InetDBase:Hosts" + +#elif defined(__HAIKU__) + +#define PATH_RESOLV_CONF "/system/settings/network/resolv.conf" +#define PATH_HOSTS "/system/settings/network/hosts" + +#else + +#define PATH_RESOLV_CONF "/etc/resolv.conf" +#ifdef ETC_INET +#define PATH_HOSTS "/etc/inet/hosts" +#else +#define PATH_HOSTS "/etc/hosts" +#endif + +#endif + +#define ARES_ID_KEY_LEN 31 + +#include "ares_ipv6.h" +#include "ares_llist.h" + +#ifndef HAVE_GETENV +# include "ares_getenv.h" +# define getenv(ptr) ares_getenv(ptr) +#endif + +#include "ares_strdup.h" +#include "ares_strsplit.h" + +#ifndef HAVE_STRCASECMP +# include "ares_strcasecmp.h" +# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2) +#endif + +#ifndef HAVE_STRNCASECMP +# include "ares_strcasecmp.h" +# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n) +#endif + +#ifndef HAVE_WRITEV +# include "ares_writev.h" +# define writev(s,ptr,cnt) ares_writev(s,ptr,cnt) +#endif + +/********* EDNS defines section ******/ +#define EDNSPACKETSZ 1280 /* Reasonable UDP payload size, as suggested + in RFC2671 */ +#define MAXENDSSZ 4096 /* Maximum (local) limit for edns packet size */ +#define EDNSFIXEDSZ 11 /* Size of EDNS header */ +/********* EDNS defines section ******/ + +struct ares_addr { + int family; + union { + struct in_addr addr4; + struct ares_in6_addr addr6; + } addr; + int udp_port; /* stored in network order */ + int tcp_port; /* stored in network order */ +}; +#define addrV4 addr.addr4 +#define addrV6 addr.addr6 + +struct query; + +struct send_request { + /* Remaining data to send */ + const unsigned char *data; + size_t len; + + /* The query for which we're sending this data */ + struct query* owner_query; + /* The buffer we're using, if we have our own copy of the packet */ + unsigned char *data_storage; + + /* Next request in queue */ + struct send_request *next; +}; + +struct server_state { + struct ares_addr addr; + ares_socket_t udp_socket; + ares_socket_t tcp_socket; + + /* Mini-buffer for reading the length word */ + unsigned char tcp_lenbuf[2]; + int tcp_lenbuf_pos; + int tcp_length; + + /* Buffer for reading actual TCP data */ + unsigned char *tcp_buffer; + int tcp_buffer_pos; + + /* TCP output queue */ + struct send_request *qhead; + struct send_request *qtail; + + /* Which incarnation of this connection is this? We don't want to + * retransmit requests into the very same socket, but if the server + * closes on us and we re-open the connection, then we do want to + * re-send. */ + int tcp_connection_generation; + + /* Circular, doubly-linked list of outstanding queries to this server */ + struct list_node queries_to_server; + + /* Link back to owning channel */ + ares_channel channel; + + /* Is this server broken? We mark connections as broken when a + * request that is queued for sending times out. + */ + int is_broken; +}; + +/* State to represent a DNS query */ +struct query { + /* Query ID from qbuf, for faster lookup, and current timeout */ + unsigned short qid; + struct timeval timeout; + + /* + * Links for the doubly-linked lists in which we insert a query. + * These circular, doubly-linked lists that are hash-bucketed based + * the attributes we care about, help making most important + * operations O(1). + */ + struct list_node queries_by_qid; /* hopefully in same cache line as qid */ + struct list_node queries_by_timeout; + struct list_node queries_to_server; + struct list_node all_queries; + + /* Query buf with length at beginning, for TCP transmission */ + unsigned char *tcpbuf; + int tcplen; + + /* Arguments passed to ares_send() (qbuf points into tcpbuf) */ + const unsigned char *qbuf; + int qlen; + ares_callback callback; + void *arg; + + /* Query status */ + int try_count; /* Number of times we tried this query already. */ + int server; /* Server this query has last been sent to. */ + struct query_server_info *server_info; /* per-server state */ + int using_tcp; + int error_status; + int timeouts; /* number of timeouts we saw for this request */ +}; + +/* Per-server state for a query */ +struct query_server_info { + int skip_server; /* should we skip server, due to errors, etc? */ + int tcp_connection_generation; /* into which TCP connection did we send? */ +}; + +/* An IP address pattern; matches an IP address X if X & mask == addr */ +#define PATTERN_MASK 0x1 +#define PATTERN_CIDR 0x2 + +struct apattern { + union + { + struct in_addr addr4; + struct ares_in6_addr addr6; + } addr; + union + { + struct in_addr addr4; + struct ares_in6_addr addr6; + unsigned short bits; + } mask; + int family; + unsigned short type; +}; + +typedef struct rc4_key +{ + unsigned char state[256]; + unsigned char x; + unsigned char y; +} rc4_key; + +struct ares_channeldata { + /* Configuration data */ + int flags; + int timeout; /* in milliseconds */ + int tries; + int ndots; + int rotate; /* if true, all servers specified are used */ + int udp_port; /* stored in network order */ + int tcp_port; /* stored in network order */ + int socket_send_buffer_size; + int socket_receive_buffer_size; + char **domains; + int ndomains; + struct apattern *sortlist; + int nsort; + char *lookups; + int ednspsz; + + /* For binding to local devices and/or IP addresses. Leave + * them null/zero for no binding. + */ + char local_dev_name[32]; + unsigned int local_ip4; + unsigned char local_ip6[16]; + + int optmask; /* the option bitfield passed in at init time */ + + /* Server addresses and communications state */ + struct server_state *servers; + int nservers; + + /* ID to use for next query */ + unsigned short next_id; + /* key to use when generating new ids */ + rc4_key id_key; + + /* Generation number to use for the next TCP socket open/close */ + int tcp_connection_generation; + + /* The time at which we last called process_timeouts(). Uses integer seconds + just to draw the line somewhere. */ + time_t last_timeout_processed; + + /* Last server we sent a query to. */ + int last_server; + + /* Circular, doubly-linked list of queries, bucketed various ways.... */ + /* All active queries in a single list: */ + struct list_node all_queries; + /* Queries bucketed by qid, for quickly dispatching DNS responses: */ +#define ARES_QID_TABLE_SIZE 2048 + struct list_node queries_by_qid[ARES_QID_TABLE_SIZE]; + /* Queries bucketed by timeout, for quickly handling timeouts: */ +#define ARES_TIMEOUT_TABLE_SIZE 1024 + struct list_node queries_by_timeout[ARES_TIMEOUT_TABLE_SIZE]; + + ares_sock_state_cb sock_state_cb; + void *sock_state_cb_data; + + ares_sock_create_callback sock_create_cb; + void *sock_create_cb_data; + + ares_sock_config_callback sock_config_cb; + void *sock_config_cb_data; + + const struct ares_socket_functions * sock_funcs; + void *sock_func_cb_data; + + /* Path for resolv.conf file, configurable via ares_options */ + char *resolvconf_path; +}; + +/* Does the domain end in ".onion" or ".onion."? Case-insensitive. */ +int ares__is_onion_domain(const char *name); + +/* Memory management functions */ +extern void *(*ares_malloc)(size_t size); +extern void *(*ares_realloc)(void *ptr, size_t size); +extern void (*ares_free)(void *ptr); + +/* return true if now is exactly check time or later */ +int ares__timedout(struct timeval *now, + struct timeval *check); + +void ares__send_query(ares_channel channel, struct query *query, + struct timeval *now); +void ares__close_sockets(ares_channel channel, struct server_state *server); +int ares__get_hostent(FILE *fp, int family, struct hostent **host); +int ares__read_line(FILE *fp, char **buf, size_t *bufsize); +void ares__free_query(struct query *query); +unsigned short ares__generate_new_id(rc4_key* key); +struct timeval ares__tvnow(void); +int ares__expand_name_validated(const unsigned char *encoded, + const unsigned char *abuf, + int alen, char **s, long *enclen, + int is_hostname); +int ares__expand_name_for_response(const unsigned char *encoded, + const unsigned char *abuf, int alen, + char **s, long *enclen, int is_hostname); +void ares__init_servers_state(ares_channel channel); +void ares__destroy_servers_state(ares_channel channel); +int ares__parse_qtype_reply(const unsigned char* abuf, int alen, int* qtype); +int ares__single_domain(ares_channel channel, const char *name, char **s); +int ares__cat_domain(const char *name, const char *domain, char **s); +int ares__sortaddrinfo(ares_channel channel, struct ares_addrinfo_node *ai_node); +int ares__readaddrinfo(FILE *fp, const char *name, unsigned short port, + const struct ares_addrinfo_hints *hints, + struct ares_addrinfo *ai); + +struct ares_addrinfo *ares__malloc_addrinfo(void); + +struct ares_addrinfo_node *ares__malloc_addrinfo_node(void); +void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *ai_node); + +struct ares_addrinfo_node *ares__append_addrinfo_node(struct ares_addrinfo_node **ai_node); +void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head, + struct ares_addrinfo_node *tail); + +struct ares_addrinfo_cname *ares__malloc_addrinfo_cname(void); +void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *ai_cname); + +struct ares_addrinfo_cname *ares__append_addrinfo_cname(struct ares_addrinfo_cname **ai_cname); + +int ares_append_ai_node(int aftype, unsigned short port, int ttl, + const void *adata, + struct ares_addrinfo_node **nodes); + +void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head, + struct ares_addrinfo_cname *tail); + +int ares__parse_into_addrinfo(const unsigned char *abuf, + int alen, int cname_only_is_enodata, + unsigned short port, + struct ares_addrinfo *ai); + +int ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family, + struct hostent **host); +int ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family, + int req_naddrttls, struct ares_addrttl *addrttls, + struct ares_addr6ttl *addr6ttls, int *naddrttls); +int ares__addrinfo_localhost(const char *name, unsigned short port, + const struct ares_addrinfo_hints *hints, + struct ares_addrinfo *ai); + +#if 0 /* Not used */ +long ares__tvdiff(struct timeval t1, struct timeval t2); +#endif + +ares_socket_t ares__open_socket(ares_channel channel, + int af, int type, int protocol); +void ares__close_socket(ares_channel, ares_socket_t); +int ares__connect_socket(ares_channel channel, + ares_socket_t sockfd, + const struct sockaddr *addr, + ares_socklen_t addrlen); + +#define ARES_SWAP_BYTE(a,b) \ + { unsigned char swapByte = *(a); *(a) = *(b); *(b) = swapByte; } + +#define SOCK_STATE_CALLBACK(c, s, r, w) \ + do { \ + if ((c)->sock_state_cb) \ + (c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w)); \ + } WHILE_FALSE + +#endif /* __ARES_PRIVATE_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_process.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_process.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_process.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_process.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,1548 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * Copyright (C) 2004-2017 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_SYS_UIO_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETINET_TCP_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef NETWARE +# include +#endif + +#include +#include +#include + +#include "ares.h" +#include "ares_dns.h" +#include "ares_nowarn.h" +#include "ares_private.h" + + +static int try_again(int errnum); +static void write_tcp_data(ares_channel channel, fd_set *write_fds, + ares_socket_t write_fd, struct timeval *now); +static void read_tcp_data(ares_channel channel, fd_set *read_fds, + ares_socket_t read_fd, struct timeval *now); +static void read_udp_packets(ares_channel channel, fd_set *read_fds, + ares_socket_t read_fd, struct timeval *now); +static void advance_tcp_send_queue(ares_channel channel, int whichserver, + ares_ssize_t num_bytes); +static void process_timeouts(ares_channel channel, struct timeval *now); +static void process_broken_connections(ares_channel channel, + struct timeval *now); +static void process_answer(ares_channel channel, unsigned char *abuf, + int alen, int whichserver, int tcp, + struct timeval *now); +static void handle_error(ares_channel channel, int whichserver, + struct timeval *now); +static void skip_server(ares_channel channel, struct query *query, + int whichserver); +static void next_server(ares_channel channel, struct query *query, + struct timeval *now); +static int open_tcp_socket(ares_channel channel, struct server_state *server); +static int open_udp_socket(ares_channel channel, struct server_state *server); +static int same_questions(const unsigned char *qbuf, int qlen, + const unsigned char *abuf, int alen); +static int same_address(struct sockaddr *sa, struct ares_addr *aa); +static int has_opt_rr(const unsigned char *abuf, int alen); +static void end_query(ares_channel channel, struct query *query, int status, + unsigned char *abuf, int alen); + +/* return true if now is exactly check time or later */ +int ares__timedout(struct timeval *now, + struct timeval *check) +{ + long secs = (now->tv_sec - check->tv_sec); + + if(secs > 0) + return 1; /* yes, timed out */ + if(secs < 0) + return 0; /* nope, not timed out */ + + /* if the full seconds were identical, check the sub second parts */ + return (now->tv_usec - check->tv_usec >= 0); +} + +/* add the specific number of milliseconds to the time in the first argument */ +static void timeadd(struct timeval *now, int millisecs) +{ + now->tv_sec += millisecs/1000; + now->tv_usec += (millisecs%1000)*1000; + + if(now->tv_usec >= 1000000) { + ++(now->tv_sec); + now->tv_usec -= 1000000; + } +} + +/* + * generic process function + */ +static void processfds(ares_channel channel, + fd_set *read_fds, ares_socket_t read_fd, + fd_set *write_fds, ares_socket_t write_fd) +{ + struct timeval now = ares__tvnow(); + + write_tcp_data(channel, write_fds, write_fd, &now); + read_tcp_data(channel, read_fds, read_fd, &now); + read_udp_packets(channel, read_fds, read_fd, &now); + process_timeouts(channel, &now); + process_broken_connections(channel, &now); +} + +/* Something interesting happened on the wire, or there was a timeout. + * See what's up and respond accordingly. + */ +void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds) +{ + processfds(channel, read_fds, ARES_SOCKET_BAD, write_fds, ARES_SOCKET_BAD); +} + +/* Something interesting happened on the wire, or there was a timeout. + * See what's up and respond accordingly. + */ +void ares_process_fd(ares_channel channel, + ares_socket_t read_fd, /* use ARES_SOCKET_BAD or valid + file descriptors */ + ares_socket_t write_fd) +{ + processfds(channel, NULL, read_fd, NULL, write_fd); +} + + +/* Return 1 if the specified error number describes a readiness error, or 0 + * otherwise. This is mostly for HP-UX, which could return EAGAIN or + * EWOULDBLOCK. See this man page + * + * http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html? + * manpage=/usr/share/man/man2.Z/send.2 + */ +static int try_again(int errnum) +{ +#if !defined EWOULDBLOCK && !defined EAGAIN +#error "Neither EWOULDBLOCK nor EAGAIN defined" +#endif + switch (errnum) + { +#ifdef EWOULDBLOCK + case EWOULDBLOCK: + return 1; +#endif +#if defined EAGAIN && EAGAIN != EWOULDBLOCK + case EAGAIN: + return 1; +#endif + } + return 0; +} + +static ares_ssize_t socket_writev(ares_channel channel, ares_socket_t s, const struct iovec * vec, int len) +{ + if (channel->sock_funcs) + return channel->sock_funcs->asendv(s, vec, len, channel->sock_func_cb_data); + + return writev(s, vec, len); +} + +static ares_ssize_t socket_write(ares_channel channel, ares_socket_t s, const void * data, size_t len) +{ + if (channel->sock_funcs) + { + struct iovec vec; + vec.iov_base = (void*)data; + vec.iov_len = len; + return channel->sock_funcs->asendv(s, &vec, 1, channel->sock_func_cb_data); + } + return swrite(s, data, len); +} + +/* If any TCP sockets select true for writing, write out queued data + * we have for them. + */ +static void write_tcp_data(ares_channel channel, + fd_set *write_fds, + ares_socket_t write_fd, + struct timeval *now) +{ + struct server_state *server; + struct send_request *sendreq; + struct iovec *vec; + int i; + ares_ssize_t scount; + ares_ssize_t wcount; + size_t n; + + if(!write_fds && (write_fd == ARES_SOCKET_BAD)) + /* no possible action */ + return; + + for (i = 0; i < channel->nservers; i++) + { + /* Make sure server has data to send and is selected in write_fds or + write_fd. */ + server = &channel->servers[i]; + if (!server->qhead || server->tcp_socket == ARES_SOCKET_BAD || + server->is_broken) + continue; + + if(write_fds) { + if(!FD_ISSET(server->tcp_socket, write_fds)) + continue; + } + else { + if(server->tcp_socket != write_fd) + continue; + } + + if(write_fds) + /* If there's an error and we close this socket, then open + * another with the same fd to talk to another server, then we + * don't want to think that it was the new socket that was + * ready. This is not disastrous, but is likely to result in + * extra system calls and confusion. */ + FD_CLR(server->tcp_socket, write_fds); + + /* Count the number of send queue items. */ + n = 0; + for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) + n++; + + /* Allocate iovecs so we can send all our data at once. */ + vec = ares_malloc(n * sizeof(struct iovec)); + if (vec) + { + /* Fill in the iovecs and send. */ + n = 0; + for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) + { + vec[n].iov_base = (char *) sendreq->data; + vec[n].iov_len = sendreq->len; + n++; + } + wcount = socket_writev(channel, server->tcp_socket, vec, (int)n); + ares_free(vec); + if (wcount < 0) + { + if (!try_again(SOCKERRNO)) + handle_error(channel, i, now); + continue; + } + + /* Advance the send queue by as many bytes as we sent. */ + advance_tcp_send_queue(channel, i, wcount); + } + else + { + /* Can't allocate iovecs; just send the first request. */ + sendreq = server->qhead; + + scount = socket_write(channel, server->tcp_socket, sendreq->data, sendreq->len); + if (scount < 0) + { + if (!try_again(SOCKERRNO)) + handle_error(channel, i, now); + continue; + } + + /* Advance the send queue by as many bytes as we sent. */ + advance_tcp_send_queue(channel, i, scount); + } + } +} + +/* Consume the given number of bytes from the head of the TCP send queue. */ +static void advance_tcp_send_queue(ares_channel channel, int whichserver, + ares_ssize_t num_bytes) +{ + struct send_request *sendreq; + struct server_state *server = &channel->servers[whichserver]; + while (num_bytes > 0) { + sendreq = server->qhead; + if ((size_t)num_bytes >= sendreq->len) { + num_bytes -= sendreq->len; + server->qhead = sendreq->next; + if (sendreq->data_storage) + ares_free(sendreq->data_storage); + ares_free(sendreq); + if (server->qhead == NULL) { + SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0); + server->qtail = NULL; + + /* qhead is NULL so we cannot continue this loop */ + break; + } + } + else { + sendreq->data += num_bytes; + sendreq->len -= num_bytes; + num_bytes = 0; + } + } +} + +static ares_ssize_t socket_recvfrom(ares_channel channel, + ares_socket_t s, + void * data, + size_t data_len, + int flags, + struct sockaddr *from, + ares_socklen_t *from_len) +{ + if (channel->sock_funcs) + return channel->sock_funcs->arecvfrom(s, data, data_len, + flags, from, from_len, + channel->sock_func_cb_data); + +#ifdef HAVE_RECVFROM + return recvfrom(s, data, data_len, flags, from, from_len); +#else + return sread(s, data, data_len); +#endif +} + +static ares_ssize_t socket_recv(ares_channel channel, + ares_socket_t s, + void * data, + size_t data_len) +{ + if (channel->sock_funcs) + return channel->sock_funcs->arecvfrom(s, data, data_len, 0, 0, 0, + channel->sock_func_cb_data); + + return sread(s, data, data_len); +} + +/* If any TCP socket selects true for reading, read some data, + * allocate a buffer if we finish reading the length word, and process + * a packet if we finish reading one. + */ +static void read_tcp_data(ares_channel channel, fd_set *read_fds, + ares_socket_t read_fd, struct timeval *now) +{ + struct server_state *server; + int i; + ares_ssize_t count; + + if(!read_fds && (read_fd == ARES_SOCKET_BAD)) + /* no possible action */ + return; + + for (i = 0; i < channel->nservers; i++) + { + /* Make sure the server has a socket and is selected in read_fds. */ + server = &channel->servers[i]; + if (server->tcp_socket == ARES_SOCKET_BAD || server->is_broken) + continue; + + if(read_fds) { + if(!FD_ISSET(server->tcp_socket, read_fds)) + continue; + } + else { + if(server->tcp_socket != read_fd) + continue; + } + + if(read_fds) + /* If there's an error and we close this socket, then open another + * with the same fd to talk to another server, then we don't want to + * think that it was the new socket that was ready. This is not + * disastrous, but is likely to result in extra system calls and + * confusion. */ + FD_CLR(server->tcp_socket, read_fds); + + if (server->tcp_lenbuf_pos != 2) + { + /* We haven't yet read a length word, so read that (or + * what's left to read of it). + */ + count = socket_recv(channel, server->tcp_socket, + server->tcp_lenbuf + server->tcp_lenbuf_pos, + 2 - server->tcp_lenbuf_pos); + if (count <= 0) + { + if (!(count == -1 && try_again(SOCKERRNO))) + handle_error(channel, i, now); + continue; + } + + server->tcp_lenbuf_pos += (int)count; + if (server->tcp_lenbuf_pos == 2) + { + /* We finished reading the length word. Decode the + * length and allocate a buffer for the data. + */ + server->tcp_length = server->tcp_lenbuf[0] << 8 + | server->tcp_lenbuf[1]; + server->tcp_buffer = ares_malloc(server->tcp_length); + if (!server->tcp_buffer) { + handle_error(channel, i, now); + return; /* bail out on malloc failure. TODO: make this + function return error codes */ + } + server->tcp_buffer_pos = 0; + } + } + else + { + /* Read data into the allocated buffer. */ + count = socket_recv(channel, server->tcp_socket, + server->tcp_buffer + server->tcp_buffer_pos, + server->tcp_length - server->tcp_buffer_pos); + if (count <= 0) + { + if (!(count == -1 && try_again(SOCKERRNO))) + handle_error(channel, i, now); + continue; + } + + server->tcp_buffer_pos += (int)count; + if (server->tcp_buffer_pos == server->tcp_length) + { + /* We finished reading this answer; process it and + * prepare to read another length word. + */ + process_answer(channel, server->tcp_buffer, server->tcp_length, + i, 1, now); + ares_free(server->tcp_buffer); + server->tcp_buffer = NULL; + server->tcp_lenbuf_pos = 0; + server->tcp_buffer_pos = 0; + } + } + } +} + +/* If any UDP sockets select true for reading, process them. */ +static void read_udp_packets(ares_channel channel, fd_set *read_fds, + ares_socket_t read_fd, struct timeval *now) +{ + struct server_state *server; + int i; + ares_ssize_t count; + unsigned char buf[MAXENDSSZ + 1]; +#ifdef HAVE_RECVFROM + ares_socklen_t fromlen; + union { + struct sockaddr sa; + struct sockaddr_in sa4; + struct sockaddr_in6 sa6; + } from; +#endif + + if(!read_fds && (read_fd == ARES_SOCKET_BAD)) + /* no possible action */ + return; + + for (i = 0; i < channel->nservers; i++) + { + /* Make sure the server has a socket and is selected in read_fds. */ + server = &channel->servers[i]; + + if (server->udp_socket == ARES_SOCKET_BAD || server->is_broken) + continue; + + if(read_fds) { + if(!FD_ISSET(server->udp_socket, read_fds)) + continue; + } + else { + if(server->udp_socket != read_fd) + continue; + } + + if(read_fds) + /* If there's an error and we close this socket, then open + * another with the same fd to talk to another server, then we + * don't want to think that it was the new socket that was + * ready. This is not disastrous, but is likely to result in + * extra system calls and confusion. */ + FD_CLR(server->udp_socket, read_fds); + + /* To reduce event loop overhead, read and process as many + * packets as we can. */ + do { + if (server->udp_socket == ARES_SOCKET_BAD) + count = 0; + + else { + if (server->addr.family == AF_INET) + fromlen = sizeof(from.sa4); + else + fromlen = sizeof(from.sa6); + count = socket_recvfrom(channel, server->udp_socket, (void *)buf, + sizeof(buf), 0, &from.sa, &fromlen); + } + + if (count == -1 && try_again(SOCKERRNO)) + continue; + else if (count <= 0) + handle_error(channel, i, now); +#ifdef HAVE_RECVFROM + else if (!same_address(&from.sa, &server->addr)) + /* The address the response comes from does not match the address we + * sent the request to. Someone may be attempting to perform a cache + * poisoning attack. */ + break; +#endif + else + process_answer(channel, buf, (int)count, i, 0, now); + } while (count > 0); + } +} + +/* If any queries have timed out, note the timeout and move them on. */ +static void process_timeouts(ares_channel channel, struct timeval *now) +{ + time_t t; /* the time of the timeouts we're processing */ + struct query *query; + struct list_node* list_head; + struct list_node* list_node; + + /* Process all the timeouts that have fired since the last time we processed + * timeouts. If things are going well, then we'll have hundreds/thousands of + * queries that fall into future buckets, and only a handful of requests + * that fall into the "now" bucket, so this should be quite quick. + */ + for (t = channel->last_timeout_processed; t <= now->tv_sec; t++) + { + list_head = &(channel->queries_by_timeout[t % ARES_TIMEOUT_TABLE_SIZE]); + for (list_node = list_head->next; list_node != list_head; ) + { + query = list_node->data; + list_node = list_node->next; /* in case the query gets deleted */ + if (query->timeout.tv_sec && ares__timedout(now, &query->timeout)) + { + query->error_status = ARES_ETIMEOUT; + ++query->timeouts; + next_server(channel, query, now); + } + } + } + channel->last_timeout_processed = now->tv_sec; +} + +/* Handle an answer from a server. */ +static void process_answer(ares_channel channel, unsigned char *abuf, + int alen, int whichserver, int tcp, + struct timeval *now) +{ + int tc, rcode, packetsz; + unsigned short id; + struct query *query; + struct list_node* list_head; + struct list_node* list_node; + + /* If there's no room in the answer for a header, we can't do much + * with it. */ + if (alen < HFIXEDSZ) + return; + + /* Grab the query ID, truncate bit, and response code from the packet. */ + id = DNS_HEADER_QID(abuf); + tc = DNS_HEADER_TC(abuf); + rcode = DNS_HEADER_RCODE(abuf); + + /* Find the query corresponding to this packet. The queries are + * hashed/bucketed by query id, so this lookup should be quick. Note that + * both the query id and the questions must be the same; when the query id + * wraps around we can have multiple outstanding queries with the same query + * id, so we need to check both the id and question. + */ + query = NULL; + list_head = &(channel->queries_by_qid[id % ARES_QID_TABLE_SIZE]); + for (list_node = list_head->next; list_node != list_head; + list_node = list_node->next) + { + struct query *q = list_node->data; + if ((q->qid == id) && same_questions(q->qbuf, q->qlen, abuf, alen)) + { + query = q; + break; + } + } + if (!query) + return; + + packetsz = PACKETSZ; + /* If we use EDNS and server answers with FORMERR without an OPT RR, the protocol + * extension is not understood by the responder. We must retry the query + * without EDNS enabled. */ + if (channel->flags & ARES_FLAG_EDNS) + { + packetsz = channel->ednspsz; + if (rcode == FORMERR && has_opt_rr(abuf, alen) != 1) + { + int qlen = (query->tcplen - 2) - EDNSFIXEDSZ; + channel->flags ^= ARES_FLAG_EDNS; + query->tcplen -= EDNSFIXEDSZ; + query->qlen -= EDNSFIXEDSZ; + query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff); + query->tcpbuf[1] = (unsigned char)(qlen & 0xff); + DNS_HEADER_SET_ARCOUNT(query->tcpbuf + 2, 0); + query->tcpbuf = ares_realloc(query->tcpbuf, query->tcplen); + query->qbuf = query->tcpbuf + 2; + ares__send_query(channel, query, now); + return; + } + } + + /* If we got a truncated UDP packet and are not ignoring truncation, + * don't accept the packet, and switch the query to TCP if we hadn't + * done so already. + */ + if ((tc || alen > packetsz) && !tcp && !(channel->flags & ARES_FLAG_IGNTC)) + { + if (!query->using_tcp) + { + query->using_tcp = 1; + ares__send_query(channel, query, now); + } + return; + } + + /* Limit alen to PACKETSZ if we aren't using TCP (only relevant if we + * are ignoring truncation. + */ + if (alen > packetsz && !tcp) + alen = packetsz; + + /* If we aren't passing through all error packets, discard packets + * with SERVFAIL, NOTIMP, or REFUSED response codes. + */ + if (!(channel->flags & ARES_FLAG_NOCHECKRESP)) + { + if (rcode == SERVFAIL || rcode == NOTIMP || rcode == REFUSED) + { + skip_server(channel, query, whichserver); + if (query->server == whichserver) + next_server(channel, query, now); + return; + } + } + + end_query(channel, query, ARES_SUCCESS, abuf, alen); +} + +/* Close all the connections that are no longer usable. */ +static void process_broken_connections(ares_channel channel, + struct timeval *now) +{ + int i; + for (i = 0; i < channel->nservers; i++) + { + struct server_state *server = &channel->servers[i]; + if (server->is_broken) + { + handle_error(channel, i, now); + } + } +} + +/* Swap the contents of two lists */ +static void swap_lists(struct list_node* head_a, + struct list_node* head_b) +{ + int is_a_empty = ares__is_list_empty(head_a); + int is_b_empty = ares__is_list_empty(head_b); + struct list_node old_a = *head_a; + struct list_node old_b = *head_b; + + if (is_a_empty) { + ares__init_list_head(head_b); + } else { + *head_b = old_a; + old_a.next->prev = head_b; + old_a.prev->next = head_b; + } + if (is_b_empty) { + ares__init_list_head(head_a); + } else { + *head_a = old_b; + old_b.next->prev = head_a; + old_b.prev->next = head_a; + } +} + +static void handle_error(ares_channel channel, int whichserver, + struct timeval *now) +{ + struct server_state *server; + struct query *query; + struct list_node list_head; + struct list_node* list_node; + + server = &channel->servers[whichserver]; + + /* Reset communications with this server. */ + ares__close_sockets(channel, server); + + /* Tell all queries talking to this server to move on and not try this + * server again. We steal the current list of queries that were in-flight to + * this server, since when we call next_server this can cause the queries to + * be re-sent to this server, which will re-insert these queries in that + * same server->queries_to_server list. + */ + ares__init_list_head(&list_head); + swap_lists(&list_head, &(server->queries_to_server)); + for (list_node = list_head.next; list_node != &list_head; ) + { + query = list_node->data; + list_node = list_node->next; /* in case the query gets deleted */ + assert(query->server == whichserver); + skip_server(channel, query, whichserver); + next_server(channel, query, now); + } + /* Each query should have removed itself from our temporary list as + * it re-sent itself or finished up... + */ + assert(ares__is_list_empty(&list_head)); +} + +static void skip_server(ares_channel channel, struct query *query, + int whichserver) +{ + /* The given server gave us problems with this query, so if we have the + * luxury of using other servers, then let's skip the potentially broken + * server and just use the others. If we only have one server and we need to + * retry then we should just go ahead and re-use that server, since it's our + * only hope; perhaps we just got unlucky, and retrying will work (eg, the + * server timed out our TCP connection just as we were sending another + * request). + */ + if (channel->nservers > 1) + { + query->server_info[whichserver].skip_server = 1; + } +} + +static void next_server(ares_channel channel, struct query *query, + struct timeval *now) +{ + /* We need to try each server channel->tries times. We have channel->nservers + * servers to try. In total, we need to do channel->nservers * channel->tries + * attempts. Use query->try to remember how many times we already attempted + * this query. Use modular arithmetic to find the next server to try. */ + while (++(query->try_count) < (channel->nservers * channel->tries)) + { + struct server_state *server; + + /* Move on to the next server. */ + query->server = (query->server + 1) % channel->nservers; + server = &channel->servers[query->server]; + + /* We don't want to use this server if (1) we decided this connection is + * broken, and thus about to be closed, (2) we've decided to skip this + * server because of earlier errors we encountered, or (3) we already + * sent this query over this exact connection. + */ + if (!server->is_broken && + !query->server_info[query->server].skip_server && + !(query->using_tcp && + (query->server_info[query->server].tcp_connection_generation == + server->tcp_connection_generation))) + { + ares__send_query(channel, query, now); + return; + } + + /* You might think that with TCP we only need one try. However, even + * when using TCP, servers can time-out our connection just as we're + * sending a request, or close our connection because they die, or never + * send us a reply because they get wedged or tickle a bug that drops + * our request. + */ + } + + /* If we are here, all attempts to perform query failed. */ + end_query(channel, query, query->error_status, NULL, 0); +} + +void ares__send_query(ares_channel channel, struct query *query, + struct timeval *now) +{ + struct send_request *sendreq; + struct server_state *server; + int timeplus; + + server = &channel->servers[query->server]; + if (query->using_tcp) + { + /* Make sure the TCP socket for this server is set up and queue + * a send request. + */ + if (server->tcp_socket == ARES_SOCKET_BAD) + { + if (open_tcp_socket(channel, server) == -1) + { + skip_server(channel, query, query->server); + next_server(channel, query, now); + return; + } + } + sendreq = ares_malloc(sizeof(struct send_request)); + if (!sendreq) + { + end_query(channel, query, ARES_ENOMEM, NULL, 0); + return; + } + memset(sendreq, 0, sizeof(struct send_request)); + /* To make the common case fast, we avoid copies by using the query's + * tcpbuf for as long as the query is alive. In the rare case where the + * query ends while it's queued for transmission, then we give the + * sendreq its own copy of the request packet and put it in + * sendreq->data_storage. + */ + sendreq->data_storage = NULL; + sendreq->data = query->tcpbuf; + sendreq->len = query->tcplen; + sendreq->owner_query = query; + sendreq->next = NULL; + if (server->qtail) + server->qtail->next = sendreq; + else + { + SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 1); + server->qhead = sendreq; + } + server->qtail = sendreq; + query->server_info[query->server].tcp_connection_generation = + server->tcp_connection_generation; + } + else + { + if (server->udp_socket == ARES_SOCKET_BAD) + { + if (open_udp_socket(channel, server) == -1) + { + skip_server(channel, query, query->server); + next_server(channel, query, now); + return; + } + } + if (socket_write(channel, server->udp_socket, query->qbuf, query->qlen) == -1) + { + /* FIXME: Handle EAGAIN here since it likely can happen. */ + skip_server(channel, query, query->server); + next_server(channel, query, now); + return; + } + } + + /* For each trip through the entire server list, double the channel's + * assigned timeout, avoiding overflow. If channel->timeout is negative, + * leave it as-is, even though that should be impossible here. + */ + timeplus = channel->timeout; + { + /* How many times do we want to double it? Presume sane values here. */ + const int shift = query->try_count / channel->nservers; + + /* Is there enough room to shift timeplus left that many times? + * + * To find out, confirm that all of the bits we'll shift away are zero. + * Stop considering a shift if we get to the point where we could shift + * a 1 into the sign bit (i.e. when shift is within two of the bit + * count). + * + * This has the side benefit of leaving negative numbers unchanged. + */ + if(shift <= (int)(sizeof(int) * CHAR_BIT - 1) + && (timeplus >> (sizeof(int) * CHAR_BIT - 1 - shift)) == 0) + { + timeplus <<= shift; + } + } + + query->timeout = *now; + timeadd(&query->timeout, timeplus); + /* Keep track of queries bucketed by timeout, so we can process + * timeout events quickly. + */ + ares__remove_from_list(&(query->queries_by_timeout)); + ares__insert_in_list( + &(query->queries_by_timeout), + &(channel->queries_by_timeout[query->timeout.tv_sec % + ARES_TIMEOUT_TABLE_SIZE])); + + /* Keep track of queries bucketed by server, so we can process server + * errors quickly. + */ + ares__remove_from_list(&(query->queries_to_server)); + ares__insert_in_list(&(query->queries_to_server), + &(server->queries_to_server)); +} + +/* + * setsocknonblock sets the given socket to either blocking or non-blocking + * mode based on the 'nonblock' boolean argument. This function is highly + * portable. + */ +static int setsocknonblock(ares_socket_t sockfd, /* operate on this */ + int nonblock /* TRUE or FALSE */) +{ +#if defined(USE_BLOCKING_SOCKETS) + + return 0; /* returns success */ + +#elif defined(HAVE_FCNTL_O_NONBLOCK) + + /* most recent unix versions */ + int flags; + flags = fcntl(sockfd, F_GETFL, 0); + if (FALSE != nonblock) + return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); + else + return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); /* LCOV_EXCL_LINE */ + +#elif defined(HAVE_IOCTL_FIONBIO) + + /* older unix versions */ + int flags = nonblock ? 1 : 0; + return ioctl(sockfd, FIONBIO, &flags); + +#elif defined(HAVE_IOCTLSOCKET_FIONBIO) + +#ifdef WATT32 + char flags = nonblock ? 1 : 0; +#else + /* Windows */ + unsigned long flags = nonblock ? 1UL : 0UL; +#endif + return ioctlsocket(sockfd, FIONBIO, &flags); + +#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO) + + /* Amiga */ + long flags = nonblock ? 1L : 0L; + return IoctlSocket(sockfd, FIONBIO, flags); + +#elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK) + + /* BeOS */ + long b = nonblock ? 1L : 0L; + return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); + +#else +# error "no non-blocking method was found/used/set" +#endif +} + +static int configure_socket(ares_socket_t s, int family, ares_channel channel) +{ + union { + struct sockaddr sa; + struct sockaddr_in sa4; + struct sockaddr_in6 sa6; + } local; + + /* do not set options for user-managed sockets */ + if (channel->sock_funcs) + return 0; + + (void)setsocknonblock(s, TRUE); + +#if defined(FD_CLOEXEC) && !defined(MSDOS) + /* Configure the socket fd as close-on-exec. */ + if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) + return -1; /* LCOV_EXCL_LINE */ +#endif + + /* Set the socket's send and receive buffer sizes. */ + if ((channel->socket_send_buffer_size > 0) && + setsockopt(s, SOL_SOCKET, SO_SNDBUF, + (void *)&channel->socket_send_buffer_size, + sizeof(channel->socket_send_buffer_size)) == -1) + return -1; + + if ((channel->socket_receive_buffer_size > 0) && + setsockopt(s, SOL_SOCKET, SO_RCVBUF, + (void *)&channel->socket_receive_buffer_size, + sizeof(channel->socket_receive_buffer_size)) == -1) + return -1; + +#ifdef SO_BINDTODEVICE + if (channel->local_dev_name[0]) { + if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, + channel->local_dev_name, sizeof(channel->local_dev_name))) { + /* Only root can do this, and usually not fatal if it doesn't work, so */ + /* just continue on. */ + } + } +#endif + + if (family == AF_INET) { + if (channel->local_ip4) { + memset(&local.sa4, 0, sizeof(local.sa4)); + local.sa4.sin_family = AF_INET; + local.sa4.sin_addr.s_addr = htonl(channel->local_ip4); + if (bind(s, &local.sa, sizeof(local.sa4)) < 0) + return -1; + } + } + else if (family == AF_INET6) { + if (memcmp(channel->local_ip6, &ares_in6addr_any, + sizeof(channel->local_ip6)) != 0) { + memset(&local.sa6, 0, sizeof(local.sa6)); + local.sa6.sin6_family = AF_INET6; + memcpy(&local.sa6.sin6_addr, channel->local_ip6, + sizeof(channel->local_ip6)); + if (bind(s, &local.sa, sizeof(local.sa6)) < 0) + return -1; + } + } + + return 0; +} + +static int open_tcp_socket(ares_channel channel, struct server_state *server) +{ + ares_socket_t s; + int opt; + ares_socklen_t salen; + union { + struct sockaddr_in sa4; + struct sockaddr_in6 sa6; + } saddr; + struct sockaddr *sa; + + switch (server->addr.family) + { + case AF_INET: + sa = (void *)&saddr.sa4; + salen = sizeof(saddr.sa4); + memset(sa, 0, salen); + saddr.sa4.sin_family = AF_INET; + if (server->addr.tcp_port) { + saddr.sa4.sin_port = aresx_sitous(server->addr.tcp_port); + } else { + saddr.sa4.sin_port = aresx_sitous(channel->tcp_port); + } + memcpy(&saddr.sa4.sin_addr, &server->addr.addrV4, + sizeof(server->addr.addrV4)); + break; + case AF_INET6: + sa = (void *)&saddr.sa6; + salen = sizeof(saddr.sa6); + memset(sa, 0, salen); + saddr.sa6.sin6_family = AF_INET6; + if (server->addr.tcp_port) { + saddr.sa6.sin6_port = aresx_sitous(server->addr.tcp_port); + } else { + saddr.sa6.sin6_port = aresx_sitous(channel->tcp_port); + } + memcpy(&saddr.sa6.sin6_addr, &server->addr.addrV6, + sizeof(server->addr.addrV6)); + break; + default: + return -1; /* LCOV_EXCL_LINE */ + } + + /* Acquire a socket. */ + s = ares__open_socket(channel, server->addr.family, SOCK_STREAM, 0); + if (s == ARES_SOCKET_BAD) + return -1; + + /* Configure it. */ + if (configure_socket(s, server->addr.family, channel) < 0) + { + ares__close_socket(channel, s); + return -1; + } + +#ifdef TCP_NODELAY + /* + * Disable the Nagle algorithm (only relevant for TCP sockets, and thus not + * in configure_socket). In general, in DNS lookups we're pretty much + * interested in firing off a single request and then waiting for a reply, + * so batching isn't very interesting. + */ + opt = 1; + if (channel->sock_funcs == 0 + && + setsockopt(s, IPPROTO_TCP, TCP_NODELAY, + (void *)&opt, sizeof(opt)) == -1) + { + ares__close_socket(channel, s); + return -1; + } +#endif + + if (channel->sock_config_cb) + { + int err = channel->sock_config_cb(s, SOCK_STREAM, + channel->sock_config_cb_data); + if (err < 0) + { + ares__close_socket(channel, s); + return err; + } + } + + /* Connect to the server. */ + if (ares__connect_socket(channel, s, sa, salen) == -1) + { + int err = SOCKERRNO; + + if (err != EINPROGRESS && err != EWOULDBLOCK) + { + ares__close_socket(channel, s); + return -1; + } + } + + if (channel->sock_create_cb) + { + int err = channel->sock_create_cb(s, SOCK_STREAM, + channel->sock_create_cb_data); + if (err < 0) + { + ares__close_socket(channel, s); + return err; + } + } + + SOCK_STATE_CALLBACK(channel, s, 1, 0); + server->tcp_buffer_pos = 0; + server->tcp_socket = s; + server->tcp_connection_generation = ++channel->tcp_connection_generation; + return 0; +} + +static int open_udp_socket(ares_channel channel, struct server_state *server) +{ + ares_socket_t s; + ares_socklen_t salen; + union { + struct sockaddr_in sa4; + struct sockaddr_in6 sa6; + } saddr; + struct sockaddr *sa; + + switch (server->addr.family) + { + case AF_INET: + sa = (void *)&saddr.sa4; + salen = sizeof(saddr.sa4); + memset(sa, 0, salen); + saddr.sa4.sin_family = AF_INET; + if (server->addr.udp_port) { + saddr.sa4.sin_port = aresx_sitous(server->addr.udp_port); + } else { + saddr.sa4.sin_port = aresx_sitous(channel->udp_port); + } + memcpy(&saddr.sa4.sin_addr, &server->addr.addrV4, + sizeof(server->addr.addrV4)); + break; + case AF_INET6: + sa = (void *)&saddr.sa6; + salen = sizeof(saddr.sa6); + memset(sa, 0, salen); + saddr.sa6.sin6_family = AF_INET6; + if (server->addr.udp_port) { + saddr.sa6.sin6_port = aresx_sitous(server->addr.udp_port); + } else { + saddr.sa6.sin6_port = aresx_sitous(channel->udp_port); + } + memcpy(&saddr.sa6.sin6_addr, &server->addr.addrV6, + sizeof(server->addr.addrV6)); + break; + default: + return -1; /* LCOV_EXCL_LINE */ + } + + /* Acquire a socket. */ + s = ares__open_socket(channel, server->addr.family, SOCK_DGRAM, 0); + if (s == ARES_SOCKET_BAD) + return -1; + + /* Set the socket non-blocking. */ + if (configure_socket(s, server->addr.family, channel) < 0) + { + ares__close_socket(channel, s); + return -1; + } + + if (channel->sock_config_cb) + { + int err = channel->sock_config_cb(s, SOCK_DGRAM, + channel->sock_config_cb_data); + if (err < 0) + { + ares__close_socket(channel, s); + return err; + } + } + + /* Connect to the server. */ + if (ares__connect_socket(channel, s, sa, salen) == -1) + { + int err = SOCKERRNO; + + if (err != EINPROGRESS && err != EWOULDBLOCK) + { + ares__close_socket(channel, s); + return -1; + } + } + + if (channel->sock_create_cb) + { + int err = channel->sock_create_cb(s, SOCK_DGRAM, + channel->sock_create_cb_data); + if (err < 0) + { + ares__close_socket(channel, s); + return err; + } + } + + SOCK_STATE_CALLBACK(channel, s, 1, 0); + + server->udp_socket = s; + return 0; +} + +static int same_questions(const unsigned char *qbuf, int qlen, + const unsigned char *abuf, int alen) +{ + struct { + const unsigned char *p; + int qdcount; + char *name; + long namelen; + int type; + int dnsclass; + } q, a; + int i, j; + + if (qlen < HFIXEDSZ || alen < HFIXEDSZ) + return 0; + + /* Extract qdcount from the request and reply buffers and compare them. */ + q.qdcount = DNS_HEADER_QDCOUNT(qbuf); + a.qdcount = DNS_HEADER_QDCOUNT(abuf); + if (q.qdcount != a.qdcount) + return 0; + + /* For each question in qbuf, find it in abuf. */ + q.p = qbuf + HFIXEDSZ; + for (i = 0; i < q.qdcount; i++) + { + /* Decode the question in the query. */ + if (ares_expand_name(q.p, qbuf, qlen, &q.name, &q.namelen) + != ARES_SUCCESS) + return 0; + q.p += q.namelen; + if (q.p + QFIXEDSZ > qbuf + qlen) + { + ares_free(q.name); + return 0; + } + q.type = DNS_QUESTION_TYPE(q.p); + q.dnsclass = DNS_QUESTION_CLASS(q.p); + q.p += QFIXEDSZ; + + /* Search for this question in the answer. */ + a.p = abuf + HFIXEDSZ; + for (j = 0; j < a.qdcount; j++) + { + /* Decode the question in the answer. */ + if (ares_expand_name(a.p, abuf, alen, &a.name, &a.namelen) + != ARES_SUCCESS) + { + ares_free(q.name); + return 0; + } + a.p += a.namelen; + if (a.p + QFIXEDSZ > abuf + alen) + { + ares_free(q.name); + ares_free(a.name); + return 0; + } + a.type = DNS_QUESTION_TYPE(a.p); + a.dnsclass = DNS_QUESTION_CLASS(a.p); + a.p += QFIXEDSZ; + + /* Compare the decoded questions. */ + if (strcasecmp(q.name, a.name) == 0 && q.type == a.type + && q.dnsclass == a.dnsclass) + { + ares_free(a.name); + break; + } + ares_free(a.name); + } + + ares_free(q.name); + if (j == a.qdcount) + return 0; + } + return 1; +} + +static int same_address(struct sockaddr *sa, struct ares_addr *aa) +{ + void *addr1; + void *addr2; + + if (sa->sa_family == aa->family) + { + switch (aa->family) + { + case AF_INET: + addr1 = &aa->addrV4; + addr2 = &(CARES_INADDR_CAST(struct sockaddr_in *, sa))->sin_addr; + if (memcmp(addr1, addr2, sizeof(aa->addrV4)) == 0) + return 1; /* match */ + break; + case AF_INET6: + addr1 = &aa->addrV6; + addr2 = &(CARES_INADDR_CAST(struct sockaddr_in6 *, sa))->sin6_addr; + if (memcmp(addr1, addr2, sizeof(aa->addrV6)) == 0) + return 1; /* match */ + break; + default: + break; /* LCOV_EXCL_LINE */ + } + } + return 0; /* different */ +} + +/* search for an OPT RR in the response */ +static int has_opt_rr(const unsigned char *abuf, int alen) +{ + unsigned int qdcount, ancount, nscount, arcount, i; + const unsigned char *aptr; + int status; + + if (alen < HFIXEDSZ) + return -1; + + /* Parse the answer header. */ + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + nscount = DNS_HEADER_NSCOUNT(abuf); + arcount = DNS_HEADER_ARCOUNT(abuf); + + aptr = abuf + HFIXEDSZ; + + /* skip the questions */ + for (i = 0; i < qdcount; i++) + { + char* name; + long len; + status = ares_expand_name(aptr, abuf, alen, &name, &len); + if (status != ARES_SUCCESS) + return -1; + ares_free_string(name); + if (aptr + len + QFIXEDSZ > abuf + alen) + return -1; + aptr += len + QFIXEDSZ; + } + + /* skip the ancount and nscount */ + for (i = 0; i < ancount + nscount; i++) + { + char* name; + long len; + int dlen; + status = ares_expand_name(aptr, abuf, alen, &name, &len); + if (status != ARES_SUCCESS) + return -1; + ares_free_string(name); + if (aptr + len + RRFIXEDSZ > abuf + alen) + return -1; + aptr += len; + dlen = DNS_RR_LEN(aptr); + aptr += RRFIXEDSZ; + if (aptr + dlen > abuf + alen) + return -1; + aptr += dlen; + } + + /* search for rr type (41) - opt */ + for (i = 0; i < arcount; i++) + { + char* name; + long len; + int dlen; + status = ares_expand_name(aptr, abuf, alen, &name, &len); + if (status != ARES_SUCCESS) + return -1; + ares_free_string(name); + if (aptr + len + RRFIXEDSZ > abuf + alen) + return -1; + aptr += len; + + if (DNS_RR_TYPE(aptr) == T_OPT) + return 1; + + dlen = DNS_RR_LEN(aptr); + aptr += RRFIXEDSZ; + if (aptr + dlen > abuf + alen) + return -1; + aptr += dlen; + } + + return 0; +} + +static void end_query (ares_channel channel, struct query *query, int status, + unsigned char *abuf, int alen) +{ + int i; + + /* First we check to see if this query ended while one of our send + * queues still has pointers to it. + */ + for (i = 0; i < channel->nservers; i++) + { + struct server_state *server = &channel->servers[i]; + struct send_request *sendreq; + for (sendreq = server->qhead; sendreq; sendreq = sendreq->next) + if (sendreq->owner_query == query) + { + sendreq->owner_query = NULL; + assert(sendreq->data_storage == NULL); + if (status == ARES_SUCCESS) + { + /* We got a reply for this query, but this queued sendreq + * points into this soon-to-be-gone query's tcpbuf. Probably + * this means we timed out and queued the query for + * retransmission, then received a response before actually + * retransmitting. This is perfectly fine, so we want to keep + * the connection running smoothly if we can. But in the worst + * case we may have sent only some prefix of the query, with + * some suffix of the query left to send. Also, the buffer may + * be queued on multiple queues. To prevent dangling pointers + * to the query's tcpbuf and handle these cases, we just give + * such sendreqs their own copy of the query packet. + */ + sendreq->data_storage = ares_malloc(sendreq->len); + if (sendreq->data_storage != NULL) + { + memcpy(sendreq->data_storage, sendreq->data, sendreq->len); + sendreq->data = sendreq->data_storage; + } + } + if ((status != ARES_SUCCESS) || (sendreq->data_storage == NULL)) + { + /* We encountered an error (probably a timeout, suggesting the + * DNS server we're talking to is probably unreachable, + * wedged, or severely overloaded) or we couldn't copy the + * request, so mark the connection as broken. When we get to + * process_broken_connections() we'll close the connection and + * try to re-send requests to another server. + */ + server->is_broken = 1; + /* Just to be paranoid, zero out this sendreq... */ + sendreq->data = NULL; + sendreq->len = 0; + } + } + } + + /* Invoke the callback */ + query->callback(query->arg, status, query->timeouts, abuf, alen); + ares__free_query(query); + + /* Simple cleanup policy: if no queries are remaining, close all network + * sockets unless STAYOPEN is set. + */ + if (!(channel->flags & ARES_FLAG_STAYOPEN) && + ares__is_list_empty(&(channel->all_queries))) + { + for (i = 0; i < channel->nservers; i++) + ares__close_sockets(channel, &channel->servers[i]); + } +} + +void ares__free_query(struct query *query) +{ + /* Remove the query from all the lists in which it is linked */ + ares__remove_from_list(&(query->queries_by_qid)); + ares__remove_from_list(&(query->queries_by_timeout)); + ares__remove_from_list(&(query->queries_to_server)); + ares__remove_from_list(&(query->all_queries)); + /* Zero out some important stuff, to help catch bugs */ + query->callback = NULL; + query->arg = NULL; + /* Deallocate the memory associated with the query */ + ares_free(query->tcpbuf); + ares_free(query->server_info); + ares_free(query); +} + +ares_socket_t ares__open_socket(ares_channel channel, + int af, int type, int protocol) +{ + if (channel->sock_funcs) + return channel->sock_funcs->asocket(af, + type, + protocol, + channel->sock_func_cb_data); + else + return socket(af, type, protocol); +} + +int ares__connect_socket(ares_channel channel, + ares_socket_t sockfd, + const struct sockaddr *addr, + ares_socklen_t addrlen) +{ + if (channel->sock_funcs) + return channel->sock_funcs->aconnect(sockfd, + addr, + addrlen, + channel->sock_func_cb_data); + else + return connect(sockfd, addr, addrlen); +} + +void ares__close_socket(ares_channel channel, ares_socket_t s) +{ + if (channel->sock_funcs) + channel->sock_funcs->aclose(s, channel->sock_func_cb_data); + else + sclose(s); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_query.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_query.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_query.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_query.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,180 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +struct qquery { + ares_callback callback; + void *arg; +}; + +static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen); + +static void rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len) +{ + unsigned char x; + unsigned char y; + unsigned char* state; + unsigned char xorIndex; + int counter; + + x = key->x; + y = key->y; + + state = &key->state[0]; + for(counter = 0; counter < buffer_len; counter ++) + { + x = (unsigned char)((x + 1) % 256); + y = (unsigned char)((state[x] + y) % 256); + ARES_SWAP_BYTE(&state[x], &state[y]); + + xorIndex = (unsigned char)((state[x] + state[y]) % 256); + + buffer_ptr[counter] = (unsigned char)(buffer_ptr[counter]^state[xorIndex]); + } + key->x = x; + key->y = y; +} + +static struct query* find_query_by_id(ares_channel channel, unsigned short id) +{ + unsigned short qid; + struct list_node* list_head; + struct list_node* list_node; + DNS_HEADER_SET_QID(((unsigned char*)&qid), id); + + /* Find the query corresponding to this packet. */ + list_head = &(channel->queries_by_qid[qid % ARES_QID_TABLE_SIZE]); + for (list_node = list_head->next; list_node != list_head; + list_node = list_node->next) + { + struct query *q = list_node->data; + if (q->qid == qid) + return q; + } + return NULL; +} + + +/* a unique query id is generated using an rc4 key. Since the id may already + be used by a running query (as infrequent as it may be), a lookup is + performed per id generation. In practice this search should happen only + once per newly generated id +*/ +static unsigned short generate_unique_id(ares_channel channel) +{ + unsigned short id; + + do { + id = ares__generate_new_id(&channel->id_key); + } while (find_query_by_id(channel, id)); + + return (unsigned short)id; +} + +unsigned short ares__generate_new_id(rc4_key* key) +{ + unsigned short r=0; + rc4(key, (unsigned char *)&r, sizeof(r)); + return r; +} + +void ares_query(ares_channel channel, const char *name, int dnsclass, + int type, ares_callback callback, void *arg) +{ + struct qquery *qquery; + unsigned char *qbuf; + int qlen, rd, status; + + /* Compose the query. */ + rd = !(channel->flags & ARES_FLAG_NORECURSE); + status = ares_create_query(name, dnsclass, type, channel->next_id, rd, &qbuf, + &qlen, (channel->flags & ARES_FLAG_EDNS) ? channel->ednspsz : 0); + if (status != ARES_SUCCESS) + { + if (qbuf != NULL) ares_free(qbuf); + callback(arg, status, 0, NULL, 0); + return; + } + + channel->next_id = generate_unique_id(channel); + + /* Allocate and fill in the query structure. */ + qquery = ares_malloc(sizeof(struct qquery)); + if (!qquery) + { + ares_free_string(qbuf); + callback(arg, ARES_ENOMEM, 0, NULL, 0); + return; + } + qquery->callback = callback; + qquery->arg = arg; + + /* Send it off. qcallback will be called when we get an answer. */ + ares_send(channel, qbuf, qlen, qcallback, qquery); + ares_free_string(qbuf); +} + +static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen) +{ + struct qquery *qquery = (struct qquery *) arg; + unsigned int ancount; + int rcode; + + if (status != ARES_SUCCESS) + qquery->callback(qquery->arg, status, timeouts, abuf, alen); + else + { + /* Pull the response code and answer count from the packet. */ + rcode = DNS_HEADER_RCODE(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + + /* Convert errors. */ + switch (rcode) + { + case NOERROR: + status = (ancount > 0) ? ARES_SUCCESS : ARES_ENODATA; + break; + case FORMERR: + status = ARES_EFORMERR; + break; + case SERVFAIL: + status = ARES_ESERVFAIL; + break; + case NXDOMAIN: + status = ARES_ENOTFOUND; + break; + case NOTIMP: + status = ARES_ENOTIMP; + break; + case REFUSED: + status = ARES_EREFUSED; + break; + } + qquery->callback(qquery->arg, status, timeouts, abuf, alen); + } + ares_free(qquery); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__readaddrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__readaddrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__readaddrinfo.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__readaddrinfo.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,251 @@ +/* Copyright (C) 2019 by Andrew Selivanov + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares.h" +#include "ares_inet_net_pton.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +#define MAX_ALIASES 40 + +int ares__readaddrinfo(FILE *fp, + const char *name, + unsigned short port, + const struct ares_addrinfo_hints *hints, + struct ares_addrinfo *ai) +{ + char *line = NULL, *p, *q; + char *txtaddr, *txthost, *txtalias; + char *aliases[MAX_ALIASES]; + unsigned int i, alias_count; + int status = ARES_SUCCESS; + size_t linesize; + struct ares_addrinfo_cname *cname = NULL, *cnames = NULL; + struct ares_addrinfo_node *nodes = NULL; + int match_with_alias, match_with_canonical; + int want_cname = hints->ai_flags & ARES_AI_CANONNAME; + + /* Validate family */ + switch (hints->ai_family) { + case AF_INET: + case AF_INET6: + case AF_UNSPEC: + break; + default: + return ARES_EBADFAMILY; + } + + ai->name = ares_strdup(name); + if(!ai->name) + { + status = ARES_ENOMEM; + goto fail; + } + + while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) + { + match_with_alias = 0; + match_with_canonical = 0; + alias_count = 0; + /* Trim line comment. */ + p = line; + while (*p && (*p != '#')) + p++; + *p = '\0'; + + /* Trim trailing whitespace. */ + q = p - 1; + while ((q >= line) && ISSPACE(*q)) + q--; + *++q = '\0'; + + /* Skip leading whitespace. */ + p = line; + while (*p && ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if empty. */ + continue; + + /* Pointer to start of IPv4 or IPv6 address part. */ + txtaddr = p; + + /* Advance past address part. */ + while (*p && !ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if reached end of line. */ + continue; + + /* Null terminate address part. */ + *p = '\0'; + + /* Advance to host name */ + p++; + while (*p && ISSPACE(*p)) + p++; + if (!*p) + /* Ignore line if reached end of line. */ + continue; /* LCOV_EXCL_LINE: trailing whitespace already stripped */ + + /* Pointer to start of host name. */ + txthost = p; + + /* Advance past host name. */ + while (*p && !ISSPACE(*p)) + p++; + + /* Pointer to start of first alias. */ + txtalias = NULL; + if (*p) + { + q = p + 1; + while (*q && ISSPACE(*q)) + q++; + if (*q) + txtalias = q; + } + + /* Null terminate host name. */ + *p = '\0'; + + /* Find out if host name matches with canonical host name. */ + if (strcasecmp(txthost, name) == 0) + { + match_with_canonical = 1; + } + + /* Find out if host name matches with one of the aliases. */ + while (txtalias) + { + p = txtalias; + while (*p && !ISSPACE(*p)) + p++; + q = p; + while (*q && ISSPACE(*q)) + q++; + *p = '\0'; + if (strcasecmp(txtalias, name) == 0) + { + match_with_alias = 1; + if (!want_cname) + break; + } + if (alias_count < MAX_ALIASES) + { + aliases[alias_count++] = txtalias; + } + txtalias = *q ? q : NULL; + } + + /* Try next line if host does not match. */ + if (!match_with_alias && !match_with_canonical) + { + continue; + } + + /* + * Convert address string to network address for the requested families. + * Actual address family possible values are AF_INET and AF_INET6 only. + */ + if ((hints->ai_family == AF_INET) || (hints->ai_family == AF_UNSPEC)) + { + struct in_addr addr4; + if (ares_inet_pton(AF_INET, txtaddr, &addr4) == 1) + { + status = ares_append_ai_node(AF_INET, port, 0, &addr4, &nodes); + if (status != ARES_SUCCESS) + { + goto fail; + } + } + } + if ((hints->ai_family == AF_INET6) || (hints->ai_family == AF_UNSPEC)) + { + struct ares_in6_addr addr6; + if (ares_inet_pton(AF_INET6, txtaddr, &addr6) == 1) + { + status = ares_append_ai_node(AF_INET6, port, 0, &addr6, &nodes); + if (status != ARES_SUCCESS) + { + goto fail; + } + } + } + + if (status != ARES_SUCCESS) + /* Ignore line if invalid address string for the requested family. */ + continue; + + if (want_cname) + { + for (i = 0; i < alias_count; ++i) + { + cname = ares__append_addrinfo_cname(&cnames); + if (!cname) + { + status = ARES_ENOMEM; + goto fail; + } + cname->alias = ares_strdup(aliases[i]); + cname->name = ares_strdup(txthost); + } + /* No aliases, cname only. */ + if(!alias_count) + { + cname = ares__append_addrinfo_cname(&cnames); + if (!cname) + { + status = ARES_ENOMEM; + goto fail; + } + cname->name = ares_strdup(txthost); + } + } + } + + /* Last read failed. */ + if (status == ARES_ENOMEM) + { + goto fail; + } + + /* Free line buffer. */ + ares_free(line); + ares__addrinfo_cat_cnames(&ai->cnames, cnames); + ares__addrinfo_cat_nodes(&ai->nodes, nodes); + + return nodes ? ARES_SUCCESS : ARES_ENOTFOUND; + +fail: + ares_free(line); + ares__freeaddrinfo_cnames(cnames); + ares__freeaddrinfo_nodes(nodes); + ares_free(ai->name); + ai->name = NULL; + return status; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__read_line.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__read_line.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__read_line.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__read_line.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,73 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#include "ares.h" +#include "ares_nowarn.h" +#include "ares_private.h" + +/* This is an internal function. Its contract is to read a line from + * a file into a dynamically allocated buffer, zeroing the trailing + * newline if there is one. The calling routine may call + * ares__read_line multiple times with the same buf and bufsize + * pointers; *buf will be reallocated and *bufsize adjusted as + * appropriate. The initial value of *buf should be NULL. After the + * calling routine is done reading lines, it should free *buf. + */ +int ares__read_line(FILE *fp, char **buf, size_t *bufsize) +{ + char *newbuf; + size_t offset = 0; + size_t len; + + if (*buf == NULL) + { + *buf = ares_malloc(128); + if (!*buf) + return ARES_ENOMEM; + *bufsize = 128; + } + + for (;;) + { + int bytestoread = aresx_uztosi(*bufsize - offset); + + if (!fgets(*buf + offset, bytestoread, fp)) + return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF; + len = offset + strlen(*buf + offset); + if ((*buf)[len - 1] == '\n') + { + (*buf)[len - 1] = 0; + break; + } + offset = len; + if(len < *bufsize - 1) + continue; + + /* Allocate more space. */ + newbuf = ares_realloc(*buf, *bufsize * 2); + if (!newbuf) + { + ares_free(*buf); + *buf = NULL; + return ARES_ENOMEM; + } + *buf = newbuf; + *bufsize *= 2; + } + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_search.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_search.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_search.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_search.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,321 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "ares.h" +#include "ares_private.h" + +struct search_query { + /* Arguments passed to ares_search */ + ares_channel channel; + char *name; /* copied into an allocated buffer */ + int dnsclass; + int type; + ares_callback callback; + void *arg; + + int status_as_is; /* error status from trying as-is */ + int next_domain; /* next search domain to try */ + int trying_as_is; /* current query is for name as-is */ + int timeouts; /* number of timeouts we saw for this request */ + int ever_got_nodata; /* did we ever get ARES_ENODATA along the way? */ +}; + +static void search_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen); +static void end_squery(struct search_query *squery, int status, + unsigned char *abuf, int alen); + +void ares_search(ares_channel channel, const char *name, int dnsclass, + int type, ares_callback callback, void *arg) +{ + struct search_query *squery; + char *s; + const char *p; + int status, ndots; + + /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */ + if (ares__is_onion_domain(name)) + { + callback(arg, ARES_ENOTFOUND, 0, NULL, 0); + return; + } + + /* If name only yields one domain to search, then we don't have + * to keep extra state, so just do an ares_query(). + */ + status = ares__single_domain(channel, name, &s); + if (status != ARES_SUCCESS) + { + callback(arg, status, 0, NULL, 0); + return; + } + if (s) + { + ares_query(channel, s, dnsclass, type, callback, arg); + ares_free(s); + return; + } + + /* Allocate a search_query structure to hold the state necessary for + * doing multiple lookups. + */ + squery = ares_malloc(sizeof(struct search_query)); + if (!squery) + { + callback(arg, ARES_ENOMEM, 0, NULL, 0); + return; + } + squery->channel = channel; + squery->name = ares_strdup(name); + if (!squery->name) + { + ares_free(squery); + callback(arg, ARES_ENOMEM, 0, NULL, 0); + return; + } + squery->dnsclass = dnsclass; + squery->type = type; + squery->status_as_is = -1; + squery->callback = callback; + squery->arg = arg; + squery->timeouts = 0; + squery->ever_got_nodata = 0; + + /* Count the number of dots in name. */ + ndots = 0; + for (p = name; *p; p++) + { + if (*p == '.') + ndots++; + } + + /* If ndots is at least the channel ndots threshold (usually 1), + * then we try the name as-is first. Otherwise, we try the name + * as-is last. + */ + if (ndots >= channel->ndots) + { + /* Try the name as-is first. */ + squery->next_domain = 0; + squery->trying_as_is = 1; + ares_query(channel, name, dnsclass, type, search_callback, squery); + } + else + { + /* Try the name as-is last; start with the first search domain. */ + squery->next_domain = 1; + squery->trying_as_is = 0; + status = ares__cat_domain(name, channel->domains[0], &s); + if (status == ARES_SUCCESS) + { + ares_query(channel, s, dnsclass, type, search_callback, squery); + ares_free(s); + } + else + { + /* failed, free the malloc()ed memory */ + ares_free(squery->name); + ares_free(squery); + callback(arg, status, 0, NULL, 0); + } + } +} + +static void search_callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen) +{ + struct search_query *squery = (struct search_query *) arg; + ares_channel channel = squery->channel; + char *s; + + squery->timeouts += timeouts; + + /* Stop searching unless we got a non-fatal error. */ + if (status != ARES_ENODATA && status != ARES_ESERVFAIL + && status != ARES_ENOTFOUND) + end_squery(squery, status, abuf, alen); + else + { + /* Save the status if we were trying as-is. */ + if (squery->trying_as_is) + squery->status_as_is = status; + + /* + * If we ever get ARES_ENODATA along the way, record that; if the search + * should run to the very end and we got at least one ARES_ENODATA, + * then callers like ares_gethostbyname() may want to try a T_A search + * even if the last domain we queried for T_AAAA resource records + * returned ARES_ENOTFOUND. + */ + if (status == ARES_ENODATA) + squery->ever_got_nodata = 1; + + if (squery->next_domain < channel->ndomains) + { + /* Try the next domain. */ + status = ares__cat_domain(squery->name, + channel->domains[squery->next_domain], &s); + if (status != ARES_SUCCESS) + end_squery(squery, status, NULL, 0); + else + { + squery->trying_as_is = 0; + squery->next_domain++; + ares_query(channel, s, squery->dnsclass, squery->type, + search_callback, squery); + ares_free(s); + } + } + else if (squery->status_as_is == -1) + { + /* Try the name as-is at the end. */ + squery->trying_as_is = 1; + ares_query(channel, squery->name, squery->dnsclass, squery->type, + search_callback, squery); + } + else { + if (squery->status_as_is == ARES_ENOTFOUND && squery->ever_got_nodata) { + end_squery(squery, ARES_ENODATA, NULL, 0); + } + else + end_squery(squery, squery->status_as_is, NULL, 0); + } + } +} + +static void end_squery(struct search_query *squery, int status, + unsigned char *abuf, int alen) +{ + squery->callback(squery->arg, status, squery->timeouts, abuf, alen); + ares_free(squery->name); + ares_free(squery); +} + +/* Concatenate two domains. */ +int ares__cat_domain(const char *name, const char *domain, char **s) +{ + size_t nlen = strlen(name); + size_t dlen = strlen(domain); + + *s = ares_malloc(nlen + 1 + dlen + 1); + if (!*s) + return ARES_ENOMEM; + memcpy(*s, name, nlen); + (*s)[nlen] = '.'; + memcpy(*s + nlen + 1, domain, dlen); + (*s)[nlen + 1 + dlen] = 0; + return ARES_SUCCESS; +} + +/* Determine if this name only yields one query. If it does, set *s to + * the string we should query, in an allocated buffer. If not, set *s + * to NULL. + */ +int ares__single_domain(ares_channel channel, const char *name, char **s) +{ + size_t len = strlen(name); + const char *hostaliases; + FILE *fp; + char *line = NULL; + int status; + size_t linesize; + const char *p, *q; + int error; + + /* If the name contains a trailing dot, then the single query is the name + * sans the trailing dot. + */ + if ((len > 0) && (name[len - 1] == '.')) + { + *s = ares_strdup(name); + return (*s) ? ARES_SUCCESS : ARES_ENOMEM; + } + + if (!(channel->flags & ARES_FLAG_NOALIASES) && !strchr(name, '.')) + { + /* The name might be a host alias. */ + hostaliases = getenv("HOSTALIASES"); + if (hostaliases) + { + fp = fopen(hostaliases, "r"); + if (fp) + { + while ((status = ares__read_line(fp, &line, &linesize)) + == ARES_SUCCESS) + { + if (strncasecmp(line, name, len) != 0 || + !ISSPACE(line[len])) + continue; + p = line + len; + while (ISSPACE(*p)) + p++; + if (*p) + { + q = p + 1; + while (*q && !ISSPACE(*q)) + q++; + *s = ares_malloc(q - p + 1); + if (*s) + { + memcpy(*s, p, q - p); + (*s)[q - p] = 0; + } + ares_free(line); + fclose(fp); + return (*s) ? ARES_SUCCESS : ARES_ENOMEM; + } + } + ares_free(line); + fclose(fp); + if (status != ARES_SUCCESS && status != ARES_EOF) + return status; + } + else + { + error = ERRNO; + switch(error) + { + case ENOENT: + case ESRCH: + break; + default: + DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", + error, strerror(error))); + DEBUGF(fprintf(stderr, "Error opening file: %s\n", + hostaliases)); + *s = NULL; + return ARES_EFILE; + } + } + } + } + + if (channel->flags & ARES_FLAG_NOSEARCH || channel->ndomains == 0) + { + /* No domain search to do; just try the name as-is. */ + *s = ares_strdup(name); + return (*s) ? ARES_SUCCESS : ARES_ENOMEM; + } + + *s = NULL; + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_send.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_send.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_send.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_send.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,131 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_dns.h" +#include "ares_private.h" + +void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen, + ares_callback callback, void *arg) +{ + struct query *query; + int i, packetsz; + struct timeval now; + + /* Verify that the query is at least long enough to hold the header. */ + if (qlen < HFIXEDSZ || qlen >= (1 << 16)) + { + callback(arg, ARES_EBADQUERY, 0, NULL, 0); + return; + } + + /* Allocate space for query and allocated fields. */ + query = ares_malloc(sizeof(struct query)); + if (!query) + { + callback(arg, ARES_ENOMEM, 0, NULL, 0); + return; + } + query->tcpbuf = ares_malloc(qlen + 2); + if (!query->tcpbuf) + { + ares_free(query); + callback(arg, ARES_ENOMEM, 0, NULL, 0); + return; + } + if (channel->nservers < 1) + { + ares_free(query); + callback(arg, ARES_ESERVFAIL, 0, NULL, 0); + return; + } + query->server_info = ares_malloc(channel->nservers * + sizeof(query->server_info[0])); + if (!query->server_info) + { + ares_free(query->tcpbuf); + ares_free(query); + callback(arg, ARES_ENOMEM, 0, NULL, 0); + return; + } + + /* Compute the query ID. Start with no timeout. */ + query->qid = DNS_HEADER_QID(qbuf); + query->timeout.tv_sec = 0; + query->timeout.tv_usec = 0; + + /* Form the TCP query buffer by prepending qlen (as two + * network-order bytes) to qbuf. + */ + query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff); + query->tcpbuf[1] = (unsigned char)(qlen & 0xff); + memcpy(query->tcpbuf + 2, qbuf, qlen); + query->tcplen = qlen + 2; + + /* Fill in query arguments. */ + query->qbuf = query->tcpbuf + 2; + query->qlen = qlen; + query->callback = callback; + query->arg = arg; + + /* Initialize query status. */ + query->try_count = 0; + + /* Choose the server to send the query to. If rotation is enabled, keep track + * of the next server we want to use. */ + query->server = channel->last_server; + if (channel->rotate == 1) + channel->last_server = (channel->last_server + 1) % channel->nservers; + + for (i = 0; i < channel->nservers; i++) + { + query->server_info[i].skip_server = 0; + query->server_info[i].tcp_connection_generation = 0; + } + + packetsz = (channel->flags & ARES_FLAG_EDNS) ? channel->ednspsz : PACKETSZ; + query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > packetsz; + + query->error_status = ARES_ECONNREFUSED; + query->timeouts = 0; + + /* Initialize our list nodes. */ + ares__init_list_node(&(query->queries_by_qid), query); + ares__init_list_node(&(query->queries_by_timeout), query); + ares__init_list_node(&(query->queries_to_server), query); + ares__init_list_node(&(query->all_queries), query); + + /* Chain the query into the list of all queries. */ + ares__insert_in_list(&(query->all_queries), &(channel->all_queries)); + /* Keep track of queries bucketed by qid, so we can process DNS + * responses quickly. + */ + ares__insert_in_list( + &(query->queries_by_qid), + &(channel->queries_by_qid[query->qid % ARES_QID_TABLE_SIZE])); + + /* Perform the first query action. */ + now = ares__tvnow(); + ares__send_query(channel, query, &now); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_setup.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_setup.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_setup.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_setup.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,220 @@ +#ifndef HEADER_CARES_SETUP_H +#define HEADER_CARES_SETUP_H + + +/* Copyright (C) 2004 - 2012 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +/* + * Define WIN32 when build target is Win32 API + */ + +#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) +#define WIN32 +#endif + +/* + * Include configuration script results or hand-crafted + * configuration file for platforms which lack config tool. + */ + +#ifdef HAVE_CONFIG_H +#include "ares_config.h" +#else + +#ifdef WIN32 +#include "config-win32.h" +#endif + +#endif /* HAVE_CONFIG_H */ + +/* ================================================================ */ +/* Definition of preprocessor macros/symbols which modify compiler */ +/* behaviour or generated code characteristics must be done here, */ +/* as appropriate, before any system header file is included. It is */ +/* also possible to have them defined in the config file included */ +/* before this point. As a result of all this we frown inclusion of */ +/* system header files in our config files, avoid this at any cost. */ +/* ================================================================ */ + +/* + * AIX 4.3 and newer needs _THREAD_SAFE defined to build + * proper reentrant code. Others may also need it. + */ + +#ifdef NEED_THREAD_SAFE +# ifndef _THREAD_SAFE +# define _THREAD_SAFE +# endif +#endif + +/* + * Tru64 needs _REENTRANT set for a few function prototypes and + * things to appear in the system header files. Unixware needs it + * to build proper reentrant code. Others may also need it. + */ + +#ifdef NEED_REENTRANT +# ifndef _REENTRANT +# define _REENTRANT +# endif +#endif + +/* ================================================================ */ +/* If you need to include a system header file for your platform, */ +/* please, do it beyond the point further indicated in this file. */ +/* ================================================================ */ + +/* + * c-ares external interface definitions are also used internally, + * and might also include required system header files to define them. + */ + +#include + +/* + * Compile time sanity checks must also be done when building the library. + */ + +#include + +/* ================================================================= */ +/* No system header file shall be included in this file before this */ +/* point. The only allowed ones are those included from ares_build.h */ +/* ================================================================= */ + +/* + * Include header files for windows builds before redefining anything. + * Use this preproessor block only to include or exclude windows.h, + * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs + * to any other further and independent block. Under Cygwin things work + * just as under linux (e.g. ) and the winsock headers should + * never be included when __CYGWIN__ is defined. configure script takes + * care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H, + * neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined. + */ + +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# ifdef HAVE_WINSOCK2_H +# include +# ifdef HAVE_WS2TCPIP_H +# include +# endif +# else +# ifdef HAVE_WINSOCK_H +# include +# endif +# endif +#endif + +/* + * Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else + * define USE_WINSOCK to 1 if we have and use WINSOCK API, else + * undefine USE_WINSOCK. + */ + +#undef USE_WINSOCK + +#ifdef HAVE_WINSOCK2_H +# define USE_WINSOCK 2 +#else +# ifdef HAVE_WINSOCK_H +# define USE_WINSOCK 1 +# endif +#endif + +/* + * Work-arounds for systems without configure support + */ + +#ifndef HAVE_CONFIG_H + +#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) && !defined(__WATCOMC__) +#define HAVE_SYS_TIME_H +#endif + +#if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER) +#define HAVE_UNISTD_H 1 +#endif + +#if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS) +#define HAVE_SYS_UIO_H +#endif + +#endif /* HAVE_CONFIG_H */ + +/* + * Arg 2 type for gethostname in case it hasn't been defined in config file. + */ + +#ifndef GETHOSTNAME_TYPE_ARG2 +# ifdef USE_WINSOCK +# define GETHOSTNAME_TYPE_ARG2 int +# else +# define GETHOSTNAME_TYPE_ARG2 size_t +# endif +#endif + +#ifdef __POCC__ +# include +# include +# define ESRCH 3 +#endif + +/* + * Android does have the arpa/nameser.h header which is detected by configure + * but it appears to be empty with recent NDK r7b / r7c, so we undefine here. + * z/OS does have the arpa/nameser.h header which is detected by configure + * but it is not fully implemented and missing identifiers, so udefine here. + */ +#if (defined(ANDROID) || defined(__ANDROID__) || defined(__MVS__)) && \ + defined(HAVE_ARPA_NAMESER_H) +# undef HAVE_ARPA_NAMESER_H +#endif + +/* + * Recent autoconf versions define these symbols in ares_config.h. We don't + * want them (since they collide with the libcurl ones when we build + * --enable-debug) so we undef them again here. + */ + +#undef PACKAGE_STRING +#undef PACKAGE_TARNAME +#undef PACKAGE_VERSION +#undef PACKAGE_BUGREPORT +#undef PACKAGE_NAME +#undef VERSION +#undef PACKAGE + +/* IPv6 compatibility */ +#if !defined(HAVE_AF_INET6) +#if defined(HAVE_PF_INET6) +#define AF_INET6 PF_INET6 +#else +#define AF_INET6 AF_MAX+1 +#endif +#endif + +/* + * Include macros and defines that should only be processed once. + */ + +#ifndef __SETUP_ONCE_H +#include "setup_once.h" +#endif + +#endif /* HEADER_CARES_SETUP_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__sortaddrinfo.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__sortaddrinfo.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__sortaddrinfo.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__sortaddrinfo.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,507 @@ +/* + * Original file name getaddrinfo.c + * Lifted from the 'Android Bionic' project with the BSD license. + */ + +/* + * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. + * Copyright (C) 2018 The Android Open Source Project + * Copyright (C) 2019 by Andrew Selivanov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif + +#include +#include + +#include "ares.h" +#include "ares_private.h" + +struct addrinfo_sort_elem +{ + struct ares_addrinfo_node *ai; + int has_src_addr; + ares_sockaddr src_addr; + int original_order; +}; + +#define ARES_IPV6_ADDR_MC_SCOPE(a) ((a)->s6_addr[1] & 0x0f) + +#define ARES_IPV6_ADDR_SCOPE_NODELOCAL 0x01 +#define ARES_IPV6_ADDR_SCOPE_INTFACELOCAL 0x01 +#define ARES_IPV6_ADDR_SCOPE_LINKLOCAL 0x02 +#define ARES_IPV6_ADDR_SCOPE_SITELOCAL 0x05 +#define ARES_IPV6_ADDR_SCOPE_ORGLOCAL 0x08 +#define ARES_IPV6_ADDR_SCOPE_GLOBAL 0x0e + +#define ARES_IN_LOOPBACK(a) ((((long int)(a)) & 0xff000000) == 0x7f000000) + +/* RFC 4193. */ +#define ARES_IN6_IS_ADDR_ULA(a) (((a)->s6_addr[0] & 0xfe) == 0xfc) + +/* These macros are modelled after the ones in . */ +/* RFC 4380, section 2.6 */ +#define ARES_IN6_IS_ADDR_TEREDO(a) \ + ((*(const unsigned int *)(const void *)(&(a)->s6_addr[0]) == ntohl(0x20010000))) +/* RFC 3056, section 2. */ +#define ARES_IN6_IS_ADDR_6TO4(a) \ + (((a)->s6_addr[0] == 0x20) && ((a)->s6_addr[1] == 0x02)) +/* 6bone testing address area (3ffe::/16), deprecated in RFC 3701. */ +#define ARES_IN6_IS_ADDR_6BONE(a) \ + (((a)->s6_addr[0] == 0x3f) && ((a)->s6_addr[1] == 0xfe)) + + +static int get_scope(const struct sockaddr *addr) +{ + if (addr->sa_family == AF_INET6) + { + const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr); + if (IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr)) + { + return ARES_IPV6_ADDR_MC_SCOPE(&addr6->sin6_addr); + } + else if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr) || + IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)) + { + /* + * RFC 4291 section 2.5.3 says loopback is to be treated as having + * link-local scope. + */ + return ARES_IPV6_ADDR_SCOPE_LINKLOCAL; + } + else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr)) + { + return ARES_IPV6_ADDR_SCOPE_SITELOCAL; + } + else + { + return ARES_IPV6_ADDR_SCOPE_GLOBAL; + } + } + else if (addr->sa_family == AF_INET) + { + const struct sockaddr_in *addr4 = CARES_INADDR_CAST(const struct sockaddr_in *, addr); + unsigned long int na = ntohl(addr4->sin_addr.s_addr); + if (ARES_IN_LOOPBACK(na) || /* 127.0.0.0/8 */ + (na & 0xffff0000) == 0xa9fe0000) /* 169.254.0.0/16 */ + { + return ARES_IPV6_ADDR_SCOPE_LINKLOCAL; + } + else + { + /* + * RFC 6724 section 3.2. Other IPv4 addresses, including private + * addresses and shared addresses (100.64.0.0/10), are assigned global + * scope. + */ + return ARES_IPV6_ADDR_SCOPE_GLOBAL; + } + } + else + { + /* + * This should never happen. + * Return a scope with low priority as a last resort. + */ + return ARES_IPV6_ADDR_SCOPE_NODELOCAL; + } +} + +static int get_label(const struct sockaddr *addr) +{ + if (addr->sa_family == AF_INET) + { + return 4; + } + else if (addr->sa_family == AF_INET6) + { + const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr); + if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr)) + { + return 0; + } + else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) + { + return 4; + } + else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr)) + { + return 2; + } + else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr)) + { + return 5; + } + else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr)) + { + return 13; + } + else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr)) + { + return 3; + } + else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr)) + { + return 11; + } + else if (ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr)) + { + return 12; + } + else + { + /* All other IPv6 addresses, including global unicast addresses. */ + return 1; + } + } + else + { + /* + * This should never happen. + * Return a semi-random label as a last resort. + */ + return 1; + } +} + +/* + * Get the precedence for a given IPv4/IPv6 address. + * RFC 6724, section 2.1. + */ +static int get_precedence(const struct sockaddr *addr) +{ + if (addr->sa_family == AF_INET) + { + return 35; + } + else if (addr->sa_family == AF_INET6) + { + const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr); + if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr)) + { + return 50; + } + else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) + { + return 35; + } + else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr)) + { + return 30; + } + else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr)) + { + return 5; + } + else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr)) + { + return 3; + } + else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr) || + IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr) || + ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr)) + { + return 1; + } + else + { + /* All other IPv6 addresses, including global unicast addresses. */ + return 40; + } + } + else + { + return 1; + } +} + +/* + * Find number of matching initial bits between the two addresses a1 and a2. + */ +static int common_prefix_len(const struct in6_addr *a1, + const struct in6_addr *a2) +{ + const char *p1 = (const char *)a1; + const char *p2 = (const char *)a2; + unsigned i; + for (i = 0; i < sizeof(*a1); ++i) + { + int x, j; + if (p1[i] == p2[i]) + { + continue; + } + x = p1[i] ^ p2[i]; + for (j = 0; j < CHAR_BIT; ++j) + { + if (x & (1 << (CHAR_BIT - 1))) + { + return i * CHAR_BIT + j; + } + x <<= 1; + } + } + return sizeof(*a1) * CHAR_BIT; +} + +/* + * Compare two source/destination address pairs. + * RFC 6724, section 6. + */ +static int rfc6724_compare(const void *ptr1, const void *ptr2) +{ + const struct addrinfo_sort_elem *a1 = (const struct addrinfo_sort_elem *)ptr1; + const struct addrinfo_sort_elem *a2 = (const struct addrinfo_sort_elem *)ptr2; + int scope_src1, scope_dst1, scope_match1; + int scope_src2, scope_dst2, scope_match2; + int label_src1, label_dst1, label_match1; + int label_src2, label_dst2, label_match2; + int precedence1, precedence2; + int prefixlen1, prefixlen2; + + /* Rule 1: Avoid unusable destinations. */ + if (a1->has_src_addr != a2->has_src_addr) + { + return a2->has_src_addr - a1->has_src_addr; + } + + /* Rule 2: Prefer matching scope. */ + scope_src1 = ARES_IPV6_ADDR_SCOPE_NODELOCAL; + if (a1->has_src_addr) + scope_src1 = get_scope(&a1->src_addr.sa); + scope_dst1 = get_scope(a1->ai->ai_addr); + scope_match1 = (scope_src1 == scope_dst1); + + scope_src2 = ARES_IPV6_ADDR_SCOPE_NODELOCAL; + if (a2->has_src_addr) + scope_src2 = get_scope(&a2->src_addr.sa); + scope_dst2 = get_scope(a2->ai->ai_addr); + scope_match2 = (scope_src2 == scope_dst2); + + if (scope_match1 != scope_match2) + { + return scope_match2 - scope_match1; + } + + /* Rule 3: Avoid deprecated addresses. */ + + /* Rule 4: Prefer home addresses. */ + + /* Rule 5: Prefer matching label. */ + label_src1 = 1; + if (a1->has_src_addr) + label_src1 = get_label(&a1->src_addr.sa); + label_dst1 = get_label(a1->ai->ai_addr); + label_match1 = (label_src1 == label_dst1); + + label_src2 = 1; + if (a2->has_src_addr) + label_src2 = get_label(&a2->src_addr.sa); + label_dst2 = get_label(a2->ai->ai_addr); + label_match2 = (label_src2 == label_dst2); + + if (label_match1 != label_match2) + { + return label_match2 - label_match1; + } + + /* Rule 6: Prefer higher precedence. */ + precedence1 = get_precedence(a1->ai->ai_addr); + precedence2 = get_precedence(a2->ai->ai_addr); + if (precedence1 != precedence2) + { + return precedence2 - precedence1; + } + + /* Rule 7: Prefer native transport. */ + + /* Rule 8: Prefer smaller scope. */ + if (scope_dst1 != scope_dst2) + { + return scope_dst1 - scope_dst2; + } + + /* Rule 9: Use longest matching prefix. */ + if (a1->has_src_addr && a1->ai->ai_addr->sa_family == AF_INET6 && + a2->has_src_addr && a2->ai->ai_addr->sa_family == AF_INET6) + { + const struct sockaddr_in6 *a1_src = &a1->src_addr.sa6; + const struct sockaddr_in6 *a1_dst = + CARES_INADDR_CAST(const struct sockaddr_in6 *, a1->ai->ai_addr); + const struct sockaddr_in6 *a2_src = &a2->src_addr.sa6; + const struct sockaddr_in6 *a2_dst = + CARES_INADDR_CAST(const struct sockaddr_in6 *, a2->ai->ai_addr); + prefixlen1 = common_prefix_len(&a1_src->sin6_addr, &a1_dst->sin6_addr); + prefixlen2 = common_prefix_len(&a2_src->sin6_addr, &a2_dst->sin6_addr); + if (prefixlen1 != prefixlen2) + { + return prefixlen2 - prefixlen1; + } + } + + /* + * Rule 10: Leave the order unchanged. + * We need this since qsort() is not necessarily stable. + */ + return a1->original_order - a2->original_order; +} + +/* + * Find the source address that will be used if trying to connect to the given + * address. + * + * Returns 1 if a source address was found, 0 if the address is unreachable, + * and -1 if a fatal error occurred. If 0 or 1, the contents of src_addr are + * undefined. + */ +static int find_src_addr(ares_channel channel, + const struct sockaddr *addr, + struct sockaddr *src_addr) +{ + ares_socket_t sock; + int ret; + ares_socklen_t len; + + switch (addr->sa_family) + { + case AF_INET: + len = sizeof(struct sockaddr_in); + break; + case AF_INET6: + len = sizeof(struct sockaddr_in6); + break; + default: + /* No known usable source address for non-INET families. */ + return 0; + } + + sock = ares__open_socket(channel, addr->sa_family, SOCK_DGRAM, IPPROTO_UDP); + if (sock == ARES_SOCKET_BAD) + { + if (errno == EAFNOSUPPORT) + { + return 0; + } + else + { + return -1; + } + } + + do + { + ret = ares__connect_socket(channel, sock, addr, len); + } + while (ret == -1 && errno == EINTR); + + if (ret == -1) + { + ares__close_socket(channel, sock); + return 0; + } + + if (getsockname(sock, src_addr, &len) != 0) + { + ares__close_socket(channel, sock); + return -1; + } + ares__close_socket(channel, sock); + return 1; +} + +/* + * Sort the linked list starting at sentinel->ai_next in RFC6724 order. + * Will leave the list unchanged if an error occurs. + */ +int ares__sortaddrinfo(ares_channel channel, struct ares_addrinfo_node *list_sentinel) +{ + struct ares_addrinfo_node *cur; + int nelem = 0, i; + int has_src_addr; + struct addrinfo_sort_elem *elems; + + cur = list_sentinel->ai_next; + while (cur) + { + ++nelem; + cur = cur->ai_next; + } + + if (!nelem) + return ARES_ENODATA; + + elems = (struct addrinfo_sort_elem *)ares_malloc( + nelem * sizeof(struct addrinfo_sort_elem)); + if (!elems) + { + return ARES_ENOMEM; + } + + /* + * Convert the linked list to an array that also contains the candidate + * source address for each destination address. + */ + for (i = 0, cur = list_sentinel->ai_next; i < nelem; ++i, cur = cur->ai_next) + { + assert(cur != NULL); + elems[i].ai = cur; + elems[i].original_order = i; + has_src_addr = find_src_addr(channel, cur->ai_addr, &elems[i].src_addr.sa); + if (has_src_addr == -1) + { + ares_free(elems); + return ARES_ENOTFOUND; + } + elems[i].has_src_addr = has_src_addr; + } + + /* Sort the addresses, and rearrange the linked list so it matches the sorted + * order. */ + qsort((void *)elems, nelem, sizeof(struct addrinfo_sort_elem), + rfc6724_compare); + + list_sentinel->ai_next = elems[0].ai; + for (i = 0; i < nelem - 1; ++i) + { + elems[i].ai->ai_next = elems[i + 1].ai; + } + elems[nelem - 1].ai->ai_next = NULL; + + ares_free(elems); + return ARES_SUCCESS; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strcasecmp.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strcasecmp.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strcasecmp.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strcasecmp.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,66 @@ + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include "ares_strcasecmp.h" + +#ifndef HAVE_STRCASECMP +int ares_strcasecmp(const char *a, const char *b) +{ +#if defined(HAVE_STRCMPI) + return strcmpi(a, b); +#elif defined(HAVE_STRICMP) + return stricmp(a, b); +#else + size_t i; + + for (i = 0; i < (size_t)-1; i++) { + int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i]; + int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i]; + if (c1 != c2) + return c1-c2; + if (!c1) + break; + } + return 0; +#endif +} +#endif + +#ifndef HAVE_STRNCASECMP +int ares_strncasecmp(const char *a, const char *b, size_t n) +{ +#if defined(HAVE_STRNCMPI) + return strncmpi(a, b, n); +#elif defined(HAVE_STRNICMP) + return strnicmp(a, b, n); +#else + size_t i; + + for (i = 0; i < n; i++) { + int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i]; + int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i]; + if (c1 != c2) + return c1-c2; + if (!c1) + break; + } + return 0; +#endif +} +#endif + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strcasecmp.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strcasecmp.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strcasecmp.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strcasecmp.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,30 @@ +#ifndef HEADER_CARES_STRCASECMP_H +#define HEADER_CARES_STRCASECMP_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifndef HAVE_STRCASECMP +extern int ares_strcasecmp(const char *a, const char *b); +#endif + +#ifndef HAVE_STRNCASECMP +extern int ares_strncasecmp(const char *a, const char *b, size_t n); +#endif + +#endif /* HEADER_CARES_STRCASECMP_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strdup.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strdup.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strdup.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strdup.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,42 @@ + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include "ares_strdup.h" +#include "ares.h" +#include "ares_private.h" + +char *ares_strdup(const char *s1) +{ + size_t sz; + char * s2; + + if(s1) { + sz = strlen(s1); + if(sz < (size_t)-1) { + sz++; + if(sz < ((size_t)-1)) { + s2 = ares_malloc(sz); + if(s2) { + memcpy(s2, s1, sz); + return s2; + } + } + } + } + return (char *)NULL; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strdup.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strdup.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strdup.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strdup.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,24 @@ +#ifndef HEADER_CARES_STRDUP_H +#define HEADER_CARES_STRDUP_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +extern char *ares_strdup(const char *s1); + +#endif /* HEADER_CARES_STRDUP_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strerror.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strerror.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strerror.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strerror.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,56 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include +#include "ares.h" + +const char *ares_strerror(int code) +{ + /* Return a string literal from a table. */ + const char *errtext[] = { + "Successful completion", + "DNS server returned answer with no data", + "DNS server claims query was misformatted", + "DNS server returned general failure", + "Domain name not found", + "DNS server does not implement requested operation", + "DNS server refused query", + "Misformatted DNS query", + "Misformatted domain name", + "Unsupported address family", + "Misformatted DNS reply", + "Could not contact DNS servers", + "Timeout while contacting DNS servers", + "End of file", + "Error reading file", + "Out of memory", + "Channel is being destroyed", + "Misformatted string", + "Illegal flags specified", + "Given hostname is not numeric", + "Illegal hints flags specified", + "c-ares library initialization not yet performed", + "Error loading iphlpapi.dll", + "Could not find GetNetworkParams function", + "DNS query cancelled" + }; + + if(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext))) + return errtext[code]; + else + return "unknown"; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strsplit.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strsplit.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_strsplit.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_strsplit.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,178 @@ +/* Copyright (C) 2018 by John Schember + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#if defined(__MVS__) +#include +#endif + +#include "ares_setup.h" +#include "ares_strsplit.h" +#include "ares.h" +#include "ares_private.h" + +static int list_contains(char * const *list, size_t num_elem, const char *str, int insensitive) +{ + size_t len; + size_t i; + + len = strlen(str); + for (i=0; i + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +/* Split a string on delem skipping empty elements. + * + * param in String to split. + * param delims String of characters to treat as a delimitor. + * Each character in the string is a delimitor so + * there can be multiple delimitors to split on. + * E.g. ", " will split on all comma's and spaces. + * param make_set Have the list be a Set where there are no + * duplicate entries. 1 for true, 0 or false. + * param num_elm Return parameter of the number of elements + * in the result array. + * + * returns an allocated array of allocated string elements. + * + */ +char **ares_strsplit(const char *in, const char *delms, int make_set, size_t *num_elm); + +/* Frees the result returned from ares_strsplit(). */ +void ares_strsplit_free(char **elms, size_t num_elm); + + +#endif /* HEADER_CARES_STRSPLIT_H */ + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_timeout.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_timeout.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_timeout.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_timeout.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,88 @@ + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_LIMITS_H +#include +#endif + +#include "ares.h" +#include "ares_private.h" + +/* return time offset between now and (future) check, in milliseconds */ +static long timeoffset(struct timeval *now, struct timeval *check) +{ + return (check->tv_sec - now->tv_sec)*1000 + + (check->tv_usec - now->tv_usec)/1000; +} + +/* WARNING: Beware that this is linear in the number of outstanding + * requests! You are probably far better off just calling ares_process() + * once per second, rather than calling ares_timeout() to figure out + * when to next call ares_process(). + */ +struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv, + struct timeval *tvbuf) +{ + struct query *query; + struct list_node* list_head; + struct list_node* list_node; + struct timeval now; + struct timeval nextstop; + long offset, min_offset; + + /* No queries, no timeout (and no fetch of the current time). */ + if (ares__is_list_empty(&(channel->all_queries))) + return maxtv; + + /* Find the minimum timeout for the current set of queries. */ + now = ares__tvnow(); + min_offset = -1; + + list_head = &(channel->all_queries); + for (list_node = list_head->next; list_node != list_head; + list_node = list_node->next) + { + query = list_node->data; + if (query->timeout.tv_sec == 0) + continue; + offset = timeoffset(&now, &query->timeout); + if (offset < 0) + offset = 0; + if (min_offset == -1 || offset < min_offset) + min_offset = offset; + } + + /* If we found a minimum timeout and it's sooner than the one specified in + * maxtv (if any), return it. Otherwise go with maxtv. + */ + if (min_offset != -1) + { + int ioffset = (min_offset > (long)INT_MAX) ? INT_MAX : (int)min_offset; + + nextstop.tv_sec = ioffset/1000; + nextstop.tv_usec = (ioffset%1000)*1000; + + if (!maxtv || ares__timedout(maxtv, &nextstop)) + { + *tvbuf = nextstop; + return tvbuf; + } + } + + return maxtv; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__timeval.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__timeval.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares__timeval.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares__timeval.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,111 @@ + +/* Copyright (C) 2008 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include "ares.h" +#include "ares_private.h" + +#if defined(WIN32) && !defined(MSDOS) + +struct timeval ares__tvnow(void) +{ + /* + ** GetTickCount() is available on _all_ Windows versions from W95 up + ** to nowadays. Returns milliseconds elapsed since last system boot, + ** increases monotonically and wraps once 49.7 days have elapsed. + */ + struct timeval now; + DWORD milliseconds = GetTickCount(); + now.tv_sec = milliseconds / 1000; + now.tv_usec = (milliseconds % 1000) * 1000; + return now; +} + +#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC) + +struct timeval ares__tvnow(void) +{ + /* + ** clock_gettime() is granted to be increased monotonically when the + ** monotonic clock is queried. Time starting point is unspecified, it + ** could be the system start-up time, the Epoch, or something else, + ** in any case the time starting point does not change once that the + ** system has started up. + */ + struct timeval now; + struct timespec tsnow; + if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) { + now.tv_sec = tsnow.tv_sec; + now.tv_usec = tsnow.tv_nsec / 1000; + } + /* + ** Even when the configure process has truly detected monotonic clock + ** availability, it might happen that it is not actually available at + ** run-time. When this occurs simply fallback to other time source. + */ +#ifdef HAVE_GETTIMEOFDAY + else + (void)gettimeofday(&now, NULL); /* LCOV_EXCL_LINE */ +#else + else { + now.tv_sec = (long)time(NULL); + now.tv_usec = 0; + } +#endif + return now; +} + +#elif defined(HAVE_GETTIMEOFDAY) + +struct timeval ares__tvnow(void) +{ + /* + ** gettimeofday() is not granted to be increased monotonically, due to + ** clock drifting and external source time synchronization it can jump + ** forward or backward in time. + */ + struct timeval now; + (void)gettimeofday(&now, NULL); + return now; +} + +#else + +struct timeval ares__tvnow(void) +{ + /* + ** time() returns the value of time in seconds since the Epoch. + */ + struct timeval now; + now.tv_sec = (long)time(NULL); + now.tv_usec = 0; + return now; +} + +#endif + +#if 0 /* Not used */ +/* + * Make sure that the first argument is the more recent time, as otherwise + * we'll get a weird negative time-diff back... + * + * Returns: the time difference in number of milliseconds. + */ +long ares__tvdiff(struct timeval newer, struct timeval older) +{ + return (newer.tv_sec-older.tv_sec)*1000+ + (newer.tv_usec-older.tv_usec)/1000; +} +#endif + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_version.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_version.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_version.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_version.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,11 @@ + +#include "ares_setup.h" +#include "ares.h" + +const char *ares_version(int *version) +{ + if(version) + *version = ARES_VERSION; + + return ARES_VERSION_STR; +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_writev.c nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_writev.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_writev.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_writev.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,79 @@ + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_LIMITS_H +# include +#endif + +#include "ares.h" +#include "ares_private.h" + +#ifndef HAVE_WRITEV +ares_ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt) +{ + char *buffer, *bp; + int i; + size_t bytes = 0; + ares_ssize_t result; + + /* Validate iovcnt */ + if (iovcnt <= 0) + { + SET_ERRNO(EINVAL); + return (-1); + } + + /* Validate and find the sum of the iov_len values in the iov array */ + for (i = 0; i < iovcnt; i++) + { + if (iov[i].iov_len > INT_MAX - bytes) + { + SET_ERRNO(EINVAL); + return (-1); + } + bytes += iov[i].iov_len; + } + + if (bytes == 0) + return (0); + + /* Allocate a temporary buffer to hold the data */ + buffer = ares_malloc(bytes); + if (!buffer) + { + SET_ERRNO(ENOMEM); + return (-1); + } + + /* Copy the data into buffer */ + for (bp = buffer, i = 0; i < iovcnt; ++i) + { + memcpy (bp, iov[i].iov_base, iov[i].iov_len); + bp += iov[i].iov_len; + } + + /* Send buffer contents */ + result = swrite(s, buffer, bytes); + + ares_free(buffer); + + return (result); +} +#endif + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_writev.h nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_writev.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/ares_writev.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/ares_writev.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,36 @@ +#ifndef HEADER_CARES_WRITEV_H +#define HEADER_CARES_WRITEV_H + + +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" +#include "ares.h" + +#ifndef HAVE_WRITEV + +/* Structure for scatter/gather I/O. */ +struct iovec +{ + void *iov_base; /* Pointer to data. */ + size_t iov_len; /* Length of data. */ +}; + +extern ares_ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt); + +#endif + +#endif /* HEADER_CARES_WRITEV_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/bitncmp.c nodejs-mozilla-12.22.12/deps/cares/src/lib/bitncmp.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/bitncmp.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/bitncmp.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,59 @@ + +/* + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Copyright (c) 1996,1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef HAVE_BITNCMP + +#include "ares_setup.h" +#include "bitncmp.h" + +/* + * int + * bitncmp(l, r, n) + * compare bit masks l and r, for n bits. + * return: + * <0, >0, or 0 in the libc tradition. + * note: + * network byte order assumed. this means 192.5.5.240/28 has + * 0x11110000 in its fourth octet. + * author: + * Paul Vixie (ISC), June 1996 + */ +int ares__bitncmp(const void *l, const void *r, int n) +{ + unsigned int lb, rb; + int x, b; + + b = n / 8; + x = memcmp(l, r, b); + if (x || (n % 8) == 0) + return (x); + + lb = ((const unsigned char *)l)[b]; + rb = ((const unsigned char *)r)[b]; + for (b = n % 8; b > 0; b--) { + if ((lb & 0x80) != (rb & 0x80)) { + if (lb & 0x80) + return (1); + return (-1); + } + lb <<= 1; + rb <<= 1; + } + return (0); +} +#endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/bitncmp.h nodejs-mozilla-12.22.12/deps/cares/src/lib/bitncmp.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/bitncmp.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/bitncmp.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,26 @@ +#ifndef __ARES_BITNCMP_H +#define __ARES_BITNCMP_H + + +/* Copyright (C) 2005, 2013 by Dominick Meglio + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#ifndef HAVE_BITNCMP +int ares__bitncmp(const void *l, const void *r, int n); +#else +#define ares__bitncmp(x,y,z) bitncmp(x,y,z) +#endif + +#endif /* __ARES_BITNCMP_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/cares.rc nodejs-mozilla-12.22.12/deps/cares/src/lib/cares.rc --- nodejs-mozilla-12.18.1/deps/cares/src/lib/cares.rc 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/cares.rc 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,65 @@ + +/* Copyright (C) 2009-2021 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include +#include "../../include/ares_version.h" + +LANGUAGE 0x09,0x01 + +#define RC_VERSION ARES_VERSION_MAJOR, ARES_VERSION_MINOR, ARES_VERSION_PATCH, 0 + +VS_VERSION_INFO VERSIONINFO + FILEVERSION RC_VERSION + PRODUCTVERSION RC_VERSION + FILEFLAGSMASK 0x3fL +#if defined(DEBUGBUILD) || defined(_DEBUG) + FILEFLAGS 1 +#else + FILEFLAGS 0 +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0x0L + +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "The c-ares library, https://c-ares.org/\0" +#if defined(DEBUGBUILD) || defined(_DEBUG) + VALUE "FileDescription", "c-ares Debug Shared Library\0" + VALUE "FileVersion", ARES_VERSION_STR "\0" + VALUE "InternalName", "c-ares\0" + VALUE "OriginalFilename", "caresd.dll\0" +#else + VALUE "FileDescription", "c-ares Shared Library\0" + VALUE "FileVersion", ARES_VERSION_STR "\0" + VALUE "InternalName", "c-ares\0" + VALUE "OriginalFilename", "cares.dll\0" +#endif + VALUE "ProductName", "The c-ares library\0" + VALUE "ProductVersion", ARES_VERSION_STR "\0" + VALUE "LegalCopyright", " " ARES_COPYRIGHT "\0" + VALUE "License", "https://c-ares.org/license.html\0" + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/CMakeLists.txt nodejs-mozilla-12.22.12/deps/cares/src/lib/CMakeLists.txt --- nodejs-mozilla-12.18.1/deps/cares/src/lib/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/CMakeLists.txt 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,115 @@ + +# Transform Makefile.inc +transform_makefile_inc("Makefile.inc" "${PROJECT_BINARY_DIR}/src/lib/Makefile.inc.cmake") +include(${PROJECT_BINARY_DIR}/src/lib/Makefile.inc.cmake) + +# Write ares_config.h configuration file. This is used only for the build. +CONFIGURE_FILE (ares_config.h.cmake ${PROJECT_BINARY_DIR}/ares_config.h) + +# Build the dynamic/shared library +IF (CARES_SHARED) + ADD_LIBRARY (${PROJECT_NAME} SHARED ${CSOURCES}) + + # Convert CARES_LIB_VERSIONINFO libtool version format into VERSION and SOVERSION + # Convert from ":" separated into CMake list format using ";" + STRING (REPLACE ":" ";" CARES_LIB_VERSIONINFO ${CARES_LIB_VERSIONINFO}) + LIST (GET CARES_LIB_VERSIONINFO 0 CARES_LIB_VERSION_CURRENT) + LIST (GET CARES_LIB_VERSIONINFO 1 CARES_LIB_VERSION_REVISION) + LIST (GET CARES_LIB_VERSIONINFO 2 CARES_LIB_VERSION_AGE) + MATH (EXPR CARES_LIB_VERSION_MAJOR "${CARES_LIB_VERSION_CURRENT} - ${CARES_LIB_VERSION_AGE}") + SET (CARES_LIB_VERSION_MINOR "${CARES_LIB_VERSION_AGE}") + SET (CARES_LIB_VERSION_RELEASE "${CARES_LIB_VERSION_REVISION}") + + SET_TARGET_PROPERTIES (${PROJECT_NAME} PROPERTIES + EXPORT_NAME cares + OUTPUT_NAME cares + COMPILE_PDB_NAME cares + COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + SOVERSION ${CARES_LIB_VERSION_MAJOR} + VERSION "${CARES_LIB_VERSION_MAJOR}.${CARES_LIB_VERSION_MINOR}.${CARES_LIB_VERSION_RELEASE}" + ) + + TARGET_INCLUDE_DIRECTORIES (${PROJECT_NAME} + PUBLIC "$" + "$" + "$" + "$" + PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" + ) + + TARGET_COMPILE_DEFINITIONS (${PROJECT_NAME} PRIVATE HAVE_CONFIG_H=1 CARES_BUILDING_LIBRARY) + + TARGET_LINK_LIBRARIES (${PROJECT_NAME} PUBLIC ${CARES_DEPENDENT_LIBS}) + + IF (CARES_INSTALL) + INSTALL (TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}-targets + COMPONENT Library + ${TARGETS_INST_DEST} + ) + INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/cares.pdb + DESTINATION ${CMAKE_INSTALL_BINDIR} + COMPONENT Library + OPTIONAL + ) + ENDIF () + SET (STATIC_SUFFIX "_static") + + # For chain building: add alias targets that look like import libs that would be returned by find_package(c-ares). + ADD_LIBRARY (${PROJECT_NAME}::cares_shared ALIAS ${PROJECT_NAME}) + ADD_LIBRARY (${PROJECT_NAME}::cares ALIAS ${PROJECT_NAME}) +ENDIF () + +# Build the static library +IF (CARES_STATIC) + SET (LIBNAME ${PROJECT_NAME}${STATIC_SUFFIX}) + + ADD_LIBRARY (${LIBNAME} STATIC ${CSOURCES}) + + SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES + EXPORT_NAME cares${STATIC_SUFFIX} + OUTPUT_NAME cares${STATIC_SUFFIX} + COMPILE_PDB_NAME cares${STATIC_SUFFIX} + COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + ) + + IF (CARES_STATIC_PIC) + SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES POSITION_INDEPENDENT_CODE True) + ENDIF () + + TARGET_INCLUDE_DIRECTORIES (${LIBNAME} + PUBLIC "$" + "$" + "$" + "$" + PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" + ) + + TARGET_COMPILE_DEFINITIONS (${LIBNAME} + PUBLIC CARES_STATICLIB + PRIVATE HAVE_CONFIG_H=1 + ) + + TARGET_LINK_LIBRARIES (${LIBNAME} PUBLIC ${CARES_DEPENDENT_LIBS}) + IF (CARES_INSTALL) + INSTALL (TARGETS ${LIBNAME} EXPORT ${PROJECT_NAME}-targets COMPONENT Devel + ${TARGETS_INST_DEST} + ) + INSTALL(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/cares${STATIC_SUFFIX}.pdb + DESTINATION ${CMAKE_INSTALL_BINDIR} + COMPONENT Library + OPTIONAL + ) + ENDIF () + + # For chain building: add alias targets that look like import libs that would be returned by find_package(c-ares). + ADD_LIBRARY (${PROJECT_NAME}::cares_static ALIAS ${LIBNAME}) + IF (NOT TARGET ${PROJECT_NAME}::cares) + # Only use static for the generic alias if shared lib wasn't built. + ADD_LIBRARY (${PROJECT_NAME}::cares ALIAS ${LIBNAME}) + ENDIF () +ENDIF () + + + + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/config-dos.h nodejs-mozilla-12.22.12/deps/cares/src/lib/config-dos.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/config-dos.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/config-dos.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,115 @@ +#ifndef HEADER_CONFIG_DOS_H +#define HEADER_CONFIG_DOS_H + + +/* ================================================================ */ +/* ares/config-dos.h - Hand crafted config file for DOS */ +/* ================================================================ */ + +#define PACKAGE "c-ares" + +#define HAVE_ERRNO_H 1 +#define HAVE_GETENV 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_IOCTLSOCKET 1 +#define HAVE_IOCTLSOCKET_FIONBIO 1 +#define HAVE_LIMITS_H 1 +#define HAVE_NET_IF_H 1 +#define HAVE_RECV 1 +#define HAVE_RECVFROM 1 +#define HAVE_SEND 1 +#define HAVE_STRDUP 1 +#define HAVE_STRICMP 1 +#define HAVE_STRUCT_IN6_ADDR 1 +#define HAVE_STRUCT_TIMEVAL 1 +#define HAVE_SYS_IOCTL_H 1 +#define HAVE_SYS_SOCKET_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_TIME_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_WRITEV 1 + +#define NEED_MALLOC_H 1 + +#define RETSIGTYPE void +#define TIME_WITH_SYS_TIME 1 + +/* Qualifiers for send(), recv(), recvfrom() and getnameinfo(). */ + +#define SEND_TYPE_ARG1 int +#define SEND_QUAL_ARG2 const +#define SEND_TYPE_ARG2 void * +#define SEND_TYPE_ARG3 int +#define SEND_TYPE_ARG4 int +#define SEND_TYPE_RETV int + +#define RECV_TYPE_ARG1 int +#define RECV_TYPE_ARG2 void * +#define RECV_TYPE_ARG3 int +#define RECV_TYPE_ARG4 int +#define RECV_TYPE_RETV int + +#define RECVFROM_TYPE_ARG1 int +#define RECVFROM_TYPE_ARG2 void +#define RECVFROM_TYPE_ARG3 int +#define RECVFROM_TYPE_ARG4 int +#define RECVFROM_TYPE_ARG5 struct sockaddr +#define RECVFROM_TYPE_ARG6 int +#define RECVFROM_TYPE_RETV int +#define RECVFROM_TYPE_ARG2_IS_VOID 1 + +#define BSD + +/* Target HAVE_x section */ + +#if defined(DJGPP) + #undef _SSIZE_T + #include /* For 'ssize_t' */ + + #define HAVE_STRCASECMP 1 + #define HAVE_STRNCASECMP 1 + #define HAVE_SYS_TIME_H 1 + #define HAVE_VARIADIC_MACROS_GCC 1 + + /* Because djgpp <= 2.03 doesn't have snprintf() etc. */ + #if (DJGPP_MINOR < 4) + #define _MPRINTF_REPLACE + #endif + +#elif defined(__WATCOMC__) + #define HAVE_STRCASECMP 1 + +#elif defined(__HIGHC__) + #define HAVE_SYS_TIME_H 1 + #define strerror(e) strerror_s_((e)) +#endif + +#ifdef WATT32 + #define HAVE_AF_INET6 1 + #define HAVE_ARPA_INET_H 1 + #define HAVE_ARPA_NAMESER_H 1 + #define HAVE_CLOSE_S 1 + #define HAVE_GETHOSTNAME 1 + #define HAVE_NETDB_H 1 + #define HAVE_NETINET_IN_H 1 + #define HAVE_NETINET_TCP_H 1 + #define HAVE_PF_INET6 1 + #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 + #define HAVE_STRUCT_ADDRINFO 1 + #define HAVE_STRUCT_IN6_ADDR 1 + #define HAVE_STRUCT_SOCKADDR_IN6 1 + #define HAVE_SYS_SOCKET_H 1 + #define HAVE_SYS_UIO_H 1 + #define NS_INADDRSZ 4 + #define HAVE_STRUCT_SOCKADDR_IN6 1 + + #define HAVE_GETSERVBYPORT_R 1 + #define GETSERVBYPORT_R_ARGS 5 +#endif + +#undef word +#undef byte + +#endif /* HEADER_CONFIG_DOS_H */ + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/config-win32.h nodejs-mozilla-12.22.12/deps/cares/src/lib/config-win32.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/config-win32.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/config-win32.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,351 @@ +#ifndef HEADER_CARES_CONFIG_WIN32_H +#define HEADER_CARES_CONFIG_WIN32_H + +/* Copyright (C) 2004 - 2011 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +/* ================================================================ */ +/* c-ares/config-win32.h - Hand crafted config file for Windows */ +/* ================================================================ */ + +/* ---------------------------------------------------------------- */ +/* HEADER FILES */ +/* ---------------------------------------------------------------- */ + +/* Define if you have the header file. */ +#define HAVE_ASSERT_H 1 + +/* Define if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define if you have the header file. */ +#if defined(__MINGW32__) || defined(__POCC__) +#define HAVE_GETOPT_H 1 +#endif + +/* Define if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define if you have the header file. */ +#ifndef __SALFORDC__ +#define HAVE_PROCESS_H 1 +#endif + +/* Define if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define if you have the header file */ +/* #define HAVE_SYS_TIME_H 1 */ + +/* Define if you have the header file. */ +#define HAVE_TIME_H 1 + +/* Define if you have the header file. */ +#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \ + defined(__POCC__) +#define HAVE_UNISTD_H 1 +#endif + +/* Define if you have the header file. */ +#define HAVE_WINDOWS_H 1 + +/* Define if you have the header file. */ +#define HAVE_WINSOCK_H 1 + +/* Define if you have the header file. */ +#ifndef __SALFORDC__ +#define HAVE_WINSOCK2_H 1 +#endif + +/* Define if you have the header file. */ +#ifndef __SALFORDC__ +#define HAVE_WS2TCPIP_H 1 +#endif + +/* ---------------------------------------------------------------- */ +/* OTHER HEADER INFO */ +/* ---------------------------------------------------------------- */ + +/* Define if sig_atomic_t is an available typedef. */ +#define HAVE_SIG_ATOMIC_T 1 + +/* Define if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define if you can safely include both and . */ +/* #define TIME_WITH_SYS_TIME 1 */ + +/* ---------------------------------------------------------------- */ +/* FUNCTIONS */ +/* ---------------------------------------------------------------- */ + +/* Define if you have the closesocket function. */ +#define HAVE_CLOSESOCKET 1 + +/* Define if you have the getenv function. */ +#define HAVE_GETENV 1 + +/* Define if you have the gethostname function. */ +#define HAVE_GETHOSTNAME 1 + +/* Define if you have the ioctlsocket function. */ +#define HAVE_IOCTLSOCKET 1 + +/* Define if you have a working ioctlsocket FIONBIO function. */ +#define HAVE_IOCTLSOCKET_FIONBIO 1 + +/* Define if you have the strcasecmp function. */ +/* #define HAVE_STRCASECMP 1 */ + +/* Define if you have the strdup function. */ +#define HAVE_STRDUP 1 + +/* Define if you have the stricmp function. */ +#define HAVE_STRICMP 1 + +/* Define if you have the strncasecmp function. */ +/* #define HAVE_STRNCASECMP 1 */ + +/* Define if you have the strnicmp function. */ +#define HAVE_STRNICMP 1 + +/* Define if you have the recv function. */ +#define HAVE_RECV 1 + +/* Define to the type of arg 1 for recv. */ +#define RECV_TYPE_ARG1 SOCKET + +/* Define to the type of arg 2 for recv. */ +#define RECV_TYPE_ARG2 char * + +/* Define to the type of arg 3 for recv. */ +#define RECV_TYPE_ARG3 int + +/* Define to the type of arg 4 for recv. */ +#define RECV_TYPE_ARG4 int + +/* Define to the function return type for recv. */ +#define RECV_TYPE_RETV int + +/* Define if you have the recvfrom function. */ +#define HAVE_RECVFROM 1 + +/* Define to the type of arg 1 for recvfrom. */ +#define RECVFROM_TYPE_ARG1 SOCKET + +/* Define to the type pointed by arg 2 for recvfrom. */ +#define RECVFROM_TYPE_ARG2 char + +/* Define to the type of arg 3 for recvfrom. */ +#define RECVFROM_TYPE_ARG3 int + +/* Define to the type of arg 4 for recvfrom. */ +#define RECVFROM_TYPE_ARG4 int + +/* Define to the type pointed by arg 5 for recvfrom. */ +#define RECVFROM_TYPE_ARG5 struct sockaddr + +/* Define to the type pointed by arg 6 for recvfrom. */ +#define RECVFROM_TYPE_ARG6 int + +/* Define to the function return type for recvfrom. */ +#define RECVFROM_TYPE_RETV int + +/* Define if you have the send function. */ +#define HAVE_SEND 1 + +/* Define to the type of arg 1 for send. */ +#define SEND_TYPE_ARG1 SOCKET + +/* Define to the type qualifier of arg 2 for send. */ +#define SEND_QUAL_ARG2 const + +/* Define to the type of arg 2 for send. */ +#define SEND_TYPE_ARG2 char * + +/* Define to the type of arg 3 for send. */ +#define SEND_TYPE_ARG3 int + +/* Define to the type of arg 4 for send. */ +#define SEND_TYPE_ARG4 int + +/* Define to the function return type for send. */ +#define SEND_TYPE_RETV int + +/* Specifics for the Watt-32 tcp/ip stack. */ +#ifdef WATT32 + #define SOCKET int + #define NS_INADDRSZ 4 + #define HAVE_ARPA_NAMESER_H 1 + #define HAVE_ARPA_INET_H 1 + #define HAVE_NETDB_H 1 + #define HAVE_NETINET_IN_H 1 + #define HAVE_SYS_SOCKET_H 1 + #define HAVE_NETINET_TCP_H 1 + #define HAVE_AF_INET6 1 + #define HAVE_PF_INET6 1 + #define HAVE_STRUCT_IN6_ADDR 1 + #define HAVE_STRUCT_SOCKADDR_IN6 1 + #undef HAVE_WINSOCK_H + #undef HAVE_WINSOCK2_H + #undef HAVE_WS2TCPIP_H +#endif + +/* ---------------------------------------------------------------- */ +/* TYPEDEF REPLACEMENTS */ +/* ---------------------------------------------------------------- */ + +/* Define if in_addr_t is not an available 'typedefed' type. */ +#define in_addr_t unsigned long + +/* Define to the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +#ifdef __cplusplus +/* Compiling headers in C++ mode means bool is available */ +#define HAVE_BOOL_T +#endif + +/* ---------------------------------------------------------------- */ +/* TYPE SIZES */ +/* ---------------------------------------------------------------- */ + +/* ---------------------------------------------------------------- */ +/* STRUCT RELATED */ +/* ---------------------------------------------------------------- */ + +/* Define if you have struct addrinfo. */ +#define HAVE_STRUCT_ADDRINFO 1 + +/* Define if you have struct sockaddr_storage. */ +#if !defined(__SALFORDC__) && !defined(__BORLANDC__) +#define HAVE_STRUCT_SOCKADDR_STORAGE 1 +#endif + +/* Define if you have struct timeval. */ +#define HAVE_STRUCT_TIMEVAL 1 + +/* ---------------------------------------------------------------- */ +/* COMPILER SPECIFIC */ +/* ---------------------------------------------------------------- */ + +/* Define to avoid VS2005 complaining about portable C functions. */ +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +# define _CRT_SECURE_NO_DEPRECATE 1 +# define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif + +/* Set the Target to Vista. However, any symbols required above Win2000 + * should be loaded via LoadLibrary() */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) +# define VS2008_MIN_TARGET 0x0600 +#endif + +/* VS2008 default target settings and minimum build target check. */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) +# ifndef _WIN32_WINNT +# define _WIN32_WINNT VS2008_MIN_TARGET +# endif +# ifndef WINVER +# define WINVER VS2008_MIN_TARGET +# endif +# if (_WIN32_WINNT < VS2008_MIN_TARGET) || (WINVER < VS2008_MIN_TARGET) +# error VS2008 does not support Windows build targets prior to Windows 2000 +# endif +#endif + +/* When no build target is specified Pelles C 5.00 and later default build + target is Windows Vista. */ +#if defined(__POCC__) && (__POCC__ >= 500) +# ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0600 +# endif +# ifndef WINVER +# define WINVER 0x0600 +# endif +#endif + +/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is + quite convoluted, compiler dependent and even build target dependent. */ +#if defined(HAVE_WS2TCPIP_H) +# if defined(__POCC__) +# define HAVE_FREEADDRINFO 1 +# define HAVE_GETADDRINFO 1 +# define HAVE_GETNAMEINFO 1 +# elif defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501) +# define HAVE_FREEADDRINFO 1 +# define HAVE_GETADDRINFO 1 +# define HAVE_GETNAMEINFO 1 +# elif defined(_MSC_VER) && (_MSC_VER >= 1200) +# define HAVE_FREEADDRINFO 1 +# define HAVE_GETADDRINFO 1 +# define HAVE_GETNAMEINFO 1 +# endif +#endif + +#if defined(__POCC__) +# ifndef _MSC_VER +# error Microsoft extensions /Ze compiler option is required +# endif +# ifndef __POCC__OLDNAMES +# error Compatibility names /Go compiler option is required +# endif +#endif + +/* ---------------------------------------------------------------- */ +/* IPV6 COMPATIBILITY */ +/* ---------------------------------------------------------------- */ + +/* Define if you have address family AF_INET6. */ +#ifdef HAVE_WINSOCK2_H +#define HAVE_AF_INET6 1 +#endif + +/* Define if you have protocol family PF_INET6. */ +#ifdef HAVE_WINSOCK2_H +#define HAVE_PF_INET6 1 +#endif + +/* Define if you have struct in6_addr. */ +#ifdef HAVE_WS2TCPIP_H +#define HAVE_STRUCT_IN6_ADDR 1 +#endif + +/* Define if you have struct sockaddr_in6. */ +#ifdef HAVE_WS2TCPIP_H +#define HAVE_STRUCT_SOCKADDR_IN6 1 +#endif + +/* Define if you have sockaddr_in6 with scopeid. */ +#ifdef HAVE_WS2TCPIP_H +#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 +#endif + +/* ---------------------------------------------------------------- */ +/* Win CE */ +/* ---------------------------------------------------------------- */ + +/* FIXME: A proper config-win32ce.h should be created to hold these */ + +/* + * System error codes for Windows CE + */ + +#if defined(_WIN32_WCE) && !defined(HAVE_ERRNO_H) +# define ENOENT ERROR_FILE_NOT_FOUND +# define ESRCH ERROR_PATH_NOT_FOUND +# define ENOMEM ERROR_NOT_ENOUGH_MEMORY +# define ENOSPC ERROR_INVALID_PARAMETER +#endif + +#endif /* HEADER_CARES_CONFIG_WIN32_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/inet_net_pton.c nodejs-mozilla-12.22.12/deps/cares/src/lib/inet_net_pton.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/inet_net_pton.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/inet_net_pton.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,444 @@ + +/* + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Copyright (c) 1996,1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_ipv6.h" +#include "ares_nowarn.h" +#include "ares_inet_net_pton.h" + + +const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }; + + +#ifndef HAVE_INET_NET_PTON + +/* + * static int + * inet_net_pton_ipv4(src, dst, size) + * convert IPv4 network number from presentation to network format. + * accepts hex octets, hex strings, decimal octets, and /CIDR. + * "size" is in bytes and describes "dst". + * return: + * number of bits, either imputed classfully or specified with /CIDR, + * or -1 if some failure occurred (check errno). ENOENT means it was + * not an IPv4 network specification. + * note: + * network byte order assumed. this means 192.5.5.240/28 has + * 0b11110000 in its fourth octet. + * note: + * On Windows we store the error in the thread errno, not + * in the winsock error code. This is to avoid loosing the + * actual last winsock error. So use macro ERRNO to fetch the + * errno this funtion sets when returning (-1), not SOCKERRNO. + * author: + * Paul Vixie (ISC), June 1996 + */ +static int +inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size) +{ + static const char xdigits[] = "0123456789abcdef"; + static const char digits[] = "0123456789"; + int n, ch, tmp = 0, dirty, bits; + const unsigned char *odst = dst; + + ch = *src++; + if (ch == '0' && (src[0] == 'x' || src[0] == 'X') + && ISASCII(src[1]) + && ISXDIGIT(src[1])) { + /* Hexadecimal: Eat nybble string. */ + if (!size) + goto emsgsize; + dirty = 0; + src++; /* skip x or X. */ + while ((ch = *src++) != '\0' && ISASCII(ch) && ISXDIGIT(ch)) { + if (ISUPPER(ch)) + ch = tolower(ch); + n = aresx_sztosi(strchr(xdigits, ch) - xdigits); + if (dirty == 0) + tmp = n; + else + tmp = (tmp << 4) | n; + if (++dirty == 2) { + if (!size--) + goto emsgsize; + *dst++ = (unsigned char) tmp; + dirty = 0; + } + } + if (dirty) { /* Odd trailing nybble? */ + if (!size--) + goto emsgsize; + *dst++ = (unsigned char) (tmp << 4); + } + } else if (ISASCII(ch) && ISDIGIT(ch)) { + /* Decimal: eat dotted digit string. */ + for (;;) { + tmp = 0; + do { + n = aresx_sztosi(strchr(digits, ch) - digits); + tmp *= 10; + tmp += n; + if (tmp > 255) + goto enoent; + } while ((ch = *src++) != '\0' && + ISASCII(ch) && ISDIGIT(ch)); + if (!size--) + goto emsgsize; + *dst++ = (unsigned char) tmp; + if (ch == '\0' || ch == '/') + break; + if (ch != '.') + goto enoent; + ch = *src++; + if (!ISASCII(ch) || !ISDIGIT(ch)) + goto enoent; + } + } else + goto enoent; + + bits = -1; + if (ch == '/' && ISASCII(src[0]) && + ISDIGIT(src[0]) && dst > odst) { + /* CIDR width specifier. Nothing can follow it. */ + ch = *src++; /* Skip over the /. */ + bits = 0; + do { + n = aresx_sztosi(strchr(digits, ch) - digits); + bits *= 10; + bits += n; + if (bits > 32) + goto enoent; + } while ((ch = *src++) != '\0' && ISASCII(ch) && ISDIGIT(ch)); + if (ch != '\0') + goto enoent; + } + + /* Firey death and destruction unless we prefetched EOS. */ + if (ch != '\0') + goto enoent; + + /* If nothing was written to the destination, we found no address. */ + if (dst == odst) + goto enoent; /* LCOV_EXCL_LINE: all valid paths above increment dst */ + /* If no CIDR spec was given, infer width from net class. */ + if (bits == -1) { + if (*odst >= 240) /* Class E */ + bits = 32; + else if (*odst >= 224) /* Class D */ + bits = 8; + else if (*odst >= 192) /* Class C */ + bits = 24; + else if (*odst >= 128) /* Class B */ + bits = 16; + else /* Class A */ + bits = 8; + /* If imputed mask is narrower than specified octets, widen. */ + if (bits < ((dst - odst) * 8)) + bits = aresx_sztosi(dst - odst) * 8; + /* + * If there are no additional bits specified for a class D + * address adjust bits to 4. + */ + if (bits == 8 && *odst == 224) + bits = 4; + } + /* Extend network to cover the actual mask. */ + while (bits > ((dst - odst) * 8)) { + if (!size--) + goto emsgsize; + *dst++ = '\0'; + } + return (bits); + + enoent: + SET_ERRNO(ENOENT); + return (-1); + + emsgsize: + SET_ERRNO(EMSGSIZE); + return (-1); +} + +static int +getbits(const char *src, int *bitsp) +{ + static const char digits[] = "0123456789"; + int n; + int val; + char ch; + + val = 0; + n = 0; + while ((ch = *src++) != '\0') { + const char *pch; + + pch = strchr(digits, ch); + if (pch != NULL) { + if (n++ != 0 && val == 0) /* no leading zeros */ + return (0); + val *= 10; + val += aresx_sztosi(pch - digits); + if (val > 128) /* range */ + return (0); + continue; + } + return (0); + } + if (n == 0) + return (0); + *bitsp = val; + return (1); +} + +static int +getv4(const char *src, unsigned char *dst, int *bitsp) +{ + static const char digits[] = "0123456789"; + unsigned char *odst = dst; + int n; + unsigned int val; + char ch; + + val = 0; + n = 0; + while ((ch = *src++) != '\0') { + const char *pch; + + pch = strchr(digits, ch); + if (pch != NULL) { + if (n++ != 0 && val == 0) /* no leading zeros */ + return (0); + val *= 10; + val += aresx_sztoui(pch - digits); + if (val > 255) /* range */ + return (0); + continue; + } + if (ch == '.' || ch == '/') { + if (dst - odst > 3) /* too many octets? */ + return (0); + *dst++ = (unsigned char)val; + if (ch == '/') + return (getbits(src, bitsp)); + val = 0; + n = 0; + continue; + } + return (0); + } + if (n == 0) + return (0); + if (dst - odst > 3) /* too many octets? */ + return (0); + *dst = (unsigned char)val; + return 1; +} + +static int +inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size) +{ + static const char xdigits_l[] = "0123456789abcdef", + xdigits_u[] = "0123456789ABCDEF"; + unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; + const char *xdigits, *curtok; + int ch, saw_xdigit; + unsigned int val; + int digits; + int bits; + size_t bytes; + int words; + int ipv4; + + memset((tp = tmp), '\0', NS_IN6ADDRSZ); + endp = tp + NS_IN6ADDRSZ; + colonp = NULL; + /* Leading :: requires some special handling. */ + if (*src == ':') + if (*++src != ':') + goto enoent; + curtok = src; + saw_xdigit = 0; + val = 0; + digits = 0; + bits = -1; + ipv4 = 0; + while ((ch = *src++) != '\0') { + const char *pch; + + if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) + pch = strchr((xdigits = xdigits_u), ch); + if (pch != NULL) { + val <<= 4; + val |= aresx_sztoui(pch - xdigits); + if (++digits > 4) + goto enoent; + saw_xdigit = 1; + continue; + } + if (ch == ':') { + curtok = src; + if (!saw_xdigit) { + if (colonp) + goto enoent; + colonp = tp; + continue; + } else if (*src == '\0') + goto enoent; + if (tp + NS_INT16SZ > endp) + return (0); + *tp++ = (unsigned char)((val >> 8) & 0xff); + *tp++ = (unsigned char)(val & 0xff); + saw_xdigit = 0; + digits = 0; + val = 0; + continue; + } + if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && + getv4(curtok, tp, &bits) > 0) { + tp += NS_INADDRSZ; + saw_xdigit = 0; + ipv4 = 1; + break; /* '\0' was seen by inet_pton4(). */ + } + if (ch == '/' && getbits(src, &bits) > 0) + break; + goto enoent; + } + if (saw_xdigit) { + if (tp + NS_INT16SZ > endp) + goto enoent; + *tp++ = (unsigned char)((val >> 8) & 0xff); + *tp++ = (unsigned char)(val & 0xff); + } + if (bits == -1) + bits = 128; + + words = (bits + 15) / 16; + if (words < 2) + words = 2; + if (ipv4) + words = 8; + endp = tmp + 2 * words; + + if (colonp != NULL) { + /* + * Since some memmove()'s erroneously fail to handle + * overlapping regions, we'll do the shift by hand. + */ + const ares_ssize_t n = tp - colonp; + ares_ssize_t i; + + if (tp == endp) + goto enoent; + for (i = 1; i <= n; i++) { + *(endp - i) = *(colonp + n - i); + *(colonp + n - i) = 0; + } + tp = endp; + } + if (tp != endp) + goto enoent; + + bytes = (bits + 7) / 8; + if (bytes > size) + goto emsgsize; + memcpy(dst, tmp, bytes); + return (bits); + + enoent: + SET_ERRNO(ENOENT); + return (-1); + + emsgsize: + SET_ERRNO(EMSGSIZE); + return (-1); +} + +/* + * int + * inet_net_pton(af, src, dst, size) + * convert network number from presentation to network format. + * accepts hex octets, hex strings, decimal octets, and /CIDR. + * "size" is in bytes and describes "dst". + * return: + * number of bits, either imputed classfully or specified with /CIDR, + * or -1 if some failure occurred (check errno). ENOENT means it was + * not a valid network specification. + * note: + * On Windows we store the error in the thread errno, not + * in the winsock error code. This is to avoid loosing the + * actual last winsock error. So use macro ERRNO to fetch the + * errno this funtion sets when returning (-1), not SOCKERRNO. + * author: + * Paul Vixie (ISC), June 1996 + */ +int +ares_inet_net_pton(int af, const char *src, void *dst, size_t size) +{ + switch (af) { + case AF_INET: + return (inet_net_pton_ipv4(src, dst, size)); + case AF_INET6: + return (inet_net_pton_ipv6(src, dst, size)); + default: + SET_ERRNO(EAFNOSUPPORT); + return (-1); + } +} + +#endif /* HAVE_INET_NET_PTON */ + +#ifndef HAVE_INET_PTON +int ares_inet_pton(int af, const char *src, void *dst) +{ + int result; + size_t size; + + if (af == AF_INET) + size = sizeof(struct in_addr); + else if (af == AF_INET6) + size = sizeof(struct ares_in6_addr); + else + { + SET_ERRNO(EAFNOSUPPORT); + return -1; + } + result = ares_inet_net_pton(af, src, dst, size); + if (result == -1 && ERRNO == ENOENT) + return 0; + return (result > -1 ? 1 : -1); +} +#else /* HAVE_INET_PTON */ +int ares_inet_pton(int af, const char *src, void *dst) +{ + /* just relay this to the underlying function */ + return inet_pton(af, src, dst); +} + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/inet_ntop.c nodejs-mozilla-12.22.12/deps/cares/src/lib/inet_ntop.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/inet_ntop.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/inet_ntop.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") + * Copyright (c) 1996-1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif + +#include "ares_nameser.h" + +#include "ares.h" +#include "ares_ipv6.h" + +#ifndef HAVE_INET_NTOP + +/* + * WARNING: Don't even consider trying to compile this on a system where + * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. + */ + +static const char *inet_ntop4(const unsigned char *src, char *dst, size_t size); +static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size); + +/* char * + * inet_ntop(af, src, dst, size) + * convert a network format address to presentation format. + * return: + * pointer to presentation format address (`dst'), or NULL (see errno). + * note: + * On Windows we store the error in the thread errno, not + * in the winsock error code. This is to avoid loosing the + * actual last winsock error. So use macro ERRNO to fetch the + * errno this function sets when returning NULL, not SOCKERRNO. + * author: + * Paul Vixie, 1996. + */ +const char * +ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size) +{ + switch (af) { + case AF_INET: + return (inet_ntop4(src, dst, (size_t)size)); + case AF_INET6: + return (inet_ntop6(src, dst, (size_t)size)); + default: + SET_ERRNO(EAFNOSUPPORT); + return (NULL); + } + /* NOTREACHED */ +} + +/* const char * + * inet_ntop4(src, dst, size) + * format an IPv4 address + * return: + * `dst' (as a const) + * notes: + * (1) uses no statics + * (2) takes a unsigned char* not an in_addr as input + * author: + * Paul Vixie, 1996. + */ +static const char * +inet_ntop4(const unsigned char *src, char *dst, size_t size) +{ + static const char fmt[] = "%u.%u.%u.%u"; + char tmp[sizeof("255.255.255.255")]; + + if ((size_t)sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) >= size) { + SET_ERRNO(ENOSPC); + return (NULL); + } + strcpy(dst, tmp); + return (dst); +} + +/* const char * + * inet_ntop6(src, dst, size) + * convert IPv6 binary address into presentation (printable) format + * author: + * Paul Vixie, 1996. + */ +static const char * +inet_ntop6(const unsigned char *src, char *dst, size_t size) +{ + /* + * Note that int32_t and int16_t need only be "at least" large enough + * to contain a value of the specified size. On some systems, like + * Crays, there is no such thing as an integer variable with 16 bits. + * Keep this in mind if you think this function should have been coded + * to use pointer overlays. All the world's not a VAX. + */ + char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; + char *tp; + struct { int base, len; } best, cur; + unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ]; + int i; + + /* + * Preprocess: + * Copy the input (bytewise) array into a wordwise array. + * Find the longest run of 0x00's in src[] for :: shorthanding. + */ + memset(words, '\0', sizeof(words)); + for (i = 0; i < NS_IN6ADDRSZ; i++) + words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3)); + best.base = -1; + best.len = 0; + cur.base = -1; + cur.len = 0; + for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { + if (words[i] == 0) { + if (cur.base == -1) + cur.base = i, cur.len = 1; + else + cur.len++; + } else { + if (cur.base != -1) { + if (best.base == -1 || cur.len > best.len) + best = cur; + cur.base = -1; + } + } + } + if (cur.base != -1) { + if (best.base == -1 || cur.len > best.len) + best = cur; + } + if (best.base != -1 && best.len < 2) + best.base = -1; + + /* + * Format the result. + */ + tp = tmp; + for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { + /* Are we inside the best run of 0x00's? */ + if (best.base != -1 && i >= best.base && + i < (best.base + best.len)) { + if (i == best.base) + *tp++ = ':'; + continue; + } + /* Are we following an initial run of 0x00s or any real hex? */ + if (i != 0) + *tp++ = ':'; + /* Is this address an encapsulated IPv4? */ + if (i == 6 && best.base == 0 && (best.len == 6 || + (best.len == 7 && words[7] != 0x0001) || + (best.len == 5 && words[5] == 0xffff))) { + if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp))) + return (NULL); + tp += strlen(tp); + break; + } + tp += sprintf(tp, "%x", words[i]); + } + /* Was it a trailing run of 0x00's? */ + if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) + *tp++ = ':'; + *tp++ = '\0'; + + /* + * Check for overflow, copy, and we're done. + */ + if ((size_t)(tp - tmp) > size) { + SET_ERRNO(ENOSPC); + return (NULL); + } + strcpy(dst, tmp); + return (dst); +} + +#else /* HAVE_INET_NTOP */ + +const char * +ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size) +{ + /* just relay this to the underlying function */ + return inet_ntop(af, src, dst, size); +} + +#endif /* HAVE_INET_NTOP */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/Makefile.am nodejs-mozilla-12.22.12/deps/cares/src/lib/Makefile.am --- nodejs-mozilla-12.18.1/deps/cares/src/lib/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/Makefile.am 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,74 @@ +AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6 +ACLOCAL_AMFLAGS = -I m4 --install + +# Specify our include paths here, and do it relative to $(top_srcdir) and +# $(top_builddir), to ensure that these paths which belong to the library +# being currently built and tested are searched before the library which +# might possibly already be installed in the system. + +AM_CPPFLAGS = -I$(top_builddir)/include \ + -I$(top_builddir)/src/lib \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/src/lib + +lib_LTLIBRARIES = libcares.la + +man_MANS = $(MANPAGES) + +# adig and ahost are just sample programs and thus not mentioned with the +# regular sources and headers +EXTRA_DIST = Makefile.inc config-win32.h CMakeLists.txt \ + ares_config.h.in ares_config.h.cmake cares.rc \ + $(CSOURCES) $(HHEADERS) config-dos.h + +DISTCLEANFILES = ares_config.h + +DIST_SUBDIRS = + +AM_LDFLAGS = + +libcares_la_LDFLAGS_EXTRA = + +if CARES_LT_SHLIB_USE_VERSION_INFO +libcares_la_LDFLAGS_EXTRA += -version-info @CARES_VERSION_INFO@ +endif + +if CARES_LT_SHLIB_USE_NO_UNDEFINED +libcares_la_LDFLAGS_EXTRA += -no-undefined +endif + +if CARES_LT_SHLIB_USE_MIMPURE_TEXT +libcares_la_LDFLAGS_EXTRA += -mimpure-text +endif + +libcares_la_LDFLAGS = $(AM_LDFLAGS) $(libcares_la_LDFLAGS_EXTRA) + +# Add -Werror if defined +CFLAGS += @CARES_CFLAG_EXTRAS@ + +if USE_CPPFLAG_CARES_STATICLIB +AM_CPPFLAGS += $(CPPFLAG_CARES_STATICLIB) +endif + +libcares_la_CFLAGS_EXTRA = + +libcares_la_CPPFLAGS_EXTRA = -DCARES_BUILDING_LIBRARY + +if DOING_CARES_SYMBOL_HIDING +libcares_la_CFLAGS_EXTRA += $(CFLAG_CARES_SYMBOL_HIDING) +libcares_la_CPPFLAGS_EXTRA += -DCARES_SYMBOL_HIDING +endif + +include $(top_srcdir)/aminclude_static.am +libcares_la_LIBS = $(CODE_COVERAGE_LIBS) +libcares_la_CFLAGS_EXTRA += $(CODE_COVERAGE_CFLAGS) +libcares_la_CPPFLAGS_EXTRA += $(CODE_COVERAGE_CPPFLAGS) + +libcares_la_CFLAGS = $(AM_CFLAGS) $(libcares_la_CFLAGS_EXTRA) + +libcares_la_CPPFLAGS = $(AM_CPPFLAGS) $(libcares_la_CPPFLAGS_EXTRA) + +# Makefile.inc provides the CSOURCES and HHEADERS defines +include Makefile.inc + +libcares_la_SOURCES = $(CSOURCES) $(HHEADERS) diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/Makefile.in nodejs-mozilla-12.22.12/deps/cares/src/lib/Makefile.in --- nodejs-mozilla-12.18.1/deps/cares/src/lib/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/Makefile.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,1764 @@ +# Makefile.in generated by automake 1.16.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2021 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# aminclude_static.am generated automatically by Autoconf +# from AX_AM_MACROS_STATIC on Wed Oct 27 08:01:08 CEST 2021 + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@CARES_LT_SHLIB_USE_VERSION_INFO_TRUE@am__append_1 = -version-info @CARES_VERSION_INFO@ +@CARES_LT_SHLIB_USE_NO_UNDEFINED_TRUE@am__append_2 = -no-undefined +@CARES_LT_SHLIB_USE_MIMPURE_TEXT_TRUE@am__append_3 = -mimpure-text +@USE_CPPFLAG_CARES_STATICLIB_TRUE@am__append_4 = $(CPPFLAG_CARES_STATICLIB) +@DOING_CARES_SYMBOL_HIDING_TRUE@am__append_5 = $(CFLAG_CARES_SYMBOL_HIDING) +@DOING_CARES_SYMBOL_HIDING_TRUE@am__append_6 = -DCARES_SYMBOL_HIDING +subdir = src/lib +SUBDIRS = +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ + $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ + $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ + $(top_srcdir)/m4/ax_am_macros_static.m4 \ + $(top_srcdir)/m4/ax_check_gnu_make.m4 \ + $(top_srcdir)/m4/ax_code_coverage.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/m4/ax_file_escapes.m4 \ + $(top_srcdir)/m4/ax_require_defined.m4 \ + $(top_srcdir)/m4/cares-compilers.m4 \ + $(top_srcdir)/m4/cares-confopts.m4 \ + $(top_srcdir)/m4/cares-functions.m4 \ + $(top_srcdir)/m4/cares-reentrant.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/xc-am-iface.m4 \ + $(top_srcdir)/m4/xc-cc-check.m4 \ + $(top_srcdir)/m4/xc-lt-iface.m4 \ + $(top_srcdir)/m4/xc-translit.m4 \ + $(top_srcdir)/m4/xc-val-flgs.m4 \ + $(top_srcdir)/m4/zz40-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = ares_config.h $(top_builddir)/include/ares_build.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libcares_la_LIBADD = +am__objects_1 = libcares_la-ares__addrinfo2hostent.lo \ + libcares_la-ares__addrinfo_localhost.lo \ + libcares_la-ares__close_sockets.lo \ + libcares_la-ares__get_hostent.lo \ + libcares_la-ares__parse_into_addrinfo.lo \ + libcares_la-ares__readaddrinfo.lo \ + libcares_la-ares__sortaddrinfo.lo \ + libcares_la-ares__read_line.lo libcares_la-ares__timeval.lo \ + libcares_la-ares_android.lo libcares_la-ares_cancel.lo \ + libcares_la-ares_data.lo libcares_la-ares_destroy.lo \ + libcares_la-ares_expand_name.lo \ + libcares_la-ares_expand_string.lo libcares_la-ares_fds.lo \ + libcares_la-ares_free_hostent.lo \ + libcares_la-ares_free_string.lo \ + libcares_la-ares_freeaddrinfo.lo \ + libcares_la-ares_getaddrinfo.lo libcares_la-ares_getenv.lo \ + libcares_la-ares_gethostbyaddr.lo \ + libcares_la-ares_gethostbyname.lo \ + libcares_la-ares_getnameinfo.lo libcares_la-ares_getsock.lo \ + libcares_la-ares_init.lo libcares_la-ares_library_init.lo \ + libcares_la-ares_llist.lo libcares_la-ares_mkquery.lo \ + libcares_la-ares_create_query.lo libcares_la-ares_nowarn.lo \ + libcares_la-ares_options.lo libcares_la-ares_parse_a_reply.lo \ + libcares_la-ares_parse_aaaa_reply.lo \ + libcares_la-ares_parse_caa_reply.lo \ + libcares_la-ares_parse_mx_reply.lo \ + libcares_la-ares_parse_naptr_reply.lo \ + libcares_la-ares_parse_ns_reply.lo \ + libcares_la-ares_parse_ptr_reply.lo \ + libcares_la-ares_parse_soa_reply.lo \ + libcares_la-ares_parse_srv_reply.lo \ + libcares_la-ares_parse_txt_reply.lo \ + libcares_la-ares_parse_uri_reply.lo \ + libcares_la-ares_platform.lo libcares_la-ares_process.lo \ + libcares_la-ares_query.lo libcares_la-ares_search.lo \ + libcares_la-ares_send.lo libcares_la-ares_strcasecmp.lo \ + libcares_la-ares_strdup.lo libcares_la-ares_strerror.lo \ + libcares_la-ares_strsplit.lo libcares_la-ares_timeout.lo \ + libcares_la-ares_version.lo libcares_la-ares_writev.lo \ + libcares_la-bitncmp.lo libcares_la-inet_net_pton.lo \ + libcares_la-inet_ntop.lo libcares_la-windows_port.lo +am__objects_2 = +am_libcares_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libcares_la_OBJECTS = $(am_libcares_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libcares_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcares_la_CFLAGS) \ + $(CFLAGS) $(libcares_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = \ + ./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo \ + ./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo \ + ./$(DEPDIR)/libcares_la-ares__close_sockets.Plo \ + ./$(DEPDIR)/libcares_la-ares__get_hostent.Plo \ + ./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo \ + ./$(DEPDIR)/libcares_la-ares__read_line.Plo \ + ./$(DEPDIR)/libcares_la-ares__readaddrinfo.Plo \ + ./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo \ + ./$(DEPDIR)/libcares_la-ares__timeval.Plo \ + ./$(DEPDIR)/libcares_la-ares_android.Plo \ + ./$(DEPDIR)/libcares_la-ares_cancel.Plo \ + ./$(DEPDIR)/libcares_la-ares_create_query.Plo \ + ./$(DEPDIR)/libcares_la-ares_data.Plo \ + ./$(DEPDIR)/libcares_la-ares_destroy.Plo \ + ./$(DEPDIR)/libcares_la-ares_expand_name.Plo \ + ./$(DEPDIR)/libcares_la-ares_expand_string.Plo \ + ./$(DEPDIR)/libcares_la-ares_fds.Plo \ + ./$(DEPDIR)/libcares_la-ares_free_hostent.Plo \ + ./$(DEPDIR)/libcares_la-ares_free_string.Plo \ + ./$(DEPDIR)/libcares_la-ares_freeaddrinfo.Plo \ + ./$(DEPDIR)/libcares_la-ares_getaddrinfo.Plo \ + ./$(DEPDIR)/libcares_la-ares_getenv.Plo \ + ./$(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo \ + ./$(DEPDIR)/libcares_la-ares_gethostbyname.Plo \ + ./$(DEPDIR)/libcares_la-ares_getnameinfo.Plo \ + ./$(DEPDIR)/libcares_la-ares_getsock.Plo \ + ./$(DEPDIR)/libcares_la-ares_init.Plo \ + ./$(DEPDIR)/libcares_la-ares_library_init.Plo \ + ./$(DEPDIR)/libcares_la-ares_llist.Plo \ + ./$(DEPDIR)/libcares_la-ares_mkquery.Plo \ + ./$(DEPDIR)/libcares_la-ares_nowarn.Plo \ + ./$(DEPDIR)/libcares_la-ares_options.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_a_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_caa_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_mx_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_naptr_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_ns_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_ptr_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_soa_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_srv_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_txt_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_parse_uri_reply.Plo \ + ./$(DEPDIR)/libcares_la-ares_platform.Plo \ + ./$(DEPDIR)/libcares_la-ares_process.Plo \ + ./$(DEPDIR)/libcares_la-ares_query.Plo \ + ./$(DEPDIR)/libcares_la-ares_search.Plo \ + ./$(DEPDIR)/libcares_la-ares_send.Plo \ + ./$(DEPDIR)/libcares_la-ares_strcasecmp.Plo \ + ./$(DEPDIR)/libcares_la-ares_strdup.Plo \ + ./$(DEPDIR)/libcares_la-ares_strerror.Plo \ + ./$(DEPDIR)/libcares_la-ares_strsplit.Plo \ + ./$(DEPDIR)/libcares_la-ares_timeout.Plo \ + ./$(DEPDIR)/libcares_la-ares_version.Plo \ + ./$(DEPDIR)/libcares_la-ares_writev.Plo \ + ./$(DEPDIR)/libcares_la-bitncmp.Plo \ + ./$(DEPDIR)/libcares_la-inet_net_pton.Plo \ + ./$(DEPDIR)/libcares_la-inet_ntop.Plo \ + ./$(DEPDIR)/libcares_la-windows_port.Plo +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libcares_la_SOURCES) +DIST_SOURCES = $(libcares_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir distdir-am +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ + ares_config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \ + $(srcdir)/ares_config.h.in $(top_srcdir)/aminclude_static.am \ + $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_SUBDIRS = @BUILD_SUBDIRS@ +CARES_CFLAG_EXTRAS = @CARES_CFLAG_EXTRAS@ +CARES_PRIVATE_LIBS = @CARES_PRIVATE_LIBS@ +CARES_RANDOM_FILE = @CARES_RANDOM_FILE@ +CARES_VERSION_INFO = @CARES_VERSION_INFO@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ + +# Add -Werror if defined +CFLAGS = @CFLAGS@ @CARES_CFLAG_EXTRAS@ +CFLAG_CARES_SYMBOL_HIDING = @CFLAG_CARES_SYMBOL_HIDING@ +CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ +CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ +CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ +CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ +CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAG_CARES_STATICLIB = @CPPFLAG_CARES_STATICLIB@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ETAGS = @ETAGS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GENHTML = @GENHTML@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LCOV = @LCOV@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ifGNUmake = @ifGNUmake@ +ifnGNUmake = @ifnGNUmake@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6 +ACLOCAL_AMFLAGS = -I m4 --install + +# Specify our include paths here, and do it relative to $(top_srcdir) and +# $(top_builddir), to ensure that these paths which belong to the library +# being currently built and tested are searched before the library which +# might possibly already be installed in the system. +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/src/lib \ + -I$(top_srcdir)/include -I$(top_srcdir)/src/lib \ + $(am__append_4) +lib_LTLIBRARIES = libcares.la +man_MANS = $(MANPAGES) + +# adig and ahost are just sample programs and thus not mentioned with the +# regular sources and headers +EXTRA_DIST = Makefile.inc config-win32.h CMakeLists.txt \ + ares_config.h.in ares_config.h.cmake cares.rc \ + $(CSOURCES) $(HHEADERS) config-dos.h + +DISTCLEANFILES = ares_config.h +DIST_SUBDIRS = +AM_LDFLAGS = +libcares_la_LDFLAGS_EXTRA = $(am__append_1) $(am__append_2) \ + $(am__append_3) +libcares_la_LDFLAGS = $(AM_LDFLAGS) $(libcares_la_LDFLAGS_EXTRA) +libcares_la_CFLAGS_EXTRA = $(am__append_5) $(CODE_COVERAGE_CFLAGS) +libcares_la_CPPFLAGS_EXTRA = -DCARES_BUILDING_LIBRARY $(am__append_6) \ + $(CODE_COVERAGE_CPPFLAGS) +@CODE_COVERAGE_ENABLED_TRUE@GITIGNOREFILES := $(GITIGNOREFILES) $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V)) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY)) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_0 = @echo " LCOV --capture" $(CODE_COVERAGE_OUTPUT_FILE); +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V)) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY)) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_ign_0 = @echo " LCOV --remove /tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN); +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V)) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY)) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_genhtml_0 = @echo " GEN " "$(CODE_COVERAGE_OUTPUT_DIRECTORY)"; +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet = $(code_coverage_quiet_$(V)) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY)) +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_quiet_0 = --quiet + +# sanitizes the test-name: replaces with underscores: dashes and dots +@CODE_COVERAGE_ENABLED_TRUE@code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1))) +@CODE_COVERAGE_ENABLED_TRUE@AM_DISTCHECK_CONFIGURE_FLAGS := $(AM_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage +libcares_la_LIBS = $(CODE_COVERAGE_LIBS) +libcares_la_CFLAGS = $(AM_CFLAGS) $(libcares_la_CFLAGS_EXTRA) +libcares_la_CPPFLAGS = $(AM_CPPFLAGS) $(libcares_la_CPPFLAGS_EXTRA) +CSOURCES = ares__addrinfo2hostent.c \ + ares__addrinfo_localhost.c \ + ares__close_sockets.c \ + ares__get_hostent.c \ + ares__parse_into_addrinfo.c \ + ares__readaddrinfo.c \ + ares__sortaddrinfo.c \ + ares__read_line.c \ + ares__timeval.c \ + ares_android.c \ + ares_cancel.c \ + ares_data.c \ + ares_destroy.c \ + ares_expand_name.c \ + ares_expand_string.c \ + ares_fds.c \ + ares_free_hostent.c \ + ares_free_string.c \ + ares_freeaddrinfo.c \ + ares_getaddrinfo.c \ + ares_getenv.c \ + ares_gethostbyaddr.c \ + ares_gethostbyname.c \ + ares_getnameinfo.c \ + ares_getsock.c \ + ares_init.c \ + ares_library_init.c \ + ares_llist.c \ + ares_mkquery.c \ + ares_create_query.c \ + ares_nowarn.c \ + ares_options.c \ + ares_parse_a_reply.c \ + ares_parse_aaaa_reply.c \ + ares_parse_caa_reply.c \ + ares_parse_mx_reply.c \ + ares_parse_naptr_reply.c \ + ares_parse_ns_reply.c \ + ares_parse_ptr_reply.c \ + ares_parse_soa_reply.c \ + ares_parse_srv_reply.c \ + ares_parse_txt_reply.c \ + ares_parse_uri_reply.c \ + ares_platform.c \ + ares_process.c \ + ares_query.c \ + ares_search.c \ + ares_send.c \ + ares_strcasecmp.c \ + ares_strdup.c \ + ares_strerror.c \ + ares_strsplit.c \ + ares_timeout.c \ + ares_version.c \ + ares_writev.c \ + bitncmp.c \ + inet_net_pton.c \ + inet_ntop.c \ + windows_port.c + +HHEADERS = ares_android.h \ + ares_data.h \ + ares_getenv.h \ + ares_inet_net_pton.h \ + ares_iphlpapi.h \ + ares_ipv6.h \ + ares_library_init.h \ + ares_llist.h \ + ares_nowarn.h \ + ares_platform.h \ + ares_private.h \ + ares_strcasecmp.h \ + ares_strdup.h \ + ares_strsplit.h \ + ares_writev.h \ + bitncmp.h \ + ares_setup.h \ + setup_once.h + + +# Makefile.inc provides the CSOURCES and HHEADERS defines +libcares_la_SOURCES = $(CSOURCES) $(HHEADERS) +all: ares_config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/aminclude_static.am $(srcdir)/Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/lib/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; +$(top_srcdir)/aminclude_static.am $(srcdir)/Makefile.inc $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +ares_config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/ares_config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status src/lib/ares_config.h +$(srcdir)/ares_config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f ares_config.h stamp-h1 + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libcares.la: $(libcares_la_OBJECTS) $(libcares_la_DEPENDENCIES) $(EXTRA_libcares_la_DEPENDENCIES) + $(AM_V_CCLD)$(libcares_la_LINK) -rpath $(libdir) $(libcares_la_OBJECTS) $(libcares_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__close_sockets.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__get_hostent.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__read_line.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__readaddrinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__timeval.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_android.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_cancel.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_create_query.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_data.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_destroy.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_expand_name.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_expand_string.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_fds.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_free_hostent.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_free_string.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_freeaddrinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_getaddrinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_getenv.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_gethostbyname.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_getnameinfo.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_getsock.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_init.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_library_init.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_llist.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_mkquery.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_nowarn.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_options.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_a_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_caa_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_mx_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_naptr_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_ns_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_ptr_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_soa_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_srv_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_txt_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_uri_reply.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_platform.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_process.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_query.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_search.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_send.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strcasecmp.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strdup.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strerror.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strsplit.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_timeout.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_version.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_writev.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-bitncmp.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-inet_net_pton.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-inet_ntop.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-windows_port.Plo@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +libcares_la-ares__addrinfo2hostent.lo: ares__addrinfo2hostent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__addrinfo2hostent.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__addrinfo2hostent.Tpo -c -o libcares_la-ares__addrinfo2hostent.lo `test -f 'ares__addrinfo2hostent.c' || echo '$(srcdir)/'`ares__addrinfo2hostent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__addrinfo2hostent.Tpo $(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__addrinfo2hostent.c' object='libcares_la-ares__addrinfo2hostent.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__addrinfo2hostent.lo `test -f 'ares__addrinfo2hostent.c' || echo '$(srcdir)/'`ares__addrinfo2hostent.c + +libcares_la-ares__addrinfo_localhost.lo: ares__addrinfo_localhost.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__addrinfo_localhost.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__addrinfo_localhost.Tpo -c -o libcares_la-ares__addrinfo_localhost.lo `test -f 'ares__addrinfo_localhost.c' || echo '$(srcdir)/'`ares__addrinfo_localhost.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__addrinfo_localhost.Tpo $(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__addrinfo_localhost.c' object='libcares_la-ares__addrinfo_localhost.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__addrinfo_localhost.lo `test -f 'ares__addrinfo_localhost.c' || echo '$(srcdir)/'`ares__addrinfo_localhost.c + +libcares_la-ares__close_sockets.lo: ares__close_sockets.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__close_sockets.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__close_sockets.Tpo -c -o libcares_la-ares__close_sockets.lo `test -f 'ares__close_sockets.c' || echo '$(srcdir)/'`ares__close_sockets.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__close_sockets.Tpo $(DEPDIR)/libcares_la-ares__close_sockets.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__close_sockets.c' object='libcares_la-ares__close_sockets.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__close_sockets.lo `test -f 'ares__close_sockets.c' || echo '$(srcdir)/'`ares__close_sockets.c + +libcares_la-ares__get_hostent.lo: ares__get_hostent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__get_hostent.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__get_hostent.Tpo -c -o libcares_la-ares__get_hostent.lo `test -f 'ares__get_hostent.c' || echo '$(srcdir)/'`ares__get_hostent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__get_hostent.Tpo $(DEPDIR)/libcares_la-ares__get_hostent.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__get_hostent.c' object='libcares_la-ares__get_hostent.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__get_hostent.lo `test -f 'ares__get_hostent.c' || echo '$(srcdir)/'`ares__get_hostent.c + +libcares_la-ares__parse_into_addrinfo.lo: ares__parse_into_addrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__parse_into_addrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Tpo -c -o libcares_la-ares__parse_into_addrinfo.lo `test -f 'ares__parse_into_addrinfo.c' || echo '$(srcdir)/'`ares__parse_into_addrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Tpo $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__parse_into_addrinfo.c' object='libcares_la-ares__parse_into_addrinfo.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__parse_into_addrinfo.lo `test -f 'ares__parse_into_addrinfo.c' || echo '$(srcdir)/'`ares__parse_into_addrinfo.c + +libcares_la-ares__readaddrinfo.lo: ares__readaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__readaddrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__readaddrinfo.Tpo -c -o libcares_la-ares__readaddrinfo.lo `test -f 'ares__readaddrinfo.c' || echo '$(srcdir)/'`ares__readaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__readaddrinfo.Tpo $(DEPDIR)/libcares_la-ares__readaddrinfo.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__readaddrinfo.c' object='libcares_la-ares__readaddrinfo.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__readaddrinfo.lo `test -f 'ares__readaddrinfo.c' || echo '$(srcdir)/'`ares__readaddrinfo.c + +libcares_la-ares__sortaddrinfo.lo: ares__sortaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__sortaddrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__sortaddrinfo.Tpo -c -o libcares_la-ares__sortaddrinfo.lo `test -f 'ares__sortaddrinfo.c' || echo '$(srcdir)/'`ares__sortaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__sortaddrinfo.Tpo $(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__sortaddrinfo.c' object='libcares_la-ares__sortaddrinfo.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__sortaddrinfo.lo `test -f 'ares__sortaddrinfo.c' || echo '$(srcdir)/'`ares__sortaddrinfo.c + +libcares_la-ares__read_line.lo: ares__read_line.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__read_line.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__read_line.Tpo -c -o libcares_la-ares__read_line.lo `test -f 'ares__read_line.c' || echo '$(srcdir)/'`ares__read_line.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__read_line.Tpo $(DEPDIR)/libcares_la-ares__read_line.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__read_line.c' object='libcares_la-ares__read_line.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__read_line.lo `test -f 'ares__read_line.c' || echo '$(srcdir)/'`ares__read_line.c + +libcares_la-ares__timeval.lo: ares__timeval.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__timeval.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__timeval.Tpo -c -o libcares_la-ares__timeval.lo `test -f 'ares__timeval.c' || echo '$(srcdir)/'`ares__timeval.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__timeval.Tpo $(DEPDIR)/libcares_la-ares__timeval.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__timeval.c' object='libcares_la-ares__timeval.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__timeval.lo `test -f 'ares__timeval.c' || echo '$(srcdir)/'`ares__timeval.c + +libcares_la-ares_android.lo: ares_android.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_android.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_android.Tpo -c -o libcares_la-ares_android.lo `test -f 'ares_android.c' || echo '$(srcdir)/'`ares_android.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_android.Tpo $(DEPDIR)/libcares_la-ares_android.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_android.c' object='libcares_la-ares_android.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_android.lo `test -f 'ares_android.c' || echo '$(srcdir)/'`ares_android.c + +libcares_la-ares_cancel.lo: ares_cancel.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_cancel.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_cancel.Tpo -c -o libcares_la-ares_cancel.lo `test -f 'ares_cancel.c' || echo '$(srcdir)/'`ares_cancel.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_cancel.Tpo $(DEPDIR)/libcares_la-ares_cancel.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_cancel.c' object='libcares_la-ares_cancel.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_cancel.lo `test -f 'ares_cancel.c' || echo '$(srcdir)/'`ares_cancel.c + +libcares_la-ares_data.lo: ares_data.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_data.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_data.Tpo -c -o libcares_la-ares_data.lo `test -f 'ares_data.c' || echo '$(srcdir)/'`ares_data.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_data.Tpo $(DEPDIR)/libcares_la-ares_data.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_data.c' object='libcares_la-ares_data.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_data.lo `test -f 'ares_data.c' || echo '$(srcdir)/'`ares_data.c + +libcares_la-ares_destroy.lo: ares_destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_destroy.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_destroy.Tpo -c -o libcares_la-ares_destroy.lo `test -f 'ares_destroy.c' || echo '$(srcdir)/'`ares_destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_destroy.Tpo $(DEPDIR)/libcares_la-ares_destroy.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_destroy.c' object='libcares_la-ares_destroy.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_destroy.lo `test -f 'ares_destroy.c' || echo '$(srcdir)/'`ares_destroy.c + +libcares_la-ares_expand_name.lo: ares_expand_name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_expand_name.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_expand_name.Tpo -c -o libcares_la-ares_expand_name.lo `test -f 'ares_expand_name.c' || echo '$(srcdir)/'`ares_expand_name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_expand_name.Tpo $(DEPDIR)/libcares_la-ares_expand_name.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_expand_name.c' object='libcares_la-ares_expand_name.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_expand_name.lo `test -f 'ares_expand_name.c' || echo '$(srcdir)/'`ares_expand_name.c + +libcares_la-ares_expand_string.lo: ares_expand_string.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_expand_string.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_expand_string.Tpo -c -o libcares_la-ares_expand_string.lo `test -f 'ares_expand_string.c' || echo '$(srcdir)/'`ares_expand_string.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_expand_string.Tpo $(DEPDIR)/libcares_la-ares_expand_string.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_expand_string.c' object='libcares_la-ares_expand_string.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_expand_string.lo `test -f 'ares_expand_string.c' || echo '$(srcdir)/'`ares_expand_string.c + +libcares_la-ares_fds.lo: ares_fds.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_fds.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_fds.Tpo -c -o libcares_la-ares_fds.lo `test -f 'ares_fds.c' || echo '$(srcdir)/'`ares_fds.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_fds.Tpo $(DEPDIR)/libcares_la-ares_fds.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_fds.c' object='libcares_la-ares_fds.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_fds.lo `test -f 'ares_fds.c' || echo '$(srcdir)/'`ares_fds.c + +libcares_la-ares_free_hostent.lo: ares_free_hostent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_free_hostent.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_free_hostent.Tpo -c -o libcares_la-ares_free_hostent.lo `test -f 'ares_free_hostent.c' || echo '$(srcdir)/'`ares_free_hostent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_free_hostent.Tpo $(DEPDIR)/libcares_la-ares_free_hostent.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_free_hostent.c' object='libcares_la-ares_free_hostent.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_free_hostent.lo `test -f 'ares_free_hostent.c' || echo '$(srcdir)/'`ares_free_hostent.c + +libcares_la-ares_free_string.lo: ares_free_string.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_free_string.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_free_string.Tpo -c -o libcares_la-ares_free_string.lo `test -f 'ares_free_string.c' || echo '$(srcdir)/'`ares_free_string.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_free_string.Tpo $(DEPDIR)/libcares_la-ares_free_string.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_free_string.c' object='libcares_la-ares_free_string.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_free_string.lo `test -f 'ares_free_string.c' || echo '$(srcdir)/'`ares_free_string.c + +libcares_la-ares_freeaddrinfo.lo: ares_freeaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_freeaddrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_freeaddrinfo.Tpo -c -o libcares_la-ares_freeaddrinfo.lo `test -f 'ares_freeaddrinfo.c' || echo '$(srcdir)/'`ares_freeaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_freeaddrinfo.Tpo $(DEPDIR)/libcares_la-ares_freeaddrinfo.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_freeaddrinfo.c' object='libcares_la-ares_freeaddrinfo.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_freeaddrinfo.lo `test -f 'ares_freeaddrinfo.c' || echo '$(srcdir)/'`ares_freeaddrinfo.c + +libcares_la-ares_getaddrinfo.lo: ares_getaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_getaddrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_getaddrinfo.Tpo -c -o libcares_la-ares_getaddrinfo.lo `test -f 'ares_getaddrinfo.c' || echo '$(srcdir)/'`ares_getaddrinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_getaddrinfo.Tpo $(DEPDIR)/libcares_la-ares_getaddrinfo.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getaddrinfo.c' object='libcares_la-ares_getaddrinfo.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_getaddrinfo.lo `test -f 'ares_getaddrinfo.c' || echo '$(srcdir)/'`ares_getaddrinfo.c + +libcares_la-ares_getenv.lo: ares_getenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_getenv.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_getenv.Tpo -c -o libcares_la-ares_getenv.lo `test -f 'ares_getenv.c' || echo '$(srcdir)/'`ares_getenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_getenv.Tpo $(DEPDIR)/libcares_la-ares_getenv.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getenv.c' object='libcares_la-ares_getenv.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_getenv.lo `test -f 'ares_getenv.c' || echo '$(srcdir)/'`ares_getenv.c + +libcares_la-ares_gethostbyaddr.lo: ares_gethostbyaddr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_gethostbyaddr.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_gethostbyaddr.Tpo -c -o libcares_la-ares_gethostbyaddr.lo `test -f 'ares_gethostbyaddr.c' || echo '$(srcdir)/'`ares_gethostbyaddr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_gethostbyaddr.Tpo $(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_gethostbyaddr.c' object='libcares_la-ares_gethostbyaddr.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_gethostbyaddr.lo `test -f 'ares_gethostbyaddr.c' || echo '$(srcdir)/'`ares_gethostbyaddr.c + +libcares_la-ares_gethostbyname.lo: ares_gethostbyname.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_gethostbyname.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_gethostbyname.Tpo -c -o libcares_la-ares_gethostbyname.lo `test -f 'ares_gethostbyname.c' || echo '$(srcdir)/'`ares_gethostbyname.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_gethostbyname.Tpo $(DEPDIR)/libcares_la-ares_gethostbyname.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_gethostbyname.c' object='libcares_la-ares_gethostbyname.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_gethostbyname.lo `test -f 'ares_gethostbyname.c' || echo '$(srcdir)/'`ares_gethostbyname.c + +libcares_la-ares_getnameinfo.lo: ares_getnameinfo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_getnameinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_getnameinfo.Tpo -c -o libcares_la-ares_getnameinfo.lo `test -f 'ares_getnameinfo.c' || echo '$(srcdir)/'`ares_getnameinfo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_getnameinfo.Tpo $(DEPDIR)/libcares_la-ares_getnameinfo.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getnameinfo.c' object='libcares_la-ares_getnameinfo.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_getnameinfo.lo `test -f 'ares_getnameinfo.c' || echo '$(srcdir)/'`ares_getnameinfo.c + +libcares_la-ares_getsock.lo: ares_getsock.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_getsock.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_getsock.Tpo -c -o libcares_la-ares_getsock.lo `test -f 'ares_getsock.c' || echo '$(srcdir)/'`ares_getsock.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_getsock.Tpo $(DEPDIR)/libcares_la-ares_getsock.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getsock.c' object='libcares_la-ares_getsock.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_getsock.lo `test -f 'ares_getsock.c' || echo '$(srcdir)/'`ares_getsock.c + +libcares_la-ares_init.lo: ares_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_init.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_init.Tpo -c -o libcares_la-ares_init.lo `test -f 'ares_init.c' || echo '$(srcdir)/'`ares_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_init.Tpo $(DEPDIR)/libcares_la-ares_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_init.c' object='libcares_la-ares_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_init.lo `test -f 'ares_init.c' || echo '$(srcdir)/'`ares_init.c + +libcares_la-ares_library_init.lo: ares_library_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_library_init.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_library_init.Tpo -c -o libcares_la-ares_library_init.lo `test -f 'ares_library_init.c' || echo '$(srcdir)/'`ares_library_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_library_init.Tpo $(DEPDIR)/libcares_la-ares_library_init.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_library_init.c' object='libcares_la-ares_library_init.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_library_init.lo `test -f 'ares_library_init.c' || echo '$(srcdir)/'`ares_library_init.c + +libcares_la-ares_llist.lo: ares_llist.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_llist.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_llist.Tpo -c -o libcares_la-ares_llist.lo `test -f 'ares_llist.c' || echo '$(srcdir)/'`ares_llist.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_llist.Tpo $(DEPDIR)/libcares_la-ares_llist.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_llist.c' object='libcares_la-ares_llist.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_llist.lo `test -f 'ares_llist.c' || echo '$(srcdir)/'`ares_llist.c + +libcares_la-ares_mkquery.lo: ares_mkquery.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_mkquery.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_mkquery.Tpo -c -o libcares_la-ares_mkquery.lo `test -f 'ares_mkquery.c' || echo '$(srcdir)/'`ares_mkquery.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_mkquery.Tpo $(DEPDIR)/libcares_la-ares_mkquery.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_mkquery.c' object='libcares_la-ares_mkquery.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_mkquery.lo `test -f 'ares_mkquery.c' || echo '$(srcdir)/'`ares_mkquery.c + +libcares_la-ares_create_query.lo: ares_create_query.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_create_query.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_create_query.Tpo -c -o libcares_la-ares_create_query.lo `test -f 'ares_create_query.c' || echo '$(srcdir)/'`ares_create_query.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_create_query.Tpo $(DEPDIR)/libcares_la-ares_create_query.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_create_query.c' object='libcares_la-ares_create_query.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_create_query.lo `test -f 'ares_create_query.c' || echo '$(srcdir)/'`ares_create_query.c + +libcares_la-ares_nowarn.lo: ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_nowarn.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_nowarn.Tpo -c -o libcares_la-ares_nowarn.lo `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_nowarn.Tpo $(DEPDIR)/libcares_la-ares_nowarn.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_nowarn.c' object='libcares_la-ares_nowarn.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_nowarn.lo `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c + +libcares_la-ares_options.lo: ares_options.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_options.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_options.Tpo -c -o libcares_la-ares_options.lo `test -f 'ares_options.c' || echo '$(srcdir)/'`ares_options.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_options.Tpo $(DEPDIR)/libcares_la-ares_options.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_options.c' object='libcares_la-ares_options.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_options.lo `test -f 'ares_options.c' || echo '$(srcdir)/'`ares_options.c + +libcares_la-ares_parse_a_reply.lo: ares_parse_a_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_a_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_a_reply.Tpo -c -o libcares_la-ares_parse_a_reply.lo `test -f 'ares_parse_a_reply.c' || echo '$(srcdir)/'`ares_parse_a_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_a_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_a_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_a_reply.c' object='libcares_la-ares_parse_a_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_a_reply.lo `test -f 'ares_parse_a_reply.c' || echo '$(srcdir)/'`ares_parse_a_reply.c + +libcares_la-ares_parse_aaaa_reply.lo: ares_parse_aaaa_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_aaaa_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Tpo -c -o libcares_la-ares_parse_aaaa_reply.lo `test -f 'ares_parse_aaaa_reply.c' || echo '$(srcdir)/'`ares_parse_aaaa_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_aaaa_reply.c' object='libcares_la-ares_parse_aaaa_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_aaaa_reply.lo `test -f 'ares_parse_aaaa_reply.c' || echo '$(srcdir)/'`ares_parse_aaaa_reply.c + +libcares_la-ares_parse_caa_reply.lo: ares_parse_caa_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_caa_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_caa_reply.Tpo -c -o libcares_la-ares_parse_caa_reply.lo `test -f 'ares_parse_caa_reply.c' || echo '$(srcdir)/'`ares_parse_caa_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_caa_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_caa_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_caa_reply.c' object='libcares_la-ares_parse_caa_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_caa_reply.lo `test -f 'ares_parse_caa_reply.c' || echo '$(srcdir)/'`ares_parse_caa_reply.c + +libcares_la-ares_parse_mx_reply.lo: ares_parse_mx_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_mx_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_mx_reply.Tpo -c -o libcares_la-ares_parse_mx_reply.lo `test -f 'ares_parse_mx_reply.c' || echo '$(srcdir)/'`ares_parse_mx_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_mx_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_mx_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_mx_reply.c' object='libcares_la-ares_parse_mx_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_mx_reply.lo `test -f 'ares_parse_mx_reply.c' || echo '$(srcdir)/'`ares_parse_mx_reply.c + +libcares_la-ares_parse_naptr_reply.lo: ares_parse_naptr_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_naptr_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_naptr_reply.Tpo -c -o libcares_la-ares_parse_naptr_reply.lo `test -f 'ares_parse_naptr_reply.c' || echo '$(srcdir)/'`ares_parse_naptr_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_naptr_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_naptr_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_naptr_reply.c' object='libcares_la-ares_parse_naptr_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_naptr_reply.lo `test -f 'ares_parse_naptr_reply.c' || echo '$(srcdir)/'`ares_parse_naptr_reply.c + +libcares_la-ares_parse_ns_reply.lo: ares_parse_ns_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_ns_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_ns_reply.Tpo -c -o libcares_la-ares_parse_ns_reply.lo `test -f 'ares_parse_ns_reply.c' || echo '$(srcdir)/'`ares_parse_ns_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_ns_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_ns_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_ns_reply.c' object='libcares_la-ares_parse_ns_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_ns_reply.lo `test -f 'ares_parse_ns_reply.c' || echo '$(srcdir)/'`ares_parse_ns_reply.c + +libcares_la-ares_parse_ptr_reply.lo: ares_parse_ptr_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_ptr_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_ptr_reply.Tpo -c -o libcares_la-ares_parse_ptr_reply.lo `test -f 'ares_parse_ptr_reply.c' || echo '$(srcdir)/'`ares_parse_ptr_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_ptr_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_ptr_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_ptr_reply.c' object='libcares_la-ares_parse_ptr_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_ptr_reply.lo `test -f 'ares_parse_ptr_reply.c' || echo '$(srcdir)/'`ares_parse_ptr_reply.c + +libcares_la-ares_parse_soa_reply.lo: ares_parse_soa_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_soa_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_soa_reply.Tpo -c -o libcares_la-ares_parse_soa_reply.lo `test -f 'ares_parse_soa_reply.c' || echo '$(srcdir)/'`ares_parse_soa_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_soa_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_soa_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_soa_reply.c' object='libcares_la-ares_parse_soa_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_soa_reply.lo `test -f 'ares_parse_soa_reply.c' || echo '$(srcdir)/'`ares_parse_soa_reply.c + +libcares_la-ares_parse_srv_reply.lo: ares_parse_srv_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_srv_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_srv_reply.Tpo -c -o libcares_la-ares_parse_srv_reply.lo `test -f 'ares_parse_srv_reply.c' || echo '$(srcdir)/'`ares_parse_srv_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_srv_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_srv_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_srv_reply.c' object='libcares_la-ares_parse_srv_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_srv_reply.lo `test -f 'ares_parse_srv_reply.c' || echo '$(srcdir)/'`ares_parse_srv_reply.c + +libcares_la-ares_parse_txt_reply.lo: ares_parse_txt_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_txt_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_txt_reply.Tpo -c -o libcares_la-ares_parse_txt_reply.lo `test -f 'ares_parse_txt_reply.c' || echo '$(srcdir)/'`ares_parse_txt_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_txt_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_txt_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_txt_reply.c' object='libcares_la-ares_parse_txt_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_txt_reply.lo `test -f 'ares_parse_txt_reply.c' || echo '$(srcdir)/'`ares_parse_txt_reply.c + +libcares_la-ares_parse_uri_reply.lo: ares_parse_uri_reply.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_parse_uri_reply.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_parse_uri_reply.Tpo -c -o libcares_la-ares_parse_uri_reply.lo `test -f 'ares_parse_uri_reply.c' || echo '$(srcdir)/'`ares_parse_uri_reply.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_parse_uri_reply.Tpo $(DEPDIR)/libcares_la-ares_parse_uri_reply.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_parse_uri_reply.c' object='libcares_la-ares_parse_uri_reply.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_parse_uri_reply.lo `test -f 'ares_parse_uri_reply.c' || echo '$(srcdir)/'`ares_parse_uri_reply.c + +libcares_la-ares_platform.lo: ares_platform.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_platform.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_platform.Tpo -c -o libcares_la-ares_platform.lo `test -f 'ares_platform.c' || echo '$(srcdir)/'`ares_platform.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_platform.Tpo $(DEPDIR)/libcares_la-ares_platform.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_platform.c' object='libcares_la-ares_platform.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_platform.lo `test -f 'ares_platform.c' || echo '$(srcdir)/'`ares_platform.c + +libcares_la-ares_process.lo: ares_process.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_process.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_process.Tpo -c -o libcares_la-ares_process.lo `test -f 'ares_process.c' || echo '$(srcdir)/'`ares_process.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_process.Tpo $(DEPDIR)/libcares_la-ares_process.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_process.c' object='libcares_la-ares_process.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_process.lo `test -f 'ares_process.c' || echo '$(srcdir)/'`ares_process.c + +libcares_la-ares_query.lo: ares_query.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_query.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_query.Tpo -c -o libcares_la-ares_query.lo `test -f 'ares_query.c' || echo '$(srcdir)/'`ares_query.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_query.Tpo $(DEPDIR)/libcares_la-ares_query.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_query.c' object='libcares_la-ares_query.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_query.lo `test -f 'ares_query.c' || echo '$(srcdir)/'`ares_query.c + +libcares_la-ares_search.lo: ares_search.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_search.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_search.Tpo -c -o libcares_la-ares_search.lo `test -f 'ares_search.c' || echo '$(srcdir)/'`ares_search.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_search.Tpo $(DEPDIR)/libcares_la-ares_search.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_search.c' object='libcares_la-ares_search.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_search.lo `test -f 'ares_search.c' || echo '$(srcdir)/'`ares_search.c + +libcares_la-ares_send.lo: ares_send.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_send.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_send.Tpo -c -o libcares_la-ares_send.lo `test -f 'ares_send.c' || echo '$(srcdir)/'`ares_send.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_send.Tpo $(DEPDIR)/libcares_la-ares_send.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_send.c' object='libcares_la-ares_send.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_send.lo `test -f 'ares_send.c' || echo '$(srcdir)/'`ares_send.c + +libcares_la-ares_strcasecmp.lo: ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_strcasecmp.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_strcasecmp.Tpo -c -o libcares_la-ares_strcasecmp.lo `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_strcasecmp.Tpo $(DEPDIR)/libcares_la-ares_strcasecmp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_strcasecmp.c' object='libcares_la-ares_strcasecmp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_strcasecmp.lo `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c + +libcares_la-ares_strdup.lo: ares_strdup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_strdup.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_strdup.Tpo -c -o libcares_la-ares_strdup.lo `test -f 'ares_strdup.c' || echo '$(srcdir)/'`ares_strdup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_strdup.Tpo $(DEPDIR)/libcares_la-ares_strdup.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_strdup.c' object='libcares_la-ares_strdup.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_strdup.lo `test -f 'ares_strdup.c' || echo '$(srcdir)/'`ares_strdup.c + +libcares_la-ares_strerror.lo: ares_strerror.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_strerror.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_strerror.Tpo -c -o libcares_la-ares_strerror.lo `test -f 'ares_strerror.c' || echo '$(srcdir)/'`ares_strerror.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_strerror.Tpo $(DEPDIR)/libcares_la-ares_strerror.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_strerror.c' object='libcares_la-ares_strerror.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_strerror.lo `test -f 'ares_strerror.c' || echo '$(srcdir)/'`ares_strerror.c + +libcares_la-ares_strsplit.lo: ares_strsplit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_strsplit.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_strsplit.Tpo -c -o libcares_la-ares_strsplit.lo `test -f 'ares_strsplit.c' || echo '$(srcdir)/'`ares_strsplit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_strsplit.Tpo $(DEPDIR)/libcares_la-ares_strsplit.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_strsplit.c' object='libcares_la-ares_strsplit.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_strsplit.lo `test -f 'ares_strsplit.c' || echo '$(srcdir)/'`ares_strsplit.c + +libcares_la-ares_timeout.lo: ares_timeout.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_timeout.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_timeout.Tpo -c -o libcares_la-ares_timeout.lo `test -f 'ares_timeout.c' || echo '$(srcdir)/'`ares_timeout.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_timeout.Tpo $(DEPDIR)/libcares_la-ares_timeout.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_timeout.c' object='libcares_la-ares_timeout.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_timeout.lo `test -f 'ares_timeout.c' || echo '$(srcdir)/'`ares_timeout.c + +libcares_la-ares_version.lo: ares_version.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_version.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_version.Tpo -c -o libcares_la-ares_version.lo `test -f 'ares_version.c' || echo '$(srcdir)/'`ares_version.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_version.Tpo $(DEPDIR)/libcares_la-ares_version.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_version.c' object='libcares_la-ares_version.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_version.lo `test -f 'ares_version.c' || echo '$(srcdir)/'`ares_version.c + +libcares_la-ares_writev.lo: ares_writev.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_writev.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_writev.Tpo -c -o libcares_la-ares_writev.lo `test -f 'ares_writev.c' || echo '$(srcdir)/'`ares_writev.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_writev.Tpo $(DEPDIR)/libcares_la-ares_writev.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_writev.c' object='libcares_la-ares_writev.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_writev.lo `test -f 'ares_writev.c' || echo '$(srcdir)/'`ares_writev.c + +libcares_la-bitncmp.lo: bitncmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-bitncmp.lo -MD -MP -MF $(DEPDIR)/libcares_la-bitncmp.Tpo -c -o libcares_la-bitncmp.lo `test -f 'bitncmp.c' || echo '$(srcdir)/'`bitncmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-bitncmp.Tpo $(DEPDIR)/libcares_la-bitncmp.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bitncmp.c' object='libcares_la-bitncmp.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-bitncmp.lo `test -f 'bitncmp.c' || echo '$(srcdir)/'`bitncmp.c + +libcares_la-inet_net_pton.lo: inet_net_pton.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-inet_net_pton.lo -MD -MP -MF $(DEPDIR)/libcares_la-inet_net_pton.Tpo -c -o libcares_la-inet_net_pton.lo `test -f 'inet_net_pton.c' || echo '$(srcdir)/'`inet_net_pton.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-inet_net_pton.Tpo $(DEPDIR)/libcares_la-inet_net_pton.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inet_net_pton.c' object='libcares_la-inet_net_pton.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-inet_net_pton.lo `test -f 'inet_net_pton.c' || echo '$(srcdir)/'`inet_net_pton.c + +libcares_la-inet_ntop.lo: inet_ntop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-inet_ntop.lo -MD -MP -MF $(DEPDIR)/libcares_la-inet_ntop.Tpo -c -o libcares_la-inet_ntop.lo `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-inet_ntop.Tpo $(DEPDIR)/libcares_la-inet_ntop.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='inet_ntop.c' object='libcares_la-inet_ntop.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-inet_ntop.lo `test -f 'inet_ntop.c' || echo '$(srcdir)/'`inet_ntop.c + +libcares_la-windows_port.lo: windows_port.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-windows_port.lo -MD -MP -MF $(DEPDIR)/libcares_la-windows_port.Tpo -c -o libcares_la-windows_port.lo `test -f 'windows_port.c' || echo '$(srcdir)/'`windows_port.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-windows_port.Tpo $(DEPDIR)/libcares_la-windows_port.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows_port.c' object='libcares_la-windows_port.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-windows_port.lo `test -f 'windows_port.c' || echo '$(srcdir)/'`windows_port.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) ares_config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__close_sockets.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__get_hostent.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__read_line.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__readaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__timeval.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_android.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_cancel.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_create_query.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_data.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_destroy.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_expand_name.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_expand_string.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_fds.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_free_hostent.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_free_string.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_freeaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_getaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_getenv.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_gethostbyname.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_getnameinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_getsock.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_init.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_library_init.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_llist.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_mkquery.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_nowarn.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_options.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_a_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_caa_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_mx_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_naptr_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_ns_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_ptr_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_soa_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_srv_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_txt_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_uri_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_platform.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_process.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_query.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_search.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_send.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_strcasecmp.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_strdup.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_strerror.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_strsplit.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_timeout.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_version.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_writev.Plo + -rm -f ./$(DEPDIR)/libcares_la-bitncmp.Plo + -rm -f ./$(DEPDIR)/libcares_la-inet_net_pton.Plo + -rm -f ./$(DEPDIR)/libcares_la-inet_ntop.Plo + -rm -f ./$(DEPDIR)/libcares_la-windows_port.Plo + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__close_sockets.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__get_hostent.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__read_line.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__readaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares__timeval.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_android.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_cancel.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_create_query.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_data.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_destroy.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_expand_name.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_expand_string.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_fds.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_free_hostent.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_free_string.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_freeaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_getaddrinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_getenv.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_gethostbyaddr.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_gethostbyname.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_getnameinfo.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_getsock.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_init.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_library_init.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_llist.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_mkquery.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_nowarn.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_options.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_a_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_caa_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_mx_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_naptr_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_ns_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_ptr_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_soa_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_srv_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_txt_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_parse_uri_reply.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_platform.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_process.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_query.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_search.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_send.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_strcasecmp.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_strdup.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_strerror.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_strsplit.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_timeout.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_version.Plo + -rm -f ./$(DEPDIR)/libcares_la-ares_writev.Plo + -rm -f ./$(DEPDIR)/libcares_la-bitncmp.Plo + -rm -f ./$(DEPDIR)/libcares_la-inet_net_pton.Plo + -rm -f ./$(DEPDIR)/libcares_la-inet_ntop.Plo + -rm -f ./$(DEPDIR)/libcares_la-windows_port.Plo + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--depfiles check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +# Code coverage +# +# Optional: +# - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting. +# Multiple directories may be specified, separated by whitespace. +# (Default: $(top_builddir)) +# - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated +# by lcov for code coverage. (Default: +# $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info) +# - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage +# reports to be created. (Default: +# $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage) +# - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage, +# set to 0 to disable it and leave empty to stay with the default. +# (Default: empty) +# - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov +# instances. (Default: based on ) +# - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov +# instances. (Default: ) +# - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov +# - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the +# collecting lcov instance. (Default: ) +# - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov +# instance. (Default: ) +# - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering +# lcov instance. (Default: empty) +# - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov +# instance. (Default: ) +# - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the +# genhtml instance. (Default: based on ) +# - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml +# instance. (Default: ) +# - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore +# +# The generated report will be titled using the $(PACKAGE_NAME) and +# $(PACKAGE_VERSION). In order to add the current git hash to the title, +# use the git-version-gen script, available online. +# Optional variables +# run only on top dir +@CODE_COVERAGE_ENABLED_TRUE@ ifeq ($(abs_builddir), $(abs_top_builddir)) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_DIRECTORY ?= $(top_builddir) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage + +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_BRANCH_COVERAGE ?= +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)" +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?= +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=$(if $(CODE_COVERAGE_BRANCH_COVERAGE),--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE)) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT) +@CODE_COVERAGE_ENABLED_TRUE@CODE_COVERAGE_IGNORE_PATTERN ?= + +# Use recursive makes in order to ignore errors during check +@CODE_COVERAGE_ENABLED_TRUE@check-code-coverage: +@CODE_COVERAGE_ENABLED_TRUE@ -$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check +@CODE_COVERAGE_ENABLED_TRUE@ $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture + +# Capture code coverage data +@CODE_COVERAGE_ENABLED_TRUE@code-coverage-capture: code-coverage-capture-hook +@CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS) +@CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS) +@CODE_COVERAGE_ENABLED_TRUE@ -@rm -f "$(CODE_COVERAGE_OUTPUT_FILE).tmp" +@CODE_COVERAGE_ENABLED_TRUE@ $(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS) +@CODE_COVERAGE_ENABLED_TRUE@ @echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html" + +@CODE_COVERAGE_ENABLED_TRUE@code-coverage-clean: +@CODE_COVERAGE_ENABLED_TRUE@ -$(LCOV) --directory $(top_builddir) -z +@CODE_COVERAGE_ENABLED_TRUE@ -rm -rf "$(CODE_COVERAGE_OUTPUT_FILE)" "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" +@CODE_COVERAGE_ENABLED_TRUE@ -find . \( -name "*.gcda" -o -name "*.gcno" -o -name "*.gcov" \) -delete + +@CODE_COVERAGE_ENABLED_TRUE@code-coverage-dist-clean: +@CODE_COVERAGE_ENABLED_TRUE@ else # ifneq ($(abs_builddir), $(abs_top_builddir)) +@CODE_COVERAGE_ENABLED_TRUE@check-code-coverage: + +@CODE_COVERAGE_ENABLED_TRUE@code-coverage-capture: code-coverage-capture-hook + +@CODE_COVERAGE_ENABLED_TRUE@code-coverage-clean: + +@CODE_COVERAGE_ENABLED_TRUE@code-coverage-dist-clean: +@CODE_COVERAGE_ENABLED_TRUE@ endif # ifeq ($(abs_builddir), $(abs_top_builddir)) +# Use recursive makes in order to ignore errors during check +@CODE_COVERAGE_ENABLED_FALSE@check-code-coverage: +@CODE_COVERAGE_ENABLED_FALSE@ @echo "Need to reconfigure with --enable-code-coverage" +# Capture code coverage data +@CODE_COVERAGE_ENABLED_FALSE@code-coverage-capture: code-coverage-capture-hook +@CODE_COVERAGE_ENABLED_FALSE@ @echo "Need to reconfigure with --enable-code-coverage" + +@CODE_COVERAGE_ENABLED_FALSE@code-coverage-clean: + +@CODE_COVERAGE_ENABLED_FALSE@code-coverage-dist-clean: + +# Hook rule executed before code-coverage-capture, overridable by the user +code-coverage-capture-hook: + +.PHONY: check-code-coverage code-coverage-capture code-coverage-dist-clean code-coverage-clean code-coverage-capture-hook + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/Makefile.inc nodejs-mozilla-12.22.12/deps/cares/src/lib/Makefile.inc --- nodejs-mozilla-12.18.1/deps/cares/src/lib/Makefile.inc 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/Makefile.inc 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,81 @@ + +CSOURCES = ares__addrinfo2hostent.c \ + ares__addrinfo_localhost.c \ + ares__close_sockets.c \ + ares__get_hostent.c \ + ares__parse_into_addrinfo.c \ + ares__readaddrinfo.c \ + ares__sortaddrinfo.c \ + ares__read_line.c \ + ares__timeval.c \ + ares_android.c \ + ares_cancel.c \ + ares_data.c \ + ares_destroy.c \ + ares_expand_name.c \ + ares_expand_string.c \ + ares_fds.c \ + ares_free_hostent.c \ + ares_free_string.c \ + ares_freeaddrinfo.c \ + ares_getaddrinfo.c \ + ares_getenv.c \ + ares_gethostbyaddr.c \ + ares_gethostbyname.c \ + ares_getnameinfo.c \ + ares_getsock.c \ + ares_init.c \ + ares_library_init.c \ + ares_llist.c \ + ares_mkquery.c \ + ares_create_query.c \ + ares_nowarn.c \ + ares_options.c \ + ares_parse_a_reply.c \ + ares_parse_aaaa_reply.c \ + ares_parse_caa_reply.c \ + ares_parse_mx_reply.c \ + ares_parse_naptr_reply.c \ + ares_parse_ns_reply.c \ + ares_parse_ptr_reply.c \ + ares_parse_soa_reply.c \ + ares_parse_srv_reply.c \ + ares_parse_txt_reply.c \ + ares_parse_uri_reply.c \ + ares_platform.c \ + ares_process.c \ + ares_query.c \ + ares_search.c \ + ares_send.c \ + ares_strcasecmp.c \ + ares_strdup.c \ + ares_strerror.c \ + ares_strsplit.c \ + ares_timeout.c \ + ares_version.c \ + ares_writev.c \ + bitncmp.c \ + inet_net_pton.c \ + inet_ntop.c \ + windows_port.c + +HHEADERS = ares_android.h \ + ares_data.h \ + ares_getenv.h \ + ares_inet_net_pton.h \ + ares_iphlpapi.h \ + ares_ipv6.h \ + ares_library_init.h \ + ares_llist.h \ + ares_nowarn.h \ + ares_platform.h \ + ares_private.h \ + ares_strcasecmp.h \ + ares_strdup.h \ + ares_strsplit.h \ + ares_writev.h \ + bitncmp.h \ + ares_setup.h \ + setup_once.h + + diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/setup_once.h nodejs-mozilla-12.22.12/deps/cares/src/lib/setup_once.h --- nodejs-mozilla-12.18.1/deps/cares/src/lib/setup_once.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/setup_once.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,554 @@ +#ifndef __SETUP_ONCE_H +#define __SETUP_ONCE_H + + +/* Copyright (C) 2004 - 2013 by Daniel Stenberg et al + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. M.I.T. makes no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +/******************************************************************** + * NOTICE * + * ======== * + * * + * Content of header files lib/setup_once.h and ares/setup_once.h * + * must be kept in sync. Modify the other one if you change this. * + * * + ********************************************************************/ + + +/* + * Inclusion of common header files. + */ + +#include +#include +#include +#include +#include + +#ifdef HAVE_ERRNO_H +#include +#endif + +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#ifdef NEED_MALLOC_H +#include +#endif + +#ifdef NEED_MEMORY_H +#include +#endif + +#ifdef HAVE_SYS_STAT_H +#include +#endif + +#ifdef HAVE_SYS_TIME_H +#include +#ifdef TIME_WITH_SYS_TIME +#include +#endif +#else +#ifdef HAVE_TIME_H +#include +#endif +#endif + +#ifdef WIN32 +#include +#include +#endif + +#if defined(HAVE_STDBOOL_H) && defined(HAVE_BOOL_T) +#include +#endif + +#ifdef HAVE_UNISTD_H +#include +#endif + +#ifdef __hpux +# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) +# ifdef _APP32_64BIT_OFF_T +# define OLD_APP32_64BIT_OFF_T _APP32_64BIT_OFF_T +# undef _APP32_64BIT_OFF_T +# else +# undef OLD_APP32_64BIT_OFF_T +# endif +# endif +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + +#ifdef __hpux +# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) +# ifdef OLD_APP32_64BIT_OFF_T +# define _APP32_64BIT_OFF_T OLD_APP32_64BIT_OFF_T +# undef OLD_APP32_64BIT_OFF_T +# endif +# endif +#endif + + +/* + * Definition of timeval struct for platforms that don't have it. + */ + +#ifndef HAVE_STRUCT_TIMEVAL +struct timeval { + long tv_sec; + long tv_usec; +}; +#endif + + +/* + * If we have the MSG_NOSIGNAL define, make sure we use + * it as the fourth argument of function send() + */ + +#ifdef HAVE_MSG_NOSIGNAL +#define SEND_4TH_ARG MSG_NOSIGNAL +#else +#define SEND_4TH_ARG 0 +#endif + + +#if defined(__minix) +/* Minix doesn't support recv on TCP sockets */ +#define sread(x,y,z) (ares_ssize_t)read((RECV_TYPE_ARG1)(x), \ + (RECV_TYPE_ARG2)(y), \ + (RECV_TYPE_ARG3)(z)) + +#elif defined(HAVE_RECV) +/* + * The definitions for the return type and arguments types + * of functions recv() and send() belong and come from the + * configuration file. Do not define them in any other place. + * + * HAVE_RECV is defined if you have a function named recv() + * which is used to read incoming data from sockets. If your + * function has another name then don't define HAVE_RECV. + * + * If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2, + * RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also + * be defined. + * + * HAVE_SEND is defined if you have a function named send() + * which is used to write outgoing data on a connected socket. + * If yours has another name then don't define HAVE_SEND. + * + * If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2, + * SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and + * SEND_TYPE_RETV must also be defined. + */ + +#if !defined(RECV_TYPE_ARG1) || \ + !defined(RECV_TYPE_ARG2) || \ + !defined(RECV_TYPE_ARG3) || \ + !defined(RECV_TYPE_ARG4) || \ + !defined(RECV_TYPE_RETV) + /* */ + Error Missing_definition_of_return_and_arguments_types_of_recv + /* */ +#else +#define sread(x,y,z) (ares_ssize_t)recv((RECV_TYPE_ARG1)(x), \ + (RECV_TYPE_ARG2)(y), \ + (RECV_TYPE_ARG3)(z), \ + (RECV_TYPE_ARG4)(0)) +#endif +#else /* HAVE_RECV */ +#ifndef sread + /* */ + Error Missing_definition_of_macro_sread + /* */ +#endif +#endif /* HAVE_RECV */ + + +#if defined(__minix) +/* Minix doesn't support send on TCP sockets */ +#define swrite(x,y,z) (ares_ssize_t)write((SEND_TYPE_ARG1)(x), \ + (SEND_TYPE_ARG2)(y), \ + (SEND_TYPE_ARG3)(z)) + +#elif defined(HAVE_SEND) +#if !defined(SEND_TYPE_ARG1) || \ + !defined(SEND_QUAL_ARG2) || \ + !defined(SEND_TYPE_ARG2) || \ + !defined(SEND_TYPE_ARG3) || \ + !defined(SEND_TYPE_ARG4) || \ + !defined(SEND_TYPE_RETV) + /* */ + Error Missing_definition_of_return_and_arguments_types_of_send + /* */ +#else +#define swrite(x,y,z) (ares_ssize_t)send((SEND_TYPE_ARG1)(x), \ + (SEND_TYPE_ARG2)(y), \ + (SEND_TYPE_ARG3)(z), \ + (SEND_TYPE_ARG4)(SEND_4TH_ARG)) +#endif +#else /* HAVE_SEND */ +#ifndef swrite + /* */ + Error Missing_definition_of_macro_swrite + /* */ +#endif +#endif /* HAVE_SEND */ + + +#if 0 +#if defined(HAVE_RECVFROM) +/* + * Currently recvfrom is only used on udp sockets. + */ +#if !defined(RECVFROM_TYPE_ARG1) || \ + !defined(RECVFROM_TYPE_ARG2) || \ + !defined(RECVFROM_TYPE_ARG3) || \ + !defined(RECVFROM_TYPE_ARG4) || \ + !defined(RECVFROM_TYPE_ARG5) || \ + !defined(RECVFROM_TYPE_ARG6) || \ + !defined(RECVFROM_TYPE_RETV) + /* */ + Error Missing_definition_of_return_and_arguments_types_of_recvfrom + /* */ +#else +#define sreadfrom(s,b,bl,f,fl) (ares_ssize_t)recvfrom((RECVFROM_TYPE_ARG1) (s), \ + (RECVFROM_TYPE_ARG2 *)(b), \ + (RECVFROM_TYPE_ARG3) (bl), \ + (RECVFROM_TYPE_ARG4) (0), \ + (RECVFROM_TYPE_ARG5 *)(f), \ + (RECVFROM_TYPE_ARG6 *)(fl)) +#endif +#else /* HAVE_RECVFROM */ +#ifndef sreadfrom + /* */ + Error Missing_definition_of_macro_sreadfrom + /* */ +#endif +#endif /* HAVE_RECVFROM */ + + +#ifdef RECVFROM_TYPE_ARG6_IS_VOID +# define RECVFROM_ARG6_T int +#else +# define RECVFROM_ARG6_T RECVFROM_TYPE_ARG6 +#endif +#endif /* if 0 */ + + +/* + * Function-like macro definition used to close a socket. + */ + +#if defined(HAVE_CLOSESOCKET) +# define sclose(x) closesocket((x)) +#elif defined(HAVE_CLOSESOCKET_CAMEL) +# define sclose(x) CloseSocket((x)) +#elif defined(HAVE_CLOSE_S) +# define sclose(x) close_s((x)) +#else +# define sclose(x) close((x)) +#endif + + +/* + * Uppercase macro versions of ANSI/ISO is*() functions/macros which + * avoid negative number inputs with argument byte codes > 127. + */ + +#define ISSPACE(x) (isspace((int) ((unsigned char)x))) +#define ISDIGIT(x) (isdigit((int) ((unsigned char)x))) +#define ISALNUM(x) (isalnum((int) ((unsigned char)x))) +#define ISXDIGIT(x) (isxdigit((int) ((unsigned char)x))) +#define ISGRAPH(x) (isgraph((int) ((unsigned char)x))) +#define ISALPHA(x) (isalpha((int) ((unsigned char)x))) +#define ISPRINT(x) (isprint((int) ((unsigned char)x))) +#define ISUPPER(x) (isupper((int) ((unsigned char)x))) +#define ISLOWER(x) (islower((int) ((unsigned char)x))) +#define ISASCII(x) (isascii((int) ((unsigned char)x))) + +#define ISBLANK(x) (int)((((unsigned char)x) == ' ') || \ + (((unsigned char)x) == '\t')) + +#define TOLOWER(x) (tolower((int) ((unsigned char)x))) + + +/* + * 'bool' stuff compatible with HP-UX headers. + */ + +#if defined(__hpux) && !defined(HAVE_BOOL_T) + typedef int bool; +# define false 0 +# define true 1 +# define HAVE_BOOL_T +#endif + + +/* + * 'bool' exists on platforms with , i.e. C99 platforms. + * On non-C99 platforms there's no bool, so define an enum for that. + * On C99 platforms 'false' and 'true' also exist. Enum uses a + * global namespace though, so use bool_false and bool_true. + */ + +#ifndef HAVE_BOOL_T + typedef enum { + bool_false = 0, + bool_true = 1 + } bool; + +/* + * Use a define to let 'true' and 'false' use those enums. There + * are currently no use of true and false in libcurl proper, but + * there are some in the examples. This will cater for any later + * code happening to use true and false. + */ +# define false bool_false +# define true bool_true +# define HAVE_BOOL_T +#endif + + +/* + * Redefine TRUE and FALSE too, to catch current use. With this + * change, 'bool found = 1' will give a warning on MIPSPro, but + * 'bool found = TRUE' will not. Change tested on IRIX/MIPSPro, + * AIX 5.1/Xlc, Tru64 5.1/cc, w/make test too. + */ + +#ifndef TRUE +#define TRUE true +#endif +#ifndef FALSE +#define FALSE false +#endif + + +/* + * Macro WHILE_FALSE may be used to build single-iteration do-while loops, + * avoiding compiler warnings. Mostly intended for other macro definitions. + */ + +#define WHILE_FALSE while(0) + +#if defined(_MSC_VER) && !defined(__POCC__) +# undef WHILE_FALSE +# if (_MSC_VER < 1500) +# define WHILE_FALSE while(1, 0) +# else +# define WHILE_FALSE \ +__pragma(warning(push)) \ +__pragma(warning(disable:4127)) \ +while(0) \ +__pragma(warning(pop)) +# endif +#endif + + +/* + * Typedef to 'int' if sig_atomic_t is not an available 'typedefed' type. + */ + +#ifndef HAVE_SIG_ATOMIC_T +typedef int sig_atomic_t; +#define HAVE_SIG_ATOMIC_T +#endif + + +/* + * Convenience SIG_ATOMIC_T definition + */ + +#ifdef HAVE_SIG_ATOMIC_T_VOLATILE +#define SIG_ATOMIC_T static sig_atomic_t +#else +#define SIG_ATOMIC_T static volatile sig_atomic_t +#endif + + +/* + * Default return type for signal handlers. + */ + +#ifndef RETSIGTYPE +#define RETSIGTYPE void +#endif + + +/* + * Macro used to include code only in debug builds. + */ + +#ifdef DEBUGBUILD +#define DEBUGF(x) x +#else +#define DEBUGF(x) do { } WHILE_FALSE +#endif + + +/* + * Macro used to include assertion code only in debug builds. + */ + +#if defined(DEBUGBUILD) && defined(HAVE_ASSERT_H) +#define DEBUGASSERT(x) assert(x) +#else +#define DEBUGASSERT(x) do { } WHILE_FALSE +#endif + + +/* + * Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno + * (or equivalent) on this platform to hide platform details to code using it. + */ + +#ifdef USE_WINSOCK +#define SOCKERRNO ((int)WSAGetLastError()) +#define SET_SOCKERRNO(x) (WSASetLastError((int)(x))) +#else +#define SOCKERRNO (errno) +#define SET_SOCKERRNO(x) (errno = (x)) +#endif + + +/* + * Macro ERRNO / SET_ERRNO() returns / sets the NOT *socket-related* errno + * (or equivalent) on this platform to hide platform details to code using it. + */ + +#if defined(WIN32) && !defined(WATT32) +#define ERRNO ((int)GetLastError()) +#define SET_ERRNO(x) (SetLastError((DWORD)(x))) +#else +#define ERRNO (errno) +#define SET_ERRNO(x) (errno = (x)) +#endif + + +/* + * Portable error number symbolic names defined to Winsock error codes. + */ + +#ifdef USE_WINSOCK +#undef EBADF /* override definition in errno.h */ +#define EBADF WSAEBADF +#undef EINTR /* override definition in errno.h */ +#define EINTR WSAEINTR +#undef EINVAL /* override definition in errno.h */ +#define EINVAL WSAEINVAL +#undef EWOULDBLOCK /* override definition in errno.h */ +#define EWOULDBLOCK WSAEWOULDBLOCK +#undef EINPROGRESS /* override definition in errno.h */ +#define EINPROGRESS WSAEINPROGRESS +#undef EALREADY /* override definition in errno.h */ +#define EALREADY WSAEALREADY +#undef ENOTSOCK /* override definition in errno.h */ +#define ENOTSOCK WSAENOTSOCK +#undef EDESTADDRREQ /* override definition in errno.h */ +#define EDESTADDRREQ WSAEDESTADDRREQ +#undef EMSGSIZE /* override definition in errno.h */ +#define EMSGSIZE WSAEMSGSIZE +#undef EPROTOTYPE /* override definition in errno.h */ +#define EPROTOTYPE WSAEPROTOTYPE +#undef ENOPROTOOPT /* override definition in errno.h */ +#define ENOPROTOOPT WSAENOPROTOOPT +#undef EPROTONOSUPPORT /* override definition in errno.h */ +#define EPROTONOSUPPORT WSAEPROTONOSUPPORT +#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT +#undef EOPNOTSUPP /* override definition in errno.h */ +#define EOPNOTSUPP WSAEOPNOTSUPP +#define EPFNOSUPPORT WSAEPFNOSUPPORT +#undef EAFNOSUPPORT /* override definition in errno.h */ +#define EAFNOSUPPORT WSAEAFNOSUPPORT +#undef EADDRINUSE /* override definition in errno.h */ +#define EADDRINUSE WSAEADDRINUSE +#undef EADDRNOTAVAIL /* override definition in errno.h */ +#define EADDRNOTAVAIL WSAEADDRNOTAVAIL +#undef ENETDOWN /* override definition in errno.h */ +#define ENETDOWN WSAENETDOWN +#undef ENETUNREACH /* override definition in errno.h */ +#define ENETUNREACH WSAENETUNREACH +#undef ENETRESET /* override definition in errno.h */ +#define ENETRESET WSAENETRESET +#undef ECONNABORTED /* override definition in errno.h */ +#define ECONNABORTED WSAECONNABORTED +#undef ECONNRESET /* override definition in errno.h */ +#define ECONNRESET WSAECONNRESET +#undef ENOBUFS /* override definition in errno.h */ +#define ENOBUFS WSAENOBUFS +#undef EISCONN /* override definition in errno.h */ +#define EISCONN WSAEISCONN +#undef ENOTCONN /* override definition in errno.h */ +#define ENOTCONN WSAENOTCONN +#define ESHUTDOWN WSAESHUTDOWN +#define ETOOMANYREFS WSAETOOMANYREFS +#undef ETIMEDOUT /* override definition in errno.h */ +#define ETIMEDOUT WSAETIMEDOUT +#undef ECONNREFUSED /* override definition in errno.h */ +#define ECONNREFUSED WSAECONNREFUSED +#undef ELOOP /* override definition in errno.h */ +#define ELOOP WSAELOOP +#ifndef ENAMETOOLONG /* possible previous definition in errno.h */ +#define ENAMETOOLONG WSAENAMETOOLONG +#endif +#define EHOSTDOWN WSAEHOSTDOWN +#undef EHOSTUNREACH /* override definition in errno.h */ +#define EHOSTUNREACH WSAEHOSTUNREACH +#ifndef ENOTEMPTY /* possible previous definition in errno.h */ +#define ENOTEMPTY WSAENOTEMPTY +#endif +#define EPROCLIM WSAEPROCLIM +#define EUSERS WSAEUSERS +#define EDQUOT WSAEDQUOT +#define ESTALE WSAESTALE +#define EREMOTE WSAEREMOTE +#endif + + +/* + * Actually use __32_getpwuid() on 64-bit VMS builds for getpwuid() + */ + +#if defined(__VMS) && \ + defined(__INITIAL_POINTER_SIZE) && (__INITIAL_POINTER_SIZE == 64) +#define getpwuid __32_getpwuid +#endif + + +/* + * Macro argv_item_t hides platform details to code using it. + */ + +#ifdef __VMS +#define argv_item_t __char_ptr32 +#else +#define argv_item_t char * +#endif + + +/* + * We use this ZERO_NULL to avoid picky compiler warnings, + * when assigning a NULL pointer to a function pointer var. + */ + +#define ZERO_NULL 0 + + +#endif /* __SETUP_ONCE_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/lib/windows_port.c nodejs-mozilla-12.22.12/deps/cares/src/lib/windows_port.c --- nodejs-mozilla-12.18.1/deps/cares/src/lib/windows_port.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/lib/windows_port.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,22 @@ +#include "ares_setup.h" + + +/* only do the following on windows + */ +#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS) + +#ifdef __WATCOMC__ +/* + * Watcom needs a DllMain() in order to initialise the clib startup code. + */ +BOOL +WINAPI DllMain (HINSTANCE hnd, DWORD reason, LPVOID reserved) +{ + (void) hnd; + (void) reason; + (void) reserved; + return (TRUE); +} +#endif + +#endif /* WIN32 builds only */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/Makefile.am nodejs-mozilla-12.22.12/deps/cares/src/Makefile.am --- nodejs-mozilla-12.18.1/deps/cares/src/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/Makefile.am 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,2 @@ +EXTRA_DIST=CMakeLists.txt +SUBDIRS=lib tools diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/Makefile.in nodejs-mozilla-12.22.12/deps/cares/src/Makefile.in --- nodejs-mozilla-12.18.1/deps/cares/src/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/Makefile.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,666 @@ +# Makefile.in generated by automake 1.16.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2021 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ + $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ + $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ + $(top_srcdir)/m4/ax_am_macros_static.m4 \ + $(top_srcdir)/m4/ax_check_gnu_make.m4 \ + $(top_srcdir)/m4/ax_code_coverage.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/m4/ax_file_escapes.m4 \ + $(top_srcdir)/m4/ax_require_defined.m4 \ + $(top_srcdir)/m4/cares-compilers.m4 \ + $(top_srcdir)/m4/cares-confopts.m4 \ + $(top_srcdir)/m4/cares-functions.m4 \ + $(top_srcdir)/m4/cares-reentrant.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/xc-am-iface.m4 \ + $(top_srcdir)/m4/xc-cc-check.m4 \ + $(top_srcdir)/m4/xc-lt-iface.m4 \ + $(top_srcdir)/m4/xc-translit.m4 \ + $(top_srcdir)/m4/xc-val-flgs.m4 \ + $(top_srcdir)/m4/zz40-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/lib/ares_config.h \ + $(top_builddir)/include/ares_build.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir distdir-am +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_SUBDIRS = @BUILD_SUBDIRS@ +CARES_CFLAG_EXTRAS = @CARES_CFLAG_EXTRAS@ +CARES_PRIVATE_LIBS = @CARES_PRIVATE_LIBS@ +CARES_RANDOM_FILE = @CARES_RANDOM_FILE@ +CARES_VERSION_INFO = @CARES_VERSION_INFO@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_CARES_SYMBOL_HIDING = @CFLAG_CARES_SYMBOL_HIDING@ +CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ +CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ +CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ +CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ +CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAG_CARES_STATICLIB = @CPPFLAG_CARES_STATICLIB@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ETAGS = @ETAGS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GENHTML = @GENHTML@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LCOV = @LCOV@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ifGNUmake = @ifGNUmake@ +ifnGNUmake = @ifnGNUmake@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = CMakeLists.txt +SUBDIRS = lib tools +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/NEWS nodejs-mozilla-12.22.12/deps/cares/src/NEWS --- nodejs-mozilla-12.18.1/deps/cares/src/NEWS 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/NEWS 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -Major changes since: -* see the CHANGES file - -Major changes in release 1.1.1: -* ares should now compile as C++ code (no longer uses reserved word - "class"). -* Added SRV support to adig test program. -* Fixed a few error handling bugs in query processing. - -Major changes in release 1.1.0: -* Added ares_free_string() function so that memory can be freed in the - same layer as it is allocated, a desirable feature in some - environments. -* A few of the ares_dns.h macros are fixed to use the proper bitwise - operator. -* Fixed a couple of fenceposts fixed in ares_expand_name()'s - bounds-checking. -* In process_timeouts(), extract query->next before calling - next_server() and possibly freeing the query structure. -* Casted arguments to ctype macros casted to unsigned char, since not - all char values are valid inputs to those macros according to ANSI. diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/README.cares nodejs-mozilla-12.22.12/deps/cares/src/README.cares --- nodejs-mozilla-12.18.1/deps/cares/src/README.cares 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/README.cares 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -c-ares -====== - -This package is based on ares 1.1.1 (written by Greg Hudson). Daniel Stenberg -decided to fork and release a separate project since the original ares author -didn't want the improvements that were vital for our use of it. - -This package is dubbed 'c-ares' since Daniel wanted this for use within the -curl project (hence the letter C) and it makes a nice pun. c-ares is not API -compatible with ares: a new name makes that more obvious to the public. - -The original libares was distributed at -ftp://athena-dist.mit.edu:pub/ATHENA/ares (which seems to not be alive -anymore). A local copy of the original ares package is kept here: -https://c-ares.haxx.se/download/ares-1.1.1.tar.gz diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/README.md nodejs-mozilla-12.22.12/deps/cares/src/README.md --- nodejs-mozilla-12.18.1/deps/cares/src/README.md 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -c-ares -====== - -[![Build Status](https://travis-ci.org/c-ares/c-ares.svg?branch=master)](https://travis-ci.org/c-ares/c-ares) -[![Windows Build Status](https://ci.appveyor.com/api/projects/status/aevgc5914tm72pvs/branch/master?svg=true)](https://ci.appveyor.com/project/c-ares/c-ares/branch/master) -[![Coverage Status](https://coveralls.io/repos/c-ares/c-ares/badge.svg?branch=master&service=github)](https://coveralls.io/github/c-ares/c-ares?branch=master) -[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/291/badge)](https://bestpractices.coreinfrastructure.org/projects/291) -[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/c-ares.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:c-ares) -[![Releases](https://coderelease.io/badge/c-ares/c-ares)](https://coderelease.io/github/repository/c-ares/c-ares) - -This is c-ares, an asynchronous resolver library. It is intended for -applications which need to perform DNS queries without blocking, or need to -perform multiple DNS queries in parallel. The primary examples of such -applications are servers which communicate with multiple clients and programs -with graphical user interfaces. - -The full source code is available in the ['c-ares' release archives](https://c-ares.haxx.se/download/), -and in a git repository: http://github.com/c-ares/c-ares. See the -[INSTALL.md](INSTALL.md) file for build information. - -If you find bugs, correct flaws, have questions or have comments in general in -regard to c-ares (or by all means the original ares too), get in touch with us -on the c-ares mailing list: http://cool.haxx.se/mailman/listinfo/c-ares - -c-ares is of course distributed under the same MIT-style license as the -original ares. - -You'll find all c-ares details and news here: - https://c-ares.haxx.se/ - - -Notes for c-ares hackers ------------------------- - -* The distributed `ares_build.h` file is only intended to be used on systems - which can not run the also distributed configure script. - -* The distributed `ares_build.h` file is generated as a copy of `ares_build.h.dist` - when the c-ares source code distribution archive file is originally created. - -* If you check out from git on a non-configure platform, you must run the - appropriate `buildconf*` script to set up `ares_build.h` and other local files - before being able to compile the library. - -* On systems capable of running the `configure` script, the `configure` process - will overwrite the distributed `ares_build.h` file with one that is suitable - and specific to the library being configured and built, this new file is - generated from the `ares_build.h.in` template file. - -* If you intend to distribute an already compiled c-ares library you **MUST** - also distribute along with it the generated `ares_build.h` which has been - used to compile it. Otherwise the library will be of no use for the users of - the library that you have built. It is **your** responsibility to provide this - file. No one at the c-ares project can know how you have built the library. - -* File `ares_build.h` includes platform and configuration dependent info, - and must not be modified by anyone. Configure script generates it for you. - -* We cannot assume anything else but very basic compiler features being - present. While c-ares requires an ANSI C compiler to build, some of the - earlier ANSI compilers clearly can't deal with some preprocessor operators. - -* Newlines must remain unix-style for older compilers' sake. - -* Comments must be written in the old-style /* unnested C-fashion */ - -* Try to keep line lengths below 80 columns. diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/README.msvc nodejs-mozilla-12.22.12/deps/cares/src/README.msvc --- nodejs-mozilla-12.18.1/deps/cares/src/README.msvc 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/README.msvc 1970-01-01 00:00:00.000000000 +0000 @@ -1,142 +0,0 @@ - - - ___ __ _ _ __ ___ ___ - / __| ___ / _` | '__/ _ \/ __| - | (_ |___| (_| | | | __/\__ \ - \___| \__,_|_| \___||___/ - - - How to build c-ares using MSVC or Visual Studio - ================================================= - - - - How to build using MSVC from the command line - --------------------------------------------- - - Open a command prompt window and ensure that the environment is properly - set up in order to use MSVC or Visual Studio compiler tools. - - Change to c-ares source folder where Makefile.msvc file is located and run: - - > nmake -f Makefile.msvc - - This will build all c-ares libraries as well as three sample programs. - - Once the above command has finished a new folder named MSVCXX will exist - below the folder where makefile.msvc is found. The name of the folder - depends on the MSVC compiler version being used to build c-ares. - - Below the MSVCXX folder there will exist four folders named 'cares', - 'ahost', 'acountry', and 'adig'. The 'cares' folder is the one that - holds the c-ares libraries you have just generated, the other three - hold sample programs that use the libraries. - - The above command builds four versions of the c-ares library, dynamic - and static versions and each one in release and debug flavours. Each - of these is found in folders named dll-release, dll-debug, lib-release, - and lib-debug, which hang from the 'cares' folder mentioned above. Each - sample program also has folders with the same names to reflect which - library version it is using. - - - How to install using MSVC from the command line - ----------------------------------------------- - - In order to allow easy usage of c-ares libraries it may be convenient to - install c-ares libraries and header files to a common subdirectory tree. - - Once that c-ares libraries have been built using procedure described above, - use same command prompt window to define environment variable INSTALL_DIR - to designate the top subdirectory where installation of c-ares libraries and - header files will be done. - - > set INSTALL_DIR=c:\c-ares - - Afterwards, run following command to actually perform the installation: - - > nmake -f Makefile.msvc install - - Installation procedure will copy c-ares libraries to subdirectory 'lib' and - c-ares header files to subdirectory 'include' below the INSTALL_DIR subdir. - - When environment variable INSTALL_DIR is not defined, installation is done - to c-ares source folder where Makefile.msvc file is located. - - - How to build using Visual Studio 6 IDE - -------------------------------------- - - A VC++ 6.0 reference workspace (vc6aws.dsw) is available within the 'vc' - folder to allow proper building of the library and sample programs. - - 1) Open the vc6aws.dsw workspace with MSVC6's IDE. - 2) Select 'Build' from top menu. - 3) Select 'Batch Build' from dropdown menu. - 4) Make sure that the sixteen project configurations are 'checked'. - 5) Click on the 'Build' button. - 6) Once the sixteen project configurations are built you are done. - - Dynamic and static c-ares libraries are built in debug and release flavours, - and can be located each one in its own subdirectory, dll-debug, dll-release, - lib-debug and lib-release, all of them below the 'vc\cares' subdirectory. - - In the same way four executable versions of each sample program are built, - each using its respective library. The resulting sample executables are - located in its own subdirectory, dll-debug, dll-release, lib-debug and - lib-release, below the 'vc\acountry', 'vc\adig' and 'vc\ahost'folders. - - These reference VC++ 6.0 configurations are generated using the dynamic CRT. - - - How to build using Visual Studio 2003 or newer IDE - -------------------------------------------------- - - First you have to convert the VC++ 6.0 reference workspace and project files - to the Visual Studio IDE version you are using, following next steps: - - 1) Open vc\vc6aws.dsw with VS20XX. - 2) Allow VS20XX to update all projects and workspaces. - 3) Save ALL and close VS20XX. - 4) Open vc\vc6aws.sln with VS20XX. - 5) Select batch build, check 'all' projects and click 'build' button. - - Same comments relative to generated files and folders as done above for - Visual Studio 6 IDE apply here. - - - Relationship between c-ares library file names and versions - ----------------------------------------------------------- - - c-ares static release library version files: - - libcares.lib -> static release library - - c-ares static debug library version files: - - libcaresd.lib -> static debug library - - c-ares dynamic release library version files: - - cares.dll -> dynamic release library - cares.lib -> import library for the dynamic release library - cares.exp -> export file for the dynamic release library - - c-ares dynamic debug library version files: - - caresd.dll -> dynamic debug library - caresd.lib -> import library for the dynamic debug library - caresd.exp -> export file for the dynamic debug library - caresd.pdb -> debug symbol file for the dynamic debug library - - - How to use c-ares static libraries - ---------------------------------- - - When using the c-ares static library in your program, you will have to - define preprocessor symbol CARES_STATICLIB while building your program, - otherwise you will get errors at linkage stage. - - -Have Fun! - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/RELEASE-NOTES nodejs-mozilla-12.22.12/deps/cares/src/RELEASE-NOTES --- nodejs-mozilla-12.18.1/deps/cares/src/RELEASE-NOTES 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/RELEASE-NOTES 1970-01-01 00:00:00.000000000 +0000 @@ -1,85 +0,0 @@ -c-ares version 1.16.0 - -Changes: - o Introduction of ares_getaddrinfo() API which provides similar output - (including proper sorting as per RFC 6724) to the system native API, but - utilizes different data structures in order to provide additional information - such as TTLs and all aliases. Please reference the respective man pages for - usage details. [3] [4] [5] [7] [8] [13] [14] [15] [16] [17] [22] - o Parse SOA records from ns_t_any response [29] [30] - o CMake: Provide c-ares version in package export file [24] - o CMake: Add CPACK functionality for DEB and RPM [28] - o CMake: Generate PDB files during build [33] [34] - o CMake: Support manpage installation [37] [38] - -Bug fixes: - o Fix bad expectation in IPv6 localhost test. [1] [2] - o AutoTools: use XC_CHECK_BUILD_FLAGS instead of XC_CHECK_USER_FLAGS to prevent - complaints about CPPFLAGS in CFLAGS. [6] - o Fix .onion handling - o Command line usage was out of date for adig and ahost. [18] - o Typos in manpages [19] [20] - o If ares_getenv is defined, it must return a value on all platforms [21] - o If /etc/resolv.conf has invalid lookup values, use the defaults. [23] - o Tests: Separate live tests from SetServers* tests as only live tests should - require internet access. [25] - o ares_gethostbyname() should return ENODATA if no valid A or AAAA record is - found, but a CNAME was found. [26] [27] - o CMake: Rework library function checking to prevent unintended linking with - system libraries that aren't needed. [31] [32] - o Due to use of inet_addr() it was not possible to return 255.255.255.255 from - ares_gethostbyname(). [35] [36] - o CMake: Fix building of tests on Windows - -Thanks go to these friendly people for their efforts and contributions: - Abhishek Arya (@inferno-chromium), Adam Majer (@AdamMajer), - Andrew Selivanov (@ki11roy), Ben Noordhuis (@bnoordhuis), - Brad House (@bradh352), Christian Ammer (@ChristianAmmer), Dan Noé (@dnoe), - Daniel Stenberg (@bagder), Darrin Cullop (@dwcullop), - Dron Rathore (@DronRathore), Fabrice Fontaine (@ffontaine), - Gregor Jasny (@gjasny), @kedixa, Khaidi Chu (@XadillaX), - Kyle Edwards (@KyleFromKitware), @lifenjoiner, Michal Rostecki (@mrostecki), - Peter Eisentraut (@petere), Piotr Pietraszkiewicz (@ppietrasa), - Stephen Bryant (@bf-bryants), @tjwalton, Vy Nguyen (@oontvoo) - (22 contributors) - -References to bug reports and discussions on issues: - [1] = https://github.com/c-ares/c-ares/pull/227 - [2] = https://github.com/c-ares/c-ares/issues/85 - [3] = https://github.com/c-ares/c-ares/pull/112 - [4] = https://github.com/c-ares/c-ares/pull/233 - [5] = https://github.com/c-ares/c-ares/pull/234 - [6] = https://github.com/c-ares/c-ares/pull/236 - [7] = https://github.com/c-ares/c-ares/pull/235 - [8] = https://github.com/c-ares/c-ares/pull/239 - [9] = https://github.com/c-ares/c-ares/pull/241 - [10] = https://github.com/c-ares/c-ares/pull/187 - [11] = https://github.com/c-ares/c-ares/pull/252 - [12] = https://github.com/c-ares/c-ares/issues/251 - [13] = https://github.com/c-ares/c-ares/pull/258 - [14] = https://github.com/c-ares/c-ares/pull/257 - [15] = https://github.com/c-ares/c-ares/pull/262 - [16] = https://github.com/c-ares/c-ares/pull/264 - [17] = https://github.com/c-ares/c-ares/pull/265 - [18] = https://github.com/c-ares/c-ares/pull/256 - [19] = https://github.com/c-ares/c-ares/pull/269 - [20] = https://github.com/c-ares/c-ares/pull/275 - [21] = https://github.com/c-ares/c-ares/pull/279 - [22] = https://github.com/c-ares/c-ares/pull/290 - [23] = https://github.com/c-ares/c-ares/pull/274 - [24] = https://github.com/c-ares/c-ares/pull/296 - [25] = https://github.com/c-ares/c-ares/pull/299 - [26] = https://github.com/c-ares/c-ares/pull/304 - [27] = https://github.com/c-ares/c-ares/issues/303 - [28] = https://github.com/c-ares/c-ares/pull/283 - [29] = https://github.com/c-ares/c-ares/pull/103 - [30] = https://github.com/c-ares/c-ares/issues/102 - [31] = https://github.com/c-ares/c-ares/pull/310 - [32] = https://github.com/c-ares/c-ares/issues/307 - [33] = https://github.com/c-ares/c-ares/pull/311 - [34] = https://github.com/c-ares/c-ares/issues/245 - [35] = https://github.com/c-ares/c-ares/issues/309 - [36] = https://github.com/c-ares/c-ares/pull/312 - [37] = https://github.com/c-ares/c-ares/issues/297 - [38] = https://github.com/c-ares/c-ares/pull/314 - diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/setup_once.h nodejs-mozilla-12.22.12/deps/cares/src/setup_once.h --- nodejs-mozilla-12.18.1/deps/cares/src/setup_once.h 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/setup_once.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,554 +0,0 @@ -#ifndef __SETUP_ONCE_H -#define __SETUP_ONCE_H - - -/* Copyright (C) 2004 - 2013 by Daniel Stenberg et al - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of M.I.T. not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. M.I.T. makes no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - */ - - -/******************************************************************** - * NOTICE * - * ======== * - * * - * Content of header files lib/setup_once.h and ares/setup_once.h * - * must be kept in sync. Modify the other one if you change this. * - * * - ********************************************************************/ - - -/* - * Inclusion of common header files. - */ - -#include -#include -#include -#include -#include - -#ifdef HAVE_ERRNO_H -#include -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif - -#ifdef NEED_MALLOC_H -#include -#endif - -#ifdef NEED_MEMORY_H -#include -#endif - -#ifdef HAVE_SYS_STAT_H -#include -#endif - -#ifdef HAVE_SYS_TIME_H -#include -#ifdef TIME_WITH_SYS_TIME -#include -#endif -#else -#ifdef HAVE_TIME_H -#include -#endif -#endif - -#ifdef WIN32 -#include -#include -#endif - -#if defined(HAVE_STDBOOL_H) && defined(HAVE_BOOL_T) -#include -#endif - -#ifdef HAVE_UNISTD_H -#include -#endif - -#ifdef __hpux -# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) -# ifdef _APP32_64BIT_OFF_T -# define OLD_APP32_64BIT_OFF_T _APP32_64BIT_OFF_T -# undef _APP32_64BIT_OFF_T -# else -# undef OLD_APP32_64BIT_OFF_T -# endif -# endif -#endif - -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -#ifdef __hpux -# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) -# ifdef OLD_APP32_64BIT_OFF_T -# define _APP32_64BIT_OFF_T OLD_APP32_64BIT_OFF_T -# undef OLD_APP32_64BIT_OFF_T -# endif -# endif -#endif - - -/* - * Definition of timeval struct for platforms that don't have it. - */ - -#ifndef HAVE_STRUCT_TIMEVAL -struct timeval { - long tv_sec; - long tv_usec; -}; -#endif - - -/* - * If we have the MSG_NOSIGNAL define, make sure we use - * it as the fourth argument of function send() - */ - -#ifdef HAVE_MSG_NOSIGNAL -#define SEND_4TH_ARG MSG_NOSIGNAL -#else -#define SEND_4TH_ARG 0 -#endif - - -#if defined(__minix) -/* Minix doesn't support recv on TCP sockets */ -#define sread(x,y,z) (ares_ssize_t)read((RECV_TYPE_ARG1)(x), \ - (RECV_TYPE_ARG2)(y), \ - (RECV_TYPE_ARG3)(z)) - -#elif defined(HAVE_RECV) -/* - * The definitions for the return type and arguments types - * of functions recv() and send() belong and come from the - * configuration file. Do not define them in any other place. - * - * HAVE_RECV is defined if you have a function named recv() - * which is used to read incoming data from sockets. If your - * function has another name then don't define HAVE_RECV. - * - * If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2, - * RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also - * be defined. - * - * HAVE_SEND is defined if you have a function named send() - * which is used to write outgoing data on a connected socket. - * If yours has another name then don't define HAVE_SEND. - * - * If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2, - * SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and - * SEND_TYPE_RETV must also be defined. - */ - -#if !defined(RECV_TYPE_ARG1) || \ - !defined(RECV_TYPE_ARG2) || \ - !defined(RECV_TYPE_ARG3) || \ - !defined(RECV_TYPE_ARG4) || \ - !defined(RECV_TYPE_RETV) - /* */ - Error Missing_definition_of_return_and_arguments_types_of_recv - /* */ -#else -#define sread(x,y,z) (ares_ssize_t)recv((RECV_TYPE_ARG1)(x), \ - (RECV_TYPE_ARG2)(y), \ - (RECV_TYPE_ARG3)(z), \ - (RECV_TYPE_ARG4)(0)) -#endif -#else /* HAVE_RECV */ -#ifndef sread - /* */ - Error Missing_definition_of_macro_sread - /* */ -#endif -#endif /* HAVE_RECV */ - - -#if defined(__minix) -/* Minix doesn't support send on TCP sockets */ -#define swrite(x,y,z) (ares_ssize_t)write((SEND_TYPE_ARG1)(x), \ - (SEND_TYPE_ARG2)(y), \ - (SEND_TYPE_ARG3)(z)) - -#elif defined(HAVE_SEND) -#if !defined(SEND_TYPE_ARG1) || \ - !defined(SEND_QUAL_ARG2) || \ - !defined(SEND_TYPE_ARG2) || \ - !defined(SEND_TYPE_ARG3) || \ - !defined(SEND_TYPE_ARG4) || \ - !defined(SEND_TYPE_RETV) - /* */ - Error Missing_definition_of_return_and_arguments_types_of_send - /* */ -#else -#define swrite(x,y,z) (ares_ssize_t)send((SEND_TYPE_ARG1)(x), \ - (SEND_TYPE_ARG2)(y), \ - (SEND_TYPE_ARG3)(z), \ - (SEND_TYPE_ARG4)(SEND_4TH_ARG)) -#endif -#else /* HAVE_SEND */ -#ifndef swrite - /* */ - Error Missing_definition_of_macro_swrite - /* */ -#endif -#endif /* HAVE_SEND */ - - -#if 0 -#if defined(HAVE_RECVFROM) -/* - * Currently recvfrom is only used on udp sockets. - */ -#if !defined(RECVFROM_TYPE_ARG1) || \ - !defined(RECVFROM_TYPE_ARG2) || \ - !defined(RECVFROM_TYPE_ARG3) || \ - !defined(RECVFROM_TYPE_ARG4) || \ - !defined(RECVFROM_TYPE_ARG5) || \ - !defined(RECVFROM_TYPE_ARG6) || \ - !defined(RECVFROM_TYPE_RETV) - /* */ - Error Missing_definition_of_return_and_arguments_types_of_recvfrom - /* */ -#else -#define sreadfrom(s,b,bl,f,fl) (ares_ssize_t)recvfrom((RECVFROM_TYPE_ARG1) (s), \ - (RECVFROM_TYPE_ARG2 *)(b), \ - (RECVFROM_TYPE_ARG3) (bl), \ - (RECVFROM_TYPE_ARG4) (0), \ - (RECVFROM_TYPE_ARG5 *)(f), \ - (RECVFROM_TYPE_ARG6 *)(fl)) -#endif -#else /* HAVE_RECVFROM */ -#ifndef sreadfrom - /* */ - Error Missing_definition_of_macro_sreadfrom - /* */ -#endif -#endif /* HAVE_RECVFROM */ - - -#ifdef RECVFROM_TYPE_ARG6_IS_VOID -# define RECVFROM_ARG6_T int -#else -# define RECVFROM_ARG6_T RECVFROM_TYPE_ARG6 -#endif -#endif /* if 0 */ - - -/* - * Function-like macro definition used to close a socket. - */ - -#if defined(HAVE_CLOSESOCKET) -# define sclose(x) closesocket((x)) -#elif defined(HAVE_CLOSESOCKET_CAMEL) -# define sclose(x) CloseSocket((x)) -#elif defined(HAVE_CLOSE_S) -# define sclose(x) close_s((x)) -#else -# define sclose(x) close((x)) -#endif - - -/* - * Uppercase macro versions of ANSI/ISO is*() functions/macros which - * avoid negative number inputs with argument byte codes > 127. - */ - -#define ISSPACE(x) (isspace((int) ((unsigned char)x))) -#define ISDIGIT(x) (isdigit((int) ((unsigned char)x))) -#define ISALNUM(x) (isalnum((int) ((unsigned char)x))) -#define ISXDIGIT(x) (isxdigit((int) ((unsigned char)x))) -#define ISGRAPH(x) (isgraph((int) ((unsigned char)x))) -#define ISALPHA(x) (isalpha((int) ((unsigned char)x))) -#define ISPRINT(x) (isprint((int) ((unsigned char)x))) -#define ISUPPER(x) (isupper((int) ((unsigned char)x))) -#define ISLOWER(x) (islower((int) ((unsigned char)x))) -#define ISASCII(x) (isascii((int) ((unsigned char)x))) - -#define ISBLANK(x) (int)((((unsigned char)x) == ' ') || \ - (((unsigned char)x) == '\t')) - -#define TOLOWER(x) (tolower((int) ((unsigned char)x))) - - -/* - * 'bool' stuff compatible with HP-UX headers. - */ - -#if defined(__hpux) && !defined(HAVE_BOOL_T) - typedef int bool; -# define false 0 -# define true 1 -# define HAVE_BOOL_T -#endif - - -/* - * 'bool' exists on platforms with , i.e. C99 platforms. - * On non-C99 platforms there's no bool, so define an enum for that. - * On C99 platforms 'false' and 'true' also exist. Enum uses a - * global namespace though, so use bool_false and bool_true. - */ - -#ifndef HAVE_BOOL_T - typedef enum { - bool_false = 0, - bool_true = 1 - } bool; - -/* - * Use a define to let 'true' and 'false' use those enums. There - * are currently no use of true and false in libcurl proper, but - * there are some in the examples. This will cater for any later - * code happening to use true and false. - */ -# define false bool_false -# define true bool_true -# define HAVE_BOOL_T -#endif - - -/* - * Redefine TRUE and FALSE too, to catch current use. With this - * change, 'bool found = 1' will give a warning on MIPSPro, but - * 'bool found = TRUE' will not. Change tested on IRIX/MIPSPro, - * AIX 5.1/Xlc, Tru64 5.1/cc, w/make test too. - */ - -#ifndef TRUE -#define TRUE true -#endif -#ifndef FALSE -#define FALSE false -#endif - - -/* - * Macro WHILE_FALSE may be used to build single-iteration do-while loops, - * avoiding compiler warnings. Mostly intended for other macro definitions. - */ - -#define WHILE_FALSE while(0) - -#if defined(_MSC_VER) && !defined(__POCC__) -# undef WHILE_FALSE -# if (_MSC_VER < 1500) -# define WHILE_FALSE while(1, 0) -# else -# define WHILE_FALSE \ -__pragma(warning(push)) \ -__pragma(warning(disable:4127)) \ -while(0) \ -__pragma(warning(pop)) -# endif -#endif - - -/* - * Typedef to 'int' if sig_atomic_t is not an available 'typedefed' type. - */ - -#ifndef HAVE_SIG_ATOMIC_T -typedef int sig_atomic_t; -#define HAVE_SIG_ATOMIC_T -#endif - - -/* - * Convenience SIG_ATOMIC_T definition - */ - -#ifdef HAVE_SIG_ATOMIC_T_VOLATILE -#define SIG_ATOMIC_T static sig_atomic_t -#else -#define SIG_ATOMIC_T static volatile sig_atomic_t -#endif - - -/* - * Default return type for signal handlers. - */ - -#ifndef RETSIGTYPE -#define RETSIGTYPE void -#endif - - -/* - * Macro used to include code only in debug builds. - */ - -#ifdef DEBUGBUILD -#define DEBUGF(x) x -#else -#define DEBUGF(x) do { } WHILE_FALSE -#endif - - -/* - * Macro used to include assertion code only in debug builds. - */ - -#if defined(DEBUGBUILD) && defined(HAVE_ASSERT_H) -#define DEBUGASSERT(x) assert(x) -#else -#define DEBUGASSERT(x) do { } WHILE_FALSE -#endif - - -/* - * Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno - * (or equivalent) on this platform to hide platform details to code using it. - */ - -#ifdef USE_WINSOCK -#define SOCKERRNO ((int)WSAGetLastError()) -#define SET_SOCKERRNO(x) (WSASetLastError((int)(x))) -#else -#define SOCKERRNO (errno) -#define SET_SOCKERRNO(x) (errno = (x)) -#endif - - -/* - * Macro ERRNO / SET_ERRNO() returns / sets the NOT *socket-related* errno - * (or equivalent) on this platform to hide platform details to code using it. - */ - -#if defined(WIN32) && !defined(WATT32) -#define ERRNO ((int)GetLastError()) -#define SET_ERRNO(x) (SetLastError((DWORD)(x))) -#else -#define ERRNO (errno) -#define SET_ERRNO(x) (errno = (x)) -#endif - - -/* - * Portable error number symbolic names defined to Winsock error codes. - */ - -#ifdef USE_WINSOCK -#undef EBADF /* override definition in errno.h */ -#define EBADF WSAEBADF -#undef EINTR /* override definition in errno.h */ -#define EINTR WSAEINTR -#undef EINVAL /* override definition in errno.h */ -#define EINVAL WSAEINVAL -#undef EWOULDBLOCK /* override definition in errno.h */ -#define EWOULDBLOCK WSAEWOULDBLOCK -#undef EINPROGRESS /* override definition in errno.h */ -#define EINPROGRESS WSAEINPROGRESS -#undef EALREADY /* override definition in errno.h */ -#define EALREADY WSAEALREADY -#undef ENOTSOCK /* override definition in errno.h */ -#define ENOTSOCK WSAENOTSOCK -#undef EDESTADDRREQ /* override definition in errno.h */ -#define EDESTADDRREQ WSAEDESTADDRREQ -#undef EMSGSIZE /* override definition in errno.h */ -#define EMSGSIZE WSAEMSGSIZE -#undef EPROTOTYPE /* override definition in errno.h */ -#define EPROTOTYPE WSAEPROTOTYPE -#undef ENOPROTOOPT /* override definition in errno.h */ -#define ENOPROTOOPT WSAENOPROTOOPT -#undef EPROTONOSUPPORT /* override definition in errno.h */ -#define EPROTONOSUPPORT WSAEPROTONOSUPPORT -#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT -#undef EOPNOTSUPP /* override definition in errno.h */ -#define EOPNOTSUPP WSAEOPNOTSUPP -#define EPFNOSUPPORT WSAEPFNOSUPPORT -#undef EAFNOSUPPORT /* override definition in errno.h */ -#define EAFNOSUPPORT WSAEAFNOSUPPORT -#undef EADDRINUSE /* override definition in errno.h */ -#define EADDRINUSE WSAEADDRINUSE -#undef EADDRNOTAVAIL /* override definition in errno.h */ -#define EADDRNOTAVAIL WSAEADDRNOTAVAIL -#undef ENETDOWN /* override definition in errno.h */ -#define ENETDOWN WSAENETDOWN -#undef ENETUNREACH /* override definition in errno.h */ -#define ENETUNREACH WSAENETUNREACH -#undef ENETRESET /* override definition in errno.h */ -#define ENETRESET WSAENETRESET -#undef ECONNABORTED /* override definition in errno.h */ -#define ECONNABORTED WSAECONNABORTED -#undef ECONNRESET /* override definition in errno.h */ -#define ECONNRESET WSAECONNRESET -#undef ENOBUFS /* override definition in errno.h */ -#define ENOBUFS WSAENOBUFS -#undef EISCONN /* override definition in errno.h */ -#define EISCONN WSAEISCONN -#undef ENOTCONN /* override definition in errno.h */ -#define ENOTCONN WSAENOTCONN -#define ESHUTDOWN WSAESHUTDOWN -#define ETOOMANYREFS WSAETOOMANYREFS -#undef ETIMEDOUT /* override definition in errno.h */ -#define ETIMEDOUT WSAETIMEDOUT -#undef ECONNREFUSED /* override definition in errno.h */ -#define ECONNREFUSED WSAECONNREFUSED -#undef ELOOP /* override definition in errno.h */ -#define ELOOP WSAELOOP -#ifndef ENAMETOOLONG /* possible previous definition in errno.h */ -#define ENAMETOOLONG WSAENAMETOOLONG -#endif -#define EHOSTDOWN WSAEHOSTDOWN -#undef EHOSTUNREACH /* override definition in errno.h */ -#define EHOSTUNREACH WSAEHOSTUNREACH -#ifndef ENOTEMPTY /* possible previous definition in errno.h */ -#define ENOTEMPTY WSAENOTEMPTY -#endif -#define EPROCLIM WSAEPROCLIM -#define EUSERS WSAEUSERS -#define EDQUOT WSAEDQUOT -#define ESTALE WSAESTALE -#define EREMOTE WSAEREMOTE -#endif - - -/* - * Actually use __32_getpwuid() on 64-bit VMS builds for getpwuid() - */ - -#if defined(__VMS) && \ - defined(__INITIAL_POINTER_SIZE) && (__INITIAL_POINTER_SIZE == 64) -#define getpwuid __32_getpwuid -#endif - - -/* - * Macro argv_item_t hides platform details to code using it. - */ - -#ifdef __VMS -#define argv_item_t __char_ptr32 -#else -#define argv_item_t char * -#endif - - -/* - * We use this ZERO_NULL to avoid picky compiler warnings, - * when assigning a NULL pointer to a function pointer var. - */ - -#define ZERO_NULL 0 - - -#endif /* __SETUP_ONCE_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/TODO nodejs-mozilla-12.22.12/deps/cares/src/TODO --- nodejs-mozilla-12.18.1/deps/cares/src/TODO 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/TODO 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -TODO -==== - -ares_reinit() - -- To allow an app to force a re-read of /etc/resolv.conf etc, pretty much - like the res_init() resolver function offers - -ares_gethostbyname - -- When built to support IPv6, it needs to also support PF_UNSPEC or similar, - so that an application can ask for any protocol and then c-ares would return - all known resolves and not just explicitly IPv4 _or_ IPv6 resolves. - -ares_process - -- Upon next ABI breakage ares_process() should be changed to return 'int' - and return ARES_ENOTINITIALIZED if ares_library_init() has not been called. - -ares_process_fd - -- Upon next ABI breakage ares_process_fd() should be changed to return - 'int' and return ARES_ENOTINITIALIZED if library has not been initialized. diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/acountry.c nodejs-mozilla-12.22.12/deps/cares/src/tools/acountry.c --- nodejs-mozilla-12.18.1/deps/cares/src/tools/acountry.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/acountry.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,652 @@ +/* + * + * IP-address/hostname to country converter. + * + * Problem; you want to know where IP a.b.c.d is located. + * + * Use ares_gethostbyname ("d.c.b.a.zz.countries.nerd.dk") + * and get the CNAME (host->h_name). Result will be: + * CNAME = zz.countries.nerd.dk with address 127.0.x.y (ver 1) or + * CNAME = .zz.countries.nerd.dk with address 127.0.x.y (ver 2) + * + * The 2 letter country code is in and the ISO-3166 country + * number is in x.y (number = x*256 + y). Version 2 of the protocol is missing + * the number. + * + * Ref: http://countries.nerd.dk/more.html + * + * Written by G. Vanem 2006, 2007 + * + * NB! This program may not be big-endian aware. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_STRINGS_H +#include +#endif + +#if defined(WIN32) && !defined(WATT32) + #include +#else + #include + #include + #include +#endif + +#include "ares.h" +#include "ares_getopt.h" +#include "ares_nowarn.h" + +#ifndef HAVE_STRDUP +# include "ares_strdup.h" +# define strdup(ptr) ares_strdup(ptr) +#endif + +#ifndef HAVE_STRCASECMP +# include "ares_strcasecmp.h" +# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2) +#endif + +#ifndef HAVE_STRNCASECMP +# include "ares_strcasecmp.h" +# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n) +#endif + +#ifndef INADDR_NONE +#define INADDR_NONE 0xffffffff +#endif + +/* By using a double cast, we can get rid of the bogus warning of + * warning: cast from 'const struct sockaddr *' to 'const struct sockaddr_in6 *' increases required alignment from 1 to 4 [-Wcast-align] + */ +#define CARES_INADDR_CAST(type, var) ((type)((void *)var)) + +static const char *usage = "acountry [-?hdv] {host|addr} ...\n"; +static const char nerd_fmt[] = "%u.%u.%u.%u.zz.countries.nerd.dk"; +static const char *nerd_ver1 = nerd_fmt + 14; /* .countries.nerd.dk */ +static const char *nerd_ver2 = nerd_fmt + 11; /* .zz.countries.nerd.dk */ +static int verbose = 0; + +#define TRACE(fmt) do { \ + if (verbose > 0) \ + printf fmt ; \ + } WHILE_FALSE + +static void wait_ares(ares_channel channel); +static void callback(void *arg, int status, int timeouts, struct hostent *host); +static void callback2(void *arg, int status, int timeouts, struct hostent *host); +static void find_country_from_cname(const char *cname, struct in_addr addr); +static void print_help_info_acountry(void); + +static void Abort(const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + vfprintf(stderr, fmt, args); + va_end(args); + exit(1); +} + +int main(int argc, char **argv) +{ + ares_channel channel; + int ch, status; + +#if defined(WIN32) && !defined(WATT32) + WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK); + WSADATA wsaData; + WSAStartup(wVersionRequested, &wsaData); +#endif + + status = ares_library_init(ARES_LIB_INIT_ALL); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status)); + return 1; + } + + while ((ch = ares_getopt(argc, argv, "dvh?")) != -1) + switch (ch) + { + case 'd': +#ifdef WATT32 + dbug_init(); +#endif + break; + case 'v': + verbose++; + break; + case 'h': + print_help_info_acountry(); + break; + case '?': + print_help_info_acountry(); + break; + default: + Abort(usage); + } + + argc -= optind; + argv += optind; + if (argc < 1) + Abort(usage); + + status = ares_init(&channel); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_init: %s\n", ares_strerror(status)); + return 1; + } + + /* Initiate the queries, one per command-line argument. */ + for ( ; *argv; argv++) + { + struct in_addr addr; + char buf[100]; + + /* If this fails, assume '*argv' is a host-name that + * must be resolved first + */ + if (ares_inet_pton(AF_INET, *argv, &addr) != 1) + { + ares_gethostbyname(channel, *argv, AF_INET, callback2, &addr); + wait_ares(channel); + if (addr.s_addr == INADDR_NONE) + { + printf("Failed to lookup %s\n", *argv); + continue; + } + } + + sprintf(buf, nerd_fmt, + (unsigned int)(addr.s_addr >> 24), + (unsigned int)((addr.s_addr >> 16) & 255), + (unsigned int)((addr.s_addr >> 8) & 255), + (unsigned int)(addr.s_addr & 255)); + TRACE(("Looking up %s...", buf)); + fflush(stdout); + ares_gethostbyname(channel, buf, AF_INET, callback, buf); + } + + wait_ares(channel); + ares_destroy(channel); + + ares_library_cleanup(); + +#if defined(WIN32) && !defined(WATT32) + WSACleanup(); +#endif + + return 0; +} + +/* + * Wait for the queries to complete. + */ +static void wait_ares(ares_channel channel) +{ + for (;;) + { + struct timeval *tvp, tv; + fd_set read_fds, write_fds; + int nfds; + + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + nfds = ares_fds(channel, &read_fds, &write_fds); + if (nfds == 0) + break; + tvp = ares_timeout(channel, NULL, &tv); + nfds = select(nfds, &read_fds, &write_fds, NULL, tvp); + if (nfds < 0) + continue; + ares_process(channel, &read_fds, &write_fds); + } +} + +/* + * This is the callback used when we have the IP-address of interest. + * Extract the CNAME and figure out the country-code from it. + */ +static void callback(void *arg, int status, int timeouts, struct hostent *host) +{ + const char *name = (const char*)arg; + const char *cname; + char buf[20]; + + (void)timeouts; + + if (!host || status != ARES_SUCCESS) + { + printf("Failed to lookup %s: %s\n", name, ares_strerror(status)); + return; + } + + TRACE(("\nFound address %s, name %s\n", + ares_inet_ntop(AF_INET,(const char*)host->h_addr,buf,sizeof(buf)), + host->h_name)); + + cname = host->h_name; /* CNAME gets put here */ + if (!cname) + printf("Failed to get CNAME for %s\n", name); + else + find_country_from_cname(cname, *(CARES_INADDR_CAST(struct in_addr *, host->h_addr))); +} + +/* + * This is the callback used to obtain the IP-address of the host of interest. + */ +static void callback2(void *arg, int status, int timeouts, struct hostent *host) +{ + struct in_addr *addr = (struct in_addr*) arg; + + (void)timeouts; + if (!host || status != ARES_SUCCESS) + memset(addr, INADDR_NONE, sizeof(*addr)); + else + memcpy(addr, host->h_addr, sizeof(*addr)); +} + +struct search_list { + int country_number; /* ISO-3166 country number */ + char short_name[3]; /* A2 short country code */ + const char *long_name; /* normal country name */ + }; + +static const struct search_list *list_lookup(int number, const struct search_list *list, int num) +{ + while (num > 0 && list->long_name) + { + if (list->country_number == number) + return (list); + num--; + list++; + } + return (NULL); +} + +/* + * Ref: https://en.wikipedia.org/wiki/ISO_3166-1 + */ +static const struct search_list country_list[] = { + { 4, "af", "Afghanistan" }, + { 248, "ax", "Åland Island" }, + { 8, "al", "Albania" }, + { 12, "dz", "Algeria" }, + { 16, "as", "American Samoa" }, + { 20, "ad", "Andorra" }, + { 24, "ao", "Angola" }, + { 660, "ai", "Anguilla" }, + { 10, "aq", "Antarctica" }, + { 28, "ag", "Antigua & Barbuda" }, + { 32, "ar", "Argentina" }, + { 51, "am", "Armenia" }, + { 533, "aw", "Aruba" }, + { 36, "au", "Australia" }, + { 40, "at", "Austria" }, + { 31, "az", "Azerbaijan" }, + { 44, "bs", "Bahamas" }, + { 48, "bh", "Bahrain" }, + { 50, "bd", "Bangladesh" }, + { 52, "bb", "Barbados" }, + { 112, "by", "Belarus" }, + { 56, "be", "Belgium" }, + { 84, "bz", "Belize" }, + { 204, "bj", "Benin" }, + { 60, "bm", "Bermuda" }, + { 64, "bt", "Bhutan" }, + { 68, "bo", "Bolivia" }, + { 535, "bq", "Bonaire, Sint Eustatius and Saba" }, /* Formerly 'Bonaire' / 'Netherlands Antilles' */ + { 70, "ba", "Bosnia & Herzegovina" }, + { 72, "bw", "Botswana" }, + { 74, "bv", "Bouvet Island" }, + { 76, "br", "Brazil" }, + { 86, "io", "British Indian Ocean Territory" }, + { 96, "bn", "Brunei Darussalam" }, + { 100, "bg", "Bulgaria" }, + { 854, "bf", "Burkina Faso" }, + { 108, "bi", "Burundi" }, + { 116, "kh", "Cambodia" }, + { 120, "cm", "Cameroon" }, + { 124, "ca", "Canada" }, + { 132, "cv", "Cape Verde" }, + { 136, "ky", "Cayman Islands" }, + { 140, "cf", "Central African Republic" }, + { 148, "td", "Chad" }, + { 152, "cl", "Chile" }, + { 156, "cn", "China" }, + { 162, "cx", "Christmas Island" }, + { 166, "cc", "Cocos Islands" }, + { 170, "co", "Colombia" }, + { 174, "km", "Comoros" }, + { 178, "cg", "Congo" }, + { 180, "cd", "Congo" }, + { 184, "ck", "Cook Islands" }, + { 188, "cr", "Costa Rica" }, + { 384, "ci", "Cote d'Ivoire" }, + { 191, "hr", "Croatia" }, + { 192, "cu", "Cuba" }, + { 531, "cw", "Curaçao" }, + { 196, "cy", "Cyprus" }, + { 203, "cz", "Czech Republic" }, + { 208, "dk", "Denmark" }, + { 262, "dj", "Djibouti" }, + { 212, "dm", "Dominica" }, + { 214, "do", "Dominican Republic" }, + { 218, "ec", "Ecuador" }, + { 818, "eg", "Egypt" }, + { 222, "sv", "El Salvador" }, + { 226, "gq", "Equatorial Guinea" }, + { 232, "er", "Eritrea" }, + { 233, "ee", "Estonia" }, + { 748, "sz", "Eswatini" }, /* Formerly Swaziland */ + { 231, "et", "Ethiopia" }, + { 65281, "eu", "European Union" }, /* 127.0.255.1 */ + { 238, "fk", "Falkland Islands" }, + { 234, "fo", "Faroe Islands" }, + { 242, "fj", "Fiji" }, + { 246, "fi", "Finland" }, + { 250, "fr", "France" }, + { 249, "fx", "France, Metropolitan" }, + { 254, "gf", "French Guiana" }, + { 258, "pf", "French Polynesia" }, + { 260, "tf", "French Southern Territories" }, + { 266, "ga", "Gabon" }, + { 270, "gm", "Gambia" }, + { 268, "ge", "Georgia" }, + { 276, "de", "Germany" }, + { 288, "gh", "Ghana" }, + { 292, "gi", "Gibraltar" }, + { 300, "gr", "Greece" }, + { 304, "gl", "Greenland" }, + { 308, "gd", "Grenada" }, + { 312, "gp", "Guadeloupe" }, + { 316, "gu", "Guam" }, + { 320, "gt", "Guatemala" }, + { 831, "gg", "Guernsey" }, + { 324, "gn", "Guinea" }, + { 624, "gw", "Guinea-Bissau" }, + { 328, "gy", "Guyana" }, + { 332, "ht", "Haiti" }, + { 334, "hm", "Heard & Mc Donald Islands" }, + { 336, "va", "Holy See" }, /* Vatican City */ + { 340, "hn", "Honduras" }, + { 344, "hk", "Hong kong" }, + { 348, "hu", "Hungary" }, + { 352, "is", "Iceland" }, + { 356, "in", "India" }, + { 360, "id", "Indonesia" }, + { 364, "ir", "Iran" }, + { 368, "iq", "Iraq" }, + { 372, "ie", "Ireland" }, + { 833, "im", "Isle of Man" }, + { 376, "il", "Israel" }, + { 380, "it", "Italy" }, + { 388, "jm", "Jamaica" }, + { 392, "jp", "Japan" }, + { 832, "je", "Jersey" }, + { 400, "jo", "Jordan" }, + { 398, "kz", "Kazakhstan" }, + { 404, "ke", "Kenya" }, + { 296, "ki", "Kiribati" }, + { 408, "kp", "Korea (north)" }, + { 410, "kr", "Korea (south)" }, + { 0, "xk", "Kosovo" }, /* https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 */ + { 414, "kw", "Kuwait" }, + { 417, "kg", "Kyrgyzstan" }, + { 418, "la", "Laos" }, + { 428, "lv", "Latvia" }, + { 422, "lb", "Lebanon" }, + { 426, "ls", "Lesotho" }, + { 430, "lr", "Liberia" }, + { 434, "ly", "Libya" }, + { 438, "li", "Liechtenstein" }, + { 440, "lt", "Lithuania" }, + { 442, "lu", "Luxembourg" }, + { 446, "mo", "Macao" }, + { 450, "mg", "Madagascar" }, + { 454, "mw", "Malawi" }, + { 458, "my", "Malaysia" }, + { 462, "mv", "Maldives" }, + { 466, "ml", "Mali" }, + { 470, "mt", "Malta" }, + { 584, "mh", "Marshall Islands" }, + { 474, "mq", "Martinique" }, + { 478, "mr", "Mauritania" }, + { 480, "mu", "Mauritius" }, + { 175, "yt", "Mayotte" }, + { 484, "mx", "Mexico" }, + { 583, "fm", "Micronesia" }, + { 498, "md", "Moldova" }, + { 492, "mc", "Monaco" }, + { 496, "mn", "Mongolia" }, + { 499, "me", "Montenegro" }, + { 500, "ms", "Montserrat" }, + { 504, "ma", "Morocco" }, + { 508, "mz", "Mozambique" }, + { 104, "mm", "Myanmar" }, + { 516, "na", "Namibia" }, + { 520, "nr", "Nauru" }, + { 524, "np", "Nepal" }, + { 528, "nl", "Netherlands" }, + { 540, "nc", "New Caledonia" }, + { 554, "nz", "New Zealand" }, + { 558, "ni", "Nicaragua" }, + { 562, "ne", "Niger" }, + { 566, "ng", "Nigeria" }, + { 570, "nu", "Niue" }, + { 574, "nf", "Norfolk Island" }, + { 807, "mk", "North Macedonia" }, /* 'Macedonia' until February 2019 */ + { 580, "mp", "Northern Mariana Islands" }, + { 578, "no", "Norway" }, + { 512, "om", "Oman" }, + { 586, "pk", "Pakistan" }, + { 585, "pw", "Palau" }, + { 275, "ps", "Palestinian Territory" }, + { 591, "pa", "Panama" }, + { 598, "pg", "Papua New Guinea" }, + { 600, "py", "Paraguay" }, + { 604, "pe", "Peru" }, + { 608, "ph", "Philippines" }, + { 612, "pn", "Pitcairn" }, + { 616, "pl", "Poland" }, + { 620, "pt", "Portugal" }, + { 630, "pr", "Puerto Rico" }, + { 634, "qa", "Qatar" }, + { 638, "re", "Reunion" }, + { 642, "ro", "Romania" }, + { 643, "ru", "Russian Federation" }, + { 646, "rw", "Rwanda" }, + { 0, "bl", "Saint Barthélemy" }, /* https://en.wikipedia.org/wiki/ISO_3166-2:BL */ + { 659, "kn", "Saint Kitts & Nevis" }, + { 662, "lc", "Saint Lucia" }, + { 663, "mf", "Saint Martin" }, + { 670, "vc", "Saint Vincent" }, + { 882, "ws", "Samoa" }, + { 674, "sm", "San Marino" }, + { 678, "st", "Sao Tome & Principe" }, + { 682, "sa", "Saudi Arabia" }, + { 686, "sn", "Senegal" }, + { 688, "rs", "Serbia" }, + { 690, "sc", "Seychelles" }, + { 694, "sl", "Sierra Leone" }, + { 702, "sg", "Singapore" }, + { 534, "sx", "Sint Maarten" }, + { 703, "sk", "Slovakia" }, + { 705, "si", "Slovenia" }, + { 90, "sb", "Solomon Islands" }, + { 706, "so", "Somalia" }, + { 710, "za", "South Africa" }, + { 239, "gs", "South Georgia & South Sandwich Is." }, + { 728, "ss", "South Sudan" }, + { 724, "es", "Spain" }, + { 144, "lk", "Sri Lanka" }, + { 654, "sh", "St. Helena" }, + { 666, "pm", "St. Pierre & Miquelon" }, + { 736, "sd", "Sudan" }, + { 740, "sr", "Suriname" }, + { 744, "sj", "Svalbard & Jan Mayen Islands" }, + { 752, "se", "Sweden" }, + { 756, "ch", "Switzerland" }, + { 760, "sy", "Syrian Arab Republic" }, + { 158, "tw", "Taiwan" }, + { 762, "tj", "Tajikistan" }, + { 834, "tz", "Tanzania" }, + { 764, "th", "Thailand" }, + { 626, "tl", "Timor-Leste" }, + { 768, "tg", "Togo" }, + { 772, "tk", "Tokelau" }, + { 776, "to", "Tonga" }, + { 780, "tt", "Trinidad & Tobago" }, + { 788, "tn", "Tunisia" }, + { 792, "tr", "Turkey" }, + { 795, "tm", "Turkmenistan" }, + { 796, "tc", "Turks & Caicos Islands" }, + { 798, "tv", "Tuvalu" }, + { 800, "ug", "Uganda" }, + { 804, "ua", "Ukraine" }, + { 784, "ae", "United Arab Emirates" }, + { 826, "gb", "United Kingdom" }, + { 840, "us", "United States" }, + { 581, "um", "United States Minor Outlying Islands" }, + { 858, "uy", "Uruguay" }, + { 860, "uz", "Uzbekistan" }, + { 548, "vu", "Vanuatu" }, + { 862, "ve", "Venezuela" }, + { 704, "vn", "Vietnam" }, + { 92, "vg", "Virgin Islands (British)" }, + { 850, "vi", "Virgin Islands (US)" }, + { 876, "wf", "Wallis & Futuna Islands" }, + { 732, "eh", "Western Sahara" }, + { 887, "ye", "Yemen" }, + { 894, "zm", "Zambia" }, + { 716, "zw", "Zimbabwe" } + }; + +/* + * Check if start of 'str' is simply an IPv4 address. + */ +#define BYTE_OK(x) ((x) >= 0 && (x) <= 255) + +static int is_addr(char *str, char **end) +{ + int a0, a1, a2, a3, num, rc = 0, length = 0; + + num = sscanf(str,"%3d.%3d.%3d.%3d%n",&a0,&a1,&a2,&a3,&length); + if( (num == 4) && + BYTE_OK(a0) && BYTE_OK(a1) && BYTE_OK(a2) && BYTE_OK(a3) && + length >= (3+4)) + { + rc = 1; + *end = str + length; + } + return rc; +} + +/* + * Find the country-code and name from the CNAME. E.g.: + * version 1: CNAME = zzno.countries.nerd.dk with address 127.0.2.66 + * yields ccode_A" = "no" and cnumber 578 (2.66). + * version 2: CNAME = .zz.countries.nerd.dk with address 127.0.2.66 + * yields cnumber 578 (2.66). ccode_A is ""; + */ +static void find_country_from_cname(const char *cname, struct in_addr addr) +{ + const struct search_list *country; + char ccode_A2[3], *ccopy, *dot_4; + int cnumber, z0, z1, ver_1, ver_2; + unsigned long ip; + + ip = ntohl(addr.s_addr); + z0 = TOLOWER(cname[0]); + z1 = TOLOWER(cname[1]); + ccopy = strdup(cname); + dot_4 = NULL; + + ver_1 = (z0 == 'z' && z1 == 'z' && !strcasecmp(cname+4,nerd_ver1)); + ver_2 = (is_addr(ccopy,&dot_4) && !strcasecmp(dot_4,nerd_ver2)); + + if (ver_1) + { + const char *dot = strchr(cname, '.'); + if (dot != cname+4) + { + printf("Unexpected CNAME %s (ver_1)\n", cname); + free(ccopy); + return; + } + } + else if (ver_2) + { + z0 = TOLOWER(dot_4[1]); + z1 = TOLOWER(dot_4[2]); + if (z0 != 'z' && z1 != 'z') + { + printf("Unexpected CNAME %s (ver_2)\n", cname); + free(ccopy); + return; + } + } + else + { + printf("Unexpected CNAME %s (ver?)\n", cname); + free(ccopy); + return; + } + + if (ver_1) + { + ccode_A2[0] = (char)TOLOWER(cname[2]); + ccode_A2[1] = (char)TOLOWER(cname[3]); + ccode_A2[2] = '\0'; + } + else + ccode_A2[0] = '\0'; + + cnumber = ip & 0xFFFF; + + TRACE(("Found country-code `%s', number %d\n", + ver_1 ? ccode_A2 : "", cnumber)); + + country = list_lookup(cnumber, country_list, + sizeof(country_list) / sizeof(country_list[0])); + if (!country) + printf("Name for country-number %d not found.\n", cnumber); + else + { + if (ver_1) + { + if ((country->short_name[0] != ccode_A2[0]) || + (country->short_name[1] != ccode_A2[1]) || + (country->short_name[2] != ccode_A2[2])) + printf("short-name mismatch; %s vs %s\n", + country->short_name, ccode_A2); + } + printf("%s (%s), number %d.\n", + country->long_name, country->short_name, cnumber); + } + free(ccopy); +} + +/* Information from the man page. Formatting taken from man -h */ +static void print_help_info_acountry(void) { + printf("acountry, version %s \n\n", ARES_VERSION_STR); + printf("usage: acountry [-hdv] {host|addr} ...\n\n" + " d : Print some extra debugging output.\n" + " h : Display this help and exit.\n" + " v : Be more verbose. Print extra information.\n\n"); + exit(0); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/adig.c nodejs-mozilla-12.22.12/deps/cares/src/tools/adig.c --- nodejs-mozilla-12.18.1/deps/cares/src/tools/adig.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/adig.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,983 @@ +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#ifdef HAVE_NETINET_IN_H +# include +#endif +#ifdef HAVE_ARPA_INET_H +# include +#endif +#ifdef HAVE_NETDB_H +# include +#endif + +#include "ares_nameser.h" + +#ifdef HAVE_STRINGS_H +# include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_getopt.h" +#include "ares_nowarn.h" + +#ifndef HAVE_STRDUP +# include "ares_strdup.h" +# define strdup(ptr) ares_strdup(ptr) +#endif + +#ifndef HAVE_STRCASECMP +# include "ares_strcasecmp.h" +# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2) +#endif + +#ifndef HAVE_STRNCASECMP +# include "ares_strcasecmp.h" +# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n) +#endif + +#ifdef WATT32 +#undef WIN32 /* Redefined in MingW headers */ +#endif + + +struct nv { + const char *name; + int value; +}; + +static const struct nv flags[] = { + { "usevc", ARES_FLAG_USEVC }, + { "primary", ARES_FLAG_PRIMARY }, + { "igntc", ARES_FLAG_IGNTC }, + { "norecurse", ARES_FLAG_NORECURSE }, + { "stayopen", ARES_FLAG_STAYOPEN }, + { "noaliases", ARES_FLAG_NOALIASES } +}; +static const int nflags = sizeof(flags) / sizeof(flags[0]); + +static const struct nv classes[] = { + { "IN", C_IN }, + { "CHAOS", C_CHAOS }, + { "HS", C_HS }, + { "ANY", C_ANY } +}; +static const int nclasses = sizeof(classes) / sizeof(classes[0]); + +static const struct nv types[] = { + { "A", T_A }, + { "NS", T_NS }, + { "MD", T_MD }, + { "MF", T_MF }, + { "CNAME", T_CNAME }, + { "SOA", T_SOA }, + { "MB", T_MB }, + { "MG", T_MG }, + { "MR", T_MR }, + { "NULL", T_NULL }, + { "WKS", T_WKS }, + { "PTR", T_PTR }, + { "HINFO", T_HINFO }, + { "MINFO", T_MINFO }, + { "MX", T_MX }, + { "TXT", T_TXT }, + { "RP", T_RP }, + { "AFSDB", T_AFSDB }, + { "X25", T_X25 }, + { "ISDN", T_ISDN }, + { "RT", T_RT }, + { "NSAP", T_NSAP }, + { "NSAP_PTR", T_NSAP_PTR }, + { "SIG", T_SIG }, + { "KEY", T_KEY }, + { "PX", T_PX }, + { "GPOS", T_GPOS }, + { "AAAA", T_AAAA }, + { "LOC", T_LOC }, + { "SRV", T_SRV }, + { "AXFR", T_AXFR }, + { "MAILB", T_MAILB }, + { "MAILA", T_MAILA }, + { "NAPTR", T_NAPTR }, + { "DS", T_DS }, + { "SSHFP", T_SSHFP }, + { "RRSIG", T_RRSIG }, + { "NSEC", T_NSEC }, + { "DNSKEY", T_DNSKEY }, + { "CAA", T_CAA }, + { "URI", T_URI }, + { "ANY", T_ANY } +}; +static const int ntypes = sizeof(types) / sizeof(types[0]); + +static const char *opcodes[] = { + "QUERY", "IQUERY", "STATUS", "(reserved)", "NOTIFY", + "(unknown)", "(unknown)", "(unknown)", "(unknown)", + "UPDATEA", "UPDATED", "UPDATEDA", "UPDATEM", "UPDATEMA", + "ZONEINIT", "ZONEREF" +}; + +static const char *rcodes[] = { + "NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED", + "(unknown)", "(unknown)", "(unknown)", "(unknown)", "(unknown)", + "(unknown)", "(unknown)", "(unknown)", "(unknown)", "NOCHANGE" +}; + +static void callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen); +static const unsigned char *display_question(const unsigned char *aptr, + const unsigned char *abuf, + int alen); +static const unsigned char *display_rr(const unsigned char *aptr, + const unsigned char *abuf, int alen); +static int convert_query (char **name, int use_bitstring); +static const char *type_name(int type); +static const char *class_name(int dnsclass); +static void usage(void); +static void destroy_addr_list(struct ares_addr_node *head); +static void append_addr_list(struct ares_addr_node **head, + struct ares_addr_node *node); +static void print_help_info_adig(void); + +int main(int argc, char **argv) +{ + ares_channel channel; + int c, i, optmask = ARES_OPT_FLAGS, dnsclass = C_IN, type = T_A; + int status, nfds, count; + int use_ptr_helper = 0; + struct ares_options options; + struct hostent *hostent; + fd_set read_fds, write_fds; + struct timeval *tvp, tv; + struct ares_addr_node *srvr, *servers = NULL; + +#ifdef USE_WINSOCK + WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK); + WSADATA wsaData; + WSAStartup(wVersionRequested, &wsaData); +#endif + + status = ares_library_init(ARES_LIB_INIT_ALL); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status)); + return 1; + } + + options.flags = ARES_FLAG_NOCHECKRESP; + options.servers = NULL; + options.nservers = 0; + while ((c = ares_getopt(argc, argv, "dh?f:s:c:t:T:U:x")) != -1) + { + switch (c) + { + case 'd': +#ifdef WATT32 + dbug_init(); +#endif + break; + case 'h': + print_help_info_adig(); + break; + case '?': + print_help_info_adig(); + break; + case 'f': + /* Add a flag. */ + for (i = 0; i < nflags; i++) + { + if (strcmp(flags[i].name, optarg) == 0) + break; + } + if (i < nflags) + options.flags |= flags[i].value; + else + usage(); + break; + + case 's': + /* User-specified name servers override default ones. */ + srvr = malloc(sizeof(struct ares_addr_node)); + if (!srvr) + { + fprintf(stderr, "Out of memory!\n"); + destroy_addr_list(servers); + return 1; + } + append_addr_list(&servers, srvr); + if (ares_inet_pton(AF_INET, optarg, &srvr->addr.addr4) > 0) + srvr->family = AF_INET; + else if (ares_inet_pton(AF_INET6, optarg, &srvr->addr.addr6) > 0) + srvr->family = AF_INET6; + else + { + hostent = gethostbyname(optarg); + if (!hostent) + { + fprintf(stderr, "adig: server %s not found.\n", optarg); + destroy_addr_list(servers); + return 1; + } + switch (hostent->h_addrtype) + { + case AF_INET: + srvr->family = AF_INET; + memcpy(&srvr->addr.addr4, hostent->h_addr, + sizeof(srvr->addr.addr4)); + break; + case AF_INET6: + srvr->family = AF_INET6; + memcpy(&srvr->addr.addr6, hostent->h_addr, + sizeof(srvr->addr.addr6)); + break; + default: + fprintf(stderr, + "adig: server %s unsupported address family.\n", optarg); + destroy_addr_list(servers); + return 1; + } + } + /* Notice that calling ares_init_options() without servers in the + * options struct and with ARES_OPT_SERVERS set simultaneously in + * the options mask, results in an initialization with no servers. + * When alternative name servers have been specified these are set + * later calling ares_set_servers() overriding any existing server + * configuration. To prevent initial configuration with default + * servers that will be discarded later, ARES_OPT_SERVERS is set. + * If this flag is not set here the result shall be the same but + * ares_init_options() will do needless work. */ + optmask |= ARES_OPT_SERVERS; + break; + + case 'c': + /* Set the query class. */ + for (i = 0; i < nclasses; i++) + { + if (strcasecmp(classes[i].name, optarg) == 0) + break; + } + if (i < nclasses) + dnsclass = classes[i].value; + else + usage(); + break; + + case 't': + /* Set the query type. */ + for (i = 0; i < ntypes; i++) + { + if (strcasecmp(types[i].name, optarg) == 0) + break; + } + if (i < ntypes) + type = types[i].value; + else + usage(); + break; + + case 'T': + /* Set the TCP port number. */ + if (!ISDIGIT(*optarg)) + usage(); + options.tcp_port = (unsigned short)strtol(optarg, NULL, 0); + optmask |= ARES_OPT_TCP_PORT; + break; + + case 'U': + /* Set the UDP port number. */ + if (!ISDIGIT(*optarg)) + usage(); + options.udp_port = (unsigned short)strtol(optarg, NULL, 0); + optmask |= ARES_OPT_UDP_PORT; + break; + + case 'x': + use_ptr_helper++; + break; + } + } + argc -= optind; + argv += optind; + if (argc == 0) + usage(); + + status = ares_init_options(&channel, &options, optmask); + + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_init_options: %s\n", + ares_strerror(status)); + return 1; + } + + if(servers) + { + status = ares_set_servers(channel, servers); + destroy_addr_list(servers); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_init_options: %s\n", + ares_strerror(status)); + return 1; + } + } + + /* Initiate the queries, one per command-line argument. If there is + * only one query to do, supply NULL as the callback argument; + * otherwise, supply the query name as an argument so we can + * distinguish responses for the user when printing them out. + */ + for (i = 1; *argv; i++, argv++) + { + char *query = *argv; + + if (type == T_PTR && dnsclass == C_IN && use_ptr_helper) + if (!convert_query (&query, use_ptr_helper >= 2)) + continue; + + ares_query(channel, query, dnsclass, type, callback, i < argc-1 ? (void*)query : NULL); + } + + /* Wait for all queries to complete. */ + for (;;) + { + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + nfds = ares_fds(channel, &read_fds, &write_fds); + if (nfds == 0) + break; + tvp = ares_timeout(channel, NULL, &tv); + count = select(nfds, &read_fds, &write_fds, NULL, tvp); + if (count < 0 && (status = SOCKERRNO) != EINVAL) + { + printf("select fail: %d", status); + return 1; + } + ares_process(channel, &read_fds, &write_fds); + } + + ares_destroy(channel); + + ares_library_cleanup(); + +#ifdef USE_WINSOCK + WSACleanup(); +#endif + + return 0; +} + +static void callback(void *arg, int status, int timeouts, + unsigned char *abuf, int alen) +{ + char *name = (char *) arg; + int id, qr, opcode, aa, tc, rd, ra, rcode; + unsigned int qdcount, ancount, nscount, arcount, i; + const unsigned char *aptr; + + (void) timeouts; + + /* Display the query name if given. */ + if (name) + printf("Answer for query %s:\n", name); + + /* Display an error message if there was an error, but only stop if + * we actually didn't get an answer buffer. + */ + if (status != ARES_SUCCESS) + { + printf("%s\n", ares_strerror(status)); + if (!abuf) + return; + } + + /* Won't happen, but check anyway, for safety. */ + if (alen < HFIXEDSZ) + return; + + /* Parse the answer header. */ + id = DNS_HEADER_QID(abuf); + qr = DNS_HEADER_QR(abuf); + opcode = DNS_HEADER_OPCODE(abuf); + aa = DNS_HEADER_AA(abuf); + tc = DNS_HEADER_TC(abuf); + rd = DNS_HEADER_RD(abuf); + ra = DNS_HEADER_RA(abuf); + rcode = DNS_HEADER_RCODE(abuf); + qdcount = DNS_HEADER_QDCOUNT(abuf); + ancount = DNS_HEADER_ANCOUNT(abuf); + nscount = DNS_HEADER_NSCOUNT(abuf); + arcount = DNS_HEADER_ARCOUNT(abuf); + + /* Display the answer header. */ + printf("id: %d\n", id); + printf("flags: %s%s%s%s%s\n", + qr ? "qr " : "", + aa ? "aa " : "", + tc ? "tc " : "", + rd ? "rd " : "", + ra ? "ra " : ""); + printf("opcode: %s\n", opcodes[opcode]); + printf("rcode: %s\n", rcodes[rcode]); + + /* Display the questions. */ + printf("Questions:\n"); + aptr = abuf + HFIXEDSZ; + for (i = 0; i < qdcount; i++) + { + aptr = display_question(aptr, abuf, alen); + if (aptr == NULL) + return; + } + + /* Display the answers. */ + printf("Answers:\n"); + for (i = 0; i < ancount; i++) + { + aptr = display_rr(aptr, abuf, alen); + if (aptr == NULL) + return; + } + + /* Display the NS records. */ + printf("NS records:\n"); + for (i = 0; i < nscount; i++) + { + aptr = display_rr(aptr, abuf, alen); + if (aptr == NULL) + return; + } + + /* Display the additional records. */ + printf("Additional records:\n"); + for (i = 0; i < arcount; i++) + { + aptr = display_rr(aptr, abuf, alen); + if (aptr == NULL) + return; + } +} + +static const unsigned char *display_question(const unsigned char *aptr, + const unsigned char *abuf, + int alen) +{ + char *name; + int type, dnsclass, status; + long len; + + /* Parse the question name. */ + status = ares_expand_name(aptr, abuf, alen, &name, &len); + if (status != ARES_SUCCESS) + return NULL; + aptr += len; + + /* Make sure there's enough data after the name for the fixed part + * of the question. + */ + if (aptr + QFIXEDSZ > abuf + alen) + { + ares_free_string(name); + return NULL; + } + + /* Parse the question type and class. */ + type = DNS_QUESTION_TYPE(aptr); + dnsclass = DNS_QUESTION_CLASS(aptr); + aptr += QFIXEDSZ; + + /* Display the question, in a format sort of similar to how we will + * display RRs. + */ + printf("\t%-15s.\t", name); + if (dnsclass != C_IN) + printf("\t%s", class_name(dnsclass)); + printf("\t%s\n", type_name(type)); + ares_free_string(name); + return aptr; +} + +static const unsigned char *display_rr(const unsigned char *aptr, + const unsigned char *abuf, int alen) +{ + const unsigned char *p; + int type, dnsclass, ttl, dlen, status, i; + long len; + int vlen; + char addr[46]; + union { + unsigned char * as_uchar; + char * as_char; + } name; + + /* Parse the RR name. */ + status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + aptr += len; + + /* Make sure there is enough data after the RR name for the fixed + * part of the RR. + */ + if (aptr + RRFIXEDSZ > abuf + alen) + { + ares_free_string(name.as_char); + return NULL; + } + + /* Parse the fixed part of the RR, and advance to the RR data + * field. */ + type = DNS_RR_TYPE(aptr); + dnsclass = DNS_RR_CLASS(aptr); + ttl = DNS_RR_TTL(aptr); + dlen = DNS_RR_LEN(aptr); + aptr += RRFIXEDSZ; + if (aptr + dlen > abuf + alen) + { + ares_free_string(name.as_char); + return NULL; + } + + /* Display the RR name, class, and type. */ + printf("\t%-15s.\t%d", name.as_char, ttl); + if (dnsclass != C_IN) + printf("\t%s", class_name(dnsclass)); + printf("\t%s", type_name(type)); + ares_free_string(name.as_char); + + /* Display the RR data. Don't touch aptr. */ + switch (type) + { + case T_CNAME: + case T_MB: + case T_MD: + case T_MF: + case T_MG: + case T_MR: + case T_NS: + case T_PTR: + /* For these types, the RR data is just a domain name. */ + status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + break; + + case T_HINFO: + /* The RR data is two length-counted character strings. */ + p = aptr; + len = *p; + if (p + len + 1 > aptr + dlen) + return NULL; + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s", name.as_char); + ares_free_string(name.as_char); + p += len; + len = *p; + if (p + len + 1 > aptr + dlen) + return NULL; + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s", name.as_char); + ares_free_string(name.as_char); + break; + + case T_MINFO: + /* The RR data is two domain names. */ + p = aptr; + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + p += len; + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + break; + + case T_MX: + /* The RR data is two bytes giving a preference ordering, and + * then a domain name. + */ + if (dlen < 2) + return NULL; + printf("\t%d", (int)DNS__16BIT(aptr)); + status = ares_expand_name(aptr + 2, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + break; + + case T_SOA: + /* The RR data is two domain names and then five four-byte + * numbers giving the serial number and some timeouts. + */ + p = aptr; + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.\n", name.as_char); + ares_free_string(name.as_char); + p += len; + status = ares_expand_name(p, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t\t\t\t\t\t%s.\n", name.as_char); + ares_free_string(name.as_char); + p += len; + if (p + 20 > aptr + dlen) + return NULL; + printf("\t\t\t\t\t\t( %u %u %u %u %u )", + DNS__32BIT(p), DNS__32BIT(p+4), + DNS__32BIT(p+8), DNS__32BIT(p+12), + DNS__32BIT(p+16)); + break; + + case T_TXT: + /* The RR data is one or more length-counted character + * strings. */ + p = aptr; + while (p < aptr + dlen) + { + len = *p; + if (p + len + 1 > aptr + dlen) + return NULL; + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s", name.as_char); + ares_free_string(name.as_char); + p += len; + } + break; + + case T_CAA: + + p = aptr; + + /* Flags */ + printf(" %u", (int)*p); + p += 1; + + /* Remainder of record */ + vlen = (int)dlen - ((char)*p) - 2; + + /* The Property identifier, one of: + - "issue", + - "iodef", or + - "issuewild" */ + status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len); + if (status != ARES_SUCCESS) + return NULL; + printf(" %s", name.as_char); + ares_free_string(name.as_char); + p += len; + + if (p + vlen > abuf + alen) + return NULL; + + /* A sequence of octets representing the Property Value */ + printf(" %.*s", vlen, p); + break; + + case T_A: + /* The RR data is a four-byte Internet address. */ + if (dlen != 4) + return NULL; + printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr))); + break; + + case T_AAAA: + /* The RR data is a 16-byte IPv6 address. */ + if (dlen != 16) + return NULL; + printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr))); + break; + + case T_WKS: + /* Not implemented yet */ + break; + + case T_SRV: + /* The RR data is three two-byte numbers representing the + * priority, weight, and port, followed by a domain name. + */ + + printf("\t%d", (int)DNS__16BIT(aptr)); + printf(" %d", (int)DNS__16BIT(aptr + 2)); + printf(" %d", (int)DNS__16BIT(aptr + 4)); + + status = ares_expand_name(aptr + 6, abuf, alen, &name.as_char, &len); + if (status != ARES_SUCCESS) + return NULL; + printf("\t%s.", name.as_char); + ares_free_string(name.as_char); + break; + + case T_URI: + /* The RR data is two two-byte numbers representing the + * priority and weight, followed by a target. + */ + + printf("\t%d ", (int)DNS__16BIT(aptr)); + printf("%d \t\t", (int)DNS__16BIT(aptr+2)); + p = aptr +4; + for (i=0; i "d.c.b.a".in-addr.arpa" for an IPv4 address. + * "a.b.c....x.y.z" -> "z.y.x....c.d.e.IP6.ARPA" for an IPv6 address. + * + * An example from 'dig -x PTR 2001:470:1:1b9::31': + * + * QUESTION SECTION: + * 1.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.b.1.0.1.0.0.0.0.7.4.0.1.0.0.2.IP6.ARPA. IN PTR + * + * ANSWER SECTION: + * 1.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.b.1.0.1.0.0.0.0.7.4.0.1.0.0.2.IP6.ARPA. 254148 IN PTR ipv6.cybernode.com. + * + * If 'use_bitstring == 1', try to use the more compact RFC-2673 bitstring format. + * Thus the above 'dig' query should become: + * [x13000000000000009b10100007401002].IP6.ARPA. IN PTR + */ +static int convert_query (char **name_p, int use_bitstring) +{ +#ifndef MAX_IP6_RR +#define MAX_IP6_RR (16*sizeof(".x.x") + sizeof(".IP6.ARPA") + 1) +#endif + +#ifdef HAVE_INET_PTON + #define ACCEPTED_RETVAL4 1 + #define ACCEPTED_RETVAL6 1 +#else + #define ACCEPTED_RETVAL4 32 + #define ACCEPTED_RETVAL6 128 +#endif + + static char new_name [MAX_IP6_RR]; + static const char hex_chars[] = "0123456789ABCDEF"; + + union { + struct in_addr addr4; + struct ares_in6_addr addr6; + } addr; + + if (ares_inet_pton (AF_INET, *name_p, &addr.addr4) == 1) + { + unsigned long laddr = ntohl(addr.addr4.s_addr); + unsigned long a1 = (laddr >> 24UL) & 0xFFUL; + unsigned long a2 = (laddr >> 16UL) & 0xFFUL; + unsigned long a3 = (laddr >> 8UL) & 0xFFUL; + unsigned long a4 = laddr & 0xFFUL; + + snprintf(new_name, sizeof(new_name), "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1); + *name_p = new_name; + return (1); + } + + if (ares_inet_pton(AF_INET6, *name_p, &addr.addr6) == 1) + { + char *c = new_name; + const unsigned char *ip = (const unsigned char*) &addr.addr6; + int max_i = (int)sizeof(addr.addr6) - 1; + int i, hi, lo; + + /* Use the more compact RFC-2673 notation? + * Currently doesn't work or unsupported by the DNS-servers I've tested against. + */ + if (use_bitstring) + { + *c++ = '\\'; + *c++ = '['; + *c++ = 'x'; + for (i = max_i; i >= 0; i--) + { + hi = ip[i] >> 4; + lo = ip[i] & 15; + *c++ = hex_chars [lo]; + *c++ = hex_chars [hi]; + } + strcpy (c, "].IP6.ARPA"); + } + else + { + for (i = max_i; i >= 0; i--) + { + hi = ip[i] >> 4; + lo = ip[i] & 15; + *c++ = hex_chars [lo]; + *c++ = '.'; + *c++ = hex_chars [hi]; + *c++ = '.'; + } + strcpy (c, "IP6.ARPA"); + } + *name_p = new_name; + return (1); + } + printf("Address %s was not legal for this query.\n", *name_p); + return (0); +} + +static const char *type_name(int type) +{ + int i; + + for (i = 0; i < ntypes; i++) + { + if (types[i].value == type) + return types[i].name; + } + return "(unknown)"; +} + +static const char *class_name(int dnsclass) +{ + int i; + + for (i = 0; i < nclasses; i++) + { + if (classes[i].value == dnsclass) + return classes[i].name; + } + return "(unknown)"; +} + +static void usage(void) +{ + fprintf(stderr, "usage: adig [-h] [-d] [-f flag] [-s server] [-c class] " + "[-t type] [-T|U port] [-x|-xx] name ...\n"); + exit(1); +} + +static void destroy_addr_list(struct ares_addr_node *head) +{ + while(head) + { + struct ares_addr_node *detached = head; + head = head->next; + free(detached); + } +} + +static void append_addr_list(struct ares_addr_node **head, + struct ares_addr_node *node) +{ + struct ares_addr_node *last; + node->next = NULL; + if(*head) + { + last = *head; + while(last->next) + last = last->next; + last->next = node; + } + else + *head = node; +} + + +/* Information from the man page. Formatting taken from man -h */ +static void print_help_info_adig(void) { + printf("adig, version %s \n\n", ARES_VERSION_STR); + printf("usage: adig [-h] [-d] [-f flag] [-s server] [-c class] [-t type] [-T|U port] [-x | -xx] name ...\n\n" + " d : Print some extra debugging output.\n" + " f : Add a flag. Possible values for flag are igntc, noaliases, norecurse, primary, stayopen, usevc.\n" + " h : Display this help and exit.\n\n" + " T port : Use specified TCP port to connect to DNS server.\n" + " U port : Use specified UDP port to connect to DNS server.\n" + " c class : Set the query class. Possible values for class are NY, CHAOS, HS, IN (default).\n" + " s server : Connect to specified DNS server, instead of the system's default one(s).\n" + " t type : Query records of specified type. \n" + " Possible values for type are A \n" + " (default), AAAA, AFSDB, ANY,\n" + " AXFR, CNAME, GPOS, HINFO, ISDN,\n" + " KEY, LOC, MAILA, MAILB, MB, MD,\n" + " MF, MG, MINFO, MR, MX, NAPTR, NS,\n" + " NSAP, NSAP_PTR, NULL, PTR, PX, RP,\n" + " RT, SIG, SOA, SRV, TXT, URI, WKS, X25\n\n" + " -x : For a '-t PTR a.b.c.d' lookup, query for 'd.c.b.a.in-addr.arpa.'\n" + " -xx : As above, but for IPv6, compact the format into a bitstring like\n" + " '[xabcdef00000000000000000000000000].IP6.ARPA.'\n"); + exit(0); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/ahost.c nodejs-mozilla-12.22.12/deps/cares/src/tools/ahost.c --- nodejs-mozilla-12.18.1/deps/cares/src/tools/ahost.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/ahost.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,231 @@ +/* Copyright 1998 by the Massachusetts Institute of Technology. + * + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +#include "ares_setup.h" + +#if !defined(WIN32) || defined(WATT32) +#include +#include +#include +#endif + +#ifdef HAVE_STRINGS_H +#include +#endif + +#include "ares.h" +#include "ares_dns.h" +#include "ares_getopt.h" +#include "ares_ipv6.h" +#include "ares_nowarn.h" + +#ifndef HAVE_STRDUP +# include "ares_strdup.h" +# define strdup(ptr) ares_strdup(ptr) +#endif + +#ifndef HAVE_STRCASECMP +# include "ares_strcasecmp.h" +# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2) +#endif + +#ifndef HAVE_STRNCASECMP +# include "ares_strcasecmp.h" +# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n) +#endif + +static void callback(void *arg, int status, int timeouts, struct hostent *host); +static void usage(void); +static void print_help_info_ahost(void); + +int main(int argc, char **argv) +{ + struct ares_options options; + int optmask = 0; + ares_channel channel; + int status, nfds, c, addr_family = AF_INET; + fd_set read_fds, write_fds; + struct timeval *tvp, tv; + struct in_addr addr4; + struct ares_in6_addr addr6; + +#ifdef USE_WINSOCK + WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK); + WSADATA wsaData; + WSAStartup(wVersionRequested, &wsaData); +#endif + + memset(&options, 0, sizeof(options)); + + status = ares_library_init(ARES_LIB_INIT_ALL); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status)); + return 1; + } + + while ((c = ares_getopt(argc,argv,"dt:h?s:")) != -1) + { + switch (c) + { + case 'd': +#ifdef WATT32 + dbug_init(); +#endif + break; + case 's': + optmask |= ARES_OPT_DOMAINS; + options.ndomains++; + options.domains = (char **)realloc(options.domains, + options.ndomains * sizeof(char *)); + options.domains[options.ndomains - 1] = strdup(optarg); + break; + case 't': + if (!strcasecmp(optarg,"a")) + addr_family = AF_INET; + else if (!strcasecmp(optarg,"aaaa")) + addr_family = AF_INET6; + else if (!strcasecmp(optarg,"u")) + addr_family = AF_UNSPEC; + else + usage(); + break; + case 'h': + print_help_info_ahost(); + break; + case '?': + print_help_info_ahost(); + break; + default: + usage(); + break; + } + } + + argc -= optind; + argv += optind; + if (argc < 1) + usage(); + + status = ares_init_options(&channel, &options, optmask); + if (status != ARES_SUCCESS) + { + fprintf(stderr, "ares_init: %s\n", ares_strerror(status)); + return 1; + } + + /* Initiate the queries, one per command-line argument. */ + for ( ; *argv; argv++) + { + if (ares_inet_pton(AF_INET, *argv, &addr4) == 1) + { + ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback, + *argv); + } + else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1) + { + ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback, + *argv); + } + else + { + ares_gethostbyname(channel, *argv, addr_family, callback, *argv); + } + } + + /* Wait for all queries to complete. */ + for (;;) + { + int res; + FD_ZERO(&read_fds); + FD_ZERO(&write_fds); + nfds = ares_fds(channel, &read_fds, &write_fds); + if (nfds == 0) + break; + tvp = ares_timeout(channel, NULL, &tv); + res = select(nfds, &read_fds, &write_fds, NULL, tvp); + if (-1 == res) + break; + ares_process(channel, &read_fds, &write_fds); + } + + ares_destroy(channel); + + ares_library_cleanup(); + +#ifdef USE_WINSOCK + WSACleanup(); +#endif + + return 0; +} + +static void callback(void *arg, int status, int timeouts, struct hostent *host) +{ + char **p; + + (void)timeouts; + + if (status != ARES_SUCCESS) + { + fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status)); + return; + } + + for (p = host->h_addr_list; *p; p++) + { + char addr_buf[46] = "??"; + + ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf)); + printf("%-32s\t%s", host->h_name, addr_buf); +#if 0 + if (host->h_aliases[0]) + { + int i; + + printf (", Aliases: "); + for (i = 0; host->h_aliases[i]; i++) + printf("%s ", host->h_aliases[i]); + } +#endif + puts(""); + } +} + +static void usage(void) +{ + fprintf(stderr, "usage: ahost [-h] [-d] [-s {domain}] [-t {a|aaaa|u}] {host|addr} ...\n"); + exit(1); +} + +/* Information from the man page. Formatting taken from man -h */ +static void print_help_info_ahost(void) { + printf("ahost, version %s \n\n", ARES_VERSION_STR); + printf("usage: ahost [-h] [-d] [-s {domain}] [-t {a|aaaa|u}] {host|addr} ...\n\n" + " d : Print some extra debugging output.\n" + " h : Display this help and exit.\n\n" + " s domain : Specify the domain to search instead of \n" + " using the default values from \n" + " /etc/resolv.conf. This option only has an \n" + " effect on platforms that use /etc/resolv.conf\n" + " for DNS configuration; it has no effect on other\n" + " platforms (such as Win32 or Android).\n" + " t type : If type is \"a\", print the A record (default).\n" + " If type is \"aaaa\", print the AAAA record. If\n" + " type is \"u\", look for either AAAA or A record\n" + " (in that order).\n\n"); + exit(0); +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/ares_getopt.c nodejs-mozilla-12.22.12/deps/cares/src/tools/ares_getopt.c --- nodejs-mozilla-12.18.1/deps/cares/src/tools/ares_getopt.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/ares_getopt.c 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,122 @@ +/* + * Original file name getopt.c Initial import into the c-ares source tree + * on 2007-04-11. Lifted from version 5.2 of the 'Open Mash' project with + * the modified BSD license, BSD license without the advertising clause. + * + */ + +/* + * getopt.c -- + * + * Standard UNIX getopt function. Code is from BSD. + * + * Copyright (c) 1987-2001 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * A. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * B. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * C. Neither the names of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS + * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* #if !defined(lint) + * static char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94"; + * #endif + */ + +#include +#include +#include +#include "ares_getopt.h" + +int opterr = 1, /* if error message should be printed */ + optind = 1; /* index into parent argv vector */ +int optopt = 0; /* character checked for validity */ +static int optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG (char *)"" + +/* + * ares_getopt -- + * Parse argc/argv argument vector. + */ +int +ares_getopt(int nargc, char * const nargv[], const char *ostr) +{ + static char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (EOF); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return (EOF); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || + (oli = strchr(ostr, optopt)) == NULL) { + /* + * if the user didn't specify '-' as an option, + * assume it means EOF. + */ + if (optopt == (int)'-') + return (EOF); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void)fprintf(stderr, + "%s: illegal option -- %c\n", __FILE__, optopt); + return (BADCH); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } + else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) + (void)fprintf(stderr, + "%s: option requires an argument -- %c\n", + __FILE__, optopt); + return (BADCH); + } + else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/ares_getopt.h nodejs-mozilla-12.22.12/deps/cares/src/tools/ares_getopt.h --- nodejs-mozilla-12.18.1/deps/cares/src/tools/ares_getopt.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/ares_getopt.h 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,53 @@ +#ifndef ARES_GETOPT_H +#define ARES_GETOPT_H + +/* + * Copyright (c) 1987-2001 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * A. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * B. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * C. Neither the names of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS + * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + + +int ares_getopt(int nargc, char * const nargv[], const char *ostr); + +#undef optarg +#undef optind +#undef opterr +#undef optopt +#undef optreset + +#define optarg ares_optarg +#define optind ares_optind +#define opterr ares_opterr +#define optopt ares_optopt +#define optreset ares_optreset + +extern char *optarg; +extern int optind; +extern int opterr; +extern int optopt; + +#endif /* ARES_GETOPT_H */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/CMakeLists.txt nodejs-mozilla-12.22.12/deps/cares/src/tools/CMakeLists.txt --- nodejs-mozilla-12.18.1/deps/cares/src/tools/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/CMakeLists.txt 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,55 @@ +IF (CARES_BUILD_TOOLS) + # Transform Makefile.inc + transform_makefile_inc("Makefile.inc" "${PROJECT_BINARY_DIR}/src/tools/Makefile.inc.cmake") + include(${PROJECT_BINARY_DIR}/src/tools/Makefile.inc.cmake) + + # Build ahost + ADD_EXECUTABLE (ahost ahost.c ${SAMPLESOURCES}) + TARGET_INCLUDE_DIRECTORIES (ahost + PUBLIC "$" + "$" + "$" + "$" + "$" + PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" + ) + TARGET_COMPILE_DEFINITIONS (ahost PRIVATE HAVE_CONFIG_H=1) + TARGET_LINK_LIBRARIES (ahost PRIVATE ${PROJECT_NAME}) + IF (CARES_INSTALL) + INSTALL (TARGETS ahost COMPONENT Tools ${TARGETS_INST_DEST}) + ENDIF () + + + # Build adig + ADD_EXECUTABLE (adig adig.c ${SAMPLESOURCES}) + TARGET_INCLUDE_DIRECTORIES (adig + PUBLIC "$" + "$" + "$" + "$" + "$" + PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" + ) + TARGET_COMPILE_DEFINITIONS (adig PRIVATE HAVE_CONFIG_H=1) + TARGET_LINK_LIBRARIES (adig PRIVATE ${PROJECT_NAME}) + IF (CARES_INSTALL) + INSTALL (TARGETS adig COMPONENT Tools ${TARGETS_INST_DEST}) + ENDIF () + + + # Build acountry + ADD_EXECUTABLE (acountry acountry.c ${SAMPLESOURCES}) + TARGET_INCLUDE_DIRECTORIES (acountry + PUBLIC "$" + "$" + "$" + "$" + "$" + PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" + ) + TARGET_COMPILE_DEFINITIONS (acountry PRIVATE HAVE_CONFIG_H=1) + TARGET_LINK_LIBRARIES (acountry PRIVATE ${PROJECT_NAME}) + IF (CARES_INSTALL) + INSTALL (TARGETS acountry COMPONENT Tools ${TARGETS_INST_DEST}) + ENDIF () +ENDIF () diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/Makefile.am nodejs-mozilla-12.22.12/deps/cares/src/tools/Makefile.am --- nodejs-mozilla-12.18.1/deps/cares/src/tools/Makefile.am 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/Makefile.am 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,36 @@ +AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6 +PROGS = ahost adig acountry + +EXTRA_DIST = CMakeLists.txt Makefile.inc + +noinst_PROGRAMS =$(PROGS) + +# Specify our include paths here, and do it relative to $(top_srcdir) and +# $(top_builddir), to ensure that these paths which belong to the library +# being currently built and tested are searched before the library which +# might possibly already be installed in the system. + +AM_CPPFLAGS = -I$(top_builddir)/include \ + -I$(top_builddir)/src/lib \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/src/lib + +if USE_CPPFLAG_CARES_STATICLIB +AM_CPPFLAGS += $(CPPFLAG_CARES_STATICLIB) +endif + +include Makefile.inc + +LDADD = $(top_builddir)/src/lib/libcares.la + +ahost_SOURCES = ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +ahost_CFLAGS = $(AM_CFLAGS) +ahost_CPPFLAGS = $(AM_CPPFLAGS) + +adig_SOURCES = adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +adig_CFLAGS = $(AM_CFLAGS) +adig_CPPFLAGS = $(AM_CPPFLAGS) + +acountry_SOURCES = acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +acountry_CFLAGS = $(AM_CFLAGS) +acountry_CPPFLAGS = $(AM_CPPFLAGS) diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/Makefile.in nodejs-mozilla-12.22.12/deps/cares/src/tools/Makefile.in --- nodejs-mozilla-12.18.1/deps/cares/src/tools/Makefile.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/Makefile.in 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,944 @@ +# Makefile.in generated by automake 1.16.5 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2021 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = $(am__EXEEXT_1) +@USE_CPPFLAG_CARES_STATICLIB_TRUE@am__append_1 = $(CPPFLAG_CARES_STATICLIB) +subdir = src/tools +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \ + $(top_srcdir)/m4/ax_ac_print_to_file.m4 \ + $(top_srcdir)/m4/ax_add_am_macro_static.m4 \ + $(top_srcdir)/m4/ax_am_macros_static.m4 \ + $(top_srcdir)/m4/ax_check_gnu_make.m4 \ + $(top_srcdir)/m4/ax_code_coverage.m4 \ + $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ + $(top_srcdir)/m4/ax_file_escapes.m4 \ + $(top_srcdir)/m4/ax_require_defined.m4 \ + $(top_srcdir)/m4/cares-compilers.m4 \ + $(top_srcdir)/m4/cares-confopts.m4 \ + $(top_srcdir)/m4/cares-functions.m4 \ + $(top_srcdir)/m4/cares-reentrant.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/xc-am-iface.m4 \ + $(top_srcdir)/m4/xc-cc-check.m4 \ + $(top_srcdir)/m4/xc-lt-iface.m4 \ + $(top_srcdir)/m4/xc-translit.m4 \ + $(top_srcdir)/m4/xc-val-flgs.m4 \ + $(top_srcdir)/m4/zz40-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/lib/ares_config.h \ + $(top_builddir)/include/ares_build.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__EXEEXT_1 = ahost$(EXEEXT) adig$(EXEEXT) acountry$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +am__dirstamp = $(am__leading_dot)dirstamp +am__objects_1 = acountry-ares_getopt.$(OBJEXT) \ + ../lib/acountry-ares_nowarn.$(OBJEXT) \ + ../lib/acountry-ares_strcasecmp.$(OBJEXT) +am__objects_2 = +am_acountry_OBJECTS = acountry-acountry.$(OBJEXT) $(am__objects_1) \ + $(am__objects_2) +acountry_OBJECTS = $(am_acountry_OBJECTS) +acountry_LDADD = $(LDADD) +acountry_DEPENDENCIES = $(top_builddir)/src/lib/libcares.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +acountry_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(acountry_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am__objects_3 = adig-ares_getopt.$(OBJEXT) \ + ../lib/adig-ares_nowarn.$(OBJEXT) \ + ../lib/adig-ares_strcasecmp.$(OBJEXT) +am_adig_OBJECTS = adig-adig.$(OBJEXT) $(am__objects_3) \ + $(am__objects_2) +adig_OBJECTS = $(am_adig_OBJECTS) +adig_LDADD = $(LDADD) +adig_DEPENDENCIES = $(top_builddir)/src/lib/libcares.la +adig_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(adig_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am__objects_4 = ahost-ares_getopt.$(OBJEXT) \ + ../lib/ahost-ares_nowarn.$(OBJEXT) \ + ../lib/ahost-ares_strcasecmp.$(OBJEXT) +am_ahost_OBJECTS = ahost-ahost.$(OBJEXT) $(am__objects_4) \ + $(am__objects_2) +ahost_OBJECTS = $(am_ahost_OBJECTS) +ahost_LDADD = $(LDADD) +ahost_DEPENDENCIES = $(top_builddir)/src/lib/libcares.la +ahost_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(ahost_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = ../lib/$(DEPDIR)/acountry-ares_nowarn.Po \ + ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po \ + ../lib/$(DEPDIR)/adig-ares_nowarn.Po \ + ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po \ + ../lib/$(DEPDIR)/ahost-ares_nowarn.Po \ + ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po \ + ./$(DEPDIR)/acountry-acountry.Po \ + ./$(DEPDIR)/acountry-ares_getopt.Po ./$(DEPDIR)/adig-adig.Po \ + ./$(DEPDIR)/adig-ares_getopt.Po ./$(DEPDIR)/ahost-ahost.Po \ + ./$(DEPDIR)/ahost-ares_getopt.Po +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(acountry_SOURCES) $(adig_SOURCES) $(ahost_SOURCES) +DIST_SOURCES = $(acountry_SOURCES) $(adig_SOURCES) $(ahost_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \ + $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_SUBDIRS = @BUILD_SUBDIRS@ +CARES_CFLAG_EXTRAS = @CARES_CFLAG_EXTRAS@ +CARES_PRIVATE_LIBS = @CARES_PRIVATE_LIBS@ +CARES_RANDOM_FILE = @CARES_RANDOM_FILE@ +CARES_VERSION_INFO = @CARES_VERSION_INFO@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_CARES_SYMBOL_HIDING = @CFLAG_CARES_SYMBOL_HIDING@ +CODE_COVERAGE_CFLAGS = @CODE_COVERAGE_CFLAGS@ +CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@ +CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@ +CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@ +CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAG_CARES_STATICLIB = @CPPFLAG_CARES_STATICLIB@ +CSCOPE = @CSCOPE@ +CTAGS = @CTAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ETAGS = @ETAGS@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GCOV = @GCOV@ +GENHTML = @GENHTML@ +GREP = @GREP@ +HAVE_CXX11 = @HAVE_CXX11@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LCOV = @LCOV@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +ifGNUmake = @ifGNUmake@ +ifnGNUmake = @ifnGNUmake@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6 +PROGS = ahost adig acountry +EXTRA_DIST = CMakeLists.txt Makefile.inc + +# Specify our include paths here, and do it relative to $(top_srcdir) and +# $(top_builddir), to ensure that these paths which belong to the library +# being currently built and tested are searched before the library which +# might possibly already be installed in the system. +AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/src/lib \ + -I$(top_srcdir)/include -I$(top_srcdir)/src/lib \ + $(am__append_1) +SAMPLESOURCES = ares_getopt.c \ + ../lib/ares_nowarn.c \ + ../lib/ares_strcasecmp.c + +SAMPLEHEADERS = ares_getopt.h \ + ../lib/ares_nowarn.h \ + ../lib/ares_strcasecmp.h + +LDADD = $(top_builddir)/src/lib/libcares.la +ahost_SOURCES = ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +ahost_CFLAGS = $(AM_CFLAGS) +ahost_CPPFLAGS = $(AM_CPPFLAGS) +adig_SOURCES = adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +adig_CFLAGS = $(AM_CFLAGS) +adig_CPPFLAGS = $(AM_CPPFLAGS) +acountry_SOURCES = acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS) +acountry_CFLAGS = $(AM_CFLAGS) +acountry_CPPFLAGS = $(AM_CPPFLAGS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/tools/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/tools/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; +$(srcdir)/Makefile.inc $(am__empty): + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +../lib/$(am__dirstamp): + @$(MKDIR_P) ../lib + @: > ../lib/$(am__dirstamp) +../lib/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ../lib/$(DEPDIR) + @: > ../lib/$(DEPDIR)/$(am__dirstamp) +../lib/acountry-ares_nowarn.$(OBJEXT): ../lib/$(am__dirstamp) \ + ../lib/$(DEPDIR)/$(am__dirstamp) +../lib/acountry-ares_strcasecmp.$(OBJEXT): ../lib/$(am__dirstamp) \ + ../lib/$(DEPDIR)/$(am__dirstamp) + +acountry$(EXEEXT): $(acountry_OBJECTS) $(acountry_DEPENDENCIES) $(EXTRA_acountry_DEPENDENCIES) + @rm -f acountry$(EXEEXT) + $(AM_V_CCLD)$(acountry_LINK) $(acountry_OBJECTS) $(acountry_LDADD) $(LIBS) +../lib/adig-ares_nowarn.$(OBJEXT): ../lib/$(am__dirstamp) \ + ../lib/$(DEPDIR)/$(am__dirstamp) +../lib/adig-ares_strcasecmp.$(OBJEXT): ../lib/$(am__dirstamp) \ + ../lib/$(DEPDIR)/$(am__dirstamp) + +adig$(EXEEXT): $(adig_OBJECTS) $(adig_DEPENDENCIES) $(EXTRA_adig_DEPENDENCIES) + @rm -f adig$(EXEEXT) + $(AM_V_CCLD)$(adig_LINK) $(adig_OBJECTS) $(adig_LDADD) $(LIBS) +../lib/ahost-ares_nowarn.$(OBJEXT): ../lib/$(am__dirstamp) \ + ../lib/$(DEPDIR)/$(am__dirstamp) +../lib/ahost-ares_strcasecmp.$(OBJEXT): ../lib/$(am__dirstamp) \ + ../lib/$(DEPDIR)/$(am__dirstamp) + +ahost$(EXEEXT): $(ahost_OBJECTS) $(ahost_DEPENDENCIES) $(EXTRA_ahost_DEPENDENCIES) + @rm -f ahost$(EXEEXT) + $(AM_V_CCLD)$(ahost_LINK) $(ahost_OBJECTS) $(ahost_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f ../lib/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/acountry-ares_nowarn.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/adig-ares_nowarn.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/adig-ares_strcasecmp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/ahost-ares_nowarn.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-acountry.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-ares_getopt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-adig.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-ares_getopt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ahost.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ares_getopt.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +acountry-acountry.o: acountry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-acountry.o -MD -MP -MF $(DEPDIR)/acountry-acountry.Tpo -c -o acountry-acountry.o `test -f 'acountry.c' || echo '$(srcdir)/'`acountry.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acountry-acountry.Tpo $(DEPDIR)/acountry-acountry.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acountry.c' object='acountry-acountry.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-acountry.o `test -f 'acountry.c' || echo '$(srcdir)/'`acountry.c + +acountry-acountry.obj: acountry.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-acountry.obj -MD -MP -MF $(DEPDIR)/acountry-acountry.Tpo -c -o acountry-acountry.obj `if test -f 'acountry.c'; then $(CYGPATH_W) 'acountry.c'; else $(CYGPATH_W) '$(srcdir)/acountry.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acountry-acountry.Tpo $(DEPDIR)/acountry-acountry.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acountry.c' object='acountry-acountry.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-acountry.obj `if test -f 'acountry.c'; then $(CYGPATH_W) 'acountry.c'; else $(CYGPATH_W) '$(srcdir)/acountry.c'; fi` + +acountry-ares_getopt.o: ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_getopt.o -MD -MP -MF $(DEPDIR)/acountry-ares_getopt.Tpo -c -o acountry-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acountry-ares_getopt.Tpo $(DEPDIR)/acountry-ares_getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='acountry-ares_getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c + +acountry-ares_getopt.obj: ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_getopt.obj -MD -MP -MF $(DEPDIR)/acountry-ares_getopt.Tpo -c -o acountry-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acountry-ares_getopt.Tpo $(DEPDIR)/acountry-ares_getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='acountry-ares_getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` + +../lib/acountry-ares_nowarn.o: ../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT ../lib/acountry-ares_nowarn.o -MD -MP -MF ../lib/$(DEPDIR)/acountry-ares_nowarn.Tpo -c -o ../lib/acountry-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/acountry-ares_nowarn.Tpo ../lib/$(DEPDIR)/acountry-ares_nowarn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/acountry-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o ../lib/acountry-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c + +../lib/acountry-ares_nowarn.obj: ../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT ../lib/acountry-ares_nowarn.obj -MD -MP -MF ../lib/$(DEPDIR)/acountry-ares_nowarn.Tpo -c -o ../lib/acountry-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/acountry-ares_nowarn.Tpo ../lib/$(DEPDIR)/acountry-ares_nowarn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/acountry-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o ../lib/acountry-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi` + +../lib/acountry-ares_strcasecmp.o: ../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT ../lib/acountry-ares_strcasecmp.o -MD -MP -MF ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Tpo -c -o ../lib/acountry-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_strcasecmp.c' object='../lib/acountry-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o ../lib/acountry-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c + +../lib/acountry-ares_strcasecmp.obj: ../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT ../lib/acountry-ares_strcasecmp.obj -MD -MP -MF ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Tpo -c -o ../lib/acountry-ares_strcasecmp.obj `if test -f '../lib/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_strcasecmp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_strcasecmp.c' object='../lib/acountry-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o ../lib/acountry-ares_strcasecmp.obj `if test -f '../lib/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_strcasecmp.c'; fi` + +adig-adig.o: adig.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-adig.o -MD -MP -MF $(DEPDIR)/adig-adig.Tpo -c -o adig-adig.o `test -f 'adig.c' || echo '$(srcdir)/'`adig.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/adig-adig.Tpo $(DEPDIR)/adig-adig.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='adig.c' object='adig-adig.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-adig.o `test -f 'adig.c' || echo '$(srcdir)/'`adig.c + +adig-adig.obj: adig.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-adig.obj -MD -MP -MF $(DEPDIR)/adig-adig.Tpo -c -o adig-adig.obj `if test -f 'adig.c'; then $(CYGPATH_W) 'adig.c'; else $(CYGPATH_W) '$(srcdir)/adig.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/adig-adig.Tpo $(DEPDIR)/adig-adig.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='adig.c' object='adig-adig.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-adig.obj `if test -f 'adig.c'; then $(CYGPATH_W) 'adig.c'; else $(CYGPATH_W) '$(srcdir)/adig.c'; fi` + +adig-ares_getopt.o: ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_getopt.o -MD -MP -MF $(DEPDIR)/adig-ares_getopt.Tpo -c -o adig-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/adig-ares_getopt.Tpo $(DEPDIR)/adig-ares_getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='adig-ares_getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c + +adig-ares_getopt.obj: ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-ares_getopt.obj -MD -MP -MF $(DEPDIR)/adig-ares_getopt.Tpo -c -o adig-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/adig-ares_getopt.Tpo $(DEPDIR)/adig-ares_getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='adig-ares_getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` + +../lib/adig-ares_nowarn.o: ../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/adig-ares_nowarn.o -MD -MP -MF ../lib/$(DEPDIR)/adig-ares_nowarn.Tpo -c -o ../lib/adig-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/adig-ares_nowarn.Tpo ../lib/$(DEPDIR)/adig-ares_nowarn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/adig-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o ../lib/adig-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c + +../lib/adig-ares_nowarn.obj: ../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/adig-ares_nowarn.obj -MD -MP -MF ../lib/$(DEPDIR)/adig-ares_nowarn.Tpo -c -o ../lib/adig-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/adig-ares_nowarn.Tpo ../lib/$(DEPDIR)/adig-ares_nowarn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/adig-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o ../lib/adig-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi` + +../lib/adig-ares_strcasecmp.o: ../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/adig-ares_strcasecmp.o -MD -MP -MF ../lib/$(DEPDIR)/adig-ares_strcasecmp.Tpo -c -o ../lib/adig-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/adig-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_strcasecmp.c' object='../lib/adig-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o ../lib/adig-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c + +../lib/adig-ares_strcasecmp.obj: ../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/adig-ares_strcasecmp.obj -MD -MP -MF ../lib/$(DEPDIR)/adig-ares_strcasecmp.Tpo -c -o ../lib/adig-ares_strcasecmp.obj `if test -f '../lib/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_strcasecmp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/adig-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_strcasecmp.c' object='../lib/adig-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o ../lib/adig-ares_strcasecmp.obj `if test -f '../lib/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_strcasecmp.c'; fi` + +ahost-ahost.o: ahost.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ahost.o -MD -MP -MF $(DEPDIR)/ahost-ahost.Tpo -c -o ahost-ahost.o `test -f 'ahost.c' || echo '$(srcdir)/'`ahost.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ahost-ahost.Tpo $(DEPDIR)/ahost-ahost.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ahost.c' object='ahost-ahost.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ahost.o `test -f 'ahost.c' || echo '$(srcdir)/'`ahost.c + +ahost-ahost.obj: ahost.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ahost.obj -MD -MP -MF $(DEPDIR)/ahost-ahost.Tpo -c -o ahost-ahost.obj `if test -f 'ahost.c'; then $(CYGPATH_W) 'ahost.c'; else $(CYGPATH_W) '$(srcdir)/ahost.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ahost-ahost.Tpo $(DEPDIR)/ahost-ahost.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ahost.c' object='ahost-ahost.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ahost.obj `if test -f 'ahost.c'; then $(CYGPATH_W) 'ahost.c'; else $(CYGPATH_W) '$(srcdir)/ahost.c'; fi` + +ahost-ares_getopt.o: ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ares_getopt.o -MD -MP -MF $(DEPDIR)/ahost-ares_getopt.Tpo -c -o ahost-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ahost-ares_getopt.Tpo $(DEPDIR)/ahost-ares_getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='ahost-ares_getopt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c + +ahost-ares_getopt.obj: ares_getopt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ahost-ares_getopt.obj -MD -MP -MF $(DEPDIR)/ahost-ares_getopt.Tpo -c -o ahost-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ahost-ares_getopt.Tpo $(DEPDIR)/ahost-ares_getopt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='ahost-ares_getopt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi` + +../lib/ahost-ares_nowarn.o: ../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/ahost-ares_nowarn.o -MD -MP -MF ../lib/$(DEPDIR)/ahost-ares_nowarn.Tpo -c -o ../lib/ahost-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/ahost-ares_nowarn.Tpo ../lib/$(DEPDIR)/ahost-ares_nowarn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/ahost-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ../lib/ahost-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c + +../lib/ahost-ares_nowarn.obj: ../lib/ares_nowarn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/ahost-ares_nowarn.obj -MD -MP -MF ../lib/$(DEPDIR)/ahost-ares_nowarn.Tpo -c -o ../lib/ahost-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/ahost-ares_nowarn.Tpo ../lib/$(DEPDIR)/ahost-ares_nowarn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/ahost-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ../lib/ahost-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi` + +../lib/ahost-ares_strcasecmp.o: ../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/ahost-ares_strcasecmp.o -MD -MP -MF ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Tpo -c -o ../lib/ahost-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_strcasecmp.c' object='../lib/ahost-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ../lib/ahost-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c + +../lib/ahost-ares_strcasecmp.obj: ../lib/ares_strcasecmp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/ahost-ares_strcasecmp.obj -MD -MP -MF ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Tpo -c -o ../lib/ahost-ares_strcasecmp.obj `if test -f '../lib/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_strcasecmp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_strcasecmp.c' object='../lib/ahost-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ../lib/ahost-ares_strcasecmp.obj `if test -f '../lib/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_strcasecmp.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f ../lib/$(DEPDIR)/$(am__dirstamp) + -rm -f ../lib/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -f ../lib/$(DEPDIR)/acountry-ares_nowarn.Po + -rm -f ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po + -rm -f ../lib/$(DEPDIR)/adig-ares_nowarn.Po + -rm -f ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po + -rm -f ../lib/$(DEPDIR)/ahost-ares_nowarn.Po + -rm -f ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po + -rm -f ./$(DEPDIR)/acountry-acountry.Po + -rm -f ./$(DEPDIR)/acountry-ares_getopt.Po + -rm -f ./$(DEPDIR)/adig-adig.Po + -rm -f ./$(DEPDIR)/adig-ares_getopt.Po + -rm -f ./$(DEPDIR)/ahost-ahost.Po + -rm -f ./$(DEPDIR)/ahost-ares_getopt.Po + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f ../lib/$(DEPDIR)/acountry-ares_nowarn.Po + -rm -f ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po + -rm -f ../lib/$(DEPDIR)/adig-ares_nowarn.Po + -rm -f ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po + -rm -f ../lib/$(DEPDIR)/ahost-ares_nowarn.Po + -rm -f ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po + -rm -f ./$(DEPDIR)/acountry-acountry.Po + -rm -f ./$(DEPDIR)/acountry-ares_getopt.Po + -rm -f ./$(DEPDIR)/adig-adig.Po + -rm -f ./$(DEPDIR)/adig-ares_getopt.Po + -rm -f ./$(DEPDIR)/ahost-ahost.Po + -rm -f ./$(DEPDIR)/ahost-ares_getopt.Po + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/tools/Makefile.inc nodejs-mozilla-12.22.12/deps/cares/src/tools/Makefile.inc --- nodejs-mozilla-12.18.1/deps/cares/src/tools/Makefile.inc 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/tools/Makefile.inc 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,7 @@ +SAMPLESOURCES = ares_getopt.c \ + ../lib/ares_nowarn.c \ + ../lib/ares_strcasecmp.c + +SAMPLEHEADERS = ares_getopt.h \ + ../lib/ares_nowarn.h \ + ../lib/ares_strcasecmp.h diff -Nru nodejs-mozilla-12.18.1/deps/cares/src/windows_port.c nodejs-mozilla-12.22.12/deps/cares/src/windows_port.c --- nodejs-mozilla-12.18.1/deps/cares/src/windows_port.c 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/src/windows_port.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -#include "ares_setup.h" - - -/* only do the following on windows - */ -#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS) - -#ifdef __WATCOMC__ -/* - * Watcom needs a DllMain() in order to initialise the clib startup code. - */ -BOOL -WINAPI DllMain (HINSTANCE hnd, DWORD reason, LPVOID reserved) -{ - (void) hnd; - (void) reason; - (void) reserved; - return (TRUE); -} -#endif - -#endif /* WIN32 builds only */ diff -Nru nodejs-mozilla-12.18.1/deps/cares/TODO nodejs-mozilla-12.22.12/deps/cares/TODO --- nodejs-mozilla-12.18.1/deps/cares/TODO 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cares/TODO 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,23 @@ +TODO +==== + +ares_reinit() + +- To allow an app to force a re-read of /etc/resolv.conf etc, pretty much + like the res_init() resolver function offers + +ares_gethostbyname + +- When built to support IPv6, it needs to also support PF_UNSPEC or similar, + so that an application can ask for any protocol and then c-ares would return + all known resolves and not just explicitly IPv4 _or_ IPv6 resolves. + +ares_process + +- Upon next ABI breakage ares_process() should be changed to return 'int' + and return ARES_ENOTINITIALIZED if ares_library_init() has not been called. + +ares_process_fd + +- Upon next ABI breakage ares_process_fd() should be changed to return + 'int' and return ARES_ENOTINITIALIZED if library has not been initialized. diff -Nru nodejs-mozilla-12.18.1/deps/cjs-module-lexer/CHANGELOG.md nodejs-mozilla-12.22.12/deps/cjs-module-lexer/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/cjs-module-lexer/CHANGELOG.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cjs-module-lexer/CHANGELOG.md 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,40 @@ +1.2.2 +- Fix RollupJS reexports bug (https://github.com/guybedford/cjs-module-lexer/pull/59) + +1.2.1 +- Support Unicode escapes in strings (https://github.com/guybedford/cjs-module-lexer/pull/55) +- Filter export strings to valid surrogate pairs (https://github.com/guybedford/cjs-module-lexer/pull/56) + +1.2.0 +- Support for non-identifier exports (https://github.com/guybedford/cjs-module-lexer/pull/54, @nicolo-ribaudo) + +1.1.1 +- Better support for Babel reexport getter function forms (https://github.com/guybedford/cjs-module-lexer/issues/50) +- Support Babel interopRequireWildcard reexports patterns (https://github.com/guybedford/cjs-module-lexer/issues/52) + +1.1.0 +- Support for Babel reexport conflict filter (https://github.com/guybedford/cjs-module-lexer/issues/36, @nicolo-ribaudo) +- Support trailing commas in getter patterns (https://github.com/guybedford/cjs-module-lexer/issues/31) +- Support for RollupJS reexports property checks (https://github.com/guybedford/cjs-module-lexer/issues/38) + +1.0.0 +- Unsafe getter tracking (https://github.com/guybedford/cjs-module-lexer/pull/29) + +0.6.0 +- API-only breaking change: Unify JS and Wasm interfaces (https://github.com/guybedford/cjs-module-lexer/pull/27) +- Add type definitions (https://github.com/guybedford/cjs-module-lexer/pull/28) + +0.5.2 +- Support named getter functions (https://github.com/guybedford/cjs-module-lexer/pull/26) + +0.5.1: +- Feature: Implement specific reexport getter forms (https://github.com/guybedford/cjs-module-lexer/pull/25) + +0.5.0 +- Breaking Change: No longer emit Object.defineProperty exports (https://github.com/guybedford/cjs-module-lexer/pull/24) +- Doc: Update link to WASI SDK (https://github.com/guybedford/cjs-module-lexer/pull/19) + +0.4.3 +- Support for Babel 7.12 reexports (https://github.com/guybedford/cjs-module-lexer/pull/16) +- Support module.exports = { ...require('x') } reexports (https://github.com/guybedford/cjs-module-lexer/pull/18) +- "if" keyword space parsing in exports matching (https://github.com/guybedford/cjs-module-lexer/pull/17) diff -Nru nodejs-mozilla-12.18.1/deps/cjs-module-lexer/dist/lexer.js nodejs-mozilla-12.22.12/deps/cjs-module-lexer/dist/lexer.js --- nodejs-mozilla-12.18.1/deps/cjs-module-lexer/dist/lexer.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cjs-module-lexer/dist/lexer.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1 @@ +"use strict";exports.parse=parse;exports.init=init;let A;const Q=1===new Uint8Array(new Uint16Array([1]).buffer)[0];function parse(g,I="@"){if(!A)throw new Error("Not initialized");const D=g.length+1,N=(A.__heap_base.value||A.__heap_base)+4*D-A.memory.buffer.byteLength;N>0&&A.memory.grow(Math.ceil(N/65536));const k=A.sa(D);if((Q?C:E)(g,new Uint16Array(A.memory.buffer,k,D)),!A.parseCJS(k,g.length,0,0,0))throw Object.assign(new Error(`Parse error ${I}${A.e()}:${g.slice(0,A.e()).split("\n").length}:${A.e()-g.lastIndexOf("\n",A.e()-1)}`),{idx:A.e()});let w=new Set,o=new Set,J=new Set;for(;A.rre();){const Q=B(g.slice(A.res(),A.ree()));Q&&o.add(Q)}for(;A.ru();)J.add(B(g.slice(A.us(),A.ue())));for(;A.re();){let Q=B(g.slice(A.es(),A.ee()));void 0===Q||J.has(Q)||w.add(Q)}return{exports:[...w],reexports:[...o]}}function B(A){if('"'!==A[0]&&"'"!==A[0])return A;try{const Q=(0,eval)(A);for(let A=0;A>>8}}function C(A,Q){const B=A.length;let E=0;for(;E{const Q=await WebAssembly.compile((B="AGFzbQEAAAABrAERYAJ/fwBgAABgAX8Bf2AAAX9gBn9/f39/fwF/YAF/AGAXf39/f39/f39/f39/f39/f39/f39/f38Bf2AIf39/f39/f38Bf2AHf39/f39/fwF/YAN/f38Bf2AFf39/f38Bf2AOf39/f39/f39/f39/f38Bf2AKf39/f39/f39/fwF/YAt/f39/f39/f39/fwF/YAJ/fwF/YAR/f39/AX9gCX9/f39/f39/fwF/A0NCAgMDAwMDAwMDAwMAAAABBAICBQQFAQECAgICAQUBAQUBAQYHAQIIAwICAgkKAgELAgwNDgQPCA4HAgICAhACAgMJBAUBcAEFBQUDAQABBg8CfwFB0JgCC38AQdCYAgsHXA4GbWVtb3J5AgACc2EAAAFlAAECZXMAAgJlZQADA3JlcwAEA3JlZQAFAnVzAAYCdWUABwJyZQAIA3JyZQAJAnJ1AAoIcGFyc2VDSlMADwtfX2hlYXBfYmFzZQMBCQoBAEEBCwQLDA0OCtOhAUJ4AQF/QQAoApgfIgEgAEEBdGoiAEEAOwEAQQAgAEECaiIANgLkH0EAIAA2AugfQQBBADYCwB9BAEEANgLIH0EAQQA2AsQfQQBBADYCzB9BAEEANgLUH0EAQQA2AtAfQQBBADYC2B9BAEEANgLgH0EAQQA2AtwfIAELCABBACgC7B8LFQBBACgCxB8oAgBBACgCmB9rQQF1CxUAQQAoAsQfKAIEQQAoApgfa0EBdQsVAEEAKALQHygCAEEAKAKYH2tBAXULFQBBACgC0B8oAgRBACgCmB9rQQF1CxUAQQAoAtwfKAIAQQAoApgfa0EBdQsVAEEAKALcHygCBEEAKAKYH2tBAXULJQEBf0EAQQAoAsQfIgBBCGpBwB8gABsoAgAiADYCxB8gAEEARwslAQF/QQBBACgC0B8iAEEIakHMHyAAGygCACIANgLQHyAAQQBHCyUBAX9BAEEAKALcHyIAQQhqQdgfIAAbKAIAIgA2AtwfIABBAEcLSAEBf0EAKALIHyICQQhqQcAfIAIbQQAoAugfIgI2AgBBACACNgLIH0EAIAJBDGo2AugfIAJBADYCCCACIAE2AgQgAiAANgIAC0gBAX9BACgC1B8iAkEIakHMHyACG0EAKALoHyICNgIAQQAgAjYC1B9BACACQQxqNgLoHyACQQA2AgggAiABNgIEIAIgADYCAAtIAQF/QQAoAuAfIgJBCGpB2B8gAhtBACgC6B8iAjYCAEEAIAI2AuAfQQAgAkEMajYC6B8gAkEANgIIIAIgATYCBCACIAA2AgALEgBBAEEANgLMH0EAQQA2AtQfC6MPAEEAIAE2AoBAQQAgADYCmB8CQCACRQ0AQQAgAjYCnB8LAkAgA0UNAEEAIAM2AqAfCwJAIARFDQBBACAENgKkHwtBAEH//wM7AYhAQQBBoMAANgKgYEEAQbDgADYCsKABQQBBgCA2ArSgAUEAQQAoAqwfNgKMQEEAIABBfmoiAjYCvKABQQAgAiABQQF0aiIDNgLAoAFBAEEAOwGGQEEAQQA7AYRAQQBBADoAkEBBAEEANgLsH0EAQQA6APAfQQBBADoAuKABAkACQCAALwEAQSNHDQAgAC8BAkEhRw0AQQEhAiABQQJGDQFBACAAQQJqNgK8oAEgAEEEaiEAAkADQCAAIgJBfmogA08NASACQQJqIQAgAi8BAEF2aiIBQQNLDQAgAQ4EAQAAAQELC0EAIAI2ArygAQsDQEEAIAJBAmoiADYCvKABAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACIANPDQACQCAALwEAIgFBd2oiA0EXSw0AQQEgA3RBn4CABHENFwsCQAJAQQAvAYZAIgMNACABQaF/aiIEQQ5NDQMgAUFZaiIEQQhNDQQgAUGFf2oiBEECTQ0FIAFBIkYNCyABQc8ARg0BIAFB8gBHDRUCQEEAEBBFDQAgABARRQ0AIAIQEgtBAEEAKAK8oAE2AoxADBgLIAFBWWoiBEEITQ0FIAFBoH9qIgRBBU0NBiABQYV/aiIEQQJNDQcgAUEiRg0KIAFBzwBGDQAgAUHtAEcNFAwTCyACQQRqQeIAQeoAQeUAQeMAQfQAEBNFDRMgABARRQ0TIANFEBQMEwtBAC8BiEBB//8DRkEALwGGQEVxQQAtAPAfRXEPCyAEDg8SBRERDhEPERERExERERASCyAEDgkGDAgQEBAQEAUGCyAEDgMJDwcJCyAEDgkECgkODg4ODgMECyAEDgYBDQ0KDQsBCyAEDgMGDAMGC0EALwGIQEH+/wNGDQMMBAsCQAJAIAIvAQQiAkEqRg0AIAJBL0cNARAVDA8LEBYMDgsCQAJAAkACQEEAKAKMQCIALwEAIgIQF0UNACACQVVqIgNBA0sNAgJAAkACQCADDgQBBQIAAQsgAEF+ai8BAEFQakH//wNxQQpJDQMMBAsgAEF+ai8BAEErRg0CDAMLIABBfmovAQBBLUYNAQwCCwJAAkAgAkH9AEYNACACQS9GDQEgAkEpRw0CQQAoArCgASADQQJ0aigCABAYRQ0CDAMLQQAoArCgASADQQJ0aigCABAZDQIgA0HQoAFqLQAARQ0BDAILQQAtAJBADQELIAAQGiEDIAJFDQBBASECIANFDQELEBtBACECC0EAIAI6AJBADAoLIAEQHAwJC0EAIANBf2oiADsBhkACQCADQQAvAYhAIgJHDQBBAEEALwGEQEF/aiICOwGEQEEAQQAoAqBgIAJB//8DcUEBdGovAQA7AYhADAILIAJB//8DRg0IIABB//8DcSACTw0ICxAdQQAhAgwMCxAeDAYLIANB0KABakEALQC4oAE6AABBACADQQFqOwGGQEEAKAKwoAEgA0ECdGpBACgCjEA2AgBBAEEAOgC4oAEMBQtBACADQX9qOwGGQAwEC0EAIANBAWo7AYZAQQAoArCgASADQQJ0akEAKAKMQDYCAAwDCyAAEBFFDQIgAi8BBEHsAEcNAiACLwEGQeEARw0CIAIvAQhB8wBHDQIgAi8BCkHzAEcNAgJAAkAgAi8BDCIDQXdqIgJBF0sNAEEBIAJ0QZ+AgARxDQELIANBoAFHDQMLQQBBAToAuKABDAILIAJBBGpB+ABB8ABB7wBB8gBB9AAQE0UNASAAEBFFDQECQCACLwEOQfMARw0AQQAQHwwCCyADDQEQIAwBCyACQQRqQe8AQeQAQfUAQewAQeUAEBNFDQAgABARRQ0AECELQQBBACgCvKABNgKMQAwCCwJAAkAgAkEEaiIDQekAQe4AQfQAQeUAQfIAQe8AQfAAQdIAQeUAQfEAQfUAQekAQfIAQeUAQdcAQekAQewAQeQAQeMAQeEAQfIAQeQAECJFDQACQCAAEBENACACLwEAQS5HDQELQQAgAkEwajYCvKABIAIvATBBKEcNAUEAIAJBMmo2ArygAUEAQQE7AYZAQQAoArCgAUEAKAKMQDYCAEEAEBBFDQEgABARRQ0BIAIQEgwBCyADQd8AQeUAQfgAQfAAQe8AQfIAQfQAECNFDQACQCAAEBENACACLwEAQS5HDQELQQAgAkESajYCvKABAkAgAi8BEiIDQdMARw0AIAIvARRB9ABHDQEgAi8BFkHhAEcNASACLwEYQfIARw0BQQAgAkEaajYCvKABIAIvARohAwsgA0H//wNxQShHDQBBACgCsKABQQAoAoxANgIAQQBBATsBhkBBAEEAKAK8oAEiAkECajYCvKABIAIvAQJB8gBHDQBBAhAQGgtBAEEAKAK8oAE2AoxADAELAkAgAkEEakHtAEHwAEHvAEHyAEH0ABATRQ0AIAAQEUUNABAkQQAoArygASEAC0EAIAA2AoxAC0EAKALAoAEhA0EAKAK8oAEhAgwACwsgAgv3AQEEf0EAIQECQEEAKAK8oAEiAkECakHlAEHxAEH1AEHpAEHyAEHlABAmRQ0AQQAhAUEAIAJBDmo2ArygAQJAECdBKEcNAEEAQQAoArygAUECajYCvKABECchA0EAKAK8oAEhBAJAIANBJ0YNACADQSJHDQELIAMQHEEAQQAoArygAUECaiIDNgK8oAEQJ0EpRw0AAkAgAEF/aiIBQQFLDQACQAJAIAEOAgEAAQsgBCADQQAoAqAfEQAAQQEPCyAEIANBACgCoB8RAABBAQ8LQQAoArSgASAENgIAQQAoArSgASADNgIEQQEPC0EAIAI2ArygAQsgAQsdAAJAQQAoApgfIABHDQBBAQ8LIABBfmovAQAQJQv+AgEEf0EAKAKYHyEBAkADQCAAQX5qIQIgAC8BACIDQSBHDQEgACABSyEEIAIhACAEDQALCwJAIANBPUcNAAJAA0AgAkF+aiEAIAIvAQBBIEcNASACIAFLIQQgACECIAQNAAsLIABBAmohAiAAQQRqIQNBACEEAkADQCACECghACACIAFNDQEgAEUNASAAQdwARg0CIAAQKUUNASACQX5BfCAAQYCABEkbaiECIAAQKiEEDAALCyAEQQFxRQ0AIAIvAQBBIEcNAEEAKAK0oAEiBEEAKAKwH0YNACAEIAM2AgwgBCACQQJqNgIIIAJBfmohAEEgIQICQANAIABBAmogAU0NASACQf//A3FBIEcNASAALwEAIQIgAEF+aiEADAALCyACQf//A3FBjn9qIgJBAksNAAJAAkACQCACDgMAAwEACyAAQfYAQeEAECsNAQwCCyAAQewAQeUAECsNACAAQeMAQe8AQe4AQfMAECxFDQELQQAgBEEQajYCtKABCws/AQF/QQAhBgJAIAAvAQAgAUcNACAALwECIAJHDQAgAC8BBCADRw0AIAAvAQYgBEcNACAALwEIIAVGIQYLIAYLpCYBCH9BAEEAKAK8oAEiAUEMajYCvKABIAFBCmohAQJAECdBLkcNAEEAQQAoArygAUECajYCvKABAkACQBAnIgJB5ABHDQBBACgCvKABIgBBAmpB5QBB5gBB6QBB7gBB5QBB0ABB8gBB7wBB8ABB5QBB8gBB9ABB+QAQL0UNAkEAIABBHGo2ArygASAAQRpqIQEQJ0EoRw0CQQBBACgCvKABQQJqNgK8oAEQJxAwRQ0CECdBLEcNAkEAQQAoArygAUECajYCvKABAkAQJyIAQSdGDQAgAEEiRw0DC0EAKAK8oAEhAiAAEBxBAEEAKAK8oAFBAmoiADYCvKABECdBLEcNAUEAQQAoArygAUECajYCvKABECdB+wBHDQFBAEEAKAK8oAFBAmo2ArygAQJAECciA0HlAEcNAEEAKAK8oAEiA0ECakHuAEH1AEHtAEHlAEHyAEHhAEHiAEHsAEHlABAxRQ0CQQAgA0EUajYCvKABECdBOkcNAkEAQQAoArygAUECajYCvKABECdB9ABHDQJBACgCvKABIgMvAQJB8gBHDQIgAy8BBEH1AEcNAiADLwEGQeUARw0CQQAgA0EIajYCvKABECdBLEcNAkEAQQAoArygAUECajYCvKABECchAwsCQCADQecARg0AIANB9gBHDQJBACgCvKABIgMvAQJB4QBHDQIgAy8BBEHsAEcNAiADLwEGQfUARw0CIAMvAQhB5QBHDQJBACADQQpqNgK8oAEQJ0E6Rw0CIAIgAEEAKAKcHxEAAEEAIAE2ArygAQ8LQQAoArygASIDLwECQeUARw0BIAMvAQRB9ABHDQFBACADQQZqNgK8oAECQBAnIgNBOkcNAEEAQQAoArygAUECajYCvKABECdB5gBHDQJBACgCvKABIgNBAmpB9QBB7gBB4wBB9ABB6QBB7wBB7gAQI0UNAkEAIANBEGoiAzYCvKABAkAQJyIEQShGDQAgA0EAKAK8oAFGDQMgBBAtRQ0DCxAnIQMLIANBKEcNAUEAQQAoArygAUECajYCvKABECdBKUcNAUEAQQAoArygAUECajYCvKABECdB+wBHDQFBAEEAKAK8oAFBAmo2ArygARAnQfIARw0BQQAoArygASIDQQJqQeUAQfQAQfUAQfIAQe4AEBNFDQFBACADQQxqNgK8oAEQJxAtRQ0BAkACQAJAECciA0HbAEYNACADQS5HDQJBAEEAKAK8oAFBAmo2ArygARAnEC0NAQwEC0EAQQAoArygAUECajYCvKABAkAQJyIDQSdGDQAgA0EiRw0ECyADEBxBAEEAKAK8oAFBAmo2ArygARAnQd0ARw0DQQBBACgCvKABQQJqNgK8oAELECchAwsCQCADQTtHDQBBAEEAKAK8oAFBAmo2ArygARAnIQMLIANB/QBHDQFBAEEAKAK8oAFBAmo2ArygAQJAECciA0EsRw0AQQBBACgCvKABQQJqNgK8oAEQJyEDCyADQf0ARw0BQQBBACgCvKABQQJqNgK8oAEQJ0EpRw0BIAIgAEEAKAKcHxEAAA8LIAJB6wBHDQEgAEUNAUEAKAK8oAEiAC8BAkHlAEcNASAALwEEQfkARw0BIAAvAQZB8wBHDQEgAEEGaiEBQQAgAEEIajYCvKABECdBKEcNAUEAQQAoArygAUECajYCvKABECchAEEAKAK8oAEhAiAAEC1FDQFBACgCvKABIQAQJ0EpRw0BQQBBACgCvKABIgFBAmo2ArygARAnQS5HDQFBAEEAKAK8oAFBAmo2ArygARAnQeYARw0BQQAoArygASIDQQJqQe8AQfIAQcUAQeEAQeMAQegAECZFDQFBACADQQ5qNgK8oAEQJyEDQQAoArygASIEQX5qIQEgA0EoRw0BQQAgBEECajYCvKABECdB5gBHDQFBACgCvKABIgNBAmpB9QBB7gBB4wBB9ABB6QBB7wBB7gAQI0UNAUEAIANBEGo2ArygARAnQShHDQFBAEEAKAK8oAFBAmo2ArygARAnIQNBACgCvKABIQQgAxAtRQ0BQQAoArygASEDECdBKUcNAUEAQQAoArygAUECajYCvKABECdB+wBHDQFBAEEAKAK8oAFBAmo2ArygARAnQekARw0BQQAoArygASIFLwECQeYARw0BQQAgBUEEajYCvKABECdBKEcNAUEAQQAoArygAUECajYCvKABECcaQQAoArygASIFIAQgAyAEayIDEEENASAAIAJrIgZBAXUhB0EAIAUgA0EBdSIIQQF0ajYCvKABAkACQAJAECciAEEhRg0AIABBPUcNBEEAKAK8oAEiAC8BAkE9Rw0EIAAvAQRBPUcNBEEAIABBBmo2ArygAQJAECciAEEnRg0AIABBIkcNBQtBACgCvKABIgVBAmpB5ABB5QBB5gBB4QBB9QBB7ABB9AAQI0UNBEEAIAVBEGo2ArygARAnIABHDQRBAEEAKAK8oAFBAmo2ArygARAnQfwARw0EQQAoArygASIALwECQfwARw0EQQAgAEEEajYCvKABECcaQQAoArygASIAIAQgAxBBDQRBACAAIAhBAXRqNgK8oAEQJ0E9Rw0EQQAoArygASIALwECQT1HDQQgAC8BBEE9Rw0EQQAgAEEGajYCvKABAkAQJyIAQSdGDQAgAEEiRw0FC0EAKAK8oAEiBUECakHfAEHfAEHlAEHzAEHNAEHvAEHkAEH1AEHsAEHlABAyRQ0EQQAgBUEWajYCvKABECcgAEcNBEEAQQAoArygAUECajYCvKABECdBKUcNBEEAQQAoArygAUECajYCvKABECdB8gBHDQRBACgCvKABIgBBAmpB5QBB9ABB9QBB8gBB7gAQE0UNBEEAIABBDGo2ArygAQJAECdBO0cNAEEAQQAoArygAUECajYCvKABCxAnIgBB6QBHDQJB6QAhAEEAKAK8oAEiBS8BAkHmAEcNAkEAIAVBBGo2ArygARAnQShHDQRBAEEAKAK8oAFBAmoiADYCvKABAkAgBCAIEDNFDQAQJ0EpRw0FQQBBACgCvKABQQJqNgK8oAEQJ0HyAEcNBUEAKAK8oAEiAEECakHlAEH0AEH1AEHyAEHuABATRQ0FQQAgAEEMajYCvKABAkAQJ0E7Rw0AQQBBACgCvKABQQJqNgK8oAELECciAEHpAEcNA0HpACEAQQAoArygASIFLwECQeYARw0DQQAgBUEEajYCvKABECdBKEcNBUEAKAK8oAFBAmohAAtBACAANgK8oAEgACAEIAMQQQ0EQQAgACAIQQF0ajYCvKABECdB6QBHDQRBACgCvKABIgAvAQJB7gBHDQQgAC8BBEEgRw0EQQAgAEEGajYCvKABECcQMEUNBBAnQSZHDQRBACgCvKABIgAvAQJBJkcNBEEAIABBBGo2ArygARAnEDBFDQQQJ0HbAEcNBEEAQQAoArygAUECajYCvKABECcaQQAoArygASIAIAQgAxBBDQRBACAAIAhBAXRqNgK8oAEQJ0HdAEcNBEEAQQAoArygAUECajYCvKABECdBPUcNBEEAKAK8oAEiAC8BAkE9Rw0EIAAvAQRBPUcNBEEAIABBBmo2ArygARAnGkEAKAK8oAEiACACIAYQQQ0EQQAgACAHQQF0ajYCvKABECdB2wBHDQRBAEEAKAK8oAFBAmo2ArygARAnGkEAKAK8oAEiACAEIAMQQQ0EQQAgACAIQQF0ajYCvKABECdB3QBHDQRBAEEAKAK8oAFBAmo2ArygARAnQSlHDQRBAEEAKAK8oAFBAmo2ArygARAnQfIARw0EQQAoArygASIAQQJqQeUAQfQAQfUAQfIAQe4AEBNFDQRBACAAQQxqNgK8oAEQJ0E7Rw0BQQBBACgCvKABQQJqNgK8oAEMAQtBACgCvKABIgAvAQJBPUcNAyAALwEEQT1HDQNBACAAQQZqNgK8oAECQBAnIgBBJ0YNACAAQSJHDQQLQQAoArygASIFQQJqQeQAQeUAQeYAQeEAQfUAQewAQfQAECNFDQNBACAFQRBqNgK8oAEQJyAARw0DQQBBACgCvKABQQJqNgK8oAECQBAnIgBBJkcNAEEAKAK8oAEiAC8BAkEmRw0EQQAgAEEEajYCvKABECdBIUcNBEEAQQAoArygAUECajYCvKABAkACQBAnIgBBzwBHDQBBACgCvKABQQJqQeIAQeoAQeUAQeMAQfQAQS4QJkUNACAEIAgQM0UNBgwBCyAAEC1FDQAQJ0EuRw0FQQBBACgCvKABQQJqNgK8oAEQJ0HoAEcNBUEAKAK8oAEiAEECakHhAEHzAEHPAEH3AEHuAEHQAEHyAEHvAEHwAEHlAEHyAEH0AEH5ABAvRQ0FQQAgAEEcajYCvKABECdBKEcNBUEAQQAoArygAUECajYCvKABECcaQQAoArygASIAIAQgAxBBDQVBACAAIAhBAXRqNgK8oAEQJ0EpRw0FQQBBACgCvKABQQJqNgK8oAELECchAAsgAEEpRw0DQQBBACgCvKABQQJqNgK8oAELECchAAsCQAJAAkAgABAwRQ0AECdB2wBHDQRBAEEAKAK8oAFBAmo2ArygARAnGkEAKAK8oAEiACAEIAMQQQ0EQQAgACAIQQF0ajYCvKABECdB3QBHDQRBAEEAKAK8oAFBAmo2ArygARAnQT1HDQRBAEEAKAK8oAFBAmo2ArygARAnGkEAKAK8oAEiACACIAYQQQ0EQQAgACAHQQF0ajYCvKABECdB2wBHDQRBAEEAKAK8oAFBAmo2ArygARAnGkEAKAK8oAEiACAEIAMQQQ0EQQAgACAIQQF0ajYCvKABECdB3QBHDQRBAEEAKAK8oAFBAmo2ArygARAnIgBBO0cNAkEAQQAoArygAUECajYCvKABDAELIABBzwBHDQNBACgCvKABIgBBAmpB4gBB6gBB5QBB4wBB9AAQE0UNA0EAIABBDGo2ArygARAnQS5HDQNBAEEAKAK8oAFBAmo2ArygARAnQeQARw0DQQAoArygASIAQQJqQeUAQeYAQekAQe4AQeUAQdAAQfIAQe8AQfAAQeUAQfIAQfQAQfkAEC9FDQNBACAAQRxqNgK8oAEQJ0EoRw0DQQBBACgCvKABQQJqNgK8oAEQJxAwRQ0DECdBLEcNA0EAQQAoArygAUECajYCvKABECcaQQAoArygASIAIAQgAxBBDQNBACAAIAhBAXRqNgK8oAEQJ0EsRw0DQQBBACgCvKABQQJqNgK8oAEQJ0H7AEcNA0EAQQAoArygAUECajYCvKABECdB5QBHDQNBACgCvKABIgBBAmpB7gBB9QBB7QBB5QBB8gBB4QBB4gBB7ABB5QAQMUUNA0EAIABBFGo2ArygARAnQTpHDQNBAEEAKAK8oAFBAmo2ArygARAnIQVBACgCvKABIQACQCAFQfQARg0AIAAvAQJB8gBHDQQgAC8BBEH1AEcNBCAALwEGQeUARw0EC0EAIABBCGo2ArygARAnQSxHDQNBAEEAKAK8oAFBAmo2ArygARAnQecARw0DQQAoArygASIALwECQeUARw0DIAAvAQRB9ABHDQNBACAAQQZqNgK8oAECQBAnIgBBOkcNAEEAQQAoArygAUECajYCvKABECdB5gBHDQRBACgCvKABIgBBAmpB9QBB7gBB4wBB9ABB6QBB7wBB7gAQI0UNBEEAIABBEGoiADYCvKABAkAQJyIFQShGDQAgAEEAKAK8oAFGDQUgBRAtRQ0FCxAnIQALIABBKEcNA0EAQQAoArygAUECajYCvKABECdBKUcNA0EAQQAoArygAUECajYCvKABECdB+wBHDQNBAEEAKAK8oAFBAmo2ArygARAnQfIARw0DQQAoArygASIAQQJqQeUAQfQAQfUAQfIAQe4AEBNFDQNBACAAQQxqNgK8oAEQJxpBACgCvKABIgAgAiAGEEENA0EAIAAgB0EBdGo2ArygARAnQdsARw0DQQBBACgCvKABQQJqNgK8oAEQJxpBACgCvKABIgAgBCADEEENA0EAIAAgCEEBdGo2ArygARAnQd0ARw0DQQBBACgCvKABQQJqNgK8oAECQBAnIgBBO0cNAEEAQQAoArygAUECajYCvKABECchAAsgAEH9AEcNA0EAQQAoArygAUECajYCvKABAkAQJyIAQSxHDQBBAEEAKAK8oAFBAmo2ArygARAnIQALIABB/QBHDQNBAEEAKAK8oAFBAmo2ArygARAnQSlHDQNBAEEAKAK8oAFBAmo2ArygARAnIgBBO0cNAUEAQQAoArygAUECajYCvKABCxAnIQALIABB/QBHDQFBAEEAKAK8oAFBAmo2ArygARAnQSlHDQFBACgCtKABIQRBgCAhAANAAkACQCAEIABGDQAgByAAQQxqKAIAIABBCGooAgAiA2tBAXVHDQEgAiADIAYQQQ0BIAAoAgAgAEEEaigCAEEAKAKgHxEAAEEAIAE2ArygAQsPCyAAQRBqIQAMAAsLIAIgAEEAKAKkHxEAAAtBACABNgK8oAELUwEEf0EAKAK8oAFBAmohAEEAKALAoAEhAQJAA0AgACICQX5qIAFPDQEgAkECaiEAIAIvAQBBdmoiA0EDSw0AIAMOBAEAAAEBCwtBACACNgK8oAELfAECf0EAQQAoArygASIAQQJqNgK8oAEgAEEGaiEAQQAoAsCgASEBA0ACQAJAAkAgAEF8aiABTw0AIABBfmovAQBBKkcNAiAALwEAQS9HDQJBACAAQX5qNgK8oAEMAQsgAEF+aiEAC0EAIAA2ArygAQ8LIABBAmohAAwACwt1AQF/AkACQCAAQV9qIgFBBUsNAEEBIAF0QTFxDQELIABBRmpB//8DcUEGSQ0AIABBWGpB//8DcUEHSSAAQSlHcQ0AAkAgAEGlf2oiAUEDSw0AIAEOBAEAAAEBCyAAQf0ARyAAQYV/akH//wNxQQRJcQ8LQQELPQEBf0EBIQECQCAAQfcAQegAQekAQewAQeUAEDQNACAAQeYAQe8AQfIAEDUNACAAQekAQeYAECshAQsgAQutAQEDf0EBIQECQAJAAkACQAJAAkACQCAALwEAIgJBRWoiA0EDTQ0AIAJBm39qIgNBA00NASACQSlGDQMgAkH5AEcNAiAAQX5qQeYAQekAQe4AQeEAQewAQewAEDYPCyADDgQCAQEFAgsgAw4EAgAAAwILQQAhAQsgAQ8LIABBfmpB5QBB7ABB8wAQNQ8LIABBfmpB4wBB4QBB9ABB4wAQLA8LIABBfmovAQBBPUYL7QMBAn9BACEBAkAgAC8BAEGcf2oiAkETSw0AAkACQAJAAkACQAJAAkACQCACDhQAAQIICAgICAgIAwQICAUIBggIBwALIABBfmovAQBBl39qIgJBA0sNBwJAAkAgAg4EAAkJAQALIABBfGpB9gBB7wAQKw8LIABBfGpB+QBB6QBB5QAQNQ8LIABBfmovAQBBjX9qIgJBAUsNBgJAAkAgAg4CAAEACwJAIABBfGovAQAiAkHhAEYNACACQewARw0IIABBempB5QAQNw8LIABBempB4wAQNw8LIABBfGpB5ABB5QBB7ABB5QAQLA8LIABBfmovAQBB7wBHDQUgAEF8ai8BAEHlAEcNBQJAIABBemovAQAiAkHwAEYNACACQeMARw0GIABBeGpB6QBB7gBB8wBB9ABB4QBB7gAQNg8LIABBeGpB9ABB+QAQKw8LQQEhASAAQX5qIgBB6QAQNw0EIABB8gBB5QBB9ABB9QBB8gAQNA8LIABBfmpB5AAQNw8LIABBfmpB5ABB5QBB4gBB9QBB5wBB5wBB5QAQOA8LIABBfmpB4QBB9wBB4QBB6QAQLA8LAkAgAEF+ai8BACICQe8ARg0AIAJB5QBHDQEgAEF8akHuABA3DwsgAEF8akH0AEHoAEHyABA1IQELIAELhwEBA38DQEEAQQAoArygASIAQQJqIgE2ArygAQJAAkACQCAAQQAoAsCgAU8NACABLwEAIgFBpX9qIgJBAU0NAgJAIAFBdmoiAEEDTQ0AIAFBL0cNBAwCCyAADgQAAwMAAAsQHQsPCwJAAkAgAg4CAQABC0EAIABBBGo2ArygAQwBCxBAGgwACwuVAQEEf0EAKAK8oAEhAUEAKALAoAEhAgJAAkADQCABIgNBAmohASADIAJPDQEgAS8BACIEIABGDQICQCAEQdwARg0AIARBdmoiA0EDSw0BIAMOBAIBAQICCyADQQRqIQEgAy8BBEENRw0AIANBBmogASADLwEGQQpGGyEBDAALC0EAIAE2ArygARAdDwtBACABNgK8oAELOAEBf0EAQQE6APAfQQAoArygASEAQQBBACgCwKABQQJqNgK8oAFBACAAQQAoApgfa0EBdTYC7B8LzgEBBX9BACgCvKABIQBBACgCwKABIQEDQCAAIgJBAmohAAJAAkAgAiABTw0AIAAvAQAiA0Gkf2oiBEEETQ0BIANBJEcNAiACLwEEQfsARw0CQQBBAC8BhEAiAEEBajsBhEBBACgCoGAgAEEBdGpBAC8BiEA7AQBBACACQQRqNgK8oAFBAEEALwGGQEEBaiIAOwGIQEEAIAA7AYZADwtBACAANgK8oAEQHQ8LAkACQCAEDgUBAgICAAELQQAgADYCvKABDwsgAkEEaiEADAALC7YCAQJ/QQBBACgCvKABIgFBDmo2ArygAQJAAkACQBAnIgJB2wBGDQAgAkE9Rg0BIAJBLkcNAkEAQQAoArygAUECajYCvKABECchAkEAKAK8oAEhACACEC1FDQJBACgCvKABIQIQJ0E9Rw0CIAAgAkEAKAKcHxEAAA8LQQBBACgCvKABQQJqNgK8oAECQBAnIgJBJ0YNACACQSJHDQILQQAoArygASEAIAIQHEEAQQAoArygAUECaiICNgK8oAEQJ0HdAEcNAUEAQQAoArygAUECajYCvKABECdBPUcNASAAIAJBACgCnB8RAAAMAQsgAEUNAEEAKAKoHxEBAEEAQQAoArygAUECajYCvKABAkAQJyICQfIARg0AIAJB+wBHDQEQLg8LQQEQEBoLQQAgAUEMajYCvKABCzYBAn9BAEEAKAK8oAFBDGoiADYCvKABECchAQJAAkBBACgCvKABIABHDQAgARA/RQ0BCxAdCwtsAQF/QQBBACgCvKABIgBBDGo2ArygAQJAECdBLkcNAEEAQQAoArygAUECajYCvKABECdB5QBHDQBBACgCvKABQQJqQfgAQfAAQe8AQfIAQfQAQfMAECZFDQBBARAfDwtBACAAQQpqNgK8oAEL6QEBAX9BACEXAkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZHDQAgAC8BDCAHRw0AIAAvAQ4gCEcNACAALwEQIAlHDQAgAC8BEiAKRw0AIAAvARQgC0cNACAALwEWIAxHDQAgAC8BGCANRw0AIAAvARogDkcNACAALwEcIA9HDQAgAC8BHiAQRw0AIAAvASAgEUcNACAALwEiIBJHDQAgAC8BJCATRw0AIAAvASYgFEcNACAALwEoIBVHDQAgAC8BKiAWRiEXCyAXC1MBAX9BACEIAkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZHDQAgAC8BDCAHRiEICyAIC6QBAQR/QQBBACgCvKABIgBBDGoiATYCvKABAkACQAJAAkACQBAnIgJBWWoiA0EHTQ0AIAJBIkYNAiACQfsARg0CDAELAkAgAw4IAgABAgEBAQMCC0EAQQAvAYZAIgNBAWo7AYZAQQAoArCgASADQQJ0aiAANgIADwtBACgCvKABIAFGDQILQQAvAYZARQ0AQQBBACgCvKABQX5qNgK8oAEPCxAdCws0AQF/QQEhAQJAIABBd2pB//8DcUEFSQ0AIABBgAFyQaABRg0AIABBLkcgABA/cSEBCyABC0kBAX9BACEHAkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZGIQcLIAcLegEDf0EAKAK8oAEhAAJAA0ACQCAALwEAIgFBd2pBBUkNACABQSBGDQAgAUGgAUYNACABQS9HDQICQCAALwECIgBBKkYNACAAQS9HDQMQFQwBCxAWC0EAQQAoArygASICQQJqIgA2ArygASACQQAoAsCgAUkNAAsLIAELOQEBfwJAIAAvAQAiAUGA+ANxQYC4A0cNACAAQX5qLwEAQf8HcUEKdCABQf8HcXJBgIAEaiEBCyABC30BAX8CQCAAQS9LDQAgAEEkRg8LAkAgAEE6SQ0AQQAhAQJAIABBwQBJDQAgAEHbAEkNAQJAIABB4ABLDQAgAEHfAEYPCyAAQfsASQ0BAkAgAEH//wNLDQAgAEGqAUkNASAAEDkPC0EBIQEgABA6DQAgABA7IQELIAEPC0EBC2MBAX8CQCAAQcAASw0AIABBJEYPC0EBIQECQCAAQdsASQ0AAkAgAEHgAEsNACAAQd8ARg8LIABB+wBJDQACQCAAQf//A0sNAEEAIQEgAEGqAUkNASAAEDwPCyAAEDohAQsgAQtMAQN/QQAhAwJAIABBfmoiBEEAKAKYHyIFSQ0AIAQvAQAgAUcNACAALwEAIAJHDQACQCAEIAVHDQBBAQ8LIABBfGovAQAQJSEDCyADC2YBA39BACEFAkAgAEF6aiIGQQAoApgfIgdJDQAgBi8BACABRw0AIABBfGovAQAgAkcNACAAQX5qLwEAIANHDQAgAC8BACAERw0AAkAgBiAHRw0AQQEPCyAAQXhqLwEAECUhBQsgBQuFAQECfyAAED4iABAqIQECQAJAIABB3ABGDQBBACECIAFFDQELQQAoArygAUECQQQgAEGAgARJG2ohAAJAA0BBACAANgK8oAEgAC8BABA+IgFFDQECQCABEClFDQAgAEECQQQgAUGAgARJG2ohAAwBCwtBACECIAFB3ABGDQELQQEhAgsgAgvaAwEEf0EAKAK8oAEiAEF+aiEBA0BBACAAQQJqNgK8oAECQAJAAkAgAEEAKALAoAFPDQAQJyEAQQAoArygASECAkACQCAAEC1FDQBBACgCvKABIQMCQAJAECciAEE6Rw0AQQBBACgCvKABQQJqNgK8oAEQJxAtRQ0BQQAoArygAS8BACEACyACIANBACgCnB8RAAAMAgtBACABNgK8oAEPCwJAAkAgAEEiRg0AIABBLkYNASAAQSdHDQQLQQAoArygASECIAAQHEEAQQAoArygAUECaiIDNgK8oAEQJyIAQTpHDQFBAEEAKAK8oAFBAmo2ArygAQJAECcQLUUNAEEAKAK8oAEvAQAhACACIANBACgCnB8RAAAMAgtBACABNgK8oAEPC0EAKAK8oAEiAC8BAkEuRw0CIAAvAQRBLkcNAkEAIABBBmo2ArygAQJAAkACQCAALwEGIgBB8gBHDQBBARAQIQBBACgCvKABIQIgAA0BIAIvAQAhAAsgAEH//wNxEC0NAUEAIAE2ArygAQ8LQQAgAkECajYCvKABCxAnIQALIABB//8DcSIAQSxGDQIgAEH9AEYNAEEAIAE2ArygAQsPC0EAIAE2ArygAQ8LQQAoArygASEADAALC48BAQF/QQAhDgJAIAAvAQAgAUcNACAALwECIAJHDQAgAC8BBCADRw0AIAAvAQYgBEcNACAALwEIIAVHDQAgAC8BCiAGRw0AIAAvAQwgB0cNACAALwEOIAhHDQAgAC8BECAJRw0AIAAvARIgCkcNACAALwEUIAtHDQAgAC8BFiAMRw0AIAAvARggDUYhDgsgDguoAQECf0EAIQFBACgCvKABIQICQAJAIABB7QBHDQAgAkECakHvAEHkAEH1AEHsAEHlABATRQ0BQQAgAkEMajYCvKABAkAQJ0EuRg0AQQAhAQwCC0EAQQAoArygAUECajYCvKABECchAAsgAEHlAEcNAEEAKAK8oAEiAEEOaiACIABBAmpB+ABB8ABB7wBB8gBB9ABB8wAQJiIBGyECC0EAIAI2ArygASABC2cBAX9BACEKAkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZHDQAgAC8BDCAHRw0AIAAvAQ4gCEcNACAALwEQIAlGIQoLIAoLcQEBf0EAIQsCQCAALwEAIAFHDQAgAC8BAiACRw0AIAAvAQQgA0cNACAALwEGIARHDQAgAC8BCCAFRw0AIAAvAQogBkcNACAALwEMIAdHDQAgAC8BDiAIRw0AIAAvARAgCUcNACAALwESIApGIQsLIAsLgwQBAn9BACECAkAQJ0HPAEcNAEEAIQJBACgCvKABIgNBAmpB4gBB6gBB5QBB4wBB9AAQE0UNAEEAIQJBACADQQxqNgK8oAEQJ0EuRw0AQQBBACgCvKABQQJqNgK8oAECQBAnIgNB8ABHDQBBACECQQAoArygASIDQQJqQfIAQe8AQfQAQe8AQfQAQfkAQfAAQeUAED1FDQFBACECQQAgA0ESajYCvKABECdBLkcNAUEAQQAoArygAUECajYCvKABECchAwtBACECIANB6ABHDQBBACECQQAoArygASIDQQJqQeEAQfMAQc8AQfcAQe4AQdAAQfIAQe8AQfAAQeUAQfIAQfQAQfkAEC9FDQBBACECQQAgA0EcajYCvKABECdBLkcNAEEAIQJBAEEAKAK8oAFBAmo2ArygARAnQeMARw0AQQAhAkEAKAK8oAEiAy8BAkHhAEcNACADLwEEQewARw0AIAMvAQZB7ABHDQBBACECQQAgA0EIajYCvKABECdBKEcNAEEAIQJBAEEAKAK8oAFBAmo2ArygARAnEC1FDQAQJ0EsRw0AQQAhAkEAQQAoArygAUECajYCvKABECcaQQAoArygASIDIAAgAUEBdCIBEEENAEEAIQJBACADIAFqNgK8oAEQJ0EpRw0AQQBBACgCvKABQQJqNgK8oAFBASECCyACC0kBA39BACEGAkAgAEF4aiIHQQAoApgfIghJDQAgByABIAIgAyAEIAUQE0UNAAJAIAcgCEcNAEEBDwsgAEF2ai8BABAlIQYLIAYLWQEDf0EAIQQCQCAAQXxqIgVBACgCmB8iBkkNACAFLwEAIAFHDQAgAEF+ai8BACACRw0AIAAvAQAgA0cNAAJAIAUgBkcNAEEBDwsgAEF6ai8BABAlIQQLIAQLSwEDf0EAIQcCQCAAQXZqIghBACgCmB8iCUkNACAIIAEgAiADIAQgBSAGECZFDQACQCAIIAlHDQBBAQ8LIABBdGovAQAQJSEHCyAHCz0BAn9BACECAkBBACgCmB8iAyAASw0AIAAvAQAgAUcNAAJAIAMgAEcNAEEBDwsgAEF+ai8BABAlIQILIAILTQEDf0EAIQgCQCAAQXRqIglBACgCmB8iCkkNACAJIAEgAiADIAQgBSAGIAcQI0UNAAJAIAkgCkcNAEEBDwsgAEFyai8BABAlIQgLIAgL+RIBA38CQCAAEDwNACAAQfS/f2pBAkkNACAAQbcBRg0AIABBgHpqQfAASQ0AIABB/XZqQQVJDQAgAEGHB0YNACAAQe90akEtSQ0AAkAgAEHBdGoiAUEISw0AQQEgAXRB7QJxDQELIABB8HNqQQtJDQAgAEG1c2pBH0kNAAJAIABBqnJqIgFBEksNAEEBIAF0Qf/8GXENAQsgAEHwDEYNACAAQZZyakEESQ0AIABBwHBqQQpJDQAgAEHacGpBC0kNACAAQdBxakEbSQ0AIABBkQ5GDQAgAEGQcmpBCkkNACAAQcJtakESSQ0AIABBxm1qQQNJDQAgAEGdbmpBIUkNACAAQa1uakEPSQ0AIABBp29qQQNJDQAgAEHXb2pBBUkNACAAQdtvakEDSQ0AIABB5W9qQQlJDQAgAEHqb2pBBEkNACAAQf0PRg0AIABBlXBqQQlJDQACQCAAQa9taiIBQRJLDQBBASABdEH/gBhxDQELIABBmm1qQQpJDQACQAJAIABBxGxqIgFBJ00NACAAQf9sakEDSQ0CDAELIAEOKAEAAQEBAQEBAQAAAQEAAAEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAQEBCyAAQf4TRg0AIABBmmxqQQpJDQACQCAAQcRraiIBQRVLDQBBASABdEH9sI4BcQ0BCyAAQf9rakEDSQ0AIABB9RRGDQAgAEGaa2pBDEkNAAJAAkAgAEHEamoiAUEnTQ0AIABB/2pqQQNJDQIMAQsgAQ4oAQABAQEBAQEBAQABAQEAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQELIABBmmpqQQpJDQAgAEGGampBBkkNAAJAAkAgAEHEaWoiAUEnTQ0AIABB/2lqQQNJDQIMAQsgAQ4oAQABAQEBAQEBAAABAQAAAQEBAAAAAAAAAAABAQAAAAAAAAAAAAABAQELIABBmmlqQQpJDQACQCAAQcJoaiIBQRlLDQBBASABdEGf7oMQcQ0BCyAAQYIXRg0AIABBmmhqQQpJDQACQAJAIABBwmdqIgFBJU0NACAAQYBoakEFSQ0CDAELIAEOJgEBAQEBAQEAAQEBAAEBAQEAAAAAAAAAAQEAAAAAAAAAAAAAAAEBAQsgAEGaZ2pBCkkNAAJAAkAgAEHEZmoiAUEnTQ0AIABB/2ZqQQNJDQIMAQsgAQ4oAQABAQEBAQEBAAEBAQABAQEBAAAAAAAAAAEBAAAAAAAAAAAAAAABAQELIABBmmZqQQpJDQAgAEF8cSICQYAaRg0AAkAgAEHFZWoiAUEoSw0AIAEOKQEBAAEBAQEBAQEAAQEBAAEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAEBAQsgAEGaZWpBCkkNAAJAIABBtmRqIgFBDEsNAEEBIAF0QeEvcQ0BCyAAQf5kakECSQ0AIABBeHFB2BtGDQAgAEGaZGpBCkkNAAJAIABBz2NqIgFBHUsNAEEBIAF0QfmHgP4DcQ0BCyAAQY5kakECSQ0AIABBsR1GDQAgAEGwY2pBCkkNAAJAIABBzGJqIgFBCEsNACABQQZHDQELIABBuGJqQQZJDQAgAEHgYWpBCkkNACAAQQFyIgFBmR5GDQAgAEGwYmpBCkkNAAJAIABBy2FqIgNBCksNAEEBIAN0QZUMcQ0BCyAAQfNgakELSQ0AIAFBhx9GDQAgAEGPYWpBFEkNACAAQe5RakEDSQ0AIABBl1lqQQlJDQAgAEGjWWpBA0kNACAAQfFeakEPSQ0AIABB/l5qQQxJDQAgAEGPX2pBBEkNACAAQZlfakEHSQ0AIABBnl9qQQNJDQAgAEGiX2pBA0kNACAAQapfakEESQ0AIABBwF9qQQpJDQAgAEHVX2pBFEkNACAAQcYfRg0AIABB52BqQSRJDQAgAEHOUWpBA0kNACAAQa5RakECSQ0AIABBjlFqQQJJDQAgAEH1T2pBA0kNACAAQaBQakEKSQ0AIABB3S9GDQAgAEHMUGpBIEkNACAAQbBGakEDSQ0AIABBsEdqQQpJDQAgAEHAR2pBCkkNACAAQdxHakEUSQ0AIABBmkhqQQ5JDQAgAEHQSGpBCkkNACAAQd9IakENSQ0AIABBgElqQQNJDQAgAEGVSWpBCUkNACAAQbBJakEKSQ0AIABBzElqQRFJDQAgAEGASmpBBUkNACAAQdBKakEOSQ0AIABB8EpqQQpJDQAgAEGBS2pBC0kNACAAQaBLakEdSQ0AIABBq0tqQQpJDQAgAEHpS2pBBUkNACAAQbBMakELSQ0AIABBuk1qQQpJDQAgAEHQTWpBDEkNACAAQeBNakEMSQ0AIABBqTFGDQAgAEHwT2pBCkkNACAAQcBEakE6SQ0AIABBiUZqQQNJDQAgAEGORmpBA0kNACAAQe05Rg0AIABBrEZqQRVJDQAgAEGFRGpBBUkNAAJAIABBwb9/aiIBQRVLDQBBASABdEGDgIABcQ0BCyAAQZu+f2pBDEkNACAAQeHBAEYNACAAQbC+f2pBDUkNACAAQZGmf2pBA0kNACAAQf/aAEYNACAAQWBxQeDbAEYNACAAQdaff2pBBkkNACAAQeeef2pBAkkNACAAQYyzfWpBCkkNACAAQe/MAkYNACAAQeCzfWpBCkkNAAJAIABB9a99aiIBQRxLDQBBASABdEGBgID4AXENAQsgAEHisn1qQQJJDQAgAEGQsn1qQQJJDQACQAJAIABB/q99aiIBQQRNDQAgAEGAr31qQQJJDQIMAQsgAQ4FAQAAAAEBCyAAQc2sfWpBDkkNACACQYDTAkYNACAAQbmtfWpBDUkNACAAQdqtfWpBCEkNACAAQYGufWpBC0kNACAAQaCufWpBEkkNACAAQcyufWpBEkkNACAAQbCufWpBCkkNACAAQderfWpBDkkNACAAQeXTAkYNACAAQV9xQbCsfWpBCkkNAAJAIABBvat9aiIBQQpLDQBBASABdEGBDHENAQsgAEGwq31qQQpJDQACQCAAQZ2ofWoiAUEKSw0AIAFBCEcNAQsCQCAAQdCqfWoiAUERSw0AQQEgAXRBnYMLcQ0BCwJAIABBlap9aiIBQQtLDQBBASABdEGfGHENAQsgAEGFq31qQQNJDQAgAEFwcSIBQYD8A0YNACAAQZ72A0YNACAAQZCofWpBCkkNACAAQb/+A0YgAEHwgXxqQQpJIABBs4N8akEDSSAAQc2DfGpBAkkgAUGg/ANGcnJycg8LQQELXAEEf0GAgAQhAUGQCCECQX4hAwJAA0BBACEEIANBAmoiA0HnA0sNASACKAIAIAFqIgEgAEsNASACQQRqIQQgAkEIaiECIAQoAgAgAWoiASAASQ0AC0EBIQQLIAQLXAEEf0GAgAQhAUGwFyECQX4hAwJAA0BBACEEIANBAmoiA0H5AUsNASACKAIAIAFqIgEgAEsNASACQQRqIQQgAkEIaiECIAQoAgAgAWoiASAASQ0AC0EBIQQLIAQL7R8BBn9BASEBAkACQAJAIABB1n5qIgJBEEsNAEEBIAJ0QYGQBHENAQsgAEG6empBDEkNACAAQYh+akHKA0kNACAAQcB+akEXSQ0AIABBqH5qQR9JDQACQCAAQZB5aiICQRxLDQBBASACdEHf+YK6AXENAQsCQCAAQaB6aiICQQ5LDQBBASACdEGfoAFxDQELIABB9nZqQaYBSQ0AIABBiXhqQYsBSQ0AIABB8nhqQRRJDQAgAEHdeGpB0wBJDQAgAEGRdGpBBEkNACAAQbB0akEbSQ0AIABBoHVqQSlJDQAgAEHZCkYNACAAQc91akEmSQ0AAkACQAJAIABBj3NqQeMASQ0AIABBAXIiAkHvDEYNACAAQeBzakErSQ0AAkAgAEGrcmoiAUE8Tw0AQoGAjLCAnIGACCABrYhCAYNQRQ0BCyAAQe5xakEeSQ0AIABBtnBqQSFJDQAgAEGxD0YNACAAQbNxakHZAEkNAAJAIABBjHBqIgFBBksNAEEBIAF0QcMAcQ0BCyAAQYBwakEWSQ0AAkACQCAAQdxvaiIDQQRNDQAgAEGaEEYNAgwBC0EBIQEgAw4FBAAAAAQECyAAQfxtakE2SQ0AIABBym5qQQhJDQAgAEHgbmpBFUkNACAAQcBvakEZSQ0AIABBoG9qQQtJDQAgAEG9EkYNACAAQdASRg0AIABBqG1qQQpJDQAgAEGPbWpBEEkNAAJAIABB+2xqIgNBDE8NAEEBIQFB/xkgA0H//wNxdkEBcQ0ECyAAQe1sakEWSQ0AAkAgAEGEbGoiAUEUSw0AQQEgAXRBgfzhAHENAQsgAEHWbGpBB0kNAAJAIABBzmxqIgFBHEsNAEEBIAF0QfGRgIABcQ0BCwJAIABBpGxqIgFBFUsNAEEBIAF0QbuAwAFxDQELIABB7WtqQRZJDQACQCAAQdZraiIBQTVPDQBC/7aDgICA4AsgAa2IQgGDUEUNAQsgAEHtampBFkkNACAAQfFqakEDSQ0AIABBjmtqQQNJDQAgAEH7ampBCUkNAAJAAkACQCAAQdZqaiIDQSZNDQAgAEGHamoiAUEXSw0BQQEgAXRBgeC/BnFFDQEMAwtBASEBIAMOJwUFBQUFBQUBBQUBBQUFBQUBAQEFAQEBAQEBAQEBAQEBAQEBAQEBBQULIABBoGpqQQJJDQELIABB7WlqQRZJDQACQAJAAkAgAEGPaWoiA0EzTQ0AIABB1mlqIgFBE0sNAUEBIAF0Qf/2I3FFDQEMAwtBASEBIAMONAUBAQEBAQEBAQEBAQEBAQEBAQUBBQUFBQUFAQEBBQUFAQUFBQUBAQEFBQEFAQUFAQEBBQUFCyAAQaRpaiIBQQVLDQAgAUECRw0BCyAAQdhoakEDSQ0AIABB7mdqQRdJDQAgAEHyZ2pBA0kNACAAQftnakEISQ0AIABB0BdGDQAgAEHSaGpBDEkNACAAQb0YRg0AIABB1mdqQRBJDQACQCAAQahnaiIBQSlPDQBCh4aAgIAgIAGtiEIBg1BFDQELIABB1mZqQQpJDQAgAEHuZmpBF0kNACAAQftmakEISQ0AIABB8mZqQQNJDQACQCAAQftlaiIBQQtLDQAgAUEIRw0BCwJAIABBy2ZqIgFBCEsNAEEBIAF0QZ8CcQ0BCwJAIABBomZqIgFBFEsNAEEBIAF0QY2A4ABxDQELIABB7mVqQSlJDQAgAEG9GkYNACAAQc4aRg0AIABBzWRqQQlJDQAgAEHmZGpBGEkNACAAQftkakESSQ0AIABBhmVqQQZJDQAgAEGsZWpBA0kNACAAQaFlakEDSQ0AAkAgAEHDZGoiA0EKTw0AQQEhAUH5ByADQf//A3F2QQFxDQQLIAJBsxxGDQAgAEH/Y2pBMEkNACAAQcBjakEHSQ0AAkAgAEH/YmoiAUEMSw0AQQEgAXRByyVxDQELIABBfHEiA0GUHUYNACAAQediakEHSQ0AAkAgAEHfYmoiAUEmTw0AQtfsm4D5BSABrYhCAYNQRQ0BCyAAQYBgakErSQ0AIABB+GBqQQVJDQAgAEG3YWpBJEkNACAAQXhxIgRBwB5GDQAgAEGAHkYNACADQdwdRg0AAkAgAEHBX2oiAUEoTw0AQoGA+MPHGCABrYhCAYNQRQ0BCyAAQZJfakEDSQ0AIABB4F5qQSZJDQAgAEGOIUYNACAAQYtfakENSQ0AIABBxyFGDQAgAEHNIUYNACAAQbZbakEESQ0AIABBsF5qQStJDQAgAEGEXmpBzQJJDQACQCAAQbBbaiIFQQlPDQBBASEBQf8CIAVB//8DcXZBAXENBAsgAEHOWmpBBEkNACAAQfBaakEhSQ0AIABB9lpqQQRJDQAgAEGmW2pBBEkNACAAQaBbakEpSQ0AAkAgAEHIWmoiBUEJTw0AQQEhAUH/AiAFQf//A3F2QQFxDQQLIABBgFFqQTRJDQAgAEGSUWpBA0kNACAAQaBRakENSQ0AIABBwFFqQRJJDQAgAEHgUWpBEkkNACAAQfJRakEESQ0AIABBgFJqQQ1JDQAgAEGSUmpBC0kNACAAQeBSakHLAEkNACAAQf9SakEaSQ0AIABBkVNqQRFJDQAgAEH/V2pB7ARJDQAgAEGIWGpBBkkNACAAQeBYakHWAEkNACAAQXBxIgVBgCdGDQAgAEHoWWpBwwBJDQAgAEHuWWpBBEkNACAAQahaakE5SQ0AIABBvlpqQQRJDQAgAEG4WmpBD0kNACAAQdcvRg0AIABB3C9GDQAgAEHgT2pB2QBJDQAgAEGATGpBF0kNACAAQdBMakEaSQ0AIABBgE1qQSxJDQAgAEGQTWpBBUkNACAAQbBNakEeSQ0AIABBgE5qQR9JDQAgAEHQTmpBxgBJDQAgAEGqMUYNBCAAQYBPakEpSQ0EIABBu0lqQQdJDQQgAEH7SWpBL0kNBCAAQac1Rg0EIABB4EtqQTVJDQQgAEGXRmpBBEkNBCAAQcNGakEDSQ0EIABB8EZqQStJDQQgAEGAR2pBCUkNBCAAQaZHakEkSQ0EIABBs0dqQQNJDQQgAEGASGpBJEkNBCAAQcZIakEsSQ0EIAJBrzdGDQQgAEH9SGpBHkkNBCAAQZJGaiIGQQlJDQEMAgtBASEBDAILQQEhAUGPAyAGQf//A3F2QQFxDQELIARB0D5GDQEgAEG4QWpBBkkNASAAQeBBakEmSQ0BIABB6EFqQQZJDQEgAEGARmpBwAFJDQEgAEGARGpBlgJJDQECQCAAQadBaiIBQQRLDQBBASABdEEVcQ0CCyAAQaFBakEfSQ0BIABBgEFqQTVJDQECQCAAQcpAaiIEQQlPDQBBASEBQf8CIARB//8DcXZBAXENAQsgAEGOQGpBA0kNASAAQaBAakENSQ0BIABBqkBqQQZJDQEgA0HQP0YNASAAQb5AakEDSQ0BIABBukBqQQdJDQEgAEGKQGpBB0kNASAAQfHAAEYNASAAQf/AAEYNASAAQfC+f2pBDUkNASAAQYLCAEYNASAAQYfCAEYNASAAQZXCAEYNASAAQfa9f2pBCkkNAQJAIABB6L1/aiIEQRFPDQBBASEBQb+gBSAEdkEBcQ0BCyAAQda9f2pBEEkNASADQbzCAEYNAQJAIABBu71/aiIEQQpPDQBBASEBQZ8EIARB//8DcXZBAXENAQsgAEGgp39qQYUBSQ0BIABB0Kd/akEvSQ0BIABBoL1/akEpSQ0BIABBgKh/akEvSQ0BAkAgAEGVpn9qIgRBCU8NAEEBIQFBjwMgBEH//wNxdkEBcQ0BCyAAQYCmf2pBJkkNASAAQafaAEYNASAAQa3aAEYNASAAQYC2fWpBjQJJDQEgAEGwtn1qQS5JDQEgAEGAwH1qQY0JSQ0BIABBgOR+akHwowFJDQEgAEGAmH9qQbYzSQ0BIAVB8OMARg0BIABB4Jx/akEbSQ0BIABBz51/akHeAEkNASAAQfudf2pBK0kNASADQfzhAEYNASAAQd+ef2pB2gBJDQEgAEHlnn9qQQVJDQEgAEG/n39qQdYASQ0BIABByJ9/akEFSQ0BIABBz59/akEFSQ0BIABB359/akEJSQ0BIABB+59/akEDSQ0BIABBqKR/akEHSQ0BIABBsKR/akEHSQ0BIABBuKR/akEHSQ0BIABBwKR/akEHSQ0BIABByKR/akEHSQ0BIABB0KR/akEHSQ0BIABB2KR/akEHSQ0BIABB4KR/akEHSQ0BIABBgKV/akEXSQ0BIABB79oARg0BIABB0KV/akE4SQ0BIABB/q59akEySQ0BIABBwK99akE0SQ0BIABB9K99akEXSQ0BIABB+a99akEESQ0BIABB/a99akEDSQ0BIABBibB9akELSQ0BIABB9bB9akEvSQ0BIABB3rF9akHnAEkNASAAQemxfWpBCUkNASAAQeCyfWpB0ABJDQEgAEGBs31qQR9JDQEgAEHAs31qQS9JDQEgAkGrzAJGDQEgBUGQzAJGDQECQCAAQY6ufWoiAkENTw0AQQEhAUG/NCACQf//A3F2QQFxDQELIABBoK19akEdSQ0BIABB9q19akEcSQ0BIABB0K19akEXSQ0BIABBvKt9akEISQ0BIABBwKt9akEDSQ0BIABBgKx9akEpSQ0BIABBhqx9akEFSQ0BIABBmqx9akEKSQ0BIABBoKx9akEFSQ0BIABBz9MCRg0BIABB/Kx9akEvSQ0BIABBgqt9akEySQ0BIABB+tQCRg0BIABBoKt9akEXSQ0BAkAgAEHPqn1qIgJBEk8NAEEBIQFBsb4KIAJ2QQFxDQELIABBgIp8akEHSQ0BIABBkIt8akHqAEkNASAAQYCOfGpB7gJJDQEgAEG10HxqQTFJDQEgAEHQ0HxqQRdJDQEgAEGAqH1qQaTXAEkNASAAQZCpfWpB8wBJDQEgAEGkqX1qQQpJDQEgAEHQqX1qQStJDQEgAEHYqX1qQQdJDQEgAEHgqX1qQQdJDQEgAEHvqX1qQQZJDQEgAEF3cUH/qX1qQQZJDQEgAEGOqn1qQQNJDQEgAEGlqn1qQQNJDQEgAEGgqn1qQQtJDQECQCAAQe2JfGoiAkELTw0AQQEhAUGfCCACQf//A3F2QQFxDQELIABB4Yl8akEKSQ0BIABB1ol8akENSQ0BAkAgAEHIiXxqIgJBDU8NAEEBIQFB3zYgAkH//wNxdkEBcQ0BCyAAQa6AfGpBBkkNASAAQbaAfGpBBkkNASAAQb6AfGpBBkkNASAAQZqBfGpB2QBJDQEgAEG/gXxqQRpJDQEgAEHfgXxqQRpJDQEgAEGKg3xqQYcBSQ0BIABBkIN8akEFSQ0BIABBkIR8akEMSQ0BIABB7oR8akE2SQ0BIABBsIV8akHAAEkNASAAQbqJfGpB7ABJDQFBASEBIABBrYh8akHrAkkNACAAQaaAfGpBA0kPCyABDwtBAQtdAQF/QQAhCQJAIAAvAQAgAUcNACAALwECIAJHDQAgAC8BBCADRw0AIAAvAQYgBEcNACAALwEIIAVHDQAgAC8BCiAGRw0AIAAvAQwgB0cNACAALwEOIAhGIQkLIAkLNQACQCAAQYD4A3FBgLADRw0AIABBCnRBgPg/cUEAKAK8oAEvAQJB/wdxckGAgARqIQALIAALaAECf0EBIQECQAJAIABBX2oiAkEFSw0AQQEgAnRBMXENAQsgAEH4/wNxQShGDQAgAEFGakH//wNxQQZJDQACQCAAQaV/aiICQQNLDQAgAkEBRw0BCyAAQYV/akH//wNxQQRJIQELIAELjQEBBX9BACgCvKABIQBBACgCwKABIQEDfyAAQQJqIQICQAJAIAAgAU8NACACLwEAIgNBpH9qIgRBAU0NASACIQAgA0F2aiIDQQNLDQIgAiEAIAMOBAACAgAAC0EAIAI2ArygARAdQQAPCwJAAkAgBA4CAQABC0EAIAI2ArygAUHdAA8LIABBBGohAAwACwtJAQN/QQAhAwJAIAJFDQACQANAIAAtAAAiBCABLQAAIgVHDQEgAUEBaiEBIABBAWohACACQX9qIgINAAwCCwsgBCAFayEDCyADCwvCFwIAQYAIC5gXAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAABkAAAACAAAAEgAAAAIAAAABAAAAAgAAAA4AAAADAAAADQAAACMAAAB6AAAARgAAADQAAAAMAQAAHAAAAAQAAAAwAAAAMAAAAB8AAAAOAAAAHQAAAAYAAAAlAAAACwAAAB0AAAADAAAAIwAAAAUAAAAHAAAAAgAAAAQAAAArAAAAnQAAABMAAAAjAAAABQAAACMAAAAFAAAAJwAAAAkAAAAzAAAAnQAAADYBAAAKAAAAFQAAAAsAAAAHAAAAmQAAAAUAAAADAAAAAAAAAAIAAAArAAAAAgAAAAEAAAAEAAAAAAAAAAMAAAAWAAAACwAAABYAAAAKAAAAHgAAAEIAAAASAAAAAgAAAAEAAAALAAAAFQAAAAsAAAAZAAAARwAAADcAAAAHAAAAAQAAAEEAAAAAAAAAEAAAAAMAAAACAAAAAgAAAAIAAAAcAAAAKwAAABwAAAAEAAAAHAAAACQAAAAHAAAAAgAAABsAAAAcAAAANQAAAAsAAAAVAAAACwAAABIAAAAOAAAAEQAAAG8AAABIAAAAOAAAADIAAAAOAAAAMgAAAA4AAAAjAAAAXQEAACkAAAAHAAAAAQAAAE8AAAAcAAAACwAAAAAAAAAJAAAAFQAAAGsAAAAUAAAAHAAAABYAAAANAAAANAAAAEwAAAAsAAAAIQAAABgAAAAbAAAAIwAAAB4AAAAAAAAAAwAAAAAAAAAJAAAAIgAAAAQAAAAAAAAADQAAAC8AAAAPAAAAAwAAABYAAAAAAAAAAgAAAAAAAAAkAAAAEQAAAAIAAAAYAAAAVQAAAAYAAAACAAAAAAAAAAIAAAADAAAAAgAAAA4AAAACAAAACQAAAAgAAAAuAAAAJwAAAAcAAAADAAAAAQAAAAMAAAAVAAAAAgAAAAYAAAACAAAAAQAAAAIAAAAEAAAABAAAAAAAAAATAAAAAAAAAA0AAAAEAAAAnwAAADQAAAATAAAAAwAAABUAAAACAAAAHwAAAC8AAAAVAAAAAQAAAAIAAAAAAAAAuQAAAC4AAAAqAAAAAwAAACUAAAAvAAAAFQAAAAAAAAA8AAAAKgAAAA4AAAAAAAAASAAAABoAAADmAAAAKwAAAHUAAAA/AAAAIAAAAAcAAAADAAAAAAAAAAMAAAAHAAAAAgAAAAEAAAACAAAAFwAAABAAAAAAAAAAAgAAAAAAAABfAAAABwAAAAMAAAAmAAAAEQAAAAAAAAACAAAAAAAAAB0AAAAAAAAACwAAACcAAAAIAAAAAAAAABYAAAAAAAAADAAAAC0AAAAUAAAAAAAAACMAAAA4AAAACAEAAAgAAAACAAAAJAAAABIAAAAAAAAAMgAAAB0AAABxAAAABgAAAAIAAAABAAAAAgAAACUAAAAWAAAAAAAAABoAAAAFAAAAAgAAAAEAAAACAAAAHwAAAA8AAAAAAAAASAEAABIAAAC+AAAAAAAAAFAAAACZAwAAZwAAAG4AAAASAAAAwwAAAL0KAAAuBAAA0g8AAEYCAAC6IQAAOAIAAAgAAAAeAAAAcgAAAB0AAAATAAAALwAAABEAAAADAAAAIAAAABQAAAAGAAAAEgAAALECAAA/AAAAgQAAAEoAAAAGAAAAAAAAAEMAAAAMAAAAQQAAAAEAAAACAAAAAAAAAB0AAAD3FwAACQAAANUEAAArAAAACAAAAPgiAAAeAQAAMgAAAAIAAAASAAAAAwAAAAkAAACLAQAABQkAAGoAAAAGAAAADAAAAAQAAAAIAAAACAAAAAkAAABnFwAAVAAAAAIAAABGAAAAAgAAAAEAAAADAAAAAAAAAAMAAAABAAAAAwAAAAMAAAACAAAACwAAAAIAAAAAAAAAAgAAAAYAAAACAAAAQAAAAAIAAAADAAAAAwAAAAcAAAACAAAABgAAAAIAAAAbAAAAAgAAAAMAAAACAAAABAAAAAIAAAAAAAAABAAAAAYAAAACAAAAUwEAAAMAAAAYAAAAAgAAABgAAAACAAAAHgAAAAIAAAAYAAAAAgAAAB4AAAACAAAAGAAAAAIAAAAeAAAAAgAAABgAAAACAAAAHgAAAAIAAAAYAAAAAgAAAAcAAAA1CQAALAAAAAsAAAAGAAAAEQAAAAAAAAByAQAAKwAAABUFAADEAAAAPAAAAEMAAAAIAAAAAAAAALUEAAADAAAAAgAAABoAAAACAAAAAQAAAAIAAAAAAAAAAwAAAAAAAAACAAAACQAAAAIAAAADAAAAAgAAAAAAAAACAAAAAAAAAAcAAAAAAAAABQAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAIAAAAAAAAAAwAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAABAAAAAgAAAAAAAAADAAAAAwAAAAIAAAAGAAAAAgAAAAMAAAACAAAAAwAAAAIAAAAAAAAAAgAAAAkAAAACAAAAEAAAAAYAAAACAAAAAgAAAAQAAAACAAAAEAAAAEURAADdpgAAIwAAADQQAAAMAAAA3QAAAAMAAACBFgAADwAAADAdAAAgDAAAHQIAAOMFAABKEwAA/QEAAAAAAADjAAAAAAAAAJYAAAAEAAAAJgEAAAkAAABYBQAAAgAAAAIAAAABAAAABgAAAAMAAAApAAAAAgAAAAUAAAAAAAAApgAAAAEAAAA+AgAAAwAAAAkAAAAJAAAAcgEAAAEAAACaAAAACgAAALAAAAACAAAANgAAAA4AAAAgAAAACQAAABAAAAADAAAALgAAAAoAAAA2AAAACQAAAAcAAAACAAAAJQAAAA0AAAACAAAACQAAAAYAAAABAAAALQAAAAAAAAANAAAAAgAAADEAAAANAAAACQAAAAMAAAACAAAACwAAAFMAAAALAAAABwAAAAAAAAChAAAACwAAAAYAAAAJAAAABwAAAAMAAAA4AAAAAQAAAAIAAAAGAAAAAwAAAAEAAAADAAAAAgAAAAoAAAAAAAAACwAAAAEAAAADAAAABgAAAAQAAAAEAAAAwQAAABEAAAAKAAAACQAAAAUAAAAAAAAAUgAAABMAAAANAAAACQAAANYAAAAGAAAAAwAAAAgAAAAcAAAAAQAAAFMAAAAQAAAAEAAAAAkAAABSAAAADAAAAAkAAAAJAAAAVAAAAA4AAAAFAAAACQAAAPMAAAAOAAAApgAAAAkAAABHAAAABQAAAAIAAAABAAAAAwAAAAMAAAACAAAAAAAAAAIAAAABAAAADQAAAAkAAAB4AAAABgAAAAMAAAAGAAAABAAAAAAAAAAdAAAACQAAACkAAAAGAAAAAgAAAAMAAAAJAAAAAAAAAAoAAAAKAAAALwAAAA8AAACWAQAABwAAAAIAAAAHAAAAEQAAAAkAAAA5AAAAFQAAAAIAAAANAAAAewAAAAUAAAAEAAAAAAAAAAIAAAABAAAAAgAAAAYAAAACAAAAAAAAAAkAAAAJAAAAMQAAAAQAAAACAAAAAQAAAAIAAAAEAAAACQAAAAkAAABKAQAAAwAAAGpLAAAJAAAAhwAAAAQAAAA8AAAABgAAABoAAAAJAAAA9gMAAAAAAAACAAAANgAAAAgAAAADAAAAUgAAAAAAAAAMAAAAAQAAAKxMAAABAAAAxxQAAAQAAAAEAAAABQAAAAkAAAAHAAAAAwAAAAYAAAAfAAAAAwAAAJUAAAACAAAAigUAADEAAAABAgAANgAAAAUAAAAxAAAACQAAAAAAAAAPAAAAAAAAABcAAAAEAAAAAgAAAA4AAABRBQAABgAAAAIAAAAQAAAAAwAAAAYAAAACAAAAAQAAAAIAAAAEAAAABgEAAAYAAAAKAAAACQAAAKMBAAANAAAA1wUAAAYAAABuAAAABgAAAAYAAAAJAAAAlxIAAAkAAAAHBQwA7wAAAABBmB8LHFCMAAABAAAAAgAAAAMAAAAEAAAAAAQAAPAfAAA=","undefined"!=typeof window&&"function"==typeof atob?Uint8Array.from(atob(B),A=>A.charCodeAt(0)):Buffer.from(B,"base64")));var B;const{exports:E}=await WebAssembly.instantiate(Q);A=E})())} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/cjs-module-lexer/dist/lexer.mjs nodejs-mozilla-12.22.12/deps/cjs-module-lexer/dist/lexer.mjs --- nodejs-mozilla-12.18.1/deps/cjs-module-lexer/dist/lexer.mjs 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cjs-module-lexer/dist/lexer.mjs 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,2 @@ +/* cjs-module-lexer 1.2.2 */ +let A;const Q=1===new Uint8Array(new Uint16Array([1]).buffer)[0];export function parse(g,I="@"){if(!A)throw new Error("Not initialized");const D=g.length+1,N=(A.__heap_base.value||A.__heap_base)+4*D-A.memory.buffer.byteLength;N>0&&A.memory.grow(Math.ceil(N/65536));const k=A.sa(D);if((Q?C:E)(g,new Uint16Array(A.memory.buffer,k,D)),!A.parseCJS(k,g.length,0,0,0))throw Object.assign(new Error(`Parse error ${I}${A.e()}:${g.slice(0,A.e()).split("\n").length}:${A.e()-g.lastIndexOf("\n",A.e()-1)}`),{idx:A.e()});let w=new Set,o=new Set,J=new Set;for(;A.rre();){const Q=B(g.slice(A.res(),A.ree()));Q&&o.add(Q)}for(;A.ru();)J.add(B(g.slice(A.us(),A.ue())));for(;A.re();){let Q=B(g.slice(A.es(),A.ee()));void 0===Q||J.has(Q)||w.add(Q)}return{exports:[...w],reexports:[...o]}}function B(A){if('"'!==A[0]&&"'"!==A[0])return A;try{const Q=(0,eval)(A);for(let A=0;A>>8}}function C(A,Q){const B=A.length;let E=0;for(;E{const Q=await WebAssembly.compile((B="AGFzbQEAAAABrAERYAJ/fwBgAABgAX8Bf2AAAX9gBn9/f39/fwF/YAF/AGAXf39/f39/f39/f39/f39/f39/f39/f38Bf2AIf39/f39/f38Bf2AHf39/f39/fwF/YAN/f38Bf2AFf39/f38Bf2AOf39/f39/f39/f39/f38Bf2AKf39/f39/f39/fwF/YAt/f39/f39/f39/fwF/YAJ/fwF/YAR/f39/AX9gCX9/f39/f39/fwF/A0NCAgMDAwMDAwMDAwMAAAABBAICBQQFAQECAgICAQUBAQUBAQYHAQIIAwICAgkKAgELAgwNDgQPCA4HAgICAhACAgMJBAUBcAEFBQUDAQABBg8CfwFB0JgCC38AQdCYAgsHXA4GbWVtb3J5AgACc2EAAAFlAAECZXMAAgJlZQADA3JlcwAEA3JlZQAFAnVzAAYCdWUABwJyZQAIA3JyZQAJAnJ1AAoIcGFyc2VDSlMADwtfX2hlYXBfYmFzZQMBCQoBAEEBCwQLDA0OCtOhAUJ4AQF/QQAoApgfIgEgAEEBdGoiAEEAOwEAQQAgAEECaiIANgLkH0EAIAA2AugfQQBBADYCwB9BAEEANgLIH0EAQQA2AsQfQQBBADYCzB9BAEEANgLUH0EAQQA2AtAfQQBBADYC2B9BAEEANgLgH0EAQQA2AtwfIAELCABBACgC7B8LFQBBACgCxB8oAgBBACgCmB9rQQF1CxUAQQAoAsQfKAIEQQAoApgfa0EBdQsVAEEAKALQHygCAEEAKAKYH2tBAXULFQBBACgC0B8oAgRBACgCmB9rQQF1CxUAQQAoAtwfKAIAQQAoApgfa0EBdQsVAEEAKALcHygCBEEAKAKYH2tBAXULJQEBf0EAQQAoAsQfIgBBCGpBwB8gABsoAgAiADYCxB8gAEEARwslAQF/QQBBACgC0B8iAEEIakHMHyAAGygCACIANgLQHyAAQQBHCyUBAX9BAEEAKALcHyIAQQhqQdgfIAAbKAIAIgA2AtwfIABBAEcLSAEBf0EAKALIHyICQQhqQcAfIAIbQQAoAugfIgI2AgBBACACNgLIH0EAIAJBDGo2AugfIAJBADYCCCACIAE2AgQgAiAANgIAC0gBAX9BACgC1B8iAkEIakHMHyACG0EAKALoHyICNgIAQQAgAjYC1B9BACACQQxqNgLoHyACQQA2AgggAiABNgIEIAIgADYCAAtIAQF/QQAoAuAfIgJBCGpB2B8gAhtBACgC6B8iAjYCAEEAIAI2AuAfQQAgAkEMajYC6B8gAkEANgIIIAIgATYCBCACIAA2AgALEgBBAEEANgLMH0EAQQA2AtQfC6MPAEEAIAE2AoBAQQAgADYCmB8CQCACRQ0AQQAgAjYCnB8LAkAgA0UNAEEAIAM2AqAfCwJAIARFDQBBACAENgKkHwtBAEH//wM7AYhAQQBBoMAANgKgYEEAQbDgADYCsKABQQBBgCA2ArSgAUEAQQAoAqwfNgKMQEEAIABBfmoiAjYCvKABQQAgAiABQQF0aiIDNgLAoAFBAEEAOwGGQEEAQQA7AYRAQQBBADoAkEBBAEEANgLsH0EAQQA6APAfQQBBADoAuKABAkACQCAALwEAQSNHDQAgAC8BAkEhRw0AQQEhAiABQQJGDQFBACAAQQJqNgK8oAEgAEEEaiEAAkADQCAAIgJBfmogA08NASACQQJqIQAgAi8BAEF2aiIBQQNLDQAgAQ4EAQAAAQELC0EAIAI2ArygAQsDQEEAIAJBAmoiADYCvKABAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCACIANPDQACQCAALwEAIgFBd2oiA0EXSw0AQQEgA3RBn4CABHENFwsCQAJAQQAvAYZAIgMNACABQaF/aiIEQQ5NDQMgAUFZaiIEQQhNDQQgAUGFf2oiBEECTQ0FIAFBIkYNCyABQc8ARg0BIAFB8gBHDRUCQEEAEBBFDQAgABARRQ0AIAIQEgtBAEEAKAK8oAE2AoxADBgLIAFBWWoiBEEITQ0FIAFBoH9qIgRBBU0NBiABQYV/aiIEQQJNDQcgAUEiRg0KIAFBzwBGDQAgAUHtAEcNFAwTCyACQQRqQeIAQeoAQeUAQeMAQfQAEBNFDRMgABARRQ0TIANFEBQMEwtBAC8BiEBB//8DRkEALwGGQEVxQQAtAPAfRXEPCyAEDg8SBRERDhEPERERExERERASCyAEDgkGDAgQEBAQEAUGCyAEDgMJDwcJCyAEDgkECgkODg4ODgMECyAEDgYBDQ0KDQsBCyAEDgMGDAMGC0EALwGIQEH+/wNGDQMMBAsCQAJAIAIvAQQiAkEqRg0AIAJBL0cNARAVDA8LEBYMDgsCQAJAAkACQEEAKAKMQCIALwEAIgIQF0UNACACQVVqIgNBA0sNAgJAAkACQCADDgQBBQIAAQsgAEF+ai8BAEFQakH//wNxQQpJDQMMBAsgAEF+ai8BAEErRg0CDAMLIABBfmovAQBBLUYNAQwCCwJAAkAgAkH9AEYNACACQS9GDQEgAkEpRw0CQQAoArCgASADQQJ0aigCABAYRQ0CDAMLQQAoArCgASADQQJ0aigCABAZDQIgA0HQoAFqLQAARQ0BDAILQQAtAJBADQELIAAQGiEDIAJFDQBBASECIANFDQELEBtBACECC0EAIAI6AJBADAoLIAEQHAwJC0EAIANBf2oiADsBhkACQCADQQAvAYhAIgJHDQBBAEEALwGEQEF/aiICOwGEQEEAQQAoAqBgIAJB//8DcUEBdGovAQA7AYhADAILIAJB//8DRg0IIABB//8DcSACTw0ICxAdQQAhAgwMCxAeDAYLIANB0KABakEALQC4oAE6AABBACADQQFqOwGGQEEAKAKwoAEgA0ECdGpBACgCjEA2AgBBAEEAOgC4oAEMBQtBACADQX9qOwGGQAwEC0EAIANBAWo7AYZAQQAoArCgASADQQJ0akEAKAKMQDYCAAwDCyAAEBFFDQIgAi8BBEHsAEcNAiACLwEGQeEARw0CIAIvAQhB8wBHDQIgAi8BCkHzAEcNAgJAAkAgAi8BDCIDQXdqIgJBF0sNAEEBIAJ0QZ+AgARxDQELIANBoAFHDQMLQQBBAToAuKABDAILIAJBBGpB+ABB8ABB7wBB8gBB9AAQE0UNASAAEBFFDQECQCACLwEOQfMARw0AQQAQHwwCCyADDQEQIAwBCyACQQRqQe8AQeQAQfUAQewAQeUAEBNFDQAgABARRQ0AECELQQBBACgCvKABNgKMQAwCCwJAAkAgAkEEaiIDQekAQe4AQfQAQeUAQfIAQe8AQfAAQdIAQeUAQfEAQfUAQekAQfIAQeUAQdcAQekAQewAQeQAQeMAQeEAQfIAQeQAECJFDQACQCAAEBENACACLwEAQS5HDQELQQAgAkEwajYCvKABIAIvATBBKEcNAUEAIAJBMmo2ArygAUEAQQE7AYZAQQAoArCgAUEAKAKMQDYCAEEAEBBFDQEgABARRQ0BIAIQEgwBCyADQd8AQeUAQfgAQfAAQe8AQfIAQfQAECNFDQACQCAAEBENACACLwEAQS5HDQELQQAgAkESajYCvKABAkAgAi8BEiIDQdMARw0AIAIvARRB9ABHDQEgAi8BFkHhAEcNASACLwEYQfIARw0BQQAgAkEaajYCvKABIAIvARohAwsgA0H//wNxQShHDQBBACgCsKABQQAoAoxANgIAQQBBATsBhkBBAEEAKAK8oAEiAkECajYCvKABIAIvAQJB8gBHDQBBAhAQGgtBAEEAKAK8oAE2AoxADAELAkAgAkEEakHtAEHwAEHvAEHyAEH0ABATRQ0AIAAQEUUNABAkQQAoArygASEAC0EAIAA2AoxAC0EAKALAoAEhA0EAKAK8oAEhAgwACwsgAgv3AQEEf0EAIQECQEEAKAK8oAEiAkECakHlAEHxAEH1AEHpAEHyAEHlABAmRQ0AQQAhAUEAIAJBDmo2ArygAQJAECdBKEcNAEEAQQAoArygAUECajYCvKABECchA0EAKAK8oAEhBAJAIANBJ0YNACADQSJHDQELIAMQHEEAQQAoArygAUECaiIDNgK8oAEQJ0EpRw0AAkAgAEF/aiIBQQFLDQACQAJAIAEOAgEAAQsgBCADQQAoAqAfEQAAQQEPCyAEIANBACgCoB8RAABBAQ8LQQAoArSgASAENgIAQQAoArSgASADNgIEQQEPC0EAIAI2ArygAQsgAQsdAAJAQQAoApgfIABHDQBBAQ8LIABBfmovAQAQJQv+AgEEf0EAKAKYHyEBAkADQCAAQX5qIQIgAC8BACIDQSBHDQEgACABSyEEIAIhACAEDQALCwJAIANBPUcNAAJAA0AgAkF+aiEAIAIvAQBBIEcNASACIAFLIQQgACECIAQNAAsLIABBAmohAiAAQQRqIQNBACEEAkADQCACECghACACIAFNDQEgAEUNASAAQdwARg0CIAAQKUUNASACQX5BfCAAQYCABEkbaiECIAAQKiEEDAALCyAEQQFxRQ0AIAIvAQBBIEcNAEEAKAK0oAEiBEEAKAKwH0YNACAEIAM2AgwgBCACQQJqNgIIIAJBfmohAEEgIQICQANAIABBAmogAU0NASACQf//A3FBIEcNASAALwEAIQIgAEF+aiEADAALCyACQf//A3FBjn9qIgJBAksNAAJAAkACQCACDgMAAwEACyAAQfYAQeEAECsNAQwCCyAAQewAQeUAECsNACAAQeMAQe8AQe4AQfMAECxFDQELQQAgBEEQajYCtKABCws/AQF/QQAhBgJAIAAvAQAgAUcNACAALwECIAJHDQAgAC8BBCADRw0AIAAvAQYgBEcNACAALwEIIAVGIQYLIAYLpCYBCH9BAEEAKAK8oAEiAUEMajYCvKABIAFBCmohAQJAECdBLkcNAEEAQQAoArygAUECajYCvKABAkACQBAnIgJB5ABHDQBBACgCvKABIgBBAmpB5QBB5gBB6QBB7gBB5QBB0ABB8gBB7wBB8ABB5QBB8gBB9ABB+QAQL0UNAkEAIABBHGo2ArygASAAQRpqIQEQJ0EoRw0CQQBBACgCvKABQQJqNgK8oAEQJxAwRQ0CECdBLEcNAkEAQQAoArygAUECajYCvKABAkAQJyIAQSdGDQAgAEEiRw0DC0EAKAK8oAEhAiAAEBxBAEEAKAK8oAFBAmoiADYCvKABECdBLEcNAUEAQQAoArygAUECajYCvKABECdB+wBHDQFBAEEAKAK8oAFBAmo2ArygAQJAECciA0HlAEcNAEEAKAK8oAEiA0ECakHuAEH1AEHtAEHlAEHyAEHhAEHiAEHsAEHlABAxRQ0CQQAgA0EUajYCvKABECdBOkcNAkEAQQAoArygAUECajYCvKABECdB9ABHDQJBACgCvKABIgMvAQJB8gBHDQIgAy8BBEH1AEcNAiADLwEGQeUARw0CQQAgA0EIajYCvKABECdBLEcNAkEAQQAoArygAUECajYCvKABECchAwsCQCADQecARg0AIANB9gBHDQJBACgCvKABIgMvAQJB4QBHDQIgAy8BBEHsAEcNAiADLwEGQfUARw0CIAMvAQhB5QBHDQJBACADQQpqNgK8oAEQJ0E6Rw0CIAIgAEEAKAKcHxEAAEEAIAE2ArygAQ8LQQAoArygASIDLwECQeUARw0BIAMvAQRB9ABHDQFBACADQQZqNgK8oAECQBAnIgNBOkcNAEEAQQAoArygAUECajYCvKABECdB5gBHDQJBACgCvKABIgNBAmpB9QBB7gBB4wBB9ABB6QBB7wBB7gAQI0UNAkEAIANBEGoiAzYCvKABAkAQJyIEQShGDQAgA0EAKAK8oAFGDQMgBBAtRQ0DCxAnIQMLIANBKEcNAUEAQQAoArygAUECajYCvKABECdBKUcNAUEAQQAoArygAUECajYCvKABECdB+wBHDQFBAEEAKAK8oAFBAmo2ArygARAnQfIARw0BQQAoArygASIDQQJqQeUAQfQAQfUAQfIAQe4AEBNFDQFBACADQQxqNgK8oAEQJxAtRQ0BAkACQAJAECciA0HbAEYNACADQS5HDQJBAEEAKAK8oAFBAmo2ArygARAnEC0NAQwEC0EAQQAoArygAUECajYCvKABAkAQJyIDQSdGDQAgA0EiRw0ECyADEBxBAEEAKAK8oAFBAmo2ArygARAnQd0ARw0DQQBBACgCvKABQQJqNgK8oAELECchAwsCQCADQTtHDQBBAEEAKAK8oAFBAmo2ArygARAnIQMLIANB/QBHDQFBAEEAKAK8oAFBAmo2ArygAQJAECciA0EsRw0AQQBBACgCvKABQQJqNgK8oAEQJyEDCyADQf0ARw0BQQBBACgCvKABQQJqNgK8oAEQJ0EpRw0BIAIgAEEAKAKcHxEAAA8LIAJB6wBHDQEgAEUNAUEAKAK8oAEiAC8BAkHlAEcNASAALwEEQfkARw0BIAAvAQZB8wBHDQEgAEEGaiEBQQAgAEEIajYCvKABECdBKEcNAUEAQQAoArygAUECajYCvKABECchAEEAKAK8oAEhAiAAEC1FDQFBACgCvKABIQAQJ0EpRw0BQQBBACgCvKABIgFBAmo2ArygARAnQS5HDQFBAEEAKAK8oAFBAmo2ArygARAnQeYARw0BQQAoArygASIDQQJqQe8AQfIAQcUAQeEAQeMAQegAECZFDQFBACADQQ5qNgK8oAEQJyEDQQAoArygASIEQX5qIQEgA0EoRw0BQQAgBEECajYCvKABECdB5gBHDQFBACgCvKABIgNBAmpB9QBB7gBB4wBB9ABB6QBB7wBB7gAQI0UNAUEAIANBEGo2ArygARAnQShHDQFBAEEAKAK8oAFBAmo2ArygARAnIQNBACgCvKABIQQgAxAtRQ0BQQAoArygASEDECdBKUcNAUEAQQAoArygAUECajYCvKABECdB+wBHDQFBAEEAKAK8oAFBAmo2ArygARAnQekARw0BQQAoArygASIFLwECQeYARw0BQQAgBUEEajYCvKABECdBKEcNAUEAQQAoArygAUECajYCvKABECcaQQAoArygASIFIAQgAyAEayIDEEENASAAIAJrIgZBAXUhB0EAIAUgA0EBdSIIQQF0ajYCvKABAkACQAJAECciAEEhRg0AIABBPUcNBEEAKAK8oAEiAC8BAkE9Rw0EIAAvAQRBPUcNBEEAIABBBmo2ArygAQJAECciAEEnRg0AIABBIkcNBQtBACgCvKABIgVBAmpB5ABB5QBB5gBB4QBB9QBB7ABB9AAQI0UNBEEAIAVBEGo2ArygARAnIABHDQRBAEEAKAK8oAFBAmo2ArygARAnQfwARw0EQQAoArygASIALwECQfwARw0EQQAgAEEEajYCvKABECcaQQAoArygASIAIAQgAxBBDQRBACAAIAhBAXRqNgK8oAEQJ0E9Rw0EQQAoArygASIALwECQT1HDQQgAC8BBEE9Rw0EQQAgAEEGajYCvKABAkAQJyIAQSdGDQAgAEEiRw0FC0EAKAK8oAEiBUECakHfAEHfAEHlAEHzAEHNAEHvAEHkAEH1AEHsAEHlABAyRQ0EQQAgBUEWajYCvKABECcgAEcNBEEAQQAoArygAUECajYCvKABECdBKUcNBEEAQQAoArygAUECajYCvKABECdB8gBHDQRBACgCvKABIgBBAmpB5QBB9ABB9QBB8gBB7gAQE0UNBEEAIABBDGo2ArygAQJAECdBO0cNAEEAQQAoArygAUECajYCvKABCxAnIgBB6QBHDQJB6QAhAEEAKAK8oAEiBS8BAkHmAEcNAkEAIAVBBGo2ArygARAnQShHDQRBAEEAKAK8oAFBAmoiADYCvKABAkAgBCAIEDNFDQAQJ0EpRw0FQQBBACgCvKABQQJqNgK8oAEQJ0HyAEcNBUEAKAK8oAEiAEECakHlAEH0AEH1AEHyAEHuABATRQ0FQQAgAEEMajYCvKABAkAQJ0E7Rw0AQQBBACgCvKABQQJqNgK8oAELECciAEHpAEcNA0HpACEAQQAoArygASIFLwECQeYARw0DQQAgBUEEajYCvKABECdBKEcNBUEAKAK8oAFBAmohAAtBACAANgK8oAEgACAEIAMQQQ0EQQAgACAIQQF0ajYCvKABECdB6QBHDQRBACgCvKABIgAvAQJB7gBHDQQgAC8BBEEgRw0EQQAgAEEGajYCvKABECcQMEUNBBAnQSZHDQRBACgCvKABIgAvAQJBJkcNBEEAIABBBGo2ArygARAnEDBFDQQQJ0HbAEcNBEEAQQAoArygAUECajYCvKABECcaQQAoArygASIAIAQgAxBBDQRBACAAIAhBAXRqNgK8oAEQJ0HdAEcNBEEAQQAoArygAUECajYCvKABECdBPUcNBEEAKAK8oAEiAC8BAkE9Rw0EIAAvAQRBPUcNBEEAIABBBmo2ArygARAnGkEAKAK8oAEiACACIAYQQQ0EQQAgACAHQQF0ajYCvKABECdB2wBHDQRBAEEAKAK8oAFBAmo2ArygARAnGkEAKAK8oAEiACAEIAMQQQ0EQQAgACAIQQF0ajYCvKABECdB3QBHDQRBAEEAKAK8oAFBAmo2ArygARAnQSlHDQRBAEEAKAK8oAFBAmo2ArygARAnQfIARw0EQQAoArygASIAQQJqQeUAQfQAQfUAQfIAQe4AEBNFDQRBACAAQQxqNgK8oAEQJ0E7Rw0BQQBBACgCvKABQQJqNgK8oAEMAQtBACgCvKABIgAvAQJBPUcNAyAALwEEQT1HDQNBACAAQQZqNgK8oAECQBAnIgBBJ0YNACAAQSJHDQQLQQAoArygASIFQQJqQeQAQeUAQeYAQeEAQfUAQewAQfQAECNFDQNBACAFQRBqNgK8oAEQJyAARw0DQQBBACgCvKABQQJqNgK8oAECQBAnIgBBJkcNAEEAKAK8oAEiAC8BAkEmRw0EQQAgAEEEajYCvKABECdBIUcNBEEAQQAoArygAUECajYCvKABAkACQBAnIgBBzwBHDQBBACgCvKABQQJqQeIAQeoAQeUAQeMAQfQAQS4QJkUNACAEIAgQM0UNBgwBCyAAEC1FDQAQJ0EuRw0FQQBBACgCvKABQQJqNgK8oAEQJ0HoAEcNBUEAKAK8oAEiAEECakHhAEHzAEHPAEH3AEHuAEHQAEHyAEHvAEHwAEHlAEHyAEH0AEH5ABAvRQ0FQQAgAEEcajYCvKABECdBKEcNBUEAQQAoArygAUECajYCvKABECcaQQAoArygASIAIAQgAxBBDQVBACAAIAhBAXRqNgK8oAEQJ0EpRw0FQQBBACgCvKABQQJqNgK8oAELECchAAsgAEEpRw0DQQBBACgCvKABQQJqNgK8oAELECchAAsCQAJAAkAgABAwRQ0AECdB2wBHDQRBAEEAKAK8oAFBAmo2ArygARAnGkEAKAK8oAEiACAEIAMQQQ0EQQAgACAIQQF0ajYCvKABECdB3QBHDQRBAEEAKAK8oAFBAmo2ArygARAnQT1HDQRBAEEAKAK8oAFBAmo2ArygARAnGkEAKAK8oAEiACACIAYQQQ0EQQAgACAHQQF0ajYCvKABECdB2wBHDQRBAEEAKAK8oAFBAmo2ArygARAnGkEAKAK8oAEiACAEIAMQQQ0EQQAgACAIQQF0ajYCvKABECdB3QBHDQRBAEEAKAK8oAFBAmo2ArygARAnIgBBO0cNAkEAQQAoArygAUECajYCvKABDAELIABBzwBHDQNBACgCvKABIgBBAmpB4gBB6gBB5QBB4wBB9AAQE0UNA0EAIABBDGo2ArygARAnQS5HDQNBAEEAKAK8oAFBAmo2ArygARAnQeQARw0DQQAoArygASIAQQJqQeUAQeYAQekAQe4AQeUAQdAAQfIAQe8AQfAAQeUAQfIAQfQAQfkAEC9FDQNBACAAQRxqNgK8oAEQJ0EoRw0DQQBBACgCvKABQQJqNgK8oAEQJxAwRQ0DECdBLEcNA0EAQQAoArygAUECajYCvKABECcaQQAoArygASIAIAQgAxBBDQNBACAAIAhBAXRqNgK8oAEQJ0EsRw0DQQBBACgCvKABQQJqNgK8oAEQJ0H7AEcNA0EAQQAoArygAUECajYCvKABECdB5QBHDQNBACgCvKABIgBBAmpB7gBB9QBB7QBB5QBB8gBB4QBB4gBB7ABB5QAQMUUNA0EAIABBFGo2ArygARAnQTpHDQNBAEEAKAK8oAFBAmo2ArygARAnIQVBACgCvKABIQACQCAFQfQARg0AIAAvAQJB8gBHDQQgAC8BBEH1AEcNBCAALwEGQeUARw0EC0EAIABBCGo2ArygARAnQSxHDQNBAEEAKAK8oAFBAmo2ArygARAnQecARw0DQQAoArygASIALwECQeUARw0DIAAvAQRB9ABHDQNBACAAQQZqNgK8oAECQBAnIgBBOkcNAEEAQQAoArygAUECajYCvKABECdB5gBHDQRBACgCvKABIgBBAmpB9QBB7gBB4wBB9ABB6QBB7wBB7gAQI0UNBEEAIABBEGoiADYCvKABAkAQJyIFQShGDQAgAEEAKAK8oAFGDQUgBRAtRQ0FCxAnIQALIABBKEcNA0EAQQAoArygAUECajYCvKABECdBKUcNA0EAQQAoArygAUECajYCvKABECdB+wBHDQNBAEEAKAK8oAFBAmo2ArygARAnQfIARw0DQQAoArygASIAQQJqQeUAQfQAQfUAQfIAQe4AEBNFDQNBACAAQQxqNgK8oAEQJxpBACgCvKABIgAgAiAGEEENA0EAIAAgB0EBdGo2ArygARAnQdsARw0DQQBBACgCvKABQQJqNgK8oAEQJxpBACgCvKABIgAgBCADEEENA0EAIAAgCEEBdGo2ArygARAnQd0ARw0DQQBBACgCvKABQQJqNgK8oAECQBAnIgBBO0cNAEEAQQAoArygAUECajYCvKABECchAAsgAEH9AEcNA0EAQQAoArygAUECajYCvKABAkAQJyIAQSxHDQBBAEEAKAK8oAFBAmo2ArygARAnIQALIABB/QBHDQNBAEEAKAK8oAFBAmo2ArygARAnQSlHDQNBAEEAKAK8oAFBAmo2ArygARAnIgBBO0cNAUEAQQAoArygAUECajYCvKABCxAnIQALIABB/QBHDQFBAEEAKAK8oAFBAmo2ArygARAnQSlHDQFBACgCtKABIQRBgCAhAANAAkACQCAEIABGDQAgByAAQQxqKAIAIABBCGooAgAiA2tBAXVHDQEgAiADIAYQQQ0BIAAoAgAgAEEEaigCAEEAKAKgHxEAAEEAIAE2ArygAQsPCyAAQRBqIQAMAAsLIAIgAEEAKAKkHxEAAAtBACABNgK8oAELUwEEf0EAKAK8oAFBAmohAEEAKALAoAEhAQJAA0AgACICQX5qIAFPDQEgAkECaiEAIAIvAQBBdmoiA0EDSw0AIAMOBAEAAAEBCwtBACACNgK8oAELfAECf0EAQQAoArygASIAQQJqNgK8oAEgAEEGaiEAQQAoAsCgASEBA0ACQAJAAkAgAEF8aiABTw0AIABBfmovAQBBKkcNAiAALwEAQS9HDQJBACAAQX5qNgK8oAEMAQsgAEF+aiEAC0EAIAA2ArygAQ8LIABBAmohAAwACwt1AQF/AkACQCAAQV9qIgFBBUsNAEEBIAF0QTFxDQELIABBRmpB//8DcUEGSQ0AIABBWGpB//8DcUEHSSAAQSlHcQ0AAkAgAEGlf2oiAUEDSw0AIAEOBAEAAAEBCyAAQf0ARyAAQYV/akH//wNxQQRJcQ8LQQELPQEBf0EBIQECQCAAQfcAQegAQekAQewAQeUAEDQNACAAQeYAQe8AQfIAEDUNACAAQekAQeYAECshAQsgAQutAQEDf0EBIQECQAJAAkACQAJAAkACQCAALwEAIgJBRWoiA0EDTQ0AIAJBm39qIgNBA00NASACQSlGDQMgAkH5AEcNAiAAQX5qQeYAQekAQe4AQeEAQewAQewAEDYPCyADDgQCAQEFAgsgAw4EAgAAAwILQQAhAQsgAQ8LIABBfmpB5QBB7ABB8wAQNQ8LIABBfmpB4wBB4QBB9ABB4wAQLA8LIABBfmovAQBBPUYL7QMBAn9BACEBAkAgAC8BAEGcf2oiAkETSw0AAkACQAJAAkACQAJAAkACQCACDhQAAQIICAgICAgIAwQICAUIBggIBwALIABBfmovAQBBl39qIgJBA0sNBwJAAkAgAg4EAAkJAQALIABBfGpB9gBB7wAQKw8LIABBfGpB+QBB6QBB5QAQNQ8LIABBfmovAQBBjX9qIgJBAUsNBgJAAkAgAg4CAAEACwJAIABBfGovAQAiAkHhAEYNACACQewARw0IIABBempB5QAQNw8LIABBempB4wAQNw8LIABBfGpB5ABB5QBB7ABB5QAQLA8LIABBfmovAQBB7wBHDQUgAEF8ai8BAEHlAEcNBQJAIABBemovAQAiAkHwAEYNACACQeMARw0GIABBeGpB6QBB7gBB8wBB9ABB4QBB7gAQNg8LIABBeGpB9ABB+QAQKw8LQQEhASAAQX5qIgBB6QAQNw0EIABB8gBB5QBB9ABB9QBB8gAQNA8LIABBfmpB5AAQNw8LIABBfmpB5ABB5QBB4gBB9QBB5wBB5wBB5QAQOA8LIABBfmpB4QBB9wBB4QBB6QAQLA8LAkAgAEF+ai8BACICQe8ARg0AIAJB5QBHDQEgAEF8akHuABA3DwsgAEF8akH0AEHoAEHyABA1IQELIAELhwEBA38DQEEAQQAoArygASIAQQJqIgE2ArygAQJAAkACQCAAQQAoAsCgAU8NACABLwEAIgFBpX9qIgJBAU0NAgJAIAFBdmoiAEEDTQ0AIAFBL0cNBAwCCyAADgQAAwMAAAsQHQsPCwJAAkAgAg4CAQABC0EAIABBBGo2ArygAQwBCxBAGgwACwuVAQEEf0EAKAK8oAEhAUEAKALAoAEhAgJAAkADQCABIgNBAmohASADIAJPDQEgAS8BACIEIABGDQICQCAEQdwARg0AIARBdmoiA0EDSw0BIAMOBAIBAQICCyADQQRqIQEgAy8BBEENRw0AIANBBmogASADLwEGQQpGGyEBDAALC0EAIAE2ArygARAdDwtBACABNgK8oAELOAEBf0EAQQE6APAfQQAoArygASEAQQBBACgCwKABQQJqNgK8oAFBACAAQQAoApgfa0EBdTYC7B8LzgEBBX9BACgCvKABIQBBACgCwKABIQEDQCAAIgJBAmohAAJAAkAgAiABTw0AIAAvAQAiA0Gkf2oiBEEETQ0BIANBJEcNAiACLwEEQfsARw0CQQBBAC8BhEAiAEEBajsBhEBBACgCoGAgAEEBdGpBAC8BiEA7AQBBACACQQRqNgK8oAFBAEEALwGGQEEBaiIAOwGIQEEAIAA7AYZADwtBACAANgK8oAEQHQ8LAkACQCAEDgUBAgICAAELQQAgADYCvKABDwsgAkEEaiEADAALC7YCAQJ/QQBBACgCvKABIgFBDmo2ArygAQJAAkACQBAnIgJB2wBGDQAgAkE9Rg0BIAJBLkcNAkEAQQAoArygAUECajYCvKABECchAkEAKAK8oAEhACACEC1FDQJBACgCvKABIQIQJ0E9Rw0CIAAgAkEAKAKcHxEAAA8LQQBBACgCvKABQQJqNgK8oAECQBAnIgJBJ0YNACACQSJHDQILQQAoArygASEAIAIQHEEAQQAoArygAUECaiICNgK8oAEQJ0HdAEcNAUEAQQAoArygAUECajYCvKABECdBPUcNASAAIAJBACgCnB8RAAAMAQsgAEUNAEEAKAKoHxEBAEEAQQAoArygAUECajYCvKABAkAQJyICQfIARg0AIAJB+wBHDQEQLg8LQQEQEBoLQQAgAUEMajYCvKABCzYBAn9BAEEAKAK8oAFBDGoiADYCvKABECchAQJAAkBBACgCvKABIABHDQAgARA/RQ0BCxAdCwtsAQF/QQBBACgCvKABIgBBDGo2ArygAQJAECdBLkcNAEEAQQAoArygAUECajYCvKABECdB5QBHDQBBACgCvKABQQJqQfgAQfAAQe8AQfIAQfQAQfMAECZFDQBBARAfDwtBACAAQQpqNgK8oAEL6QEBAX9BACEXAkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZHDQAgAC8BDCAHRw0AIAAvAQ4gCEcNACAALwEQIAlHDQAgAC8BEiAKRw0AIAAvARQgC0cNACAALwEWIAxHDQAgAC8BGCANRw0AIAAvARogDkcNACAALwEcIA9HDQAgAC8BHiAQRw0AIAAvASAgEUcNACAALwEiIBJHDQAgAC8BJCATRw0AIAAvASYgFEcNACAALwEoIBVHDQAgAC8BKiAWRiEXCyAXC1MBAX9BACEIAkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZHDQAgAC8BDCAHRiEICyAIC6QBAQR/QQBBACgCvKABIgBBDGoiATYCvKABAkACQAJAAkACQBAnIgJBWWoiA0EHTQ0AIAJBIkYNAiACQfsARg0CDAELAkAgAw4IAgABAgEBAQMCC0EAQQAvAYZAIgNBAWo7AYZAQQAoArCgASADQQJ0aiAANgIADwtBACgCvKABIAFGDQILQQAvAYZARQ0AQQBBACgCvKABQX5qNgK8oAEPCxAdCws0AQF/QQEhAQJAIABBd2pB//8DcUEFSQ0AIABBgAFyQaABRg0AIABBLkcgABA/cSEBCyABC0kBAX9BACEHAkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZGIQcLIAcLegEDf0EAKAK8oAEhAAJAA0ACQCAALwEAIgFBd2pBBUkNACABQSBGDQAgAUGgAUYNACABQS9HDQICQCAALwECIgBBKkYNACAAQS9HDQMQFQwBCxAWC0EAQQAoArygASICQQJqIgA2ArygASACQQAoAsCgAUkNAAsLIAELOQEBfwJAIAAvAQAiAUGA+ANxQYC4A0cNACAAQX5qLwEAQf8HcUEKdCABQf8HcXJBgIAEaiEBCyABC30BAX8CQCAAQS9LDQAgAEEkRg8LAkAgAEE6SQ0AQQAhAQJAIABBwQBJDQAgAEHbAEkNAQJAIABB4ABLDQAgAEHfAEYPCyAAQfsASQ0BAkAgAEH//wNLDQAgAEGqAUkNASAAEDkPC0EBIQEgABA6DQAgABA7IQELIAEPC0EBC2MBAX8CQCAAQcAASw0AIABBJEYPC0EBIQECQCAAQdsASQ0AAkAgAEHgAEsNACAAQd8ARg8LIABB+wBJDQACQCAAQf//A0sNAEEAIQEgAEGqAUkNASAAEDwPCyAAEDohAQsgAQtMAQN/QQAhAwJAIABBfmoiBEEAKAKYHyIFSQ0AIAQvAQAgAUcNACAALwEAIAJHDQACQCAEIAVHDQBBAQ8LIABBfGovAQAQJSEDCyADC2YBA39BACEFAkAgAEF6aiIGQQAoApgfIgdJDQAgBi8BACABRw0AIABBfGovAQAgAkcNACAAQX5qLwEAIANHDQAgAC8BACAERw0AAkAgBiAHRw0AQQEPCyAAQXhqLwEAECUhBQsgBQuFAQECfyAAED4iABAqIQECQAJAIABB3ABGDQBBACECIAFFDQELQQAoArygAUECQQQgAEGAgARJG2ohAAJAA0BBACAANgK8oAEgAC8BABA+IgFFDQECQCABEClFDQAgAEECQQQgAUGAgARJG2ohAAwBCwtBACECIAFB3ABGDQELQQEhAgsgAgvaAwEEf0EAKAK8oAEiAEF+aiEBA0BBACAAQQJqNgK8oAECQAJAAkAgAEEAKALAoAFPDQAQJyEAQQAoArygASECAkACQCAAEC1FDQBBACgCvKABIQMCQAJAECciAEE6Rw0AQQBBACgCvKABQQJqNgK8oAEQJxAtRQ0BQQAoArygAS8BACEACyACIANBACgCnB8RAAAMAgtBACABNgK8oAEPCwJAAkAgAEEiRg0AIABBLkYNASAAQSdHDQQLQQAoArygASECIAAQHEEAQQAoArygAUECaiIDNgK8oAEQJyIAQTpHDQFBAEEAKAK8oAFBAmo2ArygAQJAECcQLUUNAEEAKAK8oAEvAQAhACACIANBACgCnB8RAAAMAgtBACABNgK8oAEPC0EAKAK8oAEiAC8BAkEuRw0CIAAvAQRBLkcNAkEAIABBBmo2ArygAQJAAkACQCAALwEGIgBB8gBHDQBBARAQIQBBACgCvKABIQIgAA0BIAIvAQAhAAsgAEH//wNxEC0NAUEAIAE2ArygAQ8LQQAgAkECajYCvKABCxAnIQALIABB//8DcSIAQSxGDQIgAEH9AEYNAEEAIAE2ArygAQsPC0EAIAE2ArygAQ8LQQAoArygASEADAALC48BAQF/QQAhDgJAIAAvAQAgAUcNACAALwECIAJHDQAgAC8BBCADRw0AIAAvAQYgBEcNACAALwEIIAVHDQAgAC8BCiAGRw0AIAAvAQwgB0cNACAALwEOIAhHDQAgAC8BECAJRw0AIAAvARIgCkcNACAALwEUIAtHDQAgAC8BFiAMRw0AIAAvARggDUYhDgsgDguoAQECf0EAIQFBACgCvKABIQICQAJAIABB7QBHDQAgAkECakHvAEHkAEH1AEHsAEHlABATRQ0BQQAgAkEMajYCvKABAkAQJ0EuRg0AQQAhAQwCC0EAQQAoArygAUECajYCvKABECchAAsgAEHlAEcNAEEAKAK8oAEiAEEOaiACIABBAmpB+ABB8ABB7wBB8gBB9ABB8wAQJiIBGyECC0EAIAI2ArygASABC2cBAX9BACEKAkAgAC8BACABRw0AIAAvAQIgAkcNACAALwEEIANHDQAgAC8BBiAERw0AIAAvAQggBUcNACAALwEKIAZHDQAgAC8BDCAHRw0AIAAvAQ4gCEcNACAALwEQIAlGIQoLIAoLcQEBf0EAIQsCQCAALwEAIAFHDQAgAC8BAiACRw0AIAAvAQQgA0cNACAALwEGIARHDQAgAC8BCCAFRw0AIAAvAQogBkcNACAALwEMIAdHDQAgAC8BDiAIRw0AIAAvARAgCUcNACAALwESIApGIQsLIAsLgwQBAn9BACECAkAQJ0HPAEcNAEEAIQJBACgCvKABIgNBAmpB4gBB6gBB5QBB4wBB9AAQE0UNAEEAIQJBACADQQxqNgK8oAEQJ0EuRw0AQQBBACgCvKABQQJqNgK8oAECQBAnIgNB8ABHDQBBACECQQAoArygASIDQQJqQfIAQe8AQfQAQe8AQfQAQfkAQfAAQeUAED1FDQFBACECQQAgA0ESajYCvKABECdBLkcNAUEAQQAoArygAUECajYCvKABECchAwtBACECIANB6ABHDQBBACECQQAoArygASIDQQJqQeEAQfMAQc8AQfcAQe4AQdAAQfIAQe8AQfAAQeUAQfIAQfQAQfkAEC9FDQBBACECQQAgA0EcajYCvKABECdBLkcNAEEAIQJBAEEAKAK8oAFBAmo2ArygARAnQeMARw0AQQAhAkEAKAK8oAEiAy8BAkHhAEcNACADLwEEQewARw0AIAMvAQZB7ABHDQBBACECQQAgA0EIajYCvKABECdBKEcNAEEAIQJBAEEAKAK8oAFBAmo2ArygARAnEC1FDQAQJ0EsRw0AQQAhAkEAQQAoArygAUECajYCvKABECcaQQAoArygASIDIAAgAUEBdCIBEEENAEEAIQJBACADIAFqNgK8oAEQJ0EpRw0AQQBBACgCvKABQQJqNgK8oAFBASECCyACC0kBA39BACEGAkAgAEF4aiIHQQAoApgfIghJDQAgByABIAIgAyAEIAUQE0UNAAJAIAcgCEcNAEEBDwsgAEF2ai8BABAlIQYLIAYLWQEDf0EAIQQCQCAAQXxqIgVBACgCmB8iBkkNACAFLwEAIAFHDQAgAEF+ai8BACACRw0AIAAvAQAgA0cNAAJAIAUgBkcNAEEBDwsgAEF6ai8BABAlIQQLIAQLSwEDf0EAIQcCQCAAQXZqIghBACgCmB8iCUkNACAIIAEgAiADIAQgBSAGECZFDQACQCAIIAlHDQBBAQ8LIABBdGovAQAQJSEHCyAHCz0BAn9BACECAkBBACgCmB8iAyAASw0AIAAvAQAgAUcNAAJAIAMgAEcNAEEBDwsgAEF+ai8BABAlIQILIAILTQEDf0EAIQgCQCAAQXRqIglBACgCmB8iCkkNACAJIAEgAiADIAQgBSAGIAcQI0UNAAJAIAkgCkcNAEEBDwsgAEFyai8BABAlIQgLIAgL+RIBA38CQCAAEDwNACAAQfS/f2pBAkkNACAAQbcBRg0AIABBgHpqQfAASQ0AIABB/XZqQQVJDQAgAEGHB0YNACAAQe90akEtSQ0AAkAgAEHBdGoiAUEISw0AQQEgAXRB7QJxDQELIABB8HNqQQtJDQAgAEG1c2pBH0kNAAJAIABBqnJqIgFBEksNAEEBIAF0Qf/8GXENAQsgAEHwDEYNACAAQZZyakEESQ0AIABBwHBqQQpJDQAgAEHacGpBC0kNACAAQdBxakEbSQ0AIABBkQ5GDQAgAEGQcmpBCkkNACAAQcJtakESSQ0AIABBxm1qQQNJDQAgAEGdbmpBIUkNACAAQa1uakEPSQ0AIABBp29qQQNJDQAgAEHXb2pBBUkNACAAQdtvakEDSQ0AIABB5W9qQQlJDQAgAEHqb2pBBEkNACAAQf0PRg0AIABBlXBqQQlJDQACQCAAQa9taiIBQRJLDQBBASABdEH/gBhxDQELIABBmm1qQQpJDQACQAJAIABBxGxqIgFBJ00NACAAQf9sakEDSQ0CDAELIAEOKAEAAQEBAQEBAQAAAQEAAAEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAQEBCyAAQf4TRg0AIABBmmxqQQpJDQACQCAAQcRraiIBQRVLDQBBASABdEH9sI4BcQ0BCyAAQf9rakEDSQ0AIABB9RRGDQAgAEGaa2pBDEkNAAJAAkAgAEHEamoiAUEnTQ0AIABB/2pqQQNJDQIMAQsgAQ4oAQABAQEBAQEBAQABAQEAAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAABAQELIABBmmpqQQpJDQAgAEGGampBBkkNAAJAAkAgAEHEaWoiAUEnTQ0AIABB/2lqQQNJDQIMAQsgAQ4oAQABAQEBAQEBAAABAQAAAQEBAAAAAAAAAAABAQAAAAAAAAAAAAABAQELIABBmmlqQQpJDQACQCAAQcJoaiIBQRlLDQBBASABdEGf7oMQcQ0BCyAAQYIXRg0AIABBmmhqQQpJDQACQAJAIABBwmdqIgFBJU0NACAAQYBoakEFSQ0CDAELIAEOJgEBAQEBAQEAAQEBAAEBAQEAAAAAAAAAAQEAAAAAAAAAAAAAAAEBAQsgAEGaZ2pBCkkNAAJAAkAgAEHEZmoiAUEnTQ0AIABB/2ZqQQNJDQIMAQsgAQ4oAQABAQEBAQEBAAEBAQABAQEBAAAAAAAAAAEBAAAAAAAAAAAAAAABAQELIABBmmZqQQpJDQAgAEF8cSICQYAaRg0AAkAgAEHFZWoiAUEoSw0AIAEOKQEBAAEBAQEBAQEAAQEBAAEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAEBAQsgAEGaZWpBCkkNAAJAIABBtmRqIgFBDEsNAEEBIAF0QeEvcQ0BCyAAQf5kakECSQ0AIABBeHFB2BtGDQAgAEGaZGpBCkkNAAJAIABBz2NqIgFBHUsNAEEBIAF0QfmHgP4DcQ0BCyAAQY5kakECSQ0AIABBsR1GDQAgAEGwY2pBCkkNAAJAIABBzGJqIgFBCEsNACABQQZHDQELIABBuGJqQQZJDQAgAEHgYWpBCkkNACAAQQFyIgFBmR5GDQAgAEGwYmpBCkkNAAJAIABBy2FqIgNBCksNAEEBIAN0QZUMcQ0BCyAAQfNgakELSQ0AIAFBhx9GDQAgAEGPYWpBFEkNACAAQe5RakEDSQ0AIABBl1lqQQlJDQAgAEGjWWpBA0kNACAAQfFeakEPSQ0AIABB/l5qQQxJDQAgAEGPX2pBBEkNACAAQZlfakEHSQ0AIABBnl9qQQNJDQAgAEGiX2pBA0kNACAAQapfakEESQ0AIABBwF9qQQpJDQAgAEHVX2pBFEkNACAAQcYfRg0AIABB52BqQSRJDQAgAEHOUWpBA0kNACAAQa5RakECSQ0AIABBjlFqQQJJDQAgAEH1T2pBA0kNACAAQaBQakEKSQ0AIABB3S9GDQAgAEHMUGpBIEkNACAAQbBGakEDSQ0AIABBsEdqQQpJDQAgAEHAR2pBCkkNACAAQdxHakEUSQ0AIABBmkhqQQ5JDQAgAEHQSGpBCkkNACAAQd9IakENSQ0AIABBgElqQQNJDQAgAEGVSWpBCUkNACAAQbBJakEKSQ0AIABBzElqQRFJDQAgAEGASmpBBUkNACAAQdBKakEOSQ0AIABB8EpqQQpJDQAgAEGBS2pBC0kNACAAQaBLakEdSQ0AIABBq0tqQQpJDQAgAEHpS2pBBUkNACAAQbBMakELSQ0AIABBuk1qQQpJDQAgAEHQTWpBDEkNACAAQeBNakEMSQ0AIABBqTFGDQAgAEHwT2pBCkkNACAAQcBEakE6SQ0AIABBiUZqQQNJDQAgAEGORmpBA0kNACAAQe05Rg0AIABBrEZqQRVJDQAgAEGFRGpBBUkNAAJAIABBwb9/aiIBQRVLDQBBASABdEGDgIABcQ0BCyAAQZu+f2pBDEkNACAAQeHBAEYNACAAQbC+f2pBDUkNACAAQZGmf2pBA0kNACAAQf/aAEYNACAAQWBxQeDbAEYNACAAQdaff2pBBkkNACAAQeeef2pBAkkNACAAQYyzfWpBCkkNACAAQe/MAkYNACAAQeCzfWpBCkkNAAJAIABB9a99aiIBQRxLDQBBASABdEGBgID4AXENAQsgAEHisn1qQQJJDQAgAEGQsn1qQQJJDQACQAJAIABB/q99aiIBQQRNDQAgAEGAr31qQQJJDQIMAQsgAQ4FAQAAAAEBCyAAQc2sfWpBDkkNACACQYDTAkYNACAAQbmtfWpBDUkNACAAQdqtfWpBCEkNACAAQYGufWpBC0kNACAAQaCufWpBEkkNACAAQcyufWpBEkkNACAAQbCufWpBCkkNACAAQderfWpBDkkNACAAQeXTAkYNACAAQV9xQbCsfWpBCkkNAAJAIABBvat9aiIBQQpLDQBBASABdEGBDHENAQsgAEGwq31qQQpJDQACQCAAQZ2ofWoiAUEKSw0AIAFBCEcNAQsCQCAAQdCqfWoiAUERSw0AQQEgAXRBnYMLcQ0BCwJAIABBlap9aiIBQQtLDQBBASABdEGfGHENAQsgAEGFq31qQQNJDQAgAEFwcSIBQYD8A0YNACAAQZ72A0YNACAAQZCofWpBCkkNACAAQb/+A0YgAEHwgXxqQQpJIABBs4N8akEDSSAAQc2DfGpBAkkgAUGg/ANGcnJycg8LQQELXAEEf0GAgAQhAUGQCCECQX4hAwJAA0BBACEEIANBAmoiA0HnA0sNASACKAIAIAFqIgEgAEsNASACQQRqIQQgAkEIaiECIAQoAgAgAWoiASAASQ0AC0EBIQQLIAQLXAEEf0GAgAQhAUGwFyECQX4hAwJAA0BBACEEIANBAmoiA0H5AUsNASACKAIAIAFqIgEgAEsNASACQQRqIQQgAkEIaiECIAQoAgAgAWoiASAASQ0AC0EBIQQLIAQL7R8BBn9BASEBAkACQAJAIABB1n5qIgJBEEsNAEEBIAJ0QYGQBHENAQsgAEG6empBDEkNACAAQYh+akHKA0kNACAAQcB+akEXSQ0AIABBqH5qQR9JDQACQCAAQZB5aiICQRxLDQBBASACdEHf+YK6AXENAQsCQCAAQaB6aiICQQ5LDQBBASACdEGfoAFxDQELIABB9nZqQaYBSQ0AIABBiXhqQYsBSQ0AIABB8nhqQRRJDQAgAEHdeGpB0wBJDQAgAEGRdGpBBEkNACAAQbB0akEbSQ0AIABBoHVqQSlJDQAgAEHZCkYNACAAQc91akEmSQ0AAkACQAJAIABBj3NqQeMASQ0AIABBAXIiAkHvDEYNACAAQeBzakErSQ0AAkAgAEGrcmoiAUE8Tw0AQoGAjLCAnIGACCABrYhCAYNQRQ0BCyAAQe5xakEeSQ0AIABBtnBqQSFJDQAgAEGxD0YNACAAQbNxakHZAEkNAAJAIABBjHBqIgFBBksNAEEBIAF0QcMAcQ0BCyAAQYBwakEWSQ0AAkACQCAAQdxvaiIDQQRNDQAgAEGaEEYNAgwBC0EBIQEgAw4FBAAAAAQECyAAQfxtakE2SQ0AIABBym5qQQhJDQAgAEHgbmpBFUkNACAAQcBvakEZSQ0AIABBoG9qQQtJDQAgAEG9EkYNACAAQdASRg0AIABBqG1qQQpJDQAgAEGPbWpBEEkNAAJAIABB+2xqIgNBDE8NAEEBIQFB/xkgA0H//wNxdkEBcQ0ECyAAQe1sakEWSQ0AAkAgAEGEbGoiAUEUSw0AQQEgAXRBgfzhAHENAQsgAEHWbGpBB0kNAAJAIABBzmxqIgFBHEsNAEEBIAF0QfGRgIABcQ0BCwJAIABBpGxqIgFBFUsNAEEBIAF0QbuAwAFxDQELIABB7WtqQRZJDQACQCAAQdZraiIBQTVPDQBC/7aDgICA4AsgAa2IQgGDUEUNAQsgAEHtampBFkkNACAAQfFqakEDSQ0AIABBjmtqQQNJDQAgAEH7ampBCUkNAAJAAkACQCAAQdZqaiIDQSZNDQAgAEGHamoiAUEXSw0BQQEgAXRBgeC/BnFFDQEMAwtBASEBIAMOJwUFBQUFBQUBBQUBBQUFBQUBAQEFAQEBAQEBAQEBAQEBAQEBAQEBBQULIABBoGpqQQJJDQELIABB7WlqQRZJDQACQAJAAkAgAEGPaWoiA0EzTQ0AIABB1mlqIgFBE0sNAUEBIAF0Qf/2I3FFDQEMAwtBASEBIAMONAUBAQEBAQEBAQEBAQEBAQEBAQUBBQUFBQUFAQEBBQUFAQUFBQUBAQEFBQEFAQUFAQEBBQUFCyAAQaRpaiIBQQVLDQAgAUECRw0BCyAAQdhoakEDSQ0AIABB7mdqQRdJDQAgAEHyZ2pBA0kNACAAQftnakEISQ0AIABB0BdGDQAgAEHSaGpBDEkNACAAQb0YRg0AIABB1mdqQRBJDQACQCAAQahnaiIBQSlPDQBCh4aAgIAgIAGtiEIBg1BFDQELIABB1mZqQQpJDQAgAEHuZmpBF0kNACAAQftmakEISQ0AIABB8mZqQQNJDQACQCAAQftlaiIBQQtLDQAgAUEIRw0BCwJAIABBy2ZqIgFBCEsNAEEBIAF0QZ8CcQ0BCwJAIABBomZqIgFBFEsNAEEBIAF0QY2A4ABxDQELIABB7mVqQSlJDQAgAEG9GkYNACAAQc4aRg0AIABBzWRqQQlJDQAgAEHmZGpBGEkNACAAQftkakESSQ0AIABBhmVqQQZJDQAgAEGsZWpBA0kNACAAQaFlakEDSQ0AAkAgAEHDZGoiA0EKTw0AQQEhAUH5ByADQf//A3F2QQFxDQQLIAJBsxxGDQAgAEH/Y2pBMEkNACAAQcBjakEHSQ0AAkAgAEH/YmoiAUEMSw0AQQEgAXRByyVxDQELIABBfHEiA0GUHUYNACAAQediakEHSQ0AAkAgAEHfYmoiAUEmTw0AQtfsm4D5BSABrYhCAYNQRQ0BCyAAQYBgakErSQ0AIABB+GBqQQVJDQAgAEG3YWpBJEkNACAAQXhxIgRBwB5GDQAgAEGAHkYNACADQdwdRg0AAkAgAEHBX2oiAUEoTw0AQoGA+MPHGCABrYhCAYNQRQ0BCyAAQZJfakEDSQ0AIABB4F5qQSZJDQAgAEGOIUYNACAAQYtfakENSQ0AIABBxyFGDQAgAEHNIUYNACAAQbZbakEESQ0AIABBsF5qQStJDQAgAEGEXmpBzQJJDQACQCAAQbBbaiIFQQlPDQBBASEBQf8CIAVB//8DcXZBAXENBAsgAEHOWmpBBEkNACAAQfBaakEhSQ0AIABB9lpqQQRJDQAgAEGmW2pBBEkNACAAQaBbakEpSQ0AAkAgAEHIWmoiBUEJTw0AQQEhAUH/AiAFQf//A3F2QQFxDQQLIABBgFFqQTRJDQAgAEGSUWpBA0kNACAAQaBRakENSQ0AIABBwFFqQRJJDQAgAEHgUWpBEkkNACAAQfJRakEESQ0AIABBgFJqQQ1JDQAgAEGSUmpBC0kNACAAQeBSakHLAEkNACAAQf9SakEaSQ0AIABBkVNqQRFJDQAgAEH/V2pB7ARJDQAgAEGIWGpBBkkNACAAQeBYakHWAEkNACAAQXBxIgVBgCdGDQAgAEHoWWpBwwBJDQAgAEHuWWpBBEkNACAAQahaakE5SQ0AIABBvlpqQQRJDQAgAEG4WmpBD0kNACAAQdcvRg0AIABB3C9GDQAgAEHgT2pB2QBJDQAgAEGATGpBF0kNACAAQdBMakEaSQ0AIABBgE1qQSxJDQAgAEGQTWpBBUkNACAAQbBNakEeSQ0AIABBgE5qQR9JDQAgAEHQTmpBxgBJDQAgAEGqMUYNBCAAQYBPakEpSQ0EIABBu0lqQQdJDQQgAEH7SWpBL0kNBCAAQac1Rg0EIABB4EtqQTVJDQQgAEGXRmpBBEkNBCAAQcNGakEDSQ0EIABB8EZqQStJDQQgAEGAR2pBCUkNBCAAQaZHakEkSQ0EIABBs0dqQQNJDQQgAEGASGpBJEkNBCAAQcZIakEsSQ0EIAJBrzdGDQQgAEH9SGpBHkkNBCAAQZJGaiIGQQlJDQEMAgtBASEBDAILQQEhAUGPAyAGQf//A3F2QQFxDQELIARB0D5GDQEgAEG4QWpBBkkNASAAQeBBakEmSQ0BIABB6EFqQQZJDQEgAEGARmpBwAFJDQEgAEGARGpBlgJJDQECQCAAQadBaiIBQQRLDQBBASABdEEVcQ0CCyAAQaFBakEfSQ0BIABBgEFqQTVJDQECQCAAQcpAaiIEQQlPDQBBASEBQf8CIARB//8DcXZBAXENAQsgAEGOQGpBA0kNASAAQaBAakENSQ0BIABBqkBqQQZJDQEgA0HQP0YNASAAQb5AakEDSQ0BIABBukBqQQdJDQEgAEGKQGpBB0kNASAAQfHAAEYNASAAQf/AAEYNASAAQfC+f2pBDUkNASAAQYLCAEYNASAAQYfCAEYNASAAQZXCAEYNASAAQfa9f2pBCkkNAQJAIABB6L1/aiIEQRFPDQBBASEBQb+gBSAEdkEBcQ0BCyAAQda9f2pBEEkNASADQbzCAEYNAQJAIABBu71/aiIEQQpPDQBBASEBQZ8EIARB//8DcXZBAXENAQsgAEGgp39qQYUBSQ0BIABB0Kd/akEvSQ0BIABBoL1/akEpSQ0BIABBgKh/akEvSQ0BAkAgAEGVpn9qIgRBCU8NAEEBIQFBjwMgBEH//wNxdkEBcQ0BCyAAQYCmf2pBJkkNASAAQafaAEYNASAAQa3aAEYNASAAQYC2fWpBjQJJDQEgAEGwtn1qQS5JDQEgAEGAwH1qQY0JSQ0BIABBgOR+akHwowFJDQEgAEGAmH9qQbYzSQ0BIAVB8OMARg0BIABB4Jx/akEbSQ0BIABBz51/akHeAEkNASAAQfudf2pBK0kNASADQfzhAEYNASAAQd+ef2pB2gBJDQEgAEHlnn9qQQVJDQEgAEG/n39qQdYASQ0BIABByJ9/akEFSQ0BIABBz59/akEFSQ0BIABB359/akEJSQ0BIABB+59/akEDSQ0BIABBqKR/akEHSQ0BIABBsKR/akEHSQ0BIABBuKR/akEHSQ0BIABBwKR/akEHSQ0BIABByKR/akEHSQ0BIABB0KR/akEHSQ0BIABB2KR/akEHSQ0BIABB4KR/akEHSQ0BIABBgKV/akEXSQ0BIABB79oARg0BIABB0KV/akE4SQ0BIABB/q59akEySQ0BIABBwK99akE0SQ0BIABB9K99akEXSQ0BIABB+a99akEESQ0BIABB/a99akEDSQ0BIABBibB9akELSQ0BIABB9bB9akEvSQ0BIABB3rF9akHnAEkNASAAQemxfWpBCUkNASAAQeCyfWpB0ABJDQEgAEGBs31qQR9JDQEgAEHAs31qQS9JDQEgAkGrzAJGDQEgBUGQzAJGDQECQCAAQY6ufWoiAkENTw0AQQEhAUG/NCACQf//A3F2QQFxDQELIABBoK19akEdSQ0BIABB9q19akEcSQ0BIABB0K19akEXSQ0BIABBvKt9akEISQ0BIABBwKt9akEDSQ0BIABBgKx9akEpSQ0BIABBhqx9akEFSQ0BIABBmqx9akEKSQ0BIABBoKx9akEFSQ0BIABBz9MCRg0BIABB/Kx9akEvSQ0BIABBgqt9akEySQ0BIABB+tQCRg0BIABBoKt9akEXSQ0BAkAgAEHPqn1qIgJBEk8NAEEBIQFBsb4KIAJ2QQFxDQELIABBgIp8akEHSQ0BIABBkIt8akHqAEkNASAAQYCOfGpB7gJJDQEgAEG10HxqQTFJDQEgAEHQ0HxqQRdJDQEgAEGAqH1qQaTXAEkNASAAQZCpfWpB8wBJDQEgAEGkqX1qQQpJDQEgAEHQqX1qQStJDQEgAEHYqX1qQQdJDQEgAEHgqX1qQQdJDQEgAEHvqX1qQQZJDQEgAEF3cUH/qX1qQQZJDQEgAEGOqn1qQQNJDQEgAEGlqn1qQQNJDQEgAEGgqn1qQQtJDQECQCAAQe2JfGoiAkELTw0AQQEhAUGfCCACQf//A3F2QQFxDQELIABB4Yl8akEKSQ0BIABB1ol8akENSQ0BAkAgAEHIiXxqIgJBDU8NAEEBIQFB3zYgAkH//wNxdkEBcQ0BCyAAQa6AfGpBBkkNASAAQbaAfGpBBkkNASAAQb6AfGpBBkkNASAAQZqBfGpB2QBJDQEgAEG/gXxqQRpJDQEgAEHfgXxqQRpJDQEgAEGKg3xqQYcBSQ0BIABBkIN8akEFSQ0BIABBkIR8akEMSQ0BIABB7oR8akE2SQ0BIABBsIV8akHAAEkNASAAQbqJfGpB7ABJDQFBASEBIABBrYh8akHrAkkNACAAQaaAfGpBA0kPCyABDwtBAQtdAQF/QQAhCQJAIAAvAQAgAUcNACAALwECIAJHDQAgAC8BBCADRw0AIAAvAQYgBEcNACAALwEIIAVHDQAgAC8BCiAGRw0AIAAvAQwgB0cNACAALwEOIAhGIQkLIAkLNQACQCAAQYD4A3FBgLADRw0AIABBCnRBgPg/cUEAKAK8oAEvAQJB/wdxckGAgARqIQALIAALaAECf0EBIQECQAJAIABBX2oiAkEFSw0AQQEgAnRBMXENAQsgAEH4/wNxQShGDQAgAEFGakH//wNxQQZJDQACQCAAQaV/aiICQQNLDQAgAkEBRw0BCyAAQYV/akH//wNxQQRJIQELIAELjQEBBX9BACgCvKABIQBBACgCwKABIQEDfyAAQQJqIQICQAJAIAAgAU8NACACLwEAIgNBpH9qIgRBAU0NASACIQAgA0F2aiIDQQNLDQIgAiEAIAMOBAACAgAAC0EAIAI2ArygARAdQQAPCwJAAkAgBA4CAQABC0EAIAI2ArygAUHdAA8LIABBBGohAAwACwtJAQN/QQAhAwJAIAJFDQACQANAIAAtAAAiBCABLQAAIgVHDQEgAUEBaiEBIABBAWohACACQX9qIgINAAwCCwsgBCAFayEDCyADCwvCFwIAQYAIC5gXAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAgAAABkAAAACAAAAEgAAAAIAAAABAAAAAgAAAA4AAAADAAAADQAAACMAAAB6AAAARgAAADQAAAAMAQAAHAAAAAQAAAAwAAAAMAAAAB8AAAAOAAAAHQAAAAYAAAAlAAAACwAAAB0AAAADAAAAIwAAAAUAAAAHAAAAAgAAAAQAAAArAAAAnQAAABMAAAAjAAAABQAAACMAAAAFAAAAJwAAAAkAAAAzAAAAnQAAADYBAAAKAAAAFQAAAAsAAAAHAAAAmQAAAAUAAAADAAAAAAAAAAIAAAArAAAAAgAAAAEAAAAEAAAAAAAAAAMAAAAWAAAACwAAABYAAAAKAAAAHgAAAEIAAAASAAAAAgAAAAEAAAALAAAAFQAAAAsAAAAZAAAARwAAADcAAAAHAAAAAQAAAEEAAAAAAAAAEAAAAAMAAAACAAAAAgAAAAIAAAAcAAAAKwAAABwAAAAEAAAAHAAAACQAAAAHAAAAAgAAABsAAAAcAAAANQAAAAsAAAAVAAAACwAAABIAAAAOAAAAEQAAAG8AAABIAAAAOAAAADIAAAAOAAAAMgAAAA4AAAAjAAAAXQEAACkAAAAHAAAAAQAAAE8AAAAcAAAACwAAAAAAAAAJAAAAFQAAAGsAAAAUAAAAHAAAABYAAAANAAAANAAAAEwAAAAsAAAAIQAAABgAAAAbAAAAIwAAAB4AAAAAAAAAAwAAAAAAAAAJAAAAIgAAAAQAAAAAAAAADQAAAC8AAAAPAAAAAwAAABYAAAAAAAAAAgAAAAAAAAAkAAAAEQAAAAIAAAAYAAAAVQAAAAYAAAACAAAAAAAAAAIAAAADAAAAAgAAAA4AAAACAAAACQAAAAgAAAAuAAAAJwAAAAcAAAADAAAAAQAAAAMAAAAVAAAAAgAAAAYAAAACAAAAAQAAAAIAAAAEAAAABAAAAAAAAAATAAAAAAAAAA0AAAAEAAAAnwAAADQAAAATAAAAAwAAABUAAAACAAAAHwAAAC8AAAAVAAAAAQAAAAIAAAAAAAAAuQAAAC4AAAAqAAAAAwAAACUAAAAvAAAAFQAAAAAAAAA8AAAAKgAAAA4AAAAAAAAASAAAABoAAADmAAAAKwAAAHUAAAA/AAAAIAAAAAcAAAADAAAAAAAAAAMAAAAHAAAAAgAAAAEAAAACAAAAFwAAABAAAAAAAAAAAgAAAAAAAABfAAAABwAAAAMAAAAmAAAAEQAAAAAAAAACAAAAAAAAAB0AAAAAAAAACwAAACcAAAAIAAAAAAAAABYAAAAAAAAADAAAAC0AAAAUAAAAAAAAACMAAAA4AAAACAEAAAgAAAACAAAAJAAAABIAAAAAAAAAMgAAAB0AAABxAAAABgAAAAIAAAABAAAAAgAAACUAAAAWAAAAAAAAABoAAAAFAAAAAgAAAAEAAAACAAAAHwAAAA8AAAAAAAAASAEAABIAAAC+AAAAAAAAAFAAAACZAwAAZwAAAG4AAAASAAAAwwAAAL0KAAAuBAAA0g8AAEYCAAC6IQAAOAIAAAgAAAAeAAAAcgAAAB0AAAATAAAALwAAABEAAAADAAAAIAAAABQAAAAGAAAAEgAAALECAAA/AAAAgQAAAEoAAAAGAAAAAAAAAEMAAAAMAAAAQQAAAAEAAAACAAAAAAAAAB0AAAD3FwAACQAAANUEAAArAAAACAAAAPgiAAAeAQAAMgAAAAIAAAASAAAAAwAAAAkAAACLAQAABQkAAGoAAAAGAAAADAAAAAQAAAAIAAAACAAAAAkAAABnFwAAVAAAAAIAAABGAAAAAgAAAAEAAAADAAAAAAAAAAMAAAABAAAAAwAAAAMAAAACAAAACwAAAAIAAAAAAAAAAgAAAAYAAAACAAAAQAAAAAIAAAADAAAAAwAAAAcAAAACAAAABgAAAAIAAAAbAAAAAgAAAAMAAAACAAAABAAAAAIAAAAAAAAABAAAAAYAAAACAAAAUwEAAAMAAAAYAAAAAgAAABgAAAACAAAAHgAAAAIAAAAYAAAAAgAAAB4AAAACAAAAGAAAAAIAAAAeAAAAAgAAABgAAAACAAAAHgAAAAIAAAAYAAAAAgAAAAcAAAA1CQAALAAAAAsAAAAGAAAAEQAAAAAAAAByAQAAKwAAABUFAADEAAAAPAAAAEMAAAAIAAAAAAAAALUEAAADAAAAAgAAABoAAAACAAAAAQAAAAIAAAAAAAAAAwAAAAAAAAACAAAACQAAAAIAAAADAAAAAgAAAAAAAAACAAAAAAAAAAcAAAAAAAAABQAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAIAAAACAAAAAQAAAAIAAAAAAAAAAwAAAAAAAAACAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAABAAAAAgAAAAAAAAADAAAAAwAAAAIAAAAGAAAAAgAAAAMAAAACAAAAAwAAAAIAAAAAAAAAAgAAAAkAAAACAAAAEAAAAAYAAAACAAAAAgAAAAQAAAACAAAAEAAAAEURAADdpgAAIwAAADQQAAAMAAAA3QAAAAMAAACBFgAADwAAADAdAAAgDAAAHQIAAOMFAABKEwAA/QEAAAAAAADjAAAAAAAAAJYAAAAEAAAAJgEAAAkAAABYBQAAAgAAAAIAAAABAAAABgAAAAMAAAApAAAAAgAAAAUAAAAAAAAApgAAAAEAAAA+AgAAAwAAAAkAAAAJAAAAcgEAAAEAAACaAAAACgAAALAAAAACAAAANgAAAA4AAAAgAAAACQAAABAAAAADAAAALgAAAAoAAAA2AAAACQAAAAcAAAACAAAAJQAAAA0AAAACAAAACQAAAAYAAAABAAAALQAAAAAAAAANAAAAAgAAADEAAAANAAAACQAAAAMAAAACAAAACwAAAFMAAAALAAAABwAAAAAAAAChAAAACwAAAAYAAAAJAAAABwAAAAMAAAA4AAAAAQAAAAIAAAAGAAAAAwAAAAEAAAADAAAAAgAAAAoAAAAAAAAACwAAAAEAAAADAAAABgAAAAQAAAAEAAAAwQAAABEAAAAKAAAACQAAAAUAAAAAAAAAUgAAABMAAAANAAAACQAAANYAAAAGAAAAAwAAAAgAAAAcAAAAAQAAAFMAAAAQAAAAEAAAAAkAAABSAAAADAAAAAkAAAAJAAAAVAAAAA4AAAAFAAAACQAAAPMAAAAOAAAApgAAAAkAAABHAAAABQAAAAIAAAABAAAAAwAAAAMAAAACAAAAAAAAAAIAAAABAAAADQAAAAkAAAB4AAAABgAAAAMAAAAGAAAABAAAAAAAAAAdAAAACQAAACkAAAAGAAAAAgAAAAMAAAAJAAAAAAAAAAoAAAAKAAAALwAAAA8AAACWAQAABwAAAAIAAAAHAAAAEQAAAAkAAAA5AAAAFQAAAAIAAAANAAAAewAAAAUAAAAEAAAAAAAAAAIAAAABAAAAAgAAAAYAAAACAAAAAAAAAAkAAAAJAAAAMQAAAAQAAAACAAAAAQAAAAIAAAAEAAAACQAAAAkAAABKAQAAAwAAAGpLAAAJAAAAhwAAAAQAAAA8AAAABgAAABoAAAAJAAAA9gMAAAAAAAACAAAANgAAAAgAAAADAAAAUgAAAAAAAAAMAAAAAQAAAKxMAAABAAAAxxQAAAQAAAAEAAAABQAAAAkAAAAHAAAAAwAAAAYAAAAfAAAAAwAAAJUAAAACAAAAigUAADEAAAABAgAANgAAAAUAAAAxAAAACQAAAAAAAAAPAAAAAAAAABcAAAAEAAAAAgAAAA4AAABRBQAABgAAAAIAAAAQAAAAAwAAAAYAAAACAAAAAQAAAAIAAAAEAAAABgEAAAYAAAAKAAAACQAAAKMBAAANAAAA1wUAAAYAAABuAAAABgAAAAYAAAAJAAAAlxIAAAkAAAAHBQwA7wAAAABBmB8LHFCMAAABAAAAAgAAAAMAAAAEAAAAAAQAAPAfAAA=","undefined"!=typeof window&&"function"==typeof atob?Uint8Array.from(atob(B),A=>A.charCodeAt(0)):Buffer.from(B,"base64")));var B;const{exports:E}=await WebAssembly.instantiate(Q);A=E})())} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/cjs-module-lexer/.gitignore nodejs-mozilla-12.22.12/deps/cjs-module-lexer/.gitignore --- nodejs-mozilla-12.18.1/deps/cjs-module-lexer/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cjs-module-lexer/.gitignore 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,11 @@ +node_modules +*.lock +test +.* +Makefile +bench +build.js +include-wasm +include +lib +src diff -Nru nodejs-mozilla-12.18.1/deps/cjs-module-lexer/lexer.js nodejs-mozilla-12.22.12/deps/cjs-module-lexer/lexer.js --- nodejs-mozilla-12.18.1/deps/cjs-module-lexer/lexer.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/cjs-module-lexer/lexer.js 2022-04-05 07:16:59.000000000 +0000 @@ -0,0 +1,1438 @@ +let source, pos, end; +let openTokenDepth, + templateDepth, + lastTokenPos, + lastSlashWasDivision, + templateStack, + templateStackDepth, + openTokenPosStack, + openClassPosStack, + nextBraceIsClass, + starExportMap, + lastStarExportSpecifier, + _exports, + unsafeGetters, + reexports; + +function resetState () { + openTokenDepth = 0; + templateDepth = -1; + lastTokenPos = -1; + lastSlashWasDivision = false; + templateStack = new Array(1024); + templateStackDepth = 0; + openTokenPosStack = new Array(1024); + openClassPosStack = new Array(1024); + nextBraceIsClass = false; + starExportMap = Object.create(null); + lastStarExportSpecifier = null; + + _exports = new Set(); + unsafeGetters = new Set(); + reexports = new Set(); +} + +// RequireType +const Import = 0; +const ExportAssign = 1; +const ExportStar = 2; + +function parseCJS (source, name = '@') { + resetState(); + try { + parseSource(source); + } + catch (e) { + e.message += `\n at ${name}:${source.slice(0, pos).split('\n').length}:${pos - source.lastIndexOf('\n', pos - 1)}`; + e.loc = pos; + throw e; + } + const result = { exports: [..._exports].filter(expt => expt !== undefined && !unsafeGetters.has(expt)), reexports: [...reexports].filter(reexpt => reexpt !== undefined) }; + resetState(); + return result; +} + +function decode (str) { + if (str[0] === '"' || str[0] === '\'') { + try { + const decoded = (0, eval)(str); + // Filter to exclude non-matching UTF-16 surrogate strings + for (let i = 0; i < decoded.length; i++) { + const surrogatePrefix = decoded.charCodeAt(i) & 0xFC00; + if (surrogatePrefix < 0xD800) { + // Not a surrogate + continue; + } + else if (surrogatePrefix === 0xD800) { + // Validate surrogate pair + if ((decoded.charCodeAt(++i) & 0xFC00) !== 0xDC00) + return; + } + else { + // Out-of-range surrogate code (above 0xD800) + return; + } + } + return decoded; + } + catch {} + } + else { + return str; + } +} + +function parseSource (cjsSource) { + source = cjsSource; + pos = -1; + end = source.length - 1; + let ch = 0; + + // Handle #! + if (source.charCodeAt(0) === 35/*#*/ && source.charCodeAt(1) === 33/*!*/) { + if (source.length === 2) + return true; + pos += 2; + while (pos++ < end) { + ch = source.charCodeAt(pos); + if (ch === 10/*\n*/ || ch === 13/*\r*/) + break; + } + } + + while (pos++ < end) { + ch = source.charCodeAt(pos); + + if (ch === 32 || ch < 14 && ch > 8) + continue; + + if (openTokenDepth === 0) { + switch (ch) { + case 105/*i*/: + if (source.startsWith('mport', pos + 1) && keywordStart(pos)) + throwIfImportStatement(); + lastTokenPos = pos; + continue; + case 114/*r*/: + const startPos = pos; + if (tryParseRequire(Import) && keywordStart(startPos)) + tryBacktrackAddStarExportBinding(startPos - 1); + lastTokenPos = pos; + continue; + case 95/*_*/: + if (source.startsWith('interopRequireWildcard', pos + 1) && (keywordStart(pos) || source.charCodeAt(pos - 1) === 46/*.*/)) { + const startPos = pos; + pos += 23; + if (source.charCodeAt(pos) === 40/*(*/) { + pos++; + openTokenPosStack[openTokenDepth++] = lastTokenPos; + if (tryParseRequire(Import) && keywordStart(startPos)) { + tryBacktrackAddStarExportBinding(startPos - 1); + } + } + } + else if (source.startsWith('_export', pos + 1) && (keywordStart(pos) || source.charCodeAt(pos - 1) === 46/*.*/)) { + pos += 8; + if (source.startsWith('Star', pos)) + pos += 4; + if (source.charCodeAt(pos) === 40/*(*/) { + openTokenPosStack[openTokenDepth++] = lastTokenPos; + if (source.charCodeAt(++pos) === 114/*r*/) + tryParseRequire(ExportStar); + } + } + lastTokenPos = pos; + continue; + } + } + + switch (ch) { + case 101/*e*/: + if (source.startsWith('xport', pos + 1) && keywordStart(pos)) { + if (source.charCodeAt(pos + 6) === 115/*s*/) + tryParseExportsDotAssign(false); + else if (openTokenDepth === 0) + throwIfExportStatement(); + } + break; + case 99/*c*/: + if (keywordStart(pos) && source.startsWith('lass', pos + 1) && isBrOrWs(source.charCodeAt(pos + 5))) + nextBraceIsClass = true; + break; + case 109/*m*/: + if (source.startsWith('odule', pos + 1) && keywordStart(pos)) + tryParseModuleExportsDotAssign(); + break; + case 79/*O*/: + if (source.startsWith('bject', pos + 1) && keywordStart(pos)) + tryParseObjectDefineOrKeys(openTokenDepth === 0); + break; + case 40/*(*/: + openTokenPosStack[openTokenDepth++] = lastTokenPos; + break; + case 41/*)*/: + if (openTokenDepth === 0) + throw new Error('Unexpected closing bracket.'); + openTokenDepth--; + break; + case 123/*{*/: + openClassPosStack[openTokenDepth] = nextBraceIsClass; + nextBraceIsClass = false; + openTokenPosStack[openTokenDepth++] = lastTokenPos; + break; + case 125/*}*/: + if (openTokenDepth === 0) + throw new Error('Unexpected closing brace.'); + if (openTokenDepth-- === templateDepth) { + templateDepth = templateStack[--templateStackDepth]; + templateString(); + } + else { + if (templateDepth !== -1 && openTokenDepth < templateDepth) + throw new Error('Unexpected closing brace.'); + } + break; + case 60/*>*/: + // TODO: {a:{y:1,b:{x:2}}} @@ -115,9 +123,9 @@ Object.keys(out).filter(function (k, _, __) { if (!out[k] || typeof out[k] !== 'object' || - Array.isArray(out[k])) { + Array.isArray(out[k])) return false - } + // see if the parent section is also an object. // if so, add it to that, and mark this one for deletion var parts = dotSplit(k) @@ -125,12 +133,15 @@ var l = parts.pop() var nl = l.replace(/\\\./g, '.') parts.forEach(function (part, _, __) { - if (!p[part] || typeof p[part] !== 'object') p[part] = {} + if (part === '__proto__') + return + if (!p[part] || typeof p[part] !== 'object') + p[part] = {} p = p[part] }) - if (p === out && nl === l) { + if (p === out && nl === l) return false - } + p[nl] = out[k] return true }).forEach(function (del, _, __) { @@ -152,18 +163,20 @@ (val.length > 1 && isQuoted(val)) || val !== val.trim()) - ? JSON.stringify(val) - : val.replace(/;/g, '\\;').replace(/#/g, '\\#') + ? JSON.stringify(val) + : val.replace(/;/g, '\\;').replace(/#/g, '\\#') } function unsafe (val, doUnesc) { val = (val || '').trim() if (isQuoted(val)) { // remove the single quotes before calling JSON.parse - if (val.charAt(0) === "'") { + if (val.charAt(0) === "'") val = val.substr(1, val.length - 2) - } - try { val = JSON.parse(val) } catch (_) {} + + try { + val = JSON.parse(val) + } catch (_) {} } else { // walk the val to find the first not-escaped ; character var esc = false @@ -171,23 +184,22 @@ for (var i = 0, l = val.length; i < l; i++) { var c = val.charAt(i) if (esc) { - if ('\\;#'.indexOf(c) !== -1) { + if ('\\;#'.indexOf(c) !== -1) unesc += c - } else { + else unesc += '\\' + c - } + esc = false - } else if (';#'.indexOf(c) !== -1) { + } else if (';#'.indexOf(c) !== -1) break - } else if (c === '\\') { + else if (c === '\\') esc = true - } else { + else unesc += c - } } - if (esc) { + if (esc) unesc += '\\' - } + return unesc.trim() } return val diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/ini/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/ini/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/ini/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/ini/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,35 +1,33 @@ { - "_args": [ - [ - "ini@1.3.5", - "/Users/rebecca/code/npm" - ] - ], - "_from": "ini@1.3.5", - "_id": "ini@1.3.5", + "_from": "ini@1.3.8", + "_id": "ini@1.3.8", "_inBundle": false, - "_integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "_integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "_location": "/ini", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "ini@1.3.5", + "raw": "ini@1.3.8", "name": "ini", "escapedName": "ini", - "rawSpec": "1.3.5", + "rawSpec": "1.3.8", "saveSpec": null, - "fetchSpec": "1.3.5" + "fetchSpec": "1.3.8" }, "_requiredBy": [ + "#USER", "/", "/config-chain", "/global-dirs", + "/libcipm", + "/libnpmconfig", "/rc" ], - "_resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "_spec": "1.3.5", - "_where": "/Users/rebecca/code/npm", + "_resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "_shasum": "a29da425b48806f34767a4efce397269af28432c", + "_spec": "ini@1.3.8", + "_where": "/Users/darcyclarke/Documents/Repos/npm/npm/cli", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", @@ -38,14 +36,16 @@ "bugs": { "url": "https://github.com/isaacs/ini/issues" }, - "dependencies": {}, + "bundleDependencies": false, + "deprecated": false, "description": "An ini encoder/decoder for node", "devDependencies": { - "standard": "^10.0.3", - "tap": "^10.7.3 || 11" - }, - "engines": { - "node": "*" + "eslint": "^7.9.0", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "tap": "14" }, "files": [ "ini.js" @@ -59,11 +59,14 @@ "url": "git://github.com/isaacs/ini.git" }, "scripts": { - "postpublish": "git push origin --all; git push origin --tags", + "eslint": "eslint", + "lint": "npm run eslint -- ini.js test/*.js", + "lintfix": "npm run lint -- --fix", + "posttest": "npm run lint", "postversion": "npm publish", - "pretest": "standard ini.js", + "prepublishOnly": "git push origin --follow-tags", "preversion": "npm test", - "test": "tap test/*.js --100 -J" + "test": "tap" }, - "version": "1.3.5" + "version": "1.3.8" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/invert-kv/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/invert-kv/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/invert-kv/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/invert-kv/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -'use strict'; -module.exports = object => { - if (typeof object !== 'object') { - throw new TypeError('Expected an object'); - } - - const ret = {}; - - for (const key of Object.keys(object)) { - const value = object[key]; - ret[value] = key; - } - - return ret; -}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/invert-kv/license nodejs-mozilla-12.22.12/deps/npm/node_modules/invert-kv/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/invert-kv/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/invert-kv/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/invert-kv/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/invert-kv/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/invert-kv/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/invert-kv/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -{ - "_from": "invert-kv@^2.0.0", - "_id": "invert-kv@2.0.0", - "_inBundle": false, - "_integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "_location": "/invert-kv", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "invert-kv@^2.0.0", - "name": "invert-kv", - "escapedName": "invert-kv", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/lcid" - ], - "_resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "_shasum": "7393f5afa59ec9ff5f67a27620d11c226e3eec02", - "_spec": "invert-kv@^2.0.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/lcid", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/invert-kv/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Invert the key/value of an object. Example: `{foo: 'bar'}` → `{bar: 'foo'}`", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/invert-kv#readme", - "keywords": [ - "object", - "key", - "value", - "kv", - "invert" - ], - "license": "MIT", - "name": "invert-kv", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/invert-kv.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "2.0.0" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/invert-kv/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/invert-kv/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/invert-kv/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/invert-kv/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -# invert-kv [![Build Status](https://travis-ci.org/sindresorhus/invert-kv.svg?branch=master)](https://travis-ci.org/sindresorhus/invert-kv) - -> Invert the key/value of an object. Example: `{foo: 'bar'}` → `{bar: 'foo'}` - - -## Install - -``` -$ npm install invert-kv -``` - - -## Usage - -```js -const invertKv = require('invert-kv'); - -invertKv({foo: 'bar', unicorn: 'rainbow'}); -//=> {bar: 'foo', rainbow: 'unicorn'} -``` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-00/hyper-schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-00/hyper-schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-00/hyper-schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-00/hyper-schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-00/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "dot-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-00/schema#"} -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-00/json-ref nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-00/json-ref --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-00/json-ref 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-00/json-ref 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-00/links nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-00/links --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-00/links 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-00/links 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-00/hyper-schema#"}, - "optional" : true - } - } -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-00/schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-00/schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-00/schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-00/schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,155 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-00/hyper-schema#", - "id" : "http://json-schema.org/draft-00/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1 - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "maxDecimal" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-01/hyper-schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-01/hyper-schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-01/hyper-schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-01/hyper-schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-01/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "dot-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-01/schema#"} -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-01/json-ref nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-01/json-ref --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-01/json-ref 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-01/json-ref 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-01/links nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-01/links --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-01/links 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-01/links 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-01/hyper-schema#"}, - "optional" : true - } - } -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-01/schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-01/schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-01/schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-01/schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,155 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-01/hyper-schema#", - "id" : "http://json-schema.org/draft-01/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1 - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "maxDecimal" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-02/hyper-schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-02/hyper-schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-02/hyper-schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-02/hyper-schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-02/links#"}, - "optional" : true - }, - - "fragmentResolution" : { - "type" : "string", - "optional" : true, - "default" : "slash-delimited" - }, - - "root" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pathStart" : { - "type" : "string", - "optional" : true, - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "optional" : true, - "format" : "media-type" - }, - - "alternate" : { - "type" : "array", - "items" : {"$ref" : "#"}, - "optional" : true - } - }, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "slash-delimited", - "extends" : {"$ref" : "http://json-schema.org/draft-02/schema#"} -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-02/json-ref nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-02/json-ref --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-02/json-ref 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-02/json-ref 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/json-ref#", - - "items" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - }, - - { - "href" : "{id}", - "rel" : "self" - } - ], - - "fragmentResolution" : "dot-delimited" -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-02/links nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-02/links --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-02/links 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-02/links 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string" - }, - - "rel" : { - "type" : "string" - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-02/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET", - "optional" : true - }, - - "enctype" : { - "type" : "string", - "requires" : "method", - "optional" : true - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-02/hyper-schema#"}, - "optional" : true - } - } -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-02/schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-02/schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-02/schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-02/schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,166 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-02/hyper-schema#", - "id" : "http://json-schema.org/draft-02/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "optional" : true, - "uniqueItems" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - }, - - "optional" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "optional" : true, - "default" : {} - }, - - "requires" : { - "type" : ["string", {"$ref" : "#"}], - "optional" : true - }, - - "minimum" : { - "type" : "number", - "optional" : true - }, - - "maximum" : { - "type" : "number", - "optional" : true - }, - - "minimumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "minimum", - "default" : true - }, - - "maximumCanEqual" : { - "type" : "boolean", - "optional" : true, - "requires" : "maximum", - "default" : true - }, - - "minItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "optional" : true, - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "optional" : true, - "default" : false - }, - - "pattern" : { - "type" : "string", - "optional" : true, - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "optional" : true, - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer", - "optional" : true - }, - - "enum" : { - "type" : "array", - "optional" : true, - "minItems" : 1, - "uniqueItems" : true - }, - - "title" : { - "type" : "string", - "optional" : true - }, - - "description" : { - "type" : "string", - "optional" : true - }, - - "format" : { - "type" : "string", - "optional" : true - }, - - "contentEncoding" : { - "type" : "string", - "optional" : true - }, - - "default" : { - "type" : "any", - "optional" : true - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "minimumCanEqual" : false, - "optional" : true, - "default" : 1 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : {"type" : "string"}, - "optional" : true, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "optional" : true, - "default" : {} - } - }, - - "optional" : true, - "default" : {} -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/address nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/address --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/address 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/address 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -{ - "description" : "An Address following the convention of http://microformats.org/wiki/hcard", - "type" : "object", - "properties" : { - "post-office-box" : { "type" : "string" }, - "extended-address" : { "type" : "string" }, - "street-address" : { "type":"string" }, - "locality" : { "type" : "string", "required" : true }, - "region" : { "type" : "string", "required" : true }, - "postal-code" : { "type" : "string" }, - "country-name" : { "type" : "string", "required" : true } - }, - "dependencies" : { - "post-office-box" : "street-address", - "extended-address" : "street-address", - "street-address" : "region", - "locality" : "region", - "region" : "country-name" - } -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/calendar nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/calendar --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/calendar 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/calendar 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -{ - "description" : "A representation of an event", - "type" : "object", - "properties" : { - "dtstart" : { - "format" : "date-time", - "type" : "string", - "description" : "Event starting time", - "required":true - }, - "summary" : { - "type":"string", - "required":true - }, - "location" : { - "type" : "string" - }, - "url" : { - "type" : "string", - "format" : "url" - }, - "dtend" : { - "format" : "date-time", - "type" : "string", - "description" : "Event ending time" - }, - "duration" : { - "format" : "date", - "type" : "string", - "description" : "Event duration" - }, - "rdate" : { - "format" : "date-time", - "type" : "string", - "description" : "Recurrence date" - }, - "rrule" : { - "type" : "string", - "description" : "Recurrence rule" - }, - "category" : { - "type" : "string" - }, - "description" : { - "type" : "string" - }, - "geo" : { "$ref" : "http://json-schema.org/draft-03/geo" } - } -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/card nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/card --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/card 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/card 1970-01-01 00:00:00.000000000 +0000 @@ -1,105 +0,0 @@ -{ - "description":"A representation of a person, company, organization, or place", - "type":"object", - "properties":{ - "fn":{ - "description":"Formatted Name", - "type":"string" - }, - "familyName":{ - "type":"string", - "required":true - }, - "givenName":{ - "type":"string", - "required":true - }, - "additionalName":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "honorificPrefix":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "honorificSuffix":{ - "type":"array", - "items":{ - "type":"string" - } - }, - "nickname":{ - "type":"string" - }, - "url":{ - "type":"string", - "format":"url" - }, - "email":{ - "type":"object", - "properties":{ - "type":{ - "type":"string" - }, - "value":{ - "type":"string", - "format":"email" - } - } - }, - "tel":{ - "type":"object", - "properties":{ - "type":{ - "type":"string" - }, - "value":{ - "type":"string", - "format":"phone" - } - } - }, - "adr":{"$ref" : "http://json-schema.org/address"}, - "geo":{"$ref" : "http://json-schema.org/geo"}, - "tz":{ - "type":"string" - }, - "photo":{ - "format":"image", - "type":"string" - }, - "logo":{ - "format":"image", - "type":"string" - }, - "sound":{ - "format":"attachment", - "type":"string" - }, - "bday":{ - "type":"string", - "format":"date" - }, - "title":{ - "type":"string" - }, - "role":{ - "type":"string" - }, - "org":{ - "type":"object", - "properties":{ - "organizationName":{ - "type":"string" - }, - "organizationUnit":{ - "type":"string" - } - } - } - } -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/geo nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/geo --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/geo 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/geo 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -{ - "description" : "A geographical coordinate", - "type" : "object", - "properties" : { - "latitude" : { "type" : "number" }, - "longitude" : { "type" : "number" } - } -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/interfaces nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/interfaces --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/examples/interfaces 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/examples/interfaces 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -{ - "extends":"http://json-schema.org/hyper-schema", - "description":"A schema for schema interface definitions that describe programmatic class structures using JSON schema syntax", - "properties":{ - "methods":{ - "type":"object", - "description":"This defines the set of methods available to the class instances", - "additionalProperties":{ - "type":"object", - "description":"The definition of the method", - "properties":{ - "parameters":{ - "type":"array", - "description":"The set of parameters that should be passed to the method when it is called", - "items":{"$ref":"#"}, - "required": true - }, - "returns":{"$ref":"#"} - } - } - } - } -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/hyper-schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/hyper-schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/hyper-schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/hyper-schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "extends" : {"$ref" : "http://json-schema.org/draft-03/schema#"}, - "id" : "http://json-schema.org/draft-03/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-03/links#"} - }, - - "fragmentResolution" : { - "type" : "string", - "default" : "slash-delimited" - }, - - "root" : { - "type" : "boolean", - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "default" : false - }, - - "contentEncoding" : { - "type" : "string" - }, - - "pathStart" : { - "type" : "string", - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "format" : "media-type" - } - }, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "slash-delimited" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/json-ref nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/json-ref --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/json-ref 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/json-ref 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "id" : "http://json-schema.org/draft-03/json-ref#", - - "additionalItems" : {"$ref" : "#"}, - "additionalProperties" : {"$ref" : "#"}, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "dot-delimited" -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/links nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/links --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/links 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/links 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-03/hyper-schema#", - "id" : "http://json-schema.org/draft-03/links#", - "type" : "object", - - "properties" : { - "href" : { - "type" : "string", - "required" : true, - "format" : "link-description-object-template" - }, - - "rel" : { - "type" : "string", - "required" : true - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-03/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET" - }, - - "enctype" : { - "type" : "string", - "requires" : "method" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-03/hyper-schema#"} - } - } -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-03/schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-03/schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-03/schema#", - "id" : "http://json-schema.org/draft-03/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true, - "default" : "any" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "patternProperties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalItems" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "required" : { - "type" : "boolean", - "default" : false - }, - - "dependencies" : { - "type" : "object", - "additionalProperties" : { - "type" : ["string", "array", {"$ref" : "#"}], - "items" : { - "type" : "string" - } - }, - "default" : {} - }, - - "minimum" : { - "type" : "number" - }, - - "maximum" : { - "type" : "number" - }, - - "exclusiveMinimum" : { - "type" : "boolean", - "default" : false - }, - - "exclusiveMaximum" : { - "type" : "boolean", - "default" : false - }, - - "minItems" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "default" : false - }, - - "pattern" : { - "type" : "string", - "format" : "regex" - }, - - "minLength" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer" - }, - - "enum" : { - "type" : "array", - "minItems" : 1, - "uniqueItems" : true - }, - - "default" : { - "type" : "any" - }, - - "title" : { - "type" : "string" - }, - - "description" : { - "type" : "string" - }, - - "format" : { - "type" : "string" - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "exclusiveMinimum" : true, - "default" : 1 - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "id" : { - "type" : "string", - "format" : "uri" - }, - - "$ref" : { - "type" : "string", - "format" : "uri" - }, - - "$schema" : { - "type" : "string", - "format" : "uri" - } - }, - - "dependencies" : { - "exclusiveMinimum" : "minimum", - "exclusiveMaximum" : "maximum" - }, - - "default" : {} -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-04/hyper-schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-04/hyper-schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-04/hyper-schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-04/hyper-schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-04/hyper-schema#", - "extends" : {"$ref" : "http://json-schema.org/draft-04/schema#"}, - "id" : "http://json-schema.org/draft-04/hyper-schema#", - - "properties" : { - "links" : { - "type" : "array", - "items" : {"$ref" : "http://json-schema.org/draft-04/links#"} - }, - - "fragmentResolution" : { - "type" : "string", - "default" : "json-pointer" - }, - - "root" : { - "type" : "boolean", - "default" : false - }, - - "readonly" : { - "type" : "boolean", - "default" : false - }, - - "contentEncoding" : { - "type" : "string" - }, - - "pathStart" : { - "type" : "string", - "format" : "uri" - }, - - "mediaType" : { - "type" : "string", - "format" : "media-type" - } - }, - - "links" : [ - { - "href" : "{id}", - "rel" : "self" - }, - - { - "href" : "{$ref}", - "rel" : "full" - }, - - { - "href" : "{$schema}", - "rel" : "describedby" - } - ], - - "fragmentResolution" : "json-pointer" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-04/links nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-04/links --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-04/links 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-04/links 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-04/hyper-schema#", - "id" : "http://json-schema.org/draft-04/links#", - "type" : "object", - - "properties" : { - "rel" : { - "type" : "string" - }, - - "href" : { - "type" : "string" - }, - - "template" : { - "type" : "string" - }, - - "targetSchema" : {"$ref" : "http://json-schema.org/draft-04/hyper-schema#"}, - - "method" : { - "type" : "string", - "default" : "GET" - }, - - "enctype" : { - "type" : "string" - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "http://json-schema.org/draft-04/hyper-schema#"} - } - }, - - "required" : ["rel", "href"], - - "dependencies" : { - "enctype" : "method" - } -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-04/schema nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-04/schema --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-04/schema 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-04/schema 1970-01-01 00:00:00.000000000 +0000 @@ -1,189 +0,0 @@ -{ - "$schema" : "http://json-schema.org/draft-04/schema#", - "id" : "http://json-schema.org/draft-04/schema#", - "type" : "object", - - "properties" : { - "type" : { - "type" : [ - { - "id" : "#simple-type", - "type" : "string", - "enum" : ["object", "array", "string", "number", "boolean", "null", "any"] - }, - "array" - ], - "items" : { - "type" : [ - {"$ref" : "#simple-type"}, - {"$ref" : "#"} - ] - }, - "uniqueItems" : true, - "default" : "any" - }, - - "disallow" : { - "type" : ["string", "array"], - "items" : { - "type" : ["string", {"$ref" : "#"}] - }, - "uniqueItems" : true - }, - - "extends" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "enum" : { - "type" : "array", - "minItems" : 1, - "uniqueItems" : true - }, - - "minimum" : { - "type" : "number" - }, - - "maximum" : { - "type" : "number" - }, - - "exclusiveMinimum" : { - "type" : "boolean", - "default" : false - }, - - "exclusiveMaximum" : { - "type" : "boolean", - "default" : false - }, - - "divisibleBy" : { - "type" : "number", - "minimum" : 0, - "exclusiveMinimum" : true, - "default" : 1 - }, - - "minLength" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxLength" : { - "type" : "integer" - }, - - "pattern" : { - "type" : "string" - }, - - "items" : { - "type" : [{"$ref" : "#"}, "array"], - "items" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalItems" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "minItems" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxItems" : { - "type" : "integer", - "minimum" : 0 - }, - - "uniqueItems" : { - "type" : "boolean", - "default" : false - }, - - "properties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "patternProperties" : { - "type" : "object", - "additionalProperties" : {"$ref" : "#"}, - "default" : {} - }, - - "additionalProperties" : { - "type" : [{"$ref" : "#"}, "boolean"], - "default" : {} - }, - - "minProperties" : { - "type" : "integer", - "minimum" : 0, - "default" : 0 - }, - - "maxProperties" : { - "type" : "integer", - "minimum" : 0 - }, - - "required" : { - "type" : "array", - "items" : { - "type" : "string" - } - }, - - "dependencies" : { - "type" : "object", - "additionalProperties" : { - "type" : ["string", "array", {"$ref" : "#"}], - "items" : { - "type" : "string" - } - }, - "default" : {} - }, - - "id" : { - "type" : "string" - }, - - "$ref" : { - "type" : "string" - }, - - "$schema" : { - "type" : "string" - }, - - "title" : { - "type" : "string" - }, - - "description" : { - "type" : "string" - }, - - "default" : { - "type" : "any" - } - }, - - "dependencies" : { - "exclusiveMinimum" : "minimum", - "exclusiveMaximum" : "maximum" - }, - - "default" : {} -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-zyp-json-schema-03.xml nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-zyp-json-schema-03.xml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-zyp-json-schema-03.xml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-zyp-json-schema-03.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,1120 +0,0 @@ - - - - - - - - - - - - - - - -]> - - - - - - - - - A JSON Media Type for Describing the Structure and Meaning of JSON Documents - - - SitePen (USA) -
- - 530 Lytton Avenue - Palo Alto, CA 94301 - USA - - +1 650 968 8787 - kris@sitepen.com -
-
- - -
- - - Calgary, AB - Canada - - gary.court@gmail.com -
-
- - - Internet Engineering Task Force - JSON - Schema - JavaScript - Object - Notation - Hyper Schema - Hypermedia - - - - JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", - a JSON based format for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - - -
- - -
- - JSON (JavaScript Object Notation) Schema is a JSON media type for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - -
- -
- - - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119. - -
- - - -
- - JSON Schema defines the media type "application/schema+json" for - describing the structure of other - JSON documents. JSON Schema is JSON-based and includes facilities - for describing the structure of JSON documents in terms of - allowable values, descriptions, and interpreting relations with other resources. - - - JSON Schema format is organized into several separate definitions. The first - definition is the core schema specification. This definition is primary - concerned with describing a JSON structure and specifying valid elements - in the structure. The second definition is the Hyper Schema specification - which is intended define elements in a structure that can be interpreted as - hyperlinks. - Hyper Schema builds on JSON Schema to describe the hyperlink structure of - other JSON documents and elements of interaction. This allows user agents to be able to successfully navigate - JSON documents based on their schemas. - - - Cumulatively JSON Schema acts as a meta-document that can be used to define the required type and constraints on - property values, as well as define the meaning of the property values - for the purpose of describing a resource and determining hyperlinks - within the representation. - -
- An example JSON Schema that describes products might look like: - - - - - This schema defines the properties of the instance JSON documents, - the required properties (id, name, and price), as well as an optional - property (tags). This also defines the link relations of the instance - JSON documents. - -
- -
- - For this specification, schema will be used to denote a JSON Schema - definition, and an instance refers to a JSON value that the schema - will be describing and validating. - -
- -
- - The JSON Schema media type does not attempt to dictate the structure of JSON - representations that contain data, but rather provides a separate format - for flexibly communicating how a JSON representation should be - interpreted and validated, such that user agents can properly understand - acceptable structures and extrapolate hyperlink information - with the JSON document. It is acknowledged that JSON documents come - in a variety of structures, and JSON is unique in that the structure - of stored data structures often prescribes a non-ambiguous definite - JSON representation. Attempting to force a specific structure is generally - not viable, and therefore JSON Schema allows for a great flexibility - in the structure of the JSON data that it describes. - - - This specification is protocol agnostic. - The underlying protocol (such as HTTP) should sufficiently define the - semantics of the client-server interface, the retrieval of resource - representations linked to by JSON representations, and modification of - those resources. The goal of this - format is to sufficiently describe JSON structures such that one can - utilize existing information available in existing JSON - representations from a large variety of services that leverage a representational state transfer - architecture using existing protocols. - -
-
- -
- - JSON Schema instances are correlated to their schema by the "describedby" - relation, where the schema is defined to be the target of the relation. - Instance representations may be of the "application/json" media type or - any other subtype. Consequently, dictating how an instance - representation should specify the relation to the schema is beyond the normative scope - of this document (since this document specifically defines the JSON - Schema media type, and no other), but it is recommended that instances - specify their schema so that user agents can interpret the instance - representation and messages may retain the self-descriptive - characteristic, avoiding the need for out-of-band information about - instance data. Two approaches are recommended for declaring the - relation to the schema that describes the meaning of a JSON instance's (or collection - of instances) structure. A MIME type parameter named - "profile" or a relation of "describedby" (which could be defined by a Link header) may be used: - -
- - - -
- - or if the content is being transferred by a protocol (such as HTTP) that - provides headers, a Link header can be used: - -
- -; rel="describedby" -]]> - -
- - Instances MAY specify multiple schemas, to indicate all the schemas that - are applicable to the data, and the data SHOULD be valid by all the schemas. - The instance data MAY have multiple schemas - that it is defined by (the instance data SHOULD be valid for those schemas). - Or if the document is a collection of instances, the collection MAY contain - instances from different schemas. When collections contain heterogeneous - instances, the "pathStart" attribute MAY be specified in the - schema to disambiguate which schema should be applied for each item in the - collection. However, ultimately, the mechanism for referencing a schema is up to the - media type of the instance documents (if they choose to specify that schemas - can be referenced). -
- -
- - JSON Schemas can themselves be described using JSON Schemas. - A self-describing JSON Schema for the core JSON Schema can - be found at http://json-schema.org/schema for the latest version or - http://json-schema.org/draft-03/schema for the draft-03 version. The hyper schema - self-description can be found at http://json-schema.org/hyper-schema - or http://json-schema.org/draft-03/hyper-schema. All schemas - used within a protocol with media type definitions - SHOULD include a MIME parameter that refers to the self-descriptive - hyper schema or another schema that extends this hyper schema: - -
- - - -
-
-
-
- -
- - A JSON Schema is a JSON Object that defines various attributes - (including usage and valid values) of a JSON value. JSON - Schema has recursive capabilities; there are a number of elements - in the structure that allow for nested JSON Schemas. - - -
- An example JSON Schema definition could look like: - - - -
- - - A JSON Schema object may have any of the following properties, called schema - attributes (all attributes are optional): - - -
- - This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. - This attribute can take one of two forms: - - - - A string indicating a primitive or simple type. The following are acceptable string values: - - - Value MUST be a string. - Value MUST be a number, floating point numbers are allowed. - Value MUST be an integer, no floating point numbers are allowed. This is a subset of the number type. - Value MUST be a boolean. - Value MUST be an object. - Value MUST be an array. - Value MUST be null. Note this is mainly for purpose of being able use union types to define nullability. If this type is not included in a union, null values are not allowed (the primitives listed above do not allow nulls on their own). - Value MAY be of any type including null. - - - If the property is not defined or is not in this list, then any type of value is acceptable. - Other type values MAY be used for custom purposes, but minimal validators of the specification - implementation can allow any instance value on unknown type values. - - - - An array of two or more simple type definitions. Each item in the array MUST be a simple type definition or a schema. - The instance value is valid if it is of the same type as one of the simple type definitions, or valid by one of the schemas, in the array. - - - - -
- For example, a schema that defines if an instance can be a string or a number would be: - - -
-
- -
- This attribute is an object with property definitions that define the valid values of instance object property values. When the instance value is an object, the property values of the instance object MUST conform to the property definitions in this object. In this object, each property definition's value MUST be a schema, and the property's name MUST be the name of the instance property that it defines. The instance property value MUST be valid according to the schema from the property definition. Properties are considered unordered, the order of the instance properties MAY be in any order. -
- -
- This attribute is an object that defines the schema for a set of property names of an object instance. The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. -
- -
- This attribute defines a schema for all properties that are not explicitly defined in an object type definition. If specified, the value MUST be a schema or a boolean. If false is provided, no additional properties are allowed beyond the properties defined in the schema. The default value is an empty schema which allows any value for additional properties. -
- -
- This attribute defines the allowed items in an instance array, and MUST be a schema or an array of schemas. The default value is an empty schema which allows any value for items in the instance array. - When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. - When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST conform to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute using the same rules as "additionalProperties" for objects. -
- -
- This provides a definition for additional items in an array instance when tuple definitions of the items is provided. This can be false to indicate additional items in the array are not allowed, or it can be a schema that defines the schema of the additional items. -
- -
- This attribute indicates if the instance must have a value, and not be undefined. This is false by default, making the instance optional. -
- -
- This attribute is an object that defines the requirements of a property on an instance object. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). - - The dependency value can take one of two forms: - - - - If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. - If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. - - - If the dependency value is a schema, then the instance object MUST be valid against the schema. - - - -
- -
- This attribute defines the minimum value of the instance property when the type of the instance value is a number. -
- -
- This attribute defines the maximum value of the instance property when the type of the instance value is a number. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. -
- -
- This attribute defines the minimum number of values in an array when the array is the instance value. -
- -
- This attribute defines the maximum number of values in an array when the array is the instance value. -
- -
- This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). - - Two instance are consider equal if they are both of the same type and: - - - are null; or - are booleans/numbers/strings and have the same value; or - are arrays, contains the same number of items, and each item in the array is equal to the corresponding item in the other array; or - are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. - - -
- -
- When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 -
- -
- When the instance value is a string, this defines the minimum length of the string. -
- -
- When the instance value is a string, this defines the maximum length of the string. -
- -
- This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". -
- -
- This attribute defines the default value of the instance when the instance is undefined. -
- -
- This attribute is a string that provides a short description of the instance property. -
- -
- This attribute is a string that provides a full description of the of purpose the instance property. -
- -
- This property defines the type of data, content type, or microformat to be expected in the instance property values. A format attribute MAY be one of the values listed below, and if so, SHOULD adhere to the semantics describing for the format. A format SHOULD only be used to give meaning to primitive types (string, integer, number, or boolean). Validators MAY (but are not required to) validate that the instance values conform to a format. - - - The following formats are predefined: - - - This SHOULD be a date in ISO 8601 format of YYYY-MM-DDThh:mm:ssZ in UTC time. This is the recommended form of date/timestamp. - This SHOULD be a date in the format of YYYY-MM-DD. It is recommended that you use the "date-time" format instead of "date" unless you need to transfer only the date part. - This SHOULD be a time in the format of hh:mm:ss. It is recommended that you use the "date-time" format instead of "time" unless you need to transfer only the time part. - This SHOULD be the difference, measured in milliseconds, between the specified time and midnight, 00:00 of January 1, 1970 UTC. The value SHOULD be a number (integer or float). - A regular expression, following the regular expression specification from ECMA 262/Perl 5. - This is a CSS color (like "#FF0000" or "red"), based on CSS 2.1. - This is a CSS style definition (like "color: red; background-color:#FFF"), based on CSS 2.1. - This SHOULD be a phone number (format MAY follow E.123). - This value SHOULD be a URI. - This SHOULD be an email address. - This SHOULD be an ip version 4 address. - This SHOULD be an ip version 6 address. - This SHOULD be a host-name. - - - - Additional custom formats MAY be created. These custom formats MAY be expressed as an URI, and this URI MAY reference a schema of that format. -
- -
- This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. -
- -
- This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. -
- -
- The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. - - Conceptually, the behavior of extends can be seen as validating an - instance against all constraints in the extending schema as well as - the extended schema(s). More optimized implementations that merge - schemas are possible, but are not required. Some examples of using "extends": - -
- - - -
- -
- - - -
-
-
- -
- - This attribute defines the current URI of this schema (this attribute is - effectively a "self" link). This URI MAY be relative or absolute. If - the URI is relative it is resolved against the current URI of the parent - schema it is contained in. If this schema is not contained in any - parent schema, the current URI of the parent schema is held to be the - URI under which this schema was addressed. If id is missing, the current URI of a schema is - defined to be that of the parent schema. The current URI of the schema - is also used to construct relative references such as for $ref. - -
- -
- - This attribute defines a URI of a schema that contains the full representation of this schema. - When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. - This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. - -
- -
- - This attribute defines a URI of a JSON Schema that is the schema of the current schema. - When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. - - - - A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. - Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. - -
-
- -
- - The following attributes are specified in addition to those - attributes that already provided by the core schema with the specific - purpose of informing user agents of relations between resources based - on JSON data. Just as with JSON - schema attributes, all the attributes in hyper schemas are optional. - Therefore, an empty object is a valid (non-informative) schema, and - essentially describes plain JSON (no constraints on the structures). - Addition of attributes provides additive information for user agents. - - -
- - The value of the links property MUST be an array, where each item - in the array is a link description object which describes the link - relations of the instances. - - -
- - A link description object is used to describe link relations. In - the context of a schema, it defines the link relations of the - instances of the schema, and can be parameterized by the instance - values. The link description format can be used on its own in - regular (non-schema documents), and use of this format can - be declared by referencing the normative link description - schema as the the schema for the data structure that uses the - links. The URI of the normative link description schema is: - http://json-schema.org/links (latest version) or - http://json-schema.org/draft-03/links (draft-03 version). - - -
- - The value of the "href" link description property - indicates the target URI of the related resource. The value - of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 - and MAY be a relative URI. The base URI to be used for relative resolution - SHOULD be the URI used to retrieve the instance object (not the schema) - when used within a schema. Also, when links are used within a schema, the URI - SHOULD be parametrized by the property values of the instance - object, if property values exist for the corresponding variables - in the template (otherwise they MAY be provided from alternate sources, like user input). - - - - Instance property values SHOULD be substituted into the URIs where - matching braces ('{', '}') are found surrounding zero or more characters, - creating an expanded URI. Instance property value substitutions are resolved - by using the text between the braces to denote the property name - from the instance to get the value to substitute. - -
- For example, if an href value is defined: - - - - Then it would be resolved by replace the value of the "id" property value from the instance object. -
- -
- If the value of the "id" property was "45", the expanded URI would be: - - - -
- - If matching braces are found with the string "@" (no quotes) between the braces, then the - actual instance value SHOULD be used to replace the braces, rather than a property value. - This should only be used in situations where the instance is a scalar (string, - boolean, or number), and not for objects or arrays. -
-
- -
- - The value of the "rel" property indicates the name of the - relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. - - - - Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: - - - - If the relation value is "self", when this property is encountered in - the instance object, the object represents a resource and the instance object is - treated as a full representation of the target resource identified by - the specified URI. - - - - This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. - - - - This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. - - - - This relation indicates that the target of the link - SHOULD be treated as the root or the body of the representation for the - purposes of user agent interaction or fragment resolution. All other - properties of the instance objects can be regarded as meta-data - descriptions for the data. - - - - - - The following relations are applicable for schemas (the schema as the "from" resource in the relation): - - - This indicates the target resource that represents collection of instances of a schema. - This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). - - - - -
- For example, if a schema is defined: - - - -
- -
- And if a collection of instance resource's JSON representation was retrieved: - - - -
- - This would indicate that for the first item in the collection, its own - (self) URI would resolve to "/Resource/thing" and the first item's "up" - relation SHOULD be resolved to the resource at "/Resource/parent". - The "children" collection would be located at "/Resource/?upId=thing". -
-
- -
- This property value is a schema that defines the expected structure of the JSON representation of the target of the link. -
- -
- - The following properties also apply to link definition objects, and - provide functionality analogous to HTML forms, in providing a - means for submitting extra (often user supplied) information to send to a server. - - -
- - This attribute defines which method can be used to access the target resource. - In an HTTP environment, this would be "GET" or "POST" (other HTTP methods - such as "PUT" and "DELETE" have semantics that are clearly implied by - accessed resources, and do not need to be defined here). - This defaults to "GET". - -
- -
- - If present, this property indicates a query media type format that the server - supports for querying or posting to the collection of instances at the target - resource. The query can be - suffixed to the target URI to query the collection with - property-based constraints on the resources that SHOULD be returned from - the server or used to post data to the resource (depending on the method). - -
- For example, with the following schema: - - - - This indicates that the client can query the server for instances that have a specific name. -
- -
- For example: - - - -
- - If no enctype or method is specified, only the single URI specified by - the href property is defined. If the method is POST, "application/json" is - the default media type. -
-
- -
- - This attribute contains a schema which defines the acceptable structure of the submitted - request (for a GET request, this schema would define the properties for the query string - and for a POST request, this would define the body). - -
-
-
-
- -
- - This property indicates the fragment resolution protocol to use for - resolving fragment identifiers in URIs within the instance - representations. This applies to the instance object URIs and all - children of the instance object's URIs. The default fragment resolution - protocol is "slash-delimited", which is defined below. Other fragment - resolution protocols MAY be used, but are not defined in this document. - - - - The fragment identifier is based on RFC 2396, Sec 5, and defines the - mechanism for resolving references to entities within a document. - - -
- - With the slash-delimited fragment resolution protocol, the fragment - identifier is interpreted as a series of property reference tokens that start with and - are delimited by the "/" character (\x2F). Each property reference token - is a series of unreserved or escaped URI characters. Each property - reference token SHOULD be interpreted, starting from the beginning of - the fragment identifier, as a path reference in the target JSON - structure. The final target value of the fragment can be determined by - starting with the root of the JSON structure from the representation of - the resource identified by the pre-fragment URI. If the target is a JSON - object, then the new target is the value of the property with the name - identified by the next property reference token in the fragment. If the - target is a JSON array, then the target is determined by finding the - item in array the array with the index defined by the next property - reference token (which MUST be a number). The target is successively - updated for each property reference token, until the entire fragment has - been traversed. - - - - Property names SHOULD be URI-encoded. In particular, any "/" in a - property name MUST be encoded to avoid being interpreted as a property - delimiter. - - - -
- For example, for the following JSON representation: - - - -
- -
- The following fragment identifiers would be resolved: - - - -
-
-
- -
- - The dot-delimited fragment resolution protocol is the same as - slash-delimited fragment resolution protocol except that the "." character - (\x2E) is used as the delimiter between property names (instead of "/") and - the path does not need to start with a ".". For example, #.foo and #foo are a valid fragment - identifiers for referencing the value of the foo propery. - -
-
- -
- This attribute indicates that the instance property SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. -
- -
- If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. -
- -
- - This attribute is a URI that defines what the instance's URI MUST start with in order to validate. - The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, - and is relative to the instance's URI. - - - - When multiple schemas have been referenced for an instance, the user agent - can determine if this schema is applicable for a particular instance by - determining if the URI of the instance begins with the the value of the "pathStart" - attribute. If the URI of the instance does not start with this URI, - or if another schema specifies a starting URI that is longer and also matches the - instance, this schema SHOULD NOT be applied to the instance. Any schema - that does not have a pathStart attribute SHOULD be considered applicable - to all the instances for which it is referenced. - -
- -
- This attribute defines the media type of the instance representations that this schema is defining. -
-
- -
- - This specification is a sub-type of the JSON format, and - consequently the security considerations are generally the same as RFC 4627. - However, an additional issue is that when link relation of "self" - is used to denote a full representation of an object, the user agent - SHOULD NOT consider the representation to be the authoritative representation - of the resource denoted by the target URI if the target URI is not - equivalent to or a sub-path of the the URI used to request the resource - representation which contains the target URI with the "self" link. - -
- For example, if a hyper schema was defined: - - - -
- -
- And a resource was requested from somesite.com: - - - -
- -
- With a response of: - - - -
-
-
- -
- The proposed MIME media type for JSON Schema is "application/schema+json". - Type name: application - Subtype name: schema+json - Required parameters: profile - - The value of the profile parameter SHOULD be a URI (relative or absolute) that - refers to the schema used to define the structure of this structure (the - meta-schema). Normally the value would be http://json-schema.org/draft-03/hyper-schema, - but it is allowable to use other schemas that extend the hyper schema's meta- - schema. - - Optional parameters: pretty - The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. - -
- - This registry is maintained by IANA per RFC 4287 and this specification adds - four values: "full", "create", "instances", "root". New - assignments are subject to IESG Approval, as outlined in RFC 5226. - Requests should be made by email to IANA, which will then forward the - request to the IESG, requesting approval. - -
-
-
- - - - - &rfc2045; - &rfc2119; - &rfc2396; - &rfc3339; - &rfc3986; - &rfc4287; - - - &rfc2616; - &rfc4627; - &rfc5226; - &iddiscovery; - &uritemplate; - &linkheader; - &html401; - &css21; - - -
- - - - - Added example and verbiage to "extends" attribute. - Defined slash-delimited to use a leading slash. - Made "root" a relation instead of an attribute. - Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). - Added more explanation of nullability. - Removed "alternate" attribute. - Upper cased many normative usages of must, may, and should. - Replaced the link submission "properties" attribute to "schema" attribute. - Replaced "optional" attribute with "required" attribute. - Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. - Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. - Replaced "requires" attribute with "dependencies" attribute. - Moved "contentEncoding" attribute to hyper schema. - Added "additionalItems" attribute. - Added "id" attribute. - Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. - Added "patternProperties" attribute. - Schema URIs are now namespace versioned. - Added "$ref" and "$schema" attributes. - - - - - - Replaced "maxDecimal" attribute with "divisibleBy" attribute. - Added slash-delimited fragment resolution protocol and made it the default. - Added language about using links outside of schemas by referencing its normative URI. - Added "uniqueItems" attribute. - Added "targetSchema" attribute to link description object. - - - - - - Fixed category and updates from template. - - - - - - Initial draft. - - - - -
- -
- - - Should we give a preference to MIME headers over Link headers (or only use one)? - Should "root" be a MIME parameter? - Should "format" be renamed to "mediaType" or "contentType" to reflect the usage MIME media types that are allowed? - How should dates be handled? - - -
-
-
diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-zyp-json-schema-04.xml nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-zyp-json-schema-04.xml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/draft-zyp-json-schema-04.xml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/draft-zyp-json-schema-04.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,1072 +0,0 @@ - - - - - - - - - - - - - - -]> - - - - - - - - - A JSON Media Type for Describing the Structure and Meaning of JSON Documents - - - SitePen (USA) -
- - 530 Lytton Avenue - Palo Alto, CA 94301 - USA - - +1 650 968 8787 - kris@sitepen.com -
-
- - -
- - - Calgary, AB - Canada - - gary.court@gmail.com -
-
- - - Internet Engineering Task Force - JSON - Schema - JavaScript - Object - Notation - Hyper Schema - Hypermedia - - - - JSON (JavaScript Object Notation) Schema defines the media type "application/schema+json", - a JSON based format for defining the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - - -
- - -
- - JSON (JavaScript Object Notation) Schema is a JSON media type for defining - the structure of JSON data. JSON Schema provides a contract for what JSON - data is required for a given application and how to interact with it. JSON - Schema is intended to define validation, documentation, hyperlink - navigation, and interaction control of JSON data. - -
- -
- - - - The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", - "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be - interpreted as described in RFC 2119. - - - - The terms "JSON", "JSON text", "JSON value", "member", "element", "object", - "array", "number", "string", "boolean", "true", "false", and "null" in this - document are to be interpreted as defined in RFC 4627. - - - - This specification also uses the following defined terms: - - - A JSON Schema object. - Equivalent to "JSON value" as defined in RFC 4627. - Equivalent to "member" as defined in RFC 4627. - Equivalent to "element" as defined in RFC 4627. - A property of a JSON Schema object. - - -
- -
- - JSON Schema defines the media type "application/schema+json" for - describing the structure of JSON text. JSON Schemas are also written in JSON and includes facilities - for describing the structure of JSON in terms of - allowable values, descriptions, and interpreting relations with other resources. - - - This document is organized into several separate definitions. The first - definition is the core schema specification. This definition is primary - concerned with describing a JSON structure and specifying valid elements - in the structure. The second definition is the Hyper Schema specification - which is intended to define elements in a structure that can be interpreted as - hyperlinks. - Hyper Schema builds on JSON Schema to describe the hyperlink structure of - JSON values. This allows user agents to be able to successfully navigate - documents containing JSON based on their schemas. - - - Cumulatively JSON Schema acts as meta-JSON that can be used to define the - required type and constraints on JSON values, as well as define the meaning - of the JSON values for the purpose of describing a resource and determining - hyperlinks within the representation. - -
- An example JSON Schema that describes products might look like: - - - - - This schema defines the properties of the instance, - the required properties (id, name, and price), as well as an optional - property (tags). This also defines the link relations of the instance. - -
- -
- - The JSON Schema media type does not attempt to dictate the structure of JSON - values that contain data, but rather provides a separate format - for flexibly communicating how a JSON value should be - interpreted and validated, such that user agents can properly understand - acceptable structures and extrapolate hyperlink information - from the JSON. It is acknowledged that JSON values come - in a variety of structures, and JSON is unique in that the structure - of stored data structures often prescribes a non-ambiguous definite - JSON representation. Attempting to force a specific structure is generally - not viable, and therefore JSON Schema allows for a great flexibility - in the structure of the JSON data that it describes. - - - This specification is protocol agnostic. - The underlying protocol (such as HTTP) should sufficiently define the - semantics of the client-server interface, the retrieval of resource - representations linked to by JSON representations, and modification of - those resources. The goal of this - format is to sufficiently describe JSON structures such that one can - utilize existing information available in existing JSON - representations from a large variety of services that leverage a representational state transfer - architecture using existing protocols. - -
-
- -
- - JSON values are correlated to their schema by the "describedby" - relation, where the schema is the target of the relation. - JSON values MUST be of the "application/json" media type or - any other subtype. Consequently, dictating how a JSON value should - specify the relation to the schema is beyond the normative scope - of this document since this document specifically defines the JSON - Schema media type, and no other. It is RECOMMNENDED that JSON values - specify their schema so that user agents can interpret the instance - and retain the self-descriptive characteristics. This avoides the need for out-of-band information about - instance data. Two approaches are recommended for declaring the - relation to the schema that describes the meaning of a JSON instance's (or collection - of instances) structure. A MIME type parameter named - "profile" or a relation of "describedby" (which could be specified by a Link header) may be used: - -
- - - -
- - or if the content is being transferred by a protocol (such as HTTP) that - provides headers, a Link header can be used: - -
- -; rel="describedby" -]]> - -
- - Instances MAY specify multiple schemas, to indicate all the schemas that - are applicable to the data, and the data SHOULD be valid by all the schemas. - The instance data MAY have multiple schemas - that it is described by (the instance data SHOULD be valid for those schemas). - Or if the document is a collection of instances, the collection MAY contain - instances from different schemas. The mechanism for referencing a schema is - determined by the media type of the instance (if it provides a method for - referencing schemas). -
- -
- - JSON Schemas can themselves be described using JSON Schemas. - A self-describing JSON Schema for the core JSON Schema can - be found at http://json-schema.org/schema for the latest version or - http://json-schema.org/draft-04/schema for the draft-04 version. The hyper schema - self-description can be found at http://json-schema.org/hyper-schema - or http://json-schema.org/draft-04/hyper-schema. All schemas - used within a protocol with a media type specified SHOULD include a MIME parameter that refers to the self-descriptive - hyper schema or another schema that extends this hyper schema: - -
- - - -
-
-
-
- -
- - A JSON Schema is a JSON object that defines various attributes - (including usage and valid values) of a JSON value. JSON - Schema has recursive capabilities; there are a number of elements - in the structure that allow for nested JSON Schemas. - - -
- An example JSON Schema could look like: - - - -
- - - A JSON Schema object MAY have any of the following optional properties: - - - - - -
- - This attribute defines what the primitive type or the schema of the instance MUST be in order to validate. - This attribute can take one of two forms: - - - - A string indicating a primitive or simple type. The string MUST be one of the following values: - - - Instance MUST be an object. - Instance MUST be an array. - Instance MUST be a string. - Instance MUST be a number, including floating point numbers. - Instance MUST be the JSON literal "true" or "false". - Instance MUST be the JSON literal "null". Note that without this type, null values are not allowed. - Instance MAY be of any type, including null. - - - - - An array of one or more simple or schema types. - The instance value is valid if it is of the same type as one of the simple types, or valid by one of the schemas, in the array. - - - - If this attribute is not specified, then all value types are accepted. - - -
- For example, a schema that defines if an instance can be a string or a number would be: - - -
-
- -
- - This attribute is an object with properties that specify the schemas for the properties of the instance object. - In this attribute's object, each property value MUST be a schema. - When the instance value is an object, the value of the instance's properties MUST be valid according to the schemas with the same property names specified in this attribute. - Objects are unordered, so therefore the order of the instance properties or attribute properties MUST NOT determine validation success. - -
- -
- - This attribute is an object that defines the schema for a set of property names of an object instance. - The name of each property of this attribute's object is a regular expression pattern in the ECMA 262/Perl 5 format, while the value is a schema. - If the pattern matches the name of a property on the instance object, the value of the instance's property MUST be valid against the pattern name's schema value. - -
- -
- This attribute specifies how any instance property that is not explicitly defined by either the "properties" or "patternProperties" attributes (hereafter referred to as "additional properties") is handled. If specified, the value MUST be a schema or a boolean. - If a schema is provided, then all additional properties MUST be valid according to the schema. - If false is provided, then no additional properties are allowed. - The default value is an empty schema, which allows any value for additional properties. -
- -
- This attribute provides the allowed items in an array instance. If specified, this attribute MUST be a schema or an array of schemas. - When this attribute value is a schema and the instance value is an array, then all the items in the array MUST be valid according to the schema. - When this attribute value is an array of schemas and the instance value is an array, each position in the instance array MUST be valid according to the schema in the corresponding position for this array. This called tuple typing. When tuple typing is used, additional items are allowed, disallowed, or constrained by the "additionalItems" attribute the same way as "additionalProperties" for objects is. -
- -
- This attribute specifies how any item in the array instance that is not explicitly defined by "items" (hereafter referred to as "additional items") is handled. If specified, the value MUST be a schema or a boolean. - If a schema is provided: - - If the "items" attribute is unspecified, then all items in the array instance must be valid against this schema. - If the "items" attribute is a schema, then this attribute is ignored. - If the "items" attribute is an array (during tuple typing), then any additional items MUST be valid against this schema. - - - If false is provided, then any additional items in the array are not allowed. - The default value is an empty schema, which allows any value for additional items. -
- -
- This attribute is an array of strings that defines all the property names that must exist on the object instance. -
- -
- This attribute is an object that specifies the requirements of a property on an object instance. If an object instance has a property with the same name as a property in this attribute's object, then the instance must be valid against the attribute's property value (hereafter referred to as the "dependency value"). - - The dependency value can take one of two forms: - - - - If the dependency value is a string, then the instance object MUST have a property with the same name as the dependency value. - If the dependency value is an array of strings, then the instance object MUST have a property with the same name as each string in the dependency value's array. - - - If the dependency value is a schema, then the instance object MUST be valid against the schema. - - - -
- -
- This attribute defines the minimum value of the instance property when the type of the instance value is a number. -
- -
- This attribute defines the maximum value of the instance property when the type of the instance value is a number. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "minimum" attribute. This is false by default, meaning the instance value can be greater then or equal to the minimum value. -
- -
- This attribute indicates if the value of the instance (if the instance is a number) can not equal the number defined by the "maximum" attribute. This is false by default, meaning the instance value can be less then or equal to the maximum value. -
- -
- This attribute defines the minimum number of values in an array when the array is the instance value. -
- -
- This attribute defines the maximum number of values in an array when the array is the instance value. -
- -
- This attribute defines the minimum number of properties required on an object instance. -
- -
- This attribute defines the maximum number of properties the object instance can have. -
- -
- This attribute indicates that all items in an array instance MUST be unique (contains no two identical values). - - Two instance are consider equal if they are both of the same type and: - - - are null; or - are booleans/numbers/strings and have the same value; or - are arrays, contains the same number of items, and each item in the array is equal to the item at the corresponding index in the other array; or - are objects, contains the same property names, and each property in the object is equal to the corresponding property in the other object. - - -
- -
- When the instance value is a string, this provides a regular expression that a string instance MUST match in order to be valid. Regular expressions SHOULD follow the regular expression specification from ECMA 262/Perl 5 -
- -
- When the instance value is a string, this defines the minimum length of the string. -
- -
- When the instance value is a string, this defines the maximum length of the string. -
- -
- This provides an enumeration of all possible values that are valid for the instance property. This MUST be an array, and each item in the array represents a possible value for the instance value. If this attribute is defined, the instance value MUST be one of the values in the array in order for the schema to be valid. Comparison of enum values uses the same algorithm as defined in "uniqueItems". -
- -
- This attribute defines the default value of the instance when the instance is undefined. -
- -
- This attribute is a string that provides a short description of the instance property. -
- -
- This attribute is a string that provides a full description of the of purpose the instance property. -
- -
- This attribute defines what value the number instance must be divisible by with no remainder (the result of the division must be an integer.) The value of this attribute SHOULD NOT be 0. -
- -
- This attribute takes the same values as the "type" attribute, however if the instance matches the type or if this value is an array and the instance matches any type or schema in the array, then this instance is not valid. -
- -
- The value of this property MUST be another schema which will provide a base schema which the current schema will inherit from. The inheritance rules are such that any instance that is valid according to the current schema MUST be valid according to the referenced schema. This MAY also be an array, in which case, the instance MUST be valid for all the schemas in the array. A schema that extends another schema MAY define additional attributes, constrain existing attributes, or add other constraints. - - Conceptually, the behavior of extends can be seen as validating an - instance against all constraints in the extending schema as well as - the extended schema(s). More optimized implementations that merge - schemas are possible, but are not required. Some examples of using "extends": - -
- - - -
- -
- - - -
-
-
- -
- - This attribute defines the current URI of this schema (this attribute is - effectively a "self" link). This URI MAY be relative or absolute. If - the URI is relative it is resolved against the current URI of the parent - schema it is contained in. If this schema is not contained in any - parent schema, the current URI of the parent schema is held to be the - URI under which this schema was addressed. If id is missing, the current URI of a schema is - defined to be that of the parent schema. The current URI of the schema - is also used to construct relative references such as for $ref. - -
- -
- - This attribute defines a URI of a schema that contains the full representation of this schema. - When a validator encounters this attribute, it SHOULD replace the current schema with the schema referenced by the value's URI (if known and available) and re-validate the instance. - This URI MAY be relative or absolute, and relative URIs SHOULD be resolved against the URI of the current schema. - -
- -
- - This attribute defines a URI of a JSON Schema that is the schema of the current schema. - When this attribute is defined, a validator SHOULD use the schema referenced by the value's URI (if known and available) when resolving Hyper Schemalinks. - - - - A validator MAY use this attribute's value to determine which version of JSON Schema the current schema is written in, and provide the appropriate validation features and behavior. - Therefore, it is RECOMMENDED that all schema authors include this attribute in their schemas to prevent conflicts with future JSON Schema specification changes. - -
-
- -
- - The following attributes are specified in addition to those - attributes that already provided by the core schema with the specific - purpose of informing user agents of relations between resources based - on JSON data. Just as with JSON - schema attributes, all the attributes in hyper schemas are optional. - Therefore, an empty object is a valid (non-informative) schema, and - essentially describes plain JSON (no constraints on the structures). - Addition of attributes provides additive information for user agents. - - -
- - The value of the links property MUST be an array, where each item - in the array is a link description object which describes the link - relations of the instances. - - - - -
- - A link description object is used to describe link relations. In - the context of a schema, it defines the link relations of the - instances of the schema, and can be parameterized by the instance - values. The link description format can be used without JSON Schema, - and use of this format can - be declared by referencing the normative link description - schema as the the schema for the data structure that uses the - links. The URI of the normative link description schema is: - http://json-schema.org/links (latest version) or - http://json-schema.org/draft-04/links (draft-04 version). - - -
- - The value of the "href" link description property - indicates the target URI of the related resource. The value - of the instance property SHOULD be resolved as a URI-Reference per RFC 3986 - and MAY be a relative URI. The base URI to be used for relative resolution - SHOULD be the URI used to retrieve the instance object (not the schema) - when used within a schema. Also, when links are used within a schema, the URI - SHOULD be parametrized by the property values of the instance - object, if property values exist for the corresponding variables - in the template (otherwise they MAY be provided from alternate sources, like user input). - - - - Instance property values SHOULD be substituted into the URIs where - matching braces ('{', '}') are found surrounding zero or more characters, - creating an expanded URI. Instance property value substitutions are resolved - by using the text between the braces to denote the property name - from the instance to get the value to substitute. - -
- For example, if an href value is defined: - - - - Then it would be resolved by replace the value of the "id" property value from the instance object. -
- -
- If the value of the "id" property was "45", the expanded URI would be: - - - -
- - If matching braces are found with the string "@" (no quotes) between the braces, then the - actual instance value SHOULD be used to replace the braces, rather than a property value. - This should only be used in situations where the instance is a scalar (string, - boolean, or number), and not for objects or arrays. -
-
- -
- - The value of the "rel" property indicates the name of the - relation to the target resource. The relation to the target SHOULD be interpreted as specifically from the instance object that the schema (or sub-schema) applies to, not just the top level resource that contains the object within its hierarchy. If a resource JSON representation contains a sub object with a property interpreted as a link, that sub-object holds the relation with the target. A relation to target from the top level resource MUST be indicated with the schema describing the top level JSON representation. - - - - Relationship definitions SHOULD NOT be media type dependent, and users are encouraged to utilize existing accepted relation definitions, including those in existing relation registries (see RFC 4287). However, we define these relations here for clarity of normative interpretation within the context of JSON hyper schema defined relations: - - - - If the relation value is "self", when this property is encountered in - the instance object, the object represents a resource and the instance object is - treated as a full representation of the target resource identified by - the specified URI. - - - - This indicates that the target of the link is the full representation for the instance object. The object that contains this link possibly may not be the full representation. - - - - This indicates the target of the link is the schema for the instance object. This MAY be used to specifically denote the schemas of objects within a JSON object hierarchy, facilitating polymorphic type data structures. - - - - This relation indicates that the target of the link - SHOULD be treated as the root or the body of the representation for the - purposes of user agent interaction or fragment resolution. All other - properties of the instance objects can be regarded as meta-data - descriptions for the data. - - - - - - The following relations are applicable for schemas (the schema as the "from" resource in the relation): - - - This indicates the target resource that represents collection of instances of a schema. - This indicates a target to use for creating new instances of a schema. This link definition SHOULD be a submission link with a non-safe method (like POST). - - - - -
- For example, if a schema is defined: - - - -
- -
- And if a collection of instance resource's JSON representation was retrieved: - - - -
- - This would indicate that for the first item in the collection, its own - (self) URI would resolve to "/Resource/thing" and the first item's "up" - relation SHOULD be resolved to the resource at "/Resource/parent". - The "children" collection would be located at "/Resource/?upId=thing". -
-
- -
- This property value is a string that defines the templating language used in the "href" attribute. If no templating language is defined, then the default Link Description Object templating langauge is used. -
- -
- This property value is a schema that defines the expected structure of the JSON representation of the target of the link. -
- -
- - The following properties also apply to link definition objects, and - provide functionality analogous to HTML forms, in providing a - means for submitting extra (often user supplied) information to send to a server. - - -
- - This attribute defines which method can be used to access the target resource. - In an HTTP environment, this would be "GET" or "POST" (other HTTP methods - such as "PUT" and "DELETE" have semantics that are clearly implied by - accessed resources, and do not need to be defined here). - This defaults to "GET". - -
- -
- - If present, this property indicates a query media type format that the server - supports for querying or posting to the collection of instances at the target - resource. The query can be - suffixed to the target URI to query the collection with - property-based constraints on the resources that SHOULD be returned from - the server or used to post data to the resource (depending on the method). - -
- For example, with the following schema: - - - - This indicates that the client can query the server for instances that have a specific name. -
- -
- For example: - - - -
- - If no enctype or method is specified, only the single URI specified by - the href property is defined. If the method is POST, "application/json" is - the default media type. -
-
- -
- - This attribute contains a schema which defines the acceptable structure of the submitted - request (for a GET request, this schema would define the properties for the query string - and for a POST request, this would define the body). - -
-
-
-
- -
- - This property indicates the fragment resolution protocol to use for - resolving fragment identifiers in URIs within the instance - representations. This applies to the instance object URIs and all - children of the instance object's URIs. The default fragment resolution - protocol is "json-pointer", which is defined below. Other fragment - resolution protocols MAY be used, but are not defined in this document. - - - - The fragment identifier is based on RFC 3986, Sec 5, and defines the - mechanism for resolving references to entities within a document. - - -
- The "json-pointer" fragment resolution protocol uses a JSON Pointer to resolve fragment identifiers in URIs within instance representations. -
-
- - - -
- This attribute indicates that the instance value SHOULD NOT be changed. Attempts by a user agent to modify the value of this property are expected to be rejected by a server. -
- -
- If the instance property value is a string, this attribute defines that the string SHOULD be interpreted as binary data and decoded using the encoding named by this schema property. RFC 2045, Sec 6.1 lists the possible values for this property. -
- -
- - This attribute is a URI that defines what the instance's URI MUST start with in order to validate. - The value of the "pathStart" attribute MUST be resolved as per RFC 3986, Sec 5, - and is relative to the instance's URI. - - - - When multiple schemas have been referenced for an instance, the user agent - can determine if this schema is applicable for a particular instance by - determining if the URI of the instance begins with the the value of the "pathStart" - attribute. If the URI of the instance does not start with this URI, - or if another schema specifies a starting URI that is longer and also matches the - instance, this schema SHOULD NOT be applied to the instance. Any schema - that does not have a pathStart attribute SHOULD be considered applicable - to all the instances for which it is referenced. - -
- -
- This attribute defines the media type of the instance representations that this schema is defining. -
-
- -
- - This specification is a sub-type of the JSON format, and - consequently the security considerations are generally the same as RFC 4627. - However, an additional issue is that when link relation of "self" - is used to denote a full representation of an object, the user agent - SHOULD NOT consider the representation to be the authoritative representation - of the resource denoted by the target URI if the target URI is not - equivalent to or a sub-path of the the URI used to request the resource - representation which contains the target URI with the "self" link. - -
- For example, if a hyper schema was defined: - - - -
- -
- And a resource was requested from somesite.com: - - - -
- -
- With a response of: - - - -
-
-
- -
- The proposed MIME media type for JSON Schema is "application/schema+json". - Type name: application - Subtype name: schema+json - Required parameters: profile - - The value of the profile parameter SHOULD be a URI (relative or absolute) that - refers to the schema used to define the structure of this structure (the - meta-schema). Normally the value would be http://json-schema.org/draft-04/hyper-schema, - but it is allowable to use other schemas that extend the hyper schema's meta- - schema. - - Optional parameters: pretty - The value of the pretty parameter MAY be true or false to indicate if additional whitespace has been included to make the JSON representation easier to read. - -
- - This registry is maintained by IANA per RFC 4287 and this specification adds - four values: "full", "create", "instances", "root". New - assignments are subject to IESG Approval, as outlined in RFC 5226. - Requests should be made by email to IANA, which will then forward the - request to the IESG, requesting approval. - -
-
-
- - - - - &rfc2045; - &rfc2119; - &rfc3339; - &rfc3986; - &rfc4287; - - - JSON Pointer - - ForgeRock US, Inc. - - - SitePen (USA) - - - - - - - &rfc2616; - &rfc4627; - &rfc5226; - &iddiscovery; - &uritemplate; - &linkheader; - &html401; - &css21; - - -
- - - - - Changed "required" attribute to an array of strings. - Removed "format" attribute. - Added "minProperties" and "maxProperties" attributes. - Replaced "slash-delimited" fragment resolution with "json-pointer". - Added "template" LDO attribute. - Removed irrelevant "Open Issues" section. - Merged Conventions and Terminology sections. - Defined terms used in specification. - Removed "integer" type in favor of {"type":"number", "divisibleBy":1}. - Restricted "type" to only the core JSON types. - Improved wording of many sections. - - - - - - Added example and verbiage to "extends" attribute. - Defined slash-delimited to use a leading slash. - Made "root" a relation instead of an attribute. - Removed address values, and MIME media type from format to reduce confusion (mediaType already exists, so it can be used for MIME types). - Added more explanation of nullability. - Removed "alternate" attribute. - Upper cased many normative usages of must, may, and should. - Replaced the link submission "properties" attribute to "schema" attribute. - Replaced "optional" attribute with "required" attribute. - Replaced "maximumCanEqual" attribute with "exclusiveMaximum" attribute. - Replaced "minimumCanEqual" attribute with "exclusiveMinimum" attribute. - Replaced "requires" attribute with "dependencies" attribute. - Moved "contentEncoding" attribute to hyper schema. - Added "additionalItems" attribute. - Added "id" attribute. - Switched self-referencing variable substitution from "-this" to "@" to align with reserved characters in URI template. - Added "patternProperties" attribute. - Schema URIs are now namespace versioned. - Added "$ref" and "$schema" attributes. - - - - - - Replaced "maxDecimal" attribute with "divisibleBy" attribute. - Added slash-delimited fragment resolution protocol and made it the default. - Added language about using links outside of schemas by referencing its normative URI. - Added "uniqueItems" attribute. - Added "targetSchema" attribute to link description object. - - - - - - Fixed category and updates from template. - - - - - - Initial draft. - - - - -
-
-
diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/lib/links.js nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/lib/links.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/lib/links.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/lib/links.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,7 +1,6 @@ /** * JSON Schema link handler - * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - * Licensed under the MIT (MIT-LICENSE.txt) license. + * Licensed under AFL-2.1 OR BSD-3-Clause */ (function (root, factory) { if (typeof define === 'function' && define.amd) { diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/lib/validate.js nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/lib/validate.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/lib/validate.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/lib/validate.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,9 +1,7 @@ /** * JSONSchema Validator - Validates JavaScript objects using JSON Schemas * (http://www.json.com/json-schema-proposal/) - * - * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - * Licensed under the MIT (MIT-LICENSE.txt) license. + * Licensed under AFL-2.1 OR BSD-3-Clause To use the validator call the validate function with an instance object and an optional schema object. If a schema is provided, it will be used to validate. If the instance object refers to a schema (self-validating), that schema will be used to validate and the schema parameter is not necessary (if both exist, @@ -107,7 +105,7 @@ !(value instanceof Array && type == 'array') && !(value instanceof Date && type == 'date') && !(type == 'integer' && value%1===0)){ - return [{property:path,message:(typeof value) + " value found, but a " + type + " is required"}]; + return [{property:path,message:value + " - " + (typeof value) + " value found, but a " + type + " is required"}]; } if(type instanceof Array){ var unionErrors=[]; @@ -170,11 +168,11 @@ if(schema.minLength && typeof value == 'string' && value.length < schema.minLength){ addError("must be at least " + schema.minLength + " characters long"); } - if(typeof schema.minimum !== undefined && typeof value == typeof schema.minimum && + if(typeof schema.minimum !== 'undefined' && typeof value == typeof schema.minimum && schema.minimum > value){ addError("must have a minimum value of " + schema.minimum); } - if(typeof schema.maximum !== undefined && typeof value == typeof schema.maximum && + if(typeof schema.maximum !== 'undefined' && typeof value == typeof schema.maximum && schema.maximum < value){ addError("must have a maximum value of " + schema.maximum); } @@ -209,8 +207,8 @@ } for(var i in objTypeDef){ - if(objTypeDef.hasOwnProperty(i)){ - var value = instance[i]; + if(objTypeDef.hasOwnProperty(i) && i != '__proto__' && i != 'constructor'){ + var value = instance.hasOwnProperty(i) ? instance[i] : undefined; // skip _not_ specified properties if (value === undefined && options.existingOnly) continue; var propDef = objTypeDef[i]; @@ -231,7 +229,7 @@ delete instance[i]; continue; } else { - errors.push({property:path,message:(typeof value) + "The property " + i + + errors.push({property:path,message:"The property " + i + " is not defined in the schema and the schema does not allow additional properties"}); } } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/LICENSE 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,195 @@ +Dojo is available under *either* the terms of the BSD 3-Clause "New" License *or* the +Academic Free License version 2.1. As a recipient of Dojo, you may choose which +license to receive this code under (except as noted in per-module LICENSE +files). Some modules may not be the copyright of the Dojo Foundation. These +modules contain explicit declarations of copyright in both the LICENSE files in +the directories in which they reside and in the code itself. No external +contributions are allowed under licenses which are fundamentally incompatible +with the AFL-2.1 OR and BSD-3-Clause licenses that Dojo is distributed under. + +The text of the AFL-2.1 and BSD-3-Clause licenses is reproduced below. + +------------------------------------------------------------------------------- +BSD 3-Clause "New" License: +********************** + +Copyright (c) 2005-2015, The Dojo Foundation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Dojo Foundation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- +The Academic Free License, v. 2.1: +********************************** + +This Academic Free License (the "License") applies to any original work of +authorship (the "Original Work") whose owner (the "Licensor") has placed the +following notice immediately following the copyright notice for the Original +Work: + +Licensed under the Academic Free License version 2.1 + +1) Grant of Copyright License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license to do the +following: + +a) to reproduce the Original Work in copies; + +b) to prepare derivative works ("Derivative Works") based upon the Original +Work; + +c) to distribute copies of the Original Work and Derivative Works to the +public; + +d) to perform the Original Work publicly; and + +e) to display the Original Work publicly. + +2) Grant of Patent License. Licensor hereby grants You a world-wide, +royalty-free, non-exclusive, perpetual, sublicenseable license, under patent +claims owned or controlled by the Licensor that are embodied in the Original +Work as furnished by the Licensor, to make, use, sell and offer for sale the +Original Work and Derivative Works. + +3) Grant of Source Code License. The term "Source Code" means the preferred +form of the Original Work for making modifications to it and all available +documentation describing how to modify the Original Work. Licensor hereby +agrees to provide a machine-readable copy of the Source Code of the Original +Work along with each copy of the Original Work that Licensor distributes. +Licensor reserves the right to satisfy this obligation by placing a +machine-readable copy of the Source Code in an information repository +reasonably calculated to permit inexpensive and convenient access by You for as +long as Licensor continues to distribute the Original Work, and by publishing +the address of that information repository in a notice immediately following +the copyright notice that applies to the Original Work. + +4) Exclusions From License Grant. Neither the names of Licensor, nor the names +of any contributors to the Original Work, nor any of their trademarks or +service marks, may be used to endorse or promote products derived from this +Original Work without express prior written permission of the Licensor. Nothing +in this License shall be deemed to grant any rights to trademarks, copyrights, +patents, trade secrets or any other intellectual property of Licensor except as +expressly stated herein. No patent license is granted to make, use, sell or +offer to sell embodiments of any patent claims other than the licensed claims +defined in Section 2. No right is granted to the trademarks of Licensor even if +such marks are included in the Original Work. Nothing in this License shall be +interpreted to prohibit Licensor from licensing under different terms from this +License any Original Work that Licensor otherwise would have a right to +license. + +5) This section intentionally omitted. + +6) Attribution Rights. You must retain, in the Source Code of any Derivative +Works that You create, all copyright, patent or trademark notices from the +Source Code of the Original Work, as well as any notices of licensing and any +descriptive text identified therein as an "Attribution Notice." You must cause +the Source Code for any Derivative Works that You create to carry a prominent +Attribution Notice reasonably calculated to inform recipients that You have +modified the Original Work. + +7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that +the copyright in and to the Original Work and the patent rights granted herein +by Licensor are owned by the Licensor or are sublicensed to You under the terms +of this License with the permission of the contributor(s) of those copyrights +and patent rights. Except as expressly stated in the immediately proceeding +sentence, the Original Work is provided under this License on an "AS IS" BASIS +and WITHOUT WARRANTY, either express or implied, including, without limitation, +the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. +This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No +license to Original Work is granted hereunder except under this disclaimer. + +8) Limitation of Liability. Under no circumstances and under no legal theory, +whether in tort (including negligence), contract, or otherwise, shall the +Licensor be liable to any person for any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License +or the use of the Original Work including, without limitation, damages for loss +of goodwill, work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses. This limitation of liability shall not +apply to liability for death or personal injury resulting from Licensor's +negligence to the extent applicable law prohibits such limitation. Some +jurisdictions do not allow the exclusion or limitation of incidental or +consequential damages, so this exclusion and limitation may not apply to You. + +9) Acceptance and Termination. If You distribute copies of the Original Work or +a Derivative Work, You must make a reasonable effort under the circumstances to +obtain the express assent of recipients to the terms of this License. Nothing +else but this License (or another written agreement between Licensor and You) +grants You permission to create Derivative Works based upon the Original Work +or to exercise any of the rights granted in Section 1 herein, and any attempt +to do so except under the terms of this License (or another written agreement +between Licensor and You) is expressly prohibited by U.S. copyright law, the +equivalent laws of other countries, and by international treaty. Therefore, by +exercising any of the rights granted to You in Section 1 herein, You indicate +Your acceptance of this License and all of its terms and conditions. + +10) Termination for Patent Action. This License shall terminate automatically +and You may no longer exercise any of the rights granted to You by this License +as of the date You commence an action, including a cross-claim or counterclaim, +against Licensor or any licensee alleging that the Original Work infringes a +patent. This termination provision shall not apply for an action alleging +patent infringement by combinations of the Original Work with other software or +hardware. + +11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this +License may be brought only in the courts of a jurisdiction wherein the +Licensor resides or in which Licensor conducts its primary business, and under +the laws of that jurisdiction excluding its conflict-of-law provisions. The +application of the United Nations Convention on Contracts for the International +Sale of Goods is expressly excluded. Any use of the Original Work outside the +scope of this License or after its termination shall be subject to the +requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et +seq., the equivalent laws of other countries, and international treaty. This +section shall survive the termination of this License. + +12) Attorneys Fees. In any action to enforce the terms of this License or +seeking damages relating thereto, the prevailing party shall be entitled to +recover its costs and expenses, including, without limitation, reasonable +attorneys' fees and costs incurred in connection with such action, including +any appeal of such action. This section shall survive the termination of this +License. + +13) Miscellaneous. This License represents the complete agreement concerning +the subject matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent necessary to +make it enforceable. + +14) Definition of "You" in This License. "You" throughout this License, whether +in upper or lower case, means an individual or a legal entity exercising rights +under, and complying with all of the terms of, this License. For legal +entities, "You" includes any entity that controls, is controlled by, or is +under common control with you. For purposes of this definition, "control" means +(i) the power, direct or indirect, to cause the direction or management of such +entity, whether by contract or otherwise, or (ii) ownership of fifty percent +(50%) or more of the outstanding shares, or (iii) beneficial ownership of such +entity. + +15) Right to Use. You may use the Original Work in all ways not otherwise +restricted or conditioned by this License or by law, and Licensor promises not +to interfere with or be responsible for such uses by You. + +This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. +Permission is hereby granted to copy and distribute this license without +modification. This license may not be modified without the express written +permission of its copyright owner. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,27 +1,27 @@ { - "_from": "json-schema@0.2.3", - "_id": "json-schema@0.2.3", + "_from": "json-schema@0.4.0", + "_id": "json-schema@0.4.0", "_inBundle": false, - "_integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "_integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "_location": "/json-schema", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "json-schema@0.2.3", + "raw": "json-schema@0.4.0", "name": "json-schema", "escapedName": "json-schema", - "rawSpec": "0.2.3", + "rawSpec": "0.4.0", "saveSpec": null, - "fetchSpec": "0.2.3" + "fetchSpec": "0.4.0" }, "_requiredBy": [ "/jsprim" ], - "_resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "_shasum": "b480c892e59a2f05954ce727bd3f2a4e882f9e13", - "_spec": "json-schema@0.2.3", - "_where": "/Users/rebecca/code/npm/node_modules/jsprim", + "_resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "_shasum": "f7de4cf6efab838ebaeb3236474cbba5a1930ab5", + "_spec": "json-schema@0.4.0", + "_where": "/Users/ruyadorno/Documents/workspace/cli/legacy/node_modules/jsprim", "author": { "name": "Kris Zyp" }, @@ -37,21 +37,15 @@ "directories": { "lib": "./lib" }, + "files": [ + "lib" + ], "homepage": "https://github.com/kriszyp/json-schema#readme", "keywords": [ "json", "schema" ], - "licenses": [ - { - "type": "AFLv2.1", - "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43" - }, - { - "type": "BSD", - "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13" - } - ], + "license": "(AFL-2.1 OR BSD-3-Clause)", "main": "./lib/validate.js", "maintainers": [ { @@ -65,7 +59,7 @@ "url": "git+ssh://git@github.com/kriszyp/json-schema.git" }, "scripts": { - "test": "echo TESTS DISABLED vows --spec test/*.js" + "test": "vows --spec test/*.js" }, - "version": "0.2.3" + "version": "0.4.0" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,3 @@ -JSON Schema is a repository for the JSON Schema specification, reference schemas and a CommonJS implementation of JSON Schema (not the only JavaScript implementation of JSON Schema, JSV is another excellent JavaScript validator). +This is a historical repository for the early development of the JSON Schema specification and implementation. This package is considered "finished": it holds the earlier draft specification and a simple, efficient, lightweight implementation of the original core elements of JSON Schema. This repository does not house the latest specifications nor does it implement the latest versions of JSON Schema. This package seeks to maintain the stability (in behavior and size) of this original implementation for the sake of the numerous packages that rely on it. For the latest JSON Schema specifications and implementations, please visit the [JSON Schema site](https://json-schema.org/) (or the [respository](https://github.com/json-schema-org/json-schema-spec)). -Code is licensed under the AFL or BSD license as part of the Persevere -project which is administered under the Dojo foundation, -and all contributions require a Dojo CLA. \ No newline at end of file +Code is licensed under the AFL or BSD 3-Clause license. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/test/tests.js nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/test/tests.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema/test/tests.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema/test/tests.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -var assert = require('assert'); -var vows = require('vows'); -var path = require('path'); -var fs = require('fs'); - -var validate = require('../lib/validate').validate; - - -var revision = 'draft-03'; -var schemaRoot = path.join(__dirname, '..', revision); -var schemaNames = ['schema', 'hyper-schema', 'links', 'json-ref' ]; -var schemas = {}; - -schemaNames.forEach(function(name) { - var file = path.join(schemaRoot, name); - schemas[name] = loadSchema(file); -}); - -schemaNames.forEach(function(name) { - var s, n = name+'-nsd', f = path.join(schemaRoot, name); - schemas[n] = loadSchema(f); - s = schemas[n]; - delete s['$schema']; -}); - -function loadSchema(path) { - var data = fs.readFileSync(path, 'utf-8'); - var schema = JSON.parse(data); - return schema; -} - -function resultIsValid() { - return function(result) { - assert.isObject(result); - //assert.isBoolean(result.valid); - assert.equal(typeof(result.valid), 'boolean'); - assert.isArray(result.errors); - for (var i = 0; i < result.errors.length; i++) { - assert.notEqual(result.errors[i], null, 'errors['+i+'] is null'); - } - } -} - -function assertValidates(doc, schema) { - var context = {}; - - context[': validate('+doc+', '+schema+')'] = { - topic: validate(schemas[doc], schemas[schema]), - 'returns valid result': resultIsValid(), - 'with valid=true': function(result) { assert.equal(result.valid, true); }, - 'and no errors': function(result) { - // XXX work-around for bug in vows: [null] chokes it - if (result.errors[0] == null) assert.fail('(errors contains null)'); - assert.length(result.errors, 0); - } - }; - - return context; -} - -function assertSelfValidates(doc) { - var context = {}; - - context[': validate('+doc+')'] = { - topic: validate(schemas[doc]), - 'returns valid result': resultIsValid(), - 'with valid=true': function(result) { assert.equal(result.valid, true); }, - 'and no errors': function(result) { assert.length(result.errors, 0); } - }; - - return context; -} - -var suite = vows.describe('JSON Schema').addBatch({ - 'Core-NSD self-validates': assertSelfValidates('schema-nsd'), - 'Core-NSD/Core-NSD': assertValidates('schema-nsd', 'schema-nsd'), - 'Core-NSD/Core': assertValidates('schema-nsd', 'schema'), - - 'Core self-validates': assertSelfValidates('schema'), - 'Core/Core': assertValidates('schema', 'schema'), - - 'Hyper-NSD self-validates': assertSelfValidates('hyper-schema-nsd'), - 'Hyper self-validates': assertSelfValidates('hyper-schema'), - 'Hyper/Hyper': assertValidates('hyper-schema', 'hyper-schema'), - 'Hyper/Core': assertValidates('hyper-schema', 'schema'), - - 'Links-NSD self-validates': assertSelfValidates('links-nsd'), - 'Links self-validates': assertSelfValidates('links'), - 'Links/Hyper': assertValidates('links', 'hyper-schema'), - 'Links/Core': assertValidates('links', 'schema'), - - 'Json-Ref self-validates': assertSelfValidates('json-ref'), - 'Json-Ref/Hyper': assertValidates('json-ref', 'hyper-schema'), - 'Json-Ref/Core': assertValidates('json-ref', 'schema') -}).export(module); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema-traverse/.eslintrc.yml nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema-traverse/.eslintrc.yml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema-traverse/.eslintrc.yml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema-traverse/.eslintrc.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,27 +0,0 @@ -extends: eslint:recommended -env: - node: true - browser: true -rules: - block-scoped-var: 2 - complexity: [2, 13] - curly: [2, multi-or-nest, consistent] - dot-location: [2, property] - dot-notation: 2 - indent: [2, 2, SwitchCase: 1] - linebreak-style: [2, unix] - new-cap: 2 - no-console: [2, allow: [warn, error]] - no-else-return: 2 - no-eq-null: 2 - no-fallthrough: 2 - no-invalid-this: 2 - no-return-assign: 2 - no-shadow: 1 - no-trailing-spaces: 2 - no-use-before-define: [2, nofunc] - quotes: [2, single, avoid-escape] - semi: [2, always] - strict: [2, global] - valid-jsdoc: [2, requireReturn: false] - no-control-regex: 0 diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema-traverse/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema-traverse/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/json-schema-traverse/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/json-schema-traverse/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -'use strict'; - -var traverse = module.exports = function (schema, opts, cb) { - if (typeof opts == 'function') { - cb = opts; - opts = {}; - } - _traverse(opts, cb, schema, '', schema); -}; - - -traverse.keywords = { - additionalItems: true, - items: true, - contains: true, - additionalProperties: true, - propertyNames: true, - not: true -}; - -traverse.arrayKeywords = { - items: true, - allOf: true, - anyOf: true, - oneOf: true -}; - -traverse.propsKeywords = { - definitions: true, - properties: true, - patternProperties: true, - dependencies: true -}; - -traverse.skipKeywords = { - enum: true, - const: true, - required: true, - maximum: true, - minimum: true, - exclusiveMaximum: true, - exclusiveMinimum: true, - multipleOf: true, - maxLength: true, - minLength: true, - pattern: true, - format: true, - maxItems: true, - minItems: true, - uniqueItems: true, - maxProperties: true, - minProperties: true -}; - - -function _traverse(opts, cb, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { - if (schema && typeof schema == 'object' && !Array.isArray(schema)) { - cb(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); - for (var key in schema) { - var sch = schema[key]; - if (Array.isArray(sch)) { - if (key in traverse.arrayKeywords) { - for (var i=0; i=0.6.0" - ], + "engines": { + "node": ">=0.6.0" + }, "homepage": "https://github.com/joyent/node-jsprim#readme", "license": "MIT", "main": "./lib/jsprim.js", @@ -45,5 +45,5 @@ "type": "git", "url": "git://github.com/joyent/node-jsprim.git" }, - "version": "1.4.1" + "version": "1.4.2" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -'use strict'; -const invertKv = require('invert-kv'); -const all = require('./lcid.json'); - -const inverted = invertKv(all); - -exports.from = lcidCode => { - if (typeof lcidCode !== 'number') { - throw new TypeError('Expected a number'); - } - - return inverted[lcidCode]; -}; - -exports.to = localeId => { - if (typeof localeId !== 'string') { - throw new TypeError('Expected a string'); - } - - return all[localeId]; -}; - -exports.all = all; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/lcid.json nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/lcid.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/lcid.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/lcid.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,203 +0,0 @@ -{ - "af_ZA": 1078, - "am_ET": 1118, - "ar_AE": 14337, - "ar_BH": 15361, - "ar_DZ": 5121, - "ar_EG": 3073, - "ar_IQ": 2049, - "ar_JO": 11265, - "ar_KW": 13313, - "ar_LB": 12289, - "ar_LY": 4097, - "ar_MA": 6145, - "ar_OM": 8193, - "ar_QA": 16385, - "ar_SA": 1025, - "ar_SY": 10241, - "ar_TN": 7169, - "ar_YE": 9217, - "arn_CL": 1146, - "as_IN": 1101, - "az_AZ": 2092, - "ba_RU": 1133, - "be_BY": 1059, - "bg_BG": 1026, - "bn_IN": 1093, - "bo_BT": 2129, - "bo_CN": 1105, - "br_FR": 1150, - "bs_BA": 8218, - "ca_ES": 1027, - "co_FR": 1155, - "cs_CZ": 1029, - "cy_GB": 1106, - "da_DK": 1030, - "de_AT": 3079, - "de_CH": 2055, - "de_DE": 1031, - "de_LI": 5127, - "de_LU": 4103, - "div_MV": 1125, - "dsb_DE": 2094, - "el_GR": 1032, - "en_AU": 3081, - "en_BZ": 10249, - "en_CA": 4105, - "en_CB": 9225, - "en_GB": 2057, - "en_IE": 6153, - "en_IN": 18441, - "en_JA": 8201, - "en_MY": 17417, - "en_NZ": 5129, - "en_PH": 13321, - "en_TT": 11273, - "en_US": 1033, - "en_ZA": 7177, - "en_ZW": 12297, - "es_AR": 11274, - "es_BO": 16394, - "es_CL": 13322, - "es_CO": 9226, - "es_CR": 5130, - "es_DO": 7178, - "es_EC": 12298, - "es_ES": 3082, - "es_GT": 4106, - "es_HN": 18442, - "es_MX": 2058, - "es_NI": 19466, - "es_PA": 6154, - "es_PE": 10250, - "es_PR": 20490, - "es_PY": 15370, - "es_SV": 17418, - "es_UR": 14346, - "es_US": 21514, - "es_VE": 8202, - "et_EE": 1061, - "eu_ES": 1069, - "fa_IR": 1065, - "fi_FI": 1035, - "fil_PH": 1124, - "fo_FO": 1080, - "fr_BE": 2060, - "fr_CA": 3084, - "fr_CH": 4108, - "fr_FR": 1036, - "fr_LU": 5132, - "fr_MC": 6156, - "fy_NL": 1122, - "ga_IE": 2108, - "gbz_AF": 1164, - "gl_ES": 1110, - "gsw_FR": 1156, - "gu_IN": 1095, - "ha_NG": 1128, - "he_IL": 1037, - "hi_IN": 1081, - "hr_BA": 4122, - "hr_HR": 1050, - "hu_HU": 1038, - "hy_AM": 1067, - "id_ID": 1057, - "ii_CN": 1144, - "is_IS": 1039, - "it_CH": 2064, - "it_IT": 1040, - "iu_CA": 2141, - "ja_JP": 1041, - "ka_GE": 1079, - "kh_KH": 1107, - "kk_KZ": 1087, - "kl_GL": 1135, - "kn_IN": 1099, - "ko_KR": 1042, - "kok_IN": 1111, - "ky_KG": 1088, - "lb_LU": 1134, - "lo_LA": 1108, - "lt_LT": 1063, - "lv_LV": 1062, - "mi_NZ": 1153, - "mk_MK": 1071, - "ml_IN": 1100, - "mn_CN": 2128, - "mn_MN": 1104, - "moh_CA": 1148, - "mr_IN": 1102, - "ms_BN": 2110, - "ms_MY": 1086, - "mt_MT": 1082, - "my_MM": 1109, - "nb_NO": 1044, - "ne_NP": 1121, - "nl_BE": 2067, - "nl_NL": 1043, - "nn_NO": 2068, - "ns_ZA": 1132, - "oc_FR": 1154, - "or_IN": 1096, - "pa_IN": 1094, - "pl_PL": 1045, - "ps_AF": 1123, - "pt_BR": 1046, - "pt_PT": 2070, - "qut_GT": 1158, - "quz_BO": 1131, - "quz_EC": 2155, - "quz_PE": 3179, - "rm_CH": 1047, - "ro_RO": 1048, - "ru_RU": 1049, - "rw_RW": 1159, - "sa_IN": 1103, - "sah_RU": 1157, - "se_FI": 3131, - "se_NO": 1083, - "se_SE": 2107, - "si_LK": 1115, - "sk_SK": 1051, - "sl_SI": 1060, - "sma_NO": 6203, - "sma_SE": 7227, - "smj_NO": 4155, - "smj_SE": 5179, - "smn_FI": 9275, - "sms_FI": 8251, - "sq_AL": 1052, - "sr_BA": 7194, - "sr_SP": 3098, - "sv_FI": 2077, - "sv_SE": 1053, - "sw_KE": 1089, - "syr_SY": 1114, - "ta_IN": 1097, - "te_IN": 1098, - "tg_TJ": 1064, - "th_TH": 1054, - "tk_TM": 1090, - "tmz_DZ": 2143, - "tn_ZA": 1074, - "tr_TR": 1055, - "tt_RU": 1092, - "ug_CN": 1152, - "uk_UA": 1058, - "ur_IN": 2080, - "ur_PK": 1056, - "uz_UZ": 2115, - "vi_VN": 1066, - "wen_DE": 1070, - "wo_SN": 1160, - "xh_ZA": 1076, - "yo_NG": 1130, - "zh_CHS": 4, - "zh_CHT": 31748, - "zh_CN": 2052, - "zh_HK": 3076, - "zh_MO": 5124, - "zh_SG": 4100, - "zh_TW": 1028, - "zu_ZA": 1077 -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/license nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -{ - "_from": "lcid@^2.0.0", - "_id": "lcid@2.0.0", - "_inBundle": false, - "_integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "_location": "/lcid", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "lcid@^2.0.0", - "name": "lcid", - "escapedName": "lcid", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/os-locale" - ], - "_resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "_shasum": "6ef5d2df60e52f82eb228a4c373e8d1f397253cf", - "_spec": "lcid@^2.0.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/os-locale", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/lcid/issues" - }, - "bundleDependencies": false, - "dependencies": { - "invert-kv": "^2.0.0" - }, - "deprecated": false, - "description": "Mapping between standard locale identifiers and Windows locale identifiers (LCID)", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "index.js", - "lcid.json" - ], - "homepage": "https://github.com/sindresorhus/lcid#readme", - "keywords": [ - "lcid", - "locale", - "string", - "str", - "id", - "identifier", - "windows", - "language", - "lang", - "map", - "mapping", - "convert", - "json", - "bcp47", - "ietf", - "tag" - ], - "license": "MIT", - "name": "lcid", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/lcid.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "2.0.0" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/lcid/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/lcid/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -# lcid [![Build Status](https://travis-ci.org/sindresorhus/lcid.svg?branch=master)](https://travis-ci.org/sindresorhus/lcid) - -> Mapping between [standard locale identifiers](https://en.wikipedia.org/wiki/Locale_(computer_software)) and [Windows locale identifiers (LCID)](http://en.wikipedia.org/wiki/Locale#Specifics_for_Microsoft_platforms) - -Based on the [mapping](https://github.com/python/cpython/blob/8f7bb100d0fa7fb2714f3953b5b627878277c7c6/Lib/locale.py#L1465-L1674) used in the Python standard library. - -The mapping itself is just a [JSON file](lcid.json) and can be used wherever. - - -## Install - -``` -$ npm install lcid -``` - - -## Usage - -```js -const lcid = require('lcid'); - -lcid.from(1044); -//=> 'nb_NO' - -lcid.to('nb_NO'); -//=> 1044 - -lcid.all; -//=> {'af_ZA': 1078, ...} -``` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/libcipm/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/libcipm/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/libcipm/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/libcipm/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [4.0.8](https://github.com/npm/libcipm/compare/v4.0.7...v4.0.8) (2020-03-25) + + +### Bug Fixes + +* add repo to bin pkg, bump to 2.0.1 ([ed2d735](https://github.com/npm/libcipm/commit/ed2d735)) + + + ## [4.0.7](https://github.com/npm/libcipm/compare/v4.0.4...v4.0.7) (2019-10-09) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/libcipm/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/libcipm/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/libcipm/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/libcipm/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,28 +1,28 @@ { - "_from": "libcipm@4.0.7", - "_id": "libcipm@4.0.7", + "_from": "libcipm@4.0.8", + "_id": "libcipm@4.0.8", "_inBundle": false, - "_integrity": "sha512-fTq33otU3PNXxxCTCYCYe7V96o59v/o7bvtspmbORXpgFk+wcWrGf5x6tBgui5gCed/45/wtPomBsZBYm5KbIw==", + "_integrity": "sha512-IN3hh2yDJQtZZ5paSV4fbvJg4aHxCCg5tcZID/dSVlTuUiWktsgaldVljJv6Z5OUlYspx6xQkbR0efNodnIrOA==", "_location": "/libcipm", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "libcipm@4.0.7", + "raw": "libcipm@4.0.8", "name": "libcipm", "escapedName": "libcipm", - "rawSpec": "4.0.7", + "rawSpec": "4.0.8", "saveSpec": null, - "fetchSpec": "4.0.7" + "fetchSpec": "4.0.8" }, "_requiredBy": [ "#USER", "/" ], - "_resolved": "https://registry.npmjs.org/libcipm/-/libcipm-4.0.7.tgz", - "_shasum": "76cd675c98bdaae64db88b782b01b804b6d02c8a", - "_spec": "libcipm@4.0.7", - "_where": "/Users/mperrotte/npminc/cli", + "_resolved": "https://registry.npmjs.org/libcipm/-/libcipm-4.0.8.tgz", + "_shasum": "dcea4919e10dfbce420327e63901613b9141bc89", + "_spec": "libcipm@4.0.8", + "_where": "/Users/claudiahdz/npm/cli", "author": { "name": "Kat Marchán", "email": "kzm@sykosomatic.org" @@ -46,7 +46,7 @@ "find-npm-prefix": "^1.0.2", "graceful-fs": "^4.1.11", "ini": "^1.3.5", - "lock-verify": "^2.0.2", + "lock-verify": "^2.1.0", "mkdirp": "^0.5.1", "npm-lifecycle": "^3.0.0", "npm-logical-tree": "^1.2.1", @@ -65,9 +65,7 @@ "standard": "^11.0.1", "standard-version": "^4.4.0", "tacks": "^1.2.6", - "tap": "^12.0.1", - "weallbehave": "^1.2.0", - "weallcontribute": "^1.0.8" + "tap": "^12.0.1" }, "files": [ "*.js", @@ -92,9 +90,7 @@ "prerelease": "npm t", "pretest": "standard", "release": "standard-version -s", - "test": "tap -J --nyc-arg=--all --coverage test/specs", - "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", - "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" + "test": "tap -J --nyc-arg=--all --coverage test/specs" }, - "version": "4.0.7" + "version": "4.0.8" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/libcipm/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/libcipm/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/libcipm/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/libcipm/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,4 +1,9 @@ -[![npm](https://img.shields.io/npm/v/libcipm.svg)](https://npm.im/libcipm) [![license](https://img.shields.io/npm/l/libcipm.svg)](https://npm.im/libcipm) [![Travis](https://img.shields.io/travis/npm/libcipm.svg)](https://travis-ci.org/npm/libcipm) [![AppVeyor](https://ci.appveyor.com/api/projects/status/github/npm/libcipm?svg=true)](https://ci.appveyor.com/project/npm/libcipm) [![Coverage Status](https://coveralls.io/repos/github/npm/libcipm/badge.svg?branch=latest)](https://coveralls.io/github/npm/libcipm?branch=latest) +# Note: pending imminent deprecation + +**This module will be deprecated once npm v7 is released. Please do not rely +on it more than absolutely necessary.** + +---- [`libcipm`](https://github.com/npm/libcipm) installs npm projects in a way that's optimized for continuous integration/deployment/etc scenarios. It gives up @@ -16,7 +21,6 @@ ## Table of Contents * [Features](#features) -* [Contributing](#contributing) * [API](#api) ### Features @@ -26,12 +30,3 @@ * blazing fast * npm-compatible caching * errors if `package.json` and `package-lock.json` are out of sync, instead of fixing it like npm does. Essentially provides a `--frozen` install. - -### Contributing - -The libcipm team enthusiastically welcomes contributions and project -participation! There's a bunch of things you can do if you want to contribute! -The [Contributor Guide](CONTRIBUTING.md) has all the information you need for -everything from reporting bugs to contributing entire new features. Please don't -hesitate to jump in if you'd like to, or even ask us questions if something -isn't clear. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/libnpx/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/libnpx/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/libnpx/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/libnpx/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [10.2.4](https://github.com/npm/npx/compare/v10.2.3...v10.2.4) (2020-07-20) + + + + +## [10.2.3](https://github.com/npm/npx/compare/v10.2.2...v10.2.3) (2020-03-24) + + + ## [10.2.2](https://github.com/npm/npx/compare/v10.2.1...v10.2.2) (2020-01-28) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/libnpx/libnpx.1 nodejs-mozilla-12.22.12/deps/npm/node_modules/libnpx/libnpx.1 --- nodejs-mozilla-12.18.1/deps/npm/node_modules/libnpx/libnpx.1 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/libnpx/libnpx.1 2022-04-05 07:17:00.000000000 +0000 @@ -1,4 +1,4 @@ -.TH "NPX" "1" "January 2020" "libnpx@10.2.1" "User Commands" +.TH "NPX" "1" "July 2020" "libnpx@10.2.3" "User Commands" .SH "NAME" \fBnpx\fR \- execute npm package binaries .SH SYNOPSIS diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/libnpx/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/libnpx/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/libnpx/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/libnpx/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,28 +1,28 @@ { - "_from": "libnpx@10.2.2", - "_id": "libnpx@10.2.2", + "_from": "libnpx@10.2.4", + "_id": "libnpx@10.2.4", "_inBundle": false, - "_integrity": "sha512-ujaYToga1SAX5r7FU5ShMFi88CWpY75meNZtr6RtEyv4l2ZK3+Wgvxq2IqlwWBiDZOqhumdeiocPS1aKrCMe3A==", + "_integrity": "sha512-BPc0D1cOjBeS8VIBKUu5F80s6njm0wbVt7CsGMrIcJ+SI7pi7V0uVPGpEMH9H5L8csOcclTxAXFE2VAsJXUhfA==", "_location": "/libnpx", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "libnpx@10.2.2", + "raw": "libnpx@10.2.4", "name": "libnpx", "escapedName": "libnpx", - "rawSpec": "10.2.2", + "rawSpec": "10.2.4", "saveSpec": null, - "fetchSpec": "10.2.2" + "fetchSpec": "10.2.4" }, "_requiredBy": [ "#USER", "/" ], - "_resolved": "https://registry.npmjs.org/libnpx/-/libnpx-10.2.2.tgz", - "_shasum": "5a4171b9b92dd031463ef66a4af9f5cbd6b09572", - "_spec": "libnpx@10.2.2", - "_where": "/Users/mperrotte/npminc/cli", + "_resolved": "https://registry.npmjs.org/libnpx/-/libnpx-10.2.4.tgz", + "_shasum": "ef0e3258e29aef2ec7ee3276115e20e67f67d4ee", + "_spec": "libnpx@10.2.4", + "_where": "/Users/claudiahdz/npm/cli", "author": { "name": "Kat Marchán", "email": "kzm@sykosomatic.org" @@ -47,7 +47,7 @@ "update-notifier": "^2.3.0", "which": "^1.3.0", "y18n": "^4.0.0", - "yargs": "^11.0.0" + "yargs": "^14.2.3" }, "deprecated": false, "description": "support library for npx -- an tool for executing npm-based packages.", @@ -62,9 +62,7 @@ "standard": "^11.0.0", "standard-version": "^4.3.0", "tacks": "^1.2.6", - "tap": "^11.1.2", - "weallbehave": "^1.2.0", - "weallcontribute": "^1.0.8" + "tap": "^11.1.2" }, "engines": { "node": ">=4" @@ -101,9 +99,7 @@ "pretest": "standard *.js test bin/*.js locales", "publish-bin": "npm run bin && cd bin && npm publish", "release": "standard-version -s", - "test": "cross-env NPX_UPDATE_LOCALE_FILES=true LC_ALL=en nyc --all -- tap -J test/*.js", - "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", - "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" + "test": "cross-env NPX_UPDATE_LOCALE_FILES=true LC_ALL=en nyc --all -- tap -J test/*.js" }, - "version": "10.2.2" + "version": "10.2.4" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/locate-path/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/locate-path/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/locate-path/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/locate-path/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -'use strict'; -const path = require('path'); -const pathExists = require('path-exists'); -const pLocate = require('p-locate'); - -module.exports = (iterable, opts) => { - opts = Object.assign({ - cwd: process.cwd() - }, opts); - - return pLocate(iterable, el => pathExists(path.resolve(opts.cwd, el)), opts); -}; - -module.exports.sync = (iterable, opts) => { - opts = Object.assign({ - cwd: process.cwd() - }, opts); - - for (const el of iterable) { - if (pathExists.sync(path.resolve(opts.cwd, el))) { - return el; - } - } -}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/locate-path/license nodejs-mozilla-12.22.12/deps/npm/node_modules/locate-path/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/locate-path/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/locate-path/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/locate-path/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/locate-path/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/locate-path/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/locate-path/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -{ - "_from": "locate-path@^2.0.0", - "_id": "locate-path@2.0.0", - "_inBundle": false, - "_integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "_location": "/locate-path", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "locate-path@^2.0.0", - "name": "locate-path", - "escapedName": "locate-path", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/find-up" - ], - "_resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "_shasum": "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e", - "_spec": "locate-path@^2.0.0", - "_where": "/Users/rebecca/code/npm/node_modules/find-up", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/locate-path/issues" - }, - "bundleDependencies": false, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "deprecated": false, - "description": "Get the first path that exists on disk of multiple paths", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/locate-path#readme", - "keywords": [ - "locate", - "path", - "paths", - "file", - "files", - "exists", - "find", - "finder", - "search", - "searcher", - "array", - "iterable", - "iterator" - ], - "license": "MIT", - "name": "locate-path", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/locate-path.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "2.0.0", - "xo": { - "esnext": true - } -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/locate-path/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/locate-path/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/locate-path/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/locate-path/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -# locate-path [![Build Status](https://travis-ci.org/sindresorhus/locate-path.svg?branch=master)](https://travis-ci.org/sindresorhus/locate-path) - -> Get the first path that exists on disk of multiple paths - - -## Install - -``` -$ npm install --save locate-path -``` - - -## Usage - -Here we find the first file that exists on disk, in array order. - -```js -const locatePath = require('locate-path'); - -const files = [ - 'unicorn.png', - 'rainbow.png', // only this one actually exists on disk - 'pony.png' -]; - -locatePath(files).then(foundPath => { - console.log(foundPath); - //=> 'rainbow' -}); -``` - - -## API - -### locatePath(input, [options]) - -Returns a `Promise` for the first path that exists or `undefined` if none exists. - -#### input - -Type: `Iterable` - -Paths to check. - -#### options - -Type: `Object` - -##### concurrency - -Type: `number`
-Default: `Infinity`
-Minimum: `1` - -Number of concurrently pending promises. - -##### preserveOrder - -Type: `boolean`
-Default: `true` - -Preserve `input` order when searching. - -Disable this to improve performance if you don't care about the order. - -##### cwd - -Type: `string`
-Default: `process.cwd()` - -Current working directory. - -### locatePath.sync(input, [options]) - -Returns the first path that exists or `undefined` if none exists. - -#### input - -Type: `Iterable` - -Paths to check. - -#### options - -Type: `Object` - -##### cwd - -Same as above. - - -## Related - -- [path-exists](https://github.com/sindresorhus/path-exists) - Check if a path exists - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/dist/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/dist/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/dist/index.d.ts 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/dist/index.d.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -interface Entry { - [key: string]: any; -} -interface MaxAgeEntry extends Entry { - maxAge: number; -} -/** - * Automatically cleanup the items in the provided `map`. The property of the expiration timestamp should be named `maxAge`. - * - * @param map - Map instance which should be cleaned up. - */ -export default function mapAgeCleaner(map: Map): any; -/** - * Automatically cleanup the items in the provided `map`. - * - * @param map - Map instance which should be cleaned up. - * @param property - Name of the property which olds the expiry timestamp. - */ -export default function mapAgeCleaner(map: Map, property: string): any; -export {}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/dist/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/dist/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/dist/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/dist/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const p_defer_1 = __importDefault(require("p-defer")); -function mapAgeCleaner(map, property = 'maxAge') { - let processingKey; - let processingTimer; - let processingDeferred; - const cleanup = () => __awaiter(this, void 0, void 0, function* () { - if (processingKey !== undefined) { - // If we are already processing an item, we can safely exit - return; - } - const setupTimer = (item) => __awaiter(this, void 0, void 0, function* () { - processingDeferred = p_defer_1.default(); - const delay = item[1][property] - Date.now(); - if (delay <= 0) { - // Remove the item immediately if the delay is equal to or below 0 - map.delete(item[0]); - processingDeferred.resolve(); - return; - } - // Keep track of the current processed key - processingKey = item[0]; - processingTimer = setTimeout(() => { - // Remove the item when the timeout fires - map.delete(item[0]); - if (processingDeferred) { - processingDeferred.resolve(); - } - }, delay); - // tslint:disable-next-line:strict-type-predicates - if (typeof processingTimer.unref === 'function') { - // Don't hold up the process from exiting - processingTimer.unref(); - } - return processingDeferred.promise; - }); - try { - for (const entry of map) { - yield setupTimer(entry); - } - } - catch (_a) { - // Do nothing if an error occurs, this means the timer was cleaned up and we should stop processing - } - processingKey = undefined; - }); - const reset = () => { - processingKey = undefined; - if (processingTimer !== undefined) { - clearTimeout(processingTimer); - processingTimer = undefined; - } - if (processingDeferred !== undefined) { // tslint:disable-line:early-exit - processingDeferred.reject(undefined); - processingDeferred = undefined; - } - }; - const originalSet = map.set.bind(map); - map.set = (key, value) => { - if (map.has(key)) { - // If the key already exist, remove it so we can add it back at the end of the map. - map.delete(key); - } - // Call the original `map.set` - const result = originalSet(key, value); - // If we are already processing a key and the key added is the current processed key, stop processing it - if (processingKey && processingKey === key) { - reset(); - } - // Always run the cleanup method in case it wasn't started yet - cleanup(); // tslint:disable-line:no-floating-promises - return result; - }; - cleanup(); // tslint:disable-line:no-floating-promises - return map; -} -exports.default = mapAgeCleaner; -// Add support for CJS -module.exports = mapAgeCleaner; -module.exports.default = mapAgeCleaner; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/license nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sam Verschueren (github.com/SamVerschueren) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "map-age-cleaner@0.1.3", - "/Users/mperrotte/npminc/cli" - ] - ], - "_development": true, - "_from": "map-age-cleaner@0.1.3", - "_id": "map-age-cleaner@0.1.3", - "_inBundle": false, - "_integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "_location": "/map-age-cleaner", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "map-age-cleaner@0.1.3", - "name": "map-age-cleaner", - "escapedName": "map-age-cleaner", - "rawSpec": "0.1.3", - "saveSpec": null, - "fetchSpec": "0.1.3" - }, - "_requiredBy": [ - "/nyc/mem" - ], - "_resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "_spec": "0.1.3", - "_where": "/Users/mperrotte/npminc/cli", - "author": { - "name": "Sam Verschueren", - "email": "sam.verschueren@gmail.com", - "url": "github.com/SamVerschueren" - }, - "bugs": { - "url": "https://github.com/SamVerschueren/map-age-cleaner/issues" - }, - "dependencies": { - "p-defer": "^1.0.0" - }, - "description": "Automatically cleanup expired items in a Map", - "devDependencies": { - "@types/delay": "^2.0.1", - "@types/node": "^10.7.1", - "ava": "^0.25.0", - "codecov": "^3.0.0", - "del-cli": "^1.1.0", - "delay": "^3.0.0", - "nyc": "^12.0.0", - "tslint": "^5.11.0", - "tslint-xo": "^0.9.0", - "typescript": "^3.0.1" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "dist/index.js", - "dist/index.d.ts" - ], - "homepage": "https://github.com/SamVerschueren/map-age-cleaner#readme", - "keywords": [ - "map", - "age", - "cleaner", - "maxage", - "expire", - "expiration", - "expiring" - ], - "license": "MIT", - "main": "dist/index.js", - "name": "map-age-cleaner", - "nyc": { - "exclude": [ - "dist/test.js" - ] - }, - "repository": { - "type": "git", - "url": "git+https://github.com/SamVerschueren/map-age-cleaner.git" - }, - "scripts": { - "build": "npm run clean && tsc", - "clean": "del-cli dist", - "lint": "tslint --format stylish --project .", - "prepublishOnly": "npm run build", - "pretest": "npm run build -- --sourceMap", - "test": "npm run lint && nyc ava dist/test.js" - }, - "sideEffects": false, - "typings": "dist/index.d.ts", - "version": "0.1.3" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/map-age-cleaner/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/map-age-cleaner/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -# map-age-cleaner - -[![Build Status](https://travis-ci.org/SamVerschueren/map-age-cleaner.svg?branch=master)](https://travis-ci.org/SamVerschueren/map-age-cleaner) [![codecov](https://codecov.io/gh/SamVerschueren/map-age-cleaner/badge.svg?branch=master)](https://codecov.io/gh/SamVerschueren/map-age-cleaner?branch=master) - -> Automatically cleanup expired items in a Map - - -## Install - -``` -$ npm install map-age-cleaner -``` - - -## Usage - -```js -import mapAgeCleaner from 'map-age-cleaner'; - -const map = new Map([ - ['unicorn', {data: '🦄', maxAge: Date.now() + 1000}] -]); - -mapAgeCleaner(map); - -map.has('unicorn'); -//=> true - -// Wait for 1 second... - -map.has('unicorn'); -//=> false -``` - -> **Note**: Items have to be ordered ascending based on the expiry property. This means that the item which will be expired first, should be in the first position of the `Map`. - - -## API - -### mapAgeCleaner(map, [property]) - -Returns the `Map` instance. - -#### map - -Type: `Map` - -Map instance which should be cleaned up. - -#### property - -Type: `string`
-Default: `maxAge` - -Name of the property which olds the expiry timestamp. - - -## Related - -- [expiry-map](https://github.com/SamVerschueren/expiry-map) - A `Map` implementation with expirable items -- [expiry-set](https://github.com/SamVerschueren/expiry-set) - A `Set` implementation with expirable keys -- [mem](https://github.com/sindresorhus/mem) - Memoize functions - - -## License - -MIT © [Sam Verschueren](https://github.com/SamVerschueren) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,7 +1,15 @@ -# Change Log +# Changelog All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [1.0.2](https://github.com/watilde/meant/compare/v1.0.1...v1.0.2) (2020-07-19) + + +### Bug Fixes + +* **deps:** bump standard, standard-version and tap ([d31fb06](https://github.com/watilde/meant/commit/d31fb064495b031dd1152726da9bd2198daa36ff)) +* **deps:** patch update in lock file ([4e699ee](https://github.com/watilde/meant/commit/4e699ee8751a69923dddf18c940acce630f4bf29)) + ## [1.0.1](https://github.com/watilde/meant/compare/v1.0.0...v1.0.1) (2017-08-23) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/.github/workflows/ci.yml nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/.github/workflows/ci.yml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/.github/workflows/ci.yml 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/.github/workflows/ci.yml 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,20 @@ +name: Node.js CI + +on: [push, pull_request] + +jobs: + build: + strategy: + matrix: + node-version: [6.x, 8.x, 10.x, 12.x] + os: [ubuntu-latest, windows-latest, macOS-latest] + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm install + - run: npm test diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/.npmignore nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/.npmignore --- nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/.npmignore 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/.npmignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* - -# Runtime data -pids -*.pid -*.seed - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (http://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules -jspm_packages - -# Optional npm cache directory -.npm - -# Optional REPL history -.node_repl_history diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,43 +1,41 @@ { - "_args": [ - [ - "meant@1.0.1", - "/Users/rebecca/code/npm" - ] - ], - "_from": "meant@1.0.1", - "_id": "meant@1.0.1", + "_from": "meant@1.0.2", + "_id": "meant@1.0.2", "_inBundle": false, - "_integrity": "sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg==", + "_integrity": "sha512-KN+1uowN/NK+sT/Lzx7WSGIj2u+3xe5n2LbwObfjOhPZiA+cCfCm6idVl0RkEfjThkw5XJ96CyRcanq6GmKtUg==", "_location": "/meant", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "meant@1.0.1", + "raw": "meant@1.0.2", "name": "meant", "escapedName": "meant", - "rawSpec": "1.0.1", + "rawSpec": "1.0.2", "saveSpec": null, - "fetchSpec": "1.0.1" + "fetchSpec": "1.0.2" }, "_requiredBy": [ + "#USER", "/" ], - "_resolved": "https://registry.npmjs.org/meant/-/meant-1.0.1.tgz", - "_spec": "1.0.1", - "_where": "/Users/rebecca/code/npm", + "_resolved": "https://registry.npmjs.org/meant/-/meant-1.0.2.tgz", + "_shasum": "5d0c78310a3d8ae1408a16be0fe0bd42a969f560", + "_spec": "meant@1.0.2", + "_where": "/Users/ruyadorno/Documents/workspace/cli/latest", "author": { "name": "Daijiro Wachi" }, "bugs": { "url": "https://github.com/watilde/meant/issues" }, + "bundleDependencies": false, + "deprecated": false, "description": "Like the `Did you mean?` in git for npm", "devDependencies": { - "standard": "^8.0.0", - "standard-version": "^2.4.0", - "tap": "^7.1.1" + "standard": "^11.0.1", + "standard-version": "^8.0.1", + "tap": "^12.7.0" }, "homepage": "https://github.com/watilde/meant#readme", "keywords": [ @@ -54,5 +52,5 @@ "release": "standard-version", "test": "standard && tap test.js" }, - "version": "1.0.1" + "version": "1.0.2" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,4 +1,4 @@ -# meant [![Build Status](https://travis-ci.org/watilde/meant.png?branch=master)](https://travis-ci.org/watilde/meant) +# meant ![Build status](https://github.com/watilde/meant/workflows/Node.js%20CI/badge.svg) Like the `Did you mean?` in git for npm diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/.travis.yml nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/.travis.yml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/meant/.travis.yml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/meant/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -script: - - "npm test" - -language: node_js - -node_js: - - "5" - - "4" - - iojs - - "0.12" - -sudo: false - -cache: - directories: - - node_modules diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/index.d.ts 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/index.d.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -declare namespace mem { - interface CacheStorage { - has(key: KeyType): boolean; - get(key: KeyType): ValueType | undefined; - set(key: KeyType, value: ValueType): void; - delete(key: KeyType): void; - clear?: () => void; - } - - interface Options< - ArgumentsType extends unknown[], - CacheKeyType extends unknown, - ReturnType extends unknown - > { - /** - Milliseconds until the cache expires. - - @default Infinity - */ - readonly maxAge?: number; - - /** - Determines the cache key for storing the result based on the function arguments. By default, if there's only one argument and it's a [primitive](https://developer.mozilla.org/en-US/docs/Glossary/Primitive), it's used directly as a key, otherwise it's all the function arguments JSON stringified as an array. - - You could for example change it to only cache on the first argument `x => JSON.stringify(x)`. - */ - readonly cacheKey?: (...arguments: ArgumentsType) => CacheKeyType; - - /** - Use a different cache storage. You could for example use a `WeakMap` instead or [`quick-lru`](https://github.com/sindresorhus/quick-lru) for a LRU cache. - - @default new Map() - */ - readonly cache?: CacheStorage; - - /** - Cache rejected promises. - - @default false - */ - readonly cachePromiseRejection?: boolean; - } -} - -declare const mem: { - /** - [Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input. - - @param fn - Function to be memoized. - - @example - ``` - import mem = require('mem'); - - let i = 0; - const counter = () => ++i; - const memoized = mem(counter); - - memoized('foo'); - //=> 1 - - // Cached as it's the same arguments - memoized('foo'); - //=> 1 - - // Not cached anymore as the arguments changed - memoized('bar'); - //=> 2 - - memoized('bar'); - //=> 2 - ``` - */ - < - ArgumentsType extends unknown[], - ReturnType extends unknown, - CacheKeyType extends unknown - >( - fn: (...arguments: ArgumentsType) => ReturnType, - options?: mem.Options - ): (...arguments: ArgumentsType) => ReturnType; - - /** - Clear all cached data of a memoized function. - - @param fn - Memoized function. - */ - clear( - fn: (...arguments: ArgumentsType) => ReturnType - ): void; - - // TODO: Remove this for the next major release - default: typeof mem; -}; - -export = mem; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -'use strict'; -const mimicFn = require('mimic-fn'); -const isPromise = require('p-is-promise'); -const mapAgeCleaner = require('map-age-cleaner'); - -const cacheStore = new WeakMap(); - -const defaultCacheKey = (...arguments_) => { - if (arguments_.length === 0) { - return '__defaultKey'; - } - - if (arguments_.length === 1) { - const [firstArgument] = arguments_; - if ( - firstArgument === null || - firstArgument === undefined || - (typeof firstArgument !== 'function' && typeof firstArgument !== 'object') - ) { - return firstArgument; - } - } - - return JSON.stringify(arguments_); -}; - -const mem = (fn, options) => { - options = Object.assign({ - cacheKey: defaultCacheKey, - cache: new Map(), - cachePromiseRejection: false - }, options); - - if (typeof options.maxAge === 'number') { - mapAgeCleaner(options.cache); - } - - const {cache} = options; - options.maxAge = options.maxAge || 0; - - const setData = (key, data) => { - cache.set(key, { - data, - maxAge: Date.now() + options.maxAge - }); - }; - - const memoized = function (...arguments_) { - const key = options.cacheKey(...arguments_); - - if (cache.has(key)) { - return cache.get(key).data; - } - - const cacheItem = fn.call(this, ...arguments_); - - setData(key, cacheItem); - - if (isPromise(cacheItem) && options.cachePromiseRejection === false) { - // Remove rejected promises from cache unless `cachePromiseRejection` is set to `true` - cacheItem.catch(() => cache.delete(key)); - } - - return cacheItem; - }; - - try { - // The below call will throw in some host environments - // See https://github.com/sindresorhus/mimic-fn/issues/10 - mimicFn(memoized, fn); - } catch (_) {} - - cacheStore.set(memoized, options.cache); - - return memoized; -}; - -module.exports = mem; -// TODO: Remove this for the next major release -module.exports.default = mem; - -module.exports.clear = fn => { - const cache = cacheStore.get(fn); - - if (cache && typeof cache.clear === 'function') { - cache.clear(); - } -}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/license nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/index.d.ts 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/index.d.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -declare const mimicFn: { - /** - Make a function mimic another one. It will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set. - - @param to - Mimicking function. - @param from - Function to mimic. - @returns The modified `to` function. - - @example - ``` - import mimicFn = require('mimic-fn'); - - function foo() {} - foo.unicorn = '🦄'; - - function wrapper() { - return foo(); - } - - console.log(wrapper.name); - //=> 'wrapper' - - mimicFn(wrapper, foo); - - console.log(wrapper.name); - //=> 'foo' - - console.log(wrapper.unicorn); - //=> '🦄' - ``` - */ - < - ArgumentsType extends unknown[], - ReturnType, - FunctionType extends (...arguments: ArgumentsType) => ReturnType - >( - to: (...arguments: ArgumentsType) => ReturnType, - from: FunctionType - ): FunctionType; - - // TODO: Remove this for the next major release, refactor the whole definition to: - // declare function mimicFn< - // ArgumentsType extends unknown[], - // ReturnType, - // FunctionType extends (...arguments: ArgumentsType) => ReturnType - // >( - // to: (...arguments: ArgumentsType) => ReturnType, - // from: FunctionType - // ): FunctionType; - // export = mimicFn; - default: typeof mimicFn; -}; - -export = mimicFn; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -'use strict'; - -const mimicFn = (to, from) => { - for (const prop of Reflect.ownKeys(from)) { - Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(from, prop)); - } - - return to; -}; - -module.exports = mimicFn; -// TODO: Remove this for the next major release -module.exports.default = mimicFn; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/license nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,74 +0,0 @@ -{ - "_from": "mimic-fn@^2.0.0", - "_id": "mimic-fn@2.1.0", - "_inBundle": false, - "_integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "_location": "/mem/mimic-fn", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mimic-fn@^2.0.0", - "name": "mimic-fn", - "escapedName": "mimic-fn", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/mem" - ], - "_resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "_shasum": "7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b", - "_spec": "mimic-fn@^2.0.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/mem", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/mimic-fn/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Make a function mimic another one", - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.1", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "homepage": "https://github.com/sindresorhus/mimic-fn#readme", - "keywords": [ - "function", - "mimic", - "imitate", - "rename", - "copy", - "inherit", - "properties", - "name", - "func", - "fn", - "set", - "infer", - "change" - ], - "license": "MIT", - "name": "mimic-fn", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/mimic-fn.git" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "version": "2.1.0" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/node_modules/mimic-fn/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/node_modules/mimic-fn/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -# mimic-fn [![Build Status](https://travis-ci.org/sindresorhus/mimic-fn.svg?branch=master)](https://travis-ci.org/sindresorhus/mimic-fn) - -> Make a function mimic another one - -Useful when you wrap a function in another function and like to preserve the original name and other properties. - - -## Install - -``` -$ npm install mimic-fn -``` - - -## Usage - -```js -const mimicFn = require('mimic-fn'); - -function foo() {} -foo.unicorn = '🦄'; - -function wrapper() { - return foo(); -} - -console.log(wrapper.name); -//=> 'wrapper' - -mimicFn(wrapper, foo); - -console.log(wrapper.name); -//=> 'foo' - -console.log(wrapper.unicorn); -//=> '🦄' -``` - - -## API - -It will copy over the properties `name`, `length`, `displayName`, and any custom properties you may have set. - -### mimicFn(to, from) - -Modifies the `to` function and returns it. - -#### to - -Type: `Function` - -Mimicking function. - -#### from - -Type: `Function` - -Function to mimic. - - -## Related - -- [rename-fn](https://github.com/sindresorhus/rename-fn) - Rename a function -- [keep-func-props](https://github.com/ehmicky/keep-func-props) - Wrap a function without changing its name, length and other properties - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -{ - "_from": "mem@^4.0.0", - "_id": "mem@4.3.0", - "_inBundle": false, - "_integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "_location": "/mem", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "mem@^4.0.0", - "name": "mem", - "escapedName": "mem", - "rawSpec": "^4.0.0", - "saveSpec": null, - "fetchSpec": "^4.0.0" - }, - "_requiredBy": [ - "/os-locale" - ], - "_resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "_shasum": "461af497bc4ae09608cdb2e60eefb69bff744178", - "_spec": "mem@^4.0.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/os-locale", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/mem/issues" - }, - "bundleDependencies": false, - "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, - "deprecated": false, - "description": "Memoize functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input", - "devDependencies": { - "ava": "^1.4.1", - "delay": "^4.1.0", - "tsd": "^0.7.1", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "homepage": "https://github.com/sindresorhus/mem#readme", - "keywords": [ - "memoize", - "function", - "mem", - "memoization", - "cache", - "caching", - "optimize", - "performance", - "ttl", - "expire", - "promise" - ], - "license": "MIT", - "name": "mem", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/mem.git" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "version": "4.3.0" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mem/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mem/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,167 +0,0 @@ -# mem [![Build Status](https://travis-ci.org/sindresorhus/mem.svg?branch=master)](https://travis-ci.org/sindresorhus/mem) - -> [Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input - -Memory is automatically released when an item expires. - - -## Install - -``` -$ npm install mem -``` - - -## Usage - -```js -const mem = require('mem'); - -let i = 0; -const counter = () => ++i; -const memoized = mem(counter); - -memoized('foo'); -//=> 1 - -// Cached as it's the same arguments -memoized('foo'); -//=> 1 - -// Not cached anymore as the arguments changed -memoized('bar'); -//=> 2 - -memoized('bar'); -//=> 2 -``` - -##### Works fine with promise returning functions - -```js -const mem = require('mem'); - -let i = 0; -const counter = async () => ++i; -const memoized = mem(counter); - -(async () => { - console.log(await memoized()); - //=> 1 - - // The return value didn't increase as it's cached - console.log(await memoized()); - //=> 1 -})(); -``` - -```js -const mem = require('mem'); -const got = require('got'); -const delay = require('delay'); - -const memGot = mem(got, {maxAge: 1000}); - -(async () => { - await memGot('sindresorhus.com'); - - // This call is cached - await memGot('sindresorhus.com'); - - await delay(2000); - - // This call is not cached as the cache has expired - await memGot('sindresorhus.com'); -})(); -``` - - -## API - -### mem(fn, [options]) - -#### fn - -Type: `Function` - -Function to be memoized. - -#### options - -Type: `Object` - -##### maxAge - -Type: `number`
-Default: `Infinity` - -Milliseconds until the cache expires. - -##### cacheKey - -Type: `Function` - -Determines the cache key for storing the result based on the function arguments. By default, if there's only one argument and it's a [primitive](https://developer.mozilla.org/en-US/docs/Glossary/Primitive), it's used directly as a key, otherwise it's all the function arguments JSON stringified as an array. - -You could for example change it to only cache on the first argument `x => JSON.stringify(x)`. - -##### cache - -Type: `Object`
-Default: `new Map()` - -Use a different cache storage. Must implement the following methods: `.has(key)`, `.get(key)`, `.set(key, value)`, `.delete(key)`, and optionally `.clear()`. You could for example use a `WeakMap` instead or [`quick-lru`](https://github.com/sindresorhus/quick-lru) for a LRU cache. - -##### cachePromiseRejection - -Type: `boolean`
-Default: `false` - -Cache rejected promises. - -### mem.clear(fn) - -Clear all cached data of a memoized function. - -#### fn - -Type: `Function` - -Memoized function. - - -## Tips - -### Cache statistics - -If you want to know how many times your cache had a hit or a miss, you can make use of [stats-map](https://github.com/SamVerschueren/stats-map) as a replacement for the default cache. - -#### Example - -```js -const mem = require('mem'); -const StatsMap = require('stats-map'); -const got = require('got'); - -const cache = new StatsMap(); -const memGot = mem(got, {cache}); - -(async () => { - await memGot('sindresorhus.com'); - await memGot('sindresorhus.com'); - await memGot('sindresorhus.com'); - - console.log(cache.stats); - //=> {hits: 2, misses: 1} -})(); -``` - - -## Related - -- [p-memoize](https://github.com/sindresorhus/p-memoize) - Memoize promise-returning & async functions - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/example/parse.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/example/parse.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/example/parse.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/example/parse.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,2 @@ +var argv = require('../')(process.argv.slice(2)); +console.log(argv); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,245 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {}, unknownFn: null }; + + if (typeof opts['unknown'] === 'function') { + flags.unknownFn = opts['unknown']; + } + + if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { + flags.allBools = true; + } else { + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + } + + var aliases = {}; + Object.keys(opts.alias || {}).forEach(function (key) { + aliases[key] = [].concat(opts.alias[key]); + aliases[key].forEach(function (x) { + aliases[x] = [key].concat(aliases[key].filter(function (y) { + return x !== y; + })); + }); + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[key] = true; + if (aliases[key]) { + flags.strings[aliases[key]] = true; + } + }); + + var defaults = opts['default'] || {}; + + var argv = { _ : [] }; + Object.keys(flags.bools).forEach(function (key) { + setArg(key, defaults[key] === undefined ? false : defaults[key]); + }); + + var notFlags = []; + + if (args.indexOf('--') !== -1) { + notFlags = args.slice(args.indexOf('--')+1); + args = args.slice(0, args.indexOf('--')); + } + + function argDefined(key, arg) { + return (flags.allBools && /^--[^=]+$/.test(arg)) || + flags.strings[key] || flags.bools[key] || aliases[key]; + } + + function setArg (key, val, arg) { + if (arg && flags.unknownFn && !argDefined(key, arg)) { + if (flags.unknownFn(arg) === false) return; + } + + var value = !flags.strings[key] && isNumber(val) + ? Number(val) : val + ; + setKey(argv, key.split('.'), value); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), value); + }); + } + + function setKey (obj, keys, value) { + var o = obj; + for (var i = 0; i < keys.length-1; i++) { + var key = keys[i]; + if (key === '__proto__') return; + if (o[key] === undefined) o[key] = {}; + if (o[key] === Object.prototype || o[key] === Number.prototype + || o[key] === String.prototype) o[key] = {}; + if (o[key] === Array.prototype) o[key] = []; + o = o[key]; + } + + var key = keys[keys.length - 1]; + if (key === '__proto__') return; + if (o === Object.prototype || o === Number.prototype + || o === String.prototype) o = {}; + if (o === Array.prototype) o = []; + if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { + o[key] = value; + } + else if (Array.isArray(o[key])) { + o[key].push(value); + } + else { + o[key] = [ o[key], value ]; + } + } + + function aliasIsBoolean(key) { + return aliases[key].some(function (x) { + return flags.bools[x]; + }); + } + + for (var i = 0; i < args.length; i++) { + var arg = args[i]; + + if (/^--.+=/.test(arg)) { + // Using [\s\S] instead of . because js doesn't support the + // 'dotall' regex modifier. See: + // http://stackoverflow.com/a/1068308/13216 + var m = arg.match(/^--([^=]+)=([\s\S]*)$/); + var key = m[1]; + var value = m[2]; + if (flags.bools[key]) { + value = value !== 'false'; + } + setArg(key, value, arg); + } + else if (/^--no-.+/.test(arg)) { + var key = arg.match(/^--no-(.+)/)[1]; + setArg(key, false, arg); + } + else if (/^--.+/.test(arg)) { + var key = arg.match(/^--(.+)/)[1]; + var next = args[i + 1]; + if (next !== undefined && !/^-/.test(next) + && !flags.bools[key] + && !flags.allBools + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, next, arg); + i++; + } + else if (/^(true|false)$/.test(next)) { + setArg(key, next === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + else if (/^-[^-]+/.test(arg)) { + var letters = arg.slice(1,-1).split(''); + + var broken = false; + for (var j = 0; j < letters.length; j++) { + var next = arg.slice(j+2); + + if (next === '-') { + setArg(letters[j], next, arg) + continue; + } + + if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { + setArg(letters[j], next.split('=')[1], arg); + broken = true; + break; + } + + if (/[A-Za-z]/.test(letters[j]) + && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { + setArg(letters[j], next, arg); + broken = true; + break; + } + + if (letters[j+1] && letters[j+1].match(/\W/)) { + setArg(letters[j], arg.slice(j+2), arg); + broken = true; + break; + } + else { + setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); + } + } + + var key = arg.slice(-1)[0]; + if (!broken && key !== '-') { + if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) + && !flags.bools[key] + && (aliases[key] ? !aliasIsBoolean(key) : true)) { + setArg(key, args[i+1], arg); + i++; + } + else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { + setArg(key, args[i+1] === 'true', arg); + i++; + } + else { + setArg(key, flags.strings[key] ? '' : true, arg); + } + } + } + else { + if (!flags.unknownFn || flags.unknownFn(arg) !== false) { + argv._.push( + flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) + ); + } + if (opts.stopEarly) { + argv._.push.apply(argv._, args.slice(i + 1)); + break; + } + } + } + + Object.keys(defaults).forEach(function (key) { + if (!hasKey(argv, key.split('.'))) { + setKey(argv, key.split('.'), defaults[key]); + + (aliases[key] || []).forEach(function (x) { + setKey(argv, x.split('.'), defaults[key]); + }); + } + }); + + if (opts['--']) { + argv['--'] = new Array(); + notFlags.forEach(function(key) { + argv['--'].push(key); + }); + } + else { + notFlags.forEach(function(key) { + argv._.push(key); + }); + } + + return argv; +}; + +function hasKey (obj, keys) { + var o = obj; + keys.slice(0,-1).forEach(function (key) { + o = (o[key] || {}); + }); + + var key = keys[keys.length - 1]; + return key in o; +} + +function isNumber (x) { + if (typeof x === 'number') return true; + if (/^0x[0-9a-f]+$/i.test(x)) return true; + return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); +} + diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/LICENSE 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,18 @@ +This software is released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,73 @@ +{ + "_from": "minimist@^1.2.0", + "_id": "minimist@1.2.5", + "_inBundle": false, + "_integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "_location": "/minimist", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "minimist@^1.2.0", + "name": "minimist", + "escapedName": "minimist", + "rawSpec": "^1.2.0", + "saveSpec": null, + "fetchSpec": "^1.2.0" + }, + "_requiredBy": [ + "/rc" + ], + "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "_shasum": "67d66014b66a6a8aaa0c083c5fd58df4e4e97602", + "_spec": "minimist@^1.2.0", + "_where": "/Users/ruyadorno/Documents/workspace/cli/latest/node_modules/rc", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "parse argument options", + "devDependencies": { + "covert": "^1.0.0", + "tap": "~0.4.0", + "tape": "^3.5.0" + }, + "homepage": "https://github.com/substack/minimist", + "keywords": [ + "argv", + "getopt", + "parser", + "optimist" + ], + "license": "MIT", + "main": "index.js", + "name": "minimist", + "repository": { + "type": "git", + "url": "git://github.com/substack/minimist.git" + }, + "scripts": { + "coverage": "covert test/*.js", + "test": "tap test/*.js" + }, + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/6..latest", + "ff/5", + "firefox/latest", + "chrome/10", + "chrome/latest", + "safari/5.1", + "safari/latest", + "opera/12" + ] + }, + "version": "1.2.5" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/readme.markdown nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/readme.markdown --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/readme.markdown 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/readme.markdown 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,95 @@ +# minimist + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.log(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ _: [ 'foo', 'bar', 'baz' ], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' } +``` + +# security + +Previous versions had a prototype pollution bug that could cause privilege +escalation in some circumstances when handling untrusted user input. + +Please use version 1.2.3 or later: https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: + + ``` + > require('./')('one two three -- four five --six'.split(' '), { '--': true }) + { _: [ 'one', 'two', 'three' ], + '--': [ 'four', 'five', '--six' ] } + ``` + + Note that with `opts['--']` set, parsing for arguments still stops after the + `--`. + +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/all_bool.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/all_bool.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/all_bool.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/all_bool.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,32 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'] + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/bool.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/bool.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/bool.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/bool.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,178 @@ +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false } + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { + boolean: ['x','y','z'] + }); + + t.deepEqual(argv, { + x : true, + y : false, + z : true, + _ : [ 'one', 'two', 'three' ] + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + herp: { alias: 'h', boolean: true } + }; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' } + }); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var opts = { + alias: { 'h': 'herp' }, + boolean: 'herp' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = [ '-h', 'derp' ]; + var regular = [ '--herp', 'derp' ]; + var alt = [ '--harp', 'derp' ]; + var opts = { + alias: { 'h': ['herp', 'harp'] }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + '_': [ 'derp' ] + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = [ '-h', 'true' ]; + var regular = [ '--herp', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h' + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + '_': [ ] + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function(t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool' + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true + }, + boolean: ['boool'] + }); + + t.same(parsed.boool, false); + t.end(); +}); + +test('boolean using something similar to true', function (t) { + var opts = { boolean: 'h' }; + var result = parse(['-h', 'true.txt'], opts); + var expected = { + h: true, + '_': ['true.txt'] + }; + + t.same(result, expected); + t.end(); +}); \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/dash.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/dash.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/dash.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/dash.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,31 @@ +var parse = require('../'); +var test = require('tape'); + +test('-', function (t) { + t.plan(5); + t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); + t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); + t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); + t.deepEqual( + parse([ '-b', '-' ], { boolean: 'b' }), + { b: true, _: [ '-' ] } + ); + t.deepEqual( + parse([ '-s', '-' ], { string: 's' }), + { s: '-', _: [] } + ); +}); + +test('-a -- b', function (t) { + t.plan(3); + t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); + t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); +}); + +test('move arguments after the -- into their own `--` array', function(t) { + t.plan(1); + t.deepEqual( + parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }), + { name: 'John', _: [ 'before' ], '--': [ 'after' ] }); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/default_bool.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/default_bool.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/default_bool.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/default_bool.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,35 @@ +var test = require('tape'); +var parse = require('../'); + +test('boolean default true', function (t) { + var argv = parse([], { + boolean: 'sometrue', + default: { sometrue: true } + }); + t.equal(argv.sometrue, true); + t.end(); +}); + +test('boolean default false', function (t) { + var argv = parse([], { + boolean: 'somefalse', + default: { somefalse: false } + }); + t.equal(argv.somefalse, false); + t.end(); +}); + +test('boolean default to null', function (t) { + var argv = parse([], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, null); + var argv = parse(['--maybe'], { + boolean: 'maybe', + default: { maybe: null } + }); + t.equal(argv.maybe, true); + t.end(); + +}) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/dotted.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/dotted.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/dotted.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/dotted.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,22 @@ +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', {default: {'a.b': 11}}); + t.equal(argv.a.b, 11); + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/kv_short.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/kv_short.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/kv_short.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/kv_short.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,16 @@ +var parse = require('../'); +var test = require('tape'); + +test('short -k=v' , function (t) { + t.plan(1); + + var argv = parse([ '-b=123' ]); + t.deepEqual(argv, { b: 123, _: [] }); +}); + +test('multi short -k=v' , function (t) { + t.plan(1); + + var argv = parse([ '-a=whatever', '-b=robots' ]); + t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/long.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/long.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/long.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/long.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,31 @@ +var test = require('tape'); +var parse = require('../'); + +test('long opts', function (t) { + t.deepEqual( + parse([ '--bool' ]), + { bool : true, _ : [] }, + 'long boolean' + ); + t.deepEqual( + parse([ '--pow', 'xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture sp' + ); + t.deepEqual( + parse([ '--pow=xixxle' ]), + { pow : 'xixxle', _ : [] }, + 'long capture eq' + ); + t.deepEqual( + parse([ '--host', 'localhost', '--port', '555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures sp' + ); + t.deepEqual( + parse([ '--host=localhost', '--port=555' ]), + { host : 'localhost', port : 555, _ : [] }, + 'long captures eq' + ); + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/num.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/num.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/num.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/num.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,36 @@ +var parse = require('../'); +var test = require('tape'); + +test('nums', function (t) { + var argv = parse([ + '-x', '1234', + '-y', '5.67', + '-z', '1e7', + '-w', '10f', + '--hex', '0xdeadbeef', + '789' + ]); + t.deepEqual(argv, { + x : 1234, + y : 5.67, + z : 1e7, + w : '10f', + hex : 0xdeadbeef, + _ : [ 789 ] + }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv.y, 'number'); + t.deepEqual(typeof argv.z, 'number'); + t.deepEqual(typeof argv.w, 'string'); + t.deepEqual(typeof argv.hex, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); + +test('already a number', function (t) { + var argv = parse([ '-x', 1234, 789 ]); + t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); + t.deepEqual(typeof argv.x, 'number'); + t.deepEqual(typeof argv._[0], 'number'); + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/parse.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/parse.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/parse.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/parse.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,197 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse([ '--no-moo' ]), + { moo : false, _ : [] }, + 'no' + ); + t.deepEqual( + parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), + { v : ['a','b','c'], _ : [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek' + ]), + { + c : true, + a : true, + t : true, + s : 'woo', + h : 'awesome', + b : true, + bool : true, + key : 'value', + multi : [ 'quux', 'baz' ], + meep : false, + name : 'meowmers', + _ : [ 'bare', '--not-a-flag', 'eek' ] + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse([ '-t', 'moo' ], { boolean: 't' }); + t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: [ 't', 'verbose' ], + default: { verbose: true } + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'] + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params' , function (t) { + var args = parse([ '-s', "X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse([ "--s=X\nX" ]) + t.deepEqual(args, { _ : [], s : "X\nX" }); + t.end(); +}); + +test('strings' , function (t) { + var s = parse([ '-s', '0001234' ], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse([ '-x', '56' ], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([ ' ', ' ' ], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function(t) { + var s = parse([ '-s' ], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse([ '--str' ], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse([ '-art' ], { + string: [ 'a', 't' ] + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + + +test('string and alias', function(t) { + var x = parse([ '--str', '000123' ], { + string: 's', + alias: { s: 'str' } + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse([ '-s', '000123' ], { + string: 'str', + alias: { str: 's' } + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse([ '-I/foo/bar/baz' ]), + { I : '/foo/bar/baz', _ : [] } + ); + t.same( + parse([ '-xyz/foo/bar/baz' ]), + { x : true, y : true, z : '/foo/bar/baz', _ : [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: 'zoom' } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse([ '-f', '11', '--zoom', '55' ], { + alias: { z: [ 'zm', 'zoom' ] } + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop' + ]); + + t.same(argv.foo, { + bar : 3, + baz : 4, + quux : { + quibble : 5, + o_O : true + } + }); + t.same(argv.beep, { boop : true }); + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/parse_modified.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/parse_modified.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/parse_modified.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/parse_modified.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +var parse = require('../'); +var test = require('tape'); + +test('parse with modifier functions' , function (t) { + t.plan(1); + + var argv = parse([ '-b', '123' ], { boolean: 'b' }); + t.deepEqual(argv, { b: true, _: [123] }); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/proto.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/proto.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/proto.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/proto.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,44 @@ +var parse = require('../'); +var test = require('tape'); + +test('proto pollution', function (t) { + var argv = parse(['--__proto__.x','123']); + t.equal({}.x, undefined); + t.equal(argv.__proto__.x, undefined); + t.equal(argv.x, undefined); + t.end(); +}); + +test('proto pollution (array)', function (t) { + var argv = parse(['--x','4','--x','5','--x.__proto__.z','789']); + t.equal({}.z, undefined); + t.deepEqual(argv.x, [4,5]); + t.equal(argv.x.z, undefined); + t.equal(argv.x.__proto__.z, undefined); + t.end(); +}); + +test('proto pollution (number)', function (t) { + var argv = parse(['--x','5','--x.__proto__.z','100']); + t.equal({}.z, undefined); + t.equal((4).z, undefined); + t.equal(argv.x, 5); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (string)', function (t) { + var argv = parse(['--x','abc','--x.__proto__.z','def']); + t.equal({}.z, undefined); + t.equal('...'.z, undefined); + t.equal(argv.x, 'abc'); + t.equal(argv.x.z, undefined); + t.end(); +}); + +test('proto pollution (constructor)', function (t) { + var argv = parse(['--constructor.prototype.y','123']); + t.equal({}.y, undefined); + t.equal(argv.y, undefined); + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/short.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/short.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/short.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/short.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,67 @@ +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); + t.deepEqual( + parse([ '-123', '456' ]), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse([ '-b' ]), + { b : true, _ : [] }, + 'short boolean' + ); + t.deepEqual( + parse([ 'foo', 'bar', 'baz' ]), + { _ : [ 'foo', 'bar', 'baz' ] }, + 'bare' + ); + t.deepEqual( + parse([ '-cats' ]), + { c : true, a : true, t : true, s : true, _ : [] }, + 'group' + ); + t.deepEqual( + parse([ '-cats', 'meow' ]), + { c : true, a : true, t : true, s : 'meow', _ : [] }, + 'short group next' + ); + t.deepEqual( + parse([ '-h', 'localhost' ]), + { h : 'localhost', _ : [] }, + 'short capture' + ); + t.deepEqual( + parse([ '-h', 'localhost', '-p', '555' ]), + { h : 'localhost', p : 555, _ : [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), + { + f : true, p : 555, h : 'localhost', + _ : [ 'script.js' ] + } + ); + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/stop_early.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/stop_early.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/stop_early.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/stop_early.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,15 @@ +var parse = require('../'); +var test = require('tape'); + +test('stops parsing on the first non-option when stopEarly is set', function (t) { + var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { + stopEarly: true + }); + + t.deepEqual(argv, { + aaa: 'bbb', + _: ['ccc', '--ddd'] + }); + + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/unknown.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/unknown.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/unknown.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/unknown.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,102 @@ +var parse = require('../'); +var test = require('tape'); + +test('boolean and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'true', '--derp', 'true' ]; + var regular = [ '--herp', 'true', '-d', 'true' ]; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('flag boolean true any double hyphen argument is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { + boolean: true, + unknown: unknownFn + }); + t.same(unknown, ['--tacos=good', 'cow', '-p']); + t.same(argv, { + honk: true, + _: [] + }); + t.end(); +}); + +test('string and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello', '--derp', 'goodbye' ]; + var regular = [ '--herp', 'hello', '-d', 'moon' ]; + var opts = { + alias: { h: 'herp' }, + string: 'h', + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, ['--derp', '-d']); + t.end(); +}); + +test('default and alias is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '-h', 'hello' ]; + var regular = [ '--herp', 'hello' ]; + var opts = { + default: { 'h': 'bar' }, + alias: { 'h': 'herp' }, + unknown: unknownFn + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + + t.same(unknown, []); + t.end(); + unknownFn(); // exercise fn for 100% coverage +}); + +test('value following -- is not unknown', function (t) { + var unknown = []; + function unknownFn(arg) { + unknown.push(arg); + return false; + } + var aliased = [ '--bad', '--', 'good', 'arg' ]; + var opts = { + '--': true, + unknown: unknownFn + }; + var argv = parse(aliased, opts); + + t.same(unknown, ['--bad']); + t.same(argv, { + '--': ['good', 'arg'], + '_': [] + }) + t.end(); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/whitespace.js nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/whitespace.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/test/whitespace.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/test/whitespace.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,8 @@ +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace' , function (t) { + t.plan(1); + var x = parse([ '-x', '\t' ]).x; + t.equal(x, '\t'); +}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/.travis.yml nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/.travis.yml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/minimist/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/minimist/.travis.yml 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,8 @@ +language: node_js +node_js: + - "0.8" + - "0.10" + - "0.12" + - "iojs" +before_install: + - npm install -g npm@~1.4.6 diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,6 @@ module.exports = function (args, opts) { if (!opts) opts = {}; - + var flags = { bools : {}, strings : {}, unknownFn: null }; if (typeof opts['unknown'] === 'function') { @@ -14,7 +14,7 @@ flags.bools[key] = true; }); } - + var aliases = {}; Object.keys(opts.alias || {}).forEach(function (key) { aliases[key] = [].concat(opts.alias[key]); @@ -33,12 +33,12 @@ }); var defaults = opts['default'] || {}; - + var argv = { _ : [] }; Object.keys(flags.bools).forEach(function (key) { setArg(key, defaults[key] === undefined ? false : defaults[key]); }); - + var notFlags = []; if (args.indexOf('--') !== -1) { @@ -60,7 +60,7 @@ ? Number(val) : val ; setKey(argv, key.split('.'), value); - + (aliases[key] || []).forEach(function (x) { setKey(argv, x.split('.'), value); }); @@ -93,7 +93,7 @@ o[key] = [ o[key], value ]; } } - + function aliasIsBoolean(key) { return aliases[key].some(function (x) { return flags.bools[x]; @@ -102,7 +102,7 @@ for (var i = 0; i < args.length; i++) { var arg = args[i]; - + if (/^--.+=/.test(arg)) { // Using [\s\S] instead of . because js doesn't support the // 'dotall' regex modifier. See: @@ -139,29 +139,29 @@ } else if (/^-[^-]+/.test(arg)) { var letters = arg.slice(1,-1).split(''); - + var broken = false; for (var j = 0; j < letters.length; j++) { var next = arg.slice(j+2); - + if (next === '-') { setArg(letters[j], next, arg) continue; } - + if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { setArg(letters[j], next.split('=')[1], arg); broken = true; break; } - + if (/[A-Za-z]/.test(letters[j]) && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { setArg(letters[j], next, arg); broken = true; break; } - + if (letters[j+1] && letters[j+1].match(/\W/)) { setArg(letters[j], arg.slice(j+2), arg); broken = true; @@ -171,7 +171,7 @@ setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); } } - + var key = arg.slice(-1)[0]; if (!broken && key !== '-') { if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) @@ -201,17 +201,17 @@ } } } - + Object.keys(defaults).forEach(function (key) { if (!hasKey(argv, key.split('.'))) { setKey(argv, key.split('.'), defaults[key]); - + (aliases[key] || []).forEach(function (x) { setKey(argv, x.split('.'), defaults[key]); }); } }); - + if (opts['--']) { argv['--'] = new Array(); notFlags.forEach(function(key) { @@ -242,3 +242,4 @@ if (/^0x[0-9a-f]+$/i.test(x)) return true; return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); } + diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/all_bool.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/all_bool.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/all_bool.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/all_bool.js 2022-04-05 07:17:00.000000000 +0000 @@ -5,12 +5,12 @@ var argv = parse(['moo', '--honk', 'cow'], { boolean: true }); - + t.deepEqual(argv, { honk: true, _: ['moo', 'cow'] }); - + t.deepEqual(typeof argv.honk, 'boolean'); t.end(); }); @@ -19,14 +19,14 @@ var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { boolean: true }); - + t.deepEqual(argv, { honk: true, tacos: 'good', p: 55, _: ['moo', 'cow'] }); - + t.deepEqual(typeof argv.honk, 'boolean'); t.end(); }); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/bool.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/bool.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/bool.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/bool.js 2022-04-05 07:17:00.000000000 +0000 @@ -6,13 +6,13 @@ boolean: ['t', 'verbose'], default: { verbose: false, t: false } }); - + t.deepEqual(argv, { verbose: false, t: false, _: ['moo'] }); - + t.deepEqual(typeof argv.verbose, 'boolean'); t.deepEqual(typeof argv.t, 'boolean'); t.end(); @@ -23,14 +23,14 @@ var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { boolean: ['x','y','z'] }); - + t.deepEqual(argv, { x : true, y : false, z : true, _ : [ 'one', 'two', 'three' ] }); - + t.deepEqual(typeof argv.x, 'boolean'); t.deepEqual(typeof argv.y, 'boolean'); t.deepEqual(typeof argv.z, 'boolean'); @@ -55,9 +55,9 @@ h: true, '_': [ 'derp' ] }; - + t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); + t.same(propertyArgv, expected); t.end(); }); @@ -119,7 +119,7 @@ }; t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); + t.same(propertyArgv, expected); t.end(); }); @@ -135,7 +135,7 @@ parsed = parse(['--boool', '--other=false'], { boolean: 'boool' }); - + t.same(parsed.boool, true); t.same(parsed.other, 'false'); t.end(); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/kv_short.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/kv_short.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/kv_short.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/kv_short.js 2022-04-05 07:17:00.000000000 +0000 @@ -3,14 +3,14 @@ test('short -k=v' , function (t) { t.plan(1); - + var argv = parse([ '-b=123' ]); t.deepEqual(argv, { b: 123, _: [] }); }); test('multi short -k=v' , function (t) { t.plan(1); - + var argv = parse([ '-a=whatever', '-b=robots' ]); t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); }); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/parse.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/parse.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/parse.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/parse.js 2022-04-05 07:17:00.000000000 +0000 @@ -14,7 +14,7 @@ ); t.end(); }); - + test('comprehensive', function (t) { t.deepEqual( parse([ @@ -54,13 +54,13 @@ boolean: [ 't', 'verbose' ], default: { verbose: true } }); - + t.deepEqual(argv, { verbose: false, t: true, _: ['moo'] }); - + t.deepEqual(typeof argv.verbose, 'boolean'); t.deepEqual(typeof argv.t, 'boolean'); t.end(); @@ -69,7 +69,7 @@ test('newlines in params' , function (t) { var args = parse([ '-s', "X\nX" ]) t.deepEqual(args, { _ : [], s : "X\nX" }); - + // reproduce in bash: // VALUE="new // line" @@ -83,7 +83,7 @@ var s = parse([ '-s', '0001234' ], { string: 's' }).s; t.equal(s, '0001234'); t.equal(typeof s, 'string'); - + var x = parse([ '-x', '56' ], { string: 'x' }).x; t.equal(x, '56'); t.equal(typeof x, 'string'); @@ -183,7 +183,7 @@ '--foo.quux.quibble', '5', '--foo.quux.o_O', '--beep.boop' ]); - + t.same(argv.foo, { bar : 3, baz : 4, diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/parse_modified.js 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ test('parse with modifier functions' , function (t) { t.plan(1); - + var argv = parse([ '-b', '123' ], { boolean: 'b' }); t.deepEqual(argv, { b: true, _: [123] }); }); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/short.js nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/short.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/mkdirp/node_modules/minimist/test/short.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/mkdirp/node_modules/minimist/test/short.js 2022-04-05 07:17:00.000000000 +0000 @@ -43,7 +43,7 @@ ); t.end(); }); - + test('mixed short bool and capture', function (t) { t.same( parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), @@ -54,7 +54,7 @@ ); t.end(); }); - + test('short and long', function (t) { t.deepEqual( parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/CHANGELOG.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). - -## [1.0.5] - 2018-08-25 - -### Changed - -- Removed `prepublish` script from `package.json` - -## [1.0.4] - 2017-08-08 - -### New - -- Added a changelog - -### Changed - -- Ignore `yarn.lock` and `package-lock.json` files \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/LICENSE 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/LICENSE 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2018 Tobias Reich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -{ - "_args": [ - [ - "nice-try@1.0.5", - "/Users/mperrotte/npminc/cli" - ] - ], - "_development": true, - "_from": "nice-try@1.0.5", - "_id": "nice-try@1.0.5", - "_inBundle": false, - "_integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "_location": "/nice-try", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "nice-try@1.0.5", - "name": "nice-try", - "escapedName": "nice-try", - "rawSpec": "1.0.5", - "saveSpec": null, - "fetchSpec": "1.0.5" - }, - "_requiredBy": [ - "/nyc/cross-spawn" - ], - "_resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "_spec": "1.0.5", - "_where": "/Users/mperrotte/npminc/cli", - "authors": [ - "Tobias Reich " - ], - "bugs": { - "url": "https://github.com/electerious/nice-try/issues" - }, - "description": "Tries to execute a function and discards any error that occurs", - "devDependencies": { - "chai": "^4.1.2", - "coveralls": "^3.0.0", - "mocha": "^5.1.1", - "nyc": "^12.0.1" - }, - "files": [ - "src" - ], - "homepage": "https://github.com/electerious/nice-try", - "keywords": [ - "try", - "catch", - "error" - ], - "license": "MIT", - "main": "src/index.js", - "name": "nice-try", - "repository": { - "type": "git", - "url": "git+https://github.com/electerious/nice-try.git" - }, - "scripts": { - "coveralls": "nyc report --reporter=text-lcov | coveralls", - "test": "nyc node_modules/mocha/bin/_mocha" - }, - "version": "1.0.5" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -# nice-try - -[![Travis Build Status](https://travis-ci.org/electerious/nice-try.svg?branch=master)](https://travis-ci.org/electerious/nice-try) [![AppVeyor Status](https://ci.appveyor.com/api/projects/status/8tqb09wrwci3xf8l?svg=true)](https://ci.appveyor.com/project/electerious/nice-try) [![Coverage Status](https://coveralls.io/repos/github/electerious/nice-try/badge.svg?branch=master)](https://coveralls.io/github/electerious/nice-try?branch=master) [![Dependencies](https://david-dm.org/electerious/nice-try.svg)](https://david-dm.org/electerious/nice-try#info=dependencies) [![Greenkeeper badge](https://badges.greenkeeper.io/electerious/nice-try.svg)](https://greenkeeper.io/) - -A function that tries to execute a function and discards any error that occurs. - -## Install - -``` -npm install nice-try -``` - -## Usage - -```js -const niceTry = require('nice-try') - -niceTry(() => JSON.parse('true')) // true -niceTry(() => JSON.parse('truee')) // undefined -niceTry() // undefined -niceTry(true) // undefined -``` - -## API - -### Parameters - -- `fn` `{Function}` Function that might or might not throw an error. - -### Returns - -- `{?*}` Return-value of the function when no error occurred. \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/src/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/src/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/nice-try/src/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/nice-try/src/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -'use strict' - -/** - * Tries to execute a function and discards any error that occurs. - * @param {Function} fn - Function that might or might not throw an error. - * @returns {?*} Return-value of the function when no error occurred. - */ -module.exports = function(fn) { - - try { return fn() } catch (e) {} - -} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/node-gyp/macOS_Catalina.md nodejs-mozilla-12.22.12/deps/npm/node_modules/node-gyp/macOS_Catalina.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/node-gyp/macOS_Catalina.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/node-gyp/macOS_Catalina.md 2022-04-05 07:17:00.000000000 +0000 @@ -21,13 +21,13 @@ * `com.apple.pkg.CLTools_Executables` should be listed. If it isn't, this test failed. 2. `/usr/sbin/pkgutil --pkg-info com.apple.pkg.CLTools_Executables` * `version: 11.0.0` (or later) should be listed. If it isn't, this test failed. - + If both tests succeeded, _you are done_! You should be ready to install `node-gyp`. -If either test failed, there is a problem with your Xcode Command Line Tools installation. [Continue to Solutions](#Solutions). +If either test failed, there is a problem with your Xcode Command Line Tools installation. [Continue to Solutions](#Solutions). ### Solutions -There are three ways to install the Xcode libraries `node-gyp` needs on macOS. People running Catalina have had success with some but not others in a way that has been unpredictable. +There are three ways to install the Xcode libraries `node-gyp` needs on macOS. People running Catalina have had success with some but not others in a way that has been unpredictable. 1. With the full Xcode (~7.6 GB download) from the `App Store` app. 2. With the _much_ smaller Xcode Command Line Tools via `xcode-select --install` diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-audit-report/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-audit-report/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-audit-report/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-audit-report/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [1.3.3](https://github.com/npm/npm-audit-report/compare/v1.3.2...v1.3.3) (2020-03-26) + + + ## [1.3.2](https://github.com/npm/npm-audit-report/compare/v1.3.1...v1.3.2) (2018-12-18) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-audit-report/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-audit-report/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-audit-report/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-audit-report/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,28 +1,28 @@ { - "_from": "npm-audit-report@1.3.2", - "_id": "npm-audit-report@1.3.2", + "_from": "npm-audit-report@1.3.3", + "_id": "npm-audit-report@1.3.3", "_inBundle": false, - "_integrity": "sha512-abeqS5ONyXNaZJPGAf6TOUMNdSe1Y6cpc9MLBRn+CuUoYbfdca6AxOyXVlfIv9OgKX+cacblbG5w7A6ccwoTPw==", + "_integrity": "sha512-8nH/JjsFfAWMvn474HB9mpmMjrnKb1Hx/oTAdjv4PT9iZBvBxiZ+wtDUapHCJwLqYGQVPaAfs+vL5+5k9QndXw==", "_location": "/npm-audit-report", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "npm-audit-report@1.3.2", + "raw": "npm-audit-report@1.3.3", "name": "npm-audit-report", "escapedName": "npm-audit-report", - "rawSpec": "1.3.2", + "rawSpec": "1.3.3", "saveSpec": null, - "fetchSpec": "1.3.2" + "fetchSpec": "1.3.3" }, "_requiredBy": [ "#USER", "/" ], - "_resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-1.3.2.tgz", - "_shasum": "303bc78cd9e4c226415076a4f7e528c89fc77018", - "_spec": "npm-audit-report@1.3.2", - "_where": "/Users/zkat/Documents/code/work/npm", + "_resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-1.3.3.tgz", + "_shasum": "8226deeb253b55176ed147592a3995442f2179ed", + "_spec": "npm-audit-report@1.3.3", + "_where": "/Users/claudiahdz/npm/cli", "author": { "name": "Adam Baldwin" }, @@ -40,9 +40,7 @@ "keyfob": "^1.0.0", "standard": "^11.0.1", "standard-version": "^4.3.0", - "tap": "^11.1.5", - "weallbehave": "^1.2.0", - "weallcontribute": "^1.0.8" + "tap": "^11.1.5" }, "directories": { "lib": "lib", @@ -72,9 +70,7 @@ "prerelease": "npm t", "pretest": "standard", "release": "standard-version -s", - "test": "tap --100 -J --coverage test/*.js", - "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", - "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" + "test": "tap --100 -J --coverage test/*.js" }, - "version": "1.3.2" + "version": "1.3.3" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-lifecycle/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-lifecycle/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-lifecycle/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-lifecycle/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [3.1.5](https://github.com/npm/lifecycle/compare/v3.1.4...v3.1.5) (2020-03-26) + + + ## [3.1.4](https://github.com/npm/lifecycle/compare/v3.1.3...v3.1.4) (2019-09-18) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-lifecycle/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-lifecycle/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-lifecycle/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-lifecycle/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,19 +1,19 @@ { - "_from": "npm-lifecycle@3.1.4", - "_id": "npm-lifecycle@3.1.4", + "_from": "npm-lifecycle@3.1.5", + "_id": "npm-lifecycle@3.1.5", "_inBundle": false, - "_integrity": "sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A==", + "_integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", "_location": "/npm-lifecycle", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "npm-lifecycle@3.1.4", + "raw": "npm-lifecycle@3.1.5", "name": "npm-lifecycle", "escapedName": "npm-lifecycle", - "rawSpec": "3.1.4", + "rawSpec": "3.1.5", "saveSpec": null, - "fetchSpec": "3.1.4" + "fetchSpec": "3.1.5" }, "_requiredBy": [ "#USER", @@ -21,10 +21,10 @@ "/libcipm", "/libnpm" ], - "_resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz", - "_shasum": "de6975c7d8df65f5150db110b57cce498b0b604c", - "_spec": "npm-lifecycle@3.1.4", - "_where": "/Users/mperrotte/npminc/cli", + "_resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", + "_shasum": "9882d3642b8c82c815782a12e6a1bfeed0026309", + "_spec": "npm-lifecycle@3.1.5", + "_where": "/Users/claudiahdz/npm/cli", "author": { "name": "Mike Sherov" }, @@ -49,9 +49,7 @@ "sinon": "^7.2.3", "standard": "^12.0.1", "standard-version": "^4.4.0", - "tap": "^12.7.0", - "weallbehave": "^1.2.0", - "weallcontribute": "^1.0.8" + "tap": "^12.7.0" }, "files": [ "index.js", @@ -78,9 +76,7 @@ "pretest": "standard", "release": "standard-version -s", "snap": "TAP_SNAPSHOT=1 npm test", - "test": "tap -J --cov test/*.js", - "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", - "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" + "test": "tap -J --cov test/*.js" }, - "version": "3.1.4" + "version": "3.1.5" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-lifecycle/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-lifecycle/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-lifecycle/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-lifecycle/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,4 +1,15 @@ -# npm-lifecycle [![npm version](https://img.shields.io/npm/v/npm-lifecycle.svg)](https://npm.im/npm-lifecycle) [![license](https://img.shields.io/npm/l/npm-lifecycle.svg)](https://npm.im/npm-lifecycle) [![Travis](https://img.shields.io/travis/npm/npm-lifecycle/latest.svg)](https://travis-ci.org/npm/npm-lifecycle) [![AppVeyor](https://img.shields.io/appveyor/ci/npm/npm-lifecycle/latest.svg)](https://ci.appveyor.com/project/npm/npm-lifecycle) [![Coverage Status](https://coveralls.io/repos/github/npm/npm-lifecycle/badge.svg?branch=latest)](https://coveralls.io/github/npm/npm-lifecycle?branch=latest) +# Note: pending imminent deprecation + +**This module will be deprecated once npm v7 is released. Please do not rely +on it more than absolutely necessary.** + +The lifecycle script runner used in npm v7 is +[@npmcli/run-script](http://npm.im/@npmcli/run-script). Please use that +module moving forward. + +----- + +# npm-lifecycle [`npm-lifecycle`](https://github.com/npm/npm-lifecycle) is a standalone library for executing packages' lifecycle scripts. It is extracted from npm itself and @@ -22,18 +33,6 @@ // idk yet ``` -### Features - -* something cool - -### Contributing - -The npm team enthusiastically welcomes contributions and project participation! -There's a bunch of things you can do if you want to contribute! The [Contributor -Guide](CONTRIBUTING.md) has all the information you need for everything from -reporting bugs to contributing entire new features. Please don't hesitate to -jump in if you'd like to, or even ask us questions if something isn't clear. - ### API #### `> lifecycle(name, pkg, wd, [opts]) -> Promise` diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,6 +2,31 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [4.0.7](https://github.com/npm/registry-fetch/compare/v4.0.6...v4.0.7) (2020-08-17) + + +### Bug Fixes + +* correct password redaction ([110032b](https://github.com/npm/registry-fetch/commit/110032b)) + + + + +## [4.0.6](https://github.com/npm/registry-fetch/compare/v4.0.5...v4.0.6) (2020-08-14) + + +### Bug Fixes + +* import URL from url module ([cd35987](https://github.com/npm/registry-fetch/commit/cd35987)) + + + + +## [4.0.5](https://github.com/npm/registry-fetch/compare/v4.0.4...v4.0.5) (2020-06-30) + + + ## [4.0.4](https://github.com/npm/registry-fetch/compare/v4.0.3...v4.0.4) (2020-04-28) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/check-response.js nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/check-response.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/check-response.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/check-response.js 2022-04-05 07:17:00.000000000 +0000 @@ -29,9 +29,22 @@ const attempt = res.headers.get('x-fetch-attempts') const attemptStr = attempt && attempt > 1 ? ` attempt #${attempt}` : '' const cacheStr = res.headers.get('x-local-cache') ? ' (from cache)' : '' + + let urlStr + try { + const URL = require('url').URL + const url = new URL(res.url) + if (url.password) { + url.password = '***' + } + urlStr = url.toString() + } catch (er) { + urlStr = res.url + } + opts.log.http( 'fetch', - `${method.toUpperCase()} ${res.status} ${res.url} ${elapsedTime}ms${attemptStr}${cacheStr}` + `${method.toUpperCase()} ${res.status} ${urlStr} ${elapsedTime}ms${attemptStr}${cacheStr}` ) } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,3 +1,4 @@ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ /* eslint-disable node/no-deprecated-api */ var buffer = require('buffer') var Buffer = buffer.Buffer diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,8 +1,8 @@ { "_from": "safe-buffer@^5.2.0", - "_id": "safe-buffer@5.2.0", + "_id": "safe-buffer@5.2.1", "_inBundle": false, - "_integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "_integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "_location": "/npm-registry-fetch/safe-buffer", "_phantomChildren": {}, "_requested": { @@ -18,14 +18,14 @@ "_requiredBy": [ "/npm-registry-fetch" ], - "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "_shasum": "b74daec49b1148f88c64b68d49b1e815c1f2f519", + "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "_shasum": "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", "_spec": "safe-buffer@^5.2.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/npm-registry-fetch", + "_where": "/Users/claudiahdz/npm/cli/node_modules/npm-registry-fetch", "author": { "name": "Feross Aboukhadijeh", "email": "feross@feross.org", - "url": "http://feross.org" + "url": "https://feross.org" }, "bugs": { "url": "https://github.com/feross/safe-buffer/issues" @@ -35,8 +35,22 @@ "description": "Safer Node.js Buffer API", "devDependencies": { "standard": "*", - "tape": "^4.0.0" + "tape": "^5.0.0" }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "homepage": "https://github.com/feross/safe-buffer", "keywords": [ "buffer", @@ -58,5 +72,5 @@ "test": "standard && tape test/*.js" }, "types": "index.d.ts", - "version": "5.2.0" + "version": "5.2.1" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/node_modules/safe-buffer/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -22,8 +22,6 @@ npm install safe-buffer ``` -[Get supported safe-buffer with the Tidelift Subscription](https://tidelift.com/subscription/pkg/npm-safe-buffer?utm_source=npm-safe-buffer&utm_medium=referral&utm_campaign=readme) - ## usage The goal of this package is to provide a safe replacement for the node.js `Buffer`. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-registry-fetch/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-registry-fetch/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,19 +1,19 @@ { - "_from": "npm-registry-fetch@4.0.4", - "_id": "npm-registry-fetch@4.0.4", + "_from": "npm-registry-fetch@4.0.7", + "_id": "npm-registry-fetch@4.0.7", "_inBundle": false, - "_integrity": "sha512-6jb34hX/iYNQebqWUHtU8YF6Cjb1H6ouTFPClYsyiW6lpFkljTpdeftm53rRojtja1rKAvKNIIiTS5Sjpw4wsA==", + "_integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", "_location": "/npm-registry-fetch", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "npm-registry-fetch@4.0.4", + "raw": "npm-registry-fetch@4.0.7", "name": "npm-registry-fetch", "escapedName": "npm-registry-fetch", - "rawSpec": "4.0.4", + "rawSpec": "4.0.7", "saveSpec": null, - "fetchSpec": "4.0.4" + "fetchSpec": "4.0.7" }, "_requiredBy": [ "#USER", @@ -28,10 +28,10 @@ "/npm-profile", "/pacote" ], - "_resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.4.tgz", - "_shasum": "2da1ecf3f43d419d96abf313664291a4623d3ea5", - "_spec": "npm-registry-fetch@4.0.4", - "_where": "/Users/ruyadorno/Documents/workspace/cli", + "_resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", + "_shasum": "57951bf6541e0246b34c9f9a38ab73607c9449d7", + "_spec": "npm-registry-fetch@4.0.7", + "_where": "/Users/ruyadorno/Documents/workspace/cli/latest", "author": { "name": "Kat Marchán", "email": "kzm@sykosomatic.org" @@ -95,12 +95,12 @@ }, "scripts": { "postrelease": "npm publish && git push --follow-tags", + "posttest": "standard", "prerelease": "npm t", - "pretest": "standard", "release": "standard-version -s", "test": "tap -J --coverage test/*.js", "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" }, - "version": "4.0.4" + "version": "4.0.7" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-user-validate/npm-user-validate.js nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-user-validate/npm-user-validate.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-user-validate/npm-user-validate.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-user-validate/npm-user-validate.js 2022-04-05 07:17:00.000000000 +0000 @@ -11,6 +11,7 @@ }, password: {}, email: { + length: 'Email length must be less then or equal to 254 characters long', valid: 'Email must be an email address' } } @@ -45,7 +46,10 @@ } function email (em) { - if (!em.match(/^.+@.+\..+$/)) { + if (em.length > 254) { + return new Error(requirements.email.length) + } + if (!em.match(/^[^@]+@.+\..+$/)) { return new Error(requirements.email.valid) } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-user-validate/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-user-validate/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/npm-user-validate/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/npm-user-validate/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,32 +1,28 @@ { - "_args": [ - [ - "npm-user-validate@1.0.0", - "/Users/rebecca/code/npm" - ] - ], - "_from": "npm-user-validate@1.0.0", - "_id": "npm-user-validate@1.0.0", + "_from": "npm-user-validate@1.0.1", + "_id": "npm-user-validate@1.0.1", "_inBundle": false, - "_integrity": "sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE=", + "_integrity": "sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw==", "_location": "/npm-user-validate", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "npm-user-validate@1.0.0", + "raw": "npm-user-validate@1.0.1", "name": "npm-user-validate", "escapedName": "npm-user-validate", - "rawSpec": "1.0.0", + "rawSpec": "1.0.1", "saveSpec": null, - "fetchSpec": "1.0.0" + "fetchSpec": "1.0.1" }, "_requiredBy": [ + "#USER", "/" ], - "_resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.0.tgz", - "_spec": "1.0.0", - "_where": "/Users/rebecca/code/npm", + "_resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-1.0.1.tgz", + "_shasum": "31428fc5475fe8416023f178c0ab47935ad8c561", + "_spec": "npm-user-validate@1.0.1", + "_where": "/Users/darcyclarke/Documents/Repos/npm/cli", "author": { "name": "Robert Kowalski", "email": "rok@kowalski.gd" @@ -34,6 +30,8 @@ "bugs": { "url": "https://github.com/npm/npm-user-validate/issues" }, + "bundleDependencies": false, + "deprecated": false, "description": "User validations for npm", "devDependencies": { "standard": "^8.4.0", @@ -60,5 +58,5 @@ "pretest": "standard", "test": "tap --100 test/*.js" }, - "version": "1.0.0" + "version": "1.0.1" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/opener/lib/opener.js nodejs-mozilla-12.22.12/deps/npm/node_modules/opener/lib/opener.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/opener/lib/opener.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/opener/lib/opener.js 2022-04-05 07:17:00.000000000 +0000 @@ -55,9 +55,9 @@ // Furthermore, if "cmd /c" double-quoted the first parameter, then "start" will interpret it as a window title, // so we need to add a dummy empty-string window title: http://stackoverflow.com/a/154090/3191 // - // Additionally, on Windows ampersand needs to be escaped when passed to "start" + // Additionally, on Windows ampersand and caret need to be escaped when passed to "start" args = args.map(function (value) { - return value.replace(/&/g, "^&"); + return value.replace(/[&^]/g, "^$&"); }); args = ["/c", "start", "\"\""].concat(args); } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/opener/LICENSE.txt nodejs-mozilla-12.22.12/deps/npm/node_modules/opener/LICENSE.txt --- nodejs-mozilla-12.18.1/deps/npm/node_modules/opener/LICENSE.txt 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/opener/LICENSE.txt 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ --- -Copyright © 2012–2018 Domenic Denicola +Copyright © 2012–2020 Domenic Denicola This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2, @@ -26,7 +26,7 @@ The MIT License (MIT) -Copyright © 2012–2018 Domenic Denicola +Copyright © 2012–2020 Domenic Denicola Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/opener/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/opener/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/opener/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/opener/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,29 +1,29 @@ { - "_from": "opener@1.5.1", - "_id": "opener@1.5.1", + "_from": "opener@1.5.2", + "_id": "opener@1.5.2", "_inBundle": false, - "_integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "_integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "_location": "/opener", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "opener@1.5.1", + "raw": "opener@1.5.2", "name": "opener", "escapedName": "opener", - "rawSpec": "1.5.1", + "rawSpec": "1.5.2", "saveSpec": null, - "fetchSpec": "1.5.1" + "fetchSpec": "1.5.2" }, "_requiredBy": [ "#USER", "/", "/tap" ], - "_resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "_shasum": "6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed", - "_spec": "opener@1.5.1", - "_where": "/Users/rebecca/code/npm", + "_resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "_shasum": "5d37e1f35077b9dcac4301372271afdeb2a13598", + "_spec": "opener@1.5.2", + "_where": "/Users/darcyclarke/Documents/Repos/npm/cli", "author": { "name": "Domenic Denicola", "email": "d@domenic.me", @@ -39,7 +39,7 @@ "deprecated": false, "description": "Opens stuff, like webpages and files and executables, cross-platform", "devDependencies": { - "eslint": "^5.3.0" + "eslint": "^7.7.0" }, "files": [ "lib/", @@ -56,5 +56,5 @@ "scripts": { "lint": "eslint ." }, - "version": "1.5.1" + "version": "1.5.2" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/opener/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/opener/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/opener/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/opener/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -34,7 +34,6 @@ editor.stderr.unref(); ``` - ## Use It for Good Like opening the user's browser with a test harness in your package's test script: @@ -52,4 +51,4 @@ ## Why -Because Windows has `start`, Macs have `open`, and *nix has `xdg-open`. At least [according to some guy on StackOverflow](http://stackoverflow.com/q/1480971/3191). And I like things that work on all three. Like Node.js. And Opener. +Because Windows has `start`, Macs have `open`, and *nix has `xdg-open`. At least [according to some person on StackOverflow](http://stackoverflow.com/q/1480971/3191). And I like things that work on all three. Like Node.js. And Opener. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,114 +0,0 @@ -'use strict'; -const execa = require('execa'); -const lcid = require('lcid'); -const mem = require('mem'); - -const defaultOptions = {spawn: true}; -const defaultLocale = 'en_US'; - -function getEnvLocale(env = process.env) { - return env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE; -} - -function parseLocale(string) { - const env = string.split('\n').reduce((env, def) => { - const [key, value] = def.split('='); - env[key] = value.replace(/^"|"$/g, ''); - return env; - }, {}); - - return getEnvLocale(env); -} - -function getLocale(string) { - return (string && string.replace(/[.:].*/, '')); -} - -function getLocales() { - return execa.stdout('locale', ['-a']); -} - -function getLocalesSync() { - return execa.sync('locale', ['-a']).stdout; -} - -function getSupportedLocale(locale, locales = '') { - return locales.includes(locale) ? locale : defaultLocale; -} - -function getAppleLocale() { - return Promise.all([ - execa.stdout('defaults', ['read', '-globalDomain', 'AppleLocale']), - getLocales() - ]).then(results => getSupportedLocale(results[0], results[1])); -} - -function getAppleLocaleSync() { - return getSupportedLocale( - execa.sync('defaults', ['read', '-globalDomain', 'AppleLocale']).stdout, - getLocalesSync() - ); -} - -function getUnixLocale() { - if (process.platform === 'darwin') { - return getAppleLocale(); - } - - return execa.stdout('locale') - .then(stdout => getLocale(parseLocale(stdout))); -} - -function getUnixLocaleSync() { - if (process.platform === 'darwin') { - return getAppleLocaleSync(); - } - - return getLocale(parseLocale(execa.sync('locale').stdout)); -} - -function getWinLocale() { - return execa.stdout('wmic', ['os', 'get', 'locale']) - .then(stdout => { - const lcidCode = parseInt(stdout.replace('Locale', ''), 16); - return lcid.from(lcidCode); - }); -} - -function getWinLocaleSync() { - const {stdout} = execa.sync('wmic', ['os', 'get', 'locale']); - const lcidCode = parseInt(stdout.replace('Locale', ''), 16); - return lcid.from(lcidCode); -} - -module.exports = mem((options = defaultOptions) => { - const envLocale = getEnvLocale(); - - let thenable; - if (envLocale || options.spawn === false) { - thenable = Promise.resolve(getLocale(envLocale)); - } else if (process.platform === 'win32') { - thenable = getWinLocale(); - } else { - thenable = getUnixLocale(); - } - - return thenable - .then(locale => locale || defaultLocale) - .catch(() => defaultLocale); -}); - -module.exports.sync = mem((options = defaultOptions) => { - const envLocale = getEnvLocale(); - - let res; - if (envLocale || options.spawn === false) { - res = getLocale(envLocale); - } else { - try { - res = process.platform === 'win32' ? getWinLocaleSync() : getUnixLocaleSync(); - } catch (_) {} - } - - return res || defaultLocale; -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/license nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/CHANGELOG.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -## [6.0.5](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.4...v6.0.5) (2018-03-02) - - -### Bug Fixes - -* avoid using deprecated Buffer constructor ([#94](https://github.com/moxystudio/node-cross-spawn/issues/94)) ([d5770df](https://github.com/moxystudio/node-cross-spawn/commit/d5770df)), closes [/nodejs.org/api/deprecations.html#deprecations_dep0005](https://github.com//nodejs.org/api/deprecations.html/issues/deprecations_dep0005) - - - - -## [6.0.4](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.3...v6.0.4) (2018-01-31) - - -### Bug Fixes - -* fix paths being incorrectly normalized on unix ([06ee3c6](https://github.com/moxystudio/node-cross-spawn/commit/06ee3c6)), closes [#90](https://github.com/moxystudio/node-cross-spawn/issues/90) - - - - -## [6.0.3](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.2...v6.0.3) (2018-01-23) - - - - -## [6.0.2](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.1...v6.0.2) (2018-01-23) - - - - -## [6.0.1](https://github.com/moxystudio/node-cross-spawn/compare/v6.0.0...v6.0.1) (2018-01-23) - - - - -# [6.0.0](https://github.com/moxystudio/node-cross-spawn/compare/5.1.0...6.0.0) (2018-01-23) - - -### Bug Fixes - -* fix certain arguments not being correctly escaped or causing batch syntax error ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)), closes [#82](https://github.com/moxystudio/node-cross-spawn/issues/82) [#51](https://github.com/moxystudio/node-cross-spawn/issues/51) -* fix commands as posix relatixe paths not working correctly, e.g.: `./my-command` ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) -* fix `options` argument being mutated ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) -* fix commands resolution when PATH was actually Path ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) - - -### Features - -* improve compliance with node's ENOENT errors ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) -* improve detection of node's shell option support ([900cf10](https://github.com/moxystudio/node-cross-spawn/commit/900cf10)) - - -### Chores - -* upgrade tooling -* upgrate project to es6 (node v4) - - -### BREAKING CHANGES - -* remove support for older nodejs versions, only `node >= 4` is supported - - - -## [5.1.0](https://github.com/moxystudio/node-cross-spawn/compare/5.0.1...5.1.0) (2017-02-26) - - -### Bug Fixes - -* fix `options.shell` support for NodeJS [v4.8](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V4.md#4.8.0) - - - -## [5.0.1](https://github.com/moxystudio/node-cross-spawn/compare/5.0.0...5.0.1) (2016-11-04) - - -### Bug Fixes - -* fix `options.shell` support for NodeJS v7 - - - -# [5.0.0](https://github.com/moxystudio/node-cross-spawn/compare/4.0.2...5.0.0) (2016-10-30) - - -## Features - -* add support for `options.shell` -* improve parsing of shebangs by using [`shebang-command`](https://github.com/kevva/shebang-command) module - - -## Chores - -* refactor some code to make it more clear -* update README caveats diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,39 +0,0 @@ -'use strict'; - -const cp = require('child_process'); -const parse = require('./lib/parse'); -const enoent = require('./lib/enoent'); - -function spawn(command, args, options) { - // Parse the arguments - const parsed = parse(command, args, options); - - // Spawn the child process - const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); - - // Hook into child process "exit" event to emit an error if the command - // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 - enoent.hookChildProcess(spawned, parsed); - - return spawned; -} - -function spawnSync(command, args, options) { - // Parse the arguments - const parsed = parse(command, args, options); - - // Spawn the child process - const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); - - // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 - result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); - - return result; -} - -module.exports = spawn; -module.exports.spawn = spawn; -module.exports.sync = spawnSync; - -module.exports._parse = parse; -module.exports._enoent = enoent; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/enoent.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/enoent.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/enoent.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/enoent.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,59 +0,0 @@ -'use strict'; - -const isWin = process.platform === 'win32'; - -function notFoundError(original, syscall) { - return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { - code: 'ENOENT', - errno: 'ENOENT', - syscall: `${syscall} ${original.command}`, - path: original.command, - spawnargs: original.args, - }); -} - -function hookChildProcess(cp, parsed) { - if (!isWin) { - return; - } - - const originalEmit = cp.emit; - - cp.emit = function (name, arg1) { - // If emitting "exit" event and exit code is 1, we need to check if - // the command exists and emit an "error" instead - // See https://github.com/IndigoUnited/node-cross-spawn/issues/16 - if (name === 'exit') { - const err = verifyENOENT(arg1, parsed, 'spawn'); - - if (err) { - return originalEmit.call(cp, 'error', err); - } - } - - return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params - }; -} - -function verifyENOENT(status, parsed) { - if (isWin && status === 1 && !parsed.file) { - return notFoundError(parsed.original, 'spawn'); - } - - return null; -} - -function verifyENOENTSync(status, parsed) { - if (isWin && status === 1 && !parsed.file) { - return notFoundError(parsed.original, 'spawnSync'); - } - - return null; -} - -module.exports = { - hookChildProcess, - verifyENOENT, - verifyENOENTSync, - notFoundError, -}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/parse.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/parse.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/parse.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/parse.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,125 +0,0 @@ -'use strict'; - -const path = require('path'); -const niceTry = require('nice-try'); -const resolveCommand = require('./util/resolveCommand'); -const escape = require('./util/escape'); -const readShebang = require('./util/readShebang'); -const semver = require('semver'); - -const isWin = process.platform === 'win32'; -const isExecutableRegExp = /\.(?:com|exe)$/i; -const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; - -// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0 -const supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false; - -function detectShebang(parsed) { - parsed.file = resolveCommand(parsed); - - const shebang = parsed.file && readShebang(parsed.file); - - if (shebang) { - parsed.args.unshift(parsed.file); - parsed.command = shebang; - - return resolveCommand(parsed); - } - - return parsed.file; -} - -function parseNonShell(parsed) { - if (!isWin) { - return parsed; - } - - // Detect & add support for shebangs - const commandFile = detectShebang(parsed); - - // We don't need a shell if the command filename is an executable - const needsShell = !isExecutableRegExp.test(commandFile); - - // If a shell is required, use cmd.exe and take care of escaping everything correctly - // Note that `forceShell` is an hidden option used only in tests - if (parsed.options.forceShell || needsShell) { - // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/` - // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument - // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called, - // we need to double escape them - const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); - - // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar) - // This is necessary otherwise it will always fail with ENOENT in those cases - parsed.command = path.normalize(parsed.command); - - // Escape command & arguments - parsed.command = escape.command(parsed.command); - parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars)); - - const shellCommand = [parsed.command].concat(parsed.args).join(' '); - - parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; - parsed.command = process.env.comspec || 'cmd.exe'; - parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped - } - - return parsed; -} - -function parseShell(parsed) { - // If node supports the shell option, there's no need to mimic its behavior - if (supportsShellOption) { - return parsed; - } - - // Mimic node shell option - // See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335 - const shellCommand = [parsed.command].concat(parsed.args).join(' '); - - if (isWin) { - parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe'; - parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; - parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped - } else { - if (typeof parsed.options.shell === 'string') { - parsed.command = parsed.options.shell; - } else if (process.platform === 'android') { - parsed.command = '/system/bin/sh'; - } else { - parsed.command = '/bin/sh'; - } - - parsed.args = ['-c', shellCommand]; - } - - return parsed; -} - -function parse(command, args, options) { - // Normalize arguments, similar to nodejs - if (args && !Array.isArray(args)) { - options = args; - args = null; - } - - args = args ? args.slice(0) : []; // Clone array to avoid changing the original - options = Object.assign({}, options); // Clone object to avoid changing the original - - // Build our parsed object - const parsed = { - command, - args, - options, - file: undefined, - original: { - command, - args, - }, - }; - - // Delegate further parsing to shell or non-shell - return options.shell ? parseShell(parsed) : parseNonShell(parsed); -} - -module.exports = parse; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/escape.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/escape.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/escape.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/escape.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -'use strict'; - -// See http://www.robvanderwoude.com/escapechars.php -const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; - -function escapeCommand(arg) { - // Escape meta chars - arg = arg.replace(metaCharsRegExp, '^$1'); - - return arg; -} - -function escapeArgument(arg, doubleEscapeMetaChars) { - // Convert to string - arg = `${arg}`; - - // Algorithm below is based on https://qntm.org/cmd - - // Sequence of backslashes followed by a double quote: - // double up all the backslashes and escape the double quote - arg = arg.replace(/(\\*)"/g, '$1$1\\"'); - - // Sequence of backslashes followed by the end of the string - // (which will become a double quote later): - // double up all the backslashes - arg = arg.replace(/(\\*)$/, '$1$1'); - - // All other backslashes occur literally - - // Quote the whole thing: - arg = `"${arg}"`; - - // Escape meta chars - arg = arg.replace(metaCharsRegExp, '^$1'); - - // Double escape meta chars if necessary - if (doubleEscapeMetaChars) { - arg = arg.replace(metaCharsRegExp, '^$1'); - } - - return arg; -} - -module.exports.command = escapeCommand; -module.exports.argument = escapeArgument; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/readShebang.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/readShebang.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/readShebang.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/readShebang.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const shebangCommand = require('shebang-command'); - -function readShebang(command) { - // Read the first 150 bytes from the file - const size = 150; - let buffer; - - if (Buffer.alloc) { - // Node.js v4.5+ / v5.10+ - buffer = Buffer.alloc(size); - } else { - // Old Node.js API - buffer = new Buffer(size); - buffer.fill(0); // zero-fill - } - - let fd; - - try { - fd = fs.openSync(command, 'r'); - fs.readSync(fd, buffer, 0, size, 0); - fs.closeSync(fd); - } catch (e) { /* Empty */ } - - // Attempt to extract shebang (null is returned if not a shebang) - return shebangCommand(buffer.toString()); -} - -module.exports = readShebang; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/resolveCommand.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/resolveCommand.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/resolveCommand.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/lib/util/resolveCommand.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -'use strict'; - -const path = require('path'); -const which = require('which'); -const pathKey = require('path-key')(); - -function resolveCommandAttempt(parsed, withoutPathExt) { - const cwd = process.cwd(); - const hasCustomCwd = parsed.options.cwd != null; - - // If a custom `cwd` was specified, we need to change the process cwd - // because `which` will do stat calls but does not support a custom cwd - if (hasCustomCwd) { - try { - process.chdir(parsed.options.cwd); - } catch (err) { - /* Empty */ - } - } - - let resolved; - - try { - resolved = which.sync(parsed.command, { - path: (parsed.options.env || process.env)[pathKey], - pathExt: withoutPathExt ? path.delimiter : undefined, - }); - } catch (e) { - /* Empty */ - } finally { - process.chdir(cwd); - } - - // If we successfully resolved, ensure that an absolute path is returned - // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it - if (resolved) { - resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved); - } - - return resolved; -} - -function resolveCommand(parsed) { - return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); -} - -module.exports = resolveCommand; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/LICENSE 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/LICENSE 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2018 Made With MOXY Lda - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,107 +0,0 @@ -{ - "_from": "cross-spawn@^6.0.0", - "_id": "cross-spawn@6.0.5", - "_inBundle": false, - "_integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "_location": "/os-locale/cross-spawn", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "cross-spawn@^6.0.0", - "name": "cross-spawn", - "escapedName": "cross-spawn", - "rawSpec": "^6.0.0", - "saveSpec": null, - "fetchSpec": "^6.0.0" - }, - "_requiredBy": [ - "/os-locale/execa" - ], - "_resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "_shasum": "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4", - "_spec": "cross-spawn@^6.0.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/os-locale/node_modules/execa", - "author": { - "name": "André Cruz", - "email": "andre@moxy.studio" - }, - "bugs": { - "url": "https://github.com/moxystudio/node-cross-spawn/issues" - }, - "bundleDependencies": false, - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] - }, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "deprecated": false, - "description": "Cross platform child_process#spawn and child_process#spawnSync", - "devDependencies": { - "@commitlint/cli": "^6.0.0", - "@commitlint/config-conventional": "^6.0.2", - "babel-core": "^6.26.0", - "babel-jest": "^22.1.0", - "babel-preset-moxy": "^2.2.1", - "eslint": "^4.3.0", - "eslint-config-moxy": "^5.0.0", - "husky": "^0.14.3", - "jest": "^22.0.0", - "lint-staged": "^7.0.0", - "mkdirp": "^0.5.1", - "regenerator-runtime": "^0.11.1", - "rimraf": "^2.6.2", - "standard-version": "^4.2.0" - }, - "engines": { - "node": ">=4.8" - }, - "files": [ - "lib" - ], - "homepage": "https://github.com/moxystudio/node-cross-spawn", - "keywords": [ - "spawn", - "spawnSync", - "windows", - "cross-platform", - "path-ext", - "shebang", - "cmd", - "execute" - ], - "license": "MIT", - "lint-staged": { - "*.js": [ - "eslint --fix", - "git add" - ] - }, - "main": "index.js", - "name": "cross-spawn", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/moxystudio/node-cross-spawn.git" - }, - "scripts": { - "commitmsg": "commitlint -e $GIT_PARAMS", - "lint": "eslint .", - "precommit": "lint-staged", - "prerelease": "npm t && npm run lint", - "release": "standard-version", - "test": "jest --env node --coverage" - }, - "standard-version": { - "scripts": { - "posttag": "git push --follow-tags origin master && npm publish" - } - }, - "version": "6.0.5" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/cross-spawn/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/cross-spawn/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -# cross-spawn - -[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Build status][appveyor-image]][appveyor-url] [![Coverage Status][codecov-image]][codecov-url] [![Dependency status][david-dm-image]][david-dm-url] [![Dev Dependency status][david-dm-dev-image]][david-dm-dev-url] [![Greenkeeper badge][greenkeeper-image]][greenkeeper-url] - -[npm-url]:https://npmjs.org/package/cross-spawn -[downloads-image]:http://img.shields.io/npm/dm/cross-spawn.svg -[npm-image]:http://img.shields.io/npm/v/cross-spawn.svg -[travis-url]:https://travis-ci.org/moxystudio/node-cross-spawn -[travis-image]:http://img.shields.io/travis/moxystudio/node-cross-spawn/master.svg -[appveyor-url]:https://ci.appveyor.com/project/satazor/node-cross-spawn -[appveyor-image]:https://img.shields.io/appveyor/ci/satazor/node-cross-spawn/master.svg -[codecov-url]:https://codecov.io/gh/moxystudio/node-cross-spawn -[codecov-image]:https://img.shields.io/codecov/c/github/moxystudio/node-cross-spawn/master.svg -[david-dm-url]:https://david-dm.org/moxystudio/node-cross-spawn -[david-dm-image]:https://img.shields.io/david/moxystudio/node-cross-spawn.svg -[david-dm-dev-url]:https://david-dm.org/moxystudio/node-cross-spawn?type=dev -[david-dm-dev-image]:https://img.shields.io/david/dev/moxystudio/node-cross-spawn.svg -[greenkeeper-image]:https://badges.greenkeeper.io/moxystudio/node-cross-spawn.svg -[greenkeeper-url]:https://greenkeeper.io/ - -A cross platform solution to node's spawn and spawnSync. - - -## Installation - -`$ npm install cross-spawn` - - -## Why - -Node has issues when using spawn on Windows: - -- It ignores [PATHEXT](https://github.com/joyent/node/issues/2318) -- It does not support [shebangs](https://en.wikipedia.org/wiki/Shebang_(Unix)) -- Has problems running commands with [spaces](https://github.com/nodejs/node/issues/7367) -- Has problems running commands with posix relative paths (e.g.: `./my-folder/my-executable`) -- Has an [issue](https://github.com/moxystudio/node-cross-spawn/issues/82) with command shims (files in `node_modules/.bin/`), where arguments with quotes and parenthesis would result in [invalid syntax error](https://github.com/moxystudio/node-cross-spawn/blob/e77b8f22a416db46b6196767bcd35601d7e11d54/test/index.test.js#L149) -- No `options.shell` support on node `` where `` must not contain any arguments. -If you would like to have the shebang support improved, feel free to contribute via a pull-request. - -Remember to always test your code on Windows! - - -## Tests - -`$ npm test` -`$ npm test -- --watch` during development - -## License - -Released under the [MIT License](http://www.opensource.org/licenses/mit-license.php). diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,361 +0,0 @@ -'use strict'; -const path = require('path'); -const childProcess = require('child_process'); -const crossSpawn = require('cross-spawn'); -const stripEof = require('strip-eof'); -const npmRunPath = require('npm-run-path'); -const isStream = require('is-stream'); -const _getStream = require('get-stream'); -const pFinally = require('p-finally'); -const onExit = require('signal-exit'); -const errname = require('./lib/errname'); -const stdio = require('./lib/stdio'); - -const TEN_MEGABYTES = 1000 * 1000 * 10; - -function handleArgs(cmd, args, opts) { - let parsed; - - opts = Object.assign({ - extendEnv: true, - env: {} - }, opts); - - if (opts.extendEnv) { - opts.env = Object.assign({}, process.env, opts.env); - } - - if (opts.__winShell === true) { - delete opts.__winShell; - parsed = { - command: cmd, - args, - options: opts, - file: cmd, - original: { - cmd, - args - } - }; - } else { - parsed = crossSpawn._parse(cmd, args, opts); - } - - opts = Object.assign({ - maxBuffer: TEN_MEGABYTES, - buffer: true, - stripEof: true, - preferLocal: true, - localDir: parsed.options.cwd || process.cwd(), - encoding: 'utf8', - reject: true, - cleanup: true - }, parsed.options); - - opts.stdio = stdio(opts); - - if (opts.preferLocal) { - opts.env = npmRunPath.env(Object.assign({}, opts, {cwd: opts.localDir})); - } - - if (opts.detached) { - // #115 - opts.cleanup = false; - } - - if (process.platform === 'win32' && path.basename(parsed.command) === 'cmd.exe') { - // #116 - parsed.args.unshift('/q'); - } - - return { - cmd: parsed.command, - args: parsed.args, - opts, - parsed - }; -} - -function handleInput(spawned, input) { - if (input === null || input === undefined) { - return; - } - - if (isStream(input)) { - input.pipe(spawned.stdin); - } else { - spawned.stdin.end(input); - } -} - -function handleOutput(opts, val) { - if (val && opts.stripEof) { - val = stripEof(val); - } - - return val; -} - -function handleShell(fn, cmd, opts) { - let file = '/bin/sh'; - let args = ['-c', cmd]; - - opts = Object.assign({}, opts); - - if (process.platform === 'win32') { - opts.__winShell = true; - file = process.env.comspec || 'cmd.exe'; - args = ['/s', '/c', `"${cmd}"`]; - opts.windowsVerbatimArguments = true; - } - - if (opts.shell) { - file = opts.shell; - delete opts.shell; - } - - return fn(file, args, opts); -} - -function getStream(process, stream, {encoding, buffer, maxBuffer}) { - if (!process[stream]) { - return null; - } - - let ret; - - if (!buffer) { - // TODO: Use `ret = util.promisify(stream.finished)(process[stream]);` when targeting Node.js 10 - ret = new Promise((resolve, reject) => { - process[stream] - .once('end', resolve) - .once('error', reject); - }); - } else if (encoding) { - ret = _getStream(process[stream], { - encoding, - maxBuffer - }); - } else { - ret = _getStream.buffer(process[stream], {maxBuffer}); - } - - return ret.catch(err => { - err.stream = stream; - err.message = `${stream} ${err.message}`; - throw err; - }); -} - -function makeError(result, options) { - const {stdout, stderr} = result; - - let err = result.error; - const {code, signal} = result; - - const {parsed, joinedCmd} = options; - const timedOut = options.timedOut || false; - - if (!err) { - let output = ''; - - if (Array.isArray(parsed.opts.stdio)) { - if (parsed.opts.stdio[2] !== 'inherit') { - output += output.length > 0 ? stderr : `\n${stderr}`; - } - - if (parsed.opts.stdio[1] !== 'inherit') { - output += `\n${stdout}`; - } - } else if (parsed.opts.stdio !== 'inherit') { - output = `\n${stderr}${stdout}`; - } - - err = new Error(`Command failed: ${joinedCmd}${output}`); - err.code = code < 0 ? errname(code) : code; - } - - err.stdout = stdout; - err.stderr = stderr; - err.failed = true; - err.signal = signal || null; - err.cmd = joinedCmd; - err.timedOut = timedOut; - - return err; -} - -function joinCmd(cmd, args) { - let joinedCmd = cmd; - - if (Array.isArray(args) && args.length > 0) { - joinedCmd += ' ' + args.join(' '); - } - - return joinedCmd; -} - -module.exports = (cmd, args, opts) => { - const parsed = handleArgs(cmd, args, opts); - const {encoding, buffer, maxBuffer} = parsed.opts; - const joinedCmd = joinCmd(cmd, args); - - let spawned; - try { - spawned = childProcess.spawn(parsed.cmd, parsed.args, parsed.opts); - } catch (err) { - return Promise.reject(err); - } - - let removeExitHandler; - if (parsed.opts.cleanup) { - removeExitHandler = onExit(() => { - spawned.kill(); - }); - } - - let timeoutId = null; - let timedOut = false; - - const cleanup = () => { - if (timeoutId) { - clearTimeout(timeoutId); - timeoutId = null; - } - - if (removeExitHandler) { - removeExitHandler(); - } - }; - - if (parsed.opts.timeout > 0) { - timeoutId = setTimeout(() => { - timeoutId = null; - timedOut = true; - spawned.kill(parsed.opts.killSignal); - }, parsed.opts.timeout); - } - - const processDone = new Promise(resolve => { - spawned.on('exit', (code, signal) => { - cleanup(); - resolve({code, signal}); - }); - - spawned.on('error', err => { - cleanup(); - resolve({error: err}); - }); - - if (spawned.stdin) { - spawned.stdin.on('error', err => { - cleanup(); - resolve({error: err}); - }); - } - }); - - function destroy() { - if (spawned.stdout) { - spawned.stdout.destroy(); - } - - if (spawned.stderr) { - spawned.stderr.destroy(); - } - } - - const handlePromise = () => pFinally(Promise.all([ - processDone, - getStream(spawned, 'stdout', {encoding, buffer, maxBuffer}), - getStream(spawned, 'stderr', {encoding, buffer, maxBuffer}) - ]).then(arr => { - const result = arr[0]; - result.stdout = arr[1]; - result.stderr = arr[2]; - - if (result.error || result.code !== 0 || result.signal !== null) { - const err = makeError(result, { - joinedCmd, - parsed, - timedOut - }); - - // TODO: missing some timeout logic for killed - // https://github.com/nodejs/node/blob/master/lib/child_process.js#L203 - // err.killed = spawned.killed || killed; - err.killed = err.killed || spawned.killed; - - if (!parsed.opts.reject) { - return err; - } - - throw err; - } - - return { - stdout: handleOutput(parsed.opts, result.stdout), - stderr: handleOutput(parsed.opts, result.stderr), - code: 0, - failed: false, - killed: false, - signal: null, - cmd: joinedCmd, - timedOut: false - }; - }), destroy); - - crossSpawn._enoent.hookChildProcess(spawned, parsed.parsed); - - handleInput(spawned, parsed.opts.input); - - spawned.then = (onfulfilled, onrejected) => handlePromise().then(onfulfilled, onrejected); - spawned.catch = onrejected => handlePromise().catch(onrejected); - - return spawned; -}; - -// TODO: set `stderr: 'ignore'` when that option is implemented -module.exports.stdout = (...args) => module.exports(...args).then(x => x.stdout); - -// TODO: set `stdout: 'ignore'` when that option is implemented -module.exports.stderr = (...args) => module.exports(...args).then(x => x.stderr); - -module.exports.shell = (cmd, opts) => handleShell(module.exports, cmd, opts); - -module.exports.sync = (cmd, args, opts) => { - const parsed = handleArgs(cmd, args, opts); - const joinedCmd = joinCmd(cmd, args); - - if (isStream(parsed.opts.input)) { - throw new TypeError('The `input` option cannot be a stream in sync mode'); - } - - const result = childProcess.spawnSync(parsed.cmd, parsed.args, parsed.opts); - result.code = result.status; - - if (result.error || result.status !== 0 || result.signal !== null) { - const err = makeError(result, { - joinedCmd, - parsed - }); - - if (!parsed.opts.reject) { - return err; - } - - throw err; - } - - return { - stdout: handleOutput(parsed.opts, result.stdout), - stderr: handleOutput(parsed.opts, result.stderr), - code: 0, - failed: false, - signal: null, - cmd: joinedCmd, - timedOut: false - }; -}; - -module.exports.shellSync = (cmd, opts) => handleShell(module.exports.sync, cmd, opts); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/lib/errname.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/lib/errname.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/lib/errname.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/lib/errname.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -'use strict'; -// Older verions of Node.js might not have `util.getSystemErrorName()`. -// In that case, fall back to a deprecated internal. -const util = require('util'); - -let uv; - -if (typeof util.getSystemErrorName === 'function') { - module.exports = util.getSystemErrorName; -} else { - try { - uv = process.binding('uv'); - - if (typeof uv.errname !== 'function') { - throw new TypeError('uv.errname is not a function'); - } - } catch (err) { - console.error('execa/lib/errname: unable to establish process.binding(\'uv\')', err); - uv = null; - } - - module.exports = code => errname(uv, code); -} - -// Used for testing the fallback behavior -module.exports.__test__ = errname; - -function errname(uv, code) { - if (uv) { - return uv.errname(code); - } - - if (!(code < 0)) { - throw new Error('err >= 0'); - } - - return `Unknown system error ${code}`; -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/lib/stdio.js nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/lib/stdio.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/lib/stdio.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/lib/stdio.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -'use strict'; -const alias = ['stdin', 'stdout', 'stderr']; - -const hasAlias = opts => alias.some(x => Boolean(opts[x])); - -module.exports = opts => { - if (!opts) { - return null; - } - - if (opts.stdio && hasAlias(opts)) { - throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${alias.map(x => `\`${x}\``).join(', ')}`); - } - - if (typeof opts.stdio === 'string') { - return opts.stdio; - } - - const stdio = opts.stdio || []; - - if (!Array.isArray(stdio)) { - throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof stdio}\``); - } - - const result = []; - const len = Math.max(stdio.length, alias.length); - - for (let i = 0; i < len; i++) { - let value = null; - - if (stdio[i] !== undefined) { - value = stdio[i]; - } else if (opts[alias[i]] !== undefined) { - value = opts[alias[i]]; - } - - result[i] = value; - } - - return result; -}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/license nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -{ - "_from": "execa@^1.0.0", - "_id": "execa@1.0.0", - "_inBundle": false, - "_integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "_location": "/os-locale/execa", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "execa@^1.0.0", - "name": "execa", - "escapedName": "execa", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/os-locale" - ], - "_resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "_shasum": "c6236a5bb4df6d6f15e88e7f017798216749ddd8", - "_spec": "execa@^1.0.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/os-locale", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/execa/issues" - }, - "bundleDependencies": false, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "deprecated": false, - "description": "A better `child_process`", - "devDependencies": { - "ava": "*", - "cat-names": "^1.0.2", - "coveralls": "^3.0.1", - "delay": "^3.0.0", - "is-running": "^2.0.0", - "nyc": "^13.0.1", - "tempfile": "^2.0.0", - "xo": "*" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "index.js", - "lib" - ], - "homepage": "https://github.com/sindresorhus/execa#readme", - "keywords": [ - "exec", - "child", - "process", - "execute", - "fork", - "execfile", - "spawn", - "file", - "shell", - "bin", - "binary", - "binaries", - "npm", - "path", - "local" - ], - "license": "MIT", - "name": "execa", - "nyc": { - "reporter": [ - "text", - "lcov" - ], - "exclude": [ - "**/fixtures/**", - "**/test.js", - "**/test/**" - ] - }, - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/execa.git" - }, - "scripts": { - "test": "xo && nyc ava" - }, - "version": "1.0.0" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/node_modules/execa/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/node_modules/execa/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,327 +0,0 @@ -# execa [![Build Status: Linux](https://travis-ci.org/sindresorhus/execa.svg?branch=master)](https://travis-ci.org/sindresorhus/execa) [![Build status: Windows](https://ci.appveyor.com/api/projects/status/x5ajamxtjtt93cqv/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/execa/branch/master) [![Coverage Status](https://coveralls.io/repos/github/sindresorhus/execa/badge.svg?branch=master)](https://coveralls.io/github/sindresorhus/execa?branch=master) - -> A better [`child_process`](https://nodejs.org/api/child_process.html) - - -## Why - -- Promise interface. -- [Strips EOF](https://github.com/sindresorhus/strip-eof) from the output so you don't have to `stdout.trim()`. -- Supports [shebang](https://en.wikipedia.org/wiki/Shebang_(Unix)) binaries cross-platform. -- [Improved Windows support.](https://github.com/IndigoUnited/node-cross-spawn#why) -- Higher max buffer. 10 MB instead of 200 KB. -- [Executes locally installed binaries by name.](#preferlocal) -- [Cleans up spawned processes when the parent process dies.](#cleanup) - - -## Install - -``` -$ npm install execa -``` - - - - - - -## Usage - -```js -const execa = require('execa'); - -(async () => { - const {stdout} = await execa('echo', ['unicorns']); - console.log(stdout); - //=> 'unicorns' -})(); -``` - -Additional examples: - -```js -const execa = require('execa'); - -(async () => { - // Pipe the child process stdout to the current stdout - execa('echo', ['unicorns']).stdout.pipe(process.stdout); - - - // Run a shell command - const {stdout} = await execa.shell('echo unicorns'); - //=> 'unicorns' - - - // Catching an error - try { - await execa.shell('exit 3'); - } catch (error) { - console.log(error); - /* - { - message: 'Command failed: /bin/sh -c exit 3' - killed: false, - code: 3, - signal: null, - cmd: '/bin/sh -c exit 3', - stdout: '', - stderr: '', - timedOut: false - } - */ - } -})(); - -// Catching an error with a sync method -try { - execa.shellSync('exit 3'); -} catch (error) { - console.log(error); - /* - { - message: 'Command failed: /bin/sh -c exit 3' - code: 3, - signal: null, - cmd: '/bin/sh -c exit 3', - stdout: '', - stderr: '', - timedOut: false - } - */ -} -``` - - -## API - -### execa(file, [arguments], [options]) - -Execute a file. - -Think of this as a mix of `child_process.execFile` and `child_process.spawn`. - -Returns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess), which is enhanced to also be a `Promise` for a result `Object` with `stdout` and `stderr` properties. - -### execa.stdout(file, [arguments], [options]) - -Same as `execa()`, but returns only `stdout`. - -### execa.stderr(file, [arguments], [options]) - -Same as `execa()`, but returns only `stderr`. - -### execa.shell(command, [options]) - -Execute a command through the system shell. Prefer `execa()` whenever possible, as it's both faster and safer. - -Returns a [`child_process` instance](https://nodejs.org/api/child_process.html#child_process_class_childprocess). - -The `child_process` instance is enhanced to also be promise for a result object with `stdout` and `stderr` properties. - -### execa.sync(file, [arguments], [options]) - -Execute a file synchronously. - -Returns the same result object as [`child_process.spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options). - -This method throws an `Error` if the command fails. - -### execa.shellSync(file, [options]) - -Execute a command synchronously through the system shell. - -Returns the same result object as [`child_process.spawnSync`](https://nodejs.org/api/child_process.html#child_process_child_process_spawnsync_command_args_options). - -### options - -Type: `Object` - -#### cwd - -Type: `string`
-Default: `process.cwd()` - -Current working directory of the child process. - -#### env - -Type: `Object`
-Default: `process.env` - -Environment key-value pairs. Extends automatically from `process.env`. Set `extendEnv` to `false` if you don't want this. - -#### extendEnv - -Type: `boolean`
-Default: `true` - -Set to `false` if you don't want to extend the environment variables when providing the `env` property. - -#### argv0 - -Type: `string` - -Explicitly set the value of `argv[0]` sent to the child process. This will be set to `command` or `file` if not specified. - -#### stdio - -Type: `string[]` `string`
-Default: `pipe` - -Child's [stdio](https://nodejs.org/api/child_process.html#child_process_options_stdio) configuration. - -#### detached - -Type: `boolean` - -Prepare child to run independently of its parent process. Specific behavior [depends on the platform](https://nodejs.org/api/child_process.html#child_process_options_detached). - -#### uid - -Type: `number` - -Sets the user identity of the process. - -#### gid - -Type: `number` - -Sets the group identity of the process. - -#### shell - -Type: `boolean` `string`
-Default: `false` - -If `true`, runs `command` inside of a shell. Uses `/bin/sh` on UNIX and `cmd.exe` on Windows. A different shell can be specified as a string. The shell should understand the `-c` switch on UNIX or `/d /s /c` on Windows. - -#### stripEof - -Type: `boolean`
-Default: `true` - -[Strip EOF](https://github.com/sindresorhus/strip-eof) (last newline) from the output. - -#### preferLocal - -Type: `boolean`
-Default: `true` - -Prefer locally installed binaries when looking for a binary to execute.
-If you `$ npm install foo`, you can then `execa('foo')`. - -#### localDir - -Type: `string`
-Default: `process.cwd()` - -Preferred path to find locally installed binaries in (use with `preferLocal`). - -#### input - -Type: `string` `Buffer` `stream.Readable` - -Write some input to the `stdin` of your binary.
-Streams are not allowed when using the synchronous methods. - -#### reject - -Type: `boolean`
-Default: `true` - -Setting this to `false` resolves the promise with the error instead of rejecting it. - -#### cleanup - -Type: `boolean`
-Default: `true` - -Keep track of the spawned process and `kill` it when the parent process exits. - -#### encoding - -Type: `string`
-Default: `utf8` - -Specify the character encoding used to decode the `stdout` and `stderr` output. - -#### timeout - -Type: `number`
-Default: `0` - -If timeout is greater than `0`, the parent will send the signal identified by the `killSignal` property (the default is `SIGTERM`) if the child runs longer than timeout milliseconds. - -#### buffer - -Type: `boolean`
-Default: `true` - -Buffer the output from the spawned process. When buffering is disabled you must consume the output of the `stdout` and `stderr` streams because the promise will not be resolved/rejected until they have completed. - -#### maxBuffer - -Type: `number`
-Default: `10000000` (10MB) - -Largest amount of data in bytes allowed on `stdout` or `stderr`. - -#### killSignal - -Type: `string` `number`
-Default: `SIGTERM` - -Signal value to be used when the spawned process will be killed. - -#### stdin - -Type: `string` `number` `Stream` `undefined` `null`
-Default: `pipe` - -Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). - -#### stdout - -Type: `string` `number` `Stream` `undefined` `null`
-Default: `pipe` - -Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). - -#### stderr - -Type: `string` `number` `Stream` `undefined` `null`
-Default: `pipe` - -Same options as [`stdio`](https://nodejs.org/dist/latest-v6.x/docs/api/child_process.html#child_process_options_stdio). - -#### windowsVerbatimArguments - -Type: `boolean`
-Default: `false` - -If `true`, no quoting or escaping of arguments is done on Windows. Ignored on other platforms. This is set to `true` automatically when the `shell` option is `true`. - - -## Tips - -### Save and pipe output from a child process - -Let's say you want to show the output of a child process in real-time while also saving it to a variable. - -```js -const execa = require('execa'); -const getStream = require('get-stream'); - -const stream = execa('echo', ['foo']).stdout; - -stream.pipe(process.stdout); - -getStream(stream).then(value => { - console.log('child output:', value); -}); -``` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -{ - "_from": "os-locale@^3.1.0", - "_id": "os-locale@3.1.0", - "_inBundle": false, - "_integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "_location": "/os-locale", - "_phantomChildren": { - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "nice-try": "1.0.5", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "path-key": "2.0.1", - "semver": "5.7.1", - "shebang-command": "1.2.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0", - "which": "1.3.1" - }, - "_requested": { - "type": "range", - "registry": true, - "raw": "os-locale@^3.1.0", - "name": "os-locale", - "escapedName": "os-locale", - "rawSpec": "^3.1.0", - "saveSpec": null, - "fetchSpec": "^3.1.0" - }, - "_requiredBy": [ - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "_shasum": "a802a6ee17f24c10483ab9935719cef4ed16bf1a", - "_spec": "os-locale@^3.1.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/yargs", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/os-locale/issues" - }, - "bundleDependencies": false, - "dependencies": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, - "deprecated": false, - "description": "Get the system locale", - "devDependencies": { - "ava": "^1.0.1", - "import-fresh": "^3.0.0", - "xo": "^0.23.0" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/os-locale#readme", - "keywords": [ - "locale", - "lang", - "language", - "system", - "os", - "string", - "str", - "user", - "country", - "id", - "identifier", - "region" - ], - "license": "MIT", - "name": "os-locale", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/os-locale.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "3.1.0" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/os-locale/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/os-locale/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -# os-locale [![Build Status](https://travis-ci.org/sindresorhus/os-locale.svg?branch=master)](https://travis-ci.org/sindresorhus/os-locale) - -> Get the system [locale](https://en.wikipedia.org/wiki/Locale_(computer_software)) - -Useful for localizing your module or app. - -POSIX systems: The returned locale refers to the [`LC_MESSAGE`](http://www.gnu.org/software/libc/manual/html_node/Locale-Categories.html#Locale-Categories) category, suitable for selecting the language used in the user interface for message translation. - ---- - -
- - Get professional support for 'os-locale' with a Tidelift subscription - -
- - Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. -
-
- ---- - -## Install - -``` -$ npm install os-locale -``` - - -## Usage - -```js -const osLocale = require('os-locale'); - -(async () => { - console.log(await osLocale()); - //=> 'en_US' -})(); -``` - - -## API - -### osLocale([options]) - -Returns a `Promise` for the locale. - -### osLocale.sync([options]) - -Returns the locale. - -#### options - -Type: `Object` - -##### spawn - -Type: `boolean`
-Default: `true` - -Set to `false` to avoid spawning subprocesses and instead only resolve the locale from environment variables. - - -## Security - -To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/path-parse/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/path-parse/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/path-parse/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/path-parse/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -2,29 +2,14 @@ var isWindows = process.platform === 'win32'; -// Regex to split a windows path into three parts: [*, device, slash, -// tail] windows-only -var splitDeviceRe = - /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - -// Regex to split the tail part of the above into [*, dir, basename, ext] -var splitTailRe = - /^([\s\S]*?)((?:\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))(?:[\\\/]*)$/; +// Regex to split a windows path into into [dir, root, basename, name, ext] +var splitWindowsRe = + /^(((?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?[\\\/]?)(?:[^\\\/]*[\\\/])*)((\.{1,2}|[^\\\/]+?|)(\.[^.\/\\]*|))[\\\/]*$/; var win32 = {}; -// Function to split a filename into [root, dir, basename, ext] function win32SplitPath(filename) { - // Separate device+slash from tail - var result = splitDeviceRe.exec(filename), - device = (result[1] || '') + (result[2] || ''), - tail = result[3] || ''; - // Split the tail into dir, basename and extension - var result2 = splitTailRe.exec(tail), - dir = result2[1], - basename = result2[2], - ext = result2[3]; - return [device, dir, basename, ext]; + return splitWindowsRe.exec(filename).slice(1); } win32.parse = function(pathString) { @@ -34,24 +19,24 @@ ); } var allParts = win32SplitPath(pathString); - if (!allParts || allParts.length !== 4) { + if (!allParts || allParts.length !== 5) { throw new TypeError("Invalid path '" + pathString + "'"); } return { - root: allParts[0], - dir: allParts[0] + allParts[1].slice(0, -1), + root: allParts[1], + dir: allParts[0] === allParts[1] ? allParts[0] : allParts[0].slice(0, -1), base: allParts[2], - ext: allParts[3], - name: allParts[2].slice(0, allParts[2].length - allParts[3].length) + ext: allParts[4], + name: allParts[3] }; }; -// Split a filename into [root, dir, basename, ext], unix version +// Split a filename into [dir, root, basename, name, ext], unix version // 'root' is just a slash, or nothing. var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + /^((\/?)(?:[^\/]*\/)*)((\.{1,2}|[^\/]+?|)(\.[^.\/]*|))[\/]*$/; var posix = {}; @@ -67,19 +52,16 @@ ); } var allParts = posixSplitPath(pathString); - if (!allParts || allParts.length !== 4) { + if (!allParts || allParts.length !== 5) { throw new TypeError("Invalid path '" + pathString + "'"); } - allParts[1] = allParts[1] || ''; - allParts[2] = allParts[2] || ''; - allParts[3] = allParts[3] || ''; return { - root: allParts[0], - dir: allParts[0] + allParts[1].slice(0, -1), + root: allParts[1], + dir: allParts[0].slice(0, -1), base: allParts[2], - ext: allParts[3], - name: allParts[2].slice(0, allParts[2].length - allParts[3].length) + ext: allParts[4], + name: allParts[3], }; }; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/path-parse/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/path-parse/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/path-parse/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/path-parse/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,33 +1,28 @@ { - "_args": [ - [ - "path-parse@1.0.6", - "/Users/aeschright/code/npm-release" - ] - ], - "_development": true, - "_from": "path-parse@1.0.6", - "_id": "path-parse@1.0.6", + "_from": "path-parse@1.0.7", + "_id": "path-parse@1.0.7", "_inBundle": false, - "_integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "_integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "_location": "/path-parse", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "path-parse@1.0.6", + "raw": "path-parse@1.0.7", "name": "path-parse", "escapedName": "path-parse", - "rawSpec": "1.0.6", + "rawSpec": "1.0.7", "saveSpec": null, - "fetchSpec": "1.0.6" + "fetchSpec": "1.0.7" }, "_requiredBy": [ + "/normalize-package-data/resolve", "/resolve" ], - "_resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "_spec": "1.0.6", - "_where": "/Users/aeschright/code/npm-release", + "_resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "_shasum": "fbc114b60ca42b30d9daf5858e4bd68bbedb6735", + "_spec": "path-parse@1.0.7", + "_where": "/Users/darcyclarke/Documents/Repos/npm/npm6/node_modules/resolve", "author": { "name": "Javier Blanco", "email": "http://jbgutierrez.info" @@ -35,6 +30,8 @@ "bugs": { "url": "https://github.com/jbgutierrez/path-parse/issues" }, + "bundleDependencies": false, + "deprecated": false, "description": "Node.js path.parse() ponyfill", "homepage": "https://github.com/jbgutierrez/path-parse#readme", "keywords": [ @@ -61,5 +58,5 @@ "scripts": { "test": "node test.js" }, - "version": "1.0.6" + "version": "1.0.7" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/path-parse/test.js nodejs-mozilla-12.22.12/deps/npm/node_modules/path-parse/test.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/path-parse/test.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/path-parse/test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ -var assert = require('assert'); -var pathParse = require('./index'); - -var winParseTests = [ - [{ root: 'C:\\', dir: 'C:\\path\\dir', base: 'index.html', ext: '.html', name: 'index' }, 'C:\\path\\dir\\index.html'], - [{ root: 'C:\\', dir: 'C:\\another_path\\DIR\\1\\2\\33', base: 'index', ext: '', name: 'index' }, 'C:\\another_path\\DIR\\1\\2\\33\\index'], - [{ root: '', dir: 'another_path\\DIR with spaces\\1\\2\\33', base: 'index', ext: '', name: 'index' }, 'another_path\\DIR with spaces\\1\\2\\33\\index'], - [{ root: '\\', dir: '\\foo', base: 'C:', ext: '', name: 'C:' }, '\\foo\\C:'], - [{ root: '', dir: '', base: 'file', ext: '', name: 'file' }, 'file'], - [{ root: '', dir: '.', base: 'file', ext: '', name: 'file' }, '.\\file'], - - // unc - [{ root: '\\\\server\\share\\', dir: '\\\\server\\share\\', base: 'file_path', ext: '', name: 'file_path' }, '\\\\server\\share\\file_path'], - [{ root: '\\\\server two\\shared folder\\', dir: '\\\\server two\\shared folder\\', base: 'file path.zip', ext: '.zip', name: 'file path' }, '\\\\server two\\shared folder\\file path.zip'], - [{ root: '\\\\teela\\admin$\\', dir: '\\\\teela\\admin$\\', base: 'system32', ext: '', name: 'system32' }, '\\\\teela\\admin$\\system32'], - [{ root: '\\\\?\\UNC\\', dir: '\\\\?\\UNC\\server', base: 'share', ext: '', name: 'share' }, '\\\\?\\UNC\\server\\share'] -]; - -var winSpecialCaseFormatTests = [ - [{dir: 'some\\dir'}, 'some\\dir\\'], - [{base: 'index.html'}, 'index.html'], - [{}, ''] -]; - -var unixParseTests = [ - [{ root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file' }, '/home/user/dir/file.txt'], - [{ root: '/', dir: '/home/user/a dir', base: 'another File.zip', ext: '.zip', name: 'another File' }, '/home/user/a dir/another File.zip'], - [{ root: '/', dir: '/home/user/a dir/', base: 'another&File.', ext: '.', name: 'another&File' }, '/home/user/a dir//another&File.'], - [{ root: '/', dir: '/home/user/a$$$dir/', base: 'another File.zip', ext: '.zip', name: 'another File' }, '/home/user/a$$$dir//another File.zip'], - [{ root: '', dir: 'user/dir', base: 'another File.zip', ext: '.zip', name: 'another File' }, 'user/dir/another File.zip'], - [{ root: '', dir: '', base: 'file', ext: '', name: 'file' }, 'file'], - [{ root: '', dir: '', base: '.\\file', ext: '', name: '.\\file' }, '.\\file'], - [{ root: '', dir: '.', base: 'file', ext: '', name: 'file' }, './file'], - [{ root: '', dir: '', base: 'C:\\foo', ext: '', name: 'C:\\foo' }, 'C:\\foo'] -]; - -var unixSpecialCaseFormatTests = [ - [{dir: 'some/dir'}, 'some/dir/'], - [{base: 'index.html'}, 'index.html'], - [{}, ''] -]; - -var errors = [ - {input: null, message: /Parameter 'pathString' must be a string, not/}, - {input: {}, message: /Parameter 'pathString' must be a string, not object/}, - {input: true, message: /Parameter 'pathString' must be a string, not boolean/}, - {input: 1, message: /Parameter 'pathString' must be a string, not number/}, - {input: undefined, message: /Parameter 'pathString' must be a string, not undefined/}, -]; - -checkParseFormat(pathParse.win32, winParseTests); -checkParseFormat(pathParse.posix, unixParseTests); -checkErrors(pathParse.win32); -checkErrors(pathParse.posix); - -function checkErrors(parse) { - errors.forEach(function(errorCase) { - try { - parse(errorCase.input); - } catch(err) { - assert.ok(err instanceof TypeError); - assert.ok( - errorCase.message.test(err.message), - 'expected ' + errorCase.message + ' to match ' + err.message - ); - return; - } - - assert.fail('should have thrown'); - }); -} - -function checkParseFormat(parse, testCases) { - testCases.forEach(function(testCase) { - assert.deepEqual(parse(testCase[1]), testCase[0]); - }); -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/path-parse/.travis.yml nodejs-mozilla-12.22.12/deps/npm/node_modules/path-parse/.travis.yml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/path-parse/.travis.yml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/path-parse/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -language: node_js -node_js: - - "0.12" - - "0.11" - - "0.10" - - "0.10.12" - - "0.8" - - "0.6" - - "iojs" diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-defer/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/p-defer/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-defer/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-defer/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ -'use strict'; -module.exports = () => { - const ret = {}; - - ret.promise = new Promise((resolve, reject) => { - ret.resolve = resolve; - ret.reject = reject; - }); - - return ret; -}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-defer/license nodejs-mozilla-12.22.12/deps/npm/node_modules/p-defer/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-defer/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-defer/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-defer/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/p-defer/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-defer/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-defer/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,77 +0,0 @@ -{ - "_args": [ - [ - "p-defer@1.0.0", - "/Users/mperrotte/npminc/cli" - ] - ], - "_development": true, - "_from": "p-defer@1.0.0", - "_id": "p-defer@1.0.0", - "_inBundle": false, - "_integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "_location": "/p-defer", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "p-defer@1.0.0", - "name": "p-defer", - "escapedName": "p-defer", - "rawSpec": "1.0.0", - "saveSpec": null, - "fetchSpec": "1.0.0" - }, - "_requiredBy": [ - "/map-age-cleaner" - ], - "_resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "_spec": "1.0.0", - "_where": "/Users/mperrotte/npminc/cli", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/p-defer/issues" - }, - "description": "Create a deferred promise", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/p-defer#readme", - "keywords": [ - "promise", - "defer", - "deferred", - "resolve", - "reject", - "lazy", - "later", - "async", - "await", - "promises", - "bluebird" - ], - "license": "MIT", - "name": "p-defer", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/p-defer.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.0.0", - "xo": { - "esnext": true - } -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-defer/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/p-defer/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-defer/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-defer/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -# p-defer [![Build Status](https://travis-ci.org/sindresorhus/p-defer.svg?branch=master)](https://travis-ci.org/sindresorhus/p-defer) - -> Create a deferred promise - -[**Don't use this unless you know what you're doing!**](https://github.com/petkaantonov/bluebird/wiki/Promise-anti-patterns#the-deferred-anti-pattern) Prefer the `Promise` constructor. - - -## Install - -``` -$ npm install --save p-defer -``` - - -## Usage - -```js -const pDefer = require('p-defer'); - -function delay(ms) { - const deferred = pDefer(); - setTimeout(deferred.resolve, ms, '🦄'); - return deferred.promise; -} - -delay(100).then(console.log); -//=> '🦄' -``` - -*The above is just an example. Use [`delay`](https://github.com/sindresorhus/delay) if you need to delay a promise.* - - -## API - -### pDefer() - -Returns an `Object` with a `promise` property and functions to `resolve()` and `reject()`. - - -## Related - -- [More…](https://github.com/sindresorhus/promise-fun) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/index.d.ts 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/index.d.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -declare const pIsPromise: { - /** - Check if `input` is a ES2015 promise. - - @param input - Value to be checked. - - @example - ``` - import isPromise = require('p-is-promise'); - - isPromise(Promise.resolve('🦄')); - //=> true - ``` - */ - (input: unknown): input is Promise; - - // TODO: Remove this for the next major release, refactor the whole definition to: - // declare function pIsPromise(input: unknown): input is Promise; - // export = pIsPromise; - default: typeof pIsPromise; -}; - -export = pIsPromise; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -'use strict'; - -const isPromise = input => ( - input instanceof Promise || - ( - input !== null && - typeof input === 'object' && - typeof input.then === 'function' && - typeof input.catch === 'function' - ) -); - -module.exports = isPromise; -// TODO: Remove this for the next major release -module.exports.default = isPromise; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/license nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -{ - "_args": [ - [ - "p-is-promise@2.1.0", - "/Users/mperrotte/npminc/cli" - ] - ], - "_development": true, - "_from": "p-is-promise@2.1.0", - "_id": "p-is-promise@2.1.0", - "_inBundle": false, - "_integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "_location": "/p-is-promise", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "p-is-promise@2.1.0", - "name": "p-is-promise", - "escapedName": "p-is-promise", - "rawSpec": "2.1.0", - "saveSpec": null, - "fetchSpec": "2.1.0" - }, - "_requiredBy": [ - "/nyc/mem" - ], - "_resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "_spec": "2.1.0", - "_where": "/Users/mperrotte/npminc/cli", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/p-is-promise/issues" - }, - "description": "Check if something is a promise", - "devDependencies": { - "ava": "^1.4.1", - "bluebird": "^3.5.4", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=6" - }, - "files": [ - "index.js", - "index.d.ts" - ], - "homepage": "https://github.com/sindresorhus/p-is-promise#readme", - "keywords": [ - "promise", - "is", - "detect", - "check", - "kind", - "type", - "thenable", - "es2015", - "async", - "await", - "promises", - "bluebird" - ], - "license": "MIT", - "name": "p-is-promise", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/p-is-promise.git" - }, - "scripts": { - "test": "xo && ava && tsd" - }, - "version": "2.1.0" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-is-promise/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-is-promise/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,43 +0,0 @@ -# p-is-promise [![Build Status](https://travis-ci.org/sindresorhus/p-is-promise.svg?branch=master)](https://travis-ci.org/sindresorhus/p-is-promise) - -> Check if something is a promise - -Why not [`is-promise`](https://github.com/then/is-promise)? That module [checks for a thenable](https://github.com/then/is-promise/issues/6), not an ES2015 promise. This one is stricter. - -You most likely don't need this. Just pass your value to `Promise.resolve()` and let it handle it. - -Can be useful if you need to create a fast path for a synchronous operation. - - -## Install - -``` -$ npm install p-is-promise -``` - - -## Usage - -```js -const pIsPromise = require('p-is-promise'); -const Bluebird = require('bluebird'); - -pIsPromise(Promise.resolve('🦄')); -//=> true - -pIsPromise(Bluebird.resolve('🦄')); -//=> true - -pIsPromise('🦄'); -//=> false -``` - - -## Related - -- [More…](https://github.com/sindresorhus/promise-fun) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-limit/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/p-limit/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-limit/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-limit/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -'use strict'; -const pTry = require('p-try'); - -module.exports = concurrency => { - if (concurrency < 1) { - throw new TypeError('Expected `concurrency` to be a number from 1 and up'); - } - - const queue = []; - let activeCount = 0; - - const next = () => { - activeCount--; - - if (queue.length > 0) { - queue.shift()(); - } - }; - - return fn => new Promise((resolve, reject) => { - const run = () => { - activeCount++; - - pTry(() => fn()).then( - val => { - resolve(val); - next(); - }, - err => { - reject(err); - next(); - } - ); - }; - - if (activeCount < concurrency) { - run(); - } else { - queue.push(run); - } - }); -}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-limit/license nodejs-mozilla-12.22.12/deps/npm/node_modules/p-limit/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-limit/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-limit/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-limit/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/p-limit/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-limit/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-limit/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,81 +0,0 @@ -{ - "_from": "p-limit@^1.1.0", - "_id": "p-limit@1.2.0", - "_inBundle": false, - "_integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "_location": "/p-limit", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "p-limit@^1.1.0", - "name": "p-limit", - "escapedName": "p-limit", - "rawSpec": "^1.1.0", - "saveSpec": null, - "fetchSpec": "^1.1.0" - }, - "_requiredBy": [ - "/p-locate" - ], - "_resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "_shasum": "0e92b6bedcb59f022c13d0f1949dc82d15909f1c", - "_spec": "p-limit@^1.1.0", - "_where": "/Users/rebecca/code/npm/node_modules/p-locate", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/p-limit/issues" - }, - "bundleDependencies": false, - "dependencies": { - "p-try": "^1.0.0" - }, - "deprecated": false, - "description": "Run multiple promise-returning & async functions with limited concurrency", - "devDependencies": { - "ava": "*", - "delay": "^2.0.0", - "in-range": "^1.0.0", - "random-int": "^1.0.0", - "time-span": "^2.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/p-limit#readme", - "keywords": [ - "promise", - "limit", - "limited", - "concurrency", - "throttle", - "throat", - "rate", - "batch", - "ratelimit", - "task", - "queue", - "async", - "await", - "promises", - "bluebird" - ], - "license": "MIT", - "name": "p-limit", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/p-limit.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.2.0" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-limit/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/p-limit/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-limit/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-limit/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -# p-limit [![Build Status](https://travis-ci.org/sindresorhus/p-limit.svg?branch=master)](https://travis-ci.org/sindresorhus/p-limit) - -> Run multiple promise-returning & async functions with limited concurrency - - -## Install - -``` -$ npm install p-limit -``` - - -## Usage - -```js -const pLimit = require('p-limit'); - -const limit = pLimit(1); - -const input = [ - limit(() => fetchSomething('foo')), - limit(() => fetchSomething('bar')), - limit(() => doSomething()) -]; - -(async () => { - // Only one promise is run at once - const result = await Promise.all(input); - console.log(result); -})(); -``` - - -## API - -### pLimit(concurrency) - -Returns a `limit` function. - -#### concurrency - -Type: `number`
-Minimum: `1` - -Concurrency limit. - -### limit(fn) - -Returns the promise returned by calling `fn`. - -#### fn - -Type: `Function` - -Promise-returning/async function. - - -## Related - -- [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control -- [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning & async functions -- [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning & async functions -- [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency -- [More…](https://github.com/sindresorhus/promise-fun) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-locate/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/p-locate/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-locate/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-locate/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -'use strict'; -const pLimit = require('p-limit'); - -class EndError extends Error { - constructor(value) { - super(); - this.value = value; - } -} - -// the input can also be a promise, so we `Promise.all()` them both -const finder = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0]))); - -module.exports = (iterable, tester, opts) => { - opts = Object.assign({ - concurrency: Infinity, - preserveOrder: true - }, opts); - - const limit = pLimit(opts.concurrency); - - // start all the promises concurrently with optional limit - const items = Array.from(iterable).map(el => [el, limit(() => Promise.resolve(el).then(tester))]); - - // check the promises either serially or concurrently - const checkLimit = pLimit(opts.preserveOrder ? 1 : Infinity); - - return Promise.all(items.map(el => checkLimit(() => finder(el)))) - .then(() => {}) - .catch(err => err instanceof EndError ? err.value : Promise.reject(err)); -}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-locate/license nodejs-mozilla-12.22.12/deps/npm/node_modules/p-locate/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-locate/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-locate/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-locate/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/p-locate/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-locate/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-locate/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -{ - "_from": "p-locate@^2.0.0", - "_id": "p-locate@2.0.0", - "_inBundle": false, - "_integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "_location": "/p-locate", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "p-locate@^2.0.0", - "name": "p-locate", - "escapedName": "p-locate", - "rawSpec": "^2.0.0", - "saveSpec": null, - "fetchSpec": "^2.0.0" - }, - "_requiredBy": [ - "/locate-path" - ], - "_resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "_shasum": "20a0103b222a70c8fd39cc2e580680f3dde5ec43", - "_spec": "p-locate@^2.0.0", - "_where": "/Users/rebecca/code/npm/node_modules/locate-path", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/p-locate/issues" - }, - "bundleDependencies": false, - "dependencies": { - "p-limit": "^1.1.0" - }, - "deprecated": false, - "description": "Get the first fulfilled promise that satisfies the provided testing function", - "devDependencies": { - "ava": "*", - "delay": "^1.3.1", - "in-range": "^1.0.0", - "time-span": "^1.0.0", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/p-locate#readme", - "keywords": [ - "promise", - "locate", - "find", - "finder", - "search", - "searcher", - "test", - "array", - "collection", - "iterable", - "iterator", - "race", - "fulfilled", - "fastest", - "async", - "await", - "promises", - "bluebird" - ], - "license": "MIT", - "name": "p-locate", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/p-locate.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "2.0.0", - "xo": { - "esnext": true - } -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-locate/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/p-locate/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-locate/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-locate/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -# p-locate [![Build Status](https://travis-ci.org/sindresorhus/p-locate.svg?branch=master)](https://travis-ci.org/sindresorhus/p-locate) - -> Get the first fulfilled promise that satisfies the provided testing function - -Think of it like an async version of [`Array#find`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find). - - -## Install - -``` -$ npm install --save p-locate -``` - - -## Usage - -Here we find the first file that exists on disk, in array order. - -```js -const pathExists = require('path-exists'); -const pLocate = require('p-locate'); - -const files = [ - 'unicorn.png', - 'rainbow.png', // only this one actually exists on disk - 'pony.png' -]; - -pLocate(files, file => pathExists(file)).then(foundPath => { - console.log(foundPath); - //=> 'rainbow' -}); -``` - -*The above is just an example. Use [`locate-path`](https://github.com/sindresorhus/locate-path) if you need this.* - - -## API - -### pLocate(input, tester, [options]) - -Returns a `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`. - -#### input - -Type: `Iterable` - -#### tester(element) - -Type: `Function` - -Expected to return a `Promise` or boolean. - -#### options - -Type: `Object` - -##### concurrency - -Type: `number`
-Default: `Infinity`
-Minimum: `1` - -Number of concurrently pending promises returned by `tester`. - -##### preserveOrder - -Type: `boolean`
-Default: `true` - -Preserve `input` order when searching. - -Disable this to improve performance if you don't care about the order. - - -## Related - -- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently -- [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently -- [p-any](https://github.com/sindresorhus/p-any) - Wait for any promise to be fulfilled -- [More…](https://github.com/sindresorhus/promise-fun) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-try/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/p-try/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-try/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-try/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,4 +0,0 @@ -'use strict'; -module.exports = cb => new Promise(resolve => { - resolve(cb()); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-try/license nodejs-mozilla-12.22.12/deps/npm/node_modules/p-try/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-try/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-try/license 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-try/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/p-try/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-try/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-try/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +0,0 @@ -{ - "_from": "p-try@^1.0.0", - "_id": "p-try@1.0.0", - "_inBundle": false, - "_integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "_location": "/p-try", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "p-try@^1.0.0", - "name": "p-try", - "escapedName": "p-try", - "rawSpec": "^1.0.0", - "saveSpec": null, - "fetchSpec": "^1.0.0" - }, - "_requiredBy": [ - "/p-limit" - ], - "_resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "_shasum": "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3", - "_spec": "p-try@^1.0.0", - "_where": "/Users/rebecca/code/npm/node_modules/p-limit", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/p-try/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "`Promise#try()` ponyfill - Starts a promise chain", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "engines": { - "node": ">=4" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/sindresorhus/p-try#readme", - "keywords": [ - "promise", - "try", - "resolve", - "function", - "catch", - "async", - "await", - "promises", - "settled", - "ponyfill", - "polyfill", - "shim", - "bluebird" - ], - "license": "MIT", - "name": "p-try", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/p-try.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.0.0", - "xo": { - "esnext": true - } -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/p-try/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/p-try/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/p-try/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/p-try/readme.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -# p-try [![Build Status](https://travis-ci.org/sindresorhus/p-try.svg?branch=master)](https://travis-ci.org/sindresorhus/p-try) - -> [`Promise#try()`](https://github.com/ljharb/proposal-promise-try) [ponyfill](https://ponyfill.com) - Starts a promise chain - -[How is it useful?](http://cryto.net/~joepie91/blog/2016/05/11/what-is-promise-try-and-why-does-it-matter/) - - -## Install - -``` -$ npm install --save p-try -``` - - -## Usage - -```js -const pTry = require('p-try'); - -pTry(() => { - return synchronousFunctionThatMightThrow(); -}).then(value => { - console.log(value); -}).catch(error => { - console.error(error); -}); -``` - - -## Related - -- [p-finally](https://github.com/sindresorhus/p-finally) - `Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome -- [More…](https://github.com/sindresorhus/promise-fun) - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/example/parse.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/example/parse.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/example/parse.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/example/parse.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.log(argv); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,245 +0,0 @@ -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {}, unknownFn: null }; - - if (typeof opts['unknown'] === 'function') { - flags.unknownFn = opts['unknown']; - } - - if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { - flags.allBools = true; - } else { - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - } - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - flags.strings[aliases[key]] = true; - } - }); - - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } - - function argDefined(key, arg) { - return (flags.allBools && /^--[^=]+$/.test(arg)) || - flags.strings[key] || flags.bools[key] || aliases[key]; - } - - function setArg (key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) return; - } - - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - function setKey (obj, keys, value) { - var o = obj; - for (var i = 0; i < keys.length-1; i++) { - var key = keys[i]; - if (key === '__proto__') return; - if (o[key] === undefined) o[key] = {}; - if (o[key] === Object.prototype || o[key] === Number.prototype - || o[key] === String.prototype) o[key] = {}; - if (o[key] === Array.prototype) o[key] = []; - o = o[key]; - } - - var key = keys[keys.length - 1]; - if (key === '__proto__') return; - if (o === Object.prototype || o === Number.prototype - || o === String.prototype) o = {}; - if (o === Array.prototype) o = []; - if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } - } - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - var key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, next, arg); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next, arg) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { - setArg(letters[j], next.split('=')[1], arg); - broken = true; - break; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2), arg); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, args[i+1], arg); - i++; - } - else if (args[i+1] && /^(true|false)$/.test(args[i+1])) { - setArg(key, args[i+1] === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - } - else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - if (opts['--']) { - argv['--'] = new Array(); - notFlags.forEach(function(key) { - argv['--'].push(key); - }); - } - else { - notFlags.forEach(function(key) { - argv._.push(key); - }); - } - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} - diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/LICENSE 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/LICENSE 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -{ - "_from": "minimist@^1.2.0", - "_id": "minimist@1.2.5", - "_inBundle": false, - "_integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "_location": "/rc/minimist", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "minimist@^1.2.0", - "name": "minimist", - "escapedName": "minimist", - "rawSpec": "^1.2.0", - "saveSpec": null, - "fetchSpec": "^1.2.0" - }, - "_requiredBy": [ - "/rc" - ], - "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "_shasum": "67d66014b66a6a8aaa0c083c5fd58df4e4e97602", - "_spec": "minimist@^1.2.0", - "_where": "/Users/ruyadorno/Documents/workspace/cli/node_modules/rc", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/minimist/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "parse argument options", - "devDependencies": { - "covert": "^1.0.0", - "tap": "~0.4.0", - "tape": "^3.5.0" - }, - "homepage": "https://github.com/substack/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "license": "MIT", - "main": "index.js", - "name": "minimist", - "repository": { - "type": "git", - "url": "git://github.com/substack/minimist.git" - }, - "scripts": { - "coverage": "covert test/*.js", - "test": "tap test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ] - }, - "version": "1.2.5" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/readme.markdown nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/readme.markdown --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/readme.markdown 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/readme.markdown 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -# minimist - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.log(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ _: [ 'foo', 'bar', 'baz' ], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' } -``` - -# security - -Previous versions had a prototype pollution bug that could cause privilege -escalation in some circumstances when handling untrusted user input. - -Please use version 1.2.3 or later: https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a boolean, string or array of strings to always treat as -booleans. if `true` will treat all double hyphenated arguments without equal signs -as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values -* `opts.stopEarly` - when true, populate `argv._` with everything after the -first non-option -* `opts['--']` - when true, populate `argv._` with everything before the `--` -and `argv['--']` with everything after the `--`. Here's an example: - - ``` - > require('./')('one two three -- four five --six'.split(' '), { '--': true }) - { _: [ 'one', 'two', 'three' ], - '--': [ 'four', 'five', '--six' ] } - ``` - - Note that with `opts['--']` set, parsing for arguments still stops after the - `--`. - -* `opts.unknown` - a function which is invoked with a command line parameter not -defined in the `opts` configuration object. If the function returns `false`, the -unknown option is not added to `argv`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/all_bool.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/all_bool.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/all_bool.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/all_bool.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('flag boolean true (default all --args to boolean)', function (t) { - var argv = parse(['moo', '--honk', 'cow'], { - boolean: true - }); - - t.deepEqual(argv, { - honk: true, - _: ['moo', 'cow'] - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); - -test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { - var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { - boolean: true - }); - - t.deepEqual(argv, { - honk: true, - tacos: 'good', - p: 55, - _: ['moo', 'cow'] - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/bool.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/bool.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/bool.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/bool.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,178 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('flag boolean default false', function (t) { - var argv = parse(['moo'], { - boolean: ['t', 'verbose'], - default: { verbose: false, t: false } - }); - - t.deepEqual(argv, { - verbose: false, - t: false, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { - boolean: ['x','y','z'] - }); - - t.deepEqual(argv, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ] - }); - - t.deepEqual(typeof argv.x, 'boolean'); - t.deepEqual(typeof argv.y, 'boolean'); - t.deepEqual(typeof argv.z, 'boolean'); - t.end(); -}); -test('boolean and alias with chainable api', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = parse(aliased, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var propertyArgv = parse(regular, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - alias: { 'h': 'herp' }, - boolean: 'herp' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias array with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var alt = [ '--harp', 'derp' ]; - var opts = { - alias: { 'h': ['herp', 'harp'] }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var altPropertyArgv = parse(alt, opts); - var expected = { - harp: true, - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.same(altPropertyArgv, expected); - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = [ '-h', 'true' ]; - var regular = [ '--herp', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function(t) { - var parsed = parse(['--boool', '--other=true'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = parse(['--boool', '--other=false'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); - -test('boolean --boool=true', function (t) { - var parsed = parse(['--boool=true'], { - default: { - boool: false - }, - boolean: ['boool'] - }); - - t.same(parsed.boool, true); - t.end(); -}); - -test('boolean --boool=false', function (t) { - var parsed = parse(['--boool=false'], { - default: { - boool: true - }, - boolean: ['boool'] - }); - - t.same(parsed.boool, false); - t.end(); -}); - -test('boolean using something similar to true', function (t) { - var opts = { boolean: 'h' }; - var result = parse(['-h', 'true.txt'], opts); - var expected = { - h: true, - '_': ['true.txt'] - }; - - t.same(result, expected); - t.end(); -}); \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/dash.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/dash.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/dash.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/dash.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('-', function (t) { - t.plan(5); - t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); - t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); - t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); - t.deepEqual( - parse([ '-b', '-' ], { boolean: 'b' }), - { b: true, _: [ '-' ] } - ); - t.deepEqual( - parse([ '-s', '-' ], { string: 's' }), - { s: '-', _: [] } - ); -}); - -test('-a -- b', function (t) { - t.plan(3); - t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); -}); - -test('move arguments after the -- into their own `--` array', function(t) { - t.plan(1); - t.deepEqual( - parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }), - { name: 'John', _: [ 'before' ], '--': [ 'after' ] }); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/default_bool.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/default_bool.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/default_bool.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/default_bool.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('boolean default true', function (t) { - var argv = parse([], { - boolean: 'sometrue', - default: { sometrue: true } - }); - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = parse([], { - boolean: 'somefalse', - default: { somefalse: false } - }); - t.equal(argv.somefalse, false); - t.end(); -}); - -test('boolean default to null', function (t) { - var argv = parse([], { - boolean: 'maybe', - default: { maybe: null } - }); - t.equal(argv.maybe, null); - var argv = parse(['--maybe'], { - boolean: 'maybe', - default: { maybe: null } - }); - t.equal(argv.maybe, true); - t.end(); - -}) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/dotted.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/dotted.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/dotted.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/dotted.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('dotted alias', function (t) { - var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 22); - t.equal(argv.aa.bb, 22); - t.end(); -}); - -test('dotted default', function (t) { - var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 11); - t.equal(argv.aa.bb, 11); - t.end(); -}); - -test('dotted default with no alias', function (t) { - var argv = parse('', {default: {'a.b': 11}}); - t.equal(argv.a.b, 11); - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/kv_short.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/kv_short.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/kv_short.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/kv_short.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('short -k=v' , function (t) { - t.plan(1); - - var argv = parse([ '-b=123' ]); - t.deepEqual(argv, { b: 123, _: [] }); -}); - -test('multi short -k=v' , function (t) { - t.plan(1); - - var argv = parse([ '-a=whatever', '-b=robots' ]); - t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/long.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/long.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/long.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/long.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('long opts', function (t) { - t.deepEqual( - parse([ '--bool' ]), - { bool : true, _ : [] }, - 'long boolean' - ); - t.deepEqual( - parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture sp' - ); - t.deepEqual( - parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture eq' - ); - t.deepEqual( - parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures sp' - ); - t.deepEqual( - parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures eq' - ); - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/num.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/num.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/num.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/num.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('nums', function (t) { - var argv = parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789' - ]); - t.deepEqual(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ] - }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv.y, 'number'); - t.deepEqual(typeof argv.z, 'number'); - t.deepEqual(typeof argv.w, 'string'); - t.deepEqual(typeof argv.hex, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); - -test('already a number', function (t) { - var argv = parse([ '-x', 1234, 789 ]); - t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/parse.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/parse.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/parse.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/parse.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,197 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse args', function (t) { - t.deepEqual( - parse([ '--no-moo' ]), - { moo : false, _ : [] }, - 'no' - ); - t.deepEqual( - parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [] }, - 'multi' - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.deepEqual( - parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek' - ]), - { - c : true, - a : true, - t : true, - s : 'woo', - h : 'awesome', - b : true, - bool : true, - key : 'value', - multi : [ 'quux', 'baz' ], - meep : false, - name : 'meowmers', - _ : [ 'bare', '--not-a-flag', 'eek' ] - } - ); - t.end(); -}); - -test('flag boolean', function (t) { - var argv = parse([ '-t', 'moo' ], { boolean: 't' }); - t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { - boolean: [ 't', 'verbose' ], - default: { verbose: true } - }); - - t.deepEqual(argv, { - verbose: false, - t: true, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('newlines in params' , function (t) { - var args = parse([ '-s', "X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = parse([ "--s=X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - t.end(); -}); - -test('strings' , function (t) { - var s = parse([ '-s', '0001234' ], { string: 's' }).s; - t.equal(s, '0001234'); - t.equal(typeof s, 'string'); - - var x = parse([ '-x', '56' ], { string: 'x' }).x; - t.equal(x, '56'); - t.equal(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = parse([ ' ', ' ' ], { string: '_' })._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('empty strings', function(t) { - var s = parse([ '-s' ], { string: 's' }).s; - t.equal(s, ''); - t.equal(typeof s, 'string'); - - var str = parse([ '--str' ], { string: 'str' }).str; - t.equal(str, ''); - t.equal(typeof str, 'string'); - - var letters = parse([ '-art' ], { - string: [ 'a', 't' ] - }); - - t.equal(letters.a, ''); - t.equal(letters.r, true); - t.equal(letters.t, ''); - - t.end(); -}); - - -test('string and alias', function(t) { - var x = parse([ '--str', '000123' ], { - string: 's', - alias: { s: 'str' } - }); - - t.equal(x.str, '000123'); - t.equal(typeof x.str, 'string'); - t.equal(x.s, '000123'); - t.equal(typeof x.s, 'string'); - - var y = parse([ '-s', '000123' ], { - string: 'str', - alias: { str: 's' } - }); - - t.equal(y.str, '000123'); - t.equal(typeof y.str, 'string'); - t.equal(y.s, '000123'); - t.equal(typeof y.s, 'string'); - t.end(); -}); - -test('slashBreak', function (t) { - t.same( - parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [] } - ); - t.same( - parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [] } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: 'zoom' } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: [ 'zm', 'zoom' ] } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = parse([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop' - ]); - - t.same(argv.foo, { - bar : 3, - baz : 4, - quux : { - quibble : 5, - o_O : true - } - }); - t.same(argv.beep, { boop : true }); - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/parse_modified.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/parse_modified.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/parse_modified.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/parse_modified.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse with modifier functions' , function (t) { - t.plan(1); - - var argv = parse([ '-b', '123' ], { boolean: 'b' }); - t.deepEqual(argv, { b: true, _: [123] }); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/proto.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/proto.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/proto.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/proto.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('proto pollution', function (t) { - var argv = parse(['--__proto__.x','123']); - t.equal({}.x, undefined); - t.equal(argv.__proto__.x, undefined); - t.equal(argv.x, undefined); - t.end(); -}); - -test('proto pollution (array)', function (t) { - var argv = parse(['--x','4','--x','5','--x.__proto__.z','789']); - t.equal({}.z, undefined); - t.deepEqual(argv.x, [4,5]); - t.equal(argv.x.z, undefined); - t.equal(argv.x.__proto__.z, undefined); - t.end(); -}); - -test('proto pollution (number)', function (t) { - var argv = parse(['--x','5','--x.__proto__.z','100']); - t.equal({}.z, undefined); - t.equal((4).z, undefined); - t.equal(argv.x, 5); - t.equal(argv.x.z, undefined); - t.end(); -}); - -test('proto pollution (string)', function (t) { - var argv = parse(['--x','abc','--x.__proto__.z','def']); - t.equal({}.z, undefined); - t.equal('...'.z, undefined); - t.equal(argv.x, 'abc'); - t.equal(argv.x.z, undefined); - t.end(); -}); - -test('proto pollution (constructor)', function (t) { - var argv = parse(['--constructor.prototype.y','123']); - t.equal({}.y, undefined); - t.equal(argv.y, undefined); - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/short.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/short.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/short.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/short.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('numeric short args', function (t) { - t.plan(2); - t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); - t.deepEqual( - parse([ '-123', '456' ]), - { 1: true, 2: true, 3: 456, _: [] } - ); -}); - -test('short', function (t) { - t.deepEqual( - parse([ '-b' ]), - { b : true, _ : [] }, - 'short boolean' - ); - t.deepEqual( - parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ] }, - 'bare' - ); - t.deepEqual( - parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [] }, - 'group' - ); - t.deepEqual( - parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [] }, - 'short group next' - ); - t.deepEqual( - parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [] }, - 'short capture' - ); - t.deepEqual( - parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [] }, - 'short captures' - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.deepEqual( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/stop_early.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/stop_early.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/stop_early.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/stop_early.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('stops parsing on the first non-option when stopEarly is set', function (t) { - var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { - stopEarly: true - }); - - t.deepEqual(argv, { - aaa: 'bbb', - _: ['ccc', '--ddd'] - }); - - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/unknown.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/unknown.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/unknown.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/unknown.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,102 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('boolean and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'true', '--derp', 'true' ]; - var regular = [ '--herp', 'true', '-d', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h', - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('flag boolean true any double hyphen argument is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { - boolean: true, - unknown: unknownFn - }); - t.same(unknown, ['--tacos=good', 'cow', '-p']); - t.same(argv, { - honk: true, - _: [] - }); - t.end(); -}); - -test('string and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'hello', '--derp', 'goodbye' ]; - var regular = [ '--herp', 'hello', '-d', 'moon' ]; - var opts = { - alias: { h: 'herp' }, - string: 'h', - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('default and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'hello' ]; - var regular = [ '--herp', 'hello' ]; - var opts = { - default: { 'h': 'bar' }, - alias: { 'h': 'herp' }, - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, []); - t.end(); - unknownFn(); // exercise fn for 100% coverage -}); - -test('value following -- is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '--bad', '--', 'good', 'arg' ]; - var opts = { - '--': true, - unknown: unknownFn - }; - var argv = parse(aliased, opts); - - t.same(unknown, ['--bad']); - t.same(argv, { - '--': ['good', 'arg'], - '_': [] - }) - t.end(); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/whitespace.js nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/whitespace.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/test/whitespace.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/test/whitespace.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('whitespace should be whitespace' , function (t) { - t.plan(1); - var x = parse([ '-x', '\t' ]).x; - t.equal(x, '\t'); -}); diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/.travis.yml nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/.travis.yml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/rc/node_modules/minimist/.travis.yml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/rc/node_modules/minimist/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.12" - - "iojs" -before_install: - - npm install -g npm@~1.4.6 diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/CHANGELOG.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,26 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + + +# [2.0.0](https://github.com/yargs/require-main-filename/compare/v1.0.2...v2.0.0) (2019-01-28) + + +### Chores + +* drop support for Node 0.10 ([#11](https://github.com/yargs/require-main-filename/issues/11)) ([87f4e13](https://github.com/yargs/require-main-filename/commit/87f4e13)) + + +### BREAKING CHANGES + +* drop support for Node 0.10/0.12 + + + + +## [1.0.2](https://github.com/yargs/require-main-filename/compare/v1.0.1...v1.0.2) (2017-06-16) + + +### Bug Fixes + +* add files to package.json ([#4](https://github.com/yargs/require-main-filename/issues/4)) ([fa29988](https://github.com/yargs/require-main-filename/commit/fa29988)) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/.npmignore nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/.npmignore --- nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/.npmignore 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/.npmignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -node_modules -.DS_Store -.nyc_output diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,27 +1,27 @@ { - "_from": "require-main-filename@^1.0.1", - "_id": "require-main-filename@1.0.1", + "_from": "require-main-filename@^2.0.0", + "_id": "require-main-filename@2.0.0", "_inBundle": false, - "_integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "_integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "_location": "/require-main-filename", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "require-main-filename@^1.0.1", + "raw": "require-main-filename@^2.0.0", "name": "require-main-filename", "escapedName": "require-main-filename", - "rawSpec": "^1.0.1", + "rawSpec": "^2.0.0", "saveSpec": null, - "fetchSpec": "^1.0.1" + "fetchSpec": "^2.0.0" }, "_requiredBy": [ "/yargs" ], - "_resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "_shasum": "97f717b69d48784f5f526a6c5aa8ffdda055a4d1", - "_spec": "require-main-filename@^1.0.1", - "_where": "/Users/rebecca/code/npm/node_modules/yargs", + "_resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "_shasum": "d0b329ecc7cc0f61649f62215be69af54aa8989b", + "_spec": "require-main-filename@^2.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs", "author": { "name": "Ben Coe", "email": "ben@npmjs.com" @@ -33,10 +33,14 @@ "deprecated": false, "description": "shim for require.main.filename() that works in as many environments as possible", "devDependencies": { - "chai": "^3.5.0", - "standard": "^6.0.5", - "tap": "^5.2.0" + "chai": "^4.0.0", + "standard": "^10.0.3", + "standard-version": "^4.0.0", + "tap": "^11.0.0" }, + "files": [ + "index.js" + ], "homepage": "https://github.com/yargs/require-main-filename#readme", "keywords": [ "require", @@ -52,7 +56,8 @@ }, "scripts": { "pretest": "standard", + "release": "standard-version", "test": "tap --coverage test.js" }, - "version": "1.0.1" + "version": "2.0.0" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/test.js nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/test.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/test.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/test.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -/* global describe, it */ - -var requireMainFilename = require('./') - -require('tap').mochaGlobals() -require('chai').should() - -describe('require-main-filename', function () { - it('returns require.main.filename in normal circumstances', function () { - requireMainFilename().should.match(/test\.js/) - }) - - it('should use children[0].filename when running on iisnode', function () { - var main = { - filename: 'D:\\Program Files (x86)\\iisnode\\interceptor.js', - children: [ {filename: 'D:\\home\\site\\wwwroot\\server.js'} ] - } - requireMainFilename({ - main: main - }).should.match(/server\.js/) - }) - - it('should not use children[0] if no children exist', function () { - var main = { - filename: 'D:\\Program Files (x86)\\iisnode\\interceptor.js', - children: [] - } - requireMainFilename({ - main: main - }).should.match(/interceptor\.js/) - }) - - it('should default to process.cwd() if require.main is undefined', function () { - requireMainFilename({}).should.match(/require-main-filename/) - }) -}) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/.travis.yml nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/.travis.yml --- nodejs-mozilla-12.18.1/deps/npm/node_modules/require-main-filename/.travis.yml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/require-main-filename/.travis.yml 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -language: node_js -os: - - linux -node_js: - - "0.10" - - "0.12" - - "4.1" - - "node" diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/spdx-license-ids/index.json nodejs-mozilla-12.22.12/deps/npm/node_modules/spdx-license-ids/index.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/spdx-license-ids/index.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/spdx-license-ids/index.json 2022-04-05 07:17:00.000000000 +0000 @@ -45,6 +45,7 @@ "BSD-3-Clause-No-Nuclear-License", "BSD-3-Clause-No-Nuclear-License-2014", "BSD-3-Clause-No-Nuclear-Warranty", + "BSD-3-Clause-Open-MPI", "BSD-4-Clause", "BSD-4-Clause-UC", "BSD-Protection", @@ -55,6 +56,7 @@ "Beerware", "BitTorrent-1.0", "BitTorrent-1.1", + "BlueOak-1.0.0", "Borceux", "CATOSL-1.1", "CC-BY-1.0", @@ -87,6 +89,7 @@ "CC-BY-SA-2.5", "CC-BY-SA-3.0", "CC-BY-SA-4.0", + "CC-PDDC", "CC0-1.0", "CDDL-1.0", "CDDL-1.1", @@ -98,6 +101,8 @@ "CECILL-2.1", "CECILL-B", "CECILL-C", + "CERN-OHL-1.1", + "CERN-OHL-1.2", "CNRI-Jython", "CNRI-Python", "CNRI-Python-GPL-Compatible", @@ -152,6 +157,7 @@ "Glide", "Glulxe", "HPND", + "HPND-sell-variant", "HaskellReport", "IBM-pibs", "ICU", @@ -165,6 +171,7 @@ "Intel", "Intel-ACPI", "Interbase-1.0", + "JPNIC", "JSON", "JasPer-2.0", "LAL-1.2", @@ -265,6 +272,7 @@ "PDDL-1.0", "PHP-3.0", "PHP-3.01", + "Parity-6.0.0", "Plexus", "PostgreSQL", "Python-2.0", @@ -283,12 +291,15 @@ "SGI-B-1.0", "SGI-B-1.1", "SGI-B-2.0", + "SHL-0.5", + "SHL-0.51", "SISSL", "SISSL-1.2", "SMLNJ", "SMPPL", "SNIA", "SPL-1.0", + "SSPL-1.0", "SWL", "Saxpath", "Sendmail", @@ -299,6 +310,7 @@ "Spencer-94", "Spencer-99", "SugarCRM-1.1.3", + "TAPR-OHL-1.0", "TCL", "TCP-wrappers", "TMate", @@ -335,6 +347,7 @@ "Zimbra-1.3", "Zimbra-1.4", "Zlib", + "blessing", "bzip2-1.0.5", "bzip2-1.0.6", "copyleft-next-0.3.0", @@ -346,6 +359,7 @@ "gSOAP-1.3b", "gnuplot", "iMatix", + "libpng-2.0", "libtiff", "mpich2", "psfrag", diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/spdx-license-ids/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/spdx-license-ids/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/spdx-license-ids/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/spdx-license-ids/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,19 +1,19 @@ { - "_from": "spdx-license-ids@3.0.3", - "_id": "spdx-license-ids@3.0.3", + "_from": "spdx-license-ids@3.0.5", + "_id": "spdx-license-ids@3.0.5", "_inBundle": false, - "_integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "_integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "_location": "/spdx-license-ids", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "spdx-license-ids@3.0.3", + "raw": "spdx-license-ids@3.0.5", "name": "spdx-license-ids", "escapedName": "spdx-license-ids", - "rawSpec": "3.0.3", + "rawSpec": "3.0.5", "saveSpec": null, - "fetchSpec": "3.0.3" + "fetchSpec": "3.0.5" }, "_requiredBy": [ "#USER", @@ -21,10 +21,10 @@ "/spdx-correct", "/spdx-expression-parse" ], - "_resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "_shasum": "81c0ce8f21474756148bbb5f3bfc0f36bf15d76e", - "_spec": "spdx-license-ids@3.0.3", - "_where": "/Users/zkat/Documents/code/work/npm", + "_resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "_shasum": "3694b5804567a458d3c8045842a6358632f62654", + "_spec": "spdx-license-ids@3.0.5", + "_where": "/home/kyle/cli", "author": { "name": "Shinnosuke Watanabe", "url": "https://github.com/shinnn" @@ -73,5 +73,5 @@ "pretest": "eslint .", "test": "node test.js" }, - "version": "3.0.3" + "version": "3.0.5" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/spdx-license-ids/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/spdx-license-ids/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/spdx-license-ids/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/spdx-license-ids/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,13 +1,13 @@ # spdx-license-ids -[![npm version](https://img.shields.io/npm/v/spdx-license-ids.svg)](https://www.npmjs.org/package/spdx-license-ids) -[![Build Status](https://travis-ci.org/shinnn/spdx-license-ids.svg?branch=master)](https://travis-ci.org/shinnn/spdx-license-ids) +[![npm version](https://img.shields.io/npm/v/spdx-license-ids.svg)](https://www.npmjs.com/package/spdx-license-ids) +[![Github Actions](https://action-badges.now.sh/shinnn/spdx-license-ids)](https://wdp9fww0r9.execute-api.us-west-2.amazonaws.com/production/results/shinnn/spdx-license-ids) A list of [SPDX license](https://spdx.org/licenses/) identifiers ## Installation -[Download JSON directly](https://raw.githubusercontent.com/shinnn/spdx-license-ids/master/index.json), or [use](https://docs.npmjs.com/cli/install) [npm](https://docs.npmjs.com/getting-started/what-is-npm): +[Download JSON directly](https://raw.githubusercontent.com/shinnn/spdx-license-ids/master/index.json), or [use](https://docs.npmjs.com/cli/install) [npm](https://docs.npmjs.com/about-npm/): ``` npm install spdx-license-ids @@ -17,13 +17,13 @@ ### require('spdx-license-ids') -Type: `>` +Type: `string[]` All license IDs except for the currently deprecated ones. ```javascript const ids = require('spdx-license-ids'); -//=> ['0BSD', 'AAL', 'Abstyles', 'Adobe-2006', 'Adobe-Glyph', 'ADSL', 'AFL-1.1', 'AFL-1.2', ...] +//=> ['0BSD', 'AAL', 'ADSL', 'AFL-1.1', 'AFL-1.2', 'AFL-2.0', 'AFL-2.1', 'AFL-3.0', 'AGPL-1.0-only', ...] ids.includes('BSD-3-Clause'); //=> true ids.includes('CC-BY-1.0'); //=> true @@ -33,13 +33,13 @@ ### require('spdx-license-ids/deprecated') -Type: `>` +Type: `string[]` Deprecated license IDs. ```javascript const deprecatedIds = require('spdx-license-ids/deprecated'); -//=> ['AGPL-1.0', 'AGPL-3.0', 'eCos-2.0', 'GFDL-1.1', 'GFDL-1.2', 'GFDL-1.3', 'GPL-1.0', ...] +//=> ['AGPL-1.0', 'AGPL-3.0', 'GFDL-1.1', 'GFDL-1.2', 'GFDL-1.3', 'GPL-1.0', 'GPL-2.0', ...] deprecatedIds.includes('BSD-3-Clause'); //=> false deprecatedIds.includes('CC-BY-1.0'); //=> false diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/ssri/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/ssri/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/ssri/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/ssri/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,6 +2,16 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [6.0.2](https://github.com/zkat/ssri/compare/v6.0.1...v6.0.2) (2021-04-07) + + +### Bug Fixes + +* backport regex change from 8.0.1 ([b30dfdb](https://github.com/zkat/ssri/commit/b30dfdb)), closes [#19](https://github.com/zkat/ssri/issues/19) + + + ## [6.0.1](https://github.com/zkat/ssri/compare/v6.0.0...v6.0.1) (2018-08-27) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/ssri/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/ssri/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/ssri/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/ssri/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -8,7 +8,7 @@ const BASE64_REGEX = /^[a-z0-9+/]+(?:=?=?)$/i const SRI_REGEX = /^([^-]+)-([^?]+)([?\S*]*)$/ -const STRICT_SRI_REGEX = /^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)*$/ +const STRICT_SRI_REGEX = /^([^-]+)-([A-Za-z0-9+/=]{44,88})(\?[\x21-\x7E]*)?$/ const VCHAR_REGEX = /^[\x21-\x7E]+$/ const SsriOpts = figgyPudding({ diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/ssri/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/ssri/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/ssri/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/ssri/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,31 +1,32 @@ { - "_from": "ssri@latest", - "_id": "ssri@6.0.1", + "_from": "ssri@6.0.2", + "_id": "ssri@6.0.2", "_inBundle": false, - "_integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "_integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "_location": "/ssri", "_phantomChildren": {}, "_requested": { - "type": "tag", + "type": "version", "registry": true, - "raw": "ssri@latest", + "raw": "ssri@6.0.2", "name": "ssri", "escapedName": "ssri", - "rawSpec": "latest", + "rawSpec": "6.0.2", "saveSpec": null, - "fetchSpec": "latest" + "fetchSpec": "6.0.2" }, "_requiredBy": [ "#USER", "/", "/cacache", + "/libnpmpublish", "/make-fetch-happen", "/pacote" ], - "_resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "_shasum": "2a3c41b28dd45b62b63676ecb74001265ae9edd8", - "_spec": "ssri@latest", - "_where": "/Users/zkat/Documents/code/work/npm", + "_resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "_shasum": "157939134f20464e7301ddba3e90ffa8f7728ac5", + "_spec": "ssri@6.0.2", + "_where": "/Users/ruyadorno/Documents/workspace/cli/legacy", "author": { "name": "Kat Marchán", "email": "kzm@sykosomatic.org" @@ -89,5 +90,5 @@ "update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'", "update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'" }, - "version": "6.0.1" + "version": "6.0.2" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/extract.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/extract.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/extract.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/extract.js 2022-04-05 07:17:00.000000000 +0000 @@ -6,6 +6,7 @@ const fs = require('fs') const fsm = require('fs-minipass') const path = require('path') +const stripSlash = require('./strip-trailing-slashes.js') const x = module.exports = (opt_, files, cb) => { if (typeof opt_ === 'function') @@ -41,7 +42,7 @@ // construct a filter that limits the file entries listed // include child entries if a dir is included const filesFilter = (opt, files) => { - const map = new Map(files.map(f => [f.replace(/\/+$/, ''), true])) + const map = new Map(files.map(f => [stripSlash(f), true])) const filter = opt.filter const mapHas = (file, r) => { @@ -55,8 +56,8 @@ } opt.filter = filter - ? (file, entry) => filter(file, entry) && mapHas(file.replace(/\/+$/, '')) - : file => mapHas(file.replace(/\/+$/, '')) + ? (file, entry) => filter(file, entry) && mapHas(stripSlash(file)) + : file => mapHas(stripSlash(file)) } const extractFileSync = opt => { diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/list.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/list.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/list.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/list.js 2022-04-05 07:17:00.000000000 +0000 @@ -11,6 +11,7 @@ const fs = require('fs') const fsm = require('fs-minipass') const path = require('path') +const stripSlash = require('./strip-trailing-slashes.js') const t = module.exports = (opt_, files, cb) => { if (typeof opt_ === 'function') @@ -56,7 +57,7 @@ // construct a filter that limits the file entries listed // include child entries if a dir is included const filesFilter = (opt, files) => { - const map = new Map(files.map(f => [f.replace(/\/+$/, ''), true])) + const map = new Map(files.map(f => [stripSlash(f), true])) const filter = opt.filter const mapHas = (file, r) => { @@ -70,8 +71,8 @@ } opt.filter = filter - ? (file, entry) => filter(file, entry) && mapHas(file.replace(/\/+$/, '')) - : file => mapHas(file.replace(/\/+$/, '')) + ? (file, entry) => filter(file, entry) && mapHas(stripSlash(file)) + : file => mapHas(stripSlash(file)) } const listFileSync = opt => { diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/mkdir.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/mkdir.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/mkdir.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/mkdir.js 2022-04-05 07:17:00.000000000 +0000 @@ -8,6 +8,7 @@ const fs = require('fs') const path = require('path') const chownr = require('chownr') +const normPath = require('./normalize-windows-path.js') class SymlinkError extends Error { constructor (symlink, path) { @@ -33,7 +34,20 @@ } } -const mkdir = module.exports = (dir, opt, cb) => { +const cGet = (cache, key) => cache.get(normPath(key)) +const cSet = (cache, key, val) => cache.set(normPath(key), val) + +const checkCwd = (dir, cb) => { + fs.stat(dir, (er, st) => { + if (er || !st.isDirectory()) + er = new CwdError(dir, er && er.code || 'ENOTDIR') + cb(er) + }) +} + +module.exports = (dir, opt, cb) => { + dir = normPath(dir) + // if there's any overlap between mask and mode, // then we'll need an explicit chmod const umask = opt.umask @@ -49,13 +63,13 @@ const preserve = opt.preserve const unlink = opt.unlink const cache = opt.cache - const cwd = opt.cwd + const cwd = normPath(opt.cwd) const done = (er, created) => { if (er) cb(er) else { - cache.set(dir, true) + cSet(cache, dir, true) if (created && doChown) chownr(created, uid, gid, er => done(er)) else if (needChmod) @@ -65,21 +79,17 @@ } } - if (cache && cache.get(dir) === true) + if (cache && cGet(cache, dir) === true) return done() if (dir === cwd) - return fs.stat(dir, (er, st) => { - if (er || !st.isDirectory()) - er = new CwdError(dir, er && er.code || 'ENOTDIR') - done(er) - }) + return checkCwd(dir, done) if (preserve) return mkdirp(dir, mode, done) - const sub = path.relative(cwd, dir) - const parts = sub.split(/\/|\\/) + const sub = normPath(path.relative(cwd, dir)) + const parts = sub.split('/') mkdir_(cwd, parts, mode, cache, unlink, cwd, null, done) } @@ -87,22 +97,19 @@ if (!parts.length) return cb(null, created) const p = parts.shift() - const part = base + '/' + p - if (cache.get(part)) + const part = normPath(path.resolve(base + '/' + p)) + if (cGet(cache, part)) return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) } const onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => er => { if (er) { - if (er.path && path.dirname(er.path) === cwd && - (er.code === 'ENOTDIR' || er.code === 'ENOENT')) - return cb(new CwdError(cwd, er.code)) - fs.lstat(part, (statEr, st) => { - if (statEr) + if (statEr) { + statEr.path = statEr.path && normPath(statEr.path) cb(statEr) - else if (st.isDirectory()) + } else if (st.isDirectory()) mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) else if (unlink) fs.unlink(part, er => { @@ -121,7 +128,21 @@ } } -const mkdirSync = module.exports.sync = (dir, opt) => { +const checkCwdSync = dir => { + let ok = false + let code = 'ENOTDIR' + try { + ok = fs.statSync(dir).isDirectory() + } catch (er) { + code = er.code + } finally { + if (!ok) + throw new CwdError(dir, code) + } +} + +module.exports.sync = (dir, opt) => { + dir = normPath(dir) // if there's any overlap between mask and mode, // then we'll need an explicit chmod const umask = opt.umask @@ -137,65 +158,51 @@ const preserve = opt.preserve const unlink = opt.unlink const cache = opt.cache - const cwd = opt.cwd + const cwd = normPath(opt.cwd) const done = (created) => { - cache.set(dir, true) + cSet(cache, dir, true) if (created && doChown) chownr.sync(created, uid, gid) if (needChmod) fs.chmodSync(dir, mode) } - if (cache && cache.get(dir) === true) + if (cache && cGet(cache, dir) === true) return done() if (dir === cwd) { - let ok = false - let code = 'ENOTDIR' - try { - ok = fs.statSync(dir).isDirectory() - } catch (er) { - code = er.code - } finally { - if (!ok) - throw new CwdError(dir, code) - } - done() - return + checkCwdSync(cwd) + return done() } if (preserve) return done(mkdirp.sync(dir, mode)) - const sub = path.relative(cwd, dir) - const parts = sub.split(/\/|\\/) + const sub = normPath(path.relative(cwd, dir)) + const parts = sub.split('/') let created = null for (let p = parts.shift(), part = cwd; - p && (part += '/' + p); - p = parts.shift()) { - - if (cache.get(part)) + p && (part += '/' + p); + p = parts.shift()) { + part = normPath(path.resolve(part)) + if (cGet(cache, part)) continue try { fs.mkdirSync(part, mode) created = created || part - cache.set(part, true) + cSet(cache, part, true) } catch (er) { - if (er.path && path.dirname(er.path) === cwd && - (er.code === 'ENOTDIR' || er.code === 'ENOENT')) - return new CwdError(cwd, er.code) - const st = fs.lstatSync(part) if (st.isDirectory()) { - cache.set(part, true) + cSet(cache, part, true) continue } else if (unlink) { fs.unlinkSync(part) fs.mkdirSync(part, mode) created = created || part - cache.set(part, true) + cSet(cache, part, true) continue } else if (st.isSymbolicLink()) return new SymlinkError(part, part + '/' + parts.join('/')) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/normalize-windows-path.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/normalize-windows-path.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/normalize-windows-path.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/normalize-windows-path.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,8 @@ +// on windows, either \ or / are valid directory separators. +// on unix, \ is a valid character in filenames. +// so, on windows, and only on windows, we replace all \ chars with /, +// so that we can use / as our one and only directory separator char. + +const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform +module.exports = platform !== 'win32' ? p => p + : p => p && p.replace(/\\/g, '/') diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/pack.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/pack.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/pack.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/pack.js 2022-04-05 07:17:00.000000000 +0000 @@ -56,6 +56,7 @@ const fs = require('fs') const path = require('path') const warner = require('./warn-mixin.js') +const normPath = require('./normalize-windows-path.js') const Pack = warner(class Pack extends MiniPass { constructor (opt) { @@ -67,7 +68,7 @@ this.preservePaths = !!opt.preservePaths this.strict = !!opt.strict this.noPax = !!opt.noPax - this.prefix = (opt.prefix || '').replace(/(\\|\/)+$/, '') + this.prefix = normPath(opt.prefix || '') this.linkCache = opt.linkCache || new Map() this.statCache = opt.statCache || new Map() this.readdirCache = opt.readdirCache || new Map() @@ -132,10 +133,7 @@ } [ADDTARENTRY] (p) { - const absolute = path.resolve(this.cwd, p.path) - if (this.prefix) - p.path = this.prefix + '/' + p.path.replace(/^\.(\/+|$)/, '') - + const absolute = normPath(path.resolve(this.cwd, p.path)) // in this case, we don't have to wait for the stat if (!this.filter(p.path, p)) p.resume() @@ -151,10 +149,7 @@ } [ADDFSENTRY] (p) { - const absolute = path.resolve(this.cwd, p) - if (this.prefix) - p = this.prefix + '/' + p.replace(/^\.(\/+|$)/, '') - + const absolute = normPath(path.resolve(this.cwd, p)) this[QUEUE].push(new PackJob(p, absolute)) this[PROCESS]() } @@ -298,7 +293,8 @@ linkCache: this.linkCache, statCache: this.statCache, noMtime: this.noMtime, - mtime: this.mtime + mtime: this.mtime, + prefix: this.prefix, } } @@ -324,10 +320,7 @@ if (job.readdir) job.readdir.forEach(entry => { - const p = this.prefix ? - job.path.slice(this.prefix.length + 1) || './' - : job.path - + const p = job.path const base = p === './' ? '' : p.replace(/\/*$/, '/') this[ADDFSENTRY](base + entry) }) @@ -380,10 +373,7 @@ if (job.readdir) job.readdir.forEach(entry => { - const p = this.prefix ? - job.path.slice(this.prefix.length + 1) || './' - : job.path - + const p = job.path const base = p === './' ? '' : p.replace(/\/*$/, '/') this[ADDFSENTRY](base + entry) }) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/path-reservations.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/path-reservations.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/path-reservations.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/path-reservations.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,149 @@ +// A path exclusive reservation system +// reserve([list, of, paths], fn) +// When the fn is first in line for all its paths, it +// is called with a cb that clears the reservation. +// +// Used by async unpack to avoid clobbering paths in use, +// while still allowing maximal safe parallelization. + +const assert = require('assert') +const normPath = require('./normalize-windows-path.js') +const stripSlashes = require('./strip-trailing-slashes.js') +const { join } = require('path') + +const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform +const isWindows = platform === 'win32' + +module.exports = () => { + // path => [function or Set] + // A Set object means a directory reservation + // A fn is a direct reservation on that path + const queues = new Map() + + // fn => {paths:[path,...], dirs:[path, ...]} + const reservations = new Map() + + // return a set of parent dirs for a given path + // '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d'] + const getDirs = path => { + const dirs = path.split('/').slice(0, -1).reduce((set, path) => { + if (set.length) + path = normPath(join(set[set.length - 1], path)) + set.push(path || '/') + return set + }, []) + return dirs + } + + // functions currently running + const running = new Set() + + // return the queues for each path the function cares about + // fn => {paths, dirs} + const getQueues = fn => { + const res = reservations.get(fn) + /* istanbul ignore if - unpossible */ + if (!res) + throw new Error('function does not have any path reservations') + return { + paths: res.paths.map(path => queues.get(path)), + dirs: [...res.dirs].map(path => queues.get(path)), + } + } + + // check if fn is first in line for all its paths, and is + // included in the first set for all its dir queues + const check = fn => { + const {paths, dirs} = getQueues(fn) + return paths.every(q => q[0] === fn) && + dirs.every(q => q[0] instanceof Set && q[0].has(fn)) + } + + // run the function if it's first in line and not already running + const run = fn => { + if (running.has(fn) || !check(fn)) + return false + running.add(fn) + fn(() => clear(fn)) + return true + } + + const clear = fn => { + if (!running.has(fn)) + return false + + const { paths, dirs } = reservations.get(fn) + const next = new Set() + + paths.forEach(path => { + const q = queues.get(path) + assert.equal(q[0], fn) + if (q.length === 1) + queues.delete(path) + else { + q.shift() + if (typeof q[0] === 'function') + next.add(q[0]) + else + q[0].forEach(fn => next.add(fn)) + } + }) + + dirs.forEach(dir => { + const q = queues.get(dir) + assert(q[0] instanceof Set) + if (q[0].size === 1 && q.length === 1) { + queues.delete(dir) + } else if (q[0].size === 1) { + q.shift() + + // must be a function or else the Set would've been reused + next.add(q[0]) + } else + q[0].delete(fn) + }) + running.delete(fn) + + next.forEach(fn => run(fn)) + return true + } + + const reserve = (paths, fn) => { + // collide on matches across case and unicode normalization + // On windows, thanks to the magic of 8.3 shortnames, it is fundamentally + // impossible to determine whether two paths refer to the same thing on + // disk, without asking the kernel for a shortname. + // So, we just pretend that every path matches every other path here, + // effectively removing all parallelization on windows. + paths = isWindows ? ['win32 parallelization disabled'] : paths.map(p => { + return stripSlashes(normPath(join(p))) + .normalize('NFKD') + .toLowerCase() + }) + + const dirs = new Set( + paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)) + ) + reservations.set(fn, {dirs, paths}) + paths.forEach(path => { + const q = queues.get(path) + if (!q) + queues.set(path, [fn]) + else + q.push(fn) + }) + dirs.forEach(dir => { + const q = queues.get(dir) + if (!q) + queues.set(dir, [new Set([fn])]) + else if (q[q.length-1] instanceof Set) + q[q.length-1].add(fn) + else + q.push(new Set([fn])) + }) + + return run(fn) + } + + return { check, reserve } +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/read-entry.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/read-entry.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/read-entry.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/read-entry.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,7 @@ 'use strict' const types = require('./types.js') const MiniPass = require('minipass') +const normPath = require('./normalize-windows-path.js') const SLURP = Symbol('slurp') module.exports = class ReadEntry extends MiniPass { @@ -47,7 +48,7 @@ this.ignore = true } - this.path = header.path + this.path = normPath(header.path) this.mode = header.mode if (this.mode) this.mode = this.mode & 0o7777 @@ -59,7 +60,7 @@ this.mtime = header.mtime this.atime = header.atime this.ctime = header.ctime - this.linkpath = header.linkpath + this.linkpath = normPath(header.linkpath) this.uname = header.uname this.gname = header.gname @@ -92,7 +93,7 @@ // a global extended header, because that's weird. if (ex[k] !== null && ex[k] !== undefined && !(global && k === 'path')) - this[k] = ex[k] + this[k] = k === 'path' || k === 'linkpath' ? normPath(ex[k]) : ex[k] } } } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/replace.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/replace.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/replace.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/replace.js 2022-04-05 07:17:00.000000000 +0000 @@ -168,7 +168,8 @@ fs.fstat(fd, (er, st) => { if (er) - return reject(er) + return fs.close(fd, () => reject(er)) + getPos(fd, st.size, (er, position) => { if (er) return reject(er) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/strip-absolute-path.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/strip-absolute-path.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/strip-absolute-path.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/strip-absolute-path.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,24 @@ +// unix absolute paths are also absolute on win32, so we use this for both +const { isAbsolute, parse } = require('path').win32 + +// returns [root, stripped] +// Note that windows will think that //x/y/z/a has a "root" of //x/y, and in +// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip / +// explicitly if it's the first character. +// drive-specific relative paths on Windows get their root stripped off even +// though they are not absolute, so `c:../foo` becomes ['c:', '../foo'] +module.exports = path => { + let r = '' + + let parsed = parse(path) + while (isAbsolute(path) || parsed.root) { + // windows will think that //x/y/z has a "root" of //x/y/ + // but strip the //?/C:/ off of //?/C:/path + const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ? '/' + : parsed.root + path = path.substr(root.length) + r += root + parsed = parse(path) + } + return [r, path] +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/strip-trailing-slashes.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/strip-trailing-slashes.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/strip-trailing-slashes.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/strip-trailing-slashes.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,24 @@ +// this is the only approach that was significantly faster than using +// str.replace(/\/+$/, '') for strings ending with a lot of / chars and +// containing multiple / chars. +const batchStrings = [ + '/'.repeat(1024), + '/'.repeat(512), + '/'.repeat(256), + '/'.repeat(128), + '/'.repeat(64), + '/'.repeat(32), + '/'.repeat(16), + '/'.repeat(8), + '/'.repeat(4), + '/'.repeat(2), + '/', +] + +module.exports = str => { + for (const s of batchStrings) { + while (str.length >= s.length && str.slice(-1 * s.length) === s) + str = str.slice(0, -1 * s.length) + } + return str +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/unpack.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/unpack.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/unpack.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/unpack.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,11 @@ 'use strict' +// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet. +// but the path reservations are required to avoid race conditions where +// parallelized unpack ops may mess with one another, due to dependencies +// (like a Link depending on its target) or destructive operations (like +// clobbering an fs object to create one of a different type.) + const assert = require('assert') const EE = require('events').EventEmitter const Parser = require('./parse.js') @@ -9,9 +15,15 @@ const mkdir = require('./mkdir.js') const mkdirSync = mkdir.sync const wc = require('./winchars.js') +const stripAbsolutePath = require('./strip-absolute-path.js') +const pathReservations = require('./path-reservations.js') +const normPath = require('./normalize-windows-path.js') +const stripSlash = require('./strip-trailing-slashes.js') const ONENTRY = Symbol('onEntry') const CHECKFS = Symbol('checkFs') +const CHECKFS2 = Symbol('checkFs2') +const PRUNECACHE = Symbol('pruneCache') const ISREUSABLE = Symbol('isReusable') const MAKEFS = Symbol('makeFs') const FILE = Symbol('file') @@ -33,7 +45,10 @@ const DOCHOWN = Symbol('doChown') const UID = Symbol('uid') const GID = Symbol('gid') +const CHECKED_CWD = Symbol('checkedCwd') const crypto = require('crypto') +const platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform +const isWindows = platform === 'win32' // Unlinks on Windows are not atomic. // @@ -52,7 +67,7 @@ // See: https://github.com/npm/node-tar/issues/183 /* istanbul ignore next */ const unlinkFile = (path, cb) => { - if (process.platform !== 'win32') + if (!isWindows) return fs.unlink(path, cb) const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex') @@ -65,7 +80,7 @@ /* istanbul ignore next */ const unlinkFileSync = path => { - if (process.platform !== 'win32') + if (!isWindows) return fs.unlinkSync(path) const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex') @@ -79,6 +94,33 @@ : b === b >>> 0 ? b : c +// clear the cache if it's a case-insensitive unicode-squashing match. +// we can't know if the current file system is case-sensitive or supports +// unicode fully, so we check for similarity on the maximally compatible +// representation. Err on the side of pruning, since all it's doing is +// preventing lstats, and it's not the end of the world if we get a false +// positive. +// Note that on windows, we always drop the entire cache whenever a +// symbolic link is encountered, because 8.3 filenames are impossible +// to reason about, and collisions are hazards rather than just failures. +const cacheKeyNormalize = path => stripSlash(normPath(path)) + .normalize('NFKD') + .toLowerCase() + +const pruneCache = (cache, abs) => { + abs = cacheKeyNormalize(abs) + for (const path of cache.keys()) { + const pnorm = cacheKeyNormalize(path) + if (pnorm === abs || pnorm.indexOf(abs + '/') === 0) + cache.delete(path) + } +} + +const dropCache = cache => { + for (const key of cache.keys()) + cache.delete(key) +} + class Unpack extends Parser { constructor (opt) { if (!opt) @@ -91,6 +133,10 @@ super(opt) + this[CHECKED_CWD] = false + + this.reservations = pathReservations() + this.transform = typeof opt.transform === 'function' ? opt.transform : null this.writable = true @@ -133,7 +179,7 @@ this.forceChown = opt.forceChown === true // turn >= this.strip) entry.linkpath = linkparts.slice(this.strip).join('/') + else + return false } } if (!this.preservePaths) { - const p = entry.path - if (p.match(/(^|\/|\\)\.\.(\\|\/|$)/)) { - this.warn('path contains \'..\'', p) + const p = normPath(entry.path) + const parts = p.split('/') + if (parts.includes('..') || isWindows && /^[a-z]:\.\.$/i.test(parts[0])) { + this.warn(`path contains '..'`, p) return false } - // absolutes on posix are also absolutes on win32 - // so we only need to test this one to get both - if (path.win32.isAbsolute(p)) { - const parsed = path.win32.parse(p) - this.warn('stripping ' + parsed.root + ' from absolute path', p) - entry.path = p.substr(parsed.root.length) + // strip off the root + const s = stripAbsolutePath(p) + if (s[0]) { + entry.path = s[1] + this.warn(`stripping ${s[0]} from absolute path`, p) } } + if (path.isAbsolute(entry.path)) + entry.absolute = normPath(path.resolve(entry.path)) + else + entry.absolute = normPath(path.resolve(this.cwd, entry.path)) + + // if we somehow ended up with a path that escapes the cwd, and we are + // not in preservePaths mode, then something is fishy! This should have + // been prevented above, so ignore this for coverage. + /* istanbul ignore if - defense in depth */ + if (!this.preservePaths && + entry.absolute.indexOf(this.cwd + '/') !== 0 && + entry.absolute !== this.cwd) { + this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', { + entry, + path: normPath(entry.path), + resolvedPath: entry.absolute, + cwd: this.cwd, + }) + return false + } + + // an archive can set properties on the extraction directory, but it + // may not replace the cwd with a different kind of thing entirely. + if (entry.absolute === this.cwd && + entry.type !== 'Directory' && + entry.type !== 'GNUDumpDir') + return false + // only encode : chars that aren't drive letter indicators if (this.win32) { - const parsed = path.win32.parse(entry.path) - entry.path = parsed.root === '' ? wc.encode(entry.path) - : parsed.root + wc.encode(entry.path.substr(parsed.root.length)) + const { root: aRoot } = path.win32.parse(entry.absolute) + entry.absolute = aRoot + wc.encode(entry.absolute.substr(aRoot.length)) + const { root: pRoot } = path.win32.parse(entry.path) + entry.path = pRoot + wc.encode(entry.path.substr(pRoot.length)) } - if (path.isAbsolute(entry.path)) - entry.absolute = entry.path - else - entry.absolute = path.resolve(this.cwd, entry.path) - return true } @@ -257,7 +329,7 @@ } [MKDIR] (dir, mode, cb) { - mkdir(dir, { + mkdir(normPath(dir), { uid: this.uid, gid: this.gid, processUid: this.processUid, @@ -291,21 +363,44 @@ return uint32(this.gid, entry.gid, this.processGid) } - [FILE] (entry) { + [FILE] (entry, fullyDone) { const mode = entry.mode & 0o7777 || this.fmode const stream = new fsm.WriteStream(entry.absolute, { mode: mode, autoClose: false }) - stream.on('error', er => this[ONERROR](er, entry)) + stream.on('error', er => { + if (stream.fd) + fs.close(stream.fd, () => {}) + + // flush all the data out so that we aren't left hanging + // if the error wasn't actually fatal. otherwise the parse + // is blocked, and we never proceed. + /* istanbul ignore next */ + stream.write = () => true + this[ONERROR](er, entry) + fullyDone() + }) let actions = 1 const done = er => { - if (er) - return this[ONERROR](er, entry) + if (er) { + /* istanbul ignore else - we should always have a fd by now */ + if (stream.fd) + fs.close(stream.fd, () => {}) - if (--actions === 0) - fs.close(stream.fd, _ => this[UNPEND]()) + this[ONERROR](er, entry) + fullyDone() + return + } + + if (--actions === 0) { + fs.close(stream.fd, er => { + fullyDone() + /* istanbul ignore next */ + er ? this[ONERROR](er, entry) : this[UNPEND]() + }) + } } stream.on('finish', _ => { @@ -344,15 +439,18 @@ tx.pipe(stream) } - [DIRECTORY] (entry) { + [DIRECTORY] (entry, fullyDone) { const mode = entry.mode & 0o7777 || this.dmode this[MKDIR](entry.absolute, mode, er => { - if (er) + if (er) { + fullyDone() return this[ONERROR](er, entry) + } let actions = 1 const done = _ => { if (--actions === 0) { + fullyDone() this[UNPEND]() entry.resume() } @@ -377,12 +475,13 @@ entry.resume() } - [SYMLINK] (entry) { - this[LINK](entry, entry.linkpath, 'symlink') + [SYMLINK] (entry, done) { + this[LINK](entry, entry.linkpath, 'symlink', done) } - [HARDLINK] (entry) { - this[LINK](entry, path.resolve(this.cwd, entry.linkpath), 'link') + [HARDLINK] (entry, done) { + const linkpath = normPath(path.resolve(this.cwd, entry.linkpath)) + this[LINK](entry, linkpath, 'link', done) } [PEND] () { @@ -407,35 +506,122 @@ !this.unlink && st.isFile() && st.nlink <= 1 && - process.platform !== 'win32' + !isWindows } // check if a thing is there, and if so, try to clobber it [CHECKFS] (entry) { this[PEND]() - this[MKDIR](path.dirname(entry.absolute), this.dmode, er => { - if (er) - return this[ONERROR](er, entry) - fs.lstat(entry.absolute, (er, st) => { - if (st && (this.keep || this.newer && st.mtime > entry.mtime)) + const paths = [entry.path] + if (entry.linkpath) + paths.push(entry.linkpath) + this.reservations.reserve(paths, done => this[CHECKFS2](entry, done)) + } + + [PRUNECACHE] (entry) { + // if we are not creating a directory, and the path is in the dirCache, + // then that means we are about to delete the directory we created + // previously, and it is no longer going to be a directory, and neither + // is any of its children. + // If a symbolic link is encountered, all bets are off. There is no + // reasonable way to sanitize the cache in such a way we will be able to + // avoid having filesystem collisions. If this happens with a non-symlink + // entry, it'll just fail to unpack, but a symlink to a directory, using an + // 8.3 shortname or certain unicode attacks, can evade detection and lead + // to arbitrary writes to anywhere on the system. + if (entry.type === 'SymbolicLink') + dropCache(this.dirCache) + else if (entry.type !== 'Directory') + pruneCache(this.dirCache, entry.absolute) + } + + [CHECKFS2] (entry, fullyDone) { + this[PRUNECACHE](entry) + + const done = er => { + this[PRUNECACHE](entry) + fullyDone(er) + } + + const checkCwd = () => { + this[MKDIR](this.cwd, this.dmode, er => { + if (er) { + this[ONERROR](er, entry) + done() + return + } + this[CHECKED_CWD] = true + start() + }) + } + + const start = () => { + if (entry.absolute !== this.cwd) { + const parent = normPath(path.dirname(entry.absolute)) + if (parent !== this.cwd) { + return this[MKDIR](parent, this.dmode, er => { + if (er) { + this[ONERROR](er, entry) + done() + return + } + afterMakeParent() + }) + } + } + afterMakeParent() + } + + const afterMakeParent = () => { + fs.lstat(entry.absolute, (lstatEr, st) => { + if (st && (this.keep || this.newer && st.mtime > entry.mtime)) { this[SKIP](entry) - else if (er || this[ISREUSABLE](entry, st)) - this[MAKEFS](null, entry) - else if (st.isDirectory()) { + done() + return + } + if (lstatEr || this[ISREUSABLE](entry, st)) + return this[MAKEFS](null, entry, done) + + if (st.isDirectory()) { if (entry.type === 'Directory') { - if (!entry.mode || (st.mode & 0o7777) === entry.mode) - this[MAKEFS](null, entry) - else - fs.chmod(entry.absolute, entry.mode, er => this[MAKEFS](er, entry)) - } else - fs.rmdir(entry.absolute, er => this[MAKEFS](er, entry)) - } else - unlinkFile(entry.absolute, er => this[MAKEFS](er, entry)) + const needChmod = !this.noChmod && + entry.mode && + (st.mode & 0o7777) !== entry.mode + const afterChmod = er => this[MAKEFS](er, entry, done) + if (!needChmod) + return afterChmod() + return fs.chmod(entry.absolute, entry.mode, afterChmod) + } + // Not a dir entry, have to remove it. + // NB: the only way to end up with an entry that is the cwd + // itself, in such a way that == does not detect, is a + // tricky windows absolute path with UNC or 8.3 parts (and + // preservePaths:true, or else it will have been stripped). + // In that case, the user has opted out of path protections + // explicitly, so if they blow away the cwd, c'est la vie. + if (entry.absolute !== this.cwd) { + return fs.rmdir(entry.absolute, er => + this[MAKEFS](er, entry, done)) + } + } + + // not a dir, and not reusable + // don't remove if the cwd, we want that error + if (entry.absolute === this.cwd) + return this[MAKEFS](null, entry, done) + + unlinkFile(entry.absolute, er => + this[MAKEFS](er, entry, done)) }) - }) + } + + if (this[CHECKED_CWD]) + start() + else + checkCwd() } - [MAKEFS] (er, entry) { + [MAKEFS] (er, entry, done) { if (er) return this[ONERROR](er, entry) @@ -443,73 +629,107 @@ case 'File': case 'OldFile': case 'ContiguousFile': - return this[FILE](entry) + return this[FILE](entry, done) case 'Link': - return this[HARDLINK](entry) + return this[HARDLINK](entry, done) case 'SymbolicLink': - return this[SYMLINK](entry) + return this[SYMLINK](entry, done) case 'Directory': case 'GNUDumpDir': - return this[DIRECTORY](entry) + return this[DIRECTORY](entry, done) } } - [LINK] (entry, linkpath, link) { - // XXX: get the type ('file' or 'dir') for windows + [LINK] (entry, linkpath, link, done) { + // XXX: get the type ('symlink' or 'junction') for windows fs[link](linkpath, entry.absolute, er => { if (er) return this[ONERROR](er, entry) + done() this[UNPEND]() entry.resume() }) } } +const callSync = fn => { + try { + return [null, fn()] + } catch (er) { + return [er, null] + } +} class UnpackSync extends Unpack { - constructor (opt) { - super(opt) + [MAKEFS] (er, entry) { + return super[MAKEFS](er, entry, /* istanbul ignore next */ () => {}) } [CHECKFS] (entry) { - const er = this[MKDIR](path.dirname(entry.absolute), this.dmode) - if (er) - return this[ONERROR](er, entry) - try { - const st = fs.lstatSync(entry.absolute) - if (this.keep || this.newer && st.mtime > entry.mtime) - return this[SKIP](entry) - else if (this[ISREUSABLE](entry, st)) - return this[MAKEFS](null, entry) - else { - try { - if (st.isDirectory()) { - if (entry.type === 'Directory') { - if (entry.mode && (st.mode & 0o7777) !== entry.mode) - fs.chmodSync(entry.absolute, entry.mode) - } else - fs.rmdirSync(entry.absolute) - } else - unlinkFileSync(entry.absolute) - return this[MAKEFS](null, entry) - } catch (er) { - return this[ONERROR](er, entry) - } + this[PRUNECACHE](entry) + + if (!this[CHECKED_CWD]) { + const er = this[MKDIR](this.cwd, this.dmode) + if (er) + return this[ONERROR](er, entry) + this[CHECKED_CWD] = true + } + + // don't bother to make the parent if the current entry is the cwd, + // we've already checked it. + if (entry.absolute !== this.cwd) { + const parent = normPath(path.dirname(entry.absolute)) + if (parent !== this.cwd) { + const mkParent = this[MKDIR](parent, this.dmode) + if (mkParent) + return this[ONERROR](mkParent, entry) } - } catch (er) { - return this[MAKEFS](null, entry) } + + const [lstatEr, st] = callSync(() => fs.lstatSync(entry.absolute)) + if (st && (this.keep || this.newer && st.mtime > entry.mtime)) + return this[SKIP](entry) + + if (lstatEr || this[ISREUSABLE](entry, st)) + return this[MAKEFS](null, entry) + + if (st.isDirectory()) { + if (entry.type === 'Directory') { + const needChmod = !this.noChmod && + entry.mode && + (st.mode & 0o7777) !== entry.mode + const [er] = needChmod ? callSync(() => { + fs.chmodSync(entry.absolute, entry.mode) + }) : [] + return this[MAKEFS](er, entry) + } + // not a dir entry, have to remove it + const [er] = callSync(() => fs.rmdirSync(entry.absolute)) + this[MAKEFS](er, entry) + } + + // not a dir, and not reusable. + // don't remove if it's the cwd, since we want that error. + const [er] = entry.absolute === this.cwd ? [] + : callSync(() => unlinkFileSync(entry.absolute)) + this[MAKEFS](er, entry) } - [FILE] (entry) { + [FILE] (entry, done) { const mode = entry.mode & 0o7777 || this.fmode const oner = er => { - try { fs.closeSync(fd) } catch (_) {} - if (er) - this[ONERROR](er, entry) + let closeError + try { + fs.closeSync(fd) + } catch (e) { + closeError = e + } + if (er || closeError) + this[ONERROR](er || closeError, entry) + done() } let stream @@ -570,11 +790,14 @@ }) } - [DIRECTORY] (entry) { + [DIRECTORY] (entry, done) { const mode = entry.mode & 0o7777 || this.dmode const er = this[MKDIR](entry.absolute, mode) - if (er) - return this[ONERROR](er, entry) + if (er) { + this[ONERROR](er, entry) + done() + return + } if (entry.mtime && !this.noMtime) { try { fs.utimesSync(entry.absolute, entry.atime || new Date(), entry.mtime) @@ -585,12 +808,13 @@ fs.chownSync(entry.absolute, this[UID](entry), this[GID](entry)) } catch (er) {} } + done() entry.resume() } [MKDIR] (dir, mode) { try { - return mkdir.sync(dir, { + return mkdir.sync(normPath(dir), { uid: this.uid, gid: this.gid, processUid: this.processUid, @@ -607,9 +831,10 @@ } } - [LINK] (entry, linkpath, link) { + [LINK] (entry, linkpath, link, done) { try { fs[link + 'Sync'](linkpath, entry.absolute) + done() entry.resume() } catch (er) { return this[ONERROR](er, entry) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/write-entry.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/write-entry.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/lib/write-entry.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/lib/write-entry.js 2022-04-05 07:17:00.000000000 +0000 @@ -6,8 +6,16 @@ const ReadEntry = require('./read-entry.js') const fs = require('fs') const path = require('path') +const normPath = require('./normalize-windows-path.js') +const stripSlash = require('./strip-trailing-slashes.js') + +const prefixPath = (path, prefix) => { + if (!prefix) + return path + path = normPath(path).replace(/^\.(\/|$)/, '') + return stripSlash(prefix) + '/' + path +} -const types = require('./types.js') const maxReadSize = 16 * 1024 * 1024 const PROCESS = Symbol('process') const FILE = Symbol('file') @@ -24,8 +32,13 @@ const ONOPENFILE = Symbol('onopenfile') const CLOSE = Symbol('close') const MODE = Symbol('mode') +const AWAITDRAIN = Symbol('awaitDrain') +const ONDRAIN = Symbol('ondrain') +const PREFIX = Symbol('prefix') +const HAD_ERROR = Symbol('hadError') const warner = require('./warn-mixin.js') const winchars = require('./winchars.js') +const stripAbsolutePath = require('./strip-absolute-path.js') const modeFix = require('./mode-fix.js') @@ -35,40 +48,52 @@ super(opt) if (typeof p !== 'string') throw new TypeError('path is required') - this.path = p + this.path = normPath(p) // suppress atime, ctime, uid, gid, uname, gname this.portable = !!opt.portable // until node has builtin pwnam functions, this'll have to do - this.myuid = process.getuid && process.getuid() + this.myuid = process.getuid && process.getuid() || 0 this.myuser = process.env.USER || '' this.maxReadSize = opt.maxReadSize || maxReadSize this.linkCache = opt.linkCache || new Map() this.statCache = opt.statCache || new Map() this.preservePaths = !!opt.preservePaths - this.cwd = opt.cwd || process.cwd() + this.cwd = normPath(opt.cwd || process.cwd()) this.strict = !!opt.strict this.noPax = !!opt.noPax this.noMtime = !!opt.noMtime this.mtime = opt.mtime || null + this.prefix = opt.prefix ? normPath(opt.prefix) : null + + this.fd = null + this.blockLen = null + this.blockRemain = null + this.buf = null + this.offset = null + this.length = null + this.pos = null + this.remain = null if (typeof opt.onwarn === 'function') this.on('warn', opt.onwarn) - if (!this.preservePaths && path.win32.isAbsolute(p)) { - // absolutes on posix are also absolutes on win32 - // so we only need to test this one to get both - const parsed = path.win32.parse(p) - this.warn('stripping ' + parsed.root + ' from absolute path', p) - this.path = p.substr(parsed.root.length) + if (!this.preservePaths) { + const s = stripAbsolutePath(this.path) + if (s[0]) { + this.warn('stripping ' + s[0] + ' from absolute path', this.path) + this.path = s[1] + } } this.win32 = !!opt.win32 || process.platform === 'win32' if (this.win32) { + // force the \ to / normalization, since we might not *actually* + // be on windows, but want \ to be considered a path separator. this.path = winchars.decode(this.path.replace(/\\/g, '/')) p = p.replace(/\\/g, '/') } - this.absolute = opt.absolute || path.resolve(this.cwd, p) + this.absolute = normPath(opt.absolute || path.resolve(this.cwd, p)) if (this.path === '') this.path = './' @@ -79,6 +104,12 @@ this[LSTAT]() } + emit (ev, ...data) { + if (ev === 'error') + this[HAD_ERROR] = true + return super.emit(ev, ...data) + } + [LSTAT] () { fs.lstat(this.absolute, (er, stat) => { if (er) @@ -111,13 +142,19 @@ return modeFix(mode, this.type === 'Directory') } + [PREFIX] (path) { + return prefixPath(path, this.prefix) + } + [HEADER] () { if (this.type === 'Directory' && this.portable) this.noMtime = true this.header = new Header({ - path: this.path, - linkpath: this.linkpath, + path: this[PREFIX](this.path), + // only apply the prefix to hard links. + linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath) + : this.linkpath, // only the permissions and setuid/setgid/sticky bitflags // not the higher-order bits that specify file type mode: this[MODE](this.stat.mode), @@ -132,14 +169,15 @@ ctime: this.portable ? null : this.stat.ctime }) - if (this.header.encode() && !this.noPax) - this.write(new Pax({ + if (this.header.encode() && !this.noPax) { + super.write(new Pax({ atime: this.portable ? null : this.header.atime, ctime: this.portable ? null : this.header.ctime, gid: this.portable ? null : this.header.gid, mtime: this.noMtime ? null : this.mtime || this.header.mtime, - path: this.path, - linkpath: this.linkpath, + path: this[PREFIX](this.path), + linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath) + : this.linkpath, size: this.header.size, uid: this.portable ? null : this.header.uid, uname: this.portable ? null : this.header.uname, @@ -147,7 +185,8 @@ ino: this.portable ? null : this.stat.ino, nlink: this.portable ? null : this.stat.nlink }).encode()) - this.write(this.header.block) + } + super.write(this.header.block) } [DIRECTORY] () { @@ -167,14 +206,14 @@ } [ONREADLINK] (linkpath) { - this.linkpath = linkpath + this.linkpath = normPath(linkpath) this[HEADER]() this.end() } [HARDLINK] (linkpath) { this.type = 'Link' - this.linkpath = path.relative(this.cwd, linkpath) + this.linkpath = normPath(path.relative(this.cwd, linkpath)) this.stat.size = 0 this[HEADER]() this.end() @@ -207,75 +246,111 @@ } [ONOPENFILE] (fd) { - const blockLen = 512 * Math.ceil(this.stat.size / 512) - const bufLen = Math.min(blockLen, this.maxReadSize) - const buf = Buffer.allocUnsafe(bufLen) - this[READ](fd, buf, 0, buf.length, 0, this.stat.size, blockLen) + this.fd = fd + if (this[HAD_ERROR]) + return this[CLOSE]() + + this.blockLen = 512 * Math.ceil(this.stat.size / 512) + this.blockRemain = this.blockLen + const bufLen = Math.min(this.blockLen, this.maxReadSize) + this.buf = Buffer.allocUnsafe(bufLen) + this.offset = 0 + this.pos = 0 + this.remain = this.stat.size + this.length = this.buf.length + this[READ]() } - [READ] (fd, buf, offset, length, pos, remain, blockRemain) { + [READ] () { + const { fd, buf, offset, length, pos } = this fs.read(fd, buf, offset, length, pos, (er, bytesRead) => { - if (er) - return this[CLOSE](fd, _ => this.emit('error', er)) - this[ONREAD](fd, buf, offset, length, pos, remain, blockRemain, bytesRead) + if (er) { + // ignoring the error from close(2) is a bad practice, but at + // this point we already have an error, don't need another one + return this[CLOSE](() => this.emit('error', er)) + } + this[ONREAD](bytesRead) }) } - [CLOSE] (fd, cb) { - fs.close(fd, cb) + [CLOSE] (cb) { + fs.close(this.fd, cb) } - [ONREAD] (fd, buf, offset, length, pos, remain, blockRemain, bytesRead) { - if (bytesRead <= 0 && remain > 0) { + [ONREAD] (bytesRead) { + if (bytesRead <= 0 && this.remain > 0) { const er = new Error('encountered unexpected EOF') er.path = this.absolute er.syscall = 'read' er.code = 'EOF' - this[CLOSE](fd, _ => _) - return this.emit('error', er) + return this[CLOSE](() => this.emit('error', er)) } - if (bytesRead > remain) { + if (bytesRead > this.remain) { const er = new Error('did not encounter expected EOF') er.path = this.absolute er.syscall = 'read' er.code = 'EOF' - this[CLOSE](fd, _ => _) - return this.emit('error', er) + return this[CLOSE](() => this.emit('error', er)) } // null out the rest of the buffer, if we could fit the block padding - if (bytesRead === remain) { - for (let i = bytesRead; i < length && bytesRead < blockRemain; i++) { - buf[i + offset] = 0 - bytesRead ++ - remain ++ + // at the end of this loop, we've incremented bytesRead and this.remain + // to be incremented up to the blockRemain level, as if we had expected + // to get a null-padded file, and read it until the end. then we will + // decrement both remain and blockRemain by bytesRead, and know that we + // reached the expected EOF, without any null buffer to append. + if (bytesRead === this.remain) { + for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) { + this.buf[i + this.offset] = 0 + bytesRead++ + this.remain++ } } - const writeBuf = offset === 0 && bytesRead === buf.length ? - buf : buf.slice(offset, offset + bytesRead) - remain -= bytesRead - blockRemain -= bytesRead - pos += bytesRead - offset += bytesRead - - this.write(writeBuf) - - if (!remain) { - if (blockRemain) - this.write(Buffer.alloc(blockRemain)) - this.end() - this[CLOSE](fd, _ => _) - return - } - - if (offset >= length) { - buf = Buffer.allocUnsafe(length) - offset = 0 + const writeBuf = this.offset === 0 && bytesRead === this.buf.length ? + this.buf : this.buf.slice(this.offset, this.offset + bytesRead) + + const flushed = this.write(writeBuf) + if (!flushed) + this[AWAITDRAIN](() => this[ONDRAIN]()) + else + this[ONDRAIN]() + } + + [AWAITDRAIN] (cb) { + this.once('drain', cb) + } + + write (writeBuf) { + if (this.blockRemain < writeBuf.length) { + const er = new Error('writing more data than expected') + er.path = this.absolute + return this.emit('error', er) } - length = buf.length - offset - this[READ](fd, buf, offset, length, pos, remain, blockRemain) + this.remain -= writeBuf.length + this.blockRemain -= writeBuf.length + this.pos += writeBuf.length + this.offset += writeBuf.length + return super.write(writeBuf) + } + + [ONDRAIN] () { + if (!this.remain) { + if (this.blockRemain) + super.write(Buffer.alloc(this.blockRemain)) + return this[CLOSE](/* istanbul ignore next - legacy */ + er => er ? this.emit('error', er) : this.end()) + } + + if (this.offset >= this.length) { + // if we only have a smaller bit left to read, alloc a smaller buffer + // otherwise, keep it the same length it was before. + this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length)) + this.offset = 0 + } + this.length = this.buf.length - this.offset + this[READ]() } }) @@ -296,20 +371,31 @@ this[ONOPENFILE](fs.openSync(this.absolute, 'r')) } - [READ] (fd, buf, offset, length, pos, remain, blockRemain) { + [READ] () { let threw = true try { + const { fd, buf, offset, length, pos } = this const bytesRead = fs.readSync(fd, buf, offset, length, pos) - this[ONREAD](fd, buf, offset, length, pos, remain, blockRemain, bytesRead) + this[ONREAD](bytesRead) threw = false } finally { - if (threw) - try { this[CLOSE](fd) } catch (er) {} + // ignoring the error from close(2) is a bad practice, but at + // this point we already have an error, don't need another one + if (threw) { + try { + this[CLOSE](() => {}) + } catch (er) {} + } } } - [CLOSE] (fd) { - fs.closeSync(fd) + [AWAITDRAIN] (cb) { + cb() + } + + [CLOSE] (cb) { + fs.closeSync(this.fd) + cb() } } @@ -328,7 +414,9 @@ if (this.type === 'Directory' && this.portable) this.noMtime = true - this.path = readEntry.path + this.prefix = opt.prefix || null + + this.path = normPath(readEntry.path) this.mode = this[MODE](readEntry.mode) this.uid = this.portable ? null : readEntry.uid this.gid = this.portable ? null : readEntry.gid @@ -338,26 +426,29 @@ this.mtime = this.noMtime ? null : opt.mtime || readEntry.mtime this.atime = this.portable ? null : readEntry.atime this.ctime = this.portable ? null : readEntry.ctime - this.linkpath = readEntry.linkpath + this.linkpath = normPath(readEntry.linkpath) if (typeof opt.onwarn === 'function') this.on('warn', opt.onwarn) - if (path.isAbsolute(this.path) && !this.preservePaths) { - const parsed = path.parse(this.path) - this.warn( - 'stripping ' + parsed.root + ' from absolute path', - this.path - ) - this.path = this.path.substr(parsed.root.length) + if (!this.preservePaths) { + const s = stripAbsolutePath(this.path) + if (s[0]) { + this.warn( + 'stripping ' + s[0] + ' from absolute path', + this.path + ) + this.path = s[1] + } } this.remain = readEntry.size this.blockRemain = readEntry.startBlockSize this.header = new Header({ - path: this.path, - linkpath: this.linkpath, + path: this[PREFIX](this.path), + linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath) + : this.linkpath, // only the permissions and setuid/setgid/sticky bitflags // not the higher-order bits that specify file type mode: this.mode, @@ -377,8 +468,9 @@ ctime: this.portable ? null : this.ctime, gid: this.portable ? null : this.gid, mtime: this.noMtime ? null : this.mtime, - path: this.path, - linkpath: this.linkpath, + path: this[PREFIX](this.path), + linkpath: this.type === 'Link' ? this[PREFIX](this.linkpath) + : this.linkpath, size: this.size, uid: this.portable ? null : this.uid, uname: this.portable ? null : this.uname, @@ -391,6 +483,10 @@ readEntry.pipe(this) } + [PREFIX] (path) { + return prefixPath(path, this.prefix) + } + [MODE] (mode) { return modeFix(mode, this.type === 'Directory') } @@ -405,7 +501,7 @@ end () { if (this.blockRemain) - this.write(Buffer.alloc(this.blockRemain)) + super.write(Buffer.alloc(this.blockRemain)) return super.end() } }) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/index.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/index.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,187 @@ +declare module "safe-buffer" { + export class Buffer { + length: number + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Buffer): boolean; + compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + */ + constructor (str: string, encoding?: string); + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + */ + constructor (size: number); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: Uint8Array); + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + */ + constructor (arrayBuffer: ArrayBuffer); + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + */ + constructor (array: any[]); + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + */ + constructor (buffer: Buffer); + prototype: Buffer; + /** + * Allocates a new Buffer using an {array} of octets. + * + * @param array + */ + static from(array: any[]): Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() + * @param byteOffset + * @param length + */ + static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Copies the passed {buffer} data onto a new Buffer instance. + * + * @param buffer + */ + static from(buffer: Buffer): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + * + * @param str + */ + static from(str: string, encoding?: string): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + static isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + static isEncoding(encoding: string): boolean; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + static byteLength(string: string, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + static concat(list: Buffer[], totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + static compare(buf1: Buffer, buf2: Buffer): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + static allocUnsafeSlow(size: number): Buffer; + } +} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,65 @@ +/*! safe-buffer. MIT License. Feross Aboukhadijeh */ +/* eslint-disable node/no-deprecated-api */ +var buffer = require('buffer') +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.prototype = Object.create(Buffer.prototype) + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/LICENSE 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,77 @@ +{ + "_from": "safe-buffer@^5.2.1", + "_id": "safe-buffer@5.2.1", + "_inBundle": false, + "_integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "_location": "/tar/safe-buffer", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "safe-buffer@^5.2.1", + "name": "safe-buffer", + "escapedName": "safe-buffer", + "rawSpec": "^5.2.1", + "saveSpec": null, + "fetchSpec": "^5.2.1" + }, + "_requiredBy": [ + "/tar", + "/tar/minipass" + ], + "_resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "_shasum": "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6", + "_spec": "safe-buffer@^5.2.1", + "_where": "/Users/darcyclarke/Documents/Repos/npm/npm6/node_modules/tar", + "author": { + "name": "Feross Aboukhadijeh", + "email": "feross@feross.org", + "url": "https://feross.org" + }, + "bugs": { + "url": "https://github.com/feross/safe-buffer/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Safer Node.js Buffer API", + "devDependencies": { + "standard": "*", + "tape": "^5.0.0" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "homepage": "https://github.com/feross/safe-buffer", + "keywords": [ + "buffer", + "buffer allocate", + "node security", + "safe", + "safe-buffer", + "security", + "uninitialized" + ], + "license": "MIT", + "main": "index.js", + "name": "safe-buffer", + "repository": { + "type": "git", + "url": "git://github.com/feross/safe-buffer.git" + }, + "scripts": { + "test": "standard && tape test/*.js" + }, + "types": "index.d.ts", + "version": "5.2.1" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/safe-buffer/README.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/safe-buffer/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/iterator.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/iterator.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/iterator.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/iterator.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,8 @@ +'use strict' +module.exports = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value + } + } +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/LICENSE 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,63 @@ +{ + "_from": "yallist@^3.1.1", + "_id": "yallist@3.1.1", + "_inBundle": false, + "_integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "_location": "/tar/yallist", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "yallist@^3.1.1", + "name": "yallist", + "escapedName": "yallist", + "rawSpec": "^3.1.1", + "saveSpec": null, + "fetchSpec": "^3.1.1" + }, + "_requiredBy": [ + "/tar", + "/tar/minipass" + ], + "_resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "_shasum": "dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd", + "_spec": "yallist@^3.1.1", + "_where": "/Users/darcyclarke/Documents/Repos/npm/npm6/node_modules/tar", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "bugs": { + "url": "https://github.com/isaacs/yallist/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "Yet Another Linked List", + "devDependencies": { + "tap": "^12.1.0" + }, + "directories": { + "test": "test" + }, + "files": [ + "yallist.js", + "iterator.js" + ], + "homepage": "https://github.com/isaacs/yallist#readme", + "license": "ISC", + "main": "yallist.js", + "name": "yallist", + "repository": { + "type": "git", + "url": "git+https://github.com/isaacs/yallist.git" + }, + "scripts": { + "postpublish": "git push origin --all; git push origin --tags", + "postversion": "npm publish", + "preversion": "npm test", + "test": "tap test/*.js --100" + }, + "version": "3.1.1" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/README.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,204 @@ +# yallist + +Yet Another Linked List + +There are many doubly-linked list implementations like it, but this +one is mine. + +For when an array would be too big, and a Map can't be iterated in +reverse order. + + +[![Build Status](https://travis-ci.org/isaacs/yallist.svg?branch=master)](https://travis-ci.org/isaacs/yallist) [![Coverage Status](https://coveralls.io/repos/isaacs/yallist/badge.svg?service=github)](https://coveralls.io/github/isaacs/yallist) + +## basic usage + +```javascript +var yallist = require('yallist') +var myList = yallist.create([1, 2, 3]) +myList.push('foo') +myList.unshift('bar') +// of course pop() and shift() are there, too +console.log(myList.toArray()) // ['bar', 1, 2, 3, 'foo'] +myList.forEach(function (k) { + // walk the list head to tail +}) +myList.forEachReverse(function (k, index, list) { + // walk the list tail to head +}) +var myDoubledList = myList.map(function (k) { + return k + k +}) +// now myDoubledList contains ['barbar', 2, 4, 6, 'foofoo'] +// mapReverse is also a thing +var myDoubledListReverse = myList.mapReverse(function (k) { + return k + k +}) // ['foofoo', 6, 4, 2, 'barbar'] + +var reduced = myList.reduce(function (set, entry) { + set += entry + return set +}, 'start') +console.log(reduced) // 'startfoo123bar' +``` + +## api + +The whole API is considered "public". + +Functions with the same name as an Array method work more or less the +same way. + +There's reverse versions of most things because that's the point. + +### Yallist + +Default export, the class that holds and manages a list. + +Call it with either a forEach-able (like an array) or a set of +arguments, to initialize the list. + +The Array-ish methods all act like you'd expect. No magic length, +though, so if you change that it won't automatically prune or add +empty spots. + +### Yallist.create(..) + +Alias for Yallist function. Some people like factories. + +#### yallist.head + +The first node in the list + +#### yallist.tail + +The last node in the list + +#### yallist.length + +The number of nodes in the list. (Change this at your peril. It is +not magic like Array length.) + +#### yallist.toArray() + +Convert the list to an array. + +#### yallist.forEach(fn, [thisp]) + +Call a function on each item in the list. + +#### yallist.forEachReverse(fn, [thisp]) + +Call a function on each item in the list, in reverse order. + +#### yallist.get(n) + +Get the data at position `n` in the list. If you use this a lot, +probably better off just using an Array. + +#### yallist.getReverse(n) + +Get the data at position `n`, counting from the tail. + +#### yallist.map(fn, thisp) + +Create a new Yallist with the result of calling the function on each +item. + +#### yallist.mapReverse(fn, thisp) + +Same as `map`, but in reverse. + +#### yallist.pop() + +Get the data from the list tail, and remove the tail from the list. + +#### yallist.push(item, ...) + +Insert one or more items to the tail of the list. + +#### yallist.reduce(fn, initialValue) + +Like Array.reduce. + +#### yallist.reduceReverse + +Like Array.reduce, but in reverse. + +#### yallist.reverse + +Reverse the list in place. + +#### yallist.shift() + +Get the data from the list head, and remove the head from the list. + +#### yallist.slice([from], [to]) + +Just like Array.slice, but returns a new Yallist. + +#### yallist.sliceReverse([from], [to]) + +Just like yallist.slice, but the result is returned in reverse. + +#### yallist.toArray() + +Create an array representation of the list. + +#### yallist.toArrayReverse() + +Create a reversed array representation of the list. + +#### yallist.unshift(item, ...) + +Insert one or more items to the head of the list. + +#### yallist.unshiftNode(node) + +Move a Node object to the front of the list. (That is, pull it out of +wherever it lives, and make it the new head.) + +If the node belongs to a different list, then that list will remove it +first. + +#### yallist.pushNode(node) + +Move a Node object to the end of the list. (That is, pull it out of +wherever it lives, and make it the new tail.) + +If the node belongs to a list already, then that list will remove it +first. + +#### yallist.removeNode(node) + +Remove a node from the list, preserving referential integrity of head +and tail and other nodes. + +Will throw an error if you try to have a list remove a node that +doesn't belong to it. + +### Yallist.Node + +The class that holds the data and is actually the list. + +Call with `var n = new Node(value, previousNode, nextNode)` + +Note that if you do direct operations on Nodes themselves, it's very +easy to get into weird states where the list is broken. Be careful :) + +#### node.next + +The next node in the list. + +#### node.prev + +The previous node in the list. + +#### node.value + +The data the node contains. + +#### node.list + +The list to which this node belongs. (Null if it does not belong to +any list.) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/yallist.js nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/yallist.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/node_modules/yallist/yallist.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/node_modules/yallist/yallist.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,426 @@ +'use strict' +module.exports = Yallist + +Yallist.Node = Node +Yallist.create = Yallist + +function Yallist (list) { + var self = this + if (!(self instanceof Yallist)) { + self = new Yallist() + } + + self.tail = null + self.head = null + self.length = 0 + + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item) + }) + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]) + } + } + + return self +} + +Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') + } + + var next = node.next + var prev = node.prev + + if (next) { + next.prev = prev + } + + if (prev) { + prev.next = next + } + + if (node === this.head) { + this.head = next + } + if (node === this.tail) { + this.tail = prev + } + + node.list.length-- + node.next = null + node.prev = null + node.list = null + + return next +} + +Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var head = this.head + node.list = this + node.next = head + if (head) { + head.prev = node + } + + this.head = node + if (!this.tail) { + this.tail = node + } + this.length++ +} + +Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var tail = this.tail + node.list = this + node.prev = tail + if (tail) { + tail.next = node + } + + this.tail = node + if (!this.head) { + this.head = node + } + this.length++ +} + +Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined + } + + var res = this.tail.value + this.tail = this.tail.prev + if (this.tail) { + this.tail.next = null + } else { + this.head = null + } + this.length-- + return res +} + +Yallist.prototype.shift = function () { + if (!this.head) { + return undefined + } + + var res = this.head.value + this.head = this.head.next + if (this.head) { + this.head.prev = null + } else { + this.tail = null + } + this.length-- + return res +} + +Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this) + walker = walker.next + } +} + +Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this) + walker = walker.prev + } +} + +Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.next + } + return res +} + +Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.prev + } + return res +} + +Yallist.prototype.reduce = function (fn, initial) { + var acc + var walker = this.head + if (arguments.length > 1) { + acc = initial + } else if (this.head) { + walker = this.head.next + acc = this.head.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i) + walker = walker.next + } + + return acc +} + +Yallist.prototype.reduceReverse = function (fn, initial) { + var acc + var walker = this.tail + if (arguments.length > 1) { + acc = initial + } else if (this.tail) { + walker = this.tail.prev + acc = this.tail.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i) + walker = walker.prev + } + + return acc +} + +Yallist.prototype.toArray = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value + walker = walker.next + } + return arr +} + +Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value + walker = walker.prev + } + return arr +} + +Yallist.prototype.slice = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.splice = function (start, deleteCount /*, ...nodes */) { + if (start > this.length) { + start = this.length - 1 + } + if (start < 0) { + start = this.length + start; + } + + for (var i = 0, walker = this.head; walker !== null && i < start; i++) { + walker = walker.next + } + + var ret = [] + for (var i = 0; walker && i < deleteCount; i++) { + ret.push(walker.value) + walker = this.removeNode(walker) + } + if (walker === null) { + walker = this.tail + } + + if (walker !== this.head && walker !== this.tail) { + walker = walker.prev + } + + for (var i = 2; i < arguments.length; i++) { + walker = insert(this, walker, arguments[i]) + } + return ret; +} + +Yallist.prototype.reverse = function () { + var head = this.head + var tail = this.tail + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev + walker.prev = walker.next + walker.next = p + } + this.head = tail + this.tail = head + return this +} + +function insert (self, node, value) { + var inserted = node === self.head ? + new Node(value, null, node, self) : + new Node(value, node, node.next, self) + + if (inserted.next === null) { + self.tail = inserted + } + if (inserted.prev === null) { + self.head = inserted + } + + self.length++ + + return inserted +} + +function push (self, item) { + self.tail = new Node(item, self.tail, null, self) + if (!self.head) { + self.head = self.tail + } + self.length++ +} + +function unshift (self, item) { + self.head = new Node(item, null, self.head, self) + if (!self.tail) { + self.tail = self.head + } + self.length++ +} + +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) + } + + this.list = list + this.value = value + + if (prev) { + prev.next = this + this.prev = prev + } else { + this.prev = null + } + + if (next) { + next.prev = this + this.next = next + } else { + this.next = null + } +} + +try { + // add if support for Symbol.iterator is present + require('./iterator.js')(Yallist) +} catch (er) {} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/tar/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/tar/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,22 +1,19 @@ { - "_from": "tar@4.4.13", - "_id": "tar@4.4.13", + "_from": "tar@4.4.19", + "_id": "tar@4.4.19", "_inBundle": false, - "_integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "_integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "_location": "/tar", - "_phantomChildren": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - }, + "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, - "raw": "tar@4.4.13", + "raw": "tar@4.4.19", "name": "tar", "escapedName": "tar", - "rawSpec": "4.4.13", + "rawSpec": "4.4.19", "saveSpec": null, - "fetchSpec": "4.4.13" + "fetchSpec": "4.4.19" }, "_requiredBy": [ "#USER", @@ -24,10 +21,10 @@ "/node-gyp", "/pacote" ], - "_resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "_shasum": "43b364bc52888d555298637b10d60790254ab525", - "_spec": "tar@4.4.13", - "_where": "/Users/mperrotte/npminc/cli", + "_resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "_shasum": "2e4d7263df26f2b914dee10c825ab132123742f3", + "_spec": "tar@4.4.19", + "_where": "/Users/darcyclarke/Documents/Repos/npm/npm6", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me", @@ -38,23 +35,24 @@ }, "bundleDependencies": false, "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" }, "deprecated": false, "description": "tar for node", "devDependencies": { "chmodr": "^1.2.0", - "end-of-stream": "^1.4.1", + "end-of-stream": "^1.4.4", "events-to-array": "^1.1.2", "mutate-fs": "^2.1.1", - "rimraf": "^2.6.3", - "tap": "^14.6.5", + "require-inject": "^1.4.4", + "rimraf": "^2.7.1", + "tap": "^14.11.0", "tar-fs": "^1.16.3", "tar-stream": "^1.6.2" }, @@ -68,6 +66,9 @@ "homepage": "https://github.com/npm/node-tar#readme", "license": "ISC", "name": "tar", + "publishConfig": { + "tag": "v4-legacy" + }, "repository": { "type": "git", "url": "git+https://github.com/npm/node-tar.git" @@ -78,11 +79,13 @@ "postpublish": "git push origin --follow-tags", "postversion": "npm publish", "preversion": "npm test", - "test": "tap" + "test": "node test/fixtures/test.js", + "test:posix": "tap", + "test:win32": "tap --lines=98 --branches=98 --statements=98 --functions=98" }, "tap": { "coverage-map": "map.js", "check-coverage": true }, - "version": "4.4.13" + "version": "4.4.19" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/update-notifier/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/update-notifier/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/update-notifier/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/update-notifier/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -23,7 +23,7 @@ "_resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", "_shasum": "d0744593e13f161e406acb1d9408b72cad08aff6", "_spec": "update-notifier@2.5.0", - "_where": "/Users/ruyadorno/Documents/workspace/cli", + "_where": "/Users/ruyadorno/Documents/workspace/cli/latest", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,59 @@ +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1443 @@ +/** @license URI.js v4.4.0 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.URI = global.URI || {}))); +}(this, (function (exports) { 'use strict'; + +function merge() { + for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) { + sets[_key] = arguments[_key]; + } + + if (sets.length > 1) { + sets[0] = sets[0].slice(0, -1); + var xl = sets.length - 1; + for (var x = 1; x < xl; ++x) { + sets[x] = sets[x].slice(1, -1); + } + sets[xl] = sets[xl].slice(1); + return sets.join(''); + } else { + return sets[0]; + } +} +function subexp(str) { + return "(?:" + str + ")"; +} +function typeOf(o) { + return o === undefined ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase(); +} +function toUpperCase(str) { + return str.toUpperCase(); +} +function toArray(obj) { + return obj !== undefined && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : []; +} +function assign(target, source) { + var obj = target; + if (source) { + for (var key in source) { + obj[key] = source[key]; + } + } + return obj; +} + +function buildExps(isIRI) { + var ALPHA$$ = "[A-Za-z]", + CR$ = "[\\x0D]", + DIGIT$$ = "[0-9]", + DQUOTE$$ = "[\\x22]", + HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), + //case-insensitive + LF$$ = "[\\x0A]", + SP$$ = "[\\x20]", + PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), + //expanded + GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", + SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", + RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), + UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", + //subset, excludes bidi control characters + IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", + //subset + UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), + SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), + USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), + DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), + DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), + //relaxed parsing rules + IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), + H16$ = subexp(HEXDIG$$ + "{1,4}"), + LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), + IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), + // 6( h16 ":" ) ls32 + IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), + // "::" 5( h16 ":" ) ls32 + IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), + //[ h16 ] "::" 4( h16 ":" ) ls32 + IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), + //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), + //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), + //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), + //[ *4( h16 ":" ) h16 ] "::" ls32 + IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), + //[ *5( h16 ":" ) h16 ] "::" h16 + IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), + //[ *6( h16 ":" ) h16 ] "::" + IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), + ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), + //RFC 6874 + IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), + //RFC 6874 + IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), + //RFC 6874, with relaxed parsing rules + IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), + IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), + //RFC 6874 + REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), + HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), + PORT$ = subexp(DIGIT$$ + "*"), + AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), + PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), + SEGMENT$ = subexp(PCHAR$ + "*"), + SEGMENT_NZ$ = subexp(PCHAR$ + "+"), + SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), + PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), + PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), + //simplified + PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), + //simplified + PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), + //simplified + PATH_EMPTY$ = "(?!" + PCHAR$ + ")", + PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), + QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), + FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), + HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), + URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), + RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), + RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), + URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), + ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), + GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", + SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", + AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; + return { + NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), + NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), + NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), + ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), + UNRESERVED: new RegExp(UNRESERVED$$, "g"), + OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), + PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), + IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), + IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules + }; +} +var URI_PROTOCOL = buildExps(false); + +var IRI_PROTOCOL = buildExps(true); + +var slicedToArray = function () { + function sliceIterator(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"]) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if (Symbol.iterator in Object(arr)) { + return sliceIterator(arr, i); + } else { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); + } + }; +}(); + + + + + + + + + + + + + +var toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } else { + return Array.from(arr); + } +}; + +/** Highest positive signed 32-bit float value */ + +var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +var base = 36; +var tMin = 1; +var tMax = 26; +var skew = 38; +var damp = 700; +var initialBias = 72; +var initialN = 128; // 0x80 +var delimiter = '-'; // '\x2D' + +/** Regular expressions */ +var regexPunycode = /^xn--/; +var regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars +var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +var errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +var baseMinusTMin = base - tMin; +var floor = Math.floor; +var stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error$1(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, fn) { + var result = []; + var length = array.length; + while (length--) { + result[length] = fn(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ +function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + var output = []; + var counter = 0; + var length = string.length; + while (counter < length) { + var value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + var extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { + // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +var ucs2encode = function ucs2encode(array) { + return String.fromCodePoint.apply(String, toConsumableArray(array)); +}; + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +var basicToDigit = function basicToDigit(codePoint) { + if (codePoint - 0x30 < 0x0A) { + return codePoint - 0x16; + } + if (codePoint - 0x41 < 0x1A) { + return codePoint - 0x41; + } + if (codePoint - 0x61 < 0x1A) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +var digitToBasic = function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +var adapt = function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (; /* no initialization */delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +var decode = function decode(input) { + // Don't use UCS-2. + var output = []; + var inputLength = input.length; + var i = 0; + var n = initialN; + var bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + var basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (var j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error$1('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (var index = basic > 0 ? basic + 1 : 0; index < inputLength;) /* no final expression */{ + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + var oldi = i; + for (var w = 1, k = base;; /* no condition */k += base) { + + if (index >= inputLength) { + error$1('invalid-input'); + } + + var digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error$1('overflow'); + } + + i += digit * w; + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + + if (digit < t) { + break; + } + + var baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error$1('overflow'); + } + + w *= baseMinusT; + } + + var out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error$1('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + } + + return String.fromCodePoint.apply(String, output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +var encode = function encode(input) { + var output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + var inputLength = input.length; + + // Initialize the state. + var n = initialN; + var delta = 0; + var bias = initialBias; + + // Handle the basic code points. + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var _currentValue2 = _step.value; + + if (_currentValue2 < 0x80) { + output.push(stringFromCharCode(_currentValue2)); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + var basicLength = output.length; + var handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + var m = maxInt; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var currentValue = _step2.value; + + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + var handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error$1('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var _currentValue = _step3.value; + + if (_currentValue < n && ++delta > maxInt) { + error$1('overflow'); + } + if (_currentValue == n) { + // Represent delta as a generalized variable-length integer. + var q = delta; + for (var k = base;; /* no condition */k += base) { + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + if (q < t) { + break; + } + var qMinusT = q - t; + var baseMinusT = base - t; + output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + ++delta; + ++n; + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +var toUnicode = function toUnicode(input) { + return mapDomain(input, function (string) { + return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +var toASCII = function toASCII(input) { + return mapDomain(input, function (string) { + return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +var punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.1.0', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +/** + * URI.js + * + * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. + * @author Gary Court + * @see http://github.com/garycourt/uri-js + */ +/** + * Copyright 2011 Gary Court. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of Gary Court. + */ +var SCHEMES = {}; +function pctEncChar(chr) { + var c = chr.charCodeAt(0); + var e = void 0; + if (c < 16) e = "%0" + c.toString(16).toUpperCase();else if (c < 128) e = "%" + c.toString(16).toUpperCase();else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase(); + return e; +} +function pctDecChars(str) { + var newStr = ""; + var i = 0; + var il = str.length; + while (i < il) { + var c = parseInt(str.substr(i + 1, 2), 16); + if (c < 128) { + newStr += String.fromCharCode(c); + i += 3; + } else if (c >= 194 && c < 224) { + if (il - i >= 6) { + var c2 = parseInt(str.substr(i + 4, 2), 16); + newStr += String.fromCharCode((c & 31) << 6 | c2 & 63); + } else { + newStr += str.substr(i, 6); + } + i += 6; + } else if (c >= 224) { + if (il - i >= 9) { + var _c = parseInt(str.substr(i + 4, 2), 16); + var c3 = parseInt(str.substr(i + 7, 2), 16); + newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63); + } else { + newStr += str.substr(i, 9); + } + i += 9; + } else { + newStr += str.substr(i, 3); + i += 3; + } + } + return newStr; +} +function _normalizeComponentEncoding(components, protocol) { + function decodeUnreserved(str) { + var decStr = pctDecChars(str); + return !decStr.match(protocol.UNRESERVED) ? str : decStr; + } + if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); + if (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + return components; +} + +function _stripLeadingZeros(str) { + return str.replace(/^0*(.*)/, "$1") || "0"; +} +function _normalizeIPv4(host, protocol) { + var matches = host.match(protocol.IPV4ADDRESS) || []; + + var _matches = slicedToArray(matches, 2), + address = _matches[1]; + + if (address) { + return address.split(".").map(_stripLeadingZeros).join("."); + } else { + return host; + } +} +function _normalizeIPv6(host, protocol) { + var matches = host.match(protocol.IPV6ADDRESS) || []; + + var _matches2 = slicedToArray(matches, 3), + address = _matches2[1], + zone = _matches2[2]; + + if (address) { + var _address$toLowerCase$ = address.toLowerCase().split('::').reverse(), + _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2), + last = _address$toLowerCase$2[0], + first = _address$toLowerCase$2[1]; + + var firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; + var lastFields = last.split(":").map(_stripLeadingZeros); + var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); + var fieldCount = isLastFieldIPv4Address ? 7 : 8; + var lastFieldsStart = lastFields.length - fieldCount; + var fields = Array(fieldCount); + for (var x = 0; x < fieldCount; ++x) { + fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; + } + if (isLastFieldIPv4Address) { + fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); + } + var allZeroFields = fields.reduce(function (acc, field, index) { + if (!field || field === "0") { + var lastLongest = acc[acc.length - 1]; + if (lastLongest && lastLongest.index + lastLongest.length === index) { + lastLongest.length++; + } else { + acc.push({ index: index, length: 1 }); + } + } + return acc; + }, []); + var longestZeroFields = allZeroFields.sort(function (a, b) { + return b.length - a.length; + })[0]; + var newHost = void 0; + if (longestZeroFields && longestZeroFields.length > 1) { + var newFirst = fields.slice(0, longestZeroFields.index); + var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); + newHost = newFirst.join(":") + "::" + newLast.join(":"); + } else { + newHost = fields.join(":"); + } + if (zone) { + newHost += "%" + zone; + } + return newHost; + } else { + return host; + } +} +var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; +var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === undefined; +function parse(uriString) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var components = {}; + var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; + if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; + var matches = uriString.match(URI_PARSE); + if (matches) { + if (NO_MATCH_IS_UNDEFINED) { + //store each component + components.scheme = matches[1]; + components.userinfo = matches[3]; + components.host = matches[4]; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = matches[7]; + components.fragment = matches[8]; + //fix port number + if (isNaN(components.port)) { + components.port = matches[5]; + } + } else { + //IE FIX for improper RegExp matching + //store each component + components.scheme = matches[1] || undefined; + components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : undefined; + components.host = uriString.indexOf("//") !== -1 ? matches[4] : undefined; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = uriString.indexOf("?") !== -1 ? matches[7] : undefined; + components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : undefined; + //fix port number + if (isNaN(components.port)) { + components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined; + } + } + if (components.host) { + //normalize IP hosts + components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); + } + //determine reference type + if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { + components.reference = "same-document"; + } else if (components.scheme === undefined) { + components.reference = "relative"; + } else if (components.fragment === undefined) { + components.reference = "absolute"; + } else { + components.reference = "uri"; + } + //check for reference errors + if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { + components.error = components.error || "URI is not a " + options.reference + " reference."; + } + //find scheme handler + var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //check if scheme can't handle IRIs + if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { + //if host component is a domain name + if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) { + //convert Unicode IDN -> ASCII IDN + try { + components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); + } catch (e) { + components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; + } + } + //convert IRI -> URI + _normalizeComponentEncoding(components, URI_PROTOCOL); + } else { + //normalize encodings + _normalizeComponentEncoding(components, protocol); + } + //perform scheme specific parsing + if (schemeHandler && schemeHandler.parse) { + schemeHandler.parse(components, options); + } + } else { + components.error = components.error || "URI can not be parsed."; + } + return components; +} + +function _recomposeAuthority(components, options) { + var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL; + var uriTokens = []; + if (components.userinfo !== undefined) { + uriTokens.push(components.userinfo); + uriTokens.push("@"); + } + if (components.host !== undefined) { + //normalize IP hosts, add brackets and escape zone separator for IPv6 + uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function (_, $1, $2) { + return "[" + $1 + ($2 ? "%25" + $2 : "") + "]"; + })); + } + if (typeof components.port === "number" || typeof components.port === "string") { + uriTokens.push(":"); + uriTokens.push(String(components.port)); + } + return uriTokens.length ? uriTokens.join("") : undefined; +} + +var RDS1 = /^\.\.?\//; +var RDS2 = /^\/\.(\/|$)/; +var RDS3 = /^\/\.\.(\/|$)/; +var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; +function removeDotSegments(input) { + var output = []; + while (input.length) { + if (input.match(RDS1)) { + input = input.replace(RDS1, ""); + } else if (input.match(RDS2)) { + input = input.replace(RDS2, "/"); + } else if (input.match(RDS3)) { + input = input.replace(RDS3, "/"); + output.pop(); + } else if (input === "." || input === "..") { + input = ""; + } else { + var im = input.match(RDS5); + if (im) { + var s = im[0]; + input = input.slice(s.length); + output.push(s); + } else { + throw new Error("Unexpected dot segment condition"); + } + } + } + return output.join(""); +} + +function serialize(components) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL; + var uriTokens = []; + //find scheme handler + var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //perform scheme specific serialization + if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); + if (components.host) { + //if host component is an IPv6 address + if (protocol.IPV6ADDRESS.test(components.host)) {} + //TODO: normalize IPv6 address as per RFC 5952 + + //if host component is a domain name + else if (options.domainHost || schemeHandler && schemeHandler.domainHost) { + //convert IDN via punycode + try { + components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host); + } catch (e) { + components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + } + } + //normalize encoding + _normalizeComponentEncoding(components, protocol); + if (options.reference !== "suffix" && components.scheme) { + uriTokens.push(components.scheme); + uriTokens.push(":"); + } + var authority = _recomposeAuthority(components, options); + if (authority !== undefined) { + if (options.reference !== "suffix") { + uriTokens.push("//"); + } + uriTokens.push(authority); + if (components.path && components.path.charAt(0) !== "/") { + uriTokens.push("/"); + } + } + if (components.path !== undefined) { + var s = components.path; + if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { + s = removeDotSegments(s); + } + if (authority === undefined) { + s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" + } + uriTokens.push(s); + } + if (components.query !== undefined) { + uriTokens.push("?"); + uriTokens.push(components.query); + } + if (components.fragment !== undefined) { + uriTokens.push("#"); + uriTokens.push(components.fragment); + } + return uriTokens.join(""); //merge tokens into a string +} + +function resolveComponents(base, relative) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + var skipNormalization = arguments[3]; + + var target = {}; + if (!skipNormalization) { + base = parse(serialize(base, options), options); //normalize base components + relative = parse(serialize(relative, options), options); //normalize relative components + } + options = options || {}; + if (!options.tolerant && relative.scheme) { + target.scheme = relative.scheme; + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } else { + if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } else { + if (!relative.path) { + target.path = base.path; + if (relative.query !== undefined) { + target.query = relative.query; + } else { + target.query = base.query; + } + } else { + if (relative.path.charAt(0) === "/") { + target.path = removeDotSegments(relative.path); + } else { + if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { + target.path = "/" + relative.path; + } else if (!base.path) { + target.path = relative.path; + } else { + target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; + } + target.path = removeDotSegments(target.path); + } + target.query = relative.query; + } + //target.authority = base.authority; + target.userinfo = base.userinfo; + target.host = base.host; + target.port = base.port; + } + target.scheme = base.scheme; + } + target.fragment = relative.fragment; + return target; +} + +function resolve(baseURI, relativeURI, options) { + var schemelessOptions = assign({ scheme: 'null' }, options); + return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); +} + +function normalize(uri, options) { + if (typeof uri === "string") { + uri = serialize(parse(uri, options), options); + } else if (typeOf(uri) === "object") { + uri = parse(serialize(uri, options), options); + } + return uri; +} + +function equal(uriA, uriB, options) { + if (typeof uriA === "string") { + uriA = serialize(parse(uriA, options), options); + } else if (typeOf(uriA) === "object") { + uriA = serialize(uriA, options); + } + if (typeof uriB === "string") { + uriB = serialize(parse(uriB, options), options); + } else if (typeOf(uriB) === "object") { + uriB = serialize(uriB, options); + } + return uriA === uriB; +} + +function escapeComponent(str, options) { + return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar); +} + +function unescapeComponent(str, options) { + return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars); +} + +var handler = { + scheme: "http", + domainHost: true, + parse: function parse(components, options) { + //report missing host + if (!components.host) { + components.error = components.error || "HTTP URIs must have a host."; + } + return components; + }, + serialize: function serialize(components, options) { + var secure = String(components.scheme).toLowerCase() === "https"; + //normalize the default port + if (components.port === (secure ? 443 : 80) || components.port === "") { + components.port = undefined; + } + //normalize the empty path + if (!components.path) { + components.path = "/"; + } + //NOTE: We do not parse query strings for HTTP URIs + //as WWW Form Url Encoded query strings are part of the HTML4+ spec, + //and not the HTTP spec. + return components; + } +}; + +var handler$1 = { + scheme: "https", + domainHost: handler.domainHost, + parse: handler.parse, + serialize: handler.serialize +}; + +function isSecure(wsComponents) { + return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === "wss"; +} +//RFC 6455 +var handler$2 = { + scheme: "ws", + domainHost: true, + parse: function parse(components, options) { + var wsComponents = components; + //indicate if the secure flag is set + wsComponents.secure = isSecure(wsComponents); + //construct resouce name + wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : ''); + wsComponents.path = undefined; + wsComponents.query = undefined; + return wsComponents; + }, + serialize: function serialize(wsComponents, options) { + //normalize the default port + if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === "") { + wsComponents.port = undefined; + } + //ensure scheme matches secure flag + if (typeof wsComponents.secure === 'boolean') { + wsComponents.scheme = wsComponents.secure ? 'wss' : 'ws'; + wsComponents.secure = undefined; + } + //reconstruct path from resource name + if (wsComponents.resourceName) { + var _wsComponents$resourc = wsComponents.resourceName.split('?'), + _wsComponents$resourc2 = slicedToArray(_wsComponents$resourc, 2), + path = _wsComponents$resourc2[0], + query = _wsComponents$resourc2[1]; + + wsComponents.path = path && path !== '/' ? path : undefined; + wsComponents.query = query; + wsComponents.resourceName = undefined; + } + //forbid fragment component + wsComponents.fragment = undefined; + return wsComponents; + } +}; + +var handler$3 = { + scheme: "wss", + domainHost: handler$2.domainHost, + parse: handler$2.parse, + serialize: handler$2.serialize +}; + +var O = {}; +var isIRI = true; +//RFC 3986 +var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; +var HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive +var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded +//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = +//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) +//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext +//const VCHAR$$ = "[\\x21-\\x7E]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext +//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); +//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); +//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); +var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; +var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; +var VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); +var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; +var UNRESERVED = new RegExp(UNRESERVED$$, "g"); +var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); +var NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); +var NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); +var NOT_HFVALUE = NOT_HFNAME; +function decodeUnreserved(str) { + var decStr = pctDecChars(str); + return !decStr.match(UNRESERVED) ? str : decStr; +} +var handler$4 = { + scheme: "mailto", + parse: function parse$$1(components, options) { + var mailtoComponents = components; + var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : []; + mailtoComponents.path = undefined; + if (mailtoComponents.query) { + var unknownHeaders = false; + var headers = {}; + var hfields = mailtoComponents.query.split("&"); + for (var x = 0, xl = hfields.length; x < xl; ++x) { + var hfield = hfields[x].split("="); + switch (hfield[0]) { + case "to": + var toAddrs = hfield[1].split(","); + for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) { + to.push(toAddrs[_x]); + } + break; + case "subject": + mailtoComponents.subject = unescapeComponent(hfield[1], options); + break; + case "body": + mailtoComponents.body = unescapeComponent(hfield[1], options); + break; + default: + unknownHeaders = true; + headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); + break; + } + } + if (unknownHeaders) mailtoComponents.headers = headers; + } + mailtoComponents.query = undefined; + for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) { + var addr = to[_x2].split("@"); + addr[0] = unescapeComponent(addr[0]); + if (!options.unicodeSupport) { + //convert Unicode IDN -> ASCII IDN + try { + addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); + } catch (e) { + mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; + } + } else { + addr[1] = unescapeComponent(addr[1], options).toLowerCase(); + } + to[_x2] = addr.join("@"); + } + return mailtoComponents; + }, + serialize: function serialize$$1(mailtoComponents, options) { + var components = mailtoComponents; + var to = toArray(mailtoComponents.to); + if (to) { + for (var x = 0, xl = to.length; x < xl; ++x) { + var toAddr = String(to[x]); + var atIdx = toAddr.lastIndexOf("@"); + var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); + var domain = toAddr.slice(atIdx + 1); + //convert IDN via punycode + try { + domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain); + } catch (e) { + components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + to[x] = localPart + "@" + domain; + } + components.path = to.join(","); + } + var headers = mailtoComponents.headers = mailtoComponents.headers || {}; + if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject; + if (mailtoComponents.body) headers["body"] = mailtoComponents.body; + var fields = []; + for (var name in headers) { + if (headers[name] !== O[name]) { + fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); + } + } + if (fields.length) { + components.query = fields.join("&"); + } + return components; + } +}; + +var URN_PARSE = /^([^\:]+)\:(.*)/; +//RFC 2141 +var handler$5 = { + scheme: "urn", + parse: function parse$$1(components, options) { + var matches = components.path && components.path.match(URN_PARSE); + var urnComponents = components; + if (matches) { + var scheme = options.scheme || urnComponents.scheme || "urn"; + var nid = matches[1].toLowerCase(); + var nss = matches[2]; + var urnScheme = scheme + ":" + (options.nid || nid); + var schemeHandler = SCHEMES[urnScheme]; + urnComponents.nid = nid; + urnComponents.nss = nss; + urnComponents.path = undefined; + if (schemeHandler) { + urnComponents = schemeHandler.parse(urnComponents, options); + } + } else { + urnComponents.error = urnComponents.error || "URN can not be parsed."; + } + return urnComponents; + }, + serialize: function serialize$$1(urnComponents, options) { + var scheme = options.scheme || urnComponents.scheme || "urn"; + var nid = urnComponents.nid; + var urnScheme = scheme + ":" + (options.nid || nid); + var schemeHandler = SCHEMES[urnScheme]; + if (schemeHandler) { + urnComponents = schemeHandler.serialize(urnComponents, options); + } + var uriComponents = urnComponents; + var nss = urnComponents.nss; + uriComponents.path = (nid || options.nid) + ":" + nss; + return uriComponents; + } +}; + +var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; +//RFC 4122 +var handler$6 = { + scheme: "urn:uuid", + parse: function parse(urnComponents, options) { + var uuidComponents = urnComponents; + uuidComponents.uuid = uuidComponents.nss; + uuidComponents.nss = undefined; + if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { + uuidComponents.error = uuidComponents.error || "UUID is not valid."; + } + return uuidComponents; + }, + serialize: function serialize(uuidComponents, options) { + var urnComponents = uuidComponents; + //normalize UUID + urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); + return urnComponents; + } +}; + +SCHEMES[handler.scheme] = handler; +SCHEMES[handler$1.scheme] = handler$1; +SCHEMES[handler$2.scheme] = handler$2; +SCHEMES[handler$3.scheme] = handler$3; +SCHEMES[handler$4.scheme] = handler$4; +SCHEMES[handler$5.scheme] = handler$5; +SCHEMES[handler$6.scheme] = handler$6; + +exports.SCHEMES = SCHEMES; +exports.pctEncChar = pctEncChar; +exports.pctDecChars = pctDecChars; +exports.parse = parse; +exports.removeDotSegments = removeDotSegments; +exports.serialize = serialize; +exports.resolveComponents = resolveComponents; +exports.resolve = resolve; +exports.normalize = normalize; +exports.equal = equal; +exports.escapeComponent = escapeComponent; +exports.unescapeComponent = unescapeComponent; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=uri.all.js.map diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"uri.all.js","sources":["../../src/index.ts","../../src/schemes/urn-uuid.ts","../../src/schemes/urn.ts","../../src/schemes/mailto.ts","../../src/schemes/wss.ts","../../src/schemes/ws.ts","../../src/schemes/https.ts","../../src/schemes/http.ts","../../src/uri.ts","../../node_modules/punycode/punycode.es6.js","../../src/regexps-iri.ts","../../src/regexps-uri.ts","../../src/util.ts"],"sourcesContent":["import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","export function merge(...sets:Array):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}"],"names":["SCHEMES","uuid","scheme","urn","mailto","wss","ws","https","http","urnComponents","nss","uuidComponents","toLowerCase","options","error","tolerant","match","UUID","undefined","handler","uriComponents","path","nid","schemeHandler","serialize","urnScheme","parse","matches","components","URN_PARSE","query","fields","join","length","push","name","replace","PCT_ENCODED","decodeUnreserved","toUpperCase","NOT_HFNAME","pctEncChar","headers","NOT_HFVALUE","O","mailtoComponents","body","subject","to","x","localPart","domain","iri","e","punycode","toASCII","unescapeComponent","toUnicode","toAddr","slice","atIdx","NOT_LOCAL_PART","lastIndexOf","String","xl","toArray","addr","unicodeSupport","split","unknownHeaders","hfield","toAddrs","hfields","decStr","UNRESERVED","str","pctDecChars","RegExp","merge","UNRESERVED$$","SOME_DELIMS$$","ATEXT$$","VCHAR$$","PCT_ENCODED$","QTEXT$$","subexp","HEXDIG$$","isIRI","domainHost","wsComponents","fragment","resourceName","secure","port","isSecure","host","toString","URI_PROTOCOL","IRI_PROTOCOL","ESCAPE","escapeComponent","uriA","uriB","typeOf","equal","uri","normalize","resolveComponents","baseURI","schemelessOptions","relativeURI","assign","resolve","target","relative","base","userinfo","removeDotSegments","charAt","skipNormalization","uriTokens","s","authority","absolutePath","reference","_recomposeAuthority","protocol","IPV6ADDRESS","test","output","Error","input","im","RDS5","pop","RDS3","RDS2","RDS1","$1","$2","_normalizeIPv6","_normalizeIPv4","_","uriString","isNaN","indexOf","parseInt","NO_MATCH_IS_UNDEFINED","URI_PARSE","newHost","zone","newFirst","newLast","longestZeroFields","index","b","a","allZeroFields","sort","acc","lastLongest","field","reduce","fieldCount","isLastFieldIPv4Address","firstFields","lastFields","lastFieldsStart","Array","IPV4ADDRESS","last","map","_stripLeadingZeros","first","address","reverse","NOT_FRAGMENT","NOT_QUERY","NOT_PATH","NOT_PATH_NOSCHEME","NOT_HOST","NOT_USERINFO","NOT_SCHEME","_normalizeComponentEncoding","newStr","substr","i","fromCharCode","c","c2","c3","il","chr","charCodeAt","encode","decode","ucs2encode","ucs2decode","regexNonASCII","string","mapDomain","regexPunycode","n","delta","handledCPCount","adapt","handledCPCountPlusOne","basicLength","stringFromCharCode","digitToBasic","q","floor","qMinusT","baseMinusT","t","k","bias","tMin","tMax","currentValue","maxInt","m","inputLength","delimiter","initialBias","initialN","fromCodePoint","splice","out","oldi","w","digit","basicToDigit","basic","j","baseMinusTMin","skew","numPoints","firstTime","damp","flag","codePoint","array","value","extra","counter","result","encoded","labels","fn","regexSeparators","parts","RangeError","errors","type","Math","buildExps","IPV6ADDRESS$","ZONEID$","IPV4ADDRESS$","RESERVED$$","SUB_DELIMS$$","IPRIVATE$$","ALPHA$$","DIGIT$$","AUTHORITY_REF$","USERINFO$","HOST$","PORT$","SAMEDOC_REF$","FRAGMENT$","ABSOLUTE_REF$","SCHEME$","PATH_ABEMPTY$","PATH_ABSOLUTE$","PATH_ROOTLESS$","PATH_EMPTY$","QUERY$","RELATIVE_REF$","PATH_NOSCHEME$","GENERIC_REF$","ABSOLUTE_URI$","HIER_PART$","URI_REFERENCE$","URI$","RELATIVE$","RELATIVE_PART$","AUTHORITY$","PCHAR$","PATH$","SEGMENT_NZ$","SEGMENT_NZ_NC$","SEGMENT$","IP_LITERAL$","REG_NAME$","IPV6ADDRZ_RELAXED$","IPVFUTURE$","IPV6ADDRESS1$","IPV6ADDRESS2$","IPV6ADDRESS3$","IPV6ADDRESS4$","IPV6ADDRESS5$","IPV6ADDRESS6$","IPV6ADDRESS7$","IPV6ADDRESS8$","IPV6ADDRESS9$","H16$","LS32$","DEC_OCTET_RELAXED$","DEC_OCTET$","UCSCHAR$$","GEN_DELIMS$$","SP$$","DQUOTE$$","CR$","obj","key","source","setInterval","call","prototype","o","Object","shift","sets"],"mappings":";;;;;;;AYAA,SAAA8E,KAAA,GAAA;sCAAyBsP,IAAzB;YAAA;;;QACKA,KAAKnS,MAAL,GAAc,CAAlB,EAAqB;aACf,CAAL,IAAUmS,KAAK,CAAL,EAAQzQ,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;YACMK,KAAKoQ,KAAKnS,MAAL,GAAc,CAAzB;aACK,IAAIgB,IAAI,CAAb,EAAgBA,IAAIe,EAApB,EAAwB,EAAEf,CAA1B,EAA6B;iBACvBA,CAAL,IAAUmR,KAAKnR,CAAL,EAAQU,KAAR,CAAc,CAAd,EAAiB,CAAC,CAAlB,CAAV;;aAEIK,EAAL,IAAWoQ,KAAKpQ,EAAL,EAASL,KAAT,CAAe,CAAf,CAAX;eACOyQ,KAAKpS,IAAL,CAAU,EAAV,CAAP;KAPD,MAQO;eACCoS,KAAK,CAAL,CAAP;;;AAIF,AAAA,SAAA/O,MAAA,CAAuBV,GAAvB,EAAA;WACQ,QAAQA,GAAR,GAAc,GAArB;;AAGD,AAAA,SAAA4B,MAAA,CAAuB0N,CAAvB,EAAA;WACQA,MAAM/S,SAAN,GAAkB,WAAlB,GAAiC+S,MAAM,IAAN,GAAa,MAAb,GAAsBC,OAAOF,SAAP,CAAiBhO,QAAjB,CAA0B+N,IAA1B,CAA+BE,CAA/B,EAAkC7P,KAAlC,CAAwC,GAAxC,EAA6CkE,GAA7C,GAAmDlE,KAAnD,CAAyD,GAAzD,EAA8D+P,KAA9D,GAAsEvT,WAAtE,EAA9D;;AAGD,AAAA,SAAA2B,WAAA,CAA4BoC,GAA5B,EAAA;WACQA,IAAIpC,WAAJ,EAAP;;AAGD,AAAA,SAAA0B,OAAA,CAAwB0P,GAAxB,EAAA;WACQA,QAAQzS,SAAR,IAAqByS,QAAQ,IAA7B,GAAqCA,eAAenJ,KAAf,GAAuBmJ,GAAvB,GAA8B,OAAOA,IAAI1R,MAAX,KAAsB,QAAtB,IAAkC0R,IAAIvP,KAAtC,IAA+CuP,IAAIG,WAAnD,IAAkEH,IAAII,IAAtE,GAA6E,CAACJ,GAAD,CAA7E,GAAqFnJ,MAAMwJ,SAAN,CAAgBrQ,KAAhB,CAAsBoQ,IAAtB,CAA2BJ,GAA3B,CAAxJ,GAA4L,EAAnM;;AAID,AAAA,SAAA5M,MAAA,CAAuBE,MAAvB,EAAuC4M,MAAvC,EAAA;QACOF,MAAM1M,MAAZ;QACI4M,MAAJ,EAAY;aACN,IAAMD,GAAX,IAAkBC,MAAlB,EAA0B;gBACrBD,GAAJ,IAAWC,OAAOD,GAAP,CAAX;;;WAGKD,GAAP;;;ADnCD,SAAA3D,SAAA,CAA0BzK,KAA1B,EAAA;QAEEgL,UAAU,UADX;QAECmD,MAAM,SAFP;QAGClD,UAAU,OAHX;QAICiD,WAAW,SAJZ;QAKCnO,WAAWR,MAAM0L,OAAN,EAAe,UAAf,CALZ;;WAMQ,SANR;QAOCgD,OAAO,SAPR;QAQCrO,eAAeE,OAAOA,OAAO,YAAYC,QAAZ,GAAuB,GAAvB,GAA6BA,QAA7B,GAAwCA,QAAxC,GAAmD,GAAnD,GAAyDA,QAAzD,GAAoEA,QAA3E,IAAuF,GAAvF,GAA6FD,OAAO,gBAAgBC,QAAhB,GAA2B,GAA3B,GAAiCA,QAAjC,GAA4CA,QAAnD,CAA7F,GAA4J,GAA5J,GAAkKD,OAAO,MAAMC,QAAN,GAAiBA,QAAxB,CAAzK,CARhB;;mBASgB,yBAThB;QAUC+K,eAAe,qCAVhB;QAWCD,aAAatL,MAAMyO,YAAN,EAAoBlD,YAApB,CAXd;QAYCiD,YAAY/N,QAAQ,6EAAR,GAAwF,IAZrG;;iBAacA,QAAQ,mBAAR,GAA8B,IAb5C;;mBAcgBT,MAAMyL,OAAN,EAAeC,OAAf,EAAwB,gBAAxB,EAA0C8C,SAA1C,CAdhB;QAeCtC,UAAU3L,OAAOkL,UAAUzL,MAAMyL,OAAN,EAAeC,OAAf,EAAwB,aAAxB,CAAV,GAAmD,GAA1D,CAfX;QAgBCE,YAAYrL,OAAOA,OAAOF,eAAe,GAAf,GAAqBL,MAAMC,YAAN,EAAoBsL,YAApB,EAAkC,OAAlC,CAA5B,IAA0E,GAAjF,CAhBb;QAiBCgD,aAAahO,OAAOA,OAAO,SAAP,IAAoB,GAApB,GAA0BA,OAAO,WAAWmL,OAAlB,CAA1B,GAAuD,GAAvD,GAA6DnL,OAAO,MAAMmL,OAAN,GAAgBA,OAAvB,CAA7D,GAA+F,GAA/F,GAAqGnL,OAAO,UAAUmL,OAAjB,CAArG,GAAiI,GAAjI,GAAuIA,OAA9I,CAjBd;QAkBC4C,qBAAqB/N,OAAOA,OAAO,SAAP,IAAoB,GAApB,GAA0BA,OAAO,WAAWmL,OAAlB,CAA1B,GAAuD,GAAvD,GAA6DnL,OAAO,MAAMmL,OAAN,GAAgBA,OAAvB,CAA7D,GAA+F,GAA/F,GAAqGnL,OAAO,YAAYmL,OAAnB,CAArG,GAAmI,OAAnI,GAA6IA,OAApJ,CAlBtB;;mBAmBgBnL,OAAO+N,qBAAqB,KAArB,GAA6BA,kBAA7B,GAAkD,KAAlD,GAA0DA,kBAA1D,GAA+E,KAA/E,GAAuFA,kBAA9F,CAnBhB;QAoBCF,OAAO7N,OAAOC,WAAW,OAAlB,CApBR;QAqBC6N,QAAQ9N,OAAOA,OAAO6N,OAAO,KAAP,GAAeA,IAAtB,IAA8B,GAA9B,GAAoC/C,YAA3C,CArBT;QAsBCsC,gBAAgBpN,OAAmEA,OAAO6N,OAAO,KAAd,IAAuB,KAAvB,GAA+BC,KAAlG,CAtBjB;;oBAuBiB9N,OAAwD,WAAWA,OAAO6N,OAAO,KAAd,CAAX,GAAkC,KAAlC,GAA0CC,KAAlG,CAvBjB;;oBAwBiB9N,OAAOA,OAAwC6N,IAAxC,IAAgD,SAAhD,GAA4D7N,OAAO6N,OAAO,KAAd,CAA5D,GAAmF,KAAnF,GAA2FC,KAAlG,CAxBjB;;oBAyBiB9N,OAAOA,OAAOA,OAAO6N,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAA4D7N,OAAO6N,OAAO,KAAd,CAA5D,GAAmF,KAAnF,GAA2FC,KAAlG,CAzBjB;;oBA0BiB9N,OAAOA,OAAOA,OAAO6N,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAA4D7N,OAAO6N,OAAO,KAAd,CAA5D,GAAmF,KAAnF,GAA2FC,KAAlG,CA1BjB;;oBA2BiB9N,OAAOA,OAAOA,OAAO6N,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAAmEA,IAAnE,GAA0E,KAA1E,GAA2FC,KAAlG,CA3BjB;;oBA4BiB9N,OAAOA,OAAOA,OAAO6N,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAA2FC,KAAlG,CA5BjB;;oBA6BiB9N,OAAOA,OAAOA,OAAO6N,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAhD,GAA2FA,IAAlG,CA7BjB;;oBA8BiB7N,OAAOA,OAAOA,OAAO6N,OAAO,KAAd,IAAuB,OAAvB,GAAiCA,IAAxC,IAAgD,SAAvD,CA9BjB;;mBA+BgB7N,OAAO,CAACoN,aAAD,EAAgBC,aAAhB,EAA+BC,aAA/B,EAA8CC,aAA9C,EAA6DC,aAA7D,EAA4EC,aAA5E,EAA2FC,aAA3F,EAA0GC,aAA1G,EAAyHC,aAAzH,EAAwIjR,IAAxI,CAA6I,GAA7I,CAAP,CA/BhB;QAgCCkO,UAAU7K,OAAOA,OAAON,eAAe,GAAf,GAAqBI,YAA5B,IAA4C,GAAnD,CAhCX;;iBAiCcE,OAAO4K,eAAe,OAAf,GAAyBC,OAAhC,CAjCd;;yBAkCsB7K,OAAO4K,eAAe5K,OAAO,iBAAiBC,QAAjB,GAA4B,MAAnC,CAAf,GAA4D4K,OAAnE,CAlCtB;;iBAmCc7K,OAAO,SAASC,QAAT,GAAoB,MAApB,GAA6BR,MAAMC,YAAN,EAAoBsL,YAApB,EAAkC,OAAlC,CAA7B,GAA0E,GAAjF,CAnCd;QAoCCgC,cAAchN,OAAO,QAAQA,OAAOkN,qBAAqB,GAArB,GAA2BtC,YAA3B,GAA0C,GAA1C,GAAgDuC,UAAvD,CAAR,GAA6E,KAApF,CApCf;;gBAqCanN,OAAOA,OAAOF,eAAe,GAAf,GAAqBL,MAAMC,YAAN,EAAoBsL,YAApB,CAA5B,IAAiE,GAAxE,CArCb;QAsCCM,QAAQtL,OAAOgN,cAAc,GAAd,GAAoBlC,YAApB,GAAmC,KAAnC,GAA2CmC,SAA3C,GAAuD,GAAvD,GAA6D,GAA7D,GAAmEA,SAA1E,CAtCT;QAuCC1B,QAAQvL,OAAOmL,UAAU,GAAjB,CAvCT;QAwCCuB,aAAa1M,OAAOA,OAAOqL,YAAY,GAAnB,IAA0B,GAA1B,GAAgCC,KAAhC,GAAwCtL,OAAO,QAAQuL,KAAf,CAAxC,GAAgE,GAAvE,CAxCd;QAyCCoB,SAAS3M,OAAOF,eAAe,GAAf,GAAqBL,MAAMC,YAAN,EAAoBsL,YAApB,EAAkC,UAAlC,CAA5B,CAzCV;QA0CC+B,WAAW/M,OAAO2M,SAAS,GAAhB,CA1CZ;QA2CCE,cAAc7M,OAAO2M,SAAS,GAAhB,CA3Cf;QA4CCG,iBAAiB9M,OAAOA,OAAOF,eAAe,GAAf,GAAqBL,MAAMC,YAAN,EAAoBsL,YAApB,EAAkC,OAAlC,CAA5B,IAA0E,GAAjF,CA5ClB;QA6CCY,gBAAgB5L,OAAOA,OAAO,QAAQ+M,QAAf,IAA2B,GAAlC,CA7CjB;QA8CClB,iBAAiB7L,OAAO,QAAQA,OAAO6M,cAAcjB,aAArB,CAAR,GAA8C,GAArD,CA9ClB;;qBA+CkB5L,OAAO8M,iBAAiBlB,aAAxB,CA/ClB;;qBAgDkB5L,OAAO6M,cAAcjB,aAArB,CAhDlB;;kBAiDe,QAAQe,MAAR,GAAiB,GAjDhC;QAkDCC,QAAQ5M,OAAO4L,gBAAgB,GAAhB,GAAsBC,cAAtB,GAAuC,GAAvC,GAA6CK,cAA7C,GAA8D,GAA9D,GAAoEJ,cAApE,GAAqF,GAArF,GAA2FC,WAAlG,CAlDT;QAmDCC,SAAShM,OAAOA,OAAO2M,SAAS,GAAT,GAAelN,MAAM,UAAN,EAAkBwL,UAAlB,CAAtB,IAAuD,GAA9D,CAnDV;QAoDCQ,YAAYzL,OAAOA,OAAO2M,SAAS,WAAhB,IAA+B,GAAtC,CApDb;QAqDCN,aAAarM,OAAOA,OAAO,WAAW0M,UAAX,GAAwBd,aAA/B,IAAgD,GAAhD,GAAsDC,cAAtD,GAAuE,GAAvE,GAA6EC,cAA7E,GAA8F,GAA9F,GAAoGC,WAA3G,CArDd;QAsDCQ,OAAOvM,OAAO2L,UAAU,KAAV,GAAkBU,UAAlB,GAA+BrM,OAAO,QAAQgM,MAAf,CAA/B,GAAwD,GAAxD,GAA8DhM,OAAO,QAAQyL,SAAf,CAA9D,GAA0F,GAAjG,CAtDR;QAuDCgB,iBAAiBzM,OAAOA,OAAO,WAAW0M,UAAX,GAAwBd,aAA/B,IAAgD,GAAhD,GAAsDC,cAAtD,GAAuE,GAAvE,GAA6EK,cAA7E,GAA8F,GAA9F,GAAoGH,WAA3G,CAvDlB;QAwDCS,YAAYxM,OAAOyM,iBAAiBzM,OAAO,QAAQgM,MAAf,CAAjB,GAA0C,GAA1C,GAAgDhM,OAAO,QAAQyL,SAAf,CAAhD,GAA4E,GAAnF,CAxDb;QAyDCa,iBAAiBtM,OAAOuM,OAAO,GAAP,GAAaC,SAApB,CAzDlB;QA0DCJ,gBAAgBpM,OAAO2L,UAAU,KAAV,GAAkBU,UAAlB,GAA+BrM,OAAO,QAAQgM,MAAf,CAA/B,GAAwD,GAA/D,CA1DjB;QA4DCG,eAAe,OAAOR,OAAP,GAAiB,MAAjB,GAA0B3L,OAAOA,OAAO,YAAYA,OAAO,MAAMqL,SAAN,GAAkB,IAAzB,CAAZ,GAA6C,IAA7C,GAAoDC,KAApD,GAA4D,GAA5D,GAAkEtL,OAAO,SAASuL,KAAT,GAAiB,GAAxB,CAAlE,GAAiG,IAAxG,IAAgH,IAAhH,GAAuHK,aAAvH,GAAuI,GAAvI,GAA6IC,cAA7I,GAA8J,GAA9J,GAAoKC,cAApK,GAAqL,GAArL,GAA2LC,WAA3L,GAAyM,GAAhN,CAA1B,GAAiP/L,OAAO,SAASgM,MAAT,GAAkB,GAAzB,CAAjP,GAAiR,GAAjR,GAAuRhM,OAAO,SAASyL,SAAT,GAAqB,GAA5B,CAAvR,GAA0T,IA5D1U;QA6DCQ,gBAAgB,WAAWjM,OAAOA,OAAO,YAAYA,OAAO,MAAMqL,SAAN,GAAkB,IAAzB,CAAZ,GAA6C,IAA7C,GAAoDC,KAApD,GAA4D,GAA5D,GAAkEtL,OAAO,SAASuL,KAAT,GAAiB,GAAxB,CAAlE,GAAiG,IAAxG,IAAgH,IAAhH,GAAuHK,aAAvH,GAAuI,GAAvI,GAA6IC,cAA7I,GAA8J,GAA9J,GAAoKK,cAApK,GAAqL,GAArL,GAA2LH,WAA3L,GAAyM,GAAhN,CAAX,GAAkO/L,OAAO,SAASgM,MAAT,GAAkB,GAAzB,CAAlO,GAAkQ,GAAlQ,GAAwQhM,OAAO,SAASyL,SAAT,GAAqB,GAA5B,CAAxQ,GAA2S,IA7D5T;QA8DCC,gBAAgB,OAAOC,OAAP,GAAiB,MAAjB,GAA0B3L,OAAOA,OAAO,YAAYA,OAAO,MAAMqL,SAAN,GAAkB,IAAzB,CAAZ,GAA6C,IAA7C,GAAoDC,KAApD,GAA4D,GAA5D,GAAkEtL,OAAO,SAASuL,KAAT,GAAiB,GAAxB,CAAlE,GAAiG,IAAxG,IAAgH,IAAhH,GAAuHK,aAAvH,GAAuI,GAAvI,GAA6IC,cAA7I,GAA8J,GAA9J,GAAoKC,cAApK,GAAqL,GAArL,GAA2LC,WAA3L,GAAyM,GAAhN,CAA1B,GAAiP/L,OAAO,SAASgM,MAAT,GAAkB,GAAzB,CAAjP,GAAiR,IA9DlS;QA+DCR,eAAe,MAAMxL,OAAO,SAASyL,SAAT,GAAqB,GAA5B,CAAN,GAAyC,IA/DzD;QAgECL,iBAAiB,MAAMpL,OAAO,MAAMqL,SAAN,GAAkB,IAAzB,CAAN,GAAuC,IAAvC,GAA8CC,KAA9C,GAAsD,GAAtD,GAA4DtL,OAAO,SAASuL,KAAT,GAAiB,GAAxB,CAA5D,GAA2F,IAhE7G;WAmEO;oBACO,IAAI/L,MAAJ,CAAWC,MAAM,KAAN,EAAayL,OAAb,EAAsBC,OAAtB,EAA+B,aAA/B,CAAX,EAA0D,GAA1D,CADP;sBAES,IAAI3L,MAAJ,CAAWC,MAAM,WAAN,EAAmBC,YAAnB,EAAiCsL,YAAjC,CAAX,EAA2D,GAA3D,CAFT;kBAGK,IAAIxL,MAAJ,CAAWC,MAAM,iBAAN,EAAyBC,YAAzB,EAAuCsL,YAAvC,CAAX,EAAiE,GAAjE,CAHL;kBAIK,IAAIxL,MAAJ,CAAWC,MAAM,iBAAN,EAAyBC,YAAzB,EAAuCsL,YAAvC,CAAX,EAAiE,GAAjE,CAJL;2BAKc,IAAIxL,MAAJ,CAAWC,MAAM,cAAN,EAAsBC,YAAtB,EAAoCsL,YAApC,CAAX,EAA8D,GAA9D,CALd;mBAMM,IAAIxL,MAAJ,CAAWC,MAAM,QAAN,EAAgBC,YAAhB,EAA8BsL,YAA9B,EAA4C,gBAA5C,EAA8DC,UAA9D,CAAX,EAAsF,GAAtF,CANN;sBAOS,IAAIzL,MAAJ,CAAWC,MAAM,QAAN,EAAgBC,YAAhB,EAA8BsL,YAA9B,EAA4C,gBAA5C,CAAX,EAA0E,GAA1E,CAPT;gBAQG,IAAIxL,MAAJ,CAAWC,MAAM,KAAN,EAAaC,YAAb,EAA2BsL,YAA3B,CAAX,EAAqD,GAArD,CARH;oBASO,IAAIxL,MAAJ,CAAWE,YAAX,EAAyB,GAAzB,CATP;qBAUQ,IAAIF,MAAJ,CAAWC,MAAM,QAAN,EAAgBC,YAAhB,EAA8BqL,UAA9B,CAAX,EAAsD,GAAtD,CAVR;qBAWQ,IAAIvL,MAAJ,CAAWM,YAAX,EAAyB,GAAzB,CAXR;qBAYQ,IAAIN,MAAJ,CAAW,OAAOsL,YAAP,GAAsB,IAAjC,CAZR;qBAaQ,IAAItL,MAAJ,CAAW,WAAWoL,YAAX,GAA0B,GAA1B,GAAgC5K,OAAOA,OAAO,iBAAiBC,QAAjB,GAA4B,MAAnC,IAA6C,GAA7C,GAAmD4K,OAAnD,GAA6D,GAApE,CAAhC,GAA2G,QAAtH,CAbR;KAAP;;AAiBD,mBAAeF,UAAU,KAAV,CAAf;;ADrFA,mBAAeA,UAAU,IAAV,CAAf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADDA;;AACA,IAAMpC,SAAS,UAAf;;;AAGA,IAAMzG,OAAO,EAAb;AACA,IAAMsG,OAAO,CAAb;AACA,IAAMC,OAAO,EAAb;AACA,IAAMkB,OAAO,EAAb;AACA,IAAMG,OAAO,GAAb;AACA,IAAMf,cAAc,EAApB;AACA,IAAMC,WAAW,GAAjB;AACA,IAAMF,YAAY,GAAlB;;;AAGA,IAAMtB,gBAAgB,OAAtB;AACA,IAAMH,gBAAgB,YAAtB;AACA,IAAMoD,kBAAkB,2BAAxB;;;AAGA,IAAMG,SAAS;aACF,iDADE;cAED,gDAFC;kBAGG;CAHlB;;;AAOA,IAAMlB,gBAAgBxH,OAAOsG,IAA7B;AACA,IAAMN,QAAQ4C,KAAK5C,KAAnB;AACA,IAAMH,qBAAqBjJ,OAAO4H,YAAlC;;;;;;;;;;AAUA,SAAS7K,OAAT,CAAegP,IAAf,EAAqB;OACd,IAAIF,UAAJ,CAAeC,OAAOC,IAAP,CAAf,CAAN;;;;;;;;;;;AAWD,SAASnF,GAAT,CAAauE,KAAb,EAAoBO,EAApB,EAAwB;KACjBH,SAAS,EAAf;KACIrN,SAASiN,MAAMjN,MAAnB;QACOA,QAAP,EAAiB;SACTA,MAAP,IAAiBwN,GAAGP,MAAMjN,MAAN,CAAH,CAAjB;;QAEMqN,MAAP;;;;;;;;;;;;;AAaD,SAAS9C,SAAT,CAAmBD,MAAnB,EAA2BkD,EAA3B,EAA+B;KACxBE,QAAQpD,OAAOnI,KAAP,CAAa,GAAb,CAAd;KACIkL,SAAS,EAAb;KACIK,MAAM1N,MAAN,GAAe,CAAnB,EAAsB;;;WAGZ0N,MAAM,CAAN,IAAW,GAApB;WACSA,MAAM,CAAN,CAAT;;;UAGQpD,OAAOnK,OAAP,CAAesN,eAAf,EAAgC,MAAhC,CAAT;KACMF,SAASjD,OAAOnI,KAAP,CAAa,GAAb,CAAf;KACMmL,UAAU5E,IAAI6E,MAAJ,EAAYC,EAAZ,EAAgBzN,IAAhB,CAAqB,GAArB,CAAhB;QACOsN,SAASC,OAAhB;;;;;;;;;;;;;;;;AAgBD,SAASlD,UAAT,CAAoBE,MAApB,EAA4B;KACrBtE,SAAS,EAAf;KACIoH,UAAU,CAAd;KACMpN,SAASsK,OAAOtK,MAAtB;QACOoN,UAAUpN,MAAjB,EAAyB;MAClBkN,QAAQ5C,OAAON,UAAP,CAAkBoD,SAAlB,CAAd;MACIF,SAAS,MAAT,IAAmBA,SAAS,MAA5B,IAAsCE,UAAUpN,MAApD,EAA4D;;OAErDmN,QAAQ7C,OAAON,UAAP,CAAkBoD,SAAlB,CAAd;OACI,CAACD,QAAQ,MAAT,KAAoB,MAAxB,EAAgC;;WACxBlN,IAAP,CAAY,CAAC,CAACiN,QAAQ,KAAT,KAAmB,EAApB,KAA2BC,QAAQ,KAAnC,IAA4C,OAAxD;IADD,MAEO;;;WAGClN,IAAP,CAAYiN,KAAZ;;;GARF,MAWO;UACCjN,IAAP,CAAYiN,KAAZ;;;QAGKlH,MAAP;;;;;;;;;;;AAWD,IAAMmE,aAAa,SAAbA,UAAa;QAASrI,OAAOmK,aAAP,iCAAwBgB,KAAxB,EAAT;CAAnB;;;;;;;;;;;AAWA,IAAMV,eAAe,SAAfA,YAAe,CAASS,SAAT,EAAoB;KACpCA,YAAY,IAAZ,GAAmB,IAAvB,EAA6B;SACrBA,YAAY,IAAnB;;KAEGA,YAAY,IAAZ,GAAmB,IAAvB,EAA6B;SACrBA,YAAY,IAAnB;;KAEGA,YAAY,IAAZ,GAAmB,IAAvB,EAA6B;SACrBA,YAAY,IAAnB;;QAEM9H,IAAP;CAVD;;;;;;;;;;;;;AAwBA,IAAM8F,eAAe,SAAfA,YAAe,CAASsB,KAAT,EAAgBS,IAAhB,EAAsB;;;QAGnCT,QAAQ,EAAR,GAAa,MAAMA,QAAQ,EAAd,CAAb,IAAkC,CAACS,QAAQ,CAAT,KAAe,CAAjD,CAAP;CAHD;;;;;;;AAWA,IAAMnC,QAAQ,SAARA,KAAQ,CAASF,KAAT,EAAgBkC,SAAhB,EAA2BC,SAA3B,EAAsC;KAC/CvB,IAAI,CAAR;SACQuB,YAAY3B,MAAMR,QAAQoC,IAAd,CAAZ,GAAkCpC,SAAS,CAAnD;UACSQ,MAAMR,QAAQkC,SAAd,CAAT;+BAC8BlC,QAAQgC,gBAAgBjB,IAAhB,IAAwB,CAA9D,EAAiEH,KAAKpG,IAAtE,EAA4E;UACnEgG,MAAMR,QAAQgC,aAAd,CAAR;;QAEMxB,MAAMI,IAAI,CAACoB,gBAAgB,CAAjB,IAAsBhC,KAAtB,IAA+BA,QAAQiC,IAAvC,CAAV,CAAP;CAPD;;;;;;;;;AAiBA,IAAMzC,SAAS,SAATA,MAAS,CAAShE,KAAT,EAAgB;;KAExBF,SAAS,EAAf;KACM6F,cAAc3F,MAAMlG,MAA1B;KACIyJ,IAAI,CAAR;KACIgB,IAAIuB,QAAR;KACIT,OAAOQ,WAAX;;;;;;KAMIS,QAAQtG,MAAMrE,WAAN,CAAkBiK,SAAlB,CAAZ;KACIU,QAAQ,CAAZ,EAAe;UACN,CAAR;;;MAGI,IAAIC,IAAI,CAAb,EAAgBA,IAAID,KAApB,EAA2B,EAAEC,CAA7B,EAAgC;;MAE3BvG,MAAM8D,UAAN,CAAiByC,CAAjB,KAAuB,IAA3B,EAAiC;WAC1B,WAAN;;SAEMxM,IAAP,CAAYiG,MAAM8D,UAAN,CAAiByC,CAAjB,CAAZ;;;;;;MAMI,IAAIhF,QAAQ+E,QAAQ,CAAR,GAAYA,QAAQ,CAApB,GAAwB,CAAzC,EAA4C/E,QAAQoE,WAApD,4BAA4F;;;;;;;MAOvFO,OAAO3C,CAAX;OACK,IAAI4C,IAAI,CAAR,EAAWf,IAAIpG,IAApB,qBAA8CoG,KAAKpG,IAAnD,EAAyD;;OAEpDuC,SAASoE,WAAb,EAA0B;YACnB,eAAN;;;OAGKS,QAAQC,aAAarG,MAAM8D,UAAN,CAAiBvC,OAAjB,CAAb,CAAd;;OAEI6E,SAASpH,IAAT,IAAiBoH,QAAQpB,MAAM,CAACS,SAASlC,CAAV,IAAe4C,CAArB,CAA7B,EAAsD;YAC/C,UAAN;;;QAGIC,QAAQD,CAAb;OACMhB,IAAIC,KAAKC,IAAL,GAAYC,IAAZ,GAAoBF,KAAKC,OAAOE,IAAZ,GAAmBA,IAAnB,GAA0BH,IAAIC,IAA5D;;OAEIe,QAAQjB,CAAZ,EAAe;;;;OAITD,aAAalG,OAAOmG,CAA1B;OACIgB,IAAInB,MAAMS,SAASP,UAAf,CAAR,EAAoC;YAC7B,UAAN;;;QAGIA,UAAL;;;MAIKe,MAAMnG,OAAOhG,MAAP,GAAgB,CAA5B;SACO4K,MAAMnB,IAAI2C,IAAV,EAAgBD,GAAhB,EAAqBC,QAAQ,CAA7B,CAAP;;;;MAIIlB,MAAMzB,IAAI0C,GAAV,IAAiBR,SAASlB,CAA9B,EAAiC;WAC1B,UAAN;;;OAGIS,MAAMzB,IAAI0C,GAAV,CAAL;OACKA,GAAL;;;SAGOD,MAAP,CAAczC,GAAd,EAAmB,CAAnB,EAAsBgB,CAAtB;;;QAIM3I,OAAOmK,aAAP,eAAwBjG,MAAxB,CAAP;CAjFD;;;;;;;;;AA2FA,IAAMiE,SAAS,SAATA,MAAS,CAAS/D,KAAT,EAAgB;KACxBF,SAAS,EAAf;;;SAGQoE,WAAWlE,KAAX,CAAR;;;KAGI2F,cAAc3F,MAAMlG,MAAxB;;;KAGIyK,IAAIuB,QAAR;KACItB,QAAQ,CAAZ;KACIa,OAAOQ,WAAX;;;;;;;;uBAG2B7F,KAA3B,8HAAkC;OAAvBwF,cAAuB;;OAC7BA,iBAAe,IAAnB,EAAyB;WACjBzL,IAAP,CAAY8K,mBAAmBW,cAAnB,CAAZ;;;;;;;;;;;;;;;;;;KAIEZ,cAAc9E,OAAOhG,MAAzB;KACI2K,iBAAiBG,WAArB;;;;;;KAMIA,WAAJ,EAAiB;SACT7K,IAAP,CAAY6L,SAAZ;;;;QAIMnB,iBAAiBkB,WAAxB,EAAqC;;;;MAIhCD,IAAID,MAAR;;;;;;yBAC2BzF,KAA3B,mIAAkC;QAAvBwF,YAAuB;;QAC7BA,gBAAgBjB,CAAhB,IAAqBiB,eAAeE,CAAxC,EAA2C;SACtCF,YAAJ;;;;;;;;;;;;;;;;;;;;;MAMIb,wBAAwBF,iBAAiB,CAA/C;MACIiB,IAAInB,CAAJ,GAAQS,MAAM,CAACS,SAASjB,KAAV,IAAmBG,qBAAzB,CAAZ,EAA6D;WACtD,UAAN;;;WAGQ,CAACe,IAAInB,CAAL,IAAUI,qBAAnB;MACIe,CAAJ;;;;;;;yBAE2B1F,KAA3B,mIAAkC;QAAvBwF,aAAuB;;QAC7BA,gBAAejB,CAAf,IAAoB,EAAEC,KAAF,GAAUiB,MAAlC,EAA0C;aACnC,UAAN;;QAEGD,iBAAgBjB,CAApB,EAAuB;;SAElBQ,IAAIP,KAAR;UACK,IAAIY,IAAIpG,IAAb,qBAAuCoG,KAAKpG,IAA5C,EAAkD;UAC3CmG,IAAIC,KAAKC,IAAL,GAAYC,IAAZ,GAAoBF,KAAKC,OAAOE,IAAZ,GAAmBA,IAAnB,GAA0BH,IAAIC,IAA5D;UACIN,IAAII,CAAR,EAAW;;;UAGLF,UAAUF,IAAII,CAApB;UACMD,aAAalG,OAAOmG,CAA1B;aACOpL,IAAP,CACC8K,mBAAmBC,aAAaK,IAAIF,UAAUC,UAA3B,EAAuC,CAAvC,CAAnB,CADD;UAGIF,MAAMC,UAAUC,UAAhB,CAAJ;;;YAGMnL,IAAP,CAAY8K,mBAAmBC,aAAaC,CAAb,EAAgB,CAAhB,CAAnB,CAAZ;YACOL,MAAMF,KAAN,EAAaG,qBAAb,EAAoCF,kBAAkBG,WAAtD,CAAP;aACQ,CAAR;OACEH,cAAF;;;;;;;;;;;;;;;;;;IAIAD,KAAF;IACED,CAAF;;QAGMzE,OAAOjG,IAAP,CAAY,EAAZ,CAAP;CArFD;;;;;;;;;;;;;AAmGA,IAAMyB,YAAY,SAAZA,SAAY,CAAS0E,KAAT,EAAgB;QAC1BqE,UAAUrE,KAAV,EAAiB,UAASoE,MAAT,EAAiB;SACjCE,cAAczE,IAAd,CAAmBuE,MAAnB,IACJJ,OAAOI,OAAO5I,KAAP,CAAa,CAAb,EAAgB/C,WAAhB,EAAP,CADI,GAEJ2L,MAFH;EADM,CAAP;CADD;;;;;;;;;;;;;AAmBA,IAAMhJ,UAAU,SAAVA,OAAU,CAAS4E,KAAT,EAAgB;QACxBqE,UAAUrE,KAAV,EAAiB,UAASoE,MAAT,EAAiB;SACjCD,cAActE,IAAd,CAAmBuE,MAAnB,IACJ,SAASL,OAAOK,MAAP,CADL,GAEJA,MAFH;EADM,CAAP;CADD;;;;;AAWA,IAAMjJ,WAAW;;;;;;YAML,OANK;;;;;;;;SAcR;YACG+I,UADH;YAEGD;EAhBK;WAkBND,MAlBM;WAmBND,MAnBM;YAoBL3I,OApBK;cAqBHE;CArBd,CAwBA;;ADvbA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,AACA,AACA,AACA,AAiDA,AAAO,IAAMzD,UAA6C,EAAnD;AAEP,AAAA,SAAAyC,UAAA,CAA2BuJ,GAA3B,EAAA;QACOJ,IAAII,IAAIC,UAAJ,CAAe,CAAf,CAAV;QACI5I,UAAJ;QAEIuI,IAAI,EAAR,EAAYvI,IAAI,OAAOuI,EAAE5F,QAAF,CAAW,EAAX,EAAezD,WAAf,EAAX,CAAZ,KACK,IAAIqJ,IAAI,GAAR,EAAavI,IAAI,MAAMuI,EAAE5F,QAAF,CAAW,EAAX,EAAezD,WAAf,EAAV,CAAb,KACA,IAAIqJ,IAAI,IAAR,EAAcvI,IAAI,MAAM,CAAEuI,KAAK,CAAN,GAAW,GAAZ,EAAiB5F,QAAjB,CAA0B,EAA1B,EAA8BzD,WAA9B,EAAN,GAAoD,GAApD,GAA0D,CAAEqJ,IAAI,EAAL,GAAW,GAAZ,EAAiB5F,QAAjB,CAA0B,EAA1B,EAA8BzD,WAA9B,EAA9D,CAAd,KACAc,IAAI,MAAM,CAAEuI,KAAK,EAAN,GAAY,GAAb,EAAkB5F,QAAlB,CAA2B,EAA3B,EAA+BzD,WAA/B,EAAN,GAAqD,GAArD,GAA2D,CAAGqJ,KAAK,CAAN,GAAW,EAAZ,GAAkB,GAAnB,EAAwB5F,QAAxB,CAAiC,EAAjC,EAAqCzD,WAArC,EAA3D,GAAgH,GAAhH,GAAsH,CAAEqJ,IAAI,EAAL,GAAW,GAAZ,EAAiB5F,QAAjB,CAA0B,EAA1B,EAA8BzD,WAA9B,EAA1H;WAEEc,CAAP;;AAGD,AAAA,SAAAuB,WAAA,CAA4BD,GAA5B,EAAA;QACK6G,SAAS,EAAb;QACIE,IAAI,CAAR;QACMK,KAAKpH,IAAI1C,MAAf;WAEOyJ,IAAIK,EAAX,EAAe;YACRH,IAAI1C,SAASvE,IAAI8G,MAAJ,CAAWC,IAAI,CAAf,EAAkB,CAAlB,CAAT,EAA+B,EAA/B,CAAV;YAEIE,IAAI,GAAR,EAAa;sBACF7H,OAAO4H,YAAP,CAAoBC,CAApB,CAAV;iBACK,CAAL;SAFD,MAIK,IAAIA,KAAK,GAAL,IAAYA,IAAI,GAApB,EAAyB;gBACxBG,KAAKL,CAAN,IAAY,CAAhB,EAAmB;oBACZG,KAAK3C,SAASvE,IAAI8G,MAAJ,CAAWC,IAAI,CAAf,EAAkB,CAAlB,CAAT,EAA+B,EAA/B,CAAX;0BACU3H,OAAO4H,YAAP,CAAqB,CAACC,IAAI,EAAL,KAAY,CAAb,GAAmBC,KAAK,EAA5C,CAAV;aAFD,MAGO;0BACIlH,IAAI8G,MAAJ,CAAWC,CAAX,EAAc,CAAd,CAAV;;iBAEI,CAAL;SAPI,MASA,IAAIE,KAAK,GAAT,EAAc;gBACbG,KAAKL,CAAN,IAAY,CAAhB,EAAmB;oBACZG,KAAK3C,SAASvE,IAAI8G,MAAJ,CAAWC,IAAI,CAAf,EAAkB,CAAlB,CAAT,EAA+B,EAA/B,CAAX;oBACMI,KAAK5C,SAASvE,IAAI8G,MAAJ,CAAWC,IAAI,CAAf,EAAkB,CAAlB,CAAT,EAA+B,EAA/B,CAAX;0BACU3H,OAAO4H,YAAP,CAAqB,CAACC,IAAI,EAAL,KAAY,EAAb,GAAoB,CAACC,KAAK,EAAN,KAAa,CAAjC,GAAuCC,KAAK,EAAhE,CAAV;aAHD,MAIO;0BACInH,IAAI8G,MAAJ,CAAWC,CAAX,EAAc,CAAd,CAAV;;iBAEI,CAAL;SARI,MAUA;sBACM/G,IAAI8G,MAAJ,CAAWC,CAAX,EAAc,CAAd,CAAV;iBACK,CAAL;;;WAIKF,MAAP;;AAGD,SAAAD,2BAAA,CAAqC3J,UAArC,EAA+DkG,QAA/D,EAAA;aACAxF,gBAAC,CAA0BqC,GAA1B,EAAD;YACQF,SAASG,YAAYD,GAAZ,CAAf;eACQ,CAACF,OAAOzD,KAAP,CAAa8G,SAASpD,UAAtB,CAAD,GAAqCC,GAArC,GAA2CF,MAAnD;;QAGG7C,WAAW1B,MAAf,EAAuB0B,WAAW1B,MAAX,GAAoB6D,OAAOnC,WAAW1B,MAAlB,EAA0BkC,OAA1B,CAAkC0F,SAASzF,WAA3C,EAAwDC,gBAAxD,EAA0E1B,WAA1E,GAAwFwB,OAAxF,CAAgG0F,SAASwD,UAAzG,EAAqH,EAArH,CAApB;QACnB1J,WAAWwF,QAAX,KAAwBlG,SAA5B,EAAuCU,WAAWwF,QAAX,GAAsBrD,OAAOnC,WAAWwF,QAAlB,EAA4BhF,OAA5B,CAAoC0F,SAASzF,WAA7C,EAA0DC,gBAA1D,EAA4EF,OAA5E,CAAoF0F,SAASuD,YAA7F,EAA2G5I,UAA3G,EAAuHL,OAAvH,CAA+H0F,SAASzF,WAAxI,EAAqJE,WAArJ,CAAtB;QACnCX,WAAWmE,IAAX,KAAoB7E,SAAxB,EAAmCU,WAAWmE,IAAX,GAAkBhC,OAAOnC,WAAWmE,IAAlB,EAAwB3D,OAAxB,CAAgC0F,SAASzF,WAAzC,EAAsDC,gBAAtD,EAAwE1B,WAAxE,GAAsFwB,OAAtF,CAA8F0F,SAASsD,QAAvG,EAAiH3I,UAAjH,EAA6HL,OAA7H,CAAqI0F,SAASzF,WAA9I,EAA2JE,WAA3J,CAAlB;QAC/BX,WAAWP,IAAX,KAAoBH,SAAxB,EAAmCU,WAAWP,IAAX,GAAkB0C,OAAOnC,WAAWP,IAAlB,EAAwBe,OAAxB,CAAgC0F,SAASzF,WAAzC,EAAsDC,gBAAtD,EAAwEF,OAAxE,CAAiFR,WAAW1B,MAAX,GAAoB4H,SAASoD,QAA7B,GAAwCpD,SAASqD,iBAAlI,EAAsJ1I,UAAtJ,EAAkKL,OAAlK,CAA0K0F,SAASzF,WAAnL,EAAgME,WAAhM,CAAlB;QAC/BX,WAAWE,KAAX,KAAqBZ,SAAzB,EAAoCU,WAAWE,KAAX,GAAmBiC,OAAOnC,WAAWE,KAAlB,EAAyBM,OAAzB,CAAiC0F,SAASzF,WAA1C,EAAuDC,gBAAvD,EAAyEF,OAAzE,CAAiF0F,SAASmD,SAA1F,EAAqGxI,UAArG,EAAiHL,OAAjH,CAAyH0F,SAASzF,WAAlI,EAA+IE,WAA/I,CAAnB;QAChCX,WAAW8D,QAAX,KAAwBxE,SAA5B,EAAuCU,WAAW8D,QAAX,GAAsB3B,OAAOnC,WAAW8D,QAAlB,EAA4BtD,OAA5B,CAAoC0F,SAASzF,WAA7C,EAA0DC,gBAA1D,EAA4EF,OAA5E,CAAoF0F,SAASkD,YAA7F,EAA2GvI,UAA3G,EAAuHL,OAAvH,CAA+H0F,SAASzF,WAAxI,EAAqJE,WAArJ,CAAtB;WAEhCX,UAAP;;AACA;AAED,SAAAgJ,kBAAA,CAA4BjG,GAA5B,EAAA;WACQA,IAAIvC,OAAJ,CAAY,SAAZ,EAAuB,IAAvB,KAAgC,GAAvC;;AAGD,SAAAyG,cAAA,CAAwB9C,IAAxB,EAAqC+B,QAArC,EAAA;QACOnG,UAAUoE,KAAK/E,KAAL,CAAW8G,SAAS2C,WAApB,KAAoC,EAApD;;iCACoB9I,OAFrB;QAEUmJ,OAFV;;QAIKA,OAAJ,EAAa;eACLA,QAAQ1G,KAAR,CAAc,GAAd,EAAmBuG,GAAnB,CAAuBC,kBAAvB,EAA2C5I,IAA3C,CAAgD,GAAhD,CAAP;KADD,MAEO;eACC+D,IAAP;;;AAIF,SAAA6C,cAAA,CAAwB7C,IAAxB,EAAqC+B,QAArC,EAAA;QACOnG,UAAUoE,KAAK/E,KAAL,CAAW8G,SAASC,WAApB,KAAoC,EAApD;;kCAC0BpG,OAF3B;QAEUmJ,OAFV;QAEmBxB,IAFnB;;QAIKwB,OAAJ,EAAa;oCACUA,QAAQlK,WAAR,GAAsBwD,KAAtB,CAA4B,IAA5B,EAAkC2G,OAAlC,EADV;;YACLL,IADK;YACCG,KADD;;YAENR,cAAcQ,QAAQA,MAAMzG,KAAN,CAAY,GAAZ,EAAiBuG,GAAjB,CAAqBC,kBAArB,CAAR,GAAmD,EAAvE;YACMN,aAAaI,KAAKtG,KAAL,CAAW,GAAX,EAAgBuG,GAAhB,CAAoBC,kBAApB,CAAnB;YACMR,yBAAyBtC,SAAS2C,WAAT,CAAqBzC,IAArB,CAA0BsC,WAAWA,WAAWrI,MAAX,GAAoB,CAA/B,CAA1B,CAA/B;YACMkI,aAAaC,yBAAyB,CAAzB,GAA6B,CAAhD;YACMG,kBAAkBD,WAAWrI,MAAX,GAAoBkI,UAA5C;YACMpI,SAASyI,MAAcL,UAAd,CAAf;aAEK,IAAIlH,IAAI,CAAb,EAAgBA,IAAIkH,UAApB,EAAgC,EAAElH,CAAlC,EAAqC;mBAC7BA,CAAP,IAAYoH,YAAYpH,CAAZ,KAAkBqH,WAAWC,kBAAkBtH,CAA7B,CAAlB,IAAqD,EAAjE;;YAGGmH,sBAAJ,EAA4B;mBACpBD,aAAa,CAApB,IAAyBtB,eAAe9G,OAAOoI,aAAa,CAApB,CAAf,EAAuCrC,QAAvC,CAAzB;;YAGK+B,gBAAgB9H,OAAOmI,MAAP,CAAmD,UAACH,GAAD,EAAME,KAAN,EAAaP,KAAb,EAA3E;gBACO,CAACO,KAAD,IAAUA,UAAU,GAAxB,EAA6B;oBACtBD,cAAcD,IAAIA,IAAI9H,MAAJ,GAAa,CAAjB,CAApB;oBACI+H,eAAeA,YAAYN,KAAZ,GAAoBM,YAAY/H,MAAhC,KAA2CyH,KAA9D,EAAqE;gCACxDzH,MAAZ;iBADD,MAEO;wBACFC,IAAJ,CAAS,EAAEwH,YAAF,EAASzH,QAAS,CAAlB,EAAT;;;mBAGK8H,GAAP;SATqB,EAUnB,EAVmB,CAAtB;YAYMN,oBAAoBI,cAAcC,IAAd,CAAmB,UAACF,CAAD,EAAID,CAAJ;mBAAUA,EAAE1H,MAAF,GAAW2H,EAAE3H,MAAvB;SAAnB,EAAkD,CAAlD,CAA1B;YAEIoH,gBAAJ;YACII,qBAAqBA,kBAAkBxH,MAAlB,GAA2B,CAApD,EAAuD;gBAChDsH,WAAWxH,OAAO4B,KAAP,CAAa,CAAb,EAAgB8F,kBAAkBC,KAAlC,CAAjB;gBACMF,UAAUzH,OAAO4B,KAAP,CAAa8F,kBAAkBC,KAAlB,GAA0BD,kBAAkBxH,MAAzD,CAAhB;sBACUsH,SAASvH,IAAT,CAAc,GAAd,IAAqB,IAArB,GAA4BwH,QAAQxH,IAAR,CAAa,GAAb,CAAtC;SAHD,MAIO;sBACID,OAAOC,IAAP,CAAY,GAAZ,CAAV;;YAGGsH,IAAJ,EAAU;uBACE,MAAMA,IAAjB;;eAGMD,OAAP;KA5CD,MA6CO;eACCtD,IAAP;;;AAIF,IAAMqD,YAAY,iIAAlB;AACA,IAAMD,wBAA4C,EAAD,CAAKnI,KAAL,CAAW,OAAX,EAAqB,CAArB,MAA4BE,SAA7E;AAEA,AAAA,SAAAQ,KAAA,CAAsBqH,SAAtB,EAAA;QAAwClI,OAAxC,uEAA6D,EAA7D;;QACOe,aAA2B,EAAjC;QACMkG,WAAYjH,QAAQuC,GAAR,KAAgB,KAAhB,GAAwB8C,YAAxB,GAAuCD,YAAzD;QAEIpF,QAAQ+G,SAAR,KAAsB,QAA1B,EAAoCmB,YAAY,CAAClI,QAAQX,MAAR,GAAiBW,QAAQX,MAAR,GAAiB,GAAlC,GAAwC,EAAzC,IAA+C,IAA/C,GAAsD6I,SAAlE;QAE9BpH,UAAUoH,UAAU/H,KAAV,CAAgBoI,SAAhB,CAAhB;QAEIzH,OAAJ,EAAa;YACRwH,qBAAJ,EAA2B;;uBAEfjJ,MAAX,GAAoByB,QAAQ,CAAR,CAApB;uBACWyF,QAAX,GAAsBzF,QAAQ,CAAR,CAAtB;uBACWoE,IAAX,GAAkBpE,QAAQ,CAAR,CAAlB;uBACWkE,IAAX,GAAkBqD,SAASvH,QAAQ,CAAR,CAAT,EAAqB,EAArB,CAAlB;uBACWN,IAAX,GAAkBM,QAAQ,CAAR,KAAc,EAAhC;uBACWG,KAAX,GAAmBH,QAAQ,CAAR,CAAnB;uBACW+D,QAAX,GAAsB/D,QAAQ,CAAR,CAAtB;;gBAGIqH,MAAMpH,WAAWiE,IAAjB,CAAJ,EAA4B;2BAChBA,IAAX,GAAkBlE,QAAQ,CAAR,CAAlB;;SAZF,MAcO;;;uBAEKzB,MAAX,GAAoByB,QAAQ,CAAR,KAAcT,SAAlC;uBACWkG,QAAX,GAAuB2B,UAAUE,OAAV,CAAkB,GAAlB,MAA2B,CAAC,CAA5B,GAAgCtH,QAAQ,CAAR,CAAhC,GAA6CT,SAApE;uBACW6E,IAAX,GAAmBgD,UAAUE,OAAV,CAAkB,IAAlB,MAA4B,CAAC,CAA7B,GAAiCtH,QAAQ,CAAR,CAAjC,GAA8CT,SAAjE;uBACW2E,IAAX,GAAkBqD,SAASvH,QAAQ,CAAR,CAAT,EAAqB,EAArB,CAAlB;uBACWN,IAAX,GAAkBM,QAAQ,CAAR,KAAc,EAAhC;uBACWG,KAAX,GAAoBiH,UAAUE,OAAV,CAAkB,GAAlB,MAA2B,CAAC,CAA5B,GAAgCtH,QAAQ,CAAR,CAAhC,GAA6CT,SAAjE;uBACWwE,QAAX,GAAuBqD,UAAUE,OAAV,CAAkB,GAAlB,MAA2B,CAAC,CAA5B,GAAgCtH,QAAQ,CAAR,CAAhC,GAA6CT,SAApE;;gBAGI8H,MAAMpH,WAAWiE,IAAjB,CAAJ,EAA4B;2BAChBA,IAAX,GAAmBkD,UAAU/H,KAAV,CAAgB,+BAAhB,IAAmDW,QAAQ,CAAR,CAAnD,GAAgET,SAAnF;;;YAIEU,WAAWmE,IAAf,EAAqB;;uBAETA,IAAX,GAAkB6C,eAAeC,eAAejH,WAAWmE,IAA1B,EAAgC+B,QAAhC,CAAf,EAA0DA,QAA1D,CAAlB;;;YAIGlG,WAAW1B,MAAX,KAAsBgB,SAAtB,IAAmCU,WAAWwF,QAAX,KAAwBlG,SAA3D,IAAwEU,WAAWmE,IAAX,KAAoB7E,SAA5F,IAAyGU,WAAWiE,IAAX,KAAoB3E,SAA7H,IAA0I,CAACU,WAAWP,IAAtJ,IAA8JO,WAAWE,KAAX,KAAqBZ,SAAvL,EAAkM;uBACtL0G,SAAX,GAAuB,eAAvB;SADD,MAEO,IAAIhG,WAAW1B,MAAX,KAAsBgB,SAA1B,EAAqC;uBAChC0G,SAAX,GAAuB,UAAvB;SADM,MAEA,IAAIhG,WAAW8D,QAAX,KAAwBxE,SAA5B,EAAuC;uBAClC0G,SAAX,GAAuB,UAAvB;SADM,MAEA;uBACKA,SAAX,GAAuB,KAAvB;;;YAIG/G,QAAQ+G,SAAR,IAAqB/G,QAAQ+G,SAAR,KAAsB,QAA3C,IAAuD/G,QAAQ+G,SAAR,KAAsBhG,WAAWgG,SAA5F,EAAuG;uBAC3F9G,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,kBAAkBD,QAAQ+G,SAA1B,GAAsC,aAA7E;;;YAIKrG,gBAAgBvB,QAAQ,CAACa,QAAQX,MAAR,IAAkB0B,WAAW1B,MAA7B,IAAuC,EAAxC,EAA4CU,WAA5C,EAAR,CAAtB;;YAGI,CAACC,QAAQsD,cAAT,KAA4B,CAAC5C,aAAD,IAAkB,CAACA,cAAc4C,cAA7D,CAAJ,EAAkF;;gBAE7EvC,WAAWmE,IAAX,KAAoBlF,QAAQ2E,UAAR,IAAuBjE,iBAAiBA,cAAciE,UAA1E,CAAJ,EAA4F;;oBAEvF;+BACQO,IAAX,GAAkBzC,SAASC,OAAT,CAAiB3B,WAAWmE,IAAX,CAAgB3D,OAAhB,CAAwB0F,SAASzF,WAAjC,EAA8CuC,WAA9C,EAA2DhE,WAA3D,EAAjB,CAAlB;iBADD,CAEE,OAAOyC,CAAP,EAAU;+BACAvC,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,oEAAoEuC,CAA3G;;;;wCAI0BzB,UAA5B,EAAwCqE,YAAxC;SAXD,MAYO;;wCAEsBrE,UAA5B,EAAwCkG,QAAxC;;;YAIGvG,iBAAiBA,cAAcG,KAAnC,EAA0C;0BAC3BA,KAAd,CAAoBE,UAApB,EAAgCf,OAAhC;;KA3EF,MA6EO;mBACKC,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,wBAAvC;;WAGMc,UAAP;;AACA;AAED,SAAAiG,mBAAA,CAA6BjG,UAA7B,EAAuDf,OAAvD,EAAA;QACOiH,WAAYjH,QAAQuC,GAAR,KAAgB,KAAhB,GAAwB8C,YAAxB,GAAuCD,YAAzD;QACMuB,YAA0B,EAAhC;QAEI5F,WAAWwF,QAAX,KAAwBlG,SAA5B,EAAuC;kBAC5BgB,IAAV,CAAeN,WAAWwF,QAA1B;kBACUlF,IAAV,CAAe,GAAf;;QAGGN,WAAWmE,IAAX,KAAoB7E,SAAxB,EAAmC;;kBAExBgB,IAAV,CAAe0G,eAAeC,eAAe9E,OAAOnC,WAAWmE,IAAlB,CAAf,EAAwC+B,QAAxC,CAAf,EAAkEA,QAAlE,EAA4E1F,OAA5E,CAAoF0F,SAASC,WAA7F,EAA0G,UAACe,CAAD,EAAIJ,EAAJ,EAAQC,EAAR;mBAAe,MAAMD,EAAN,IAAYC,KAAK,QAAQA,EAAb,GAAkB,EAA9B,IAAoC,GAAnD;SAA1G,CAAf;;QAGG,OAAO/G,WAAWiE,IAAlB,KAA2B,QAA3B,IAAuC,OAAOjE,WAAWiE,IAAlB,KAA2B,QAAtE,EAAgF;kBACrE3D,IAAV,CAAe,GAAf;kBACUA,IAAV,CAAe6B,OAAOnC,WAAWiE,IAAlB,CAAf;;WAGM2B,UAAUvF,MAAV,GAAmBuF,UAAUxF,IAAV,CAAe,EAAf,CAAnB,GAAwCd,SAA/C;;AACA;AAED,IAAMuH,OAAO,UAAb;AACA,IAAMD,OAAO,aAAb;AACA,IAAMD,OAAO,eAAb;AACA,AACA,IAAMF,OAAO,wBAAb;AAEA,AAAA,SAAAhB,iBAAA,CAAkCc,KAAlC,EAAA;QACOF,SAAuB,EAA7B;WAEOE,MAAMlG,MAAb,EAAqB;YAChBkG,MAAMnH,KAAN,CAAYyH,IAAZ,CAAJ,EAAuB;oBACdN,MAAM/F,OAAN,CAAcqG,IAAd,EAAoB,EAApB,CAAR;SADD,MAEO,IAAIN,MAAMnH,KAAN,CAAYwH,IAAZ,CAAJ,EAAuB;oBACrBL,MAAM/F,OAAN,CAAcoG,IAAd,EAAoB,GAApB,CAAR;SADM,MAEA,IAAIL,MAAMnH,KAAN,CAAYuH,IAAZ,CAAJ,EAAuB;oBACrBJ,MAAM/F,OAAN,CAAcmG,IAAd,EAAoB,GAApB,CAAR;mBACOD,GAAP;SAFM,MAGA,IAAIH,UAAU,GAAV,IAAiBA,UAAU,IAA/B,EAAqC;oBACnC,EAAR;SADM,MAEA;gBACAC,KAAKD,MAAMnH,KAAN,CAAYqH,IAAZ,CAAX;gBACID,EAAJ,EAAQ;oBACDX,IAAIW,GAAG,CAAH,CAAV;wBACQD,MAAMxE,KAAN,CAAY8D,EAAExF,MAAd,CAAR;uBACOC,IAAP,CAAYuF,CAAZ;aAHD,MAIO;sBACA,IAAIS,KAAJ,CAAU,kCAAV,CAAN;;;;WAKID,OAAOjG,IAAP,CAAY,EAAZ,CAAP;;AACA;AAED,AAAA,SAAAR,SAAA,CAA0BI,UAA1B,EAAA;QAAoDf,OAApD,uEAAyE,EAAzE;;QACOiH,WAAYjH,QAAQuC,GAAR,GAAc8C,YAAd,GAA6BD,YAA/C;QACMuB,YAA0B,EAAhC;;QAGMjG,gBAAgBvB,QAAQ,CAACa,QAAQX,MAAR,IAAkB0B,WAAW1B,MAA7B,IAAuC,EAAxC,EAA4CU,WAA5C,EAAR,CAAtB;;QAGIW,iBAAiBA,cAAcC,SAAnC,EAA8CD,cAAcC,SAAd,CAAwBI,UAAxB,EAAoCf,OAApC;QAE1Ce,WAAWmE,IAAf,EAAqB;;YAEhB+B,SAASC,WAAT,CAAqBC,IAArB,CAA0BpG,WAAWmE,IAArC,CAAJ,EAAgD;;;;aAK3C,IAAIlF,QAAQ2E,UAAR,IAAuBjE,iBAAiBA,cAAciE,UAA1D,EAAuE;;oBAEvE;+BACQO,IAAX,GAAmB,CAAClF,QAAQuC,GAAT,GAAeE,SAASC,OAAT,CAAiB3B,WAAWmE,IAAX,CAAgB3D,OAAhB,CAAwB0F,SAASzF,WAAjC,EAA8CuC,WAA9C,EAA2DhE,WAA3D,EAAjB,CAAf,GAA4G0C,SAASG,SAAT,CAAmB7B,WAAWmE,IAA9B,CAA/H;iBADD,CAEE,OAAO1C,CAAP,EAAU;+BACAvC,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,iDAAiD,CAACD,QAAQuC,GAAT,GAAe,OAAf,GAAyB,SAA1E,IAAuF,iBAAvF,GAA2GC,CAAlJ;;;;;gCAMyBzB,UAA5B,EAAwCkG,QAAxC;QAEIjH,QAAQ+G,SAAR,KAAsB,QAAtB,IAAkChG,WAAW1B,MAAjD,EAAyD;kBAC9CgC,IAAV,CAAeN,WAAW1B,MAA1B;kBACUgC,IAAV,CAAe,GAAf;;QAGKwF,YAAYG,oBAAoBjG,UAApB,EAAgCf,OAAhC,CAAlB;QACI6G,cAAcxG,SAAlB,EAA6B;YACxBL,QAAQ+G,SAAR,KAAsB,QAA1B,EAAoC;sBACzB1F,IAAV,CAAe,IAAf;;kBAGSA,IAAV,CAAewF,SAAf;YAEI9F,WAAWP,IAAX,IAAmBO,WAAWP,IAAX,CAAgBiG,MAAhB,CAAuB,CAAvB,MAA8B,GAArD,EAA0D;sBAC/CpF,IAAV,CAAe,GAAf;;;QAIEN,WAAWP,IAAX,KAAoBH,SAAxB,EAAmC;YAC9BuG,IAAI7F,WAAWP,IAAnB;YAEI,CAACR,QAAQ8G,YAAT,KAA0B,CAACpG,aAAD,IAAkB,CAACA,cAAcoG,YAA3D,CAAJ,EAA8E;gBACzEN,kBAAkBI,CAAlB,CAAJ;;YAGGC,cAAcxG,SAAlB,EAA6B;gBACxBuG,EAAErF,OAAF,CAAU,OAAV,EAAmB,MAAnB,CAAJ,CAD4B;;kBAInBF,IAAV,CAAeuF,CAAf;;QAGG7F,WAAWE,KAAX,KAAqBZ,SAAzB,EAAoC;kBACzBgB,IAAV,CAAe,GAAf;kBACUA,IAAV,CAAeN,WAAWE,KAA1B;;QAGGF,WAAW8D,QAAX,KAAwBxE,SAA5B,EAAuC;kBAC5BgB,IAAV,CAAe,GAAf;kBACUA,IAAV,CAAeN,WAAW8D,QAA1B;;WAGM8B,UAAUxF,IAAV,CAAe,EAAf,CAAP,CAxED;;AAyEC;AAED,AAAA,SAAA2E,iBAAA,CAAkCQ,IAAlC,EAAsDD,QAAtD,EAAA;QAA8ErG,OAA9E,uEAAmG,EAAnG;QAAuG0G,iBAAvG;;QACON,SAAuB,EAA7B;QAEI,CAACM,iBAAL,EAAwB;eAChB7F,MAAMF,UAAU2F,IAAV,EAAgBtG,OAAhB,CAAN,EAAgCA,OAAhC,CAAP,CADuB;mBAEZa,MAAMF,UAAU0F,QAAV,EAAoBrG,OAApB,CAAN,EAAoCA,OAApC,CAAX,CAFuB;;cAIdA,WAAW,EAArB;QAEI,CAACA,QAAQE,QAAT,IAAqBmG,SAAShH,MAAlC,EAA0C;eAClCA,MAAP,GAAgBgH,SAAShH,MAAzB;;eAEOkH,QAAP,GAAkBF,SAASE,QAA3B;eACOrB,IAAP,GAAcmB,SAASnB,IAAvB;eACOF,IAAP,GAAcqB,SAASrB,IAAvB;eACOxE,IAAP,GAAcgG,kBAAkBH,SAAS7F,IAAT,IAAiB,EAAnC,CAAd;eACOS,KAAP,GAAeoF,SAASpF,KAAxB;KAPD,MAQO;YACFoF,SAASE,QAAT,KAAsBlG,SAAtB,IAAmCgG,SAASnB,IAAT,KAAkB7E,SAArD,IAAkEgG,SAASrB,IAAT,KAAkB3E,SAAxF,EAAmG;;mBAE3FkG,QAAP,GAAkBF,SAASE,QAA3B;mBACOrB,IAAP,GAAcmB,SAASnB,IAAvB;mBACOF,IAAP,GAAcqB,SAASrB,IAAvB;mBACOxE,IAAP,GAAcgG,kBAAkBH,SAAS7F,IAAT,IAAiB,EAAnC,CAAd;mBACOS,KAAP,GAAeoF,SAASpF,KAAxB;SAND,MAOO;gBACF,CAACoF,SAAS7F,IAAd,EAAoB;uBACZA,IAAP,GAAc8F,KAAK9F,IAAnB;oBACI6F,SAASpF,KAAT,KAAmBZ,SAAvB,EAAkC;2BAC1BY,KAAP,GAAeoF,SAASpF,KAAxB;iBADD,MAEO;2BACCA,KAAP,GAAeqF,KAAKrF,KAApB;;aALF,MAOO;oBACFoF,SAAS7F,IAAT,CAAciG,MAAd,CAAqB,CAArB,MAA4B,GAAhC,EAAqC;2BAC7BjG,IAAP,GAAcgG,kBAAkBH,SAAS7F,IAA3B,CAAd;iBADD,MAEO;wBACF,CAAC8F,KAAKC,QAAL,KAAkBlG,SAAlB,IAA+BiG,KAAKpB,IAAL,KAAc7E,SAA7C,IAA0DiG,KAAKtB,IAAL,KAAc3E,SAAzE,KAAuF,CAACiG,KAAK9F,IAAjG,EAAuG;+BAC/FA,IAAP,GAAc,MAAM6F,SAAS7F,IAA7B;qBADD,MAEO,IAAI,CAAC8F,KAAK9F,IAAV,EAAgB;+BACfA,IAAP,GAAc6F,SAAS7F,IAAvB;qBADM,MAEA;+BACCA,IAAP,GAAc8F,KAAK9F,IAAL,CAAUsC,KAAV,CAAgB,CAAhB,EAAmBwD,KAAK9F,IAAL,CAAUyC,WAAV,CAAsB,GAAtB,IAA6B,CAAhD,IAAqDoD,SAAS7F,IAA5E;;2BAEMA,IAAP,GAAcgG,kBAAkBJ,OAAO5F,IAAzB,CAAd;;uBAEMS,KAAP,GAAeoF,SAASpF,KAAxB;;;mBAGMsF,QAAP,GAAkBD,KAAKC,QAAvB;mBACOrB,IAAP,GAAcoB,KAAKpB,IAAnB;mBACOF,IAAP,GAAcsB,KAAKtB,IAAnB;;eAEM3F,MAAP,GAAgBiH,KAAKjH,MAArB;;WAGMwF,QAAP,GAAkBwB,SAASxB,QAA3B;WAEOuB,MAAP;;AACA;AAED,AAAA,SAAAD,OAAA,CAAwBJ,OAAxB,EAAwCE,WAAxC,EAA4DjG,OAA5D,EAAA;QACOgG,oBAAoBE,OAAO,EAAE7G,QAAS,MAAX,EAAP,EAA4BW,OAA5B,CAA1B;WACOW,UAAUmF,kBAAkBjF,MAAMkF,OAAN,EAAeC,iBAAf,CAAlB,EAAqDnF,MAAMoF,WAAN,EAAmBD,iBAAnB,CAArD,EAA4FA,iBAA5F,EAA+G,IAA/G,CAAV,EAAgIA,iBAAhI,CAAP;;AACA;AAID,AAAA,SAAAH,SAAA,CAA0BD,GAA1B,EAAmC5F,OAAnC,EAAA;QACK,OAAO4F,GAAP,KAAe,QAAnB,EAA6B;cACtBjF,UAAUE,MAAM+E,GAAN,EAAW5F,OAAX,CAAV,EAA+BA,OAA/B,CAAN;KADD,MAEO,IAAI0F,OAAOE,GAAP,MAAgB,QAApB,EAA8B;cAC9B/E,MAAMF,UAAyBiF,GAAzB,EAA8B5F,OAA9B,CAAN,EAA8CA,OAA9C,CAAN;;WAGM4F,GAAP;;AACA;AAID,AAAA,SAAAD,KAAA,CAAsBH,IAAtB,EAAgCC,IAAhC,EAA0CzF,OAA1C,EAAA;QACK,OAAOwF,IAAP,KAAgB,QAApB,EAA8B;eACtB7E,UAAUE,MAAM2E,IAAN,EAAYxF,OAAZ,CAAV,EAAgCA,OAAhC,CAAP;KADD,MAEO,IAAI0F,OAAOF,IAAP,MAAiB,QAArB,EAA+B;eAC9B7E,UAAyB6E,IAAzB,EAA+BxF,OAA/B,CAAP;;QAGG,OAAOyF,IAAP,KAAgB,QAApB,EAA8B;eACtB9E,UAAUE,MAAM4E,IAAN,EAAYzF,OAAZ,CAAV,EAAgCA,OAAhC,CAAP;KADD,MAEO,IAAI0F,OAAOD,IAAP,MAAiB,QAArB,EAA+B;eAC9B9E,UAAyB8E,IAAzB,EAA+BzF,OAA/B,CAAP;;WAGMwF,SAASC,IAAhB;;AACA;AAED,AAAA,SAAAF,eAAA,CAAgCzB,GAAhC,EAA4C9D,OAA5C,EAAA;WACQ8D,OAAOA,IAAIqB,QAAJ,GAAe5D,OAAf,CAAwB,CAACvB,OAAD,IAAY,CAACA,QAAQuC,GAArB,GAA2B6C,aAAaE,MAAxC,GAAiDD,aAAaC,MAAtF,EAA+F1D,UAA/F,CAAd;;AACA;AAED,AAAA,SAAAe,iBAAA,CAAkCmB,GAAlC,EAA8C9D,OAA9C,EAAA;WACQ8D,OAAOA,IAAIqB,QAAJ,GAAe5D,OAAf,CAAwB,CAACvB,OAAD,IAAY,CAACA,QAAQuC,GAArB,GAA2B6C,aAAa5D,WAAxC,GAAsD6D,aAAa7D,WAA3F,EAAyGuC,WAAzG,CAAd;CACA;;ADziBD,IAAMzD,UAA2B;YACvB,MADuB;gBAGnB,IAHmB;WAKxB,eAAUS,UAAV,EAAoCf,OAApC,EAAT;;YAEM,CAACe,WAAWmE,IAAhB,EAAsB;uBACVjF,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,6BAAvC;;eAGMc,UAAP;KAX+B;eAcpB,mBAAUA,UAAV,EAAoCf,OAApC,EAAb;YACQ+E,SAAS7B,OAAOnC,WAAW1B,MAAlB,EAA0BU,WAA1B,OAA4C,OAA3D;;YAGIgB,WAAWiE,IAAX,MAAqBD,SAAS,GAAT,GAAe,EAApC,KAA2ChE,WAAWiE,IAAX,KAAoB,EAAnE,EAAuE;uBAC3DA,IAAX,GAAkB3E,SAAlB;;;YAIG,CAACU,WAAWP,IAAhB,EAAsB;uBACVA,IAAX,GAAkB,GAAlB;;;;;eAOMO,UAAP;;CA/BF,CAmCA;;ADlCA,IAAMT,YAA2B;YACvB,OADuB;gBAEnBX,QAAKgF,UAFc;WAGxBhF,QAAKkB,KAHmB;eAIpBlB,QAAKgB;CAJlB,CAOA;;ADHA,SAAAsE,QAAA,CAAkBL,YAAlB,EAAA;WACQ,OAAOA,aAAaG,MAApB,KAA+B,SAA/B,GAA2CH,aAAaG,MAAxD,GAAiE7B,OAAO0B,aAAavF,MAApB,EAA4BU,WAA5B,OAA8C,KAAtH;;;AAID,IAAMO,YAA2B;YACvB,IADuB;gBAGnB,IAHmB;WAKxB,eAAUS,UAAV,EAAoCf,OAApC,EAAT;YACQ4E,eAAe7D,UAArB;;qBAGagE,MAAb,GAAsBE,SAASL,YAAT,CAAtB;;qBAGaE,YAAb,GAA4B,CAACF,aAAapE,IAAb,IAAqB,GAAtB,KAA8BoE,aAAa3D,KAAb,GAAqB,MAAM2D,aAAa3D,KAAxC,GAAgD,EAA9E,CAA5B;qBACaT,IAAb,GAAoBH,SAApB;qBACaY,KAAb,GAAqBZ,SAArB;eAEOuE,YAAP;KAhB+B;eAmBpB,mBAAUA,YAAV,EAAqC5E,OAArC,EAAb;;YAEM4E,aAAaI,IAAb,MAAuBC,SAASL,YAAT,IAAyB,GAAzB,GAA+B,EAAtD,KAA6DA,aAAaI,IAAb,KAAsB,EAAvF,EAA2F;yBAC7EA,IAAb,GAAoB3E,SAApB;;;YAIG,OAAOuE,aAAaG,MAApB,KAA+B,SAAnC,EAA8C;yBAChC1F,MAAb,GAAuBuF,aAAaG,MAAb,GAAsB,KAAtB,GAA8B,IAArD;yBACaA,MAAb,GAAsB1E,SAAtB;;;YAIGuE,aAAaE,YAAjB,EAA+B;wCACRF,aAAaE,YAAb,CAA0BvB,KAA1B,CAAgC,GAAhC,CADQ;;gBACvB/C,IADuB;gBACjBS,KADiB;;yBAEjBT,IAAb,GAAqBA,QAAQA,SAAS,GAAjB,GAAuBA,IAAvB,GAA8BH,SAAnD;yBACaY,KAAb,GAAqBA,KAArB;yBACa6D,YAAb,GAA4BzE,SAA5B;;;qBAIYwE,QAAb,GAAwBxE,SAAxB;eAEOuE,YAAP;;CA1CF,CA8CA;;ADvDA,IAAMtE,YAA2B;YACvB,KADuB;gBAEnBb,UAAGkF,UAFgB;WAGxBlF,UAAGoB,KAHqB;eAIpBpB,UAAGkB;CAJhB,CAOA;;ADMA,IAAMoB,IAAkB,EAAxB;AACA,IAAM2C,QAAQ,IAAd;;AAGA,IAAMR,eAAe,4BAA4BQ,QAAQ,2EAAR,GAAsF,EAAlH,IAAwH,GAA7I;AACA,IAAMD,WAAW,aAAjB;AACA,IAAMH,eAAeE,OAAOA,OAAO,YAAYC,QAAZ,GAAuB,GAAvB,GAA6BA,QAA7B,GAAwCA,QAAxC,GAAmD,GAAnD,GAAyDA,QAAzD,GAAoEA,QAA3E,IAAuF,GAAvF,GAA6FD,OAAO,gBAAgBC,QAAhB,GAA2B,GAA3B,GAAiCA,QAAjC,GAA4CA,QAAnD,CAA7F,GAA4J,GAA5J,GAAkKD,OAAO,MAAMC,QAAN,GAAiBA,QAAxB,CAAzK,CAArB;;;;;;;;;;;;AAaA,IAAML,UAAU,uDAAhB;AACA,IAAMG,UAAU,4DAAhB;AACA,IAAMF,UAAUJ,MAAMM,OAAN,EAAe,YAAf,CAAhB;AACA,AACA,AACA,AACA,AAEA,AAEA,IAAMJ,gBAAgB,qCAAtB;AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AACA,AAEA,IAAMN,aAAa,IAAIG,MAAJ,CAAWE,YAAX,EAAyB,GAAzB,CAAnB;AACA,IAAM1C,cAAc,IAAIwC,MAAJ,CAAWM,YAAX,EAAyB,GAAzB,CAApB;AACA,IAAMtB,iBAAiB,IAAIgB,MAAJ,CAAWC,MAAM,KAAN,EAAaG,OAAb,EAAsB,OAAtB,EAA+B,OAA/B,EAAwCC,OAAxC,CAAX,EAA6D,GAA7D,CAAvB;AACA,AACA,IAAM1C,aAAa,IAAIqC,MAAJ,CAAWC,MAAM,KAAN,EAAaC,YAAb,EAA2BC,aAA3B,CAAX,EAAsD,GAAtD,CAAnB;AACA,IAAMrC,cAAcH,UAApB;AACA,AACA,AAEA,SAAAF,gBAAA,CAA0BqC,GAA1B,EAAA;QACOF,SAASG,YAAYD,GAAZ,CAAf;WACQ,CAACF,OAAOzD,KAAP,CAAa0D,UAAb,CAAD,GAA4BC,GAA5B,GAAkCF,MAA1C;;AAGD,IAAMtD,YAA8C;YAC1C,QAD0C;WAG3C,kBAAUS,UAAV,EAAoCf,OAApC,EAAT;YACQgC,mBAAmBjB,UAAzB;YACMoB,KAAKH,iBAAiBG,EAAjB,GAAuBH,iBAAiBxB,IAAjB,GAAwBwB,iBAAiBxB,IAAjB,CAAsB+C,KAAtB,CAA4B,GAA5B,CAAxB,GAA2D,EAA7F;yBACiB/C,IAAjB,GAAwBH,SAAxB;YAEI2B,iBAAiBf,KAArB,EAA4B;gBACvBuC,iBAAiB,KAArB;gBACM3B,UAAwB,EAA9B;gBACM8B,UAAU3B,iBAAiBf,KAAjB,CAAuBsC,KAAvB,CAA6B,GAA7B,CAAhB;iBAEK,IAAInB,IAAI,CAAR,EAAWe,KAAKQ,QAAQvC,MAA7B,EAAqCgB,IAAIe,EAAzC,EAA6C,EAAEf,CAA/C,EAAkD;oBAC3CqB,SAASE,QAAQvB,CAAR,EAAWmB,KAAX,CAAiB,GAAjB,CAAf;wBAEQE,OAAO,CAAP,CAAR;yBACM,IAAL;4BACOC,UAAUD,OAAO,CAAP,EAAUF,KAAV,CAAgB,GAAhB,CAAhB;6BACK,IAAInB,KAAI,CAAR,EAAWe,MAAKO,QAAQtC,MAA7B,EAAqCgB,KAAIe,GAAzC,EAA6C,EAAEf,EAA/C,EAAkD;+BAC9Cf,IAAH,CAAQqC,QAAQtB,EAAR,CAAR;;;yBAGG,SAAL;yCACkBF,OAAjB,GAA2BS,kBAAkBc,OAAO,CAAP,CAAlB,EAA6BzD,OAA7B,CAA3B;;yBAEI,MAAL;yCACkBiC,IAAjB,GAAwBU,kBAAkBc,OAAO,CAAP,CAAlB,EAA6BzD,OAA7B,CAAxB;;;yCAGiB,IAAjB;gCACQ2C,kBAAkBc,OAAO,CAAP,CAAlB,EAA6BzD,OAA7B,CAAR,IAAiD2C,kBAAkBc,OAAO,CAAP,CAAlB,EAA6BzD,OAA7B,CAAjD;;;;gBAKCwD,cAAJ,EAAoBxB,iBAAiBH,OAAjB,GAA2BA,OAA3B;;yBAGJZ,KAAjB,GAAyBZ,SAAzB;aAEK,IAAI+B,MAAI,CAAR,EAAWe,OAAKhB,GAAGf,MAAxB,EAAgCgB,MAAIe,IAApC,EAAwC,EAAEf,GAA1C,EAA6C;gBACtCiB,OAAOlB,GAAGC,GAAH,EAAMmB,KAAN,CAAY,GAAZ,CAAb;iBAEK,CAAL,IAAUZ,kBAAkBU,KAAK,CAAL,CAAlB,CAAV;gBAEI,CAACrD,QAAQsD,cAAb,EAA6B;;oBAExB;yBACE,CAAL,IAAUb,SAASC,OAAT,CAAiBC,kBAAkBU,KAAK,CAAL,CAAlB,EAA2BrD,OAA3B,EAAoCD,WAApC,EAAjB,CAAV;iBADD,CAEE,OAAOyC,CAAP,EAAU;qCACMvC,KAAjB,GAAyB+B,iBAAiB/B,KAAjB,IAA0B,6EAA6EuC,CAAhI;;aALF,MAOO;qBACD,CAAL,IAAUG,kBAAkBU,KAAK,CAAL,CAAlB,EAA2BrD,OAA3B,EAAoCD,WAApC,EAAV;;eAGEqC,GAAH,IAAQiB,KAAKlC,IAAL,CAAU,GAAV,CAAR;;eAGMa,gBAAP;KA5DkD;eA+DvC,sBAAUA,gBAAV,EAA6ChC,OAA7C,EAAb;YACQe,aAAaiB,gBAAnB;YACMG,KAAKiB,QAAQpB,iBAAiBG,EAAzB,CAAX;YACIA,EAAJ,EAAQ;iBACF,IAAIC,IAAI,CAAR,EAAWe,KAAKhB,GAAGf,MAAxB,EAAgCgB,IAAIe,EAApC,EAAwC,EAAEf,CAA1C,EAA6C;oBACtCS,SAASK,OAAOf,GAAGC,CAAH,CAAP,CAAf;oBACMW,QAAQF,OAAOI,WAAP,CAAmB,GAAnB,CAAd;oBACMZ,YAAaQ,OAAOC,KAAP,CAAa,CAAb,EAAgBC,KAAhB,CAAD,CAAyBxB,OAAzB,CAAiCC,WAAjC,EAA8CC,gBAA9C,EAAgEF,OAAhE,CAAwEC,WAAxE,EAAqFE,WAArF,EAAkGH,OAAlG,CAA0GyB,cAA1G,EAA0HpB,UAA1H,CAAlB;oBACIU,SAASO,OAAOC,KAAP,CAAaC,QAAQ,CAArB,CAAb;;oBAGI;6BACO,CAAC/C,QAAQuC,GAAT,GAAeE,SAASC,OAAT,CAAiBC,kBAAkBL,MAAlB,EAA0BtC,OAA1B,EAAmCD,WAAnC,EAAjB,CAAf,GAAoF0C,SAASG,SAAT,CAAmBN,MAAnB,CAA9F;iBADD,CAEE,OAAOE,CAAP,EAAU;+BACAvC,KAAX,GAAmBc,WAAWd,KAAX,IAAoB,0DAA0D,CAACD,QAAQuC,GAAT,GAAe,OAAf,GAAyB,SAAnF,IAAgG,iBAAhG,GAAoHC,CAA3J;;mBAGEJ,CAAH,IAAQC,YAAY,GAAZ,GAAkBC,MAA1B;;uBAGU9B,IAAX,GAAkB2B,GAAGhB,IAAH,CAAQ,GAAR,CAAlB;;YAGKU,UAAUG,iBAAiBH,OAAjB,GAA2BG,iBAAiBH,OAAjB,IAA4B,EAAvE;YAEIG,iBAAiBE,OAArB,EAA8BL,QAAQ,SAAR,IAAqBG,iBAAiBE,OAAtC;YAC1BF,iBAAiBC,IAArB,EAA2BJ,QAAQ,MAAR,IAAkBG,iBAAiBC,IAAnC;YAErBf,SAAS,EAAf;aACK,IAAMI,IAAX,IAAmBO,OAAnB,EAA4B;gBACvBA,QAAQP,IAAR,MAAkBS,EAAET,IAAF,CAAtB,EAA+B;uBACvBD,IAAP,CACCC,KAAKC,OAAL,CAAaC,WAAb,EAA0BC,gBAA1B,EAA4CF,OAA5C,CAAoDC,WAApD,EAAiEE,WAAjE,EAA8EH,OAA9E,CAAsFI,UAAtF,EAAkGC,UAAlG,IACA,GADA,GAEAC,QAAQP,IAAR,EAAcC,OAAd,CAAsBC,WAAtB,EAAmCC,gBAAnC,EAAqDF,OAArD,CAA6DC,WAA7D,EAA0EE,WAA1E,EAAuFH,OAAvF,CAA+FO,WAA/F,EAA4GF,UAA5G,CAHD;;;YAOEV,OAAOE,MAAX,EAAmB;uBACPH,KAAX,GAAmBC,OAAOC,IAAP,CAAY,GAAZ,CAAnB;;eAGMJ,UAAP;;CAzGF,CA6GA;;ADnKA,IAAMC,YAAY,iBAAlB;AACA,AAEA;AACA,IAAMV,YAAqD;YACjD,KADiD;WAGlD,kBAAUS,UAAV,EAAoCf,OAApC,EAAT;YACQc,UAAUC,WAAWP,IAAX,IAAmBO,WAAWP,IAAX,CAAgBL,KAAhB,CAAsBa,SAAtB,CAAnC;YACIpB,gBAAgBmB,UAApB;YAEID,OAAJ,EAAa;gBACNzB,SAASW,QAAQX,MAAR,IAAkBO,cAAcP,MAAhC,IAA0C,KAAzD;gBACMoB,MAAMK,QAAQ,CAAR,EAAWf,WAAX,EAAZ;gBACMF,MAAMiB,QAAQ,CAAR,CAAZ;gBACMF,YAAevB,MAAf,UAAyBW,QAAQS,GAAR,IAAeA,GAAxC,CAAN;gBACMC,gBAAgBvB,QAAQyB,SAAR,CAAtB;0BAEcH,GAAd,GAAoBA,GAApB;0BACcZ,GAAd,GAAoBA,GAApB;0BACcW,IAAd,GAAqBH,SAArB;gBAEIK,aAAJ,EAAmB;gCACFA,cAAcG,KAAd,CAAoBjB,aAApB,EAAmCI,OAAnC,CAAhB;;SAZF,MAcO;0BACQC,KAAd,GAAsBL,cAAcK,KAAd,IAAuB,wBAA7C;;eAGML,aAAP;KAzByD;eA4B9C,sBAAUA,aAAV,EAAuCI,OAAvC,EAAb;YACQX,SAASW,QAAQX,MAAR,IAAkBO,cAAcP,MAAhC,IAA0C,KAAzD;YACMoB,MAAMb,cAAca,GAA1B;YACMG,YAAevB,MAAf,UAAyBW,QAAQS,GAAR,IAAeA,GAAxC,CAAN;YACMC,gBAAgBvB,QAAQyB,SAAR,CAAtB;YAEIF,aAAJ,EAAmB;4BACFA,cAAcC,SAAd,CAAwBf,aAAxB,EAAuCI,OAAvC,CAAhB;;YAGKO,gBAAgBX,aAAtB;YACMC,MAAMD,cAAcC,GAA1B;sBACcW,IAAd,IAAwBC,OAAOT,QAAQS,GAAvC,UAA8CZ,GAA9C;eAEOU,aAAP;;CA1CF,CA8CA;;AD5DA,IAAMH,OAAO,0DAAb;AACA,AAEA;AACA,IAAME,YAAsE;YAClE,UADkE;WAGnE,eAAUV,aAAV,EAAuCI,OAAvC,EAAT;YACQF,iBAAiBF,aAAvB;uBACeR,IAAf,GAAsBU,eAAeD,GAArC;uBACeA,GAAf,GAAqBQ,SAArB;YAEI,CAACL,QAAQE,QAAT,KAAsB,CAACJ,eAAeV,IAAhB,IAAwB,CAACU,eAAeV,IAAf,CAAoBe,KAApB,CAA0BC,IAA1B,CAA/C,CAAJ,EAAqF;2BACrEH,KAAf,GAAuBH,eAAeG,KAAf,IAAwB,oBAA/C;;eAGMH,cAAP;KAZ0E;eAe/D,mBAAUA,cAAV,EAAyCE,OAAzC,EAAb;YACQJ,gBAAgBE,cAAtB;;sBAEcD,GAAd,GAAoB,CAACC,eAAeV,IAAf,IAAuB,EAAxB,EAA4BW,WAA5B,EAApB;eACOH,aAAP;;CAnBF,CAuBA;;ADhCAT,QAAQQ,QAAKN,MAAb,IAAuBM,OAAvB;AAEA,AACAR,QAAQO,UAAML,MAAd,IAAwBK,SAAxB;AAEA,AACAP,QAAQM,UAAGJ,MAAX,IAAqBI,SAArB;AAEA,AACAN,QAAQK,UAAIH,MAAZ,IAAsBG,SAAtB;AAEA,AACAL,QAAQI,UAAOF,MAAf,IAAyBE,SAAzB;AAEA,AACAJ,QAAQG,UAAID,MAAZ,IAAsBC,SAAtB;AAEA,AACAH,QAAQC,UAAKC,MAAb,IAAuBD,SAAvB,CAEA;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.min.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.min.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.min.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.min.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,59 @@ +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.min.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.min.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/es5/uri.all.min.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/es5/uri.all.min.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,3 @@ +/** @license URI.js v4.4.0 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js */ +!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):r(e.URI=e.URI||{})}(this,function(e){"use strict";function r(){for(var e=arguments.length,r=Array(e),n=0;n1){r[0]=r[0].slice(0,-1);for(var t=r.length-1,o=1;o1&&(t=n[0]+"@",e=n[1]),e=e.replace(j,"."),t+f(e.split("."),r).join(".")}function p(e){for(var r=[],n=0,t=e.length;n=55296&&o<=56319&&n>6|192).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase():"%"+(r>>12|224).toString(16).toUpperCase()+"%"+(r>>6&63|128).toString(16).toUpperCase()+"%"+(63&r|128).toString(16).toUpperCase()}function d(e){for(var r="",n=0,t=e.length;n=194&&o<224){if(t-n>=6){var a=parseInt(e.substr(n+4,2),16);r+=String.fromCharCode((31&o)<<6|63&a)}else r+=e.substr(n,6);n+=6}else if(o>=224){if(t-n>=9){var i=parseInt(e.substr(n+4,2),16),u=parseInt(e.substr(n+7,2),16);r+=String.fromCharCode((15&o)<<12|(63&i)<<6|63&u)}else r+=e.substr(n,9);n+=9}else r+=e.substr(n,3),n+=3}return r}function l(e,r){function n(e){var n=d(e);return n.match(r.UNRESERVED)?n:e}return e.scheme&&(e.scheme=String(e.scheme).replace(r.PCT_ENCODED,n).toLowerCase().replace(r.NOT_SCHEME,"")),e.userinfo!==undefined&&(e.userinfo=String(e.userinfo).replace(r.PCT_ENCODED,n).replace(r.NOT_USERINFO,h).replace(r.PCT_ENCODED,o)),e.host!==undefined&&(e.host=String(e.host).replace(r.PCT_ENCODED,n).toLowerCase().replace(r.NOT_HOST,h).replace(r.PCT_ENCODED,o)),e.path!==undefined&&(e.path=String(e.path).replace(r.PCT_ENCODED,n).replace(e.scheme?r.NOT_PATH:r.NOT_PATH_NOSCHEME,h).replace(r.PCT_ENCODED,o)),e.query!==undefined&&(e.query=String(e.query).replace(r.PCT_ENCODED,n).replace(r.NOT_QUERY,h).replace(r.PCT_ENCODED,o)),e.fragment!==undefined&&(e.fragment=String(e.fragment).replace(r.PCT_ENCODED,n).replace(r.NOT_FRAGMENT,h).replace(r.PCT_ENCODED,o)),e}function m(e){return e.replace(/^0*(.*)/,"$1")||"0"}function g(e,r){var n=e.match(r.IPV4ADDRESS)||[],t=T(n,2),o=t[1];return o?o.split(".").map(m).join("."):e}function v(e,r){var n=e.match(r.IPV6ADDRESS)||[],t=T(n,3),o=t[1],a=t[2];if(o){for(var i=o.toLowerCase().split("::").reverse(),u=T(i,2),s=u[0],f=u[1],c=f?f.split(":").map(m):[],p=s.split(":").map(m),h=r.IPV4ADDRESS.test(p[p.length-1]),d=h?7:8,l=p.length-d,v=Array(d),E=0;E1){var A=v.slice(0,y.index),D=v.slice(y.index+y.length);S=A.join(":")+"::"+D.join(":")}else S=v.join(":");return a&&(S+="%"+a),S}return e}function E(e){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},n={},t=!1!==r.iri?R:F;"suffix"===r.reference&&(e=(r.scheme?r.scheme+":":"")+"//"+e);var o=e.match(K);if(o){W?(n.scheme=o[1],n.userinfo=o[3],n.host=o[4],n.port=parseInt(o[5],10),n.path=o[6]||"",n.query=o[7],n.fragment=o[8],isNaN(n.port)&&(n.port=o[5])):(n.scheme=o[1]||undefined,n.userinfo=-1!==e.indexOf("@")?o[3]:undefined,n.host=-1!==e.indexOf("//")?o[4]:undefined,n.port=parseInt(o[5],10),n.path=o[6]||"",n.query=-1!==e.indexOf("?")?o[7]:undefined,n.fragment=-1!==e.indexOf("#")?o[8]:undefined,isNaN(n.port)&&(n.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?o[4]:undefined)),n.host&&(n.host=v(g(n.host,t),t)),n.scheme!==undefined||n.userinfo!==undefined||n.host!==undefined||n.port!==undefined||n.path||n.query!==undefined?n.scheme===undefined?n.reference="relative":n.fragment===undefined?n.reference="absolute":n.reference="uri":n.reference="same-document",r.reference&&"suffix"!==r.reference&&r.reference!==n.reference&&(n.error=n.error||"URI is not a "+r.reference+" reference.");var a=J[(r.scheme||n.scheme||"").toLowerCase()];if(r.unicodeSupport||a&&a.unicodeSupport)l(n,t);else{if(n.host&&(r.domainHost||a&&a.domainHost))try{n.host=B.toASCII(n.host.replace(t.PCT_ENCODED,d).toLowerCase())}catch(i){n.error=n.error||"Host's domain name can not be converted to ASCII via punycode: "+i}l(n,F)}a&&a.parse&&a.parse(n,r)}else n.error=n.error||"URI can not be parsed.";return n}function C(e,r){var n=!1!==r.iri?R:F,t=[];return e.userinfo!==undefined&&(t.push(e.userinfo),t.push("@")),e.host!==undefined&&t.push(v(g(String(e.host),n),n).replace(n.IPV6ADDRESS,function(e,r,n){return"["+r+(n?"%25"+n:"")+"]"})),"number"!=typeof e.port&&"string"!=typeof e.port||(t.push(":"),t.push(String(e.port))),t.length?t.join(""):undefined}function y(e){for(var r=[];e.length;)if(e.match(X))e=e.replace(X,"");else if(e.match(ee))e=e.replace(ee,"/");else if(e.match(re))e=e.replace(re,"/"),r.pop();else if("."===e||".."===e)e="";else{var n=e.match(ne);if(!n)throw new Error("Unexpected dot segment condition");var t=n[0];e=e.slice(t.length),r.push(t)}return r.join("")}function S(e){var r=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{},n=r.iri?R:F,t=[],o=J[(r.scheme||e.scheme||"").toLowerCase()];if(o&&o.serialize&&o.serialize(e,r),e.host)if(n.IPV6ADDRESS.test(e.host));else if(r.domainHost||o&&o.domainHost)try{e.host=r.iri?B.toUnicode(e.host):B.toASCII(e.host.replace(n.PCT_ENCODED,d).toLowerCase())}catch(u){e.error=e.error||"Host's domain name can not be converted to "+(r.iri?"Unicode":"ASCII")+" via punycode: "+u}l(e,n),"suffix"!==r.reference&&e.scheme&&(t.push(e.scheme),t.push(":"));var a=C(e,r);if(a!==undefined&&("suffix"!==r.reference&&t.push("//"),t.push(a),e.path&&"/"!==e.path.charAt(0)&&t.push("/")),e.path!==undefined){var i=e.path;r.absolutePath||o&&o.absolutePath||(i=y(i)),a===undefined&&(i=i.replace(/^\/\//,"/%2F")),t.push(i)}return e.query!==undefined&&(t.push("?"),t.push(e.query)),e.fragment!==undefined&&(t.push("#"),t.push(e.fragment)),t.join("")}function A(e,r){var n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{},t=arguments[3],o={};return t||(e=E(S(e,n),n),r=E(S(r,n),n)),n=n||{},!n.tolerant&&r.scheme?(o.scheme=r.scheme,o.userinfo=r.userinfo,o.host=r.host,o.port=r.port,o.path=y(r.path||""),o.query=r.query):(r.userinfo!==undefined||r.host!==undefined||r.port!==undefined?(o.userinfo=r.userinfo,o.host=r.host,o.port=r.port,o.path=y(r.path||""),o.query=r.query):(r.path?("/"===r.path.charAt(0)?o.path=y(r.path):(e.userinfo===undefined&&e.host===undefined&&e.port===undefined||e.path?e.path?o.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+r.path:o.path=r.path:o.path="/"+r.path,o.path=y(o.path)),o.query=r.query):(o.path=e.path,r.query!==undefined?o.query=r.query:o.query=e.query),o.userinfo=e.userinfo,o.host=e.host,o.port=e.port),o.scheme=e.scheme),o.fragment=r.fragment,o}function D(e,r,n){var t=i({scheme:"null"},n);return S(A(E(e,t),E(r,t),t,!0),t)}function w(e,r){return"string"==typeof e?e=S(E(e,r),r):"object"===t(e)&&(e=E(S(e,r),r)),e}function b(e,r,n){return"string"==typeof e?e=S(E(e,n),n):"object"===t(e)&&(e=S(e,n)),"string"==typeof r?r=S(E(r,n),n):"object"===t(r)&&(r=S(r,n)),e===r}function x(e,r){return e&&e.toString().replace(r&&r.iri?R.ESCAPE:F.ESCAPE,h)}function O(e,r){return e&&e.toString().replace(r&&r.iri?R.PCT_ENCODED:F.PCT_ENCODED,d)}function N(e){return"boolean"==typeof e.secure?e.secure:"wss"===String(e.scheme).toLowerCase()}function I(e){var r=d(e);return r.match(he)?r:e}var F=u(!1),R=u(!0),T=function(){function e(e,r){var n=[],t=!0,o=!1,a=undefined;try{for(var i,u=e[Symbol.iterator]();!(t=(i=u.next()).done)&&(n.push(i.value),!r||n.length!==r);t=!0);}catch(s){o=!0,a=s}finally{try{!t&&u["return"]&&u["return"]()}finally{if(o)throw a}}return n}return function(r,n){if(Array.isArray(r))return r;if(Symbol.iterator in Object(r))return e(r,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),_=function(e){if(Array.isArray(e)){for(var r=0,n=Array(e.length);r= 0x80 (not a basic code point)","invalid-input":"Invalid input"},z=Math.floor,L=String.fromCharCode,$=function(e){return String.fromCodePoint.apply(String,_(e))},M=function(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:36},V=function(e,r){return e+22+75*(e<26)-((0!=r)<<5)},k=function(e,r,n){var t=0;for(e=n?z(e/700):e>>1,e+=z(e/r);e>455;t+=36)e=z(e/35);return z(t+36*e/(e+38))},Z=function(e){var r=[],n=e.length,t=0,o=128,a=72,i=e.lastIndexOf("-");i<0&&(i=0);for(var u=0;u=128&&s("not-basic"),r.push(e.charCodeAt(u));for(var f=i>0?i+1:0;f=n&&s("invalid-input");var d=M(e.charCodeAt(f++));(d>=36||d>z((P-t)/p))&&s("overflow"),t+=d*p;var l=h<=a?1:h>=a+26?26:h-a;if(dz(P/m)&&s("overflow"),p*=m}var g=r.length+1;a=k(t-c,g,0==c),z(t/g)>P-o&&s("overflow"),o+=z(t/g),t%=g,r.splice(t++,0,o)}return String.fromCodePoint.apply(String,r)},G=function(e){var r=[];e=p(e);var n=e.length,t=128,o=0,a=72,i=!0,u=!1,f=undefined;try{for(var c,h=e[Symbol.iterator]();!(i=(c=h.next()).done);i=!0){var d=c.value;d<128&&r.push(L(d))}}catch(U){u=!0,f=U}finally{try{!i&&h["return"]&&h["return"]()}finally{if(u)throw f}}var l=r.length,m=l;for(l&&r.push("-");m=t&&Az((P-o)/D)&&s("overflow"),o+=(g-t)*D,t=g;var w=!0,b=!1,x=undefined;try{for(var O,N=e[Symbol.iterator]();!(w=(O=N.next()).done);w=!0){var I=O.value;if(IP&&s("overflow"),I==t){for(var F=o,R=36;;R+=36){var T=R<=a?1:R>=a+26?26:R-a;if(FA-Z\\x5E-\\x7E]",'[\\"\\\\]'),he=new RegExp(se,"g"),de=new RegExp(ce,"g"),le=new RegExp(r("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',pe),"g"),me=new RegExp(r("[^]",se,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),ge=me,ve={scheme:"mailto",parse:function(e,r){var n=e,t=n.to=n.path?n.path.split(","):[];if(n.path=undefined,n.query){for(var o=!1,a={},i=n.query.split("&"),u=0,s=i.length;u):string {\n\tif (sets.length > 1) {\n\t\tsets[0] = sets[0].slice(0, -1);\n\t\tconst xl = sets.length - 1;\n\t\tfor (let x = 1; x < xl; ++x) {\n\t\t\tsets[x] = sets[x].slice(1, -1);\n\t\t}\n\t\tsets[xl] = sets[xl].slice(1);\n\t\treturn sets.join('');\n\t} else {\n\t\treturn sets[0];\n\t}\n}\n\nexport function subexp(str:string):string {\n\treturn \"(?:\" + str + \")\";\n}\n\nexport function typeOf(o:any):string {\n\treturn o === undefined ? \"undefined\" : (o === null ? \"null\" : Object.prototype.toString.call(o).split(\" \").pop().split(\"]\").shift().toLowerCase());\n}\n\nexport function toUpperCase(str:string):string {\n\treturn str.toUpperCase();\n}\n\nexport function toArray(obj:any):Array {\n\treturn obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== \"number\" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : [];\n}\n\n\nexport function assign(target: object, source: any): any {\n\tconst obj = target as any;\n\tif (source) {\n\t\tfor (const key in source) {\n\t\t\tobj[key] = source[key];\n\t\t}\n\t}\n\treturn obj;\n}","import { URIRegExps } from \"./uri\";\nimport { merge, subexp } from \"./util\";\n\nexport function buildExps(isIRI:boolean):URIRegExps {\n\tconst\n\t\tALPHA$$ = \"[A-Za-z]\",\n\t\tCR$ = \"[\\\\x0D]\",\n\t\tDIGIT$$ = \"[0-9]\",\n\t\tDQUOTE$$ = \"[\\\\x22]\",\n\t\tHEXDIG$$ = merge(DIGIT$$, \"[A-Fa-f]\"), //case-insensitive\n\t\tLF$$ = \"[\\\\x0A]\",\n\t\tSP$$ = \"[\\\\x20]\",\n\t\tPCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)), //expanded\n\t\tGEN_DELIMS$$ = \"[\\\\:\\\\/\\\\?\\\\#\\\\[\\\\]\\\\@]\",\n\t\tSUB_DELIMS$$ = \"[\\\\!\\\\$\\\\&\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\=]\",\n\t\tRESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$),\n\t\tUCSCHAR$$ = isIRI ? \"[\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]\" : \"[]\", //subset, excludes bidi control characters\n\t\tIPRIVATE$$ = isIRI ? \"[\\\\uE000-\\\\uF8FF]\" : \"[]\", //subset\n\t\tUNRESERVED$$ = merge(ALPHA$$, DIGIT$$, \"[\\\\-\\\\.\\\\_\\\\~]\", UCSCHAR$$),\n\t\tSCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\") + \"*\"),\n\t\tUSERINFO$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\")) + \"*\"),\n\t\tDEC_OCTET$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"[1-9]\" + DIGIT$$) + \"|\" + DIGIT$$),\n\t\tDEC_OCTET_RELAXED$ = subexp(subexp(\"25[0-5]\") + \"|\" + subexp(\"2[0-4]\" + DIGIT$$) + \"|\" + subexp(\"1\" + DIGIT$$ + DIGIT$$) + \"|\" + subexp(\"0?[1-9]\" + DIGIT$$) + \"|0?0?\" + DIGIT$$), //relaxed parsing rules\n\t\tIPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$ + \"\\\\.\" + DEC_OCTET_RELAXED$),\n\t\tH16$ = subexp(HEXDIG$$ + \"{1,4}\"),\n\t\tLS32$ = subexp(subexp(H16$ + \"\\\\:\" + H16$) + \"|\" + IPV4ADDRESS$),\n\t\tIPV6ADDRESS1$ = subexp( subexp(H16$ + \"\\\\:\") + \"{6}\" + LS32$), // 6( h16 \":\" ) ls32\n\t\tIPV6ADDRESS2$ = subexp( \"\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{5}\" + LS32$), // \"::\" 5( h16 \":\" ) ls32\n\t\tIPV6ADDRESS3$ = subexp(subexp( H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{4}\" + LS32$), //[ h16 ] \"::\" 4( h16 \":\" ) ls32\n\t\tIPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,1}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{3}\" + LS32$), //[ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n\t\tIPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,2}\" + H16$) + \"?\\\\:\\\\:\" + subexp(H16$ + \"\\\\:\") + \"{2}\" + LS32$), //[ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n\t\tIPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,3}\" + H16$) + \"?\\\\:\\\\:\" + H16$ + \"\\\\:\" + LS32$), //[ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n\t\tIPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,4}\" + H16$) + \"?\\\\:\\\\:\" + LS32$), //[ *4( h16 \":\" ) h16 ] \"::\" ls32\n\t\tIPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,5}\" + H16$) + \"?\\\\:\\\\:\" + H16$ ), //[ *5( h16 \":\" ) h16 ] \"::\" h16\n\t\tIPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + \"\\\\:\") + \"{0,6}\" + H16$) + \"?\\\\:\\\\:\" ), //[ *6( h16 \":\" ) h16 ] \"::\"\n\t\tIPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join(\"|\")),\n\t\tZONEID$ = subexp(subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$) + \"+\"), //RFC 6874\n\t\tIPV6ADDRZ$ = subexp(IPV6ADDRESS$ + \"\\\\%25\" + ZONEID$), //RFC 6874\n\t\tIPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + ZONEID$), //RFC 6874, with relaxed parsing rules\n\t\tIPVFUTURE$ = subexp(\"[vV]\" + HEXDIG$$ + \"+\\\\.\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:]\") + \"+\"),\n\t\tIP_LITERAL$ = subexp(\"\\\\[\" + subexp(IPV6ADDRZ_RELAXED$ + \"|\" + IPV6ADDRESS$ + \"|\" + IPVFUTURE$) + \"\\\\]\"), //RFC 6874\n\t\tREG_NAME$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$)) + \"*\"),\n\t\tHOST$ = subexp(IP_LITERAL$ + \"|\" + IPV4ADDRESS$ + \"(?!\" + REG_NAME$ + \")\" + \"|\" + REG_NAME$),\n\t\tPORT$ = subexp(DIGIT$$ + \"*\"),\n\t\tAUTHORITY$ = subexp(subexp(USERINFO$ + \"@\") + \"?\" + HOST$ + subexp(\"\\\\:\" + PORT$) + \"?\"),\n\t\tPCHAR$ = subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@]\")),\n\t\tSEGMENT$ = subexp(PCHAR$ + \"*\"),\n\t\tSEGMENT_NZ$ = subexp(PCHAR$ + \"+\"),\n\t\tSEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + \"|\" + merge(UNRESERVED$$, SUB_DELIMS$$, \"[\\\\@]\")) + \"+\"),\n\t\tPATH_ABEMPTY$ = subexp(subexp(\"\\\\/\" + SEGMENT$) + \"*\"),\n\t\tPATH_ABSOLUTE$ = subexp(\"\\\\/\" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + \"?\"), //simplified\n\t\tPATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified\n\t\tPATH_EMPTY$ = \"(?!\" + PCHAR$ + \")\",\n\t\tPATH$ = subexp(PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tQUERY$ = subexp(subexp(PCHAR$ + \"|\" + merge(\"[\\\\/\\\\?]\", IPRIVATE$$)) + \"*\"),\n\t\tFRAGMENT$ = subexp(subexp(PCHAR$ + \"|[\\\\/\\\\?]\") + \"*\"),\n\t\tHIER_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$),\n\t\tURI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tRELATIVE_PART$ = subexp(subexp(\"\\\\/\\\\/\" + AUTHORITY$ + PATH_ABEMPTY$) + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$),\n\t\tRELATIVE$ = subexp(RELATIVE_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\" + subexp(\"\\\\#\" + FRAGMENT$) + \"?\"),\n\t\tURI_REFERENCE$ = subexp(URI$ + \"|\" + RELATIVE$),\n\t\tABSOLUTE_URI$ = subexp(SCHEME$ + \"\\\\:\" + HIER_PART$ + subexp(\"\\\\?\" + QUERY$) + \"?\"),\n\n\t\tGENERIC_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tRELATIVE_REF$ = \"^(){0}\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_NOSCHEME$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tABSOLUTE_REF$ = \"^(\" + SCHEME$ + \")\\\\:\" + subexp(subexp(\"\\\\/\\\\/(\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?)\") + \"?(\" + PATH_ABEMPTY$ + \"|\" + PATH_ABSOLUTE$ + \"|\" + PATH_ROOTLESS$ + \"|\" + PATH_EMPTY$ + \")\") + subexp(\"\\\\?(\" + QUERY$ + \")\") + \"?$\",\n\t\tSAMEDOC_REF$ = \"^\" + subexp(\"\\\\#(\" + FRAGMENT$ + \")\") + \"?$\",\n\t\tAUTHORITY_REF$ = \"^\" + subexp(\"(\" + USERINFO$ + \")@\") + \"?(\" + HOST$ + \")\" + subexp(\"\\\\:(\" + PORT$ + \")\") + \"?$\"\n\t;\n\n\treturn {\n\t\tNOT_SCHEME : new RegExp(merge(\"[^]\", ALPHA$$, DIGIT$$, \"[\\\\+\\\\-\\\\.]\"), \"g\"),\n\t\tNOT_USERINFO : new RegExp(merge(\"[^\\\\%\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_HOST : new RegExp(merge(\"[^\\\\%\\\\[\\\\]\\\\:]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH : new RegExp(merge(\"[^\\\\%\\\\/\\\\:\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_PATH_NOSCHEME : new RegExp(merge(\"[^\\\\%\\\\/\\\\@]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tNOT_QUERY : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\", IPRIVATE$$), \"g\"),\n\t\tNOT_FRAGMENT : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, SUB_DELIMS$$, \"[\\\\:\\\\@\\\\/\\\\?]\"), \"g\"),\n\t\tESCAPE : new RegExp(merge(\"[^]\", UNRESERVED$$, SUB_DELIMS$$), \"g\"),\n\t\tUNRESERVED : new RegExp(UNRESERVED$$, \"g\"),\n\t\tOTHER_CHARS : new RegExp(merge(\"[^\\\\%]\", UNRESERVED$$, RESERVED$$), \"g\"),\n\t\tPCT_ENCODED : new RegExp(PCT_ENCODED$, \"g\"),\n\t\tIPV4ADDRESS : new RegExp(\"^(\" + IPV4ADDRESS$ + \")$\"),\n\t\tIPV6ADDRESS : new RegExp(\"^\\\\[?(\" + IPV6ADDRESS$ + \")\" + subexp(subexp(\"\\\\%25|\\\\%(?!\" + HEXDIG$$ + \"{2})\") + \"(\" + ZONEID$ + \")\") + \"?\\\\]?$\") //RFC 6874, with relaxed parsing rules\n\t};\n}\n\nexport default buildExps(false);\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = fn(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n\tconst parts = string.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tstring = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tstring = string.replace(regexSeparators, '\\x2E');\n\tconst labels = string.split('.');\n\tconst encoded = map(labels, fn).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint - 0x30 < 0x0A) {\n\t\treturn codePoint - 0x16;\n\t}\n\tif (codePoint - 0x41 < 0x1A) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint - 0x61 < 0x1A) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tlet oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tlet inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tlet basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue == n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.1.0',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see \n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport default punycode;\n","/**\n * URI.js\n *\n * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript.\n * @author Gary Court\n * @see http://github.com/garycourt/uri-js\n */\n\n/**\n * Copyright 2011 Gary Court. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are\n * permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED\n * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\n * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation are those of the\n * authors and should not be interpreted as representing official policies, either expressed\n * or implied, of Gary Court.\n */\n\nimport URI_PROTOCOL from \"./regexps-uri\";\nimport IRI_PROTOCOL from \"./regexps-iri\";\nimport punycode from \"punycode\";\nimport { toUpperCase, typeOf, assign } from \"./util\";\n\nexport interface URIComponents {\n\tscheme?:string;\n\tuserinfo?:string;\n\thost?:string;\n\tport?:number|string;\n\tpath?:string;\n\tquery?:string;\n\tfragment?:string;\n\treference?:string;\n\terror?:string;\n}\n\nexport interface URIOptions {\n\tscheme?:string;\n\treference?:string;\n\ttolerant?:boolean;\n\tabsolutePath?:boolean;\n\tiri?:boolean;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n}\n\nexport interface URISchemeHandler {\n\tscheme:string;\n\tparse(components:ParentComponents, options:Options):Components;\n\tserialize(components:Components, options:Options):ParentComponents;\n\tunicodeSupport?:boolean;\n\tdomainHost?:boolean;\n\tabsolutePath?:boolean;\n}\n\nexport interface URIRegExps {\n\tNOT_SCHEME : RegExp,\n\tNOT_USERINFO : RegExp,\n\tNOT_HOST : RegExp,\n\tNOT_PATH : RegExp,\n\tNOT_PATH_NOSCHEME : RegExp,\n\tNOT_QUERY : RegExp,\n\tNOT_FRAGMENT : RegExp,\n\tESCAPE : RegExp,\n\tUNRESERVED : RegExp,\n\tOTHER_CHARS : RegExp,\n\tPCT_ENCODED : RegExp,\n\tIPV4ADDRESS : RegExp,\n\tIPV6ADDRESS : RegExp,\n}\n\nexport const SCHEMES:{[scheme:string]:URISchemeHandler} = {};\n\nexport function pctEncChar(chr:string):string {\n\tconst c = chr.charCodeAt(0);\n\tlet e:string;\n\n\tif (c < 16) e = \"%0\" + c.toString(16).toUpperCase();\n\telse if (c < 128) e = \"%\" + c.toString(16).toUpperCase();\n\telse if (c < 2048) e = \"%\" + ((c >> 6) | 192).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\telse e = \"%\" + ((c >> 12) | 224).toString(16).toUpperCase() + \"%\" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + \"%\" + ((c & 63) | 128).toString(16).toUpperCase();\n\n\treturn e;\n}\n\nexport function pctDecChars(str:string):string {\n\tlet newStr = \"\";\n\tlet i = 0;\n\tconst il = str.length;\n\n\twhile (i < il) {\n\t\tconst c = parseInt(str.substr(i + 1, 2), 16);\n\n\t\tif (c < 128) {\n\t\t\tnewStr += String.fromCharCode(c);\n\t\t\ti += 3;\n\t\t}\n\t\telse if (c >= 194 && c < 224) {\n\t\t\tif ((il - i) >= 6) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 6);\n\t\t\t}\n\t\t\ti += 6;\n\t\t}\n\t\telse if (c >= 224) {\n\t\t\tif ((il - i) >= 9) {\n\t\t\t\tconst c2 = parseInt(str.substr(i + 4, 2), 16);\n\t\t\t\tconst c3 = parseInt(str.substr(i + 7, 2), 16);\n\t\t\t\tnewStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n\t\t\t} else {\n\t\t\t\tnewStr += str.substr(i, 9);\n\t\t\t}\n\t\t\ti += 9;\n\t\t}\n\t\telse {\n\t\t\tnewStr += str.substr(i, 3);\n\t\t\ti += 3;\n\t\t}\n\t}\n\n\treturn newStr;\n}\n\nfunction _normalizeComponentEncoding(components:URIComponents, protocol:URIRegExps) {\n\tfunction decodeUnreserved(str:string):string {\n\t\tconst decStr = pctDecChars(str);\n\t\treturn (!decStr.match(protocol.UNRESERVED) ? str : decStr);\n\t}\n\n\tif (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, \"\");\n\tif (components.userinfo !== undefined) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.host !== undefined) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.path !== undefined) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.query !== undefined) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\tif (components.fragment !== undefined) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);\n\n\treturn components;\n};\n\nfunction _stripLeadingZeros(str:string):string {\n\treturn str.replace(/^0*(.*)/, \"$1\") || \"0\";\n}\n\nfunction _normalizeIPv4(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV4ADDRESS) || [];\n\tconst [, address] = matches;\n\t\n\tif (address) {\n\t\treturn address.split(\".\").map(_stripLeadingZeros).join(\".\");\n\t} else {\n\t\treturn host;\n\t}\n}\n\nfunction _normalizeIPv6(host:string, protocol:URIRegExps):string {\n\tconst matches = host.match(protocol.IPV6ADDRESS) || [];\n\tconst [, address, zone] = matches;\n\n\tif (address) {\n\t\tconst [last, first] = address.toLowerCase().split('::').reverse();\n\t\tconst firstFields = first ? first.split(\":\").map(_stripLeadingZeros) : [];\n\t\tconst lastFields = last.split(\":\").map(_stripLeadingZeros);\n\t\tconst isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);\n\t\tconst fieldCount = isLastFieldIPv4Address ? 7 : 8;\n\t\tconst lastFieldsStart = lastFields.length - fieldCount;\n\t\tconst fields = Array(fieldCount);\n\n\t\tfor (let x = 0; x < fieldCount; ++x) {\n\t\t\tfields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || '';\n\t\t}\n\n\t\tif (isLastFieldIPv4Address) {\n\t\t\tfields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);\n\t\t}\n\n\t\tconst allZeroFields = fields.reduce>((acc, field, index) => {\n\t\t\tif (!field || field === \"0\") {\n\t\t\t\tconst lastLongest = acc[acc.length - 1];\n\t\t\t\tif (lastLongest && lastLongest.index + lastLongest.length === index) {\n\t\t\t\t\tlastLongest.length++;\n\t\t\t\t} else {\n\t\t\t\t\tacc.push({ index, length : 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\n\t\tconst longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0];\n\n\t\tlet newHost:string;\n\t\tif (longestZeroFields && longestZeroFields.length > 1) {\n\t\t\tconst newFirst = fields.slice(0, longestZeroFields.index) ;\n\t\t\tconst newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);\n\t\t\tnewHost = newFirst.join(\":\") + \"::\" + newLast.join(\":\");\n\t\t} else {\n\t\t\tnewHost = fields.join(\":\");\n\t\t}\n\n\t\tif (zone) {\n\t\t\tnewHost += \"%\" + zone;\n\t\t}\n\n\t\treturn newHost;\n\t} else {\n\t\treturn host;\n\t}\n}\n\nconst URI_PARSE = /^(?:([^:\\/?#]+):)?(?:\\/\\/((?:([^\\/?#@]*)@)?(\\[[^\\/?#\\]]+\\]|[^\\/?#:]*)(?:\\:(\\d*))?))?([^?#]*)(?:\\?([^#]*))?(?:#((?:.|\\n|\\r)*))?/i;\nconst NO_MATCH_IS_UNDEFINED = ((\"\").match(/(){0}/))[1] === undefined;\n\nexport function parse(uriString:string, options:URIOptions = {}):URIComponents {\n\tconst components:URIComponents = {};\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\n\tif (options.reference === \"suffix\") uriString = (options.scheme ? options.scheme + \":\" : \"\") + \"//\" + uriString;\n\n\tconst matches = uriString.match(URI_PARSE);\n\n\tif (matches) {\n\t\tif (NO_MATCH_IS_UNDEFINED) {\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1];\n\t\t\tcomponents.userinfo = matches[3];\n\t\t\tcomponents.host = matches[4];\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = matches[7];\n\t\t\tcomponents.fragment = matches[8];\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = matches[5];\n\t\t\t}\n\t\t} else { //IE FIX for improper RegExp matching\n\t\t\t//store each component\n\t\t\tcomponents.scheme = matches[1] || undefined;\n\t\t\tcomponents.userinfo = (uriString.indexOf(\"@\") !== -1 ? matches[3] : undefined);\n\t\t\tcomponents.host = (uriString.indexOf(\"//\") !== -1 ? matches[4] : undefined);\n\t\t\tcomponents.port = parseInt(matches[5], 10);\n\t\t\tcomponents.path = matches[6] || \"\";\n\t\t\tcomponents.query = (uriString.indexOf(\"?\") !== -1 ? matches[7] : undefined);\n\t\t\tcomponents.fragment = (uriString.indexOf(\"#\") !== -1 ? matches[8] : undefined);\n\n\t\t\t//fix port number\n\t\t\tif (isNaN(components.port)) {\n\t\t\t\tcomponents.port = (uriString.match(/\\/\\/(?:.|\\n)*\\:(?:\\/|\\?|\\#|$)/) ? matches[4] : undefined);\n\t\t\t}\n\t\t}\n\n\t\tif (components.host) {\n\t\t\t//normalize IP hosts\n\t\t\tcomponents.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);\n\t\t}\n\n\t\t//determine reference type\n\t\tif (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) {\n\t\t\tcomponents.reference = \"same-document\";\n\t\t} else if (components.scheme === undefined) {\n\t\t\tcomponents.reference = \"relative\";\n\t\t} else if (components.fragment === undefined) {\n\t\t\tcomponents.reference = \"absolute\";\n\t\t} else {\n\t\t\tcomponents.reference = \"uri\";\n\t\t}\n\n\t\t//check for reference errors\n\t\tif (options.reference && options.reference !== \"suffix\" && options.reference !== components.reference) {\n\t\t\tcomponents.error = components.error || \"URI is not a \" + options.reference + \" reference.\";\n\t\t}\n\n\t\t//find scheme handler\n\t\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t\t//check if scheme can't handle IRIs\n\t\tif (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n\t\t\t//if host component is a domain name\n\t\t\tif (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\tcomponents.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//convert IRI -> URI\n\t\t\t_normalizeComponentEncoding(components, URI_PROTOCOL);\n\t\t} else {\n\t\t\t//normalize encodings\n\t\t\t_normalizeComponentEncoding(components, protocol);\n\t\t}\n\n\t\t//perform scheme specific parsing\n\t\tif (schemeHandler && schemeHandler.parse) {\n\t\t\tschemeHandler.parse(components, options);\n\t\t}\n\t} else {\n\t\tcomponents.error = components.error || \"URI can not be parsed.\";\n\t}\n\n\treturn components;\n};\n\nfunction _recomposeAuthority(components:URIComponents, options:URIOptions):string|undefined {\n\tconst protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\tif (components.userinfo !== undefined) {\n\t\turiTokens.push(components.userinfo);\n\t\turiTokens.push(\"@\");\n\t}\n\n\tif (components.host !== undefined) {\n\t\t//normalize IP hosts, add brackets and escape zone separator for IPv6\n\t\turiTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => \"[\" + $1 + ($2 ? \"%25\" + $2 : \"\") + \"]\"));\n\t}\n\n\tif (typeof components.port === \"number\" || typeof components.port === \"string\") {\n\t\turiTokens.push(\":\");\n\t\turiTokens.push(String(components.port));\n\t}\n\n\treturn uriTokens.length ? uriTokens.join(\"\") : undefined;\n};\n\nconst RDS1 = /^\\.\\.?\\//;\nconst RDS2 = /^\\/\\.(\\/|$)/;\nconst RDS3 = /^\\/\\.\\.(\\/|$)/;\nconst RDS4 = /^\\.\\.?$/;\nconst RDS5 = /^\\/?(?:.|\\n)*?(?=\\/|$)/;\n\nexport function removeDotSegments(input:string):string {\n\tconst output:Array = [];\n\n\twhile (input.length) {\n\t\tif (input.match(RDS1)) {\n\t\t\tinput = input.replace(RDS1, \"\");\n\t\t} else if (input.match(RDS2)) {\n\t\t\tinput = input.replace(RDS2, \"/\");\n\t\t} else if (input.match(RDS3)) {\n\t\t\tinput = input.replace(RDS3, \"/\");\n\t\t\toutput.pop();\n\t\t} else if (input === \".\" || input === \"..\") {\n\t\t\tinput = \"\";\n\t\t} else {\n\t\t\tconst im = input.match(RDS5);\n\t\t\tif (im) {\n\t\t\t\tconst s = im[0];\n\t\t\t\tinput = input.slice(s.length);\n\t\t\t\toutput.push(s);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Unexpected dot segment condition\");\n\t\t\t}\n\t\t}\n\t}\n\n\treturn output.join(\"\");\n};\n\nexport function serialize(components:URIComponents, options:URIOptions = {}):string {\n\tconst protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL);\n\tconst uriTokens:Array = [];\n\n\t//find scheme handler\n\tconst schemeHandler = SCHEMES[(options.scheme || components.scheme || \"\").toLowerCase()];\n\n\t//perform scheme specific serialization\n\tif (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);\n\n\tif (components.host) {\n\t\t//if host component is an IPv6 address\n\t\tif (protocol.IPV6ADDRESS.test(components.host)) {\n\t\t\t//TODO: normalize IPv6 address as per RFC 5952\n\t\t}\n\n\t\t//if host component is a domain name\n\t\telse if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) {\n\t\t\t//convert IDN via punycode\n\t\t\ttry {\n\t\t\t\tcomponents.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host));\n\t\t\t} catch (e) {\n\t\t\t\tcomponents.error = components.error || \"Host's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t}\n\t\t}\n\t}\n\n\t//normalize encoding\n\t_normalizeComponentEncoding(components, protocol);\n\n\tif (options.reference !== \"suffix\" && components.scheme) {\n\t\turiTokens.push(components.scheme);\n\t\turiTokens.push(\":\");\n\t}\n\n\tconst authority = _recomposeAuthority(components, options);\n\tif (authority !== undefined) {\n\t\tif (options.reference !== \"suffix\") {\n\t\t\turiTokens.push(\"//\");\n\t\t}\n\n\t\turiTokens.push(authority);\n\n\t\tif (components.path && components.path.charAt(0) !== \"/\") {\n\t\t\turiTokens.push(\"/\");\n\t\t}\n\t}\n\n\tif (components.path !== undefined) {\n\t\tlet s = components.path;\n\n\t\tif (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n\t\t\ts = removeDotSegments(s);\n\t\t}\n\n\t\tif (authority === undefined) {\n\t\t\ts = s.replace(/^\\/\\//, \"/%2F\"); //don't allow the path to start with \"//\"\n\t\t}\n\n\t\turiTokens.push(s);\n\t}\n\n\tif (components.query !== undefined) {\n\t\turiTokens.push(\"?\");\n\t\turiTokens.push(components.query);\n\t}\n\n\tif (components.fragment !== undefined) {\n\t\turiTokens.push(\"#\");\n\t\turiTokens.push(components.fragment);\n\t}\n\n\treturn uriTokens.join(\"\"); //merge tokens into a string\n};\n\nexport function resolveComponents(base:URIComponents, relative:URIComponents, options:URIOptions = {}, skipNormalization?:boolean):URIComponents {\n\tconst target:URIComponents = {};\n\n\tif (!skipNormalization) {\n\t\tbase = parse(serialize(base, options), options); //normalize base components\n\t\trelative = parse(serialize(relative, options), options); //normalize relative components\n\t}\n\toptions = options || {};\n\n\tif (!options.tolerant && relative.scheme) {\n\t\ttarget.scheme = relative.scheme;\n\t\t//target.authority = relative.authority;\n\t\ttarget.userinfo = relative.userinfo;\n\t\ttarget.host = relative.host;\n\t\ttarget.port = relative.port;\n\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\ttarget.query = relative.query;\n\t} else {\n\t\tif (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n\t\t\t//target.authority = relative.authority;\n\t\t\ttarget.userinfo = relative.userinfo;\n\t\t\ttarget.host = relative.host;\n\t\t\ttarget.port = relative.port;\n\t\t\ttarget.path = removeDotSegments(relative.path || \"\");\n\t\t\ttarget.query = relative.query;\n\t\t} else {\n\t\t\tif (!relative.path) {\n\t\t\t\ttarget.path = base.path;\n\t\t\t\tif (relative.query !== undefined) {\n\t\t\t\t\ttarget.query = relative.query;\n\t\t\t\t} else {\n\t\t\t\t\ttarget.query = base.query;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (relative.path.charAt(0) === \"/\") {\n\t\t\t\t\ttarget.path = removeDotSegments(relative.path);\n\t\t\t\t} else {\n\t\t\t\t\tif ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n\t\t\t\t\t\ttarget.path = \"/\" + relative.path;\n\t\t\t\t\t} else if (!base.path) {\n\t\t\t\t\t\ttarget.path = relative.path;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget.path = base.path.slice(0, base.path.lastIndexOf(\"/\") + 1) + relative.path;\n\t\t\t\t\t}\n\t\t\t\t\ttarget.path = removeDotSegments(target.path);\n\t\t\t\t}\n\t\t\t\ttarget.query = relative.query;\n\t\t\t}\n\t\t\t//target.authority = base.authority;\n\t\t\ttarget.userinfo = base.userinfo;\n\t\t\ttarget.host = base.host;\n\t\t\ttarget.port = base.port;\n\t\t}\n\t\ttarget.scheme = base.scheme;\n\t}\n\n\ttarget.fragment = relative.fragment;\n\n\treturn target;\n};\n\nexport function resolve(baseURI:string, relativeURI:string, options?:URIOptions):string {\n\tconst schemelessOptions = assign({ scheme : 'null' }, options);\n\treturn serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);\n};\n\nexport function normalize(uri:string, options?:URIOptions):string;\nexport function normalize(uri:URIComponents, options?:URIOptions):URIComponents;\nexport function normalize(uri:any, options?:URIOptions):any {\n\tif (typeof uri === \"string\") {\n\t\turi = serialize(parse(uri, options), options);\n\t} else if (typeOf(uri) === \"object\") {\n\t\turi = parse(serialize(uri, options), options);\n\t}\n\n\treturn uri;\n};\n\nexport function equal(uriA:string, uriB:string, options?: URIOptions):boolean;\nexport function equal(uriA:URIComponents, uriB:URIComponents, options?:URIOptions):boolean;\nexport function equal(uriA:any, uriB:any, options?:URIOptions):boolean {\n\tif (typeof uriA === \"string\") {\n\t\turiA = serialize(parse(uriA, options), options);\n\t} else if (typeOf(uriA) === \"object\") {\n\t\turiA = serialize(uriA, options);\n\t}\n\n\tif (typeof uriB === \"string\") {\n\t\turiB = serialize(parse(uriB, options), options);\n\t} else if (typeOf(uriB) === \"object\") {\n\t\turiB = serialize(uriB, options);\n\t}\n\n\treturn uriA === uriB;\n};\n\nexport function escapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar);\n};\n\nexport function unescapeComponent(str:string, options?:URIOptions):string {\n\treturn str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars);\n};\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nexport interface WSComponents extends URIComponents {\n\tresourceName?: string;\n\tsecure?: boolean;\n}\n\nfunction isSecure(wsComponents:WSComponents):boolean {\n\treturn typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === \"wss\";\n}\n\n//RFC 6455\nconst handler:URISchemeHandler = {\n\tscheme : \"ws\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):WSComponents {\n\t\tconst wsComponents = components as WSComponents;\n\n\t\t//indicate if the secure flag is set\n\t\twsComponents.secure = isSecure(wsComponents);\n\n\t\t//construct resouce name\n\t\twsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : '');\n\t\twsComponents.path = undefined;\n\t\twsComponents.query = undefined;\n\n\t\treturn wsComponents;\n\t},\n\n\tserialize : function (wsComponents:WSComponents, options:URIOptions):URIComponents {\n\t\t//normalize the default port\n\t\tif (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === \"\") {\n\t\t\twsComponents.port = undefined;\n\t\t}\n\n\t\t//ensure scheme matches secure flag\n\t\tif (typeof wsComponents.secure === 'boolean') {\n\t\t\twsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws');\n\t\t\twsComponents.secure = undefined;\n\t\t}\n\n\t\t//reconstruct path from resource name\n\t\tif (wsComponents.resourceName) {\n\t\t\tconst [path, query] = wsComponents.resourceName.split('?');\n\t\t\twsComponents.path = (path && path !== '/' ? path : undefined);\n\t\t\twsComponents.query = query;\n\t\t\twsComponents.resourceName = undefined;\n\t\t}\n\n\t\t//forbid fragment component\n\t\twsComponents.fragment = undefined;\n\n\t\treturn wsComponents;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, pctDecChars, unescapeComponent } from \"../uri\";\nimport punycode from \"punycode\";\nimport { merge, subexp, toUpperCase, toArray } from \"../util\";\n\nexport interface MailtoHeaders {\n\t[hfname:string]:string\n}\n\nexport interface MailtoComponents extends URIComponents {\n\tto:Array,\n\theaders?:MailtoHeaders,\n\tsubject?:string,\n\tbody?:string\n}\n\nconst O:MailtoHeaders = {};\nconst isIRI = true;\n\n//RFC 3986\nconst UNRESERVED$$ = \"[A-Za-z0-9\\\\-\\\\.\\\\_\\\\~\" + (isIRI ? \"\\\\xA0-\\\\u200D\\\\u2010-\\\\u2029\\\\u202F-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF\" : \"\") + \"]\";\nconst HEXDIG$$ = \"[0-9A-Fa-f]\"; //case-insensitive\nconst PCT_ENCODED$ = subexp(subexp(\"%[EFef]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%[89A-Fa-f]\" + HEXDIG$$ + \"%\" + HEXDIG$$ + HEXDIG$$) + \"|\" + subexp(\"%\" + HEXDIG$$ + HEXDIG$$)); //expanded\n\n//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; =\n//const ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\#\\\\$\\\\%\\\\&\\\\'\\\\*\\\\+\\\\-\\\\/\\\\=\\\\?\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QTEXT$$ = \"[\\\\x01-\\\\x08\\\\x0B\\\\x0C\\\\x0E-\\\\x1F\\\\x7F]\"; //(%d1-8 / %d11-12 / %d14-31 / %d127)\n//const QTEXT$$ = merge(\"[\\\\x21\\\\x23-\\\\x5B\\\\x5D-\\\\x7E]\", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext\n//const VCHAR$$ = \"[\\\\x21-\\\\x7E]\";\n//const WSP$$ = \"[\\\\x20\\\\x09]\";\n//const OBS_QP$ = subexp(\"\\\\\\\\\" + merge(\"[\\\\x00\\\\x0D\\\\x0A]\", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext\n//const FWS$ = subexp(subexp(WSP$$ + \"*\" + \"\\\\x0D\\\\x0A\") + \"?\" + WSP$$ + \"+\");\n//const QUOTED_PAIR$ = subexp(subexp(\"\\\\\\\\\" + subexp(VCHAR$$ + \"|\" + WSP$$)) + \"|\" + OBS_QP$);\n//const QUOTED_STRING$ = subexp('\\\\\"' + subexp(FWS$ + \"?\" + QCONTENT$) + \"*\" + FWS$ + \"?\" + '\\\\\"');\nconst ATEXT$$ = \"[A-Za-z0-9\\\\!\\\\$\\\\%\\\\'\\\\*\\\\+\\\\-\\\\^\\\\_\\\\`\\\\{\\\\|\\\\}\\\\~]\";\nconst QTEXT$$ = \"[\\\\!\\\\$\\\\%\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\-\\\\.0-9\\\\<\\\\>A-Z\\\\x5E-\\\\x7E]\";\nconst VCHAR$$ = merge(QTEXT$$, \"[\\\\\\\"\\\\\\\\]\");\nconst DOT_ATOM_TEXT$ = subexp(ATEXT$$ + \"+\" + subexp(\"\\\\.\" + ATEXT$$ + \"+\") + \"*\");\nconst QUOTED_PAIR$ = subexp(\"\\\\\\\\\" + VCHAR$$);\nconst QCONTENT$ = subexp(QTEXT$$ + \"|\" + QUOTED_PAIR$);\nconst QUOTED_STRING$ = subexp('\\\\\"' + QCONTENT$ + \"*\" + '\\\\\"');\n\n//RFC 6068\nconst DTEXT_NO_OBS$$ = \"[\\\\x21-\\\\x5A\\\\x5E-\\\\x7E]\"; //%d33-90 / %d94-126\nconst SOME_DELIMS$$ = \"[\\\\!\\\\$\\\\'\\\\(\\\\)\\\\*\\\\+\\\\,\\\\;\\\\:\\\\@]\";\nconst QCHAR$ = subexp(UNRESERVED$$ + \"|\" + PCT_ENCODED$ + \"|\" + SOME_DELIMS$$);\nconst DOMAIN$ = subexp(DOT_ATOM_TEXT$ + \"|\" + \"\\\\[\" + DTEXT_NO_OBS$$ + \"*\" + \"\\\\]\");\nconst LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + \"|\" + QUOTED_STRING$);\nconst ADDR_SPEC$ = subexp(LOCAL_PART$ + \"\\\\@\" + DOMAIN$);\nconst TO$ = subexp(ADDR_SPEC$ + subexp(\"\\\\,\" + ADDR_SPEC$) + \"*\");\nconst HFNAME$ = subexp(QCHAR$ + \"*\");\nconst HFVALUE$ = HFNAME$;\nconst HFIELD$ = subexp(HFNAME$ + \"\\\\=\" + HFVALUE$);\nconst HFIELDS2$ = subexp(HFIELD$ + subexp(\"\\\\&\" + HFIELD$) + \"*\");\nconst HFIELDS$ = subexp(\"\\\\?\" + HFIELDS2$);\nconst MAILTO_URI = new RegExp(\"^mailto\\\\:\" + TO$ + \"?\" + HFIELDS$ + \"?$\");\n\nconst UNRESERVED = new RegExp(UNRESERVED$$, \"g\");\nconst PCT_ENCODED = new RegExp(PCT_ENCODED$, \"g\");\nconst NOT_LOCAL_PART = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", '[\\\\\"]', VCHAR$$), \"g\");\nconst NOT_DOMAIN = new RegExp(merge(\"[^]\", ATEXT$$, \"[\\\\.]\", \"[\\\\[]\", DTEXT_NO_OBS$$, \"[\\\\]]\"), \"g\");\nconst NOT_HFNAME = new RegExp(merge(\"[^]\", UNRESERVED$$, SOME_DELIMS$$), \"g\");\nconst NOT_HFVALUE = NOT_HFNAME;\nconst TO = new RegExp(\"^\" + TO$ + \"$\");\nconst HFIELDS = new RegExp(\"^\" + HFIELDS2$ + \"$\");\n\nfunction decodeUnreserved(str:string):string {\n\tconst decStr = pctDecChars(str);\n\treturn (!decStr.match(UNRESERVED) ? str : decStr);\n}\n\nconst handler:URISchemeHandler = {\n\tscheme : \"mailto\",\n\n\tparse : function (components:URIComponents, options:URIOptions):MailtoComponents {\n\t\tconst mailtoComponents = components as MailtoComponents;\n\t\tconst to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(\",\") : []);\n\t\tmailtoComponents.path = undefined;\n\n\t\tif (mailtoComponents.query) {\n\t\t\tlet unknownHeaders = false\n\t\t\tconst headers:MailtoHeaders = {};\n\t\t\tconst hfields = mailtoComponents.query.split(\"&\");\n\n\t\t\tfor (let x = 0, xl = hfields.length; x < xl; ++x) {\n\t\t\t\tconst hfield = hfields[x].split(\"=\");\n\n\t\t\t\tswitch (hfield[0]) {\n\t\t\t\t\tcase \"to\":\n\t\t\t\t\t\tconst toAddrs = hfield[1].split(\",\");\n\t\t\t\t\t\tfor (let x = 0, xl = toAddrs.length; x < xl; ++x) {\n\t\t\t\t\t\t\tto.push(toAddrs[x]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"subject\":\n\t\t\t\t\t\tmailtoComponents.subject = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"body\":\n\t\t\t\t\t\tmailtoComponents.body = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tunknownHeaders = true;\n\t\t\t\t\t\theaders[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (unknownHeaders) mailtoComponents.headers = headers;\n\t\t}\n\n\t\tmailtoComponents.query = undefined;\n\n\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\tconst addr = to[x].split(\"@\");\n\n\t\t\taddr[0] = unescapeComponent(addr[0]);\n\n\t\t\tif (!options.unicodeSupport) {\n\t\t\t\t//convert Unicode IDN -> ASCII IDN\n\t\t\t\ttry {\n\t\t\t\t\taddr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());\n\t\t\t\t} catch (e) {\n\t\t\t\t\tmailtoComponents.error = mailtoComponents.error || \"Email address's domain name can not be converted to ASCII via punycode: \" + e;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\taddr[1] = unescapeComponent(addr[1], options).toLowerCase();\n\t\t\t}\n\n\t\t\tto[x] = addr.join(\"@\");\n\t\t}\n\n\t\treturn mailtoComponents;\n\t},\n\n\tserialize : function (mailtoComponents:MailtoComponents, options:URIOptions):URIComponents {\n\t\tconst components = mailtoComponents as URIComponents;\n\t\tconst to = toArray(mailtoComponents.to);\n\t\tif (to) {\n\t\t\tfor (let x = 0, xl = to.length; x < xl; ++x) {\n\t\t\t\tconst toAddr = String(to[x]);\n\t\t\t\tconst atIdx = toAddr.lastIndexOf(\"@\");\n\t\t\t\tconst localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);\n\t\t\t\tlet domain = toAddr.slice(atIdx + 1);\n\n\t\t\t\t//convert IDN via punycode\n\t\t\t\ttry {\n\t\t\t\t\tdomain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tcomponents.error = components.error || \"Email address's domain name can not be converted to \" + (!options.iri ? \"ASCII\" : \"Unicode\") + \" via punycode: \" + e;\n\t\t\t\t}\n\n\t\t\t\tto[x] = localPart + \"@\" + domain;\n\t\t\t}\n\n\t\t\tcomponents.path = to.join(\",\");\n\t\t}\n\n\t\tconst headers = mailtoComponents.headers = mailtoComponents.headers || {};\n\n\t\tif (mailtoComponents.subject) headers[\"subject\"] = mailtoComponents.subject;\n\t\tif (mailtoComponents.body) headers[\"body\"] = mailtoComponents.body;\n\n\t\tconst fields = [];\n\t\tfor (const name in headers) {\n\t\t\tif (headers[name] !== O[name]) {\n\t\t\t\tfields.push(\n\t\t\t\t\tname.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) +\n\t\t\t\t\t\"=\" +\n\t\t\t\t\theaders[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (fields.length) {\n\t\t\tcomponents.query = fields.join(\"&\");\n\t\t}\n\n\t\treturn components;\n\t}\n}\n\nexport default handler;","import { URIRegExps } from \"./uri\";\nimport { buildExps } from \"./regexps-uri\";\n\nexport default buildExps(true);\n","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"http\",\n\n\tdomainHost : true,\n\n\tparse : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\t//report missing host\n\t\tif (!components.host) {\n\t\t\tcomponents.error = components.error || \"HTTP URIs must have a host.\";\n\t\t}\n\n\t\treturn components;\n\t},\n\n\tserialize : function (components:URIComponents, options:URIOptions):URIComponents {\n\t\tconst secure = String(components.scheme).toLowerCase() === \"https\";\n\n\t\t//normalize the default port\n\t\tif (components.port === (secure ? 443 : 80) || components.port === \"\") {\n\t\t\tcomponents.port = undefined;\n\t\t}\n\t\t\n\t\t//normalize the empty path\n\t\tif (!components.path) {\n\t\t\tcomponents.path = \"/\";\n\t\t}\n\n\t\t//NOTE: We do not parse query strings for HTTP URIs\n\t\t//as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n\t\t//and not the HTTP spec.\n\n\t\treturn components;\n\t}\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport http from \"./http\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"https\",\n\tdomainHost : http.domainHost,\n\tparse : http.parse,\n\tserialize : http.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport ws from \"./ws\";\n\nconst handler:URISchemeHandler = {\n\tscheme : \"wss\",\n\tdomainHost : ws.domainHost,\n\tparse : ws.parse,\n\tserialize : ws.serialize\n}\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { pctEncChar, SCHEMES } from \"../uri\";\n\nexport interface URNComponents extends URIComponents {\n\tnid?:string;\n\tnss?:string;\n}\n\nexport interface URNOptions extends URIOptions {\n\tnid?:string;\n}\n\nconst NID$ = \"(?:[0-9A-Za-z][0-9A-Za-z\\\\-]{1,31})\";\nconst PCT_ENCODED$ = \"(?:\\\\%[0-9A-Fa-f]{2})\";\nconst TRANS$$ = \"[0-9A-Za-z\\\\(\\\\)\\\\+\\\\,\\\\-\\\\.\\\\:\\\\=\\\\@\\\\;\\\\$\\\\_\\\\!\\\\*\\\\'\\\\/\\\\?\\\\#]\";\nconst NSS$ = \"(?:(?:\" + PCT_ENCODED$ + \"|\" + TRANS$$ + \")+)\";\nconst URN_SCHEME = new RegExp(\"^urn\\\\:(\" + NID$ + \")$\");\nconst URN_PATH = new RegExp(\"^(\" + NID$ + \")\\\\:(\" + NSS$ + \")$\");\nconst URN_PARSE = /^([^\\:]+)\\:(.*)/;\nconst URN_EXCLUDED = /[\\x00-\\x20\\\\\\\"\\&\\<\\>\\[\\]\\^\\`\\{\\|\\}\\~\\x7F-\\xFF]/g;\n\n//RFC 2141\nconst handler:URISchemeHandler = {\n\tscheme : \"urn\",\n\n\tparse : function (components:URIComponents, options:URNOptions):URNComponents {\n\t\tconst matches = components.path && components.path.match(URN_PARSE);\n\t\tlet urnComponents = components as URNComponents;\n\n\t\tif (matches) {\n\t\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\t\tconst nid = matches[1].toLowerCase();\n\t\t\tconst nss = matches[2];\n\t\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\t\turnComponents.nid = nid;\n\t\t\turnComponents.nss = nss;\n\t\t\turnComponents.path = undefined;\n\n\t\t\tif (schemeHandler) {\n\t\t\t\turnComponents = schemeHandler.parse(urnComponents, options) as URNComponents;\n\t\t\t}\n\t\t} else {\n\t\t\turnComponents.error = urnComponents.error || \"URN can not be parsed.\";\n\t\t}\n\n\t\treturn urnComponents;\n\t},\n\n\tserialize : function (urnComponents:URNComponents, options:URNOptions):URIComponents {\n\t\tconst scheme = options.scheme || urnComponents.scheme || \"urn\";\n\t\tconst nid = urnComponents.nid;\n\t\tconst urnScheme = `${scheme}:${options.nid || nid}`;\n\t\tconst schemeHandler = SCHEMES[urnScheme];\n\n\t\tif (schemeHandler) {\n\t\t\turnComponents = schemeHandler.serialize(urnComponents, options) as URNComponents;\n\t\t}\n\n\t\tconst uriComponents = urnComponents as URIComponents;\n\t\tconst nss = urnComponents.nss;\n\t\turiComponents.path = `${nid || options.nid}:${nss}`;\n\n\t\treturn uriComponents;\n\t},\n};\n\nexport default handler;","import { URISchemeHandler, URIComponents, URIOptions } from \"../uri\";\nimport { URNComponents } from \"./urn\";\nimport { SCHEMES } from \"../uri\";\n\nexport interface UUIDComponents extends URNComponents {\n\tuuid?: string;\n}\n\nconst UUID = /^[0-9A-Fa-f]{8}(?:\\-[0-9A-Fa-f]{4}){3}\\-[0-9A-Fa-f]{12}$/;\nconst UUID_PARSE = /^[0-9A-Fa-f\\-]{36}/;\n\n//RFC 4122\nconst handler:URISchemeHandler = {\n\tscheme : \"urn:uuid\",\n\n\tparse : function (urnComponents:URNComponents, options:URIOptions):UUIDComponents {\n\t\tconst uuidComponents = urnComponents as UUIDComponents;\n\t\tuuidComponents.uuid = uuidComponents.nss;\n\t\tuuidComponents.nss = undefined;\n\n\t\tif (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {\n\t\t\tuuidComponents.error = uuidComponents.error || \"UUID is not valid.\";\n\t\t}\n\n\t\treturn uuidComponents;\n\t},\n\n\tserialize : function (uuidComponents:UUIDComponents, options:URIOptions):URNComponents {\n\t\tconst urnComponents = uuidComponents as URNComponents;\n\t\t//normalize UUID\n\t\turnComponents.nss = (uuidComponents.uuid || \"\").toLowerCase();\n\t\treturn urnComponents;\n\t},\n};\n\nexport default handler;","import { SCHEMES } from \"./uri\";\n\nimport http from \"./schemes/http\";\nSCHEMES[http.scheme] = http;\n\nimport https from \"./schemes/https\";\nSCHEMES[https.scheme] = https;\n\nimport ws from \"./schemes/ws\";\nSCHEMES[ws.scheme] = ws;\n\nimport wss from \"./schemes/wss\";\nSCHEMES[wss.scheme] = wss;\n\nimport mailto from \"./schemes/mailto\";\nSCHEMES[mailto.scheme] = mailto;\n\nimport urn from \"./schemes/urn\";\nSCHEMES[urn.scheme] = urn;\n\nimport uuid from \"./schemes/urn-uuid\";\nSCHEMES[uuid.scheme] = uuid;\n\nexport * from \"./uri\";\n"]} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/index.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/index.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +export * from "./uri"; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,17 @@ +import { SCHEMES } from "./uri"; +import http from "./schemes/http"; +SCHEMES[http.scheme] = http; +import https from "./schemes/https"; +SCHEMES[https.scheme] = https; +import ws from "./schemes/ws"; +SCHEMES[ws.scheme] = ws; +import wss from "./schemes/wss"; +SCHEMES[wss.scheme] = wss; +import mailto from "./schemes/mailto"; +SCHEMES[mailto.scheme] = mailto; +import urn from "./schemes/urn"; +SCHEMES[urn.scheme] = urn; +import uuid from "./schemes/urn-uuid"; +SCHEMES[uuid.scheme] = uuid; +export * from "./uri"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/index.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/index.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/index.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/index.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAClC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAE5B,OAAO,KAAK,MAAM,iBAAiB,CAAC;AACpC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAE9B,OAAO,EAAE,MAAM,cAAc,CAAC;AAC9B,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AAExB,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAE1B,OAAO,MAAM,MAAM,kBAAkB,CAAC;AACtC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;AAEhC,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAE1B,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AAE5B,cAAc,OAAO,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,3 @@ +import { URIRegExps } from "./uri"; +declare const _default: URIRegExps; +export default _default; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,3 @@ +import { buildExps } from "./regexps-uri"; +export default buildExps(true); +//# sourceMappingURL=regexps-iri.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-iri.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"regexps-iri.js","sourceRoot":"","sources":["../../src/regexps-iri.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,eAAe,SAAS,CAAC,IAAI,CAAC,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,4 @@ +import { URIRegExps } from "./uri"; +export declare function buildExps(isIRI: boolean): URIRegExps; +declare const _default: URIRegExps; +export default _default; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,42 @@ +import { merge, subexp } from "./util"; +export function buildExps(isIRI) { + const ALPHA$$ = "[A-Za-z]", CR$ = "[\\x0D]", DIGIT$$ = "[0-9]", DQUOTE$$ = "[\\x22]", HEXDIG$$ = merge(DIGIT$$, "[A-Fa-f]"), //case-insensitive + LF$$ = "[\\x0A]", SP$$ = "[\\x20]", PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)), //expanded + GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", RESERVED$$ = merge(GEN_DELIMS$$, SUB_DELIMS$$), UCSCHAR$$ = isIRI ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", //subset, excludes bidi control characters + IPRIVATE$$ = isIRI ? "[\\uE000-\\uF8FF]" : "[]", //subset + UNRESERVED$$ = merge(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), SCHEME$ = subexp(ALPHA$$ + merge(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), USERINFO$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]")) + "*"), DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), //relaxed parsing rules + IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), H16$ = subexp(HEXDIG$$ + "{1,4}"), LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), // 6( h16 ":" ) ls32 + IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), // "::" 5( h16 ":" ) ls32 + IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), //[ h16 ] "::" 4( h16 ":" ) ls32 + IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), //[ *1( h16 ":" ) h16 ] "::" 3( h16 ":" ) ls32 + IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), //[ *2( h16 ":" ) h16 ] "::" 2( h16 ":" ) ls32 + IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), //[ *3( h16 ":" ) h16 ] "::" h16 ":" ls32 + IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), //[ *4( h16 ":" ) h16 ] "::" ls32 + IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), //[ *5( h16 ":" ) h16 ] "::" h16 + IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), //[ *6( h16 ":" ) h16 ] "::" + IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), ZONEID$ = subexp(subexp(UNRESERVED$$ + "|" + PCT_ENCODED$) + "+"), //RFC 6874 + IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), //RFC 6874 + IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + ZONEID$), //RFC 6874, with relaxed parsing rules + IPVFUTURE$ = subexp("[vV]" + HEXDIG$$ + "+\\." + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:]") + "+"), IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), //RFC 6874 + REG_NAME$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$)) + "*"), HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")" + "|" + REG_NAME$), PORT$ = subexp(DIGIT$$ + "*"), AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), PCHAR$ = subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@]")), SEGMENT$ = subexp(PCHAR$ + "*"), SEGMENT_NZ$ = subexp(PCHAR$ + "+"), SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$ + "|" + merge(UNRESERVED$$, SUB_DELIMS$$, "[\\@]")) + "+"), PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), //simplified + PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), //simplified + PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), //simplified + PATH_EMPTY$ = "(?!" + PCHAR$ + ")", PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), QUERY$ = subexp(subexp(PCHAR$ + "|" + merge("[\\/\\?]", IPRIVATE$$)) + "*"), FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$"; + return { + NOT_SCHEME: new RegExp(merge("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"), + NOT_USERINFO: new RegExp(merge("[^\\%\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_HOST: new RegExp(merge("[^\\%\\[\\]\\:]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH: new RegExp(merge("[^\\%\\/\\:\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_PATH_NOSCHEME: new RegExp(merge("[^\\%\\/\\@]", UNRESERVED$$, SUB_DELIMS$$), "g"), + NOT_QUERY: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"), + NOT_FRAGMENT: new RegExp(merge("[^\\%]", UNRESERVED$$, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"), + ESCAPE: new RegExp(merge("[^]", UNRESERVED$$, SUB_DELIMS$$), "g"), + UNRESERVED: new RegExp(UNRESERVED$$, "g"), + OTHER_CHARS: new RegExp(merge("[^\\%]", UNRESERVED$$, RESERVED$$), "g"), + PCT_ENCODED: new RegExp(PCT_ENCODED$, "g"), + IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"), + IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$ + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$") //RFC 6874, with relaxed parsing rules + }; +} +export default buildExps(false); +//# sourceMappingURL=regexps-uri.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/regexps-uri.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"regexps-uri.js","sourceRoot":"","sources":["../../src/regexps-uri.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,oBAAoB,KAAa;IACtC,MACC,OAAO,GAAG,UAAU,EACpB,GAAG,GAAG,SAAS,EACf,OAAO,GAAG,OAAO,EACjB,QAAQ,GAAG,SAAS,EACpB,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,EAAG,kBAAkB;IAC1D,IAAI,GAAG,SAAS,EAChB,IAAI,GAAG,SAAS,EAChB,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,EAAG,UAAU;IACvO,YAAY,GAAG,yBAAyB,EACxC,YAAY,GAAG,qCAAqC,EACpD,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,EAC9C,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,6EAA6E,CAAC,CAAC,CAAC,IAAI,EAAG,0CAA0C;IACrJ,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAG,QAAQ;IAC1D,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC,EACnE,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,GAAG,GAAG,CAAC,EACxE,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EACjG,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,EACnK,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,OAAO,GAAG,OAAO,CAAC,EAAG,uBAAuB;IAC3M,YAAY,GAAG,MAAM,CAAC,kBAAkB,GAAG,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG,kBAAkB,GAAG,KAAK,GAAG,kBAAkB,CAAC,EAChI,IAAI,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,EACjC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,EAChE,aAAa,GAAG,MAAM,CAA6D,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAkD,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAkC,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAU,IAAI,GAAG,KAAK,GAAY,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAkC,KAAK,CAAC,EAAE,8CAA8C;IACxK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,GAAkC,IAAI,CAAE,EAAE,6CAA6C;IACvK,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,SAAS,CAAwC,EAAE,4BAA4B;IACtJ,YAAY,GAAG,MAAM,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EACxK,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,EAAG,UAAU;IAC9E,UAAU,GAAG,MAAM,CAAC,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC,EAAG,UAAU;IAClE,kBAAkB,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,EAAG,sCAAsC;IACzI,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,EAClG,WAAW,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,kBAAkB,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC,EAAG,UAAU;IACrH,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,GAAG,GAAG,CAAC,EACxF,KAAK,GAAG,MAAM,CAAC,WAAW,GAAG,GAAG,GAAG,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC,EAC5F,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,EAC7B,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EACxF,MAAM,GAAG,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,EACnF,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,EAC/B,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,EAClC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,EACtG,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,EACtD,cAAc,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,EAAG,YAAY;IACzF,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,aAAa,CAAC,EAAG,YAAY;IACtE,cAAc,GAAG,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,EAAG,YAAY;IACnE,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,GAAG,EAClC,KAAK,GAAG,MAAM,CAAC,aAAa,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,CAAC,EACtH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,EAC3E,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,EACtD,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,CAAC,EACpI,IAAI,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,EAC5G,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,CAAC,EACxI,SAAS,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,EACnG,cAAc,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,EAC/C,aAAa,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,EAEnF,YAAY,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,EAC7U,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,EAC/T,aAAa,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,aAAa,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,cAAc,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,EACrS,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,EAC5D,cAAc,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAChH;IAED,OAAO;QACN,UAAU,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC;QAC3E,YAAY,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QAC9E,QAAQ,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QAChF,QAAQ,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QAChF,iBAAiB,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QACtF,SAAS,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC;QACtG,YAAY,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC;QAC7F,MAAM,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC;QAClE,UAAU,EAAG,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC;QAC1C,WAAW,EAAG,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC;QACxE,WAAW,EAAG,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC;QAC3C,WAAW,EAAG,IAAI,MAAM,CAAC,IAAI,GAAG,YAAY,GAAG,IAAI,CAAC;QACpD,WAAW,EAAG,IAAI,MAAM,CAAC,QAAQ,GAAG,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAE,sCAAsC;KACrL,CAAC;AACH,CAAC;AAED,eAAe,SAAS,CAAC,KAAK,CAAC,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,3 @@ +import { URISchemeHandler } from "../uri"; +declare const handler: URISchemeHandler; +export default handler; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,28 @@ +const handler = { + scheme: "http", + domainHost: true, + parse: function (components, options) { + //report missing host + if (!components.host) { + components.error = components.error || "HTTP URIs must have a host."; + } + return components; + }, + serialize: function (components, options) { + const secure = String(components.scheme).toLowerCase() === "https"; + //normalize the default port + if (components.port === (secure ? 443 : 80) || components.port === "") { + components.port = undefined; + } + //normalize the empty path + if (!components.path) { + components.path = "/"; + } + //NOTE: We do not parse query strings for HTTP URIs + //as WWW Form Url Encoded query strings are part of the HTML4+ spec, + //and not the HTTP spec. + return components; + } +}; +export default handler; +//# sourceMappingURL=http.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/http.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/schemes/http.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAAoB;IAChC,MAAM,EAAG,MAAM;IAEf,UAAU,EAAG,IAAI;IAEjB,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,qBAAqB;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,6BAA6B,CAAC;SACrE;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,SAAS,EAAG,UAAU,UAAwB,EAAE,OAAkB;QACjE,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC;QAEnE,4BAA4B;QAC5B,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,EAAE,EAAE;YACtE,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC;SAC5B;QAED,0BAA0B;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACrB,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;SACtB;QAED,mDAAmD;QACnD,oEAAoE;QACpE,wBAAwB;QAExB,OAAO,UAAU,CAAC;IACnB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,3 @@ +import { URISchemeHandler } from "../uri"; +declare const handler: URISchemeHandler; +export default handler; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +import http from "./http"; +const handler = { + scheme: "https", + domainHost: http.domainHost, + parse: http.parse, + serialize: http.serialize +}; +export default handler; +//# sourceMappingURL=https.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/https.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"https.js","sourceRoot":"","sources":["../../../src/schemes/https.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,MAAM,OAAO,GAAoB;IAChC,MAAM,EAAG,OAAO;IAChB,UAAU,EAAG,IAAI,CAAC,UAAU;IAC5B,KAAK,EAAG,IAAI,CAAC,KAAK;IAClB,SAAS,EAAG,IAAI,CAAC,SAAS;CAC1B,CAAA;AAED,eAAe,OAAO,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,12 @@ +import { URISchemeHandler, URIComponents } from "../uri"; +export interface MailtoHeaders { + [hfname: string]: string; +} +export interface MailtoComponents extends URIComponents { + to: Array; + headers?: MailtoHeaders; + subject?: string; + body?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,148 @@ +import { pctEncChar, pctDecChars, unescapeComponent } from "../uri"; +import punycode from "punycode"; +import { merge, subexp, toUpperCase, toArray } from "../util"; +const O = {}; +const isIRI = true; +//RFC 3986 +const UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]"; +const HEXDIG$$ = "[0-9A-Fa-f]"; //case-insensitive +const PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$)); //expanded +//RFC 5322, except these symbols as per RFC 6068: @ : / ? # [ ] & ; = +//const ATEXT$$ = "[A-Za-z0-9\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QTEXT$$ = "[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]"; //(%d1-8 / %d11-12 / %d14-31 / %d127) +//const QTEXT$$ = merge("[\\x21\\x23-\\x5B\\x5D-\\x7E]", OBS_QTEXT$$); //%d33 / %d35-91 / %d93-126 / obs-qtext +//const VCHAR$$ = "[\\x21-\\x7E]"; +//const WSP$$ = "[\\x20\\x09]"; +//const OBS_QP$ = subexp("\\\\" + merge("[\\x00\\x0D\\x0A]", OBS_QTEXT$$)); //%d0 / CR / LF / obs-qtext +//const FWS$ = subexp(subexp(WSP$$ + "*" + "\\x0D\\x0A") + "?" + WSP$$ + "+"); +//const QUOTED_PAIR$ = subexp(subexp("\\\\" + subexp(VCHAR$$ + "|" + WSP$$)) + "|" + OBS_QP$); +//const QUOTED_STRING$ = subexp('\\"' + subexp(FWS$ + "?" + QCONTENT$) + "*" + FWS$ + "?" + '\\"'); +const ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]"; +const QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]"; +const VCHAR$$ = merge(QTEXT$$, "[\\\"\\\\]"); +const DOT_ATOM_TEXT$ = subexp(ATEXT$$ + "+" + subexp("\\." + ATEXT$$ + "+") + "*"); +const QUOTED_PAIR$ = subexp("\\\\" + VCHAR$$); +const QCONTENT$ = subexp(QTEXT$$ + "|" + QUOTED_PAIR$); +const QUOTED_STRING$ = subexp('\\"' + QCONTENT$ + "*" + '\\"'); +//RFC 6068 +const DTEXT_NO_OBS$$ = "[\\x21-\\x5A\\x5E-\\x7E]"; //%d33-90 / %d94-126 +const SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"; +const QCHAR$ = subexp(UNRESERVED$$ + "|" + PCT_ENCODED$ + "|" + SOME_DELIMS$$); +const DOMAIN$ = subexp(DOT_ATOM_TEXT$ + "|" + "\\[" + DTEXT_NO_OBS$$ + "*" + "\\]"); +const LOCAL_PART$ = subexp(DOT_ATOM_TEXT$ + "|" + QUOTED_STRING$); +const ADDR_SPEC$ = subexp(LOCAL_PART$ + "\\@" + DOMAIN$); +const TO$ = subexp(ADDR_SPEC$ + subexp("\\," + ADDR_SPEC$) + "*"); +const HFNAME$ = subexp(QCHAR$ + "*"); +const HFVALUE$ = HFNAME$; +const HFIELD$ = subexp(HFNAME$ + "\\=" + HFVALUE$); +const HFIELDS2$ = subexp(HFIELD$ + subexp("\\&" + HFIELD$) + "*"); +const HFIELDS$ = subexp("\\?" + HFIELDS2$); +const MAILTO_URI = new RegExp("^mailto\\:" + TO$ + "?" + HFIELDS$ + "?$"); +const UNRESERVED = new RegExp(UNRESERVED$$, "g"); +const PCT_ENCODED = new RegExp(PCT_ENCODED$, "g"); +const NOT_LOCAL_PART = new RegExp(merge("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g"); +const NOT_DOMAIN = new RegExp(merge("[^]", ATEXT$$, "[\\.]", "[\\[]", DTEXT_NO_OBS$$, "[\\]]"), "g"); +const NOT_HFNAME = new RegExp(merge("[^]", UNRESERVED$$, SOME_DELIMS$$), "g"); +const NOT_HFVALUE = NOT_HFNAME; +const TO = new RegExp("^" + TO$ + "$"); +const HFIELDS = new RegExp("^" + HFIELDS2$ + "$"); +function decodeUnreserved(str) { + const decStr = pctDecChars(str); + return (!decStr.match(UNRESERVED) ? str : decStr); +} +const handler = { + scheme: "mailto", + parse: function (components, options) { + const mailtoComponents = components; + const to = mailtoComponents.to = (mailtoComponents.path ? mailtoComponents.path.split(",") : []); + mailtoComponents.path = undefined; + if (mailtoComponents.query) { + let unknownHeaders = false; + const headers = {}; + const hfields = mailtoComponents.query.split("&"); + for (let x = 0, xl = hfields.length; x < xl; ++x) { + const hfield = hfields[x].split("="); + switch (hfield[0]) { + case "to": + const toAddrs = hfield[1].split(","); + for (let x = 0, xl = toAddrs.length; x < xl; ++x) { + to.push(toAddrs[x]); + } + break; + case "subject": + mailtoComponents.subject = unescapeComponent(hfield[1], options); + break; + case "body": + mailtoComponents.body = unescapeComponent(hfield[1], options); + break; + default: + unknownHeaders = true; + headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options); + break; + } + } + if (unknownHeaders) + mailtoComponents.headers = headers; + } + mailtoComponents.query = undefined; + for (let x = 0, xl = to.length; x < xl; ++x) { + const addr = to[x].split("@"); + addr[0] = unescapeComponent(addr[0]); + if (!options.unicodeSupport) { + //convert Unicode IDN -> ASCII IDN + try { + addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase()); + } + catch (e) { + mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e; + } + } + else { + addr[1] = unescapeComponent(addr[1], options).toLowerCase(); + } + to[x] = addr.join("@"); + } + return mailtoComponents; + }, + serialize: function (mailtoComponents, options) { + const components = mailtoComponents; + const to = toArray(mailtoComponents.to); + if (to) { + for (let x = 0, xl = to.length; x < xl; ++x) { + const toAddr = String(to[x]); + const atIdx = toAddr.lastIndexOf("@"); + const localPart = (toAddr.slice(0, atIdx)).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar); + let domain = toAddr.slice(atIdx + 1); + //convert IDN via punycode + try { + domain = (!options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain)); + } + catch (e) { + components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + to[x] = localPart + "@" + domain; + } + components.path = to.join(","); + } + const headers = mailtoComponents.headers = mailtoComponents.headers || {}; + if (mailtoComponents.subject) + headers["subject"] = mailtoComponents.subject; + if (mailtoComponents.body) + headers["body"] = mailtoComponents.body; + const fields = []; + for (const name in headers) { + if (headers[name] !== O[name]) { + fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + + "=" + + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar)); + } + } + if (fields.length) { + components.query = fields.join("&"); + } + return components; + } +}; +export default handler; +//# sourceMappingURL=mailto.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/mailto.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"mailto.js","sourceRoot":"","sources":["../../../src/schemes/mailto.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AACpE,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAa9D,MAAM,CAAC,GAAiB,EAAE,CAAC;AAC3B,MAAM,KAAK,GAAG,IAAI,CAAC;AAEnB,UAAU;AACV,MAAM,YAAY,GAAG,wBAAwB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,2EAA2E,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACjJ,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAE,kBAAkB;AACnD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,aAAa,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAE,UAAU;AAE7O,qEAAqE;AACrE,yFAAyF;AACzF,+BAA+B;AAC/B,uGAAuG;AACvG,+GAA+G;AAC/G,kCAAkC;AAClC,+BAA+B;AAC/B,wGAAwG;AACxG,8EAA8E;AAC9E,8FAA8F;AAC9F,mGAAmG;AACnG,MAAM,OAAO,GAAG,uDAAuD,CAAC;AACxE,MAAM,OAAO,GAAG,4DAA4D,CAAC;AAC7E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACnF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;AAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC;AACvD,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;AAE/D,UAAU;AACV,MAAM,cAAc,GAAG,0BAA0B,CAAC,CAAE,oBAAoB;AACxE,MAAM,aAAa,GAAG,qCAAqC,CAAC;AAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,YAAY,GAAG,GAAG,GAAG,aAAa,CAAC,CAAC;AAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,GAAG,GAAG,GAAG,KAAK,GAAG,cAAc,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;AACpF,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,GAAG,GAAG,GAAG,cAAc,CAAC,CAAC;AAClE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;AACzD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;AAClE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACrC,MAAM,QAAQ,GAAG,OAAO,CAAC;AACzB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC;AACnD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;AAC3C,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;AAE1E,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAClD,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACzF,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACrG,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9E,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACvC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;AAElD,0BAA0B,GAAU;IACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,OAAO,GAAuC;IACnD,MAAM,EAAG,QAAQ;IAEjB,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,MAAM,gBAAgB,GAAG,UAA8B,CAAC;QACxD,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjG,gBAAgB,CAAC,IAAI,GAAG,SAAS,CAAC;QAElC,IAAI,gBAAgB,CAAC,KAAK,EAAE;YAC3B,IAAI,cAAc,GAAG,KAAK,CAAA;YAC1B,MAAM,OAAO,GAAiB,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;gBACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAErC,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE;oBAClB,KAAK,IAAI;wBACR,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;4BACjD,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;yBACpB;wBACD,MAAM;oBACP,KAAK,SAAS;wBACb,gBAAgB,CAAC,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;wBACjE,MAAM;oBACP,KAAK,MAAM;wBACV,gBAAgB,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;wBAC9D,MAAM;oBACP;wBACC,cAAc,GAAG,IAAI,CAAC;wBACtB,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;wBACvF,MAAM;iBACP;aACD;YAED,IAAI,cAAc;gBAAE,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;SACvD;QAED,gBAAgB,CAAC,KAAK,GAAG,SAAS,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;YAC5C,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE9B,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAErC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC5B,kCAAkC;gBAClC,IAAI;oBACH,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;iBAC9E;gBAAC,OAAO,CAAC,EAAE;oBACX,gBAAgB,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,IAAI,0EAA0E,GAAG,CAAC,CAAC;iBAClI;aACD;iBAAM;gBACN,IAAI,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;aAC5D;YAED,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACvB;QAED,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAED,SAAS,EAAG,UAAU,gBAAiC,EAAE,OAAkB;QAC1E,MAAM,UAAU,GAAG,gBAAiC,CAAC;QACrD,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,EAAE,EAAE;YACP,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;gBAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gBACxJ,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAErC,0BAA0B;gBAC1B,IAAI;oBACH,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC1H;gBAAC,OAAO,CAAC,EAAE;oBACX,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,sDAAsD,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;iBAC7J;gBAED,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;aACjC;YAED,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/B;QAED,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,IAAI,EAAE,CAAC;QAE1E,IAAI,gBAAgB,CAAC,OAAO;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC;QAC5E,IAAI,gBAAgB,CAAC,IAAI;YAAE,OAAO,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC;QAEnE,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;YAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC9B,MAAM,CAAC,IAAI,CACV,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;oBAC7G,GAAG;oBACH,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CACvH,CAAC;aACF;SACD;QACD,IAAI,MAAM,CAAC,MAAM,EAAE;YAClB,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACpC;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;CACD,CAAA;AAED,eAAe,OAAO,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,10 @@ +import { URISchemeHandler, URIComponents, URIOptions } from "../uri"; +export interface URNComponents extends URIComponents { + nid?: string; + nss?: string; +} +export interface URNOptions extends URIOptions { + nid?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,49 @@ +import { SCHEMES } from "../uri"; +const NID$ = "(?:[0-9A-Za-z][0-9A-Za-z\\-]{1,31})"; +const PCT_ENCODED$ = "(?:\\%[0-9A-Fa-f]{2})"; +const TRANS$$ = "[0-9A-Za-z\\(\\)\\+\\,\\-\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\/\\?\\#]"; +const NSS$ = "(?:(?:" + PCT_ENCODED$ + "|" + TRANS$$ + ")+)"; +const URN_SCHEME = new RegExp("^urn\\:(" + NID$ + ")$"); +const URN_PATH = new RegExp("^(" + NID$ + ")\\:(" + NSS$ + ")$"); +const URN_PARSE = /^([^\:]+)\:(.*)/; +const URN_EXCLUDED = /[\x00-\x20\\\"\&\<\>\[\]\^\`\{\|\}\~\x7F-\xFF]/g; +//RFC 2141 +const handler = { + scheme: "urn", + parse: function (components, options) { + const matches = components.path && components.path.match(URN_PARSE); + let urnComponents = components; + if (matches) { + const scheme = options.scheme || urnComponents.scheme || "urn"; + const nid = matches[1].toLowerCase(); + const nss = matches[2]; + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = SCHEMES[urnScheme]; + urnComponents.nid = nid; + urnComponents.nss = nss; + urnComponents.path = undefined; + if (schemeHandler) { + urnComponents = schemeHandler.parse(urnComponents, options); + } + } + else { + urnComponents.error = urnComponents.error || "URN can not be parsed."; + } + return urnComponents; + }, + serialize: function (urnComponents, options) { + const scheme = options.scheme || urnComponents.scheme || "urn"; + const nid = urnComponents.nid; + const urnScheme = `${scheme}:${options.nid || nid}`; + const schemeHandler = SCHEMES[urnScheme]; + if (schemeHandler) { + urnComponents = schemeHandler.serialize(urnComponents, options); + } + const uriComponents = urnComponents; + const nss = urnComponents.nss; + uriComponents.path = `${nid || options.nid}:${nss}`; + return uriComponents; + }, +}; +export default handler; +//# sourceMappingURL=urn.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"urn.js","sourceRoot":"","sources":["../../../src/schemes/urn.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,OAAO,EAAE,MAAM,QAAQ,CAAC;AAW7C,MAAM,IAAI,GAAG,qCAAqC,CAAC;AACnD,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,OAAO,GAAG,mEAAmE,CAAC;AACpF,MAAM,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,GAAG,GAAG,OAAO,GAAG,KAAK,CAAC;AAC7D,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACxD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACjE,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,MAAM,YAAY,GAAG,iDAAiD,CAAC;AAEvE,UAAU;AACV,MAAM,OAAO,GAA8C;IAC1D,MAAM,EAAG,KAAK;IAEd,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,aAAa,GAAG,UAA2B,CAAC;QAEhD,IAAI,OAAO,EAAE;YACZ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,KAAK,CAAC;YAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACpD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YAEzC,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;YACxB,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;YACxB,aAAa,CAAC,IAAI,GAAG,SAAS,CAAC;YAE/B,IAAI,aAAa,EAAE;gBAClB,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAkB,CAAC;aAC7E;SACD;aAAM;YACN,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,IAAI,wBAAwB,CAAC;SACtE;QAED,OAAO,aAAa,CAAC;IACtB,CAAC;IAED,SAAS,EAAG,UAAU,aAA2B,EAAE,OAAkB;QACpE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,IAAI,KAAK,CAAC;QAC/D,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC9B,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,aAAa,EAAE;YAClB,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAkB,CAAC;SACjF;QAED,MAAM,aAAa,GAAG,aAA8B,CAAC;QACrD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC9B,aAAa,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAEpD,OAAO,aAAa,CAAC;IACtB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,7 @@ +import { URISchemeHandler, URIOptions } from "../uri"; +import { URNComponents } from "./urn"; +export interface UUIDComponents extends URNComponents { + uuid?: string; +} +declare const handler: URISchemeHandler; +export default handler; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,23 @@ +const UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/; +const UUID_PARSE = /^[0-9A-Fa-f\-]{36}/; +//RFC 4122 +const handler = { + scheme: "urn:uuid", + parse: function (urnComponents, options) { + const uuidComponents = urnComponents; + uuidComponents.uuid = uuidComponents.nss; + uuidComponents.nss = undefined; + if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) { + uuidComponents.error = uuidComponents.error || "UUID is not valid."; + } + return uuidComponents; + }, + serialize: function (uuidComponents, options) { + const urnComponents = uuidComponents; + //normalize UUID + urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); + return urnComponents; + }, +}; +export default handler; +//# sourceMappingURL=urn-uuid.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"urn-uuid.js","sourceRoot":"","sources":["../../../src/schemes/urn-uuid.ts"],"names":[],"mappings":"AAQA,MAAM,IAAI,GAAG,0DAA0D,CAAC;AACxE,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAExC,UAAU;AACV,MAAM,OAAO,GAA+D;IAC3E,MAAM,EAAG,UAAU;IAEnB,KAAK,EAAG,UAAU,aAA2B,EAAE,OAAkB;QAChE,MAAM,cAAc,GAAG,aAA+B,CAAC;QACvD,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC;QACzC,cAAc,CAAC,GAAG,GAAG,SAAS,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;YACpF,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,oBAAoB,CAAC;SACpE;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,SAAS,EAAG,UAAU,cAA6B,EAAE,OAAkB;QACtE,MAAM,aAAa,GAAG,cAA+B,CAAC;QACtD,gBAAgB;QAChB,aAAa,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC9D,OAAO,aAAa,CAAC;IACtB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,7 @@ +import { URISchemeHandler, URIComponents } from "../uri"; +export interface WSComponents extends URIComponents { + resourceName?: string; + secure?: boolean; +} +declare const handler: URISchemeHandler; +export default handler; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,41 @@ +function isSecure(wsComponents) { + return typeof wsComponents.secure === 'boolean' ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === "wss"; +} +//RFC 6455 +const handler = { + scheme: "ws", + domainHost: true, + parse: function (components, options) { + const wsComponents = components; + //indicate if the secure flag is set + wsComponents.secure = isSecure(wsComponents); + //construct resouce name + wsComponents.resourceName = (wsComponents.path || '/') + (wsComponents.query ? '?' + wsComponents.query : ''); + wsComponents.path = undefined; + wsComponents.query = undefined; + return wsComponents; + }, + serialize: function (wsComponents, options) { + //normalize the default port + if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === "") { + wsComponents.port = undefined; + } + //ensure scheme matches secure flag + if (typeof wsComponents.secure === 'boolean') { + wsComponents.scheme = (wsComponents.secure ? 'wss' : 'ws'); + wsComponents.secure = undefined; + } + //reconstruct path from resource name + if (wsComponents.resourceName) { + const [path, query] = wsComponents.resourceName.split('?'); + wsComponents.path = (path && path !== '/' ? path : undefined); + wsComponents.query = query; + wsComponents.resourceName = undefined; + } + //forbid fragment component + wsComponents.fragment = undefined; + return wsComponents; + } +}; +export default handler; +//# sourceMappingURL=ws.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/ws.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/schemes/ws.ts"],"names":[],"mappings":"AAOA,kBAAkB,YAAyB;IAC1C,OAAO,OAAO,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AAC7H,CAAC;AAED,UAAU;AACV,MAAM,OAAO,GAAoB;IAChC,MAAM,EAAG,IAAI;IAEb,UAAU,EAAG,IAAI;IAEjB,KAAK,EAAG,UAAU,UAAwB,EAAE,OAAkB;QAC7D,MAAM,YAAY,GAAG,UAA0B,CAAC;QAEhD,oCAAoC;QACpC,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;QAE7C,wBAAwB;QACxB,YAAY,CAAC,YAAY,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9G,YAAY,CAAC,IAAI,GAAG,SAAS,CAAC;QAC9B,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC;QAE/B,OAAO,YAAY,CAAC;IACrB,CAAC;IAED,SAAS,EAAG,UAAU,YAAyB,EAAE,OAAkB;QAClE,4BAA4B;QAC5B,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,IAAI,KAAK,EAAE,EAAE;YAC1F,YAAY,CAAC,IAAI,GAAG,SAAS,CAAC;SAC9B;QAED,mCAAmC;QACnC,IAAI,OAAO,YAAY,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7C,YAAY,CAAC,MAAM,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC3D,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC;SAChC;QAED,qCAAqC;QACrC,IAAI,YAAY,CAAC,YAAY,EAAE;YAC9B,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3D,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC9D,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC;YAC3B,YAAY,CAAC,YAAY,GAAG,SAAS,CAAC;SACtC;QAED,2BAA2B;QAC3B,YAAY,CAAC,QAAQ,GAAG,SAAS,CAAC;QAElC,OAAO,YAAY,CAAC;IACrB,CAAC;CACD,CAAC;AAEF,eAAe,OAAO,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,3 @@ +import { URISchemeHandler } from "../uri"; +declare const handler: URISchemeHandler; +export default handler; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +import ws from "./ws"; +const handler = { + scheme: "wss", + domainHost: ws.domainHost, + parse: ws.parse, + serialize: ws.serialize +}; +export default handler; +//# sourceMappingURL=wss.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/schemes/wss.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"wss.js","sourceRoot":"","sources":["../../../src/schemes/wss.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,MAAM,CAAC;AAEtB,MAAM,OAAO,GAAoB;IAChC,MAAM,EAAG,KAAK;IACd,UAAU,EAAG,EAAE,CAAC,UAAU;IAC1B,KAAK,EAAG,EAAE,CAAC,KAAK;IAChB,SAAS,EAAG,EAAE,CAAC,SAAS;CACxB,CAAA;AAED,eAAe,OAAO,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/uri.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/uri.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/uri.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/uri.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,59 @@ +export interface URIComponents { + scheme?: string; + userinfo?: string; + host?: string; + port?: number | string; + path?: string; + query?: string; + fragment?: string; + reference?: string; + error?: string; +} +export interface URIOptions { + scheme?: string; + reference?: string; + tolerant?: boolean; + absolutePath?: boolean; + iri?: boolean; + unicodeSupport?: boolean; + domainHost?: boolean; +} +export interface URISchemeHandler { + scheme: string; + parse(components: ParentComponents, options: Options): Components; + serialize(components: Components, options: Options): ParentComponents; + unicodeSupport?: boolean; + domainHost?: boolean; + absolutePath?: boolean; +} +export interface URIRegExps { + NOT_SCHEME: RegExp; + NOT_USERINFO: RegExp; + NOT_HOST: RegExp; + NOT_PATH: RegExp; + NOT_PATH_NOSCHEME: RegExp; + NOT_QUERY: RegExp; + NOT_FRAGMENT: RegExp; + ESCAPE: RegExp; + UNRESERVED: RegExp; + OTHER_CHARS: RegExp; + PCT_ENCODED: RegExp; + IPV4ADDRESS: RegExp; + IPV6ADDRESS: RegExp; +} +export declare const SCHEMES: { + [scheme: string]: URISchemeHandler; +}; +export declare function pctEncChar(chr: string): string; +export declare function pctDecChars(str: string): string; +export declare function parse(uriString: string, options?: URIOptions): URIComponents; +export declare function removeDotSegments(input: string): string; +export declare function serialize(components: URIComponents, options?: URIOptions): string; +export declare function resolveComponents(base: URIComponents, relative: URIComponents, options?: URIOptions, skipNormalization?: boolean): URIComponents; +export declare function resolve(baseURI: string, relativeURI: string, options?: URIOptions): string; +export declare function normalize(uri: string, options?: URIOptions): string; +export declare function normalize(uri: URIComponents, options?: URIOptions): URIComponents; +export declare function equal(uriA: string, uriB: string, options?: URIOptions): boolean; +export declare function equal(uriA: URIComponents, uriB: URIComponents, options?: URIOptions): boolean; +export declare function escapeComponent(str: string, options?: URIOptions): string; +export declare function unescapeComponent(str: string, options?: URIOptions): string; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/uri.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/uri.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/uri.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/uri.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,480 @@ +/** + * URI.js + * + * @fileoverview An RFC 3986 compliant, scheme extendable URI parsing/validating/resolving library for JavaScript. + * @author Gary Court + * @see http://github.com/garycourt/uri-js + */ +/** + * Copyright 2011 Gary Court. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY GARY COURT ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of Gary Court. + */ +import URI_PROTOCOL from "./regexps-uri"; +import IRI_PROTOCOL from "./regexps-iri"; +import punycode from "punycode"; +import { toUpperCase, typeOf, assign } from "./util"; +export const SCHEMES = {}; +export function pctEncChar(chr) { + const c = chr.charCodeAt(0); + let e; + if (c < 16) + e = "%0" + c.toString(16).toUpperCase(); + else if (c < 128) + e = "%" + c.toString(16).toUpperCase(); + else if (c < 2048) + e = "%" + ((c >> 6) | 192).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); + else + e = "%" + ((c >> 12) | 224).toString(16).toUpperCase() + "%" + (((c >> 6) & 63) | 128).toString(16).toUpperCase() + "%" + ((c & 63) | 128).toString(16).toUpperCase(); + return e; +} +export function pctDecChars(str) { + let newStr = ""; + let i = 0; + const il = str.length; + while (i < il) { + const c = parseInt(str.substr(i + 1, 2), 16); + if (c < 128) { + newStr += String.fromCharCode(c); + i += 3; + } + else if (c >= 194 && c < 224) { + if ((il - i) >= 6) { + const c2 = parseInt(str.substr(i + 4, 2), 16); + newStr += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + } + else { + newStr += str.substr(i, 6); + } + i += 6; + } + else if (c >= 224) { + if ((il - i) >= 9) { + const c2 = parseInt(str.substr(i + 4, 2), 16); + const c3 = parseInt(str.substr(i + 7, 2), 16); + newStr += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + } + else { + newStr += str.substr(i, 9); + } + i += 9; + } + else { + newStr += str.substr(i, 3); + i += 3; + } + } + return newStr; +} +function _normalizeComponentEncoding(components, protocol) { + function decodeUnreserved(str) { + const decStr = pctDecChars(str); + return (!decStr.match(protocol.UNRESERVED) ? str : decStr); + } + if (components.scheme) + components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_SCHEME, ""); + if (components.userinfo !== undefined) + components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.host !== undefined) + components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.path !== undefined) + components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved).replace((components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME), pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.query !== undefined) + components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + if (components.fragment !== undefined) + components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase); + return components; +} +; +function _stripLeadingZeros(str) { + return str.replace(/^0*(.*)/, "$1") || "0"; +} +function _normalizeIPv4(host, protocol) { + const matches = host.match(protocol.IPV4ADDRESS) || []; + const [, address] = matches; + if (address) { + return address.split(".").map(_stripLeadingZeros).join("."); + } + else { + return host; + } +} +function _normalizeIPv6(host, protocol) { + const matches = host.match(protocol.IPV6ADDRESS) || []; + const [, address, zone] = matches; + if (address) { + const [last, first] = address.toLowerCase().split('::').reverse(); + const firstFields = first ? first.split(":").map(_stripLeadingZeros) : []; + const lastFields = last.split(":").map(_stripLeadingZeros); + const isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]); + const fieldCount = isLastFieldIPv4Address ? 7 : 8; + const lastFieldsStart = lastFields.length - fieldCount; + const fields = Array(fieldCount); + for (let x = 0; x < fieldCount; ++x) { + fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || ''; + } + if (isLastFieldIPv4Address) { + fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol); + } + const allZeroFields = fields.reduce((acc, field, index) => { + if (!field || field === "0") { + const lastLongest = acc[acc.length - 1]; + if (lastLongest && lastLongest.index + lastLongest.length === index) { + lastLongest.length++; + } + else { + acc.push({ index, length: 1 }); + } + } + return acc; + }, []); + const longestZeroFields = allZeroFields.sort((a, b) => b.length - a.length)[0]; + let newHost; + if (longestZeroFields && longestZeroFields.length > 1) { + const newFirst = fields.slice(0, longestZeroFields.index); + const newLast = fields.slice(longestZeroFields.index + longestZeroFields.length); + newHost = newFirst.join(":") + "::" + newLast.join(":"); + } + else { + newHost = fields.join(":"); + } + if (zone) { + newHost += "%" + zone; + } + return newHost; + } + else { + return host; + } +} +const URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i; +const NO_MATCH_IS_UNDEFINED = ("").match(/(){0}/)[1] === undefined; +export function parse(uriString, options = {}) { + const components = {}; + const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); + if (options.reference === "suffix") + uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString; + const matches = uriString.match(URI_PARSE); + if (matches) { + if (NO_MATCH_IS_UNDEFINED) { + //store each component + components.scheme = matches[1]; + components.userinfo = matches[3]; + components.host = matches[4]; + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = matches[7]; + components.fragment = matches[8]; + //fix port number + if (isNaN(components.port)) { + components.port = matches[5]; + } + } + else { //IE FIX for improper RegExp matching + //store each component + components.scheme = matches[1] || undefined; + components.userinfo = (uriString.indexOf("@") !== -1 ? matches[3] : undefined); + components.host = (uriString.indexOf("//") !== -1 ? matches[4] : undefined); + components.port = parseInt(matches[5], 10); + components.path = matches[6] || ""; + components.query = (uriString.indexOf("?") !== -1 ? matches[7] : undefined); + components.fragment = (uriString.indexOf("#") !== -1 ? matches[8] : undefined); + //fix port number + if (isNaN(components.port)) { + components.port = (uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : undefined); + } + } + if (components.host) { + //normalize IP hosts + components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol); + } + //determine reference type + if (components.scheme === undefined && components.userinfo === undefined && components.host === undefined && components.port === undefined && !components.path && components.query === undefined) { + components.reference = "same-document"; + } + else if (components.scheme === undefined) { + components.reference = "relative"; + } + else if (components.fragment === undefined) { + components.reference = "absolute"; + } + else { + components.reference = "uri"; + } + //check for reference errors + if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) { + components.error = components.error || "URI is not a " + options.reference + " reference."; + } + //find scheme handler + const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //check if scheme can't handle IRIs + if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { + //if host component is a domain name + if (components.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost))) { + //convert Unicode IDN -> ASCII IDN + try { + components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()); + } + catch (e) { + components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e; + } + } + //convert IRI -> URI + _normalizeComponentEncoding(components, URI_PROTOCOL); + } + else { + //normalize encodings + _normalizeComponentEncoding(components, protocol); + } + //perform scheme specific parsing + if (schemeHandler && schemeHandler.parse) { + schemeHandler.parse(components, options); + } + } + else { + components.error = components.error || "URI can not be parsed."; + } + return components; +} +; +function _recomposeAuthority(components, options) { + const protocol = (options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL); + const uriTokens = []; + if (components.userinfo !== undefined) { + uriTokens.push(components.userinfo); + uriTokens.push("@"); + } + if (components.host !== undefined) { + //normalize IP hosts, add brackets and escape zone separator for IPv6 + uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, (_, $1, $2) => "[" + $1 + ($2 ? "%25" + $2 : "") + "]")); + } + if (typeof components.port === "number" || typeof components.port === "string") { + uriTokens.push(":"); + uriTokens.push(String(components.port)); + } + return uriTokens.length ? uriTokens.join("") : undefined; +} +; +const RDS1 = /^\.\.?\//; +const RDS2 = /^\/\.(\/|$)/; +const RDS3 = /^\/\.\.(\/|$)/; +const RDS4 = /^\.\.?$/; +const RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/; +export function removeDotSegments(input) { + const output = []; + while (input.length) { + if (input.match(RDS1)) { + input = input.replace(RDS1, ""); + } + else if (input.match(RDS2)) { + input = input.replace(RDS2, "/"); + } + else if (input.match(RDS3)) { + input = input.replace(RDS3, "/"); + output.pop(); + } + else if (input === "." || input === "..") { + input = ""; + } + else { + const im = input.match(RDS5); + if (im) { + const s = im[0]; + input = input.slice(s.length); + output.push(s); + } + else { + throw new Error("Unexpected dot segment condition"); + } + } + } + return output.join(""); +} +; +export function serialize(components, options = {}) { + const protocol = (options.iri ? IRI_PROTOCOL : URI_PROTOCOL); + const uriTokens = []; + //find scheme handler + const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; + //perform scheme specific serialization + if (schemeHandler && schemeHandler.serialize) + schemeHandler.serialize(components, options); + if (components.host) { + //if host component is an IPv6 address + if (protocol.IPV6ADDRESS.test(components.host)) { + //TODO: normalize IPv6 address as per RFC 5952 + } + //if host component is a domain name + else if (options.domainHost || (schemeHandler && schemeHandler.domainHost)) { + //convert IDN via punycode + try { + components.host = (!options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host)); + } + catch (e) { + components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e; + } + } + } + //normalize encoding + _normalizeComponentEncoding(components, protocol); + if (options.reference !== "suffix" && components.scheme) { + uriTokens.push(components.scheme); + uriTokens.push(":"); + } + const authority = _recomposeAuthority(components, options); + if (authority !== undefined) { + if (options.reference !== "suffix") { + uriTokens.push("//"); + } + uriTokens.push(authority); + if (components.path && components.path.charAt(0) !== "/") { + uriTokens.push("/"); + } + } + if (components.path !== undefined) { + let s = components.path; + if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { + s = removeDotSegments(s); + } + if (authority === undefined) { + s = s.replace(/^\/\//, "/%2F"); //don't allow the path to start with "//" + } + uriTokens.push(s); + } + if (components.query !== undefined) { + uriTokens.push("?"); + uriTokens.push(components.query); + } + if (components.fragment !== undefined) { + uriTokens.push("#"); + uriTokens.push(components.fragment); + } + return uriTokens.join(""); //merge tokens into a string +} +; +export function resolveComponents(base, relative, options = {}, skipNormalization) { + const target = {}; + if (!skipNormalization) { + base = parse(serialize(base, options), options); //normalize base components + relative = parse(serialize(relative, options), options); //normalize relative components + } + options = options || {}; + if (!options.tolerant && relative.scheme) { + target.scheme = relative.scheme; + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } + else { + if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { + //target.authority = relative.authority; + target.userinfo = relative.userinfo; + target.host = relative.host; + target.port = relative.port; + target.path = removeDotSegments(relative.path || ""); + target.query = relative.query; + } + else { + if (!relative.path) { + target.path = base.path; + if (relative.query !== undefined) { + target.query = relative.query; + } + else { + target.query = base.query; + } + } + else { + if (relative.path.charAt(0) === "/") { + target.path = removeDotSegments(relative.path); + } + else { + if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { + target.path = "/" + relative.path; + } + else if (!base.path) { + target.path = relative.path; + } + else { + target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; + } + target.path = removeDotSegments(target.path); + } + target.query = relative.query; + } + //target.authority = base.authority; + target.userinfo = base.userinfo; + target.host = base.host; + target.port = base.port; + } + target.scheme = base.scheme; + } + target.fragment = relative.fragment; + return target; +} +; +export function resolve(baseURI, relativeURI, options) { + const schemelessOptions = assign({ scheme: 'null' }, options); + return serialize(resolveComponents(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions); +} +; +export function normalize(uri, options) { + if (typeof uri === "string") { + uri = serialize(parse(uri, options), options); + } + else if (typeOf(uri) === "object") { + uri = parse(serialize(uri, options), options); + } + return uri; +} +; +export function equal(uriA, uriB, options) { + if (typeof uriA === "string") { + uriA = serialize(parse(uriA, options), options); + } + else if (typeOf(uriA) === "object") { + uriA = serialize(uriA, options); + } + if (typeof uriB === "string") { + uriB = serialize(parse(uriB, options), options); + } + else if (typeOf(uriB) === "object") { + uriB = serialize(uriB, options); + } + return uriA === uriB; +} +; +export function escapeComponent(str, options) { + return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE), pctEncChar); +} +; +export function unescapeComponent(str, options) { + return str && str.toString().replace((!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED), pctDecChars); +} +; +//# sourceMappingURL=uri.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/uri.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/uri.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/uri.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/uri.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"uri.js","sourceRoot":"","sources":["../../src/uri.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAiDrD,MAAM,CAAC,MAAM,OAAO,GAAsC,EAAE,CAAC;AAE7D,MAAM,qBAAqB,GAAU;IACpC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAQ,CAAC;IAEb,IAAI,CAAC,GAAG,EAAE;QAAE,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;SAC/C,IAAI,CAAC,GAAG,GAAG;QAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;SACpD,IAAI,CAAC,GAAG,IAAI;QAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;;QACxH,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAE3K,OAAO,CAAC,CAAC;AACV,CAAC;AAED,MAAM,sBAAsB,GAAU;IACrC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAEtB,OAAO,CAAC,GAAG,EAAE,EAAE;QACd,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7C,IAAI,CAAC,GAAG,GAAG,EAAE;YACZ,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,IAAI,CAAC,CAAC;SACP;aACI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE;YAC7B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE;gBAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;aAC3D;iBAAM;gBACN,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC3B;YACD,CAAC,IAAI,CAAC,CAAC;SACP;aACI,IAAI,CAAC,IAAI,GAAG,EAAE;YAClB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE;gBAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;aAC/E;iBAAM;gBACN,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC3B;YACD,CAAC,IAAI,CAAC,CAAC;SACP;aACI;YACJ,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,CAAC,IAAI,CAAC,CAAC;SACP;KACD;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,qCAAqC,UAAwB,EAAE,QAAmB;IACjF,0BAA0B,GAAU;QACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,UAAU,CAAC,MAAM;QAAE,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACpK,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC/N,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC7N,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClQ,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS;QAAE,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACnN,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAE/N,OAAO,UAAU,CAAC;AACnB,CAAC;AAAA,CAAC;AAEF,4BAA4B,GAAU;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;AAC5C,CAAC;AAED,wBAAwB,IAAW,EAAE,QAAmB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IAE5B,IAAI,OAAO,EAAE;QACZ,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC5D;SAAM;QACN,OAAO,IAAI,CAAC;KACZ;AACF,CAAC;AAED,wBAAwB,IAAW,EAAE,QAAmB;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC;IAElC,IAAI,OAAO,EAAE;QACZ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QAClE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC3D,MAAM,sBAAsB,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC;QACvD,MAAM,MAAM,GAAG,KAAK,CAAS,UAAU,CAAC,CAAC;QAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,EAAE;YACpC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,eAAe,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;SACpE;QAED,IAAI,sBAAsB,EAAE;YAC3B,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;SAC1E;QAED,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAsC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC9F,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,EAAE;gBAC5B,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxC,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,GAAG,WAAW,CAAC,MAAM,KAAK,KAAK,EAAE;oBACpE,WAAW,CAAC,MAAM,EAAE,CAAC;iBACrB;qBAAM;oBACN,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAG,CAAC,EAAE,CAAC,CAAC;iBAChC;aACD;YACD,OAAO,GAAG,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/E,IAAI,OAAc,CAAC;QACnB,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAE;YAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACjF,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACxD;aAAM;YACN,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3B;QAED,IAAI,IAAI,EAAE;YACT,OAAO,IAAI,GAAG,GAAG,IAAI,CAAC;SACtB;QAED,OAAO,OAAO,CAAC;KACf;SAAM;QACN,OAAO,IAAI,CAAC;KACZ;AACF,CAAC;AAED,MAAM,SAAS,GAAG,iIAAiI,CAAC;AACpJ,MAAM,qBAAqB,GAAsB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;AAEvF,MAAM,gBAAgB,SAAgB,EAAE,UAAqB,EAAE;IAC9D,MAAM,UAAU,GAAiB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEvE,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ;QAAE,SAAS,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAEhH,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,OAAO,EAAE;QACZ,IAAI,qBAAqB,EAAE;YAC1B,sBAAsB;YACtB,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACjC,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9B,UAAU,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEjC,iBAAiB;YACjB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC3B,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aAC7B;SACD;aAAM,EAAG,qCAAqC;YAC9C,sBAAsB;YACtB,UAAU,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;YAC5C,UAAU,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC/E,UAAU,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5E,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,UAAU,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC5E,UAAU,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE/E,iBAAiB;YACjB,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAC3B,UAAU,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;aAC9F;SACD;QAED,IAAI,UAAU,CAAC,IAAI,EAAE;YACpB,oBAAoB;YACpB,UAAU,CAAC,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;SACtF;QAED,0BAA0B;QAC1B,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE;YACjM,UAAU,CAAC,SAAS,GAAG,eAAe,CAAC;SACvC;aAAM,IAAI,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE;YAC3C,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC;SAClC;aAAM,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE;YAC7C,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC;SAClC;aAAM;YACN,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;SAC7B;QAED,4BAA4B;QAC5B,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,EAAE;YACtG,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,eAAe,GAAG,OAAO,CAAC,SAAS,GAAG,aAAa,CAAC;SAC3F;QAED,qBAAqB;QACrB,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAEzF,mCAAmC;QACnC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;YACjF,oCAAoC;YACpC,IAAI,UAAU,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE;gBAC3F,kCAAkC;gBAClC,IAAI;oBACH,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;iBAC7G;gBAAC,OAAO,CAAC,EAAE;oBACX,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,iEAAiE,GAAG,CAAC,CAAC;iBAC7G;aACD;YACD,oBAAoB;YACpB,2BAA2B,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;SACtD;aAAM;YACN,qBAAqB;YACrB,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;SAClD;QAED,iCAAiC;QACjC,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,EAAE;YACzC,aAAa,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;SACzC;KACD;SAAM;QACN,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,wBAAwB,CAAC;KAChE;IAED,OAAO,UAAU,CAAC;AACnB,CAAC;AAAA,CAAC;AAEF,6BAA6B,UAAwB,EAAE,OAAkB;IACxE,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,SAAS,GAAiB,EAAE,CAAC;IAEnC,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE;QACtC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpB;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;QAClC,qEAAqE;QACrE,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;KAClL;IAED,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE;QAC/E,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;KACxC;IAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1D,CAAC;AAAA,CAAC;AAEF,MAAM,IAAI,GAAG,UAAU,CAAC;AACxB,MAAM,IAAI,GAAG,aAAa,CAAC;AAC3B,MAAM,IAAI,GAAG,eAAe,CAAC;AAC7B,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,IAAI,GAAG,wBAAwB,CAAC;AAEtC,MAAM,4BAA4B,KAAY;IAC7C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,OAAO,KAAK,CAAC,MAAM,EAAE;QACpB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACtB,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SAChC;aAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC7B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACjC;aAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC7B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,CAAC;SACb;aAAM,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE;YAC3C,KAAK,GAAG,EAAE,CAAC;SACX;aAAM;YACN,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,EAAE,EAAE;gBACP,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACf;iBAAM;gBACN,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;aACpD;SACD;KACD;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAAA,CAAC;AAEF,MAAM,oBAAoB,UAAwB,EAAE,UAAqB,EAAE;IAC1E,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAiB,EAAE,CAAC;IAEnC,qBAAqB;IACrB,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAEzF,uCAAuC;IACvC,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS;QAAE,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE3F,IAAI,UAAU,CAAC,IAAI,EAAE;QACpB,sCAAsC;QACtC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YAC/C,8CAA8C;SAC9C;QAED,oCAAoC;aAC/B,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE;YAC3E,0BAA0B;YAC1B,IAAI;gBACH,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;aACpK;YAAC,OAAO,CAAC,EAAE;gBACX,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,6CAA6C,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;aACpJ;SACD;KACD;IAED,oBAAoB;IACpB,2BAA2B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAElD,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE;QACxD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpB;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,SAAS,KAAK,SAAS,EAAE;QAC5B,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;YACnC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrB;QAED,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE1B,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YACzD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACpB;KACD;IAED,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;QAClC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;YAC7E,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;SACzB;QAED,IAAI,SAAS,KAAK,SAAS,EAAE;YAC5B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAE,yCAAyC;SAC1E;QAED,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAClB;IAED,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE;QACnC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACjC;IAED,IAAI,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE;QACtC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,4BAA4B;AACzD,CAAC;AAAA,CAAC;AAEF,MAAM,4BAA4B,IAAkB,EAAE,QAAsB,EAAE,UAAqB,EAAE,EAAE,iBAA0B;IAChI,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,IAAI,CAAC,iBAAiB,EAAE;QACvB,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,2BAA2B;QAC7E,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAE,+BAA+B;KACzF;IACD,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAExB,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE;QACzC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAChC,wCAAwC;QACxC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC5B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC5B,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;KAC9B;SAAM;QACN,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE;YAClG,wCAAwC;YACxC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YACpC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;SAC9B;aAAM;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;gBACnB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACxB,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE;oBACjC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;iBAC9B;qBAAM;oBACN,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;iBAC1B;aACD;iBAAM;gBACN,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;oBACpC,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBAC/C;qBAAM;oBACN,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;wBACtG,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;qBAClC;yBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;wBACtB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;qBAC5B;yBAAM;wBACN,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;qBACjF;oBACD,MAAM,CAAC,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBAC7C;gBACD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;aAC9B;YACD,oCAAoC;YACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAChC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACxB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SACxB;QACD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;KAC5B;IAED,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAEpC,OAAO,MAAM,CAAC;AACf,CAAC;AAAA,CAAC;AAEF,MAAM,kBAAkB,OAAc,EAAE,WAAkB,EAAE,OAAmB;IAC9E,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,MAAM,EAAG,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/D,OAAO,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;AAC3J,CAAC;AAAA,CAAC;AAIF,MAAM,oBAAoB,GAAO,EAAE,OAAmB;IACrD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC5B,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KAC9C;SAAM,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;QACpC,GAAG,GAAG,KAAK,CAAC,SAAS,CAAgB,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KAC7D;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAAA,CAAC;AAIF,MAAM,gBAAgB,IAAQ,EAAE,IAAQ,EAAE,OAAmB;IAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC7B,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KAChD;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;QACrC,IAAI,GAAG,SAAS,CAAgB,IAAI,EAAE,OAAO,CAAC,CAAC;KAC/C;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC7B,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;KAChD;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE;QACrC,IAAI,GAAG,SAAS,CAAgB,IAAI,EAAE,OAAO,CAAC,CAAC;KAC/C;IAED,OAAO,IAAI,KAAK,IAAI,CAAC;AACtB,CAAC;AAAA,CAAC;AAEF,MAAM,0BAA0B,GAAU,EAAE,OAAmB;IAC9D,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1H,CAAC;AAAA,CAAC;AAEF,MAAM,4BAA4B,GAAU,EAAE,OAAmB;IAChE,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;AACrI,CAAC;AAAA,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/util.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/util.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/util.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/util.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,6 @@ +export declare function merge(...sets: Array): string; +export declare function subexp(str: string): string; +export declare function typeOf(o: any): string; +export declare function toUpperCase(str: string): string; +export declare function toArray(obj: any): Array; +export declare function assign(target: object, source: any): any; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/util.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/util.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/util.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/util.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,36 @@ +export function merge(...sets) { + if (sets.length > 1) { + sets[0] = sets[0].slice(0, -1); + const xl = sets.length - 1; + for (let x = 1; x < xl; ++x) { + sets[x] = sets[x].slice(1, -1); + } + sets[xl] = sets[xl].slice(1); + return sets.join(''); + } + else { + return sets[0]; + } +} +export function subexp(str) { + return "(?:" + str + ")"; +} +export function typeOf(o) { + return o === undefined ? "undefined" : (o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase()); +} +export function toUpperCase(str) { + return str.toUpperCase(); +} +export function toArray(obj) { + return obj !== undefined && obj !== null ? (obj instanceof Array ? obj : (typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj))) : []; +} +export function assign(target, source) { + const obj = target; + if (source) { + for (const key in source) { + obj[key] = source[key]; + } + } + return obj; +} +//# sourceMappingURL=util.js.map \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/util.js.map nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/util.js.map --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/dist/esnext/util.js.map 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/dist/esnext/util.js.map 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1 @@ +{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAG,IAAkB;IAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;YAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/B;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrB;SAAM;QACN,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;KACf;AACF,CAAC;AAED,MAAM,iBAAiB,GAAU;IAChC,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAC1B,CAAC;AAED,MAAM,iBAAiB,CAAK;IAC3B,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACpJ,CAAC;AAED,MAAM,sBAAsB,GAAU;IACrC,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,kBAAkB,GAAO;IAC9B,OAAO,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvM,CAAC;AAGD,MAAM,iBAAiB,MAAc,EAAE,MAAW;IACjD,MAAM,GAAG,GAAG,MAAa,CAAC;IAC1B,IAAI,MAAM,EAAE;QACX,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;YACzB,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SACvB;KACD;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/LICENSE 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/LICENSE 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,11 @@ +Copyright 2011 Gary Court. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY GARY COURT "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARY COURT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of Gary Court. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/LICENSE-MIT.txt nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/LICENSE-MIT.txt --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/LICENSE-MIT.txt 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/LICENSE-MIT.txt 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,20 @@ +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "_from": "punycode@^2.1.0", + "_id": "punycode@2.1.1", + "_inBundle": false, + "_integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "_location": "/uri-js/punycode", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "punycode@^2.1.0", + "name": "punycode", + "escapedName": "punycode", + "rawSpec": "^2.1.0", + "saveSpec": null, + "fetchSpec": "^2.1.0" + }, + "_requiredBy": [ + "/uri-js" + ], + "_resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "_shasum": "b58b010ac40c22c5657616c8d2c2c02c7bf479ec", + "_spec": "punycode@^2.1.0", + "_where": "/Users/darcyclarke/Documents/Repos/npm/cli/node_modules/uri-js", + "author": { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + }, + "bugs": { + "url": "https://github.com/bestiejs/punycode.js/issues" + }, + "bundleDependencies": false, + "contributors": [ + { + "name": "Mathias Bynens", + "url": "https://mathiasbynens.be/" + } + ], + "deprecated": false, + "description": "A robust Punycode converter that fully complies to RFC 3492 and RFC 5891, and works on nearly all JavaScript platforms.", + "devDependencies": { + "codecov": "^1.0.1", + "istanbul": "^0.4.1", + "mocha": "^2.5.3" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "LICENSE-MIT.txt", + "punycode.js", + "punycode.es6.js" + ], + "homepage": "https://mths.be/punycode", + "jsnext:main": "punycode.es6.js", + "jspm": { + "map": { + "./punycode.js": { + "node": "@node/punycode" + } + } + }, + "keywords": [ + "punycode", + "unicode", + "idn", + "idna", + "dns", + "url", + "domain" + ], + "license": "MIT", + "main": "punycode.js", + "module": "punycode.es6.js", + "name": "punycode", + "repository": { + "type": "git", + "url": "git+https://github.com/bestiejs/punycode.js.git" + }, + "scripts": { + "prepublish": "node scripts/prepublish.js", + "test": "mocha tests" + }, + "version": "2.1.1" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/punycode.es6.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/punycode.es6.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/punycode.es6.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/punycode.es6.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,441 @@ +'use strict'; + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, fn) { + const result = []; + let length = array.length; + while (length--) { + result[length] = fn(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ +function mapDomain(string, fn) { + const parts = string.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + const labels = string.split('.'); + const encoded = map(labels, fn).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = array => String.fromCodePoint(...array); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint - 0x30 < 0x0A) { + return codePoint - 0x16; + } + if (codePoint - 0x41 < 0x1A) { + return codePoint - 0x41; + } + if (codePoint - 0x61 < 0x1A) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + let oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + let inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + let basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue == n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.1.0', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +export { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode }; +export default punycode; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/punycode.js nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/punycode.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/punycode.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/punycode.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,440 @@ +'use strict'; + +/** Highest positive signed 32-bit float value */ +const maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +/** Bootstring parameters */ +const base = 36; +const tMin = 1; +const tMax = 26; +const skew = 38; +const damp = 700; +const initialBias = 72; +const initialN = 128; // 0x80 +const delimiter = '-'; // '\x2D' + +/** Regular expressions */ +const regexPunycode = /^xn--/; +const regexNonASCII = /[^\0-\x7E]/; // non-ASCII chars +const regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +/** Error messages */ +const errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' +}; + +/** Convenience shortcuts */ +const baseMinusTMin = base - tMin; +const floor = Math.floor; +const stringFromCharCode = String.fromCharCode; + +/*--------------------------------------------------------------------------*/ + +/** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ +function error(type) { + throw new RangeError(errors[type]); +} + +/** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ +function map(array, fn) { + const result = []; + let length = array.length; + while (length--) { + result[length] = fn(array[length]); + } + return result; +} + +/** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ +function mapDomain(string, fn) { + const parts = string.split('@'); + let result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + const labels = string.split('.'); + const encoded = map(labels, fn).join('.'); + return result + encoded; +} + +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ +function ucs2decode(string) { + const output = []; + let counter = 0; + const length = string.length; + while (counter < length) { + const value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + const extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; +} + +/** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ +const ucs2encode = array => String.fromCodePoint(...array); + +/** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ +const basicToDigit = function(codePoint) { + if (codePoint - 0x30 < 0x0A) { + return codePoint - 0x16; + } + if (codePoint - 0x41 < 0x1A) { + return codePoint - 0x41; + } + if (codePoint - 0x61 < 0x1A) { + return codePoint - 0x61; + } + return base; +}; + +/** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ +const digitToBasic = function(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); +}; + +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ +const adapt = function(delta, numPoints, firstTime) { + let k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; + +/** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ +const decode = function(input) { + // Don't use UCS-2. + const output = []; + const inputLength = input.length; + let i = 0; + let n = initialN; + let bias = initialBias; + + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. + + let basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } + + for (let j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } + + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. + + for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + let oldi = i; + for (let w = 1, k = base; /* no condition */; k += base) { + + if (index >= inputLength) { + error('invalid-input'); + } + + const digit = basicToDigit(input.charCodeAt(index++)); + + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } + + i += digit * w; + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + + if (digit < t) { + break; + } + + const baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } + + w *= baseMinusT; + + } + + const out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); + + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } + + n += floor(i / out); + i %= out; + + // Insert `n` at position `i` of the output. + output.splice(i++, 0, n); + + } + + return String.fromCodePoint(...output); +}; + +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ +const encode = function(input) { + const output = []; + + // Convert the input in UCS-2 to an array of Unicode code points. + input = ucs2decode(input); + + // Cache the length. + let inputLength = input.length; + + // Initialize the state. + let n = initialN; + let delta = 0; + let bias = initialBias; + + // Handle the basic code points. + for (const currentValue of input) { + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + let basicLength = output.length; + let handledCPCount = basicLength; + + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. + + // Finish the basic string with a delimiter unless it's empty. + if (basicLength) { + output.push(delimiter); + } + + // Main encoding loop: + while (handledCPCount < inputLength) { + + // All non-basic code points < n have been handled already. Find the next + // larger one: + let m = maxInt; + for (const currentValue of input) { + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } + + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow. + const handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (const currentValue of input) { + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } + if (currentValue == n) { + // Represent delta as a generalized variable-length integer. + let q = delta; + for (let k = base; /* no condition */; k += base) { + const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + const qMinusT = q - t; + const baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + + } + return output.join(''); +}; + +/** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ +const toUnicode = function(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); +}; + +/** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ +const toASCII = function(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); +}; + +/*--------------------------------------------------------------------------*/ + +/** Define the public API */ +const punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '2.1.0', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode +}; + +module.exports = punycode; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/node_modules/punycode/README.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/node_modules/punycode/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,122 @@ +# Punycode.js [![Build status](https://travis-ci.org/bestiejs/punycode.js.svg?branch=master)](https://travis-ci.org/bestiejs/punycode.js) [![Code coverage status](http://img.shields.io/codecov/c/github/bestiejs/punycode.js.svg)](https://codecov.io/gh/bestiejs/punycode.js) [![Dependency status](https://gemnasium.com/bestiejs/punycode.js.svg)](https://gemnasium.com/bestiejs/punycode.js) + +Punycode.js is a robust Punycode converter that fully complies to [RFC 3492](https://tools.ietf.org/html/rfc3492) and [RFC 5891](https://tools.ietf.org/html/rfc5891). + +This JavaScript library is the result of comparing, optimizing and documenting different open-source implementations of the Punycode algorithm: + +* [The C example code from RFC 3492](https://tools.ietf.org/html/rfc3492#appendix-C) +* [`punycode.c` by _Markus W. Scherer_ (IBM)](http://opensource.apple.com/source/ICU/ICU-400.42/icuSources/common/punycode.c) +* [`punycode.c` by _Ben Noordhuis_](https://github.com/bnoordhuis/punycode/blob/master/punycode.c) +* [JavaScript implementation by _some_](http://stackoverflow.com/questions/183485/can-anyone-recommend-a-good-free-javascript-for-punycode-to-unicode-conversion/301287#301287) +* [`punycode.js` by _Ben Noordhuis_](https://github.com/joyent/node/blob/426298c8c1c0d5b5224ac3658c41e7c2a3fe9377/lib/punycode.js) (note: [not fully compliant](https://github.com/joyent/node/issues/2072)) + +This project was [bundled](https://github.com/joyent/node/blob/master/lib/punycode.js) with Node.js from [v0.6.2+](https://github.com/joyent/node/compare/975f1930b1...61e796decc) until [v7](https://github.com/nodejs/node/pull/7941) (soft-deprecated). + +The current version supports recent versions of Node.js only. It provides a CommonJS module and an ES6 module. For the old version that offers the same functionality with broader support, including Rhino, Ringo, Narwhal, and web browsers, see [v1.4.1](https://github.com/bestiejs/punycode.js/releases/tag/v1.4.1). + +## Installation + +Via [npm](https://www.npmjs.com/): + +```bash +npm install punycode --save +``` + +In [Node.js](https://nodejs.org/): + +```js +const punycode = require('punycode'); +``` + +## API + +### `punycode.decode(string)` + +Converts a Punycode string of ASCII symbols to a string of Unicode symbols. + +```js +// decode domain name parts +punycode.decode('maana-pta'); // 'mañana' +punycode.decode('--dqo34k'); // '☃-⌘' +``` + +### `punycode.encode(string)` + +Converts a string of Unicode symbols to a Punycode string of ASCII symbols. + +```js +// encode domain name parts +punycode.encode('mañana'); // 'maana-pta' +punycode.encode('☃-⌘'); // '--dqo34k' +``` + +### `punycode.toUnicode(input)` + +Converts a Punycode string representing a domain name or an email address to Unicode. Only the Punycoded parts of the input will be converted, i.e. it doesn’t matter if you call it on a string that has already been converted to Unicode. + +```js +// decode domain names +punycode.toUnicode('xn--maana-pta.com'); +// → 'mañana.com' +punycode.toUnicode('xn----dqo34k.com'); +// → '☃-⌘.com' + +// decode email addresses +punycode.toUnicode('джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq'); +// → 'джумла@джpумлатест.bрфa' +``` + +### `punycode.toASCII(input)` + +Converts a lowercased Unicode string representing a domain name or an email address to Punycode. Only the non-ASCII parts of the input will be converted, i.e. it doesn’t matter if you call it with a domain that’s already in ASCII. + +```js +// encode domain names +punycode.toASCII('mañana.com'); +// → 'xn--maana-pta.com' +punycode.toASCII('☃-⌘.com'); +// → 'xn----dqo34k.com' + +// encode email addresses +punycode.toASCII('джумла@джpумлатест.bрфa'); +// → 'джумла@xn--p-8sbkgc5ag7bhce.xn--ba-lmcq' +``` + +### `punycode.ucs2` + +#### `punycode.ucs2.decode(string)` + +Creates an array containing the numeric code point values of each Unicode symbol in the string. While [JavaScript uses UCS-2 internally](https://mathiasbynens.be/notes/javascript-encoding), this function will convert a pair of surrogate halves (each of which UCS-2 exposes as separate characters) into a single code point, matching UTF-16. + +```js +punycode.ucs2.decode('abc'); +// → [0x61, 0x62, 0x63] +// surrogate pair for U+1D306 TETRAGRAM FOR CENTRE: +punycode.ucs2.decode('\uD834\uDF06'); +// → [0x1D306] +``` + +#### `punycode.ucs2.encode(codePoints)` + +Creates a string based on an array of numeric code point values. + +```js +punycode.ucs2.encode([0x61, 0x62, 0x63]); +// → 'abc' +punycode.ucs2.encode([0x1D306]); +// → '\uD834\uDF06' +``` + +### `punycode.version` + +A string representing the current Punycode.js version number. + +## Author + +| [![twitter/mathias](https://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") | +|---| +| [Mathias Bynens](https://mathiasbynens.be/) | + +## License + +Punycode.js is available under the [MIT](https://mths.be/mit) license. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,105 @@ +{ + "_from": "uri-js@^4.2.2", + "_id": "uri-js@4.4.0", + "_inBundle": false, + "_integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "_location": "/uri-js", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "uri-js@^4.2.2", + "name": "uri-js", + "escapedName": "uri-js", + "rawSpec": "^4.2.2", + "saveSpec": null, + "fetchSpec": "^4.2.2" + }, + "_requiredBy": [ + "/har-validator/ajv" + ], + "_resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "_shasum": "aa714261de793e8a82347a7bcc9ce74e86f28602", + "_spec": "uri-js@^4.2.2", + "_where": "/Users/darcyclarke/Documents/Repos/npm/cli/node_modules/har-validator/node_modules/ajv", + "author": { + "name": "Gary Court", + "email": "gary.court@gmail.com" + }, + "bugs": { + "url": "https://github.com/garycourt/uri-js/issues" + }, + "bundleDependencies": false, + "dependencies": { + "punycode": "^2.1.0" + }, + "deprecated": false, + "description": "An RFC 3986/3987 compliant, scheme extendable URI/IRI parsing/validating/resolving library for JavaScript.", + "devDependencies": { + "babel-cli": "^6.26.0", + "babel-plugin-external-helpers": "^6.22.0", + "babel-preset-latest": "^6.24.1", + "mocha": "^3.2.0", + "mocha-qunit-ui": "^0.1.3", + "rollup": "^0.41.6", + "rollup-plugin-babel": "^2.7.1", + "rollup-plugin-node-resolve": "^2.0.0", + "sorcery": "^0.10.0", + "typescript": "^2.8.1", + "uglify-js": "^2.8.14" + }, + "directories": { + "test": "tests" + }, + "files": [ + "dist", + "package.json", + "yarn.lock", + "README.md", + "CHANGELOG", + "LICENSE" + ], + "homepage": "https://github.com/garycourt/uri-js", + "keywords": [ + "URI", + "IRI", + "IDN", + "URN", + "UUID", + "HTTP", + "HTTPS", + "WS", + "WSS", + "MAILTO", + "RFC3986", + "RFC3987", + "RFC5891", + "RFC2616", + "RFC2818", + "RFC2141", + "RFC4122", + "RFC4291", + "RFC5952", + "RFC6068", + "RFC6455", + "RFC6874" + ], + "license": "BSD-2-Clause", + "main": "dist/es5/uri.all.js", + "name": "uri-js", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/garycourt/uri-js.git" + }, + "scripts": { + "build": "npm run build:esnext && npm run build:es5 && npm run build:es5:min", + "build:es5": "rollup -c && cp dist/esnext/uri.d.ts dist/es5/uri.all.d.ts && npm run build:es5:fix-sourcemap", + "build:es5:fix-sourcemap": "sorcery -i dist/es5/uri.all.js", + "build:es5:min": "uglifyjs dist/es5/uri.all.js --support-ie8 --output dist/es5/uri.all.min.js --in-source-map dist/es5/uri.all.js.map --source-map uri.all.min.js.map --comments --compress --mangle --pure-funcs merge subexp && mv uri.all.min.js.map dist/es5/ && cp dist/es5/uri.all.d.ts dist/es5/uri.all.min.d.ts", + "build:esnext": "tsc", + "clean": "rm -rf dist", + "test": "mocha -u mocha-qunit-ui dist/es5/uri.all.js tests/tests.js" + }, + "types": "dist/es5/uri.all.d.ts", + "version": "4.4.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/README.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,201 @@ +# URI.js + +URI.js is an [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt) compliant, scheme extendable URI parsing/validating/resolving library for all JavaScript environments (browsers, Node.js, etc). +It is also compliant with the IRI ([RFC 3987](http://www.ietf.org/rfc/rfc3987.txt)), IDNA ([RFC 5890](http://www.ietf.org/rfc/rfc5890.txt)), IPv6 Address ([RFC 5952](http://www.ietf.org/rfc/rfc5952.txt)), IPv6 Zone Identifier ([RFC 6874](http://www.ietf.org/rfc/rfc6874.txt)) specifications. + +URI.js has an extensive test suite, and works in all (Node.js, web) environments. It weighs in at 6.4kb (gzipped, 17kb deflated). + +## API + +### Parsing + + URI.parse("uri://user:pass@example.com:123/one/two.three?q1=a1&q2=a2#body"); + //returns: + //{ + // scheme : "uri", + // userinfo : "user:pass", + // host : "example.com", + // port : 123, + // path : "/one/two.three", + // query : "q1=a1&q2=a2", + // fragment : "body" + //} + +### Serializing + + URI.serialize({scheme : "http", host : "example.com", fragment : "footer"}) === "http://example.com/#footer" + +### Resolving + + URI.resolve("uri://a/b/c/d?q", "../../g") === "uri://a/g" + +### Normalizing + + URI.normalize("HTTP://ABC.com:80/%7Esmith/home.html") === "http://abc.com/~smith/home.html" + +### Comparison + + URI.equal("example://a/b/c/%7Bfoo%7D", "eXAMPLE://a/./b/../b/%63/%7bfoo%7d") === true + +### IP Support + + //IPv4 normalization + URI.normalize("//192.068.001.000") === "//192.68.1.0" + + //IPv6 normalization + URI.normalize("//[2001:0:0DB8::0:0001]") === "//[2001:0:db8::1]" + + //IPv6 zone identifier support + URI.parse("//[2001:db8::7%25en1]"); + //returns: + //{ + // host : "2001:db8::7%en1" + //} + +### IRI Support + + //convert IRI to URI + URI.serialize(URI.parse("http://examplé.org/rosé")) === "http://xn--exampl-gva.org/ros%C3%A9" + //convert URI to IRI + URI.serialize(URI.parse("http://xn--exampl-gva.org/ros%C3%A9"), {iri:true}) === "http://examplé.org/rosé" + +### Options + +All of the above functions can accept an additional options argument that is an object that can contain one or more of the following properties: + +* `scheme` (string) + + Indicates the scheme that the URI should be treated as, overriding the URI's normal scheme parsing behavior. + +* `reference` (string) + + If set to `"suffix"`, it indicates that the URI is in the suffix format, and the validator will use the option's `scheme` property to determine the URI's scheme. + +* `tolerant` (boolean, false) + + If set to `true`, the parser will relax URI resolving rules. + +* `absolutePath` (boolean, false) + + If set to `true`, the serializer will not resolve a relative `path` component. + +* `iri` (boolean, false) + + If set to `true`, the serializer will unescape non-ASCII characters as per [RFC 3987](http://www.ietf.org/rfc/rfc3987.txt). + +* `unicodeSupport` (boolean, false) + + If set to `true`, the parser will unescape non-ASCII characters in the parsed output as per [RFC 3987](http://www.ietf.org/rfc/rfc3987.txt). + +* `domainHost` (boolean, false) + + If set to `true`, the library will treat the `host` component as a domain name, and convert IDNs (International Domain Names) as per [RFC 5891](http://www.ietf.org/rfc/rfc5891.txt). + +## Scheme Extendable + +URI.js supports inserting custom [scheme](http://en.wikipedia.org/wiki/URI_scheme) dependent processing rules. Currently, URI.js has built in support for the following schemes: + +* http \[[RFC 2616](http://www.ietf.org/rfc/rfc2616.txt)\] +* https \[[RFC 2818](http://www.ietf.org/rfc/rfc2818.txt)\] +* mailto \[[RFC 6068](http://www.ietf.org/rfc/rfc6068.txt)\] +* urn \[[RFC 2141](http://www.ietf.org/rfc/rfc2141.txt)\] +* urn:uuid \[[RFC 4122](http://www.ietf.org/rfc/rfc4122.txt)\] + +### HTTP/HTTPS Support + + URI.equal("HTTP://ABC.COM:80", "http://abc.com/") === true + URI.equal("https://abc.com", "HTTPS://ABC.COM:443/") === true + +### WS/WSS Support + + URI.parse("wss://example.com/foo?bar=baz"); + //returns: + //{ + // scheme : "wss", + // host: "example.com", + // resourceName: "/foo?bar=baz", + // secure: true, + //} + + URI.equal("WS://ABC.COM:80/chat#one", "ws://abc.com/chat") === true + +### Mailto Support + + URI.parse("mailto:alpha@example.com,bravo@example.com?subject=SUBSCRIBE&body=Sign%20me%20up!"); + //returns: + //{ + // scheme : "mailto", + // to : ["alpha@example.com", "bravo@example.com"], + // subject : "SUBSCRIBE", + // body : "Sign me up!" + //} + + URI.serialize({ + scheme : "mailto", + to : ["alpha@example.com"], + subject : "REMOVE", + body : "Please remove me", + headers : { + cc : "charlie@example.com" + } + }) === "mailto:alpha@example.com?cc=charlie@example.com&subject=REMOVE&body=Please%20remove%20me" + +### URN Support + + URI.parse("urn:example:foo"); + //returns: + //{ + // scheme : "urn", + // nid : "example", + // nss : "foo", + //} + +#### URN UUID Support + + URI.parse("urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); + //returns: + //{ + // scheme : "urn", + // nid : "example", + // uuid : "f81d4fae-7dec-11d0-a765-00a0c91e6bf6", + //} + +## Usage + +To load in a browser, use the following tag: + + + +To load in a CommonJS/Module environment, first install with npm/yarn by running on the command line: + + npm install uri-js + # OR + yarn add uri-js + +Then, in your code, load it using: + + const URI = require("uri-js"); + +If you are writing your code in ES6+ (ESNEXT) or TypeScript, you would load it using: + + import * as URI from "uri-js"; + +Or you can load just what you need using named exports: + + import { parse, serialize, resolve, resolveComponents, normalize, equal, removeDotSegments, pctEncChar, pctDecChars, escapeComponent, unescapeComponent } from "uri-js"; + +## Breaking changes + +### Breaking changes from 3.x + +URN parsing has been completely changed to better align with the specification. Scheme is now always `urn`, but has two new properties: `nid` which contains the Namspace Identifier, and `nss` which contains the Namespace Specific String. The `nss` property will be removed by higher order scheme handlers, such as the UUID URN scheme handler. + +The UUID of a URN can now be found in the `uuid` property. + +### Breaking changes from 2.x + +URI validation has been removed as it was slow, exposed a vulnerabilty, and was generally not useful. + +### Breaking changes from 1.x + +The `errors` array on parsed components is now an `error` string. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/yarn.lock nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/yarn.lock --- nodejs-mozilla-12.18.1/deps/npm/node_modules/uri-js/yarn.lock 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/uri-js/yarn.lock 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1923 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws4@^1.2.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-cli@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + dependencies: + babel-core "^6.26.0" + babel-polyfill "^6.26.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + commander "^2.11.0" + convert-source-map "^1.5.0" + fs-readdir-recursive "^1.0.0" + glob "^7.1.2" + lodash "^4.17.4" + output-file-sync "^1.1.2" + path-is-absolute "^1.0.1" + slash "^1.0.0" + source-map "^0.5.6" + v8flags "^2.1.1" + optionalDependencies: + chokidar "^1.6.1" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@6, babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-external-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.9.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-es2016@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz#f900bf93e2ebc0d276df9b8ab59724ebfd959f8b" + dependencies: + babel-plugin-transform-exponentiation-operator "^6.24.1" + +babel-preset-es2017@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz#597beadfb9f7f208bcfd8a12e9b2b29b8b2f14d1" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.24.1" + +babel-preset-latest@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.24.1.tgz#677de069154a7485c2d25c577c02f624b85b85e8" + dependencies: + babel-preset-es2015 "^6.24.1" + babel-preset-es2016 "^6.24.1" + babel-preset-es2017 "^6.24.1" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +browser-resolve@^1.11.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +buffer-crc32@^0.2.5: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + +builtin-modules@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chokidar@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" + dependencies: + graceful-readlink ">= 1.0.0" + +commander@^2.11.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +diff@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +es6-promise@^3.1.2: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +estree-walker@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@~3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +fs-readdir-recursive@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.1.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +graceful-fs@^4.1.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + +graceful-fs@^4.1.3, graceful-fs@^4.1.4: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + +ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash@^4.17.4: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.12, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha-qunit-ui@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/mocha-qunit-ui/-/mocha-qunit-ui-0.1.3.tgz#e3e1ff1dac33222b10cef681efd7f82664141ea9" + +mocha@^3.2.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + he "1.1.1" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +nan@^2.3.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +output-file-sync@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +private@^0.1.6, private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +rc@^1.1.7: + version "1.2.6" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.6: + version "1.6.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" + dependencies: + path-parse "^1.0.5" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + dependencies: + glob "^7.1.3" + +rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.6.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + dependencies: + glob "^7.1.3" + +rollup-plugin-babel@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57" + dependencies: + babel-core "6" + babel-plugin-transform-es2015-classes "^6.9.0" + object-assign "^4.1.0" + rollup-pluginutils "^1.5.0" + +rollup-plugin-node-resolve@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.1.1.tgz#cbb783b0d15b02794d58915350b2f0d902b8ddc8" + dependencies: + browser-resolve "^1.11.0" + builtin-modules "^1.1.0" + resolve "^1.1.6" + +rollup-pluginutils@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" + dependencies: + estree-walker "^0.2.1" + minimatch "^3.0.2" + +rollup@^0.41.6: + version "0.41.6" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.41.6.tgz#e0d05497877a398c104d816d2733a718a7a94e2a" + dependencies: + source-map-support "^0.4.0" + +safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sander@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/sander/-/sander-0.5.1.tgz#741e245e231f07cafb6fdf0f133adfa216a502ad" + dependencies: + es6-promise "^3.1.2" + graceful-fs "^4.1.3" + mkdirp "^0.5.1" + rimraf "^2.5.2" + +semver@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sorcery@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/sorcery/-/sorcery-0.10.0.tgz#8ae90ad7d7cb05fc59f1ab0c637845d5c15a52b7" + dependencies: + buffer-crc32 "^0.2.5" + minimist "^1.2.0" + sander "^0.5.0" + sourcemap-codec "^1.3.0" + +source-map-support@^0.4.0, source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +sourcemap-codec@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.1.tgz#c8fd92d91889e902a07aee392bdd2c5863958ba2" + +sshpk@^1.7.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4: + version "0.0.6" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + dependencies: + block-stream "*" + fstream "^1.0.12" + inherits "2" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@~2.3.0: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +typescript@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.1.tgz#6160e4f8f195d5ba81d4876f9c0cc1fbc0820624" + +uglify-js@^2.8.14: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +uuid@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +v8flags@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,68 +1,42 @@ 'use strict'; -var stringWidth = require('string-width'); -var stripAnsi = require('strip-ansi'); - -var ESCAPES = [ - '\u001b', - '\u009b' -]; - -var END_CODE = 39; - -var ESCAPE_CODES = { - 0: 0, - 1: 22, - 2: 22, - 3: 23, - 4: 24, - 7: 27, - 8: 28, - 9: 29, - 30: 39, - 31: 39, - 32: 39, - 33: 39, - 34: 39, - 35: 39, - 36: 39, - 37: 39, - 90: 39, - 40: 49, - 41: 49, - 42: 49, - 43: 49, - 44: 49, - 45: 49, - 46: 49, - 47: 49 -}; - -function wrapAnsi(code) { - return ESCAPES[0] + '[' + code + 'm'; -} - -// calculate the length of words split on ' ', ignoring -// the extra characters added by ansi escape codes. -function wordLengths(str) { - return str.split(' ').map(function (s) { - return stringWidth(s); - }); -} - -// wrap a long word across multiple rows. -// ansi escape codes do not count towards length. -function wrapWord(rows, word, cols) { - var insideEscape = false; - var visible = stripAnsi(rows[rows.length - 1]).length; - - for (var i = 0; i < word.length; i++) { - var x = word[i]; - - rows[rows.length - 1] += x; +const stringWidth = require('string-width'); +const stripAnsi = require('strip-ansi'); +const ansiStyles = require('ansi-styles'); + +const ESCAPES = new Set([ + '\u001B', + '\u009B' +]); + +const END_CODE = 39; + +const wrapAnsi = code => `${ESCAPES.values().next().value}[${code}m`; + +// Calculate the length of words split on ' ', ignoring +// the extra characters added by ansi escape codes +const wordLengths = string => string.split(' ').map(character => stringWidth(character)); + +// Wrap a long word across multiple rows +// Ansi escape codes do not count towards length +const wrapWord = (rows, word, columns) => { + const characters = [...word]; + + let insideEscape = false; + let visible = stringWidth(stripAnsi(rows[rows.length - 1])); + + for (const [index, character] of characters.entries()) { + const characterLength = stringWidth(character); + + if (visible + characterLength <= columns) { + rows[rows.length - 1] += character; + } else { + rows.push(character); + visible = 0; + } - if (ESCAPES.indexOf(x) !== -1) { + if (ESCAPES.has(character)) { insideEscape = true; - } else if (insideEscape && x === 'm') { + } else if (insideEscape && character === 'm') { insideEscape = false; continue; } @@ -71,98 +45,144 @@ continue; } - visible++; + visible += characterLength; - if (visible >= cols && i < word.length - 1) { + if (visible === columns && index < characters.length - 1) { rows.push(''); visible = 0; } } - // it's possible that the last row we copy over is only - // ansi escape characters, handle this edge-case. + // It's possible that the last row we copy over is only + // ansi escape characters, handle this edge-case if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { rows[rows.length - 2] += rows.pop(); } -} +}; -// the wrap-ansi module can be invoked -// in either 'hard' or 'soft' wrap mode. +// Trims spaces from a string ignoring invisible sequences +const stringVisibleTrimSpacesRight = str => { + const words = str.split(' '); + let last = words.length; + + while (last > 0) { + if (stringWidth(words[last - 1]) > 0) { + break; + } + + last--; + } + + if (last === words.length) { + return str; + } + + return words.slice(0, last).join(' ') + words.slice(last).join(''); +}; + +// The wrap-ansi module can be invoked +// in either 'hard' or 'soft' wrap mode // // 'hard' will never allow a string to take up more -// than cols characters. +// than columns characters // -// 'soft' allows long words to expand past the column length. -function exec(str, cols, opts) { - var options = opts || {}; - - var pre = ''; - var ret = ''; - var escapeCode; - - var lengths = wordLengths(str); - var words = str.split(' '); - var rows = ['']; - - for (var i = 0, word; (word = words[i]) !== undefined; i++) { - var rowLength = stringWidth(rows[rows.length - 1]); - - if (rowLength) { - rows[rows.length - 1] += ' '; - rowLength++; - } - - // in 'hard' wrap mode, the length of a line is - // never allowed to extend past 'cols'. - if (lengths[i] > cols && options.hard) { - if (rowLength) { +// 'soft' allows long words to expand past the column length +const exec = (string, columns, options = {}) => { + if (options.trim !== false && string.trim() === '') { + return ''; + } + + let pre = ''; + let ret = ''; + let escapeCode; + + const lengths = wordLengths(string); + let rows = ['']; + + for (const [index, word] of string.split(' ').entries()) { + if (options.trim !== false) { + rows[rows.length - 1] = rows[rows.length - 1].trimLeft(); + } + + let rowLength = stringWidth(rows[rows.length - 1]); + + if (index !== 0) { + if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { + // If we start with a new word but the current row length equals the length of the columns, add a new row + rows.push(''); + rowLength = 0; + } + + if (rowLength > 0 || options.trim === false) { + rows[rows.length - 1] += ' '; + rowLength++; + } + } + + // In 'hard' wrap mode, the length of a line is + // never allowed to extend past 'columns' + if (options.hard && lengths[index] > columns) { + const remainingColumns = (columns - rowLength); + const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); + const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); + if (breaksStartingNextLine < breaksStartingThisLine) { rows.push(''); } - wrapWord(rows, word, cols); + + wrapWord(rows, word, columns); continue; } - if (rowLength + lengths[i] > cols && rowLength > 0) { - if (options.wordWrap === false && rowLength < cols) { - wrapWord(rows, word, cols); + if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { + if (options.wordWrap === false && rowLength < columns) { + wrapWord(rows, word, columns); continue; } rows.push(''); } + if (rowLength + lengths[index] > columns && options.wordWrap === false) { + wrapWord(rows, word, columns); + continue; + } + rows[rows.length - 1] += word; } - pre = rows.map(function (r) { - return r.trim(); - }).join('\n'); + if (options.trim !== false) { + rows = rows.map(stringVisibleTrimSpacesRight); + } - for (var j = 0; j < pre.length; j++) { - var y = pre[j]; + pre = rows.join('\n'); - ret += y; + for (const [index, character] of [...pre].entries()) { + ret += character; - if (ESCAPES.indexOf(y) !== -1) { - var code = parseFloat(/[0-9][^m]*/.exec(pre.slice(j, j + 4))); + if (ESCAPES.has(character)) { + const code = parseFloat(/\d[^m]*/.exec(pre.slice(index, index + 4))); escapeCode = code === END_CODE ? null : code; } - if (escapeCode && ESCAPE_CODES[escapeCode]) { - if (pre[j + 1] === '\n') { - ret += wrapAnsi(ESCAPE_CODES[escapeCode]); - } else if (y === '\n') { + const code = ansiStyles.codes.get(Number(escapeCode)); + + if (escapeCode && code) { + if (pre[index + 1] === '\n') { + ret += wrapAnsi(code); + } else if (character === '\n') { ret += wrapAnsi(escapeCode); } } } return ret; -} +}; -// for each line break, invoke the method separately. -module.exports = function (str, cols, opts) { - return String(str).split('\n').map(function (substr) { - return exec(substr, cols, opts); - }).join('\n'); +// For each newline, invoke the method separately +module.exports = (string, columns, options) => { + return String(string) + .normalize() + .split('\n') + .map(line => exec(line, columns, options)) + .join('\n'); }; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/license nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/license 2022-04-05 07:17:00.000000000 +0000 @@ -1,21 +1,9 @@ -The MIT License (MIT) +MIT License Copyright (c) Sindre Sorhus (sindresorhus.com) -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,14 @@ +'use strict'; + +module.exports = options => { + options = Object.assign({ + onlyFirst: false + }, options); + + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, options.onlyFirst ? undefined : 'g'); +}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "_from": "ansi-regex@^4.1.0", + "_id": "ansi-regex@4.1.0", + "_inBundle": false, + "_integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "_location": "/wrap-ansi/ansi-regex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ansi-regex@^4.1.0", + "name": "ansi-regex", + "escapedName": "ansi-regex", + "rawSpec": "^4.1.0", + "saveSpec": null, + "fetchSpec": "^4.1.0" + }, + "_requiredBy": [ + "/wrap-ansi/strip-ansi" + ], + "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "_shasum": "8b9f8f08cf1acb843756a839ca8c7e3168c51997", + "_spec": "ansi-regex@^4.1.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/wrap-ansi/node_modules/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/ansi-regex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Regular expression for matching ANSI escape codes", + "devDependencies": { + "ava": "^0.25.0", + "xo": "^0.23.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/chalk/ansi-regex#readme", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "license": "MIT", + "name": "ansi-regex", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/ansi-regex.git" + }, + "scripts": { + "test": "xo && ava", + "view-supported": "node fixtures/view-codes.js" + }, + "version": "4.1.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/ansi-regex/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,87 @@ +# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex) + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex([options]) + +Returns a regex for matching ANSI escape codes. + +#### options + +##### onlyFirst + +Type: `boolean`
+Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +## License + +MIT diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,46 @@ +'use strict'; +/* eslint-disable yoda */ +module.exports = x => { + if (Number.isNaN(x)) { + return false; + } + + // code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if ( + x >= 0x1100 && ( + x <= 0x115f || // Hangul Jamo + x === 0x2329 || // LEFT-POINTING ANGLE BRACKET + x === 0x232a || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2e80 <= x && x <= 0x3247 && x !== 0x303f) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= x && x <= 0x4dbf) || + // CJK Unified Ideographs .. Yi Radicals + (0x4e00 <= x && x <= 0xa4c6) || + // Hangul Jamo Extended-A + (0xa960 <= x && x <= 0xa97c) || + // Hangul Syllables + (0xac00 <= x && x <= 0xd7a3) || + // CJK Compatibility Ideographs + (0xf900 <= x && x <= 0xfaff) || + // Vertical Forms + (0xfe10 <= x && x <= 0xfe19) || + // CJK Compatibility Forms .. Small Form Variants + (0xfe30 <= x && x <= 0xfe6b) || + // Halfwidth and Fullwidth Forms + (0xff01 <= x && x <= 0xff60) || + (0xffe0 <= x && x <= 0xffe6) || + // Kana Supplement + (0x1b000 <= x && x <= 0x1b001) || + // Enclosed Ideographic Supplement + (0x1f200 <= x && x <= 0x1f251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= x && x <= 0x3fffd) + ) + ) { + return true; + } + + return false; +}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,77 @@ +{ + "_from": "is-fullwidth-code-point@^2.0.0", + "_id": "is-fullwidth-code-point@2.0.0", + "_inBundle": false, + "_integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "_location": "/wrap-ansi/is-fullwidth-code-point", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-fullwidth-code-point@^2.0.0", + "name": "is-fullwidth-code-point", + "escapedName": "is-fullwidth-code-point", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/wrap-ansi/string-width" + ], + "_resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "_shasum": "a3b30a5c4f199183167aaab93beefae3ddfb654f", + "_spec": "is-fullwidth-code-point@^2.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/wrap-ansi/node_modules/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-fullwidth-code-point/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if the character represented by a given Unicode code point is fullwidth", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-fullwidth-code-point#readme", + "keywords": [ + "fullwidth", + "full-width", + "full", + "width", + "unicode", + "character", + "char", + "string", + "str", + "codepoint", + "code", + "point", + "is", + "detect", + "check" + ], + "license": "MIT", + "name": "is-fullwidth-code-point", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-fullwidth-code-point.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0", + "xo": { + "esnext": true + } +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,39 @@ +# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) + +> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) + + +## Install + +``` +$ npm install --save is-fullwidth-code-point +``` + + +## Usage + +```js +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +isFullwidthCodePoint('谢'.codePointAt()); +//=> true + +isFullwidthCodePoint('a'.codePointAt()); +//=> false +``` + + +## API + +### isFullwidthCodePoint(input) + +#### input + +Type: `number` + +[Code point](https://en.wikipedia.org/wiki/Code_point) of a character. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/string-width/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/string-width/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/string-width/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/string-width/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,36 +1,38 @@ 'use strict'; -var stripAnsi = require('strip-ansi'); -var codePointAt = require('code-point-at'); -var isFullwidthCodePoint = require('is-fullwidth-code-point'); - -// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1345 -module.exports = function (str) { - if (typeof str !== 'string' || str.length === 0) { +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex')(); + +module.exports = input => { + input = input.replace(emojiRegex, ' '); + + if (typeof input !== 'string' || input.length === 0) { return 0; } - var width = 0; + input = stripAnsi(input); - str = stripAnsi(str); + let width = 0; - for (var i = 0; i < str.length; i++) { - var code = codePointAt(str, i); + for (let i = 0; i < input.length; i++) { + const code = input.codePointAt(i); - // ignore control characters - if (code <= 0x1f || (code >= 0x7f && code <= 0x9f)) { + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { continue; } - // surrogates - if (code >= 0x10000) { - i++; + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; } - if (isFullwidthCodePoint(code)) { - width += 2; - } else { - width++; + // Surrogates + if (code > 0xFFFF) { + i++; } + + width += isFullwidthCodePoint(code) ? 2 : 1; } return width; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/string-width/license nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/string-width/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/string-width/license 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/string-width/license 2022-04-05 07:17:00.000000000 +0000 @@ -1,21 +1,9 @@ -The MIT License (MIT) +MIT License Copyright (c) Sindre Sorhus (sindresorhus.com) -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/string-width/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/string-width/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/string-width/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/string-width/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,27 +1,27 @@ { - "_from": "string-width@^1.0.1", - "_id": "string-width@1.0.2", + "_from": "string-width@^3.0.0", + "_id": "string-width@3.1.0", "_inBundle": false, - "_integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "_integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "_location": "/wrap-ansi/string-width", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "string-width@^1.0.1", + "raw": "string-width@^3.0.0", "name": "string-width", "escapedName": "string-width", - "rawSpec": "^1.0.1", + "rawSpec": "^3.0.0", "saveSpec": null, - "fetchSpec": "^1.0.1" + "fetchSpec": "^3.0.0" }, "_requiredBy": [ "/wrap-ansi" ], - "_resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "_shasum": "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3", - "_spec": "string-width@^1.0.1", - "_where": "/Users/rebecca/code/npm/node_modules/wrap-ansi", + "_resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "_shasum": "22767be21b62af1081574306f69ac51b62203961", + "_spec": "string-width@^3.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/wrap-ansi", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", @@ -32,18 +32,18 @@ }, "bundleDependencies": false, "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" }, "deprecated": false, "description": "Get the visual width of a string - the number of columns required to display it", "devDependencies": { - "ava": "*", - "xo": "*" + "ava": "^1.0.1", + "xo": "^0.23.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" }, "files": [ "index.js" @@ -84,5 +84,5 @@ "scripts": { "test": "xo && ava" }, - "version": "1.0.2" + "version": "3.1.0" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/string-width/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/string-width/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/string-width/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/string-width/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ > Get the visual width of a string - the number of columns required to display it -Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. Useful to be able to measure the actual width of command-line output. @@ -10,7 +10,7 @@ ## Install ``` -$ npm install --save string-width +$ npm install string-width ``` @@ -27,6 +27,9 @@ stringWidth('a'); //=> 1 + +stringWidth('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +// => 5 ``` diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,15 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi from 'strip-ansi'; + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +export default function stripAnsi(string: string): string; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,7 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; + +module.exports = stripAnsi; +module.exports.default = stripAnsi; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,87 @@ +{ + "_from": "strip-ansi@^5.0.0", + "_id": "strip-ansi@5.2.0", + "_inBundle": false, + "_integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "_location": "/wrap-ansi/strip-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-ansi@^5.0.0", + "name": "strip-ansi", + "escapedName": "strip-ansi", + "rawSpec": "^5.0.0", + "saveSpec": null, + "fetchSpec": "^5.0.0" + }, + "_requiredBy": [ + "/wrap-ansi", + "/wrap-ansi/string-width" + ], + "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "_shasum": "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae", + "_spec": "strip-ansi@^5.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/wrap-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/strip-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "deprecated": false, + "description": "Strip ANSI escape codes from a string", + "devDependencies": { + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/chalk/strip-ansi#readme", + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "name": "strip-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/strip-ansi.git" + }, + "scripts": { + "test": "xo && ava && tsd-check" + }, + "version": "5.2.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/node_modules/strip-ansi/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,61 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + +--- + +
+ + Get professional support for 'strip-ansi' with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +## License + +MIT diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,31 +1,29 @@ { - "_from": "wrap-ansi@^2.0.0", - "_id": "wrap-ansi@2.1.0", + "_from": "wrap-ansi@^5.1.0", + "_id": "wrap-ansi@5.1.0", "_inBundle": false, - "_integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "_integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "_location": "/wrap-ansi", "_phantomChildren": { - "code-point-at": "1.1.0", - "number-is-nan": "1.0.1" + "emoji-regex": "7.0.3" }, "_requested": { "type": "range", "registry": true, - "raw": "wrap-ansi@^2.0.0", + "raw": "wrap-ansi@^5.1.0", "name": "wrap-ansi", "escapedName": "wrap-ansi", - "rawSpec": "^2.0.0", + "rawSpec": "^5.1.0", "saveSpec": null, - "fetchSpec": "^2.0.0" + "fetchSpec": "^5.1.0" }, "_requiredBy": [ - "/cliui", - "/tacks/cliui" + "/cliui" ], - "_resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "_shasum": "d8fc3d284dd05794fe84973caecdd1cf824fdd85", - "_spec": "wrap-ansi@^2.0.0", - "_where": "/Users/rebecca/code/npm/node_modules/cliui", + "_resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "_shasum": "1fd1f67235d5b6d0fee781056001bfb694c03b09", + "_spec": "wrap-ansi@^5.1.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/cliui", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", @@ -36,22 +34,22 @@ }, "bundleDependencies": false, "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "deprecated": false, "description": "Wordwrap a string with ANSI escape codes", "devDependencies": { - "ava": "^0.16.0", - "chalk": "^1.1.0", - "coveralls": "^2.11.4", - "has-ansi": "^2.0.0", - "nyc": "^6.2.1", - "strip-ansi": "^3.0.0", - "xo": "*" + "ava": "^1.2.1", + "chalk": "^2.4.2", + "coveralls": "^3.0.3", + "has-ansi": "^3.0.0", + "nyc": "^13.3.0", + "xo": "^0.24.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" }, "files": [ "index.js" @@ -85,36 +83,13 @@ "text" ], "license": "MIT", - "maintainers": [ - { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - { - "name": "Joshua Appelman", - "email": "jappelman@xebia.com", - "url": "jbnicolai.com" - }, - { - "name": "JD Ballard", - "email": "i.am.qix@gmail.com", - "url": "github.com/qix-" - }, - { - "name": "Benjamin Coe", - "email": "ben@npmjs.com", - "url": "github.com/bcoe" - } - ], "name": "wrap-ansi", "repository": { "type": "git", "url": "git+https://github.com/chalk/wrap-ansi.git" }, "scripts": { - "coveralls": "nyc report --reporter=text-lcov | coveralls", "test": "xo && nyc ava" }, - "version": "2.1.0" + "version": "5.1.0" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/wrap-ansi/readme.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/wrap-ansi/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,12 +1,12 @@ # wrap-ansi [![Build Status](https://travis-ci.org/chalk/wrap-ansi.svg?branch=master)](https://travis-ci.org/chalk/wrap-ansi) [![Coverage Status](https://coveralls.io/repos/github/chalk/wrap-ansi/badge.svg?branch=master)](https://coveralls.io/github/chalk/wrap-ansi?branch=master) -> Wordwrap a string with [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) +> Wordwrap a string with [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) ## Install ``` -$ npm install --save wrap-ansi +$ npm install wrap-ansi ``` @@ -24,6 +24,20 @@ +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- + ## API @@ -45,6 +59,8 @@ #### options +Type: `Object` + ##### hard Type: `boolean`
@@ -59,6 +75,13 @@ By default, an attempt is made to split words at spaces, ensuring that they don't extend past the configured columns. If wordWrap is `false`, each column will instead be completely filled splitting words as necessary. +##### trim + +Type: `boolean`
+Default: `true` + +Whitespace on all lines is removed by default. Set this option to `false` if you don't want to trim. + ## Related @@ -68,6 +91,18 @@ - [jsesc](https://github.com/mathiasbynens/jsesc) - Generate ASCII-only output from Unicode strings. Useful for creating test fixtures. +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) +- [Benjamin Coe](https://github.com/bcoe) + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + ## License -MIT © [Sindre Sorhus](https://sindresorhus.com) +MIT diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/y18n/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/y18n/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/y18n/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/y18n/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +### 4.0.1 (2020-11-30) + +### Bug Fixes + +* address prototype pollution issue ([#108](https://www.github.com/yargs/y18n/issues/108)) ([a9ac604](https://www.github.com/yargs/y18n/commit/a9ac604abf756dec9687be3843e2c93bfe581f25)) + # [4.0.0](https://github.com/yargs/y18n/compare/v3.2.1...v4.0.0) (2017-10-10) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/y18n/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/y18n/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/y18n/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/y18n/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true // internal stuff. - this.cache = {} + this.cache = Object.create(null) this.writeQueue = [] } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/y18n/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/y18n/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/y18n/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/y18n/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,30 +1,32 @@ { - "_from": "y18n@^4.0.0", - "_id": "y18n@4.0.0", + "_from": "y18n@4.0.1", + "_id": "y18n@4.0.1", "_inBundle": false, - "_integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "_integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "_location": "/y18n", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "version", "registry": true, - "raw": "y18n@^4.0.0", + "raw": "y18n@4.0.1", "name": "y18n", "escapedName": "y18n", - "rawSpec": "^4.0.0", + "rawSpec": "4.0.1", "saveSpec": null, - "fetchSpec": "^4.0.0" + "fetchSpec": "4.0.1" }, "_requiredBy": [ + "#USER", + "/", "/cacache", "/libnpx", - "/npm-profile/cacache", - "/npm-registry-fetch/cacache" + "/nyc/yargs", + "/yargs" ], - "_resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "_shasum": "95ef94f85ecc81d007c264e190a120f0a3c8566b", - "_spec": "y18n@^4.0.0", - "_where": "/Users/rebecca/code/npm/node_modules/cacache", + "_resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "_shasum": "8db2b83c31c5d75099bb890b23f3094891e247d4", + "_spec": "y18n@4.0.1", + "_where": "/Users/ruyadorno/Documents/workspace/cli-release/cli", "author": { "name": "Ben Coe", "email": "ben@npmjs.com" @@ -66,5 +68,5 @@ "release": "standard-version", "test": "nyc mocha" }, - "version": "4.0.0" + "version": "4.0.1" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,11 +1,265 @@ -# Change Log +# Changelog All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - -# [11.1.1](https://github.com/yargs/yargs/compare/v11.1.0...v11.1.1) (2019-10-06) +### 14.2.2 + +### Bug Fixes + +* temporary fix for libraries that call Object.freeze() ([#1483](https://www.github.com/yargs/yargs/issues/1483)) ([99c2dc8](https://www.github.com/yargs/yargs/commit/99c2dc850e67c606644f8b0c0bca1a59c87dcbcd)) + +### [14.2.1](https://github.com/yargs/yargs/compare/v14.2.0...v14.2.1) (2019-10-30) + + +### Bug Fixes + +* stop-parse was not being respected by commands ([#1459](https://github.com/yargs/yargs/issues/1459)) ([e78e76e](https://github.com/yargs/yargs/commit/e78e76e3ac0551d4f30c71a05ddb21582960fcef)) + +## [14.2.0](https://github.com/yargs/yargs/compare/v14.1.0...v14.2.0) (2019-10-07) + + +### Bug Fixes + +* async middleware was called twice ([#1422](https://github.com/yargs/yargs/issues/1422)) ([9a42b63](https://github.com/yargs/yargs/commit/9a42b63)) +* fix promise check to accept any spec conform object ([#1424](https://github.com/yargs/yargs/issues/1424)) ([0be43d2](https://github.com/yargs/yargs/commit/0be43d2)) +* groups were not being maintained for nested commands ([#1430](https://github.com/yargs/yargs/issues/1430)) ([d38650e](https://github.com/yargs/yargs/commit/d38650e)) +* **docs:** broken markdown link ([#1426](https://github.com/yargs/yargs/issues/1426)) ([236e24e](https://github.com/yargs/yargs/commit/236e24e)) +* support merging deeply nested configuration ([#1423](https://github.com/yargs/yargs/issues/1423)) ([bae66fe](https://github.com/yargs/yargs/commit/bae66fe)) + + +### Features + +* **deps:** introduce yargs-parser with support for unknown-options-as-args ([#1440](https://github.com/yargs/yargs/issues/1440)) ([4d21520](https://github.com/yargs/yargs/commit/4d21520)) + +## [14.1.0](https://github.com/yargs/yargs/compare/v14.0.0...v14.1.0) (2019-09-06) + + +### Bug Fixes + +* **docs:** fix incorrect parserConfiguration documentation ([2a99124](https://github.com/yargs/yargs/commit/2a99124)) +* detect zsh when zsh isnt run as a login prompt ([#1395](https://github.com/yargs/yargs/issues/1395)) ([8792d13](https://github.com/yargs/yargs/commit/8792d13)) +* populate correct value on yargs.parsed and stop warning on access ([#1412](https://github.com/yargs/yargs/issues/1412)) ([bb0eb52](https://github.com/yargs/yargs/commit/bb0eb52)) +* showCompletionScript was logging script twice ([#1388](https://github.com/yargs/yargs/issues/1388)) ([07c8537](https://github.com/yargs/yargs/commit/07c8537)) +* strict() should not ignore hyphenated arguments ([#1414](https://github.com/yargs/yargs/issues/1414)) ([b774b5e](https://github.com/yargs/yargs/commit/b774b5e)) +* **docs:** formalize existing callback argument to showHelp ([#1386](https://github.com/yargs/yargs/issues/1386)) ([d217764](https://github.com/yargs/yargs/commit/d217764)) + + +### Features + +* make it possible to merge configurations when extending other config. ([#1411](https://github.com/yargs/yargs/issues/1411)) ([5d7ad98](https://github.com/yargs/yargs/commit/5d7ad98)) + +## [14.0.0](https://github.com/yargs/yargs/compare/v13.3.0...v14.0.0) (2019-07-30) + + +### ⚠ BREAKING CHANGES + +* we now only officially support yargs.$0 parameter and discourage direct access to yargs.parsed +* previously to this fix methods like `yargs.getOptions()` contained the state of the last command to execute. +* do not allow additional positionals in strict mode + +### Bug Fixes + +* calling parse multiple times now appropriately maintains state ([#1137](https://github.com/yargs/yargs/issues/1137)) ([#1369](https://github.com/yargs/yargs/issues/1369)) ([026b151](https://github.com/yargs/yargs/commit/026b151)) +* prefer user supplied script name in usage ([#1383](https://github.com/yargs/yargs/issues/1383)) ([28c74b9](https://github.com/yargs/yargs/commit/28c74b9)) +* **deps:** use decamelize from npm instead of vendored copy ([#1377](https://github.com/yargs/yargs/issues/1377)) ([015eeb9](https://github.com/yargs/yargs/commit/015eeb9)) +* **examples:** fix usage-options.js to reflect current API ([#1375](https://github.com/yargs/yargs/issues/1375)) ([6e5b76b](https://github.com/yargs/yargs/commit/6e5b76b)) +* do not allow additional positionals in strict mode ([35d777c](https://github.com/yargs/yargs/commit/35d777c)) +* properties accessed on singleton now reflect current state of instance ([#1366](https://github.com/yargs/yargs/issues/1366)) ([409d35b](https://github.com/yargs/yargs/commit/409d35b)) +* tolerate null prototype for config objects with `extends` ([#1376](https://github.com/yargs/yargs/issues/1376)) ([3d26d11](https://github.com/yargs/yargs/commit/3d26d11)), closes [#1372](https://github.com/yargs/yargs/issues/1372) +* yargs.parsed now populated before returning, when yargs.parse() called with no args (#1382) ([e3981fd](https://github.com/yargs/yargs/commit/e3981fd)), closes [#1382](https://github.com/yargs/yargs/issues/1382) + +### Features + +* adds support for multiple epilog messages ([#1384](https://github.com/yargs/yargs/issues/1384)) ([07a5554](https://github.com/yargs/yargs/commit/07a5554)) +* allow completionCommand to be set via showCompletionScript ([#1385](https://github.com/yargs/yargs/issues/1385)) ([5562853](https://github.com/yargs/yargs/commit/5562853)) + +## [13.3.0](https://www.github.com/yargs/yargs/compare/v13.2.4...v13.3.0) (2019-06-10) + + +### Bug Fixes + +* **deps:** yargs-parser update addressing several parsing bugs ([#1357](https://www.github.com/yargs/yargs/issues/1357)) ([e230d5b](https://www.github.com/yargs/yargs/commit/e230d5b)) + + +### Features + +* **i18n:** swap out os-locale dependency for simple inline implementation ([#1356](https://www.github.com/yargs/yargs/issues/1356)) ([4dfa19b](https://www.github.com/yargs/yargs/commit/4dfa19b)) +* support defaultDescription for positional arguments ([812048c](https://www.github.com/yargs/yargs/commit/812048c)) + +### [13.2.4](https://github.com/yargs/yargs/compare/v13.2.3...v13.2.4) (2019-05-13) + + +### Bug Fixes + +* **i18n:** rename unclear 'implication failed' to 'missing dependent arguments' ([#1317](https://github.com/yargs/yargs/issues/1317)) ([bf46813](https://github.com/yargs/yargs/commit/bf46813)) + + + +### [13.2.3](https://github.com/yargs/yargs/compare/v13.2.2...v13.2.3) (2019-05-05) + + +### Bug Fixes + +* **deps:** upgrade cliui for compatibility with latest chalk. ([#1330](https://github.com/yargs/yargs/issues/1330)) ([b20db65](https://github.com/yargs/yargs/commit/b20db65)) +* address issues with dutch translation ([#1316](https://github.com/yargs/yargs/issues/1316)) ([0295132](https://github.com/yargs/yargs/commit/0295132)) + + +### Tests + +* accept differently formatted output ([#1327](https://github.com/yargs/yargs/issues/1327)) ([c294d1b](https://github.com/yargs/yargs/commit/c294d1b)) + + + +## [13.2.2](https://github.com/yargs/yargs/compare/v13.2.1...v13.2.2) (2019-03-06) + + + +## [13.2.1](https://github.com/yargs/yargs/compare/v13.2.0...v13.2.1) (2019-02-18) + + +### Bug Fixes + +* add zsh script to files array ([3180224](https://github.com/yargs/yargs/commit/3180224)) +* support options/sub-commands in zsh completion ([0a96394](https://github.com/yargs/yargs/commit/0a96394)) + + +# [13.2.0](https://github.com/yargs/yargs/compare/v13.1.0...v13.2.0) (2019-02-15) + + +### Features + +* zsh auto completion ([#1292](https://github.com/yargs/yargs/issues/1292)) ([16c5d25](https://github.com/yargs/yargs/commit/16c5d25)), closes [#1156](https://github.com/yargs/yargs/issues/1156) + + + +# [13.1.0](https://github.com/yargs/yargs/compare/v13.0.0...v13.1.0) (2019-02-12) + + +### Features + +* add applyBeforeValidation, for applying sync middleware before validation ([5be206a](https://github.com/yargs/yargs/commit/5be206a)) + + + + +# [13.0.0](https://github.com/yargs/yargs/compare/v12.0.5...v13.0.0) (2019-02-02) + + +### Bug Fixes + +* **deps:** Update os-locale to avoid security vulnerability ([#1270](https://github.com/yargs/yargs/issues/1270)) ([27bf739](https://github.com/yargs/yargs/commit/27bf739)) +* **validation:** Use the error as a message when none exists otherwise ([#1268](https://github.com/yargs/yargs/issues/1268)) ([0510fe6](https://github.com/yargs/yargs/commit/0510fe6)) +* better bash path completion ([#1272](https://github.com/yargs/yargs/issues/1272)) ([da75ea2](https://github.com/yargs/yargs/commit/da75ea2)) +* middleware added multiple times due to reference bug ([#1282](https://github.com/yargs/yargs/issues/1282)) ([64af518](https://github.com/yargs/yargs/commit/64af518)) + + +### Chores + +* ~drop Node 6 from testing matrix ([#1287](https://github.com/yargs/yargs/issues/1287)) ([ef16792](https://github.com/yargs/yargs/commit/ef16792))~ + * _opting to not drop Node 6 support until April, [see](https://github.com/nodejs/Release)._ +* update dependencies ([#1284](https://github.com/yargs/yargs/issues/1284)) ([f25de4f](https://github.com/yargs/yargs/commit/f25de4f)) + + +### Features + +* Add `.parserConfiguration()` method, deprecating package.json config ([#1262](https://github.com/yargs/yargs/issues/1262)) ([3c6869a](https://github.com/yargs/yargs/commit/3c6869a)) +* adds config option for sorting command output ([#1256](https://github.com/yargs/yargs/issues/1256)) ([6916ce9](https://github.com/yargs/yargs/commit/6916ce9)) +* options/positionals with leading '+' and '0' no longer parse as numbers ([#1286](https://github.com/yargs/yargs/issues/1286)) ([e9dc3aa](https://github.com/yargs/yargs/commit/e9dc3aa)) +* support promises in middleware ([f3a4e4f](https://github.com/yargs/yargs/commit/f3a4e4f)) + + +### BREAKING CHANGES + +* options with leading '+' or '0' now parse as strings +* dropping Node 6 which hits end of life in April 2019 +* see [yargs-parser@12.0.0 CHANGELOG](https://github.com/yargs/yargs-parser/blob/master/CHANGELOG.md#breaking-changes) +* we now warn if the yargs stanza package.json is used. + + + + +## [12.0.5](https://github.com/yargs/yargs/compare/v12.0.4...v12.0.5) (2018-11-19) + + +### Bug Fixes + +* allows camel-case, variadic arguments, and strict mode to be combined ([#1247](https://github.com/yargs/yargs/issues/1247)) ([eacc035](https://github.com/yargs/yargs/commit/eacc035)) + + + + +## [12.0.4](https://github.com/yargs/yargs/compare/v12.0.3...v12.0.4) (2018-11-10) + + +### Bug Fixes + +* don't load config when processing positionals ([5d0dc92](https://github.com/yargs/yargs/commit/5d0dc92)) + + + + +## [12.0.3](https://github.com/yargs/yargs/compare/v12.0.2...v12.0.3) (2018-10-06) + + +### Bug Fixes + +* $0 contains first arg in bundled electron apps ([#1206](https://github.com/yargs/yargs/issues/1206)) ([567820b](https://github.com/yargs/yargs/commit/567820b)) +* accept single function for middleware ([66fd6f7](https://github.com/yargs/yargs/commit/66fd6f7)), closes [#1214](https://github.com/yargs/yargs/issues/1214) [#1214](https://github.com/yargs/yargs/issues/1214) +* hide `hidden` options from help output even if they are in a group ([#1221](https://github.com/yargs/yargs/issues/1221)) ([da54028](https://github.com/yargs/yargs/commit/da54028)) +* improve Norwegian Bokmål translations ([#1208](https://github.com/yargs/yargs/issues/1208)) ([a458fa4](https://github.com/yargs/yargs/commit/a458fa4)) +* improve Norwegian Nynorsk translations ([#1207](https://github.com/yargs/yargs/issues/1207)) ([d422eb5](https://github.com/yargs/yargs/commit/d422eb5)) + + + + +## [12.0.2](https://github.com/yargs/yargs/compare/v12.0.1...v12.0.2) (2018-09-04) + + +### Bug Fixes + +* middleware should work regardless of when method is called ([664b265](https://github.com/yargs/yargs/commit/664b265)), closes [#1178](https://github.com/yargs/yargs/issues/1178) +* translation not working when using __ with a single parameter ([#1183](https://github.com/yargs/yargs/issues/1183)) ([f449aea](https://github.com/yargs/yargs/commit/f449aea)) +* upgrade os-locale to version that addresses license issue ([#1195](https://github.com/yargs/yargs/issues/1195)) ([efc0970](https://github.com/yargs/yargs/commit/efc0970)) + + + + +## [12.0.1](https://github.com/yargs/yargs/compare/v12.0.0...v12.0.1) (2018-06-29) + + + + +# [12.0.0](https://github.com/yargs/yargs/compare/v11.1.0...v12.0.0) (2018-06-26) + + +### Bug Fixes + +* .argv and .parse() now invoke identical code path ([#1126](https://github.com/yargs/yargs/issues/1126)) ([f13ebf4](https://github.com/yargs/yargs/commit/f13ebf4)) +* remove the trailing white spaces from the help output ([#1090](https://github.com/yargs/yargs/issues/1090)) ([3f0746c](https://github.com/yargs/yargs/commit/3f0746c)) +* **completion:** Avoid default command and recommendations during completion ([#1123](https://github.com/yargs/yargs/issues/1123)) ([036e7c5](https://github.com/yargs/yargs/commit/036e7c5)) + + +### Chores + +* test Node.js 6, 8 and 10 ([#1160](https://github.com/yargs/yargs/issues/1160)) ([84f9d2b](https://github.com/yargs/yargs/commit/84f9d2b)) +* upgrade to version of yargs-parser that does not populate value for unset boolean ([#1104](https://github.com/yargs/yargs/issues/1104)) ([d4705f4](https://github.com/yargs/yargs/commit/d4705f4)) + + +### Features + +* add support for global middleware, useful for shared tasks like metrics ([#1119](https://github.com/yargs/yargs/issues/1119)) ([9d71ac7](https://github.com/yargs/yargs/commit/9d71ac7)) +* allow setting scriptName $0 ([#1143](https://github.com/yargs/yargs/issues/1143)) ([a2f2eae](https://github.com/yargs/yargs/commit/a2f2eae)) +* remove `setPlaceholderKeys` ([#1105](https://github.com/yargs/yargs/issues/1105)) ([6ee2c82](https://github.com/yargs/yargs/commit/6ee2c82)) + + +### BREAKING CHANGES + +* Options absent from `argv` (not set via CLI argument) are now absent from the parsed result object rather than being set with `undefined` +* drop Node 4 from testing matrix, such that we'll gradually start drifting away from supporting Node 4. +* yargs-parser does not populate 'false' when boolean flag is not passed +* tests that assert against help output will need to be updated + -* backport security fix for os-locale. # [11.1.0](https://github.com/yargs/yargs/compare/v11.0.0...v11.1.0) (2018-03-04) @@ -21,6 +275,8 @@ * allow hidden options to be displayed with --show-hidden ([#1061](https://github.com/yargs/yargs/issues/1061)) ([ea862ae](https://github.com/yargs/yargs/commit/ea862ae)) * extend *.rc files in addition to json ([#1080](https://github.com/yargs/yargs/issues/1080)) ([11691a6](https://github.com/yargs/yargs/commit/11691a6)) + + # [11.0.0](https://github.com/yargs/yargs/compare/v10.1.2...v11.0.0) (2018-01-22) @@ -656,7 +912,7 @@ - [#308](https://github.com/bcoe/yargs/pull/308) Yargs now handles environment variables (@nexdrew) - [#302](https://github.com/bcoe/yargs/pull/302) Add Indonesian translation (@rilut) - [#300](https://github.com/bcoe/yargs/pull/300) Add Turkish translation (@feyzo) -- [#298](https://github.com/bcoe/yargs/pull/298) Add Norwegian Bokmål translation (@sindresorhus) +- [#298](https://github.com/bcoe/yargs/pull/298) Add Norwegian Bokmål translation (@sindresorhus) - [#297](https://github.com/bcoe/yargs/pull/297) Fix for layout of cjk characters (@disjukr) - [#296](https://github.com/bcoe/yargs/pull/296) Add Korean translation (@disjukr) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/completion.sh.hbs nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/completion.sh.hbs --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/completion.sh.hbs 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/completion.sh.hbs 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -###-begin-{{app_name}}-completions-### -# -# yargs command completion script -# -# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc -# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX. -# -_yargs_completions() -{ - local cur_word args type_list - - cur_word="${COMP_WORDS[COMP_CWORD]}" - args=("${COMP_WORDS[@]}") - - # ask yargs to generate completions. - type_list=$({{app_path}} --get-yargs-completions "${args[@]}") - - COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) ) - - # if no match was found, fall back to filename completion - if [ ${#COMPREPLY[@]} -eq 0 ]; then - COMPREPLY=( $(compgen -f -- "${cur_word}" ) ) - fi - - return 0 -} -complete -F _yargs_completions {{app_name}} -###-end-{{app_name}}-completions-### diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -25,8 +25,15 @@ Object.keys(inst).forEach((key) => { if (key === 'argv') { Argv.__defineGetter__(key, inst.__lookupGetter__(key)) + } else if (typeof inst[key] === 'function') { + Argv[key] = inst[key].bind(inst) } else { - Argv[key] = typeof inst[key] === 'function' ? inst[key].bind(inst) : inst[key] + Argv.__defineGetter__('$0', () => { + return inst.$0 + }) + Argv.__defineGetter__('parsed', () => { + return inst.parsed + }) } }) } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/apply-extends.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/apply-extends.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/apply-extends.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/apply-extends.js 2022-04-05 07:17:00.000000000 +0000 @@ -16,12 +16,26 @@ return path.resolve(cwd, pathToExtend) } -function applyExtends (config, cwd) { +function mergeDeep (config1, config2) { + const target = {} + const isObject = obj => obj && typeof obj === 'object' && !Array.isArray(obj) + Object.assign(target, config1) + for (let key of Object.keys(config2)) { + if (isObject(config2[key]) && isObject(target[key])) { + target[key] = mergeDeep(config1[key], config2[key]) + } else { + target[key] = config2[key] + } + } + return target +} + +function applyExtends (config, cwd, mergeExtends) { let defaultConfig = {} - if (config.hasOwnProperty('extends')) { + if (Object.prototype.hasOwnProperty.call(config, 'extends')) { if (typeof config.extends !== 'string') return defaultConfig - const isPath = /\.json$/.test(config.extends) + const isPath = /\.json|\..*rc$/.test(config.extends) let pathToDefault = null if (!isPath) { try { @@ -42,12 +56,12 @@ defaultConfig = isPath ? JSON.parse(fs.readFileSync(pathToDefault, 'utf8')) : require(config.extends) delete config.extends - defaultConfig = applyExtends(defaultConfig, path.dirname(pathToDefault)) + defaultConfig = applyExtends(defaultConfig, path.dirname(pathToDefault), mergeExtends) } previouslyVisitedConfigs = [] - return Object.assign({}, defaultConfig, config) + return mergeExtends ? mergeDeep(defaultConfig, config) : Object.assign({}, defaultConfig, config) } module.exports = applyExtends diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/argsert.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/argsert.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/argsert.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/argsert.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,16 +1,18 @@ 'use strict' + +// hoisted due to circular dependency on command. +module.exports = argsert const command = require('./command')() const YError = require('./yerror') const positionName = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth'] - -module.exports = function argsert (expected, callerArguments, length) { +function argsert (expected, callerArguments, length) { // TODO: should this eventually raise an exception. try { // preface the argument description with "cmd", so // that we can run it through yargs' command parser. let position = 0 - let parsed = {demanded: [], optional: []} + let parsed = { demanded: [], optional: [] } if (typeof expected === 'object') { length = callerArguments callerArguments = expected diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/command.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/command.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/command.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/command.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,8 @@ 'use strict' const inspect = require('util').inspect +const isPromise = require('./is-promise') +const { applyMiddleware, commandMiddlewareFactory } = require('./middleware') const path = require('path') const Parser = require('yargs-parser') @@ -9,15 +11,18 @@ // handles parsing positional arguments, // and populating argv with said positional // arguments. -module.exports = function command (yargs, usage, validation) { +module.exports = function command (yargs, usage, validation, globalMiddleware) { const self = {} let handlers = {} let aliasMap = {} let defaultCommand - self.addHandler = function addHandler (cmd, description, builder, handler, middlewares) { + globalMiddleware = globalMiddleware || [] + + self.addHandler = function addHandler (cmd, description, builder, handler, commandMiddleware) { let aliases = [] + const middlewares = commandMiddlewareFactory(commandMiddleware) handler = handler || (() => {}) - middlewares = middlewares || [] + if (Array.isArray(cmd)) { aliases = cmd.slice(1) cmd = cmd[0] @@ -169,7 +174,7 @@ let numFiles = currentContext.files.length const parentCommands = currentContext.commands.slice() - // what does yargs look like after the buidler is run? + // what does yargs look like after the builder is run? let innerArgv = parsed.argv let innerYargs = null let positionalMap = {} @@ -181,24 +186,17 @@ // a function can be provided, which builds // up a yargs chain and possibly returns it. innerYargs = commandHandler.builder(yargs.reset(parsed.aliases)) - // if the builder function did not yet parse argv with reset yargs - // and did not explicitly set a usage() string, then apply the - // original command string as usage() for consistent behavior with - // options object below. - if (yargs.parsed === false) { - if (shouldUpdateUsage(yargs)) { - yargs.getUsageInstance().usage( - usageFromParentCommandsCommandHandler(parentCommands, commandHandler), - commandHandler.description - ) - } - innerArgv = innerYargs ? innerYargs._parseArgs(null, null, true, commandIndex) : yargs._parseArgs(null, null, true, commandIndex) - } else { - innerArgv = yargs.parsed.argv + if (!innerYargs || (typeof innerYargs._parseArgs !== 'function')) { + innerYargs = yargs } - - if (innerYargs && yargs.parsed === false) aliases = innerYargs.parsed.aliases - else aliases = yargs.parsed.aliases + if (shouldUpdateUsage(innerYargs)) { + innerYargs.getUsageInstance().usage( + usageFromParentCommandsCommandHandler(parentCommands, commandHandler), + commandHandler.description + ) + } + innerArgv = innerYargs._parseArgs(null, null, true, commandIndex) + aliases = innerYargs.parsed.aliases } else if (typeof commandHandler.builder === 'object') { // as a short hand, an object can instead be provided, specifying // the options that a command takes. @@ -220,24 +218,37 @@ positionalMap = populatePositionals(commandHandler, innerArgv, currentContext, yargs) } + const middlewares = globalMiddleware.slice(0).concat(commandHandler.middlewares || []) + applyMiddleware(innerArgv, yargs, middlewares, true) + // we apply validation post-hoc, so that custom // checks get passed populated positional arguments. if (!yargs._hasOutput()) yargs._runValidation(innerArgv, aliases, positionalMap, yargs.parsed.error) if (commandHandler.handler && !yargs._hasOutput()) { yargs._setHasOutput() - if (commandHandler.middlewares.length > 0) { - const middlewareArgs = commandHandler.middlewares.reduce(function (initialObj, middleware) { - return Object.assign(initialObj, middleware(innerArgv)) - }, {}) - Object.assign(innerArgv, middlewareArgs) + // to simplify the parsing of positionals in commands, + // we temporarily populate '--' rather than _, with arguments + const populateDoubleDash = !!yargs.getOptions().configuration['populate--'] + if (!populateDoubleDash) yargs._copyDoubleDash(innerArgv) + + innerArgv = applyMiddleware(innerArgv, yargs, middlewares, false) + let handlerResult + if (isPromise(innerArgv)) { + handlerResult = innerArgv.then(argv => commandHandler.handler(argv)) + } else { + handlerResult = commandHandler.handler(innerArgv) } - const handlerResult = commandHandler.handler(innerArgv) - if (handlerResult && typeof handlerResult.then === 'function') { - handlerResult.then( - null, - (error) => yargs.getUsageInstance().fail(null, error) - ) + + if (isPromise(handlerResult)) { + yargs.getUsageInstance().cacheHelpMessage() + handlerResult.catch(error => { + try { + yargs.getUsageInstance().fail(null, error) + } catch (err) { + // fail's throwing would cause an unhandled rejection. + } + }) } } @@ -328,6 +339,7 @@ options.default = Object.assign(parseOptions.default, options.default) options.alias = Object.assign(parseOptions.alias, options.alias) options.array = options.array.concat(parseOptions.array) + delete options.config // don't load config when processing positionals. const unparsed = [] Object.keys(positionalMap).forEach((key) => { @@ -340,7 +352,12 @@ // short-circuit parse. if (!unparsed.length) return - const parsed = Parser.detailed(unparsed, options) + const config = Object.assign({}, options.configuration, { + 'populate--': true + }) + const parsed = Parser.detailed(unparsed, Object.assign({}, options, { + configuration: config + })) if (parsed.error) { yargs.getUsageInstance().fail(parsed.error.message, parsed.error) @@ -354,6 +371,9 @@ Object.keys(parsed.argv).forEach((key) => { if (positionalKeys.indexOf(key) !== -1) { + // any new aliases need to be placed in positionalMap, which + // is used for validation. + if (!positionalMap[key]) positionalMap[key] = parsed.argv[key] argv[key] = parsed.argv[key] } }) @@ -408,18 +428,19 @@ // the state of commands such that // we can apply .parse() multiple times // with the same yargs instance. - let frozen + let frozens = [] self.freeze = () => { - frozen = {} + let frozen = {} + frozens.push(frozen) frozen.handlers = handlers frozen.aliasMap = aliasMap frozen.defaultCommand = defaultCommand } self.unfreeze = () => { + let frozen = frozens.pop() handlers = frozen.handlers aliasMap = frozen.aliasMap defaultCommand = frozen.defaultCommand - frozen = undefined } return self diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/completion.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/completion.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/completion.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/completion.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,4 @@ 'use strict' -const fs = require('fs') const path = require('path') // add bash completions to your @@ -9,6 +8,8 @@ completionKey: 'get-yargs-completions' } + const zshShell = (process.env.SHELL && process.env.SHELL.indexOf('zsh') !== -1) || + (process.env.ZSH_NAME && process.env.ZSH_NAME.indexOf('zsh') !== -1) // get a list of completion commands. // 'args' is the array of strings from the line to be completed self.getCompletion = function getCompletion (args, done) { @@ -16,6 +17,7 @@ const current = args.length ? args[args.length - 1] : '' const argv = yargs.parse(args, true) const aliases = yargs.parsed.aliases + const parentCommands = yargs.getContext().commands // a custom completion function can be provided // to completion(). @@ -54,22 +56,33 @@ } } - if (!current.match(/^-/)) { + if (!current.match(/^-/) && parentCommands[parentCommands.length - 1] !== current) { usage.getCommands().forEach((usageCommand) => { const commandName = command.parseCommand(usageCommand[0]).cmd if (args.indexOf(commandName) === -1) { - completions.push(commandName) + if (!zshShell) { + completions.push(commandName) + } else { + const desc = usageCommand[1] || '' + completions.push(commandName.replace(/:/g, '\\:') + ':' + desc) + } } }) } - if (current.match(/^-/)) { + if (current.match(/^-/) || (current === '' && completions.length === 0)) { + const descs = usage.getDescriptions() Object.keys(yargs.getOptions().key).forEach((key) => { // If the key and its aliases aren't in 'args', add the key to 'completions' const keyAndAliases = [key].concat(aliases[key] || []) const notInArgs = keyAndAliases.every(val => args.indexOf(`--${val}`) === -1) if (notInArgs) { - completions.push(`--${key}`) + if (!zshShell) { + completions.push(`--${key}`) + } else { + const desc = descs[key] || '' + completions.push(`--${key.replace(/:/g, '\\:')}:${desc.replace('__yargsString__:', '')}`) + } } }) } @@ -79,10 +92,8 @@ // generate the completion script to add to your .bashrc. self.generateCompletionScript = function generateCompletionScript ($0, cmd) { - let script = fs.readFileSync( - path.resolve(__dirname, '../completion.sh.hbs'), - 'utf-8' - ) + const templates = require('./completion-templates') + let script = zshShell ? templates.completionZshTemplate : templates.completionShTemplate const name = path.basename($0) // add ./to applications not yet installed as bin. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/completion-templates.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/completion-templates.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/completion-templates.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/completion-templates.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,49 @@ +exports.completionShTemplate = +`###-begin-{{app_name}}-completions-### +# +# yargs command completion script +# +# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc +# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX. +# +_yargs_completions() +{ + local cur_word args type_list + + cur_word="\${COMP_WORDS[COMP_CWORD]}" + args=("\${COMP_WORDS[@]}") + + # ask yargs to generate completions. + type_list=$({{app_path}} --get-yargs-completions "\${args[@]}") + + COMPREPLY=( $(compgen -W "\${type_list}" -- \${cur_word}) ) + + # if no match was found, fall back to filename completion + if [ \${#COMPREPLY[@]} -eq 0 ]; then + COMPREPLY=() + fi + + return 0 +} +complete -o default -F _yargs_completions {{app_name}} +###-end-{{app_name}}-completions-### +` + +exports.completionZshTemplate = `###-begin-{{app_name}}-completions-### +# +# yargs command completion script +# +# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc +# or {{app_path}} {{completion_command}} >> ~/.zsh_profile on OSX. +# +_{{app_name}}_yargs_completions() +{ + local reply + local si=$IFS + IFS=$'\n' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "\${words[@]}")) + IFS=$si + _describe 'values' reply +} +compdef _{{app_name}}_yargs_completions {{app_name}} +###-end-{{app_name}}-completions-### +` diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/is-promise.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/is-promise.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/is-promise.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/is-promise.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,3 @@ +module.exports = function isPromise (maybePromise) { + return !!maybePromise && !!maybePromise.then && (typeof maybePromise.then === 'function') +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/levenshtein.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/levenshtein.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/levenshtein.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/levenshtein.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,11 +1,22 @@ /* Copyright (c) 2011 Andrei Mackenzie -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // levenshtein distance algorithm, pulled from Andrei Mackenzie's MIT licensed. @@ -37,8 +48,8 @@ matrix[i][j] = matrix[i - 1][j - 1] } else { matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution - Math.min(matrix[i][j - 1] + 1, // insertion - matrix[i - 1][j] + 1)) // deletion + Math.min(matrix[i][j - 1] + 1, // insertion + matrix[i - 1][j] + 1)) // deletion } } } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/middleware.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/middleware.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/middleware.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/middleware.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,64 @@ +'use strict' + +// hoisted due to circular dependency on command. +module.exports = { + applyMiddleware, + commandMiddlewareFactory, + globalMiddlewareFactory +} +const isPromise = require('./is-promise') +const argsert = require('./argsert') + +function globalMiddlewareFactory (globalMiddleware, context) { + return function (callback, applyBeforeValidation = false) { + argsert(' [boolean]', [callback, applyBeforeValidation], arguments.length) + if (Array.isArray(callback)) { + for (let i = 0; i < callback.length; i++) { + if (typeof callback[i] !== 'function') { + throw Error('middleware must be a function') + } + callback[i].applyBeforeValidation = applyBeforeValidation + } + Array.prototype.push.apply(globalMiddleware, callback) + } else if (typeof callback === 'function') { + callback.applyBeforeValidation = applyBeforeValidation + globalMiddleware.push(callback) + } + return context + } +} + +function commandMiddlewareFactory (commandMiddleware) { + if (!commandMiddleware) return [] + return commandMiddleware.map(middleware => { + middleware.applyBeforeValidation = false + return middleware + }) +} + +function applyMiddleware (argv, yargs, middlewares, beforeValidation) { + const beforeValidationError = new Error('middleware cannot return a promise when applyBeforeValidation is true') + return middlewares + .reduce((accumulation, middleware) => { + if (middleware.applyBeforeValidation !== beforeValidation) { + return accumulation + } + + if (isPromise(accumulation)) { + return accumulation + .then(initialObj => + Promise.all([initialObj, middleware(initialObj, yargs)]) + ) + .then(([initialObj, middlewareObj]) => + Object.assign(initialObj, middlewareObj) + ) + } else { + const result = middleware(argv, yargs) + if (beforeValidation && isPromise(result)) throw beforeValidationError + + return isPromise(result) + ? result.then(middlewareObj => Object.assign(accumulation, middlewareObj)) + : Object.assign(accumulation, result) + } + }, argv) +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/usage.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/usage.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/usage.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/usage.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,7 @@ 'use strict' // this file handles outputting usage instructions, // failures, etc. keeps logging in one place. +const decamelize = require('decamelize') const stringWidth = require('string-width') const objFilter = require('./obj-filter') const path = require('path') @@ -45,7 +46,10 @@ // don't output failure message more than once if (!failureOutput) { failureOutput = true - if (showHelpOnFail) yargs.showHelp('error') + if (showHelpOnFail) { + yargs.showHelp('error') + logger.error() + } if (msg || err) logger.error(msg || err) if (failMessage) { if (msg || err) logger.error('') @@ -118,9 +122,9 @@ } self.getDescriptions = () => descriptions - let epilog + let epilogs = [] self.epilog = (msg) => { - epilog = msg + epilogs.push(msg) } let wrapSet = false @@ -144,24 +148,26 @@ const defaultGroup = 'Options:' self.help = function help () { + if (cachedHelpMessage) return cachedHelpMessage normalizeAliases() // handle old demanded API - const base$0 = path.basename(yargs.$0) + const base$0 = yargs.customScriptName ? yargs.$0 : path.basename(yargs.$0) const demandedOptions = yargs.getDemandedOptions() const demandedCommands = yargs.getDemandedCommands() const groups = yargs.getGroups() const options = yargs.getOptions() - let keys = Object.keys( - Object.keys(descriptions) - .concat(Object.keys(demandedOptions)) - .concat(Object.keys(demandedCommands)) - .concat(Object.keys(options.default)) - .reduce((acc, key) => { - if (key !== '_') acc[key] = true - return acc - }, {}) - ) + + let keys = [] + keys = keys.concat(Object.keys(descriptions)) + keys = keys.concat(Object.keys(demandedOptions)) + keys = keys.concat(Object.keys(demandedCommands)) + keys = keys.concat(Object.keys(options.default)) + keys = keys.filter(filterHiddenOptions) + keys = Object.keys(keys.reduce((acc, key) => { + if (key !== '_') acc[key] = true + return acc + }, {})) const theWrap = getWrap() const ui = require('cliui')({ @@ -176,7 +182,7 @@ usages.forEach((usage) => { ui.div(`${usage[0].replace(/\$0/g, base$0)}`) if (usage[1]) { - ui.div({text: `${usage[1]}`, padding: [1, 0, 0, 0]}) + ui.div({ text: `${usage[1]}`, padding: [1, 0, 0, 0] }) } }) ui.div() @@ -200,6 +206,10 @@ const context = yargs.getContext() const parentCommands = context.commands.length ? `${context.commands.join(' ')} ` : '' + if (yargs.getParserConfiguration()['sort-commands'] === true) { + commands = commands.sort((a, b) => a[0].localeCompare(b[0])) + } + commands.forEach((command) => { const commandString = `${base$0} ${parentCommands}${command[0].replace(/^\$0 ?/, '')}` // drop $0 from default commands. ui.span( @@ -208,7 +218,7 @@ padding: [0, 2, 0, 2], width: maxWidth(commands, theWrap, `${base$0}${parentCommands}`) + 4 }, - {text: command[1]} + { text: command[1] } ) const hints = [] if (command[2]) hints.push(`[${__('default:').slice(0, -1)}]`) // TODO hacking around i18n here @@ -216,7 +226,7 @@ hints.push(`[${__('aliases:')} ${command[3].join(', ')}]`) } if (hints.length) { - ui.div({text: hints.join(' '), padding: [0, 0, 0, 2], align: 'right'}) + ui.div({ text: hints.join(' '), padding: [0, 0, 0, 2], align: 'right' }) } else { ui.div() } @@ -241,11 +251,9 @@ Object.keys(groups).forEach((groupName) => { if (!groups[groupName].length) return - ui.div(__(groupName)) - // if we've grouped the key 'f', but 'f' aliases 'foobar', // normalizedKeys should contain only 'foobar'. - const normalizedKeys = groups[groupName].map((key) => { + const normalizedKeys = groups[groupName].filter(filterHiddenOptions).map((key) => { if (~aliasKeys.indexOf(key)) return key for (let i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) { if (~(options.alias[aliasKey] || []).indexOf(key)) return aliasKey @@ -253,6 +261,10 @@ return key }) + if (normalizedKeys.length < 1) return + + ui.div(__(groupName)) + // actually generate the switches string --foo, -f, --bar. const switches = normalizedKeys.reduce((acc, key) => { acc[key] = [ key ].concat(options.alias[key] || []) @@ -290,11 +302,11 @@ ].filter(Boolean).join(' ') ui.span( - {text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches, theWrap) + 4}, + { text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches, theWrap) + 4 }, desc ) - if (extra) ui.div({text: extra, padding: [0, 0, 0, 2], align: 'right'}) + if (extra) ui.div({ text: extra, padding: [0, 0, 0, 2], align: 'right' }) else ui.div() }) @@ -334,12 +346,13 @@ } // the usage string. - if (epilog) { - const e = epilog.replace(/\$0/g, base$0) + if (epilogs.length > 0) { + const e = epilogs.map(epilog => epilog.replace(/\$0/g, base$0)).join('\n') ui.div(`${e}\n`) } - return ui.toString() + // Remove the trailing white spaces + return ui.toString().replace(/\s*$/, '') } // return the maximum width of a string @@ -391,6 +404,13 @@ }) } + // if yargs is executing an async handler, we take a snapshot of the + // help message to display on failure: + let cachedHelpMessage + self.cacheHelpMessage = function () { + cachedHelpMessage = this.help() + } + // given a set of keys, place any keys that are // ungrouped under the 'Options:' grouping. function addUngroupedKeys (keys, aliases, groups) { @@ -409,6 +429,10 @@ return groupedKeys } + function filterHiddenOptions (key) { + return yargs.getOptions().hiddenOptions.indexOf(key) < 0 || yargs.parsed.argv[yargs.getOptions().showHiddenOpt] + } + self.showHelp = (level) => { const logger = yargs._getLoggerInstance() if (!level) level = 'error' @@ -417,7 +441,7 @@ } self.functionDescription = (fn) => { - const description = fn.name ? require('decamelize')(fn.name, '-') : __('generated-value') + const description = fn.name ? decamelize(fn.name, '-') : __('generated-value') return ['(', description, ')'].join('') } @@ -489,35 +513,36 @@ failureOutput = false usages = [] usageDisabled = false - epilog = undefined + epilogs = [] examples = [] commands = [] descriptions = objFilter(descriptions, (k, v) => !localLookup[k]) return self } - let frozen + let frozens = [] self.freeze = function freeze () { - frozen = {} + let frozen = {} + frozens.push(frozen) frozen.failMessage = failMessage frozen.failureOutput = failureOutput frozen.usages = usages frozen.usageDisabled = usageDisabled - frozen.epilog = epilog + frozen.epilogs = epilogs frozen.examples = examples frozen.commands = commands frozen.descriptions = descriptions } self.unfreeze = function unfreeze () { + let frozen = frozens.pop() failMessage = frozen.failMessage failureOutput = frozen.failureOutput usages = frozen.usages usageDisabled = frozen.usageDisabled - epilog = frozen.epilog + epilogs = frozen.epilogs examples = frozen.examples commands = frozen.commands descriptions = frozen.descriptions - frozen = undefined } return self diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/validation.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/validation.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/lib/validation.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/lib/validation.js 2022-04-05 07:17:00.000000000 +0000 @@ -37,7 +37,7 @@ ) } else { usage.fail( - __('Too many non-option arguments: got %s, maximum of %s', _s, demandedCommands._.max) + __('Too many non-option arguments: got %s, maximum of %s', _s, demandedCommands._.max) ) } } @@ -96,13 +96,13 @@ if (specialKeys.indexOf(key) === -1 && !positionalMap.hasOwnProperty(key) && !yargs._getParseContext().hasOwnProperty(key) && - !aliases.hasOwnProperty(key) + !self.isValidAndSomeAliasIsNotNew(key, aliases) ) { unknown.push(key) } }) - if (commandKeys.length > 0) { + if ((currentContext.commands.length > 0) || (commandKeys.length > 0)) { argv._.slice(currentContext.commands.length).forEach((key) => { if (commandKeys.indexOf(key) === -1) { unknown.push(key) @@ -120,6 +120,21 @@ } } + // check for a key that is not an alias, or for which every alias is new, + // implying that it was invented by the parser, e.g., during camelization + self.isValidAndSomeAliasIsNotNew = function isValidAndSomeAliasIsNotNew (key, aliases) { + if (!aliases.hasOwnProperty(key)) { + return false + } + const newAliases = yargs.parsed.newAliases + for (let a of [key, ...aliases[key]]) { + if (!newAliases.hasOwnProperty(a) || !newAliases[key]) { + return true + } + } + return false + } + // validate arguments limited to enumerated choices self.limitedChoices = function limitedChoices (argv) { const options = yargs.getOptions() @@ -209,43 +224,36 @@ return implied } + function keyExists (argv, val) { + // convert string '1' to number 1 + let num = Number(val) + val = isNaN(num) ? val : num + + if (typeof val === 'number') { + // check length of argv._ + val = argv._.length >= val + } else if (val.match(/^--no-.+/)) { + // check if key/value doesn't exist + val = val.match(/^--no-(.+)/)[1] + val = !argv[val] + } else { + // check if key/value exists + val = argv[val] + } + return val + } + self.implications = function implications (argv) { const implyFail = [] Object.keys(implied).forEach((key) => { const origKey = key ;(implied[key] || []).forEach((value) => { - let num let key = origKey const origValue = value + key = keyExists(argv, key) + value = keyExists(argv, value) - // convert string '1' to number 1 - num = Number(key) - key = isNaN(num) ? key : num - - if (typeof key === 'number') { - // check length of argv._ - key = argv._.length >= key - } else if (key.match(/^--no-.+/)) { - // check if key doesn't exist - key = key.match(/^--no-(.+)/)[1] - key = !argv[key] - } else { - // check if key exists - key = argv[key] - } - - num = Number(value) - value = isNaN(num) ? value : num - - if (typeof value === 'number') { - value = argv._.length >= value - } else if (value.match(/^--no-.+/)) { - value = value.match(/^--no-(.+)/)[1] - value = !argv[value] - } else { - value = argv[value] - } if (key && !value) { implyFail.push(` ${origKey} -> ${origValue}`) } @@ -292,7 +300,7 @@ // we default keys to 'undefined' that have been configured, we should not // apply conflicting check unless they are a value other than 'undefined'. if (value && argv[key] !== undefined && argv[value] !== undefined) { - usage.fail(__(`Arguments ${key} and ${value} are mutually exclusive`)) + usage.fail(__('Arguments %s and %s are mutually exclusive', key, value)) } }) } @@ -323,18 +331,19 @@ return self } - let frozen + let frozens = [] self.freeze = function freeze () { - frozen = {} + let frozen = {} + frozens.push(frozen) frozen.implied = implied frozen.checks = checks frozen.conflicting = conflicting } self.unfreeze = function unfreeze () { + let frozen = frozens.pop() implied = frozen.implied checks = frozen.checks conflicting = frozen.conflicting - frozen = undefined } return self diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/de.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/de.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/de.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/de.json 2022-04-05 07:17:00.000000000 +0000 @@ -29,7 +29,7 @@ "Invalid values:": "Unzulässige Werte:", "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeben: %s, Möglichkeiten: %s", "Argument check failed: %s": "Argumente-Check fehlgeschlagen: %s", - "Implications failed:": "Implikationen fehlgeschlagen:", + "Implications failed:": "Fehlende abhängige Argumente:", "Not enough arguments following: %s": "Nicht genügend Argumente nach: %s", "Invalid JSON config file: %s": "Fehlerhafte JSON-Config Datei: %s", "Path to JSON config file": "Pfad zur JSON-Config Datei", diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/en.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/en.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/en.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/en.json 2022-04-05 07:17:00.000000000 +0000 @@ -29,7 +29,7 @@ "Invalid values:": "Invalid values:", "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Given: %s, Choices: %s", "Argument check failed: %s": "Argument check failed: %s", - "Implications failed:": "Implications failed:", + "Implications failed:": "Missing dependent arguments:", "Not enough arguments following: %s": "Not enough arguments following: %s", "Invalid JSON config file: %s": "Invalid JSON config file: %s", "Path to JSON config file": "Path to JSON config file", diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/fr.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/fr.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/fr.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/fr.json 2022-04-05 07:17:00.000000000 +0000 @@ -28,7 +28,7 @@ "Invalid values:": "Valeurs invalides:", "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Donné: %s, Choix: %s", "Argument check failed: %s": "Echec de la vérification de l'argument: %s", - "Implications failed:": "Implications échouées:", + "Implications failed:": "Arguments dépendants manquants:", "Not enough arguments following: %s": "Pas assez d'arguments suivant: %s", "Invalid JSON config file: %s": "Fichier de configuration JSON invalide: %s", "Path to JSON config file": "Chemin du fichier de configuration JSON", diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/it.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/it.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/it.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/it.json 2022-04-05 07:17:00.000000000 +0000 @@ -29,7 +29,7 @@ "Invalid values:": "Valori non validi:", "Argument: %s, Given: %s, Choices: %s": "Argomento: %s, Richiesto: %s, Scelte: %s", "Argument check failed: %s": "Controllo dell'argomento fallito: %s", - "Implications failed:": "Argomenti impliciti non soddisfatti:", + "Implications failed:": "Argomenti dipendenti mancanti:", "Not enough arguments following: %s": "Argomenti insufficienti dopo: %s", "Invalid JSON config file: %s": "File di configurazione JSON non valido: %s", "Path to JSON config file": "Percorso del file di configurazione JSON", diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/nb.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/nb.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/nb.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/nb.json 2022-04-05 07:17:00.000000000 +0000 @@ -27,7 +27,7 @@ }, "Invalid values:": "Ugyldige verdier:", "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gitt: %s, Valg: %s", - "Argument check failed: %s": "Argument sjekk mislyktes: %s", + "Argument check failed: %s": "Argumentsjekk mislyktes: %s", "Implications failed:": "Konsekvensene mislyktes:", "Not enough arguments following: %s": "Ikke nok følgende argumenter: %s", "Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s", diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/nl.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/nl.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/nl.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/nl.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,42 +1,42 @@ { - "Commands:": "Opdrachten:", + "Commands:": "Commando's:", "Options:": "Opties:", "Examples:": "Voorbeelden:", - "boolean": "boolean", + "boolean": "booleaans", "count": "aantal", - "string": "text", - "number": "nummer", + "string": "string", + "number": "getal", "array": "lijst", "required": "verplicht", "default:": "standaard:", "choices:": "keuzes:", "aliases:": "aliassen:", "generated-value": "gegenereerde waarde", - "Not enough non-option arguments: got %s, need at least %s": "Niet genoeg non-optie argumenten. Gekregen: %s, minstens nodig: %s", - "Too many non-option arguments: got %s, maximum of %s": "Te veel non-optie argumenten. Gekregen: %s, maximum: %s", + "Not enough non-option arguments: got %s, need at least %s": "Niet genoeg niet-optie-argumenten: %s gekregen, minstens %s nodig", + "Too many non-option arguments: got %s, maximum of %s": "Te veel niet-optie-argumenten: %s gekregen, maximum is %s", "Missing argument value: %s": { - "one": "Missing argument value: %s", - "other": "Missing argument values: %s" + "one": "Missende argumentwaarde: %s", + "other": "Missende argumentwaarden: %s" }, "Missing required argument: %s": { - "one": "Missend verplichte argument: %s", + "one": "Missend verplicht argument: %s", "other": "Missende verplichte argumenten: %s" }, "Unknown argument: %s": { "one": "Onbekend argument: %s", "other": "Onbekende argumenten: %s" }, - "Invalid values:": "Ongeldige waardes:", + "Invalid values:": "Ongeldige waarden:", "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeven: %s, Keuzes: %s", - "Argument check failed: %s": "Argument check mislukt: %s", - "Implications failed:": "Implicaties mislukt:", + "Argument check failed: %s": "Argumentcontrole mislukt: %s", + "Implications failed:": "Ontbrekende afhankelijke argumenten:", "Not enough arguments following: %s": "Niet genoeg argumenten na: %s", - "Invalid JSON config file: %s": "Ongeldig JSON configuratiebestand: %s", - "Path to JSON config file": "Pad naar JSON configuratiebestand", + "Invalid JSON config file: %s": "Ongeldig JSON-config-bestand: %s", + "Path to JSON config file": "Pad naar JSON-config-bestand", "Show help": "Toon help", - "Show version number": "Toon versie nummer", + "Show version number": "Toon versienummer", "Did you mean %s?": "Bedoelde u misschien %s?", - "Arguments %s and %s are mutually exclusive": "Argumenten %s en %s zijn onderling uitsluitend", + "Arguments %s and %s are mutually exclusive": "Argumenten %s en %s kunnen niet tegelijk gebruikt worden", "Positionals:": "Positie-afhankelijke argumenten", "command": "commando" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/nn.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/nn.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/nn.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/nn.json 2022-04-05 07:17:00.000000000 +0000 @@ -29,9 +29,9 @@ }, "Invalid values:": "Ugyldige verdiar:", "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gjeve: %s, Val: %s", - "Argument check failed: %s": "Argument sjekk mislukkast: %s", + "Argument check failed: %s": "Argumentsjekk mislukkast: %s", "Implications failed:": "Konsekvensane mislukkast:", - "Not enough arguments following: %s": "Ikkje nok fylgande argument: %s", + "Not enough arguments following: %s": "Ikkje nok fylgjande argument: %s", "Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s", "Path to JSON config file": "Bane til JSON konfigurasjonsfil", "Show help": "Vis hjelp", diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/pirate.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/pirate.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/locales/pirate.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/locales/pirate.json 2022-04-05 07:17:00.000000000 +0000 @@ -8,5 +8,6 @@ "other": "Ye be havin' to set the followin' arguments land lubber: %s" }, "Show help": "Parlay this here code of conduct", - "Show version number": "'Tis the version ye be askin' fer" + "Show version number": "'Tis the version ye be askin' fer", + "Arguments %s and %s are mutually exclusive" : "Yon scurvy dogs %s and %s be as bad as rum and a prudish wench" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/ansi-regex/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/ansi-regex/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/ansi-regex/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/ansi-regex/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,14 @@ +'use strict'; + +module.exports = options => { + options = Object.assign({ + onlyFirst: false + }, options); + + const pattern = [ + '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', + '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' + ].join('|'); + + return new RegExp(pattern, options.onlyFirst ? undefined : 'g'); +}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/ansi-regex/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/ansi-regex/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/ansi-regex/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/ansi-regex/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/ansi-regex/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/ansi-regex/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/ansi-regex/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/ansi-regex/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,85 @@ +{ + "_from": "ansi-regex@^4.1.0", + "_id": "ansi-regex@4.1.0", + "_inBundle": false, + "_integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "_location": "/yargs/ansi-regex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "ansi-regex@^4.1.0", + "name": "ansi-regex", + "escapedName": "ansi-regex", + "rawSpec": "^4.1.0", + "saveSpec": null, + "fetchSpec": "^4.1.0" + }, + "_requiredBy": [ + "/yargs/strip-ansi" + ], + "_resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "_shasum": "8b9f8f08cf1acb843756a839ca8c7e3168c51997", + "_spec": "ansi-regex@^4.1.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs/node_modules/strip-ansi", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/ansi-regex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Regular expression for matching ANSI escape codes", + "devDependencies": { + "ava": "^0.25.0", + "xo": "^0.23.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/chalk/ansi-regex#readme", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "text", + "regex", + "regexp", + "re", + "match", + "test", + "find", + "pattern" + ], + "license": "MIT", + "name": "ansi-regex", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/ansi-regex.git" + }, + "scripts": { + "test": "xo && ava", + "view-supported": "node fixtures/view-codes.js" + }, + "version": "4.1.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/ansi-regex/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/ansi-regex/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/ansi-regex/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/ansi-regex/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,87 @@ +# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex) + +> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- + + +## Install + +``` +$ npm install ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001B[4mcake\u001B[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001B[4mcake\u001B[0m'.match(ansiRegex()); +//=> ['\u001B[4m', '\u001B[0m'] + +'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true})); +//=> ['\u001B[4m'] + +'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex()); +//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007'] +``` + + +## API + +### ansiRegex([options]) + +Returns a regex for matching ANSI escape codes. + +#### options + +##### onlyFirst + +Type: `boolean`
+Default: `false` *(Matches any ANSI escape codes in a string)* + +Match only the first ANSI escape. + + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +## License + +MIT diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/find-up/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/find-up/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/find-up/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/find-up/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,46 @@ +'use strict'; +const path = require('path'); +const locatePath = require('locate-path'); + +module.exports = (filename, opts = {}) => { + const startDir = path.resolve(opts.cwd || ''); + const {root} = path.parse(startDir); + + const filenames = [].concat(filename); + + return new Promise(resolve => { + (function find(dir) { + locatePath(filenames, {cwd: dir}).then(file => { + if (file) { + resolve(path.join(dir, file)); + } else if (dir === root) { + resolve(null); + } else { + find(path.dirname(dir)); + } + }); + })(startDir); + }); +}; + +module.exports.sync = (filename, opts = {}) => { + let dir = path.resolve(opts.cwd || ''); + const {root} = path.parse(dir); + + const filenames = [].concat(filename); + + // eslint-disable-next-line no-constant-condition + while (true) { + const file = locatePath.sync(filenames, {cwd: dir}); + + if (file) { + return path.join(dir, file); + } + + if (dir === root) { + return null; + } + + dir = path.dirname(dir); + } +}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/find-up/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/find-up/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/find-up/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/find-up/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/find-up/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/find-up/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/find-up/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/find-up/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,82 @@ +{ + "_from": "find-up@^3.0.0", + "_id": "find-up@3.0.0", + "_inBundle": false, + "_integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "_location": "/yargs/find-up", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "find-up@^3.0.0", + "name": "find-up", + "escapedName": "find-up", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "_shasum": "49169f1d7993430646da61ecc5ae355c21c97b73", + "_spec": "find-up@^3.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/find-up/issues" + }, + "bundleDependencies": false, + "dependencies": { + "locate-path": "^3.0.0" + }, + "deprecated": false, + "description": "Find a file or directory by walking up parent directories", + "devDependencies": { + "ava": "*", + "tempy": "^0.2.1", + "xo": "*" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/find-up#readme", + "keywords": [ + "find", + "up", + "find-up", + "findup", + "look-up", + "look", + "file", + "search", + "match", + "package", + "resolve", + "parent", + "parents", + "folder", + "directory", + "dir", + "walk", + "walking", + "path" + ], + "license": "MIT", + "name": "find-up", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/find-up.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.0.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/find-up/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/find-up/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/find-up/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/find-up/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,87 @@ +# find-up [![Build Status: Linux and macOS](https://travis-ci.org/sindresorhus/find-up.svg?branch=master)](https://travis-ci.org/sindresorhus/find-up) [![Build Status: Windows](https://ci.appveyor.com/api/projects/status/l0cyjmvh5lq72vq2/branch/master?svg=true)](https://ci.appveyor.com/project/sindresorhus/find-up/branch/master) + +> Find a file or directory by walking up parent directories + + +## Install + +``` +$ npm install find-up +``` + + +## Usage + +``` +/ +└── Users + └── sindresorhus + ├── unicorn.png + └── foo + └── bar + ├── baz + └── example.js +``` + +`example.js` + +```js +const findUp = require('find-up'); + +(async () => { + console.log(await findUp('unicorn.png')); + //=> '/Users/sindresorhus/unicorn.png' + + console.log(await findUp(['rainbow.png', 'unicorn.png'])); + //=> '/Users/sindresorhus/unicorn.png' +})(); +``` + + +## API + +### findUp(filename, [options]) + +Returns a `Promise` for either the filepath or `null` if it couldn't be found. + +### findUp([filenameA, filenameB], [options]) + +Returns a `Promise` for either the first filepath found (by respecting the order) or `null` if none could be found. + +### findUp.sync(filename, [options]) + +Returns a filepath or `null`. + +### findUp.sync([filenameA, filenameB], [options]) + +Returns the first filepath found (by respecting the order) or `null`. + +#### filename + +Type: `string` + +Filename of the file to find. + +#### options + +Type: `Object` + +##### cwd + +Type: `string`
+Default: `process.cwd()` + +Directory to start from. + + +## Related + +- [find-up-cli](https://github.com/sindresorhus/find-up-cli) - CLI for this module +- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file +- [pkg-dir](https://github.com/sindresorhus/pkg-dir) - Find the root directory of an npm package +- [resolve-from](https://github.com/sindresorhus/resolve-from) - Resolve the path of a module like `require.resolve()` but from a given path + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,46 @@ +'use strict'; +/* eslint-disable yoda */ +module.exports = x => { + if (Number.isNaN(x)) { + return false; + } + + // code points are derived from: + // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt + if ( + x >= 0x1100 && ( + x <= 0x115f || // Hangul Jamo + x === 0x2329 || // LEFT-POINTING ANGLE BRACKET + x === 0x232a || // RIGHT-POINTING ANGLE BRACKET + // CJK Radicals Supplement .. Enclosed CJK Letters and Months + (0x2e80 <= x && x <= 0x3247 && x !== 0x303f) || + // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A + (0x3250 <= x && x <= 0x4dbf) || + // CJK Unified Ideographs .. Yi Radicals + (0x4e00 <= x && x <= 0xa4c6) || + // Hangul Jamo Extended-A + (0xa960 <= x && x <= 0xa97c) || + // Hangul Syllables + (0xac00 <= x && x <= 0xd7a3) || + // CJK Compatibility Ideographs + (0xf900 <= x && x <= 0xfaff) || + // Vertical Forms + (0xfe10 <= x && x <= 0xfe19) || + // CJK Compatibility Forms .. Small Form Variants + (0xfe30 <= x && x <= 0xfe6b) || + // Halfwidth and Fullwidth Forms + (0xff01 <= x && x <= 0xff60) || + (0xffe0 <= x && x <= 0xffe6) || + // Kana Supplement + (0x1b000 <= x && x <= 0x1b001) || + // Enclosed Ideographic Supplement + (0x1f200 <= x && x <= 0x1f251) || + // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane + (0x20000 <= x && x <= 0x3fffd) + ) + ) { + return true; + } + + return false; +}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,77 @@ +{ + "_from": "is-fullwidth-code-point@^2.0.0", + "_id": "is-fullwidth-code-point@2.0.0", + "_inBundle": false, + "_integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "_location": "/yargs/is-fullwidth-code-point", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "is-fullwidth-code-point@^2.0.0", + "name": "is-fullwidth-code-point", + "escapedName": "is-fullwidth-code-point", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/yargs/string-width" + ], + "_resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "_shasum": "a3b30a5c4f199183167aaab93beefae3ddfb654f", + "_spec": "is-fullwidth-code-point@^2.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs/node_modules/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/is-fullwidth-code-point/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Check if the character represented by a given Unicode code point is fullwidth", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=4" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/is-fullwidth-code-point#readme", + "keywords": [ + "fullwidth", + "full-width", + "full", + "width", + "unicode", + "character", + "char", + "string", + "str", + "codepoint", + "code", + "point", + "is", + "detect", + "check" + ], + "license": "MIT", + "name": "is-fullwidth-code-point", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/is-fullwidth-code-point.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "2.0.0", + "xo": { + "esnext": true + } +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/is-fullwidth-code-point/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,39 @@ +# is-fullwidth-code-point [![Build Status](https://travis-ci.org/sindresorhus/is-fullwidth-code-point.svg?branch=master)](https://travis-ci.org/sindresorhus/is-fullwidth-code-point) + +> Check if the character represented by a given [Unicode code point](https://en.wikipedia.org/wiki/Code_point) is [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) + + +## Install + +``` +$ npm install --save is-fullwidth-code-point +``` + + +## Usage + +```js +const isFullwidthCodePoint = require('is-fullwidth-code-point'); + +isFullwidthCodePoint('谢'.codePointAt()); +//=> true + +isFullwidthCodePoint('a'.codePointAt()); +//=> false +``` + + +## API + +### isFullwidthCodePoint(input) + +#### input + +Type: `number` + +[Code point](https://en.wikipedia.org/wiki/Code_point) of a character. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/locate-path/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/locate-path/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/locate-path/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/locate-path/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,24 @@ +'use strict'; +const path = require('path'); +const pathExists = require('path-exists'); +const pLocate = require('p-locate'); + +module.exports = (iterable, options) => { + options = Object.assign({ + cwd: process.cwd() + }, options); + + return pLocate(iterable, el => pathExists(path.resolve(options.cwd, el)), options); +}; + +module.exports.sync = (iterable, options) => { + options = Object.assign({ + cwd: process.cwd() + }, options); + + for (const el of iterable) { + if (pathExists.sync(path.resolve(options.cwd, el))) { + return el; + } + } +}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/locate-path/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/locate-path/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/locate-path/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/locate-path/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/locate-path/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/locate-path/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/locate-path/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/locate-path/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,76 @@ +{ + "_from": "locate-path@^3.0.0", + "_id": "locate-path@3.0.0", + "_inBundle": false, + "_integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "_location": "/yargs/locate-path", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "locate-path@^3.0.0", + "name": "locate-path", + "escapedName": "locate-path", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/yargs/find-up" + ], + "_resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "_shasum": "dbec3b3ab759758071b58fe59fc41871af21400e", + "_spec": "locate-path@^3.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs/node_modules/find-up", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/locate-path/issues" + }, + "bundleDependencies": false, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "deprecated": false, + "description": "Get the first path that exists on disk of multiple paths", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/locate-path#readme", + "keywords": [ + "locate", + "path", + "paths", + "file", + "files", + "exists", + "find", + "finder", + "search", + "searcher", + "array", + "iterable", + "iterator" + ], + "license": "MIT", + "name": "locate-path", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/locate-path.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.0.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/locate-path/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/locate-path/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/locate-path/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/locate-path/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,99 @@ +# locate-path [![Build Status](https://travis-ci.org/sindresorhus/locate-path.svg?branch=master)](https://travis-ci.org/sindresorhus/locate-path) + +> Get the first path that exists on disk of multiple paths + + +## Install + +``` +$ npm install locate-path +``` + + +## Usage + +Here we find the first file that exists on disk, in array order. + +```js +const locatePath = require('locate-path'); + +const files = [ + 'unicorn.png', + 'rainbow.png', // Only this one actually exists on disk + 'pony.png' +]; + +(async () => { + console(await locatePath(files)); + //=> 'rainbow' +})(); +``` + + +## API + +### locatePath(input, [options]) + +Returns a `Promise` for the first path that exists or `undefined` if none exists. + +#### input + +Type: `Iterable` + +Paths to check. + +#### options + +Type: `Object` + +##### concurrency + +Type: `number`
+Default: `Infinity`
+Minimum: `1` + +Number of concurrently pending promises. + +##### preserveOrder + +Type: `boolean`
+Default: `true` + +Preserve `input` order when searching. + +Disable this to improve performance if you don't care about the order. + +##### cwd + +Type: `string`
+Default: `process.cwd()` + +Current working directory. + +### locatePath.sync(input, [options]) + +Returns the first path that exists or `undefined` if none exists. + +#### input + +Type: `Iterable` + +Paths to check. + +#### options + +Type: `Object` + +##### cwd + +Same as above. + + +## Related + +- [path-exists](https://github.com/sindresorhus/path-exists) - Check if a path exists + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/index.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/index.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,38 @@ +export interface Limit { + /** + @param fn - Promise-returning/async function. + @param arguments - Any arguments to pass through to `fn`. Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a lot of functions. + @returns The promise returned by calling `fn(...arguments)`. + */ + ( + fn: (...arguments: Arguments) => PromiseLike | ReturnType, + ...arguments: Arguments + ): Promise; + + /** + The number of promises that are currently running. + */ + readonly activeCount: number; + + /** + The number of promises that are waiting to run (i.e. their internal `fn` was not called yet). + */ + readonly pendingCount: number; + + /** + Discard pending promises that are waiting to run. + + This might be useful if you want to teardown the queue at the end of your program's lifecycle or discard any function calls referencing an intermediary state of your app. + + Note: This does not cancel promises that are already running. + */ + clearQueue(): void; +} + +/** +Run multiple promise-returning & async functions with limited concurrency. + +@param concurrency - Concurrency limit. Minimum: `1`. +@returns A `limit` function. +*/ +export default function pLimit(concurrency: number): Limit; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,57 @@ +'use strict'; +const pTry = require('p-try'); + +const pLimit = concurrency => { + if (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) { + return Promise.reject(new TypeError('Expected `concurrency` to be a number from 1 and up')); + } + + const queue = []; + let activeCount = 0; + + const next = () => { + activeCount--; + + if (queue.length > 0) { + queue.shift()(); + } + }; + + const run = (fn, resolve, ...args) => { + activeCount++; + + const result = pTry(fn, ...args); + + resolve(result); + + result.then(next, next); + }; + + const enqueue = (fn, resolve, ...args) => { + if (activeCount < concurrency) { + run(fn, resolve, ...args); + } else { + queue.push(run.bind(null, fn, resolve, ...args)); + } + }; + + const generator = (fn, ...args) => new Promise(resolve => enqueue(fn, resolve, ...args)); + Object.defineProperties(generator, { + activeCount: { + get: () => activeCount + }, + pendingCount: { + get: () => queue.length + }, + clearQueue: { + value: () => { + queue.length = 0; + } + } + }); + + return generator; +}; + +module.exports = pLimit; +module.exports.default = pLimit; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,84 @@ +{ + "_from": "p-limit@^2.0.0", + "_id": "p-limit@2.3.0", + "_inBundle": false, + "_integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "_location": "/yargs/p-limit", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "p-limit@^2.0.0", + "name": "p-limit", + "escapedName": "p-limit", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/yargs/p-locate" + ], + "_resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "_shasum": "3dd33c647a214fdfffd835933eb086da0dc21db1", + "_spec": "p-limit@^2.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs/node_modules/p-locate", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/p-limit/issues" + }, + "bundleDependencies": false, + "dependencies": { + "p-try": "^2.0.0" + }, + "deprecated": false, + "description": "Run multiple promise-returning & async functions with limited concurrency", + "devDependencies": { + "ava": "^1.2.1", + "delay": "^4.1.0", + "in-range": "^1.0.0", + "random-int": "^1.0.0", + "time-span": "^2.0.0", + "tsd-check": "^0.3.0", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "funding": "https://github.com/sponsors/sindresorhus", + "homepage": "https://github.com/sindresorhus/p-limit#readme", + "keywords": [ + "promise", + "limit", + "limited", + "concurrency", + "throttle", + "throat", + "rate", + "batch", + "ratelimit", + "task", + "queue", + "async", + "await", + "promises", + "bluebird" + ], + "license": "MIT", + "name": "p-limit", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/p-limit.git" + }, + "scripts": { + "test": "xo && ava && tsd-check" + }, + "version": "2.3.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-limit/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-limit/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,101 @@ +# p-limit [![Build Status](https://travis-ci.org/sindresorhus/p-limit.svg?branch=master)](https://travis-ci.org/sindresorhus/p-limit) + +> Run multiple promise-returning & async functions with limited concurrency + +## Install + +``` +$ npm install p-limit +``` + +## Usage + +```js +const pLimit = require('p-limit'); + +const limit = pLimit(1); + +const input = [ + limit(() => fetchSomething('foo')), + limit(() => fetchSomething('bar')), + limit(() => doSomething()) +]; + +(async () => { + // Only one promise is run at once + const result = await Promise.all(input); + console.log(result); +})(); +``` + +## API + +### pLimit(concurrency) + +Returns a `limit` function. + +#### concurrency + +Type: `number`\ +Minimum: `1`\ +Default: `Infinity` + +Concurrency limit. + +### limit(fn, ...args) + +Returns the promise returned by calling `fn(...args)`. + +#### fn + +Type: `Function` + +Promise-returning/async function. + +#### args + +Any arguments to pass through to `fn`. + +Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a *lot* of functions. + +### limit.activeCount + +The number of promises that are currently running. + +### limit.pendingCount + +The number of promises that are waiting to run (i.e. their internal `fn` was not called yet). + +### limit.clearQueue() + +Discard pending promises that are waiting to run. + +This might be useful if you want to teardown the queue at the end of your program's lifecycle or discard any function calls referencing an intermediary state of your app. + +Note: This does not cancel promises that are already running. + +## FAQ + +### How is this different from the [`p-queue`](https://github.com/sindresorhus/p-queue) package? + +This package is only about limiting the number of concurrent executions, while `p-queue` is a fully featured queue implementation with lots of different options, introspection, and ability to pause the queue. + +## Related + +- [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control +- [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning & async functions +- [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning & async functions +- [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency +- [More…](https://github.com/sindresorhus/promise-fun) + +--- + +
+ + Get professional support for this package with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-locate/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-locate/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-locate/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-locate/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,34 @@ +'use strict'; +const pLimit = require('p-limit'); + +class EndError extends Error { + constructor(value) { + super(); + this.value = value; + } +} + +// The input can also be a promise, so we `Promise.resolve()` it +const testElement = (el, tester) => Promise.resolve(el).then(tester); + +// The input can also be a promise, so we `Promise.all()` them both +const finder = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0]))); + +module.exports = (iterable, tester, opts) => { + opts = Object.assign({ + concurrency: Infinity, + preserveOrder: true + }, opts); + + const limit = pLimit(opts.concurrency); + + // Start all the promises concurrently with optional limit + const items = [...iterable].map(el => [el, limit(testElement, el, tester)]); + + // Check the promises either serially or concurrently + const checkLimit = pLimit(opts.preserveOrder ? 1 : Infinity); + + return Promise.all(items.map(el => checkLimit(finder, el))) + .then(() => {}) + .catch(err => err instanceof EndError ? err.value : Promise.reject(err)); +}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-locate/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-locate/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-locate/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-locate/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-locate/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-locate/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-locate/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-locate/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,83 @@ +{ + "_from": "p-locate@^3.0.0", + "_id": "p-locate@3.0.0", + "_inBundle": false, + "_integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "_location": "/yargs/p-locate", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "p-locate@^3.0.0", + "name": "p-locate", + "escapedName": "p-locate", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/yargs/locate-path" + ], + "_resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "_shasum": "322d69a05c0264b25997d9f40cd8a891ab0064a4", + "_spec": "p-locate@^3.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs/node_modules/locate-path", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/p-locate/issues" + }, + "bundleDependencies": false, + "dependencies": { + "p-limit": "^2.0.0" + }, + "deprecated": false, + "description": "Get the first fulfilled promise that satisfies the provided testing function", + "devDependencies": { + "ava": "*", + "delay": "^3.0.0", + "in-range": "^1.0.0", + "time-span": "^2.0.0", + "xo": "*" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/p-locate#readme", + "keywords": [ + "promise", + "locate", + "find", + "finder", + "search", + "searcher", + "test", + "array", + "collection", + "iterable", + "iterator", + "race", + "fulfilled", + "fastest", + "async", + "await", + "promises", + "bluebird" + ], + "license": "MIT", + "name": "p-locate", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/p-locate.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.0.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-locate/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-locate/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-locate/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-locate/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,88 @@ +# p-locate [![Build Status](https://travis-ci.org/sindresorhus/p-locate.svg?branch=master)](https://travis-ci.org/sindresorhus/p-locate) + +> Get the first fulfilled promise that satisfies the provided testing function + +Think of it like an async version of [`Array#find`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find). + + +## Install + +``` +$ npm install p-locate +``` + + +## Usage + +Here we find the first file that exists on disk, in array order. + +```js +const pathExists = require('path-exists'); +const pLocate = require('p-locate'); + +const files = [ + 'unicorn.png', + 'rainbow.png', // Only this one actually exists on disk + 'pony.png' +]; + +(async () => { + const foundPath = await pLocate(files, file => pathExists(file)); + + console.log(foundPath); + //=> 'rainbow' +})(); +``` + +*The above is just an example. Use [`locate-path`](https://github.com/sindresorhus/locate-path) if you need this.* + + +## API + +### pLocate(input, tester, [options]) + +Returns a `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`. + +#### input + +Type: `Iterable` + +#### tester(element) + +Type: `Function` + +Expected to return a `Promise` or boolean. + +#### options + +Type: `Object` + +##### concurrency + +Type: `number`
+Default: `Infinity`
+Minimum: `1` + +Number of concurrently pending promises returned by `tester`. + +##### preserveOrder + +Type: `boolean`
+Default: `true` + +Preserve `input` order when searching. + +Disable this to improve performance if you don't care about the order. + + +## Related + +- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently +- [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently +- [p-any](https://github.com/sindresorhus/p-any) - Wait for any promise to be fulfilled +- [More…](https://github.com/sindresorhus/promise-fun) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/index.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/index.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,39 @@ +declare const pTry: { + /** + Start a promise chain. + + @param fn - The function to run to start the promise chain. + @param arguments - Arguments to pass to `fn`. + @returns The value of calling `fn(...arguments)`. If the function throws an error, the returned `Promise` will be rejected with that error. + + @example + ``` + import pTry = require('p-try'); + + (async () => { + try { + const value = await pTry(() => { + return synchronousFunctionThatMightThrow(); + }); + console.log(value); + } catch (error) { + console.error(error); + } + })(); + ``` + */ + ( + fn: (...arguments: ArgumentsType) => PromiseLike | ValueType, + ...arguments: ArgumentsType + ): Promise; + + // TODO: remove this in the next major version, refactor the whole definition to: + // declare function pTry( + // fn: (...arguments: ArgumentsType) => PromiseLike | ValueType, + // ...arguments: ArgumentsType + // ): Promise; + // export = pTry; + default: typeof pTry; +}; + +export = pTry; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +'use strict'; + +const pTry = (fn, ...arguments_) => new Promise(resolve => { + resolve(fn(...arguments_)); +}); + +module.exports = pTry; +// TODO: remove this in the next major version +module.exports.default = pTry; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,74 @@ +{ + "_from": "p-try@^2.0.0", + "_id": "p-try@2.2.0", + "_inBundle": false, + "_integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "_location": "/yargs/p-try", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "p-try@^2.0.0", + "name": "p-try", + "escapedName": "p-try", + "rawSpec": "^2.0.0", + "saveSpec": null, + "fetchSpec": "^2.0.0" + }, + "_requiredBy": [ + "/yargs/p-limit" + ], + "_resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "_shasum": "cb2868540e313d61de58fafbe35ce9004d5540e6", + "_spec": "p-try@^2.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs/node_modules/p-limit", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/p-try/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "`Start a promise chain", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/p-try#readme", + "keywords": [ + "promise", + "try", + "resolve", + "function", + "catch", + "async", + "await", + "promises", + "settled", + "ponyfill", + "polyfill", + "shim", + "bluebird" + ], + "license": "MIT", + "name": "p-try", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/p-try.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "2.2.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/p-try/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/p-try/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,58 @@ +# p-try [![Build Status](https://travis-ci.org/sindresorhus/p-try.svg?branch=master)](https://travis-ci.org/sindresorhus/p-try) + +> Start a promise chain + +[How is it useful?](http://cryto.net/~joepie91/blog/2016/05/11/what-is-promise-try-and-why-does-it-matter/) + + +## Install + +``` +$ npm install p-try +``` + + +## Usage + +```js +const pTry = require('p-try'); + +(async () => { + try { + const value = await pTry(() => { + return synchronousFunctionThatMightThrow(); + }); + console.log(value); + } catch (error) { + console.error(error); + } +})(); +``` + + +## API + +### pTry(fn, ...arguments) + +Returns a `Promise` resolved with the value of calling `fn(...arguments)`. If the function throws an error, the returned `Promise` will be rejected with that error. + +Support for passing arguments on to the `fn` is provided in order to be able to avoid creating unnecessary closures. You probably don't need this optimization unless you're pushing a *lot* of functions. + +#### fn + +The function to run to start the promise chain. + +#### arguments + +Arguments to pass to `fn`. + + +## Related + +- [p-finally](https://github.com/sindresorhus/p-finally) - `Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome +- [More…](https://github.com/sindresorhus/promise-fun) + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/string-width/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/string-width/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/string-width/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/string-width/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,39 @@ +'use strict'; +const stripAnsi = require('strip-ansi'); +const isFullwidthCodePoint = require('is-fullwidth-code-point'); +const emojiRegex = require('emoji-regex')(); + +module.exports = input => { + input = input.replace(emojiRegex, ' '); + + if (typeof input !== 'string' || input.length === 0) { + return 0; + } + + input = stripAnsi(input); + + let width = 0; + + for (let i = 0; i < input.length; i++) { + const code = input.codePointAt(i); + + // Ignore control characters + if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { + continue; + } + + // Ignore combining characters + if (code >= 0x300 && code <= 0x36F) { + continue; + } + + // Surrogates + if (code > 0xFFFF) { + i++; + } + + width += isFullwidthCodePoint(code) ? 2 : 1; + } + + return width; +}; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/string-width/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/string-width/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/string-width/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/string-width/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/string-width/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/string-width/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/string-width/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/string-width/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,88 @@ +{ + "_from": "string-width@^3.0.0", + "_id": "string-width@3.1.0", + "_inBundle": false, + "_integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "_location": "/yargs/string-width", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "string-width@^3.0.0", + "name": "string-width", + "escapedName": "string-width", + "rawSpec": "^3.0.0", + "saveSpec": null, + "fetchSpec": "^3.0.0" + }, + "_requiredBy": [ + "/yargs" + ], + "_resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "_shasum": "22767be21b62af1081574306f69ac51b62203961", + "_spec": "string-width@^3.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/string-width/issues" + }, + "bundleDependencies": false, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "deprecated": false, + "description": "Get the visual width of a string - the number of columns required to display it", + "devDependencies": { + "ava": "^1.0.1", + "xo": "^0.23.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/string-width#readme", + "keywords": [ + "string", + "str", + "character", + "char", + "unicode", + "width", + "visual", + "column", + "columns", + "fullwidth", + "full-width", + "full", + "ansi", + "escape", + "codes", + "cli", + "command-line", + "terminal", + "console", + "cjk", + "chinese", + "japanese", + "korean", + "fixed-width" + ], + "license": "MIT", + "name": "string-width", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/string-width.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "3.1.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/string-width/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/string-width/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/string-width/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/string-width/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,45 @@ +# string-width [![Build Status](https://travis-ci.org/sindresorhus/string-width.svg?branch=master)](https://travis-ci.org/sindresorhus/string-width) + +> Get the visual width of a string - the number of columns required to display it + +Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width. + +Useful to be able to measure the actual width of command-line output. + + +## Install + +``` +$ npm install string-width +``` + + +## Usage + +```js +const stringWidth = require('string-width'); + +stringWidth('古'); +//=> 2 + +stringWidth('\u001b[1m古\u001b[22m'); +//=> 2 + +stringWidth('a'); +//=> 1 + +stringWidth('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +// => 5 +``` + + +## Related + +- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module +- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string +- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/index.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/index.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,15 @@ +/** +Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string. + +@example +``` +import stripAnsi from 'strip-ansi'; + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` +*/ +export default function stripAnsi(string: string): string; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,7 @@ +'use strict'; +const ansiRegex = require('ansi-regex'); + +const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; + +module.exports = stripAnsi; +module.exports.default = stripAnsi; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,86 @@ +{ + "_from": "strip-ansi@^5.1.0", + "_id": "strip-ansi@5.2.0", + "_inBundle": false, + "_integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "_location": "/yargs/strip-ansi", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "strip-ansi@^5.1.0", + "name": "strip-ansi", + "escapedName": "strip-ansi", + "rawSpec": "^5.1.0", + "saveSpec": null, + "fetchSpec": "^5.1.0" + }, + "_requiredBy": [ + "/yargs/string-width" + ], + "_resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "_shasum": "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae", + "_spec": "strip-ansi@^5.1.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs/node_modules/string-width", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/chalk/strip-ansi/issues" + }, + "bundleDependencies": false, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "deprecated": false, + "description": "Strip ANSI escape codes from a string", + "devDependencies": { + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/chalk/strip-ansi#readme", + "keywords": [ + "strip", + "trim", + "remove", + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "license": "MIT", + "name": "strip-ansi", + "repository": { + "type": "git", + "url": "git+https://github.com/chalk/strip-ansi.git" + }, + "scripts": { + "test": "xo && ava && tsd-check" + }, + "version": "5.2.0" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/strip-ansi/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/strip-ansi/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,61 @@ +# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi) + +> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string + +--- + +
+ + Get professional support for 'strip-ansi' with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- + +## Install + +``` +$ npm install strip-ansi +``` + + +## Usage + +```js +const stripAnsi = require('strip-ansi'); + +stripAnsi('\u001B[4mUnicorn\u001B[0m'); +//=> 'Unicorn' + +stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); +//=> 'Click' +``` + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + +## Related + +- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module +- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module +- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes +- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes +- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right + + +## Maintainers + +- [Sindre Sorhus](https://github.com/sindresorhus) +- [Josh Junon](https://github.com/qix-) + + +## License + +MIT diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/y18n/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/y18n/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/y18n/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/y18n/index.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,172 +0,0 @@ -var fs = require('fs') -var path = require('path') -var util = require('util') - -function Y18N (opts) { - // configurable options. - opts = opts || {} - this.directory = opts.directory || './locales' - this.updateFiles = typeof opts.updateFiles === 'boolean' ? opts.updateFiles : true - this.locale = opts.locale || 'en' - this.fallbackToLanguage = typeof opts.fallbackToLanguage === 'boolean' ? opts.fallbackToLanguage : true - - // internal stuff. - this.cache = {} - this.writeQueue = [] -} - -Y18N.prototype.__ = function () { - var args = Array.prototype.slice.call(arguments) - var str = args.shift() - var cb = function () {} // start with noop. - - if (typeof args[args.length - 1] === 'function') cb = args.pop() - cb = cb || function () {} // noop. - - if (!this.cache[this.locale]) this._readLocaleFile() - - // we've observed a new string, update the language file. - if (!this.cache[this.locale][str] && this.updateFiles) { - this.cache[this.locale][str] = str - - // include the current directory and locale, - // since these values could change before the - // write is performed. - this._enqueueWrite([this.directory, this.locale, cb]) - } else { - cb() - } - - return util.format.apply(util, [this.cache[this.locale][str] || str].concat(args)) -} - -Y18N.prototype._enqueueWrite = function (work) { - this.writeQueue.push(work) - if (this.writeQueue.length === 1) this._processWriteQueue() -} - -Y18N.prototype._processWriteQueue = function () { - var _this = this - var work = this.writeQueue[0] - - // destructure the enqueued work. - var directory = work[0] - var locale = work[1] - var cb = work[2] - - var languageFile = this._resolveLocaleFile(directory, locale) - var serializedLocale = JSON.stringify(this.cache[locale], null, 2) - - fs.writeFile(languageFile, serializedLocale, 'utf-8', function (err) { - _this.writeQueue.shift() - if (_this.writeQueue.length > 0) _this._processWriteQueue() - cb(err) - }) -} - -Y18N.prototype._readLocaleFile = function () { - var localeLookup = {} - var languageFile = this._resolveLocaleFile(this.directory, this.locale) - - try { - localeLookup = JSON.parse(fs.readFileSync(languageFile, 'utf-8')) - } catch (err) { - if (err instanceof SyntaxError) { - err.message = 'syntax error in ' + languageFile - } - - if (err.code === 'ENOENT') localeLookup = {} - else throw err - } - - this.cache[this.locale] = localeLookup -} - -Y18N.prototype._resolveLocaleFile = function (directory, locale) { - var file = path.resolve(directory, './', locale + '.json') - if (this.fallbackToLanguage && !this._fileExistsSync(file) && ~locale.lastIndexOf('_')) { - // attempt fallback to language only - var languageFile = path.resolve(directory, './', locale.split('_')[0] + '.json') - if (this._fileExistsSync(languageFile)) file = languageFile - } - return file -} - -// this only exists because fs.existsSync() "will be deprecated" -// see https://nodejs.org/api/fs.html#fs_fs_existssync_path -Y18N.prototype._fileExistsSync = function (file) { - try { - return fs.statSync(file).isFile() - } catch (err) { - return false - } -} - -Y18N.prototype.__n = function () { - var args = Array.prototype.slice.call(arguments) - var singular = args.shift() - var plural = args.shift() - var quantity = args.shift() - - var cb = function () {} // start with noop. - if (typeof args[args.length - 1] === 'function') cb = args.pop() - - if (!this.cache[this.locale]) this._readLocaleFile() - - var str = quantity === 1 ? singular : plural - if (this.cache[this.locale][singular]) { - str = this.cache[this.locale][singular][quantity === 1 ? 'one' : 'other'] - } - - // we've observed a new string, update the language file. - if (!this.cache[this.locale][singular] && this.updateFiles) { - this.cache[this.locale][singular] = { - one: singular, - other: plural - } - - // include the current directory and locale, - // since these values could change before the - // write is performed. - this._enqueueWrite([this.directory, this.locale, cb]) - } else { - cb() - } - - // if a %d placeholder is provided, add quantity - // to the arguments expanded by util.format. - var values = [str] - if (~str.indexOf('%d')) values.push(quantity) - - return util.format.apply(util, values.concat(args)) -} - -Y18N.prototype.setLocale = function (locale) { - this.locale = locale -} - -Y18N.prototype.getLocale = function () { - return this.locale -} - -Y18N.prototype.updateLocale = function (obj) { - if (!this.cache[this.locale]) this._readLocaleFile() - - for (var key in obj) { - this.cache[this.locale][key] = obj[key] - } -} - -module.exports = function (opts) { - var y18n = new Y18N(opts) - - // bind all functions to y18n, so that - // they can be used in isolation. - for (var key in y18n) { - if (typeof y18n[key] === 'function') { - y18n[key] = y18n[key].bind(y18n) - } - } - - return y18n -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/y18n/LICENSE nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/y18n/LICENSE --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/y18n/LICENSE 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/y18n/LICENSE 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/y18n/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/y18n/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/y18n/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/y18n/package.json 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -{ - "_from": "y18n@^3.2.1", - "_id": "y18n@3.2.1", - "_inBundle": false, - "_integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "_location": "/yargs/y18n", - "_phantomChildren": {}, - "_requested": { - "type": "range", - "registry": true, - "raw": "y18n@^3.2.1", - "name": "y18n", - "escapedName": "y18n", - "rawSpec": "^3.2.1", - "saveSpec": null, - "fetchSpec": "^3.2.1" - }, - "_requiredBy": [ - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "_shasum": "6d15fba884c08679c0d77e88e7759e811e07fa41", - "_spec": "y18n@^3.2.1", - "_where": "/Users/rebecca/code/npm/node_modules/yargs", - "author": { - "name": "Ben Coe", - "email": "ben@npmjs.com" - }, - "bugs": { - "url": "https://github.com/yargs/y18n/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "the bare-bones internationalization library used by yargs", - "devDependencies": { - "chai": "^3.4.1", - "coveralls": "^2.11.6", - "mocha": "^2.3.4", - "nyc": "^6.1.1", - "rimraf": "^2.5.0", - "standard": "^5.4.1" - }, - "files": [ - "index.js" - ], - "homepage": "https://github.com/yargs/y18n", - "keywords": [ - "i18n", - "internationalization", - "yargs" - ], - "license": "ISC", - "main": "index.js", - "name": "y18n", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/yargs/y18n.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "pretest": "standard", - "test": "nyc mocha" - }, - "version": "3.2.1" -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/y18n/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/y18n/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/node_modules/y18n/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/node_modules/y18n/README.md 1970-01-01 00:00:00.000000000 +0000 @@ -1,91 +0,0 @@ -# y18n - -[![Build Status][travis-image]][travis-url] -[![Coverage Status][coveralls-image]][coveralls-url] -[![NPM version][npm-image]][npm-url] -[![js-standard-style][standard-image]][standard-url] - -The bare-bones internationalization library used by yargs. - -Inspired by [i18n](https://www.npmjs.com/package/i18n). - -## Examples - -_simple string translation:_ - -```js -var __ = require('y18n').__ - -console.log(__('my awesome string %s', 'foo')) -``` - -output: - -`my awesome string foo` - -_pluralization support:_ - -```js -var __n = require('y18n').__n - -console.log(__n('one fish %s', '%d fishes %s', 2, 'foo')) -``` - -output: - -`2 fishes foo` - -## JSON Language Files - -The JSON language files should be stored in a `./locales` folder. -File names correspond to locales, e.g., `en.json`, `pirate.json`. - -When strings are observed for the first time they will be -added to the JSON file corresponding to the current locale. - -## Methods - -### require('y18n')(config) - -Create an instance of y18n with the config provided, options include: - -* `directory`: the locale directory, default `./locales`. -* `updateFiles`: should newly observed strings be updated in file, default `true`. -* `locale`: what locale should be used. -* `fallbackToLanguage`: should fallback to a language-only file (e.g. `en.json`) - be allowed if a file matching the locale does not exist (e.g. `en_US.json`), - default `true`. - -### y18n.\_\_(str, arg, arg, arg) - -Print a localized string, `%s` will be replaced with `arg`s. - -### y18n.\_\_n(singularString, pluralString, count, arg, arg, arg) - -Print a localized string with appropriate pluralization. If `%d` is provided -in the string, the `count` will replace this placeholder. - -### y18n.setLocale(str) - -Set the current locale being used. - -### y18n.getLocale() - -What locale is currently being used? - -### y18n.updateLocale(obj) - -Update the current locale with the key value pairs in `obj`. - -## License - -ISC - -[travis-url]: https://travis-ci.org/yargs/y18n -[travis-image]: https://img.shields.io/travis/yargs/y18n.svg -[coveralls-url]: https://coveralls.io/github/yargs/y18n -[coveralls-image]: https://img.shields.io/coveralls/yargs/y18n.svg -[npm-url]: https://npmjs.org/package/y18n -[npm-image]: https://img.shields.io/npm/v/y18n.svg -[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg -[standard-url]: https://github.com/feross/standard diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,65 +1,73 @@ { - "_from": "yargs@^11.0.0", - "_id": "yargs@11.1.1", + "_from": "yargs@^14.2.3", + "_id": "yargs@14.2.3", "_inBundle": false, - "_integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "_integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", "_location": "/yargs", - "_phantomChildren": {}, + "_phantomChildren": { + "emoji-regex": "7.0.3", + "path-exists": "3.0.0" + }, "_requested": { "type": "range", "registry": true, - "raw": "yargs@^11.0.0", + "raw": "yargs@^14.2.3", "name": "yargs", "escapedName": "yargs", - "rawSpec": "^11.0.0", + "rawSpec": "^14.2.3", "saveSpec": null, - "fetchSpec": "^11.0.0" + "fetchSpec": "^14.2.3" }, "_requiredBy": [ "/libnpx" ], - "_resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", - "_shasum": "5052efe3446a4df5ed669c995886cc0f13702766", - "_spec": "yargs@^11.0.0", - "_where": "/Users/mperrotte/npminc/cli/node_modules/libnpx", + "_resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "_shasum": "1a1c3edced1afb2a2fea33604bc6d1d8d688a414", + "_spec": "yargs@^14.2.3", + "_where": "/Users/claudiahdz/npm/cli/node_modules/libnpx", "bugs": { "url": "https://github.com/yargs/yargs/issues" }, "bundleDependencies": false, + "contributors": [ + { + "name": "Yargs Contributors", + "url": "https://github.com/yargs/yargs/graphs/contributors" + } + ], "dependencies": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.1.0", + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.0.0", "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" }, "deprecated": false, "description": "yargs the modern, pirate-themed, successor to optimist.", "devDependencies": { - "chai": "^4.1.2", - "chalk": "^1.1.3", - "coveralls": "^2.11.11", - "cpr": "^2.0.0", + "chai": "^4.2.0", + "chalk": "^2.4.2", + "coveralls": "^3.0.3", + "cpr": "^3.0.1", "cross-spawn": "^6.0.4", - "es6-promise": "^4.0.2", + "es6-promise": "^4.2.5", "hashish": "0.0.4", - "mocha": "^3.0.1", - "nyc": "^11.2.1", - "rimraf": "^2.5.0", - "standard": "^8.6.0", - "standard-version": "^4.2.0", - "which": "^1.2.9", + "mocha": "^5.2.0", + "nyc": "^14.1.0", + "rimraf": "^2.6.3", + "standard": "^12.0.1", + "standard-version": "^7.0.0", + "which": "^1.3.1", "yargs-test-extends": "^1.0.1" }, "engine": { - "node": ">=4" + "node": ">=6" }, "files": [ "index.js", @@ -67,9 +75,10 @@ "lib", "locales", "completion.sh.hbs", + "completion.zsh.hbs", "LICENSE" ], - "homepage": "http://yargs.js.org/", + "homepage": "https://yargs.js.org/", "keywords": [ "argument", "args", @@ -84,18 +93,18 @@ "name": "yargs", "repository": { "type": "git", - "url": "git+ssh://git@github.com/yargs/yargs.git" + "url": "git+https://github.com/yargs/yargs.git" }, "scripts": { "coverage": "nyc report --reporter=text-lcov | coveralls", - "posttest": "standard", + "pretest": "standard", "release": "standard-version", - "test": "nyc --cache mocha --require ./test/before.js --timeout=8000 --check-leaks" + "test": "nyc --cache mocha --require ./test/before.js --timeout=12000 --check-leaks" }, "standard": { "ignore": [ "**/example/**" ] }, - "version": "11.1.1" + "version": "14.2.3" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,20 +1,24 @@ -# Yargs +

+ +

+

Yargs

+

+ Yargs be a node.js library fer hearties tryin' ter parse optstrings +

+ +
[![Build Status][travis-image]][travis-url] [![Coverage Status][coveralls-image]][coveralls-url] [![NPM version][npm-image]][npm-url] -[![Windows Tests][windows-image]][windows-url] [![js-standard-style][standard-image]][standard-url] [![Conventional Commits][conventional-commits-image]][conventional-commits-url] [![Slack][slack-image]][slack-url] -_Having problems? want to contribute? join our [community slack](http://devtoolscommunity.herokuapp.com)_. - -> Yargs be a node.js library fer hearties tryin' ter parse optstrings. +## Description : +Yargs helps you build interactive command line tools, by parsing arguments and generating an elegant user interface. - - -Yargs helps you build interactive command line tools, by parsing arguments and generating an elegant user interface. It gives you: +It gives you: * commands and (grouped) options (`my-program.js serve --port=5000`). * a dynamically generated help menu based on your arguments. @@ -26,11 +30,19 @@ ## Installation +Stable version: +```bash +npm i yargs +``` + +Bleeding edge version with the most recent features: ```bash -npm i yargs --save +npm i yargs@next ``` -## Simple Example +## Usage : + +### Simple Example ````javascript #!/usr/bin/env node @@ -51,9 +63,9 @@ Retreat from the xupptumblers! ``` -## Complex Example +### Complex Example -```js +```javascript #!/usr/bin/env node require('yargs') // eslint-disable-line .command('serve [port]', 'start the server', (yargs) => { @@ -68,14 +80,31 @@ }) .option('verbose', { alias: 'v', - default: false + type: 'boolean', + description: 'Run with verbose logging' }) .argv ``` Run the example above with `--help` to see the help for the application. -## Table of Contents +## TypeScript + +yargs has type definitions at [@types/yargs][type-definitions]. + +``` +npm i @types/yargs --save-dev +``` + +See usage examples in [docs](/docs/typescript.md). + +## Community : + +Having problems? want to contribute? join our [community slack](http://devtoolscommunity.herokuapp.com). + +## Documentation : + +### Table of Contents * [Yargs' API](/docs/api.md) * [Examples](/docs/examples.md) @@ -85,6 +114,7 @@ * [Numbers](/docs/tricks.md#numbers) * [Arrays](/docs/tricks.md#arrays) * [Objects](/docs/tricks.md#objects) + * [Quotes](/docs/tricks.md#quotes) * [Advanced Topics](/docs/advanced.md) * [Composing Your App Using Commands](/docs/advanced.md#commands) * [Building Configurable CLI Apps](/docs/advanced.md#configuration) @@ -97,11 +127,10 @@ [coveralls-image]: https://img.shields.io/coveralls/yargs/yargs.svg [npm-url]: https://www.npmjs.com/package/yargs [npm-image]: https://img.shields.io/npm/v/yargs.svg -[windows-url]: https://ci.appveyor.com/project/bcoe/yargs-ljwvf -[windows-image]: https://img.shields.io/appveyor/ci/bcoe/yargs-ljwvf/master.svg?label=Windows%20Tests [standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg [standard-url]: http://standardjs.com/ [conventional-commits-image]: https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg [conventional-commits-url]: https://conventionalcommits.org/ [slack-image]: http://devtoolscommunity.herokuapp.com/badge.svg [slack-url]: http://devtoolscommunity.herokuapp.com +[type-definitions]: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yargs diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/yargs.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/yargs.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs/yargs.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs/yargs.js 2022-04-05 07:17:00.000000000 +0000 @@ -11,6 +11,7 @@ const objFilter = require('./lib/obj-filter') const setBlocking = require('set-blocking') const applyExtends = require('./lib/apply-extends') +const { globalMiddlewareFactory } = require('./lib/middleware') const YError = require('./lib/yerror') exports = module.exports = Yargs @@ -21,6 +22,7 @@ let command = null let completion = null let groups = {} + let globalMiddleware = [] let output = '' let preservedGroups = {} let usage = null @@ -31,14 +33,26 @@ updateFiles: false }) + self.middleware = globalMiddlewareFactory(globalMiddleware, self) + if (!cwd) cwd = process.cwd() - self.$0 = process.argv - .slice(0, 2) + self.scriptName = function (scriptName) { + self.customScriptName = true + self.$0 = scriptName + return self + } + + // ignore the node bin, specify this in your + // bin file with #!/usr/bin/env node + if (/\b(node|iojs|electron)(\.exe)?$/.test(process.argv[0])) { + self.$0 = process.argv.slice(1, 2) + } else { + self.$0 = process.argv.slice(0, 1) + } + + self.$0 = self.$0 .map((x, i) => { - // ignore the node bin, specify this in your - // bin file with #!/usr/bin/env node - if (i === 0 && /\b(node|iojs)(\.exe)?$/.test(x)) return const b = rebase(cwd, x) return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x }) @@ -80,20 +94,24 @@ }) }) - // preserve all groups not set to local. - preservedGroups = Object.keys(groups).reduce((acc, groupName) => { - const keys = groups[groupName].filter(key => !(key in localLookup)) - if (keys.length > 0) { - acc[groupName] = keys - } - return acc - }, {}) + // add all groups not set to local to preserved groups + Object.assign( + preservedGroups, + Object.keys(groups).reduce((acc, groupName) => { + const keys = groups[groupName].filter(key => !(key in localLookup)) + if (keys.length > 0) { + acc[groupName] = keys + } + return acc + }, {}) + ) // groups can now be reset groups = {} const arrayOptions = [ 'array', 'boolean', 'string', 'skipValidation', - 'count', 'normalize', 'number' + 'count', 'normalize', 'number', + 'hiddenOptions' ] const objectOptions = [ @@ -116,7 +134,7 @@ // instances of all our helpers -- otherwise just reset. usage = usage ? usage.reset(localLookup) : Usage(self, y18n) validation = validation ? validation.reset(localLookup) : Validation(self, usage, y18n) - command = command ? command.reset() : Command(self, usage, validation) + command = command ? command.reset() : Command(self, usage, validation, globalMiddleware) if (!completion) completion = Completion(self, usage, command) completionCommand = null @@ -130,9 +148,10 @@ self.resetOptions() // temporary hack: allow "freezing" of reset-able state for parse(msg, cb) - let frozen + let frozens = [] function freeze () { - frozen = {} + let frozen = {} + frozens.push(frozen) frozen.options = options frozen.configObjects = options.configObjects.slice(0) frozen.exitProcess = exitProcess @@ -146,8 +165,11 @@ frozen.exitError = exitError frozen.hasOutput = hasOutput frozen.parsed = self.parsed + frozen.parseFn = parseFn + frozen.parseContext = parseContext } function unfreeze () { + let frozen = frozens.pop() options = frozen.options options.configObjects = frozen.configObjects exitProcess = frozen.exitProcess @@ -161,9 +183,8 @@ command.unfreeze() strict = frozen.strict completionCommand = frozen.completionCommand - parseFn = null - parseContext = null - frozen = undefined + parseFn = frozen.parseFn + parseContext = frozen.parseContext } self.boolean = function (keys) { @@ -217,6 +238,7 @@ function populateParserHintArray (type, keys, value) { keys = [].concat(keys) keys.forEach((key) => { + key = sanitizeKey(key) options[type].push(key) }) } @@ -272,8 +294,8 @@ function populateParserHintObject (builder, isArray, type, key, value) { if (Array.isArray(key)) { + const temp = Object.create(null) // an array of keys with one value ['x', 'y', 'z'], function parse () {} - const temp = {} key.forEach((k) => { temp[k] = value }) @@ -284,6 +306,7 @@ builder(k, key[k]) }) } else { + key = sanitizeKey(key) // a single key value pair 'x', parse() {} if (isArray) { options[type][key] = (options[type][key] || []).concat(value) @@ -293,6 +316,13 @@ } } + // TODO(bcoe): in future major versions move more objects towards + // Object.create(null): + function sanitizeKey (key) { + if (key === '__proto__') return '___proto___' + return key + } + function deleteFromParserHintObject (optionKey) { // delete from all parsing hints: // boolean, array, key, alias, etc. @@ -312,7 +342,7 @@ argsert('[object|string] [string|function] [function]', [key, msg, parseFn], arguments.length) // allow a config object to be provided directly. if (typeof key === 'object') { - key = applyExtends(key, cwd) + key = applyExtends(key, cwd, self.getParserConfiguration()['deep-merge-config']) options.configObjects = (options.configObjects || []).concat(key) return self } @@ -486,7 +516,7 @@ // If an object exists in the key, add it to options.configObjects if (obj[key] && typeof obj[key] === 'object') { - conf = applyExtends(obj[key], rootPath || cwd) + conf = applyExtends(obj[key], rootPath || cwd, self.getParserConfiguration()['deep-merge-config']) options.configObjects = (options.configObjects || []).concat(conf) } @@ -524,7 +554,15 @@ let parseContext = null self.parse = function parse (args, shortCircuit, _parseFn) { argsert('[string|array] [function|boolean|object] [function]', [args, shortCircuit, _parseFn], arguments.length) - if (typeof args === 'undefined') args = processArgs + freeze() + if (typeof args === 'undefined') { + const argv = self._parseArgs(processArgs) + const tmpParsed = self.parsed + unfreeze() + // TODO: remove this compatibility hack when we release yargs@15.x: + self.parsed = tmpParsed + return argv + } // a context object can optionally be provided, this allows // additional information to be passed to a command handler. @@ -544,7 +582,6 @@ // skipping validation, etc. if (!shortCircuit) processArgs = args - freeze() if (parseFn) exitProcess = false const parsed = self._parseArgs(args, shortCircuit) @@ -657,8 +694,9 @@ } const desc = opt.describe || opt.description || opt.desc - if (!opt.hidden) { - self.describe(key, desc) + self.describe(key, desc) + if (opt.hidden) { + self.hide(key) } if (opt.requiresArg) { @@ -677,8 +715,8 @@ } // .positional() only supports a subset of the configuration - // options availble to .option(). - const supportedOpts = ['default', 'implies', 'normalize', + // options available to .option(). + const supportedOpts = ['default', 'defaultDescription', 'implies', 'normalize', 'choices', 'conflicts', 'coerce', 'type', 'describe', 'desc', 'description', 'alias'] opts = objFilter(opts, (k, v) => { @@ -748,6 +786,14 @@ } self.getStrict = () => strict + let parserConfig = {} + self.parserConfiguration = function parserConfiguration (config) { + argsert('', [config], arguments.length) + parserConfig = config + return self + } + self.getParserConfiguration = () => parserConfig + self.showHelp = function (level) { argsert('[string|function]', [level], arguments.length) if (!self.parsed) self._parseArgs(processArgs) // run parser, if it has not already been executed. @@ -824,6 +870,28 @@ return self } + const defaultShowHiddenOpt = 'show-hidden' + options.showHiddenOpt = defaultShowHiddenOpt + self.addShowHiddenOpt = self.showHidden = function addShowHiddenOpt (opt, msg) { + argsert('[string|boolean] [string]', [opt, msg], arguments.length) + + if (arguments.length === 1) { + if (opt === false) return self + } + + const showHiddenOpt = typeof opt === 'string' ? opt : defaultShowHiddenOpt + self.boolean(showHiddenOpt) + self.describe(showHiddenOpt, msg || usage.deferY18nLookup('Show hidden options')) + options.showHiddenOpt = showHiddenOpt + return self + } + + self.hide = function hide (key) { + argsert('', [key], arguments.length) + options.hiddenOptions.push(key) + return self + } + self.showHelpOnFail = function showHelpOnFail (enabled, message) { argsert('[boolean|string] [string]', [enabled, message], arguments.length) usage.showHelpOnFail(enabled, message) @@ -854,9 +922,9 @@ } // register the completion command. - completionCommand = cmd || 'completion' + completionCommand = cmd || completionCommand || 'completion' if (!desc && desc !== false) { - desc = 'generate bash completion script' + desc = 'generate completion script' } self.command(completionCommand, desc) @@ -866,10 +934,10 @@ return self } - self.showCompletionScript = function ($0) { - argsert('[string]', [$0], arguments.length) + self.showCompletionScript = function ($0, cmd) { + argsert('[string] [string]', [$0, cmd], arguments.length) $0 = $0 || self.$0 - _logger.log(completion.generateCompletionScript($0, completionCommand)) + _logger.log(completion.generateCompletionScript($0, cmd || completionCommand || 'completion')) return self } @@ -966,14 +1034,27 @@ enumerable: true }) - self._parseArgs = function parseArgs (args, shortCircuit, _skipValidation, commandIndex) { - let skipValidation = !!_skipValidation + self._parseArgs = function parseArgs (args, shortCircuit, _calledFromCommand, commandIndex) { + let skipValidation = !!_calledFromCommand args = args || processArgs options.__ = y18n.__ - options.configuration = pkgUp()['yargs'] || {} + options.configuration = self.getParserConfiguration() + // Deprecated + let pkgConfig = pkgUp()['yargs'] + if (pkgConfig) { + console.warn('Configuring yargs through package.json is deprecated and will be removed in a future major release, please use the JS API instead.') + options.configuration = Object.assign({}, pkgConfig, options.configuration) + } + + const populateDoubleDash = !!options.configuration['populate--'] + const config = Object.assign({}, options.configuration, { + 'populate--': true + }) + const parsed = Parser.detailed(args, Object.assign({}, options, { + configuration: config + })) - const parsed = Parser.detailed(args, options) let argv = parsed.argv if (parseContext) argv = Object.assign({}, argv, parseContext) const aliases = parsed.aliases @@ -988,7 +1069,7 @@ // are two passes through the parser. If completion // is being performed short-circuit on the first pass. if (shortCircuit) { - return argv + return (populateDoubleDash || _calledFromCommand) ? argv : self._copyDoubleDash(argv) } // if there's a handler associated with a @@ -1006,8 +1087,11 @@ argv[helpOpt] = true } } + const handlerKeys = command.getCommands() - const skipDefaultCommand = argv[helpOpt] && (handlerKeys.length > 1 || handlerKeys[0] !== '$0') + const requestCompletions = completion.completionKey in argv + const skipRecommendation = argv[helpOpt] || requestCompletions + const skipDefaultCommand = skipRecommendation && (handlerKeys.length > 1 || handlerKeys[0] !== '$0') if (argv._.length) { if (handlerKeys.length) { @@ -1015,11 +1099,11 @@ for (let i = (commandIndex || 0), cmd; argv._[i] !== undefined; i++) { cmd = String(argv._[i]) if (~handlerKeys.indexOf(cmd) && cmd !== completionCommand) { - setPlaceholderKeys(argv) // commands are executed using a recursive algorithm that executes // the deepest command first; we keep track of the position in the // argv._ array that is currently being executed. - return command.runCommand(cmd, self, parsed, i + 1) + const innerArgv = command.runCommand(cmd, self, parsed, i + 1) + return populateDoubleDash ? innerArgv : self._copyDoubleDash(innerArgv) } else if (!firstUnknownCommand && cmd !== completionCommand) { firstUnknownCommand = cmd break @@ -1028,31 +1112,31 @@ // run the default command, if defined if (command.hasDefaultCommand() && !skipDefaultCommand) { - setPlaceholderKeys(argv) - return command.runCommand(null, self, parsed) + const innerArgv = command.runCommand(null, self, parsed) + return populateDoubleDash ? innerArgv : self._copyDoubleDash(innerArgv) } // recommend a command if recommendCommands() has // been enabled, and no commands were found to execute - if (recommendCommands && firstUnknownCommand && !argv[helpOpt]) { + if (recommendCommands && firstUnknownCommand && !skipRecommendation) { validation.recommendCommands(firstUnknownCommand, handlerKeys) } } // generate a completion script for adding to ~/.bashrc. - if (completionCommand && ~argv._.indexOf(completionCommand) && !argv[completion.completionKey]) { + if (completionCommand && ~argv._.indexOf(completionCommand) && !requestCompletions) { if (exitProcess) setBlocking(true) self.showCompletionScript() self.exit(0) } } else if (command.hasDefaultCommand() && !skipDefaultCommand) { - setPlaceholderKeys(argv) - return command.runCommand(null, self, parsed) + const innerArgv = command.runCommand(null, self, parsed) + return populateDoubleDash ? innerArgv : self._copyDoubleDash(innerArgv) } // we must run completions first, a user might // want to complete the --help or --version option. - if (completion.completionKey in argv) { + if (requestCompletions) { if (exitProcess) setBlocking(true) // we allow for asynchronous completions, @@ -1065,7 +1149,7 @@ self.exit(0) }) - return setPlaceholderKeys(argv) + return (populateDoubleDash || _calledFromCommand) ? argv : self._copyDoubleDash(argv) } // Handle 'help' and 'version' options @@ -1100,7 +1184,7 @@ // if we're executed via bash completion, don't // bother with validation. - if (!argv[completion.completionKey]) { + if (!requestCompletions) { self._runValidation(argv, aliases, {}, parsed.error) } } @@ -1109,11 +1193,27 @@ else throw err } - return setPlaceholderKeys(argv) + return (populateDoubleDash || _calledFromCommand) ? argv : self._copyDoubleDash(argv) + } + + // to simplify the parsing of positionals in commands, + // we temporarily populate '--' rather than _, with arguments + // after the '--' directive. After the parse, we copy these back. + self._copyDoubleDash = function (argv) { + if (!argv._ || !argv['--']) return argv + argv._.push.apply(argv._, argv['--']) + + // TODO(bcoe): refactor command parsing such that this delete is not + // necessary: https://github.com/yargs/yargs/issues/1482 + try { + delete argv['--'] + } catch (_err) {} + + return argv } self._runValidation = function runValidation (argv, aliases, positionalMap, parseErrors) { - if (parseErrors) throw new YError(parseErrors.message) + if (parseErrors) throw new YError(parseErrors.message || parseErrors) validation.nonOptionCount(argv) validation.requiredArguments(argv) if (strict) validation.unknownArguments(argv, aliases, positionalMap) @@ -1127,24 +1227,15 @@ if (!detectLocale) return try { - const osLocale = require('os-locale') - self.locale(osLocale.sync({ spawn: false })) + const { env } = process + const locale = env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE || 'en_US' + self.locale(locale.replace(/[.:].*/, '')) } catch (err) { // if we explode looking up locale just noop // we'll keep using the default language 'en'. } } - function setPlaceholderKeys (argv) { - Object.keys(options.key).forEach((key) => { - // don't set placeholder keys for dot - // notation options 'foo.bar'. - if (~key.indexOf('.')) return - if (typeof argv[key] === 'undefined') argv[key] = undefined - }) - return argv - } - // an app should almost always have --version and --help, // if you *really* want to disable this use .help(false)/.version(false). self.help() diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/CHANGELOG.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/CHANGELOG.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/CHANGELOG.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/CHANGELOG.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,7 +1,214 @@ -# Change Log +# Changelog All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [15.0.0](https://github.com/yargs/yargs-parser/compare/v14.0.0...v15.0.0) (2019-10-07) + + +### Features + +* rework `collect-unknown-options` into `unknown-options-as-args`, providing more comprehensive functionality ([ef771ca](https://github.com/yargs/yargs-parser/commit/ef771ca)) + + +### BREAKING CHANGES + +* rework `collect-unknown-options` into `unknown-options-as-args`, providing more comprehensive functionality + + + +## [14.0.0](https://github.com/yargs/yargs-parser/compare/v13.1.1...v14.0.0) (2019-09-06) + + +### Bug Fixes + +* boolean arrays with default values ([#185](https://github.com/yargs/yargs-parser/issues/185)) ([7d42572](https://github.com/yargs/yargs-parser/commit/7d42572)) +* boolean now behaves the same as other array types ([#184](https://github.com/yargs/yargs-parser/issues/184)) ([17ca3bd](https://github.com/yargs/yargs-parser/commit/17ca3bd)) +* eatNargs() for 'opt.narg === 0' and boolean typed options ([#188](https://github.com/yargs/yargs-parser/issues/188)) ([c5a1db0](https://github.com/yargs/yargs-parser/commit/c5a1db0)) +* maybeCoerceNumber now takes precedence over coerce return value ([#182](https://github.com/yargs/yargs-parser/issues/182)) ([2f26436](https://github.com/yargs/yargs-parser/commit/2f26436)) +* take into account aliases when appending arrays from config object ([#199](https://github.com/yargs/yargs-parser/issues/199)) ([f8a2d3f](https://github.com/yargs/yargs-parser/commit/f8a2d3f)) + + +### Features + +* add configuration option to "collect-unknown-options" ([#181](https://github.com/yargs/yargs-parser/issues/181)) ([7909cc4](https://github.com/yargs/yargs-parser/commit/7909cc4)) +* maybeCoerceNumber() now takes into account arrays ([#187](https://github.com/yargs/yargs-parser/issues/187)) ([31c204b](https://github.com/yargs/yargs-parser/commit/31c204b)) + + +### BREAKING CHANGES + +* unless "parse-numbers" is set to "false", arrays of numeric strings are now parsed as numbers, rather than strings. +* we have dropped the broken "defaulted" functionality; we would like to revisit adding this in the future. +* maybeCoerceNumber now takes precedence over coerce return value (#182) + + + +### [13.1.1](https://www.github.com/yargs/yargs-parser/compare/v13.1.0...v13.1.1) (2019-06-10) + + +### Bug Fixes + +* convert values to strings when tokenizing ([#167](https://www.github.com/yargs/yargs-parser/issues/167)) ([57b7883](https://www.github.com/yargs/yargs-parser/commit/57b7883)) +* nargs should allow duplicates when duplicate-arguments-array=false ([#164](https://www.github.com/yargs/yargs-parser/issues/164)) ([47ccb0b](https://www.github.com/yargs/yargs-parser/commit/47ccb0b)) +* should populate "_" when given config with "short-option-groups" false ([#179](https://www.github.com/yargs/yargs-parser/issues/179)) ([6055974](https://www.github.com/yargs/yargs-parser/commit/6055974)) + +## [13.1.0](https://github.com/yargs/yargs-parser/compare/v13.0.0...v13.1.0) (2019-05-05) + + +### Features + +* add `strip-aliased` and `strip-dashed` configuration options. ([#172](https://github.com/yargs/yargs-parser/issues/172)) ([a3936aa](https://github.com/yargs/yargs-parser/commit/a3936aa)) +* support boolean which do not consume next argument. ([#171](https://github.com/yargs/yargs-parser/issues/171)) ([0ae7fcb](https://github.com/yargs/yargs-parser/commit/0ae7fcb)) + + + + +# [13.0.0](https://github.com/yargs/yargs-parser/compare/v12.0.0...v13.0.0) (2019-02-02) + + +### Features + +* don't coerce number from string with leading '0' or '+' ([#158](https://github.com/yargs/yargs-parser/issues/158)) ([18d0fd5](https://github.com/yargs/yargs-parser/commit/18d0fd5)) + + +### BREAKING CHANGES + +* options with leading '+' or '0' now parse as strings + + + + +# [12.0.0](https://github.com/yargs/yargs-parser/compare/v11.1.1...v12.0.0) (2019-01-29) + + +### Bug Fixes + +* better handling of quoted strings ([#153](https://github.com/yargs/yargs-parser/issues/153)) ([2fb71b2](https://github.com/yargs/yargs-parser/commit/2fb71b2)) + + +### Features + +* default value is now used if no right-hand value provided for numbers/strings ([#156](https://github.com/yargs/yargs-parser/issues/156)) ([5a7c46a](https://github.com/yargs/yargs-parser/commit/5a7c46a)) + + +### BREAKING CHANGES + +* a flag with no right-hand value no longer populates defaulted options with `undefined`. +* quotes at beginning and endings of strings are not removed during parsing. + + + + +## [11.1.1](https://github.com/yargs/yargs-parser/compare/v11.1.0...v11.1.1) (2018-11-19) + + +### Bug Fixes + +* ensure empty string is added into argv._ ([#140](https://github.com/yargs/yargs-parser/issues/140)) ([79cda98](https://github.com/yargs/yargs-parser/commit/79cda98)) + + +### Reverts + +* make requiresArg work in conjunction with arrays ([#136](https://github.com/yargs/yargs-parser/issues/136)) ([f4a3063](https://github.com/yargs/yargs-parser/commit/f4a3063)) + + + + +# [11.1.0](https://github.com/yargs/yargs-parser/compare/v11.0.0...v11.1.0) (2018-11-10) + + +### Bug Fixes + +* handling of one char alias ([#139](https://github.com/yargs/yargs-parser/issues/139)) ([ee56e31](https://github.com/yargs/yargs-parser/commit/ee56e31)) + + +### Features + +* add halt-at-non-option configuration option ([#130](https://github.com/yargs/yargs-parser/issues/130)) ([a849fce](https://github.com/yargs/yargs-parser/commit/a849fce)) + + + + +# [11.0.0](https://github.com/yargs/yargs-parser/compare/v10.1.0...v11.0.0) (2018-10-06) + + +### Bug Fixes + +* flatten-duplicate-arrays:false for more than 2 arrays ([#128](https://github.com/yargs/yargs-parser/issues/128)) ([2bc395f](https://github.com/yargs/yargs-parser/commit/2bc395f)) +* hyphenated flags combined with dot notation broke parsing ([#131](https://github.com/yargs/yargs-parser/issues/131)) ([dc788da](https://github.com/yargs/yargs-parser/commit/dc788da)) +* make requiresArg work in conjunction with arrays ([#136](https://github.com/yargs/yargs-parser/issues/136)) ([77ae1d4](https://github.com/yargs/yargs-parser/commit/77ae1d4)) + + +### Chores + +* update dependencies ([6dc42a1](https://github.com/yargs/yargs-parser/commit/6dc42a1)) + + +### Features + +* also add camelCase array options ([#125](https://github.com/yargs/yargs-parser/issues/125)) ([08c0117](https://github.com/yargs/yargs-parser/commit/08c0117)) +* array.type can now be provided, supporting coercion ([#132](https://github.com/yargs/yargs-parser/issues/132)) ([4b8cfce](https://github.com/yargs/yargs-parser/commit/4b8cfce)) + + +### BREAKING CHANGES + +* drops Node 4 support +* the argv object is now populated differently (correctly) when hyphens and dot notation are used in conjunction. + + + + +# [10.1.0](https://github.com/yargs/yargs-parser/compare/v10.0.0...v10.1.0) (2018-06-29) + + +### Features + +* add `set-placeholder-key` configuration ([#123](https://github.com/yargs/yargs-parser/issues/123)) ([19386ee](https://github.com/yargs/yargs-parser/commit/19386ee)) + + + + +# [10.0.0](https://github.com/yargs/yargs-parser/compare/v9.0.2...v10.0.0) (2018-04-04) + + +### Bug Fixes + +* do not set boolean flags if not defined in `argv` ([#119](https://github.com/yargs/yargs-parser/issues/119)) ([f6e6599](https://github.com/yargs/yargs-parser/commit/f6e6599)) + + +### BREAKING CHANGES + +* `boolean` flags defined without a `default` value will now behave like other option type and won't be set in the parsed results when the user doesn't set the corresponding CLI arg. + +Previous behavior: +```js +var parse = require('yargs-parser'); + +parse('--flag', {boolean: ['flag']}); +// => { _: [], flag: true } + +parse('--no-flag', {boolean: ['flag']}); +// => { _: [], flag: false } + +parse('', {boolean: ['flag']}); +// => { _: [], flag: false } +``` + +New behavior: +```js +var parse = require('yargs-parser'); + +parse('--flag', {boolean: ['flag']}); +// => { _: [], flag: true } + +parse('--no-flag', {boolean: ['flag']}); +// => { _: [], flag: false } + +parse('', {boolean: ['flag']}); +// => { _: [] } => flag not set similarly to other option type +``` + + + ## [9.0.2](https://github.com/yargs/yargs-parser/compare/v9.0.1...v9.0.2) (2018-01-20) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/index.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,4 +1,5 @@ var camelCase = require('camelcase') +var decamelize = require('decamelize') var path = require('path') var tokenizeArgString = require('./lib/tokenize-arg-string') var util = require('util') @@ -8,9 +9,10 @@ // allow a string argument to be passed in rather // than an argv array. args = tokenizeArgString(args) + // aliases might have transitive relationships, normalize this. var aliases = combineAliases(opts.alias || {}) - var configuration = assign({ + var configuration = Object.assign({ 'short-option-groups': true, 'camel-case-expansion': true, 'dot-notation': true, @@ -20,7 +22,12 @@ 'duplicate-arguments-array': true, 'flatten-duplicate-arrays': true, 'populate--': false, - 'combine-arrays': false + 'combine-arrays': false, + 'set-placeholder-key': false, + 'halt-at-non-option': false, + 'strip-aliased': false, + 'strip-dashed': false, + 'unknown-options-as-args': false }, opts.configuration) var defaults = opts.default || {} var configObjects = opts.configObjects || [] @@ -29,9 +36,7 @@ var notFlagsArgv = notFlagsOption ? '--' : '_' var newAliases = {} // allow a i18n handler to be passed in, default to a fake one (util.format). - var __ = opts.__ || function (str) { - return util.format.apply(util, Array.prototype.slice.call(arguments)) - } + var __ = opts.__ || util.format var error = null var flags = { aliases: {}, @@ -42,43 +47,67 @@ counts: {}, normalize: {}, configs: {}, - defaulted: {}, nargs: {}, - coercions: {} + coercions: {}, + keys: [] } var negative = /^-[0-9]+(\.[0-9]+)?/ var negatedBoolean = new RegExp('^--' + configuration['negation-prefix'] + '(.+)') - ;[].concat(opts.array).filter(Boolean).forEach(function (key) { + ;[].concat(opts.array).filter(Boolean).forEach(function (opt) { + var key = opt.key || opt + + // assign to flags[bools|strings|numbers] + const assignment = Object.keys(opt).map(function (key) { + return ({ + boolean: 'bools', + string: 'strings', + number: 'numbers' + })[key] + }).filter(Boolean).pop() + + // assign key to be coerced + if (assignment) { + flags[assignment][key] = true + } + flags.arrays[key] = true + flags.keys.push(key) }) ;[].concat(opts.boolean).filter(Boolean).forEach(function (key) { flags.bools[key] = true + flags.keys.push(key) }) ;[].concat(opts.string).filter(Boolean).forEach(function (key) { flags.strings[key] = true + flags.keys.push(key) }) ;[].concat(opts.number).filter(Boolean).forEach(function (key) { flags.numbers[key] = true + flags.keys.push(key) }) ;[].concat(opts.count).filter(Boolean).forEach(function (key) { flags.counts[key] = true + flags.keys.push(key) }) ;[].concat(opts.normalize).filter(Boolean).forEach(function (key) { flags.normalize[key] = true + flags.keys.push(key) }) Object.keys(opts.narg || {}).forEach(function (k) { flags.nargs[k] = opts.narg[k] + flags.keys.push(k) }) Object.keys(opts.coerce || {}).forEach(function (k) { flags.coercions[k] = opts.coerce[k] + flags.keys.push(k) }) if (Array.isArray(opts.config) || typeof opts.config === 'string') { @@ -103,17 +132,7 @@ }) var argv = { _: [] } - - Object.keys(flags.bools).forEach(function (key) { - setArg(key, !(key in defaults) ? false : defaults[key]) - setDefaulted(key) - }) - var notFlags = [] - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--') + 1) - args = args.slice(0, args.indexOf('--')) - } for (var i = 0; i < args.length; i++) { var arg = args[i] @@ -124,8 +143,10 @@ var next var value - // -- seperated by = - if (arg.match(/^--.+=/) || ( + if (isUnknownOptionAsArg(arg)) { + argv._.push(arg) + // -- separated by = + } else if (arg.match(/^--.+=/) || ( !configuration['short-option-groups'] && arg.match(/^-.+=/) )) { // Using [\s\S] instead of . because js doesn't support the @@ -138,7 +159,7 @@ args.splice(i + 1, 0, m[2]) i = eatNargs(i, m[1], args) // arrays format = '--f=a b c' - } else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) { + } else if (checkAllAliases(m[1], flags.arrays)) { args.splice(i + 1, 0, m[2]) i = eatArray(i, m[1], args) } else { @@ -146,19 +167,20 @@ } } else if (arg.match(negatedBoolean) && configuration['boolean-negation']) { key = arg.match(negatedBoolean)[1] - setArg(key, false) + setArg(key, checkAllAliases(key, flags.arrays) ? [false] : false) - // -- seperated by space. + // -- separated by space. } else if (arg.match(/^--.+/) || ( - !configuration['short-option-groups'] && arg.match(/^-.+/) + !configuration['short-option-groups'] && arg.match(/^-[^-]+/) )) { key = arg.match(/^--?(.+)/)[1] // nargs format = '--foo a b c' - if (checkAllAliases(key, flags.nargs)) { + // should be truthy even if: flags.nargs[key] === 0 + if (checkAllAliases(key, flags.nargs) !== false) { i = eatNargs(i, key, args) // array format = '--foo a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { + } else if (checkAllAliases(key, flags.arrays)) { i = eatArray(i, key, args) } else { next = args[i + 1] @@ -173,16 +195,16 @@ setArg(key, next) i++ } else { - setArg(key, defaultForType(guessType(key, flags))) + setArg(key, defaultValue(key)) } } - // dot-notation flag seperated by '='. + // dot-notation flag separated by '='. } else if (arg.match(/^-.\..+=/)) { m = arg.match(/^-([^=]+)=([\s\S]*)$/) setArg(m[1], m[2]) - // dot-notation flag seperated by space. + // dot-notation flag separated by space. } else if (arg.match(/^-.\..+/)) { next = args[i + 1] key = arg.match(/^-(.\..+)/)[1] @@ -193,7 +215,7 @@ setArg(key, next) i++ } else { - setArg(key, defaultForType(guessType(key, flags))) + setArg(key, defaultValue(key)) } } else if (arg.match(/^-[^-]+/) && !arg.match(negative)) { letters = arg.slice(1, -1).split('') @@ -211,7 +233,7 @@ args.splice(i + 1, 0, value) i = eatNargs(i, key, args) // array format = '-f=a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { + } else if (checkAllAliases(key, flags.arrays)) { args.splice(i + 1, 0, value) i = eatArray(i, key, args) } else { @@ -240,7 +262,7 @@ broken = true break } else { - setArg(letters[j], defaultForType(guessType(letters[j], flags))) + setArg(letters[j], defaultValue(letters[j])) } } @@ -248,10 +270,11 @@ if (!broken && key !== '-') { // nargs format = '-f a b c' - if (checkAllAliases(key, flags.nargs)) { + // should be truthy even if: flags.nargs[key] === 0 + if (checkAllAliases(key, flags.nargs) !== false) { i = eatNargs(i, key, args) // array format = '-f a b c' - } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { + } else if (checkAllAliases(key, flags.arrays)) { i = eatArray(i, key, args) } else { next = args[i + 1] @@ -266,10 +289,16 @@ setArg(key, next) i++ } else { - setArg(key, defaultForType(guessType(key, flags))) + setArg(key, defaultValue(key)) } } } + } else if (arg === '--') { + notFlags = args.slice(i + 1) + break + } else if (configuration['halt-at-non-option']) { + notFlags = args.slice(i) + break } else { argv._.push(maybeCoerceNumber('_', arg)) } @@ -287,6 +316,7 @@ setConfigObjects() applyDefaultsAndAliases(argv, flags.aliases, defaults) applyCoercions(argv) + if (configuration['set-placeholder-key']) setPlaceholderKeys(argv) // for any counts either not in args or without an explicit default, set to 0 Object.keys(flags.counts).forEach(function (key) { @@ -299,17 +329,39 @@ argv[notFlagsArgv].push(key) }) + if (configuration['camel-case-expansion'] && configuration['strip-dashed']) { + Object.keys(argv).filter(key => key !== '--' && key.includes('-')).forEach(key => { + delete argv[key] + }) + } + + if (configuration['strip-aliased']) { + // XXX Switch to [].concat(...Object.values(aliases)) once node.js 6 is dropped + ;[].concat(...Object.keys(aliases).map(k => aliases[k])).forEach(alias => { + if (configuration['camel-case-expansion']) { + delete argv[alias.split('.').map(prop => camelCase(prop)).join('.')] + } + + delete argv[alias] + }) + } + // how many arguments should we consume, based // on the nargs option? function eatNargs (i, key, args) { var ii const toEat = checkAllAliases(key, flags.nargs) + if (toEat === 0) { + setArg(key, defaultValue(key)) + return i + } + // nargs will not consume flag arguments, e.g., -abc, --foo, // and terminates when one is observed. var available = 0 for (ii = i + 1; ii < args.length; ii++) { - if (!args[ii].match(/^-[^0-9]/)) available++ + if (!args[ii].match(/^-[^0-9]/) || isUnknownOptionAsArg(args[ii])) available++ else break } @@ -327,38 +379,36 @@ // following it... YUM! // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"] function eatArray (i, key, args) { - var start = i + 1 - var argsToSet = [] - var multipleArrayFlag = i > 0 - for (var ii = i + 1; ii < args.length; ii++) { - if (/^-/.test(args[ii]) && !negative.test(args[ii])) { - if (ii === start) { - setArg(key, defaultForType('array')) - } - multipleArrayFlag = true - break + let argsToSet = [] + let next = args[i + 1] + + if (checkAllAliases(key, flags.bools) && !(/^(true|false)$/.test(next))) { + argsToSet.push(true) + } else if (isUndefined(next) || (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next))) { + // for keys without value ==> argsToSet remains an empty [] + // set user default value, if available + if (defaults.hasOwnProperty(key)) { + argsToSet.push(defaults[key]) } - i = ii - argsToSet.push(args[ii]) - } - if (multipleArrayFlag) { - setArg(key, argsToSet.map(function (arg) { - return processValue(key, arg) - })) } else { - argsToSet.forEach(function (arg) { - setArg(key, arg) - }) + for (var ii = i + 1; ii < args.length; ii++) { + next = args[ii] + if (/^-/.test(next) && !negative.test(next) && !isUnknownOptionAsArg(next)) break + i = ii + argsToSet.push(processValue(key, next)) + } } + setArg(key, argsToSet) return i } function setArg (key, val) { - unsetDefaulted(key) - if (/-/.test(key) && configuration['camel-case-expansion']) { - addNewAlias(key, camelCase(key)) + var alias = key.split('.').map(function (prop) { + return camelCase(prop) + }).join('.') + addNewAlias(key, alias) } var value = processValue(key, val) @@ -367,7 +417,7 @@ setKey(argv, splitKey, value) // handle populating aliases of the full key - if (flags.aliases[key]) { + if (flags.aliases[key] && flags.aliases[key].forEach) { flags.aliases[key].forEach(function (x) { x = x.split('.') setKey(argv, x, value) @@ -414,12 +464,22 @@ } function processValue (key, val) { + // strings may be quoted, clean this up as we assign values. + if (typeof val === 'string' && + (val[0] === "'" || val[0] === '"') && + val[val.length - 1] === val[0] + ) { + val = val.substring(1, val.length - 1) + } + // handle parsing boolean arguments --foo=true --bar false. if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) { if (typeof val === 'string') val = val === 'true' } - var value = maybeCoerceNumber(key, val) + var value = Array.isArray(val) + ? val.map(function (v) { return maybeCoerceNumber(key, v) }) + : maybeCoerceNumber(key, val) // increment a count given as arg (either no value or value parsed as boolean) if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) { @@ -435,7 +495,7 @@ } function maybeCoerceNumber (key, value) { - if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.coercions)) { + if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.bools) && !Array.isArray(value)) { const shouldCoerceNumber = isNumber(value) && configuration['parse-numbers'] && ( Number.isSafeInteger(Math.floor(value)) ) @@ -498,7 +558,7 @@ } else { // setting arguments via CLI takes precedence over // values within the config file. - if (!hasKey(argv, fullKey.split('.')) || (flags.defaulted[fullKey]) || (flags.arrays[fullKey] && configuration['combine-arrays'])) { + if (!hasKey(argv, fullKey.split('.')) || (checkAllAliases(fullKey, flags.arrays) && configuration['combine-arrays'])) { setArg(fullKey, value) } } @@ -527,7 +587,7 @@ return camelCase(key) }) - if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && (!hasKey(argv, keys) || flags.defaulted[keys.join('.')])) { + if (((configOnly && flags.configs[keys.join('.')]) || !configOnly) && !hasKey(argv, keys)) { setArg(keys.join('.'), process.env[envVar]) } } @@ -542,7 +602,7 @@ coerce = checkAllAliases(key, flags.coercions) if (typeof coerce === 'function') { try { - var value = coerce(argv[key]) + var value = maybeCoerceNumber(key, coerce(argv[key])) ;([].concat(flags.aliases[key] || [], key)).forEach(ali => { applied[ali] = argv[ali] = value }) @@ -554,6 +614,15 @@ }) } + function setPlaceholderKeys (argv) { + flags.keys.forEach((key) => { + // don't set placeholder keys for dot notation options 'foo.bar'. + if (~key.indexOf('.')) return + if (typeof argv[key] === 'undefined') argv[key] = undefined + }) + return argv + } + function applyDefaultsAndAliases (obj, aliases, defaults) { Object.keys(defaults).forEach(function (key) { if (!hasKey(obj, key.split('.'))) { @@ -588,6 +657,10 @@ if (!configuration['dot-notation']) keys = [keys.join('.')] keys.slice(0, -1).forEach(function (key, index) { + // TODO(bcoe): in the next major version of yargs, switch to + // Object.create(null) for dot notation: + key = sanitizeKey(key) + if (typeof o === 'object' && o[key] === undefined) { o[key] = {} } @@ -607,17 +680,27 @@ } }) - var key = keys[keys.length - 1] - - var isTypeArray = checkAllAliases(keys.join('.'), flags.arrays) - var isValueArray = Array.isArray(value) - var duplicate = configuration['duplicate-arguments-array'] + // TODO(bcoe): in the next major version of yargs, switch to + // Object.create(null) for dot notation: + const key = sanitizeKey(keys[keys.length - 1]) + + const isTypeArray = checkAllAliases(keys.join('.'), flags.arrays) + const isValueArray = Array.isArray(value) + let duplicate = configuration['duplicate-arguments-array'] + + // nargs has higher priority than duplicate + if (!duplicate && checkAllAliases(key, flags.nargs)) { + duplicate = true + if ((!isUndefined(o[key]) && flags.nargs[key] === 1) || (Array.isArray(o[key]) && o[key].length === flags.nargs[key])) { + o[key] = undefined + } + } if (value === increment) { o[key] = increment(o[key]) } else if (Array.isArray(o[key])) { if (duplicate && isTypeArray && isValueArray) { - o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : [o[key]].concat([value]) + o[key] = configuration['flatten-duplicate-arrays'] ? o[key].concat(value) : (Array.isArray(o[key][0]) ? o[key] : [o[key]]).concat([value]) } else if (!duplicate && Boolean(isTypeArray) === Boolean(isValueArray)) { o[key] = value } else { @@ -625,7 +708,7 @@ } } else if (o[key] === undefined && isTypeArray) { o[key] = isValueArray ? value : [value] - } else if (duplicate && !(o[key] === undefined || checkAllAliases(key, flags.bools) || checkAllAliases(keys.join('.'), flags.bools) || checkAllAliases(key, flags.counts))) { + } else if (duplicate && !(o[key] === undefined || checkAllAliases(key, flags.counts))) { o[key] = [ o[key], value ] } else { o[key] = value @@ -633,8 +716,8 @@ } // extend the aliases list with inferred aliases. - function extendAliases () { - Array.prototype.slice.call(arguments).forEach(function (obj) { + function extendAliases (...args) { + args.forEach(function (obj) { Object.keys(obj || {}).forEach(function (key) { // short-circuit if we've already added a key // to the aliases array, for example it might @@ -652,6 +735,16 @@ } } }) + // For "--optionName", also set argv['option-name'] + flags.aliases[key].concat(key).forEach(function (x) { + if (x.length > 1 && /[A-Z]/.test(x) && configuration['camel-case-expansion']) { + var c = decamelize(x, '-') + if (c !== key && flags.aliases[key].indexOf(c) === -1) { + flags.aliases[key].push(c) + newAliases[c] = true + } + } + }) flags.aliases[key].forEach(function (x) { flags.aliases[x] = [key].concat(flags.aliases[key].filter(function (y) { return x !== y @@ -667,24 +760,89 @@ var toCheck = [].concat(flags.aliases[key] || [], key) toCheck.forEach(function (key) { - if (flag[key]) isSet = flag[key] + if (flag.hasOwnProperty(key)) isSet = flag[key] }) return isSet } - function setDefaulted (key) { - [].concat(flags.aliases[key] || [], key).forEach(function (k) { - flags.defaulted[k] = true + function hasAnyFlag (key) { + // XXX Switch to [].concat(...Object.values(flags)) once node.js 6 is dropped + var toCheck = [].concat(...Object.keys(flags).map(k => flags[k])) + + return toCheck.some(function (flag) { + return flag[key] }) } - function unsetDefaulted (key) { - [].concat(flags.aliases[key] || [], key).forEach(function (k) { - delete flags.defaulted[k] + function hasFlagsMatching (arg, ...patterns) { + var toCheck = [].concat(...patterns) + return toCheck.some(function (pattern) { + var match = arg.match(pattern) + return match && hasAnyFlag(match[1]) }) } + // based on a simplified version of the short flag group parsing logic + function hasAllShortFlags (arg) { + // if this is a negative number, or doesn't start with a single hyphen, it's not a short flag group + if (arg.match(negative) || !arg.match(/^-[^-]+/)) { return false } + var hasAllFlags = true + var letters = arg.slice(1).split('') + var next + for (var j = 0; j < letters.length; j++) { + next = arg.slice(j + 2) + + if (!hasAnyFlag(letters[j])) { + hasAllFlags = false + break + } + + if ((letters[j + 1] && letters[j + 1] === '=') || + next === '-' || + (/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) || + (letters[j + 1] && letters[j + 1].match(/\W/))) { + break + } + } + return hasAllFlags + } + + function isUnknownOptionAsArg (arg) { + return configuration['unknown-options-as-args'] && isUnknownOption(arg) + } + + function isUnknownOption (arg) { + // ignore negative numbers + if (arg.match(negative)) { return false } + // if this is a short option group and all of them are configured, it isn't unknown + if (hasAllShortFlags(arg)) { return false } + // e.g. '--count=2' + const flagWithEquals = /^-+([^=]+?)=[\s\S]*$/ + // e.g. '-a' or '--arg' + const normalFlag = /^-+([^=]+?)$/ + // e.g. '-a-' + const flagEndingInHyphen = /^-+([^=]+?)-$/ + // e.g. '-abc123' + const flagEndingInDigits = /^-+([^=]+?)\d+$/ + // e.g. '-a/usr/local' + const flagEndingInNonWordCharacters = /^-+([^=]+?)\W+.*$/ + // check the different types of flag styles, including negatedBoolean, a pattern defined near the start of the parse method + return !hasFlagsMatching(arg, flagWithEquals, negatedBoolean, normalFlag, flagEndingInHyphen, flagEndingInDigits, flagEndingInNonWordCharacters) + } + + // make a best effor to pick a default value + // for an option based on name and type. + function defaultValue (key) { + if (!checkAllAliases(key, flags.bools) && + !checkAllAliases(key, flags.counts) && + `${key}` in defaults) { + return defaults[key] + } else { + return defaultForType(guessType(key)) + } + } + // return a default value, given the type of a flag., // e.g., key of type 'string' will default to '', rather than 'true'. function defaultForType (type) { @@ -699,20 +857,26 @@ } // given a flag, enforce a default type. - function guessType (key, flags) { + function guessType (key) { var type = 'boolean' if (checkAllAliases(key, flags.strings)) type = 'string' else if (checkAllAliases(key, flags.numbers)) type = 'number' + else if (checkAllAliases(key, flags.bools)) type = 'boolean' else if (checkAllAliases(key, flags.arrays)) type = 'array' return type } function isNumber (x) { + if (x === null || x === undefined) return false + // if loaded from config, may already be a number. if (typeof x === 'number') return true + // hexadecimal. if (/^0x[0-9a-f]+$/i.test(x)) return true - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x) + // don't treat 0123 as a number; as it drops the leading '0'. + if (x.length > 1 && x[0] === '0') return false + return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x) } function isUndefined (num) { @@ -775,20 +939,6 @@ return combined } -function assign (defaults, configuration) { - var o = {} - configuration = configuration || {} - - Object.keys(defaults).forEach(function (k) { - o[k] = defaults[k] - }) - Object.keys(configuration).forEach(function (k) { - o[k] = configuration[k] - }) - - return o -} - // this function should only be called when a count is given as an arg // it is NOT called to set a default value // thus we can start the count at 1 instead of 0 @@ -808,4 +958,11 @@ return parse(args.slice(), opts) } +// TODO(bcoe): in the next major version of yargs, switch to +// Object.create(null) for dot notation: +function sanitizeKey (key) { + if (key === '__proto__') return '___proto___' + return key +} + module.exports = Parser diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/lib/tokenize-arg-string.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/lib/tokenize-arg-string.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/lib/tokenize-arg-string.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/lib/tokenize-arg-string.js 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,8 @@ // take an un-split argv string and tokenize it. module.exports = function (argString) { - if (Array.isArray(argString)) return argString + if (Array.isArray(argString)) { + return argString.map(e => typeof e !== 'string' ? e + '' : e) + } argString = argString.trim() @@ -26,10 +28,8 @@ // opening or closing single and double quotes. if (c === opening) { opening = null - continue } else if ((c === "'" || c === '"') && !opening) { opening = c - continue } if (!args[i]) args[i] = '' diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/index.d.ts nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/index.d.ts --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/index.d.ts 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/index.d.ts 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,63 @@ +declare namespace camelcase { + interface Options { + /** + Uppercase the first character: `foo-bar` → `FooBar`. + + @default false + */ + readonly pascalCase?: boolean; + } +} + +declare const camelcase: { + /** + Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`. + + @param input - String to convert to camel case. + + @example + ``` + import camelCase = require('camelcase'); + + camelCase('foo-bar'); + //=> 'fooBar' + + camelCase('foo_bar'); + //=> 'fooBar' + + camelCase('Foo-Bar'); + //=> 'fooBar' + + camelCase('Foo-Bar', {pascalCase: true}); + //=> 'FooBar' + + camelCase('--foo.bar', {pascalCase: false}); + //=> 'fooBar' + + camelCase('foo bar'); + //=> 'fooBar' + + console.log(process.argv[3]); + //=> '--foo-bar' + camelCase(process.argv[3]); + //=> 'fooBar' + + camelCase(['foo', 'bar']); + //=> 'fooBar' + + camelCase(['__foo__', '--bar'], {pascalCase: true}); + //=> 'FooBar' + ``` + */ + (input: string | ReadonlyArray, options?: camelcase.Options): string; + + // TODO: Remove this for the next major release, refactor the whole definition to: + // declare function camelcase( + // input: string | ReadonlyArray, + // options?: camelcase.Options + // ): string; + // export = camelcase; + default: typeof camelcase; +}; + +export = camelcase; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/index.js nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/index.js --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/index.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/index.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,76 @@ +'use strict'; + +const preserveCamelCase = string => { + let isLastCharLower = false; + let isLastCharUpper = false; + let isLastLastCharUpper = false; + + for (let i = 0; i < string.length; i++) { + const character = string[i]; + + if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) { + string = string.slice(0, i) + '-' + string.slice(i); + isLastCharLower = false; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = true; + i++; + } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) { + string = string.slice(0, i - 1) + '-' + string.slice(i - 1); + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = false; + isLastCharLower = true; + } else { + isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character; + } + } + + return string; +}; + +const camelCase = (input, options) => { + if (!(typeof input === 'string' || Array.isArray(input))) { + throw new TypeError('Expected the input to be `string | string[]`'); + } + + options = Object.assign({ + pascalCase: false + }, options); + + const postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x; + + if (Array.isArray(input)) { + input = input.map(x => x.trim()) + .filter(x => x.length) + .join('-'); + } else { + input = input.trim(); + } + + if (input.length === 0) { + return ''; + } + + if (input.length === 1) { + return options.pascalCase ? input.toUpperCase() : input.toLowerCase(); + } + + const hasUpperCase = input !== input.toLowerCase(); + + if (hasUpperCase) { + input = preserveCamelCase(input); + } + + input = input + .replace(/^[_.\- ]+/, '') + .toLowerCase() + .replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase()) + .replace(/\d+(\w|$)/g, m => m.toUpperCase()); + + return postProcess(input); +}; + +module.exports = camelCase; +// TODO: Remove this for the next major release +module.exports.default = camelCase; diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/license nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/license --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/license 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/license 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/package.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,75 @@ +{ + "_from": "camelcase@^5.0.0", + "_id": "camelcase@5.3.1", + "_inBundle": false, + "_integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "_location": "/yargs-parser/camelcase", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "camelcase@^5.0.0", + "name": "camelcase", + "escapedName": "camelcase", + "rawSpec": "^5.0.0", + "saveSpec": null, + "fetchSpec": "^5.0.0" + }, + "_requiredBy": [ + "/yargs-parser" + ], + "_resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "_shasum": "e3c9b31569e106811df242f715725a1f4c494320", + "_spec": "camelcase@^5.0.0", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs-parser", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/camelcase/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar`", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.1", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "homepage": "https://github.com/sindresorhus/camelcase#readme", + "keywords": [ + "camelcase", + "camel-case", + "camel", + "case", + "dash", + "hyphen", + "dot", + "underscore", + "separator", + "string", + "text", + "convert", + "pascalcase", + "pascal-case" + ], + "license": "MIT", + "name": "camelcase", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/camelcase.git" + }, + "scripts": { + "test": "xo && ava && tsd" + }, + "version": "5.3.1" +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/readme.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/readme.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/node_modules/camelcase/readme.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/node_modules/camelcase/readme.md 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,99 @@ +# camelcase [![Build Status](https://travis-ci.org/sindresorhus/camelcase.svg?branch=master)](https://travis-ci.org/sindresorhus/camelcase) + +> Convert a dash/dot/underscore/space separated string to camelCase or PascalCase: `foo-bar` → `fooBar` + +--- + +
+ + Get professional support for 'camelcase' with a Tidelift subscription + +
+ + Tidelift helps make open source sustainable for maintainers while giving companies
assurances about security, maintenance, and licensing for their dependencies. +
+
+ +--- + +## Install + +``` +$ npm install camelcase +``` + + +## Usage + +```js +const camelCase = require('camelcase'); + +camelCase('foo-bar'); +//=> 'fooBar' + +camelCase('foo_bar'); +//=> 'fooBar' + +camelCase('Foo-Bar'); +//=> 'fooBar' + +camelCase('Foo-Bar', {pascalCase: true}); +//=> 'FooBar' + +camelCase('--foo.bar', {pascalCase: false}); +//=> 'fooBar' + +camelCase('foo bar'); +//=> 'fooBar' + +console.log(process.argv[3]); +//=> '--foo-bar' +camelCase(process.argv[3]); +//=> 'fooBar' + +camelCase(['foo', 'bar']); +//=> 'fooBar' + +camelCase(['__foo__', '--bar'], {pascalCase: true}); +//=> 'FooBar' +``` + + +## API + +### camelCase(input, [options]) + +#### input + +Type: `string` `string[]` + +String to convert to camel case. + +#### options + +Type: `Object` + +##### pascalCase + +Type: `boolean`
+Default: `false` + +Uppercase the first character: `foo-bar` → `FooBar` + + +## Security + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. + + +## Related + +- [decamelize](https://github.com/sindresorhus/decamelize) - The inverse of this module +- [uppercamelcase](https://github.com/SamVerschueren/uppercamelcase) - Like this module, but to PascalCase instead of camelCase +- [titleize](https://github.com/sindresorhus/titleize) - Capitalize every word in string +- [humanize-string](https://github.com/sindresorhus/humanize-string) - Convert a camelized/dasherized/underscored string into a humanized one + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/package.json nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/package.json --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,27 +1,27 @@ { - "_from": "yargs-parser@^9.0.2", - "_id": "yargs-parser@9.0.2", + "_from": "yargs-parser@^15.0.1", + "_id": "yargs-parser@15.0.1", "_inBundle": false, - "_integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "_integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", "_location": "/yargs-parser", "_phantomChildren": {}, "_requested": { "type": "range", "registry": true, - "raw": "yargs-parser@^9.0.2", + "raw": "yargs-parser@^15.0.1", "name": "yargs-parser", "escapedName": "yargs-parser", - "rawSpec": "^9.0.2", + "rawSpec": "^15.0.1", "saveSpec": null, - "fetchSpec": "^9.0.2" + "fetchSpec": "^15.0.1" }, "_requiredBy": [ "/yargs" ], - "_resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "_shasum": "9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077", - "_spec": "yargs-parser@^9.0.2", - "_where": "/Users/rebecca/code/npm/node_modules/yargs", + "_resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "_shasum": "54786af40b820dcb2fb8025b11b4d659d76323b3", + "_spec": "yargs-parser@^15.0.1", + "_where": "/Users/claudiahdz/npm/cli/node_modules/yargs", "author": { "name": "Ben Coe", "email": "ben@npmjs.com" @@ -31,17 +31,21 @@ }, "bundleDependencies": false, "dependencies": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" }, "deprecated": false, "description": "the mighty option parser used by yargs", "devDependencies": { - "chai": "^3.5.0", - "coveralls": "^2.11.12", - "mocha": "^3.0.1", - "nyc": "^11.4.1", - "standard": "^10.0.2", - "standard-version": "^4.3.0" + "chai": "^4.2.0", + "coveralls": "^3.0.2", + "mocha": "^5.2.0", + "nyc": "^14.1.0", + "standard": "^12.0.1", + "standard-version": "^6.0.0" + }, + "engine": { + "node": ">=6" }, "files": [ "lib", @@ -71,5 +75,5 @@ "release": "standard-version", "test": "nyc mocha test/*.js" }, - "version": "9.0.2" + "version": "15.0.1" } diff -Nru nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/README.md nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/README.md --- nodejs-mozilla-12.18.1/deps/npm/node_modules/yargs-parser/README.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/node_modules/yargs-parser/README.md 2022-04-05 07:17:00.000000000 +0000 @@ -1,9 +1,8 @@ # yargs-parser -[![Build Status](https://travis-ci.org/yargs/yargs-parser.png)](https://travis-ci.org/yargs/yargs-parser) +[![Build Status](https://travis-ci.org/yargs/yargs-parser.svg)](https://travis-ci.org/yargs/yargs-parser) [![Coverage Status](https://coveralls.io/repos/yargs/yargs-parser/badge.svg?branch=)](https://coveralls.io/r/yargs/yargs-parser?branch=master) [![NPM version](https://img.shields.io/npm/v/yargs-parser.svg)](https://www.npmjs.com/package/yargs-parser) -[![Windows Tests](https://img.shields.io/appveyor/ci/bcoe/yargs-parser/master.svg?label=Windows%20Tests)](https://ci.appveyor.com/project/bcoe/yargs-parser) [![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) @@ -32,7 +31,7 @@ _or parse a string!_ ```js -var argv = require('./')('--foo=99 --bar=33') +var argv = require('yargs-parser')('--foo=99 --bar=33') console.log(argv) ``` @@ -59,20 +58,24 @@ * `args`: a string or array of strings representing the options to parse. * `opts`: provide a set of hints indicating how `args` should be parsed: * `opts.alias`: an object representing the set of aliases for a key: `{alias: {foo: ['f']}}`. - * `opts.array`: indicate that keys should be parsed as an array: `{array: ['foo', 'bar']}`. + * `opts.array`: indicate that keys should be parsed as an array: `{array: ['foo', 'bar']}`.
+ Indicate that keys should be parsed as an array and coerced to booleans / numbers:
+ `{array: [{ key: 'foo', boolean: true }, {key: 'bar', number: true}]}`. * `opts.boolean`: arguments should be parsed as booleans: `{boolean: ['x', 'y']}`. - * `opts.config`: indicate a key that represents a path to a configuration file (this file will be loaded and parsed). * `opts.coerce`: provide a custom synchronous function that returns a coerced value from the argument provided - (or throws an error), e.g. `{coerce: {foo: function (arg) {return modifiedArg}}}`. + (or throws an error). For arrays the function is called only once for the entire array:
+ `{coerce: {foo: function (arg) {return modifiedArg}}}`. + * `opts.config`: indicate a key that represents a path to a configuration file (this file will be loaded and parsed). + * `opts.configObjects`: configuration objects to parse, their properties will be set as arguments:
+ `{configObjects: [{'x': 5, 'y': 33}, {'z': 44}]}`. + * `opts.configuration`: provide configuration options to the yargs-parser (see: [configuration](#configuration)). * `opts.count`: indicate a key that should be used as a counter, e.g., `-vvv` = `{v: 3}`. * `opts.default`: provide default values for keys: `{default: {x: 33, y: 'hello world!'}}`. * `opts.envPrefix`: environment variables (`process.env`) with the prefix provided should be parsed. * `opts.narg`: specify that a key requires `n` arguments: `{narg: {x: 2}}`. * `opts.normalize`: `path.normalize()` will be applied to values set to this key. - * `opts.string`: keys should be treated as strings (even if they resemble a number `-x 33`). - * `opts.configuration`: provide configuration options to the yargs-parser (see: [configuration](#configuration)). * `opts.number`: keys should be treated as numbers. - * `opts['--']`: arguments after the end-of-options flag `--` will be set to the `argv.['--']` array instead of being set to the `argv._` array. + * `opts.string`: keys should be treated as strings (even if they resemble a number `-x 33`). **returns:** @@ -298,6 +301,113 @@ { _: [ 'a' ], '--': [ 'x', 'y' ], b: true } ``` +### set placeholder key + +* default: `false`. +* key: `set-placeholder-key`. + +Should a placeholder be added for keys not set via the corresponding CLI argument? + +_If disabled:_ + +```sh +node example.js -a 1 -c 2 +{ _: [], a: 1, c: 2 } +``` + +_If enabled:_ + +```sh +node example.js -a 1 -c 2 +{ _: [], a: 1, b: undefined, c: 2 } +``` + +### halt at non-option + +* default: `false`. +* key: `halt-at-non-option`. + +Should parsing stop at the first positional argument? This is similar to how e.g. `ssh` parses its command line. + +_If disabled:_ + +```sh +node example.js -a run b -x y +{ _: [ 'b' ], a: 'run', x: 'y' } +``` + +_If enabled:_ + +```sh +node example.js -a run b -x y +{ _: [ 'b', '-x', 'y' ], a: 'run' } +``` + +### strip aliased + +* default: `false` +* key: `strip-aliased` + +Should aliases be removed before returning results? + +_If disabled:_ + +```sh +node example.js --test-field 1 +{ _: [], 'test-field': 1, testField: 1, 'test-alias': 1, testAlias: 1 } +``` + +_If enabled:_ + +```sh +node example.js --test-field 1 +{ _: [], 'test-field': 1, testField: 1 } +``` + +### strip dashed + +* default: `false` +* key: `strip-dashed` + +Should dashed keys be removed before returning results? This option has no effect if +`camel-case-expansion` is disabled. + +_If disabled:_ + +```sh +node example.js --test-field 1 +{ _: [], 'test-field': 1, testField: 1 } +``` + +_If enabled:_ + +```sh +node example.js --test-field 1 +{ _: [], testField: 1 } +``` + +### unknown options as args + +* default: `false` +* key: `unknown-options-as-args` + +Should unknown options be treated like regular arguments? An unknown option is one that is not +configured in `opts`. + +_If disabled_ + +```sh +node example.js --unknown-option --known-option 2 --string-option --unknown-option2 +{ _: [], unknownOption: true, knownOption: 2, stringOption: '', unknownOption2: true } +``` + +_If enabled_ + +```sh +node example.js --unknown-option --known-option 2 --string-option --unknown-option2 +{ _: ['--unknown-option'], knownOption: 2, stringOption: '--unknown-option2' } +``` + ## Special Thanks The yargs project evolves from optimist and minimist. It owes its diff -Nru nodejs-mozilla-12.18.1/deps/npm/package.json nodejs-mozilla-12.22.12/deps/npm/package.json --- nodejs-mozilla-12.18.1/deps/npm/package.json 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/package.json 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ { - "version": "6.14.5", + "version": "6.14.16", "name": "npm", "description": "a package manager for JavaScript", "keywords": [ @@ -39,7 +39,7 @@ "ansistyles": "~0.1.3", "aproba": "^2.0.0", "archy": "~1.0.0", - "bin-links": "^1.1.7", + "bin-links": "^1.1.8", "bluebird": "^3.5.5", "byte-size": "^5.0.1", "cacache": "^12.0.3", @@ -59,28 +59,28 @@ "find-npm-prefix": "^1.0.2", "fs-vacuum": "~1.2.10", "fs-write-stream-atomic": "~1.0.10", - "gentle-fs": "^2.3.0", + "gentle-fs": "^2.3.1", "glob": "^7.1.6", "graceful-fs": "^4.2.4", "has-unicode": "~2.0.1", - "hosted-git-info": "^2.8.8", + "hosted-git-info": "^2.8.9", "iferr": "^1.0.2", "infer-owner": "^1.0.4", "inflight": "~1.0.6", "inherits": "^2.0.4", - "ini": "^1.3.5", + "ini": "^1.3.8", "init-package-json": "^1.10.3", "is-cidr": "^3.0.0", "json-parse-better-errors": "^1.0.2", "lazy-property": "~1.0.0", - "libcipm": "^4.0.7", + "libcipm": "^4.0.8", "libnpm": "^3.0.1", "libnpmaccess": "^3.0.2", "libnpmhook": "^5.0.3", "libnpmorg": "^1.0.1", "libnpmsearch": "^2.0.2", "libnpmteam": "^1.0.2", - "libnpx": "^10.2.2", + "libnpx": "^10.2.4", "lock-verify": "^2.1.0", "lockfile": "^1.0.4", "lodash._baseuniq": "~4.6.0", @@ -89,26 +89,26 @@ "lodash.uniq": "~4.5.0", "lodash.without": "~4.4.0", "lru-cache": "^5.1.1", - "meant": "~1.0.1", + "meant": "^1.0.2", "mississippi": "^3.0.0", "mkdirp": "^0.5.5", "move-concurrently": "^1.0.1", "node-gyp": "^5.1.0", "nopt": "^4.0.3", "normalize-package-data": "^2.5.0", - "npm-audit-report": "^1.3.2", + "npm-audit-report": "^1.3.3", "npm-cache-filename": "~1.0.2", "npm-install-checks": "^3.0.2", - "npm-lifecycle": "^3.1.4", + "npm-lifecycle": "^3.1.5", "npm-package-arg": "^6.1.1", "npm-packlist": "^1.4.8", "npm-pick-manifest": "^3.0.2", "npm-profile": "^4.0.4", - "npm-registry-fetch": "^4.0.4", - "npm-user-validate": "~1.0.0", + "npm-registry-fetch": "^4.0.7", + "npm-user-validate": "^1.0.1", "npmlog": "~4.1.2", "once": "~1.4.0", - "opener": "^1.5.1", + "opener": "^1.5.2", "osenv": "^0.1.5", "pacote": "^9.5.12", "path-is-inside": "~1.0.2", @@ -132,9 +132,9 @@ "slide": "~1.1.6", "sorted-object": "~2.0.1", "sorted-union-stream": "~2.1.3", - "ssri": "^6.0.1", + "ssri": "^6.0.2", "stringify-package": "^1.0.1", - "tar": "^4.4.13", + "tar": "^4.4.19", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "uid-number": "0.0.6", @@ -275,12 +275,12 @@ "write-file-atomic" ], "devDependencies": { + "bl": "^3.0.1", "deep-equal": "^1.0.1", "get-stream": "^4.1.0", "licensee": "^7.0.3", - "marked": "^0.6.3", - "marked-man": "^0.6.0", - "npm-registry-couchapp": "^2.7.4", + "marked": "^0.7.0", + "marked-man": "^0.7.0", "npm-registry-mock": "^1.3.1", "require-inject": "^1.4.4", "sprintf-js": "^1.1.2", @@ -295,6 +295,7 @@ "preversion": "bash scripts/update-authors.sh && git add AUTHORS && git commit -m \"update AUTHORS\" || true", "licenses": "licensee --production --errors-only", "tap": "tap -J --timeout 300 --no-esm", + "tap:serial": "tap -j1 --timeout 300 --no-esm", "tap-cover": "tap -J --nyc-arg=--cache --coverage --timeout 600 --no-esm", "lint": "standard", "pretest": "npm run lint", diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/common-tap.js nodejs-mozilla-12.22.12/deps/npm/test/common-tap.js --- nodejs-mozilla-12.18.1/deps/npm/test/common-tap.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/common-tap.js 2022-04-05 07:17:00.000000000 +0000 @@ -283,3 +283,8 @@ } return self } + +var reEscape = /[\\[\](){}*?+.^$|]/g +exports.escapeForRe = function (string) { + return string.replace(reEscape, '\\$&') +} diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/fixtures/config/userconfig-with-gc nodejs-mozilla-12.22.12/deps/npm/test/fixtures/config/userconfig-with-gc --- nodejs-mozilla-12.18.1/deps/npm/test/fixtures/config/userconfig-with-gc 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/fixtures/config/userconfig-with-gc 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -globalconfig = /Users/ruyadorno/Documents/workspace/cli/test/fixtures/config/globalconfig -email = i@izs.me -env-thing = ${random_env_var} -init.author.name = Isaac Z. Schlueter -init.author.email = i@izs.me -init.author.url = http://blog.izs.me/ -init.version = 1.2.3 -npm:publishtest = true -_npmjs.org:couch = https://admin:password@localhost:5984/registry -npm-www:nocache = 1 -nodedir = /Users/isaacs/dev/js/node-v0.8 -sign-git-tag = true -message = v%s -strict-ssl = false -tmp = ~/.tmp -_auth = dXNlcm5hbWU6cGFzc3dvcmQ= - -[_token] -AuthSession = yabba-dabba-doodle -version = 1 -expires = 1345001053415 -path = / -httponly = true diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/fixtures/third-party.md nodejs-mozilla-12.22.12/deps/npm/test/fixtures/third-party.md --- nodejs-mozilla-12.18.1/deps/npm/test/fixtures/third-party.md 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/fixtures/third-party.md 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ including code adapted from ES 5.1 section 15.12.3, abstract operation `JO`, used under the following license: -Copyright (c) Ecma International 2010 +Copyright (c) Ecma International 2010 DISCLAIMER This document may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/network/registry.js nodejs-mozilla-12.22.12/deps/npm/test/network/registry.js --- nodejs-mozilla-12.18.1/deps/npm/test/network/registry.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/network/registry.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -// Run all the tests in the `npm-registry-couchapp` suite -// This verifies that the server-side stuff still works. - -var common = require('../common-tap') -var t = require('tap') - -var npmExec = require.resolve('../../bin/npm-cli.js') -var path = require('path') -var ca = path.resolve(__dirname, '../../node_modules/npm-registry-couchapp') - -var which = require('which') - -var v = process.versions.node.split('.').map(function (n) { return parseInt(n, 10) }) -if (v[0] === 0 && v[1] < 10) { - console.error( - 'WARNING: need a recent Node for npm-registry-couchapp tests to run, have', - process.versions.node - ) -} else { - try { - which.sync('couchdb') - t.test(runTests) - } catch (er) { - console.error('WARNING: need couch to run test: ' + er.message) - } -} - -function runTests (t) { - var env = Object.assign({ TAP: 1 }, process.env) - env.npm = npmExec - // TODO: fix tap and / or nyc to handle nested invocations properly - env.COVERALLS_REPO_TOKEN = '' - - var opts = { - cwd: ca, - stdio: 'inherit' - } - common.npm(['install'], opts, function (err, code) { - if (err) { throw err } - if (code) { - t.fail('install failed with: ' + code) - return t.end() - } else { - opts = { - cwd: ca, - env: env, - stdio: 'inherit' - } - common.npm(['test', '--', '-Rtap', '--no-coverage'], opts, function (err, code) { - if (err) { throw err } - if (code) { - t.fail('test failed with: ' + code) - return t.end() - } - opts = { - cwd: ca, - env: env, - stdio: 'inherit' - } - common.npm(['prune', '--production'], opts, function (err, code) { - t.ifError(err) - t.equal(code, 0) - return t.end() - }) - }) - } - }) -} diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/doctor-ping-registry-404.js nodejs-mozilla-12.22.12/deps/npm/test/tap/doctor-ping-registry-404.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/doctor-ping-registry-404.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/doctor-ping-registry-404.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,108 @@ +'use strict' +/* eslint-disable camelcase */ +const common = require('../common-tap.js') +const http = require('http') +const mr = require('npm-registry-mock') +const npm = require('../../lib/npm.js') +const path = require('path') +const Tacks = require('tacks') +const t = require('tap') +const which = require('which') + +const Dir = Tacks.Dir +const File = Tacks.File + +const ROOT = common.pkg +const CACHE = common.cache +const TMP = path.join(ROOT, 'tmp') +const PREFIX = path.join(ROOT, 'global-prefix') +const PKG = path.join(ROOT, 'pkg') + +let server, nodeServer +let node_url + +t.teardown(() => { + if (server) { + server.close() + } + if (nodeServer) { + nodeServer.close() + } +}) + +t.test('setup', (t) => { + const port = common.port + 2 + nodeServer = http.createServer(function (q, s) { + s.end(JSON.stringify([{ lts: true, version: '0.0.0' }])) + }) + nodeServer.listen(port, () => { + node_url = 'http://localhost:' + port + mr({ port: common.port }, (err, s) => { + t.ifError(err, 'registry mocked successfully') + server = s + server.get('/-/ping?write=true').reply(404) + server.get('/npm').reply( + 200, + JSON.stringify({ + name: 'npm', + 'dist-tags': { latest: '0.0.0' }, + versions: { + '0.0.0': { + name: 'npm', + version: '0.0.0', + _shrinkwrap: null, + _hasShrinkwrap: false, + dist: { + shasum: 'deadbeef', + tarball: 'https://reg.eh/npm-0.0.0.tgz' + } + } + } + }) + ) + const fixture = new Tacks( + Dir({ + [path.basename(PKG)]: Dir({ + 'package.json': File({ name: 'npm', version: '0.0.0' }) + }), + [path.basename(PREFIX)]: Dir({}) + }) + ) + fixture.create(ROOT) + npm.load( + { + registry: common.registry, + loglevel: 'silent', + cache: CACHE, + tmp: TMP, + prefix: PREFIX + }, + (err) => { + t.ifError(err, 'npm loaded successfully') + t.pass('all set up') + t.done() + } + ) + }) + }) +}) + +t.test('npm doctor ping returns 404 (or any other error)', function (t) { + npm.commands.doctor({ 'node-url': node_url }, true, function (e, list) { + t.ifError(e, 'npm loaded successfully') + t.same(list.length, 9, 'list should have 9 prop') + t.same(list[0][1], 'failed', 'npm ping') + t.same(list[1][1], 'v' + npm.version, 'npm -v') + t.same(list[2][1], process.version, 'node -v') + t.same(list[3][1], common.registry + '/', 'npm config get registry') + t.same(list[5][1], 'ok', 'Perms check on cached files') + t.same(list[6][1], 'ok', 'Perms check on global node_modules') + t.same(list[7][1], 'ok', 'Perms check on local node_modules') + t.match(list[8][1], /^verified \d+ tarballs?$/, 'Cache verified') + which('git', function (e, resolvedPath) { + t.ifError(e, 'git command is installed') + t.same(list[4][1], resolvedPath, 'which git') + t.done() + }) + }) +}) diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/git-npmignore.js nodejs-mozilla-12.22.12/deps/npm/test/tap/git-npmignore.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/git-npmignore.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/git-npmignore.js 2022-04-05 07:17:00.000000000 +0000 @@ -7,6 +7,7 @@ var test = require('tap').test var which = require('which') +var GITHUB_ACTIONS = process.env.GITHUB_ACTIONS var common = require('../common-tap.js') var escapeArg = require('../../lib/utils/escape-arg.js') var Tacks = require('tacks') @@ -151,8 +152,9 @@ if (er) return cb(er) var git = escapeArg(gitPath) + var extraOpts = GITHUB_ACTIONS ? ' --initial-branch=main' : '' - exec(git + ' init', {cwd: dep}, init) + exec(git + ' init' + extraOpts, {cwd: dep}, init) function init (er, _, stderr) { if (er) return cb(er) @@ -186,7 +188,7 @@ if (er) return cb(er) if (stderr) return cb(new Error('git add . error: ' + stderr)) - exec(git + ' commit -m boot', {cwd: dep}, commit) + exec(git + ' commit -m boot --no-gpg-sign', {cwd: dep}, commit) } function commit (er, _, stderr) { diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/install-lifecycle.js nodejs-mozilla-12.22.12/deps/npm/test/tap/install-lifecycle.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/install-lifecycle.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/install-lifecycle.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,35 @@ +var fs = require('graceful-fs') +var path = require('path') +var test = require('tap').test +var common = require('../common-tap.js') +var pkg = common.pkg + +test('npm install execution order', function (t) { + const packageJson = { + name: 'life-test', + version: '0.0.1', + description: 'Test for npm install execution order', + scripts: { + install: 'true', + preinstall: 'true', + preshrinkwrap: 'true', + postinstall: 'true', + postshrinkwrap: 'true', + shrinkwrap: 'true' + } + } + fs.writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(packageJson), 'utf8') + common.npm(['install', '--loglevel=error'], { cwd: pkg }, function (err, code, stdout, stderr) { + if (err) throw err + + t.comment(stdout) + t.comment(stderr) + + const steps = ['preinstall', 'install', 'postinstall', 'preshrinkwrap', 'shrinkwrap', 'postshrinkwrap'] + const expectedLines = steps.map(function (step) { + return '> ' + packageJson.name + '@' + packageJson.version + ' ' + step + }) + t.match(stdout, new RegExp(expectedLines.map(common.escapeForRe).join('(.|\n)*'))) + t.end() + }) +}) diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/legacy-platform-all.js nodejs-mozilla-12.22.12/deps/npm/test/tap/legacy-platform-all.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/legacy-platform-all.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/legacy-platform-all.js 2022-04-05 07:17:00.000000000 +0000 @@ -36,6 +36,9 @@ 'arm64', 'mips', 'ia32', + 'ppc64', + 'ppc64el', + 's390x', 'x64', 'sparc' ] diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/lockfile-empty-dep-value.js nodejs-mozilla-12.22.12/deps/npm/test/tap/lockfile-empty-dep-value.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/lockfile-empty-dep-value.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/lockfile-empty-dep-value.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,68 @@ +'use strict' + +const common = require('../common-tap.js') +const path = require('path') +const test = require('tap').test + +const Tacks = require('tacks') +const File = Tacks.File +const Dir = Tacks.Dir + +const basedir = common.pkg +const testdir = path.join(basedir, 'testdir') + +const fixture = new Tacks(Dir({ + cache: Dir(), + global: Dir(), + tmp: Dir(), + testdir: Dir({ + 'package-lock.json': File({ + name: 'http-locks', + version: '1.0.0', + lockfileVersion: 1, + requires: true, + dependencies: { + minimist: {} + } + }), + 'package.json': File({ + name: 'http-locks', + version: '1.0.0', + dependencies: { + minimist: common.registry + '/minimist/-/minimist-0.0.5.tgz' + } + }) + }) +})) + +function setup () { + cleanup() + fixture.create(basedir) +} + +function cleanup () { + fixture.remove(basedir) +} + +test('setup', function (t) { + setup() + t.done() +}) + +test('raises error to regenerate the lock file', function (t) { + common.npm(['install'], {cwd: testdir}, function (err, code, stdout, stderr) { + if (err) throw err + t.match( + stderr, + 'npm ERR! Something went wrong. Regenerate the package-lock.json with "npm install".', + 'returns message to regenerate package-lock' + ) + + t.done() + }) +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/ls.js nodejs-mozilla-12.22.12/deps/npm/test/tap/ls.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/ls.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/ls.js 2022-04-05 07:17:00.000000000 +0000 @@ -169,6 +169,40 @@ t.done() }) +test('ls parseable long', function (t) { + var fixture = new Tacks( + Dir({ + 'npm-test-ls': Dir({ + 'package.json': File({ + name: 'npm-test-ls', + version: '1.0.0', + dependencies: { + 'dep': 'file:../dep' + } + }) + }), + 'dep': Dir({ + 'package.json': File({ + name: 'dep', + version: '1.0.0' + }) + }) + }) + ) + withFixture(t, fixture, function (done) { + common.npm([ + 'ls', '--parseable', '--long' + ], { + cwd: pkgpath + }, function (err, code, stdout, stderr) { + t.ifErr(err, 'ls succeeded') + t.equal(0, code, 'exit 0 on ls') + t.notMatch(stdout, /undefined/, 'must not output undefined for non-symlinked items') + done() + }) + }) +}) + function withFixture (t, fixture, tester) { fixture.create(fixturepath) common.npm(['install'], { diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/publish-invalid-semver-tag.js nodejs-mozilla-12.22.12/deps/npm/test/tap/publish-invalid-semver-tag.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/publish-invalid-semver-tag.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/publish-invalid-semver-tag.js 2022-04-05 07:17:00.000000000 +0000 @@ -28,7 +28,7 @@ chownSync(CACHE_DIR, sudoUID, sudoGID) } - fs.writeFileSync(path.resolve(PKG_DIR, 'package.json'), DEFAULT_PKG) + fs.writeFileSync(path.resolve(PKG_DIR, 'package.json'), JSON.stringify(DEFAULT_PKG)) } test('setup', function (t) { diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/referer.js nodejs-mozilla-12.22.12/deps/npm/test/tap/referer.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/referer.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/referer.js 2022-04-05 07:17:00.000000000 +0000 @@ -21,3 +21,63 @@ }) }) }) + +test('should redact user secret from hook add command', function (t) { + http.createServer(function (q, s) { + t.equal(q.headers.referer, 'hook add ~zkat [REDACTED] [REDACTED]') + s.statusCode = 204 + s.end() + this.close() + }).listen(common.port, function () { + var reg = `http://localhost:${common.port}` + var args = [ 'hook', 'add', '~zkat', 'https://example.com', 'sekrit', '--registry', reg ] + common.npm(args, {}, function (er, code) { + if (er) { + throw er + } + // should not have ended nicely, since we returned an error + t.ok(code) + t.end() + }) + }) +}) + +test('should redact user secret from hook up command', function (t) { + http.createServer(function (q, s) { + t.equal(q.headers.referer, 'hook up ~zkat [REDACTED] [REDACTED]') + s.statusCode = 204 + s.end() + this.close() + }).listen(common.port, function () { + var reg = `http://localhost:${common.port}` + var args = [ 'hook', 'up', '~zkat', 'https://example.com', 'sekrit', '--registry', reg ] + common.npm(args, {}, function (er, code) { + if (er) { + throw er + } + // should not have ended nicely, since we returned an error + t.ok(code) + t.end() + }) + }) +}) + +test('should redact user secret from hook update command', function (t) { + http.createServer(function (q, s) { + t.equal(q.headers.referer, 'hook update ~zkat [REDACTED] [REDACTED]') + s.statusCode = 204 + s.end() + this.close() + }).listen(common.port, function () { + var reg = `http://localhost:${common.port}` + var args = [ 'hook', 'update', '~zkat', 'https://example.com', 'sekrit', '--registry', reg ] + common.npm(args, {}, function (er, code) { + if (er) { + throw er + } + // should not have ended nicely, since we returned an error + t.ok(code) + t.end() + }) + }) +}) diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/semver-doc.js nodejs-mozilla-12.22.12/deps/npm/test/tap/semver-doc.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/semver-doc.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/semver-doc.js 2022-04-05 07:17:00.000000000 +0000 @@ -5,8 +5,10 @@ var moddoc = path.join(__dirname, '../../node_modules/semver/README.md') var mydoc = path.join(__dirname, '../../docs/content/using-npm/semver.md') var fs = require('fs') - var mod = fs.readFileSync(moddoc, 'utf8').replace(/semver\(1\)/, 'semver(7)') + var mod = fs.readFileSync(moddoc, 'utf8') + mod = mod.substr(mod.match(/^## Install$/m).index) var my = fs.readFileSync(mydoc, 'utf8') + my = my.substr(my.match(/^## Install$/m).index) t.equal(my, mod) t.end() }) diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/shrinkwrap-empty-dep-value.js nodejs-mozilla-12.22.12/deps/npm/test/tap/shrinkwrap-empty-dep-value.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/shrinkwrap-empty-dep-value.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/shrinkwrap-empty-dep-value.js 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,66 @@ +'use strict' + +const common = require('../common-tap.js') +const path = require('path') +const test = require('tap').test + +const Tacks = require('tacks') +const File = Tacks.File +const Dir = Tacks.Dir + +const basedir = common.pkg +const testdir = path.join(basedir, 'testdir') + +const fixture = new Tacks(Dir({ + cache: Dir(), + global: Dir(), + tmp: Dir(), + testdir: Dir({ + 'npm-shrinkwrap.json': File({ + name: 'http-locks', + version: '0.0.0', + dependencies: { + minimist: {} + } + }), + 'package.json': File({ + name: 'http-locks', + version: '1.0.0', + dependencies: { + minimist: common.registry + '/minimist/-/minimist-0.0.5.tgz' + } + }) + }) +})) + +function setup () { + cleanup() + fixture.create(basedir) +} + +function cleanup () { + fixture.remove(basedir) +} + +test('setup', function (t) { + setup() + t.done() +}) + +test('raises error to regenerate the shrinkwrap', function (t) { + common.npm(['install'], {cwd: testdir}, function (err, code, stdout, stderr) { + if (err) throw err + t.match( + stderr, + 'npm ERR! If using a shrinkwrap, regenerate with "npm shrinkwrap".', + 'returns message to regenerate shrinkwrap' + ) + + t.done() + }) +}) + +test('cleanup', function (t) { + cleanup() + t.done() +}) diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/splat-with-only-prerelease-to-latest.js nodejs-mozilla-12.22.12/deps/npm/test/tap/splat-with-only-prerelease-to-latest.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/splat-with-only-prerelease-to-latest.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/splat-with-only-prerelease-to-latest.js 2022-04-05 07:17:00.000000000 +0000 @@ -20,7 +20,7 @@ version: '1.0.0-a', dist: { shasum: 'da39a3ee5e6b4b0d3255bfef95601890afd80709', - tarball: 'http://registry.npmjs.org/aproba/-/xyzzy-wibble-1.0.0-a.tgz' + tarball: 'https://registry.npmjs.org/aproba/-/xyzzy-wibble-1.0.0-a.tgz' } }, '1.1.0-a': { @@ -28,7 +28,7 @@ version: '1.1.0-a', dist: { shasum: 'da39a3ee5e6b4b0d3255bfef95601890afd80709', - tarball: 'http://registry.npmjs.org/aproba/-/xyzzy-wibble-1.1.0-a.tgz' + tarball: 'https://registry.npmjs.org/aproba/-/xyzzy-wibble-1.1.0-a.tgz' } }, '1.2.0-a': { @@ -36,7 +36,7 @@ version: '1.2.0-a', dist: { shasum: 'da39a3ee5e6b4b0d3255bfef95601890afd80709', - tarball: 'http://registry.npmjs.org/aproba/-/xyzzy-wibble-1.2.0-a.tgz' + tarball: 'https://registry.npmjs.org/aproba/-/xyzzy-wibble-1.2.0-a.tgz' } }, '1.3.0-a': { @@ -44,7 +44,7 @@ version: '1.3.0-a', dist: { shasum: 'da39a3ee5e6b4b0d3255bfef95601890afd80709', - tarball: 'http://registry.npmjs.org/aproba/-/xyzzy-wibble-1.3.0-a.tgz' + tarball: 'https://registry.npmjs.org/aproba/-/xyzzy-wibble-1.3.0-a.tgz' } } } diff -Nru nodejs-mozilla-12.18.1/deps/npm/test/tap/whoami.js nodejs-mozilla-12.22.12/deps/npm/test/tap/whoami.js --- nodejs-mozilla-12.18.1/deps/npm/test/tap/whoami.js 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/test/tap/whoami.js 2022-04-05 07:17:00.000000000 +0000 @@ -36,7 +36,7 @@ ) }) -test('npm whoami with bearer auth', { timeout: 6000 }, function (t) { +test('npm whoami with bearer auth', { timeout: 8000 }, function (t) { var s = '//localhost:' + common.port + '/:_authToken = wombat-developers-union\n' fs.writeFileSync(FIXTURE_PATH, s, 'ascii') diff -Nru nodejs-mozilla-12.18.1/deps/npm/.travis.yml nodejs-mozilla-12.22.12/deps/npm/.travis.yml --- nodejs-mozilla-12.18.1/deps/npm/.travis.yml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/npm/.travis.yml 2022-04-05 07:16:59.000000000 +0000 @@ -5,6 +5,7 @@ - windows node_js: + - 14 - 12 - 10 - 8 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "aix64-gcc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "aix64-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1182,6 +1182,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9024,6 +9029,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9601,6 +9610,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14336,6 +14346,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15310,19 +15328,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: aix64-gcc" -#define DATE "built on: Tue Apr 21 13:28:25 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:25 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "aix64-gcc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "aix64-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1182,6 +1182,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9024,6 +9029,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9601,6 +9610,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14336,6 +14346,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15310,19 +15328,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: aix64-gcc" -#define DATE "built on: Tue Apr 21 13:28:27 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:29 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "aix64-gcc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "aix64-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1181,6 +1181,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8927,6 +8932,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9504,6 +9513,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14159,6 +14169,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15136,19 +15154,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: aix64-gcc" -#define DATE "built on: Tue Apr 21 13:28:28 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:33 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -123,6 +123,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix64-gcc/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix64-gcc/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "aix-gcc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "aix-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1182,6 +1182,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9006,6 +9011,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9583,6 +9592,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14303,6 +14313,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15277,19 +15295,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: aix-gcc" -#define DATE "built on: Tue Apr 21 13:28:20 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:15 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "aix-gcc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "aix-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1182,6 +1182,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9006,6 +9011,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9583,6 +9592,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14303,6 +14313,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15277,19 +15295,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: aix-gcc" -#define DATE "built on: Tue Apr 21 13:28:22 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:19 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "aix-gcc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "aix-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1181,6 +1181,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8927,6 +8932,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9504,6 +9513,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14159,6 +14169,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15136,19 +15154,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: aix-gcc" -#define DATE "built on: Tue Apr 21 13:28:23 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:22 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -123,6 +123,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/aix-gcc/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/aix-gcc/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "BSD-x86" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "BSD-x86", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1172,6 +1172,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8990,6 +8995,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9567,6 +9576,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14292,6 +14302,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15263,19 +15281,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } @@ -15448,3 +15469,4 @@ =back =cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/bf/bf-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/bf/bf-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/bf/bf-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/bf/bf-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ movl 16(%esp),%ebp pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words movl (%ebx),%edi movl 4(%ebx),%esi xorl %eax,%eax @@ -19,7 +19,7 @@ xorl %ecx,%ecx xorl %ebx,%edi - # Round 0 + # Round 0 movl 4(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -39,7 +39,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 1 + # Round 1 movl 8(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -59,7 +59,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 2 + # Round 2 movl 12(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -79,7 +79,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 3 + # Round 3 movl 16(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -99,7 +99,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 4 + # Round 4 movl 20(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -119,7 +119,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 5 + # Round 5 movl 24(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -139,7 +139,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 6 + # Round 6 movl 28(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -159,7 +159,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 7 + # Round 7 movl 32(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -179,7 +179,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 8 + # Round 8 movl 36(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -199,7 +199,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 9 + # Round 9 movl 40(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -219,7 +219,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 10 + # Round 10 movl 44(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -239,7 +239,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 11 + # Round 11 movl 48(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -259,7 +259,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 12 + # Round 12 movl 52(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -279,7 +279,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 13 + # Round 13 movl 56(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -299,7 +299,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 14 + # Round 14 movl 60(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -319,7 +319,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 15 + # Round 15 movl 64(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -336,7 +336,7 @@ xorl %eax,%ebx movl 3144(%ebp,%edx,4),%edx addl %edx,%ebx - # Load parameter 0 (16) enc=1 + # Load parameter 0 (16) enc=1 movl 20(%esp),%eax xorl %ebx,%edi movl 68(%ebp),%edx @@ -360,7 +360,7 @@ movl 16(%esp),%ebp pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words movl (%ebx),%edi movl 4(%ebx),%esi xorl %eax,%eax @@ -368,7 +368,7 @@ xorl %ecx,%ecx xorl %ebx,%edi - # Round 16 + # Round 16 movl 64(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -388,7 +388,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 15 + # Round 15 movl 60(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -408,7 +408,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 14 + # Round 14 movl 56(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -428,7 +428,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 13 + # Round 13 movl 52(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -448,7 +448,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 12 + # Round 12 movl 48(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -468,7 +468,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 11 + # Round 11 movl 44(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -488,7 +488,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 10 + # Round 10 movl 40(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -508,7 +508,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 9 + # Round 9 movl 36(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -528,7 +528,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 8 + # Round 8 movl 32(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -548,7 +548,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 7 + # Round 7 movl 28(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -568,7 +568,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 6 + # Round 6 movl 24(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -588,7 +588,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 5 + # Round 5 movl 20(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -608,7 +608,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 4 + # Round 4 movl 16(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -628,7 +628,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 3 + # Round 3 movl 12(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -648,7 +648,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 2 + # Round 2 movl 8(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -668,7 +668,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 1 + # Round 1 movl 4(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -685,7 +685,7 @@ xorl %eax,%ebx movl 3144(%ebp,%edx,4),%edx addl %edx,%ebx - # Load parameter 0 (1) enc=0 + # Load parameter 0 (1) enc=0 movl 20(%esp),%eax xorl %ebx,%edi movl (%ebp),%edx @@ -708,7 +708,7 @@ pushl %esi pushl %edi movl 28(%esp),%ebp - # getting iv ptr from parameter 4 + # getting iv ptr from parameter 4 movl 36(%esp),%ebx movl (%ebx),%esi movl 4(%ebx),%edi @@ -719,9 +719,9 @@ movl %esp,%ebx movl 36(%esp),%esi movl 40(%esp),%edi - # getting encrypt flag from parameter 5 + # getting encrypt flag from parameter 5 movl 56(%esp),%ecx - # get and push parameter 3 + # get and push parameter 3 movl 48(%esp),%eax pushl %eax pushl %ebx diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/bn/bn-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/bn/bn-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/bn/bn-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/bn/bn-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -116,7 +116,7 @@ jz L006maw_finish .align 4,0x90 L007maw_loop: - # Round 0 + # Round 0 movl (%ebx),%eax mull %ebp addl %esi,%eax @@ -125,7 +125,7 @@ adcl $0,%edx movl %eax,(%edi) movl %edx,%esi - # Round 4 + # Round 4 movl 4(%ebx),%eax mull %ebp addl %esi,%eax @@ -134,7 +134,7 @@ adcl $0,%edx movl %eax,4(%edi) movl %edx,%esi - # Round 8 + # Round 8 movl 8(%ebx),%eax mull %ebp addl %esi,%eax @@ -143,7 +143,7 @@ adcl $0,%edx movl %eax,8(%edi) movl %edx,%esi - # Round 12 + # Round 12 movl 12(%ebx),%eax mull %ebp addl %esi,%eax @@ -152,7 +152,7 @@ adcl $0,%edx movl %eax,12(%edi) movl %edx,%esi - # Round 16 + # Round 16 movl 16(%ebx),%eax mull %ebp addl %esi,%eax @@ -161,7 +161,7 @@ adcl $0,%edx movl %eax,16(%edi) movl %edx,%esi - # Round 20 + # Round 20 movl 20(%ebx),%eax mull %ebp addl %esi,%eax @@ -170,7 +170,7 @@ adcl $0,%edx movl %eax,20(%edi) movl %edx,%esi - # Round 24 + # Round 24 movl 24(%ebx),%eax mull %ebp addl %esi,%eax @@ -179,7 +179,7 @@ adcl $0,%edx movl %eax,24(%edi) movl %edx,%esi - # Round 28 + # Round 28 movl 28(%ebx),%eax mull %ebp addl %esi,%eax @@ -199,7 +199,7 @@ jnz L008maw_finish2 jmp L009maw_end L008maw_finish2: - # Tail Round 0 + # Tail Round 0 movl (%ebx),%eax mull %ebp addl %esi,%eax @@ -210,7 +210,7 @@ movl %eax,(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 1 + # Tail Round 1 movl 4(%ebx),%eax mull %ebp addl %esi,%eax @@ -221,7 +221,7 @@ movl %eax,4(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 2 + # Tail Round 2 movl 8(%ebx),%eax mull %ebp addl %esi,%eax @@ -232,7 +232,7 @@ movl %eax,8(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 3 + # Tail Round 3 movl 12(%ebx),%eax mull %ebp addl %esi,%eax @@ -243,7 +243,7 @@ movl %eax,12(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 4 + # Tail Round 4 movl 16(%ebx),%eax mull %ebp addl %esi,%eax @@ -254,7 +254,7 @@ movl %eax,16(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 5 + # Tail Round 5 movl 20(%ebx),%eax mull %ebp addl %esi,%eax @@ -265,7 +265,7 @@ movl %eax,20(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 6 + # Tail Round 6 movl 24(%ebx),%eax mull %ebp addl %esi,%eax @@ -328,56 +328,56 @@ andl $4294967288,%ebp jz L013mw_finish L014mw_loop: - # Round 0 + # Round 0 movl (%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,(%edi) movl %edx,%esi - # Round 4 + # Round 4 movl 4(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,4(%edi) movl %edx,%esi - # Round 8 + # Round 8 movl 8(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,8(%edi) movl %edx,%esi - # Round 12 + # Round 12 movl 12(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,12(%edi) movl %edx,%esi - # Round 16 + # Round 16 movl 16(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,16(%edi) movl %edx,%esi - # Round 20 + # Round 20 movl 20(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,20(%edi) movl %edx,%esi - # Round 24 + # Round 24 movl 24(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,24(%edi) movl %edx,%esi - # Round 28 + # Round 28 movl 28(%ebx),%eax mull %ecx addl %esi,%eax @@ -396,7 +396,7 @@ jnz L015mw_finish2 jmp L016mw_end L015mw_finish2: - # Tail Round 0 + # Tail Round 0 movl (%ebx),%eax mull %ecx addl %esi,%eax @@ -405,7 +405,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 1 + # Tail Round 1 movl 4(%ebx),%eax mull %ecx addl %esi,%eax @@ -414,7 +414,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 2 + # Tail Round 2 movl 8(%ebx),%eax mull %ecx addl %esi,%eax @@ -423,7 +423,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 3 + # Tail Round 3 movl 12(%ebx),%eax mull %ecx addl %esi,%eax @@ -432,7 +432,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 4 + # Tail Round 4 movl 16(%ebx),%eax mull %ecx addl %esi,%eax @@ -441,7 +441,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 5 + # Tail Round 5 movl 20(%ebx),%eax mull %ecx addl %esi,%eax @@ -450,7 +450,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 6 + # Tail Round 6 movl 24(%ebx),%eax mull %ecx addl %esi,%eax @@ -503,42 +503,42 @@ andl $4294967288,%ebx jz L020sw_finish L021sw_loop: - # Round 0 + # Round 0 movl (%edi),%eax mull %eax movl %eax,(%esi) movl %edx,4(%esi) - # Round 4 + # Round 4 movl 4(%edi),%eax mull %eax movl %eax,8(%esi) movl %edx,12(%esi) - # Round 8 + # Round 8 movl 8(%edi),%eax mull %eax movl %eax,16(%esi) movl %edx,20(%esi) - # Round 12 + # Round 12 movl 12(%edi),%eax mull %eax movl %eax,24(%esi) movl %edx,28(%esi) - # Round 16 + # Round 16 movl 16(%edi),%eax mull %eax movl %eax,32(%esi) movl %edx,36(%esi) - # Round 20 + # Round 20 movl 20(%edi),%eax mull %eax movl %eax,40(%esi) movl %edx,44(%esi) - # Round 24 + # Round 24 movl 24(%edi),%eax mull %eax movl %eax,48(%esi) movl %edx,52(%esi) - # Round 28 + # Round 28 movl 28(%edi),%eax mull %eax movl %eax,56(%esi) @@ -552,49 +552,49 @@ movl 28(%esp),%ebx andl $7,%ebx jz L022sw_end - # Tail Round 0 + # Tail Round 0 movl (%edi),%eax mull %eax movl %eax,(%esi) decl %ebx movl %edx,4(%esi) jz L022sw_end - # Tail Round 1 + # Tail Round 1 movl 4(%edi),%eax mull %eax movl %eax,8(%esi) decl %ebx movl %edx,12(%esi) jz L022sw_end - # Tail Round 2 + # Tail Round 2 movl 8(%edi),%eax mull %eax movl %eax,16(%esi) decl %ebx movl %edx,20(%esi) jz L022sw_end - # Tail Round 3 + # Tail Round 3 movl 12(%edi),%eax mull %eax movl %eax,24(%esi) decl %ebx movl %edx,28(%esi) jz L022sw_end - # Tail Round 4 + # Tail Round 4 movl 16(%edi),%eax mull %eax movl %eax,32(%esi) decl %ebx movl %edx,36(%esi) jz L022sw_end - # Tail Round 5 + # Tail Round 5 movl 20(%edi),%eax mull %eax movl %eax,40(%esi) decl %ebx movl %edx,44(%esi) jz L022sw_end - # Tail Round 6 + # Tail Round 6 movl 24(%edi),%eax mull %eax movl %eax,48(%esi) @@ -633,7 +633,7 @@ andl $4294967288,%ebp jz L023aw_finish L024aw_loop: - # Round 0 + # Round 0 movl (%esi),%ecx movl (%edi),%edx addl %eax,%ecx @@ -642,7 +642,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,(%ebx) - # Round 1 + # Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx addl %eax,%ecx @@ -651,7 +651,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,4(%ebx) - # Round 2 + # Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx addl %eax,%ecx @@ -660,7 +660,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,8(%ebx) - # Round 3 + # Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx addl %eax,%ecx @@ -669,7 +669,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,12(%ebx) - # Round 4 + # Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx addl %eax,%ecx @@ -678,7 +678,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,16(%ebx) - # Round 5 + # Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx addl %eax,%ecx @@ -687,7 +687,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,20(%ebx) - # Round 6 + # Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx addl %eax,%ecx @@ -696,7 +696,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,24(%ebx) - # Round 7 + # Round 7 movl 28(%esi),%ecx movl 28(%edi),%edx addl %eax,%ecx @@ -715,7 +715,7 @@ movl 32(%esp),%ebp andl $7,%ebp jz L025aw_end - # Tail Round 0 + # Tail Round 0 movl (%esi),%ecx movl (%edi),%edx addl %eax,%ecx @@ -726,7 +726,7 @@ decl %ebp movl %ecx,(%ebx) jz L025aw_end - # Tail Round 1 + # Tail Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx addl %eax,%ecx @@ -737,7 +737,7 @@ decl %ebp movl %ecx,4(%ebx) jz L025aw_end - # Tail Round 2 + # Tail Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx addl %eax,%ecx @@ -748,7 +748,7 @@ decl %ebp movl %ecx,8(%ebx) jz L025aw_end - # Tail Round 3 + # Tail Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx addl %eax,%ecx @@ -759,7 +759,7 @@ decl %ebp movl %ecx,12(%ebx) jz L025aw_end - # Tail Round 4 + # Tail Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx addl %eax,%ecx @@ -770,7 +770,7 @@ decl %ebp movl %ecx,16(%ebx) jz L025aw_end - # Tail Round 5 + # Tail Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx addl %eax,%ecx @@ -781,7 +781,7 @@ decl %ebp movl %ecx,20(%ebx) jz L025aw_end - # Tail Round 6 + # Tail Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx addl %eax,%ecx @@ -814,7 +814,7 @@ andl $4294967288,%ebp jz L026aw_finish L027aw_loop: - # Round 0 + # Round 0 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -823,7 +823,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,(%ebx) - # Round 1 + # Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -832,7 +832,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,4(%ebx) - # Round 2 + # Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -841,7 +841,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,8(%ebx) - # Round 3 + # Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -850,7 +850,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,12(%ebx) - # Round 4 + # Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -859,7 +859,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,16(%ebx) - # Round 5 + # Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -868,7 +868,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,20(%ebx) - # Round 6 + # Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -877,7 +877,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,24(%ebx) - # Round 7 + # Round 7 movl 28(%esi),%ecx movl 28(%edi),%edx subl %eax,%ecx @@ -896,7 +896,7 @@ movl 32(%esp),%ebp andl $7,%ebp jz L028aw_end - # Tail Round 0 + # Tail Round 0 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -907,7 +907,7 @@ decl %ebp movl %ecx,(%ebx) jz L028aw_end - # Tail Round 1 + # Tail Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -918,7 +918,7 @@ decl %ebp movl %ecx,4(%ebx) jz L028aw_end - # Tail Round 2 + # Tail Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -929,7 +929,7 @@ decl %ebp movl %ecx,8(%ebx) jz L028aw_end - # Tail Round 3 + # Tail Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -940,7 +940,7 @@ decl %ebp movl %ecx,12(%ebx) jz L028aw_end - # Tail Round 4 + # Tail Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -951,7 +951,7 @@ decl %ebp movl %ecx,16(%ebx) jz L028aw_end - # Tail Round 5 + # Tail Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -962,7 +962,7 @@ decl %ebp movl %ecx,20(%ebx) jz L028aw_end - # Tail Round 6 + # Tail Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -995,7 +995,7 @@ andl $4294967288,%ebp jz L029aw_finish L030aw_loop: - # Round 0 + # Round 0 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1004,7 +1004,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,(%ebx) - # Round 1 + # Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -1013,7 +1013,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,4(%ebx) - # Round 2 + # Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -1022,7 +1022,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,8(%ebx) - # Round 3 + # Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -1031,7 +1031,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,12(%ebx) - # Round 4 + # Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -1040,7 +1040,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,16(%ebx) - # Round 5 + # Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -1049,7 +1049,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,20(%ebx) - # Round 6 + # Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -1058,7 +1058,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,24(%ebx) - # Round 7 + # Round 7 movl 28(%esi),%ecx movl 28(%edi),%edx subl %eax,%ecx @@ -1077,7 +1077,7 @@ movl 32(%esp),%ebp andl $7,%ebp jz L031aw_end - # Tail Round 0 + # Tail Round 0 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1091,7 +1091,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 1 + # Tail Round 1 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1105,7 +1105,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 2 + # Tail Round 2 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1119,7 +1119,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 3 + # Tail Round 3 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1133,7 +1133,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 4 + # Tail Round 4 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1147,7 +1147,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 5 + # Tail Round 5 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1161,7 +1161,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 6 + # Tail Round 6 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1180,14 +1180,14 @@ cmpl $0,%ebp je L032pw_end jge L033pw_pos - # pw_neg + # pw_neg movl $0,%edx subl %ebp,%edx movl %edx,%ebp andl $4294967288,%ebp jz L034pw_neg_finish L035pw_neg_loop: - # dl<0 Round 0 + # dl<0 Round 0 movl $0,%ecx movl (%edi),%edx subl %eax,%ecx @@ -1196,7 +1196,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,(%ebx) - # dl<0 Round 1 + # dl<0 Round 1 movl $0,%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -1205,7 +1205,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,4(%ebx) - # dl<0 Round 2 + # dl<0 Round 2 movl $0,%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -1214,7 +1214,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,8(%ebx) - # dl<0 Round 3 + # dl<0 Round 3 movl $0,%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -1223,7 +1223,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,12(%ebx) - # dl<0 Round 4 + # dl<0 Round 4 movl $0,%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -1232,7 +1232,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,16(%ebx) - # dl<0 Round 5 + # dl<0 Round 5 movl $0,%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -1241,7 +1241,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,20(%ebx) - # dl<0 Round 6 + # dl<0 Round 6 movl $0,%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -1250,7 +1250,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,24(%ebx) - # dl<0 Round 7 + # dl<0 Round 7 movl $0,%ecx movl 28(%edi),%edx subl %eax,%ecx @@ -1270,7 +1270,7 @@ subl %edx,%ebp andl $7,%ebp jz L032pw_end - # dl<0 Tail Round 0 + # dl<0 Tail Round 0 movl $0,%ecx movl (%edi),%edx subl %eax,%ecx @@ -1281,7 +1281,7 @@ decl %ebp movl %ecx,(%ebx) jz L032pw_end - # dl<0 Tail Round 1 + # dl<0 Tail Round 1 movl $0,%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -1292,7 +1292,7 @@ decl %ebp movl %ecx,4(%ebx) jz L032pw_end - # dl<0 Tail Round 2 + # dl<0 Tail Round 2 movl $0,%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -1303,7 +1303,7 @@ decl %ebp movl %ecx,8(%ebx) jz L032pw_end - # dl<0 Tail Round 3 + # dl<0 Tail Round 3 movl $0,%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -1314,7 +1314,7 @@ decl %ebp movl %ecx,12(%ebx) jz L032pw_end - # dl<0 Tail Round 4 + # dl<0 Tail Round 4 movl $0,%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -1325,7 +1325,7 @@ decl %ebp movl %ecx,16(%ebx) jz L032pw_end - # dl<0 Tail Round 5 + # dl<0 Tail Round 5 movl $0,%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -1336,7 +1336,7 @@ decl %ebp movl %ecx,20(%ebx) jz L032pw_end - # dl<0 Tail Round 6 + # dl<0 Tail Round 6 movl $0,%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -1350,42 +1350,42 @@ andl $4294967288,%ebp jz L036pw_pos_finish L037pw_pos_loop: - # dl>0 Round 0 + # dl>0 Round 0 movl (%esi),%ecx subl %eax,%ecx movl %ecx,(%ebx) jnc L038pw_nc0 - # dl>0 Round 1 + # dl>0 Round 1 movl 4(%esi),%ecx subl %eax,%ecx movl %ecx,4(%ebx) jnc L039pw_nc1 - # dl>0 Round 2 + # dl>0 Round 2 movl 8(%esi),%ecx subl %eax,%ecx movl %ecx,8(%ebx) jnc L040pw_nc2 - # dl>0 Round 3 + # dl>0 Round 3 movl 12(%esi),%ecx subl %eax,%ecx movl %ecx,12(%ebx) jnc L041pw_nc3 - # dl>0 Round 4 + # dl>0 Round 4 movl 16(%esi),%ecx subl %eax,%ecx movl %ecx,16(%ebx) jnc L042pw_nc4 - # dl>0 Round 5 + # dl>0 Round 5 movl 20(%esi),%ecx subl %eax,%ecx movl %ecx,20(%ebx) jnc L043pw_nc5 - # dl>0 Round 6 + # dl>0 Round 6 movl 24(%esi),%ecx subl %eax,%ecx movl %ecx,24(%ebx) jnc L044pw_nc6 - # dl>0 Round 7 + # dl>0 Round 7 movl 28(%esi),%ecx subl %eax,%ecx movl %ecx,28(%ebx) @@ -1399,49 +1399,49 @@ movl 36(%esp),%ebp andl $7,%ebp jz L032pw_end - # dl>0 Tail Round 0 + # dl>0 Tail Round 0 movl (%esi),%ecx subl %eax,%ecx movl %ecx,(%ebx) jnc L046pw_tail_nc0 decl %ebp jz L032pw_end - # dl>0 Tail Round 1 + # dl>0 Tail Round 1 movl 4(%esi),%ecx subl %eax,%ecx movl %ecx,4(%ebx) jnc L047pw_tail_nc1 decl %ebp jz L032pw_end - # dl>0 Tail Round 2 + # dl>0 Tail Round 2 movl 8(%esi),%ecx subl %eax,%ecx movl %ecx,8(%ebx) jnc L048pw_tail_nc2 decl %ebp jz L032pw_end - # dl>0 Tail Round 3 + # dl>0 Tail Round 3 movl 12(%esi),%ecx subl %eax,%ecx movl %ecx,12(%ebx) jnc L049pw_tail_nc3 decl %ebp jz L032pw_end - # dl>0 Tail Round 4 + # dl>0 Tail Round 4 movl 16(%esi),%ecx subl %eax,%ecx movl %ecx,16(%ebx) jnc L050pw_tail_nc4 decl %ebp jz L032pw_end - # dl>0 Tail Round 5 + # dl>0 Tail Round 5 movl 20(%esi),%ecx subl %eax,%ecx movl %ecx,20(%ebx) jnc L051pw_tail_nc5 decl %ebp jz L032pw_end - # dl>0 Tail Round 6 + # dl>0 Tail Round 6 movl 24(%esi),%ecx subl %eax,%ecx movl %ecx,24(%ebx) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/bn/co-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/bn/co-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/bn/co-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/bn/co-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -14,9 +14,9 @@ movl (%esi),%eax xorl %ecx,%ecx movl (%edi),%edx - # ################## Calculate word 0 + # ################## Calculate word 0 xorl %ebp,%ebp - # mul a[0]*b[0] + # mul a[0]*b[0] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -25,17 +25,17 @@ adcl $0,%ebp movl %ebx,(%eax) movl 4(%esi),%eax - # saved r[0] - # ################## Calculate word 1 + # saved r[0] + # ################## Calculate word 1 xorl %ebx,%ebx - # mul a[1]*b[0] + # mul a[1]*b[0] mull %edx addl %eax,%ecx movl (%esi),%eax adcl %edx,%ebp movl 4(%edi),%edx adcl $0,%ebx - # mul a[0]*b[1] + # mul a[0]*b[1] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -44,24 +44,24 @@ adcl $0,%ebx movl %ecx,4(%eax) movl 8(%esi),%eax - # saved r[1] - # ################## Calculate word 2 + # saved r[1] + # ################## Calculate word 2 xorl %ecx,%ecx - # mul a[2]*b[0] + # mul a[2]*b[0] mull %edx addl %eax,%ebp movl 4(%esi),%eax adcl %edx,%ebx movl 4(%edi),%edx adcl $0,%ecx - # mul a[1]*b[1] + # mul a[1]*b[1] mull %edx addl %eax,%ebp movl (%esi),%eax adcl %edx,%ebx movl 8(%edi),%edx adcl $0,%ecx - # mul a[0]*b[2] + # mul a[0]*b[2] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -70,31 +70,31 @@ adcl $0,%ecx movl %ebp,8(%eax) movl 12(%esi),%eax - # saved r[2] - # ################## Calculate word 3 + # saved r[2] + # ################## Calculate word 3 xorl %ebp,%ebp - # mul a[3]*b[0] + # mul a[3]*b[0] mull %edx addl %eax,%ebx movl 8(%esi),%eax adcl %edx,%ecx movl 4(%edi),%edx adcl $0,%ebp - # mul a[2]*b[1] + # mul a[2]*b[1] mull %edx addl %eax,%ebx movl 4(%esi),%eax adcl %edx,%ecx movl 8(%edi),%edx adcl $0,%ebp - # mul a[1]*b[2] + # mul a[1]*b[2] mull %edx addl %eax,%ebx movl (%esi),%eax adcl %edx,%ecx movl 12(%edi),%edx adcl $0,%ebp - # mul a[0]*b[3] + # mul a[0]*b[3] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -103,38 +103,38 @@ adcl $0,%ebp movl %ebx,12(%eax) movl 16(%esi),%eax - # saved r[3] - # ################## Calculate word 4 + # saved r[3] + # ################## Calculate word 4 xorl %ebx,%ebx - # mul a[4]*b[0] + # mul a[4]*b[0] mull %edx addl %eax,%ecx movl 12(%esi),%eax adcl %edx,%ebp movl 4(%edi),%edx adcl $0,%ebx - # mul a[3]*b[1] + # mul a[3]*b[1] mull %edx addl %eax,%ecx movl 8(%esi),%eax adcl %edx,%ebp movl 8(%edi),%edx adcl $0,%ebx - # mul a[2]*b[2] + # mul a[2]*b[2] mull %edx addl %eax,%ecx movl 4(%esi),%eax adcl %edx,%ebp movl 12(%edi),%edx adcl $0,%ebx - # mul a[1]*b[3] + # mul a[1]*b[3] mull %edx addl %eax,%ecx movl (%esi),%eax adcl %edx,%ebp movl 16(%edi),%edx adcl $0,%ebx - # mul a[0]*b[4] + # mul a[0]*b[4] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -143,45 +143,45 @@ adcl $0,%ebx movl %ecx,16(%eax) movl 20(%esi),%eax - # saved r[4] - # ################## Calculate word 5 + # saved r[4] + # ################## Calculate word 5 xorl %ecx,%ecx - # mul a[5]*b[0] + # mul a[5]*b[0] mull %edx addl %eax,%ebp movl 16(%esi),%eax adcl %edx,%ebx movl 4(%edi),%edx adcl $0,%ecx - # mul a[4]*b[1] + # mul a[4]*b[1] mull %edx addl %eax,%ebp movl 12(%esi),%eax adcl %edx,%ebx movl 8(%edi),%edx adcl $0,%ecx - # mul a[3]*b[2] + # mul a[3]*b[2] mull %edx addl %eax,%ebp movl 8(%esi),%eax adcl %edx,%ebx movl 12(%edi),%edx adcl $0,%ecx - # mul a[2]*b[3] + # mul a[2]*b[3] mull %edx addl %eax,%ebp movl 4(%esi),%eax adcl %edx,%ebx movl 16(%edi),%edx adcl $0,%ecx - # mul a[1]*b[4] + # mul a[1]*b[4] mull %edx addl %eax,%ebp movl (%esi),%eax adcl %edx,%ebx movl 20(%edi),%edx adcl $0,%ecx - # mul a[0]*b[5] + # mul a[0]*b[5] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -190,52 +190,52 @@ adcl $0,%ecx movl %ebp,20(%eax) movl 24(%esi),%eax - # saved r[5] - # ################## Calculate word 6 + # saved r[5] + # ################## Calculate word 6 xorl %ebp,%ebp - # mul a[6]*b[0] + # mul a[6]*b[0] mull %edx addl %eax,%ebx movl 20(%esi),%eax adcl %edx,%ecx movl 4(%edi),%edx adcl $0,%ebp - # mul a[5]*b[1] + # mul a[5]*b[1] mull %edx addl %eax,%ebx movl 16(%esi),%eax adcl %edx,%ecx movl 8(%edi),%edx adcl $0,%ebp - # mul a[4]*b[2] + # mul a[4]*b[2] mull %edx addl %eax,%ebx movl 12(%esi),%eax adcl %edx,%ecx movl 12(%edi),%edx adcl $0,%ebp - # mul a[3]*b[3] + # mul a[3]*b[3] mull %edx addl %eax,%ebx movl 8(%esi),%eax adcl %edx,%ecx movl 16(%edi),%edx adcl $0,%ebp - # mul a[2]*b[4] + # mul a[2]*b[4] mull %edx addl %eax,%ebx movl 4(%esi),%eax adcl %edx,%ecx movl 20(%edi),%edx adcl $0,%ebp - # mul a[1]*b[5] + # mul a[1]*b[5] mull %edx addl %eax,%ebx movl (%esi),%eax adcl %edx,%ecx movl 24(%edi),%edx adcl $0,%ebp - # mul a[0]*b[6] + # mul a[0]*b[6] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -244,59 +244,59 @@ adcl $0,%ebp movl %ebx,24(%eax) movl 28(%esi),%eax - # saved r[6] - # ################## Calculate word 7 + # saved r[6] + # ################## Calculate word 7 xorl %ebx,%ebx - # mul a[7]*b[0] + # mul a[7]*b[0] mull %edx addl %eax,%ecx movl 24(%esi),%eax adcl %edx,%ebp movl 4(%edi),%edx adcl $0,%ebx - # mul a[6]*b[1] + # mul a[6]*b[1] mull %edx addl %eax,%ecx movl 20(%esi),%eax adcl %edx,%ebp movl 8(%edi),%edx adcl $0,%ebx - # mul a[5]*b[2] + # mul a[5]*b[2] mull %edx addl %eax,%ecx movl 16(%esi),%eax adcl %edx,%ebp movl 12(%edi),%edx adcl $0,%ebx - # mul a[4]*b[3] + # mul a[4]*b[3] mull %edx addl %eax,%ecx movl 12(%esi),%eax adcl %edx,%ebp movl 16(%edi),%edx adcl $0,%ebx - # mul a[3]*b[4] + # mul a[3]*b[4] mull %edx addl %eax,%ecx movl 8(%esi),%eax adcl %edx,%ebp movl 20(%edi),%edx adcl $0,%ebx - # mul a[2]*b[5] + # mul a[2]*b[5] mull %edx addl %eax,%ecx movl 4(%esi),%eax adcl %edx,%ebp movl 24(%edi),%edx adcl $0,%ebx - # mul a[1]*b[6] + # mul a[1]*b[6] mull %edx addl %eax,%ecx movl (%esi),%eax adcl %edx,%ebp movl 28(%edi),%edx adcl $0,%ebx - # mul a[0]*b[7] + # mul a[0]*b[7] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -305,52 +305,52 @@ adcl $0,%ebx movl %ecx,28(%eax) movl 28(%esi),%eax - # saved r[7] - # ################## Calculate word 8 + # saved r[7] + # ################## Calculate word 8 xorl %ecx,%ecx - # mul a[7]*b[1] + # mul a[7]*b[1] mull %edx addl %eax,%ebp movl 24(%esi),%eax adcl %edx,%ebx movl 8(%edi),%edx adcl $0,%ecx - # mul a[6]*b[2] + # mul a[6]*b[2] mull %edx addl %eax,%ebp movl 20(%esi),%eax adcl %edx,%ebx movl 12(%edi),%edx adcl $0,%ecx - # mul a[5]*b[3] + # mul a[5]*b[3] mull %edx addl %eax,%ebp movl 16(%esi),%eax adcl %edx,%ebx movl 16(%edi),%edx adcl $0,%ecx - # mul a[4]*b[4] + # mul a[4]*b[4] mull %edx addl %eax,%ebp movl 12(%esi),%eax adcl %edx,%ebx movl 20(%edi),%edx adcl $0,%ecx - # mul a[3]*b[5] + # mul a[3]*b[5] mull %edx addl %eax,%ebp movl 8(%esi),%eax adcl %edx,%ebx movl 24(%edi),%edx adcl $0,%ecx - # mul a[2]*b[6] + # mul a[2]*b[6] mull %edx addl %eax,%ebp movl 4(%esi),%eax adcl %edx,%ebx movl 28(%edi),%edx adcl $0,%ecx - # mul a[1]*b[7] + # mul a[1]*b[7] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -359,45 +359,45 @@ adcl $0,%ecx movl %ebp,32(%eax) movl 28(%esi),%eax - # saved r[8] - # ################## Calculate word 9 + # saved r[8] + # ################## Calculate word 9 xorl %ebp,%ebp - # mul a[7]*b[2] + # mul a[7]*b[2] mull %edx addl %eax,%ebx movl 24(%esi),%eax adcl %edx,%ecx movl 12(%edi),%edx adcl $0,%ebp - # mul a[6]*b[3] + # mul a[6]*b[3] mull %edx addl %eax,%ebx movl 20(%esi),%eax adcl %edx,%ecx movl 16(%edi),%edx adcl $0,%ebp - # mul a[5]*b[4] + # mul a[5]*b[4] mull %edx addl %eax,%ebx movl 16(%esi),%eax adcl %edx,%ecx movl 20(%edi),%edx adcl $0,%ebp - # mul a[4]*b[5] + # mul a[4]*b[5] mull %edx addl %eax,%ebx movl 12(%esi),%eax adcl %edx,%ecx movl 24(%edi),%edx adcl $0,%ebp - # mul a[3]*b[6] + # mul a[3]*b[6] mull %edx addl %eax,%ebx movl 8(%esi),%eax adcl %edx,%ecx movl 28(%edi),%edx adcl $0,%ebp - # mul a[2]*b[7] + # mul a[2]*b[7] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -406,38 +406,38 @@ adcl $0,%ebp movl %ebx,36(%eax) movl 28(%esi),%eax - # saved r[9] - # ################## Calculate word 10 + # saved r[9] + # ################## Calculate word 10 xorl %ebx,%ebx - # mul a[7]*b[3] + # mul a[7]*b[3] mull %edx addl %eax,%ecx movl 24(%esi),%eax adcl %edx,%ebp movl 16(%edi),%edx adcl $0,%ebx - # mul a[6]*b[4] + # mul a[6]*b[4] mull %edx addl %eax,%ecx movl 20(%esi),%eax adcl %edx,%ebp movl 20(%edi),%edx adcl $0,%ebx - # mul a[5]*b[5] + # mul a[5]*b[5] mull %edx addl %eax,%ecx movl 16(%esi),%eax adcl %edx,%ebp movl 24(%edi),%edx adcl $0,%ebx - # mul a[4]*b[6] + # mul a[4]*b[6] mull %edx addl %eax,%ecx movl 12(%esi),%eax adcl %edx,%ebp movl 28(%edi),%edx adcl $0,%ebx - # mul a[3]*b[7] + # mul a[3]*b[7] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -446,31 +446,31 @@ adcl $0,%ebx movl %ecx,40(%eax) movl 28(%esi),%eax - # saved r[10] - # ################## Calculate word 11 + # saved r[10] + # ################## Calculate word 11 xorl %ecx,%ecx - # mul a[7]*b[4] + # mul a[7]*b[4] mull %edx addl %eax,%ebp movl 24(%esi),%eax adcl %edx,%ebx movl 20(%edi),%edx adcl $0,%ecx - # mul a[6]*b[5] + # mul a[6]*b[5] mull %edx addl %eax,%ebp movl 20(%esi),%eax adcl %edx,%ebx movl 24(%edi),%edx adcl $0,%ecx - # mul a[5]*b[6] + # mul a[5]*b[6] mull %edx addl %eax,%ebp movl 16(%esi),%eax adcl %edx,%ebx movl 28(%edi),%edx adcl $0,%ecx - # mul a[4]*b[7] + # mul a[4]*b[7] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -479,24 +479,24 @@ adcl $0,%ecx movl %ebp,44(%eax) movl 28(%esi),%eax - # saved r[11] - # ################## Calculate word 12 + # saved r[11] + # ################## Calculate word 12 xorl %ebp,%ebp - # mul a[7]*b[5] + # mul a[7]*b[5] mull %edx addl %eax,%ebx movl 24(%esi),%eax adcl %edx,%ecx movl 24(%edi),%edx adcl $0,%ebp - # mul a[6]*b[6] + # mul a[6]*b[6] mull %edx addl %eax,%ebx movl 20(%esi),%eax adcl %edx,%ecx movl 28(%edi),%edx adcl $0,%ebp - # mul a[5]*b[7] + # mul a[5]*b[7] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -505,17 +505,17 @@ adcl $0,%ebp movl %ebx,48(%eax) movl 28(%esi),%eax - # saved r[12] - # ################## Calculate word 13 + # saved r[12] + # ################## Calculate word 13 xorl %ebx,%ebx - # mul a[7]*b[6] + # mul a[7]*b[6] mull %edx addl %eax,%ecx movl 24(%esi),%eax adcl %edx,%ebp movl 28(%edi),%edx adcl $0,%ebx - # mul a[6]*b[7] + # mul a[6]*b[7] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -524,18 +524,18 @@ adcl $0,%ebx movl %ecx,52(%eax) movl 28(%esi),%eax - # saved r[13] - # ################## Calculate word 14 + # saved r[13] + # ################## Calculate word 14 xorl %ecx,%ecx - # mul a[7]*b[7] + # mul a[7]*b[7] mull %edx addl %eax,%ebp movl 20(%esp),%eax adcl %edx,%ebx adcl $0,%ecx movl %ebp,56(%eax) - # saved r[14] - # save r[15] + # saved r[14] + # save r[15] movl %ebx,60(%eax) popl %ebx popl %ebp @@ -557,9 +557,9 @@ movl (%esi),%eax xorl %ecx,%ecx movl (%edi),%edx - # ################## Calculate word 0 + # ################## Calculate word 0 xorl %ebp,%ebp - # mul a[0]*b[0] + # mul a[0]*b[0] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -568,17 +568,17 @@ adcl $0,%ebp movl %ebx,(%eax) movl 4(%esi),%eax - # saved r[0] - # ################## Calculate word 1 + # saved r[0] + # ################## Calculate word 1 xorl %ebx,%ebx - # mul a[1]*b[0] + # mul a[1]*b[0] mull %edx addl %eax,%ecx movl (%esi),%eax adcl %edx,%ebp movl 4(%edi),%edx adcl $0,%ebx - # mul a[0]*b[1] + # mul a[0]*b[1] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -587,24 +587,24 @@ adcl $0,%ebx movl %ecx,4(%eax) movl 8(%esi),%eax - # saved r[1] - # ################## Calculate word 2 + # saved r[1] + # ################## Calculate word 2 xorl %ecx,%ecx - # mul a[2]*b[0] + # mul a[2]*b[0] mull %edx addl %eax,%ebp movl 4(%esi),%eax adcl %edx,%ebx movl 4(%edi),%edx adcl $0,%ecx - # mul a[1]*b[1] + # mul a[1]*b[1] mull %edx addl %eax,%ebp movl (%esi),%eax adcl %edx,%ebx movl 8(%edi),%edx adcl $0,%ecx - # mul a[0]*b[2] + # mul a[0]*b[2] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -613,31 +613,31 @@ adcl $0,%ecx movl %ebp,8(%eax) movl 12(%esi),%eax - # saved r[2] - # ################## Calculate word 3 + # saved r[2] + # ################## Calculate word 3 xorl %ebp,%ebp - # mul a[3]*b[0] + # mul a[3]*b[0] mull %edx addl %eax,%ebx movl 8(%esi),%eax adcl %edx,%ecx movl 4(%edi),%edx adcl $0,%ebp - # mul a[2]*b[1] + # mul a[2]*b[1] mull %edx addl %eax,%ebx movl 4(%esi),%eax adcl %edx,%ecx movl 8(%edi),%edx adcl $0,%ebp - # mul a[1]*b[2] + # mul a[1]*b[2] mull %edx addl %eax,%ebx movl (%esi),%eax adcl %edx,%ecx movl 12(%edi),%edx adcl $0,%ebp - # mul a[0]*b[3] + # mul a[0]*b[3] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -646,24 +646,24 @@ adcl $0,%ebp movl %ebx,12(%eax) movl 12(%esi),%eax - # saved r[3] - # ################## Calculate word 4 + # saved r[3] + # ################## Calculate word 4 xorl %ebx,%ebx - # mul a[3]*b[1] + # mul a[3]*b[1] mull %edx addl %eax,%ecx movl 8(%esi),%eax adcl %edx,%ebp movl 8(%edi),%edx adcl $0,%ebx - # mul a[2]*b[2] + # mul a[2]*b[2] mull %edx addl %eax,%ecx movl 4(%esi),%eax adcl %edx,%ebp movl 12(%edi),%edx adcl $0,%ebx - # mul a[1]*b[3] + # mul a[1]*b[3] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -672,17 +672,17 @@ adcl $0,%ebx movl %ecx,16(%eax) movl 12(%esi),%eax - # saved r[4] - # ################## Calculate word 5 + # saved r[4] + # ################## Calculate word 5 xorl %ecx,%ecx - # mul a[3]*b[2] + # mul a[3]*b[2] mull %edx addl %eax,%ebp movl 8(%esi),%eax adcl %edx,%ebx movl 12(%edi),%edx adcl $0,%ecx - # mul a[2]*b[3] + # mul a[2]*b[3] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -691,18 +691,18 @@ adcl $0,%ecx movl %ebp,20(%eax) movl 12(%esi),%eax - # saved r[5] - # ################## Calculate word 6 + # saved r[5] + # ################## Calculate word 6 xorl %ebp,%ebp - # mul a[3]*b[3] + # mul a[3]*b[3] mull %edx addl %eax,%ebx movl 20(%esp),%eax adcl %edx,%ecx adcl $0,%ebp movl %ebx,24(%eax) - # saved r[6] - # save r[7] + # saved r[6] + # save r[7] movl %ecx,28(%eax) popl %ebx popl %ebp @@ -723,9 +723,9 @@ xorl %ebx,%ebx xorl %ecx,%ecx movl (%esi),%eax - # ############### Calculate word 0 + # ############### Calculate word 0 xorl %ebp,%ebp - # sqr a[0]*a[0] + # sqr a[0]*a[0] mull %eax addl %eax,%ebx adcl %edx,%ecx @@ -733,10 +733,10 @@ adcl $0,%ebp movl %ebx,(%edi) movl 4(%esi),%eax - # saved r[0] - # ############### Calculate word 1 + # saved r[0] + # ############### Calculate word 1 xorl %ebx,%ebx - # sqr a[1]*a[0] + # sqr a[1]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -747,10 +747,10 @@ adcl $0,%ebx movl %ecx,4(%edi) movl (%esi),%edx - # saved r[1] - # ############### Calculate word 2 + # saved r[1] + # ############### Calculate word 2 xorl %ecx,%ecx - # sqr a[2]*a[0] + # sqr a[2]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -759,7 +759,7 @@ adcl %edx,%ebx movl 4(%esi),%eax adcl $0,%ecx - # sqr a[1]*a[1] + # sqr a[1]*a[1] mull %eax addl %eax,%ebp adcl %edx,%ebx @@ -767,10 +767,10 @@ adcl $0,%ecx movl %ebp,8(%edi) movl 12(%esi),%eax - # saved r[2] - # ############### Calculate word 3 + # saved r[2] + # ############### Calculate word 3 xorl %ebp,%ebp - # sqr a[3]*a[0] + # sqr a[3]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -780,7 +780,7 @@ movl 8(%esi),%eax adcl $0,%ebp movl 4(%esi),%edx - # sqr a[2]*a[1] + # sqr a[2]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -791,10 +791,10 @@ adcl $0,%ebp movl %ebx,12(%edi) movl (%esi),%edx - # saved r[3] - # ############### Calculate word 4 + # saved r[3] + # ############### Calculate word 4 xorl %ebx,%ebx - # sqr a[4]*a[0] + # sqr a[4]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -804,7 +804,7 @@ movl 12(%esi),%eax adcl $0,%ebx movl 4(%esi),%edx - # sqr a[3]*a[1] + # sqr a[3]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -813,7 +813,7 @@ adcl %edx,%ebp movl 8(%esi),%eax adcl $0,%ebx - # sqr a[2]*a[2] + # sqr a[2]*a[2] mull %eax addl %eax,%ecx adcl %edx,%ebp @@ -821,10 +821,10 @@ adcl $0,%ebx movl %ecx,16(%edi) movl 20(%esi),%eax - # saved r[4] - # ############### Calculate word 5 + # saved r[4] + # ############### Calculate word 5 xorl %ecx,%ecx - # sqr a[5]*a[0] + # sqr a[5]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -834,7 +834,7 @@ movl 16(%esi),%eax adcl $0,%ecx movl 4(%esi),%edx - # sqr a[4]*a[1] + # sqr a[4]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -844,7 +844,7 @@ movl 12(%esi),%eax adcl $0,%ecx movl 8(%esi),%edx - # sqr a[3]*a[2] + # sqr a[3]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -855,10 +855,10 @@ adcl $0,%ecx movl %ebp,20(%edi) movl (%esi),%edx - # saved r[5] - # ############### Calculate word 6 + # saved r[5] + # ############### Calculate word 6 xorl %ebp,%ebp - # sqr a[6]*a[0] + # sqr a[6]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -868,7 +868,7 @@ movl 20(%esi),%eax adcl $0,%ebp movl 4(%esi),%edx - # sqr a[5]*a[1] + # sqr a[5]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -878,7 +878,7 @@ movl 16(%esi),%eax adcl $0,%ebp movl 8(%esi),%edx - # sqr a[4]*a[2] + # sqr a[4]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -887,7 +887,7 @@ adcl %edx,%ecx movl 12(%esi),%eax adcl $0,%ebp - # sqr a[3]*a[3] + # sqr a[3]*a[3] mull %eax addl %eax,%ebx adcl %edx,%ecx @@ -895,10 +895,10 @@ adcl $0,%ebp movl %ebx,24(%edi) movl 28(%esi),%eax - # saved r[6] - # ############### Calculate word 7 + # saved r[6] + # ############### Calculate word 7 xorl %ebx,%ebx - # sqr a[7]*a[0] + # sqr a[7]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -908,7 +908,7 @@ movl 24(%esi),%eax adcl $0,%ebx movl 4(%esi),%edx - # sqr a[6]*a[1] + # sqr a[6]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -918,7 +918,7 @@ movl 20(%esi),%eax adcl $0,%ebx movl 8(%esi),%edx - # sqr a[5]*a[2] + # sqr a[5]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -928,7 +928,7 @@ movl 16(%esi),%eax adcl $0,%ebx movl 12(%esi),%edx - # sqr a[4]*a[3] + # sqr a[4]*a[3] mull %edx addl %eax,%eax adcl %edx,%edx @@ -939,10 +939,10 @@ adcl $0,%ebx movl %ecx,28(%edi) movl 4(%esi),%edx - # saved r[7] - # ############### Calculate word 8 + # saved r[7] + # ############### Calculate word 8 xorl %ecx,%ecx - # sqr a[7]*a[1] + # sqr a[7]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -952,7 +952,7 @@ movl 24(%esi),%eax adcl $0,%ecx movl 8(%esi),%edx - # sqr a[6]*a[2] + # sqr a[6]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -962,7 +962,7 @@ movl 20(%esi),%eax adcl $0,%ecx movl 12(%esi),%edx - # sqr a[5]*a[3] + # sqr a[5]*a[3] mull %edx addl %eax,%eax adcl %edx,%edx @@ -971,7 +971,7 @@ adcl %edx,%ebx movl 16(%esi),%eax adcl $0,%ecx - # sqr a[4]*a[4] + # sqr a[4]*a[4] mull %eax addl %eax,%ebp adcl %edx,%ebx @@ -979,10 +979,10 @@ adcl $0,%ecx movl %ebp,32(%edi) movl 28(%esi),%eax - # saved r[8] - # ############### Calculate word 9 + # saved r[8] + # ############### Calculate word 9 xorl %ebp,%ebp - # sqr a[7]*a[2] + # sqr a[7]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -992,7 +992,7 @@ movl 24(%esi),%eax adcl $0,%ebp movl 12(%esi),%edx - # sqr a[6]*a[3] + # sqr a[6]*a[3] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1002,7 +1002,7 @@ movl 20(%esi),%eax adcl $0,%ebp movl 16(%esi),%edx - # sqr a[5]*a[4] + # sqr a[5]*a[4] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1013,10 +1013,10 @@ adcl $0,%ebp movl %ebx,36(%edi) movl 12(%esi),%edx - # saved r[9] - # ############### Calculate word 10 + # saved r[9] + # ############### Calculate word 10 xorl %ebx,%ebx - # sqr a[7]*a[3] + # sqr a[7]*a[3] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1026,7 +1026,7 @@ movl 24(%esi),%eax adcl $0,%ebx movl 16(%esi),%edx - # sqr a[6]*a[4] + # sqr a[6]*a[4] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1035,7 +1035,7 @@ adcl %edx,%ebp movl 20(%esi),%eax adcl $0,%ebx - # sqr a[5]*a[5] + # sqr a[5]*a[5] mull %eax addl %eax,%ecx adcl %edx,%ebp @@ -1043,10 +1043,10 @@ adcl $0,%ebx movl %ecx,40(%edi) movl 28(%esi),%eax - # saved r[10] - # ############### Calculate word 11 + # saved r[10] + # ############### Calculate word 11 xorl %ecx,%ecx - # sqr a[7]*a[4] + # sqr a[7]*a[4] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1056,7 +1056,7 @@ movl 24(%esi),%eax adcl $0,%ecx movl 20(%esi),%edx - # sqr a[6]*a[5] + # sqr a[6]*a[5] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1067,10 +1067,10 @@ adcl $0,%ecx movl %ebp,44(%edi) movl 20(%esi),%edx - # saved r[11] - # ############### Calculate word 12 + # saved r[11] + # ############### Calculate word 12 xorl %ebp,%ebp - # sqr a[7]*a[5] + # sqr a[7]*a[5] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1079,7 +1079,7 @@ adcl %edx,%ecx movl 24(%esi),%eax adcl $0,%ebp - # sqr a[6]*a[6] + # sqr a[6]*a[6] mull %eax addl %eax,%ebx adcl %edx,%ecx @@ -1087,10 +1087,10 @@ adcl $0,%ebp movl %ebx,48(%edi) movl 28(%esi),%eax - # saved r[12] - # ############### Calculate word 13 + # saved r[12] + # ############### Calculate word 13 xorl %ebx,%ebx - # sqr a[7]*a[6] + # sqr a[7]*a[6] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1100,16 +1100,16 @@ movl 28(%esi),%eax adcl $0,%ebx movl %ecx,52(%edi) - # saved r[13] - # ############### Calculate word 14 + # saved r[13] + # ############### Calculate word 14 xorl %ecx,%ecx - # sqr a[7]*a[7] + # sqr a[7]*a[7] mull %eax addl %eax,%ebp adcl %edx,%ebx adcl $0,%ecx movl %ebp,56(%edi) - # saved r[14] + # saved r[14] movl %ebx,60(%edi) popl %ebx popl %ebp @@ -1130,9 +1130,9 @@ xorl %ebx,%ebx xorl %ecx,%ecx movl (%esi),%eax - # ############### Calculate word 0 + # ############### Calculate word 0 xorl %ebp,%ebp - # sqr a[0]*a[0] + # sqr a[0]*a[0] mull %eax addl %eax,%ebx adcl %edx,%ecx @@ -1140,10 +1140,10 @@ adcl $0,%ebp movl %ebx,(%edi) movl 4(%esi),%eax - # saved r[0] - # ############### Calculate word 1 + # saved r[0] + # ############### Calculate word 1 xorl %ebx,%ebx - # sqr a[1]*a[0] + # sqr a[1]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1154,10 +1154,10 @@ adcl $0,%ebx movl %ecx,4(%edi) movl (%esi),%edx - # saved r[1] - # ############### Calculate word 2 + # saved r[1] + # ############### Calculate word 2 xorl %ecx,%ecx - # sqr a[2]*a[0] + # sqr a[2]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1166,7 +1166,7 @@ adcl %edx,%ebx movl 4(%esi),%eax adcl $0,%ecx - # sqr a[1]*a[1] + # sqr a[1]*a[1] mull %eax addl %eax,%ebp adcl %edx,%ebx @@ -1174,10 +1174,10 @@ adcl $0,%ecx movl %ebp,8(%edi) movl 12(%esi),%eax - # saved r[2] - # ############### Calculate word 3 + # saved r[2] + # ############### Calculate word 3 xorl %ebp,%ebp - # sqr a[3]*a[0] + # sqr a[3]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1187,7 +1187,7 @@ movl 8(%esi),%eax adcl $0,%ebp movl 4(%esi),%edx - # sqr a[2]*a[1] + # sqr a[2]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1198,10 +1198,10 @@ adcl $0,%ebp movl %ebx,12(%edi) movl 4(%esi),%edx - # saved r[3] - # ############### Calculate word 4 + # saved r[3] + # ############### Calculate word 4 xorl %ebx,%ebx - # sqr a[3]*a[1] + # sqr a[3]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1210,7 +1210,7 @@ adcl %edx,%ebp movl 8(%esi),%eax adcl $0,%ebx - # sqr a[2]*a[2] + # sqr a[2]*a[2] mull %eax addl %eax,%ecx adcl %edx,%ebp @@ -1218,10 +1218,10 @@ adcl $0,%ebx movl %ecx,16(%edi) movl 12(%esi),%eax - # saved r[4] - # ############### Calculate word 5 + # saved r[4] + # ############### Calculate word 5 xorl %ecx,%ecx - # sqr a[3]*a[2] + # sqr a[3]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1231,16 +1231,16 @@ movl 12(%esi),%eax adcl $0,%ecx movl %ebp,20(%edi) - # saved r[5] - # ############### Calculate word 6 + # saved r[5] + # ############### Calculate word 6 xorl %ebp,%ebp - # sqr a[3]*a[3] + # sqr a[3]*a[3] mull %eax addl %eax,%ebx adcl %edx,%ecx adcl $0,%ebp movl %ebx,24(%edi) - # saved r[6] + # saved r[6] movl %ecx,28(%edi) popl %ebx popl %ebp diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: BSD-x86" -#define DATE "built on: Tue Apr 21 13:28:30 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:36 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/des/crypt586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/des/crypt586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/des/crypt586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/des/crypt586.s 2022-04-05 07:17:00.000000000 +0000 @@ -9,7 +9,7 @@ pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words xorl %edi,%edi xorl %esi,%esi call L000PIC_me_up @@ -22,7 +22,7 @@ pushl $25 L001start: - # Round 0 + # Round 0 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -72,7 +72,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 1 + # Round 1 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -122,7 +122,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 2 + # Round 2 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -172,7 +172,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 3 + # Round 3 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -222,7 +222,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 4 + # Round 4 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -272,7 +272,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 5 + # Round 5 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -322,7 +322,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 6 + # Round 6 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -372,7 +372,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 7 + # Round 7 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -422,7 +422,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 8 + # Round 8 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -472,7 +472,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 9 + # Round 9 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -522,7 +522,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 10 + # Round 10 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -572,7 +572,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 11 + # Round 11 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -622,7 +622,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 12 + # Round 12 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -672,7 +672,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 13 + # Round 13 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -722,7 +722,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 14 + # Round 14 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -772,7 +772,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 15 + # Round 15 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -829,7 +829,7 @@ movl %ebx,(%esp) jnz L001start - # FP + # FP movl 28(%esp),%edx rorl $1,%edi movl %esi,%eax diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/des/des-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/des/des-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/des/des-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/des/des-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -4,7 +4,7 @@ .align 4 __x86_DES_encrypt: pushl %ecx - # Round 0 + # Round 0 movl (%ecx),%eax xorl %ebx,%ebx movl 4(%ecx),%edx @@ -33,7 +33,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 1 + # Round 1 movl 8(%ecx),%eax xorl %ebx,%ebx movl 12(%ecx),%edx @@ -62,7 +62,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 2 + # Round 2 movl 16(%ecx),%eax xorl %ebx,%ebx movl 20(%ecx),%edx @@ -91,7 +91,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 3 + # Round 3 movl 24(%ecx),%eax xorl %ebx,%ebx movl 28(%ecx),%edx @@ -120,7 +120,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 4 + # Round 4 movl 32(%ecx),%eax xorl %ebx,%ebx movl 36(%ecx),%edx @@ -149,7 +149,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 5 + # Round 5 movl 40(%ecx),%eax xorl %ebx,%ebx movl 44(%ecx),%edx @@ -178,7 +178,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 6 + # Round 6 movl 48(%ecx),%eax xorl %ebx,%ebx movl 52(%ecx),%edx @@ -207,7 +207,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 7 + # Round 7 movl 56(%ecx),%eax xorl %ebx,%ebx movl 60(%ecx),%edx @@ -236,7 +236,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 8 + # Round 8 movl 64(%ecx),%eax xorl %ebx,%ebx movl 68(%ecx),%edx @@ -265,7 +265,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 9 + # Round 9 movl 72(%ecx),%eax xorl %ebx,%ebx movl 76(%ecx),%edx @@ -294,7 +294,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 10 + # Round 10 movl 80(%ecx),%eax xorl %ebx,%ebx movl 84(%ecx),%edx @@ -323,7 +323,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 11 + # Round 11 movl 88(%ecx),%eax xorl %ebx,%ebx movl 92(%ecx),%edx @@ -352,7 +352,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 12 + # Round 12 movl 96(%ecx),%eax xorl %ebx,%ebx movl 100(%ecx),%edx @@ -381,7 +381,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 13 + # Round 13 movl 104(%ecx),%eax xorl %ebx,%ebx movl 108(%ecx),%edx @@ -410,7 +410,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 14 + # Round 14 movl 112(%ecx),%eax xorl %ebx,%ebx movl 116(%ecx),%edx @@ -439,7 +439,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 15 + # Round 15 movl 120(%ecx),%eax xorl %ebx,%ebx movl 124(%ecx),%edx @@ -474,7 +474,7 @@ .align 4 __x86_DES_decrypt: pushl %ecx - # Round 15 + # Round 15 movl 120(%ecx),%eax xorl %ebx,%ebx movl 124(%ecx),%edx @@ -503,7 +503,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 14 + # Round 14 movl 112(%ecx),%eax xorl %ebx,%ebx movl 116(%ecx),%edx @@ -532,7 +532,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 13 + # Round 13 movl 104(%ecx),%eax xorl %ebx,%ebx movl 108(%ecx),%edx @@ -561,7 +561,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 12 + # Round 12 movl 96(%ecx),%eax xorl %ebx,%ebx movl 100(%ecx),%edx @@ -590,7 +590,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 11 + # Round 11 movl 88(%ecx),%eax xorl %ebx,%ebx movl 92(%ecx),%edx @@ -619,7 +619,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 10 + # Round 10 movl 80(%ecx),%eax xorl %ebx,%ebx movl 84(%ecx),%edx @@ -648,7 +648,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 9 + # Round 9 movl 72(%ecx),%eax xorl %ebx,%ebx movl 76(%ecx),%edx @@ -677,7 +677,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 8 + # Round 8 movl 64(%ecx),%eax xorl %ebx,%ebx movl 68(%ecx),%edx @@ -706,7 +706,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 7 + # Round 7 movl 56(%ecx),%eax xorl %ebx,%ebx movl 60(%ecx),%edx @@ -735,7 +735,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 6 + # Round 6 movl 48(%ecx),%eax xorl %ebx,%ebx movl 52(%ecx),%edx @@ -764,7 +764,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 5 + # Round 5 movl 40(%ecx),%eax xorl %ebx,%ebx movl 44(%ecx),%edx @@ -793,7 +793,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 4 + # Round 4 movl 32(%ecx),%eax xorl %ebx,%ebx movl 36(%ecx),%edx @@ -822,7 +822,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 3 + # Round 3 movl 24(%ecx),%eax xorl %ebx,%ebx movl 28(%ecx),%edx @@ -851,7 +851,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 2 + # Round 2 movl 16(%ecx),%eax xorl %ebx,%ebx movl 20(%ecx),%edx @@ -880,7 +880,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 1 + # Round 1 movl 8(%ecx),%eax xorl %ebx,%ebx movl 12(%ecx),%edx @@ -909,7 +909,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 0 + # Round 0 movl (%ecx),%eax xorl %ebx,%ebx movl 4(%ecx),%edx @@ -948,7 +948,7 @@ pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words movl 12(%esp),%esi xorl %ecx,%ecx pushl %ebx @@ -957,7 +957,7 @@ movl 28(%esp),%ebx movl 4(%esi),%edi - # IP + # IP roll $4,%eax movl %eax,%esi xorl %edi,%eax @@ -1007,7 +1007,7 @@ call __x86_DES_decrypt L002done: - # FP + # FP movl 20(%esp),%edx rorl $1,%esi movl %edi,%eax @@ -1060,7 +1060,7 @@ pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words movl 12(%esp),%eax xorl %ecx,%ecx pushl %ebx @@ -1083,7 +1083,7 @@ call __x86_DES_decrypt L005done: - # Fixup + # Fixup rorl $3,%edi movl 20(%esp),%eax rorl $3,%esi @@ -1105,12 +1105,12 @@ pushl %esi pushl %edi - # Load the data words + # Load the data words movl (%ebx),%edi movl 4(%ebx),%esi subl $12,%esp - # IP + # IP roll $4,%edi movl %edi,%edx xorl %esi,%edi @@ -1169,7 +1169,7 @@ movl (%ebx),%edi movl 4(%ebx),%esi - # FP + # FP roll $2,%esi roll $3,%edi movl %edi,%eax @@ -1225,12 +1225,12 @@ pushl %esi pushl %edi - # Load the data words + # Load the data words movl (%ebx),%edi movl 4(%ebx),%esi subl $12,%esp - # IP + # IP roll $4,%edi movl %edi,%edx xorl %esi,%edi @@ -1289,7 +1289,7 @@ movl (%ebx),%edi movl 4(%ebx),%esi - # FP + # FP roll $2,%esi roll $3,%edi movl %edi,%eax @@ -1345,7 +1345,7 @@ pushl %esi pushl %edi movl 28(%esp),%ebp - # getting iv ptr from parameter 4 + # getting iv ptr from parameter 4 movl 36(%esp),%ebx movl (%ebx),%esi movl 4(%ebx),%edi @@ -1356,11 +1356,11 @@ movl %esp,%ebx movl 36(%esp),%esi movl 40(%esp),%edi - # getting encrypt flag from parameter 5 + # getting encrypt flag from parameter 5 movl 56(%esp),%ecx - # get and push parameter 5 + # get and push parameter 5 pushl %ecx - # get and push parameter 3 + # get and push parameter 3 movl 52(%esp),%eax pushl %eax pushl %ebx @@ -1524,7 +1524,7 @@ pushl %esi pushl %edi movl 28(%esp),%ebp - # getting iv ptr from parameter 6 + # getting iv ptr from parameter 6 movl 44(%esp),%ebx movl (%ebx),%esi movl 4(%ebx),%edi @@ -1535,15 +1535,15 @@ movl %esp,%ebx movl 36(%esp),%esi movl 40(%esp),%edi - # getting encrypt flag from parameter 7 + # getting encrypt flag from parameter 7 movl 64(%esp),%ecx - # get and push parameter 5 + # get and push parameter 5 movl 56(%esp),%eax pushl %eax - # get and push parameter 4 + # get and push parameter 4 movl 56(%esp),%eax pushl %eax - # get and push parameter 3 + # get and push parameter 3 movl 56(%esp),%eax pushl %eax pushl %ebx diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/md5/md5-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/md5/md5-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/md5/md5-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/md5/md5-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -21,10 +21,10 @@ movl 12(%edi),%edx L000start: - # R0 section + # R0 section movl %ecx,%edi movl (%esi),%ebp - # R0 0 + # R0 0 xorl %edx,%edi andl %ebx,%edi leal 3614090360(%eax,%ebp,1),%eax @@ -34,7 +34,7 @@ roll $7,%eax movl %ebx,%edi addl %ebx,%eax - # R0 1 + # R0 1 xorl %ecx,%edi andl %eax,%edi leal 3905402710(%edx,%ebp,1),%edx @@ -44,7 +44,7 @@ roll $12,%edx movl %eax,%edi addl %eax,%edx - # R0 2 + # R0 2 xorl %ebx,%edi andl %edx,%edi leal 606105819(%ecx,%ebp,1),%ecx @@ -54,7 +54,7 @@ roll $17,%ecx movl %edx,%edi addl %edx,%ecx - # R0 3 + # R0 3 xorl %eax,%edi andl %ecx,%edi leal 3250441966(%ebx,%ebp,1),%ebx @@ -64,7 +64,7 @@ roll $22,%ebx movl %ecx,%edi addl %ecx,%ebx - # R0 4 + # R0 4 xorl %edx,%edi andl %ebx,%edi leal 4118548399(%eax,%ebp,1),%eax @@ -74,7 +74,7 @@ roll $7,%eax movl %ebx,%edi addl %ebx,%eax - # R0 5 + # R0 5 xorl %ecx,%edi andl %eax,%edi leal 1200080426(%edx,%ebp,1),%edx @@ -84,7 +84,7 @@ roll $12,%edx movl %eax,%edi addl %eax,%edx - # R0 6 + # R0 6 xorl %ebx,%edi andl %edx,%edi leal 2821735955(%ecx,%ebp,1),%ecx @@ -94,7 +94,7 @@ roll $17,%ecx movl %edx,%edi addl %edx,%ecx - # R0 7 + # R0 7 xorl %eax,%edi andl %ecx,%edi leal 4249261313(%ebx,%ebp,1),%ebx @@ -104,7 +104,7 @@ roll $22,%ebx movl %ecx,%edi addl %ecx,%ebx - # R0 8 + # R0 8 xorl %edx,%edi andl %ebx,%edi leal 1770035416(%eax,%ebp,1),%eax @@ -114,7 +114,7 @@ roll $7,%eax movl %ebx,%edi addl %ebx,%eax - # R0 9 + # R0 9 xorl %ecx,%edi andl %eax,%edi leal 2336552879(%edx,%ebp,1),%edx @@ -124,7 +124,7 @@ roll $12,%edx movl %eax,%edi addl %eax,%edx - # R0 10 + # R0 10 xorl %ebx,%edi andl %edx,%edi leal 4294925233(%ecx,%ebp,1),%ecx @@ -134,7 +134,7 @@ roll $17,%ecx movl %edx,%edi addl %edx,%ecx - # R0 11 + # R0 11 xorl %eax,%edi andl %ecx,%edi leal 2304563134(%ebx,%ebp,1),%ebx @@ -144,7 +144,7 @@ roll $22,%ebx movl %ecx,%edi addl %ecx,%ebx - # R0 12 + # R0 12 xorl %edx,%edi andl %ebx,%edi leal 1804603682(%eax,%ebp,1),%eax @@ -154,7 +154,7 @@ roll $7,%eax movl %ebx,%edi addl %ebx,%eax - # R0 13 + # R0 13 xorl %ecx,%edi andl %eax,%edi leal 4254626195(%edx,%ebp,1),%edx @@ -164,7 +164,7 @@ roll $12,%edx movl %eax,%edi addl %eax,%edx - # R0 14 + # R0 14 xorl %ebx,%edi andl %edx,%edi leal 2792965006(%ecx,%ebp,1),%ecx @@ -174,7 +174,7 @@ roll $17,%ecx movl %edx,%edi addl %edx,%ecx - # R0 15 + # R0 15 xorl %eax,%edi andl %ecx,%edi leal 1236535329(%ebx,%ebp,1),%ebx @@ -185,8 +185,8 @@ movl %ecx,%edi addl %ecx,%ebx - # R1 section - # R1 16 + # R1 section + # R1 16 xorl %ebx,%edi andl %edx,%edi leal 4129170786(%eax,%ebp,1),%eax @@ -196,7 +196,7 @@ movl %ebx,%edi roll $5,%eax addl %ebx,%eax - # R1 17 + # R1 17 xorl %eax,%edi andl %ecx,%edi leal 3225465664(%edx,%ebp,1),%edx @@ -206,7 +206,7 @@ movl %eax,%edi roll $9,%edx addl %eax,%edx - # R1 18 + # R1 18 xorl %edx,%edi andl %ebx,%edi leal 643717713(%ecx,%ebp,1),%ecx @@ -216,7 +216,7 @@ movl %edx,%edi roll $14,%ecx addl %edx,%ecx - # R1 19 + # R1 19 xorl %ecx,%edi andl %eax,%edi leal 3921069994(%ebx,%ebp,1),%ebx @@ -226,7 +226,7 @@ movl %ecx,%edi roll $20,%ebx addl %ecx,%ebx - # R1 20 + # R1 20 xorl %ebx,%edi andl %edx,%edi leal 3593408605(%eax,%ebp,1),%eax @@ -236,7 +236,7 @@ movl %ebx,%edi roll $5,%eax addl %ebx,%eax - # R1 21 + # R1 21 xorl %eax,%edi andl %ecx,%edi leal 38016083(%edx,%ebp,1),%edx @@ -246,7 +246,7 @@ movl %eax,%edi roll $9,%edx addl %eax,%edx - # R1 22 + # R1 22 xorl %edx,%edi andl %ebx,%edi leal 3634488961(%ecx,%ebp,1),%ecx @@ -256,7 +256,7 @@ movl %edx,%edi roll $14,%ecx addl %edx,%ecx - # R1 23 + # R1 23 xorl %ecx,%edi andl %eax,%edi leal 3889429448(%ebx,%ebp,1),%ebx @@ -266,7 +266,7 @@ movl %ecx,%edi roll $20,%ebx addl %ecx,%ebx - # R1 24 + # R1 24 xorl %ebx,%edi andl %edx,%edi leal 568446438(%eax,%ebp,1),%eax @@ -276,7 +276,7 @@ movl %ebx,%edi roll $5,%eax addl %ebx,%eax - # R1 25 + # R1 25 xorl %eax,%edi andl %ecx,%edi leal 3275163606(%edx,%ebp,1),%edx @@ -286,7 +286,7 @@ movl %eax,%edi roll $9,%edx addl %eax,%edx - # R1 26 + # R1 26 xorl %edx,%edi andl %ebx,%edi leal 4107603335(%ecx,%ebp,1),%ecx @@ -296,7 +296,7 @@ movl %edx,%edi roll $14,%ecx addl %edx,%ecx - # R1 27 + # R1 27 xorl %ecx,%edi andl %eax,%edi leal 1163531501(%ebx,%ebp,1),%ebx @@ -306,7 +306,7 @@ movl %ecx,%edi roll $20,%ebx addl %ecx,%ebx - # R1 28 + # R1 28 xorl %ebx,%edi andl %edx,%edi leal 2850285829(%eax,%ebp,1),%eax @@ -316,7 +316,7 @@ movl %ebx,%edi roll $5,%eax addl %ebx,%eax - # R1 29 + # R1 29 xorl %eax,%edi andl %ecx,%edi leal 4243563512(%edx,%ebp,1),%edx @@ -326,7 +326,7 @@ movl %eax,%edi roll $9,%edx addl %eax,%edx - # R1 30 + # R1 30 xorl %edx,%edi andl %ebx,%edi leal 1735328473(%ecx,%ebp,1),%ecx @@ -336,7 +336,7 @@ movl %edx,%edi roll $14,%ecx addl %edx,%ecx - # R1 31 + # R1 31 xorl %ecx,%edi andl %eax,%edi leal 2368359562(%ebx,%ebp,1),%ebx @@ -347,8 +347,8 @@ roll $20,%ebx addl %ecx,%ebx - # R2 section - # R2 32 + # R2 section + # R2 32 xorl %edx,%edi xorl %ebx,%edi leal 4294588738(%eax,%ebp,1),%eax @@ -356,7 +356,7 @@ movl 32(%esi),%ebp roll $4,%eax movl %ebx,%edi - # R2 33 + # R2 33 addl %ebx,%eax xorl %ecx,%edi leal 2272392833(%edx,%ebp,1),%edx @@ -366,7 +366,7 @@ movl %eax,%edi roll $11,%edx addl %eax,%edx - # R2 34 + # R2 34 xorl %ebx,%edi xorl %edx,%edi leal 1839030562(%ecx,%ebp,1),%ecx @@ -374,7 +374,7 @@ movl 56(%esi),%ebp roll $16,%ecx movl %edx,%edi - # R2 35 + # R2 35 addl %edx,%ecx xorl %eax,%edi leal 4259657740(%ebx,%ebp,1),%ebx @@ -384,7 +384,7 @@ movl %ecx,%edi roll $23,%ebx addl %ecx,%ebx - # R2 36 + # R2 36 xorl %edx,%edi xorl %ebx,%edi leal 2763975236(%eax,%ebp,1),%eax @@ -392,7 +392,7 @@ movl 16(%esi),%ebp roll $4,%eax movl %ebx,%edi - # R2 37 + # R2 37 addl %ebx,%eax xorl %ecx,%edi leal 1272893353(%edx,%ebp,1),%edx @@ -402,7 +402,7 @@ movl %eax,%edi roll $11,%edx addl %eax,%edx - # R2 38 + # R2 38 xorl %ebx,%edi xorl %edx,%edi leal 4139469664(%ecx,%ebp,1),%ecx @@ -410,7 +410,7 @@ movl 40(%esi),%ebp roll $16,%ecx movl %edx,%edi - # R2 39 + # R2 39 addl %edx,%ecx xorl %eax,%edi leal 3200236656(%ebx,%ebp,1),%ebx @@ -420,7 +420,7 @@ movl %ecx,%edi roll $23,%ebx addl %ecx,%ebx - # R2 40 + # R2 40 xorl %edx,%edi xorl %ebx,%edi leal 681279174(%eax,%ebp,1),%eax @@ -428,7 +428,7 @@ movl (%esi),%ebp roll $4,%eax movl %ebx,%edi - # R2 41 + # R2 41 addl %ebx,%eax xorl %ecx,%edi leal 3936430074(%edx,%ebp,1),%edx @@ -438,7 +438,7 @@ movl %eax,%edi roll $11,%edx addl %eax,%edx - # R2 42 + # R2 42 xorl %ebx,%edi xorl %edx,%edi leal 3572445317(%ecx,%ebp,1),%ecx @@ -446,7 +446,7 @@ movl 24(%esi),%ebp roll $16,%ecx movl %edx,%edi - # R2 43 + # R2 43 addl %edx,%ecx xorl %eax,%edi leal 76029189(%ebx,%ebp,1),%ebx @@ -456,7 +456,7 @@ movl %ecx,%edi roll $23,%ebx addl %ecx,%ebx - # R2 44 + # R2 44 xorl %edx,%edi xorl %ebx,%edi leal 3654602809(%eax,%ebp,1),%eax @@ -464,7 +464,7 @@ movl 48(%esi),%ebp roll $4,%eax movl %ebx,%edi - # R2 45 + # R2 45 addl %ebx,%eax xorl %ecx,%edi leal 3873151461(%edx,%ebp,1),%edx @@ -474,7 +474,7 @@ movl %eax,%edi roll $11,%edx addl %eax,%edx - # R2 46 + # R2 46 xorl %ebx,%edi xorl %edx,%edi leal 530742520(%ecx,%ebp,1),%ecx @@ -482,7 +482,7 @@ movl 8(%esi),%ebp roll $16,%ecx movl %edx,%edi - # R2 47 + # R2 47 addl %edx,%ecx xorl %eax,%edi leal 3299628645(%ebx,%ebp,1),%ebx @@ -493,8 +493,8 @@ roll $23,%ebx addl %ecx,%ebx - # R3 section - # R3 48 + # R3 section + # R3 48 xorl %edx,%edi orl %ebx,%edi leal 4096336452(%eax,%ebp,1),%eax @@ -505,7 +505,7 @@ roll $6,%eax xorl %ecx,%edi addl %ebx,%eax - # R3 49 + # R3 49 orl %eax,%edi leal 1126891415(%edx,%ebp,1),%edx xorl %ebx,%edi @@ -515,7 +515,7 @@ roll $10,%edx xorl %ebx,%edi addl %eax,%edx - # R3 50 + # R3 50 orl %edx,%edi leal 2878612391(%ecx,%ebp,1),%ecx xorl %eax,%edi @@ -525,7 +525,7 @@ roll $15,%ecx xorl %eax,%edi addl %edx,%ecx - # R3 51 + # R3 51 orl %ecx,%edi leal 4237533241(%ebx,%ebp,1),%ebx xorl %edx,%edi @@ -535,7 +535,7 @@ roll $21,%ebx xorl %edx,%edi addl %ecx,%ebx - # R3 52 + # R3 52 orl %ebx,%edi leal 1700485571(%eax,%ebp,1),%eax xorl %ecx,%edi @@ -545,7 +545,7 @@ roll $6,%eax xorl %ecx,%edi addl %ebx,%eax - # R3 53 + # R3 53 orl %eax,%edi leal 2399980690(%edx,%ebp,1),%edx xorl %ebx,%edi @@ -555,7 +555,7 @@ roll $10,%edx xorl %ebx,%edi addl %eax,%edx - # R3 54 + # R3 54 orl %edx,%edi leal 4293915773(%ecx,%ebp,1),%ecx xorl %eax,%edi @@ -565,7 +565,7 @@ roll $15,%ecx xorl %eax,%edi addl %edx,%ecx - # R3 55 + # R3 55 orl %ecx,%edi leal 2240044497(%ebx,%ebp,1),%ebx xorl %edx,%edi @@ -575,7 +575,7 @@ roll $21,%ebx xorl %edx,%edi addl %ecx,%ebx - # R3 56 + # R3 56 orl %ebx,%edi leal 1873313359(%eax,%ebp,1),%eax xorl %ecx,%edi @@ -585,7 +585,7 @@ roll $6,%eax xorl %ecx,%edi addl %ebx,%eax - # R3 57 + # R3 57 orl %eax,%edi leal 4264355552(%edx,%ebp,1),%edx xorl %ebx,%edi @@ -595,7 +595,7 @@ roll $10,%edx xorl %ebx,%edi addl %eax,%edx - # R3 58 + # R3 58 orl %edx,%edi leal 2734768916(%ecx,%ebp,1),%ecx xorl %eax,%edi @@ -605,7 +605,7 @@ roll $15,%ecx xorl %eax,%edi addl %edx,%ecx - # R3 59 + # R3 59 orl %ecx,%edi leal 1309151649(%ebx,%ebp,1),%ebx xorl %edx,%edi @@ -615,7 +615,7 @@ roll $21,%ebx xorl %edx,%edi addl %ecx,%ebx - # R3 60 + # R3 60 orl %ebx,%edi leal 4149444226(%eax,%ebp,1),%eax xorl %ecx,%edi @@ -625,7 +625,7 @@ roll $6,%eax xorl %ecx,%edi addl %ebx,%eax - # R3 61 + # R3 61 orl %eax,%edi leal 3174756917(%edx,%ebp,1),%edx xorl %ebx,%edi @@ -635,7 +635,7 @@ roll $10,%edx xorl %ebx,%edi addl %eax,%edx - # R3 62 + # R3 62 orl %edx,%edi leal 718787259(%ecx,%ebp,1),%ecx xorl %eax,%edi @@ -645,7 +645,7 @@ roll $15,%ecx xorl %eax,%edi addl %edx,%ecx - # R3 63 + # R3 63 orl %ecx,%edi leal 3951481745(%ebx,%ebp,1),%ebx xorl %edx,%edi diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/ripemd/rmd-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/ripemd/rmd-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/ripemd/rmd-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/ripemd/rmd-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -51,7 +51,7 @@ movl %edi,%eax movl 12(%edx),%ebx movl 16(%edx),%ebp - # 0 + # 0 xorl %ebx,%eax movl (%esp),%edx xorl %esi,%eax @@ -61,7 +61,7 @@ movl %esi,%eax roll $11,%ecx addl %ebp,%ecx - # 1 + # 1 xorl %edi,%eax movl 4(%esp),%edx xorl %ecx,%eax @@ -72,7 +72,7 @@ xorl %esi,%eax roll $14,%ebp addl %ebx,%ebp - # 2 + # 2 movl 8(%esp),%edx xorl %ebp,%eax addl %edx,%ebx @@ -81,7 +81,7 @@ movl %ebp,%eax roll $15,%ebx addl %edi,%ebx - # 3 + # 3 xorl %ecx,%eax movl 12(%esp),%edx xorl %ebx,%eax @@ -92,7 +92,7 @@ xorl %ebp,%eax roll $12,%edi addl %esi,%edi - # 4 + # 4 movl 16(%esp),%edx xorl %edi,%eax addl %edx,%esi @@ -101,7 +101,7 @@ movl %edi,%eax roll $5,%esi addl %ecx,%esi - # 5 + # 5 xorl %ebx,%eax movl 20(%esp),%edx xorl %esi,%eax @@ -112,7 +112,7 @@ xorl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 6 + # 6 movl 24(%esp),%edx xorl %ecx,%eax addl %edx,%ebp @@ -121,7 +121,7 @@ movl %ecx,%eax roll $7,%ebp addl %ebx,%ebp - # 7 + # 7 xorl %esi,%eax movl 28(%esp),%edx xorl %ebp,%eax @@ -132,7 +132,7 @@ xorl %ecx,%eax roll $9,%ebx addl %edi,%ebx - # 8 + # 8 movl 32(%esp),%edx xorl %ebx,%eax addl %edx,%edi @@ -141,7 +141,7 @@ movl %ebx,%eax roll $11,%edi addl %esi,%edi - # 9 + # 9 xorl %ebp,%eax movl 36(%esp),%edx xorl %edi,%eax @@ -152,7 +152,7 @@ xorl %ebx,%eax roll $13,%esi addl %ecx,%esi - # 10 + # 10 movl 40(%esp),%edx xorl %esi,%eax addl %edx,%ecx @@ -161,7 +161,7 @@ movl %esi,%eax roll $14,%ecx addl %ebp,%ecx - # 11 + # 11 xorl %edi,%eax movl 44(%esp),%edx xorl %ecx,%eax @@ -172,7 +172,7 @@ xorl %esi,%eax roll $15,%ebp addl %ebx,%ebp - # 12 + # 12 movl 48(%esp),%edx xorl %ebp,%eax addl %edx,%ebx @@ -181,7 +181,7 @@ movl %ebp,%eax roll $6,%ebx addl %edi,%ebx - # 13 + # 13 xorl %ecx,%eax movl 52(%esp),%edx xorl %ebx,%eax @@ -192,7 +192,7 @@ xorl %ebp,%eax roll $7,%edi addl %esi,%edi - # 14 + # 14 movl 56(%esp),%edx xorl %edi,%eax addl %edx,%esi @@ -201,7 +201,7 @@ movl %edi,%eax roll $9,%esi addl %ecx,%esi - # 15 + # 15 xorl %ebx,%eax movl 60(%esp),%edx xorl %esi,%eax @@ -212,7 +212,7 @@ movl 28(%esp),%edx roll $8,%ecx addl %ebp,%ecx - # 16 + # 16 addl %edx,%ebp movl %esi,%edx subl %ecx,%eax @@ -225,7 +225,7 @@ movl $-1,%edx roll $7,%ebp addl %ebx,%ebp - # 17 + # 17 addl %eax,%ebx movl %ecx,%eax subl %ebp,%edx @@ -238,7 +238,7 @@ movl $-1,%eax roll $6,%ebx addl %edi,%ebx - # 18 + # 18 addl %edx,%edi movl %ebp,%edx subl %ebx,%eax @@ -251,7 +251,7 @@ movl $-1,%edx roll $8,%edi addl %esi,%edi - # 19 + # 19 addl %eax,%esi movl %ebx,%eax subl %edi,%edx @@ -264,7 +264,7 @@ movl $-1,%eax roll $13,%esi addl %ecx,%esi - # 20 + # 20 addl %edx,%ecx movl %edi,%edx subl %esi,%eax @@ -277,7 +277,7 @@ movl $-1,%edx roll $11,%ecx addl %ebp,%ecx - # 21 + # 21 addl %eax,%ebp movl %esi,%eax subl %ecx,%edx @@ -290,7 +290,7 @@ movl $-1,%eax roll $9,%ebp addl %ebx,%ebp - # 22 + # 22 addl %edx,%ebx movl %ecx,%edx subl %ebp,%eax @@ -303,7 +303,7 @@ movl $-1,%edx roll $7,%ebx addl %edi,%ebx - # 23 + # 23 addl %eax,%edi movl %ebp,%eax subl %ebx,%edx @@ -316,7 +316,7 @@ movl $-1,%eax roll $15,%edi addl %esi,%edi - # 24 + # 24 addl %edx,%esi movl %ebx,%edx subl %edi,%eax @@ -329,7 +329,7 @@ movl $-1,%edx roll $7,%esi addl %ecx,%esi - # 25 + # 25 addl %eax,%ecx movl %edi,%eax subl %esi,%edx @@ -342,7 +342,7 @@ movl $-1,%eax roll $12,%ecx addl %ebp,%ecx - # 26 + # 26 addl %edx,%ebp movl %esi,%edx subl %ecx,%eax @@ -355,7 +355,7 @@ movl $-1,%edx roll $15,%ebp addl %ebx,%ebp - # 27 + # 27 addl %eax,%ebx movl %ecx,%eax subl %ebp,%edx @@ -368,7 +368,7 @@ movl $-1,%eax roll $9,%ebx addl %edi,%ebx - # 28 + # 28 addl %edx,%edi movl %ebp,%edx subl %ebx,%eax @@ -381,7 +381,7 @@ movl $-1,%edx roll $11,%edi addl %esi,%edi - # 29 + # 29 addl %eax,%esi movl %ebx,%eax subl %edi,%edx @@ -394,7 +394,7 @@ movl $-1,%eax roll $7,%esi addl %ecx,%esi - # 30 + # 30 addl %edx,%ecx movl %edi,%edx subl %esi,%eax @@ -407,7 +407,7 @@ movl $-1,%edx roll $13,%ecx addl %ebp,%ecx - # 31 + # 31 addl %eax,%ebp movl %esi,%eax subl %ecx,%edx @@ -420,7 +420,7 @@ subl %ecx,%edx roll $12,%ebp addl %ebx,%ebp - # 32 + # 32 movl 12(%esp),%eax orl %ebp,%edx addl %eax,%ebx @@ -431,7 +431,7 @@ subl %ebp,%eax roll $11,%ebx addl %edi,%ebx - # 33 + # 33 movl 40(%esp),%edx orl %ebx,%eax addl %edx,%edi @@ -442,7 +442,7 @@ subl %ebx,%edx roll $13,%edi addl %esi,%edi - # 34 + # 34 movl 56(%esp),%eax orl %edi,%edx addl %eax,%esi @@ -453,7 +453,7 @@ subl %edi,%eax roll $6,%esi addl %ecx,%esi - # 35 + # 35 movl 16(%esp),%edx orl %esi,%eax addl %edx,%ecx @@ -464,7 +464,7 @@ subl %esi,%edx roll $7,%ecx addl %ebp,%ecx - # 36 + # 36 movl 36(%esp),%eax orl %ecx,%edx addl %eax,%ebp @@ -475,7 +475,7 @@ subl %ecx,%eax roll $14,%ebp addl %ebx,%ebp - # 37 + # 37 movl 60(%esp),%edx orl %ebp,%eax addl %edx,%ebx @@ -486,7 +486,7 @@ subl %ebp,%edx roll $9,%ebx addl %edi,%ebx - # 38 + # 38 movl 32(%esp),%eax orl %ebx,%edx addl %eax,%edi @@ -497,7 +497,7 @@ subl %ebx,%eax roll $13,%edi addl %esi,%edi - # 39 + # 39 movl 4(%esp),%edx orl %edi,%eax addl %edx,%esi @@ -508,7 +508,7 @@ subl %edi,%edx roll $15,%esi addl %ecx,%esi - # 40 + # 40 movl 8(%esp),%eax orl %esi,%edx addl %eax,%ecx @@ -519,7 +519,7 @@ subl %esi,%eax roll $14,%ecx addl %ebp,%ecx - # 41 + # 41 movl 28(%esp),%edx orl %ecx,%eax addl %edx,%ebp @@ -530,7 +530,7 @@ subl %ecx,%edx roll $8,%ebp addl %ebx,%ebp - # 42 + # 42 movl (%esp),%eax orl %ebp,%edx addl %eax,%ebx @@ -541,7 +541,7 @@ subl %ebp,%eax roll $13,%ebx addl %edi,%ebx - # 43 + # 43 movl 24(%esp),%edx orl %ebx,%eax addl %edx,%edi @@ -552,7 +552,7 @@ subl %ebx,%edx roll $6,%edi addl %esi,%edi - # 44 + # 44 movl 52(%esp),%eax orl %edi,%edx addl %eax,%esi @@ -563,7 +563,7 @@ subl %edi,%eax roll $5,%esi addl %ecx,%esi - # 45 + # 45 movl 44(%esp),%edx orl %esi,%eax addl %edx,%ecx @@ -574,7 +574,7 @@ subl %esi,%edx roll $12,%ecx addl %ebp,%ecx - # 46 + # 46 movl 20(%esp),%eax orl %ecx,%edx addl %eax,%ebp @@ -585,7 +585,7 @@ subl %ecx,%eax roll $7,%ebp addl %ebx,%ebp - # 47 + # 47 movl 48(%esp),%edx orl %ebp,%eax addl %edx,%ebx @@ -596,7 +596,7 @@ movl %ecx,%eax roll $5,%ebx addl %edi,%ebx - # 48 + # 48 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -609,7 +609,7 @@ movl %ebp,%eax roll $11,%edi addl %esi,%edi - # 49 + # 49 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -622,7 +622,7 @@ movl %ebx,%eax roll $12,%esi addl %ecx,%esi - # 50 + # 50 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -635,7 +635,7 @@ movl %edi,%eax roll $14,%ecx addl %ebp,%ecx - # 51 + # 51 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -648,7 +648,7 @@ movl %esi,%eax roll $15,%ebp addl %ebx,%ebp - # 52 + # 52 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -661,7 +661,7 @@ movl %ecx,%eax roll $14,%ebx addl %edi,%ebx - # 53 + # 53 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -674,7 +674,7 @@ movl %ebp,%eax roll $15,%edi addl %esi,%edi - # 54 + # 54 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -687,7 +687,7 @@ movl %ebx,%eax roll $9,%esi addl %ecx,%esi - # 55 + # 55 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -700,7 +700,7 @@ movl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 56 + # 56 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -713,7 +713,7 @@ movl %esi,%eax roll $9,%ebp addl %ebx,%ebp - # 57 + # 57 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -726,7 +726,7 @@ movl %ecx,%eax roll $14,%ebx addl %edi,%ebx - # 58 + # 58 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -739,7 +739,7 @@ movl %ebp,%eax roll $5,%edi addl %esi,%edi - # 59 + # 59 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -752,7 +752,7 @@ movl %ebx,%eax roll $6,%esi addl %ecx,%esi - # 60 + # 60 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -765,7 +765,7 @@ movl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 61 + # 61 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -778,7 +778,7 @@ movl %esi,%eax roll $6,%ebp addl %ebx,%ebp - # 62 + # 62 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -791,7 +791,7 @@ movl %ecx,%eax roll $5,%ebx addl %edi,%ebx - # 63 + # 63 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -804,7 +804,7 @@ subl %ebp,%edx roll $12,%edi addl %esi,%edi - # 64 + # 64 movl 16(%esp),%eax orl %ebx,%edx addl %eax,%esi @@ -815,7 +815,7 @@ subl %ebx,%eax roll $9,%esi addl %ecx,%esi - # 65 + # 65 movl (%esp),%edx orl %edi,%eax addl %edx,%ecx @@ -826,7 +826,7 @@ subl %edi,%edx roll $15,%ecx addl %ebp,%ecx - # 66 + # 66 movl 20(%esp),%eax orl %esi,%edx addl %eax,%ebp @@ -837,7 +837,7 @@ subl %esi,%eax roll $5,%ebp addl %ebx,%ebp - # 67 + # 67 movl 36(%esp),%edx orl %ecx,%eax addl %edx,%ebx @@ -848,7 +848,7 @@ subl %ecx,%edx roll $11,%ebx addl %edi,%ebx - # 68 + # 68 movl 28(%esp),%eax orl %ebp,%edx addl %eax,%edi @@ -859,7 +859,7 @@ subl %ebp,%eax roll $6,%edi addl %esi,%edi - # 69 + # 69 movl 48(%esp),%edx orl %ebx,%eax addl %edx,%esi @@ -870,7 +870,7 @@ subl %ebx,%edx roll $8,%esi addl %ecx,%esi - # 70 + # 70 movl 8(%esp),%eax orl %edi,%edx addl %eax,%ecx @@ -881,7 +881,7 @@ subl %edi,%eax roll $13,%ecx addl %ebp,%ecx - # 71 + # 71 movl 40(%esp),%edx orl %esi,%eax addl %edx,%ebp @@ -892,7 +892,7 @@ subl %esi,%edx roll $12,%ebp addl %ebx,%ebp - # 72 + # 72 movl 56(%esp),%eax orl %ecx,%edx addl %eax,%ebx @@ -903,7 +903,7 @@ subl %ecx,%eax roll $5,%ebx addl %edi,%ebx - # 73 + # 73 movl 4(%esp),%edx orl %ebp,%eax addl %edx,%edi @@ -914,7 +914,7 @@ subl %ebp,%edx roll $12,%edi addl %esi,%edi - # 74 + # 74 movl 12(%esp),%eax orl %ebx,%edx addl %eax,%esi @@ -925,7 +925,7 @@ subl %ebx,%eax roll $13,%esi addl %ecx,%esi - # 75 + # 75 movl 32(%esp),%edx orl %edi,%eax addl %edx,%ecx @@ -936,7 +936,7 @@ subl %edi,%edx roll $14,%ecx addl %ebp,%ecx - # 76 + # 76 movl 44(%esp),%eax orl %esi,%edx addl %eax,%ebp @@ -947,7 +947,7 @@ subl %esi,%eax roll $11,%ebp addl %ebx,%ebp - # 77 + # 77 movl 24(%esp),%edx orl %ecx,%eax addl %edx,%ebx @@ -958,7 +958,7 @@ subl %ecx,%edx roll $8,%ebx addl %edi,%ebx - # 78 + # 78 movl 60(%esp),%eax orl %ebp,%edx addl %eax,%edi @@ -969,7 +969,7 @@ subl %ebp,%eax roll $5,%edi addl %esi,%edi - # 79 + # 79 movl 52(%esp),%edx orl %ebx,%eax addl %edx,%esi @@ -989,7 +989,7 @@ movl %ebp,80(%esp) movl 12(%edx),%ebx movl 16(%edx),%ebp - # 80 + # 80 movl $-1,%edx subl %ebx,%edx movl 20(%esp),%eax @@ -1002,7 +1002,7 @@ subl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 81 + # 81 movl 56(%esp),%edx orl %esi,%eax addl %edx,%ebp @@ -1013,7 +1013,7 @@ subl %esi,%edx roll $9,%ebp addl %ebx,%ebp - # 82 + # 82 movl 28(%esp),%eax orl %ecx,%edx addl %eax,%ebx @@ -1024,7 +1024,7 @@ subl %ecx,%eax roll $9,%ebx addl %edi,%ebx - # 83 + # 83 movl (%esp),%edx orl %ebp,%eax addl %edx,%edi @@ -1035,7 +1035,7 @@ subl %ebp,%edx roll $11,%edi addl %esi,%edi - # 84 + # 84 movl 36(%esp),%eax orl %ebx,%edx addl %eax,%esi @@ -1046,7 +1046,7 @@ subl %ebx,%eax roll $13,%esi addl %ecx,%esi - # 85 + # 85 movl 8(%esp),%edx orl %edi,%eax addl %edx,%ecx @@ -1057,7 +1057,7 @@ subl %edi,%edx roll $15,%ecx addl %ebp,%ecx - # 86 + # 86 movl 44(%esp),%eax orl %esi,%edx addl %eax,%ebp @@ -1068,7 +1068,7 @@ subl %esi,%eax roll $15,%ebp addl %ebx,%ebp - # 87 + # 87 movl 16(%esp),%edx orl %ecx,%eax addl %edx,%ebx @@ -1079,7 +1079,7 @@ subl %ecx,%edx roll $5,%ebx addl %edi,%ebx - # 88 + # 88 movl 52(%esp),%eax orl %ebp,%edx addl %eax,%edi @@ -1090,7 +1090,7 @@ subl %ebp,%eax roll $7,%edi addl %esi,%edi - # 89 + # 89 movl 24(%esp),%edx orl %ebx,%eax addl %edx,%esi @@ -1101,7 +1101,7 @@ subl %ebx,%edx roll $7,%esi addl %ecx,%esi - # 90 + # 90 movl 60(%esp),%eax orl %edi,%edx addl %eax,%ecx @@ -1112,7 +1112,7 @@ subl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 91 + # 91 movl 32(%esp),%edx orl %esi,%eax addl %edx,%ebp @@ -1123,7 +1123,7 @@ subl %esi,%edx roll $11,%ebp addl %ebx,%ebp - # 92 + # 92 movl 4(%esp),%eax orl %ecx,%edx addl %eax,%ebx @@ -1134,7 +1134,7 @@ subl %ecx,%eax roll $14,%ebx addl %edi,%ebx - # 93 + # 93 movl 40(%esp),%edx orl %ebp,%eax addl %edx,%edi @@ -1145,7 +1145,7 @@ subl %ebp,%edx roll $14,%edi addl %esi,%edi - # 94 + # 94 movl 12(%esp),%eax orl %ebx,%edx addl %eax,%esi @@ -1156,7 +1156,7 @@ subl %ebx,%eax roll $12,%esi addl %ecx,%esi - # 95 + # 95 movl 48(%esp),%edx orl %edi,%eax addl %edx,%ecx @@ -1167,7 +1167,7 @@ movl %edi,%eax roll $6,%ecx addl %ebp,%ecx - # 96 + # 96 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -1180,7 +1180,7 @@ movl %esi,%eax roll $9,%ebp addl %ebx,%ebp - # 97 + # 97 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -1193,7 +1193,7 @@ movl %ecx,%eax roll $13,%ebx addl %edi,%ebx - # 98 + # 98 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -1206,7 +1206,7 @@ movl %ebp,%eax roll $15,%edi addl %esi,%edi - # 99 + # 99 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -1219,7 +1219,7 @@ movl %ebx,%eax roll $7,%esi addl %ecx,%esi - # 100 + # 100 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -1232,7 +1232,7 @@ movl %edi,%eax roll $12,%ecx addl %ebp,%ecx - # 101 + # 101 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -1245,7 +1245,7 @@ movl %esi,%eax roll $8,%ebp addl %ebx,%ebp - # 102 + # 102 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -1258,7 +1258,7 @@ movl %ecx,%eax roll $9,%ebx addl %edi,%ebx - # 103 + # 103 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -1271,7 +1271,7 @@ movl %ebp,%eax roll $11,%edi addl %esi,%edi - # 104 + # 104 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -1284,7 +1284,7 @@ movl %ebx,%eax roll $7,%esi addl %ecx,%esi - # 105 + # 105 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -1297,7 +1297,7 @@ movl %edi,%eax roll $7,%ecx addl %ebp,%ecx - # 106 + # 106 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -1310,7 +1310,7 @@ movl %esi,%eax roll $12,%ebp addl %ebx,%ebp - # 107 + # 107 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -1323,7 +1323,7 @@ movl %ecx,%eax roll $7,%ebx addl %edi,%ebx - # 108 + # 108 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -1336,7 +1336,7 @@ movl %ebp,%eax roll $6,%edi addl %esi,%edi - # 109 + # 109 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -1349,7 +1349,7 @@ movl %ebx,%eax roll $15,%esi addl %ecx,%esi - # 110 + # 110 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -1362,7 +1362,7 @@ movl %edi,%eax roll $13,%ecx addl %ebp,%ecx - # 111 + # 111 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -1375,7 +1375,7 @@ subl %ecx,%edx roll $11,%ebp addl %ebx,%ebp - # 112 + # 112 movl 60(%esp),%eax orl %ebp,%edx addl %eax,%ebx @@ -1386,7 +1386,7 @@ subl %ebp,%eax roll $9,%ebx addl %edi,%ebx - # 113 + # 113 movl 20(%esp),%edx orl %ebx,%eax addl %edx,%edi @@ -1397,7 +1397,7 @@ subl %ebx,%edx roll $7,%edi addl %esi,%edi - # 114 + # 114 movl 4(%esp),%eax orl %edi,%edx addl %eax,%esi @@ -1408,7 +1408,7 @@ subl %edi,%eax roll $15,%esi addl %ecx,%esi - # 115 + # 115 movl 12(%esp),%edx orl %esi,%eax addl %edx,%ecx @@ -1419,7 +1419,7 @@ subl %esi,%edx roll $11,%ecx addl %ebp,%ecx - # 116 + # 116 movl 28(%esp),%eax orl %ecx,%edx addl %eax,%ebp @@ -1430,7 +1430,7 @@ subl %ecx,%eax roll $8,%ebp addl %ebx,%ebp - # 117 + # 117 movl 56(%esp),%edx orl %ebp,%eax addl %edx,%ebx @@ -1441,7 +1441,7 @@ subl %ebp,%edx roll $6,%ebx addl %edi,%ebx - # 118 + # 118 movl 24(%esp),%eax orl %ebx,%edx addl %eax,%edi @@ -1452,7 +1452,7 @@ subl %ebx,%eax roll $6,%edi addl %esi,%edi - # 119 + # 119 movl 36(%esp),%edx orl %edi,%eax addl %edx,%esi @@ -1463,7 +1463,7 @@ subl %edi,%edx roll $14,%esi addl %ecx,%esi - # 120 + # 120 movl 44(%esp),%eax orl %esi,%edx addl %eax,%ecx @@ -1474,7 +1474,7 @@ subl %esi,%eax roll $12,%ecx addl %ebp,%ecx - # 121 + # 121 movl 32(%esp),%edx orl %ecx,%eax addl %edx,%ebp @@ -1485,7 +1485,7 @@ subl %ecx,%edx roll $13,%ebp addl %ebx,%ebp - # 122 + # 122 movl 48(%esp),%eax orl %ebp,%edx addl %eax,%ebx @@ -1496,7 +1496,7 @@ subl %ebp,%eax roll $5,%ebx addl %edi,%ebx - # 123 + # 123 movl 8(%esp),%edx orl %ebx,%eax addl %edx,%edi @@ -1507,7 +1507,7 @@ subl %ebx,%edx roll $14,%edi addl %esi,%edi - # 124 + # 124 movl 40(%esp),%eax orl %edi,%edx addl %eax,%esi @@ -1518,7 +1518,7 @@ subl %edi,%eax roll $13,%esi addl %ecx,%esi - # 125 + # 125 movl (%esp),%edx orl %esi,%eax addl %edx,%ecx @@ -1529,7 +1529,7 @@ subl %esi,%edx roll $13,%ecx addl %ebp,%ecx - # 126 + # 126 movl 16(%esp),%eax orl %ecx,%edx addl %eax,%ebp @@ -1540,7 +1540,7 @@ subl %ecx,%eax roll $7,%ebp addl %ebx,%ebp - # 127 + # 127 movl 52(%esp),%edx orl %ebp,%eax addl %edx,%ebx @@ -1551,7 +1551,7 @@ movl $-1,%eax roll $5,%ebx addl %edi,%ebx - # 128 + # 128 addl %edx,%edi movl %ebp,%edx subl %ebx,%eax @@ -1564,7 +1564,7 @@ movl $-1,%edx roll $15,%edi addl %esi,%edi - # 129 + # 129 addl %eax,%esi movl %ebx,%eax subl %edi,%edx @@ -1577,7 +1577,7 @@ movl $-1,%eax roll $5,%esi addl %ecx,%esi - # 130 + # 130 addl %edx,%ecx movl %edi,%edx subl %esi,%eax @@ -1590,7 +1590,7 @@ movl $-1,%edx roll $8,%ecx addl %ebp,%ecx - # 131 + # 131 addl %eax,%ebp movl %esi,%eax subl %ecx,%edx @@ -1603,7 +1603,7 @@ movl $-1,%eax roll $11,%ebp addl %ebx,%ebp - # 132 + # 132 addl %edx,%ebx movl %ecx,%edx subl %ebp,%eax @@ -1616,7 +1616,7 @@ movl $-1,%edx roll $14,%ebx addl %edi,%ebx - # 133 + # 133 addl %eax,%edi movl %ebp,%eax subl %ebx,%edx @@ -1629,7 +1629,7 @@ movl $-1,%eax roll $14,%edi addl %esi,%edi - # 134 + # 134 addl %edx,%esi movl %ebx,%edx subl %edi,%eax @@ -1642,7 +1642,7 @@ movl $-1,%edx roll $6,%esi addl %ecx,%esi - # 135 + # 135 addl %eax,%ecx movl %edi,%eax subl %esi,%edx @@ -1655,7 +1655,7 @@ movl $-1,%eax roll $14,%ecx addl %ebp,%ecx - # 136 + # 136 addl %edx,%ebp movl %esi,%edx subl %ecx,%eax @@ -1668,7 +1668,7 @@ movl $-1,%edx roll $6,%ebp addl %ebx,%ebp - # 137 + # 137 addl %eax,%ebx movl %ecx,%eax subl %ebp,%edx @@ -1681,7 +1681,7 @@ movl $-1,%eax roll $9,%ebx addl %edi,%ebx - # 138 + # 138 addl %edx,%edi movl %ebp,%edx subl %ebx,%eax @@ -1694,7 +1694,7 @@ movl $-1,%edx roll $12,%edi addl %esi,%edi - # 139 + # 139 addl %eax,%esi movl %ebx,%eax subl %edi,%edx @@ -1707,7 +1707,7 @@ movl $-1,%eax roll $9,%esi addl %ecx,%esi - # 140 + # 140 addl %edx,%ecx movl %edi,%edx subl %esi,%eax @@ -1720,7 +1720,7 @@ movl $-1,%edx roll $12,%ecx addl %ebp,%ecx - # 141 + # 141 addl %eax,%ebp movl %esi,%eax subl %ecx,%edx @@ -1733,7 +1733,7 @@ movl $-1,%eax roll $5,%ebp addl %ebx,%ebp - # 142 + # 142 addl %edx,%ebx movl %ecx,%edx subl %ebp,%eax @@ -1746,7 +1746,7 @@ movl $-1,%edx roll $15,%ebx addl %edi,%ebx - # 143 + # 143 addl %eax,%edi movl %ebp,%eax subl %ebx,%edx @@ -1759,7 +1759,7 @@ xorl %ebp,%eax roll $8,%edi addl %esi,%edi - # 144 + # 144 movl 48(%esp),%edx xorl %edi,%eax addl %edx,%esi @@ -1768,7 +1768,7 @@ movl %edi,%eax roll $8,%esi addl %ecx,%esi - # 145 + # 145 xorl %ebx,%eax movl 60(%esp),%edx xorl %esi,%eax @@ -1779,7 +1779,7 @@ xorl %edi,%eax roll $5,%ecx addl %ebp,%ecx - # 146 + # 146 movl 40(%esp),%edx xorl %ecx,%eax addl %edx,%ebp @@ -1788,7 +1788,7 @@ movl %ecx,%eax roll $12,%ebp addl %ebx,%ebp - # 147 + # 147 xorl %esi,%eax movl 16(%esp),%edx xorl %ebp,%eax @@ -1799,7 +1799,7 @@ xorl %ecx,%eax roll $9,%ebx addl %edi,%ebx - # 148 + # 148 movl 4(%esp),%edx xorl %ebx,%eax addl %edx,%edi @@ -1808,7 +1808,7 @@ movl %ebx,%eax roll $12,%edi addl %esi,%edi - # 149 + # 149 xorl %ebp,%eax movl 20(%esp),%edx xorl %edi,%eax @@ -1819,7 +1819,7 @@ xorl %ebx,%eax roll $5,%esi addl %ecx,%esi - # 150 + # 150 movl 32(%esp),%edx xorl %esi,%eax addl %edx,%ecx @@ -1828,7 +1828,7 @@ movl %esi,%eax roll $14,%ecx addl %ebp,%ecx - # 151 + # 151 xorl %edi,%eax movl 28(%esp),%edx xorl %ecx,%eax @@ -1839,7 +1839,7 @@ xorl %esi,%eax roll $6,%ebp addl %ebx,%ebp - # 152 + # 152 movl 24(%esp),%edx xorl %ebp,%eax addl %edx,%ebx @@ -1848,7 +1848,7 @@ movl %ebp,%eax roll $8,%ebx addl %edi,%ebx - # 153 + # 153 xorl %ecx,%eax movl 8(%esp),%edx xorl %ebx,%eax @@ -1859,7 +1859,7 @@ xorl %ebp,%eax roll $13,%edi addl %esi,%edi - # 154 + # 154 movl 52(%esp),%edx xorl %edi,%eax addl %edx,%esi @@ -1868,7 +1868,7 @@ movl %edi,%eax roll $6,%esi addl %ecx,%esi - # 155 + # 155 xorl %ebx,%eax movl 56(%esp),%edx xorl %esi,%eax @@ -1879,7 +1879,7 @@ xorl %edi,%eax roll $5,%ecx addl %ebp,%ecx - # 156 + # 156 movl (%esp),%edx xorl %ecx,%eax addl %edx,%ebp @@ -1888,7 +1888,7 @@ movl %ecx,%eax roll $15,%ebp addl %ebx,%ebp - # 157 + # 157 xorl %esi,%eax movl 12(%esp),%edx xorl %ebp,%eax @@ -1899,7 +1899,7 @@ xorl %ecx,%eax roll $13,%ebx addl %edi,%ebx - # 158 + # 158 movl 36(%esp),%edx xorl %ebx,%eax addl %edx,%edi @@ -1908,7 +1908,7 @@ movl %ebx,%eax roll $11,%edi addl %esi,%edi - # 159 + # 159 xorl %ebp,%eax movl 44(%esp),%edx xorl %edi,%eax diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/sha/sha1-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/sha/sha1-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/crypto/sha/sha1-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/crypto/sha/sha1-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -95,7 +95,7 @@ movl 4(%ebp),%ebx movl 8(%ebp),%ecx movl 12(%ebp),%edx - # 00_15 0 + # 00_15 0 movl %ecx,%esi movl %eax,%ebp roll $5,%ebp @@ -107,7 +107,7 @@ xorl %edx,%esi leal 1518500249(%ebp,%edi,1),%ebp addl %esi,%ebp - # 00_15 1 + # 00_15 1 movl %ebx,%edi movl %ebp,%esi roll $5,%ebp @@ -119,7 +119,7 @@ xorl %ecx,%edi leal 1518500249(%ebp,%edx,1),%ebp addl %edi,%ebp - # 00_15 2 + # 00_15 2 movl %eax,%edx movl %ebp,%edi roll $5,%ebp @@ -131,7 +131,7 @@ xorl %ebx,%edx leal 1518500249(%ebp,%ecx,1),%ebp addl %edx,%ebp - # 00_15 3 + # 00_15 3 movl %esi,%ecx movl %ebp,%edx roll $5,%ebp @@ -143,7 +143,7 @@ xorl %eax,%ecx leal 1518500249(%ebp,%ebx,1),%ebp addl %ecx,%ebp - # 00_15 4 + # 00_15 4 movl %edi,%ebx movl %ebp,%ecx roll $5,%ebp @@ -155,7 +155,7 @@ xorl %esi,%ebx leal 1518500249(%ebp,%eax,1),%ebp addl %ebx,%ebp - # 00_15 5 + # 00_15 5 movl %edx,%eax movl %ebp,%ebx roll $5,%ebp @@ -167,7 +167,7 @@ xorl %edi,%eax leal 1518500249(%ebp,%esi,1),%ebp addl %eax,%ebp - # 00_15 6 + # 00_15 6 movl %ecx,%esi movl %ebp,%eax roll $5,%ebp @@ -179,7 +179,7 @@ xorl %edx,%esi leal 1518500249(%ebp,%edi,1),%ebp addl %esi,%ebp - # 00_15 7 + # 00_15 7 movl %ebx,%edi movl %ebp,%esi roll $5,%ebp @@ -191,7 +191,7 @@ xorl %ecx,%edi leal 1518500249(%ebp,%edx,1),%ebp addl %edi,%ebp - # 00_15 8 + # 00_15 8 movl %eax,%edx movl %ebp,%edi roll $5,%ebp @@ -203,7 +203,7 @@ xorl %ebx,%edx leal 1518500249(%ebp,%ecx,1),%ebp addl %edx,%ebp - # 00_15 9 + # 00_15 9 movl %esi,%ecx movl %ebp,%edx roll $5,%ebp @@ -215,7 +215,7 @@ xorl %eax,%ecx leal 1518500249(%ebp,%ebx,1),%ebp addl %ecx,%ebp - # 00_15 10 + # 00_15 10 movl %edi,%ebx movl %ebp,%ecx roll $5,%ebp @@ -227,7 +227,7 @@ xorl %esi,%ebx leal 1518500249(%ebp,%eax,1),%ebp addl %ebx,%ebp - # 00_15 11 + # 00_15 11 movl %edx,%eax movl %ebp,%ebx roll $5,%ebp @@ -239,7 +239,7 @@ xorl %edi,%eax leal 1518500249(%ebp,%esi,1),%ebp addl %eax,%ebp - # 00_15 12 + # 00_15 12 movl %ecx,%esi movl %ebp,%eax roll $5,%ebp @@ -251,7 +251,7 @@ xorl %edx,%esi leal 1518500249(%ebp,%edi,1),%ebp addl %esi,%ebp - # 00_15 13 + # 00_15 13 movl %ebx,%edi movl %ebp,%esi roll $5,%ebp @@ -263,7 +263,7 @@ xorl %ecx,%edi leal 1518500249(%ebp,%edx,1),%ebp addl %edi,%ebp - # 00_15 14 + # 00_15 14 movl %eax,%edx movl %ebp,%edi roll $5,%ebp @@ -275,7 +275,7 @@ xorl %ebx,%edx leal 1518500249(%ebp,%ecx,1),%ebp addl %edx,%ebp - # 00_15 15 + # 00_15 15 movl %esi,%ecx movl %ebp,%edx roll $5,%ebp @@ -288,7 +288,7 @@ leal 1518500249(%ebp,%ebx,1),%ebp movl (%esp),%ebx addl %ebp,%ecx - # 16_19 16 + # 16_19 16 movl %edi,%ebp xorl 8(%esp),%ebx xorl %esi,%ebp @@ -305,7 +305,7 @@ leal 1518500249(%ebx,%eax,1),%ebx movl 4(%esp),%eax addl %ebp,%ebx - # 16_19 17 + # 16_19 17 movl %edx,%ebp xorl 12(%esp),%eax xorl %edi,%ebp @@ -322,7 +322,7 @@ leal 1518500249(%eax,%esi,1),%eax movl 8(%esp),%esi addl %ebp,%eax - # 16_19 18 + # 16_19 18 movl %ecx,%ebp xorl 16(%esp),%esi xorl %edx,%ebp @@ -339,7 +339,7 @@ leal 1518500249(%esi,%edi,1),%esi movl 12(%esp),%edi addl %ebp,%esi - # 16_19 19 + # 16_19 19 movl %ebx,%ebp xorl 20(%esp),%edi xorl %ecx,%ebp @@ -356,7 +356,7 @@ leal 1518500249(%edi,%edx,1),%edi movl 16(%esp),%edx addl %ebp,%edi - # 20_39 20 + # 20_39 20 movl %esi,%ebp xorl 24(%esp),%edx xorl %eax,%ebp @@ -372,7 +372,7 @@ leal 1859775393(%edx,%ecx,1),%edx movl 20(%esp),%ecx addl %ebp,%edx - # 20_39 21 + # 20_39 21 movl %edi,%ebp xorl 28(%esp),%ecx xorl %esi,%ebp @@ -388,7 +388,7 @@ leal 1859775393(%ecx,%ebx,1),%ecx movl 24(%esp),%ebx addl %ebp,%ecx - # 20_39 22 + # 20_39 22 movl %edx,%ebp xorl 32(%esp),%ebx xorl %edi,%ebp @@ -404,7 +404,7 @@ leal 1859775393(%ebx,%eax,1),%ebx movl 28(%esp),%eax addl %ebp,%ebx - # 20_39 23 + # 20_39 23 movl %ecx,%ebp xorl 36(%esp),%eax xorl %edx,%ebp @@ -420,7 +420,7 @@ leal 1859775393(%eax,%esi,1),%eax movl 32(%esp),%esi addl %ebp,%eax - # 20_39 24 + # 20_39 24 movl %ebx,%ebp xorl 40(%esp),%esi xorl %ecx,%ebp @@ -436,7 +436,7 @@ leal 1859775393(%esi,%edi,1),%esi movl 36(%esp),%edi addl %ebp,%esi - # 20_39 25 + # 20_39 25 movl %eax,%ebp xorl 44(%esp),%edi xorl %ebx,%ebp @@ -452,7 +452,7 @@ leal 1859775393(%edi,%edx,1),%edi movl 40(%esp),%edx addl %ebp,%edi - # 20_39 26 + # 20_39 26 movl %esi,%ebp xorl 48(%esp),%edx xorl %eax,%ebp @@ -468,7 +468,7 @@ leal 1859775393(%edx,%ecx,1),%edx movl 44(%esp),%ecx addl %ebp,%edx - # 20_39 27 + # 20_39 27 movl %edi,%ebp xorl 52(%esp),%ecx xorl %esi,%ebp @@ -484,7 +484,7 @@ leal 1859775393(%ecx,%ebx,1),%ecx movl 48(%esp),%ebx addl %ebp,%ecx - # 20_39 28 + # 20_39 28 movl %edx,%ebp xorl 56(%esp),%ebx xorl %edi,%ebp @@ -500,7 +500,7 @@ leal 1859775393(%ebx,%eax,1),%ebx movl 52(%esp),%eax addl %ebp,%ebx - # 20_39 29 + # 20_39 29 movl %ecx,%ebp xorl 60(%esp),%eax xorl %edx,%ebp @@ -516,7 +516,7 @@ leal 1859775393(%eax,%esi,1),%eax movl 56(%esp),%esi addl %ebp,%eax - # 20_39 30 + # 20_39 30 movl %ebx,%ebp xorl (%esp),%esi xorl %ecx,%ebp @@ -532,7 +532,7 @@ leal 1859775393(%esi,%edi,1),%esi movl 60(%esp),%edi addl %ebp,%esi - # 20_39 31 + # 20_39 31 movl %eax,%ebp xorl 4(%esp),%edi xorl %ebx,%ebp @@ -548,7 +548,7 @@ leal 1859775393(%edi,%edx,1),%edi movl (%esp),%edx addl %ebp,%edi - # 20_39 32 + # 20_39 32 movl %esi,%ebp xorl 8(%esp),%edx xorl %eax,%ebp @@ -564,7 +564,7 @@ leal 1859775393(%edx,%ecx,1),%edx movl 4(%esp),%ecx addl %ebp,%edx - # 20_39 33 + # 20_39 33 movl %edi,%ebp xorl 12(%esp),%ecx xorl %esi,%ebp @@ -580,7 +580,7 @@ leal 1859775393(%ecx,%ebx,1),%ecx movl 8(%esp),%ebx addl %ebp,%ecx - # 20_39 34 + # 20_39 34 movl %edx,%ebp xorl 16(%esp),%ebx xorl %edi,%ebp @@ -596,7 +596,7 @@ leal 1859775393(%ebx,%eax,1),%ebx movl 12(%esp),%eax addl %ebp,%ebx - # 20_39 35 + # 20_39 35 movl %ecx,%ebp xorl 20(%esp),%eax xorl %edx,%ebp @@ -612,7 +612,7 @@ leal 1859775393(%eax,%esi,1),%eax movl 16(%esp),%esi addl %ebp,%eax - # 20_39 36 + # 20_39 36 movl %ebx,%ebp xorl 24(%esp),%esi xorl %ecx,%ebp @@ -628,7 +628,7 @@ leal 1859775393(%esi,%edi,1),%esi movl 20(%esp),%edi addl %ebp,%esi - # 20_39 37 + # 20_39 37 movl %eax,%ebp xorl 28(%esp),%edi xorl %ebx,%ebp @@ -644,7 +644,7 @@ leal 1859775393(%edi,%edx,1),%edi movl 24(%esp),%edx addl %ebp,%edi - # 20_39 38 + # 20_39 38 movl %esi,%ebp xorl 32(%esp),%edx xorl %eax,%ebp @@ -660,7 +660,7 @@ leal 1859775393(%edx,%ecx,1),%edx movl 28(%esp),%ecx addl %ebp,%edx - # 20_39 39 + # 20_39 39 movl %edi,%ebp xorl 36(%esp),%ecx xorl %esi,%ebp @@ -676,7 +676,7 @@ leal 1859775393(%ecx,%ebx,1),%ecx movl 32(%esp),%ebx addl %ebp,%ecx - # 40_59 40 + # 40_59 40 movl %edi,%ebp xorl 40(%esp),%ebx xorl %esi,%ebp @@ -695,7 +695,7 @@ andl %esi,%ebp movl 36(%esp),%eax addl %ebp,%ebx - # 40_59 41 + # 40_59 41 movl %edx,%ebp xorl 44(%esp),%eax xorl %edi,%ebp @@ -714,7 +714,7 @@ andl %edi,%ebp movl 40(%esp),%esi addl %ebp,%eax - # 40_59 42 + # 40_59 42 movl %ecx,%ebp xorl 48(%esp),%esi xorl %edx,%ebp @@ -733,7 +733,7 @@ andl %edx,%ebp movl 44(%esp),%edi addl %ebp,%esi - # 40_59 43 + # 40_59 43 movl %ebx,%ebp xorl 52(%esp),%edi xorl %ecx,%ebp @@ -752,7 +752,7 @@ andl %ecx,%ebp movl 48(%esp),%edx addl %ebp,%edi - # 40_59 44 + # 40_59 44 movl %eax,%ebp xorl 56(%esp),%edx xorl %ebx,%ebp @@ -771,7 +771,7 @@ andl %ebx,%ebp movl 52(%esp),%ecx addl %ebp,%edx - # 40_59 45 + # 40_59 45 movl %esi,%ebp xorl 60(%esp),%ecx xorl %eax,%ebp @@ -790,7 +790,7 @@ andl %eax,%ebp movl 56(%esp),%ebx addl %ebp,%ecx - # 40_59 46 + # 40_59 46 movl %edi,%ebp xorl (%esp),%ebx xorl %esi,%ebp @@ -809,7 +809,7 @@ andl %esi,%ebp movl 60(%esp),%eax addl %ebp,%ebx - # 40_59 47 + # 40_59 47 movl %edx,%ebp xorl 4(%esp),%eax xorl %edi,%ebp @@ -828,7 +828,7 @@ andl %edi,%ebp movl (%esp),%esi addl %ebp,%eax - # 40_59 48 + # 40_59 48 movl %ecx,%ebp xorl 8(%esp),%esi xorl %edx,%ebp @@ -847,7 +847,7 @@ andl %edx,%ebp movl 4(%esp),%edi addl %ebp,%esi - # 40_59 49 + # 40_59 49 movl %ebx,%ebp xorl 12(%esp),%edi xorl %ecx,%ebp @@ -866,7 +866,7 @@ andl %ecx,%ebp movl 8(%esp),%edx addl %ebp,%edi - # 40_59 50 + # 40_59 50 movl %eax,%ebp xorl 16(%esp),%edx xorl %ebx,%ebp @@ -885,7 +885,7 @@ andl %ebx,%ebp movl 12(%esp),%ecx addl %ebp,%edx - # 40_59 51 + # 40_59 51 movl %esi,%ebp xorl 20(%esp),%ecx xorl %eax,%ebp @@ -904,7 +904,7 @@ andl %eax,%ebp movl 16(%esp),%ebx addl %ebp,%ecx - # 40_59 52 + # 40_59 52 movl %edi,%ebp xorl 24(%esp),%ebx xorl %esi,%ebp @@ -923,7 +923,7 @@ andl %esi,%ebp movl 20(%esp),%eax addl %ebp,%ebx - # 40_59 53 + # 40_59 53 movl %edx,%ebp xorl 28(%esp),%eax xorl %edi,%ebp @@ -942,7 +942,7 @@ andl %edi,%ebp movl 24(%esp),%esi addl %ebp,%eax - # 40_59 54 + # 40_59 54 movl %ecx,%ebp xorl 32(%esp),%esi xorl %edx,%ebp @@ -961,7 +961,7 @@ andl %edx,%ebp movl 28(%esp),%edi addl %ebp,%esi - # 40_59 55 + # 40_59 55 movl %ebx,%ebp xorl 36(%esp),%edi xorl %ecx,%ebp @@ -980,7 +980,7 @@ andl %ecx,%ebp movl 32(%esp),%edx addl %ebp,%edi - # 40_59 56 + # 40_59 56 movl %eax,%ebp xorl 40(%esp),%edx xorl %ebx,%ebp @@ -999,7 +999,7 @@ andl %ebx,%ebp movl 36(%esp),%ecx addl %ebp,%edx - # 40_59 57 + # 40_59 57 movl %esi,%ebp xorl 44(%esp),%ecx xorl %eax,%ebp @@ -1018,7 +1018,7 @@ andl %eax,%ebp movl 40(%esp),%ebx addl %ebp,%ecx - # 40_59 58 + # 40_59 58 movl %edi,%ebp xorl 48(%esp),%ebx xorl %esi,%ebp @@ -1037,7 +1037,7 @@ andl %esi,%ebp movl 44(%esp),%eax addl %ebp,%ebx - # 40_59 59 + # 40_59 59 movl %edx,%ebp xorl 52(%esp),%eax xorl %edi,%ebp @@ -1056,7 +1056,7 @@ andl %edi,%ebp movl 48(%esp),%esi addl %ebp,%eax - # 20_39 60 + # 20_39 60 movl %ebx,%ebp xorl 56(%esp),%esi xorl %ecx,%ebp @@ -1072,7 +1072,7 @@ leal 3395469782(%esi,%edi,1),%esi movl 52(%esp),%edi addl %ebp,%esi - # 20_39 61 + # 20_39 61 movl %eax,%ebp xorl 60(%esp),%edi xorl %ebx,%ebp @@ -1088,7 +1088,7 @@ leal 3395469782(%edi,%edx,1),%edi movl 56(%esp),%edx addl %ebp,%edi - # 20_39 62 + # 20_39 62 movl %esi,%ebp xorl (%esp),%edx xorl %eax,%ebp @@ -1104,7 +1104,7 @@ leal 3395469782(%edx,%ecx,1),%edx movl 60(%esp),%ecx addl %ebp,%edx - # 20_39 63 + # 20_39 63 movl %edi,%ebp xorl 4(%esp),%ecx xorl %esi,%ebp @@ -1120,7 +1120,7 @@ leal 3395469782(%ecx,%ebx,1),%ecx movl (%esp),%ebx addl %ebp,%ecx - # 20_39 64 + # 20_39 64 movl %edx,%ebp xorl 8(%esp),%ebx xorl %edi,%ebp @@ -1136,7 +1136,7 @@ leal 3395469782(%ebx,%eax,1),%ebx movl 4(%esp),%eax addl %ebp,%ebx - # 20_39 65 + # 20_39 65 movl %ecx,%ebp xorl 12(%esp),%eax xorl %edx,%ebp @@ -1152,7 +1152,7 @@ leal 3395469782(%eax,%esi,1),%eax movl 8(%esp),%esi addl %ebp,%eax - # 20_39 66 + # 20_39 66 movl %ebx,%ebp xorl 16(%esp),%esi xorl %ecx,%ebp @@ -1168,7 +1168,7 @@ leal 3395469782(%esi,%edi,1),%esi movl 12(%esp),%edi addl %ebp,%esi - # 20_39 67 + # 20_39 67 movl %eax,%ebp xorl 20(%esp),%edi xorl %ebx,%ebp @@ -1184,7 +1184,7 @@ leal 3395469782(%edi,%edx,1),%edi movl 16(%esp),%edx addl %ebp,%edi - # 20_39 68 + # 20_39 68 movl %esi,%ebp xorl 24(%esp),%edx xorl %eax,%ebp @@ -1200,7 +1200,7 @@ leal 3395469782(%edx,%ecx,1),%edx movl 20(%esp),%ecx addl %ebp,%edx - # 20_39 69 + # 20_39 69 movl %edi,%ebp xorl 28(%esp),%ecx xorl %esi,%ebp @@ -1216,7 +1216,7 @@ leal 3395469782(%ecx,%ebx,1),%ecx movl 24(%esp),%ebx addl %ebp,%ecx - # 20_39 70 + # 20_39 70 movl %edx,%ebp xorl 32(%esp),%ebx xorl %edi,%ebp @@ -1232,7 +1232,7 @@ leal 3395469782(%ebx,%eax,1),%ebx movl 28(%esp),%eax addl %ebp,%ebx - # 20_39 71 + # 20_39 71 movl %ecx,%ebp xorl 36(%esp),%eax xorl %edx,%ebp @@ -1248,7 +1248,7 @@ leal 3395469782(%eax,%esi,1),%eax movl 32(%esp),%esi addl %ebp,%eax - # 20_39 72 + # 20_39 72 movl %ebx,%ebp xorl 40(%esp),%esi xorl %ecx,%ebp @@ -1264,7 +1264,7 @@ leal 3395469782(%esi,%edi,1),%esi movl 36(%esp),%edi addl %ebp,%esi - # 20_39 73 + # 20_39 73 movl %eax,%ebp xorl 44(%esp),%edi xorl %ebx,%ebp @@ -1280,7 +1280,7 @@ leal 3395469782(%edi,%edx,1),%edi movl 40(%esp),%edx addl %ebp,%edi - # 20_39 74 + # 20_39 74 movl %esi,%ebp xorl 48(%esp),%edx xorl %eax,%ebp @@ -1296,7 +1296,7 @@ leal 3395469782(%edx,%ecx,1),%edx movl 44(%esp),%ecx addl %ebp,%edx - # 20_39 75 + # 20_39 75 movl %edi,%ebp xorl 52(%esp),%ecx xorl %esi,%ebp @@ -1312,7 +1312,7 @@ leal 3395469782(%ecx,%ebx,1),%ecx movl 48(%esp),%ebx addl %ebp,%ecx - # 20_39 76 + # 20_39 76 movl %edx,%ebp xorl 56(%esp),%ebx xorl %edi,%ebp @@ -1328,7 +1328,7 @@ leal 3395469782(%ebx,%eax,1),%ebx movl 52(%esp),%eax addl %ebp,%ebx - # 20_39 77 + # 20_39 77 movl %ecx,%ebp xorl 60(%esp),%eax xorl %edx,%ebp @@ -1343,7 +1343,7 @@ leal 3395469782(%eax,%esi,1),%eax movl 56(%esp),%esi addl %ebp,%eax - # 20_39 78 + # 20_39 78 movl %ebx,%ebp xorl (%esp),%esi xorl %ecx,%ebp @@ -1358,7 +1358,7 @@ leal 3395469782(%esi,%edi,1),%esi movl 60(%esp),%edi addl %ebp,%esi - # 20_39 79 + # 20_39 79 movl %eax,%ebp xorl 4(%esp),%edi xorl %ebx,%ebp diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -114,6 +114,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "BSD-x86" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "BSD-x86", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1172,6 +1172,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8990,6 +8995,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9567,6 +9576,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14292,6 +14302,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15263,19 +15281,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } @@ -15448,3 +15469,4 @@ =back =cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bf/bf-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bf/bf-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bf/bf-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bf/bf-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ movl 16(%esp),%ebp pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words movl (%ebx),%edi movl 4(%ebx),%esi xorl %eax,%eax @@ -19,7 +19,7 @@ xorl %ecx,%ecx xorl %ebx,%edi - # Round 0 + # Round 0 movl 4(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -39,7 +39,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 1 + # Round 1 movl 8(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -59,7 +59,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 2 + # Round 2 movl 12(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -79,7 +79,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 3 + # Round 3 movl 16(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -99,7 +99,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 4 + # Round 4 movl 20(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -119,7 +119,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 5 + # Round 5 movl 24(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -139,7 +139,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 6 + # Round 6 movl 28(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -159,7 +159,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 7 + # Round 7 movl 32(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -179,7 +179,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 8 + # Round 8 movl 36(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -199,7 +199,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 9 + # Round 9 movl 40(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -219,7 +219,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 10 + # Round 10 movl 44(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -239,7 +239,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 11 + # Round 11 movl 48(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -259,7 +259,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 12 + # Round 12 movl 52(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -279,7 +279,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 13 + # Round 13 movl 56(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -299,7 +299,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 14 + # Round 14 movl 60(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -319,7 +319,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 15 + # Round 15 movl 64(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -336,7 +336,7 @@ xorl %eax,%ebx movl 3144(%ebp,%edx,4),%edx addl %edx,%ebx - # Load parameter 0 (16) enc=1 + # Load parameter 0 (16) enc=1 movl 20(%esp),%eax xorl %ebx,%edi movl 68(%ebp),%edx @@ -360,7 +360,7 @@ movl 16(%esp),%ebp pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words movl (%ebx),%edi movl 4(%ebx),%esi xorl %eax,%eax @@ -368,7 +368,7 @@ xorl %ecx,%ecx xorl %ebx,%edi - # Round 16 + # Round 16 movl 64(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -388,7 +388,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 15 + # Round 15 movl 60(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -408,7 +408,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 14 + # Round 14 movl 56(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -428,7 +428,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 13 + # Round 13 movl 52(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -448,7 +448,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 12 + # Round 12 movl 48(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -468,7 +468,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 11 + # Round 11 movl 44(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -488,7 +488,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 10 + # Round 10 movl 40(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -508,7 +508,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 9 + # Round 9 movl 36(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -528,7 +528,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 8 + # Round 8 movl 32(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -548,7 +548,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 7 + # Round 7 movl 28(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -568,7 +568,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 6 + # Round 6 movl 24(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -588,7 +588,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 5 + # Round 5 movl 20(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -608,7 +608,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 4 + # Round 4 movl 16(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -628,7 +628,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 3 + # Round 3 movl 12(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -648,7 +648,7 @@ xorl %eax,%eax xorl %ebx,%edi - # Round 2 + # Round 2 movl 8(%ebp),%edx movl %edi,%ebx xorl %edx,%esi @@ -668,7 +668,7 @@ xorl %eax,%eax xorl %ebx,%esi - # Round 1 + # Round 1 movl 4(%ebp),%edx movl %esi,%ebx xorl %edx,%edi @@ -685,7 +685,7 @@ xorl %eax,%ebx movl 3144(%ebp,%edx,4),%edx addl %edx,%ebx - # Load parameter 0 (1) enc=0 + # Load parameter 0 (1) enc=0 movl 20(%esp),%eax xorl %ebx,%edi movl (%ebp),%edx @@ -708,7 +708,7 @@ pushl %esi pushl %edi movl 28(%esp),%ebp - # getting iv ptr from parameter 4 + # getting iv ptr from parameter 4 movl 36(%esp),%ebx movl (%ebx),%esi movl 4(%ebx),%edi @@ -719,9 +719,9 @@ movl %esp,%ebx movl 36(%esp),%esi movl 40(%esp),%edi - # getting encrypt flag from parameter 5 + # getting encrypt flag from parameter 5 movl 56(%esp),%ecx - # get and push parameter 3 + # get and push parameter 3 movl 48(%esp),%eax pushl %eax pushl %ebx diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bn/bn-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bn/bn-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bn/bn-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bn/bn-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -116,7 +116,7 @@ jz L006maw_finish .align 4,0x90 L007maw_loop: - # Round 0 + # Round 0 movl (%ebx),%eax mull %ebp addl %esi,%eax @@ -125,7 +125,7 @@ adcl $0,%edx movl %eax,(%edi) movl %edx,%esi - # Round 4 + # Round 4 movl 4(%ebx),%eax mull %ebp addl %esi,%eax @@ -134,7 +134,7 @@ adcl $0,%edx movl %eax,4(%edi) movl %edx,%esi - # Round 8 + # Round 8 movl 8(%ebx),%eax mull %ebp addl %esi,%eax @@ -143,7 +143,7 @@ adcl $0,%edx movl %eax,8(%edi) movl %edx,%esi - # Round 12 + # Round 12 movl 12(%ebx),%eax mull %ebp addl %esi,%eax @@ -152,7 +152,7 @@ adcl $0,%edx movl %eax,12(%edi) movl %edx,%esi - # Round 16 + # Round 16 movl 16(%ebx),%eax mull %ebp addl %esi,%eax @@ -161,7 +161,7 @@ adcl $0,%edx movl %eax,16(%edi) movl %edx,%esi - # Round 20 + # Round 20 movl 20(%ebx),%eax mull %ebp addl %esi,%eax @@ -170,7 +170,7 @@ adcl $0,%edx movl %eax,20(%edi) movl %edx,%esi - # Round 24 + # Round 24 movl 24(%ebx),%eax mull %ebp addl %esi,%eax @@ -179,7 +179,7 @@ adcl $0,%edx movl %eax,24(%edi) movl %edx,%esi - # Round 28 + # Round 28 movl 28(%ebx),%eax mull %ebp addl %esi,%eax @@ -199,7 +199,7 @@ jnz L008maw_finish2 jmp L009maw_end L008maw_finish2: - # Tail Round 0 + # Tail Round 0 movl (%ebx),%eax mull %ebp addl %esi,%eax @@ -210,7 +210,7 @@ movl %eax,(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 1 + # Tail Round 1 movl 4(%ebx),%eax mull %ebp addl %esi,%eax @@ -221,7 +221,7 @@ movl %eax,4(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 2 + # Tail Round 2 movl 8(%ebx),%eax mull %ebp addl %esi,%eax @@ -232,7 +232,7 @@ movl %eax,8(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 3 + # Tail Round 3 movl 12(%ebx),%eax mull %ebp addl %esi,%eax @@ -243,7 +243,7 @@ movl %eax,12(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 4 + # Tail Round 4 movl 16(%ebx),%eax mull %ebp addl %esi,%eax @@ -254,7 +254,7 @@ movl %eax,16(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 5 + # Tail Round 5 movl 20(%ebx),%eax mull %ebp addl %esi,%eax @@ -265,7 +265,7 @@ movl %eax,20(%edi) movl %edx,%esi jz L009maw_end - # Tail Round 6 + # Tail Round 6 movl 24(%ebx),%eax mull %ebp addl %esi,%eax @@ -328,56 +328,56 @@ andl $4294967288,%ebp jz L013mw_finish L014mw_loop: - # Round 0 + # Round 0 movl (%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,(%edi) movl %edx,%esi - # Round 4 + # Round 4 movl 4(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,4(%edi) movl %edx,%esi - # Round 8 + # Round 8 movl 8(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,8(%edi) movl %edx,%esi - # Round 12 + # Round 12 movl 12(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,12(%edi) movl %edx,%esi - # Round 16 + # Round 16 movl 16(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,16(%edi) movl %edx,%esi - # Round 20 + # Round 20 movl 20(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,20(%edi) movl %edx,%esi - # Round 24 + # Round 24 movl 24(%ebx),%eax mull %ecx addl %esi,%eax adcl $0,%edx movl %eax,24(%edi) movl %edx,%esi - # Round 28 + # Round 28 movl 28(%ebx),%eax mull %ecx addl %esi,%eax @@ -396,7 +396,7 @@ jnz L015mw_finish2 jmp L016mw_end L015mw_finish2: - # Tail Round 0 + # Tail Round 0 movl (%ebx),%eax mull %ecx addl %esi,%eax @@ -405,7 +405,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 1 + # Tail Round 1 movl 4(%ebx),%eax mull %ecx addl %esi,%eax @@ -414,7 +414,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 2 + # Tail Round 2 movl 8(%ebx),%eax mull %ecx addl %esi,%eax @@ -423,7 +423,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 3 + # Tail Round 3 movl 12(%ebx),%eax mull %ecx addl %esi,%eax @@ -432,7 +432,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 4 + # Tail Round 4 movl 16(%ebx),%eax mull %ecx addl %esi,%eax @@ -441,7 +441,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 5 + # Tail Round 5 movl 20(%ebx),%eax mull %ecx addl %esi,%eax @@ -450,7 +450,7 @@ movl %edx,%esi decl %ebp jz L016mw_end - # Tail Round 6 + # Tail Round 6 movl 24(%ebx),%eax mull %ecx addl %esi,%eax @@ -503,42 +503,42 @@ andl $4294967288,%ebx jz L020sw_finish L021sw_loop: - # Round 0 + # Round 0 movl (%edi),%eax mull %eax movl %eax,(%esi) movl %edx,4(%esi) - # Round 4 + # Round 4 movl 4(%edi),%eax mull %eax movl %eax,8(%esi) movl %edx,12(%esi) - # Round 8 + # Round 8 movl 8(%edi),%eax mull %eax movl %eax,16(%esi) movl %edx,20(%esi) - # Round 12 + # Round 12 movl 12(%edi),%eax mull %eax movl %eax,24(%esi) movl %edx,28(%esi) - # Round 16 + # Round 16 movl 16(%edi),%eax mull %eax movl %eax,32(%esi) movl %edx,36(%esi) - # Round 20 + # Round 20 movl 20(%edi),%eax mull %eax movl %eax,40(%esi) movl %edx,44(%esi) - # Round 24 + # Round 24 movl 24(%edi),%eax mull %eax movl %eax,48(%esi) movl %edx,52(%esi) - # Round 28 + # Round 28 movl 28(%edi),%eax mull %eax movl %eax,56(%esi) @@ -552,49 +552,49 @@ movl 28(%esp),%ebx andl $7,%ebx jz L022sw_end - # Tail Round 0 + # Tail Round 0 movl (%edi),%eax mull %eax movl %eax,(%esi) decl %ebx movl %edx,4(%esi) jz L022sw_end - # Tail Round 1 + # Tail Round 1 movl 4(%edi),%eax mull %eax movl %eax,8(%esi) decl %ebx movl %edx,12(%esi) jz L022sw_end - # Tail Round 2 + # Tail Round 2 movl 8(%edi),%eax mull %eax movl %eax,16(%esi) decl %ebx movl %edx,20(%esi) jz L022sw_end - # Tail Round 3 + # Tail Round 3 movl 12(%edi),%eax mull %eax movl %eax,24(%esi) decl %ebx movl %edx,28(%esi) jz L022sw_end - # Tail Round 4 + # Tail Round 4 movl 16(%edi),%eax mull %eax movl %eax,32(%esi) decl %ebx movl %edx,36(%esi) jz L022sw_end - # Tail Round 5 + # Tail Round 5 movl 20(%edi),%eax mull %eax movl %eax,40(%esi) decl %ebx movl %edx,44(%esi) jz L022sw_end - # Tail Round 6 + # Tail Round 6 movl 24(%edi),%eax mull %eax movl %eax,48(%esi) @@ -633,7 +633,7 @@ andl $4294967288,%ebp jz L023aw_finish L024aw_loop: - # Round 0 + # Round 0 movl (%esi),%ecx movl (%edi),%edx addl %eax,%ecx @@ -642,7 +642,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,(%ebx) - # Round 1 + # Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx addl %eax,%ecx @@ -651,7 +651,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,4(%ebx) - # Round 2 + # Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx addl %eax,%ecx @@ -660,7 +660,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,8(%ebx) - # Round 3 + # Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx addl %eax,%ecx @@ -669,7 +669,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,12(%ebx) - # Round 4 + # Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx addl %eax,%ecx @@ -678,7 +678,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,16(%ebx) - # Round 5 + # Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx addl %eax,%ecx @@ -687,7 +687,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,20(%ebx) - # Round 6 + # Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx addl %eax,%ecx @@ -696,7 +696,7 @@ addl %edx,%ecx adcl $0,%eax movl %ecx,24(%ebx) - # Round 7 + # Round 7 movl 28(%esi),%ecx movl 28(%edi),%edx addl %eax,%ecx @@ -715,7 +715,7 @@ movl 32(%esp),%ebp andl $7,%ebp jz L025aw_end - # Tail Round 0 + # Tail Round 0 movl (%esi),%ecx movl (%edi),%edx addl %eax,%ecx @@ -726,7 +726,7 @@ decl %ebp movl %ecx,(%ebx) jz L025aw_end - # Tail Round 1 + # Tail Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx addl %eax,%ecx @@ -737,7 +737,7 @@ decl %ebp movl %ecx,4(%ebx) jz L025aw_end - # Tail Round 2 + # Tail Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx addl %eax,%ecx @@ -748,7 +748,7 @@ decl %ebp movl %ecx,8(%ebx) jz L025aw_end - # Tail Round 3 + # Tail Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx addl %eax,%ecx @@ -759,7 +759,7 @@ decl %ebp movl %ecx,12(%ebx) jz L025aw_end - # Tail Round 4 + # Tail Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx addl %eax,%ecx @@ -770,7 +770,7 @@ decl %ebp movl %ecx,16(%ebx) jz L025aw_end - # Tail Round 5 + # Tail Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx addl %eax,%ecx @@ -781,7 +781,7 @@ decl %ebp movl %ecx,20(%ebx) jz L025aw_end - # Tail Round 6 + # Tail Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx addl %eax,%ecx @@ -814,7 +814,7 @@ andl $4294967288,%ebp jz L026aw_finish L027aw_loop: - # Round 0 + # Round 0 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -823,7 +823,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,(%ebx) - # Round 1 + # Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -832,7 +832,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,4(%ebx) - # Round 2 + # Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -841,7 +841,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,8(%ebx) - # Round 3 + # Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -850,7 +850,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,12(%ebx) - # Round 4 + # Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -859,7 +859,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,16(%ebx) - # Round 5 + # Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -868,7 +868,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,20(%ebx) - # Round 6 + # Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -877,7 +877,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,24(%ebx) - # Round 7 + # Round 7 movl 28(%esi),%ecx movl 28(%edi),%edx subl %eax,%ecx @@ -896,7 +896,7 @@ movl 32(%esp),%ebp andl $7,%ebp jz L028aw_end - # Tail Round 0 + # Tail Round 0 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -907,7 +907,7 @@ decl %ebp movl %ecx,(%ebx) jz L028aw_end - # Tail Round 1 + # Tail Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -918,7 +918,7 @@ decl %ebp movl %ecx,4(%ebx) jz L028aw_end - # Tail Round 2 + # Tail Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -929,7 +929,7 @@ decl %ebp movl %ecx,8(%ebx) jz L028aw_end - # Tail Round 3 + # Tail Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -940,7 +940,7 @@ decl %ebp movl %ecx,12(%ebx) jz L028aw_end - # Tail Round 4 + # Tail Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -951,7 +951,7 @@ decl %ebp movl %ecx,16(%ebx) jz L028aw_end - # Tail Round 5 + # Tail Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -962,7 +962,7 @@ decl %ebp movl %ecx,20(%ebx) jz L028aw_end - # Tail Round 6 + # Tail Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -995,7 +995,7 @@ andl $4294967288,%ebp jz L029aw_finish L030aw_loop: - # Round 0 + # Round 0 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1004,7 +1004,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,(%ebx) - # Round 1 + # Round 1 movl 4(%esi),%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -1013,7 +1013,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,4(%ebx) - # Round 2 + # Round 2 movl 8(%esi),%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -1022,7 +1022,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,8(%ebx) - # Round 3 + # Round 3 movl 12(%esi),%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -1031,7 +1031,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,12(%ebx) - # Round 4 + # Round 4 movl 16(%esi),%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -1040,7 +1040,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,16(%ebx) - # Round 5 + # Round 5 movl 20(%esi),%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -1049,7 +1049,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,20(%ebx) - # Round 6 + # Round 6 movl 24(%esi),%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -1058,7 +1058,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,24(%ebx) - # Round 7 + # Round 7 movl 28(%esi),%ecx movl 28(%edi),%edx subl %eax,%ecx @@ -1077,7 +1077,7 @@ movl 32(%esp),%ebp andl $7,%ebp jz L031aw_end - # Tail Round 0 + # Tail Round 0 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1091,7 +1091,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 1 + # Tail Round 1 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1105,7 +1105,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 2 + # Tail Round 2 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1119,7 +1119,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 3 + # Tail Round 3 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1133,7 +1133,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 4 + # Tail Round 4 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1147,7 +1147,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 5 + # Tail Round 5 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1161,7 +1161,7 @@ addl $4,%ebx decl %ebp jz L031aw_end - # Tail Round 6 + # Tail Round 6 movl (%esi),%ecx movl (%edi),%edx subl %eax,%ecx @@ -1180,14 +1180,14 @@ cmpl $0,%ebp je L032pw_end jge L033pw_pos - # pw_neg + # pw_neg movl $0,%edx subl %ebp,%edx movl %edx,%ebp andl $4294967288,%ebp jz L034pw_neg_finish L035pw_neg_loop: - # dl<0 Round 0 + # dl<0 Round 0 movl $0,%ecx movl (%edi),%edx subl %eax,%ecx @@ -1196,7 +1196,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,(%ebx) - # dl<0 Round 1 + # dl<0 Round 1 movl $0,%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -1205,7 +1205,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,4(%ebx) - # dl<0 Round 2 + # dl<0 Round 2 movl $0,%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -1214,7 +1214,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,8(%ebx) - # dl<0 Round 3 + # dl<0 Round 3 movl $0,%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -1223,7 +1223,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,12(%ebx) - # dl<0 Round 4 + # dl<0 Round 4 movl $0,%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -1232,7 +1232,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,16(%ebx) - # dl<0 Round 5 + # dl<0 Round 5 movl $0,%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -1241,7 +1241,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,20(%ebx) - # dl<0 Round 6 + # dl<0 Round 6 movl $0,%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -1250,7 +1250,7 @@ subl %edx,%ecx adcl $0,%eax movl %ecx,24(%ebx) - # dl<0 Round 7 + # dl<0 Round 7 movl $0,%ecx movl 28(%edi),%edx subl %eax,%ecx @@ -1270,7 +1270,7 @@ subl %edx,%ebp andl $7,%ebp jz L032pw_end - # dl<0 Tail Round 0 + # dl<0 Tail Round 0 movl $0,%ecx movl (%edi),%edx subl %eax,%ecx @@ -1281,7 +1281,7 @@ decl %ebp movl %ecx,(%ebx) jz L032pw_end - # dl<0 Tail Round 1 + # dl<0 Tail Round 1 movl $0,%ecx movl 4(%edi),%edx subl %eax,%ecx @@ -1292,7 +1292,7 @@ decl %ebp movl %ecx,4(%ebx) jz L032pw_end - # dl<0 Tail Round 2 + # dl<0 Tail Round 2 movl $0,%ecx movl 8(%edi),%edx subl %eax,%ecx @@ -1303,7 +1303,7 @@ decl %ebp movl %ecx,8(%ebx) jz L032pw_end - # dl<0 Tail Round 3 + # dl<0 Tail Round 3 movl $0,%ecx movl 12(%edi),%edx subl %eax,%ecx @@ -1314,7 +1314,7 @@ decl %ebp movl %ecx,12(%ebx) jz L032pw_end - # dl<0 Tail Round 4 + # dl<0 Tail Round 4 movl $0,%ecx movl 16(%edi),%edx subl %eax,%ecx @@ -1325,7 +1325,7 @@ decl %ebp movl %ecx,16(%ebx) jz L032pw_end - # dl<0 Tail Round 5 + # dl<0 Tail Round 5 movl $0,%ecx movl 20(%edi),%edx subl %eax,%ecx @@ -1336,7 +1336,7 @@ decl %ebp movl %ecx,20(%ebx) jz L032pw_end - # dl<0 Tail Round 6 + # dl<0 Tail Round 6 movl $0,%ecx movl 24(%edi),%edx subl %eax,%ecx @@ -1350,42 +1350,42 @@ andl $4294967288,%ebp jz L036pw_pos_finish L037pw_pos_loop: - # dl>0 Round 0 + # dl>0 Round 0 movl (%esi),%ecx subl %eax,%ecx movl %ecx,(%ebx) jnc L038pw_nc0 - # dl>0 Round 1 + # dl>0 Round 1 movl 4(%esi),%ecx subl %eax,%ecx movl %ecx,4(%ebx) jnc L039pw_nc1 - # dl>0 Round 2 + # dl>0 Round 2 movl 8(%esi),%ecx subl %eax,%ecx movl %ecx,8(%ebx) jnc L040pw_nc2 - # dl>0 Round 3 + # dl>0 Round 3 movl 12(%esi),%ecx subl %eax,%ecx movl %ecx,12(%ebx) jnc L041pw_nc3 - # dl>0 Round 4 + # dl>0 Round 4 movl 16(%esi),%ecx subl %eax,%ecx movl %ecx,16(%ebx) jnc L042pw_nc4 - # dl>0 Round 5 + # dl>0 Round 5 movl 20(%esi),%ecx subl %eax,%ecx movl %ecx,20(%ebx) jnc L043pw_nc5 - # dl>0 Round 6 + # dl>0 Round 6 movl 24(%esi),%ecx subl %eax,%ecx movl %ecx,24(%ebx) jnc L044pw_nc6 - # dl>0 Round 7 + # dl>0 Round 7 movl 28(%esi),%ecx subl %eax,%ecx movl %ecx,28(%ebx) @@ -1399,49 +1399,49 @@ movl 36(%esp),%ebp andl $7,%ebp jz L032pw_end - # dl>0 Tail Round 0 + # dl>0 Tail Round 0 movl (%esi),%ecx subl %eax,%ecx movl %ecx,(%ebx) jnc L046pw_tail_nc0 decl %ebp jz L032pw_end - # dl>0 Tail Round 1 + # dl>0 Tail Round 1 movl 4(%esi),%ecx subl %eax,%ecx movl %ecx,4(%ebx) jnc L047pw_tail_nc1 decl %ebp jz L032pw_end - # dl>0 Tail Round 2 + # dl>0 Tail Round 2 movl 8(%esi),%ecx subl %eax,%ecx movl %ecx,8(%ebx) jnc L048pw_tail_nc2 decl %ebp jz L032pw_end - # dl>0 Tail Round 3 + # dl>0 Tail Round 3 movl 12(%esi),%ecx subl %eax,%ecx movl %ecx,12(%ebx) jnc L049pw_tail_nc3 decl %ebp jz L032pw_end - # dl>0 Tail Round 4 + # dl>0 Tail Round 4 movl 16(%esi),%ecx subl %eax,%ecx movl %ecx,16(%ebx) jnc L050pw_tail_nc4 decl %ebp jz L032pw_end - # dl>0 Tail Round 5 + # dl>0 Tail Round 5 movl 20(%esi),%ecx subl %eax,%ecx movl %ecx,20(%ebx) jnc L051pw_tail_nc5 decl %ebp jz L032pw_end - # dl>0 Tail Round 6 + # dl>0 Tail Round 6 movl 24(%esi),%ecx subl %eax,%ecx movl %ecx,24(%ebx) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bn/co-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bn/co-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bn/co-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/bn/co-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -14,9 +14,9 @@ movl (%esi),%eax xorl %ecx,%ecx movl (%edi),%edx - # ################## Calculate word 0 + # ################## Calculate word 0 xorl %ebp,%ebp - # mul a[0]*b[0] + # mul a[0]*b[0] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -25,17 +25,17 @@ adcl $0,%ebp movl %ebx,(%eax) movl 4(%esi),%eax - # saved r[0] - # ################## Calculate word 1 + # saved r[0] + # ################## Calculate word 1 xorl %ebx,%ebx - # mul a[1]*b[0] + # mul a[1]*b[0] mull %edx addl %eax,%ecx movl (%esi),%eax adcl %edx,%ebp movl 4(%edi),%edx adcl $0,%ebx - # mul a[0]*b[1] + # mul a[0]*b[1] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -44,24 +44,24 @@ adcl $0,%ebx movl %ecx,4(%eax) movl 8(%esi),%eax - # saved r[1] - # ################## Calculate word 2 + # saved r[1] + # ################## Calculate word 2 xorl %ecx,%ecx - # mul a[2]*b[0] + # mul a[2]*b[0] mull %edx addl %eax,%ebp movl 4(%esi),%eax adcl %edx,%ebx movl 4(%edi),%edx adcl $0,%ecx - # mul a[1]*b[1] + # mul a[1]*b[1] mull %edx addl %eax,%ebp movl (%esi),%eax adcl %edx,%ebx movl 8(%edi),%edx adcl $0,%ecx - # mul a[0]*b[2] + # mul a[0]*b[2] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -70,31 +70,31 @@ adcl $0,%ecx movl %ebp,8(%eax) movl 12(%esi),%eax - # saved r[2] - # ################## Calculate word 3 + # saved r[2] + # ################## Calculate word 3 xorl %ebp,%ebp - # mul a[3]*b[0] + # mul a[3]*b[0] mull %edx addl %eax,%ebx movl 8(%esi),%eax adcl %edx,%ecx movl 4(%edi),%edx adcl $0,%ebp - # mul a[2]*b[1] + # mul a[2]*b[1] mull %edx addl %eax,%ebx movl 4(%esi),%eax adcl %edx,%ecx movl 8(%edi),%edx adcl $0,%ebp - # mul a[1]*b[2] + # mul a[1]*b[2] mull %edx addl %eax,%ebx movl (%esi),%eax adcl %edx,%ecx movl 12(%edi),%edx adcl $0,%ebp - # mul a[0]*b[3] + # mul a[0]*b[3] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -103,38 +103,38 @@ adcl $0,%ebp movl %ebx,12(%eax) movl 16(%esi),%eax - # saved r[3] - # ################## Calculate word 4 + # saved r[3] + # ################## Calculate word 4 xorl %ebx,%ebx - # mul a[4]*b[0] + # mul a[4]*b[0] mull %edx addl %eax,%ecx movl 12(%esi),%eax adcl %edx,%ebp movl 4(%edi),%edx adcl $0,%ebx - # mul a[3]*b[1] + # mul a[3]*b[1] mull %edx addl %eax,%ecx movl 8(%esi),%eax adcl %edx,%ebp movl 8(%edi),%edx adcl $0,%ebx - # mul a[2]*b[2] + # mul a[2]*b[2] mull %edx addl %eax,%ecx movl 4(%esi),%eax adcl %edx,%ebp movl 12(%edi),%edx adcl $0,%ebx - # mul a[1]*b[3] + # mul a[1]*b[3] mull %edx addl %eax,%ecx movl (%esi),%eax adcl %edx,%ebp movl 16(%edi),%edx adcl $0,%ebx - # mul a[0]*b[4] + # mul a[0]*b[4] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -143,45 +143,45 @@ adcl $0,%ebx movl %ecx,16(%eax) movl 20(%esi),%eax - # saved r[4] - # ################## Calculate word 5 + # saved r[4] + # ################## Calculate word 5 xorl %ecx,%ecx - # mul a[5]*b[0] + # mul a[5]*b[0] mull %edx addl %eax,%ebp movl 16(%esi),%eax adcl %edx,%ebx movl 4(%edi),%edx adcl $0,%ecx - # mul a[4]*b[1] + # mul a[4]*b[1] mull %edx addl %eax,%ebp movl 12(%esi),%eax adcl %edx,%ebx movl 8(%edi),%edx adcl $0,%ecx - # mul a[3]*b[2] + # mul a[3]*b[2] mull %edx addl %eax,%ebp movl 8(%esi),%eax adcl %edx,%ebx movl 12(%edi),%edx adcl $0,%ecx - # mul a[2]*b[3] + # mul a[2]*b[3] mull %edx addl %eax,%ebp movl 4(%esi),%eax adcl %edx,%ebx movl 16(%edi),%edx adcl $0,%ecx - # mul a[1]*b[4] + # mul a[1]*b[4] mull %edx addl %eax,%ebp movl (%esi),%eax adcl %edx,%ebx movl 20(%edi),%edx adcl $0,%ecx - # mul a[0]*b[5] + # mul a[0]*b[5] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -190,52 +190,52 @@ adcl $0,%ecx movl %ebp,20(%eax) movl 24(%esi),%eax - # saved r[5] - # ################## Calculate word 6 + # saved r[5] + # ################## Calculate word 6 xorl %ebp,%ebp - # mul a[6]*b[0] + # mul a[6]*b[0] mull %edx addl %eax,%ebx movl 20(%esi),%eax adcl %edx,%ecx movl 4(%edi),%edx adcl $0,%ebp - # mul a[5]*b[1] + # mul a[5]*b[1] mull %edx addl %eax,%ebx movl 16(%esi),%eax adcl %edx,%ecx movl 8(%edi),%edx adcl $0,%ebp - # mul a[4]*b[2] + # mul a[4]*b[2] mull %edx addl %eax,%ebx movl 12(%esi),%eax adcl %edx,%ecx movl 12(%edi),%edx adcl $0,%ebp - # mul a[3]*b[3] + # mul a[3]*b[3] mull %edx addl %eax,%ebx movl 8(%esi),%eax adcl %edx,%ecx movl 16(%edi),%edx adcl $0,%ebp - # mul a[2]*b[4] + # mul a[2]*b[4] mull %edx addl %eax,%ebx movl 4(%esi),%eax adcl %edx,%ecx movl 20(%edi),%edx adcl $0,%ebp - # mul a[1]*b[5] + # mul a[1]*b[5] mull %edx addl %eax,%ebx movl (%esi),%eax adcl %edx,%ecx movl 24(%edi),%edx adcl $0,%ebp - # mul a[0]*b[6] + # mul a[0]*b[6] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -244,59 +244,59 @@ adcl $0,%ebp movl %ebx,24(%eax) movl 28(%esi),%eax - # saved r[6] - # ################## Calculate word 7 + # saved r[6] + # ################## Calculate word 7 xorl %ebx,%ebx - # mul a[7]*b[0] + # mul a[7]*b[0] mull %edx addl %eax,%ecx movl 24(%esi),%eax adcl %edx,%ebp movl 4(%edi),%edx adcl $0,%ebx - # mul a[6]*b[1] + # mul a[6]*b[1] mull %edx addl %eax,%ecx movl 20(%esi),%eax adcl %edx,%ebp movl 8(%edi),%edx adcl $0,%ebx - # mul a[5]*b[2] + # mul a[5]*b[2] mull %edx addl %eax,%ecx movl 16(%esi),%eax adcl %edx,%ebp movl 12(%edi),%edx adcl $0,%ebx - # mul a[4]*b[3] + # mul a[4]*b[3] mull %edx addl %eax,%ecx movl 12(%esi),%eax adcl %edx,%ebp movl 16(%edi),%edx adcl $0,%ebx - # mul a[3]*b[4] + # mul a[3]*b[4] mull %edx addl %eax,%ecx movl 8(%esi),%eax adcl %edx,%ebp movl 20(%edi),%edx adcl $0,%ebx - # mul a[2]*b[5] + # mul a[2]*b[5] mull %edx addl %eax,%ecx movl 4(%esi),%eax adcl %edx,%ebp movl 24(%edi),%edx adcl $0,%ebx - # mul a[1]*b[6] + # mul a[1]*b[6] mull %edx addl %eax,%ecx movl (%esi),%eax adcl %edx,%ebp movl 28(%edi),%edx adcl $0,%ebx - # mul a[0]*b[7] + # mul a[0]*b[7] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -305,52 +305,52 @@ adcl $0,%ebx movl %ecx,28(%eax) movl 28(%esi),%eax - # saved r[7] - # ################## Calculate word 8 + # saved r[7] + # ################## Calculate word 8 xorl %ecx,%ecx - # mul a[7]*b[1] + # mul a[7]*b[1] mull %edx addl %eax,%ebp movl 24(%esi),%eax adcl %edx,%ebx movl 8(%edi),%edx adcl $0,%ecx - # mul a[6]*b[2] + # mul a[6]*b[2] mull %edx addl %eax,%ebp movl 20(%esi),%eax adcl %edx,%ebx movl 12(%edi),%edx adcl $0,%ecx - # mul a[5]*b[3] + # mul a[5]*b[3] mull %edx addl %eax,%ebp movl 16(%esi),%eax adcl %edx,%ebx movl 16(%edi),%edx adcl $0,%ecx - # mul a[4]*b[4] + # mul a[4]*b[4] mull %edx addl %eax,%ebp movl 12(%esi),%eax adcl %edx,%ebx movl 20(%edi),%edx adcl $0,%ecx - # mul a[3]*b[5] + # mul a[3]*b[5] mull %edx addl %eax,%ebp movl 8(%esi),%eax adcl %edx,%ebx movl 24(%edi),%edx adcl $0,%ecx - # mul a[2]*b[6] + # mul a[2]*b[6] mull %edx addl %eax,%ebp movl 4(%esi),%eax adcl %edx,%ebx movl 28(%edi),%edx adcl $0,%ecx - # mul a[1]*b[7] + # mul a[1]*b[7] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -359,45 +359,45 @@ adcl $0,%ecx movl %ebp,32(%eax) movl 28(%esi),%eax - # saved r[8] - # ################## Calculate word 9 + # saved r[8] + # ################## Calculate word 9 xorl %ebp,%ebp - # mul a[7]*b[2] + # mul a[7]*b[2] mull %edx addl %eax,%ebx movl 24(%esi),%eax adcl %edx,%ecx movl 12(%edi),%edx adcl $0,%ebp - # mul a[6]*b[3] + # mul a[6]*b[3] mull %edx addl %eax,%ebx movl 20(%esi),%eax adcl %edx,%ecx movl 16(%edi),%edx adcl $0,%ebp - # mul a[5]*b[4] + # mul a[5]*b[4] mull %edx addl %eax,%ebx movl 16(%esi),%eax adcl %edx,%ecx movl 20(%edi),%edx adcl $0,%ebp - # mul a[4]*b[5] + # mul a[4]*b[5] mull %edx addl %eax,%ebx movl 12(%esi),%eax adcl %edx,%ecx movl 24(%edi),%edx adcl $0,%ebp - # mul a[3]*b[6] + # mul a[3]*b[6] mull %edx addl %eax,%ebx movl 8(%esi),%eax adcl %edx,%ecx movl 28(%edi),%edx adcl $0,%ebp - # mul a[2]*b[7] + # mul a[2]*b[7] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -406,38 +406,38 @@ adcl $0,%ebp movl %ebx,36(%eax) movl 28(%esi),%eax - # saved r[9] - # ################## Calculate word 10 + # saved r[9] + # ################## Calculate word 10 xorl %ebx,%ebx - # mul a[7]*b[3] + # mul a[7]*b[3] mull %edx addl %eax,%ecx movl 24(%esi),%eax adcl %edx,%ebp movl 16(%edi),%edx adcl $0,%ebx - # mul a[6]*b[4] + # mul a[6]*b[4] mull %edx addl %eax,%ecx movl 20(%esi),%eax adcl %edx,%ebp movl 20(%edi),%edx adcl $0,%ebx - # mul a[5]*b[5] + # mul a[5]*b[5] mull %edx addl %eax,%ecx movl 16(%esi),%eax adcl %edx,%ebp movl 24(%edi),%edx adcl $0,%ebx - # mul a[4]*b[6] + # mul a[4]*b[6] mull %edx addl %eax,%ecx movl 12(%esi),%eax adcl %edx,%ebp movl 28(%edi),%edx adcl $0,%ebx - # mul a[3]*b[7] + # mul a[3]*b[7] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -446,31 +446,31 @@ adcl $0,%ebx movl %ecx,40(%eax) movl 28(%esi),%eax - # saved r[10] - # ################## Calculate word 11 + # saved r[10] + # ################## Calculate word 11 xorl %ecx,%ecx - # mul a[7]*b[4] + # mul a[7]*b[4] mull %edx addl %eax,%ebp movl 24(%esi),%eax adcl %edx,%ebx movl 20(%edi),%edx adcl $0,%ecx - # mul a[6]*b[5] + # mul a[6]*b[5] mull %edx addl %eax,%ebp movl 20(%esi),%eax adcl %edx,%ebx movl 24(%edi),%edx adcl $0,%ecx - # mul a[5]*b[6] + # mul a[5]*b[6] mull %edx addl %eax,%ebp movl 16(%esi),%eax adcl %edx,%ebx movl 28(%edi),%edx adcl $0,%ecx - # mul a[4]*b[7] + # mul a[4]*b[7] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -479,24 +479,24 @@ adcl $0,%ecx movl %ebp,44(%eax) movl 28(%esi),%eax - # saved r[11] - # ################## Calculate word 12 + # saved r[11] + # ################## Calculate word 12 xorl %ebp,%ebp - # mul a[7]*b[5] + # mul a[7]*b[5] mull %edx addl %eax,%ebx movl 24(%esi),%eax adcl %edx,%ecx movl 24(%edi),%edx adcl $0,%ebp - # mul a[6]*b[6] + # mul a[6]*b[6] mull %edx addl %eax,%ebx movl 20(%esi),%eax adcl %edx,%ecx movl 28(%edi),%edx adcl $0,%ebp - # mul a[5]*b[7] + # mul a[5]*b[7] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -505,17 +505,17 @@ adcl $0,%ebp movl %ebx,48(%eax) movl 28(%esi),%eax - # saved r[12] - # ################## Calculate word 13 + # saved r[12] + # ################## Calculate word 13 xorl %ebx,%ebx - # mul a[7]*b[6] + # mul a[7]*b[6] mull %edx addl %eax,%ecx movl 24(%esi),%eax adcl %edx,%ebp movl 28(%edi),%edx adcl $0,%ebx - # mul a[6]*b[7] + # mul a[6]*b[7] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -524,18 +524,18 @@ adcl $0,%ebx movl %ecx,52(%eax) movl 28(%esi),%eax - # saved r[13] - # ################## Calculate word 14 + # saved r[13] + # ################## Calculate word 14 xorl %ecx,%ecx - # mul a[7]*b[7] + # mul a[7]*b[7] mull %edx addl %eax,%ebp movl 20(%esp),%eax adcl %edx,%ebx adcl $0,%ecx movl %ebp,56(%eax) - # saved r[14] - # save r[15] + # saved r[14] + # save r[15] movl %ebx,60(%eax) popl %ebx popl %ebp @@ -557,9 +557,9 @@ movl (%esi),%eax xorl %ecx,%ecx movl (%edi),%edx - # ################## Calculate word 0 + # ################## Calculate word 0 xorl %ebp,%ebp - # mul a[0]*b[0] + # mul a[0]*b[0] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -568,17 +568,17 @@ adcl $0,%ebp movl %ebx,(%eax) movl 4(%esi),%eax - # saved r[0] - # ################## Calculate word 1 + # saved r[0] + # ################## Calculate word 1 xorl %ebx,%ebx - # mul a[1]*b[0] + # mul a[1]*b[0] mull %edx addl %eax,%ecx movl (%esi),%eax adcl %edx,%ebp movl 4(%edi),%edx adcl $0,%ebx - # mul a[0]*b[1] + # mul a[0]*b[1] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -587,24 +587,24 @@ adcl $0,%ebx movl %ecx,4(%eax) movl 8(%esi),%eax - # saved r[1] - # ################## Calculate word 2 + # saved r[1] + # ################## Calculate word 2 xorl %ecx,%ecx - # mul a[2]*b[0] + # mul a[2]*b[0] mull %edx addl %eax,%ebp movl 4(%esi),%eax adcl %edx,%ebx movl 4(%edi),%edx adcl $0,%ecx - # mul a[1]*b[1] + # mul a[1]*b[1] mull %edx addl %eax,%ebp movl (%esi),%eax adcl %edx,%ebx movl 8(%edi),%edx adcl $0,%ecx - # mul a[0]*b[2] + # mul a[0]*b[2] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -613,31 +613,31 @@ adcl $0,%ecx movl %ebp,8(%eax) movl 12(%esi),%eax - # saved r[2] - # ################## Calculate word 3 + # saved r[2] + # ################## Calculate word 3 xorl %ebp,%ebp - # mul a[3]*b[0] + # mul a[3]*b[0] mull %edx addl %eax,%ebx movl 8(%esi),%eax adcl %edx,%ecx movl 4(%edi),%edx adcl $0,%ebp - # mul a[2]*b[1] + # mul a[2]*b[1] mull %edx addl %eax,%ebx movl 4(%esi),%eax adcl %edx,%ecx movl 8(%edi),%edx adcl $0,%ebp - # mul a[1]*b[2] + # mul a[1]*b[2] mull %edx addl %eax,%ebx movl (%esi),%eax adcl %edx,%ecx movl 12(%edi),%edx adcl $0,%ebp - # mul a[0]*b[3] + # mul a[0]*b[3] mull %edx addl %eax,%ebx movl 20(%esp),%eax @@ -646,24 +646,24 @@ adcl $0,%ebp movl %ebx,12(%eax) movl 12(%esi),%eax - # saved r[3] - # ################## Calculate word 4 + # saved r[3] + # ################## Calculate word 4 xorl %ebx,%ebx - # mul a[3]*b[1] + # mul a[3]*b[1] mull %edx addl %eax,%ecx movl 8(%esi),%eax adcl %edx,%ebp movl 8(%edi),%edx adcl $0,%ebx - # mul a[2]*b[2] + # mul a[2]*b[2] mull %edx addl %eax,%ecx movl 4(%esi),%eax adcl %edx,%ebp movl 12(%edi),%edx adcl $0,%ebx - # mul a[1]*b[3] + # mul a[1]*b[3] mull %edx addl %eax,%ecx movl 20(%esp),%eax @@ -672,17 +672,17 @@ adcl $0,%ebx movl %ecx,16(%eax) movl 12(%esi),%eax - # saved r[4] - # ################## Calculate word 5 + # saved r[4] + # ################## Calculate word 5 xorl %ecx,%ecx - # mul a[3]*b[2] + # mul a[3]*b[2] mull %edx addl %eax,%ebp movl 8(%esi),%eax adcl %edx,%ebx movl 12(%edi),%edx adcl $0,%ecx - # mul a[2]*b[3] + # mul a[2]*b[3] mull %edx addl %eax,%ebp movl 20(%esp),%eax @@ -691,18 +691,18 @@ adcl $0,%ecx movl %ebp,20(%eax) movl 12(%esi),%eax - # saved r[5] - # ################## Calculate word 6 + # saved r[5] + # ################## Calculate word 6 xorl %ebp,%ebp - # mul a[3]*b[3] + # mul a[3]*b[3] mull %edx addl %eax,%ebx movl 20(%esp),%eax adcl %edx,%ecx adcl $0,%ebp movl %ebx,24(%eax) - # saved r[6] - # save r[7] + # saved r[6] + # save r[7] movl %ecx,28(%eax) popl %ebx popl %ebp @@ -723,9 +723,9 @@ xorl %ebx,%ebx xorl %ecx,%ecx movl (%esi),%eax - # ############### Calculate word 0 + # ############### Calculate word 0 xorl %ebp,%ebp - # sqr a[0]*a[0] + # sqr a[0]*a[0] mull %eax addl %eax,%ebx adcl %edx,%ecx @@ -733,10 +733,10 @@ adcl $0,%ebp movl %ebx,(%edi) movl 4(%esi),%eax - # saved r[0] - # ############### Calculate word 1 + # saved r[0] + # ############### Calculate word 1 xorl %ebx,%ebx - # sqr a[1]*a[0] + # sqr a[1]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -747,10 +747,10 @@ adcl $0,%ebx movl %ecx,4(%edi) movl (%esi),%edx - # saved r[1] - # ############### Calculate word 2 + # saved r[1] + # ############### Calculate word 2 xorl %ecx,%ecx - # sqr a[2]*a[0] + # sqr a[2]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -759,7 +759,7 @@ adcl %edx,%ebx movl 4(%esi),%eax adcl $0,%ecx - # sqr a[1]*a[1] + # sqr a[1]*a[1] mull %eax addl %eax,%ebp adcl %edx,%ebx @@ -767,10 +767,10 @@ adcl $0,%ecx movl %ebp,8(%edi) movl 12(%esi),%eax - # saved r[2] - # ############### Calculate word 3 + # saved r[2] + # ############### Calculate word 3 xorl %ebp,%ebp - # sqr a[3]*a[0] + # sqr a[3]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -780,7 +780,7 @@ movl 8(%esi),%eax adcl $0,%ebp movl 4(%esi),%edx - # sqr a[2]*a[1] + # sqr a[2]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -791,10 +791,10 @@ adcl $0,%ebp movl %ebx,12(%edi) movl (%esi),%edx - # saved r[3] - # ############### Calculate word 4 + # saved r[3] + # ############### Calculate word 4 xorl %ebx,%ebx - # sqr a[4]*a[0] + # sqr a[4]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -804,7 +804,7 @@ movl 12(%esi),%eax adcl $0,%ebx movl 4(%esi),%edx - # sqr a[3]*a[1] + # sqr a[3]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -813,7 +813,7 @@ adcl %edx,%ebp movl 8(%esi),%eax adcl $0,%ebx - # sqr a[2]*a[2] + # sqr a[2]*a[2] mull %eax addl %eax,%ecx adcl %edx,%ebp @@ -821,10 +821,10 @@ adcl $0,%ebx movl %ecx,16(%edi) movl 20(%esi),%eax - # saved r[4] - # ############### Calculate word 5 + # saved r[4] + # ############### Calculate word 5 xorl %ecx,%ecx - # sqr a[5]*a[0] + # sqr a[5]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -834,7 +834,7 @@ movl 16(%esi),%eax adcl $0,%ecx movl 4(%esi),%edx - # sqr a[4]*a[1] + # sqr a[4]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -844,7 +844,7 @@ movl 12(%esi),%eax adcl $0,%ecx movl 8(%esi),%edx - # sqr a[3]*a[2] + # sqr a[3]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -855,10 +855,10 @@ adcl $0,%ecx movl %ebp,20(%edi) movl (%esi),%edx - # saved r[5] - # ############### Calculate word 6 + # saved r[5] + # ############### Calculate word 6 xorl %ebp,%ebp - # sqr a[6]*a[0] + # sqr a[6]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -868,7 +868,7 @@ movl 20(%esi),%eax adcl $0,%ebp movl 4(%esi),%edx - # sqr a[5]*a[1] + # sqr a[5]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -878,7 +878,7 @@ movl 16(%esi),%eax adcl $0,%ebp movl 8(%esi),%edx - # sqr a[4]*a[2] + # sqr a[4]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -887,7 +887,7 @@ adcl %edx,%ecx movl 12(%esi),%eax adcl $0,%ebp - # sqr a[3]*a[3] + # sqr a[3]*a[3] mull %eax addl %eax,%ebx adcl %edx,%ecx @@ -895,10 +895,10 @@ adcl $0,%ebp movl %ebx,24(%edi) movl 28(%esi),%eax - # saved r[6] - # ############### Calculate word 7 + # saved r[6] + # ############### Calculate word 7 xorl %ebx,%ebx - # sqr a[7]*a[0] + # sqr a[7]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -908,7 +908,7 @@ movl 24(%esi),%eax adcl $0,%ebx movl 4(%esi),%edx - # sqr a[6]*a[1] + # sqr a[6]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -918,7 +918,7 @@ movl 20(%esi),%eax adcl $0,%ebx movl 8(%esi),%edx - # sqr a[5]*a[2] + # sqr a[5]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -928,7 +928,7 @@ movl 16(%esi),%eax adcl $0,%ebx movl 12(%esi),%edx - # sqr a[4]*a[3] + # sqr a[4]*a[3] mull %edx addl %eax,%eax adcl %edx,%edx @@ -939,10 +939,10 @@ adcl $0,%ebx movl %ecx,28(%edi) movl 4(%esi),%edx - # saved r[7] - # ############### Calculate word 8 + # saved r[7] + # ############### Calculate word 8 xorl %ecx,%ecx - # sqr a[7]*a[1] + # sqr a[7]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -952,7 +952,7 @@ movl 24(%esi),%eax adcl $0,%ecx movl 8(%esi),%edx - # sqr a[6]*a[2] + # sqr a[6]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -962,7 +962,7 @@ movl 20(%esi),%eax adcl $0,%ecx movl 12(%esi),%edx - # sqr a[5]*a[3] + # sqr a[5]*a[3] mull %edx addl %eax,%eax adcl %edx,%edx @@ -971,7 +971,7 @@ adcl %edx,%ebx movl 16(%esi),%eax adcl $0,%ecx - # sqr a[4]*a[4] + # sqr a[4]*a[4] mull %eax addl %eax,%ebp adcl %edx,%ebx @@ -979,10 +979,10 @@ adcl $0,%ecx movl %ebp,32(%edi) movl 28(%esi),%eax - # saved r[8] - # ############### Calculate word 9 + # saved r[8] + # ############### Calculate word 9 xorl %ebp,%ebp - # sqr a[7]*a[2] + # sqr a[7]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -992,7 +992,7 @@ movl 24(%esi),%eax adcl $0,%ebp movl 12(%esi),%edx - # sqr a[6]*a[3] + # sqr a[6]*a[3] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1002,7 +1002,7 @@ movl 20(%esi),%eax adcl $0,%ebp movl 16(%esi),%edx - # sqr a[5]*a[4] + # sqr a[5]*a[4] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1013,10 +1013,10 @@ adcl $0,%ebp movl %ebx,36(%edi) movl 12(%esi),%edx - # saved r[9] - # ############### Calculate word 10 + # saved r[9] + # ############### Calculate word 10 xorl %ebx,%ebx - # sqr a[7]*a[3] + # sqr a[7]*a[3] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1026,7 +1026,7 @@ movl 24(%esi),%eax adcl $0,%ebx movl 16(%esi),%edx - # sqr a[6]*a[4] + # sqr a[6]*a[4] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1035,7 +1035,7 @@ adcl %edx,%ebp movl 20(%esi),%eax adcl $0,%ebx - # sqr a[5]*a[5] + # sqr a[5]*a[5] mull %eax addl %eax,%ecx adcl %edx,%ebp @@ -1043,10 +1043,10 @@ adcl $0,%ebx movl %ecx,40(%edi) movl 28(%esi),%eax - # saved r[10] - # ############### Calculate word 11 + # saved r[10] + # ############### Calculate word 11 xorl %ecx,%ecx - # sqr a[7]*a[4] + # sqr a[7]*a[4] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1056,7 +1056,7 @@ movl 24(%esi),%eax adcl $0,%ecx movl 20(%esi),%edx - # sqr a[6]*a[5] + # sqr a[6]*a[5] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1067,10 +1067,10 @@ adcl $0,%ecx movl %ebp,44(%edi) movl 20(%esi),%edx - # saved r[11] - # ############### Calculate word 12 + # saved r[11] + # ############### Calculate word 12 xorl %ebp,%ebp - # sqr a[7]*a[5] + # sqr a[7]*a[5] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1079,7 +1079,7 @@ adcl %edx,%ecx movl 24(%esi),%eax adcl $0,%ebp - # sqr a[6]*a[6] + # sqr a[6]*a[6] mull %eax addl %eax,%ebx adcl %edx,%ecx @@ -1087,10 +1087,10 @@ adcl $0,%ebp movl %ebx,48(%edi) movl 28(%esi),%eax - # saved r[12] - # ############### Calculate word 13 + # saved r[12] + # ############### Calculate word 13 xorl %ebx,%ebx - # sqr a[7]*a[6] + # sqr a[7]*a[6] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1100,16 +1100,16 @@ movl 28(%esi),%eax adcl $0,%ebx movl %ecx,52(%edi) - # saved r[13] - # ############### Calculate word 14 + # saved r[13] + # ############### Calculate word 14 xorl %ecx,%ecx - # sqr a[7]*a[7] + # sqr a[7]*a[7] mull %eax addl %eax,%ebp adcl %edx,%ebx adcl $0,%ecx movl %ebp,56(%edi) - # saved r[14] + # saved r[14] movl %ebx,60(%edi) popl %ebx popl %ebp @@ -1130,9 +1130,9 @@ xorl %ebx,%ebx xorl %ecx,%ecx movl (%esi),%eax - # ############### Calculate word 0 + # ############### Calculate word 0 xorl %ebp,%ebp - # sqr a[0]*a[0] + # sqr a[0]*a[0] mull %eax addl %eax,%ebx adcl %edx,%ecx @@ -1140,10 +1140,10 @@ adcl $0,%ebp movl %ebx,(%edi) movl 4(%esi),%eax - # saved r[0] - # ############### Calculate word 1 + # saved r[0] + # ############### Calculate word 1 xorl %ebx,%ebx - # sqr a[1]*a[0] + # sqr a[1]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1154,10 +1154,10 @@ adcl $0,%ebx movl %ecx,4(%edi) movl (%esi),%edx - # saved r[1] - # ############### Calculate word 2 + # saved r[1] + # ############### Calculate word 2 xorl %ecx,%ecx - # sqr a[2]*a[0] + # sqr a[2]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1166,7 +1166,7 @@ adcl %edx,%ebx movl 4(%esi),%eax adcl $0,%ecx - # sqr a[1]*a[1] + # sqr a[1]*a[1] mull %eax addl %eax,%ebp adcl %edx,%ebx @@ -1174,10 +1174,10 @@ adcl $0,%ecx movl %ebp,8(%edi) movl 12(%esi),%eax - # saved r[2] - # ############### Calculate word 3 + # saved r[2] + # ############### Calculate word 3 xorl %ebp,%ebp - # sqr a[3]*a[0] + # sqr a[3]*a[0] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1187,7 +1187,7 @@ movl 8(%esi),%eax adcl $0,%ebp movl 4(%esi),%edx - # sqr a[2]*a[1] + # sqr a[2]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1198,10 +1198,10 @@ adcl $0,%ebp movl %ebx,12(%edi) movl 4(%esi),%edx - # saved r[3] - # ############### Calculate word 4 + # saved r[3] + # ############### Calculate word 4 xorl %ebx,%ebx - # sqr a[3]*a[1] + # sqr a[3]*a[1] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1210,7 +1210,7 @@ adcl %edx,%ebp movl 8(%esi),%eax adcl $0,%ebx - # sqr a[2]*a[2] + # sqr a[2]*a[2] mull %eax addl %eax,%ecx adcl %edx,%ebp @@ -1218,10 +1218,10 @@ adcl $0,%ebx movl %ecx,16(%edi) movl 12(%esi),%eax - # saved r[4] - # ############### Calculate word 5 + # saved r[4] + # ############### Calculate word 5 xorl %ecx,%ecx - # sqr a[3]*a[2] + # sqr a[3]*a[2] mull %edx addl %eax,%eax adcl %edx,%edx @@ -1231,16 +1231,16 @@ movl 12(%esi),%eax adcl $0,%ecx movl %ebp,20(%edi) - # saved r[5] - # ############### Calculate word 6 + # saved r[5] + # ############### Calculate word 6 xorl %ebp,%ebp - # sqr a[3]*a[3] + # sqr a[3]*a[3] mull %eax addl %eax,%ebx adcl %edx,%ecx adcl $0,%ebp movl %ebx,24(%edi) - # saved r[6] + # saved r[6] movl %ecx,28(%edi) popl %ebx popl %ebp diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: BSD-x86" -#define DATE "built on: Tue Apr 21 13:28:32 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:40 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/des/crypt586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/des/crypt586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/des/crypt586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/des/crypt586.s 2022-04-05 07:17:00.000000000 +0000 @@ -9,7 +9,7 @@ pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words xorl %edi,%edi xorl %esi,%esi call L000PIC_me_up @@ -22,7 +22,7 @@ pushl $25 L001start: - # Round 0 + # Round 0 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -72,7 +72,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 1 + # Round 1 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -122,7 +122,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 2 + # Round 2 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -172,7 +172,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 3 + # Round 3 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -222,7 +222,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 4 + # Round 4 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -272,7 +272,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 5 + # Round 5 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -322,7 +322,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 6 + # Round 6 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -372,7 +372,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 7 + # Round 7 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -422,7 +422,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 8 + # Round 8 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -472,7 +472,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 9 + # Round 9 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -522,7 +522,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 10 + # Round 10 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -572,7 +572,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 11 + # Round 11 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -622,7 +622,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 12 + # Round 12 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -672,7 +672,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 13 + # Round 13 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -722,7 +722,7 @@ xorl %ebx,%esi movl 32(%esp),%ebp - # Round 14 + # Round 14 movl 36(%esp),%eax movl %esi,%edx shrl $16,%edx @@ -772,7 +772,7 @@ xorl %ebx,%edi movl 32(%esp),%ebp - # Round 15 + # Round 15 movl 36(%esp),%eax movl %edi,%edx shrl $16,%edx @@ -829,7 +829,7 @@ movl %ebx,(%esp) jnz L001start - # FP + # FP movl 28(%esp),%edx rorl $1,%edi movl %esi,%eax diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/des/des-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/des/des-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/des/des-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/des/des-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -4,7 +4,7 @@ .align 4 __x86_DES_encrypt: pushl %ecx - # Round 0 + # Round 0 movl (%ecx),%eax xorl %ebx,%ebx movl 4(%ecx),%edx @@ -33,7 +33,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 1 + # Round 1 movl 8(%ecx),%eax xorl %ebx,%ebx movl 12(%ecx),%edx @@ -62,7 +62,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 2 + # Round 2 movl 16(%ecx),%eax xorl %ebx,%ebx movl 20(%ecx),%edx @@ -91,7 +91,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 3 + # Round 3 movl 24(%ecx),%eax xorl %ebx,%ebx movl 28(%ecx),%edx @@ -120,7 +120,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 4 + # Round 4 movl 32(%ecx),%eax xorl %ebx,%ebx movl 36(%ecx),%edx @@ -149,7 +149,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 5 + # Round 5 movl 40(%ecx),%eax xorl %ebx,%ebx movl 44(%ecx),%edx @@ -178,7 +178,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 6 + # Round 6 movl 48(%ecx),%eax xorl %ebx,%ebx movl 52(%ecx),%edx @@ -207,7 +207,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 7 + # Round 7 movl 56(%ecx),%eax xorl %ebx,%ebx movl 60(%ecx),%edx @@ -236,7 +236,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 8 + # Round 8 movl 64(%ecx),%eax xorl %ebx,%ebx movl 68(%ecx),%edx @@ -265,7 +265,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 9 + # Round 9 movl 72(%ecx),%eax xorl %ebx,%ebx movl 76(%ecx),%edx @@ -294,7 +294,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 10 + # Round 10 movl 80(%ecx),%eax xorl %ebx,%ebx movl 84(%ecx),%edx @@ -323,7 +323,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 11 + # Round 11 movl 88(%ecx),%eax xorl %ebx,%ebx movl 92(%ecx),%edx @@ -352,7 +352,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 12 + # Round 12 movl 96(%ecx),%eax xorl %ebx,%ebx movl 100(%ecx),%edx @@ -381,7 +381,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 13 + # Round 13 movl 104(%ecx),%eax xorl %ebx,%ebx movl 108(%ecx),%edx @@ -410,7 +410,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 14 + # Round 14 movl 112(%ecx),%eax xorl %ebx,%ebx movl 116(%ecx),%edx @@ -439,7 +439,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 15 + # Round 15 movl 120(%ecx),%eax xorl %ebx,%ebx movl 124(%ecx),%edx @@ -474,7 +474,7 @@ .align 4 __x86_DES_decrypt: pushl %ecx - # Round 15 + # Round 15 movl 120(%ecx),%eax xorl %ebx,%ebx movl 124(%ecx),%edx @@ -503,7 +503,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 14 + # Round 14 movl 112(%ecx),%eax xorl %ebx,%ebx movl 116(%ecx),%edx @@ -532,7 +532,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 13 + # Round 13 movl 104(%ecx),%eax xorl %ebx,%ebx movl 108(%ecx),%edx @@ -561,7 +561,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 12 + # Round 12 movl 96(%ecx),%eax xorl %ebx,%ebx movl 100(%ecx),%edx @@ -590,7 +590,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 11 + # Round 11 movl 88(%ecx),%eax xorl %ebx,%ebx movl 92(%ecx),%edx @@ -619,7 +619,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 10 + # Round 10 movl 80(%ecx),%eax xorl %ebx,%ebx movl 84(%ecx),%edx @@ -648,7 +648,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 9 + # Round 9 movl 72(%ecx),%eax xorl %ebx,%ebx movl 76(%ecx),%edx @@ -677,7 +677,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 8 + # Round 8 movl 64(%ecx),%eax xorl %ebx,%ebx movl 68(%ecx),%edx @@ -706,7 +706,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 7 + # Round 7 movl 56(%ecx),%eax xorl %ebx,%ebx movl 60(%ecx),%edx @@ -735,7 +735,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 6 + # Round 6 movl 48(%ecx),%eax xorl %ebx,%ebx movl 52(%ecx),%edx @@ -764,7 +764,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 5 + # Round 5 movl 40(%ecx),%eax xorl %ebx,%ebx movl 44(%ecx),%edx @@ -793,7 +793,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 4 + # Round 4 movl 32(%ecx),%eax xorl %ebx,%ebx movl 36(%ecx),%edx @@ -822,7 +822,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 3 + # Round 3 movl 24(%ecx),%eax xorl %ebx,%ebx movl 28(%ecx),%edx @@ -851,7 +851,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 2 + # Round 2 movl 16(%ecx),%eax xorl %ebx,%ebx movl 20(%ecx),%edx @@ -880,7 +880,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%esi xorl 0x500(%ebp,%edx,1),%esi - # Round 1 + # Round 1 movl 8(%ecx),%eax xorl %ebx,%ebx movl 12(%ecx),%edx @@ -909,7 +909,7 @@ movl (%esp),%ecx xorl 0x400(%ebp,%eax,1),%edi xorl 0x500(%ebp,%edx,1),%edi - # Round 0 + # Round 0 movl (%ecx),%eax xorl %ebx,%ebx movl 4(%ecx),%edx @@ -948,7 +948,7 @@ pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words movl 12(%esp),%esi xorl %ecx,%ecx pushl %ebx @@ -957,7 +957,7 @@ movl 28(%esp),%ebx movl 4(%esi),%edi - # IP + # IP roll $4,%eax movl %eax,%esi xorl %edi,%eax @@ -1007,7 +1007,7 @@ call __x86_DES_decrypt L002done: - # FP + # FP movl 20(%esp),%edx rorl $1,%esi movl %edi,%eax @@ -1060,7 +1060,7 @@ pushl %esi pushl %edi - # Load the 2 words + # Load the 2 words movl 12(%esp),%eax xorl %ecx,%ecx pushl %ebx @@ -1083,7 +1083,7 @@ call __x86_DES_decrypt L005done: - # Fixup + # Fixup rorl $3,%edi movl 20(%esp),%eax rorl $3,%esi @@ -1105,12 +1105,12 @@ pushl %esi pushl %edi - # Load the data words + # Load the data words movl (%ebx),%edi movl 4(%ebx),%esi subl $12,%esp - # IP + # IP roll $4,%edi movl %edi,%edx xorl %esi,%edi @@ -1169,7 +1169,7 @@ movl (%ebx),%edi movl 4(%ebx),%esi - # FP + # FP roll $2,%esi roll $3,%edi movl %edi,%eax @@ -1225,12 +1225,12 @@ pushl %esi pushl %edi - # Load the data words + # Load the data words movl (%ebx),%edi movl 4(%ebx),%esi subl $12,%esp - # IP + # IP roll $4,%edi movl %edi,%edx xorl %esi,%edi @@ -1289,7 +1289,7 @@ movl (%ebx),%edi movl 4(%ebx),%esi - # FP + # FP roll $2,%esi roll $3,%edi movl %edi,%eax @@ -1345,7 +1345,7 @@ pushl %esi pushl %edi movl 28(%esp),%ebp - # getting iv ptr from parameter 4 + # getting iv ptr from parameter 4 movl 36(%esp),%ebx movl (%ebx),%esi movl 4(%ebx),%edi @@ -1356,11 +1356,11 @@ movl %esp,%ebx movl 36(%esp),%esi movl 40(%esp),%edi - # getting encrypt flag from parameter 5 + # getting encrypt flag from parameter 5 movl 56(%esp),%ecx - # get and push parameter 5 + # get and push parameter 5 pushl %ecx - # get and push parameter 3 + # get and push parameter 3 movl 52(%esp),%eax pushl %eax pushl %ebx @@ -1524,7 +1524,7 @@ pushl %esi pushl %edi movl 28(%esp),%ebp - # getting iv ptr from parameter 6 + # getting iv ptr from parameter 6 movl 44(%esp),%ebx movl (%ebx),%esi movl 4(%ebx),%edi @@ -1535,15 +1535,15 @@ movl %esp,%ebx movl 36(%esp),%esi movl 40(%esp),%edi - # getting encrypt flag from parameter 7 + # getting encrypt flag from parameter 7 movl 64(%esp),%ecx - # get and push parameter 5 + # get and push parameter 5 movl 56(%esp),%eax pushl %eax - # get and push parameter 4 + # get and push parameter 4 movl 56(%esp),%eax pushl %eax - # get and push parameter 3 + # get and push parameter 3 movl 56(%esp),%eax pushl %eax pushl %ebx diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/md5/md5-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/md5/md5-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/md5/md5-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/md5/md5-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -21,10 +21,10 @@ movl 12(%edi),%edx L000start: - # R0 section + # R0 section movl %ecx,%edi movl (%esi),%ebp - # R0 0 + # R0 0 xorl %edx,%edi andl %ebx,%edi leal 3614090360(%eax,%ebp,1),%eax @@ -34,7 +34,7 @@ roll $7,%eax movl %ebx,%edi addl %ebx,%eax - # R0 1 + # R0 1 xorl %ecx,%edi andl %eax,%edi leal 3905402710(%edx,%ebp,1),%edx @@ -44,7 +44,7 @@ roll $12,%edx movl %eax,%edi addl %eax,%edx - # R0 2 + # R0 2 xorl %ebx,%edi andl %edx,%edi leal 606105819(%ecx,%ebp,1),%ecx @@ -54,7 +54,7 @@ roll $17,%ecx movl %edx,%edi addl %edx,%ecx - # R0 3 + # R0 3 xorl %eax,%edi andl %ecx,%edi leal 3250441966(%ebx,%ebp,1),%ebx @@ -64,7 +64,7 @@ roll $22,%ebx movl %ecx,%edi addl %ecx,%ebx - # R0 4 + # R0 4 xorl %edx,%edi andl %ebx,%edi leal 4118548399(%eax,%ebp,1),%eax @@ -74,7 +74,7 @@ roll $7,%eax movl %ebx,%edi addl %ebx,%eax - # R0 5 + # R0 5 xorl %ecx,%edi andl %eax,%edi leal 1200080426(%edx,%ebp,1),%edx @@ -84,7 +84,7 @@ roll $12,%edx movl %eax,%edi addl %eax,%edx - # R0 6 + # R0 6 xorl %ebx,%edi andl %edx,%edi leal 2821735955(%ecx,%ebp,1),%ecx @@ -94,7 +94,7 @@ roll $17,%ecx movl %edx,%edi addl %edx,%ecx - # R0 7 + # R0 7 xorl %eax,%edi andl %ecx,%edi leal 4249261313(%ebx,%ebp,1),%ebx @@ -104,7 +104,7 @@ roll $22,%ebx movl %ecx,%edi addl %ecx,%ebx - # R0 8 + # R0 8 xorl %edx,%edi andl %ebx,%edi leal 1770035416(%eax,%ebp,1),%eax @@ -114,7 +114,7 @@ roll $7,%eax movl %ebx,%edi addl %ebx,%eax - # R0 9 + # R0 9 xorl %ecx,%edi andl %eax,%edi leal 2336552879(%edx,%ebp,1),%edx @@ -124,7 +124,7 @@ roll $12,%edx movl %eax,%edi addl %eax,%edx - # R0 10 + # R0 10 xorl %ebx,%edi andl %edx,%edi leal 4294925233(%ecx,%ebp,1),%ecx @@ -134,7 +134,7 @@ roll $17,%ecx movl %edx,%edi addl %edx,%ecx - # R0 11 + # R0 11 xorl %eax,%edi andl %ecx,%edi leal 2304563134(%ebx,%ebp,1),%ebx @@ -144,7 +144,7 @@ roll $22,%ebx movl %ecx,%edi addl %ecx,%ebx - # R0 12 + # R0 12 xorl %edx,%edi andl %ebx,%edi leal 1804603682(%eax,%ebp,1),%eax @@ -154,7 +154,7 @@ roll $7,%eax movl %ebx,%edi addl %ebx,%eax - # R0 13 + # R0 13 xorl %ecx,%edi andl %eax,%edi leal 4254626195(%edx,%ebp,1),%edx @@ -164,7 +164,7 @@ roll $12,%edx movl %eax,%edi addl %eax,%edx - # R0 14 + # R0 14 xorl %ebx,%edi andl %edx,%edi leal 2792965006(%ecx,%ebp,1),%ecx @@ -174,7 +174,7 @@ roll $17,%ecx movl %edx,%edi addl %edx,%ecx - # R0 15 + # R0 15 xorl %eax,%edi andl %ecx,%edi leal 1236535329(%ebx,%ebp,1),%ebx @@ -185,8 +185,8 @@ movl %ecx,%edi addl %ecx,%ebx - # R1 section - # R1 16 + # R1 section + # R1 16 xorl %ebx,%edi andl %edx,%edi leal 4129170786(%eax,%ebp,1),%eax @@ -196,7 +196,7 @@ movl %ebx,%edi roll $5,%eax addl %ebx,%eax - # R1 17 + # R1 17 xorl %eax,%edi andl %ecx,%edi leal 3225465664(%edx,%ebp,1),%edx @@ -206,7 +206,7 @@ movl %eax,%edi roll $9,%edx addl %eax,%edx - # R1 18 + # R1 18 xorl %edx,%edi andl %ebx,%edi leal 643717713(%ecx,%ebp,1),%ecx @@ -216,7 +216,7 @@ movl %edx,%edi roll $14,%ecx addl %edx,%ecx - # R1 19 + # R1 19 xorl %ecx,%edi andl %eax,%edi leal 3921069994(%ebx,%ebp,1),%ebx @@ -226,7 +226,7 @@ movl %ecx,%edi roll $20,%ebx addl %ecx,%ebx - # R1 20 + # R1 20 xorl %ebx,%edi andl %edx,%edi leal 3593408605(%eax,%ebp,1),%eax @@ -236,7 +236,7 @@ movl %ebx,%edi roll $5,%eax addl %ebx,%eax - # R1 21 + # R1 21 xorl %eax,%edi andl %ecx,%edi leal 38016083(%edx,%ebp,1),%edx @@ -246,7 +246,7 @@ movl %eax,%edi roll $9,%edx addl %eax,%edx - # R1 22 + # R1 22 xorl %edx,%edi andl %ebx,%edi leal 3634488961(%ecx,%ebp,1),%ecx @@ -256,7 +256,7 @@ movl %edx,%edi roll $14,%ecx addl %edx,%ecx - # R1 23 + # R1 23 xorl %ecx,%edi andl %eax,%edi leal 3889429448(%ebx,%ebp,1),%ebx @@ -266,7 +266,7 @@ movl %ecx,%edi roll $20,%ebx addl %ecx,%ebx - # R1 24 + # R1 24 xorl %ebx,%edi andl %edx,%edi leal 568446438(%eax,%ebp,1),%eax @@ -276,7 +276,7 @@ movl %ebx,%edi roll $5,%eax addl %ebx,%eax - # R1 25 + # R1 25 xorl %eax,%edi andl %ecx,%edi leal 3275163606(%edx,%ebp,1),%edx @@ -286,7 +286,7 @@ movl %eax,%edi roll $9,%edx addl %eax,%edx - # R1 26 + # R1 26 xorl %edx,%edi andl %ebx,%edi leal 4107603335(%ecx,%ebp,1),%ecx @@ -296,7 +296,7 @@ movl %edx,%edi roll $14,%ecx addl %edx,%ecx - # R1 27 + # R1 27 xorl %ecx,%edi andl %eax,%edi leal 1163531501(%ebx,%ebp,1),%ebx @@ -306,7 +306,7 @@ movl %ecx,%edi roll $20,%ebx addl %ecx,%ebx - # R1 28 + # R1 28 xorl %ebx,%edi andl %edx,%edi leal 2850285829(%eax,%ebp,1),%eax @@ -316,7 +316,7 @@ movl %ebx,%edi roll $5,%eax addl %ebx,%eax - # R1 29 + # R1 29 xorl %eax,%edi andl %ecx,%edi leal 4243563512(%edx,%ebp,1),%edx @@ -326,7 +326,7 @@ movl %eax,%edi roll $9,%edx addl %eax,%edx - # R1 30 + # R1 30 xorl %edx,%edi andl %ebx,%edi leal 1735328473(%ecx,%ebp,1),%ecx @@ -336,7 +336,7 @@ movl %edx,%edi roll $14,%ecx addl %edx,%ecx - # R1 31 + # R1 31 xorl %ecx,%edi andl %eax,%edi leal 2368359562(%ebx,%ebp,1),%ebx @@ -347,8 +347,8 @@ roll $20,%ebx addl %ecx,%ebx - # R2 section - # R2 32 + # R2 section + # R2 32 xorl %edx,%edi xorl %ebx,%edi leal 4294588738(%eax,%ebp,1),%eax @@ -356,7 +356,7 @@ movl 32(%esi),%ebp roll $4,%eax movl %ebx,%edi - # R2 33 + # R2 33 addl %ebx,%eax xorl %ecx,%edi leal 2272392833(%edx,%ebp,1),%edx @@ -366,7 +366,7 @@ movl %eax,%edi roll $11,%edx addl %eax,%edx - # R2 34 + # R2 34 xorl %ebx,%edi xorl %edx,%edi leal 1839030562(%ecx,%ebp,1),%ecx @@ -374,7 +374,7 @@ movl 56(%esi),%ebp roll $16,%ecx movl %edx,%edi - # R2 35 + # R2 35 addl %edx,%ecx xorl %eax,%edi leal 4259657740(%ebx,%ebp,1),%ebx @@ -384,7 +384,7 @@ movl %ecx,%edi roll $23,%ebx addl %ecx,%ebx - # R2 36 + # R2 36 xorl %edx,%edi xorl %ebx,%edi leal 2763975236(%eax,%ebp,1),%eax @@ -392,7 +392,7 @@ movl 16(%esi),%ebp roll $4,%eax movl %ebx,%edi - # R2 37 + # R2 37 addl %ebx,%eax xorl %ecx,%edi leal 1272893353(%edx,%ebp,1),%edx @@ -402,7 +402,7 @@ movl %eax,%edi roll $11,%edx addl %eax,%edx - # R2 38 + # R2 38 xorl %ebx,%edi xorl %edx,%edi leal 4139469664(%ecx,%ebp,1),%ecx @@ -410,7 +410,7 @@ movl 40(%esi),%ebp roll $16,%ecx movl %edx,%edi - # R2 39 + # R2 39 addl %edx,%ecx xorl %eax,%edi leal 3200236656(%ebx,%ebp,1),%ebx @@ -420,7 +420,7 @@ movl %ecx,%edi roll $23,%ebx addl %ecx,%ebx - # R2 40 + # R2 40 xorl %edx,%edi xorl %ebx,%edi leal 681279174(%eax,%ebp,1),%eax @@ -428,7 +428,7 @@ movl (%esi),%ebp roll $4,%eax movl %ebx,%edi - # R2 41 + # R2 41 addl %ebx,%eax xorl %ecx,%edi leal 3936430074(%edx,%ebp,1),%edx @@ -438,7 +438,7 @@ movl %eax,%edi roll $11,%edx addl %eax,%edx - # R2 42 + # R2 42 xorl %ebx,%edi xorl %edx,%edi leal 3572445317(%ecx,%ebp,1),%ecx @@ -446,7 +446,7 @@ movl 24(%esi),%ebp roll $16,%ecx movl %edx,%edi - # R2 43 + # R2 43 addl %edx,%ecx xorl %eax,%edi leal 76029189(%ebx,%ebp,1),%ebx @@ -456,7 +456,7 @@ movl %ecx,%edi roll $23,%ebx addl %ecx,%ebx - # R2 44 + # R2 44 xorl %edx,%edi xorl %ebx,%edi leal 3654602809(%eax,%ebp,1),%eax @@ -464,7 +464,7 @@ movl 48(%esi),%ebp roll $4,%eax movl %ebx,%edi - # R2 45 + # R2 45 addl %ebx,%eax xorl %ecx,%edi leal 3873151461(%edx,%ebp,1),%edx @@ -474,7 +474,7 @@ movl %eax,%edi roll $11,%edx addl %eax,%edx - # R2 46 + # R2 46 xorl %ebx,%edi xorl %edx,%edi leal 530742520(%ecx,%ebp,1),%ecx @@ -482,7 +482,7 @@ movl 8(%esi),%ebp roll $16,%ecx movl %edx,%edi - # R2 47 + # R2 47 addl %edx,%ecx xorl %eax,%edi leal 3299628645(%ebx,%ebp,1),%ebx @@ -493,8 +493,8 @@ roll $23,%ebx addl %ecx,%ebx - # R3 section - # R3 48 + # R3 section + # R3 48 xorl %edx,%edi orl %ebx,%edi leal 4096336452(%eax,%ebp,1),%eax @@ -505,7 +505,7 @@ roll $6,%eax xorl %ecx,%edi addl %ebx,%eax - # R3 49 + # R3 49 orl %eax,%edi leal 1126891415(%edx,%ebp,1),%edx xorl %ebx,%edi @@ -515,7 +515,7 @@ roll $10,%edx xorl %ebx,%edi addl %eax,%edx - # R3 50 + # R3 50 orl %edx,%edi leal 2878612391(%ecx,%ebp,1),%ecx xorl %eax,%edi @@ -525,7 +525,7 @@ roll $15,%ecx xorl %eax,%edi addl %edx,%ecx - # R3 51 + # R3 51 orl %ecx,%edi leal 4237533241(%ebx,%ebp,1),%ebx xorl %edx,%edi @@ -535,7 +535,7 @@ roll $21,%ebx xorl %edx,%edi addl %ecx,%ebx - # R3 52 + # R3 52 orl %ebx,%edi leal 1700485571(%eax,%ebp,1),%eax xorl %ecx,%edi @@ -545,7 +545,7 @@ roll $6,%eax xorl %ecx,%edi addl %ebx,%eax - # R3 53 + # R3 53 orl %eax,%edi leal 2399980690(%edx,%ebp,1),%edx xorl %ebx,%edi @@ -555,7 +555,7 @@ roll $10,%edx xorl %ebx,%edi addl %eax,%edx - # R3 54 + # R3 54 orl %edx,%edi leal 4293915773(%ecx,%ebp,1),%ecx xorl %eax,%edi @@ -565,7 +565,7 @@ roll $15,%ecx xorl %eax,%edi addl %edx,%ecx - # R3 55 + # R3 55 orl %ecx,%edi leal 2240044497(%ebx,%ebp,1),%ebx xorl %edx,%edi @@ -575,7 +575,7 @@ roll $21,%ebx xorl %edx,%edi addl %ecx,%ebx - # R3 56 + # R3 56 orl %ebx,%edi leal 1873313359(%eax,%ebp,1),%eax xorl %ecx,%edi @@ -585,7 +585,7 @@ roll $6,%eax xorl %ecx,%edi addl %ebx,%eax - # R3 57 + # R3 57 orl %eax,%edi leal 4264355552(%edx,%ebp,1),%edx xorl %ebx,%edi @@ -595,7 +595,7 @@ roll $10,%edx xorl %ebx,%edi addl %eax,%edx - # R3 58 + # R3 58 orl %edx,%edi leal 2734768916(%ecx,%ebp,1),%ecx xorl %eax,%edi @@ -605,7 +605,7 @@ roll $15,%ecx xorl %eax,%edi addl %edx,%ecx - # R3 59 + # R3 59 orl %ecx,%edi leal 1309151649(%ebx,%ebp,1),%ebx xorl %edx,%edi @@ -615,7 +615,7 @@ roll $21,%ebx xorl %edx,%edi addl %ecx,%ebx - # R3 60 + # R3 60 orl %ebx,%edi leal 4149444226(%eax,%ebp,1),%eax xorl %ecx,%edi @@ -625,7 +625,7 @@ roll $6,%eax xorl %ecx,%edi addl %ebx,%eax - # R3 61 + # R3 61 orl %eax,%edi leal 3174756917(%edx,%ebp,1),%edx xorl %ebx,%edi @@ -635,7 +635,7 @@ roll $10,%edx xorl %ebx,%edi addl %eax,%edx - # R3 62 + # R3 62 orl %edx,%edi leal 718787259(%ecx,%ebp,1),%ecx xorl %eax,%edi @@ -645,7 +645,7 @@ roll $15,%ecx xorl %eax,%edi addl %edx,%ecx - # R3 63 + # R3 63 orl %ecx,%edi leal 3951481745(%ebx,%ebp,1),%ebx xorl %edx,%edi diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/ripemd/rmd-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/ripemd/rmd-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/ripemd/rmd-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/ripemd/rmd-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -51,7 +51,7 @@ movl %edi,%eax movl 12(%edx),%ebx movl 16(%edx),%ebp - # 0 + # 0 xorl %ebx,%eax movl (%esp),%edx xorl %esi,%eax @@ -61,7 +61,7 @@ movl %esi,%eax roll $11,%ecx addl %ebp,%ecx - # 1 + # 1 xorl %edi,%eax movl 4(%esp),%edx xorl %ecx,%eax @@ -72,7 +72,7 @@ xorl %esi,%eax roll $14,%ebp addl %ebx,%ebp - # 2 + # 2 movl 8(%esp),%edx xorl %ebp,%eax addl %edx,%ebx @@ -81,7 +81,7 @@ movl %ebp,%eax roll $15,%ebx addl %edi,%ebx - # 3 + # 3 xorl %ecx,%eax movl 12(%esp),%edx xorl %ebx,%eax @@ -92,7 +92,7 @@ xorl %ebp,%eax roll $12,%edi addl %esi,%edi - # 4 + # 4 movl 16(%esp),%edx xorl %edi,%eax addl %edx,%esi @@ -101,7 +101,7 @@ movl %edi,%eax roll $5,%esi addl %ecx,%esi - # 5 + # 5 xorl %ebx,%eax movl 20(%esp),%edx xorl %esi,%eax @@ -112,7 +112,7 @@ xorl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 6 + # 6 movl 24(%esp),%edx xorl %ecx,%eax addl %edx,%ebp @@ -121,7 +121,7 @@ movl %ecx,%eax roll $7,%ebp addl %ebx,%ebp - # 7 + # 7 xorl %esi,%eax movl 28(%esp),%edx xorl %ebp,%eax @@ -132,7 +132,7 @@ xorl %ecx,%eax roll $9,%ebx addl %edi,%ebx - # 8 + # 8 movl 32(%esp),%edx xorl %ebx,%eax addl %edx,%edi @@ -141,7 +141,7 @@ movl %ebx,%eax roll $11,%edi addl %esi,%edi - # 9 + # 9 xorl %ebp,%eax movl 36(%esp),%edx xorl %edi,%eax @@ -152,7 +152,7 @@ xorl %ebx,%eax roll $13,%esi addl %ecx,%esi - # 10 + # 10 movl 40(%esp),%edx xorl %esi,%eax addl %edx,%ecx @@ -161,7 +161,7 @@ movl %esi,%eax roll $14,%ecx addl %ebp,%ecx - # 11 + # 11 xorl %edi,%eax movl 44(%esp),%edx xorl %ecx,%eax @@ -172,7 +172,7 @@ xorl %esi,%eax roll $15,%ebp addl %ebx,%ebp - # 12 + # 12 movl 48(%esp),%edx xorl %ebp,%eax addl %edx,%ebx @@ -181,7 +181,7 @@ movl %ebp,%eax roll $6,%ebx addl %edi,%ebx - # 13 + # 13 xorl %ecx,%eax movl 52(%esp),%edx xorl %ebx,%eax @@ -192,7 +192,7 @@ xorl %ebp,%eax roll $7,%edi addl %esi,%edi - # 14 + # 14 movl 56(%esp),%edx xorl %edi,%eax addl %edx,%esi @@ -201,7 +201,7 @@ movl %edi,%eax roll $9,%esi addl %ecx,%esi - # 15 + # 15 xorl %ebx,%eax movl 60(%esp),%edx xorl %esi,%eax @@ -212,7 +212,7 @@ movl 28(%esp),%edx roll $8,%ecx addl %ebp,%ecx - # 16 + # 16 addl %edx,%ebp movl %esi,%edx subl %ecx,%eax @@ -225,7 +225,7 @@ movl $-1,%edx roll $7,%ebp addl %ebx,%ebp - # 17 + # 17 addl %eax,%ebx movl %ecx,%eax subl %ebp,%edx @@ -238,7 +238,7 @@ movl $-1,%eax roll $6,%ebx addl %edi,%ebx - # 18 + # 18 addl %edx,%edi movl %ebp,%edx subl %ebx,%eax @@ -251,7 +251,7 @@ movl $-1,%edx roll $8,%edi addl %esi,%edi - # 19 + # 19 addl %eax,%esi movl %ebx,%eax subl %edi,%edx @@ -264,7 +264,7 @@ movl $-1,%eax roll $13,%esi addl %ecx,%esi - # 20 + # 20 addl %edx,%ecx movl %edi,%edx subl %esi,%eax @@ -277,7 +277,7 @@ movl $-1,%edx roll $11,%ecx addl %ebp,%ecx - # 21 + # 21 addl %eax,%ebp movl %esi,%eax subl %ecx,%edx @@ -290,7 +290,7 @@ movl $-1,%eax roll $9,%ebp addl %ebx,%ebp - # 22 + # 22 addl %edx,%ebx movl %ecx,%edx subl %ebp,%eax @@ -303,7 +303,7 @@ movl $-1,%edx roll $7,%ebx addl %edi,%ebx - # 23 + # 23 addl %eax,%edi movl %ebp,%eax subl %ebx,%edx @@ -316,7 +316,7 @@ movl $-1,%eax roll $15,%edi addl %esi,%edi - # 24 + # 24 addl %edx,%esi movl %ebx,%edx subl %edi,%eax @@ -329,7 +329,7 @@ movl $-1,%edx roll $7,%esi addl %ecx,%esi - # 25 + # 25 addl %eax,%ecx movl %edi,%eax subl %esi,%edx @@ -342,7 +342,7 @@ movl $-1,%eax roll $12,%ecx addl %ebp,%ecx - # 26 + # 26 addl %edx,%ebp movl %esi,%edx subl %ecx,%eax @@ -355,7 +355,7 @@ movl $-1,%edx roll $15,%ebp addl %ebx,%ebp - # 27 + # 27 addl %eax,%ebx movl %ecx,%eax subl %ebp,%edx @@ -368,7 +368,7 @@ movl $-1,%eax roll $9,%ebx addl %edi,%ebx - # 28 + # 28 addl %edx,%edi movl %ebp,%edx subl %ebx,%eax @@ -381,7 +381,7 @@ movl $-1,%edx roll $11,%edi addl %esi,%edi - # 29 + # 29 addl %eax,%esi movl %ebx,%eax subl %edi,%edx @@ -394,7 +394,7 @@ movl $-1,%eax roll $7,%esi addl %ecx,%esi - # 30 + # 30 addl %edx,%ecx movl %edi,%edx subl %esi,%eax @@ -407,7 +407,7 @@ movl $-1,%edx roll $13,%ecx addl %ebp,%ecx - # 31 + # 31 addl %eax,%ebp movl %esi,%eax subl %ecx,%edx @@ -420,7 +420,7 @@ subl %ecx,%edx roll $12,%ebp addl %ebx,%ebp - # 32 + # 32 movl 12(%esp),%eax orl %ebp,%edx addl %eax,%ebx @@ -431,7 +431,7 @@ subl %ebp,%eax roll $11,%ebx addl %edi,%ebx - # 33 + # 33 movl 40(%esp),%edx orl %ebx,%eax addl %edx,%edi @@ -442,7 +442,7 @@ subl %ebx,%edx roll $13,%edi addl %esi,%edi - # 34 + # 34 movl 56(%esp),%eax orl %edi,%edx addl %eax,%esi @@ -453,7 +453,7 @@ subl %edi,%eax roll $6,%esi addl %ecx,%esi - # 35 + # 35 movl 16(%esp),%edx orl %esi,%eax addl %edx,%ecx @@ -464,7 +464,7 @@ subl %esi,%edx roll $7,%ecx addl %ebp,%ecx - # 36 + # 36 movl 36(%esp),%eax orl %ecx,%edx addl %eax,%ebp @@ -475,7 +475,7 @@ subl %ecx,%eax roll $14,%ebp addl %ebx,%ebp - # 37 + # 37 movl 60(%esp),%edx orl %ebp,%eax addl %edx,%ebx @@ -486,7 +486,7 @@ subl %ebp,%edx roll $9,%ebx addl %edi,%ebx - # 38 + # 38 movl 32(%esp),%eax orl %ebx,%edx addl %eax,%edi @@ -497,7 +497,7 @@ subl %ebx,%eax roll $13,%edi addl %esi,%edi - # 39 + # 39 movl 4(%esp),%edx orl %edi,%eax addl %edx,%esi @@ -508,7 +508,7 @@ subl %edi,%edx roll $15,%esi addl %ecx,%esi - # 40 + # 40 movl 8(%esp),%eax orl %esi,%edx addl %eax,%ecx @@ -519,7 +519,7 @@ subl %esi,%eax roll $14,%ecx addl %ebp,%ecx - # 41 + # 41 movl 28(%esp),%edx orl %ecx,%eax addl %edx,%ebp @@ -530,7 +530,7 @@ subl %ecx,%edx roll $8,%ebp addl %ebx,%ebp - # 42 + # 42 movl (%esp),%eax orl %ebp,%edx addl %eax,%ebx @@ -541,7 +541,7 @@ subl %ebp,%eax roll $13,%ebx addl %edi,%ebx - # 43 + # 43 movl 24(%esp),%edx orl %ebx,%eax addl %edx,%edi @@ -552,7 +552,7 @@ subl %ebx,%edx roll $6,%edi addl %esi,%edi - # 44 + # 44 movl 52(%esp),%eax orl %edi,%edx addl %eax,%esi @@ -563,7 +563,7 @@ subl %edi,%eax roll $5,%esi addl %ecx,%esi - # 45 + # 45 movl 44(%esp),%edx orl %esi,%eax addl %edx,%ecx @@ -574,7 +574,7 @@ subl %esi,%edx roll $12,%ecx addl %ebp,%ecx - # 46 + # 46 movl 20(%esp),%eax orl %ecx,%edx addl %eax,%ebp @@ -585,7 +585,7 @@ subl %ecx,%eax roll $7,%ebp addl %ebx,%ebp - # 47 + # 47 movl 48(%esp),%edx orl %ebp,%eax addl %edx,%ebx @@ -596,7 +596,7 @@ movl %ecx,%eax roll $5,%ebx addl %edi,%ebx - # 48 + # 48 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -609,7 +609,7 @@ movl %ebp,%eax roll $11,%edi addl %esi,%edi - # 49 + # 49 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -622,7 +622,7 @@ movl %ebx,%eax roll $12,%esi addl %ecx,%esi - # 50 + # 50 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -635,7 +635,7 @@ movl %edi,%eax roll $14,%ecx addl %ebp,%ecx - # 51 + # 51 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -648,7 +648,7 @@ movl %esi,%eax roll $15,%ebp addl %ebx,%ebp - # 52 + # 52 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -661,7 +661,7 @@ movl %ecx,%eax roll $14,%ebx addl %edi,%ebx - # 53 + # 53 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -674,7 +674,7 @@ movl %ebp,%eax roll $15,%edi addl %esi,%edi - # 54 + # 54 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -687,7 +687,7 @@ movl %ebx,%eax roll $9,%esi addl %ecx,%esi - # 55 + # 55 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -700,7 +700,7 @@ movl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 56 + # 56 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -713,7 +713,7 @@ movl %esi,%eax roll $9,%ebp addl %ebx,%ebp - # 57 + # 57 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -726,7 +726,7 @@ movl %ecx,%eax roll $14,%ebx addl %edi,%ebx - # 58 + # 58 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -739,7 +739,7 @@ movl %ebp,%eax roll $5,%edi addl %esi,%edi - # 59 + # 59 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -752,7 +752,7 @@ movl %ebx,%eax roll $6,%esi addl %ecx,%esi - # 60 + # 60 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -765,7 +765,7 @@ movl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 61 + # 61 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -778,7 +778,7 @@ movl %esi,%eax roll $6,%ebp addl %ebx,%ebp - # 62 + # 62 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -791,7 +791,7 @@ movl %ecx,%eax roll $5,%ebx addl %edi,%ebx - # 63 + # 63 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -804,7 +804,7 @@ subl %ebp,%edx roll $12,%edi addl %esi,%edi - # 64 + # 64 movl 16(%esp),%eax orl %ebx,%edx addl %eax,%esi @@ -815,7 +815,7 @@ subl %ebx,%eax roll $9,%esi addl %ecx,%esi - # 65 + # 65 movl (%esp),%edx orl %edi,%eax addl %edx,%ecx @@ -826,7 +826,7 @@ subl %edi,%edx roll $15,%ecx addl %ebp,%ecx - # 66 + # 66 movl 20(%esp),%eax orl %esi,%edx addl %eax,%ebp @@ -837,7 +837,7 @@ subl %esi,%eax roll $5,%ebp addl %ebx,%ebp - # 67 + # 67 movl 36(%esp),%edx orl %ecx,%eax addl %edx,%ebx @@ -848,7 +848,7 @@ subl %ecx,%edx roll $11,%ebx addl %edi,%ebx - # 68 + # 68 movl 28(%esp),%eax orl %ebp,%edx addl %eax,%edi @@ -859,7 +859,7 @@ subl %ebp,%eax roll $6,%edi addl %esi,%edi - # 69 + # 69 movl 48(%esp),%edx orl %ebx,%eax addl %edx,%esi @@ -870,7 +870,7 @@ subl %ebx,%edx roll $8,%esi addl %ecx,%esi - # 70 + # 70 movl 8(%esp),%eax orl %edi,%edx addl %eax,%ecx @@ -881,7 +881,7 @@ subl %edi,%eax roll $13,%ecx addl %ebp,%ecx - # 71 + # 71 movl 40(%esp),%edx orl %esi,%eax addl %edx,%ebp @@ -892,7 +892,7 @@ subl %esi,%edx roll $12,%ebp addl %ebx,%ebp - # 72 + # 72 movl 56(%esp),%eax orl %ecx,%edx addl %eax,%ebx @@ -903,7 +903,7 @@ subl %ecx,%eax roll $5,%ebx addl %edi,%ebx - # 73 + # 73 movl 4(%esp),%edx orl %ebp,%eax addl %edx,%edi @@ -914,7 +914,7 @@ subl %ebp,%edx roll $12,%edi addl %esi,%edi - # 74 + # 74 movl 12(%esp),%eax orl %ebx,%edx addl %eax,%esi @@ -925,7 +925,7 @@ subl %ebx,%eax roll $13,%esi addl %ecx,%esi - # 75 + # 75 movl 32(%esp),%edx orl %edi,%eax addl %edx,%ecx @@ -936,7 +936,7 @@ subl %edi,%edx roll $14,%ecx addl %ebp,%ecx - # 76 + # 76 movl 44(%esp),%eax orl %esi,%edx addl %eax,%ebp @@ -947,7 +947,7 @@ subl %esi,%eax roll $11,%ebp addl %ebx,%ebp - # 77 + # 77 movl 24(%esp),%edx orl %ecx,%eax addl %edx,%ebx @@ -958,7 +958,7 @@ subl %ecx,%edx roll $8,%ebx addl %edi,%ebx - # 78 + # 78 movl 60(%esp),%eax orl %ebp,%edx addl %eax,%edi @@ -969,7 +969,7 @@ subl %ebp,%eax roll $5,%edi addl %esi,%edi - # 79 + # 79 movl 52(%esp),%edx orl %ebx,%eax addl %edx,%esi @@ -989,7 +989,7 @@ movl %ebp,80(%esp) movl 12(%edx),%ebx movl 16(%edx),%ebp - # 80 + # 80 movl $-1,%edx subl %ebx,%edx movl 20(%esp),%eax @@ -1002,7 +1002,7 @@ subl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 81 + # 81 movl 56(%esp),%edx orl %esi,%eax addl %edx,%ebp @@ -1013,7 +1013,7 @@ subl %esi,%edx roll $9,%ebp addl %ebx,%ebp - # 82 + # 82 movl 28(%esp),%eax orl %ecx,%edx addl %eax,%ebx @@ -1024,7 +1024,7 @@ subl %ecx,%eax roll $9,%ebx addl %edi,%ebx - # 83 + # 83 movl (%esp),%edx orl %ebp,%eax addl %edx,%edi @@ -1035,7 +1035,7 @@ subl %ebp,%edx roll $11,%edi addl %esi,%edi - # 84 + # 84 movl 36(%esp),%eax orl %ebx,%edx addl %eax,%esi @@ -1046,7 +1046,7 @@ subl %ebx,%eax roll $13,%esi addl %ecx,%esi - # 85 + # 85 movl 8(%esp),%edx orl %edi,%eax addl %edx,%ecx @@ -1057,7 +1057,7 @@ subl %edi,%edx roll $15,%ecx addl %ebp,%ecx - # 86 + # 86 movl 44(%esp),%eax orl %esi,%edx addl %eax,%ebp @@ -1068,7 +1068,7 @@ subl %esi,%eax roll $15,%ebp addl %ebx,%ebp - # 87 + # 87 movl 16(%esp),%edx orl %ecx,%eax addl %edx,%ebx @@ -1079,7 +1079,7 @@ subl %ecx,%edx roll $5,%ebx addl %edi,%ebx - # 88 + # 88 movl 52(%esp),%eax orl %ebp,%edx addl %eax,%edi @@ -1090,7 +1090,7 @@ subl %ebp,%eax roll $7,%edi addl %esi,%edi - # 89 + # 89 movl 24(%esp),%edx orl %ebx,%eax addl %edx,%esi @@ -1101,7 +1101,7 @@ subl %ebx,%edx roll $7,%esi addl %ecx,%esi - # 90 + # 90 movl 60(%esp),%eax orl %edi,%edx addl %eax,%ecx @@ -1112,7 +1112,7 @@ subl %edi,%eax roll $8,%ecx addl %ebp,%ecx - # 91 + # 91 movl 32(%esp),%edx orl %esi,%eax addl %edx,%ebp @@ -1123,7 +1123,7 @@ subl %esi,%edx roll $11,%ebp addl %ebx,%ebp - # 92 + # 92 movl 4(%esp),%eax orl %ecx,%edx addl %eax,%ebx @@ -1134,7 +1134,7 @@ subl %ecx,%eax roll $14,%ebx addl %edi,%ebx - # 93 + # 93 movl 40(%esp),%edx orl %ebp,%eax addl %edx,%edi @@ -1145,7 +1145,7 @@ subl %ebp,%edx roll $14,%edi addl %esi,%edi - # 94 + # 94 movl 12(%esp),%eax orl %ebx,%edx addl %eax,%esi @@ -1156,7 +1156,7 @@ subl %ebx,%eax roll $12,%esi addl %ecx,%esi - # 95 + # 95 movl 48(%esp),%edx orl %edi,%eax addl %edx,%ecx @@ -1167,7 +1167,7 @@ movl %edi,%eax roll $6,%ecx addl %ebp,%ecx - # 96 + # 96 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -1180,7 +1180,7 @@ movl %esi,%eax roll $9,%ebp addl %ebx,%ebp - # 97 + # 97 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -1193,7 +1193,7 @@ movl %ecx,%eax roll $13,%ebx addl %edi,%ebx - # 98 + # 98 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -1206,7 +1206,7 @@ movl %ebp,%eax roll $15,%edi addl %esi,%edi - # 99 + # 99 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -1219,7 +1219,7 @@ movl %ebx,%eax roll $7,%esi addl %ecx,%esi - # 100 + # 100 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -1232,7 +1232,7 @@ movl %edi,%eax roll $12,%ecx addl %ebp,%ecx - # 101 + # 101 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -1245,7 +1245,7 @@ movl %esi,%eax roll $8,%ebp addl %ebx,%ebp - # 102 + # 102 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -1258,7 +1258,7 @@ movl %ecx,%eax roll $9,%ebx addl %edi,%ebx - # 103 + # 103 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -1271,7 +1271,7 @@ movl %ebp,%eax roll $11,%edi addl %esi,%edi - # 104 + # 104 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -1284,7 +1284,7 @@ movl %ebx,%eax roll $7,%esi addl %ecx,%esi - # 105 + # 105 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -1297,7 +1297,7 @@ movl %edi,%eax roll $7,%ecx addl %ebp,%ecx - # 106 + # 106 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -1310,7 +1310,7 @@ movl %esi,%eax roll $12,%ebp addl %ebx,%ebp - # 107 + # 107 subl %esi,%edx andl %ebp,%eax andl %ecx,%edx @@ -1323,7 +1323,7 @@ movl %ecx,%eax roll $7,%ebx addl %edi,%ebx - # 108 + # 108 subl %ecx,%edx andl %ebx,%eax andl %ebp,%edx @@ -1336,7 +1336,7 @@ movl %ebp,%eax roll $6,%edi addl %esi,%edi - # 109 + # 109 subl %ebp,%edx andl %edi,%eax andl %ebx,%edx @@ -1349,7 +1349,7 @@ movl %ebx,%eax roll $15,%esi addl %ecx,%esi - # 110 + # 110 subl %ebx,%edx andl %esi,%eax andl %edi,%edx @@ -1362,7 +1362,7 @@ movl %edi,%eax roll $13,%ecx addl %ebp,%ecx - # 111 + # 111 subl %edi,%edx andl %ecx,%eax andl %esi,%edx @@ -1375,7 +1375,7 @@ subl %ecx,%edx roll $11,%ebp addl %ebx,%ebp - # 112 + # 112 movl 60(%esp),%eax orl %ebp,%edx addl %eax,%ebx @@ -1386,7 +1386,7 @@ subl %ebp,%eax roll $9,%ebx addl %edi,%ebx - # 113 + # 113 movl 20(%esp),%edx orl %ebx,%eax addl %edx,%edi @@ -1397,7 +1397,7 @@ subl %ebx,%edx roll $7,%edi addl %esi,%edi - # 114 + # 114 movl 4(%esp),%eax orl %edi,%edx addl %eax,%esi @@ -1408,7 +1408,7 @@ subl %edi,%eax roll $15,%esi addl %ecx,%esi - # 115 + # 115 movl 12(%esp),%edx orl %esi,%eax addl %edx,%ecx @@ -1419,7 +1419,7 @@ subl %esi,%edx roll $11,%ecx addl %ebp,%ecx - # 116 + # 116 movl 28(%esp),%eax orl %ecx,%edx addl %eax,%ebp @@ -1430,7 +1430,7 @@ subl %ecx,%eax roll $8,%ebp addl %ebx,%ebp - # 117 + # 117 movl 56(%esp),%edx orl %ebp,%eax addl %edx,%ebx @@ -1441,7 +1441,7 @@ subl %ebp,%edx roll $6,%ebx addl %edi,%ebx - # 118 + # 118 movl 24(%esp),%eax orl %ebx,%edx addl %eax,%edi @@ -1452,7 +1452,7 @@ subl %ebx,%eax roll $6,%edi addl %esi,%edi - # 119 + # 119 movl 36(%esp),%edx orl %edi,%eax addl %edx,%esi @@ -1463,7 +1463,7 @@ subl %edi,%edx roll $14,%esi addl %ecx,%esi - # 120 + # 120 movl 44(%esp),%eax orl %esi,%edx addl %eax,%ecx @@ -1474,7 +1474,7 @@ subl %esi,%eax roll $12,%ecx addl %ebp,%ecx - # 121 + # 121 movl 32(%esp),%edx orl %ecx,%eax addl %edx,%ebp @@ -1485,7 +1485,7 @@ subl %ecx,%edx roll $13,%ebp addl %ebx,%ebp - # 122 + # 122 movl 48(%esp),%eax orl %ebp,%edx addl %eax,%ebx @@ -1496,7 +1496,7 @@ subl %ebp,%eax roll $5,%ebx addl %edi,%ebx - # 123 + # 123 movl 8(%esp),%edx orl %ebx,%eax addl %edx,%edi @@ -1507,7 +1507,7 @@ subl %ebx,%edx roll $14,%edi addl %esi,%edi - # 124 + # 124 movl 40(%esp),%eax orl %edi,%edx addl %eax,%esi @@ -1518,7 +1518,7 @@ subl %edi,%eax roll $13,%esi addl %ecx,%esi - # 125 + # 125 movl (%esp),%edx orl %esi,%eax addl %edx,%ecx @@ -1529,7 +1529,7 @@ subl %esi,%edx roll $13,%ecx addl %ebp,%ecx - # 126 + # 126 movl 16(%esp),%eax orl %ecx,%edx addl %eax,%ebp @@ -1540,7 +1540,7 @@ subl %ecx,%eax roll $7,%ebp addl %ebx,%ebp - # 127 + # 127 movl 52(%esp),%edx orl %ebp,%eax addl %edx,%ebx @@ -1551,7 +1551,7 @@ movl $-1,%eax roll $5,%ebx addl %edi,%ebx - # 128 + # 128 addl %edx,%edi movl %ebp,%edx subl %ebx,%eax @@ -1564,7 +1564,7 @@ movl $-1,%edx roll $15,%edi addl %esi,%edi - # 129 + # 129 addl %eax,%esi movl %ebx,%eax subl %edi,%edx @@ -1577,7 +1577,7 @@ movl $-1,%eax roll $5,%esi addl %ecx,%esi - # 130 + # 130 addl %edx,%ecx movl %edi,%edx subl %esi,%eax @@ -1590,7 +1590,7 @@ movl $-1,%edx roll $8,%ecx addl %ebp,%ecx - # 131 + # 131 addl %eax,%ebp movl %esi,%eax subl %ecx,%edx @@ -1603,7 +1603,7 @@ movl $-1,%eax roll $11,%ebp addl %ebx,%ebp - # 132 + # 132 addl %edx,%ebx movl %ecx,%edx subl %ebp,%eax @@ -1616,7 +1616,7 @@ movl $-1,%edx roll $14,%ebx addl %edi,%ebx - # 133 + # 133 addl %eax,%edi movl %ebp,%eax subl %ebx,%edx @@ -1629,7 +1629,7 @@ movl $-1,%eax roll $14,%edi addl %esi,%edi - # 134 + # 134 addl %edx,%esi movl %ebx,%edx subl %edi,%eax @@ -1642,7 +1642,7 @@ movl $-1,%edx roll $6,%esi addl %ecx,%esi - # 135 + # 135 addl %eax,%ecx movl %edi,%eax subl %esi,%edx @@ -1655,7 +1655,7 @@ movl $-1,%eax roll $14,%ecx addl %ebp,%ecx - # 136 + # 136 addl %edx,%ebp movl %esi,%edx subl %ecx,%eax @@ -1668,7 +1668,7 @@ movl $-1,%edx roll $6,%ebp addl %ebx,%ebp - # 137 + # 137 addl %eax,%ebx movl %ecx,%eax subl %ebp,%edx @@ -1681,7 +1681,7 @@ movl $-1,%eax roll $9,%ebx addl %edi,%ebx - # 138 + # 138 addl %edx,%edi movl %ebp,%edx subl %ebx,%eax @@ -1694,7 +1694,7 @@ movl $-1,%edx roll $12,%edi addl %esi,%edi - # 139 + # 139 addl %eax,%esi movl %ebx,%eax subl %edi,%edx @@ -1707,7 +1707,7 @@ movl $-1,%eax roll $9,%esi addl %ecx,%esi - # 140 + # 140 addl %edx,%ecx movl %edi,%edx subl %esi,%eax @@ -1720,7 +1720,7 @@ movl $-1,%edx roll $12,%ecx addl %ebp,%ecx - # 141 + # 141 addl %eax,%ebp movl %esi,%eax subl %ecx,%edx @@ -1733,7 +1733,7 @@ movl $-1,%eax roll $5,%ebp addl %ebx,%ebp - # 142 + # 142 addl %edx,%ebx movl %ecx,%edx subl %ebp,%eax @@ -1746,7 +1746,7 @@ movl $-1,%edx roll $15,%ebx addl %edi,%ebx - # 143 + # 143 addl %eax,%edi movl %ebp,%eax subl %ebx,%edx @@ -1759,7 +1759,7 @@ xorl %ebp,%eax roll $8,%edi addl %esi,%edi - # 144 + # 144 movl 48(%esp),%edx xorl %edi,%eax addl %edx,%esi @@ -1768,7 +1768,7 @@ movl %edi,%eax roll $8,%esi addl %ecx,%esi - # 145 + # 145 xorl %ebx,%eax movl 60(%esp),%edx xorl %esi,%eax @@ -1779,7 +1779,7 @@ xorl %edi,%eax roll $5,%ecx addl %ebp,%ecx - # 146 + # 146 movl 40(%esp),%edx xorl %ecx,%eax addl %edx,%ebp @@ -1788,7 +1788,7 @@ movl %ecx,%eax roll $12,%ebp addl %ebx,%ebp - # 147 + # 147 xorl %esi,%eax movl 16(%esp),%edx xorl %ebp,%eax @@ -1799,7 +1799,7 @@ xorl %ecx,%eax roll $9,%ebx addl %edi,%ebx - # 148 + # 148 movl 4(%esp),%edx xorl %ebx,%eax addl %edx,%edi @@ -1808,7 +1808,7 @@ movl %ebx,%eax roll $12,%edi addl %esi,%edi - # 149 + # 149 xorl %ebp,%eax movl 20(%esp),%edx xorl %edi,%eax @@ -1819,7 +1819,7 @@ xorl %ebx,%eax roll $5,%esi addl %ecx,%esi - # 150 + # 150 movl 32(%esp),%edx xorl %esi,%eax addl %edx,%ecx @@ -1828,7 +1828,7 @@ movl %esi,%eax roll $14,%ecx addl %ebp,%ecx - # 151 + # 151 xorl %edi,%eax movl 28(%esp),%edx xorl %ecx,%eax @@ -1839,7 +1839,7 @@ xorl %esi,%eax roll $6,%ebp addl %ebx,%ebp - # 152 + # 152 movl 24(%esp),%edx xorl %ebp,%eax addl %edx,%ebx @@ -1848,7 +1848,7 @@ movl %ebp,%eax roll $8,%ebx addl %edi,%ebx - # 153 + # 153 xorl %ecx,%eax movl 8(%esp),%edx xorl %ebx,%eax @@ -1859,7 +1859,7 @@ xorl %ebp,%eax roll $13,%edi addl %esi,%edi - # 154 + # 154 movl 52(%esp),%edx xorl %edi,%eax addl %edx,%esi @@ -1868,7 +1868,7 @@ movl %edi,%eax roll $6,%esi addl %ecx,%esi - # 155 + # 155 xorl %ebx,%eax movl 56(%esp),%edx xorl %esi,%eax @@ -1879,7 +1879,7 @@ xorl %edi,%eax roll $5,%ecx addl %ebp,%ecx - # 156 + # 156 movl (%esp),%edx xorl %ecx,%eax addl %edx,%ebp @@ -1888,7 +1888,7 @@ movl %ecx,%eax roll $15,%ebp addl %ebx,%ebp - # 157 + # 157 xorl %esi,%eax movl 12(%esp),%edx xorl %ebp,%eax @@ -1899,7 +1899,7 @@ xorl %ecx,%eax roll $13,%ebx addl %edi,%ebx - # 158 + # 158 movl 36(%esp),%edx xorl %ebx,%eax addl %edx,%edi @@ -1908,7 +1908,7 @@ movl %ebx,%eax roll $11,%edi addl %esi,%edi - # 159 + # 159 xorl %ebp,%eax movl 44(%esp),%edx xorl %edi,%eax diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/sha/sha1-586.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/sha/sha1-586.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/sha/sha1-586.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/crypto/sha/sha1-586.s 2022-04-05 07:17:00.000000000 +0000 @@ -95,7 +95,7 @@ movl 4(%ebp),%ebx movl 8(%ebp),%ecx movl 12(%ebp),%edx - # 00_15 0 + # 00_15 0 movl %ecx,%esi movl %eax,%ebp roll $5,%ebp @@ -107,7 +107,7 @@ xorl %edx,%esi leal 1518500249(%ebp,%edi,1),%ebp addl %esi,%ebp - # 00_15 1 + # 00_15 1 movl %ebx,%edi movl %ebp,%esi roll $5,%ebp @@ -119,7 +119,7 @@ xorl %ecx,%edi leal 1518500249(%ebp,%edx,1),%ebp addl %edi,%ebp - # 00_15 2 + # 00_15 2 movl %eax,%edx movl %ebp,%edi roll $5,%ebp @@ -131,7 +131,7 @@ xorl %ebx,%edx leal 1518500249(%ebp,%ecx,1),%ebp addl %edx,%ebp - # 00_15 3 + # 00_15 3 movl %esi,%ecx movl %ebp,%edx roll $5,%ebp @@ -143,7 +143,7 @@ xorl %eax,%ecx leal 1518500249(%ebp,%ebx,1),%ebp addl %ecx,%ebp - # 00_15 4 + # 00_15 4 movl %edi,%ebx movl %ebp,%ecx roll $5,%ebp @@ -155,7 +155,7 @@ xorl %esi,%ebx leal 1518500249(%ebp,%eax,1),%ebp addl %ebx,%ebp - # 00_15 5 + # 00_15 5 movl %edx,%eax movl %ebp,%ebx roll $5,%ebp @@ -167,7 +167,7 @@ xorl %edi,%eax leal 1518500249(%ebp,%esi,1),%ebp addl %eax,%ebp - # 00_15 6 + # 00_15 6 movl %ecx,%esi movl %ebp,%eax roll $5,%ebp @@ -179,7 +179,7 @@ xorl %edx,%esi leal 1518500249(%ebp,%edi,1),%ebp addl %esi,%ebp - # 00_15 7 + # 00_15 7 movl %ebx,%edi movl %ebp,%esi roll $5,%ebp @@ -191,7 +191,7 @@ xorl %ecx,%edi leal 1518500249(%ebp,%edx,1),%ebp addl %edi,%ebp - # 00_15 8 + # 00_15 8 movl %eax,%edx movl %ebp,%edi roll $5,%ebp @@ -203,7 +203,7 @@ xorl %ebx,%edx leal 1518500249(%ebp,%ecx,1),%ebp addl %edx,%ebp - # 00_15 9 + # 00_15 9 movl %esi,%ecx movl %ebp,%edx roll $5,%ebp @@ -215,7 +215,7 @@ xorl %eax,%ecx leal 1518500249(%ebp,%ebx,1),%ebp addl %ecx,%ebp - # 00_15 10 + # 00_15 10 movl %edi,%ebx movl %ebp,%ecx roll $5,%ebp @@ -227,7 +227,7 @@ xorl %esi,%ebx leal 1518500249(%ebp,%eax,1),%ebp addl %ebx,%ebp - # 00_15 11 + # 00_15 11 movl %edx,%eax movl %ebp,%ebx roll $5,%ebp @@ -239,7 +239,7 @@ xorl %edi,%eax leal 1518500249(%ebp,%esi,1),%ebp addl %eax,%ebp - # 00_15 12 + # 00_15 12 movl %ecx,%esi movl %ebp,%eax roll $5,%ebp @@ -251,7 +251,7 @@ xorl %edx,%esi leal 1518500249(%ebp,%edi,1),%ebp addl %esi,%ebp - # 00_15 13 + # 00_15 13 movl %ebx,%edi movl %ebp,%esi roll $5,%ebp @@ -263,7 +263,7 @@ xorl %ecx,%edi leal 1518500249(%ebp,%edx,1),%ebp addl %edi,%ebp - # 00_15 14 + # 00_15 14 movl %eax,%edx movl %ebp,%edi roll $5,%ebp @@ -275,7 +275,7 @@ xorl %ebx,%edx leal 1518500249(%ebp,%ecx,1),%ebp addl %edx,%ebp - # 00_15 15 + # 00_15 15 movl %esi,%ecx movl %ebp,%edx roll $5,%ebp @@ -288,7 +288,7 @@ leal 1518500249(%ebp,%ebx,1),%ebp movl (%esp),%ebx addl %ebp,%ecx - # 16_19 16 + # 16_19 16 movl %edi,%ebp xorl 8(%esp),%ebx xorl %esi,%ebp @@ -305,7 +305,7 @@ leal 1518500249(%ebx,%eax,1),%ebx movl 4(%esp),%eax addl %ebp,%ebx - # 16_19 17 + # 16_19 17 movl %edx,%ebp xorl 12(%esp),%eax xorl %edi,%ebp @@ -322,7 +322,7 @@ leal 1518500249(%eax,%esi,1),%eax movl 8(%esp),%esi addl %ebp,%eax - # 16_19 18 + # 16_19 18 movl %ecx,%ebp xorl 16(%esp),%esi xorl %edx,%ebp @@ -339,7 +339,7 @@ leal 1518500249(%esi,%edi,1),%esi movl 12(%esp),%edi addl %ebp,%esi - # 16_19 19 + # 16_19 19 movl %ebx,%ebp xorl 20(%esp),%edi xorl %ecx,%ebp @@ -356,7 +356,7 @@ leal 1518500249(%edi,%edx,1),%edi movl 16(%esp),%edx addl %ebp,%edi - # 20_39 20 + # 20_39 20 movl %esi,%ebp xorl 24(%esp),%edx xorl %eax,%ebp @@ -372,7 +372,7 @@ leal 1859775393(%edx,%ecx,1),%edx movl 20(%esp),%ecx addl %ebp,%edx - # 20_39 21 + # 20_39 21 movl %edi,%ebp xorl 28(%esp),%ecx xorl %esi,%ebp @@ -388,7 +388,7 @@ leal 1859775393(%ecx,%ebx,1),%ecx movl 24(%esp),%ebx addl %ebp,%ecx - # 20_39 22 + # 20_39 22 movl %edx,%ebp xorl 32(%esp),%ebx xorl %edi,%ebp @@ -404,7 +404,7 @@ leal 1859775393(%ebx,%eax,1),%ebx movl 28(%esp),%eax addl %ebp,%ebx - # 20_39 23 + # 20_39 23 movl %ecx,%ebp xorl 36(%esp),%eax xorl %edx,%ebp @@ -420,7 +420,7 @@ leal 1859775393(%eax,%esi,1),%eax movl 32(%esp),%esi addl %ebp,%eax - # 20_39 24 + # 20_39 24 movl %ebx,%ebp xorl 40(%esp),%esi xorl %ecx,%ebp @@ -436,7 +436,7 @@ leal 1859775393(%esi,%edi,1),%esi movl 36(%esp),%edi addl %ebp,%esi - # 20_39 25 + # 20_39 25 movl %eax,%ebp xorl 44(%esp),%edi xorl %ebx,%ebp @@ -452,7 +452,7 @@ leal 1859775393(%edi,%edx,1),%edi movl 40(%esp),%edx addl %ebp,%edi - # 20_39 26 + # 20_39 26 movl %esi,%ebp xorl 48(%esp),%edx xorl %eax,%ebp @@ -468,7 +468,7 @@ leal 1859775393(%edx,%ecx,1),%edx movl 44(%esp),%ecx addl %ebp,%edx - # 20_39 27 + # 20_39 27 movl %edi,%ebp xorl 52(%esp),%ecx xorl %esi,%ebp @@ -484,7 +484,7 @@ leal 1859775393(%ecx,%ebx,1),%ecx movl 48(%esp),%ebx addl %ebp,%ecx - # 20_39 28 + # 20_39 28 movl %edx,%ebp xorl 56(%esp),%ebx xorl %edi,%ebp @@ -500,7 +500,7 @@ leal 1859775393(%ebx,%eax,1),%ebx movl 52(%esp),%eax addl %ebp,%ebx - # 20_39 29 + # 20_39 29 movl %ecx,%ebp xorl 60(%esp),%eax xorl %edx,%ebp @@ -516,7 +516,7 @@ leal 1859775393(%eax,%esi,1),%eax movl 56(%esp),%esi addl %ebp,%eax - # 20_39 30 + # 20_39 30 movl %ebx,%ebp xorl (%esp),%esi xorl %ecx,%ebp @@ -532,7 +532,7 @@ leal 1859775393(%esi,%edi,1),%esi movl 60(%esp),%edi addl %ebp,%esi - # 20_39 31 + # 20_39 31 movl %eax,%ebp xorl 4(%esp),%edi xorl %ebx,%ebp @@ -548,7 +548,7 @@ leal 1859775393(%edi,%edx,1),%edi movl (%esp),%edx addl %ebp,%edi - # 20_39 32 + # 20_39 32 movl %esi,%ebp xorl 8(%esp),%edx xorl %eax,%ebp @@ -564,7 +564,7 @@ leal 1859775393(%edx,%ecx,1),%edx movl 4(%esp),%ecx addl %ebp,%edx - # 20_39 33 + # 20_39 33 movl %edi,%ebp xorl 12(%esp),%ecx xorl %esi,%ebp @@ -580,7 +580,7 @@ leal 1859775393(%ecx,%ebx,1),%ecx movl 8(%esp),%ebx addl %ebp,%ecx - # 20_39 34 + # 20_39 34 movl %edx,%ebp xorl 16(%esp),%ebx xorl %edi,%ebp @@ -596,7 +596,7 @@ leal 1859775393(%ebx,%eax,1),%ebx movl 12(%esp),%eax addl %ebp,%ebx - # 20_39 35 + # 20_39 35 movl %ecx,%ebp xorl 20(%esp),%eax xorl %edx,%ebp @@ -612,7 +612,7 @@ leal 1859775393(%eax,%esi,1),%eax movl 16(%esp),%esi addl %ebp,%eax - # 20_39 36 + # 20_39 36 movl %ebx,%ebp xorl 24(%esp),%esi xorl %ecx,%ebp @@ -628,7 +628,7 @@ leal 1859775393(%esi,%edi,1),%esi movl 20(%esp),%edi addl %ebp,%esi - # 20_39 37 + # 20_39 37 movl %eax,%ebp xorl 28(%esp),%edi xorl %ebx,%ebp @@ -644,7 +644,7 @@ leal 1859775393(%edi,%edx,1),%edi movl 24(%esp),%edx addl %ebp,%edi - # 20_39 38 + # 20_39 38 movl %esi,%ebp xorl 32(%esp),%edx xorl %eax,%ebp @@ -660,7 +660,7 @@ leal 1859775393(%edx,%ecx,1),%edx movl 28(%esp),%ecx addl %ebp,%edx - # 20_39 39 + # 20_39 39 movl %edi,%ebp xorl 36(%esp),%ecx xorl %esi,%ebp @@ -676,7 +676,7 @@ leal 1859775393(%ecx,%ebx,1),%ecx movl 32(%esp),%ebx addl %ebp,%ecx - # 40_59 40 + # 40_59 40 movl %edi,%ebp xorl 40(%esp),%ebx xorl %esi,%ebp @@ -695,7 +695,7 @@ andl %esi,%ebp movl 36(%esp),%eax addl %ebp,%ebx - # 40_59 41 + # 40_59 41 movl %edx,%ebp xorl 44(%esp),%eax xorl %edi,%ebp @@ -714,7 +714,7 @@ andl %edi,%ebp movl 40(%esp),%esi addl %ebp,%eax - # 40_59 42 + # 40_59 42 movl %ecx,%ebp xorl 48(%esp),%esi xorl %edx,%ebp @@ -733,7 +733,7 @@ andl %edx,%ebp movl 44(%esp),%edi addl %ebp,%esi - # 40_59 43 + # 40_59 43 movl %ebx,%ebp xorl 52(%esp),%edi xorl %ecx,%ebp @@ -752,7 +752,7 @@ andl %ecx,%ebp movl 48(%esp),%edx addl %ebp,%edi - # 40_59 44 + # 40_59 44 movl %eax,%ebp xorl 56(%esp),%edx xorl %ebx,%ebp @@ -771,7 +771,7 @@ andl %ebx,%ebp movl 52(%esp),%ecx addl %ebp,%edx - # 40_59 45 + # 40_59 45 movl %esi,%ebp xorl 60(%esp),%ecx xorl %eax,%ebp @@ -790,7 +790,7 @@ andl %eax,%ebp movl 56(%esp),%ebx addl %ebp,%ecx - # 40_59 46 + # 40_59 46 movl %edi,%ebp xorl (%esp),%ebx xorl %esi,%ebp @@ -809,7 +809,7 @@ andl %esi,%ebp movl 60(%esp),%eax addl %ebp,%ebx - # 40_59 47 + # 40_59 47 movl %edx,%ebp xorl 4(%esp),%eax xorl %edi,%ebp @@ -828,7 +828,7 @@ andl %edi,%ebp movl (%esp),%esi addl %ebp,%eax - # 40_59 48 + # 40_59 48 movl %ecx,%ebp xorl 8(%esp),%esi xorl %edx,%ebp @@ -847,7 +847,7 @@ andl %edx,%ebp movl 4(%esp),%edi addl %ebp,%esi - # 40_59 49 + # 40_59 49 movl %ebx,%ebp xorl 12(%esp),%edi xorl %ecx,%ebp @@ -866,7 +866,7 @@ andl %ecx,%ebp movl 8(%esp),%edx addl %ebp,%edi - # 40_59 50 + # 40_59 50 movl %eax,%ebp xorl 16(%esp),%edx xorl %ebx,%ebp @@ -885,7 +885,7 @@ andl %ebx,%ebp movl 12(%esp),%ecx addl %ebp,%edx - # 40_59 51 + # 40_59 51 movl %esi,%ebp xorl 20(%esp),%ecx xorl %eax,%ebp @@ -904,7 +904,7 @@ andl %eax,%ebp movl 16(%esp),%ebx addl %ebp,%ecx - # 40_59 52 + # 40_59 52 movl %edi,%ebp xorl 24(%esp),%ebx xorl %esi,%ebp @@ -923,7 +923,7 @@ andl %esi,%ebp movl 20(%esp),%eax addl %ebp,%ebx - # 40_59 53 + # 40_59 53 movl %edx,%ebp xorl 28(%esp),%eax xorl %edi,%ebp @@ -942,7 +942,7 @@ andl %edi,%ebp movl 24(%esp),%esi addl %ebp,%eax - # 40_59 54 + # 40_59 54 movl %ecx,%ebp xorl 32(%esp),%esi xorl %edx,%ebp @@ -961,7 +961,7 @@ andl %edx,%ebp movl 28(%esp),%edi addl %ebp,%esi - # 40_59 55 + # 40_59 55 movl %ebx,%ebp xorl 36(%esp),%edi xorl %ecx,%ebp @@ -980,7 +980,7 @@ andl %ecx,%ebp movl 32(%esp),%edx addl %ebp,%edi - # 40_59 56 + # 40_59 56 movl %eax,%ebp xorl 40(%esp),%edx xorl %ebx,%ebp @@ -999,7 +999,7 @@ andl %ebx,%ebp movl 36(%esp),%ecx addl %ebp,%edx - # 40_59 57 + # 40_59 57 movl %esi,%ebp xorl 44(%esp),%ecx xorl %eax,%ebp @@ -1018,7 +1018,7 @@ andl %eax,%ebp movl 40(%esp),%ebx addl %ebp,%ecx - # 40_59 58 + # 40_59 58 movl %edi,%ebp xorl 48(%esp),%ebx xorl %esi,%ebp @@ -1037,7 +1037,7 @@ andl %esi,%ebp movl 44(%esp),%eax addl %ebp,%ebx - # 40_59 59 + # 40_59 59 movl %edx,%ebp xorl 52(%esp),%eax xorl %edi,%ebp @@ -1056,7 +1056,7 @@ andl %edi,%ebp movl 48(%esp),%esi addl %ebp,%eax - # 20_39 60 + # 20_39 60 movl %ebx,%ebp xorl 56(%esp),%esi xorl %ecx,%ebp @@ -1072,7 +1072,7 @@ leal 3395469782(%esi,%edi,1),%esi movl 52(%esp),%edi addl %ebp,%esi - # 20_39 61 + # 20_39 61 movl %eax,%ebp xorl 60(%esp),%edi xorl %ebx,%ebp @@ -1088,7 +1088,7 @@ leal 3395469782(%edi,%edx,1),%edi movl 56(%esp),%edx addl %ebp,%edi - # 20_39 62 + # 20_39 62 movl %esi,%ebp xorl (%esp),%edx xorl %eax,%ebp @@ -1104,7 +1104,7 @@ leal 3395469782(%edx,%ecx,1),%edx movl 60(%esp),%ecx addl %ebp,%edx - # 20_39 63 + # 20_39 63 movl %edi,%ebp xorl 4(%esp),%ecx xorl %esi,%ebp @@ -1120,7 +1120,7 @@ leal 3395469782(%ecx,%ebx,1),%ecx movl (%esp),%ebx addl %ebp,%ecx - # 20_39 64 + # 20_39 64 movl %edx,%ebp xorl 8(%esp),%ebx xorl %edi,%ebp @@ -1136,7 +1136,7 @@ leal 3395469782(%ebx,%eax,1),%ebx movl 4(%esp),%eax addl %ebp,%ebx - # 20_39 65 + # 20_39 65 movl %ecx,%ebp xorl 12(%esp),%eax xorl %edx,%ebp @@ -1152,7 +1152,7 @@ leal 3395469782(%eax,%esi,1),%eax movl 8(%esp),%esi addl %ebp,%eax - # 20_39 66 + # 20_39 66 movl %ebx,%ebp xorl 16(%esp),%esi xorl %ecx,%ebp @@ -1168,7 +1168,7 @@ leal 3395469782(%esi,%edi,1),%esi movl 12(%esp),%edi addl %ebp,%esi - # 20_39 67 + # 20_39 67 movl %eax,%ebp xorl 20(%esp),%edi xorl %ebx,%ebp @@ -1184,7 +1184,7 @@ leal 3395469782(%edi,%edx,1),%edi movl 16(%esp),%edx addl %ebp,%edi - # 20_39 68 + # 20_39 68 movl %esi,%ebp xorl 24(%esp),%edx xorl %eax,%ebp @@ -1200,7 +1200,7 @@ leal 3395469782(%edx,%ecx,1),%edx movl 20(%esp),%ecx addl %ebp,%edx - # 20_39 69 + # 20_39 69 movl %edi,%ebp xorl 28(%esp),%ecx xorl %esi,%ebp @@ -1216,7 +1216,7 @@ leal 3395469782(%ecx,%ebx,1),%ecx movl 24(%esp),%ebx addl %ebp,%ecx - # 20_39 70 + # 20_39 70 movl %edx,%ebp xorl 32(%esp),%ebx xorl %edi,%ebp @@ -1232,7 +1232,7 @@ leal 3395469782(%ebx,%eax,1),%ebx movl 28(%esp),%eax addl %ebp,%ebx - # 20_39 71 + # 20_39 71 movl %ecx,%ebp xorl 36(%esp),%eax xorl %edx,%ebp @@ -1248,7 +1248,7 @@ leal 3395469782(%eax,%esi,1),%eax movl 32(%esp),%esi addl %ebp,%eax - # 20_39 72 + # 20_39 72 movl %ebx,%ebp xorl 40(%esp),%esi xorl %ecx,%ebp @@ -1264,7 +1264,7 @@ leal 3395469782(%esi,%edi,1),%esi movl 36(%esp),%edi addl %ebp,%esi - # 20_39 73 + # 20_39 73 movl %eax,%ebp xorl 44(%esp),%edi xorl %ebx,%ebp @@ -1280,7 +1280,7 @@ leal 3395469782(%edi,%edx,1),%edi movl 40(%esp),%edx addl %ebp,%edi - # 20_39 74 + # 20_39 74 movl %esi,%ebp xorl 48(%esp),%edx xorl %eax,%ebp @@ -1296,7 +1296,7 @@ leal 3395469782(%edx,%ecx,1),%edx movl 44(%esp),%ecx addl %ebp,%edx - # 20_39 75 + # 20_39 75 movl %edi,%ebp xorl 52(%esp),%ecx xorl %esi,%ebp @@ -1312,7 +1312,7 @@ leal 3395469782(%ecx,%ebx,1),%ecx movl 48(%esp),%ebx addl %ebp,%ecx - # 20_39 76 + # 20_39 76 movl %edx,%ebp xorl 56(%esp),%ebx xorl %edi,%ebp @@ -1328,7 +1328,7 @@ leal 3395469782(%ebx,%eax,1),%ebx movl 52(%esp),%eax addl %ebp,%ebx - # 20_39 77 + # 20_39 77 movl %ecx,%ebp xorl 60(%esp),%eax xorl %edx,%ebp @@ -1343,7 +1343,7 @@ leal 3395469782(%eax,%esi,1),%eax movl 56(%esp),%esi addl %ebp,%eax - # 20_39 78 + # 20_39 78 movl %ebx,%ebp xorl (%esp),%esi xorl %ecx,%ebp @@ -1358,7 +1358,7 @@ leal 3395469782(%esi,%edi,1),%esi movl 60(%esp),%edi addl %ebp,%esi - # 20_39 79 + # 20_39 79 movl %eax,%ebp xorl 4(%esp),%edi xorl %ebx,%ebp diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -114,6 +114,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "BSD-x86" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "BSD-x86", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1170,6 +1170,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8910,6 +8915,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9487,6 +9496,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14147,6 +14157,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15121,19 +15139,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } @@ -15306,3 +15327,4 @@ =back =cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: BSD-x86" -#define DATE "built on: Tue Apr 21 13:28:34 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:44 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "BSD-x86_64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "BSD-x86_64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1181,6 +1181,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9084,6 +9089,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9661,6 +9670,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14436,6 +14446,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15407,19 +15425,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha1_enc,@function .align 32 aesni_cbc_sha1_enc: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+0(%rip),%r10d movq OPENSSL_ia32cap_P+4(%rip),%r11 @@ -18,7 +18,7 @@ je aesni_cbc_sha1_enc_avx jmp aesni_cbc_sha1_enc_ssse3 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc .type aesni_cbc_sha1_enc_ssse3,@function .align 32 @@ -2732,7 +2732,7 @@ .type aesni_cbc_sha1_enc_shaext,@function .align 32 aesni_cbc_sha1_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 movdqu (%r9),%xmm8 movd 16(%r9),%xmm9 @@ -3031,5 +3031,5 @@ movdqu %xmm8,(%r9) movd %xmm9,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha256_enc,@function .align 16 aesni_cbc_sha256_enc: -.cfi_startproc +.cfi_startproc leaq OPENSSL_ia32cap_P(%rip),%r11 movl $1,%eax cmpq $0,%rdi @@ -31,7 +31,7 @@ ud2 .Lprobe: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc .align 64 @@ -4081,7 +4081,7 @@ .type aesni_cbc_sha256_enc_shaext,@function .align 32 aesni_cbc_sha256_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 leaq K256+128(%rip),%rax movdqu (%r9),%xmm1 @@ -4431,5 +4431,5 @@ movdqu %xmm1,(%r9) movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/aes/aesni-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -861,7 +861,7 @@ .type aesni_ccm64_encrypt_blocks,@function .align 16 aesni_ccm64_encrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -920,13 +920,13 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -1019,7 +1019,7 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks .type aesni_ctr32_encrypt_blocks,@function @@ -2794,7 +2794,7 @@ .type __ocb_encrypt6,@function .align 32 __ocb_encrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2892,13 +2892,13 @@ .byte 102,65,15,56,221,246 .byte 102,65,15,56,221,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt6,.-__ocb_encrypt6 .type __ocb_encrypt4,@function .align 32 __ocb_encrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2963,13 +2963,13 @@ .byte 102,65,15,56,221,228 .byte 102,65,15,56,221,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt4,.-__ocb_encrypt4 .type __ocb_encrypt1,@function .align 32 __ocb_encrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm2,%xmm8 @@ -3000,7 +3000,7 @@ .byte 102,15,56,221,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt1,.-__ocb_encrypt1 .globl aesni_ocb_decrypt @@ -3243,7 +3243,7 @@ .type __ocb_decrypt6,@function .align 32 __ocb_decrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3335,13 +3335,13 @@ .byte 102,65,15,56,223,246 .byte 102,65,15,56,223,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt6,.-__ocb_decrypt6 .type __ocb_decrypt4,@function .align 32 __ocb_decrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3402,13 +3402,13 @@ .byte 102,65,15,56,223,228 .byte 102,65,15,56,223,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt4,.-__ocb_decrypt4 .type __ocb_decrypt1,@function .align 32 __ocb_decrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm7,%xmm2 @@ -3438,7 +3438,7 @@ .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt1,.-__ocb_decrypt1 .globl aesni_cbc_encrypt .type aesni_cbc_encrypt,@function @@ -4447,7 +4447,7 @@ shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_set_encrypt_key,.-aesni_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/bn/rsaz-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/bn/rsaz-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/bn/rsaz-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/bn/rsaz-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1453,7 +1453,7 @@ .type __rsaz_512_reduce,@function .align 32 __rsaz_512_reduce: -.cfi_startproc +.cfi_startproc movq %r8,%rbx imulq 128+8(%rsp),%rbx movq 0(%rbp),%rax @@ -1533,12 +1533,12 @@ jne .Lreduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reduce,.-__rsaz_512_reduce .type __rsaz_512_reducex,@function .align 32 __rsaz_512_reducex: -.cfi_startproc +.cfi_startproc imulq %r8,%rdx xorq %rsi,%rsi @@ -1591,12 +1591,12 @@ jne .Lreduction_loopx .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reducex,.-__rsaz_512_reducex .type __rsaz_512_subtract,@function .align 32 __rsaz_512_subtract: -.cfi_startproc +.cfi_startproc movq %r8,(%rdi) movq %r9,8(%rdi) movq %r10,16(%rdi) @@ -1650,12 +1650,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_subtract,.-__rsaz_512_subtract .type __rsaz_512_mul,@function .align 32 __rsaz_512_mul: -.cfi_startproc +.cfi_startproc leaq 8(%rsp),%rdi movq (%rsi),%rax @@ -1794,12 +1794,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mul,.-__rsaz_512_mul .type __rsaz_512_mulx,@function .align 32 __rsaz_512_mulx: -.cfi_startproc +.cfi_startproc mulxq (%rsi),%rbx,%r8 movq $-6,%rcx @@ -1916,13 +1916,13 @@ movq %r15,8+64+56(%rsp) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mulx,.-__rsaz_512_mulx .globl rsaz_512_scatter4 .type rsaz_512_scatter4,@function .align 16 rsaz_512_scatter4: -.cfi_startproc +.cfi_startproc leaq (%rdi,%rdx,8),%rdi movl $8,%r9d jmp .Loop_scatter @@ -1935,14 +1935,14 @@ decl %r9d jnz .Loop_scatter .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size rsaz_512_scatter4,.-rsaz_512_scatter4 .globl rsaz_512_gather4 .type rsaz_512_gather4,@function .align 16 rsaz_512_gather4: -.cfi_startproc +.cfi_startproc movd %edx,%xmm8 movdqa .Linc+16(%rip),%xmm1 movdqa .Linc(%rip),%xmm0 @@ -2006,7 +2006,7 @@ jnz .Loop_gather .byte 0xf3,0xc3 .LSEH_end_rsaz_512_gather4: -.cfi_endproc +.cfi_endproc .size rsaz_512_gather4,.-rsaz_512_gather4 .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/bn/x86_64-mont5.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/bn/x86_64-mont5.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/bn/x86_64-mont5.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/bn/x86_64-mont5.s 2022-04-05 07:17:00.000000000 +0000 @@ -550,7 +550,7 @@ .type mul4x_internal,@function .align 32 mul4x_internal: -.cfi_startproc +.cfi_startproc shlq $5,%r9 movd 8(%rax),%xmm5 leaq .Linc(%rip),%rax @@ -1072,7 +1072,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqr4x_sub_entry -.cfi_endproc +.cfi_endproc .size mul4x_internal,.-mul4x_internal .globl bn_power5 .type bn_power5,@function @@ -1215,7 +1215,7 @@ .align 32 bn_sqr8x_internal: __bn_sqr8x_internal: -.cfi_startproc +.cfi_startproc @@ -1990,12 +1990,12 @@ cmpq %rdx,%rdi jb .L8x_reduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_sqr8x_internal,.-bn_sqr8x_internal .type __bn_post4x_internal,@function .align 32 __bn_post4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 leaq (%rdi,%r9,1),%rbx movq %r9,%rcx @@ -2046,18 +2046,18 @@ movq %r9,%r10 negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_post4x_internal,.-__bn_post4x_internal .globl bn_from_montgomery .type bn_from_montgomery,@function .align 32 bn_from_montgomery: -.cfi_startproc +.cfi_startproc testl $7,%r9d jz bn_from_mont8x xorl %eax,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_from_montgomery,.-bn_from_montgomery .type bn_from_mont8x,@function @@ -2341,7 +2341,7 @@ .type mulx4x_internal,@function .align 32 mulx4x_internal: -.cfi_startproc +.cfi_startproc movq %r9,8(%rsp) movq %r9,%r10 negq %r9 @@ -2760,7 +2760,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqrx4x_sub_entry -.cfi_endproc +.cfi_endproc .size mulx4x_internal,.-mulx4x_internal .type bn_powerx5,@function .align 32 @@ -3519,7 +3519,7 @@ .size bn_sqrx8x_internal,.-bn_sqrx8x_internal .align 32 __bn_postx4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 movq %rcx,%r10 movq %rcx,%r9 @@ -3567,13 +3567,13 @@ negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_get_bits5 .type bn_get_bits5,@function .align 16 bn_get_bits5: -.cfi_startproc +.cfi_startproc leaq 0(%rdi),%r10 leaq 1(%rdi),%r11 movl %esi,%ecx @@ -3587,14 +3587,14 @@ shrl %cl,%eax andl $31,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_get_bits5,.-bn_get_bits5 .globl bn_scatter5 .type bn_scatter5,@function .align 16 bn_scatter5: -.cfi_startproc +.cfi_startproc cmpl $0,%esi jz .Lscatter_epilogue leaq (%rdx,%rcx,8),%rdx @@ -3607,7 +3607,7 @@ jnz .Lscatter .Lscatter_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_scatter5,.-bn_scatter5 .globl bn_gather5 @@ -3615,7 +3615,7 @@ .align 32 bn_gather5: .LSEH_begin_bn_gather5: -.cfi_startproc +.cfi_startproc .byte 0x4c,0x8d,0x14,0x24 .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 @@ -3773,7 +3773,7 @@ leaq (%r10),%rsp .byte 0xf3,0xc3 .LSEH_end_bn_gather5: -.cfi_endproc +.cfi_endproc .size bn_gather5,.-bn_gather5 .align 64 .Linc: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: BSD-x86_64" -#define DATE "built on: Tue Apr 21 13:28:35 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:47 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/camellia/cmll-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/camellia/cmll-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/camellia/cmll-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/camellia/cmll-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,13 +5,13 @@ .type Camellia_EncryptBlock,@function .align 16 Camellia_EncryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Lenc_rounds -.cfi_endproc +.cfi_endproc .size Camellia_EncryptBlock,.-Camellia_EncryptBlock .globl Camellia_EncryptBlock_Rounds @@ -85,7 +85,7 @@ .type _x86_64_Camellia_encrypt,@function .align 16 _x86_64_Camellia_encrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -288,7 +288,7 @@ movl %edx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt @@ -296,13 +296,13 @@ .type Camellia_DecryptBlock,@function .align 16 Camellia_DecryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Ldec_rounds -.cfi_endproc +.cfi_endproc .size Camellia_DecryptBlock,.-Camellia_DecryptBlock .globl Camellia_DecryptBlock_Rounds @@ -376,7 +376,7 @@ .type _x86_64_Camellia_decrypt,@function .align 16 _x86_64_Camellia_decrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -580,7 +580,7 @@ movl %ebx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt .globl Camellia_Ekeygen .type Camellia_Ekeygen,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/ec/ecp_nistz256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/ec/ecp_nistz256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/ec/ecp_nistz256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/ec/ecp_nistz256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3874,12 +3874,12 @@ .type ecp_nistz256_to_mont,@function .align 32 ecp_nistz256_to_mont: -.cfi_startproc +.cfi_startproc movl $0x80100,%ecx andl OPENSSL_ia32cap_P+8(%rip),%ecx leaq .LRR(%rip),%rdx jmp .Lmul_mont -.cfi_endproc +.cfi_endproc .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont @@ -4823,7 +4823,7 @@ .type ecp_nistz256_scatter_w5,@function .align 32 ecp_nistz256_scatter_w5: -.cfi_startproc +.cfi_startproc leal -3(%rdx,%rdx,2),%edx movdqa 0(%rsi),%xmm0 shll $5,%edx @@ -4840,7 +4840,7 @@ movdqa %xmm5,80(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 @@ -4914,7 +4914,7 @@ .type ecp_nistz256_scatter_w7,@function .align 32 ecp_nistz256_scatter_w7: -.cfi_startproc +.cfi_startproc movdqu 0(%rsi),%xmm0 shll $6,%edx movdqu 16(%rsi),%xmm1 @@ -4926,7 +4926,7 @@ movdqa %xmm3,48(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/ec/x25519-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/ec/x25519-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/ec/x25519-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/ec/x25519-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -400,14 +400,14 @@ .type x25519_fe64_eligible,@function .align 32 x25519_fe64_eligible: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+8(%rip),%ecx xorl %eax,%eax andl $0x80100,%ecx cmpl $0x80100,%ecx cmovel %ecx,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_eligible,.-x25519_fe64_eligible .globl x25519_fe64_mul @@ -650,7 +650,7 @@ .align 32 x25519_fe64_mul121666: .Lfe64_mul121666_body: -.cfi_startproc +.cfi_startproc movl $121666,%edx mulxq 0(%rsi),%r8,%rcx mulxq 8(%rsi),%r9,%rax @@ -679,7 +679,7 @@ .Lfe64_mul121666_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_mul121666,.-x25519_fe64_mul121666 .globl x25519_fe64_add @@ -687,7 +687,7 @@ .align 32 x25519_fe64_add: .Lfe64_add_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -716,7 +716,7 @@ .Lfe64_add_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_add,.-x25519_fe64_add .globl x25519_fe64_sub @@ -724,7 +724,7 @@ .align 32 x25519_fe64_sub: .Lfe64_sub_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -753,7 +753,7 @@ .Lfe64_sub_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_sub,.-x25519_fe64_sub .globl x25519_fe64_tobytes @@ -761,7 +761,7 @@ .align 32 x25519_fe64_tobytes: .Lfe64_to_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -797,6 +797,6 @@ .Lfe64_to_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes .byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/modes/aesni-gcm-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/modes/aesni-gcm-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/modes/aesni-gcm-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/modes/aesni-gcm-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type _aesni_ctr32_ghash_6x,@function .align 32 _aesni_ctr32_ghash_6x: -.cfi_startproc +.cfi_startproc vmovdqu 32(%r11),%xmm2 subq $6,%rdx vpxor %xmm4,%xmm4,%xmm4 @@ -311,7 +311,7 @@ vpxor %xmm4,%xmm8,%xmm8 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x .globl aesni_gcm_decrypt .type aesni_gcm_decrypt,@function @@ -418,7 +418,7 @@ .type _aesni_ctr32_6x,@function .align 32 _aesni_ctr32_6x: -.cfi_startproc +.cfi_startproc vmovdqu 0-128(%rcx),%xmm4 vmovdqu 32(%r11),%xmm2 leaq -1(%rbp),%r13 @@ -505,7 +505,7 @@ vpshufb %xmm0,%xmm1,%xmm1 vpxor %xmm4,%xmm14,%xmm14 jmp .Loop_ctr32 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_6x,.-_aesni_ctr32_6x .globl aesni_gcm_encrypt diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type poly1305_init,@function .align 32 poly1305_init: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -48,7 +48,7 @@ movl $1,%eax .Lno_key: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init,.-poly1305_init .type poly1305_blocks,@function @@ -169,7 +169,7 @@ .type poly1305_emit,@function .align 32 poly1305_emit: -.cfi_startproc +.cfi_startproc .Lemit: movq 0(%rdi),%r8 movq 8(%rdi),%r9 @@ -190,12 +190,12 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit,.-poly1305_emit .type __poly1305_block,@function .align 32 __poly1305_block: -.cfi_startproc +.cfi_startproc mulq %r14 movq %rax,%r9 movq %r11,%rax @@ -235,13 +235,13 @@ adcq $0,%rbx adcq $0,%rbp .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,@function .align 32 __poly1305_init_avx: -.cfi_startproc +.cfi_startproc movq %r11,%r14 movq %r12,%rbx xorq %rbp,%rbp @@ -399,7 +399,7 @@ leaq -48-64(%rdi),%rdi .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_init_avx,.-__poly1305_init_avx .type poly1305_blocks_avx,@function @@ -1240,7 +1240,7 @@ .type poly1305_emit_avx,@function .align 32 poly1305_emit_avx: -.cfi_startproc +.cfi_startproc cmpl $0,20(%rdi) je .Lemit @@ -1291,7 +1291,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_avx,.-poly1305_emit_avx .type poly1305_blocks_avx2,@function .align 32 @@ -2488,7 +2488,7 @@ .type poly1305_init_base2_44,@function .align 32 poly1305_init_base2_44: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -2522,12 +2522,12 @@ movq %r11,8(%rdx) movl $1,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init_base2_44,.-poly1305_init_base2_44 .type poly1305_blocks_vpmadd52,@function .align 32 poly1305_blocks_vpmadd52: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52 @@ -2634,12 +2634,12 @@ .Lno_data_vpmadd52: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52 .type poly1305_blocks_vpmadd52_4x,@function .align 32 poly1305_blocks_vpmadd52_4x: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52_4x @@ -3064,12 +3064,12 @@ .Lno_data_vpmadd52_4x: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x .type poly1305_blocks_vpmadd52_8x,@function .align 32 poly1305_blocks_vpmadd52_8x: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52_8x @@ -3410,12 +3410,12 @@ .Lno_data_vpmadd52_8x: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x .type poly1305_emit_base2_44,@function .align 32 poly1305_emit_base2_44: -.cfi_startproc +.cfi_startproc movq 0(%rdi),%r8 movq 8(%rdi),%r9 movq 16(%rdi),%r10 @@ -3446,7 +3446,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_base2_44,.-poly1305_emit_base2_44 .align 64 .Lconst: @@ -3485,7 +3485,7 @@ .type xor128_encrypt_n_pad,@function .align 16 xor128_encrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -3527,14 +3527,14 @@ .Ldone_enc: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad .type xor128_decrypt_n_pad,@function .align 16 xor128_decrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -3580,5 +3580,5 @@ .Ldone_dec: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/rc4/rc4-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/rc4/rc4-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/rc4/rc4-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/rc4/rc4-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type RC4,@function .align 16 RC4: -.cfi_startproc +.cfi_startproc orq %rsi,%rsi jne .Lentry .byte 0xf3,0xc3 @@ -534,7 +534,7 @@ .type RC4_set_key,@function .align 16 RC4_set_key: -.cfi_startproc +.cfi_startproc leaq 8(%rdi),%rdi leaq (%rdx,%rsi,1),%rdx negq %rsi @@ -601,14 +601,14 @@ movl %eax,-8(%rdi) movl %eax,-4(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size RC4_set_key,.-RC4_set_key .globl RC4_options .type RC4_options,@function .align 16 RC4_options: -.cfi_startproc +.cfi_startproc leaq .Lopts(%rip),%rax movl OPENSSL_ia32cap_P(%rip),%edx btl $20,%edx @@ -621,7 +621,7 @@ addq $12,%rax .Ldone: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .align 64 .Lopts: .byte 114,99,52,40,56,120,44,105,110,116,41,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/keccak1600-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/keccak1600-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/keccak1600-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/keccak1600-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type __KeccakF1600,@function .align 32 __KeccakF1600: -.cfi_startproc +.cfi_startproc movq 60(%rdi),%rax movq 68(%rdi),%rbx movq 76(%rdi),%rcx @@ -256,7 +256,7 @@ leaq -192(%r15),%r15 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __KeccakF1600,.-__KeccakF1600 .type KeccakF1600,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1422,7 +1422,7 @@ movdqu %xmm0,(%rdi) movd %xmm1,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/sha/sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1775,7 +1775,7 @@ .align 64 sha256_block_data_order_shaext: _shaext_shortcut: -.cfi_startproc +.cfi_startproc leaq K256+128(%rip),%rcx movdqu (%rdi),%xmm1 movdqu 16(%rdi),%xmm2 @@ -1978,7 +1978,7 @@ movdqu %xmm1,(%rdi) movdqu %xmm2,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext .type sha256_block_data_order_ssse3,@function .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: -.cfi_startproc +.cfi_startproc movl (%rdi),%eax .Lspin: leaq (%rsi,%rax,1),%r8 .byte 0xf0 @@ -21,19 +21,19 @@ movl %r8d,%eax .byte 0x48,0x98 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_atomic_add,.-OPENSSL_atomic_add .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: -.cfi_startproc +.cfi_startproc rdtsc shlq $32,%rdx orq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_rdtsc,.-OPENSSL_rdtsc .globl OPENSSL_ia32_cpuid @@ -209,7 +209,7 @@ .type OPENSSL_cleanse,@function .align 16 OPENSSL_cleanse: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $15,%rsi jae .Lot @@ -239,14 +239,14 @@ cmpq $0,%rsi jne .Little .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,@function .align 16 CRYPTO_memcmp: -.cfi_startproc +.cfi_startproc xorq %rax,%rax xorq %r10,%r10 cmpq $0,%rdx @@ -275,13 +275,13 @@ shrq $63,%rax .Lno_data: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: -.cfi_startproc +.cfi_startproc pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -308,13 +308,13 @@ xorq %r11,%r11 leaq 8(%rsp),%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 OPENSSL_instrument_bus: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rsi,%r11 @@ -341,14 +341,14 @@ movq %r11,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus .globl OPENSSL_instrument_bus2 .type OPENSSL_instrument_bus2,@function .align 16 OPENSSL_instrument_bus2: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rdx,%r11 @@ -391,13 +391,13 @@ movq 8(%rsp),%rax subq %rcx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 .globl OPENSSL_ia32_rdrand_bytes .type OPENSSL_ia32_rdrand_bytes,@function .align 16 OPENSSL_ia32_rdrand_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdrand_bytes @@ -434,13 +434,13 @@ .Ldone_rdrand_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes .globl OPENSSL_ia32_rdseed_bytes .type OPENSSL_ia32_rdseed_bytes,@function .align 16 OPENSSL_ia32_rdseed_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdseed_bytes @@ -477,5 +477,5 @@ .Ldone_rdseed_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -114,6 +114,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "BSD-x86_64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "BSD-x86_64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1181,6 +1181,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9084,6 +9089,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9661,6 +9670,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14436,6 +14446,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15407,19 +15425,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha1_enc,@function .align 32 aesni_cbc_sha1_enc: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+0(%rip),%r10d movq OPENSSL_ia32cap_P+4(%rip),%r11 @@ -18,7 +18,7 @@ je aesni_cbc_sha1_enc_avx jmp aesni_cbc_sha1_enc_ssse3 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc .type aesni_cbc_sha1_enc_ssse3,@function .align 32 @@ -2732,7 +2732,7 @@ .type aesni_cbc_sha1_enc_shaext,@function .align 32 aesni_cbc_sha1_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 movdqu (%r9),%xmm8 movd 16(%r9),%xmm9 @@ -3031,5 +3031,5 @@ movdqu %xmm8,(%r9) movd %xmm9,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha256_enc,@function .align 16 aesni_cbc_sha256_enc: -.cfi_startproc +.cfi_startproc leaq OPENSSL_ia32cap_P(%rip),%r11 movl $1,%eax cmpq $0,%rdi @@ -31,7 +31,7 @@ ud2 .Lprobe: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc .align 64 @@ -4081,7 +4081,7 @@ .type aesni_cbc_sha256_enc_shaext,@function .align 32 aesni_cbc_sha256_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 leaq K256+128(%rip),%rax movdqu (%r9),%xmm1 @@ -4431,5 +4431,5 @@ movdqu %xmm1,(%r9) movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/aes/aesni-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -861,7 +861,7 @@ .type aesni_ccm64_encrypt_blocks,@function .align 16 aesni_ccm64_encrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -920,13 +920,13 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -1019,7 +1019,7 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks .type aesni_ctr32_encrypt_blocks,@function @@ -2794,7 +2794,7 @@ .type __ocb_encrypt6,@function .align 32 __ocb_encrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2892,13 +2892,13 @@ .byte 102,65,15,56,221,246 .byte 102,65,15,56,221,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt6,.-__ocb_encrypt6 .type __ocb_encrypt4,@function .align 32 __ocb_encrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2963,13 +2963,13 @@ .byte 102,65,15,56,221,228 .byte 102,65,15,56,221,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt4,.-__ocb_encrypt4 .type __ocb_encrypt1,@function .align 32 __ocb_encrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm2,%xmm8 @@ -3000,7 +3000,7 @@ .byte 102,15,56,221,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt1,.-__ocb_encrypt1 .globl aesni_ocb_decrypt @@ -3243,7 +3243,7 @@ .type __ocb_decrypt6,@function .align 32 __ocb_decrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3335,13 +3335,13 @@ .byte 102,65,15,56,223,246 .byte 102,65,15,56,223,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt6,.-__ocb_decrypt6 .type __ocb_decrypt4,@function .align 32 __ocb_decrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3402,13 +3402,13 @@ .byte 102,65,15,56,223,228 .byte 102,65,15,56,223,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt4,.-__ocb_decrypt4 .type __ocb_decrypt1,@function .align 32 __ocb_decrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm7,%xmm2 @@ -3438,7 +3438,7 @@ .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt1,.-__ocb_decrypt1 .globl aesni_cbc_encrypt .type aesni_cbc_encrypt,@function @@ -4447,7 +4447,7 @@ shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_set_encrypt_key,.-aesni_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/bn/rsaz-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/bn/rsaz-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/bn/rsaz-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/bn/rsaz-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1453,7 +1453,7 @@ .type __rsaz_512_reduce,@function .align 32 __rsaz_512_reduce: -.cfi_startproc +.cfi_startproc movq %r8,%rbx imulq 128+8(%rsp),%rbx movq 0(%rbp),%rax @@ -1533,12 +1533,12 @@ jne .Lreduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reduce,.-__rsaz_512_reduce .type __rsaz_512_reducex,@function .align 32 __rsaz_512_reducex: -.cfi_startproc +.cfi_startproc imulq %r8,%rdx xorq %rsi,%rsi @@ -1591,12 +1591,12 @@ jne .Lreduction_loopx .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reducex,.-__rsaz_512_reducex .type __rsaz_512_subtract,@function .align 32 __rsaz_512_subtract: -.cfi_startproc +.cfi_startproc movq %r8,(%rdi) movq %r9,8(%rdi) movq %r10,16(%rdi) @@ -1650,12 +1650,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_subtract,.-__rsaz_512_subtract .type __rsaz_512_mul,@function .align 32 __rsaz_512_mul: -.cfi_startproc +.cfi_startproc leaq 8(%rsp),%rdi movq (%rsi),%rax @@ -1794,12 +1794,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mul,.-__rsaz_512_mul .type __rsaz_512_mulx,@function .align 32 __rsaz_512_mulx: -.cfi_startproc +.cfi_startproc mulxq (%rsi),%rbx,%r8 movq $-6,%rcx @@ -1916,13 +1916,13 @@ movq %r15,8+64+56(%rsp) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mulx,.-__rsaz_512_mulx .globl rsaz_512_scatter4 .type rsaz_512_scatter4,@function .align 16 rsaz_512_scatter4: -.cfi_startproc +.cfi_startproc leaq (%rdi,%rdx,8),%rdi movl $8,%r9d jmp .Loop_scatter @@ -1935,14 +1935,14 @@ decl %r9d jnz .Loop_scatter .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size rsaz_512_scatter4,.-rsaz_512_scatter4 .globl rsaz_512_gather4 .type rsaz_512_gather4,@function .align 16 rsaz_512_gather4: -.cfi_startproc +.cfi_startproc movd %edx,%xmm8 movdqa .Linc+16(%rip),%xmm1 movdqa .Linc(%rip),%xmm0 @@ -2006,7 +2006,7 @@ jnz .Loop_gather .byte 0xf3,0xc3 .LSEH_end_rsaz_512_gather4: -.cfi_endproc +.cfi_endproc .size rsaz_512_gather4,.-rsaz_512_gather4 .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/bn/x86_64-mont5.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/bn/x86_64-mont5.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/bn/x86_64-mont5.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/bn/x86_64-mont5.s 2022-04-05 07:17:00.000000000 +0000 @@ -550,7 +550,7 @@ .type mul4x_internal,@function .align 32 mul4x_internal: -.cfi_startproc +.cfi_startproc shlq $5,%r9 movd 8(%rax),%xmm5 leaq .Linc(%rip),%rax @@ -1072,7 +1072,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqr4x_sub_entry -.cfi_endproc +.cfi_endproc .size mul4x_internal,.-mul4x_internal .globl bn_power5 .type bn_power5,@function @@ -1215,7 +1215,7 @@ .align 32 bn_sqr8x_internal: __bn_sqr8x_internal: -.cfi_startproc +.cfi_startproc @@ -1990,12 +1990,12 @@ cmpq %rdx,%rdi jb .L8x_reduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_sqr8x_internal,.-bn_sqr8x_internal .type __bn_post4x_internal,@function .align 32 __bn_post4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 leaq (%rdi,%r9,1),%rbx movq %r9,%rcx @@ -2046,18 +2046,18 @@ movq %r9,%r10 negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_post4x_internal,.-__bn_post4x_internal .globl bn_from_montgomery .type bn_from_montgomery,@function .align 32 bn_from_montgomery: -.cfi_startproc +.cfi_startproc testl $7,%r9d jz bn_from_mont8x xorl %eax,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_from_montgomery,.-bn_from_montgomery .type bn_from_mont8x,@function @@ -2341,7 +2341,7 @@ .type mulx4x_internal,@function .align 32 mulx4x_internal: -.cfi_startproc +.cfi_startproc movq %r9,8(%rsp) movq %r9,%r10 negq %r9 @@ -2760,7 +2760,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqrx4x_sub_entry -.cfi_endproc +.cfi_endproc .size mulx4x_internal,.-mulx4x_internal .type bn_powerx5,@function .align 32 @@ -3519,7 +3519,7 @@ .size bn_sqrx8x_internal,.-bn_sqrx8x_internal .align 32 __bn_postx4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 movq %rcx,%r10 movq %rcx,%r9 @@ -3567,13 +3567,13 @@ negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_get_bits5 .type bn_get_bits5,@function .align 16 bn_get_bits5: -.cfi_startproc +.cfi_startproc leaq 0(%rdi),%r10 leaq 1(%rdi),%r11 movl %esi,%ecx @@ -3587,14 +3587,14 @@ shrl %cl,%eax andl $31,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_get_bits5,.-bn_get_bits5 .globl bn_scatter5 .type bn_scatter5,@function .align 16 bn_scatter5: -.cfi_startproc +.cfi_startproc cmpl $0,%esi jz .Lscatter_epilogue leaq (%rdx,%rcx,8),%rdx @@ -3607,7 +3607,7 @@ jnz .Lscatter .Lscatter_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_scatter5,.-bn_scatter5 .globl bn_gather5 @@ -3615,7 +3615,7 @@ .align 32 bn_gather5: .LSEH_begin_bn_gather5: -.cfi_startproc +.cfi_startproc .byte 0x4c,0x8d,0x14,0x24 .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 @@ -3773,7 +3773,7 @@ leaq (%r10),%rsp .byte 0xf3,0xc3 .LSEH_end_bn_gather5: -.cfi_endproc +.cfi_endproc .size bn_gather5,.-bn_gather5 .align 64 .Linc: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: BSD-x86_64" -#define DATE "built on: Tue Apr 21 13:28:40 2020 UTC" +#define DATE "built on: Tue Mar 15 17:23:58 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/camellia/cmll-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/camellia/cmll-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/camellia/cmll-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/camellia/cmll-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,13 +5,13 @@ .type Camellia_EncryptBlock,@function .align 16 Camellia_EncryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Lenc_rounds -.cfi_endproc +.cfi_endproc .size Camellia_EncryptBlock,.-Camellia_EncryptBlock .globl Camellia_EncryptBlock_Rounds @@ -85,7 +85,7 @@ .type _x86_64_Camellia_encrypt,@function .align 16 _x86_64_Camellia_encrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -288,7 +288,7 @@ movl %edx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt @@ -296,13 +296,13 @@ .type Camellia_DecryptBlock,@function .align 16 Camellia_DecryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Ldec_rounds -.cfi_endproc +.cfi_endproc .size Camellia_DecryptBlock,.-Camellia_DecryptBlock .globl Camellia_DecryptBlock_Rounds @@ -376,7 +376,7 @@ .type _x86_64_Camellia_decrypt,@function .align 16 _x86_64_Camellia_decrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -580,7 +580,7 @@ movl %ebx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt .globl Camellia_Ekeygen .type Camellia_Ekeygen,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3874,12 +3874,12 @@ .type ecp_nistz256_to_mont,@function .align 32 ecp_nistz256_to_mont: -.cfi_startproc +.cfi_startproc movl $0x80100,%ecx andl OPENSSL_ia32cap_P+8(%rip),%ecx leaq .LRR(%rip),%rdx jmp .Lmul_mont -.cfi_endproc +.cfi_endproc .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont @@ -4823,7 +4823,7 @@ .type ecp_nistz256_scatter_w5,@function .align 32 ecp_nistz256_scatter_w5: -.cfi_startproc +.cfi_startproc leal -3(%rdx,%rdx,2),%edx movdqa 0(%rsi),%xmm0 shll $5,%edx @@ -4840,7 +4840,7 @@ movdqa %xmm5,80(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 @@ -4914,7 +4914,7 @@ .type ecp_nistz256_scatter_w7,@function .align 32 ecp_nistz256_scatter_w7: -.cfi_startproc +.cfi_startproc movdqu 0(%rsi),%xmm0 shll $6,%edx movdqu 16(%rsi),%xmm1 @@ -4926,7 +4926,7 @@ movdqa %xmm3,48(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/ec/x25519-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/ec/x25519-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/ec/x25519-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/ec/x25519-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -400,14 +400,14 @@ .type x25519_fe64_eligible,@function .align 32 x25519_fe64_eligible: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+8(%rip),%ecx xorl %eax,%eax andl $0x80100,%ecx cmpl $0x80100,%ecx cmovel %ecx,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_eligible,.-x25519_fe64_eligible .globl x25519_fe64_mul @@ -650,7 +650,7 @@ .align 32 x25519_fe64_mul121666: .Lfe64_mul121666_body: -.cfi_startproc +.cfi_startproc movl $121666,%edx mulxq 0(%rsi),%r8,%rcx mulxq 8(%rsi),%r9,%rax @@ -679,7 +679,7 @@ .Lfe64_mul121666_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_mul121666,.-x25519_fe64_mul121666 .globl x25519_fe64_add @@ -687,7 +687,7 @@ .align 32 x25519_fe64_add: .Lfe64_add_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -716,7 +716,7 @@ .Lfe64_add_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_add,.-x25519_fe64_add .globl x25519_fe64_sub @@ -724,7 +724,7 @@ .align 32 x25519_fe64_sub: .Lfe64_sub_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -753,7 +753,7 @@ .Lfe64_sub_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_sub,.-x25519_fe64_sub .globl x25519_fe64_tobytes @@ -761,7 +761,7 @@ .align 32 x25519_fe64_tobytes: .Lfe64_to_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -797,6 +797,6 @@ .Lfe64_to_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes .byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/modes/aesni-gcm-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/modes/aesni-gcm-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/modes/aesni-gcm-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/modes/aesni-gcm-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type _aesni_ctr32_ghash_6x,@function .align 32 _aesni_ctr32_ghash_6x: -.cfi_startproc +.cfi_startproc vmovdqu 32(%r11),%xmm2 subq $6,%rdx vpxor %xmm4,%xmm4,%xmm4 @@ -311,7 +311,7 @@ vpxor %xmm4,%xmm8,%xmm8 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x .globl aesni_gcm_decrypt .type aesni_gcm_decrypt,@function @@ -418,7 +418,7 @@ .type _aesni_ctr32_6x,@function .align 32 _aesni_ctr32_6x: -.cfi_startproc +.cfi_startproc vmovdqu 0-128(%rcx),%xmm4 vmovdqu 32(%r11),%xmm2 leaq -1(%rbp),%r13 @@ -505,7 +505,7 @@ vpshufb %xmm0,%xmm1,%xmm1 vpxor %xmm4,%xmm14,%xmm14 jmp .Loop_ctr32 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_6x,.-_aesni_ctr32_6x .globl aesni_gcm_encrypt diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type poly1305_init,@function .align 32 poly1305_init: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -43,7 +43,7 @@ movl $1,%eax .Lno_key: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init,.-poly1305_init .type poly1305_blocks,@function @@ -164,7 +164,7 @@ .type poly1305_emit,@function .align 32 poly1305_emit: -.cfi_startproc +.cfi_startproc .Lemit: movq 0(%rdi),%r8 movq 8(%rdi),%r9 @@ -185,12 +185,12 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit,.-poly1305_emit .type __poly1305_block,@function .align 32 __poly1305_block: -.cfi_startproc +.cfi_startproc mulq %r14 movq %rax,%r9 movq %r11,%rax @@ -230,13 +230,13 @@ adcq $0,%rbx adcq $0,%rbp .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,@function .align 32 __poly1305_init_avx: -.cfi_startproc +.cfi_startproc movq %r11,%r14 movq %r12,%rbx xorq %rbp,%rbp @@ -394,7 +394,7 @@ leaq -48-64(%rdi),%rdi .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_init_avx,.-__poly1305_init_avx .type poly1305_blocks_avx,@function @@ -1235,7 +1235,7 @@ .type poly1305_emit_avx,@function .align 32 poly1305_emit_avx: -.cfi_startproc +.cfi_startproc cmpl $0,20(%rdi) je .Lemit @@ -1286,7 +1286,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_avx,.-poly1305_emit_avx .type poly1305_blocks_avx2,@function .align 32 @@ -1969,7 +1969,7 @@ .type xor128_encrypt_n_pad,@function .align 16 xor128_encrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -2011,14 +2011,14 @@ .Ldone_enc: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad .type xor128_decrypt_n_pad,@function .align 16 xor128_decrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -2064,5 +2064,5 @@ .Ldone_dec: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/rc4/rc4-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/rc4/rc4-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/rc4/rc4-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/rc4/rc4-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type RC4,@function .align 16 RC4: -.cfi_startproc +.cfi_startproc orq %rsi,%rsi jne .Lentry .byte 0xf3,0xc3 @@ -534,7 +534,7 @@ .type RC4_set_key,@function .align 16 RC4_set_key: -.cfi_startproc +.cfi_startproc leaq 8(%rdi),%rdi leaq (%rdx,%rsi,1),%rdx negq %rsi @@ -601,14 +601,14 @@ movl %eax,-8(%rdi) movl %eax,-4(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size RC4_set_key,.-RC4_set_key .globl RC4_options .type RC4_options,@function .align 16 RC4_options: -.cfi_startproc +.cfi_startproc leaq .Lopts(%rip),%rax movl OPENSSL_ia32cap_P(%rip),%edx btl $20,%edx @@ -621,7 +621,7 @@ addq $12,%rax .Ldone: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .align 64 .Lopts: .byte 114,99,52,40,56,120,44,105,110,116,41,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/keccak1600-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/keccak1600-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/keccak1600-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/keccak1600-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type __KeccakF1600,@function .align 32 __KeccakF1600: -.cfi_startproc +.cfi_startproc movq 60(%rdi),%rax movq 68(%rdi),%rbx movq 76(%rdi),%rcx @@ -256,7 +256,7 @@ leaq -192(%r15),%r15 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __KeccakF1600,.-__KeccakF1600 .type KeccakF1600,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1422,7 +1422,7 @@ movdqu %xmm0,(%rdi) movd %xmm1,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/sha/sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1775,7 +1775,7 @@ .align 64 sha256_block_data_order_shaext: _shaext_shortcut: -.cfi_startproc +.cfi_startproc leaq K256+128(%rip),%rcx movdqu (%rdi),%xmm1 movdqu 16(%rdi),%xmm2 @@ -1978,7 +1978,7 @@ movdqu %xmm1,(%rdi) movdqu %xmm2,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext .type sha256_block_data_order_ssse3,@function .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: -.cfi_startproc +.cfi_startproc movl (%rdi),%eax .Lspin: leaq (%rsi,%rax,1),%r8 .byte 0xf0 @@ -21,19 +21,19 @@ movl %r8d,%eax .byte 0x48,0x98 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_atomic_add,.-OPENSSL_atomic_add .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: -.cfi_startproc +.cfi_startproc rdtsc shlq $32,%rdx orq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_rdtsc,.-OPENSSL_rdtsc .globl OPENSSL_ia32_cpuid @@ -209,7 +209,7 @@ .type OPENSSL_cleanse,@function .align 16 OPENSSL_cleanse: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $15,%rsi jae .Lot @@ -239,14 +239,14 @@ cmpq $0,%rsi jne .Little .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,@function .align 16 CRYPTO_memcmp: -.cfi_startproc +.cfi_startproc xorq %rax,%rax xorq %r10,%r10 cmpq $0,%rdx @@ -275,13 +275,13 @@ shrq $63,%rax .Lno_data: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: -.cfi_startproc +.cfi_startproc pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -308,13 +308,13 @@ xorq %r11,%r11 leaq 8(%rsp),%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 OPENSSL_instrument_bus: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rsi,%r11 @@ -341,14 +341,14 @@ movq %r11,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus .globl OPENSSL_instrument_bus2 .type OPENSSL_instrument_bus2,@function .align 16 OPENSSL_instrument_bus2: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rdx,%r11 @@ -391,13 +391,13 @@ movq 8(%rsp),%rax subq %rcx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 .globl OPENSSL_ia32_rdrand_bytes .type OPENSSL_ia32_rdrand_bytes,@function .align 16 OPENSSL_ia32_rdrand_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdrand_bytes @@ -434,13 +434,13 @@ .Ldone_rdrand_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes .globl OPENSSL_ia32_rdseed_bytes .type OPENSSL_ia32_rdseed_bytes,@function .align 16 OPENSSL_ia32_rdseed_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdseed_bytes @@ -477,5 +477,5 @@ .Ldone_rdseed_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -114,6 +114,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "BSD-x86_64" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "BSD-x86_64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1179,6 +1179,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8931,6 +8936,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9508,6 +9517,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14168,6 +14178,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15142,19 +15160,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: BSD-x86_64" -#define DATE "built on: Tue Apr 21 13:28:45 2020 UTC" +#define DATE "built on: Tue Mar 15 17:24:09 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/BSD-x86_64/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/BSD-x86_64/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/configdata.pm 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,15415 @@ +#! /usr/bin/env perl + +package configdata; + +use strict; +use warnings; + +use Exporter; +#use vars qw(@ISA @EXPORT); +our @ISA = qw(Exporter); +our @EXPORT = qw(%config %target %disabled %withargs %unified_info @disablables); + +our %config = ( + AR => "ar", + ARFLAGS => [ "r" ], + CC => "gcc", + CFLAGS => [ "-O3 -Wall" ], + CPPDEFINES => [ ], + CPPFLAGS => [ ], + CPPINCLUDES => [ ], + CXXFLAGS => [ ], + HASHBANGPERL => "/usr/bin/env perl", + LDFLAGS => [ ], + LDLIBS => [ ], + PERL => "/usr/bin/perl", + RANLIB => "ranlib -c", + RC => "windres", + RCFLAGS => [ ], + b32 => "0", + b64 => "0", + b64l => "1", + bn_ll => "0", + build_file => "Makefile", + build_file_templates => [ "Configurations/common0.tmpl", "Configurations/unix-Makefile.tmpl", "Configurations/common.tmpl" ], + build_infos => [ "./build.info", "crypto/build.info", "ssl/build.info", "engines/build.info", "apps/build.info", "test/build.info", "util/build.info", "tools/build.info", "fuzz/build.info", "crypto/objects/build.info", "crypto/md4/build.info", "crypto/md5/build.info", "crypto/sha/build.info", "crypto/mdc2/build.info", "crypto/hmac/build.info", "crypto/ripemd/build.info", "crypto/whrlpool/build.info", "crypto/poly1305/build.info", "crypto/blake2/build.info", "crypto/siphash/build.info", "crypto/sm3/build.info", "crypto/des/build.info", "crypto/aes/build.info", "crypto/rc2/build.info", "crypto/rc4/build.info", "crypto/idea/build.info", "crypto/aria/build.info", "crypto/bf/build.info", "crypto/cast/build.info", "crypto/camellia/build.info", "crypto/seed/build.info", "crypto/sm4/build.info", "crypto/chacha/build.info", "crypto/modes/build.info", "crypto/bn/build.info", "crypto/ec/build.info", "crypto/rsa/build.info", "crypto/dsa/build.info", "crypto/dh/build.info", "crypto/sm2/build.info", "crypto/dso/build.info", "crypto/engine/build.info", "crypto/buffer/build.info", "crypto/bio/build.info", "crypto/stack/build.info", "crypto/lhash/build.info", "crypto/rand/build.info", "crypto/err/build.info", "crypto/evp/build.info", "crypto/asn1/build.info", "crypto/pem/build.info", "crypto/x509/build.info", "crypto/x509v3/build.info", "crypto/conf/build.info", "crypto/txt_db/build.info", "crypto/pkcs7/build.info", "crypto/pkcs12/build.info", "crypto/ocsp/build.info", "crypto/ui/build.info", "crypto/cms/build.info", "crypto/ts/build.info", "crypto/srp/build.info", "crypto/cmac/build.info", "crypto/ct/build.info", "crypto/async/build.info", "crypto/kdf/build.info", "crypto/store/build.info", "test/ossl_shim/build.info" ], + build_type => "release", + builddir => ".", + cflags => [ "-Wa,--noexecstack" ], + conf_files => [ "Configurations/00-base-templates.conf", "Configurations/10-main.conf" ], + cppflags => [ ], + cxxflags => [ ], + defines => [ "NDEBUG" ], + dirs => [ "crypto", "ssl", "engines", "apps", "test", "util", "tools", "fuzz" ], + dynamic_engines => "0", + engdirs => [ ], + ex_libs => [ ], + export_var_as_fn => "0", + includes => [ ], + lflags => [ ], + lib_defines => [ "OPENSSL_PIC", "OPENSSL_CPUID_OBJ", "OPENSSL_BN_ASM_MONT", "SHA1_ASM", "SHA256_ASM", "SHA512_ASM", "KECCAK1600_ASM", "VPAES_ASM", "ECP_NISTZ256_ASM", "POLY1305_ASM" ], + libdir => "", + major => "1", + makedepprog => "\$(CROSS_COMPILE)gcc", + minor => "1.1", + openssl_algorithm_defines => [ "OPENSSL_NO_COMP", "OPENSSL_NO_MD2", "OPENSSL_NO_RC5" ], + openssl_api_defines => [ ], + openssl_other_defines => [ "OPENSSL_RAND_SEED_OS", "OPENSSL_NO_AFALGENG", "OPENSSL_NO_ASAN", "OPENSSL_NO_CRYPTO_MDEBUG", "OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE", "OPENSSL_NO_DEVCRYPTOENG", "OPENSSL_NO_EC_NISTP_64_GCC_128", "OPENSSL_NO_EGD", "OPENSSL_NO_EXTERNAL_TESTS", "OPENSSL_NO_FUZZ_AFL", "OPENSSL_NO_FUZZ_LIBFUZZER", "OPENSSL_NO_HEARTBEATS", "OPENSSL_NO_MSAN", "OPENSSL_NO_SCTP", "OPENSSL_NO_SSL3", "OPENSSL_NO_SSL3_METHOD", "OPENSSL_NO_UBSAN", "OPENSSL_NO_UNIT_TEST", "OPENSSL_NO_WEAK_SSL_CIPHERS", "OPENSSL_NO_DYNAMIC_ENGINE" ], + openssl_sys_defines => [ "OPENSSL_SYS_MACOSX" ], + openssl_thread_defines => [ "OPENSSL_THREADS" ], + openssldir => "", + options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", + perl_archname => "x86_64-linux-gnu-thread-multi", + perl_cmd => "/usr/bin/perl", + perl_version => "5.30.0", + perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "darwin64-arm64-cc" ], + perlenv => { + "AR" => undef, + "ARFLAGS" => undef, + "AS" => undef, + "ASFLAGS" => undef, + "BUILDFILE" => undef, + "CC" => "gcc", + "CFLAGS" => undef, + "CPP" => undef, + "CPPDEFINES" => undef, + "CPPFLAGS" => undef, + "CPPINCLUDES" => undef, + "CROSS_COMPILE" => undef, + "CXX" => undef, + "CXXFLAGS" => undef, + "HASHBANGPERL" => undef, + "LD" => undef, + "LDFLAGS" => undef, + "LDLIBS" => undef, + "MT" => undef, + "MTFLAGS" => undef, + "OPENSSL_LOCAL_CONFIG_DIR" => undef, + "PERL" => undef, + "RANLIB" => undef, + "RC" => undef, + "RCFLAGS" => undef, + "RM" => undef, + "WINDRES" => undef, + "__CNF_CFLAGS" => undef, + "__CNF_CPPDEFINES" => undef, + "__CNF_CPPFLAGS" => undef, + "__CNF_CPPINCLUDES" => undef, + "__CNF_CXXFLAGS" => undef, + "__CNF_LDFLAGS" => undef, + "__CNF_LDLIBS" => undef, + }, + prefix => "", + processor => "", + rc4_int => "unsigned int", + sdirs => [ "objects", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305", "blake2", "siphash", "sm3", "des", "aes", "rc2", "rc4", "idea", "aria", "bf", "cast", "camellia", "seed", "sm4", "chacha", "modes", "bn", "ec", "rsa", "dsa", "dh", "sm2", "dso", "engine", "buffer", "bio", "stack", "lhash", "rand", "err", "evp", "asn1", "pem", "x509", "x509v3", "conf", "txt_db", "pkcs7", "pkcs12", "ocsp", "ui", "cms", "ts", "srp", "cmac", "ct", "async", "kdf", "store" ], + shlib_major => "1", + shlib_minor => "1", + shlib_version_history => "", + shlib_version_number => "1.1", + sourcedir => ".", + target => "darwin64-arm64-cc", + tdirs => [ "ossl_shim" ], + version => "1.1.1n", + version_num => "0x101010efL", +); + +our %target = ( + AR => "ar", + ARFLAGS => "r", + CC => "cc", + CFLAGS => "-O3 -Wall", + HASHBANGPERL => "/usr/bin/env perl", + RANLIB => "ranlib -c", + RC => "windres", + _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], + aes_asm_src => "aes_core.c aes_cbc.c aesv8-armx.S vpaes-armv8.S", + aes_obj => "aes_core.o aes_cbc.o aesv8-armx.o vpaes-armv8.o", + apps_aux_src => "", + apps_init_src => "", + apps_obj => "", + bf_asm_src => "bf_enc.c", + bf_obj => "bf_enc.o", + bn_asm_src => "bn_asm.c armv8-mont.S", + bn_obj => "bn_asm.o armv8-mont.o", + bn_ops => "SIXTY_FOUR_BIT_LONG", + build_file => "Makefile", + build_scheme => [ "unified", "unix" ], + cast_asm_src => "c_enc.c", + cast_obj => "c_enc.o", + cflags => "-arch arm64", + chacha_asm_src => "chacha-armv8.S", + chacha_obj => "chacha-armv8.o", + cmll_asm_src => "camellia.c cmll_misc.c cmll_cbc.c", + cmll_obj => "camellia.o cmll_misc.o cmll_cbc.o", + cppflags => "-D_REENTRANT", + cpuid_asm_src => "armcap.c arm64cpuid.S", + cpuid_obj => "armcap.o arm64cpuid.o", + defines => [ ], + des_asm_src => "des_enc.c fcrypt_b.c", + des_obj => "des_enc.o fcrypt_b.o", + disable => [ ], + dso_extension => ".dylib", + dso_scheme => "dlfcn", + ec_asm_src => "ecp_nistz256.c ecp_nistz256-armv8.S", + ec_obj => "ecp_nistz256.o ecp_nistz256-armv8.o", + enable => [ ], + exe_extension => "", + includes => [ ], + keccak1600_asm_src => "keccak1600-armv8.S", + keccak1600_obj => "keccak1600-armv8.o", + lflags => "-Wl,-search_paths_first", + lib_cflags => "", + lib_cppflags => "-DL_ENDIAN", + lib_defines => [ ], + md5_asm_src => "", + md5_obj => "", + modes_asm_src => "ghashv8-armx.S", + modes_obj => "ghashv8-armx.o", + module_cflags => "-fPIC", + module_cxxflags => "", + module_ldflags => "-bundle", + padlock_asm_src => "", + padlock_obj => "", + perlasm_scheme => "ios64", + poly1305_asm_src => "poly1305-armv8.S", + poly1305_obj => "poly1305-armv8.o", + rc4_asm_src => "rc4_enc.c rc4_skey.c", + rc4_obj => "rc4_enc.o rc4_skey.o", + rc5_asm_src => "rc5_enc.c", + rc5_obj => "rc5_enc.o", + rmd160_asm_src => "", + rmd160_obj => "", + sha1_asm_src => "sha1-armv8.S sha256-armv8.S sha512-armv8.S", + sha1_obj => "sha1-armv8.o sha256-armv8.o sha512-armv8.o", + shared_cflag => "-fPIC", + shared_defines => [ ], + shared_extension => ".\$(SHLIB_VERSION_NUMBER).dylib", + shared_extension_simple => ".dylib", + shared_ldflag => "-dynamiclib -current_version \$(SHLIB_VERSION_NUMBER) -compatibility_version \$(SHLIB_VERSION_NUMBER)", + shared_rcflag => "", + shared_sonameflag => "-install_name \$(INSTALLTOP)/\$(LIBDIR)/", + shared_target => "darwin-shared", + sys_id => "MACOSX", + template => "1", + thread_defines => [ ], + thread_scheme => "pthreads", + unistd => "", + uplink_aux_src => "", + uplink_obj => "", + wp_asm_src => "wp_block.c", + wp_obj => "wp_block.o", +); + +our %available_protocols = ( + tls => [ "ssl3", "tls1", "tls1_1", "tls1_2", "tls1_3" ], + dtls => [ "dtls1", "dtls1_2" ], +); + +our @disablables = ( + "afalgeng", + "aria", + "asan", + "asm", + "async", + "autoalginit", + "autoerrinit", + "autoload-config", + "bf", + "blake2", + "buildtest-c\\+\\+", + "camellia", + "capieng", + "cast", + "chacha", + "cmac", + "cms", + "comp", + "crypto-mdebug", + "crypto-mdebug-backtrace", + "ct", + "deprecated", + "des", + "devcryptoeng", + "dgram", + "dh", + "dsa", + "dso", + "dtls", + "dynamic-engine", + "ec", + "ec2m", + "ecdh", + "ecdsa", + "ec_nistp_64_gcc_128", + "egd", + "engine", + "err", + "external-tests", + "filenames", + "fuzz-libfuzzer", + "fuzz-afl", + "gost", + "heartbeats", + "hw(-.+)?", + "idea", + "makedepend", + "md2", + "md4", + "mdc2", + "msan", + "multiblock", + "nextprotoneg", + "pinshared", + "ocb", + "ocsp", + "pic", + "poly1305", + "posix-io", + "psk", + "rc2", + "rc4", + "rc5", + "rdrand", + "rfc3779", + "rmd160", + "scrypt", + "sctp", + "seed", + "shared", + "siphash", + "sm2", + "sm3", + "sm4", + "sock", + "srp", + "srtp", + "sse2", + "ssl", + "ssl-trace", + "static-engine", + "stdio", + "tests", + "threads", + "tls", + "ts", + "ubsan", + "ui-console", + "unit-test", + "whirlpool", + "weak-ssl-ciphers", + "zlib", + "zlib-dynamic", + "ssl3", + "ssl3-method", + "tls1", + "tls1-method", + "tls1_1", + "tls1_1-method", + "tls1_2", + "tls1_2-method", + "tls1_3", + "dtls1", + "dtls1-method", + "dtls1_2", + "dtls1_2-method", +); + +our %disabled = ( + "afalgeng" => "option", + "asan" => "default", + "buildtest-c++" => "default", + "comp" => "option", + "crypto-mdebug" => "default", + "crypto-mdebug-backtrace" => "default", + "devcryptoeng" => "default", + "dynamic-engine" => "cascade", + "ec_nistp_64_gcc_128" => "default", + "egd" => "default", + "external-tests" => "default", + "fuzz-afl" => "default", + "fuzz-libfuzzer" => "default", + "heartbeats" => "default", + "md2" => "default", + "msan" => "default", + "rc5" => "default", + "sctp" => "default", + "shared" => "option", + "ssl3" => "default", + "ssl3-method" => "default", + "ubsan" => "default", + "unit-test" => "default", + "weak-ssl-ciphers" => "default", + "zlib" => "default", + "zlib-dynamic" => "default", +); + +our %withargs = ( +); + +our %unified_info = ( + "depends" => + { + "" => + [ + "include/crypto/bn_conf.h", + "include/crypto/dso_conf.h", + "include/openssl/opensslconf.h", + ], + "apps/asn1pars.o" => + [ + "apps/progs.h", + ], + "apps/ca.o" => + [ + "apps/progs.h", + ], + "apps/ciphers.o" => + [ + "apps/progs.h", + ], + "apps/cms.o" => + [ + "apps/progs.h", + ], + "apps/crl.o" => + [ + "apps/progs.h", + ], + "apps/crl2p7.o" => + [ + "apps/progs.h", + ], + "apps/dgst.o" => + [ + "apps/progs.h", + ], + "apps/dhparam.o" => + [ + "apps/progs.h", + ], + "apps/dsa.o" => + [ + "apps/progs.h", + ], + "apps/dsaparam.o" => + [ + "apps/progs.h", + ], + "apps/ec.o" => + [ + "apps/progs.h", + ], + "apps/ecparam.o" => + [ + "apps/progs.h", + ], + "apps/enc.o" => + [ + "apps/progs.h", + ], + "apps/engine.o" => + [ + "apps/progs.h", + ], + "apps/errstr.o" => + [ + "apps/progs.h", + ], + "apps/gendsa.o" => + [ + "apps/progs.h", + ], + "apps/genpkey.o" => + [ + "apps/progs.h", + ], + "apps/genrsa.o" => + [ + "apps/progs.h", + ], + "apps/nseq.o" => + [ + "apps/progs.h", + ], + "apps/ocsp.o" => + [ + "apps/progs.h", + ], + "apps/openssl" => + [ + "apps/libapps.a", + "libssl", + ], + "apps/openssl.o" => + [ + "apps/progs.h", + ], + "apps/passwd.o" => + [ + "apps/progs.h", + ], + "apps/pkcs12.o" => + [ + "apps/progs.h", + ], + "apps/pkcs7.o" => + [ + "apps/progs.h", + ], + "apps/pkcs8.o" => + [ + "apps/progs.h", + ], + "apps/pkey.o" => + [ + "apps/progs.h", + ], + "apps/pkeyparam.o" => + [ + "apps/progs.h", + ], + "apps/pkeyutl.o" => + [ + "apps/progs.h", + ], + "apps/prime.o" => + [ + "apps/progs.h", + ], + "apps/progs.h" => + [ + "configdata.pm", + ], + "apps/rand.o" => + [ + "apps/progs.h", + ], + "apps/rehash.o" => + [ + "apps/progs.h", + ], + "apps/req.o" => + [ + "apps/progs.h", + ], + "apps/rsa.o" => + [ + "apps/progs.h", + ], + "apps/rsautl.o" => + [ + "apps/progs.h", + ], + "apps/s_client.o" => + [ + "apps/progs.h", + ], + "apps/s_server.o" => + [ + "apps/progs.h", + ], + "apps/s_time.o" => + [ + "apps/progs.h", + ], + "apps/sess_id.o" => + [ + "apps/progs.h", + ], + "apps/smime.o" => + [ + "apps/progs.h", + ], + "apps/speed.o" => + [ + "apps/progs.h", + ], + "apps/spkac.o" => + [ + "apps/progs.h", + ], + "apps/srp.o" => + [ + "apps/progs.h", + ], + "apps/storeutl.o" => + [ + "apps/progs.h", + ], + "apps/ts.o" => + [ + "apps/progs.h", + ], + "apps/verify.o" => + [ + "apps/progs.h", + ], + "apps/version.o" => + [ + "apps/progs.h", + ], + "apps/x509.o" => + [ + "apps/progs.h", + ], + "crypto/aes/aes-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/aes/aesni-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/aes/aest4-sparcv9.S" => + [ + "crypto/perlasm/sparcv9_modes.pl", + ], + "crypto/aes/vpaes-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bf/bf-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/bn-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/co-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/x86-gf2m.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/x86-mont.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/buildinf.h" => + [ + "configdata.pm", + ], + "crypto/camellia/cmll-x86.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/camellia/cmllt4-sparcv9.S" => + [ + "crypto/perlasm/sparcv9_modes.pl", + ], + "crypto/cast/cast-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/cversion.o" => + [ + "crypto/buildinf.h", + ], + "crypto/des/crypt586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/des/des-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/rc4/rc4-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/ripemd/rmd-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha1-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha256-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha512-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/whrlpool/wp-mmx.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/x86cpuid.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "fuzz/asn1-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/asn1parse-test" => + [ + "libcrypto", + ], + "fuzz/bignum-test" => + [ + "libcrypto", + ], + "fuzz/bndiv-test" => + [ + "libcrypto", + ], + "fuzz/client-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/cms-test" => + [ + "libcrypto", + ], + "fuzz/conf-test" => + [ + "libcrypto", + ], + "fuzz/crl-test" => + [ + "libcrypto", + ], + "fuzz/ct-test" => + [ + "libcrypto", + ], + "fuzz/server-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/x509-test" => + [ + "libcrypto", + ], + "include/crypto/bn_conf.h" => + [ + "configdata.pm", + ], + "include/crypto/dso_conf.h" => + [ + "configdata.pm", + ], + "include/openssl/opensslconf.h" => + [ + "configdata.pm", + ], + "libssl" => + [ + "libcrypto", + ], + "test/aborttest" => + [ + "libcrypto", + ], + "test/afalgtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_decode_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_encode_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/asn1_string_table_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asynciotest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/asynctest" => + [ + "libcrypto", + ], + "test/bad_dtls_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/bftest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_callback_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_enc_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_memleak_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bioprinttest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bntest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/buildtest_c_aes" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_asn1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_asn1t" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_async" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_bio" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_blowfish" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_bn" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_buffer" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_camellia" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cast" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cmac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cms" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_conf" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_conf_api" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_crypto" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ct" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_des" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dh" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dtls1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_e_os2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ebcdic" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ec" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ecdh" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ecdsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_engine" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_evp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_hmac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_idea" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_kdf" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_lhash" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_md4" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_md5" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_mdc2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_modes" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_obj_mac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_objects" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ocsp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_opensslv" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ossl_typ" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pem" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pem2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pkcs12" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pkcs7" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rand" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rand_drbg" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rc2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rc4" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ripemd" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_safestack" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_seed" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_sha" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_srp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_srtp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ssl" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ssl2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_stack" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_store" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_symhacks" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_tls1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ts" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_txt_db" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ui" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_whrlpool" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509_vfy" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509v3" => + [ + "libcrypto", + "libssl", + ], + "test/casttest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/chacha_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/cipher_overhead_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cipherbytes_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cipherlist_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ciphername_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/clienthellotest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/cmsapitest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/conf_include_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/constant_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/crltest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ct_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ctype_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/curve448_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/d2i_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/danetest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/destest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dhtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/drbg_cavs_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/drbgtest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/dsa_no_digest_size_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dsatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dtls_mtu_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/dtlstest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/dtlsv1listentest" => + [ + "libssl", + "test/libtestutil.a", + ], + "test/ec_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/ecdsatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ecstresstest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ectest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/enginetest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/errtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/evp_extra_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/evp_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/exdatatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/exptest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/fatalerrtest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/gmdifftest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/gosttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/hmactest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ideatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/igetest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/lhash_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/libtestutil.a" => + [ + "libcrypto", + ], + "test/md2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/mdc2_internal_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/mdc2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/memleaktest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/modes_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/ocspapitest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/packettest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pbelutest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pemtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pkey_meth_kdf_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pkey_meth_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/poly1305_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/rc2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rc4test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rc5test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rdrand_sanitytest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/recordlentest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/rsa_mp_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rsa_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/sanitytest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/secmemtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/servername_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/siphash_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/sm2_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/sm4_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/srptest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ssl_cert_table_internal_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ssl_ctx_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssl_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssl_test_ctx_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslapitest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslbuffertest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslcorrupttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssltest_old" => + [ + "libcrypto", + "libssl", + ], + "test/stack_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/sysdefaulttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/test_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/threadstest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/time_offset_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/tls13ccstest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/tls13encryptiontest" => + [ + "libcrypto", + "libssl.a", + "test/libtestutil.a", + ], + "test/uitest" => + [ + "apps/libapps.a", + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/v3ext" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/v3nametest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/verify_extra_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/versions" => + [ + "libcrypto", + ], + "test/wpackettest" => + [ + "libcrypto", + "libssl.a", + "test/libtestutil.a", + ], + "test/x509_check_cert_pkey_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509_dup_cert_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/x509_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509aux" => + [ + "libcrypto", + "test/libtestutil.a", + ], + }, + "dirinfo" => + { + "apps" => + { + "products" => + { + "bin" => + [ + "apps/openssl", + ], + "lib" => + [ + "apps/libapps.a", + ], + "script" => + [ + "apps/CA.pl", + "apps/tsget.pl", + ], + }, + }, + "crypto" => + { + "deps" => + [ + "crypto/arm64cpuid.o", + "crypto/armcap.o", + "crypto/cpt_err.o", + "crypto/cryptlib.o", + "crypto/ctype.o", + "crypto/cversion.o", + "crypto/ebcdic.o", + "crypto/ex_data.o", + "crypto/getenv.o", + "crypto/init.o", + "crypto/mem.o", + "crypto/mem_dbg.o", + "crypto/mem_sec.o", + "crypto/o_dir.o", + "crypto/o_fips.o", + "crypto/o_fopen.o", + "crypto/o_init.o", + "crypto/o_str.o", + "crypto/o_time.o", + "crypto/threads_none.o", + "crypto/threads_pthread.o", + "crypto/threads_win.o", + "crypto/uid.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/aes" => + { + "deps" => + [ + "crypto/aes/aes_cbc.o", + "crypto/aes/aes_cfb.o", + "crypto/aes/aes_core.o", + "crypto/aes/aes_ecb.o", + "crypto/aes/aes_ige.o", + "crypto/aes/aes_misc.o", + "crypto/aes/aes_ofb.o", + "crypto/aes/aes_wrap.o", + "crypto/aes/aesv8-armx.o", + "crypto/aes/vpaes-armv8.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/aria" => + { + "deps" => + [ + "crypto/aria/aria.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/asn1" => + { + "deps" => + [ + "crypto/asn1/a_bitstr.o", + "crypto/asn1/a_d2i_fp.o", + "crypto/asn1/a_digest.o", + "crypto/asn1/a_dup.o", + "crypto/asn1/a_gentm.o", + "crypto/asn1/a_i2d_fp.o", + "crypto/asn1/a_int.o", + "crypto/asn1/a_mbstr.o", + "crypto/asn1/a_object.o", + "crypto/asn1/a_octet.o", + "crypto/asn1/a_print.o", + "crypto/asn1/a_sign.o", + "crypto/asn1/a_strex.o", + "crypto/asn1/a_strnid.o", + "crypto/asn1/a_time.o", + "crypto/asn1/a_type.o", + "crypto/asn1/a_utctm.o", + "crypto/asn1/a_utf8.o", + "crypto/asn1/a_verify.o", + "crypto/asn1/ameth_lib.o", + "crypto/asn1/asn1_err.o", + "crypto/asn1/asn1_gen.o", + "crypto/asn1/asn1_item_list.o", + "crypto/asn1/asn1_lib.o", + "crypto/asn1/asn1_par.o", + "crypto/asn1/asn_mime.o", + "crypto/asn1/asn_moid.o", + "crypto/asn1/asn_mstbl.o", + "crypto/asn1/asn_pack.o", + "crypto/asn1/bio_asn1.o", + "crypto/asn1/bio_ndef.o", + "crypto/asn1/d2i_pr.o", + "crypto/asn1/d2i_pu.o", + "crypto/asn1/evp_asn1.o", + "crypto/asn1/f_int.o", + "crypto/asn1/f_string.o", + "crypto/asn1/i2d_pr.o", + "crypto/asn1/i2d_pu.o", + "crypto/asn1/n_pkey.o", + "crypto/asn1/nsseq.o", + "crypto/asn1/p5_pbe.o", + "crypto/asn1/p5_pbev2.o", + "crypto/asn1/p5_scrypt.o", + "crypto/asn1/p8_pkey.o", + "crypto/asn1/t_bitst.o", + "crypto/asn1/t_pkey.o", + "crypto/asn1/t_spki.o", + "crypto/asn1/tasn_dec.o", + "crypto/asn1/tasn_enc.o", + "crypto/asn1/tasn_fre.o", + "crypto/asn1/tasn_new.o", + "crypto/asn1/tasn_prn.o", + "crypto/asn1/tasn_scn.o", + "crypto/asn1/tasn_typ.o", + "crypto/asn1/tasn_utl.o", + "crypto/asn1/x_algor.o", + "crypto/asn1/x_bignum.o", + "crypto/asn1/x_info.o", + "crypto/asn1/x_int64.o", + "crypto/asn1/x_long.o", + "crypto/asn1/x_pkey.o", + "crypto/asn1/x_sig.o", + "crypto/asn1/x_spki.o", + "crypto/asn1/x_val.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/async" => + { + "deps" => + [ + "crypto/async/async.o", + "crypto/async/async_err.o", + "crypto/async/async_wait.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/async/arch" => + { + "deps" => + [ + "crypto/async/arch/async_null.o", + "crypto/async/arch/async_posix.o", + "crypto/async/arch/async_win.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bf" => + { + "deps" => + [ + "crypto/bf/bf_cfb64.o", + "crypto/bf/bf_ecb.o", + "crypto/bf/bf_enc.o", + "crypto/bf/bf_ofb64.o", + "crypto/bf/bf_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bio" => + { + "deps" => + [ + "crypto/bio/b_addr.o", + "crypto/bio/b_dump.o", + "crypto/bio/b_print.o", + "crypto/bio/b_sock.o", + "crypto/bio/b_sock2.o", + "crypto/bio/bf_buff.o", + "crypto/bio/bf_lbuf.o", + "crypto/bio/bf_nbio.o", + "crypto/bio/bf_null.o", + "crypto/bio/bio_cb.o", + "crypto/bio/bio_err.o", + "crypto/bio/bio_lib.o", + "crypto/bio/bio_meth.o", + "crypto/bio/bss_acpt.o", + "crypto/bio/bss_bio.o", + "crypto/bio/bss_conn.o", + "crypto/bio/bss_dgram.o", + "crypto/bio/bss_fd.o", + "crypto/bio/bss_file.o", + "crypto/bio/bss_log.o", + "crypto/bio/bss_mem.o", + "crypto/bio/bss_null.o", + "crypto/bio/bss_sock.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/blake2" => + { + "deps" => + [ + "crypto/blake2/blake2b.o", + "crypto/blake2/blake2s.o", + "crypto/blake2/m_blake2b.o", + "crypto/blake2/m_blake2s.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bn" => + { + "deps" => + [ + "crypto/bn/armv8-mont.o", + "crypto/bn/bn_add.o", + "crypto/bn/bn_asm.o", + "crypto/bn/bn_blind.o", + "crypto/bn/bn_const.o", + "crypto/bn/bn_ctx.o", + "crypto/bn/bn_depr.o", + "crypto/bn/bn_dh.o", + "crypto/bn/bn_div.o", + "crypto/bn/bn_err.o", + "crypto/bn/bn_exp.o", + "crypto/bn/bn_exp2.o", + "crypto/bn/bn_gcd.o", + "crypto/bn/bn_gf2m.o", + "crypto/bn/bn_intern.o", + "crypto/bn/bn_kron.o", + "crypto/bn/bn_lib.o", + "crypto/bn/bn_mod.o", + "crypto/bn/bn_mont.o", + "crypto/bn/bn_mpi.o", + "crypto/bn/bn_mul.o", + "crypto/bn/bn_nist.o", + "crypto/bn/bn_prime.o", + "crypto/bn/bn_print.o", + "crypto/bn/bn_rand.o", + "crypto/bn/bn_recp.o", + "crypto/bn/bn_shift.o", + "crypto/bn/bn_sqr.o", + "crypto/bn/bn_sqrt.o", + "crypto/bn/bn_srp.o", + "crypto/bn/bn_word.o", + "crypto/bn/bn_x931p.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/buffer" => + { + "deps" => + [ + "crypto/buffer/buf_err.o", + "crypto/buffer/buffer.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/camellia" => + { + "deps" => + [ + "crypto/camellia/camellia.o", + "crypto/camellia/cmll_cbc.o", + "crypto/camellia/cmll_cfb.o", + "crypto/camellia/cmll_ctr.o", + "crypto/camellia/cmll_ecb.o", + "crypto/camellia/cmll_misc.o", + "crypto/camellia/cmll_ofb.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cast" => + { + "deps" => + [ + "crypto/cast/c_cfb64.o", + "crypto/cast/c_ecb.o", + "crypto/cast/c_enc.o", + "crypto/cast/c_ofb64.o", + "crypto/cast/c_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/chacha" => + { + "deps" => + [ + "crypto/chacha/chacha-armv8.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cmac" => + { + "deps" => + [ + "crypto/cmac/cm_ameth.o", + "crypto/cmac/cm_pmeth.o", + "crypto/cmac/cmac.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cms" => + { + "deps" => + [ + "crypto/cms/cms_asn1.o", + "crypto/cms/cms_att.o", + "crypto/cms/cms_cd.o", + "crypto/cms/cms_dd.o", + "crypto/cms/cms_enc.o", + "crypto/cms/cms_env.o", + "crypto/cms/cms_err.o", + "crypto/cms/cms_ess.o", + "crypto/cms/cms_io.o", + "crypto/cms/cms_kari.o", + "crypto/cms/cms_lib.o", + "crypto/cms/cms_pwri.o", + "crypto/cms/cms_sd.o", + "crypto/cms/cms_smime.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/conf" => + { + "deps" => + [ + "crypto/conf/conf_api.o", + "crypto/conf/conf_def.o", + "crypto/conf/conf_err.o", + "crypto/conf/conf_lib.o", + "crypto/conf/conf_mall.o", + "crypto/conf/conf_mod.o", + "crypto/conf/conf_sap.o", + "crypto/conf/conf_ssl.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ct" => + { + "deps" => + [ + "crypto/ct/ct_b64.o", + "crypto/ct/ct_err.o", + "crypto/ct/ct_log.o", + "crypto/ct/ct_oct.o", + "crypto/ct/ct_policy.o", + "crypto/ct/ct_prn.o", + "crypto/ct/ct_sct.o", + "crypto/ct/ct_sct_ctx.o", + "crypto/ct/ct_vfy.o", + "crypto/ct/ct_x509v3.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/des" => + { + "deps" => + [ + "crypto/des/cbc_cksm.o", + "crypto/des/cbc_enc.o", + "crypto/des/cfb64ede.o", + "crypto/des/cfb64enc.o", + "crypto/des/cfb_enc.o", + "crypto/des/des_enc.o", + "crypto/des/ecb3_enc.o", + "crypto/des/ecb_enc.o", + "crypto/des/fcrypt.o", + "crypto/des/fcrypt_b.o", + "crypto/des/ofb64ede.o", + "crypto/des/ofb64enc.o", + "crypto/des/ofb_enc.o", + "crypto/des/pcbc_enc.o", + "crypto/des/qud_cksm.o", + "crypto/des/rand_key.o", + "crypto/des/set_key.o", + "crypto/des/str2key.o", + "crypto/des/xcbc_enc.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dh" => + { + "deps" => + [ + "crypto/dh/dh_ameth.o", + "crypto/dh/dh_asn1.o", + "crypto/dh/dh_check.o", + "crypto/dh/dh_depr.o", + "crypto/dh/dh_err.o", + "crypto/dh/dh_gen.o", + "crypto/dh/dh_kdf.o", + "crypto/dh/dh_key.o", + "crypto/dh/dh_lib.o", + "crypto/dh/dh_meth.o", + "crypto/dh/dh_pmeth.o", + "crypto/dh/dh_prn.o", + "crypto/dh/dh_rfc5114.o", + "crypto/dh/dh_rfc7919.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dsa" => + { + "deps" => + [ + "crypto/dsa/dsa_ameth.o", + "crypto/dsa/dsa_asn1.o", + "crypto/dsa/dsa_depr.o", + "crypto/dsa/dsa_err.o", + "crypto/dsa/dsa_gen.o", + "crypto/dsa/dsa_key.o", + "crypto/dsa/dsa_lib.o", + "crypto/dsa/dsa_meth.o", + "crypto/dsa/dsa_ossl.o", + "crypto/dsa/dsa_pmeth.o", + "crypto/dsa/dsa_prn.o", + "crypto/dsa/dsa_sign.o", + "crypto/dsa/dsa_vrf.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dso" => + { + "deps" => + [ + "crypto/dso/dso_dl.o", + "crypto/dso/dso_dlfcn.o", + "crypto/dso/dso_err.o", + "crypto/dso/dso_lib.o", + "crypto/dso/dso_openssl.o", + "crypto/dso/dso_vms.o", + "crypto/dso/dso_win32.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec" => + { + "deps" => + [ + "crypto/ec/curve25519.o", + "crypto/ec/ec2_oct.o", + "crypto/ec/ec2_smpl.o", + "crypto/ec/ec_ameth.o", + "crypto/ec/ec_asn1.o", + "crypto/ec/ec_check.o", + "crypto/ec/ec_curve.o", + "crypto/ec/ec_cvt.o", + "crypto/ec/ec_err.o", + "crypto/ec/ec_key.o", + "crypto/ec/ec_kmeth.o", + "crypto/ec/ec_lib.o", + "crypto/ec/ec_mult.o", + "crypto/ec/ec_oct.o", + "crypto/ec/ec_pmeth.o", + "crypto/ec/ec_print.o", + "crypto/ec/ecdh_kdf.o", + "crypto/ec/ecdh_ossl.o", + "crypto/ec/ecdsa_ossl.o", + "crypto/ec/ecdsa_sign.o", + "crypto/ec/ecdsa_vrf.o", + "crypto/ec/eck_prn.o", + "crypto/ec/ecp_mont.o", + "crypto/ec/ecp_nist.o", + "crypto/ec/ecp_nistp224.o", + "crypto/ec/ecp_nistp256.o", + "crypto/ec/ecp_nistp521.o", + "crypto/ec/ecp_nistputil.o", + "crypto/ec/ecp_nistz256-armv8.o", + "crypto/ec/ecp_nistz256.o", + "crypto/ec/ecp_oct.o", + "crypto/ec/ecp_smpl.o", + "crypto/ec/ecx_meth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec/curve448" => + { + "deps" => + [ + "crypto/ec/curve448/curve448.o", + "crypto/ec/curve448/curve448_tables.o", + "crypto/ec/curve448/eddsa.o", + "crypto/ec/curve448/f_generic.o", + "crypto/ec/curve448/scalar.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec/curve448/arch_32" => + { + "deps" => + [ + "crypto/ec/curve448/arch_32/f_impl.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/engine" => + { + "deps" => + [ + "crypto/engine/eng_all.o", + "crypto/engine/eng_cnf.o", + "crypto/engine/eng_ctrl.o", + "crypto/engine/eng_dyn.o", + "crypto/engine/eng_err.o", + "crypto/engine/eng_fat.o", + "crypto/engine/eng_init.o", + "crypto/engine/eng_lib.o", + "crypto/engine/eng_list.o", + "crypto/engine/eng_openssl.o", + "crypto/engine/eng_pkey.o", + "crypto/engine/eng_rdrand.o", + "crypto/engine/eng_table.o", + "crypto/engine/tb_asnmth.o", + "crypto/engine/tb_cipher.o", + "crypto/engine/tb_dh.o", + "crypto/engine/tb_digest.o", + "crypto/engine/tb_dsa.o", + "crypto/engine/tb_eckey.o", + "crypto/engine/tb_pkmeth.o", + "crypto/engine/tb_rand.o", + "crypto/engine/tb_rsa.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/err" => + { + "deps" => + [ + "crypto/err/err.o", + "crypto/err/err_all.o", + "crypto/err/err_prn.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/evp" => + { + "deps" => + [ + "crypto/evp/bio_b64.o", + "crypto/evp/bio_enc.o", + "crypto/evp/bio_md.o", + "crypto/evp/bio_ok.o", + "crypto/evp/c_allc.o", + "crypto/evp/c_alld.o", + "crypto/evp/cmeth_lib.o", + "crypto/evp/digest.o", + "crypto/evp/e_aes.o", + "crypto/evp/e_aes_cbc_hmac_sha1.o", + "crypto/evp/e_aes_cbc_hmac_sha256.o", + "crypto/evp/e_aria.o", + "crypto/evp/e_bf.o", + "crypto/evp/e_camellia.o", + "crypto/evp/e_cast.o", + "crypto/evp/e_chacha20_poly1305.o", + "crypto/evp/e_des.o", + "crypto/evp/e_des3.o", + "crypto/evp/e_idea.o", + "crypto/evp/e_null.o", + "crypto/evp/e_old.o", + "crypto/evp/e_rc2.o", + "crypto/evp/e_rc4.o", + "crypto/evp/e_rc4_hmac_md5.o", + "crypto/evp/e_rc5.o", + "crypto/evp/e_seed.o", + "crypto/evp/e_sm4.o", + "crypto/evp/e_xcbc_d.o", + "crypto/evp/encode.o", + "crypto/evp/evp_cnf.o", + "crypto/evp/evp_enc.o", + "crypto/evp/evp_err.o", + "crypto/evp/evp_key.o", + "crypto/evp/evp_lib.o", + "crypto/evp/evp_pbe.o", + "crypto/evp/evp_pkey.o", + "crypto/evp/m_md2.o", + "crypto/evp/m_md4.o", + "crypto/evp/m_md5.o", + "crypto/evp/m_md5_sha1.o", + "crypto/evp/m_mdc2.o", + "crypto/evp/m_null.o", + "crypto/evp/m_ripemd.o", + "crypto/evp/m_sha1.o", + "crypto/evp/m_sha3.o", + "crypto/evp/m_sigver.o", + "crypto/evp/m_wp.o", + "crypto/evp/names.o", + "crypto/evp/p5_crpt.o", + "crypto/evp/p5_crpt2.o", + "crypto/evp/p_dec.o", + "crypto/evp/p_enc.o", + "crypto/evp/p_lib.o", + "crypto/evp/p_open.o", + "crypto/evp/p_seal.o", + "crypto/evp/p_sign.o", + "crypto/evp/p_verify.o", + "crypto/evp/pbe_scrypt.o", + "crypto/evp/pmeth_fn.o", + "crypto/evp/pmeth_gn.o", + "crypto/evp/pmeth_lib.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/hmac" => + { + "deps" => + [ + "crypto/hmac/hm_ameth.o", + "crypto/hmac/hm_pmeth.o", + "crypto/hmac/hmac.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/idea" => + { + "deps" => + [ + "crypto/idea/i_cbc.o", + "crypto/idea/i_cfb64.o", + "crypto/idea/i_ecb.o", + "crypto/idea/i_ofb64.o", + "crypto/idea/i_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/kdf" => + { + "deps" => + [ + "crypto/kdf/hkdf.o", + "crypto/kdf/kdf_err.o", + "crypto/kdf/scrypt.o", + "crypto/kdf/tls1_prf.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/lhash" => + { + "deps" => + [ + "crypto/lhash/lh_stats.o", + "crypto/lhash/lhash.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/md4" => + { + "deps" => + [ + "crypto/md4/md4_dgst.o", + "crypto/md4/md4_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/md5" => + { + "deps" => + [ + "crypto/md5/md5_dgst.o", + "crypto/md5/md5_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/mdc2" => + { + "deps" => + [ + "crypto/mdc2/mdc2_one.o", + "crypto/mdc2/mdc2dgst.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/modes" => + { + "deps" => + [ + "crypto/modes/cbc128.o", + "crypto/modes/ccm128.o", + "crypto/modes/cfb128.o", + "crypto/modes/ctr128.o", + "crypto/modes/cts128.o", + "crypto/modes/gcm128.o", + "crypto/modes/ghashv8-armx.o", + "crypto/modes/ocb128.o", + "crypto/modes/ofb128.o", + "crypto/modes/wrap128.o", + "crypto/modes/xts128.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/objects" => + { + "deps" => + [ + "crypto/objects/o_names.o", + "crypto/objects/obj_dat.o", + "crypto/objects/obj_err.o", + "crypto/objects/obj_lib.o", + "crypto/objects/obj_xref.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ocsp" => + { + "deps" => + [ + "crypto/ocsp/ocsp_asn.o", + "crypto/ocsp/ocsp_cl.o", + "crypto/ocsp/ocsp_err.o", + "crypto/ocsp/ocsp_ext.o", + "crypto/ocsp/ocsp_ht.o", + "crypto/ocsp/ocsp_lib.o", + "crypto/ocsp/ocsp_prn.o", + "crypto/ocsp/ocsp_srv.o", + "crypto/ocsp/ocsp_vfy.o", + "crypto/ocsp/v3_ocsp.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pem" => + { + "deps" => + [ + "crypto/pem/pem_all.o", + "crypto/pem/pem_err.o", + "crypto/pem/pem_info.o", + "crypto/pem/pem_lib.o", + "crypto/pem/pem_oth.o", + "crypto/pem/pem_pk8.o", + "crypto/pem/pem_pkey.o", + "crypto/pem/pem_sign.o", + "crypto/pem/pem_x509.o", + "crypto/pem/pem_xaux.o", + "crypto/pem/pvkfmt.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pkcs12" => + { + "deps" => + [ + "crypto/pkcs12/p12_add.o", + "crypto/pkcs12/p12_asn.o", + "crypto/pkcs12/p12_attr.o", + "crypto/pkcs12/p12_crpt.o", + "crypto/pkcs12/p12_crt.o", + "crypto/pkcs12/p12_decr.o", + "crypto/pkcs12/p12_init.o", + "crypto/pkcs12/p12_key.o", + "crypto/pkcs12/p12_kiss.o", + "crypto/pkcs12/p12_mutl.o", + "crypto/pkcs12/p12_npas.o", + "crypto/pkcs12/p12_p8d.o", + "crypto/pkcs12/p12_p8e.o", + "crypto/pkcs12/p12_sbag.o", + "crypto/pkcs12/p12_utl.o", + "crypto/pkcs12/pk12err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pkcs7" => + { + "deps" => + [ + "crypto/pkcs7/bio_pk7.o", + "crypto/pkcs7/pk7_asn1.o", + "crypto/pkcs7/pk7_attr.o", + "crypto/pkcs7/pk7_doit.o", + "crypto/pkcs7/pk7_lib.o", + "crypto/pkcs7/pk7_mime.o", + "crypto/pkcs7/pk7_smime.o", + "crypto/pkcs7/pkcs7err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/poly1305" => + { + "deps" => + [ + "crypto/poly1305/poly1305-armv8.o", + "crypto/poly1305/poly1305.o", + "crypto/poly1305/poly1305_ameth.o", + "crypto/poly1305/poly1305_pmeth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rand" => + { + "deps" => + [ + "crypto/rand/drbg_ctr.o", + "crypto/rand/drbg_lib.o", + "crypto/rand/rand_egd.o", + "crypto/rand/rand_err.o", + "crypto/rand/rand_lib.o", + "crypto/rand/rand_unix.o", + "crypto/rand/rand_vms.o", + "crypto/rand/rand_win.o", + "crypto/rand/randfile.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rc2" => + { + "deps" => + [ + "crypto/rc2/rc2_cbc.o", + "crypto/rc2/rc2_ecb.o", + "crypto/rc2/rc2_skey.o", + "crypto/rc2/rc2cfb64.o", + "crypto/rc2/rc2ofb64.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rc4" => + { + "deps" => + [ + "crypto/rc4/rc4_enc.o", + "crypto/rc4/rc4_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ripemd" => + { + "deps" => + [ + "crypto/ripemd/rmd_dgst.o", + "crypto/ripemd/rmd_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rsa" => + { + "deps" => + [ + "crypto/rsa/rsa_ameth.o", + "crypto/rsa/rsa_asn1.o", + "crypto/rsa/rsa_chk.o", + "crypto/rsa/rsa_crpt.o", + "crypto/rsa/rsa_depr.o", + "crypto/rsa/rsa_err.o", + "crypto/rsa/rsa_gen.o", + "crypto/rsa/rsa_lib.o", + "crypto/rsa/rsa_meth.o", + "crypto/rsa/rsa_mp.o", + "crypto/rsa/rsa_none.o", + "crypto/rsa/rsa_oaep.o", + "crypto/rsa/rsa_ossl.o", + "crypto/rsa/rsa_pk1.o", + "crypto/rsa/rsa_pmeth.o", + "crypto/rsa/rsa_prn.o", + "crypto/rsa/rsa_pss.o", + "crypto/rsa/rsa_saos.o", + "crypto/rsa/rsa_sign.o", + "crypto/rsa/rsa_ssl.o", + "crypto/rsa/rsa_x931.o", + "crypto/rsa/rsa_x931g.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/seed" => + { + "deps" => + [ + "crypto/seed/seed.o", + "crypto/seed/seed_cbc.o", + "crypto/seed/seed_cfb.o", + "crypto/seed/seed_ecb.o", + "crypto/seed/seed_ofb.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sha" => + { + "deps" => + [ + "crypto/sha/keccak1600-armv8.o", + "crypto/sha/sha1-armv8.o", + "crypto/sha/sha1_one.o", + "crypto/sha/sha1dgst.o", + "crypto/sha/sha256-armv8.o", + "crypto/sha/sha256.o", + "crypto/sha/sha512-armv8.o", + "crypto/sha/sha512.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/siphash" => + { + "deps" => + [ + "crypto/siphash/siphash.o", + "crypto/siphash/siphash_ameth.o", + "crypto/siphash/siphash_pmeth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm2" => + { + "deps" => + [ + "crypto/sm2/sm2_crypt.o", + "crypto/sm2/sm2_err.o", + "crypto/sm2/sm2_pmeth.o", + "crypto/sm2/sm2_sign.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm3" => + { + "deps" => + [ + "crypto/sm3/m_sm3.o", + "crypto/sm3/sm3.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm4" => + { + "deps" => + [ + "crypto/sm4/sm4.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/srp" => + { + "deps" => + [ + "crypto/srp/srp_lib.o", + "crypto/srp/srp_vfy.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/stack" => + { + "deps" => + [ + "crypto/stack/stack.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/store" => + { + "deps" => + [ + "crypto/store/loader_file.o", + "crypto/store/store_err.o", + "crypto/store/store_init.o", + "crypto/store/store_lib.o", + "crypto/store/store_register.o", + "crypto/store/store_strings.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ts" => + { + "deps" => + [ + "crypto/ts/ts_asn1.o", + "crypto/ts/ts_conf.o", + "crypto/ts/ts_err.o", + "crypto/ts/ts_lib.o", + "crypto/ts/ts_req_print.o", + "crypto/ts/ts_req_utils.o", + "crypto/ts/ts_rsp_print.o", + "crypto/ts/ts_rsp_sign.o", + "crypto/ts/ts_rsp_utils.o", + "crypto/ts/ts_rsp_verify.o", + "crypto/ts/ts_verify_ctx.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/txt_db" => + { + "deps" => + [ + "crypto/txt_db/txt_db.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ui" => + { + "deps" => + [ + "crypto/ui/ui_err.o", + "crypto/ui/ui_lib.o", + "crypto/ui/ui_null.o", + "crypto/ui/ui_openssl.o", + "crypto/ui/ui_util.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/whrlpool" => + { + "deps" => + [ + "crypto/whrlpool/wp_block.o", + "crypto/whrlpool/wp_dgst.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/x509" => + { + "deps" => + [ + "crypto/x509/by_dir.o", + "crypto/x509/by_file.o", + "crypto/x509/t_crl.o", + "crypto/x509/t_req.o", + "crypto/x509/t_x509.o", + "crypto/x509/x509_att.o", + "crypto/x509/x509_cmp.o", + "crypto/x509/x509_d2.o", + "crypto/x509/x509_def.o", + "crypto/x509/x509_err.o", + "crypto/x509/x509_ext.o", + "crypto/x509/x509_lu.o", + "crypto/x509/x509_meth.o", + "crypto/x509/x509_obj.o", + "crypto/x509/x509_r2x.o", + "crypto/x509/x509_req.o", + "crypto/x509/x509_set.o", + "crypto/x509/x509_trs.o", + "crypto/x509/x509_txt.o", + "crypto/x509/x509_v3.o", + "crypto/x509/x509_vfy.o", + "crypto/x509/x509_vpm.o", + "crypto/x509/x509cset.o", + "crypto/x509/x509name.o", + "crypto/x509/x509rset.o", + "crypto/x509/x509spki.o", + "crypto/x509/x509type.o", + "crypto/x509/x_all.o", + "crypto/x509/x_attrib.o", + "crypto/x509/x_crl.o", + "crypto/x509/x_exten.o", + "crypto/x509/x_name.o", + "crypto/x509/x_pubkey.o", + "crypto/x509/x_req.o", + "crypto/x509/x_x509.o", + "crypto/x509/x_x509a.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/x509v3" => + { + "deps" => + [ + "crypto/x509v3/pcy_cache.o", + "crypto/x509v3/pcy_data.o", + "crypto/x509v3/pcy_lib.o", + "crypto/x509v3/pcy_map.o", + "crypto/x509v3/pcy_node.o", + "crypto/x509v3/pcy_tree.o", + "crypto/x509v3/v3_addr.o", + "crypto/x509v3/v3_admis.o", + "crypto/x509v3/v3_akey.o", + "crypto/x509v3/v3_akeya.o", + "crypto/x509v3/v3_alt.o", + "crypto/x509v3/v3_asid.o", + "crypto/x509v3/v3_bcons.o", + "crypto/x509v3/v3_bitst.o", + "crypto/x509v3/v3_conf.o", + "crypto/x509v3/v3_cpols.o", + "crypto/x509v3/v3_crld.o", + "crypto/x509v3/v3_enum.o", + "crypto/x509v3/v3_extku.o", + "crypto/x509v3/v3_genn.o", + "crypto/x509v3/v3_ia5.o", + "crypto/x509v3/v3_info.o", + "crypto/x509v3/v3_int.o", + "crypto/x509v3/v3_lib.o", + "crypto/x509v3/v3_ncons.o", + "crypto/x509v3/v3_pci.o", + "crypto/x509v3/v3_pcia.o", + "crypto/x509v3/v3_pcons.o", + "crypto/x509v3/v3_pku.o", + "crypto/x509v3/v3_pmaps.o", + "crypto/x509v3/v3_prn.o", + "crypto/x509v3/v3_purp.o", + "crypto/x509v3/v3_skey.o", + "crypto/x509v3/v3_sxnet.o", + "crypto/x509v3/v3_tlsf.o", + "crypto/x509v3/v3_utl.o", + "crypto/x509v3/v3err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "engines" => + { + "deps" => + [ + "engines/e_capi.o", + "engines/e_padlock.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "fuzz" => + { + "products" => + { + "bin" => + [ + "fuzz/asn1-test", + "fuzz/asn1parse-test", + "fuzz/bignum-test", + "fuzz/bndiv-test", + "fuzz/client-test", + "fuzz/cms-test", + "fuzz/conf-test", + "fuzz/crl-test", + "fuzz/ct-test", + "fuzz/server-test", + "fuzz/x509-test", + ], + }, + }, + "ssl" => + { + "deps" => + [ + "ssl/bio_ssl.o", + "ssl/d1_lib.o", + "ssl/d1_msg.o", + "ssl/d1_srtp.o", + "ssl/methods.o", + "ssl/packet.o", + "ssl/pqueue.o", + "ssl/s3_cbc.o", + "ssl/s3_enc.o", + "ssl/s3_lib.o", + "ssl/s3_msg.o", + "ssl/ssl_asn1.o", + "ssl/ssl_cert.o", + "ssl/ssl_ciph.o", + "ssl/ssl_conf.o", + "ssl/ssl_err.o", + "ssl/ssl_init.o", + "ssl/ssl_lib.o", + "ssl/ssl_mcnf.o", + "ssl/ssl_rsa.o", + "ssl/ssl_sess.o", + "ssl/ssl_stat.o", + "ssl/ssl_txt.o", + "ssl/ssl_utst.o", + "ssl/t1_enc.o", + "ssl/t1_lib.o", + "ssl/t1_trce.o", + "ssl/tls13_enc.o", + "ssl/tls_srp.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "ssl/record" => + { + "deps" => + [ + "ssl/record/dtls1_bitmap.o", + "ssl/record/rec_layer_d1.o", + "ssl/record/rec_layer_s3.o", + "ssl/record/ssl3_buffer.o", + "ssl/record/ssl3_record.o", + "ssl/record/ssl3_record_tls13.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "ssl/statem" => + { + "deps" => + [ + "ssl/statem/extensions.o", + "ssl/statem/extensions_clnt.o", + "ssl/statem/extensions_cust.o", + "ssl/statem/extensions_srvr.o", + "ssl/statem/statem.o", + "ssl/statem/statem_clnt.o", + "ssl/statem/statem_dtls.o", + "ssl/statem/statem_lib.o", + "ssl/statem/statem_srvr.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "test/testutil" => + { + "deps" => + [ + "test/testutil/basic_output.o", + "test/testutil/cb.o", + "test/testutil/driver.o", + "test/testutil/format_output.o", + "test/testutil/main.o", + "test/testutil/output_helpers.o", + "test/testutil/random.o", + "test/testutil/stanza.o", + "test/testutil/tap_bio.o", + "test/testutil/test_cleanup.o", + "test/testutil/tests.o", + "test/testutil/testutil_init.o", + ], + "products" => + { + "lib" => + [ + "test/libtestutil.a", + ], + }, + }, + "tools" => + { + "products" => + { + "script" => + [ + "tools/c_rehash", + ], + }, + }, + "util" => + { + "products" => + { + "script" => + [ + "util/shlib_wrap.sh", + ], + }, + }, + }, + "engines" => + [ + ], + "extra" => + [ + "crypto/alphacpuid.pl", + "crypto/arm64cpuid.pl", + "crypto/armv4cpuid.pl", + "crypto/ia64cpuid.S", + "crypto/pariscid.pl", + "crypto/ppccpuid.pl", + "crypto/x86_64cpuid.pl", + "crypto/x86cpuid.pl", + "ms/applink.c", + "ms/uplink-x86.pl", + "ms/uplink.c", + ], + "generate" => + { + "apps/progs.h" => + [ + "apps/progs.pl", + "\$(APPS_OPENSSL)", + ], + "crypto/aes/aes-586.s" => + [ + "crypto/aes/asm/aes-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/aes-armv4.S" => + [ + "crypto/aes/asm/aes-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-ia64.s" => + [ + "crypto/aes/asm/aes-ia64.S", + ], + "crypto/aes/aes-mips.S" => + [ + "crypto/aes/asm/aes-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-parisc.s" => + [ + "crypto/aes/asm/aes-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-ppc.s" => + [ + "crypto/aes/asm/aes-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-s390x.S" => + [ + "crypto/aes/asm/aes-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-sparcv9.S" => + [ + "crypto/aes/asm/aes-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-x86_64.s" => + [ + "crypto/aes/asm/aes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesfx-sparcv9.S" => + [ + "crypto/aes/asm/aesfx-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-mb-x86_64.s" => + [ + "crypto/aes/asm/aesni-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-sha1-x86_64.s" => + [ + "crypto/aes/asm/aesni-sha1-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-sha256-x86_64.s" => + [ + "crypto/aes/asm/aesni-sha256-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-x86.s" => + [ + "crypto/aes/asm/aesni-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/aesni-x86_64.s" => + [ + "crypto/aes/asm/aesni-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesp8-ppc.s" => + [ + "crypto/aes/asm/aesp8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aest4-sparcv9.S" => + [ + "crypto/aes/asm/aest4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesv8-armx.S" => + [ + "crypto/aes/asm/aesv8-armx.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/bsaes-armv7.S" => + [ + "crypto/aes/asm/bsaes-armv7.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/bsaes-x86_64.s" => + [ + "crypto/aes/asm/bsaes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-armv8.S" => + [ + "crypto/aes/asm/vpaes-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-ppc.s" => + [ + "crypto/aes/asm/vpaes-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-x86.s" => + [ + "crypto/aes/asm/vpaes-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/vpaes-x86_64.s" => + [ + "crypto/aes/asm/vpaes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/alphacpuid.s" => + [ + "crypto/alphacpuid.pl", + ], + "crypto/arm64cpuid.S" => + [ + "crypto/arm64cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/armv4cpuid.S" => + [ + "crypto/armv4cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bf/bf-586.s" => + [ + "crypto/bf/asm/bf-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/alpha-mont.S" => + [ + "crypto/bn/asm/alpha-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv4-gf2m.S" => + [ + "crypto/bn/asm/armv4-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv4-mont.S" => + [ + "crypto/bn/asm/armv4-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv8-mont.S" => + [ + "crypto/bn/asm/armv8-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/bn-586.s" => + [ + "crypto/bn/asm/bn-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/bn-ia64.s" => + [ + "crypto/bn/asm/ia64.S", + ], + "crypto/bn/bn-mips.S" => + [ + "crypto/bn/asm/mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/bn-ppc.s" => + [ + "crypto/bn/asm/ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/co-586.s" => + [ + "crypto/bn/asm/co-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/ia64-mont.s" => + [ + "crypto/bn/asm/ia64-mont.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/bn/mips-mont.S" => + [ + "crypto/bn/asm/mips-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/parisc-mont.s" => + [ + "crypto/bn/asm/parisc-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/ppc-mont.s" => + [ + "crypto/bn/asm/ppc-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/ppc64-mont.s" => + [ + "crypto/bn/asm/ppc64-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/rsaz-avx2.s" => + [ + "crypto/bn/asm/rsaz-avx2.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/rsaz-x86_64.s" => + [ + "crypto/bn/asm/rsaz-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/s390x-gf2m.s" => + [ + "crypto/bn/asm/s390x-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/s390x-mont.S" => + [ + "crypto/bn/asm/s390x-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparct4-mont.S" => + [ + "crypto/bn/asm/sparct4-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9-gf2m.S" => + [ + "crypto/bn/asm/sparcv9-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9-mont.S" => + [ + "crypto/bn/asm/sparcv9-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9a-mont.S" => + [ + "crypto/bn/asm/sparcv9a-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/vis3-mont.S" => + [ + "crypto/bn/asm/vis3-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86-gf2m.s" => + [ + "crypto/bn/asm/x86-gf2m.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/x86-mont.s" => + [ + "crypto/bn/asm/x86-mont.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/x86_64-gf2m.s" => + [ + "crypto/bn/asm/x86_64-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86_64-mont.s" => + [ + "crypto/bn/asm/x86_64-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86_64-mont5.s" => + [ + "crypto/bn/asm/x86_64-mont5.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/buildinf.h" => + [ + "util/mkbuildinf.pl", + "\"\$(CC)", + "\$(LIB_CFLAGS)", + "\$(CPPFLAGS_Q)\"", + "\"\$(PLATFORM)\"", + ], + "crypto/camellia/cmll-x86.s" => + [ + "crypto/camellia/asm/cmll-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/camellia/cmll-x86_64.s" => + [ + "crypto/camellia/asm/cmll-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/camellia/cmllt4-sparcv9.S" => + [ + "crypto/camellia/asm/cmllt4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/cast/cast-586.s" => + [ + "crypto/cast/asm/cast-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/chacha/chacha-armv4.S" => + [ + "crypto/chacha/asm/chacha-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-armv8.S" => + [ + "crypto/chacha/asm/chacha-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-ppc.s" => + [ + "crypto/chacha/asm/chacha-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-s390x.S" => + [ + "crypto/chacha/asm/chacha-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-x86.s" => + [ + "crypto/chacha/asm/chacha-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/chacha/chacha-x86_64.s" => + [ + "crypto/chacha/asm/chacha-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/des/crypt586.s" => + [ + "crypto/des/asm/crypt586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/des/des-586.s" => + [ + "crypto/des/asm/des-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/des/des_enc-sparc.S" => + [ + "crypto/des/asm/des_enc.m4", + ], + "crypto/des/dest4-sparcv9.S" => + [ + "crypto/des/asm/dest4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-armv4.S" => + [ + "crypto/ec/asm/ecp_nistz256-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-armv8.S" => + [ + "crypto/ec/asm/ecp_nistz256-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-avx2.s" => + [ + "crypto/ec/asm/ecp_nistz256-avx2.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-ppc64.s" => + [ + "crypto/ec/asm/ecp_nistz256-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-sparcv9.S" => + [ + "crypto/ec/asm/ecp_nistz256-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-x86.s" => + [ + "crypto/ec/asm/ecp_nistz256-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/ec/ecp_nistz256-x86_64.s" => + [ + "crypto/ec/asm/ecp_nistz256-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/x25519-ppc64.s" => + [ + "crypto/ec/asm/x25519-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/x25519-x86_64.s" => + [ + "crypto/ec/asm/x25519-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ia64cpuid.s" => + [ + "crypto/ia64cpuid.S", + ], + "crypto/md5/md5-586.s" => + [ + "crypto/md5/asm/md5-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/md5/md5-sparcv9.S" => + [ + "crypto/md5/asm/md5-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/md5/md5-x86_64.s" => + [ + "crypto/md5/asm/md5-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/aesni-gcm-x86_64.s" => + [ + "crypto/modes/asm/aesni-gcm-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-alpha.S" => + [ + "crypto/modes/asm/ghash-alpha.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-armv4.S" => + [ + "crypto/modes/asm/ghash-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-ia64.s" => + [ + "crypto/modes/asm/ghash-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/modes/ghash-parisc.s" => + [ + "crypto/modes/asm/ghash-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-s390x.S" => + [ + "crypto/modes/asm/ghash-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-sparcv9.S" => + [ + "crypto/modes/asm/ghash-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-x86.s" => + [ + "crypto/modes/asm/ghash-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/modes/ghash-x86_64.s" => + [ + "crypto/modes/asm/ghash-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghashp8-ppc.s" => + [ + "crypto/modes/asm/ghashp8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghashv8-armx.S" => + [ + "crypto/modes/asm/ghashv8-armx.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/pariscid.s" => + [ + "crypto/pariscid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-armv4.S" => + [ + "crypto/poly1305/asm/poly1305-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-armv8.S" => + [ + "crypto/poly1305/asm/poly1305-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-mips.S" => + [ + "crypto/poly1305/asm/poly1305-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-ppc.s" => + [ + "crypto/poly1305/asm/poly1305-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-ppcfp.s" => + [ + "crypto/poly1305/asm/poly1305-ppcfp.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-s390x.S" => + [ + "crypto/poly1305/asm/poly1305-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-sparcv9.S" => + [ + "crypto/poly1305/asm/poly1305-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-x86.s" => + [ + "crypto/poly1305/asm/poly1305-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/poly1305/poly1305-x86_64.s" => + [ + "crypto/poly1305/asm/poly1305-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ppccpuid.s" => + [ + "crypto/ppccpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-586.s" => + [ + "crypto/rc4/asm/rc4-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/rc4/rc4-md5-x86_64.s" => + [ + "crypto/rc4/asm/rc4-md5-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-parisc.s" => + [ + "crypto/rc4/asm/rc4-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-s390x.s" => + [ + "crypto/rc4/asm/rc4-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-x86_64.s" => + [ + "crypto/rc4/asm/rc4-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ripemd/rmd-586.s" => + [ + "crypto/ripemd/asm/rmd-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/s390xcpuid.S" => + [ + "crypto/s390xcpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-armv4.S" => + [ + "crypto/sha/asm/keccak1600-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-armv8.S" => + [ + "crypto/sha/asm/keccak1600-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-ppc64.s" => + [ + "crypto/sha/asm/keccak1600-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-s390x.S" => + [ + "crypto/sha/asm/keccak1600-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-x86_64.s" => + [ + "crypto/sha/asm/keccak1600-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-586.s" => + [ + "crypto/sha/asm/sha1-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha1-alpha.S" => + [ + "crypto/sha/asm/sha1-alpha.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-armv4-large.S" => + [ + "crypto/sha/asm/sha1-armv4-large.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-armv8.S" => + [ + "crypto/sha/asm/sha1-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-ia64.s" => + [ + "crypto/sha/asm/sha1-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha1-mb-x86_64.s" => + [ + "crypto/sha/asm/sha1-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-mips.S" => + [ + "crypto/sha/asm/sha1-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-parisc.s" => + [ + "crypto/sha/asm/sha1-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-ppc.s" => + [ + "crypto/sha/asm/sha1-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-s390x.S" => + [ + "crypto/sha/asm/sha1-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-sparcv9.S" => + [ + "crypto/sha/asm/sha1-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-x86_64.s" => + [ + "crypto/sha/asm/sha1-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-586.s" => + [ + "crypto/sha/asm/sha256-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha256-armv4.S" => + [ + "crypto/sha/asm/sha256-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-armv8.S" => + [ + "crypto/sha/asm/sha512-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-ia64.s" => + [ + "crypto/sha/asm/sha512-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha256-mb-x86_64.s" => + [ + "crypto/sha/asm/sha256-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-mips.S" => + [ + "crypto/sha/asm/sha512-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-parisc.s" => + [ + "crypto/sha/asm/sha512-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-ppc.s" => + [ + "crypto/sha/asm/sha512-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-s390x.S" => + [ + "crypto/sha/asm/sha512-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-sparcv9.S" => + [ + "crypto/sha/asm/sha512-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-x86_64.s" => + [ + "crypto/sha/asm/sha512-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256p8-ppc.s" => + [ + "crypto/sha/asm/sha512p8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-586.s" => + [ + "crypto/sha/asm/sha512-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha512-armv4.S" => + [ + "crypto/sha/asm/sha512-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-armv8.S" => + [ + "crypto/sha/asm/sha512-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-ia64.s" => + [ + "crypto/sha/asm/sha512-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha512-mips.S" => + [ + "crypto/sha/asm/sha512-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-parisc.s" => + [ + "crypto/sha/asm/sha512-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-ppc.s" => + [ + "crypto/sha/asm/sha512-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-s390x.S" => + [ + "crypto/sha/asm/sha512-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-sparcv9.S" => + [ + "crypto/sha/asm/sha512-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-x86_64.s" => + [ + "crypto/sha/asm/sha512-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512p8-ppc.s" => + [ + "crypto/sha/asm/sha512p8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-ia64.s" => + [ + "ms/uplink-ia64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-x86.s" => + [ + "ms/uplink-x86.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-x86_64.s" => + [ + "ms/uplink-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/whrlpool/wp-mmx.s" => + [ + "crypto/whrlpool/asm/wp-mmx.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/whrlpool/wp-x86_64.s" => + [ + "crypto/whrlpool/asm/wp-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/x86_64cpuid.s" => + [ + "crypto/x86_64cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/x86cpuid.s" => + [ + "crypto/x86cpuid.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "engines/e_padlock-x86.s" => + [ + "engines/asm/e_padlock-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "engines/e_padlock-x86_64.s" => + [ + "engines/asm/e_padlock-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "include/crypto/bn_conf.h" => + [ + "include/crypto/bn_conf.h.in", + ], + "include/crypto/dso_conf.h" => + [ + "include/crypto/dso_conf.h.in", + ], + "include/openssl/opensslconf.h" => + [ + "include/openssl/opensslconf.h.in", + ], + "test/buildtest_aes.c" => + [ + "test/generate_buildtest.pl", + "aes", + ], + "test/buildtest_asn1.c" => + [ + "test/generate_buildtest.pl", + "asn1", + ], + "test/buildtest_asn1t.c" => + [ + "test/generate_buildtest.pl", + "asn1t", + ], + "test/buildtest_async.c" => + [ + "test/generate_buildtest.pl", + "async", + ], + "test/buildtest_bio.c" => + [ + "test/generate_buildtest.pl", + "bio", + ], + "test/buildtest_blowfish.c" => + [ + "test/generate_buildtest.pl", + "blowfish", + ], + "test/buildtest_bn.c" => + [ + "test/generate_buildtest.pl", + "bn", + ], + "test/buildtest_buffer.c" => + [ + "test/generate_buildtest.pl", + "buffer", + ], + "test/buildtest_camellia.c" => + [ + "test/generate_buildtest.pl", + "camellia", + ], + "test/buildtest_cast.c" => + [ + "test/generate_buildtest.pl", + "cast", + ], + "test/buildtest_cmac.c" => + [ + "test/generate_buildtest.pl", + "cmac", + ], + "test/buildtest_cms.c" => + [ + "test/generate_buildtest.pl", + "cms", + ], + "test/buildtest_conf.c" => + [ + "test/generate_buildtest.pl", + "conf", + ], + "test/buildtest_conf_api.c" => + [ + "test/generate_buildtest.pl", + "conf_api", + ], + "test/buildtest_crypto.c" => + [ + "test/generate_buildtest.pl", + "crypto", + ], + "test/buildtest_ct.c" => + [ + "test/generate_buildtest.pl", + "ct", + ], + "test/buildtest_des.c" => + [ + "test/generate_buildtest.pl", + "des", + ], + "test/buildtest_dh.c" => + [ + "test/generate_buildtest.pl", + "dh", + ], + "test/buildtest_dsa.c" => + [ + "test/generate_buildtest.pl", + "dsa", + ], + "test/buildtest_dtls1.c" => + [ + "test/generate_buildtest.pl", + "dtls1", + ], + "test/buildtest_e_os2.c" => + [ + "test/generate_buildtest.pl", + "e_os2", + ], + "test/buildtest_ebcdic.c" => + [ + "test/generate_buildtest.pl", + "ebcdic", + ], + "test/buildtest_ec.c" => + [ + "test/generate_buildtest.pl", + "ec", + ], + "test/buildtest_ecdh.c" => + [ + "test/generate_buildtest.pl", + "ecdh", + ], + "test/buildtest_ecdsa.c" => + [ + "test/generate_buildtest.pl", + "ecdsa", + ], + "test/buildtest_engine.c" => + [ + "test/generate_buildtest.pl", + "engine", + ], + "test/buildtest_evp.c" => + [ + "test/generate_buildtest.pl", + "evp", + ], + "test/buildtest_hmac.c" => + [ + "test/generate_buildtest.pl", + "hmac", + ], + "test/buildtest_idea.c" => + [ + "test/generate_buildtest.pl", + "idea", + ], + "test/buildtest_kdf.c" => + [ + "test/generate_buildtest.pl", + "kdf", + ], + "test/buildtest_lhash.c" => + [ + "test/generate_buildtest.pl", + "lhash", + ], + "test/buildtest_md4.c" => + [ + "test/generate_buildtest.pl", + "md4", + ], + "test/buildtest_md5.c" => + [ + "test/generate_buildtest.pl", + "md5", + ], + "test/buildtest_mdc2.c" => + [ + "test/generate_buildtest.pl", + "mdc2", + ], + "test/buildtest_modes.c" => + [ + "test/generate_buildtest.pl", + "modes", + ], + "test/buildtest_obj_mac.c" => + [ + "test/generate_buildtest.pl", + "obj_mac", + ], + "test/buildtest_objects.c" => + [ + "test/generate_buildtest.pl", + "objects", + ], + "test/buildtest_ocsp.c" => + [ + "test/generate_buildtest.pl", + "ocsp", + ], + "test/buildtest_opensslv.c" => + [ + "test/generate_buildtest.pl", + "opensslv", + ], + "test/buildtest_ossl_typ.c" => + [ + "test/generate_buildtest.pl", + "ossl_typ", + ], + "test/buildtest_pem.c" => + [ + "test/generate_buildtest.pl", + "pem", + ], + "test/buildtest_pem2.c" => + [ + "test/generate_buildtest.pl", + "pem2", + ], + "test/buildtest_pkcs12.c" => + [ + "test/generate_buildtest.pl", + "pkcs12", + ], + "test/buildtest_pkcs7.c" => + [ + "test/generate_buildtest.pl", + "pkcs7", + ], + "test/buildtest_rand.c" => + [ + "test/generate_buildtest.pl", + "rand", + ], + "test/buildtest_rand_drbg.c" => + [ + "test/generate_buildtest.pl", + "rand_drbg", + ], + "test/buildtest_rc2.c" => + [ + "test/generate_buildtest.pl", + "rc2", + ], + "test/buildtest_rc4.c" => + [ + "test/generate_buildtest.pl", + "rc4", + ], + "test/buildtest_ripemd.c" => + [ + "test/generate_buildtest.pl", + "ripemd", + ], + "test/buildtest_rsa.c" => + [ + "test/generate_buildtest.pl", + "rsa", + ], + "test/buildtest_safestack.c" => + [ + "test/generate_buildtest.pl", + "safestack", + ], + "test/buildtest_seed.c" => + [ + "test/generate_buildtest.pl", + "seed", + ], + "test/buildtest_sha.c" => + [ + "test/generate_buildtest.pl", + "sha", + ], + "test/buildtest_srp.c" => + [ + "test/generate_buildtest.pl", + "srp", + ], + "test/buildtest_srtp.c" => + [ + "test/generate_buildtest.pl", + "srtp", + ], + "test/buildtest_ssl.c" => + [ + "test/generate_buildtest.pl", + "ssl", + ], + "test/buildtest_ssl2.c" => + [ + "test/generate_buildtest.pl", + "ssl2", + ], + "test/buildtest_stack.c" => + [ + "test/generate_buildtest.pl", + "stack", + ], + "test/buildtest_store.c" => + [ + "test/generate_buildtest.pl", + "store", + ], + "test/buildtest_symhacks.c" => + [ + "test/generate_buildtest.pl", + "symhacks", + ], + "test/buildtest_tls1.c" => + [ + "test/generate_buildtest.pl", + "tls1", + ], + "test/buildtest_ts.c" => + [ + "test/generate_buildtest.pl", + "ts", + ], + "test/buildtest_txt_db.c" => + [ + "test/generate_buildtest.pl", + "txt_db", + ], + "test/buildtest_ui.c" => + [ + "test/generate_buildtest.pl", + "ui", + ], + "test/buildtest_whrlpool.c" => + [ + "test/generate_buildtest.pl", + "whrlpool", + ], + "test/buildtest_x509.c" => + [ + "test/generate_buildtest.pl", + "x509", + ], + "test/buildtest_x509_vfy.c" => + [ + "test/generate_buildtest.pl", + "x509_vfy", + ], + "test/buildtest_x509v3.c" => + [ + "test/generate_buildtest.pl", + "x509v3", + ], + }, + "includes" => + { + "apps/app_rand.o" => + [ + ".", + "include", + ], + "apps/apps.o" => + [ + ".", + "include", + ], + "apps/asn1pars.o" => + [ + ".", + "include", + "apps", + ], + "apps/bf_prefix.o" => + [ + ".", + "include", + ], + "apps/ca.o" => + [ + ".", + "include", + "apps", + ], + "apps/ciphers.o" => + [ + ".", + "include", + "apps", + ], + "apps/cms.o" => + [ + ".", + "include", + "apps", + ], + "apps/crl.o" => + [ + ".", + "include", + "apps", + ], + "apps/crl2p7.o" => + [ + ".", + "include", + "apps", + ], + "apps/dgst.o" => + [ + ".", + "include", + "apps", + ], + "apps/dhparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/dsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/dsaparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/ec.o" => + [ + ".", + "include", + "apps", + ], + "apps/ecparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/enc.o" => + [ + ".", + "include", + "apps", + ], + "apps/engine.o" => + [ + ".", + "include", + "apps", + ], + "apps/errstr.o" => + [ + ".", + "include", + "apps", + ], + "apps/gendsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/genpkey.o" => + [ + ".", + "include", + "apps", + ], + "apps/genrsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/nseq.o" => + [ + ".", + "include", + "apps", + ], + "apps/ocsp.o" => + [ + ".", + "include", + "apps", + ], + "apps/openssl.o" => + [ + ".", + "include", + "apps", + ], + "apps/opt.o" => + [ + ".", + "include", + ], + "apps/passwd.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs12.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs7.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs8.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkey.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkeyparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkeyutl.o" => + [ + ".", + "include", + "apps", + ], + "apps/prime.o" => + [ + ".", + "include", + "apps", + ], + "apps/progs.h" => + [ + ".", + ], + "apps/rand.o" => + [ + ".", + "include", + "apps", + ], + "apps/rehash.o" => + [ + ".", + "include", + "apps", + ], + "apps/req.o" => + [ + ".", + "include", + "apps", + ], + "apps/rsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/rsautl.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_cb.o" => + [ + ".", + "include", + ], + "apps/s_client.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_server.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_socket.o" => + [ + ".", + "include", + ], + "apps/s_time.o" => + [ + ".", + "include", + "apps", + ], + "apps/sess_id.o" => + [ + ".", + "include", + "apps", + ], + "apps/smime.o" => + [ + ".", + "include", + "apps", + ], + "apps/speed.o" => + [ + ".", + "include", + "apps", + ], + "apps/spkac.o" => + [ + ".", + "include", + "apps", + ], + "apps/srp.o" => + [ + ".", + "include", + "apps", + ], + "apps/storeutl.o" => + [ + ".", + "include", + "apps", + ], + "apps/ts.o" => + [ + ".", + "include", + "apps", + ], + "apps/verify.o" => + [ + ".", + "include", + "apps", + ], + "apps/version.o" => + [ + ".", + "include", + "apps", + ], + "apps/x509.o" => + [ + ".", + "include", + "apps", + ], + "crypto/aes/aes-armv4.o" => + [ + "crypto", + ], + "crypto/aes/aes-mips.o" => + [ + "crypto", + ], + "crypto/aes/aes-s390x.o" => + [ + "crypto", + ], + "crypto/aes/aes-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aes_cbc.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_cfb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_core.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ecb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ige.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_misc.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ofb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_wrap.o" => + [ + ".", + "include", + ], + "crypto/aes/aesfx-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aest4-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aesv8-armx.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/aes/bsaes-armv7.o" => + [ + "crypto", + ], + "crypto/aes/vpaes-armv8.o" => + [ + ".", + "include", + ], + "crypto/aria/aria.o" => + [ + ".", + "include", + ], + "crypto/arm64cpuid.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/armcap.o" => + [ + ".", + "include", + ], + "crypto/armv4cpuid.o" => + [ + "crypto", + ], + "crypto/asn1/a_bitstr.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_d2i_fp.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_digest.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_dup.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_gentm.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_i2d_fp.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_int.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_mbstr.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_object.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_octet.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_print.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_sign.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_strex.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_strnid.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_time.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_type.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_utctm.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_utf8.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_verify.o" => + [ + ".", + "include", + ], + "crypto/asn1/ameth_lib.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_err.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_gen.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_item_list.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_lib.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_par.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_mime.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_moid.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_mstbl.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_pack.o" => + [ + ".", + "include", + ], + "crypto/asn1/bio_asn1.o" => + [ + ".", + "include", + ], + "crypto/asn1/bio_ndef.o" => + [ + ".", + "include", + ], + "crypto/asn1/d2i_pr.o" => + [ + ".", + "include", + ], + "crypto/asn1/d2i_pu.o" => + [ + ".", + "include", + ], + "crypto/asn1/evp_asn1.o" => + [ + ".", + "include", + ], + "crypto/asn1/f_int.o" => + [ + ".", + "include", + ], + "crypto/asn1/f_string.o" => + [ + ".", + "include", + ], + "crypto/asn1/i2d_pr.o" => + [ + ".", + "include", + ], + "crypto/asn1/i2d_pu.o" => + [ + ".", + "include", + ], + "crypto/asn1/n_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/nsseq.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_pbe.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_pbev2.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_scrypt.o" => + [ + ".", + "include", + ], + "crypto/asn1/p8_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_bitst.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_spki.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_dec.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_enc.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_fre.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_new.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_prn.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_scn.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_typ.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_utl.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_algor.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_bignum.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_info.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_int64.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_long.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_sig.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_spki.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_val.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_null.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_posix.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_win.o" => + [ + ".", + "include", + ], + "crypto/async/async.o" => + [ + ".", + "include", + ], + "crypto/async/async_err.o" => + [ + ".", + "include", + ], + "crypto/async/async_wait.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_cfb64.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_ecb.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_enc.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_ofb64.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_skey.o" => + [ + ".", + "include", + ], + "crypto/bio/b_addr.o" => + [ + ".", + "include", + ], + "crypto/bio/b_dump.o" => + [ + ".", + "include", + ], + "crypto/bio/b_print.o" => + [ + ".", + "include", + ], + "crypto/bio/b_sock.o" => + [ + ".", + "include", + ], + "crypto/bio/b_sock2.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_buff.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_lbuf.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_nbio.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_null.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_cb.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_err.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_lib.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_meth.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_acpt.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_bio.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_conn.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_dgram.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_fd.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_file.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_log.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_mem.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_null.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_sock.o" => + [ + ".", + "include", + ], + "crypto/blake2/blake2b.o" => + [ + ".", + "include", + ], + "crypto/blake2/blake2s.o" => + [ + ".", + "include", + ], + "crypto/blake2/m_blake2b.o" => + [ + ".", + "include", + ], + "crypto/blake2/m_blake2s.o" => + [ + ".", + "include", + ], + "crypto/bn/armv4-gf2m.o" => + [ + "crypto", + ], + "crypto/bn/armv4-mont.o" => + [ + "crypto", + ], + "crypto/bn/armv8-mont.o" => + [ + ".", + "include", + ], + "crypto/bn/bn-mips.o" => + [ + "crypto", + ], + "crypto/bn/bn_add.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_asm.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_blind.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_const.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_ctx.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_depr.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_dh.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_div.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_err.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_exp.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/bn/bn_exp2.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_gcd.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_gf2m.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_intern.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_kron.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_lib.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mod.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mont.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mpi.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mul.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_nist.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_prime.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_print.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_rand.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_recp.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_shift.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_sqr.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_sqrt.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_srp.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_word.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_x931p.o" => + [ + ".", + "include", + ], + "crypto/bn/mips-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparct4-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9-gf2m.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9a-mont.o" => + [ + "crypto", + ], + "crypto/bn/vis3-mont.o" => + [ + "crypto", + ], + "crypto/buffer/buf_err.o" => + [ + ".", + "include", + ], + "crypto/buffer/buffer.o" => + [ + ".", + "include", + ], + "crypto/buildinf.h" => + [ + ".", + ], + "crypto/camellia/camellia.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_cbc.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_cfb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ctr.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ecb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_misc.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ofb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmllt4-sparcv9.o" => + [ + "crypto", + ], + "crypto/cast/c_cfb64.o" => + [ + ".", + "include", + ], + "crypto/cast/c_ecb.o" => + [ + ".", + "include", + ], + "crypto/cast/c_enc.o" => + [ + ".", + "include", + ], + "crypto/cast/c_ofb64.o" => + [ + ".", + "include", + ], + "crypto/cast/c_skey.o" => + [ + ".", + "include", + ], + "crypto/chacha/chacha-armv4.o" => + [ + "crypto", + ], + "crypto/chacha/chacha-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/chacha/chacha-s390x.o" => + [ + "crypto", + ], + "crypto/cmac/cm_ameth.o" => + [ + ".", + "include", + ], + "crypto/cmac/cm_pmeth.o" => + [ + ".", + "include", + ], + "crypto/cmac/cmac.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_asn1.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_att.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_cd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_dd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_enc.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_env.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_err.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_ess.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_io.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_kari.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_lib.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_pwri.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_sd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_smime.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_api.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_def.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_err.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_lib.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_mall.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_mod.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_sap.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_ssl.o" => + [ + ".", + "include", + ], + "crypto/cpt_err.o" => + [ + ".", + "include", + ], + "crypto/cryptlib.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_b64.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_err.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_log.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_oct.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_policy.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_prn.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_sct.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_sct_ctx.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_vfy.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_x509v3.o" => + [ + ".", + "include", + ], + "crypto/ctype.o" => + [ + ".", + "include", + ], + "crypto/cversion.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/des/cbc_cksm.o" => + [ + ".", + "include", + ], + "crypto/des/cbc_enc.o" => + [ + ".", + "include", + ], + "crypto/des/cfb64ede.o" => + [ + ".", + "include", + ], + "crypto/des/cfb64enc.o" => + [ + ".", + "include", + ], + "crypto/des/cfb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/des_enc.o" => + [ + ".", + "include", + ], + "crypto/des/dest4-sparcv9.o" => + [ + "crypto", + ], + "crypto/des/ecb3_enc.o" => + [ + ".", + "include", + ], + "crypto/des/ecb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/fcrypt.o" => + [ + ".", + "include", + ], + "crypto/des/fcrypt_b.o" => + [ + ".", + "include", + ], + "crypto/des/ofb64ede.o" => + [ + ".", + "include", + ], + "crypto/des/ofb64enc.o" => + [ + ".", + "include", + ], + "crypto/des/ofb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/pcbc_enc.o" => + [ + ".", + "include", + ], + "crypto/des/qud_cksm.o" => + [ + ".", + "include", + ], + "crypto/des/rand_key.o" => + [ + ".", + "include", + ], + "crypto/des/set_key.o" => + [ + ".", + "include", + ], + "crypto/des/str2key.o" => + [ + ".", + "include", + ], + "crypto/des/xcbc_enc.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_ameth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_asn1.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_check.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_depr.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_err.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_gen.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_kdf.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_key.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_lib.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_meth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_pmeth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_prn.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_rfc5114.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_rfc7919.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_ameth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_asn1.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_depr.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_err.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_gen.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_key.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_lib.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_meth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_pmeth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_prn.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_sign.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_vrf.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_dl.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_dlfcn.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_err.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_lib.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_openssl.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_vms.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_win32.o" => + [ + ".", + "include", + ], + "crypto/ebcdic.o" => + [ + ".", + "include", + ], + "crypto/ec/curve25519.o" => + [ + ".", + "include", + ], + "crypto/ec/curve448/arch_32/f_impl.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/curve448.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/curve448_tables.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/eddsa.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/f_generic.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/scalar.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/ec2_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ec2_smpl.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_ameth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_asn1.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_check.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_curve.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_cvt.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_err.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_key.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_kmeth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_lib.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_mult.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_pmeth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_print.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdh_kdf.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdh_ossl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_sign.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_vrf.o" => + [ + ".", + "include", + ], + "crypto/ec/eck_prn.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_mont.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nist.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp224.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp256.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp521.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistputil.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistz256-armv4.o" => + [ + "crypto", + ], + "crypto/ec/ecp_nistz256-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/ec/ecp_nistz256-sparcv9.o" => + [ + "crypto", + ], + "crypto/ec/ecp_nistz256.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_smpl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecx_meth.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_all.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_cnf.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_ctrl.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_dyn.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_err.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_fat.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_init.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_lib.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_list.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_openssl.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_pkey.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_rdrand.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_table.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_asnmth.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_cipher.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_dh.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_digest.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_dsa.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_eckey.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_pkmeth.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_rand.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_rsa.o" => + [ + ".", + "include", + ], + "crypto/err/err.o" => + [ + ".", + "include", + ], + "crypto/err/err_all.o" => + [ + ".", + "include", + ], + "crypto/err/err_prn.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_b64.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_md.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_ok.o" => + [ + ".", + "include", + ], + "crypto/evp/c_allc.o" => + [ + ".", + "include", + ], + "crypto/evp/c_alld.o" => + [ + ".", + "include", + ], + "crypto/evp/cmeth_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/digest.o" => + [ + ".", + "include", + ], + "crypto/evp/e_aes.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_aes_cbc_hmac_sha1.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/evp/e_aes_cbc_hmac_sha256.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/evp/e_aria.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_bf.o" => + [ + ".", + "include", + ], + "crypto/evp/e_camellia.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_cast.o" => + [ + ".", + "include", + ], + "crypto/evp/e_chacha20_poly1305.o" => + [ + ".", + "include", + ], + "crypto/evp/e_des.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/e_des3.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/e_idea.o" => + [ + ".", + "include", + ], + "crypto/evp/e_null.o" => + [ + ".", + "include", + ], + "crypto/evp/e_old.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc2.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc4.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc4_hmac_md5.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc5.o" => + [ + ".", + "include", + ], + "crypto/evp/e_seed.o" => + [ + ".", + "include", + ], + "crypto/evp/e_sm4.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_xcbc_d.o" => + [ + ".", + "include", + ], + "crypto/evp/encode.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_cnf.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_err.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_key.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_pbe.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_pkey.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md2.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md4.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md5.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md5_sha1.o" => + [ + ".", + "include", + ], + "crypto/evp/m_mdc2.o" => + [ + ".", + "include", + ], + "crypto/evp/m_null.o" => + [ + ".", + "include", + ], + "crypto/evp/m_ripemd.o" => + [ + ".", + "include", + ], + "crypto/evp/m_sha1.o" => + [ + ".", + "include", + ], + "crypto/evp/m_sha3.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/m_sigver.o" => + [ + ".", + "include", + ], + "crypto/evp/m_wp.o" => + [ + ".", + "include", + ], + "crypto/evp/names.o" => + [ + ".", + "include", + ], + "crypto/evp/p5_crpt.o" => + [ + ".", + "include", + ], + "crypto/evp/p5_crpt2.o" => + [ + ".", + "include", + ], + "crypto/evp/p_dec.o" => + [ + ".", + "include", + ], + "crypto/evp/p_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/p_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/p_open.o" => + [ + ".", + "include", + ], + "crypto/evp/p_seal.o" => + [ + ".", + "include", + ], + "crypto/evp/p_sign.o" => + [ + ".", + "include", + ], + "crypto/evp/p_verify.o" => + [ + ".", + "include", + ], + "crypto/evp/pbe_scrypt.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_fn.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_gn.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_lib.o" => + [ + ".", + "include", + ], + "crypto/ex_data.o" => + [ + ".", + "include", + ], + "crypto/getenv.o" => + [ + ".", + "include", + ], + "crypto/hmac/hm_ameth.o" => + [ + ".", + "include", + ], + "crypto/hmac/hm_pmeth.o" => + [ + ".", + "include", + ], + "crypto/hmac/hmac.o" => + [ + ".", + "include", + ], + "crypto/idea/i_cbc.o" => + [ + ".", + "include", + ], + "crypto/idea/i_cfb64.o" => + [ + ".", + "include", + ], + "crypto/idea/i_ecb.o" => + [ + ".", + "include", + ], + "crypto/idea/i_ofb64.o" => + [ + ".", + "include", + ], + "crypto/idea/i_skey.o" => + [ + ".", + "include", + ], + "crypto/init.o" => + [ + ".", + "include", + ], + "crypto/kdf/hkdf.o" => + [ + ".", + "include", + ], + "crypto/kdf/kdf_err.o" => + [ + ".", + "include", + ], + "crypto/kdf/scrypt.o" => + [ + ".", + "include", + ], + "crypto/kdf/tls1_prf.o" => + [ + ".", + "include", + ], + "crypto/lhash/lh_stats.o" => + [ + ".", + "include", + ], + "crypto/lhash/lhash.o" => + [ + ".", + "include", + ], + "crypto/md4/md4_dgst.o" => + [ + ".", + "include", + ], + "crypto/md4/md4_one.o" => + [ + ".", + "include", + ], + "crypto/md5/md5-sparcv9.o" => + [ + "crypto", + ], + "crypto/md5/md5_dgst.o" => + [ + ".", + "include", + ], + "crypto/md5/md5_one.o" => + [ + ".", + "include", + ], + "crypto/mdc2/mdc2_one.o" => + [ + ".", + "include", + ], + "crypto/mdc2/mdc2dgst.o" => + [ + ".", + "include", + ], + "crypto/mem.o" => + [ + ".", + "include", + ], + "crypto/mem_dbg.o" => + [ + ".", + "include", + ], + "crypto/mem_sec.o" => + [ + ".", + "include", + ], + "crypto/modes/cbc128.o" => + [ + ".", + "include", + ], + "crypto/modes/ccm128.o" => + [ + ".", + "include", + ], + "crypto/modes/cfb128.o" => + [ + ".", + "include", + ], + "crypto/modes/ctr128.o" => + [ + ".", + "include", + ], + "crypto/modes/cts128.o" => + [ + ".", + "include", + ], + "crypto/modes/gcm128.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/modes/ghash-armv4.o" => + [ + "crypto", + ], + "crypto/modes/ghash-s390x.o" => + [ + "crypto", + ], + "crypto/modes/ghash-sparcv9.o" => + [ + "crypto", + ], + "crypto/modes/ghashv8-armx.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/modes/ocb128.o" => + [ + ".", + "include", + ], + "crypto/modes/ofb128.o" => + [ + ".", + "include", + ], + "crypto/modes/wrap128.o" => + [ + ".", + "include", + ], + "crypto/modes/xts128.o" => + [ + ".", + "include", + ], + "crypto/o_dir.o" => + [ + ".", + "include", + ], + "crypto/o_fips.o" => + [ + ".", + "include", + ], + "crypto/o_fopen.o" => + [ + ".", + "include", + ], + "crypto/o_init.o" => + [ + ".", + "include", + ], + "crypto/o_str.o" => + [ + ".", + "include", + ], + "crypto/o_time.o" => + [ + ".", + "include", + ], + "crypto/objects/o_names.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_dat.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_err.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_lib.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_xref.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_asn.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_cl.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_err.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_ext.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_ht.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_lib.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_prn.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_srv.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_vfy.o" => + [ + ".", + "include", + ], + "crypto/ocsp/v3_ocsp.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_all.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_err.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_info.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_lib.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_oth.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_pk8.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_pkey.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_sign.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_x509.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_xaux.o" => + [ + ".", + "include", + ], + "crypto/pem/pvkfmt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_add.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_asn.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_attr.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_crpt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_crt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_decr.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_init.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_key.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_kiss.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_mutl.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_npas.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_p8d.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_p8e.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_sbag.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_utl.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/pk12err.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/bio_pk7.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_asn1.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_attr.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_doit.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_lib.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_mime.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_smime.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pkcs7err.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305-armv4.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/poly1305/poly1305-mips.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305-sparcv9.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305_ameth.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305_pmeth.o" => + [ + ".", + "include", + ], + "crypto/rand/drbg_ctr.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/rand/drbg_lib.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_egd.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_err.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_lib.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_unix.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_vms.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_win.o" => + [ + ".", + "include", + ], + "crypto/rand/randfile.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_cbc.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_ecb.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_skey.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2cfb64.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2ofb64.o" => + [ + ".", + "include", + ], + "crypto/rc4/rc4_enc.o" => + [ + ".", + "include", + ], + "crypto/rc4/rc4_skey.o" => + [ + ".", + "include", + ], + "crypto/ripemd/rmd_dgst.o" => + [ + ".", + "include", + ], + "crypto/ripemd/rmd_one.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ameth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_asn1.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_chk.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_crpt.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_depr.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_err.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_gen.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_lib.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_meth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_mp.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_none.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_oaep.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pk1.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pmeth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_prn.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pss.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_saos.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_sign.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ssl.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_x931.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_x931g.o" => + [ + ".", + "include", + ], + "crypto/s390xcpuid.o" => + [ + "crypto", + ], + "crypto/seed/seed.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_cbc.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_cfb.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_ecb.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_ofb.o" => + [ + ".", + "include", + ], + "crypto/sha/keccak1600-armv4.o" => + [ + "crypto", + ], + "crypto/sha/keccak1600-armv8.o" => + [ + ".", + "include", + ], + "crypto/sha/sha1-armv4-large.o" => + [ + "crypto", + ], + "crypto/sha/sha1-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/sha/sha1-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha1-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha1-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha1_one.o" => + [ + ".", + "include", + ], + "crypto/sha/sha1dgst.o" => + [ + ".", + "include", + ], + "crypto/sha/sha256-armv4.o" => + [ + "crypto", + ], + "crypto/sha/sha256-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/sha/sha256-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha256-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha256-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha256.o" => + [ + ".", + "include", + ], + "crypto/sha/sha512-armv4.o" => + [ + "crypto", + ], + "crypto/sha/sha512-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/sha/sha512-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha512-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha512-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha512.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash_ameth.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash_pmeth.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_crypt.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_err.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_pmeth.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_sign.o" => + [ + ".", + "include", + ], + "crypto/sm3/m_sm3.o" => + [ + ".", + "include", + ], + "crypto/sm3/sm3.o" => + [ + ".", + "include", + ], + "crypto/sm4/sm4.o" => + [ + ".", + "include", + ], + "crypto/srp/srp_lib.o" => + [ + ".", + "include", + ], + "crypto/srp/srp_vfy.o" => + [ + ".", + "include", + ], + "crypto/stack/stack.o" => + [ + ".", + "include", + ], + "crypto/store/loader_file.o" => + [ + ".", + "include", + ], + "crypto/store/store_err.o" => + [ + ".", + "include", + ], + "crypto/store/store_init.o" => + [ + ".", + "include", + ], + "crypto/store/store_lib.o" => + [ + ".", + "include", + ], + "crypto/store/store_register.o" => + [ + ".", + "include", + ], + "crypto/store/store_strings.o" => + [ + ".", + "include", + ], + "crypto/threads_none.o" => + [ + ".", + "include", + ], + "crypto/threads_pthread.o" => + [ + ".", + "include", + ], + "crypto/threads_win.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_asn1.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_conf.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_err.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_lib.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_req_print.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_req_utils.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_print.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_sign.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_utils.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_verify.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_verify_ctx.o" => + [ + ".", + "include", + ], + "crypto/txt_db/txt_db.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_err.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_lib.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_null.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_openssl.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_util.o" => + [ + ".", + "include", + ], + "crypto/uid.o" => + [ + ".", + "include", + ], + "crypto/whrlpool/wp_block.o" => + [ + ".", + "include", + ], + "crypto/whrlpool/wp_dgst.o" => + [ + ".", + "include", + ], + "crypto/x509/by_dir.o" => + [ + ".", + "include", + ], + "crypto/x509/by_file.o" => + [ + ".", + "include", + ], + "crypto/x509/t_crl.o" => + [ + ".", + "include", + ], + "crypto/x509/t_req.o" => + [ + ".", + "include", + ], + "crypto/x509/t_x509.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_att.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_cmp.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_d2.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_def.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_err.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_ext.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_lu.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_meth.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_obj.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_r2x.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_req.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_set.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_trs.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_txt.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_v3.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_vfy.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_vpm.o" => + [ + ".", + "include", + ], + "crypto/x509/x509cset.o" => + [ + ".", + "include", + ], + "crypto/x509/x509name.o" => + [ + ".", + "include", + ], + "crypto/x509/x509rset.o" => + [ + ".", + "include", + ], + "crypto/x509/x509spki.o" => + [ + ".", + "include", + ], + "crypto/x509/x509type.o" => + [ + ".", + "include", + ], + "crypto/x509/x_all.o" => + [ + ".", + "include", + ], + "crypto/x509/x_attrib.o" => + [ + ".", + "include", + ], + "crypto/x509/x_crl.o" => + [ + ".", + "include", + ], + "crypto/x509/x_exten.o" => + [ + ".", + "include", + ], + "crypto/x509/x_name.o" => + [ + ".", + "include", + ], + "crypto/x509/x_pubkey.o" => + [ + ".", + "include", + ], + "crypto/x509/x_req.o" => + [ + ".", + "include", + ], + "crypto/x509/x_x509.o" => + [ + ".", + "include", + ], + "crypto/x509/x_x509a.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_cache.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_data.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_lib.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_map.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_node.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_tree.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_addr.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_admis.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_akey.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_akeya.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_alt.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_asid.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_bcons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_bitst.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_conf.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_cpols.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_crld.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_enum.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_extku.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_genn.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_ia5.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_info.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_int.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_lib.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_ncons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pci.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pcia.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pcons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pku.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pmaps.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_prn.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_purp.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_skey.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_sxnet.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_tlsf.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_utl.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3err.o" => + [ + ".", + "include", + ], + "engines/e_capi.o" => + [ + ".", + "include", + ], + "engines/e_padlock.o" => + [ + ".", + "include", + ], + "fuzz/asn1.o" => + [ + "include", + ], + "fuzz/asn1parse.o" => + [ + "include", + ], + "fuzz/bignum.o" => + [ + "include", + ], + "fuzz/bndiv.o" => + [ + "include", + ], + "fuzz/client.o" => + [ + "include", + ], + "fuzz/cms.o" => + [ + "include", + ], + "fuzz/conf.o" => + [ + "include", + ], + "fuzz/crl.o" => + [ + "include", + ], + "fuzz/ct.o" => + [ + "include", + ], + "fuzz/server.o" => + [ + "include", + ], + "fuzz/test-corpus.o" => + [ + "include", + ], + "fuzz/x509.o" => + [ + "include", + ], + "include/crypto/bn_conf.h" => + [ + ".", + ], + "include/crypto/dso_conf.h" => + [ + ".", + ], + "include/openssl/opensslconf.h" => + [ + ".", + ], + "ssl/bio_ssl.o" => + [ + ".", + "include", + ], + "ssl/d1_lib.o" => + [ + ".", + "include", + ], + "ssl/d1_msg.o" => + [ + ".", + "include", + ], + "ssl/d1_srtp.o" => + [ + ".", + "include", + ], + "ssl/methods.o" => + [ + ".", + "include", + ], + "ssl/packet.o" => + [ + ".", + "include", + ], + "ssl/pqueue.o" => + [ + ".", + "include", + ], + "ssl/record/dtls1_bitmap.o" => + [ + ".", + "include", + ], + "ssl/record/rec_layer_d1.o" => + [ + ".", + "include", + ], + "ssl/record/rec_layer_s3.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_buffer.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_record.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_record_tls13.o" => + [ + ".", + "include", + ], + "ssl/s3_cbc.o" => + [ + ".", + "include", + ], + "ssl/s3_enc.o" => + [ + ".", + "include", + ], + "ssl/s3_lib.o" => + [ + ".", + "include", + ], + "ssl/s3_msg.o" => + [ + ".", + "include", + ], + "ssl/ssl_asn1.o" => + [ + ".", + "include", + ], + "ssl/ssl_cert.o" => + [ + ".", + "include", + ], + "ssl/ssl_ciph.o" => + [ + ".", + "include", + ], + "ssl/ssl_conf.o" => + [ + ".", + "include", + ], + "ssl/ssl_err.o" => + [ + ".", + "include", + ], + "ssl/ssl_init.o" => + [ + ".", + "include", + ], + "ssl/ssl_lib.o" => + [ + ".", + "include", + ], + "ssl/ssl_mcnf.o" => + [ + ".", + "include", + ], + "ssl/ssl_rsa.o" => + [ + ".", + "include", + ], + "ssl/ssl_sess.o" => + [ + ".", + "include", + ], + "ssl/ssl_stat.o" => + [ + ".", + "include", + ], + "ssl/ssl_txt.o" => + [ + ".", + "include", + ], + "ssl/ssl_utst.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_clnt.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_cust.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_srvr.o" => + [ + ".", + "include", + ], + "ssl/statem/statem.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_clnt.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_dtls.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_lib.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_srvr.o" => + [ + ".", + "include", + ], + "ssl/t1_enc.o" => + [ + ".", + "include", + ], + "ssl/t1_lib.o" => + [ + ".", + "include", + ], + "ssl/t1_trce.o" => + [ + ".", + "include", + ], + "ssl/tls13_enc.o" => + [ + ".", + "include", + ], + "ssl/tls_srp.o" => + [ + ".", + "include", + ], + "test/aborttest.o" => + [ + "include", + ], + "test/afalgtest.o" => + [ + "include", + ], + "test/asn1_decode_test.o" => + [ + "include", + ], + "test/asn1_encode_test.o" => + [ + "include", + ], + "test/asn1_internal_test.o" => + [ + ".", + "include", + ], + "test/asn1_string_table_test.o" => + [ + "include", + ], + "test/asn1_time_test.o" => + [ + "include", + ], + "test/asynciotest.o" => + [ + "include", + ], + "test/asynctest.o" => + [ + "include", + ], + "test/bad_dtls_test.o" => + [ + "include", + ], + "test/bftest.o" => + [ + "include", + ], + "test/bio_callback_test.o" => + [ + "include", + ], + "test/bio_enc_test.o" => + [ + "include", + ], + "test/bio_memleak_test.o" => + [ + "include", + ], + "test/bioprinttest.o" => + [ + "include", + ], + "test/bntest.o" => + [ + "include", + ], + "test/buildtest_aes.o" => + [ + "include", + ], + "test/buildtest_asn1.o" => + [ + "include", + ], + "test/buildtest_asn1t.o" => + [ + "include", + ], + "test/buildtest_async.o" => + [ + "include", + ], + "test/buildtest_bio.o" => + [ + "include", + ], + "test/buildtest_blowfish.o" => + [ + "include", + ], + "test/buildtest_bn.o" => + [ + "include", + ], + "test/buildtest_buffer.o" => + [ + "include", + ], + "test/buildtest_camellia.o" => + [ + "include", + ], + "test/buildtest_cast.o" => + [ + "include", + ], + "test/buildtest_cmac.o" => + [ + "include", + ], + "test/buildtest_cms.o" => + [ + "include", + ], + "test/buildtest_conf.o" => + [ + "include", + ], + "test/buildtest_conf_api.o" => + [ + "include", + ], + "test/buildtest_crypto.o" => + [ + "include", + ], + "test/buildtest_ct.o" => + [ + "include", + ], + "test/buildtest_des.o" => + [ + "include", + ], + "test/buildtest_dh.o" => + [ + "include", + ], + "test/buildtest_dsa.o" => + [ + "include", + ], + "test/buildtest_dtls1.o" => + [ + "include", + ], + "test/buildtest_e_os2.o" => + [ + "include", + ], + "test/buildtest_ebcdic.o" => + [ + "include", + ], + "test/buildtest_ec.o" => + [ + "include", + ], + "test/buildtest_ecdh.o" => + [ + "include", + ], + "test/buildtest_ecdsa.o" => + [ + "include", + ], + "test/buildtest_engine.o" => + [ + "include", + ], + "test/buildtest_evp.o" => + [ + "include", + ], + "test/buildtest_hmac.o" => + [ + "include", + ], + "test/buildtest_idea.o" => + [ + "include", + ], + "test/buildtest_kdf.o" => + [ + "include", + ], + "test/buildtest_lhash.o" => + [ + "include", + ], + "test/buildtest_md4.o" => + [ + "include", + ], + "test/buildtest_md5.o" => + [ + "include", + ], + "test/buildtest_mdc2.o" => + [ + "include", + ], + "test/buildtest_modes.o" => + [ + "include", + ], + "test/buildtest_obj_mac.o" => + [ + "include", + ], + "test/buildtest_objects.o" => + [ + "include", + ], + "test/buildtest_ocsp.o" => + [ + "include", + ], + "test/buildtest_opensslv.o" => + [ + "include", + ], + "test/buildtest_ossl_typ.o" => + [ + "include", + ], + "test/buildtest_pem.o" => + [ + "include", + ], + "test/buildtest_pem2.o" => + [ + "include", + ], + "test/buildtest_pkcs12.o" => + [ + "include", + ], + "test/buildtest_pkcs7.o" => + [ + "include", + ], + "test/buildtest_rand.o" => + [ + "include", + ], + "test/buildtest_rand_drbg.o" => + [ + "include", + ], + "test/buildtest_rc2.o" => + [ + "include", + ], + "test/buildtest_rc4.o" => + [ + "include", + ], + "test/buildtest_ripemd.o" => + [ + "include", + ], + "test/buildtest_rsa.o" => + [ + "include", + ], + "test/buildtest_safestack.o" => + [ + "include", + ], + "test/buildtest_seed.o" => + [ + "include", + ], + "test/buildtest_sha.o" => + [ + "include", + ], + "test/buildtest_srp.o" => + [ + "include", + ], + "test/buildtest_srtp.o" => + [ + "include", + ], + "test/buildtest_ssl.o" => + [ + "include", + ], + "test/buildtest_ssl2.o" => + [ + "include", + ], + "test/buildtest_stack.o" => + [ + "include", + ], + "test/buildtest_store.o" => + [ + "include", + ], + "test/buildtest_symhacks.o" => + [ + "include", + ], + "test/buildtest_tls1.o" => + [ + "include", + ], + "test/buildtest_ts.o" => + [ + "include", + ], + "test/buildtest_txt_db.o" => + [ + "include", + ], + "test/buildtest_ui.o" => + [ + "include", + ], + "test/buildtest_whrlpool.o" => + [ + "include", + ], + "test/buildtest_x509.o" => + [ + "include", + ], + "test/buildtest_x509_vfy.o" => + [ + "include", + ], + "test/buildtest_x509v3.o" => + [ + "include", + ], + "test/casttest.o" => + [ + "include", + ], + "test/chacha_internal_test.o" => + [ + ".", + "include", + ], + "test/cipher_overhead_test.o" => + [ + ".", + "include", + ], + "test/cipherbytes_test.o" => + [ + "include", + ], + "test/cipherlist_test.o" => + [ + "include", + ], + "test/ciphername_test.o" => + [ + "include", + ], + "test/clienthellotest.o" => + [ + "include", + ], + "test/cmactest.o" => + [ + "include", + ], + "test/cmsapitest.o" => + [ + "include", + ], + "test/conf_include_test.o" => + [ + "include", + ], + "test/constant_time_test.o" => + [ + "include", + ], + "test/crltest.o" => + [ + "include", + ], + "test/ct_test.o" => + [ + "include", + ], + "test/ctype_internal_test.o" => + [ + ".", + "include", + ], + "test/curve448_internal_test.o" => + [ + ".", + "include", + "crypto/ec/curve448", + ], + "test/d2i_test.o" => + [ + "include", + ], + "test/danetest.o" => + [ + "include", + ], + "test/destest.o" => + [ + "include", + ], + "test/dhtest.o" => + [ + "include", + ], + "test/drbg_cavs_data.o" => + [ + "include", + "test", + ".", + ], + "test/drbg_cavs_test.o" => + [ + "include", + "test", + ".", + ], + "test/drbgtest.o" => + [ + "include", + ], + "test/dsa_no_digest_size_test.o" => + [ + "include", + ], + "test/dsatest.o" => + [ + "include", + ], + "test/dtls_mtu_test.o" => + [ + ".", + "include", + ], + "test/dtlstest.o" => + [ + "include", + ], + "test/dtlsv1listentest.o" => + [ + "include", + ], + "test/ec_internal_test.o" => + [ + "include", + "crypto/ec", + ], + "test/ecdsatest.o" => + [ + "include", + ], + "test/ecstresstest.o" => + [ + "include", + ], + "test/ectest.o" => + [ + "include", + ], + "test/enginetest.o" => + [ + "include", + ], + "test/errtest.o" => + [ + "include", + ], + "test/evp_extra_test.o" => + [ + "include", + ], + "test/evp_test.o" => + [ + "include", + ], + "test/exdatatest.o" => + [ + "include", + ], + "test/exptest.o" => + [ + "include", + ], + "test/fatalerrtest.o" => + [ + "include", + ], + "test/gmdifftest.o" => + [ + "include", + ], + "test/gosttest.o" => + [ + "include", + ".", + ], + "test/handshake_helper.o" => + [ + ".", + "include", + ], + "test/hmactest.o" => + [ + "include", + ], + "test/ideatest.o" => + [ + "include", + ], + "test/igetest.o" => + [ + "include", + ], + "test/lhash_test.o" => + [ + "include", + ], + "test/md2test.o" => + [ + "include", + ], + "test/mdc2_internal_test.o" => + [ + ".", + "include", + ], + "test/mdc2test.o" => + [ + "include", + ], + "test/memleaktest.o" => + [ + "include", + ], + "test/modes_internal_test.o" => + [ + ".", + "include", + ], + "test/ocspapitest.o" => + [ + "include", + ], + "test/packettest.o" => + [ + "include", + ], + "test/pbelutest.o" => + [ + "include", + ], + "test/pemtest.o" => + [ + "include", + ], + "test/pkey_meth_kdf_test.o" => + [ + "include", + ], + "test/pkey_meth_test.o" => + [ + "include", + ], + "test/poly1305_internal_test.o" => + [ + ".", + "include", + ], + "test/rc2test.o" => + [ + "include", + ], + "test/rc4test.o" => + [ + "include", + ], + "test/rc5test.o" => + [ + "include", + ], + "test/rdrand_sanitytest.o" => + [ + "include", + ], + "test/recordlentest.o" => + [ + "include", + ], + "test/rsa_complex.o" => + [ + "include", + ], + "test/rsa_mp_test.o" => + [ + "include", + ], + "test/rsa_test.o" => + [ + "include", + ], + "test/sanitytest.o" => + [ + "include", + ], + "test/secmemtest.o" => + [ + "include", + ], + "test/servername_test.o" => + [ + "include", + ], + "test/siphash_internal_test.o" => + [ + ".", + "include", + ], + "test/sm2_internal_test.o" => + [ + "include", + ], + "test/sm4_internal_test.o" => + [ + ".", + "include", + ], + "test/srptest.o" => + [ + "include", + ], + "test/ssl_cert_table_internal_test.o" => + [ + ".", + "include", + ], + "test/ssl_ctx_test.o" => + [ + "include", + ], + "test/ssl_test.o" => + [ + "include", + ], + "test/ssl_test_ctx.o" => + [ + "include", + ], + "test/ssl_test_ctx_test.o" => + [ + "include", + ], + "test/sslapitest.o" => + [ + "include", + ".", + ], + "test/sslbuffertest.o" => + [ + "include", + ], + "test/sslcorrupttest.o" => + [ + "include", + ], + "test/ssltest_old.o" => + [ + ".", + "include", + ], + "test/ssltestlib.o" => + [ + ".", + "include", + ], + "test/stack_test.o" => + [ + "include", + ], + "test/sysdefaulttest.o" => + [ + "include", + ], + "test/test_test.o" => + [ + "include", + ], + "test/testutil/basic_output.o" => + [ + "include", + ], + "test/testutil/cb.o" => + [ + "include", + ], + "test/testutil/driver.o" => + [ + "include", + ], + "test/testutil/format_output.o" => + [ + "include", + ], + "test/testutil/main.o" => + [ + "include", + ], + "test/testutil/output_helpers.o" => + [ + "include", + ], + "test/testutil/random.o" => + [ + "include", + ], + "test/testutil/stanza.o" => + [ + "include", + ], + "test/testutil/tap_bio.o" => + [ + "include", + ], + "test/testutil/test_cleanup.o" => + [ + "include", + ], + "test/testutil/tests.o" => + [ + "include", + ], + "test/testutil/testutil_init.o" => + [ + "include", + ], + "test/threadstest.o" => + [ + "include", + ], + "test/time_offset_test.o" => + [ + "include", + ], + "test/tls13ccstest.o" => + [ + "include", + ], + "test/tls13encryptiontest.o" => + [ + ".", + "include", + ], + "test/uitest.o" => + [ + ".", + "include", + "apps", + ], + "test/v3ext.o" => + [ + "include", + ], + "test/v3nametest.o" => + [ + "include", + ], + "test/verify_extra_test.o" => + [ + "include", + ], + "test/versions.o" => + [ + "include", + ], + "test/wpackettest.o" => + [ + "include", + ], + "test/x509_check_cert_pkey_test.o" => + [ + "include", + ], + "test/x509_dup_cert_test.o" => + [ + "include", + ], + "test/x509_internal_test.o" => + [ + ".", + "include", + ], + "test/x509_time_test.o" => + [ + "include", + ], + "test/x509aux.o" => + [ + "include", + ], + }, + "install" => + { + "libraries" => + [ + "libcrypto", + "libssl", + ], + "programs" => + [ + "apps/openssl", + ], + "scripts" => + [ + "apps/CA.pl", + "apps/tsget.pl", + "tools/c_rehash", + ], + }, + "ldadd" => + { + }, + "libraries" => + [ + "apps/libapps.a", + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "overrides" => + [ + ], + "programs" => + [ + "apps/openssl", + "fuzz/asn1-test", + "fuzz/asn1parse-test", + "fuzz/bignum-test", + "fuzz/bndiv-test", + "fuzz/client-test", + "fuzz/cms-test", + "fuzz/conf-test", + "fuzz/crl-test", + "fuzz/ct-test", + "fuzz/server-test", + "fuzz/x509-test", + "test/aborttest", + "test/afalgtest", + "test/asn1_decode_test", + "test/asn1_encode_test", + "test/asn1_internal_test", + "test/asn1_string_table_test", + "test/asn1_time_test", + "test/asynciotest", + "test/asynctest", + "test/bad_dtls_test", + "test/bftest", + "test/bio_callback_test", + "test/bio_enc_test", + "test/bio_memleak_test", + "test/bioprinttest", + "test/bntest", + "test/buildtest_c_aes", + "test/buildtest_c_asn1", + "test/buildtest_c_asn1t", + "test/buildtest_c_async", + "test/buildtest_c_bio", + "test/buildtest_c_blowfish", + "test/buildtest_c_bn", + "test/buildtest_c_buffer", + "test/buildtest_c_camellia", + "test/buildtest_c_cast", + "test/buildtest_c_cmac", + "test/buildtest_c_cms", + "test/buildtest_c_conf", + "test/buildtest_c_conf_api", + "test/buildtest_c_crypto", + "test/buildtest_c_ct", + "test/buildtest_c_des", + "test/buildtest_c_dh", + "test/buildtest_c_dsa", + "test/buildtest_c_dtls1", + "test/buildtest_c_e_os2", + "test/buildtest_c_ebcdic", + "test/buildtest_c_ec", + "test/buildtest_c_ecdh", + "test/buildtest_c_ecdsa", + "test/buildtest_c_engine", + "test/buildtest_c_evp", + "test/buildtest_c_hmac", + "test/buildtest_c_idea", + "test/buildtest_c_kdf", + "test/buildtest_c_lhash", + "test/buildtest_c_md4", + "test/buildtest_c_md5", + "test/buildtest_c_mdc2", + "test/buildtest_c_modes", + "test/buildtest_c_obj_mac", + "test/buildtest_c_objects", + "test/buildtest_c_ocsp", + "test/buildtest_c_opensslv", + "test/buildtest_c_ossl_typ", + "test/buildtest_c_pem", + "test/buildtest_c_pem2", + "test/buildtest_c_pkcs12", + "test/buildtest_c_pkcs7", + "test/buildtest_c_rand", + "test/buildtest_c_rand_drbg", + "test/buildtest_c_rc2", + "test/buildtest_c_rc4", + "test/buildtest_c_ripemd", + "test/buildtest_c_rsa", + "test/buildtest_c_safestack", + "test/buildtest_c_seed", + "test/buildtest_c_sha", + "test/buildtest_c_srp", + "test/buildtest_c_srtp", + "test/buildtest_c_ssl", + "test/buildtest_c_ssl2", + "test/buildtest_c_stack", + "test/buildtest_c_store", + "test/buildtest_c_symhacks", + "test/buildtest_c_tls1", + "test/buildtest_c_ts", + "test/buildtest_c_txt_db", + "test/buildtest_c_ui", + "test/buildtest_c_whrlpool", + "test/buildtest_c_x509", + "test/buildtest_c_x509_vfy", + "test/buildtest_c_x509v3", + "test/casttest", + "test/chacha_internal_test", + "test/cipher_overhead_test", + "test/cipherbytes_test", + "test/cipherlist_test", + "test/ciphername_test", + "test/clienthellotest", + "test/cmactest", + "test/cmsapitest", + "test/conf_include_test", + "test/constant_time_test", + "test/crltest", + "test/ct_test", + "test/ctype_internal_test", + "test/curve448_internal_test", + "test/d2i_test", + "test/danetest", + "test/destest", + "test/dhtest", + "test/drbg_cavs_test", + "test/drbgtest", + "test/dsa_no_digest_size_test", + "test/dsatest", + "test/dtls_mtu_test", + "test/dtlstest", + "test/dtlsv1listentest", + "test/ec_internal_test", + "test/ecdsatest", + "test/ecstresstest", + "test/ectest", + "test/enginetest", + "test/errtest", + "test/evp_extra_test", + "test/evp_test", + "test/exdatatest", + "test/exptest", + "test/fatalerrtest", + "test/gmdifftest", + "test/gosttest", + "test/hmactest", + "test/ideatest", + "test/igetest", + "test/lhash_test", + "test/md2test", + "test/mdc2_internal_test", + "test/mdc2test", + "test/memleaktest", + "test/modes_internal_test", + "test/ocspapitest", + "test/packettest", + "test/pbelutest", + "test/pemtest", + "test/pkey_meth_kdf_test", + "test/pkey_meth_test", + "test/poly1305_internal_test", + "test/rc2test", + "test/rc4test", + "test/rc5test", + "test/rdrand_sanitytest", + "test/recordlentest", + "test/rsa_complex", + "test/rsa_mp_test", + "test/rsa_test", + "test/sanitytest", + "test/secmemtest", + "test/servername_test", + "test/siphash_internal_test", + "test/sm2_internal_test", + "test/sm4_internal_test", + "test/srptest", + "test/ssl_cert_table_internal_test", + "test/ssl_ctx_test", + "test/ssl_test", + "test/ssl_test_ctx_test", + "test/sslapitest", + "test/sslbuffertest", + "test/sslcorrupttest", + "test/ssltest_old", + "test/stack_test", + "test/sysdefaulttest", + "test/test_test", + "test/threadstest", + "test/time_offset_test", + "test/tls13ccstest", + "test/tls13encryptiontest", + "test/uitest", + "test/v3ext", + "test/v3nametest", + "test/verify_extra_test", + "test/versions", + "test/wpackettest", + "test/x509_check_cert_pkey_test", + "test/x509_dup_cert_test", + "test/x509_internal_test", + "test/x509_time_test", + "test/x509aux", + ], + "rawlines" => + [ + "##### SHA assembler implementations", + "", + "# GNU make \"catch all\"", + "crypto/sha/sha1-%.S: crypto/sha/asm/sha1-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/sha/sha256-%.S: crypto/sha/asm/sha512-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/sha/sha512-%.S: crypto/sha/asm/sha512-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/poly1305/poly1305-%.S: crypto/poly1305/asm/poly1305-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "##### AES assembler implementations", + "", + "# GNU make \"catch all\"", + "crypto/aes/aes-%.S: crypto/aes/asm/aes-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/aes/bsaes-%.S: crypto/aes/asm/bsaes-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "", + "# GNU make \"catch all\"", + "crypto/rc4/rc4-%.s: crypto/rc4/asm/rc4-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "##### CHACHA assembler implementations", + "", + "crypto/chacha/chacha-%.S: crypto/chacha/asm/chacha-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "# GNU make \"catch all\"", + "crypto/modes/ghash-%.S: crypto/modes/asm/ghash-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/ec/ecp_nistz256-%.S: crypto/ec/asm/ecp_nistz256-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + ], + "rename" => + { + }, + "scripts" => + [ + "apps/CA.pl", + "apps/tsget.pl", + "tools/c_rehash", + "util/shlib_wrap.sh", + ], + "shared_sources" => + { + }, + "sources" => + { + "apps/CA.pl" => + [ + "apps/CA.pl.in", + ], + "apps/app_rand.o" => + [ + "apps/app_rand.c", + ], + "apps/apps.o" => + [ + "apps/apps.c", + ], + "apps/asn1pars.o" => + [ + "apps/asn1pars.c", + ], + "apps/bf_prefix.o" => + [ + "apps/bf_prefix.c", + ], + "apps/ca.o" => + [ + "apps/ca.c", + ], + "apps/ciphers.o" => + [ + "apps/ciphers.c", + ], + "apps/cms.o" => + [ + "apps/cms.c", + ], + "apps/crl.o" => + [ + "apps/crl.c", + ], + "apps/crl2p7.o" => + [ + "apps/crl2p7.c", + ], + "apps/dgst.o" => + [ + "apps/dgst.c", + ], + "apps/dhparam.o" => + [ + "apps/dhparam.c", + ], + "apps/dsa.o" => + [ + "apps/dsa.c", + ], + "apps/dsaparam.o" => + [ + "apps/dsaparam.c", + ], + "apps/ec.o" => + [ + "apps/ec.c", + ], + "apps/ecparam.o" => + [ + "apps/ecparam.c", + ], + "apps/enc.o" => + [ + "apps/enc.c", + ], + "apps/engine.o" => + [ + "apps/engine.c", + ], + "apps/errstr.o" => + [ + "apps/errstr.c", + ], + "apps/gendsa.o" => + [ + "apps/gendsa.c", + ], + "apps/genpkey.o" => + [ + "apps/genpkey.c", + ], + "apps/genrsa.o" => + [ + "apps/genrsa.c", + ], + "apps/libapps.a" => + [ + "apps/app_rand.o", + "apps/apps.o", + "apps/bf_prefix.o", + "apps/opt.o", + "apps/s_cb.o", + "apps/s_socket.o", + ], + "apps/nseq.o" => + [ + "apps/nseq.c", + ], + "apps/ocsp.o" => + [ + "apps/ocsp.c", + ], + "apps/openssl" => + [ + "apps/asn1pars.o", + "apps/ca.o", + "apps/ciphers.o", + "apps/cms.o", + "apps/crl.o", + "apps/crl2p7.o", + "apps/dgst.o", + "apps/dhparam.o", + "apps/dsa.o", + "apps/dsaparam.o", + "apps/ec.o", + "apps/ecparam.o", + "apps/enc.o", + "apps/engine.o", + "apps/errstr.o", + "apps/gendsa.o", + "apps/genpkey.o", + "apps/genrsa.o", + "apps/nseq.o", + "apps/ocsp.o", + "apps/openssl.o", + "apps/passwd.o", + "apps/pkcs12.o", + "apps/pkcs7.o", + "apps/pkcs8.o", + "apps/pkey.o", + "apps/pkeyparam.o", + "apps/pkeyutl.o", + "apps/prime.o", + "apps/rand.o", + "apps/rehash.o", + "apps/req.o", + "apps/rsa.o", + "apps/rsautl.o", + "apps/s_client.o", + "apps/s_server.o", + "apps/s_time.o", + "apps/sess_id.o", + "apps/smime.o", + "apps/speed.o", + "apps/spkac.o", + "apps/srp.o", + "apps/storeutl.o", + "apps/ts.o", + "apps/verify.o", + "apps/version.o", + "apps/x509.o", + ], + "apps/openssl.o" => + [ + "apps/openssl.c", + ], + "apps/opt.o" => + [ + "apps/opt.c", + ], + "apps/passwd.o" => + [ + "apps/passwd.c", + ], + "apps/pkcs12.o" => + [ + "apps/pkcs12.c", + ], + "apps/pkcs7.o" => + [ + "apps/pkcs7.c", + ], + "apps/pkcs8.o" => + [ + "apps/pkcs8.c", + ], + "apps/pkey.o" => + [ + "apps/pkey.c", + ], + "apps/pkeyparam.o" => + [ + "apps/pkeyparam.c", + ], + "apps/pkeyutl.o" => + [ + "apps/pkeyutl.c", + ], + "apps/prime.o" => + [ + "apps/prime.c", + ], + "apps/rand.o" => + [ + "apps/rand.c", + ], + "apps/rehash.o" => + [ + "apps/rehash.c", + ], + "apps/req.o" => + [ + "apps/req.c", + ], + "apps/rsa.o" => + [ + "apps/rsa.c", + ], + "apps/rsautl.o" => + [ + "apps/rsautl.c", + ], + "apps/s_cb.o" => + [ + "apps/s_cb.c", + ], + "apps/s_client.o" => + [ + "apps/s_client.c", + ], + "apps/s_server.o" => + [ + "apps/s_server.c", + ], + "apps/s_socket.o" => + [ + "apps/s_socket.c", + ], + "apps/s_time.o" => + [ + "apps/s_time.c", + ], + "apps/sess_id.o" => + [ + "apps/sess_id.c", + ], + "apps/smime.o" => + [ + "apps/smime.c", + ], + "apps/speed.o" => + [ + "apps/speed.c", + ], + "apps/spkac.o" => + [ + "apps/spkac.c", + ], + "apps/srp.o" => + [ + "apps/srp.c", + ], + "apps/storeutl.o" => + [ + "apps/storeutl.c", + ], + "apps/ts.o" => + [ + "apps/ts.c", + ], + "apps/tsget.pl" => + [ + "apps/tsget.in", + ], + "apps/verify.o" => + [ + "apps/verify.c", + ], + "apps/version.o" => + [ + "apps/version.c", + ], + "apps/x509.o" => + [ + "apps/x509.c", + ], + "crypto/aes/aes_cbc.o" => + [ + "crypto/aes/aes_cbc.c", + ], + "crypto/aes/aes_cfb.o" => + [ + "crypto/aes/aes_cfb.c", + ], + "crypto/aes/aes_core.o" => + [ + "crypto/aes/aes_core.c", + ], + "crypto/aes/aes_ecb.o" => + [ + "crypto/aes/aes_ecb.c", + ], + "crypto/aes/aes_ige.o" => + [ + "crypto/aes/aes_ige.c", + ], + "crypto/aes/aes_misc.o" => + [ + "crypto/aes/aes_misc.c", + ], + "crypto/aes/aes_ofb.o" => + [ + "crypto/aes/aes_ofb.c", + ], + "crypto/aes/aes_wrap.o" => + [ + "crypto/aes/aes_wrap.c", + ], + "crypto/aes/aesv8-armx.o" => + [ + "crypto/aes/aesv8-armx.S", + ], + "crypto/aes/vpaes-armv8.o" => + [ + "crypto/aes/vpaes-armv8.S", + ], + "crypto/aria/aria.o" => + [ + "crypto/aria/aria.c", + ], + "crypto/arm64cpuid.o" => + [ + "crypto/arm64cpuid.S", + ], + "crypto/armcap.o" => + [ + "crypto/armcap.c", + ], + "crypto/asn1/a_bitstr.o" => + [ + "crypto/asn1/a_bitstr.c", + ], + "crypto/asn1/a_d2i_fp.o" => + [ + "crypto/asn1/a_d2i_fp.c", + ], + "crypto/asn1/a_digest.o" => + [ + "crypto/asn1/a_digest.c", + ], + "crypto/asn1/a_dup.o" => + [ + "crypto/asn1/a_dup.c", + ], + "crypto/asn1/a_gentm.o" => + [ + "crypto/asn1/a_gentm.c", + ], + "crypto/asn1/a_i2d_fp.o" => + [ + "crypto/asn1/a_i2d_fp.c", + ], + "crypto/asn1/a_int.o" => + [ + "crypto/asn1/a_int.c", + ], + "crypto/asn1/a_mbstr.o" => + [ + "crypto/asn1/a_mbstr.c", + ], + "crypto/asn1/a_object.o" => + [ + "crypto/asn1/a_object.c", + ], + "crypto/asn1/a_octet.o" => + [ + "crypto/asn1/a_octet.c", + ], + "crypto/asn1/a_print.o" => + [ + "crypto/asn1/a_print.c", + ], + "crypto/asn1/a_sign.o" => + [ + "crypto/asn1/a_sign.c", + ], + "crypto/asn1/a_strex.o" => + [ + "crypto/asn1/a_strex.c", + ], + "crypto/asn1/a_strnid.o" => + [ + "crypto/asn1/a_strnid.c", + ], + "crypto/asn1/a_time.o" => + [ + "crypto/asn1/a_time.c", + ], + "crypto/asn1/a_type.o" => + [ + "crypto/asn1/a_type.c", + ], + "crypto/asn1/a_utctm.o" => + [ + "crypto/asn1/a_utctm.c", + ], + "crypto/asn1/a_utf8.o" => + [ + "crypto/asn1/a_utf8.c", + ], + "crypto/asn1/a_verify.o" => + [ + "crypto/asn1/a_verify.c", + ], + "crypto/asn1/ameth_lib.o" => + [ + "crypto/asn1/ameth_lib.c", + ], + "crypto/asn1/asn1_err.o" => + [ + "crypto/asn1/asn1_err.c", + ], + "crypto/asn1/asn1_gen.o" => + [ + "crypto/asn1/asn1_gen.c", + ], + "crypto/asn1/asn1_item_list.o" => + [ + "crypto/asn1/asn1_item_list.c", + ], + "crypto/asn1/asn1_lib.o" => + [ + "crypto/asn1/asn1_lib.c", + ], + "crypto/asn1/asn1_par.o" => + [ + "crypto/asn1/asn1_par.c", + ], + "crypto/asn1/asn_mime.o" => + [ + "crypto/asn1/asn_mime.c", + ], + "crypto/asn1/asn_moid.o" => + [ + "crypto/asn1/asn_moid.c", + ], + "crypto/asn1/asn_mstbl.o" => + [ + "crypto/asn1/asn_mstbl.c", + ], + "crypto/asn1/asn_pack.o" => + [ + "crypto/asn1/asn_pack.c", + ], + "crypto/asn1/bio_asn1.o" => + [ + "crypto/asn1/bio_asn1.c", + ], + "crypto/asn1/bio_ndef.o" => + [ + "crypto/asn1/bio_ndef.c", + ], + "crypto/asn1/d2i_pr.o" => + [ + "crypto/asn1/d2i_pr.c", + ], + "crypto/asn1/d2i_pu.o" => + [ + "crypto/asn1/d2i_pu.c", + ], + "crypto/asn1/evp_asn1.o" => + [ + "crypto/asn1/evp_asn1.c", + ], + "crypto/asn1/f_int.o" => + [ + "crypto/asn1/f_int.c", + ], + "crypto/asn1/f_string.o" => + [ + "crypto/asn1/f_string.c", + ], + "crypto/asn1/i2d_pr.o" => + [ + "crypto/asn1/i2d_pr.c", + ], + "crypto/asn1/i2d_pu.o" => + [ + "crypto/asn1/i2d_pu.c", + ], + "crypto/asn1/n_pkey.o" => + [ + "crypto/asn1/n_pkey.c", + ], + "crypto/asn1/nsseq.o" => + [ + "crypto/asn1/nsseq.c", + ], + "crypto/asn1/p5_pbe.o" => + [ + "crypto/asn1/p5_pbe.c", + ], + "crypto/asn1/p5_pbev2.o" => + [ + "crypto/asn1/p5_pbev2.c", + ], + "crypto/asn1/p5_scrypt.o" => + [ + "crypto/asn1/p5_scrypt.c", + ], + "crypto/asn1/p8_pkey.o" => + [ + "crypto/asn1/p8_pkey.c", + ], + "crypto/asn1/t_bitst.o" => + [ + "crypto/asn1/t_bitst.c", + ], + "crypto/asn1/t_pkey.o" => + [ + "crypto/asn1/t_pkey.c", + ], + "crypto/asn1/t_spki.o" => + [ + "crypto/asn1/t_spki.c", + ], + "crypto/asn1/tasn_dec.o" => + [ + "crypto/asn1/tasn_dec.c", + ], + "crypto/asn1/tasn_enc.o" => + [ + "crypto/asn1/tasn_enc.c", + ], + "crypto/asn1/tasn_fre.o" => + [ + "crypto/asn1/tasn_fre.c", + ], + "crypto/asn1/tasn_new.o" => + [ + "crypto/asn1/tasn_new.c", + ], + "crypto/asn1/tasn_prn.o" => + [ + "crypto/asn1/tasn_prn.c", + ], + "crypto/asn1/tasn_scn.o" => + [ + "crypto/asn1/tasn_scn.c", + ], + "crypto/asn1/tasn_typ.o" => + [ + "crypto/asn1/tasn_typ.c", + ], + "crypto/asn1/tasn_utl.o" => + [ + "crypto/asn1/tasn_utl.c", + ], + "crypto/asn1/x_algor.o" => + [ + "crypto/asn1/x_algor.c", + ], + "crypto/asn1/x_bignum.o" => + [ + "crypto/asn1/x_bignum.c", + ], + "crypto/asn1/x_info.o" => + [ + "crypto/asn1/x_info.c", + ], + "crypto/asn1/x_int64.o" => + [ + "crypto/asn1/x_int64.c", + ], + "crypto/asn1/x_long.o" => + [ + "crypto/asn1/x_long.c", + ], + "crypto/asn1/x_pkey.o" => + [ + "crypto/asn1/x_pkey.c", + ], + "crypto/asn1/x_sig.o" => + [ + "crypto/asn1/x_sig.c", + ], + "crypto/asn1/x_spki.o" => + [ + "crypto/asn1/x_spki.c", + ], + "crypto/asn1/x_val.o" => + [ + "crypto/asn1/x_val.c", + ], + "crypto/async/arch/async_null.o" => + [ + "crypto/async/arch/async_null.c", + ], + "crypto/async/arch/async_posix.o" => + [ + "crypto/async/arch/async_posix.c", + ], + "crypto/async/arch/async_win.o" => + [ + "crypto/async/arch/async_win.c", + ], + "crypto/async/async.o" => + [ + "crypto/async/async.c", + ], + "crypto/async/async_err.o" => + [ + "crypto/async/async_err.c", + ], + "crypto/async/async_wait.o" => + [ + "crypto/async/async_wait.c", + ], + "crypto/bf/bf_cfb64.o" => + [ + "crypto/bf/bf_cfb64.c", + ], + "crypto/bf/bf_ecb.o" => + [ + "crypto/bf/bf_ecb.c", + ], + "crypto/bf/bf_enc.o" => + [ + "crypto/bf/bf_enc.c", + ], + "crypto/bf/bf_ofb64.o" => + [ + "crypto/bf/bf_ofb64.c", + ], + "crypto/bf/bf_skey.o" => + [ + "crypto/bf/bf_skey.c", + ], + "crypto/bio/b_addr.o" => + [ + "crypto/bio/b_addr.c", + ], + "crypto/bio/b_dump.o" => + [ + "crypto/bio/b_dump.c", + ], + "crypto/bio/b_print.o" => + [ + "crypto/bio/b_print.c", + ], + "crypto/bio/b_sock.o" => + [ + "crypto/bio/b_sock.c", + ], + "crypto/bio/b_sock2.o" => + [ + "crypto/bio/b_sock2.c", + ], + "crypto/bio/bf_buff.o" => + [ + "crypto/bio/bf_buff.c", + ], + "crypto/bio/bf_lbuf.o" => + [ + "crypto/bio/bf_lbuf.c", + ], + "crypto/bio/bf_nbio.o" => + [ + "crypto/bio/bf_nbio.c", + ], + "crypto/bio/bf_null.o" => + [ + "crypto/bio/bf_null.c", + ], + "crypto/bio/bio_cb.o" => + [ + "crypto/bio/bio_cb.c", + ], + "crypto/bio/bio_err.o" => + [ + "crypto/bio/bio_err.c", + ], + "crypto/bio/bio_lib.o" => + [ + "crypto/bio/bio_lib.c", + ], + "crypto/bio/bio_meth.o" => + [ + "crypto/bio/bio_meth.c", + ], + "crypto/bio/bss_acpt.o" => + [ + "crypto/bio/bss_acpt.c", + ], + "crypto/bio/bss_bio.o" => + [ + "crypto/bio/bss_bio.c", + ], + "crypto/bio/bss_conn.o" => + [ + "crypto/bio/bss_conn.c", + ], + "crypto/bio/bss_dgram.o" => + [ + "crypto/bio/bss_dgram.c", + ], + "crypto/bio/bss_fd.o" => + [ + "crypto/bio/bss_fd.c", + ], + "crypto/bio/bss_file.o" => + [ + "crypto/bio/bss_file.c", + ], + "crypto/bio/bss_log.o" => + [ + "crypto/bio/bss_log.c", + ], + "crypto/bio/bss_mem.o" => + [ + "crypto/bio/bss_mem.c", + ], + "crypto/bio/bss_null.o" => + [ + "crypto/bio/bss_null.c", + ], + "crypto/bio/bss_sock.o" => + [ + "crypto/bio/bss_sock.c", + ], + "crypto/blake2/blake2b.o" => + [ + "crypto/blake2/blake2b.c", + ], + "crypto/blake2/blake2s.o" => + [ + "crypto/blake2/blake2s.c", + ], + "crypto/blake2/m_blake2b.o" => + [ + "crypto/blake2/m_blake2b.c", + ], + "crypto/blake2/m_blake2s.o" => + [ + "crypto/blake2/m_blake2s.c", + ], + "crypto/bn/armv8-mont.o" => + [ + "crypto/bn/armv8-mont.S", + ], + "crypto/bn/bn_add.o" => + [ + "crypto/bn/bn_add.c", + ], + "crypto/bn/bn_asm.o" => + [ + "crypto/bn/bn_asm.c", + ], + "crypto/bn/bn_blind.o" => + [ + "crypto/bn/bn_blind.c", + ], + "crypto/bn/bn_const.o" => + [ + "crypto/bn/bn_const.c", + ], + "crypto/bn/bn_ctx.o" => + [ + "crypto/bn/bn_ctx.c", + ], + "crypto/bn/bn_depr.o" => + [ + "crypto/bn/bn_depr.c", + ], + "crypto/bn/bn_dh.o" => + [ + "crypto/bn/bn_dh.c", + ], + "crypto/bn/bn_div.o" => + [ + "crypto/bn/bn_div.c", + ], + "crypto/bn/bn_err.o" => + [ + "crypto/bn/bn_err.c", + ], + "crypto/bn/bn_exp.o" => + [ + "crypto/bn/bn_exp.c", + ], + "crypto/bn/bn_exp2.o" => + [ + "crypto/bn/bn_exp2.c", + ], + "crypto/bn/bn_gcd.o" => + [ + "crypto/bn/bn_gcd.c", + ], + "crypto/bn/bn_gf2m.o" => + [ + "crypto/bn/bn_gf2m.c", + ], + "crypto/bn/bn_intern.o" => + [ + "crypto/bn/bn_intern.c", + ], + "crypto/bn/bn_kron.o" => + [ + "crypto/bn/bn_kron.c", + ], + "crypto/bn/bn_lib.o" => + [ + "crypto/bn/bn_lib.c", + ], + "crypto/bn/bn_mod.o" => + [ + "crypto/bn/bn_mod.c", + ], + "crypto/bn/bn_mont.o" => + [ + "crypto/bn/bn_mont.c", + ], + "crypto/bn/bn_mpi.o" => + [ + "crypto/bn/bn_mpi.c", + ], + "crypto/bn/bn_mul.o" => + [ + "crypto/bn/bn_mul.c", + ], + "crypto/bn/bn_nist.o" => + [ + "crypto/bn/bn_nist.c", + ], + "crypto/bn/bn_prime.o" => + [ + "crypto/bn/bn_prime.c", + ], + "crypto/bn/bn_print.o" => + [ + "crypto/bn/bn_print.c", + ], + "crypto/bn/bn_rand.o" => + [ + "crypto/bn/bn_rand.c", + ], + "crypto/bn/bn_recp.o" => + [ + "crypto/bn/bn_recp.c", + ], + "crypto/bn/bn_shift.o" => + [ + "crypto/bn/bn_shift.c", + ], + "crypto/bn/bn_sqr.o" => + [ + "crypto/bn/bn_sqr.c", + ], + "crypto/bn/bn_sqrt.o" => + [ + "crypto/bn/bn_sqrt.c", + ], + "crypto/bn/bn_srp.o" => + [ + "crypto/bn/bn_srp.c", + ], + "crypto/bn/bn_word.o" => + [ + "crypto/bn/bn_word.c", + ], + "crypto/bn/bn_x931p.o" => + [ + "crypto/bn/bn_x931p.c", + ], + "crypto/buffer/buf_err.o" => + [ + "crypto/buffer/buf_err.c", + ], + "crypto/buffer/buffer.o" => + [ + "crypto/buffer/buffer.c", + ], + "crypto/camellia/camellia.o" => + [ + "crypto/camellia/camellia.c", + ], + "crypto/camellia/cmll_cbc.o" => + [ + "crypto/camellia/cmll_cbc.c", + ], + "crypto/camellia/cmll_cfb.o" => + [ + "crypto/camellia/cmll_cfb.c", + ], + "crypto/camellia/cmll_ctr.o" => + [ + "crypto/camellia/cmll_ctr.c", + ], + "crypto/camellia/cmll_ecb.o" => + [ + "crypto/camellia/cmll_ecb.c", + ], + "crypto/camellia/cmll_misc.o" => + [ + "crypto/camellia/cmll_misc.c", + ], + "crypto/camellia/cmll_ofb.o" => + [ + "crypto/camellia/cmll_ofb.c", + ], + "crypto/cast/c_cfb64.o" => + [ + "crypto/cast/c_cfb64.c", + ], + "crypto/cast/c_ecb.o" => + [ + "crypto/cast/c_ecb.c", + ], + "crypto/cast/c_enc.o" => + [ + "crypto/cast/c_enc.c", + ], + "crypto/cast/c_ofb64.o" => + [ + "crypto/cast/c_ofb64.c", + ], + "crypto/cast/c_skey.o" => + [ + "crypto/cast/c_skey.c", + ], + "crypto/chacha/chacha-armv8.o" => + [ + "crypto/chacha/chacha-armv8.S", + ], + "crypto/cmac/cm_ameth.o" => + [ + "crypto/cmac/cm_ameth.c", + ], + "crypto/cmac/cm_pmeth.o" => + [ + "crypto/cmac/cm_pmeth.c", + ], + "crypto/cmac/cmac.o" => + [ + "crypto/cmac/cmac.c", + ], + "crypto/cms/cms_asn1.o" => + [ + "crypto/cms/cms_asn1.c", + ], + "crypto/cms/cms_att.o" => + [ + "crypto/cms/cms_att.c", + ], + "crypto/cms/cms_cd.o" => + [ + "crypto/cms/cms_cd.c", + ], + "crypto/cms/cms_dd.o" => + [ + "crypto/cms/cms_dd.c", + ], + "crypto/cms/cms_enc.o" => + [ + "crypto/cms/cms_enc.c", + ], + "crypto/cms/cms_env.o" => + [ + "crypto/cms/cms_env.c", + ], + "crypto/cms/cms_err.o" => + [ + "crypto/cms/cms_err.c", + ], + "crypto/cms/cms_ess.o" => + [ + "crypto/cms/cms_ess.c", + ], + "crypto/cms/cms_io.o" => + [ + "crypto/cms/cms_io.c", + ], + "crypto/cms/cms_kari.o" => + [ + "crypto/cms/cms_kari.c", + ], + "crypto/cms/cms_lib.o" => + [ + "crypto/cms/cms_lib.c", + ], + "crypto/cms/cms_pwri.o" => + [ + "crypto/cms/cms_pwri.c", + ], + "crypto/cms/cms_sd.o" => + [ + "crypto/cms/cms_sd.c", + ], + "crypto/cms/cms_smime.o" => + [ + "crypto/cms/cms_smime.c", + ], + "crypto/conf/conf_api.o" => + [ + "crypto/conf/conf_api.c", + ], + "crypto/conf/conf_def.o" => + [ + "crypto/conf/conf_def.c", + ], + "crypto/conf/conf_err.o" => + [ + "crypto/conf/conf_err.c", + ], + "crypto/conf/conf_lib.o" => + [ + "crypto/conf/conf_lib.c", + ], + "crypto/conf/conf_mall.o" => + [ + "crypto/conf/conf_mall.c", + ], + "crypto/conf/conf_mod.o" => + [ + "crypto/conf/conf_mod.c", + ], + "crypto/conf/conf_sap.o" => + [ + "crypto/conf/conf_sap.c", + ], + "crypto/conf/conf_ssl.o" => + [ + "crypto/conf/conf_ssl.c", + ], + "crypto/cpt_err.o" => + [ + "crypto/cpt_err.c", + ], + "crypto/cryptlib.o" => + [ + "crypto/cryptlib.c", + ], + "crypto/ct/ct_b64.o" => + [ + "crypto/ct/ct_b64.c", + ], + "crypto/ct/ct_err.o" => + [ + "crypto/ct/ct_err.c", + ], + "crypto/ct/ct_log.o" => + [ + "crypto/ct/ct_log.c", + ], + "crypto/ct/ct_oct.o" => + [ + "crypto/ct/ct_oct.c", + ], + "crypto/ct/ct_policy.o" => + [ + "crypto/ct/ct_policy.c", + ], + "crypto/ct/ct_prn.o" => + [ + "crypto/ct/ct_prn.c", + ], + "crypto/ct/ct_sct.o" => + [ + "crypto/ct/ct_sct.c", + ], + "crypto/ct/ct_sct_ctx.o" => + [ + "crypto/ct/ct_sct_ctx.c", + ], + "crypto/ct/ct_vfy.o" => + [ + "crypto/ct/ct_vfy.c", + ], + "crypto/ct/ct_x509v3.o" => + [ + "crypto/ct/ct_x509v3.c", + ], + "crypto/ctype.o" => + [ + "crypto/ctype.c", + ], + "crypto/cversion.o" => + [ + "crypto/cversion.c", + ], + "crypto/des/cbc_cksm.o" => + [ + "crypto/des/cbc_cksm.c", + ], + "crypto/des/cbc_enc.o" => + [ + "crypto/des/cbc_enc.c", + ], + "crypto/des/cfb64ede.o" => + [ + "crypto/des/cfb64ede.c", + ], + "crypto/des/cfb64enc.o" => + [ + "crypto/des/cfb64enc.c", + ], + "crypto/des/cfb_enc.o" => + [ + "crypto/des/cfb_enc.c", + ], + "crypto/des/des_enc.o" => + [ + "crypto/des/des_enc.c", + ], + "crypto/des/ecb3_enc.o" => + [ + "crypto/des/ecb3_enc.c", + ], + "crypto/des/ecb_enc.o" => + [ + "crypto/des/ecb_enc.c", + ], + "crypto/des/fcrypt.o" => + [ + "crypto/des/fcrypt.c", + ], + "crypto/des/fcrypt_b.o" => + [ + "crypto/des/fcrypt_b.c", + ], + "crypto/des/ofb64ede.o" => + [ + "crypto/des/ofb64ede.c", + ], + "crypto/des/ofb64enc.o" => + [ + "crypto/des/ofb64enc.c", + ], + "crypto/des/ofb_enc.o" => + [ + "crypto/des/ofb_enc.c", + ], + "crypto/des/pcbc_enc.o" => + [ + "crypto/des/pcbc_enc.c", + ], + "crypto/des/qud_cksm.o" => + [ + "crypto/des/qud_cksm.c", + ], + "crypto/des/rand_key.o" => + [ + "crypto/des/rand_key.c", + ], + "crypto/des/set_key.o" => + [ + "crypto/des/set_key.c", + ], + "crypto/des/str2key.o" => + [ + "crypto/des/str2key.c", + ], + "crypto/des/xcbc_enc.o" => + [ + "crypto/des/xcbc_enc.c", + ], + "crypto/dh/dh_ameth.o" => + [ + "crypto/dh/dh_ameth.c", + ], + "crypto/dh/dh_asn1.o" => + [ + "crypto/dh/dh_asn1.c", + ], + "crypto/dh/dh_check.o" => + [ + "crypto/dh/dh_check.c", + ], + "crypto/dh/dh_depr.o" => + [ + "crypto/dh/dh_depr.c", + ], + "crypto/dh/dh_err.o" => + [ + "crypto/dh/dh_err.c", + ], + "crypto/dh/dh_gen.o" => + [ + "crypto/dh/dh_gen.c", + ], + "crypto/dh/dh_kdf.o" => + [ + "crypto/dh/dh_kdf.c", + ], + "crypto/dh/dh_key.o" => + [ + "crypto/dh/dh_key.c", + ], + "crypto/dh/dh_lib.o" => + [ + "crypto/dh/dh_lib.c", + ], + "crypto/dh/dh_meth.o" => + [ + "crypto/dh/dh_meth.c", + ], + "crypto/dh/dh_pmeth.o" => + [ + "crypto/dh/dh_pmeth.c", + ], + "crypto/dh/dh_prn.o" => + [ + "crypto/dh/dh_prn.c", + ], + "crypto/dh/dh_rfc5114.o" => + [ + "crypto/dh/dh_rfc5114.c", + ], + "crypto/dh/dh_rfc7919.o" => + [ + "crypto/dh/dh_rfc7919.c", + ], + "crypto/dsa/dsa_ameth.o" => + [ + "crypto/dsa/dsa_ameth.c", + ], + "crypto/dsa/dsa_asn1.o" => + [ + "crypto/dsa/dsa_asn1.c", + ], + "crypto/dsa/dsa_depr.o" => + [ + "crypto/dsa/dsa_depr.c", + ], + "crypto/dsa/dsa_err.o" => + [ + "crypto/dsa/dsa_err.c", + ], + "crypto/dsa/dsa_gen.o" => + [ + "crypto/dsa/dsa_gen.c", + ], + "crypto/dsa/dsa_key.o" => + [ + "crypto/dsa/dsa_key.c", + ], + "crypto/dsa/dsa_lib.o" => + [ + "crypto/dsa/dsa_lib.c", + ], + "crypto/dsa/dsa_meth.o" => + [ + "crypto/dsa/dsa_meth.c", + ], + "crypto/dsa/dsa_ossl.o" => + [ + "crypto/dsa/dsa_ossl.c", + ], + "crypto/dsa/dsa_pmeth.o" => + [ + "crypto/dsa/dsa_pmeth.c", + ], + "crypto/dsa/dsa_prn.o" => + [ + "crypto/dsa/dsa_prn.c", + ], + "crypto/dsa/dsa_sign.o" => + [ + "crypto/dsa/dsa_sign.c", + ], + "crypto/dsa/dsa_vrf.o" => + [ + "crypto/dsa/dsa_vrf.c", + ], + "crypto/dso/dso_dl.o" => + [ + "crypto/dso/dso_dl.c", + ], + "crypto/dso/dso_dlfcn.o" => + [ + "crypto/dso/dso_dlfcn.c", + ], + "crypto/dso/dso_err.o" => + [ + "crypto/dso/dso_err.c", + ], + "crypto/dso/dso_lib.o" => + [ + "crypto/dso/dso_lib.c", + ], + "crypto/dso/dso_openssl.o" => + [ + "crypto/dso/dso_openssl.c", + ], + "crypto/dso/dso_vms.o" => + [ + "crypto/dso/dso_vms.c", + ], + "crypto/dso/dso_win32.o" => + [ + "crypto/dso/dso_win32.c", + ], + "crypto/ebcdic.o" => + [ + "crypto/ebcdic.c", + ], + "crypto/ec/curve25519.o" => + [ + "crypto/ec/curve25519.c", + ], + "crypto/ec/curve448/arch_32/f_impl.o" => + [ + "crypto/ec/curve448/arch_32/f_impl.c", + ], + "crypto/ec/curve448/curve448.o" => + [ + "crypto/ec/curve448/curve448.c", + ], + "crypto/ec/curve448/curve448_tables.o" => + [ + "crypto/ec/curve448/curve448_tables.c", + ], + "crypto/ec/curve448/eddsa.o" => + [ + "crypto/ec/curve448/eddsa.c", + ], + "crypto/ec/curve448/f_generic.o" => + [ + "crypto/ec/curve448/f_generic.c", + ], + "crypto/ec/curve448/scalar.o" => + [ + "crypto/ec/curve448/scalar.c", + ], + "crypto/ec/ec2_oct.o" => + [ + "crypto/ec/ec2_oct.c", + ], + "crypto/ec/ec2_smpl.o" => + [ + "crypto/ec/ec2_smpl.c", + ], + "crypto/ec/ec_ameth.o" => + [ + "crypto/ec/ec_ameth.c", + ], + "crypto/ec/ec_asn1.o" => + [ + "crypto/ec/ec_asn1.c", + ], + "crypto/ec/ec_check.o" => + [ + "crypto/ec/ec_check.c", + ], + "crypto/ec/ec_curve.o" => + [ + "crypto/ec/ec_curve.c", + ], + "crypto/ec/ec_cvt.o" => + [ + "crypto/ec/ec_cvt.c", + ], + "crypto/ec/ec_err.o" => + [ + "crypto/ec/ec_err.c", + ], + "crypto/ec/ec_key.o" => + [ + "crypto/ec/ec_key.c", + ], + "crypto/ec/ec_kmeth.o" => + [ + "crypto/ec/ec_kmeth.c", + ], + "crypto/ec/ec_lib.o" => + [ + "crypto/ec/ec_lib.c", + ], + "crypto/ec/ec_mult.o" => + [ + "crypto/ec/ec_mult.c", + ], + "crypto/ec/ec_oct.o" => + [ + "crypto/ec/ec_oct.c", + ], + "crypto/ec/ec_pmeth.o" => + [ + "crypto/ec/ec_pmeth.c", + ], + "crypto/ec/ec_print.o" => + [ + "crypto/ec/ec_print.c", + ], + "crypto/ec/ecdh_kdf.o" => + [ + "crypto/ec/ecdh_kdf.c", + ], + "crypto/ec/ecdh_ossl.o" => + [ + "crypto/ec/ecdh_ossl.c", + ], + "crypto/ec/ecdsa_ossl.o" => + [ + "crypto/ec/ecdsa_ossl.c", + ], + "crypto/ec/ecdsa_sign.o" => + [ + "crypto/ec/ecdsa_sign.c", + ], + "crypto/ec/ecdsa_vrf.o" => + [ + "crypto/ec/ecdsa_vrf.c", + ], + "crypto/ec/eck_prn.o" => + [ + "crypto/ec/eck_prn.c", + ], + "crypto/ec/ecp_mont.o" => + [ + "crypto/ec/ecp_mont.c", + ], + "crypto/ec/ecp_nist.o" => + [ + "crypto/ec/ecp_nist.c", + ], + "crypto/ec/ecp_nistp224.o" => + [ + "crypto/ec/ecp_nistp224.c", + ], + "crypto/ec/ecp_nistp256.o" => + [ + "crypto/ec/ecp_nistp256.c", + ], + "crypto/ec/ecp_nistp521.o" => + [ + "crypto/ec/ecp_nistp521.c", + ], + "crypto/ec/ecp_nistputil.o" => + [ + "crypto/ec/ecp_nistputil.c", + ], + "crypto/ec/ecp_nistz256-armv8.o" => + [ + "crypto/ec/ecp_nistz256-armv8.S", + ], + "crypto/ec/ecp_nistz256.o" => + [ + "crypto/ec/ecp_nistz256.c", + ], + "crypto/ec/ecp_oct.o" => + [ + "crypto/ec/ecp_oct.c", + ], + "crypto/ec/ecp_smpl.o" => + [ + "crypto/ec/ecp_smpl.c", + ], + "crypto/ec/ecx_meth.o" => + [ + "crypto/ec/ecx_meth.c", + ], + "crypto/engine/eng_all.o" => + [ + "crypto/engine/eng_all.c", + ], + "crypto/engine/eng_cnf.o" => + [ + "crypto/engine/eng_cnf.c", + ], + "crypto/engine/eng_ctrl.o" => + [ + "crypto/engine/eng_ctrl.c", + ], + "crypto/engine/eng_dyn.o" => + [ + "crypto/engine/eng_dyn.c", + ], + "crypto/engine/eng_err.o" => + [ + "crypto/engine/eng_err.c", + ], + "crypto/engine/eng_fat.o" => + [ + "crypto/engine/eng_fat.c", + ], + "crypto/engine/eng_init.o" => + [ + "crypto/engine/eng_init.c", + ], + "crypto/engine/eng_lib.o" => + [ + "crypto/engine/eng_lib.c", + ], + "crypto/engine/eng_list.o" => + [ + "crypto/engine/eng_list.c", + ], + "crypto/engine/eng_openssl.o" => + [ + "crypto/engine/eng_openssl.c", + ], + "crypto/engine/eng_pkey.o" => + [ + "crypto/engine/eng_pkey.c", + ], + "crypto/engine/eng_rdrand.o" => + [ + "crypto/engine/eng_rdrand.c", + ], + "crypto/engine/eng_table.o" => + [ + "crypto/engine/eng_table.c", + ], + "crypto/engine/tb_asnmth.o" => + [ + "crypto/engine/tb_asnmth.c", + ], + "crypto/engine/tb_cipher.o" => + [ + "crypto/engine/tb_cipher.c", + ], + "crypto/engine/tb_dh.o" => + [ + "crypto/engine/tb_dh.c", + ], + "crypto/engine/tb_digest.o" => + [ + "crypto/engine/tb_digest.c", + ], + "crypto/engine/tb_dsa.o" => + [ + "crypto/engine/tb_dsa.c", + ], + "crypto/engine/tb_eckey.o" => + [ + "crypto/engine/tb_eckey.c", + ], + "crypto/engine/tb_pkmeth.o" => + [ + "crypto/engine/tb_pkmeth.c", + ], + "crypto/engine/tb_rand.o" => + [ + "crypto/engine/tb_rand.c", + ], + "crypto/engine/tb_rsa.o" => + [ + "crypto/engine/tb_rsa.c", + ], + "crypto/err/err.o" => + [ + "crypto/err/err.c", + ], + "crypto/err/err_all.o" => + [ + "crypto/err/err_all.c", + ], + "crypto/err/err_prn.o" => + [ + "crypto/err/err_prn.c", + ], + "crypto/evp/bio_b64.o" => + [ + "crypto/evp/bio_b64.c", + ], + "crypto/evp/bio_enc.o" => + [ + "crypto/evp/bio_enc.c", + ], + "crypto/evp/bio_md.o" => + [ + "crypto/evp/bio_md.c", + ], + "crypto/evp/bio_ok.o" => + [ + "crypto/evp/bio_ok.c", + ], + "crypto/evp/c_allc.o" => + [ + "crypto/evp/c_allc.c", + ], + "crypto/evp/c_alld.o" => + [ + "crypto/evp/c_alld.c", + ], + "crypto/evp/cmeth_lib.o" => + [ + "crypto/evp/cmeth_lib.c", + ], + "crypto/evp/digest.o" => + [ + "crypto/evp/digest.c", + ], + "crypto/evp/e_aes.o" => + [ + "crypto/evp/e_aes.c", + ], + "crypto/evp/e_aes_cbc_hmac_sha1.o" => + [ + "crypto/evp/e_aes_cbc_hmac_sha1.c", + ], + "crypto/evp/e_aes_cbc_hmac_sha256.o" => + [ + "crypto/evp/e_aes_cbc_hmac_sha256.c", + ], + "crypto/evp/e_aria.o" => + [ + "crypto/evp/e_aria.c", + ], + "crypto/evp/e_bf.o" => + [ + "crypto/evp/e_bf.c", + ], + "crypto/evp/e_camellia.o" => + [ + "crypto/evp/e_camellia.c", + ], + "crypto/evp/e_cast.o" => + [ + "crypto/evp/e_cast.c", + ], + "crypto/evp/e_chacha20_poly1305.o" => + [ + "crypto/evp/e_chacha20_poly1305.c", + ], + "crypto/evp/e_des.o" => + [ + "crypto/evp/e_des.c", + ], + "crypto/evp/e_des3.o" => + [ + "crypto/evp/e_des3.c", + ], + "crypto/evp/e_idea.o" => + [ + "crypto/evp/e_idea.c", + ], + "crypto/evp/e_null.o" => + [ + "crypto/evp/e_null.c", + ], + "crypto/evp/e_old.o" => + [ + "crypto/evp/e_old.c", + ], + "crypto/evp/e_rc2.o" => + [ + "crypto/evp/e_rc2.c", + ], + "crypto/evp/e_rc4.o" => + [ + "crypto/evp/e_rc4.c", + ], + "crypto/evp/e_rc4_hmac_md5.o" => + [ + "crypto/evp/e_rc4_hmac_md5.c", + ], + "crypto/evp/e_rc5.o" => + [ + "crypto/evp/e_rc5.c", + ], + "crypto/evp/e_seed.o" => + [ + "crypto/evp/e_seed.c", + ], + "crypto/evp/e_sm4.o" => + [ + "crypto/evp/e_sm4.c", + ], + "crypto/evp/e_xcbc_d.o" => + [ + "crypto/evp/e_xcbc_d.c", + ], + "crypto/evp/encode.o" => + [ + "crypto/evp/encode.c", + ], + "crypto/evp/evp_cnf.o" => + [ + "crypto/evp/evp_cnf.c", + ], + "crypto/evp/evp_enc.o" => + [ + "crypto/evp/evp_enc.c", + ], + "crypto/evp/evp_err.o" => + [ + "crypto/evp/evp_err.c", + ], + "crypto/evp/evp_key.o" => + [ + "crypto/evp/evp_key.c", + ], + "crypto/evp/evp_lib.o" => + [ + "crypto/evp/evp_lib.c", + ], + "crypto/evp/evp_pbe.o" => + [ + "crypto/evp/evp_pbe.c", + ], + "crypto/evp/evp_pkey.o" => + [ + "crypto/evp/evp_pkey.c", + ], + "crypto/evp/m_md2.o" => + [ + "crypto/evp/m_md2.c", + ], + "crypto/evp/m_md4.o" => + [ + "crypto/evp/m_md4.c", + ], + "crypto/evp/m_md5.o" => + [ + "crypto/evp/m_md5.c", + ], + "crypto/evp/m_md5_sha1.o" => + [ + "crypto/evp/m_md5_sha1.c", + ], + "crypto/evp/m_mdc2.o" => + [ + "crypto/evp/m_mdc2.c", + ], + "crypto/evp/m_null.o" => + [ + "crypto/evp/m_null.c", + ], + "crypto/evp/m_ripemd.o" => + [ + "crypto/evp/m_ripemd.c", + ], + "crypto/evp/m_sha1.o" => + [ + "crypto/evp/m_sha1.c", + ], + "crypto/evp/m_sha3.o" => + [ + "crypto/evp/m_sha3.c", + ], + "crypto/evp/m_sigver.o" => + [ + "crypto/evp/m_sigver.c", + ], + "crypto/evp/m_wp.o" => + [ + "crypto/evp/m_wp.c", + ], + "crypto/evp/names.o" => + [ + "crypto/evp/names.c", + ], + "crypto/evp/p5_crpt.o" => + [ + "crypto/evp/p5_crpt.c", + ], + "crypto/evp/p5_crpt2.o" => + [ + "crypto/evp/p5_crpt2.c", + ], + "crypto/evp/p_dec.o" => + [ + "crypto/evp/p_dec.c", + ], + "crypto/evp/p_enc.o" => + [ + "crypto/evp/p_enc.c", + ], + "crypto/evp/p_lib.o" => + [ + "crypto/evp/p_lib.c", + ], + "crypto/evp/p_open.o" => + [ + "crypto/evp/p_open.c", + ], + "crypto/evp/p_seal.o" => + [ + "crypto/evp/p_seal.c", + ], + "crypto/evp/p_sign.o" => + [ + "crypto/evp/p_sign.c", + ], + "crypto/evp/p_verify.o" => + [ + "crypto/evp/p_verify.c", + ], + "crypto/evp/pbe_scrypt.o" => + [ + "crypto/evp/pbe_scrypt.c", + ], + "crypto/evp/pmeth_fn.o" => + [ + "crypto/evp/pmeth_fn.c", + ], + "crypto/evp/pmeth_gn.o" => + [ + "crypto/evp/pmeth_gn.c", + ], + "crypto/evp/pmeth_lib.o" => + [ + "crypto/evp/pmeth_lib.c", + ], + "crypto/ex_data.o" => + [ + "crypto/ex_data.c", + ], + "crypto/getenv.o" => + [ + "crypto/getenv.c", + ], + "crypto/hmac/hm_ameth.o" => + [ + "crypto/hmac/hm_ameth.c", + ], + "crypto/hmac/hm_pmeth.o" => + [ + "crypto/hmac/hm_pmeth.c", + ], + "crypto/hmac/hmac.o" => + [ + "crypto/hmac/hmac.c", + ], + "crypto/idea/i_cbc.o" => + [ + "crypto/idea/i_cbc.c", + ], + "crypto/idea/i_cfb64.o" => + [ + "crypto/idea/i_cfb64.c", + ], + "crypto/idea/i_ecb.o" => + [ + "crypto/idea/i_ecb.c", + ], + "crypto/idea/i_ofb64.o" => + [ + "crypto/idea/i_ofb64.c", + ], + "crypto/idea/i_skey.o" => + [ + "crypto/idea/i_skey.c", + ], + "crypto/init.o" => + [ + "crypto/init.c", + ], + "crypto/kdf/hkdf.o" => + [ + "crypto/kdf/hkdf.c", + ], + "crypto/kdf/kdf_err.o" => + [ + "crypto/kdf/kdf_err.c", + ], + "crypto/kdf/scrypt.o" => + [ + "crypto/kdf/scrypt.c", + ], + "crypto/kdf/tls1_prf.o" => + [ + "crypto/kdf/tls1_prf.c", + ], + "crypto/lhash/lh_stats.o" => + [ + "crypto/lhash/lh_stats.c", + ], + "crypto/lhash/lhash.o" => + [ + "crypto/lhash/lhash.c", + ], + "crypto/md4/md4_dgst.o" => + [ + "crypto/md4/md4_dgst.c", + ], + "crypto/md4/md4_one.o" => + [ + "crypto/md4/md4_one.c", + ], + "crypto/md5/md5_dgst.o" => + [ + "crypto/md5/md5_dgst.c", + ], + "crypto/md5/md5_one.o" => + [ + "crypto/md5/md5_one.c", + ], + "crypto/mdc2/mdc2_one.o" => + [ + "crypto/mdc2/mdc2_one.c", + ], + "crypto/mdc2/mdc2dgst.o" => + [ + "crypto/mdc2/mdc2dgst.c", + ], + "crypto/mem.o" => + [ + "crypto/mem.c", + ], + "crypto/mem_dbg.o" => + [ + "crypto/mem_dbg.c", + ], + "crypto/mem_sec.o" => + [ + "crypto/mem_sec.c", + ], + "crypto/modes/cbc128.o" => + [ + "crypto/modes/cbc128.c", + ], + "crypto/modes/ccm128.o" => + [ + "crypto/modes/ccm128.c", + ], + "crypto/modes/cfb128.o" => + [ + "crypto/modes/cfb128.c", + ], + "crypto/modes/ctr128.o" => + [ + "crypto/modes/ctr128.c", + ], + "crypto/modes/cts128.o" => + [ + "crypto/modes/cts128.c", + ], + "crypto/modes/gcm128.o" => + [ + "crypto/modes/gcm128.c", + ], + "crypto/modes/ghashv8-armx.o" => + [ + "crypto/modes/ghashv8-armx.S", + ], + "crypto/modes/ocb128.o" => + [ + "crypto/modes/ocb128.c", + ], + "crypto/modes/ofb128.o" => + [ + "crypto/modes/ofb128.c", + ], + "crypto/modes/wrap128.o" => + [ + "crypto/modes/wrap128.c", + ], + "crypto/modes/xts128.o" => + [ + "crypto/modes/xts128.c", + ], + "crypto/o_dir.o" => + [ + "crypto/o_dir.c", + ], + "crypto/o_fips.o" => + [ + "crypto/o_fips.c", + ], + "crypto/o_fopen.o" => + [ + "crypto/o_fopen.c", + ], + "crypto/o_init.o" => + [ + "crypto/o_init.c", + ], + "crypto/o_str.o" => + [ + "crypto/o_str.c", + ], + "crypto/o_time.o" => + [ + "crypto/o_time.c", + ], + "crypto/objects/o_names.o" => + [ + "crypto/objects/o_names.c", + ], + "crypto/objects/obj_dat.o" => + [ + "crypto/objects/obj_dat.c", + ], + "crypto/objects/obj_err.o" => + [ + "crypto/objects/obj_err.c", + ], + "crypto/objects/obj_lib.o" => + [ + "crypto/objects/obj_lib.c", + ], + "crypto/objects/obj_xref.o" => + [ + "crypto/objects/obj_xref.c", + ], + "crypto/ocsp/ocsp_asn.o" => + [ + "crypto/ocsp/ocsp_asn.c", + ], + "crypto/ocsp/ocsp_cl.o" => + [ + "crypto/ocsp/ocsp_cl.c", + ], + "crypto/ocsp/ocsp_err.o" => + [ + "crypto/ocsp/ocsp_err.c", + ], + "crypto/ocsp/ocsp_ext.o" => + [ + "crypto/ocsp/ocsp_ext.c", + ], + "crypto/ocsp/ocsp_ht.o" => + [ + "crypto/ocsp/ocsp_ht.c", + ], + "crypto/ocsp/ocsp_lib.o" => + [ + "crypto/ocsp/ocsp_lib.c", + ], + "crypto/ocsp/ocsp_prn.o" => + [ + "crypto/ocsp/ocsp_prn.c", + ], + "crypto/ocsp/ocsp_srv.o" => + [ + "crypto/ocsp/ocsp_srv.c", + ], + "crypto/ocsp/ocsp_vfy.o" => + [ + "crypto/ocsp/ocsp_vfy.c", + ], + "crypto/ocsp/v3_ocsp.o" => + [ + "crypto/ocsp/v3_ocsp.c", + ], + "crypto/pem/pem_all.o" => + [ + "crypto/pem/pem_all.c", + ], + "crypto/pem/pem_err.o" => + [ + "crypto/pem/pem_err.c", + ], + "crypto/pem/pem_info.o" => + [ + "crypto/pem/pem_info.c", + ], + "crypto/pem/pem_lib.o" => + [ + "crypto/pem/pem_lib.c", + ], + "crypto/pem/pem_oth.o" => + [ + "crypto/pem/pem_oth.c", + ], + "crypto/pem/pem_pk8.o" => + [ + "crypto/pem/pem_pk8.c", + ], + "crypto/pem/pem_pkey.o" => + [ + "crypto/pem/pem_pkey.c", + ], + "crypto/pem/pem_sign.o" => + [ + "crypto/pem/pem_sign.c", + ], + "crypto/pem/pem_x509.o" => + [ + "crypto/pem/pem_x509.c", + ], + "crypto/pem/pem_xaux.o" => + [ + "crypto/pem/pem_xaux.c", + ], + "crypto/pem/pvkfmt.o" => + [ + "crypto/pem/pvkfmt.c", + ], + "crypto/pkcs12/p12_add.o" => + [ + "crypto/pkcs12/p12_add.c", + ], + "crypto/pkcs12/p12_asn.o" => + [ + "crypto/pkcs12/p12_asn.c", + ], + "crypto/pkcs12/p12_attr.o" => + [ + "crypto/pkcs12/p12_attr.c", + ], + "crypto/pkcs12/p12_crpt.o" => + [ + "crypto/pkcs12/p12_crpt.c", + ], + "crypto/pkcs12/p12_crt.o" => + [ + "crypto/pkcs12/p12_crt.c", + ], + "crypto/pkcs12/p12_decr.o" => + [ + "crypto/pkcs12/p12_decr.c", + ], + "crypto/pkcs12/p12_init.o" => + [ + "crypto/pkcs12/p12_init.c", + ], + "crypto/pkcs12/p12_key.o" => + [ + "crypto/pkcs12/p12_key.c", + ], + "crypto/pkcs12/p12_kiss.o" => + [ + "crypto/pkcs12/p12_kiss.c", + ], + "crypto/pkcs12/p12_mutl.o" => + [ + "crypto/pkcs12/p12_mutl.c", + ], + "crypto/pkcs12/p12_npas.o" => + [ + "crypto/pkcs12/p12_npas.c", + ], + "crypto/pkcs12/p12_p8d.o" => + [ + "crypto/pkcs12/p12_p8d.c", + ], + "crypto/pkcs12/p12_p8e.o" => + [ + "crypto/pkcs12/p12_p8e.c", + ], + "crypto/pkcs12/p12_sbag.o" => + [ + "crypto/pkcs12/p12_sbag.c", + ], + "crypto/pkcs12/p12_utl.o" => + [ + "crypto/pkcs12/p12_utl.c", + ], + "crypto/pkcs12/pk12err.o" => + [ + "crypto/pkcs12/pk12err.c", + ], + "crypto/pkcs7/bio_pk7.o" => + [ + "crypto/pkcs7/bio_pk7.c", + ], + "crypto/pkcs7/pk7_asn1.o" => + [ + "crypto/pkcs7/pk7_asn1.c", + ], + "crypto/pkcs7/pk7_attr.o" => + [ + "crypto/pkcs7/pk7_attr.c", + ], + "crypto/pkcs7/pk7_doit.o" => + [ + "crypto/pkcs7/pk7_doit.c", + ], + "crypto/pkcs7/pk7_lib.o" => + [ + "crypto/pkcs7/pk7_lib.c", + ], + "crypto/pkcs7/pk7_mime.o" => + [ + "crypto/pkcs7/pk7_mime.c", + ], + "crypto/pkcs7/pk7_smime.o" => + [ + "crypto/pkcs7/pk7_smime.c", + ], + "crypto/pkcs7/pkcs7err.o" => + [ + "crypto/pkcs7/pkcs7err.c", + ], + "crypto/poly1305/poly1305-armv8.o" => + [ + "crypto/poly1305/poly1305-armv8.S", + ], + "crypto/poly1305/poly1305.o" => + [ + "crypto/poly1305/poly1305.c", + ], + "crypto/poly1305/poly1305_ameth.o" => + [ + "crypto/poly1305/poly1305_ameth.c", + ], + "crypto/poly1305/poly1305_pmeth.o" => + [ + "crypto/poly1305/poly1305_pmeth.c", + ], + "crypto/rand/drbg_ctr.o" => + [ + "crypto/rand/drbg_ctr.c", + ], + "crypto/rand/drbg_lib.o" => + [ + "crypto/rand/drbg_lib.c", + ], + "crypto/rand/rand_egd.o" => + [ + "crypto/rand/rand_egd.c", + ], + "crypto/rand/rand_err.o" => + [ + "crypto/rand/rand_err.c", + ], + "crypto/rand/rand_lib.o" => + [ + "crypto/rand/rand_lib.c", + ], + "crypto/rand/rand_unix.o" => + [ + "crypto/rand/rand_unix.c", + ], + "crypto/rand/rand_vms.o" => + [ + "crypto/rand/rand_vms.c", + ], + "crypto/rand/rand_win.o" => + [ + "crypto/rand/rand_win.c", + ], + "crypto/rand/randfile.o" => + [ + "crypto/rand/randfile.c", + ], + "crypto/rc2/rc2_cbc.o" => + [ + "crypto/rc2/rc2_cbc.c", + ], + "crypto/rc2/rc2_ecb.o" => + [ + "crypto/rc2/rc2_ecb.c", + ], + "crypto/rc2/rc2_skey.o" => + [ + "crypto/rc2/rc2_skey.c", + ], + "crypto/rc2/rc2cfb64.o" => + [ + "crypto/rc2/rc2cfb64.c", + ], + "crypto/rc2/rc2ofb64.o" => + [ + "crypto/rc2/rc2ofb64.c", + ], + "crypto/rc4/rc4_enc.o" => + [ + "crypto/rc4/rc4_enc.c", + ], + "crypto/rc4/rc4_skey.o" => + [ + "crypto/rc4/rc4_skey.c", + ], + "crypto/ripemd/rmd_dgst.o" => + [ + "crypto/ripemd/rmd_dgst.c", + ], + "crypto/ripemd/rmd_one.o" => + [ + "crypto/ripemd/rmd_one.c", + ], + "crypto/rsa/rsa_ameth.o" => + [ + "crypto/rsa/rsa_ameth.c", + ], + "crypto/rsa/rsa_asn1.o" => + [ + "crypto/rsa/rsa_asn1.c", + ], + "crypto/rsa/rsa_chk.o" => + [ + "crypto/rsa/rsa_chk.c", + ], + "crypto/rsa/rsa_crpt.o" => + [ + "crypto/rsa/rsa_crpt.c", + ], + "crypto/rsa/rsa_depr.o" => + [ + "crypto/rsa/rsa_depr.c", + ], + "crypto/rsa/rsa_err.o" => + [ + "crypto/rsa/rsa_err.c", + ], + "crypto/rsa/rsa_gen.o" => + [ + "crypto/rsa/rsa_gen.c", + ], + "crypto/rsa/rsa_lib.o" => + [ + "crypto/rsa/rsa_lib.c", + ], + "crypto/rsa/rsa_meth.o" => + [ + "crypto/rsa/rsa_meth.c", + ], + "crypto/rsa/rsa_mp.o" => + [ + "crypto/rsa/rsa_mp.c", + ], + "crypto/rsa/rsa_none.o" => + [ + "crypto/rsa/rsa_none.c", + ], + "crypto/rsa/rsa_oaep.o" => + [ + "crypto/rsa/rsa_oaep.c", + ], + "crypto/rsa/rsa_ossl.o" => + [ + "crypto/rsa/rsa_ossl.c", + ], + "crypto/rsa/rsa_pk1.o" => + [ + "crypto/rsa/rsa_pk1.c", + ], + "crypto/rsa/rsa_pmeth.o" => + [ + "crypto/rsa/rsa_pmeth.c", + ], + "crypto/rsa/rsa_prn.o" => + [ + "crypto/rsa/rsa_prn.c", + ], + "crypto/rsa/rsa_pss.o" => + [ + "crypto/rsa/rsa_pss.c", + ], + "crypto/rsa/rsa_saos.o" => + [ + "crypto/rsa/rsa_saos.c", + ], + "crypto/rsa/rsa_sign.o" => + [ + "crypto/rsa/rsa_sign.c", + ], + "crypto/rsa/rsa_ssl.o" => + [ + "crypto/rsa/rsa_ssl.c", + ], + "crypto/rsa/rsa_x931.o" => + [ + "crypto/rsa/rsa_x931.c", + ], + "crypto/rsa/rsa_x931g.o" => + [ + "crypto/rsa/rsa_x931g.c", + ], + "crypto/seed/seed.o" => + [ + "crypto/seed/seed.c", + ], + "crypto/seed/seed_cbc.o" => + [ + "crypto/seed/seed_cbc.c", + ], + "crypto/seed/seed_cfb.o" => + [ + "crypto/seed/seed_cfb.c", + ], + "crypto/seed/seed_ecb.o" => + [ + "crypto/seed/seed_ecb.c", + ], + "crypto/seed/seed_ofb.o" => + [ + "crypto/seed/seed_ofb.c", + ], + "crypto/sha/keccak1600-armv8.o" => + [ + "crypto/sha/keccak1600-armv8.S", + ], + "crypto/sha/sha1-armv8.o" => + [ + "crypto/sha/sha1-armv8.S", + ], + "crypto/sha/sha1_one.o" => + [ + "crypto/sha/sha1_one.c", + ], + "crypto/sha/sha1dgst.o" => + [ + "crypto/sha/sha1dgst.c", + ], + "crypto/sha/sha256-armv8.o" => + [ + "crypto/sha/sha256-armv8.S", + ], + "crypto/sha/sha256.o" => + [ + "crypto/sha/sha256.c", + ], + "crypto/sha/sha512-armv8.o" => + [ + "crypto/sha/sha512-armv8.S", + ], + "crypto/sha/sha512.o" => + [ + "crypto/sha/sha512.c", + ], + "crypto/siphash/siphash.o" => + [ + "crypto/siphash/siphash.c", + ], + "crypto/siphash/siphash_ameth.o" => + [ + "crypto/siphash/siphash_ameth.c", + ], + "crypto/siphash/siphash_pmeth.o" => + [ + "crypto/siphash/siphash_pmeth.c", + ], + "crypto/sm2/sm2_crypt.o" => + [ + "crypto/sm2/sm2_crypt.c", + ], + "crypto/sm2/sm2_err.o" => + [ + "crypto/sm2/sm2_err.c", + ], + "crypto/sm2/sm2_pmeth.o" => + [ + "crypto/sm2/sm2_pmeth.c", + ], + "crypto/sm2/sm2_sign.o" => + [ + "crypto/sm2/sm2_sign.c", + ], + "crypto/sm3/m_sm3.o" => + [ + "crypto/sm3/m_sm3.c", + ], + "crypto/sm3/sm3.o" => + [ + "crypto/sm3/sm3.c", + ], + "crypto/sm4/sm4.o" => + [ + "crypto/sm4/sm4.c", + ], + "crypto/srp/srp_lib.o" => + [ + "crypto/srp/srp_lib.c", + ], + "crypto/srp/srp_vfy.o" => + [ + "crypto/srp/srp_vfy.c", + ], + "crypto/stack/stack.o" => + [ + "crypto/stack/stack.c", + ], + "crypto/store/loader_file.o" => + [ + "crypto/store/loader_file.c", + ], + "crypto/store/store_err.o" => + [ + "crypto/store/store_err.c", + ], + "crypto/store/store_init.o" => + [ + "crypto/store/store_init.c", + ], + "crypto/store/store_lib.o" => + [ + "crypto/store/store_lib.c", + ], + "crypto/store/store_register.o" => + [ + "crypto/store/store_register.c", + ], + "crypto/store/store_strings.o" => + [ + "crypto/store/store_strings.c", + ], + "crypto/threads_none.o" => + [ + "crypto/threads_none.c", + ], + "crypto/threads_pthread.o" => + [ + "crypto/threads_pthread.c", + ], + "crypto/threads_win.o" => + [ + "crypto/threads_win.c", + ], + "crypto/ts/ts_asn1.o" => + [ + "crypto/ts/ts_asn1.c", + ], + "crypto/ts/ts_conf.o" => + [ + "crypto/ts/ts_conf.c", + ], + "crypto/ts/ts_err.o" => + [ + "crypto/ts/ts_err.c", + ], + "crypto/ts/ts_lib.o" => + [ + "crypto/ts/ts_lib.c", + ], + "crypto/ts/ts_req_print.o" => + [ + "crypto/ts/ts_req_print.c", + ], + "crypto/ts/ts_req_utils.o" => + [ + "crypto/ts/ts_req_utils.c", + ], + "crypto/ts/ts_rsp_print.o" => + [ + "crypto/ts/ts_rsp_print.c", + ], + "crypto/ts/ts_rsp_sign.o" => + [ + "crypto/ts/ts_rsp_sign.c", + ], + "crypto/ts/ts_rsp_utils.o" => + [ + "crypto/ts/ts_rsp_utils.c", + ], + "crypto/ts/ts_rsp_verify.o" => + [ + "crypto/ts/ts_rsp_verify.c", + ], + "crypto/ts/ts_verify_ctx.o" => + [ + "crypto/ts/ts_verify_ctx.c", + ], + "crypto/txt_db/txt_db.o" => + [ + "crypto/txt_db/txt_db.c", + ], + "crypto/ui/ui_err.o" => + [ + "crypto/ui/ui_err.c", + ], + "crypto/ui/ui_lib.o" => + [ + "crypto/ui/ui_lib.c", + ], + "crypto/ui/ui_null.o" => + [ + "crypto/ui/ui_null.c", + ], + "crypto/ui/ui_openssl.o" => + [ + "crypto/ui/ui_openssl.c", + ], + "crypto/ui/ui_util.o" => + [ + "crypto/ui/ui_util.c", + ], + "crypto/uid.o" => + [ + "crypto/uid.c", + ], + "crypto/whrlpool/wp_block.o" => + [ + "crypto/whrlpool/wp_block.c", + ], + "crypto/whrlpool/wp_dgst.o" => + [ + "crypto/whrlpool/wp_dgst.c", + ], + "crypto/x509/by_dir.o" => + [ + "crypto/x509/by_dir.c", + ], + "crypto/x509/by_file.o" => + [ + "crypto/x509/by_file.c", + ], + "crypto/x509/t_crl.o" => + [ + "crypto/x509/t_crl.c", + ], + "crypto/x509/t_req.o" => + [ + "crypto/x509/t_req.c", + ], + "crypto/x509/t_x509.o" => + [ + "crypto/x509/t_x509.c", + ], + "crypto/x509/x509_att.o" => + [ + "crypto/x509/x509_att.c", + ], + "crypto/x509/x509_cmp.o" => + [ + "crypto/x509/x509_cmp.c", + ], + "crypto/x509/x509_d2.o" => + [ + "crypto/x509/x509_d2.c", + ], + "crypto/x509/x509_def.o" => + [ + "crypto/x509/x509_def.c", + ], + "crypto/x509/x509_err.o" => + [ + "crypto/x509/x509_err.c", + ], + "crypto/x509/x509_ext.o" => + [ + "crypto/x509/x509_ext.c", + ], + "crypto/x509/x509_lu.o" => + [ + "crypto/x509/x509_lu.c", + ], + "crypto/x509/x509_meth.o" => + [ + "crypto/x509/x509_meth.c", + ], + "crypto/x509/x509_obj.o" => + [ + "crypto/x509/x509_obj.c", + ], + "crypto/x509/x509_r2x.o" => + [ + "crypto/x509/x509_r2x.c", + ], + "crypto/x509/x509_req.o" => + [ + "crypto/x509/x509_req.c", + ], + "crypto/x509/x509_set.o" => + [ + "crypto/x509/x509_set.c", + ], + "crypto/x509/x509_trs.o" => + [ + "crypto/x509/x509_trs.c", + ], + "crypto/x509/x509_txt.o" => + [ + "crypto/x509/x509_txt.c", + ], + "crypto/x509/x509_v3.o" => + [ + "crypto/x509/x509_v3.c", + ], + "crypto/x509/x509_vfy.o" => + [ + "crypto/x509/x509_vfy.c", + ], + "crypto/x509/x509_vpm.o" => + [ + "crypto/x509/x509_vpm.c", + ], + "crypto/x509/x509cset.o" => + [ + "crypto/x509/x509cset.c", + ], + "crypto/x509/x509name.o" => + [ + "crypto/x509/x509name.c", + ], + "crypto/x509/x509rset.o" => + [ + "crypto/x509/x509rset.c", + ], + "crypto/x509/x509spki.o" => + [ + "crypto/x509/x509spki.c", + ], + "crypto/x509/x509type.o" => + [ + "crypto/x509/x509type.c", + ], + "crypto/x509/x_all.o" => + [ + "crypto/x509/x_all.c", + ], + "crypto/x509/x_attrib.o" => + [ + "crypto/x509/x_attrib.c", + ], + "crypto/x509/x_crl.o" => + [ + "crypto/x509/x_crl.c", + ], + "crypto/x509/x_exten.o" => + [ + "crypto/x509/x_exten.c", + ], + "crypto/x509/x_name.o" => + [ + "crypto/x509/x_name.c", + ], + "crypto/x509/x_pubkey.o" => + [ + "crypto/x509/x_pubkey.c", + ], + "crypto/x509/x_req.o" => + [ + "crypto/x509/x_req.c", + ], + "crypto/x509/x_x509.o" => + [ + "crypto/x509/x_x509.c", + ], + "crypto/x509/x_x509a.o" => + [ + "crypto/x509/x_x509a.c", + ], + "crypto/x509v3/pcy_cache.o" => + [ + "crypto/x509v3/pcy_cache.c", + ], + "crypto/x509v3/pcy_data.o" => + [ + "crypto/x509v3/pcy_data.c", + ], + "crypto/x509v3/pcy_lib.o" => + [ + "crypto/x509v3/pcy_lib.c", + ], + "crypto/x509v3/pcy_map.o" => + [ + "crypto/x509v3/pcy_map.c", + ], + "crypto/x509v3/pcy_node.o" => + [ + "crypto/x509v3/pcy_node.c", + ], + "crypto/x509v3/pcy_tree.o" => + [ + "crypto/x509v3/pcy_tree.c", + ], + "crypto/x509v3/v3_addr.o" => + [ + "crypto/x509v3/v3_addr.c", + ], + "crypto/x509v3/v3_admis.o" => + [ + "crypto/x509v3/v3_admis.c", + ], + "crypto/x509v3/v3_akey.o" => + [ + "crypto/x509v3/v3_akey.c", + ], + "crypto/x509v3/v3_akeya.o" => + [ + "crypto/x509v3/v3_akeya.c", + ], + "crypto/x509v3/v3_alt.o" => + [ + "crypto/x509v3/v3_alt.c", + ], + "crypto/x509v3/v3_asid.o" => + [ + "crypto/x509v3/v3_asid.c", + ], + "crypto/x509v3/v3_bcons.o" => + [ + "crypto/x509v3/v3_bcons.c", + ], + "crypto/x509v3/v3_bitst.o" => + [ + "crypto/x509v3/v3_bitst.c", + ], + "crypto/x509v3/v3_conf.o" => + [ + "crypto/x509v3/v3_conf.c", + ], + "crypto/x509v3/v3_cpols.o" => + [ + "crypto/x509v3/v3_cpols.c", + ], + "crypto/x509v3/v3_crld.o" => + [ + "crypto/x509v3/v3_crld.c", + ], + "crypto/x509v3/v3_enum.o" => + [ + "crypto/x509v3/v3_enum.c", + ], + "crypto/x509v3/v3_extku.o" => + [ + "crypto/x509v3/v3_extku.c", + ], + "crypto/x509v3/v3_genn.o" => + [ + "crypto/x509v3/v3_genn.c", + ], + "crypto/x509v3/v3_ia5.o" => + [ + "crypto/x509v3/v3_ia5.c", + ], + "crypto/x509v3/v3_info.o" => + [ + "crypto/x509v3/v3_info.c", + ], + "crypto/x509v3/v3_int.o" => + [ + "crypto/x509v3/v3_int.c", + ], + "crypto/x509v3/v3_lib.o" => + [ + "crypto/x509v3/v3_lib.c", + ], + "crypto/x509v3/v3_ncons.o" => + [ + "crypto/x509v3/v3_ncons.c", + ], + "crypto/x509v3/v3_pci.o" => + [ + "crypto/x509v3/v3_pci.c", + ], + "crypto/x509v3/v3_pcia.o" => + [ + "crypto/x509v3/v3_pcia.c", + ], + "crypto/x509v3/v3_pcons.o" => + [ + "crypto/x509v3/v3_pcons.c", + ], + "crypto/x509v3/v3_pku.o" => + [ + "crypto/x509v3/v3_pku.c", + ], + "crypto/x509v3/v3_pmaps.o" => + [ + "crypto/x509v3/v3_pmaps.c", + ], + "crypto/x509v3/v3_prn.o" => + [ + "crypto/x509v3/v3_prn.c", + ], + "crypto/x509v3/v3_purp.o" => + [ + "crypto/x509v3/v3_purp.c", + ], + "crypto/x509v3/v3_skey.o" => + [ + "crypto/x509v3/v3_skey.c", + ], + "crypto/x509v3/v3_sxnet.o" => + [ + "crypto/x509v3/v3_sxnet.c", + ], + "crypto/x509v3/v3_tlsf.o" => + [ + "crypto/x509v3/v3_tlsf.c", + ], + "crypto/x509v3/v3_utl.o" => + [ + "crypto/x509v3/v3_utl.c", + ], + "crypto/x509v3/v3err.o" => + [ + "crypto/x509v3/v3err.c", + ], + "engines/e_capi.o" => + [ + "engines/e_capi.c", + ], + "engines/e_padlock.o" => + [ + "engines/e_padlock.c", + ], + "fuzz/asn1-test" => + [ + "fuzz/asn1.o", + "fuzz/test-corpus.o", + ], + "fuzz/asn1.o" => + [ + "fuzz/asn1.c", + ], + "fuzz/asn1parse-test" => + [ + "fuzz/asn1parse.o", + "fuzz/test-corpus.o", + ], + "fuzz/asn1parse.o" => + [ + "fuzz/asn1parse.c", + ], + "fuzz/bignum-test" => + [ + "fuzz/bignum.o", + "fuzz/test-corpus.o", + ], + "fuzz/bignum.o" => + [ + "fuzz/bignum.c", + ], + "fuzz/bndiv-test" => + [ + "fuzz/bndiv.o", + "fuzz/test-corpus.o", + ], + "fuzz/bndiv.o" => + [ + "fuzz/bndiv.c", + ], + "fuzz/client-test" => + [ + "fuzz/client.o", + "fuzz/test-corpus.o", + ], + "fuzz/client.o" => + [ + "fuzz/client.c", + ], + "fuzz/cms-test" => + [ + "fuzz/cms.o", + "fuzz/test-corpus.o", + ], + "fuzz/cms.o" => + [ + "fuzz/cms.c", + ], + "fuzz/conf-test" => + [ + "fuzz/conf.o", + "fuzz/test-corpus.o", + ], + "fuzz/conf.o" => + [ + "fuzz/conf.c", + ], + "fuzz/crl-test" => + [ + "fuzz/crl.o", + "fuzz/test-corpus.o", + ], + "fuzz/crl.o" => + [ + "fuzz/crl.c", + ], + "fuzz/ct-test" => + [ + "fuzz/ct.o", + "fuzz/test-corpus.o", + ], + "fuzz/ct.o" => + [ + "fuzz/ct.c", + ], + "fuzz/server-test" => + [ + "fuzz/server.o", + "fuzz/test-corpus.o", + ], + "fuzz/server.o" => + [ + "fuzz/server.c", + ], + "fuzz/test-corpus.o" => + [ + "fuzz/test-corpus.c", + ], + "fuzz/x509-test" => + [ + "fuzz/test-corpus.o", + "fuzz/x509.o", + ], + "fuzz/x509.o" => + [ + "fuzz/x509.c", + ], + "libcrypto" => + [ + "crypto/aes/aes_cbc.o", + "crypto/aes/aes_cfb.o", + "crypto/aes/aes_core.o", + "crypto/aes/aes_ecb.o", + "crypto/aes/aes_ige.o", + "crypto/aes/aes_misc.o", + "crypto/aes/aes_ofb.o", + "crypto/aes/aes_wrap.o", + "crypto/aes/aesv8-armx.o", + "crypto/aes/vpaes-armv8.o", + "crypto/aria/aria.o", + "crypto/arm64cpuid.o", + "crypto/armcap.o", + "crypto/asn1/a_bitstr.o", + "crypto/asn1/a_d2i_fp.o", + "crypto/asn1/a_digest.o", + "crypto/asn1/a_dup.o", + "crypto/asn1/a_gentm.o", + "crypto/asn1/a_i2d_fp.o", + "crypto/asn1/a_int.o", + "crypto/asn1/a_mbstr.o", + "crypto/asn1/a_object.o", + "crypto/asn1/a_octet.o", + "crypto/asn1/a_print.o", + "crypto/asn1/a_sign.o", + "crypto/asn1/a_strex.o", + "crypto/asn1/a_strnid.o", + "crypto/asn1/a_time.o", + "crypto/asn1/a_type.o", + "crypto/asn1/a_utctm.o", + "crypto/asn1/a_utf8.o", + "crypto/asn1/a_verify.o", + "crypto/asn1/ameth_lib.o", + "crypto/asn1/asn1_err.o", + "crypto/asn1/asn1_gen.o", + "crypto/asn1/asn1_item_list.o", + "crypto/asn1/asn1_lib.o", + "crypto/asn1/asn1_par.o", + "crypto/asn1/asn_mime.o", + "crypto/asn1/asn_moid.o", + "crypto/asn1/asn_mstbl.o", + "crypto/asn1/asn_pack.o", + "crypto/asn1/bio_asn1.o", + "crypto/asn1/bio_ndef.o", + "crypto/asn1/d2i_pr.o", + "crypto/asn1/d2i_pu.o", + "crypto/asn1/evp_asn1.o", + "crypto/asn1/f_int.o", + "crypto/asn1/f_string.o", + "crypto/asn1/i2d_pr.o", + "crypto/asn1/i2d_pu.o", + "crypto/asn1/n_pkey.o", + "crypto/asn1/nsseq.o", + "crypto/asn1/p5_pbe.o", + "crypto/asn1/p5_pbev2.o", + "crypto/asn1/p5_scrypt.o", + "crypto/asn1/p8_pkey.o", + "crypto/asn1/t_bitst.o", + "crypto/asn1/t_pkey.o", + "crypto/asn1/t_spki.o", + "crypto/asn1/tasn_dec.o", + "crypto/asn1/tasn_enc.o", + "crypto/asn1/tasn_fre.o", + "crypto/asn1/tasn_new.o", + "crypto/asn1/tasn_prn.o", + "crypto/asn1/tasn_scn.o", + "crypto/asn1/tasn_typ.o", + "crypto/asn1/tasn_utl.o", + "crypto/asn1/x_algor.o", + "crypto/asn1/x_bignum.o", + "crypto/asn1/x_info.o", + "crypto/asn1/x_int64.o", + "crypto/asn1/x_long.o", + "crypto/asn1/x_pkey.o", + "crypto/asn1/x_sig.o", + "crypto/asn1/x_spki.o", + "crypto/asn1/x_val.o", + "crypto/async/arch/async_null.o", + "crypto/async/arch/async_posix.o", + "crypto/async/arch/async_win.o", + "crypto/async/async.o", + "crypto/async/async_err.o", + "crypto/async/async_wait.o", + "crypto/bf/bf_cfb64.o", + "crypto/bf/bf_ecb.o", + "crypto/bf/bf_enc.o", + "crypto/bf/bf_ofb64.o", + "crypto/bf/bf_skey.o", + "crypto/bio/b_addr.o", + "crypto/bio/b_dump.o", + "crypto/bio/b_print.o", + "crypto/bio/b_sock.o", + "crypto/bio/b_sock2.o", + "crypto/bio/bf_buff.o", + "crypto/bio/bf_lbuf.o", + "crypto/bio/bf_nbio.o", + "crypto/bio/bf_null.o", + "crypto/bio/bio_cb.o", + "crypto/bio/bio_err.o", + "crypto/bio/bio_lib.o", + "crypto/bio/bio_meth.o", + "crypto/bio/bss_acpt.o", + "crypto/bio/bss_bio.o", + "crypto/bio/bss_conn.o", + "crypto/bio/bss_dgram.o", + "crypto/bio/bss_fd.o", + "crypto/bio/bss_file.o", + "crypto/bio/bss_log.o", + "crypto/bio/bss_mem.o", + "crypto/bio/bss_null.o", + "crypto/bio/bss_sock.o", + "crypto/blake2/blake2b.o", + "crypto/blake2/blake2s.o", + "crypto/blake2/m_blake2b.o", + "crypto/blake2/m_blake2s.o", + "crypto/bn/armv8-mont.o", + "crypto/bn/bn_add.o", + "crypto/bn/bn_asm.o", + "crypto/bn/bn_blind.o", + "crypto/bn/bn_const.o", + "crypto/bn/bn_ctx.o", + "crypto/bn/bn_depr.o", + "crypto/bn/bn_dh.o", + "crypto/bn/bn_div.o", + "crypto/bn/bn_err.o", + "crypto/bn/bn_exp.o", + "crypto/bn/bn_exp2.o", + "crypto/bn/bn_gcd.o", + "crypto/bn/bn_gf2m.o", + "crypto/bn/bn_intern.o", + "crypto/bn/bn_kron.o", + "crypto/bn/bn_lib.o", + "crypto/bn/bn_mod.o", + "crypto/bn/bn_mont.o", + "crypto/bn/bn_mpi.o", + "crypto/bn/bn_mul.o", + "crypto/bn/bn_nist.o", + "crypto/bn/bn_prime.o", + "crypto/bn/bn_print.o", + "crypto/bn/bn_rand.o", + "crypto/bn/bn_recp.o", + "crypto/bn/bn_shift.o", + "crypto/bn/bn_sqr.o", + "crypto/bn/bn_sqrt.o", + "crypto/bn/bn_srp.o", + "crypto/bn/bn_word.o", + "crypto/bn/bn_x931p.o", + "crypto/buffer/buf_err.o", + "crypto/buffer/buffer.o", + "crypto/camellia/camellia.o", + "crypto/camellia/cmll_cbc.o", + "crypto/camellia/cmll_cfb.o", + "crypto/camellia/cmll_ctr.o", + "crypto/camellia/cmll_ecb.o", + "crypto/camellia/cmll_misc.o", + "crypto/camellia/cmll_ofb.o", + "crypto/cast/c_cfb64.o", + "crypto/cast/c_ecb.o", + "crypto/cast/c_enc.o", + "crypto/cast/c_ofb64.o", + "crypto/cast/c_skey.o", + "crypto/chacha/chacha-armv8.o", + "crypto/cmac/cm_ameth.o", + "crypto/cmac/cm_pmeth.o", + "crypto/cmac/cmac.o", + "crypto/cms/cms_asn1.o", + "crypto/cms/cms_att.o", + "crypto/cms/cms_cd.o", + "crypto/cms/cms_dd.o", + "crypto/cms/cms_enc.o", + "crypto/cms/cms_env.o", + "crypto/cms/cms_err.o", + "crypto/cms/cms_ess.o", + "crypto/cms/cms_io.o", + "crypto/cms/cms_kari.o", + "crypto/cms/cms_lib.o", + "crypto/cms/cms_pwri.o", + "crypto/cms/cms_sd.o", + "crypto/cms/cms_smime.o", + "crypto/conf/conf_api.o", + "crypto/conf/conf_def.o", + "crypto/conf/conf_err.o", + "crypto/conf/conf_lib.o", + "crypto/conf/conf_mall.o", + "crypto/conf/conf_mod.o", + "crypto/conf/conf_sap.o", + "crypto/conf/conf_ssl.o", + "crypto/cpt_err.o", + "crypto/cryptlib.o", + "crypto/ct/ct_b64.o", + "crypto/ct/ct_err.o", + "crypto/ct/ct_log.o", + "crypto/ct/ct_oct.o", + "crypto/ct/ct_policy.o", + "crypto/ct/ct_prn.o", + "crypto/ct/ct_sct.o", + "crypto/ct/ct_sct_ctx.o", + "crypto/ct/ct_vfy.o", + "crypto/ct/ct_x509v3.o", + "crypto/ctype.o", + "crypto/cversion.o", + "crypto/des/cbc_cksm.o", + "crypto/des/cbc_enc.o", + "crypto/des/cfb64ede.o", + "crypto/des/cfb64enc.o", + "crypto/des/cfb_enc.o", + "crypto/des/des_enc.o", + "crypto/des/ecb3_enc.o", + "crypto/des/ecb_enc.o", + "crypto/des/fcrypt.o", + "crypto/des/fcrypt_b.o", + "crypto/des/ofb64ede.o", + "crypto/des/ofb64enc.o", + "crypto/des/ofb_enc.o", + "crypto/des/pcbc_enc.o", + "crypto/des/qud_cksm.o", + "crypto/des/rand_key.o", + "crypto/des/set_key.o", + "crypto/des/str2key.o", + "crypto/des/xcbc_enc.o", + "crypto/dh/dh_ameth.o", + "crypto/dh/dh_asn1.o", + "crypto/dh/dh_check.o", + "crypto/dh/dh_depr.o", + "crypto/dh/dh_err.o", + "crypto/dh/dh_gen.o", + "crypto/dh/dh_kdf.o", + "crypto/dh/dh_key.o", + "crypto/dh/dh_lib.o", + "crypto/dh/dh_meth.o", + "crypto/dh/dh_pmeth.o", + "crypto/dh/dh_prn.o", + "crypto/dh/dh_rfc5114.o", + "crypto/dh/dh_rfc7919.o", + "crypto/dsa/dsa_ameth.o", + "crypto/dsa/dsa_asn1.o", + "crypto/dsa/dsa_depr.o", + "crypto/dsa/dsa_err.o", + "crypto/dsa/dsa_gen.o", + "crypto/dsa/dsa_key.o", + "crypto/dsa/dsa_lib.o", + "crypto/dsa/dsa_meth.o", + "crypto/dsa/dsa_ossl.o", + "crypto/dsa/dsa_pmeth.o", + "crypto/dsa/dsa_prn.o", + "crypto/dsa/dsa_sign.o", + "crypto/dsa/dsa_vrf.o", + "crypto/dso/dso_dl.o", + "crypto/dso/dso_dlfcn.o", + "crypto/dso/dso_err.o", + "crypto/dso/dso_lib.o", + "crypto/dso/dso_openssl.o", + "crypto/dso/dso_vms.o", + "crypto/dso/dso_win32.o", + "crypto/ebcdic.o", + "crypto/ec/curve25519.o", + "crypto/ec/curve448/arch_32/f_impl.o", + "crypto/ec/curve448/curve448.o", + "crypto/ec/curve448/curve448_tables.o", + "crypto/ec/curve448/eddsa.o", + "crypto/ec/curve448/f_generic.o", + "crypto/ec/curve448/scalar.o", + "crypto/ec/ec2_oct.o", + "crypto/ec/ec2_smpl.o", + "crypto/ec/ec_ameth.o", + "crypto/ec/ec_asn1.o", + "crypto/ec/ec_check.o", + "crypto/ec/ec_curve.o", + "crypto/ec/ec_cvt.o", + "crypto/ec/ec_err.o", + "crypto/ec/ec_key.o", + "crypto/ec/ec_kmeth.o", + "crypto/ec/ec_lib.o", + "crypto/ec/ec_mult.o", + "crypto/ec/ec_oct.o", + "crypto/ec/ec_pmeth.o", + "crypto/ec/ec_print.o", + "crypto/ec/ecdh_kdf.o", + "crypto/ec/ecdh_ossl.o", + "crypto/ec/ecdsa_ossl.o", + "crypto/ec/ecdsa_sign.o", + "crypto/ec/ecdsa_vrf.o", + "crypto/ec/eck_prn.o", + "crypto/ec/ecp_mont.o", + "crypto/ec/ecp_nist.o", + "crypto/ec/ecp_nistp224.o", + "crypto/ec/ecp_nistp256.o", + "crypto/ec/ecp_nistp521.o", + "crypto/ec/ecp_nistputil.o", + "crypto/ec/ecp_nistz256-armv8.o", + "crypto/ec/ecp_nistz256.o", + "crypto/ec/ecp_oct.o", + "crypto/ec/ecp_smpl.o", + "crypto/ec/ecx_meth.o", + "crypto/engine/eng_all.o", + "crypto/engine/eng_cnf.o", + "crypto/engine/eng_ctrl.o", + "crypto/engine/eng_dyn.o", + "crypto/engine/eng_err.o", + "crypto/engine/eng_fat.o", + "crypto/engine/eng_init.o", + "crypto/engine/eng_lib.o", + "crypto/engine/eng_list.o", + "crypto/engine/eng_openssl.o", + "crypto/engine/eng_pkey.o", + "crypto/engine/eng_rdrand.o", + "crypto/engine/eng_table.o", + "crypto/engine/tb_asnmth.o", + "crypto/engine/tb_cipher.o", + "crypto/engine/tb_dh.o", + "crypto/engine/tb_digest.o", + "crypto/engine/tb_dsa.o", + "crypto/engine/tb_eckey.o", + "crypto/engine/tb_pkmeth.o", + "crypto/engine/tb_rand.o", + "crypto/engine/tb_rsa.o", + "crypto/err/err.o", + "crypto/err/err_all.o", + "crypto/err/err_prn.o", + "crypto/evp/bio_b64.o", + "crypto/evp/bio_enc.o", + "crypto/evp/bio_md.o", + "crypto/evp/bio_ok.o", + "crypto/evp/c_allc.o", + "crypto/evp/c_alld.o", + "crypto/evp/cmeth_lib.o", + "crypto/evp/digest.o", + "crypto/evp/e_aes.o", + "crypto/evp/e_aes_cbc_hmac_sha1.o", + "crypto/evp/e_aes_cbc_hmac_sha256.o", + "crypto/evp/e_aria.o", + "crypto/evp/e_bf.o", + "crypto/evp/e_camellia.o", + "crypto/evp/e_cast.o", + "crypto/evp/e_chacha20_poly1305.o", + "crypto/evp/e_des.o", + "crypto/evp/e_des3.o", + "crypto/evp/e_idea.o", + "crypto/evp/e_null.o", + "crypto/evp/e_old.o", + "crypto/evp/e_rc2.o", + "crypto/evp/e_rc4.o", + "crypto/evp/e_rc4_hmac_md5.o", + "crypto/evp/e_rc5.o", + "crypto/evp/e_seed.o", + "crypto/evp/e_sm4.o", + "crypto/evp/e_xcbc_d.o", + "crypto/evp/encode.o", + "crypto/evp/evp_cnf.o", + "crypto/evp/evp_enc.o", + "crypto/evp/evp_err.o", + "crypto/evp/evp_key.o", + "crypto/evp/evp_lib.o", + "crypto/evp/evp_pbe.o", + "crypto/evp/evp_pkey.o", + "crypto/evp/m_md2.o", + "crypto/evp/m_md4.o", + "crypto/evp/m_md5.o", + "crypto/evp/m_md5_sha1.o", + "crypto/evp/m_mdc2.o", + "crypto/evp/m_null.o", + "crypto/evp/m_ripemd.o", + "crypto/evp/m_sha1.o", + "crypto/evp/m_sha3.o", + "crypto/evp/m_sigver.o", + "crypto/evp/m_wp.o", + "crypto/evp/names.o", + "crypto/evp/p5_crpt.o", + "crypto/evp/p5_crpt2.o", + "crypto/evp/p_dec.o", + "crypto/evp/p_enc.o", + "crypto/evp/p_lib.o", + "crypto/evp/p_open.o", + "crypto/evp/p_seal.o", + "crypto/evp/p_sign.o", + "crypto/evp/p_verify.o", + "crypto/evp/pbe_scrypt.o", + "crypto/evp/pmeth_fn.o", + "crypto/evp/pmeth_gn.o", + "crypto/evp/pmeth_lib.o", + "crypto/ex_data.o", + "crypto/getenv.o", + "crypto/hmac/hm_ameth.o", + "crypto/hmac/hm_pmeth.o", + "crypto/hmac/hmac.o", + "crypto/idea/i_cbc.o", + "crypto/idea/i_cfb64.o", + "crypto/idea/i_ecb.o", + "crypto/idea/i_ofb64.o", + "crypto/idea/i_skey.o", + "crypto/init.o", + "crypto/kdf/hkdf.o", + "crypto/kdf/kdf_err.o", + "crypto/kdf/scrypt.o", + "crypto/kdf/tls1_prf.o", + "crypto/lhash/lh_stats.o", + "crypto/lhash/lhash.o", + "crypto/md4/md4_dgst.o", + "crypto/md4/md4_one.o", + "crypto/md5/md5_dgst.o", + "crypto/md5/md5_one.o", + "crypto/mdc2/mdc2_one.o", + "crypto/mdc2/mdc2dgst.o", + "crypto/mem.o", + "crypto/mem_dbg.o", + "crypto/mem_sec.o", + "crypto/modes/cbc128.o", + "crypto/modes/ccm128.o", + "crypto/modes/cfb128.o", + "crypto/modes/ctr128.o", + "crypto/modes/cts128.o", + "crypto/modes/gcm128.o", + "crypto/modes/ghashv8-armx.o", + "crypto/modes/ocb128.o", + "crypto/modes/ofb128.o", + "crypto/modes/wrap128.o", + "crypto/modes/xts128.o", + "crypto/o_dir.o", + "crypto/o_fips.o", + "crypto/o_fopen.o", + "crypto/o_init.o", + "crypto/o_str.o", + "crypto/o_time.o", + "crypto/objects/o_names.o", + "crypto/objects/obj_dat.o", + "crypto/objects/obj_err.o", + "crypto/objects/obj_lib.o", + "crypto/objects/obj_xref.o", + "crypto/ocsp/ocsp_asn.o", + "crypto/ocsp/ocsp_cl.o", + "crypto/ocsp/ocsp_err.o", + "crypto/ocsp/ocsp_ext.o", + "crypto/ocsp/ocsp_ht.o", + "crypto/ocsp/ocsp_lib.o", + "crypto/ocsp/ocsp_prn.o", + "crypto/ocsp/ocsp_srv.o", + "crypto/ocsp/ocsp_vfy.o", + "crypto/ocsp/v3_ocsp.o", + "crypto/pem/pem_all.o", + "crypto/pem/pem_err.o", + "crypto/pem/pem_info.o", + "crypto/pem/pem_lib.o", + "crypto/pem/pem_oth.o", + "crypto/pem/pem_pk8.o", + "crypto/pem/pem_pkey.o", + "crypto/pem/pem_sign.o", + "crypto/pem/pem_x509.o", + "crypto/pem/pem_xaux.o", + "crypto/pem/pvkfmt.o", + "crypto/pkcs12/p12_add.o", + "crypto/pkcs12/p12_asn.o", + "crypto/pkcs12/p12_attr.o", + "crypto/pkcs12/p12_crpt.o", + "crypto/pkcs12/p12_crt.o", + "crypto/pkcs12/p12_decr.o", + "crypto/pkcs12/p12_init.o", + "crypto/pkcs12/p12_key.o", + "crypto/pkcs12/p12_kiss.o", + "crypto/pkcs12/p12_mutl.o", + "crypto/pkcs12/p12_npas.o", + "crypto/pkcs12/p12_p8d.o", + "crypto/pkcs12/p12_p8e.o", + "crypto/pkcs12/p12_sbag.o", + "crypto/pkcs12/p12_utl.o", + "crypto/pkcs12/pk12err.o", + "crypto/pkcs7/bio_pk7.o", + "crypto/pkcs7/pk7_asn1.o", + "crypto/pkcs7/pk7_attr.o", + "crypto/pkcs7/pk7_doit.o", + "crypto/pkcs7/pk7_lib.o", + "crypto/pkcs7/pk7_mime.o", + "crypto/pkcs7/pk7_smime.o", + "crypto/pkcs7/pkcs7err.o", + "crypto/poly1305/poly1305-armv8.o", + "crypto/poly1305/poly1305.o", + "crypto/poly1305/poly1305_ameth.o", + "crypto/poly1305/poly1305_pmeth.o", + "crypto/rand/drbg_ctr.o", + "crypto/rand/drbg_lib.o", + "crypto/rand/rand_egd.o", + "crypto/rand/rand_err.o", + "crypto/rand/rand_lib.o", + "crypto/rand/rand_unix.o", + "crypto/rand/rand_vms.o", + "crypto/rand/rand_win.o", + "crypto/rand/randfile.o", + "crypto/rc2/rc2_cbc.o", + "crypto/rc2/rc2_ecb.o", + "crypto/rc2/rc2_skey.o", + "crypto/rc2/rc2cfb64.o", + "crypto/rc2/rc2ofb64.o", + "crypto/rc4/rc4_enc.o", + "crypto/rc4/rc4_skey.o", + "crypto/ripemd/rmd_dgst.o", + "crypto/ripemd/rmd_one.o", + "crypto/rsa/rsa_ameth.o", + "crypto/rsa/rsa_asn1.o", + "crypto/rsa/rsa_chk.o", + "crypto/rsa/rsa_crpt.o", + "crypto/rsa/rsa_depr.o", + "crypto/rsa/rsa_err.o", + "crypto/rsa/rsa_gen.o", + "crypto/rsa/rsa_lib.o", + "crypto/rsa/rsa_meth.o", + "crypto/rsa/rsa_mp.o", + "crypto/rsa/rsa_none.o", + "crypto/rsa/rsa_oaep.o", + "crypto/rsa/rsa_ossl.o", + "crypto/rsa/rsa_pk1.o", + "crypto/rsa/rsa_pmeth.o", + "crypto/rsa/rsa_prn.o", + "crypto/rsa/rsa_pss.o", + "crypto/rsa/rsa_saos.o", + "crypto/rsa/rsa_sign.o", + "crypto/rsa/rsa_ssl.o", + "crypto/rsa/rsa_x931.o", + "crypto/rsa/rsa_x931g.o", + "crypto/seed/seed.o", + "crypto/seed/seed_cbc.o", + "crypto/seed/seed_cfb.o", + "crypto/seed/seed_ecb.o", + "crypto/seed/seed_ofb.o", + "crypto/sha/keccak1600-armv8.o", + "crypto/sha/sha1-armv8.o", + "crypto/sha/sha1_one.o", + "crypto/sha/sha1dgst.o", + "crypto/sha/sha256-armv8.o", + "crypto/sha/sha256.o", + "crypto/sha/sha512-armv8.o", + "crypto/sha/sha512.o", + "crypto/siphash/siphash.o", + "crypto/siphash/siphash_ameth.o", + "crypto/siphash/siphash_pmeth.o", + "crypto/sm2/sm2_crypt.o", + "crypto/sm2/sm2_err.o", + "crypto/sm2/sm2_pmeth.o", + "crypto/sm2/sm2_sign.o", + "crypto/sm3/m_sm3.o", + "crypto/sm3/sm3.o", + "crypto/sm4/sm4.o", + "crypto/srp/srp_lib.o", + "crypto/srp/srp_vfy.o", + "crypto/stack/stack.o", + "crypto/store/loader_file.o", + "crypto/store/store_err.o", + "crypto/store/store_init.o", + "crypto/store/store_lib.o", + "crypto/store/store_register.o", + "crypto/store/store_strings.o", + "crypto/threads_none.o", + "crypto/threads_pthread.o", + "crypto/threads_win.o", + "crypto/ts/ts_asn1.o", + "crypto/ts/ts_conf.o", + "crypto/ts/ts_err.o", + "crypto/ts/ts_lib.o", + "crypto/ts/ts_req_print.o", + "crypto/ts/ts_req_utils.o", + "crypto/ts/ts_rsp_print.o", + "crypto/ts/ts_rsp_sign.o", + "crypto/ts/ts_rsp_utils.o", + "crypto/ts/ts_rsp_verify.o", + "crypto/ts/ts_verify_ctx.o", + "crypto/txt_db/txt_db.o", + "crypto/ui/ui_err.o", + "crypto/ui/ui_lib.o", + "crypto/ui/ui_null.o", + "crypto/ui/ui_openssl.o", + "crypto/ui/ui_util.o", + "crypto/uid.o", + "crypto/whrlpool/wp_block.o", + "crypto/whrlpool/wp_dgst.o", + "crypto/x509/by_dir.o", + "crypto/x509/by_file.o", + "crypto/x509/t_crl.o", + "crypto/x509/t_req.o", + "crypto/x509/t_x509.o", + "crypto/x509/x509_att.o", + "crypto/x509/x509_cmp.o", + "crypto/x509/x509_d2.o", + "crypto/x509/x509_def.o", + "crypto/x509/x509_err.o", + "crypto/x509/x509_ext.o", + "crypto/x509/x509_lu.o", + "crypto/x509/x509_meth.o", + "crypto/x509/x509_obj.o", + "crypto/x509/x509_r2x.o", + "crypto/x509/x509_req.o", + "crypto/x509/x509_set.o", + "crypto/x509/x509_trs.o", + "crypto/x509/x509_txt.o", + "crypto/x509/x509_v3.o", + "crypto/x509/x509_vfy.o", + "crypto/x509/x509_vpm.o", + "crypto/x509/x509cset.o", + "crypto/x509/x509name.o", + "crypto/x509/x509rset.o", + "crypto/x509/x509spki.o", + "crypto/x509/x509type.o", + "crypto/x509/x_all.o", + "crypto/x509/x_attrib.o", + "crypto/x509/x_crl.o", + "crypto/x509/x_exten.o", + "crypto/x509/x_name.o", + "crypto/x509/x_pubkey.o", + "crypto/x509/x_req.o", + "crypto/x509/x_x509.o", + "crypto/x509/x_x509a.o", + "crypto/x509v3/pcy_cache.o", + "crypto/x509v3/pcy_data.o", + "crypto/x509v3/pcy_lib.o", + "crypto/x509v3/pcy_map.o", + "crypto/x509v3/pcy_node.o", + "crypto/x509v3/pcy_tree.o", + "crypto/x509v3/v3_addr.o", + "crypto/x509v3/v3_admis.o", + "crypto/x509v3/v3_akey.o", + "crypto/x509v3/v3_akeya.o", + "crypto/x509v3/v3_alt.o", + "crypto/x509v3/v3_asid.o", + "crypto/x509v3/v3_bcons.o", + "crypto/x509v3/v3_bitst.o", + "crypto/x509v3/v3_conf.o", + "crypto/x509v3/v3_cpols.o", + "crypto/x509v3/v3_crld.o", + "crypto/x509v3/v3_enum.o", + "crypto/x509v3/v3_extku.o", + "crypto/x509v3/v3_genn.o", + "crypto/x509v3/v3_ia5.o", + "crypto/x509v3/v3_info.o", + "crypto/x509v3/v3_int.o", + "crypto/x509v3/v3_lib.o", + "crypto/x509v3/v3_ncons.o", + "crypto/x509v3/v3_pci.o", + "crypto/x509v3/v3_pcia.o", + "crypto/x509v3/v3_pcons.o", + "crypto/x509v3/v3_pku.o", + "crypto/x509v3/v3_pmaps.o", + "crypto/x509v3/v3_prn.o", + "crypto/x509v3/v3_purp.o", + "crypto/x509v3/v3_skey.o", + "crypto/x509v3/v3_sxnet.o", + "crypto/x509v3/v3_tlsf.o", + "crypto/x509v3/v3_utl.o", + "crypto/x509v3/v3err.o", + "engines/e_capi.o", + "engines/e_padlock.o", + ], + "libssl" => + [ + "ssl/bio_ssl.o", + "ssl/d1_lib.o", + "ssl/d1_msg.o", + "ssl/d1_srtp.o", + "ssl/methods.o", + "ssl/packet.o", + "ssl/pqueue.o", + "ssl/record/dtls1_bitmap.o", + "ssl/record/rec_layer_d1.o", + "ssl/record/rec_layer_s3.o", + "ssl/record/ssl3_buffer.o", + "ssl/record/ssl3_record.o", + "ssl/record/ssl3_record_tls13.o", + "ssl/s3_cbc.o", + "ssl/s3_enc.o", + "ssl/s3_lib.o", + "ssl/s3_msg.o", + "ssl/ssl_asn1.o", + "ssl/ssl_cert.o", + "ssl/ssl_ciph.o", + "ssl/ssl_conf.o", + "ssl/ssl_err.o", + "ssl/ssl_init.o", + "ssl/ssl_lib.o", + "ssl/ssl_mcnf.o", + "ssl/ssl_rsa.o", + "ssl/ssl_sess.o", + "ssl/ssl_stat.o", + "ssl/ssl_txt.o", + "ssl/ssl_utst.o", + "ssl/statem/extensions.o", + "ssl/statem/extensions_clnt.o", + "ssl/statem/extensions_cust.o", + "ssl/statem/extensions_srvr.o", + "ssl/statem/statem.o", + "ssl/statem/statem_clnt.o", + "ssl/statem/statem_dtls.o", + "ssl/statem/statem_lib.o", + "ssl/statem/statem_srvr.o", + "ssl/t1_enc.o", + "ssl/t1_lib.o", + "ssl/t1_trce.o", + "ssl/tls13_enc.o", + "ssl/tls_srp.o", + ], + "ssl/bio_ssl.o" => + [ + "ssl/bio_ssl.c", + ], + "ssl/d1_lib.o" => + [ + "ssl/d1_lib.c", + ], + "ssl/d1_msg.o" => + [ + "ssl/d1_msg.c", + ], + "ssl/d1_srtp.o" => + [ + "ssl/d1_srtp.c", + ], + "ssl/methods.o" => + [ + "ssl/methods.c", + ], + "ssl/packet.o" => + [ + "ssl/packet.c", + ], + "ssl/pqueue.o" => + [ + "ssl/pqueue.c", + ], + "ssl/record/dtls1_bitmap.o" => + [ + "ssl/record/dtls1_bitmap.c", + ], + "ssl/record/rec_layer_d1.o" => + [ + "ssl/record/rec_layer_d1.c", + ], + "ssl/record/rec_layer_s3.o" => + [ + "ssl/record/rec_layer_s3.c", + ], + "ssl/record/ssl3_buffer.o" => + [ + "ssl/record/ssl3_buffer.c", + ], + "ssl/record/ssl3_record.o" => + [ + "ssl/record/ssl3_record.c", + ], + "ssl/record/ssl3_record_tls13.o" => + [ + "ssl/record/ssl3_record_tls13.c", + ], + "ssl/s3_cbc.o" => + [ + "ssl/s3_cbc.c", + ], + "ssl/s3_enc.o" => + [ + "ssl/s3_enc.c", + ], + "ssl/s3_lib.o" => + [ + "ssl/s3_lib.c", + ], + "ssl/s3_msg.o" => + [ + "ssl/s3_msg.c", + ], + "ssl/ssl_asn1.o" => + [ + "ssl/ssl_asn1.c", + ], + "ssl/ssl_cert.o" => + [ + "ssl/ssl_cert.c", + ], + "ssl/ssl_ciph.o" => + [ + "ssl/ssl_ciph.c", + ], + "ssl/ssl_conf.o" => + [ + "ssl/ssl_conf.c", + ], + "ssl/ssl_err.o" => + [ + "ssl/ssl_err.c", + ], + "ssl/ssl_init.o" => + [ + "ssl/ssl_init.c", + ], + "ssl/ssl_lib.o" => + [ + "ssl/ssl_lib.c", + ], + "ssl/ssl_mcnf.o" => + [ + "ssl/ssl_mcnf.c", + ], + "ssl/ssl_rsa.o" => + [ + "ssl/ssl_rsa.c", + ], + "ssl/ssl_sess.o" => + [ + "ssl/ssl_sess.c", + ], + "ssl/ssl_stat.o" => + [ + "ssl/ssl_stat.c", + ], + "ssl/ssl_txt.o" => + [ + "ssl/ssl_txt.c", + ], + "ssl/ssl_utst.o" => + [ + "ssl/ssl_utst.c", + ], + "ssl/statem/extensions.o" => + [ + "ssl/statem/extensions.c", + ], + "ssl/statem/extensions_clnt.o" => + [ + "ssl/statem/extensions_clnt.c", + ], + "ssl/statem/extensions_cust.o" => + [ + "ssl/statem/extensions_cust.c", + ], + "ssl/statem/extensions_srvr.o" => + [ + "ssl/statem/extensions_srvr.c", + ], + "ssl/statem/statem.o" => + [ + "ssl/statem/statem.c", + ], + "ssl/statem/statem_clnt.o" => + [ + "ssl/statem/statem_clnt.c", + ], + "ssl/statem/statem_dtls.o" => + [ + "ssl/statem/statem_dtls.c", + ], + "ssl/statem/statem_lib.o" => + [ + "ssl/statem/statem_lib.c", + ], + "ssl/statem/statem_srvr.o" => + [ + "ssl/statem/statem_srvr.c", + ], + "ssl/t1_enc.o" => + [ + "ssl/t1_enc.c", + ], + "ssl/t1_lib.o" => + [ + "ssl/t1_lib.c", + ], + "ssl/t1_trce.o" => + [ + "ssl/t1_trce.c", + ], + "ssl/tls13_enc.o" => + [ + "ssl/tls13_enc.c", + ], + "ssl/tls_srp.o" => + [ + "ssl/tls_srp.c", + ], + "test/aborttest" => + [ + "test/aborttest.o", + ], + "test/aborttest.o" => + [ + "test/aborttest.c", + ], + "test/afalgtest" => + [ + "test/afalgtest.o", + ], + "test/afalgtest.o" => + [ + "test/afalgtest.c", + ], + "test/asn1_decode_test" => + [ + "test/asn1_decode_test.o", + ], + "test/asn1_decode_test.o" => + [ + "test/asn1_decode_test.c", + ], + "test/asn1_encode_test" => + [ + "test/asn1_encode_test.o", + ], + "test/asn1_encode_test.o" => + [ + "test/asn1_encode_test.c", + ], + "test/asn1_internal_test" => + [ + "test/asn1_internal_test.o", + ], + "test/asn1_internal_test.o" => + [ + "test/asn1_internal_test.c", + ], + "test/asn1_string_table_test" => + [ + "test/asn1_string_table_test.o", + ], + "test/asn1_string_table_test.o" => + [ + "test/asn1_string_table_test.c", + ], + "test/asn1_time_test" => + [ + "test/asn1_time_test.o", + ], + "test/asn1_time_test.o" => + [ + "test/asn1_time_test.c", + ], + "test/asynciotest" => + [ + "test/asynciotest.o", + "test/ssltestlib.o", + ], + "test/asynciotest.o" => + [ + "test/asynciotest.c", + ], + "test/asynctest" => + [ + "test/asynctest.o", + ], + "test/asynctest.o" => + [ + "test/asynctest.c", + ], + "test/bad_dtls_test" => + [ + "test/bad_dtls_test.o", + ], + "test/bad_dtls_test.o" => + [ + "test/bad_dtls_test.c", + ], + "test/bftest" => + [ + "test/bftest.o", + ], + "test/bftest.o" => + [ + "test/bftest.c", + ], + "test/bio_callback_test" => + [ + "test/bio_callback_test.o", + ], + "test/bio_callback_test.o" => + [ + "test/bio_callback_test.c", + ], + "test/bio_enc_test" => + [ + "test/bio_enc_test.o", + ], + "test/bio_enc_test.o" => + [ + "test/bio_enc_test.c", + ], + "test/bio_memleak_test" => + [ + "test/bio_memleak_test.o", + ], + "test/bio_memleak_test.o" => + [ + "test/bio_memleak_test.c", + ], + "test/bioprinttest" => + [ + "test/bioprinttest.o", + ], + "test/bioprinttest.o" => + [ + "test/bioprinttest.c", + ], + "test/bntest" => + [ + "test/bntest.o", + ], + "test/bntest.o" => + [ + "test/bntest.c", + ], + "test/buildtest_aes.o" => + [ + "test/buildtest_aes.c", + ], + "test/buildtest_asn1.o" => + [ + "test/buildtest_asn1.c", + ], + "test/buildtest_asn1t.o" => + [ + "test/buildtest_asn1t.c", + ], + "test/buildtest_async.o" => + [ + "test/buildtest_async.c", + ], + "test/buildtest_bio.o" => + [ + "test/buildtest_bio.c", + ], + "test/buildtest_blowfish.o" => + [ + "test/buildtest_blowfish.c", + ], + "test/buildtest_bn.o" => + [ + "test/buildtest_bn.c", + ], + "test/buildtest_buffer.o" => + [ + "test/buildtest_buffer.c", + ], + "test/buildtest_c_aes" => + [ + "test/buildtest_aes.o", + ], + "test/buildtest_c_asn1" => + [ + "test/buildtest_asn1.o", + ], + "test/buildtest_c_asn1t" => + [ + "test/buildtest_asn1t.o", + ], + "test/buildtest_c_async" => + [ + "test/buildtest_async.o", + ], + "test/buildtest_c_bio" => + [ + "test/buildtest_bio.o", + ], + "test/buildtest_c_blowfish" => + [ + "test/buildtest_blowfish.o", + ], + "test/buildtest_c_bn" => + [ + "test/buildtest_bn.o", + ], + "test/buildtest_c_buffer" => + [ + "test/buildtest_buffer.o", + ], + "test/buildtest_c_camellia" => + [ + "test/buildtest_camellia.o", + ], + "test/buildtest_c_cast" => + [ + "test/buildtest_cast.o", + ], + "test/buildtest_c_cmac" => + [ + "test/buildtest_cmac.o", + ], + "test/buildtest_c_cms" => + [ + "test/buildtest_cms.o", + ], + "test/buildtest_c_conf" => + [ + "test/buildtest_conf.o", + ], + "test/buildtest_c_conf_api" => + [ + "test/buildtest_conf_api.o", + ], + "test/buildtest_c_crypto" => + [ + "test/buildtest_crypto.o", + ], + "test/buildtest_c_ct" => + [ + "test/buildtest_ct.o", + ], + "test/buildtest_c_des" => + [ + "test/buildtest_des.o", + ], + "test/buildtest_c_dh" => + [ + "test/buildtest_dh.o", + ], + "test/buildtest_c_dsa" => + [ + "test/buildtest_dsa.o", + ], + "test/buildtest_c_dtls1" => + [ + "test/buildtest_dtls1.o", + ], + "test/buildtest_c_e_os2" => + [ + "test/buildtest_e_os2.o", + ], + "test/buildtest_c_ebcdic" => + [ + "test/buildtest_ebcdic.o", + ], + "test/buildtest_c_ec" => + [ + "test/buildtest_ec.o", + ], + "test/buildtest_c_ecdh" => + [ + "test/buildtest_ecdh.o", + ], + "test/buildtest_c_ecdsa" => + [ + "test/buildtest_ecdsa.o", + ], + "test/buildtest_c_engine" => + [ + "test/buildtest_engine.o", + ], + "test/buildtest_c_evp" => + [ + "test/buildtest_evp.o", + ], + "test/buildtest_c_hmac" => + [ + "test/buildtest_hmac.o", + ], + "test/buildtest_c_idea" => + [ + "test/buildtest_idea.o", + ], + "test/buildtest_c_kdf" => + [ + "test/buildtest_kdf.o", + ], + "test/buildtest_c_lhash" => + [ + "test/buildtest_lhash.o", + ], + "test/buildtest_c_md4" => + [ + "test/buildtest_md4.o", + ], + "test/buildtest_c_md5" => + [ + "test/buildtest_md5.o", + ], + "test/buildtest_c_mdc2" => + [ + "test/buildtest_mdc2.o", + ], + "test/buildtest_c_modes" => + [ + "test/buildtest_modes.o", + ], + "test/buildtest_c_obj_mac" => + [ + "test/buildtest_obj_mac.o", + ], + "test/buildtest_c_objects" => + [ + "test/buildtest_objects.o", + ], + "test/buildtest_c_ocsp" => + [ + "test/buildtest_ocsp.o", + ], + "test/buildtest_c_opensslv" => + [ + "test/buildtest_opensslv.o", + ], + "test/buildtest_c_ossl_typ" => + [ + "test/buildtest_ossl_typ.o", + ], + "test/buildtest_c_pem" => + [ + "test/buildtest_pem.o", + ], + "test/buildtest_c_pem2" => + [ + "test/buildtest_pem2.o", + ], + "test/buildtest_c_pkcs12" => + [ + "test/buildtest_pkcs12.o", + ], + "test/buildtest_c_pkcs7" => + [ + "test/buildtest_pkcs7.o", + ], + "test/buildtest_c_rand" => + [ + "test/buildtest_rand.o", + ], + "test/buildtest_c_rand_drbg" => + [ + "test/buildtest_rand_drbg.o", + ], + "test/buildtest_c_rc2" => + [ + "test/buildtest_rc2.o", + ], + "test/buildtest_c_rc4" => + [ + "test/buildtest_rc4.o", + ], + "test/buildtest_c_ripemd" => + [ + "test/buildtest_ripemd.o", + ], + "test/buildtest_c_rsa" => + [ + "test/buildtest_rsa.o", + ], + "test/buildtest_c_safestack" => + [ + "test/buildtest_safestack.o", + ], + "test/buildtest_c_seed" => + [ + "test/buildtest_seed.o", + ], + "test/buildtest_c_sha" => + [ + "test/buildtest_sha.o", + ], + "test/buildtest_c_srp" => + [ + "test/buildtest_srp.o", + ], + "test/buildtest_c_srtp" => + [ + "test/buildtest_srtp.o", + ], + "test/buildtest_c_ssl" => + [ + "test/buildtest_ssl.o", + ], + "test/buildtest_c_ssl2" => + [ + "test/buildtest_ssl2.o", + ], + "test/buildtest_c_stack" => + [ + "test/buildtest_stack.o", + ], + "test/buildtest_c_store" => + [ + "test/buildtest_store.o", + ], + "test/buildtest_c_symhacks" => + [ + "test/buildtest_symhacks.o", + ], + "test/buildtest_c_tls1" => + [ + "test/buildtest_tls1.o", + ], + "test/buildtest_c_ts" => + [ + "test/buildtest_ts.o", + ], + "test/buildtest_c_txt_db" => + [ + "test/buildtest_txt_db.o", + ], + "test/buildtest_c_ui" => + [ + "test/buildtest_ui.o", + ], + "test/buildtest_c_whrlpool" => + [ + "test/buildtest_whrlpool.o", + ], + "test/buildtest_c_x509" => + [ + "test/buildtest_x509.o", + ], + "test/buildtest_c_x509_vfy" => + [ + "test/buildtest_x509_vfy.o", + ], + "test/buildtest_c_x509v3" => + [ + "test/buildtest_x509v3.o", + ], + "test/buildtest_camellia.o" => + [ + "test/buildtest_camellia.c", + ], + "test/buildtest_cast.o" => + [ + "test/buildtest_cast.c", + ], + "test/buildtest_cmac.o" => + [ + "test/buildtest_cmac.c", + ], + "test/buildtest_cms.o" => + [ + "test/buildtest_cms.c", + ], + "test/buildtest_conf.o" => + [ + "test/buildtest_conf.c", + ], + "test/buildtest_conf_api.o" => + [ + "test/buildtest_conf_api.c", + ], + "test/buildtest_crypto.o" => + [ + "test/buildtest_crypto.c", + ], + "test/buildtest_ct.o" => + [ + "test/buildtest_ct.c", + ], + "test/buildtest_des.o" => + [ + "test/buildtest_des.c", + ], + "test/buildtest_dh.o" => + [ + "test/buildtest_dh.c", + ], + "test/buildtest_dsa.o" => + [ + "test/buildtest_dsa.c", + ], + "test/buildtest_dtls1.o" => + [ + "test/buildtest_dtls1.c", + ], + "test/buildtest_e_os2.o" => + [ + "test/buildtest_e_os2.c", + ], + "test/buildtest_ebcdic.o" => + [ + "test/buildtest_ebcdic.c", + ], + "test/buildtest_ec.o" => + [ + "test/buildtest_ec.c", + ], + "test/buildtest_ecdh.o" => + [ + "test/buildtest_ecdh.c", + ], + "test/buildtest_ecdsa.o" => + [ + "test/buildtest_ecdsa.c", + ], + "test/buildtest_engine.o" => + [ + "test/buildtest_engine.c", + ], + "test/buildtest_evp.o" => + [ + "test/buildtest_evp.c", + ], + "test/buildtest_hmac.o" => + [ + "test/buildtest_hmac.c", + ], + "test/buildtest_idea.o" => + [ + "test/buildtest_idea.c", + ], + "test/buildtest_kdf.o" => + [ + "test/buildtest_kdf.c", + ], + "test/buildtest_lhash.o" => + [ + "test/buildtest_lhash.c", + ], + "test/buildtest_md4.o" => + [ + "test/buildtest_md4.c", + ], + "test/buildtest_md5.o" => + [ + "test/buildtest_md5.c", + ], + "test/buildtest_mdc2.o" => + [ + "test/buildtest_mdc2.c", + ], + "test/buildtest_modes.o" => + [ + "test/buildtest_modes.c", + ], + "test/buildtest_obj_mac.o" => + [ + "test/buildtest_obj_mac.c", + ], + "test/buildtest_objects.o" => + [ + "test/buildtest_objects.c", + ], + "test/buildtest_ocsp.o" => + [ + "test/buildtest_ocsp.c", + ], + "test/buildtest_opensslv.o" => + [ + "test/buildtest_opensslv.c", + ], + "test/buildtest_ossl_typ.o" => + [ + "test/buildtest_ossl_typ.c", + ], + "test/buildtest_pem.o" => + [ + "test/buildtest_pem.c", + ], + "test/buildtest_pem2.o" => + [ + "test/buildtest_pem2.c", + ], + "test/buildtest_pkcs12.o" => + [ + "test/buildtest_pkcs12.c", + ], + "test/buildtest_pkcs7.o" => + [ + "test/buildtest_pkcs7.c", + ], + "test/buildtest_rand.o" => + [ + "test/buildtest_rand.c", + ], + "test/buildtest_rand_drbg.o" => + [ + "test/buildtest_rand_drbg.c", + ], + "test/buildtest_rc2.o" => + [ + "test/buildtest_rc2.c", + ], + "test/buildtest_rc4.o" => + [ + "test/buildtest_rc4.c", + ], + "test/buildtest_ripemd.o" => + [ + "test/buildtest_ripemd.c", + ], + "test/buildtest_rsa.o" => + [ + "test/buildtest_rsa.c", + ], + "test/buildtest_safestack.o" => + [ + "test/buildtest_safestack.c", + ], + "test/buildtest_seed.o" => + [ + "test/buildtest_seed.c", + ], + "test/buildtest_sha.o" => + [ + "test/buildtest_sha.c", + ], + "test/buildtest_srp.o" => + [ + "test/buildtest_srp.c", + ], + "test/buildtest_srtp.o" => + [ + "test/buildtest_srtp.c", + ], + "test/buildtest_ssl.o" => + [ + "test/buildtest_ssl.c", + ], + "test/buildtest_ssl2.o" => + [ + "test/buildtest_ssl2.c", + ], + "test/buildtest_stack.o" => + [ + "test/buildtest_stack.c", + ], + "test/buildtest_store.o" => + [ + "test/buildtest_store.c", + ], + "test/buildtest_symhacks.o" => + [ + "test/buildtest_symhacks.c", + ], + "test/buildtest_tls1.o" => + [ + "test/buildtest_tls1.c", + ], + "test/buildtest_ts.o" => + [ + "test/buildtest_ts.c", + ], + "test/buildtest_txt_db.o" => + [ + "test/buildtest_txt_db.c", + ], + "test/buildtest_ui.o" => + [ + "test/buildtest_ui.c", + ], + "test/buildtest_whrlpool.o" => + [ + "test/buildtest_whrlpool.c", + ], + "test/buildtest_x509.o" => + [ + "test/buildtest_x509.c", + ], + "test/buildtest_x509_vfy.o" => + [ + "test/buildtest_x509_vfy.c", + ], + "test/buildtest_x509v3.o" => + [ + "test/buildtest_x509v3.c", + ], + "test/casttest" => + [ + "test/casttest.o", + ], + "test/casttest.o" => + [ + "test/casttest.c", + ], + "test/chacha_internal_test" => + [ + "test/chacha_internal_test.o", + ], + "test/chacha_internal_test.o" => + [ + "test/chacha_internal_test.c", + ], + "test/cipher_overhead_test" => + [ + "test/cipher_overhead_test.o", + ], + "test/cipher_overhead_test.o" => + [ + "test/cipher_overhead_test.c", + ], + "test/cipherbytes_test" => + [ + "test/cipherbytes_test.o", + ], + "test/cipherbytes_test.o" => + [ + "test/cipherbytes_test.c", + ], + "test/cipherlist_test" => + [ + "test/cipherlist_test.o", + ], + "test/cipherlist_test.o" => + [ + "test/cipherlist_test.c", + ], + "test/ciphername_test" => + [ + "test/ciphername_test.o", + ], + "test/ciphername_test.o" => + [ + "test/ciphername_test.c", + ], + "test/clienthellotest" => + [ + "test/clienthellotest.o", + ], + "test/clienthellotest.o" => + [ + "test/clienthellotest.c", + ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], + "test/cmsapitest" => + [ + "test/cmsapitest.o", + ], + "test/cmsapitest.o" => + [ + "test/cmsapitest.c", + ], + "test/conf_include_test" => + [ + "test/conf_include_test.o", + ], + "test/conf_include_test.o" => + [ + "test/conf_include_test.c", + ], + "test/constant_time_test" => + [ + "test/constant_time_test.o", + ], + "test/constant_time_test.o" => + [ + "test/constant_time_test.c", + ], + "test/crltest" => + [ + "test/crltest.o", + ], + "test/crltest.o" => + [ + "test/crltest.c", + ], + "test/ct_test" => + [ + "test/ct_test.o", + ], + "test/ct_test.o" => + [ + "test/ct_test.c", + ], + "test/ctype_internal_test" => + [ + "test/ctype_internal_test.o", + ], + "test/ctype_internal_test.o" => + [ + "test/ctype_internal_test.c", + ], + "test/curve448_internal_test" => + [ + "test/curve448_internal_test.o", + ], + "test/curve448_internal_test.o" => + [ + "test/curve448_internal_test.c", + ], + "test/d2i_test" => + [ + "test/d2i_test.o", + ], + "test/d2i_test.o" => + [ + "test/d2i_test.c", + ], + "test/danetest" => + [ + "test/danetest.o", + ], + "test/danetest.o" => + [ + "test/danetest.c", + ], + "test/destest" => + [ + "test/destest.o", + ], + "test/destest.o" => + [ + "test/destest.c", + ], + "test/dhtest" => + [ + "test/dhtest.o", + ], + "test/dhtest.o" => + [ + "test/dhtest.c", + ], + "test/drbg_cavs_data.o" => + [ + "test/drbg_cavs_data.c", + ], + "test/drbg_cavs_test" => + [ + "test/drbg_cavs_data.o", + "test/drbg_cavs_test.o", + ], + "test/drbg_cavs_test.o" => + [ + "test/drbg_cavs_test.c", + ], + "test/drbgtest" => + [ + "test/drbgtest.o", + ], + "test/drbgtest.o" => + [ + "test/drbgtest.c", + ], + "test/dsa_no_digest_size_test" => + [ + "test/dsa_no_digest_size_test.o", + ], + "test/dsa_no_digest_size_test.o" => + [ + "test/dsa_no_digest_size_test.c", + ], + "test/dsatest" => + [ + "test/dsatest.o", + ], + "test/dsatest.o" => + [ + "test/dsatest.c", + ], + "test/dtls_mtu_test" => + [ + "test/dtls_mtu_test.o", + "test/ssltestlib.o", + ], + "test/dtls_mtu_test.o" => + [ + "test/dtls_mtu_test.c", + ], + "test/dtlstest" => + [ + "test/dtlstest.o", + "test/ssltestlib.o", + ], + "test/dtlstest.o" => + [ + "test/dtlstest.c", + ], + "test/dtlsv1listentest" => + [ + "test/dtlsv1listentest.o", + ], + "test/dtlsv1listentest.o" => + [ + "test/dtlsv1listentest.c", + ], + "test/ec_internal_test" => + [ + "test/ec_internal_test.o", + ], + "test/ec_internal_test.o" => + [ + "test/ec_internal_test.c", + ], + "test/ecdsatest" => + [ + "test/ecdsatest.o", + ], + "test/ecdsatest.o" => + [ + "test/ecdsatest.c", + ], + "test/ecstresstest" => + [ + "test/ecstresstest.o", + ], + "test/ecstresstest.o" => + [ + "test/ecstresstest.c", + ], + "test/ectest" => + [ + "test/ectest.o", + ], + "test/ectest.o" => + [ + "test/ectest.c", + ], + "test/enginetest" => + [ + "test/enginetest.o", + ], + "test/enginetest.o" => + [ + "test/enginetest.c", + ], + "test/errtest" => + [ + "test/errtest.o", + ], + "test/errtest.o" => + [ + "test/errtest.c", + ], + "test/evp_extra_test" => + [ + "test/evp_extra_test.o", + ], + "test/evp_extra_test.o" => + [ + "test/evp_extra_test.c", + ], + "test/evp_test" => + [ + "test/evp_test.o", + ], + "test/evp_test.o" => + [ + "test/evp_test.c", + ], + "test/exdatatest" => + [ + "test/exdatatest.o", + ], + "test/exdatatest.o" => + [ + "test/exdatatest.c", + ], + "test/exptest" => + [ + "test/exptest.o", + ], + "test/exptest.o" => + [ + "test/exptest.c", + ], + "test/fatalerrtest" => + [ + "test/fatalerrtest.o", + "test/ssltestlib.o", + ], + "test/fatalerrtest.o" => + [ + "test/fatalerrtest.c", + ], + "test/gmdifftest" => + [ + "test/gmdifftest.o", + ], + "test/gmdifftest.o" => + [ + "test/gmdifftest.c", + ], + "test/gosttest" => + [ + "test/gosttest.o", + "test/ssltestlib.o", + ], + "test/gosttest.o" => + [ + "test/gosttest.c", + ], + "test/handshake_helper.o" => + [ + "test/handshake_helper.c", + ], + "test/hmactest" => + [ + "test/hmactest.o", + ], + "test/hmactest.o" => + [ + "test/hmactest.c", + ], + "test/ideatest" => + [ + "test/ideatest.o", + ], + "test/ideatest.o" => + [ + "test/ideatest.c", + ], + "test/igetest" => + [ + "test/igetest.o", + ], + "test/igetest.o" => + [ + "test/igetest.c", + ], + "test/lhash_test" => + [ + "test/lhash_test.o", + ], + "test/lhash_test.o" => + [ + "test/lhash_test.c", + ], + "test/libtestutil.a" => + [ + "test/testutil/basic_output.o", + "test/testutil/cb.o", + "test/testutil/driver.o", + "test/testutil/format_output.o", + "test/testutil/main.o", + "test/testutil/output_helpers.o", + "test/testutil/random.o", + "test/testutil/stanza.o", + "test/testutil/tap_bio.o", + "test/testutil/test_cleanup.o", + "test/testutil/tests.o", + "test/testutil/testutil_init.o", + ], + "test/md2test" => + [ + "test/md2test.o", + ], + "test/md2test.o" => + [ + "test/md2test.c", + ], + "test/mdc2_internal_test" => + [ + "test/mdc2_internal_test.o", + ], + "test/mdc2_internal_test.o" => + [ + "test/mdc2_internal_test.c", + ], + "test/mdc2test" => + [ + "test/mdc2test.o", + ], + "test/mdc2test.o" => + [ + "test/mdc2test.c", + ], + "test/memleaktest" => + [ + "test/memleaktest.o", + ], + "test/memleaktest.o" => + [ + "test/memleaktest.c", + ], + "test/modes_internal_test" => + [ + "test/modes_internal_test.o", + ], + "test/modes_internal_test.o" => + [ + "test/modes_internal_test.c", + ], + "test/ocspapitest" => + [ + "test/ocspapitest.o", + ], + "test/ocspapitest.o" => + [ + "test/ocspapitest.c", + ], + "test/packettest" => + [ + "test/packettest.o", + ], + "test/packettest.o" => + [ + "test/packettest.c", + ], + "test/pbelutest" => + [ + "test/pbelutest.o", + ], + "test/pbelutest.o" => + [ + "test/pbelutest.c", + ], + "test/pemtest" => + [ + "test/pemtest.o", + ], + "test/pemtest.o" => + [ + "test/pemtest.c", + ], + "test/pkey_meth_kdf_test" => + [ + "test/pkey_meth_kdf_test.o", + ], + "test/pkey_meth_kdf_test.o" => + [ + "test/pkey_meth_kdf_test.c", + ], + "test/pkey_meth_test" => + [ + "test/pkey_meth_test.o", + ], + "test/pkey_meth_test.o" => + [ + "test/pkey_meth_test.c", + ], + "test/poly1305_internal_test" => + [ + "test/poly1305_internal_test.o", + ], + "test/poly1305_internal_test.o" => + [ + "test/poly1305_internal_test.c", + ], + "test/rc2test" => + [ + "test/rc2test.o", + ], + "test/rc2test.o" => + [ + "test/rc2test.c", + ], + "test/rc4test" => + [ + "test/rc4test.o", + ], + "test/rc4test.o" => + [ + "test/rc4test.c", + ], + "test/rc5test" => + [ + "test/rc5test.o", + ], + "test/rc5test.o" => + [ + "test/rc5test.c", + ], + "test/rdrand_sanitytest" => + [ + "test/rdrand_sanitytest.o", + ], + "test/rdrand_sanitytest.o" => + [ + "test/rdrand_sanitytest.c", + ], + "test/recordlentest" => + [ + "test/recordlentest.o", + "test/ssltestlib.o", + ], + "test/recordlentest.o" => + [ + "test/recordlentest.c", + ], + "test/rsa_complex" => + [ + "test/rsa_complex.o", + ], + "test/rsa_complex.o" => + [ + "test/rsa_complex.c", + ], + "test/rsa_mp_test" => + [ + "test/rsa_mp_test.o", + ], + "test/rsa_mp_test.o" => + [ + "test/rsa_mp_test.c", + ], + "test/rsa_test" => + [ + "test/rsa_test.o", + ], + "test/rsa_test.o" => + [ + "test/rsa_test.c", + ], + "test/sanitytest" => + [ + "test/sanitytest.o", + ], + "test/sanitytest.o" => + [ + "test/sanitytest.c", + ], + "test/secmemtest" => + [ + "test/secmemtest.o", + ], + "test/secmemtest.o" => + [ + "test/secmemtest.c", + ], + "test/servername_test" => + [ + "test/servername_test.o", + "test/ssltestlib.o", + ], + "test/servername_test.o" => + [ + "test/servername_test.c", + ], + "test/siphash_internal_test" => + [ + "test/siphash_internal_test.o", + ], + "test/siphash_internal_test.o" => + [ + "test/siphash_internal_test.c", + ], + "test/sm2_internal_test" => + [ + "test/sm2_internal_test.o", + ], + "test/sm2_internal_test.o" => + [ + "test/sm2_internal_test.c", + ], + "test/sm4_internal_test" => + [ + "test/sm4_internal_test.o", + ], + "test/sm4_internal_test.o" => + [ + "test/sm4_internal_test.c", + ], + "test/srptest" => + [ + "test/srptest.o", + ], + "test/srptest.o" => + [ + "test/srptest.c", + ], + "test/ssl_cert_table_internal_test" => + [ + "test/ssl_cert_table_internal_test.o", + ], + "test/ssl_cert_table_internal_test.o" => + [ + "test/ssl_cert_table_internal_test.c", + ], + "test/ssl_ctx_test" => + [ + "test/ssl_ctx_test.o", + ], + "test/ssl_ctx_test.o" => + [ + "test/ssl_ctx_test.c", + ], + "test/ssl_test" => + [ + "test/handshake_helper.o", + "test/ssl_test.o", + "test/ssl_test_ctx.o", + ], + "test/ssl_test.o" => + [ + "test/ssl_test.c", + ], + "test/ssl_test_ctx.o" => + [ + "test/ssl_test_ctx.c", + ], + "test/ssl_test_ctx_test" => + [ + "test/ssl_test_ctx.o", + "test/ssl_test_ctx_test.o", + ], + "test/ssl_test_ctx_test.o" => + [ + "test/ssl_test_ctx_test.c", + ], + "test/sslapitest" => + [ + "test/sslapitest.o", + "test/ssltestlib.o", + ], + "test/sslapitest.o" => + [ + "test/sslapitest.c", + ], + "test/sslbuffertest" => + [ + "test/sslbuffertest.o", + "test/ssltestlib.o", + ], + "test/sslbuffertest.o" => + [ + "test/sslbuffertest.c", + ], + "test/sslcorrupttest" => + [ + "test/sslcorrupttest.o", + "test/ssltestlib.o", + ], + "test/sslcorrupttest.o" => + [ + "test/sslcorrupttest.c", + ], + "test/ssltest_old" => + [ + "test/ssltest_old.o", + ], + "test/ssltest_old.o" => + [ + "test/ssltest_old.c", + ], + "test/ssltestlib.o" => + [ + "test/ssltestlib.c", + ], + "test/stack_test" => + [ + "test/stack_test.o", + ], + "test/stack_test.o" => + [ + "test/stack_test.c", + ], + "test/sysdefaulttest" => + [ + "test/sysdefaulttest.o", + ], + "test/sysdefaulttest.o" => + [ + "test/sysdefaulttest.c", + ], + "test/test_test" => + [ + "test/test_test.o", + ], + "test/test_test.o" => + [ + "test/test_test.c", + ], + "test/testutil/basic_output.o" => + [ + "test/testutil/basic_output.c", + ], + "test/testutil/cb.o" => + [ + "test/testutil/cb.c", + ], + "test/testutil/driver.o" => + [ + "test/testutil/driver.c", + ], + "test/testutil/format_output.o" => + [ + "test/testutil/format_output.c", + ], + "test/testutil/main.o" => + [ + "test/testutil/main.c", + ], + "test/testutil/output_helpers.o" => + [ + "test/testutil/output_helpers.c", + ], + "test/testutil/random.o" => + [ + "test/testutil/random.c", + ], + "test/testutil/stanza.o" => + [ + "test/testutil/stanza.c", + ], + "test/testutil/tap_bio.o" => + [ + "test/testutil/tap_bio.c", + ], + "test/testutil/test_cleanup.o" => + [ + "test/testutil/test_cleanup.c", + ], + "test/testutil/tests.o" => + [ + "test/testutil/tests.c", + ], + "test/testutil/testutil_init.o" => + [ + "test/testutil/testutil_init.c", + ], + "test/threadstest" => + [ + "test/threadstest.o", + ], + "test/threadstest.o" => + [ + "test/threadstest.c", + ], + "test/time_offset_test" => + [ + "test/time_offset_test.o", + ], + "test/time_offset_test.o" => + [ + "test/time_offset_test.c", + ], + "test/tls13ccstest" => + [ + "test/ssltestlib.o", + "test/tls13ccstest.o", + ], + "test/tls13ccstest.o" => + [ + "test/tls13ccstest.c", + ], + "test/tls13encryptiontest" => + [ + "test/tls13encryptiontest.o", + ], + "test/tls13encryptiontest.o" => + [ + "test/tls13encryptiontest.c", + ], + "test/uitest" => + [ + "test/uitest.o", + ], + "test/uitest.o" => + [ + "test/uitest.c", + ], + "test/v3ext" => + [ + "test/v3ext.o", + ], + "test/v3ext.o" => + [ + "test/v3ext.c", + ], + "test/v3nametest" => + [ + "test/v3nametest.o", + ], + "test/v3nametest.o" => + [ + "test/v3nametest.c", + ], + "test/verify_extra_test" => + [ + "test/verify_extra_test.o", + ], + "test/verify_extra_test.o" => + [ + "test/verify_extra_test.c", + ], + "test/versions" => + [ + "test/versions.o", + ], + "test/versions.o" => + [ + "test/versions.c", + ], + "test/wpackettest" => + [ + "test/wpackettest.o", + ], + "test/wpackettest.o" => + [ + "test/wpackettest.c", + ], + "test/x509_check_cert_pkey_test" => + [ + "test/x509_check_cert_pkey_test.o", + ], + "test/x509_check_cert_pkey_test.o" => + [ + "test/x509_check_cert_pkey_test.c", + ], + "test/x509_dup_cert_test" => + [ + "test/x509_dup_cert_test.o", + ], + "test/x509_dup_cert_test.o" => + [ + "test/x509_dup_cert_test.c", + ], + "test/x509_internal_test" => + [ + "test/x509_internal_test.o", + ], + "test/x509_internal_test.o" => + [ + "test/x509_internal_test.c", + ], + "test/x509_time_test" => + [ + "test/x509_time_test.o", + ], + "test/x509_time_test.o" => + [ + "test/x509_time_test.c", + ], + "test/x509aux" => + [ + "test/x509aux.o", + ], + "test/x509aux.o" => + [ + "test/x509aux.c", + ], + "tools/c_rehash" => + [ + "tools/c_rehash.in", + ], + "util/shlib_wrap.sh" => + [ + "util/shlib_wrap.sh.in", + ], + }, +); + +# The following data is only used when this files is use as a script +my @makevars = ( + 'AR', + 'ARFLAGS', + 'AS', + 'ASFLAGS', + 'CC', + 'CFLAGS', + 'CPP', + 'CPPDEFINES', + 'CPPFLAGS', + 'CPPINCLUDES', + 'CROSS_COMPILE', + 'CXX', + 'CXXFLAGS', + 'HASHBANGPERL', + 'LD', + 'LDFLAGS', + 'LDLIBS', + 'MT', + 'MTFLAGS', + 'PERL', + 'RANLIB', + 'RC', + 'RCFLAGS', + 'RM', +); +my %disabled_info = ( + 'afalgeng' => { + macro => 'OPENSSL_NO_AFALGENG', + }, + 'asan' => { + macro => 'OPENSSL_NO_ASAN', + }, + 'comp' => { + macro => 'OPENSSL_NO_COMP', + skipped => [ 'crypto/comp' ], + }, + 'crypto-mdebug' => { + macro => 'OPENSSL_NO_CRYPTO_MDEBUG', + }, + 'crypto-mdebug-backtrace' => { + macro => 'OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE', + }, + 'devcryptoeng' => { + macro => 'OPENSSL_NO_DEVCRYPTOENG', + }, + 'ec_nistp_64_gcc_128' => { + macro => 'OPENSSL_NO_EC_NISTP_64_GCC_128', + }, + 'egd' => { + macro => 'OPENSSL_NO_EGD', + }, + 'external-tests' => { + macro => 'OPENSSL_NO_EXTERNAL_TESTS', + }, + 'fuzz-afl' => { + macro => 'OPENSSL_NO_FUZZ_AFL', + }, + 'fuzz-libfuzzer' => { + macro => 'OPENSSL_NO_FUZZ_LIBFUZZER', + }, + 'heartbeats' => { + macro => 'OPENSSL_NO_HEARTBEATS', + }, + 'md2' => { + macro => 'OPENSSL_NO_MD2', + skipped => [ 'crypto/md2' ], + }, + 'msan' => { + macro => 'OPENSSL_NO_MSAN', + }, + 'rc5' => { + macro => 'OPENSSL_NO_RC5', + skipped => [ 'crypto/rc5' ], + }, + 'sctp' => { + macro => 'OPENSSL_NO_SCTP', + }, + 'ssl3' => { + macro => 'OPENSSL_NO_SSL3', + }, + 'ssl3-method' => { + macro => 'OPENSSL_NO_SSL3_METHOD', + }, + 'ubsan' => { + macro => 'OPENSSL_NO_UBSAN', + }, + 'unit-test' => { + macro => 'OPENSSL_NO_UNIT_TEST', + }, + 'weak-ssl-ciphers' => { + macro => 'OPENSSL_NO_WEAK_SSL_CIPHERS', + }, +); +my @user_crossable = qw( AR AS CC CXX CPP LD MT RANLIB RC ); +# If run directly, we can give some answers, and even reconfigure +unless (caller) { + use Getopt::Long; + use File::Spec::Functions; + use File::Basename; + use Pod::Usage; + + my $here = dirname($0); + + my $dump = undef; + my $cmdline = undef; + my $options = undef; + my $target = undef; + my $envvars = undef; + my $makevars = undef; + my $buildparams = undef; + my $reconf = undef; + my $verbose = undef; + my $help = undef; + my $man = undef; + GetOptions('dump|d' => \$dump, + 'command-line|c' => \$cmdline, + 'options|o' => \$options, + 'target|t' => \$target, + 'environment|e' => \$envvars, + 'make-variables|m' => \$makevars, + 'build-parameters|b' => \$buildparams, + 'reconfigure|reconf|r' => \$reconf, + 'verbose|v' => \$verbose, + 'help' => \$help, + 'man' => \$man) + or die "Errors in command line arguments\n"; + + unless ($dump || $cmdline || $options || $target || $envvars || $makevars + || $buildparams || $reconf || $verbose || $help || $man) { + print STDERR <<"_____"; +You must give at least one option. +For more information, do '$0 --help' +_____ + exit(2); + } + + if ($help) { + pod2usage(-exitval => 0, + -verbose => 1); + } + if ($man) { + pod2usage(-exitval => 0, + -verbose => 2); + } + if ($dump || $cmdline) { + print "\nCommand line (with current working directory = $here):\n\n"; + print ' ',join(' ', + $config{PERL}, + catfile($config{sourcedir}, 'Configure'), + @{$config{perlargv}}), "\n"; + print "\nPerl information:\n\n"; + print ' ',$config{perl_cmd},"\n"; + print ' ',$config{perl_version},' for ',$config{perl_archname},"\n"; + } + if ($dump || $options) { + my $longest = 0; + my $longest2 = 0; + foreach my $what (@disablables) { + $longest = length($what) if $longest < length($what); + $longest2 = length($disabled{$what}) + if $disabled{$what} && $longest2 < length($disabled{$what}); + } + print "\nEnabled features:\n\n"; + foreach my $what (@disablables) { + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; + } + print "\nDisabled features:\n\n"; + foreach my $what (@disablables) { + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; + print ' (skip ', + join(', ', @{$disabled_info{$what3}->{skipped}}), + ')' + if $disabled_info{$what3}->{skipped}; + print "\n"; + } + } + } + if ($dump || $target) { + print "\nConfig target attributes:\n\n"; + foreach (sort keys %target) { + next if $_ =~ m|^_| || $_ eq 'template'; + my $quotify = sub { + map { (my $x = $_) =~ s|([\\\$\@"])|\\$1|g; "\"$x\""} @_; + }; + print ' ', $_, ' => '; + if (ref($target{$_}) eq "ARRAY") { + print '[ ', join(', ', $quotify->(@{$target{$_}})), " ],\n"; + } else { + print $quotify->($target{$_}), ",\n" + } + } + } + if ($dump || $envvars) { + print "\nRecorded environment:\n\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ''),"\n"; + } + } + if ($dump || $makevars) { + print "\nMakevars:\n\n"; + foreach my $var (@makevars) { + my $prefix = ''; + $prefix = $config{CROSS_COMPILE} + if grep { $var eq $_ } @user_crossable; + $prefix //= ''; + print ' ',$var,' ' x (16 - length $var),'= ', + (ref $config{$var} eq 'ARRAY' + ? join(' ', @{$config{$var}}) + : $prefix.$config{$var}), + "\n" + if defined $config{$var}; + } + + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + my $buildfile = canonpath(catdir(@buildfile)); + print <<"_____"; + +NOTE: These variables only represent the configuration view. The build file +template may have processed these variables further, please have a look at the +build file for more exact data: + $buildfile +_____ + } + if ($dump || $buildparams) { + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + print "\nbuild file:\n\n"; + print " ", canonpath(catfile(@buildfile)),"\n"; + + print "\nbuild file templates:\n\n"; + foreach (@{$config{build_file_templates}}) { + my @tmpl = ($_); + unshift @tmpl, $here + unless file_name_is_absolute($config{sourcedir}); + print ' ',canonpath(catfile(@tmpl)),"\n"; + } + } + if ($reconf) { + if ($verbose) { + print 'Reconfiguring with: ', join(' ',@{$config{perlargv}}), "\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ""),"\n"; + } + } + + chdir $here; + exec $^X,catfile($config{sourcedir}, 'Configure'),'reconf'; + } +} + +1; + +__END__ + +=head1 NAME + +configdata.pm - configuration data for OpenSSL builds + +=head1 SYNOPSIS + +Interactive: + + perl configdata.pm [options] + +As data bank module: + + use configdata; + +=head1 DESCRIPTION + +This module can be used in two modes, interactively and as a module containing +all the data recorded by OpenSSL's Configure script. + +When used interactively, simply run it as any perl script, with at least one +option, and you will get the information you ask for. See L below. + +When loaded as a module, you get a few databanks with useful information to +perform build related tasks. The databanks are: + + %config Configured things. + %target The OpenSSL config target with all inheritances + resolved. + %disabled The features that are disabled. + @disablables The list of features that can be disabled. + %withargs All data given through --with-THING options. + %unified_info All information that was computed from the build.info + files. + +=head1 OPTIONS + +=over 4 + +=item B<--help> + +Print a brief help message and exit. + +=item B<--man> + +Print the manual page and exit. + +=item B<--dump> | B<-d> + +Print all relevant configuration data. This is equivalent to B<--command-line> +B<--options> B<--target> B<--environment> B<--make-variables> +B<--build-parameters>. + +=item B<--command-line> | B<-c> + +Print the current configuration command line. + +=item B<--options> | B<-o> + +Print the features, both enabled and disabled, and display defined macro and +skipped directories where applicable. + +=item B<--target> | B<-t> + +Print the config attributes for this config target. + +=item B<--environment> | B<-e> + +Print the environment variables and their values at the time of configuration. + +=item B<--make-variables> | B<-m> + +Print the main make variables generated in the current configuration + +=item B<--build-parameters> | B<-b> + +Print the build parameters, i.e. build file and build file templates. + +=item B<--reconfigure> | B<--reconf> | B<-r> + +Redo the configuration. + +=item B<--verbose> | B<-v> + +Verbose output. + +=back + +=cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/aes/aesv8-armx.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/aes/aesv8-armx.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/aes/aesv8-armx.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/aes/aesv8-armx.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,757 @@ +#include "arm_arch.h" + +#if __ARM_MAX_ARCH__>=7 +.text + +.align 5 +Lrcon: +.long 0x01,0x01,0x01,0x01 +.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d // rotate-n-splat +.long 0x1b,0x1b,0x1b,0x1b + +.globl _aes_v8_set_encrypt_key + +.align 5 +_aes_v8_set_encrypt_key: +Lenc_key: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + mov x3,#-1 + cmp x0,#0 + b.eq Lenc_key_abort + cmp x2,#0 + b.eq Lenc_key_abort + mov x3,#-2 + cmp w1,#128 + b.lt Lenc_key_abort + cmp w1,#256 + b.gt Lenc_key_abort + tst w1,#0x3f + b.ne Lenc_key_abort + + adr x3,Lrcon + cmp w1,#192 + + eor v0.16b,v0.16b,v0.16b + ld1 {v3.16b},[x0],#16 + mov w1,#8 // reuse w1 + ld1 {v1.4s,v2.4s},[x3],#32 + + b.lt Loop128 + b.eq L192 + b L256 + +.align 4 +Loop128: + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + b.ne Loop128 + + ld1 {v1.4s},[x3] + + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + eor v3.16b,v3.16b,v6.16b + st1 {v3.4s},[x2] + add x2,x2,#0x50 + + mov w12,#10 + b Ldone + +.align 4 +L192: + ld1 {v4.8b},[x0],#8 + movi v6.16b,#8 // borrow v6.16b + st1 {v3.4s},[x2],#16 + sub v2.16b,v2.16b,v6.16b // adjust the mask + +Loop192: + tbl v6.16b,{v4.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 +#ifdef __ARMEB__ + st1 {v4.4s},[x2],#16 + sub x2,x2,#8 +#else + st1 {v4.8b},[x2],#8 +#endif + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + + dup v5.4s,v3.s[3] + eor v5.16b,v5.16b,v4.16b + eor v6.16b,v6.16b,v1.16b + ext v4.16b,v0.16b,v4.16b,#12 + shl v1.16b,v1.16b,#1 + eor v4.16b,v4.16b,v5.16b + eor v3.16b,v3.16b,v6.16b + eor v4.16b,v4.16b,v6.16b + st1 {v3.4s},[x2],#16 + b.ne Loop192 + + mov w12,#12 + add x2,x2,#0x20 + b Ldone + +.align 4 +L256: + ld1 {v4.16b},[x0] + mov w1,#7 + mov w12,#14 + st1 {v3.4s},[x2],#16 + +Loop256: + tbl v6.16b,{v4.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v4.4s},[x2],#16 + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + st1 {v3.4s},[x2],#16 + b.eq Ldone + + dup v6.4s,v3.s[3] // just splat + ext v5.16b,v0.16b,v4.16b,#12 + aese v6.16b,v0.16b + + eor v4.16b,v4.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v4.16b,v4.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v4.16b,v4.16b,v5.16b + + eor v4.16b,v4.16b,v6.16b + b Loop256 + +Ldone: + str w12,[x2] + mov x3,#0 + +Lenc_key_abort: + mov x0,x3 // return value + ldr x29,[sp],#16 + ret + + +.globl _aes_v8_set_decrypt_key + +.align 5 +_aes_v8_set_decrypt_key: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + bl Lenc_key + + cmp x0,#0 + b.ne Ldec_key_abort + + sub x2,x2,#240 // restore original x2 + mov x4,#-16 + add x0,x2,x12,lsl#4 // end of key schedule + + ld1 {v0.4s},[x2] + ld1 {v1.4s},[x0] + st1 {v0.4s},[x0],x4 + st1 {v1.4s},[x2],#16 + +Loop_imc: + ld1 {v0.4s},[x2] + ld1 {v1.4s},[x0] + aesimc v0.16b,v0.16b + aesimc v1.16b,v1.16b + st1 {v0.4s},[x0],x4 + st1 {v1.4s},[x2],#16 + cmp x0,x2 + b.hi Loop_imc + + ld1 {v0.4s},[x2] + aesimc v0.16b,v0.16b + st1 {v0.4s},[x0] + + eor x0,x0,x0 // return value +Ldec_key_abort: + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + +.globl _aes_v8_encrypt + +.align 5 +_aes_v8_encrypt: + ldr w3,[x2,#240] + ld1 {v0.4s},[x2],#16 + ld1 {v2.16b},[x0] + sub w3,w3,#2 + ld1 {v1.4s},[x2],#16 + +Loop_enc: + aese v2.16b,v0.16b + aesmc v2.16b,v2.16b + ld1 {v0.4s},[x2],#16 + subs w3,w3,#2 + aese v2.16b,v1.16b + aesmc v2.16b,v2.16b + ld1 {v1.4s},[x2],#16 + b.gt Loop_enc + + aese v2.16b,v0.16b + aesmc v2.16b,v2.16b + ld1 {v0.4s},[x2] + aese v2.16b,v1.16b + eor v2.16b,v2.16b,v0.16b + + st1 {v2.16b},[x1] + ret + +.globl _aes_v8_decrypt + +.align 5 +_aes_v8_decrypt: + ldr w3,[x2,#240] + ld1 {v0.4s},[x2],#16 + ld1 {v2.16b},[x0] + sub w3,w3,#2 + ld1 {v1.4s},[x2],#16 + +Loop_dec: + aesd v2.16b,v0.16b + aesimc v2.16b,v2.16b + ld1 {v0.4s},[x2],#16 + subs w3,w3,#2 + aesd v2.16b,v1.16b + aesimc v2.16b,v2.16b + ld1 {v1.4s},[x2],#16 + b.gt Loop_dec + + aesd v2.16b,v0.16b + aesimc v2.16b,v2.16b + ld1 {v0.4s},[x2] + aesd v2.16b,v1.16b + eor v2.16b,v2.16b,v0.16b + + st1 {v2.16b},[x1] + ret + +.globl _aes_v8_cbc_encrypt + +.align 5 +_aes_v8_cbc_encrypt: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + subs x2,x2,#16 + mov x8,#16 + b.lo Lcbc_abort + csel x8,xzr,x8,eq + + cmp w5,#0 // en- or decrypting? + ldr w5,[x3,#240] + and x2,x2,#-16 + ld1 {v6.16b},[x4] + ld1 {v0.16b},[x0],x8 + + ld1 {v16.4s,v17.4s},[x3] // load key schedule... + sub w5,w5,#6 + add x7,x3,x5,lsl#4 // pointer to last 7 round keys + sub w5,w5,#2 + ld1 {v18.4s,v19.4s},[x7],#32 + ld1 {v20.4s,v21.4s},[x7],#32 + ld1 {v22.4s,v23.4s},[x7],#32 + ld1 {v7.4s},[x7] + + add x7,x3,#32 + mov w6,w5 + b.eq Lcbc_dec + + cmp w5,#2 + eor v0.16b,v0.16b,v6.16b + eor v5.16b,v16.16b,v7.16b + b.eq Lcbc_enc128 + + ld1 {v2.4s,v3.4s},[x7] + add x7,x3,#16 + add x6,x3,#16*4 + add x12,x3,#16*5 + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + add x14,x3,#16*6 + add x3,x3,#16*7 + b Lenter_cbc_enc + +.align 4 +Loop_cbc_enc: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + st1 {v6.16b},[x1],#16 +Lenter_cbc_enc: + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v2.16b + aesmc v0.16b,v0.16b + ld1 {v16.4s},[x6] + cmp w5,#4 + aese v0.16b,v3.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x12] + b.eq Lcbc_enc192 + + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + ld1 {v16.4s},[x14] + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x3] + nop + +Lcbc_enc192: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + subs x2,x2,#16 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + csel x8,xzr,x8,eq + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ld1 {v16.16b},[x0],x8 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + eor v16.16b,v16.16b,v5.16b + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x7] // re-pre-load rndkey[1] + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + aese v0.16b,v23.16b + eor v6.16b,v0.16b,v7.16b + b.hs Loop_cbc_enc + + st1 {v6.16b},[x1],#16 + b Lcbc_done + +.align 5 +Lcbc_enc128: + ld1 {v2.4s,v3.4s},[x7] + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + b Lenter_cbc_enc128 +Loop_cbc_enc128: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + st1 {v6.16b},[x1],#16 +Lenter_cbc_enc128: + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + subs x2,x2,#16 + aese v0.16b,v2.16b + aesmc v0.16b,v0.16b + csel x8,xzr,x8,eq + aese v0.16b,v3.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ld1 {v16.16b},[x0],x8 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + eor v16.16b,v16.16b,v5.16b + aese v0.16b,v23.16b + eor v6.16b,v0.16b,v7.16b + b.hs Loop_cbc_enc128 + + st1 {v6.16b},[x1],#16 + b Lcbc_done +.align 5 +Lcbc_dec: + ld1 {v18.16b},[x0],#16 + subs x2,x2,#32 // bias + add w6,w5,#2 + orr v3.16b,v0.16b,v0.16b + orr v1.16b,v0.16b,v0.16b + orr v19.16b,v18.16b,v18.16b + b.lo Lcbc_dec_tail + + orr v1.16b,v18.16b,v18.16b + ld1 {v18.16b},[x0],#16 + orr v2.16b,v0.16b,v0.16b + orr v3.16b,v1.16b,v1.16b + orr v19.16b,v18.16b,v18.16b + +Loop3x_cbc_dec: + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Loop3x_cbc_dec + + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + eor v4.16b,v6.16b,v7.16b + subs x2,x2,#0x30 + eor v5.16b,v2.16b,v7.16b + csel x6,x2,x6,lo // x6, w6, is zero at this point + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + eor v17.16b,v3.16b,v7.16b + add x0,x0,x6 // x0 is adjusted in such way that + // at exit from the loop v1.16b-v18.16b + // are loaded with last "words" + orr v6.16b,v19.16b,v19.16b + mov x7,x3 + aesd v0.16b,v20.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v20.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v20.16b + aesimc v18.16b,v18.16b + ld1 {v2.16b},[x0],#16 + aesd v0.16b,v21.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v21.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v21.16b + aesimc v18.16b,v18.16b + ld1 {v3.16b},[x0],#16 + aesd v0.16b,v22.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v22.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v22.16b + aesimc v18.16b,v18.16b + ld1 {v19.16b},[x0],#16 + aesd v0.16b,v23.16b + aesd v1.16b,v23.16b + aesd v18.16b,v23.16b + ld1 {v16.4s},[x7],#16 // re-pre-load rndkey[0] + add w6,w5,#2 + eor v4.16b,v4.16b,v0.16b + eor v5.16b,v5.16b,v1.16b + eor v18.16b,v18.16b,v17.16b + ld1 {v17.4s},[x7],#16 // re-pre-load rndkey[1] + st1 {v4.16b},[x1],#16 + orr v0.16b,v2.16b,v2.16b + st1 {v5.16b},[x1],#16 + orr v1.16b,v3.16b,v3.16b + st1 {v18.16b},[x1],#16 + orr v18.16b,v19.16b,v19.16b + b.hs Loop3x_cbc_dec + + cmn x2,#0x30 + b.eq Lcbc_done + nop + +Lcbc_dec_tail: + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Lcbc_dec_tail + + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + aesd v1.16b,v20.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v20.16b + aesimc v18.16b,v18.16b + cmn x2,#0x20 + aesd v1.16b,v21.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v21.16b + aesimc v18.16b,v18.16b + eor v5.16b,v6.16b,v7.16b + aesd v1.16b,v22.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v22.16b + aesimc v18.16b,v18.16b + eor v17.16b,v3.16b,v7.16b + aesd v1.16b,v23.16b + aesd v18.16b,v23.16b + b.eq Lcbc_dec_one + eor v5.16b,v5.16b,v1.16b + eor v17.16b,v17.16b,v18.16b + orr v6.16b,v19.16b,v19.16b + st1 {v5.16b},[x1],#16 + st1 {v17.16b},[x1],#16 + b Lcbc_done + +Lcbc_dec_one: + eor v5.16b,v5.16b,v18.16b + orr v6.16b,v19.16b,v19.16b + st1 {v5.16b},[x1],#16 + +Lcbc_done: + st1 {v6.16b},[x4] +Lcbc_abort: + ldr x29,[sp],#16 + ret + +.globl _aes_v8_ctr32_encrypt_blocks + +.align 5 +_aes_v8_ctr32_encrypt_blocks: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + ldr w5,[x3,#240] + + ldr w8, [x4, #12] +#ifdef __ARMEB__ + ld1 {v0.16b},[x4] +#else + ld1 {v0.4s},[x4] +#endif + ld1 {v16.4s,v17.4s},[x3] // load key schedule... + sub w5,w5,#4 + mov x12,#16 + cmp x2,#2 + add x7,x3,x5,lsl#4 // pointer to last 5 round keys + sub w5,w5,#2 + ld1 {v20.4s,v21.4s},[x7],#32 + ld1 {v22.4s,v23.4s},[x7],#32 + ld1 {v7.4s},[x7] + add x7,x3,#32 + mov w6,w5 + csel x12,xzr,x12,lo +#ifndef __ARMEB__ + rev w8, w8 +#endif + add w10, w8, #1 + orr v6.16b,v0.16b,v0.16b + rev w10, w10 + mov v6.s[3],w10 + add w8, w8, #2 + orr v1.16b,v6.16b,v6.16b + b.ls Lctr32_tail + rev w12, w8 + mov v6.s[3],w12 + sub x2,x2,#3 // bias + orr v18.16b,v6.16b,v6.16b + b Loop3x_ctr32 + +.align 4 +Loop3x_ctr32: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + aese v18.16b,v16.16b + aesmc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v18.16b,v17.16b + aesmc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Loop3x_ctr32 + + aese v0.16b,v16.16b + aesmc v4.16b,v0.16b + aese v1.16b,v16.16b + aesmc v5.16b,v1.16b + ld1 {v2.16b},[x0],#16 + add w9,w8,#1 + aese v18.16b,v16.16b + aesmc v18.16b,v18.16b + ld1 {v3.16b},[x0],#16 + rev w9,w9 + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + ld1 {v19.16b},[x0],#16 + mov x7,x3 + aese v18.16b,v17.16b + aesmc v17.16b,v18.16b + aese v4.16b,v20.16b + aesmc v4.16b,v4.16b + aese v5.16b,v20.16b + aesmc v5.16b,v5.16b + eor v2.16b,v2.16b,v7.16b + add w10,w8,#2 + aese v17.16b,v20.16b + aesmc v17.16b,v17.16b + eor v3.16b,v3.16b,v7.16b + add w8,w8,#3 + aese v4.16b,v21.16b + aesmc v4.16b,v4.16b + aese v5.16b,v21.16b + aesmc v5.16b,v5.16b + eor v19.16b,v19.16b,v7.16b + mov v6.s[3], w9 + aese v17.16b,v21.16b + aesmc v17.16b,v17.16b + orr v0.16b,v6.16b,v6.16b + rev w10,w10 + aese v4.16b,v22.16b + aesmc v4.16b,v4.16b + mov v6.s[3], w10 + rev w12,w8 + aese v5.16b,v22.16b + aesmc v5.16b,v5.16b + orr v1.16b,v6.16b,v6.16b + mov v6.s[3], w12 + aese v17.16b,v22.16b + aesmc v17.16b,v17.16b + orr v18.16b,v6.16b,v6.16b + subs x2,x2,#3 + aese v4.16b,v23.16b + aese v5.16b,v23.16b + aese v17.16b,v23.16b + + eor v2.16b,v2.16b,v4.16b + ld1 {v16.4s},[x7],#16 // re-pre-load rndkey[0] + st1 {v2.16b},[x1],#16 + eor v3.16b,v3.16b,v5.16b + mov w6,w5 + st1 {v3.16b},[x1],#16 + eor v19.16b,v19.16b,v17.16b + ld1 {v17.4s},[x7],#16 // re-pre-load rndkey[1] + st1 {v19.16b},[x1],#16 + b.hs Loop3x_ctr32 + + adds x2,x2,#3 + b.eq Lctr32_done + cmp x2,#1 + mov x12,#16 + csel x12,xzr,x12,eq + +Lctr32_tail: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + ld1 {v17.4s},[x7],#16 + b.gt Lctr32_tail + + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + ld1 {v2.16b},[x0],x12 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + aese v1.16b,v20.16b + aesmc v1.16b,v1.16b + ld1 {v3.16b},[x0] + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + aese v1.16b,v21.16b + aesmc v1.16b,v1.16b + eor v2.16b,v2.16b,v7.16b + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + aese v1.16b,v22.16b + aesmc v1.16b,v1.16b + eor v3.16b,v3.16b,v7.16b + aese v0.16b,v23.16b + aese v1.16b,v23.16b + + cmp x2,#1 + eor v2.16b,v2.16b,v0.16b + eor v3.16b,v3.16b,v1.16b + st1 {v2.16b},[x1],#16 + b.eq Lctr32_done + st1 {v3.16b},[x1] + +Lctr32_done: + ldr x29,[sp],#16 + ret + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/aes/vpaes-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/aes/vpaes-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/aes/vpaes-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/aes/vpaes-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1196 @@ +.text + + +.align 7 // totally strategic alignment +_vpaes_consts: +Lk_mc_forward: // mc_forward +.quad 0x0407060500030201, 0x0C0F0E0D080B0A09 +.quad 0x080B0A0904070605, 0x000302010C0F0E0D +.quad 0x0C0F0E0D080B0A09, 0x0407060500030201 +.quad 0x000302010C0F0E0D, 0x080B0A0904070605 +Lk_mc_backward: // mc_backward +.quad 0x0605040702010003, 0x0E0D0C0F0A09080B +.quad 0x020100030E0D0C0F, 0x0A09080B06050407 +.quad 0x0E0D0C0F0A09080B, 0x0605040702010003 +.quad 0x0A09080B06050407, 0x020100030E0D0C0F +Lk_sr: // sr +.quad 0x0706050403020100, 0x0F0E0D0C0B0A0908 +.quad 0x030E09040F0A0500, 0x0B06010C07020D08 +.quad 0x0F060D040B020900, 0x070E050C030A0108 +.quad 0x0B0E0104070A0D00, 0x0306090C0F020508 + +// +// "Hot" constants +// +Lk_inv: // inv, inva +.quad 0x0E05060F0D080180, 0x040703090A0B0C02 +.quad 0x01040A060F0B0780, 0x030D0E0C02050809 +Lk_ipt: // input transform (lo, hi) +.quad 0xC2B2E8985A2A7000, 0xCABAE09052227808 +.quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81 +Lk_sbo: // sbou, sbot +.quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878 +.quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA +Lk_sb1: // sb1u, sb1t +.quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF +.quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544 +Lk_sb2: // sb2u, sb2t +.quad 0x69EB88400AE12900, 0xC2A163C8AB82234A +.quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD + +// +// Decryption stuff +// +Lk_dipt: // decryption input transform +.quad 0x0F505B040B545F00, 0x154A411E114E451A +.quad 0x86E383E660056500, 0x12771772F491F194 +Lk_dsbo: // decryption sbox final output +.quad 0x1387EA537EF94000, 0xC7AA6DB9D4943E2D +.quad 0x12D7560F93441D00, 0xCA4B8159D8C58E9C +Lk_dsb9: // decryption sbox output *9*u, *9*t +.quad 0x851C03539A86D600, 0xCAD51F504F994CC9 +.quad 0xC03B1789ECD74900, 0x725E2C9EB2FBA565 +Lk_dsbd: // decryption sbox output *D*u, *D*t +.quad 0x7D57CCDFE6B1A200, 0xF56E9B13882A4439 +.quad 0x3CE2FAF724C6CB00, 0x2931180D15DEEFD3 +Lk_dsbb: // decryption sbox output *B*u, *B*t +.quad 0xD022649296B44200, 0x602646F6B0F2D404 +.quad 0xC19498A6CD596700, 0xF3FF0C3E3255AA6B +Lk_dsbe: // decryption sbox output *E*u, *E*t +.quad 0x46F2929626D4D000, 0x2242600464B4F6B0 +.quad 0x0C55A6CDFFAAC100, 0x9467F36B98593E32 + +// +// Key schedule constants +// +Lk_dksd: // decryption key schedule: invskew x*D +.quad 0xFEB91A5DA3E44700, 0x0740E3A45A1DBEF9 +.quad 0x41C277F4B5368300, 0x5FDC69EAAB289D1E +Lk_dksb: // decryption key schedule: invskew x*B +.quad 0x9A4FCA1F8550D500, 0x03D653861CC94C99 +.quad 0x115BEDA7B6FC4A00, 0xD993256F7E3482C8 +Lk_dkse: // decryption key schedule: invskew x*E + 0x63 +.quad 0xD5031CCA1FC9D600, 0x53859A4C994F5086 +.quad 0xA23196054FDC7BE8, 0xCD5EF96A20B31487 +Lk_dks9: // decryption key schedule: invskew x*9 +.quad 0xB6116FC87ED9A700, 0x4AED933482255BFC +.quad 0x4576516227143300, 0x8BB89FACE9DAFDCE + +Lk_rcon: // rcon +.quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81 + +Lk_opt: // output transform +.quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808 +.quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0 +Lk_deskew: // deskew tables: inverts the sbox's "skew" +.quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A +.quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77 + +.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105,111,110,32,65,69,83,32,102,111,114,32,65,82,77,118,56,44,32,77,105,107,101,32,72,97,109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105,118,101,114,115,105,116,121,41,0 +.align 2 + +.align 6 +## +## _aes_preheat +## +## Fills register %r10 -> .aes_consts (so you can -fPIC) +## and %xmm9-%xmm15 as specified below. +## + +.align 4 +_vpaes_encrypt_preheat: + adr x10, Lk_inv + movi v17.16b, #0x0f + ld1 {v18.2d,v19.2d}, [x10],#32 // Lk_inv + ld1 {v20.2d,v21.2d,v22.2d,v23.2d}, [x10],#64 // Lk_ipt, Lk_sbo + ld1 {v24.2d,v25.2d,v26.2d,v27.2d}, [x10] // Lk_sb1, Lk_sb2 + ret + + +## +## _aes_encrypt_core +## +## AES-encrypt %xmm0. +## +## Inputs: +## %xmm0 = input +## %xmm9-%xmm15 as in _vpaes_preheat +## (%rdx) = scheduled keys +## +## Output in %xmm0 +## Clobbers %xmm1-%xmm5, %r9, %r10, %r11, %rax +## Preserves %xmm6 - %xmm8 so you get some local vectors +## +## + +.align 4 +_vpaes_encrypt_core: + mov x9, x2 + ldr w8, [x2,#240] // pull rounds + adr x11, Lk_mc_forward+16 + // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key + and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v7.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + tbl v1.16b, {v20.16b}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1 + // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi + tbl v2.16b, {v21.16b}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2 + eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0 + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + b Lenc_entry + +.align 4 +Lenc_loop: + // middle of middle round + add x10, x11, #0x40 + tbl v4.16b, {v25.16b}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u + ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # Lk_mc_forward[] + tbl v0.16b, {v24.16b}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + tbl v5.16b, {v27.16b}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + tbl v2.16b, {v26.16b}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t + ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # Lk_mc_backward[] + tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B + eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A + tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B + tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C + eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D + and x11, x11, #~(1<<6) // and $0x30, %r11 # ... mod 4 + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D + sub w8, w8, #1 // nr-- + +Lenc_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + tbl v5.16b, {v19.16b}, v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + tbl v3.16b, {v18.16b}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v4.16b, {v18.16b}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + tbl v2.16b, {v18.16b}, v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v3.16b, {v18.16b}, v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5 + cbnz w8, Lenc_loop + + // middle of last round + add x10, x11, #0x80 + // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo + // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + tbl v4.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # Lk_sr[] + tbl v0.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 + ret + + +.globl _vpaes_encrypt + +.align 4 +_vpaes_encrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v7.16b}, [x0] + bl _vpaes_encrypt_preheat + bl _vpaes_encrypt_core + st1 {v0.16b}, [x1] + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + + +.align 4 +_vpaes_encrypt_2x: + mov x9, x2 + ldr w8, [x2,#240] // pull rounds + adr x11, Lk_mc_forward+16 + // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key + and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v14.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + and v9.16b, v15.16b, v17.16b + ushr v8.16b, v15.16b, #4 + tbl v1.16b, {v20.16b}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1 + tbl v9.16b, {v20.16b}, v9.16b + // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi + tbl v2.16b, {v21.16b}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2 + tbl v10.16b, {v21.16b}, v8.16b + eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0 + eor v8.16b, v9.16b, v16.16b + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + eor v8.16b, v8.16b, v10.16b + b Lenc_2x_entry + +.align 4 +Lenc_2x_loop: + // middle of middle round + add x10, x11, #0x40 + tbl v4.16b, {v25.16b}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u + tbl v12.16b, {v25.16b}, v10.16b + ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # Lk_mc_forward[] + tbl v0.16b, {v24.16b}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t + tbl v8.16b, {v24.16b}, v11.16b + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v12.16b, v12.16b, v16.16b + tbl v5.16b, {v27.16b}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u + tbl v13.16b, {v27.16b}, v10.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + eor v8.16b, v8.16b, v12.16b + tbl v2.16b, {v26.16b}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t + tbl v10.16b, {v26.16b}, v11.16b + ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # Lk_mc_backward[] + tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B + tbl v11.16b, {v8.16b}, v1.16b + eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A + eor v10.16b, v10.16b, v13.16b + tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D + tbl v8.16b, {v8.16b}, v4.16b + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B + eor v11.16b, v11.16b, v10.16b + tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C + tbl v12.16b, {v11.16b},v1.16b + eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D + eor v8.16b, v8.16b, v11.16b + and x11, x11, #~(1<<6) // and $0x30, %r11 # ... mod 4 + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D + eor v8.16b, v8.16b, v12.16b + sub w8, w8, #1 // nr-- + +Lenc_2x_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + and v9.16b, v8.16b, v17.16b + ushr v8.16b, v8.16b, #4 + tbl v5.16b, {v19.16b},v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k + tbl v13.16b, {v19.16b},v9.16b + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + eor v9.16b, v9.16b, v8.16b + tbl v3.16b, {v18.16b},v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v11.16b, {v18.16b},v8.16b + tbl v4.16b, {v18.16b},v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + tbl v12.16b, {v18.16b},v9.16b + eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v11.16b, v11.16b, v13.16b + eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + eor v12.16b, v12.16b, v13.16b + tbl v2.16b, {v18.16b},v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v10.16b, {v18.16b},v11.16b + tbl v3.16b, {v18.16b},v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + tbl v11.16b, {v18.16b},v12.16b + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v10.16b, v10.16b, v9.16b + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + eor v11.16b, v11.16b, v8.16b + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5 + cbnz w8, Lenc_2x_loop + + // middle of last round + add x10, x11, #0x80 + // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo + // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + tbl v4.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + tbl v12.16b, {v22.16b}, v10.16b + ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # Lk_sr[] + tbl v0.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t + tbl v8.16b, {v23.16b}, v11.16b + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v12.16b, v12.16b, v16.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + eor v8.16b, v8.16b, v12.16b + tbl v0.16b, {v0.16b},v1.16b // vpshufb %xmm1, %xmm0, %xmm0 + tbl v1.16b, {v8.16b},v1.16b + ret + + + +.align 4 +_vpaes_decrypt_preheat: + adr x10, Lk_inv + movi v17.16b, #0x0f + adr x11, Lk_dipt + ld1 {v18.2d,v19.2d}, [x10],#32 // Lk_inv + ld1 {v20.2d,v21.2d,v22.2d,v23.2d}, [x11],#64 // Lk_dipt, Lk_dsbo + ld1 {v24.2d,v25.2d,v26.2d,v27.2d}, [x11],#64 // Lk_dsb9, Lk_dsbd + ld1 {v28.2d,v29.2d,v30.2d,v31.2d}, [x11] // Lk_dsbb, Lk_dsbe + ret + + +## +## Decryption core +## +## Same API as encryption core. +## + +.align 4 +_vpaes_decrypt_core: + mov x9, x2 + ldr w8, [x2,#240] // pull rounds + + // vmovdqa .Lk_dipt(%rip), %xmm2 # iptlo + lsl x11, x8, #4 // mov %rax, %r11; shl $4, %r11 + eor x11, x11, #0x30 // xor $0x30, %r11 + adr x10, Lk_sr + and x11, x11, #0x30 // and $0x30, %r11 + add x11, x11, x10 + adr x10, Lk_mc_forward+48 + + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm4 # round0 key + and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v7.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + tbl v2.16b, {v20.16b}, v1.16b // vpshufb %xmm1, %xmm2, %xmm2 + ld1 {v5.2d}, [x10] // vmovdqa Lk_mc_forward+48(%rip), %xmm5 + // vmovdqa .Lk_dipt+16(%rip), %xmm1 # ipthi + tbl v0.16b, {v21.16b}, v0.16b // vpshufb %xmm0, %xmm1, %xmm0 + eor v2.16b, v2.16b, v16.16b // vpxor %xmm4, %xmm2, %xmm2 + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + b Ldec_entry + +.align 4 +Ldec_loop: +// +// Inverse mix columns +// + // vmovdqa -0x20(%r10),%xmm4 # 4 : sb9u + // vmovdqa -0x10(%r10),%xmm1 # 0 : sb9t + tbl v4.16b, {v24.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sb9u + tbl v1.16b, {v25.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb9t + eor v0.16b, v4.16b, v16.16b // vpxor %xmm4, %xmm0, %xmm0 + // vmovdqa 0x00(%r10),%xmm4 # 4 : sbdu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + // vmovdqa 0x10(%r10),%xmm1 # 0 : sbdt + + tbl v4.16b, {v26.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbdu + tbl v0.16b, {v0.16b}, v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v1.16b, {v27.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbdt + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + // vmovdqa 0x20(%r10), %xmm4 # 4 : sbbu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + // vmovdqa 0x30(%r10), %xmm1 # 0 : sbbt + + tbl v4.16b, {v28.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbbu + tbl v0.16b, {v0.16b}, v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v1.16b, {v29.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbbt + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + // vmovdqa 0x40(%r10), %xmm4 # 4 : sbeu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + // vmovdqa 0x50(%r10), %xmm1 # 0 : sbet + + tbl v4.16b, {v30.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbeu + tbl v0.16b, {v0.16b}, v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v1.16b, {v31.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbet + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + ext v5.16b, v5.16b, v5.16b, #12 // vpalignr $12, %xmm5, %xmm5, %xmm5 + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + sub w8, w8, #1 // sub $1,%rax # nr-- + +Ldec_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + tbl v2.16b, {v19.16b}, v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + tbl v3.16b, {v18.16b}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v4.16b, {v18.16b}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + tbl v2.16b, {v18.16b}, v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v3.16b, {v18.16b}, v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm0 + cbnz w8, Ldec_loop + + // middle of last round + // vmovdqa 0x60(%r10), %xmm4 # 3 : sbou + tbl v4.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + // vmovdqa 0x70(%r10), %xmm1 # 0 : sbot + ld1 {v2.2d}, [x11] // vmovdqa -0x160(%r11), %xmm2 # Lk_sr-Lk_dsbd=-0x160 + tbl v1.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb1t + eor v4.16b, v4.16b, v16.16b // vpxor %xmm0, %xmm4, %xmm4 # 4 = sb1u + k + eor v0.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm0 # 0 = A + tbl v0.16b, {v0.16b}, v2.16b // vpshufb %xmm2, %xmm0, %xmm0 + ret + + +.globl _vpaes_decrypt + +.align 4 +_vpaes_decrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v7.16b}, [x0] + bl _vpaes_decrypt_preheat + bl _vpaes_decrypt_core + st1 {v0.16b}, [x1] + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// v14-v15 input, v0-v1 output + +.align 4 +_vpaes_decrypt_2x: + mov x9, x2 + ldr w8, [x2,#240] // pull rounds + + // vmovdqa .Lk_dipt(%rip), %xmm2 # iptlo + lsl x11, x8, #4 // mov %rax, %r11; shl $4, %r11 + eor x11, x11, #0x30 // xor $0x30, %r11 + adr x10, Lk_sr + and x11, x11, #0x30 // and $0x30, %r11 + add x11, x11, x10 + adr x10, Lk_mc_forward+48 + + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm4 # round0 key + and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v14.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + and v9.16b, v15.16b, v17.16b + ushr v8.16b, v15.16b, #4 + tbl v2.16b, {v20.16b},v1.16b // vpshufb %xmm1, %xmm2, %xmm2 + tbl v10.16b, {v20.16b},v9.16b + ld1 {v5.2d}, [x10] // vmovdqa Lk_mc_forward+48(%rip), %xmm5 + // vmovdqa .Lk_dipt+16(%rip), %xmm1 # ipthi + tbl v0.16b, {v21.16b},v0.16b // vpshufb %xmm0, %xmm1, %xmm0 + tbl v8.16b, {v21.16b},v8.16b + eor v2.16b, v2.16b, v16.16b // vpxor %xmm4, %xmm2, %xmm2 + eor v10.16b, v10.16b, v16.16b + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + eor v8.16b, v8.16b, v10.16b + b Ldec_2x_entry + +.align 4 +Ldec_2x_loop: +// +// Inverse mix columns +// + // vmovdqa -0x20(%r10),%xmm4 # 4 : sb9u + // vmovdqa -0x10(%r10),%xmm1 # 0 : sb9t + tbl v4.16b, {v24.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sb9u + tbl v12.16b, {v24.16b}, v10.16b + tbl v1.16b, {v25.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb9t + tbl v9.16b, {v25.16b}, v11.16b + eor v0.16b, v4.16b, v16.16b // vpxor %xmm4, %xmm0, %xmm0 + eor v8.16b, v12.16b, v16.16b + // vmovdqa 0x00(%r10),%xmm4 # 4 : sbdu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + eor v8.16b, v8.16b, v9.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + // vmovdqa 0x10(%r10),%xmm1 # 0 : sbdt + + tbl v4.16b, {v26.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbdu + tbl v12.16b, {v26.16b}, v10.16b + tbl v0.16b, {v0.16b},v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v8.16b, {v8.16b},v5.16b + tbl v1.16b, {v27.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbdt + tbl v9.16b, {v27.16b}, v11.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + eor v8.16b, v8.16b, v12.16b + // vmovdqa 0x20(%r10), %xmm4 # 4 : sbbu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + eor v8.16b, v8.16b, v9.16b + // vmovdqa 0x30(%r10), %xmm1 # 0 : sbbt + + tbl v4.16b, {v28.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbbu + tbl v12.16b, {v28.16b}, v10.16b + tbl v0.16b, {v0.16b},v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v8.16b, {v8.16b},v5.16b + tbl v1.16b, {v29.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbbt + tbl v9.16b, {v29.16b}, v11.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + eor v8.16b, v8.16b, v12.16b + // vmovdqa 0x40(%r10), %xmm4 # 4 : sbeu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + eor v8.16b, v8.16b, v9.16b + // vmovdqa 0x50(%r10), %xmm1 # 0 : sbet + + tbl v4.16b, {v30.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbeu + tbl v12.16b, {v30.16b}, v10.16b + tbl v0.16b, {v0.16b},v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v8.16b, {v8.16b},v5.16b + tbl v1.16b, {v31.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbet + tbl v9.16b, {v31.16b}, v11.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + eor v8.16b, v8.16b, v12.16b + ext v5.16b, v5.16b, v5.16b, #12 // vpalignr $12, %xmm5, %xmm5, %xmm5 + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + eor v8.16b, v8.16b, v9.16b + sub w8, w8, #1 // sub $1,%rax # nr-- + +Ldec_2x_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + and v9.16b, v8.16b, v17.16b + ushr v8.16b, v8.16b, #4 + tbl v2.16b, {v19.16b},v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k + tbl v10.16b, {v19.16b},v9.16b + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + eor v9.16b, v9.16b, v8.16b + tbl v3.16b, {v18.16b},v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v11.16b, {v18.16b},v8.16b + tbl v4.16b, {v18.16b},v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + tbl v12.16b, {v18.16b},v9.16b + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v11.16b, v11.16b, v10.16b + eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + eor v12.16b, v12.16b, v10.16b + tbl v2.16b, {v18.16b},v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v10.16b, {v18.16b},v11.16b + tbl v3.16b, {v18.16b},v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + tbl v11.16b, {v18.16b},v12.16b + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v10.16b, v10.16b, v9.16b + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + eor v11.16b, v11.16b, v8.16b + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm0 + cbnz w8, Ldec_2x_loop + + // middle of last round + // vmovdqa 0x60(%r10), %xmm4 # 3 : sbou + tbl v4.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + tbl v12.16b, {v22.16b}, v10.16b + // vmovdqa 0x70(%r10), %xmm1 # 0 : sbot + tbl v1.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb1t + tbl v9.16b, {v23.16b}, v11.16b + ld1 {v2.2d}, [x11] // vmovdqa -0x160(%r11), %xmm2 # Lk_sr-Lk_dsbd=-0x160 + eor v4.16b, v4.16b, v16.16b // vpxor %xmm0, %xmm4, %xmm4 # 4 = sb1u + k + eor v12.16b, v12.16b, v16.16b + eor v0.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm0 # 0 = A + eor v8.16b, v9.16b, v12.16b + tbl v0.16b, {v0.16b},v2.16b // vpshufb %xmm2, %xmm0, %xmm0 + tbl v1.16b, {v8.16b},v2.16b + ret + +######################################################## +## ## +## AES key schedule ## +## ## +######################################################## + +.align 4 +_vpaes_key_preheat: + adr x10, Lk_inv + movi v16.16b, #0x5b // Lk_s63 + adr x11, Lk_sb1 + movi v17.16b, #0x0f // Lk_s0F + ld1 {v18.2d,v19.2d,v20.2d,v21.2d}, [x10] // Lk_inv, Lk_ipt + adr x10, Lk_dksd + ld1 {v22.2d,v23.2d}, [x11] // Lk_sb1 + adr x11, Lk_mc_forward + ld1 {v24.2d,v25.2d,v26.2d,v27.2d}, [x10],#64 // Lk_dksd, Lk_dksb + ld1 {v28.2d,v29.2d,v30.2d,v31.2d}, [x10],#64 // Lk_dkse, Lk_dks9 + ld1 {v8.2d}, [x10] // Lk_rcon + ld1 {v9.2d}, [x11] // Lk_mc_forward[0] + ret + + + +.align 4 +_vpaes_schedule_core: +.long 0xd503233f // paciasp + stp x29, x30, [sp,#-16]! + add x29,sp,#0 + + bl _vpaes_key_preheat // load the tables + + ld1 {v0.16b}, [x0],#16 // vmovdqu (%rdi), %xmm0 # load key (unaligned) + + // input transform + mov v3.16b, v0.16b // vmovdqa %xmm0, %xmm3 + bl _vpaes_schedule_transform + mov v7.16b, v0.16b // vmovdqa %xmm0, %xmm7 + + adr x10, Lk_sr // lea Lk_sr(%rip),%r10 + add x8, x8, x10 + cbnz w3, Lschedule_am_decrypting + + // encrypting, output zeroth round key after transform + st1 {v0.2d}, [x2] // vmovdqu %xmm0, (%rdx) + b Lschedule_go + +Lschedule_am_decrypting: + // decrypting, output zeroth round key after shiftrows + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1 + tbl v3.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + st1 {v3.2d}, [x2] // vmovdqu %xmm3, (%rdx) + eor x8, x8, #0x30 // xor $0x30, %r8 + +Lschedule_go: + cmp w1, #192 // cmp $192, %esi + b.hi Lschedule_256 + b.eq Lschedule_192 + // 128: fall though + +## +## .schedule_128 +## +## 128-bit specific part of key schedule. +## +## This schedule is really simple, because all its parts +## are accomplished by the subroutines. +## +Lschedule_128: + mov x0, #10 // mov $10, %esi + +Loop_schedule_128: + sub x0, x0, #1 // dec %esi + bl _vpaes_schedule_round + cbz x0, Lschedule_mangle_last + bl _vpaes_schedule_mangle // write output + b Loop_schedule_128 + +## +## .aes_schedule_192 +## +## 192-bit specific part of key schedule. +## +## The main body of this schedule is the same as the 128-bit +## schedule, but with more smearing. The long, high side is +## stored in %xmm7 as before, and the short, low side is in +## the high bits of %xmm6. +## +## This schedule is somewhat nastier, however, because each +## round produces 192 bits of key material, or 1.5 round keys. +## Therefore, on each cycle we do 2 rounds and produce 3 round +## keys. +## +.align 4 +Lschedule_192: + sub x0, x0, #8 + ld1 {v0.16b}, [x0] // vmovdqu 8(%rdi),%xmm0 # load key part 2 (very unaligned) + bl _vpaes_schedule_transform // input transform + mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save short part + eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 # clear 4 + ins v6.d[0], v4.d[0] // vmovhlps %xmm4, %xmm6, %xmm6 # clobber low side with zeros + mov x0, #4 // mov $4, %esi + +Loop_schedule_192: + sub x0, x0, #1 // dec %esi + bl _vpaes_schedule_round + ext v0.16b, v6.16b, v0.16b, #8 // vpalignr $8,%xmm6,%xmm0,%xmm0 + bl _vpaes_schedule_mangle // save key n + bl _vpaes_schedule_192_smear + bl _vpaes_schedule_mangle // save key n+1 + bl _vpaes_schedule_round + cbz x0, Lschedule_mangle_last + bl _vpaes_schedule_mangle // save key n+2 + bl _vpaes_schedule_192_smear + b Loop_schedule_192 + +## +## .aes_schedule_256 +## +## 256-bit specific part of key schedule. +## +## The structure here is very similar to the 128-bit +## schedule, but with an additional "low side" in +## %xmm6. The low side's rounds are the same as the +## high side's, except no rcon and no rotation. +## +.align 4 +Lschedule_256: + ld1 {v0.16b}, [x0] // vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) + bl _vpaes_schedule_transform // input transform + mov x0, #7 // mov $7, %esi + +Loop_schedule_256: + sub x0, x0, #1 // dec %esi + bl _vpaes_schedule_mangle // output low result + mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6 + + // high round + bl _vpaes_schedule_round + cbz x0, Lschedule_mangle_last + bl _vpaes_schedule_mangle + + // low round. swap xmm7 and xmm6 + dup v0.4s, v0.s[3] // vpshufd $0xFF, %xmm0, %xmm0 + movi v4.16b, #0 + mov v5.16b, v7.16b // vmovdqa %xmm7, %xmm5 + mov v7.16b, v6.16b // vmovdqa %xmm6, %xmm7 + bl _vpaes_schedule_low_round + mov v7.16b, v5.16b // vmovdqa %xmm5, %xmm7 + + b Loop_schedule_256 + +## +## .aes_schedule_mangle_last +## +## Mangler for last round of key schedule +## Mangles %xmm0 +## when encrypting, outputs out(%xmm0) ^ 63 +## when decrypting, outputs unskew(%xmm0) +## +## Always called right before return... jumps to cleanup and exits +## +.align 4 +Lschedule_mangle_last: + // schedule last round key from xmm0 + adr x11, Lk_deskew // lea Lk_deskew(%rip),%r11 # prepare to deskew + cbnz w3, Lschedule_mangle_last_dec + + // encrypting + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10),%xmm1 + adr x11, Lk_opt // lea Lk_opt(%rip), %r11 # prepare to output transform + add x2, x2, #32 // add $32, %rdx + tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 # output permute + +Lschedule_mangle_last_dec: + ld1 {v20.2d,v21.2d}, [x11] // reload constants + sub x2, x2, #16 // add $-16, %rdx + eor v0.16b, v0.16b, v16.16b // vpxor Lk_s63(%rip), %xmm0, %xmm0 + bl _vpaes_schedule_transform // output transform + st1 {v0.2d}, [x2] // vmovdqu %xmm0, (%rdx) # save last key + + // cleanup + eor v0.16b, v0.16b, v0.16b // vpxor %xmm0, %xmm0, %xmm0 + eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1 + eor v2.16b, v2.16b, v2.16b // vpxor %xmm2, %xmm2, %xmm2 + eor v3.16b, v3.16b, v3.16b // vpxor %xmm3, %xmm3, %xmm3 + eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 + eor v5.16b, v5.16b, v5.16b // vpxor %xmm5, %xmm5, %xmm5 + eor v6.16b, v6.16b, v6.16b // vpxor %xmm6, %xmm6, %xmm6 + eor v7.16b, v7.16b, v7.16b // vpxor %xmm7, %xmm7, %xmm7 + ldp x29, x30, [sp],#16 +.long 0xd50323bf // autiasp + ret + + +## +## .aes_schedule_192_smear +## +## Smear the short, low side in the 192-bit key schedule. +## +## Inputs: +## %xmm7: high side, b a x y +## %xmm6: low side, d c 0 0 +## %xmm13: 0 +## +## Outputs: +## %xmm6: b+c+d b+c 0 0 +## %xmm0: b+c+d b+c b a +## + +.align 4 +_vpaes_schedule_192_smear: + movi v1.16b, #0 + dup v0.4s, v7.s[3] + ins v1.s[3], v6.s[2] // vpshufd $0x80, %xmm6, %xmm1 # d c 0 0 -> c 0 0 0 + ins v0.s[0], v7.s[2] // vpshufd $0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a + eor v6.16b, v6.16b, v1.16b // vpxor %xmm1, %xmm6, %xmm6 # -> c+d c 0 0 + eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1 + eor v6.16b, v6.16b, v0.16b // vpxor %xmm0, %xmm6, %xmm6 # -> b+c+d b+c b a + mov v0.16b, v6.16b // vmovdqa %xmm6, %xmm0 + ins v6.d[0], v1.d[0] // vmovhlps %xmm1, %xmm6, %xmm6 # clobber low side with zeros + ret + + +## +## .aes_schedule_round +## +## Runs one main round of the key schedule on %xmm0, %xmm7 +## +## Specifically, runs subbytes on the high dword of %xmm0 +## then rotates it by one byte and xors into the low dword of +## %xmm7. +## +## Adds rcon from low byte of %xmm8, then rotates %xmm8 for +## next rcon. +## +## Smears the dwords of %xmm7 by xoring the low into the +## second low, result into third, result into highest. +## +## Returns results in %xmm7 = %xmm0. +## Clobbers %xmm1-%xmm4, %r11. +## + +.align 4 +_vpaes_schedule_round: + // extract rcon from xmm8 + movi v4.16b, #0 // vpxor %xmm4, %xmm4, %xmm4 + ext v1.16b, v8.16b, v4.16b, #15 // vpalignr $15, %xmm8, %xmm4, %xmm1 + ext v8.16b, v8.16b, v8.16b, #15 // vpalignr $15, %xmm8, %xmm8, %xmm8 + eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7 + + // rotate + dup v0.4s, v0.s[3] // vpshufd $0xFF, %xmm0, %xmm0 + ext v0.16b, v0.16b, v0.16b, #1 // vpalignr $1, %xmm0, %xmm0, %xmm0 + + // fall through... + + // low round: same as high round, but no rotation and no rcon. +_vpaes_schedule_low_round: + // smear xmm7 + ext v1.16b, v4.16b, v7.16b, #12 // vpslldq $4, %xmm7, %xmm1 + eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7 + ext v4.16b, v4.16b, v7.16b, #8 // vpslldq $8, %xmm7, %xmm4 + + // subbytes + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + eor v7.16b, v7.16b, v4.16b // vpxor %xmm4, %xmm7, %xmm7 + tbl v2.16b, {v19.16b}, v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + tbl v3.16b, {v18.16b}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + tbl v4.16b, {v18.16b}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + eor v7.16b, v7.16b, v16.16b // vpxor Lk_s63(%rip), %xmm7, %xmm7 + tbl v3.16b, {v18.16b}, v3.16b // vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak + eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + tbl v2.16b, {v18.16b}, v4.16b // vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak + eor v3.16b, v3.16b, v1.16b // vpxor %xmm1, %xmm3, %xmm3 # 2 = io + eor v2.16b, v2.16b, v0.16b // vpxor %xmm0, %xmm2, %xmm2 # 3 = jo + tbl v4.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou + tbl v1.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t + eor v1.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output + + // add in smeared stuff + eor v0.16b, v1.16b, v7.16b // vpxor %xmm7, %xmm1, %xmm0 + eor v7.16b, v1.16b, v7.16b // vmovdqa %xmm0, %xmm7 + ret + + +## +## .aes_schedule_transform +## +## Linear-transform %xmm0 according to tables at (%r11) +## +## Requires that %xmm9 = 0x0F0F... as in preheat +## Output in %xmm0 +## Clobbers %xmm1, %xmm2 +## + +.align 4 +_vpaes_schedule_transform: + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + // vmovdqa (%r11), %xmm2 # lo + tbl v2.16b, {v20.16b}, v1.16b // vpshufb %xmm1, %xmm2, %xmm2 + // vmovdqa 16(%r11), %xmm1 # hi + tbl v0.16b, {v21.16b}, v0.16b // vpshufb %xmm0, %xmm1, %xmm0 + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + ret + + +## +## .aes_schedule_mangle +## +## Mangle xmm0 from (basis-transformed) standard version +## to our version. +## +## On encrypt, +## xor with 0x63 +## multiply by circulant 0,1,1,1 +## apply shiftrows transform +## +## On decrypt, +## xor with 0x63 +## multiply by "inverse mixcolumns" circulant E,B,D,9 +## deskew +## apply shiftrows transform +## +## +## Writes out to (%rdx), and increments or decrements it +## Keeps track of round number mod 4 in %r8 +## Preserves xmm0 +## Clobbers xmm1-xmm5 +## + +.align 4 +_vpaes_schedule_mangle: + mov v4.16b, v0.16b // vmovdqa %xmm0, %xmm4 # save xmm0 for later + // vmovdqa .Lk_mc_forward(%rip),%xmm5 + cbnz w3, Lschedule_mangle_dec + + // encrypting + eor v4.16b, v0.16b, v16.16b // vpxor Lk_s63(%rip), %xmm0, %xmm4 + add x2, x2, #16 // add $16, %rdx + tbl v4.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm4 + tbl v1.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm1 + tbl v3.16b, {v1.16b}, v9.16b // vpshufb %xmm5, %xmm1, %xmm3 + eor v4.16b, v4.16b, v1.16b // vpxor %xmm1, %xmm4, %xmm4 + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1 + eor v3.16b, v3.16b, v4.16b // vpxor %xmm4, %xmm3, %xmm3 + + b Lschedule_mangle_both +.align 4 +Lschedule_mangle_dec: + // inverse mix columns + // lea .Lk_dksd(%rip),%r11 + ushr v1.16b, v4.16b, #4 // vpsrlb $4, %xmm4, %xmm1 # 1 = hi + and v4.16b, v4.16b, v17.16b // vpand %xmm9, %xmm4, %xmm4 # 4 = lo + + // vmovdqa 0x00(%r11), %xmm2 + tbl v2.16b, {v24.16b}, v4.16b // vpshufb %xmm4, %xmm2, %xmm2 + // vmovdqa 0x10(%r11), %xmm3 + tbl v3.16b, {v25.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 + tbl v3.16b, {v3.16b}, v9.16b // vpshufb %xmm5, %xmm3, %xmm3 + + // vmovdqa 0x20(%r11), %xmm2 + tbl v2.16b, {v26.16b}, v4.16b // vpshufb %xmm4, %xmm2, %xmm2 + eor v2.16b, v2.16b, v3.16b // vpxor %xmm3, %xmm2, %xmm2 + // vmovdqa 0x30(%r11), %xmm3 + tbl v3.16b, {v27.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 + tbl v3.16b, {v3.16b}, v9.16b // vpshufb %xmm5, %xmm3, %xmm3 + + // vmovdqa 0x40(%r11), %xmm2 + tbl v2.16b, {v28.16b}, v4.16b // vpshufb %xmm4, %xmm2, %xmm2 + eor v2.16b, v2.16b, v3.16b // vpxor %xmm3, %xmm2, %xmm2 + // vmovdqa 0x50(%r11), %xmm3 + tbl v3.16b, {v29.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 + + // vmovdqa 0x60(%r11), %xmm2 + tbl v2.16b, {v30.16b}, v4.16b // vpshufb %xmm4, %xmm2, %xmm2 + tbl v3.16b, {v3.16b}, v9.16b // vpshufb %xmm5, %xmm3, %xmm3 + // vmovdqa 0x70(%r11), %xmm4 + tbl v4.16b, {v31.16b}, v1.16b // vpshufb %xmm1, %xmm4, %xmm4 + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1 + eor v2.16b, v2.16b, v3.16b // vpxor %xmm3, %xmm2, %xmm2 + eor v3.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm3 + + sub x2, x2, #16 // add $-16, %rdx + +Lschedule_mangle_both: + tbl v3.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + add x8, x8, #64-16 // add $-16, %r8 + and x8, x8, #~(1<<6) // and $0x30, %r8 + st1 {v3.2d}, [x2] // vmovdqu %xmm3, (%rdx) + ret + + +.globl _vpaes_set_encrypt_key + +.align 4 +_vpaes_set_encrypt_key: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + + lsr w9, w1, #5 // shr $5,%eax + add w9, w9, #5 // $5,%eax + str w9, [x2,#240] // mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; + + mov w3, #0 // mov $0,%ecx + mov x8, #0x30 // mov $0x30,%r8d + bl _vpaes_schedule_core + eor x0, x0, x0 + + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +.globl _vpaes_set_decrypt_key + +.align 4 +_vpaes_set_decrypt_key: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + + lsr w9, w1, #5 // shr $5,%eax + add w9, w9, #5 // $5,%eax + str w9, [x2,#240] // mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; + lsl w9, w9, #4 // shl $4,%eax + add x2, x2, #16 // lea 16(%rdx,%rax),%rdx + add x2, x2, x9 + + mov w3, #1 // mov $1,%ecx + lsr w8, w1, #1 // shr $1,%r8d + and x8, x8, #32 // and $32,%r8d + eor x8, x8, #32 // xor $32,%r8d # nbits==192?0:32 + bl _vpaes_schedule_core + + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + +.globl _vpaes_cbc_encrypt + +.align 4 +_vpaes_cbc_encrypt: + cbz x2, Lcbc_abort + cmp w5, #0 // check direction + b.eq vpaes_cbc_decrypt + +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + mov x17, x2 // reassign + mov x2, x3 // reassign + + ld1 {v0.16b}, [x4] // load ivec + bl _vpaes_encrypt_preheat + b Lcbc_enc_loop + +.align 4 +Lcbc_enc_loop: + ld1 {v7.16b}, [x0],#16 // load input + eor v7.16b, v7.16b, v0.16b // xor with ivec + bl _vpaes_encrypt_core + st1 {v0.16b}, [x1],#16 // save output + subs x17, x17, #16 + b.hi Lcbc_enc_loop + + st1 {v0.16b}, [x4] // write ivec + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp +Lcbc_abort: + ret + + + +.align 4 +vpaes_cbc_decrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + stp d10,d11,[sp,#-16]! + stp d12,d13,[sp,#-16]! + stp d14,d15,[sp,#-16]! + + mov x17, x2 // reassign + mov x2, x3 // reassign + ld1 {v6.16b}, [x4] // load ivec + bl _vpaes_decrypt_preheat + tst x17, #16 + b.eq Lcbc_dec_loop2x + + ld1 {v7.16b}, [x0], #16 // load input + bl _vpaes_decrypt_core + eor v0.16b, v0.16b, v6.16b // xor with ivec + orr v6.16b, v7.16b, v7.16b // next ivec value + st1 {v0.16b}, [x1], #16 + subs x17, x17, #16 + b.ls Lcbc_dec_done + +.align 4 +Lcbc_dec_loop2x: + ld1 {v14.16b,v15.16b}, [x0], #32 + bl _vpaes_decrypt_2x + eor v0.16b, v0.16b, v6.16b // xor with ivec + eor v1.16b, v1.16b, v14.16b + orr v6.16b, v15.16b, v15.16b + st1 {v0.16b,v1.16b}, [x1], #32 + subs x17, x17, #32 + b.hi Lcbc_dec_loop2x + +Lcbc_dec_done: + st1 {v6.16b}, [x4] + + ldp d14,d15,[sp],#16 + ldp d12,d13,[sp],#16 + ldp d10,d11,[sp],#16 + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + +.globl _vpaes_ecb_encrypt + +.align 4 +_vpaes_ecb_encrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + stp d10,d11,[sp,#-16]! + stp d12,d13,[sp,#-16]! + stp d14,d15,[sp,#-16]! + + mov x17, x2 + mov x2, x3 + bl _vpaes_encrypt_preheat + tst x17, #16 + b.eq Lecb_enc_loop + + ld1 {v7.16b}, [x0],#16 + bl _vpaes_encrypt_core + st1 {v0.16b}, [x1],#16 + subs x17, x17, #16 + b.ls Lecb_enc_done + +.align 4 +Lecb_enc_loop: + ld1 {v14.16b,v15.16b}, [x0], #32 + bl _vpaes_encrypt_2x + st1 {v0.16b,v1.16b}, [x1], #32 + subs x17, x17, #32 + b.hi Lecb_enc_loop + +Lecb_enc_done: + ldp d14,d15,[sp],#16 + ldp d12,d13,[sp],#16 + ldp d10,d11,[sp],#16 + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +.globl _vpaes_ecb_decrypt + +.align 4 +_vpaes_ecb_decrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + stp d10,d11,[sp,#-16]! + stp d12,d13,[sp,#-16]! + stp d14,d15,[sp,#-16]! + + mov x17, x2 + mov x2, x3 + bl _vpaes_decrypt_preheat + tst x17, #16 + b.eq Lecb_dec_loop + + ld1 {v7.16b}, [x0],#16 + bl _vpaes_encrypt_core + st1 {v0.16b}, [x1],#16 + subs x17, x17, #16 + b.ls Lecb_dec_done + +.align 4 +Lecb_dec_loop: + ld1 {v14.16b,v15.16b}, [x0], #32 + bl _vpaes_decrypt_2x + st1 {v0.16b,v1.16b}, [x1], #32 + subs x17, x17, #32 + b.hi Lecb_dec_loop + +Lecb_dec_done: + ldp d14,d15,[sp],#16 + ldp d12,d13,[sp],#16 + ldp d10,d11,[sp],#16 + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/arm64cpuid.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/arm64cpuid.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/arm64cpuid.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/arm64cpuid.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,122 @@ +#include "arm_arch.h" + +.text + + +.align 5 +.globl __armv7_neon_probe + +__armv7_neon_probe: + orr v15.16b, v15.16b, v15.16b + ret + + +.globl __armv7_tick + +__armv7_tick: +#ifdef __APPLE__ + mrs x0, CNTPCT_EL0 +#else + mrs x0, CNTVCT_EL0 +#endif + ret + + +.globl __armv8_aes_probe + +__armv8_aes_probe: + aese v0.16b, v0.16b + ret + + +.globl __armv8_sha1_probe + +__armv8_sha1_probe: + sha1h s0, s0 + ret + + +.globl __armv8_sha256_probe + +__armv8_sha256_probe: + sha256su0 v0.4s, v0.4s + ret + + +.globl __armv8_pmull_probe + +__armv8_pmull_probe: + pmull v0.1q, v0.1d, v0.1d + ret + + +.globl __armv8_sha512_probe + +__armv8_sha512_probe: +.long 0xcec08000 // sha512su0 v0.2d,v0.2d + ret + + +.globl _OPENSSL_cleanse + +.align 5 +_OPENSSL_cleanse: + cbz x1,Lret // len==0? + cmp x1,#15 + b.hi Lot // len>15 + nop +Little: + strb wzr,[x0],#1 // store byte-by-byte + subs x1,x1,#1 + b.ne Little +Lret: ret + +.align 4 +Lot: tst x0,#7 + b.eq Laligned // inp is aligned + strb wzr,[x0],#1 // store byte-by-byte + sub x1,x1,#1 + b Lot + +.align 4 +Laligned: + str xzr,[x0],#8 // store word-by-word + sub x1,x1,#8 + tst x1,#-8 + b.ne Laligned // len>=8 + cbnz x1,Little // len!=0? + ret + + +.globl _CRYPTO_memcmp + +.align 4 +_CRYPTO_memcmp: + eor w3,w3,w3 + cbz x2,Lno_data // len==0? + cmp x2,#16 + b.ne Loop_cmp + ldp x8,x9,[x0] + ldp x10,x11,[x1] + eor x8,x8,x10 + eor x9,x9,x11 + orr x8,x8,x9 + mov x0,#1 + cmp x8,#0 + csel x0,xzr,x0,eq + ret + +.align 4 +Loop_cmp: + ldrb w4,[x0],#1 + ldrb w5,[x1],#1 + eor w4,w4,w5 + orr w3,w3,w4 + subs x2,x2,#1 + b.ne Loop_cmp + +Lno_data: + neg w0,w3 + lsr w0,w0,#31 + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/bn/armv8-mont.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/bn/armv8-mont.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/bn/armv8-mont.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/bn/armv8-mont.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1408 @@ +.text + +.globl _bn_mul_mont + +.align 5 +_bn_mul_mont: + tst x5,#7 + b.eq __bn_sqr8x_mont + tst x5,#3 + b.eq __bn_mul4x_mont +Lmul_mont: + stp x29,x30,[sp,#-64]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + + ldr x9,[x2],#8 // bp[0] + sub x22,sp,x5,lsl#3 + ldp x7,x8,[x1],#16 // ap[0..1] + lsl x5,x5,#3 + ldr x4,[x4] // *n0 + and x22,x22,#-16 // ABI says so + ldp x13,x14,[x3],#16 // np[0..1] + + mul x6,x7,x9 // ap[0]*bp[0] + sub x21,x5,#16 // j=num-2 + umulh x7,x7,x9 + mul x10,x8,x9 // ap[1]*bp[0] + umulh x11,x8,x9 + + mul x15,x6,x4 // "tp[0]"*n0 + mov sp,x22 // alloca + + // (*) mul x12,x13,x15 // np[0]*m1 + umulh x13,x13,x15 + mul x16,x14,x15 // np[1]*m1 + // (*) adds x12,x12,x6 // discarded + // (*) As for removal of first multiplication and addition + // instructions. The outcome of first addition is + // guaranteed to be zero, which leaves two computationally + // significant outcomes: it either carries or not. Then + // question is when does it carry? Is there alternative + // way to deduce it? If you follow operations, you can + // observe that condition for carry is quite simple: + // x6 being non-zero. So that carry can be calculated + // by adding -1 to x6. That's what next instruction does. + subs xzr,x6,#1 // (*) + umulh x17,x14,x15 + adc x13,x13,xzr + cbz x21,L1st_skip + +L1st: + ldr x8,[x1],#8 + adds x6,x10,x7 + sub x21,x21,#8 // j-- + adc x7,x11,xzr + + ldr x14,[x3],#8 + adds x12,x16,x13 + mul x10,x8,x9 // ap[j]*bp[0] + adc x13,x17,xzr + umulh x11,x8,x9 + + adds x12,x12,x6 + mul x16,x14,x15 // np[j]*m1 + adc x13,x13,xzr + umulh x17,x14,x15 + str x12,[x22],#8 // tp[j-1] + cbnz x21,L1st + +L1st_skip: + adds x6,x10,x7 + sub x1,x1,x5 // rewind x1 + adc x7,x11,xzr + + adds x12,x16,x13 + sub x3,x3,x5 // rewind x3 + adc x13,x17,xzr + + adds x12,x12,x6 + sub x20,x5,#8 // i=num-1 + adcs x13,x13,x7 + + adc x19,xzr,xzr // upmost overflow bit + stp x12,x13,[x22] + +Louter: + ldr x9,[x2],#8 // bp[i] + ldp x7,x8,[x1],#16 + ldr x23,[sp] // tp[0] + add x22,sp,#8 + + mul x6,x7,x9 // ap[0]*bp[i] + sub x21,x5,#16 // j=num-2 + umulh x7,x7,x9 + ldp x13,x14,[x3],#16 + mul x10,x8,x9 // ap[1]*bp[i] + adds x6,x6,x23 + umulh x11,x8,x9 + adc x7,x7,xzr + + mul x15,x6,x4 + sub x20,x20,#8 // i-- + + // (*) mul x12,x13,x15 // np[0]*m1 + umulh x13,x13,x15 + mul x16,x14,x15 // np[1]*m1 + // (*) adds x12,x12,x6 + subs xzr,x6,#1 // (*) + umulh x17,x14,x15 + cbz x21,Linner_skip + +Linner: + ldr x8,[x1],#8 + adc x13,x13,xzr + ldr x23,[x22],#8 // tp[j] + adds x6,x10,x7 + sub x21,x21,#8 // j-- + adc x7,x11,xzr + + adds x12,x16,x13 + ldr x14,[x3],#8 + adc x13,x17,xzr + + mul x10,x8,x9 // ap[j]*bp[i] + adds x6,x6,x23 + umulh x11,x8,x9 + adc x7,x7,xzr + + mul x16,x14,x15 // np[j]*m1 + adds x12,x12,x6 + umulh x17,x14,x15 + str x12,[x22,#-16] // tp[j-1] + cbnz x21,Linner + +Linner_skip: + ldr x23,[x22],#8 // tp[j] + adc x13,x13,xzr + adds x6,x10,x7 + sub x1,x1,x5 // rewind x1 + adc x7,x11,xzr + + adds x12,x16,x13 + sub x3,x3,x5 // rewind x3 + adcs x13,x17,x19 + adc x19,xzr,xzr + + adds x6,x6,x23 + adc x7,x7,xzr + + adds x12,x12,x6 + adcs x13,x13,x7 + adc x19,x19,xzr // upmost overflow bit + stp x12,x13,[x22,#-16] + + cbnz x20,Louter + + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + ldr x23,[sp] // tp[0] + add x22,sp,#8 + ldr x14,[x3],#8 // np[0] + subs x21,x5,#8 // j=num-1 and clear borrow + mov x1,x0 +Lsub: + sbcs x8,x23,x14 // tp[j]-np[j] + ldr x23,[x22],#8 + sub x21,x21,#8 // j-- + ldr x14,[x3],#8 + str x8,[x1],#8 // rp[j]=tp[j]-np[j] + cbnz x21,Lsub + + sbcs x8,x23,x14 + sbcs x19,x19,xzr // did it borrow? + str x8,[x1],#8 // rp[num-1] + + ldr x23,[sp] // tp[0] + add x22,sp,#8 + ldr x8,[x0],#8 // rp[0] + sub x5,x5,#8 // num-- + nop +Lcond_copy: + sub x5,x5,#8 // num-- + csel x14,x23,x8,lo // did it borrow? + ldr x23,[x22],#8 + ldr x8,[x0],#8 + str xzr,[x22,#-16] // wipe tp + str x14,[x0,#-16] + cbnz x5,Lcond_copy + + csel x14,x23,x8,lo + str xzr,[x22,#-8] // wipe tp + str x14,[x0,#-8] + + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldr x29,[sp],#64 + ret + + +.align 5 +__bn_sqr8x_mont: + cmp x1,x2 + b.ne __bn_mul4x_mont +Lsqr8x_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + stp x0,x3,[sp,#96] // offload rp and np + + ldp x6,x7,[x1,#8*0] + ldp x8,x9,[x1,#8*2] + ldp x10,x11,[x1,#8*4] + ldp x12,x13,[x1,#8*6] + + sub x2,sp,x5,lsl#4 + lsl x5,x5,#3 + ldr x4,[x4] // *n0 + mov sp,x2 // alloca + sub x27,x5,#8*8 + b Lsqr8x_zero_start + +Lsqr8x_zero: + sub x27,x27,#8*8 + stp xzr,xzr,[x2,#8*0] + stp xzr,xzr,[x2,#8*2] + stp xzr,xzr,[x2,#8*4] + stp xzr,xzr,[x2,#8*6] +Lsqr8x_zero_start: + stp xzr,xzr,[x2,#8*8] + stp xzr,xzr,[x2,#8*10] + stp xzr,xzr,[x2,#8*12] + stp xzr,xzr,[x2,#8*14] + add x2,x2,#8*16 + cbnz x27,Lsqr8x_zero + + add x3,x1,x5 + add x1,x1,#8*8 + mov x19,xzr + mov x20,xzr + mov x21,xzr + mov x22,xzr + mov x23,xzr + mov x24,xzr + mov x25,xzr + mov x26,xzr + mov x2,sp + str x4,[x29,#112] // offload n0 + + // Multiply everything but a[i]*a[i] +.align 4 +Lsqr8x_outer_loop: + // a[1]a[0] (i) + // a[2]a[0] + // a[3]a[0] + // a[4]a[0] + // a[5]a[0] + // a[6]a[0] + // a[7]a[0] + // a[2]a[1] (ii) + // a[3]a[1] + // a[4]a[1] + // a[5]a[1] + // a[6]a[1] + // a[7]a[1] + // a[3]a[2] (iii) + // a[4]a[2] + // a[5]a[2] + // a[6]a[2] + // a[7]a[2] + // a[4]a[3] (iv) + // a[5]a[3] + // a[6]a[3] + // a[7]a[3] + // a[5]a[4] (v) + // a[6]a[4] + // a[7]a[4] + // a[6]a[5] (vi) + // a[7]a[5] + // a[7]a[6] (vii) + + mul x14,x7,x6 // lo(a[1..7]*a[0]) (i) + mul x15,x8,x6 + mul x16,x9,x6 + mul x17,x10,x6 + adds x20,x20,x14 // t[1]+lo(a[1]*a[0]) + mul x14,x11,x6 + adcs x21,x21,x15 + mul x15,x12,x6 + adcs x22,x22,x16 + mul x16,x13,x6 + adcs x23,x23,x17 + umulh x17,x7,x6 // hi(a[1..7]*a[0]) + adcs x24,x24,x14 + umulh x14,x8,x6 + adcs x25,x25,x15 + umulh x15,x9,x6 + adcs x26,x26,x16 + umulh x16,x10,x6 + stp x19,x20,[x2],#8*2 // t[0..1] + adc x19,xzr,xzr // t[8] + adds x21,x21,x17 // t[2]+lo(a[1]*a[0]) + umulh x17,x11,x6 + adcs x22,x22,x14 + umulh x14,x12,x6 + adcs x23,x23,x15 + umulh x15,x13,x6 + adcs x24,x24,x16 + mul x16,x8,x7 // lo(a[2..7]*a[1]) (ii) + adcs x25,x25,x17 + mul x17,x9,x7 + adcs x26,x26,x14 + mul x14,x10,x7 + adc x19,x19,x15 + + mul x15,x11,x7 + adds x22,x22,x16 + mul x16,x12,x7 + adcs x23,x23,x17 + mul x17,x13,x7 + adcs x24,x24,x14 + umulh x14,x8,x7 // hi(a[2..7]*a[1]) + adcs x25,x25,x15 + umulh x15,x9,x7 + adcs x26,x26,x16 + umulh x16,x10,x7 + adcs x19,x19,x17 + umulh x17,x11,x7 + stp x21,x22,[x2],#8*2 // t[2..3] + adc x20,xzr,xzr // t[9] + adds x23,x23,x14 + umulh x14,x12,x7 + adcs x24,x24,x15 + umulh x15,x13,x7 + adcs x25,x25,x16 + mul x16,x9,x8 // lo(a[3..7]*a[2]) (iii) + adcs x26,x26,x17 + mul x17,x10,x8 + adcs x19,x19,x14 + mul x14,x11,x8 + adc x20,x20,x15 + + mul x15,x12,x8 + adds x24,x24,x16 + mul x16,x13,x8 + adcs x25,x25,x17 + umulh x17,x9,x8 // hi(a[3..7]*a[2]) + adcs x26,x26,x14 + umulh x14,x10,x8 + adcs x19,x19,x15 + umulh x15,x11,x8 + adcs x20,x20,x16 + umulh x16,x12,x8 + stp x23,x24,[x2],#8*2 // t[4..5] + adc x21,xzr,xzr // t[10] + adds x25,x25,x17 + umulh x17,x13,x8 + adcs x26,x26,x14 + mul x14,x10,x9 // lo(a[4..7]*a[3]) (iv) + adcs x19,x19,x15 + mul x15,x11,x9 + adcs x20,x20,x16 + mul x16,x12,x9 + adc x21,x21,x17 + + mul x17,x13,x9 + adds x26,x26,x14 + umulh x14,x10,x9 // hi(a[4..7]*a[3]) + adcs x19,x19,x15 + umulh x15,x11,x9 + adcs x20,x20,x16 + umulh x16,x12,x9 + adcs x21,x21,x17 + umulh x17,x13,x9 + stp x25,x26,[x2],#8*2 // t[6..7] + adc x22,xzr,xzr // t[11] + adds x19,x19,x14 + mul x14,x11,x10 // lo(a[5..7]*a[4]) (v) + adcs x20,x20,x15 + mul x15,x12,x10 + adcs x21,x21,x16 + mul x16,x13,x10 + adc x22,x22,x17 + + umulh x17,x11,x10 // hi(a[5..7]*a[4]) + adds x20,x20,x14 + umulh x14,x12,x10 + adcs x21,x21,x15 + umulh x15,x13,x10 + adcs x22,x22,x16 + mul x16,x12,x11 // lo(a[6..7]*a[5]) (vi) + adc x23,xzr,xzr // t[12] + adds x21,x21,x17 + mul x17,x13,x11 + adcs x22,x22,x14 + umulh x14,x12,x11 // hi(a[6..7]*a[5]) + adc x23,x23,x15 + + umulh x15,x13,x11 + adds x22,x22,x16 + mul x16,x13,x12 // lo(a[7]*a[6]) (vii) + adcs x23,x23,x17 + umulh x17,x13,x12 // hi(a[7]*a[6]) + adc x24,xzr,xzr // t[13] + adds x23,x23,x14 + sub x27,x3,x1 // done yet? + adc x24,x24,x15 + + adds x24,x24,x16 + sub x14,x3,x5 // rewinded ap + adc x25,xzr,xzr // t[14] + add x25,x25,x17 + + cbz x27,Lsqr8x_outer_break + + mov x4,x6 + ldp x6,x7,[x2,#8*0] + ldp x8,x9,[x2,#8*2] + ldp x10,x11,[x2,#8*4] + ldp x12,x13,[x2,#8*6] + adds x19,x19,x6 + adcs x20,x20,x7 + ldp x6,x7,[x1,#8*0] + adcs x21,x21,x8 + adcs x22,x22,x9 + ldp x8,x9,[x1,#8*2] + adcs x23,x23,x10 + adcs x24,x24,x11 + ldp x10,x11,[x1,#8*4] + adcs x25,x25,x12 + mov x0,x1 + adcs x26,xzr,x13 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + //adc x28,xzr,xzr // moved below + mov x27,#-8*8 + + // a[8]a[0] + // a[9]a[0] + // a[a]a[0] + // a[b]a[0] + // a[c]a[0] + // a[d]a[0] + // a[e]a[0] + // a[f]a[0] + // a[8]a[1] + // a[f]a[1]........................ + // a[8]a[2] + // a[f]a[2]........................ + // a[8]a[3] + // a[f]a[3]........................ + // a[8]a[4] + // a[f]a[4]........................ + // a[8]a[5] + // a[f]a[5]........................ + // a[8]a[6] + // a[f]a[6]........................ + // a[8]a[7] + // a[f]a[7]........................ +Lsqr8x_mul: + mul x14,x6,x4 + adc x28,xzr,xzr // carry bit, modulo-scheduled + mul x15,x7,x4 + add x27,x27,#8 + mul x16,x8,x4 + mul x17,x9,x4 + adds x19,x19,x14 + mul x14,x10,x4 + adcs x20,x20,x15 + mul x15,x11,x4 + adcs x21,x21,x16 + mul x16,x12,x4 + adcs x22,x22,x17 + mul x17,x13,x4 + adcs x23,x23,x14 + umulh x14,x6,x4 + adcs x24,x24,x15 + umulh x15,x7,x4 + adcs x25,x25,x16 + umulh x16,x8,x4 + adcs x26,x26,x17 + umulh x17,x9,x4 + adc x28,x28,xzr + str x19,[x2],#8 + adds x19,x20,x14 + umulh x14,x10,x4 + adcs x20,x21,x15 + umulh x15,x11,x4 + adcs x21,x22,x16 + umulh x16,x12,x4 + adcs x22,x23,x17 + umulh x17,x13,x4 + ldr x4,[x0,x27] + adcs x23,x24,x14 + adcs x24,x25,x15 + adcs x25,x26,x16 + adcs x26,x28,x17 + //adc x28,xzr,xzr // moved above + cbnz x27,Lsqr8x_mul + // note that carry flag is guaranteed + // to be zero at this point + cmp x1,x3 // done yet? + b.eq Lsqr8x_break + + ldp x6,x7,[x2,#8*0] + ldp x8,x9,[x2,#8*2] + ldp x10,x11,[x2,#8*4] + ldp x12,x13,[x2,#8*6] + adds x19,x19,x6 + ldr x4,[x0,#-8*8] + adcs x20,x20,x7 + ldp x6,x7,[x1,#8*0] + adcs x21,x21,x8 + adcs x22,x22,x9 + ldp x8,x9,[x1,#8*2] + adcs x23,x23,x10 + adcs x24,x24,x11 + ldp x10,x11,[x1,#8*4] + adcs x25,x25,x12 + mov x27,#-8*8 + adcs x26,x26,x13 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + //adc x28,xzr,xzr // moved above + b Lsqr8x_mul + +.align 4 +Lsqr8x_break: + ldp x6,x7,[x0,#8*0] + add x1,x0,#8*8 + ldp x8,x9,[x0,#8*2] + sub x14,x3,x1 // is it last iteration? + ldp x10,x11,[x0,#8*4] + sub x15,x2,x14 + ldp x12,x13,[x0,#8*6] + cbz x14,Lsqr8x_outer_loop + + stp x19,x20,[x2,#8*0] + ldp x19,x20,[x15,#8*0] + stp x21,x22,[x2,#8*2] + ldp x21,x22,[x15,#8*2] + stp x23,x24,[x2,#8*4] + ldp x23,x24,[x15,#8*4] + stp x25,x26,[x2,#8*6] + mov x2,x15 + ldp x25,x26,[x15,#8*6] + b Lsqr8x_outer_loop + +.align 4 +Lsqr8x_outer_break: + // Now multiply above result by 2 and add a[n-1]*a[n-1]|...|a[0]*a[0] + ldp x7,x9,[x14,#8*0] // recall that x14 is &a[0] + ldp x15,x16,[sp,#8*1] + ldp x11,x13,[x14,#8*2] + add x1,x14,#8*4 + ldp x17,x14,[sp,#8*3] + + stp x19,x20,[x2,#8*0] + mul x19,x7,x7 + stp x21,x22,[x2,#8*2] + umulh x7,x7,x7 + stp x23,x24,[x2,#8*4] + mul x8,x9,x9 + stp x25,x26,[x2,#8*6] + mov x2,sp + umulh x9,x9,x9 + adds x20,x7,x15,lsl#1 + extr x15,x16,x15,#63 + sub x27,x5,#8*4 + +Lsqr4x_shift_n_add: + adcs x21,x8,x15 + extr x16,x17,x16,#63 + sub x27,x27,#8*4 + adcs x22,x9,x16 + ldp x15,x16,[x2,#8*5] + mul x10,x11,x11 + ldp x7,x9,[x1],#8*2 + umulh x11,x11,x11 + mul x12,x13,x13 + umulh x13,x13,x13 + extr x17,x14,x17,#63 + stp x19,x20,[x2,#8*0] + adcs x23,x10,x17 + extr x14,x15,x14,#63 + stp x21,x22,[x2,#8*2] + adcs x24,x11,x14 + ldp x17,x14,[x2,#8*7] + extr x15,x16,x15,#63 + adcs x25,x12,x15 + extr x16,x17,x16,#63 + adcs x26,x13,x16 + ldp x15,x16,[x2,#8*9] + mul x6,x7,x7 + ldp x11,x13,[x1],#8*2 + umulh x7,x7,x7 + mul x8,x9,x9 + umulh x9,x9,x9 + stp x23,x24,[x2,#8*4] + extr x17,x14,x17,#63 + stp x25,x26,[x2,#8*6] + add x2,x2,#8*8 + adcs x19,x6,x17 + extr x14,x15,x14,#63 + adcs x20,x7,x14 + ldp x17,x14,[x2,#8*3] + extr x15,x16,x15,#63 + cbnz x27,Lsqr4x_shift_n_add + ldp x1,x4,[x29,#104] // pull np and n0 + + adcs x21,x8,x15 + extr x16,x17,x16,#63 + adcs x22,x9,x16 + ldp x15,x16,[x2,#8*5] + mul x10,x11,x11 + umulh x11,x11,x11 + stp x19,x20,[x2,#8*0] + mul x12,x13,x13 + umulh x13,x13,x13 + stp x21,x22,[x2,#8*2] + extr x17,x14,x17,#63 + adcs x23,x10,x17 + extr x14,x15,x14,#63 + ldp x19,x20,[sp,#8*0] + adcs x24,x11,x14 + extr x15,x16,x15,#63 + ldp x6,x7,[x1,#8*0] + adcs x25,x12,x15 + extr x16,xzr,x16,#63 + ldp x8,x9,[x1,#8*2] + adc x26,x13,x16 + ldp x10,x11,[x1,#8*4] + + // Reduce by 512 bits per iteration + mul x28,x4,x19 // t[0]*n0 + ldp x12,x13,[x1,#8*6] + add x3,x1,x5 + ldp x21,x22,[sp,#8*2] + stp x23,x24,[x2,#8*4] + ldp x23,x24,[sp,#8*4] + stp x25,x26,[x2,#8*6] + ldp x25,x26,[sp,#8*6] + add x1,x1,#8*8 + mov x30,xzr // initial top-most carry + mov x2,sp + mov x27,#8 + +Lsqr8x_reduction: + // (*) mul x14,x6,x28 // lo(n[0-7])*lo(t[0]*n0) + mul x15,x7,x28 + sub x27,x27,#1 + mul x16,x8,x28 + str x28,[x2],#8 // put aside t[0]*n0 for tail processing + mul x17,x9,x28 + // (*) adds xzr,x19,x14 + subs xzr,x19,#1 // (*) + mul x14,x10,x28 + adcs x19,x20,x15 + mul x15,x11,x28 + adcs x20,x21,x16 + mul x16,x12,x28 + adcs x21,x22,x17 + mul x17,x13,x28 + adcs x22,x23,x14 + umulh x14,x6,x28 // hi(n[0-7])*lo(t[0]*n0) + adcs x23,x24,x15 + umulh x15,x7,x28 + adcs x24,x25,x16 + umulh x16,x8,x28 + adcs x25,x26,x17 + umulh x17,x9,x28 + adc x26,xzr,xzr + adds x19,x19,x14 + umulh x14,x10,x28 + adcs x20,x20,x15 + umulh x15,x11,x28 + adcs x21,x21,x16 + umulh x16,x12,x28 + adcs x22,x22,x17 + umulh x17,x13,x28 + mul x28,x4,x19 // next t[0]*n0 + adcs x23,x23,x14 + adcs x24,x24,x15 + adcs x25,x25,x16 + adc x26,x26,x17 + cbnz x27,Lsqr8x_reduction + + ldp x14,x15,[x2,#8*0] + ldp x16,x17,[x2,#8*2] + mov x0,x2 + sub x27,x3,x1 // done yet? + adds x19,x19,x14 + adcs x20,x20,x15 + ldp x14,x15,[x2,#8*4] + adcs x21,x21,x16 + adcs x22,x22,x17 + ldp x16,x17,[x2,#8*6] + adcs x23,x23,x14 + adcs x24,x24,x15 + adcs x25,x25,x16 + adcs x26,x26,x17 + //adc x28,xzr,xzr // moved below + cbz x27,Lsqr8x8_post_condition + + ldr x4,[x2,#-8*8] + ldp x6,x7,[x1,#8*0] + ldp x8,x9,[x1,#8*2] + ldp x10,x11,[x1,#8*4] + mov x27,#-8*8 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + +Lsqr8x_tail: + mul x14,x6,x4 + adc x28,xzr,xzr // carry bit, modulo-scheduled + mul x15,x7,x4 + add x27,x27,#8 + mul x16,x8,x4 + mul x17,x9,x4 + adds x19,x19,x14 + mul x14,x10,x4 + adcs x20,x20,x15 + mul x15,x11,x4 + adcs x21,x21,x16 + mul x16,x12,x4 + adcs x22,x22,x17 + mul x17,x13,x4 + adcs x23,x23,x14 + umulh x14,x6,x4 + adcs x24,x24,x15 + umulh x15,x7,x4 + adcs x25,x25,x16 + umulh x16,x8,x4 + adcs x26,x26,x17 + umulh x17,x9,x4 + adc x28,x28,xzr + str x19,[x2],#8 + adds x19,x20,x14 + umulh x14,x10,x4 + adcs x20,x21,x15 + umulh x15,x11,x4 + adcs x21,x22,x16 + umulh x16,x12,x4 + adcs x22,x23,x17 + umulh x17,x13,x4 + ldr x4,[x0,x27] + adcs x23,x24,x14 + adcs x24,x25,x15 + adcs x25,x26,x16 + adcs x26,x28,x17 + //adc x28,xzr,xzr // moved above + cbnz x27,Lsqr8x_tail + // note that carry flag is guaranteed + // to be zero at this point + ldp x6,x7,[x2,#8*0] + sub x27,x3,x1 // done yet? + sub x16,x3,x5 // rewinded np + ldp x8,x9,[x2,#8*2] + ldp x10,x11,[x2,#8*4] + ldp x12,x13,[x2,#8*6] + cbz x27,Lsqr8x_tail_break + + ldr x4,[x0,#-8*8] + adds x19,x19,x6 + adcs x20,x20,x7 + ldp x6,x7,[x1,#8*0] + adcs x21,x21,x8 + adcs x22,x22,x9 + ldp x8,x9,[x1,#8*2] + adcs x23,x23,x10 + adcs x24,x24,x11 + ldp x10,x11,[x1,#8*4] + adcs x25,x25,x12 + mov x27,#-8*8 + adcs x26,x26,x13 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + //adc x28,xzr,xzr // moved above + b Lsqr8x_tail + +.align 4 +Lsqr8x_tail_break: + ldr x4,[x29,#112] // pull n0 + add x27,x2,#8*8 // end of current t[num] window + + subs xzr,x30,#1 // "move" top-most carry to carry bit + adcs x14,x19,x6 + adcs x15,x20,x7 + ldp x19,x20,[x0,#8*0] + adcs x21,x21,x8 + ldp x6,x7,[x16,#8*0] // recall that x16 is &n[0] + adcs x22,x22,x9 + ldp x8,x9,[x16,#8*2] + adcs x23,x23,x10 + adcs x24,x24,x11 + ldp x10,x11,[x16,#8*4] + adcs x25,x25,x12 + adcs x26,x26,x13 + ldp x12,x13,[x16,#8*6] + add x1,x16,#8*8 + adc x30,xzr,xzr // top-most carry + mul x28,x4,x19 + stp x14,x15,[x2,#8*0] + stp x21,x22,[x2,#8*2] + ldp x21,x22,[x0,#8*2] + stp x23,x24,[x2,#8*4] + ldp x23,x24,[x0,#8*4] + cmp x27,x29 // did we hit the bottom? + stp x25,x26,[x2,#8*6] + mov x2,x0 // slide the window + ldp x25,x26,[x0,#8*6] + mov x27,#8 + b.ne Lsqr8x_reduction + + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + ldr x0,[x29,#96] // pull rp + add x2,x2,#8*8 + subs x14,x19,x6 + sbcs x15,x20,x7 + sub x27,x5,#8*8 + mov x3,x0 // x0 copy + +Lsqr8x_sub: + sbcs x16,x21,x8 + ldp x6,x7,[x1,#8*0] + sbcs x17,x22,x9 + stp x14,x15,[x0,#8*0] + sbcs x14,x23,x10 + ldp x8,x9,[x1,#8*2] + sbcs x15,x24,x11 + stp x16,x17,[x0,#8*2] + sbcs x16,x25,x12 + ldp x10,x11,[x1,#8*4] + sbcs x17,x26,x13 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + ldp x19,x20,[x2,#8*0] + sub x27,x27,#8*8 + ldp x21,x22,[x2,#8*2] + ldp x23,x24,[x2,#8*4] + ldp x25,x26,[x2,#8*6] + add x2,x2,#8*8 + stp x14,x15,[x0,#8*4] + sbcs x14,x19,x6 + stp x16,x17,[x0,#8*6] + add x0,x0,#8*8 + sbcs x15,x20,x7 + cbnz x27,Lsqr8x_sub + + sbcs x16,x21,x8 + mov x2,sp + add x1,sp,x5 + ldp x6,x7,[x3,#8*0] + sbcs x17,x22,x9 + stp x14,x15,[x0,#8*0] + sbcs x14,x23,x10 + ldp x8,x9,[x3,#8*2] + sbcs x15,x24,x11 + stp x16,x17,[x0,#8*2] + sbcs x16,x25,x12 + ldp x19,x20,[x1,#8*0] + sbcs x17,x26,x13 + ldp x21,x22,[x1,#8*2] + sbcs xzr,x30,xzr // did it borrow? + ldr x30,[x29,#8] // pull return address + stp x14,x15,[x0,#8*4] + stp x16,x17,[x0,#8*6] + + sub x27,x5,#8*4 +Lsqr4x_cond_copy: + sub x27,x27,#8*4 + csel x14,x19,x6,lo + stp xzr,xzr,[x2,#8*0] + csel x15,x20,x7,lo + ldp x6,x7,[x3,#8*4] + ldp x19,x20,[x1,#8*4] + csel x16,x21,x8,lo + stp xzr,xzr,[x2,#8*2] + add x2,x2,#8*4 + csel x17,x22,x9,lo + ldp x8,x9,[x3,#8*6] + ldp x21,x22,[x1,#8*6] + add x1,x1,#8*4 + stp x14,x15,[x3,#8*0] + stp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + stp xzr,xzr,[x1,#8*0] + stp xzr,xzr,[x1,#8*2] + cbnz x27,Lsqr4x_cond_copy + + csel x14,x19,x6,lo + stp xzr,xzr,[x2,#8*0] + csel x15,x20,x7,lo + stp xzr,xzr,[x2,#8*2] + csel x16,x21,x8,lo + csel x17,x22,x9,lo + stp x14,x15,[x3,#8*0] + stp x16,x17,[x3,#8*2] + + b Lsqr8x_done + +.align 4 +Lsqr8x8_post_condition: + adc x28,xzr,xzr + ldr x30,[x29,#8] // pull return address + // x19-7,x28 hold result, x6-7 hold modulus + subs x6,x19,x6 + ldr x1,[x29,#96] // pull rp + sbcs x7,x20,x7 + stp xzr,xzr,[sp,#8*0] + sbcs x8,x21,x8 + stp xzr,xzr,[sp,#8*2] + sbcs x9,x22,x9 + stp xzr,xzr,[sp,#8*4] + sbcs x10,x23,x10 + stp xzr,xzr,[sp,#8*6] + sbcs x11,x24,x11 + stp xzr,xzr,[sp,#8*8] + sbcs x12,x25,x12 + stp xzr,xzr,[sp,#8*10] + sbcs x13,x26,x13 + stp xzr,xzr,[sp,#8*12] + sbcs x28,x28,xzr // did it borrow? + stp xzr,xzr,[sp,#8*14] + + // x6-7 hold result-modulus + csel x6,x19,x6,lo + csel x7,x20,x7,lo + csel x8,x21,x8,lo + csel x9,x22,x9,lo + stp x6,x7,[x1,#8*0] + csel x10,x23,x10,lo + csel x11,x24,x11,lo + stp x8,x9,[x1,#8*2] + csel x12,x25,x12,lo + csel x13,x26,x13,lo + stp x10,x11,[x1,#8*4] + stp x12,x13,[x1,#8*6] + +Lsqr8x_done: + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldr x29,[sp],#128 +.long 0xd50323bf // autiasp + ret + + +.align 5 +__bn_mul4x_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + + sub x26,sp,x5,lsl#3 + lsl x5,x5,#3 + ldr x4,[x4] // *n0 + sub sp,x26,#8*4 // alloca + + add x10,x2,x5 + add x27,x1,x5 + stp x0,x10,[x29,#96] // offload rp and &b[num] + + ldr x24,[x2,#8*0] // b[0] + ldp x6,x7,[x1,#8*0] // a[0..3] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + mov x19,xzr + mov x20,xzr + mov x21,xzr + mov x22,xzr + ldp x14,x15,[x3,#8*0] // n[0..3] + ldp x16,x17,[x3,#8*2] + adds x3,x3,#8*4 // clear carry bit + mov x0,xzr + mov x28,#0 + mov x26,sp + +Loop_mul4x_1st_reduction: + mul x10,x6,x24 // lo(a[0..3]*b[0]) + adc x0,x0,xzr // modulo-scheduled + mul x11,x7,x24 + add x28,x28,#8 + mul x12,x8,x24 + and x28,x28,#31 + mul x13,x9,x24 + adds x19,x19,x10 + umulh x10,x6,x24 // hi(a[0..3]*b[0]) + adcs x20,x20,x11 + mul x25,x19,x4 // t[0]*n0 + adcs x21,x21,x12 + umulh x11,x7,x24 + adcs x22,x22,x13 + umulh x12,x8,x24 + adc x23,xzr,xzr + umulh x13,x9,x24 + ldr x24,[x2,x28] // next b[i] (or b[0]) + adds x20,x20,x10 + // (*) mul x10,x14,x25 // lo(n[0..3]*t[0]*n0) + str x25,[x26],#8 // put aside t[0]*n0 for tail processing + adcs x21,x21,x11 + mul x11,x15,x25 + adcs x22,x22,x12 + mul x12,x16,x25 + adc x23,x23,x13 // can't overflow + mul x13,x17,x25 + // (*) adds xzr,x19,x10 + subs xzr,x19,#1 // (*) + umulh x10,x14,x25 // hi(n[0..3]*t[0]*n0) + adcs x19,x20,x11 + umulh x11,x15,x25 + adcs x20,x21,x12 + umulh x12,x16,x25 + adcs x21,x22,x13 + umulh x13,x17,x25 + adcs x22,x23,x0 + adc x0,xzr,xzr + adds x19,x19,x10 + sub x10,x27,x1 + adcs x20,x20,x11 + adcs x21,x21,x12 + adcs x22,x22,x13 + //adc x0,x0,xzr + cbnz x28,Loop_mul4x_1st_reduction + + cbz x10,Lmul4x4_post_condition + + ldp x6,x7,[x1,#8*0] // a[4..7] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + ldr x25,[sp] // a[0]*n0 + ldp x14,x15,[x3,#8*0] // n[4..7] + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + +Loop_mul4x_1st_tail: + mul x10,x6,x24 // lo(a[4..7]*b[i]) + adc x0,x0,xzr // modulo-scheduled + mul x11,x7,x24 + add x28,x28,#8 + mul x12,x8,x24 + and x28,x28,#31 + mul x13,x9,x24 + adds x19,x19,x10 + umulh x10,x6,x24 // hi(a[4..7]*b[i]) + adcs x20,x20,x11 + umulh x11,x7,x24 + adcs x21,x21,x12 + umulh x12,x8,x24 + adcs x22,x22,x13 + umulh x13,x9,x24 + adc x23,xzr,xzr + ldr x24,[x2,x28] // next b[i] (or b[0]) + adds x20,x20,x10 + mul x10,x14,x25 // lo(n[4..7]*a[0]*n0) + adcs x21,x21,x11 + mul x11,x15,x25 + adcs x22,x22,x12 + mul x12,x16,x25 + adc x23,x23,x13 // can't overflow + mul x13,x17,x25 + adds x19,x19,x10 + umulh x10,x14,x25 // hi(n[4..7]*a[0]*n0) + adcs x20,x20,x11 + umulh x11,x15,x25 + adcs x21,x21,x12 + umulh x12,x16,x25 + adcs x22,x22,x13 + adcs x23,x23,x0 + umulh x13,x17,x25 + adc x0,xzr,xzr + ldr x25,[sp,x28] // next t[0]*n0 + str x19,[x26],#8 // result!!! + adds x19,x20,x10 + sub x10,x27,x1 // done yet? + adcs x20,x21,x11 + adcs x21,x22,x12 + adcs x22,x23,x13 + //adc x0,x0,xzr + cbnz x28,Loop_mul4x_1st_tail + + sub x11,x27,x5 // rewinded x1 + cbz x10,Lmul4x_proceed + + ldp x6,x7,[x1,#8*0] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + ldp x14,x15,[x3,#8*0] + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + b Loop_mul4x_1st_tail + +.align 5 +Lmul4x_proceed: + ldr x24,[x2,#8*4]! // *++b + adc x30,x0,xzr + ldp x6,x7,[x11,#8*0] // a[0..3] + sub x3,x3,x5 // rewind np + ldp x8,x9,[x11,#8*2] + add x1,x11,#8*4 + + stp x19,x20,[x26,#8*0] // result!!! + ldp x19,x20,[sp,#8*4] // t[0..3] + stp x21,x22,[x26,#8*2] // result!!! + ldp x21,x22,[sp,#8*6] + + ldp x14,x15,[x3,#8*0] // n[0..3] + mov x26,sp + ldp x16,x17,[x3,#8*2] + adds x3,x3,#8*4 // clear carry bit + mov x0,xzr + +.align 4 +Loop_mul4x_reduction: + mul x10,x6,x24 // lo(a[0..3]*b[4]) + adc x0,x0,xzr // modulo-scheduled + mul x11,x7,x24 + add x28,x28,#8 + mul x12,x8,x24 + and x28,x28,#31 + mul x13,x9,x24 + adds x19,x19,x10 + umulh x10,x6,x24 // hi(a[0..3]*b[4]) + adcs x20,x20,x11 + mul x25,x19,x4 // t[0]*n0 + adcs x21,x21,x12 + umulh x11,x7,x24 + adcs x22,x22,x13 + umulh x12,x8,x24 + adc x23,xzr,xzr + umulh x13,x9,x24 + ldr x24,[x2,x28] // next b[i] + adds x20,x20,x10 + // (*) mul x10,x14,x25 + str x25,[x26],#8 // put aside t[0]*n0 for tail processing + adcs x21,x21,x11 + mul x11,x15,x25 // lo(n[0..3]*t[0]*n0 + adcs x22,x22,x12 + mul x12,x16,x25 + adc x23,x23,x13 // can't overflow + mul x13,x17,x25 + // (*) adds xzr,x19,x10 + subs xzr,x19,#1 // (*) + umulh x10,x14,x25 // hi(n[0..3]*t[0]*n0 + adcs x19,x20,x11 + umulh x11,x15,x25 + adcs x20,x21,x12 + umulh x12,x16,x25 + adcs x21,x22,x13 + umulh x13,x17,x25 + adcs x22,x23,x0 + adc x0,xzr,xzr + adds x19,x19,x10 + adcs x20,x20,x11 + adcs x21,x21,x12 + adcs x22,x22,x13 + //adc x0,x0,xzr + cbnz x28,Loop_mul4x_reduction + + adc x0,x0,xzr + ldp x10,x11,[x26,#8*4] // t[4..7] + ldp x12,x13,[x26,#8*6] + ldp x6,x7,[x1,#8*0] // a[4..7] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + adds x19,x19,x10 + adcs x20,x20,x11 + adcs x21,x21,x12 + adcs x22,x22,x13 + //adc x0,x0,xzr + + ldr x25,[sp] // t[0]*n0 + ldp x14,x15,[x3,#8*0] // n[4..7] + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + +.align 4 +Loop_mul4x_tail: + mul x10,x6,x24 // lo(a[4..7]*b[4]) + adc x0,x0,xzr // modulo-scheduled + mul x11,x7,x24 + add x28,x28,#8 + mul x12,x8,x24 + and x28,x28,#31 + mul x13,x9,x24 + adds x19,x19,x10 + umulh x10,x6,x24 // hi(a[4..7]*b[4]) + adcs x20,x20,x11 + umulh x11,x7,x24 + adcs x21,x21,x12 + umulh x12,x8,x24 + adcs x22,x22,x13 + umulh x13,x9,x24 + adc x23,xzr,xzr + ldr x24,[x2,x28] // next b[i] + adds x20,x20,x10 + mul x10,x14,x25 // lo(n[4..7]*t[0]*n0) + adcs x21,x21,x11 + mul x11,x15,x25 + adcs x22,x22,x12 + mul x12,x16,x25 + adc x23,x23,x13 // can't overflow + mul x13,x17,x25 + adds x19,x19,x10 + umulh x10,x14,x25 // hi(n[4..7]*t[0]*n0) + adcs x20,x20,x11 + umulh x11,x15,x25 + adcs x21,x21,x12 + umulh x12,x16,x25 + adcs x22,x22,x13 + umulh x13,x17,x25 + adcs x23,x23,x0 + ldr x25,[sp,x28] // next a[0]*n0 + adc x0,xzr,xzr + str x19,[x26],#8 // result!!! + adds x19,x20,x10 + sub x10,x27,x1 // done yet? + adcs x20,x21,x11 + adcs x21,x22,x12 + adcs x22,x23,x13 + //adc x0,x0,xzr + cbnz x28,Loop_mul4x_tail + + sub x11,x3,x5 // rewinded np? + adc x0,x0,xzr + cbz x10,Loop_mul4x_break + + ldp x10,x11,[x26,#8*4] + ldp x12,x13,[x26,#8*6] + ldp x6,x7,[x1,#8*0] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + adds x19,x19,x10 + adcs x20,x20,x11 + adcs x21,x21,x12 + adcs x22,x22,x13 + //adc x0,x0,xzr + ldp x14,x15,[x3,#8*0] + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + b Loop_mul4x_tail + +.align 4 +Loop_mul4x_break: + ldp x12,x13,[x29,#96] // pull rp and &b[num] + adds x19,x19,x30 + add x2,x2,#8*4 // bp++ + adcs x20,x20,xzr + sub x1,x1,x5 // rewind ap + adcs x21,x21,xzr + stp x19,x20,[x26,#8*0] // result!!! + adcs x22,x22,xzr + ldp x19,x20,[sp,#8*4] // t[0..3] + adc x30,x0,xzr + stp x21,x22,[x26,#8*2] // result!!! + cmp x2,x13 // done yet? + ldp x21,x22,[sp,#8*6] + ldp x14,x15,[x11,#8*0] // n[0..3] + ldp x16,x17,[x11,#8*2] + add x3,x11,#8*4 + b.eq Lmul4x_post + + ldr x24,[x2] + ldp x6,x7,[x1,#8*0] // a[0..3] + ldp x8,x9,[x1,#8*2] + adds x1,x1,#8*4 // clear carry bit + mov x0,xzr + mov x26,sp + b Loop_mul4x_reduction + +.align 4 +Lmul4x_post: + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + mov x0,x12 + mov x27,x12 // x0 copy + subs x10,x19,x14 + add x26,sp,#8*8 + sbcs x11,x20,x15 + sub x28,x5,#8*4 + +Lmul4x_sub: + sbcs x12,x21,x16 + ldp x14,x15,[x3,#8*0] + sub x28,x28,#8*4 + ldp x19,x20,[x26,#8*0] + sbcs x13,x22,x17 + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + ldp x21,x22,[x26,#8*2] + add x26,x26,#8*4 + stp x10,x11,[x0,#8*0] + sbcs x10,x19,x14 + stp x12,x13,[x0,#8*2] + add x0,x0,#8*4 + sbcs x11,x20,x15 + cbnz x28,Lmul4x_sub + + sbcs x12,x21,x16 + mov x26,sp + add x1,sp,#8*4 + ldp x6,x7,[x27,#8*0] + sbcs x13,x22,x17 + stp x10,x11,[x0,#8*0] + ldp x8,x9,[x27,#8*2] + stp x12,x13,[x0,#8*2] + ldp x19,x20,[x1,#8*0] + ldp x21,x22,[x1,#8*2] + sbcs xzr,x30,xzr // did it borrow? + ldr x30,[x29,#8] // pull return address + + sub x28,x5,#8*4 +Lmul4x_cond_copy: + sub x28,x28,#8*4 + csel x10,x19,x6,lo + stp xzr,xzr,[x26,#8*0] + csel x11,x20,x7,lo + ldp x6,x7,[x27,#8*4] + ldp x19,x20,[x1,#8*4] + csel x12,x21,x8,lo + stp xzr,xzr,[x26,#8*2] + add x26,x26,#8*4 + csel x13,x22,x9,lo + ldp x8,x9,[x27,#8*6] + ldp x21,x22,[x1,#8*6] + add x1,x1,#8*4 + stp x10,x11,[x27,#8*0] + stp x12,x13,[x27,#8*2] + add x27,x27,#8*4 + cbnz x28,Lmul4x_cond_copy + + csel x10,x19,x6,lo + stp xzr,xzr,[x26,#8*0] + csel x11,x20,x7,lo + stp xzr,xzr,[x26,#8*2] + csel x12,x21,x8,lo + stp xzr,xzr,[x26,#8*3] + csel x13,x22,x9,lo + stp xzr,xzr,[x26,#8*4] + stp x10,x11,[x27,#8*0] + stp x12,x13,[x27,#8*2] + + b Lmul4x_done + +.align 4 +Lmul4x4_post_condition: + adc x0,x0,xzr + ldr x1,[x29,#96] // pull rp + // x19-3,x0 hold result, x14-7 hold modulus + subs x6,x19,x14 + ldr x30,[x29,#8] // pull return address + sbcs x7,x20,x15 + stp xzr,xzr,[sp,#8*0] + sbcs x8,x21,x16 + stp xzr,xzr,[sp,#8*2] + sbcs x9,x22,x17 + stp xzr,xzr,[sp,#8*4] + sbcs xzr,x0,xzr // did it borrow? + stp xzr,xzr,[sp,#8*6] + + // x6-3 hold result-modulus + csel x6,x19,x6,lo + csel x7,x20,x7,lo + csel x8,x21,x8,lo + csel x9,x22,x9,lo + stp x6,x7,[x1,#8*0] + stp x8,x9,[x1,#8*2] + +Lmul4x_done: + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldr x29,[sp],#128 +.long 0xd50323bf // autiasp + ret + +.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 4 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/buildinf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,38 @@ +/* + * WARNING: do not edit! + * Generated by util/mkbuildinf.pl + * + * Copyright 2014-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#define PLATFORM "platform: darwin64-arm64-cc" +#define DATE "built on: Tue Mar 15 17:24:47 2022 UTC" + +/* + * Generate compiler_flags as an array of individual characters. This is a + * workaround for the situation where CFLAGS gets too long for a C90 string + * literal + */ +static const char compiler_flags[] = { + 'c','o','m','p','i','l','e','r',':',' ','g','c','c',' ','-','f', + 'P','I','C',' ','-','a','r','c','h',' ','a','r','m','6','4',' ', + '-','W','a',',','-','-','n','o','e','x','e','c','s','t','a','c', + 'k',' ','-','O','3',' ','-','W','a','l','l',' ','-','D','L','_', + 'E','N','D','I','A','N',' ','-','D','O','P','E','N','S','S','L', + '_','P','I','C',' ','-','D','O','P','E','N','S','S','L','_','C', + 'P','U','I','D','_','O','B','J',' ','-','D','O','P','E','N','S', + 'S','L','_','B','N','_','A','S','M','_','M','O','N','T',' ','-', + 'D','S','H','A','1','_','A','S','M',' ','-','D','S','H','A','2', + '5','6','_','A','S','M',' ','-','D','S','H','A','5','1','2','_', + 'A','S','M',' ','-','D','K','E','C','C','A','K','1','6','0','0', + '_','A','S','M',' ','-','D','V','P','A','E','S','_','A','S','M', + ' ','-','D','E','C','P','_','N','I','S','T','Z','2','5','6','_', + 'A','S','M',' ','-','D','P','O','L','Y','1','3','0','5','_','A', + 'S','M',' ','-','D','_','R','E','E','N','T','R','A','N','T',' ', + '-','D','N','D','E','B','U','G','\0' +}; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/chacha/chacha-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/chacha/chacha-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/chacha/chacha-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/chacha/chacha-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1977 @@ +#include "arm_arch.h" + +.text + + +.private_extern _OPENSSL_armcap_P + +.align 5 +Lsigma: +.quad 0x3320646e61707865,0x6b20657479622d32 // endian-neutral +Lone: +.long 1,0,0,0 +LOPENSSL_armcap_P: +#ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +#else +.quad _OPENSSL_armcap_P-. +#endif +.byte 67,104,97,67,104,97,50,48,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 + +.globl _ChaCha20_ctr32 + +.align 5 +_ChaCha20_ctr32: + cbz x2,Labort + adr x5,LOPENSSL_armcap_P + cmp x2,#192 + b.lo Lshort +#ifdef __ILP32__ + ldrsw x6,[x5] +#else + ldr x6,[x5] +#endif + ldr w17,[x6,x5] + tst w17,#ARMV7_NEON + b.ne ChaCha20_neon + +Lshort: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adr x5,Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#64 + + ldp x22,x23,[x5] // load sigma + ldp x24,x25,[x3] // load key + ldp x26,x27,[x3,#16] + ldp x28,x30,[x4] // load counter +#ifdef __ARMEB__ + ror x24,x24,#32 + ror x25,x25,#32 + ror x26,x26,#32 + ror x27,x27,#32 + ror x28,x28,#32 + ror x30,x30,#32 +#endif + +Loop_outer: + mov w5,w22 // unpack key block + lsr x6,x22,#32 + mov w7,w23 + lsr x8,x23,#32 + mov w9,w24 + lsr x10,x24,#32 + mov w11,w25 + lsr x12,x25,#32 + mov w13,w26 + lsr x14,x26,#32 + mov w15,w27 + lsr x16,x27,#32 + mov w17,w28 + lsr x19,x28,#32 + mov w20,w30 + lsr x21,x30,#32 + + mov x4,#10 + subs x2,x2,#64 +Loop: + sub x4,x4,#1 + add w5,w5,w9 + add w6,w6,w10 + add w7,w7,w11 + add w8,w8,w12 + eor w17,w17,w5 + eor w19,w19,w6 + eor w20,w20,w7 + eor w21,w21,w8 + ror w17,w17,#16 + ror w19,w19,#16 + ror w20,w20,#16 + ror w21,w21,#16 + add w13,w13,w17 + add w14,w14,w19 + add w15,w15,w20 + add w16,w16,w21 + eor w9,w9,w13 + eor w10,w10,w14 + eor w11,w11,w15 + eor w12,w12,w16 + ror w9,w9,#20 + ror w10,w10,#20 + ror w11,w11,#20 + ror w12,w12,#20 + add w5,w5,w9 + add w6,w6,w10 + add w7,w7,w11 + add w8,w8,w12 + eor w17,w17,w5 + eor w19,w19,w6 + eor w20,w20,w7 + eor w21,w21,w8 + ror w17,w17,#24 + ror w19,w19,#24 + ror w20,w20,#24 + ror w21,w21,#24 + add w13,w13,w17 + add w14,w14,w19 + add w15,w15,w20 + add w16,w16,w21 + eor w9,w9,w13 + eor w10,w10,w14 + eor w11,w11,w15 + eor w12,w12,w16 + ror w9,w9,#25 + ror w10,w10,#25 + ror w11,w11,#25 + ror w12,w12,#25 + add w5,w5,w10 + add w6,w6,w11 + add w7,w7,w12 + add w8,w8,w9 + eor w21,w21,w5 + eor w17,w17,w6 + eor w19,w19,w7 + eor w20,w20,w8 + ror w21,w21,#16 + ror w17,w17,#16 + ror w19,w19,#16 + ror w20,w20,#16 + add w15,w15,w21 + add w16,w16,w17 + add w13,w13,w19 + add w14,w14,w20 + eor w10,w10,w15 + eor w11,w11,w16 + eor w12,w12,w13 + eor w9,w9,w14 + ror w10,w10,#20 + ror w11,w11,#20 + ror w12,w12,#20 + ror w9,w9,#20 + add w5,w5,w10 + add w6,w6,w11 + add w7,w7,w12 + add w8,w8,w9 + eor w21,w21,w5 + eor w17,w17,w6 + eor w19,w19,w7 + eor w20,w20,w8 + ror w21,w21,#24 + ror w17,w17,#24 + ror w19,w19,#24 + ror w20,w20,#24 + add w15,w15,w21 + add w16,w16,w17 + add w13,w13,w19 + add w14,w14,w20 + eor w10,w10,w15 + eor w11,w11,w16 + eor w12,w12,w13 + eor w9,w9,w14 + ror w10,w10,#25 + ror w11,w11,#25 + ror w12,w12,#25 + ror w9,w9,#25 + cbnz x4,Loop + + add w5,w5,w22 // accumulate key block + add x6,x6,x22,lsr#32 + add w7,w7,w23 + add x8,x8,x23,lsr#32 + add w9,w9,w24 + add x10,x10,x24,lsr#32 + add w11,w11,w25 + add x12,x12,x25,lsr#32 + add w13,w13,w26 + add x14,x14,x26,lsr#32 + add w15,w15,w27 + add x16,x16,x27,lsr#32 + add w17,w17,w28 + add x19,x19,x28,lsr#32 + add w20,w20,w30 + add x21,x21,x30,lsr#32 + + b.lo Ltail + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + ldp x6,x8,[x1,#0] // load input + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + ldp x10,x12,[x1,#16] + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + ldp x14,x16,[x1,#32] + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 + ldp x19,x21,[x1,#48] + add x1,x1,#64 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor x15,x15,x16 + eor x17,x17,x19 + eor x20,x20,x21 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#1 // increment counter + stp x9,x11,[x0,#16] + stp x13,x15,[x0,#32] + stp x17,x20,[x0,#48] + add x0,x0,#64 + + b.hi Loop_outer + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp +Labort: + ret + +.align 4 +Ltail: + add x2,x2,#64 +Less_than_64: + sub x0,x0,#1 + add x1,x1,x2 + add x0,x0,x2 + add x4,sp,x2 + neg x2,x2 + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + stp x5,x7,[sp,#0] + stp x9,x11,[sp,#16] + stp x13,x15,[sp,#32] + stp x17,x20,[sp,#48] + +Loop_tail: + ldrb w10,[x1,x2] + ldrb w11,[x4,x2] + add x2,x2,#1 + eor w10,w10,w11 + strb w10,[x0,x2] + cbnz x2,Loop_tail + + stp xzr,xzr,[sp,#0] + stp xzr,xzr,[sp,#16] + stp xzr,xzr,[sp,#32] + stp xzr,xzr,[sp,#48] + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + + + +.align 5 +ChaCha20_neon: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adr x5,Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + cmp x2,#512 + b.hs L512_or_more_neon + + sub sp,sp,#64 + + ldp x22,x23,[x5] // load sigma + ld1 {v24.4s},[x5],#16 + ldp x24,x25,[x3] // load key + ldp x26,x27,[x3,#16] + ld1 {v25.4s,v26.4s},[x3] + ldp x28,x30,[x4] // load counter + ld1 {v27.4s},[x4] + ld1 {v31.4s},[x5] +#ifdef __ARMEB__ + rev64 v24.4s,v24.4s + ror x24,x24,#32 + ror x25,x25,#32 + ror x26,x26,#32 + ror x27,x27,#32 + ror x28,x28,#32 + ror x30,x30,#32 +#endif + add v27.4s,v27.4s,v31.4s // += 1 + add v28.4s,v27.4s,v31.4s + add v29.4s,v28.4s,v31.4s + shl v31.4s,v31.4s,#2 // 1 -> 4 + +Loop_outer_neon: + mov w5,w22 // unpack key block + lsr x6,x22,#32 + mov v0.16b,v24.16b + mov w7,w23 + lsr x8,x23,#32 + mov v4.16b,v24.16b + mov w9,w24 + lsr x10,x24,#32 + mov v16.16b,v24.16b + mov w11,w25 + mov v1.16b,v25.16b + lsr x12,x25,#32 + mov v5.16b,v25.16b + mov w13,w26 + mov v17.16b,v25.16b + lsr x14,x26,#32 + mov v3.16b,v27.16b + mov w15,w27 + mov v7.16b,v28.16b + lsr x16,x27,#32 + mov v19.16b,v29.16b + mov w17,w28 + mov v2.16b,v26.16b + lsr x19,x28,#32 + mov v6.16b,v26.16b + mov w20,w30 + mov v18.16b,v26.16b + lsr x21,x30,#32 + + mov x4,#10 + subs x2,x2,#256 +Loop_neon: + sub x4,x4,#1 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v16.4s,v16.4s,v17.4s + add w7,w7,w11 + eor v3.16b,v3.16b,v0.16b + add w8,w8,w12 + eor v7.16b,v7.16b,v4.16b + eor w17,w17,w5 + eor v19.16b,v19.16b,v16.16b + eor w19,w19,w6 + rev32 v3.8h,v3.8h + eor w20,w20,w7 + rev32 v7.8h,v7.8h + eor w21,w21,w8 + rev32 v19.8h,v19.8h + ror w17,w17,#16 + add v2.4s,v2.4s,v3.4s + ror w19,w19,#16 + add v6.4s,v6.4s,v7.4s + ror w20,w20,#16 + add v18.4s,v18.4s,v19.4s + ror w21,w21,#16 + eor v20.16b,v1.16b,v2.16b + add w13,w13,w17 + eor v21.16b,v5.16b,v6.16b + add w14,w14,w19 + eor v22.16b,v17.16b,v18.16b + add w15,w15,w20 + ushr v1.4s,v20.4s,#20 + add w16,w16,w21 + ushr v5.4s,v21.4s,#20 + eor w9,w9,w13 + ushr v17.4s,v22.4s,#20 + eor w10,w10,w14 + sli v1.4s,v20.4s,#12 + eor w11,w11,w15 + sli v5.4s,v21.4s,#12 + eor w12,w12,w16 + sli v17.4s,v22.4s,#12 + ror w9,w9,#20 + add v0.4s,v0.4s,v1.4s + ror w10,w10,#20 + add v4.4s,v4.4s,v5.4s + ror w11,w11,#20 + add v16.4s,v16.4s,v17.4s + ror w12,w12,#20 + eor v20.16b,v3.16b,v0.16b + add w5,w5,w9 + eor v21.16b,v7.16b,v4.16b + add w6,w6,w10 + eor v22.16b,v19.16b,v16.16b + add w7,w7,w11 + ushr v3.4s,v20.4s,#24 + add w8,w8,w12 + ushr v7.4s,v21.4s,#24 + eor w17,w17,w5 + ushr v19.4s,v22.4s,#24 + eor w19,w19,w6 + sli v3.4s,v20.4s,#8 + eor w20,w20,w7 + sli v7.4s,v21.4s,#8 + eor w21,w21,w8 + sli v19.4s,v22.4s,#8 + ror w17,w17,#24 + add v2.4s,v2.4s,v3.4s + ror w19,w19,#24 + add v6.4s,v6.4s,v7.4s + ror w20,w20,#24 + add v18.4s,v18.4s,v19.4s + ror w21,w21,#24 + eor v20.16b,v1.16b,v2.16b + add w13,w13,w17 + eor v21.16b,v5.16b,v6.16b + add w14,w14,w19 + eor v22.16b,v17.16b,v18.16b + add w15,w15,w20 + ushr v1.4s,v20.4s,#25 + add w16,w16,w21 + ushr v5.4s,v21.4s,#25 + eor w9,w9,w13 + ushr v17.4s,v22.4s,#25 + eor w10,w10,w14 + sli v1.4s,v20.4s,#7 + eor w11,w11,w15 + sli v5.4s,v21.4s,#7 + eor w12,w12,w16 + sli v17.4s,v22.4s,#7 + ror w9,w9,#25 + ext v2.16b,v2.16b,v2.16b,#8 + ror w10,w10,#25 + ext v6.16b,v6.16b,v6.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v3.16b,v3.16b,v3.16b,#12 + ext v7.16b,v7.16b,v7.16b,#12 + ext v19.16b,v19.16b,v19.16b,#12 + ext v1.16b,v1.16b,v1.16b,#4 + ext v5.16b,v5.16b,v5.16b,#4 + ext v17.16b,v17.16b,v17.16b,#4 + add v0.4s,v0.4s,v1.4s + add w5,w5,w10 + add v4.4s,v4.4s,v5.4s + add w6,w6,w11 + add v16.4s,v16.4s,v17.4s + add w7,w7,w12 + eor v3.16b,v3.16b,v0.16b + add w8,w8,w9 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w5 + eor v19.16b,v19.16b,v16.16b + eor w17,w17,w6 + rev32 v3.8h,v3.8h + eor w19,w19,w7 + rev32 v7.8h,v7.8h + eor w20,w20,w8 + rev32 v19.8h,v19.8h + ror w21,w21,#16 + add v2.4s,v2.4s,v3.4s + ror w17,w17,#16 + add v6.4s,v6.4s,v7.4s + ror w19,w19,#16 + add v18.4s,v18.4s,v19.4s + ror w20,w20,#16 + eor v20.16b,v1.16b,v2.16b + add w15,w15,w21 + eor v21.16b,v5.16b,v6.16b + add w16,w16,w17 + eor v22.16b,v17.16b,v18.16b + add w13,w13,w19 + ushr v1.4s,v20.4s,#20 + add w14,w14,w20 + ushr v5.4s,v21.4s,#20 + eor w10,w10,w15 + ushr v17.4s,v22.4s,#20 + eor w11,w11,w16 + sli v1.4s,v20.4s,#12 + eor w12,w12,w13 + sli v5.4s,v21.4s,#12 + eor w9,w9,w14 + sli v17.4s,v22.4s,#12 + ror w10,w10,#20 + add v0.4s,v0.4s,v1.4s + ror w11,w11,#20 + add v4.4s,v4.4s,v5.4s + ror w12,w12,#20 + add v16.4s,v16.4s,v17.4s + ror w9,w9,#20 + eor v20.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v21.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v22.16b,v19.16b,v16.16b + add w7,w7,w12 + ushr v3.4s,v20.4s,#24 + add w8,w8,w9 + ushr v7.4s,v21.4s,#24 + eor w21,w21,w5 + ushr v19.4s,v22.4s,#24 + eor w17,w17,w6 + sli v3.4s,v20.4s,#8 + eor w19,w19,w7 + sli v7.4s,v21.4s,#8 + eor w20,w20,w8 + sli v19.4s,v22.4s,#8 + ror w21,w21,#24 + add v2.4s,v2.4s,v3.4s + ror w17,w17,#24 + add v6.4s,v6.4s,v7.4s + ror w19,w19,#24 + add v18.4s,v18.4s,v19.4s + ror w20,w20,#24 + eor v20.16b,v1.16b,v2.16b + add w15,w15,w21 + eor v21.16b,v5.16b,v6.16b + add w16,w16,w17 + eor v22.16b,v17.16b,v18.16b + add w13,w13,w19 + ushr v1.4s,v20.4s,#25 + add w14,w14,w20 + ushr v5.4s,v21.4s,#25 + eor w10,w10,w15 + ushr v17.4s,v22.4s,#25 + eor w11,w11,w16 + sli v1.4s,v20.4s,#7 + eor w12,w12,w13 + sli v5.4s,v21.4s,#7 + eor w9,w9,w14 + sli v17.4s,v22.4s,#7 + ror w10,w10,#25 + ext v2.16b,v2.16b,v2.16b,#8 + ror w11,w11,#25 + ext v6.16b,v6.16b,v6.16b,#8 + ror w12,w12,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#4 + ext v7.16b,v7.16b,v7.16b,#4 + ext v19.16b,v19.16b,v19.16b,#4 + ext v1.16b,v1.16b,v1.16b,#12 + ext v5.16b,v5.16b,v5.16b,#12 + ext v17.16b,v17.16b,v17.16b,#12 + cbnz x4,Loop_neon + + add w5,w5,w22 // accumulate key block + add v0.4s,v0.4s,v24.4s + add x6,x6,x22,lsr#32 + add v4.4s,v4.4s,v24.4s + add w7,w7,w23 + add v16.4s,v16.4s,v24.4s + add x8,x8,x23,lsr#32 + add v2.4s,v2.4s,v26.4s + add w9,w9,w24 + add v6.4s,v6.4s,v26.4s + add x10,x10,x24,lsr#32 + add v18.4s,v18.4s,v26.4s + add w11,w11,w25 + add v3.4s,v3.4s,v27.4s + add x12,x12,x25,lsr#32 + add w13,w13,w26 + add v7.4s,v7.4s,v28.4s + add x14,x14,x26,lsr#32 + add w15,w15,w27 + add v19.4s,v19.4s,v29.4s + add x16,x16,x27,lsr#32 + add w17,w17,w28 + add v1.4s,v1.4s,v25.4s + add x19,x19,x28,lsr#32 + add w20,w20,w30 + add v5.4s,v5.4s,v25.4s + add x21,x21,x30,lsr#32 + add v17.4s,v17.4s,v25.4s + + b.lo Ltail_neon + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + ldp x6,x8,[x1,#0] // load input + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + ldp x10,x12,[x1,#16] + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + ldp x14,x16,[x1,#32] + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 + ldp x19,x21,[x1,#48] + add x1,x1,#64 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor v0.16b,v0.16b,v20.16b + eor x15,x15,x16 + eor v1.16b,v1.16b,v21.16b + eor x17,x17,x19 + eor v2.16b,v2.16b,v22.16b + eor x20,x20,x21 + eor v3.16b,v3.16b,v23.16b + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#4 // increment counter + stp x9,x11,[x0,#16] + add v27.4s,v27.4s,v31.4s // += 4 + stp x13,x15,[x0,#32] + add v28.4s,v28.4s,v31.4s + stp x17,x20,[x0,#48] + add v29.4s,v29.4s,v31.4s + add x0,x0,#64 + + st1 {v0.16b,v1.16b,v2.16b,v3.16b},[x0],#64 + ld1 {v0.16b,v1.16b,v2.16b,v3.16b},[x1],#64 + + eor v4.16b,v4.16b,v20.16b + eor v5.16b,v5.16b,v21.16b + eor v6.16b,v6.16b,v22.16b + eor v7.16b,v7.16b,v23.16b + st1 {v4.16b,v5.16b,v6.16b,v7.16b},[x0],#64 + + eor v16.16b,v16.16b,v0.16b + eor v17.16b,v17.16b,v1.16b + eor v18.16b,v18.16b,v2.16b + eor v19.16b,v19.16b,v3.16b + st1 {v16.16b,v17.16b,v18.16b,v19.16b},[x0],#64 + + b.hi Loop_outer_neon + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + +Ltail_neon: + add x2,x2,#256 + cmp x2,#64 + b.lo Less_than_64 + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + ldp x6,x8,[x1,#0] // load input + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + ldp x10,x12,[x1,#16] + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + ldp x14,x16,[x1,#32] + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 + ldp x19,x21,[x1,#48] + add x1,x1,#64 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor x15,x15,x16 + eor x17,x17,x19 + eor x20,x20,x21 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#4 // increment counter + stp x9,x11,[x0,#16] + stp x13,x15,[x0,#32] + stp x17,x20,[x0,#48] + add x0,x0,#64 + b.eq Ldone_neon + sub x2,x2,#64 + cmp x2,#64 + b.lo Less_than_128 + + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + eor v0.16b,v0.16b,v20.16b + eor v1.16b,v1.16b,v21.16b + eor v2.16b,v2.16b,v22.16b + eor v3.16b,v3.16b,v23.16b + st1 {v0.16b,v1.16b,v2.16b,v3.16b},[x0],#64 + b.eq Ldone_neon + sub x2,x2,#64 + cmp x2,#64 + b.lo Less_than_192 + + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + eor v4.16b,v4.16b,v20.16b + eor v5.16b,v5.16b,v21.16b + eor v6.16b,v6.16b,v22.16b + eor v7.16b,v7.16b,v23.16b + st1 {v4.16b,v5.16b,v6.16b,v7.16b},[x0],#64 + b.eq Ldone_neon + sub x2,x2,#64 + + st1 {v16.16b,v17.16b,v18.16b,v19.16b},[sp] + b Last_neon + +Less_than_128: + st1 {v0.16b,v1.16b,v2.16b,v3.16b},[sp] + b Last_neon +Less_than_192: + st1 {v4.16b,v5.16b,v6.16b,v7.16b},[sp] + b Last_neon + +.align 4 +Last_neon: + sub x0,x0,#1 + add x1,x1,x2 + add x0,x0,x2 + add x4,sp,x2 + neg x2,x2 + +Loop_tail_neon: + ldrb w10,[x1,x2] + ldrb w11,[x4,x2] + add x2,x2,#1 + eor w10,w10,w11 + strb w10,[x0,x2] + cbnz x2,Loop_tail_neon + + stp xzr,xzr,[sp,#0] + stp xzr,xzr,[sp,#16] + stp xzr,xzr,[sp,#32] + stp xzr,xzr,[sp,#48] + +Ldone_neon: + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + + +.align 5 +ChaCha20_512_neon: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adr x5,Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + +L512_or_more_neon: + sub sp,sp,#128+64 + + ldp x22,x23,[x5] // load sigma + ld1 {v24.4s},[x5],#16 + ldp x24,x25,[x3] // load key + ldp x26,x27,[x3,#16] + ld1 {v25.4s,v26.4s},[x3] + ldp x28,x30,[x4] // load counter + ld1 {v27.4s},[x4] + ld1 {v31.4s},[x5] +#ifdef __ARMEB__ + rev64 v24.4s,v24.4s + ror x24,x24,#32 + ror x25,x25,#32 + ror x26,x26,#32 + ror x27,x27,#32 + ror x28,x28,#32 + ror x30,x30,#32 +#endif + add v27.4s,v27.4s,v31.4s // += 1 + stp q24,q25,[sp,#0] // off-load key block, invariant part + add v27.4s,v27.4s,v31.4s // not typo + str q26,[sp,#32] + add v28.4s,v27.4s,v31.4s + add v29.4s,v28.4s,v31.4s + add v30.4s,v29.4s,v31.4s + shl v31.4s,v31.4s,#2 // 1 -> 4 + + stp d8,d9,[sp,#128+0] // meet ABI requirements + stp d10,d11,[sp,#128+16] + stp d12,d13,[sp,#128+32] + stp d14,d15,[sp,#128+48] + + sub x2,x2,#512 // not typo + +Loop_outer_512_neon: + mov v0.16b,v24.16b + mov v4.16b,v24.16b + mov v8.16b,v24.16b + mov v12.16b,v24.16b + mov v16.16b,v24.16b + mov v20.16b,v24.16b + mov v1.16b,v25.16b + mov w5,w22 // unpack key block + mov v5.16b,v25.16b + lsr x6,x22,#32 + mov v9.16b,v25.16b + mov w7,w23 + mov v13.16b,v25.16b + lsr x8,x23,#32 + mov v17.16b,v25.16b + mov w9,w24 + mov v21.16b,v25.16b + lsr x10,x24,#32 + mov v3.16b,v27.16b + mov w11,w25 + mov v7.16b,v28.16b + lsr x12,x25,#32 + mov v11.16b,v29.16b + mov w13,w26 + mov v15.16b,v30.16b + lsr x14,x26,#32 + mov v2.16b,v26.16b + mov w15,w27 + mov v6.16b,v26.16b + lsr x16,x27,#32 + add v19.4s,v3.4s,v31.4s // +4 + mov w17,w28 + add v23.4s,v7.4s,v31.4s // +4 + lsr x19,x28,#32 + mov v10.16b,v26.16b + mov w20,w30 + mov v14.16b,v26.16b + lsr x21,x30,#32 + mov v18.16b,v26.16b + stp q27,q28,[sp,#48] // off-load key block, variable part + mov v22.16b,v26.16b + str q29,[sp,#80] + + mov x4,#5 + subs x2,x2,#512 +Loop_upper_neon: + sub x4,x4,#1 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v8.4s,v8.4s,v9.4s + add w7,w7,w11 + add v12.4s,v12.4s,v13.4s + add w8,w8,w12 + add v16.4s,v16.4s,v17.4s + eor w17,w17,w5 + add v20.4s,v20.4s,v21.4s + eor w19,w19,w6 + eor v3.16b,v3.16b,v0.16b + eor w20,w20,w7 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w8 + eor v11.16b,v11.16b,v8.16b + ror w17,w17,#16 + eor v15.16b,v15.16b,v12.16b + ror w19,w19,#16 + eor v19.16b,v19.16b,v16.16b + ror w20,w20,#16 + eor v23.16b,v23.16b,v20.16b + ror w21,w21,#16 + rev32 v3.8h,v3.8h + add w13,w13,w17 + rev32 v7.8h,v7.8h + add w14,w14,w19 + rev32 v11.8h,v11.8h + add w15,w15,w20 + rev32 v15.8h,v15.8h + add w16,w16,w21 + rev32 v19.8h,v19.8h + eor w9,w9,w13 + rev32 v23.8h,v23.8h + eor w10,w10,w14 + add v2.4s,v2.4s,v3.4s + eor w11,w11,w15 + add v6.4s,v6.4s,v7.4s + eor w12,w12,w16 + add v10.4s,v10.4s,v11.4s + ror w9,w9,#20 + add v14.4s,v14.4s,v15.4s + ror w10,w10,#20 + add v18.4s,v18.4s,v19.4s + ror w11,w11,#20 + add v22.4s,v22.4s,v23.4s + ror w12,w12,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w9 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w10 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w11 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w12 + eor v28.16b,v17.16b,v18.16b + eor w17,w17,w5 + eor v29.16b,v21.16b,v22.16b + eor w19,w19,w6 + ushr v1.4s,v24.4s,#20 + eor w20,w20,w7 + ushr v5.4s,v25.4s,#20 + eor w21,w21,w8 + ushr v9.4s,v26.4s,#20 + ror w17,w17,#24 + ushr v13.4s,v27.4s,#20 + ror w19,w19,#24 + ushr v17.4s,v28.4s,#20 + ror w20,w20,#24 + ushr v21.4s,v29.4s,#20 + ror w21,w21,#24 + sli v1.4s,v24.4s,#12 + add w13,w13,w17 + sli v5.4s,v25.4s,#12 + add w14,w14,w19 + sli v9.4s,v26.4s,#12 + add w15,w15,w20 + sli v13.4s,v27.4s,#12 + add w16,w16,w21 + sli v17.4s,v28.4s,#12 + eor w9,w9,w13 + sli v21.4s,v29.4s,#12 + eor w10,w10,w14 + add v0.4s,v0.4s,v1.4s + eor w11,w11,w15 + add v4.4s,v4.4s,v5.4s + eor w12,w12,w16 + add v8.4s,v8.4s,v9.4s + ror w9,w9,#25 + add v12.4s,v12.4s,v13.4s + ror w10,w10,#25 + add v16.4s,v16.4s,v17.4s + ror w11,w11,#25 + add v20.4s,v20.4s,v21.4s + ror w12,w12,#25 + eor v24.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v25.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v26.16b,v11.16b,v8.16b + add w7,w7,w12 + eor v27.16b,v15.16b,v12.16b + add w8,w8,w9 + eor v28.16b,v19.16b,v16.16b + eor w21,w21,w5 + eor v29.16b,v23.16b,v20.16b + eor w17,w17,w6 + ushr v3.4s,v24.4s,#24 + eor w19,w19,w7 + ushr v7.4s,v25.4s,#24 + eor w20,w20,w8 + ushr v11.4s,v26.4s,#24 + ror w21,w21,#16 + ushr v15.4s,v27.4s,#24 + ror w17,w17,#16 + ushr v19.4s,v28.4s,#24 + ror w19,w19,#16 + ushr v23.4s,v29.4s,#24 + ror w20,w20,#16 + sli v3.4s,v24.4s,#8 + add w15,w15,w21 + sli v7.4s,v25.4s,#8 + add w16,w16,w17 + sli v11.4s,v26.4s,#8 + add w13,w13,w19 + sli v15.4s,v27.4s,#8 + add w14,w14,w20 + sli v19.4s,v28.4s,#8 + eor w10,w10,w15 + sli v23.4s,v29.4s,#8 + eor w11,w11,w16 + add v2.4s,v2.4s,v3.4s + eor w12,w12,w13 + add v6.4s,v6.4s,v7.4s + eor w9,w9,w14 + add v10.4s,v10.4s,v11.4s + ror w10,w10,#20 + add v14.4s,v14.4s,v15.4s + ror w11,w11,#20 + add v18.4s,v18.4s,v19.4s + ror w12,w12,#20 + add v22.4s,v22.4s,v23.4s + ror w9,w9,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w10 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w11 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w12 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w9 + eor v28.16b,v17.16b,v18.16b + eor w21,w21,w5 + eor v29.16b,v21.16b,v22.16b + eor w17,w17,w6 + ushr v1.4s,v24.4s,#25 + eor w19,w19,w7 + ushr v5.4s,v25.4s,#25 + eor w20,w20,w8 + ushr v9.4s,v26.4s,#25 + ror w21,w21,#24 + ushr v13.4s,v27.4s,#25 + ror w17,w17,#24 + ushr v17.4s,v28.4s,#25 + ror w19,w19,#24 + ushr v21.4s,v29.4s,#25 + ror w20,w20,#24 + sli v1.4s,v24.4s,#7 + add w15,w15,w21 + sli v5.4s,v25.4s,#7 + add w16,w16,w17 + sli v9.4s,v26.4s,#7 + add w13,w13,w19 + sli v13.4s,v27.4s,#7 + add w14,w14,w20 + sli v17.4s,v28.4s,#7 + eor w10,w10,w15 + sli v21.4s,v29.4s,#7 + eor w11,w11,w16 + ext v2.16b,v2.16b,v2.16b,#8 + eor w12,w12,w13 + ext v6.16b,v6.16b,v6.16b,#8 + eor w9,w9,w14 + ext v10.16b,v10.16b,v10.16b,#8 + ror w10,w10,#25 + ext v14.16b,v14.16b,v14.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v22.16b,v22.16b,v22.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#12 + ext v7.16b,v7.16b,v7.16b,#12 + ext v11.16b,v11.16b,v11.16b,#12 + ext v15.16b,v15.16b,v15.16b,#12 + ext v19.16b,v19.16b,v19.16b,#12 + ext v23.16b,v23.16b,v23.16b,#12 + ext v1.16b,v1.16b,v1.16b,#4 + ext v5.16b,v5.16b,v5.16b,#4 + ext v9.16b,v9.16b,v9.16b,#4 + ext v13.16b,v13.16b,v13.16b,#4 + ext v17.16b,v17.16b,v17.16b,#4 + ext v21.16b,v21.16b,v21.16b,#4 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v8.4s,v8.4s,v9.4s + add w7,w7,w11 + add v12.4s,v12.4s,v13.4s + add w8,w8,w12 + add v16.4s,v16.4s,v17.4s + eor w17,w17,w5 + add v20.4s,v20.4s,v21.4s + eor w19,w19,w6 + eor v3.16b,v3.16b,v0.16b + eor w20,w20,w7 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w8 + eor v11.16b,v11.16b,v8.16b + ror w17,w17,#16 + eor v15.16b,v15.16b,v12.16b + ror w19,w19,#16 + eor v19.16b,v19.16b,v16.16b + ror w20,w20,#16 + eor v23.16b,v23.16b,v20.16b + ror w21,w21,#16 + rev32 v3.8h,v3.8h + add w13,w13,w17 + rev32 v7.8h,v7.8h + add w14,w14,w19 + rev32 v11.8h,v11.8h + add w15,w15,w20 + rev32 v15.8h,v15.8h + add w16,w16,w21 + rev32 v19.8h,v19.8h + eor w9,w9,w13 + rev32 v23.8h,v23.8h + eor w10,w10,w14 + add v2.4s,v2.4s,v3.4s + eor w11,w11,w15 + add v6.4s,v6.4s,v7.4s + eor w12,w12,w16 + add v10.4s,v10.4s,v11.4s + ror w9,w9,#20 + add v14.4s,v14.4s,v15.4s + ror w10,w10,#20 + add v18.4s,v18.4s,v19.4s + ror w11,w11,#20 + add v22.4s,v22.4s,v23.4s + ror w12,w12,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w9 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w10 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w11 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w12 + eor v28.16b,v17.16b,v18.16b + eor w17,w17,w5 + eor v29.16b,v21.16b,v22.16b + eor w19,w19,w6 + ushr v1.4s,v24.4s,#20 + eor w20,w20,w7 + ushr v5.4s,v25.4s,#20 + eor w21,w21,w8 + ushr v9.4s,v26.4s,#20 + ror w17,w17,#24 + ushr v13.4s,v27.4s,#20 + ror w19,w19,#24 + ushr v17.4s,v28.4s,#20 + ror w20,w20,#24 + ushr v21.4s,v29.4s,#20 + ror w21,w21,#24 + sli v1.4s,v24.4s,#12 + add w13,w13,w17 + sli v5.4s,v25.4s,#12 + add w14,w14,w19 + sli v9.4s,v26.4s,#12 + add w15,w15,w20 + sli v13.4s,v27.4s,#12 + add w16,w16,w21 + sli v17.4s,v28.4s,#12 + eor w9,w9,w13 + sli v21.4s,v29.4s,#12 + eor w10,w10,w14 + add v0.4s,v0.4s,v1.4s + eor w11,w11,w15 + add v4.4s,v4.4s,v5.4s + eor w12,w12,w16 + add v8.4s,v8.4s,v9.4s + ror w9,w9,#25 + add v12.4s,v12.4s,v13.4s + ror w10,w10,#25 + add v16.4s,v16.4s,v17.4s + ror w11,w11,#25 + add v20.4s,v20.4s,v21.4s + ror w12,w12,#25 + eor v24.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v25.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v26.16b,v11.16b,v8.16b + add w7,w7,w12 + eor v27.16b,v15.16b,v12.16b + add w8,w8,w9 + eor v28.16b,v19.16b,v16.16b + eor w21,w21,w5 + eor v29.16b,v23.16b,v20.16b + eor w17,w17,w6 + ushr v3.4s,v24.4s,#24 + eor w19,w19,w7 + ushr v7.4s,v25.4s,#24 + eor w20,w20,w8 + ushr v11.4s,v26.4s,#24 + ror w21,w21,#16 + ushr v15.4s,v27.4s,#24 + ror w17,w17,#16 + ushr v19.4s,v28.4s,#24 + ror w19,w19,#16 + ushr v23.4s,v29.4s,#24 + ror w20,w20,#16 + sli v3.4s,v24.4s,#8 + add w15,w15,w21 + sli v7.4s,v25.4s,#8 + add w16,w16,w17 + sli v11.4s,v26.4s,#8 + add w13,w13,w19 + sli v15.4s,v27.4s,#8 + add w14,w14,w20 + sli v19.4s,v28.4s,#8 + eor w10,w10,w15 + sli v23.4s,v29.4s,#8 + eor w11,w11,w16 + add v2.4s,v2.4s,v3.4s + eor w12,w12,w13 + add v6.4s,v6.4s,v7.4s + eor w9,w9,w14 + add v10.4s,v10.4s,v11.4s + ror w10,w10,#20 + add v14.4s,v14.4s,v15.4s + ror w11,w11,#20 + add v18.4s,v18.4s,v19.4s + ror w12,w12,#20 + add v22.4s,v22.4s,v23.4s + ror w9,w9,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w10 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w11 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w12 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w9 + eor v28.16b,v17.16b,v18.16b + eor w21,w21,w5 + eor v29.16b,v21.16b,v22.16b + eor w17,w17,w6 + ushr v1.4s,v24.4s,#25 + eor w19,w19,w7 + ushr v5.4s,v25.4s,#25 + eor w20,w20,w8 + ushr v9.4s,v26.4s,#25 + ror w21,w21,#24 + ushr v13.4s,v27.4s,#25 + ror w17,w17,#24 + ushr v17.4s,v28.4s,#25 + ror w19,w19,#24 + ushr v21.4s,v29.4s,#25 + ror w20,w20,#24 + sli v1.4s,v24.4s,#7 + add w15,w15,w21 + sli v5.4s,v25.4s,#7 + add w16,w16,w17 + sli v9.4s,v26.4s,#7 + add w13,w13,w19 + sli v13.4s,v27.4s,#7 + add w14,w14,w20 + sli v17.4s,v28.4s,#7 + eor w10,w10,w15 + sli v21.4s,v29.4s,#7 + eor w11,w11,w16 + ext v2.16b,v2.16b,v2.16b,#8 + eor w12,w12,w13 + ext v6.16b,v6.16b,v6.16b,#8 + eor w9,w9,w14 + ext v10.16b,v10.16b,v10.16b,#8 + ror w10,w10,#25 + ext v14.16b,v14.16b,v14.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v22.16b,v22.16b,v22.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#4 + ext v7.16b,v7.16b,v7.16b,#4 + ext v11.16b,v11.16b,v11.16b,#4 + ext v15.16b,v15.16b,v15.16b,#4 + ext v19.16b,v19.16b,v19.16b,#4 + ext v23.16b,v23.16b,v23.16b,#4 + ext v1.16b,v1.16b,v1.16b,#12 + ext v5.16b,v5.16b,v5.16b,#12 + ext v9.16b,v9.16b,v9.16b,#12 + ext v13.16b,v13.16b,v13.16b,#12 + ext v17.16b,v17.16b,v17.16b,#12 + ext v21.16b,v21.16b,v21.16b,#12 + cbnz x4,Loop_upper_neon + + add w5,w5,w22 // accumulate key block + add x6,x6,x22,lsr#32 + add w7,w7,w23 + add x8,x8,x23,lsr#32 + add w9,w9,w24 + add x10,x10,x24,lsr#32 + add w11,w11,w25 + add x12,x12,x25,lsr#32 + add w13,w13,w26 + add x14,x14,x26,lsr#32 + add w15,w15,w27 + add x16,x16,x27,lsr#32 + add w17,w17,w28 + add x19,x19,x28,lsr#32 + add w20,w20,w30 + add x21,x21,x30,lsr#32 + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + ldp x6,x8,[x1,#0] // load input + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + ldp x10,x12,[x1,#16] + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + ldp x14,x16,[x1,#32] + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 + ldp x19,x21,[x1,#48] + add x1,x1,#64 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor x15,x15,x16 + eor x17,x17,x19 + eor x20,x20,x21 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#1 // increment counter + mov w5,w22 // unpack key block + lsr x6,x22,#32 + stp x9,x11,[x0,#16] + mov w7,w23 + lsr x8,x23,#32 + stp x13,x15,[x0,#32] + mov w9,w24 + lsr x10,x24,#32 + stp x17,x20,[x0,#48] + add x0,x0,#64 + mov w11,w25 + lsr x12,x25,#32 + mov w13,w26 + lsr x14,x26,#32 + mov w15,w27 + lsr x16,x27,#32 + mov w17,w28 + lsr x19,x28,#32 + mov w20,w30 + lsr x21,x30,#32 + + mov x4,#5 +Loop_lower_neon: + sub x4,x4,#1 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v8.4s,v8.4s,v9.4s + add w7,w7,w11 + add v12.4s,v12.4s,v13.4s + add w8,w8,w12 + add v16.4s,v16.4s,v17.4s + eor w17,w17,w5 + add v20.4s,v20.4s,v21.4s + eor w19,w19,w6 + eor v3.16b,v3.16b,v0.16b + eor w20,w20,w7 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w8 + eor v11.16b,v11.16b,v8.16b + ror w17,w17,#16 + eor v15.16b,v15.16b,v12.16b + ror w19,w19,#16 + eor v19.16b,v19.16b,v16.16b + ror w20,w20,#16 + eor v23.16b,v23.16b,v20.16b + ror w21,w21,#16 + rev32 v3.8h,v3.8h + add w13,w13,w17 + rev32 v7.8h,v7.8h + add w14,w14,w19 + rev32 v11.8h,v11.8h + add w15,w15,w20 + rev32 v15.8h,v15.8h + add w16,w16,w21 + rev32 v19.8h,v19.8h + eor w9,w9,w13 + rev32 v23.8h,v23.8h + eor w10,w10,w14 + add v2.4s,v2.4s,v3.4s + eor w11,w11,w15 + add v6.4s,v6.4s,v7.4s + eor w12,w12,w16 + add v10.4s,v10.4s,v11.4s + ror w9,w9,#20 + add v14.4s,v14.4s,v15.4s + ror w10,w10,#20 + add v18.4s,v18.4s,v19.4s + ror w11,w11,#20 + add v22.4s,v22.4s,v23.4s + ror w12,w12,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w9 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w10 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w11 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w12 + eor v28.16b,v17.16b,v18.16b + eor w17,w17,w5 + eor v29.16b,v21.16b,v22.16b + eor w19,w19,w6 + ushr v1.4s,v24.4s,#20 + eor w20,w20,w7 + ushr v5.4s,v25.4s,#20 + eor w21,w21,w8 + ushr v9.4s,v26.4s,#20 + ror w17,w17,#24 + ushr v13.4s,v27.4s,#20 + ror w19,w19,#24 + ushr v17.4s,v28.4s,#20 + ror w20,w20,#24 + ushr v21.4s,v29.4s,#20 + ror w21,w21,#24 + sli v1.4s,v24.4s,#12 + add w13,w13,w17 + sli v5.4s,v25.4s,#12 + add w14,w14,w19 + sli v9.4s,v26.4s,#12 + add w15,w15,w20 + sli v13.4s,v27.4s,#12 + add w16,w16,w21 + sli v17.4s,v28.4s,#12 + eor w9,w9,w13 + sli v21.4s,v29.4s,#12 + eor w10,w10,w14 + add v0.4s,v0.4s,v1.4s + eor w11,w11,w15 + add v4.4s,v4.4s,v5.4s + eor w12,w12,w16 + add v8.4s,v8.4s,v9.4s + ror w9,w9,#25 + add v12.4s,v12.4s,v13.4s + ror w10,w10,#25 + add v16.4s,v16.4s,v17.4s + ror w11,w11,#25 + add v20.4s,v20.4s,v21.4s + ror w12,w12,#25 + eor v24.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v25.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v26.16b,v11.16b,v8.16b + add w7,w7,w12 + eor v27.16b,v15.16b,v12.16b + add w8,w8,w9 + eor v28.16b,v19.16b,v16.16b + eor w21,w21,w5 + eor v29.16b,v23.16b,v20.16b + eor w17,w17,w6 + ushr v3.4s,v24.4s,#24 + eor w19,w19,w7 + ushr v7.4s,v25.4s,#24 + eor w20,w20,w8 + ushr v11.4s,v26.4s,#24 + ror w21,w21,#16 + ushr v15.4s,v27.4s,#24 + ror w17,w17,#16 + ushr v19.4s,v28.4s,#24 + ror w19,w19,#16 + ushr v23.4s,v29.4s,#24 + ror w20,w20,#16 + sli v3.4s,v24.4s,#8 + add w15,w15,w21 + sli v7.4s,v25.4s,#8 + add w16,w16,w17 + sli v11.4s,v26.4s,#8 + add w13,w13,w19 + sli v15.4s,v27.4s,#8 + add w14,w14,w20 + sli v19.4s,v28.4s,#8 + eor w10,w10,w15 + sli v23.4s,v29.4s,#8 + eor w11,w11,w16 + add v2.4s,v2.4s,v3.4s + eor w12,w12,w13 + add v6.4s,v6.4s,v7.4s + eor w9,w9,w14 + add v10.4s,v10.4s,v11.4s + ror w10,w10,#20 + add v14.4s,v14.4s,v15.4s + ror w11,w11,#20 + add v18.4s,v18.4s,v19.4s + ror w12,w12,#20 + add v22.4s,v22.4s,v23.4s + ror w9,w9,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w10 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w11 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w12 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w9 + eor v28.16b,v17.16b,v18.16b + eor w21,w21,w5 + eor v29.16b,v21.16b,v22.16b + eor w17,w17,w6 + ushr v1.4s,v24.4s,#25 + eor w19,w19,w7 + ushr v5.4s,v25.4s,#25 + eor w20,w20,w8 + ushr v9.4s,v26.4s,#25 + ror w21,w21,#24 + ushr v13.4s,v27.4s,#25 + ror w17,w17,#24 + ushr v17.4s,v28.4s,#25 + ror w19,w19,#24 + ushr v21.4s,v29.4s,#25 + ror w20,w20,#24 + sli v1.4s,v24.4s,#7 + add w15,w15,w21 + sli v5.4s,v25.4s,#7 + add w16,w16,w17 + sli v9.4s,v26.4s,#7 + add w13,w13,w19 + sli v13.4s,v27.4s,#7 + add w14,w14,w20 + sli v17.4s,v28.4s,#7 + eor w10,w10,w15 + sli v21.4s,v29.4s,#7 + eor w11,w11,w16 + ext v2.16b,v2.16b,v2.16b,#8 + eor w12,w12,w13 + ext v6.16b,v6.16b,v6.16b,#8 + eor w9,w9,w14 + ext v10.16b,v10.16b,v10.16b,#8 + ror w10,w10,#25 + ext v14.16b,v14.16b,v14.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v22.16b,v22.16b,v22.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#12 + ext v7.16b,v7.16b,v7.16b,#12 + ext v11.16b,v11.16b,v11.16b,#12 + ext v15.16b,v15.16b,v15.16b,#12 + ext v19.16b,v19.16b,v19.16b,#12 + ext v23.16b,v23.16b,v23.16b,#12 + ext v1.16b,v1.16b,v1.16b,#4 + ext v5.16b,v5.16b,v5.16b,#4 + ext v9.16b,v9.16b,v9.16b,#4 + ext v13.16b,v13.16b,v13.16b,#4 + ext v17.16b,v17.16b,v17.16b,#4 + ext v21.16b,v21.16b,v21.16b,#4 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v8.4s,v8.4s,v9.4s + add w7,w7,w11 + add v12.4s,v12.4s,v13.4s + add w8,w8,w12 + add v16.4s,v16.4s,v17.4s + eor w17,w17,w5 + add v20.4s,v20.4s,v21.4s + eor w19,w19,w6 + eor v3.16b,v3.16b,v0.16b + eor w20,w20,w7 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w8 + eor v11.16b,v11.16b,v8.16b + ror w17,w17,#16 + eor v15.16b,v15.16b,v12.16b + ror w19,w19,#16 + eor v19.16b,v19.16b,v16.16b + ror w20,w20,#16 + eor v23.16b,v23.16b,v20.16b + ror w21,w21,#16 + rev32 v3.8h,v3.8h + add w13,w13,w17 + rev32 v7.8h,v7.8h + add w14,w14,w19 + rev32 v11.8h,v11.8h + add w15,w15,w20 + rev32 v15.8h,v15.8h + add w16,w16,w21 + rev32 v19.8h,v19.8h + eor w9,w9,w13 + rev32 v23.8h,v23.8h + eor w10,w10,w14 + add v2.4s,v2.4s,v3.4s + eor w11,w11,w15 + add v6.4s,v6.4s,v7.4s + eor w12,w12,w16 + add v10.4s,v10.4s,v11.4s + ror w9,w9,#20 + add v14.4s,v14.4s,v15.4s + ror w10,w10,#20 + add v18.4s,v18.4s,v19.4s + ror w11,w11,#20 + add v22.4s,v22.4s,v23.4s + ror w12,w12,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w9 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w10 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w11 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w12 + eor v28.16b,v17.16b,v18.16b + eor w17,w17,w5 + eor v29.16b,v21.16b,v22.16b + eor w19,w19,w6 + ushr v1.4s,v24.4s,#20 + eor w20,w20,w7 + ushr v5.4s,v25.4s,#20 + eor w21,w21,w8 + ushr v9.4s,v26.4s,#20 + ror w17,w17,#24 + ushr v13.4s,v27.4s,#20 + ror w19,w19,#24 + ushr v17.4s,v28.4s,#20 + ror w20,w20,#24 + ushr v21.4s,v29.4s,#20 + ror w21,w21,#24 + sli v1.4s,v24.4s,#12 + add w13,w13,w17 + sli v5.4s,v25.4s,#12 + add w14,w14,w19 + sli v9.4s,v26.4s,#12 + add w15,w15,w20 + sli v13.4s,v27.4s,#12 + add w16,w16,w21 + sli v17.4s,v28.4s,#12 + eor w9,w9,w13 + sli v21.4s,v29.4s,#12 + eor w10,w10,w14 + add v0.4s,v0.4s,v1.4s + eor w11,w11,w15 + add v4.4s,v4.4s,v5.4s + eor w12,w12,w16 + add v8.4s,v8.4s,v9.4s + ror w9,w9,#25 + add v12.4s,v12.4s,v13.4s + ror w10,w10,#25 + add v16.4s,v16.4s,v17.4s + ror w11,w11,#25 + add v20.4s,v20.4s,v21.4s + ror w12,w12,#25 + eor v24.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v25.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v26.16b,v11.16b,v8.16b + add w7,w7,w12 + eor v27.16b,v15.16b,v12.16b + add w8,w8,w9 + eor v28.16b,v19.16b,v16.16b + eor w21,w21,w5 + eor v29.16b,v23.16b,v20.16b + eor w17,w17,w6 + ushr v3.4s,v24.4s,#24 + eor w19,w19,w7 + ushr v7.4s,v25.4s,#24 + eor w20,w20,w8 + ushr v11.4s,v26.4s,#24 + ror w21,w21,#16 + ushr v15.4s,v27.4s,#24 + ror w17,w17,#16 + ushr v19.4s,v28.4s,#24 + ror w19,w19,#16 + ushr v23.4s,v29.4s,#24 + ror w20,w20,#16 + sli v3.4s,v24.4s,#8 + add w15,w15,w21 + sli v7.4s,v25.4s,#8 + add w16,w16,w17 + sli v11.4s,v26.4s,#8 + add w13,w13,w19 + sli v15.4s,v27.4s,#8 + add w14,w14,w20 + sli v19.4s,v28.4s,#8 + eor w10,w10,w15 + sli v23.4s,v29.4s,#8 + eor w11,w11,w16 + add v2.4s,v2.4s,v3.4s + eor w12,w12,w13 + add v6.4s,v6.4s,v7.4s + eor w9,w9,w14 + add v10.4s,v10.4s,v11.4s + ror w10,w10,#20 + add v14.4s,v14.4s,v15.4s + ror w11,w11,#20 + add v18.4s,v18.4s,v19.4s + ror w12,w12,#20 + add v22.4s,v22.4s,v23.4s + ror w9,w9,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w10 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w11 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w12 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w9 + eor v28.16b,v17.16b,v18.16b + eor w21,w21,w5 + eor v29.16b,v21.16b,v22.16b + eor w17,w17,w6 + ushr v1.4s,v24.4s,#25 + eor w19,w19,w7 + ushr v5.4s,v25.4s,#25 + eor w20,w20,w8 + ushr v9.4s,v26.4s,#25 + ror w21,w21,#24 + ushr v13.4s,v27.4s,#25 + ror w17,w17,#24 + ushr v17.4s,v28.4s,#25 + ror w19,w19,#24 + ushr v21.4s,v29.4s,#25 + ror w20,w20,#24 + sli v1.4s,v24.4s,#7 + add w15,w15,w21 + sli v5.4s,v25.4s,#7 + add w16,w16,w17 + sli v9.4s,v26.4s,#7 + add w13,w13,w19 + sli v13.4s,v27.4s,#7 + add w14,w14,w20 + sli v17.4s,v28.4s,#7 + eor w10,w10,w15 + sli v21.4s,v29.4s,#7 + eor w11,w11,w16 + ext v2.16b,v2.16b,v2.16b,#8 + eor w12,w12,w13 + ext v6.16b,v6.16b,v6.16b,#8 + eor w9,w9,w14 + ext v10.16b,v10.16b,v10.16b,#8 + ror w10,w10,#25 + ext v14.16b,v14.16b,v14.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v22.16b,v22.16b,v22.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#4 + ext v7.16b,v7.16b,v7.16b,#4 + ext v11.16b,v11.16b,v11.16b,#4 + ext v15.16b,v15.16b,v15.16b,#4 + ext v19.16b,v19.16b,v19.16b,#4 + ext v23.16b,v23.16b,v23.16b,#4 + ext v1.16b,v1.16b,v1.16b,#12 + ext v5.16b,v5.16b,v5.16b,#12 + ext v9.16b,v9.16b,v9.16b,#12 + ext v13.16b,v13.16b,v13.16b,#12 + ext v17.16b,v17.16b,v17.16b,#12 + ext v21.16b,v21.16b,v21.16b,#12 + cbnz x4,Loop_lower_neon + + add w5,w5,w22 // accumulate key block + ldp q24,q25,[sp,#0] + add x6,x6,x22,lsr#32 + ldp q26,q27,[sp,#32] + add w7,w7,w23 + ldp q28,q29,[sp,#64] + add x8,x8,x23,lsr#32 + add v0.4s,v0.4s,v24.4s + add w9,w9,w24 + add v4.4s,v4.4s,v24.4s + add x10,x10,x24,lsr#32 + add v8.4s,v8.4s,v24.4s + add w11,w11,w25 + add v12.4s,v12.4s,v24.4s + add x12,x12,x25,lsr#32 + add v16.4s,v16.4s,v24.4s + add w13,w13,w26 + add v20.4s,v20.4s,v24.4s + add x14,x14,x26,lsr#32 + add v2.4s,v2.4s,v26.4s + add w15,w15,w27 + add v6.4s,v6.4s,v26.4s + add x16,x16,x27,lsr#32 + add v10.4s,v10.4s,v26.4s + add w17,w17,w28 + add v14.4s,v14.4s,v26.4s + add x19,x19,x28,lsr#32 + add v18.4s,v18.4s,v26.4s + add w20,w20,w30 + add v22.4s,v22.4s,v26.4s + add x21,x21,x30,lsr#32 + add v19.4s,v19.4s,v31.4s // +4 + add x5,x5,x6,lsl#32 // pack + add v23.4s,v23.4s,v31.4s // +4 + add x7,x7,x8,lsl#32 + add v3.4s,v3.4s,v27.4s + ldp x6,x8,[x1,#0] // load input + add v7.4s,v7.4s,v28.4s + add x9,x9,x10,lsl#32 + add v11.4s,v11.4s,v29.4s + add x11,x11,x12,lsl#32 + add v15.4s,v15.4s,v30.4s + ldp x10,x12,[x1,#16] + add v19.4s,v19.4s,v27.4s + add x13,x13,x14,lsl#32 + add v23.4s,v23.4s,v28.4s + add x15,x15,x16,lsl#32 + add v1.4s,v1.4s,v25.4s + ldp x14,x16,[x1,#32] + add v5.4s,v5.4s,v25.4s + add x17,x17,x19,lsl#32 + add v9.4s,v9.4s,v25.4s + add x20,x20,x21,lsl#32 + add v13.4s,v13.4s,v25.4s + ldp x19,x21,[x1,#48] + add v17.4s,v17.4s,v25.4s + add x1,x1,#64 + add v21.4s,v21.4s,v25.4s + +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x1],#64 + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor v0.16b,v0.16b,v24.16b + eor x15,x15,x16 + eor v1.16b,v1.16b,v25.16b + eor x17,x17,x19 + eor v2.16b,v2.16b,v26.16b + eor x20,x20,x21 + eor v3.16b,v3.16b,v27.16b + ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x1],#64 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#7 // increment counter + stp x9,x11,[x0,#16] + stp x13,x15,[x0,#32] + stp x17,x20,[x0,#48] + add x0,x0,#64 + st1 {v0.16b,v1.16b,v2.16b,v3.16b},[x0],#64 + + ld1 {v0.16b,v1.16b,v2.16b,v3.16b},[x1],#64 + eor v4.16b,v4.16b,v24.16b + eor v5.16b,v5.16b,v25.16b + eor v6.16b,v6.16b,v26.16b + eor v7.16b,v7.16b,v27.16b + st1 {v4.16b,v5.16b,v6.16b,v7.16b},[x0],#64 + + ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 + eor v8.16b,v8.16b,v0.16b + ldp q24,q25,[sp,#0] + eor v9.16b,v9.16b,v1.16b + ldp q26,q27,[sp,#32] + eor v10.16b,v10.16b,v2.16b + eor v11.16b,v11.16b,v3.16b + st1 {v8.16b,v9.16b,v10.16b,v11.16b},[x0],#64 + + ld1 {v8.16b,v9.16b,v10.16b,v11.16b},[x1],#64 + eor v12.16b,v12.16b,v4.16b + eor v13.16b,v13.16b,v5.16b + eor v14.16b,v14.16b,v6.16b + eor v15.16b,v15.16b,v7.16b + st1 {v12.16b,v13.16b,v14.16b,v15.16b},[x0],#64 + + ld1 {v12.16b,v13.16b,v14.16b,v15.16b},[x1],#64 + eor v16.16b,v16.16b,v8.16b + eor v17.16b,v17.16b,v9.16b + eor v18.16b,v18.16b,v10.16b + eor v19.16b,v19.16b,v11.16b + st1 {v16.16b,v17.16b,v18.16b,v19.16b},[x0],#64 + + shl v0.4s,v31.4s,#1 // 4 -> 8 + eor v20.16b,v20.16b,v12.16b + eor v21.16b,v21.16b,v13.16b + eor v22.16b,v22.16b,v14.16b + eor v23.16b,v23.16b,v15.16b + st1 {v20.16b,v21.16b,v22.16b,v23.16b},[x0],#64 + + add v27.4s,v27.4s,v0.4s // += 8 + add v28.4s,v28.4s,v0.4s + add v29.4s,v29.4s,v0.4s + add v30.4s,v30.4s,v0.4s + + b.hs Loop_outer_512_neon + + adds x2,x2,#512 + ushr v0.4s,v31.4s,#2 // 4 -> 1 + + ldp d8,d9,[sp,#128+0] // meet ABI requirements + ldp d10,d11,[sp,#128+16] + ldp d12,d13,[sp,#128+32] + ldp d14,d15,[sp,#128+48] + + stp q24,q31,[sp,#0] // wipe off-load area + stp q24,q31,[sp,#32] + stp q24,q31,[sp,#64] + + b.eq Ldone_512_neon + + cmp x2,#192 + sub v27.4s,v27.4s,v0.4s // -= 1 + sub v28.4s,v28.4s,v0.4s + sub v29.4s,v29.4s,v0.4s + add sp,sp,#128 + b.hs Loop_outer_neon + + eor v25.16b,v25.16b,v25.16b + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + eor v30.16b,v30.16b,v30.16b + b Loop_outer + +Ldone_512_neon: + ldp x19,x20,[x29,#16] + add sp,sp,#128+64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/ec/ecp_nistz256-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/ec/ecp_nistz256-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/ec/ecp_nistz256-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/ec/ecp_nistz256-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,4242 @@ +#include "arm_arch.h" + +.text +.globl _ecp_nistz256_precomputed + +.align 12 +_ecp_nistz256_precomputed: +.byte 0x3c,0x4d,0x27,0xcc,0xf5,0x4a,0x4f,0x8f,0xe8,0xc8,0x04,0x68,0x09,0x4a,0x5b,0x80,0x9d,0x7a,0xe8,0x31,0x08,0x76,0x68,0x19,0x9f,0x08,0xb4,0x1f,0x32,0x43,0x89,0xd8,0x34,0xd3,0xf5,0xb7,0xb5,0xee,0x42,0x3e,0x91,0x01,0x06,0x7c,0xbf,0xd9,0x97,0x12,0xd3,0x1a,0xc9,0x04,0x8d,0x53,0x83,0x14,0x28,0xf0,0x8e,0x19,0xcc,0x91,0xe5,0x80 +.byte 0x14,0xd6,0xc1,0x8d,0x61,0x66,0x3b,0xa7,0x20,0x1e,0xe4,0x77,0xd7,0x66,0x05,0xfb,0x5c,0xa9,0x9a,0x7a,0xb2,0x30,0x50,0x28,0x87,0x80,0xfe,0xcd,0xe1,0xb3,0xff,0xa3,0x45,0x3c,0x7e,0x9b,0x08,0xc0,0xc1,0x9f,0x2e,0xad,0x7d,0x89,0x79,0x90,0x60,0xc6,0xac,0x17,0x64,0x59,0x4d,0xcf,0x56,0x7a,0xca,0x82,0xaa,0x6e,0x04,0x2f,0x1f,0x8b +.byte 0xa9,0xdd,0xeb,0x91,0x5c,0x77,0x17,0x99,0x4e,0xc2,0x45,0x69,0x2e,0xcf,0x60,0xc6,0x3c,0xad,0x65,0x33,0x35,0x6f,0xe4,0xd0,0x37,0x1f,0xe2,0x2c,0x66,0x98,0x55,0xe3,0x66,0xa2,0xc6,0x21,0xce,0x63,0x59,0x2e,0xd2,0x2b,0x8a,0x5a,0xcd,0xee,0xa7,0xad,0xf6,0x8c,0x3f,0x44,0x6c,0x12,0x30,0x8d,0xca,0xea,0x46,0x8a,0x4c,0x96,0xf9,0x96 +.byte 0x18,0x10,0x4e,0x46,0xc4,0x3e,0xa0,0x94,0x26,0x9d,0x62,0xd2,0x4b,0xb0,0xbc,0x0b,0xd5,0x56,0xa5,0xd2,0xc1,0x2f,0x2d,0x15,0xd8,0xed,0x97,0x17,0xcb,0x32,0x67,0xc5,0x0f,0x7c,0xde,0xa8,0x8c,0x4d,0xa0,0xb8,0x2e,0xed,0x24,0xd5,0xd5,0x49,0xca,0x77,0x1f,0x48,0x3b,0x83,0x54,0xb2,0xe7,0x7e,0x7a,0xa7,0x5c,0xed,0x7f,0xa1,0x9f,0x05 +.byte 0xd4,0xd4,0x90,0x0d,0xae,0x37,0x4e,0xd1,0x8f,0xd1,0x0a,0xa7,0x63,0x5b,0xb7,0x65,0xcb,0xc8,0xba,0x29,0xec,0x35,0x53,0xb2,0xac,0x32,0xf4,0xb7,0x6a,0xb1,0x69,0xcf,0x56,0x14,0x7f,0xd6,0xc5,0xca,0x88,0x1d,0x49,0xcf,0xfd,0x1f,0xcc,0xb1,0x13,0x30,0x42,0xd0,0x1c,0x6e,0x38,0x8e,0xf9,0x40,0xe7,0xe8,0xd6,0x28,0x1a,0x75,0x31,0xf3 +.byte 0x30,0x46,0x3f,0xb5,0x8a,0x47,0x35,0x4c,0x6e,0xdb,0x26,0x1a,0x25,0xa3,0xd8,0x0b,0x1d,0x51,0x12,0x91,0x4c,0x11,0x76,0x83,0x19,0xad,0x2a,0x3e,0xb4,0x1c,0x3c,0xfc,0x14,0x20,0x84,0x58,0x7b,0xc3,0x94,0x68,0x60,0x5c,0x3f,0x7c,0x26,0xb5,0x75,0x41,0x0b,0xc2,0xec,0xf3,0x96,0x5b,0xbb,0x41,0x32,0x00,0x4e,0x68,0xeb,0xf1,0xd9,0x96 +.byte 0xe7,0x00,0xac,0xb0,0x1b,0x39,0x46,0xf1,0xc9,0x18,0x7d,0xb7,0xc4,0x42,0xbc,0x8b,0x09,0x3e,0xa9,0x97,0x2e,0xc6,0xf8,0x38,0xa3,0xe4,0x2c,0x52,0x5d,0x24,0xf7,0xc5,0x15,0xab,0x16,0x5e,0x46,0x2c,0xd8,0xd7,0x4d,0xb3,0xf2,0xfd,0xe4,0x75,0x3c,0x34,0x95,0xb9,0x8c,0x92,0x35,0x42,0x8b,0xc4,0xc8,0x6c,0xd4,0x1e,0x67,0x35,0xd3,0x6d +.byte 0x79,0x85,0xff,0x74,0xbe,0x40,0x07,0x27,0x75,0x2c,0xea,0x04,0xcc,0xa2,0x72,0x80,0x97,0x5f,0xfe,0x8a,0x56,0x0f,0xf4,0x6d,0xa4,0x61,0x04,0x4b,0x5e,0xb4,0xe2,0xd8,0x87,0xb6,0xfd,0x3d,0x00,0x8a,0xa9,0xe4,0x62,0x5f,0x4f,0xec,0x1e,0x40,0x28,0x6b,0x21,0x0f,0x50,0x26,0x97,0xa0,0x25,0x8f,0x3e,0xf2,0x69,0xdc,0x36,0xe5,0xb8,0xdb +.byte 0x01,0x7d,0xfb,0x73,0x7d,0x3e,0xf7,0x55,0x41,0x39,0xe0,0x33,0x0d,0xe3,0x4b,0x6b,0x7b,0x3e,0x6e,0xdc,0x7d,0x9a,0x6e,0x35,0xb0,0x38,0x13,0x92,0x80,0xa1,0xe6,0xbf,0x03,0x9d,0xb7,0x7f,0x55,0xce,0x46,0x3c,0x22,0xc7,0xfa,0xfb,0x18,0xba,0x06,0xa0,0x09,0x78,0x3f,0xc0,0x79,0x5f,0xe6,0x6a,0x29,0xaf,0xd1,0xc7,0x84,0xa7,0xed,0xb9 +.byte 0xb6,0x82,0x81,0xc1,0x53,0xee,0x00,0x34,0xa8,0x81,0xdf,0x5a,0xd3,0x07,0x7e,0x2e,0x17,0x40,0xa1,0x2b,0xf4,0x2a,0x1f,0x9a,0x67,0x75,0x73,0xa8,0x58,0x65,0x17,0xdf,0xf1,0x84,0x76,0xc5,0x8d,0x48,0x93,0xe1,0x28,0xa5,0x73,0x10,0x6e,0x9e,0x39,0x03,0x69,0x52,0xdf,0xf9,0x46,0x7c,0x5b,0xf3,0x5b,0x9a,0x63,0xd9,0x4f,0xf5,0x8e,0x73 +.byte 0xed,0x33,0x7d,0x23,0xb9,0x6c,0x3c,0x9b,0xa7,0xcf,0x7f,0x34,0x6f,0x97,0xe2,0xfe,0x0a,0x8b,0xe1,0x86,0x83,0x91,0x2e,0xdd,0x6b,0xb1,0xbf,0xa6,0x92,0x4f,0x30,0x79,0x68,0x91,0x3e,0x06,0x17,0xe9,0x0b,0x25,0x07,0xa6,0x88,0x91,0x6c,0x6e,0xc8,0xd8,0xdc,0x68,0x5e,0x45,0xf2,0x55,0xef,0x56,0x38,0x29,0xd0,0x89,0x40,0x58,0x51,0x9f +.byte 0x5f,0xa4,0x08,0xc6,0x94,0x34,0xd2,0x6f,0x59,0x0f,0x6e,0xca,0x85,0x7f,0x56,0x3f,0xac,0x8f,0x25,0x0f,0x47,0xe3,0x9e,0x40,0xed,0xd8,0xae,0x30,0x0d,0xb4,0x47,0x40,0x4b,0xa3,0x23,0x1b,0x7f,0x0f,0xff,0xdf,0x6f,0x1d,0x87,0xb2,0x94,0xa0,0x36,0xbb,0x53,0x13,0x1e,0xaf,0x92,0xf8,0x07,0x95,0xc7,0xe4,0xa8,0x41,0xa9,0xed,0xf0,0x08 +.byte 0xfc,0xc1,0x4a,0xed,0x9a,0x4f,0x13,0xc5,0xed,0x8a,0x95,0xf5,0x69,0xf7,0xee,0x75,0xb6,0x4d,0xba,0x8f,0x65,0x23,0xe8,0x50,0x9e,0x7a,0xd7,0x28,0x3a,0x49,0xe7,0x4c,0x7c,0xc6,0x64,0xbd,0x8c,0x17,0x14,0x0b,0xb5,0xe3,0xb4,0xab,0x0b,0x9a,0xa9,0x29,0x84,0xaa,0xba,0x69,0xc4,0x2e,0xbf,0xca,0x57,0x0d,0xd3,0x36,0x21,0x61,0x00,0x13 +.byte 0x95,0xe3,0xf8,0xa6,0x64,0x74,0x02,0xb5,0xbf,0x86,0x07,0xde,0x67,0x48,0x23,0xe0,0x24,0x96,0x3a,0x86,0xb2,0xfa,0xa7,0x75,0xb4,0x26,0x42,0xcb,0x96,0x4e,0xf7,0x90,0xae,0xa5,0xe4,0xd0,0x45,0x31,0xe7,0x0f,0xe0,0xcb,0xbf,0x94,0x94,0x33,0x4f,0x65,0x04,0xfb,0xc0,0xc4,0x3f,0x51,0xa5,0xf3,0xea,0xc8,0xd5,0x23,0x66,0xe0,0x48,0x09 +.byte 0xba,0x6a,0x27,0x50,0xec,0xae,0xd2,0x2a,0xe6,0xf9,0xe4,0xde,0x35,0x6e,0xcc,0x82,0x76,0xfc,0x36,0x16,0xe1,0x9f,0xc7,0x0d,0xc1,0xc9,0x6a,0x23,0xbe,0xa1,0x3c,0xfd,0xce,0xa7,0x2e,0x91,0x36,0x23,0x5a,0x20,0xdf,0x55,0xc5,0x91,0x32,0x5c,0x62,0x49,0xe7,0x8b,0x0b,0x0e,0x9c,0x2e,0xee,0x1f,0xfe,0xca,0x00,0xfc,0x55,0xd7,0x9c,0x0a +.byte 0x75,0xaa,0xb0,0x46,0x90,0x55,0x2b,0x46,0xab,0x98,0x9d,0xab,0x0e,0x12,0x03,0x58,0xf1,0x4a,0x68,0x59,0x74,0xc9,0x37,0x6d,0x6f,0xe6,0xd3,0x73,0xf1,0xa3,0xdd,0xbe,0x85,0xca,0x74,0xc6,0xb6,0x51,0x6f,0x83,0x6f,0xa1,0x80,0x00,0x00,0x78,0x0a,0xa7,0xff,0xa7,0xe2,0x2e,0x5f,0x4f,0x31,0xbb,0x1b,0x99,0x21,0x33,0x59,0x6e,0x03,0x38 +.byte 0x10,0xd9,0x98,0xf2,0x0c,0xad,0x08,0x6b,0x00,0x49,0xb5,0x5e,0x11,0x60,0x70,0x49,0xff,0x79,0xac,0xba,0x30,0x3d,0x69,0x9f,0xaf,0xfb,0xd7,0xeb,0xe2,0xcd,0x0d,0x97,0xb9,0x94,0xc8,0x6e,0x06,0x3b,0x64,0x80,0x71,0x8f,0x81,0xb0,0x58,0xe0,0xc7,0xbd,0x27,0x6a,0xd4,0xb7,0xd9,0x6c,0xc1,0x44,0x38,0xe1,0x36,0xbc,0x0a,0x33,0x26,0x01 +.byte 0x25,0x90,0xbc,0x0a,0xc2,0xa3,0xbb,0xfc,0xeb,0x0b,0x1a,0x38,0x98,0x26,0x93,0xf5,0x2d,0x29,0x41,0x83,0x3b,0xba,0x40,0x46,0xf3,0xf6,0xfd,0x53,0xb9,0x7a,0x60,0x01,0x8a,0x8d,0xb4,0x57,0xd8,0xf3,0x36,0x72,0x22,0x2f,0x59,0xd3,0x7f,0x25,0xf2,0x05,0x61,0xfa,0x18,0x28,0xac,0xd5,0x14,0x00,0xaf,0x8b,0x7c,0x39,0xb5,0xa2,0xcb,0x1e +.byte 0x62,0x14,0xcb,0x10,0x76,0x17,0x23,0x2c,0xc8,0x25,0xac,0x37,0x9e,0x83,0x81,0x83,0xfe,0x2e,0x2c,0xd2,0x3f,0xf8,0x58,0x2b,0xf1,0x7f,0x4f,0xe1,0x17,0xc7,0xf7,0xad,0x57,0x67,0xc2,0x57,0x77,0x2e,0xfb,0xf2,0xce,0xa9,0x74,0x81,0x47,0xf8,0x5a,0x88,0x76,0xb1,0x43,0x75,0xc8,0xc4,0xc8,0x60,0x1e,0xd7,0xd1,0x1c,0xce,0x89,0x82,0xc6 +.byte 0x77,0x8d,0x87,0xe8,0xd0,0x5b,0x0c,0xf0,0x44,0x48,0x8d,0xee,0x55,0xc6,0xe4,0x2c,0x2c,0x41,0x75,0x5d,0x5a,0xd2,0xa3,0x1d,0x32,0x85,0x08,0xcf,0x03,0x3a,0x3c,0xfe,0x65,0x75,0xef,0xd2,0xa6,0x22,0x16,0x66,0x39,0x30,0x05,0xe3,0x57,0xab,0x71,0x6d,0x28,0xd5,0x2f,0xc6,0xa8,0x25,0x46,0x14,0xfd,0x7e,0xa2,0x67,0x7e,0x20,0x91,0xc2 +.byte 0x2b,0x03,0xdd,0xac,0xaa,0x1a,0xb5,0x2a,0x04,0xd6,0x15,0x9d,0x3f,0x54,0x24,0x7c,0x75,0xab,0x77,0xd9,0x6c,0x85,0xa2,0xf9,0x33,0xeb,0xeb,0xc0,0x27,0xcd,0x9d,0x58,0xae,0xa3,0x34,0x10,0xae,0x85,0x7d,0x4c,0x15,0x4c,0x90,0x46,0xe0,0x5b,0xec,0xa7,0xb2,0x68,0x85,0x01,0xed,0xf9,0x4a,0x85,0xe3,0xb6,0xea,0xe2,0x53,0xc0,0x32,0x83 +.byte 0x73,0x05,0x77,0xac,0xb5,0x96,0xaa,0xf0,0x9c,0x2c,0xa4,0xd2,0xd4,0xbf,0x74,0x2f,0x39,0x47,0x22,0x99,0x50,0x06,0x5f,0xcb,0x99,0xc5,0xc9,0x2e,0x70,0xd6,0x68,0x6a,0xc4,0x73,0x41,0xcb,0x8b,0xfd,0x23,0x98,0x11,0x59,0xad,0x20,0x8a,0x0d,0xaf,0xaa,0xd0,0xe2,0xeb,0x32,0x8b,0x6f,0x0e,0x43,0x12,0xe3,0x27,0x8f,0xf6,0xa4,0x76,0x0b +.byte 0xfb,0x22,0xad,0xda,0x1c,0x0a,0x3e,0x90,0xc0,0x7d,0xf3,0x09,0xbc,0x17,0x33,0xef,0xf1,0xf2,0x84,0x80,0x2a,0x0b,0x82,0xd7,0x95,0xc7,0xd2,0x08,0x4a,0xf4,0xf5,0x6d,0x09,0x06,0x8e,0xe4,0x74,0x63,0x8f,0x09,0xca,0xe2,0xd9,0x0e,0x1e,0x03,0x20,0x1b,0x4c,0xfb,0x1d,0x5a,0x2e,0x28,0xeb,0x84,0x82,0x6f,0x97,0x6f,0xcd,0x7a,0xc3,0xa7 +.byte 0x79,0x73,0x66,0x0c,0x94,0xd5,0xf4,0x8f,0x2c,0x73,0x1f,0x24,0xbc,0x17,0xee,0xd5,0xb0,0xa6,0xb8,0x04,0x6d,0x6a,0xd0,0x61,0xe3,0x1a,0x49,0x97,0x94,0xc5,0x8e,0xbc,0xac,0x5b,0x0b,0x0a,0xc5,0x74,0x06,0x89,0xee,0xc2,0xb7,0x5f,0x1b,0xa1,0x6b,0x1a,0xff,0xed,0xda,0x90,0x91,0xc1,0x0d,0x6a,0x06,0xd6,0xcb,0x02,0x71,0x17,0x95,0x7d +.byte 0xc6,0x3b,0x7e,0x6b,0xc8,0x73,0x03,0x0d,0x6b,0x8f,0x73,0x56,0x59,0x2e,0x09,0x23,0x4e,0xda,0xfc,0x4e,0xfc,0xa4,0x42,0x15,0x2e,0x10,0x6a,0x97,0x48,0x3c,0xb4,0xa4,0x0c,0x64,0x21,0xc3,0xeb,0x6c,0xac,0x27,0x4f,0x43,0x94,0x91,0x78,0xdc,0xfd,0xad,0x2b,0xa7,0x43,0x42,0xb0,0x51,0xdd,0x63,0xcc,0xcd,0xb7,0x15,0xfa,0x13,0x8d,0xc7 +.byte 0x55,0x3a,0x74,0x17,0x23,0x36,0x3e,0x23,0xe1,0x42,0x90,0xe1,0xb7,0xc7,0xda,0xb7,0x57,0xeb,0xc3,0xfb,0x62,0x58,0xbf,0x31,0x2a,0xfb,0xc7,0xdb,0x3d,0xfc,0x87,0x32,0xb1,0x3e,0xe5,0x3d,0x94,0x3d,0x86,0x32,0x61,0xfe,0x19,0xd2,0x32,0x31,0x8b,0x43,0xdb,0xab,0xa4,0xe5,0x34,0xc8,0x30,0xae,0x8c,0x02,0x53,0x99,0x35,0xb4,0x56,0x38 +.byte 0x37,0xcf,0xff,0xb0,0x05,0x21,0x12,0x65,0xc4,0xb3,0x9c,0x83,0x95,0x12,0xd3,0x03,0x7a,0x80,0x97,0x5b,0x67,0x33,0x27,0xfc,0x43,0xf2,0xf7,0xaa,0x60,0xb6,0xfc,0x55,0x44,0x30,0xa3,0x4a,0xa3,0x60,0x31,0xf7,0x01,0xfa,0xb0,0x8d,0x82,0x29,0xa7,0x03,0xb7,0x7e,0x3f,0xe5,0x66,0x26,0xb7,0x51,0xcf,0x8d,0xdd,0x6f,0x83,0x39,0xfc,0x9b +.byte 0xa5,0x3d,0xb6,0x41,0x89,0x54,0xc3,0xb2,0xf0,0x24,0x64,0xcb,0x53,0xfd,0x0a,0x91,0x6c,0x6f,0x28,0xfe,0xc1,0xe9,0x17,0x2e,0x65,0x55,0x2e,0xf2,0x48,0x52,0xb1,0x69,0xf0,0xdd,0x42,0xd5,0xdf,0x7c,0x36,0x75,0xdb,0x5b,0x3d,0xa9,0x6d,0xa4,0xeb,0x47,0x4f,0x2b,0x5c,0xd0,0x30,0xee,0xa7,0x74,0x6a,0x64,0x8a,0xbc,0x9b,0xe5,0x82,0x56 +.byte 0x76,0xe4,0x3f,0xf5,0x05,0x59,0x19,0x1e,0x80,0x47,0xf1,0x77,0xac,0x32,0x43,0x80,0x0a,0x1b,0x28,0xb6,0xf4,0xe8,0x7c,0x2f,0xeb,0xa8,0x4b,0x6a,0x59,0xb5,0xf8,0x77,0x68,0xd4,0x86,0x6c,0x87,0xdc,0xc4,0x00,0x4f,0xce,0xdb,0xf6,0x34,0xc3,0x74,0x02,0x08,0xdb,0x0d,0x34,0x8d,0xea,0x49,0x4a,0x30,0x5f,0x1b,0xcd,0xa6,0x3a,0x34,0x94 +.byte 0x5f,0x32,0x6a,0x62,0x96,0x4b,0x51,0x89,0x30,0xc9,0x90,0xdf,0x77,0x73,0x0e,0x3c,0x5c,0xbd,0x5c,0xee,0xd9,0x77,0xea,0x23,0x42,0xaa,0xa5,0x6b,0xf9,0x8c,0xc4,0x70,0x68,0xdd,0x0b,0x65,0xa3,0xc7,0xe4,0x7b,0x0a,0x89,0x85,0x25,0x7d,0x84,0x99,0x39,0xe6,0xb8,0xbe,0x7f,0x31,0x0f,0x84,0x0c,0x98,0x72,0xab,0x4c,0x44,0xb0,0xa4,0x83 +.byte 0x90,0xbb,0x93,0x73,0x07,0x07,0xba,0x63,0x5b,0x61,0x70,0xe1,0x84,0xae,0xaa,0xd6,0xa3,0x5a,0x54,0xd1,0xea,0xc7,0x2c,0x7b,0x67,0x4b,0x8a,0x7f,0x66,0x28,0x8d,0x22,0xec,0x82,0x64,0x69,0x63,0xf0,0x53,0x2d,0x10,0x9c,0x9c,0x34,0x4f,0xc6,0x96,0x40,0xdb,0xce,0x0e,0xf7,0x3a,0x8a,0xee,0x3f,0x32,0x5f,0x2b,0x0c,0x4a,0xbc,0x63,0xfb +.byte 0x18,0xf6,0x26,0x57,0xc9,0x13,0x13,0xb7,0xe0,0xcc,0x3e,0x4e,0x73,0xfa,0xe2,0x54,0xc1,0x67,0xfe,0xe2,0xec,0xfd,0xaf,0xf9,0x96,0x99,0x9f,0xe9,0xe2,0xd0,0x94,0x39,0x33,0xc9,0xca,0x35,0x27,0xad,0x58,0x46,0x98,0x64,0x17,0x5f,0xe9,0xce,0x4b,0xc8,0xab,0x0d,0xd2,0x88,0xec,0xbb,0x5c,0xba,0xc1,0x30,0x4c,0xd4,0x99,0x0d,0x07,0x95 +.byte 0x0a,0xa5,0xeb,0xa6,0x10,0x4b,0x4d,0x77,0x14,0x76,0x88,0x43,0x7f,0x6b,0x5d,0x9b,0x87,0x1d,0x6b,0x5d,0xb9,0x04,0xa9,0xc7,0x28,0x18,0x70,0xa1,0x99,0xbc,0x99,0xf5,0xf1,0x71,0xa9,0x3a,0xb6,0xe5,0x98,0x98,0x8f,0x7a,0x6c,0xda,0x1a,0x63,0x0e,0xf1,0xe8,0x10,0xa3,0x7c,0x64,0x7e,0xde,0x2a,0x59,0x1b,0x04,0xca,0x69,0x8e,0xba,0x2f +.byte 0x56,0xe1,0xa7,0xab,0x4f,0xe4,0x9d,0x49,0x33,0x9e,0x4e,0x5b,0xe1,0x58,0xc4,0x3f,0x99,0x5a,0x69,0x00,0xe5,0x5f,0x85,0xcb,0x62,0x80,0x5e,0x3d,0x88,0x0a,0x32,0x42,0xc1,0xf9,0x6a,0xa0,0xeb,0x65,0x2f,0x17,0x62,0x25,0x96,0x50,0xa2,0x6e,0xd6,0xdf,0x09,0xb7,0x1e,0x68,0xb2,0x10,0x2b,0xf3,0x9e,0xb2,0x67,0x75,0x9b,0xe3,0x76,0xfe +.byte 0x95,0xbe,0x83,0xcb,0xba,0x77,0x5b,0x2d,0x5f,0xdd,0x94,0xbb,0x0e,0x5d,0x83,0xa2,0xe7,0x48,0x4c,0x84,0x86,0x41,0x47,0x4b,0x96,0x24,0x89,0xa8,0x20,0x04,0xa5,0xef,0x8e,0xb6,0xeb,0xcd,0x3c,0x77,0xc5,0x65,0x5c,0xff,0xa6,0x0d,0x2b,0x58,0x21,0x5a,0x11,0xe2,0x24,0x64,0x1c,0xd6,0x18,0x9a,0xac,0x3f,0x42,0x0e,0xeb,0x32,0x3e,0xed +.byte 0xce,0x61,0xc9,0xe4,0xe7,0xd3,0x3f,0x53,0xa4,0x80,0x2b,0x1c,0xc0,0x99,0x63,0x52,0x93,0x5e,0xdc,0x78,0xe2,0x35,0x9e,0xb2,0xb4,0x1d,0x09,0xd1,0x5c,0x1c,0x4e,0xdb,0x3a,0x5d,0x8c,0x94,0x7d,0xfe,0x63,0xf2,0xa3,0xe9,0x61,0x73,0x78,0xc1,0xd9,0x17,0x5e,0x9a,0x73,0x58,0xc3,0xe7,0xa0,0x1f,0x2a,0x62,0x15,0xf8,0xdb,0xbb,0x38,0x80 +.byte 0x57,0xd3,0x1f,0x4c,0x4a,0x20,0x30,0xa9,0x7a,0x78,0x61,0xd9,0x90,0xb7,0x4f,0xd6,0x46,0x72,0xe7,0x41,0xb2,0xbb,0xfb,0x50,0xfe,0xe1,0xba,0x3e,0x73,0x2f,0x81,0x6d,0x2b,0x0b,0x90,0xbd,0x8a,0x3b,0x23,0x88,0xa2,0x7d,0x62,0x87,0x96,0xc9,0xcc,0x66,0x28,0x89,0xa7,0x29,0x41,0xd2,0xc5,0x5b,0xdb,0xc4,0x0c,0xbb,0x19,0x4e,0xd5,0x12 +.byte 0x53,0x48,0x5c,0xf2,0x9b,0x62,0xd0,0xa3,0x77,0x40,0x85,0x12,0x2b,0x2d,0x52,0x1b,0x31,0xbd,0xe9,0x1c,0xd4,0x87,0xa4,0xd7,0xc9,0x14,0xb7,0x39,0x66,0x8c,0xfe,0x3e,0x83,0x00,0x01,0xae,0x44,0x2d,0x7d,0xa1,0xda,0x66,0xb0,0x66,0xcb,0x62,0x55,0x9f,0x92,0x80,0x4e,0x8d,0x7f,0x70,0x95,0xc2,0xf2,0x1b,0xe9,0x35,0xf8,0x42,0x04,0x65 +.byte 0xf2,0x36,0x4c,0x96,0x30,0xd3,0x47,0x9d,0xb7,0x2b,0x76,0xac,0x75,0xb5,0xb8,0xf1,0x7d,0xa2,0x36,0xef,0x9d,0xa7,0x60,0x51,0x8d,0xcf,0x00,0x3d,0xdb,0xcc,0xe9,0xe2,0xc4,0x7b,0x3a,0xeb,0x2b,0xc3,0xd8,0x0b,0xb0,0x58,0x41,0xa0,0x47,0xab,0x07,0xf5,0x7c,0x9e,0x0b,0x7a,0x16,0x8f,0xb4,0xca,0x09,0xed,0x84,0xa1,0xfa,0xdc,0x7c,0x3c +.byte 0xdd,0x2f,0xb0,0x2d,0xeb,0x93,0x28,0xf5,0x1e,0x0c,0x1a,0x0c,0x35,0x27,0x40,0xf2,0x22,0x66,0x2d,0x82,0xf2,0x94,0x03,0xa5,0x4b,0x84,0x92,0x1d,0x98,0xd5,0xd9,0x09,0x6a,0xfd,0x65,0xe5,0xa1,0x0e,0xe2,0xd9,0xb6,0xd1,0xba,0xbf,0xc7,0x42,0x22,0x39,0x83,0xbf,0x37,0xf6,0x80,0xc2,0xea,0xdf,0xb9,0x33,0xa0,0xaf,0xd7,0xe3,0x70,0x9a +.byte 0x5c,0xf8,0x1a,0x47,0x2b,0xb5,0xdd,0x15,0xe3,0x08,0xc8,0x37,0xe3,0xc2,0x25,0x87,0x0e,0x3c,0xc5,0xae,0x61,0xa4,0x4a,0x56,0x50,0x08,0x58,0x68,0xa3,0x4a,0x28,0x08,0xef,0x92,0xd5,0x13,0x50,0x09,0x76,0x34,0x47,0xae,0xa8,0x7f,0xa5,0x2b,0x13,0xb7,0x5a,0x96,0x65,0x62,0xf2,0xaa,0xb4,0x4b,0x2a,0xad,0xea,0x2c,0x0d,0x1e,0x97,0x82 +.byte 0xe4,0x6f,0xfe,0xf4,0x88,0x14,0x7b,0xba,0x45,0xbe,0x61,0x56,0xd2,0x37,0x1b,0x65,0xb8,0x0b,0x77,0xcb,0x3c,0xfe,0x9f,0xe3,0x39,0xc5,0xfb,0x2a,0x18,0x9b,0x60,0x99,0xd5,0x6f,0x52,0xfe,0xd8,0x04,0x88,0x1c,0x9a,0x50,0xe5,0x3b,0x33,0x3f,0xca,0xc5,0x5b,0x9c,0x5f,0x35,0x13,0x65,0xa6,0x21,0x78,0x19,0xeb,0xff,0x35,0x70,0x81,0xaf +.byte 0x19,0x23,0x61,0xd6,0xeb,0xff,0xa6,0x9e,0x5d,0x3f,0x7f,0x89,0x2e,0x22,0xa4,0x0b,0x9c,0x4f,0xa9,0xff,0xbb,0x23,0x29,0xa1,0xf4,0x8a,0xb7,0x4b,0xfb,0xbf,0xeb,0x0a,0x47,0x87,0x78,0x2b,0x20,0x38,0x82,0xab,0x7e,0x2c,0xdc,0x08,0x2b,0xb4,0xae,0xd8,0x64,0x44,0x1a,0xdf,0x21,0x62,0x27,0xf2,0x61,0x63,0x37,0xad,0xd4,0x06,0x4e,0xae +.byte 0xba,0xeb,0x08,0xfa,0xe5,0xad,0x5d,0xcf,0xce,0x38,0xe5,0xca,0x74,0x83,0x42,0x4b,0xe8,0x8f,0xfb,0xff,0x83,0x4d,0x27,0x88,0x43,0x62,0xdd,0x80,0xa2,0x06,0x98,0x48,0x58,0x6f,0x54,0x16,0x6f,0xbf,0x81,0x36,0xc8,0xf3,0xea,0x4b,0xf7,0x5a,0x7b,0xb7,0xf4,0xa4,0x5e,0x22,0x52,0xe7,0x9e,0xb1,0xb6,0x7a,0xa8,0x22,0xee,0x68,0x82,0x8f +.byte 0xe4,0xcb,0xad,0x71,0xef,0x53,0xf2,0x7d,0xed,0x91,0x9e,0xf6,0x90,0x9e,0x54,0x19,0x30,0xaf,0x4a,0x17,0xc0,0x6a,0x9c,0x49,0x12,0x8b,0x6f,0xc7,0x47,0x1e,0xa2,0x64,0x28,0x1f,0x0c,0xd3,0x3e,0x59,0x66,0x8c,0x2e,0x11,0x52,0x6c,0x69,0x66,0x10,0xfb,0x27,0xe6,0x1c,0xae,0x6f,0x44,0x87,0x86,0x0d,0x3e,0xd3,0xa0,0x80,0xef,0x30,0xb9 +.byte 0xb8,0xd7,0x47,0x84,0x68,0x2b,0xf2,0x32,0x7b,0x89,0x93,0xd2,0x83,0x56,0x35,0xc3,0xbf,0x5c,0x24,0xec,0xad,0x2d,0xa4,0x49,0x63,0x89,0xc6,0xf9,0x24,0x51,0x1c,0x9b,0xd1,0xcb,0x30,0x82,0xda,0xb3,0xa7,0xe1,0x4d,0x96,0xd0,0x44,0x44,0x1d,0x4e,0xd7,0x7d,0x7a,0x51,0x2e,0x2f,0xc4,0x9f,0xdb,0x06,0x53,0xfc,0x51,0x56,0xe5,0xb9,0x6b +.byte 0x4a,0x2c,0x3e,0x62,0xc5,0x9c,0x42,0xe3,0xaf,0x3a,0x0f,0x0e,0x74,0x29,0x66,0x70,0x75,0x2a,0x06,0xd4,0x0f,0x0c,0xfd,0xea,0xcc,0x39,0xd0,0xa7,0x47,0x75,0x92,0x44,0x09,0xa2,0x3c,0x4e,0xad,0xaa,0xc4,0xc6,0xf9,0x35,0x82,0x23,0x25,0x43,0x94,0x26,0x14,0xde,0xf1,0xb9,0xb8,0xe0,0x75,0xe0,0x48,0x70,0x8a,0xc6,0x3c,0x72,0x98,0x72 +.byte 0x8b,0x15,0x58,0x17,0x73,0x29,0x67,0x21,0x56,0xc4,0x25,0x17,0x68,0xbe,0xd7,0x36,0x05,0x4b,0x58,0xa2,0x1b,0x64,0xe5,0x11,0x96,0x5a,0x3b,0xa6,0x90,0xb6,0x2d,0x7e,0x55,0xbb,0x31,0x93,0xe7,0xcc,0x2e,0x74,0xb6,0x9b,0x4d,0x04,0xc5,0x45,0x9b,0x0b,0x26,0xef,0x61,0x23,0x3d,0x7e,0xee,0x01,0x57,0xfa,0x77,0x12,0x47,0x64,0xac,0x8f +.byte 0x25,0xbe,0x8e,0x2e,0x68,0x11,0x95,0xf0,0x1a,0xd2,0x3d,0x66,0xc1,0xdb,0x97,0x9e,0xbb,0xba,0xc1,0x66,0xa4,0xb5,0x71,0x01,0xee,0xf5,0xbb,0x1e,0x9f,0x41,0xfc,0x40,0x74,0x26,0xf7,0xc6,0x2c,0x9c,0x1c,0x59,0xce,0xcf,0x18,0x17,0x81,0x5d,0xd4,0xe3,0xd8,0x46,0x62,0x9e,0x97,0xb1,0xca,0xac,0x01,0x3e,0xf8,0x96,0xa2,0xee,0xe0,0xf8 +.byte 0xf3,0x2d,0xe9,0xd2,0x1f,0x9f,0x41,0xbb,0x2f,0xe5,0x64,0x6d,0x5b,0xe7,0x47,0x0e,0x83,0x7b,0x08,0x5e,0x29,0x35,0x2f,0x75,0x31,0x44,0x4c,0xb7,0x61,0xa4,0x03,0x2e,0x15,0x94,0x7a,0xa0,0x46,0x31,0x7b,0x43,0xd9,0x14,0xa3,0x34,0x0c,0x83,0x93,0x75,0x8e,0x3a,0x1c,0xc3,0xe1,0x36,0x18,0x96,0x7a,0xfb,0x77,0xad,0xbb,0xe9,0x0d,0x4b +.byte 0x21,0x04,0x2e,0xdd,0x7a,0x63,0xc9,0x60,0xb1,0x9b,0xad,0xde,0x1f,0x65,0x8a,0x58,0x18,0x84,0x95,0xa9,0xac,0x3a,0xac,0xcb,0xb7,0xa9,0xeb,0x0c,0x7c,0x3a,0x98,0x9a,0x3f,0x56,0x23,0x51,0x58,0x59,0x4e,0xf5,0x57,0x60,0xe6,0x9d,0xf8,0xf7,0xed,0x9d,0x81,0x14,0x68,0xbe,0xaf,0x19,0xe5,0xb5,0x9b,0x5f,0xe4,0x51,0x44,0x4b,0x23,0x42 +.byte 0xdd,0x92,0x1a,0xe5,0x7e,0xef,0x77,0xbe,0x88,0x77,0x1e,0x8a,0xbd,0x2a,0x77,0xb1,0x0d,0x1b,0xe3,0x8a,0x7f,0x15,0x71,0x93,0xc9,0x5f,0x78,0x2d,0x77,0x9b,0x0c,0xad,0x76,0x3c,0x6b,0xe2,0x15,0x8e,0xe1,0x5e,0x1d,0x90,0xa5,0xd6,0xc7,0x55,0x5d,0x52,0xf7,0xcc,0x82,0x9b,0xdc,0x1d,0x80,0xa4,0xc7,0xbe,0x7c,0x4f,0xda,0x81,0x91,0x78 +.byte 0x88,0x0e,0x31,0xde,0x87,0x4c,0xdc,0x84,0x9a,0x65,0x89,0xfa,0x22,0x3e,0xde,0x3b,0x7f,0x7f,0x9b,0x3f,0x3e,0xda,0x13,0x31,0x59,0x7b,0x08,0x48,0x39,0x37,0xfd,0x1a,0x4f,0xa3,0x12,0xba,0xe5,0xd6,0xfa,0xa3,0x59,0x0b,0x3b,0x7d,0xde,0xc0,0x51,0xce,0x92,0x6b,0x3d,0x4b,0xd2,0xa4,0x68,0xc2,0x32,0x2d,0x01,0xbd,0x66,0x98,0x8f,0xa0 +.byte 0x86,0xfb,0x08,0x36,0xa9,0xd4,0x3b,0x7b,0x01,0x2d,0xaa,0x8c,0x64,0x19,0xa6,0x62,0x24,0x92,0x5e,0xc5,0x02,0x17,0x8e,0xf0,0x88,0xe9,0xd1,0x8b,0x69,0xda,0xed,0x9c,0x60,0x32,0xab,0xc0,0xbc,0x84,0x64,0x6e,0x32,0xb2,0xcd,0x24,0xf6,0xb2,0x9d,0xf5,0xf5,0x71,0xe2,0x01,0xbc,0x77,0x6a,0x5b,0x26,0x56,0xf7,0x04,0x84,0xff,0x7c,0xa4 +.byte 0xe8,0xa8,0x82,0x6c,0x40,0x24,0x93,0x3c,0x6e,0x7d,0x0d,0x22,0xd0,0xe4,0xef,0xc4,0x4e,0x26,0x66,0x61,0x75,0xe9,0x06,0x69,0x06,0xfd,0x97,0x68,0x96,0x67,0xec,0x96,0x09,0x73,0xe4,0x0a,0x3e,0xaa,0xb8,0x25,0x77,0x00,0x91,0x7a,0x2e,0xc8,0x81,0x75,0x78,0xb7,0xa5,0x27,0x55,0xf2,0xcf,0x9a,0xab,0xab,0x51,0x0a,0x65,0x47,0xbf,0x10 +.byte 0xd2,0x19,0x78,0x6b,0x35,0xf4,0xef,0x12,0x2b,0x5f,0x0c,0x28,0x7c,0xe8,0x64,0x55,0x2f,0x26,0x85,0x91,0x7a,0x9d,0x48,0x76,0x12,0x14,0x2d,0x4a,0x8a,0xd6,0xfa,0x7b,0xf9,0xc7,0x24,0x45,0xf6,0xbd,0x47,0xab,0xc6,0x4b,0x9e,0x39,0x77,0x57,0x04,0xa8,0x4d,0x43,0x99,0x5c,0xb1,0x3d,0xc2,0x4e,0xc5,0x17,0x66,0xc4,0xb6,0xdd,0x92,0x80 +.byte 0x85,0x3b,0x07,0x63,0x16,0x5f,0x67,0x76,0x9b,0xb5,0x8e,0xca,0x97,0xbb,0xf4,0x20,0xd0,0x4d,0x7b,0xd0,0xa3,0x74,0x6f,0x8a,0x68,0xc7,0x31,0x78,0x1b,0x72,0x45,0xa4,0xc4,0xf8,0xf8,0x26,0xa8,0x4d,0x08,0x2f,0x7b,0x3d,0xa0,0x2a,0xb5,0x65,0x27,0xc2,0x36,0x13,0x2d,0x8d,0x83,0xeb,0xf4,0x08,0x26,0x41,0x8b,0x32,0xf3,0x09,0x70,0x70 +.byte 0x5d,0x8a,0xcc,0xb8,0xe9,0xf7,0x08,0xdf,0x5f,0x4a,0xb8,0x8a,0xb7,0x1b,0xad,0xe2,0xc3,0x39,0x59,0xe0,0x7f,0xd0,0x66,0x7b,0x99,0x5a,0xde,0x52,0xe2,0x1f,0x47,0xc2,0x63,0x74,0x7a,0xa5,0x88,0xc3,0x24,0x70,0x4a,0x7d,0xdd,0xa4,0xe6,0xf8,0xfd,0x5c,0xfa,0x8c,0x4c,0x0f,0x52,0x95,0xf3,0x2c,0x76,0x47,0x7a,0xe8,0xdb,0xe0,0x9b,0x49 +.byte 0x88,0x5b,0x87,0x5a,0xd1,0x07,0x24,0x06,0x83,0x3b,0x25,0x23,0xe7,0xaa,0x79,0xef,0x74,0x02,0x12,0xfe,0x47,0x5c,0x77,0x73,0xf7,0x2e,0x4b,0x58,0x3b,0x60,0x7b,0x91,0x2f,0x0d,0xb4,0x6d,0x00,0x80,0x19,0xaa,0x88,0xbc,0xb2,0x7b,0xd9,0xb7,0xdd,0x32,0x47,0x62,0xf5,0x0f,0x46,0x95,0x4c,0x6c,0x01,0x67,0xfb,0xe4,0x2b,0xac,0x95,0x84 +.byte 0x25,0x0a,0xe5,0x4c,0x2d,0x4a,0x6e,0x77,0xfd,0xeb,0xe1,0x53,0xc9,0x2e,0x70,0x01,0x32,0x05,0x6d,0xc5,0xc9,0x5d,0x90,0xca,0x56,0xd1,0xd8,0x40,0x2a,0x51,0x4d,0x95,0xc3,0x57,0x8b,0xdd,0x62,0x9c,0x69,0xd1,0x03,0x89,0x95,0x38,0x2c,0xc1,0x6d,0x41,0xf2,0xc3,0xa2,0x9c,0x43,0xea,0xf1,0x02,0x00,0x56,0x46,0xbb,0x87,0x35,0x40,0x0e +.byte 0x18,0x51,0x29,0x39,0xbb,0x6d,0x15,0xf2,0xcd,0x54,0x23,0x95,0x69,0xdc,0x0a,0xb2,0x26,0xd9,0x25,0xe1,0xf1,0x07,0x7b,0x5e,0xc3,0x30,0x68,0x5f,0x2a,0xce,0x91,0x92,0x03,0x0c,0x62,0x11,0x43,0x80,0xe5,0x12,0xec,0xe3,0x4f,0x90,0xfe,0x38,0x6e,0xe9,0x7e,0x94,0x83,0x26,0x59,0x3f,0x3f,0x81,0xc6,0x94,0x98,0x09,0x80,0xff,0x01,0x44 +.byte 0xff,0x77,0x6a,0x4c,0x76,0x91,0xd9,0x12,0x59,0x9a,0x00,0x7c,0x87,0x06,0x17,0xf7,0x12,0xc7,0xee,0x04,0xd5,0x8d,0x68,0xc5,0x8d,0x80,0x10,0xcc,0x14,0x45,0xe8,0xd7,0x43,0x10,0x01,0x9e,0x61,0xc2,0xc0,0x66,0xfe,0xcf,0x5f,0x9f,0xcb,0xa3,0xf8,0xc7,0x07,0x41,0xe3,0xf2,0xda,0x6e,0x01,0x76,0xc6,0x49,0x49,0x01,0xc7,0xcf,0x6a,0x20 +.byte 0x71,0xc5,0xf0,0xb1,0xa0,0xc9,0xed,0xec,0x66,0x71,0x93,0xf5,0xc0,0x27,0x42,0xed,0xd5,0x6f,0x20,0xe1,0x86,0x3e,0xd0,0x5d,0x94,0x17,0x43,0xb4,0x98,0x0d,0x8a,0x31,0x6c,0x59,0xa9,0x0b,0xb3,0xa4,0x0b,0x46,0x0b,0xa8,0x79,0x62,0x3a,0x3d,0xbf,0xef,0x94,0xd3,0x31,0xf2,0xa1,0x55,0xe8,0x92,0x44,0x37,0x62,0x82,0x1b,0x60,0x87,0x67 +.byte 0x85,0x78,0xd5,0x84,0x73,0xa4,0xea,0x56,0x08,0x78,0x68,0x7f,0xfb,0x15,0x20,0x64,0xeb,0x6c,0xf7,0x5e,0xc0,0x79,0x83,0x59,0x7b,0xed,0x2d,0xa9,0x37,0x46,0xf3,0x62,0xb1,0xa1,0x2b,0x48,0x58,0xd9,0x0c,0x03,0xf7,0xf3,0x47,0xeb,0xd7,0x03,0x9b,0x85,0xd3,0xd7,0xd7,0x7e,0xfb,0x1a,0x25,0x83,0xda,0x06,0xa0,0x04,0x0d,0x6b,0x90,0x29 +.byte 0x2a,0xfc,0xcd,0x96,0xe9,0x17,0x4f,0xdd,0x2c,0x90,0xdf,0xf1,0xe3,0x08,0x0a,0xb8,0x0c,0x59,0x2a,0x83,0x62,0x94,0x00,0xd3,0x80,0x1a,0x31,0xd7,0x17,0x70,0xc7,0xa2,0x20,0x17,0x65,0x88,0xae,0x11,0x25,0xc9,0xba,0x76,0xa7,0x61,0x60,0xd1,0x59,0x50,0x22,0xdd,0xaa,0xcf,0x9d,0xc1,0x36,0x7d,0xf9,0x7b,0x69,0xc0,0x98,0xba,0x40,0xd5 +.byte 0xd6,0x46,0x93,0x92,0x7d,0x37,0x3f,0x3a,0x04,0x9a,0x84,0xaf,0x8e,0x61,0x04,0x26,0x54,0x33,0x84,0xc0,0xac,0x21,0x51,0xd7,0x9a,0x93,0x6e,0xf2,0x09,0x87,0xc5,0x35,0xa8,0x96,0xb0,0x64,0x90,0x35,0x52,0xed,0x0e,0xbc,0xdb,0xa6,0x06,0x3e,0xe7,0xea,0x57,0x4b,0xd7,0xc5,0x1c,0x76,0x3d,0x0d,0xc3,0x1f,0x8e,0x4f,0x12,0xdb,0x3a,0x21 +.byte 0x2a,0x69,0xc2,0x94,0xda,0x4c,0x91,0xcc,0xa8,0x36,0x89,0xd7,0x78,0xa8,0x74,0x79,0x63,0x92,0xeb,0x39,0x3b,0x84,0x8c,0xe5,0xc6,0x26,0xf0,0xef,0xcc,0xc1,0x72,0x4b,0x8e,0xcd,0xe4,0xd9,0x00,0x80,0xbc,0xdf,0xe2,0x61,0x53,0x04,0x81,0xb0,0x13,0xc5,0x6c,0x77,0x74,0xa3,0x0c,0x5b,0xef,0xef,0xea,0xc7,0x5b,0xeb,0xbf,0xee,0x54,0xd7 +.byte 0x7a,0x69,0x6e,0x39,0xc2,0xed,0x08,0x44,0x82,0x08,0x16,0x8b,0xf1,0x74,0x5f,0xeb,0x60,0xd5,0x46,0x63,0x80,0x39,0xe9,0x91,0x0a,0x17,0x8b,0xd4,0x09,0xdc,0xa6,0xab,0x6a,0xbc,0xf8,0xe9,0x09,0x19,0xc1,0x83,0x9f,0xdf,0xad,0x6c,0x31,0x94,0xb9,0xc5,0x77,0x83,0xd1,0xd8,0x76,0xeb,0x12,0x3c,0x00,0x31,0xea,0xac,0x97,0x39,0x16,0xd5 +.byte 0x81,0xfa,0x6d,0x10,0x5b,0x3e,0x20,0xe1,0x88,0x5c,0x4b,0xf3,0x04,0xd4,0xc3,0xb9,0xec,0xe5,0xb0,0x13,0xf5,0x09,0x5c,0xe8,0x27,0xe2,0xde,0x9b,0xac,0x2e,0xf2,0xe5,0x2c,0x33,0x4b,0x4f,0xec,0xc7,0x08,0xf9,0xc2,0xd3,0x1b,0x4d,0x81,0x69,0x14,0xa1,0xc5,0x0f,0xb2,0x57,0x8b,0xcc,0xca,0x3b,0xc9,0x9c,0x1f,0xee,0x06,0x4d,0xc7,0x62 +.byte 0xcb,0x8f,0x49,0x81,0xfb,0xa5,0x68,0x81,0x36,0x38,0x33,0x6b,0x9e,0x58,0xd4,0x24,0x67,0xf1,0x30,0xd6,0x08,0x61,0x5a,0x7f,0x2e,0x4e,0xf1,0xd6,0x64,0x75,0x72,0xb0,0xdf,0xcd,0xae,0x04,0x41,0xbd,0x04,0x2c,0x96,0x36,0x34,0x32,0xec,0xbd,0xd0,0xbf,0x8e,0xe8,0x47,0xe3,0x22,0xdd,0x79,0x53,0xcc,0x6a,0x25,0xf1,0x5e,0x63,0x09,0x98 +.byte 0xc5,0x6d,0x0a,0xe3,0x30,0xd6,0x52,0x70,0x21,0xb2,0xef,0x15,0x66,0x4a,0x2d,0x2b,0x5c,0xcb,0x39,0x1b,0x91,0x10,0xa6,0x02,0x22,0xd0,0xcc,0x32,0x50,0x5c,0x70,0x72,0xd1,0x03,0xb3,0x2d,0x2e,0x33,0xed,0xae,0x7a,0x07,0x3f,0x70,0x38,0x35,0xfc,0xcf,0xdb,0xfe,0x7b,0x26,0xd9,0x38,0x1e,0x52,0x07,0x2f,0x72,0x81,0xcc,0xd3,0x21,0x00 +.byte 0x63,0x48,0x38,0x44,0xb8,0x35,0xf2,0x4f,0xe5,0x33,0x8c,0xb3,0x07,0x0c,0xac,0x3d,0x73,0xe8,0xe3,0xb3,0x43,0xc5,0xb4,0x32,0xf4,0x41,0xdf,0x7b,0x06,0x3a,0xb8,0x67,0x17,0xc5,0xec,0x46,0x30,0xc0,0xa4,0x29,0x40,0xe4,0x8a,0xa3,0x14,0x84,0xa6,0x84,0xc7,0x5d,0x4b,0x57,0x37,0x9c,0x42,0xe6,0xa4,0x20,0xf7,0x5d,0xef,0x21,0xe2,0x80 +.byte 0x54,0x6d,0xf5,0xb5,0xbe,0xa3,0x95,0xcf,0x98,0xf8,0x38,0x46,0xa2,0x90,0x57,0x09,0x8f,0xb0,0x6d,0x01,0x5f,0x95,0x5a,0x78,0xf6,0xfd,0x01,0x0f,0xfd,0xa5,0xe2,0xcf,0x54,0xa3,0x2b,0xc1,0x30,0xbe,0x6d,0x1a,0xd3,0xdb,0x5a,0x17,0x43,0x46,0x93,0x81,0x0c,0x85,0x04,0x13,0xda,0xb4,0xde,0x81,0x48,0x5c,0xbc,0x42,0x9e,0x6d,0x6c,0x82 +.byte 0xff,0xa5,0x51,0xb1,0xd3,0xd2,0x3d,0x82,0x82,0xb4,0x96,0xb1,0x38,0x5d,0xc9,0x55,0xcb,0x9f,0xe5,0x47,0xd4,0x52,0x0f,0x76,0x54,0xec,0x39,0xb6,0x40,0xc3,0xc5,0xaa,0xc2,0x30,0x02,0xa0,0x68,0xc3,0x22,0x63,0x5a,0x8c,0x62,0x6d,0x40,0xc5,0xde,0x06,0x29,0x44,0x5d,0x2b,0x18,0x0a,0xa5,0x43,0x47,0xfe,0x5f,0x0f,0x63,0xa4,0x3c,0xa1 +.byte 0x62,0xcb,0x70,0x1d,0xf8,0x0e,0xc9,0xbe,0x27,0x0e,0x87,0x81,0x69,0x4c,0xea,0xbe,0xf9,0x9b,0xda,0xb6,0x9b,0xd0,0xdd,0xa0,0x1e,0x60,0x38,0x88,0x85,0x25,0x53,0xee,0x2c,0x77,0x53,0x82,0xb0,0x88,0x19,0x87,0x2a,0x77,0x7b,0x37,0x4b,0x4c,0xf4,0x96,0x5f,0x73,0xa1,0xbb,0x5c,0xfc,0x7e,0xbb,0xed,0x6f,0xb7,0x6f,0x9d,0x55,0xde,0xd3 +.byte 0xac,0xb9,0x8e,0x36,0x0f,0x3d,0xea,0x87,0xcd,0x19,0x33,0x1d,0xa8,0xee,0xfc,0xcd,0xe5,0x53,0x7b,0xdf,0x37,0x49,0x2d,0x73,0xf5,0x36,0xdd,0x42,0xc6,0x88,0x0d,0xf5,0xf2,0xba,0x2e,0x81,0xed,0x88,0x27,0x8d,0xe5,0x3f,0x83,0x5e,0xde,0x63,0x8f,0x67,0x2b,0x85,0xf3,0x2a,0x9b,0x26,0x3e,0x2b,0xe2,0x29,0xc5,0x5e,0x21,0x04,0xfe,0x5b +.byte 0xb9,0xd8,0xa7,0x7b,0xdf,0xcf,0x61,0xd6,0xaf,0x9b,0x17,0xcb,0xaf,0x8f,0x71,0xb3,0xc2,0x9d,0x9a,0x55,0x1d,0x3e,0x1d,0x17,0x25,0xc8,0x44,0x71,0x29,0x2f,0xc8,0x01,0x3b,0xe4,0xc4,0x2e,0xcc,0x3b,0xdb,0x34,0xbb,0xc0,0xcc,0xb6,0x07,0xe3,0x86,0x4c,0x62,0x02,0xe8,0xc3,0x11,0x85,0x6c,0x18,0x80,0xa3,0xbd,0x02,0x30,0x68,0x36,0xa3 +.byte 0xb6,0xc6,0xbd,0x82,0x43,0x40,0xed,0xa1,0xcf,0xc5,0xce,0xe4,0x27,0x8a,0xeb,0x8c,0x59,0xea,0x4a,0x81,0xd9,0x35,0x87,0x7d,0x6d,0xb2,0x8f,0x67,0x37,0x1f,0x11,0x60,0x0d,0xed,0x34,0xd5,0xa0,0x7b,0x46,0x71,0x68,0x19,0x69,0xd3,0x65,0x1d,0x47,0xf1,0x7e,0x16,0xd8,0xec,0xbb,0x52,0xc3,0x7b,0x62,0x5a,0xb3,0x60,0x67,0x2e,0xfd,0x57 +.byte 0xf2,0xfb,0x3d,0x63,0xe6,0x82,0x20,0xff,0x31,0x90,0x1d,0x5e,0x4f,0x04,0x9a,0xf8,0xb2,0x0c,0x84,0xff,0x7d,0xe2,0xec,0x4b,0x09,0xbb,0xdf,0xae,0xc5,0xaf,0xcb,0x8b,0xb5,0x5d,0xa8,0x53,0x78,0xf9,0xb9,0x43,0x71,0xa6,0xc2,0x10,0xfa,0xad,0xda,0xba,0x46,0x13,0x72,0x97,0xef,0x6f,0xe3,0x4f,0x5f,0xf9,0xec,0x25,0xdb,0xcd,0xca,0x33 +.byte 0x7e,0x50,0x73,0x5b,0xd0,0x9f,0xea,0xd5,0xd9,0x29,0xe8,0x1b,0xc1,0xf8,0x40,0xbf,0x50,0xdb,0x8e,0x39,0x0b,0xb7,0x6c,0xf1,0x34,0x0b,0x1f,0x88,0x27,0x4b,0xea,0x1d,0xb2,0x36,0x07,0x4b,0x22,0xa9,0xd0,0xf8,0xf2,0x13,0x8e,0x97,0x9d,0xd9,0x53,0xd3,0xdc,0x63,0x40,0x11,0xc7,0x74,0x9e,0xd9,0x83,0x01,0xae,0x36,0xcb,0x35,0x9a,0x0c +.byte 0xb5,0x15,0x0a,0xf5,0x41,0xa5,0x6c,0x72,0x40,0x80,0xf0,0x15,0xc0,0x80,0x23,0x0b,0xab,0x98,0xfc,0xab,0x81,0xe0,0x8b,0x61,0x91,0x18,0xd2,0x23,0x71,0xed,0x32,0x80,0x26,0x86,0x96,0xe9,0x90,0x5e,0x43,0xd2,0x89,0x8f,0x89,0x57,0x73,0xca,0xe1,0x42,0xa9,0xa9,0xed,0xdd,0xc5,0x9f,0xf7,0x00,0x0d,0xa3,0xe5,0xc8,0x6f,0x0c,0x14,0xa4 +.byte 0x9d,0x5a,0x14,0xaf,0x96,0x3a,0xb2,0x64,0xa7,0xac,0x20,0xa9,0x01,0x4c,0xec,0x64,0xc6,0x9b,0xfd,0x04,0xc5,0x2e,0xe7,0xdd,0xa5,0x8e,0xe7,0xe7,0x76,0x53,0x59,0x95,0x14,0x07,0xed,0xe9,0x96,0xd0,0x2d,0xc8,0x9d,0xa2,0x11,0xe3,0x02,0x20,0x68,0x09,0x25,0x69,0x07,0x88,0xdb,0x26,0x36,0xf5,0x8e,0xc3,0xf0,0x70,0x8c,0xeb,0xe6,0xcd +.byte 0xad,0xf3,0x49,0x6e,0x8a,0x54,0xa6,0xdd,0x97,0x8e,0x37,0x28,0x3a,0x6d,0xc4,0xdd,0x99,0x85,0xf7,0x96,0x63,0xb4,0xa2,0xdf,0xff,0x81,0x17,0xa1,0x22,0xb1,0x43,0x5b,0x29,0xdb,0x92,0x91,0xc9,0xc6,0x8d,0x29,0x1d,0x6e,0xe3,0x44,0x3e,0xe4,0x20,0xd5,0xf4,0x4a,0xfa,0xae,0xf6,0x2c,0xff,0x80,0xc9,0xce,0x7f,0x13,0x1e,0xd7,0x24,0xa2 +.byte 0xb3,0x90,0xb8,0x20,0x18,0xe5,0x6c,0x0e,0xf5,0xc6,0x26,0xd6,0xe9,0xe8,0x55,0xe4,0x3f,0x49,0x13,0xe2,0xca,0xef,0x9b,0xc0,0x8f,0x24,0x50,0x37,0xef,0x21,0xff,0x79,0xb7,0x5d,0x86,0x03,0xfb,0x85,0x75,0x74,0xbf,0xc5,0x3a,0x30,0xcc,0x00,0xc3,0x0d,0x4f,0x91,0xd6,0x31,0x19,0xd6,0xcd,0x0e,0x1c,0x53,0x88,0x75,0xb8,0xf9,0x68,0x7a +.byte 0xa4,0x3e,0x8d,0xed,0xba,0x05,0xb4,0x6c,0xe0,0x45,0x9c,0x41,0x34,0x24,0x82,0xaf,0x9a,0xcf,0x9e,0xd2,0x27,0x5c,0x7f,0xb3,0xcb,0xe5,0xad,0xb4,0x8e,0x74,0x9d,0xe4,0xba,0x55,0xb3,0xd3,0x32,0xbc,0x62,0x11,0xb3,0xa4,0x82,0xf0,0xd8,0xfc,0x79,0x03,0x70,0xae,0x7f,0x7f,0xc8,0x50,0xb5,0xbe,0x47,0x14,0x31,0xd7,0x16,0x65,0x52,0x3b +.byte 0xbb,0x42,0x38,0x23,0x77,0x4d,0x38,0x0b,0x0a,0x61,0x94,0xac,0xa3,0xc9,0xd7,0x99,0x4f,0x34,0x3a,0x88,0xe8,0x1d,0x0b,0x97,0x48,0x6d,0x5c,0x61,0x4c,0x3f,0xc2,0x7c,0x6c,0x63,0x00,0xdd,0x59,0xae,0xcd,0x17,0x0a,0x21,0x27,0x98,0x15,0x23,0x6d,0x84,0x7e,0x24,0xd4,0x7f,0x1b,0x3a,0x98,0x52,0xc3,0x60,0x33,0xd6,0xc1,0xfe,0x68,0xa8 +.byte 0x49,0x3d,0x7e,0x53,0xee,0x0d,0xed,0x89,0x9a,0x9a,0xe6,0xa1,0x47,0xc7,0xba,0xf3,0x73,0x5b,0xef,0x33,0x51,0x8c,0x1f,0x84,0xa6,0xef,0x77,0x94,0x2d,0xd6,0xda,0x8f,0x85,0x8c,0xd3,0xb6,0x02,0x68,0x9e,0x57,0xb6,0xd9,0x1a,0x8c,0xb5,0xf4,0x61,0x39,0x29,0xb5,0xb7,0x0d,0x0d,0xa6,0x81,0x87,0x54,0xc0,0xca,0x67,0x09,0xca,0x20,0xf3 +.byte 0x37,0x7e,0x03,0x3e,0x31,0x8c,0x51,0x89,0x06,0x81,0xf6,0x7b,0x8b,0xe3,0x4f,0xd0,0xb8,0x0c,0x34,0x7c,0xd6,0xfc,0x25,0xf8,0x00,0xa6,0x10,0x15,0x0d,0xeb,0x22,0x72,0x03,0x79,0x1c,0x84,0x1d,0x3d,0x10,0xaf,0x43,0x6d,0xd7,0xed,0x10,0x2c,0x14,0x26,0xd4,0xa1,0xee,0x6c,0x7f,0x52,0xe4,0x83,0xcc,0x5f,0x1a,0x4b,0xd0,0xc8,0xfb,0x27 +.byte 0x17,0x2c,0xf6,0x90,0x02,0xb4,0xb0,0x63,0x7c,0x14,0xec,0x9e,0x08,0x60,0xec,0x45,0x85,0xc6,0x76,0x42,0x4f,0x1c,0x5f,0x48,0x7f,0x87,0xef,0x8c,0x04,0x23,0x3c,0xda,0x39,0xbc,0xec,0x09,0xda,0xeb,0x9b,0x72,0x7a,0xb4,0x20,0x1c,0xb2,0xdd,0x2e,0x63,0x72,0xd7,0xb1,0xfe,0x5b,0x21,0x28,0xfb,0xeb,0x45,0x31,0x89,0xe5,0x3e,0xa0,0x85 +.byte 0xa6,0x96,0xdb,0x42,0xd5,0xb4,0x27,0x78,0x10,0xa0,0xcb,0x69,0x68,0x1e,0x76,0xed,0xbc,0x3c,0xa1,0x04,0x10,0x81,0x2a,0x4f,0x52,0x78,0x1e,0xae,0x5a,0x47,0x69,0x81,0xee,0xd3,0x14,0x1a,0x68,0x19,0x75,0x92,0x72,0x47,0x61,0x70,0xcf,0x96,0x35,0xa6,0xbb,0x00,0xaf,0x3e,0x90,0x86,0x22,0x9b,0x72,0x8a,0xa1,0x05,0xe2,0xfb,0xdc,0x30 +.byte 0xd5,0xdd,0x46,0x1f,0xf6,0x33,0x43,0xd1,0x59,0xc4,0x93,0x89,0x36,0x6a,0x7b,0x76,0xa7,0x40,0x6c,0xb1,0x9c,0xce,0x3a,0x8c,0xb6,0xd5,0xd1,0x0a,0x78,0xf6,0x08,0xfb,0xf5,0x9c,0xee,0x74,0x0d,0x39,0x51,0x6d,0x0e,0xa6,0xe9,0x22,0xd8,0x30,0xdf,0x16,0xf7,0xe3,0xbd,0xbb,0xe6,0x45,0xb8,0x9c,0xb5,0x49,0xf0,0xe8,0x7c,0xce,0x25,0xf8 +.byte 0x46,0xc0,0x59,0xc2,0xbc,0xdd,0xea,0x3e,0xeb,0x2e,0xf5,0xfd,0xd9,0x05,0x8a,0x2f,0xa3,0xa4,0x63,0xa6,0x50,0x08,0xce,0x2a,0x69,0xe7,0x58,0x57,0xa1,0xb2,0x44,0x41,0x04,0xfc,0x61,0xb1,0xb8,0x19,0x27,0x14,0x71,0x2f,0x55,0x64,0x28,0xa0,0xcc,0x47,0x0c,0xd4,0xed,0xfd,0x07,0x99,0xc6,0x9e,0xdc,0x5f,0x19,0x03,0x1a,0x00,0xda,0xf6 +.byte 0x2c,0x95,0xb0,0xd2,0xaa,0xfb,0xbc,0x1a,0xf3,0x62,0xaf,0x9c,0x38,0xde,0x61,0x30,0xd5,0x56,0x82,0x4b,0xf6,0xeb,0x34,0xc0,0xdc,0x51,0x97,0x89,0x80,0x47,0x9d,0x2a,0xae,0x0e,0x92,0x48,0xd2,0x9d,0x5a,0x67,0xef,0x33,0xa3,0xbe,0xdd,0x80,0x64,0x9c,0xc1,0xaf,0xf9,0x1a,0x4b,0x55,0x67,0x88,0x37,0x37,0xff,0x98,0xe3,0x9e,0xa9,0x4e +.byte 0x1f,0xa1,0x32,0x70,0xa3,0xbb,0xdc,0x6e,0xb3,0x6d,0xfe,0x8f,0x74,0x89,0xed,0xe1,0x13,0x3c,0x8f,0x08,0x75,0x84,0x84,0xee,0xac,0xcc,0xa5,0x47,0x9f,0x3e,0xb9,0xed,0x26,0x20,0xf7,0x7b,0xfb,0x8a,0x48,0x58,0x51,0x24,0xf9,0xeb,0x66,0x6d,0xd6,0x83,0x24,0xff,0x9f,0x0d,0x38,0x9c,0xf9,0x24,0x99,0x12,0x49,0xb6,0xdd,0xce,0x44,0xe7 +.byte 0x31,0x3d,0x4b,0x23,0x8a,0xd5,0x62,0xa2,0xdb,0x78,0x56,0x3a,0x62,0xc8,0x59,0x5f,0xcc,0x58,0x76,0x19,0x5d,0x48,0x4a,0xc2,0x87,0x21,0xc3,0x3d,0x3a,0x38,0xbd,0x20,0xfd,0xc3,0xa6,0xab,0x32,0xb8,0xc8,0xd1,0x5c,0xa5,0xb4,0x64,0x60,0xd2,0x87,0xb7,0xe9,0xc2,0x2b,0xb2,0x75,0x04,0xf4,0x6e,0x96,0x99,0x5d,0x08,0xff,0xa3,0x45,0x8a +.byte 0xad,0x7c,0xee,0x94,0x4e,0x45,0x86,0xad,0x0a,0x7a,0x5c,0x8f,0xff,0x28,0xb3,0x3c,0xf8,0x5e,0xb3,0x1e,0x5c,0xe0,0x22,0xf7,0x4e,0xe4,0xdf,0x1f,0xd2,0xa2,0x37,0x4a,0x87,0xa6,0x16,0x80,0x0c,0xc3,0x75,0x18,0xe4,0x76,0x8f,0xc3,0x1b,0xee,0xb1,0xe4,0x4b,0xeb,0x6f,0x15,0x48,0x60,0xaf,0x8e,0x0e,0xeb,0xbe,0x26,0xa3,0xbd,0x2a,0xb5 +.byte 0x6d,0x8b,0xd1,0xa1,0x0f,0x8e,0xaa,0xaa,0xb8,0x8d,0x84,0xe7,0x65,0x40,0x60,0x3d,0x59,0xb7,0x1c,0xef,0x08,0x0e,0x6f,0x21,0xb4,0xe6,0x10,0xda,0x59,0x9a,0x0f,0xe6,0xba,0xfd,0xed,0x7f,0xc1,0xe3,0x7a,0xb7,0x21,0x5d,0xcf,0x1c,0xbd,0xd2,0x59,0xc0,0x31,0xa5,0x8a,0x39,0x86,0x9e,0x7e,0x6a,0xcb,0x87,0x6f,0x01,0xba,0xa4,0x06,0x6b +.byte 0x3b,0x5d,0x68,0x85,0x11,0xd2,0x2a,0x3c,0x8e,0x3a,0x8c,0x8b,0x59,0xa0,0x4a,0xfb,0x76,0x85,0xe6,0x47,0xc3,0xf4,0xc4,0xe6,0xcc,0x7b,0xff,0x71,0x03,0xd1,0xc2,0x01,0xe4,0x5e,0x49,0x31,0xa6,0x0e,0x17,0x9b,0x42,0xdc,0x75,0xd6,0xfe,0x09,0x0b,0x6d,0x21,0x46,0xfe,0x40,0xcd,0x7c,0xdb,0xca,0xc9,0xba,0x64,0x83,0xd3,0xf7,0x0b,0xad +.byte 0xff,0xfd,0xe3,0xd9,0x49,0x7f,0x5d,0x48,0xaa,0xac,0xe5,0x74,0x2a,0x14,0x6f,0x64,0x21,0x81,0x09,0xcd,0x2d,0x19,0xf5,0x56,0x85,0xa8,0xec,0x98,0x65,0x46,0x99,0xec,0xbe,0xe3,0x86,0xd3,0x41,0x8b,0xe4,0x76,0x9b,0x5b,0x98,0x33,0x9e,0xdb,0xc9,0xde,0x89,0xfa,0x60,0x58,0xa8,0x2f,0x7a,0xca,0x30,0x91,0xc8,0x26,0x14,0x9c,0xd6,0x6d +.byte 0xc2,0x3c,0xca,0xe0,0x9a,0x13,0x72,0x63,0x5e,0x20,0xfd,0xa0,0xca,0xb2,0xed,0x37,0xc5,0xd4,0x4e,0xec,0x1f,0x74,0x25,0x37,0xe2,0xbe,0xb1,0x7f,0x52,0x26,0x28,0x4f,0x02,0xe5,0x6a,0x27,0xf3,0xc4,0x9c,0x69,0x09,0xac,0xff,0x77,0x9c,0xa4,0x1d,0xe7,0xa1,0x7c,0x37,0x70,0x3b,0x3c,0xc4,0x16,0x8f,0x5d,0xe5,0x05,0xa9,0x2c,0x91,0x2e +.byte 0x87,0xb0,0xa9,0x2e,0x32,0x73,0x5c,0x15,0x1e,0xbe,0x01,0xc9,0xd8,0x2e,0x26,0xf4,0x05,0x2d,0xe0,0xc0,0x38,0x81,0x61,0xf4,0x37,0x08,0xa0,0xc0,0x28,0x0a,0xb6,0xd4,0xcc,0x2c,0xc6,0xd4,0xda,0x48,0x49,0xcf,0x76,0x91,0x23,0x51,0x91,0xe7,0x50,0x94,0xae,0xb7,0x15,0x26,0xaa,0x82,0xd0,0x97,0xe8,0x5e,0xaa,0xfc,0xaa,0x60,0x62,0x81 +.byte 0x80,0xfd,0xfd,0xaf,0x65,0xcc,0x29,0x27,0x95,0xad,0x56,0xb9,0x85,0x66,0x49,0x62,0xb3,0x1a,0xf4,0x54,0xc7,0x5d,0x7f,0x73,0xe0,0xd2,0xc8,0x18,0x95,0x62,0x2f,0x5c,0x96,0xfb,0x63,0x15,0x46,0x07,0x5f,0x3e,0x52,0x18,0xf8,0x5d,0x45,0x0b,0xb6,0xf7,0xc5,0x3d,0x16,0xaa,0x0b,0x8f,0x9d,0x16,0xc8,0x93,0x13,0xd2,0xba,0x7a,0x52,0x1a +.byte 0x7a,0x73,0xc4,0xca,0xfb,0x04,0xaf,0x6f,0x3e,0xfa,0xff,0x29,0x09,0xe2,0x74,0x35,0xc1,0xfc,0x21,0xcf,0x5f,0xf7,0x82,0x55,0x75,0x27,0xc9,0x91,0xc5,0xbf,0xe6,0x68,0xb6,0x0f,0x10,0x0e,0x91,0x30,0xb7,0x05,0xca,0x59,0x4a,0x7f,0xb0,0xf6,0xaf,0xf1,0x5d,0xc9,0xc5,0x06,0xc5,0xf4,0xe1,0x75,0x16,0x9a,0x2c,0xc0,0x3f,0xc1,0x98,0x91 +.byte 0xb7,0xe6,0xb1,0xf2,0xf9,0xfa,0x6d,0x27,0x98,0x33,0x8b,0x73,0x7a,0x57,0x12,0x6f,0x80,0x11,0x28,0x17,0x7d,0xf1,0x26,0xaa,0x05,0xf1,0x6e,0x86,0x98,0xe7,0xf6,0x9f,0x9c,0x06,0x8f,0xec,0xd7,0x2d,0xb0,0x83,0xdf,0x23,0x80,0x34,0xd3,0xd7,0xf7,0xd5,0x0d,0x52,0x18,0xcd,0xc7,0xe7,0x15,0xc9,0x1b,0xae,0x58,0xcf,0xc5,0xdd,0x25,0x2a +.byte 0xff,0xa5,0xf3,0x6d,0x20,0xfd,0xda,0xfd,0x78,0x30,0x14,0x1f,0xb3,0x47,0xe3,0x2d,0x54,0x87,0xdc,0x30,0xbe,0x41,0xc0,0x48,0x52,0x82,0x49,0x78,0xad,0xfd,0x24,0xad,0xd6,0xc1,0x14,0x1e,0xa0,0xc1,0x3d,0x82,0x59,0x01,0x9b,0xc3,0xf4,0xf7,0x26,0xce,0x92,0x50,0x13,0x47,0xe0,0xf3,0xfa,0xd9,0x61,0x19,0x80,0x12,0xee,0x73,0x45,0x5b +.byte 0x34,0xfc,0xb2,0x84,0xb2,0x3f,0xdc,0x77,0x8e,0x2d,0xb3,0x62,0xb9,0x03,0x2d,0xb6,0x2a,0x17,0xcd,0xfb,0x54,0xc2,0x5e,0xb9,0xcf,0xd6,0x05,0xe2,0xac,0x3f,0xce,0x50,0x0f,0xa1,0x3e,0x67,0x68,0x46,0x0c,0xab,0xa1,0xdc,0x2a,0x26,0x1f,0x22,0x1b,0xa7,0xc9,0x3b,0x6c,0x97,0x5d,0x5c,0x7d,0x1a,0x46,0x4a,0x99,0x92,0x85,0x87,0x35,0x6c +.byte 0x78,0x9d,0xb0,0x39,0xd6,0x3b,0x52,0x60,0xb4,0xba,0xcc,0x2e,0xe9,0xe1,0x91,0x51,0xc1,0x52,0xc7,0x5d,0x84,0x95,0x54,0x25,0xdd,0xcd,0x40,0x35,0xa1,0xc8,0x7e,0xff,0x82,0x55,0x9f,0x64,0xef,0xa7,0xc1,0x79,0x57,0xc7,0x44,0xa8,0x1c,0x06,0xaa,0x2a,0x05,0x65,0x6c,0xdc,0x90,0x7d,0x2e,0x53,0x3c,0x56,0xe1,0x30,0xdf,0xcb,0x75,0x3d +.byte 0x36,0x88,0xfd,0x72,0x2d,0xc7,0x8e,0x2f,0x11,0x5a,0x2e,0xa9,0xd6,0x37,0x4b,0x31,0x4e,0x6e,0xa0,0x4a,0xd9,0xa9,0x48,0x18,0x50,0xb1,0x28,0xf6,0x74,0x03,0x44,0xa7,0x06,0x55,0x86,0x1a,0x1b,0x07,0x79,0xc4,0x25,0xba,0x5d,0xce,0xa2,0x96,0x7d,0x62,0xa7,0x21,0xf0,0xa7,0xc2,0x91,0x03,0x38,0x37,0x0b,0x20,0x40,0x88,0x7b,0x28,0xf4 +.byte 0xf3,0xc2,0xb0,0x4b,0xf6,0xef,0x2f,0xd9,0xb5,0x81,0x17,0x95,0x42,0x98,0x7f,0x18,0xd4,0x7e,0xa1,0x85,0xbf,0x62,0xdc,0x40,0xe4,0xd3,0xcc,0x78,0x01,0xec,0x12,0xcc,0x04,0x5b,0xfe,0xdb,0x39,0x7c,0x1e,0x56,0x7c,0x72,0x57,0xb9,0xdf,0x9d,0x43,0xd4,0xe3,0x1f,0xbf,0x69,0xfb,0x43,0x23,0xd8,0x75,0x81,0xe8,0x39,0x0f,0xe4,0xe9,0x51 +.byte 0xea,0xb7,0xa7,0xc6,0x17,0xc6,0x75,0x4c,0xa8,0x17,0x41,0x1c,0x55,0x8e,0x8d,0xf3,0x64,0xbc,0xc3,0x33,0xa7,0xc1,0xbe,0xa2,0x89,0x75,0xd6,0xda,0xad,0x44,0xd5,0xdd,0x18,0xe2,0xfc,0x1d,0xa1,0xbc,0x1a,0xb8,0x40,0x1a,0x4f,0x44,0x4b,0x56,0xe9,0xf4,0xa8,0x16,0xe6,0xc9,0x40,0x90,0x9b,0x49,0xae,0x62,0x12,0x3d,0x50,0x2e,0x7b,0x60 +.byte 0x6f,0x04,0x01,0x2c,0x83,0x2a,0xd2,0x92,0x63,0xa2,0xe2,0x39,0x9a,0xc4,0x1e,0x5a,0x53,0x3f,0x4d,0x69,0xfa,0x0a,0x22,0x13,0x80,0xa4,0x6e,0xfb,0x09,0xcb,0x35,0xd7,0x12,0xa4,0xcd,0xfc,0x0b,0x06,0xa6,0x5e,0xc6,0x4a,0x22,0x56,0x5d,0x7f,0x70,0xd0,0xf8,0xe6,0x96,0x77,0xce,0xd9,0x69,0x6c,0x06,0xac,0xaa,0x94,0x6d,0x57,0x1b,0x28 +.byte 0xb4,0x07,0x50,0x19,0xd1,0x86,0xba,0xe6,0xe6,0x31,0x74,0x1d,0x3d,0xe8,0xe2,0x7b,0xfe,0xc9,0x41,0x89,0x20,0x5b,0x6a,0xc0,0x18,0x16,0xee,0x35,0xfa,0x56,0x35,0x3e,0x53,0x99,0xfb,0x8d,0xae,0x75,0x4f,0xc5,0x8d,0xff,0x23,0xd5,0x42,0xf4,0x81,0x5c,0x8b,0x71,0x7a,0x22,0xb0,0x6b,0x45,0x86,0xa6,0xc6,0xdb,0xa6,0x83,0x01,0x28,0xde +.byte 0x38,0xaa,0x6e,0xf8,0x5a,0xf2,0xcc,0x3c,0xc5,0x65,0x78,0x37,0xe8,0x8a,0x59,0xf3,0xfe,0x8b,0xcd,0xf6,0x31,0x46,0xdc,0x72,0x19,0xf7,0x73,0xac,0x5c,0xf1,0xe3,0xfd,0x85,0x51,0xec,0x92,0x3a,0xf3,0xd7,0xb2,0x95,0x53,0x79,0x48,0xd3,0x29,0x84,0xec,0xc5,0x0a,0x71,0x15,0x52,0x69,0x6a,0xe1,0xab,0x69,0x94,0xc2,0x51,0xdf,0x27,0xd8 +.byte 0xb1,0x05,0xc4,0x12,0xea,0x1e,0xda,0x6e,0xf2,0xf5,0x8a,0xa8,0x72,0x74,0x5a,0xe5,0x45,0x5b,0x5f,0xf9,0xb0,0x56,0x5c,0x85,0xf7,0x63,0x8d,0x1d,0xbf,0xe9,0x7c,0x97,0xe9,0x37,0xb3,0x5b,0x4b,0x57,0xfc,0xf4,0x58,0x84,0x26,0x55,0x07,0xc7,0x0a,0xfe,0x5a,0x58,0xd0,0xd8,0x19,0xf4,0x02,0xad,0x2c,0x4e,0xbd,0xe1,0x07,0x48,0x3b,0xc4 +.byte 0xd6,0x23,0x3a,0x63,0xc3,0xf5,0x17,0x46,0x03,0xa4,0x9a,0x10,0xf9,0xac,0x70,0x9c,0x13,0x10,0x94,0xda,0x17,0xc5,0xbb,0x87,0x0f,0x9b,0x4f,0x54,0x55,0x6b,0x57,0x2d,0x12,0x0b,0xa7,0x9c,0x77,0x6d,0x67,0xb0,0x03,0xdf,0xc6,0xa2,0x76,0x96,0x0c,0xac,0x30,0xbc,0xa2,0x55,0x23,0x01,0xae,0x51,0x50,0xd4,0xab,0xd0,0xee,0x75,0xf1,0x96 +.byte 0x75,0xf5,0x2e,0xae,0x52,0x31,0x0b,0x0a,0x8a,0xdb,0x4c,0x4d,0x4c,0x80,0xfc,0xd7,0x68,0x05,0x54,0x47,0xa5,0xc4,0xb1,0x63,0x87,0x43,0x1b,0xe1,0x0b,0x4f,0xff,0x0c,0x02,0xf7,0x00,0xd4,0x8d,0x6e,0xa1,0x21,0x91,0x62,0xec,0x55,0xd5,0x72,0x70,0x59,0x7a,0xa4,0x0e,0x78,0x7a,0x87,0x1f,0x71,0x35,0x3b,0xf7,0x1f,0x66,0x8c,0x90,0xf9 +.byte 0x6d,0x1f,0x74,0x47,0x41,0xf5,0x21,0x98,0x0d,0x42,0x61,0x21,0x0b,0x62,0x59,0xc7,0x5e,0x58,0x37,0xfb,0xee,0xbb,0xa0,0x45,0xa8,0x84,0xae,0x41,0x29,0xc9,0x88,0x64,0x69,0x75,0xc1,0x5f,0x63,0x7c,0x00,0x1c,0x35,0x61,0x9e,0xad,0x19,0xd7,0xd8,0xf1,0x64,0x57,0x10,0x87,0x73,0xa8,0x8b,0x39,0x9b,0x1c,0x1a,0xc2,0x1b,0x01,0x1a,0x41 +.byte 0x26,0x58,0x93,0x8f,0xed,0xf9,0xe7,0xfe,0xcc,0x27,0x1b,0x6b,0xb8,0x28,0x5a,0x0b,0x04,0xa0,0x94,0x23,0x4b,0x21,0x5f,0xb3,0xc9,0xb6,0x7b,0x36,0x5a,0x67,0x6b,0xd2,0xc2,0x53,0x97,0x5d,0xa5,0x43,0xd3,0x79,0x83,0xe2,0x3b,0xe0,0xaf,0x5f,0xbd,0xf3,0xb0,0xfc,0x04,0x95,0x06,0x17,0x0c,0xe2,0x68,0xe8,0xf3,0x90,0xc7,0x2b,0x7b,0xcc +.byte 0xaa,0xce,0xf5,0x0b,0x3c,0x3f,0x10,0xa7,0x31,0x9d,0xf0,0x1e,0x3e,0x74,0x57,0xbd,0x87,0xe7,0x37,0xd0,0x37,0x09,0xae,0x03,0x96,0xb1,0xad,0x8f,0x2d,0x72,0xdc,0x0f,0xdf,0xd9,0xfb,0xcc,0xb8,0x48,0x62,0xf7,0xad,0x05,0x4d,0xc6,0xe5,0x92,0xe3,0x95,0xa0,0x74,0x7a,0xa6,0x84,0x13,0x68,0x17,0xaa,0x8f,0x40,0x2a,0x8d,0x2b,0x66,0xdc +.byte 0xf8,0xf6,0x6d,0x7c,0x7e,0x40,0x22,0x05,0x16,0x20,0xbc,0xe5,0xc2,0x87,0xe2,0xd5,0xbd,0x47,0xd5,0x69,0x95,0x12,0x25,0x1c,0xaa,0x9d,0xb5,0x73,0x08,0xaf,0xfb,0x46,0xa5,0x11,0x2c,0x93,0xc6,0xfc,0xc0,0x5e,0x0e,0x99,0x1c,0x80,0x5f,0xe5,0xc8,0x52,0x73,0x35,0x4d,0xbc,0x70,0xeb,0x40,0xc9,0x47,0x8a,0x8f,0x19,0xd9,0xa9,0xec,0x4b +.byte 0x88,0x53,0x56,0x08,0x4a,0xa2,0x32,0x1f,0xe2,0xbb,0x68,0x35,0xfd,0xf2,0x0e,0x0f,0x7f,0xc8,0xf1,0x59,0xac,0x97,0x8f,0x84,0x69,0xb6,0xb9,0x5f,0x84,0xe9,0xf2,0xf9,0x09,0xf6,0xf1,0x31,0xd7,0x1a,0xa8,0x25,0x32,0x5f,0xb1,0xa7,0x84,0x15,0xfa,0x07,0xa8,0x53,0xce,0x2a,0x26,0xe0,0x4d,0x07,0x4f,0x45,0x63,0x76,0xfd,0xe3,0xb4,0x4e +.byte 0x81,0x5e,0xe6,0x01,0x9c,0xf5,0x82,0x2d,0x71,0x0f,0x98,0xb4,0x72,0x06,0xbc,0x89,0x89,0x60,0x5f,0xd9,0x92,0xcf,0xb9,0x41,0xe3,0x13,0xaa,0xe4,0x80,0xb5,0x75,0xf4,0x9a,0x1b,0xc2,0xa3,0xa4,0xa9,0x0f,0x15,0xdc,0x26,0xdd,0x20,0x10,0x27,0xbd,0x06,0x77,0x12,0xa5,0xb3,0xde,0x9f,0xbf,0xc4,0xb6,0x1d,0x76,0xdc,0x16,0x00,0x2e,0xe2 +.byte 0x00,0x4d,0xb3,0x62,0x57,0x73,0x1e,0x90,0xe2,0xaa,0x4c,0x47,0xdf,0x6b,0x2d,0x66,0x2f,0x82,0x55,0x91,0x26,0x33,0xb9,0x3a,0xc7,0xf1,0x0a,0xda,0x9b,0x6b,0x05,0x82,0x0f,0x0e,0x30,0x74,0x0b,0xea,0x0f,0x49,0x55,0x3b,0xe7,0x42,0x48,0xca,0x82,0x3e,0x8c,0xbc,0xe2,0x88,0x43,0x44,0x0d,0x37,0x9b,0xd1,0xfc,0xf1,0x45,0x46,0x0e,0xe1 +.byte 0xec,0x91,0x39,0x96,0x7d,0xbc,0xd5,0xb1,0x11,0x55,0x54,0x49,0x4f,0x18,0xed,0xec,0x58,0xdb,0xb3,0x7d,0x64,0x8d,0xfc,0x65,0x1f,0xf0,0xe0,0xc0,0x41,0xc0,0x19,0xeb,0x16,0x16,0x71,0x36,0x88,0xcf,0x75,0x3d,0x9c,0xe6,0xa0,0x84,0x54,0x26,0x64,0x95,0x9a,0xe1,0x0b,0x51,0xcf,0x9a,0x55,0x60,0x4d,0x9d,0x1d,0x37,0x71,0xa8,0x94,0x0a +.byte 0x20,0xeb,0xf2,0x91,0x14,0xfc,0x12,0xb0,0x1e,0xe3,0x5e,0x3a,0xbb,0x22,0xde,0x20,0xb1,0x58,0xef,0x0b,0xb1,0xc2,0x2f,0xea,0xd8,0xdb,0x1d,0x3a,0x67,0x7b,0xbd,0x26,0xfa,0x4a,0x3c,0x3d,0xbd,0x87,0x4c,0xba,0x57,0xdf,0xfb,0x1d,0xf7,0x26,0x5f,0x52,0x4e,0xdd,0x9b,0x38,0x62,0xed,0x48,0xc1,0xae,0x7f,0xa8,0x13,0x05,0x09,0xff,0xc0 +.byte 0xd3,0x49,0x75,0x1f,0x6a,0xe0,0x79,0x94,0xc1,0xe9,0xe3,0xf5,0x33,0x40,0xd4,0x6b,0xfe,0x4d,0x6e,0x84,0xb9,0x20,0x68,0x2b,0x6c,0xb3,0xf1,0xb1,0x1c,0xfd,0x93,0x14,0x7f,0x35,0x9b,0xd5,0x07,0x15,0x87,0x56,0xb9,0x45,0x22,0x64,0x73,0xdb,0x34,0x35,0xca,0x15,0x4e,0xa2,0xa2,0xe2,0x7a,0x6e,0x14,0x46,0xf5,0xf1,0x70,0xd3,0x3a,0x2e +.byte 0x38,0x9d,0xf6,0xc6,0x29,0xd5,0x7f,0xc7,0x77,0x2c,0x33,0x55,0x1c,0xc2,0xf1,0xaf,0x8e,0x4d,0x1b,0x22,0x36,0x35,0x93,0x47,0xa5,0x59,0xb4,0x94,0x0f,0x2d,0x66,0x24,0x6f,0x57,0xa4,0x95,0xf3,0xd7,0xf3,0x59,0x9d,0xc0,0xda,0xa7,0xf7,0xf2,0x8d,0x93,0xc9,0x90,0x91,0x9e,0x12,0x3f,0x34,0x01,0x90,0x8b,0x13,0x09,0x3d,0x2f,0xa8,0x31 +.byte 0xfa,0x39,0x4a,0x7d,0x0d,0x34,0xa3,0xf1,0x75,0xdb,0xa2,0xd2,0x5c,0xf1,0x72,0xfd,0x7f,0x7b,0x15,0x92,0xf0,0x71,0xd6,0xa0,0x74,0x53,0x61,0x67,0xa4,0x8b,0x72,0x3a,0x66,0x0a,0xce,0xc9,0x1c,0x5b,0x4d,0xaa,0x0a,0x3a,0x91,0x0a,0xbb,0xef,0x6e,0x8d,0x00,0xc0,0xa1,0x89,0xa9,0xbd,0x5a,0x2d,0xf8,0x7c,0x1f,0xb2,0x5a,0x73,0x33,0xe7 +.byte 0xb3,0xfd,0xd4,0xe3,0x81,0x69,0x30,0xc1,0xf8,0x97,0x7b,0xf3,0x63,0xaa,0xd5,0x5a,0x98,0x95,0xb3,0x65,0x2d,0xf9,0x68,0x2e,0x2c,0x26,0xe6,0x77,0x8f,0x76,0x7a,0x02,0xc7,0x50,0x28,0x40,0xcf,0x44,0x66,0x18,0x54,0x52,0xef,0x79,0x26,0xc2,0x76,0x5b,0x71,0x92,0x49,0xba,0xe1,0xd7,0xf2,0xdd,0x57,0xe0,0x78,0x6e,0xb6,0xdd,0x0d,0x20 +.byte 0x85,0xf9,0x34,0x9e,0x65,0x6b,0x9f,0x41,0x24,0xe2,0xb1,0x2a,0xef,0x8b,0xd2,0x19,0x81,0x73,0x56,0x5a,0x84,0xd3,0x46,0xf8,0x74,0xe3,0x1f,0x3d,0xd9,0x16,0x86,0x38,0xf6,0x7c,0x04,0xab,0x9a,0x64,0x0e,0x48,0x06,0x4c,0x61,0xcd,0x2d,0x4d,0xef,0x6f,0xd6,0x7d,0x31,0x1c,0x56,0x65,0xc4,0xf1,0xa7,0x15,0xac,0xa4,0xe2,0x8b,0x83,0x5e +.byte 0x64,0x36,0x2e,0x77,0x94,0x2e,0x2e,0xa3,0x62,0xcf,0x6e,0x7a,0x6d,0x39,0xaf,0xf7,0x96,0x88,0x31,0x14,0x58,0x46,0x30,0x0c,0x36,0x3a,0x4c,0x53,0xe0,0xa7,0x24,0x76,0x84,0x0f,0xfb,0x7e,0x55,0xa0,0x0f,0x63,0xfc,0xd6,0x1f,0x58,0x68,0xb5,0xcc,0x77,0x4f,0x16,0x91,0xa7,0xfd,0x62,0xb3,0x88,0x13,0x7c,0xcb,0x63,0x6d,0xe4,0x38,0x4c +.byte 0x6e,0x3b,0xf7,0xe3,0x8d,0x52,0x84,0x61,0x19,0x12,0x51,0xbe,0xed,0x32,0x3d,0x77,0xdd,0xa1,0xc3,0x59,0x65,0x79,0xa1,0x6b,0xbc,0x65,0x6c,0xe3,0x7e,0x60,0x49,0xbd,0xcf,0x6f,0x61,0x97,0x98,0xbe,0x74,0x38,0xd1,0x09,0xc1,0x59,0xe5,0x7f,0xfe,0xbf,0xfd,0x60,0x1b,0x96,0x00,0x46,0x56,0x4d,0x81,0x4c,0x70,0x59,0x39,0x66,0x13,0x58 +.byte 0xe7,0x62,0x3a,0xfc,0x1b,0xe5,0xf9,0x03,0xd4,0x4b,0xab,0x1d,0x56,0x22,0x4a,0x09,0xa5,0xdd,0xac,0x39,0xbe,0x27,0x39,0xb3,0xe8,0xad,0xe0,0x07,0x86,0x10,0xce,0xa9,0x4e,0x8b,0x47,0x8d,0xb8,0x63,0x2f,0x61,0x1a,0x8b,0xd4,0xd3,0xfe,0x73,0x82,0x5a,0xd6,0xa9,0x46,0x56,0xa7,0x81,0xe9,0xda,0xb9,0x17,0xa7,0xc8,0x0f,0x24,0x16,0x6a +.byte 0x12,0xfe,0xc3,0x65,0x85,0x77,0xab,0x89,0x44,0x1b,0xa3,0x8b,0xfd,0x07,0xf4,0x77,0xaa,0xe1,0x71,0x33,0x74,0x93,0xdc,0x90,0x53,0x39,0x47,0x8c,0xea,0x18,0xe1,0x6a,0xed,0x8c,0x56,0x08,0x2f,0xa1,0x1f,0x22,0xf2,0xc0,0x12,0xcd,0xb7,0xdf,0xb6,0x3c,0xd6,0x22,0x6c,0x5b,0x00,0x0f,0xdb,0x66,0x5b,0x54,0x35,0x48,0x37,0x8c,0x79,0x74 +.byte 0xd1,0xb0,0x15,0x01,0x22,0x3a,0x7c,0x17,0x8c,0x20,0x06,0x9b,0x13,0x6e,0xee,0xbf,0xb4,0xac,0x01,0x61,0xb9,0x28,0x65,0x8e,0x53,0x12,0x4f,0xe0,0x5f,0xfc,0xdb,0x40,0x6c,0xa2,0x19,0x64,0x49,0x7a,0xc7,0xc5,0xc8,0x53,0x6e,0xd5,0x68,0xe1,0x61,0xe5,0x87,0xc2,0x99,0x59,0x4c,0x27,0xc8,0xd0,0xd0,0x10,0xce,0x9f,0x09,0xff,0xf5,0xa8 +.byte 0xf8,0x79,0xf6,0x0f,0x73,0xda,0x8a,0x36,0x8e,0x48,0x7e,0xbd,0x98,0x76,0x57,0xfa,0x5c,0xec,0xa5,0x3d,0x30,0xfe,0xa3,0xe5,0x27,0x87,0xcf,0x26,0xfe,0x61,0xe4,0xed,0xd1,0xfb,0xfc,0x91,0x5d,0xb6,0x70,0x2c,0x2c,0x59,0x14,0xd5,0x1d,0x9a,0xb9,0x2c,0xef,0x24,0x7b,0x10,0x8d,0x99,0x63,0xaa,0x82,0xf0,0x1c,0xe8,0xa0,0x00,0xa5,0xa7 +.byte 0xf8,0xc0,0x35,0x9e,0x12,0x18,0xaf,0x42,0x9d,0xe5,0x2b,0x72,0x6c,0x31,0xd8,0x8f,0x6c,0xde,0x2e,0x37,0xa6,0x73,0x06,0xe7,0x90,0x43,0x79,0x99,0x64,0xd1,0x17,0xa1,0x43,0x6d,0xd4,0x90,0x50,0xf2,0xcc,0x0b,0x73,0x49,0x9e,0x14,0x7c,0x49,0x92,0x05,0x0e,0x8c,0xda,0xb7,0x18,0xf0,0xcc,0xea,0xe4,0x32,0x58,0xc7,0xbd,0x8e,0xca,0x35 +.byte 0x52,0x9f,0xec,0x5d,0xa0,0x6c,0x83,0x61,0x07,0x74,0x37,0x4a,0x10,0xa0,0x98,0x83,0x3a,0x65,0x17,0x63,0xd0,0x22,0x96,0xb5,0xed,0xbb,0xbb,0x1c,0x18,0x8a,0x49,0x3d,0x0f,0xcc,0x24,0xb3,0x9b,0xb6,0x23,0x2e,0x9d,0x97,0xe7,0x31,0xf8,0x36,0x6d,0x7b,0xa1,0xf1,0x02,0xde,0x7c,0xad,0x77,0x5d,0x85,0x7c,0x39,0x61,0xc7,0xd7,0x3f,0x70 +.byte 0x1c,0xe1,0x0e,0x49,0xf4,0xcd,0xab,0xfd,0x4d,0x2f,0xc7,0xb7,0x53,0xfc,0xed,0xeb,0x41,0x2a,0x80,0x40,0xf3,0x47,0xf8,0x15,0xa0,0x4c,0x8b,0x34,0xf6,0x6a,0xb8,0x30,0x09,0x4d,0xe6,0x60,0xb7,0x24,0x6b,0x4c,0x26,0xdf,0x83,0x37,0xc7,0x96,0xba,0x35,0xda,0x29,0x4e,0xca,0x52,0xf7,0x41,0xd3,0x98,0x27,0xb2,0x9e,0xec,0xcc,0x12,0xdc +.byte 0x77,0xfd,0x11,0xbd,0xbd,0xbb,0x5e,0x0c,0x37,0x29,0xd2,0x4f,0x7d,0x5c,0x97,0xad,0x72,0x93,0x4a,0xfa,0x17,0x07,0x07,0x26,0xee,0xa7,0x29,0x2e,0xdb,0xf6,0x60,0x65,0x2d,0x85,0xbe,0x27,0x4d,0xf7,0x2b,0xb4,0x81,0xf5,0x3a,0x1d,0xae,0x25,0x8b,0x60,0xc2,0x75,0x3a,0xfd,0xf9,0x4d,0x90,0x7a,0x8a,0x3a,0xf6,0xa9,0xf0,0x11,0xd2,0xb9 +.byte 0xdb,0x23,0x40,0x9d,0x33,0xc3,0xbf,0x60,0x95,0x9c,0x6f,0xa9,0x82,0x42,0xe5,0x67,0x52,0x36,0xea,0x68,0x64,0x24,0x85,0x46,0x7e,0x2a,0x1a,0x6a,0x4b,0xa8,0xb0,0xa0,0x9c,0xb8,0x4a,0xb6,0x2e,0xb2,0x6b,0xf4,0x63,0x9f,0x54,0xb5,0x6f,0x1b,0xf5,0x71,0x7e,0xf8,0xef,0xb2,0x92,0xe2,0xcf,0x65,0xb4,0x02,0x9b,0x75,0x4b,0xf9,0x6b,0xa1 +.byte 0x24,0x3b,0xea,0x7f,0x31,0x08,0xd4,0xdc,0xab,0x12,0xc0,0xca,0x64,0xee,0xfa,0x61,0x1c,0x0f,0x24,0xc3,0x8c,0xbd,0xc8,0xd2,0x42,0xf7,0x1f,0x2e,0xd3,0xd1,0x51,0x86,0xfb,0xa2,0x95,0xc5,0x8c,0x5b,0x61,0x14,0xc9,0xe4,0x07,0xa1,0xf7,0x39,0x11,0x40,0x68,0xd6,0xe2,0x38,0x96,0x6f,0x99,0xf1,0xd2,0xfb,0x8e,0xb8,0x3d,0xf2,0x8a,0x4e +.byte 0x3e,0x54,0xd9,0x0e,0xd1,0xc9,0x31,0x04,0xa4,0xee,0xbe,0x51,0xcf,0x5f,0xd1,0xc8,0x13,0x96,0x9d,0x9b,0xdf,0x32,0xa9,0x38,0x8f,0xbc,0x7e,0x22,0x1a,0x52,0x5f,0x14,0x61,0xeb,0x78,0xf4,0x01,0xe9,0x5c,0x18,0x1c,0xb5,0xe1,0x80,0x06,0x3e,0x8e,0x72,0x33,0xf9,0xaa,0x49,0xec,0x5b,0x7a,0x04,0xf2,0x9b,0x48,0x8a,0x58,0x14,0x4b,0x7e +.byte 0x4d,0x26,0x0b,0xe0,0xf0,0x69,0xa3,0x36,0x75,0x3e,0x73,0xec,0x53,0x20,0x35,0x8e,0xfa,0x40,0xf0,0xcd,0x70,0xe1,0xe4,0x64,0x89,0x14,0x55,0xd7,0x20,0xe8,0xbd,0xc2,0x85,0xa8,0x4d,0x51,0x96,0x27,0x54,0x50,0xc7,0xa1,0x9c,0x35,0x52,0x1f,0x8b,0x6f,0xa2,0x62,0x36,0x94,0x02,0xb1,0x01,0xc6,0x4e,0x53,0x83,0x65,0x98,0x25,0x6d,0x26 +.byte 0x6d,0xef,0x4e,0x7a,0xe0,0x56,0x6a,0x6c,0x23,0xe8,0xa6,0x97,0xc1,0xf2,0xb1,0x2d,0x03,0x29,0xef,0xa0,0x6d,0x86,0x8d,0x5a,0x00,0x83,0x14,0xed,0xd4,0x1e,0x79,0xc4,0xb4,0x42,0xfd,0x53,0xaa,0xab,0xd7,0xa3,0xf9,0x7d,0x15,0x26,0xab,0x81,0xc4,0x7a,0x96,0x14,0x94,0x71,0xe1,0x7f,0xc1,0x67,0x5f,0x5f,0x11,0xb4,0x72,0x03,0xf8,0x9b +.byte 0x2f,0x82,0xa3,0x4e,0xda,0xfd,0x2a,0x31,0xf1,0x74,0x6d,0x96,0x7a,0x9c,0xf9,0x01,0xd9,0x55,0x8e,0x52,0xe4,0xae,0x22,0x14,0x7b,0xc0,0x5a,0xc4,0x31,0x23,0x9a,0x2e,0x9d,0x86,0x86,0xd5,0x66,0xc8,0x8b,0xdb,0x49,0x5f,0xca,0x57,0x51,0x50,0x75,0x3f,0xeb,0xb1,0xe5,0x84,0x42,0x8f,0x0f,0xca,0x86,0xcf,0xb0,0x17,0x06,0x06,0x46,0x8c +.byte 0x4a,0x84,0xde,0x28,0x84,0x24,0x7f,0x33,0x48,0xe8,0x89,0x87,0x1f,0x02,0x07,0x4f,0x36,0xa9,0xdc,0x8a,0x42,0xb6,0xc7,0x9c,0x47,0xd4,0xd4,0x2d,0xc0,0x17,0xb0,0xe6,0x23,0xb7,0xae,0x0d,0x9f,0x38,0x0a,0xdf,0x7f,0x73,0xbf,0x93,0x19,0x05,0x23,0xbf,0xc0,0x53,0x2d,0xcd,0x3e,0x73,0x01,0x78,0xa7,0xdc,0x6c,0x85,0x1d,0x25,0xc5,0x54 +.byte 0x68,0x95,0xc1,0x20,0x65,0xd9,0x01,0x85,0x7d,0xc9,0xba,0x63,0x43,0x7a,0x23,0xbb,0x95,0x3a,0x76,0x2d,0x75,0x1e,0xac,0x66,0x3e,0x20,0x30,0x8d,0x37,0x64,0x3c,0xc7,0x6f,0x36,0xb8,0x34,0x60,0xd2,0xb4,0x54,0x07,0x52,0x6c,0xfa,0x04,0xfe,0x2b,0x71,0x03,0x03,0x97,0xfc,0x4a,0xf9,0x4d,0x44,0x1a,0xf9,0xd7,0x4b,0xe5,0xe1,0xf9,0xb9 +.byte 0x41,0xa0,0x5b,0xa2,0x69,0x48,0xba,0xeb,0xcc,0x4e,0x55,0x4b,0xbd,0x41,0x09,0xa8,0x90,0x5c,0xc6,0xe3,0x20,0x0c,0x8f,0xfc,0x7e,0x0e,0x4f,0x3d,0x47,0x65,0x40,0x1e,0x79,0x9a,0xe0,0x8f,0x8f,0xe9,0xcb,0xaa,0x04,0xb8,0xd9,0x91,0x30,0x2a,0x4c,0x17,0x44,0xc0,0x03,0x4c,0x37,0xd3,0xdb,0x20,0xe5,0x8e,0x70,0x87,0x57,0x4f,0x8a,0xcf +.byte 0xee,0x64,0xbc,0xef,0x0f,0x9e,0xcf,0x95,0x5e,0x11,0x4f,0x7a,0x35,0x53,0x8c,0x85,0x6a,0xff,0x72,0x1b,0x35,0x51,0x89,0xf8,0x94,0x65,0x97,0xec,0xfe,0xbd,0x00,0x29,0x3d,0xe8,0x96,0x23,0xa4,0xe3,0xcf,0x81,0xb2,0x8f,0x73,0x4c,0x05,0xc3,0xcc,0x37,0x22,0x97,0xa0,0xda,0x49,0xb2,0xbd,0x07,0x2b,0x26,0xa0,0x6f,0x6b,0x1f,0xa6,0x15 +.byte 0xe3,0x6e,0x12,0xa4,0x51,0x1b,0x72,0x22,0x08,0xfe,0xf7,0x93,0x1a,0x9f,0x62,0x12,0xd4,0x11,0x1f,0xd1,0x80,0xeb,0xa4,0xb1,0xf4,0x37,0x3b,0x60,0xd8,0x2b,0x53,0xae,0x69,0xf8,0x48,0x38,0xf4,0x20,0x28,0xe1,0xfb,0x6a,0xec,0x6e,0x11,0x2e,0x2c,0x59,0x62,0x23,0x8a,0x82,0xc4,0x33,0x7b,0xdc,0x33,0x99,0x41,0x29,0x4f,0xa1,0x6e,0x3a +.byte 0x48,0x13,0x1c,0x1f,0xa3,0x1f,0xd2,0x02,0x79,0xe1,0xe4,0xb9,0x99,0xa4,0x50,0xea,0x53,0x96,0x4e,0x82,0x7c,0xee,0x65,0x07,0x26,0x87,0xf9,0x9d,0x45,0x17,0x37,0x61,0x7e,0x5f,0xb9,0xd2,0x55,0x3c,0x45,0xf7,0xec,0x33,0x08,0xa3,0x41,0x24,0x8f,0xb2,0x75,0x41,0xb6,0xa2,0x21,0xfe,0x94,0x7e,0x1e,0xe6,0x03,0x6e,0xf4,0xeb,0x23,0x59 +.byte 0x51,0x25,0x99,0x19,0x6d,0xf7,0xe3,0x22,0xd8,0x41,0x0f,0xd5,0xaf,0x0d,0xc6,0x3f,0x8e,0x36,0xee,0x90,0x23,0x67,0x03,0xcb,0xe3,0xaf,0xc4,0xf8,0x22,0x1f,0xd8,0x3e,0x94,0xdf,0x13,0xc9,0x4f,0x17,0x22,0x8c,0x93,0x6b,0x3f,0x60,0x1a,0xbd,0xfa,0x9f,0xe6,0x43,0x45,0xe1,0x0a,0x95,0x21,0x06,0x52,0xbd,0x58,0x56,0x84,0x56,0x36,0xf3 +.byte 0x55,0x58,0x46,0x62,0x6c,0xb3,0xa0,0x29,0x5a,0xfc,0xb4,0x87,0x5f,0x89,0xa5,0xab,0x6d,0x5a,0x44,0xc5,0xc8,0x50,0x83,0xe1,0x41,0xd4,0x97,0x6c,0x08,0xb1,0x43,0x33,0x0d,0x3a,0x8b,0x31,0xa1,0xae,0x77,0x71,0xb7,0x67,0x65,0xd7,0xa7,0xc9,0x6c,0x4a,0x9b,0x80,0xd5,0xbf,0xae,0x0f,0x9b,0xce,0x1a,0xa3,0x26,0xc6,0x19,0xa1,0x8d,0x12 +.byte 0xd9,0x09,0xae,0xac,0x9f,0x4b,0xab,0xaf,0xf6,0xc5,0x9e,0x26,0xe6,0x23,0xcb,0x3e,0x60,0x1e,0x3d,0xa1,0xec,0x59,0xca,0xf1,0x87,0x0e,0xaf,0x47,0x5f,0xab,0x17,0x99,0xbd,0x87,0x1c,0x1d,0x00,0xd6,0xb2,0x59,0x56,0xdd,0x49,0x20,0xb5,0x91,0xf8,0x0c,0xf1,0x80,0xc6,0x37,0x92,0xd7,0x2c,0x02,0x0d,0x47,0x1b,0x1b,0x6b,0x3f,0x60,0xd0 +.byte 0x21,0x9b,0x49,0x47,0x3c,0xaa,0x83,0x44,0x1b,0x92,0x8e,0xec,0x63,0x40,0xd6,0x9a,0x48,0x7c,0x5e,0x97,0xe4,0xf0,0x84,0x36,0x30,0x11,0x0b,0x7c,0x79,0x3b,0xff,0xdf,0x77,0xf6,0xc9,0xdb,0x49,0xdd,0x2a,0xe7,0xca,0x9a,0x5b,0xef,0xd4,0x84,0xe2,0x44,0x8b,0xef,0x4e,0x0d,0x13,0xd6,0xbb,0xba,0x29,0x02,0xae,0xfc,0x55,0x24,0xfa,0x4b +.byte 0x7d,0x71,0xc9,0xde,0x71,0x36,0xbc,0xac,0x31,0x5c,0xf8,0x20,0xdd,0xb8,0xae,0x03,0xd3,0xb0,0xdc,0x27,0x7f,0xc5,0xff,0xda,0x8a,0x36,0x2d,0x8f,0xae,0xbd,0xf8,0x92,0x28,0x8e,0x0c,0xc3,0xaf,0x4e,0x33,0xf0,0x71,0xdb,0xad,0x4d,0xc1,0xef,0x52,0x1c,0x84,0xdc,0x0d,0xf3,0xab,0xb9,0x0b,0xe0,0x18,0xa5,0x06,0xdc,0x78,0x41,0x73,0x35 +.byte 0x95,0x37,0x84,0xba,0xc1,0x4e,0x0a,0xe4,0x4d,0x05,0xfe,0x9d,0x74,0x68,0x4a,0x35,0xf0,0x15,0xaa,0x7b,0xfe,0x08,0x47,0xb2,0x84,0x65,0x1d,0x0d,0x9f,0xe7,0xe0,0x04,0xf9,0x1c,0xac,0x66,0xb3,0x75,0x96,0x8f,0x25,0xb6,0x29,0x53,0x52,0x50,0x7a,0x50,0xd1,0x89,0xc7,0x05,0xfb,0x3a,0xb0,0xfa,0x6b,0x96,0x9d,0xfc,0xb0,0xcd,0x68,0x21 +.byte 0x61,0xf6,0x65,0x64,0xa7,0xc6,0x56,0xbd,0xf0,0x9b,0x4a,0x9a,0xe2,0x8c,0xd8,0x88,0x70,0x82,0x0c,0x87,0x51,0x77,0x23,0xd8,0xd8,0xf8,0x4a,0xfe,0xf4,0x6d,0x3f,0x2a,0x36,0x0c,0x67,0x85,0x43,0x13,0x83,0xd5,0xe9,0x32,0xff,0x8c,0xec,0xd4,0x7f,0xd2,0x32,0x4d,0x4e,0xec,0x76,0x55,0xf9,0x0d,0xb7,0x57,0x6c,0xc4,0xd6,0x22,0xd3,0x6e +.byte 0x71,0x23,0x68,0x45,0x03,0x37,0x27,0x3d,0x56,0x89,0xbb,0x7c,0xf1,0xa8,0x09,0xd6,0xb2,0xc5,0xe6,0xf6,0x72,0x77,0x3e,0xb0,0x8a,0x3d,0x17,0xbd,0xd5,0x0d,0xdb,0x62,0xa7,0x07,0x66,0x35,0x19,0x12,0xff,0xcf,0xdd,0xb3,0x09,0xa3,0x58,0x5b,0x0d,0x87,0x76,0x33,0x28,0x98,0x91,0x48,0xac,0xa1,0x22,0x9f,0xda,0x36,0x03,0x8a,0xc1,0x5e +.byte 0x6c,0x2e,0x42,0x8e,0x1a,0x7d,0x75,0x69,0xb2,0xcf,0xb0,0x14,0x80,0xa8,0x91,0xc2,0xbc,0x24,0x8f,0x25,0x9a,0x9e,0xa3,0x4d,0x46,0x55,0x53,0x05,0x0c,0xf8,0xdb,0xe0,0xee,0xe4,0x32,0xff,0x39,0x74,0x9a,0xa8,0xf7,0xa4,0x6e,0x5b,0x9a,0x89,0x33,0x40,0xf4,0xce,0x54,0x4a,0x18,0xdb,0x11,0xe4,0x83,0x69,0x52,0xef,0x12,0xc6,0x13,0x6e +.byte 0x2a,0x14,0xb9,0x8e,0x38,0x8d,0x6b,0xef,0x02,0xc8,0x66,0xf0,0x78,0xaa,0xa6,0x04,0xa3,0xa5,0x1d,0xdb,0xac,0x02,0x23,0x4c,0x2a,0xa5,0xbf,0x66,0xa4,0x47,0xa9,0x8e,0x50,0xd2,0xf8,0xf5,0x0d,0x0f,0xc9,0x07,0xd8,0x1a,0x94,0x84,0xcf,0xb3,0x56,0x53,0x5f,0x83,0x1d,0x30,0xb6,0x94,0x36,0xf4,0x16,0x72,0x8c,0x6d,0x49,0xe4,0x6d,0x93 +.byte 0xb1,0xa1,0x97,0x70,0x75,0x47,0x3a,0x7e,0xa6,0x39,0x1d,0xf5,0xcc,0x37,0xaa,0x90,0x53,0xe1,0x9b,0xcb,0x9a,0x97,0x7d,0x18,0x4a,0x3c,0x1f,0x05,0xf4,0xe3,0x6f,0x7a,0x19,0x84,0xbc,0x68,0xa4,0x6e,0x5a,0xb5,0x7a,0x51,0xda,0xf5,0x75,0x1e,0xfe,0xb0,0x73,0x43,0x39,0x98,0xb7,0x1e,0x17,0x36,0x35,0x15,0x64,0x90,0xb6,0x83,0x43,0x8f +.byte 0xcd,0xb6,0x8c,0xc4,0xe4,0xee,0x0e,0x1c,0xbd,0x3a,0xe6,0x6e,0x44,0x73,0x88,0x30,0xa0,0xf0,0x97,0xf5,0x5e,0x12,0xea,0xd9,0xd7,0xb5,0xc5,0x1d,0xc7,0xc8,0x55,0xbb,0x2c,0x64,0x43,0x50,0x15,0x71,0x02,0xd3,0xf9,0xb4,0xe7,0x2f,0x0f,0x98,0x9e,0x87,0x40,0x2a,0x61,0x06,0x44,0xc2,0x47,0xaf,0x44,0x4f,0xdd,0xa3,0xb0,0xb2,0x8d,0x8c +.byte 0x83,0x96,0xd3,0x2a,0x38,0xdf,0x87,0x5d,0x1c,0x64,0xc8,0x4f,0x3c,0x41,0xc7,0xf8,0x64,0x58,0xa6,0x9b,0xcb,0xcd,0x77,0xdb,0x38,0xe7,0x30,0xb6,0x91,0x88,0xd8,0x9d,0x29,0x71,0x12,0x9e,0xdf,0x20,0xd9,0x14,0xa3,0xa0,0xbd,0x0a,0x99,0x67,0x0a,0xe1,0xe9,0xba,0xd0,0x1b,0xba,0xc8,0x8d,0x76,0x10,0xe8,0x30,0xa1,0x93,0xf4,0x95,0x6a +.byte 0x12,0xd5,0x95,0x31,0x7f,0xdb,0x33,0xfc,0xbf,0x7a,0xbe,0xe4,0xfa,0x50,0x1b,0x24,0x75,0x9b,0xf8,0x81,0x34,0xc8,0xfb,0xda,0x3c,0x6f,0x3b,0x9a,0xb2,0x6f,0x94,0x0c,0xd9,0xc3,0x05,0xd6,0x96,0x10,0x27,0xdb,0xd6,0x88,0x72,0xe4,0x8f,0xfc,0xd3,0x52,0xf8,0x63,0xb2,0xce,0xf1,0x2a,0xbc,0x1c,0x23,0x9d,0xfb,0x27,0xdd,0x8d,0xe4,0xcc +.byte 0x63,0xcf,0xad,0xe6,0xe9,0x4f,0xb8,0x8a,0x20,0x47,0x75,0x73,0x3f,0x27,0x07,0x5d,0x8c,0x8c,0x6e,0x7a,0x91,0xe2,0xf6,0xd5,0x70,0xd8,0x00,0xe5,0x0f,0xde,0x78,0xd8,0xb4,0xd3,0x18,0x5a,0x24,0x43,0x91,0x0c,0xbe,0x8b,0x1b,0x88,0x48,0x7e,0x94,0x05,0xd0,0xec,0xd2,0x71,0x26,0xc7,0x70,0xeb,0x8a,0x83,0x01,0x52,0xdb,0xe5,0x76,0x31 +.byte 0x19,0x14,0x13,0x90,0x5b,0x5a,0x94,0x89,0xe2,0x4e,0x2d,0x17,0xf6,0xbc,0x67,0xee,0x51,0xd4,0x00,0x83,0xe5,0x18,0xa5,0x54,0x6c,0xd2,0x7a,0x1f,0xdb,0x6f,0xed,0x7f,0x07,0xbb,0x9f,0x3a,0xc2,0x8c,0x04,0xf9,0x9a,0x55,0xe3,0x70,0xf3,0x36,0xfd,0x44,0x05,0xd9,0xf3,0xe1,0x87,0x2c,0x29,0xec,0x30,0x8b,0xb7,0xde,0x27,0xa4,0xcd,0xdf +.byte 0x64,0x0b,0x62,0xdf,0x34,0xa0,0xf5,0xa1,0x69,0xc9,0x0b,0x00,0x81,0xf4,0x03,0x5e,0xef,0xb8,0x26,0x49,0x71,0x5e,0xcd,0x76,0xa2,0x38,0x25,0x1f,0x92,0xc3,0xbf,0xdb,0xb3,0x29,0x37,0x06,0xc5,0xc2,0x3b,0xd8,0xbd,0x55,0xf2,0x7f,0xd5,0xd5,0x34,0x32,0xf1,0xa0,0x92,0x9b,0x1c,0xee,0x6f,0x48,0x40,0x6b,0xd1,0x45,0x09,0x3f,0xaf,0xdc +.byte 0xe1,0xac,0x75,0x9a,0x33,0xf7,0x50,0x4f,0x2c,0x3c,0x30,0x69,0x69,0x84,0xcb,0xe9,0xca,0xdf,0x8d,0x02,0x5d,0x30,0x71,0x99,0x7b,0xd5,0xb2,0x55,0xdd,0x9c,0x2f,0xae,0x11,0x41,0x01,0x6b,0xf7,0x95,0xe3,0xda,0xe3,0xcc,0xa4,0x17,0xd0,0x50,0xf9,0x4c,0x31,0x2b,0x4e,0xf7,0x49,0xbb,0x75,0x8f,0x28,0x19,0x9f,0x89,0x7b,0x78,0x80,0x41 +.byte 0x50,0x5a,0x5c,0x1e,0x82,0x93,0x9f,0x4f,0x61,0x96,0x29,0x0c,0x25,0xb3,0xe6,0xff,0x86,0x90,0x78,0x09,0x04,0xf9,0x2a,0x3d,0xa1,0xd5,0x68,0xa8,0x0d,0xd9,0x41,0x01,0xdc,0x41,0x01,0xff,0x20,0xc0,0x63,0x0b,0x4d,0xd5,0x80,0x78,0x82,0x05,0x51,0x62,0x09,0xf9,0x11,0xbd,0xde,0xc0,0x7d,0x3f,0xf2,0x30,0xfb,0x41,0x68,0x39,0xb0,0xc2 +.byte 0x2e,0x33,0x4e,0xa7,0x85,0x01,0x6b,0xd1,0xf9,0x78,0xef,0xe9,0x7c,0x0e,0xaf,0x13,0x1a,0xf5,0x97,0xde,0xf0,0xbb,0x67,0xf9,0x9b,0xab,0xee,0x86,0x73,0x9b,0x23,0x6c,0x56,0x0d,0xa0,0xda,0x4c,0xff,0x2b,0xc5,0x92,0xdb,0xee,0xbd,0xba,0x3a,0x54,0x21,0xc0,0x5c,0xfe,0x21,0xf1,0xbd,0xac,0xaf,0xa3,0x7a,0x52,0x62,0x15,0x8b,0x8f,0xb5 +.byte 0x82,0xc6,0x1a,0xfb,0x22,0xbc,0xa2,0x05,0x42,0xfe,0xb4,0x12,0x6b,0xad,0xa9,0x76,0xb7,0x6b,0x1c,0xd8,0x34,0x5c,0x7d,0xd5,0xa9,0x0d,0x91,0xf6,0xc1,0x47,0x69,0xbc,0x43,0x8f,0xb7,0xfc,0x84,0x2e,0xa0,0x8e,0x3f,0x52,0x3b,0xbd,0x1f,0x28,0x6b,0xc8,0x13,0x37,0xd6,0x44,0xe9,0x8d,0x08,0x92,0x96,0xe5,0x2c,0x57,0x34,0x59,0x21,0x04 +.byte 0xa8,0xaa,0x56,0x25,0xa4,0xc8,0xae,0x68,0x17,0x9e,0xa4,0xf4,0x42,0x64,0x57,0x4b,0x54,0x85,0x8a,0xd1,0x09,0x09,0x25,0x18,0x05,0xb0,0x09,0x9d,0xd9,0x75,0x21,0xd3,0x75,0x31,0xf8,0x35,0x46,0xc8,0xd4,0x47,0x9d,0x87,0xeb,0x40,0x95,0x19,0x24,0x7c,0x6e,0xe9,0xd5,0x14,0xaa,0xc3,0xbe,0x22,0x18,0xc1,0xa0,0x5f,0x34,0x98,0xc2,0x4d +.byte 0x3f,0xa6,0x09,0x57,0x1b,0x75,0xc6,0x89,0xee,0xf0,0xbd,0xbc,0x1a,0xd3,0xea,0x6e,0x82,0x06,0x90,0x4f,0xbb,0x61,0xac,0xbb,0x3e,0x8c,0x94,0xea,0x69,0x58,0x26,0x2e,0x17,0x78,0xad,0x14,0xa4,0x79,0x14,0xbd,0xc1,0x78,0xf9,0xbb,0x11,0x7e,0x8d,0xbf,0x3e,0xc8,0xc5,0x69,0xd7,0x5a,0x4c,0x4b,0x86,0x25,0x4c,0xe9,0x3a,0xc2,0xd9,0xf8 +.byte 0xbf,0x5e,0x46,0x4f,0xca,0xba,0x25,0x58,0x73,0x82,0x02,0x8a,0x41,0x9e,0x2d,0xa9,0x08,0xb4,0x60,0x2a,0x11,0x2c,0x2f,0x3d,0x5e,0x68,0xd8,0xa9,0x2e,0x1c,0xfa,0xdc,0xda,0xfb,0xfb,0xf3,0xb2,0x66,0xd3,0x57,0xe6,0x09,0xeb,0xe5,0xf4,0xed,0x2d,0xb7,0x3a,0xce,0x69,0x2d,0xb4,0x79,0x1a,0x99,0x9d,0xc8,0x99,0x9f,0x9b,0x78,0xd4,0x8a +.byte 0x73,0xd5,0x89,0x9f,0xda,0xdf,0xd0,0xca,0x6b,0x63,0x5a,0x1e,0xe0,0x2f,0x01,0xa4,0xd0,0x62,0xc0,0x5f,0x4e,0xd9,0xd3,0x47,0xe4,0x68,0x73,0x8c,0x87,0x50,0x91,0xec,0x8e,0x0b,0xa7,0xf0,0x4c,0x32,0x19,0xaa,0x00,0xbd,0xe4,0x20,0xab,0x5c,0x00,0xdb,0x18,0xc0,0xff,0xc1,0xc0,0x8f,0xa2,0x8c,0x47,0x91,0x86,0xde,0xa9,0x09,0xb5,0x86 +.byte 0xcc,0x1d,0x7f,0x4b,0x7d,0x16,0xf6,0x21,0xd0,0xf8,0xaa,0x16,0x20,0xa9,0xac,0x3e,0xef,0x56,0xee,0x0e,0x1d,0xd6,0x44,0x7d,0xa9,0x84,0x41,0x8d,0x69,0x69,0x92,0x74,0x87,0x3b,0x8a,0xbf,0x40,0x29,0x45,0xf9,0xa8,0x52,0x8c,0x99,0x95,0xe7,0x6a,0xcd,0x3f,0x74,0x2d,0xde,0x82,0x47,0x41,0xa6,0xd9,0x5a,0x30,0x6c,0x20,0x98,0x3f,0xfb +.byte 0x66,0x08,0x73,0x68,0xe1,0xcd,0xfd,0x3c,0x4f,0x33,0x6b,0x42,0xa4,0xab,0x78,0x22,0xb5,0xd9,0x6f,0x99,0xcb,0x85,0x6a,0x14,0xb9,0xd3,0x0f,0xfb,0xd7,0x07,0x7b,0xbe,0x6a,0xd9,0xba,0xde,0x98,0xac,0xd8,0xe5,0x40,0xcd,0x59,0x7f,0x88,0x3c,0x4e,0xfa,0xfe,0xbe,0x48,0x21,0xb5,0x40,0xd5,0xc8,0x1e,0x8a,0x56,0xd9,0xec,0x25,0xad,0x5e +.byte 0x31,0xf3,0xf2,0x3d,0x0b,0x56,0xb5,0x20,0x08,0xd3,0x02,0x81,0x93,0x29,0x3d,0xbd,0x0a,0x9c,0x26,0x74,0xdb,0x6b,0x7e,0xd1,0x4a,0x1a,0x1c,0x47,0x49,0x34,0xba,0x08,0x7a,0x6a,0xb3,0xd6,0x3b,0xd0,0x28,0x50,0xa1,0xd8,0x17,0x85,0x61,0xab,0x24,0x22,0xda,0xc8,0xb4,0x1b,0x07,0x2e,0x67,0x77,0x84,0xdc,0x6f,0xfd,0x51,0xa5,0xe8,0x34 +.byte 0x63,0xbd,0xae,0xae,0xc7,0x84,0x1d,0x60,0xc8,0x8f,0xde,0x22,0xfd,0x85,0xb4,0x12,0xb4,0x04,0x5b,0xe7,0xb5,0x58,0xf8,0x56,0x66,0xa3,0xb7,0x1e,0x54,0xd0,0xdb,0x12,0xaa,0x9c,0x89,0x5b,0xfa,0xf4,0xe7,0xe2,0xf4,0x9c,0x08,0xa8,0xbe,0x6b,0xe3,0xce,0x6a,0x88,0xb5,0x74,0xb9,0x49,0xaa,0x7b,0xcd,0xbc,0x17,0x81,0x61,0xe2,0x28,0x6f +.byte 0x4b,0xe8,0xa4,0x55,0xc5,0x1e,0x69,0x21,0x8f,0xfd,0xa8,0xd0,0xb9,0x6f,0x1b,0xfe,0x8c,0x5e,0xf9,0x7d,0xd9,0xc2,0xbe,0x0f,0x6f,0xbd,0xa7,0x94,0x10,0x4e,0xe0,0x5a,0xbb,0xa3,0x40,0x9a,0x5a,0xad,0x10,0x97,0x92,0x3b,0xbd,0xa7,0x75,0x77,0xc6,0xa6,0xde,0x42,0x00,0x3b,0xf7,0xe4,0xf4,0xd7,0xdd,0xaa,0x31,0x1e,0x64,0xae,0x17,0x0a +.byte 0x25,0xa0,0x94,0x5f,0x3c,0xbc,0x3d,0x00,0x00,0xd3,0xba,0x7b,0x98,0x81,0xe1,0xdf,0xba,0x60,0x08,0x2a,0xe5,0x66,0x08,0x3e,0xfa,0x81,0x0a,0x89,0x4e,0xe5,0x3b,0xc3,0xdf,0x21,0x9b,0x54,0xa3,0xb3,0xc3,0xc1,0xce,0xb4,0xaa,0x06,0xee,0x2e,0x34,0x55,0xcc,0x8b,0x0f,0xcd,0x1d,0x1b,0xd9,0x9e,0x59,0xf0,0x93,0xc9,0xba,0x35,0x5c,0x99 +.byte 0xf6,0x86,0x9e,0xe9,0xf8,0x84,0x80,0x05,0x76,0x6f,0x8b,0x38,0xb6,0xe0,0xdf,0x0c,0xb3,0xc7,0x6e,0x62,0x53,0xe4,0x69,0x0a,0xc1,0xcf,0x5b,0x84,0x75,0x78,0x56,0x35,0xa5,0x26,0xc6,0xae,0x76,0x2e,0xc8,0x29,0x8d,0x16,0xd1,0x4f,0x27,0x36,0x22,0x41,0x31,0xfb,0xbe,0xd0,0xf9,0x0a,0x06,0xbf,0x59,0x6e,0x06,0x20,0x0d,0x52,0x66,0x63 +.byte 0x38,0x2a,0xb6,0x15,0x0f,0x51,0x14,0x0b,0xd1,0x63,0x40,0x2a,0xfe,0x88,0x51,0x53,0x5d,0x82,0x4e,0x1b,0x91,0x30,0x7a,0x09,0xec,0xb6,0x53,0x10,0x87,0xba,0x34,0x1f,0x8a,0xf7,0x85,0x31,0x77,0x76,0xba,0x55,0x07,0x6b,0x80,0x5d,0x14,0x23,0x50,0xef,0x07,0x91,0xc5,0x71,0x3a,0x55,0x44,0x9d,0xbf,0xe6,0xab,0xde,0x7c,0xdd,0xe0,0xcb +.byte 0xcc,0xc1,0x78,0xb4,0x8c,0xd1,0x35,0x73,0x80,0x9c,0x44,0xff,0xf8,0x8a,0xaa,0x9a,0x94,0xcf,0xc9,0x51,0xfc,0xa5,0x3d,0x86,0xd6,0x67,0x71,0x1b,0xdb,0x83,0xb2,0x67,0xb0,0x17,0xce,0x13,0x1b,0x7a,0x84,0xc8,0xaf,0x69,0x7e,0xf0,0xab,0xc5,0x8c,0x37,0x12,0x43,0x33,0x5f,0xaa,0xde,0xcf,0x4c,0x73,0x7f,0x6b,0x80,0x18,0x27,0x72,0x62 +.byte 0xe8,0x3d,0x1c,0x94,0x91,0xfa,0x33,0xef,0x13,0x94,0x7f,0xb6,0x53,0xe3,0xd7,0x73,0x05,0x3e,0xe8,0x45,0xde,0x1e,0x1d,0xa4,0x41,0x11,0x0a,0x7f,0x62,0x6e,0x9f,0x9f,0xec,0xe9,0x87,0xe0,0x5d,0xbb,0xbc,0x0b,0x37,0xa2,0xf3,0x68,0x8a,0x24,0xec,0x98,0xe5,0x5d,0xbf,0xa1,0x60,0x2b,0xc2,0x74,0x4b,0x8b,0x85,0x44,0x28,0x02,0xd5,0xb9 +.byte 0xae,0x00,0x37,0x1e,0x0b,0x46,0xe6,0x40,0xf1,0xdc,0xa0,0xfc,0xae,0x04,0x7f,0xb6,0x46,0xa3,0x22,0x79,0x92,0xda,0x89,0xa0,0x38,0xf0,0xa2,0x4a,0x76,0x79,0x0c,0x46,0x4d,0xa9,0xe6,0x75,0xff,0x01,0xb3,0xe4,0x13,0xc2,0x53,0xe9,0x6d,0x1f,0xdd,0x88,0xcf,0x10,0xf5,0x16,0xef,0x05,0x59,0x51,0x15,0x49,0x17,0xda,0xff,0x0e,0xb3,0xb9 +.byte 0xae,0x79,0xc6,0xb1,0x94,0x08,0x09,0x30,0x9f,0x2a,0xfd,0x55,0xc0,0x41,0x8c,0xe5,0x0e,0xee,0xc2,0xa0,0x05,0x36,0x66,0x8d,0x9a,0xcc,0xc9,0xeb,0x1d,0x34,0xc0,0x1a,0x29,0xc2,0xcd,0xb7,0x25,0xd3,0x83,0xf8,0x1e,0xa0,0xf4,0x50,0xd4,0x08,0x0d,0xcb,0x6a,0x2f,0xa5,0x8b,0x30,0x94,0x89,0xea,0x94,0x6c,0x00,0x7e,0x7f,0xb5,0x4d,0x61 +.byte 0xa7,0x9d,0x94,0xcc,0x14,0x8f,0x75,0x1f,0xef,0x2b,0xbe,0x37,0xdd,0x19,0x41,0x2e,0x90,0x36,0x27,0xa5,0xa9,0x6c,0x75,0x8c,0x2d,0xe3,0x97,0x74,0x91,0xf3,0xb8,0xcb,0xcb,0x74,0xba,0xf0,0x57,0x70,0x89,0xee,0x4d,0xc5,0xfe,0x3e,0x60,0xe3,0x5b,0x28,0x36,0x91,0x6f,0xcd,0x6c,0x33,0xb6,0x44,0x0c,0xce,0x81,0xe4,0xdb,0x84,0xbe,0x4e +.byte 0xef,0xb8,0x75,0xf7,0x8b,0xb0,0xb7,0x0d,0x00,0x13,0x54,0x39,0xfd,0x9e,0x86,0x5c,0x59,0xd0,0x84,0x0f,0x97,0xc0,0xf8,0xfa,0x4a,0xcf,0x57,0xb8,0x24,0xf0,0xa8,0x40,0x70,0x9d,0xc4,0xe5,0xc7,0xc9,0xcb,0xb6,0xf4,0x0b,0xb5,0xcc,0xe0,0x90,0x2b,0x42,0x81,0xd6,0x59,0x2e,0x11,0xbd,0xe8,0xf5,0xef,0xa8,0x2b,0xdb,0x93,0x62,0x1e,0xef +.byte 0x3a,0x5f,0xf5,0x47,0x15,0x1f,0x03,0x6f,0x40,0x85,0xff,0x50,0x89,0x2e,0x72,0x8f,0x5c,0x0d,0x61,0x84,0x8d,0x8a,0x8f,0x2a,0x47,0x7c,0x97,0xfe,0x8a,0x97,0x6c,0xd5,0x1c,0x97,0xfa,0x59,0xbe,0x2c,0x0f,0x4d,0x85,0x7f,0x18,0xe3,0xea,0xe8,0xde,0x5a,0xf3,0x67,0xe1,0x71,0x7e,0x81,0xa3,0x74,0x0d,0xf4,0x3d,0x5a,0xec,0xc1,0xcf,0x6f +.byte 0x08,0x0f,0x5a,0x63,0x72,0x0b,0x46,0x5d,0x38,0x80,0xea,0xb7,0x12,0x5d,0xce,0x37,0x26,0xaa,0xd3,0x0d,0x93,0x4a,0x34,0x20,0xd5,0x51,0x54,0x1c,0x5e,0x53,0xa9,0xed,0x26,0x3c,0x29,0xaf,0xbe,0x73,0x34,0xa5,0xc3,0xbf,0x8c,0x8a,0xc3,0x30,0x89,0xaf,0xa9,0x2d,0x28,0x35,0x7d,0x6b,0x84,0x23,0x22,0xee,0x8c,0x82,0x04,0xbd,0x26,0x52 +.byte 0x26,0x73,0x76,0x05,0x35,0x0c,0xec,0xf7,0x54,0xb2,0x17,0x68,0xe9,0x68,0x67,0xbb,0x0d,0x98,0x19,0x32,0xa7,0xdb,0xf9,0xef,0x42,0xe7,0xc2,0xe2,0x39,0x9c,0xae,0xbb,0xdb,0x91,0x28,0x82,0x88,0x23,0x61,0x50,0x6d,0x61,0x39,0x73,0xf8,0x6a,0xee,0xf3,0xa9,0x2c,0x78,0x0d,0x5a,0xed,0xb1,0x08,0x8f,0x24,0xe5,0xb7,0xa4,0xdf,0x65,0x9a +.byte 0x72,0x3a,0x39,0x9c,0xf4,0x43,0xdc,0x8a,0xa3,0x3d,0xb5,0x1e,0x7b,0xe5,0x83,0x11,0x07,0xab,0x62,0x7e,0xac,0xab,0x52,0x94,0x0b,0xaf,0xdf,0x54,0x18,0xf1,0xc0,0x9f,0x1c,0x33,0x02,0xd9,0x62,0xc3,0xcc,0xaf,0x32,0x09,0x35,0x77,0xad,0x72,0xd6,0xb5,0x2d,0xaf,0xf9,0x39,0xfb,0x95,0xbb,0xf9,0x84,0x80,0x84,0xc8,0xc6,0x6d,0xb5,0x79 +.byte 0x25,0xf4,0x6c,0x71,0x26,0xda,0x74,0x86,0xad,0x52,0x47,0x8b,0x46,0x32,0xf6,0x2c,0x89,0xdb,0x93,0x1f,0x46,0x83,0x91,0x19,0xd2,0x0c,0x29,0x97,0x5f,0xa9,0x2b,0x87,0x0c,0x87,0x89,0xe6,0x63,0xa1,0x36,0xfb,0xfa,0xb4,0xb8,0x8e,0x5f,0xe9,0x8f,0x62,0xd2,0x81,0x1d,0x7b,0xc6,0x14,0x37,0x56,0x73,0x64,0x3d,0x0a,0xfd,0xe5,0x94,0x01 +.byte 0x09,0xc8,0x0d,0xa8,0x92,0xda,0x43,0xc4,0x41,0xca,0x3c,0x27,0x2c,0xbb,0xc4,0xb2,0x77,0x13,0xa6,0xb0,0x0e,0x97,0x6a,0xb2,0x83,0xe5,0x5e,0xa3,0xc0,0xe8,0x5e,0x0b,0xe6,0x00,0x04,0x6c,0x1b,0xac,0x84,0xab,0xd3,0xac,0x5f,0x39,0xc2,0xf8,0xfd,0x66,0xf7,0x97,0xd7,0xb9,0x6b,0xd8,0x2a,0x49,0xf7,0x67,0xd8,0xd5,0xa4,0x89,0x57,0xa6 +.byte 0x8f,0x7c,0xcf,0xaf,0xfe,0x3c,0x92,0xc8,0x23,0x2c,0x26,0x83,0x86,0x16,0x97,0x34,0x71,0x3e,0x82,0x2b,0xc7,0x75,0x5a,0x59,0xb3,0x44,0xdd,0x4e,0xd4,0x6d,0x1b,0x9f,0x3c,0x35,0xc4,0xe4,0xf2,0x95,0xb6,0x90,0x95,0xa7,0xc4,0x03,0x10,0x7d,0x3d,0xeb,0x74,0x29,0xaa,0x0c,0xd3,0x27,0xcd,0x3a,0x85,0x3c,0x88,0xd5,0x9a,0x46,0x84,0x8e +.byte 0x36,0xde,0xe3,0x6a,0x27,0xbf,0xc3,0xd0,0x3e,0xa3,0x0e,0x62,0x1f,0xdf,0x4c,0x02,0xa7,0x11,0x91,0xb0,0x6b,0x50,0xc1,0xe0,0x18,0x5a,0xc0,0x10,0xc7,0x1c,0xb6,0x36,0xac,0xe7,0x7d,0xad,0x34,0x63,0x4f,0x17,0xcc,0x41,0x30,0xec,0xd7,0x14,0xb9,0xfe,0x07,0x5c,0x3d,0xbe,0x08,0x77,0x5b,0xdf,0xa3,0x20,0x56,0x55,0xa2,0x8a,0xe7,0x0d +.byte 0xf6,0xfc,0x91,0x37,0xb8,0x92,0x6c,0xd9,0x5c,0xb0,0xc2,0xf7,0xc0,0x38,0xfa,0x54,0xc6,0xa1,0xd3,0x4d,0xae,0x49,0x0d,0xd1,0xc0,0xef,0xbe,0x27,0xce,0x23,0x8e,0xf2,0x9b,0x68,0x02,0x67,0x8f,0x53,0x9d,0xf6,0x23,0x57,0x85,0xdd,0x8d,0xd7,0xcb,0x47,0xf1,0xd8,0x17,0xd8,0x46,0x72,0x28,0x4b,0xac,0x94,0xd3,0x5d,0x53,0x4f,0x06,0x19 +.byte 0xc6,0x0e,0x0b,0x9f,0x58,0xc6,0x3f,0xea,0x4e,0x83,0x5e,0xd3,0xcc,0x44,0x55,0xa3,0xc7,0x24,0x19,0xea,0x1b,0x18,0xc1,0x18,0x5f,0x21,0x67,0x73,0x32,0x4e,0x31,0x69,0x05,0x40,0x79,0x7c,0x05,0x13,0xdd,0x50,0xea,0xfa,0xc2,0x26,0xe2,0x33,0xff,0x34,0x0d,0xda,0x77,0x27,0xe0,0xe7,0xa6,0x7b,0x8e,0xcd,0xdb,0x92,0x48,0x3a,0x2d,0x52 +.byte 0xf5,0x59,0xca,0xc7,0x47,0xda,0xb7,0xc7,0x8c,0x37,0x5e,0x29,0x30,0xf5,0x57,0x74,0x8b,0x10,0xcb,0x20,0x31,0x4b,0x12,0xe3,0x84,0xd2,0xb2,0xc3,0xd0,0xe3,0x94,0x18,0xa2,0xdc,0x8f,0x4d,0xc3,0x0a,0x43,0x07,0x2c,0x6b,0x41,0x64,0xc0,0x35,0x8f,0x37,0x9b,0xd7,0x78,0xab,0xd0,0xdc,0x1f,0x77,0x55,0xab,0x71,0xc8,0x99,0x98,0x00,0x29 +.byte 0x1c,0xab,0x3c,0x5f,0x82,0x96,0xc2,0xc8,0x9b,0xd4,0x68,0x3f,0x3d,0xe6,0x5a,0x4c,0x1c,0x7b,0x51,0xa3,0x79,0xe8,0x0e,0x8a,0x78,0xdc,0x98,0x63,0x80,0x74,0x32,0x9d,0x7c,0x3a,0x79,0x54,0xa7,0x4c,0xa4,0x4e,0xfc,0xa5,0x8a,0xa4,0x19,0xce,0x84,0xbb,0x8a,0xb9,0x93,0x4a,0x2d,0x82,0x5d,0x1d,0xf8,0x2f,0x85,0xb3,0x90,0x32,0x61,0x6d +.byte 0x13,0x33,0xac,0xbc,0x5d,0x3a,0x54,0x45,0x04,0x50,0x30,0x30,0xc7,0x58,0xbe,0xed,0xdd,0xa1,0xae,0x6d,0xe5,0xde,0xed,0x63,0x9f,0xd4,0x2b,0x8d,0x1f,0x69,0xde,0xda,0x55,0x3f,0x3b,0xe7,0xc8,0x73,0xc0,0x68,0x18,0x6a,0xb3,0xfb,0xce,0xaf,0x46,0x0a,0xcc,0x81,0xa8,0x96,0x6d,0xb6,0xa4,0x74,0xf3,0x8c,0x95,0x2d,0xa1,0xfe,0x09,0xb8 +.byte 0xdb,0x3c,0xcd,0xdc,0x5b,0x0e,0x2d,0xff,0x89,0x8a,0xfd,0x7a,0xe9,0x69,0x0b,0xdd,0x4e,0x9b,0x94,0x64,0xe4,0xb6,0x5d,0x69,0xef,0x9c,0xf6,0xe6,0x44,0x73,0xd5,0x86,0x47,0x63,0x77,0x3e,0x74,0xaa,0xf3,0x6b,0x1f,0x37,0xbf,0xef,0xa2,0xff,0x86,0x61,0x78,0xc4,0xb5,0xbd,0x5a,0x43,0x49,0x80,0x16,0xf2,0x4c,0xec,0x1e,0x07,0x0f,0x41 +.byte 0x60,0x6f,0x3a,0xd2,0xab,0x85,0xc0,0x5c,0xfc,0x9f,0x48,0xad,0x5e,0xe0,0x7d,0x66,0x8e,0x46,0xf1,0xc3,0xb0,0xbc,0x5e,0x3b,0x10,0x7c,0xfc,0xa3,0x27,0xbd,0x8f,0xae,0xd9,0x61,0x39,0xbf,0xca,0x27,0xbb,0xe7,0xda,0x59,0xa8,0x63,0x38,0x16,0xd9,0xb5,0xa6,0xd9,0x1c,0x2b,0xa1,0x42,0xec,0x50,0xd7,0x63,0x09,0x22,0xe0,0x0c,0xb8,0xec +.byte 0x12,0x9b,0xdb,0x8a,0xd3,0x02,0xcf,0x32,0xa9,0x88,0xa4,0x31,0xc8,0xa9,0xf4,0x03,0xf2,0x9d,0xe1,0x41,0xf0,0x0f,0x23,0x65,0xa8,0x99,0x55,0x87,0xf2,0x17,0x66,0xf0,0x94,0xe8,0xe9,0xb6,0xfd,0x10,0xb9,0x55,0xf4,0xda,0x06,0x7a,0xbe,0xe2,0xd3,0xfa,0xb8,0xf7,0x85,0xdf,0xee,0x39,0xdc,0x0f,0xda,0x87,0xf5,0x66,0xd8,0x1b,0x5c,0x0c +.byte 0x13,0xe8,0xa2,0xcd,0xdf,0x47,0x33,0xd7,0xf4,0x5c,0x79,0xc7,0xf4,0x68,0xe4,0x2d,0xa1,0xde,0x5c,0x06,0x1c,0x85,0xf1,0x2a,0xf9,0x73,0x44,0xbc,0xd3,0x57,0x4f,0x0f,0xcd,0xcc,0x40,0xeb,0x9d,0x35,0x8e,0xdf,0x1d,0x4a,0x61,0xd0,0x66,0xb5,0x16,0xce,0x45,0xc0,0xbf,0x01,0xe3,0xb2,0x51,0xba,0x53,0x18,0x2a,0xff,0x19,0xea,0x41,0xa2 +.byte 0xac,0x0b,0x50,0xd3,0xc1,0x6a,0x9c,0xb0,0x34,0x6f,0xa0,0xcb,0xc7,0xc6,0x79,0x5d,0x17,0x3a,0x4c,0xa3,0x16,0xdc,0xac,0x10,0xf0,0x24,0xad,0x9a,0x5b,0xa9,0x7e,0x45,0xcd,0xe9,0xad,0x87,0x04,0xbc,0x2a,0x05,0x59,0xd1,0xdb,0x86,0x22,0x40,0xdf,0xb1,0xff,0x8d,0x3c,0xf8,0x6a,0xf3,0xcb,0x60,0xf9,0x35,0xa6,0x42,0x81,0xcb,0x0f,0x7c +.byte 0xf7,0x24,0x3b,0x0c,0x94,0x32,0xd9,0xec,0xcf,0xd1,0x31,0x3e,0x3e,0xeb,0xa9,0xf2,0x1f,0x2d,0xa7,0x89,0xf7,0x67,0x7d,0x90,0x9d,0x40,0xf2,0xdb,0x07,0x8f,0xb8,0x6f,0xfd,0x78,0x6e,0xd0,0x9e,0xd5,0x7d,0xb0,0x7d,0x65,0xdc,0x6e,0x50,0xec,0x7a,0x5c,0x2c,0x3e,0x6f,0x64,0xa3,0x10,0x34,0xf7,0x71,0xc8,0x82,0xb6,0x96,0xb8,0xb1,0x2a +.byte 0xb4,0x03,0x95,0x75,0x90,0xac,0x6c,0x81,0x17,0x97,0x06,0xd0,0xb8,0xc5,0x98,0xc5,0x9e,0x46,0x07,0x13,0x02,0x9e,0x47,0x69,0xba,0x85,0x2d,0x09,0x86,0x50,0xe4,0x76,0xb1,0xa2,0xbe,0x8b,0x91,0x6b,0x3b,0x76,0xa3,0xb7,0xf5,0x7f,0xfe,0xf1,0xa4,0xf3,0xc3,0x53,0x64,0xef,0x97,0x86,0x96,0x8b,0xc4,0xae,0x06,0x8b,0xe8,0x3c,0xdc,0xff +.byte 0xfa,0xad,0xcb,0xcb,0x53,0x15,0xf2,0xcc,0x9f,0x48,0xf9,0x57,0x6a,0xcd,0xb2,0xee,0x46,0xc0,0xbf,0x82,0x58,0x60,0xda,0x2f,0xbd,0xde,0xc7,0x41,0xcb,0xf1,0x38,0x56,0x9d,0x38,0x38,0x3d,0xea,0x5e,0x38,0xf1,0xd0,0x02,0x35,0xee,0x4c,0x2f,0x1d,0x19,0xbd,0x08,0x01,0xc3,0x8f,0x75,0xe2,0xf3,0x93,0xbb,0x76,0x6b,0xd7,0x87,0x76,0x7f +.byte 0x3b,0x29,0x08,0x9f,0x3a,0xa5,0x44,0x96,0x5a,0xb3,0x78,0xa9,0xbe,0xf7,0x5d,0xda,0x06,0x37,0x98,0x5d,0xbe,0x6e,0xec,0x58,0x53,0xd1,0xa5,0xd7,0x7a,0x16,0xb1,0x59,0x98,0x42,0x37,0x76,0x1b,0xd6,0x2e,0xa7,0xdc,0x45,0xa6,0x9c,0x9c,0x99,0x24,0x0e,0x22,0xae,0x94,0x65,0xeb,0x4e,0x64,0xc3,0xb0,0xac,0x19,0x41,0xf1,0x62,0x65,0xb2 +.byte 0x35,0xf5,0x2f,0xdb,0xd2,0xf0,0x78,0x19,0x35,0x04,0x6f,0x9c,0xf4,0xaf,0x81,0x68,0x4f,0x8b,0x85,0xfa,0x31,0x23,0x06,0xeb,0x37,0x86,0x43,0x51,0xb3,0xd2,0x2a,0xd7,0xd5,0xa9,0x33,0xba,0xfd,0xb5,0x0e,0x6d,0x9a,0x91,0xf9,0xe7,0x27,0xb7,0xff,0xe6,0xe7,0x34,0xc5,0x1a,0xa3,0x45,0x3b,0x71,0x34,0x87,0x7e,0xe7,0xab,0x74,0xc5,0xff +.byte 0xeb,0x23,0x8f,0x3f,0x5d,0x1c,0x91,0x47,0xeb,0x3e,0x5f,0x5a,0xa6,0x5a,0xde,0xa9,0x5f,0xf4,0x8f,0x95,0xc6,0x25,0x3c,0xd5,0xaf,0xfd,0x4d,0x33,0x68,0xe1,0xa3,0x51,0x1b,0x07,0xad,0xb9,0xec,0xf1,0x50,0x51,0xbf,0xeb,0xe8,0x58,0x2a,0x50,0x0e,0x9d,0xc2,0x8a,0x83,0x8c,0xb0,0xb8,0xde,0x1d,0x7b,0x0f,0xff,0xfc,0xfc,0x31,0xe5,0x62 +.byte 0x40,0xc8,0x28,0x30,0x31,0xc9,0x82,0xab,0xbe,0x50,0xe5,0xfe,0x1f,0x49,0x17,0xf9,0xea,0x23,0xc7,0x6d,0x8d,0x63,0xc3,0x70,0x40,0x32,0x0b,0x48,0x7a,0xd9,0x03,0x52,0x1b,0xf4,0x90,0xd6,0x6d,0xd2,0xfc,0xec,0x24,0x7f,0x21,0x2e,0xd4,0xb5,0x60,0x44,0xd9,0x83,0xb0,0x3e,0x75,0x8a,0x6a,0x09,0xab,0xa8,0x4f,0x48,0x3c,0x2b,0x89,0x30 +.byte 0x29,0xdb,0x1a,0x8e,0x68,0xe4,0x89,0xed,0x10,0xe8,0x46,0xa7,0xf9,0x5f,0x7d,0x42,0xe0,0x8d,0xbc,0x3d,0x4d,0xd8,0x06,0x4a,0xf9,0xbb,0x97,0xa7,0xdb,0x24,0x0b,0xfc,0x49,0x92,0x5d,0x80,0xf8,0xed,0x57,0xc7,0x1e,0x82,0xed,0x41,0xb8,0xfd,0x71,0xb9,0xa5,0x11,0x52,0xdd,0x1e,0xa4,0xf1,0x02,0xc7,0x54,0x7c,0xdc,0x37,0x9f,0xfe,0x37 +.byte 0xe8,0xa5,0xcf,0xb0,0x3d,0x25,0x3f,0x24,0xfe,0xf2,0x63,0x97,0x3c,0x13,0xdc,0x31,0x78,0x07,0xf1,0x8e,0xee,0xc6,0x00,0xf8,0xfd,0x84,0x53,0x4d,0x92,0xa1,0xef,0xd0,0xb1,0x12,0x0a,0x12,0x91,0xeb,0x52,0xdd,0x6e,0x15,0x98,0xd2,0xe1,0x53,0x7a,0x0e,0x02,0x83,0xd3,0xd1,0xde,0x72,0x6e,0x5b,0x4b,0x8d,0x40,0xe3,0x2d,0x22,0x59,0x9d +.byte 0xee,0xbe,0x43,0x18,0x62,0x8c,0x77,0x18,0x91,0xf5,0x9e,0xbc,0x3e,0x8b,0x77,0xb6,0xdb,0x5c,0xcb,0xcd,0xdb,0x36,0xea,0xf5,0x1d,0x9b,0xa7,0x13,0xef,0xda,0xd0,0xe8,0xd8,0xb2,0x4c,0xc6,0x19,0x3d,0x77,0x2d,0x0d,0xad,0xe4,0x32,0x24,0xe9,0xd4,0x7f,0x72,0x1d,0xc6,0x6e,0x83,0x7d,0xb8,0x62,0x64,0x9d,0x9a,0xd7,0x13,0x93,0x92,0xf1 +.byte 0x37,0x98,0xcf,0x44,0x66,0xab,0xd1,0x61,0x6c,0x08,0xa7,0x41,0x4e,0x37,0xc1,0x67,0xfb,0x7c,0x22,0x8f,0xbd,0x93,0xb2,0x09,0x13,0xa0,0x48,0x60,0xaf,0xda,0x73,0x2b,0xa3,0x2a,0xf3,0x4d,0x8e,0x22,0x5b,0x7a,0x32,0xe6,0xca,0xff,0x0e,0xa1,0x0a,0x15,0x33,0x31,0x50,0x71,0x1c,0x85,0x26,0x9b,0x19,0xf2,0xe3,0x69,0x4e,0x2d,0xff,0x79 +.byte 0x80,0xfe,0x2c,0x2f,0x7a,0x49,0x95,0xf3,0x0e,0x78,0xb1,0x0c,0x1c,0x45,0x59,0x68,0x2a,0x37,0xf2,0x48,0x6f,0xd9,0x32,0xf7,0xfc,0xdc,0xbe,0xe3,0xdd,0x61,0x17,0xc0,0x08,0x9d,0xbc,0x2d,0x8d,0x24,0x1c,0xbb,0x53,0xbe,0x37,0x59,0x30,0x87,0xa0,0x14,0xf5,0x08,0xcf,0xd1,0xcc,0x84,0xa7,0x0f,0x69,0xe0,0x77,0x8c,0x0d,0xdc,0x82,0xe5 +.byte 0x88,0x9a,0x58,0x05,0xe3,0x4f,0xdd,0x55,0x1e,0x6e,0x90,0xd5,0x3c,0xa6,0xa6,0x10,0x24,0xe5,0x58,0x97,0xdc,0x31,0x87,0x39,0xdc,0x3a,0xe6,0x24,0x64,0x23,0x45,0xd8,0x01,0x1b,0xf6,0x38,0x68,0x9e,0x62,0x53,0x00,0x97,0x71,0x04,0xb5,0x3b,0x54,0xdb,0xb5,0xcb,0x30,0x91,0x14,0xce,0x94,0xd5,0xe0,0x96,0x70,0x99,0xa5,0xed,0x69,0x32 +.byte 0xc7,0xb7,0x14,0xff,0xc0,0xde,0x19,0x5d,0x31,0xdb,0xa7,0xc0,0x7a,0x94,0xec,0x60,0xfc,0x52,0x71,0x69,0x9b,0xd8,0xbe,0x97,0x0b,0xb5,0x70,0xa7,0x47,0x11,0x37,0x84,0xda,0x3c,0x23,0xfe,0xf2,0x53,0xad,0x55,0x71,0x1e,0x70,0x9b,0x7b,0x61,0x97,0xf8,0x71,0xc4,0xad,0x72,0x98,0x43,0x0c,0x33,0x30,0x2c,0xb2,0xd6,0x21,0x8d,0xbb,0x1b +.byte 0x85,0x82,0x24,0x14,0x85,0x95,0x88,0xff,0x3f,0x8c,0x88,0x96,0xa0,0xf8,0xd7,0x36,0x78,0x37,0x6d,0x92,0x09,0x04,0x76,0x27,0xb9,0xd5,0xea,0x0f,0x07,0x9f,0xe1,0x49,0x0e,0xd1,0x9c,0x46,0xcd,0x2b,0x7a,0x57,0xb6,0x56,0x39,0xe5,0x59,0x6b,0x1b,0x39,0xbf,0x15,0x3b,0x56,0xf5,0xc2,0x08,0x96,0xf5,0x63,0x4c,0x31,0x33,0x65,0x8b,0x74 +.byte 0x4e,0xde,0xa8,0x20,0xe0,0x7c,0x27,0xee,0x91,0x74,0xe8,0x24,0xb3,0xcf,0xa3,0xd4,0xf1,0xb9,0x18,0x43,0x05,0x5d,0x13,0x36,0x82,0xd1,0xbf,0x16,0x89,0x48,0x83,0xf0,0xcc,0x5c,0xbb,0x75,0x7e,0x71,0xc0,0x73,0xd1,0xf5,0x00,0x38,0x7f,0x10,0x98,0xd6,0xb9,0x14,0xea,0xd3,0x3f,0x0f,0xe3,0x61,0x1a,0x5e,0x21,0xd0,0x11,0x58,0x68,0x47 +.byte 0xf2,0xe5,0xe9,0x65,0x9a,0xc1,0xf4,0xa0,0x98,0x8e,0x9f,0x7f,0xbe,0x7e,0xd0,0xb6,0x88,0x4e,0xce,0xc1,0x8b,0xd4,0xd3,0x93,0xb7,0xd8,0xf3,0x0b,0xf3,0x73,0xc9,0x08,0x2f,0xcf,0xd8,0xbd,0xa6,0x1d,0x7c,0xfa,0x44,0x82,0x9f,0x03,0xca,0x56,0x3b,0xbf,0x4d,0x1e,0xbc,0x06,0xc2,0x37,0xfb,0xde,0xd3,0xa9,0xe3,0xae,0x61,0xef,0x26,0x7d +.byte 0xbd,0x2f,0xee,0x2d,0xe1,0x65,0x71,0x77,0xab,0x9c,0x96,0x4f,0x00,0xe2,0xde,0xd7,0x05,0x54,0x00,0xb6,0xaf,0x12,0x0c,0x79,0x1a,0xed,0x20,0x72,0xc7,0x3b,0x3a,0x10,0x15,0x74,0xff,0xbd,0xf8,0xaa,0x8f,0x3a,0x83,0x39,0x24,0xfa,0x53,0x2d,0xc3,0x61,0xfc,0x12,0x6b,0x54,0x33,0xbf,0x83,0xc9,0x59,0x00,0xf0,0xdc,0xa8,0x64,0xbc,0xb5 +.byte 0xc3,0x96,0x60,0x3e,0x7b,0xe2,0x08,0x19,0x92,0x17,0x80,0x9b,0x0c,0x09,0x49,0x68,0x8b,0x15,0xe3,0xce,0x0c,0xfa,0x0c,0x8b,0xf0,0xdc,0x58,0xb0,0x7b,0x82,0x85,0xd2,0x56,0x1c,0xfb,0xb5,0xd0,0x0e,0x0a,0x55,0x61,0xda,0xd8,0x20,0xc1,0x79,0x70,0x3c,0x69,0x8e,0x49,0x5f,0x1c,0xdb,0x22,0xb8,0xdd,0x4c,0x4f,0xca,0xe9,0x0f,0x9a,0x4e +.byte 0xff,0x56,0xbc,0xcf,0x72,0x09,0xa6,0x41,0x38,0xf0,0x7d,0xe7,0x45,0x0a,0x71,0x2c,0x92,0xdd,0x21,0x17,0xb2,0x3b,0x31,0x3c,0x91,0x11,0x69,0x29,0x50,0x31,0xe6,0xa6,0x10,0xc7,0x35,0xe8,0x44,0xec,0x74,0xa3,0x7e,0xb6,0x34,0xe5,0xb7,0xba,0xdf,0x5b,0x2f,0x85,0x02,0x6c,0xb0,0x71,0xb1,0x43,0xff,0x0e,0x47,0x04,0x63,0x4d,0x5b,0x81 +.byte 0x81,0x28,0x8b,0x84,0x79,0xad,0x2a,0x45,0x00,0x1c,0x0c,0x9f,0xef,0x35,0xbb,0x6d,0xc5,0x6a,0x6b,0xef,0x2b,0xae,0x78,0x66,0x05,0x7a,0x61,0x4c,0xe9,0x5e,0xf7,0x95,0x66,0x7e,0x1a,0xa7,0xdf,0x4c,0x4d,0x7c,0x66,0xa5,0x38,0x84,0x86,0x8d,0x66,0xcc,0x7f,0x32,0xb2,0x9c,0xc5,0x0d,0x3d,0xb7,0xb1,0xa6,0xc5,0x80,0x68,0xaf,0x79,0x81 +.byte 0x15,0x8f,0xec,0x50,0x5c,0x1b,0x57,0x31,0xd2,0xb9,0x16,0x66,0xf8,0x16,0xfd,0xcd,0xc7,0xa8,0x84,0x6f,0x35,0xea,0x3f,0xa4,0x72,0x8d,0xad,0xf4,0xd1,0x14,0x46,0xcc,0x06,0xed,0x71,0x39,0x07,0x99,0x28,0xc8,0xf9,0xc4,0xc2,0xec,0xde,0xb8,0x92,0xae,0xc5,0xf8,0xb2,0x49,0xc9,0x32,0x58,0xec,0x9f,0xb0,0x59,0xaf,0x49,0xef,0xe8,0x0d +.byte 0x4c,0x56,0x8d,0xf7,0x57,0xb0,0x09,0xbe,0xc2,0x6a,0x62,0xc4,0x87,0xf3,0x20,0x07,0xc9,0xe3,0x3b,0x31,0xcc,0x8d,0xcf,0x5d,0x18,0x00,0x2a,0x9f,0xde,0x80,0x1a,0x7e,0x95,0x93,0xd1,0xbd,0xe6,0xd4,0x69,0x37,0x96,0xbb,0x70,0xc5,0x3c,0x87,0x8f,0xff,0x95,0x97,0xfe,0x95,0x56,0x7b,0xba,0x03,0x3d,0x29,0x0f,0xdb,0xd0,0x65,0x4f,0xf8 +.byte 0xa8,0xf3,0x42,0x09,0xb5,0x81,0x34,0xc6,0xa9,0x60,0xb9,0xef,0x3e,0x9d,0xc5,0x42,0x1e,0x79,0x5d,0x2b,0xf2,0x46,0x0d,0xeb,0x88,0x84,0x8f,0xad,0x60,0x69,0x57,0x49,0x33,0xb4,0xdd,0xfe,0x10,0x65,0x65,0x51,0xaf,0x68,0xa0,0xce,0xbd,0xe1,0x6e,0x03,0xe1,0x5f,0xba,0x3f,0x36,0xca,0xed,0x20,0x95,0xfa,0xff,0x3c,0x65,0xa8,0xb1,0x6b +.byte 0xc5,0x91,0xa0,0xd5,0x36,0x38,0x1c,0x38,0xe9,0x1d,0x1b,0x67,0x4c,0x17,0xd3,0x29,0x92,0xa2,0x27,0x76,0x3d,0xe2,0x26,0x37,0x2a,0x2c,0xf6,0xee,0x64,0x40,0x8a,0x1c,0x2b,0xc1,0xd3,0x28,0xd0,0xcf,0x2d,0xc2,0x45,0xf4,0x37,0x5a,0x63,0xfb,0x18,0x67,0x01,0x0a,0xe8,0xe2,0x41,0xf7,0x15,0x47,0xa7,0xe9,0xc8,0x05,0xbc,0xc7,0x8f,0xf0 +.byte 0xc3,0xc5,0x9a,0x4e,0x0d,0x7b,0xf0,0x20,0x8c,0x21,0x49,0x99,0x0d,0xf7,0x34,0x84,0x35,0xfb,0x11,0x33,0xd6,0x46,0x14,0x3c,0xf1,0xb3,0x37,0xac,0x75,0x63,0xe7,0x1a,0x19,0xa4,0x49,0xf2,0x58,0x1d,0x56,0x55,0x64,0x46,0x25,0xff,0x7d,0x90,0x34,0x21,0x5d,0x00,0xa1,0xa8,0xaa,0xe0,0x93,0xe7,0xda,0x11,0x34,0x1d,0xa3,0x0c,0x67,0xae +.byte 0xf5,0x60,0x72,0x14,0xdf,0x08,0xf6,0x72,0x3e,0x48,0x41,0x3d,0x00,0x58,0xfb,0x0c,0x15,0x80,0x2d,0xd9,0x72,0x47,0xa6,0x20,0x6a,0x74,0x9e,0x06,0xb9,0xac,0x68,0x3a,0xe7,0xf1,0x19,0xb8,0x0b,0x66,0x07,0x4d,0xa0,0xb5,0xab,0xea,0x70,0xa1,0xdf,0x41,0x76,0x85,0x18,0x5b,0x6f,0x78,0x5a,0x5d,0x08,0xe0,0x1b,0xd8,0x06,0x73,0x1e,0x16 +.byte 0xcb,0xdb,0x02,0xf8,0x96,0x64,0x65,0xc5,0xc1,0x52,0xd4,0xd8,0xb3,0x1e,0xd4,0x09,0xfd,0xa7,0x30,0x41,0x5a,0xce,0x53,0x4d,0x11,0xc8,0xdd,0x13,0x50,0xd5,0x2e,0xa0,0xe6,0x48,0x49,0x31,0x4b,0x1d,0xce,0xfc,0x42,0xed,0x8f,0xc8,0xb3,0x0a,0xae,0x1d,0x4c,0x1e,0x4f,0x39,0xa4,0x37,0xc8,0x54,0xdf,0x40,0xa6,0x42,0x61,0x7d,0x34,0xd4 +.byte 0x75,0x0a,0x9f,0xf0,0x33,0x54,0xf3,0xc4,0xdc,0x4e,0x2f,0x81,0xc2,0x20,0xaa,0x4f,0xa0,0xae,0xa6,0xb8,0x50,0xf8,0x45,0xf1,0xf2,0xd1,0xd2,0xcf,0xc8,0xf0,0xf4,0x54,0x37,0xdc,0xfb,0x13,0xdf,0x38,0xc2,0x3f,0xe0,0x59,0xb5,0x9a,0x0f,0x27,0x87,0xd4,0xd3,0xdc,0xfd,0xda,0x1d,0xfa,0xdd,0x12,0xe0,0x7f,0x34,0x01,0xde,0x28,0xf5,0x0e +.byte 0xff,0x59,0xc7,0xbd,0x6a,0xe4,0x0c,0x85,0x7b,0x87,0xf9,0xd7,0xe2,0xed,0xb2,0xf7,0xb7,0x13,0xfb,0xfc,0x4d,0x25,0x52,0xfd,0x23,0x6b,0x10,0xd0,0x80,0xd8,0xbd,0xbd,0xf0,0x87,0xfc,0x38,0x85,0x83,0x20,0x5f,0x7c,0x26,0x14,0x93,0xd3,0xe1,0xdc,0xa4,0xda,0xa7,0xf9,0xfd,0x6c,0x9a,0x2b,0x75,0x82,0xf1,0x9f,0x1b,0x0c,0x43,0xd4,0x2d +.byte 0x5b,0x0c,0x54,0x7e,0x61,0x24,0x8e,0x50,0x25,0xd8,0x54,0xfd,0x30,0xec,0x4c,0xa8,0xb6,0xf0,0x35,0x67,0xf7,0xe4,0x3c,0xfd,0xc8,0x40,0xf4,0x2d,0xc5,0x4d,0xc3,0x29,0xc2,0x88,0x60,0xab,0xd9,0x2a,0xe8,0x31,0xcc,0x0c,0x9f,0x97,0xa8,0x2e,0xaa,0xa5,0xb6,0xee,0x3c,0x71,0xa9,0xff,0x90,0xb4,0x43,0x2e,0x16,0x80,0x8c,0xfe,0xb5,0x7a +.byte 0x40,0x58,0xd5,0x98,0x7e,0xca,0xaf,0x95,0xee,0x00,0x26,0x8d,0x5b,0xba,0x33,0xee,0x35,0xb5,0x9b,0xf8,0x08,0x1e,0x15,0x2d,0x01,0xb1,0x83,0xa6,0x57,0x58,0xd1,0xf3,0xa4,0xf1,0x3a,0x00,0xf4,0x40,0xee,0x35,0x3a,0x20,0xc2,0x13,0x1e,0xda,0x32,0xc2,0x35,0x74,0x29,0xce,0x51,0x3f,0xec,0xb2,0xd7,0x23,0xa7,0xc6,0xef,0x70,0xb9,0x88 +.byte 0x6f,0xa8,0xf5,0x5b,0xff,0xc5,0xf5,0xb4,0x3b,0x12,0x75,0x20,0xbf,0x61,0x8a,0xb1,0xae,0x01,0x9b,0x17,0xf4,0xf3,0x2d,0xfb,0x44,0xe8,0xac,0x29,0x81,0xc2,0x6d,0x50,0x05,0x11,0xd9,0x43,0xf8,0xc7,0x58,0x5d,0xbc,0x2d,0xc0,0x83,0xd2,0x81,0x41,0x1c,0x46,0x62,0x60,0x6e,0x65,0x52,0x4b,0x1c,0x88,0x72,0x1b,0x0e,0x8e,0x7d,0xa2,0xb5 +.byte 0x4e,0x28,0x32,0xf2,0xb1,0xfa,0xf1,0x4b,0xc5,0x85,0x95,0x2c,0x08,0x78,0x85,0x68,0xe5,0x20,0x23,0x8b,0xc4,0xf5,0xb2,0xdb,0xc1,0xdd,0xe5,0x69,0xa4,0x97,0xa9,0x6c,0x2e,0x3a,0x25,0x1c,0x24,0x54,0x97,0x3e,0x8d,0x61,0x61,0xa3,0x60,0xf5,0xd2,0x4e,0x90,0x25,0x06,0x09,0x31,0x7b,0x96,0xce,0xcc,0xb7,0xbc,0x63,0x9f,0x04,0x7d,0xec +.byte 0xa1,0x4a,0x65,0xd3,0x26,0xe1,0xbf,0xf9,0x88,0xea,0x5c,0x5d,0xfe,0xe9,0x60,0x77,0xbd,0xf2,0xa0,0x11,0x91,0x24,0xca,0xa1,0x0d,0x05,0x7b,0xe2,0x7d,0x22,0x2e,0xd2,0xc9,0x4b,0x78,0xce,0x0c,0x7b,0x49,0xaf,0xd6,0x59,0x5f,0xb4,0xbd,0x2e,0x4a,0x22,0xcb,0x5d,0x1c,0xd5,0xde,0xea,0x86,0x74,0xd5,0x15,0x52,0x59,0xfc,0x3d,0x7b,0x1c +.byte 0x3f,0x14,0xec,0xf2,0xc8,0x3c,0x88,0xbf,0x89,0xd5,0x23,0xc3,0x94,0x3c,0x28,0x04,0x91,0x6c,0x36,0x35,0x4b,0x75,0xf8,0xdc,0xf3,0xff,0xba,0x8c,0xa4,0xc7,0x85,0xc5,0x1a,0x30,0x4b,0x7c,0xc5,0x2f,0xb9,0x2a,0x14,0xaa,0x65,0xe3,0x92,0xdc,0xe1,0xed,0x3f,0xb6,0xff,0x0e,0x74,0xe0,0xb3,0xc9,0x4b,0xd1,0x96,0xfc,0x49,0x72,0xbe,0xb0 +.byte 0xc8,0x4a,0xd5,0xf0,0xb3,0x58,0x29,0x35,0x97,0xd4,0x5c,0xc7,0x0b,0x27,0x1d,0x14,0xdb,0xb7,0x5c,0x7e,0x6d,0xc1,0x56,0xa9,0x80,0x72,0x7d,0x75,0xc2,0x2f,0x07,0x28,0xb4,0xff,0xef,0xa7,0x34,0xed,0x31,0x44,0x85,0xe6,0xc3,0xa4,0x5f,0xe2,0xe8,0xab,0xd1,0x59,0xe7,0x32,0x20,0xd1,0xcc,0xef,0x6f,0xe1,0x10,0x89,0x6c,0x0c,0xf3,0x5f +.byte 0xe8,0xc7,0x1c,0x3b,0xeb,0x3e,0xa5,0x53,0x2d,0x48,0x64,0x92,0xa0,0xec,0xf3,0x75,0x5b,0x5b,0xe2,0x83,0x87,0x04,0xa7,0xd8,0x1b,0x44,0xfb,0x42,0xee,0xd8,0xf2,0x98,0xff,0x30,0xc8,0x09,0xf8,0x1a,0x95,0x46,0x2d,0xe7,0x43,0x10,0x90,0xf4,0x2c,0x8f,0x0b,0x60,0x6d,0xeb,0xbf,0x19,0xc1,0x9d,0x5c,0xc0,0xff,0xb1,0x86,0xbc,0x01,0x73 +.byte 0x35,0x1f,0xd8,0xf4,0xa1,0xd4,0x7f,0x2d,0x1b,0xf9,0xa6,0x78,0x1a,0x2e,0x2c,0xe2,0xcc,0x8b,0x5f,0xbb,0xb9,0x80,0x31,0x32,0xa5,0x5d,0x70,0x59,0xae,0xe3,0xac,0xab,0xde,0x38,0x09,0x07,0x57,0x5f,0xbf,0xe8,0xa0,0xb8,0xd0,0x03,0xac,0x02,0x0d,0x7f,0x7e,0x0c,0xd2,0xcf,0x46,0x01,0x07,0x9f,0x16,0xf6,0x2b,0x94,0xaf,0xae,0x66,0x09 +.byte 0xca,0x4c,0x5f,0x37,0x53,0xa6,0x50,0x82,0x3a,0x0a,0x7b,0xb3,0x52,0x2e,0x0f,0xe4,0x64,0xab,0x40,0x21,0x2d,0xb7,0x20,0x9b,0xe3,0x2f,0xec,0x2b,0xb3,0x31,0x60,0x51,0x2e,0xb6,0x68,0xac,0xae,0xee,0x2d,0x28,0x5b,0xe0,0xa7,0x85,0xab,0x95,0xba,0x53,0x8c,0xc0,0xf8,0x16,0x8f,0x42,0x01,0xef,0x00,0x32,0x44,0x8e,0x41,0xc9,0x05,0x5b +.byte 0xe0,0x3f,0xe1,0xd8,0xd4,0x97,0x8e,0xa0,0x14,0x84,0xce,0x5c,0xef,0xbe,0xa4,0xae,0x18,0x91,0xd9,0x48,0x9b,0xc3,0x7a,0x8f,0xfb,0xb3,0x3e,0xa9,0x87,0x74,0x84,0xd2,0xc6,0x7c,0xc9,0xce,0x01,0xa5,0xcc,0xff,0x5a,0xe8,0x94,0x98,0x54,0x2a,0x6e,0xd9,0x58,0x75,0xd4,0xdd,0x6c,0x7d,0x83,0x32,0xc9,0x4e,0x35,0x2c,0x51,0x26,0x68,0x1f +.byte 0x95,0x20,0x82,0x54,0x0a,0xad,0x5e,0xe2,0xba,0xf9,0xa3,0x54,0x24,0x93,0x4a,0x62,0xff,0x28,0x05,0xd2,0x22,0x62,0x82,0xd4,0x2d,0xe2,0xec,0x66,0xc5,0xee,0x63,0xd0,0xf6,0x93,0xa8,0x37,0xbf,0xdd,0xe0,0x95,0x0b,0x19,0xa1,0x9d,0x9a,0xf8,0x94,0x1a,0x3a,0x50,0x9e,0x66,0x75,0x8c,0x25,0xbd,0x18,0xb0,0x58,0x76,0x7f,0x2d,0x3d,0x06 +.byte 0x02,0xb3,0xcf,0xa3,0x14,0x6e,0xe7,0xc8,0xcd,0xe6,0xbe,0xae,0x92,0xd6,0xa2,0xfe,0x12,0xf0,0xdf,0x9f,0x9e,0xad,0x77,0x77,0xfb,0xfc,0x36,0xb7,0x82,0x9c,0xf1,0x51,0xc2,0x58,0xa0,0xf3,0xa0,0xd6,0x6e,0x64,0x28,0xac,0x09,0x8f,0x7b,0xef,0x19,0x87,0x76,0xb9,0x4e,0xca,0x1f,0x05,0xb6,0x00,0x4a,0x14,0x83,0xaf,0xff,0xd9,0xa1,0xc6 +.byte 0x0f,0x98,0x3a,0xcf,0x85,0x18,0xea,0xa6,0x9a,0x1e,0xae,0x7c,0xaa,0xae,0xef,0x89,0x5e,0x14,0x5d,0x2f,0x73,0x8f,0xd1,0xf0,0x77,0xcd,0x45,0x92,0x7f,0xee,0xb9,0x7c,0xc2,0x3c,0xff,0x56,0x56,0xa5,0xa5,0x49,0xe4,0x20,0xd6,0xa2,0xb6,0xe4,0xfc,0x86,0x53,0xce,0x9e,0x2b,0x7b,0xcb,0xcf,0x6a,0xd5,0x62,0xb7,0x34,0x0e,0x39,0xe2,0xaa +.byte 0x1c,0x24,0x30,0x71,0x94,0xb3,0x57,0xd8,0xe8,0xd4,0xc5,0x4f,0x33,0x2c,0x73,0x7e,0x48,0xba,0xb3,0x55,0x84,0x6d,0x10,0xcf,0x8f,0xf2,0xb6,0xdb,0x4e,0xcf,0x49,0x08,0xf6,0x5a,0x3c,0x7e,0xef,0x3f,0x5c,0x11,0x09,0xfe,0x26,0xfb,0xff,0x30,0xcb,0x81,0x12,0xea,0x1e,0xa9,0x6e,0xf8,0xea,0x4f,0x92,0x2c,0x23,0x99,0x35,0xa5,0x59,0xca +.byte 0x1d,0x66,0x72,0xad,0x5b,0x7c,0xb3,0x4a,0x7c,0x76,0x4c,0xf6,0xc1,0xec,0x68,0x5f,0x2c,0x17,0xbe,0x92,0xe1,0xa1,0xee,0x40,0x24,0x25,0x6b,0xc5,0x0b,0x6f,0x06,0xc0,0x05,0x8c,0x23,0x24,0x76,0xea,0xe9,0xb9,0xa1,0x3d,0x59,0x15,0xe7,0x65,0x47,0x5a,0x75,0x9b,0xc8,0x7b,0x86,0x97,0xf4,0x4a,0xa3,0xec,0x54,0x0e,0x66,0xef,0xda,0x41 +.byte 0xb8,0x3b,0xa6,0x86,0x63,0xe1,0x4e,0x89,0x92,0x40,0xf4,0x8b,0x32,0x47,0x3b,0x4b,0xb4,0xe6,0xd8,0x4b,0x1c,0xac,0x03,0xab,0xde,0x2e,0x63,0x96,0x3f,0x27,0xa1,0x32,0x11,0x35,0x24,0x6a,0xe9,0x0b,0x73,0x61,0x4e,0xd8,0xdc,0x91,0x98,0x01,0x8a,0x0d,0x61,0xec,0x39,0xbe,0x3b,0xb9,0x78,0x77,0xea,0xaa,0xa2,0x12,0x20,0x92,0x98,0x16 +.byte 0x27,0x3b,0xd1,0xfa,0x59,0xef,0x81,0x38,0x9f,0x42,0xe8,0xb4,0xab,0x4f,0x26,0x9a,0xe7,0x0b,0x05,0x03,0xfa,0xe1,0xe1,0x3d,0x45,0xac,0x7d,0x40,0xcc,0x2f,0xf2,0xb0,0x33,0x42,0x14,0xbd,0x91,0x3e,0xe1,0xb7,0x17,0x25,0xc3,0x92,0xcb,0x9e,0x44,0x1e,0x13,0x93,0x98,0x1f,0x96,0x64,0x3a,0xaa,0x53,0x9a,0x18,0xc0,0x34,0x3c,0x47,0x94 +.byte 0x14,0x70,0x67,0x76,0x2a,0x82,0xd3,0x6a,0x18,0x13,0xe7,0x01,0x8d,0x97,0x52,0x51,0x8e,0x08,0xde,0x44,0xb0,0x74,0x07,0x58,0x35,0xc2,0x29,0xb5,0xd7,0x00,0x46,0x31,0x34,0xd7,0x1f,0xdd,0xaa,0x5c,0x27,0xc7,0x37,0x71,0xe8,0xbe,0xad,0x89,0xf1,0xb2,0xd1,0x46,0x33,0x0c,0x2f,0x26,0x21,0x5e,0xc9,0xda,0x25,0xcd,0xd0,0x17,0x23,0x87 +.byte 0x15,0xc2,0xa0,0x1a,0x9f,0x6e,0xfb,0x63,0xe9,0x69,0xdf,0x79,0x18,0x33,0x2f,0x47,0xca,0x54,0x23,0x7e,0x4f,0x6e,0x38,0x06,0x99,0xfb,0xcd,0x22,0xdb,0x4b,0x3f,0x8a,0x05,0x2e,0x5c,0x56,0x65,0xb7,0xab,0x57,0x8b,0xdd,0x28,0xab,0x7e,0x77,0x32,0x0f,0xc6,0x3c,0xf3,0xde,0x43,0xb0,0x13,0x3b,0xbd,0x28,0x3a,0x8b,0xd5,0x6b,0x1d,0x5d +.byte 0x20,0x1a,0x5f,0xa6,0x01,0xed,0x88,0x7f,0x87,0x55,0x38,0xc2,0x0d,0x03,0x6c,0x41,0x6a,0x43,0xdf,0x09,0xf3,0x58,0x69,0x13,0xa1,0xd6,0x39,0x0c,0x8e,0x8f,0x40,0x67,0xe8,0x0e,0x9b,0x9b,0x42,0x30,0xd7,0xae,0x04,0x75,0x66,0xfb,0x4a,0xa7,0xe0,0xe9,0xea,0x6d,0x28,0x4f,0xc0,0x5c,0xd4,0xd4,0xb7,0x60,0x5a,0x35,0xc1,0xe8,0x5f,0xc3 +.byte 0x4f,0x7a,0x5d,0x8d,0xc2,0x29,0x6e,0x36,0x50,0x5b,0x82,0x63,0xf2,0xda,0x8d,0x02,0x61,0x09,0x69,0x0a,0x47,0x9d,0x58,0xf3,0xf6,0xe0,0xc0,0x09,0xd9,0x3b,0x8d,0xf5,0xba,0xf6,0xc4,0xf0,0x65,0x89,0x7b,0xdd,0x93,0x6b,0x6e,0x21,0xa1,0x2a,0x66,0xe0,0x8f,0x62,0xb0,0x49,0x60,0xa3,0x48,0x42,0x62,0xcc,0x26,0x1f,0x59,0x3a,0x7b,0xa7 +.byte 0x82,0x10,0x5f,0xc6,0xf8,0xa2,0xc0,0x07,0x7b,0x26,0x26,0x11,0xe2,0x5b,0xb8,0x86,0xb7,0x66,0xcf,0x0a,0xcc,0x6f,0xe8,0x02,0x22,0x4c,0x13,0x75,0xdc,0x68,0xf0,0x7c,0x0c,0x46,0x9a,0xa2,0x4c,0xf5,0x50,0x3f,0xf9,0xbc,0x01,0xb1,0xa1,0x28,0x90,0x07,0x6b,0x17,0x69,0x89,0x7b,0xe5,0x0a,0xf7,0x7b,0xe1,0x94,0x30,0xfc,0xd3,0x8d,0xd3 +.byte 0x99,0x37,0x91,0xd5,0xdf,0x59,0x2a,0x4f,0xfe,0x6c,0x37,0x4b,0x78,0x2c,0xa9,0x28,0x6a,0x5c,0xd6,0xe1,0x0b,0xad,0xae,0x62,0x7c,0x09,0xb8,0x90,0x3f,0x29,0x37,0x7b,0x79,0xee,0x55,0x02,0x05,0xef,0x28,0xa2,0xc7,0x07,0x2b,0xe6,0xab,0x87,0x9d,0x8f,0x4c,0x0f,0xc1,0x75,0x5d,0x88,0x7f,0x26,0xe0,0x1e,0xf8,0x3f,0xb5,0x2a,0x6c,0xe6 +.byte 0x7f,0x85,0xae,0x55,0x7b,0x58,0x34,0x4c,0x81,0x05,0x21,0xa1,0x5e,0xd7,0xb6,0x20,0x6e,0xf9,0x60,0x15,0xa4,0xb2,0x8f,0x68,0xd2,0x23,0x9f,0xbf,0xfa,0x6a,0xcb,0x87,0x7d,0x41,0x4a,0xae,0x28,0x4f,0x9e,0xbb,0x69,0x1c,0x37,0xb2,0xc9,0xd2,0x21,0xa1,0x2b,0x6b,0x5d,0xff,0xd6,0xdb,0x8f,0x21,0xd9,0x17,0xd6,0xe6,0x74,0xf2,0x20,0x0e +.byte 0x06,0xb5,0x0c,0xdc,0x74,0x4e,0x93,0xcb,0x27,0xc7,0x4b,0xf3,0xef,0x46,0xa8,0xf0,0x58,0x1c,0xa0,0x65,0x09,0x84,0xc7,0x2e,0xba,0x51,0xd9,0xd4,0x53,0x20,0xc7,0x20,0x85,0x93,0x2b,0xf3,0x42,0x93,0x7b,0x22,0x1c,0x8d,0x22,0x76,0xcf,0xde,0x6a,0xa1,0x76,0xea,0x65,0x20,0x2f,0x2e,0xdb,0x85,0xdd,0x73,0x43,0xf8,0xe0,0xe3,0x3a,0xe5 +.byte 0x02,0x57,0x96,0x54,0xbc,0xaf,0xa4,0xd5,0xda,0x9d,0x9d,0x8b,0x85,0x01,0x7c,0x72,0x03,0xfe,0x39,0x46,0xab,0x04,0xcc,0x62,0x71,0xf5,0xa5,0x67,0xd7,0xfc,0xc0,0xb6,0x95,0x74,0xdf,0x1c,0xfe,0x1c,0x5b,0x25,0xae,0x42,0x75,0x00,0x71,0x3c,0xec,0xfc,0x3c,0x7b,0x0f,0xec,0x44,0xc7,0xec,0x9b,0x86,0xf5,0x3d,0x47,0x15,0xf0,0x25,0xba +.byte 0x43,0xc8,0x68,0x15,0x4f,0xeb,0x35,0x76,0x2d,0x04,0xb7,0x9b,0xb8,0xa7,0x0d,0xb3,0xb4,0xf2,0x93,0x85,0xb1,0xb8,0x81,0x7c,0xd6,0x5f,0xbd,0xc2,0xcc,0xf4,0x0e,0x98,0x2c,0x06,0x54,0x2f,0x5e,0x49,0x94,0x93,0x78,0xa0,0x0a,0x33,0x2e,0x3f,0xb2,0xa7,0x81,0xed,0xe9,0xb6,0xb5,0x86,0x4b,0xa5,0xc0,0x51,0x30,0x9d,0xe2,0x9f,0xc2,0x56 +.byte 0x92,0x6b,0x96,0xca,0xcb,0x65,0x5c,0x0e,0xf4,0x91,0x2b,0x89,0xf4,0x27,0x55,0x26,0xd7,0x7b,0x00,0x19,0x1f,0x67,0x4e,0x43,0x24,0x81,0x05,0xb7,0xc6,0x41,0x1a,0x39,0x3d,0x40,0x3e,0x8a,0x03,0x94,0x63,0x1b,0xb1,0x87,0xb6,0xe1,0x52,0xd0,0xe8,0xbb,0x0e,0x37,0x72,0xe5,0xde,0x86,0xc0,0xdf,0x5b,0xc2,0xc6,0x0a,0x67,0xa7,0x4c,0x03 +.byte 0xb6,0xd8,0x7f,0x1d,0xb3,0xe3,0x84,0xb7,0x5c,0x04,0x15,0xe0,0xd0,0xae,0x44,0xac,0x39,0xa5,0xa2,0x86,0xc8,0xad,0x27,0xa0,0x36,0xa1,0x6e,0xaa,0x87,0x7a,0x43,0xae,0xa0,0x45,0x1a,0xac,0x04,0xe2,0x55,0xf2,0x9a,0x97,0x67,0xfb,0x01,0x8f,0xb8,0x80,0x9c,0x27,0x1d,0xbe,0xa3,0xf1,0x6d,0x66,0xf2,0x1a,0x99,0x99,0xf6,0xa5,0xba,0x58 +.byte 0x28,0x58,0xb5,0x44,0x5b,0x38,0x4a,0x3f,0x37,0x85,0x7e,0x36,0x8e,0x16,0xb9,0x1e,0x0b,0xbf,0x7d,0x0a,0x0c,0x83,0x53,0x0d,0xcc,0x37,0xe1,0x42,0xbb,0x0d,0xfc,0x01,0x25,0x10,0xbe,0xb5,0x83,0x2f,0xa5,0x42,0x98,0xbc,0xd6,0x50,0x75,0xda,0x32,0x2b,0x3f,0xd6,0xc1,0x1a,0xe7,0x0b,0x80,0x07,0x6f,0xfe,0x77,0x9e,0xe9,0x1e,0x45,0x65 +.byte 0x68,0x92,0x34,0x8b,0xce,0xf3,0xcd,0x94,0x17,0xe0,0x41,0x92,0x96,0xb5,0xd1,0x98,0xd1,0x25,0xd1,0x3d,0x76,0x88,0x86,0xb1,0x01,0x80,0xc7,0xde,0x60,0x20,0xb8,0x03,0xe7,0x3f,0x44,0x39,0xb1,0xb8,0x19,0x53,0x5a,0xc6,0xa0,0x18,0x8e,0x0e,0xb6,0xfd,0x7e,0xe7,0x7e,0x8a,0xeb,0x4c,0x35,0x4a,0x0f,0x52,0x81,0x68,0x12,0xe4,0x46,0x2e +.byte 0x20,0xb4,0x41,0x59,0xb3,0x16,0x02,0x9f,0xdb,0xe8,0xea,0xfd,0xe3,0x5d,0x14,0xd0,0x97,0x52,0x66,0xcb,0xb4,0x48,0xa3,0x05,0xab,0x73,0x8e,0x2c,0x46,0xc2,0x94,0xd5,0xc8,0x57,0xc4,0x13,0xa4,0x0b,0x7c,0x34,0xbf,0xb4,0x07,0x28,0x92,0xe2,0x1d,0x00,0xa6,0xf0,0xb0,0xbf,0xdd,0x5d,0x20,0x05,0x9f,0x53,0xcf,0x07,0xf7,0xe8,0x79,0x04 +.byte 0x57,0xd1,0xac,0x9c,0xdd,0xae,0xcd,0x8b,0x04,0x0a,0x2d,0x0a,0x0f,0x21,0x09,0xc8,0x0d,0xfa,0x23,0x26,0xe3,0xdb,0x84,0xc8,0x8e,0x9c,0x96,0x93,0x4f,0xcc,0x2f,0x96,0xed,0x04,0x91,0x0d,0xc7,0xbb,0x27,0xa3,0x6b,0x9d,0xe2,0x15,0x83,0x31,0x78,0xb5,0xb9,0x6d,0xb1,0x6c,0xa2,0x3e,0xf5,0x45,0x77,0xf4,0x96,0x3a,0xe6,0x10,0x08,0xfd +.byte 0x23,0xcc,0xda,0x27,0x73,0x67,0xbb,0x8b,0x59,0xe2,0xcf,0xda,0x57,0xf9,0x17,0xeb,0xeb,0x98,0x39,0x48,0xbf,0x3d,0x5b,0x7b,0xc2,0x11,0x4b,0xd6,0xb6,0x8a,0x14,0xb3,0xf5,0xc3,0x18,0xff,0xde,0x62,0x98,0x4a,0x1d,0x6b,0x4e,0x00,0x4f,0x7d,0x2f,0x67,0xf4,0x22,0x1e,0xdb,0x69,0xd5,0x87,0xfd,0xee,0x97,0x56,0xd4,0x00,0x0c,0x9e,0x22 +.byte 0x11,0xda,0x8e,0x3b,0x91,0xad,0xf1,0xb6,0x0a,0xba,0xe7,0xc6,0x14,0x0e,0xc4,0x85,0x5f,0x7d,0x69,0x7d,0x73,0x9c,0x83,0x6a,0x69,0xef,0x10,0xb0,0xe6,0x33,0x32,0x0f,0xd8,0x54,0xa4,0x9d,0x39,0xaf,0xfc,0x6d,0x4f,0xeb,0x34,0x89,0x2e,0xb0,0xa1,0xcd,0xe1,0x5b,0xab,0xe1,0xff,0x82,0x85,0x6b,0x5e,0xa9,0x9e,0x43,0x02,0x0d,0x38,0x33 +.byte 0xe1,0xbc,0xa4,0x77,0x8a,0x5e,0x54,0xa8,0xcf,0xc9,0x76,0xcb,0x73,0x21,0x1f,0xa7,0x1e,0x5c,0x0a,0xd6,0xa2,0x36,0x6f,0x07,0xa1,0x6b,0x0d,0x5a,0x21,0x3a,0xc3,0xc0,0xcd,0x9d,0xed,0x83,0x96,0x89,0xaa,0x55,0x56,0xfd,0x0a,0x97,0x3a,0x50,0xfd,0x95,0x3f,0xb7,0xfa,0x87,0x7d,0xa6,0x5d,0x12,0x65,0x3f,0x61,0x4f,0x86,0xdd,0x58,0x64 +.byte 0xd7,0xde,0xd6,0xb9,0x68,0x87,0xde,0xba,0x96,0xf5,0x1c,0xec,0x8e,0x81,0xfc,0xca,0x77,0xe2,0x85,0x11,0x93,0xc7,0xf2,0x0f,0x77,0xbb,0x7c,0xed,0x20,0x7a,0xe3,0xc5,0x76,0xff,0x04,0xc7,0xe6,0x7a,0xa1,0xfe,0x58,0x52,0x1b,0xec,0x27,0xbb,0xd4,0x27,0x7c,0xc7,0x4a,0xfb,0x07,0x62,0x99,0x36,0xff,0x6e,0x71,0x2f,0xbd,0x25,0xff,0x8d +.byte 0x97,0x14,0x56,0x23,0x7f,0x13,0x89,0x10,0xd8,0x29,0x1f,0x91,0x56,0x52,0x85,0xa7,0xd3,0x04,0xc9,0xe2,0x09,0xa2,0x0f,0xaa,0x28,0xb1,0x79,0xf9,0x08,0xf4,0x14,0x57,0xc4,0x54,0xd7,0x69,0xb0,0x37,0xf0,0x80,0x90,0xce,0x75,0x81,0xe7,0x75,0x0f,0x7f,0x71,0x58,0x3b,0x78,0x53,0x9b,0x4a,0x5e,0xcc,0x23,0x04,0x9e,0x0c,0xd7,0xd8,0x69 +.byte 0x90,0xdf,0x36,0x99,0x90,0xd3,0xfa,0x35,0xf7,0x13,0x64,0xb0,0xc0,0x70,0x0c,0xd4,0x87,0xc0,0xca,0xd8,0xca,0x8a,0xc3,0x9a,0xfa,0x73,0x34,0x18,0xe9,0x3a,0x85,0x42,0xc5,0xe1,0xaa,0xb5,0x87,0xac,0x43,0x9c,0xfa,0x7e,0x05,0x35,0xed,0x7e,0x0d,0x38,0x82,0x17,0x7f,0x22,0xa2,0x3d,0xd3,0x0d,0xd1,0xff,0x0a,0x68,0x52,0xd2,0x17,0x59 +.byte 0xaa,0x57,0xbd,0xd3,0xea,0x0c,0xe8,0xb0,0x22,0x13,0x59,0x42,0x46,0x34,0x58,0xa9,0x16,0xc5,0x9f,0x88,0x8f,0x75,0x02,0xbf,0x63,0xda,0x28,0xba,0x9a,0xcf,0xbb,0x73,0x58,0xb1,0x13,0xf2,0x68,0xd8,0x6b,0xfd,0x49,0x50,0xcf,0x09,0xea,0x6a,0xff,0x20,0x39,0xc5,0xae,0x70,0x79,0xea,0xec,0x9d,0x09,0xf8,0x51,0x1f,0xfd,0x01,0xd5,0x9f +.byte 0xec,0x29,0x36,0xfc,0x39,0xb4,0x4c,0x1f,0xe6,0xb4,0xcc,0x97,0x21,0xe5,0x19,0xe9,0x7a,0x60,0x6d,0x39,0x3c,0x31,0xd4,0x43,0x76,0xba,0x10,0xd9,0x3f,0x75,0x7a,0xa6,0x1d,0x02,0x88,0x3d,0xa5,0x9f,0x91,0x61,0x4e,0x32,0xec,0xf5,0xd3,0xe4,0x65,0xf7,0x0e,0x3b,0x8a,0x8f,0x22,0x31,0x71,0x8f,0xf1,0x5f,0x7b,0x04,0x88,0xf9,0x88,0x67 +.byte 0x14,0x85,0x74,0x9e,0x54,0x0b,0xed,0x7a,0x48,0xcd,0xcf,0xd2,0x05,0x38,0xd5,0x58,0xa2,0xaf,0x6a,0x28,0x21,0xfd,0x38,0x4e,0x83,0x06,0x15,0x60,0xfb,0x89,0x2a,0x72,0xfe,0x75,0xc7,0xa4,0xae,0xe4,0x5b,0xbb,0xde,0x54,0xde,0x77,0xbb,0x9d,0xd2,0x07,0x05,0x61,0x53,0x65,0x31,0xd4,0x3a,0x8a,0x7d,0x9d,0x30,0x09,0x25,0x28,0x72,0x19 +.byte 0xe4,0xae,0x1d,0xbf,0xa7,0xef,0x75,0xd0,0xe3,0xdc,0x0b,0xd1,0x17,0x9c,0xc6,0xdf,0x65,0x9a,0x7c,0x9d,0x0b,0x9a,0x3d,0x8f,0xb0,0xf5,0x51,0x46,0x6b,0x12,0x0d,0xe6,0xa9,0x3a,0xb5,0xe9,0x52,0x85,0xa5,0x25,0x1f,0xc9,0x8b,0xff,0xe3,0x37,0x25,0x97,0xd8,0x91,0x17,0xed,0xcf,0x2a,0x6d,0x4f,0xef,0x74,0x5e,0x92,0xa2,0x2d,0x84,0xa6 +.byte 0x09,0xc4,0xfc,0x36,0x95,0x54,0x25,0x9e,0xeb,0xd9,0xea,0x5a,0x01,0x0c,0x54,0xdb,0x82,0x01,0xed,0x0b,0xf7,0x9f,0x0d,0x8f,0x2e,0xee,0x7c,0x6e,0xb3,0xe7,0xe8,0x04,0xef,0x8d,0x5e,0xfe,0x3d,0x96,0x3a,0x65,0xd3,0xb2,0x11,0x75,0x1c,0x6f,0x2a,0xd3,0x26,0x1f,0x5f,0x35,0x02,0x0b,0x9f,0x38,0x5b,0xa5,0x3a,0x90,0x3e,0x03,0x9f,0x50 +.byte 0xf2,0xd7,0xe4,0x3c,0xd3,0x28,0x67,0x0a,0x5a,0xe8,0x59,0x6f,0x38,0x8f,0x8b,0x0d,0xe4,0x1c,0xfc,0x6e,0x07,0x69,0x7b,0xfb,0x04,0x30,0xe7,0xa6,0x13,0xfb,0x33,0xa0,0x52,0x6a,0xec,0x64,0xad,0x90,0xbd,0xba,0x15,0x12,0x48,0xed,0xd1,0x94,0x2d,0xe7,0x19,0x28,0x5e,0x7a,0x94,0xf4,0x79,0xd7,0x79,0xc9,0xf6,0x16,0xb4,0x88,0xee,0x15 +.byte 0xa2,0x68,0xe3,0x1d,0xd0,0xd2,0x63,0x78,0x7c,0xb3,0x30,0xac,0x63,0x7a,0x36,0xc5,0x50,0xbf,0x57,0xf6,0xfe,0x4e,0x43,0x4e,0xf9,0xc4,0xa2,0x2a,0xa7,0xa4,0x2c,0x18,0xb9,0x43,0x7b,0xe8,0xf6,0x14,0x4f,0x07,0x6e,0x65,0x9a,0xdd,0x10,0x2a,0x4c,0xa4,0x58,0x86,0x19,0xad,0x6d,0x5e,0x30,0xfb,0x5f,0xb6,0x9f,0x2a,0xac,0x90,0x0d,0xae +.byte 0xf9,0xab,0xc1,0x33,0xd3,0x73,0x1d,0x46,0xe5,0xc8,0x1e,0x1d,0x61,0xf1,0xda,0x53,0x3e,0x61,0xf0,0x9a,0xe4,0xb7,0x04,0xe9,0x5e,0xf6,0x11,0xa6,0x56,0x39,0xed,0xfb,0x06,0xd0,0x92,0xb9,0xb8,0xb5,0x3b,0x39,0xec,0xa5,0xc0,0xb1,0x7e,0x7e,0xfb,0x89,0x86,0xa8,0x70,0x47,0xa5,0x60,0x8c,0xf8,0x47,0x31,0x04,0x54,0x29,0xf3,0xa2,0x79 +.byte 0xac,0x24,0xda,0x33,0x6c,0x1c,0x34,0xc2,0xa0,0x96,0x27,0xbb,0x31,0xbf,0xc1,0xd9,0xc8,0x35,0xbc,0xb3,0x13,0x8a,0xb6,0x25,0x92,0xdc,0xcc,0x3b,0x8a,0x65,0xf3,0xf9,0xd1,0x2a,0xcd,0xb0,0xf4,0xd7,0x44,0xa0,0x27,0xfc,0x0e,0x69,0x46,0x0b,0x56,0x5b,0x58,0x40,0xd9,0xc4,0x37,0x9b,0x4d,0xa1,0x45,0xd8,0xab,0x4d,0x02,0x31,0x4f,0x93 +.byte 0x56,0xd0,0x26,0x99,0x1c,0xc7,0x2b,0xc2,0x80,0xb4,0xbd,0x6e,0xfe,0xa1,0xf7,0x8f,0x13,0x74,0x2c,0xa8,0x63,0xb1,0x3d,0x6d,0x32,0x4a,0x80,0x6a,0x7f,0xcf,0x6c,0x51,0xa9,0x21,0x34,0x4e,0x13,0x19,0x8f,0x33,0xfc,0x06,0x46,0x05,0xf0,0xcf,0xf1,0xce,0x20,0xe0,0x40,0xf2,0x0a,0xd0,0xf6,0xcc,0xcc,0xc2,0xc7,0x07,0x2e,0x9e,0x0a,0x1e +.byte 0x53,0x59,0xbb,0xe3,0x02,0xc8,0x20,0x9f,0x3c,0xe6,0xec,0xf7,0x8a,0x6d,0x3c,0x0f,0xb3,0x14,0x66,0x5c,0x51,0xbe,0x82,0xc2,0x0b,0x10,0x63,0xa9,0xd4,0x7f,0x12,0x88,0x13,0x81,0x8a,0x06,0x8a,0x7f,0xc8,0x89,0xe7,0xbd,0xce,0x51,0xdc,0x93,0x03,0x07,0x6f,0x8c,0xe6,0xcc,0x0d,0x45,0xa8,0xfc,0x02,0xe2,0x3e,0xa7,0xc8,0x83,0x77,0x98 +.byte 0x91,0x4e,0x1f,0x8d,0xed,0xa5,0x38,0x54,0x0e,0x4e,0x53,0x1c,0x0c,0x47,0x11,0x59,0x54,0x15,0xb5,0x47,0xb0,0x21,0xa1,0x3d,0xaa,0xef,0xee,0x9e,0x26,0x3c,0x39,0x75,0xff,0x1a,0x8c,0xbb,0x1a,0x49,0x62,0x21,0x76,0xe8,0x3d,0x10,0x55,0xf5,0x5a,0x44,0xf0,0xb3,0x81,0xd0,0x35,0x96,0x95,0x63,0xf7,0x50,0xb1,0xa0,0xf0,0x29,0x97,0xc9 +.byte 0x27,0x73,0xd8,0x29,0xef,0x74,0xd2,0x6d,0xf4,0xfb,0x72,0xa9,0x4f,0x12,0xd5,0xfd,0xc9,0xba,0xf0,0xbd,0xfd,0x5e,0x5c,0xfa,0x53,0xe3,0x96,0xab,0x57,0xc3,0xb6,0xe8,0x0e,0x43,0xe4,0x77,0x97,0x04,0x69,0xff,0x72,0xd0,0xd8,0xab,0xb9,0x19,0x25,0x89,0xf7,0xbb,0x01,0x03,0xf2,0xc6,0x8d,0xd5,0x86,0xe3,0xfe,0x9c,0xff,0x78,0xd7,0xfc +.byte 0xda,0xd4,0x69,0x8e,0xd6,0x31,0xfb,0x15,0xd3,0x38,0xfd,0x53,0xe2,0x4e,0xce,0xcc,0xfe,0x17,0xc5,0x88,0x92,0x28,0x98,0xb7,0xcf,0x7b,0x53,0x7b,0x96,0x14,0xaf,0xeb,0x5b,0x2d,0x16,0x41,0xcc,0x7b,0x65,0xe1,0x73,0x81,0x4e,0x8f,0xc3,0xad,0xe1,0x3f,0x0c,0xa7,0xbe,0x38,0xed,0x02,0x67,0xf5,0xfa,0x1d,0xb0,0xd5,0x4c,0xe1,0xd8,0x62 +.byte 0xc9,0xb5,0xf8,0x84,0xc4,0x51,0x57,0x14,0x11,0xf8,0x7d,0x1d,0xe7,0x81,0x85,0x61,0xa9,0x9f,0xc8,0x45,0xb9,0x2d,0x8a,0xc9,0xa3,0xfe,0x5a,0xf9,0xe0,0x1c,0x80,0xd8,0x77,0xaa,0x85,0xca,0x93,0x9a,0x2e,0x10,0x03,0x71,0x3d,0xb1,0x2a,0x64,0x2e,0xad,0x64,0xba,0x5c,0xaa,0x8a,0xc2,0x2a,0x80,0x28,0x2e,0xf9,0x93,0xe1,0x71,0x72,0xae +.byte 0xda,0xd8,0x4f,0x4c,0xec,0xb5,0xe3,0x05,0x10,0x5f,0x4c,0xe6,0xe1,0xf4,0x07,0x63,0x75,0x6f,0xc5,0xf9,0xcd,0xfc,0xfc,0x35,0x2f,0xe4,0xca,0x4b,0xfc,0xc3,0x20,0x8b,0x5c,0x4a,0x3c,0xf8,0x92,0xca,0x2b,0xb0,0xce,0xd9,0x4b,0xf0,0x44,0xcb,0x4e,0x83,0xf3,0x9d,0xb0,0xd4,0xab,0xba,0x2a,0x76,0xaa,0x87,0xcd,0xa2,0xd1,0x3f,0xa0,0xb9 +.byte 0xdb,0x7e,0x67,0x2d,0x92,0x4c,0xeb,0x3c,0xa6,0x8c,0x62,0x80,0x18,0x78,0x2b,0x9d,0x8f,0x5e,0xc3,0xa5,0x3b,0x10,0xb3,0x8a,0x3b,0x00,0x96,0xb2,0xab,0xce,0x8d,0xff,0x3c,0xee,0xeb,0x4f,0xfb,0xab,0x96,0x38,0x4c,0x15,0x6e,0x7c,0xf3,0x31,0x5f,0x8f,0x99,0x88,0x52,0x48,0x8b,0x71,0x1b,0x31,0x3f,0x7c,0xe4,0xae,0x9c,0x7b,0xeb,0x64 +.byte 0xe3,0x80,0xd4,0x56,0x9a,0x6a,0xd9,0xca,0xc5,0xf0,0x86,0xe7,0xda,0x80,0x8f,0x17,0x61,0xca,0x24,0x0b,0xb6,0xf9,0x24,0xc5,0x7a,0x28,0x42,0x32,0x7f,0x2b,0xde,0x44,0x30,0xed,0x69,0x63,0x07,0x3f,0xca,0x7b,0x02,0xea,0x6e,0xef,0x27,0x1d,0x76,0x32,0xc2,0x81,0x3d,0x03,0x9a,0xe7,0x0d,0x28,0x07,0x03,0x0c,0x65,0x73,0x58,0x26,0xc6 +.byte 0xfe,0xcc,0x33,0x7f,0x33,0xad,0xea,0x81,0x05,0xcc,0x61,0x1e,0x78,0x69,0x70,0xc9,0x1f,0x6e,0x4f,0xb8,0x19,0x42,0x03,0x03,0x9d,0x56,0x87,0x0e,0x9a,0x32,0x3a,0xba,0xb9,0x11,0x66,0x9f,0x4d,0xd1,0xb0,0x11,0xbf,0x46,0xfc,0xcf,0xe5,0xef,0xf1,0x61,0xeb,0xad,0x31,0x7c,0x0d,0x66,0x0d,0xa9,0x1f,0xe4,0xf9,0x80,0x9e,0xae,0x9e,0x34 +.byte 0x1e,0x95,0x6c,0xa2,0x77,0x69,0x84,0x77,0xb7,0xe8,0xca,0x1f,0xea,0xc1,0x34,0xe6,0x0d,0x4f,0xba,0x77,0x2b,0x8c,0xbe,0xff,0xc4,0x06,0xa3,0xb6,0x1a,0xbe,0x55,0x99,0x57,0x6f,0x54,0x24,0x93,0x7a,0x0d,0x52,0xd6,0xbb,0xd2,0x9c,0xd5,0x76,0x6a,0x22,0x66,0xdc,0x43,0x9a,0x7b,0x1b,0x11,0x80,0x02,0x0c,0x8f,0xc6,0xc6,0x02,0x42,0x29 +.byte 0x00,0xc4,0xb2,0xa1,0x6a,0x7f,0xa9,0x60,0x8d,0x41,0x4f,0xd3,0xde,0x33,0x5a,0x44,0x31,0xb0,0xdc,0xc0,0x0c,0x31,0x03,0x96,0x71,0x0a,0xce,0xe3,0x0b,0xc7,0xe3,0x5d,0xe0,0x88,0x4b,0xfd,0x4c,0x1a,0xce,0xaa,0x89,0xc6,0x99,0xa8,0xd3,0x1e,0xe9,0x6c,0x2a,0xbd,0x26,0x81,0x03,0x6a,0xf2,0xf2,0x0f,0x1e,0x9d,0x8a,0x59,0x45,0xbf,0x6d +.byte 0xb7,0xc8,0xec,0x77,0xb0,0x70,0x1a,0x31,0x21,0xeb,0x25,0x12,0xff,0x13,0x33,0x6b,0x47,0x34,0xd8,0x66,0x11,0x8a,0xc9,0x93,0x5b,0x2c,0x55,0x42,0xb2,0x9b,0x60,0xc6,0xba,0xab,0x12,0x12,0x5d,0x0a,0xd4,0x54,0x79,0x17,0x6d,0x31,0x7d,0x4f,0xf2,0x94,0x16,0x65,0x62,0x38,0x76,0x3a,0x7d,0x55,0x05,0xd9,0x17,0x45,0x62,0xb4,0x1d,0x31 +.byte 0x34,0x40,0xd3,0x8e,0xf9,0x29,0x4d,0x3f,0x93,0x9a,0x2e,0xa4,0x75,0x66,0xf6,0x62,0x8f,0xf9,0x8d,0x79,0x4b,0x51,0x7e,0xfb,0xeb,0x9a,0x86,0x96,0x01,0x79,0xbe,0xe4,0x42,0xb3,0xc8,0x28,0x9e,0xed,0xa8,0xb6,0x6d,0xd3,0x31,0xed,0x30,0x9e,0x6a,0x5b,0x02,0x4b,0xbd,0xb3,0xf2,0xf0,0x9d,0x50,0x09,0x40,0x71,0xfe,0x4b,0x91,0xc9,0xd6 +.byte 0x07,0x87,0x9e,0xdb,0xa9,0xcd,0x0b,0x95,0x18,0x5a,0x55,0x10,0xaa,0xe1,0x70,0xe9,0x2e,0xc2,0x31,0x6b,0x48,0x84,0x2f,0xe5,0x7b,0xdd,0x4c,0x03,0xed,0xb6,0xb6,0x64,0x24,0x38,0x7a,0x5a,0x15,0x35,0x9d,0x66,0x08,0x4d,0xa6,0x3c,0x96,0x1a,0xcd,0x02,0x61,0x40,0xde,0xac,0xc3,0x15,0x8c,0xca,0xe6,0x62,0xe9,0x61,0x68,0xf6,0x60,0xd3 +.byte 0x7e,0x5f,0x44,0xcf,0x09,0x01,0x60,0xc2,0xb1,0xfc,0x2f,0x41,0x4c,0xc1,0x06,0x72,0xcc,0xde,0x25,0xe0,0x8c,0x34,0xb8,0xe0,0xb2,0xeb,0x05,0x5d,0x9e,0x7e,0xf7,0x1e,0x24,0xcd,0x1b,0x14,0x3f,0x1b,0x13,0xc0,0x64,0x38,0x43,0x95,0xba,0x7b,0x61,0xa0,0xdc,0xe0,0xf5,0x80,0x13,0xa1,0xc5,0x48,0x92,0xc5,0xd5,0xd0,0x87,0x0c,0x73,0xae +.byte 0xe2,0xb3,0xe8,0x70,0x4a,0x7e,0xa0,0x13,0xc3,0xc6,0x9c,0x77,0x51,0xca,0x88,0xcf,0xe0,0x1e,0xff,0x6c,0xe2,0xc3,0x33,0xce,0x7f,0x3e,0x7d,0xd5,0x37,0x23,0x09,0xb7,0xbd,0xb7,0xec,0x9a,0x29,0xd6,0x4f,0xea,0x79,0x24,0x4c,0x09,0x74,0x9c,0x97,0x3b,0x08,0x1f,0x82,0xcc,0xae,0xc4,0x3f,0xcf,0xc6,0xcb,0xaf,0x8c,0x89,0x15,0x79,0xeb +.byte 0x88,0xb9,0x03,0xab,0xc6,0xf8,0x6e,0x54,0xde,0x50,0x6e,0xcf,0x8a,0x4b,0x3f,0x64,0xd0,0xcb,0x69,0xc2,0xe3,0x40,0x4a,0x94,0xe2,0x04,0xfa,0x9b,0x4a,0xf6,0x2b,0x93,0x0c,0x0e,0xf8,0x68,0xbc,0x6e,0x6c,0xe6,0xd9,0xb6,0x04,0x40,0xf4,0x60,0xbc,0xc1,0x1e,0x67,0x1f,0xce,0x5c,0x4d,0xba,0x78,0xa8,0xf5,0x96,0x00,0xb9,0x61,0x82,0x65 +.byte 0xb2,0x1d,0x42,0xb8,0x88,0x66,0x43,0xd9,0xfe,0xe0,0x86,0xef,0x5d,0x4d,0xcc,0xeb,0x57,0x9a,0x2b,0x27,0xf2,0xcf,0x68,0xc3,0x05,0x92,0x4d,0x4d,0xb7,0x46,0x7e,0xfd,0xb7,0x4a,0x4d,0x6f,0xac,0xc8,0x8d,0xf2,0xcd,0x52,0xcf,0x91,0x77,0x2d,0x68,0x06,0x7a,0xc9,0xf3,0x17,0xc6,0x8f,0x8f,0xb5,0x8f,0x74,0xfa,0x90,0xcc,0xfc,0xaf,0x4e +.byte 0xd2,0x29,0xd9,0x57,0x71,0xe9,0x52,0xd8,0x50,0xfa,0x4d,0x13,0x7c,0x42,0x15,0x22,0x65,0x26,0x08,0xda,0xaa,0x53,0xcf,0xeb,0xd1,0x87,0xd5,0x7c,0x4e,0x66,0x1c,0x7d,0xc9,0x03,0x59,0xf8,0x09,0x3e,0x1b,0x94,0x4c,0x39,0x56,0xeb,0xfd,0xb6,0xd0,0xf9,0x76,0x8b,0x5d,0x6e,0x44,0x15,0xcf,0x27,0x7f,0x69,0x9a,0x00,0x96,0xbe,0x80,0x5e +.byte 0xbb,0x5a,0x05,0xea,0x15,0xdd,0x44,0x69,0x9e,0x64,0xcd,0xba,0xf2,0x6f,0x67,0x10,0xc5,0xa1,0x75,0x85,0x5f,0xdc,0x61,0x43,0x34,0xc3,0x52,0x06,0xd4,0xe9,0x9f,0xdf,0xd4,0xa6,0x96,0xac,0xb1,0x21,0xdd,0x20,0x46,0x20,0x89,0x5f,0x0e,0x9d,0xa8,0xc7,0x75,0x3a,0x54,0x9e,0x7c,0x3a,0xd5,0xb2,0x68,0x77,0x06,0x1b,0x1c,0xbd,0xb3,0x02 +.byte 0xb5,0xdd,0x87,0x55,0x6b,0x00,0x9f,0x2c,0x30,0xb7,0x4e,0xc3,0x67,0x38,0x37,0x61,0x81,0x68,0xcb,0x14,0x81,0x27,0xd7,0x38,0x18,0x81,0x68,0x45,0xca,0xf4,0xaa,0xae,0x58,0x9e,0xf8,0xbe,0xe9,0x1e,0x05,0x19,0xf0,0xea,0x89,0xf8,0xa1,0x9c,0x7b,0x63,0xc1,0xcd,0x81,0xc8,0x95,0x56,0x81,0x81,0x29,0xb0,0x4d,0xbf,0xe6,0x8d,0xa3,0xb3 +.byte 0xfa,0xae,0x13,0xc8,0xca,0x4d,0x5c,0x5e,0xd9,0x17,0xf8,0x87,0xdb,0x5b,0xe2,0xd9,0xba,0xe3,0xe8,0xdb,0xcb,0x74,0x36,0x7e,0x0e,0x3a,0x94,0x6a,0xe9,0x9e,0x50,0x8e,0xf4,0xd4,0x15,0xb7,0x50,0x60,0x3f,0x14,0x72,0x41,0x9d,0x51,0x63,0x8c,0x31,0x95,0xf2,0xbc,0x14,0xc7,0x64,0x2c,0xee,0x0b,0xe6,0xde,0xf6,0x33,0x85,0x65,0x00,0x54 +.byte 0x54,0x84,0x85,0x94,0x87,0xa0,0xc3,0x95,0x4e,0x74,0xcb,0x2d,0x82,0x9e,0x46,0x7f,0xf5,0x64,0x60,0xfe,0x1a,0x37,0xee,0xa7,0xb6,0x85,0xb5,0x4e,0x30,0x11,0x39,0x4b,0xe9,0x57,0x18,0x3a,0x2c,0x6b,0xb9,0x8e,0x5a,0x54,0xa9,0x31,0xf7,0xe1,0xe0,0xc7,0x52,0xfe,0x76,0x9b,0xc6,0xfe,0xde,0xe0,0xe9,0xf9,0xf6,0x10,0xda,0xef,0x72,0x24 +.byte 0x9c,0xbe,0x4a,0xba,0x58,0x21,0x1b,0xe3,0x1d,0x80,0x10,0x76,0x70,0xde,0x8f,0xf3,0x07,0x93,0x01,0xe0,0xb4,0xd9,0x7d,0x60,0x0d,0x08,0x07,0xa4,0x6d,0x9b,0x2b,0x8c,0x9a,0x58,0x65,0x5e,0x29,0xf1,0x24,0xb2,0x31,0xfb,0xb7,0xad,0xf0,0x50,0x8e,0x25,0x1b,0x75,0xc5,0x82,0x88,0x8c,0x68,0x14,0x2c,0x28,0xa2,0xb6,0x93,0x14,0xe3,0x28 +.byte 0xd0,0x95,0x6f,0x79,0x91,0x03,0x75,0x82,0x5c,0x20,0x46,0x0d,0x53,0x40,0x2c,0x88,0x62,0xa4,0x8c,0xd5,0xf1,0xc1,0xbf,0xde,0x57,0x91,0xb2,0xa6,0x66,0x29,0xf0,0x6b,0xb8,0x5e,0x78,0x5f,0xd1,0x76,0x98,0xf2,0x56,0xc2,0x5f,0x48,0x1f,0xa6,0x98,0xb0,0x87,0x53,0x13,0x1d,0x1a,0xa7,0xdf,0xa5,0xea,0x37,0x12,0x6d,0x64,0x53,0xdc,0x04 +.byte 0x2d,0xb9,0xeb,0x78,0x89,0x7b,0x70,0xd2,0x6d,0x45,0x8d,0x45,0x50,0x57,0xc7,0xb2,0xaf,0xdd,0x72,0x0f,0x9f,0x1b,0x29,0x61,0x68,0xb5,0x4a,0xd4,0xe9,0xd7,0x10,0xe7,0xcd,0xe8,0x22,0xd3,0x54,0x0c,0x0b,0x32,0x77,0x7d,0x3e,0xed,0x6e,0x79,0x4b,0x7b,0x99,0x1f,0x9e,0xbe,0xe7,0x12,0x7c,0x94,0x36,0x1c,0x20,0x8a,0xd0,0xab,0xda,0x95 +.byte 0xf6,0x4f,0xbe,0x6f,0x44,0x0b,0xa3,0x7b,0x4d,0x00,0xf6,0xdf,0x6f,0xc8,0x50,0x9e,0x3e,0x0c,0x1e,0xfe,0xb8,0x39,0x9f,0x83,0x4f,0xb3,0x1f,0x7e,0x53,0x54,0x64,0x04,0xa3,0xf7,0x79,0x01,0x71,0xce,0x18,0x0d,0x47,0x4e,0xae,0x88,0x6a,0xe7,0x26,0x4e,0x59,0xee,0x3a,0x03,0xc2,0x4d,0x0c,0x29,0xf0,0x96,0x9d,0xc0,0xa3,0xb3,0x82,0xf9 +.byte 0xc4,0xf8,0x8b,0xae,0x68,0x47,0x39,0xdc,0x10,0xd7,0x09,0xb4,0x86,0x87,0xfa,0x7e,0x0c,0xe4,0xee,0x3a,0x35,0x1a,0x0e,0x95,0x88,0xce,0xe7,0x9e,0xcc,0xa5,0x58,0x98,0x48,0xbd,0x9c,0x27,0xe6,0xb9,0xf7,0xca,0x66,0xee,0x54,0x87,0xd0,0x6d,0xab,0x31,0x1a,0x57,0x33,0x8b,0x89,0xa0,0xc0,0x18,0x9a,0x87,0x5e,0x58,0x02,0xe5,0x50,0x47 +.byte 0x0f,0x60,0x53,0x9d,0x99,0xe4,0x0a,0xfa,0x4a,0xc3,0x77,0x4b,0x4d,0x4e,0x0c,0xbb,0x68,0xd9,0xb3,0xd3,0x59,0x78,0xdf,0x65,0x97,0x6e,0x22,0x5b,0x24,0x26,0xf9,0x2a,0x14,0x73,0xa7,0xec,0x65,0xfc,0xdf,0x7d,0x35,0x0d,0x44,0x1b,0x4b,0xad,0x6b,0x8f,0x0e,0xa3,0x3b,0x6b,0x40,0xb3,0xe3,0xd9,0x41,0xba,0xbf,0x95,0xbb,0x6e,0x91,0xf6 +.byte 0x63,0xb3,0xde,0xdb,0xc2,0x6f,0xfe,0x00,0xf1,0x53,0x96,0x37,0xa4,0x27,0x48,0x3e,0xf9,0x32,0x23,0x90,0x90,0xe0,0x01,0xde,0x08,0xad,0xc4,0x6c,0x25,0x7a,0x7f,0x2f,0xb7,0xb7,0xc6,0xaf,0xeb,0x91,0x9c,0xa2,0x9c,0xf7,0x7f,0x9f,0x74,0x9b,0x7d,0x54,0x66,0xf9,0xe0,0x73,0xb4,0x15,0x2b,0xaa,0x71,0x50,0xd0,0x74,0x5d,0xcd,0x1c,0x09 +.byte 0x4c,0x80,0xcc,0xdc,0x10,0xd9,0x96,0xb3,0xdc,0x09,0x73,0x1f,0x36,0x4c,0x1b,0x86,0x25,0x13,0x7c,0xd2,0xc6,0x9d,0x5a,0xce,0xd6,0x22,0x97,0x66,0x7b,0x7b,0x84,0xba,0x69,0xd2,0x87,0x9b,0x08,0xda,0x77,0x66,0x90,0xbc,0x7c,0x3c,0x5d,0x43,0x92,0x5f,0x05,0xfb,0x23,0x46,0x88,0xf7,0xa4,0x10,0xbd,0x7d,0x00,0x29,0x2d,0xa5,0x6a,0xab +.byte 0xcc,0xdd,0xcf,0x1e,0x2b,0x9b,0x5f,0xa9,0x94,0x14,0x99,0x6e,0x3b,0x41,0x52,0x61,0x16,0x17,0x44,0xcf,0x5b,0x34,0x5c,0x27,0x29,0x4a,0xc3,0xba,0x9a,0x0c,0x20,0x17,0x2b,0x92,0xd9,0xf1,0x76,0x51,0xd8,0xa5,0x4a,0x4b,0x4a,0x0b,0xe4,0x6b,0x93,0x61,0xc7,0xb3,0x23,0x7a,0x24,0xfa,0x5e,0xee,0x80,0x10,0x65,0x44,0xa5,0xed,0x72,0xd9 +.byte 0x8a,0x06,0x2a,0x86,0xa9,0x26,0x50,0xa1,0xb2,0xb2,0x8b,0x7b,0x4a,0x29,0xf1,0x18,0xef,0xff,0x61,0xf1,0xa1,0x48,0x0f,0x84,0x8c,0xef,0xd8,0x02,0x65,0x44,0x11,0xf2,0xe1,0xba,0x98,0x03,0xbe,0x5a,0x5d,0xb8,0x0a,0x88,0xd8,0x4a,0x49,0x4c,0x70,0xa6,0x98,0x81,0x36,0x56,0x92,0xde,0xcb,0xaf,0x33,0xf5,0x1c,0x0a,0xce,0x7a,0xc0,0xff +.byte 0x24,0x54,0xd3,0x9a,0x0f,0x82,0x76,0xe5,0x0e,0x82,0xb4,0xfe,0xc2,0xac,0xe4,0xba,0xa3,0x4c,0x8a,0x0d,0xa7,0x3e,0x2b,0x71,0x73,0x5f,0xd2,0x35,0xd3,0xae,0xc0,0x3e,0x6f,0x67,0x98,0x51,0xa6,0xdf,0xb2,0xf4,0xd2,0xc1,0x43,0xe2,0x0a,0x7c,0xa0,0xb6,0xff,0xfc,0xc0,0x88,0xe5,0x34,0x20,0x79,0x50,0xc3,0x06,0x5b,0x20,0x9f,0x05,0x33 +.byte 0x22,0x30,0xaf,0xc4,0xc3,0x17,0x09,0xbb,0x30,0x0f,0x42,0xb7,0xc1,0xe0,0x4c,0x71,0xc5,0xf7,0x96,0xb4,0xd4,0x0f,0x44,0x47,0xa3,0x06,0x17,0xbd,0x0f,0x7c,0xc6,0x53,0x07,0x34,0x9a,0x9a,0x2f,0x3f,0x01,0xea,0xdf,0x1c,0x06,0x33,0x15,0x9c,0x5a,0xe3,0x33,0x29,0xce,0x40,0x4b,0xb1,0x99,0xe0,0x80,0x6e,0x0c,0xa1,0x4c,0x34,0x01,0x21 +.byte 0x12,0xbe,0x67,0x26,0xe6,0xdb,0xab,0x8d,0x45,0xdd,0x12,0x60,0x02,0x1a,0xdd,0x85,0xd6,0x33,0x78,0x23,0xe1,0x58,0x2a,0x46,0xf0,0xc2,0x4d,0x71,0x59,0x5b,0x8d,0x65,0xa7,0x97,0xf4,0x71,0x88,0x7d,0x60,0xe0,0x2d,0x2d,0x09,0x2f,0x26,0x15,0xa7,0xbf,0x30,0x0b,0x99,0x08,0xd7,0x85,0xfc,0x0c,0x19,0x31,0xde,0x5e,0x55,0x91,0x13,0x45 +.byte 0x3a,0x6d,0xd0,0x61,0x02,0x81,0xa0,0x42,0x7d,0xd8,0x7d,0x41,0x11,0xd2,0x25,0xb7,0x15,0xa1,0x16,0x3e,0x70,0x77,0x1b,0x80,0xb7,0xf1,0x24,0x8e,0x70,0x8d,0x73,0x6d,0xba,0xf1,0x46,0x32,0x60,0xe4,0xc8,0x4d,0x69,0xc8,0x10,0xf8,0x2d,0x53,0xe1,0x81,0x96,0x20,0x9d,0x59,0x74,0xae,0x93,0x92,0x44,0x5a,0x09,0x79,0x20,0xcb,0xff,0xb2 +.byte 0x08,0x7a,0x81,0xee,0x98,0x83,0x0b,0xa4,0x15,0xb0,0xaa,0x55,0xb0,0xb5,0x60,0x09,0x21,0xeb,0xe2,0x9b,0x57,0x41,0xb9,0xb4,0xd9,0xbe,0x7d,0x60,0x5d,0x25,0xde,0x9f,0x9e,0x5b,0x7c,0xee,0xeb,0x87,0x54,0x6a,0xc3,0xcf,0xec,0x57,0xce,0x97,0x2e,0x47,0x84,0x4c,0x15,0xf4,0xf5,0xe9,0xd4,0x45,0x23,0x20,0xf0,0x0f,0xda,0x97,0xc2,0xb9 +.byte 0xb2,0xe2,0x44,0xea,0xbd,0x95,0x73,0xcc,0x94,0x03,0x0b,0x97,0xeb,0x03,0xc1,0x51,0xc8,0x14,0xa6,0x7d,0x18,0x30,0xa1,0xda,0xa3,0xcd,0x78,0x67,0xb0,0xc1,0x6c,0x88,0xdd,0xd6,0x52,0x4b,0x85,0x1d,0x4a,0xaa,0x44,0xec,0x3b,0xff,0x00,0xd8,0x9e,0x18,0xf8,0xac,0x4f,0x73,0x6d,0xc7,0x4b,0x59,0x15,0x85,0x87,0x02,0xd8,0xf1,0xe6,0xfb +.byte 0x66,0x57,0xcf,0x06,0x84,0x50,0xc5,0x67,0x94,0xc6,0x96,0xb2,0x1a,0x37,0x06,0x3d,0x21,0xf2,0x1e,0xb4,0xe7,0xcb,0x36,0x8b,0xa3,0xe3,0x84,0xa0,0x9a,0x31,0xdb,0x87,0xf9,0xb0,0xef,0x06,0xfe,0xb0,0x8a,0x32,0x53,0xb4,0x41,0x79,0x6b,0xf7,0x7c,0xf7,0x9c,0xc1,0xea,0x61,0xf3,0x75,0xac,0x1f,0x92,0x75,0x44,0x58,0x9a,0x20,0xa4,0x20 +.byte 0xe3,0x19,0x1c,0x0d,0x27,0xe5,0x2e,0xbd,0x14,0xcb,0x40,0x3f,0x1c,0x19,0x7c,0xf9,0x92,0x13,0x1a,0x71,0x87,0xaf,0x77,0x0f,0x50,0x92,0x06,0x75,0x2d,0x75,0xe0,0x2e,0x37,0x54,0xcd,0xac,0xcb,0xca,0x7c,0x0e,0x66,0x53,0x10,0x50,0x70,0x9a,0xa4,0x79,0x76,0x87,0x71,0x4a,0x55,0xd4,0xa3,0x83,0xb3,0x04,0xed,0xa9,0xd6,0x84,0x7d,0x1a +.byte 0x64,0x5d,0xf7,0x4f,0x55,0x97,0x5e,0x26,0x9c,0x03,0x42,0x0a,0x16,0xd3,0xdf,0xc8,0x07,0xb8,0xb3,0xe9,0xac,0xa9,0x99,0x83,0x32,0x5b,0x83,0xde,0x7f,0x2b,0x70,0xca,0x15,0x09,0x33,0x0e,0x28,0xc9,0x89,0xc6,0xa6,0x47,0xd1,0x56,0x04,0x40,0x5d,0xd2,0x17,0x1d,0x32,0x21,0x6d,0xb2,0xc7,0x89,0x14,0x98,0xc6,0x58,0xc4,0xca,0xda,0x0f +.byte 0x32,0xdd,0xe1,0xe1,0x9a,0x25,0x09,0x31,0x16,0xf1,0x48,0x40,0x1c,0xc2,0xf9,0xd0,0xba,0xec,0x07,0x94,0xea,0x17,0xcf,0x6e,0xbc,0xfd,0x70,0xb4,0xbb,0x40,0xae,0xc3,0xae,0xf7,0x56,0xf5,0x13,0x55,0xfb,0x4b,0x81,0x5d,0xab,0xf2,0x3f,0xd7,0xa7,0xe6,0xcf,0x17,0xef,0x1f,0x71,0x1b,0x92,0x67,0xd3,0xd2,0xed,0x89,0x14,0x8f,0x8d,0x83 +.byte 0xef,0x7f,0xca,0x65,0x6d,0x79,0x13,0x5f,0x6e,0xf9,0x5d,0x9a,0x68,0x54,0x71,0x5c,0x9d,0x03,0x7c,0x73,0x7a,0xc2,0x17,0x9b,0x5a,0x7d,0x45,0x24,0x0c,0x41,0x13,0xe4,0xcb,0xdb,0x7b,0xc6,0xfb,0x93,0x48,0xca,0xd3,0x01,0x68,0x3f,0x36,0xc0,0x4b,0x1d,0xfa,0x9f,0x25,0x0e,0xcc,0xd0,0xf7,0xa0,0x7a,0x14,0xac,0xd7,0x6e,0x00,0x9f,0xf1 +.byte 0xc0,0xdc,0xfc,0x3b,0xd9,0xbf,0x68,0xfd,0x65,0x34,0x66,0x18,0xe5,0x02,0x9a,0x2d,0xff,0xaa,0xf7,0x73,0x58,0x21,0xe3,0xff,0x23,0x0f,0x63,0x1f,0xf3,0x8b,0x08,0xc7,0x00,0x46,0xe7,0xef,0x85,0x5f,0x7f,0xd9,0x5f,0xc2,0x36,0xe2,0xb6,0xa3,0x00,0xcb,0xff,0xe0,0x22,0x28,0x8c,0xb1,0xb1,0x17,0x91,0x4a,0x4a,0xc8,0x77,0x5a,0xa9,0xb2 +.byte 0x6e,0xb7,0xf0,0x4f,0x70,0x34,0x7f,0x87,0x2a,0x0c,0xcb,0x16,0x24,0x9b,0x41,0xb2,0x3e,0x0a,0xc1,0x33,0xf3,0xbb,0x48,0x17,0x2f,0xe6,0xfc,0xf4,0x27,0xc0,0xdb,0x58,0x24,0x9b,0x99,0x43,0x25,0xfb,0xd3,0xcf,0x1c,0x5a,0x5f,0xbe,0x28,0x3a,0x84,0x51,0x19,0xc3,0x53,0x6b,0xc8,0x73,0x44,0x6e,0x3d,0x7e,0x01,0x37,0xc2,0x2b,0xf7,0xa8 +.byte 0x1f,0x8e,0xd8,0x02,0x5a,0xae,0x56,0x81,0x2b,0x46,0x1b,0x7d,0xca,0x27,0x1f,0x48,0x99,0x24,0x54,0x59,0x08,0xfd,0xb7,0xdf,0x0a,0x77,0xef,0x4e,0x89,0x21,0x71,0x71,0x3f,0x8c,0xd7,0x52,0x89,0x7a,0x0d,0x68,0x09,0xc8,0x88,0x9c,0x0c,0x60,0xca,0x77,0x96,0xeb,0x05,0xeb,0xeb,0x60,0x5b,0x68,0x51,0x2c,0xcb,0x8f,0xca,0x3b,0x18,0x39 +.byte 0x28,0x8f,0xda,0x17,0x9b,0x53,0x71,0x26,0xa9,0x19,0xfb,0x1e,0x4a,0xd0,0x14,0x93,0x1c,0xee,0xe1,0x21,0xea,0xb3,0x16,0x47,0xaf,0x50,0xe5,0xe5,0xd3,0x21,0x8c,0x67,0x46,0x5d,0x97,0x19,0xda,0x6e,0xd9,0x70,0x7d,0x9f,0xd6,0x25,0xd0,0xfb,0x01,0x62,0x0a,0x9e,0x49,0x3d,0x33,0x0d,0x35,0xe5,0xae,0xfd,0xeb,0xb5,0x9b,0xd8,0xc1,0x2a +.byte 0xee,0x4d,0xf2,0xfc,0x16,0x51,0xab,0x58,0x7a,0x9e,0x5c,0xca,0x0a,0x92,0xbb,0xbb,0xa8,0x5b,0xfb,0xf9,0x33,0x67,0x0e,0x13,0x4c,0x83,0x3a,0x25,0x84,0x23,0xe1,0x41,0xfb,0xf1,0x42,0xc1,0x8d,0x58,0x0c,0x5e,0x75,0x09,0x34,0x58,0x96,0x32,0x54,0xb6,0xd8,0xaa,0x48,0xc1,0xed,0xc0,0x92,0x5a,0xec,0xeb,0xb1,0x75,0x59,0xf6,0x35,0xf5 +.byte 0xfd,0x7d,0x96,0x9b,0x83,0x38,0x31,0x10,0xa4,0xd7,0xfb,0x28,0xf0,0xc9,0xe4,0x33,0x5d,0x66,0x81,0x9c,0x31,0x9a,0xe9,0x9a,0x5e,0x70,0xf7,0x61,0xf9,0x93,0xaf,0x2b,0xbd,0x78,0x9e,0xdc,0x61,0xe0,0xa9,0xd1,0xa0,0x8e,0x3a,0x5f,0xb1,0x71,0xe7,0x9e,0xfd,0x81,0xee,0xf0,0xd6,0x63,0xec,0x4a,0xca,0x30,0xaf,0xb6,0x2d,0xaa,0x2d,0xa1 +.byte 0x5a,0x38,0xb5,0xc6,0x3f,0x5f,0x63,0x48,0xd3,0x18,0xeb,0xe3,0x36,0xca,0x91,0x86,0x4b,0x6f,0x57,0x66,0x47,0x2f,0xce,0xe4,0x44,0x26,0xe4,0xfd,0x8c,0xde,0x74,0xdc,0x17,0x0e,0x7d,0x6a,0xcf,0x89,0x0e,0x7f,0x09,0x65,0xf8,0xeb,0x58,0x00,0x3d,0xc5,0x1b,0x14,0xc5,0xca,0xca,0x28,0xbc,0xb7,0x63,0x6f,0x3b,0xa4,0x62,0x23,0x0e,0xd5 +.byte 0x04,0x76,0x0c,0xe8,0xea,0x64,0x10,0x3a,0x76,0x03,0xd6,0xea,0x69,0x52,0x14,0xa7,0x5e,0x40,0x7e,0x14,0xdb,0x7f,0xbf,0xe8,0xf6,0xf0,0xdd,0x5e,0xac,0x55,0x44,0xfb,0x28,0xf3,0x16,0xcb,0xed,0x8f,0x10,0x01,0x91,0xac,0x2c,0x27,0x46,0x0c,0x51,0xd6,0xf6,0x30,0xa3,0x34,0xd0,0x5e,0x93,0xe8,0x4e,0xc0,0xb4,0x9b,0xc1,0xe8,0x20,0x7d +.byte 0xb7,0x68,0xdd,0xf1,0xc4,0x60,0x20,0x97,0xdd,0x5c,0x7c,0x9b,0xea,0xc0,0x22,0x84,0x2c,0x65,0x78,0xbd,0x18,0xa1,0x62,0x7e,0x06,0x49,0x96,0xde,0xd1,0x89,0x06,0x0d,0x35,0xa0,0xcc,0x22,0xd3,0xf5,0xa6,0x4b,0xb6,0xca,0x43,0x34,0x5a,0x3d,0x39,0x95,0x0b,0x95,0xbe,0xdc,0xe6,0x61,0x72,0xbe,0x2f,0x19,0x1c,0xe8,0x22,0x5e,0x18,0xc9 +.byte 0x59,0x4a,0x08,0xa3,0x85,0x5c,0x06,0x36,0x00,0x2e,0x84,0x3e,0x3e,0x07,0x5b,0xfa,0xda,0xbb,0xbb,0x57,0x20,0x6f,0x1b,0x8d,0xe5,0xc5,0xdb,0x8d,0x23,0x1a,0xfc,0x67,0xa9,0xc8,0xea,0xe1,0x54,0xbb,0x8a,0x8a,0x0b,0xa6,0x02,0x35,0xd6,0xd5,0x4d,0xff,0x09,0x79,0x31,0x9a,0xc2,0xad,0xa7,0x66,0xb5,0x3c,0xbd,0xb7,0xcb,0x17,0x30,0x4b +.byte 0x56,0xf5,0xd2,0x51,0x90,0xbb,0x47,0x00,0xc0,0xf3,0x8b,0xd7,0x10,0x33,0x6d,0xe8,0xe4,0xcf,0xd6,0xbf,0x35,0x75,0x8d,0x40,0x55,0xd7,0x5d,0xb0,0x40,0xf6,0x95,0xfb,0x1a,0x97,0x24,0xb8,0xc1,0x91,0x5f,0x66,0x6c,0xc7,0xdb,0x16,0xba,0xb8,0x07,0xf8,0xf8,0x91,0xb2,0x8c,0x26,0xb9,0xa2,0x59,0xb0,0xde,0x49,0x63,0xcc,0x7c,0x4c,0x48 +.byte 0xb5,0xe4,0xf9,0x81,0x28,0x48,0x9f,0xa0,0xa4,0xf8,0x0d,0xcc,0x7b,0xf3,0xce,0x08,0x85,0x73,0x4a,0x64,0xfc,0xa8,0xc0,0xae,0x7a,0xbf,0xa5,0x3f,0x45,0xaf,0xe7,0x7f,0x41,0x61,0x34,0x08,0x6e,0x09,0x0d,0x9d,0xea,0x90,0xbe,0x62,0x7c,0x38,0x92,0xa7,0x63,0xfa,0x03,0x80,0x10,0xc4,0x53,0x46,0x0b,0x44,0x88,0xea,0x50,0xb6,0x82,0xf8 +.byte 0x0b,0x2d,0x93,0x63,0x82,0x80,0x2b,0x61,0x3e,0x17,0xd1,0xd8,0x6c,0xb1,0xb4,0xbd,0xfd,0xad,0x1c,0x10,0x30,0xc1,0x78,0xd4,0x5f,0x21,0x49,0x54,0x7a,0x08,0x2b,0x25,0x3b,0xc9,0xb7,0x0a,0xf2,0x37,0x83,0xc0,0x43,0x73,0xee,0xd6,0x8b,0x92,0x15,0xde,0xfe,0x14,0xf1,0xfb,0x8b,0x4a,0x85,0x8d,0x78,0xe6,0x36,0x1a,0xbb,0x32,0x6c,0xdd +.byte 0x43,0x76,0xad,0x68,0x90,0x08,0xd2,0xbd,0x24,0x41,0xd4,0x93,0x17,0xa8,0x9f,0xeb,0x33,0x25,0x1f,0x1a,0xfd,0x45,0x20,0xc1,0x47,0xf1,0x25,0x09,0x89,0x14,0x9e,0x4c,0x88,0xa4,0x1c,0xb8,0xba,0x84,0xd5,0x7d,0x73,0xb2,0x9c,0x48,0x9f,0x84,0x31,0xd3,0x2c,0xe1,0x94,0x61,0x3e,0x5f,0x37,0x25,0xc7,0xb7,0x2d,0xc3,0xa9,0xaf,0xcc,0x0e +.byte 0xe6,0xc7,0x9a,0xa7,0x06,0xe3,0x41,0xb8,0xa6,0xa8,0x9a,0xe7,0x76,0xef,0x83,0x5a,0x80,0xa4,0xe3,0x0c,0x04,0xa2,0x0b,0x91,0x33,0x34,0x17,0xa4,0x02,0x2d,0x12,0x84,0x67,0x85,0x6b,0xc0,0x3a,0x0d,0x16,0xf2,0x66,0x04,0x71,0xe9,0xec,0xa6,0xbb,0x58,0x42,0x92,0x70,0xf5,0x0d,0x52,0xcd,0x1e,0x2d,0xd4,0x28,0x0f,0x68,0x35,0xd9,0xa4 +.byte 0x40,0x09,0x30,0xe9,0xbb,0xaf,0x77,0x63,0x4f,0xba,0x56,0x97,0xe8,0x92,0xcc,0xba,0xdb,0xe4,0xe0,0xdf,0x19,0x21,0x71,0x23,0x3d,0xd0,0xb1,0x25,0xd3,0xf8,0x53,0x01,0x30,0x9a,0xea,0x84,0x1b,0x18,0x68,0x4a,0xb9,0x9e,0x60,0xc4,0xfc,0xf7,0x56,0xb7,0x49,0xe1,0x50,0x38,0x7d,0x3d,0x87,0xa2,0xad,0x38,0x5c,0x0c,0x53,0x21,0xa0,0x56 +.byte 0x3a,0x94,0xd7,0xa8,0x23,0x96,0xa9,0x66,0x4e,0x88,0xae,0x4b,0x6e,0xcb,0xc6,0xa6,0xdb,0x1f,0x2e,0xae,0xe7,0x24,0xe2,0x1e,0xf7,0x3a,0x14,0x48,0x5e,0xfa,0x90,0x0a,0x84,0xa6,0x1c,0xaa,0x60,0xc0,0x2c,0x69,0xe8,0x36,0xb3,0xee,0x55,0x2a,0xf7,0x90,0xa1,0x92,0x4f,0x29,0x1e,0x49,0x6e,0x73,0x22,0x1f,0x8b,0x0c,0xb6,0xf4,0x3c,0xbf +.byte 0x82,0x47,0x49,0xc3,0x94,0x0e,0xcf,0x9b,0x86,0x88,0xc2,0xd0,0xd7,0xa7,0x43,0xfb,0x89,0x4b,0xbd,0x5d,0x4c,0x6b,0x7a,0xc7,0x74,0x1b,0xfb,0x48,0x12,0x68,0x61,0x91,0xf9,0xf3,0xb6,0x7f,0x4f,0x72,0x89,0xf0,0x72,0x46,0xf7,0x6f,0x84,0xd1,0x38,0x6d,0xd9,0x1b,0xa5,0xd1,0xe2,0x29,0xe0,0xa6,0xbf,0x1c,0xbd,0xfb,0xdd,0xdc,0xa5,0xae +.byte 0x7a,0x9c,0xd0,0xc3,0xfa,0x6f,0x72,0xa3,0xa2,0x8b,0x87,0x0d,0x9a,0x6a,0xfc,0x53,0x9a,0x08,0x61,0x86,0x67,0x2a,0x90,0x6a,0x09,0x20,0x8e,0xde,0x32,0x35,0x34,0x75,0xc0,0xa8,0xab,0x1b,0xc4,0x7c,0xc8,0xd9,0x90,0xcf,0x32,0x27,0x6c,0x68,0xf9,0x18,0x14,0x05,0x57,0x39,0xc6,0x9e,0x5e,0x38,0x07,0xdb,0x81,0xb4,0xa4,0x54,0x06,0xd6 +.byte 0x79,0x78,0x0e,0xc8,0xb9,0x56,0xda,0x08,0x2e,0x77,0x26,0xcc,0xf7,0xa5,0x2d,0xd8,0x91,0xa6,0xfc,0x25,0x0e,0x91,0xdd,0x3c,0xa8,0x14,0x7a,0x95,0x05,0x5b,0x15,0x7d,0x1d,0x9b,0x3c,0x8c,0xfd,0xdc,0xa5,0xcd,0xec,0xea,0x7a,0x2b,0x7e,0x79,0x21,0x54,0xea,0x7f,0x52,0xb4,0xbb,0x4f,0x07,0x95,0x39,0x4a,0xaf,0x2e,0xb4,0x1e,0x9e,0xc6 +.byte 0x0a,0x07,0x58,0xd4,0xa5,0x44,0x73,0xa8,0x84,0x26,0x67,0xb8,0x0f,0xc7,0x6b,0xa7,0x28,0xf6,0x05,0x91,0x3e,0x22,0xcd,0xd7,0xf5,0xfc,0xae,0x22,0x42,0x96,0x3b,0x57,0x91,0xce,0x44,0xd0,0xfd,0xc3,0x4c,0x8b,0x8b,0x67,0xfe,0x03,0x86,0x92,0x34,0xf7,0xf9,0x53,0xb3,0xdf,0x36,0xcf,0x16,0x1c,0x68,0x36,0x17,0x1f,0x41,0x56,0x1d,0xda +.byte 0x90,0xb3,0xab,0x03,0x97,0x88,0x23,0x65,0x89,0x72,0xe3,0x6d,0x8e,0x37,0x5d,0xee,0x89,0x81,0x11,0x27,0x8b,0xf0,0x9b,0xef,0xa2,0x34,0x45,0xcc,0x41,0xcf,0x2a,0x88,0x70,0xe4,0x78,0xfc,0xe1,0xb5,0x51,0x70,0x84,0x64,0xd1,0x10,0x71,0x5d,0xa4,0xb4,0x6d,0xb5,0x98,0x6e,0xcc,0x9a,0x62,0x14,0x30,0xce,0x1a,0xff,0x49,0xd6,0xaa,0xcc +.byte 0xe1,0x99,0x42,0xb1,0xfe,0x77,0x8a,0x2d,0xdb,0xc0,0x0d,0x50,0x53,0x0d,0x92,0xe5,0x2b,0xd0,0x78,0x83,0x08,0x4a,0x0c,0x1d,0x5b,0x03,0x22,0x65,0x3d,0x9e,0xdb,0xcf,0x01,0x61,0xf7,0x6d,0x2b,0x99,0xef,0xba,0x80,0x50,0xda,0xda,0x2d,0xbf,0x00,0xdf,0x6f,0xec,0x95,0xbc,0x5b,0x4e,0xda,0x83,0xe4,0x5d,0xf0,0xa7,0x1b,0x27,0xf1,0x76 +.byte 0x04,0x5d,0x3d,0x2c,0x12,0x15,0xad,0xef,0x47,0xdc,0x22,0x9b,0xc2,0x80,0x91,0xf3,0xbf,0x16,0xe9,0xd3,0x35,0x94,0x4b,0xfd,0xa3,0xa1,0xee,0x98,0xad,0x99,0xea,0x07,0xe1,0x0f,0xa7,0xbd,0x0b,0xfb,0xc0,0xd5,0xb0,0x49,0x37,0xc6,0x5f,0xe7,0x18,0xc1,0x60,0xe9,0x1d,0x5e,0x0e,0xea,0x73,0xf2,0xa1,0x75,0x7e,0x39,0x51,0x07,0x1e,0xcb +.byte 0x2a,0x5b,0x26,0x75,0xbe,0x02,0x5e,0xde,0x6c,0x37,0xb1,0x3c,0x1f,0x25,0x65,0x7d,0x9e,0x5d,0xa1,0x0b,0x98,0x27,0x53,0xb9,0xbb,0xc2,0x3e,0x8d,0x2d,0x5e,0x5c,0xbf,0xed,0x66,0xe8,0xd1,0x7d,0xaa,0xef,0xca,0x0e,0xd0,0x78,0x2b,0x89,0x07,0x76,0xb6,0xc3,0x92,0x42,0x3a,0x84,0x1d,0x81,0xc1,0xe8,0x1a,0xb8,0xe6,0xf1,0x43,0xcc,0x7a +.byte 0x59,0x4d,0x9f,0x00,0xfe,0x6a,0xe5,0x42,0x71,0x3c,0xcb,0xc8,0x45,0x18,0xf0,0xf2,0x81,0x9d,0x5a,0xb7,0x8d,0xbe,0x31,0xcb,0x7d,0xca,0xb7,0x19,0x57,0xb1,0x61,0x36,0x90,0x42,0xe2,0xc3,0xf5,0xa5,0x4b,0xc3,0xd4,0xe7,0x6c,0xb6,0x0c,0x06,0x19,0x4b,0x54,0x8f,0x2d,0xdc,0xc5,0x2b,0xff,0x1c,0x61,0x29,0xda,0x95,0x4f,0xa1,0x21,0x25 +.byte 0x24,0xbe,0xc7,0x34,0x2f,0xbf,0x33,0x6d,0x82,0x8f,0xf1,0xa9,0x97,0x5a,0x49,0x7f,0x60,0x00,0xf2,0x3e,0x7b,0x64,0xdf,0xc8,0xd3,0x5f,0x6e,0x1f,0xfb,0x71,0x80,0xf3,0x55,0x42,0xbe,0x32,0x7b,0xa9,0xeb,0xf6,0x31,0xe2,0xf0,0xd1,0xe9,0xbe,0x96,0x0e,0xb3,0xdf,0x3e,0xb2,0x2c,0xc3,0xce,0xbd,0xe7,0xfe,0x1c,0xed,0x2c,0x0b,0xaa,0x32 +.byte 0x76,0x82,0xb4,0x6b,0x18,0xa7,0x68,0x19,0xb7,0x27,0x21,0x4c,0xb0,0x22,0x98,0x58,0xd5,0x90,0x80,0xab,0xa1,0xfe,0x83,0xc5,0x66,0xf6,0x3e,0xa2,0xa9,0x6f,0x73,0xce,0x7f,0x0c,0xe6,0xde,0xee,0xb0,0xe6,0x2a,0xcc,0xcc,0xb0,0x53,0x8c,0xce,0xc8,0xdc,0xea,0x83,0xb4,0x0e,0x69,0x8d,0x90,0x86,0xaa,0xe3,0x3b,0xfb,0x88,0xe2,0xe8,0x27 +.byte 0x65,0x36,0x07,0xb3,0x91,0x0e,0x5a,0x6b,0x9f,0x0f,0xbd,0x81,0xb3,0x54,0x65,0x71,0xa4,0x2c,0x8e,0xda,0x47,0x04,0xce,0xfe,0x00,0x52,0xf1,0xdf,0x82,0x27,0x70,0x2a,0xb1,0x79,0x2f,0x27,0x7f,0xae,0x9e,0x5c,0x36,0xec,0xa0,0x2a,0xf3,0x74,0x78,0x01,0x17,0x74,0x2a,0x21,0x4f,0xb8,0xd2,0xe4,0xfe,0x5b,0x06,0x14,0xa5,0xb1,0xb1,0xff +.byte 0xee,0x79,0xf7,0x18,0xb9,0x31,0xa4,0x63,0x47,0x1c,0xdf,0x38,0x04,0x2d,0x18,0xca,0x14,0xf8,0x2f,0xec,0x0d,0x58,0xad,0xbb,0xf4,0x45,0x11,0x0e,0xfa,0x17,0x4c,0x5e,0xd4,0xa6,0xde,0xe4,0x13,0x44,0x2c,0xb9,0xfd,0xcd,0x41,0xe7,0xf9,0xda,0xbc,0x28,0x8f,0x0c,0x41,0x4d,0xa7,0x0d,0xf5,0x96,0xd7,0x8f,0x10,0x96,0xfb,0x75,0x75,0x86 +.byte 0xc9,0x6e,0x23,0x92,0x71,0x69,0x7b,0x94,0x61,0x1c,0x3f,0xcf,0x66,0x34,0x62,0x68,0x5d,0xee,0x7b,0x34,0x5d,0x2a,0x39,0xbb,0x6a,0x34,0xea,0x6e,0xe3,0xe9,0xdb,0xe4,0x34,0x6e,0x29,0x0b,0x21,0x38,0xe7,0x5b,0x79,0x37,0x54,0xf0,0xed,0xaa,0x07,0x2b,0x21,0x29,0x67,0xfe,0x7d,0xa5,0x99,0x0e,0x5d,0x05,0xe7,0x61,0x6e,0xd1,0x4a,0x15 +.byte 0x4a,0x56,0xb1,0x13,0x49,0x8c,0xf4,0x4f,0xd7,0xe9,0x68,0xae,0x09,0x37,0xd3,0x96,0x21,0xe8,0x1f,0x9f,0xa9,0xc6,0x54,0x57,0x63,0x09,0x1e,0x71,0xf2,0x48,0x9e,0x50,0xbb,0xb3,0xf1,0x4e,0x2d,0x1d,0x79,0x69,0x0a,0xa2,0xa9,0xdd,0x1b,0x55,0x62,0x6b,0x0d,0xcc,0x9c,0xb1,0x5e,0xc8,0x4c,0x4f,0x62,0x3c,0xc4,0xa3,0xb4,0xe4,0x34,0xec +.byte 0x9d,0x0c,0x1b,0x46,0x60,0x68,0xd5,0x04,0xd7,0x1b,0x3c,0x7a,0x98,0x0c,0xd9,0x87,0x2b,0x4f,0x97,0x5b,0x56,0x65,0xb0,0x06,0x6e,0x9e,0x06,0x37,0x0e,0xd2,0xa1,0x52,0xf5,0xaa,0x2b,0xec,0xbd,0x0f,0xb6,0xba,0x48,0x63,0x57,0x51,0xe3,0x00,0x53,0xf5,0x77,0xb2,0xa4,0xb1,0x44,0x01,0x3e,0xcf,0xe9,0x2a,0x7a,0xf5,0x19,0x5e,0x43,0x36 +.byte 0xe0,0x38,0x41,0xbc,0xda,0xb5,0xd0,0x69,0xdf,0xd2,0x04,0xd4,0xf8,0x38,0x37,0x1c,0x90,0x30,0xf2,0x3d,0x03,0xe4,0x3f,0x84,0x2c,0x9a,0xa4,0x8a,0x00,0x4e,0x49,0x24,0x62,0x06,0xb4,0x9d,0x33,0x8a,0x8e,0xd2,0xbd,0x1b,0xa1,0x83,0x0b,0xa5,0xa2,0x5c,0xcf,0xb1,0x65,0x85,0x92,0x1f,0xb0,0x2e,0x3b,0xb2,0xf3,0x80,0xff,0x9d,0x41,0x4d +.byte 0xcd,0x25,0x09,0x02,0x85,0xb3,0xa8,0x49,0x12,0x10,0xe7,0x5c,0x94,0x13,0x4b,0x52,0x53,0x35,0x9c,0xbc,0x7a,0xad,0x04,0x19,0x54,0x8a,0xbc,0x42,0x73,0xf1,0x0a,0x22,0x75,0xbf,0x3b,0x12,0xa8,0xa4,0x47,0x5c,0x95,0x48,0x60,0x71,0x5c,0x9a,0x39,0x5c,0xdb,0x44,0xe8,0x74,0x92,0x3e,0x2b,0x3b,0x1b,0xb7,0x21,0x98,0xe1,0x87,0x32,0xaf +.byte 0x4a,0xe3,0xda,0x4a,0x46,0xde,0x15,0x4c,0xdc,0xc6,0x60,0xe6,0xd7,0x92,0x29,0x05,0x21,0x22,0x9b,0xaf,0xc4,0xd7,0x6a,0xea,0x2c,0x82,0x5d,0xc7,0x81,0xe2,0x67,0x85,0xd2,0x16,0x6f,0x83,0xa8,0x82,0x5f,0x8f,0xf5,0x3a,0x50,0xba,0x04,0xcb,0x76,0x4d,0x80,0x16,0x12,0x72,0xa8,0x6c,0xac,0x78,0xf1,0x8c,0x93,0xab,0xe0,0xb5,0xdc,0xd1 +.byte 0xa5,0x40,0x0e,0x50,0x88,0xd2,0x9d,0x56,0xf6,0xa0,0xd4,0x45,0xcf,0xef,0x16,0x1a,0xa4,0xaa,0x91,0x5c,0xa3,0x8f,0x84,0xf8,0x3e,0x30,0x1f,0x5f,0x55,0xf9,0xd3,0x3d,0xb8,0x64,0xbb,0x3c,0x91,0xe4,0x0d,0xa5,0x43,0x14,0x75,0xe7,0xec,0x8c,0x12,0x56,0x34,0xb0,0xa9,0xae,0x93,0x91,0x34,0xfc,0x78,0xa3,0x81,0x51,0x45,0x7d,0x9f,0x7d +.byte 0x5e,0xc7,0x5e,0x51,0x17,0xfa,0x02,0x5d,0xb2,0xf7,0x79,0x4b,0x49,0xd2,0x1b,0x6f,0xfd,0x9e,0xff,0x75,0x74,0xf0,0x26,0x7e,0xd7,0x65,0xb0,0xf3,0x0a,0x0c,0xd2,0xa2,0x26,0x98,0x03,0x26,0xb5,0x67,0xc4,0xc0,0xed,0x80,0xd4,0x20,0xf6,0x7e,0x17,0x54,0xeb,0xde,0xc3,0x86,0x51,0xda,0xf7,0xe5,0xc7,0xfe,0xfc,0x71,0x83,0x80,0xbe,0xde +.byte 0x4b,0xda,0x83,0x76,0x63,0x04,0x03,0xdd,0xe0,0xe0,0x4e,0xb6,0x32,0xd5,0xd0,0xce,0xd7,0xaa,0xcd,0x5f,0x64,0xa6,0xd8,0x9e,0xc5,0x97,0x30,0xad,0xf1,0x82,0x8f,0x7c,0x18,0xec,0x30,0x1d,0x2d,0xb6,0xdb,0x33,0x65,0xed,0xe2,0x24,0xd8,0xba,0x0a,0x1f,0x79,0x2a,0x1c,0xe1,0x4e,0x04,0xa6,0x74,0x74,0x37,0x42,0x94,0xc4,0x99,0x0e,0xf8 +.byte 0x3f,0xf3,0xff,0xeb,0x7f,0x95,0x9c,0x47,0x56,0x68,0x6a,0x0d,0x6e,0x66,0x71,0x3b,0x51,0xd5,0x12,0x7e,0x59,0x39,0x43,0xb5,0x53,0xd3,0x1d,0xa2,0xe9,0xa1,0xc8,0x8d,0xf2,0x8e,0xa1,0x9c,0x36,0xdd,0xda,0xd3,0x61,0xd8,0xe9,0x76,0x5e,0xcb,0x0a,0x52,0xc8,0x5a,0x25,0x00,0x21,0xea,0x6a,0x96,0xde,0x02,0x76,0x02,0x63,0x73,0x28,0x63 +.byte 0x46,0x37,0xe1,0x75,0x2f,0x42,0x8f,0xee,0x2c,0x84,0x82,0x43,0x43,0x2d,0xa9,0x13,0x50,0x46,0x54,0xed,0x76,0xbd,0x10,0x1c,0x9b,0xa1,0x42,0x97,0x68,0xca,0x84,0x2e,0x1d,0x6f,0x86,0x67,0xaf,0xb7,0x20,0xc1,0x7c,0xab,0x70,0x20,0xa1,0x79,0x71,0xe4,0xb7,0x45,0x8a,0x04,0xd3,0x70,0x10,0xa8,0x28,0xc3,0x56,0xff,0x43,0x36,0x13,0x88 +.byte 0xb6,0x2d,0xfd,0x7f,0xbc,0xc9,0x1d,0x11,0x9a,0x7c,0xd0,0xfc,0x11,0xac,0x54,0xd5,0xc3,0x03,0xd1,0xe3,0x9e,0xff,0x03,0xdb,0xd9,0xd8,0x77,0x96,0x08,0xf4,0x1b,0xd9,0xfa,0x70,0xed,0xab,0x53,0x78,0xca,0x28,0xa7,0x29,0x49,0x45,0x37,0x10,0x8f,0x61,0x7d,0x11,0x99,0x2e,0xe8,0x5d,0x45,0x3a,0xe7,0xd2,0x6c,0xb6,0x03,0xc4,0x6d,0xaa +.byte 0x52,0x60,0x8c,0xc6,0x9c,0x17,0xba,0xf6,0x3b,0xd4,0x4b,0x26,0x63,0x92,0x8c,0xb9,0x6a,0xf2,0x26,0x91,0x9d,0x8d,0x99,0x39,0x26,0x7d,0xb5,0x4f,0x4c,0xc6,0x0e,0x2e,0xe1,0xc6,0xcb,0x98,0x93,0x71,0x9b,0xaa,0x01,0x40,0x70,0x93,0x2a,0xe8,0x27,0xc5,0x20,0xa7,0xd2,0x06,0x8b,0xb0,0x29,0xcd,0x4f,0x2c,0x5a,0xde,0x35,0xc7,0x2a,0x8e +.byte 0xa7,0xae,0x02,0xfa,0x8e,0x4d,0xf3,0x77,0x67,0xe0,0xcb,0x84,0x69,0xc6,0x05,0xe4,0x84,0xe3,0x6e,0x02,0x6c,0x3b,0x93,0x30,0x3e,0x89,0x2c,0xc7,0xa5,0x7e,0xaa,0x58,0x59,0x25,0xf6,0xff,0x56,0x9a,0x4a,0x70,0xbf,0x88,0x20,0x8d,0x51,0x5e,0x08,0x13,0x26,0x2c,0x5d,0x88,0x13,0x3e,0x32,0x7a,0xf6,0x17,0x5c,0xdb,0xc4,0xcd,0x5a,0x16 +.byte 0x65,0xe4,0x34,0xeb,0x21,0x6d,0xb9,0x30,0x5d,0xc0,0xa2,0xea,0x4f,0x63,0x0e,0xbe,0x32,0x91,0x89,0x6f,0x96,0x40,0xf3,0x5f,0xa3,0xf2,0x15,0xc3,0x3c,0x3c,0xb8,0x2f,0x0d,0xc2,0xcd,0x4e,0xa0,0xa5,0xf6,0x78,0x40,0x0b,0x90,0x11,0x52,0xff,0x8f,0x7f,0x6a,0x0c,0xd6,0x3b,0x64,0x80,0x47,0xfa,0x70,0xbe,0x01,0xdc,0xdf,0x5b,0x75,0x7c +.byte 0xca,0x66,0xf0,0x2a,0x53,0x89,0x55,0x87,0xf8,0xec,0xd1,0x18,0x22,0x0c,0xd5,0x0e,0xc8,0x1c,0xbc,0x1e,0x66,0x14,0x44,0x10,0x3c,0xd4,0x2e,0xca,0x0b,0xd8,0x3f,0x81,0xd8,0x9f,0x81,0xf6,0x62,0x23,0xe4,0xc7,0x0d,0xb0,0x1b,0x00,0xd8,0xf4,0x1a,0xdd,0x9b,0xa1,0x74,0xeb,0xf0,0x65,0x5c,0x82,0x00,0x17,0xa6,0x68,0x29,0xd5,0xa4,0x64 +.byte 0xd3,0x15,0x90,0xd0,0x91,0x17,0xfc,0xd2,0xd7,0xad,0x4b,0xd8,0x41,0x03,0x51,0xfd,0x61,0xac,0x34,0xd4,0xff,0xaa,0xb1,0x64,0x6c,0x79,0x78,0xf7,0x6b,0x18,0x03,0x2b,0x6b,0x9a,0xd7,0xce,0x55,0x6e,0xdd,0xab,0x2e,0xbc,0x27,0x3a,0x8c,0xa5,0x8d,0xf0,0x55,0x81,0x0c,0x6e,0x8d,0xd8,0xd2,0x24,0x5e,0x2e,0x56,0xa8,0x1e,0x9c,0x98,0x88 +.byte 0xd3,0xbe,0x90,0x56,0x70,0xe5,0xcc,0x49,0x2a,0x13,0x98,0x99,0xbd,0xc9,0x9f,0x53,0x85,0x07,0xbe,0x54,0xa7,0x4c,0xd6,0x96,0x7d,0x8f,0x24,0x79,0x67,0xb2,0x62,0x4c,0x6a,0xc1,0x6c,0xb7,0xdc,0xe9,0x21,0xe3,0x27,0xc7,0x53,0xff,0xe7,0xd1,0xea,0x60,0xa8,0x56,0x08,0x5c,0x29,0x0a,0x04,0x0c,0xda,0x7a,0x70,0x8c,0x3d,0x55,0x3f,0xcf +.byte 0x9e,0xea,0x74,0x8b,0xbc,0xf0,0xf1,0x3a,0x86,0x22,0xe5,0x54,0xa7,0x70,0xc2,0xcd,0xb8,0x9f,0x4e,0x9f,0x48,0xa8,0xc0,0x82,0x0d,0x73,0x8b,0x3c,0xfc,0x20,0xf4,0xbe,0x79,0xde,0x8e,0x3c,0x26,0x85,0xde,0x74,0xd1,0xe3,0xd5,0x8f,0x39,0x71,0x46,0x8c,0xbd,0x68,0x28,0x2d,0x36,0x0d,0x66,0xc1,0x0b,0x96,0x3e,0x11,0x2e,0x44,0x17,0xd5 +.byte 0xfe,0x0d,0x70,0x84,0x96,0x20,0x34,0x2f,0xbe,0xf0,0xf5,0x9b,0xb4,0x5a,0xa9,0x50,0x6a,0xda,0xdb,0x69,0xea,0xef,0xa9,0xaa,0x06,0xc0,0x68,0xa4,0x61,0x1b,0x4b,0xf8,0x0b,0x56,0x91,0xc8,0x6f,0x39,0x15,0xe2,0xcc,0xbf,0x2b,0x36,0x96,0x0c,0x84,0xfb,0x3d,0x4b,0x09,0xe3,0xc2,0x4b,0x05,0x5e,0xfa,0x30,0x75,0xc5,0x54,0xa5,0xbd,0x45 +.byte 0x1e,0x14,0x72,0xd6,0xfd,0xe0,0x8f,0x7b,0x46,0x9b,0x11,0x07,0x27,0x03,0xe1,0x2d,0xcc,0x0a,0x01,0x49,0x61,0xc4,0x61,0x78,0x06,0x5f,0xaa,0x01,0x5b,0x68,0xd7,0x29,0xb4,0x9e,0xd3,0xaf,0xc7,0x45,0xf0,0x23,0xaf,0x28,0xcd,0x96,0x23,0x61,0xb2,0xb4,0x21,0x96,0x5d,0x91,0x3e,0x71,0xb5,0x41,0xf1,0x29,0xf4,0x5b,0x45,0x77,0x16,0x00 +.byte 0x9d,0x39,0x2a,0x1c,0x38,0x6d,0x36,0x97,0x98,0x4c,0x84,0xfc,0xf5,0xf1,0x59,0x7a,0x8c,0x21,0xfb,0xbc,0x9b,0x0c,0x8d,0x60,0xb6,0xc4,0xe3,0x4b,0x33,0x4f,0x04,0x4c,0x27,0xd2,0xa0,0xe1,0x71,0x0b,0x6d,0x40,0x8d,0xba,0xb3,0x11,0x9b,0x07,0x97,0x82,0x01,0x47,0xaa,0x2a,0xd4,0xcc,0x02,0xd3,0x86,0x86,0xb5,0xd7,0x5d,0xbc,0xd0,0x0f +.byte 0x97,0x5c,0xe5,0xac,0xc6,0x53,0xb3,0x39,0x09,0x68,0x2e,0xcc,0xf3,0x43,0xba,0xed,0x15,0x90,0xbe,0x9d,0xeb,0xa4,0xfb,0x4a,0x20,0xcf,0x10,0xb9,0x47,0x99,0xb0,0x89,0x26,0xb9,0xbd,0x4b,0xf6,0xa5,0xbd,0x2f,0xad,0x1a,0x75,0xe8,0xff,0xc6,0x6b,0x6a,0x31,0xbe,0xec,0xd2,0xc4,0x39,0x9e,0x3b,0x05,0x3f,0x24,0xba,0xf1,0x4d,0x0c,0x0c +.byte 0x05,0x60,0x60,0x22,0x0c,0x1b,0x0b,0x6c,0x80,0xd5,0xe8,0x8f,0x81,0xee,0x80,0x41,0x4a,0x69,0x47,0xc6,0x4c,0xeb,0xf6,0x2b,0x91,0x7c,0x9f,0x22,0x74,0x7b,0x43,0x95,0x56,0x55,0xba,0x85,0x23,0xb3,0xc3,0xee,0x6a,0xcc,0x49,0x2c,0x6c,0x86,0x6d,0x60,0x5d,0x84,0x0c,0x3c,0x88,0x61,0x58,0x1d,0xfc,0x00,0x2c,0x84,0x49,0x4d,0x95,0x75 +.byte 0xc0,0x03,0x02,0x59,0xc0,0xe9,0x84,0xea,0xce,0x3f,0x8b,0x76,0xbf,0x19,0xaa,0x13,0x1b,0x8d,0x9f,0xb2,0xeb,0xb3,0x02,0x87,0xee,0xfe,0x73,0xdb,0xc4,0x19,0x27,0xaf,0x15,0x8d,0xf4,0x58,0x97,0x43,0xb9,0x45,0x32,0x5f,0x24,0x2d,0x08,0xfe,0xec,0xf2,0xf1,0x34,0x99,0x7a,0x66,0x44,0x3d,0xd4,0xf7,0x82,0xcf,0xca,0x6f,0x53,0x9f,0x0a +.byte 0x74,0x79,0x9b,0x45,0x5b,0x07,0x92,0x35,0xc6,0xf4,0xd1,0x90,0x2b,0x62,0xec,0x93,0x7b,0x05,0x90,0x75,0xb7,0xb6,0xd9,0x6c,0x30,0xdd,0x9b,0x2a,0x32,0xb1,0xba,0xab,0x1a,0x6c,0x2b,0xd8,0xfb,0x39,0x8e,0x80,0x98,0x6c,0xd0,0xb3,0xf3,0x76,0xe2,0xe6,0x5e,0xee,0xd0,0x29,0xd7,0x57,0x8f,0xc3,0x13,0xcb,0x45,0x90,0x3e,0xa2,0x54,0x88 +.byte 0xd5,0x50,0xd3,0x75,0xed,0x2d,0xa6,0x50,0x11,0x6b,0xb0,0xb6,0xf0,0x1d,0xc9,0x3d,0x1d,0x2a,0xda,0x5e,0x43,0x44,0xf4,0xef,0x3e,0xc7,0xa9,0xe0,0x6d,0x3c,0x38,0xbf,0x84,0x72,0xaf,0xea,0x60,0x15,0x03,0x14,0x77,0xb7,0xb3,0x15,0x4c,0xbc,0xbf,0x55,0x86,0x24,0x73,0x97,0x22,0x9d,0x59,0xa0,0x39,0x76,0x38,0xd1,0x1f,0x25,0xb0,0x64 +.byte 0xf3,0x10,0x67,0xf2,0x7c,0x11,0xf2,0xce,0xbe,0xaf,0x5e,0x2e,0xc5,0xc1,0x01,0xfa,0x80,0xf9,0x87,0xfc,0x5c,0xfd,0x66,0x50,0x01,0xc2,0x00,0x92,0x84,0x0f,0xdc,0xfc,0x10,0xa5,0x6e,0x45,0xf5,0xff,0x58,0x78,0x45,0x5e,0x50,0xbe,0xe3,0xc7,0x25,0x1e,0xdf,0x7f,0x68,0x6f,0xa5,0xb8,0xf8,0x69,0x89,0x5a,0x55,0x65,0xf4,0x96,0xe5,0x7a +.byte 0xa6,0x89,0x69,0x8d,0xdd,0x4f,0x24,0x5a,0x29,0x92,0x1e,0xca,0x74,0x65,0x7f,0xb8,0x32,0x75,0xb5,0x7b,0x15,0xea,0xeb,0xcc,0xf1,0x23,0x69,0xc7,0x58,0x1c,0x3a,0xaa,0x27,0x0a,0x11,0x79,0xcf,0xc9,0xb6,0xbd,0x9d,0x56,0x47,0x36,0x6b,0x7f,0x82,0xb5,0xa7,0x9f,0x79,0x72,0x16,0xba,0x50,0xef,0x37,0x68,0xdf,0xe0,0xd8,0x0c,0x16,0xcc +.byte 0x50,0x6c,0x25,0x63,0xc2,0xd6,0x7b,0xef,0xd9,0xa1,0xef,0x62,0x81,0x97,0x51,0x49,0x69,0xe3,0x13,0x6c,0x1a,0xd0,0x64,0x1b,0x3e,0x48,0x25,0x5b,0x34,0xe9,0xee,0x41,0x34,0xfb,0x8e,0x9d,0x3c,0xbc,0xc8,0xcf,0xe7,0xf8,0x72,0x21,0x0f,0x95,0xde,0x57,0xd7,0x2f,0x80,0x97,0xbd,0x8f,0x2c,0xde,0x19,0xa3,0xba,0x5c,0x92,0xa3,0x75,0x83 +.byte 0xe3,0xc9,0x33,0x3f,0x8f,0x09,0xfa,0x0b,0x60,0x0a,0x2f,0xb3,0x45,0x9d,0x8e,0x9d,0xa3,0x66,0x2d,0xda,0x37,0xe0,0x21,0x52,0x74,0x9d,0x59,0xa4,0x9e,0xea,0x15,0x22,0xb0,0xbf,0x3c,0xd4,0x59,0xef,0x27,0x60,0xf7,0xbf,0x5d,0x1d,0x36,0x9a,0xa5,0xfb,0x53,0x90,0x40,0x83,0x3a,0x20,0x3d,0x6b,0x47,0xbc,0xc3,0xe6,0x07,0xfe,0xd0,0x8e +.byte 0x40,0x42,0x65,0x2b,0x27,0xba,0x69,0x61,0x03,0x36,0x58,0x35,0x7e,0x82,0x53,0xb5,0xe2,0x25,0x31,0xc3,0x77,0xc1,0x91,0x13,0xa4,0x92,0x52,0xea,0x9f,0x43,0x44,0x6b,0x43,0xe9,0x11,0xd4,0x3d,0x53,0xba,0x6b,0x96,0xb5,0x96,0x29,0xa3,0x2a,0x0a,0xf2,0xb5,0x0c,0x5d,0x62,0x37,0xe0,0xd6,0xa2,0xbf,0xcd,0xf9,0x58,0x7f,0xa2,0xfd,0x54 +.byte 0x6a,0xa1,0x90,0xa5,0x61,0x9e,0xa6,0xc2,0xb9,0x80,0x7a,0xb8,0xaf,0x60,0x68,0xa7,0x27,0x77,0x41,0x03,0x4e,0xc1,0x96,0x46,0x23,0x1b,0xff,0xa1,0x37,0x28,0x33,0x27,0xc2,0x99,0xf7,0xcb,0x7f,0x1a,0xfb,0x41,0xc3,0x59,0x11,0xf8,0x39,0x50,0xbd,0x90,0x61,0x4a,0x67,0x4a,0x07,0x5f,0xb1,0x07,0x66,0x0b,0x52,0xad,0x90,0xc2,0xd7,0x4e +.byte 0x42,0x9e,0xcc,0x5c,0xeb,0xf2,0xdc,0xaa,0x52,0xcf,0x0e,0x7d,0xae,0x3e,0x1a,0x2c,0x9e,0x79,0xfb,0x29,0x10,0x29,0x61,0xa4,0x93,0x9d,0xa9,0xe9,0x71,0xc5,0xf7,0x07,0x13,0xe9,0xbd,0x2e,0x2d,0x0c,0xd6,0xaf,0x54,0x48,0x58,0xc2,0x91,0x37,0xf4,0x61,0x3a,0x96,0x81,0xdc,0x82,0x02,0xff,0xc9,0xf7,0xf7,0x9f,0x9f,0x28,0xd1,0xb1,0xe3 +.byte 0x2b,0x3d,0x85,0xef,0x15,0x82,0x3b,0x9a,0x17,0xee,0x7f,0xd3,0xa5,0x7c,0x41,0x27,0xc9,0x4c,0xe9,0x7a,0x30,0x9f,0xc5,0x34,0xaf,0xc8,0x1c,0x8a,0x7c,0xa6,0xf4,0xdc,0xa6,0xdb,0x68,0xc1,0xa1,0x13,0xb0,0x54,0x49,0x25,0x43,0xc0,0xd4,0x93,0xd6,0x70,0x53,0x3e,0x5f,0xd5,0x42,0x6e,0x78,0xb8,0x15,0x07,0x6a,0x91,0xe8,0xf1,0x2f,0xcf +.byte 0x07,0x84,0x25,0xb3,0x20,0xb9,0x35,0x25,0xbb,0x26,0x96,0x02,0x25,0xd5,0x83,0x23,0x71,0x6d,0x62,0xa7,0x99,0x73,0x63,0x2a,0x51,0x25,0x34,0x3d,0x51,0x95,0xc7,0x9b,0x01,0x0a,0xab,0x11,0xb2,0x32,0xcd,0xe3,0xef,0x63,0xa4,0x6d,0xdb,0x7b,0xf6,0x5f,0xc5,0xf3,0xe5,0x8c,0x6b,0x0a,0x04,0x33,0x53,0x0d,0xf6,0x13,0x8c,0xb8,0xc7,0xba +.byte 0xc2,0xf0,0xd4,0xa7,0x1a,0xce,0x7c,0x54,0x72,0x2b,0x89,0xf4,0x05,0x5c,0x30,0x42,0xe5,0x58,0x65,0x3a,0x2e,0xf9,0x40,0xab,0x2b,0xf9,0xc3,0x99,0x40,0x3c,0xb1,0x7b,0x2c,0xdc,0xfe,0x41,0x21,0x71,0x00,0x75,0xbd,0xea,0xf3,0x84,0x88,0x6b,0x9c,0xe2,0x80,0x2f,0xad,0x9f,0x9d,0x0a,0xdf,0xb5,0x38,0x61,0x89,0xfb,0x67,0x45,0x9c,0x39 +.byte 0xf9,0x84,0x54,0xc4,0xd6,0x6f,0x00,0x39,0x90,0x82,0xfa,0xce,0xae,0xe8,0xaf,0xa4,0x97,0x3a,0xfe,0x71,0xaf,0x5e,0x00,0xd1,0x9e,0x33,0x41,0x63,0xca,0xa5,0x5a,0x8b,0x09,0x2a,0x26,0xef,0x96,0xb7,0x5d,0xc4,0x92,0xfa,0x51,0xdb,0x1d,0x63,0x5f,0x7c,0x94,0x53,0x84,0xed,0xa3,0x99,0x07,0x9f,0xdc,0x55,0xb3,0x31,0x67,0x1a,0x63,0x05 +.byte 0xec,0x36,0x79,0x57,0xf8,0x39,0xc3,0xdd,0xd5,0x6a,0x21,0xfc,0x54,0xe6,0x28,0xc4,0xf1,0xd2,0xce,0x02,0x43,0x50,0x30,0x15,0x4d,0x3c,0xd0,0x1c,0xf6,0x7e,0xd0,0xa4,0x86,0xe7,0xf5,0xc2,0x06,0xc5,0xc4,0xa8,0xe2,0xd3,0xc7,0xcf,0xbd,0xab,0x9f,0xe3,0x42,0xc4,0xcd,0x65,0xfa,0xd3,0xcd,0xdf,0x55,0xc4,0xce,0x6e,0xe8,0xfc,0x96,0x0f +.byte 0xe2,0x92,0xca,0xde,0x37,0x7c,0xc9,0x80,0x4a,0x54,0xe9,0xfd,0x3c,0x4b,0x81,0xb8,0xd9,0x1a,0xf1,0x91,0x5d,0x9d,0xef,0x3e,0xd1,0x78,0xe2,0x1e,0x0e,0x09,0x62,0xdd,0xc6,0xb9,0xde,0x29,0xba,0xb0,0x62,0x49,0x53,0xb6,0x8d,0x9f,0xbf,0x4d,0x77,0xa4,0xd1,0x0b,0xf0,0x31,0x2e,0xe5,0x71,0x2e,0x18,0xa4,0xa7,0xcb,0xa6,0x30,0x24,0x11 +.byte 0x8d,0x16,0x21,0x71,0x6a,0x19,0xde,0x3c,0x5a,0x00,0xa6,0xe2,0x43,0x98,0xe8,0x83,0x10,0x76,0xef,0xca,0x67,0x61,0x80,0x98,0x48,0x06,0xa9,0xcd,0x13,0xa6,0x1e,0x5b,0x2b,0xef,0xb7,0x3a,0x24,0xf7,0x10,0x8d,0xc2,0xaa,0x9c,0x78,0x0d,0xd1,0x54,0xb1,0x4e,0x5a,0x21,0xc2,0xb4,0x11,0x15,0xdb,0xb3,0x9c,0xe4,0xf1,0xfc,0xa5,0x66,0x0c +.byte 0x56,0x34,0x05,0x14,0x88,0x2c,0xfc,0x3f,0x97,0x30,0xd5,0xd0,0xba,0xa3,0xf1,0x47,0xc0,0xf1,0x59,0x3c,0xda,0x1a,0xc1,0x90,0xae,0x4b,0x26,0xd3,0x5f,0xc9,0x8f,0x62,0x56,0x9c,0x64,0xec,0xda,0x63,0x37,0xa1,0xa2,0x87,0x74,0xcb,0xcc,0x27,0xcb,0x2a,0x97,0x57,0xa3,0xb9,0xac,0xe2,0xbd,0x97,0x93,0x21,0xb9,0x8b,0x82,0xa1,0xe7,0x76 +.byte 0xc1,0x49,0xd6,0xb2,0x52,0x7b,0xd6,0xbb,0x31,0x0f,0x87,0xc0,0xaa,0x91,0x70,0x19,0x76,0xa5,0xea,0xf0,0x87,0x47,0x50,0xc1,0xff,0xf7,0xa6,0x6c,0x65,0xff,0xdf,0x83,0x5c,0x54,0xf0,0xb1,0x18,0xe0,0x13,0x58,0x74,0xc0,0x67,0x0e,0xb8,0xdc,0x59,0x6c,0x19,0xf4,0xee,0x3a,0x07,0x63,0x68,0x1d,0x62,0x60,0xb5,0x71,0xce,0x21,0x61,0x8c +.byte 0xa5,0x74,0x9b,0x77,0x8e,0x15,0x20,0x18,0x19,0x96,0xf6,0xfa,0xd2,0x6c,0x03,0xcb,0xcb,0x8c,0x91,0x0d,0x29,0x91,0x70,0xc5,0x96,0x60,0x18,0xad,0x65,0x66,0x43,0xf9,0x13,0x97,0xe3,0xe3,0xcb,0xbf,0x68,0x0b,0xb2,0x87,0x9c,0xfa,0x96,0x48,0x14,0xef,0x6e,0xbd,0x45,0xb9,0x2f,0xbb,0x80,0x80,0xc5,0xf6,0x22,0x41,0x9a,0xec,0xdd,0x41 +.byte 0xfc,0xf3,0x0d,0x8e,0x2e,0x3c,0xda,0xef,0x2c,0xbd,0xbc,0x0e,0x88,0xd2,0x97,0x3d,0x40,0x37,0xa6,0xde,0x1d,0x00,0xeb,0x39,0xea,0x44,0xee,0x8a,0x2f,0x77,0xea,0xea,0x1d,0x90,0xd1,0xec,0xe4,0x31,0x0c,0xde,0x6f,0x55,0x17,0x5c,0x1e,0x19,0x91,0xac,0x36,0x00,0x26,0x17,0xa6,0xcd,0x8b,0xe2,0x72,0x6f,0x8f,0x3c,0xc6,0x76,0x6e,0x3d +.byte 0x4e,0x93,0xb3,0x8b,0xad,0x24,0x17,0x39,0xc0,0xfe,0xba,0x90,0xc5,0xbd,0x4b,0xe4,0xae,0xac,0xf6,0x55,0x72,0x3e,0xf0,0x12,0x32,0x5a,0xdd,0x8a,0x3f,0x67,0xb6,0xdf,0xf6,0x11,0x02,0xf5,0x84,0xcc,0x7d,0x36,0xe7,0x1b,0xf0,0x9a,0x52,0xbe,0xf3,0x06,0xd6,0xdb,0x02,0xd4,0x80,0x0b,0xcd,0xf0,0xfe,0xec,0x86,0x3f,0x89,0x34,0xcb,0x88 +.byte 0x34,0x28,0x57,0x00,0x33,0xeb,0x4f,0xfa,0xdb,0xd8,0x09,0xd9,0x56,0x53,0xc1,0x02,0xc0,0xa8,0x4c,0xdc,0xfd,0x26,0xb3,0x55,0x1d,0x47,0x0d,0x68,0x50,0xb8,0xa3,0xb4,0xf1,0x31,0xfa,0x16,0x33,0x94,0x40,0x95,0x53,0x9c,0x9f,0x5b,0x25,0x47,0xb1,0x27,0xbc,0x38,0x7d,0x23,0x01,0x7f,0x70,0x7a,0x61,0x0e,0x46,0x5c,0xcc,0xd7,0xcc,0x15 +.byte 0x15,0x0a,0xed,0x4c,0x99,0x66,0x3a,0xc3,0xc1,0x9a,0x7a,0x38,0x6a,0x0c,0xde,0x13,0x67,0x65,0xfc,0x06,0x99,0x7c,0xa5,0x90,0x8a,0x90,0x58,0xce,0xf3,0x23,0x76,0xfc,0x03,0xfb,0xb3,0x36,0x54,0xa9,0x33,0x35,0xfe,0xe3,0x3d,0x53,0x7e,0xe0,0xae,0xcf,0xc0,0xa2,0xe1,0x28,0xb9,0x97,0x96,0x87,0x90,0xa1,0x13,0xd0,0x1d,0x5b,0x43,0xf1 +.byte 0xa5,0xfa,0x81,0x83,0xe7,0x7b,0xa1,0x5f,0x9f,0xf5,0xd3,0xb6,0x80,0x8b,0x91,0xed,0x31,0x14,0x05,0x78,0x85,0x9d,0xea,0x59,0x69,0xa5,0x29,0xc5,0xf1,0xd7,0x9d,0xa3,0x8b,0x9d,0xe0,0x8d,0xc3,0x4e,0x2d,0xfa,0x1c,0x6c,0xd2,0xd7,0xcb,0xda,0x86,0x5d,0xb3,0x1a,0xb4,0x12,0xe3,0xa8,0xd7,0xe1,0x84,0xce,0x0e,0x06,0xd0,0x9e,0xf0,0xb1 +.byte 0x5b,0x2f,0x77,0x10,0x6f,0x41,0x2f,0x5b,0x48,0x43,0xf3,0xef,0xdb,0x09,0xdb,0x01,0x89,0xfc,0x7a,0x4a,0xc0,0x96,0x33,0xdf,0xbe,0x49,0x85,0xa7,0x88,0x93,0x05,0xf2,0x15,0x12,0x85,0x04,0x20,0x7d,0x8c,0xe2,0x0a,0xea,0xfe,0xed,0xbf,0x98,0xdb,0x9d,0x1f,0xaf,0x0f,0xbf,0xf7,0x12,0x4f,0x69,0x4e,0x87,0x09,0xf0,0xae,0x2a,0x4d,0x4c +.byte 0xbf,0xaa,0x08,0x2c,0x78,0x2d,0xbe,0xb9,0xf5,0x3c,0x4c,0xcd,0x75,0x93,0xc3,0x3c,0xc2,0x86,0x47,0xca,0xc1,0x9c,0x1c,0xe5,0x0d,0x8d,0x36,0x9c,0x44,0x40,0x89,0xfa,0x17,0x57,0x08,0xd4,0x22,0x9a,0x5b,0x94,0xbf,0x39,0xcd,0xbe,0xf7,0xd1,0xcd,0x35,0x74,0xdf,0xfa,0x5d,0x00,0xaa,0xaa,0x82,0x6d,0x9b,0xf8,0x69,0x51,0x9c,0xaa,0xaa +.byte 0xc8,0x2c,0xa2,0x68,0x57,0x3c,0x5f,0x10,0xa2,0x7b,0xee,0xc9,0x97,0x8d,0x5c,0x41,0x08,0x0d,0x30,0xd5,0x2b,0x5f,0x8d,0xdd,0xdc,0x2c,0xa8,0x52,0x6e,0xea,0x61,0x77,0xca,0x75,0xc3,0x56,0x6e,0x17,0x51,0x0e,0x00,0xb6,0x18,0xa0,0xe5,0x9d,0x49,0x4e,0x20,0x78,0x1e,0x5f,0x3e,0xec,0xc3,0x4a,0x41,0xf3,0xfe,0x89,0x64,0xac,0x4c,0x4d +.byte 0xa8,0x73,0x4f,0x31,0xc4,0xe2,0x62,0x69,0x2b,0x40,0xdf,0xef,0xed,0xf0,0x62,0x4e,0xc3,0x65,0xcc,0xcb,0xef,0xc1,0x28,0x61,0x71,0xac,0xa5,0x89,0x52,0x7b,0x32,0x59,0xc2,0x16,0x1a,0x63,0x18,0xb0,0xd8,0xe4,0x28,0x92,0xff,0x45,0xc1,0x24,0x56,0x86,0x66,0x23,0x7a,0xff,0xf7,0x33,0x30,0xdc,0xd1,0x7d,0xaf,0x68,0x10,0x4b,0xde,0x3e +.byte 0x4a,0x70,0xbe,0x31,0x1a,0x37,0x28,0xee,0xe0,0xba,0x65,0x8b,0x7d,0xea,0x07,0xce,0xf2,0x51,0x3d,0xcb,0xb2,0x33,0xd8,0xf3,0xa4,0xa0,0xcd,0x53,0x76,0xf9,0x46,0x5b,0x82,0xf9,0x9d,0x0e,0x29,0x5b,0xcf,0x76,0xd4,0x5c,0x47,0xf1,0x98,0x02,0x5a,0x16,0x18,0xf2,0x61,0x6d,0x3e,0x64,0x7f,0xbe,0x13,0x18,0xc2,0x45,0xd2,0x87,0x17,0xff +.byte 0xf1,0x01,0x0b,0x5d,0x21,0x0d,0x73,0x9a,0xeb,0x82,0xc4,0x9a,0xb3,0xe4,0x31,0x44,0x58,0xa2,0xfd,0x76,0xf6,0xbe,0x6f,0x75,0xcc,0xbb,0xe3,0xa2,0xa9,0x78,0x0f,0x4b,0x1d,0x47,0x2d,0x32,0x2c,0x45,0x5e,0xcd,0x8f,0x13,0xe2,0x9a,0x9d,0xa2,0xce,0x73,0x54,0x20,0xc0,0x44,0x1c,0x26,0xde,0x0d,0x72,0xb2,0xfa,0x4d,0x32,0x35,0xac,0x69 +.byte 0x4d,0x16,0x4a,0xd5,0x51,0x33,0xc1,0xe0,0x90,0x9c,0x93,0x66,0xed,0x16,0xac,0x7e,0x79,0x2b,0x0f,0xb4,0x42,0xaf,0x80,0x22,0x80,0x07,0x7d,0x72,0xe4,0xb3,0x3a,0x2c,0xb8,0x68,0x14,0x4d,0x31,0x5f,0xbb,0xac,0x43,0x3b,0x28,0xd6,0x81,0x81,0x26,0xe5,0xc4,0x67,0x7c,0x4a,0x42,0xc4,0x1a,0x59,0x04,0x2d,0xb8,0x26,0xfc,0x4e,0xc7,0xfc +.byte 0x11,0x61,0xe3,0x4b,0x2c,0x3f,0xdb,0x43,0xe4,0x24,0xb4,0xd1,0xc0,0xc0,0x01,0xe1,0xeb,0x84,0x0b,0x6d,0x93,0x83,0x07,0x9f,0x01,0xb8,0x9d,0xe5,0x7e,0x4d,0xa2,0x05,0x3e,0xf2,0x40,0x59,0x88,0xc8,0x8c,0x62,0x44,0x95,0x20,0x96,0x28,0xa9,0x3f,0x7c,0xed,0x85,0x03,0x65,0x49,0xf7,0x94,0x3d,0x51,0xe2,0x8e,0x21,0x19,0x7b,0x55,0x5f +.byte 0x55,0x70,0xf8,0xf0,0xce,0xd9,0x1a,0x10,0xbb,0xfe,0x65,0x72,0x8a,0x5b,0x6c,0x27,0xd3,0x57,0x61,0x07,0x7b,0x85,0xd6,0x21,0xd2,0x07,0x81,0xaa,0x17,0x73,0xb5,0xef,0x2d,0x84,0x7b,0x8f,0xe0,0xb3,0x9e,0x9f,0x31,0x82,0x33,0x07,0x14,0x84,0x79,0x18,0xc4,0xec,0x20,0xb5,0xec,0x21,0x4b,0x51,0x78,0x96,0xc6,0xe7,0xf0,0x6a,0x7a,0xb5 +.byte 0xe5,0xc2,0xef,0x24,0x4c,0x57,0xb6,0xf5,0xee,0xe5,0x69,0x2b,0x73,0x9e,0x66,0x91,0x9d,0xd4,0x24,0x58,0x4b,0x72,0x68,0xf6,0x62,0xb4,0x0c,0xe3,0xbd,0x1f,0x0b,0x42,0x6c,0xf9,0x6e,0x6a,0x64,0x64,0x69,0xa5,0x6d,0xe7,0x38,0x9f,0xb2,0x65,0x35,0x6b,0xd9,0x20,0x84,0xe4,0x5f,0x8b,0xfd,0x58,0xab,0x5f,0xe1,0x4c,0xf7,0xd7,0xf5,0xe7 +.byte 0xae,0xe8,0xc1,0x68,0xfe,0x0c,0xb1,0xe2,0xe4,0xca,0xf0,0xf1,0x20,0xbc,0xf9,0x99,0xef,0x4e,0x63,0xca,0x89,0xe4,0x7c,0x17,0x49,0x40,0x47,0xce,0x67,0x8e,0xbd,0xd0,0x96,0x8b,0x5a,0x0d,0x2f,0xd0,0x8f,0x4f,0x42,0x06,0x01,0x8e,0x47,0x35,0x13,0x9e,0xd1,0x24,0x85,0xe4,0x17,0x59,0xe8,0x1c,0xb3,0x25,0x53,0xf9,0xb4,0x96,0xb1,0x33 +.byte 0x97,0xb2,0x60,0xc7,0xb3,0x48,0xa2,0xfc,0x7f,0x86,0x94,0x2a,0xd3,0x94,0xfe,0x6d,0xa6,0x7a,0xa1,0xe1,0x96,0x5b,0xe8,0xe4,0x91,0xfb,0xf3,0x2c,0x84,0xb4,0x2f,0xbe,0xc9,0xdd,0x1c,0x9f,0x72,0x12,0xcb,0xbd,0x22,0x07,0xc4,0xec,0x05,0xe8,0x32,0x47,0x21,0x27,0xf6,0xc1,0x36,0x59,0x25,0x6c,0xbe,0xb9,0x3e,0xd4,0x1b,0x59,0x11,0x27 +.byte 0x6b,0xa3,0x64,0x71,0x98,0xeb,0x21,0x65,0xc0,0x4c,0x30,0xbd,0x51,0x2b,0xc3,0xfb,0xb1,0x33,0x56,0x1e,0xf0,0x92,0x0f,0x4b,0x63,0x3a,0x9c,0xfb,0xd1,0xac,0x8c,0xf0,0x3e,0xb7,0x0b,0xd2,0x52,0x62,0xd8,0x37,0x9a,0xef,0x79,0xdc,0xcb,0x87,0x1e,0x3d,0x9d,0x91,0x12,0xba,0x78,0x8a,0x11,0x57,0x96,0x44,0x8e,0x2b,0xd2,0xe3,0x4d,0x27 +.byte 0xec,0xba,0xef,0x1c,0x04,0x8d,0x56,0x56,0x11,0x74,0xc0,0xcc,0x1f,0x3d,0x7a,0xad,0x79,0x49,0x59,0xa3,0x71,0xe0,0xf5,0x89,0x89,0x8f,0xcf,0x1e,0x63,0x77,0x91,0x91,0xf1,0x0c,0x1c,0xcc,0x77,0x00,0xd7,0x28,0x9f,0x68,0xbc,0xb6,0x9d,0x33,0x43,0xb2,0x4a,0x72,0x3e,0x57,0x26,0xd0,0x00,0x93,0xc9,0x4c,0xc9,0x53,0x52,0xd9,0xe2,0x31 +.byte 0xc5,0x7f,0xf6,0xb6,0xc2,0x10,0x51,0x67,0xae,0x63,0x35,0x74,0xcc,0xd4,0x05,0xb3,0x08,0x23,0x35,0x37,0x8e,0xf1,0xbb,0x1d,0x56,0xff,0x62,0xa2,0x13,0x7b,0x01,0x75,0x6d,0xb3,0x92,0x51,0xdc,0x6e,0x08,0x76,0x25,0x52,0xbf,0x9a,0xea,0x89,0x0f,0x96,0xcc,0x79,0xd4,0x72,0xcf,0x65,0x79,0x4e,0x40,0xa3,0xae,0x67,0x0c,0x82,0x85,0x05 +.byte 0xfd,0x43,0x84,0x17,0x24,0x79,0xa9,0xa7,0x7f,0x24,0x76,0x57,0x66,0x11,0xd5,0x33,0x30,0x42,0x5b,0x5f,0x7c,0x04,0x4b,0x45,0xc3,0x69,0x20,0x02,0x92,0xe3,0x6a,0x06,0x8f,0xdf,0x30,0xf6,0x17,0x8f,0xc6,0x8c,0x5e,0x42,0xf3,0x59,0x7a,0x3a,0x55,0x3a,0xc1,0x96,0xd5,0x67,0x3d,0xab,0x32,0xee,0xf0,0x08,0x28,0x73,0xb0,0x11,0x1a,0x92 +.byte 0x4d,0xcc,0x0c,0x86,0xb2,0xa1,0xbf,0x9f,0xcd,0xc7,0x1c,0xbc,0xee,0x39,0x77,0x75,0xfc,0xe6,0x3b,0x62,0xf2,0xaf,0xd5,0xb6,0x77,0x2d,0x86,0x38,0x13,0x00,0xdb,0x71,0x4a,0x87,0x03,0x6d,0x99,0x28,0xf8,0x6a,0x23,0x2e,0xe2,0xb8,0x9c,0x18,0x02,0x00,0x9e,0x5b,0xf0,0x6f,0x9b,0x32,0xdc,0x6b,0x61,0xeb,0xeb,0xe9,0xfc,0xee,0x44,0xbc +.byte 0x4a,0x88,0x04,0xc0,0x10,0xc8,0x65,0x6c,0xa4,0xae,0x9a,0x36,0xb6,0x68,0xd5,0xbf,0x6d,0xe3,0x6f,0x5d,0xad,0xd6,0xf9,0xc8,0x06,0x36,0x25,0x64,0xc9,0x5b,0x71,0x7f,0xbf,0xe3,0x56,0x31,0x2a,0x93,0x47,0x46,0x39,0x91,0x80,0xc5,0xdd,0xdd,0xa1,0x25,0x85,0xd9,0x05,0x49,0x4f,0x1b,0xeb,0x2f,0x6e,0xd9,0xe4,0x65,0x3d,0xcd,0xbd,0x47 +.byte 0x37,0x27,0xb0,0xd1,0x9b,0xa4,0x89,0xd5,0xa0,0x0f,0x8b,0xc5,0xfd,0x91,0xa8,0x86,0x22,0x65,0xf1,0xe1,0x1e,0xb6,0xf7,0x50,0xe6,0x1e,0xf0,0x2b,0x9d,0x02,0xc9,0xe8,0x2a,0xb8,0x9b,0x89,0x28,0x25,0x43,0xcf,0x23,0x08,0xe2,0xa7,0x70,0x31,0x89,0xab,0x5b,0xd9,0x2e,0xa9,0xe4,0xe9,0x1d,0x63,0x7f,0xc6,0xc1,0xfb,0x63,0x45,0x9c,0xf1 +.byte 0xd4,0xc3,0x56,0xb6,0xad,0xb3,0x00,0xce,0x12,0x9e,0x63,0x33,0x25,0xd3,0xb2,0xee,0xa7,0x6b,0xa1,0xfd,0x20,0xa3,0xb2,0x07,0x1a,0x9d,0xed,0xe0,0x1d,0x70,0x5b,0x9f,0xc0,0xbc,0x83,0x09,0x94,0x47,0x8c,0x05,0xef,0x73,0x96,0x31,0xc7,0x35,0xc2,0x2c,0x00,0x2a,0x68,0xd1,0xc4,0xb3,0x3d,0x84,0x44,0x8c,0x93,0xfd,0x64,0x00,0x77,0x46 +.byte 0x18,0xac,0x83,0x9d,0xe5,0xe5,0x46,0x61,0x37,0x72,0x9f,0x0e,0x76,0x55,0xf7,0xca,0x36,0x57,0x24,0x16,0xfc,0x11,0x27,0xaa,0x44,0xa4,0xb0,0x58,0x41,0x46,0x94,0xc7,0x3b,0x9c,0xa3,0xe4,0x89,0xd9,0xdb,0x7b,0x64,0x69,0x84,0x9f,0xc8,0x09,0x6f,0xf7,0xf0,0x58,0x10,0x56,0x9f,0x26,0xf0,0x74,0x0c,0x76,0xcb,0x9d,0x45,0x3d,0xe7,0x94 +.byte 0x54,0xa3,0x84,0x08,0xb5,0x9c,0xff,0xdb,0xba,0x62,0x5e,0x87,0x0d,0x11,0x5d,0x96,0x06,0xd6,0xec,0xf4,0x3e,0x9d,0x66,0xbd,0xc4,0x64,0xed,0x03,0xe0,0xad,0x3f,0x4e,0xb4,0xef,0x16,0xdd,0xee,0xd6,0x00,0x27,0x62,0x74,0x0a,0xe0,0x68,0x72,0x4c,0x6d,0x62,0x15,0x87,0x6a,0xf0,0x25,0x9f,0x33,0x1d,0x92,0x3b,0xa3,0xa4,0xf1,0x81,0xdf +.byte 0xa8,0xed,0xaf,0xa5,0x8d,0x19,0x20,0x72,0x03,0x91,0xf0,0x34,0x60,0x70,0xbe,0xaa,0xdf,0xaa,0x24,0x1a,0x1f,0x1a,0x8d,0xb0,0x7b,0xef,0x10,0x43,0x69,0x24,0x74,0xf2,0x72,0x71,0xa1,0x8f,0x85,0x75,0x3e,0x8c,0xf6,0x0e,0x88,0xe2,0x1d,0x5c,0xb8,0xf1,0xc4,0x8a,0x21,0x76,0x20,0x50,0x3f,0xb3,0x8b,0x9f,0xa4,0x45,0x9e,0x07,0x60,0x22 +.byte 0x2c,0xa6,0xb1,0xc2,0xd2,0xcb,0xc6,0xd8,0xe9,0x94,0x66,0xfb,0x10,0x73,0x92,0x25,0x7e,0x31,0x42,0xf4,0x4a,0x75,0xac,0x78,0x43,0xcb,0xc0,0xc9,0xb0,0xaf,0xb4,0x22,0x8f,0x51,0x36,0x0f,0x5a,0xb8,0xbb,0x44,0x03,0x09,0xd0,0xf9,0x04,0xc8,0x73,0x8e,0xa1,0x76,0x27,0xde,0x72,0xf4,0x3a,0x79,0x63,0x85,0x32,0x09,0xad,0x12,0xe4,0xd7 +.byte 0x8f,0x8e,0x24,0x03,0x4f,0xde,0x39,0xac,0x81,0xe8,0x64,0x09,0x17,0xd7,0x99,0xe6,0x62,0xb7,0x53,0x20,0x9f,0xb9,0x3a,0xb9,0xb1,0x81,0xfa,0x6e,0x33,0xe7,0x4a,0xca,0xd7,0xa7,0xfa,0x7a,0xbf,0x0b,0x0a,0x99,0x3c,0xc7,0xbd,0xef,0xc7,0x90,0xda,0x62,0x30,0xc6,0x94,0x94,0x6b,0xee,0xbd,0xb7,0x0d,0x86,0xc5,0xb1,0x9a,0xb9,0x86,0x34 +.byte 0xc2,0x81,0x2b,0x09,0x7a,0x88,0x09,0x65,0xcf,0x51,0x78,0x19,0x1d,0x5a,0x62,0x2f,0xb3,0x43,0x8d,0xf5,0x9d,0x26,0x2f,0x4a,0x27,0x96,0x22,0x1b,0x4c,0xc8,0xd9,0x73,0x4b,0x32,0x01,0x11,0x7b,0x59,0x85,0xda,0x50,0x92,0x17,0x45,0xd4,0x1f,0xcf,0x98,0xf6,0x2c,0x69,0xba,0x43,0x22,0xdc,0x36,0x31,0xfb,0x1e,0xe8,0x54,0x24,0x0f,0x24 +.byte 0x4c,0xcd,0xbe,0xdb,0xd8,0x23,0x69,0xe2,0x97,0xf5,0x66,0xb2,0x66,0x6c,0xf2,0x90,0xd0,0x15,0x14,0x9a,0x47,0x65,0x97,0xb0,0xf2,0x3e,0x35,0x09,0xd2,0x3d,0x01,0x9c,0xb3,0xfd,0xf3,0x32,0x46,0x4e,0x11,0xab,0x88,0x9e,0x04,0x6d,0xf0,0xe1,0x9d,0x48,0x01,0x24,0xc3,0x87,0xdf,0x58,0xb6,0x6d,0x6d,0x4f,0xb9,0x1b,0x13,0xee,0x03,0x5b +.byte 0x75,0x39,0x28,0x31,0x90,0x70,0x49,0x10,0x71,0x87,0x76,0x30,0xac,0x88,0xb0,0xf6,0x6c,0xaf,0x5b,0xf4,0xf3,0xe7,0x25,0x75,0x8c,0xa3,0xf4,0xa7,0xd8,0x94,0x78,0xc8,0x77,0xc1,0x48,0x6c,0x62,0xf6,0x2c,0xb5,0x41,0x59,0xf6,0xd3,0xae,0x1b,0x55,0xed,0xdf,0xd1,0x59,0x63,0x76,0x03,0x65,0xd3,0xd0,0xcd,0xb6,0x5b,0x8f,0x1a,0x78,0x88 +.byte 0x78,0x07,0x14,0x3f,0xc3,0xd4,0x1c,0x69,0xd8,0x15,0x25,0xca,0x76,0x15,0x24,0x7d,0xed,0x69,0x2a,0xb5,0x04,0xd2,0x3b,0xbd,0x7a,0xb2,0xae,0x04,0x51,0x85,0x2b,0x1b,0xb0,0x3f,0x6d,0xbc,0xa0,0xc7,0x19,0x40,0xab,0x75,0x51,0x4b,0xa8,0x5a,0xd7,0xb5,0xc7,0xa8,0xfc,0x4a,0xcf,0xa9,0x9c,0xe6,0x2e,0x35,0x51,0x3b,0x05,0x41,0x43,0x7c +.byte 0x1f,0x2e,0x16,0x5d,0x2f,0xa8,0xe9,0xce,0x6d,0x06,0xa7,0x5a,0xed,0x07,0x39,0xe4,0x7e,0xc3,0x01,0x2d,0x97,0xe4,0xc1,0x89,0x2c,0xb4,0xb1,0xb5,0x7f,0x0a,0xe2,0x9f,0x82,0x36,0xee,0x9b,0x76,0xbc,0x9d,0x37,0xdf,0x5e,0x81,0x95,0x9b,0x2b,0xc4,0x58,0x20,0x6a,0xd2,0xc7,0xb6,0x82,0xe6,0xa2,0x52,0x73,0x4a,0xaf,0x37,0x5a,0xf6,0x6b +.byte 0xc4,0x2b,0x53,0x4e,0xca,0x44,0x17,0x9f,0x1c,0xeb,0x4d,0xf2,0xd1,0xb0,0x35,0xaa,0xc3,0xfe,0x77,0x34,0x2a,0x4a,0xe8,0x85,0x96,0x2f,0xa4,0x7d,0xdf,0xd0,0x6a,0x4a,0x0c,0x9b,0xd9,0x6a,0x00,0x92,0xb4,0xb1,0x9f,0xc3,0x56,0xee,0xcb,0xa5,0x3a,0x37,0x68,0xc8,0x7c,0x1e,0xa8,0x0a,0x3d,0xbc,0xd1,0xd0,0xd7,0x8b,0x32,0x34,0x20,0xfc +.byte 0xd3,0x9e,0xf5,0x18,0x3a,0xb9,0x87,0xae,0xde,0x6c,0xc0,0x7d,0xbd,0x20,0x00,0xe5,0x7b,0xcb,0xf9,0x7d,0x70,0x9a,0x10,0x45,0xc9,0x33,0x13,0x9d,0x2c,0x16,0x67,0xe6,0x36,0x38,0xcf,0xa2,0xf1,0xad,0xec,0x48,0x7f,0x9b,0x2a,0xdc,0x13,0xe2,0xee,0xef,0xf2,0x5c,0x3f,0x52,0x3a,0x72,0x79,0x9b,0xba,0x50,0xb2,0x2b,0xfb,0x97,0x8e,0xe6 +.byte 0x27,0x39,0x63,0x72,0x05,0x11,0x7d,0x2e,0xa8,0x44,0x08,0xf7,0xf3,0x26,0xe5,0xe4,0x6c,0x98,0x7b,0xb1,0x42,0x6d,0x74,0xd4,0x3b,0xfa,0x35,0xfa,0x0a,0xac,0x5e,0x9e,0x8f,0xc7,0x07,0xc5,0x50,0x25,0xfd,0xbf,0x13,0x52,0x3d,0xf1,0x18,0x1e,0x19,0x8c,0xf3,0x8b,0x4d,0xc8,0xfb,0x76,0xa4,0xe3,0x3f,0xb2,0x47,0x9c,0x50,0x97,0x32,0x65 +.byte 0x9e,0x42,0x81,0x21,0xd1,0x92,0xd2,0x81,0x4a,0x93,0x68,0xa2,0xc1,0x76,0xc8,0x40,0xce,0xfe,0x4e,0xc5,0xa7,0xb2,0x77,0x9f,0xc8,0xe5,0x41,0xb1,0xda,0x15,0xf6,0xfa,0x21,0x3f,0x11,0x5c,0xc6,0x62,0xda,0x01,0x7f,0x0f,0x9f,0x9e,0x98,0xfe,0x38,0x53,0x6c,0x7f,0xba,0x8b,0x55,0x01,0x36,0x33,0x41,0x5e,0xa9,0x78,0xbf,0x2e,0x60,0x4f +.byte 0xcb,0xe9,0x27,0x09,0x8c,0x01,0x2d,0x82,0x7d,0x3f,0xaf,0x8f,0x1e,0x37,0x79,0x35,0xfb,0xce,0x83,0xc5,0xf8,0xc5,0x54,0xfd,0x50,0xec,0x31,0xd1,0xb5,0x8a,0x4d,0x37,0xf6,0x7f,0x0e,0xbe,0x35,0xdd,0xa8,0x9e,0x5e,0xb9,0x3c,0xf4,0x2b,0xd2,0x97,0x56,0xd0,0x28,0xcb,0x60,0x27,0xcf,0x27,0x68,0x8a,0xa1,0xbf,0x9f,0xa3,0x45,0x4a,0x44 +.byte 0x71,0xe2,0xb2,0x9c,0x69,0x0b,0x18,0x69,0xcf,0x03,0xcc,0xc3,0x93,0xe0,0xf5,0xb7,0x4e,0xa4,0xdc,0x96,0xe0,0x2e,0xf8,0x3b,0xc6,0x67,0x30,0x06,0x5e,0xb9,0xb9,0x7d,0xaf,0x97,0x38,0x9a,0xf4,0x22,0x20,0x5a,0x9e,0x83,0x26,0x3c,0xcc,0x93,0x84,0x20,0x15,0x2e,0x85,0x23,0x17,0x1d,0x28,0xb4,0xe2,0x8f,0x2d,0x22,0x99,0x66,0xfd,0x6a +.byte 0xa8,0xe6,0xb7,0x19,0x18,0xec,0xbd,0x54,0xc2,0xcc,0xb7,0xb4,0x6b,0x10,0xdd,0xb5,0xe3,0x3b,0xb7,0x77,0xbf,0x66,0x65,0x82,0x6a,0xc6,0x0d,0x26,0xe6,0xe8,0xe1,0x96,0xe4,0x0b,0x3c,0xe3,0xf2,0xfb,0xd6,0x91,0x5d,0xb6,0x08,0x15,0x67,0x10,0xfa,0xf8,0xdc,0x72,0x84,0xca,0x48,0x29,0x75,0x98,0x62,0x30,0x43,0xa9,0xf1,0xde,0x58,0xb5 +.byte 0x6e,0x67,0x53,0x62,0x0d,0x06,0xa8,0x97,0x35,0x04,0x02,0x34,0x3f,0xd7,0x77,0x38,0xed,0x51,0x32,0x7c,0x6f,0x25,0x94,0x04,0x30,0xa5,0xfc,0xf1,0xb0,0x65,0x77,0x16,0xec,0xb0,0xf9,0x6d,0xaf,0xbc,0x75,0x6e,0x29,0x44,0x20,0x86,0x36,0xbe,0x22,0xe0,0xe1,0xc4,0x0c,0x97,0x10,0x45,0x3e,0x06,0xc3,0xee,0xa5,0x1f,0x97,0xc7,0xde,0xdb +.byte 0xf1,0x05,0xe3,0xb7,0x24,0xc5,0xa5,0xca,0x4e,0x8e,0x9e,0x44,0x7e,0x98,0xb1,0x3c,0xe9,0xa6,0xe5,0xa6,0x08,0xcb,0x08,0xd7,0xf6,0x38,0x37,0xa4,0x46,0xd1,0xdc,0x53,0x6f,0x6c,0x3f,0xca,0xa1,0x9b,0x7c,0xa6,0x44,0xd4,0x08,0x33,0xd2,0xf8,0x32,0xd2,0x4f,0x60,0x75,0x0f,0x49,0xf1,0x70,0x52,0x56,0x16,0x5b,0x3e,0x34,0x0e,0xe4,0x94 +.byte 0xc3,0xa9,0xd4,0x1c,0x9e,0xa4,0x10,0xce,0xc1,0x69,0x5b,0x3a,0xc9,0xd5,0xab,0x98,0x81,0x78,0x42,0x7e,0xf2,0x76,0x10,0xad,0x97,0x85,0x98,0x2f,0xe2,0x3f,0xb1,0x1d,0xc0,0x4d,0xa4,0x0b,0x54,0x7e,0x19,0x16,0x0a,0x71,0x74,0x37,0xfd,0x67,0x23,0x86,0xb2,0x3b,0x1e,0x49,0x92,0x92,0x1b,0x5f,0x65,0x56,0x76,0x6d,0x97,0x3b,0x91,0xc0 +.byte 0x5a,0x7e,0xf1,0x5b,0xe9,0x83,0xb9,0x67,0x2f,0xe1,0x0c,0xcf,0xe9,0x51,0x26,0x45,0x03,0x06,0x63,0xa4,0xb2,0x06,0xe0,0x8e,0xa3,0xbf,0xf5,0x7c,0x19,0xdf,0xfe,0x38,0x28,0x98,0xa1,0x23,0x16,0x69,0xc4,0x9f,0x20,0xe4,0x42,0x27,0x4e,0x7b,0xc9,0x42,0x5e,0xd2,0xb9,0xbf,0x33,0x03,0xbb,0x96,0x6d,0x80,0x65,0x90,0x3b,0x82,0x5b,0x68 +.byte 0x46,0x4f,0xe3,0xe0,0x0e,0xc5,0x90,0x91,0x80,0xf8,0xf4,0x9c,0xfe,0x03,0xaf,0x31,0x44,0xb7,0xfc,0x1f,0x65,0xc8,0x65,0x68,0xcc,0x27,0xb4,0x0d,0x81,0x14,0x9e,0x52,0xab,0xdd,0x71,0xf6,0xd9,0xcf,0x29,0x04,0xcd,0xae,0x6f,0xd6,0x41,0xb5,0xfd,0x1d,0x0f,0xbf,0x71,0xc2,0x60,0x98,0xb9,0xc0,0x6e,0x8a,0x2c,0x7d,0xec,0x31,0xa5,0xea +.byte 0x1a,0xb1,0xe4,0xc2,0x36,0xcb,0xf0,0xf4,0x3f,0x1d,0x03,0x01,0xcd,0xac,0xd0,0x9d,0x2e,0xa3,0xc4,0x54,0x49,0x75,0x90,0xac,0x7e,0x1e,0xc3,0x90,0xab,0x55,0xb0,0x34,0x0d,0xd6,0x99,0xb5,0x40,0xda,0xdd,0x30,0x57,0x61,0x15,0xec,0x8f,0x8c,0xc7,0xda,0xfc,0xf5,0x0a,0x86,0xd8,0x6b,0x0f,0x6e,0x09,0xb8,0x50,0x2a,0xea,0x51,0x84,0x33 +.byte 0x7a,0x97,0x0c,0x56,0x61,0x2c,0xd9,0x83,0xb9,0xb1,0x53,0x31,0x72,0x20,0x79,0x85,0x7f,0xdc,0xb8,0xfe,0xfa,0x9a,0xd4,0x6a,0x3c,0xc7,0xcc,0x75,0x20,0xba,0x9c,0xb9,0x1a,0xff,0x9c,0xbe,0xfd,0x87,0xb4,0xd7,0xe8,0x5e,0x22,0x6a,0x1b,0x91,0x52,0x6a,0x58,0xbc,0xf4,0xde,0xcc,0x18,0x37,0x0e,0xf5,0x22,0x91,0xd2,0x4f,0x08,0x91,0x62 +.byte 0x1c,0xb7,0xa0,0x7e,0x66,0x97,0xda,0xa0,0x3c,0xc8,0xe8,0xdc,0x61,0xa4,0x64,0x8b,0x0a,0x43,0x90,0x0c,0x78,0xd9,0x96,0x8a,0xb0,0x17,0x0f,0x32,0x17,0x11,0x82,0x69,0x9d,0x7c,0xa9,0xfd,0x9b,0xe3,0xeb,0x0d,0x44,0x1d,0xcb,0xf6,0xee,0x26,0x6b,0xd5,0x4c,0x49,0x69,0x18,0xd7,0xf3,0x63,0xd9,0x7e,0x83,0xdd,0xa3,0x2d,0xdf,0x88,0x10 +.byte 0xd1,0x5c,0xb0,0x7e,0x44,0xfe,0x64,0x39,0x33,0x05,0x04,0x54,0x74,0x4d,0xd5,0xbc,0xdf,0x19,0x52,0x81,0x60,0x92,0xc5,0x4e,0xa4,0xff,0xf0,0xa2,0xfd,0x88,0x96,0xde,0xb4,0x8d,0x58,0x06,0xfb,0x96,0x6f,0x0e,0xb0,0x4a,0x2b,0xed,0x15,0xa7,0xfb,0x9f,0xf2,0x30,0xc4,0xce,0x02,0x4d,0x83,0xb8,0x5d,0x10,0x60,0xb8,0xbc,0x05,0xa2,0xd4 +.byte 0xf1,0xae,0x46,0x56,0xb9,0xac,0x68,0x79,0x41,0x90,0xee,0x79,0xda,0x3a,0x91,0x7a,0xf6,0xdb,0xe3,0xea,0x91,0x48,0x77,0x4a,0xa3,0xab,0x9c,0x99,0x49,0x1f,0xc9,0xcd,0xe7,0x2e,0xe3,0xe7,0x78,0x6d,0x07,0x1b,0xc6,0x08,0x48,0xd8,0x20,0xff,0x19,0x8a,0x73,0x1d,0xc6,0xa1,0xd4,0x95,0x33,0xf7,0x45,0xab,0xea,0x05,0x3e,0xdf,0xde,0x68 +.byte 0xb2,0xb6,0xef,0x71,0xb4,0xd1,0x09,0x4b,0x43,0x16,0x35,0x1a,0xb6,0xcb,0x78,0x63,0xca,0x9e,0x9a,0xe3,0x86,0xb2,0x8e,0x7b,0x68,0x89,0xa7,0x5c,0xd3,0x06,0x21,0x88,0x94,0xde,0xa1,0xb1,0x3a,0xe8,0xb7,0xfa,0x58,0xc5,0xc8,0x01,0xfa,0x56,0xe4,0x0e,0x6b,0xeb,0x5d,0x67,0xf4,0x63,0xd4,0x44,0xe2,0xe7,0x42,0xfe,0x09,0x58,0xdf,0xd9 +.byte 0x1d,0xb7,0x14,0x91,0xac,0x88,0x49,0xf6,0x7c,0x03,0x92,0x11,0xb4,0x66,0x68,0x6c,0x94,0x2a,0x22,0xaf,0xa6,0xb1,0x29,0x2a,0xae,0xdd,0xa8,0x65,0xe4,0xa9,0x39,0x00,0x1e,0xca,0x17,0x99,0xba,0xd6,0xf2,0x20,0x21,0xbf,0x1a,0xab,0xca,0x7c,0x92,0x22,0xee,0x3c,0x0c,0xc6,0x63,0xcc,0x86,0xfe,0xc0,0x8f,0xac,0x18,0x4e,0x2b,0xa5,0x2e +.byte 0x46,0x57,0x8a,0xbf,0xdc,0xd1,0xd2,0x2c,0x5b,0xe2,0x96,0x81,0xca,0x41,0xb5,0x17,0x38,0x4a,0xa4,0xd2,0x0e,0xac,0x5d,0xe9,0x44,0x63,0x1b,0xb8,0x81,0xd6,0x69,0x1c,0x99,0xc5,0xdb,0xdd,0x18,0xc1,0x6d,0x28,0x7d,0x36,0x52,0x82,0xaa,0x1a,0x10,0x01,0x9d,0xf1,0x7b,0x09,0x69,0x56,0xb1,0x31,0xa3,0x54,0x3c,0x56,0xf9,0x82,0x8c,0x06 +.byte 0x5a,0x32,0x2d,0xc0,0x7c,0x7e,0x91,0x6d,0x73,0x7b,0x7c,0x45,0x0b,0x2c,0x2a,0x4f,0x3c,0xea,0x6b,0x2b,0x84,0x76,0xab,0x8d,0x4c,0x5c,0x64,0xa3,0x97,0x9f,0x56,0x20,0x05,0xf9,0xc2,0x20,0xf3,0xd0,0x6a,0x7f,0x7d,0x12,0xfc,0x20,0x52,0x5d,0xff,0x92,0xaf,0x4e,0x7f,0x8f,0x2f,0xd0,0x73,0x06,0x23,0x09,0xce,0x11,0xc0,0x1b,0x48,0x7d +.byte 0x11,0x51,0x06,0x0e,0x05,0x95,0xca,0x42,0x71,0x87,0xa3,0xa3,0xc1,0x27,0xf8,0xb1,0x24,0x92,0x38,0x95,0xf6,0x8f,0x3b,0x70,0x74,0x19,0x9b,0x08,0xb3,0x49,0xe9,0x57,0xd4,0xce,0x5b,0xdd,0xab,0x95,0x26,0xe9,0x70,0x21,0xef,0x16,0xdd,0x36,0x89,0xe5,0x9e,0xaf,0xc5,0x28,0x0c,0xd3,0x67,0x64,0xbc,0xfb,0x18,0x17,0x15,0x1e,0xa7,0xb7 +.byte 0x72,0x3d,0xfd,0x10,0x5c,0xa2,0xc1,0xbf,0x62,0x79,0x2b,0xa7,0xb9,0x1f,0x73,0xe6,0x11,0xd8,0xbc,0x74,0x6c,0x45,0x95,0xef,0xa2,0xda,0x90,0xc3,0x00,0x00,0xbb,0xc7,0x28,0x36,0x82,0xd4,0x5e,0x5c,0x11,0xea,0x7c,0xf6,0x79,0x66,0xff,0x93,0x77,0x49,0x05,0xc9,0xc1,0x8d,0x5c,0xf6,0xff,0xb9,0xf9,0xcd,0xb3,0x01,0x83,0x83,0x43,0x2d +.byte 0xa1,0x90,0x73,0xc9,0x32,0xae,0xdb,0xd0,0xf3,0x61,0x63,0x72,0x06,0xde,0x21,0x7b,0x3b,0x2d,0xec,0xd3,0x1d,0xfe,0xbd,0x6e,0xd8,0xe3,0x39,0xe0,0xa1,0x9f,0x67,0xaf,0xab,0x79,0xbc,0x59,0xf9,0xa7,0xdf,0x28,0x75,0xea,0x34,0x6b,0x25,0xde,0x49,0x1b,0x07,0x95,0x19,0x47,0x86,0x46,0x7b,0x68,0x30,0x70,0xec,0x9c,0x05,0xb6,0xc9,0x00 +.byte 0x68,0x10,0x4b,0xc4,0xe5,0xf1,0x67,0x3f,0xd4,0x3c,0xd6,0x49,0x98,0x71,0x23,0xff,0x07,0x6e,0x01,0x01,0x08,0x08,0x3d,0x8a,0xa1,0x71,0xdf,0x25,0x1a,0xef,0x60,0x86,0x6d,0x1c,0xd9,0x90,0x29,0x95,0xf2,0x4c,0x96,0xd3,0x17,0xe8,0x96,0x32,0x25,0x8c,0x65,0x38,0xbc,0x44,0x6a,0x5a,0xef,0x5a,0x72,0x12,0x43,0x2b,0xaf,0xc3,0xdc,0xb3 +.byte 0x6c,0x9f,0x57,0x61,0x2f,0x12,0x3f,0x72,0x16,0x4f,0x34,0xe3,0xb5,0xca,0x72,0xca,0x1c,0xdb,0xd2,0x8d,0x70,0x1f,0x19,0x75,0xb3,0x1b,0xdf,0xdb,0xb3,0xbf,0x6c,0x9a,0x70,0x64,0xa8,0xac,0x30,0x2d,0x4b,0x30,0xf5,0x4f,0x12,0x19,0xbd,0x65,0x25,0x70,0x33,0xe1,0x6f,0x18,0xdf,0x17,0xec,0xa3,0x80,0x51,0x6e,0xbb,0x33,0xa5,0xa8,0x58 +.byte 0x95,0x3c,0xab,0x86,0xd1,0x33,0xbe,0x55,0x04,0x8c,0x20,0x0d,0xfc,0x1a,0xa9,0x9d,0xb1,0x16,0x42,0x56,0x20,0xcc,0xa6,0x73,0xa0,0x85,0x3d,0xbf,0x1e,0xe0,0x01,0x51,0xd2,0xd7,0x2e,0x9d,0xd8,0x3c,0xea,0x03,0xf9,0x9a,0xbf,0x19,0x17,0x04,0x99,0xaf,0x8b,0xfc,0x9c,0x86,0xdf,0x58,0x78,0xfc,0x54,0x0d,0xac,0x26,0x27,0x2f,0x2e,0xbc +.byte 0xdd,0x4a,0xd5,0x6f,0x7c,0xd8,0x93,0xe3,0x51,0x9e,0xcc,0xc8,0xd2,0xfe,0x68,0xfb,0x5b,0x22,0xda,0xef,0x76,0xb9,0xc3,0xdd,0x13,0x52,0x24,0xb6,0x23,0x1f,0x69,0x22,0xb6,0xf5,0x86,0xff,0x2e,0x6e,0xd0,0xe0,0x21,0xbc,0x31,0x81,0xb5,0xc5,0xdb,0x36,0x58,0x44,0xe7,0xb8,0xf7,0xfd,0xd3,0x34,0xee,0xab,0xe6,0x99,0xf2,0x84,0x86,0x9b +.byte 0x67,0x45,0x08,0x07,0x66,0xae,0x6a,0x55,0xa2,0x74,0x46,0xda,0x02,0x82,0x67,0x93,0x60,0x64,0x5d,0x1f,0xac,0xe7,0x36,0xb6,0xcd,0x31,0x28,0x78,0x93,0xcd,0x54,0xe9,0x42,0xbb,0xb4,0xb3,0x15,0x72,0x12,0x31,0x85,0x15,0x68,0x3a,0x31,0x35,0xd6,0xc9,0x0d,0x3f,0xa0,0x4b,0x36,0x03,0xda,0xfd,0x7a,0xd6,0xce,0x0c,0xf5,0x14,0x23,0x71 +.byte 0x47,0x85,0x64,0xe7,0xe7,0x8b,0x8e,0x25,0x03,0x32,0x5f,0xa9,0x3b,0xdb,0x2b,0x27,0x7c,0x02,0xfb,0x79,0xd7,0x7a,0x76,0x75,0x69,0xfd,0x74,0x24,0xd2,0x72,0x8c,0xdd,0xc5,0xa1,0x45,0x90,0x50,0x65,0x95,0x41,0xae,0x7e,0x5c,0x83,0x3e,0x24,0x3c,0x02,0xa9,0x37,0x49,0x36,0x63,0x2f,0x18,0x92,0x3a,0x8a,0xe5,0x2a,0x6a,0x5c,0xa7,0x3e +.byte 0x98,0x24,0xfd,0xd9,0x3b,0x2d,0x4c,0xe2,0x8e,0x05,0x5b,0xdd,0x47,0x0f,0x19,0x5a,0x62,0x94,0xd6,0x6e,0x45,0xd8,0x99,0x43,0x78,0xa0,0xb1,0xdf,0x68,0x8a,0x56,0xa8,0xfb,0x2e,0x52,0x4e,0xfa,0x21,0xec,0x62,0x14,0xf5,0x90,0xdb,0x8c,0x02,0xa7,0xff,0x29,0x22,0xb8,0x40,0x87,0x58,0xda,0x4e,0xfd,0xab,0xeb,0xa2,0x40,0xce,0xfc,0x58 +.byte 0x46,0x37,0x3f,0x04,0x4e,0x36,0x76,0x44,0x3c,0xfc,0x54,0xb8,0x6f,0x4b,0x66,0x6a,0x4a,0x78,0x8f,0x33,0x86,0x07,0xe4,0x3c,0xb5,0x0f,0x86,0x2e,0x21,0x7e,0x44,0xce,0x18,0x77,0xe0,0xcc,0xd7,0x7f,0xc9,0xac,0xb7,0x2b,0x94,0xb5,0x91,0xcd,0x2c,0xfa,0xc7,0x98,0xbd,0xb0,0x2a,0x85,0x77,0xcf,0x82,0xd9,0xae,0x76,0x33,0x34,0xc0,0x9d +.byte 0x3a,0xbc,0x27,0xbc,0x97,0x25,0xf4,0xf1,0x43,0x53,0xac,0xf6,0xde,0xf5,0x1f,0xa6,0x6a,0xd5,0xe3,0x11,0x32,0x49,0x46,0x5b,0x56,0x68,0x07,0xdb,0x03,0xad,0xc2,0x35,0x16,0x8f,0x01,0xcc,0x8a,0xd2,0x0c,0x6b,0xb2,0x62,0x73,0x99,0xb5,0x74,0xf1,0x4b,0x2e,0xbc,0x8e,0xed,0xc0,0x55,0x56,0x40,0xae,0x24,0xf2,0x7e,0x1f,0xba,0x9d,0xc4 +.byte 0xd1,0x69,0xd3,0xba,0x21,0x83,0xf5,0xc4,0xbf,0x78,0x96,0x74,0xa1,0xd8,0x8c,0x35,0xba,0x9f,0xa0,0x0f,0xb5,0x6a,0xb2,0x72,0x52,0xfa,0x02,0x71,0xbb,0x79,0x61,0xbd,0xa9,0xee,0x22,0x7c,0xc5,0xac,0x6b,0x52,0x67,0xab,0xc4,0xd2,0x8d,0x26,0x1c,0x2b,0xaf,0x0c,0xa4,0xce,0xb5,0x11,0x99,0x4d,0x22,0x69,0x68,0xe0,0xc6,0x3e,0x84,0x3d +.byte 0xeb,0xad,0xc9,0x5b,0xb5,0xb4,0xba,0x06,0x9b,0x0a,0xb2,0x54,0x89,0xf2,0xb0,0x5f,0x41,0xb4,0x8b,0x21,0x31,0x29,0x94,0x52,0x1e,0xa7,0xc4,0xc2,0x97,0xb9,0x74,0x95,0xa3,0x30,0xfb,0x02,0x77,0x01,0x4f,0x32,0x03,0x34,0x8f,0x51,0x2d,0x10,0x61,0xee,0xc5,0x2f,0x89,0x42,0x3c,0xbe,0xed,0x66,0xa6,0x7a,0x10,0xc6,0x06,0x7e,0xb2,0x3d +.byte 0xf2,0xc9,0xd1,0x08,0x97,0x6c,0x6f,0x6d,0x06,0x9d,0x72,0xd0,0x5e,0x79,0x3b,0xa5,0xa5,0xd0,0xdc,0xc6,0xda,0x73,0xd2,0xf3,0x0a,0xfd,0x94,0xc2,0x9c,0x4b,0x85,0x38,0x8d,0xb2,0xfb,0x29,0xdd,0x90,0xc2,0xb7,0x8f,0x2c,0x52,0xa2,0x32,0x5e,0xa1,0x0f,0x62,0x38,0x58,0xfa,0x46,0x4e,0x87,0x4b,0xcf,0xc5,0xe9,0xfc,0xf2,0x97,0x62,0xdd +.byte 0x92,0xd2,0x41,0x7b,0xa2,0x2a,0xae,0x6e,0x4d,0xbc,0xef,0x43,0x18,0x6e,0xbb,0xe5,0x06,0x45,0x53,0xa1,0x00,0xef,0xf5,0x4b,0xad,0xbd,0xa5,0x2c,0x77,0x0a,0x37,0x04,0x22,0x95,0xeb,0x7b,0xc1,0x3c,0x20,0x0a,0x44,0xdf,0xa2,0x23,0xc9,0xfc,0x85,0xf3,0x5b,0x9b,0x0f,0x40,0x2a,0xe3,0xc7,0x5a,0xa1,0xf6,0xe4,0x39,0x2a,0xfe,0xd7,0xe7 +.byte 0x33,0xd8,0xbc,0xd6,0x1f,0xef,0xac,0xa9,0x3f,0x2d,0x55,0xb0,0x85,0x74,0xef,0xeb,0xcd,0x9b,0x23,0xa3,0xe6,0x19,0xde,0xea,0x7c,0x9c,0x83,0x48,0x4b,0x12,0xfd,0xe3,0xcb,0x1b,0x70,0x2d,0x9f,0x2c,0x13,0x82,0x87,0x68,0xca,0x60,0x5e,0xc0,0x2e,0x60,0xde,0xf2,0x6b,0x78,0x0a,0x63,0xaa,0x9c,0x9b,0x61,0x63,0xc7,0x0c,0x98,0x92,0x68 +.byte 0xc7,0x44,0x00,0x6a,0x76,0x43,0xa0,0x61,0x7c,0x37,0x62,0x1a,0xd4,0x9b,0x58,0x59,0xe5,0xae,0x78,0x79,0x80,0xf0,0x75,0x68,0x9e,0xab,0x02,0xb8,0x00,0xc5,0x33,0x0d,0xea,0xb1,0x91,0x0f,0x17,0x57,0x96,0x23,0x8d,0x36,0x4d,0x89,0x94,0x42,0xc9,0x61,0x6e,0xf6,0x9f,0x37,0xee,0xa5,0x4b,0x3d,0x06,0x08,0xee,0x9a,0x7c,0x73,0xa9,0x58 +.byte 0xcd,0xcb,0x78,0xa9,0x3d,0x5c,0x11,0x0e,0x5a,0xd9,0xb0,0x7b,0xc4,0x3e,0x83,0xdc,0xe2,0x11,0xe9,0x6d,0x8a,0x8b,0x24,0x28,0x1d,0x7e,0x45,0x1b,0x05,0x5a,0x6b,0x97,0x1c,0x25,0x15,0x84,0x5c,0x3f,0x95,0x44,0xd5,0x4f,0x3c,0x4b,0x52,0xb1,0x0b,0x6a,0xb3,0xae,0x4e,0x1b,0x12,0xcf,0x16,0x78,0xd7,0xcb,0x32,0x43,0x39,0x88,0xf4,0x5e +.byte 0x26,0x29,0xe7,0x93,0x08,0x19,0x14,0x88,0x8f,0x54,0x91,0x13,0xb6,0x57,0xd1,0x87,0xd4,0x9d,0xf7,0xec,0x9b,0x22,0x6b,0x91,0x79,0x9d,0x6c,0x32,0x47,0x4a,0x79,0x55,0x7d,0xac,0x87,0x98,0x59,0x97,0xa5,0x71,0xbc,0xbf,0x1b,0xf0,0x6f,0xbb,0x81,0x8e,0xc2,0xef,0x7c,0x63,0x2f,0x80,0x37,0xb6,0xc5,0xae,0x59,0x5e,0x57,0x5e,0x1f,0x3a +.byte 0xe5,0x6b,0x6b,0x5e,0xdb,0x8e,0xd2,0x87,0xf7,0x94,0x7b,0x11,0x0e,0x4b,0xa6,0x9f,0x49,0xc6,0x68,0xc7,0x52,0x5f,0x28,0x87,0x33,0x84,0x52,0x5f,0xc8,0x5f,0x81,0x85,0x10,0xe8,0x92,0xce,0x13,0x6c,0x01,0x28,0x5e,0x59,0x8f,0xbb,0xa9,0x9c,0xdc,0x85,0xd3,0x73,0xa0,0x5a,0xbf,0x5b,0x04,0x80,0x99,0x90,0xc8,0x16,0x44,0x0d,0x09,0x01 +.byte 0xcd,0x24,0xe7,0x59,0xe7,0x42,0xe0,0xdd,0x01,0x93,0x1f,0x9e,0x1f,0x36,0xdb,0xcd,0x49,0xdb,0xea,0xa9,0x63,0x71,0xb9,0x2c,0xcd,0xca,0x1a,0x64,0xe1,0x95,0xbe,0xe1,0x64,0x2e,0xc7,0x59,0x15,0x61,0xe1,0xf9,0x45,0x0f,0x2a,0x3a,0x85,0xf8,0x7c,0x06,0xae,0x53,0x84,0xd2,0xe7,0xee,0x8b,0xbf,0x7a,0x72,0xa3,0x57,0xf1,0xc2,0x12,0x40 +.byte 0x9c,0x93,0xe1,0x04,0x81,0xde,0xc6,0xa8,0xae,0x4f,0x5c,0x31,0x93,0xc7,0x11,0x1d,0x89,0x70,0x85,0xd5,0x6f,0xab,0x58,0x1f,0x3f,0x76,0x45,0x7e,0x19,0xd0,0x6c,0xc1,0x41,0xa9,0x64,0x0a,0x79,0xb5,0xe0,0x9e,0xbc,0x4f,0x10,0x0c,0xac,0xfc,0x54,0xad,0xcf,0xb8,0xd0,0xfd,0x9b,0xed,0xea,0x54,0x05,0xbf,0x4f,0x91,0xbd,0x16,0x4a,0x57 +.byte 0xa9,0xda,0x38,0xb9,0x40,0x0d,0x63,0x68,0x83,0x7d,0xec,0x1c,0xe6,0x7f,0x9c,0xec,0x16,0x4e,0x0b,0xd0,0x91,0xb4,0x2c,0x04,0x65,0xb8,0x12,0xdf,0x3f,0xff,0x6a,0x08,0x4e,0x65,0xdf,0x09,0xa5,0xea,0xb1,0xac,0xa9,0x67,0xd2,0xbb,0x73,0x51,0xd2,0x37,0x72,0xfc,0x3f,0x69,0xe2,0x3f,0x01,0x94,0x3a,0xf7,0x23,0x0e,0x5d,0x23,0x44,0x82 +.byte 0xc7,0x38,0x35,0x9f,0xfa,0x13,0x15,0x47,0x0d,0x18,0xab,0x02,0x39,0x6e,0xb2,0x7c,0x29,0x11,0x9a,0x5a,0x01,0x2d,0xb2,0x10,0xea,0x9d,0xb7,0x37,0x4b,0xf2,0x2b,0x76,0x22,0xf7,0xaf,0x8a,0x5f,0x1d,0x6b,0xb2,0x13,0x9e,0x84,0xf5,0xbc,0x6e,0xad,0x66,0x5c,0x1b,0x5d,0x12,0xb0,0xe1,0x48,0x94,0x83,0xa0,0x26,0x54,0xd2,0xfd,0x3c,0x8d +.byte 0x81,0xac,0x31,0x9a,0x15,0xc6,0xd8,0xd5,0x07,0x1b,0x21,0x3f,0x04,0x40,0x3a,0x60,0x80,0x5f,0x1f,0x42,0x3e,0xd7,0x2b,0x7a,0x5f,0x71,0x93,0xb4,0x9d,0xf0,0x8b,0x5e,0xf1,0xc6,0x19,0x0a,0xa9,0x43,0xac,0xb2,0xc1,0x73,0x0d,0x44,0x6a,0x92,0x22,0xd0,0xda,0x40,0x14,0x7d,0x88,0xd1,0x5e,0x10,0xc9,0xa4,0x4d,0xd8,0xe0,0x7d,0x74,0x1b +.byte 0x2b,0xcb,0x50,0x24,0xbd,0x50,0x4a,0xe4,0xed,0x0e,0xe8,0xc0,0x5b,0x50,0x6d,0xf5,0x68,0x59,0xd1,0xc3,0x6f,0x32,0x86,0x29,0xe0,0x32,0x3f,0x05,0x86,0xa2,0x7f,0x93,0xd8,0xb7,0x02,0x68,0xb3,0x16,0xaa,0x0c,0xd3,0x4d,0xec,0x9a,0x66,0x06,0x7c,0x74,0x35,0x6f,0xde,0x8b,0xd9,0xdb,0x79,0x0a,0x15,0x84,0xc4,0x63,0xba,0x42,0xa2,0x3c +.byte 0x29,0xc8,0x65,0xdc,0x06,0x60,0x0a,0x08,0x4e,0x80,0x33,0x5c,0xfa,0x4b,0x91,0xdb,0xf6,0x57,0xd6,0x25,0x7d,0x70,0x80,0x09,0xb2,0x27,0xdb,0x80,0x4c,0xa7,0xe8,0x35,0xf5,0x18,0x2d,0x10,0x62,0x22,0xf9,0xb1,0x22,0xf3,0x9b,0x74,0xa0,0xc5,0x25,0xd3,0x44,0xc9,0x27,0x7c,0xba,0x01,0xfe,0x32,0x23,0xf7,0x90,0x90,0xbc,0x0d,0xad,0x9e +.byte 0x22,0x77,0xc5,0xfb,0xf2,0x0e,0xda,0xe5,0x7c,0xb4,0xbb,0xed,0xd4,0xfd,0xb0,0xfb,0x4a,0x4c,0x2a,0x32,0x2d,0x81,0xcd,0xef,0x74,0x3c,0x6a,0x9a,0x0c,0x95,0x58,0x25,0xd0,0x3a,0xb4,0x84,0x8f,0xa5,0xef,0xad,0x91,0xd7,0x2d,0xae,0x61,0xaf,0x9d,0x3f,0x03,0xa8,0xab,0xa4,0x66,0xd4,0x73,0x3a,0x84,0x0d,0x4c,0x6a,0xca,0xbd,0x0c,0x3c +.byte 0xdc,0x1d,0x37,0xea,0xe6,0x5a,0x7f,0x15,0xbe,0x9d,0xc7,0xce,0xbd,0x46,0x97,0xd3,0x07,0x19,0x82,0xaf,0x58,0x39,0x39,0x95,0x5d,0x4b,0x8e,0x1b,0xe9,0xf1,0xf6,0xa9,0xb3,0xfc,0xe6,0xe0,0x68,0x2c,0xbb,0xfa,0xd9,0x9b,0xc1,0x69,0xf3,0x5a,0x8f,0x67,0xd5,0x9c,0x11,0x1e,0x02,0x20,0x20,0xfe,0x4b,0xc9,0x8b,0x62,0x17,0x9a,0xfa,0x47 +.byte 0x7f,0xa2,0x8b,0xc1,0x3b,0x02,0x78,0x38,0xff,0xce,0xe1,0x54,0x40,0x3f,0x27,0x5c,0x9d,0xdd,0x56,0x38,0x48,0xea,0x39,0xbe,0xa0,0x76,0x43,0x82,0xef,0x74,0x50,0xdf,0xda,0x4c,0xca,0x47,0x46,0x7e,0xc5,0xff,0xce,0x66,0xdf,0xeb,0x5b,0x6e,0x45,0x77,0x19,0xac,0x01,0x1f,0x20,0xa1,0xad,0x01,0x5f,0x87,0x3e,0x3a,0xd0,0x83,0x13,0x17 +.byte 0x53,0x40,0xfe,0x26,0x99,0x42,0xfa,0x54,0xa8,0x82,0x79,0xa7,0x44,0xd0,0x9e,0x59,0x64,0x77,0xec,0x70,0x0e,0xcd,0xb9,0xb1,0xc2,0xe2,0x39,0x93,0xb7,0xd1,0xd5,0x67,0x9f,0xb0,0x5b,0xd9,0x50,0x8b,0x17,0xec,0xbc,0x83,0x64,0x35,0xaa,0x43,0x3f,0x4c,0x8c,0x56,0x83,0x76,0xa2,0x72,0x30,0xe7,0xe8,0x9f,0x88,0x35,0x8e,0x8d,0x11,0x31 +.byte 0x8e,0xb5,0x71,0x75,0x31,0xc8,0x28,0x15,0x50,0xe6,0x0a,0x00,0x4d,0x75,0x51,0x7c,0x33,0x14,0x96,0xff,0xe8,0xf3,0xa0,0xb1,0x9c,0xeb,0x9d,0x8a,0x45,0xcf,0x62,0x82,0xeb,0xce,0xea,0xa5,0xb9,0x10,0x83,0x54,0x79,0xf8,0xcf,0x67,0x82,0x1d,0xea,0xce,0x86,0xcf,0xc3,0x94,0xf0,0xe8,0xf4,0x80,0x8b,0x84,0x96,0x06,0x2e,0xe4,0x58,0x21 +.byte 0x98,0x42,0x1a,0xb7,0x8c,0x5d,0x30,0x15,0x83,0xe8,0x17,0xd4,0xb8,0x7b,0x90,0x57,0x35,0x72,0x6d,0x1b,0x7c,0xc0,0x88,0x0a,0xa2,0xea,0xcd,0x58,0xcc,0xf1,0xb4,0x8b,0xcd,0x66,0x3c,0xa5,0xb0,0xd4,0xc9,0xcc,0x42,0x1d,0xef,0x3b,0x42,0x22,0x9b,0xfb,0x45,0x24,0xcc,0x66,0xd7,0x67,0x73,0xb2,0x12,0x03,0xf6,0xa3,0x06,0x61,0xe2,0xab +.byte 0x91,0x8e,0x33,0x0b,0x9f,0x6a,0x80,0x5e,0x0f,0x68,0x41,0x5a,0x7e,0xd8,0xe2,0x32,0x50,0xc2,0x88,0x60,0xca,0xe3,0x23,0x86,0xff,0xdc,0x0c,0x19,0xbb,0xba,0x01,0xa3,0x41,0x89,0xf0,0x79,0x55,0x79,0xa6,0xa4,0x66,0x7b,0x46,0xde,0xac,0xae,0xb1,0xde,0xe1,0x1e,0x8d,0x62,0xc1,0xd6,0xeb,0x39,0x2f,0x1d,0x50,0x27,0x53,0xc9,0xea,0xb6 +.byte 0xd3,0x91,0x9b,0xdd,0xc1,0x68,0x8c,0xb6,0xe1,0x5e,0x9f,0xea,0xbe,0x98,0x88,0xeb,0xa8,0x77,0xf6,0x69,0x64,0xab,0x99,0xf3,0x7a,0x08,0xff,0x8c,0xa6,0x17,0x1b,0x2e,0x6e,0xcc,0xd8,0x33,0x30,0xef,0x5a,0x86,0x07,0x49,0xa5,0x13,0x08,0xbc,0xd6,0x88,0x7e,0x19,0xe0,0x1c,0x23,0xa9,0xe5,0x0a,0xa7,0xaf,0x8a,0xe9,0x81,0x3f,0xd8,0x99 +.byte 0xa6,0x01,0x6b,0xec,0x14,0x08,0x90,0xb1,0x76,0x16,0x3a,0xcb,0x34,0x0b,0x91,0x26,0xe9,0xec,0xe5,0xbc,0xd6,0xdc,0xf0,0xa9,0xfd,0xf2,0xe9,0xcc,0xa1,0x9d,0x7f,0x32,0x0d,0x0a,0x2a,0x92,0xff,0xc4,0x38,0xf8,0x9e,0x31,0x78,0x47,0xbf,0x3f,0x27,0x71,0xe1,0x7a,0x33,0x48,0x91,0xe8,0x8e,0x1a,0x66,0xcf,0xa1,0x61,0xc2,0x62,0x30,0x7c +.byte 0x69,0x35,0x21,0x67,0x9b,0xa7,0x1c,0x72,0x06,0xd8,0x28,0x94,0x6e,0x6d,0xf0,0x22,0x85,0xb4,0x6c,0x89,0xe8,0x2e,0x3a,0xc5,0xdc,0xe3,0xe3,0x0c,0x8a,0xba,0x1c,0x57,0x86,0xef,0x55,0x6a,0x24,0x59,0x5e,0x6e,0x47,0xb8,0xad,0xc5,0x10,0xff,0xbe,0x2d,0x93,0x09,0xfe,0x17,0x03,0x16,0x4d,0x4a,0x9a,0x15,0x38,0x94,0x38,0x18,0x45,0xa7 +.byte 0xcf,0xe4,0x16,0xd3,0x26,0x72,0x49,0xe7,0x89,0x9a,0xb4,0xc7,0x78,0xc3,0x18,0x3b,0xc8,0x08,0x9d,0x66,0x0f,0x48,0xc8,0x23,0x91,0x57,0x61,0xf1,0xf3,0x01,0x3e,0x0a,0xa3,0x4c,0x6c,0x34,0x5b,0x98,0x40,0x47,0x42,0xc1,0xeb,0x58,0x58,0xff,0x1f,0x4b,0x5f,0xf1,0x29,0x2e,0x7e,0x76,0x15,0x56,0x17,0x9c,0xe7,0x55,0x09,0x22,0x0a,0xa2 +.byte 0xd8,0xbf,0xd9,0x44,0x49,0xa9,0x24,0xd7,0x4f,0x12,0x04,0xa2,0x18,0x1c,0xdc,0x54,0xc0,0x22,0x27,0x3c,0xeb,0x1f,0x02,0xae,0xb3,0x33,0xb2,0xa2,0x84,0x23,0x76,0xc6,0x2b,0x94,0x53,0xae,0x7b,0xee,0xbb,0x81,0x64,0x8a,0x3f,0xe0,0x75,0x6b,0x2c,0xd5,0x60,0xad,0x49,0x0c,0xf8,0x65,0x64,0x1a,0x83,0xc7,0xb9,0xd9,0x01,0x5b,0xde,0xb0 +.byte 0x76,0x9b,0x1c,0x0d,0x89,0x2d,0xd5,0x09,0xc7,0xa9,0xbb,0x0a,0x54,0x5c,0xd4,0x5b,0xbf,0xbc,0x5e,0x00,0x29,0x0b,0x30,0x19,0x73,0x66,0xfd,0x3f,0xdb,0xd4,0x1b,0xd4,0xc0,0x27,0xde,0x49,0x90,0x5f,0x65,0x87,0x3c,0xc4,0x43,0xd0,0x49,0x76,0x64,0x39,0x88,0xd7,0x0e,0xfc,0x27,0x52,0xb1,0x8d,0xd0,0x27,0x29,0x84,0xe3,0x49,0xb9,0x0c +.byte 0x2d,0x4e,0x73,0x95,0x57,0xa8,0x07,0xa0,0xe1,0x5b,0x5a,0xb6,0xbc,0xa1,0x7f,0xfd,0x4b,0x9c,0x4d,0x7d,0x0c,0x5c,0x4c,0x4b,0x42,0x70,0xc3,0x0a,0xc1,0x89,0x12,0xb5,0x46,0x04,0x3c,0x56,0x25,0xc6,0x8f,0x49,0x7d,0x3b,0xf1,0xcd,0xfc,0xb8,0xa6,0x66,0xb1,0xc2,0xa3,0xa7,0x98,0x93,0x0e,0xdb,0xcd,0xce,0xdf,0x7f,0x68,0x5e,0xea,0xf2 +.byte 0x85,0x61,0x8f,0xd6,0x23,0xb4,0x5f,0x2f,0xf8,0x78,0x47,0x15,0x59,0x2d,0xca,0x35,0x0f,0xf5,0x91,0x74,0x3b,0x32,0xe1,0xcf,0x54,0x1b,0xf4,0x9d,0xdb,0x20,0x5e,0xf8,0x71,0x10,0xa3,0x31,0xf1,0xb8,0x98,0x8d,0x76,0x70,0xce,0x4c,0xed,0xd3,0x81,0x6b,0xd5,0x8d,0x73,0x5f,0x8c,0x66,0x7c,0x87,0x73,0xfa,0x20,0xbe,0xcd,0xba,0x41,0x88 +.byte 0x46,0xc3,0x38,0xc0,0xd9,0x08,0x79,0x30,0xda,0x7f,0x2a,0xc0,0x72,0x47,0xb0,0xc9,0x41,0x68,0xb1,0xe8,0xb4,0x86,0xcb,0x5d,0xb0,0x5b,0x7a,0x26,0xfd,0xf2,0x1b,0x4e,0x1f,0x4c,0x6a,0x8a,0x84,0xd4,0x07,0x2f,0xf4,0x06,0x73,0x3d,0x1c,0x55,0x04,0x6a,0xa5,0x8a,0xbb,0xaa,0x8a,0x8d,0x8f,0x05,0xcc,0x63,0x04,0xe0,0xc6,0x6f,0x6b,0xf8 +.byte 0x24,0x56,0xbb,0x9d,0xa9,0xe5,0x4c,0xac,0x9d,0xbe,0xfd,0x70,0x9d,0x1f,0x98,0xc4,0xfc,0xdb,0x3c,0x45,0xe7,0xbb,0xea,0x51,0xb6,0x56,0xe0,0x2c,0xb2,0x77,0x1b,0x80,0x9b,0x43,0xa7,0xb2,0x9a,0x40,0x8f,0xdb,0x2d,0x51,0x7b,0x2c,0x89,0xfd,0x14,0xf5,0x77,0xbf,0x40,0x3d,0x32,0xe0,0x10,0x32,0xcd,0xc4,0x3f,0xe2,0xe8,0xb4,0xdf,0xc2 +.byte 0x43,0x7a,0x0b,0x17,0x72,0xa1,0x0e,0xd6,0x66,0x35,0x8f,0xf4,0x21,0xf1,0xe3,0x46,0x13,0xd7,0xcd,0xc7,0x7b,0xb4,0x9b,0x39,0x1e,0x33,0x3c,0x18,0x15,0x7a,0xea,0x77,0xc5,0x57,0x4d,0xf9,0x35,0x8a,0xc1,0xb5,0x78,0x5d,0xc3,0x3e,0xd5,0xfd,0xb5,0x50,0xee,0x44,0x24,0xa2,0x55,0xb6,0xd8,0x3d,0x5d,0x75,0x2a,0x26,0x37,0xe7,0x85,0xb3 +.byte 0xff,0x70,0x5d,0x99,0x8d,0x99,0xba,0x9d,0x09,0x97,0xf2,0x67,0xe5,0xa3,0x86,0x06,0x21,0xb4,0x03,0x9b,0x63,0x76,0x1f,0xf8,0x09,0xd8,0x4e,0x22,0xcb,0x48,0xcf,0x79,0x72,0xc9,0x3f,0x84,0x5e,0xb8,0x39,0x87,0x27,0x92,0x1e,0x59,0xdf,0xc2,0xe6,0xd2,0xc4,0x5f,0xad,0x6e,0x9c,0xa4,0xec,0xd5,0x7d,0xf6,0x2b,0x9b,0x93,0x56,0xcd,0xa3 +.byte 0xc5,0xfa,0x82,0x39,0x46,0x29,0x57,0x43,0x08,0xe2,0xe1,0x3e,0x80,0x3b,0x8e,0x08,0xe5,0xc5,0xfe,0x05,0x17,0xaf,0xe0,0xf0,0xb7,0x5b,0x34,0x33,0x59,0xfa,0x93,0xbf,0x6a,0xb3,0x6c,0xbc,0x99,0x62,0x34,0x2c,0xf2,0x3b,0x62,0xf2,0x1c,0x48,0x07,0xc9,0x60,0x03,0xa5,0xe1,0x66,0x8d,0x84,0x36,0xc7,0xf9,0xc6,0x3b,0xa9,0xee,0x0f,0x48 +.byte 0xff,0xff,0xad,0x95,0x21,0xb5,0x12,0x63,0x7d,0x0f,0x0d,0x09,0x63,0x51,0x64,0x69,0xb4,0x95,0xd3,0x25,0xf0,0x3b,0x6d,0xc4,0xdd,0x8c,0x80,0x0d,0x3b,0xd2,0x4b,0xe0,0x67,0xcb,0xcd,0x7d,0x2e,0xbd,0x61,0x4b,0x0c,0x32,0x1f,0xfd,0xd2,0x31,0xed,0xa8,0xaa,0x98,0xf4,0x85,0x21,0xbc,0x08,0x14,0x2f,0xbb,0xbf,0x01,0xba,0x24,0x5e,0x5c +.byte 0xf3,0x72,0xed,0x05,0xec,0xf3,0xd1,0x9b,0xb0,0x63,0x8a,0x14,0xd1,0x9e,0xae,0x9b,0xce,0x4d,0x6c,0xb6,0x7a,0x78,0x9e,0x1d,0xcd,0x1e,0x50,0x66,0x26,0x70,0x74,0x2b,0x43,0x6a,0xc7,0xd7,0xe9,0xa2,0xcf,0xf3,0x09,0x9a,0x81,0x80,0x04,0xb8,0x5a,0x4f,0x2e,0x10,0x35,0xb2,0xb0,0xc6,0x40,0x97,0xa5,0x6a,0x24,0x5a,0x6b,0x97,0xc7,0xc0 +.byte 0x24,0x50,0x8d,0x65,0x21,0x25,0xce,0xb9,0x19,0xfc,0x40,0x08,0xcf,0xfd,0x1c,0xc4,0x30,0xd4,0x06,0x70,0xac,0x8a,0x3c,0x3f,0xfc,0xc3,0xeb,0xdd,0x43,0x56,0x4a,0xf6,0x50,0x92,0x9d,0xce,0x9c,0xea,0x15,0xdd,0x7c,0x5e,0x40,0xf5,0x7e,0x41,0x70,0xdd,0xc7,0x62,0x21,0x5a,0x20,0xc8,0x71,0x10,0x97,0xd5,0x12,0xfa,0x31,0x96,0xfb,0x38 +.byte 0x17,0x66,0x73,0x32,0x7a,0x93,0xf0,0x82,0xb9,0xf1,0x24,0xc5,0x64,0x0b,0xa9,0x24,0x4a,0x47,0xac,0xfb,0xf1,0x55,0xd7,0xb3,0x9a,0x64,0x63,0x0b,0x2e,0x13,0x9e,0x1a,0xee,0x21,0xd0,0x70,0x5c,0x0c,0x25,0xe7,0x38,0x23,0xd7,0x2f,0x6a,0x20,0x59,0xef,0x70,0xb2,0x8e,0xb4,0x15,0xee,0x6f,0x70,0xd0,0x75,0x19,0x9d,0x42,0xa7,0x17,0xad +.byte 0x99,0xaa,0x0d,0xa3,0x87,0x3d,0xf1,0x7b,0x0e,0xfa,0x62,0x9a,0x20,0x64,0x17,0x64,0x07,0xc2,0x84,0x13,0xb2,0x59,0x81,0x66,0x45,0xab,0x47,0x6d,0xfc,0x7b,0x60,0x05,0xac,0x30,0xb2,0x86,0x7e,0x34,0x6b,0xaf,0x37,0x00,0xa6,0x47,0x4c,0xb9,0x10,0xbd,0x9e,0xce,0x47,0x9e,0xc2,0x0e,0xfd,0x47,0xfa,0xd8,0x08,0xd1,0xc2,0xaa,0x6d,0x8c +.byte 0x91,0x2c,0x18,0x32,0x52,0x84,0x47,0x71,0x3b,0xc9,0xa1,0xf5,0xfc,0x90,0xb8,0x79,0xbf,0xe5,0x59,0x1b,0x91,0x22,0xcb,0xd3,0x87,0x7e,0xd4,0xb5,0x33,0xb2,0xfc,0x7c,0xee,0x22,0xfb,0xe8,0xb0,0x3c,0xa7,0x8b,0x05,0xd7,0x7f,0x17,0x52,0xbe,0xb6,0xe0,0x1e,0x47,0xce,0xfd,0x79,0xdf,0x16,0x5f,0x01,0x70,0x0c,0x47,0x5a,0x01,0x96,0x08 +.byte 0x3e,0x9b,0xc4,0xb2,0x58,0x73,0xc4,0x38,0xd6,0xf2,0x1b,0x0a,0x2c,0xb9,0x2a,0x96,0xb5,0x89,0x2d,0x33,0xdf,0xa4,0x5f,0x24,0x1b,0x79,0x0e,0xb6,0x9f,0xec,0x46,0xd3,0x27,0x4a,0xc1,0x26,0x94,0x95,0x41,0xd5,0xb3,0x84,0x74,0x62,0x47,0xc5,0x4d,0xb4,0xe2,0xe7,0xdb,0xc3,0xc3,0x7b,0x33,0x2a,0xbf,0x69,0xf6,0x5e,0xdc,0xfe,0xa4,0x81 +.byte 0x91,0xf3,0xa8,0x26,0x82,0x44,0x37,0xea,0xe1,0x20,0xff,0x52,0x33,0x5b,0x0b,0x6f,0xf8,0x33,0x4e,0x02,0x4d,0x38,0x93,0xcd,0xc0,0xfc,0x73,0x1a,0xf9,0xf6,0x9f,0x53,0xfc,0xf7,0xe2,0x4b,0x25,0xdd,0xa7,0x4d,0x1e,0x5c,0x17,0xc3,0xa0,0x41,0x1d,0x67,0x45,0xff,0xcb,0x41,0x49,0xc4,0x18,0x68,0x7e,0x7f,0xb6,0x6f,0xdb,0xbc,0x73,0x2f +.byte 0xc7,0x9a,0x46,0x8c,0x0b,0x57,0xa3,0xd3,0x0a,0x34,0xb7,0x27,0x67,0xbb,0xe1,0x64,0xa7,0x7e,0x79,0xac,0x4f,0x09,0x54,0x9b,0x43,0x5e,0x9a,0x33,0x02,0x45,0xdc,0x85,0x0b,0x59,0x8d,0x78,0xe8,0xd8,0xb5,0xd3,0x31,0x9d,0x2a,0x60,0x5b,0x91,0xed,0xf1,0xf1,0x37,0x3f,0xdb,0xda,0xd6,0xd1,0x8f,0x14,0x7e,0xe1,0xfc,0x92,0x60,0xa5,0x33 +.byte 0x86,0xef,0x29,0xbf,0x94,0x84,0x2b,0x24,0x20,0xb4,0x5e,0x23,0x34,0x08,0x63,0xc9,0xe6,0x80,0xa0,0x27,0x27,0x2f,0xab,0xc0,0x52,0x44,0x66,0x29,0x32,0x2e,0x91,0x96,0x02,0x1c,0x3b,0xb4,0x6e,0x33,0x49,0x5b,0x60,0x6f,0x14,0x93,0x65,0x0d,0x97,0x01,0xfb,0xf9,0x42,0x74,0xb6,0x21,0xf7,0xc2,0x5d,0xbf,0x91,0x2b,0xf5,0xb1,0x4e,0xe2 +.byte 0xd6,0x24,0x57,0x41,0x7a,0xcb,0xdd,0xb6,0x96,0x8b,0xfc,0x42,0x19,0x21,0x7f,0x41,0x32,0x3d,0x69,0x9b,0xee,0xda,0x97,0x45,0x26,0x71,0x0d,0x12,0xf0,0x20,0x7f,0x44,0x0f,0x4c,0xd2,0xd3,0x34,0x93,0xc7,0xe5,0xe7,0x83,0x62,0x13,0x0b,0x7d,0xc6,0xe4,0xd2,0xae,0x53,0x2e,0xd1,0x18,0x81,0xd0,0x81,0xf6,0xc0,0x98,0xaf,0x1d,0xb2,0x8a +.byte 0xcb,0xd3,0xde,0x1d,0x53,0x71,0x92,0x0e,0x4b,0x8c,0x7c,0x8e,0x65,0xf6,0xe2,0xc2,0x5a,0x4f,0x8c,0x59,0x0f,0x35,0x5e,0xe4,0x43,0x50,0xab,0xb7,0xdd,0xfc,0x66,0xf9,0xb1,0x9b,0x6b,0x1b,0xaf,0x2e,0x85,0xe6,0x3e,0x4c,0xa2,0xd4,0x55,0x47,0xb9,0x66,0x66,0x7b,0xa3,0xb2,0xd5,0x8a,0x8e,0x88,0x0e,0xfb,0x4e,0xad,0xf4,0x39,0xd2,0xd6 +.byte 0x39,0xef,0xe0,0xee,0x0f,0xf3,0x94,0x47,0xa7,0x32,0x24,0x9a,0xb0,0x82,0x08,0x67,0x00,0x3f,0xe6,0x95,0x76,0x84,0x0a,0x5c,0xb7,0x74,0xc1,0x64,0x5e,0x7c,0xba,0x0b,0x2e,0x6f,0x26,0xc3,0x20,0x2e,0x95,0xc1,0xf0,0x8c,0x55,0x4a,0x45,0x26,0xe6,0xf3,0x55,0x78,0xbd,0xd4,0xdb,0x07,0xbd,0xff,0x61,0x51,0xde,0x7f,0xdb,0x56,0x73,0x6b +.byte 0x9c,0xa4,0xb0,0x72,0xa7,0xd0,0x93,0x4d,0x1d,0x3a,0x92,0x78,0xde,0x77,0x65,0xe8,0x07,0x41,0x92,0xc1,0xbb,0x69,0x79,0x20,0x43,0xab,0x21,0x2e,0x6d,0xdf,0x43,0xeb,0x73,0x49,0x12,0x1f,0x53,0x75,0x01,0xed,0xce,0xf4,0x05,0x05,0x2b,0xc7,0x2a,0x65,0x29,0xe8,0xcf,0x5b,0xf0,0xc1,0x5b,0xd8,0xa8,0xac,0xbb,0xe3,0xac,0x29,0x0a,0x90 +.byte 0x79,0x2f,0x5b,0x92,0x14,0xf2,0xc7,0x2d,0xe5,0x33,0x6e,0x5e,0x31,0xe2,0xab,0xdf,0x21,0x71,0x4a,0x44,0xaa,0xc6,0xe9,0xb8,0x51,0x1d,0xe2,0xf3,0x07,0x19,0xa1,0x98,0x9e,0x8a,0xed,0xe4,0x9e,0x52,0x16,0x1f,0x2f,0xd3,0x4c,0x97,0x1e,0x38,0x49,0x84,0x2e,0x45,0xb5,0x4b,0x4f,0xfe,0xdb,0x25,0x3e,0xa9,0x6e,0x7d,0x60,0x3b,0xa7,0x7e +.byte 0xda,0x32,0x1a,0xd6,0x04,0xbe,0x0c,0x92,0x4e,0x6d,0x85,0xf9,0x9c,0x26,0x9a,0x88,0xf5,0x50,0x95,0x7b,0x9e,0x43,0x07,0x97,0xd4,0xdb,0xa0,0x6e,0x30,0x5d,0x44,0xa9,0x41,0xc2,0xdf,0xdf,0x37,0x35,0xc4,0x85,0x83,0x08,0xea,0x22,0xfa,0xae,0xdd,0x95,0xe5,0x35,0x47,0x23,0x86,0x27,0xfa,0x71,0x88,0xa0,0x12,0x00,0xe0,0xa7,0xd1,0x1b +.byte 0x5e,0x78,0x6f,0x38,0x30,0xa9,0x80,0x75,0xd7,0x61,0xcc,0xfd,0x33,0xd2,0xb8,0xf8,0xd7,0x12,0xf5,0x03,0xf9,0x53,0x6d,0x3b,0x6b,0xff,0x24,0x0a,0x3b,0xe8,0x2a,0xe9,0xae,0xb7,0xc3,0xe3,0x0f,0x26,0x71,0x55,0xc5,0x03,0x60,0xf4,0x47,0x01,0xa3,0x69,0xb2,0x98,0x75,0x5b,0x90,0x4a,0xf9,0x61,0x49,0xd6,0xc4,0xdb,0xab,0x04,0x0c,0x47 +.byte 0x1e,0x31,0x75,0xfa,0xa2,0xc5,0xfa,0x66,0x0c,0x4a,0x93,0xa0,0xea,0x56,0xf9,0x49,0xd4,0xc7,0xcc,0x2c,0xe5,0xdc,0xab,0x61,0x8e,0x0c,0xf3,0x2f,0xb5,0x9f,0x36,0xa1,0x05,0xab,0xb6,0xbc,0x4a,0x6d,0x97,0xe7,0x19,0xe5,0xfe,0x92,0xa5,0x94,0xd5,0xc0,0xf5,0x31,0xf6,0x8a,0xf7,0x24,0x62,0xdd,0x56,0x12,0x84,0xf5,0xc6,0xa0,0x37,0xa3 +.byte 0xfc,0xbd,0x16,0x2a,0xa6,0x36,0x8e,0xd4,0x29,0xfe,0xc4,0xc5,0xcb,0xdd,0xdd,0x8b,0x7e,0xa6,0x9d,0x08,0x28,0x10,0x6b,0xff,0xd7,0x79,0x48,0x35,0x2f,0xbe,0x34,0x9a,0xfb,0xd0,0x7d,0x5c,0xad,0xf0,0xde,0x96,0xea,0x2d,0xc5,0x8b,0xa9,0x7a,0x8b,0xbe,0x97,0xde,0x7a,0x95,0xc7,0x95,0xd9,0x86,0xde,0x3c,0x8d,0x15,0x8e,0x45,0x69,0x27 +.byte 0xd4,0x27,0xa8,0xe3,0xa9,0x1e,0xa0,0x95,0x74,0xf1,0x8b,0xbe,0x3b,0xff,0xa3,0xf6,0x23,0x78,0xd9,0xbd,0xc2,0x44,0x3a,0x93,0xb5,0xa6,0x87,0x7c,0x65,0xd1,0xd8,0xd5,0x43,0x2a,0xb2,0xc8,0x65,0x86,0x83,0x06,0xf7,0x33,0x88,0x3b,0xc0,0x2c,0xb3,0x3b,0x23,0xa3,0x67,0x15,0x49,0x09,0x02,0xbb,0x11,0x08,0xe3,0x37,0x9a,0x9b,0x67,0x8e +.byte 0x63,0xc3,0x8b,0xff,0x21,0xa6,0xbe,0x3b,0xa6,0x57,0xc1,0x56,0x2a,0x02,0xdb,0x24,0x50,0x4a,0x4f,0x60,0x49,0x03,0xcf,0xba,0x55,0x1c,0x64,0xfe,0x0c,0x58,0xb4,0xb0,0x89,0x91,0xd5,0xbc,0xbc,0x85,0xe6,0x96,0x32,0x89,0x1f,0xa0,0x48,0xd1,0x6e,0xa7,0x03,0x86,0x8a,0xf2,0x5f,0xc3,0x5a,0x57,0x8a,0xa3,0x4a,0x61,0x90,0x18,0xb2,0x0d +.byte 0xc7,0x94,0xb9,0x3e,0x40,0x8b,0x1d,0x54,0xd0,0x4c,0xe7,0x2a,0xd5,0x85,0xa7,0x93,0x07,0x10,0x58,0xc4,0x8a,0x18,0x0a,0x49,0x30,0x87,0x93,0x0e,0xcf,0xc7,0x95,0x9f,0xd1,0x3f,0x9b,0x06,0xe3,0xf9,0x4f,0x16,0x58,0x04,0xb4,0xf0,0xf0,0xf3,0x3a,0xab,0x4a,0x35,0xf1,0xec,0x23,0x15,0x0c,0x24,0xba,0x90,0xdc,0xd1,0xfe,0x47,0xca,0xb2 +.byte 0x95,0x33,0x30,0x45,0xba,0x18,0x15,0xec,0x58,0x36,0x02,0xdf,0x28,0x09,0x74,0x4b,0x09,0x01,0x24,0x0f,0x00,0x7b,0xb3,0x65,0x45,0x42,0x63,0x15,0xf8,0x50,0x8b,0x4f,0x28,0x73,0x03,0x3a,0x31,0xe5,0x0d,0x56,0x8f,0x6b,0x4b,0x9e,0xda,0x71,0xee,0x68,0xba,0x85,0x81,0x3d,0x5d,0x74,0x5e,0xda,0x60,0x87,0xf4,0x5a,0x38,0xad,0xc5,0x3f +.byte 0xb5,0x15,0x02,0x59,0x1c,0xd2,0x93,0x66,0x54,0x65,0xf1,0xe7,0x9b,0xf0,0x30,0x2d,0x9e,0xba,0xc5,0x86,0xf4,0xf6,0xc7,0x92,0x73,0x12,0x3b,0x28,0x21,0x1b,0x3d,0x84,0xc0,0x1a,0x7d,0x35,0x8b,0xd4,0x35,0x39,0x35,0xa6,0x51,0xd9,0x19,0x8b,0x92,0xa3,0xea,0x8c,0x7e,0x25,0x05,0x1f,0x1d,0x8f,0x4d,0xba,0xdf,0x20,0x8c,0x8d,0xe2,0xac +.byte 0xdd,0x3d,0xf1,0x04,0x3f,0x77,0x4b,0x8f,0x39,0x7d,0x01,0xb7,0x71,0x4b,0x7b,0xe1,0x6f,0xd4,0x28,0x1a,0x57,0x96,0x4d,0xe2,0x84,0xf6,0x64,0x10,0xbb,0x0f,0xbc,0xe0,0x19,0xed,0x92,0x9e,0x60,0x15,0x78,0xd1,0x30,0xc0,0x53,0x4b,0x94,0xca,0x4b,0x5a,0x44,0x8b,0xa9,0xda,0x2f,0x08,0x70,0x94,0xe4,0x54,0xe1,0x28,0x6e,0xdd,0x34,0x56 +.byte 0x54,0xb0,0xd4,0x87,0x00,0x72,0x1e,0x46,0x10,0x3a,0x27,0x5d,0xc6,0xb5,0x72,0x20,0x2b,0xbe,0x17,0x01,0xbb,0x04,0x11,0x16,0x7d,0xbf,0x91,0xd3,0x7b,0x44,0x58,0x13,0x2a,0x9c,0xda,0x9d,0x26,0x46,0xf5,0x5f,0x51,0xef,0x6c,0xf6,0x36,0xdb,0xb7,0x21,0xde,0xdb,0x87,0xa0,0xd8,0x60,0x24,0x86,0x6d,0x64,0x85,0x9e,0x94,0xd9,0x21,0x0d +.byte 0xed,0xda,0x33,0xea,0x3c,0xdf,0x74,0xe3,0xa5,0xc7,0xc7,0x9e,0xe5,0xb1,0x29,0xdf,0xfa,0x20,0x25,0xcd,0x13,0x08,0xee,0xe6,0xba,0xf1,0x62,0x39,0xcf,0xe3,0x29,0xb8,0xaa,0x65,0x43,0x8a,0x48,0xb5,0xb5,0x70,0x35,0x66,0x42,0xf4,0x32,0x70,0x0b,0x0c,0xa7,0x46,0x79,0xdf,0xb2,0x80,0x13,0x72,0x7a,0xeb,0xf9,0x52,0xcb,0xb8,0x9f,0x4b +.byte 0x4f,0x29,0x2b,0xb3,0x94,0x02,0x0a,0xe1,0x20,0xe5,0x91,0x15,0x6a,0xa1,0x0c,0x71,0x96,0x77,0x01,0x80,0xf7,0x51,0x0b,0xaf,0x54,0x9b,0x3c,0x7b,0x91,0xd2,0xbd,0xaf,0x13,0xa5,0x32,0x17,0x7c,0xca,0xd0,0x22,0xd5,0xe5,0x83,0x44,0x24,0x5c,0xcc,0x24,0x31,0xcd,0x81,0x4e,0x96,0xcd,0x60,0x9f,0x7a,0xe7,0x2e,0x89,0x16,0xd5,0x66,0x6b +.byte 0xac,0x31,0x11,0x7c,0x76,0xc6,0xde,0xbe,0x46,0x55,0x20,0xdf,0x9d,0x2c,0x33,0xa5,0x80,0x76,0xb1,0xc9,0x1c,0x84,0x17,0x4d,0x15,0xe6,0x6d,0xce,0xed,0xea,0xc7,0xe6,0xff,0x01,0x10,0x60,0x26,0xf7,0x63,0x5f,0x91,0x89,0x7e,0xc1,0x7c,0x76,0x67,0x7b,0x7e,0xfa,0x28,0xa0,0xa7,0x82,0x1b,0x28,0x82,0x6a,0x4f,0x78,0x61,0x48,0xbf,0x13 +.byte 0x0b,0x71,0x0c,0xad,0xee,0xd7,0xf8,0xcc,0x0f,0x77,0x74,0x7d,0x2b,0x8a,0x09,0xd8,0x47,0xa0,0xfc,0x45,0x40,0x24,0xf3,0xce,0xdb,0x81,0xa1,0x50,0x9e,0x0a,0xd0,0x58,0xf7,0xaf,0xf1,0x09,0x12,0xa8,0x24,0xb2,0x34,0x99,0x67,0x17,0x53,0x1f,0x9d,0x09,0x7b,0xcb,0x83,0x6e,0x6a,0x0b,0xbf,0x8f,0x6e,0x3d,0xdb,0x29,0xe5,0xd0,0x06,0xdb +.byte 0xb8,0xf2,0xf3,0x43,0x4e,0xa7,0xf3,0x73,0x93,0xe8,0xab,0x2f,0xc8,0x75,0xce,0x62,0xda,0x74,0x39,0x57,0xe4,0xe4,0xb1,0x41,0x8f,0x9d,0xda,0x43,0xb4,0x2c,0x4b,0xd5,0x1c,0x10,0xf0,0x29,0x6b,0x94,0x15,0x04,0x3c,0xd3,0x45,0x73,0x29,0xb3,0x60,0x87,0x93,0xdb,0xbf,0x60,0x4e,0xdf,0x4d,0xbb,0xde,0xb2,0x57,0x67,0x14,0x0d,0x0b,0x60 +.byte 0x63,0xd5,0xc6,0x81,0x82,0xd6,0x0c,0xe6,0x4c,0x43,0x13,0x02,0x74,0x56,0x20,0x6b,0x21,0x28,0xe6,0xe2,0x0b,0xc1,0x7a,0xc3,0x08,0x60,0x82,0xe0,0x4f,0xbf,0x1e,0x3f,0xf0,0xa9,0xb2,0x2e,0x0c,0xbf,0xd6,0x03,0x1d,0x0d,0xd6,0x1c,0x36,0xb5,0xb2,0x14,0x56,0x21,0xc2,0xe0,0x1e,0xff,0xee,0x8a,0x70,0xae,0x3f,0x1e,0xe5,0xac,0x05,0x46 +.byte 0x6b,0x81,0x32,0xce,0x50,0xbb,0x82,0x66,0x32,0x93,0x46,0xf7,0xee,0x77,0x1c,0x9a,0x2f,0x31,0x60,0xa2,0x09,0x7c,0x14,0xd9,0x81,0xe9,0x19,0x27,0x31,0x5e,0xa0,0x98,0x71,0x42,0x2f,0x30,0x71,0xd6,0x31,0x94,0xe0,0x61,0xed,0x50,0x66,0xfa,0xba,0x12,0x5e,0xc6,0xc8,0x67,0xe5,0x8e,0xfd,0x34,0xa9,0xeb,0xde,0x25,0x43,0xbf,0xe7,0xb5 +.byte 0x16,0xf5,0x62,0x66,0x5d,0x0b,0x13,0x9a,0xd4,0x8c,0x2b,0x8f,0xe6,0x91,0x33,0xcb,0xa0,0x70,0x48,0x3e,0x22,0x7d,0xe4,0xf3,0x75,0xc9,0x49,0x82,0x50,0xc9,0x90,0x04,0x32,0xab,0x99,0x6e,0xf1,0xf0,0x0b,0x60,0x80,0x35,0x25,0x45,0x88,0xe9,0x82,0x06,0xe1,0xbb,0x85,0x11,0x40,0xf8,0x0e,0xbd,0x19,0x7a,0xdd,0x78,0xf9,0xc2,0x46,0xe4 +.byte 0xb5,0x27,0xfb,0xb6,0xba,0xbc,0x7d,0xb8,0x27,0xe7,0xbf,0xfe,0x8e,0xfe,0x7e,0x83,0x63,0x43,0x92,0x26,0xf0,0xbb,0xde,0xb6,0x93,0x4f,0x55,0x0c,0x07,0x99,0x3c,0x98,0xa1,0x8c,0x73,0xc1,0x4c,0x9a,0x09,0xa8,0xea,0x16,0x0b,0x49,0x2a,0x43,0xee,0x90,0x61,0x6f,0x09,0x1b,0xc3,0x2d,0x62,0x4b,0xfc,0x90,0xa1,0x8e,0x84,0x2e,0x90,0x8d +.byte 0x5f,0x80,0xff,0x6a,0x3c,0x61,0x0f,0xf2,0xac,0x70,0x20,0xc1,0xf2,0x85,0xcf,0x94,0xc8,0x94,0xe7,0xa0,0x04,0xdf,0xaf,0xef,0x26,0xd2,0xbc,0x07,0x70,0xc1,0x48,0xd6,0x87,0xd6,0xbe,0xea,0x95,0x6a,0xce,0xa2,0x48,0xac,0x46,0x46,0xb1,0x74,0x70,0x96,0x6c,0x26,0x58,0x75,0x9d,0x84,0xd7,0xd9,0x17,0x9a,0x46,0xe9,0xd7,0x3d,0xde,0xfd +.byte 0x7e,0xf4,0xd8,0x7e,0xf8,0x8f,0x1c,0xb5,0xfb,0xe9,0xc4,0xca,0xba,0x52,0x5f,0x17,0xee,0x75,0x7d,0x1d,0x50,0x16,0x9f,0x16,0x1e,0x00,0x8b,0xc1,0x2f,0xab,0x73,0x65,0x88,0x7b,0x80,0xa6,0x71,0xb7,0xfb,0xb0,0xda,0xd1,0x96,0x18,0x5c,0x48,0x6e,0x18,0x45,0x59,0x45,0xef,0x5c,0x65,0x35,0x99,0x5e,0xb9,0xd4,0x1a,0x07,0x7d,0x1e,0xa6 +.byte 0x69,0x42,0x9d,0xfa,0xec,0x02,0xdc,0xc4,0x19,0x6b,0x9c,0xb1,0x5e,0xa3,0xb4,0x6d,0xb4,0xa6,0x25,0xa8,0xe4,0x3f,0x3d,0x6e,0x2c,0x95,0xf7,0xcd,0xa5,0x4e,0x32,0xca,0x7e,0xe0,0x7b,0x11,0xf9,0x0a,0xe1,0x61,0x41,0x60,0xec,0xb3,0xb1,0x92,0x89,0x33,0x17,0xe9,0xaf,0x70,0x7f,0x1c,0x07,0xb5,0x24,0x3a,0x37,0x84,0x38,0xf5,0xb6,0x11 +.byte 0xfc,0x0c,0x12,0xc1,0xfc,0xa9,0x82,0x67,0x4d,0x17,0xe8,0xea,0xd0,0x62,0x17,0xb2,0x9c,0x59,0x01,0x87,0xfb,0x54,0x8e,0xa7,0xa5,0x85,0xa9,0x8a,0xec,0xfe,0x29,0xc0,0x73,0xc6,0xa0,0xbf,0x66,0x9a,0xc5,0xf8,0xee,0xa4,0xcb,0x09,0x44,0x74,0xfe,0x32,0xf5,0x42,0xea,0xf0,0xa6,0xec,0x74,0xea,0x14,0x5c,0x43,0x51,0xfa,0x3a,0x48,0x1e +.byte 0xa0,0x2e,0x59,0x2e,0xdb,0x3a,0x19,0xfe,0x1f,0x95,0x25,0xee,0x27,0x2b,0x99,0xb4,0xe1,0xd0,0xe6,0x33,0x91,0xa1,0xaf,0x30,0xa0,0x89,0x00,0x3c,0x13,0x31,0x18,0x70,0x90,0x42,0x55,0x0a,0xc9,0xc5,0x0c,0x43,0xa5,0xee,0xd6,0x90,0x07,0xae,0xc4,0x8c,0xdc,0xe4,0x07,0xbb,0x61,0x70,0xd1,0x10,0xe4,0x68,0x96,0x70,0x78,0xab,0xe9,0x3a +.byte 0x6e,0xc7,0x75,0x93,0xa0,0xba,0xff,0x6a,0x2d,0x57,0xaa,0x93,0x09,0xc3,0x6b,0x81,0xf3,0xde,0xc2,0xee,0xac,0x86,0x0a,0xfb,0xad,0xdb,0x6f,0x2a,0xa0,0x15,0x7b,0x96,0x77,0x38,0xf8,0x86,0x51,0x33,0x7a,0x6f,0x1c,0xf8,0xd5,0x15,0xcd,0x76,0x7f,0x37,0x68,0x82,0xdf,0xab,0xc3,0xdb,0xbe,0xeb,0x2b,0xa8,0x34,0x72,0x20,0x34,0xfb,0x12 +.byte 0x64,0x17,0x05,0x64,0xc0,0xa1,0xca,0xd3,0xac,0x27,0xc2,0x68,0x28,0x40,0x42,0xe2,0x0a,0xdd,0xd7,0xd6,0xf6,0x92,0x95,0x3c,0x10,0x17,0x4e,0xef,0x75,0xae,0x98,0x2d,0x10,0xc8,0xa8,0xac,0x15,0xf7,0x5b,0x81,0xc1,0xdf,0x5e,0xbe,0x88,0x49,0xe3,0xd1,0x88,0x1c,0xcb,0xce,0x20,0x01,0x12,0x60,0x57,0x0b,0xf6,0x32,0x57,0xaf,0x59,0xef +.byte 0xc9,0xe7,0xbf,0x62,0xf3,0xb6,0xe6,0x5c,0xee,0x36,0x7e,0x11,0x90,0xd1,0xeb,0xfa,0x62,0x0b,0xc6,0xf3,0x1a,0xd5,0x8b,0x95,0xec,0xb4,0x38,0xfe,0x45,0xb0,0xb5,0xff,0x84,0x0a,0x27,0x3a,0xa2,0x5a,0x2a,0xc9,0xa4,0xc0,0x11,0xc6,0x61,0x13,0xb7,0x53,0xa3,0x47,0x45,0x6d,0xc6,0xa9,0x00,0xd1,0x40,0xf4,0x77,0xac,0xb3,0xd3,0x26,0x99 +.byte 0xf1,0x36,0x59,0x28,0xb4,0xd0,0xdd,0x0e,0xed,0x53,0x33,0x45,0x71,0x9c,0x5c,0x11,0x27,0x2c,0x2f,0x10,0x9e,0x5b,0x8a,0x5b,0xc5,0x1f,0x36,0xc9,0x2a,0xba,0xc7,0xa5,0x31,0xd7,0x9f,0x2b,0x0a,0x09,0xcb,0x7c,0x4f,0xa2,0xdc,0xc5,0x64,0x0d,0xe6,0xfe,0xb0,0x9d,0x3b,0xf0,0xa7,0x19,0x8c,0x84,0x21,0x6b,0x9e,0x1c,0xb5,0x7b,0x66,0x77 +.byte 0xd0,0x85,0xb4,0x22,0x93,0x6e,0x84,0x29,0x9b,0x60,0x90,0x37,0x9d,0x8c,0x94,0x95,0x95,0x3b,0xf1,0x2d,0x56,0x5b,0x53,0x60,0x2d,0xe5,0x7f,0x80,0x71,0x56,0xa7,0x6e,0x66,0x76,0x1f,0xaa,0x0d,0xba,0xfb,0x0e,0xcf,0x20,0x68,0x74,0x2b,0x99,0x13,0xe1,0xa8,0x33,0xc9,0xf6,0xbc,0xd3,0xf4,0x46,0x01,0x02,0x85,0x27,0xf4,0x20,0x97,0xa3 +.byte 0xba,0xbc,0x47,0x30,0x48,0xed,0x60,0xe6,0xca,0xbf,0x76,0x8c,0x2c,0x6a,0x43,0x32,0xfd,0x90,0x04,0x95,0xc2,0x42,0xcb,0xca,0xc4,0x33,0xe1,0xd3,0x23,0x92,0xa1,0xde,0x09,0x38,0xce,0x00,0x93,0xb3,0xed,0x82,0x8e,0xfb,0xce,0x4c,0x9a,0x10,0x6e,0xce,0x4a,0x37,0x05,0x75,0x37,0x58,0xc3,0x8e,0x57,0x50,0xa0,0x7d,0x80,0x2d,0x51,0xea +.byte 0x08,0xcd,0x1b,0xd2,0x81,0x85,0x19,0xc1,0xe8,0xce,0x31,0x18,0xcf,0x54,0x37,0x96,0x77,0x3d,0x64,0xfb,0xc2,0xa9,0xdb,0xb8,0x37,0x03,0x83,0x34,0x3c,0x25,0x6a,0x22,0x33,0xfa,0x27,0x70,0xc7,0x0a,0x27,0x12,0x1e,0xb3,0xd0,0x59,0x6f,0xa3,0xc5,0x73,0x95,0x4c,0x1f,0xf1,0x3c,0xb3,0xc2,0xa2,0xc6,0x45,0x17,0x53,0xa8,0xfc,0x00,0xff +.byte 0x77,0x40,0x28,0xd2,0x53,0x90,0x92,0xe9,0x86,0x6c,0xa5,0x40,0xce,0xbc,0x79,0x6f,0x8f,0x12,0xef,0x1b,0x38,0x1f,0xb3,0x24,0xf0,0x75,0x17,0x20,0x9e,0x03,0x9c,0x2b,0x51,0x57,0x93,0x44,0xce,0x74,0xc9,0x12,0xe7,0xcb,0x2f,0x5e,0x1b,0x95,0xf2,0x4d,0x2e,0x51,0x8d,0x52,0xd5,0x21,0xe3,0x1b,0x33,0xe7,0xf2,0x18,0x61,0xa2,0x53,0xdb +.byte 0x73,0xaa,0x6a,0x6c,0xf9,0xf4,0xef,0x3d,0x40,0xa3,0x00,0x80,0x82,0xed,0xe6,0x66,0xd1,0xd6,0xe9,0x93,0xd8,0x92,0xfa,0xdf,0xf9,0x9c,0x7a,0xfb,0x2b,0xc7,0xa7,0x73,0x67,0x2b,0xed,0x76,0xb1,0x52,0xaa,0xcf,0x34,0x84,0xa1,0x6d,0x56,0x85,0xef,0xcb,0xbc,0xa3,0xc6,0xf3,0x5a,0x88,0x04,0xd5,0xd8,0xf1,0x7b,0xf8,0x11,0x6f,0xa0,0x44 +.byte 0xa5,0x0f,0x76,0xed,0xd7,0x98,0xe3,0xda,0xb8,0x1b,0xc7,0xe6,0x89,0x08,0x19,0x1f,0xf8,0xe3,0x32,0x32,0xa5,0x3c,0x71,0x9f,0x11,0xde,0x50,0x29,0xb0,0x54,0x7e,0x3b,0x5e,0xeb,0xf7,0xab,0xa8,0xa0,0x35,0x96,0xc7,0xc5,0xea,0x60,0xc0,0x37,0xca,0x61,0x55,0x96,0xac,0xb4,0xd0,0x29,0x9a,0x1a,0x3f,0x9e,0xf5,0xf5,0x3d,0xed,0xc5,0x7c +.byte 0x2c,0x9d,0x67,0xf8,0x4d,0x82,0x6e,0x2a,0x9a,0xfc,0x5f,0xdc,0x02,0xb0,0x3d,0xa5,0x1c,0x08,0x5d,0x4a,0xaa,0xd0,0x38,0xfb,0xbc,0xbb,0x7f,0x37,0xfb,0xec,0xc0,0x62,0x79,0xaa,0xde,0xfd,0x23,0x9c,0x4c,0x4a,0xe1,0x48,0x40,0x36,0xc0,0x0a,0x6f,0x43,0xb7,0xad,0x4c,0xf6,0x56,0xb5,0x44,0xf4,0x72,0xcd,0x13,0x10,0xea,0x0d,0x24,0xc1 +.byte 0xa9,0x36,0x3b,0x36,0xf2,0x6e,0xf9,0x0a,0x67,0xcd,0x02,0x67,0xb3,0x5c,0x63,0x3a,0x7c,0xc1,0x3b,0xf2,0x1d,0x3d,0xf1,0xff,0xbf,0xf7,0x97,0x9f,0x30,0x1f,0xaa,0xd8,0xdb,0x53,0x9b,0x0a,0xbd,0x38,0xd8,0xb6,0xf1,0x4a,0x78,0x1a,0xc2,0x46,0xd2,0x0c,0xa8,0xcd,0x7b,0x39,0xc7,0x42,0x55,0xc8,0x3e,0x02,0x1d,0xf4,0xad,0x55,0x01,0x6a +.byte 0x11,0x2d,0xfa,0x67,0x48,0xae,0x45,0x31,0x9b,0x09,0x7d,0xd9,0xdd,0xaf,0x5c,0xd5,0x40,0x51,0x2a,0xa1,0x0f,0xb3,0x6e,0xc2,0x94,0xfe,0xde,0x70,0xaf,0x6c,0xea,0x5f,0x7d,0x3c,0x72,0x85,0x86,0x24,0x20,0x0a,0x7a,0xe7,0x69,0x32,0x66,0x7d,0x34,0x13,0x60,0x62,0xc7,0x68,0x32,0xde,0x34,0x30,0x36,0xc8,0x8e,0xb7,0x13,0x66,0xf1,0xce +.byte 0x5f,0x7a,0x3a,0xfe,0x62,0xd6,0x72,0xb6,0x1b,0x80,0x43,0x8a,0x3e,0x13,0x15,0xe4,0x1c,0x7b,0x08,0x70,0x0b,0x6e,0xb3,0xfe,0x07,0x91,0x23,0x21,0x57,0x48,0xc6,0xa9,0xa3,0xa8,0xc7,0x19,0x89,0x8a,0x49,0x12,0x25,0x88,0xd2,0x11,0xa5,0xa8,0x9e,0x0e,0xa7,0x71,0xfe,0xaf,0x88,0xee,0xa7,0x1c,0x3b,0x27,0x27,0x7e,0x79,0x92,0xed,0x77 +.byte 0x74,0x65,0xbd,0x46,0x41,0x25,0xd9,0x8b,0x21,0x73,0x9f,0xaa,0x35,0xa0,0x22,0xb3,0xc8,0x71,0x28,0x72,0xd2,0xcb,0xf4,0x2a,0x06,0x0a,0x63,0x96,0x55,0x2e,0x83,0x0b,0xe8,0x07,0x99,0x9d,0x59,0xde,0xde,0x62,0xbd,0xb4,0x3e,0x70,0x15,0xed,0x95,0xa8,0x2f,0xb7,0xa2,0xb6,0x65,0x56,0x9d,0xe5,0x81,0xa0,0x05,0x5b,0xce,0x00,0xd4,0xb9 +.byte 0x28,0x5a,0xc1,0x9a,0x74,0xc6,0xd7,0x27,0xdd,0x7c,0xbe,0xe8,0x0d,0x47,0xfc,0x81,0x05,0x6b,0x4f,0x68,0xc7,0xcc,0x5d,0xd5,0x66,0x83,0x34,0x72,0x35,0xab,0x39,0x64,0x19,0x67,0xbd,0xff,0x15,0x44,0x20,0x18,0x2a,0xaf,0xbc,0x58,0x94,0xdb,0x18,0x50,0x55,0x11,0x6a,0xc4,0x1d,0xee,0xe2,0xe0,0x75,0x73,0xf1,0xa1,0x83,0xf4,0xcb,0x40 +.byte 0x96,0xf4,0x77,0x45,0x61,0x8b,0x1a,0x8c,0x0c,0xfc,0xd2,0x7e,0x0b,0x1e,0x18,0xd2,0x95,0xa5,0x4c,0x5b,0xd6,0x9d,0x40,0x8b,0xc0,0x51,0xe8,0x2d,0xe5,0x16,0xbf,0xd7,0x98,0x8a,0xa0,0x46,0x1f,0xc4,0xe9,0x12,0x31,0x40,0xc5,0x2d,0x59,0xf8,0x9b,0x5f,0xe3,0x3a,0x10,0xdf,0xda,0x72,0x9e,0xab,0x13,0x7b,0x8f,0xc8,0x52,0x9f,0x58,0x45 +.byte 0x7a,0xe6,0x3a,0xbb,0xdd,0x1d,0xc7,0x3b,0xc4,0x26,0xdc,0x99,0x29,0xf2,0x74,0x16,0x84,0xe9,0x8a,0x86,0xc0,0x1e,0x49,0x96,0x2f,0x5c,0x2a,0x49,0x71,0x88,0xe6,0x82,0xb2,0x18,0x88,0xc1,0x86,0xcb,0x26,0x3c,0xa5,0x50,0x31,0x22,0x9a,0x8f,0x45,0x2b,0xde,0xf0,0x86,0x8e,0x13,0x86,0xc4,0x4a,0x9b,0x35,0x27,0x93,0x0b,0x13,0xc8,0xef +.byte 0x96,0x74,0x97,0x85,0x09,0xc0,0xa0,0x32,0xfe,0xc3,0xe3,0x92,0x2e,0xe8,0x54,0xbd,0xc2,0x23,0xeb,0x4b,0x02,0xf5,0x5a,0x0b,0x0d,0x58,0x50,0x45,0xe7,0x01,0xd4,0x17,0x00,0xdb,0x0d,0xd4,0x2e,0xa0,0xde,0x38,0xf4,0xb1,0x1e,0xd0,0xf0,0xa3,0x6b,0x21,0x0c,0xbd,0xae,0x84,0x7e,0x42,0x36,0x4f,0x2e,0x46,0xae,0x23,0x91,0xb9,0x06,0xac +.byte 0x86,0x7f,0x29,0xca,0xfb,0xe9,0xde,0xdb,0x90,0xfe,0x6f,0xbc,0xdb,0x3c,0x48,0x3d,0x6e,0x06,0x68,0x49,0xbb,0x43,0x8d,0x9d,0xc4,0x5f,0x45,0xcb,0x77,0x28,0xe0,0x35,0xd1,0xb4,0x25,0xb2,0x45,0x6d,0xb4,0x89,0x53,0x26,0x33,0x98,0x83,0x45,0x9d,0xf5,0xad,0xf9,0xa7,0x59,0xb6,0x6e,0xa8,0x25,0xa5,0xef,0xee,0xf6,0x6a,0xd5,0x6c,0x60 +.byte 0x9a,0xea,0x78,0x9e,0xe4,0xa2,0x29,0x0b,0x70,0xb3,0x6e,0x3a,0xfd,0x07,0xc7,0x7f,0x1b,0x07,0xc7,0xca,0x1b,0xb8,0x08,0xe1,0xc9,0x94,0xb2,0x62,0x7c,0x04,0x96,0xa6,0xda,0x65,0x28,0xfd,0xf9,0x70,0x22,0xb7,0x21,0xd3,0xa6,0x38,0x0f,0x1e,0x88,0x7e,0x73,0xec,0x04,0x99,0x8b,0x23,0x91,0x13,0xe6,0x4f,0x74,0x81,0xcc,0x1f,0xdd,0xaf +.byte 0x58,0xc4,0x80,0x00,0x4d,0x1d,0xbe,0x84,0x7d,0xfe,0x85,0xe7,0x77,0x20,0x3c,0x65,0x4e,0x0e,0x2e,0x5d,0xc1,0xd9,0xcb,0xf7,0xbb,0xc8,0x8d,0xbf,0x16,0xa8,0x1e,0x63,0xf5,0x10,0x5e,0xa5,0x9c,0x63,0xb6,0x9a,0xeb,0x98,0xa8,0xb1,0x59,0x82,0x66,0x51,0xae,0x3c,0xfc,0xa8,0x11,0x92,0xf4,0x45,0x88,0x7c,0x03,0x6f,0xe6,0x87,0xe4,0xa8 +.byte 0x79,0xbf,0xb3,0x0d,0xd6,0x0b,0x8d,0xa3,0x16,0x2a,0xfb,0x79,0xb9,0xe7,0xdb,0xa7,0xdb,0x94,0xd3,0xe6,0x3a,0xdd,0xe9,0x5f,0x30,0x7d,0x68,0x90,0x35,0xfd,0x18,0x91,0x8e,0xc5,0x12,0xd6,0xf9,0x98,0xa0,0x5b,0xcd,0x81,0x76,0x84,0x08,0xd0,0xab,0x59,0x2d,0x3b,0x8a,0xf9,0xd9,0x95,0xde,0x8b,0xbb,0x92,0xef,0x35,0xc3,0x3e,0x46,0x73 +.byte 0xf3,0x3b,0x09,0xbf,0x22,0x2b,0x9c,0x0f,0x70,0x9a,0x16,0x0e,0x4b,0xa7,0x1a,0x96,0x98,0xb7,0x5a,0x40,0x06,0x81,0xf4,0xac,0xa6,0xe6,0xab,0xf2,0xda,0x87,0x18,0x61,0xcb,0xc1,0x67,0xbd,0x2f,0x6f,0x06,0x21,0xaf,0x73,0x98,0xe1,0x3f,0x7a,0x17,0x7f,0x44,0xcb,0x1d,0xdd,0x60,0xb3,0x2c,0x58,0x20,0x8a,0x04,0x74,0x56,0x9b,0x26,0x51 +.byte 0x61,0xb0,0x07,0x50,0x53,0x83,0x31,0x42,0x59,0xb3,0x33,0xfa,0xfe,0xbc,0xad,0x7f,0x99,0x9b,0x86,0xf1,0xaa,0x85,0xf1,0xbb,0xc0,0x0c,0x91,0x8d,0x1a,0x0f,0x8f,0x9f,0xfe,0x62,0x2b,0x35,0xae,0xcc,0x8c,0x09,0xe3,0x29,0x96,0xd1,0xbe,0x7f,0x25,0xd6,0x03,0xf0,0x4c,0x53,0xad,0x5b,0x56,0x66,0x68,0x9a,0xa3,0xc4,0x07,0x71,0xde,0x49 +.byte 0x82,0xbb,0xf7,0x9a,0x2b,0x96,0xcf,0x50,0xf6,0x00,0xf7,0x0b,0x27,0xdd,0xf5,0xf6,0xc5,0xc8,0xbd,0x2a,0xa2,0x06,0x2c,0x42,0x3f,0xa0,0xf8,0xcc,0x1d,0x64,0xcf,0xbc,0xb4,0xc4,0x63,0xde,0x6b,0xd3,0xb4,0x61,0xdf,0xbd,0x73,0x50,0x34,0xc3,0x20,0x45,0x06,0x73,0x9b,0xf0,0xfb,0xa6,0x2b,0xec,0x92,0x32,0xa9,0x1f,0x4f,0x1e,0x38,0x78 +.byte 0x2a,0xd2,0x7c,0x1d,0x89,0xf9,0x70,0xbc,0xef,0x09,0x77,0xd3,0x6a,0x56,0xa1,0x8b,0x4b,0x23,0x1b,0xb1,0x2f,0xec,0x84,0xe5,0x59,0xc5,0x20,0x23,0xbc,0x3f,0x0a,0x43,0x97,0x1c,0x5e,0xf7,0xee,0xfe,0x0b,0x2a,0x42,0x08,0x2a,0x39,0x91,0xce,0x8a,0x33,0x9f,0x63,0x77,0x6d,0xf6,0xf3,0x0e,0x1d,0xb3,0xfb,0xcf,0x2f,0x7f,0x95,0xc2,0x71 +.byte 0x1c,0xa0,0x0b,0xc6,0xb8,0xde,0x4d,0xd8,0xcc,0x4c,0x4f,0xaf,0x07,0x87,0x6d,0x3b,0xab,0x95,0xab,0xa1,0x6a,0x50,0x9f,0x7c,0x35,0xb6,0x65,0xdd,0xe3,0x06,0xe5,0xb3,0x42,0x5f,0x4d,0xe5,0x3e,0xfa,0x6c,0xdf,0x19,0x58,0xd1,0xf6,0xc6,0x94,0x1c,0xce,0x30,0x90,0xd3,0xeb,0xa3,0x7c,0xe5,0x3f,0x57,0x99,0x2e,0x22,0x0a,0x94,0x2f,0xfe +.byte 0x39,0x16,0xe6,0xfa,0xd0,0xb5,0xf9,0xb4,0x88,0x61,0xa4,0xa8,0xc3,0xb8,0xb7,0x52,0xaf,0x90,0xc1,0xe0,0x19,0x78,0x04,0x2b,0x71,0x04,0x03,0x2f,0x63,0xbe,0x40,0xf5,0x82,0x3b,0x1b,0x6b,0xde,0x6d,0x1e,0x86,0x87,0x82,0xc3,0x31,0x97,0x20,0xdd,0xdd,0xce,0x61,0x64,0x99,0xf6,0xbe,0xbf,0xec,0x37,0x54,0x8b,0x92,0x29,0xda,0xc5,0x7b +.byte 0x4d,0xc5,0xaf,0xb8,0x4e,0x4b,0x4a,0x2b,0x35,0x30,0xf5,0x19,0x9e,0x32,0xd8,0x2e,0xc1,0x19,0xfe,0xd1,0x61,0xb0,0xaa,0x05,0x58,0x15,0xd9,0x0e,0x4e,0xca,0x4e,0x10,0x83,0xe6,0xe6,0x57,0xe8,0x8d,0x13,0xb4,0x6f,0x85,0x59,0xf2,0x83,0xc8,0x37,0xaa,0xa2,0xe5,0xc8,0x77,0x06,0x82,0x21,0x5d,0x84,0x58,0x67,0x9b,0xcc,0x9c,0xfc,0x1b +.byte 0x28,0x2f,0xac,0xc8,0x96,0x91,0x26,0x46,0x42,0x2b,0x68,0x57,0xb0,0x79,0x1e,0xb1,0x9b,0x92,0x2c,0xeb,0x67,0x00,0xd4,0x26,0x7d,0xca,0x45,0x97,0x55,0xea,0x2a,0x20,0x70,0x7c,0x20,0x14,0x38,0x40,0x3d,0x4f,0xf5,0x3a,0x1f,0x0a,0xe3,0x9a,0x48,0xcc,0xb2,0x7d,0xee,0x5b,0x48,0x90,0x0d,0x12,0x77,0xd8,0xd3,0xb6,0xd7,0x66,0x9e,0x48 +.byte 0xbb,0x92,0xc1,0x7c,0x4e,0x90,0x4d,0xd5,0x96,0x99,0xea,0x86,0x2d,0xb9,0x5a,0x50,0x05,0xc2,0x6b,0xa7,0x0c,0x43,0x44,0x22,0x09,0xb9,0xc0,0x56,0x47,0x5f,0xdf,0xaf,0x6b,0x91,0xe2,0xd7,0x45,0x77,0x17,0x7a,0x71,0x6d,0x27,0x93,0xe2,0xc6,0x10,0x2f,0xc8,0x3b,0x75,0x78,0x11,0xae,0x07,0xe6,0xba,0x64,0xd4,0x06,0xfa,0xf9,0x1d,0x74 +.byte 0x9e,0x4f,0x6d,0x02,0xfc,0x40,0x80,0x9a,0x2e,0xd4,0x15,0x32,0x15,0xe8,0x97,0x0a,0xd4,0x65,0x6a,0x87,0xd3,0x66,0x4b,0xb8,0x66,0x84,0x8e,0xb9,0x4b,0xa7,0xcf,0x58,0x13,0x66,0x3a,0x4e,0xa5,0x76,0x17,0x13,0x92,0x79,0x42,0x67,0x6d,0xb6,0x65,0xec,0xc8,0xb5,0x5f,0x17,0x2a,0x2d,0x4b,0x19,0xe9,0x00,0x6e,0x38,0xaf,0xe9,0x06,0xb6 +.byte 0xe8,0x99,0x69,0x8a,0x74,0xe7,0x7e,0x70,0x69,0x4b,0xbc,0xce,0x5d,0x61,0x94,0x1b,0x47,0x41,0x38,0x5f,0x2e,0xcf,0x2b,0xe1,0xcd,0xa3,0x98,0x71,0xf7,0x09,0x65,0xfe,0x5f,0x62,0x4b,0x9e,0x91,0x88,0x35,0xa2,0x66,0x02,0x1d,0xc9,0x93,0x0c,0x19,0x50,0x4b,0x95,0x71,0x79,0xdd,0x74,0xe1,0xda,0x5a,0xb7,0x38,0x70,0x61,0x18,0x3f,0x68 +.byte 0x08,0x34,0xd8,0xfe,0xbb,0xd1,0xbf,0x57,0xed,0xc2,0x52,0x6d,0x54,0x3e,0xcb,0x0c,0x32,0xc7,0x09,0xa9,0x31,0x10,0xe8,0xbd,0x70,0xe3,0x0e,0xe9,0x4f,0x7a,0xd6,0x42,0x45,0x2e,0x1b,0x3c,0x0d,0x15,0x6d,0xb4,0xad,0xe9,0xc5,0xa2,0x12,0x77,0x34,0x43,0x20,0x95,0xc1,0xb7,0x51,0x72,0xed,0x78,0xa0,0xae,0x3c,0xae,0xb4,0xd4,0xda,0x58 +.byte 0x83,0x62,0xa9,0xc6,0x01,0x3d,0x14,0x19,0x07,0x00,0x3c,0x82,0x16,0x7e,0x8a,0x91,0x78,0xa1,0x65,0x0b,0x5b,0x3a,0x40,0x72,0xe5,0xf0,0xd4,0x82,0x04,0xe4,0x01,0xf1,0x84,0x87,0x96,0x26,0x91,0x66,0x77,0xf7,0x59,0xd6,0xc2,0xca,0x29,0x3b,0x68,0x2a,0x27,0x99,0x64,0x86,0xc2,0x96,0xbf,0x11,0x3c,0xa8,0x0c,0xf7,0x86,0xb8,0xc1,0x40 +.byte 0x15,0x1a,0x84,0xe3,0x93,0x23,0x73,0xa9,0x8b,0xbd,0xb4,0x8a,0xe4,0xf1,0xa5,0x8f,0x56,0xa3,0xdc,0x77,0xbd,0x7d,0x15,0x74,0x2b,0x18,0x92,0x56,0x45,0xbc,0xaf,0xf2,0x55,0xce,0x9d,0xc2,0xab,0x39,0x90,0xec,0x78,0x3f,0xa5,0x14,0xeb,0x40,0x2f,0x01,0xca,0xeb,0xad,0x73,0x85,0xbc,0xe1,0x91,0xaa,0x77,0xa9,0x6c,0x02,0x66,0x6a,0x65 +.byte 0x63,0x6c,0x50,0x62,0x83,0x83,0xef,0x16,0x4f,0x21,0xfd,0x28,0x8e,0x52,0x66,0x5b,0x6f,0x8f,0xbe,0x8d,0x17,0xb9,0xd5,0x99,0xf7,0x39,0xd1,0xbc,0xa2,0x43,0xd7,0x0a,0x80,0xea,0x42,0xf8,0x38,0x53,0x95,0x07,0x6f,0xb7,0x7c,0xc1,0x16,0x88,0xc8,0xb7,0x59,0xde,0x76,0x51,0x2f,0x92,0xd0,0x40,0xfd,0xd9,0x2d,0xca,0x9e,0x8d,0x28,0xae +.byte 0x48,0xc1,0x0a,0xe0,0x76,0x9c,0x02,0x0b,0xc5,0xd1,0xf9,0x83,0x90,0x86,0xa4,0xeb,0x5c,0x64,0x65,0xf8,0x98,0x38,0xc5,0xce,0xef,0x6f,0xc3,0x88,0xb6,0x2f,0x8a,0x40,0x55,0x52,0x47,0x06,0x75,0x16,0x46,0x9c,0xff,0x3c,0x68,0x97,0xc3,0xfb,0x10,0x11,0x7b,0xba,0x04,0xcc,0xad,0xba,0xcf,0xf0,0xae,0xba,0xe6,0x59,0x9c,0xf5,0x27,0xeb +.byte 0xdd,0x5c,0x86,0x25,0xa1,0xb6,0xb8,0x1c,0x94,0x98,0xa5,0x79,0x82,0x4e,0xdf,0x09,0x3f,0x2f,0x8a,0x4e,0x1b,0x5a,0xab,0xd4,0xe6,0x21,0xb3,0x02,0x19,0x39,0xa9,0x2e,0x0e,0xae,0x86,0x30,0xc7,0xa0,0x00,0xed,0x72,0xdc,0x71,0x77,0x42,0x76,0x54,0x68,0xb2,0x8d,0x5d,0xc3,0x5c,0x86,0xf8,0xb1,0x6c,0x67,0xdf,0x24,0x40,0x6a,0x2b,0x1d +.byte 0xbc,0x0d,0x25,0x7d,0x9e,0x1c,0xbd,0x18,0x85,0xda,0x7a,0x86,0x5e,0xed,0x10,0x80,0x83,0xa6,0xef,0x1e,0x93,0xac,0xce,0xe6,0x32,0x35,0xdf,0xb8,0xc7,0x9b,0xf0,0x0f,0x9d,0x37,0xbd,0xd9,0x58,0x33,0x19,0xa1,0x23,0x51,0x5f,0xa7,0x5a,0x99,0x7e,0x2a,0xfd,0x85,0x3c,0x26,0xad,0xcc,0x7e,0x07,0x32,0x7b,0x24,0x5a,0x6b,0x4b,0x71,0x4e +.byte 0xca,0x8b,0xc4,0x03,0x26,0x76,0x02,0x68,0x0d,0xa1,0x09,0xe0,0x2e,0xa4,0x82,0x88,0x05,0x5a,0xc4,0xcb,0x31,0x9d,0x56,0xda,0x0d,0x00,0x04,0xbc,0x07,0xca,0x1f,0xdf,0x9e,0x44,0xed,0x36,0xbd,0xa0,0x22,0xff,0x78,0xd1,0xcb,0x62,0xe0,0x0d,0x2e,0xdc,0x2e,0x36,0x28,0x8e,0xd3,0xa9,0xe0,0x38,0xd4,0xc5,0x2b,0xee,0xaf,0xa4,0x08,0x7d +.byte 0xed,0x2c,0x8a,0xf5,0x86,0x5e,0xed,0x2a,0x0d,0xbf,0xe6,0xfb,0x6f,0xc4,0x02,0x75,0x36,0xe5,0x7b,0xe9,0x4a,0xb3,0xf1,0xf4,0x86,0x6c,0x9a,0x6e,0xaa,0x7a,0xbe,0x4b,0xd6,0xf2,0x6b,0xcb,0x78,0x6f,0xf9,0x42,0x1a,0x19,0x7b,0x7e,0xba,0x59,0x02,0x8b,0xe3,0x5c,0x44,0xa4,0x84,0xa8,0x4a,0x67,0x93,0xee,0xc4,0x17,0x07,0x26,0xfe,0x86 +.byte 0xf1,0xc6,0xba,0xbf,0xc4,0x3d,0x33,0x41,0x4d,0xc4,0xf0,0xa8,0x6d,0xe1,0x06,0x16,0x2d,0xc9,0x5d,0x2a,0xf5,0x4a,0xc6,0xd2,0x8c,0x98,0x55,0xe8,0x8d,0xd0,0x31,0x5f,0xc7,0x05,0xd1,0xca,0xd2,0x72,0xe6,0xd0,0xcb,0x62,0x79,0xac,0x60,0x59,0x94,0x59,0x48,0x9e,0x91,0x17,0xa7,0xa0,0xac,0x4a,0xe5,0x08,0xe5,0x52,0xa4,0xd4,0x83,0x8c +.byte 0x83,0x57,0xe7,0xe5,0xfc,0x9b,0x43,0x78,0xc8,0x7e,0x94,0xc4,0x35,0x3e,0xac,0x4a,0x8d,0x60,0x80,0xdc,0x72,0xe3,0x15,0x09,0x2a,0xbd,0xcc,0x9a,0xe4,0x1a,0x18,0xa8,0xf1,0x29,0x9b,0xca,0x58,0x0b,0x6d,0x7b,0x33,0x91,0x05,0x27,0x6a,0x48,0xbe,0xac,0x08,0xa5,0x2a,0x64,0xf5,0xae,0x2a,0x90,0xf1,0x2d,0x3f,0xa8,0xff,0x17,0x92,0xc4 +.byte 0xec,0x3a,0x09,0xbf,0xae,0xd3,0xe2,0x1c,0x3c,0xc8,0x6f,0x91,0x72,0x99,0xe3,0x82,0x30,0x4f,0x40,0x5c,0x0c,0x8d,0xfd,0xbe,0x10,0xbc,0xce,0x1e,0x0a,0x09,0xbf,0xde,0xdc,0x72,0x7e,0x4c,0xbc,0xec,0x34,0xe2,0x96,0x8a,0xc6,0xee,0x19,0x6c,0xa8,0xf1,0xa5,0xb2,0x71,0x88,0x13,0xe8,0x11,0xda,0x3b,0x77,0x10,0x9c,0x9f,0x74,0x49,0x21 +.byte 0x16,0xcf,0x6f,0x05,0xc5,0xc1,0x4d,0xfe,0xe7,0x4d,0x67,0xe8,0x12,0x14,0xf7,0xaf,0x66,0x8d,0x55,0x34,0x00,0x18,0x10,0x6e,0x6a,0xd2,0x4c,0xd9,0xd3,0x15,0x40,0xbf,0xce,0x7b,0x10,0x69,0xbd,0x15,0x0e,0x60,0x2b,0x76,0x50,0x80,0x92,0x02,0x3c,0x0f,0xea,0x47,0x03,0xd9,0xf6,0x2c,0x00,0xde,0x29,0xb9,0x2e,0xf6,0x80,0x10,0x81,0x28 +.byte 0x6f,0x41,0xfc,0x88,0x65,0xe9,0xb5,0xd4,0x78,0x53,0xff,0x04,0xc4,0xdd,0xd7,0x35,0x34,0x59,0x85,0x33,0x01,0x33,0x67,0xe1,0x4e,0xc2,0xac,0xe6,0x24,0x24,0xb6,0x83,0x48,0x08,0x0c,0x73,0xe5,0x9c,0x98,0xe4,0x4c,0x3c,0x1f,0x6e,0x77,0xea,0x8c,0x76,0x23,0xbb,0x41,0x5e,0xc1,0x8a,0xba,0x3e,0xe5,0x3e,0x86,0x89,0xab,0x32,0x65,0x1b +.byte 0x00,0x92,0x56,0xe0,0x62,0xc1,0x8f,0xeb,0x15,0x7f,0x86,0xdf,0xa2,0xc2,0x8d,0xf5,0xb5,0x88,0x72,0x8c,0xba,0x92,0x30,0x53,0x58,0x3e,0x0b,0xe6,0x4f,0xd4,0xef,0x34,0xab,0xbb,0x61,0xe0,0x31,0x3c,0xe7,0xb2,0x5f,0x64,0xcb,0x52,0xc7,0x1d,0x95,0x96,0xd2,0x8c,0x87,0x34,0x92,0xf2,0xad,0xd9,0x78,0x1d,0xa1,0x67,0x58,0xfa,0xfb,0x06 +.byte 0xc8,0x7f,0x9e,0xf7,0x02,0x12,0xd9,0x8c,0x68,0xbc,0x2b,0xd3,0xe1,0x0e,0x1e,0xbd,0x33,0x7a,0xfd,0x03,0x41,0xb9,0x72,0x2e,0x63,0xfe,0xb1,0x39,0xc3,0x0f,0xa0,0xa9,0x76,0x4f,0x7b,0xab,0xae,0xda,0x22,0xec,0x83,0x32,0xb0,0xec,0xd1,0xfd,0xc2,0x28,0x1e,0x42,0x29,0x31,0xd5,0xb3,0x33,0xcd,0x13,0x1d,0x9f,0xac,0x73,0x27,0xf7,0xea +.byte 0xc6,0x66,0xd2,0x32,0x91,0x60,0x35,0xf4,0x28,0x34,0x43,0x6a,0x74,0x8c,0x05,0x2a,0x84,0x34,0xfd,0x84,0xa5,0xcb,0x1d,0x2b,0x41,0x28,0xa6,0x19,0xed,0xcd,0xad,0xea,0x6e,0xf7,0x14,0x18,0xac,0x56,0x9a,0xf5,0xaa,0x7d,0x4e,0x8a,0x99,0xd1,0xda,0x41,0xaf,0xe8,0xfc,0xef,0x66,0x88,0xd0,0xed,0xfd,0xae,0x2a,0x85,0xc0,0x60,0xa2,0x30 +.byte 0x5d,0x1b,0x48,0xf6,0x3e,0xcf,0x56,0xdf,0x53,0xdc,0x2d,0xf5,0xfd,0x7f,0x2a,0x2a,0x4d,0x4f,0x11,0xcc,0xea,0x72,0xdb,0xb9,0xeb,0x92,0x0e,0x9f,0xc1,0x26,0xe9,0xbf,0x25,0x6a,0x27,0xe1,0x63,0x9b,0xdd,0x62,0x38,0xad,0xd3,0xb2,0x75,0x62,0x45,0xbf,0xbf,0xf4,0xe2,0xd6,0x97,0xe9,0xeb,0xeb,0x98,0xab,0x73,0xdc,0x8a,0xde,0xaa,0x3b +.byte 0x69,0xfd,0x61,0x6f,0xbb,0xfc,0x28,0xc0,0xff,0x37,0x2e,0xeb,0x31,0x59,0x57,0xfb,0xd3,0x0e,0xed,0x01,0x66,0x50,0x63,0x53,0xa2,0xd1,0x24,0x8c,0xc8,0x8d,0x80,0x03,0x2a,0x1e,0x11,0x3a,0xb9,0x6c,0xf4,0x5f,0x58,0xa2,0xd6,0x58,0x6b,0x85,0x61,0xd1,0xe7,0xdc,0x90,0x07,0x34,0x6e,0xb9,0x0b,0x0d,0xcb,0xd5,0xe3,0xc6,0x9d,0xb8,0x51 +.byte 0x37,0x61,0xd0,0x6c,0x2e,0xed,0xe0,0xbc,0x55,0x74,0x63,0x1b,0x42,0x17,0x6a,0x9c,0x91,0x1b,0x96,0x76,0xc8,0xe4,0x2b,0x2e,0x90,0xd9,0xe5,0x3f,0x56,0x1b,0x2f,0x93,0x81,0x86,0x2a,0xb4,0xdf,0x93,0xcb,0xfa,0x01,0x85,0xd9,0x26,0x46,0x46,0x97,0x2a,0x2e,0xb3,0x91,0xe4,0xcf,0xd9,0x01,0x5a,0x37,0xa6,0xca,0x5e,0xed,0xa9,0x94,0x35 +.byte 0x2c,0x69,0x5b,0x1e,0xf8,0x38,0x61,0x41,0x10,0xf6,0xe9,0x6e,0x96,0xee,0xe6,0x5f,0x78,0x14,0x93,0x12,0xd2,0x57,0xe5,0xf4,0x58,0x46,0xca,0xc8,0x75,0x59,0xbd,0xd0,0xe4,0x70,0x35,0xa5,0x4a,0xfd,0x54,0xe2,0x91,0x76,0x0e,0xe6,0xe3,0xbb,0x31,0x65,0x4b,0x18,0xa8,0xb4,0xfa,0xa6,0x7d,0x7a,0xa9,0x47,0x3d,0x2b,0x2e,0x66,0xac,0x5b +.byte 0x3e,0x5e,0x8c,0x27,0x0c,0x33,0x04,0x03,0x4e,0x5f,0xcd,0x6b,0x9c,0xaa,0x13,0x83,0x38,0xe9,0x38,0xcf,0x03,0x70,0x5a,0x0f,0x18,0xf5,0xec,0x64,0xf3,0x0c,0xe8,0xb1,0xa9,0x07,0x70,0xf7,0xde,0x0c,0x35,0xf5,0xe2,0xcd,0xed,0xe6,0x4d,0xac,0x5c,0x4d,0x3e,0x03,0x96,0x90,0x7b,0x4c,0x3e,0x18,0x42,0xc0,0xa7,0x23,0x12,0x8e,0x54,0xc1 +.byte 0xa1,0x2f,0x82,0x13,0xe6,0x1f,0x74,0xae,0x7b,0x4a,0xa4,0xbb,0xdc,0xc0,0x68,0x0f,0x83,0xbc,0xda,0xce,0xa2,0xe7,0xbe,0x18,0xcd,0x8b,0x35,0x05,0xa3,0x4b,0x6f,0xf0,0x53,0x12,0x42,0x2f,0x3c,0x09,0x87,0xb7,0xe3,0x36,0x29,0xe1,0xa2,0xb6,0x60,0x05,0xb9,0x66,0x80,0xe9,0xec,0x40,0x2a,0x55,0x78,0x5f,0x1c,0x5f,0xc3,0xc7,0x49,0x69 +.byte 0x87,0x97,0x5f,0xa5,0x31,0xa8,0x83,0x66,0x5a,0xd7,0xaf,0xf0,0x15,0xf3,0x01,0x62,0x9a,0x88,0x76,0x0f,0xb3,0xdf,0xf1,0xc6,0x34,0xc3,0xac,0x68,0x60,0x9a,0x91,0x03,0x13,0xea,0x0e,0x36,0x9c,0xf5,0x51,0xb7,0x0c,0xa4,0xeb,0xf0,0x41,0x85,0x54,0x05,0xed,0x7a,0xc2,0xba,0x3b,0xb8,0x1c,0x41,0x0d,0xbb,0xad,0x16,0x7e,0x64,0x4f,0x88 +.byte 0x7a,0x17,0xae,0x76,0x55,0x78,0x93,0xe8,0x99,0xa1,0x70,0x1f,0xf6,0x8a,0xb9,0xeb,0x41,0xb9,0x08,0xb8,0x9d,0x78,0x57,0xa1,0xe1,0x23,0xa0,0x03,0xd3,0x16,0xbc,0x16,0x24,0xed,0xc5,0x12,0x16,0x0a,0x8a,0x23,0x11,0x22,0xc2,0xfe,0x49,0x9d,0x3d,0x10,0x3d,0x4b,0xeb,0xab,0xcb,0x21,0x9d,0x9d,0xb1,0x64,0x87,0xe5,0x4d,0xb9,0xe7,0x10 +.byte 0x05,0xa0,0x55,0x2f,0xdf,0x53,0x5e,0x03,0xec,0x7e,0xe4,0x1f,0x9b,0x16,0x0c,0xfc,0xd9,0xf9,0x66,0x39,0x93,0x9e,0x49,0x34,0x97,0xd6,0xa5,0x56,0x00,0xf1,0xaf,0x08,0xeb,0x58,0xcf,0x87,0x02,0xc4,0xf1,0x24,0xe8,0x29,0x83,0xc9,0x5d,0x56,0x68,0xa2,0xaa,0xba,0xb3,0x86,0x23,0x59,0x8d,0x32,0x96,0x4a,0xbb,0xe9,0xf2,0x53,0xb2,0x87 +.byte 0x4a,0xf5,0xdc,0x23,0xd4,0x2f,0x36,0x70,0xb5,0x1d,0xee,0x47,0x51,0x6c,0x35,0x2a,0xad,0x35,0x74,0x1b,0x98,0xb5,0x33,0x2c,0x6d,0x4c,0xf8,0x39,0x07,0x92,0x6c,0xc7,0x65,0x10,0x64,0xcd,0x53,0xa3,0xcb,0xcc,0xe4,0xb2,0x46,0xb3,0xb7,0x44,0x01,0x92,0x44,0x12,0x23,0x25,0x3e,0x00,0xe3,0xeb,0x5f,0xe5,0x76,0x48,0x4e,0x4a,0x7f,0x36 +.byte 0xf0,0x0b,0x5e,0xc0,0x97,0x0d,0xc8,0xcf,0xd5,0xb8,0xc0,0x11,0x8d,0xb9,0x1e,0x31,0x0f,0x84,0x36,0x2e,0xe0,0x42,0xe6,0x02,0x9d,0xa4,0xdb,0xa2,0x76,0xfd,0xa1,0x95,0xe0,0x49,0xe6,0xf1,0xd2,0xae,0x27,0x6b,0x11,0x05,0x47,0xb0,0xaa,0x61,0x01,0xd4,0xe6,0xcd,0x9d,0x7e,0x33,0x5d,0xec,0x22,0x96,0x59,0xb7,0xc5,0x50,0x83,0xa4,0x66 +.byte 0x56,0xc7,0x43,0xa6,0xf7,0x5d,0xb2,0x45,0xc0,0x96,0xa0,0x5b,0xb8,0xed,0xae,0x29,0xb3,0x7d,0xbd,0x01,0xde,0xc0,0xe7,0xcc,0xe9,0x55,0x32,0x32,0xbf,0xdd,0x03,0x1b,0xb0,0x4e,0xff,0x53,0x1f,0x4b,0xc6,0xec,0x16,0x9d,0x5b,0x78,0x74,0xc4,0x75,0x51,0x8a,0x1c,0xae,0x6b,0xcd,0x9c,0x77,0x47,0xbf,0xd1,0x38,0x3e,0x9e,0xc0,0xad,0x16 +.byte 0xb7,0x15,0x6b,0xdc,0xad,0xe9,0x13,0xbc,0x48,0xc1,0xaf,0x69,0xce,0xc4,0xcc,0x9b,0x73,0xf9,0xd5,0x7c,0xab,0xf0,0xf1,0x9b,0xea,0xc6,0x0b,0x19,0x47,0x42,0xc1,0xa0,0x02,0x64,0x17,0xce,0x88,0x4f,0x16,0xa6,0xed,0xdb,0xfe,0x61,0xd3,0xd6,0xc0,0x11,0x30,0x16,0xd2,0x45,0xb3,0x7e,0x52,0xd0,0x94,0x77,0xf0,0x0e,0xbf,0x16,0xc0,0x4a +.byte 0x2a,0x5c,0xac,0x55,0x57,0xb1,0x41,0xb6,0xa3,0x68,0x8c,0x0a,0x66,0x15,0xb4,0xf5,0xd9,0x9a,0xa9,0x68,0xf2,0xbc,0x06,0xc5,0x7c,0xd1,0x18,0x55,0x9a,0x2d,0x94,0x2e,0x04,0x4b,0x7d,0x3c,0xb1,0xe3,0x03,0x7a,0xa7,0xe3,0xe5,0x63,0x49,0x7c,0x3f,0x0a,0xc5,0xbd,0xd3,0x0f,0x04,0xfd,0x99,0xf7,0xe6,0x05,0x35,0x66,0x17,0x05,0x85,0x3b +.byte 0x98,0x92,0x11,0x26,0xe2,0x21,0x52,0x1b,0x54,0x08,0xc8,0xf0,0x4e,0x75,0x22,0x3f,0xe8,0xb6,0x35,0xa4,0x02,0x52,0x70,0xc2,0xce,0x5a,0x00,0xe2,0xe2,0x92,0x8c,0x97,0xa7,0x1d,0x42,0x52,0x8b,0xf1,0x81,0xa7,0xce,0x60,0x46,0xbe,0xf0,0x1d,0x34,0xdf,0x73,0x2a,0xd6,0x9a,0x2d,0xf9,0xe3,0x91,0x05,0xe4,0x1f,0x31,0x11,0x30,0xb0,0xff +.byte 0x8f,0x61,0x74,0xf4,0xef,0xcd,0xf6,0xa4,0x9a,0xd2,0x5e,0xba,0x27,0xe8,0x78,0x38,0xfc,0x75,0xff,0x3b,0x6c,0xde,0x4a,0x46,0x47,0x8e,0x97,0x28,0xe4,0x23,0xe0,0x10,0x07,0xca,0xcb,0x6d,0xed,0x29,0xc0,0xee,0x98,0x96,0x7c,0x90,0x1f,0x89,0x12,0x0f,0xd5,0x28,0xcf,0x6e,0x4b,0x9b,0x2d,0xb3,0xcd,0x97,0xb8,0xeb,0x58,0x23,0x26,0xb1 +.byte 0xb4,0x95,0x11,0x1e,0xee,0x00,0xde,0x24,0x28,0xa6,0x3f,0x15,0xa2,0x9a,0xcb,0x9d,0xe3,0x04,0x5d,0xc3,0x60,0x97,0x14,0x2c,0x84,0x2b,0x69,0x9c,0x2a,0xbf,0x08,0xba,0xc4,0x38,0x36,0xaa,0x89,0x11,0x32,0x63,0x01,0xa2,0x44,0x5f,0x50,0xf0,0x5b,0x11,0x15,0xc8,0x80,0xc9,0xa6,0xe7,0x5d,0x70,0xa8,0x34,0x42,0x97,0x2a,0x60,0x99,0x20 +.byte 0xa6,0x60,0xc0,0x70,0x8d,0x2f,0x3f,0x8a,0x14,0x80,0x8a,0xbe,0x05,0xb3,0x50,0x16,0xaf,0x32,0xb4,0x35,0x3e,0x1d,0x31,0x42,0xdd,0x50,0xeb,0x04,0x82,0x4c,0x83,0x3d,0x8f,0xb6,0x1e,0xc2,0xa9,0xd2,0x30,0xba,0x33,0xdb,0x97,0x6d,0x2d,0x97,0x59,0x33,0xc0,0xf8,0xa5,0x59,0xc5,0x44,0x9c,0xf1,0x06,0xc4,0xf2,0x31,0x3e,0xff,0xb8,0x12 +.byte 0x00,0x4d,0x6c,0x2d,0xa1,0xc7,0x83,0xea,0x55,0x93,0x0e,0x89,0x76,0xbf,0x56,0x2a,0x99,0x62,0x54,0xad,0x2c,0xe8,0xf0,0xf9,0x70,0x18,0xa5,0x2b,0x24,0xac,0x59,0xc9,0x84,0xe3,0x1a,0x9d,0xa0,0xdb,0x1b,0x7f,0xd5,0x7e,0xb5,0xe0,0x86,0x36,0xc5,0x71,0x6a,0xab,0xdb,0xa5,0x84,0xf1,0x9e,0x9e,0xf6,0x1b,0xab,0x47,0x94,0x38,0x8e,0x5d +.byte 0x55,0xb4,0xf5,0xc3,0x59,0xc2,0x2c,0x6d,0x9d,0x28,0x7d,0x33,0xcd,0xc7,0xd6,0xdf,0x10,0xda,0x7c,0xd0,0x6c,0x91,0x88,0xd6,0x6b,0xe7,0x72,0x75,0x18,0xb1,0x87,0xe4,0xbb,0x10,0xe0,0xa3,0x0f,0xea,0x65,0x0a,0x70,0xc8,0xee,0x52,0x05,0x0a,0x27,0x39,0x66,0xda,0xd6,0xa6,0xfe,0x97,0x24,0x09,0x9d,0x20,0x76,0x4e,0x97,0x9d,0xa9,0x9f +.byte 0x76,0x20,0x27,0x57,0x5b,0xf4,0x76,0x1a,0x4b,0xcf,0x13,0x6c,0x9e,0x63,0x53,0x97,0xca,0x10,0xd6,0x90,0x7d,0xfc,0xe3,0x03,0x2c,0x6c,0x79,0x93,0x1a,0xae,0x0f,0x43,0xdb,0x75,0xde,0x56,0xa6,0x69,0x93,0xce,0x2d,0x94,0x56,0x77,0x90,0x19,0x71,0x7f,0x7a,0x99,0xbd,0x9c,0x79,0x62,0x00,0x49,0x3a,0x62,0x49,0x4b,0x92,0x65,0x8b,0xe2 +.byte 0xa8,0x3d,0xa5,0x89,0x23,0xac,0xea,0xf1,0xbf,0x38,0x84,0xd7,0xe2,0x65,0xb6,0xc7,0xbc,0x02,0x11,0xfd,0xe3,0x4c,0x57,0x38,0xd4,0x36,0x54,0xe8,0xbb,0x63,0x17,0xe9,0xda,0x82,0x50,0xf1,0x8c,0x34,0x4d,0x75,0x2a,0x64,0x49,0xaf,0x98,0xc3,0x1d,0xad,0x31,0xf3,0x90,0x23,0x39,0xf5,0xb5,0xf4,0x37,0x88,0x67,0x12,0x5d,0xfc,0xee,0xe5 +.byte 0x44,0x52,0x2c,0x78,0xb1,0x90,0xc1,0xc2,0x77,0x6e,0x31,0x3e,0xa0,0x36,0x87,0xb0,0xc6,0x6c,0x94,0xc2,0x43,0x4a,0x7b,0xa2,0x73,0xe7,0xa0,0xc3,0x4c,0xaf,0x4f,0xa6,0x92,0x1c,0x9a,0x6d,0xee,0xe8,0x4d,0xe1,0xe0,0xc7,0x67,0xcf,0xcf,0x7d,0x7f,0x0f,0x07,0x0d,0x6c,0x06,0x06,0xc2,0xc9,0x28,0xfc,0x8d,0xcd,0x23,0x01,0x97,0x5b,0x4d +.byte 0x1c,0xdb,0x34,0x51,0x6e,0xe2,0x56,0x24,0xd7,0xbd,0x12,0xc4,0x2f,0xb4,0x3b,0x02,0xaa,0x47,0xda,0x61,0xf6,0xca,0x44,0xa8,0x02,0xbf,0xbc,0x58,0xfb,0xa2,0xff,0xf3,0x54,0x59,0x5f,0xd7,0xa0,0x7c,0x83,0xa6,0xef,0xeb,0x71,0x51,0x74,0xa1,0x27,0x10,0x97,0x13,0x1f,0x42,0x91,0xdd,0xa8,0xf8,0xc7,0x60,0x90,0xca,0x2e,0xc8,0xaf,0x9f +.byte 0x65,0x1f,0x24,0x0a,0x30,0x5f,0xb9,0x4c,0xfb,0xcb,0xa3,0x96,0x5e,0xad,0xab,0xac,0x09,0x91,0xf5,0x96,0x1f,0xe0,0x96,0x14,0xc5,0xa0,0x26,0xa1,0xf1,0x91,0x80,0x38,0x7f,0x38,0xdc,0x98,0x96,0x20,0x46,0x50,0x20,0xd2,0x20,0xce,0x79,0xd5,0x81,0x60,0x97,0xb2,0xb0,0xeb,0x58,0x75,0x3c,0x99,0xf0,0xe0,0xfd,0xfc,0x90,0xc5,0xd1,0x3d +.byte 0x68,0x07,0xfd,0xa1,0x3f,0xeb,0x47,0xd0,0x58,0xe3,0xfa,0xbe,0xbf,0x20,0xdf,0x66,0x08,0x91,0xa4,0x5c,0x52,0x3e,0xdf,0x5c,0xb8,0xee,0xca,0xa6,0x89,0x06,0x97,0xb4,0x8d,0x60,0x35,0xb1,0xff,0x1e,0x39,0xf2,0x67,0xbc,0x71,0xee,0xeb,0x48,0x94,0x19,0x1a,0xee,0xc5,0xe2,0x7e,0x0d,0xf1,0xca,0xe8,0x2c,0xb0,0xaa,0x02,0x58,0x23,0x23 +.byte 0xce,0x37,0x5e,0xcb,0x58,0x40,0x2e,0x1a,0xa6,0x09,0x11,0x95,0xc4,0x6f,0x10,0xb0,0x15,0x22,0x48,0x67,0x74,0x6c,0x2f,0x4f,0x4a,0xb4,0x01,0xe5,0xa3,0x77,0xab,0xad,0xa4,0x04,0x22,0x71,0x58,0x4a,0x71,0xb1,0xe8,0xdf,0x43,0x18,0x0e,0x95,0x7c,0x8c,0x23,0x3a,0xf3,0x9c,0x20,0x60,0x20,0x69,0x51,0x28,0x7e,0x13,0x67,0x5c,0x7d,0x35 +.byte 0xfa,0x1b,0x04,0x8b,0xcf,0x42,0x6e,0x15,0x55,0xcd,0x04,0xdb,0x73,0xdb,0x47,0x5f,0x83,0x6e,0xd1,0x5a,0x15,0xa2,0xbb,0xf7,0xbb,0x84,0x58,0xce,0x75,0xe8,0xd2,0x92,0xd5,0xb7,0x76,0xf2,0x94,0x67,0x27,0x5f,0x32,0x91,0x3a,0xaf,0xd4,0x31,0xf8,0x92,0xce,0x63,0xb7,0x45,0x27,0xb4,0xb8,0x7a,0x1e,0x4e,0xde,0xcb,0xc8,0x5e,0xd3,0xbb +.byte 0x52,0x91,0xd5,0x72,0xad,0x98,0xec,0x07,0xa1,0x56,0xb4,0x8e,0x04,0xfa,0x48,0x3f,0x17,0x07,0xf7,0xef,0x92,0x61,0x69,0xaf,0xdd,0xfc,0x76,0x03,0xe2,0xe9,0xe2,0xbe,0x5c,0xf2,0x8a,0xc5,0x99,0x51,0x7f,0xa4,0xf1,0xac,0x16,0xec,0x16,0xf5,0xb8,0x95,0x88,0x87,0xdb,0x27,0x2e,0x63,0x12,0x31,0x7d,0x6b,0x2b,0xa0,0x9b,0xb5,0xf9,0x82 +.byte 0x42,0x04,0x94,0xee,0x60,0x6e,0x4e,0x54,0x9b,0xfd,0xeb,0x01,0x3a,0xad,0x42,0xeb,0x08,0x3c,0x6a,0xa3,0xf2,0x46,0xfb,0x18,0x59,0x2c,0xa3,0x0b,0x22,0x1d,0x5d,0x47,0xa6,0x8c,0x06,0x9c,0xa1,0xcc,0x20,0x67,0xbd,0xf0,0x5b,0x94,0x9f,0xc6,0x10,0x8c,0xc8,0x15,0x52,0xe3,0x19,0xa1,0x89,0xfd,0x99,0xad,0x4f,0x10,0x51,0x0a,0xe4,0x4b +.byte 0x02,0x7b,0x0d,0x73,0x2d,0xae,0xa4,0x68,0x1d,0xb6,0xcf,0x58,0x67,0xc0,0xd0,0xca,0x11,0x34,0x31,0x9e,0xa3,0xbc,0x12,0x28,0x1e,0x8e,0x5a,0x63,0xf5,0xda,0xf2,0x36,0x94,0x63,0x2c,0x39,0x3d,0xf9,0x80,0x9f,0xbf,0x8d,0xef,0x1f,0x15,0xc8,0xdb,0x62,0x58,0x7d,0xdc,0x0a,0x7f,0x87,0xaf,0x6d,0x2e,0xac,0x92,0x4f,0x51,0xdf,0x5e,0x75 +.byte 0x5e,0x0f,0x7c,0x51,0x49,0x88,0x0f,0x7b,0x49,0xa5,0x7c,0x41,0x4e,0x2a,0x0f,0xd0,0x0f,0x78,0xeb,0x42,0xfc,0x07,0x8a,0x8b,0x4e,0x3e,0xf2,0x42,0xc5,0x21,0x01,0x66,0xe2,0x50,0xf6,0x3d,0x28,0x1e,0xbf,0xdc,0x71,0x7f,0xc5,0x6e,0xc1,0xab,0x1a,0x33,0x49,0xdd,0xa2,0xb9,0x52,0xbe,0x93,0x97,0x97,0x7a,0xf0,0x22,0xa8,0xc5,0x01,0xc6 +.byte 0x76,0x6f,0xb6,0x2c,0x09,0x80,0x62,0x5b,0x84,0x05,0x7f,0x79,0x28,0x04,0x67,0xa2,0x0f,0xfc,0xbb,0x17,0xe2,0x85,0xe3,0xa0,0xf3,0x44,0x47,0x96,0x68,0x80,0xb2,0xbf,0xba,0x63,0x53,0x38,0x6c,0x3b,0xcd,0x3c,0xa4,0x10,0x48,0x80,0xd8,0x49,0x5a,0xf0,0x5c,0x38,0x02,0x02,0x5b,0xf2,0x77,0xa4,0xfd,0x16,0xfd,0x13,0xc8,0x8b,0x9b,0xcd +.byte 0xe1,0x8d,0x70,0xb6,0x3d,0x24,0x65,0xda,0x1a,0x42,0x6f,0x90,0x64,0x9a,0x9b,0xda,0x54,0x44,0xc0,0xe0,0xd7,0xfb,0x73,0x10,0x3c,0xcf,0xa6,0x04,0x99,0xd9,0x45,0xe5,0x74,0xfe,0xdf,0x81,0xac,0xc8,0x30,0xe5,0x66,0x45,0x02,0xca,0xcd,0xd7,0xe6,0x7b,0x0d,0xda,0xe1,0xa0,0xa1,0xa1,0x87,0x34,0x63,0x0b,0xa7,0x82,0x39,0x83,0xba,0x18 +.byte 0x0b,0x16,0x35,0x11,0x53,0x8d,0xbe,0x7d,0xa8,0x7e,0x3f,0xf4,0x71,0xc9,0x37,0x6f,0x1a,0xd9,0x3f,0x8e,0xc4,0xc1,0xd3,0x80,0xdf,0xee,0x0e,0x6b,0x23,0xf7,0xbc,0x42,0x93,0x7a,0x36,0x6f,0x03,0x24,0xb4,0x9c,0x62,0xa0,0xed,0xed,0x0b,0x66,0xa8,0x25,0xe6,0x1a,0xd4,0x13,0xd1,0x16,0x14,0x2b,0x90,0x7d,0x2e,0xa4,0xda,0xb2,0xf9,0x33 +.byte 0x54,0xf9,0x0a,0x04,0x27,0x03,0x14,0xd2,0xd7,0xe2,0xc1,0xaa,0xb6,0xe8,0xe5,0x4c,0xf2,0xdb,0x4c,0xc8,0xb3,0xa4,0xeb,0xbf,0x12,0x5c,0x9d,0x65,0xaa,0x9a,0x66,0x77,0x42,0xb4,0xd5,0x5b,0x1f,0x3b,0xd7,0x91,0x89,0x57,0x2f,0xd0,0x86,0x99,0xb2,0xc8,0xc1,0x31,0xde,0x33,0x43,0x36,0x81,0xdb,0x97,0x7b,0x17,0x3b,0xa5,0x99,0xdb,0x63 +.byte 0x2b,0x48,0x4c,0xa6,0x5c,0x6c,0xd8,0xc9,0x6e,0x72,0x39,0xbe,0x6e,0x55,0x7e,0x9d,0xb7,0x20,0x8d,0x8f,0x81,0x20,0x78,0xae,0xc6,0x1d,0xe0,0x2d,0xb1,0xe7,0x64,0xbb,0xd4,0xc8,0x08,0x61,0x14,0x29,0x08,0xbc,0x1a,0xeb,0xfa,0x64,0x33,0x91,0x7d,0x91,0x41,0x65,0x8e,0x4c,0x0c,0xb2,0x79,0xc3,0x01,0x68,0xfc,0xd6,0xbb,0x50,0xcc,0x07 +.byte 0xa5,0xf6,0x2c,0x5e,0x10,0xd6,0xa3,0x62,0x18,0xec,0xa2,0xf2,0x6b,0xad,0xcd,0x02,0x01,0x75,0xbb,0x36,0x27,0x56,0x0f,0x55,0x03,0xe0,0x57,0xe1,0x72,0xeb,0x66,0x00,0x21,0xff,0x9a,0xbc,0xc1,0x1e,0x2c,0x93,0xe6,0x4d,0x93,0x28,0x10,0x7d,0x67,0x6c,0xf1,0xa4,0xe6,0x3a,0xa6,0x30,0xc8,0x50,0x1d,0x8b,0x6e,0x7b,0x76,0x98,0x14,0x4e +.byte 0xed,0x84,0x67,0x2a,0x5f,0xac,0x0b,0x7b,0x47,0x40,0xb3,0x2d,0x7a,0xc1,0x23,0xdc,0x62,0xf8,0x8e,0x90,0x77,0xd4,0xf9,0x00,0x4b,0x67,0x04,0x72,0xf8,0xc9,0x2c,0x2d,0x0e,0x3c,0x3c,0xf3,0xfc,0xa8,0xe2,0x49,0xa4,0x00,0x82,0x98,0x72,0xa9,0xec,0xea,0xbd,0x3a,0x4e,0xd7,0x32,0xf1,0x11,0xf0,0x0d,0x9e,0xa2,0xe8,0xfe,0xcc,0x67,0xec +.byte 0xfc,0xd6,0xfe,0x83,0x5e,0x7c,0x2b,0xb3,0x42,0xf4,0x2d,0x9a,0xbe,0x20,0xd1,0x81,0x62,0xe9,0x59,0x19,0x28,0xdf,0x97,0x10,0x54,0xf7,0xde,0x60,0x51,0x6a,0xce,0x32,0x03,0x75,0x5c,0x25,0x25,0x82,0x9c,0x07,0xf7,0x2d,0xa8,0x1b,0x9f,0xd3,0x32,0x46,0x25,0x1f,0xb1,0xc5,0xbb,0x28,0x14,0x3e,0xed,0xa8,0x83,0x20,0xf4,0x9c,0x75,0xf4 +.byte 0xe6,0xc4,0x2d,0x05,0x88,0x31,0xfd,0x48,0xca,0x6c,0x7f,0xab,0xb4,0x77,0x93,0x1d,0x87,0xc3,0x4e,0xb8,0xad,0xb4,0x3d,0x37,0x7a,0xd2,0x77,0xff,0xc2,0xcb,0x9c,0xc7,0xbf,0x02,0x02,0x70,0xc9,0x9f,0x77,0x8a,0x7d,0xa7,0x9a,0x10,0xd1,0x0e,0xb7,0xec,0x61,0xee,0x77,0x24,0xe9,0x3d,0xcd,0x12,0xca,0xee,0x50,0xb0,0x27,0x5d,0xe5,0xac +.byte 0xa3,0x92,0xc7,0xd0,0x23,0x54,0xb1,0xe5,0x50,0xc3,0x15,0xd7,0x66,0x32,0x38,0x34,0xb1,0x59,0x1b,0xc3,0x59,0xe8,0xad,0x59,0x90,0x58,0x6e,0x02,0x40,0xb1,0x51,0x65,0x78,0x25,0x26,0x01,0xdd,0xcf,0x04,0xa2,0xfe,0xc3,0xbb,0x80,0x1c,0xb0,0x4e,0x9c,0x49,0x48,0xa3,0xe2,0xcc,0x81,0xc5,0xa8,0xd4,0xd5,0xe4,0xab,0x39,0xe7,0xe8,0x97 +.byte 0xc7,0x51,0xb4,0x5e,0x3f,0xe6,0xa7,0xcc,0x45,0x18,0xa2,0x6a,0xb3,0xa8,0x0b,0x7d,0xce,0x1a,0x97,0x4a,0x67,0xe1,0x3c,0x7c,0x4e,0xad,0x90,0xcf,0x2a,0x8f,0xb8,0xb6,0x96,0xaa,0x9a,0xc3,0x73,0xe6,0x71,0xdb,0x11,0x9b,0xd9,0xd9,0xfe,0xba,0x4a,0xf0,0x77,0xa4,0x15,0xb5,0xca,0xe1,0xb4,0x16,0x06,0x46,0xdf,0xc5,0x49,0x07,0x66,0xb3 +.byte 0xf5,0x30,0xe3,0xfb,0x44,0xac,0x80,0x3a,0x21,0xd9,0x5b,0x22,0x54,0x3a,0xae,0xbe,0xbd,0xf0,0x99,0x8d,0xb5,0x2a,0xf7,0xc9,0xf2,0xd3,0xfb,0x07,0x7c,0xd7,0x75,0x30,0x2a,0xcd,0x80,0xa8,0x2a,0x6a,0xb9,0x47,0xe2,0xa1,0xb0,0x76,0x6a,0x0f,0x9f,0x4a,0x56,0x3e,0xde,0xb3,0x89,0x12,0x25,0x63,0x1a,0x9d,0xea,0x64,0x08,0xc5,0x78,0xa7 +.byte 0x53,0xce,0xf8,0xb2,0xe5,0x97,0x3a,0xeb,0xd1,0x92,0xe1,0x4d,0xe0,0xf5,0x93,0x39,0x73,0xad,0x67,0xc9,0x0e,0x6b,0x16,0x4a,0x00,0xaa,0xb4,0xe6,0xa6,0xa5,0x67,0x95,0x90,0x04,0x5e,0x4d,0xc3,0x7f,0x6b,0xa1,0x50,0xb0,0x3b,0x72,0x0d,0xb3,0xec,0x9a,0x18,0x92,0x65,0x0c,0x2d,0x0f,0x94,0xd6,0x0f,0x95,0xba,0x4b,0xe6,0xc3,0x07,0x22 +.byte 0x0d,0x40,0xd4,0x0d,0x97,0x44,0xba,0x54,0x8c,0xf8,0x97,0x52,0x1f,0xa7,0xb2,0xe8,0x1b,0x0a,0xd5,0xde,0xff,0x1b,0x33,0x60,0x6a,0x28,0x68,0x36,0xb9,0x5a,0x3e,0x43,0x84,0x9a,0xb1,0x3d,0x3d,0xdb,0x1b,0xa2,0xc5,0x0e,0x2d,0xb5,0x5a,0xa5,0x36,0xe7,0xbf,0x7e,0xc3,0x76,0xad,0x1e,0xb5,0x49,0xc2,0xd5,0xa2,0x69,0x97,0x45,0x43,0x3e +.byte 0xeb,0xcd,0xdf,0x4f,0xab,0xb3,0xe8,0x49,0xaa,0x9c,0x9c,0x58,0x1e,0xc8,0x1c,0x79,0xe9,0x16,0x1d,0xfe,0x54,0xac,0x55,0x18,0x10,0x73,0x97,0xdc,0xbe,0x45,0x63,0xfb,0x48,0x41,0x88,0xb4,0x0b,0x3a,0x1d,0x65,0x40,0x1b,0x10,0x66,0xeb,0xbe,0xed,0xc7,0x6c,0xd5,0x0c,0x19,0x85,0x23,0xb1,0x38,0xb3,0x4b,0xcd,0xc7,0xc5,0x06,0x18,0x40 +.byte 0xbd,0xef,0x9f,0x2e,0x3a,0x71,0x33,0x05,0x30,0x71,0xca,0xe9,0x7a,0x2c,0xe7,0x83,0x4e,0x3d,0x4b,0xc8,0xc7,0xcb,0x74,0x9c,0xa2,0xc7,0xbb,0x8c,0x44,0x0d,0xd8,0xb3,0x01,0x7c,0xdf,0x79,0xee,0x47,0xcb,0x91,0x6f,0xc3,0xfd,0x0f,0xfb,0xf8,0x6b,0x9b,0x00,0xaf,0xf6,0x69,0x82,0xa5,0x58,0x54,0x22,0x7f,0x4b,0xee,0xa7,0x03,0xdb,0xb6 +.byte 0x5f,0x12,0xe1,0x04,0x43,0x17,0xec,0xd4,0xdd,0x39,0x28,0xfa,0xa3,0x09,0x5e,0x14,0xaf,0x6b,0xfe,0x0c,0x65,0x01,0x13,0x75,0x3d,0xe7,0x6d,0xd9,0xda,0x1d,0x13,0xc1,0x56,0x40,0x50,0x95,0x65,0x8f,0xad,0x51,0x3f,0x13,0x05,0x2f,0x83,0xcd,0xca,0x8b,0x75,0xa2,0x39,0x61,0xde,0xd7,0x36,0xf9,0x1d,0x43,0x5b,0xc4,0x9a,0xc9,0xfc,0xa8 +.byte 0xf4,0x76,0x90,0x91,0xe8,0x52,0x5b,0x84,0xe7,0xc9,0x8e,0x7d,0x84,0xba,0xb1,0x32,0x12,0xce,0x06,0x9e,0x98,0x83,0x1f,0x7f,0x31,0xd7,0xf0,0x8a,0xa2,0xca,0xae,0xb3,0x50,0x51,0x93,0xfb,0x2f,0x43,0x0a,0xee,0x06,0x85,0xec,0xb8,0xf1,0x73,0xb1,0x65,0x37,0x05,0x8e,0x68,0xf7,0x7a,0xff,0xe7,0x17,0x08,0x5e,0x19,0x75,0x3d,0xf9,0x5e +.byte 0xd5,0x25,0xf6,0x3b,0x99,0xb9,0x96,0x42,0x7a,0x37,0x8f,0x0d,0xde,0x22,0x83,0x89,0xf0,0x77,0x1f,0x22,0x42,0xc7,0xb5,0x70,0xcb,0xfd,0xf0,0xa9,0x87,0x8e,0x1f,0x01,0x9a,0x26,0xa6,0x8c,0x41,0xb9,0x12,0xd6,0xf2,0x5b,0xe5,0xfd,0xdc,0x74,0xbd,0xa1,0xc8,0xf7,0x3b,0x8c,0xe1,0x1d,0x42,0xb4,0x07,0x24,0x18,0x84,0x94,0x8a,0xce,0x00 +.byte 0xbd,0xd7,0xb0,0xfd,0x8f,0x0a,0xd3,0x75,0xa4,0xe8,0xfc,0x09,0xa9,0xa3,0x57,0x68,0x79,0x0e,0xef,0x37,0x46,0xd5,0x3b,0x8c,0x0d,0x67,0xbc,0x2c,0x5d,0x3e,0xf7,0xcc,0x9c,0x9e,0x81,0x62,0xc8,0xec,0x38,0x20,0x07,0x66,0xe4,0x83,0x15,0x13,0x3b,0x47,0x23,0xd9,0x46,0xaf,0x65,0xe1,0x40,0x2d,0x14,0x84,0x72,0xc1,0xbf,0xbe,0x81,0xc4 +.byte 0xcb,0x04,0x16,0x5e,0x2f,0x60,0x3a,0x8e,0x1a,0xd3,0xa2,0x00,0x25,0x6c,0xb7,0xdb,0x0d,0x20,0x99,0xb8,0x45,0x54,0xbf,0xc4,0x52,0x52,0x92,0x7d,0xcd,0xa1,0x9a,0x12,0x5e,0x27,0xe9,0xcf,0x79,0x9d,0xa8,0x6c,0xcd,0x37,0x20,0x08,0x09,0xc6,0x94,0x53,0x00,0x04,0xf5,0x3b,0xea,0x00,0x1b,0xc3,0x02,0xff,0xbc,0x18,0x1f,0xb7,0xf7,0x26 +.byte 0xe8,0x8b,0xc4,0x5f,0xf7,0xbe,0x9b,0xb3,0xba,0xae,0xbd,0x9c,0x3f,0x95,0xf7,0xcd,0x2b,0x40,0xf4,0x1c,0x6f,0xd7,0x52,0xe1,0xa7,0xdc,0x79,0xa4,0x88,0xff,0xfc,0xcf,0xfb,0xbb,0xe6,0xef,0xb6,0x31,0xac,0x24,0xa7,0x40,0xea,0x76,0xa2,0x34,0x6c,0xb1,0xfb,0x96,0x6b,0xfa,0xdd,0x60,0x70,0x73,0xb8,0xfd,0x66,0x3d,0xf9,0x63,0xc9,0x04 +.byte 0x70,0x20,0x35,0xca,0x04,0xb8,0xb3,0x4f,0x24,0x64,0x54,0xc2,0xd9,0x4d,0x8b,0xad,0x07,0xad,0xc5,0xb9,0x84,0xac,0x7c,0x65,0x4b,0x98,0x1d,0x09,0x23,0x95,0x5c,0x85,0x26,0xe5,0x8e,0xec,0xeb,0xc3,0xd5,0x15,0x9c,0x37,0x4e,0xf3,0x3c,0x97,0x92,0x75,0x99,0x48,0x48,0x52,0x4b,0x7b,0x93,0x54,0xd7,0x4f,0x7f,0xe5,0x51,0xdc,0x74,0x85 +.byte 0x9a,0xae,0xbd,0xf8,0xe6,0xe8,0x3f,0x1b,0xee,0x8b,0xf4,0xd8,0x5c,0x6c,0x46,0x6e,0x1d,0xaf,0x67,0x27,0x9a,0x39,0x4e,0x6b,0x99,0xcc,0xc0,0x66,0x54,0xbf,0x60,0xf6,0x24,0x64,0xfd,0x16,0xbf,0x56,0xb2,0x07,0x87,0x46,0xa6,0xef,0x40,0x67,0x78,0x2f,0x78,0x49,0x81,0x25,0xbd,0xa1,0xcf,0x78,0x68,0x25,0x8e,0x93,0x0a,0x4b,0xe1,0x92 +.byte 0x33,0x9c,0x13,0x70,0xd4,0xdf,0x74,0x34,0x8f,0x21,0xb9,0x51,0xd7,0x74,0xa9,0x02,0x6e,0xdd,0xb2,0xb4,0x6e,0x2a,0x95,0xdb,0xe4,0xaf,0x17,0xf5,0x9b,0xa5,0xc1,0x72,0x36,0x35,0x02,0x37,0x1c,0x38,0xaa,0x81,0x76,0xc6,0x1c,0xc3,0x2c,0xc5,0x45,0xaf,0x03,0xea,0xe6,0x14,0x51,0x44,0x84,0x9e,0x32,0xfe,0x4b,0x47,0xe9,0xb4,0x12,0x96 +.byte 0x13,0x6f,0x4c,0xed,0xe4,0xb0,0x79,0x7b,0xe5,0xc0,0x37,0x87,0x78,0x28,0x42,0xf7,0xd4,0xde,0xfc,0xd2,0x23,0x11,0x09,0xa5,0x11,0xc3,0xc4,0xf5,0xe0,0x2b,0x47,0x01,0x63,0xf2,0x85,0x1f,0x45,0x28,0xae,0xd3,0x29,0x04,0x1a,0x4b,0x83,0xab,0xf2,0x35,0x3a,0x40,0x2c,0x8d,0xb3,0xc7,0x47,0x0d,0xd1,0x3c,0xd0,0x1c,0x6b,0x5d,0x9b,0x4e +.byte 0xdf,0x36,0x8d,0xc6,0x54,0x9e,0x61,0x51,0xf1,0xd2,0xa4,0x39,0xad,0x4a,0x14,0xa1,0x0b,0xd3,0xae,0x91,0x1a,0x29,0xeb,0xc5,0x75,0x88,0x13,0x1e,0x96,0xdd,0x6f,0x86,0x92,0xaa,0x37,0x16,0x95,0x86,0xbc,0xb1,0x35,0xbf,0x5f,0x75,0x40,0x46,0xe1,0x6f,0x2f,0x33,0x2d,0x13,0x35,0xef,0xca,0x09,0x04,0xe4,0x42,0xef,0x69,0x66,0xda,0xa6 +.byte 0x01,0xda,0x09,0xfd,0xb1,0x40,0x8d,0xaa,0xdd,0x08,0x0d,0xf5,0xf1,0xd6,0xc6,0x11,0x3b,0xbd,0xd3,0x04,0x70,0x76,0xaf,0xec,0x9b,0xcc,0x6a,0x1d,0xeb,0x95,0x4a,0x01,0x0a,0x03,0x62,0x00,0x32,0xb3,0xe0,0xd1,0x36,0xb6,0xeb,0xde,0x4b,0x5f,0x35,0x79,0x07,0x4a,0x0d,0xa1,0x8c,0xde,0x6b,0xd2,0xca,0x71,0x64,0x73,0xf7,0x9c,0x1d,0x95 +.byte 0x5c,0xdc,0xb9,0x4f,0x00,0x2e,0x86,0x3d,0x81,0x7b,0x05,0xa5,0x9e,0x03,0xa3,0x62,0xcf,0x22,0x78,0x0b,0xfe,0x09,0x3e,0x62,0x93,0x19,0x6e,0x47,0x7d,0x92,0x4a,0x0b,0xae,0xcb,0x37,0x4d,0x5a,0x3a,0x7a,0x68,0xde,0xb2,0x7e,0xd7,0xda,0x5c,0x45,0xd2,0x0f,0x1d,0x03,0xbc,0xed,0xd8,0xe5,0x2e,0x26,0x10,0x82,0x46,0x5a,0xe0,0x13,0x32 +.byte 0xf8,0xb9,0x18,0x8c,0xbd,0xb4,0xb3,0x8c,0x2f,0xb0,0x5d,0x0b,0xf3,0x8f,0x5a,0xda,0x8b,0xda,0x39,0xfe,0xe6,0x66,0x95,0x3f,0xfe,0x49,0x89,0xbf,0x43,0x36,0x77,0xc7,0x6d,0xea,0x92,0x5c,0x71,0xa6,0x29,0x50,0xb0,0x2f,0xed,0x89,0x9f,0x2c,0xd6,0x6b,0xfa,0xbe,0x62,0x9f,0x62,0xc7,0xe3,0x2e,0xd4,0xf2,0x2c,0x9c,0x98,0x37,0x38,0x5e +.byte 0x81,0x6c,0x9e,0xcc,0xff,0x0f,0xfa,0xfa,0xe8,0xdd,0x2e,0x2d,0xb5,0x92,0x44,0x5e,0x2f,0xe1,0xd0,0x6c,0xc3,0xb9,0x11,0x95,0x70,0x4b,0x01,0xa0,0xc1,0x5e,0xe8,0x1d,0x40,0x16,0x9b,0x6e,0x29,0x1b,0x13,0xb9,0xda,0x39,0xbd,0x40,0x42,0xe2,0x06,0x35,0x57,0x2f,0xa8,0xf5,0xa7,0x00,0x60,0x07,0x26,0x21,0x6b,0xe6,0x23,0xa2,0x2a,0x70 +.byte 0xeb,0x85,0xcb,0xa9,0x73,0x31,0x62,0xf7,0xb0,0x90,0xd7,0x26,0xc1,0xd3,0xd7,0xcc,0x15,0x72,0x86,0xa6,0x0f,0x4a,0x24,0x14,0x5d,0xcd,0xbe,0xad,0x7d,0xf0,0x05,0x39,0x0c,0x10,0xbe,0x11,0x9a,0x36,0x9f,0x60,0x41,0xc6,0x7c,0xab,0x54,0x8a,0xac,0xc4,0xea,0xbd,0x43,0xeb,0x19,0x5a,0x8d,0x05,0xd1,0x83,0x58,0x92,0xb8,0xc6,0x75,0x56 +.byte 0x2c,0x58,0xb8,0x2d,0xe1,0x42,0xb4,0x0b,0xc9,0x97,0x79,0xb8,0x62,0xd0,0x15,0xd1,0x5d,0x0d,0x57,0x83,0xe4,0xba,0x73,0xa2,0x27,0xb8,0x56,0x64,0x28,0xaf,0xd2,0x58,0xe3,0xe6,0x12,0x01,0x6e,0x6a,0xfb,0x81,0x57,0xcd,0x32,0xc2,0x42,0x2a,0xe2,0x51,0x4a,0x4c,0xf8,0x69,0x0e,0xc0,0xe6,0x9f,0xf4,0x46,0x4b,0x60,0xcc,0x41,0x03,0xa4 +.byte 0x14,0xf0,0x15,0xb5,0xe5,0x39,0xfd,0x69,0xee,0xce,0x23,0x3a,0x50,0x66,0xdb,0xf4,0xe4,0x31,0x23,0xe9,0x06,0x93,0xdd,0x38,0xbc,0x2d,0xb9,0xf2,0x64,0x39,0x2f,0x1b,0xa9,0x71,0x0c,0x68,0xf7,0xb0,0x5b,0x74,0xe5,0x08,0xc6,0x5d,0xbe,0xb8,0xf7,0x40,0x0e,0xb4,0xe6,0x76,0x0c,0x14,0x8f,0x9d,0x25,0x95,0x6c,0x05,0x78,0x68,0x8a,0xa6 +.byte 0x80,0x24,0x8a,0x0b,0x6a,0xd7,0xfc,0xec,0x36,0xba,0x57,0xdd,0x49,0x82,0x3c,0x5f,0x9d,0xf4,0x57,0xac,0x16,0x99,0xed,0x73,0xa6,0xb0,0x2c,0x23,0xdb,0xf8,0x45,0x22,0xf4,0x82,0x16,0xc4,0x68,0x2f,0xe7,0x8c,0x85,0x6e,0x3c,0x43,0xdd,0x3d,0xea,0x90,0xeb,0xf4,0xef,0xf1,0x36,0x48,0x15,0x29,0x07,0x96,0x51,0xb5,0x78,0xa1,0xa3,0x59 +.byte 0x18,0x4d,0x11,0x5d,0x5e,0x67,0x69,0x28,0x29,0xcb,0xeb,0xbc,0x8f,0x17,0x12,0x57,0xaf,0xda,0xb5,0x86,0xef,0x59,0xdf,0xb1,0x6b,0x6a,0x33,0x66,0x67,0xd1,0x42,0xee,0xec,0x65,0xf2,0xeb,0x97,0x17,0x4e,0x01,0x3f,0x4d,0xb4,0x06,0x8e,0xf9,0xa8,0x79,0xb6,0xf1,0x67,0x8b,0xff,0x0b,0x5f,0x93,0x70,0x76,0x54,0xae,0x7b,0x0d,0x4a,0xbc +.byte 0xf7,0xdc,0x11,0x64,0xb3,0x6a,0xd1,0x69,0x45,0x1b,0x57,0xfc,0xb5,0xfe,0x86,0xb2,0xd6,0xde,0x82,0x23,0x86,0x6b,0x21,0x78,0x8b,0x2e,0x96,0xf8,0x04,0x8b,0xba,0x15,0xae,0x33,0x91,0x27,0x88,0xe3,0xc1,0xe7,0xf8,0xc3,0xa6,0xb6,0x73,0xec,0x84,0x95,0x22,0x45,0x58,0xb1,0x50,0x99,0xde,0x8a,0x37,0x41,0x9f,0xb8,0x27,0xd6,0xd8,0xaa +.byte 0x0f,0x0e,0xac,0xe4,0xd0,0x38,0xcf,0x2f,0x03,0x6f,0x3d,0x8a,0xd7,0x51,0xd6,0xf3,0x17,0x76,0xb5,0x0f,0xc5,0xf8,0xa7,0x0a,0x91,0xaa,0x8d,0xbc,0x15,0xd6,0x46,0xb9,0xdc,0x18,0x47,0x9c,0xd9,0x13,0xa5,0xb1,0xb5,0x45,0x2f,0x03,0x32,0x5c,0x8b,0xac,0x42,0x5b,0xd9,0x1a,0x41,0x1e,0x27,0xf9,0x92,0x72,0xc1,0xc7,0xc1,0x50,0x25,0x22 +.byte 0x7a,0x00,0x41,0x1f,0x2d,0x28,0xaf,0x41,0x96,0x8e,0x97,0x3b,0x36,0x80,0x16,0xe6,0x51,0x8f,0x07,0x13,0xd9,0x81,0x79,0x94,0x92,0xaa,0xb9,0xb6,0x39,0xf2,0x4d,0x24,0x6b,0x77,0x25,0x7e,0x47,0x6c,0xc7,0x62,0x3d,0x96,0x21,0xac,0x1a,0xf0,0x5f,0x5d,0x5a,0x7e,0x17,0xdd,0x47,0xd5,0x19,0x0a,0x85,0x3e,0xd5,0x6b,0x52,0x12,0xe2,0xbc +.byte 0x43,0x79,0x28,0x1d,0x72,0xcc,0xa6,0x6c,0xea,0x9b,0xe9,0x04,0x34,0x2c,0x41,0x3a,0x64,0xe8,0xcb,0x12,0xfa,0xd5,0x45,0xad,0xe8,0x3e,0xa2,0x5c,0xb8,0x83,0x52,0xdb,0x0c,0x98,0x24,0x76,0xd2,0x00,0x62,0xff,0xac,0xd7,0x11,0xee,0xcf,0xfb,0xdd,0x65,0xd2,0x75,0xb0,0x25,0x4e,0x76,0x3f,0xa2,0x1a,0xae,0xee,0xc1,0x59,0x1b,0x0c,0x42 +.byte 0x70,0x42,0x06,0x00,0x64,0x31,0xe0,0xce,0x3a,0x91,0x5e,0x9d,0x56,0x83,0xab,0xa7,0x73,0xc2,0x15,0x29,0xba,0xf9,0x1d,0xc8,0x4b,0xc6,0x3a,0x9e,0xab,0xd7,0xfd,0x17,0x8d,0x80,0xf0,0xa1,0x8a,0x5a,0x7a,0x80,0xd8,0x1f,0xa9,0x5b,0xec,0x68,0x99,0x3a,0x66,0xcc,0x5a,0xdf,0x5f,0xe9,0xd5,0x6a,0xf2,0x2c,0x7e,0xf8,0xa7,0xdf,0x0c,0x59 +.byte 0xbd,0x85,0xf0,0xc9,0x91,0x44,0x9c,0x86,0x24,0x60,0xfb,0xe9,0xff,0x3c,0xa7,0xa7,0x6d,0x4b,0x17,0xb3,0x24,0x99,0x14,0xbc,0x64,0xd0,0x41,0xaa,0xcd,0x26,0xd3,0xa3,0x51,0xeb,0x25,0x1d,0xb2,0x7d,0xf1,0xf3,0xf3,0xf0,0x3a,0xe0,0xb5,0xa9,0x24,0xc3,0x78,0x4a,0xef,0x9b,0x34,0x93,0xf8,0x0c,0x71,0x10,0x5b,0xf0,0xe7,0x08,0x4d,0x5f +.byte 0x74,0xbf,0x18,0x8b,0x48,0x8d,0xd7,0x23,0x81,0xed,0xa2,0x29,0xa9,0xdb,0x91,0xf6,0x61,0x7c,0xca,0x1e,0xe0,0xa7,0x21,0x9d,0xfc,0x04,0x3a,0x87,0xbb,0xf9,0xa4,0x3b,0xbb,0xc4,0x89,0xa1,0x7f,0xdc,0x83,0xfa,0x5e,0x0f,0xcf,0xdf,0xf6,0x41,0xd3,0xa3,0x76,0x76,0x44,0x3e,0x01,0xee,0xce,0xf6,0xc3,0xb9,0x49,0x43,0x6e,0xee,0x09,0x4c +.byte 0x87,0xe6,0xa3,0xf5,0xa0,0x8d,0x99,0xb3,0x3b,0xd6,0xeb,0x27,0xf9,0x34,0x68,0xc8,0x04,0x80,0xb2,0x4d,0xb6,0xde,0x98,0x81,0xe0,0xec,0xc9,0x06,0xde,0x86,0xee,0xf0,0x87,0xb8,0x67,0x0e,0xce,0xf8,0xc5,0xb1,0xd2,0xe1,0xe3,0x53,0x1d,0xbe,0x6c,0xdd,0x5e,0x83,0x02,0xf5,0xc8,0xda,0xcf,0x3c,0xcb,0x88,0x2c,0xca,0x65,0x65,0x9e,0x71 +.byte 0x4e,0xf2,0x98,0x96,0xb2,0x54,0xb4,0x96,0xdc,0x84,0xb5,0x39,0x74,0x9b,0x61,0xcf,0x52,0xef,0xb3,0x0c,0x62,0xc9,0x92,0xe1,0xe5,0x6f,0x2f,0x0c,0x61,0x0d,0x6f,0xfd,0xd8,0x84,0x25,0xba,0x20,0x59,0x00,0xf5,0xa9,0xf1,0x77,0x6e,0x9a,0x3d,0x93,0x69,0xde,0xaf,0x9a,0xe6,0xe3,0xfd,0xb9,0xd3,0x04,0x82,0x18,0xa1,0x5b,0x9b,0xe0,0x29 +.byte 0x4c,0x64,0xf5,0x95,0x57,0x25,0xd3,0x04,0x8b,0x4a,0xe9,0x57,0x6f,0xd1,0x8c,0x40,0x73,0x49,0x32,0x93,0x3f,0x26,0xb4,0x6b,0xd3,0xd4,0x90,0xb7,0xe1,0xaf,0xa0,0x9a,0xc0,0x86,0xb7,0x5e,0xec,0x29,0xaa,0x03,0x4e,0x56,0xb5,0xcd,0x46,0x7d,0xe0,0x26,0x3d,0x5f,0xd3,0x55,0x86,0x68,0x4a,0xc5,0x42,0x5d,0x60,0x3a,0x39,0x6f,0x45,0xb9 +.byte 0x6a,0xea,0xf4,0x05,0xc8,0x24,0xf8,0xcd,0xe5,0xeb,0xca,0x3a,0xe7,0xb4,0x59,0x83,0x5a,0xa5,0x1d,0xe4,0x6a,0xaa,0x35,0x00,0x42,0x32,0xa5,0x6c,0x3e,0xc1,0xc2,0xc4,0x9d,0x2e,0x43,0x57,0x79,0x52,0xf6,0x1e,0x02,0xb8,0x9b,0xcd,0xf0,0x3d,0x57,0xa3,0x6f,0xf7,0x12,0x54,0x6c,0x63,0x0d,0xb2,0xba,0xff,0xa1,0xf6,0xf5,0xdf,0xa5,0xed +.byte 0xda,0xdf,0x56,0x72,0x1e,0xc5,0x3f,0xad,0xd0,0xf9,0x38,0x94,0x51,0xe3,0xa4,0xb4,0xbf,0xd5,0x24,0x2a,0x90,0xfe,0xd4,0x34,0x6c,0xa8,0xc8,0x1c,0x9a,0xaf,0xac,0xff,0x5b,0x67,0x44,0x4c,0x4d,0xa7,0x59,0x2c,0x9f,0x67,0x07,0x25,0xe1,0x7f,0x4e,0x4a,0xaa,0x8f,0x5d,0xd1,0x26,0x0d,0x73,0x9b,0x69,0x5d,0xdf,0xb2,0xa5,0x89,0xbb,0x82 +.byte 0x0b,0x09,0xf3,0x11,0x76,0x5d,0x2d,0xad,0xc3,0xc1,0x15,0xbc,0xaf,0xa2,0xe6,0xd5,0xb0,0x6d,0x80,0xa6,0xda,0xfa,0x3b,0x9c,0xaf,0xff,0x98,0x40,0x83,0x3a,0xe1,0xb8,0x98,0x0e,0x97,0x00,0x89,0xfb,0x37,0xcb,0x81,0x36,0x34,0x33,0xbb,0x5c,0xd0,0x51,0x37,0xd6,0xb5,0x6c,0x3a,0x61,0x0a,0x27,0x23,0x96,0xa9,0x79,0x8d,0xf0,0xbe,0x31 +.byte 0xba,0xdc,0x89,0x4e,0x88,0x98,0xe4,0x10,0x15,0x8a,0xe1,0xae,0xe8,0x6d,0xa4,0x61,0x56,0x14,0x84,0x59,0x64,0xc2,0xaa,0xd8,0xfd,0x19,0xfc,0x17,0xf1,0xfc,0x6d,0x17,0xcb,0xea,0x7a,0x47,0x00,0x75,0x17,0xf3,0x62,0xfe,0x3a,0xbc,0x28,0x1a,0x0e,0x88,0x48,0x63,0x4a,0xcb,0x20,0x46,0xa4,0x75,0xf8,0xf1,0x7a,0xd6,0x92,0x7f,0x92,0xfa +.byte 0x91,0x95,0x2f,0xbc,0x5b,0x42,0xf1,0x55,0xaf,0x91,0xa2,0x3b,0x29,0x5c,0xc8,0x5e,0x97,0x91,0xa2,0x2e,0xd2,0xa8,0x1c,0xf6,0x16,0xc5,0x15,0xf2,0x42,0xb3,0x41,0x59,0x52,0x8d,0x94,0x52,0xc4,0xc6,0x2c,0xdd,0x6f,0x01,0xea,0x62,0x42,0x83,0x7e,0x2e,0xf8,0xb8,0xc1,0xf3,0x71,0xd1,0x11,0x14,0x7a,0x3d,0xcd,0xec,0xe0,0x79,0x8b,0xbd +.byte 0x28,0x12,0x60,0xf0,0x66,0xf1,0x1c,0x1c,0x19,0x07,0x8c,0x26,0xff,0xcc,0x72,0x9a,0xbd,0x12,0xe6,0x2b,0x2b,0xb1,0x32,0x04,0x98,0x92,0xd9,0x24,0x97,0x59,0x46,0xc6,0x11,0xe1,0x31,0x14,0x46,0x27,0x96,0xb1,0x06,0x81,0xd5,0xe8,0xff,0x45,0x3d,0x3c,0x04,0x9a,0xd8,0x0b,0x1f,0x41,0x03,0xba,0x1b,0x3e,0x4e,0xd5,0x7d,0x48,0x00,0x68 +.byte 0xb3,0xe8,0xe0,0xc8,0x3c,0xcf,0xdc,0xbe,0x29,0x90,0x64,0x51,0x18,0xdc,0xcd,0x87,0xcb,0xa8,0x3d,0xf8,0xb4,0x73,0x11,0xdc,0x7a,0xcb,0xa4,0x81,0x9e,0x3a,0x72,0xde,0x18,0x36,0x86,0x15,0x91,0xbc,0xeb,0x7f,0xe2,0xfb,0x6b,0xf1,0x5a,0x3d,0x05,0x50,0xeb,0xcf,0xd2,0xcc,0xf2,0x62,0xb1,0x32,0x46,0x14,0x95,0x4e,0xdf,0x73,0x64,0x61 +.byte 0x5f,0x3d,0xbf,0x52,0x3e,0xa7,0x55,0x01,0x9a,0xd8,0x01,0xef,0xf7,0x60,0x6f,0x83,0x43,0x6b,0x4c,0xa2,0xc8,0x04,0x34,0x70,0x70,0xa1,0x99,0xc9,0xa7,0x54,0x1e,0x87,0x99,0xb3,0xec,0xfe,0xe9,0x2d,0x39,0xef,0x6f,0x4d,0x8c,0xf2,0x4b,0xd2,0x12,0x5d,0xb6,0xa7,0x0b,0x04,0x3b,0x69,0xdd,0x9a,0x18,0x2d,0xd9,0x22,0x00,0x38,0x15,0x9a +.byte 0x6e,0x6c,0x0c,0x84,0x32,0x32,0xb2,0xf9,0x61,0xef,0x74,0x35,0xec,0xcc,0xd7,0xbc,0x9d,0xe9,0xcd,0xe3,0xa0,0xa5,0x15,0x0a,0xfe,0x1f,0x37,0x35,0x2b,0x7c,0x42,0x50,0x81,0x67,0x52,0xb7,0xa7,0x9e,0x8f,0xda,0x64,0xc0,0xc0,0xc3,0x93,0xc7,0x9d,0x41,0xb8,0x4b,0x69,0x80,0x13,0x88,0x8a,0x07,0xf9,0x47,0xad,0xc9,0x4f,0x3d,0xc7,0xba +.byte 0xd2,0xf2,0x7a,0xa0,0x38,0xbe,0xe1,0xfa,0x83,0xda,0x79,0x29,0x7f,0x4c,0xfa,0x0e,0x9b,0x59,0x1e,0x89,0x76,0x05,0x60,0x84,0x13,0x63,0x11,0x14,0x20,0xa9,0x2b,0xd0,0xc3,0x58,0xcc,0x73,0x3e,0x2c,0xa8,0xa7,0xa5,0xd0,0x2f,0x03,0xfc,0xa9,0x5d,0xdd,0xcd,0x40,0x91,0x90,0x1f,0xda,0x0a,0x73,0x58,0xd8,0x84,0x05,0x45,0x01,0x84,0x52 +.byte 0x8b,0x9b,0x17,0x98,0xa8,0xc4,0xc3,0xb5,0x94,0xd5,0x32,0x86,0xe9,0x10,0xe5,0xa5,0x99,0x8d,0x57,0x3e,0x32,0x25,0xfa,0xb4,0x5c,0x3a,0x5f,0xa6,0x2d,0x7d,0x4e,0xd3,0x7b,0xee,0x41,0x23,0x5e,0xc2,0xc9,0x91,0xf4,0x21,0xe0,0x4f,0x0d,0x87,0x30,0x53,0xf1,0x0e,0x63,0xe8,0x5b,0x3d,0xee,0x4a,0xc8,0x78,0x38,0xa2,0xa4,0xe8,0x72,0x41 +.byte 0xf1,0x37,0x30,0xe3,0x3d,0x93,0xc6,0x4b,0x10,0x0d,0xf6,0x20,0x15,0x0a,0x77,0x41,0xd5,0x7d,0xcb,0xf9,0xda,0x3b,0x17,0xa6,0xf1,0xe4,0x56,0xd4,0x65,0x7b,0x33,0xe4,0xef,0x34,0xfb,0x8c,0x9f,0x87,0x86,0xfc,0xce,0x90,0x60,0x77,0x57,0xc0,0xe4,0x37,0x2c,0xdf,0x41,0x95,0x85,0x89,0x4e,0x77,0x3f,0xa0,0xc7,0x55,0x4c,0x3f,0xa8,0x10 +.byte 0xd2,0x87,0x7e,0xd2,0x97,0xa1,0x6c,0xe7,0xec,0xaa,0xf6,0x93,0x13,0x2e,0x10,0xed,0x5b,0x7a,0xed,0x53,0xb4,0x55,0xaa,0xb4,0x67,0x78,0x07,0x5f,0xc2,0xd2,0xf1,0x7b,0x98,0xf0,0x82,0xf6,0x7c,0xb2,0xd4,0xa8,0xc2,0x53,0x39,0x21,0x7f,0xa0,0x76,0x37,0x1a,0x69,0xb3,0x49,0xd4,0xc3,0xd1,0xcb,0x31,0x76,0xec,0xaf,0x75,0x66,0x31,0x65 +.byte 0xeb,0x44,0x63,0xa0,0x13,0xf5,0x9e,0x67,0x40,0x41,0x76,0xce,0xd3,0xd6,0x91,0xb1,0x3a,0x07,0xff,0x38,0x1e,0xaf,0x55,0x57,0x55,0xd1,0x94,0x63,0xd3,0x81,0x16,0x59,0x68,0x01,0xe8,0x6d,0x7d,0x7a,0xa1,0x39,0xb9,0xa2,0xba,0x79,0x9d,0x69,0x00,0x13,0x59,0x2f,0x3d,0xef,0x10,0xe7,0x3c,0x02,0x7d,0xa3,0xa8,0xee,0x31,0x1a,0xad,0xa6 +.byte 0xdb,0x1b,0xe3,0x4a,0xdd,0x60,0xfb,0x4e,0xa6,0x49,0xbb,0xea,0x34,0x5d,0x21,0xac,0x83,0xa4,0xb5,0x23,0x8e,0x69,0xb3,0x25,0x14,0x8d,0xc2,0x89,0x8d,0xcf,0x38,0x46,0x18,0xb6,0x0c,0xce,0x45,0x22,0xeb,0xb5,0xb2,0xed,0xe5,0x0f,0x35,0x8f,0xdd,0xa1,0x15,0xd6,0x50,0x5b,0xe1,0x04,0xa7,0x32,0xc0,0xc9,0x03,0x56,0xc2,0x33,0xe8,0x16 +.byte 0x1c,0xd4,0x7a,0xfd,0x6b,0x4d,0x04,0xc0,0x9e,0xf8,0x32,0x9f,0x52,0x24,0xac,0xc5,0xb0,0xa1,0x63,0x77,0xc9,0x14,0xaf,0x46,0x60,0x67,0x52,0x81,0xbb,0x3f,0xf5,0x7f,0xad,0xef,0x7c,0x3a,0x71,0xc1,0x1e,0xea,0x4a,0xe0,0xd7,0xdd,0x31,0xf2,0x4b,0xdf,0x53,0x8a,0xc9,0x59,0x7a,0xb2,0x6f,0x7e,0xc0,0x00,0xa4,0x0d,0x09,0x9c,0xf7,0x22 +.byte 0x22,0xa9,0x37,0xde,0x3b,0xe1,0x74,0x85,0xcf,0xc5,0xb7,0x7b,0x0a,0xfd,0x6b,0xfa,0x98,0x49,0xa9,0x7f,0x52,0x23,0x0e,0xc0,0x4a,0xb3,0x81,0xa6,0x96,0x46,0x24,0xe7,0x01,0xd1,0xf2,0xac,0x31,0xb2,0x5e,0x61,0xe3,0xab,0xf8,0x1b,0x28,0xca,0xa2,0x78,0x3c,0xdf,0x8a,0xc1,0x17,0x46,0x9d,0xbd,0x69,0x31,0x41,0x8b,0xc1,0xc8,0xaa,0x68 +.byte 0xd5,0x35,0x65,0x49,0xfe,0xc6,0xa4,0x99,0xcc,0x62,0x4b,0x81,0x1c,0x21,0xa4,0xd8,0xe3,0xb3,0xe9,0x7c,0xf8,0x33,0x2f,0x21,0xa5,0x88,0xf2,0x8e,0x7d,0xee,0x00,0x00,0x62,0xcf,0x07,0x37,0x00,0x68,0x6c,0xb5,0x2d,0xc6,0x1b,0xcc,0x86,0x71,0xf0,0x4f,0x68,0xaf,0x0c,0x9a,0x25,0x69,0x71,0x2d,0xb5,0x87,0x90,0x02,0xd3,0xfc,0xbb,0x63 +.byte 0xa9,0xf1,0x13,0x4f,0xda,0x71,0x69,0x5c,0x0b,0xfd,0x3f,0x6c,0x2f,0x0b,0x4f,0x07,0x72,0x2d,0x2f,0x77,0xcb,0xa4,0xe4,0xbd,0x30,0xc7,0xe4,0xd9,0xf9,0x5d,0x2f,0x65,0xe4,0x41,0x5c,0xbc,0x03,0xa2,0x01,0xf9,0xfa,0x06,0x14,0x52,0x08,0x44,0x67,0x75,0x4e,0xbd,0x66,0x4a,0x26,0x3a,0x49,0xc4,0xba,0x02,0xb3,0x8e,0xa2,0x42,0xe7,0x92 +.byte 0x03,0x6d,0x61,0x10,0x73,0xd0,0x6f,0xe1,0x6e,0x67,0xff,0xb0,0x29,0x62,0x70,0x3c,0xeb,0x80,0xed,0x11,0x06,0xd6,0x18,0x60,0xe1,0x3d,0x21,0xa9,0xe9,0xd2,0x92,0x00,0x9e,0x13,0xf2,0x5d,0x38,0x71,0xdf,0xf3,0x5f,0x8a,0x90,0x45,0xf0,0x47,0x1f,0x0b,0x2d,0x12,0xf7,0x10,0x07,0x6a,0x52,0xe8,0xe2,0x26,0x9b,0x4b,0x7a,0x5f,0x97,0xb6 +.byte 0xf1,0x6d,0x47,0x3a,0x1e,0xc8,0x1d,0x78,0x5b,0x0a,0xb8,0x03,0xb1,0xe1,0xe7,0xc8,0xf0,0xe7,0x00,0xac,0xfc,0xd7,0x4a,0xde,0xaa,0xcd,0x0f,0xaf,0xf7,0x56,0x8e,0xed,0xfb,0xbe,0x7e,0xfe,0x62,0x75,0x7a,0x07,0x96,0xff,0xc3,0x21,0x35,0x71,0xb9,0x73,0x41,0xc2,0xb0,0xa8,0x6a,0x65,0x48,0xc4,0x50,0x31,0xe2,0xba,0xf4,0xe9,0x6c,0x03 +.byte 0x26,0x2c,0x77,0xfe,0x1a,0xd5,0x96,0xf6,0x6d,0xe4,0x14,0xfc,0xe2,0x1d,0x20,0x0c,0x14,0xa2,0x39,0x63,0xe5,0x16,0xef,0x6a,0xeb,0xe1,0x69,0xb8,0x67,0xa0,0x91,0xc1,0x8f,0xed,0xff,0xdf,0x26,0x1f,0xc3,0xb7,0x5d,0xe9,0xd2,0x72,0xe2,0x54,0x27,0x46,0x4f,0x33,0x25,0x59,0xaf,0xfa,0x87,0x4b,0x5a,0xda,0x7d,0x15,0x71,0x5d,0xb4,0x8d +.byte 0x95,0xb6,0x09,0x5b,0x8b,0xeb,0xe6,0xba,0xc8,0x2f,0x8f,0x9e,0xa8,0xab,0x6a,0xa6,0x26,0xb6,0xf5,0x80,0xd0,0x7d,0xe7,0x4c,0x18,0x5a,0x72,0x8f,0x3e,0x90,0xe5,0xa1,0x16,0x33,0x66,0xc3,0x7b,0xf6,0xb6,0xdd,0x15,0x94,0x6d,0xca,0x8b,0xd7,0xa5,0x05,0xfb,0x5f,0x4e,0x94,0x6a,0xcc,0x54,0xed,0xeb,0xc0,0xb1,0xe1,0xc9,0x7f,0xc4,0x90 +.byte 0x2f,0x50,0x34,0x81,0x3c,0x83,0x47,0x3c,0x5a,0xb2,0x33,0x63,0xb6,0xa7,0xfb,0x59,0x70,0x87,0xea,0x7f,0x30,0x22,0xb4,0x54,0x48,0xfb,0x40,0xd2,0x7b,0xc9,0x49,0x80,0x18,0x27,0xc2,0x75,0x09,0x06,0x0a,0x83,0x1e,0x7a,0xf1,0x97,0xa1,0xc2,0x34,0x3f,0x6d,0xd6,0x2d,0xfe,0x5d,0x8b,0xfd,0x64,0x5d,0x6f,0x7f,0xbf,0x4e,0x01,0xb7,0x46 +.byte 0xfb,0xf7,0xd5,0x6f,0x5f,0x74,0xc8,0xca,0x9a,0x2e,0x74,0x08,0xe9,0x3d,0x8b,0xfd,0x97,0x38,0x72,0x67,0xbb,0x8a,0x34,0xee,0xf5,0x3a,0x2b,0x5e,0x64,0x64,0x06,0x7c,0x60,0x0f,0x7a,0x88,0x45,0x1b,0x69,0x90,0xb8,0xb0,0x4d,0x71,0x80,0x77,0xa8,0xaa,0x9f,0xd3,0xc6,0xfb,0xb8,0x12,0x1e,0x0c,0xf4,0x94,0x67,0x44,0xdc,0xb1,0x95,0x0e +.byte 0x51,0xd1,0x06,0x69,0x92,0xbf,0xe6,0x67,0xe3,0xcd,0x0b,0x87,0x03,0x12,0x2e,0xa7,0x23,0x72,0x13,0xe9,0x89,0xcf,0x15,0x43,0xc0,0xa7,0x68,0xbd,0xce,0xec,0x28,0xb6,0x85,0x36,0xbe,0x52,0x5d,0x57,0xfa,0x7d,0x72,0xd1,0x4b,0x88,0xc9,0x64,0xbc,0x7a,0x18,0xe5,0x0e,0xab,0x19,0x81,0xee,0x11,0xbe,0xe0,0x68,0x44,0x81,0x49,0x3f,0xd8 +.byte 0x12,0xd1,0x8b,0xc1,0xe0,0x51,0xf7,0xc3,0x64,0xa7,0xc5,0x61,0x9b,0x32,0x6d,0xf0,0x6c,0xa6,0xaf,0xf9,0x4a,0xdf,0x94,0xaf,0xc8,0xf2,0x86,0xb1,0x4e,0x2e,0xa9,0xb4,0x35,0x82,0x15,0x8a,0x58,0xf3,0x03,0x2f,0x78,0x07,0x8f,0xb9,0x16,0x7c,0x42,0xfa,0x36,0xaa,0xa5,0x66,0x62,0x44,0xca,0xa6,0x55,0x95,0x27,0xdb,0x48,0xea,0x0a,0x1d +.byte 0x5a,0xae,0x5c,0xad,0x99,0xfe,0x00,0xf1,0xb9,0x94,0xda,0x09,0x48,0x52,0x9d,0xfc,0xb4,0xb2,0x80,0x19,0x16,0xf8,0xcd,0x68,0x10,0xec,0x1c,0x16,0x3f,0xbb,0x42,0xb4,0x10,0xe3,0xdb,0xaa,0xe4,0x3f,0x2e,0x8e,0xb5,0xce,0xba,0x8f,0xf2,0xb5,0x76,0x98,0x15,0xa7,0x77,0x4b,0x1c,0x30,0xb7,0x6f,0xc9,0xa9,0xa4,0x64,0x59,0xab,0x3a,0x43 +.byte 0x74,0x33,0xab,0xe1,0x3e,0x5e,0x79,0x1c,0xa5,0xb4,0x87,0xe1,0xcb,0xea,0x0e,0x02,0x4b,0x01,0x84,0xbc,0xdc,0x75,0xf4,0x2c,0x2b,0x8d,0xc8,0x5f,0xb5,0xba,0x6b,0xb2,0x4a,0x7c,0xe7,0xaa,0x61,0xa5,0x0c,0xf8,0x02,0x73,0xec,0x11,0x13,0x6b,0x31,0x07,0xaa,0x79,0x78,0x86,0x01,0x77,0x5e,0xa3,0x09,0xd1,0xec,0xaf,0x7d,0xb7,0x65,0xa9 +.byte 0xd8,0x99,0xd2,0xd7,0x6d,0x32,0x97,0x0f,0x0e,0x51,0x0d,0x69,0x81,0x7a,0x94,0x48,0x31,0xe1,0xff,0x26,0x4d,0x30,0x49,0x93,0xfb,0x6e,0xdb,0xea,0xaf,0xcb,0xb4,0xa9,0xc9,0x9f,0xeb,0xca,0x52,0x36,0x26,0xac,0x47,0xda,0x02,0x3d,0xd0,0x93,0x8b,0x61,0x78,0x26,0x54,0x32,0xe8,0x14,0xac,0xf3,0xd2,0x46,0x04,0x12,0x89,0x9f,0xf6,0x11 +.byte 0xf5,0x64,0x83,0x66,0x00,0x50,0x55,0x05,0xb5,0xf6,0x58,0x9f,0xbf,0x4b,0x95,0xf1,0x7f,0x0b,0xb4,0xf7,0x63,0xea,0x6f,0xf7,0xb0,0x20,0x53,0xfe,0x95,0xbc,0xc4,0xe2,0xff,0x75,0xbd,0xab,0x73,0x68,0x44,0x18,0xf7,0x6b,0x04,0x46,0xde,0x6c,0x65,0xb2,0x22,0x4e,0x25,0x8e,0xba,0x7c,0x3a,0x6f,0x80,0x99,0xb4,0xe7,0xf9,0x97,0x68,0x40 +.byte 0xa9,0x96,0xfc,0x6b,0xcf,0x08,0x75,0xe4,0xda,0x6f,0xaf,0x71,0x4f,0x31,0x62,0x31,0x18,0xbf,0xb9,0xa0,0xcc,0x9e,0xa7,0xa2,0x27,0x2a,0xb8,0x6b,0xc0,0x93,0xf5,0x1f,0x41,0x25,0xa7,0x4d,0x9f,0xb4,0x12,0x5c,0x27,0x38,0x5d,0x80,0x88,0xa3,0xb8,0xb2,0xc3,0xd2,0xfb,0x1d,0xba,0x7b,0xac,0x51,0x0b,0x71,0x58,0x3f,0xe5,0xfa,0x36,0xb8 +.byte 0xc7,0x90,0x46,0xd0,0x5a,0x94,0xf0,0x7d,0x6e,0x6c,0x4c,0xb1,0xfa,0xdb,0x97,0x1e,0x19,0xf2,0x1f,0x4e,0x05,0x25,0x0e,0xbd,0x47,0x94,0x2a,0xd3,0x1a,0xbe,0x4a,0x04,0xaa,0x57,0x02,0xc9,0x42,0xc1,0x74,0xcd,0xe1,0x78,0x8b,0xff,0xc1,0xc6,0x17,0x4e,0x71,0xc4,0x2c,0x00,0x23,0x56,0x57,0x1f,0x47,0xd8,0x93,0x80,0xc1,0xc5,0x7b,0xd9 +.byte 0x25,0x30,0xac,0x72,0x37,0x00,0xd2,0xbc,0xc7,0x33,0x73,0xf9,0x14,0x86,0x7c,0xb0,0x28,0x14,0x5d,0xbf,0xbd,0x98,0x1c,0x00,0x05,0x19,0x2b,0x0a,0x55,0xad,0xb4,0x06,0x28,0x58,0x03,0xa1,0xe6,0x27,0xa3,0x32,0x5f,0x41,0xd5,0x6a,0x0b,0xbc,0x0f,0xaa,0xf5,0xc1,0xa7,0x09,0x2f,0x86,0xda,0x56,0xb0,0x04,0x49,0xd4,0x20,0xc6,0xa2,0x6c +.byte 0x27,0x56,0x4e,0xcd,0x22,0x46,0xac,0x0f,0xd3,0x99,0x69,0x83,0xc4,0xae,0x9f,0x88,0xed,0x9c,0xba,0xfb,0xf3,0x66,0xc7,0x3d,0x65,0x55,0xd0,0xe3,0x04,0x03,0x6a,0x02,0x5c,0xbf,0x9f,0x23,0x34,0x79,0xe1,0xbe,0x7d,0xad,0xb4,0xc7,0x9e,0x4d,0x80,0x73,0x6d,0xe5,0x37,0x03,0xac,0xa3,0xf4,0x93,0xad,0x1e,0xf3,0xcd,0xb8,0xe2,0xeb,0x30 +.byte 0xc7,0x50,0xfe,0x0a,0x63,0x5e,0x0f,0xc9,0xd0,0x06,0x58,0xc1,0x6e,0x65,0x54,0x54,0x5d,0xaf,0xf1,0xe8,0x3e,0x95,0xe3,0x70,0x40,0x8e,0xb8,0x4d,0x76,0xda,0xa8,0xe8,0x9e,0x88,0xd8,0xaf,0x67,0x83,0x3b,0x77,0x65,0x58,0x00,0xbb,0xf7,0xe9,0x52,0xf0,0xba,0x0d,0x0a,0x59,0x28,0xe4,0xa7,0xfb,0x06,0xe5,0x34,0xbe,0xcf,0x10,0x7c,0x73 +.byte 0xa8,0xf3,0xa2,0x93,0x96,0x9e,0x4f,0x9b,0x3c,0xd1,0x9f,0x64,0x5b,0x8c,0xc1,0x89,0x66,0x67,0x13,0x52,0xb2,0xaa,0x6b,0x8e,0xea,0x97,0x27,0x20,0x2e,0x64,0xec,0xf0,0x72,0xc9,0x54,0x8a,0xed,0x78,0x3a,0xd7,0x4f,0xc2,0xba,0xc3,0xb8,0x64,0x7f,0xe4,0x5f,0x3d,0xf7,0xe5,0xd9,0xf1,0x8d,0xb1,0xd2,0xf6,0xcc,0x34,0xd8,0x7d,0x16,0xca +.byte 0x47,0xaf,0x85,0xe5,0x4a,0x57,0xb9,0x5a,0x9e,0xff,0xb8,0x83,0xec,0x7c,0xb8,0x07,0xf5,0xd3,0x31,0x31,0x2b,0xf0,0x40,0x46,0xc3,0x63,0x27,0xe4,0xb0,0x3b,0x84,0x0d,0x50,0x05,0x80,0x0c,0xfa,0x8b,0x0e,0x33,0x6b,0x10,0xd4,0xf5,0x4f,0x8b,0x2d,0x9e,0xc5,0x01,0x92,0x52,0x62,0x1a,0x89,0x1e,0xca,0x48,0xc3,0xd6,0xfa,0xd2,0x94,0x7c +.byte 0x77,0x6e,0xa7,0xeb,0xd7,0x4f,0xe8,0xc8,0xc2,0x71,0xb2,0x9e,0x86,0x30,0x18,0xfd,0x4c,0x56,0x4c,0xd0,0xa4,0x84,0x37,0x02,0x02,0x6a,0x8d,0x57,0x6b,0xc2,0x06,0xd1,0x8a,0xdb,0xa0,0xcc,0x31,0xf9,0xcf,0xbf,0xf2,0x29,0x7c,0x26,0xac,0x1f,0x03,0x20,0x26,0x76,0x03,0x6f,0xa5,0xb5,0x33,0xfb,0x02,0xe8,0xf6,0xe9,0x5e,0xb1,0x36,0x7c +.byte 0x96,0x56,0xb1,0x98,0x2d,0x9c,0x38,0x9b,0xd4,0x56,0x28,0xcc,0xdb,0x08,0xd3,0x42,0x00,0x35,0x24,0xd9,0x74,0xa2,0x0d,0x55,0x21,0x06,0xb7,0xf9,0x6a,0xa0,0x81,0xc1,0x2d,0xb6,0x67,0x91,0x92,0x24,0x36,0xfd,0x2e,0xd8,0xc0,0xcb,0xc8,0x87,0x1a,0x41,0x11,0x70,0xbf,0xd2,0xe7,0x82,0x10,0x74,0xdf,0x65,0x46,0x19,0x6b,0xb4,0x89,0xeb +.byte 0x9e,0xcf,0x79,0x35,0xba,0x25,0x75,0x32,0x64,0x6a,0xfb,0xaf,0xe5,0xed,0x85,0x98,0x34,0x75,0x31,0x40,0xbb,0xd8,0xe3,0xf5,0xa7,0xa2,0x9a,0x9e,0xcd,0xc4,0xf8,0xd8,0x15,0x6c,0x64,0x0c,0x6c,0x16,0x60,0xe9,0x40,0xf4,0x7a,0x14,0x37,0x7b,0x45,0x9b,0x0e,0x29,0x7a,0x1a,0x88,0x10,0xb9,0x2b,0xee,0x13,0xbd,0x8a,0xde,0x7a,0xe9,0x30 +.byte 0xe8,0x39,0x77,0x74,0xf5,0x2f,0xe3,0x10,0x19,0x89,0x28,0x21,0x3a,0x68,0x38,0xb4,0x4d,0x20,0x8d,0x7d,0xec,0x3f,0xf7,0x61,0xbf,0x53,0x32,0x3b,0xb8,0x6a,0xc9,0x58,0xeb,0xd4,0x33,0x0e,0xee,0xc7,0xb9,0x5e,0x3d,0x17,0x7e,0x36,0xa2,0xa6,0x94,0xb1,0x56,0xb6,0x8e,0x94,0x05,0x50,0x69,0x52,0x4f,0x31,0xe5,0x97,0x18,0xde,0x8f,0xb7 +.byte 0xff,0x2e,0x6f,0x1b,0x6a,0xda,0xfd,0xa1,0xd1,0x9a,0x4e,0x6a,0x1b,0x46,0x71,0x52,0x76,0x66,0xf9,0x70,0x8d,0x7d,0x97,0xb0,0xc3,0x8d,0xbc,0x35,0x26,0xe8,0x0b,0x80,0xc7,0x58,0x19,0x22,0x70,0x33,0x06,0xeb,0xcf,0x26,0x22,0xe0,0x97,0x91,0xbf,0xd6,0x94,0x05,0xe1,0x84,0xe2,0x31,0x66,0x57,0xc7,0x1e,0x36,0x30,0x50,0xaf,0x72,0xb3 +.byte 0x31,0xad,0x84,0xcc,0xb5,0x76,0x03,0xe1,0x56,0x97,0x87,0x36,0xf5,0xaa,0x97,0x99,0x38,0xa5,0xf5,0xb7,0x42,0x86,0x3b,0x2f,0x8a,0xb9,0x8e,0x6a,0x0b,0xe0,0xca,0xbc,0x4c,0x6c,0xc1,0x3f,0xbe,0x45,0xef,0xd2,0x57,0xcd,0x29,0xfb,0xfb,0xa5,0x79,0xf2,0xb1,0xbb,0x4b,0x55,0x26,0x2f,0x5c,0x84,0x5e,0x6a,0xc6,0xa9,0xd5,0x23,0xe4,0xd1 +.byte 0xe5,0xf0,0xbc,0x50,0x6a,0x2a,0xaf,0xa2,0x7c,0xcc,0x36,0x95,0xf9,0x5c,0x04,0x6d,0x04,0x31,0xbe,0x1d,0xb2,0x50,0x97,0x8f,0xdf,0x8a,0xed,0x4e,0x4e,0x0a,0x0b,0xfc,0xfc,0x1d,0xa9,0x6a,0x76,0x6a,0x33,0xd7,0x0a,0xcf,0xd5,0xdd,0xc6,0x62,0xe5,0x59,0x02,0xba,0x9c,0x43,0x32,0x8a,0x0e,0x47,0x91,0x00,0x07,0x47,0x93,0xc4,0xad,0x29 +.byte 0x33,0x57,0x15,0x45,0x44,0xb9,0xf3,0xc4,0xe6,0xd2,0xb9,0x3a,0x44,0x16,0x32,0x8d,0x57,0x78,0xac,0xf5,0xdb,0xa2,0x93,0x97,0x64,0x08,0x9b,0x66,0x4b,0xa0,0x64,0xab,0xa0,0xd6,0x0e,0x2c,0xa1,0x25,0x16,0x5c,0x6f,0x82,0xff,0x8e,0x89,0xfb,0xca,0x03,0xa6,0xf8,0xa1,0xf6,0x87,0x02,0x5c,0x90,0xcb,0x33,0xa0,0xc0,0x90,0xc2,0x1f,0xdd +.byte 0x5c,0x50,0x93,0xf2,0x8b,0x87,0xa1,0x73,0xda,0x5f,0xa3,0x20,0xd4,0xe7,0x45,0xd7,0xea,0x4b,0x5d,0xd6,0x80,0xfc,0x2d,0xdc,0x45,0x6a,0xf6,0xaf,0xd4,0x7a,0x91,0x64,0x15,0x17,0xbf,0xc7,0x58,0x54,0x7c,0x08,0x42,0x4f,0x8d,0xab,0x9b,0xd0,0x1d,0x57,0x71,0x50,0xa7,0xe3,0xb4,0xf2,0x14,0x0c,0xd7,0x2f,0x7c,0x8b,0x17,0x61,0x98,0xfa +.byte 0x19,0x34,0xb9,0x65,0xc5,0x5c,0xfe,0xa3,0x80,0x6f,0x99,0xec,0xfa,0x06,0x22,0x71,0xa9,0x10,0x2a,0xcf,0x12,0xb3,0x17,0xe5,0x59,0x3a,0xaa,0xcb,0x55,0x5f,0x45,0x9d,0xe9,0x29,0x56,0x34,0x11,0x62,0x6e,0x0a,0x95,0x12,0x5d,0xd4,0xa2,0x28,0x05,0xf1,0x0f,0x2d,0xa0,0x1e,0xe1,0x2b,0x42,0x6c,0xf0,0xe6,0x47,0xe0,0xb2,0xbd,0x89,0x20 +.byte 0x5e,0x24,0x05,0xec,0xf1,0x33,0xfc,0xa9,0x2f,0xef,0x3a,0x1f,0xfe,0x39,0xfe,0x01,0x09,0x0a,0x2a,0xe0,0x96,0x1e,0xde,0xad,0x96,0xaa,0x48,0xeb,0x8a,0xe6,0x54,0xbb,0x5d,0x7a,0xbe,0x4a,0xbf,0x96,0xf6,0x15,0x7a,0x70,0x6f,0xee,0xe7,0xf5,0x53,0xaf,0xe1,0xbb,0xaf,0x58,0x51,0xd4,0xa0,0xc6,0x44,0x03,0x47,0x33,0xce,0x58,0x62,0xd3 +.byte 0x93,0x21,0xa5,0xa5,0xb4,0xef,0x1d,0x93,0xcc,0x8c,0xf7,0x14,0xe3,0xec,0x40,0x52,0x47,0xe6,0xbc,0xe6,0x85,0x69,0xd0,0x15,0xad,0x24,0x21,0x4f,0x26,0x01,0x60,0x0f,0x0f,0xcb,0x7e,0x14,0x01,0xe1,0x90,0x11,0x06,0x17,0x38,0x2d,0xd8,0x26,0xe2,0x7c,0xd6,0xef,0xe0,0x59,0xf0,0x8c,0x2a,0xbd,0xba,0xe5,0x8b,0x07,0x56,0xd3,0x35,0xb3 +.byte 0x64,0x83,0x9e,0xb9,0xb9,0xeb,0x88,0x03,0xff,0x14,0xf3,0x8b,0x14,0xd3,0xa4,0xac,0x08,0xd9,0x75,0xf6,0x2c,0x9d,0x7f,0xc8,0x9d,0x11,0x3b,0xd1,0x71,0x14,0x4b,0x2a,0x6d,0x20,0x83,0x32,0x35,0x7e,0x1f,0x20,0xa6,0x69,0xbf,0xcf,0x22,0xd9,0xa2,0x57,0x4b,0x66,0xb1,0x9f,0x5a,0xa8,0xaa,0xb8,0x11,0x1d,0x45,0x28,0xac,0x86,0x09,0x37 +.byte 0xe9,0x1f,0xef,0xb4,0xe0,0x6f,0x75,0xad,0xe5,0xd8,0x25,0x06,0x19,0xb4,0xa8,0x07,0x78,0x79,0x43,0x63,0x40,0x26,0xbd,0x28,0x50,0x2d,0x29,0x26,0xf9,0xfc,0x5c,0x71,0x8f,0xfd,0x62,0x12,0x7c,0xd0,0x67,0xb3,0x65,0xef,0x31,0xc0,0x99,0xc1,0x54,0xfc,0x32,0x6e,0x25,0x56,0x77,0x6e,0xc1,0x6b,0x11,0x50,0x7c,0xa1,0x0b,0x97,0x8a,0xfe +.byte 0x0f,0x5b,0x16,0x93,0x83,0xe0,0xd8,0xb7,0xbf,0xa8,0x90,0x6d,0xd6,0x8b,0x4b,0xd9,0x17,0xbb,0xe8,0xd9,0xbb,0x5f,0x39,0x4a,0x33,0x7c,0xb3,0x12,0x99,0x1e,0xfc,0xb2,0x05,0x91,0x67,0xdf,0x8d,0x0b,0x55,0xfb,0xd1,0x8d,0x0c,0x9b,0x80,0x81,0xee,0x8c,0x05,0xe2,0x16,0x30,0xad,0x1f,0x88,0x04,0x75,0xc1,0xe5,0xec,0x32,0xf8,0xa0,0x5b +.byte 0x21,0xf6,0xd8,0x13,0x26,0xe4,0xa1,0x32,0xa8,0x93,0x91,0x5d,0x33,0x45,0x83,0x72,0x52,0x59,0x23,0x84,0xf6,0x7b,0xe2,0x90,0x20,0xc6,0x40,0x33,0xa9,0x94,0xcd,0xb9,0xab,0xe4,0x44,0x0b,0x06,0xbb,0x4c,0x2c,0x2a,0x5e,0x4d,0x57,0xb7,0xe0,0xb8,0x86,0x74,0xab,0xea,0x37,0x1c,0xa0,0xa6,0x21,0x33,0xc7,0xf5,0x24,0x7d,0x14,0xc8,0x8b +.byte 0x9d,0x8f,0x31,0x23,0x29,0x9d,0x11,0x42,0x07,0xe8,0x2c,0xec,0x7d,0x70,0x8d,0xb5,0xa4,0xca,0x33,0x30,0x03,0x75,0x17,0xa1,0x10,0xe7,0x6b,0x87,0xf9,0x0b,0xef,0x43,0xef,0xf8,0x24,0xc2,0xf1,0x7a,0x1a,0x70,0x7e,0x2f,0xd4,0xeb,0x97,0x40,0xa6,0xe6,0x2d,0xc1,0xd8,0x3b,0xee,0xa4,0xda,0xd3,0x50,0x41,0x18,0xbf,0xad,0x66,0x02,0x85 +.byte 0x60,0x14,0xcf,0xce,0x50,0x88,0x5e,0xb6,0x73,0x11,0xbb,0x6a,0xca,0xb1,0x46,0x8e,0xbb,0x58,0x2c,0x63,0x61,0x20,0xec,0xc9,0x98,0x0c,0xdb,0x5c,0xe5,0x47,0xb5,0x89,0xe9,0x14,0xc8,0xbc,0x35,0xf2,0xa7,0x2d,0x84,0xcc,0x61,0xc8,0xb6,0x9d,0xeb,0xcb,0x8b,0x73,0x90,0x6d,0x06,0xc9,0x42,0xcf,0xd2,0x15,0x80,0x2d,0x39,0xeb,0x71,0x83 +.byte 0x27,0x0d,0x85,0xf9,0xa3,0xce,0xef,0x29,0x3b,0x10,0xb7,0xe9,0xd0,0x86,0x6e,0x88,0x1e,0x3b,0xdd,0xaf,0x52,0xde,0xa2,0xa4,0x13,0x3c,0x1f,0xcb,0x84,0x74,0x12,0x04,0x91,0x40,0xb8,0x1b,0x15,0xfd,0xdb,0xe8,0x74,0xcc,0x4d,0x41,0xb5,0x5a,0x92,0xd3,0x71,0xf7,0x57,0xa5,0xf7,0x18,0x5a,0x57,0x36,0xde,0x8f,0xb2,0x81,0x59,0xc8,0x5c +.byte 0x22,0xcf,0xdc,0x7d,0xff,0x83,0xf2,0xad,0x8c,0x7b,0xd5,0x04,0xc4,0xb9,0x79,0x4a,0x12,0xa7,0xb1,0x7e,0x57,0xa5,0x6b,0x56,0x8a,0x11,0x96,0x57,0xde,0x35,0xdd,0xef,0x9b,0x03,0x41,0xde,0x61,0x5b,0x73,0x8c,0x6a,0x0c,0x6f,0xae,0x45,0x4b,0x56,0x4d,0xbe,0x8a,0x3f,0xdb,0x79,0x58,0x88,0xad,0xcb,0xfa,0x66,0x06,0x0e,0x74,0x21,0x1d +.byte 0xe1,0x94,0xd7,0x06,0xea,0x60,0xe2,0x7d,0x70,0xcf,0xa9,0x4f,0xe6,0x9b,0xba,0x19,0x71,0x69,0x94,0x66,0x5a,0xb8,0x49,0x0c,0xd1,0x9a,0xc4,0x5f,0xa7,0xf4,0x9e,0x3d,0x9e,0xc2,0xd8,0x0e,0xd2,0x6d,0xc6,0xc8,0x99,0xc3,0x5e,0x3b,0xb9,0xd8,0x48,0xc0,0x38,0x48,0x95,0x89,0xff,0x7e,0x1d,0x80,0x53,0xac,0x7b,0xd7,0xfc,0x6f,0x5d,0x25 +.byte 0x2f,0xcf,0x15,0xdb,0x1a,0x64,0xc1,0x16,0x91,0x65,0x84,0x99,0x0a,0xc1,0xbf,0x4d,0x11,0xa5,0x55,0x55,0x35,0x93,0x6f,0x47,0xf1,0x75,0xb8,0xb6,0x11,0x9d,0x6e,0x3b,0xd1,0x11,0x20,0xa2,0xa2,0x5c,0x33,0x85,0x09,0xb8,0x13,0xc9,0xdd,0xf2,0xd4,0x32,0x37,0xf2,0xef,0x47,0xfa,0x25,0x1a,0xcc,0xdf,0xf4,0xe4,0x2c,0x2c,0x7f,0x23,0xb6 +.byte 0xa8,0xd4,0x6a,0xd4,0xb4,0x06,0x2e,0xb0,0xaa,0xa1,0x18,0x8a,0x5c,0xc6,0xb2,0x4c,0x71,0x92,0x4a,0xdc,0x81,0x20,0x51,0x8d,0x3f,0x71,0x7d,0x8c,0x25,0x79,0x07,0x14,0xa9,0x7a,0x8b,0xda,0x00,0xfc,0x51,0xdb,0xa0,0x50,0x2b,0x15,0x39,0xf6,0xad,0xdc,0x9e,0x22,0x93,0x2f,0x43,0xd8,0x5c,0xa2,0x5e,0xfa,0x70,0x8c,0xe0,0x6b,0x0e,0x93 +.byte 0x6c,0x89,0xfe,0x22,0x4c,0xec,0xb0,0x7e,0xc1,0x06,0x69,0xf7,0x2f,0x3e,0xe5,0xa4,0x45,0x53,0xab,0x9c,0xf5,0x40,0x05,0x53,0x64,0xc6,0xa7,0xf9,0xc4,0xd6,0x89,0xd9,0x47,0x72,0x8e,0x42,0xf9,0x64,0x12,0xeb,0xd9,0x25,0xdc,0x4c,0xc6,0xea,0x9c,0x4b,0x93,0xb4,0xa2,0xa6,0xae,0x95,0xc1,0x84,0x75,0xc9,0x22,0xe3,0x22,0x81,0x31,0xd1 +.byte 0xfd,0x2e,0x91,0x4a,0xc3,0x00,0xa6,0x57,0xbb,0x89,0x9f,0x2d,0xc3,0x2e,0x1f,0xa2,0x47,0xc4,0xa3,0xcd,0x2b,0xc2,0x29,0xaf,0x89,0xce,0x2e,0x87,0x8e,0xd8,0xfc,0xee,0xab,0x8a,0xbd,0x2f,0xee,0xcf,0x94,0xe0,0x74,0x70,0x86,0x00,0x42,0x11,0x8b,0x6c,0x81,0xd4,0x82,0xf2,0x29,0x3e,0x9c,0x68,0x71,0xaa,0x20,0x0a,0x51,0x5d,0x80,0x4c +.byte 0xca,0x04,0x23,0x23,0xe2,0x69,0xb3,0xf5,0x65,0x98,0x19,0xee,0xa9,0x4d,0xd8,0xe0,0x06,0x4b,0x17,0xed,0xfa,0xf2,0xe3,0xd3,0x69,0x48,0xe4,0x4e,0xc0,0x5a,0x16,0x90,0xdb,0xb6,0x32,0x6e,0x6b,0xd7,0x7a,0xb6,0xd4,0x82,0xe4,0xcc,0x31,0x31,0x5c,0x18,0x84,0xef,0x75,0x9f,0xda,0xf6,0x62,0x2d,0x96,0x4d,0xa1,0x3c,0xb5,0x4a,0xbb,0xbf +.byte 0x9d,0xb3,0x33,0x00,0xc1,0x73,0xc5,0xb2,0xeb,0x85,0x74,0xb0,0x68,0xed,0x16,0x66,0x71,0xc9,0x7e,0x6f,0x74,0xa6,0xe7,0xed,0xf0,0xfa,0xab,0x41,0xdd,0x10,0xf9,0xff,0x4c,0xb6,0x4f,0x15,0xe3,0x77,0x31,0x17,0x5c,0x5a,0xef,0xb2,0xa9,0x44,0xbe,0x97,0xa9,0x75,0x5a,0xb7,0xe0,0x16,0x17,0x37,0x1b,0x71,0x03,0xb9,0xaa,0x7b,0x7b,0x52 +.byte 0x46,0x58,0x6b,0x9b,0x87,0x27,0xa6,0x8a,0x0e,0x84,0x03,0x45,0x95,0x04,0xf1,0x7e,0xb6,0xf6,0x79,0xd5,0x66,0x6d,0x50,0x8c,0x5a,0x67,0xe0,0xdd,0x69,0xd8,0x92,0x75,0x15,0xcb,0xa5,0x05,0xfe,0x7a,0xc1,0xd6,0x11,0x57,0x10,0xa3,0xc3,0xb6,0xe9,0xe3,0x97,0xa5,0x46,0xc9,0xe9,0x9b,0x68,0xb6,0x55,0x0b,0xf2,0x17,0x9d,0x0e,0x7f,0xd9 +.byte 0x26,0x0c,0x01,0xff,0x95,0xe1,0x05,0xb7,0xbf,0x0d,0x77,0x12,0x96,0x03,0x71,0x01,0xc9,0x98,0xb4,0x44,0x94,0xc0,0xad,0x3d,0xfc,0x6f,0xe5,0x0c,0xa4,0x65,0xd7,0xe7,0x76,0x7c,0xb8,0xa0,0x0a,0xcd,0xe8,0x01,0x26,0x8e,0x94,0xec,0x94,0x65,0x86,0xee,0x4d,0x3b,0xc5,0xb5,0x2e,0x51,0xb7,0xa9,0x68,0xcd,0x14,0x90,0xd8,0x36,0xfb,0x52 +.byte 0x04,0x52,0xb4,0xca,0x9b,0xbf,0xc6,0x94,0x28,0xc5,0x7e,0x27,0x73,0xae,0x6d,0xba,0xe7,0x56,0xce,0x2e,0x00,0xeb,0x36,0x19,0xd7,0x4f,0x20,0x5e,0xfd,0x0f,0xd4,0x4c,0x02,0xaf,0xdb,0x74,0xef,0xf0,0x73,0x1e,0x2a,0x1a,0xe7,0x3a,0xe0,0xa5,0x89,0xcf,0x1a,0x66,0xbd,0x72,0x65,0xb4,0xf4,0x86,0x33,0x44,0xee,0x35,0xf6,0x09,0xbe,0x13 +.byte 0x96,0x84,0x04,0x95,0x3f,0x35,0xbb,0x01,0x2c,0x78,0x25,0xe8,0x1e,0x46,0xdb,0xd9,0xb1,0xe8,0xfb,0x2b,0xa8,0x59,0x72,0x5f,0x91,0xd3,0x7c,0x21,0x95,0xa9,0x50,0xa2,0x45,0x6f,0x48,0x0c,0xf2,0x51,0x10,0x3c,0xcd,0xea,0xeb,0x5d,0xc7,0xf9,0x0e,0xae,0x1a,0x02,0x05,0x15,0x12,0x10,0xc0,0x35,0x12,0x97,0xcd,0x5b,0x61,0x4f,0xd1,0xd3 +.byte 0x5b,0xec,0x2b,0xa0,0x20,0x03,0x2b,0xf3,0xe6,0x71,0x23,0xca,0x1d,0x48,0x64,0x3f,0x7e,0x52,0x8b,0xf9,0x96,0x33,0x31,0xbc,0xbd,0x73,0x2f,0xa6,0x80,0xb8,0x0b,0x3a,0xd7,0xf8,0x05,0xf0,0x06,0xc7,0xa5,0xce,0x6a,0x6a,0x62,0xae,0x06,0x93,0xa4,0x5f,0x0b,0x5d,0x4d,0xb8,0xa4,0xfa,0x2e,0xfc,0xb6,0x58,0x8c,0x2a,0x46,0xa4,0x55,0x1f +.byte 0x9b,0x9b,0x13,0xdd,0x17,0x2a,0x3d,0x04,0x51,0xb6,0xbe,0x9c,0xca,0xf3,0x23,0xb6,0x7b,0x7a,0x92,0xb7,0x2f,0xf9,0x69,0x9a,0xee,0xb3,0xa1,0x60,0x56,0xcf,0x9d,0xab,0xfe,0x86,0x7a,0x41,0x94,0x15,0xbe,0xa3,0xa5,0x85,0x09,0xfb,0x7b,0x89,0xbd,0xc3,0x09,0x10,0xa6,0xfc,0x41,0x8e,0x57,0x27,0xdc,0x58,0xf4,0x01,0x7c,0x31,0x5e,0xca +.byte 0xaf,0x31,0x2f,0x98,0x8b,0xbe,0x19,0x16,0xa1,0x81,0x7e,0xb3,0xa9,0xc5,0x15,0xd2,0xad,0x51,0xa1,0x73,0x56,0xd3,0x6a,0x15,0x35,0xe3,0xb1,0xdb,0x83,0x4c,0xe2,0x85,0x8c,0x03,0x12,0xc4,0x64,0x69,0xc0,0x23,0x16,0x7b,0x68,0x46,0x44,0x22,0x84,0xa6,0xb5,0xe4,0x90,0x91,0xc1,0xdd,0x25,0x7c,0x54,0x0e,0xce,0x5b,0x11,0xe4,0x50,0x1c +.byte 0x3c,0x0d,0xc7,0xc1,0x0c,0x10,0x2d,0x8b,0xb7,0xde,0xe2,0x4f,0x7e,0x22,0x53,0xfc,0x07,0x55,0x19,0x14,0x3b,0x33,0xf5,0xf3,0xd8,0x7b,0x5e,0x40,0xa2,0x81,0x6d,0x40,0x0d,0x20,0x36,0x4b,0xa1,0x34,0x34,0xac,0x43,0x59,0xb5,0xb1,0x90,0x8b,0x48,0xcf,0x15,0x57,0x17,0x0e,0xd0,0xbf,0x28,0xcd,0xa4,0x77,0x4d,0xae,0x09,0x4c,0x67,0x51 +.byte 0x18,0xaa,0xb4,0xc9,0x35,0x41,0x0b,0x34,0x4d,0xb3,0xef,0x3f,0x46,0x97,0x6e,0xae,0x75,0xd7,0x6a,0x2b,0x22,0x9c,0xef,0x8e,0xaf,0x72,0xb0,0x14,0x90,0xbd,0x11,0x90,0xde,0x9a,0x02,0x8c,0x20,0xf5,0xc7,0x33,0x4d,0x94,0x88,0x9a,0x6c,0x18,0xb4,0xc0,0xa9,0x94,0x07,0x9a,0x4b,0x10,0x8f,0xe8,0x25,0xcd,0x9b,0xf5,0xfa,0x91,0x8a,0xc0 +.byte 0x93,0x61,0x1c,0x00,0xd1,0x34,0x9a,0x29,0xa3,0x35,0x38,0xe4,0xa7,0x9f,0xb6,0x88,0x0f,0xad,0x88,0x96,0xa0,0x73,0xe7,0x10,0xea,0x36,0xe8,0x88,0x6c,0x7f,0x03,0xbc,0xfe,0xe0,0xb2,0x4b,0x24,0x98,0xf6,0x73,0x6f,0xab,0x00,0x1e,0x26,0x83,0x0d,0x86,0x5b,0xa6,0x51,0x8f,0x5f,0xa9,0x8f,0xf4,0xa0,0x51,0xff,0xe0,0x64,0x09,0x95,0xfb +.byte 0x56,0x53,0x18,0x61,0xea,0xc5,0x33,0xe8,0x6f,0x8a,0x07,0x97,0x1a,0x6c,0xb5,0xf8,0x73,0xae,0xe4,0x4e,0x6d,0xb2,0x83,0x20,0xfa,0xfd,0x79,0xa6,0x6c,0xaa,0x9b,0x7b,0x2c,0xfe,0x63,0x73,0xbc,0x87,0xd4,0x56,0xd1,0xb1,0xf1,0x0f,0x72,0x2c,0x2f,0xf0,0xf0,0x53,0xe2,0x6c,0x19,0x0d,0x9c,0xad,0xc8,0x0a,0x62,0x72,0xcb,0xc3,0x12,0x90 +.byte 0x4c,0x26,0xe3,0xa0,0x07,0x35,0xee,0xaf,0x81,0x35,0x07,0xa9,0x31,0xa0,0x59,0xc8,0x40,0xa5,0x45,0xb6,0x6d,0x3e,0xa2,0x5f,0x6a,0x79,0x74,0x65,0xa1,0xe3,0x1c,0xca,0xae,0xcc,0xa6,0xb6,0x0a,0x12,0x99,0x8e,0xc3,0xef,0x43,0xcf,0x42,0x92,0xa4,0x12,0xa3,0x8b,0x97,0x7d,0x6f,0xe0,0x35,0xed,0xac,0x69,0xae,0x8c,0xe1,0x32,0x11,0xa4 +.byte 0xe0,0x76,0x7f,0x75,0x92,0xda,0xfe,0x94,0x33,0xeb,0xe1,0xa4,0x3c,0x95,0x7c,0xc6,0xbc,0x3d,0xf2,0x39,0xa1,0x29,0x39,0x24,0x09,0xd4,0x52,0x68,0xfb,0x80,0xd0,0xd4,0x57,0xc6,0x4c,0xa5,0xa6,0x90,0xa6,0x61,0x15,0x2f,0xd3,0x35,0x36,0xf5,0x16,0xb3,0x65,0x0a,0xc4,0xcb,0x7f,0x73,0xe4,0xba,0x9a,0xd8,0x8b,0xc3,0x01,0xa0,0x08,0x57 +.byte 0x9e,0x26,0x54,0xbc,0x55,0xd1,0x5f,0xaa,0xb5,0x0d,0x42,0x75,0x04,0x76,0x8c,0xef,0xcf,0x64,0x3a,0x2e,0x4c,0x78,0xe5,0x37,0x8d,0x55,0xec,0xc1,0x7b,0xce,0x5f,0x5f,0x43,0x8b,0xdd,0x46,0x43,0xf5,0xa8,0x41,0xa6,0x82,0x1b,0x12,0xcb,0xcb,0x6d,0xa1,0x6c,0xb6,0x79,0x46,0x12,0x89,0x12,0x61,0xd6,0x4f,0xf9,0x43,0x2d,0x27,0xa9,0x61 +.byte 0x2e,0x2a,0x29,0x1b,0x6d,0xad,0x32,0x0b,0x6c,0x7c,0xf4,0xb8,0x98,0x91,0xbb,0x78,0xda,0x85,0xe8,0xfb,0x4e,0x11,0xc4,0x2a,0x07,0x54,0xa0,0x67,0x73,0x1b,0xa4,0x60,0x15,0x5c,0x83,0xbf,0x3f,0xd9,0x61,0x30,0x02,0xbb,0xa6,0x67,0xcd,0x0c,0xd1,0xb4,0x11,0x7e,0xca,0xf4,0x1e,0xed,0x83,0x34,0x66,0x54,0x23,0x39,0x36,0x8c,0xa0,0xc6 +.byte 0xef,0xad,0xa1,0x95,0x04,0x20,0x46,0x42,0xa8,0x99,0xd2,0x98,0xc6,0x0a,0x92,0x11,0xd1,0x84,0x4a,0xbf,0x25,0xe5,0xcf,0x78,0x98,0x81,0x80,0xaa,0x31,0x0a,0xa4,0xfb,0xef,0x35,0xfa,0xa4,0xac,0x5f,0x01,0x6b,0xb7,0x8e,0x86,0xc1,0x46,0x97,0x88,0xe2,0xaa,0x3b,0x1f,0xb5,0xf8,0xa9,0x90,0xf0,0x45,0x6d,0xdd,0xa3,0xdd,0xd8,0xef,0x36 +.byte 0x6f,0x87,0x55,0xf6,0x96,0xcd,0x88,0x43,0x03,0x97,0x82,0xea,0x5a,0x1c,0xa1,0x1a,0x7b,0x1b,0xa7,0xfc,0xaa,0x86,0xb4,0x71,0xde,0x0d,0x0a,0x52,0x98,0xd2,0x65,0x5d,0xa4,0xea,0x91,0xc9,0xe4,0x8b,0xd0,0xdb,0x85,0xe3,0x86,0x85,0x50,0xe1,0x41,0x1f,0x48,0x97,0x64,0xec,0x34,0xe4,0x54,0x42,0xf4,0x01,0xed,0x6f,0x4d,0xe3,0x1f,0x86 +.byte 0x14,0xbc,0x01,0x9c,0x7f,0x02,0x0c,0x65,0x94,0xd2,0x90,0x2c,0x1b,0xab,0x41,0x88,0xad,0x58,0xb5,0x71,0xd3,0xd6,0xe1,0x3f,0xf3,0x3c,0xb6,0xab,0x22,0x08,0x17,0xc7,0xf5,0x7e,0x34,0x56,0xae,0x1d,0x1e,0x7e,0xdb,0x24,0xe2,0xc2,0x38,0xf3,0x4d,0x46,0xe4,0x45,0xcb,0xb7,0x2f,0x0f,0x96,0x72,0x7e,0x31,0x89,0x17,0x9c,0xed,0x85,0xb9 +.byte 0xc8,0x8f,0x65,0x93,0xfb,0xb8,0x9e,0x41,0xa2,0xc1,0xcf,0xdb,0xe2,0x4c,0x26,0x4a,0xc7,0x2a,0x72,0xf6,0x28,0xbc,0x18,0x22,0xde,0xa1,0xfa,0x46,0xbe,0x95,0xc8,0xe2,0x19,0xbb,0x20,0x7b,0xd5,0xf8,0x34,0x15,0xaa,0xec,0xe2,0x9e,0xa9,0x3d,0xa1,0xd9,0xaa,0xc9,0x18,0x39,0x07,0x5c,0x81,0x61,0xe7,0x00,0xc5,0x57,0x3e,0xca,0x4d,0x89 +.byte 0x33,0x02,0xa6,0xc8,0x15,0xb7,0x24,0xdd,0x5c,0x55,0x56,0x11,0x5c,0x17,0x1b,0xda,0xc6,0xd5,0x46,0x6e,0x9f,0x70,0xe7,0x1e,0x41,0xee,0x91,0x1a,0xa0,0xad,0x35,0x64,0xdf,0x4a,0x18,0x03,0xa7,0xa8,0x88,0x8f,0x65,0xbc,0x76,0x34,0x08,0xab,0x50,0xc6,0xd3,0x08,0x7c,0xc1,0x4f,0x77,0xcd,0x1a,0xc6,0xed,0x35,0xea,0x4e,0x8a,0x6a,0x38 +.byte 0xa3,0xa3,0xd8,0xa9,0xa2,0x68,0xa7,0xd8,0xe0,0xc8,0x3f,0xfe,0xe7,0x73,0xc6,0x6b,0xd8,0x0c,0xd5,0x8f,0x81,0xe7,0x37,0x08,0x93,0x28,0x73,0xef,0xc4,0x91,0x52,0xa5,0x30,0xff,0x47,0x95,0x02,0x0d,0x8c,0xfd,0xc9,0x28,0x60,0xa9,0xad,0x30,0x00,0xcc,0x3a,0x00,0xbb,0x25,0xab,0xd0,0xf8,0x25,0x46,0x20,0xc0,0x67,0x9b,0xd6,0x10,0xa6 +.byte 0x84,0x6f,0x66,0x60,0x66,0x75,0xb6,0xfb,0x39,0x3a,0x9f,0x7d,0x32,0x7f,0x12,0x6f,0x8c,0xed,0x79,0x40,0x47,0xa3,0x27,0x17,0xa8,0xa4,0x02,0x93,0xb9,0x32,0x03,0x34,0x06,0x76,0x71,0x40,0x90,0x2b,0xe7,0xd0,0x3f,0x59,0xa7,0xfb,0x3a,0x7b,0xc8,0xa5,0x86,0x21,0x0d,0xf6,0xc6,0x49,0x07,0x56,0xe9,0xfc,0xac,0x61,0x30,0xa5,0x7e,0x90 +.byte 0x10,0xc8,0xdb,0x15,0x2b,0x75,0x27,0x77,0x51,0x42,0xcf,0x50,0xe8,0x6c,0x0b,0xb7,0x17,0x1a,0x89,0x7d,0xfe,0xd2,0x75,0xfa,0xb7,0xe5,0x68,0x10,0x1c,0x27,0x85,0x8b,0x52,0x7d,0x87,0x57,0x50,0x77,0x25,0x9d,0xcc,0x08,0x6a,0xad,0x63,0xf8,0x8e,0xe0,0x21,0x62,0x56,0x48,0x29,0xed,0x81,0x1d,0x6b,0x60,0x55,0x78,0x6a,0xce,0xd6,0x79 +.byte 0xe1,0x66,0x18,0x9f,0x71,0xf7,0x0c,0xec,0x35,0x53,0xef,0x39,0xfe,0x57,0x71,0xc0,0x49,0x4b,0x55,0xe8,0x3d,0x9b,0xe3,0x9a,0xbb,0xf8,0x61,0x31,0xa1,0x94,0x94,0x8a,0xb1,0xd2,0x0f,0x01,0xe0,0xd4,0x26,0xa0,0x59,0x70,0xd0,0x5e,0xb8,0x6f,0x63,0x7b,0x71,0x49,0xe1,0x98,0xfb,0xdb,0x22,0x26,0x18,0x16,0x31,0x08,0x90,0x32,0xd5,0x7a +.byte 0xc0,0xd8,0xeb,0xae,0x93,0x3d,0x46,0xeb,0x0e,0xdd,0x08,0xa2,0xde,0x4e,0xc1,0x88,0x26,0xc2,0xf8,0xc6,0x5e,0x8a,0x9b,0x0d,0x9f,0x2b,0xcf,0x4e,0x13,0x43,0x4a,0x65,0xf6,0x47,0x1a,0x0a,0xae,0xf9,0x9f,0x7c,0xc5,0x18,0x65,0x09,0xcb,0x85,0x7d,0x33,0x36,0x43,0x19,0x99,0x20,0xa2,0x64,0xb2,0xf5,0x20,0xd2,0x74,0xc6,0x2c,0x29,0x46 +.byte 0xde,0xa7,0x4a,0x7f,0x3b,0x05,0x3e,0x11,0xb6,0xc1,0x98,0xfb,0xf5,0x9d,0x93,0x95,0x76,0x11,0x80,0x41,0x44,0xd3,0x2f,0xf4,0xfd,0x92,0x1e,0xd7,0xa7,0x5f,0x02,0x4a,0xbc,0xb7,0x96,0x33,0xc0,0x0d,0x2d,0x97,0xb8,0xd4,0x67,0x7a,0x4c,0x74,0x93,0xa7,0x8d,0x68,0x78,0xed,0xc8,0xc9,0x02,0x6e,0xae,0x10,0x97,0x7c,0x56,0x11,0x2a,0x29 +.byte 0x87,0x5c,0x21,0xec,0x75,0x9c,0x17,0x17,0x8d,0x45,0x08,0x31,0x36,0x64,0xc0,0xf7,0x95,0xb6,0x72,0xcf,0xac,0xd8,0x52,0x02,0x6f,0x3b,0x14,0x34,0x30,0xcc,0x39,0x7c,0xe4,0x1f,0x38,0x23,0xcf,0x1f,0xb7,0x7e,0x92,0x66,0xf7,0xda,0x9f,0x27,0xbb,0x83,0x45,0x71,0x67,0x63,0x6c,0x85,0x64,0x34,0xa8,0x93,0x5a,0x13,0x0c,0xff,0x8b,0x3a +.byte 0x2a,0x10,0x1d,0xb6,0x43,0xef,0x57,0xf3,0xf0,0x29,0x2e,0x59,0x72,0x2e,0xc3,0xb6,0xd3,0xd0,0xdd,0x17,0x19,0x82,0x49,0x05,0xd4,0xfc,0xd6,0x2e,0x5d,0xd7,0x0c,0xb6,0x18,0xd5,0x08,0xbb,0xe5,0x3b,0x2e,0x85,0x62,0xc0,0x1e,0xa3,0xb8,0x92,0x21,0x06,0xfa,0xf1,0x2d,0xab,0x62,0x67,0x62,0xee,0x13,0x7f,0x07,0xb6,0x24,0x64,0x94,0x4f +.byte 0x69,0xb9,0x7a,0xdc,0x23,0x5e,0x19,0x96,0xc5,0x4d,0xcb,0xee,0x2d,0x4a,0x7d,0x1d,0xd2,0x72,0x18,0x8f,0x43,0x8f,0x76,0xbf,0x30,0xd8,0xf1,0xfe,0x9c,0xe7,0x63,0x38,0xff,0x1a,0x3f,0x40,0xbd,0x73,0x66,0xf7,0xa9,0xd9,0x17,0x4a,0x8a,0x79,0x04,0x0e,0x20,0xe1,0x39,0x49,0xd9,0x30,0x9c,0x52,0xf9,0x14,0x8f,0xdc,0x9d,0x52,0xd5,0x34 +.byte 0xaa,0x58,0xfe,0x5d,0x68,0xcb,0xab,0x3b,0x3c,0x9e,0x25,0xde,0x6d,0xdd,0x58,0x0d,0x1b,0x99,0xa9,0xcc,0x26,0x4e,0xc0,0x3c,0x8b,0x1e,0xaa,0x52,0x3d,0x4d,0xb8,0x27,0xc1,0xd1,0xa2,0xaa,0x78,0xb9,0xee,0x5f,0x26,0x46,0x5f,0x41,0x0d,0xe1,0x70,0x7d,0xcd,0x3f,0x4a,0xca,0xb2,0xca,0x2f,0x36,0x1f,0x68,0xe6,0x66,0x8a,0xf6,0xe3,0x94 +.byte 0xe5,0xab,0x90,0xeb,0x2f,0xe8,0xb2,0x6c,0xa9,0x69,0xd2,0xe0,0x5f,0x4a,0x65,0xa8,0x6b,0xc1,0xfb,0x03,0x51,0x17,0x3b,0xf8,0xe0,0x67,0xc3,0x5a,0xe8,0x18,0xdf,0xc1,0xf8,0x7f,0x44,0x68,0x4a,0x01,0xbe,0xf8,0xa5,0x7a,0xb9,0x3b,0x0f,0x05,0x8e,0x4b,0x28,0x14,0x61,0x2f,0x2e,0xc7,0xf2,0x96,0xc7,0x60,0x99,0xc4,0xbf,0xe8,0x37,0x98 +.byte 0x00,0x34,0xf7,0x5a,0xd7,0x6f,0x90,0xc4,0x19,0xb5,0x07,0xd1,0x76,0x6e,0x65,0xcc,0xf6,0x51,0x88,0x5c,0x81,0x91,0xa8,0x4d,0xb7,0x33,0x53,0xb6,0x93,0x42,0x52,0x82,0xfa,0x2b,0xca,0xa0,0xbd,0xf3,0x09,0x2b,0x0f,0x09,0x02,0xdd,0x29,0x5f,0xa6,0x49,0x7b,0x97,0xe8,0x96,0xbf,0x6f,0x76,0xb7,0xa2,0x76,0x58,0xda,0x1d,0xb2,0xdb,0x6d +.byte 0x9d,0x3b,0x32,0x6e,0x9c,0xea,0x45,0xfd,0x33,0xeb,0x41,0x91,0x91,0x52,0x2b,0x68,0xa3,0xf3,0xc6,0x92,0x43,0x13,0x49,0x8a,0x10,0xb1,0x2f,0x9a,0x0f,0xe1,0x94,0x21,0x18,0x76,0x87,0xaf,0x50,0xe4,0x71,0x5d,0x0a,0xba,0x75,0xaa,0x17,0xf5,0x37,0xf2,0x84,0x9b,0x29,0xdf,0x44,0x60,0xd0,0xac,0xcf,0x25,0x87,0x66,0x64,0x1f,0x0d,0xba +.byte 0xb3,0xdb,0x14,0xb6,0x1f,0x00,0x70,0x98,0x83,0x1d,0x9e,0xbd,0xf9,0x17,0xf4,0x57,0xae,0xa8,0xae,0x7b,0xa7,0xde,0x1f,0x31,0xc6,0x29,0xb2,0xf7,0xef,0x36,0x31,0xe7,0x50,0x33,0x69,0x4e,0x8c,0xb5,0xe4,0xdd,0x74,0x87,0xc8,0xf5,0x22,0x1b,0x4b,0xec,0xc4,0xe1,0x5a,0x7d,0x5a,0xe8,0xb9,0x2f,0xf4,0xd1,0x83,0xa2,0xb7,0x97,0xe0,0x1e +.byte 0xf7,0x3a,0x74,0xef,0x5f,0xb3,0x30,0xce,0xfa,0x23,0xd5,0x98,0x56,0x19,0x24,0xb5,0xc7,0x60,0x8b,0x03,0x8e,0xe7,0xdf,0x2c,0x36,0x4c,0x3b,0x3b,0x84,0x45,0x97,0x40,0x29,0x30,0x98,0xc3,0xc0,0xa2,0xf0,0xdf,0x69,0x47,0x95,0x26,0xdb,0x6c,0xcc,0xff,0x2d,0x32,0xaa,0xa7,0xb8,0x6b,0x24,0xec,0xff,0x94,0x4d,0x36,0xdd,0x7b,0x4d,0xc5 +.byte 0x8d,0xe2,0x3c,0x14,0x5a,0x37,0x75,0x1f,0xd6,0x98,0x7d,0xd3,0xdc,0xb0,0x24,0x69,0xe7,0x65,0x60,0x2a,0xe7,0x00,0x5b,0x68,0x99,0xa0,0x9e,0x10,0xf0,0x5c,0xa8,0x39,0x85,0x59,0xde,0xe4,0x46,0xf3,0xde,0xda,0xc0,0xb1,0xd2,0xf1,0xd2,0x05,0xd5,0xd4,0x2c,0x2e,0x7e,0x44,0x5c,0x52,0x80,0x85,0xbb,0x54,0x97,0xb6,0xad,0x6d,0x57,0x49 +.byte 0xed,0x67,0xaf,0x27,0xb4,0x5b,0xce,0x0f,0x3c,0x58,0xa2,0x24,0x22,0xa2,0xcb,0xfc,0x4e,0x8e,0xc2,0x3c,0x32,0xc6,0x07,0xc4,0xc6,0xc0,0x50,0xc3,0xe3,0x1b,0x96,0x76,0x62,0xf9,0xea,0x5e,0xdc,0xc5,0x96,0xe8,0xaa,0x20,0x26,0xac,0x44,0xfb,0xf2,0x16,0x72,0x72,0x4c,0x5c,0xee,0x51,0x07,0xb0,0x74,0xf6,0xde,0xd7,0x5d,0x73,0xf4,0xe9 +.byte 0x0d,0x29,0x06,0x5f,0xca,0xe2,0xbb,0xa4,0x3e,0xdc,0xf7,0x74,0x99,0x53,0x7a,0x52,0x60,0x46,0xaa,0xf0,0x34,0x97,0x0c,0x81,0x5b,0xd8,0x95,0x52,0x76,0x55,0xcb,0xc4,0x6d,0x50,0x26,0x3f,0x7e,0xc2,0x93,0x6e,0x14,0x0c,0xd7,0x49,0x5f,0x52,0x8f,0x34,0x49,0xb4,0xe7,0x12,0xfe,0xae,0xd1,0xfa,0xfc,0xc5,0x80,0x38,0x26,0x9c,0xf1,0x81 +.byte 0x01,0x58,0x15,0x99,0x29,0x8d,0x1b,0x2d,0x74,0xca,0xf1,0xf4,0xfa,0xcd,0xae,0xfa,0xa9,0x1d,0xbb,0xf1,0x55,0x2e,0x69,0x46,0x6e,0xe4,0x91,0xa3,0x48,0xb5,0xaa,0xb3,0x85,0xab,0x14,0xd2,0x84,0x8c,0xb1,0xb6,0x0c,0xa5,0x4a,0x90,0xed,0x6e,0xdf,0x1e,0x15,0x36,0x7b,0xa3,0x59,0xd6,0x8d,0x7d,0x7b,0x12,0x7c,0x9a,0x40,0x8a,0x28,0xde +.byte 0xb5,0xbc,0xc4,0x52,0x96,0xfb,0x62,0x1f,0xc9,0xe0,0xc9,0x1d,0xc7,0xc4,0xcb,0x8a,0x96,0x21,0x42,0x7c,0x0a,0xdd,0x42,0x74,0xcf,0xc4,0x57,0x8f,0x28,0x0a,0x7c,0x4f,0x49,0x5a,0xc6,0x21,0xb2,0xd4,0xd0,0x61,0xa5,0x35,0xbd,0x4a,0x0c,0x16,0x68,0x1f,0xe3,0xff,0x3f,0x72,0xf0,0x1d,0x50,0x26,0x48,0x91,0x27,0x1b,0x2b,0x0d,0x8b,0xf2 +.byte 0xa0,0xc0,0xa0,0x5d,0xdb,0xcf,0x71,0x41,0x83,0x00,0xb9,0x3c,0xe0,0x4a,0x96,0x43,0xf8,0x64,0x0f,0x42,0xc5,0x75,0xec,0x26,0x62,0x99,0x13,0xeb,0xf9,0xa6,0x86,0xe4,0xc9,0xaf,0x3c,0x2c,0xc9,0x4f,0x89,0xf4,0xc0,0x46,0x99,0xb8,0xd1,0x9e,0x7b,0xb7,0x41,0x0a,0x5f,0x40,0x98,0x65,0x29,0xdd,0x60,0x6b,0x27,0xbf,0x66,0x08,0x32,0xc2 +.byte 0xcf,0xea,0x91,0x44,0x45,0x49,0x1c,0xb4,0x16,0x7f,0x11,0x1a,0x8c,0xb4,0x59,0x54,0xc6,0xcf,0x40,0xd2,0xe9,0xc1,0x54,0x9c,0xe2,0x6e,0xd5,0xfe,0xfb,0x4a,0xa3,0x98,0x63,0xef,0x86,0xe0,0x63,0x30,0x32,0x5a,0xbd,0xd4,0x7c,0xe8,0xbe,0xf1,0xed,0xa2,0x19,0x98,0xc8,0x34,0x65,0x4c,0xef,0x1a,0xb3,0xbc,0x87,0xbe,0x6b,0x75,0x2c,0xe5 +.byte 0x54,0xcc,0xe5,0x69,0xb2,0xc8,0xdb,0x57,0xf8,0xa7,0x82,0x07,0xf7,0x20,0x95,0x7f,0x6d,0x7b,0x33,0x66,0x67,0xa1,0x38,0x0e,0x9c,0x3b,0x22,0xab,0xc1,0xd3,0xed,0x87,0x32,0xfb,0x4a,0x5d,0xad,0x3a,0xe1,0x90,0xa6,0xe3,0x4d,0x6b,0x00,0xe4,0x5c,0x66,0x59,0x90,0x63,0x24,0x5b,0xe1,0x3b,0x69,0xb6,0xc9,0x05,0x83,0x3a,0x7b,0xf4,0xa5 +.byte 0xc8,0x47,0xf9,0x8e,0xab,0x92,0xbd,0xd3,0x41,0xc7,0x61,0xf4,0xce,0x30,0xdb,0xae,0x27,0x69,0x0f,0xcc,0x69,0x50,0xe8,0x18,0xf2,0x39,0x04,0x5a,0x29,0x12,0x61,0x46,0x5c,0x1b,0x2e,0x15,0x9c,0xfa,0x73,0x50,0xe3,0x51,0xda,0x4d,0x88,0x25,0xb2,0xff,0x55,0x27,0xce,0x86,0xca,0xe6,0x2a,0xb8,0x0c,0xa7,0xd0,0x06,0xbf,0x70,0xb5,0x6b +.byte 0x80,0x44,0x65,0x5d,0x23,0xfa,0x0d,0x74,0x5c,0xfc,0xc7,0x86,0x5e,0x23,0x8a,0xf1,0xff,0x80,0xf0,0x19,0xaa,0x98,0xae,0x56,0xcf,0x12,0x74,0x6c,0x70,0xb2,0x39,0xbe,0x66,0x71,0xee,0xe3,0x43,0x3b,0xfa,0x79,0xa9,0x7e,0x69,0x6a,0x19,0x42,0xd5,0x0e,0x1e,0x92,0xfe,0x8a,0x0f,0xca,0x74,0xf2,0x68,0x71,0xf5,0xcb,0x05,0x94,0xc1,0x06 +.byte 0x1b,0xae,0x55,0xe9,0x16,0x03,0xa9,0x97,0xad,0x49,0xaf,0x88,0x8c,0x26,0x33,0x4d,0x46,0x75,0xb3,0x9c,0xee,0x70,0xe1,0x57,0x43,0xeb,0x59,0xff,0x77,0x89,0x8a,0x77,0x3f,0x7e,0xe6,0xbe,0xa2,0x05,0xb1,0xe3,0x41,0x5e,0xc7,0xd4,0x14,0xda,0xc0,0x84,0xd0,0x05,0x50,0xdd,0x62,0xdb,0x4c,0x3b,0x16,0xb0,0xe0,0xf5,0x2b,0xf1,0x83,0xea +.byte 0x7b,0x89,0xbb,0xde,0x57,0xdb,0xc0,0xb9,0x7d,0xdf,0x53,0x0f,0x6c,0xc5,0x5a,0x0b,0x36,0xeb,0xa3,0xc3,0xe6,0xc5,0x80,0x98,0xf3,0x87,0x29,0x97,0xc9,0x2e,0xd6,0x3b,0x43,0x2a,0x36,0x3b,0xba,0x43,0x85,0xf5,0x0d,0x18,0x2e,0x78,0x43,0xae,0xa4,0x24,0x6d,0xdc,0xab,0x05,0x94,0x09,0x94,0x27,0x17,0xef,0xbc,0x7e,0x52,0xa4,0x80,0xda +.byte 0x28,0xf5,0xc3,0x20,0x99,0xbb,0x5d,0xb6,0x7e,0x0e,0x59,0x3b,0x5e,0x1d,0x1b,0x4f,0xd1,0x91,0xe4,0xe4,0xc7,0x35,0xc7,0x2e,0xc1,0xba,0x60,0x05,0xa4,0xd5,0xca,0x5f,0x09,0xbf,0x79,0x06,0xcb,0xa7,0x32,0x7c,0xf4,0xdc,0xa8,0xb3,0x8b,0x26,0x59,0x6d,0xcb,0x74,0x37,0x56,0x51,0x96,0x0b,0x44,0xf1,0x95,0x16,0xe3,0x9b,0x9b,0x3b,0xb3 +.byte 0xea,0x6a,0x1b,0x76,0x99,0x69,0xd6,0x5b,0x10,0x5a,0x91,0x23,0xb5,0xc3,0xf9,0x6a,0xba,0xc4,0xe6,0x18,0x28,0x50,0x9d,0x09,0x14,0xbe,0xed,0x73,0xd2,0x51,0xff,0xf8,0x14,0x2b,0x8b,0xdd,0x2a,0x1a,0x8e,0x48,0xae,0xd8,0xdf,0xb9,0x5b,0xcb,0x8f,0xc2,0x8c,0xd6,0xb3,0xfb,0x40,0x2f,0xb0,0x6c,0x9a,0xea,0xd0,0x14,0x8c,0xc5,0xc7,0xc7 +.byte 0xf8,0xf5,0x4f,0xe2,0xd7,0x41,0xcd,0xb6,0x34,0x3e,0x81,0x19,0x09,0xa2,0x51,0xb4,0x60,0xfb,0xf2,0x6c,0xe6,0xae,0x68,0x47,0xb9,0x93,0x7b,0xc9,0xe7,0x00,0xc4,0xa7,0xf2,0xef,0x8b,0xd8,0xfc,0x9f,0xe5,0x6d,0x48,0xe2,0x6c,0x32,0x73,0x5c,0x30,0x7c,0x12,0x13,0xca,0xc3,0x31,0xc3,0xa2,0xb4,0xf7,0x23,0xc4,0xd0,0x47,0x39,0x93,0xc8 +.byte 0xa0,0x7b,0xb4,0x09,0x3f,0xe8,0x15,0x15,0x9c,0xa7,0xe6,0xa8,0xbe,0xba,0x60,0xf9,0x28,0x88,0x66,0x7b,0x62,0x32,0x17,0x18,0x68,0x87,0x53,0xf5,0xbc,0xf5,0x77,0x17,0xa1,0x3f,0x62,0xd1,0x10,0x0a,0x54,0x96,0x9c,0x31,0xc3,0xb7,0x1d,0xaf,0xc7,0xb3,0x27,0x9e,0x46,0xfe,0x7e,0x9b,0x88,0xf2,0x9e,0x6e,0x19,0x0f,0xb1,0x88,0xe4,0x08 +.byte 0x76,0x7c,0x77,0x46,0x09,0xa7,0x9e,0xf4,0xd9,0xbf,0x67,0xe8,0x9d,0x6a,0x75,0xa7,0xf5,0xee,0x29,0xba,0x84,0xa0,0x44,0x46,0x35,0x4c,0x22,0xef,0xb3,0xea,0xb0,0xf2,0xd6,0x78,0x20,0x97,0x28,0x5c,0x7e,0x90,0x06,0x80,0x19,0x63,0xa4,0x8a,0xef,0x0a,0xea,0x88,0xa9,0xa2,0xae,0x23,0x2e,0x40,0xce,0xc5,0xc2,0xbf,0xfe,0x5a,0x8f,0x14 +.byte 0xb8,0x66,0x1a,0x2d,0xdb,0x43,0x39,0xbd,0xe7,0x7b,0xbc,0x41,0x58,0x74,0x56,0xd1,0xe7,0xd0,0xba,0x24,0xd2,0x41,0xbf,0xd0,0x4e,0x97,0x38,0x8f,0x6b,0x6f,0xe2,0x7d,0x6d,0x32,0x94,0x43,0xa7,0x66,0xf7,0x90,0x21,0xe0,0xdd,0x19,0x48,0x72,0xc1,0xa5,0xbc,0x9c,0xe2,0xdd,0x2c,0x6e,0x50,0x45,0x2c,0xa0,0x95,0xcb,0x1d,0x2c,0x1d,0xa6 +.byte 0xbe,0x9c,0xd4,0x6c,0x07,0x2e,0x5e,0xc8,0xc1,0x05,0x61,0x7d,0x44,0x28,0xe6,0xad,0xf0,0x9d,0x2d,0x3d,0xce,0x90,0x7d,0x79,0x2e,0xf3,0x08,0xbe,0x7a,0xa9,0x58,0x04,0xa7,0x39,0x05,0xdd,0xb4,0x87,0x6c,0x7b,0xd5,0xb3,0x2d,0x6b,0x43,0xf4,0x37,0xd9,0x6f,0x5c,0xa2,0x23,0x92,0x53,0xb9,0xd7,0x1b,0x2d,0x5d,0xcd,0x6d,0x3f,0xef,0xc8 +.byte 0x66,0x91,0x10,0x1b,0xc5,0x24,0x50,0x87,0x70,0x93,0x03,0x3f,0x7b,0x40,0xc8,0x0c,0x9b,0xec,0x3d,0x82,0x27,0x96,0x2a,0xbe,0xca,0xaf,0x1b,0xbf,0xef,0x14,0x0c,0xdc,0xa6,0xc7,0x48,0x18,0xce,0x8e,0x43,0x58,0x97,0xb3,0x5e,0xd6,0xc9,0x70,0x65,0xd0,0x0e,0x17,0xac,0xa0,0x6b,0xc9,0x55,0x30,0x12,0x7c,0xbe,0xe5,0x46,0xfc,0xd8,0x3f +.byte 0x0e,0xd7,0x96,0x16,0x32,0x8e,0xb7,0x2d,0x07,0xd1,0x26,0x98,0x70,0x4c,0xb1,0x6f,0x92,0x32,0x75,0x4f,0x57,0x6b,0x78,0xe0,0xc5,0x9b,0xf0,0x08,0x59,0x0b,0xfa,0x2d,0x79,0xbe,0xde,0x44,0x3d,0x65,0x77,0x27,0x3b,0xd9,0xea,0x55,0x79,0x22,0xe8,0xf7,0x62,0xb1,0xe3,0x32,0x4e,0x03,0x17,0x65,0xd3,0x5d,0xee,0xa0,0x9b,0xc2,0xbd,0x9f +.byte 0xcd,0xdc,0xde,0xd7,0x6c,0x95,0x7a,0xf1,0x09,0x4c,0x14,0xb9,0x37,0x1d,0xd0,0xdd,0x4b,0x2e,0x93,0x0b,0xfa,0x08,0x40,0x01,0x36,0xdf,0x89,0x46,0xa6,0xbb,0x19,0xd9,0x4f,0xf9,0xe1,0x7b,0x03,0xc9,0xef,0x01,0x25,0xe9,0x6d,0x95,0x84,0x7f,0xf8,0x8e,0x02,0xfd,0x6f,0x30,0xed,0x1b,0x98,0xd0,0xb3,0xdd,0x92,0x65,0x46,0x49,0x61,0xde +.byte 0x76,0xf5,0x4b,0x29,0x03,0x6f,0x79,0xee,0xbe,0x7a,0x07,0x6e,0xa8,0x29,0xb8,0x03,0xb4,0x6c,0x50,0x1f,0x4a,0xa2,0xaf,0xbd,0xde,0x18,0x72,0x90,0xa2,0x12,0xa9,0x59,0x7b,0xf6,0x96,0x2d,0xda,0x3d,0x90,0xba,0x7c,0x79,0x3e,0x6e,0xef,0x94,0x37,0xe2,0xef,0x6b,0x2a,0x74,0x6b,0x52,0xa0,0xc2,0x1e,0xa1,0x24,0x59,0x84,0xeb,0xdc,0xd0 +.byte 0x34,0x60,0xa8,0x81,0xaf,0xdd,0x57,0xc2,0xa6,0x02,0x7f,0xcf,0x9e,0x64,0x28,0x18,0x7c,0x95,0x98,0x90,0x7a,0x76,0x3f,0x78,0x16,0x2c,0xe0,0xa7,0xdf,0x0d,0x4d,0x5e,0xcc,0x0d,0x73,0x12,0x26,0xd7,0xe9,0x32,0x3e,0xa1,0xa9,0xde,0x29,0xb2,0x3b,0x6f,0x3b,0x6e,0x12,0x0c,0x10,0x34,0x86,0xf2,0xa0,0xd4,0x9c,0xf6,0x14,0x5a,0x41,0x06 +.byte 0x31,0xb1,0xe4,0x31,0x52,0xf4,0xcb,0xe3,0x39,0xcd,0x0b,0xc2,0xca,0x90,0xba,0xb3,0x21,0xbf,0x94,0x13,0x75,0x3b,0x0e,0x0a,0xc0,0x05,0x35,0xe6,0x28,0x74,0x63,0xc5,0x34,0x44,0xd8,0x9a,0x0e,0xec,0xb3,0x1b,0x30,0x58,0xfc,0xa0,0xc4,0xd1,0x26,0x50,0x6b,0x22,0x88,0xfc,0xad,0xa9,0xb4,0x3e,0x36,0xb6,0xb1,0x6d,0x62,0x7e,0x60,0x8f +.byte 0xf5,0x17,0x65,0x1c,0xf6,0x51,0x4d,0x89,0x4a,0x7e,0x5d,0x23,0x3b,0x83,0x1f,0xa6,0xc8,0xd2,0x1a,0x90,0xd3,0x53,0xfc,0x48,0x64,0x94,0x6e,0x1c,0x72,0xef,0x5d,0xd4,0x23,0xa2,0x3a,0x93,0xe4,0x29,0x33,0x8a,0xbd,0xe5,0x17,0xc2,0xe9,0x18,0x6a,0x81,0x1e,0x5b,0x03,0x41,0x45,0x35,0x14,0xe7,0xc8,0x45,0x5c,0x37,0x69,0x77,0x62,0xf8 +.byte 0xd7,0xec,0x9d,0x62,0x2e,0xfa,0x43,0x3a,0xdc,0x8b,0x86,0x86,0x1b,0x31,0x71,0x0e,0x92,0x59,0xf7,0xef,0x96,0xfd,0x04,0x1e,0x1d,0x74,0x7d,0x08,0x06,0x21,0x54,0x39,0xd3,0x9f,0x30,0xa1,0x19,0x7f,0xc8,0x19,0x16,0xd1,0x21,0x2a,0xf3,0x21,0xce,0x19,0x1a,0xde,0x70,0x1b,0x87,0x05,0x9e,0xe8,0xf3,0xfd,0x1d,0xaa,0x61,0x6c,0xfb,0xdf +.byte 0x50,0x9a,0xa0,0x32,0x4e,0xe4,0x68,0xda,0x0e,0x2f,0x2a,0x70,0xe1,0x51,0x66,0xb4,0x2d,0x5b,0xb6,0x32,0x3f,0xcb,0xc0,0xaf,0x01,0x03,0xcd,0xd6,0xb8,0x4e,0x3d,0x24,0x17,0xe2,0x30,0x3b,0xa4,0x08,0x0e,0x6a,0xcf,0xbe,0xc2,0x5c,0x79,0x5d,0x25,0xe2,0xae,0xa7,0x7f,0x42,0xff,0xa9,0xa5,0x05,0xbf,0xf4,0x92,0x30,0xaa,0x1d,0x96,0x7a +.byte 0x49,0xbc,0x1c,0xaa,0x5c,0x8d,0xe8,0xf3,0xd3,0x1a,0x67,0x7f,0x47,0x09,0x90,0x35,0x82,0x4e,0xcc,0x2e,0x50,0xfe,0x2c,0xb9,0x29,0x39,0xff,0x49,0x8f,0x7e,0x89,0x8d,0x4a,0x15,0xd1,0xd6,0x83,0xdb,0x25,0xac,0xc1,0x81,0x23,0x70,0x3f,0xb9,0xce,0x7f,0x03,0x46,0xa8,0x39,0xab,0xff,0x71,0xc9,0x7b,0x3c,0xb3,0x5e,0x9f,0xfe,0x8a,0x0a +.byte 0x39,0xad,0x6a,0xc1,0x8e,0x5a,0xa8,0x71,0xb7,0x01,0x25,0x28,0x15,0xd9,0x0a,0xae,0xc1,0xf9,0x23,0x1c,0xc1,0xe8,0x86,0x1d,0xb8,0x71,0x6e,0xa2,0xa4,0x67,0x22,0x4d,0x0e,0xd2,0xaa,0x70,0x26,0x23,0xfc,0x15,0xed,0x67,0x11,0x87,0x69,0x6f,0xc6,0x4c,0xe1,0x4b,0x04,0x86,0xe9,0x56,0x40,0xea,0x07,0xb1,0x6f,0xe9,0x8f,0xdd,0x2f,0xce +.byte 0x8d,0xca,0x0a,0x58,0x01,0x44,0x2c,0x74,0xd0,0x14,0x07,0x9a,0xb7,0x5a,0xc1,0xea,0xa9,0xdd,0xa4,0x94,0x84,0xc2,0x11,0xa5,0xe2,0x00,0xd8,0xfc,0x77,0xb9,0x5e,0xe6,0x72,0xef,0xc5,0x38,0xe0,0x90,0x11,0x16,0xfd,0xa7,0x77,0xbd,0x4c,0x1d,0xeb,0x32,0x54,0xdb,0x2a,0x43,0xa1,0x87,0xbb,0x2e,0x79,0x22,0x4d,0xb3,0xdf,0x1a,0xee,0x75 +.byte 0xb0,0xdd,0xf2,0x09,0x05,0xf4,0x6a,0x3c,0x86,0xc6,0xe7,0x60,0x2a,0xee,0xb6,0x55,0xae,0xdc,0xce,0xf8,0xe4,0xd7,0xdf,0x72,0x42,0x91,0x6d,0xc4,0xd8,0x60,0xf1,0xe8,0x06,0x71,0x38,0xa3,0x03,0x3e,0x1b,0x14,0x47,0x74,0x93,0xb5,0x61,0x28,0xde,0x23,0x8f,0xbe,0x88,0x5e,0xdf,0x87,0x47,0xd4,0x5f,0x91,0x40,0xeb,0x02,0xda,0x27,0x3b +.byte 0x65,0x9f,0xd8,0xf1,0x78,0x7f,0xba,0x9b,0x35,0xb3,0x10,0xaf,0x7f,0x51,0x37,0xa5,0x63,0x64,0x1f,0xf1,0xc3,0x1b,0x9e,0xe4,0xdd,0x93,0x8c,0x3a,0x98,0x20,0x9a,0x75,0x22,0x7b,0x48,0x0a,0x9d,0x55,0xed,0x07,0x1a,0x79,0x3b,0x98,0xe3,0x16,0x9b,0x16,0x2c,0xb2,0x03,0xc1,0xf5,0x6c,0xac,0x00,0x6a,0xb6,0xc1,0xc2,0x49,0x4d,0x9d,0xf5 +.byte 0x0e,0x7b,0x60,0x09,0xcc,0xa7,0x35,0xbb,0x70,0x34,0x18,0x49,0x2c,0xf1,0x41,0x4f,0xce,0x68,0x03,0x60,0x14,0xa7,0x2e,0x59,0x0f,0xa2,0xc4,0x2f,0x33,0xf0,0xb6,0xa4,0x31,0x75,0xdc,0xb4,0x88,0xe4,0xe3,0x0e,0x4b,0x3f,0x58,0xd0,0xa4,0xea,0x9a,0xef,0x47,0xb7,0xf7,0x20,0x71,0x52,0xd3,0x8a,0x1c,0xd9,0x2d,0x88,0x05,0x03,0x8a,0x1c +.byte 0x3d,0x69,0xf0,0x39,0xf0,0x25,0xad,0x95,0xd4,0x47,0x3c,0xbb,0xfa,0x48,0xd7,0x8e,0xf5,0xdc,0x33,0x43,0x0a,0xbb,0xf0,0xd3,0xb1,0xc3,0x94,0x81,0xcd,0x22,0x79,0xdc,0xd0,0x92,0x8b,0xd3,0xc3,0xac,0x73,0x72,0x83,0xaa,0xa2,0x52,0x13,0x27,0x0e,0xc5,0x8c,0xa5,0x69,0x21,0x6e,0x9c,0x9d,0x9b,0xeb,0x7a,0x19,0xfe,0xb6,0xdb,0x4e,0xc1 +.byte 0xa6,0xec,0x42,0xb0,0x86,0x69,0x60,0xde,0x36,0x11,0x6a,0x86,0xd7,0xbf,0x15,0x48,0xa2,0x73,0x8f,0x68,0xde,0xd6,0xb2,0x6d,0xe0,0xc5,0x1f,0x1f,0xd5,0xc5,0xef,0xce,0xa1,0x90,0x5c,0xe6,0x6c,0x15,0x73,0xa7,0xcc,0x2d,0xe8,0xcf,0x4c,0xc8,0x17,0x3c,0xfa,0x5e,0xdb,0x4f,0x54,0xf3,0xa3,0xff,0x50,0x3e,0x42,0x60,0x0d,0xf3,0xf7,0xbb +.byte 0xc6,0xf5,0xe7,0x63,0x50,0x49,0xc1,0x94,0x60,0x68,0xbd,0x62,0xc0,0x81,0x80,0x16,0xfd,0x65,0xfb,0x2e,0x23,0x67,0xb3,0xb6,0xf8,0x95,0xfa,0x00,0x3f,0x1d,0x10,0x16,0xd5,0xd9,0x66,0xf8,0x25,0xb4,0xce,0xf2,0x2e,0x4f,0xa2,0x21,0x14,0xbd,0x2c,0x63,0xec,0x44,0x57,0x07,0x87,0x3c,0x2f,0x22,0xcf,0x48,0xd3,0x20,0x51,0xfc,0x5d,0xd5 +.byte 0x9f,0x67,0x9c,0xaf,0xe3,0x89,0x36,0xc5,0xfa,0x7c,0xca,0x07,0xdc,0x56,0x2a,0x4e,0xa5,0x76,0xe6,0x09,0x99,0xfb,0xb7,0xba,0xaa,0x0b,0x9c,0xe2,0x0f,0x73,0xab,0x9b,0xbe,0x6f,0x50,0xe3,0xf7,0x28,0x32,0xf2,0xab,0x86,0xa3,0x89,0x3a,0xea,0xd7,0x52,0x52,0x6e,0xed,0x1b,0x94,0xf0,0x59,0x9d,0xbb,0x7a,0x88,0x6f,0xbf,0xaf,0x6a,0x87 +.byte 0x47,0x34,0x7f,0xf4,0x8b,0x0d,0x33,0x12,0x2b,0x67,0x6b,0xc9,0x1d,0x18,0x23,0x2e,0x54,0xee,0x07,0x28,0xbd,0x9d,0xa1,0xaf,0x85,0x7a,0x0f,0xe5,0x5d,0xf7,0x8b,0xca,0xd9,0x3d,0x8f,0x4f,0xcc,0xce,0xc3,0x6e,0x3a,0x40,0x08,0xd2,0x14,0xf0,0x28,0x9b,0xc0,0x4a,0x7a,0x3c,0xc2,0xed,0xe0,0x20,0x04,0xf5,0xf9,0xee,0xb8,0x35,0x94,0xbc +.byte 0x53,0x46,0xf2,0x1a,0xab,0xe9,0xde,0xd8,0x27,0x67,0x0d,0x63,0x2a,0x7b,0x3a,0x38,0x91,0xbc,0x48,0x2c,0x38,0x09,0xa0,0xe3,0x66,0xe3,0xeb,0xb9,0x02,0x2d,0x80,0x87,0x81,0x4f,0x5c,0x1c,0xfd,0x2b,0x0f,0x99,0x37,0x3a,0xfa,0x0f,0x8e,0x8c,0x87,0x76,0x72,0xd3,0xcf,0xc8,0x1e,0x8a,0x3b,0x97,0xa0,0xe6,0x32,0x66,0x3c,0x55,0x2c,0xfb +.byte 0xa9,0x41,0xfd,0xf9,0xd4,0x50,0xe0,0x5b,0x03,0xb7,0x1e,0x49,0xfa,0x59,0xeb,0x55,0xb1,0x21,0xd0,0x52,0xeb,0xe6,0x0f,0x21,0x81,0x4f,0x82,0x9a,0x8f,0x67,0x3d,0x0d,0x1d,0x11,0x1f,0x70,0x59,0x09,0x87,0x99,0xe5,0xf2,0x89,0xa6,0x56,0x8d,0x52,0x55,0xa8,0x91,0x5d,0x51,0x48,0xec,0x66,0x05,0xd6,0x18,0xd1,0x61,0x02,0x5a,0x80,0xcc +.byte 0xee,0xf3,0x3b,0x8e,0x73,0x2a,0xb1,0x22,0xda,0x1d,0xca,0xb2,0xd6,0x7f,0xd7,0x7d,0xaf,0x23,0x8d,0xff,0x24,0x8e,0x5e,0x38,0x29,0x23,0x1f,0xbc,0xfd,0xe4,0x3d,0xcd,0x66,0xe3,0xe1,0x0f,0x85,0xe3,0xda,0x34,0xc6,0xba,0x60,0x5f,0xaf,0x32,0x79,0x34,0xc0,0x01,0x93,0xae,0x1e,0x72,0x7f,0xd2,0x32,0xa1,0xdc,0x0b,0xca,0xee,0x5a,0x7a +.byte 0x09,0x98,0x2a,0x46,0x0a,0xe7,0xfd,0x0f,0x76,0xa0,0x3b,0x2b,0x3d,0xe5,0xcd,0x04,0xa2,0x5e,0x9b,0xba,0x4a,0xd5,0x0a,0xce,0x94,0x77,0xbb,0x24,0xa4,0x12,0xbc,0x24,0xb6,0x60,0x40,0x62,0xd2,0x70,0x0e,0x3f,0x62,0x72,0x2f,0xa1,0xc9,0x12,0x03,0x0f,0x39,0x57,0x77,0x7c,0x5c,0x31,0x13,0xcb,0x8c,0x2c,0x84,0xfd,0x7b,0x6f,0x60,0xbb +.byte 0x1a,0x0b,0x65,0x8c,0xc1,0xe6,0x4b,0x60,0x8c,0xe7,0x3e,0x94,0x2a,0xcc,0x70,0x9f,0xd0,0xfd,0x00,0x0e,0x36,0xb2,0xf1,0x62,0x78,0x6a,0xc8,0x9b,0xbe,0x8b,0x54,0xa7,0xad,0xee,0x3e,0x8e,0x1c,0x23,0xbe,0xa2,0x73,0x43,0xbe,0x15,0x32,0x84,0xdd,0x22,0x75,0xd5,0x9a,0xfb,0x93,0x38,0x55,0x2f,0xa4,0x34,0x4c,0x33,0xc3,0xd7,0x7c,0x9f +.byte 0x42,0x2f,0x9f,0xf6,0x27,0x90,0x15,0x6b,0x14,0x4f,0xbc,0x4b,0x07,0x42,0x24,0x98,0xa6,0xc4,0x4c,0x2f,0x22,0xd9,0x80,0x99,0x97,0x6b,0x7d,0xe8,0x2b,0x31,0x37,0xfe,0xd1,0x8b,0xbd,0xbf,0x08,0x4a,0x56,0x3d,0xff,0xb5,0x12,0x6d,0xc4,0xcf,0xbc,0x75,0xe9,0xe6,0x6f,0x1a,0x30,0x34,0x5b,0x2c,0x1d,0x8f,0x85,0xa0,0xe8,0xfd,0xfd,0xe2 +.byte 0xe7,0x13,0x73,0xcd,0x63,0x63,0x90,0xa5,0xa4,0x3f,0x91,0x65,0x77,0xd4,0xed,0x0c,0x1d,0x06,0x95,0x93,0x74,0x85,0xec,0x31,0xde,0xc9,0xb9,0x2e,0x7c,0x6d,0x2c,0x0d,0x15,0xb7,0x6b,0x0c,0xd2,0xe8,0xa8,0xcb,0x90,0x5c,0x11,0x53,0xc5,0x9d,0x54,0xf4,0x90,0xf7,0xc8,0x17,0x65,0xc0,0x3f,0xea,0xf6,0x28,0x8e,0xf0,0x1c,0x51,0xcc,0xfd +.byte 0x99,0x67,0x3d,0xa5,0x82,0x1f,0xb3,0x75,0x08,0x27,0x85,0xa9,0x7b,0x54,0x91,0x6e,0x80,0x9a,0xdb,0x6c,0x17,0x4a,0x36,0x73,0x0e,0x61,0x2e,0x01,0xae,0x32,0xf8,0x54,0xdb,0xcf,0x24,0xa5,0x13,0xb1,0x7e,0x0b,0xf5,0xe7,0x0e,0x27,0x9a,0xef,0x01,0x0b,0x34,0x4f,0x91,0xc2,0x93,0xe0,0xe6,0x14,0x64,0xf8,0x7b,0x41,0x37,0x22,0x39,0xad +.byte 0xf4,0xa9,0x3b,0xfb,0x7e,0x2b,0xd8,0x2b,0x0f,0x7e,0x40,0x55,0x5a,0x48,0x61,0x2f,0x95,0x5e,0x5c,0x25,0xe5,0x06,0x89,0x17,0x23,0xb6,0x1b,0x38,0x2e,0x7b,0x45,0xa5,0x11,0x0a,0x8d,0xd3,0x8d,0xb6,0x8d,0x47,0xc5,0x4f,0x8f,0x8b,0xe2,0x03,0x85,0xa1,0x5a,0xa2,0x8d,0xca,0x4d,0xef,0xc9,0xde,0x7d,0x06,0xa1,0x3f,0x21,0xb9,0x38,0x7b +.byte 0x91,0xf7,0x5c,0x9f,0x97,0xe3,0xeb,0x5d,0xea,0x5e,0xc1,0xa5,0x30,0xb0,0x7f,0xe0,0x4c,0xef,0xe5,0xe3,0xa0,0x2d,0x23,0xb6,0x08,0x21,0xe6,0x67,0x35,0x82,0x07,0x59,0x02,0xd4,0x68,0xa5,0xf1,0x42,0x70,0xb4,0x5e,0x54,0xed,0x1e,0x99,0xb2,0x55,0xf1,0x69,0x2e,0x7c,0xaa,0x6c,0x5e,0xd4,0xfa,0x16,0xa7,0x1f,0xdb,0x46,0x70,0x65,0x26 +.byte 0x98,0xf1,0xb6,0x42,0xb3,0x48,0x99,0x7c,0x07,0xbe,0x2b,0xee,0xb4,0xc1,0xf0,0xb7,0x47,0xf8,0xcf,0xe4,0x8d,0x34,0xa6,0xe5,0x17,0x9a,0xb7,0x2c,0x2e,0x03,0x30,0xfd,0xfb,0x42,0xe7,0xa1,0xe0,0x34,0x49,0x64,0xd8,0x0c,0xd5,0xb8,0x77,0x9f,0x0e,0xe2,0x73,0x0d,0x20,0x0c,0x21,0x07,0xaf,0x0f,0x93,0x94,0xd6,0xdc,0xe3,0xac,0x8d,0x8e +.byte 0xae,0x87,0xbd,0x2c,0x19,0x66,0xef,0x90,0x4a,0xd9,0xb0,0xf6,0xac,0x3a,0xe2,0xb5,0x2e,0xb4,0x63,0x91,0xf1,0x8b,0xac,0xce,0x51,0xc2,0xe0,0x02,0x7d,0xf8,0xab,0xe4,0xd6,0x85,0xd6,0xbb,0xd7,0x72,0xd0,0x5f,0x4e,0x90,0x09,0xcc,0x51,0xee,0x5b,0xad,0xb2,0xf6,0x16,0x37,0x09,0xa8,0xfc,0x74,0xa5,0x2e,0x26,0x27,0xff,0x53,0xd4,0x45 +.byte 0x82,0xb1,0xb6,0x16,0x65,0xc6,0xbb,0x54,0x0b,0x89,0xa1,0x0e,0x09,0x7c,0xc9,0xc9,0x48,0xa7,0x51,0x78,0x1d,0x3a,0x30,0xc5,0xe7,0x02,0x9e,0x91,0xd6,0x39,0xc8,0x35,0xf0,0x33,0xab,0xf6,0x0f,0xf9,0xce,0xef,0x26,0x46,0x48,0x56,0xbc,0x45,0x44,0xe2,0xd7,0xfc,0xdf,0xb2,0x95,0x20,0x07,0xeb,0x47,0x1c,0xde,0x88,0x5e,0x08,0xee,0xa1 +.byte 0x56,0x9a,0x5d,0x8f,0x35,0xc5,0xb3,0xd3,0x7d,0xe3,0x25,0x82,0xcc,0xcb,0xad,0xd8,0xef,0x83,0x76,0x08,0x55,0x9e,0xf4,0x00,0x1f,0x92,0x24,0x0e,0xf6,0x96,0x98,0x34,0x10,0x10,0x93,0x27,0x3b,0x96,0xbd,0x75,0x45,0x9d,0xad,0xc1,0x79,0xa7,0x09,0x68,0x0a,0xbc,0x14,0xe9,0x62,0xf6,0x5e,0x4e,0x6d,0xfb,0xf2,0x25,0x20,0x8b,0x53,0xa6 +.byte 0xc2,0x31,0x71,0xaa,0xfa,0xa2,0x1c,0xa1,0xb3,0xa2,0xd7,0x22,0x5a,0x72,0x61,0x5c,0x30,0x75,0xcc,0x82,0xb0,0xd0,0x07,0x8c,0x95,0x11,0x57,0xa4,0xe2,0x42,0xf3,0x3d,0x87,0x56,0x45,0x38,0xd6,0x1b,0x2b,0x26,0x11,0x99,0xce,0xcc,0x2e,0x96,0x1b,0xa1,0x06,0xa1,0xa9,0x65,0xe1,0x1f,0x53,0xb6,0x1e,0x5c,0x44,0x40,0xa2,0xf2,0x03,0xe7 +.byte 0x39,0x24,0x59,0x5f,0xdd,0x30,0xf0,0x78,0x9f,0x34,0xf1,0xd3,0x5d,0x9a,0xdd,0xf9,0x02,0x16,0x4b,0xfa,0x8d,0xab,0x2f,0x96,0xdb,0x67,0xf6,0x1e,0x7a,0xf8,0xd8,0xe6,0x71,0xdc,0x1a,0xbf,0x44,0xd2,0xbd,0xb3,0x6d,0x47,0x69,0xe0,0x14,0xef,0xe5,0x5e,0x0a,0xe9,0x1a,0x8b,0x3f,0x67,0x1e,0x1c,0x37,0x86,0x25,0x02,0x52,0x3f,0xf5,0xde +.byte 0xe0,0xbe,0x1d,0x61,0x44,0x3d,0xd2,0xe9,0x26,0x3d,0x4b,0xa4,0xb1,0xb9,0x62,0xc5,0x70,0xfb,0x1d,0xaf,0xe6,0x19,0x97,0x0f,0x6e,0x6d,0x4e,0xdf,0x5f,0xc9,0xb2,0xb0,0xb9,0x4b,0x72,0xc7,0x60,0x5d,0xf8,0x7d,0x3b,0xd8,0x74,0x29,0xf2,0x56,0x25,0xd9,0xd9,0x12,0x3a,0x50,0x01,0x54,0xd3,0x0e,0x4c,0xbd,0xc9,0xf5,0x66,0xc4,0x4b,0xa2 +.byte 0x68,0x31,0xb1,0x9d,0x47,0xd8,0x28,0xce,0x6b,0xe4,0x5f,0x78,0x75,0x22,0x7d,0x44,0x08,0x71,0xfb,0xd8,0xa0,0x6e,0xd1,0xbd,0x64,0x4e,0x00,0x99,0xf7,0x85,0xad,0x31,0xde,0x5c,0x4c,0x7c,0xc3,0x89,0x49,0x9f,0xea,0x22,0x86,0xa0,0x48,0x48,0xcf,0x47,0xfb,0x68,0x04,0x4c,0x05,0x62,0x57,0x60,0x9b,0xa0,0x37,0x41,0x77,0xe4,0x7d,0x3e +.byte 0x36,0xda,0xd5,0xfd,0x68,0x47,0x8c,0x68,0x61,0x4c,0xea,0x38,0x20,0xa5,0xe4,0x12,0x6e,0xd5,0x14,0x37,0x01,0xcf,0xbd,0xdd,0x55,0x97,0xb4,0x30,0xf0,0x65,0x15,0xee,0x1f,0xc8,0x5b,0x07,0x82,0xae,0x43,0xad,0x11,0xda,0x0e,0x61,0x23,0x0a,0x5f,0x52,0xf9,0x9d,0xc5,0x98,0x4e,0xaf,0x77,0x21,0xc8,0x9f,0x6d,0x25,0x94,0x4f,0x91,0x1a +.byte 0xb4,0x2d,0xe3,0x15,0xe5,0xe6,0x25,0xb8,0x8e,0xd8,0x33,0xe3,0x05,0x01,0x7b,0x6b,0xa8,0x39,0x44,0x4b,0x58,0x3c,0x17,0x53,0x17,0x5c,0xbc,0xd5,0xcd,0xd4,0x29,0xe7,0x17,0x7a,0x69,0xa6,0x75,0x8e,0x0a,0x00,0x41,0xbe,0xb4,0x8d,0x79,0x1d,0xac,0x2a,0x0f,0x9b,0x7b,0x5a,0xe8,0x17,0xe2,0xb3,0x1d,0x03,0xde,0x5a,0x7c,0x31,0x18,0x8c +.byte 0x1c,0xf9,0x19,0x7b,0x37,0x1f,0x53,0x77,0xce,0x1f,0xad,0xb6,0x0d,0x21,0xe1,0xb0,0xf9,0x42,0x52,0x99,0x02,0xa8,0x58,0xab,0x94,0xf8,0x9f,0x99,0x2d,0x1e,0x68,0x4f,0x5a,0x91,0x2b,0xdf,0xe8,0xe6,0x34,0xb6,0x80,0x9b,0xb1,0x0e,0x87,0xec,0x29,0x17,0x4d,0x98,0x2d,0x40,0xd0,0xf7,0xca,0x55,0x9d,0x56,0x19,0xd5,0x7c,0x4e,0x2e,0x75 +.byte 0x5d,0xe7,0x3e,0xed,0x47,0xdc,0xb1,0x04,0xe5,0x61,0x0f,0xe7,0xc4,0x16,0x71,0xf4,0xf8,0x8a,0xf1,0xfc,0xd5,0xdb,0xeb,0x0b,0x82,0x0f,0xfe,0x64,0xa2,0xb0,0x53,0xab,0xf5,0x01,0xc2,0x8f,0xa0,0x4d,0x5d,0x1b,0x54,0x32,0x48,0xca,0x8a,0x42,0x59,0x4a,0x85,0x68,0x75,0xd1,0x1b,0x03,0x11,0xfe,0x28,0xd7,0xd5,0x37,0x81,0x7a,0xfb,0x84 +.byte 0xfd,0xa8,0x98,0x54,0xf7,0x81,0xb0,0x2d,0x2d,0x5d,0x95,0x0a,0x5b,0x80,0x13,0x95,0xad,0x8f,0x88,0xaa,0x38,0x7e,0xbc,0x88,0xc2,0xf6,0xa6,0x1e,0x6d,0x78,0xc9,0x4f,0xa9,0xb3,0xaa,0x23,0x0c,0x62,0x19,0x6f,0x26,0x5d,0xca,0x36,0x23,0xf8,0xd1,0x76,0x80,0x32,0x59,0xa0,0x47,0x86,0xee,0xc9,0x0f,0x1d,0x37,0xd9,0xc9,0x4e,0x65,0x22 +.byte 0x17,0x95,0x88,0x85,0xb3,0x8a,0x5d,0xb9,0xe6,0x3b,0x6c,0x02,0x81,0x61,0xe0,0xab,0x19,0x6c,0x9a,0x29,0x33,0xf1,0x7b,0x0c,0x22,0x16,0x0c,0xd6,0xfa,0xc2,0x84,0xe5,0x74,0x9e,0x8e,0xf8,0xdb,0x44,0x68,0xa0,0x58,0x52,0x9f,0xad,0xe6,0x2b,0x23,0x70,0xf3,0x6e,0xdc,0xf1,0x2d,0xa5,0xc2,0x7f,0xef,0x5f,0x58,0xc2,0x96,0x66,0x67,0x4b +.byte 0x7c,0xe0,0xd7,0x96,0xda,0xf7,0xd7,0x7a,0x7d,0xb4,0x4f,0x48,0xbd,0x87,0x6b,0xf4,0xbd,0xd1,0x45,0xdc,0xba,0x4f,0xd2,0x00,0x7f,0xde,0x3c,0x57,0xd7,0x3b,0x5b,0xa9,0xf3,0x17,0x76,0x47,0x0c,0xcf,0x48,0x07,0xa8,0xc3,0x30,0x60,0xc6,0x98,0x20,0x29,0xba,0x5f,0x76,0x6d,0x63,0x5f,0x87,0x7e,0x36,0xbc,0xa3,0xe4,0xd6,0x6a,0x55,0x73 +.byte 0x8b,0x8b,0x62,0x40,0xc5,0x7e,0xa3,0x33,0x04,0xce,0xe2,0x9d,0x9f,0x67,0x1c,0xf0,0xa1,0x78,0xd2,0x0b,0x58,0xc1,0x2e,0xec,0x78,0x0a,0xc9,0x0b,0x1d,0xfb,0xcc,0x72,0xd8,0xe4,0x15,0xcb,0x09,0x8b,0xd9,0x33,0xa9,0xb6,0x24,0x7e,0x59,0x48,0xbf,0xda,0xdb,0x5c,0x99,0xd1,0x92,0x1b,0xb6,0xf6,0x75,0x78,0x53,0x69,0x89,0x27,0x6b,0x3c +.byte 0xfb,0xd2,0xa7,0xeb,0xc5,0xf7,0xea,0x8b,0x38,0x59,0x8e,0x02,0xc7,0x6e,0x96,0x8a,0x85,0x1c,0x91,0x1b,0x97,0x97,0x9e,0xa7,0x9d,0x10,0xa4,0x4a,0x6e,0xa8,0x51,0x05,0xbe,0x5f,0x9a,0x5b,0x94,0xf2,0x2c,0xa1,0x1e,0x33,0xc5,0xe8,0x92,0xb8,0xd2,0xfa,0x27,0x07,0x12,0xa1,0xdc,0x24,0x43,0x28,0x06,0xe5,0x43,0x57,0x8f,0x66,0x72,0x2f +.byte 0x26,0xf7,0xea,0xa1,0xcf,0x57,0xd6,0xa6,0xf7,0x37,0x1d,0x6e,0xd9,0xde,0x1a,0x8c,0xf5,0x01,0x76,0xc3,0x56,0x40,0x57,0x3d,0x4a,0x14,0x04,0xf2,0xfc,0xba,0x3b,0x60,0xf1,0x88,0x1e,0x16,0x08,0x99,0x90,0xfe,0x27,0xaa,0x04,0x53,0xd8,0x7e,0x0c,0x58,0x6a,0xd9,0x5a,0xe4,0x11,0xd4,0xcc,0x48,0xbe,0x03,0x08,0xbc,0x61,0x47,0xdd,0xde +.byte 0x5f,0x03,0xc7,0x8f,0x9c,0x08,0x93,0xe3,0xaa,0xee,0x9c,0xe3,0xc6,0x06,0x78,0xda,0x0a,0xdd,0xb0,0xc3,0xf3,0x0b,0xe5,0xa0,0x5f,0x1e,0x3e,0xb3,0x15,0x7f,0xf1,0xf4,0x38,0xb2,0xed,0xf2,0xa6,0x8b,0x1d,0x78,0xb6,0x03,0x19,0xcd,0x17,0xb4,0x18,0x17,0x49,0x61,0x17,0xbd,0xbe,0x4b,0x04,0x00,0xce,0x4b,0xcc,0x47,0x61,0x76,0x85,0xdc +.byte 0x2b,0x85,0x48,0x82,0xf4,0x9b,0xb4,0x62,0x53,0xc7,0x06,0x50,0xf2,0x3e,0xba,0x6d,0xf2,0x19,0x0f,0x7f,0x84,0xce,0xa6,0x4d,0x96,0x97,0x94,0x12,0xb6,0xd0,0xd6,0xa4,0xc1,0xcc,0x14,0x54,0xf6,0x7a,0xf1,0x94,0x62,0xa1,0xc7,0x22,0x9b,0x0d,0x0e,0x69,0xcf,0x38,0x5c,0xda,0x9f,0xc0,0xfa,0x93,0x81,0x24,0xce,0x9f,0xf3,0xc2,0x66,0xad +.byte 0x06,0x21,0xf2,0x48,0x6c,0x4a,0x0d,0xb8,0x41,0x86,0xaf,0xb7,0x6c,0x65,0xcb,0x83,0xd8,0x75,0x11,0x60,0xfa,0x06,0xe5,0xd2,0x11,0x87,0x29,0xb8,0x41,0xcb,0x17,0xb5,0xbd,0xbd,0xf9,0xd5,0xbc,0x89,0xb6,0x60,0x65,0x59,0xbb,0x38,0x9d,0x70,0xf9,0x81,0x6b,0xe6,0x12,0x80,0x08,0x73,0x9f,0xfb,0x2f,0x72,0x4e,0x18,0xff,0x65,0xab,0xa6 +.byte 0xaa,0x78,0xf1,0xa4,0xe9,0x1a,0x7d,0xa5,0xdd,0x91,0x77,0xa9,0xa3,0xf3,0xe3,0xe5,0x5a,0xa2,0x0d,0x3a,0x2a,0x4a,0x11,0x9a,0x8d,0xc3,0x00,0x6e,0xd4,0x4f,0xb9,0xe7,0x39,0x78,0x89,0x64,0xb2,0xc8,0xfd,0x1f,0xe6,0xa9,0x54,0x17,0x83,0x3f,0xeb,0x97,0x77,0xac,0xc8,0xba,0x0e,0x77,0x02,0xb0,0x29,0xbe,0x51,0x62,0xef,0xa5,0xd5,0xab +.byte 0x79,0x98,0xab,0x7a,0x1e,0x13,0xe8,0x87,0x4f,0x61,0xa3,0x37,0xdf,0xe6,0xda,0xb9,0xf5,0x69,0xf7,0x7a,0xee,0xd6,0x5f,0x6a,0xb3,0x95,0x55,0x59,0xd1,0x6c,0x5b,0xd5,0xba,0x8b,0x74,0x85,0xbf,0x1e,0xe5,0xb3,0x24,0x28,0x4b,0xc8,0x4a,0xec,0xa1,0x1d,0xda,0x99,0x3f,0xdf,0xfc,0xe6,0x2e,0x1b,0xa4,0xba,0x1a,0x03,0x89,0xb7,0x93,0x4e +.byte 0xaf,0x40,0xb0,0x7e,0x3f,0x34,0x0d,0x94,0x75,0x8c,0x8a,0xfb,0x88,0xcd,0xd3,0xc2,0x61,0x95,0x63,0x51,0xaa,0x78,0x1f,0x24,0x95,0x5a,0xb5,0x98,0x9a,0xd4,0xb8,0x34,0xe1,0x47,0x1c,0x68,0x0f,0x08,0xf1,0x69,0xe6,0xd4,0xaf,0x23,0xf6,0x32,0x71,0x51,0x01,0xa9,0xf2,0xa1,0x45,0x0b,0x75,0x82,0x09,0xe4,0x9c,0x2a,0x1d,0x0b,0xd6,0xd2 +.byte 0x26,0xe8,0x30,0x44,0xdf,0xa3,0x2b,0x97,0x11,0xc7,0xe7,0x47,0xfd,0xc7,0xbf,0x59,0xf3,0x28,0x32,0x46,0xc0,0xc4,0x7a,0x96,0x08,0x0d,0x2c,0xa1,0x82,0x6c,0x0a,0x33,0x82,0x55,0xd7,0xcf,0x3e,0x08,0xbb,0x22,0x15,0x96,0x12,0x66,0xd2,0xae,0x21,0x3a,0x54,0x6a,0xe0,0x33,0x0c,0xa4,0x96,0x4b,0x5d,0xf2,0x86,0xb9,0x70,0xe4,0x65,0x45 +.byte 0xe4,0x2f,0xa7,0xb4,0xc1,0xd5,0x9a,0x02,0xa1,0x5b,0x4e,0x58,0xca,0xf8,0x63,0xae,0x45,0x1c,0xf4,0xa7,0xc8,0xa5,0x84,0x23,0x87,0xcb,0x3e,0x88,0xca,0xe9,0xa9,0x49,0xc5,0xc6,0x63,0x37,0x99,0xe0,0x27,0x03,0x96,0x7b,0x73,0x8c,0x36,0xde,0x89,0x80,0x30,0x2c,0x00,0x94,0x0b,0xfb,0x1f,0x39,0xe0,0xed,0xb6,0x31,0x21,0x90,0xfe,0xa4 +.byte 0xee,0xa5,0xe5,0x7b,0x9a,0x11,0x41,0x51,0xab,0x89,0x54,0xe0,0x8d,0x5f,0x10,0x1b,0x76,0x27,0x77,0x3d,0xb0,0x58,0x86,0x7b,0xb7,0x45,0xfb,0xd0,0x81,0xa8,0xcd,0xc0,0xc8,0x5f,0xfb,0xfe,0x8c,0x0a,0x3d,0x5d,0x61,0x4b,0x9b,0x32,0x75,0x66,0xa9,0xac,0x32,0x35,0xe9,0x1a,0xdf,0x06,0x8d,0x13,0x5d,0x40,0xcb,0x7d,0x50,0x3e,0x54,0xab +.byte 0x04,0xbc,0x83,0x32,0x8f,0xf5,0x93,0x1d,0x9b,0x5a,0xe1,0x19,0x70,0x4a,0xba,0xfc,0x4c,0x6a,0xf3,0xd6,0xd1,0xfd,0x48,0xd0,0x7c,0xa4,0xab,0x0b,0xb6,0x5f,0xe1,0x31,0xce,0x99,0x10,0x98,0xfc,0x6e,0x1c,0xaa,0x9c,0x34,0xa2,0x55,0xdc,0xe0,0x81,0x1b,0x9e,0xff,0x75,0x2e,0x25,0xe9,0x2c,0x20,0x83,0xf6,0x66,0xf9,0x63,0x31,0xfe,0xa7 +.byte 0xbf,0x4d,0xfd,0xff,0x0b,0x93,0x84,0xd4,0xb4,0x72,0x13,0x38,0x90,0x75,0xc9,0xff,0x61,0x4b,0xf9,0x55,0x62,0x58,0xf0,0x60,0xce,0x2d,0xec,0x94,0x06,0x0a,0xde,0x48,0xc0,0x46,0x89,0xfb,0x5c,0xf7,0x9f,0x37,0xad,0xd2,0xff,0xbe,0xfb,0x81,0x21,0xe0,0x20,0x43,0x88,0xad,0x40,0x47,0x7a,0xa9,0x30,0x88,0x10,0x16,0x41,0xf8,0x25,0xe0 +.byte 0x8f,0xc2,0xe3,0x9f,0x48,0xd3,0xfe,0x61,0x70,0xb9,0xa1,0x9e,0xaa,0xa6,0x73,0xcf,0xc3,0xd6,0xab,0x69,0x65,0x4a,0x3c,0xec,0x28,0x02,0x63,0x62,0xa1,0xb6,0xa3,0xd5,0x8c,0x9e,0x11,0x81,0x98,0x12,0x4f,0xec,0xb6,0xe5,0x3a,0x96,0xa1,0x11,0x13,0x77,0x5f,0x0f,0x19,0x40,0x14,0x28,0xcc,0xf1,0x3e,0x19,0x1d,0x78,0x31,0xac,0x5c,0xce +.byte 0xd7,0x29,0xfa,0x02,0x3b,0x29,0xd8,0x3a,0x37,0xcb,0x94,0xb2,0x38,0xc7,0x7f,0x3a,0x46,0xd2,0xb7,0xfe,0xfb,0x54,0x7c,0x01,0xa2,0x9b,0x53,0x57,0x04,0x73,0x4e,0x06,0x90,0xe5,0x78,0x0a,0x45,0x67,0x12,0x83,0xd7,0x31,0x59,0xa4,0x76,0xaa,0x7c,0xde,0x72,0x92,0x11,0x94,0x4c,0x6a,0xe4,0x35,0x35,0x3a,0x2e,0xef,0x7c,0xc1,0x91,0x76 +.byte 0xd0,0xfe,0x84,0xd1,0xa1,0xf9,0x03,0xc3,0xba,0x09,0xbb,0x2c,0xe2,0xb5,0x06,0x7e,0x23,0xb7,0xe0,0xc1,0xd3,0xfd,0x55,0x01,0xf3,0xba,0xc5,0x1b,0xf8,0x02,0x60,0x92,0x0a,0x93,0x1c,0xc4,0x19,0x03,0x88,0xf5,0x45,0xe5,0x8f,0x7d,0xce,0x2c,0x87,0x2e,0xf6,0x55,0x8c,0xf9,0xb0,0xd2,0x72,0x2d,0x93,0x6d,0x28,0x6e,0x8e,0x3a,0xed,0x68 +.byte 0x02,0xda,0x80,0xd0,0x71,0x4a,0x8f,0x06,0x59,0x38,0x89,0x81,0xcb,0x1a,0x74,0x1e,0x62,0xa3,0xa5,0xb8,0x85,0xc3,0xd2,0x04,0x3d,0x3b,0x93,0x36,0x0c,0x12,0x55,0xfb,0x7b,0xc8,0xa3,0x25,0xa7,0x93,0xb0,0x3e,0x49,0x86,0xbf,0x76,0x8f,0xc4,0x4c,0xfe,0xce,0x4a,0xf6,0x2f,0x15,0x33,0x06,0x3a,0x35,0x49,0xe7,0x08,0xff,0x99,0xac,0xf6 +.byte 0x20,0x6d,0xab,0xb2,0x05,0xa9,0xe4,0x06,0x57,0x9c,0xf4,0x76,0x8c,0x82,0x64,0xd5,0x67,0xe0,0xad,0xe1,0x69,0xdc,0x9e,0x2c,0x59,0x92,0x3a,0xc8,0xc1,0x0a,0x61,0x89,0x45,0x9f,0x8b,0xf8,0x64,0x0a,0x5a,0x75,0x55,0x37,0x24,0xe1,0x42,0x43,0x7c,0x9c,0xcd,0x4e,0x9e,0x19,0xfb,0xd9,0x15,0x29,0x30,0x52,0x33,0xf3,0xc8,0x88,0xdb,0xaa +.byte 0x07,0x27,0xfb,0x2b,0x0c,0xc0,0xa1,0x5f,0x51,0xf1,0x54,0xf8,0x90,0x0a,0x35,0x07,0x6e,0x9c,0x64,0xd8,0x4f,0x2d,0xb3,0x61,0xbc,0x18,0x1f,0x22,0x84,0x94,0x4b,0x85,0xfc,0x4a,0xf9,0xe5,0xfc,0xdd,0x7a,0x07,0xa2,0xbb,0xbe,0x7e,0x1f,0x4e,0xf9,0x29,0xb8,0xde,0x56,0xe9,0x04,0xc1,0xc2,0xb6,0xa8,0xc7,0xb6,0x83,0xf2,0x85,0x3d,0x35 +.byte 0xe3,0xeb,0x2f,0x2f,0x3c,0x1a,0x3a,0xf1,0x61,0x1f,0xe8,0xf0,0xce,0xa2,0x29,0xda,0x3f,0x38,0xf5,0x82,0x7a,0xb8,0x55,0xf1,0x1a,0x6e,0x5b,0x5c,0xd0,0xc8,0xc8,0x3a,0xe2,0xaf,0xb4,0x6f,0xba,0xe4,0x03,0x78,0x5f,0x47,0x4b,0xaf,0xfe,0x2a,0x7e,0x27,0xba,0x17,0xb4,0x92,0x27,0x70,0x13,0xd9,0xbb,0x6b,0x1c,0x9a,0x3e,0x29,0x85,0x9a +.byte 0xb7,0x64,0x5b,0x6d,0x7b,0xec,0xb2,0x26,0x3a,0x4b,0xb7,0x17,0xaf,0xb5,0xa1,0xbc,0x4d,0x67,0x4c,0x86,0xd1,0x53,0x2e,0x5d,0x64,0xe8,0x55,0xd9,0xbb,0xae,0xc1,0x55,0x41,0x99,0x8e,0x4d,0xed,0x3d,0x9e,0xea,0xe3,0xf2,0x76,0x45,0x6d,0xaa,0xbb,0x89,0x0b,0xc0,0x13,0xfe,0x99,0x2c,0xb0,0xd2,0xa9,0xeb,0x58,0x57,0x4d,0x88,0x2e,0x04 +.byte 0x4f,0x7a,0x76,0xaa,0x3a,0xa6,0x08,0x93,0x42,0x74,0x2f,0x3a,0x35,0xb0,0x36,0xcc,0x77,0xec,0x54,0x41,0x2e,0x81,0xf6,0x9f,0xf3,0xe7,0x23,0xc0,0x3f,0xa4,0x52,0x83,0x38,0xe2,0x12,0xed,0xdb,0x23,0xa0,0x0b,0xbf,0x61,0x98,0x89,0xb0,0xa4,0x3d,0xa9,0x6a,0x73,0xa1,0x99,0xc9,0x9e,0x68,0x45,0x37,0x4b,0x6c,0x87,0xfb,0x93,0xf2,0xaa +.byte 0xe8,0x1d,0x53,0x6c,0x4b,0xda,0xc5,0x6f,0xaa,0xde,0x99,0xd2,0xba,0x7c,0x27,0xc2,0x4e,0xd5,0x5b,0xc8,0x13,0x9e,0xa2,0x10,0x6a,0xbb,0x39,0xf9,0xa7,0x55,0x0a,0x65,0x88,0x3c,0x9b,0xff,0x83,0x4e,0xf7,0x9c,0x99,0x69,0xbd,0x64,0x0d,0xd1,0xc0,0xb0,0x43,0xd6,0x63,0x50,0x13,0x68,0x8d,0xd1,0x7e,0x56,0x93,0xb5,0x8e,0x8f,0x12,0xe5 +.byte 0x37,0x96,0x21,0x64,0xd5,0x0b,0xf6,0x27,0xf8,0xaa,0x34,0x8e,0xc4,0x2b,0x7b,0x6a,0x7c,0x89,0x4e,0x15,0x15,0x3d,0x17,0x93,0xd4,0x99,0xfe,0x97,0x95,0x20,0x85,0xcc,0xd4,0xcd,0x73,0x67,0x80,0x22,0x06,0xed,0x5e,0xce,0x90,0x59,0x01,0x31,0x24,0x17,0x37,0x4a,0x63,0x96,0xc2,0xf3,0xe0,0x21,0x0a,0x3b,0x9f,0x94,0xad,0xd6,0xa4,0xa9 +.byte 0xa2,0x54,0x0d,0x2a,0xb3,0x5c,0xfa,0xbe,0xeb,0x21,0xd6,0x13,0x22,0xa5,0x95,0x5e,0x25,0x72,0xf9,0x18,0x1f,0x50,0x64,0x04,0x5b,0xe8,0x0e,0x1f,0x6c,0xe1,0x4e,0xf5,0x7f,0xf0,0x13,0x4f,0xda,0x75,0xab,0x5a,0x98,0xd3,0x07,0x32,0x96,0x2a,0xc7,0x1e,0x0f,0x14,0xdb,0x96,0x5f,0xac,0xc1,0xef,0x5b,0x2d,0xd6,0x6d,0x13,0x01,0xd9,0x04 +.byte 0x9c,0xcd,0xe5,0x5e,0xbe,0x3a,0x47,0x14,0x09,0xbe,0x11,0xad,0x87,0x3f,0x0e,0xe1,0xcb,0x97,0xd0,0x6e,0x1f,0x49,0x07,0xd1,0x8c,0x2b,0xe0,0xf0,0xb2,0xaa,0x8b,0x70,0x18,0x7f,0x29,0xcc,0xc4,0x23,0x66,0x48,0xc4,0xb5,0x5e,0xf1,0x10,0xd7,0x1d,0x2a,0xba,0xe4,0x12,0x64,0x1d,0xf5,0x03,0x35,0x71,0x57,0x5d,0xf4,0xa4,0xb5,0x99,0x0b +.byte 0x4c,0x80,0x65,0x07,0x2f,0xbc,0xf7,0x28,0x8b,0xc0,0x8f,0x84,0x63,0x7e,0xf5,0x01,0x23,0x8c,0xaf,0x71,0x35,0xd4,0xe1,0x70,0xc7,0xef,0x1f,0x66,0xa9,0x34,0x57,0xaa,0x9a,0xbb,0x80,0x43,0x15,0x96,0xc4,0x03,0xd9,0xae,0xbe,0x89,0x1c,0xa1,0x9f,0x65,0x61,0xe5,0x90,0x9f,0xa6,0xf4,0x3b,0xde,0xa1,0xd1,0xf1,0xf9,0x2d,0xd7,0xa7,0x7e +.byte 0x3d,0x42,0x3d,0x1b,0x99,0xed,0x49,0x2e,0x92,0x6b,0x47,0x0e,0x0b,0x90,0x56,0xe0,0x1b,0x6b,0xfe,0x97,0xfe,0x9b,0xa2,0x50,0xcc,0xbf,0xea,0xae,0xe8,0xf0,0xc4,0xe5,0x81,0x20,0x4a,0xb0,0xf7,0xa5,0x23,0x24,0xf6,0x3f,0x9e,0x9c,0xcc,0xce,0xe4,0x95,0x49,0xea,0x66,0x4a,0x35,0x31,0xf3,0x03,0xc3,0x08,0xf9,0x5f,0x95,0x4c,0xbc,0x84 +.byte 0x13,0xbe,0x7f,0x35,0xbb,0xd7,0x35,0x3c,0xfb,0x05,0x43,0x95,0xbf,0x87,0xf2,0xc3,0x2d,0xef,0x13,0x1d,0x65,0x17,0x82,0x75,0x3d,0x67,0x51,0xcd,0x6e,0x42,0x5f,0x49,0x53,0x8b,0xaf,0x34,0x7d,0xa8,0xc1,0x45,0xcd,0x3d,0x29,0x00,0xa3,0xf3,0xbb,0x44,0x00,0x05,0x57,0xa5,0xeb,0xfd,0x98,0xa6,0xae,0xc6,0xc4,0x6c,0x6d,0x7d,0xf6,0x3e +.byte 0x82,0x1d,0x12,0xe7,0xcd,0xd2,0xd5,0xfe,0x41,0xf8,0xa4,0xb3,0x6a,0x04,0x13,0x28,0x10,0x40,0x27,0xc9,0x43,0x74,0xcf,0xaf,0x9b,0x60,0x17,0x43,0x8f,0xd7,0xb7,0x56,0x72,0xf3,0x48,0x0a,0xe6,0x36,0xf2,0x3f,0x51,0xf9,0x6e,0xc8,0xa3,0x04,0x8c,0x01,0x86,0x6e,0x83,0x27,0xe2,0xba,0xf2,0x8f,0x8f,0xa1,0x39,0xe7,0x17,0xdd,0x06,0x10 +.byte 0x0c,0x7f,0xfa,0x22,0x5d,0x88,0x35,0xc6,0xcd,0x60,0xa2,0xf0,0xfd,0xc9,0xed,0x85,0xac,0x88,0xfd,0x7d,0xc0,0x77,0x1b,0x80,0x3d,0x21,0x1e,0x8e,0x4d,0xdb,0x20,0xe2,0x38,0xad,0xd4,0xb5,0x2b,0x2b,0x31,0xbc,0x7b,0x02,0xa2,0x25,0x50,0xc0,0x01,0x20,0x76,0x6f,0x98,0x0b,0x3d,0x46,0xed,0xbb,0x2b,0x39,0x74,0x30,0xce,0x3e,0x6d,0x91 +.byte 0xa1,0x89,0x83,0xde,0x69,0x93,0x1a,0x14,0xa1,0xb0,0xaa,0x80,0xb0,0x1c,0x02,0x3f,0x13,0x9a,0x15,0x7f,0xb4,0x02,0x8f,0x30,0x0b,0xee,0xd9,0x72,0xcb,0x74,0x95,0x4a,0x39,0xb3,0x4e,0x78,0x12,0xb1,0x77,0x89,0xc0,0xaf,0x17,0xfd,0xc1,0x68,0x65,0xd1,0x08,0xae,0x56,0x5c,0xe0,0xe7,0x6f,0xb3,0x1e,0x10,0xce,0xd8,0xdf,0xee,0x67,0xad +.byte 0xd8,0x08,0xe0,0x79,0x36,0xe4,0x57,0x1c,0x45,0x22,0xa7,0x44,0xa8,0x12,0x37,0x92,0x85,0x9f,0x3a,0x48,0xd0,0xfd,0xb3,0x40,0x20,0x10,0xed,0x11,0xe0,0x9a,0xa6,0x09,0x5b,0xe9,0x21,0x95,0xe1,0x45,0x19,0x39,0xcc,0x85,0x5f,0xa5,0x6b,0x46,0x37,0xe1,0xa1,0x17,0x3f,0xb6,0xe9,0xb0,0x81,0x25,0xf6,0xd1,0xb8,0x22,0x5a,0x27,0x48,0x83 +.byte 0x01,0x36,0xd4,0xb8,0xc0,0x9f,0x37,0x52,0x22,0xd2,0x69,0x7b,0x3d,0xfb,0x31,0xc1,0xa3,0xb4,0xa1,0x1d,0x0e,0x24,0x9a,0xda,0x02,0x15,0x4b,0x46,0x24,0x0e,0xb1,0x79,0xc2,0x5b,0x01,0x60,0x4a,0x24,0x8a,0xbb,0x70,0xaa,0xf4,0x45,0xc1,0x0d,0x04,0x26,0x3f,0x74,0xbd,0xdd,0x33,0xaa,0xd6,0x62,0x56,0xb1,0xe7,0x2d,0x7b,0x66,0xa2,0x40 +.byte 0xb4,0xe4,0xbd,0x8e,0x35,0xba,0xf1,0x2f,0x59,0xa7,0x01,0x6d,0x5a,0xa7,0xa6,0x3b,0x82,0xa3,0xb4,0x54,0x51,0x33,0x6b,0xfb,0x78,0x4a,0x74,0x88,0x7f,0x55,0xea,0x08,0x8e,0x19,0x78,0xbc,0x80,0x19,0x2f,0x41,0x97,0x20,0xa0,0x9e,0xbf,0x44,0xae,0x2e,0x26,0x66,0xe3,0x25,0xa0,0x92,0xa9,0xbe,0x8c,0x0d,0x96,0xec,0x93,0x99,0xe2,0xe7 +.byte 0x81,0xd5,0x10,0x62,0x3a,0x97,0x38,0x51,0x36,0x11,0x00,0xe0,0xc1,0x3a,0xc5,0xd4,0xa5,0x19,0xf4,0x82,0x66,0x0c,0xf9,0xb3,0x04,0x3e,0x57,0xc3,0x43,0xab,0xc6,0x52,0x95,0x8f,0xd3,0xf1,0xde,0xd9,0x57,0x6d,0x32,0x4f,0xc7,0x8c,0x1b,0x7a,0x53,0x6a,0xcf,0x56,0xea,0x61,0xb4,0xe5,0x64,0x2d,0x02,0x26,0x5b,0xcf,0x1c,0xc7,0x37,0xc3 +.byte 0x41,0xd2,0x1b,0x6c,0x5b,0x47,0xb8,0x73,0x89,0xfe,0x0e,0x7a,0x35,0x05,0xfc,0xea,0x6a,0x34,0x74,0x69,0xf0,0x12,0x29,0xa9,0x33,0xce,0x93,0x15,0xa0,0x68,0xb3,0x46,0x43,0xdb,0x8d,0xfa,0xef,0x93,0x66,0x72,0x18,0xae,0xe4,0xab,0xf4,0x8a,0xd1,0xb5,0x42,0xbd,0x2d,0xda,0xcb,0xf6,0x44,0x25,0xb1,0x01,0x8a,0xff,0xd5,0x34,0x16,0xec +.byte 0x7e,0x38,0x7b,0x50,0x41,0x61,0xf9,0xdf,0x4c,0x3e,0x02,0xd6,0xc3,0xce,0x19,0x9f,0x12,0x45,0x0c,0x99,0xb1,0xd9,0xeb,0xb9,0xe3,0xd5,0xb6,0x2b,0x25,0x8c,0x0b,0x04,0xf8,0x8d,0x41,0x41,0x3d,0x39,0x1b,0x7f,0x88,0xa7,0x8f,0x61,0x30,0xfe,0x67,0x75,0x35,0xd1,0x41,0x90,0xda,0x73,0x80,0xcf,0xc9,0xf6,0x44,0x00,0x67,0xcd,0xca,0xaf +.byte 0x6d,0x84,0x39,0x9a,0xb2,0xbb,0xfc,0xac,0x9b,0xb2,0x95,0x2f,0xc9,0x06,0x3a,0xa4,0x7b,0x9a,0x25,0xc6,0xe5,0xdb,0x7a,0xc6,0x8b,0x84,0x6a,0xb7,0x1e,0x22,0xaa,0x10,0x96,0xd3,0x55,0x50,0xa2,0x02,0x04,0x69,0x92,0xd7,0x6b,0x1f,0x9b,0x45,0x07,0x71,0xda,0xdc,0x76,0xc5,0xb8,0x34,0xa2,0x32,0x33,0x16,0x2e,0xb0,0x2a,0x90,0x43,0x40 +.byte 0x92,0x77,0x74,0x4e,0xdc,0xb4,0xe2,0x7d,0xc1,0x57,0xaf,0xf4,0x2c,0x20,0x65,0x77,0x88,0xc9,0x6e,0x69,0x38,0xc8,0x19,0x95,0x32,0x54,0x59,0x7f,0x37,0xd7,0x3c,0x07,0x05,0x87,0x2b,0xf9,0x58,0x74,0xc7,0x61,0x13,0x3d,0xc2,0xd9,0xec,0x3b,0x36,0x9f,0x8e,0xae,0x52,0xdd,0x5c,0xaa,0x29,0x6b,0x31,0x34,0x48,0x61,0x34,0x62,0x56,0xce +.byte 0x25,0xa8,0xc0,0x62,0xf5,0x35,0x58,0x4d,0x8e,0x61,0xd4,0xae,0x25,0x50,0xee,0x45,0xdd,0x14,0x7d,0x46,0x81,0x47,0xc3,0x3f,0x3f,0x81,0xdb,0x9a,0x59,0x56,0x4f,0x45,0xed,0x9c,0xe2,0xfc,0x96,0xff,0x5d,0x37,0x70,0xad,0xd2,0xeb,0xd9,0x2d,0x2a,0xaf,0xb9,0x16,0x4a,0x79,0x5d,0x76,0xb5,0x8f,0x74,0x19,0x6f,0x74,0x7d,0x4a,0xee,0x83 +.byte 0xa5,0x81,0xf3,0xd5,0xa0,0x43,0x5e,0x46,0xba,0xbe,0x49,0xa8,0xce,0x72,0x36,0x32,0xcd,0x8c,0x9b,0xa0,0xf9,0x5d,0xb7,0xb9,0xc7,0x8c,0xb2,0x59,0xb4,0x44,0xc1,0x90,0x53,0x92,0xd2,0xa8,0x4c,0xf9,0x35,0x40,0x32,0xd1,0xf0,0x2f,0xcb,0x6a,0x0b,0xe0,0xbe,0x34,0xc9,0x82,0x18,0x8d,0xfb,0xfc,0x50,0x8d,0x67,0xd5,0x86,0xd4,0xf1,0xb1 +.byte 0xaa,0x2f,0x9c,0xbc,0x52,0xbb,0x9f,0x17,0x1c,0x74,0x1d,0xdf,0x2d,0x1a,0x94,0x43,0x9b,0x80,0xb9,0x48,0xa3,0xaf,0x4b,0x30,0x0d,0xd9,0x3f,0x11,0x48,0x79,0x60,0xcc,0x25,0x6a,0xdb,0x8a,0xda,0xab,0xda,0x09,0x7c,0x9c,0x4a,0xaf,0xf9,0x0d,0xfb,0x7a,0x92,0x61,0xa5,0x17,0xf8,0x79,0x1b,0x00,0x52,0x56,0x5e,0x27,0x22,0x37,0xf4,0xbe +.byte 0x52,0x36,0xd3,0xdc,0x9a,0x33,0xf5,0x44,0x0e,0x53,0x0b,0xf6,0x9b,0xb0,0xb6,0x11,0xe4,0xd5,0x45,0x2e,0xdc,0xdb,0x46,0x18,0x9a,0x90,0x8b,0xcc,0xfe,0xc6,0x94,0x4f,0x97,0xb9,0x42,0xb6,0xd3,0x8f,0x7c,0x20,0xd1,0xa8,0xe6,0x85,0xce,0x65,0xeb,0x95,0x38,0x11,0x5c,0x1a,0x9d,0x34,0x25,0xc2,0xf0,0x33,0xbb,0x2c,0xc9,0x8d,0x0a,0x7a +.byte 0xb1,0x90,0x9f,0x24,0xed,0x35,0x3c,0x7e,0x71,0x82,0x12,0x3a,0x79,0x29,0xc8,0xa7,0x3e,0xa2,0x4e,0x50,0x03,0x94,0x7a,0x94,0xb7,0x2b,0x61,0x95,0x3d,0x5e,0x60,0x1c,0x68,0x51,0x82,0x73,0xe0,0x4a,0x2a,0x48,0x26,0xda,0xa3,0x53,0x8c,0x83,0xba,0x9f,0x95,0x37,0x5e,0x68,0x54,0x19,0x21,0xf8,0x31,0xaf,0x6b,0xfc,0x3a,0x3e,0xe3,0x3f +.byte 0xdb,0x16,0xb5,0x7e,0x13,0xf8,0xfd,0x7f,0x36,0xd6,0x8e,0x33,0xaa,0xe9,0xa4,0xa7,0xfd,0xf0,0x32,0xa6,0xdf,0xfa,0x22,0x7d,0xff,0x2a,0xe6,0x0d,0x6f,0xe2,0x21,0x54,0x6c,0x1a,0x99,0x17,0x56,0xad,0xce,0x39,0x6b,0x1a,0xe8,0x27,0x13,0x12,0x9c,0x4b,0x84,0x69,0x73,0xde,0x44,0x14,0xb2,0x7c,0x44,0x54,0x91,0x4f,0xeb,0x83,0xec,0x04 +.byte 0x73,0x85,0xb1,0xa8,0x44,0x72,0xa7,0x77,0xaf,0x0c,0xe0,0x52,0x65,0x04,0xe7,0x2a,0xee,0x0c,0x20,0x83,0x32,0x34,0x17,0x00,0x61,0xf9,0xf5,0x42,0x03,0xa4,0xb8,0x02,0x6f,0xb2,0xd3,0x65,0x51,0x2a,0x8e,0xdf,0x28,0x78,0x8a,0x8a,0x00,0xfb,0x24,0xd6,0xd5,0x86,0xaa,0xfb,0x86,0x93,0x5d,0x11,0xa4,0xf3,0xfd,0x36,0x18,0xf3,0x61,0xea +.byte 0x33,0xa8,0x0c,0xf0,0xb4,0x68,0xee,0xd3,0xe3,0x4f,0x22,0x24,0xde,0x1f,0x29,0x84,0x8b,0x5b,0x73,0x15,0xd6,0x62,0xa3,0x71,0x7d,0xf0,0x65,0x36,0xca,0x68,0x8a,0x6d,0x61,0x9c,0x0d,0x53,0xdd,0xf4,0x12,0xb3,0x5f,0xf0,0xb1,0x86,0xd6,0xe2,0xd6,0x80,0x4a,0x01,0x09,0x99,0x65,0xdb,0xae,0xe6,0xfc,0x68,0x5b,0xf9,0x10,0x99,0x8b,0x9f +.byte 0x08,0x52,0x09,0xae,0x59,0x4d,0x6c,0xf9,0x91,0x2b,0x57,0xea,0xf0,0xa3,0xdb,0xb8,0x99,0x29,0x2f,0xab,0x95,0x01,0x7d,0xec,0xd8,0x77,0x73,0x75,0x4f,0x88,0x44,0x69,0x76,0xc9,0x3c,0xf0,0x2d,0x7b,0x0d,0xbe,0xd4,0x88,0x0d,0xbc,0xa0,0x52,0xf4,0x2a,0xd1,0x62,0x2a,0xa9,0xe2,0x41,0x2f,0x52,0xce,0x96,0x7d,0x65,0x9b,0x74,0x82,0xde +.byte 0x43,0x4d,0xf8,0x8e,0x77,0x1c,0x18,0xf5,0x7e,0xab,0x94,0x3e,0xe7,0x90,0x2b,0xa1,0x16,0x00,0x7f,0x9c,0x9d,0x86,0xd1,0x74,0x7e,0xf7,0xbd,0x5a,0xa7,0x2f,0x0f,0xb0,0x5c,0xfc,0xfb,0x59,0x00,0xf3,0x84,0x09,0x77,0x66,0x17,0xf6,0x5d,0x0e,0xe2,0xe2,0xd4,0xb3,0x9e,0x79,0x88,0x66,0xa5,0x8e,0x30,0xae,0xca,0x7e,0x2b,0x32,0xa2,0x89 +.byte 0xe9,0x7e,0x59,0x21,0xd5,0x99,0xc7,0x10,0xa8,0x6f,0x95,0x8d,0x84,0xb4,0xcf,0x61,0xe7,0x5c,0x09,0xf3,0xbc,0xeb,0xf6,0x0c,0x84,0x1a,0x8d,0x13,0xf8,0x49,0x22,0xeb,0x09,0x55,0xef,0x56,0x12,0x21,0xcb,0x61,0x87,0xbf,0xef,0x43,0x5b,0x82,0xa8,0xc2,0xa2,0x5e,0xad,0x54,0x9a,0xcc,0x95,0xa2,0x01,0x05,0xb2,0xbb,0x26,0xa8,0xfd,0x6b +.byte 0x66,0x95,0x9c,0x0b,0x7b,0x23,0x32,0xff,0xdd,0x6c,0x18,0x1e,0x77,0x01,0x3c,0x82,0xaa,0x97,0x28,0x0f,0x93,0xa5,0x6c,0x85,0xe5,0x94,0x40,0xe0,0xa3,0x01,0x57,0x56,0x43,0x40,0xdd,0xa9,0xaf,0x21,0x79,0x10,0x8b,0xff,0x4b,0x51,0xe4,0xa2,0xe5,0xd7,0x0c,0xe2,0x9e,0x1e,0x38,0xdb,0x64,0xe1,0xb1,0x5b,0xe5,0x40,0xab,0xf6,0x05,0xd2 +.byte 0xba,0x85,0x78,0x61,0x2d,0x2e,0x07,0x06,0x6d,0x86,0x59,0xaa,0xd9,0x2c,0xfb,0x83,0x34,0xd0,0x2d,0x1d,0xad,0x5f,0xe4,0xac,0x05,0x46,0x3a,0x7b,0xd9,0xef,0x9f,0x2b,0x0c,0x18,0x21,0xf1,0x24,0x8a,0xb4,0x6e,0xd2,0x98,0x75,0x08,0x96,0x0c,0x7b,0x41,0xb7,0xf7,0x1f,0xcd,0xa8,0x1f,0x44,0xb1,0xed,0xdc,0x0e,0xcb,0x94,0xa0,0xb8,0x62 +.byte 0x67,0xdc,0x24,0xde,0x9e,0xe9,0x89,0xcd,0x92,0x7c,0x91,0x15,0xff,0xbd,0xfd,0xee,0xf8,0x29,0xd7,0xf9,0xe8,0x51,0xe7,0xc8,0x21,0xc5,0x20,0xe4,0xb8,0xa6,0xdb,0xfb,0x09,0x65,0x1c,0x3b,0x9e,0x39,0x44,0xcf,0xf5,0xc2,0x7b,0xf3,0x14,0x7d,0x69,0xf2,0xd0,0x97,0x63,0xf1,0xa7,0x81,0x56,0xfb,0xdf,0x4d,0x83,0x55,0x4f,0xde,0x50,0x7d +.byte 0xfe,0xb0,0xc0,0xc8,0x3b,0x3d,0x78,0x74,0x58,0x74,0x5e,0xfc,0xb7,0x0d,0x9a,0x26,0x3b,0x39,0xb6,0xf7,0xe0,0xe4,0x12,0x3c,0xd6,0x88,0x1c,0x9b,0x51,0x89,0xe7,0x53,0xcd,0x24,0x2e,0x34,0xa2,0xee,0xfa,0x5a,0x87,0xe5,0x7e,0xd5,0xf2,0x2f,0x15,0x99,0x57,0x5d,0x31,0x02,0xf8,0x08,0x38,0xea,0x8c,0x30,0x21,0xb0,0xff,0x94,0x51,0xcf +.byte 0x23,0xb7,0x02,0x5d,0xa3,0x75,0x7f,0x9d,0x66,0x49,0xe5,0xbe,0xc7,0x06,0x5e,0x1d,0xc9,0xe2,0x82,0x8a,0xc4,0x17,0x83,0x7e,0x65,0x6d,0x85,0x26,0x66,0xc0,0xf4,0xa5,0x1c,0x6e,0xba,0x32,0xfa,0x41,0x7b,0x2b,0x64,0x98,0x58,0x8c,0xce,0x2f,0xf3,0x56,0xf0,0x67,0xef,0x73,0x79,0xc4,0xc2,0x07,0xd7,0x85,0x1d,0x75,0x38,0x1e,0x15,0x82 +.byte 0x9d,0xf3,0xdd,0x3a,0x72,0xa3,0x23,0x0e,0x4a,0x1a,0x3a,0x97,0xc8,0xf1,0xf1,0x58,0x5d,0x1f,0xae,0x6d,0xc8,0x03,0xe0,0x7b,0x0f,0xf5,0x6f,0x35,0x41,0x8d,0xd5,0x03,0x85,0xdd,0xeb,0x3d,0x73,0xb1,0x93,0x35,0xc0,0x0f,0xfb,0x42,0xd4,0xf1,0x6b,0x35,0xe2,0x96,0xc5,0xd9,0xf2,0x69,0xbb,0x70,0x5e,0xf0,0x0c,0xe6,0xb5,0x81,0x94,0xc9 +.byte 0x29,0xa1,0x34,0x89,0xd9,0x9c,0x49,0x01,0x37,0x56,0x16,0x30,0x47,0x6f,0xe4,0x7c,0x5b,0xdd,0xfb,0x80,0x7f,0x0c,0x38,0x53,0x3d,0x57,0xf7,0xc4,0x80,0xf9,0x12,0x3a,0x9f,0xf9,0xb0,0xb6,0x94,0x6d,0xde,0x41,0x4e,0x30,0xac,0x1f,0x25,0x34,0xa0,0x95,0xe8,0x00,0x86,0x32,0x40,0xbb,0xc1,0x49,0x2d,0x07,0x49,0xb8,0x5f,0xcd,0x1b,0xd3 +.byte 0x0e,0x0c,0x54,0x0f,0xe4,0x20,0xe5,0xa1,0xed,0x98,0x65,0x5a,0xe7,0xce,0x68,0x9c,0x4c,0x48,0x03,0x9c,0x5b,0x68,0x4b,0x75,0x71,0x11,0x40,0x69,0xca,0x9a,0x3a,0xb2,0x3d,0x35,0x2c,0x70,0x35,0x8b,0x80,0x53,0x86,0x30,0x7d,0x4c,0xe9,0xc0,0x30,0x60,0xd0,0x06,0xbe,0xc2,0xad,0x39,0xcc,0xb2,0xec,0x90,0xcc,0xbd,0x7c,0xb5,0x57,0x20 +.byte 0x34,0x2e,0xfc,0xce,0xff,0xe3,0xd9,0xac,0xb8,0x62,0x6b,0x45,0x22,0x34,0xdf,0x8e,0x4b,0xf1,0x80,0x28,0x8d,0x0f,0xd5,0x3b,0x61,0x3e,0x91,0xa1,0xb1,0x85,0x27,0x78,0x88,0xbc,0xc4,0xb1,0xa1,0xbe,0x4f,0xc3,0xfd,0x1f,0xb9,0x30,0x31,0x2f,0xc1,0x9d,0xa3,0xb6,0x29,0xa4,0x60,0x82,0x73,0x93,0x74,0xea,0x97,0x67,0xf2,0xa3,0x97,0x50 +.byte 0x2f,0x9f,0x7b,0x23,0x18,0xb6,0xb4,0xee,0x15,0xa0,0xa4,0x07,0x1a,0xe9,0xb6,0x63,0x7e,0x88,0x40,0x57,0x86,0x79,0x6b,0x75,0xbe,0x57,0x8f,0xfe,0x0d,0xdf,0x4c,0x7f,0x39,0x9a,0x97,0xa6,0x87,0xc5,0xfd,0x52,0x77,0x36,0xc9,0x66,0x63,0xcf,0xc7,0x34,0x3b,0xf4,0x7a,0x12,0x56,0xf0,0xbc,0x7a,0x1a,0xa2,0xa2,0x51,0xb8,0xc1,0x70,0x81 +.byte 0xcf,0x1d,0xb5,0xe2,0x82,0xbb,0xfc,0xa3,0x80,0x18,0xf8,0x4b,0x76,0x9c,0xdf,0x9d,0x6c,0xf1,0xd8,0x2a,0xab,0x0c,0x12,0x02,0x29,0x09,0xfd,0x28,0xfb,0x57,0x38,0x05,0x2c,0xc5,0x67,0xd1,0xaa,0xbc,0x98,0xe6,0x22,0x78,0x06,0x4f,0x69,0x6a,0x63,0x1a,0x13,0x0b,0xa5,0xd2,0x61,0xc7,0x45,0x5b,0x21,0xab,0xbf,0x7b,0x7f,0x8c,0x2c,0xba +.byte 0x93,0x9f,0x41,0x67,0xc4,0x5f,0x53,0xac,0x90,0x05,0x86,0xb5,0x80,0x1f,0x5b,0x35,0x4f,0x92,0xf5,0xa8,0x5f,0xfb,0x56,0xdd,0x2d,0x9b,0xea,0xcb,0x0f,0x98,0x3c,0x4e,0xf1,0xa5,0x2c,0x37,0x70,0xe3,0x5c,0xaf,0x96,0x36,0xa8,0x2a,0xec,0xe0,0x2c,0x00,0xcd,0xaf,0x03,0x1d,0x05,0x2f,0x8c,0xe7,0xfe,0x4d,0xe9,0x97,0x6d,0xe1,0xf9,0x23 +.byte 0x60,0x08,0xea,0xfb,0x27,0xc8,0xf9,0xdf,0x49,0xfe,0xd9,0x48,0x35,0x6b,0x43,0xc5,0x19,0x90,0xb1,0xf1,0xee,0x84,0x7a,0x57,0xfa,0xa5,0xd6,0xd8,0xc9,0xf0,0x8a,0xe7,0x13,0x84,0xfc,0x28,0x54,0xae,0x99,0xfd,0x91,0xbe,0x91,0x27,0x98,0x28,0xdc,0xd7,0x2e,0xc1,0x21,0xcb,0x31,0xf8,0x47,0xe6,0x77,0x6d,0xee,0x7b,0x12,0xe4,0x9e,0x9d +.byte 0x07,0x46,0xa9,0x15,0x0b,0x3c,0xbe,0xc7,0x2d,0xe5,0xd6,0x25,0x4c,0xea,0x61,0xdc,0x18,0xb2,0x9d,0xb0,0x9a,0xff,0xa3,0x5f,0x2b,0xab,0x52,0x7d,0x1b,0xc3,0xa3,0x41,0x8f,0x5a,0x29,0xbd,0xc4,0x56,0x54,0x43,0x2d,0x61,0x07,0xed,0xd1,0x81,0x45,0xdb,0x61,0x0f,0xda,0xea,0xa6,0x1e,0xf9,0x9c,0xc0,0x8c,0xc4,0x8e,0xc7,0xca,0x38,0xe2 +.byte 0x45,0xde,0xdc,0xc5,0xc6,0xb0,0x43,0x17,0x8b,0xb1,0x58,0xd1,0x10,0x8e,0xa5,0x17,0x37,0x85,0xca,0x61,0x67,0x5c,0xd0,0x72,0x22,0x6b,0xd3,0x3b,0x53,0xbc,0xfb,0xe1,0x1e,0xa4,0x1b,0xd3,0xc3,0x8a,0x50,0x03,0x39,0xf5,0x36,0xdf,0x51,0x2e,0x05,0x4a,0xa8,0xdb,0x91,0x87,0xae,0xfe,0x3f,0x5c,0x35,0x5e,0xf9,0x8f,0x43,0x9e,0x92,0x36 +.byte 0x91,0x27,0x90,0xe8,0x7c,0xcc,0xc4,0x9c,0x13,0xbb,0x61,0x40,0xec,0x4f,0x49,0xcf,0x04,0x38,0x77,0x3b,0xb5,0xf8,0x69,0x8d,0xbb,0xb2,0x30,0x32,0x42,0x4d,0x7d,0x6c,0x56,0xdc,0xf4,0x8f,0xfc,0xb8,0x53,0xc5,0x11,0x17,0x23,0x94,0xf9,0x6d,0x6f,0xee,0xee,0x31,0xbf,0xce,0x11,0x8b,0x9e,0xd7,0xa5,0x09,0x36,0x89,0x72,0x25,0x18,0x1f +.byte 0x13,0xa7,0xdf,0xc5,0x91,0x7e,0xd6,0x2b,0xb8,0x08,0x9c,0x12,0x83,0x21,0x97,0x3d,0xad,0xac,0x1c,0x54,0xf3,0x65,0x04,0x2f,0x09,0xd1,0xd2,0xe5,0xce,0x24,0xb1,0xd9,0xe4,0x38,0x1f,0xb4,0xce,0xea,0x27,0x7f,0x5f,0x16,0x52,0xa4,0x2f,0x2f,0xaf,0x91,0xec,0x7a,0x21,0xf7,0xa1,0x38,0x78,0x78,0xc5,0xa9,0x94,0x63,0x87,0xf8,0x95,0x9e +.byte 0xf9,0x82,0x98,0x6d,0x9d,0x48,0x80,0xaa,0x7a,0x36,0xf9,0x5f,0xfb,0x39,0x3d,0xae,0xbc,0xcd,0xfc,0x67,0x46,0x07,0x7e,0xdf,0xef,0xff,0x8d,0x67,0xe7,0xd9,0x60,0x90,0x7b,0x49,0x10,0x65,0x3a,0x60,0x87,0x7a,0xed,0x9a,0x44,0x48,0x81,0xcc,0xad,0xe4,0x6a,0x62,0xf8,0x02,0x6f,0x41,0x8a,0x8d,0x44,0x28,0x1a,0xb8,0x52,0x60,0x4b,0x3f +.byte 0xfc,0xdd,0x33,0xad,0x14,0xb1,0x34,0x63,0x1f,0xdc,0xeb,0x9a,0x3f,0x99,0x82,0x28,0x36,0x6f,0x8e,0xd7,0x39,0x2e,0xc0,0x37,0xfb,0xad,0x57,0x6c,0x82,0x1a,0xc6,0xe4,0x4b,0xca,0x00,0x68,0x57,0x34,0xf0,0x57,0x6a,0xcb,0x50,0x5d,0x8d,0xfa,0xcd,0x89,0x41,0x91,0x23,0x98,0x1f,0x4f,0x18,0xb6,0xd2,0x9d,0xde,0x2f,0x5c,0xe6,0x08,0x76 +.byte 0x97,0xba,0x24,0x4e,0x84,0xd7,0xeb,0x80,0xde,0xec,0xee,0x51,0x5a,0x0e,0x5f,0xb7,0x37,0xda,0xa5,0x94,0x2b,0x6d,0x73,0xb7,0x6c,0x22,0x95,0x3a,0xaa,0x5c,0x6f,0x89,0x90,0xec,0xb3,0x31,0x00,0x37,0x28,0x18,0xbb,0x98,0x23,0xfc,0x3e,0x21,0x7c,0xaa,0x44,0x54,0x7b,0xe6,0xa0,0x17,0x58,0xef,0x11,0x3f,0x48,0xb8,0xa8,0x15,0x4a,0x92 +.byte 0xa9,0x39,0xe2,0xa6,0x38,0x03,0xa6,0xd3,0x79,0x8b,0x38,0x06,0xaf,0x4b,0xd4,0xab,0x0a,0x13,0xff,0x2d,0xfa,0xab,0x4b,0x64,0x9e,0xb0,0x3d,0xba,0x18,0x01,0xfd,0xc3,0x6a,0x6f,0x21,0x9c,0xf5,0x2f,0xab,0x2d,0x42,0x12,0xc9,0x72,0xde,0x83,0x42,0x6a,0xf0,0xd4,0x96,0x73,0xf1,0x93,0xa3,0x2d,0x9b,0xb4,0x94,0x51,0x0c,0x6e,0x8e,0xf0 +.byte 0x5e,0xbf,0x98,0xbf,0x08,0x0f,0xd8,0x6c,0x65,0x4e,0xb5,0x47,0xeb,0x7c,0x1b,0x73,0xe0,0xe6,0x2c,0x03,0xd2,0x2a,0x32,0xff,0xa7,0x03,0x6d,0x38,0x47,0x56,0x4b,0x25,0x0b,0x39,0x73,0x87,0x4b,0xa5,0x12,0x79,0x79,0xf3,0x88,0x37,0xe2,0x4f,0xb8,0xbf,0x70,0x0e,0xf7,0x8c,0xe6,0xa3,0xbc,0x35,0x10,0xcd,0x72,0x56,0xd6,0x83,0xc1,0x0b +.byte 0x5b,0xf3,0xa8,0x74,0xc7,0xb9,0x84,0xc8,0x6c,0xff,0x66,0xad,0x95,0x6f,0xbc,0x82,0x84,0x2a,0x11,0x40,0xf9,0xa8,0x3f,0x05,0xf9,0xab,0x19,0x55,0xce,0x80,0x90,0x65,0x49,0x3d,0xe1,0x54,0x2c,0x1a,0xdb,0xf3,0xaa,0x2f,0xeb,0xf5,0x10,0x1f,0x8c,0x35,0x46,0x68,0xb1,0x4c,0x52,0xe7,0xe9,0x58,0x78,0x33,0xfd,0xc6,0x13,0x0e,0x69,0xae +.byte 0xf4,0x1a,0x8a,0x77,0x8f,0xcc,0x98,0x74,0x88,0x20,0x84,0x5b,0x83,0x54,0xa9,0xee,0xc2,0x0f,0x8a,0x46,0xb1,0xc7,0xfb,0xfd,0xf2,0x2c,0xaf,0xfa,0x72,0x34,0x7a,0x79,0x50,0x10,0xc6,0x04,0xfd,0x0a,0x1e,0x4a,0xb5,0xf5,0xe7,0x4d,0x98,0x80,0x5d,0x0b,0x81,0x23,0xc3,0x6e,0xbf,0xc8,0xcd,0x35,0x96,0x5a,0x58,0xec,0xef,0x6a,0x8d,0x48 +.byte 0xda,0x48,0xbb,0x8f,0xcc,0x1f,0x86,0xff,0x7a,0x27,0xef,0xe6,0xb7,0xc7,0x2a,0x47,0x8d,0x6c,0x4a,0xc6,0x0a,0x32,0x67,0x1d,0x2f,0x83,0x3d,0x46,0x41,0x46,0x1c,0x75,0x7b,0x29,0x89,0xa2,0x65,0x9b,0x53,0x3d,0xd9,0x90,0x83,0xce,0xab,0x07,0xbb,0x46,0x61,0xb1,0x54,0xbd,0xc9,0x98,0xf7,0x96,0x76,0x03,0xdc,0x1f,0x1b,0xf2,0x5c,0x07 +.byte 0xdd,0x24,0x94,0x72,0x1e,0x94,0xb1,0x14,0x0b,0x40,0x77,0xde,0x3d,0x3f,0x1c,0xf0,0x8f,0xa4,0xcb,0x34,0xb5,0x2b,0x72,0x53,0x78,0xf3,0x3f,0x8e,0x47,0x30,0xb2,0x7e,0x73,0x3f,0x9a,0xef,0x19,0xb1,0xef,0x82,0x99,0xd4,0x17,0x60,0x94,0xf6,0x15,0x75,0x50,0x1f,0xb3,0xdd,0xae,0x1f,0xf8,0x63,0x9a,0x30,0x2c,0xf0,0xdd,0xbf,0x49,0x70 +.byte 0xd7,0x86,0x4a,0x5c,0x46,0x10,0x48,0x46,0x02,0x18,0xa4,0x39,0xb6,0x75,0x11,0x21,0xae,0x62,0x64,0xd8,0x85,0xc8,0xda,0xd2,0xd6,0x69,0xcc,0x37,0x57,0x49,0x73,0x1a,0x10,0x7b,0xd7,0x58,0xdd,0x0b,0xf3,0x16,0xe7,0x62,0x2c,0x32,0x92,0x0e,0x70,0x6f,0x77,0x74,0x0d,0xff,0xc2,0x8d,0x3b,0x3f,0x29,0x28,0x8f,0x88,0xb8,0x02,0x5b,0x3a +.byte 0x8b,0x65,0x89,0x92,0x2f,0xc7,0x30,0x73,0xc3,0x20,0xbc,0xa4,0xe4,0x5e,0xea,0xf8,0x21,0xb6,0xc5,0x47,0x56,0x35,0x8f,0xf6,0xd5,0xdd,0x77,0x1d,0xdf,0xd0,0x27,0xa3,0x04,0xb9,0xd0,0xc4,0x28,0x16,0xa5,0xaf,0x47,0x55,0x85,0x93,0x38,0xf4,0xac,0x13,0x30,0x7d,0x77,0x1f,0x3d,0xd5,0xd7,0x22,0xbe,0xe2,0x4e,0x6d,0x4b,0x0e,0xbe,0x1d +.byte 0x43,0x79,0x34,0x95,0x6f,0x38,0xa1,0xb3,0xa0,0xed,0xf6,0x17,0xf4,0x24,0x70,0x26,0x18,0x3e,0x1c,0xde,0xdc,0xa9,0x67,0x12,0xd3,0xc8,0xd7,0x70,0x13,0xa5,0xb3,0x25,0xe1,0x0a,0xe9,0xf6,0x4e,0x56,0x82,0x17,0xdc,0xbc,0x96,0x2f,0x59,0x03,0x9b,0xf4,0xc3,0x66,0xd2,0x90,0x95,0x1d,0xe0,0x99,0xfb,0xd8,0xa8,0x14,0xc7,0xa6,0x12,0x6b +.byte 0x08,0x6a,0xc8,0x0f,0x34,0x2a,0xb6,0xc4,0x9a,0xcd,0x61,0xf7,0x61,0xa3,0x59,0x29,0x11,0x30,0x76,0xb5,0x97,0xbc,0x2f,0x87,0xd8,0x12,0xb3,0x1d,0x99,0x8d,0x5d,0x57,0x0c,0xda,0xb0,0x9f,0x51,0x1a,0xb5,0xc6,0x94,0xc3,0xe9,0x5a,0x72,0x0c,0x37,0x76,0xb6,0x3c,0x00,0x02,0x69,0xad,0x8e,0x66,0x8b,0x5c,0x13,0x48,0xb7,0x9e,0xc5,0x7e +.byte 0xe0,0x35,0x07,0xd2,0x04,0x9c,0x35,0x95,0x8b,0x55,0x87,0x03,0x32,0x36,0xeb,0x11,0x88,0x54,0x8d,0x3e,0x88,0x46,0xc2,0xfe,0x24,0xa4,0x4b,0x92,0x19,0x44,0x6c,0xc9,0x69,0x32,0x22,0x95,0x5b,0xda,0x58,0xa4,0x00,0x33,0x83,0x2d,0xa4,0x17,0x2e,0x00,0x4d,0x9a,0x7d,0xef,0x04,0xa8,0x8b,0xf2,0x7c,0xb9,0xdb,0x54,0xcf,0x63,0x14,0x52 +.byte 0x5b,0x79,0xf6,0x89,0x5c,0xfa,0x8a,0x85,0x88,0x7f,0xca,0xed,0xfb,0x62,0xbc,0x1d,0x0d,0x90,0x51,0x27,0x45,0x74,0xa0,0x55,0xfc,0x60,0xea,0xef,0x6e,0x40,0xeb,0x0b,0x61,0x45,0x44,0xee,0xb6,0x20,0x4c,0xe1,0x08,0x62,0x29,0xdd,0xd0,0xa1,0xd5,0x7f,0x42,0xb9,0x0f,0x12,0xef,0xfb,0x13,0xa2,0xf1,0x85,0xaa,0x56,0x18,0x6c,0x70,0x7a +.byte 0x4d,0x52,0x76,0xce,0xa9,0xed,0x0a,0xcc,0x55,0xf0,0x01,0x99,0x44,0xe9,0xc4,0x74,0x33,0x2a,0xce,0x53,0xf3,0x4f,0x8f,0x1c,0x67,0x39,0x2b,0x0e,0x46,0xe2,0x49,0x06,0x52,0xbf,0xc4,0x3f,0x93,0x84,0x46,0x0a,0x9b,0xcb,0x1d,0xa5,0x66,0x9c,0x3e,0x3d,0xd1,0x92,0xda,0xe2,0x11,0x5b,0x89,0x7a,0xc4,0x33,0xba,0xa9,0x19,0xfd,0x3c,0xe3 +.byte 0xf0,0xa0,0x9b,0x83,0x50,0xce,0xa9,0x62,0xe3,0x85,0xc6,0xc4,0xe5,0x22,0xbb,0x1a,0x8e,0x04,0xb5,0x4d,0xca,0x18,0x7d,0xb0,0x99,0x50,0x78,0x88,0x69,0x43,0xe0,0xfd,0x90,0xa6,0xbf,0xdc,0xe3,0x03,0xf2,0x5d,0xa1,0xa2,0x88,0xc7,0xab,0xa9,0xc2,0xda,0x3f,0xff,0x79,0xa6,0x07,0xfd,0xc4,0xb1,0xfb,0x47,0x3d,0x75,0x82,0x26,0x52,0x85 +.byte 0x3f,0xf9,0xc9,0x85,0x46,0x24,0xe9,0x0f,0x96,0x8c,0xbb,0x02,0x83,0x60,0x69,0x49,0x8c,0x38,0xd1,0x4e,0xd0,0x63,0x2c,0xb6,0x12,0xb2,0x8e,0x4b,0xd3,0xe3,0xdf,0x20,0x00,0x99,0xf1,0x06,0x93,0xbf,0x27,0x42,0x8b,0xe3,0x8d,0x4c,0x3b,0x05,0x62,0x64,0x21,0xb1,0xfe,0xce,0x08,0xd2,0x23,0x69,0x11,0x74,0x31,0x3a,0x90,0x10,0x07,0x1a +.byte 0xd5,0xf5,0xc2,0x09,0x61,0x67,0x65,0x99,0x3a,0xf3,0x9e,0x4a,0xd8,0xa1,0xb2,0x50,0xf4,0x07,0xf0,0x7b,0x89,0x6d,0x4d,0x6a,0xd4,0x54,0xb9,0x3c,0xd5,0x4e,0x1c,0x12,0x0f,0x19,0x92,0x97,0x21,0x65,0x83,0x33,0x20,0x92,0x95,0xd4,0x0e,0x78,0xf4,0x92,0x16,0x36,0xd8,0x1b,0xd8,0xbf,0x41,0xe4,0xfb,0xb9,0x81,0x26,0x72,0x7e,0x1b,0x58 +.byte 0x05,0x45,0x97,0x66,0xf2,0x23,0x16,0xca,0x4e,0x95,0xc2,0x6c,0x60,0x84,0x5f,0x77,0x82,0x44,0x0e,0xf7,0x30,0xaa,0x51,0xa9,0x85,0x8b,0x03,0xfc,0x3d,0x6d,0x66,0x91,0x37,0xa5,0x1c,0xf8,0xcf,0x9d,0xd8,0xcd,0x8c,0xa1,0x29,0xbd,0xb5,0x4f,0x47,0xba,0xd1,0x55,0x3b,0x4e,0xc9,0xce,0x4c,0xcf,0x2e,0x19,0xa0,0x95,0xe6,0xcb,0x36,0x97 +.byte 0x3e,0x23,0xbe,0x09,0xfd,0x38,0x47,0x00,0x03,0xec,0x49,0xbb,0x49,0x1f,0x45,0x84,0x0f,0x1e,0x74,0xab,0xc9,0x07,0x00,0x04,0x70,0xe9,0xbd,0x61,0xb1,0x92,0xee,0x67,0x9a,0x5e,0x90,0xdc,0xe7,0x99,0x36,0xd0,0x58,0x15,0xe5,0x15,0xa2,0x1d,0x61,0x18,0x39,0x5f,0x6c,0xc7,0xbe,0xd0,0x23,0x1e,0x41,0xc8,0xaa,0x8e,0xbf,0xb8,0xdb,0x90 +.byte 0x8c,0x60,0x07,0x1e,0xe9,0x6c,0xe4,0xde,0xec,0x73,0x34,0x94,0x54,0xa4,0x6b,0x49,0xcf,0x87,0xb5,0x88,0x98,0xe6,0x2c,0xce,0xb7,0x76,0xa5,0x29,0xf1,0x29,0x50,0xc5,0x9e,0x13,0xe4,0x61,0x6a,0x54,0xb2,0x26,0xfa,0xfa,0x4a,0x41,0x3b,0x0a,0xf5,0x9a,0x60,0xbb,0xfc,0x1e,0x5d,0x21,0x7e,0x91,0x51,0xd6,0x5e,0x92,0xf9,0x21,0x80,0xa8 +.byte 0x35,0xc0,0xbb,0x7a,0xeb,0x75,0xb4,0xa3,0xd3,0x8d,0xaf,0x07,0x53,0x65,0x36,0x11,0xf9,0xb6,0x69,0x29,0x1e,0x5d,0x8f,0x57,0x5d,0xed,0x42,0xf9,0xd5,0xf6,0xc3,0x1e,0x29,0xc4,0x49,0x04,0xe4,0xfb,0xbf,0x9b,0x4a,0x7b,0xdd,0x57,0x51,0xfe,0xc4,0xd1,0xd9,0xe9,0x8f,0x94,0x78,0xbc,0x5c,0xeb,0xb6,0xbc,0x51,0xb0,0x82,0x87,0x47,0xb4 +.byte 0xf7,0xf9,0x02,0xd7,0xac,0x23,0xc0,0xe5,0x9a,0xc3,0x2f,0xd2,0xb8,0xb2,0x62,0xb9,0xdb,0x49,0x85,0x77,0x92,0xa6,0xe5,0x24,0x43,0x4d,0x0d,0x67,0x94,0x01,0x29,0xd6,0x2e,0xee,0xd9,0x2e,0x97,0x0e,0x20,0x7f,0x84,0x19,0x3c,0x3a,0x6f,0xa5,0xb0,0x8b,0x8f,0x8d,0x96,0xbb,0x76,0x61,0x97,0xc2,0x65,0x83,0xd8,0xda,0xab,0x42,0xfa,0xe5 +.byte 0x1e,0x42,0x93,0xa7,0x66,0x03,0x06,0x3b,0xbe,0xb8,0xae,0x71,0xee,0xdb,0x5d,0xdf,0x40,0x64,0x17,0x17,0x2e,0x03,0xca,0x37,0x2a,0x71,0x92,0x0a,0x01,0xa3,0x0f,0x0b,0x09,0xf2,0x0e,0x4b,0x4d,0x18,0xf3,0xc4,0xf2,0x51,0x7b,0x53,0x30,0xab,0x24,0xa2,0x47,0x38,0xc9,0x2c,0xdf,0x0d,0x32,0x3e,0x3f,0x57,0x2d,0xfc,0x44,0x19,0x64,0x8b +.byte 0xe9,0x9a,0xc2,0xf2,0xf6,0x2d,0x30,0x0c,0x0f,0xc3,0xc3,0xfe,0xc2,0xd1,0xbc,0xe0,0xbf,0xaf,0xeb,0x40,0x64,0x28,0xe2,0xd9,0x3c,0x7e,0x24,0x94,0x8f,0xe8,0x54,0x8b,0x26,0x6b,0xe1,0x4e,0x44,0x5a,0x7d,0x7b,0x12,0x36,0x2c,0x12,0xad,0x26,0xbc,0xa7,0xa3,0x2b,0x25,0xb9,0xde,0xe6,0x64,0x2d,0xab,0x7f,0x15,0x22,0x51,0x26,0x1c,0x15 +.byte 0x5d,0x13,0x18,0x93,0xc1,0x19,0x65,0xca,0xf3,0x8b,0xe0,0xcf,0x8c,0x43,0xe9,0xfd,0xa1,0xbd,0xe9,0xde,0x78,0x26,0xcb,0x7c,0xdc,0x68,0x06,0x98,0xf6,0x90,0x44,0x40,0xf0,0x5e,0xe1,0x16,0xf5,0x5d,0x4d,0x9b,0x85,0xe6,0x26,0xbd,0xab,0xcc,0x46,0x62,0x18,0x51,0xd5,0x3c,0x9f,0x6e,0xfa,0xe7,0x94,0xfc,0xc2,0x1a,0x9d,0x63,0x2c,0xdc +.byte 0xc3,0x89,0x67,0x94,0x37,0x58,0x0d,0x13,0xb8,0xdf,0x41,0x3d,0x70,0x78,0x1e,0x61,0x75,0x77,0xcc,0xbf,0x5f,0xa8,0xd3,0x89,0xcc,0xd3,0x40,0x4e,0x65,0xbd,0xce,0x3c,0xf0,0x5a,0x8f,0xe2,0xe1,0x24,0xaa,0xed,0x0f,0xd1,0x03,0x0d,0xf5,0x36,0x98,0xcd,0xa5,0x77,0x40,0x24,0x0a,0x82,0x68,0x79,0x82,0x38,0x68,0x6f,0x2b,0x0b,0xce,0x0f +.byte 0xcd,0x0f,0xba,0xdb,0xb5,0x22,0x38,0xd2,0xb0,0x9f,0x0f,0x08,0x0d,0xd8,0x5e,0xa7,0xd0,0xa9,0x39,0x66,0x4c,0x46,0xce,0x2a,0xc3,0x67,0x8c,0x91,0xdc,0xf1,0xc0,0x3a,0x58,0x50,0x1f,0xb0,0xa4,0x4d,0xbf,0x99,0x57,0xcf,0xae,0xb2,0xaf,0x6a,0x42,0xd2,0x7f,0x85,0x8c,0x40,0xc6,0x9a,0x93,0x57,0x54,0xf5,0xb4,0x83,0x59,0xb5,0x19,0x52 +.byte 0x7c,0x8b,0x76,0xee,0x35,0x90,0xbf,0xbe,0x65,0x58,0x3b,0x25,0x52,0x18,0xd8,0x7f,0x1f,0xe6,0x70,0xce,0x56,0x1a,0x45,0xa0,0x81,0xee,0x95,0x6f,0x55,0x43,0xaa,0x6e,0x87,0xa9,0xab,0x7d,0xe9,0xa1,0xa3,0x63,0xe7,0x1b,0x6b,0xa6,0x2c,0xe5,0x4a,0xb2,0x1e,0x73,0x5e,0xb5,0xae,0x83,0xe6,0x54,0x0b,0xc5,0x6b,0xb6,0xc4,0x73,0x62,0x1a +.byte 0xbf,0x1a,0x65,0xa2,0x5e,0x3a,0x45,0xd9,0xba,0x5b,0xef,0xf7,0x13,0x0c,0x7c,0x68,0xa1,0x98,0x71,0xb7,0x39,0x7c,0xbc,0x69,0xdb,0xd4,0xac,0x3f,0x82,0x63,0x9b,0x71,0x25,0x3a,0x06,0x73,0x60,0x71,0xc3,0x30,0xd3,0x96,0x02,0x4b,0x46,0xbd,0xd4,0x6e,0xc6,0x29,0xcc,0xd0,0xe1,0x0b,0x66,0x62,0xea,0x29,0xc7,0xcf,0x35,0x9e,0x2f,0x1f +.byte 0xa0,0xfc,0x8c,0x4a,0x83,0x8e,0x3b,0xf5,0x7a,0x6f,0x52,0xaf,0x99,0x9c,0x86,0xab,0xe5,0x1b,0x82,0xb3,0x18,0x35,0x77,0x9b,0xa3,0x94,0xc8,0x39,0x30,0x3f,0xad,0xa9,0x0f,0x93,0xb8,0xc8,0xed,0x04,0xf2,0x0b,0x9a,0xb1,0xd1,0xc9,0x9e,0x40,0x4f,0x71,0x21,0x63,0x2a,0x05,0x26,0x53,0xa3,0x3f,0x43,0xe4,0xf8,0x7c,0x2f,0xa3,0x5a,0x6e +.byte 0xc1,0x40,0xa8,0x4d,0xbc,0x03,0xae,0xe9,0x36,0xb6,0x37,0xdc,0x5f,0xef,0xb0,0x35,0x33,0xdf,0x33,0x71,0xaf,0x80,0xf2,0x69,0xd9,0xb5,0xfc,0xff,0xd2,0x5b,0x6a,0xeb,0xdc,0xe0,0x26,0x43,0x38,0x7b,0x24,0xb2,0x79,0x53,0x52,0x57,0xc4,0x1f,0x6d,0xc9,0x50,0xf2,0x63,0x9d,0xc1,0x22,0x5f,0x11,0x82,0x38,0xdb,0xd3,0xb4,0x1d,0x10,0x72 +.byte 0x9e,0x4d,0x03,0x30,0xba,0x5e,0xe9,0x8c,0x21,0x12,0xe6,0x3a,0xd6,0x4c,0x18,0xa4,0x27,0xc9,0xf5,0x50,0xbd,0xbe,0xf0,0x86,0xd8,0x00,0x56,0xf0,0x10,0x81,0xec,0xeb,0xfc,0x5b,0x29,0x88,0xff,0x73,0x60,0x6b,0xf5,0x8c,0x0b,0x30,0x04,0x53,0x85,0x61,0x0c,0xfc,0xff,0x8f,0x21,0xd2,0xa1,0xcb,0xf7,0x90,0x53,0x3b,0xf4,0xf0,0x2c,0x7d +.byte 0xb6,0x84,0xe7,0x4c,0x88,0xea,0x4f,0xdf,0xff,0x0f,0x5d,0x0f,0xd3,0x2d,0x4f,0x7e,0xdc,0xd1,0x22,0x71,0x0d,0xae,0xa8,0xcf,0x05,0x7b,0xfc,0xfe,0x87,0x40,0xa5,0xe8,0xfd,0x3f,0xdb,0x2f,0x00,0x21,0xb9,0x70,0x02,0x2c,0x96,0x24,0xaf,0x35,0xe2,0x87,0xcb,0x50,0xcf,0x7e,0xfa,0xaf,0x39,0x82,0x0c,0xd5,0xa6,0x3f,0x9c,0x77,0x60,0x16 +.byte 0xbf,0x42,0xcc,0x97,0xd1,0x19,0x0d,0x8a,0x50,0x98,0x7d,0x19,0x7b,0x40,0x1c,0x22,0xde,0x50,0x90,0x32,0x9a,0x3d,0x07,0x35,0xc0,0x48,0x4c,0x0a,0xcd,0x91,0xab,0xf7,0xf3,0x06,0x77,0x80,0x96,0x7b,0x59,0x33,0xe6,0xbf,0x93,0xb8,0x59,0xd0,0x3a,0x1f,0xcc,0xe7,0x1d,0xd4,0xb5,0x58,0xee,0xe7,0x95,0xfa,0x75,0xdb,0x37,0x74,0xb0,0x7d +.byte 0x4d,0xee,0xef,0x20,0x13,0xe5,0x82,0x07,0x8e,0xdd,0x57,0x75,0x33,0x56,0xc4,0x80,0xb0,0x06,0x9f,0x6b,0x72,0x31,0xcf,0xac,0x5f,0x96,0x13,0xeb,0xf4,0x34,0xb6,0x6b,0x55,0xef,0x55,0x26,0x4e,0xdb,0x6c,0x2f,0x64,0x29,0x91,0x3c,0x6d,0x29,0xd2,0x94,0xbd,0x2c,0x99,0xb9,0x97,0x76,0xee,0x7d,0xfd,0xb2,0x8d,0x14,0x4f,0x09,0x81,0xb3 +.byte 0x68,0x3e,0x79,0x28,0x56,0x50,0x3f,0x86,0x4c,0x95,0x6c,0xad,0xf6,0xc5,0x43,0x25,0xea,0xbc,0xe2,0xba,0x77,0x18,0xc6,0x82,0x65,0x73,0x38,0x90,0x9d,0xc9,0x57,0xcd,0xa2,0x7c,0xd3,0x26,0x59,0x44,0xd9,0x79,0xae,0xdd,0x6f,0xe9,0xdc,0x16,0x73,0xba,0x05,0x8a,0x40,0x9f,0xe7,0xcf,0x29,0xa4,0xdf,0x49,0x7f,0x1d,0x73,0xc7,0x8b,0x8d +.byte 0xad,0xb5,0x3d,0x1b,0x64,0xb1,0x8f,0x78,0x06,0xbe,0xaa,0x2c,0x08,0x73,0xc7,0x2c,0xdc,0xd8,0x3f,0x9f,0x1b,0xd2,0xe1,0x4f,0x9d,0x87,0xb8,0xa9,0xdc,0xef,0xbc,0x31,0x9f,0xf7,0x84,0x09,0xe7,0xbc,0xec,0x2a,0xcb,0x3b,0x3a,0x30,0xe2,0x5b,0xbc,0xcd,0xa8,0xdb,0x46,0x80,0xec,0xaa,0x06,0x8e,0xd8,0x6c,0x35,0x65,0x52,0xb8,0xc3,0xf9 +.byte 0x97,0x68,0x06,0x2d,0x3e,0x91,0x71,0x44,0x6e,0x01,0x51,0x10,0x5b,0x74,0xb9,0x3f,0xd7,0xf9,0x5c,0x98,0xe6,0xf8,0x98,0x32,0x26,0x9b,0x5e,0x9c,0x88,0xfb,0xaa,0x70,0xd2,0x2e,0xc2,0xf6,0x02,0x92,0x33,0x55,0x92,0xba,0xfb,0x0e,0x0b,0x08,0xdf,0x5d,0xdd,0x47,0x28,0xae,0x32,0xb3,0x27,0x8d,0xd4,0x18,0x43,0x64,0xc4,0x7f,0x60,0x62 +.byte 0xd9,0x63,0xd1,0x28,0xc9,0x75,0x3b,0x44,0xb4,0x8e,0x2a,0x93,0xf9,0x4c,0x4f,0x7e,0x6b,0x98,0xc9,0x1a,0x82,0x51,0x9a,0xb2,0x80,0x70,0x2e,0xff,0x19,0x66,0x1b,0xb6,0xbc,0x15,0x8e,0xe6,0x0f,0x8e,0x04,0x10,0x94,0x44,0x6c,0x32,0x4b,0x61,0xbc,0x4a,0x16,0x7b,0x25,0x2a,0x27,0x96,0xa9,0xa9,0x61,0x10,0xc1,0x46,0xdd,0xf5,0xe3,0xe8 +.byte 0x1f,0x5b,0xa0,0x77,0xe1,0x42,0x9a,0xd4,0x04,0x33,0x68,0x72,0x1c,0x44,0x29,0xce,0x98,0xe0,0xc7,0x3a,0x9e,0x3c,0xb9,0xb4,0x29,0xef,0x57,0xee,0x8c,0x8f,0x7c,0xe6,0xe1,0x43,0x6e,0x45,0x0e,0xdd,0x4e,0x11,0x4b,0x28,0x69,0xde,0xb8,0xfa,0x32,0xbe,0xc6,0x4f,0x11,0x99,0xe5,0xe3,0xe2,0x1f,0x03,0xbe,0x4a,0xad,0x60,0x68,0xc8,0x13 +.byte 0x80,0x4e,0xb6,0xc0,0xc5,0xc7,0x97,0x5c,0x0b,0x0e,0x64,0x43,0x78,0x70,0x95,0x91,0x8e,0x36,0x6b,0xad,0x57,0xc7,0x1e,0x9c,0x54,0xc9,0x89,0xf0,0x13,0xde,0x0a,0xbe,0xc0,0xa9,0x35,0x77,0x0a,0x01,0x7f,0x98,0x51,0x82,0x92,0x14,0xe0,0x9a,0x08,0xa3,0x0c,0x6c,0x67,0xf2,0x05,0xaa,0xa9,0x4e,0xce,0x3b,0xb1,0xb6,0x8c,0x82,0x5d,0x11 +.byte 0xf2,0xe5,0xd7,0xda,0x3a,0x65,0xa0,0xe3,0xa4,0x09,0x01,0x1c,0xb2,0x08,0x90,0x94,0xb5,0x51,0x56,0x24,0x22,0xfd,0x12,0xad,0x7a,0x75,0xcf,0x0f,0x0f,0x23,0xc3,0xa6,0x1f,0xf8,0x39,0xbc,0x2f,0x18,0x53,0x14,0xef,0xdf,0x90,0x6a,0x50,0x2b,0x8c,0x8b,0xa8,0xd4,0x8c,0x59,0x8f,0xd8,0x81,0x86,0x57,0xc1,0xd1,0xfb,0xe7,0xa6,0x20,0x6e +.byte 0x7c,0xbf,0xce,0xe3,0xce,0x28,0x35,0x7c,0x8e,0x1a,0x66,0xea,0x7d,0x81,0x09,0xdb,0xa8,0x64,0xba,0x3c,0x07,0x3f,0x23,0xd3,0x05,0x97,0x4c,0x92,0xc2,0xa4,0xe8,0x6c,0xfb,0xa0,0x9d,0x8b,0x4d,0xcb,0x3a,0x96,0xe7,0x04,0x0f,0x48,0x87,0x2c,0xdd,0x51,0xf3,0x46,0x7e,0x61,0x89,0xbe,0xb8,0xb0,0x9e,0x9c,0xc4,0x37,0x55,0xe6,0x4f,0x78 +.byte 0x7e,0xb0,0x59,0x42,0xca,0xba,0x4a,0xb2,0x50,0xbd,0x16,0x68,0x99,0x42,0xb4,0x8b,0x60,0x3d,0x54,0x41,0x17,0x11,0x39,0x42,0x5d,0x41,0xec,0xc2,0x53,0x82,0x7c,0x32,0xc9,0xd1,0x34,0x49,0xd8,0x4f,0x29,0x21,0xeb,0x97,0x98,0x4c,0xeb,0x21,0xce,0x50,0xd6,0x53,0xd9,0xf1,0x6e,0x26,0xfa,0xe4,0x71,0x34,0xd8,0x38,0xac,0x39,0x4f,0x02 +.byte 0x36,0x93,0xf2,0x08,0x88,0xdc,0x24,0xdd,0x1f,0xf5,0xe9,0x7f,0x83,0xa0,0xa4,0x6b,0xc5,0xef,0x8e,0x82,0xf9,0x92,0xbc,0x82,0x3f,0xce,0x86,0xa6,0x34,0xf8,0x16,0xa7,0xdb,0x97,0xca,0x54,0x43,0xd8,0xfc,0x31,0xde,0x73,0xd0,0x79,0x1a,0xac,0x61,0x15,0xbd,0x38,0x64,0x3b,0xc6,0xb5,0x95,0xeb,0x2e,0x68,0xe4,0x1d,0x6b,0x18,0xab,0x88 +.byte 0xb0,0x96,0x51,0x8c,0xbe,0x41,0x63,0xd6,0x9a,0x21,0x60,0xe8,0x26,0x37,0xb3,0x10,0x76,0x46,0x31,0x90,0xb0,0x9f,0x17,0xab,0x0f,0x93,0xcc,0x12,0x78,0xee,0x17,0x1c,0xd8,0xc7,0x76,0x0a,0x5a,0xb4,0x8b,0xb1,0x67,0x11,0xde,0x48,0x14,0x8a,0x2a,0xc7,0x71,0x46,0x94,0x15,0x29,0x44,0x9e,0x35,0x03,0x10,0xf7,0x51,0x8a,0xaa,0x9c,0x4a +.byte 0x9a,0x44,0xd5,0xc7,0x37,0x9d,0xb4,0xad,0x41,0xd0,0xda,0xd2,0x1a,0xf9,0x93,0xee,0x28,0x32,0x65,0x0b,0x9c,0x12,0xe3,0xad,0x9f,0x82,0xeb,0x3f,0x03,0xe7,0x6a,0x58,0x83,0x3f,0xbe,0x9f,0x27,0xd3,0xd6,0xe2,0x45,0xbf,0x90,0xe2,0x12,0x61,0x0b,0x57,0xd7,0x06,0x72,0x39,0x2c,0x3e,0x65,0xb2,0xf4,0xf7,0x54,0xef,0x32,0x99,0x44,0x0d +.byte 0xf0,0x5c,0xde,0x4c,0x2e,0x22,0xcd,0x3c,0x25,0x02,0xa5,0x0d,0x79,0x16,0xb0,0x51,0x3f,0x3c,0x84,0x56,0xfa,0x00,0xae,0x7a,0x36,0x45,0x3a,0xcc,0x1d,0x66,0xff,0xf4,0x49,0xce,0xb5,0x5c,0x51,0xf4,0x3e,0x07,0xf2,0x83,0x84,0x4d,0x4e,0xb7,0xce,0x03,0x7b,0x23,0x63,0xdf,0x64,0xa2,0x55,0x92,0xf9,0x2e,0xa5,0x21,0x89,0x29,0x42,0x48 +.byte 0x36,0xc5,0xab,0xd6,0x82,0xe3,0xff,0x45,0xfc,0x61,0xa6,0x4f,0xb9,0x51,0xba,0xd5,0x03,0xa9,0x0b,0xe7,0x73,0x83,0x97,0x1d,0xb2,0xc6,0x75,0xa0,0x52,0x99,0xfc,0x1b,0x27,0x7a,0x10,0xc1,0xed,0x70,0x21,0x4b,0x93,0xa4,0x20,0xed,0x16,0x76,0x97,0x82,0xab,0x21,0xfe,0xa4,0x3f,0xd9,0xbd,0x9c,0x2f,0x19,0x42,0xbc,0xb3,0x4f,0x44,0xf3 +.byte 0x9e,0xd0,0xe7,0xc9,0x7e,0x31,0xaa,0xbc,0x4b,0xba,0x73,0xe1,0xc3,0xbf,0x5d,0xa2,0xd8,0xb7,0xb6,0xfc,0x0a,0x32,0xb9,0xff,0x80,0xb6,0x2a,0x8b,0xea,0x81,0xa0,0xeb,0x1e,0x9e,0x69,0xdd,0xbe,0xc1,0x8a,0x5d,0xfb,0x66,0x21,0x98,0x5c,0x6f,0xd8,0xb4,0xcf,0x8a,0x1a,0x4b,0xde,0xa2,0x20,0xe8,0x5a,0x5a,0xee,0x14,0x09,0xcb,0x63,0x1c +.byte 0x14,0x7d,0x9b,0x47,0xf8,0xfa,0xda,0xb7,0x0e,0xc6,0xbd,0xb2,0x13,0xb8,0x10,0xe2,0x71,0x04,0x36,0x78,0x6d,0x3a,0x8b,0x45,0xd3,0x05,0xec,0x8a,0x2d,0xfa,0x85,0x7c,0xdd,0x75,0xb3,0x2d,0xd1,0xae,0xfc,0xdd,0x02,0x2e,0xcc,0x43,0xc5,0xed,0xe4,0x3f,0xee,0x2c,0xd7,0x37,0x81,0x3a,0x44,0xe6,0xed,0x8c,0x9d,0x9d,0xfa,0xb5,0xdc,0xde +.byte 0xb2,0x7c,0x51,0x58,0xa4,0x21,0xac,0xe2,0x79,0x96,0x90,0xe2,0x0b,0xbf,0x51,0x66,0x77,0x02,0xff,0x67,0x0a,0x70,0x1f,0x04,0x6c,0xb0,0x5b,0x2d,0x26,0x23,0x5a,0x85,0x73,0x66,0x6e,0x7c,0xb3,0xeb,0x36,0x73,0x0f,0xcd,0xb2,0x07,0xee,0x78,0xd1,0xbd,0x5e,0xfa,0x31,0xf6,0x82,0x67,0x94,0xaa,0xff,0xef,0xd2,0x23,0xfc,0x82,0xaa,0xe2 +.byte 0xef,0xc3,0x74,0x79,0x6c,0xe9,0x3f,0x8d,0xe1,0x1b,0xc8,0xb4,0xff,0x15,0xf4,0x60,0xe8,0x84,0x3f,0xaa,0xc6,0x53,0x51,0x1a,0x9b,0x04,0x9b,0xab,0xc5,0xee,0x9a,0x98,0x80,0x89,0x8d,0x5b,0xef,0x0a,0x69,0x71,0xd2,0xf3,0x49,0xc1,0xc1,0x87,0xb3,0x18,0x4b,0x82,0x02,0x87,0xb0,0xf1,0x76,0x4b,0x3e,0xad,0x95,0x51,0xb1,0x64,0xb1,0x03 +.byte 0x5b,0xd2,0x10,0x7b,0x4e,0xd4,0x08,0xf8,0xfd,0xea,0xf0,0xc7,0x16,0x43,0x86,0xa6,0xdb,0xcd,0x75,0xce,0xa9,0xfd,0xa8,0x7c,0x51,0xf7,0xa5,0x29,0x6f,0x0d,0xee,0x66,0x8f,0xc6,0xcd,0x9e,0x3f,0x00,0x24,0x21,0xca,0x69,0x79,0x27,0x03,0x62,0xdf,0xad,0xb9,0x8c,0xd8,0x08,0x88,0x0d,0x0c,0xa1,0x29,0xf9,0xba,0x92,0xb5,0xdd,0xb8,0x1a +.byte 0xbb,0xab,0x44,0xb2,0xda,0x1b,0x8b,0xc1,0x3c,0x61,0x9f,0x7a,0x8b,0x89,0x99,0x09,0xc3,0xb4,0xe4,0x24,0xf5,0x3b,0x36,0xa6,0x61,0x0a,0xec,0x2a,0x1c,0x92,0x7c,0xb1,0x7c,0xd8,0x0b,0x98,0x48,0x8d,0x52,0xa2,0x57,0xc1,0x28,0x89,0xbb,0x60,0x5c,0x58,0x62,0x41,0x1c,0xd6,0xfb,0x69,0x09,0x93,0x90,0x31,0xc4,0x72,0x71,0xf0,0x4f,0xcf +.byte 0x10,0xbb,0xb7,0x6c,0x3b,0x53,0xa3,0x0b,0xff,0x44,0x4c,0x37,0xd5,0x26,0x83,0x7e,0x5c,0xb9,0xa5,0xe8,0x8b,0xc4,0x15,0xf6,0xc7,0xd1,0x39,0x67,0x01,0xb7,0xca,0xa7,0x71,0xa8,0x04,0x95,0x0f,0xfc,0x0a,0x9e,0x52,0xb2,0xfb,0x48,0x47,0xb6,0xa5,0x14,0xc2,0x4f,0xa8,0xd5,0x0f,0x10,0x76,0x39,0x23,0x74,0x2e,0xe5,0x17,0xcb,0xad,0x8a +.byte 0x4a,0x25,0xc8,0x9b,0x25,0x94,0x34,0xbc,0x4b,0x2f,0xdc,0x0a,0xcd,0xc1,0x02,0x72,0x7d,0xa0,0x10,0xa7,0x32,0x68,0xe8,0xd5,0x23,0xe8,0xc9,0xbc,0x05,0x05,0x1e,0xac,0x55,0x45,0xfb,0x42,0x2f,0x0f,0x51,0x8d,0x31,0xb1,0xbc,0x10,0xa1,0x03,0xc3,0x6f,0x35,0x08,0xa5,0x2f,0x91,0x4e,0x43,0x6b,0x62,0x3b,0x00,0x4c,0xd0,0xb8,0x33,0xbc +.byte 0xca,0x57,0xb8,0x1b,0xb4,0x52,0x1a,0xa7,0x03,0x78,0xa0,0x4f,0xda,0x86,0xb9,0xd8,0xc6,0x69,0xe6,0x61,0x2e,0x62,0x96,0x60,0x0d,0x76,0xdc,0x5d,0x0e,0xa8,0xf3,0x86,0xde,0xcf,0x39,0x34,0xc7,0x69,0xed,0xcb,0x9a,0xf5,0xc3,0xce,0x6d,0xa5,0x7f,0xae,0x73,0xb9,0xa6,0xbf,0x88,0x93,0x2b,0x0e,0x8b,0x4b,0xa5,0xeb,0x62,0xc6,0x1a,0xc7 +.byte 0x63,0x63,0x58,0x62,0x37,0xc6,0xbc,0x00,0x72,0xac,0x3d,0x7c,0x22,0xa5,0x59,0xf1,0x6e,0x60,0x45,0x3e,0x99,0x76,0x40,0x82,0xa7,0x52,0xf3,0x48,0x8e,0x4a,0xa3,0xe1,0x3b,0xea,0x77,0xa7,0x7d,0x13,0xe7,0xc4,0xc6,0xa6,0x6e,0xda,0xe8,0x50,0xc8,0x39,0x30,0xab,0x8a,0xe1,0x08,0xa9,0xe3,0xbd,0x8d,0xbd,0x83,0x3c,0xbc,0x6c,0x92,0xed +.byte 0xf1,0xa9,0xd3,0x50,0xf2,0x29,0x8b,0x39,0x46,0xaf,0x08,0x7e,0x00,0x64,0x2f,0xa8,0x18,0xab,0x7e,0x07,0xd3,0x63,0x2a,0xd3,0xd3,0xbb,0xf9,0xdd,0x2b,0xec,0x70,0x35,0x1a,0x94,0x6b,0x87,0xe4,0x1a,0x0a,0x44,0x46,0x08,0xa6,0xce,0x1b,0xf7,0xd7,0x20,0x87,0x1a,0x96,0x6c,0xbe,0xdf,0x73,0x3b,0xc9,0xaf,0x89,0x1c,0x2f,0x47,0xe9,0xd8 +.byte 0x03,0xa6,0x03,0x6c,0x73,0xa9,0x65,0x20,0x36,0xea,0x6f,0xe7,0x96,0x7c,0x01,0x87,0xb0,0x21,0xba,0xb4,0xed,0x1f,0x81,0x65,0x97,0x36,0xda,0x68,0x80,0x64,0x99,0xe6,0xda,0x95,0x04,0xdf,0x5d,0xfd,0x86,0xd1,0xfd,0xfa,0x1c,0xd7,0x89,0xbf,0xe6,0x99,0x6c,0xf5,0x01,0x56,0x20,0x88,0x79,0xa7,0x8d,0x88,0x82,0xe5,0x32,0x38,0xe0,0xf0 +.byte 0x98,0x63,0xa9,0xab,0xeb,0x09,0x8d,0xaf,0x3f,0xa8,0x57,0x98,0xde,0xc8,0x9c,0x8d,0x1d,0x18,0xc5,0xa8,0x82,0x51,0x9b,0x6f,0xc6,0xb8,0x09,0xd3,0xea,0xd4,0xe3,0xac,0xd1,0x0e,0x88,0xda,0xdf,0x38,0x53,0x14,0x87,0x28,0x6f,0x13,0x35,0xdb,0xfe,0xa1,0xe7,0x43,0xb5,0x02,0x46,0x08,0x1a,0x31,0x0d,0x9e,0x3d,0x3b,0xbf,0xbb,0x82,0x9c +.byte 0x09,0xf3,0xd9,0x22,0x0a,0x82,0x07,0xd3,0xe8,0x19,0x6e,0x21,0xd2,0xa2,0xa8,0x14,0xbc,0x42,0xb6,0xeb,0x8c,0x40,0x9b,0xb2,0xa9,0x17,0xad,0x2c,0x19,0xaa,0x4b,0x22,0xf9,0x4e,0xde,0x8f,0xbe,0x78,0x9b,0xab,0xb9,0xfa,0xb1,0x3e,0x68,0x86,0x1a,0x4a,0x61,0xba,0x63,0x51,0x25,0x11,0x59,0xd0,0xb7,0x0c,0xb7,0xcc,0x45,0x05,0x6d,0x5a +.byte 0xe2,0xd7,0x10,0x80,0x19,0xd3,0xa9,0xab,0xb6,0x9f,0x53,0x7a,0xaa,0x19,0x74,0x01,0xc9,0xd6,0x45,0x42,0x2c,0xe5,0xc0,0xcf,0x62,0xe6,0x95,0x6f,0x4c,0x90,0x50,0x97,0x61,0x83,0x73,0xd0,0xc2,0xd5,0xf0,0x05,0xca,0xe9,0x6f,0x67,0xa9,0x51,0xb8,0xb4,0x9d,0x30,0x8e,0xe3,0x29,0xf9,0x3b,0x3d,0x17,0x25,0xad,0xbb,0xb0,0x34,0x68,0x29 +.byte 0x06,0xad,0x0e,0xdf,0x41,0xa6,0xf1,0xa6,0x25,0xc4,0xf0,0x0d,0x57,0x84,0x34,0x2c,0x3b,0xb1,0x41,0xd6,0x83,0x00,0x3a,0x91,0x98,0x8e,0xd0,0x59,0x0b,0x2d,0xc9,0x65,0x03,0x91,0xcb,0x03,0x97,0x57,0xde,0x11,0x8b,0x4b,0x1b,0x85,0x0b,0xb6,0x68,0x25,0x3c,0x1a,0x04,0x7d,0xd5,0x2b,0x16,0x69,0x1f,0x64,0x8b,0x47,0x60,0x17,0xaa,0x68 +.byte 0x45,0xf2,0x0b,0xf8,0xa2,0x27,0xf8,0x47,0x86,0x41,0x94,0x3f,0x92,0xc3,0x02,0xab,0x80,0x2b,0x0e,0x3c,0xd0,0x13,0x59,0x08,0xfc,0x13,0x33,0x52,0xbb,0x2d,0x6b,0x22,0xa2,0x8b,0x9f,0x7c,0x8e,0x40,0x35,0xa4,0xc7,0x45,0xb7,0xf8,0x10,0x22,0x95,0xc5,0x48,0xc1,0x50,0x4d,0x4a,0x36,0xe1,0xec,0x1e,0x07,0xf7,0x68,0x63,0xcb,0x13,0x03 +.byte 0x70,0x63,0xb1,0x9b,0xf3,0x60,0x01,0x6e,0x63,0x5c,0x4d,0x2c,0x5c,0x5c,0x58,0x8b,0xbb,0x6e,0xd1,0x69,0xdd,0x19,0xfe,0xfb,0xd6,0xdc,0x68,0x97,0x9c,0x46,0x0d,0xdd,0x4d,0xbd,0x52,0xe4,0xd9,0xc2,0x03,0x4e,0x4c,0xe2,0x66,0x6b,0x4d,0xbe,0x6b,0xf3,0xd6,0xbe,0x2d,0xba,0xdd,0x1b,0x4f,0x60,0x02,0x74,0xa1,0xf0,0xd0,0xfa,0x23,0x33 +.byte 0x29,0x7e,0x00,0x09,0x47,0x15,0xa8,0xd8,0xdb,0xb8,0xe1,0x20,0xd5,0xe2,0x91,0xd0,0xe8,0xfa,0xa1,0x0d,0x80,0xbd,0x7d,0x62,0x9d,0xf2,0xbc,0x03,0xa1,0x44,0x9f,0x8d,0x3d,0xe3,0xb4,0xec,0x32,0xd9,0x66,0xb0,0xc7,0x75,0x11,0xaa,0xab,0xb7,0x84,0x1d,0x5b,0x4f,0x25,0x5c,0x53,0xed,0xbb,0x6d,0x06,0x1f,0x12,0x5f,0xc0,0xeb,0x55,0x3e +.byte 0xd0,0x5b,0x4d,0x07,0xf7,0x84,0x12,0xbc,0xc8,0xd4,0xf4,0x69,0xdb,0x71,0x8a,0x00,0x58,0xf5,0x84,0xff,0xc3,0xbc,0x13,0x6e,0x5f,0xac,0xd6,0x72,0x1b,0x2d,0xbb,0x27,0xfd,0x8d,0xcc,0x59,0x79,0xb9,0x63,0xe8,0x0a,0xf3,0x7f,0xa4,0x9f,0x4c,0x35,0x9a,0xdc,0xff,0x11,0x42,0xf3,0x1c,0x86,0xd0,0x22,0x7e,0x81,0x79,0x04,0x93,0x5c,0xf2 +.byte 0xab,0xdf,0xb7,0x1d,0x84,0xbd,0xde,0xfb,0xd2,0x75,0x43,0xb8,0x19,0x63,0x97,0xfe,0x0e,0x91,0x9d,0x38,0x50,0xc5,0x7a,0xd6,0x51,0xd4,0xfc,0x8d,0xec,0xd5,0xe2,0x07,0xce,0x21,0x03,0x02,0xa1,0x61,0x8d,0xf1,0xf5,0x1f,0xb3,0xaf,0x9f,0x13,0xd8,0x81,0xd2,0xf7,0xe9,0xe2,0x62,0x49,0xca,0x1c,0x15,0x07,0x39,0xe6,0x01,0xec,0x6c,0x7d +.byte 0x3b,0xf1,0x52,0xda,0xf2,0x97,0x55,0xef,0x6f,0x88,0x82,0x0e,0xe6,0xf4,0x3e,0x33,0xf6,0x61,0x6d,0xef,0xbf,0xa8,0x9a,0x91,0x2f,0xb3,0xd2,0x3d,0xaa,0x7a,0x4e,0x80,0xe1,0x04,0xbe,0xc7,0xf8,0xc3,0xc9,0xd8,0xa2,0x01,0x5d,0x30,0xae,0x6d,0x39,0x52,0x60,0x9d,0x07,0xd5,0xa2,0x86,0xf0,0x88,0x00,0xec,0x18,0x11,0x2d,0x69,0x86,0xa9 +.byte 0x5a,0x73,0xda,0x4e,0x4c,0xdb,0xb8,0x02,0xad,0x53,0xec,0x20,0x0f,0x35,0xe0,0x4f,0x6e,0xd5,0x04,0xcc,0xa0,0xf5,0x8c,0x7d,0x31,0x04,0xa4,0xcf,0xf0,0x27,0xd2,0xb6,0x7d,0x8c,0x26,0x5f,0x19,0xba,0x79,0x80,0xec,0x6d,0xfe,0xaf,0xc1,0x3a,0xc2,0x3d,0x14,0x3c,0xa0,0xc5,0x77,0xf4,0x96,0x56,0x51,0x8b,0x7c,0x7e,0xe5,0x23,0x5d,0x46 +.byte 0x1b,0x2e,0x28,0xc0,0x80,0x6b,0x6a,0x85,0x6c,0xcf,0xaa,0x28,0xf3,0x83,0x2d,0x42,0x6f,0xf3,0x5e,0x5d,0xa2,0x7b,0xba,0x5c,0x12,0xb0,0xda,0xa0,0xeb,0xdf,0xad,0x1d,0x4c,0x54,0xcf,0xad,0x02,0x68,0xcd,0xfe,0x5c,0x5b,0x65,0x6d,0xa5,0xcc,0xd3,0xed,0x32,0x74,0x6c,0x58,0x83,0x3a,0xc1,0x71,0xbf,0xb5,0xa2,0xbd,0x10,0xe5,0x46,0xc5 +.byte 0x00,0x82,0xb1,0xeb,0x6f,0x73,0xf9,0x12,0x23,0xe4,0xda,0xff,0xa3,0xc4,0x9c,0xf1,0xcc,0x0e,0x1a,0x7a,0x10,0x62,0x8f,0xa5,0xb2,0x35,0x51,0x67,0xb5,0x95,0xbe,0x4c,0x81,0x53,0xfc,0xdd,0x27,0x26,0x97,0x42,0x01,0xec,0x08,0x91,0xb8,0xf0,0xaf,0x57,0x54,0x73,0x52,0x8f,0xde,0xca,0xed,0x1b,0xca,0x8d,0x97,0x1e,0xdc,0xe7,0xfa,0x68 +.byte 0xaf,0x37,0xb0,0x62,0xa3,0x9f,0xbc,0xac,0x9f,0x28,0x1e,0xb7,0xaa,0xb0,0x91,0xe4,0x95,0xad,0xf9,0xe5,0xd4,0xcc,0x23,0x0f,0x4a,0x2d,0xdd,0xea,0x64,0xd1,0x04,0x3c,0xd0,0xca,0xfe,0xd3,0x19,0x9d,0x28,0xa5,0x1c,0xff,0x3e,0xae,0xe9,0xfb,0x12,0x03,0x6d,0xcf,0xbc,0x5f,0x27,0xce,0x1a,0xb9,0xc0,0x31,0x88,0x6e,0x2e,0xaf,0x35,0x5f +.byte 0xf0,0xce,0x92,0xf8,0x6f,0xd6,0x67,0x1c,0xc6,0x5c,0xee,0x59,0xaa,0xd6,0x8c,0xa8,0x13,0xe6,0xf7,0xe2,0x82,0x2f,0x82,0x1e,0x4c,0x0d,0xab,0x3e,0xdb,0x4d,0xc5,0x90,0x32,0xe4,0xf0,0x74,0xc1,0x92,0x1b,0xdd,0xf3,0xa7,0xf6,0x6b,0x01,0x9d,0x8d,0x78,0x3d,0x5a,0x46,0x74,0x16,0x93,0x44,0xca,0xbe,0x31,0xea,0xb4,0x65,0xcd,0xe6,0xdd +.byte 0x56,0x9d,0x63,0x48,0xf0,0xf3,0x15,0x91,0x6c,0x27,0xf9,0xf7,0x3b,0x9f,0x04,0x6d,0x4d,0x1d,0xf1,0x7c,0xd1,0x81,0x06,0xef,0x04,0x47,0x98,0x5d,0x21,0xf4,0xe0,0xa0,0x13,0xaf,0x1d,0xb0,0xd5,0x45,0x64,0x92,0x46,0x99,0xff,0xb4,0xbf,0x36,0x01,0x2d,0x23,0x6a,0xc4,0x6b,0x3f,0x91,0x10,0x03,0xaf,0x6e,0x79,0x86,0xdb,0x15,0xde,0xfa +.byte 0x0d,0x71,0x04,0x16,0x12,0x31,0x9b,0x69,0xb9,0xe0,0xe7,0x4e,0xfd,0x0e,0xd5,0x71,0xa0,0xc7,0xd7,0x46,0xdb,0xda,0xbd,0xcd,0xdc,0x77,0xe5,0x71,0x9d,0xa1,0xf4,0x02,0x10,0xc6,0x27,0x76,0x4e,0xa6,0x35,0xe6,0x9e,0xda,0xbe,0xd8,0xc0,0x21,0x15,0xd4,0xcc,0xd5,0x4b,0xdf,0x38,0xc5,0x15,0x4b,0xfa,0x4e,0x83,0xf4,0x27,0xdb,0x8a,0xb1 +.byte 0x0e,0x1f,0xc9,0x3c,0x1c,0x36,0x35,0x54,0x8b,0x54,0xf8,0x31,0x1e,0x0e,0x1c,0x4e,0x44,0x29,0x90,0xad,0x28,0x85,0xb4,0x72,0x2d,0x1b,0x8b,0x26,0x2f,0xb6,0xc2,0x14,0x0e,0x81,0xd0,0x37,0x29,0x5c,0x0f,0xdc,0x21,0x62,0x10,0x7a,0xeb,0xa3,0x6e,0xd4,0x5b,0xb4,0x13,0x2e,0xd6,0x8f,0xd9,0x57,0x0d,0x9b,0xfd,0x1e,0x66,0xb7,0x6e,0xac +.byte 0x88,0xb9,0x75,0x60,0x62,0x83,0x72,0x96,0xc6,0x2e,0xdc,0xfe,0x88,0xee,0x07,0x9a,0x62,0x19,0xde,0xf1,0xa5,0xfb,0xcc,0xdb,0x4a,0xeb,0x16,0x60,0x34,0x46,0xfc,0xf2,0x6d,0xee,0xfc,0xa0,0x3a,0xb1,0x11,0x03,0x8b,0xae,0x26,0xef,0x86,0x91,0x20,0x7a,0x19,0x35,0xd6,0x12,0xfc,0x73,0x5a,0xb3,0x13,0xf8,0x65,0x04,0xec,0x35,0xee,0xf8 +.byte 0x70,0xb2,0x0b,0xe1,0xfc,0x16,0x35,0xec,0x6b,0xdd,0x8b,0xdc,0x0d,0xe8,0x91,0xcf,0x18,0xff,0x44,0x1d,0xd9,0x29,0xae,0x33,0x83,0xfe,0x8d,0xe6,0x70,0xbb,0x77,0x48,0xaa,0xe6,0xbc,0x51,0xa7,0x25,0x01,0xcf,0x88,0xc4,0x8b,0xfc,0xb1,0x71,0x01,0xc7,0xfc,0xd6,0x96,0x63,0xee,0x2d,0x04,0x1d,0x80,0x24,0xd0,0x80,0x03,0xd9,0x18,0x96 +.byte 0xec,0x6a,0x98,0xed,0x6e,0x9a,0xe0,0x42,0x5a,0x9d,0xec,0xed,0x46,0x3c,0xb5,0xf0,0xd6,0x88,0x92,0x89,0x38,0x5f,0xd6,0xba,0xfd,0x32,0x31,0x81,0xe9,0xf1,0x56,0x89,0xa3,0x56,0xa6,0x03,0x00,0x60,0xe1,0xa8,0x59,0xdb,0xbe,0x72,0x39,0x6c,0x08,0x4d,0x26,0x57,0xa6,0xf6,0x13,0x7d,0x4a,0x2f,0x64,0xb8,0xa7,0x23,0x2c,0xa4,0x4a,0xad +.byte 0xcf,0xa1,0xa2,0x32,0xbb,0xd1,0x98,0x02,0xe4,0x1a,0x41,0x26,0x23,0xba,0xa2,0x17,0x62,0xaa,0xa6,0xc7,0x74,0x9d,0xea,0xc7,0xa0,0x08,0x0a,0x1a,0x4e,0x71,0xd9,0x45,0xf7,0xe8,0x57,0x79,0x12,0xd0,0x38,0x2f,0xdb,0xbd,0x5a,0x84,0xe1,0xb2,0x62,0x7e,0x56,0xb3,0x50,0x2a,0xa0,0x32,0x1f,0x86,0x71,0xc4,0xa5,0xba,0x93,0x5b,0x22,0x97 +.byte 0xf4,0xe5,0x44,0x27,0x6b,0x06,0x84,0x55,0x19,0x45,0x12,0x75,0x4b,0xf0,0x76,0x6d,0x3c,0x0a,0x17,0xc2,0x9d,0x96,0x72,0xe7,0x5e,0x79,0x84,0x0a,0x39,0x64,0x09,0x6e,0x7e,0xd7,0x77,0x40,0x75,0x2c,0xbd,0x98,0xae,0x3e,0x34,0x08,0x4d,0xda,0x2c,0xcf,0x0c,0xa2,0x8c,0x40,0xfa,0x34,0x43,0x15,0xed,0x4f,0x69,0xa6,0xef,0x2d,0x3c,0x55 +.byte 0x7a,0xe1,0x67,0xd1,0x0a,0x89,0xe0,0x2d,0x02,0x35,0x57,0xc8,0x9a,0x4b,0xc4,0x46,0xa7,0x57,0x03,0x89,0x7d,0x3f,0x70,0x47,0x03,0x06,0xd9,0x81,0x1f,0x8d,0x7e,0x36,0x9b,0xfd,0xad,0x20,0x9d,0x5a,0x29,0xe9,0x40,0x6a,0xb8,0x07,0x6b,0xc7,0x2b,0x58,0xd2,0x1d,0xef,0x88,0xa5,0xfb,0x3b,0xd6,0x9f,0xfd,0x89,0x0e,0x50,0xd4,0xbc,0x89 +.byte 0x3f,0x3c,0x6c,0x50,0xc6,0xe3,0x8b,0x7e,0x34,0x8b,0x26,0x99,0x2a,0xfa,0xa5,0x19,0x53,0xb5,0x5e,0xfd,0x94,0xe8,0x33,0xb2,0x6d,0x9c,0x3c,0x0c,0x14,0x90,0xc4,0xa2,0x4a,0x3a,0xca,0x07,0x72,0x46,0x37,0xfc,0x02,0x5d,0xf4,0x97,0xca,0x8e,0xc6,0xc4,0x63,0xda,0x5c,0x89,0xc3,0x6c,0xb1,0x1a,0xf5,0x2a,0xbc,0x2e,0xe3,0xcd,0x2f,0xe2 +.byte 0x91,0x16,0xf9,0x94,0x0e,0x1b,0xe6,0x01,0x73,0x61,0x1e,0xcf,0x5e,0x21,0x70,0xcb,0x5b,0x87,0xc1,0x46,0x39,0x59,0xa6,0x74,0x82,0x7f,0xa2,0x6c,0x4a,0x50,0x5f,0xbd,0x1c,0x1a,0x65,0x80,0x01,0x44,0x19,0xcf,0xcd,0xef,0x3d,0x5e,0x1b,0x71,0x82,0x4f,0x8b,0xc1,0xa0,0x9a,0x77,0xee,0xac,0x06,0xdc,0x6a,0xa0,0x34,0x50,0xa4,0xe0,0xda +.byte 0x3d,0xa0,0xf7,0x9a,0xb8,0xd5,0x59,0xe0,0x7f,0x05,0x04,0xd5,0x32,0x8c,0x49,0xf5,0x0a,0x0e,0x99,0x83,0xf5,0x47,0x2b,0x7c,0x7b,0x65,0x25,0x02,0xc4,0x88,0xbb,0x6a,0x4f,0x89,0x31,0x60,0xc2,0x47,0x8b,0x22,0xfc,0x4a,0xde,0xb3,0xb9,0xed,0xb8,0xdf,0xd7,0xd5,0x09,0x98,0xcc,0x5f,0xaf,0xbb,0x02,0xc3,0x62,0x62,0xee,0x99,0x42,0x1b +.byte 0xbe,0x5b,0xa8,0x5c,0x40,0x03,0x86,0x29,0x29,0x06,0x0b,0x53,0x46,0x29,0x03,0x3b,0x11,0x64,0xf1,0x09,0xca,0x69,0x69,0xfa,0xcc,0x85,0x23,0x14,0x1b,0xfd,0x65,0xb9,0xf5,0x6b,0xbb,0x2a,0x9d,0x6e,0x64,0x1a,0xe1,0x37,0x39,0xd4,0x85,0x40,0xa3,0xf9,0x04,0xec,0x9e,0x3b,0x74,0x97,0xa4,0x64,0x8a,0x48,0xb2,0x62,0xc1,0x1c,0xed,0x67 +.byte 0x6f,0x23,0xae,0x0f,0x64,0x2e,0xe5,0x92,0xb6,0xb5,0x71,0x24,0xc0,0x60,0x9a,0x10,0x23,0x6b,0x4a,0x22,0xe9,0x0a,0xaa,0x09,0x62,0x39,0xe0,0x40,0xee,0x13,0x27,0x14,0x73,0xeb,0x75,0x7b,0x4a,0xe1,0x42,0x65,0x37,0xae,0x80,0x08,0x26,0xf9,0x53,0x98,0x58,0xdd,0xf5,0xed,0x26,0x37,0x37,0x85,0xb5,0x88,0x91,0x05,0x2d,0x04,0xa6,0xd5 +.byte 0xa6,0x98,0xb0,0x0e,0x4b,0x4c,0x53,0x76,0x79,0xad,0x82,0xc5,0x16,0xba,0xd8,0x20,0x5f,0x4c,0x1d,0x69,0xa0,0xe0,0xe9,0xbc,0xb8,0x5c,0x10,0x4a,0x0a,0xd3,0x52,0x9c,0x2e,0x1b,0x6c,0xf7,0x43,0x83,0x6f,0xa9,0xcc,0x00,0xed,0x16,0x4c,0xc3,0x24,0x79,0x59,0x68,0xfb,0xf9,0xf6,0xb0,0xb4,0x01,0xc2,0xdd,0xf7,0xe5,0x3b,0x60,0x48,0x49 +.byte 0x32,0x48,0x05,0xa8,0x62,0xa3,0x03,0x9f,0x3d,0x91,0xdb,0x84,0x64,0x6f,0x1e,0x50,0x8e,0xdf,0x1a,0xa0,0xb1,0xf4,0x34,0x7c,0xe6,0xb7,0x7c,0x14,0xa1,0x65,0x1a,0xb4,0xdb,0x67,0x78,0xb1,0x88,0x3c,0xc2,0x5e,0x0e,0xea,0x32,0x15,0xc7,0xda,0xe4,0x9a,0x44,0xde,0x61,0x90,0x3b,0x97,0x11,0x5b,0x6d,0xa5,0x9a,0x2f,0x1b,0x8b,0xd7,0xdd +.byte 0x73,0xe4,0xc3,0x19,0x5d,0x68,0xcf,0x0e,0xe4,0x69,0xa5,0xeb,0x50,0x6f,0x79,0xff,0x91,0xc6,0x95,0x83,0xe8,0x72,0x6a,0x01,0x49,0x2b,0xcf,0x8f,0x93,0x1e,0xef,0x31,0x17,0x8f,0xa8,0x2b,0x5f,0x4b,0x79,0x8b,0xe5,0x6c,0xb7,0x61,0xd5,0x9e,0xe0,0xd4,0x25,0xc3,0x93,0x31,0x8f,0x66,0x6c,0x48,0x30,0x65,0xf4,0xd7,0xde,0x64,0xee,0xbd +.byte 0xbd,0xad,0x32,0xfc,0xf3,0xd8,0x7c,0x85,0x7c,0x24,0x40,0xb6,0xd4,0xe0,0x4b,0xc0,0xab,0xcc,0xeb,0x77,0x7c,0xb7,0x33,0x3c,0x90,0x04,0xaf,0x85,0xaa,0xb4,0xaa,0x90,0x67,0x29,0xd9,0x85,0x6a,0x34,0xf4,0xc4,0x6c,0xbc,0xb4,0x86,0x54,0x83,0xd5,0x5e,0xf3,0xdd,0x1a,0x56,0x5e,0xa5,0xd8,0x06,0xc0,0xa7,0x27,0xd4,0x0d,0x5b,0x08,0xf4 +.byte 0xb4,0x15,0xf9,0xb4,0x56,0x1c,0x80,0x98,0xc9,0xcd,0xf0,0x38,0x18,0xbe,0x99,0xec,0x7e,0x0c,0x3d,0xc1,0x98,0x26,0x9d,0x50,0xe4,0x00,0xcf,0x0f,0x0b,0x77,0x86,0x31,0x55,0x38,0xa4,0x31,0x50,0x51,0x64,0x88,0x81,0x05,0x32,0x99,0x38,0xd1,0x62,0x20,0x8e,0xf0,0x29,0x31,0xf5,0x79,0xbb,0x1e,0x0f,0xba,0x51,0x94,0xa9,0x54,0xcd,0x43 +.byte 0xce,0xe5,0x2c,0x29,0xa5,0x51,0x23,0x97,0x5d,0x36,0xff,0x51,0x5c,0x66,0xb7,0x62,0x1b,0x5f,0xd7,0x2f,0x19,0x07,0xff,0x0a,0xfc,0xf6,0x6e,0xb5,0xfd,0xa9,0x92,0x40,0xd3,0xe6,0x99,0x15,0x6f,0x1e,0x91,0xad,0x1f,0x4d,0x1c,0xe2,0xd9,0xcf,0x01,0x71,0xec,0x1a,0xa3,0xba,0x48,0x40,0xfd,0x18,0xb1,0x24,0x2b,0xd2,0x37,0xb5,0x74,0xdd +.byte 0x7e,0xf6,0x18,0xb4,0x7b,0x0e,0x7d,0x65,0x46,0x7b,0xe3,0x51,0x03,0xae,0xe1,0xd0,0x74,0xc6,0xc9,0xda,0x0e,0x79,0x6f,0xf5,0x62,0xc0,0x7e,0x76,0x3e,0x13,0x8b,0xe0,0x4c,0xfa,0x7e,0xe1,0xa2,0xee,0x9d,0x3f,0x91,0x9d,0x21,0xdd,0xc2,0xd0,0xa5,0x1d,0x17,0xd6,0xdc,0xeb,0xa3,0xc0,0x71,0xa0,0xfe,0xf0,0xaf,0x31,0xdc,0xa3,0xd4,0x21 +.byte 0x4a,0x32,0x1d,0x54,0x25,0x3b,0xc8,0x8f,0x68,0xcd,0x99,0xce,0x76,0x39,0x42,0xd8,0xca,0xf2,0x46,0x72,0xfe,0x52,0xc2,0x90,0x83,0xed,0xa0,0x6d,0x1b,0xf5,0xb1,0x09,0xae,0x2b,0x34,0x4f,0xd3,0x78,0x19,0x7f,0xad,0x8d,0x50,0x26,0x9c,0x36,0xa3,0xb5,0x3d,0x0b,0xa6,0x87,0x65,0xa0,0xdb,0x88,0x20,0xff,0xb6,0xfd,0xc5,0xbd,0x0a,0x28 +.byte 0xc8,0x9c,0x42,0x7f,0x24,0x58,0xe9,0x07,0x53,0x4b,0x9a,0x2a,0x1e,0x7b,0x90,0x97,0x78,0x74,0x80,0x5d,0xe5,0x6e,0xae,0x15,0x68,0xd4,0x2a,0x3a,0xd3,0x00,0x4f,0x4b,0xff,0x8f,0x1e,0x8f,0x9f,0x75,0xe5,0xea,0x9d,0xb9,0xed,0x8f,0xa9,0x2b,0x70,0xa8,0xcb,0x08,0x85,0xd3,0x8f,0x5d,0xc7,0x49,0x66,0xcc,0xa8,0x6d,0xbd,0x01,0x93,0xd5 +.byte 0xe6,0x75,0x2e,0x25,0x07,0x59,0x86,0x3f,0x44,0x8b,0x0b,0xb5,0x38,0xd5,0xbd,0xcf,0x48,0x8a,0xf7,0x71,0xd6,0x6b,0x2e,0x93,0x3d,0x0b,0xc0,0x75,0xee,0xa8,0x5d,0x9c,0x3d,0xa5,0xdb,0xc5,0x8d,0xac,0xda,0xf4,0xcd,0x5f,0x24,0xfe,0x86,0x14,0x44,0x65,0x3f,0x89,0x7f,0xd3,0x61,0x48,0xb0,0x43,0xf0,0x1e,0xde,0xbc,0xb7,0x51,0x0f,0xfc +.byte 0x32,0xf2,0x04,0xe2,0x4b,0xcb,0xbb,0x63,0x7d,0x5b,0x9a,0xb1,0x91,0x57,0x89,0xdc,0xed,0xde,0x91,0x2d,0xdd,0x42,0xc8,0x3c,0xb0,0xd7,0xa5,0xbc,0xa7,0x33,0x14,0x32,0xaf,0xf7,0xe9,0x25,0xd2,0x1a,0x64,0xf7,0x1b,0xab,0x0e,0xbc,0x50,0xbc,0x85,0x44,0xe0,0xa6,0xf1,0x4a,0x32,0x2f,0x30,0x27,0x48,0x4f,0xfc,0x8a,0x5a,0x78,0xe7,0x16 +.byte 0x55,0xcf,0xca,0x15,0xa8,0xa8,0xa2,0xef,0x9a,0x16,0x02,0xf4,0xb0,0x44,0xfd,0xc4,0x51,0x01,0x4f,0x1d,0x9d,0x09,0x62,0x42,0xe9,0x8b,0x18,0xa4,0x65,0xef,0x8b,0xfe,0x71,0x9f,0x4b,0x47,0x48,0x41,0x73,0x5c,0x0c,0x52,0x7d,0x79,0xbc,0x93,0x2a,0xaa,0x81,0x99,0x21,0xa5,0x9e,0xac,0xcd,0x57,0x51,0x50,0xbc,0xc9,0x96,0xaf,0xdf,0x1a +.byte 0x8f,0xee,0x36,0x05,0x20,0x32,0xe8,0x51,0x94,0x72,0x12,0xa3,0x17,0x25,0x7f,0x0a,0x3e,0xcc,0x22,0xcf,0x05,0xb2,0x2b,0xaa,0x36,0x01,0xdf,0xd4,0x4e,0xe1,0x02,0x43,0x4e,0xac,0x50,0x64,0xcd,0x2f,0xc2,0xa9,0xb0,0xf2,0xf2,0x4c,0xdf,0x16,0xa6,0x54,0xf7,0xbf,0x1a,0x69,0xeb,0xa1,0x5a,0xc7,0xcf,0x46,0x2d,0xc2,0x3a,0x7f,0x4a,0x14 +.byte 0x22,0x15,0x46,0x46,0x2d,0xc1,0x98,0xf7,0x0b,0xf3,0x27,0xfc,0x78,0x67,0x05,0xd8,0xe0,0xf6,0xb8,0xb6,0x0b,0xdb,0x4d,0x6b,0x7e,0x9b,0xbf,0x5c,0x15,0x97,0x49,0x9f,0x6f,0x11,0x6c,0x6e,0x1d,0x1e,0x65,0x5b,0xb9,0x60,0x8f,0xa3,0xa9,0x99,0x17,0x92,0xb8,0x65,0x25,0xc4,0xef,0xea,0xa6,0xc0,0x57,0xa9,0x4c,0x78,0xe3,0xd6,0xf2,0x19 +.byte 0x9c,0x86,0x9e,0x45,0x3e,0xfd,0x21,0x4c,0x2a,0x56,0x7c,0x23,0xf2,0x22,0xa1,0x81,0xdb,0xe6,0xfa,0x85,0x19,0x3b,0x1d,0x61,0xb3,0x21,0xb5,0x64,0x1d,0x07,0x66,0xd2,0xe5,0x9c,0xb0,0x76,0x9d,0xc9,0x02,0x6a,0x8d,0xd5,0x84,0xd5,0xa7,0x7c,0x70,0x64,0x46,0xd6,0xff,0xc7,0x9f,0x2f,0xed,0xc1,0x5a,0xcb,0x56,0x12,0x31,0x9d,0xff,0x66 +.byte 0x9a,0xf8,0x50,0xc6,0x54,0xfd,0x8d,0x49,0x32,0x8c,0xdd,0x8c,0xbe,0x30,0x79,0xaf,0x1a,0xd5,0x28,0x1d,0x03,0x87,0x12,0x60,0x7a,0xcc,0xe6,0xe8,0x4e,0x21,0x5d,0xa3,0x06,0xfb,0xdf,0xf6,0x31,0xd6,0x10,0x3e,0xec,0x23,0x69,0xc7,0x7b,0xf6,0x78,0xa6,0xd1,0x8a,0x48,0xd9,0xdc,0x35,0x1f,0xd4,0xd5,0xf2,0xe1,0xa2,0x13,0x8a,0xec,0x12 +.byte 0xa7,0xf1,0x5d,0xb2,0xc3,0x6b,0x72,0xd4,0xea,0x4f,0x21,0xff,0x68,0x51,0x51,0xd9,0xd7,0x2f,0x28,0xd7,0xdf,0xbc,0x35,0x4f,0x49,0x7e,0xe7,0x21,0x82,0xd7,0x0c,0x7c,0xf4,0x86,0x86,0x62,0xcd,0xf5,0x23,0x77,0xc1,0x14,0x8a,0xc4,0x2a,0x82,0x74,0x0e,0x90,0x93,0xd5,0x5a,0xc0,0x57,0x93,0x1a,0xe1,0x1c,0x13,0x17,0x72,0xc3,0xa6,0x54 +.byte 0xc4,0xe2,0xfc,0xd3,0xa0,0xce,0x08,0x87,0x9e,0x2a,0xaf,0xa7,0xbb,0x2d,0xaf,0xc0,0x38,0x97,0xc8,0x6d,0xb8,0x7b,0x75,0xc5,0xf2,0x79,0x62,0xdc,0x7c,0xa9,0xfd,0x19,0xa2,0xb1,0xee,0xdf,0x90,0x18,0x5a,0xdb,0x3c,0xba,0x0d,0x84,0xd6,0xaf,0x15,0xee,0xb6,0xa5,0x78,0x38,0x87,0xdf,0x42,0xd6,0xd1,0xa2,0xe9,0xe0,0xa6,0xf2,0x4e,0xa4 +.byte 0xed,0xa5,0xf6,0x66,0x7f,0x99,0xbc,0xfb,0x4b,0x37,0xca,0x5a,0xb3,0x29,0x8e,0x80,0x30,0x8b,0x74,0x7b,0xac,0x61,0xfb,0xca,0x62,0xfe,0x24,0xc4,0x6e,0xac,0x66,0x97,0xaa,0x9a,0x99,0xe6,0xa8,0xa4,0xd8,0x62,0x58,0x7c,0xd1,0xeb,0xee,0xc8,0x08,0xa0,0x54,0xde,0xb1,0xef,0x57,0x2c,0xb6,0x2c,0x78,0x22,0x10,0xbb,0xfe,0x4b,0x77,0xa5 +.byte 0x5a,0xed,0xbb,0xf8,0x97,0x96,0x20,0xa9,0x8c,0x78,0xb5,0xb9,0x55,0xc9,0xaf,0xb9,0xa1,0x1f,0x13,0x52,0xf9,0xbb,0xaa,0x98,0x01,0x57,0xa6,0x88,0xaa,0x5c,0xf0,0x62,0x5b,0x3e,0xe1,0x5f,0xf4,0x98,0x95,0x8b,0x8f,0x48,0xd6,0xd5,0x8b,0xc2,0x1d,0x45,0x7d,0xe2,0x03,0x66,0x84,0xfc,0xbd,0x8e,0x95,0x9f,0x58,0x99,0x7b,0x4c,0xb6,0xe5 +.byte 0xe2,0xf9,0x2e,0x92,0x58,0xca,0xa9,0x24,0x9c,0x7c,0x46,0xdf,0xea,0xb4,0x6e,0x0e,0xa5,0x9c,0x14,0xbf,0x25,0x5b,0x39,0x4a,0xaf,0x31,0xaa,0xd1,0x2c,0xe6,0x06,0x3d,0xc4,0x60,0xc7,0xcd,0x49,0x8d,0xe1,0x50,0x55,0xe4,0x72,0x68,0xed,0x43,0xb8,0x85,0xa3,0xc3,0xf1,0xf5,0xd1,0xcf,0xcb,0x57,0xac,0x04,0x16,0x22,0xe4,0xfc,0x4a,0x13 +.byte 0x60,0x3f,0x09,0xa4,0xf2,0x9b,0x34,0xeb,0x0c,0x10,0x57,0xc3,0x3f,0x15,0xb5,0x1b,0x6a,0xb3,0x7d,0x37,0x02,0x4c,0x0f,0x6f,0x8b,0x4d,0x5d,0x57,0x7d,0xbf,0x00,0x8a,0x74,0xb4,0x4c,0x5f,0x90,0x27,0x76,0x09,0x8c,0x18,0x3f,0x26,0x3a,0x09,0x06,0xdd,0x8b,0xff,0x0e,0xa4,0xae,0xef,0x0c,0x81,0xf2,0xf3,0x1f,0xe0,0x33,0x33,0x37,0xc6 +.byte 0xc3,0xfb,0x14,0xdd,0xa1,0x16,0x84,0x80,0xcb,0x37,0xe7,0x97,0x6d,0x21,0xa7,0x71,0x19,0x2b,0x2d,0x30,0xf5,0x89,0x2d,0x23,0x98,0xfc,0x60,0x64,0x4a,0x26,0x65,0x4a,0xef,0x12,0x59,0xa3,0x8c,0xd9,0xbd,0xdc,0xb7,0x67,0xc9,0x8d,0x51,0x72,0x56,0x6a,0xe5,0x59,0xa2,0x53,0x4f,0xb6,0x53,0xff,0xb0,0xd4,0x06,0x7f,0x79,0x23,0xf9,0xcb +.byte 0xbf,0x9a,0x93,0xde,0x88,0x33,0x58,0x70,0xa7,0xcc,0x07,0xb1,0x44,0xb9,0x99,0x1f,0x0d,0xb9,0xc9,0x18,0xdc,0x3e,0x50,0x22,0xfb,0x4e,0x86,0x0d,0xc0,0xe7,0x7f,0xc6,0xa1,0x52,0x0d,0x8d,0x37,0xe6,0xaf,0xe3,0x13,0xbe,0xa6,0xf9,0x59,0x39,0x0f,0x17,0x66,0xce,0xb1,0x7d,0x7f,0x19,0x1a,0xf8,0x30,0x3a,0xa5,0x72,0x33,0xa4,0x03,0xb6 +.byte 0xb6,0x9b,0xde,0x7a,0x7a,0x62,0x3d,0x85,0x98,0x8e,0x5d,0x8a,0xca,0x03,0xc8,0x2c,0xae,0xf0,0xf7,0x43,0x3f,0x53,0xb2,0xbb,0x1d,0xd0,0xd4,0xa7,0xa9,0x48,0xfa,0x46,0x5e,0x44,0x35,0x50,0x55,0xdc,0xd5,0x30,0xf9,0x94,0xe6,0x5f,0x4a,0x72,0xc2,0x77,0x59,0x68,0x93,0x49,0xb8,0xba,0xb4,0x67,0xd8,0x27,0xda,0x6a,0x97,0x8b,0x37,0x7e +.byte 0xe9,0x59,0x89,0xc7,0x5e,0xd9,0x32,0xe2,0xaa,0xd1,0xe9,0x2b,0x23,0xca,0x9d,0x89,0x7a,0xf5,0xe4,0xfb,0x29,0xcc,0x88,0xfb,0x82,0x0f,0xbf,0x47,0x54,0xca,0x2b,0x4b,0xd8,0x47,0x7f,0x65,0x38,0x5a,0xb3,0xe8,0x0b,0xd7,0xe1,0x8b,0x89,0x57,0x32,0xdb,0xa3,0x85,0xba,0xf9,0xbc,0x52,0x92,0x20,0x10,0x66,0x54,0x81,0xe1,0x49,0x3f,0xe1 +.byte 0x8c,0x2e,0x0b,0x3b,0xe7,0x49,0xb4,0x60,0x5a,0x20,0x33,0xc4,0x4e,0x81,0xef,0x96,0xda,0x73,0x90,0x2b,0xb4,0x86,0xa1,0x5c,0xcd,0xa0,0xc7,0xf3,0x06,0x0d,0x2a,0x5a,0x41,0x96,0xf5,0x40,0x1b,0x0a,0x3a,0xb7,0x38,0xe1,0xbb,0xe3,0x42,0xf9,0x52,0xe5,0x98,0xe2,0x17,0xd4,0xb0,0x09,0x73,0x75,0xc1,0x00,0x18,0x0f,0xa7,0x0b,0x58,0xc1 +.byte 0x78,0x5c,0x0c,0x05,0xd8,0xfb,0xc5,0xfd,0x5c,0x66,0xbe,0x54,0x68,0xd1,0x16,0x54,0xfb,0xc5,0x97,0xd7,0x03,0x82,0x47,0xbb,0x47,0xea,0x9e,0x8b,0x90,0x07,0xb2,0xd2,0x06,0x14,0x79,0xeb,0xb6,0xe1,0x10,0x55,0xa9,0x13,0xea,0x65,0x7a,0xd0,0xe5,0x66,0x5d,0xe7,0x7b,0x10,0x5f,0x7c,0x25,0x7d,0x4e,0x77,0xb3,0x19,0x02,0xb1,0x45,0x1c +.byte 0x1a,0x51,0x24,0x72,0xd4,0xaa,0x03,0x0c,0x37,0x2a,0x78,0x81,0x05,0xca,0x73,0xb9,0xb5,0xd8,0xf5,0x25,0x2b,0x30,0x59,0x00,0x66,0xbd,0x6c,0x38,0xa2,0xc3,0xfb,0x43,0x85,0x6d,0xab,0xca,0xd8,0x73,0xa8,0x76,0xda,0x6e,0x00,0x19,0xd0,0xb9,0x1e,0x9b,0x33,0xe4,0x57,0x68,0xf4,0xb8,0x35,0x44,0xe6,0x74,0xd2,0x33,0x64,0xa1,0x41,0xa6 +.byte 0x5a,0xf6,0x8e,0x29,0xb5,0xa6,0x21,0x8e,0xc4,0x0c,0x0c,0x16,0x81,0x08,0xef,0x0a,0x41,0x08,0x34,0xc7,0xe1,0xd8,0xa8,0x68,0xb1,0xf3,0x9a,0x7a,0xaa,0x90,0xc0,0x77,0x32,0x70,0x50,0x5c,0x92,0xfc,0x38,0x31,0xaf,0x3e,0xd8,0xd8,0x4b,0x90,0x99,0xc4,0x17,0xde,0xa6,0xb5,0x29,0xc0,0x82,0x45,0x20,0x08,0x0c,0x4f,0x76,0x36,0x56,0x7e +.byte 0x07,0x17,0x42,0x78,0xa1,0x2d,0x62,0x48,0x81,0x57,0xc4,0xcf,0xf4,0x89,0x34,0x78,0x10,0xe6,0x98,0x78,0xb0,0x69,0x15,0x06,0xdb,0x2b,0xbb,0x8b,0xa5,0x72,0x50,0x24,0xae,0x6b,0x33,0x49,0x7b,0x9d,0x69,0x74,0xc8,0x7c,0xca,0x7a,0x31,0x39,0x0d,0x72,0x78,0xc1,0x6b,0x97,0x50,0x97,0xea,0x90,0xab,0xe7,0xdf,0x29,0x2e,0xf7,0x6e,0x49 +.byte 0x95,0xab,0xbd,0xea,0x1f,0xd4,0x93,0x4d,0x30,0x6b,0x6d,0xb0,0x86,0x38,0x2c,0xc8,0x77,0x2c,0xb5,0xb5,0x5c,0xd9,0xbb,0xe9,0x7d,0xb2,0xb7,0x6b,0xd1,0x1c,0xd3,0xd0,0x66,0x51,0x63,0x8c,0xf3,0x13,0xad,0xcf,0xeb,0x82,0x12,0x1a,0x6d,0xf5,0x75,0x66,0xa2,0x55,0x30,0x64,0x1d,0x68,0x46,0x50,0x5a,0x93,0xf1,0xc2,0x13,0x68,0x95,0x55 +.byte 0x51,0xe0,0x56,0x3a,0x96,0x86,0x8e,0xfb,0x5f,0x3b,0x1f,0x49,0x9c,0x3d,0xe5,0xf2,0x8c,0x3f,0xd6,0x6d,0x17,0xc7,0x18,0x59,0x1a,0x8a,0x72,0xa8,0xb3,0x39,0xda,0xc4,0xfa,0xc5,0xca,0xdf,0x48,0x48,0xd1,0xd2,0xba,0x14,0x5d,0x28,0x3b,0x4c,0xb3,0xcb,0x8d,0x1b,0x91,0x46,0x6b,0x2d,0x21,0x21,0x99,0x98,0x6d,0xcc,0x6b,0x8e,0x91,0x1d +.byte 0x42,0xc2,0x72,0x1a,0xc6,0xd2,0xaf,0xed,0x10,0xff,0x1e,0xa5,0xae,0x16,0xc0,0x05,0xdf,0x37,0xe2,0x1e,0x2e,0x15,0x21,0x0c,0x33,0x6f,0xfd,0xed,0x3f,0x7e,0xd7,0x69,0xfb,0x76,0x79,0x65,0xe9,0xd9,0x8d,0xf6,0xc0,0x6c,0xf7,0x15,0x7f,0x04,0xd7,0x71,0xcc,0xaa,0x85,0x73,0x23,0xf1,0xc8,0x62,0xd0,0x8e,0x01,0x35,0xff,0x4f,0x4f,0x13 +.byte 0xe6,0x28,0xf1,0xc1,0x7a,0x04,0xc0,0x7b,0x75,0xac,0x1c,0x55,0xb4,0x7c,0x00,0xb9,0xe0,0x14,0x67,0xb6,0xc5,0x69,0x62,0x0b,0xe6,0xb5,0x46,0x86,0x6f,0x09,0xdf,0x84,0x2c,0xa8,0x30,0x89,0x5b,0x24,0x47,0xfa,0x43,0x24,0xd5,0x07,0xf7,0xba,0xab,0x1b,0xfd,0x60,0xad,0x89,0x5f,0x60,0x87,0x78,0x48,0xbb,0xc0,0x63,0xf4,0x27,0x86,0x33 +.byte 0xf4,0x49,0x64,0x4c,0x5c,0x94,0x9a,0xb8,0x0f,0x45,0xe2,0x92,0x7d,0x9a,0x86,0xdb,0xb7,0x05,0xe8,0xd7,0x64,0x44,0xfa,0x74,0x60,0x72,0x89,0x13,0x8f,0x2e,0x96,0x33,0xa9,0x12,0x4a,0x62,0x6b,0xc3,0xcb,0x55,0xd3,0xef,0x17,0x11,0x82,0x4a,0x51,0x77,0xbf,0x63,0xa0,0x21,0xfc,0xbc,0x0c,0x6f,0x9a,0xfd,0xde,0xbe,0x9f,0x2e,0x50,0xd5 +.byte 0x32,0xa4,0xf0,0x1b,0xed,0xfa,0xbf,0xcd,0xc9,0xd8,0xf8,0x06,0xf2,0x17,0x8a,0x92,0x18,0xb8,0xc3,0xe5,0xbf,0xc2,0xf4,0x77,0xb9,0x71,0xfb,0x60,0x6e,0xe7,0xad,0xe4,0x7d,0xd4,0x59,0xa9,0xbd,0x21,0xd5,0x03,0x69,0xb5,0xf1,0xce,0xb5,0x88,0xd9,0x1d,0xc7,0xb3,0x14,0xa6,0xb1,0x30,0x8d,0xaa,0xcd,0xe5,0x50,0xc5,0x0d,0x4b,0x6d,0xde +.byte 0x17,0x4d,0xd2,0x93,0xf3,0xc2,0x8d,0x59,0xf1,0xd0,0x2f,0xb5,0x62,0x18,0x81,0x07,0xb3,0xfb,0x08,0xb3,0xa8,0x15,0xe0,0x9a,0x4c,0xa5,0x24,0xcd,0x47,0x69,0xf9,0xf7,0xda,0xa9,0xff,0xe1,0xe2,0x43,0xe3,0x69,0xf1,0x26,0xac,0xc6,0x42,0xf2,0x32,0x42,0xfb,0x7c,0xa2,0x94,0xc6,0xaa,0xd9,0x05,0x29,0xc6,0x3d,0x45,0x44,0x1d,0x52,0x7e +.byte 0x48,0x47,0x93,0x34,0x08,0xa0,0x93,0xc2,0x5e,0x9b,0x22,0xc1,0x2a,0xaa,0xfe,0xa2,0x26,0x00,0xa8,0xbb,0xd0,0x58,0xfd,0x5a,0x09,0x4f,0xa1,0x0c,0xff,0x66,0xcc,0x88,0x3a,0x69,0x9a,0x12,0xb6,0x05,0x6e,0xdf,0x54,0x5d,0xe7,0x03,0x8e,0x95,0x86,0x68,0x83,0x83,0x6f,0x04,0x0b,0x9c,0x05,0x05,0x77,0x14,0x83,0x47,0x98,0x5f,0x22,0xaf +.byte 0xa8,0xfd,0xf3,0xe7,0x73,0xec,0xef,0xd7,0x57,0xd9,0xef,0xe7,0x1b,0x18,0x24,0x09,0xd9,0x14,0xf9,0x60,0xba,0x05,0x0f,0x8f,0x33,0x48,0xb1,0x06,0x41,0x2e,0x95,0x3d,0xf5,0xcf,0x14,0x50,0x5d,0xb6,0x93,0xeb,0xd5,0xf8,0x9f,0x7c,0x8f,0x23,0x35,0x39,0x30,0xc8,0xf6,0x74,0x07,0xc4,0x4c,0xcf,0xe1,0xdb,0x3e,0x9f,0x0a,0xfd,0x48,0x9e +.byte 0x56,0xe4,0xa7,0xa3,0x07,0x06,0x18,0xbb,0x50,0x75,0x33,0x48,0xb9,0xa1,0x4e,0x63,0x65,0xd3,0xf4,0x40,0xc3,0x2d,0x52,0x9a,0xad,0x56,0x7f,0xff,0xb0,0x46,0x24,0xa1,0x78,0x5f,0xb6,0xa8,0x72,0x28,0xb3,0x6c,0x61,0x6e,0xa0,0xfc,0xcb,0xe8,0xfe,0x07,0x28,0x97,0x1c,0xda,0x76,0xc7,0x98,0x2f,0x00,0x1d,0xf2,0x17,0xbe,0x48,0x3f,0xd3 +.byte 0xc7,0xbe,0x89,0x89,0xe1,0x96,0x75,0x1e,0xee,0xf9,0x78,0x67,0xbf,0x12,0x1e,0xe2,0x14,0xbf,0xd4,0xfd,0x49,0xaa,0xbf,0xc6,0xb8,0x4f,0x84,0xcd,0x5d,0x3c,0x45,0xb3,0xb0,0x14,0x6f,0x2d,0x6f,0x35,0xfa,0x60,0x7f,0x64,0x40,0xc8,0xde,0xa8,0x2b,0x56,0x75,0x74,0xc9,0xe1,0x2c,0xe2,0x2f,0xc2,0x3e,0xba,0xa3,0x20,0xd8,0xa3,0xbc,0x69 +.byte 0x9d,0x1c,0xcf,0x5e,0xe3,0xc0,0x66,0x72,0xce,0x22,0x96,0xad,0x47,0xc9,0x5b,0xac,0x45,0xdc,0x4f,0x8e,0xf6,0xa6,0x2e,0x4a,0x1e,0x01,0xe4,0xb7,0x83,0x68,0x92,0x2b,0x98,0xdf,0x22,0x0f,0xd9,0x4f,0x6f,0x72,0x37,0x56,0xfa,0x1b,0xbb,0x5a,0x4d,0xd8,0x5b,0xc6,0x65,0xf8,0xd4,0x4e,0xa5,0xc0,0x0f,0x2d,0xc2,0x38,0xa4,0x6c,0x33,0x2f +.byte 0x7a,0x52,0x14,0xbb,0xfb,0xb3,0xf2,0xa9,0xbf,0xa0,0xad,0xcb,0x8c,0x81,0x47,0x26,0xe9,0xfb,0xc1,0x8e,0xc6,0xe5,0x39,0x48,0xa5,0xb3,0xbc,0xb2,0xe4,0xac,0xf9,0x49,0xbb,0x34,0x2b,0xc4,0x4d,0x06,0xe4,0xd6,0x0b,0xdd,0x55,0x36,0xe6,0xaf,0x64,0xea,0x84,0xf2,0xa5,0x68,0xe3,0x4e,0x4c,0x77,0x46,0x6c,0x17,0x6e,0x08,0x99,0x96,0x1b +.byte 0xb5,0x44,0x3b,0x94,0x2d,0x0f,0xcd,0x90,0x17,0x8f,0x80,0xcb,0xc2,0x30,0xbe,0xe1,0x36,0xdc,0x1e,0x48,0xe3,0x2c,0xe5,0xc9,0xbc,0xbd,0xff,0x3f,0x95,0x59,0x35,0x58,0x2f,0x9c,0xa6,0x1c,0x45,0xa7,0x61,0xde,0xf2,0x9c,0xa3,0x04,0x0f,0xa0,0x93,0xaf,0x69,0x2b,0x0d,0x1c,0xfc,0xff,0x97,0x1c,0x69,0x7e,0x30,0x06,0x88,0x01,0xa4,0xf1 +.byte 0x32,0x36,0xed,0x56,0x89,0xff,0xa9,0x63,0x3a,0x17,0x91,0xc5,0xba,0x6e,0x38,0x84,0xb1,0xaf,0x28,0xac,0x8a,0xb2,0x60,0xbe,0x1b,0x0a,0xd8,0x05,0x22,0x25,0x56,0xbe,0x75,0x47,0x59,0xcf,0x8c,0x2e,0xb3,0xc3,0x5f,0x06,0x81,0x65,0x39,0x78,0xed,0xe3,0xc9,0x5a,0x99,0x01,0xae,0xfb,0xf6,0xed,0x55,0xf5,0xbd,0x2f,0x93,0xf1,0x62,0x6a +.byte 0x54,0x4f,0xe1,0x9f,0x0a,0x23,0x83,0xbc,0xc2,0xba,0xb4,0x6f,0xd9,0x88,0xc5,0x06,0x7a,0x83,0xd5,0xdb,0xeb,0x49,0x48,0xd6,0xc9,0x45,0xa2,0xd0,0xc4,0x06,0xd9,0x01,0xec,0x2d,0x6d,0xc1,0x95,0x69,0x22,0xd0,0xae,0x88,0x75,0x8b,0xd2,0x02,0x98,0x83,0xd9,0x10,0x27,0x8d,0x68,0x97,0x5e,0x6b,0xdd,0x51,0xbb,0x92,0x38,0xa8,0x12,0xde +.byte 0x0f,0xa4,0x1e,0x2e,0xec,0xd5,0x73,0x55,0x5f,0x46,0x6a,0x0f,0xc9,0x50,0x0d,0xb3,0x55,0x20,0xe0,0x01,0xef,0x92,0x29,0x04,0x38,0x60,0xbd,0xc7,0x0b,0x1e,0x94,0x10,0x37,0xb7,0x02,0x94,0xbc,0xde,0xdb,0xb3,0xe3,0x1e,0xd5,0xe2,0xa8,0xed,0x46,0xe8,0xd4,0x8a,0x6c,0x93,0x4e,0xb7,0x73,0xa6,0x20,0x86,0xd2,0x82,0x2f,0x78,0x80,0x34 +.byte 0x44,0x79,0x84,0x2e,0x54,0xd0,0x30,0xa8,0x06,0x0c,0xcf,0x78,0xb4,0xd7,0xe2,0xc9,0x6e,0xfb,0x37,0x47,0x8f,0xe5,0x9f,0xf8,0xca,0x58,0x9c,0xb6,0x8b,0xbe,0xf4,0x3a,0xfe,0x75,0xec,0x1b,0x22,0xfd,0x93,0x92,0x07,0x09,0xcd,0xe6,0x2f,0xe6,0x51,0x0f,0x19,0x43,0x9c,0x6a,0x32,0x38,0x7d,0xf0,0x0c,0x78,0x81,0xb7,0x5c,0xbe,0x3c,0xf4 +.byte 0xc0,0x12,0x57,0x51,0x8a,0x69,0x84,0x0d,0x1e,0x0a,0xed,0x75,0xde,0x9e,0x31,0x8a,0x9b,0x18,0x82,0x01,0x5a,0xee,0x0e,0x33,0x3c,0x8c,0x95,0xb1,0x0b,0x05,0x3b,0xb2,0x85,0xab,0xaf,0x47,0xa2,0x03,0xb6,0xbb,0xda,0xf5,0xc8,0xbe,0x0e,0x4d,0xf8,0x84,0xe4,0xfb,0xd4,0x54,0x44,0x72,0xe5,0x30,0x57,0xa3,0xb6,0x47,0x8f,0xd3,0x32,0xc2 +.byte 0x83,0x07,0x4f,0x17,0x20,0x88,0xa1,0x0b,0xb3,0xef,0x4b,0x27,0x60,0xe0,0x9d,0xec,0xc2,0xdf,0xaf,0x2e,0x74,0xae,0xa4,0x2b,0x59,0x94,0x75,0xbe,0x54,0xf5,0x18,0x62,0xd9,0xe2,0x35,0xee,0x37,0x2e,0xdf,0x48,0xf8,0x80,0x32,0xcb,0xf1,0x83,0x78,0x03,0x68,0x06,0xd7,0x82,0xc6,0x76,0x2a,0x10,0x2a,0xdb,0x73,0xe6,0x65,0x24,0x9f,0x73 +.byte 0x1f,0x55,0x55,0xb6,0x10,0x65,0x80,0x70,0x5a,0x8e,0x8a,0xc8,0x4c,0xca,0x74,0x47,0x63,0x3f,0xee,0x49,0xc3,0x86,0x0f,0x66,0x56,0x08,0xee,0x9f,0xf5,0x5a,0x89,0x4c,0xb4,0x97,0x6e,0x75,0x61,0xc0,0xa7,0x92,0xa8,0x38,0x99,0x08,0x01,0x12,0x82,0x77,0x80,0x20,0x9d,0x62,0x46,0x92,0xdd,0x39,0x4d,0xcf,0xc0,0x8a,0x3e,0x30,0x9a,0xfa +.byte 0x28,0xe8,0xd8,0xf8,0x07,0x0d,0xab,0x4c,0xd4,0x02,0x4c,0xd7,0xc3,0x16,0x89,0x24,0x84,0x52,0x7c,0xa4,0x1b,0x54,0x7f,0xc4,0x74,0x4f,0x88,0x0a,0x14,0x03,0xd9,0x1a,0x48,0xff,0x2c,0xfb,0xbf,0x33,0xf1,0xf8,0x0e,0xdd,0xc4,0x98,0xf2,0xbd,0x32,0x99,0x03,0x8e,0x56,0xc1,0x84,0x5d,0xa6,0xd7,0x21,0xf2,0x43,0xfb,0x3b,0xf5,0x6a,0x75 +.byte 0x20,0xfb,0x08,0x7b,0x66,0x15,0x47,0x31,0xb6,0xb6,0x7a,0xc9,0xe6,0xf5,0xd6,0x0a,0x14,0xb3,0x68,0x0a,0x32,0x13,0xb5,0xe6,0x56,0xbd,0xa5,0x24,0xe2,0xa3,0x7b,0x3d,0x01,0x23,0xed,0x08,0x09,0xb5,0xdb,0x7c,0xa9,0x4b,0x23,0xdb,0xa2,0x25,0x0c,0xc6,0xa4,0x0d,0xbb,0x1a,0x5d,0x1b,0x42,0x0b,0x86,0x72,0xc3,0xca,0x5b,0x14,0x04,0xa3 +.byte 0xd7,0x01,0xe7,0x17,0x78,0xd0,0x54,0xde,0xd4,0x76,0x3d,0xe1,0x7d,0x26,0x3e,0xb4,0x71,0x42,0x84,0x36,0x58,0x78,0x22,0x32,0x26,0x0e,0xc8,0x99,0x05,0xe3,0x4a,0xa6,0x5a,0x1a,0x06,0x0a,0x88,0x47,0x51,0x5c,0xa8,0x72,0x70,0x0c,0x62,0x5f,0xf3,0x1e,0x02,0x50,0x20,0xc6,0x5c,0x50,0x30,0x1f,0x4e,0x5a,0x3a,0x02,0xc9,0xca,0x3f,0xa4 +.byte 0xf1,0x66,0x05,0xf3,0x19,0xe5,0xaa,0xdb,0x75,0x51,0xc1,0xb8,0x94,0xfa,0x2d,0xb6,0x8b,0x42,0xdc,0x9a,0xa3,0x13,0xeb,0x95,0x8d,0xf0,0x65,0x87,0xc9,0xa1,0x43,0xb4,0xfe,0x76,0xf4,0xc8,0xbb,0x19,0x96,0x84,0x9d,0x2f,0x92,0xe8,0x22,0x9a,0xf0,0xd5,0xf4,0xc4,0x8d,0x19,0x59,0x21,0xbf,0x15,0xfd,0xa6,0xc4,0xde,0x77,0x58,0xae,0x93 +.byte 0xb3,0xff,0x44,0x49,0x6e,0x37,0x94,0x04,0xd2,0x96,0xe9,0x80,0xd8,0xe3,0x93,0xd8,0xb4,0x7f,0x5f,0xcf,0xe5,0x9d,0x51,0x92,0xac,0x5d,0x9f,0x23,0x3a,0x3e,0xdf,0x96,0x68,0x9a,0x46,0x9b,0x1a,0x06,0x44,0x54,0xc4,0x2e,0x19,0x0f,0x50,0xee,0x73,0xda,0x39,0x7e,0xec,0xcb,0x1d,0x39,0xf7,0x9f,0xbc,0xe0,0x6d,0x49,0x56,0xf8,0xa7,0x24 +.byte 0x70,0xab,0xe1,0xc3,0x82,0x99,0x0a,0x4d,0x64,0x41,0x37,0xab,0x92,0x76,0xeb,0x6a,0x2a,0xa5,0xab,0x75,0xd7,0xe3,0x6a,0x72,0x4a,0x2b,0x57,0x02,0xc7,0xbe,0xd5,0x35,0xce,0xdf,0xee,0xf1,0xc6,0xe6,0x69,0xb7,0x76,0x99,0x22,0xb0,0xb9,0xe1,0x18,0x91,0x9a,0x35,0xd9,0x3a,0x19,0xc7,0x77,0xf2,0x2d,0xae,0x04,0x2e,0xb7,0x35,0x97,0xa5 +.byte 0xc6,0x97,0x4e,0x5d,0xbe,0xa9,0x35,0x2b,0x53,0x1a,0x6b,0x4e,0xa8,0xa6,0x22,0x48,0x2c,0x81,0x25,0xac,0x30,0x89,0x7b,0xb3,0x38,0x34,0x42,0x0b,0xa5,0x5f,0x02,0xe8,0xee,0x12,0x9b,0xce,0xe7,0x10,0xf9,0x65,0xb6,0xc5,0x74,0x06,0xef,0xc8,0x95,0xb3,0x40,0x30,0xec,0x1f,0x8e,0xeb,0x93,0x31,0x91,0x5a,0x2f,0xc2,0x90,0x85,0xaa,0x4c +.byte 0x51,0xc4,0xd0,0x3e,0xc8,0xc9,0x61,0x46,0x96,0xd4,0x60,0x56,0x7d,0x91,0xc4,0x24,0x76,0xfb,0x09,0x08,0x48,0x2f,0x4a,0x73,0x90,0x8e,0x9d,0xb2,0x38,0xa8,0x95,0x3e,0x6d,0x10,0x57,0x91,0x8d,0x55,0x62,0x1f,0x21,0xc7,0x01,0x15,0xb0,0x71,0x0b,0x26,0xbc,0x10,0x33,0x3e,0x79,0x37,0x64,0x85,0x98,0x42,0x21,0xcc,0xff,0x51,0x9a,0xc2 +.byte 0xe0,0x51,0xc3,0xff,0xf2,0x14,0x3d,0xe8,0x89,0x12,0xe7,0xcd,0x58,0x2f,0x87,0xfb,0x4a,0x50,0x6c,0x4d,0xdf,0x6f,0x64,0x9c,0x64,0x93,0x49,0x89,0xb6,0x0d,0x10,0x3f,0x13,0x9d,0x9a,0x35,0xf1,0xc0,0xe7,0xf0,0x9b,0xe8,0x39,0xd3,0x32,0xb2,0x23,0x67,0x77,0xdb,0xbc,0x0d,0x19,0x77,0x7a,0xbe,0x54,0x56,0x64,0xec,0xb6,0x2e,0x03,0xc5 +.byte 0x35,0xda,0xf1,0xc7,0x7d,0x0c,0x5a,0x32,0xec,0x86,0xdf,0xdb,0x94,0x73,0x4e,0xe3,0x45,0xf6,0xb2,0x63,0xc4,0xb7,0x80,0x59,0x4b,0x82,0x0b,0x61,0xa0,0xd5,0x43,0x18,0x78,0x35,0x93,0xde,0x46,0xa3,0xa2,0xd5,0xa2,0x71,0xec,0x3e,0xee,0x7a,0x89,0x7f,0xe9,0x70,0xff,0xad,0xae,0xa3,0x64,0xde,0x61,0xea,0x71,0xc2,0x37,0x98,0x8a,0x33 +.byte 0xd1,0x5f,0x03,0x08,0x23,0x24,0xc7,0x6c,0x62,0x24,0x6d,0x3f,0x44,0x8e,0x7c,0x9f,0x64,0x87,0xa5,0x79,0x0b,0x16,0x7e,0x4e,0xc0,0x0e,0xb8,0x77,0x56,0x9c,0xa5,0x7d,0x2d,0x5d,0x7d,0x81,0x13,0x2c,0x08,0xd5,0x83,0x84,0x38,0xfe,0x50,0x6f,0xa7,0x30,0x1f,0x06,0xee,0xab,0x13,0xc2,0x19,0xe6,0xcf,0x7b,0x85,0xfc,0x31,0x5b,0xdf,0xb8 +.byte 0x0e,0xe8,0x72,0xba,0x97,0x03,0x25,0xbc,0xad,0x74,0x7c,0xe1,0x59,0xf7,0x08,0xc1,0xe3,0x2d,0xb1,0x05,0xe7,0x1f,0xb9,0x0f,0x09,0xcd,0xe6,0x4f,0x5a,0xf6,0xcc,0xea,0xc7,0x92,0x35,0xf5,0xbc,0x3f,0xef,0xc9,0x2b,0xb4,0xd7,0x66,0x50,0xaa,0x80,0xb9,0xaf,0x5d,0x02,0x9c,0x77,0xdf,0xc0,0xc7,0xe2,0xbf,0x7d,0xff,0x69,0x63,0x3e,0x7c +.byte 0x91,0x94,0xae,0xa4,0x0a,0x25,0xa3,0x1f,0xf3,0xc6,0x88,0xda,0x82,0xac,0xbc,0x1f,0x8d,0x53,0xd6,0xfd,0x2b,0x5c,0x33,0x6d,0x03,0x68,0x92,0x38,0x07,0xeb,0x85,0x7f,0x55,0x89,0x17,0x58,0x7f,0xc7,0xb4,0x7a,0xff,0x15,0xe5,0xe0,0xea,0xce,0xac,0x3f,0x0f,0x09,0x25,0xfa,0x80,0xe3,0x07,0x89,0x4e,0xbf,0x7e,0xc2,0x42,0xf1,0x18,0x78 +.byte 0x05,0xe3,0x6a,0x2e,0xf7,0x2e,0xe5,0xbf,0x63,0x9e,0x48,0x69,0xe6,0x3c,0x4b,0x12,0x73,0x58,0xde,0x0c,0x73,0x27,0x9a,0x95,0xfa,0x51,0x8c,0xbb,0x74,0x31,0x53,0x4e,0x9a,0x13,0xda,0x49,0xf0,0x8b,0xb4,0xcd,0xc1,0xe9,0xaf,0xd6,0x59,0x59,0xa8,0x24,0x94,0xd9,0x4b,0xf8,0x20,0x79,0xa0,0x79,0x01,0x08,0x84,0x9b,0x04,0xe7,0xda,0x06 +.byte 0x22,0x3e,0x85,0x23,0x0c,0xa9,0xe5,0xcd,0xd3,0xc4,0x27,0x8c,0x4e,0x75,0xe4,0x60,0xb5,0xe9,0xc5,0xb7,0xb1,0x3a,0x84,0x68,0x40,0x3e,0x36,0x1b,0x9a,0x64,0x50,0x45,0x6f,0xc6,0x58,0x70,0x46,0x1a,0xca,0xf6,0x81,0x02,0xa8,0x17,0x4d,0x92,0x0d,0xae,0x88,0x1a,0xbd,0x52,0xc0,0x32,0xb1,0x2d,0x2d,0x12,0x9c,0x29,0xfa,0xa6,0x70,0x5f +.byte 0xe7,0x0b,0xd5,0x5d,0xa5,0x49,0x9e,0x9e,0x5b,0x55,0xbc,0xce,0x5b,0xb4,0xef,0x3f,0xe4,0x7c,0x50,0xef,0x58,0xf5,0xfe,0xcc,0xf6,0xd0,0xf1,0x3a,0x0b,0xf2,0x3e,0x1c,0xce,0x22,0x7e,0x88,0x1c,0x8f,0x9a,0x69,0x76,0xa9,0xf0,0x18,0xa8,0x76,0x7f,0x0c,0xa6,0xfd,0x67,0x43,0xc7,0x43,0x67,0x98,0x6e,0x37,0xd4,0x82,0x29,0x62,0xa6,0xcf +.byte 0x2b,0x7c,0xee,0x14,0x4d,0x2d,0x1a,0xfc,0xc6,0xaf,0x5b,0xea,0x8a,0xa8,0x9a,0x3b,0xab,0x7d,0x76,0x15,0x50,0xe8,0x95,0x31,0xc8,0x5d,0x5d,0x19,0x68,0x07,0xf5,0xb0,0x29,0x5f,0x79,0x4f,0x0d,0x2b,0xba,0x1d,0xd2,0xf2,0x83,0x50,0x89,0x0b,0x96,0x16,0xde,0x7c,0x04,0xea,0x9c,0x75,0x97,0x7e,0xd7,0x2c,0xee,0x82,0x7c,0xbf,0x0b,0x71 +.byte 0x05,0x59,0xd7,0x11,0x70,0x8e,0x41,0x62,0x91,0x38,0x3a,0x69,0x3f,0x3d,0xde,0x8e,0x03,0x0a,0xea,0xfb,0xea,0x36,0xf0,0x5c,0xb6,0xdf,0x9a,0x66,0x9e,0x64,0x43,0xaf,0xb7,0x83,0xd1,0xef,0x7c,0xb6,0x9b,0x40,0xd8,0x0f,0x0e,0x0b,0xa7,0xd0,0x98,0xca,0x8e,0x3b,0xed,0xb7,0xa5,0x19,0xca,0x67,0x30,0x87,0x17,0x0e,0xc4,0xe1,0xaa,0x6e +.byte 0xdb,0x67,0xbd,0xf5,0xed,0x10,0x68,0xb1,0x43,0x73,0xaa,0x99,0x1a,0x83,0x0d,0x1a,0x5a,0x8b,0xc8,0xff,0xe9,0xe0,0x1c,0x15,0xda,0xb0,0x99,0x90,0xce,0x1f,0xfd,0x17,0xd2,0xfa,0x8f,0x3a,0xe8,0x1b,0xd3,0x96,0x2a,0x0d,0xa9,0x4d,0x6d,0x77,0x53,0xe8,0x8f,0xc7,0x6b,0xb4,0x3b,0x6d,0x0c,0x8e,0x35,0x67,0x09,0x6e,0x43,0x36,0x52,0x3e +.byte 0x0e,0xf6,0x4f,0x16,0x40,0x45,0x7f,0xab,0x39,0xf2,0x23,0xfb,0x4e,0xea,0x6e,0xcf,0xa0,0xb6,0xec,0x6d,0x93,0x1b,0x6f,0x9f,0xd6,0xce,0xcd,0x1e,0x90,0x5c,0x7d,0x61,0xc4,0xae,0x02,0xb2,0x7a,0xb2,0x25,0x59,0xac,0x0a,0xcb,0xc6,0x28,0xa2,0x9c,0x7b,0x4b,0x05,0x5a,0x23,0x55,0xc8,0x9a,0x72,0xe6,0x3b,0x91,0xa2,0x9b,0x12,0x1c,0x1f +.byte 0x4b,0x85,0x42,0x9d,0x73,0xf9,0x50,0x3e,0x12,0xc4,0x51,0xb4,0xe1,0x2a,0x08,0xfc,0xf9,0xc8,0x5a,0x53,0x79,0xcc,0xd1,0x24,0x4c,0xc1,0xf6,0xe7,0x10,0x9d,0xe6,0xce,0xcc,0xc7,0x04,0xf8,0x7a,0xd4,0x2f,0x0a,0x97,0x32,0xaf,0x38,0x77,0x97,0x78,0xc8,0xa9,0x9a,0xca,0x65,0xee,0x2b,0x07,0x0e,0xb1,0xaa,0x3c,0xee,0x03,0x85,0xf7,0x09 +.byte 0xd1,0x03,0xe5,0x4f,0x8a,0x6b,0xba,0x83,0xd2,0x6a,0x05,0xe6,0x4e,0x59,0x21,0x26,0xcc,0x8d,0x4a,0x91,0x21,0x6b,0xe5,0x7a,0x83,0xed,0x4e,0x95,0x4b,0x16,0x98,0x3f,0x2d,0x51,0xc5,0x67,0x56,0x58,0xc9,0xc3,0x32,0xff,0x91,0x9d,0x7f,0x6d,0xc7,0x8a,0x40,0x58,0x56,0x35,0xca,0xc1,0xa9,0x07,0xe2,0xc6,0xe1,0x8f,0x7b,0x7c,0x68,0x4e +.byte 0xde,0x19,0xc8,0x9c,0x41,0x65,0x74,0x33,0xb5,0x5b,0xf7,0x47,0x91,0x51,0x41,0x56,0x54,0xaa,0x8e,0xa5,0x1f,0xdb,0x50,0xa4,0x97,0x7a,0xea,0x86,0x2e,0xfd,0xdd,0x64,0x23,0x6e,0x44,0x28,0xfb,0xae,0xe8,0xc2,0x38,0x96,0x56,0x2e,0xd8,0x7e,0x3a,0xc8,0xc6,0x7f,0x20,0x15,0xad,0x9f,0xfa,0x5c,0x55,0xf5,0xe1,0x9a,0x07,0x84,0x5b,0x81 +.byte 0x39,0x4b,0x70,0xc3,0xfd,0x2b,0xc5,0xb7,0x47,0x36,0x74,0x5a,0x85,0xaa,0x45,0x94,0x8e,0xbe,0x7f,0x6c,0x45,0xf5,0x02,0x4e,0x5f,0x16,0x04,0x7e,0xfa,0xb8,0xa9,0x38,0xc4,0xd9,0xca,0x5f,0x7a,0xe3,0x96,0x78,0x82,0xa0,0xac,0xef,0xc4,0x2a,0xb5,0xf4,0x7d,0x28,0x8c,0x25,0xba,0x4e,0xd5,0xd5,0xd1,0x24,0xc6,0x05,0xb2,0x18,0x2d,0x66 +.byte 0xea,0xe3,0x42,0x79,0x33,0x9e,0x70,0x3a,0x1b,0x5a,0x8e,0xcb,0x03,0xa8,0x43,0xf3,0xd5,0x66,0x41,0x10,0xd7,0x09,0xf0,0x28,0xe5,0x25,0xe6,0xac,0x9a,0xe6,0x34,0x36,0xfb,0xc4,0xa6,0x9a,0xd0,0x24,0x4d,0x18,0xf9,0xd1,0x8e,0xca,0x92,0x83,0x0f,0x55,0x54,0x6d,0x72,0x81,0x81,0xdb,0x72,0x1f,0xd6,0x32,0xb9,0x32,0x45,0x84,0x9c,0x66 +.byte 0x68,0x7e,0xab,0xb3,0xca,0xf5,0x4f,0xdd,0xb4,0xee,0xbb,0x05,0x70,0xbe,0x4f,0xd1,0x27,0x01,0xcc,0x7c,0x4f,0x47,0x55,0xce,0x91,0x73,0x6f,0xff,0x8d,0xfc,0x0c,0x4c,0xaa,0xfc,0xce,0x9f,0xf3,0x4a,0x46,0x92,0x89,0x84,0x8f,0x4d,0x94,0x37,0xda,0xe3,0x11,0x0d,0x63,0x60,0xcb,0x40,0x8f,0xe8,0x0f,0xf9,0xa1,0x89,0x64,0x44,0x45,0x74 +.byte 0xc5,0xa2,0x73,0x33,0x08,0xa2,0x59,0xb0,0xeb,0x7b,0x7b,0xa7,0x28,0x4c,0x13,0x6a,0x04,0x15,0x14,0xd0,0x3e,0x5e,0xec,0xe1,0x3f,0xe5,0x93,0x06,0x6b,0x60,0x50,0x1c,0x90,0xc0,0x5c,0xea,0x7e,0x58,0xf1,0xed,0xba,0x43,0x0b,0x84,0xf7,0xa4,0xbd,0x4c,0xed,0x88,0x5b,0xae,0xa2,0x0a,0xf6,0x06,0xfd,0x43,0x63,0xfe,0x8a,0x03,0x21,0x8b +.byte 0x27,0xc6,0xef,0xa3,0xa9,0x3a,0xc1,0x8b,0x65,0x62,0x25,0x85,0xaa,0x2f,0xff,0x22,0x96,0xb7,0x5c,0x82,0xde,0x21,0x4e,0x0d,0x8d,0xd9,0x7f,0x97,0x79,0x95,0x6c,0xe6,0xfd,0xb1,0x7c,0x84,0xc8,0x73,0xbc,0x50,0x2f,0x87,0x03,0x56,0xcf,0xea,0x7f,0xed,0x17,0x7d,0xf7,0x61,0x6b,0x6f,0x5b,0xd3,0xe4,0x83,0xbd,0x8b,0xd3,0x8e,0x51,0x57 +.byte 0x3d,0xcc,0xe4,0x09,0xb9,0x73,0x1f,0xb4,0x47,0x5e,0xf2,0x10,0x3e,0xf4,0x9c,0x86,0x02,0xdf,0x3e,0x75,0x1c,0x9b,0xb5,0x0f,0x31,0xc6,0xbb,0x00,0xb4,0x8a,0x1a,0xe5,0x0d,0x9c,0x3e,0x93,0x61,0x5a,0x61,0x86,0x12,0x64,0xaa,0xfd,0xa2,0x6e,0x8f,0xcc,0xcd,0x60,0xa1,0xad,0x6d,0xdc,0xa2,0x7b,0x5a,0xe0,0xee,0x27,0x5d,0xc5,0xfe,0x1f +.byte 0x7b,0x9f,0x33,0xf1,0xee,0x2a,0x58,0x39,0x56,0x14,0x4f,0x2f,0x11,0x26,0x6b,0x56,0x7c,0x75,0xb7,0xc3,0xa7,0xf6,0x54,0xd8,0xa7,0xbb,0x73,0xb5,0xa5,0x83,0x1e,0x65,0x7e,0xa7,0x85,0x74,0xa4,0x04,0x0e,0x26,0x01,0x88,0xbc,0x8b,0x98,0x0c,0x9b,0x74,0x22,0x44,0x16,0x16,0xed,0x94,0x81,0x81,0x13,0x26,0xc9,0x27,0xa9,0xa7,0xe0,0x45 +.byte 0x69,0x6e,0x33,0xcc,0xa3,0x15,0x10,0x99,0x84,0x06,0x95,0x00,0xbb,0xc6,0x8e,0x4e,0x37,0x1b,0x23,0xb2,0xf7,0x4d,0xd7,0x24,0x68,0x6b,0xaa,0x2e,0x57,0x8d,0xd6,0x4e,0xa2,0x69,0xd8,0x8d,0x84,0xb2,0x85,0x91,0x30,0xbf,0x41,0xab,0xcf,0x5c,0xa6,0x51,0x1e,0xf5,0x79,0x5a,0x20,0xfa,0x3d,0x0a,0xc5,0xd7,0x3f,0xa6,0xcc,0xf6,0x9b,0x76 +.byte 0xe0,0xec,0x9e,0x0b,0x23,0xe4,0x74,0x36,0x14,0x6f,0x24,0x9d,0xe7,0xb2,0x41,0xd7,0x68,0x37,0x67,0xdc,0x01,0xb1,0x20,0xf9,0x8b,0x0b,0xf5,0xa7,0x95,0x78,0xa0,0x6c,0x4b,0xc0,0x44,0x92,0x4a,0x75,0x0f,0x61,0xde,0xc3,0xc2,0x3d,0x17,0xa0,0x4d,0x57,0x8b,0x11,0x35,0xbd,0x49,0x87,0x05,0xba,0x5d,0x1f,0x76,0xd4,0x0f,0xb0,0x5b,0x5f +.byte 0xb7,0xf8,0xcf,0x12,0x54,0x19,0x9a,0x49,0x6a,0x42,0xad,0x93,0x85,0x0b,0xe7,0x8c,0x30,0x59,0x82,0x82,0x2d,0xd9,0x89,0xf5,0x8c,0x39,0x9c,0xf5,0xcd,0x25,0x22,0x74,0xcf,0x56,0xa2,0x15,0x40,0xa6,0xa8,0xfc,0xdc,0x85,0x9e,0xab,0xd6,0x94,0x5d,0xd6,0x73,0x07,0xed,0x7b,0x76,0x11,0x67,0xf5,0x52,0xac,0x1a,0x69,0x1f,0x4a,0xa2,0xaa +.byte 0x4d,0x11,0xe0,0xc4,0x4c,0x6e,0x9e,0x8e,0x13,0x46,0x0b,0x95,0x40,0x53,0x35,0x53,0x58,0x7f,0x81,0x5f,0x17,0xd7,0x5e,0x53,0x86,0xf3,0x1b,0x70,0xf1,0x95,0x8f,0xf6,0xd4,0x6f,0x55,0x92,0xa2,0x38,0xd3,0x43,0x6c,0x7e,0xa2,0x21,0x5b,0x18,0x11,0xdd,0x03,0x52,0xe6,0xe5,0xc0,0xc5,0x4e,0x8e,0xda,0xdb,0x91,0xcf,0xf7,0x75,0xc2,0x33 +.byte 0x69,0xd1,0xd1,0x29,0x9d,0x51,0x79,0x91,0xe4,0x58,0x05,0xa5,0xf6,0x54,0x16,0x3e,0x42,0xf3,0xc4,0x1f,0x88,0x94,0xfc,0x6b,0x53,0xb1,0xd5,0x17,0xe6,0xab,0x77,0x33,0x8a,0xd0,0x93,0x74,0x02,0xe0,0x81,0x5e,0xbe,0x2f,0x4d,0xcd,0x25,0x0b,0xd0,0x06,0xd8,0xc9,0xf9,0xcf,0x8e,0xf8,0xc3,0xe2,0x33,0x60,0xe5,0xfa,0x89,0x68,0xf8,0xb7 +.byte 0xef,0x9d,0xfc,0x9d,0x76,0x13,0x2d,0x9d,0x18,0x7d,0x05,0xb4,0xa7,0xa3,0x8a,0x91,0xe0,0x73,0x65,0x89,0xb4,0xc1,0x53,0x7c,0xdc,0xf2,0xab,0x39,0x94,0xc7,0x3d,0xf8,0x1c,0x8f,0x49,0x37,0xee,0xc1,0x19,0x84,0x15,0x3b,0x36,0xb2,0xc2,0xe1,0x16,0xe2,0xfb,0xde,0x1f,0x0e,0xa4,0xea,0x59,0x67,0x2d,0xea,0x47,0xe5,0x2c,0xd1,0xb5,0xa9 +.byte 0xbd,0x5c,0x92,0x34,0x8b,0xc5,0xab,0x4f,0x2b,0x6b,0xc4,0x8b,0xdb,0xbb,0xcb,0x86,0x34,0x35,0xa0,0x5c,0x29,0x1a,0x8b,0xce,0xdc,0xd7,0x46,0x2b,0x20,0x9d,0xea,0xa8,0x97,0x68,0x37,0x56,0x03,0x7d,0x4f,0xb6,0xfc,0x30,0x82,0x68,0xb4,0x56,0xf3,0xbe,0x58,0xcc,0x20,0xc1,0x53,0x9f,0xbb,0x0b,0x2b,0x6e,0xa0,0x2d,0xc0,0x61,0x02,0x0b +.byte 0xf9,0x0e,0x55,0xb8,0xb8,0x23,0x6e,0x50,0xc0,0x36,0xb8,0xf6,0x5e,0xb3,0xa7,0x8f,0xf8,0x7f,0xd0,0x5d,0x0a,0xc4,0x2b,0xa9,0xd3,0x76,0xcf,0x4d,0x27,0xda,0xac,0xf3,0xb0,0xca,0x00,0xa0,0x94,0x12,0x20,0x89,0x22,0xa9,0x89,0xe4,0x23,0x71,0xe0,0xdb,0xec,0xb0,0xa9,0x2e,0x45,0xf6,0x8d,0x1e,0x4b,0x0e,0xc7,0xf8,0x40,0xd6,0xf4,0x2f +.byte 0x80,0x3e,0xf8,0xfb,0xcf,0x7b,0x54,0xb5,0xbd,0x55,0xf2,0x37,0x46,0x9f,0x32,0x45,0x87,0xa3,0x6a,0x51,0x25,0x43,0x54,0xa2,0x92,0xc6,0xbe,0xa4,0x33,0x54,0x82,0xc7,0xf1,0xe4,0x52,0xf9,0x09,0xac,0xc3,0xb1,0x25,0x86,0xc7,0x89,0x83,0x2c,0xf6,0x35,0x9e,0xd1,0xd8,0xb1,0x71,0xed,0xfa,0xae,0x09,0x83,0xb3,0xf0,0xde,0x24,0xed,0x3c +.byte 0xc6,0x60,0xe8,0x15,0x49,0x93,0x29,0x82,0xbf,0x1d,0x23,0x17,0x11,0xea,0xa7,0x53,0x83,0xa5,0xc1,0x9e,0x02,0x17,0x08,0x99,0xa6,0x72,0xaf,0x82,0x3f,0x0b,0x69,0xca,0xb8,0x72,0xa9,0x31,0x71,0x20,0x32,0x57,0x89,0x9b,0x16,0x92,0x54,0xc0,0x99,0x6d,0xa4,0xbf,0x5a,0xb5,0x53,0xa7,0x4c,0x69,0xd8,0xf7,0xe7,0x4c,0xc0,0x76,0xb6,0x35 +.byte 0xdd,0xe7,0xb2,0xd9,0x1c,0xd5,0xf7,0x39,0x32,0x44,0x48,0x02,0x85,0x69,0x02,0xad,0xe6,0xfc,0xbb,0x07,0x9e,0x7f,0xee,0x6d,0x07,0x12,0x21,0xeb,0x67,0x4d,0x74,0x90,0x8f,0x79,0x51,0x9d,0x8a,0x63,0x24,0xab,0x6f,0x8f,0x73,0xd3,0x91,0x68,0x15,0xa9,0x6a,0x84,0x92,0xc2,0xd4,0x4d,0xa8,0xe1,0x4f,0xa2,0x1e,0x34,0xa3,0x9a,0x04,0xf2 +.byte 0xfc,0xc4,0xe7,0xd0,0x52,0xc4,0x49,0x51,0x8e,0x7d,0xaa,0x74,0xaa,0x08,0xbe,0x08,0xf6,0xe4,0xc1,0x61,0xff,0x2e,0x9c,0x17,0x61,0xb6,0x01,0x44,0x18,0xe8,0x5e,0xa9,0xfb,0x02,0x21,0xbb,0x08,0x5c,0xe0,0xd3,0x0c,0x98,0xc5,0x93,0x2a,0x1c,0x69,0xf3,0xe8,0x8b,0x36,0xa0,0x9d,0x1e,0xda,0x18,0x14,0x06,0x7f,0x75,0x3d,0x42,0x92,0x5a +.byte 0xb9,0xb7,0xc0,0xc0,0xb0,0xc5,0xa9,0xb2,0x67,0x24,0xc2,0x28,0x29,0xcb,0x78,0x8e,0xf3,0xd1,0x37,0x63,0xca,0xc8,0x9a,0x1b,0x38,0xa5,0x9f,0x0e,0x0d,0x26,0x5b,0xfe,0x2f,0xdf,0x4f,0xb9,0x21,0x8c,0xc8,0xe0,0x9f,0x71,0xb9,0xc3,0x6c,0xd8,0xd3,0x2f,0xe4,0x3c,0x67,0x35,0x45,0x74,0x7f,0xcb,0x13,0xda,0x64,0x47,0xff,0x6f,0x05,0xf0 +.byte 0x87,0x8d,0x0d,0x1f,0x10,0x47,0x0e,0xf6,0x9d,0x89,0x6d,0x79,0x04,0x77,0x8a,0x6c,0xeb,0x7d,0x9b,0xd7,0x65,0x82,0xa8,0x95,0xa2,0x8c,0x02,0x91,0x0d,0xf2,0xe8,0x65,0x60,0x0d,0xb6,0x1d,0xf4,0xf3,0x41,0x75,0x33,0x21,0x13,0x22,0x93,0x01,0x2f,0x11,0xe7,0xed,0x45,0x56,0x90,0xec,0x0b,0x99,0x8e,0x84,0xc8,0x76,0x31,0x1d,0xb9,0xcb +.byte 0x87,0x3f,0x5f,0x39,0xeb,0xe8,0x9e,0x5e,0x96,0x9e,0x42,0x64,0xf3,0xef,0x00,0x1f,0x2a,0x6c,0x18,0x67,0xbd,0xdd,0xf9,0x65,0x11,0x1b,0x9c,0xd7,0xf3,0x3d,0xb2,0x6f,0x88,0xf7,0xd2,0x26,0x06,0xef,0xc8,0x23,0x3f,0x46,0x5d,0xf0,0x96,0x40,0xb1,0xdd,0xad,0xe4,0xee,0xb6,0xc2,0x67,0x18,0x46,0x67,0xc4,0xa5,0x7e,0x3e,0xce,0x72,0x47 +.byte 0xca,0xc3,0xa7,0x94,0x56,0xe2,0x23,0x03,0xcf,0xd0,0x18,0x55,0x30,0xe3,0x14,0x00,0xda,0x0f,0xaa,0x7f,0x20,0xaf,0x3b,0x24,0x43,0x7a,0xaa,0xd4,0x12,0x42,0x10,0xe4,0x44,0x8a,0x7f,0xf1,0x74,0x9d,0xe0,0x28,0x60,0xce,0xdd,0x04,0x96,0x03,0x80,0xcb,0xaa,0xa9,0xb5,0xc7,0xb4,0xbb,0xc7,0x9a,0x93,0xd8,0xff,0x3b,0x8f,0x1f,0xb7,0xce +.byte 0xed,0xbc,0xde,0x9f,0x9e,0x56,0x96,0x65,0xba,0xe7,0x89,0x03,0xb2,0xbd,0xfe,0xa7,0x02,0xeb,0x33,0x9a,0x8b,0x5b,0x36,0x64,0x17,0x9f,0xd2,0xe4,0x75,0xb5,0xfb,0x21,0x03,0xa4,0xe7,0xb4,0x49,0x72,0xfd,0xf3,0x1e,0x5f,0xdb,0xe5,0x6c,0x92,0x51,0xe7,0x91,0x55,0xb7,0x82,0x18,0x05,0xc3,0x2c,0xf1,0x23,0x61,0x36,0xad,0x80,0x1b,0xde +.byte 0xe1,0x51,0x4e,0x51,0xa1,0xf6,0x5a,0xb9,0x03,0x48,0xa7,0x12,0x88,0x63,0x30,0xff,0x48,0xfc,0x92,0x30,0x9a,0xca,0x08,0x1b,0x64,0xa9,0x74,0x2a,0x64,0x42,0x7d,0xa9,0xa4,0x9d,0xcb,0x59,0x71,0x53,0xc1,0xa8,0xa6,0xb5,0x47,0xf9,0x87,0xb5,0x41,0x58,0x92,0x14,0xf7,0xbd,0x10,0x45,0x37,0x20,0x1d,0x5b,0x42,0x04,0xed,0x69,0x4c,0xa5 +.byte 0xdc,0x2a,0x58,0xba,0x00,0x1e,0x05,0x9c,0x3c,0xbf,0x65,0x76,0xd1,0x11,0xe0,0x15,0x22,0xb0,0x2a,0x53,0x32,0x0f,0x6e,0x08,0x4e,0x27,0xc2,0x71,0x14,0x20,0xee,0xb0,0x0b,0x60,0xef,0x54,0xae,0x2c,0xe0,0x1d,0x30,0xac,0x0d,0x3a,0x93,0x15,0x0a,0xe7,0x14,0xf3,0x1a,0x67,0xb1,0x43,0x85,0xbd,0x06,0x53,0xab,0x6d,0x5d,0xe7,0xe3,0x82 +.byte 0xb8,0x39,0x35,0x10,0x87,0xe7,0x90,0x4d,0x9c,0x6f,0x83,0xad,0xa2,0x43,0x7a,0x5d,0xc1,0x8a,0x39,0xa3,0xa6,0xda,0x48,0x5c,0x9b,0xe1,0x0d,0x69,0xfc,0x87,0x18,0xdd,0x34,0x9a,0xb4,0x9c,0x04,0x0d,0x49,0x18,0x3e,0x38,0xd8,0x01,0x67,0xb1,0x7f,0x6b,0xb5,0xfe,0x58,0x1c,0x64,0x11,0x10,0x6b,0xc1,0xca,0x56,0xe3,0x12,0x8c,0xb4,0xac +.byte 0x03,0xbd,0xc1,0x54,0xbe,0x5c,0x70,0x6f,0xdd,0x73,0xa3,0x84,0xcd,0x0b,0x1b,0xbf,0x05,0xac,0x27,0x11,0xe8,0x5f,0xc3,0xb9,0x68,0xc2,0xe9,0x3f,0x5a,0x9b,0x28,0xca,0x65,0x5e,0x66,0x4e,0x50,0xa9,0x81,0xb1,0x10,0xc1,0x2c,0xa5,0x62,0xc8,0x52,0x07,0xa5,0xa1,0x99,0x16,0x7b,0x08,0xa4,0x1e,0xf4,0x50,0x8f,0xb2,0x42,0xa5,0x19,0xa2 +.byte 0x34,0x91,0xcf,0xa7,0x5e,0x73,0x6b,0xc2,0xa3,0x4d,0xdd,0x7c,0x26,0x46,0x34,0xe6,0x5d,0x54,0x52,0xe3,0x1e,0xc1,0x10,0x36,0x7c,0xc9,0xd2,0x1e,0xca,0xeb,0x80,0xc5,0x3c,0x04,0xf6,0xb7,0x09,0xd4,0x3e,0x67,0xc3,0xf6,0x6b,0xd4,0x60,0x00,0xc9,0x68,0x17,0x39,0xbc,0xcd,0x14,0x32,0xfc,0x33,0xa4,0xb0,0x6f,0x12,0x6b,0x5f,0xe2,0x15 +.byte 0x1c,0x9a,0x15,0x4f,0x0b,0x7d,0x4c,0xa0,0x89,0x40,0xb3,0x0e,0x84,0x90,0xb3,0xc6,0x3e,0xa5,0x0b,0x81,0x66,0x14,0x5f,0x8d,0xe0,0xbf,0xf7,0x9d,0xa4,0x4e,0x69,0xd5,0xac,0x0f,0x6c,0x29,0x94,0x8f,0x3b,0x4b,0xed,0x5b,0x6e,0xe1,0x58,0x5d,0x32,0x19,0xe6,0xbd,0xfb,0xd5,0xb7,0x0f,0x72,0x0e,0x5b,0x14,0xd3,0xf3,0x09,0xa8,0xea,0xf7 +.byte 0x98,0x2f,0x42,0x07,0x8e,0x72,0x27,0x53,0x8d,0x0b,0xea,0x74,0x38,0xbc,0xaf,0xb8,0x76,0x65,0x97,0xda,0xa7,0x06,0x37,0x29,0x09,0xbe,0xaa,0xe6,0xf7,0xb6,0xb1,0x5f,0x71,0x1f,0x5d,0x14,0x47,0xdf,0x20,0xa3,0x94,0x93,0x7d,0x21,0xe6,0x22,0x7e,0x38,0x1a,0x26,0x83,0xc7,0x32,0xdf,0x58,0xcd,0xab,0x67,0xae,0x94,0xa5,0x68,0xcb,0xe3 +.byte 0x51,0x70,0xc0,0xc4,0x41,0x9f,0xca,0x05,0xc9,0x51,0x2a,0x8e,0x53,0x89,0x3f,0x52,0x6b,0x29,0x64,0xa8,0xb8,0xdf,0x02,0xb1,0x41,0x4e,0x36,0x42,0x32,0xa8,0xc0,0x91,0xf0,0x69,0x69,0x55,0x99,0xb7,0x78,0x4f,0x79,0x5b,0xc5,0xab,0xc6,0xed,0x15,0x88,0x6b,0x94,0x0a,0xdd,0xea,0x47,0xf9,0x0e,0xb8,0x89,0x15,0x68,0x3e,0xc0,0x50,0xf8 +.byte 0xa1,0x2d,0x2a,0x11,0x8a,0xc5,0xb0,0x09,0x4f,0x7d,0x90,0x5f,0x49,0x35,0xe9,0xdd,0xfc,0xac,0xea,0x1b,0x20,0xad,0xd2,0xe6,0xb6,0xbf,0x3c,0x0e,0x7b,0xdf,0x2f,0x55,0x58,0x0e,0x25,0x53,0x62,0xd3,0x73,0xb8,0x3e,0x12,0x91,0xcb,0x23,0xf2,0xc0,0x5d,0x74,0x2b,0x51,0xcc,0xa2,0xb1,0x5a,0xd2,0xf4,0x9b,0xc9,0xa5,0x83,0x2b,0x5a,0x8a +.byte 0x0b,0xe9,0x09,0x59,0xb5,0x44,0xc9,0x55,0xcc,0xbd,0xb6,0x69,0x66,0x9a,0x0c,0x15,0xae,0x76,0x35,0xbe,0xe9,0x37,0x70,0x9e,0xdc,0x97,0x5a,0x82,0x97,0xf6,0x1a,0x45,0xd7,0x27,0xfe,0x1f,0xc3,0x7c,0x3a,0x52,0x85,0x12,0x73,0x8a,0x8e,0x07,0xec,0x1f,0x59,0x3f,0xb0,0x32,0x07,0x92,0x3e,0x81,0xe0,0x7a,0x9a,0xc9,0x91,0xca,0x84,0xf1 +.byte 0xe1,0x32,0x57,0x0a,0x3c,0x9a,0x20,0xa8,0xbe,0x84,0x91,0x44,0x66,0x81,0xdd,0x12,0xa8,0x46,0x15,0x18,0xfc,0xae,0x5e,0x9a,0xf3,0xd9,0xb9,0x6a,0xbb,0x90,0x1c,0x61,0x7f,0x61,0x2c,0xa7,0x12,0x1e,0x05,0xee,0x0c,0x66,0x9e,0xc2,0xc8,0xb9,0xe0,0xc9,0xc4,0xb9,0xee,0x3a,0x6f,0x97,0x2a,0x5e,0xcb,0xd9,0xff,0xd1,0x37,0x5e,0xa0,0x03 +.byte 0x70,0xc1,0x2f,0x15,0xf9,0xf7,0x90,0xbe,0x23,0xe7,0x7c,0x90,0x4b,0xe4,0x5a,0x01,0x65,0x27,0x2d,0x4b,0xd3,0xa8,0x8c,0x1d,0x2d,0x5d,0x48,0xac,0x6b,0x59,0xc9,0x78,0xb2,0xee,0xda,0x6e,0xa8,0x68,0x08,0x99,0x22,0x25,0xfe,0xc2,0xb8,0x83,0xa8,0x08,0xbb,0x6e,0x64,0xae,0x2e,0xbb,0x93,0xaf,0xdc,0xeb,0xa3,0x11,0xa7,0x5d,0x3f,0x22 +.byte 0xf1,0x95,0x27,0xf6,0xd6,0xa6,0xc3,0x56,0x0a,0xd0,0x17,0x43,0x35,0xd2,0xe7,0xa4,0x8f,0x6c,0x1c,0xc4,0x4d,0xa7,0x3b,0xb8,0x7f,0x0c,0xa0,0xd6,0x56,0x82,0xf4,0x16,0x96,0xcd,0xcf,0x6f,0x78,0xec,0xbb,0xb2,0xdb,0x67,0xcf,0x78,0x0c,0x22,0x1d,0x72,0x21,0x8e,0x40,0x85,0xa5,0x07,0x3b,0x0e,0xfa,0x44,0xb0,0xfe,0xbf,0x54,0x80,0x41 +.byte 0xdc,0xa7,0xc7,0xdb,0xaa,0x04,0x42,0x0d,0x42,0x03,0x17,0xc8,0x57,0xd7,0x08,0x34,0x37,0xf5,0x9a,0x90,0x30,0x43,0x54,0x5b,0x58,0x50,0x4e,0xc4,0x56,0x57,0xff,0xf0,0x05,0x82,0xca,0x2e,0x20,0xb0,0xbd,0xd0,0x00,0x7d,0x60,0x3f,0xdb,0x9c,0x08,0x7e,0x21,0x63,0xbc,0x89,0xbf,0xcb,0xcc,0x36,0xb5,0x36,0x41,0xb4,0x9c,0x5c,0x9d,0xa6 +.byte 0x74,0xa4,0x4f,0x6a,0xcb,0x63,0x51,0xb1,0x92,0xa0,0x03,0x9b,0x88,0x03,0xd5,0x82,0x30,0xfb,0x69,0x49,0x20,0xb0,0x37,0x50,0xe4,0x02,0x9e,0x11,0x09,0x20,0x1a,0x41,0x8d,0xdd,0xa0,0x18,0xb4,0x74,0x04,0x1e,0x3a,0xea,0xb4,0x28,0x01,0x7f,0x0b,0x73,0x27,0x5f,0x76,0x2e,0x71,0xfa,0x50,0x1b,0x43,0x8d,0x0d,0x6c,0x87,0xc3,0x10,0x7b +.byte 0x42,0x7d,0x17,0xa6,0x00,0x5b,0x83,0x6c,0x7b,0x7f,0x72,0xd8,0x90,0x4d,0x7f,0x54,0x72,0x17,0x21,0xe4,0x45,0x74,0x20,0x53,0x30,0x46,0x90,0xbf,0x2f,0xac,0x01,0xbd,0x40,0xa9,0xc5,0xbe,0xbd,0x9b,0x59,0x62,0x03,0x30,0x80,0xe3,0x8e,0x23,0x7b,0x2d,0x63,0x4f,0x30,0xe3,0xb8,0x56,0x87,0x57,0x43,0xdc,0x6a,0x3c,0x13,0xed,0x93,0xc9 +.byte 0x1a,0x1b,0xea,0x38,0x67,0x33,0x7f,0x11,0x5c,0x96,0x20,0x4d,0xf6,0x82,0x51,0x45,0xca,0x20,0xfd,0x59,0xef,0x4c,0xb4,0xb0,0xb2,0x0f,0xdb,0x4c,0x00,0x7a,0x18,0x58,0xb0,0xd3,0x65,0x73,0x42,0xe5,0x05,0x76,0xd7,0xa2,0x1e,0x9f,0x59,0xc0,0xd0,0x76,0x29,0x1b,0x12,0x29,0x9b,0xe4,0x7d,0x45,0x13,0xb4,0x57,0xf2,0x0b,0xd1,0xb5,0x60 +.byte 0x6d,0x15,0x0b,0xca,0x5e,0xe4,0x80,0xda,0x56,0x95,0x41,0x18,0x54,0xa7,0xad,0x40,0xe5,0xd7,0xa7,0x3e,0xf7,0x73,0x40,0x70,0xb3,0x23,0xdb,0x22,0x62,0xc7,0x44,0xfb,0x64,0x18,0x18,0x05,0x84,0x07,0x68,0x06,0x7f,0xb9,0xc3,0xf9,0x55,0xe2,0x0d,0x37,0x51,0x34,0xc3,0x55,0x3c,0x29,0x5d,0x1d,0x27,0x77,0xd3,0xe1,0x6a,0x60,0x9f,0x10 +.byte 0xef,0xb1,0x93,0xbf,0x2a,0xb7,0xe8,0x42,0x4d,0xfd,0xa9,0xa9,0x2f,0xb6,0x07,0x5b,0xe8,0xf7,0xd7,0x10,0x47,0x71,0x56,0xba,0x11,0x11,0x32,0xc4,0x22,0xf4,0x12,0x6f,0xc3,0xef,0x81,0xc5,0x82,0xb4,0x1b,0x99,0xbb,0x1a,0x63,0x6b,0x3a,0x70,0x4f,0xec,0x2c,0xf9,0xde,0x1a,0x2e,0x62,0x27,0x1c,0x81,0x21,0x30,0x08,0x30,0xf6,0xf5,0xc1 +.byte 0x6d,0x0b,0xeb,0x34,0xd9,0x3a,0xa2,0xa2,0xc6,0x17,0x60,0x85,0x65,0x43,0xd6,0x3d,0x71,0xac,0xc2,0xaf,0x2b,0x9e,0x62,0xf2,0x08,0x47,0x6f,0x42,0xa8,0x21,0xad,0x42,0x98,0xa0,0xef,0xdf,0xd8,0xda,0x10,0xad,0xf7,0xe5,0xf9,0x22,0x89,0x44,0xbf,0x86,0x86,0x2b,0x02,0xd1,0x9e,0x8f,0xb7,0x10,0x63,0xb1,0xcc,0x40,0x6b,0xa3,0x8e,0x09 +.byte 0xb8,0xe3,0x77,0x3c,0xde,0x36,0x7a,0xb7,0x78,0x4f,0x99,0x5d,0x9a,0x9e,0x19,0x2d,0xb5,0xd9,0x9c,0x95,0x1f,0xa1,0xcc,0x61,0x31,0x1c,0x96,0xe5,0xca,0xeb,0x26,0x34,0xa4,0x63,0x5c,0x7c,0x0f,0x23,0xd1,0xe1,0x09,0xf4,0xab,0xf6,0x73,0x2f,0x8a,0x62,0xf0,0xd3,0x8c,0x44,0xe5,0xe9,0x9d,0x58,0x71,0xfa,0xf5,0x39,0xa5,0x6f,0xf7,0x04 +.byte 0x43,0x0a,0x78,0x54,0xfb,0xa7,0x66,0x57,0x1f,0x61,0xd6,0xda,0xff,0x4f,0x32,0x9d,0x80,0x6b,0x77,0xed,0xda,0xaf,0xbc,0x9e,0xea,0x77,0x04,0xf3,0x47,0x96,0xd1,0x44,0x8e,0xca,0xfe,0xb0,0xa3,0xa6,0x1d,0x8d,0xa4,0xb5,0x8c,0x35,0x28,0xf3,0xaa,0xab,0x28,0x1e,0xc9,0x94,0x12,0x07,0xc6,0xea,0x23,0xf9,0x69,0xc3,0x14,0x27,0xcc,0x55 +.byte 0x27,0x0b,0x27,0x64,0x23,0x38,0x05,0xd9,0xb4,0xf7,0x00,0xf3,0x02,0xae,0xc8,0x5a,0xbd,0x2f,0x20,0xd5,0x45,0xa6,0x09,0x6f,0x1a,0x09,0xb7,0xe7,0x6f,0xf6,0xa6,0x6f,0xc7,0x03,0x4e,0xa3,0x72,0xb5,0xfc,0x17,0xcf,0x1e,0x64,0x8b,0xc4,0xa2,0xba,0x83,0x0e,0x2a,0x11,0xba,0x71,0xe0,0x1c,0x9f,0x70,0x6e,0xf4,0xd9,0x47,0x31,0xf7,0xaf +.byte 0xf7,0x1a,0xe7,0xc1,0xe9,0x66,0xa4,0x48,0xd4,0x25,0x8b,0xf7,0x6f,0x33,0x72,0xff,0x93,0x2e,0xcd,0xc7,0xae,0x3b,0x71,0x3f,0x84,0x7f,0xe6,0xb5,0x58,0x4f,0x95,0x34,0xe7,0x89,0x10,0xd3,0x2b,0x5c,0x30,0x9b,0xd3,0xef,0x98,0xf3,0x33,0x0e,0x6d,0x5f,0x7e,0xba,0x55,0x7a,0xb6,0xf3,0xb6,0xcd,0xa8,0x10,0x68,0x85,0x6f,0xea,0x54,0xc3 +.byte 0x66,0x51,0x5a,0xfc,0x11,0x83,0x9e,0x68,0x95,0xdb,0xec,0x74,0xf0,0x86,0x4a,0x90,0x24,0x66,0xf2,0x61,0x40,0x2e,0x3b,0x53,0xea,0xc1,0x3e,0x1c,0x69,0xaf,0x5f,0x04,0xb5,0xbd,0x3d,0x44,0x1c,0xc6,0x49,0x65,0xf6,0x78,0xfd,0x69,0x49,0x95,0x96,0xa1,0xa0,0xa9,0x78,0x1a,0xf6,0x0f,0xe9,0x52,0x93,0x9c,0x96,0x6c,0x5e,0x67,0x63,0x2d +.byte 0x18,0x22,0x2a,0xcc,0x7f,0x2f,0xd3,0x72,0x82,0x98,0xae,0xb0,0x2b,0xa6,0x96,0x41,0x25,0x47,0x3c,0x92,0xc5,0x0f,0x2c,0xd4,0x43,0x09,0x0b,0x94,0x73,0x73,0x29,0xc2,0x8a,0xa3,0xcc,0x8d,0xed,0x40,0x6d,0x40,0x18,0x7c,0x32,0x1e,0xe1,0x4e,0x26,0xa7,0xa4,0xd5,0xcb,0xfa,0x90,0xba,0xb2,0x04,0x1d,0x5d,0xbe,0x32,0x6c,0x71,0x09,0x51 +.byte 0xdb,0xe3,0xb0,0xe1,0x34,0x74,0xa3,0x2b,0xf2,0xcb,0x9e,0xc0,0xae,0x88,0x40,0x90,0xb6,0x22,0xc8,0xac,0xff,0x45,0xc6,0xfa,0xce,0x0f,0x03,0x9d,0xc0,0xb2,0x2e,0xdb,0x1e,0x6c,0xa5,0xbe,0xb5,0xb3,0xaa,0xd5,0x2d,0x06,0x4d,0x29,0xa3,0xbe,0x25,0x5f,0x21,0x42,0x8d,0x27,0xaa,0x6f,0x59,0x88,0x61,0x4d,0x72,0x9f,0x64,0xfc,0x07,0xaf +.byte 0xeb,0x02,0x5e,0xb9,0x1f,0xfe,0x1a,0x67,0x10,0x35,0xe9,0x9f,0x5f,0x9c,0x8d,0x4a,0xb3,0x10,0x99,0x8d,0x5b,0x9c,0x8b,0x8a,0x0c,0x02,0x8b,0x44,0x1a,0xaa,0xe7,0x14,0x05,0x3d,0x9e,0x62,0xfc,0x76,0x49,0x56,0x46,0xae,0xcc,0x0e,0x47,0x58,0x4d,0x94,0x33,0x4d,0x23,0x24,0x44,0x52,0x2e,0x18,0xf7,0x53,0x6b,0x24,0x67,0xb8,0x88,0x46 +.byte 0x70,0xc8,0xcb,0x60,0xac,0x70,0x85,0xdd,0x00,0xa1,0x5d,0xbb,0x94,0x07,0x0a,0xb6,0x1c,0x88,0x59,0xa7,0x88,0x7e,0x1e,0xc9,0x1d,0x7c,0xa0,0x1c,0xad,0xe4,0xa5,0x36,0xa5,0x35,0xe8,0xda,0x27,0x15,0xbc,0x7b,0x1e,0x8a,0x33,0x74,0x4b,0xc1,0xc7,0x9d,0xa9,0x21,0x98,0x02,0xe5,0xf4,0x8b,0x8e,0x2d,0x64,0x81,0xea,0xa6,0xbe,0xe2,0x05 +.byte 0x16,0xba,0xac,0x75,0x79,0xa4,0xc0,0xd3,0x9d,0xe0,0x25,0x63,0x22,0xb3,0x9c,0xee,0x04,0x8f,0x60,0xab,0x52,0x43,0x05,0x16,0xd4,0xb3,0x88,0xe8,0x68,0xc3,0x81,0x94,0xc4,0xee,0x13,0xaf,0xdd,0x36,0x23,0xe6,0x78,0xc9,0xf6,0x42,0xf0,0xf7,0x89,0x64,0x79,0x13,0xe8,0xed,0x50,0x03,0x16,0x78,0x6d,0xf4,0xdf,0x85,0x2e,0x4e,0x8f,0x2c +.byte 0x5b,0xfe,0x4c,0xf2,0x49,0xde,0xf2,0xa4,0x96,0xe0,0x8a,0x25,0xc8,0x6d,0x22,0xff,0xab,0xfc,0x18,0xe8,0x7f,0xd5,0xc1,0x7e,0x44,0x8e,0x21,0xb4,0xc8,0x79,0xc0,0x55,0xaa,0xb7,0x28,0xa1,0x3a,0xbd,0xc2,0x1d,0xf8,0x87,0xf9,0x35,0x30,0x25,0xb2,0xaa,0x8f,0x3c,0x0d,0x64,0xf2,0xd1,0xa0,0x51,0xbf,0x9b,0x9a,0x9a,0x9c,0x18,0x43,0xea +.byte 0xd2,0x54,0x50,0xe0,0xca,0x1a,0x29,0x16,0x9f,0x49,0x47,0x56,0x65,0x21,0x0f,0xb0,0x53,0x41,0xe3,0xec,0xe0,0x15,0xcb,0xd0,0x61,0x05,0x67,0xd6,0x02,0x1a,0x31,0x80,0xa4,0x9f,0xf5,0x9b,0x28,0xcd,0x43,0xd5,0x70,0x05,0x67,0xe8,0x76,0xb7,0x99,0x98,0x0a,0xd6,0x27,0xe9,0xfb,0x62,0xff,0x66,0x47,0xf7,0xbe,0x5e,0x35,0xa0,0x3b,0x56 +.byte 0x58,0x78,0x9b,0x9c,0x5b,0x9f,0xf5,0x6b,0x1a,0x6a,0xfd,0x8e,0xe3,0xd9,0xa2,0x8b,0x2e,0xef,0xc7,0xd3,0x74,0xb1,0xea,0x6a,0x03,0x8b,0xe2,0x78,0xbe,0xf1,0x75,0x7f,0x02,0x03,0xbc,0xd3,0x15,0x2c,0x87,0x01,0x95,0xa6,0x87,0x2d,0xf8,0x63,0xfe,0x33,0x8f,0xc5,0xc9,0x0a,0x06,0x79,0x93,0x46,0xd7,0x0b,0x61,0x06,0x68,0xae,0x9b,0x46 +.byte 0x6f,0x9e,0x1b,0x21,0x58,0xc1,0x72,0xa9,0x05,0xa7,0xaa,0x88,0xee,0xed,0x8d,0x7f,0x55,0x3b,0xb8,0xb8,0xf8,0x42,0x26,0x4a,0x78,0xe3,0x17,0xe8,0xac,0xb3,0xdb,0x9b,0x90,0x7d,0x8d,0x65,0x00,0x39,0x40,0xc2,0xe2,0x9c,0xc6,0x16,0x35,0x54,0x64,0x09,0xc8,0xc7,0x08,0x77,0x90,0x9d,0xb4,0xd4,0xe1,0x36,0xd4,0x5e,0x63,0xb0,0xba,0x81 +.byte 0x0c,0x4e,0x24,0x20,0xc0,0x7f,0xfc,0x02,0x3d,0x83,0x60,0x8a,0xf5,0xff,0x87,0x60,0x9c,0xd5,0xc0,0x94,0x64,0xe2,0x3f,0xeb,0x9a,0xe5,0xb6,0x50,0x13,0x36,0xf4,0x96,0x5d,0xf4,0xb5,0xab,0xa4,0x28,0x17,0x38,0x7f,0xca,0xf7,0x0c,0xcf,0xae,0xf8,0xef,0x41,0x6d,0x9c,0xa1,0x53,0x33,0xcb,0x8d,0x21,0xab,0x3a,0x8c,0x72,0x8d,0xf3,0xf2 +.byte 0x05,0x69,0xf5,0xe8,0x6b,0x5b,0x42,0x85,0xb1,0x2e,0x6f,0xf8,0x62,0x00,0x1c,0x48,0x6c,0x85,0x72,0x93,0x34,0x67,0x80,0xe7,0x2a,0xfe,0xcf,0x54,0xc6,0x94,0xf2,0x5a,0x48,0xab,0x40,0x52,0x66,0x7d,0x7a,0x75,0x68,0x77,0xfd,0xb2,0xdd,0xb1,0xdb,0x72,0x50,0x31,0x53,0x24,0xbd,0xb0,0x6e,0x1f,0xbd,0xa6,0x90,0x67,0x07,0x1d,0x31,0xf3 +.byte 0x8c,0x82,0xf7,0x53,0x85,0x54,0x64,0x7c,0x76,0x7b,0x5f,0xaa,0xe0,0xe0,0x36,0xa4,0x13,0xb3,0x0b,0x99,0x09,0xfe,0xed,0xbb,0x81,0x4b,0xb3,0x16,0x45,0x2e,0x3a,0xfe,0x60,0x9c,0xdc,0xcb,0x00,0x5a,0x41,0xc4,0x80,0x3c,0x9d,0x15,0x05,0xfa,0x5e,0x37,0x64,0x89,0x9c,0x2d,0xb8,0xf7,0xbc,0x35,0x8c,0x49,0xfe,0x0a,0x43,0x1a,0x59,0xaf +.byte 0x1e,0x50,0x08,0x0f,0x2d,0xb8,0x5d,0x63,0x7f,0x95,0x6a,0xe6,0xad,0x88,0xc3,0xac,0x05,0x14,0x44,0xb0,0x70,0x83,0x5f,0x94,0x45,0x3d,0xe5,0xbd,0xb8,0x92,0x28,0x20,0xd5,0xa0,0x83,0xd2,0xe2,0x41,0x71,0x27,0x29,0x1b,0x2a,0x3a,0x08,0xca,0x75,0xec,0x16,0x4a,0xcf,0x39,0xed,0xbe,0x2a,0x26,0x9b,0xa3,0x26,0xc6,0x89,0xf2,0xc6,0x8d +.byte 0x49,0x3a,0xfe,0xda,0x16,0x54,0x55,0x7e,0x7f,0x65,0x65,0xd2,0x16,0xdd,0xe2,0xa3,0x86,0x7a,0x69,0x82,0x99,0x58,0x45,0x16,0x4c,0x69,0xff,0x72,0xf2,0xbc,0xbb,0xdd,0xe1,0xb4,0x56,0xcf,0xc0,0x84,0xd6,0x2c,0xd8,0xce,0xf4,0x67,0xd8,0x1d,0xb7,0x77,0x6d,0x96,0xf4,0x28,0x7a,0x33,0x03,0x97,0x72,0x37,0xd9,0x35,0xcf,0x20,0x28,0xc2 +.byte 0xc4,0xea,0xf9,0x99,0x89,0xe0,0xcc,0x3d,0xec,0x2c,0xbf,0x06,0x78,0x91,0x1b,0x55,0x1b,0x51,0x9b,0xbe,0xf7,0x4a,0xf8,0x9f,0x46,0xab,0xee,0x5d,0x4e,0x29,0x36,0xf3,0xb9,0xa7,0x85,0x9b,0xf7,0xa1,0x9e,0x2a,0xbb,0xb3,0x0a,0x61,0xb5,0x0f,0x79,0xf4,0xe2,0xd2,0x2c,0x15,0xf7,0x4f,0xca,0xa9,0x46,0x25,0x1c,0xdc,0xfa,0x0f,0x9e,0xfa +.byte 0xf5,0xb8,0x54,0x7a,0xe3,0x98,0x3c,0x3b,0x85,0xf8,0xb3,0x7c,0x70,0x40,0x86,0x2a,0x66,0xd1,0x4d,0x83,0x38,0xc2,0x24,0x8e,0x30,0xc0,0x9e,0x54,0x4c,0x7a,0x62,0x9a,0x55,0x8e,0x11,0x02,0xef,0x30,0x08,0x5c,0xf3,0x57,0xa7,0xbe,0x32,0x04,0xab,0xb1,0x3a,0x51,0x6e,0xcd,0x6f,0xc1,0xd8,0xd0,0x7d,0x4f,0x1b,0xa9,0x1e,0x12,0x92,0x94 +.byte 0xd7,0x40,0xa9,0x99,0x70,0x06,0xcb,0x46,0xa5,0xe0,0x77,0xbe,0x6d,0x48,0xab,0x67,0x4e,0xa7,0x0e,0xfe,0x1f,0x53,0x24,0xbc,0x89,0xcb,0x70,0xac,0x05,0xa2,0xf4,0xa3,0x44,0xde,0xcb,0x18,0x95,0x78,0x70,0x0f,0x69,0xf0,0x5e,0xbd,0xe7,0xfc,0xd3,0x17,0x3e,0x18,0xb0,0x2f,0xa6,0xfe,0x82,0x81,0xe7,0x74,0x44,0xfb,0x43,0x5e,0xda,0xf4 +.byte 0xfb,0xfe,0x5c,0xb4,0x3c,0x1d,0xea,0x0d,0x2d,0xdb,0xee,0x1f,0xc5,0xbd,0xb2,0xa0,0x52,0x76,0x9e,0xad,0xfa,0x19,0x37,0xb0,0x15,0x53,0x82,0x25,0x86,0xd9,0xce,0x99,0x84,0x67,0x5f,0x57,0xb2,0x6f,0x99,0xa4,0x56,0xb5,0x01,0x4f,0xdf,0xa2,0xca,0x8c,0x23,0x51,0xd3,0xc7,0x72,0x9b,0x90,0x72,0x29,0x0c,0xca,0x86,0xff,0xc3,0xd9,0x9e +.byte 0x87,0xe4,0x8d,0xc6,0xac,0xba,0xfb,0x73,0xa9,0xcd,0x5d,0x16,0xfc,0x12,0xea,0x30,0xd5,0x7d,0x7b,0x16,0xa6,0x2c,0xeb,0x3c,0x3e,0x46,0x7c,0xee,0x03,0xd6,0x7a,0xe8,0x88,0x1c,0x17,0xa9,0x08,0xe9,0xd5,0x38,0x59,0x54,0x0b,0xb0,0x77,0x1b,0x76,0x09,0x53,0xca,0x38,0x12,0xd1,0xb5,0x2c,0xe3,0xd6,0xa0,0xca,0x9f,0x65,0x56,0xea,0x95 +.byte 0xab,0xc1,0xf4,0x98,0xaf,0x1a,0xe7,0x2b,0x1e,0x8d,0x75,0x43,0x43,0x9f,0x42,0x5c,0x2c,0xa5,0xd7,0x9a,0xcd,0xc2,0xab,0xd9,0x1f,0x1f,0xde,0x8a,0x3e,0xf8,0x0f,0x56,0x8a,0x01,0xde,0x47,0x41,0xd8,0xa0,0xc8,0x32,0x4d,0xa3,0x75,0x80,0x87,0xb1,0x1e,0x05,0x06,0x5e,0x2c,0x9a,0x7b,0xd3,0x22,0xe0,0x53,0x8f,0x4f,0x35,0x5f,0x46,0x3a +.byte 0xb2,0xfe,0x62,0x44,0x54,0x38,0xe0,0x03,0x5e,0xda,0xcb,0x86,0xdf,0xda,0x67,0x66,0x40,0x27,0x97,0xf0,0xc2,0xbd,0xce,0xce,0x37,0xeb,0x47,0xe2,0x56,0x7e,0x54,0xe9,0x51,0xda,0xec,0xd5,0xe6,0xc1,0x69,0x6e,0x4c,0x3d,0x92,0xdc,0xa0,0x51,0xe2,0x2b,0xb8,0x96,0xb6,0xce,0xdf,0x35,0xdb,0xd0,0xd4,0x42,0xe3,0x94,0x89,0x09,0x1b,0xb4 +.byte 0xe2,0x8f,0xfb,0x23,0x62,0x35,0x56,0xc7,0x94,0x40,0xd7,0x2d,0xdb,0x80,0xc9,0xbd,0x4d,0xe3,0x14,0x30,0x44,0x43,0xad,0xeb,0x3d,0x89,0xe9,0x61,0xd7,0x80,0x15,0x59,0xcd,0xda,0x38,0x11,0x3b,0x84,0x14,0x85,0xef,0x55,0xf2,0x01,0x2c,0xed,0x74,0xf5,0x71,0x75,0x0c,0x52,0x0c,0x41,0x86,0xbe,0x84,0xc5,0x89,0x8b,0xa5,0x6d,0xc3,0xfa +.byte 0x2b,0xe5,0xe7,0xe8,0xdd,0xf9,0xe8,0x27,0x08,0x5d,0xdf,0x61,0xdc,0xb2,0xe0,0x8c,0xe8,0xda,0xa8,0x68,0x22,0x51,0x6b,0xdf,0xd0,0x92,0x87,0x6a,0x43,0xff,0xd1,0x9d,0x9a,0x4c,0x03,0xdf,0x3e,0xc1,0x31,0x33,0x6e,0x2a,0x55,0xc1,0x58,0x59,0x69,0x66,0x05,0xd1,0xa7,0xa1,0x3b,0x98,0x1d,0x44,0x74,0xc7,0x7e,0xc0,0x07,0xd9,0x9c,0x87 +.byte 0x5f,0xc3,0x44,0x25,0x7b,0x96,0xbc,0x20,0x5d,0x14,0x08,0x34,0xe9,0xad,0x34,0xa3,0xc3,0x95,0x1a,0xc1,0xd1,0x37,0x43,0x49,0x66,0xff,0x39,0x70,0x27,0xa0,0x2b,0x39,0x9d,0x1b,0x78,0x52,0x55,0x77,0x30,0xe8,0x72,0x65,0x8a,0xc8,0xa4,0xe6,0xb7,0xd6,0x66,0x82,0xa7,0x1d,0xde,0x3e,0xc2,0x23,0x5a,0x8b,0x51,0xe4,0x44,0x03,0xf3,0x89 +.byte 0x10,0xb0,0x9a,0x09,0x5d,0xe3,0xe9,0x4a,0x0b,0xe3,0x86,0x58,0xf8,0xe3,0x1a,0x3f,0x7f,0x42,0xa5,0xd7,0xb0,0x24,0xb7,0xbc,0x1d,0x40,0xe7,0x2f,0x42,0x8c,0xa8,0x3c,0x33,0xee,0x9f,0xaf,0xd1,0x51,0x8e,0x34,0x82,0xc5,0x16,0xef,0xb1,0xa6,0xa8,0x0e,0xae,0xe6,0xc3,0x2f,0xb3,0x06,0xd4,0x4c,0xec,0xee,0x9e,0xff,0x88,0x82,0x4b,0xb8 +.byte 0xc5,0xef,0x94,0xe2,0x68,0x48,0x23,0xa2,0xc8,0xe4,0xdb,0x33,0xf9,0xee,0x73,0xc2,0xe6,0xa1,0x64,0xf9,0xf6,0xab,0x5a,0xdc,0xa5,0xb3,0xd8,0xae,0xf4,0x1f,0x47,0xfe,0xa0,0xee,0xf5,0xee,0x41,0x30,0xa6,0xbe,0x34,0x2c,0x1a,0x24,0x8a,0x80,0xb1,0x79,0x7e,0x2c,0xc0,0x65,0x68,0x46,0xae,0x0a,0x01,0x77,0xce,0xa2,0x5f,0xc3,0x00,0x8f +.byte 0xd4,0x0f,0xbe,0xbf,0x81,0x20,0x4e,0xb8,0x21,0x5f,0xfa,0xb2,0xf2,0x02,0x83,0x41,0xa8,0xf1,0xe8,0x2c,0x7e,0x0e,0xe6,0xf0,0x6e,0xd5,0x7b,0xcb,0x4e,0xed,0x06,0xc4,0x18,0xfb,0x0e,0x0d,0x8e,0x22,0x8a,0x40,0x4d,0x66,0xa5,0x0c,0x74,0xf3,0x9e,0xd9,0x90,0xf8,0x71,0xe4,0x92,0x05,0x3d,0x2d,0xa0,0xed,0x42,0x88,0x18,0x9a,0xc7,0xe4 +.byte 0x41,0x5d,0xde,0x44,0x2e,0x26,0x30,0xfe,0x51,0xa8,0x91,0xa3,0xa6,0xfd,0x3e,0x04,0x7f,0x3a,0xa9,0x1c,0x21,0x98,0xab,0xaa,0x39,0x9d,0xe4,0x51,0x75,0xeb,0x90,0x6b,0xab,0x11,0x89,0xa9,0x22,0xa8,0xc5,0x92,0x16,0x51,0xe1,0x77,0x09,0x53,0x7f,0xb6,0x80,0x4b,0xf5,0xf5,0xa2,0x0e,0x36,0x24,0x7f,0xe7,0xcc,0x67,0xfb,0x2c,0x6e,0xc2 +.byte 0x16,0x47,0x41,0xc2,0x77,0xf4,0xcf,0x49,0x37,0x17,0x67,0x34,0x14,0x92,0x7d,0x0f,0x14,0xe8,0x4b,0x4c,0xc3,0xbb,0x78,0xf7,0xa0,0x59,0xbe,0x06,0x10,0x38,0xe6,0x2c,0x08,0x15,0xba,0xc6,0x49,0x38,0x9a,0x91,0x2b,0x4d,0x82,0x42,0x0e,0xe4,0x02,0xef,0x2b,0xa2,0x06,0xcc,0x3a,0x3c,0xb9,0xc5,0xb5,0x71,0x1e,0x17,0x5d,0x65,0x35,0x91 +.byte 0x89,0x54,0x97,0xa8,0x7b,0x02,0x24,0xf9,0xdb,0xb5,0x52,0xf7,0xd0,0xa0,0x42,0x48,0x01,0xf4,0x47,0x7c,0x84,0x7c,0x8a,0xb4,0xf4,0x30,0xec,0xb9,0x21,0x44,0x87,0xb2,0x96,0xa4,0x3b,0x0d,0x93,0x26,0x09,0xc8,0xfa,0x28,0x6f,0x09,0xb7,0x03,0x85,0x66,0x21,0x2d,0xf1,0xaa,0x3f,0x0b,0x59,0x15,0xfe,0x8b,0x2b,0xe0,0x81,0x38,0x63,0x70 +.byte 0x09,0x37,0x38,0x62,0x04,0x8e,0x3f,0x23,0x65,0xf8,0xf7,0xc0,0x30,0xb8,0x04,0xb4,0x17,0xd7,0x21,0xcc,0x8b,0x31,0xd3,0x7b,0x11,0xea,0xc5,0x51,0x01,0x93,0x5f,0xe3,0xf3,0x1e,0x0d,0x41,0x52,0x2a,0xfd,0x27,0x02,0x00,0x58,0x0d,0x1f,0x16,0xd7,0x50,0x09,0xea,0x3f,0x9f,0x72,0xae,0x7a,0x79,0x4b,0x69,0x61,0xfc,0xac,0x5c,0x4d,0x6a +.byte 0x65,0x5d,0xa5,0x67,0x76,0xe4,0x24,0x3f,0xa0,0x6f,0xf6,0x60,0xd2,0x70,0x8e,0x2e,0xbe,0xf9,0x8b,0xab,0x22,0xc8,0x9c,0x5b,0x26,0xc5,0x75,0xeb,0x96,0xa2,0x4f,0xdf,0x6c,0x05,0x9a,0x15,0xef,0xbf,0x3e,0x35,0x6d,0x8d,0x48,0xa4,0x33,0xc2,0xe8,0x3b,0x89,0xe4,0x0c,0xb2,0x9a,0xc6,0x89,0x52,0xba,0xc7,0x2a,0xa5,0xfb,0xe5,0xde,0x06 +.byte 0xbd,0xc3,0x4f,0xe8,0xa9,0x9d,0x36,0xa5,0xcc,0x90,0xcd,0x68,0x49,0x52,0x6e,0x9a,0x85,0xd4,0x1b,0xe5,0x3f,0x54,0xc8,0xb4,0x7a,0x76,0xbf,0xa8,0xf4,0x25,0x05,0xeb,0x43,0x0c,0x2b,0x1c,0x59,0x5b,0x51,0x7f,0xd5,0x13,0x54,0x37,0x44,0x37,0x2f,0x79,0x1c,0x1f,0x18,0x57,0x60,0xab,0xf7,0xcc,0x5d,0xd5,0xdd,0x69,0xab,0x7f,0xc7,0x9d +.byte 0x7f,0xd7,0x6a,0xdc,0x34,0x3d,0x6e,0x2c,0x1e,0xb8,0x74,0xef,0xec,0x14,0x83,0x98,0x20,0x85,0x8a,0x95,0x93,0x26,0xed,0xbb,0x7d,0xfe,0x63,0xaa,0x20,0xbb,0x40,0x7b,0x35,0x1d,0xe5,0x64,0xc0,0x64,0x83,0x90,0x59,0xb4,0xae,0xf7,0xfe,0x14,0xb2,0xaa,0x72,0xf7,0x34,0x61,0xe0,0x61,0x06,0xb3,0xdc,0x09,0x5f,0xe1,0x57,0x65,0x83,0x8a +.byte 0x6d,0x46,0x54,0x8f,0xbf,0x38,0x12,0xf5,0xa3,0xfc,0x7b,0x90,0x4f,0x30,0xed,0xc1,0xab,0xb2,0x6e,0xee,0x7c,0x5e,0x35,0x70,0x80,0xb0,0xae,0x93,0xdc,0x4e,0x8f,0x6c,0x37,0xef,0xc9,0x4c,0x3a,0x41,0x14,0x91,0x99,0x0d,0x48,0xbe,0x5e,0x9b,0xc5,0xa6,0x4d,0x07,0x0d,0xd5,0xe6,0x5d,0x26,0x6b,0xa0,0xf3,0xb2,0x28,0x15,0x57,0xdb,0x7b +.byte 0x8e,0x6b,0x88,0xc3,0x81,0xb6,0x16,0xd1,0x3c,0xd0,0x2d,0x5a,0x23,0x35,0x8e,0xb0,0x8b,0x5c,0x99,0x6a,0x7a,0x55,0xb1,0xf9,0x45,0x97,0x94,0x05,0x6e,0x58,0xd4,0x53,0x8d,0x73,0x43,0x02,0x68,0xdf,0x7c,0x37,0x1a,0x6b,0x71,0x04,0xa0,0x31,0x77,0xbc,0xe0,0x16,0x5a,0x2a,0x9a,0xb2,0x40,0xe4,0xbb,0xd0,0xfd,0x35,0xcb,0x7f,0xf4,0x13 +.byte 0x0f,0xb5,0x93,0x9a,0x7d,0x50,0xf8,0xfe,0x56,0x34,0x83,0x20,0xce,0x3d,0x02,0x2e,0x0b,0x95,0x76,0x88,0x47,0x8c,0x75,0x51,0x14,0x52,0x49,0xbc,0xed,0x66,0x0e,0x81,0x65,0x5e,0x64,0xfb,0x45,0x59,0x3d,0x2b,0xd6,0x3a,0xc6,0xfd,0x50,0xe4,0xeb,0x0c,0x68,0x38,0x0f,0xdd,0xa2,0xdc,0xaa,0x26,0xf5,0x7b,0x40,0x6a,0x90,0xf8,0x08,0x2c +.byte 0xe8,0x8f,0x8e,0xc1,0xf2,0x6b,0x87,0xeb,0x7a,0x02,0x9e,0x26,0x3e,0x6b,0xb9,0x71,0x2e,0x6f,0x26,0x20,0xa9,0xc0,0x7c,0xe5,0x6c,0x6b,0xd4,0xc4,0x7b,0x54,0x8e,0x4a,0x7a,0xef,0xfc,0x03,0x02,0x1d,0x6a,0x16,0x99,0x35,0x12,0x49,0xba,0x86,0x37,0x7a,0xb0,0x8d,0x58,0x6f,0x1c,0xba,0xa9,0x5d,0x93,0xdf,0x98,0x50,0x7e,0xea,0x0a,0x88 +.byte 0x1a,0xd4,0x63,0x91,0x23,0x43,0x43,0x17,0x2e,0xe6,0x04,0x95,0x96,0xa8,0x2b,0xb4,0x9e,0x91,0x6c,0x13,0x52,0x8c,0xbf,0x7d,0x50,0xfc,0x79,0xef,0xa1,0x3e,0x90,0xba,0xac,0xd1,0x0d,0xb0,0x4d,0xd5,0x7a,0xc7,0xbd,0x82,0xb7,0x03,0x9c,0x0b,0xbc,0xa7,0x3c,0x05,0x8f,0xbd,0x0d,0x7f,0x80,0xeb,0xe9,0xbd,0x8f,0xdc,0xcd,0x86,0x23,0x26 +.byte 0xb0,0xa4,0xdc,0x63,0xef,0xad,0x61,0x53,0x7e,0x23,0x34,0x0d,0xd9,0x75,0x7c,0xa7,0x57,0xba,0x28,0x0c,0x82,0x7f,0x68,0xe5,0x24,0xdc,0x23,0x99,0xcd,0x6f,0x03,0x59,0x4f,0x35,0x47,0xc4,0x11,0xc0,0x0c,0x2b,0x16,0x94,0xb8,0x28,0xf2,0x0a,0x91,0x2e,0x1c,0xde,0x75,0x50,0x52,0x00,0x0a,0x92,0x80,0xca,0x39,0x3a,0xdf,0x16,0xb7,0xe2 +.byte 0xbd,0x98,0x7b,0x70,0x48,0x85,0x6d,0x48,0xa0,0x1b,0x0a,0xbb,0xa8,0xb6,0xca,0x9c,0x4e,0xda,0x0a,0x17,0x0b,0x30,0xf5,0xa2,0x9b,0x5a,0x89,0xf4,0x53,0x89,0x38,0x34,0x2b,0x7d,0x14,0x04,0x44,0xa3,0x8f,0x70,0x29,0xa5,0x3e,0xdd,0x5a,0x61,0xa1,0x04,0xac,0xd8,0xd3,0xec,0x42,0xc4,0xd9,0x2c,0x13,0x80,0xf8,0xc9,0xec,0x54,0xa7,0xa0 +.byte 0xe6,0x37,0x04,0x38,0x5f,0x1e,0x0b,0xfb,0x38,0x06,0xb9,0xe2,0x05,0x12,0x12,0xa2,0x28,0xff,0x12,0xae,0x44,0xd8,0x0d,0x2c,0x5a,0x8f,0xfb,0x1d,0x98,0x69,0x85,0x69,0x99,0xc0,0x63,0xc5,0x88,0xa7,0x2d,0x56,0x76,0x32,0x23,0x4c,0xf7,0x29,0xd6,0x3e,0x45,0xfa,0xd7,0x61,0xf4,0x9a,0xa6,0x9e,0x4a,0xe7,0xe7,0xf9,0xbf,0x1f,0x09,0x82 +.byte 0xbe,0x36,0xa0,0xdd,0x91,0x47,0x3b,0xbc,0x52,0xf2,0xc2,0x04,0x96,0x85,0xb6,0x93,0xac,0x99,0x94,0xbe,0xfd,0xe6,0x53,0x9f,0x75,0xab,0x38,0xdd,0x81,0xc0,0x79,0x25,0xcd,0x73,0x72,0x5b,0x4d,0xc0,0xba,0xa9,0x18,0xaa,0x76,0x51,0x15,0xef,0xb9,0x22,0xdd,0x5f,0x22,0x62,0x6c,0x36,0xf6,0xc0,0x72,0x34,0x01,0x7a,0xaf,0xe2,0x87,0x1b +.byte 0x5f,0x33,0x9c,0xd5,0xe2,0x81,0x03,0xbe,0x4e,0xac,0xcc,0x17,0xc5,0xc6,0xf8,0x0f,0x24,0xe0,0x26,0x56,0x8a,0x20,0x2e,0xe4,0x05,0xc8,0x0f,0x89,0x24,0x0e,0xd4,0xb7,0x07,0xd1,0x99,0x8c,0x55,0xfd,0x75,0xc1,0xdb,0xaa,0xd1,0xd2,0xa6,0xf2,0xf0,0x3c,0xae,0x62,0x0e,0x1f,0xaa,0xc9,0xa5,0x16,0x09,0x2c,0xc0,0x61,0x55,0x72,0x70,0x63 +.byte 0x22,0xb6,0x41,0xa5,0x08,0x34,0x6a,0x1b,0xfc,0x42,0x81,0xe7,0x25,0x98,0xcf,0xba,0x18,0xb0,0x36,0x90,0x72,0x65,0x75,0xf3,0x57,0x68,0xd0,0x86,0xe4,0xaf,0x33,0xb6,0x2b,0xef,0x96,0x97,0x17,0x42,0x6b,0x8e,0x19,0xaa,0x4b,0x9d,0xc7,0x73,0x34,0x5f,0x41,0x24,0x12,0xfb,0x66,0xa2,0x1e,0x91,0x41,0xc2,0x78,0x08,0x66,0xc4,0xb2,0x86 +.byte 0x67,0x70,0xe6,0x96,0x76,0x8d,0xa4,0x69,0x6f,0xe5,0x35,0x8b,0x20,0x3d,0x6a,0xcb,0x65,0x7b,0x82,0x7b,0xf6,0x2d,0xd8,0xd0,0xda,0x69,0x8b,0xcd,0xdf,0x15,0xf6,0x3a,0x2c,0xfe,0xc7,0x84,0x20,0x11,0xcc,0x18,0x4f,0xc7,0x2e,0x1c,0x46,0x41,0x6b,0x91,0x79,0xa0,0xbb,0xf4,0x48,0xd7,0x0c,0x9a,0x88,0x01,0xda,0xa1,0xd1,0x8f,0x27,0x49 +.byte 0x9d,0xa0,0x3f,0x5a,0xc2,0xf7,0x26,0x9b,0xe5,0xff,0xa4,0xcb,0x86,0x32,0xb3,0x3c,0xd5,0xe5,0x7c,0xbb,0x5e,0xfe,0x3d,0xcf,0x60,0x1c,0x16,0x8e,0x0c,0xc4,0xa9,0xf2,0xb2,0x42,0x1d,0x13,0xb0,0xa8,0xff,0x90,0xbc,0xd9,0x9a,0x6d,0x78,0x7a,0x46,0x1a,0xa8,0x35,0x4e,0xa4,0x79,0xd5,0xb4,0x36,0x47,0x62,0x3c,0x0e,0x23,0x56,0xca,0xa2 +.byte 0x60,0xe6,0xca,0xf6,0xc3,0xd6,0x7c,0x5d,0x54,0x9c,0x0c,0xfa,0x9a,0x0f,0x3a,0x8c,0x64,0x52,0xdb,0x62,0x5e,0x93,0x82,0xef,0x9e,0x8d,0x30,0xa5,0xe7,0x3d,0x52,0x11,0xd4,0x93,0xb1,0x77,0x8f,0xee,0x54,0x9c,0x80,0x47,0xa9,0x21,0xa8,0xf7,0x16,0x4b,0xbb,0xab,0x75,0x52,0xed,0x0c,0x85,0xf8,0x04,0xf4,0x80,0x08,0x4a,0xb5,0x2d,0x2d +.byte 0xd8,0x98,0x57,0x24,0xd5,0xc8,0x77,0xa0,0xd8,0xb5,0xb1,0x83,0x92,0xb4,0xc7,0x42,0x36,0xd1,0xa5,0xd6,0xbd,0x89,0xc6,0x76,0x31,0x92,0x31,0x67,0x2c,0xa4,0xb2,0x2b,0xcf,0x94,0x20,0x6a,0x17,0x63,0xb9,0x76,0xac,0x9c,0x1c,0x95,0x3e,0x57,0xf8,0x87,0x0d,0xef,0x36,0xcd,0x87,0xd1,0x58,0x2c,0x9a,0x5e,0x54,0x0e,0xac,0x97,0xbd,0x15 +.byte 0xc4,0xdb,0xea,0xd3,0x21,0x05,0x2d,0x78,0xce,0x4c,0x60,0xf3,0xf8,0xeb,0xd9,0x19,0x89,0xb0,0x83,0xc0,0xe4,0x42,0x08,0x5c,0x1a,0x1c,0x53,0xf3,0x1e,0x5a,0x28,0x92,0x0d,0x32,0xbe,0x4a,0x9a,0x70,0x78,0x93,0xc1,0x66,0x81,0xda,0xe7,0x3d,0x05,0xc5,0xaa,0xdc,0x51,0x6b,0xaf,0x67,0x4d,0x18,0xfe,0x29,0xe0,0xfa,0x5c,0xe5,0x9a,0x18 +.byte 0x7f,0x8f,0xaa,0x21,0xa5,0xd0,0x8b,0x62,0x32,0x6b,0x93,0x02,0x19,0x62,0xd3,0xd6,0x74,0xea,0x83,0xdb,0x6c,0x57,0xe3,0x1f,0x1f,0x90,0xd0,0x22,0xf7,0x9a,0x4a,0x14,0xf4,0x8a,0xb3,0x86,0xa5,0x4c,0x1e,0xdf,0x49,0xa5,0x78,0x30,0x5e,0xf0,0x9a,0x69,0x0d,0xaa,0xe9,0x47,0x01,0xae,0x51,0xcf,0x32,0x4c,0xec,0x03,0x08,0xe7,0xcb,0x35 +.byte 0x59,0xd2,0x48,0xd4,0xfa,0x6a,0x45,0x6b,0x66,0x1f,0xb8,0x1e,0x45,0x85,0xef,0x14,0x25,0x34,0x48,0x50,0x59,0xf3,0x76,0x09,0x32,0xf5,0xe4,0xa8,0x98,0xb0,0x9a,0x70,0xec,0x0a,0x17,0x87,0xcf,0x6d,0x96,0x7d,0x50,0x5e,0x3a,0xff,0x57,0xa7,0xaf,0x04,0x0d,0xdc,0xcc,0xad,0xe3,0x09,0xd3,0x92,0xab,0xd8,0x3a,0x61,0x1f,0x9c,0xc4,0x36 +.byte 0x3b,0xf3,0xf6,0x87,0x43,0xea,0xc8,0xff,0x29,0x19,0x9e,0x87,0x44,0xc7,0xe5,0x5c,0x43,0x30,0x9a,0xb2,0xd8,0x47,0x4a,0x87,0xcc,0xc7,0x8e,0x99,0x32,0xdd,0x3c,0x37,0xda,0xa0,0x39,0x04,0x55,0xca,0xcf,0x2f,0xce,0x8b,0x22,0x35,0x2c,0x29,0x89,0xef,0x5c,0x05,0x82,0x55,0xf3,0x8d,0x64,0x7f,0x69,0xf7,0x3d,0x43,0x27,0xf3,0x4c,0xd7 +.byte 0x43,0x89,0x47,0xd5,0x0b,0x01,0x1b,0x17,0x6c,0x7e,0x63,0x18,0x87,0x8b,0x8f,0x20,0x0d,0xa4,0x1e,0xa5,0x3b,0xf1,0x5c,0xe5,0xc8,0x23,0xd4,0xee,0x79,0x3e,0xd1,0xbc,0x83,0x30,0x03,0x64,0x80,0x7e,0xda,0x13,0x7c,0x52,0x88,0xc1,0x7c,0xa7,0x8a,0x5d,0x8d,0x7b,0x57,0x4e,0x59,0x97,0x83,0x52,0x03,0x04,0x6b,0xd2,0xf3,0xff,0x1c,0x4e +.byte 0x3b,0xae,0x70,0x61,0x3b,0x8b,0xaf,0x56,0x3d,0x28,0x73,0x24,0x39,0x4b,0xb8,0x6e,0x89,0x28,0xe6,0xc8,0x5c,0xe9,0xf8,0xec,0x8f,0xf7,0x75,0x1a,0x13,0xc1,0x8e,0x53,0x4e,0xe5,0xef,0x37,0xce,0xa1,0x54,0xca,0xcc,0xf5,0x01,0x29,0x2a,0x8f,0x00,0x1c,0xde,0xcd,0x5e,0x24,0x0b,0xa5,0x94,0x0c,0x8a,0xab,0x54,0x1e,0x80,0x2a,0x0d,0x84 +.byte 0x38,0x4c,0x17,0xea,0x84,0x07,0x9c,0xbd,0x85,0xd8,0x1b,0x57,0x6a,0xde,0xb3,0x86,0xa3,0xf8,0x6d,0x03,0x3e,0xf1,0x37,0xae,0x7d,0x02,0x33,0xc5,0x7b,0xf6,0x64,0xdb,0x3e,0xb0,0x48,0xda,0x49,0xec,0x89,0xb4,0x83,0xff,0xe1,0x6f,0x9a,0x7e,0x0a,0xda,0x6e,0xec,0x70,0x0b,0x51,0xac,0x82,0xac,0xb8,0xce,0x16,0xe7,0x47,0xab,0xe8,0xc7 +.byte 0x56,0xd1,0xab,0x73,0x72,0x5c,0xe7,0x9e,0xb8,0x77,0xa7,0xc1,0x47,0x9c,0x4e,0x16,0x68,0xce,0x21,0x23,0x2d,0x6c,0xcf,0x79,0xd6,0xd4,0xdf,0x74,0x30,0xb8,0x0f,0x60,0xea,0xbf,0x39,0x77,0x45,0xdc,0xaf,0x25,0xbd,0xc5,0x8d,0x0b,0x44,0x21,0xc1,0xc1,0x2e,0x54,0x2a,0x32,0x6c,0xea,0x51,0xe0,0x7d,0xa8,0x09,0x94,0x2f,0x4e,0xfe,0x27 +.byte 0xe8,0x63,0xfb,0x71,0xca,0x01,0x7d,0xc9,0x70,0xd8,0xe4,0x82,0xbf,0x3f,0xea,0x64,0x5e,0xa9,0x84,0x1d,0x2c,0xfd,0x8a,0x7d,0x33,0x73,0x5c,0x82,0xbe,0x9e,0x46,0xfc,0x39,0x5e,0x38,0x2a,0x20,0xd9,0xa9,0x20,0x46,0x23,0xc1,0x8b,0x0a,0x9c,0x42,0xb6,0x50,0x9f,0xc8,0x7d,0x4a,0x85,0x98,0xed,0x92,0x13,0xd3,0xd6,0xe6,0x6d,0x50,0x6e +.byte 0x93,0x63,0x41,0xa3,0x63,0x97,0x52,0xe3,0xaf,0x09,0xe1,0x40,0x12,0x41,0xed,0xb3,0xc5,0xb8,0x9f,0xc1,0xf2,0xd2,0xe6,0x16,0x94,0x97,0xdb,0xae,0xdb,0xd4,0x1f,0x5a,0x2f,0xf1,0xb1,0x22,0xf6,0x60,0xa4,0x0e,0xd8,0x2f,0xf7,0xf7,0x3f,0x6c,0x7d,0x73,0xe3,0x1d,0x99,0x04,0x7f,0x4f,0x70,0x2a,0x8c,0x43,0x80,0xa3,0xd0,0x25,0x75,0xd8 +.byte 0xb6,0xc8,0x90,0xa2,0x26,0xee,0xba,0xc5,0x1a,0xdc,0x1f,0x81,0x65,0x54,0xc6,0x57,0x6e,0xa2,0x03,0x32,0xf5,0x14,0xb2,0xdd,0x4d,0x21,0xaa,0xb9,0x78,0x4f,0x76,0xab,0xbe,0xfe,0x5d,0xc6,0xaf,0xed,0x6f,0xf9,0xaa,0x31,0x21,0x08,0xa4,0x6e,0xfb,0x78,0xdc,0xed,0x0c,0x05,0xff,0x1e,0x60,0x38,0x60,0x94,0xa9,0x92,0xa7,0x07,0x6e,0x6f +.byte 0x6d,0x89,0x8a,0x73,0xfb,0xaf,0x01,0x34,0x7d,0x7d,0x33,0x76,0xff,0x1f,0x6b,0x79,0x5e,0xff,0x50,0x14,0x80,0x7d,0x55,0x0e,0x2d,0xc3,0x77,0x85,0x30,0x20,0xf6,0xc8,0xc7,0xb7,0x73,0x1b,0xd1,0x87,0x69,0x44,0xeb,0x02,0x5e,0x45,0x66,0x6f,0x28,0x00,0x1f,0xf8,0x58,0x93,0xe5,0x21,0xbc,0x19,0x8d,0x72,0x19,0xaa,0x9a,0xbb,0xc6,0x47 +.byte 0xe6,0x0b,0xe4,0x76,0x13,0xc7,0xc4,0x1b,0x9d,0x85,0xba,0x17,0xb6,0x30,0x2a,0xdb,0x7c,0x36,0xd7,0xd8,0x8b,0x9c,0x99,0x92,0x64,0x03,0x4f,0xd4,0x1f,0x04,0x2e,0x45,0x34,0x55,0x92,0x99,0x77,0xb8,0x45,0xce,0x59,0x22,0x3c,0x6e,0xe5,0x18,0xb0,0x83,0x42,0x42,0x75,0x1c,0x34,0x0f,0x2e,0x59,0x06,0x94,0x17,0xea,0xc3,0xdb,0x0b,0x2f +.byte 0x44,0x97,0x54,0xe8,0x76,0xd3,0x25,0x24,0xe9,0x21,0x4f,0xd7,0x01,0x7d,0xbe,0x90,0x8a,0x0a,0x7d,0x4e,0x91,0x5f,0x4c,0x32,0x83,0x42,0x55,0x95,0x3c,0x7a,0x3e,0x46,0x8a,0x5d,0x0c,0x05,0xcd,0x0b,0xf6,0x3e,0x4d,0xf3,0x55,0xea,0x42,0x3e,0x19,0x0e,0xda,0xd4,0x22,0x88,0xe2,0x29,0x06,0x9e,0xea,0x1c,0x27,0x96,0x7f,0x3a,0x8a,0x28 +.byte 0x2f,0x7d,0xa2,0x65,0x37,0xae,0xb6,0x6a,0x59,0x41,0x19,0x73,0x91,0x64,0x77,0x4e,0x5a,0x1a,0x85,0x9f,0xc5,0xb0,0x85,0xc1,0x96,0x47,0x69,0x9c,0x36,0x70,0x36,0xa3,0x2e,0x1a,0x7d,0x11,0x59,0x55,0xec,0x4c,0x49,0xa1,0x86,0x3c,0x3d,0x24,0xb8,0x7a,0x84,0xca,0x4c,0x3f,0x7e,0x81,0x95,0x39,0x41,0xfe,0xc4,0x74,0xe5,0x89,0x7e,0xdc +.byte 0x86,0xd2,0xdb,0x8b,0xb8,0xa2,0xbb,0x15,0x64,0x89,0xf9,0x00,0x7d,0x56,0xec,0x8b,0xc8,0x05,0xcd,0x76,0x6c,0xcb,0xaf,0x7e,0xd2,0xdd,0x67,0xb3,0x99,0x16,0x63,0xf2,0x6d,0x49,0x7d,0xeb,0x67,0x24,0x98,0xf1,0x28,0xa3,0xb2,0x14,0xfc,0x95,0xf6,0x55,0xa0,0xb5,0x8c,0x26,0x2f,0xc6,0x08,0x49,0x57,0x4c,0x20,0xbc,0x48,0xab,0x24,0xef +.byte 0xe9,0xab,0x6b,0x77,0x4d,0x3b,0x61,0x84,0x68,0x67,0x72,0xc2,0xcf,0xab,0x8e,0xac,0x39,0xec,0x43,0x03,0xbb,0x4f,0x32,0x7d,0x7d,0x51,0x69,0x30,0xee,0x4f,0xd0,0xb9,0xa5,0x22,0xdd,0x47,0x06,0xad,0xac,0x62,0x20,0xff,0x7b,0x8c,0x90,0x91,0xb3,0xd8,0x89,0xd3,0xea,0x81,0xdc,0xca,0x31,0xc3,0x65,0xca,0x4c,0x50,0x0a,0x85,0xf7,0xaf +.byte 0xe3,0x67,0x57,0x53,0x1d,0x4e,0x42,0x17,0x2d,0x14,0x80,0x29,0x09,0x2b,0x48,0x45,0x43,0xb9,0xad,0x1f,0xb7,0x2d,0xab,0xfa,0x6a,0x1b,0x3c,0x7d,0x76,0xd7,0x36,0x20,0xb0,0xd3,0xc0,0x5e,0xc7,0x20,0x06,0x0c,0xa9,0x6a,0xb2,0x67,0xad,0x91,0x49,0xfc,0x4d,0xb2,0x15,0x61,0x61,0xfa,0x33,0x6c,0x94,0x92,0x58,0xef,0x46,0x82,0x9c,0x04 +.byte 0x52,0x21,0x28,0x08,0xb4,0xa9,0xd4,0x2e,0xd9,0x8c,0x93,0xd0,0xd8,0x4f,0x33,0x1d,0x0b,0x7e,0x07,0x12,0x40,0x64,0x3d,0xa2,0x8f,0xa3,0x96,0x45,0x0e,0xfc,0x9b,0x55,0x5f,0x3c,0xa2,0x57,0x3e,0x51,0x40,0x69,0xdc,0x7a,0x51,0xd2,0x3b,0x79,0x2f,0xd2,0x01,0x18,0xbf,0xd5,0xd2,0xd1,0x0e,0x08,0xcf,0xac,0x07,0x4d,0xd1,0x92,0xc7,0xca +.byte 0x92,0x75,0x0b,0x80,0x29,0xf1,0x46,0x24,0xba,0x47,0x6b,0x4a,0x64,0xfb,0x31,0x69,0xe9,0x40,0x0d,0x69,0x50,0xd0,0xdf,0xf8,0xcb,0x6a,0xe8,0xd4,0xc2,0xbd,0x0b,0x23,0x00,0xe0,0x29,0x0a,0x0a,0x8e,0x19,0xec,0xa9,0x14,0xe4,0x5d,0x4c,0x30,0xc9,0x85,0x42,0xd6,0x9f,0x83,0x8f,0x2a,0x5b,0x22,0x37,0xe4,0x71,0x3b,0x19,0x86,0xd4,0xda +.byte 0xb5,0x81,0x8e,0x84,0x57,0xcd,0x13,0x64,0xc3,0x23,0xfd,0x91,0x8a,0xe4,0xb9,0x32,0x12,0x17,0x02,0xa6,0x8d,0xec,0x44,0x9d,0xa5,0x7c,0x96,0x14,0xd1,0xd5,0x93,0x02,0x0c,0x9d,0xfc,0x26,0xa0,0xd2,0x41,0xaa,0x75,0xe8,0x82,0x6f,0x47,0x1d,0xe8,0xcf,0x94,0xe3,0x35,0xa9,0x76,0x1e,0xdb,0x92,0x5f,0x32,0x49,0xf4,0xd5,0x59,0x9c,0x4e +.byte 0xf7,0x89,0xda,0x23,0x7f,0x46,0x0e,0xfc,0xaf,0x1c,0x6f,0xcc,0x59,0xa5,0x43,0x04,0xbf,0x55,0xab,0x7d,0x36,0xa3,0xa5,0x03,0x7f,0xdf,0x33,0x6c,0x6d,0xd0,0x53,0xaa,0xef,0x54,0xc1,0x62,0xa0,0xd6,0x3a,0x67,0x87,0xe3,0x76,0x17,0x45,0xbe,0x7f,0x55,0xc8,0x8b,0xe8,0x1c,0xa8,0xe6,0xa6,0xb2,0xbf,0xe5,0x45,0xc0,0x88,0x22,0x36,0xa0 +.byte 0xec,0x21,0xdc,0x3e,0x6b,0xd2,0xc7,0xdf,0x5b,0xa4,0x32,0x28,0xca,0x23,0xe1,0x50,0x55,0x72,0x59,0x28,0x1c,0xf7,0x93,0x91,0x07,0x3c,0x4e,0x81,0x20,0x58,0x9b,0x07,0x38,0x37,0x68,0x2c,0x29,0xba,0x20,0x11,0xa9,0xa0,0x29,0x65,0x57,0xb1,0xe3,0xb1,0xfb,0xe2,0x70,0xee,0x1f,0xcd,0xf5,0x61,0xea,0x7a,0x08,0xb4,0x1e,0xfe,0xe7,0x4d +.byte 0x32,0xa0,0xfd,0xb4,0x52,0xa1,0x4b,0x67,0xba,0x5e,0x90,0xe7,0x56,0xec,0x06,0x03,0xb6,0xe6,0xc6,0x98,0xa1,0x41,0xf4,0xaf,0xde,0xe2,0x67,0xef,0xaa,0x05,0x97,0xc5,0x80,0x32,0xd0,0x43,0xc2,0x02,0x7a,0xcc,0x4c,0xdd,0xe9,0x1e,0xd0,0x4f,0xad,0xf3,0x4b,0x2c,0x5e,0xb8,0xd8,0x84,0xc2,0x43,0xc7,0xa9,0x86,0x4d,0x10,0xae,0xb7,0xe3 +.byte 0x5c,0xd5,0x2a,0xba,0x3b,0xd3,0x7b,0x5d,0xc8,0xe0,0x67,0x87,0xbe,0xbf,0x71,0x4e,0x22,0x68,0x12,0x53,0x95,0x73,0x5c,0x30,0x7b,0x2b,0xfd,0xc1,0x3c,0xfc,0xc4,0x0f,0xdd,0x5b,0x3e,0x1b,0x72,0x71,0xa6,0xe3,0x1f,0x2d,0x51,0xe2,0x61,0x3d,0xa0,0x60,0xc2,0x6b,0x41,0x8f,0x94,0x83,0x29,0xa3,0xb6,0xa7,0xc7,0x11,0x8f,0x1c,0xb5,0x19 +.byte 0x66,0x44,0xc7,0x05,0x58,0x83,0x28,0x69,0x0c,0xb6,0x65,0xe5,0x93,0x1c,0xb1,0xf6,0xf9,0xea,0xda,0x84,0x26,0x8e,0xa2,0xbb,0x9b,0x55,0xd3,0xbc,0x42,0x56,0x8f,0xce,0x6e,0x74,0x40,0xf2,0x02,0xa6,0x22,0x22,0x6e,0x20,0x0e,0x4b,0x8b,0x15,0xa5,0x04,0xf0,0xe0,0x7b,0x27,0x0a,0x38,0xe3,0x99,0x04,0xd0,0x5b,0x64,0xd2,0x04,0x92,0x61 +.byte 0x57,0x74,0xbc,0x1e,0x98,0x01,0x4b,0x2f,0x46,0x56,0x1c,0xeb,0x49,0x2d,0x66,0xac,0x85,0x96,0x48,0xfd,0xa1,0xf0,0xf5,0xc0,0xdb,0x7a,0xf2,0x0b,0x57,0x86,0xac,0x4c,0x6a,0x02,0x97,0x13,0xef,0x08,0xf6,0x18,0xe1,0x5c,0xb3,0x18,0x3d,0x70,0xc0,0x76,0x5e,0xd0,0xb8,0x44,0x32,0x25,0x75,0x62,0xa2,0x80,0x78,0x8c,0xc4,0x2a,0x84,0xbc +.byte 0x51,0xd4,0xee,0x44,0x48,0xe5,0xc4,0x48,0xbf,0xc0,0x27,0xc1,0x77,0x25,0xf5,0x59,0x6b,0x60,0xae,0xa5,0x42,0xfe,0xc3,0x06,0x91,0xe3,0xdb,0xa9,0x4b,0xe2,0x73,0x95,0x1f,0xf6,0xb6,0x66,0x71,0x63,0xb3,0x14,0x4a,0x3d,0x36,0x84,0xbe,0x2a,0x7c,0x7c,0xba,0x0e,0x8d,0x9a,0x73,0x52,0x21,0x89,0x02,0x8f,0x94,0xa5,0x9a,0x11,0x2e,0x6e +.byte 0x78,0xf7,0x07,0xf8,0xb1,0x42,0x96,0x06,0x78,0xf0,0x53,0x86,0xec,0x2b,0x1f,0xa7,0x84,0x79,0x37,0xc7,0x61,0x83,0x8e,0x62,0x65,0x49,0xdd,0xfe,0xee,0x97,0x70,0xa2,0x73,0xb5,0x85,0xaf,0x10,0xed,0xb8,0x74,0xec,0x42,0xd0,0x14,0x47,0xa6,0x90,0x7c,0x07,0x22,0xb4,0x4e,0xfc,0x12,0xa1,0x9d,0xd4,0x73,0x8f,0x6a,0x55,0xf8,0x56,0x25 +.byte 0xdb,0x9b,0xe8,0x10,0x87,0x7a,0x4b,0x42,0x9c,0xbb,0x6e,0xf1,0xd7,0x1d,0xf4,0x07,0x31,0x9c,0x94,0x3a,0xb6,0xad,0x4b,0xf4,0x57,0x3d,0x2f,0xba,0x23,0x36,0x34,0x52,0x62,0xf7,0x64,0xc7,0x47,0xeb,0x41,0xad,0x07,0xfb,0x3e,0x08,0x74,0x92,0x58,0x0f,0x73,0xe2,0x53,0x35,0xda,0xae,0x64,0x3c,0x47,0x89,0xaf,0xce,0x59,0x35,0x75,0x8b +.byte 0x50,0xee,0xbf,0xbe,0xd1,0xf4,0x2f,0x11,0xa3,0xfe,0xce,0xfd,0x15,0x0d,0x32,0x17,0x00,0xfb,0xad,0x02,0x70,0x5c,0xeb,0x59,0xfb,0x87,0xe5,0xed,0x0e,0xde,0x97,0xe7,0x75,0xb6,0xdc,0xe9,0xb0,0x08,0x26,0x0e,0x11,0xd4,0x4f,0xc4,0x92,0x71,0x7c,0x63,0xef,0xc0,0x14,0x64,0xe1,0x0f,0x7e,0xe6,0xcb,0x5b,0x4c,0xd4,0x16,0x8b,0x7b,0x8b +.byte 0x2f,0x2a,0x77,0xef,0xd3,0xdf,0x56,0xc0,0x5a,0x94,0x72,0xd5,0x36,0x12,0xfa,0x25,0xd7,0x77,0x52,0xdd,0xea,0x11,0x2f,0x6b,0x16,0x6e,0xe3,0xa2,0x84,0xba,0x55,0xc2,0xb0,0xe2,0x3b,0x53,0xb6,0xa4,0xc6,0xa5,0x3f,0x1b,0xb3,0x38,0xc0,0x2f,0x1a,0x80,0xe0,0xa4,0x60,0x49,0x8c,0xe3,0x23,0x5f,0x59,0xfd,0x2a,0x0f,0xe8,0x4c,0xaf,0xd7 +.byte 0x36,0xc7,0x25,0x21,0xad,0x41,0x54,0x27,0x95,0x15,0x42,0xbc,0xb3,0x77,0x4e,0x97,0xf4,0x3c,0x54,0xcc,0x19,0x63,0x62,0x67,0x97,0x5a,0xd0,0x59,0xfb,0xce,0xcd,0xe1,0x3c,0xb6,0xc9,0x49,0xc4,0xff,0xde,0xf9,0x89,0x87,0x9c,0xdf,0x4e,0x8c,0x9d,0xe5,0xbd,0x0d,0x0c,0x6e,0x93,0xfd,0xea,0x90,0xf2,0x80,0x7e,0x00,0x9a,0x06,0x02,0x87 +.byte 0xae,0xca,0xf4,0x46,0xbb,0xb5,0x52,0xee,0x18,0xb0,0xf1,0x61,0xcb,0xe1,0x65,0x9c,0x0b,0xfb,0xe6,0x3b,0xeb,0x3a,0x1a,0x22,0x41,0x0b,0x99,0xa4,0x8e,0x01,0x5e,0x7c,0x4e,0x1a,0xaa,0xab,0xd3,0x8b,0x99,0x7f,0xba,0x6b,0xec,0xe7,0x3a,0xd6,0x55,0x46,0x20,0x1b,0x10,0x39,0x06,0xcc,0x90,0xc1,0x6a,0xa5,0x27,0x7c,0xca,0xa5,0x58,0x07 +.byte 0xd7,0xaf,0x6d,0x12,0xa6,0x68,0xc7,0x0e,0x19,0x53,0x44,0x22,0x85,0xbb,0x72,0x9c,0x4d,0xfb,0xeb,0x94,0x3a,0xa0,0x64,0xf5,0x25,0xe8,0xee,0x7a,0x3b,0x71,0x0e,0xbb,0x40,0xa2,0xb3,0xc9,0x6b,0x14,0x0f,0xc3,0x75,0xac,0x1b,0x5c,0xf1,0x34,0x51,0xcb,0xeb,0x5f,0x40,0x0f,0x82,0xe9,0xd2,0x6d,0x95,0x88,0x84,0xea,0xe9,0xe3,0xa0,0xe9 +.byte 0xef,0x3b,0x33,0xfe,0x32,0x52,0x93,0xce,0x95,0x4b,0x64,0x3c,0x97,0x76,0x91,0xd8,0xce,0xb5,0xc2,0xda,0x58,0x23,0x27,0xe2,0x3d,0xbe,0xf6,0x31,0x79,0x73,0x0e,0x31,0xd7,0xa3,0xaa,0xac,0xcf,0x31,0x1e,0x75,0x58,0x14,0x21,0x52,0x1c,0x3e,0x4f,0x2a,0x2b,0x9a,0x22,0xbc,0x42,0x68,0x5b,0x83,0xc2,0x8c,0xd4,0xe8,0xd9,0x02,0x0d,0x13 +.byte 0x2f,0x08,0xd3,0x11,0xb7,0x4b,0x84,0x67,0x43,0xda,0x20,0xdb,0x89,0xd5,0x9e,0x14,0x54,0x3d,0x49,0xda,0xac,0x3f,0x8f,0xf5,0x17,0xfe,0xb8,0x5f,0xc3,0x20,0x38,0x27,0x21,0x32,0xbf,0xf3,0x9b,0x2c,0x0b,0x9b,0xeb,0x64,0x87,0xf7,0x9d,0xed,0x15,0x05,0x21,0x69,0xcf,0x2d,0xf8,0xfb,0xf2,0x81,0x51,0x08,0xc7,0x18,0x81,0xdf,0xed,0xa4 +.byte 0x70,0xb3,0x07,0xfa,0x00,0xd5,0x65,0xb9,0x5a,0x82,0x67,0x6f,0x10,0xfc,0x46,0x05,0x9a,0x85,0x64,0x14,0x60,0x64,0x4d,0x1f,0x13,0x57,0xbb,0x7c,0x4a,0x10,0x84,0x8c,0x57,0x36,0x13,0x22,0x00,0x04,0x2d,0xcf,0x27,0x3d,0xf4,0x27,0x3e,0x32,0xb3,0x87,0xda,0x82,0xaa,0xad,0xd7,0xa7,0xc5,0x3c,0x45,0xec,0x28,0x82,0x79,0x95,0x8f,0x56 +.byte 0x50,0x5f,0xc2,0x15,0xab,0x18,0x58,0x4f,0x69,0x46,0xce,0x29,0x33,0x42,0x53,0xe9,0xea,0xe5,0xa8,0x5b,0x90,0xc4,0xf4,0xbf,0x8a,0x20,0x62,0xad,0xa5,0xea,0x6a,0x4e,0xb4,0x20,0x2d,0xca,0x90,0xdf,0xbd,0xab,0x5b,0xc3,0x33,0x7c,0x53,0x1f,0xf5,0x2e,0xc0,0xbf,0x19,0xe1,0xa1,0x5a,0x63,0xf3,0x13,0x4d,0x6e,0xef,0x4f,0x3a,0x94,0x18 +.byte 0xbe,0x79,0xdb,0xbf,0xc2,0x2c,0xb3,0x36,0x59,0xab,0x21,0x1d,0x98,0x60,0x70,0xdd,0x95,0x51,0x19,0x07,0xd6,0x68,0x0e,0x2a,0xd4,0x4c,0x30,0x18,0x1c,0xe4,0xe1,0x89,0x15,0x25,0xea,0x27,0xcf,0x51,0x56,0xc9,0xa9,0xa7,0x31,0x08,0x17,0xfb,0xfc,0xf6,0x0c,0x5d,0xf1,0x7c,0x36,0xcb,0xad,0xef,0x29,0xf5,0x2e,0x23,0x09,0xcf,0x31,0x6f +.byte 0x74,0x12,0xd2,0xc2,0xc7,0x19,0xa5,0x6e,0x20,0x09,0x67,0xdc,0x41,0x69,0xbe,0x15,0xd6,0xeb,0x7b,0xba,0x63,0xae,0x65,0xd8,0x67,0xec,0x6e,0xcc,0x1d,0x04,0x08,0xfb,0x7c,0x34,0x1d,0x5f,0x1e,0x51,0x1c,0x30,0x72,0xd3,0x0c,0x48,0x60,0x3d,0x52,0xae,0xe6,0x78,0x44,0x6d,0xb8,0x40,0x08,0xb7,0x7a,0xa9,0xfc,0xa0,0x86,0xff,0x32,0xd6 +.byte 0x5a,0x31,0x4e,0xe2,0x65,0xab,0xb0,0x84,0xb6,0x74,0x3e,0xa6,0x67,0x7c,0xa2,0x0f,0x23,0x22,0xab,0x72,0x7e,0xeb,0x45,0xa9,0x2a,0xb4,0xd3,0xcc,0x27,0x5c,0x12,0xdb,0x14,0x68,0x73,0x0f,0x36,0xbf,0x9f,0x14,0x12,0xe9,0xef,0x04,0x2a,0x63,0x41,0x4b,0x04,0x9b,0x4c,0xc4,0xb2,0xb9,0x1c,0xc0,0xb8,0xcc,0x23,0x61,0xc4,0xed,0x27,0x1e +.byte 0x1d,0x97,0x3d,0x40,0x4c,0x1f,0xeb,0x6e,0xc4,0xfb,0x5c,0x2d,0xf5,0xf1,0xbb,0x05,0x47,0xa2,0x1a,0x9c,0x2b,0x8f,0xce,0x98,0x09,0x6b,0x86,0x22,0xf8,0x3a,0xae,0xf3,0xb4,0x66,0x2f,0xdb,0x20,0xa5,0xc6,0xb6,0x35,0xb5,0x5a,0x68,0xb5,0x37,0x2c,0xab,0x13,0x3d,0x2d,0xcb,0x38,0xed,0x3c,0x7a,0x1f,0x26,0x08,0x58,0x94,0x52,0x30,0xec +.byte 0x06,0x9f,0x90,0x97,0x4d,0x90,0x49,0x23,0xaf,0x00,0x90,0x6b,0x96,0x37,0x02,0x4c,0x35,0xc0,0x3e,0x66,0x2c,0x52,0xbc,0x75,0x28,0xd7,0x8f,0x25,0xbe,0x91,0x10,0x22,0x67,0xbf,0x4a,0x4d,0x62,0xc4,0xe9,0xda,0xe2,0x79,0xcc,0x76,0xeb,0x99,0x87,0xac,0x39,0x7d,0xf6,0x5a,0x37,0x85,0x30,0x33,0x65,0x3f,0xd9,0xd6,0x17,0xf8,0xf0,0x86 +.byte 0xee,0x5c,0x2f,0xb0,0xb3,0x4f,0x83,0x6c,0x4a,0x8f,0xfc,0x80,0x91,0xaf,0x4b,0x21,0x9c,0x9b,0x44,0x3c,0xed,0x67,0xfb,0xa3,0x31,0x7f,0xd4,0x73,0x72,0xb9,0xc1,0x31,0x96,0x47,0x8e,0x99,0x8e,0x62,0x1a,0xfd,0xc7,0x9d,0x2f,0x4c,0xda,0xe5,0xae,0x17,0xb6,0x40,0x5f,0x9e,0xa8,0xf2,0xcc,0xd7,0xd5,0x40,0x33,0x88,0x57,0x63,0x9b,0xde +.byte 0x82,0x71,0x68,0xfe,0xaf,0x29,0x6c,0xc1,0x2c,0x2f,0x02,0x42,0xd7,0xa5,0x28,0x05,0xca,0xa0,0xb6,0x8c,0x43,0x90,0x05,0xe2,0x1c,0xb7,0x76,0x79,0x39,0xd3,0x23,0xe1,0xe7,0xbb,0x19,0x65,0x1a,0xb4,0xbb,0x5a,0xcf,0x43,0x70,0x26,0x1a,0x2f,0x61,0x78,0x75,0x08,0xb0,0x88,0xe5,0x4a,0x46,0x0a,0xfc,0xcb,0x46,0x18,0xb0,0x8d,0x9b,0xeb +.byte 0xf5,0xe1,0x83,0x04,0x84,0x4f,0xd6,0xa0,0x4f,0xb2,0x4c,0x44,0x08,0xde,0xd6,0x82,0xb5,0x9a,0x45,0x15,0xb8,0x21,0xc7,0xf5,0xe2,0xfd,0x02,0x27,0x18,0x13,0x24,0x18,0x01,0xd1,0x2a,0xff,0x63,0xf2,0xa4,0x97,0xc8,0x4b,0x3b,0xae,0x49,0x47,0x54,0xe8,0x75,0xe7,0x16,0x77,0x22,0x10,0x7b,0x3c,0xf0,0xdb,0x49,0x6e,0xd6,0x55,0x9d,0x43 +.byte 0x6f,0x6e,0x2d,0x97,0xea,0x16,0x2e,0x0c,0x85,0x89,0x67,0xe1,0x7b,0x38,0xa6,0x2b,0x89,0xf0,0xcd,0x90,0xcd,0xba,0x9a,0x70,0xa9,0xe3,0xff,0xe0,0xbd,0x15,0x3e,0x4b,0x13,0x62,0x7b,0x59,0x64,0x18,0x96,0xe9,0x6a,0xf3,0x69,0x2d,0x2d,0x25,0xe7,0x91,0xd3,0xbc,0x74,0x58,0x66,0x2f,0x5e,0x8b,0x52,0xf6,0x91,0x24,0xa8,0x6f,0xa5,0xce +.byte 0xa1,0x4e,0x3b,0xe9,0xc5,0x30,0x7e,0xa5,0xc7,0xe2,0xb3,0x71,0x3b,0x25,0xb9,0x5f,0xe5,0x9c,0xf8,0x46,0x23,0xc5,0xa2,0xc1,0x1f,0x3f,0x43,0xa6,0xaa,0xf1,0x36,0x27,0xc6,0xa8,0xed,0x0d,0x50,0x71,0xf1,0x38,0x27,0xb7,0x16,0x43,0x7c,0x7f,0x77,0x5b,0x25,0x59,0xb7,0x08,0x0d,0xc8,0x84,0xe4,0xc2,0x03,0x95,0xe5,0xf3,0x0a,0x9c,0x1f +.byte 0xde,0x98,0x7c,0xa9,0xe2,0x70,0x9e,0xde,0xf6,0x80,0xd0,0xf8,0x86,0x4a,0x7a,0x0d,0x16,0xaa,0xde,0xba,0x02,0x30,0x8a,0xe6,0x03,0x0f,0xa1,0xf1,0xe8,0xd6,0xf8,0xce,0x7b,0xba,0x74,0xa8,0x25,0xb0,0x49,0x22,0xa6,0x81,0x7e,0x71,0xc5,0x97,0x9e,0xa8,0x46,0xa7,0xe9,0x8b,0x7c,0x7c,0x4c,0xc5,0x3c,0x93,0x08,0xb9,0x8b,0x3c,0x33,0xd6 +.byte 0xc4,0x37,0xc8,0x05,0xe7,0xfe,0xc2,0x7c,0x02,0xe6,0xda,0x09,0x52,0x2c,0xc6,0xa8,0x6e,0x44,0x7e,0x55,0xf0,0x32,0x10,0xcb,0x1e,0xa7,0x77,0x8d,0xc7,0xfe,0xb5,0xf6,0x3b,0x49,0xf2,0xfb,0xe0,0x41,0x98,0xd3,0x17,0xa6,0x5d,0x3f,0x4c,0x95,0xb0,0x02,0x8d,0xab,0x36,0xb7,0xa0,0x92,0x40,0x5e,0x15,0xfb,0xa9,0xb4,0xa3,0x04,0x8b,0x6b +.byte 0x81,0x44,0x59,0x22,0x10,0xcb,0xc5,0x52,0x3f,0x78,0x70,0x00,0xe2,0xa2,0xf7,0x76,0x62,0x72,0x06,0x8b,0xbb,0x56,0x0f,0x8c,0x67,0x2f,0x52,0x3f,0x3b,0xdc,0x15,0x79,0x55,0x89,0x6c,0x61,0x23,0xcc,0x6b,0x41,0x77,0xe5,0xc4,0x90,0x51,0xc3,0x87,0x22,0x1e,0x89,0xf5,0x5b,0x41,0xd7,0x34,0x22,0x3c,0xbd,0x29,0xaa,0x54,0xed,0x5a,0x90 +.byte 0x17,0x24,0xba,0x7a,0x46,0x5f,0x54,0x33,0x56,0x7e,0x2d,0x03,0x59,0xcb,0xbb,0x7a,0xce,0xbb,0x8d,0xf7,0xb6,0x38,0x00,0x18,0x6a,0xa1,0x6c,0xdf,0x42,0x49,0x4d,0x9b,0x4f,0xd6,0x85,0x54,0x1f,0xad,0x17,0xdd,0x66,0x0e,0x7c,0x30,0x86,0x82,0x1c,0x5a,0x81,0x08,0x55,0x51,0x5b,0x06,0x54,0x52,0x3e,0x8b,0x6e,0x72,0x92,0xd2,0x05,0x5d +.byte 0xe4,0xe8,0x0e,0x62,0x1d,0xec,0xb1,0x7f,0x42,0x05,0xd5,0xd3,0x60,0xd4,0xdc,0xa4,0x48,0xc0,0xf0,0x89,0xef,0x5b,0xae,0x5f,0xcd,0xf0,0x62,0xaa,0x3e,0xd5,0x1a,0xbe,0xe3,0x08,0xd5,0xe8,0x00,0x21,0x8c,0x0b,0x0c,0x8e,0x24,0xac,0xb2,0xea,0x44,0x9f,0xce,0x53,0x45,0x9a,0x85,0x67,0x99,0x85,0xea,0x92,0xa7,0x1d,0x86,0xb4,0x3b,0x22 +.byte 0xa2,0xcd,0x35,0x65,0xb5,0xa6,0xdb,0x6d,0x48,0xd1,0xa4,0x76,0x0c,0x00,0x30,0x62,0x86,0x06,0xda,0xa8,0xfe,0xec,0x70,0x87,0x4a,0xe8,0x2e,0x4d,0xe3,0x94,0x0b,0xdf,0x81,0xcd,0xfe,0x23,0x79,0x2c,0x2b,0xae,0xf7,0x75,0x49,0x47,0x24,0x46,0x09,0x10,0x62,0x39,0x3b,0x50,0xf1,0xfa,0xf7,0x5f,0xe4,0x7c,0xa5,0xc0,0x25,0x9e,0x20,0x4d +.byte 0xc8,0x6b,0x93,0xc5,0x4a,0x6b,0x62,0xb8,0x3b,0xe5,0x0d,0x92,0x70,0x26,0xa5,0x2b,0xd0,0x9f,0x03,0x8b,0xd3,0x1a,0xc4,0xb0,0xa3,0xc7,0xf4,0x35,0xe5,0x1d,0xe0,0xaa,0x43,0xab,0x64,0x10,0x2b,0xa4,0x09,0x42,0xee,0xba,0xb7,0xbf,0xfd,0xa6,0xff,0x76,0xe5,0x12,0xd6,0x50,0x9a,0x26,0x6b,0x3a,0xd3,0xe6,0x7d,0x3e,0x0e,0x9b,0x95,0xd7 +.byte 0xbf,0xb6,0x7e,0xfb,0x3c,0x24,0xa4,0x26,0x98,0x88,0x81,0xf4,0x56,0xa4,0xf7,0xe8,0x87,0x15,0x5e,0x9f,0x84,0xdd,0x04,0x66,0x43,0xd8,0x76,0xc2,0xa3,0xfd,0x4b,0x58,0x09,0x06,0xa6,0x60,0x5c,0x3f,0x75,0x80,0xd7,0xc4,0x29,0xf9,0x0b,0x1e,0x4d,0xe5,0x26,0xf6,0xae,0x7a,0xc1,0x05,0xf3,0xf1,0x6c,0xee,0xed,0x56,0x0b,0x51,0x66,0xbe +.byte 0x99,0xec,0x9c,0xc2,0x97,0xe2,0xed,0x09,0x1d,0xa8,0x18,0xaa,0x1c,0x9e,0x20,0x62,0xb1,0x80,0x68,0x3e,0x28,0x1f,0x4f,0x50,0x0e,0x41,0xaf,0x17,0x44,0x79,0x16,0xca,0x17,0xe9,0x13,0x66,0x0a,0x04,0x68,0x41,0xe2,0x1d,0xc7,0x00,0x1e,0x66,0xa3,0x6c,0x2d,0x52,0x8c,0x0b,0x7c,0x03,0x48,0x73,0x3b,0xa9,0x84,0xe5,0x31,0x12,0x0f,0xe8 +.byte 0x1e,0x58,0x4d,0xd0,0x1b,0xb7,0xcf,0x75,0xd5,0x2c,0xca,0x33,0x17,0x95,0x9c,0x30,0xc7,0x7f,0xe9,0xde,0xae,0x19,0x72,0x00,0x2a,0xf5,0xde,0x93,0x3f,0xf5,0x44,0xe5,0xf8,0xc7,0xeb,0x1a,0x5d,0x5b,0x11,0x30,0x09,0xf5,0x49,0x66,0x70,0x1a,0xd5,0xe6,0xfc,0xe6,0x59,0x3d,0x17,0x6c,0xb5,0x0c,0xdf,0x1e,0x9c,0x48,0xd1,0xde,0x12,0xd6 +.byte 0xc8,0x48,0xc8,0x73,0x6d,0xfc,0xec,0x07,0xce,0x02,0xe5,0xb3,0x18,0xb9,0x55,0x4d,0x64,0x07,0xf3,0xaa,0x3c,0xf1,0x71,0x22,0x31,0xbb,0x74,0x2c,0x9f,0x7b,0x68,0x9d,0x80,0x49,0x32,0x48,0x9b,0x54,0xf3,0x74,0x37,0xac,0x4e,0xb2,0x96,0xdf,0x9d,0xeb,0x43,0xe0,0xd0,0xa0,0xe3,0x77,0xbd,0x8b,0x92,0x95,0x9d,0x63,0x8d,0xa8,0x23,0x07 +.byte 0xb0,0xcb,0x9d,0x8d,0x3f,0xe2,0xd5,0x81,0x6a,0xe5,0xc2,0xfe,0xda,0x1c,0x25,0x25,0x5b,0xa8,0xad,0x06,0xec,0x0d,0x4b,0x68,0xc3,0x45,0x81,0x38,0xb0,0x22,0x71,0xa4,0x2b,0xf3,0xa6,0x05,0xae,0x0c,0x48,0x94,0x0d,0x3d,0x48,0x51,0x76,0xdf,0x79,0x66,0x0e,0x28,0xc0,0xc1,0x6f,0xc8,0x8f,0xf7,0x7d,0x37,0x06,0xa2,0x8a,0x3a,0x6b,0xab +.byte 0xe0,0x55,0x8e,0xec,0x89,0xe2,0xca,0xc4,0x01,0x03,0x5d,0xa1,0x84,0x21,0x44,0xbb,0x6b,0x36,0x63,0x57,0x4f,0x54,0x88,0x81,0xbe,0xf8,0x53,0xf7,0x57,0xee,0x30,0x85,0x03,0x11,0x86,0xff,0xe4,0xd6,0xc4,0xf0,0x3c,0xcf,0xfd,0x38,0xd8,0xcb,0xd0,0x96,0x03,0xf2,0xc7,0xfa,0x18,0xc8,0x1b,0xe6,0x77,0x3c,0x61,0xa9,0x14,0xdb,0xb4,0x5c +.byte 0x2d,0xee,0xd7,0xe8,0xc4,0x0c,0x69,0x0c,0x55,0xe2,0x99,0x4b,0xc4,0x89,0xc8,0xee,0x48,0x0e,0x16,0xd7,0xa4,0x78,0x25,0xda,0xd3,0xa8,0xac,0x89,0x66,0x67,0x0d,0x51,0x21,0x0e,0x91,0xfb,0xb5,0xab,0x33,0xcb,0x3e,0xc7,0x0f,0x03,0x22,0x51,0x71,0x03,0xa0,0x3c,0xa9,0x35,0xcb,0x40,0xa7,0xbe,0xe7,0xc3,0x51,0x43,0xd8,0x9a,0x24,0xb7 +.byte 0x7e,0xfb,0x26,0x8d,0xa5,0x1a,0x6b,0xe7,0x97,0xe4,0xdd,0xc0,0x3e,0x98,0x67,0x55,0x79,0x56,0xb9,0x7e,0x25,0x4c,0x5c,0x5a,0x47,0x0a,0xce,0xb6,0x4d,0x2c,0x69,0x73,0xaa,0xf0,0x12,0xbb,0x9d,0xe1,0x60,0xc4,0x5b,0x10,0x32,0x6d,0x89,0x54,0xb1,0xfe,0x36,0xbe,0xb2,0x60,0x9a,0x91,0x73,0x9c,0x32,0x61,0xad,0x9a,0xf7,0x56,0x5f,0x5a +.byte 0x54,0xaf,0xb2,0x0c,0x5b,0x1a,0xe6,0x98,0x94,0xed,0x69,0x0b,0x8d,0x06,0x87,0xc9,0x20,0xdc,0x92,0x2d,0x5e,0xba,0xbb,0x15,0xef,0xc1,0x07,0x18,0x44,0x3f,0xf4,0x48,0x3e,0x7b,0xa4,0x9e,0x14,0x6b,0x97,0xdd,0x68,0x33,0x18,0xdd,0x47,0x08,0xa6,0x3b,0x8d,0x79,0x58,0x92,0xd9,0xda,0x82,0x34,0xa7,0x99,0xbc,0x43,0xa3,0x0a,0x7e,0x85 +.byte 0x0b,0xab,0x0e,0xc2,0x94,0x22,0x2d,0x05,0x99,0x9d,0x5c,0xc7,0xb2,0x7b,0x18,0x3e,0xb2,0xdd,0x47,0xb3,0xd7,0xcf,0x19,0xc7,0x55,0x5e,0x64,0xd8,0x7b,0xb4,0xf6,0x11,0x72,0xed,0xbd,0xfc,0xd8,0xe9,0x9f,0xcd,0x9a,0xeb,0xb2,0x6c,0x04,0xb9,0x88,0xf7,0x60,0x68,0xc3,0xf2,0xfd,0xa0,0x8c,0x82,0xc5,0xf7,0x5d,0xc3,0x9a,0x1e,0x49,0x27 +.byte 0x69,0x35,0xb0,0x8f,0xe9,0xb3,0xe4,0x09,0xd8,0x1a,0x73,0x9e,0x56,0x41,0xfa,0xe0,0x94,0x9e,0x0e,0x65,0xe6,0x5b,0xe2,0x12,0x39,0xca,0x86,0x0c,0xae,0xee,0x24,0x58,0xfd,0x85,0x09,0x7a,0xad,0x54,0xde,0xda,0x06,0x73,0x7d,0x11,0x7e,0x91,0x44,0xf3,0x4b,0x61,0xce,0x8a,0xff,0x76,0x92,0x2e,0x43,0x52,0xcf,0x63,0x3f,0xc4,0x1f,0x7f +.byte 0x4d,0x67,0x21,0xed,0xd7,0x88,0xdb,0x36,0x56,0x11,0xb2,0x3b,0xee,0x5f,0x2d,0x5f,0x17,0x98,0xa1,0xd5,0xcc,0x82,0xfd,0xc2,0x56,0x69,0xaa,0x68,0x86,0xaf,0x48,0x77,0xba,0xe9,0xd9,0x42,0xcd,0xaa,0xe3,0xad,0x2b,0x17,0xef,0xd3,0x54,0xc5,0x4e,0x31,0x0b,0x14,0xb7,0x73,0xc1,0x6f,0xc3,0x06,0x41,0x1a,0x11,0x19,0x9f,0xe9,0x9f,0x61 +.byte 0x4f,0x13,0x9b,0x3e,0xcd,0x7c,0xd6,0x2a,0xb3,0x87,0x84,0x58,0x58,0x10,0x1f,0xa0,0x2e,0x5c,0x15,0x8b,0x5e,0x37,0xd4,0x22,0x93,0xd9,0x67,0xe1,0xa8,0x35,0xe2,0x95,0xd8,0x4c,0x2c,0x65,0xc9,0x21,0xaf,0xf9,0xdd,0x3d,0x2c,0x0e,0x0c,0xcc,0x6b,0xad,0xb3,0x6d,0xd2,0x3e,0x65,0x8e,0x82,0x70,0x41,0xd6,0xaa,0x97,0xab,0x38,0x78,0xe4 +.byte 0x62,0x7c,0x5f,0x22,0xa3,0x1e,0xf2,0x6c,0xfe,0x3c,0xa9,0xb5,0x57,0xcd,0x96,0x11,0xd0,0x8b,0xcf,0x6d,0x06,0xcf,0x7c,0xda,0x1d,0xe4,0x22,0x5c,0x5d,0x9f,0xa8,0x24,0x55,0x45,0x93,0xc6,0xeb,0xfc,0xb5,0x71,0x5a,0x1d,0x52,0x40,0x95,0xc7,0x76,0x32,0xfb,0x2b,0x0c,0x7d,0x64,0xfa,0x5b,0x5e,0x7a,0x3b,0x0b,0xa0,0x99,0x5d,0x19,0x16 +.byte 0xe4,0x8e,0xae,0x49,0xee,0xc5,0xb2,0x24,0xd7,0x0b,0xa4,0x20,0xa6,0x74,0xc4,0x36,0x1d,0x43,0x25,0xd6,0x71,0x54,0x69,0x79,0xea,0xa3,0xd5,0xe9,0x75,0x53,0xcf,0x99,0x4e,0x3b,0xc0,0x52,0x28,0x80,0xe5,0x07,0x65,0x83,0xb3,0x24,0xfe,0x13,0x92,0xd6,0x18,0xf7,0xa3,0xeb,0x9e,0xf0,0xd5,0x69,0x93,0x79,0xda,0xb7,0x2e,0xe2,0x01,0xdd +.byte 0x9a,0xc3,0x7b,0x3b,0x17,0x88,0xe5,0xe9,0x9b,0x46,0x5c,0x5f,0x0e,0x1e,0x80,0x9b,0x11,0x1f,0xa4,0x08,0x90,0x14,0x08,0xb4,0x73,0x32,0x72,0xbe,0x43,0x4f,0x70,0x90,0xe7,0x80,0xdd,0xfd,0xa7,0xea,0x13,0xd9,0x5d,0xae,0x93,0x24,0x2b,0x1e,0xc7,0xf4,0x81,0xbb,0x5f,0xb0,0xb9,0xe4,0x35,0x39,0xf4,0x9a,0x49,0xb5,0xc0,0x47,0x18,0xc3 +.byte 0xcc,0xbe,0x26,0x36,0x44,0x2d,0x65,0x24,0xa3,0x09,0xde,0x69,0x3b,0xb8,0xdc,0x52,0x98,0x2e,0x38,0x5f,0xf7,0xb1,0x84,0xdd,0xea,0xe2,0xe5,0xec,0x96,0x31,0xb1,0x93,0xc0,0x5b,0xc4,0x87,0x4a,0x51,0x58,0x2d,0xea,0x47,0xab,0xfd,0xd3,0x76,0xf1,0xbc,0x52,0xa7,0x94,0x6c,0x74,0x1e,0x84,0x07,0x1f,0x5c,0x18,0xb9,0x06,0x37,0xf0,0xfb +.byte 0xbd,0x5d,0xaf,0xa8,0x06,0xc9,0x86,0xf0,0xd1,0x78,0x84,0x95,0x01,0xdd,0x70,0x9d,0x71,0x51,0xb7,0x80,0x69,0xbe,0xe8,0xfb,0x8f,0x43,0x72,0xd9,0xa9,0xf1,0x90,0xbb,0xf1,0xb5,0xc0,0x75,0x93,0x4e,0x14,0xc5,0x14,0x77,0x59,0xf8,0xe5,0x81,0x11,0x25,0x48,0x51,0x46,0x2a,0x69,0x59,0x92,0xe7,0xa7,0x39,0x96,0xad,0x67,0x30,0xaa,0xb2 +.byte 0x5d,0x95,0x94,0x83,0x83,0x93,0xf3,0x52,0x81,0x1c,0x27,0x78,0x1d,0x19,0x35,0x6e,0x8f,0x16,0xe5,0x3b,0xce,0x80,0x2a,0x3a,0x89,0xb7,0x51,0xfc,0x34,0x24,0xa2,0x61,0x95,0x9e,0xd4,0x69,0xa1,0x2f,0x49,0x16,0x2d,0x12,0x05,0xfe,0x69,0x62,0x12,0xa4,0x2c,0x04,0x7b,0xce,0x3f,0x34,0xc4,0x48,0x1a,0xe6,0x64,0x4b,0x8a,0xbf,0x68,0xdd +.byte 0x54,0x15,0xd3,0x25,0x49,0xdd,0xed,0x5e,0x2c,0x0e,0x25,0xbe,0x77,0xcf,0x94,0xf4,0xe9,0xf3,0xcc,0xe6,0x94,0xf9,0xb2,0x5d,0x24,0x53,0x63,0xbb,0x66,0x8d,0x73,0xef,0x79,0x5c,0x95,0x1a,0x64,0xc3,0xfd,0xc0,0xd3,0x71,0xf4,0x79,0x19,0x79,0xa5,0x30,0xf8,0x2c,0x28,0xc2,0xc2,0x9d,0x12,0x50,0x95,0x38,0xec,0xd5,0xc6,0x28,0x94,0xaa +.byte 0x83,0x66,0x3b,0xe3,0x51,0xc7,0x6a,0x75,0x2a,0x9b,0xb9,0xb0,0xa2,0xe1,0xfd,0xaf,0x58,0xd2,0x4b,0xf4,0x22,0xef,0x77,0x1e,0xa0,0x00,0xd7,0x9e,0x20,0x63,0x87,0x1d,0x98,0xab,0x0e,0x57,0x31,0x4b,0xda,0x90,0x3a,0xe6,0x6e,0x5e,0xd4,0x17,0x06,0x83,0x4f,0x90,0x33,0x1c,0xe5,0xea,0xf7,0x8d,0x95,0xa2,0x1e,0x7d,0x27,0x15,0x49,0x68 +.byte 0x3a,0x54,0xe3,0x1e,0x60,0x72,0x42,0xa6,0x8c,0x5b,0x63,0x1d,0x7d,0xb1,0xe2,0x7e,0x8b,0x19,0xf4,0x25,0x6c,0x77,0x64,0x15,0x5e,0x4c,0xfa,0x35,0x68,0xd2,0x54,0x11,0x5a,0xac,0x85,0xb0,0xb3,0xe8,0xa8,0x70,0x36,0xa8,0xe5,0x04,0xd1,0x82,0xdc,0x62,0x63,0xe6,0x3f,0x86,0x46,0x77,0x08,0x6b,0xa8,0x09,0xd0,0x56,0x09,0x87,0x9c,0x65 +.byte 0x8e,0x53,0xae,0xa6,0x2b,0x59,0x23,0xca,0xe9,0xc7,0xc4,0xb5,0xb9,0xca,0x20,0xf6,0xcc,0x62,0xfd,0xb5,0x66,0x66,0x86,0x99,0xb2,0x5a,0xeb,0xac,0xff,0x22,0xf4,0x94,0x9c,0x6d,0xc9,0xce,0xf3,0x8d,0x26,0x7f,0x06,0x40,0x71,0x8b,0x3e,0x5c,0x3e,0xe6,0x11,0x64,0x91,0x79,0xbe,0x66,0x80,0xd2,0xf6,0x2d,0x28,0x4b,0x6c,0x8d,0x9c,0x5b +.byte 0x1e,0xd1,0x15,0xb0,0xdf,0xfb,0x57,0xaf,0x4a,0xab,0xde,0x12,0xe9,0xb8,0x41,0x3d,0xc3,0xff,0xb2,0xc1,0x86,0xb0,0x06,0x5b,0xaf,0xa4,0x30,0x62,0xd0,0xd8,0x91,0x36,0x28,0xc1,0xc2,0xef,0x60,0x5d,0x42,0x04,0xd5,0x6b,0x10,0xa9,0x6c,0x88,0x5c,0x56,0x59,0x4a,0x87,0xdc,0x7c,0x41,0x03,0xb3,0x7c,0x35,0x8c,0x52,0x0e,0xc1,0xd5,0xdf +.byte 0x9b,0x8a,0x2e,0xc2,0x6b,0x06,0x7f,0xb4,0x93,0xc9,0x52,0xd0,0xc5,0x57,0x78,0x9e,0xf9,0x08,0x36,0xbc,0x4b,0xc1,0xbd,0x71,0x35,0xf8,0x73,0xae,0x9c,0xbc,0xf1,0xd1,0xba,0xe3,0x7f,0x49,0x9b,0x9b,0xb3,0xe2,0x7d,0x7d,0x18,0x6d,0x0d,0x96,0xe3,0x50,0x28,0xf2,0x7c,0x7a,0x71,0x27,0x33,0x3c,0xd3,0xeb,0x3d,0x5a,0x79,0xb5,0x69,0xed +.byte 0x40,0x38,0xbe,0xc9,0xad,0x11,0x7b,0x9d,0xe6,0x71,0xc8,0x89,0x54,0x51,0xf0,0x8f,0xdc,0xad,0x96,0xc3,0x04,0x60,0x5f,0x6d,0xa0,0x37,0xba,0x1c,0x69,0xca,0x42,0x26,0xeb,0x31,0x34,0x8d,0xae,0x25,0xe2,0x29,0x8d,0x19,0x9f,0xfa,0x75,0x91,0x4b,0x51,0xcd,0x76,0xd6,0x8f,0xa2,0x40,0x79,0xc3,0xbb,0x61,0xaf,0xc4,0x69,0xf5,0x8b,0x8a +.byte 0xb6,0x2c,0x25,0xb9,0x3c,0x8e,0x13,0xa4,0x0f,0x52,0x72,0x11,0x4b,0x89,0x63,0x01,0x05,0x54,0xd5,0x0d,0x5f,0x91,0x59,0x84,0x64,0xac,0xf7,0x9c,0xa3,0x48,0x31,0x4a,0x2e,0xea,0xf8,0xf8,0x0e,0xf0,0xd9,0x4d,0x06,0x60,0x11,0x4a,0x72,0x6f,0x93,0x93,0x85,0xf0,0x20,0x55,0x8b,0x37,0xf1,0x29,0x92,0x2d,0x1f,0xa1,0x6c,0x7c,0x90,0x4f +.byte 0xdb,0x78,0xcc,0x6c,0xb2,0x14,0x85,0x07,0x34,0xc8,0x98,0x18,0x52,0x2d,0x6b,0x13,0x63,0xc5,0x31,0x20,0x8e,0xa9,0x88,0x6b,0xb3,0x3f,0x1a,0x68,0x2f,0xf9,0xf3,0x97,0x29,0x68,0x22,0x89,0xb0,0x45,0xc4,0xf4,0x1f,0x31,0xba,0x97,0x14,0x59,0xae,0x05,0xe0,0x99,0x5b,0x29,0xcf,0xe3,0xf0,0x2a,0x0c,0xca,0x5f,0xc1,0xe7,0xe7,0x11,0x48 +.byte 0x73,0xc0,0x86,0x0b,0x59,0xc2,0x8a,0xfa,0x44,0x51,0x1c,0x84,0xdf,0x2f,0x4d,0xab,0xca,0xea,0xe1,0x48,0x9a,0xa1,0x86,0x60,0x47,0x7a,0x86,0x30,0x6a,0xba,0xbe,0x6a,0x9b,0x34,0xf4,0x52,0x0e,0xae,0x7f,0xbd,0xe0,0xf4,0x5f,0xfd,0xbc,0x57,0x02,0x95,0x6f,0xad,0x78,0x2e,0xa7,0x46,0x1c,0x2d,0x98,0x40,0xb7,0xfa,0xb5,0x08,0xee,0xb5 +.byte 0x25,0x51,0xaa,0x1a,0x14,0x41,0x48,0xe0,0x8f,0xe7,0x2f,0xfc,0xfd,0x47,0x10,0x55,0x90,0x02,0xeb,0x7f,0x0d,0x40,0xa8,0x4b,0x82,0xdc,0xab,0x43,0x35,0x62,0xa1,0x1d,0x5a,0xb0,0xc0,0x93,0x75,0x3d,0x68,0xd9,0xf8,0x31,0x22,0xfd,0x30,0xda,0xea,0xea,0x7c,0x30,0xf8,0x6f,0x75,0x5f,0x07,0x39,0xfe,0x69,0x93,0x73,0x22,0xa2,0x72,0xed +.byte 0x39,0x2f,0x00,0x5c,0xc3,0x14,0x86,0x90,0xda,0xc9,0x09,0x43,0x80,0x85,0x22,0x98,0xb0,0x4e,0x05,0x47,0x8f,0xc7,0xba,0x2e,0x4c,0x8f,0x57,0x8a,0xe9,0xb0,0x97,0x3b,0x51,0x12,0xcb,0x88,0xfd,0x5e,0x7f,0xa6,0xc6,0x00,0xd0,0x3a,0x3a,0x70,0x9e,0x56,0x28,0xa0,0x08,0x76,0x58,0x57,0x4a,0x0f,0xff,0x31,0x44,0x08,0x6c,0x23,0x79,0xad +.byte 0x35,0x95,0xc5,0xc8,0x26,0x0f,0xb3,0x17,0x04,0x1d,0xde,0x16,0x5d,0xb8,0x71,0x76,0x89,0x0b,0xd6,0xd8,0x9d,0xa1,0xdf,0xcb,0xb5,0x1c,0x86,0xc3,0x15,0x8d,0xaa,0x25,0x82,0xbf,0x6b,0x06,0xfb,0x1b,0xf5,0x11,0xaa,0x14,0x0e,0x67,0x7f,0xbd,0x46,0x21,0x8f,0x6d,0xbd,0x63,0xe6,0x14,0x05,0xa2,0xee,0x56,0xee,0xe6,0x37,0xf9,0xc0,0x2f +.byte 0xc9,0xe0,0x8e,0xdb,0xf7,0xf6,0xcb,0x83,0x79,0xcc,0xe3,0xf6,0x30,0x9d,0x56,0x31,0x40,0xd2,0x50,0x25,0xb6,0x89,0x16,0x97,0x65,0xd8,0x8d,0x1a,0xa5,0xf4,0x47,0xfc,0x4c,0x73,0x07,0x42,0x9c,0x8f,0x7f,0x10,0xb4,0x96,0x33,0x1e,0xe2,0xff,0x0c,0x33,0x35,0xbc,0x37,0x01,0x2b,0x67,0xda,0xca,0xcf,0x87,0xa2,0x38,0x71,0x6b,0xf4,0xcf +.byte 0xa6,0xc6,0x6a,0x90,0x5c,0xa0,0x8b,0x66,0x44,0xc7,0xc2,0x05,0x24,0xee,0x53,0x99,0xf3,0x07,0x78,0xb0,0x17,0xf8,0x11,0xf9,0x52,0x20,0x41,0xc5,0xdb,0x4e,0x92,0xd3,0xeb,0xd2,0x86,0xea,0x9b,0xc3,0x4c,0x1b,0x75,0xcd,0x15,0x0c,0xe0,0x28,0xe9,0xe1,0x99,0x98,0x96,0x33,0x06,0xea,0xa8,0x4e,0xde,0xc1,0x1c,0xfe,0x6c,0xca,0xac,0x6d +.byte 0xc4,0x3a,0x7d,0xd2,0x41,0xf5,0xb3,0x7d,0x1c,0x28,0x93,0x72,0xf8,0x08,0xc1,0x71,0x72,0x4c,0x41,0x68,0x38,0x80,0x2e,0x4b,0xa6,0xc5,0xc7,0xb4,0x24,0x29,0xd0,0xce,0xb2,0x3d,0xc4,0x60,0x5b,0xeb,0x2d,0x80,0x13,0xee,0x95,0x41,0xfe,0x49,0x6d,0x89,0xc0,0x7a,0x61,0x51,0x3f,0xbb,0x24,0x7c,0x64,0x5e,0x9f,0xf7,0x60,0x88,0x95,0xe8 +.byte 0x60,0xc5,0xf6,0xc3,0xc3,0xd4,0x43,0xce,0xf9,0x4e,0x35,0xf2,0xfa,0xb0,0x2b,0xe3,0xfe,0xb8,0x88,0x19,0xf2,0x89,0xc0,0xb5,0x00,0x61,0xc8,0xe5,0xaa,0xde,0x18,0xb4,0xd4,0x21,0xbe,0xcc,0x61,0xc7,0xc9,0xfe,0x22,0xcc,0x65,0xf6,0x79,0xe8,0x4d,0x1c,0x30,0x31,0x7a,0xd4,0xbc,0x98,0x2d,0x72,0x5e,0x5c,0x4f,0x7e,0x52,0x9c,0x95,0x20 +.byte 0x29,0xa4,0x0b,0xf7,0xb2,0x7d,0xcc,0xc3,0x8c,0x94,0xb0,0x09,0xf4,0x6f,0x59,0x63,0x91,0x2a,0x06,0x80,0x09,0x01,0x3c,0x73,0x83,0x42,0xa1,0x5c,0x0f,0x42,0xf4,0x74,0x3c,0x24,0x8c,0xbe,0x91,0x73,0xdf,0xf1,0xea,0x21,0xbd,0xc9,0x36,0x17,0xca,0x81,0x28,0xd9,0x4a,0xc4,0x2e,0xdf,0x4c,0x4f,0xbd,0x1e,0xbc,0xe9,0x32,0x12,0xd3,0x8f +.byte 0x48,0x9b,0x4f,0x49,0x23,0x54,0x15,0x15,0x14,0x8b,0x18,0x64,0x7d,0x08,0x7f,0xc4,0x56,0x01,0x94,0x4e,0x50,0xe8,0xf2,0x4a,0xb5,0x3c,0xa0,0xb5,0xaf,0x55,0x70,0x44,0x41,0x5c,0xe6,0x61,0x5a,0xbb,0xf2,0xe6,0xc9,0x05,0x33,0x45,0x8f,0xbc,0xe5,0x59,0x7f,0x66,0xc5,0x61,0x4d,0x1b,0xc7,0xee,0x45,0x7d,0x57,0x8f,0x6c,0x9d,0x8b,0x87 +.byte 0x98,0xa8,0x58,0xac,0x4a,0x31,0x79,0xd6,0x26,0x08,0x2f,0x28,0x3f,0x31,0x77,0xad,0xff,0xe1,0x9d,0xa8,0xf7,0xe0,0x76,0x66,0x48,0x00,0x52,0xe8,0x9a,0xb2,0x47,0x5e,0x0a,0x87,0x86,0xaf,0xf6,0x7d,0x46,0x78,0x66,0x68,0xf7,0x68,0x0c,0x6f,0x5c,0xd7,0x09,0xc0,0xd7,0x90,0x98,0xe2,0x5c,0x07,0xe9,0xd1,0x58,0x48,0x57,0x9f,0x48,0x99 +.byte 0x87,0xdf,0x06,0xc1,0x35,0x0f,0xd8,0xb0,0xa9,0xfa,0xdc,0x31,0x76,0xd1,0xad,0x47,0x80,0xe4,0x74,0xe0,0xda,0x4b,0x77,0x8b,0x71,0xab,0x9a,0x8e,0xd7,0x6b,0x91,0xb1,0xdb,0x78,0xd2,0x86,0xf7,0x61,0x1b,0xdc,0x34,0x57,0x32,0x51,0xee,0xd3,0xff,0xb2,0x6c,0x6a,0x79,0x90,0x9c,0x1f,0x6b,0xe7,0x43,0x20,0x05,0x4f,0x66,0x83,0xd0,0x56 +.byte 0xe1,0x21,0x63,0xf4,0xd6,0x96,0x91,0xcb,0x51,0x3c,0x13,0x88,0x97,0x26,0x88,0xda,0x7c,0xd4,0x0d,0xcb,0xdf,0xc2,0x7d,0xcd,0x2c,0x0e,0x28,0x23,0x21,0x5f,0xbe,0x5d,0x62,0x58,0x6c,0xa7,0x45,0xae,0x1f,0xac,0x35,0x53,0xdb,0x2c,0xa6,0x71,0xe4,0x11,0x5e,0x59,0xbe,0xd5,0x20,0x2a,0xc4,0xcd,0x4c,0x1b,0xe0,0x38,0xef,0x02,0x0c,0x5f +.byte 0x5a,0x1b,0xf9,0x1e,0x32,0x63,0xd7,0xa6,0x0f,0x1d,0x98,0xd5,0x3a,0x0f,0xf6,0xcc,0xfc,0xd6,0xb4,0x87,0xc5,0x76,0xd8,0x3e,0x72,0xb0,0x20,0xfe,0xb3,0xfc,0x48,0x4c,0xd1,0x71,0xcd,0x13,0xef,0xe8,0x40,0xd9,0x0d,0xf6,0x1d,0x5b,0xa4,0x26,0x56,0x8c,0x66,0xcb,0x18,0x5a,0x5f,0x86,0x43,0x2c,0xa4,0x1e,0x00,0x3f,0x09,0xbf,0x8e,0x61 +.byte 0xad,0x2a,0x44,0x97,0x35,0xb2,0xf3,0x50,0x5f,0xfa,0x01,0x74,0xbf,0x70,0x46,0x38,0xf1,0x15,0xaa,0x04,0xfe,0xe9,0x3f,0x43,0x2f,0x53,0xcb,0xea,0x5c,0x04,0x8e,0xe6,0x43,0xeb,0xc0,0xd9,0xbf,0x4a,0xc1,0xbc,0xf9,0x11,0xd5,0x33,0xdc,0x41,0x8e,0xfe,0x5e,0xf3,0x8c,0x80,0x47,0x46,0x01,0x9e,0xa9,0x2c,0x2d,0xd2,0x90,0x7f,0xce,0x7c +.byte 0x59,0x78,0xaa,0xbb,0x96,0x52,0x0a,0xf3,0x18,0x1f,0x0b,0x41,0xc1,0xd5,0x12,0x14,0x1a,0xe1,0x4e,0xac,0xf8,0x2a,0x56,0xfe,0x66,0x34,0x21,0xdf,0x1f,0x6a,0x02,0x85,0xd2,0x38,0xc0,0x39,0x5c,0xa7,0x3f,0xcc,0x2b,0x6f,0x69,0xe7,0xa7,0x0a,0x36,0xf1,0xa9,0x77,0x59,0x2c,0x44,0x8b,0x72,0xc9,0xc2,0x74,0x32,0x48,0x76,0x19,0x1e,0x49 +.byte 0x10,0xe6,0x46,0xdf,0x82,0x9b,0xad,0x4e,0x40,0x20,0xd7,0xd3,0xf5,0x5c,0xbc,0x25,0x94,0xd1,0x68,0xaf,0x29,0xc5,0xcd,0x1b,0x86,0x4b,0x88,0x21,0x6e,0xeb,0x06,0x14,0xb5,0x15,0xe7,0x26,0x01,0x05,0x4e,0x3a,0x2a,0x24,0xbe,0xf2,0x64,0x6e,0xf4,0x9c,0x60,0xf8,0xd4,0xfd,0x4b,0xc0,0x0e,0x68,0x0d,0x19,0x26,0x87,0xa5,0xbf,0xe1,0x16 +.byte 0xf0,0x27,0x58,0xa8,0x3a,0xed,0x27,0x5b,0x73,0x4f,0x19,0x40,0x58,0x36,0xf6,0xfd,0x60,0x37,0x09,0x74,0x3c,0xb9,0x76,0x9a,0x32,0xfd,0x98,0x79,0x53,0xb3,0xea,0x3a,0x98,0x21,0xf9,0xb2,0x97,0xe4,0x00,0xb6,0xed,0x67,0xc4,0x76,0x8f,0x1e,0x4d,0xc8,0x2e,0xf4,0x54,0xd9,0x09,0xd7,0xcb,0xa0,0x91,0x1e,0x5a,0x60,0x53,0xbc,0x3e,0x35 +.byte 0x69,0xa6,0xca,0xf3,0xce,0x41,0x84,0x71,0xee,0xf3,0x75,0xd4,0x7a,0x71,0x36,0x62,0xe3,0x08,0xae,0x40,0x05,0xde,0x01,0x34,0x92,0x5f,0x71,0xa9,0x08,0xb3,0x43,0xcd,0xe7,0x2f,0x42,0x7e,0x9c,0x1e,0xfe,0x9a,0x40,0x99,0x58,0x31,0xd9,0x8d,0x5d,0xda,0x75,0x14,0x3f,0xae,0x45,0x27,0x85,0x47,0x7d,0x41,0x0e,0x94,0x20,0xee,0x11,0xd0 +.byte 0x1e,0xcd,0x00,0x56,0xb7,0x59,0xe6,0x58,0xab,0x2c,0xa6,0x44,0x14,0x8c,0xff,0x49,0x7b,0xe5,0xf7,0x93,0xd5,0x78,0x1a,0xe0,0x16,0xd8,0x24,0x08,0x1e,0x70,0xce,0x1a,0x84,0x87,0x6b,0xe5,0xf2,0x43,0x5f,0xb3,0x34,0xaa,0x85,0x3e,0x9e,0x2e,0x86,0x22,0x74,0xe2,0x1a,0x87,0xfb,0x1b,0x6c,0x08,0x8c,0x43,0xb4,0x85,0x75,0x2c,0x13,0xc2 +.byte 0x18,0x94,0xe8,0x0d,0x09,0xd5,0x8f,0xd4,0xca,0x50,0x93,0x9f,0xa3,0x9f,0x3b,0x3c,0x54,0x68,0xa9,0xb1,0xdd,0x0a,0x0b,0xe2,0x15,0x92,0x9c,0x6f,0xfa,0x45,0x6f,0x0a,0xb4,0x6b,0xcb,0xdc,0xa4,0xf3,0xf0,0xa6,0x1c,0x8a,0x60,0x42,0x35,0xa8,0xe3,0xdf,0xc8,0xdc,0xbb,0xbe,0x95,0xa7,0xac,0x08,0x08,0xbc,0x56,0x1a,0xa4,0xc2,0xd2,0x53 +.byte 0xfa,0xb2,0x89,0x4f,0xb8,0xe4,0xb9,0x90,0x95,0x91,0x2f,0x0f,0x93,0xa9,0x8c,0xc6,0xf8,0x01,0x34,0x08,0xe6,0x8c,0x58,0x43,0x57,0x40,0xf9,0x78,0x83,0xea,0x92,0x70,0xa8,0xa5,0xc8,0x9e,0xf8,0xc6,0x39,0x4c,0xb4,0xe9,0xbb,0xdf,0xd2,0x52,0x43,0x6b,0x6c,0x8b,0x2c,0x47,0xd7,0x11,0x42,0x3d,0xc7,0x3f,0xce,0xd1,0xd9,0x28,0x5b,0xce +.byte 0xec,0xb6,0x31,0x3a,0xc9,0xad,0x0c,0x93,0x82,0x2b,0xf6,0xdc,0xd4,0xcd,0x80,0xe1,0x75,0x45,0xeb,0x3b,0xbf,0x12,0x42,0xeb,0x71,0xc1,0x8b,0x27,0xd5,0xcb,0xd9,0xb6,0xe8,0xe9,0xc6,0x79,0xff,0x38,0x88,0x87,0x72,0xf2,0x71,0x4a,0x44,0x55,0x0f,0x9c,0x93,0xcf,0x15,0x18,0x44,0x62,0x2a,0xc5,0x0a,0x80,0x69,0x91,0x6e,0x4b,0x30,0x4e +.byte 0x3f,0x2f,0xb5,0x65,0x9e,0x65,0x07,0x36,0x9b,0xba,0x5f,0x81,0xd9,0x60,0xbe,0x1f,0xf5,0x98,0x20,0xf9,0x9e,0x53,0xf7,0x5d,0x57,0x7f,0x22,0xaf,0x8e,0x82,0x9e,0x0f,0x33,0x74,0x37,0x26,0x61,0x67,0xf6,0xfd,0x2c,0xab,0xd8,0x18,0x1d,0x10,0x48,0x7a,0x1d,0xed,0xbb,0x57,0x83,0xf9,0x82,0xf5,0xe3,0xf9,0x98,0x5c,0xc0,0x3e,0xee,0x38 +.byte 0x0a,0x57,0x10,0x22,0xc4,0xe8,0x1d,0xe3,0x46,0xa3,0x81,0x5e,0x92,0xba,0xcc,0x53,0x48,0x85,0x33,0x58,0xa2,0x3e,0xea,0x0a,0xfb,0x72,0x5c,0xcd,0xd9,0xa4,0x3f,0x56,0x99,0x35,0x92,0x6c,0xe8,0xf2,0x59,0x0f,0xc8,0x6a,0x21,0xb2,0x9f,0xa2,0xf6,0xf3,0x1b,0xec,0x38,0x95,0xed,0xef,0x00,0x09,0x16,0x6e,0xf7,0xf8,0x1a,0xef,0x0d,0x2b +.byte 0xef,0x83,0x8a,0xc2,0x22,0x3d,0x50,0xa3,0x70,0x52,0xe8,0xad,0x11,0x44,0x83,0x80,0xfe,0x88,0x7e,0x40,0x02,0x8f,0x4a,0x5d,0xd3,0x28,0x66,0x75,0x5a,0xf2,0x38,0xb5,0xdc,0x54,0xa8,0xb3,0xaa,0x76,0xdb,0x73,0xe0,0xd1,0xd7,0x51,0x20,0x8c,0x38,0x18,0x46,0x25,0x2e,0x0d,0x5b,0x61,0x9d,0x36,0x9a,0x14,0xfb,0xc8,0x4e,0x5a,0xba,0xa1 +.byte 0x98,0x34,0xfd,0x05,0x2c,0x87,0x58,0x8d,0xe3,0x5d,0x79,0x5a,0x45,0xff,0x75,0x25,0x98,0xbd,0xe4,0x9d,0x1a,0x70,0x79,0xaa,0x44,0x1a,0x10,0x7f,0xfb,0xe9,0x30,0x81,0xc7,0xa2,0x81,0x41,0x49,0x41,0x4e,0x42,0x5f,0x8a,0x9b,0x10,0xe2,0xdc,0xd9,0xdf,0xbd,0x61,0x29,0x72,0xa5,0x39,0xb7,0xf6,0x9f,0x4e,0x98,0xb8,0x04,0xae,0xd7,0xda +.byte 0x9a,0x9f,0x08,0xb8,0x2c,0x40,0x14,0x6d,0x01,0xb7,0x86,0x58,0x55,0x42,0xe5,0xdb,0x5f,0x4a,0xef,0xd8,0xed,0xdf,0x3b,0x24,0x1c,0xe4,0xb1,0x73,0xd1,0xce,0x29,0x96,0xde,0x8e,0xf3,0x1d,0x8d,0x75,0x57,0xd3,0x9a,0xf8,0xff,0x1a,0x4c,0x0c,0x47,0x82,0x83,0x73,0x34,0x43,0x55,0xfa,0xf2,0xd4,0x38,0xed,0xde,0x6d,0x24,0x55,0x90,0x06 +.byte 0xd6,0x03,0x52,0x28,0xc7,0x38,0x4a,0x16,0x95,0x4d,0xf4,0x46,0x56,0xf7,0x63,0x1f,0xe4,0xa9,0x51,0xc6,0x0b,0x85,0x42,0x40,0x8e,0x49,0x1e,0xc2,0xab,0xeb,0xda,0x99,0x26,0xf6,0x6e,0x00,0x8f,0x26,0x82,0xef,0x03,0xb0,0xd4,0xdb,0x54,0x46,0xdf,0xdc,0x23,0xaf,0xa8,0x6a,0x9f,0xb7,0xf9,0x41,0x07,0x5e,0x2d,0xcf,0x85,0xfd,0x9c,0x46 +.byte 0x30,0xb9,0x14,0xca,0xe2,0x30,0x12,0x06,0x88,0x08,0x05,0x2c,0x9a,0x4b,0x52,0x98,0xa9,0x99,0xd7,0xca,0xb5,0x1e,0x60,0x44,0xd9,0x5c,0x19,0x42,0xbe,0xa5,0x04,0xfd,0x7a,0xfc,0xb9,0xdf,0xd6,0xe3,0x6d,0x02,0xe3,0x96,0xf6,0xae,0xf3,0x78,0x1d,0x90,0x6d,0x86,0x17,0xf7,0xb7,0x6b,0x1d,0x52,0x32,0x5b,0xc0,0x31,0xaf,0x09,0x90,0x5e +.byte 0x81,0x75,0x17,0x47,0x6b,0x5e,0x9a,0x40,0xa5,0xa8,0x84,0x60,0xdc,0xdb,0xd2,0x89,0xcd,0xb2,0x72,0xf4,0x74,0xda,0x5d,0x34,0xf8,0xc6,0x1b,0x26,0x3e,0x8b,0xc7,0x73,0xf9,0x0c,0x93,0xf4,0x40,0x02,0xe0,0xed,0xe5,0xa0,0xae,0x91,0x03,0x85,0xa8,0x2f,0xe2,0x72,0xfe,0x17,0x7d,0x2b,0xa6,0x39,0x10,0x80,0x4c,0x58,0xaa,0xd8,0x22,0x7d +.byte 0x2f,0xbf,0x0c,0x40,0x48,0xfa,0xbe,0x40,0x4c,0x32,0x96,0x69,0xa5,0xab,0x0b,0x1e,0x33,0x9b,0xcf,0xe6,0x4e,0x2b,0x41,0x5a,0x21,0x23,0xa1,0xbb,0xd3,0xd6,0xd1,0xfd,0xbd,0x55,0xfc,0x92,0x92,0xcb,0x4b,0x72,0x39,0x8b,0xeb,0x72,0xdd,0xf7,0x77,0x43,0x52,0x2f,0x99,0x14,0x6e,0x41,0xce,0x1d,0x57,0x2c,0x09,0xd2,0x18,0xec,0x1b,0x89 +.byte 0xa0,0xe9,0xfe,0x1e,0x41,0xda,0x0f,0x76,0x02,0x38,0xec,0x9a,0x30,0xb7,0x5a,0x54,0x70,0xbc,0xe8,0xfa,0x06,0xd0,0x80,0xfb,0x27,0xd2,0xd8,0x00,0x80,0x65,0x9d,0x23,0xfd,0xad,0x26,0xb8,0xdc,0x09,0x4f,0xfb,0x52,0xcd,0xe4,0x41,0x68,0xca,0xdd,0xbc,0x2a,0x62,0xeb,0xa6,0x32,0x71,0xb0,0x08,0xb6,0x9f,0x3e,0x74,0xfe,0xb0,0xd4,0x9d +.byte 0x9e,0x6c,0x50,0x96,0x8a,0xde,0xd6,0xe9,0xde,0x2c,0xa6,0xf0,0x9f,0x67,0x00,0x50,0x0a,0x8c,0xe5,0xc2,0x37,0xcc,0xf0,0x53,0xeb,0x72,0xf2,0x87,0x77,0xee,0x80,0xe8,0xb2,0xa1,0x13,0x52,0x70,0xe6,0x8f,0x70,0x17,0x90,0x60,0xcb,0xac,0xb2,0x72,0xef,0xd9,0xb5,0xc3,0x68,0x57,0xdf,0x2d,0xcb,0x5a,0x35,0xf9,0x2e,0xfb,0xef,0x6e,0x77 +.byte 0x5d,0x21,0x37,0x4b,0x36,0x9b,0x3f,0x03,0x65,0xc9,0x84,0xb1,0x12,0x99,0xd1,0x6b,0x00,0x71,0x37,0xc7,0x57,0x82,0x44,0x7f,0xe1,0x81,0x24,0x70,0x96,0xd5,0x27,0xba,0x36,0xf7,0x25,0xc6,0x1c,0x7c,0x1b,0xdb,0xa3,0x6a,0x3e,0xb9,0x69,0x78,0xf7,0x51,0x46,0xe2,0x74,0xd3,0xfc,0xef,0x58,0x63,0x53,0x1d,0xd7,0xd0,0x8a,0x6a,0xd3,0xb0 +.byte 0xb9,0xbb,0xba,0x43,0xbf,0x8b,0x6b,0x04,0xd2,0xb1,0xe8,0xd1,0x72,0x3f,0xdc,0x2b,0x01,0xa6,0x2f,0x9c,0x7d,0x65,0xa1,0x9f,0x9b,0x4d,0x70,0x26,0x11,0x4c,0xb2,0xe1,0x01,0x0e,0x78,0xf2,0x32,0x87,0x2d,0x8e,0x95,0x02,0x76,0xca,0xe5,0x71,0x5f,0x36,0x35,0xb9,0xbb,0xc3,0xdf,0xf3,0x1e,0x1a,0x7a,0xe4,0x2c,0xdf,0x64,0x5d,0x96,0x12 +.byte 0xea,0x5c,0x14,0x73,0xa0,0xf1,0xbc,0xa9,0x6e,0x30,0x8a,0x47,0xf0,0x4b,0x9b,0x4c,0xc5,0xb0,0xbe,0x15,0x32,0x1b,0xde,0x0c,0x39,0x6a,0x6d,0x4e,0x3b,0x69,0x4c,0xb4,0x1f,0x56,0xf0,0xa1,0xb1,0x8c,0x29,0x5c,0x87,0x54,0xf2,0x5b,0x51,0x03,0x20,0x70,0x90,0x38,0x66,0x07,0xcc,0xd7,0xde,0x96,0x40,0x82,0xee,0xb5,0x87,0x2a,0x86,0xec +.byte 0x66,0x09,0xb7,0x4a,0xfe,0x4e,0x92,0x89,0x07,0xde,0x35,0xc4,0x6e,0x91,0x25,0xfd,0x18,0xfa,0xd9,0x8f,0xa7,0xa6,0xa7,0x6b,0x32,0xba,0xd3,0x1c,0x90,0xb9,0x8a,0x6c,0x9f,0x3f,0xb5,0x16,0x81,0x81,0xee,0xd7,0x55,0xc1,0x41,0x62,0xfd,0xe9,0x4c,0x5d,0xd7,0x70,0xdd,0xc6,0x4a,0x2b,0x42,0x77,0xe7,0x74,0xed,0x02,0x80,0x0d,0x7c,0x73 +.byte 0x8e,0xf0,0xd3,0xb0,0x20,0xbb,0xc8,0x82,0x06,0xdd,0x56,0x64,0xcb,0x9c,0xda,0xa1,0xa9,0x92,0xbc,0x8c,0x65,0x03,0xcd,0x68,0x87,0xa2,0x94,0x41,0x3c,0x36,0x96,0x1f,0xa4,0xd2,0x6d,0x5d,0x9f,0x2d,0x0c,0xf9,0x8a,0x82,0x19,0x93,0x47,0x62,0x71,0x8e,0x59,0xaa,0xf1,0x87,0xe0,0xb8,0xab,0x10,0x7f,0x4e,0xa8,0xa3,0xe2,0x32,0x58,0xb0 +.byte 0xcf,0x12,0xc0,0xf8,0x94,0x4a,0x61,0x36,0xdc,0x2d,0xb5,0x91,0xf9,0x0f,0x7d,0x91,0xd3,0xc7,0x03,0x8a,0xae,0x5c,0x22,0x8c,0x60,0x30,0xf4,0x71,0x51,0x00,0xf5,0x5d,0xe9,0x37,0x6c,0xae,0x64,0xff,0x45,0x35,0x4b,0x47,0x08,0xca,0xda,0x7b,0xe9,0xef,0xcb,0x27,0xcb,0x7e,0x3c,0xa6,0xd2,0x38,0x54,0x74,0xc3,0x7c,0xf8,0x71,0xb7,0x47 +.byte 0xe9,0xe0,0x43,0x03,0x3b,0x41,0x57,0xc3,0xda,0xa1,0xcb,0x64,0xb1,0x31,0x0d,0x12,0x45,0x3a,0xa0,0xad,0x6b,0xc7,0x26,0x62,0x50,0xcf,0x94,0x5a,0x30,0x8d,0xf6,0x91,0x49,0x9e,0xd5,0x84,0x0e,0x0c,0xe3,0x47,0x08,0x7f,0xa1,0x54,0x78,0x1b,0xa8,0x2c,0xbc,0x12,0x4f,0x7e,0x53,0x1b,0xca,0xfb,0x09,0x35,0xe0,0x9c,0x15,0xea,0xf6,0x3e +.byte 0xb2,0x20,0x9e,0x2c,0x81,0x6f,0xa4,0xb5,0x6b,0x04,0x6d,0xd1,0x90,0x66,0x46,0xdc,0x4b,0x71,0x7e,0x4b,0x3f,0xd6,0xe1,0xa8,0xc0,0xa7,0x45,0x85,0xe3,0x98,0x30,0xda,0x23,0x68,0x55,0xd8,0x96,0xb1,0xcc,0xeb,0xe1,0x95,0x0b,0x20,0xf3,0x4c,0xf2,0xc5,0xfa,0x0e,0xca,0xf5,0xc9,0xb3,0xd7,0xb4,0x1b,0x9f,0xef,0x82,0x56,0x4c,0xc5,0xa5 +.byte 0x21,0xda,0xcc,0x19,0x69,0x68,0xcb,0x37,0xb2,0x0c,0x73,0xb1,0x13,0x61,0x6b,0xca,0xda,0xfc,0xf7,0x1c,0xbc,0xd1,0x72,0x56,0xb8,0x7d,0xa1,0xef,0xc4,0x32,0x38,0xa3,0xdb,0x8b,0x2d,0x0a,0xce,0xcb,0x86,0x51,0x60,0xd2,0x47,0xf0,0x97,0x58,0xd8,0xa5,0x12,0x77,0xfc,0x32,0x04,0x29,0x61,0xfc,0xab,0xc2,0x42,0x86,0xd9,0x57,0x80,0xad +.byte 0x00,0xf0,0x9a,0x2a,0xac,0x52,0x27,0xd6,0xf8,0xd6,0x38,0xc8,0xfc,0xc1,0xab,0x4f,0x41,0xbf,0x8e,0x60,0x20,0xeb,0x24,0x36,0xd8,0xd8,0x25,0x6f,0xc8,0x5d,0x6b,0x00,0xdd,0x7a,0xe2,0x37,0xe4,0x13,0xd0,0xaa,0x5c,0x56,0x32,0x98,0x00,0x4b,0x8a,0x81,0xb1,0xfa,0xe8,0xf3,0xfa,0x0d,0xbb,0x66,0x6e,0x24,0xfd,0x3c,0x50,0x63,0x3a,0xf1 +.byte 0x72,0x63,0x18,0x71,0x6d,0xee,0x6f,0xf1,0x0e,0x1f,0x9e,0x9d,0x87,0x12,0x5c,0xdf,0x1d,0x9e,0xc0,0x0b,0x39,0x0e,0xd6,0x56,0x79,0x30,0xcb,0x07,0x7b,0x88,0xa5,0xbe,0xfd,0xd4,0x49,0xcc,0x92,0x6a,0xcc,0x78,0x1e,0xaf,0xee,0x89,0xc8,0x51,0x08,0x98,0x14,0x20,0xe5,0x52,0x93,0x18,0x6f,0xbb,0xdc,0xb2,0x68,0x14,0xd1,0xdb,0xe8,0x56 +.byte 0x24,0xd0,0x34,0xab,0xa6,0xfa,0xfe,0x72,0x5a,0xe3,0xe1,0x87,0x0d,0xf4,0xfa,0xa6,0xa6,0x6c,0xb6,0xcb,0xf8,0xfc,0x59,0xac,0xd9,0xb0,0xcd,0x15,0xa4,0x37,0x73,0x6e,0x70,0xc9,0x74,0xef,0x87,0x78,0x61,0xc2,0xd0,0x52,0x51,0xa9,0x2c,0xdb,0x9d,0xd9,0x3d,0xac,0xcd,0x52,0x39,0x69,0x2d,0x2a,0x4f,0xf3,0xb2,0x69,0xb9,0x01,0x3c,0x57 +.byte 0xeb,0x1b,0x0e,0x87,0xe9,0x42,0x58,0x83,0x6b,0xbc,0x72,0xc8,0x46,0x32,0x42,0x17,0x6a,0x19,0xa0,0xb3,0xf1,0x1c,0x96,0x9c,0x11,0x09,0x8b,0xc1,0x9e,0xe9,0x7f,0x18,0x8e,0xca,0xea,0x24,0x1b,0xce,0x12,0x57,0x1d,0x34,0xbe,0x60,0x60,0x2c,0xd8,0xa0,0x61,0x73,0xd6,0xf8,0xaf,0x15,0x26,0x84,0xd7,0xec,0xc0,0xbe,0x7e,0xa1,0xa8,0xba +.byte 0x2b,0xcc,0x20,0x67,0x6e,0xea,0x48,0x79,0x23,0xea,0x14,0x36,0x85,0x0a,0x56,0x3a,0xcd,0x5b,0x51,0xa4,0xf5,0x92,0x49,0xc2,0x55,0x62,0xed,0x88,0xde,0xd0,0x0c,0x01,0x36,0xb9,0x2e,0x94,0x80,0x75,0x8a,0x21,0x0a,0x07,0x45,0x68,0xd8,0x9d,0x49,0x7b,0xa7,0xb2,0x84,0xfa,0x3c,0xc4,0xd5,0x59,0xf9,0xc3,0xff,0xcf,0xe4,0x5f,0xea,0xbb +.byte 0x0f,0xae,0x7d,0x96,0xd3,0xe9,0x38,0xd1,0xb1,0x02,0xf6,0x4b,0x95,0x43,0x1c,0x69,0xa6,0x99,0xf5,0xdb,0x46,0x62,0xea,0x69,0x5a,0x08,0x2d,0x01,0x11,0xed,0x70,0x03,0x60,0x54,0xba,0x32,0x2c,0x0e,0x44,0x1f,0x8d,0xee,0x2e,0x39,0xab,0xc0,0xd4,0x88,0x11,0xef,0x07,0x3a,0x47,0xb9,0x6e,0x0c,0x22,0x9a,0xf3,0x89,0x01,0xfb,0xb8,0x2d +.byte 0x52,0xa0,0x42,0x4c,0xb3,0x9e,0xf5,0x4b,0x0c,0x78,0x0a,0x3b,0x29,0xae,0x4a,0xc0,0xb2,0xa3,0xc0,0x0d,0x38,0x07,0x49,0x9c,0xda,0x7c,0x48,0x81,0xba,0x53,0x0d,0x0d,0x78,0x8c,0xac,0x9b,0x3d,0x1f,0xaa,0xc1,0x32,0x54,0xca,0x54,0xe1,0xef,0x46,0x82,0x61,0xd0,0x88,0x04,0x53,0xb0,0x34,0xc2,0x23,0x9a,0x90,0xe3,0x73,0x9c,0x0d,0x46 +.byte 0x61,0xe5,0xc0,0x42,0x87,0x4a,0x3b,0x3a,0xf9,0xab,0xbe,0x4c,0xba,0x2f,0x88,0x03,0x6b,0x52,0x25,0x8c,0x9b,0xc0,0x13,0xb6,0x80,0x09,0x85,0x97,0x64,0x6d,0x65,0xcd,0x18,0x42,0x00,0xdf,0x76,0x4d,0x67,0xbf,0x04,0x7a,0x5f,0x7e,0x3a,0x5c,0x6f,0x1d,0x12,0x5b,0xbe,0xd2,0xc8,0xe5,0x09,0x45,0x4d,0xae,0xed,0xd8,0x77,0xc5,0x6f,0xb6 +.byte 0x43,0x09,0xe2,0xee,0xc9,0x5a,0x76,0xc5,0xeb,0xdd,0x96,0x23,0xb9,0xe5,0xfc,0xf2,0x3c,0xe1,0x67,0x5f,0x1b,0x10,0x39,0x47,0x67,0x8b,0x48,0x32,0xd0,0xbc,0xa0,0xa8,0x3e,0xc3,0x30,0x21,0x18,0x54,0x49,0xfe,0x8a,0x14,0x7a,0xe5,0x6e,0xbe,0x70,0xec,0xf6,0x97,0xa0,0xa4,0xf4,0xdd,0xaf,0xf2,0xde,0x50,0x1a,0x68,0xb9,0x1a,0x4b,0x37 +.byte 0xf8,0x29,0x16,0x4f,0x8c,0xa5,0x9e,0xd2,0x72,0x7f,0xf6,0x6b,0x7d,0xac,0xe4,0x17,0x93,0x39,0x8f,0xd9,0xdf,0x50,0x1f,0xce,0xf5,0x58,0xdd,0xcd,0xc2,0xb9,0x64,0xfc,0xad,0x8a,0x3c,0x2e,0x52,0x58,0x91,0x3b,0x78,0xb4,0xfd,0x4a,0x3b,0x13,0x5d,0x20,0xd5,0xdf,0xe7,0x52,0x3d,0x4c,0x2f,0x02,0x30,0xfc,0x24,0x17,0x99,0x6e,0x4b,0xfe +.byte 0x1d,0xf0,0xe6,0x86,0x32,0x37,0xb5,0xd5,0x09,0xa3,0xa5,0x3b,0xc1,0x88,0x9f,0x01,0x57,0x12,0x03,0x1d,0x60,0xd8,0x57,0xba,0xc6,0xfc,0xda,0xab,0x02,0xbe,0xab,0x89,0xf9,0x08,0x63,0xbd,0x42,0x11,0xf7,0xbf,0xd3,0x45,0x2b,0xa5,0x34,0x91,0x18,0xb9,0xb3,0x79,0xb4,0x15,0xa1,0x01,0x1a,0xf9,0x74,0x91,0x08,0x94,0xb2,0xf3,0xb2,0xca +.byte 0x0a,0x3a,0x4f,0x42,0x8a,0x16,0xf7,0x9e,0xbf,0x27,0x72,0x7b,0xff,0xd3,0xb9,0x4e,0xf5,0x8e,0x68,0xb5,0x91,0x23,0xef,0xeb,0x5d,0x7d,0xd8,0xc9,0xda,0x07,0x33,0xc9,0x1c,0x4a,0x7a,0xf2,0x72,0x64,0xb3,0x35,0x2e,0x54,0xec,0xc4,0xd9,0xee,0xea,0xda,0xfe,0x8b,0x1c,0x21,0x93,0x52,0x95,0x7c,0x2d,0xfe,0x56,0x05,0xdd,0x57,0x37,0xf2 +.byte 0x54,0x1c,0xe2,0x6c,0xc0,0xaa,0x71,0x67,0xdd,0x73,0x43,0x17,0x3e,0x76,0xdb,0x60,0xb4,0x66,0x62,0xc7,0x74,0x08,0x91,0x1f,0xd5,0x4c,0xa9,0xd0,0x34,0x33,0xea,0xb0,0x2c,0x0a,0x88,0xda,0xf7,0xca,0x91,0xf6,0x5f,0x9e,0x72,0xf6,0x18,0xf9,0x19,0x9d,0x84,0xf8,0x4c,0xe1,0xeb,0x45,0x29,0xaa,0xf2,0xa6,0xfd,0x64,0xf9,0x0b,0xfe,0x09 +.byte 0x1c,0xc2,0xde,0x19,0xdd,0x0f,0x02,0x16,0x65,0x70,0x33,0xd4,0x32,0x67,0x7b,0xc4,0xbb,0x11,0x60,0x4f,0xc3,0x4d,0x29,0x23,0x7e,0x84,0x58,0x51,0x43,0x7e,0x25,0x4f,0x3d,0xd4,0xe0,0x20,0x79,0xfd,0xce,0x59,0x49,0xf8,0xd1,0x53,0xca,0x2d,0x66,0xec,0xe5,0x7f,0xc8,0x14,0x06,0xc1,0x96,0x40,0xf2,0x61,0xa7,0x1b,0xf9,0x5e,0x97,0xfe +.byte 0x62,0x57,0x05,0xcc,0x6f,0x26,0x4b,0xa6,0x40,0x33,0x72,0x20,0xd3,0x1e,0x2b,0xb2,0x60,0xe7,0x56,0xda,0x87,0xd3,0xb4,0x5a,0x73,0x04,0xc9,0xc2,0x68,0xe3,0x18,0x74,0xd9,0x46,0x74,0x31,0xf4,0xf4,0xab,0xc4,0x0a,0xbc,0x66,0x4e,0x23,0x5f,0x92,0x7c,0x0a,0x81,0xdd,0xcc,0x79,0xee,0xb3,0x3d,0xc0,0x91,0x81,0xd0,0x79,0x39,0xd2,0x69 +.byte 0x5d,0xdc,0xc1,0x5c,0x61,0xb9,0x5e,0x87,0x32,0x73,0x70,0xd0,0xa8,0x7d,0xb5,0xd0,0xfc,0xf4,0xb6,0x55,0x9f,0x1f,0x8a,0xec,0xf4,0xb0,0x47,0xeb,0x3b,0x68,0x80,0x0b,0x79,0xd0,0x71,0x99,0xb1,0xd0,0xed,0x1f,0x9f,0x6c,0x2d,0x9d,0xae,0x1c,0x62,0x3b,0xec,0x3e,0x2f,0xb4,0x6f,0xbb,0x2e,0x1e,0xa9,0x7c,0xe8,0x5d,0x14,0x7d,0x0d,0x17 +.byte 0x6d,0x9c,0x54,0xce,0x64,0x93,0x8e,0x3b,0xa4,0xa9,0xfb,0xd9,0x44,0x06,0xbb,0xb8,0x7f,0xdf,0xd3,0xc2,0xa2,0xcf,0x5a,0xa2,0xa7,0xbb,0xb5,0x08,0xe2,0x67,0xdf,0x0e,0x4e,0xc6,0xcf,0x0a,0x79,0x1e,0xa5,0x60,0x1a,0x81,0xb1,0x8e,0x1b,0x27,0x7f,0x8d,0x28,0x50,0xa7,0x4a,0xe4,0x4b,0x61,0x6b,0xa9,0xfa,0xaf,0x82,0x83,0xfb,0x1f,0x2e +.byte 0xfa,0xce,0x18,0x0e,0x32,0x5f,0x5a,0xcf,0xac,0xaf,0x22,0x30,0x16,0xd7,0x97,0x99,0x0d,0xb8,0x92,0xa5,0x1d,0x44,0xb2,0xa5,0xc7,0x74,0xd2,0x81,0x8d,0x5c,0x38,0xda,0x9f,0x76,0xcb,0x47,0x6c,0xb7,0x08,0xd9,0xc1,0x52,0xd0,0x64,0x0a,0xf9,0xdd,0x3e,0xe8,0x99,0x15,0x4d,0xcb,0x7b,0x25,0x53,0x8c,0x13,0xb1,0xbf,0xb7,0xca,0x2d,0xce +.byte 0x71,0x48,0xee,0x5b,0x3a,0x01,0x5b,0xfd,0x22,0xfa,0x6f,0x17,0xcb,0x52,0xcc,0x0a,0x2b,0xbb,0x6d,0xce,0x2d,0x00,0xf5,0x9e,0x0d,0x58,0xf1,0xf4,0xa4,0x9f,0x13,0xf9,0x68,0x15,0xd7,0x02,0x41,0x6c,0x19,0x6b,0x66,0x9a,0x74,0xee,0xb4,0xb3,0xc7,0xec,0x60,0x19,0xbd,0xbb,0x97,0x22,0x7c,0x4e,0xe6,0xc6,0x00,0x03,0xa5,0x36,0x52,0xec +.byte 0x21,0xcf,0xc8,0xda,0x2c,0x14,0xa9,0xd8,0x75,0xab,0xea,0x05,0x8c,0x24,0x28,0x63,0xbd,0x58,0x35,0xd7,0x95,0xcb,0x14,0x89,0x04,0x99,0x7e,0x67,0x0d,0x07,0x35,0xdb,0x17,0x7c,0x72,0x2d,0xbc,0x89,0x9b,0xb4,0x16,0x21,0x2f,0x90,0xe8,0x8f,0xeb,0xc3,0x8d,0x86,0x0d,0x92,0xf6,0x4b,0x80,0x36,0x96,0x6b,0xd8,0x95,0x7b,0xad,0xe8,0xbf +.byte 0x77,0x9e,0xf4,0x93,0xcd,0xa5,0x06,0xbc,0x38,0xf2,0x57,0x25,0x54,0xfa,0x8e,0x19,0x8e,0x25,0x8e,0x3c,0x28,0xaa,0xf2,0x02,0x30,0xd4,0x47,0x89,0x36,0xb9,0xb7,0x01,0x5f,0x0c,0xd1,0x8d,0x93,0x7e,0xf0,0xf0,0xff,0x2f,0x8f,0xb5,0x97,0xa7,0x02,0xe8,0x9b,0xf2,0x51,0xe6,0x51,0x62,0xa5,0x27,0x26,0xc6,0x7a,0x39,0x7a,0xa9,0xaf,0x1e +.byte 0x03,0xd5,0x25,0xbe,0x3b,0x19,0x46,0xc4,0xdd,0xd6,0x5e,0x6a,0x18,0xc0,0x41,0x5f,0x53,0x89,0xd3,0x16,0xfb,0x3a,0x10,0xce,0x0d,0x8c,0x04,0x4c,0xcf,0xab,0xb9,0x0d,0x6c,0x45,0x6c,0x29,0xed,0x77,0x37,0x1f,0xd8,0x10,0x8a,0xfe,0x07,0xbd,0x7e,0xd7,0xa6,0x6b,0x80,0xde,0x3e,0x2c,0xa8,0xb1,0x38,0xcc,0xab,0x10,0x69,0x8f,0x58,0x3d +.byte 0x12,0xc7,0x9c,0xc1,0x0a,0xeb,0x3d,0x5e,0xf1,0x65,0xc6,0x09,0xcb,0x4b,0x09,0x24,0xa7,0x56,0x1d,0x1d,0x4c,0xd7,0x06,0xbd,0xe2,0x72,0x70,0xae,0x7e,0xe9,0xaa,0x97,0x6d,0xec,0xcb,0x55,0x0b,0x5d,0x45,0x3a,0x25,0x3d,0x52,0x0f,0x48,0x2f,0xe4,0xd0,0x5e,0x85,0x87,0xb6,0xa7,0x70,0x2f,0x9c,0x19,0x89,0x95,0x45,0x76,0x00,0xfe,0x27 +.byte 0xff,0xf8,0x73,0x59,0xba,0x98,0x92,0x4e,0x76,0x1a,0x90,0x1d,0xbc,0x1b,0xae,0x44,0xb6,0x63,0x86,0x4c,0x3c,0x8a,0x8f,0x3e,0x03,0x95,0x50,0x30,0xd8,0x0f,0x7f,0x6f,0xb6,0xe9,0xbe,0x2e,0xc9,0x55,0xe7,0x73,0xd6,0x77,0xdc,0xbc,0x67,0x54,0x31,0x47,0x30,0x46,0xe1,0xa4,0xf8,0xf3,0x90,0x4f,0x68,0x5a,0x52,0xe2,0xe7,0xdb,0xd9,0xfd +.byte 0xf6,0x36,0x2a,0xc1,0xdb,0x35,0x82,0x69,0xff,0xf9,0xea,0x53,0xff,0xcd,0x21,0x2c,0x26,0x79,0xd6,0x8c,0x74,0xe7,0x9e,0x85,0x1a,0x04,0xf5,0xed,0x89,0x16,0xf5,0xd7,0xf1,0x89,0xf1,0xb3,0x5b,0x47,0x42,0xcb,0x92,0x2e,0x70,0xf6,0x3e,0xfc,0x20,0x87,0x70,0xec,0x30,0x16,0xcc,0x88,0x64,0x13,0x58,0xf1,0x0d,0x17,0x90,0xc4,0xdb,0x07 +.byte 0xf5,0xe3,0x34,0x31,0x10,0x9c,0xa4,0x6a,0x4a,0xe6,0x6c,0x80,0x49,0x07,0x23,0x21,0xd6,0xf1,0xcb,0x4a,0xd1,0xb5,0xb7,0x63,0x94,0x4c,0x0a,0xce,0x90,0xf2,0x63,0x31,0x4f,0x96,0x6c,0x5d,0x3e,0xaa,0x10,0x20,0xd6,0xb6,0xbe,0xfa,0x3f,0x83,0xbc,0xa8,0x08,0x38,0xec,0x38,0xe4,0xe9,0xf5,0xb3,0x8e,0x32,0x31,0xcd,0x7c,0x08,0x98,0xf6 +.byte 0x0f,0x8a,0x8f,0xc1,0xd8,0x9e,0x05,0xb6,0x74,0x11,0x94,0xef,0x4f,0x8f,0xa1,0xc6,0x8c,0xdb,0xc3,0x27,0x4e,0xa3,0x30,0x94,0xf5,0xe8,0x2a,0x18,0x0a,0x51,0x9b,0x79,0xb2,0x1f,0xc3,0xa0,0x26,0xa9,0xf5,0xc4,0x9e,0x39,0xda,0x6a,0x53,0x8f,0x8c,0x4c,0x54,0x50,0x81,0xa0,0x0a,0xd3,0x7c,0x99,0x91,0xc7,0x3e,0x56,0x7d,0x53,0x8c,0x3c +.byte 0x51,0x44,0xa5,0x22,0x9d,0xd2,0x9b,0x13,0xcf,0xb8,0x0c,0xb8,0xd4,0xaa,0xb4,0xaa,0x8d,0xab,0x7c,0x06,0xca,0xbb,0x85,0xac,0x01,0xee,0xef,0xe7,0x74,0xd5,0x0d,0x64,0x91,0x1c,0xde,0x6c,0x05,0x37,0x1e,0x23,0x05,0x7e,0x38,0xdc,0x17,0xaf,0xa7,0x95,0x85,0x1f,0xaf,0xc8,0xe1,0xc2,0xda,0xda,0xf1,0x14,0x56,0x66,0x68,0x70,0x36,0x38 +.byte 0x7b,0xb8,0x22,0x9f,0xc4,0xeb,0x5d,0x76,0x97,0xc5,0xa3,0xb9,0x06,0x86,0x4f,0x20,0xab,0x7d,0xce,0x7d,0x78,0x59,0xc5,0x1f,0x73,0x81,0xf6,0x6d,0xb4,0xcc,0x10,0xc5,0x4d,0xe3,0x81,0xaf,0xbc,0x37,0x42,0x28,0x5f,0x51,0x1e,0xaa,0xc7,0x81,0x20,0xc3,0x89,0x35,0xf1,0x74,0x3a,0xe8,0x04,0x24,0xef,0x8b,0x70,0xe1,0x74,0xdf,0x87,0xd5 +.byte 0x3c,0x32,0x32,0x7d,0x03,0xd7,0xda,0x6d,0x8b,0x25,0x8d,0x11,0xa3,0xc2,0x27,0xdc,0xa3,0xfc,0xdf,0x70,0xa4,0x41,0xad,0xda,0xce,0x12,0x45,0x14,0xa1,0x96,0x16,0xd8,0x54,0x89,0x9e,0x78,0x7f,0x23,0x12,0xd1,0x15,0x08,0x7f,0xbd,0xf0,0x9a,0xf1,0x5b,0x07,0xd5,0xbc,0xab,0xab,0x15,0xae,0xda,0xf1,0x26,0x12,0x4e,0xd6,0x6c,0x35,0xc1 +.byte 0x6e,0x27,0x4d,0xa8,0x71,0x51,0x1e,0xae,0xa8,0x35,0x26,0x06,0x18,0x03,0xd8,0xae,0x9e,0x8b,0x07,0x30,0x10,0xfb,0x47,0x05,0x02,0xcc,0x0a,0xbd,0x57,0x43,0x15,0x0a,0x7a,0xb5,0x30,0x0b,0xa6,0x3c,0xa8,0xc9,0xf5,0x68,0xe1,0xfb,0xd1,0xe0,0xe7,0x44,0x6c,0xb4,0x44,0xb6,0xd1,0x2b,0x30,0x5e,0x17,0x89,0x40,0xcc,0x10,0x8f,0x97,0x8a +.byte 0xf3,0xf4,0x52,0x55,0xc4,0x8e,0x46,0xe5,0x24,0x0b,0x2a,0x5d,0x84,0xc1,0x4e,0xa8,0x5a,0x53,0xa8,0xce,0xc6,0x3f,0xa2,0xaa,0x3a,0x8f,0x51,0xed,0x4c,0xa6,0x34,0x6a,0x8c,0x18,0x9b,0x36,0x49,0x40,0x34,0xa3,0xe4,0xd8,0x3c,0x8a,0xfc,0x41,0xc9,0x35,0xfe,0x6e,0x3e,0x29,0xbc,0x04,0x61,0xaf,0x04,0x03,0x43,0x79,0xb5,0x77,0x27,0x25 +.byte 0xbe,0x85,0xc9,0x56,0xa4,0x17,0xc4,0x27,0x3d,0x53,0x1b,0x49,0x86,0xb2,0xb6,0x52,0x62,0x12,0x5d,0xe9,0x47,0x6f,0x65,0x78,0xf8,0x95,0x63,0xbc,0x73,0x6d,0xa6,0xb9,0xcd,0x17,0x39,0x56,0xb0,0xab,0x3a,0x15,0x5f,0x9a,0x98,0xfb,0xcd,0x51,0x4a,0x35,0x21,0xaf,0x07,0x4a,0x3d,0xfd,0x39,0x11,0x42,0xed,0xfc,0x7e,0x10,0x24,0xa5,0x0c +.byte 0xb2,0x4f,0x27,0xe4,0x78,0x32,0xfe,0xfc,0x8e,0x46,0x68,0xbb,0x2e,0x85,0x87,0x0f,0x01,0xde,0x1c,0x02,0xdd,0x82,0xa0,0x9e,0x30,0x31,0x8d,0x86,0x36,0x33,0xa6,0x59,0x16,0x78,0xae,0x1f,0x1d,0x27,0x0b,0x29,0x42,0x16,0x93,0x3b,0xe6,0xfb,0x8d,0xd5,0x48,0x42,0x61,0x39,0x5b,0xf7,0xea,0xd0,0x6f,0x67,0xd9,0x03,0x72,0xed,0x54,0xe1 +.byte 0xab,0x3f,0xa0,0xdc,0x4b,0x19,0xe6,0xe3,0xfe,0x5f,0x65,0x64,0x4c,0xa9,0x5c,0x52,0x36,0xb3,0x65,0x28,0x3e,0xe5,0x07,0x50,0xed,0xec,0x2f,0xc9,0xff,0x47,0x27,0xf6,0xfe,0xb8,0x60,0x60,0x52,0xe5,0xec,0x3c,0x4f,0x69,0x9f,0xaa,0x06,0x8a,0x99,0x9f,0xac,0xfc,0x0a,0x6f,0x8a,0xa4,0x0e,0x5c,0x58,0xb4,0x09,0xba,0x93,0x95,0x94,0x12 +.byte 0x9b,0x23,0x4f,0x93,0x28,0x6d,0xd0,0x76,0xfd,0xc9,0x87,0x3b,0xf1,0x8c,0x7d,0x56,0x84,0x5a,0x04,0x08,0x30,0xf7,0xf6,0x52,0x15,0xba,0xd6,0x7a,0x39,0x8c,0x5a,0xbf,0xeb,0x02,0x6d,0x31,0x30,0x92,0xbc,0xe2,0x07,0x21,0x16,0x96,0x70,0x66,0x00,0xe0,0x04,0xc5,0xa8,0xe4,0x08,0x6d,0x08,0x69,0x35,0xe2,0xb1,0x83,0x03,0x37,0xca,0xff +.byte 0x06,0x37,0x80,0xd5,0x1a,0xc5,0x31,0xfc,0x9a,0xb0,0x8a,0x4b,0x58,0xf3,0x00,0x4e,0xa4,0xfe,0x9e,0xe0,0x60,0xc7,0x3d,0x2c,0x52,0xb5,0x39,0xf0,0xa4,0x88,0x39,0x37,0xa5,0x26,0x8a,0xa3,0xe6,0x31,0xce,0xf3,0xa1,0x54,0x73,0xe7,0x69,0x38,0xef,0xa2,0xab,0x52,0x50,0x1a,0x45,0xcc,0x29,0x9c,0xb6,0xf4,0xde,0xc2,0xfe,0x7a,0x26,0xf7 +.byte 0x7a,0x6e,0x07,0xb6,0xd8,0x3f,0x77,0x60,0x35,0xae,0x6a,0x90,0xd6,0xb8,0x37,0xed,0x73,0x59,0x54,0xd9,0x0c,0x87,0x0e,0x81,0xef,0x69,0xc7,0xd4,0x8f,0x00,0x74,0x57,0x12,0xcf,0xa1,0x76,0xe8,0x45,0xf5,0x9a,0x4f,0xe2,0x5d,0x8a,0x89,0xb1,0x8b,0xea,0x9c,0x0a,0x1e,0x00,0x61,0x3b,0x66,0xbd,0xb5,0xd6,0xff,0xa3,0xff,0x52,0xc2,0x35 +.byte 0x81,0x05,0x08,0x2b,0xf9,0x52,0xda,0x74,0xd1,0x76,0x13,0xba,0x28,0x4c,0xb1,0xb1,0x82,0x5b,0x4e,0x79,0x39,0x22,0xf9,0x96,0x91,0x07,0x4f,0xf9,0xf2,0x25,0x25,0xb1,0x3e,0xda,0x07,0x5c,0x01,0x7b,0xfa,0x3e,0x95,0x92,0x1d,0xf8,0x44,0x06,0xc1,0xed,0x64,0x74,0x14,0x84,0x25,0xee,0x75,0xaf,0xe3,0x7c,0xd3,0xbe,0x7a,0x51,0x6b,0x80 +.byte 0x20,0x43,0x20,0x10,0x5f,0xf5,0xfc,0xd5,0xe8,0x06,0x43,0xad,0x10,0x6b,0x67,0x48,0xca,0xca,0x6e,0x3e,0x1c,0xdf,0x8f,0x7a,0x65,0xc8,0x5d,0xba,0x3b,0x67,0xeb,0x1f,0xc4,0x37,0xad,0xef,0x73,0x9e,0x18,0x8e,0xc1,0x99,0xaf,0x75,0xd3,0x91,0x73,0xc3,0x3a,0xb2,0xfe,0xff,0x30,0x81,0xc4,0x4f,0x37,0x37,0x23,0x96,0x17,0xf1,0xa2,0x9b +.byte 0x55,0x6e,0xd6,0xb3,0xc4,0x98,0xa3,0x32,0xb6,0xff,0x86,0x87,0x77,0xf4,0xad,0x16,0x3e,0xf0,0x24,0x01,0xb4,0x8e,0x1e,0x0f,0x10,0xa4,0x2e,0xe4,0x79,0xe6,0x88,0xe7,0x09,0x58,0x5e,0x97,0xad,0x0d,0x72,0x05,0xbf,0x2f,0x3f,0x99,0xee,0x8a,0x84,0xc3,0x62,0x43,0x52,0x6d,0xab,0x66,0xcf,0x9f,0x4e,0xf2,0x0d,0x13,0x15,0x49,0x84,0x5e +.byte 0x6c,0x8d,0x2d,0xef,0x53,0x16,0xa0,0x63,0xbe,0x05,0xb8,0x9b,0x23,0xca,0xca,0xb8,0xdd,0xbc,0x96,0x68,0x35,0x43,0x63,0x30,0x8e,0xaf,0x53,0x98,0xe2,0x76,0xe8,0x89,0x00,0x29,0x11,0x70,0xd5,0x94,0xbd,0x78,0xff,0xf6,0x88,0x4a,0x3d,0x99,0xd9,0x7e,0xdf,0xa8,0x33,0x92,0xa2,0xc0,0x32,0x42,0x73,0x08,0xd4,0x55,0x5d,0x18,0x93,0xca +.byte 0x7e,0x33,0xe3,0x51,0xc7,0xb7,0x24,0x62,0x69,0xf4,0xab,0x36,0xe3,0x22,0x10,0x9b,0xe0,0xbd,0x48,0x65,0x30,0x9c,0xfe,0xeb,0x3f,0x7f,0x22,0x67,0xcc,0x87,0x5a,0x71,0xb0,0xd1,0x19,0x82,0x1c,0xb2,0xf1,0x73,0xd2,0xd6,0x3f,0xef,0xe3,0x2f,0x25,0xf3,0x8b,0x21,0x4e,0xbf,0x0e,0xc1,0xd2,0x8a,0xbb,0x04,0xde,0xcf,0xd1,0x77,0xba,0xaa +.byte 0xc7,0x41,0x68,0xce,0xc4,0x64,0xf9,0x3a,0x2f,0x1c,0x0b,0x22,0xf8,0x60,0x09,0x76,0x31,0x88,0x62,0x3a,0xf3,0x49,0xe6,0xda,0x4b,0xd3,0xf3,0x35,0xaa,0x56,0x4c,0x2f,0x7f,0x03,0x3e,0xf8,0xcb,0x5e,0xed,0x37,0xa1,0x29,0xe8,0x20,0xf5,0x4a,0x32,0x73,0x30,0xfd,0xd1,0xf6,0xb4,0xa1,0x30,0x87,0xcb,0x21,0x63,0xf5,0x3a,0xad,0x05,0x1a +.byte 0x34,0xf5,0x32,0xf6,0x02,0xf3,0x10,0x52,0xfd,0x86,0x37,0x1f,0x5d,0xe4,0x2e,0x31,0xcb,0xb8,0x4c,0xeb,0xdd,0xea,0x01,0x0d,0x94,0x13,0xa8,0x8f,0xf0,0x52,0x4e,0x0d,0x4f,0xd1,0x24,0xeb,0x0f,0x2b,0xb1,0xaa,0xc5,0xc8,0x52,0xb9,0xbe,0x21,0x48,0x2a,0x53,0x98,0xe4,0x00,0x72,0x64,0xdb,0x44,0x48,0x36,0x60,0xe7,0x81,0xdc,0x25,0x85 +.byte 0x4d,0xaf,0xa8,0x0d,0xfb,0x07,0x76,0x4f,0x6a,0x30,0x3c,0x7c,0x3b,0x36,0xa9,0xf8,0xae,0x81,0x03,0xe9,0x19,0xdf,0xdb,0xd9,0x7f,0x59,0xe0,0xd7,0x50,0x14,0x9f,0x67,0x3d,0xc7,0xdf,0xa8,0x44,0x86,0x29,0x81,0x65,0x44,0x9e,0x37,0x27,0xdd,0x2f,0x33,0x59,0xf7,0xaa,0x17,0x34,0x8c,0x1c,0xa7,0x8e,0x06,0x46,0xf1,0x43,0x87,0xa9,0xb7 +.byte 0x85,0xec,0x92,0x0d,0xdd,0x78,0x55,0x99,0xfb,0x1c,0x66,0x85,0x0d,0x59,0x31,0x00,0xbc,0xd9,0x9b,0xbb,0xfb,0xfc,0xb2,0x36,0x3c,0x34,0x8f,0x4a,0xb6,0x74,0x9c,0x32,0x6f,0x69,0x6c,0x3e,0x68,0x7e,0xec,0xeb,0x58,0x6a,0xf5,0xa2,0xbb,0x04,0x68,0xdb,0x8c,0xf0,0x04,0xba,0xf7,0xf7,0x50,0xd0,0x60,0xba,0x45,0x73,0x0f,0x2c,0x2f,0x97 +.byte 0x58,0xcc,0xa2,0xbe,0xfe,0x5e,0xf9,0x44,0x03,0x8b,0x99,0x56,0xb0,0x4f,0xe1,0xd0,0xa5,0x9f,0xd1,0xfc,0x95,0x44,0x4b,0x01,0x24,0xc0,0x4c,0x91,0xc1,0xb5,0x99,0xe7,0x5f,0x2f,0xcf,0x5d,0x4f,0x64,0x6e,0x54,0x51,0x0c,0x35,0x5f,0xa8,0x7b,0x27,0xa0,0x7d,0xb1,0x90,0xc2,0xdd,0x50,0xef,0x09,0x6f,0xed,0x25,0x6b,0xf5,0x6f,0xc1,0x97 +.byte 0xea,0xd5,0x49,0xf5,0x40,0x60,0xc3,0xbb,0x0d,0x82,0x15,0xa5,0xf7,0xfe,0xa1,0x20,0x13,0x9e,0xbb,0x43,0x58,0xba,0xd2,0xe8,0x89,0xaa,0xfc,0xe0,0x47,0x6b,0xac,0x91,0x8b,0xeb,0x4f,0xf5,0xda,0xf5,0xc8,0x11,0x64,0x7c,0x8d,0x43,0x92,0xf2,0x84,0xeb,0xfb,0x5c,0x1b,0x6b,0x68,0x8e,0x3c,0x66,0xb2,0xd1,0x8e,0x67,0x44,0xbf,0x69,0x3b +.byte 0xb9,0x41,0x78,0x8d,0xc8,0x7b,0x81,0x61,0x70,0x6e,0xe2,0xfc,0xd2,0x96,0x31,0x31,0x2f,0x27,0x90,0xf2,0xc4,0xed,0xbd,0xb5,0x0e,0x91,0x7d,0xd0,0xec,0x3c,0xe9,0xcf,0xf2,0x07,0xac,0x54,0x44,0x9a,0x24,0x41,0xcb,0x2a,0x86,0x30,0x18,0xba,0x65,0x59,0x41,0x00,0x59,0xbf,0x3d,0x01,0x8a,0x51,0xe5,0xd2,0x90,0x8c,0x7d,0xd7,0xad,0x71 +.byte 0xdc,0x45,0x62,0x95,0xf9,0x9f,0xe8,0x55,0x6d,0x48,0x22,0x32,0xcb,0x9a,0x55,0x65,0xe5,0xdf,0xee,0x22,0x99,0x91,0xd7,0xed,0x33,0x04,0x72,0xc7,0xc5,0xb2,0x56,0x5e,0x8f,0x38,0x4b,0xd0,0x61,0x4b,0x4b,0x04,0x4c,0x4c,0x2b,0x23,0x00,0xd4,0x5c,0xdd,0x84,0x8d,0x73,0xf4,0xf7,0xef,0xd5,0xdb,0x2b,0xec,0x54,0x86,0x37,0x01,0x64,0x56 +.byte 0xef,0x73,0x9f,0xb4,0xb6,0xd2,0xf4,0x33,0x93,0xbd,0xd7,0xd9,0x6e,0x8f,0x60,0x85,0xbc,0xa6,0x16,0x3f,0x3f,0xc3,0xd7,0xfc,0xb6,0x82,0xf0,0xe5,0x1e,0x2c,0x51,0x48,0x27,0x50,0x3e,0xdb,0xe6,0x86,0x3b,0xa1,0xfa,0x09,0x39,0x04,0x6f,0xb1,0x85,0xbd,0xda,0x4d,0x2f,0xd1,0x40,0x6f,0x2e,0x2b,0xf2,0x9a,0x4d,0x8e,0xb2,0xc5,0x6e,0x21 +.byte 0xf9,0xdd,0xc9,0x2e,0x81,0x18,0x7b,0x88,0xb9,0x86,0x36,0xe5,0xb2,0xdd,0x19,0xb4,0x7f,0x5d,0xc0,0x20,0x34,0xdc,0x63,0x7d,0x8c,0x80,0x0f,0xe6,0x85,0x14,0xbb,0x87,0x6c,0x3e,0x39,0x53,0x60,0x3d,0xc5,0x46,0x11,0xa3,0x96,0x60,0x6f,0xe9,0xfe,0x59,0xcc,0xed,0x4d,0xdb,0xa3,0xa1,0xf1,0x71,0x0b,0xb0,0x1f,0x89,0x4c,0x32,0x59,0xa5 +.byte 0x7d,0xf7,0x3e,0x5b,0xca,0xa4,0xe1,0xc3,0x50,0xac,0xdf,0x00,0xad,0x45,0x59,0x9e,0x23,0x5f,0x52,0xbd,0x36,0x78,0x55,0xcf,0x90,0x91,0x41,0x14,0xdb,0x76,0x3a,0x43,0x39,0x89,0xe1,0x93,0xc8,0x66,0x91,0xc7,0x42,0x06,0x6f,0xbb,0x35,0x1e,0x07,0x52,0x5a,0xe4,0x41,0x9f,0x65,0xe0,0xdc,0x49,0x8c,0xd3,0x5f,0x16,0x21,0xc9,0xb8,0x8a +.byte 0xc2,0x56,0x91,0xcb,0x18,0x6b,0x38,0x7b,0x3a,0xeb,0x91,0x3c,0x0d,0x6a,0x1f,0xd6,0xc6,0xd7,0x56,0x8d,0xd3,0x76,0x1c,0x9d,0xed,0x3d,0xb6,0x92,0x71,0x6e,0x73,0xc6,0xb8,0xa2,0x1c,0x25,0xb9,0x3c,0xd4,0x41,0xf7,0x8f,0x39,0x60,0xe6,0x27,0xf2,0xc6,0x5f,0x56,0x08,0x7c,0xd3,0x16,0x9d,0x06,0xc0,0xca,0x3d,0xc6,0x61,0xb0,0x21,0x51 +.byte 0x6d,0xca,0x82,0x59,0xe6,0xbb,0x99,0xa2,0x4f,0xfc,0x71,0x66,0x2b,0x4e,0x40,0x62,0x97,0x34,0x73,0x4a,0xe5,0xf0,0x4f,0x4c,0x36,0x4c,0xdb,0x03,0xa9,0x87,0x29,0x21,0x5d,0x91,0x5b,0x89,0xb8,0x3d,0x65,0xc7,0x58,0x0a,0x81,0xb5,0x3e,0x22,0xa1,0x57,0x95,0xbe,0x60,0xf5,0xeb,0xb3,0x49,0xdf,0xd9,0xa2,0x31,0x36,0x5f,0xb2,0xa6,0xf6 +.byte 0x66,0x88,0x88,0x8e,0xa3,0x2c,0xac,0x5e,0xa1,0x33,0x16,0x64,0x08,0x47,0xc8,0xbc,0xc2,0xe9,0xdb,0x73,0x57,0x50,0xd4,0x24,0x01,0x26,0x26,0x04,0x4f,0x8a,0xc0,0x7a,0x97,0x14,0xf2,0xd0,0xbe,0x03,0xea,0x8a,0x25,0xcb,0x98,0xe7,0xbd,0x67,0xff,0x32,0xfd,0x8a,0x7d,0x11,0xe1,0xb2,0x91,0xb5,0xa0,0xb6,0x3c,0x2c,0xb3,0x6e,0x35,0x61 +.byte 0x86,0xbc,0x37,0x15,0xf8,0x3b,0x0d,0x84,0x83,0x69,0x76,0xb0,0xaa,0x8f,0x4f,0xca,0xba,0x54,0xfe,0x42,0xc8,0xba,0x9a,0xd5,0x53,0x69,0x67,0x29,0x23,0x3a,0x6a,0x75,0x97,0xb4,0x29,0x2e,0x62,0xe3,0x95,0x82,0xb3,0xa0,0xa1,0xb7,0xdf,0xc2,0x66,0x4d,0xdd,0x0d,0xda,0xda,0xc2,0x42,0xe0,0x69,0xb1,0xab,0x3c,0x44,0x39,0x11,0x3b,0x0a +.byte 0xd6,0x96,0x2c,0x36,0xb0,0xa0,0xed,0x3d,0x0c,0x63,0x8b,0x90,0xe4,0xb9,0x5f,0x4c,0x27,0x70,0x87,0xb3,0x54,0xe2,0x36,0x74,0x6f,0x3e,0x22,0xb1,0x3b,0x1b,0xba,0xdb,0x1c,0xbd,0x9c,0x6d,0x84,0xbd,0x33,0xfb,0xc0,0x98,0x4c,0xcf,0x7a,0xe8,0x41,0xdb,0x32,0x1f,0xb7,0x64,0x19,0xdb,0x87,0xe7,0xf9,0x52,0x40,0x8c,0xc6,0x89,0x98,0x15 +.byte 0x69,0xde,0xfa,0x29,0x9a,0x0f,0xaf,0xb0,0xad,0x71,0x35,0xab,0xab,0x34,0xe0,0xf4,0x03,0x24,0x6f,0x94,0x38,0x87,0xba,0x68,0xd5,0x1f,0x58,0x88,0x3e,0x12,0x20,0x57,0x43,0xde,0xd0,0xbc,0xaa,0x31,0x8f,0xbc,0x88,0xa0,0xdf,0x5a,0xcc,0xd1,0xba,0x9c,0x18,0x80,0x4e,0x8f,0x68,0x91,0x9c,0x57,0x3b,0x5a,0x62,0xc7,0x29,0x3e,0x49,0xc7 +.byte 0x23,0x26,0xfd,0x9e,0xd0,0xb0,0x4f,0xd4,0xb2,0xa9,0xa8,0x4c,0x66,0x54,0x52,0x75,0x6b,0xbf,0x63,0x76,0x49,0x3b,0xa3,0xb2,0x8f,0x87,0x9d,0xb4,0x8f,0x07,0x3c,0x8e,0xae,0xe1,0x0e,0x9a,0x86,0x90,0x58,0x73,0x8a,0xb3,0xa9,0xab,0xe6,0x27,0xd7,0x70,0x94,0x77,0x12,0xdc,0x71,0xdf,0xcf,0xba,0xdd,0x85,0xfe,0x28,0xaa,0xcd,0xcc,0xe8 +.byte 0x5f,0xd4,0xd8,0x45,0x6f,0x20,0xa8,0x5e,0x40,0x91,0x3b,0xd7,0x59,0x92,0xb8,0x7d,0x2b,0x8b,0x38,0xbd,0xfe,0x7b,0xae,0x5c,0xee,0x47,0x9b,0x20,0xb7,0xf3,0xad,0x75,0xa9,0xe1,0x96,0xc8,0xb2,0x30,0xfe,0x0c,0x36,0xa2,0x02,0xf4,0x3b,0x30,0xfd,0x91,0xfa,0x5f,0xd6,0x18,0x1a,0xcb,0xd2,0x26,0xbb,0x67,0xbe,0x1c,0x99,0xa5,0x4f,0x57 +.byte 0x40,0xb5,0xed,0xd6,0x84,0xfd,0x6b,0x00,0xc8,0xe7,0x18,0x1a,0x9f,0xf7,0x3b,0xd1,0xcc,0x12,0xeb,0x9d,0x61,0xf0,0x8d,0x64,0x08,0x93,0x61,0xc4,0x3e,0xdb,0xda,0x15,0xb1,0xd6,0x2c,0x84,0x2a,0xd8,0xd2,0xa1,0x66,0x4e,0xc9,0xd6,0xbf,0x7e,0xb6,0x22,0xfa,0x35,0x5e,0xdc,0xc0,0x31,0x02,0xb8,0x17,0x46,0x9e,0x67,0xd3,0x6a,0x8f,0x33 +.byte 0x85,0xc3,0xfe,0x36,0xbc,0x6f,0x18,0x8a,0xef,0x47,0xf1,0xf2,0x6e,0x15,0x6c,0xb1,0x4a,0x4b,0x13,0x84,0xd5,0x1b,0xf9,0xa2,0x69,0xcd,0xc7,0x49,0xce,0x36,0x8e,0xe5,0xd5,0x35,0x05,0x7c,0x7f,0xc6,0x15,0x29,0x2e,0x64,0xa6,0x91,0x9d,0xe5,0x9d,0x90,0xe7,0x26,0xec,0x75,0x19,0x58,0x57,0xf2,0x19,0x7b,0x24,0x7d,0x19,0xd3,0x72,0x69 +.byte 0xaa,0xa2,0x8c,0xe3,0x3d,0x38,0xb9,0xf0,0x5b,0xe9,0x3b,0xaa,0x96,0xef,0x2c,0xfc,0xf5,0x13,0xa6,0xa9,0x57,0x8c,0xa9,0x3a,0xc1,0xf0,0x2d,0x57,0x06,0x08,0xe3,0x9c,0xfe,0x82,0x8a,0x6a,0x79,0x5b,0xef,0x2b,0x81,0x83,0x01,0x53,0xac,0xdc,0x79,0x93,0x9b,0x23,0xd4,0xae,0x17,0x6f,0x62,0xaa,0x33,0x41,0xa6,0x31,0x1c,0x7b,0x46,0x2b +.byte 0x17,0xd3,0x6f,0x66,0x73,0x54,0xee,0xa1,0x08,0xee,0x8f,0x0f,0x0e,0x53,0xa7,0x49,0x17,0xdb,0x35,0xaf,0x4e,0x94,0x87,0x8e,0xff,0xf4,0x2b,0x29,0x01,0x45,0xa3,0x0a,0xd9,0x13,0x38,0x09,0x46,0x2c,0x56,0x97,0xd7,0xee,0x24,0x43,0xd1,0x20,0xed,0x38,0xde,0x52,0x13,0x38,0x06,0xd3,0x97,0xc7,0x48,0x8b,0x72,0x0a,0xc5,0xca,0x75,0x2c +.byte 0x04,0x9e,0xee,0x14,0xe7,0xda,0x59,0xc2,0x54,0x7a,0x72,0x55,0x35,0x00,0x93,0xb7,0xb9,0x81,0x01,0x46,0xae,0x43,0x81,0x34,0xd7,0xb4,0x7a,0xfc,0xfc,0x98,0x2b,0x29,0xe5,0x5e,0x9d,0x8e,0xef,0xd4,0x44,0x9d,0x9a,0xbe,0xdb,0x83,0x33,0x18,0x9e,0xbd,0x0f,0x34,0x4d,0xd9,0x34,0xe0,0x2c,0x1f,0x10,0xaa,0x06,0x5e,0x54,0x51,0x72,0xec +.byte 0xbf,0x6b,0x3e,0xb9,0xdd,0x37,0xc3,0xe1,0xbe,0xbe,0x1d,0x86,0xde,0x12,0xca,0x82,0xc5,0xe5,0x47,0xf8,0xbe,0xef,0xb6,0x79,0xd5,0x3c,0x69,0x0a,0x35,0x3e,0xd3,0xf8,0xaf,0x5b,0x8e,0x69,0xff,0xb2,0xf7,0x91,0xc2,0x70,0x22,0x97,0x1c,0x5c,0x56,0x25,0x5a,0xcf,0x31,0x7a,0x37,0xce,0xc7,0xf2,0x98,0xdc,0xb5,0x58,0x71,0x5a,0x60,0xe2 +.byte 0xfe,0x4f,0xf3,0xe2,0x2a,0xca,0x22,0x3e,0x07,0xc2,0xea,0x23,0xc8,0x04,0x97,0x7f,0xca,0xf6,0xf8,0x12,0x06,0x88,0x81,0xee,0xb7,0xdd,0x56,0x9e,0x0f,0x36,0xd3,0x09,0xa8,0x74,0x4d,0x8b,0x8f,0x31,0x64,0xbe,0x9d,0x7b,0x68,0x50,0xc8,0x64,0x40,0x3b,0x0c,0x04,0xb9,0x4b,0x9e,0xff,0x7e,0x5d,0xd8,0x57,0xa0,0xe5,0x6d,0xc2,0x37,0xe7 +.byte 0xd1,0xd9,0x96,0xaa,0x16,0x3e,0xa2,0x9d,0x32,0xe7,0x1e,0x11,0x6e,0x41,0xe2,0xa0,0xe1,0x6f,0x32,0x6d,0xd5,0x38,0x0c,0x27,0x27,0xa9,0xc2,0x04,0xc6,0xe7,0x8d,0x7d,0x7b,0x30,0xbe,0x54,0x6b,0x82,0x37,0x39,0x53,0x54,0xc9,0xac,0xcb,0xd1,0x31,0x79,0xd4,0x7b,0x85,0x07,0xf4,0xf4,0x5d,0x33,0xc7,0x91,0x4e,0xe5,0x13,0x78,0x09,0x42 +.byte 0x29,0x48,0xaf,0x82,0xb1,0x88,0xd4,0xd3,0x57,0x50,0x38,0xa7,0x66,0x41,0x63,0x34,0x2a,0x3c,0x5e,0x8f,0xc4,0xc1,0x00,0xa1,0x22,0xbe,0x5e,0x64,0xb0,0x60,0x9b,0x42,0x9d,0xc6,0x59,0x5c,0xcc,0x29,0x6f,0x64,0x5b,0x5c,0x0f,0xb2,0xae,0x21,0x0c,0x9a,0x6a,0x19,0xb9,0xa6,0x32,0xf8,0xdc,0x82,0xea,0xba,0x27,0xcf,0x42,0xd3,0xde,0x78 +.byte 0xfe,0x9c,0xa5,0x36,0xb6,0x24,0xb6,0x0d,0x5b,0x67,0x6c,0xf5,0x16,0xbf,0x67,0x54,0x4f,0xe4,0x83,0x29,0x75,0x42,0x9a,0xbb,0xd5,0xe7,0x01,0x1f,0xbd,0x80,0x1a,0x7a,0xb6,0xe1,0x2b,0x5d,0x71,0x93,0x00,0xad,0xf6,0x11,0x8d,0x67,0xdc,0x9c,0x8f,0xf0,0x09,0x3f,0xf9,0xa4,0xd6,0xe0,0xdd,0x95,0xea,0xfb,0x71,0x76,0x21,0x31,0x6d,0x48 +.byte 0x0a,0x27,0xa8,0xa6,0x3a,0x7f,0x42,0x6b,0x7e,0xd7,0x6e,0xd5,0x42,0x97,0xad,0x55,0xae,0x26,0x3c,0xde,0x3f,0xaf,0xfd,0x1d,0x6d,0xd3,0xeb,0x84,0xad,0x6d,0xd1,0x4a,0x85,0x1a,0xf7,0x99,0xa4,0xd0,0x48,0xfb,0xf6,0xfe,0xc6,0xea,0x61,0x77,0xe2,0x56,0x87,0xc1,0x36,0x44,0xb4,0xe3,0xd7,0xd9,0x6d,0x3e,0x1b,0xf4,0x72,0x3e,0xfe,0xa5 +.byte 0x47,0xf8,0x3f,0x1a,0x6e,0x43,0xf5,0x67,0xfe,0x90,0x96,0x9b,0x52,0xde,0xab,0xfb,0x45,0x7d,0x93,0xea,0xc3,0x40,0xe1,0x5f,0xcd,0xad,0x3b,0xe9,0x4e,0x36,0xc5,0x38,0xf4,0x66,0xde,0x4b,0xc8,0x2a,0xc3,0xa2,0x3a,0x2a,0xf1,0xd1,0xe8,0x01,0x07,0x37,0xca,0x42,0xbf,0x4f,0xd8,0xc5,0x50,0x93,0x1a,0x01,0x1d,0x51,0x41,0x6e,0xbf,0x68 +.byte 0x93,0x2e,0xdc,0x41,0x23,0xf3,0x13,0xe7,0x09,0xfa,0x39,0x6d,0xee,0x41,0x49,0xbb,0x78,0x04,0xcf,0xc9,0xbb,0x11,0xaa,0x57,0xb5,0x3e,0x4c,0x3a,0x77,0xb7,0x0b,0x38,0x34,0x48,0xd0,0x99,0x20,0x55,0xcd,0x43,0x2f,0x68,0x66,0xb0,0xe6,0x75,0x41,0xe4,0xae,0xfd,0x96,0xe8,0x01,0x4c,0x0b,0x5c,0xbc,0x4f,0x45,0x70,0x08,0x9e,0xf7,0x68 +.byte 0x9e,0xbb,0xe5,0x39,0x20,0x3f,0xbe,0xd3,0xe3,0x95,0xba,0x98,0xd5,0x12,0x2e,0x87,0xd4,0xf4,0x12,0xa2,0xcb,0xd4,0x51,0x53,0x93,0x67,0x06,0xf1,0x21,0x0e,0x92,0x8f,0x9f,0x9e,0x6c,0x16,0xa4,0x2c,0x6d,0xb0,0xd0,0xe1,0x87,0x2f,0x09,0x2c,0x8f,0x4b,0x89,0x1f,0xab,0x66,0xf1,0xcd,0x6e,0x67,0xaf,0x07,0x99,0x18,0x1b,0xda,0xc8,0x65 +.byte 0x81,0xa3,0x37,0x8a,0xad,0xe4,0x1d,0xfd,0x82,0xa0,0xf1,0xe1,0x1e,0x8d,0x0b,0xf7,0x07,0x7c,0xb3,0x10,0xc8,0x5a,0xa9,0xcc,0xc8,0xd0,0x2e,0x5a,0x71,0x45,0x4c,0x30,0xf0,0x10,0xe0,0xf6,0x0d,0x0d,0x11,0xb4,0x83,0x40,0x75,0xee,0xb9,0x24,0x04,0xe3,0xba,0xb3,0xd3,0x00,0x57,0x71,0x98,0xf0,0x4b,0x35,0x8d,0xd8,0x71,0xa0,0xcc,0xaf +.byte 0x46,0x54,0x67,0x65,0x70,0x0b,0x9c,0x61,0xf8,0xd4,0xb2,0x35,0xfd,0xcf,0x2b,0x3a,0x48,0x5b,0x03,0x86,0xd8,0x13,0x48,0x8a,0x55,0xa5,0x4d,0xef,0x42,0x41,0xbb,0x6a,0x8c,0x92,0x46,0x87,0x82,0x09,0x43,0xf3,0x94,0x1d,0x23,0x36,0xfe,0x6f,0xb8,0x9f,0xfa,0xf9,0x92,0x27,0x3c,0xcc,0x47,0x89,0x5c,0x7f,0x81,0x42,0x74,0x12,0x14,0xff +.byte 0x98,0x63,0xc0,0xfb,0x70,0xff,0xc7,0x65,0x5a,0xc3,0xb9,0x74,0x1b,0x71,0x3c,0x2c,0x47,0x79,0x07,0xb9,0x3c,0xc2,0x5f,0x48,0x4f,0xbd,0xaf,0x03,0x05,0x57,0xa9,0x84,0x33,0xc8,0x0d,0xd5,0xac,0x42,0xdb,0x4b,0x57,0x46,0x41,0xf0,0xe4,0x08,0x0d,0xf3,0x43,0x41,0xa5,0x14,0xb7,0xcd,0x64,0x23,0xc9,0xfe,0xff,0x12,0x97,0xc6,0x2f,0x8d +.byte 0x9e,0xf2,0x1d,0x33,0x26,0x3c,0x57,0x17,0xe1,0x7b,0x92,0x3f,0xb6,0xf4,0xd9,0xf8,0xe0,0x37,0xe6,0x18,0x7d,0xa7,0x8a,0x1e,0xe8,0xd8,0x56,0xa6,0x63,0xdf,0xa3,0x99,0x16,0x74,0x48,0x01,0xaf,0x95,0x55,0x40,0xce,0xa8,0x0d,0x30,0x01,0x09,0x40,0xc9,0x9d,0x3d,0xdf,0x4e,0x00,0xe0,0x2a,0xe6,0xdb,0xa2,0x79,0x42,0x57,0xd0,0x3d,0x81 +.byte 0x7f,0x67,0x3a,0xa9,0x63,0xb3,0xd4,0x60,0xa7,0xab,0x54,0x46,0xb0,0xbe,0xb0,0x83,0x72,0xec,0x47,0x0f,0xc7,0xd1,0xed,0x16,0x96,0xbc,0xa5,0x62,0x38,0xdb,0x88,0x2b,0x25,0x26,0x27,0x56,0x7f,0x46,0x39,0xe8,0x4e,0xc0,0x6c,0x62,0xf8,0x80,0x68,0x56,0x8a,0x93,0x51,0x95,0x77,0xe3,0x11,0x7b,0xaf,0xc4,0xcf,0x34,0x5a,0xd5,0x26,0xfc +.byte 0xa2,0x18,0xb0,0xc0,0xa5,0x8b,0x25,0x70,0x40,0x70,0x29,0xc3,0xda,0x80,0x3d,0xe2,0x59,0x49,0x7f,0xdd,0x62,0x6e,0x5a,0xe6,0x27,0x73,0xce,0xb6,0x32,0x37,0x5f,0x73,0x12,0x2b,0x34,0x84,0xff,0x85,0xe3,0xb5,0x93,0x41,0x47,0xc5,0xf5,0x0e,0x21,0xfb,0x24,0x0f,0xdf,0x7b,0xb4,0x29,0x7f,0x67,0x2a,0x38,0x79,0xf0,0x54,0x8a,0x94,0x68 +.byte 0xe2,0x0b,0xb0,0xd4,0xb2,0xa4,0xe4,0xfb,0x3b,0xe6,0xe7,0x59,0x41,0xbd,0xed,0x62,0xce,0x50,0x1a,0x47,0x92,0x92,0x8d,0x80,0xa6,0x05,0x7a,0xb0,0xce,0x48,0x9c,0xb0,0x64,0xea,0xe0,0xa5,0x77,0xff,0xc1,0x82,0x99,0x7b,0xfb,0x74,0x53,0xfa,0x41,0x9a,0x2c,0xb4,0xbb,0xd2,0x26,0xa1,0x80,0x68,0x17,0xaa,0x8f,0x14,0x52,0xb6,0x5d,0xe0 +.byte 0x69,0x5b,0x31,0xc5,0xf5,0x32,0x0d,0xff,0xa4,0x7b,0x28,0x38,0x9b,0x61,0xfc,0xd0,0x92,0xb8,0x6e,0x23,0x8a,0xf3,0xc7,0x85,0x11,0xb8,0xd0,0x19,0xaf,0xca,0xa7,0xb4,0xcc,0xeb,0x5d,0xf6,0xa1,0x1c,0x56,0xdf,0x78,0x7a,0xe3,0x6a,0xa4,0x07,0x71,0xce,0xf1,0xb2,0xd5,0x38,0x3c,0xfa,0xf7,0x7a,0xbf,0x4b,0x43,0xa6,0xb3,0x4d,0xff,0x82 +.byte 0x96,0x46,0xb5,0xec,0xda,0xb4,0x5e,0x35,0x78,0xeb,0x4a,0x7e,0xc5,0x7b,0x05,0xd4,0xdd,0xf7,0xb7,0xf3,0xf0,0x04,0x26,0x7e,0x5e,0xc1,0x23,0xca,0x7f,0x14,0x27,0xac,0xda,0xe7,0xdb,0x31,0x05,0x9d,0xd4,0xda,0x20,0xc7,0x6d,0x9a,0x47,0x14,0x38,0xbd,0x7c,0xfe,0xbe,0x8d,0x42,0x7c,0xba,0x36,0xe2,0x2c,0x26,0xd2,0x46,0xa5,0x6b,0xbd +.byte 0x6a,0x75,0x6b,0x52,0x8c,0x10,0xc6,0x0e,0x76,0x60,0x46,0xcc,0x93,0x54,0xc4,0x6e,0xc7,0x70,0x5b,0xb4,0x81,0x51,0x56,0x03,0x22,0x33,0x21,0xe4,0x36,0xee,0x01,0xc3,0x0d,0x17,0x23,0x15,0xae,0x79,0xbc,0xe6,0x13,0x0f,0xfc,0x77,0xa2,0x06,0xed,0x76,0x4a,0xf7,0x2d,0x99,0xc8,0x5c,0xfd,0xac,0xd0,0x11,0xe8,0xfa,0x55,0x17,0x56,0x63 +.byte 0x3e,0xd5,0x23,0x71,0xf8,0xe9,0x1f,0x62,0x95,0xae,0x7c,0x2d,0xcd,0xb8,0x6e,0xb0,0xfe,0xf3,0xd0,0xba,0x72,0x8e,0xe3,0x95,0x82,0x00,0x85,0xdb,0x25,0xe4,0xf2,0xaa,0xbc,0x8d,0xb9,0x4d,0x69,0xa4,0xcd,0x39,0x52,0x9e,0x10,0xae,0x90,0xf0,0x74,0x2f,0xc6,0x5e,0x01,0x99,0x03,0xd5,0x88,0x59,0xfd,0x1b,0x80,0x56,0x0a,0x04,0x27,0xd9 +.byte 0x04,0x51,0xb0,0xb7,0x7a,0x65,0x79,0xa8,0xe2,0x6d,0x7f,0xb2,0xba,0x37,0x40,0xa0,0xbb,0xaf,0x15,0x46,0x23,0x5f,0x22,0xd0,0x2c,0x6c,0x7a,0x58,0x76,0x6f,0xb8,0x19,0xfe,0xb5,0x3d,0xf0,0x77,0x00,0x6b,0x4c,0x83,0x36,0x90,0xe6,0x57,0x29,0x6e,0x27,0x76,0xd4,0x7d,0x9a,0x6a,0xf1,0xf6,0x1b,0x1a,0x45,0xf5,0xf6,0x2d,0xb8,0x30,0x33 +.byte 0x65,0x51,0x37,0x26,0xbc,0xf7,0xb7,0xf9,0x56,0x05,0x6b,0xd4,0xd6,0x00,0x1d,0x13,0x15,0x45,0x24,0x0d,0x28,0x69,0xc6,0x50,0xe1,0x48,0x48,0x34,0x69,0x31,0x3c,0x58,0x71,0xd6,0x4a,0xd9,0xda,0x0d,0x28,0xbd,0xe9,0x5d,0x5d,0x8a,0x6e,0x71,0xc0,0x8b,0x7a,0xba,0x17,0x8e,0x82,0xcb,0xe9,0x95,0xc4,0x43,0x37,0xd0,0x58,0xed,0xec,0x77 +.byte 0x1e,0x22,0xf0,0xf0,0x7c,0x9d,0xeb,0x64,0x30,0x7b,0xb2,0x7b,0x86,0xdb,0xef,0x92,0x79,0xd9,0x9c,0x1c,0x1a,0xf6,0x98,0x26,0x18,0xa2,0x83,0x45,0x08,0xd4,0x1d,0x84,0xd4,0x28,0x6d,0x1f,0xb5,0x1f,0xab,0x97,0xc9,0x0d,0x1f,0x83,0x34,0x18,0xa3,0x20,0x63,0x60,0x6c,0xf3,0xd8,0xb2,0x0a,0xd9,0x35,0xa6,0xce,0x44,0x50,0xc6,0xf3,0x91 +.byte 0xe3,0x95,0x89,0x49,0x99,0x32,0x1d,0xf2,0x54,0x39,0x09,0xca,0xd1,0xc4,0x7f,0xa1,0x1d,0xce,0x94,0x67,0xf1,0x88,0x04,0x29,0xcb,0x5d,0xf7,0xfa,0xcd,0x69,0x16,0x17,0x05,0xc3,0x93,0x45,0xbf,0xd3,0x74,0x63,0xdc,0xe2,0x84,0xab,0x27,0x60,0x56,0x61,0x72,0x5d,0xdf,0xb4,0xa4,0x0f,0xb0,0x21,0x82,0x9b,0x73,0x0a,0x11,0x22,0x2d,0x65 +.byte 0xa2,0xff,0x29,0x8a,0x19,0x28,0x4f,0x4f,0xdd,0x64,0x0a,0x48,0x35,0x70,0x30,0x9f,0x41,0x4d,0x0c,0x7b,0xa6,0xcb,0x63,0x83,0xd1,0x79,0xfa,0x5f,0xc9,0x9b,0x6e,0x09,0x12,0x87,0xcd,0x1e,0x39,0xd6,0x40,0x08,0x0f,0xfd,0x79,0xc8,0xcb,0x77,0x8f,0x7a,0x52,0x42,0xc0,0xb2,0xc8,0xa0,0x2a,0xff,0xbc,0x60,0x13,0xbc,0x41,0x4a,0xc6,0x8b +.byte 0x08,0xb0,0x9f,0x75,0x87,0xa1,0x75,0x42,0x4b,0x3a,0xf7,0xf7,0x84,0x39,0xa5,0x88,0x25,0x2d,0x4f,0x73,0x4e,0x30,0x27,0x92,0xea,0x93,0x70,0x5c,0xb5,0xeb,0xb0,0x10,0xda,0x0f,0xaa,0xb3,0x3f,0xb5,0x55,0x64,0x65,0xae,0xb5,0xf8,0x0a,0xe4,0x9f,0x86,0x02,0x6f,0x63,0x8a,0x0b,0x6b,0x82,0x85,0x3c,0x6a,0xdf,0x68,0x4c,0x1e,0xe9,0x5c +.byte 0xd0,0x99,0xe5,0x0c,0xfc,0x63,0xfb,0xce,0x2d,0x63,0xd5,0x7d,0x8a,0x7d,0x14,0x22,0xbd,0x71,0x5e,0x79,0x3f,0x44,0x95,0xe5,0x6c,0x58,0x94,0x84,0x41,0x65,0x52,0x94,0x50,0xec,0xd3,0x2a,0x16,0x88,0xdb,0x71,0xb9,0xe4,0xb6,0xbf,0xc5,0x3c,0x48,0x37,0x62,0x32,0x79,0xbe,0x1d,0xdb,0xc9,0x79,0x37,0x40,0x65,0x20,0x62,0x45,0xb4,0xda +.byte 0x24,0xef,0x33,0xf1,0x05,0x49,0xef,0x36,0x17,0x17,0x0f,0xdc,0x65,0xb4,0xdc,0x57,0xc3,0xc6,0x82,0x57,0x08,0xf2,0x20,0x57,0x5c,0x25,0x0e,0x46,0x75,0xa7,0x4f,0x9e,0xa4,0x00,0xf7,0x79,0xb9,0x0a,0xef,0x4f,0x50,0x79,0xf8,0x59,0x01,0xf2,0x74,0x9f,0x16,0x27,0xa5,0xc1,0x32,0xcc,0x58,0xa7,0x40,0xa1,0xa1,0x26,0x80,0x00,0xb5,0x64 +.byte 0x0a,0xd8,0x53,0x1f,0x72,0xf7,0x60,0xf7,0x0a,0xaa,0xdf,0x31,0x95,0xff,0xfc,0xb4,0xca,0xbc,0xf8,0x2a,0x33,0x20,0x04,0x16,0x1a,0xe7,0xeb,0x22,0xd1,0x25,0xa6,0x03,0xc9,0x9e,0x9e,0xca,0x7a,0x46,0x7c,0xcb,0x8a,0x63,0x4a,0xf0,0x1b,0xd0,0x34,0xc3,0xbb,0x89,0xcf,0x16,0x38,0xcb,0xe0,0xce,0xd5,0x0b,0xfd,0x4e,0xbc,0xce,0xba,0x28 +.byte 0x68,0x00,0x2a,0x31,0x52,0xe6,0xaf,0x81,0x3c,0x12,0x09,0x2f,0x11,0x0d,0x96,0xc7,0x07,0x42,0xd6,0xa4,0x2e,0xc1,0xa5,0x82,0xa5,0xbe,0xb3,0x67,0x7a,0x38,0xf0,0x5e,0xd8,0xff,0x09,0xf6,0xab,0x6b,0x5d,0xec,0x2b,0x9f,0xf4,0xe6,0xcc,0x9b,0x71,0x72,0xd1,0xcf,0x29,0x10,0xe6,0xe3,0x27,0x1c,0x41,0xc8,0x21,0xdf,0x55,0x27,0xa6,0x73 +.byte 0xb7,0x45,0xa1,0x09,0x66,0x2f,0x08,0x26,0xf1,0x50,0xe0,0xec,0x9d,0xf2,0x08,0xf3,0x49,0x56,0x50,0xe0,0xba,0x73,0x3a,0x93,0xf5,0xab,0x64,0xb6,0x50,0xf4,0xfa,0xce,0x8d,0x79,0x0b,0xad,0x73,0xf2,0x8c,0x1e,0xe4,0xdd,0x24,0x38,0x1a,0xde,0x77,0x99,0xb8,0x92,0xca,0xc0,0xc0,0xbc,0x3d,0x01,0x6f,0x93,0x3a,0x6e,0xc5,0x28,0x6e,0x24 +.byte 0x9c,0xf9,0xd9,0xcb,0x4b,0xbe,0x9e,0xda,0x0d,0x10,0xfb,0x9d,0x15,0xfe,0x28,0xdc,0xd9,0x09,0x72,0xd3,0x9f,0x6d,0x77,0x14,0x84,0x86,0x56,0x10,0xdc,0x8e,0x6a,0xa7,0x62,0xf0,0x0b,0x65,0x2c,0xa2,0xd1,0x7f,0xae,0x32,0xfa,0x9b,0x46,0x0f,0x12,0x08,0x22,0x8c,0x87,0x15,0x4b,0xc4,0x6d,0x85,0xfb,0x69,0xfe,0xce,0xfb,0xb4,0x3e,0x7b +.byte 0xcf,0x88,0xa7,0x97,0x52,0x56,0xd0,0x9f,0xb4,0x33,0xf9,0x08,0xd2,0x28,0x46,0x5e,0xc4,0xec,0x22,0xc6,0x1e,0x7b,0x34,0x99,0x0c,0x5b,0x04,0x19,0xe2,0xca,0x09,0x11,0x50,0x45,0xcc,0xb2,0x90,0x25,0x51,0x68,0xc9,0x20,0x6c,0x99,0x2e,0xdb,0x5b,0x07,0x91,0xb2,0x69,0xbf,0x3c,0x05,0x50,0xfb,0x21,0x33,0x4f,0x6e,0x18,0x19,0xd5,0xff +.byte 0xce,0x9d,0xb5,0x7f,0xd4,0xd5,0x8f,0x41,0x26,0x1f,0xa1,0x4c,0x34,0xd3,0x98,0x08,0x5d,0xb5,0x56,0xa7,0x04,0x63,0x76,0x7d,0xae,0xee,0xea,0xbf,0x69,0x8d,0xff,0xa1,0x62,0x86,0x19,0x7b,0xe5,0x08,0x7a,0xe5,0x9e,0xe5,0x44,0xca,0x24,0xde,0x00,0x43,0xc7,0xcd,0xc8,0x5b,0x21,0x00,0xb9,0x56,0x3f,0xba,0xef,0xcd,0xc4,0xe0,0xd7,0x90 +.byte 0xa7,0xe1,0xf9,0x83,0x2c,0x1d,0x8d,0xc3,0x1b,0xa2,0xab,0xcd,0x7d,0xbc,0xd1,0x2b,0xf8,0x30,0x9e,0xb6,0x95,0xe0,0xd1,0xe6,0x81,0x89,0xa7,0xda,0xf0,0x54,0xc1,0xcb,0x3a,0x85,0x85,0xb5,0x03,0xb4,0x8c,0x7d,0x98,0x16,0xa8,0x83,0x29,0xbb,0x1c,0x1d,0xe1,0x7e,0x0e,0xb5,0x04,0xba,0xbf,0x89,0x30,0x3c,0x44,0xa2,0xc5,0xbf,0xf1,0x70 +.byte 0xdb,0xf3,0x13,0xf4,0x44,0xac,0x63,0xc4,0x9c,0x93,0xa9,0x13,0x1b,0xf1,0xcc,0x16,0x66,0xdf,0x56,0x10,0x88,0x0c,0x76,0xab,0x43,0xcb,0x75,0xf8,0x4f,0x04,0x26,0x95,0x4c,0x6d,0x55,0xc8,0xbd,0xf8,0x94,0x0f,0xca,0x29,0x2b,0xcd,0xce,0x05,0x1e,0xea,0xae,0x02,0x01,0x8b,0x60,0x6a,0x6a,0x03,0x14,0xe5,0xa7,0xdf,0x9e,0x9f,0x94,0x92 +.byte 0x41,0x2c,0xf0,0x1a,0xa7,0xc2,0xc1,0xfc,0x11,0xf3,0x00,0xe1,0xfc,0x7a,0x97,0xc0,0xe1,0x81,0x90,0x3f,0xea,0x1e,0x7f,0xf8,0xb0,0xd8,0x4c,0x2d,0xdc,0x83,0xfa,0x27,0x8b,0xf2,0xef,0x3b,0x3a,0x44,0xdc,0xa5,0xa9,0xd5,0x24,0x5f,0xb1,0xdd,0x1d,0x3f,0x03,0x76,0x3b,0x92,0x0d,0xb4,0x84,0xa4,0x5b,0xef,0x9f,0x89,0x9d,0xef,0xff,0xcf +.byte 0xc2,0x28,0x3b,0x9d,0xd2,0x28,0x75,0x3e,0xdc,0x14,0x79,0x7c,0x0c,0xaa,0x6c,0xf2,0x05,0x9d,0x27,0x01,0x15,0x19,0x60,0x48,0x5a,0x7d,0x04,0x27,0x2d,0x82,0x92,0x3e,0x0b,0x62,0xd7,0x5a,0xfb,0x72,0xfb,0xdd,0x43,0xfa,0xf4,0x6f,0x16,0xd2,0x8f,0x8f,0x21,0xdc,0x81,0x48,0x7a,0xe8,0x39,0xd5,0xdf,0x54,0x0f,0xe1,0xbe,0x65,0xc9,0x49 +.byte 0x98,0xb1,0xff,0x8d,0x52,0x31,0x6a,0xcd,0x5e,0x83,0x17,0x41,0x93,0xcd,0x23,0x76,0x18,0xe9,0x82,0x71,0x15,0xb7,0xd8,0xde,0x0d,0x57,0x8b,0x90,0xe6,0xf4,0x57,0xc1,0xfd,0x3d,0x0d,0x6a,0xae,0xd1,0xd6,0x02,0x3e,0xb9,0x82,0xb2,0x82,0x80,0x48,0xa4,0x14,0x29,0x80,0x55,0x1d,0xaf,0x3e,0xf8,0x7e,0x36,0x5f,0x77,0x4c,0x73,0x6c,0x35 +.byte 0xd2,0x7c,0x36,0xca,0x2f,0xec,0x1e,0x3f,0x74,0xee,0xa5,0xe7,0x7d,0xce,0x81,0xf1,0xd5,0xc1,0xb3,0xaf,0x90,0x2c,0xc6,0x5b,0x81,0x37,0x85,0x98,0x78,0x3c,0x4f,0x2a,0x55,0xea,0x06,0x30,0x77,0x73,0x97,0x39,0x75,0xcf,0x4a,0x9b,0x55,0xb8,0x64,0x5c,0x86,0xfd,0x26,0x3e,0x8d,0x68,0xd2,0x70,0xe8,0xd7,0x99,0x57,0x6f,0x96,0x47,0x6d +.byte 0xa7,0x1a,0x0e,0x85,0xcd,0x00,0xa5,0x3e,0x11,0xec,0x76,0xd2,0x47,0x26,0x71,0xda,0x5c,0xf4,0xb1,0xd5,0x23,0xe1,0x62,0x71,0x43,0x30,0xa7,0x95,0xf6,0xc1,0xcf,0x8a,0x1b,0x75,0x53,0x39,0x6d,0x9d,0x18,0x7c,0xe3,0x48,0x27,0x33,0x1c,0x38,0x45,0xdf,0x75,0x22,0x05,0x6d,0x81,0x5d,0xfc,0xeb,0x0e,0x05,0x26,0x45,0x81,0x9f,0xce,0x0f +.byte 0xc9,0xdd,0x95,0x11,0x04,0x47,0x40,0xa4,0x07,0x3b,0x52,0x92,0xe0,0x91,0xdb,0xdd,0x3c,0x9f,0xd3,0xa1,0xb7,0xf9,0xeb,0xd6,0x6d,0x64,0x88,0xe9,0xf5,0x4e,0x98,0x8e,0x7b,0xd3,0xec,0xc0,0x22,0xe0,0xf2,0x14,0xf2,0x20,0xa2,0xa3,0xb3,0x0d,0x75,0x1a,0xbb,0xde,0x4a,0x41,0x04,0x43,0x0d,0xd9,0xd0,0x1d,0x73,0xc8,0x67,0x8e,0x58,0xe5 +.byte 0x4b,0x28,0x4d,0x8f,0x2f,0xab,0x1a,0x4a,0xfc,0x7c,0xd1,0x27,0x3e,0x4a,0x10,0x6a,0x5f,0x55,0x3a,0xf7,0x63,0x14,0xe9,0xad,0xb4,0x95,0xef,0x3d,0x5c,0xc3,0x7d,0xe4,0xb7,0x15,0xd7,0x0b,0x68,0xf0,0x23,0xa8,0xd4,0x8e,0x27,0xf6,0x55,0x11,0xbc,0xc0,0xff,0x3e,0x2c,0x24,0x59,0xb7,0xb7,0xb5,0x0b,0xd2,0x99,0xa5,0xd5,0xe2,0x24,0x33 +.byte 0x21,0xb8,0x96,0x48,0x18,0x94,0xb5,0xb2,0x50,0x5e,0x04,0x24,0x86,0x17,0x62,0x1e,0xc9,0xf8,0x22,0x6a,0xd0,0xec,0xc5,0xbc,0x90,0xf7,0x55,0xcf,0x3f,0x4c,0x7c,0xf7,0x51,0x19,0x95,0xa4,0x81,0x38,0x0c,0xa5,0x58,0x22,0xf3,0x10,0x05,0x05,0x44,0xbf,0x7e,0x2a,0xbd,0x5f,0x79,0x56,0x08,0xd5,0x68,0xea,0x85,0xa1,0xeb,0x0b,0xe1,0xd4 +.byte 0xfd,0x3a,0x38,0xd2,0x5a,0x49,0x17,0x9a,0x58,0x8f,0x52,0xf5,0xf4,0x7b,0x1f,0x58,0xa8,0xc0,0x1c,0x46,0x38,0xa6,0xe4,0x7d,0xcc,0x88,0x97,0x10,0x2b,0x5e,0x61,0xf5,0x73,0x7d,0x79,0x1b,0x53,0xf1,0xac,0xb4,0x3f,0xbd,0x9d,0xb6,0xc2,0x57,0xd5,0x84,0x4d,0x60,0xd6,0x45,0x56,0xa1,0x36,0x28,0xf5,0x74,0xc6,0x29,0xd7,0xc9,0x63,0x5e +.byte 0x7c,0x97,0x46,0xde,0x56,0x3f,0xd8,0x8e,0x75,0x29,0x87,0xe7,0xd1,0x24,0x78,0x26,0xdc,0x17,0x97,0xc9,0xf0,0x8e,0x95,0xbc,0xe5,0xfe,0xe3,0x3a,0x75,0x70,0x52,0xa9,0x31,0x97,0x79,0x3a,0xc2,0x53,0x6a,0x73,0xe2,0x76,0xf8,0x85,0xe6,0x0d,0x85,0x9b,0xfc,0x72,0x08,0x2a,0xa5,0x8e,0x42,0xb2,0x7c,0x8d,0x8b,0x28,0x4b,0xf5,0xcb,0x66 +.byte 0x80,0x46,0xb3,0x87,0xdf,0x38,0xa7,0x08,0xc8,0xea,0x85,0x0e,0x6f,0x13,0xe0,0x57,0x99,0xc6,0xb8,0xed,0x9c,0xb0,0xa9,0x89,0xd7,0xc5,0xa9,0x71,0xfd,0x8a,0x21,0xb1,0xec,0xc8,0x65,0x78,0x72,0xc6,0x77,0x69,0xd4,0x0b,0x47,0x4d,0x79,0x93,0xcf,0x2a,0x34,0xf1,0x1b,0x0e,0x6f,0x0d,0xd1,0xbb,0xe7,0xd7,0xb5,0x6f,0x57,0x01,0xd4,0xcd +.byte 0x56,0xbe,0xf0,0xd9,0xe2,0x8e,0x0e,0xb8,0x3d,0xdb,0xf6,0x97,0x39,0x0b,0x3e,0xe2,0xb2,0xa3,0x93,0x0b,0x74,0xe5,0x6a,0x21,0x04,0x29,0x5a,0x3e,0x07,0x9c,0x11,0x4e,0xfe,0x01,0x6e,0x96,0x1e,0x8f,0xe0,0xfe,0x24,0x24,0x7e,0x04,0x2f,0x65,0xf4,0xe2,0x1f,0x36,0x56,0x43,0x3a,0x6c,0xeb,0xd7,0x20,0x13,0x71,0x45,0x6a,0xe8,0xc6,0xfa +.byte 0xba,0x26,0x6f,0x7d,0x9a,0x62,0x76,0x34,0x7d,0xed,0x47,0x71,0xd1,0x0e,0x5b,0x04,0x39,0xd6,0xc0,0xe5,0xa5,0xd8,0xf5,0x73,0xf9,0xf4,0xc2,0x2a,0x54,0x25,0x67,0xdf,0x83,0xa3,0xcd,0xfd,0x1e,0x46,0x87,0x06,0x17,0x6d,0x78,0x8e,0x0c,0x7b,0x08,0x06,0x1b,0xd9,0x5d,0x3d,0x03,0x40,0xbc,0xe7,0x02,0xc4,0xe0,0xe0,0x49,0xb2,0x6c,0x6f +.byte 0x97,0x76,0x0f,0xc7,0x14,0xd8,0x7c,0xc0,0xad,0x8a,0xbb,0xbc,0x2a,0x7e,0x68,0x46,0xcd,0xa7,0x26,0x16,0x77,0x1b,0x89,0x38,0xd8,0x2a,0x69,0x43,0xc4,0xaa,0x0d,0xf6,0xd1,0x65,0xda,0x41,0x75,0x77,0xcd,0xf7,0xd2,0x38,0x9c,0xdb,0x81,0x17,0x27,0x2f,0xba,0x2e,0xa5,0xb5,0xbe,0x05,0xe8,0xdd,0x5f,0xa9,0xad,0xbe,0xb2,0x0e,0x0b,0x69 +.byte 0xb6,0x8d,0xd2,0xf2,0xde,0x76,0x32,0x26,0xd9,0x06,0x1d,0x42,0x26,0x8c,0xf7,0xca,0x4c,0xe1,0x59,0x82,0x6c,0xea,0x96,0x70,0x39,0xb8,0x0d,0xf3,0x67,0x9d,0x5e,0x94,0x99,0x77,0xf2,0x0a,0x9a,0xde,0xa5,0xd2,0xe1,0xaa,0x91,0x85,0xc7,0x0f,0x92,0x35,0x04,0xd3,0x7a,0x13,0xfa,0xf2,0x86,0x5a,0x38,0xd1,0x7f,0x10,0xd8,0x30,0x0e,0x33 +.byte 0xe3,0xa0,0x8a,0xad,0x4f,0x6c,0x24,0xdd,0x9d,0x1c,0x4e,0xff,0x4c,0xfc,0x74,0x01,0xab,0x08,0x6c,0xe6,0x4c,0x78,0x75,0xc9,0x67,0x83,0x1f,0x75,0x22,0xb0,0x7c,0x44,0xa0,0xa1,0xee,0x4e,0xf6,0x3e,0xd3,0x35,0x70,0xbe,0x36,0x1e,0x90,0xa6,0xaa,0x64,0x67,0x7f,0x52,0x84,0xd9,0x27,0xab,0x37,0x30,0x68,0x46,0xcc,0x0e,0x57,0x58,0x6f +.byte 0xdb,0xb2,0x5f,0x24,0xf7,0xeb,0x97,0xea,0x64,0xec,0x6c,0x1e,0xe1,0xc4,0x72,0xfb,0x00,0xa7,0x62,0xa0,0x59,0xb9,0x17,0x8a,0x33,0x32,0x59,0xb8,0xbe,0x84,0xd4,0x62,0xb7,0xf6,0x35,0xd4,0xf1,0x1c,0xdb,0x7e,0xa6,0xbc,0x2c,0x54,0x3c,0xf5,0x63,0x4a,0x22,0x26,0x58,0xa0,0x35,0x98,0xa7,0x32,0xb2,0xa0,0x2b,0xd5,0xfa,0x2f,0x9b,0xb4 +.byte 0xea,0xd6,0x58,0x61,0xb2,0x24,0x45,0x46,0x1e,0xac,0x79,0xa4,0xf7,0xc1,0x13,0x2f,0xf5,0x6b,0xfa,0x70,0x50,0x2b,0x83,0xee,0x7c,0xc1,0x55,0x27,0x7b,0x4f,0xa6,0x0a,0x72,0x26,0x82,0xcd,0x4d,0xe2,0xe8,0x45,0xe6,0xd7,0x39,0x7e,0xed,0x35,0xdf,0x9e,0xb1,0x41,0x55,0xa2,0x5d,0x68,0x4b,0x0b,0xd1,0x73,0x5a,0x2b,0x81,0x35,0x28,0xfc +.byte 0x64,0x08,0xd7,0xc4,0x9f,0x30,0x77,0x3d,0x9d,0x80,0x15,0x67,0x9a,0x84,0xe4,0x34,0xea,0x8c,0xf7,0x73,0x9e,0x33,0xb4,0x09,0x33,0xbd,0xd8,0x82,0x43,0x7d,0xc5,0x1f,0x0e,0x7b,0xa0,0x53,0x59,0x20,0x12,0x57,0xed,0xda,0xc7,0x19,0x8e,0x62,0xe4,0x09,0xc1,0x4b,0x20,0x32,0x9e,0x18,0x11,0x1c,0x42,0x49,0x62,0x76,0xa8,0x83,0x72,0x11 +.byte 0x45,0xe7,0xb5,0x60,0xa7,0xc0,0x07,0xbd,0xb4,0x7c,0xc6,0x5c,0x03,0x34,0xa3,0x85,0x47,0x24,0x75,0xd2,0xab,0x46,0xbb,0xc7,0x0d,0xcd,0x40,0xe2,0x5e,0x5b,0xa7,0x98,0x67,0xe4,0xe2,0x02,0xe9,0xdc,0xd7,0xc2,0xaf,0x90,0x43,0x94,0xfe,0xf3,0x53,0xc1,0x10,0x28,0xa7,0x90,0xba,0x73,0x57,0x0c,0x4d,0x6d,0xbd,0xda,0x81,0xd5,0x90,0xce +.byte 0x02,0x40,0xb3,0xf0,0xec,0x50,0x82,0xc9,0xfb,0xf1,0x22,0x6d,0xc8,0xd2,0x7b,0xed,0x0b,0x43,0x7e,0x0b,0x60,0x9b,0x69,0x9e,0x58,0x26,0xc3,0x9f,0x6b,0xd0,0x31,0xeb,0xb7,0x0a,0xf3,0x9a,0x9a,0xf5,0x72,0xcf,0x29,0xc8,0x19,0x08,0x4d,0x67,0xd5,0xa1,0x8f,0x68,0x0e,0xee,0x59,0x14,0xf8,0x86,0xc0,0x08,0x5a,0x56,0xfe,0x6a,0xb7,0xac +.byte 0x78,0x8d,0x77,0x39,0x5e,0xb1,0x01,0x4d,0x31,0x81,0x56,0xdc,0x5b,0x10,0xda,0x4d,0xd2,0xfd,0xfc,0xa3,0xe3,0xaa,0x46,0x29,0x1a,0xea,0x9c,0x47,0x1b,0xd0,0xa6,0x84,0x1f,0x71,0x1a,0xd3,0x35,0x59,0x7f,0xef,0xf7,0x81,0x39,0x7a,0x9f,0x4a,0x01,0x4d,0x46,0xcf,0xa4,0x6a,0x9c,0x7e,0x07,0x8b,0x98,0x17,0x49,0x5c,0x46,0xac,0xc8,0xfd +.byte 0x1c,0xaf,0x91,0x30,0x0c,0x36,0x63,0xef,0x69,0xd3,0x47,0xf4,0x76,0xc1,0xf7,0x40,0x03,0x98,0x9e,0xcb,0x61,0x65,0x46,0x45,0x1c,0x1b,0xfd,0x13,0x36,0xe9,0x19,0xbf,0x2b,0x59,0x51,0xe8,0x04,0x44,0xe3,0xc2,0x4b,0x66,0x78,0x69,0x66,0xa3,0x1a,0xe5,0x2a,0xad,0xf8,0xc5,0x0f,0xb7,0x3e,0xe8,0xab,0xe0,0xe4,0xd9,0xc2,0xb8,0x61,0x5b +.byte 0xef,0x6b,0x4d,0x5f,0xb8,0xdc,0x06,0xa5,0xce,0x08,0x5b,0x1f,0xf4,0x29,0x4d,0x0a,0x3e,0xb3,0x60,0xf4,0x63,0x3c,0x70,0x5d,0x02,0x9c,0x55,0x5e,0x5e,0xd1,0x9b,0xed,0x20,0x75,0x54,0xa1,0x8e,0xae,0xce,0x5a,0xb2,0x2d,0xe4,0xc3,0x9b,0x7d,0x72,0xce,0x7c,0x0c,0xa9,0x99,0xa4,0x12,0xaa,0x31,0xe9,0x61,0x47,0x8a,0x41,0x93,0xd5,0x69 +.byte 0xc5,0xf3,0x9f,0xf4,0x97,0x69,0x64,0x6f,0xf9,0x5b,0xbf,0x58,0xf6,0x3b,0x3e,0xd6,0x93,0x94,0x89,0xcc,0xc0,0x25,0x7d,0xf8,0x40,0x9e,0xb2,0xc8,0x75,0x9d,0x4d,0xf0,0x5f,0xa5,0x3d,0x38,0x67,0xea,0x8d,0x1b,0x60,0x5e,0xfe,0xa8,0x26,0xb9,0xed,0xc0,0xe9,0xc8,0xec,0xb1,0x77,0x0f,0xf2,0xaa,0x77,0x2a,0xcd,0xa8,0x70,0xb7,0xda,0x60 +.byte 0x49,0xb3,0x01,0x95,0xc8,0xac,0x71,0x6a,0xd0,0x49,0x67,0x2a,0x04,0xfc,0x55,0x38,0x08,0x37,0xd9,0x21,0x37,0xce,0x41,0xaf,0x7c,0x33,0xdd,0xcd,0xe0,0x92,0x27,0x38,0x63,0x77,0xea,0x86,0x04,0x99,0x4e,0x61,0x8b,0x8f,0xfe,0x4e,0xc1,0x16,0x6c,0x89,0xac,0x1f,0x0b,0x67,0x75,0x49,0xf4,0xdb,0x6d,0xd3,0xb8,0x1d,0x9c,0xb2,0xe6,0x98 +.byte 0x81,0xae,0x3f,0xe0,0xdd,0xda,0xfa,0x4c,0x8b,0x30,0x18,0x88,0xa1,0x1d,0xa1,0x18,0xb8,0x28,0xc2,0x04,0x6a,0x80,0x02,0x5a,0xe6,0x04,0x85,0xfa,0x54,0x38,0x45,0x64,0xe1,0x50,0x4a,0x38,0x4c,0x85,0xf7,0x00,0x0c,0xd3,0x16,0xcb,0xfa,0x38,0xb4,0x1b,0x6a,0x95,0x3d,0xc3,0x24,0x79,0x0e,0x3e,0x81,0xe6,0xc3,0xd9,0xdb,0x05,0x19,0x7c +.byte 0xb4,0x4d,0xef,0x71,0x22,0x53,0x97,0x8a,0xc9,0xe3,0x69,0x20,0x5b,0x83,0xb1,0x44,0xd7,0xd1,0x1e,0x87,0xa7,0xbf,0xe4,0x84,0x68,0x9c,0x77,0xfe,0x83,0xdb,0x7a,0x53,0xa8,0x53,0x1f,0xc7,0xd1,0x6a,0x26,0x87,0x71,0x06,0x23,0xa7,0xe0,0x18,0x5d,0xfa,0x8c,0xa7,0x24,0xee,0xf6,0x74,0xab,0x17,0xd3,0x46,0x33,0xe9,0xc3,0xcd,0xa6,0xaf +.byte 0xcf,0xa1,0x60,0x75,0x7b,0x77,0xc3,0x58,0xa2,0xe8,0x87,0x7b,0x4b,0x57,0xb1,0x96,0xc1,0x91,0x6d,0xbf,0x71,0xb3,0xbf,0xe2,0x62,0x86,0x72,0xa9,0x01,0x64,0x62,0x32,0x33,0xc8,0xa4,0x26,0x7d,0xfa,0x0d,0xd4,0xd8,0xc3,0xaa,0xc0,0xc8,0x7c,0x51,0xe8,0x10,0x08,0x6f,0xf6,0xc1,0x46,0x89,0xc4,0xd2,0x00,0x1d,0x14,0x05,0x89,0x64,0x52 +.byte 0xcd,0x1f,0x97,0x0b,0x1d,0x94,0xbe,0x9d,0xa0,0x6b,0x03,0x9b,0x83,0x87,0x38,0x0f,0x65,0xdd,0x6a,0xaf,0xf1,0x22,0x74,0x7e,0x11,0xa0,0xdf,0x1e,0x95,0xef,0x1a,0xdc,0x8b,0x29,0x4a,0xbe,0xfd,0x2f,0xc7,0x48,0x94,0x3f,0xb9,0x8c,0x8e,0xe1,0x0c,0x54,0xa6,0x2f,0xa5,0x2b,0x71,0xdd,0x16,0x68,0x91,0x35,0xd0,0x22,0x48,0x1f,0xf2,0xe2 +.byte 0xe8,0x57,0x83,0xd7,0x49,0x43,0xfd,0xf9,0x77,0xb5,0xfa,0x70,0x19,0xeb,0xae,0xf6,0x31,0xfe,0xd6,0x81,0x6c,0xcc,0x14,0x28,0xa6,0x9f,0x74,0x56,0xc5,0xf6,0x51,0xba,0xc8,0xbd,0x32,0x80,0x5f,0xdb,0x28,0x3f,0x4a,0x55,0x01,0xe1,0x39,0xf5,0x9c,0xda,0xb3,0x42,0xee,0x43,0x17,0xc3,0xc7,0xf5,0xd1,0xda,0xd2,0x2e,0x56,0xcf,0x77,0x0e +.byte 0xdd,0x72,0xcf,0xe5,0xab,0xfb,0xd6,0xa2,0x6c,0x03,0xa6,0x77,0x25,0xf8,0x2a,0x8c,0xfa,0x6f,0x45,0x79,0x59,0x84,0x92,0xd1,0x00,0x58,0xc7,0xb8,0x95,0x4d,0xc8,0x49,0xad,0xe0,0x1e,0x64,0x47,0x00,0xfb,0x93,0x7f,0x3e,0xf1,0x65,0x70,0x47,0x64,0xbb,0x36,0x63,0xe3,0x09,0xcb,0xdb,0x5a,0xd1,0x72,0x83,0xfd,0x15,0x91,0xa2,0x03,0x81 +.byte 0x04,0x98,0x45,0x0f,0x7f,0x23,0x48,0x6c,0xb1,0x2d,0xd0,0x2c,0x61,0x52,0x1b,0x4a,0x52,0x08,0x92,0xe1,0x7a,0xf1,0x8c,0x1f,0x1f,0xdf,0x1c,0xfd,0xd9,0x46,0x99,0x71,0x05,0x58,0x71,0x82,0x5c,0x05,0xa0,0xb2,0x6a,0x50,0xd2,0x6e,0x35,0xf4,0x6c,0xfb,0x50,0x99,0xb3,0xc1,0x2b,0x05,0xaf,0x02,0xe5,0x18,0xfa,0x74,0x09,0xcc,0xa5,0x2c +.byte 0x26,0xfd,0xc5,0xe7,0x2c,0x96,0x0f,0xa4,0x7c,0x88,0xc6,0x7f,0xf9,0x74,0x9d,0x1c,0xe5,0xd2,0x27,0xf0,0xae,0x5b,0x4c,0xbf,0x0a,0x99,0x2e,0xaa,0x54,0xba,0x0d,0x75,0xd9,0x48,0x76,0xf3,0xe9,0xd9,0x01,0xbe,0xaa,0x97,0x09,0xfe,0xb2,0x4a,0xcb,0x55,0xd0,0xe1,0x58,0xec,0x31,0x0c,0xd9,0xdf,0xd9,0x01,0xf9,0x3c,0x28,0x40,0x91,0xbb +.byte 0x4d,0x2d,0x88,0x60,0x31,0xc7,0xc9,0x1d,0xaf,0x22,0x44,0x21,0x05,0x06,0xdd,0x07,0x60,0x29,0x7d,0x49,0x30,0x9d,0x35,0x1d,0x9f,0x37,0xbd,0x32,0xb2,0x21,0xa6,0x4f,0x89,0xd8,0xe6,0x85,0x44,0xcf,0x13,0x12,0x4f,0x5f,0x50,0x71,0x01,0x39,0xff,0x6e,0xa0,0x07,0xff,0xf0,0xa6,0x3b,0x39,0x59,0x17,0xae,0x93,0xb2,0x86,0xcc,0xe5,0x59 +.byte 0x5a,0xf2,0x82,0x62,0xc6,0x8d,0x13,0x2f,0x6b,0x92,0x28,0xbe,0xd1,0xc0,0xf6,0xc9,0xe1,0xd6,0x98,0x94,0x65,0xd4,0x2a,0xdb,0x37,0xb1,0xd3,0x83,0xf2,0xaa,0xa5,0x00,0xf9,0x08,0xe6,0x22,0x38,0x30,0xb6,0x49,0x8d,0x9d,0x1c,0xa4,0xf7,0xdb,0x3c,0x6f,0x75,0x08,0xa0,0xda,0xe9,0xc0,0x01,0x54,0x09,0x68,0xc6,0x7c,0x5b,0x4d,0x88,0x71 +.byte 0xa7,0x2f,0xb3,0x50,0x18,0x4a,0xfb,0x55,0x29,0xf2,0x56,0x1d,0x4c,0x12,0x22,0x1c,0x54,0xd2,0x63,0x67,0xfa,0xe9,0x5b,0x74,0x3b,0x38,0xf6,0xa0,0x85,0x63,0x1c,0x41,0x6a,0x6d,0x71,0x1d,0xb1,0x39,0x28,0x88,0x96,0x9b,0x9c,0x50,0x9e,0x57,0x4e,0xf5,0xa7,0xf4,0x17,0xc6,0xca,0x42,0x84,0x83,0xca,0xa4,0x28,0x72,0x08,0x74,0x62,0xe1 +.byte 0xf0,0x73,0xc5,0x86,0x6c,0x76,0x9d,0xd3,0xa6,0xb8,0x5d,0x73,0x1b,0x02,0xe2,0x69,0x8b,0x59,0xd6,0x6a,0x53,0xe9,0x13,0x88,0x41,0x95,0xe9,0x97,0x5f,0x07,0x62,0xa5,0x21,0x97,0x7e,0x5e,0xc2,0x2c,0xc7,0xaf,0x0a,0xdb,0x9e,0x4f,0x44,0x4b,0xd6,0x3d,0xc0,0x24,0x38,0x50,0x47,0x98,0xa3,0xfc,0xda,0xfc,0xae,0x0e,0x2b,0x9b,0x53,0x0f +.byte 0x6b,0xb1,0x2f,0xd5,0xd7,0x68,0xc9,0xab,0xb9,0xff,0x7f,0x54,0xd6,0x2f,0x88,0xbc,0x5e,0x6a,0x22,0x49,0x0f,0x98,0xbe,0x1f,0xef,0x3e,0xcc,0xa2,0x72,0x6b,0x16,0xbe,0xe8,0x5f,0x0e,0x36,0xa2,0x68,0xe0,0x65,0xd9,0x7c,0xdc,0x8c,0x6a,0x66,0xf0,0x6a,0xfc,0x2b,0x85,0x28,0x2a,0x1a,0xfc,0x92,0x64,0x3d,0x38,0x5b,0xc1,0x0c,0x68,0x45 +.byte 0x94,0x85,0x58,0x82,0x99,0xfc,0x20,0xdd,0x62,0xae,0xed,0x35,0x7c,0x02,0x16,0x9b,0x00,0x8a,0x44,0x02,0x80,0x00,0xca,0x7d,0x95,0x03,0x5d,0xa6,0xec,0xe1,0x0c,0x50,0x34,0x61,0x55,0xee,0xb5,0x11,0xff,0xc3,0xaa,0xf2,0xbc,0xa3,0xa9,0xc7,0x6b,0x16,0xab,0x56,0x7b,0x55,0x54,0x95,0x88,0x15,0x15,0x6a,0x2c,0x97,0xd7,0x7c,0x26,0x65 +.byte 0xaf,0x8d,0xd1,0x05,0x57,0xb2,0x63,0xd1,0x22,0xf7,0x7d,0x77,0x54,0x6c,0x87,0x03,0x1f,0x0e,0x2b,0xae,0xa6,0xa4,0xb5,0xd6,0x95,0x34,0xd0,0x62,0x4e,0xfb,0xcb,0xee,0x01,0xc1,0xf7,0x36,0x94,0xa6,0x54,0x94,0x90,0x0e,0x45,0x9c,0x95,0x89,0x96,0x88,0x32,0x90,0x27,0x48,0xc5,0x96,0xf0,0x7e,0x7f,0x69,0x99,0xdf,0x7b,0xfb,0x2b,0x7b +.byte 0x38,0x10,0x6b,0xd1,0x1a,0xfb,0xf2,0xcd,0x2d,0x8b,0x47,0x21,0xca,0x92,0x64,0x28,0xd1,0x53,0x1d,0xed,0xa7,0x7d,0xa4,0x88,0xab,0xd0,0xfe,0x9b,0x2b,0xf8,0x48,0x94,0x8d,0xd5,0xfa,0x5c,0xef,0x12,0x43,0xdf,0xb6,0x5b,0x83,0x43,0xf3,0xf7,0x1d,0x6f,0x3e,0x44,0xe6,0x20,0xd8,0xbc,0x4a,0x9a,0xed,0xa0,0x79,0x66,0x8d,0x23,0xca,0x35 +.byte 0x15,0x87,0x11,0x50,0xa4,0x40,0x6e,0xfa,0xf7,0xaf,0xa2,0xb7,0x3b,0x9b,0x8b,0x44,0x19,0x90,0xb3,0x47,0x92,0x08,0x2f,0x0c,0xe2,0x95,0x5d,0x80,0xb5,0x93,0x5e,0x1c,0xb5,0xce,0x52,0x0b,0x12,0xc1,0x72,0x2e,0x66,0x8c,0xd1,0x13,0x94,0x36,0xf7,0x17,0xe3,0xad,0x69,0xc9,0x2d,0x21,0x64,0xcd,0x8f,0x2d,0x8f,0x0c,0x85,0xa5,0x23,0x8b +.byte 0x6c,0x00,0x13,0xf7,0x6a,0xb4,0x68,0x1a,0xcc,0xc4,0x03,0x5b,0xd6,0x7b,0x5b,0x34,0x90,0x34,0x3e,0x0a,0x07,0x19,0x81,0x99,0xe9,0xd2,0xa8,0x73,0x2c,0xa2,0xcf,0xdf,0x29,0x69,0xbf,0xec,0xdd,0xa5,0xd3,0x16,0xb0,0xd2,0x9c,0x2f,0xeb,0x70,0x50,0x20,0x3c,0x22,0x1a,0x5b,0x55,0x79,0x76,0x0f,0x1f,0xd0,0x34,0xa9,0x55,0xad,0x75,0x75 +.byte 0x7f,0xa7,0x9b,0xa7,0x3d,0x5d,0x73,0xce,0x91,0xf6,0x9b,0xcd,0xa5,0xee,0x48,0x44,0xba,0xd5,0xad,0xbe,0x1e,0xc6,0xd2,0x8b,0x05,0x21,0x20,0xb5,0x7d,0x78,0x88,0x10,0x20,0x85,0x90,0x8f,0x47,0x74,0x68,0xe6,0x32,0x2a,0x13,0x7a,0xb3,0x5d,0xfe,0x24,0x97,0xd1,0x65,0x55,0x60,0xb3,0x88,0xfb,0x59,0xc9,0x29,0x70,0xf1,0x45,0xbd,0xbe +.byte 0x4d,0x01,0x4e,0x5e,0x5f,0x99,0x52,0xf8,0x5f,0x38,0xcf,0xa8,0x5d,0x69,0x54,0x87,0x72,0x41,0xca,0xc4,0x63,0xc1,0x52,0x58,0x66,0x8b,0xda,0x8b,0x61,0xd1,0xab,0x7d,0x8d,0xfe,0x51,0x8d,0xf6,0xd0,0x21,0x4d,0x0b,0xc5,0xea,0x74,0xcd,0x21,0x93,0x4a,0x91,0xe5,0x3f,0xce,0x35,0x3b,0x3f,0xc0,0xab,0xa4,0x23,0x76,0xd1,0x8c,0xa7,0xbe +.byte 0x15,0xab,0x8e,0xd7,0x0d,0x86,0xac,0xc3,0x06,0xff,0x33,0xf2,0x41,0x6f,0x69,0x58,0x49,0xd1,0x73,0xcf,0x5e,0x4e,0x1e,0x46,0x12,0xfa,0x30,0x0d,0x4b,0xb1,0xfb,0xc6,0xe6,0x0d,0xcd,0x8d,0xca,0x34,0x28,0x5a,0xed,0x85,0x55,0x31,0xee,0xba,0xbf,0xa4,0x6f,0x9c,0x7d,0xeb,0x4b,0x1b,0x73,0xea,0x4e,0xb9,0x62,0x5d,0xac,0xe3,0x53,0xdf +.byte 0x27,0x87,0x2f,0x39,0xca,0x5b,0xd6,0x72,0xcf,0x95,0xc6,0x2a,0xa5,0x3f,0x57,0xfd,0xdc,0xa9,0x4a,0x86,0x0f,0xcd,0xd5,0xea,0xfe,0x85,0xeb,0x9b,0x84,0xc6,0xf7,0xba,0xc2,0x37,0xbc,0x18,0x85,0x49,0xa6,0x7f,0xd9,0x3e,0xfb,0xf0,0x0c,0x39,0xe3,0x1c,0x06,0xfe,0xb6,0x49,0xa3,0x8b,0x72,0x2b,0x39,0xa1,0x48,0xfd,0x1f,0xfe,0xa4,0xf7 +.byte 0xcc,0x7a,0xef,0x64,0xa0,0x0d,0xeb,0x78,0x71,0x8c,0xd6,0x59,0x7c,0xf4,0xaa,0x81,0x7a,0x89,0xe6,0x22,0xc9,0x57,0xe8,0x13,0x9c,0xca,0xc4,0x6f,0xb5,0xbf,0x08,0x31,0x93,0x56,0x2a,0x82,0x00,0x95,0xdc,0x4b,0xfd,0x9b,0xc7,0x8b,0x31,0x72,0xa0,0xff,0xbe,0xb4,0xd6,0x07,0x16,0x0a,0x4a,0x0a,0x96,0x02,0x83,0x53,0x2a,0x4d,0x33,0x72 +.byte 0x1f,0x20,0x20,0xc3,0x63,0xee,0x4e,0x05,0x90,0x7d,0x21,0xd0,0xf1,0xda,0xde,0x0d,0x4a,0x59,0xb9,0xca,0x81,0xe3,0x1f,0x83,0x19,0xdc,0x09,0x03,0x5f,0xaa,0xee,0xbc,0x5a,0xfa,0xc6,0x4d,0x3d,0xfe,0xfe,0xf3,0xdb,0xc3,0x77,0x31,0x74,0xb4,0x94,0xb5,0x09,0xb1,0xb5,0x13,0x47,0x2e,0x4f,0x3b,0x38,0x83,0xf5,0xfc,0xe9,0xcc,0x45,0xea +.byte 0x5b,0x88,0x21,0xba,0x53,0xc5,0xf6,0xd4,0x63,0xc5,0x37,0x1d,0xa1,0x42,0x2e,0x9c,0x9a,0x50,0x2c,0xfe,0xdb,0xf6,0x31,0x36,0x5f,0x9d,0xed,0x63,0x42,0x20,0xdd,0x27,0xe5,0x34,0x3c,0x0f,0x06,0x8b,0x8f,0x32,0xb6,0x47,0xce,0x07,0xcb,0x27,0xc1,0xb7,0xfe,0xb2,0x69,0x81,0x79,0x20,0xd7,0x47,0xbb,0xab,0x61,0x5f,0x09,0x99,0xdf,0x9f +.byte 0xde,0x59,0x33,0x75,0xd1,0xcc,0xfe,0x92,0x79,0x1f,0x2d,0x59,0x88,0xef,0x4b,0x80,0x0c,0x38,0xa3,0xb1,0xef,0xae,0x53,0x84,0x2f,0xbd,0xd3,0x0c,0xcf,0xd5,0xf7,0xb7,0x6f,0xa7,0x22,0x1f,0xf1,0x56,0x76,0x0c,0x78,0x52,0xa3,0xc0,0xd0,0x2f,0xbc,0xdf,0x29,0x0d,0xa8,0x54,0x0d,0x2b,0x65,0x1b,0x7f,0xeb,0x21,0x22,0xaf,0x10,0xc1,0xd6 +.byte 0x30,0xa8,0x2f,0xb1,0x25,0xbf,0xdc,0xee,0xe9,0x35,0x40,0x69,0xa0,0xa0,0x27,0x85,0x2e,0x18,0xc1,0x36,0x24,0xc5,0x96,0x9a,0x85,0x3f,0xbb,0xfd,0xf5,0x02,0xa2,0xa1,0x92,0x3c,0x16,0x48,0x9f,0xc5,0x00,0x7c,0x7b,0xaf,0x31,0xba,0x68,0x0e,0x58,0x88,0xf4,0x10,0xb9,0xa6,0xe0,0x46,0x2a,0xb8,0x8d,0xc7,0x8e,0xad,0x7c,0xec,0xd2,0x74 +.byte 0x92,0xfe,0x1b,0xd0,0x73,0x79,0x0b,0x4e,0xcc,0x2d,0x5c,0xe7,0x80,0x2d,0x21,0x1c,0x97,0xfc,0x2a,0xc9,0x9c,0x07,0x10,0x64,0x8b,0xf7,0xf5,0x1c,0x54,0xb6,0x6c,0x73,0x1c,0x50,0xd3,0x1a,0x2a,0x63,0xcb,0xba,0xd3,0x95,0xe2,0xa6,0xc3,0xca,0x45,0xfd,0x5e,0x1b,0xbb,0x6b,0x4d,0xb3,0xf7,0xfd,0xaa,0xf9,0x73,0xb8,0x74,0x4d,0x36,0x7e +.byte 0xcc,0xaa,0x1e,0xf3,0x20,0x68,0xa5,0x0c,0x03,0xe3,0xbe,0xee,0x82,0x03,0x8d,0x10,0xa6,0xf6,0x6c,0x73,0xc2,0x9d,0x74,0xba,0x57,0x17,0xd7,0xfa,0x85,0xf5,0x1e,0x3d,0xf8,0xc7,0x80,0xef,0xcd,0xf0,0xf4,0x46,0xfc,0x07,0xb5,0xc4,0x5f,0xd2,0x04,0x6a,0x90,0xf5,0x76,0xb6,0xf9,0x73,0x22,0xa6,0x09,0x2f,0xbf,0xb5,0x93,0x9a,0x95,0x05 +.byte 0x95,0xaa,0xf9,0x8c,0x71,0xd6,0xc6,0xd9,0x72,0x50,0xf6,0x58,0x77,0x09,0x47,0x97,0x21,0x42,0xf0,0x30,0x5c,0x3c,0xec,0x60,0x67,0xdf,0x5e,0xd2,0xed,0x0f,0xab,0x25,0x11,0xbb,0xf8,0x34,0x1e,0xbd,0x7f,0xc6,0x52,0x19,0xf5,0x53,0x28,0x46,0x75,0x93,0xce,0xc2,0x0b,0xdf,0xfd,0xa5,0xf1,0xb0,0xa2,0x0b,0x97,0xb5,0x76,0xb4,0x8a,0x2b +.byte 0x82,0x55,0x23,0x29,0xc2,0xd3,0x32,0x94,0x2f,0xf0,0xe6,0x77,0x2c,0xe4,0x6a,0x7f,0xd7,0xee,0x84,0xfb,0xba,0xb8,0x4b,0xae,0x13,0x34,0xbd,0xa8,0x12,0x7a,0x3c,0x28,0x40,0x74,0x5d,0x9a,0x11,0x1a,0xe9,0x74,0x31,0x28,0x3d,0x3d,0x64,0xb7,0x54,0xa0,0x51,0x0d,0xed,0x97,0x94,0x56,0x7a,0x48,0x8e,0x36,0xc9,0xae,0x5f,0xc6,0x79,0x45 +.byte 0x4f,0x07,0xdd,0x13,0x52,0x8b,0xfc,0x3b,0x73,0x44,0x68,0x64,0x51,0x0d,0x95,0x6f,0x0f,0x94,0xba,0xf8,0x40,0x64,0x51,0x43,0x49,0x63,0xc1,0xbd,0xf3,0x39,0x7f,0x6e,0x6f,0x45,0xeb,0xd2,0x33,0x44,0x2d,0x10,0xb4,0x68,0xcb,0xcb,0x8c,0x84,0xc5,0xd4,0x63,0x1d,0x23,0x85,0x30,0x4d,0x6c,0xfc,0xc9,0xa4,0x8c,0xd2,0x42,0x69,0x2f,0x17 +.byte 0x86,0xf0,0x17,0xd0,0xb2,0xaa,0xfd,0x62,0xcb,0xb4,0xfd,0xba,0x29,0xf8,0x85,0x45,0x84,0x9d,0xae,0xf8,0x9c,0x8f,0x64,0xd5,0xb8,0xb6,0xa9,0x64,0xf9,0x39,0x86,0x68,0x29,0xac,0x32,0x87,0x84,0x6c,0xb0,0x09,0xd2,0xdd,0xf2,0xec,0xa1,0x3a,0xfd,0x11,0x37,0x54,0x67,0x29,0x62,0x25,0x62,0xe8,0x6a,0x4b,0x5e,0xde,0x9a,0xf0,0x97,0x73 +.byte 0x66,0x69,0x2a,0x21,0xbe,0x95,0x86,0xca,0xf9,0x17,0xe9,0x4b,0x23,0x83,0x1e,0x8c,0x37,0x47,0x91,0x03,0x3f,0x9f,0xb8,0x60,0x2c,0xdd,0x82,0xbd,0x2a,0xc3,0xe7,0x30,0x8f,0x91,0x2b,0xa4,0x23,0x01,0x03,0xb2,0x8b,0xbd,0xd2,0x1d,0x16,0xf7,0x6a,0x86,0xa8,0xe4,0x54,0x6f,0x9c,0x47,0xa5,0x0f,0xbe,0x94,0x56,0xfa,0x18,0x69,0xbe,0x92 +.byte 0xe9,0xf8,0x24,0x4d,0x65,0x42,0x81,0x1f,0x85,0x52,0xb7,0xc9,0x49,0xde,0xa5,0x4c,0x8f,0x0d,0x5f,0x12,0x68,0x68,0x35,0xce,0x29,0x22,0x5c,0x55,0x3e,0xbd,0xce,0xf2,0x2a,0xec,0x7e,0xe1,0x29,0x0a,0x88,0xf3,0x5e,0xeb,0x27,0xe5,0x52,0xee,0x72,0x37,0xba,0xff,0x82,0x97,0xa9,0x5d,0x77,0x6f,0xb9,0xc3,0xa7,0x73,0xba,0x7f,0x2f,0x7a +.byte 0x19,0x32,0x87,0x56,0xa2,0x89,0xb2,0xb4,0x48,0xbe,0x2e,0x30,0x89,0x0a,0x8f,0x75,0x25,0x25,0x5c,0x46,0xe8,0x02,0x45,0xcb,0x03,0xd1,0xa3,0xeb,0x70,0x71,0x08,0x1c,0x46,0xf1,0x2c,0x43,0xe2,0x44,0x30,0x6a,0x61,0x31,0x45,0x3e,0xbb,0x47,0x33,0x24,0x25,0x13,0xeb,0xf7,0x24,0x66,0x15,0x4c,0xf3,0x07,0x2f,0xff,0xdc,0x37,0x0f,0x71 +.byte 0x85,0xc8,0x56,0xa7,0x2a,0x22,0x87,0x8b,0xae,0x35,0x31,0x29,0x96,0xf0,0x81,0xfb,0x2c,0xbf,0x44,0x69,0x69,0x9a,0x77,0xfd,0xc0,0x2b,0x42,0x16,0x67,0xd6,0xbd,0xd0,0xf1,0xb9,0x40,0x8f,0xd2,0x9a,0x1b,0x2c,0x64,0x78,0x6b,0xda,0x37,0x26,0xae,0x4c,0xee,0x36,0xaf,0x84,0x61,0xe4,0x93,0x22,0x64,0xaf,0xee,0x6d,0x69,0x5c,0xe5,0x85 +.byte 0xd8,0xcc,0xcf,0xf3,0xe8,0x05,0xcd,0xd2,0x09,0x66,0xaf,0xbb,0xc4,0x79,0xb2,0xa7,0xa5,0x09,0xd9,0xf5,0xa2,0x83,0x4f,0xd5,0xf5,0xf3,0x7d,0x7a,0xab,0x94,0x83,0xb3,0x15,0xfb,0x0d,0x1a,0x1d,0x77,0xc5,0x63,0x0b,0x54,0xde,0xa8,0x0d,0xc4,0x16,0xe3,0x89,0xeb,0xa3,0x1b,0xd4,0x77,0x13,0xe3,0x55,0x98,0x15,0xab,0x3b,0x32,0xc8,0xd4 +.byte 0x0c,0x91,0x80,0x57,0xf7,0x1e,0x24,0xd0,0x56,0x78,0x29,0xd2,0x03,0xe7,0xc4,0xd2,0x09,0xca,0xee,0x9b,0x60,0x5f,0xa1,0xfd,0xaa,0x85,0x4b,0x68,0x35,0xa4,0x3b,0xef,0x29,0xb8,0x49,0x85,0xee,0xbb,0x39,0xc0,0xc6,0x99,0x97,0xc6,0x86,0x6c,0x27,0xf9,0x1a,0x19,0x6e,0x7c,0xae,0x75,0x41,0x0d,0x08,0x1e,0xf0,0xb4,0xc3,0x9e,0xdb,0x40 +.byte 0x86,0x94,0x9d,0x90,0x09,0x3f,0xdc,0xb9,0xfc,0x59,0x41,0xc5,0x5b,0x89,0x97,0x49,0x4a,0x1a,0x06,0x68,0x83,0xd8,0x7e,0x09,0x51,0xe1,0x86,0xd8,0x88,0xbe,0x8a,0x36,0x48,0xb3,0x83,0x7b,0x57,0xdd,0x8f,0x18,0x67,0x4a,0x7d,0x68,0xab,0xb9,0x05,0xf0,0xe4,0x27,0x4e,0x33,0x44,0xa7,0x13,0x04,0x94,0xc5,0x57,0xaf,0x36,0x03,0xe8,0x09 +.byte 0x36,0x5b,0xe8,0x92,0xad,0x0a,0x79,0x02,0x24,0x43,0x62,0xc7,0xa5,0xce,0x7c,0xac,0x6d,0x0a,0xf2,0x83,0x33,0x05,0x3b,0x6f,0x9d,0xda,0x96,0x9f,0x8b,0x79,0x3e,0x6c,0xd6,0xba,0x7f,0xea,0x84,0xd8,0x23,0xb6,0x92,0xc3,0x9c,0x7f,0x0d,0xcb,0x7b,0x9f,0xbd,0xc2,0xf5,0x6f,0x71,0x67,0x5f,0x0b,0xd1,0x73,0xb5,0x8c,0x46,0x07,0xcd,0xd8 +.byte 0xee,0x28,0xcf,0x8f,0x8e,0x5c,0xde,0x14,0x78,0xc7,0x60,0xd5,0xf4,0x49,0x97,0x46,0x5f,0x49,0x4a,0xb4,0x8f,0xc9,0xd1,0x52,0x34,0x01,0x29,0xa1,0x46,0x55,0xf8,0x29,0x53,0xbb,0x32,0x1e,0x4b,0x89,0x96,0x53,0x0b,0xf2,0x16,0xf9,0xa7,0x70,0x93,0x59,0x78,0xc0,0x77,0x78,0x9f,0x6c,0xb3,0x0e,0x3f,0x6f,0x40,0x09,0x1d,0xd6,0x66,0x4e +.byte 0xe8,0xb0,0xa1,0x14,0x65,0xc8,0xc7,0x3f,0xd2,0xf0,0x1f,0xfd,0x51,0xe0,0x29,0xd6,0x39,0x26,0x60,0xfe,0x62,0xc2,0xe4,0x45,0x6d,0x01,0xdb,0xd3,0x7c,0xdf,0x48,0x10,0x2f,0xf2,0x8e,0x6c,0xc6,0x58,0xc3,0x7d,0x26,0xb1,0x9d,0x52,0x02,0x2a,0x5f,0x2b,0x57,0xca,0x84,0x9d,0x74,0x31,0x01,0x0f,0xda,0x3d,0x7c,0xbb,0xdc,0x71,0x82,0x8b +.byte 0x42,0xaf,0x49,0x9e,0x2c,0xe8,0xdc,0xa1,0xfb,0x23,0x6d,0xdb,0xdc,0x36,0x01,0xc9,0xb3,0x93,0xd4,0x2e,0x8b,0xd1,0xe4,0xed,0x1b,0xd0,0x4c,0xeb,0xaf,0x96,0x57,0xde,0xee,0x90,0xf4,0xa7,0x58,0x46,0x8a,0xd4,0xa9,0x44,0xe0,0xb3,0x13,0x96,0xb2,0x8a,0xb0,0xd3,0xbe,0x71,0x38,0xb7,0x35,0xa9,0xa8,0x48,0x37,0xa3,0x11,0x0e,0x61,0x36 +.byte 0x6c,0xaf,0x6c,0xf2,0x3f,0xd6,0x55,0xb3,0xa5,0xe0,0xaf,0x18,0x6a,0xf5,0x78,0xb5,0x7c,0xc7,0x48,0x24,0x6c,0xea,0x1e,0x7f,0x52,0xb4,0xe8,0x72,0x46,0xd2,0xbd,0x1c,0x9e,0xe6,0x5b,0x3e,0x9c,0x6c,0x6c,0x6b,0x45,0x0c,0x3a,0xb7,0x67,0x3c,0x8e,0x77,0x77,0xbf,0x50,0xb6,0x30,0x6e,0xe1,0x28,0x0d,0x2a,0x85,0x44,0xf8,0xbb,0xf1,0x14 +.byte 0x89,0xaa,0xc2,0x27,0xf5,0x8e,0xa1,0xd3,0x07,0xba,0xe8,0x03,0xcf,0x27,0x1c,0xa6,0xc4,0x63,0x70,0x40,0xe7,0xca,0x1e,0x05,0xb7,0xb7,0xdc,0xc0,0x07,0x4c,0x0d,0x21,0x12,0x60,0x02,0xe3,0x86,0x65,0xe7,0x1c,0x42,0x86,0xdd,0xdb,0x7f,0x26,0x60,0x01,0x3d,0xd8,0x18,0xcd,0x7a,0x9f,0xf8,0xb2,0xf6,0x6d,0xd3,0xe0,0x57,0x1f,0x80,0x30 +.byte 0x2d,0x5e,0x71,0xdf,0x4d,0x7f,0xcd,0x63,0x77,0x19,0x5e,0x2d,0xd5,0xb5,0xfa,0xa9,0x26,0x02,0xb9,0x62,0x2b,0x57,0x80,0x0a,0xe9,0xbc,0xa4,0x3b,0xa7,0xf1,0xf3,0x77,0x2b,0x6b,0x41,0x5e,0xf7,0xe8,0x66,0x23,0x63,0xac,0xcd,0x58,0xfc,0xa9,0x97,0x6b,0x5a,0x1e,0xe5,0x7d,0xfd,0xb1,0x42,0x7f,0x99,0xdd,0x60,0xaf,0x39,0x46,0x36,0xdd +.byte 0xc2,0x70,0x83,0x53,0xd1,0xc3,0x69,0xc8,0x90,0x0e,0x2b,0x34,0xb2,0x0c,0xb9,0x7a,0xb8,0x6b,0x7c,0xc2,0xf3,0xae,0x41,0x24,0xb8,0x94,0x5f,0xdd,0xce,0xda,0x95,0xda,0x49,0x81,0xb6,0xf8,0xa9,0x8e,0xb3,0x79,0xf8,0x55,0xf9,0xcf,0x8c,0x24,0x99,0xfc,0x6b,0x15,0x0f,0x39,0xac,0xd0,0x3e,0x89,0x9d,0xc2,0x46,0x8c,0x99,0x45,0xfd,0xce +.byte 0x13,0x4c,0x9c,0xc8,0x80,0x87,0x8f,0x7b,0x28,0xe3,0x5e,0x2b,0xe3,0x89,0x7e,0x13,0x52,0x52,0xe9,0x3a,0xed,0x33,0xe7,0x28,0xc7,0x7a,0x48,0x8d,0x0e,0xee,0x24,0xc4,0x61,0x04,0x3c,0xd4,0x7e,0xf3,0x30,0x22,0x07,0x58,0xae,0x02,0xc5,0xd1,0x7d,0x04,0x18,0xca,0xd6,0x04,0xd4,0xc5,0xa4,0xff,0x8d,0x0d,0x68,0xd4,0x1a,0x3a,0x72,0x6f +.byte 0x41,0x1e,0xda,0xc0,0x97,0x7c,0x55,0x2c,0x13,0x20,0x9a,0x07,0x35,0xcc,0xc5,0x83,0xee,0x41,0x77,0x51,0x28,0x07,0xe0,0x81,0xe3,0x9b,0x1f,0xdb,0x73,0x5c,0x8d,0x82,0xa2,0x8b,0xf4,0x92,0x4f,0x70,0xa8,0x6a,0xcf,0xbf,0xcf,0x0b,0x71,0xbc,0xeb,0x81,0xb4,0xc9,0x65,0xe7,0x43,0xef,0x25,0x45,0x27,0xea,0xcd,0x60,0x68,0xcd,0x2d,0x7a +.byte 0xfd,0x88,0x6d,0x06,0xd5,0x92,0x32,0xc3,0x18,0x88,0x64,0xa7,0xde,0x39,0xeb,0x0b,0x5c,0x9c,0xf6,0xf6,0x93,0x90,0x24,0x0c,0x9e,0x0b,0x89,0x1c,0xcb,0xc8,0x96,0x72,0x17,0xae,0x46,0x61,0x69,0x6e,0xbe,0x6c,0xf1,0xa4,0xa4,0x50,0xa9,0x2a,0x47,0xd7,0x80,0xe4,0x72,0xd2,0x3f,0x1a,0xdd,0x82,0xdc,0x12,0x66,0x10,0x26,0x15,0x80,0x56 +.byte 0x4d,0xbe,0x02,0xae,0xe1,0x24,0x8a,0x41,0x52,0xc8,0x5d,0x8d,0x62,0x85,0xbe,0x7c,0x35,0xdd,0x88,0xd3,0xf5,0xf7,0x9b,0xf1,0x5a,0x4e,0x70,0x48,0x31,0x5a,0xaa,0x96,0x1e,0xf8,0x73,0xb4,0x0f,0xb2,0x82,0xf4,0x13,0xac,0xba,0x3b,0x12,0x36,0x1e,0x23,0xbf,0x09,0x8a,0x1c,0x96,0x47,0x56,0x2d,0x16,0x24,0xc3,0x23,0x65,0xe2,0x99,0xd0 +.byte 0xf0,0xa0,0x2c,0x64,0x35,0xad,0x16,0x34,0x67,0x52,0xbc,0x8f,0x17,0x90,0xf9,0xc7,0x4f,0x64,0x6c,0x75,0x3f,0xd7,0x48,0xa4,0x6b,0x43,0xe6,0x2e,0x7a,0xe3,0x79,0xe8,0x47,0x51,0xe9,0x52,0x36,0x30,0xa4,0x24,0x89,0x00,0xd5,0x77,0xbd,0x34,0x2e,0xa9,0x74,0x02,0x25,0xc0,0x0c,0x10,0x31,0xf0,0xa7,0xcb,0x01,0xed,0x43,0x70,0x15,0xe6 +.byte 0xda,0x01,0xb4,0x7a,0x13,0xbc,0xf1,0x57,0x34,0xb1,0xb7,0xb3,0x26,0x18,0x5f,0x42,0x6b,0xcb,0x78,0x25,0x48,0xe9,0xe6,0xe8,0xf5,0x45,0xa2,0x61,0x97,0x10,0xa5,0x7e,0x7a,0x48,0xf3,0x23,0xa5,0x88,0xc0,0xc4,0xc7,0x3b,0x5c,0x0c,0xfc,0xe0,0xf4,0x68,0x64,0xc6,0x9f,0xd9,0x17,0xcb,0xe5,0xba,0x4a,0xa4,0xe0,0x27,0xf8,0x2b,0x4e,0x67 +.byte 0x13,0xab,0xd2,0xce,0xbc,0x8d,0xdf,0x6e,0x49,0xaf,0x72,0x8a,0x51,0xa1,0x78,0x38,0x0a,0x58,0x2e,0x72,0xec,0x94,0x70,0x8d,0xdf,0x0b,0x5a,0x52,0x81,0xb1,0x9b,0xda,0x2c,0xd2,0x85,0xbb,0x8f,0xb0,0x99,0x64,0x24,0xbe,0x03,0xd9,0x92,0x8d,0x29,0xf3,0x41,0x9c,0xd6,0xef,0xef,0xb2,0x5c,0x22,0x90,0xff,0x27,0x4d,0xb3,0x91,0x72,0x9f +.byte 0x42,0xca,0x66,0xc5,0x66,0xb7,0x50,0x3e,0x83,0x6f,0x2d,0xe3,0x7b,0x2a,0xc4,0x5a,0x93,0x92,0x80,0xdb,0x1a,0xdd,0xef,0xfd,0x96,0xcb,0x6a,0xd8,0x4a,0xc5,0x6e,0x36,0x4a,0xe4,0x10,0x15,0xb3,0x12,0xb4,0xd9,0x9e,0x37,0x48,0x96,0xcb,0xe5,0x3a,0x4f,0x57,0xa6,0x46,0x2f,0xd3,0x06,0xb8,0x61,0x1c,0x17,0x3a,0xb8,0xad,0x40,0x50,0x57 +.byte 0x10,0xd9,0xd0,0xe9,0x1b,0xe3,0x18,0x8c,0xc4,0xfa,0x08,0x8d,0x82,0x3c,0x22,0x22,0x1b,0x97,0x64,0xa6,0x8b,0x7c,0x70,0x2b,0xa0,0xd8,0x4c,0x64,0xcf,0xbc,0x49,0x78,0xcb,0x92,0x0f,0xe1,0x60,0x12,0x4e,0x92,0x0d,0xaf,0xa4,0x1f,0xe0,0x2a,0xa5,0x69,0xc6,0xa1,0x91,0x5c,0xdd,0xb8,0xae,0xfa,0xc5,0xb9,0x18,0x31,0x81,0x32,0x6e,0x97 +.byte 0x44,0x2a,0xda,0x58,0xcd,0x9e,0x0d,0x57,0xe0,0xe3,0x5f,0x7b,0x04,0xd8,0xc8,0x68,0xf5,0xa2,0xac,0x0c,0x29,0xf0,0x7e,0xff,0x32,0xfb,0x53,0x1a,0xc2,0xe3,0xae,0xa5,0xe4,0x9c,0x50,0xaf,0xf4,0xde,0x0b,0xdd,0x4d,0xfa,0x65,0x3c,0xbe,0x3c,0xb8,0xda,0x88,0xd9,0x6c,0x55,0x58,0xe1,0x4d,0x00,0xa8,0x1e,0xe2,0x3a,0x9c,0x53,0x9b,0xca +.byte 0xb7,0x5d,0x3a,0x83,0xe0,0xbb,0x95,0xc4,0xd5,0x45,0x48,0xdc,0x12,0xab,0x24,0xfc,0x5d,0x91,0xe1,0xc8,0x0a,0x5c,0x10,0xc4,0xc9,0xaf,0xb6,0x54,0x80,0xfd,0xa0,0x70,0xb9,0xab,0xdf,0x34,0x9f,0x5c,0xff,0xde,0x8e,0xa0,0x0b,0x21,0xcf,0x28,0xc4,0xdf,0x67,0xb5,0xc0,0x20,0x49,0x0c,0x7e,0xe6,0xf7,0x41,0x6b,0x75,0xd9,0x1d,0x3b,0x49 +.byte 0xb7,0x4f,0x01,0xd1,0x20,0x62,0x15,0x1e,0x9f,0x16,0xb0,0xbd,0x30,0x09,0x05,0x00,0x0f,0x25,0x5a,0x37,0xe9,0xa6,0xc6,0xef,0xe5,0x39,0x2b,0xd7,0x6b,0xc5,0x96,0xd2,0xad,0x46,0xaf,0xd3,0xc0,0xfd,0xea,0xff,0x4c,0xaa,0x44,0x48,0x9a,0xdb,0x99,0x44,0x3f,0x4a,0xf0,0x3f,0x81,0x75,0xf2,0x79,0x31,0x3c,0xed,0x56,0xc6,0xf0,0xf1,0x8c +.byte 0xdb,0x1d,0x6c,0x6c,0xcc,0xfb,0xc2,0x30,0xf6,0x24,0x14,0x69,0xc4,0x89,0x4d,0xd0,0x10,0x77,0x37,0x00,0xe8,0xc9,0xf2,0x32,0xf1,0x43,0x8b,0xe1,0x09,0xc4,0x59,0x17,0xf9,0x20,0x2b,0x01,0x76,0x20,0xb8,0x03,0x84,0xf6,0xd7,0x2e,0xef,0x20,0xa6,0xfa,0x8b,0x74,0x7f,0x4a,0x14,0x33,0xad,0xac,0x45,0x66,0x18,0x2b,0x6b,0xd2,0xb8,0x20 +.byte 0x1a,0xff,0xca,0x25,0x69,0xfd,0xba,0x4b,0x5b,0x9c,0x38,0x35,0x4c,0x30,0xa2,0x24,0x3d,0xbb,0xd4,0xf3,0x67,0x24,0xa5,0x93,0xc6,0xf5,0xb2,0xb4,0xa5,0x04,0x53,0xb6,0xe4,0xc7,0xdc,0xf1,0xe5,0x43,0xb7,0x73,0xaa,0xab,0x5c,0xea,0xcb,0xf1,0xeb,0x5b,0x04,0x7a,0xff,0x0f,0x5e,0xb4,0xd3,0x2a,0x39,0x50,0x1b,0x54,0x1f,0x32,0xd7,0x7c +.byte 0xea,0x3f,0xee,0xa5,0xc8,0x46,0x48,0x7e,0x75,0x60,0x7a,0x42,0x42,0xd3,0x15,0x07,0x69,0x46,0x1c,0xe2,0x21,0x31,0x94,0x31,0x24,0x9e,0x39,0xab,0x7a,0xf9,0xc2,0x0b,0x2d,0x6b,0x55,0xa3,0x36,0xb2,0x65,0xf2,0x17,0x08,0xde,0x15,0x83,0x07,0x36,0x12,0x54,0x8f,0x0b,0x23,0xa8,0x7e,0xb5,0x57,0x1c,0x9e,0x29,0xd7,0xd4,0x9b,0xc1,0xf6 +.byte 0x94,0x23,0xf3,0x92,0xbf,0xba,0xc8,0xf5,0x78,0x3e,0x67,0x48,0x14,0x3b,0xd4,0xe9,0x8f,0x78,0xc1,0x4b,0x9a,0x59,0x08,0xaa,0x50,0xf4,0x9d,0xc4,0xc3,0x2c,0xbc,0x56,0x2c,0x13,0x30,0x75,0xfb,0xed,0x48,0xab,0x90,0xec,0x64,0x18,0xb5,0xd5,0xb5,0x7f,0xc1,0x7f,0x83,0xf2,0xdb,0xae,0xde,0xf5,0xb5,0x29,0x03,0xbe,0x80,0xb1,0x5d,0x97 +.byte 0xd3,0x7a,0xa4,0xd0,0xe0,0xce,0x04,0xda,0xaa,0x82,0x19,0xc9,0x02,0xb7,0x1c,0xe1,0x66,0xd9,0x3e,0x86,0x6d,0xb5,0xd1,0x35,0x63,0x8e,0x4b,0xc6,0x58,0x41,0xf9,0xb7,0xba,0xf3,0x06,0x91,0xb7,0xa2,0xfb,0xb5,0x5f,0x53,0xf3,0xe0,0xc1,0xf6,0x91,0x66,0xc7,0x93,0x3a,0x0a,0x72,0xb1,0xed,0x36,0x9d,0xde,0x21,0xdd,0x7d,0x0a,0x7b,0x35 +.byte 0x1f,0xc3,0x56,0xde,0xbb,0xcb,0xb2,0x0a,0xb6,0x84,0xce,0xa1,0xc6,0x1a,0x46,0x2f,0x9f,0x48,0xd5,0x98,0x73,0xa4,0xbd,0xbd,0xa3,0xe9,0xc9,0xc4,0x64,0x89,0xb7,0x9c,0x97,0x7c,0x2f,0x88,0x22,0xe4,0x4b,0x71,0x3d,0x2a,0x47,0xee,0xf8,0xfe,0xe0,0xf7,0x03,0x14,0xe6,0x7c,0x9e,0x57,0xbb,0x8e,0xf5,0xea,0x63,0xfc,0x5b,0x18,0x3b,0xa2 +.byte 0xa1,0x4a,0x28,0x82,0x37,0x77,0x5b,0xc4,0xd3,0xc1,0xf2,0x87,0x13,0x2b,0x2a,0xc8,0xac,0x70,0xe1,0x82,0x38,0x9c,0x12,0xa0,0xc4,0x9e,0x6b,0xac,0x33,0x8a,0xe9,0x31,0x6f,0xa1,0x76,0x94,0x48,0xcf,0xbc,0x78,0x22,0x82,0x6a,0xb0,0xb9,0x49,0x71,0xdb,0xde,0x8b,0x90,0x09,0x82,0x4d,0x79,0x17,0xe8,0xcf,0xd8,0x50,0xc3,0x08,0x07,0x81 +.byte 0x5f,0x9a,0x72,0xce,0x0a,0xe4,0x29,0xc9,0xdd,0x95,0x67,0x58,0xa1,0x14,0xec,0xcf,0x2f,0x29,0xcf,0xce,0xb3,0x35,0x54,0x77,0x67,0x56,0xec,0x95,0x68,0xee,0xbf,0x9c,0x9f,0x74,0x78,0x12,0xd5,0x30,0x83,0x28,0xd5,0x36,0x96,0x57,0xa0,0x8d,0x1c,0x99,0x19,0x04,0xaf,0x25,0xe5,0x71,0x83,0x88,0xb0,0x74,0x38,0xdd,0x8a,0xff,0x39,0x7a +.byte 0xfd,0x34,0x8f,0x9c,0x67,0xa8,0xc8,0x6f,0x13,0x5d,0xf2,0x5b,0x22,0xd3,0x8e,0x63,0x51,0x58,0x9b,0xfc,0xaa,0x89,0x65,0x4e,0x36,0xc4,0xa7,0xef,0x98,0xf9,0xaf,0xcd,0x35,0x8c,0x16,0xbc,0x70,0x4f,0xcd,0x71,0x2a,0xf4,0x13,0xb3,0x3d,0xa3,0x92,0x71,0x45,0xe5,0x9a,0x45,0xbd,0xc5,0x1d,0x82,0x60,0x3a,0x97,0xf3,0x0f,0x96,0x21,0x3d +.byte 0xe5,0x6e,0xfb,0x9d,0x9b,0xeb,0x15,0xc2,0xa6,0x73,0x76,0xf2,0xcd,0xec,0xfd,0x0f,0xf4,0x3f,0x46,0xc9,0x9c,0x73,0xa1,0x21,0x08,0xdc,0x31,0x00,0xaa,0x95,0x07,0xf0,0x3d,0x51,0x57,0xfa,0x6b,0xc3,0x8e,0xe9,0xa4,0x65,0xdc,0xff,0x57,0xb9,0x1f,0x4f,0xc6,0x6d,0x03,0x00,0xa7,0x19,0xb8,0x24,0xb5,0x3d,0x87,0xcb,0x84,0xb7,0xf5,0xfe +.byte 0x51,0x16,0x5b,0xc7,0xed,0x4b,0xff,0xa3,0x66,0x17,0x93,0x60,0x69,0x84,0x8c,0x95,0x74,0xa7,0x30,0x2d,0x09,0xf7,0x4e,0x0e,0x2f,0x99,0xda,0x46,0x34,0x0f,0x93,0x90,0x97,0x4c,0xa6,0x25,0x15,0xb8,0x6f,0x1d,0xd5,0xe1,0xc1,0x39,0x50,0xfd,0xd5,0x79,0x4f,0x04,0x2f,0x76,0x50,0x3f,0x67,0x56,0xad,0x02,0x82,0x30,0x1a,0xaa,0x6e,0xe2 +.byte 0x05,0x6a,0x93,0xb7,0xbe,0xde,0x84,0xce,0xd8,0x53,0xed,0xad,0x95,0xab,0x45,0x1f,0x4c,0x3b,0x22,0x36,0x27,0x45,0x19,0xa4,0x7f,0x12,0x20,0x6c,0x9d,0xeb,0xd2,0xfe,0xd6,0x7d,0x25,0xf9,0xe3,0x64,0x77,0x56,0x89,0x12,0x57,0x80,0xd5,0x40,0xbb,0x2a,0xcc,0xac,0x34,0x8e,0x87,0xfd,0x58,0xc3,0xbd,0x92,0x48,0xd8,0x7f,0xc4,0x39,0x6a +.byte 0x4e,0x1c,0x50,0x93,0xef,0xae,0x81,0x93,0x50,0x95,0x6e,0x46,0x7c,0xf5,0x27,0x44,0x6c,0x21,0x06,0x49,0x89,0x7e,0xf4,0xfa,0x08,0xa5,0xbc,0x0a,0xbd,0xb6,0x7b,0x55,0xac,0x87,0x19,0x33,0xfa,0xab,0xf3,0x15,0xc9,0x1b,0x83,0xf2,0x41,0xf1,0x26,0x6f,0xdf,0x15,0x60,0xdb,0xa6,0x03,0x43,0x3e,0x34,0x7a,0xa9,0xb1,0x38,0x57,0xe4,0x09 +.byte 0x1a,0x4a,0xd8,0x6e,0x28,0xee,0x7d,0x74,0x54,0x03,0xb3,0x29,0x24,0xb3,0xf0,0xc6,0x20,0x7c,0x47,0x01,0x66,0x36,0x7a,0x14,0x18,0x09,0xd6,0xaa,0xa6,0x82,0x5b,0xe4,0x0a,0xf9,0x41,0x52,0x3b,0x56,0xa2,0xf8,0xa2,0xa1,0x2b,0xe0,0x0d,0x1f,0x5b,0xe4,0x0e,0xe1,0x94,0x84,0x6f,0xed,0x2e,0x11,0xfa,0x4a,0xbd,0x41,0xf4,0x3c,0x8c,0x7e +.byte 0x94,0x46,0xec,0x79,0x81,0xb0,0x36,0xfd,0x9c,0x73,0x0f,0x84,0x1a,0x59,0x4e,0x1b,0xd5,0xd1,0x0d,0xff,0xfd,0xb7,0xfb,0x73,0x35,0x8a,0x66,0xed,0xf3,0xee,0x6d,0xf7,0x86,0x0a,0xb9,0xc0,0xf1,0xa3,0xb7,0x32,0x49,0x01,0xe8,0xcd,0xfe,0x82,0x7b,0xf6,0x46,0xd8,0x73,0x47,0x8b,0x7b,0x6e,0x31,0x92,0x0f,0x4b,0x16,0x11,0x86,0x1d,0x02 +.byte 0x5d,0x12,0x79,0x59,0xdc,0x8c,0xaa,0x1b,0xc1,0x75,0x63,0xb2,0xd6,0xbf,0x19,0xb0,0x81,0x70,0x34,0x12,0xd2,0x09,0xbe,0x6d,0xa1,0x31,0x77,0xd2,0x9b,0x59,0xdc,0xcb,0x67,0xb5,0x14,0xcd,0x37,0x31,0x2c,0xa6,0x17,0x58,0x2b,0x24,0xfc,0x2a,0x9e,0x8f,0x38,0x38,0x7a,0x80,0xda,0x8b,0x54,0x1d,0xc9,0x99,0xc7,0x1f,0x98,0x7a,0x1f,0x32 +.byte 0x23,0x1c,0xb5,0x6e,0x53,0xd3,0x61,0xe7,0x78,0x19,0x6c,0xd5,0x2f,0x85,0xde,0xd1,0x67,0x6b,0x9b,0xa1,0x09,0x87,0x5e,0x89,0x5e,0x89,0x21,0x36,0xf2,0x94,0xc1,0xfd,0x6c,0x4e,0xd9,0x6b,0xd2,0xb1,0x1b,0x48,0x37,0x9a,0x7b,0xc9,0x52,0xfd,0xe2,0x6d,0x07,0x19,0xf2,0xa5,0x69,0xdc,0x0b,0x52,0x8f,0xb3,0x87,0x03,0x1a,0xd8,0x43,0x20 +.byte 0x68,0xcf,0x08,0xcc,0xce,0x37,0xf6,0x96,0x7f,0x03,0x62,0xb2,0xce,0x6a,0xfb,0x22,0x54,0xd6,0xfc,0x84,0x5c,0xf5,0x55,0x32,0x36,0x77,0x1d,0x15,0x6a,0x2c,0x3a,0x01,0x34,0xff,0x5b,0x7f,0x3f,0xab,0x97,0x8f,0xbd,0x1d,0x07,0xb9,0x47,0xb1,0xcc,0xc0,0xdf,0x17,0x38,0x54,0x07,0xc0,0x1b,0xb9,0xa2,0x29,0xa6,0x25,0x73,0x32,0x4d,0x5e +.byte 0x51,0x60,0xb3,0x27,0xe5,0xb6,0xdb,0x56,0x81,0x95,0x03,0x7e,0xca,0xc6,0x15,0x8f,0x48,0xd4,0xac,0x71,0x41,0xdc,0x9c,0x86,0x5d,0xd8,0x90,0x90,0x54,0xdd,0x3d,0xf3,0xa8,0xbb,0xe5,0x55,0x69,0x26,0xdf,0xd1,0x8e,0x75,0x2a,0xe4,0xfe,0xe0,0x80,0x1d,0x6b,0xd2,0x8a,0x06,0x49,0x4e,0x60,0xf8,0xbd,0x3d,0x99,0x27,0x80,0x27,0x42,0x66 +.byte 0x01,0x32,0xe1,0x9e,0xa6,0xde,0x7b,0x14,0xa4,0x49,0x68,0x70,0xbe,0xa4,0xe1,0x44,0x2e,0xce,0xa3,0xe9,0x1d,0x7a,0xbd,0xf1,0xe4,0x25,0x11,0x47,0xd8,0xaa,0x32,0x34,0xf8,0xca,0x3d,0xec,0xf3,0x5d,0x8a,0x55,0xe7,0xd4,0x7c,0xfb,0xcf,0xe7,0xa6,0x13,0xaa,0x16,0x5f,0xaa,0x02,0x19,0xdd,0xf1,0xf8,0x5c,0xb2,0x1e,0x68,0x9a,0x21,0x93 +.byte 0xd1,0x38,0x31,0xbb,0x26,0x76,0x44,0xf8,0x84,0x3b,0xf5,0xd1,0x52,0xbe,0x1b,0x8e,0x4d,0xa0,0xb4,0x4a,0x5a,0x7e,0x89,0xe5,0x36,0xb0,0x76,0x77,0xc5,0xc2,0x22,0x73,0xc2,0x19,0x12,0x7f,0xdf,0x9c,0xb8,0xc0,0xf5,0x0e,0xd5,0xa3,0x55,0xae,0x61,0xf8,0xf1,0x6b,0x79,0xc8,0x2e,0xbc,0xa5,0xef,0xd4,0xb1,0x84,0x0c,0x15,0xc4,0xed,0xb3 +.byte 0x18,0x29,0xd6,0x31,0x83,0x79,0x30,0x1a,0x8f,0xf0,0x3b,0xe9,0xd1,0xf2,0x1d,0xec,0xcb,0xe8,0xc5,0x1c,0xb5,0xcb,0x8e,0x01,0xd1,0xb2,0x86,0x43,0x33,0x95,0x70,0x7e,0x75,0xa9,0xa1,0xe7,0xcb,0xd9,0xf4,0xd3,0xe1,0xe2,0xe9,0x46,0x21,0x20,0x3b,0xe9,0x48,0x1c,0x3f,0x93,0x57,0x31,0xeb,0x15,0x9c,0xa7,0xa6,0xcb,0xb5,0xb7,0xa7,0x24 +.byte 0xbe,0x66,0x4c,0x92,0x7c,0xe8,0x8e,0x3f,0x9c,0xa9,0xd7,0xad,0x73,0x68,0x19,0x19,0xd4,0xb5,0x57,0x82,0xdc,0x67,0x3c,0xec,0xac,0x06,0xec,0x86,0x9b,0x65,0xff,0xbb,0xc3,0x90,0x48,0xdb,0x52,0xcc,0xa4,0xf5,0xdf,0x2c,0xc5,0x5a,0xe3,0x30,0xed,0xad,0x37,0x40,0x8c,0xaa,0x32,0x4f,0x94,0x1e,0x14,0x59,0x48,0x1d,0xd3,0xaf,0x80,0xe7 +.byte 0xcf,0x6b,0xa7,0x70,0xe7,0x98,0x22,0x4b,0x40,0x02,0x0c,0x29,0x09,0x0a,0x53,0xf7,0xd4,0xeb,0xbb,0x75,0xb4,0x30,0x1c,0x67,0xea,0xd2,0xb5,0x40,0xfe,0x57,0x2c,0x3c,0x44,0x8d,0x8d,0x02,0x78,0xf0,0x76,0x8f,0x92,0xab,0xb4,0xc9,0xc0,0x2f,0xf5,0xde,0xa7,0x09,0x14,0xf1,0xe5,0x34,0xeb,0x86,0xfa,0xcf,0xcc,0x85,0x1c,0x9c,0xa6,0xe1 +.byte 0x72,0x9e,0xc1,0xe4,0x74,0xc4,0x96,0x5d,0xf4,0x4b,0x23,0x4f,0xa5,0x32,0xff,0x38,0x21,0x8f,0x43,0xe5,0x96,0x20,0x3c,0x78,0xb8,0xb4,0xcd,0x29,0x62,0x84,0x59,0xb5,0xb4,0x57,0x07,0xa8,0x79,0x77,0x21,0xf4,0x82,0xa7,0xb1,0x36,0xee,0x16,0x8e,0xb5,0x9a,0xf7,0x03,0xac,0x64,0x03,0x20,0x48,0x24,0xbc,0xbb,0xec,0x50,0xed,0xa1,0xf3 +.byte 0x67,0xd9,0x34,0xe1,0x0c,0x0b,0xc3,0xd0,0x46,0x0b,0x55,0x85,0x59,0x3c,0xb4,0x7d,0xd0,0xc2,0xe7,0x95,0x24,0x1f,0x53,0x76,0xf1,0x81,0x4a,0x61,0x6a,0x2e,0x3b,0x3f,0x92,0x14,0x7c,0xe0,0x33,0x7f,0xb4,0x85,0x92,0x78,0x0c,0x0b,0xe7,0xbd,0x7a,0x08,0x31,0x7d,0x47,0x3b,0xfa,0xdd,0x90,0x9e,0xf0,0xa9,0xd1,0xa7,0x7c,0x2a,0x37,0xb1 +.byte 0x23,0x71,0x34,0xa0,0x63,0xfb,0x9e,0x8f,0x39,0x00,0xa0,0x09,0xd4,0x1f,0xf4,0xba,0x2d,0xc1,0xac,0x6c,0x94,0x18,0x56,0x3e,0x89,0x92,0x63,0x10,0x5e,0xfe,0x76,0xec,0x4e,0xb6,0x5d,0x59,0xf9,0x94,0x46,0x4f,0xda,0xd5,0x3e,0x6c,0x48,0x49,0x7e,0x7c,0x77,0xe7,0x7e,0x22,0x31,0xb5,0x9d,0x15,0xd3,0x08,0x24,0xdb,0x67,0x98,0x6b,0xfc +.byte 0x45,0x54,0x85,0x29,0x9a,0x47,0xa5,0x60,0xe2,0x46,0x36,0x45,0x16,0x54,0xd6,0xb1,0x5c,0x38,0x45,0xf8,0x43,0x28,0x58,0x81,0xc9,0x57,0x10,0xda,0x3b,0xfc,0x3e,0xe4,0xf4,0xb2,0x16,0xb6,0x16,0x1d,0xa4,0x68,0xa6,0xe0,0x36,0xdb,0xe2,0x19,0x1c,0xce,0x9f,0x94,0xa9,0x94,0xad,0x20,0xcb,0x17,0xd0,0x92,0x37,0x75,0x88,0x0d,0xaf,0xdf +.byte 0x98,0x6d,0x19,0x9e,0x8e,0x61,0xe4,0x8c,0xfc,0x27,0x27,0x6a,0xa7,0xa4,0x66,0x7f,0x08,0x03,0xef,0x5c,0x4a,0xb7,0x89,0xa1,0xae,0xe8,0x70,0x3f,0x13,0x27,0x0a,0x7d,0x5d,0x5e,0x2b,0x69,0xb5,0x98,0x1f,0x25,0x1e,0x41,0xff,0x46,0x5a,0x25,0x1f,0xb4,0x90,0x8e,0x81,0x91,0x19,0x63,0x10,0xd4,0xa9,0xdf,0x3b,0xae,0xe6,0x63,0x1a,0xdc +.byte 0x09,0x5f,0xac,0xaa,0xb8,0x6b,0xbd,0x6a,0x90,0x70,0xce,0x2c,0x63,0x6d,0x48,0x78,0xca,0xc1,0x59,0x94,0xe2,0xc7,0x89,0x17,0x73,0xfa,0x73,0x34,0xb7,0xd3,0x9c,0x4e,0xd8,0xac,0x18,0x80,0x25,0xbf,0xbe,0x75,0x0a,0x9a,0x05,0x5e,0x54,0xcb,0xba,0xab,0xca,0x7f,0x96,0xf7,0x26,0x8c,0x82,0xe0,0x23,0xa5,0x86,0xb5,0xdf,0x31,0xd0,0x2f +.byte 0xe3,0x66,0x96,0x83,0xd2,0x04,0x43,0x8a,0x28,0x59,0x49,0xdc,0x11,0x38,0xd9,0x5f,0xc2,0x31,0xaa,0xa8,0x1a,0xff,0x57,0xf1,0x84,0x18,0x28,0xe8,0x04,0xae,0x98,0xa4,0x17,0xc4,0x35,0x75,0xf5,0x37,0xf5,0x27,0x3e,0x7e,0x32,0xa4,0xcb,0xd4,0x43,0x59,0x02,0x63,0x7b,0x7c,0x9d,0xa7,0x61,0x12,0xf7,0xdc,0x12,0xe0,0x07,0xac,0x96,0xf3 +.byte 0x71,0x43,0xe5,0x30,0xe0,0x4c,0x51,0x2a,0x19,0xf5,0x79,0x59,0x5a,0xc5,0x74,0xfa,0x54,0x18,0xb4,0xb1,0xfb,0x4b,0x9b,0xf8,0xe4,0xa4,0x63,0x25,0xc3,0x84,0xeb,0x2e,0xa1,0xf8,0xf8,0x7b,0x25,0x6a,0x7d,0x14,0x38,0x06,0xeb,0xae,0x9f,0xa5,0x80,0x9a,0x8a,0xb6,0x46,0x95,0xdf,0x52,0x11,0xd4,0x30,0xcc,0x11,0x8f,0x4a,0x5e,0x56,0x26 +.byte 0x60,0x3d,0x5f,0x0b,0x04,0x94,0xcd,0xca,0x1d,0x6b,0x83,0x51,0x83,0x8d,0xf8,0x33,0x4a,0x91,0x00,0xa4,0xf5,0x44,0x5b,0xad,0xa0,0x4a,0x72,0xaf,0xe6,0x4a,0x0d,0x1e,0x9f,0x18,0x6b,0xb4,0xdf,0x85,0x61,0x2a,0x3b,0xe1,0x4c,0xaa,0xc3,0x17,0xef,0x51,0x9f,0xae,0xb5,0xca,0xaa,0x6c,0xd9,0xa1,0xf5,0xa3,0x6f,0x1c,0xca,0xb3,0x37,0xda +.byte 0x27,0xea,0xcb,0xb7,0x36,0xb2,0x11,0xda,0x9f,0x07,0x78,0xaa,0x6c,0xad,0x63,0x9b,0x49,0x6b,0xfe,0x1f,0x93,0x82,0x73,0xc9,0xc8,0xf6,0x68,0x54,0x50,0x77,0xba,0x78,0xc7,0x82,0xee,0xbd,0x97,0x66,0xb9,0x22,0x49,0x0d,0x7a,0x1f,0x0f,0x4e,0xe5,0x02,0x8b,0xa6,0x1b,0x11,0xfc,0xa6,0x37,0x2a,0x5c,0x66,0xaf,0xac,0xa5,0x9f,0xbf,0x26 +.byte 0x98,0x9b,0x25,0x44,0x48,0x09,0xe6,0x76,0xb9,0x08,0xf1,0x37,0xcf,0x86,0xc9,0xdf,0xa8,0xf3,0x88,0x2f,0xc1,0x33,0x15,0x95,0x59,0xf7,0x9b,0xf2,0x48,0x76,0xcb,0xd0,0x31,0xe4,0x27,0x74,0x2d,0x6e,0xd2,0xc3,0x29,0xea,0xef,0xff,0x4e,0x3d,0xda,0x3e,0xef,0x94,0x94,0x40,0xcd,0x93,0xcf,0xb8,0x56,0x29,0xf8,0x20,0x20,0xa3,0x66,0x83 +.byte 0xba,0xc8,0x4f,0xe6,0x22,0x96,0xb5,0xb2,0x44,0x75,0x55,0x98,0xed,0x11,0xd0,0x58,0x50,0x26,0xf1,0x4a,0xf6,0x80,0x5c,0x17,0x92,0xba,0xc2,0xd6,0x68,0xd4,0x7a,0x4f,0xdf,0x16,0x97,0xbd,0xad,0xd7,0x1b,0x0c,0xe5,0x23,0xa9,0xaa,0xf4,0x1c,0x8d,0xec,0xbf,0xf0,0xb5,0xaa,0x49,0xfd,0xf1,0x31,0x9b,0xf9,0xe9,0x21,0xa1,0x20,0xab,0xbe +.byte 0x56,0x8c,0xf2,0x85,0xdc,0x1f,0xea,0x25,0xce,0xf5,0x6c,0x18,0x7d,0xc4,0x1a,0x01,0x08,0x01,0xed,0x02,0xa8,0xac,0x7f,0x74,0x2c,0xd7,0x28,0x25,0x6e,0x68,0x19,0x38,0x8d,0x20,0x51,0x8f,0x38,0x8b,0x03,0x36,0xae,0x50,0x35,0x28,0x65,0x7e,0x15,0x2a,0x80,0x2c,0xae,0xcd,0xb3,0xb6,0x91,0xf1,0x8c,0xf2,0x8c,0xc5,0xce,0x3e,0x3a,0x97 +.byte 0x5a,0xff,0xe1,0x37,0x13,0xf7,0x6b,0x07,0xb2,0xaa,0xaa,0x57,0x18,0xb7,0xb2,0x19,0x52,0xbf,0x59,0x0b,0x6f,0xba,0x56,0x54,0x14,0xac,0x21,0xfd,0x7d,0x03,0x4b,0x0b,0x39,0x54,0xba,0xf9,0xba,0x73,0xcd,0x67,0x13,0x30,0xca,0x19,0x80,0x4f,0x18,0xb4,0x75,0x2a,0xec,0x78,0xa7,0xd0,0x5c,0x53,0xe2,0x43,0x2c,0x08,0x5f,0x5c,0xe6,0x60 +.byte 0xde,0x04,0xf6,0x75,0xca,0x35,0x3b,0xf6,0x68,0x53,0x60,0xc0,0xed,0xb0,0x15,0xa1,0xa4,0x89,0x23,0x34,0x49,0x35,0xd2,0x78,0x4b,0x8f,0x7c,0x8d,0x59,0x22,0x9f,0xad,0x72,0x47,0x5b,0xde,0xf2,0x09,0x08,0xa0,0x8d,0x5f,0x4d,0xc3,0xd1,0x83,0x17,0xbc,0x39,0x8e,0xa5,0x53,0xaa,0xe3,0x31,0x03,0x93,0x14,0xb4,0x57,0xf0,0xdf,0x54,0x1d +.byte 0x79,0x4d,0x21,0x1a,0x8f,0x3f,0x6e,0x07,0x41,0xcc,0x2d,0x94,0x55,0x4e,0x50,0xfd,0xac,0xe3,0xef,0xa7,0x50,0x3b,0x3c,0xda,0x32,0x25,0xee,0xd9,0x01,0x37,0x8e,0xb3,0x23,0xc5,0x5e,0x12,0x88,0x6d,0xd5,0x41,0xfd,0x3f,0xfa,0x75,0xb8,0xcb,0x82,0x10,0x81,0x38,0x1b,0x10,0x2d,0x2c,0x6b,0x62,0xa1,0x7c,0xd1,0x75,0xd8,0x8c,0x0c,0x2f +.byte 0xe8,0x97,0xff,0x18,0xb3,0x12,0xa2,0xef,0x6c,0xc5,0x79,0x9f,0x64,0xf3,0xc7,0xdc,0xdb,0x54,0xa4,0x25,0xc7,0x30,0xfb,0x6c,0x5a,0x50,0x24,0xf9,0xb6,0xc9,0xe7,0xda,0x78,0xcc,0x1b,0x5e,0xf3,0xe7,0x32,0xd8,0x36,0x47,0x10,0xe5,0x2c,0xeb,0xea,0xf7,0x25,0x30,0x93,0x64,0x88,0xc8,0x59,0xf8,0x5c,0x02,0x43,0x4c,0x23,0x8e,0x1c,0x42 +.byte 0xe4,0x36,0x39,0xbf,0xba,0x8b,0xe3,0x53,0x01,0x32,0x0d,0x89,0xc2,0xea,0x35,0x94,0xf1,0x0d,0x29,0x45,0x08,0x07,0x15,0xcb,0xd7,0x3e,0x4d,0x9f,0x04,0xd8,0x18,0x8a,0x56,0xa3,0xb1,0x1c,0x46,0x19,0x8b,0xd0,0x51,0x30,0xf3,0xca,0x52,0x2a,0x16,0xc4,0x90,0xc1,0x00,0x50,0x87,0x8b,0x4c,0x71,0x61,0x48,0x69,0xb2,0xf1,0x33,0xaa,0x79 +.byte 0x81,0x8b,0x36,0x33,0x19,0x41,0x6b,0xc1,0x91,0x40,0xf2,0xcc,0x1d,0x83,0x09,0xab,0xcc,0x6f,0x6c,0x54,0x91,0x62,0x80,0xac,0xe6,0x1f,0xcd,0x5d,0x05,0x2b,0xe5,0xac,0xbc,0xd6,0x1b,0x8b,0xef,0x95,0xa0,0xf3,0xfe,0x8e,0x4d,0x32,0x77,0xe8,0x02,0x8f,0x44,0xad,0xc4,0x40,0xc3,0x99,0x68,0x81,0x47,0x15,0xbd,0x3b,0x8f,0x0b,0x9b,0x3a +.byte 0xb3,0x9d,0x8f,0x3d,0x86,0xd1,0x89,0x5f,0x67,0x19,0x33,0x2d,0x18,0x64,0x0e,0x3a,0x13,0xa4,0xe9,0xb4,0xc9,0x90,0x09,0x6a,0xcb,0x5d,0x0d,0x83,0x13,0x04,0x29,0xe5,0xa5,0xf4,0x00,0x56,0xf4,0x80,0x96,0x33,0x93,0xe4,0x9b,0xc4,0x6e,0x38,0xbf,0x0a,0xe0,0xee,0x8c,0x89,0x5d,0x60,0x36,0x7e,0x69,0xc2,0xc7,0x28,0x6f,0x2b,0x97,0xfb +.byte 0xb3,0x5b,0x82,0xe8,0x9a,0x36,0x44,0xd7,0x1f,0x9b,0x1b,0xd0,0x14,0xe4,0xd4,0x0d,0x35,0xcd,0xee,0x88,0x50,0x37,0x5c,0x88,0x09,0xa5,0x16,0x4d,0xe1,0xbc,0xe8,0x79,0x8f,0xa9,0x18,0xb8,0x43,0xb4,0xd7,0x32,0xcd,0x26,0xdd,0x78,0x29,0x59,0xad,0x29,0xe3,0xe0,0xe7,0xcf,0x16,0x03,0xc6,0x8a,0xb6,0xa2,0x09,0x9a,0x6e,0x90,0x7b,0x0c +.byte 0x9d,0x20,0xb6,0xc4,0x28,0x3f,0x44,0x06,0xa9,0x45,0x72,0x27,0xa7,0x56,0x3f,0x07,0xff,0x13,0xd9,0x80,0xda,0xbd,0x25,0xad,0xd3,0x74,0x2c,0xd8,0xd2,0x93,0xa5,0xda,0xbc,0x5f,0xa5,0xde,0xb7,0x3a,0xf0,0xd2,0x17,0xb1,0xc3,0x70,0x2a,0x85,0xde,0xf0,0x97,0x7b,0x96,0xb2,0x0e,0x45,0x7f,0x63,0xd4,0x94,0xd8,0x78,0x05,0xcf,0xea,0xb3 +.byte 0xfb,0x7a,0x79,0xb5,0x91,0x53,0xb8,0x8c,0xa2,0x03,0xf4,0xc3,0xed,0xf0,0xab,0x33,0x5c,0x6e,0xcd,0xbd,0x73,0xe3,0xe9,0xd0,0x83,0x2a,0x2a,0x68,0x32,0xf1,0x69,0x4f,0xd0,0x8b,0xe8,0xa1,0x7d,0x5b,0x0f,0x69,0xc2,0x33,0xbf,0xc1,0x54,0x29,0x47,0xed,0x9f,0xdb,0x35,0x0a,0x3d,0x2b,0x9d,0x8b,0x91,0xb6,0xe0,0xbc,0x53,0xba,0xb7,0xcd +.byte 0x2c,0xd9,0xeb,0x81,0xa0,0x2e,0x14,0x6e,0xdc,0xe1,0x90,0x36,0x14,0x9d,0xa8,0x8b,0x6b,0x1b,0xac,0x4c,0x09,0x8b,0x1a,0x87,0xf4,0x66,0xf6,0xfb,0x62,0x92,0x13,0xcf,0xb2,0x96,0xf0,0xc9,0x8b,0x12,0x99,0xf1,0x16,0xae,0x5c,0x27,0x24,0xa8,0xfd,0xb3,0x4c,0xc2,0xe6,0x3f,0xd2,0xc6,0x0c,0xf2,0x65,0x4e,0xdf,0xf1,0x06,0xb8,0x99,0xc4 +.byte 0x3a,0x35,0xba,0xed,0x18,0x3e,0xfa,0x03,0x51,0x8d,0x45,0x68,0x12,0x7b,0xb6,0xac,0x63,0x99,0x47,0xee,0x6f,0x8b,0xcb,0xc1,0x0a,0xf9,0x23,0xf0,0x05,0xe1,0x03,0x4a,0xb5,0xe0,0x65,0x71,0xc8,0x64,0x7e,0x0d,0x39,0xe7,0x96,0xdb,0x34,0x63,0x2e,0x1a,0x27,0x85,0x52,0x63,0x8e,0x44,0xfb,0x61,0xca,0x79,0xe5,0x91,0x99,0x83,0x2d,0xe0 +.byte 0x26,0x04,0xad,0x43,0x26,0xf2,0x7e,0x56,0xae,0x35,0x6a,0xfb,0xec,0xc6,0x27,0xe4,0x3a,0xa3,0x6b,0x63,0x72,0xba,0x98,0x03,0x9f,0x2a,0x4c,0xb1,0x33,0x22,0x9d,0x53,0xf6,0x00,0xa3,0x1e,0x32,0xcb,0xbe,0xe0,0xc2,0xf8,0x71,0xcd,0x3f,0xe3,0x4d,0x83,0xf2,0x9f,0x1c,0x91,0x35,0x97,0x52,0x95,0xba,0x24,0x04,0x04,0xca,0x32,0x6d,0xd7 +.byte 0x4b,0xd4,0x9e,0x8b,0x73,0x42,0xfb,0x9f,0xfc,0x93,0xea,0xc2,0x41,0x56,0xa9,0xe5,0xdd,0xd0,0x37,0x8a,0xe2,0x92,0x9f,0x45,0x4f,0xd8,0xef,0xe6,0x6f,0x58,0x41,0x5f,0x7b,0xe7,0x0f,0x32,0xce,0x06,0x02,0x7f,0xe2,0x37,0x87,0xb7,0x35,0x72,0x68,0x87,0xc9,0x35,0xa8,0x51,0xce,0xd8,0xde,0xc3,0x8c,0xb4,0xab,0xf4,0xa7,0x3b,0xcd,0xc8 +.byte 0x0a,0x56,0x5b,0x48,0xb1,0xa4,0x27,0xa8,0x9e,0x3e,0x04,0xbc,0xb3,0x63,0x3e,0xd5,0xf7,0xae,0xec,0x0c,0x6e,0x4a,0x73,0xb6,0xed,0x66,0xea,0xc1,0x7a,0xc4,0xaa,0x21,0x27,0x62,0xef,0x3d,0x1d,0x51,0x8b,0x63,0xe6,0xe2,0x8a,0xed,0x7a,0x4b,0x90,0xc3,0x9f,0x91,0xb4,0x8f,0x78,0x65,0x9c,0xdd,0x0a,0x7a,0x50,0x36,0x33,0x30,0x3b,0xb4 +.byte 0xdf,0x67,0xbd,0xfd,0x71,0xfc,0x40,0x49,0xaa,0x01,0xdf,0x68,0x67,0x73,0x31,0x2c,0x98,0x2f,0x8c,0x9e,0x2d,0xce,0x4a,0x71,0xbc,0x6f,0x90,0x1d,0xc0,0x37,0x07,0x30,0x0c,0xa3,0x04,0xfb,0xd1,0xd0,0x0e,0xcb,0xdc,0x94,0x06,0x7f,0x83,0xe5,0x45,0x47,0xd0,0x71,0x06,0x94,0x23,0x7c,0x03,0x80,0x46,0xa5,0x10,0x08,0xd1,0xdb,0xfb,0x9d +.byte 0xd4,0x05,0x01,0x5e,0x66,0x4d,0xf9,0x32,0x9b,0x5b,0xfe,0x7a,0x60,0x63,0x77,0x9a,0x31,0x34,0xe5,0x9a,0x82,0x2d,0x2b,0xb7,0xe0,0x04,0x8f,0x86,0xf3,0xb2,0x16,0x86,0x50,0x37,0x9d,0x80,0xe7,0x62,0xdf,0x77,0xda,0xf4,0xfc,0xb7,0x42,0x9d,0xac,0xcb,0x11,0xff,0x0c,0x6f,0x4e,0x16,0x0c,0x59,0x04,0x05,0x8f,0x88,0x64,0x37,0xe6,0x6c +.byte 0xee,0x64,0x58,0x79,0x60,0xd4,0x2f,0xb7,0x90,0x59,0xfb,0x82,0x3b,0x20,0x2e,0x2b,0xba,0x15,0xfb,0xf7,0x5b,0x1d,0x81,0x8a,0x8a,0x8f,0xe3,0x39,0x92,0x34,0xfc,0x3a,0x67,0xce,0xb6,0xa0,0x9b,0x56,0x78,0x96,0x4d,0x32,0xbf,0x9c,0x83,0x9e,0x19,0x66,0x20,0x42,0xb2,0x78,0x62,0x42,0xdd,0xdf,0x98,0xab,0x0c,0x3d,0x41,0xb5,0x74,0xc1 +.byte 0x2d,0xf0,0x02,0x58,0x6e,0xb3,0x4d,0x7b,0x41,0x1c,0xf1,0x09,0xc1,0xbb,0x84,0x67,0xf8,0x24,0x77,0x32,0xcd,0x7a,0x63,0x87,0x0d,0xf2,0xc5,0xaf,0xe4,0xb5,0xc6,0x3b,0xad,0x66,0x5e,0xae,0x90,0xc2,0x24,0x27,0x7a,0x0b,0xed,0x1b,0x86,0x5d,0x02,0x19,0x85,0x78,0xc8,0xb1,0xce,0xe7,0xc9,0x5c,0xce,0x43,0x58,0xac,0x1c,0x4e,0xcd,0xb8 +.byte 0x3a,0xb8,0x7a,0xf3,0x79,0x4b,0x97,0xcf,0xbe,0x88,0x24,0xd0,0x9a,0x5a,0x55,0x43,0x0c,0x48,0xa2,0x7f,0xaf,0x4b,0xd8,0x16,0x02,0xfb,0xe6,0x0c,0x6b,0x85,0xb4,0xb8,0x5e,0x40,0x60,0x5d,0x93,0x51,0xc6,0x32,0xb9,0x4a,0x23,0x96,0x71,0xeb,0xe8,0xe8,0x01,0x1e,0x85,0xb0,0x47,0xde,0x86,0x15,0x52,0x3a,0xb2,0xd3,0x86,0x4b,0x78,0x09 +.byte 0x9c,0x6e,0x9d,0xd9,0xef,0xe8,0x64,0x2d,0x2a,0xec,0x21,0x5a,0x60,0xa5,0xe4,0x26,0xbb,0x79,0x0c,0xdb,0x48,0xd6,0x4b,0x5c,0x5b,0xe3,0x34,0xc9,0x96,0xf0,0xcb,0x68,0x8a,0x2d,0xee,0xa3,0x37,0x34,0x5f,0x3e,0x65,0x40,0xce,0xe1,0xc8,0x2e,0x11,0xca,0x42,0x51,0x53,0x72,0x3d,0xa9,0x68,0x54,0xb4,0xd8,0xd7,0x72,0x84,0x8d,0xcd,0x6d +.byte 0x1f,0x0e,0x0c,0x0f,0x32,0x3a,0x7d,0xdd,0xc1,0xd3,0xe7,0x2d,0x1f,0x52,0x8b,0x73,0x86,0x70,0x2a,0xcb,0x71,0x37,0xa1,0xab,0xe3,0x94,0x5a,0xd7,0x9d,0x68,0xc1,0x6e,0x5d,0x72,0x25,0x81,0xe8,0x45,0xad,0x6c,0xf8,0xdb,0x9b,0x70,0x31,0xb9,0xf0,0x4f,0x23,0xd7,0x03,0xc8,0x87,0x43,0x51,0x7a,0x55,0xfe,0x6f,0x2d,0x40,0xbc,0xfe,0xdf +.byte 0xe6,0x21,0x4b,0x4d,0xc6,0x02,0x48,0xe7,0x7a,0x2a,0xef,0x91,0xdf,0xbc,0x98,0x91,0x6f,0x59,0xc4,0x47,0x77,0x2e,0x45,0x45,0x23,0x47,0x5d,0xf8,0x50,0x41,0x84,0x75,0x8a,0xe7,0x4d,0xfb,0xeb,0x58,0x00,0xcf,0x42,0xca,0x02,0x05,0xc7,0xfa,0x11,0xfb,0x6e,0x90,0x7d,0x53,0xa0,0x19,0x23,0x24,0x8f,0x89,0x17,0x40,0xbe,0x11,0xfb,0xd9 +.byte 0x04,0xf8,0x84,0xeb,0x90,0x7c,0x84,0x45,0x9c,0x53,0x45,0x5e,0x45,0x51,0x55,0xfc,0xf1,0x6b,0x02,0x24,0xfd,0x95,0x4a,0x40,0x80,0xdc,0xa6,0x94,0x15,0x2c,0x1d,0x85,0xa0,0x07,0x8d,0xf8,0xf2,0x95,0x0c,0xa0,0x4e,0x5a,0x5b,0x29,0x09,0xcc,0xf3,0x4e,0x8e,0xea,0xe8,0x26,0xb8,0xbe,0xb2,0x6f,0x76,0x6f,0xa4,0xe5,0x6a,0x50,0xcf,0xc8 +.byte 0x7d,0xb6,0x1e,0x9d,0x90,0x6b,0xde,0xe2,0x55,0x49,0x97,0x00,0xa5,0xc5,0x1f,0x1c,0x41,0x66,0xe7,0x6b,0x20,0xb2,0x1e,0xc7,0xb3,0xd4,0xa9,0x75,0xbb,0x83,0x24,0xd0,0xdf,0xbd,0xba,0x2c,0x2f,0xa4,0x03,0x1d,0x17,0xc5,0x74,0xc2,0x6a,0x20,0x71,0x18,0xd1,0xc5,0xb0,0x78,0xfe,0xda,0x55,0xd2,0x43,0x2a,0xd8,0x88,0x74,0x75,0x86,0x07 +.byte 0xe9,0x8b,0x0d,0x0f,0xe5,0x8d,0xe8,0x3d,0xf4,0x93,0xde,0x4c,0x97,0x98,0xe2,0x9b,0x22,0xde,0x13,0x18,0x8b,0xc5,0xe1,0x6f,0x6d,0xb4,0x19,0x46,0xff,0xbd,0xa6,0x2e,0xe6,0x48,0xcd,0x66,0x22,0x7d,0xf4,0x0e,0xeb,0x74,0x25,0x5c,0x90,0x0e,0x26,0xce,0x17,0xe9,0xdb,0x30,0xb9,0x25,0x99,0x96,0x46,0x3a,0x78,0xa3,0x76,0x2d,0x9e,0x42 +.byte 0x06,0x8a,0x1e,0x62,0x46,0xa4,0xd0,0x1d,0xe2,0x4c,0x3c,0xb4,0x4c,0xc0,0xd1,0xf7,0x05,0x5b,0xe4,0xd4,0x71,0x73,0x31,0xfc,0x98,0x2a,0x55,0xb0,0x78,0x92,0x59,0x8b,0x25,0x97,0x15,0xf2,0xf9,0x57,0x8b,0x7c,0xd4,0xc4,0x47,0x2f,0x10,0x3b,0x76,0xde,0x5f,0xb1,0xdf,0xdc,0xb0,0x15,0xd5,0x4a,0xd2,0x54,0xad,0x5e,0x32,0xf4,0x5a,0x1a +.byte 0x8d,0xe8,0xa0,0x4a,0x4e,0x04,0xdc,0xdd,0xd2,0x57,0xe5,0x24,0x4b,0x93,0x51,0xef,0xd4,0xba,0x3f,0x77,0xfc,0x0a,0x5c,0x7d,0x6e,0xa7,0x86,0xe5,0x88,0xd1,0xac,0x74,0x46,0x9a,0x39,0xb6,0x98,0x3d,0xae,0x89,0x4e,0xea,0x8d,0xdc,0xc7,0xb9,0x0c,0xd7,0xa6,0x06,0x4d,0x28,0x2b,0x51,0x2b,0xdb,0x30,0x4a,0x91,0x1c,0x40,0x89,0xe4,0xba +.byte 0x72,0xd5,0xed,0x16,0x66,0xb8,0xef,0x81,0xd9,0x51,0xf8,0x1b,0xff,0xab,0x8b,0x52,0xb8,0xf3,0x11,0xb3,0xe5,0x04,0x5a,0xb0,0x60,0xa3,0x35,0x12,0x6a,0xa0,0x75,0x5c,0x21,0xa9,0x5a,0xe8,0xd3,0xd7,0x8a,0x1f,0xe0,0x9b,0xb7,0x1e,0x7d,0xbe,0x81,0xaa,0x56,0x5a,0xd8,0x2d,0x7e,0x0c,0x60,0xb2,0x68,0x26,0x6d,0xaa,0x8b,0xcc,0x11,0x40 +.byte 0x25,0xea,0xc9,0x94,0xfb,0x3b,0x9b,0xa7,0x3a,0xde,0xd9,0xfe,0x6b,0x4b,0xfc,0x3f,0xbf,0xdd,0x51,0x9b,0xa1,0xca,0x2f,0xed,0x33,0xd8,0x3d,0x92,0xa4,0x1d,0xee,0xb2,0x47,0xd0,0x72,0x6a,0x96,0x33,0x0f,0xdd,0x0a,0xd9,0xbd,0x86,0xdb,0x25,0x53,0x0e,0x3c,0x31,0xad,0x05,0xb9,0x24,0x13,0x00,0xdf,0xc2,0x7c,0x3d,0x03,0x9b,0xf6,0x6d +.byte 0x93,0xd9,0xdf,0x73,0xf8,0x1c,0x98,0xe2,0x77,0x46,0x46,0xdc,0x07,0xe6,0xbb,0xc1,0xa7,0xb6,0xbe,0x21,0x07,0xae,0xdb,0xca,0x69,0x2d,0x8a,0x2b,0x59,0x27,0xe0,0x7c,0xf0,0xf1,0x34,0x69,0x97,0x44,0xba,0xbb,0x48,0x9f,0xd9,0xd8,0x16,0x1a,0xef,0x11,0x68,0xb6,0xaf,0x3a,0x10,0xc6,0x7c,0xd1,0x12,0xc7,0x89,0x47,0xe3,0xd1,0x24,0xc6 +.byte 0x44,0x9f,0x7e,0x6a,0x66,0x43,0x48,0xd6,0x9f,0x7b,0xf0,0x1f,0xd2,0x5f,0x2b,0xa7,0x13,0x6a,0x7c,0x70,0x08,0x38,0xb0,0x00,0xbc,0x7c,0xd3,0x01,0x9b,0xf6,0x29,0xd3,0x9c,0xa4,0x11,0x90,0xe4,0x9f,0x04,0xd6,0x21,0xec,0xfd,0xcb,0xb8,0xe6,0xb6,0x49,0x2b,0xfa,0x4b,0x90,0x9e,0xc6,0x0c,0x87,0xff,0x5e,0x2e,0xcc,0xf8,0x09,0x70,0x52 +.byte 0x42,0xec,0x88,0xac,0x1e,0x76,0x2b,0xeb,0xfc,0xb3,0x65,0x81,0x34,0xb1,0x06,0x90,0xde,0xb2,0xc4,0xd3,0xfd,0xd4,0x9c,0x78,0x1a,0x5c,0x8f,0x65,0x0a,0xbd,0x88,0xe5,0x95,0x06,0xb5,0x94,0xe5,0xbf,0x90,0x31,0xbb,0xcb,0xce,0x19,0x51,0x25,0x4a,0x47,0x35,0x26,0x93,0xdb,0xe2,0x93,0x36,0x47,0x7d,0xdd,0x4e,0xd5,0xeb,0xdd,0x63,0x1c +.byte 0xbc,0x2d,0x75,0xdb,0xd4,0xfa,0x60,0x4b,0x51,0x45,0x32,0x0f,0x01,0xf9,0x73,0x9b,0xd8,0xbc,0xee,0xaa,0x7d,0x2e,0xfe,0xbf,0x9d,0x45,0xae,0xe2,0x01,0xe3,0xbf,0x58,0xdc,0xc0,0xb8,0xe8,0x44,0x16,0x3b,0xd8,0xaa,0x3b,0x13,0xca,0xfb,0x5f,0x8d,0xb3,0x2a,0x83,0x66,0x49,0xae,0x54,0x02,0x4e,0xd8,0x68,0xee,0x21,0x1a,0xbb,0xf4,0xf7 +.byte 0xdf,0xf1,0x51,0x7b,0x62,0xa8,0xb2,0xdc,0x4b,0xd4,0x04,0xd2,0x05,0x49,0xdd,0xa4,0x75,0xe6,0x64,0x82,0xe7,0x25,0x55,0x60,0x2c,0x9f,0x8a,0x7a,0x11,0xe9,0xf2,0x72,0xfe,0x89,0xe1,0xaf,0xca,0x0c,0xb9,0xf5,0xcc,0xcf,0x07,0xef,0x8f,0xbb,0xef,0x53,0x1e,0xe2,0xfb,0x98,0xe8,0x05,0xab,0x4e,0x7e,0x38,0x56,0x24,0xd5,0x74,0x1c,0x95 +.byte 0x1a,0x0e,0x62,0x92,0x80,0x16,0x45,0x78,0x2f,0xb1,0xe1,0x83,0x24,0x2b,0x16,0x5c,0x05,0x52,0x17,0xe9,0xe8,0x9e,0x5d,0x63,0x8f,0x77,0xc4,0x89,0x22,0x76,0x43,0x31,0xfd,0x09,0xc0,0x51,0x70,0x57,0x2d,0x51,0x91,0xe5,0x61,0x3f,0x77,0xff,0x17,0xfc,0xa6,0x19,0x9d,0x82,0x46,0x11,0x0c,0x77,0x19,0x2a,0xf5,0x19,0xb4,0x3d,0xa6,0xd4 +.byte 0x8b,0x07,0x4b,0xc6,0xa3,0x1e,0x8c,0xf5,0xe8,0x2d,0xe7,0xcc,0xa1,0x38,0x57,0x66,0x76,0x1d,0xdd,0xe3,0xb9,0x0a,0x1e,0x2c,0xad,0x09,0x07,0x26,0xff,0x7a,0xc0,0xb0,0x51,0x71,0x44,0x6d,0x2c,0x39,0x3d,0xa6,0x14,0x4e,0x74,0x2c,0x54,0x3d,0xfa,0xdc,0x2e,0x0c,0xc4,0x88,0x32,0xda,0xb0,0x9d,0xf4,0x2c,0x0a,0x1b,0xb7,0xb4,0x78,0x6f +.byte 0x1b,0x6a,0x21,0x03,0x4e,0xe0,0x87,0xa0,0x1c,0xd8,0xe6,0x0c,0x97,0x47,0xde,0x98,0x81,0x3d,0x39,0x93,0x3d,0xcb,0x29,0xa3,0x93,0x8d,0x27,0x5d,0x29,0xb5,0x85,0xc4,0x32,0xd8,0xdc,0x19,0xb1,0x63,0xdc,0x76,0x32,0xc3,0x52,0x9a,0xfd,0x3d,0xff,0xf9,0x94,0x55,0x72,0xbb,0x4d,0xe2,0x42,0xd2,0xf7,0xb2,0xac,0xac,0x5d,0x50,0x95,0xda +.byte 0x3a,0x87,0xb6,0x0f,0x27,0x72,0x34,0xe7,0xe8,0x9f,0xc7,0xba,0xca,0x8d,0xf3,0xb9,0xa1,0xdd,0xd7,0xa5,0x70,0x3b,0xcc,0x72,0x0e,0x9d,0x85,0x75,0x01,0x11,0xe1,0xc2,0xca,0xcb,0x40,0x3a,0x31,0xf2,0x5d,0x0c,0x63,0xc8,0xbf,0x38,0xde,0x09,0x3b,0x32,0xaa,0x6c,0x07,0xd2,0x2b,0x3b,0x94,0x37,0xd0,0xd9,0xe0,0x4c,0x25,0xa3,0x22,0x64 +.byte 0x05,0xcc,0x69,0x9e,0x73,0xd4,0x46,0x2c,0x73,0x23,0xd0,0x6f,0x09,0xff,0x8b,0xef,0x7a,0x08,0x3e,0xa2,0xa7,0x9d,0xf5,0xc9,0x40,0xd1,0x06,0xd6,0xe3,0x89,0xa5,0xcc,0x9f,0x40,0x67,0x80,0x11,0xec,0x5d,0x23,0x19,0xf3,0x66,0xaf,0x06,0xcc,0xe4,0xb6,0x5e,0x20,0xf7,0x19,0xce,0x1a,0xb6,0x86,0x0d,0x39,0x1d,0xc8,0x0a,0xdb,0x50,0x52 +.byte 0x7e,0x3b,0x96,0x9f,0x05,0xdd,0xd8,0xdf,0x40,0xdf,0xe4,0x66,0x14,0x4d,0x4e,0xb3,0x9f,0x86,0x7b,0xc2,0x99,0xc3,0x8f,0xb9,0xe7,0xc3,0x50,0xa4,0xab,0xb8,0x8e,0xc5,0x28,0xce,0x8b,0x51,0xcb,0xad,0xd8,0x1a,0x23,0x7d,0x12,0xc2,0xaf,0x1a,0x93,0x4c,0x57,0xe9,0x59,0x6a,0x03,0x65,0x81,0x07,0x40,0x84,0x92,0x9d,0x22,0x8a,0x3d,0x27 +.byte 0x39,0x05,0xdd,0xf7,0x20,0xad,0xc2,0x03,0x27,0x87,0x8e,0xc1,0x23,0xad,0xe5,0x59,0x16,0xe7,0xde,0xe4,0x44,0x6b,0x06,0xb5,0x1d,0xaf,0xda,0x08,0x4a,0xfa,0x75,0x1a,0x0b,0x35,0xe8,0x6e,0x29,0xd3,0x79,0x19,0x80,0xb9,0x5f,0x36,0xec,0x43,0x25,0x3c,0xbc,0xcf,0x70,0x0c,0xc7,0x2c,0xbc,0x2e,0x72,0x40,0x73,0x98,0x11,0xc9,0x72,0x9f +.byte 0xd9,0x95,0x9f,0x8d,0x4a,0x52,0xbb,0x89,0x30,0x5b,0xa2,0x7e,0x0c,0x21,0x11,0xda,0x4e,0xa1,0x7c,0xc1,0x0f,0x95,0x1b,0x5b,0x2e,0xbd,0xae,0x8a,0x56,0x82,0x8f,0x84,0x43,0xdf,0x24,0xac,0x99,0xaa,0x8a,0xaf,0x82,0x33,0xf7,0x0a,0xbf,0x5e,0xfd,0xf2,0x91,0xf0,0xe1,0x5d,0x4e,0xa5,0x16,0x6e,0xb4,0x39,0x8b,0x99,0x32,0x6b,0xc8,0x16 +.byte 0xc1,0x84,0x10,0xc2,0x74,0x54,0xfc,0x02,0x71,0x44,0xfc,0x52,0xfa,0xc2,0x3c,0x8d,0xf7,0x8b,0x1e,0xcc,0x5e,0x43,0x66,0x29,0x29,0x93,0xe7,0xf6,0x9f,0xa8,0xa3,0x35,0xc9,0xde,0xb0,0xbe,0x4d,0xdf,0x8c,0x61,0x5a,0x6b,0x16,0x88,0x33,0x65,0x47,0x98,0xd2,0xf8,0x71,0x09,0x9f,0x00,0xb6,0x9e,0x21,0x37,0x2a,0x0b,0xb4,0x74,0x6b,0x0e +.byte 0x6e,0x4d,0x14,0x45,0x6c,0x1b,0xa8,0x4c,0xa7,0xc6,0xc3,0x36,0x6e,0x9e,0x63,0x5a,0x36,0x76,0x04,0x06,0x7f,0xdd,0x74,0x24,0x19,0xd8,0xb7,0xbc,0x6c,0x52,0x82,0x67,0x6b,0xd5,0xcb,0x81,0xdf,0xd7,0xe4,0xdd,0x14,0x33,0x71,0xcf,0x6b,0x7f,0xaf,0x66,0x27,0x8a,0x70,0xb8,0x45,0xae,0x8c,0x1a,0x65,0xd3,0x16,0x5c,0x05,0x65,0xd0,0xfb +.byte 0x07,0xe3,0x98,0xa9,0x94,0x27,0x6c,0xac,0xfc,0xee,0x1b,0x35,0x43,0xd6,0x3b,0x41,0x1c,0x86,0xc0,0x4f,0xf3,0x63,0xf4,0xba,0x4d,0xdf,0x6a,0xda,0xcf,0xb5,0x9f,0x69,0x3f,0x3d,0x0c,0x80,0x79,0x02,0x34,0x4a,0x9a,0xfd,0xb6,0xea,0x0b,0x61,0x32,0x67,0x2d,0x6a,0x6b,0xcb,0xcf,0xa6,0xee,0x6a,0x93,0x11,0x00,0xb8,0x6e,0x27,0x88,0x62 +.byte 0xf7,0x4c,0x7b,0xe1,0x13,0xe1,0x47,0xaf,0x96,0x24,0x3b,0x46,0x8c,0xf4,0xbe,0x13,0xed,0x65,0xe1,0xf2,0x36,0x2d,0xa4,0x6d,0x5e,0xa6,0x93,0xfb,0x64,0x0e,0xbd,0x50,0xdc,0x29,0x4f,0x90,0x8e,0xe1,0x7f,0x5e,0x47,0x08,0x9b,0x1c,0xb7,0xce,0x06,0x80,0x52,0xc0,0xb5,0x82,0x77,0x49,0x3c,0xe0,0x70,0x1f,0x84,0x75,0x9e,0x19,0xb2,0x83 +.byte 0xda,0x40,0xf8,0xd7,0x27,0x1e,0xbc,0x39,0xb5,0x1d,0x25,0x75,0x63,0x7d,0x85,0x2f,0x09,0x07,0xe9,0x73,0x8e,0x2b,0xb8,0x9a,0xbe,0xd6,0x90,0x91,0x6e,0xdb,0x7c,0x9d,0x9b,0x43,0x1d,0x21,0x88,0x76,0xb0,0xaa,0x7b,0x68,0xe4,0xa7,0x92,0x64,0xe4,0x1f,0xff,0x53,0x1d,0xf7,0xc0,0x44,0x5c,0x0a,0x1e,0xcd,0xa7,0x6e,0x41,0x1c,0x8c,0x7d +.byte 0x66,0xa7,0xf6,0xfc,0xa9,0x0d,0x3f,0x9c,0xfb,0x15,0x87,0x14,0x20,0x43,0x1b,0x05,0xf5,0xea,0x5c,0x07,0x61,0xb3,0x0e,0x7c,0x52,0x57,0x1c,0x09,0x33,0xb4,0xd8,0x3d,0x9d,0x17,0xee,0x86,0x25,0xdc,0x6b,0xcd,0x58,0xb7,0x18,0xbd,0x85,0x39,0x0b,0xb9,0xb8,0x35,0x3a,0x86,0xbb,0x88,0xb5,0x5e,0x4b,0x0a,0x7e,0x9c,0x02,0xb5,0x45,0xe5 +.byte 0xc7,0x38,0x56,0x1e,0xe4,0xe7,0xf7,0x88,0xac,0x75,0x9a,0x97,0xa8,0x15,0xb6,0x2d,0xcf,0x2a,0x59,0x65,0x0e,0x00,0x9f,0x8e,0xa9,0x94,0x23,0x1c,0x40,0xe4,0xb9,0x6b,0xcf,0xf0,0x53,0x7f,0x98,0xd1,0xa7,0x72,0xd7,0xe3,0x22,0xfd,0x5f,0x3d,0x3f,0xd6,0x21,0xb4,0x84,0x0c,0x1b,0x1d,0x00,0x2d,0x8f,0x72,0x22,0x2d,0x2c,0x8c,0x54,0x46 +.byte 0xe5,0x53,0xca,0x66,0x67,0x5e,0xb3,0x62,0x6f,0xaf,0x33,0x81,0xc1,0xf6,0x77,0x92,0x3e,0xdb,0x74,0x68,0x93,0xca,0x38,0xf8,0x18,0x50,0xef,0xe4,0xc9,0x45,0x40,0xc9,0xf0,0xc5,0x7a,0x4b,0xf2,0xd8,0xca,0x72,0x62,0x5f,0x67,0x10,0x10,0xcc,0xff,0x1a,0xc7,0x9c,0x3a,0x7f,0xca,0x11,0x67,0x3e,0xca,0xa6,0x9c,0x48,0x15,0xaf,0x68,0xb7 +.byte 0x2b,0xa7,0xa2,0x68,0x7b,0x40,0xb2,0xe3,0x27,0x18,0x7e,0x94,0x4c,0xca,0x0e,0x5b,0x3a,0x30,0xcb,0xc3,0x72,0x31,0x6b,0xe6,0x3e,0xa7,0x09,0x3e,0xf2,0x53,0xda,0x7d,0x6f,0x55,0x08,0xd2,0x26,0xc3,0x07,0x52,0x38,0x90,0x04,0xc6,0x3c,0xb6,0xb5,0x2a,0x7b,0x38,0x07,0x9e,0xb4,0xa5,0x48,0x36,0xf5,0x5e,0xac,0xa8,0x97,0x4e,0x37,0xc2 +.byte 0xee,0x12,0x88,0x28,0xd0,0x7d,0xd1,0xae,0xc0,0xc7,0x84,0x69,0x25,0x79,0x9a,0x8a,0x16,0x49,0x50,0x72,0x69,0x1a,0x02,0xc9,0xfe,0xd5,0x2c,0x40,0xc6,0xc8,0x8b,0x7d,0xe3,0xab,0x89,0xe3,0x78,0xf1,0xe9,0xbd,0x3c,0xbd,0x02,0x96,0xfe,0x0c,0x5c,0xc4,0x9e,0x89,0x3a,0x4b,0xe9,0xcd,0x41,0x1c,0x59,0x71,0x52,0xb0,0xc9,0x36,0xf1,0x80 +.byte 0xab,0x5e,0xbc,0xf1,0x20,0x99,0xc0,0xab,0x0c,0x59,0x43,0xc2,0xcd,0x09,0xa6,0x30,0x91,0xfa,0x12,0x23,0xbe,0x18,0x24,0xa6,0xbf,0x55,0x4c,0xe8,0x22,0xff,0x01,0xbd,0xde,0x2c,0x72,0x3c,0x0a,0x36,0xd5,0x7e,0xed,0x6a,0xe3,0x63,0x14,0x60,0xa3,0x0a,0x6f,0x04,0x90,0x64,0xc1,0xd1,0x78,0x54,0xae,0x19,0x74,0xe2,0xea,0xec,0x86,0x22 +.byte 0xc7,0xdb,0xf6,0x48,0x0e,0x75,0x43,0x04,0xf7,0x62,0xe6,0xa9,0x46,0x65,0xcc,0xa5,0xa4,0x1a,0xb2,0x94,0x7b,0x7a,0x8c,0x9a,0x80,0x62,0x32,0x17,0x80,0xc3,0xc6,0x54,0x0e,0x4e,0xe3,0x46,0x74,0xa8,0xae,0xcd,0xd0,0xc1,0x19,0x84,0x61,0xb4,0x1d,0x18,0x4d,0x80,0xf1,0x70,0x40,0xbe,0xa2,0xa3,0x38,0xcc,0x21,0x1c,0x2f,0x72,0x85,0x72 +.byte 0x0a,0xa1,0x0d,0xa3,0xdc,0xa2,0xf4,0x64,0x84,0x3c,0x43,0x6d,0xfb,0x45,0x11,0xf9,0x40,0xdc,0x25,0x85,0x80,0x41,0x84,0xa7,0x06,0x2e,0x79,0xbf,0x0c,0xa7,0x8f,0x17,0xea,0xa2,0xc4,0x6f,0xd8,0xc6,0x9e,0xab,0xdc,0x45,0x6f,0xaa,0xda,0xe9,0xe6,0x84,0xf0,0x5f,0x8a,0x90,0x99,0x33,0x9b,0xcf,0x03,0xe6,0xce,0x19,0x0c,0xad,0x2f,0xad +.byte 0x81,0xb8,0x17,0xff,0x6b,0xff,0xc8,0x14,0xa6,0xf4,0x37,0x55,0xdc,0xbb,0x09,0x3c,0x3c,0xe7,0x29,0x95,0x23,0x5c,0x58,0x92,0x2e,0x95,0xe8,0x3b,0x8b,0x81,0x2d,0xfd,0x58,0x8a,0x1f,0xdf,0xf1,0x54,0xa3,0xd0,0x01,0xaa,0x3d,0x32,0x61,0xe5,0x8e,0x62,0xa7,0xf6,0x3b,0x2d,0x0e,0xff,0xf4,0xe9,0x08,0xe7,0xef,0x3a,0x63,0x10,0x34,0x49 +.byte 0x14,0xe1,0x88,0xd0,0xb2,0x1d,0xb7,0x31,0xc9,0xa4,0x48,0xa8,0xaf,0x64,0x29,0xab,0x1f,0x14,0x13,0xa7,0xb8,0xb8,0xa4,0x24,0x1d,0xf9,0xb6,0x3e,0x62,0xa6,0x5e,0x10,0xcb,0x44,0x5c,0x9d,0x2c,0x58,0x3a,0x36,0xa3,0x81,0x9f,0xa9,0xa4,0xa1,0x06,0x1d,0xbf,0x97,0x03,0x88,0xf2,0xf4,0x81,0x3e,0x1b,0x35,0xea,0xd0,0xb6,0x96,0xa1,0xf7 +.byte 0x1e,0x49,0xb7,0xe8,0x23,0x6f,0x05,0x7c,0x9f,0xc4,0x53,0xb1,0x63,0xdc,0x07,0xbb,0xd6,0x57,0x85,0x4d,0x77,0x33,0x21,0xbf,0x77,0xfe,0xfe,0x34,0x52,0x02,0xe7,0xe4,0x87,0x11,0xa0,0xfd,0x11,0x4a,0x34,0x36,0x88,0x69,0xdf,0x77,0xfd,0x83,0x71,0xa8,0x68,0xed,0x49,0x39,0xb4,0x06,0x32,0x48,0xf1,0xd2,0x4e,0x61,0x47,0x65,0x26,0x87 +.byte 0xba,0x2b,0x2e,0xf4,0x12,0xfc,0xd0,0x84,0x81,0xa1,0x59,0xdc,0xe3,0x13,0x51,0x9e,0xea,0x57,0x56,0x3b,0x7c,0x71,0x6b,0xff,0xe9,0xf8,0xec,0x3e,0xe7,0xbe,0x65,0x47,0xe1,0x6f,0x8f,0x7c,0x3a,0x77,0xdb,0x75,0x4a,0x43,0x43,0x39,0x37,0xb2,0x68,0x16,0x72,0xdb,0x49,0xf7,0x13,0x3c,0x09,0x93,0xef,0xc1,0x2a,0x99,0xff,0xc7,0xdb,0xd9 +.byte 0x80,0xd2,0xfe,0x7c,0x39,0x50,0x21,0xdc,0x1d,0xae,0x9b,0xfc,0xd4,0x5f,0x56,0xae,0x6a,0xd9,0x35,0xa1,0x2b,0xd6,0x53,0x90,0xe8,0x8c,0x31,0x73,0x0f,0xa3,0x9e,0xa1,0x2f,0x76,0xa8,0x72,0x4d,0x5e,0x58,0xca,0x9f,0x8f,0xdf,0xf0,0xf9,0x6a,0x54,0xb1,0x5f,0x39,0x03,0x7a,0x26,0x06,0x71,0x74,0x6f,0x42,0xee,0x63,0x76,0x13,0xb9,0xed +.byte 0x74,0xad,0xf9,0xe0,0xa7,0x35,0x9c,0x18,0xe0,0xf7,0xc5,0xb2,0x27,0x14,0x0f,0xd7,0xaa,0x17,0x1c,0x8f,0x50,0xc8,0xb0,0xc2,0x63,0xff,0x38,0x65,0x87,0x69,0xb3,0xd5,0x3f,0xb4,0xf2,0xe8,0x8b,0x7b,0x24,0xdc,0x1f,0x62,0x2f,0x0a,0xd7,0x2d,0x0f,0x6f,0x48,0x1d,0xf0,0x3c,0xb1,0xb4,0x10,0x8d,0xc6,0x5c,0x79,0x30,0xde,0x20,0x9e,0x7b +.byte 0xf1,0xa5,0x73,0x38,0x05,0x1b,0x13,0x78,0xb1,0x02,0x2f,0x32,0x2a,0x07,0x59,0xa4,0xfc,0x88,0x08,0x0c,0xff,0x42,0x72,0x6a,0xb0,0x8a,0xc9,0x3d,0xdb,0x04,0x90,0xdd,0x0b,0xbc,0x3a,0x4e,0xfa,0xd4,0x57,0xd8,0x2f,0x7b,0xcb,0xd9,0x6a,0xe7,0xfd,0x32,0x17,0x99,0x20,0x64,0x1e,0x76,0x07,0xb9,0xa3,0x58,0x7f,0x79,0xda,0x0c,0xe0,0xec +.byte 0x30,0xbf,0xa4,0x85,0x0a,0x39,0xc0,0xe9,0xf7,0xbe,0xd1,0xa7,0x94,0x1f,0xa6,0x6d,0xe8,0xc5,0x1b,0x04,0x27,0xf4,0xdc,0xc2,0x4d,0x9a,0x0e,0x9b,0xe8,0xec,0x56,0x99,0x90,0x5f,0x8b,0x28,0x0a,0x92,0xaf,0x0b,0xa1,0xd2,0x85,0x86,0x26,0xc7,0x8a,0x01,0xa4,0x08,0x29,0x32,0x7d,0x3d,0xa5,0x74,0x9c,0x90,0x63,0x83,0x1f,0xd4,0xee,0x98 +.byte 0xf5,0x14,0xff,0x39,0xeb,0xbf,0x40,0xa4,0xc9,0x70,0x4f,0x81,0x03,0x19,0xef,0xf5,0xdf,0xf7,0x00,0x75,0xcb,0x2e,0x81,0x41,0xc5,0xda,0xfb,0x67,0x6a,0xf0,0xa3,0xd3,0x5a,0x60,0xaf,0x72,0x27,0x3e,0xad,0x37,0x3e,0x3d,0xe6,0x85,0x4c,0xa1,0xb0,0xe9,0xab,0xc5,0xd3,0x8b,0x04,0x0d,0x64,0x7f,0xa2,0xb9,0x6d,0x6d,0x28,0xf8,0x4b,0x43 +.byte 0x78,0x51,0xf4,0x84,0xf1,0x3c,0x67,0xd8,0xdd,0xd7,0x0b,0x67,0xc3,0xd9,0x95,0x7b,0xfc,0x7d,0xc4,0x33,0x05,0x90,0xec,0x0a,0x98,0xfb,0x6b,0x0d,0xe9,0x8c,0x74,0x94,0x20,0xf8,0xcb,0xca,0xb6,0x72,0x07,0x7c,0xef,0xfa,0xd0,0x3f,0x51,0xc5,0x6e,0xf8,0x3f,0x37,0xe3,0xfe,0xb9,0x9a,0x9c,0xb3,0xf6,0x96,0x4e,0x65,0x77,0x21,0xcf,0xaf +.byte 0xe7,0x20,0x06,0xc2,0x93,0xc5,0x2e,0xc0,0x7f,0xe5,0x0a,0x42,0xad,0x89,0x64,0x6e,0x95,0xbf,0x95,0x1d,0x24,0x47,0xf8,0xd5,0xec,0x7c,0x1f,0x98,0x67,0x9c,0x5f,0x6e,0xaf,0x74,0x95,0x65,0x4c,0xb6,0xe0,0xd3,0xb7,0x5b,0xc7,0x76,0xe6,0x87,0x19,0xf5,0xc7,0xb0,0x2d,0xe0,0x8b,0xaf,0x6d,0x3c,0x31,0x6e,0x84,0xc8,0x86,0x51,0xff,0x29 +.byte 0x2a,0x1f,0xea,0xd4,0x2d,0x1a,0x8f,0x04,0xb4,0xc0,0x6a,0x93,0xc2,0xc5,0xe7,0x98,0x8c,0xc7,0xff,0xbf,0xb8,0x8e,0x5b,0x29,0x5b,0xa6,0x87,0xc7,0x02,0x88,0x51,0x29,0x66,0xd8,0xf3,0x68,0x38,0xd4,0xa6,0xbd,0xa2,0x5c,0x1b,0xb7,0x13,0xd7,0x64,0xed,0x68,0x21,0x88,0x2b,0x59,0xba,0x95,0x84,0xda,0xce,0x61,0x3b,0x51,0x04,0x3e,0xc2 +.byte 0xdd,0xec,0x0c,0x6b,0xbe,0x35,0x51,0x63,0x29,0x40,0xcb,0xa5,0x62,0xe4,0x27,0x35,0x15,0x1f,0x7c,0x8b,0xe5,0xd0,0x2e,0xde,0x8c,0x3d,0xa0,0xd2,0xbe,0x51,0x3d,0x65,0xed,0x94,0x8b,0x8c,0x00,0xda,0x0e,0x78,0x4d,0x25,0xef,0x8e,0x3c,0x55,0x77,0xeb,0x58,0x06,0x7d,0xd1,0xfc,0x73,0xad,0x76,0x0a,0x81,0xbe,0xda,0x50,0x30,0xf3,0xfd +.byte 0x58,0x25,0x0a,0x4b,0x1b,0x1e,0x0b,0xd0,0x9b,0xbc,0xb9,0x31,0x26,0xbc,0x4c,0x7b,0x05,0xd7,0x5c,0xe4,0x7a,0xdd,0xff,0x04,0xac,0x5d,0xcb,0xfd,0x91,0x34,0x68,0x26,0x1e,0xb4,0x86,0xcc,0xe3,0x90,0xaf,0x6a,0x65,0xda,0x6b,0x3e,0xec,0x44,0x90,0x72,0x7a,0x34,0xfc,0x7b,0x65,0x83,0x34,0x93,0xbc,0x85,0x50,0xdf,0x03,0x89,0x35,0xb8 +.byte 0x6a,0x39,0xd3,0xb6,0x38,0x66,0x5b,0xa7,0x9e,0x93,0xa2,0x3b,0xb6,0xe7,0xee,0x1e,0x5c,0xd6,0xa8,0xd9,0x1f,0xf7,0xd1,0x0a,0x2f,0x87,0x63,0xf4,0xf9,0x8c,0xd4,0x7c,0x02,0xaf,0x7e,0xb6,0xc7,0xfc,0xc9,0x4d,0x35,0x0c,0x8c,0x3c,0x13,0x9d,0xe6,0xd7,0x2e,0x4b,0x91,0xcc,0x88,0xdb,0xfc,0x68,0x3a,0xd1,0x15,0x07,0x16,0x66,0x11,0x9b +.byte 0x66,0x9f,0x3f,0x37,0xae,0x11,0xba,0x5f,0xc7,0x3a,0x1a,0x49,0xbc,0x14,0x21,0x75,0xdc,0xcc,0xbb,0x5c,0xed,0xdc,0x8b,0x21,0x9a,0x8f,0x5f,0x91,0x6a,0x9b,0x26,0x33,0x64,0x45,0xa0,0xdf,0xc4,0xa1,0x32,0xc4,0x4c,0xc2,0x42,0x1b,0x59,0x37,0x1f,0xdb,0x01,0x6d,0xed,0xd8,0x05,0x5b,0x90,0x59,0x32,0x45,0x50,0x5d,0xf1,0x34,0xc4,0xb7 +.byte 0x52,0x97,0xbb,0x42,0x12,0xf1,0xa5,0x76,0xe4,0x1a,0xbc,0x4a,0x64,0xd3,0x08,0xac,0xe1,0x49,0x70,0x61,0xc8,0xcf,0xb1,0xd3,0xc4,0x7f,0x38,0x31,0x6b,0xd3,0xe1,0xe1,0xe9,0x5b,0xaa,0x7a,0xec,0x26,0x81,0x44,0xd3,0xb9,0x63,0xea,0x37,0x98,0x15,0x41,0xf1,0xa1,0x72,0x87,0xcc,0x3b,0x6a,0x27,0x9b,0x85,0xa8,0x7b,0xb6,0x25,0xf9,0xd4 +.byte 0x84,0x3e,0x66,0x12,0xce,0x24,0xee,0x22,0x51,0x73,0x7e,0xba,0x1e,0x95,0x64,0xc5,0xbf,0x4e,0x4f,0x73,0xc1,0xc3,0x98,0xb9,0x6b,0x90,0x1f,0x39,0xfc,0x03,0x55,0x76,0x8c,0x57,0xea,0xe8,0xc1,0x25,0x09,0x69,0xc0,0xe8,0x54,0x91,0xc1,0x7c,0x52,0x8e,0x82,0x6d,0xf2,0x0e,0x3f,0xa9,0x98,0x04,0x40,0xda,0x1c,0xc0,0xbb,0x42,0xf0,0x7d +.byte 0xed,0x78,0xb0,0x4f,0x94,0xba,0x0d,0xbf,0x60,0xbe,0x09,0x67,0x42,0xc5,0x41,0x4c,0x80,0x8d,0x30,0x10,0xa9,0xd2,0x07,0x8c,0xa8,0x40,0xc6,0xe2,0x08,0x42,0x7f,0x99,0xad,0xc5,0x66,0x1f,0xfd,0xd2,0xc5,0x79,0x77,0x9b,0x60,0x7d,0x25,0x2d,0x69,0x14,0x94,0xa5,0xf0,0x0a,0x14,0xb6,0xf9,0xbe,0x3a,0x4a,0x3d,0xc6,0x45,0x2e,0x27,0x4a +.byte 0xd1,0x1d,0xcf,0x08,0xee,0x93,0x3c,0xb5,0x8a,0xee,0xdd,0xf3,0x33,0xa6,0x35,0x9d,0xd8,0xb4,0x68,0xc5,0x98,0x09,0x78,0xcc,0xb3,0xeb,0x0f,0xcd,0x25,0xf8,0x17,0x9c,0x45,0x77,0xc7,0x06,0x40,0x44,0x90,0xec,0x6a,0xd9,0xf5,0x05,0xd4,0x88,0x17,0x47,0xeb,0x29,0x85,0x32,0x76,0x7b,0xa4,0xe3,0x65,0x30,0x50,0x9a,0x99,0x26,0x91,0x60 +.byte 0xb0,0xb8,0xe5,0x8d,0x35,0x9e,0x9a,0x13,0x65,0x82,0xb2,0x4b,0xf1,0xed,0x1f,0xb7,0xb4,0xc0,0x03,0xe6,0x1d,0x2b,0xaa,0x1e,0x01,0x92,0x0b,0xcb,0x34,0x77,0x80,0x94,0xc2,0x4e,0x3b,0x73,0xd8,0x2e,0xd8,0x95,0x33,0x05,0x65,0xa2,0x99,0x29,0x7a,0xd1,0xb3,0xed,0x5a,0x8d,0x4d,0x6a,0x6d,0x69,0x2b,0x5a,0xa1,0x3a,0xc0,0x81,0x96,0xf1 +.byte 0xc2,0xa7,0x4e,0x07,0x90,0x04,0x99,0x70,0xea,0x1a,0x3a,0x26,0xb5,0xed,0x92,0xbd,0x57,0x80,0x11,0x06,0xf2,0xb4,0x05,0x69,0x7a,0xbf,0x27,0xa1,0xbd,0xdb,0x09,0xe5,0xb3,0x2d,0x86,0x41,0xcc,0x5d,0x68,0x37,0x9e,0x98,0xa5,0x4a,0x20,0x8a,0x5f,0x54,0xae,0x4f,0x73,0xd0,0x22,0x18,0x8d,0x2b,0x91,0xcb,0xbb,0x83,0x1e,0x04,0x93,0xc8 +.byte 0xc3,0x89,0x35,0xfd,0xda,0xeb,0x52,0x53,0x9f,0xdc,0x33,0xf0,0xe0,0x99,0x19,0x11,0xeb,0x55,0xd3,0x3c,0x5f,0xca,0x29,0x52,0xe7,0x6b,0xd1,0xad,0xeb,0xed,0x8e,0x68,0x82,0x91,0x85,0x81,0x68,0x70,0x78,0x61,0x1e,0x0c,0x09,0x3a,0x82,0xdc,0xdb,0x26,0x66,0x1c,0xa3,0x80,0x99,0x23,0x8a,0x45,0xd7,0xb8,0x10,0x97,0x80,0x70,0x49,0x78 +.byte 0xa9,0x4c,0xf0,0xec,0xcc,0x05,0xd0,0x6a,0x6a,0x1a,0xa0,0xf7,0xde,0x78,0xc6,0x42,0xbe,0xbd,0xa0,0x24,0x1d,0x3f,0xdd,0xfb,0x92,0xc2,0xbd,0xd6,0x5c,0x25,0x74,0x3d,0x2b,0xb8,0x60,0x67,0xdb,0x70,0x1e,0xe8,0x9f,0xcd,0xb4,0x82,0x90,0x9e,0x2a,0x94,0xa5,0xa2,0xd4,0xd2,0x24,0xa7,0xca,0xbf,0xe1,0x8b,0xab,0xf3,0xd2,0x7c,0xa6,0xc8 +.byte 0xe6,0xaf,0xef,0xe3,0x86,0xb1,0x42,0x1d,0xc6,0xa2,0x37,0x9b,0x26,0x46,0x0b,0xfd,0xee,0x88,0xa4,0xf1,0xa8,0x72,0xaf,0xda,0x30,0x56,0x22,0xd3,0x1b,0x31,0x76,0xd7,0x03,0xef,0xf3,0x98,0x16,0x4d,0x36,0x57,0x1b,0xd5,0x90,0xb8,0x67,0x50,0x7f,0x22,0xa8,0xdc,0x9c,0xf1,0x6e,0xa4,0x65,0x45,0xf0,0x73,0xd8,0x7e,0x41,0xb0,0x68,0x52 +.byte 0x00,0x0a,0xda,0x99,0x6c,0x84,0xce,0xf0,0x73,0x65,0x93,0x52,0xc8,0x4b,0xb4,0x72,0xda,0x2c,0xa1,0x47,0xb5,0xe3,0x00,0x63,0xc0,0x4e,0x84,0x16,0x00,0xe6,0x1f,0xbd,0xba,0x49,0xcb,0xd3,0x7d,0xd2,0xeb,0x4a,0xb2,0xd5,0xb2,0x53,0x96,0xfb,0x04,0x73,0xc0,0x09,0x31,0xf3,0xf2,0xc0,0xd3,0xa6,0xe1,0xea,0xe1,0x58,0xbe,0x90,0xc9,0xfb +.byte 0x6e,0x13,0x69,0xbe,0x17,0xd4,0x16,0x5b,0xcb,0xf4,0x93,0x0a,0x38,0x46,0xea,0x64,0xad,0xb0,0x0d,0xc0,0x3b,0xfc,0xe3,0xd4,0x20,0x75,0x0c,0x3e,0x71,0x1b,0x5f,0xde,0xff,0xd6,0xfa,0x6f,0xe4,0x10,0xb0,0x14,0x05,0xaa,0x05,0x70,0x5e,0xbd,0x58,0x9f,0x3c,0x9d,0x4f,0xa7,0x5a,0x65,0x57,0x02,0x05,0x44,0xe0,0x95,0x9d,0xa2,0x60,0x06 +.byte 0xcb,0xfd,0x91,0x8e,0x7f,0xce,0xa1,0x80,0x94,0xbb,0x88,0xf2,0xa6,0xe7,0x83,0xf9,0x38,0x8f,0x09,0x8e,0xe4,0xa9,0xc2,0xc7,0x84,0x9d,0x25,0x09,0x52,0x8b,0x32,0xaa,0x3b,0xde,0xb6,0x82,0x9f,0x6d,0xc4,0xdf,0x11,0xf7,0x72,0x1a,0xe4,0x00,0x51,0x41,0x01,0xba,0x21,0xea,0x0a,0xda,0xf2,0xbb,0x66,0xae,0x51,0x2b,0xb0,0x6d,0x1d,0xe8 +.byte 0x4b,0x1e,0x42,0x68,0x3a,0xed,0xe6,0x59,0x13,0x42,0x07,0x54,0xae,0x2e,0x15,0x93,0xd7,0xff,0xad,0x49,0x09,0x41,0x52,0x6b,0x3b,0x9c,0x41,0x43,0x0d,0xed,0xed,0x6f,0xb8,0xe9,0x0d,0xcc,0xde,0x0d,0xaa,0x91,0xef,0x89,0x2f,0x2d,0x94,0xd0,0x03,0x2b,0x51,0x7f,0x85,0x9b,0x7b,0x08,0xc8,0xb6,0xe2,0x82,0x22,0xa9,0x57,0x71,0xf2,0xae +.byte 0x08,0xfa,0x6c,0xd8,0xca,0x78,0x42,0x98,0x23,0xfd,0x38,0x4b,0x6c,0xd3,0x9f,0xc6,0xa3,0xb2,0xc1,0x8c,0x4a,0xa3,0xcd,0x9f,0x56,0xe7,0xc2,0x06,0xd7,0xc5,0xc2,0xd9,0x98,0x57,0xc8,0x5a,0xaa,0xf4,0xaa,0x44,0x02,0x83,0x11,0x1e,0xf6,0x64,0x8d,0xf7,0x3b,0x86,0x3c,0x04,0x53,0x5f,0x62,0xc8,0x7a,0x0e,0x1c,0x4f,0xa8,0xe3,0x5c,0xe8 +.byte 0x64,0xf7,0xe3,0x5d,0xea,0xb5,0x2d,0xdb,0x7b,0x0e,0xdb,0x91,0x34,0xd5,0x87,0x4f,0xe6,0x73,0xee,0x3d,0x79,0x7c,0x67,0x48,0xb5,0xbb,0x42,0x96,0x0d,0x9d,0xbd,0x68,0x98,0xe5,0x59,0x51,0x16,0x45,0x15,0xac,0x80,0x41,0xae,0x45,0xdb,0xe4,0x2a,0x44,0x0d,0xe4,0x25,0xc7,0xd3,0x06,0xf7,0x98,0x15,0xe1,0xc5,0x9b,0x34,0x0e,0x87,0xb8 +.byte 0x90,0x1b,0x24,0x84,0x06,0x24,0xb0,0x80,0xbe,0x03,0xa0,0x95,0x10,0x1e,0x72,0xde,0x0f,0xd4,0x15,0x7b,0xa0,0xf5,0x42,0xc3,0x6f,0x10,0xe9,0x76,0x44,0xe3,0xa9,0xb7,0xef,0xf6,0xc2,0x80,0xe2,0x0c,0x2d,0xad,0xe0,0xb9,0x45,0xca,0x67,0x6f,0xb6,0xc5,0xc0,0x8d,0x25,0xee,0x50,0xeb,0x51,0xc6,0x87,0x87,0x61,0x3a,0x75,0x95,0x41,0x47 +.byte 0x26,0xfd,0x35,0xf6,0x46,0xf4,0xe9,0x42,0xc6,0xef,0x37,0x97,0xb3,0x0a,0x1d,0xc8,0xdf,0x07,0x24,0xb1,0x0d,0x07,0x43,0x67,0x7d,0x81,0x09,0x58,0xdd,0xf6,0xcf,0xf1,0x47,0x42,0xbd,0x3c,0xa3,0xd7,0xe8,0x73,0xf9,0x5b,0xff,0x2c,0xcd,0xe6,0xd1,0xe9,0x47,0x6d,0x19,0x9b,0x6a,0x63,0x69,0xf4,0x4a,0xdf,0x69,0xab,0xa9,0xb7,0xe5,0x8d +.byte 0x1c,0x44,0x52,0x0c,0x7e,0xa1,0xfe,0x9d,0xd5,0xa4,0x71,0x62,0x0b,0x3c,0xf6,0xd2,0xd3,0xe9,0x70,0x09,0x68,0xf7,0xd6,0x0a,0x00,0x61,0xf1,0xf3,0xd0,0x41,0x4a,0x14,0xc6,0xf5,0x49,0xb1,0xde,0x10,0xd3,0x20,0x8b,0xfe,0x78,0x6a,0x87,0x79,0x15,0xd3,0x43,0x00,0xbe,0x71,0x40,0xaa,0xca,0x1a,0x64,0xe3,0x96,0x34,0x2f,0xea,0x0c,0x11 +.byte 0x41,0x21,0xf8,0xa7,0x65,0x9b,0x75,0xe2,0x1e,0x6f,0x5e,0xe0,0x68,0x42,0xca,0xd3,0x19,0x35,0xe8,0x88,0x0f,0x05,0xa3,0xb1,0x73,0xea,0x53,0x79,0x40,0x24,0x00,0x86,0x20,0xbb,0x25,0x58,0x89,0x6b,0xde,0xd6,0xd0,0x36,0xbb,0x33,0x30,0x59,0x4b,0x30,0x92,0xac,0xe5,0x95,0x94,0x22,0xab,0xc1,0x10,0x35,0x9c,0xa1,0x20,0x11,0x5d,0x4f +.byte 0x57,0x5c,0x9c,0xb8,0x3a,0xdc,0x97,0xa5,0xf3,0x0b,0xf5,0x96,0xe7,0xef,0x90,0x72,0x01,0x52,0x70,0x5a,0xf0,0xd9,0x7e,0x59,0x05,0x8c,0xd1,0x45,0x47,0xbf,0x16,0x15,0xa2,0xc9,0xdd,0xe7,0x5f,0x4b,0x94,0x5f,0xe6,0xf9,0x78,0xbb,0x8f,0xf9,0x79,0x9f,0x5e,0xd7,0x1f,0x0b,0xef,0x8d,0xfe,0x75,0xd4,0x8a,0x12,0x28,0xa5,0xf9,0x6e,0x14 +.byte 0x3c,0x52,0x80,0x57,0xc6,0x96,0xae,0x67,0x27,0xc1,0x1c,0xb6,0xd6,0x1c,0x74,0x8c,0x6f,0xc7,0x71,0x3e,0xd5,0x73,0xf2,0x3e,0x02,0x15,0x67,0x18,0xb8,0x5b,0x61,0x9e,0xfa,0x7e,0xba,0x00,0xe9,0xd9,0x51,0x91,0x63,0x7e,0xf7,0xab,0xc0,0xc6,0xee,0x66,0xdd,0x66,0x88,0x7a,0x8a,0xc5,0xc2,0x08,0x45,0x62,0xde,0xe1,0xfb,0x35,0x65,0x34 +.byte 0x00,0x9e,0x1d,0x25,0xdf,0x69,0xb6,0xe3,0xfe,0xbb,0x13,0xac,0xd3,0x13,0xb2,0x64,0x5a,0xf3,0x47,0xf1,0x36,0x55,0x5f,0x1b,0x87,0xea,0x5d,0x5c,0xfd,0x8a,0x68,0x69,0x8a,0x00,0x9f,0x83,0xbe,0x79,0x7d,0x01,0x9e,0xf2,0xb2,0x5d,0x56,0xe0,0xe6,0x49,0xe5,0xe1,0x76,0x57,0x7a,0x85,0xac,0x94,0x16,0xe3,0x68,0x05,0x14,0xb5,0x33,0x54 +.byte 0x64,0x5a,0xbe,0xa3,0x04,0x90,0x5c,0x1c,0xf8,0x97,0x16,0x36,0xce,0x76,0xe7,0xf0,0xaf,0x8a,0xea,0x65,0xa8,0x15,0x5b,0x1e,0x0a,0x91,0xad,0x62,0x62,0x67,0xb4,0xf0,0x94,0x1f,0x64,0x50,0xa8,0xc0,0x6b,0x38,0x80,0xd7,0x53,0xbb,0x70,0xbd,0x54,0x01,0xb0,0xa5,0xbc,0x00,0xe0,0xd6,0x23,0x37,0xe6,0x9f,0x0f,0x2f,0x96,0x21,0xc2,0x90 +.byte 0x55,0x26,0x55,0xa4,0xcd,0x3e,0x54,0x6b,0xa6,0xb0,0x2c,0xf2,0xd4,0xcc,0x6a,0x44,0xea,0x18,0x61,0xc5,0x1a,0x8e,0x60,0x64,0xf4,0x5f,0x21,0x36,0x01,0x5d,0x9f,0xc4,0x2c,0x67,0x1c,0x48,0x94,0x16,0xae,0xa8,0x13,0x5c,0xee,0x18,0x88,0x61,0xe4,0x54,0x6b,0xa2,0xe8,0x7f,0xf0,0x15,0xc3,0xce,0xbc,0x5b,0x91,0x25,0x7b,0x1d,0xd3,0x9f +.byte 0x13,0x1b,0x01,0x5d,0x43,0xe8,0xa1,0x77,0x5a,0x87,0x79,0x8b,0xd5,0x69,0xf7,0xdf,0x66,0xa2,0x84,0x0c,0x66,0xac,0x15,0x65,0xbf,0x74,0xc0,0xd2,0x78,0x6a,0x3a,0x9c,0x98,0x62,0x04,0x41,0x95,0xb2,0x23,0x59,0xc6,0xb0,0xc5,0x22,0xc0,0xfa,0xaa,0xc8,0x94,0x73,0x91,0x5b,0x64,0x1b,0x74,0xbe,0xcb,0xa1,0x81,0xb1,0xc1,0x26,0xa1,0x94 +.byte 0x55,0x04,0xb3,0x9c,0x80,0xb7,0x00,0x6f,0x36,0xc7,0x7f,0x6d,0x97,0xea,0xf3,0xf5,0x55,0xc5,0xfe,0x61,0xd9,0xb1,0x6d,0x8c,0xa1,0x02,0x08,0xb3,0x41,0xe6,0xe6,0x57,0xc6,0xff,0x6e,0x47,0xa4,0x22,0x2e,0x2d,0x21,0x53,0xbe,0xe3,0xbe,0x15,0xec,0x23,0x9d,0x87,0xe0,0x2e,0xcc,0x6c,0xd0,0xc7,0xb7,0x3d,0xa4,0x07,0x5f,0x69,0x4e,0x2b +.byte 0x07,0x69,0x4f,0xc5,0xa3,0x66,0x52,0x91,0x8f,0xa4,0x48,0xb9,0x40,0x76,0xd9,0xcb,0x6e,0x1a,0x35,0x9e,0x50,0x9f,0xd1,0x78,0xb2,0xb8,0x0d,0xa8,0xf8,0x6e,0x07,0xa5,0x3a,0xdf,0x3c,0x32,0xa6,0x10,0xbd,0x73,0x2f,0x07,0x45,0x66,0x0f,0x61,0xce,0xc2,0x08,0x19,0x98,0x33,0x4b,0x59,0x81,0xb5,0x78,0x4f,0x46,0x88,0xae,0x29,0xf8,0xf5 +.byte 0xc2,0x29,0x6f,0x8f,0xe5,0x8f,0xb0,0x53,0xc8,0x7a,0x48,0xda,0x6f,0x7e,0x8a,0x69,0x68,0xab,0xba,0xd9,0x20,0x0f,0x96,0x69,0x41,0xa6,0x92,0x94,0x8e,0x0f,0x86,0xdf,0x8d,0x70,0xaf,0xfe,0xf1,0x20,0x50,0x01,0xff,0xca,0x30,0x24,0x67,0x4a,0x04,0xa2,0xde,0x06,0xdc,0x26,0x1e,0x17,0xbc,0x52,0x9a,0x62,0x72,0xc1,0xd8,0xd7,0xe0,0xed +.byte 0xcf,0x4b,0x13,0x80,0x9a,0xbf,0x72,0x4f,0xf4,0x24,0x26,0xcd,0xe0,0x21,0x99,0x7b,0x5c,0x4f,0xbf,0x5c,0x41,0x08,0x8b,0x17,0x69,0x62,0x60,0x2c,0x74,0xb0,0x2d,0x22,0x7e,0x25,0x95,0x6a,0x84,0x0f,0x45,0x8f,0x9a,0x92,0xa1,0xcd,0xa5,0x50,0xf0,0x52,0x7f,0x60,0xd8,0x91,0xe1,0x17,0xe1,0x66,0x8f,0xd3,0x1f,0x41,0x7f,0x6f,0xf1,0x72 +.byte 0xa3,0xb6,0x12,0x62,0x46,0x16,0xea,0x26,0x9e,0xda,0x61,0x13,0x0b,0x17,0xf7,0xe1,0xec,0xc0,0x38,0xfe,0x40,0x31,0x6b,0x38,0x2a,0x4b,0xa5,0x8e,0xfb,0x99,0x60,0xd6,0x4a,0xbd,0xfb,0x75,0x2b,0x41,0xd4,0x33,0x5d,0x35,0xfe,0x2d,0xfc,0x1a,0xac,0x02,0xb3,0xf0,0xa2,0x6d,0xfa,0x8b,0x12,0x99,0xdd,0x54,0xf2,0x1c,0x35,0xd3,0x60,0x5a +.byte 0xdb,0x65,0xa7,0x58,0x1b,0x82,0xb4,0xf6,0x49,0x77,0xf2,0xea,0xa3,0xa9,0x57,0x94,0xb7,0x6e,0x19,0xda,0x7e,0xa5,0x70,0xb8,0xff,0x39,0x81,0x7d,0xfa,0xea,0xd6,0xc6,0x12,0x84,0x0a,0x8a,0x16,0xde,0x99,0xa6,0xe7,0xe0,0x77,0x76,0xb8,0xa3,0x6f,0xfb,0xb4,0x8f,0xc3,0xbd,0x90,0xd8,0x2a,0x04,0xed,0x42,0x91,0x9b,0x84,0x40,0x2d,0x01 +.byte 0x94,0xdb,0xbb,0x58,0x25,0xed,0xa3,0xdd,0xaa,0x0c,0xce,0x25,0x12,0xcd,0x11,0xbf,0xd0,0x57,0xe9,0x51,0x74,0xa7,0x45,0x6c,0x58,0xe7,0x4d,0x43,0xc6,0xd0,0x09,0x93,0x2d,0xe0,0xe3,0xae,0x7b,0x8f,0x53,0xa0,0x80,0xa1,0xef,0xcb,0xf5,0xfe,0x38,0x4d,0x31,0xa2,0x5c,0xd3,0x4a,0x66,0x1a,0x5c,0x07,0xbe,0x25,0xba,0x30,0xb6,0x00,0x27 +.byte 0x52,0xb9,0x1f,0xa3,0xed,0xd7,0x31,0x33,0x4a,0xf6,0x3f,0xed,0x75,0xe7,0xa4,0xf4,0xdf,0x97,0xc1,0x78,0x90,0x9b,0x4b,0xbd,0x06,0xc6,0x72,0x5c,0xdf,0x57,0x60,0xbe,0xbc,0x88,0x02,0xb6,0x5a,0x65,0xea,0x3a,0x3a,0x74,0x03,0xc8,0x66,0xef,0xf0,0x63,0xc7,0x9d,0x58,0x8e,0xa1,0xb2,0x25,0x4f,0xc4,0x14,0x5f,0x80,0x78,0x08,0x06,0x21 +.byte 0x50,0x34,0x01,0x2b,0x15,0xf4,0x7d,0x1f,0x1f,0x32,0x36,0x0a,0x52,0x1f,0x50,0xa2,0x50,0xbc,0x9a,0xdf,0x4e,0x84,0x49,0x2d,0x08,0xaa,0x46,0xc0,0x0e,0xcf,0x27,0x17,0x91,0x78,0x8c,0xb9,0x72,0xc5,0x8e,0x25,0x85,0x11,0xff,0x2f,0x4a,0x71,0x7c,0x14,0xfe,0x86,0xfe,0xb4,0x3a,0xd0,0x67,0xfd,0xaa,0x9b,0xee,0x89,0x66,0x03,0x59,0x4e +.byte 0x1c,0x96,0xaf,0x2b,0x8d,0x4d,0x6f,0xf6,0x72,0xc6,0x13,0xc7,0x14,0xce,0x19,0x0c,0x0b,0xa3,0x01,0x12,0x7c,0x8e,0x10,0xb8,0x63,0x41,0x57,0xb9,0xfe,0x6e,0x3e,0xda,0x20,0xfb,0x92,0x08,0x7d,0x66,0x31,0x9d,0x4f,0xdb,0x14,0xf4,0xb6,0xb8,0xea,0xee,0x54,0x0f,0xaf,0xc1,0x99,0xf0,0x8f,0x55,0x44,0x20,0x44,0xd0,0xa6,0x98,0xa3,0xa8 +.byte 0x8b,0x8e,0x26,0x03,0xec,0x2d,0x50,0x4f,0xb0,0x8d,0xd0,0xf2,0x96,0xcc,0x18,0xa9,0xb1,0x0f,0x79,0xe3,0x9f,0x08,0xb3,0x53,0x0b,0x9c,0x9f,0x22,0xdb,0x45,0x57,0xd6,0xaa,0x3b,0x6a,0xcb,0xdc,0xc9,0xda,0x57,0x75,0x65,0x0a,0xc1,0x17,0xb3,0x97,0xa9,0x07,0x40,0x20,0xfb,0x72,0x2d,0xc6,0x37,0x1e,0x44,0xb7,0x7e,0x0b,0x38,0xcc,0xfc +.byte 0xa0,0xed,0x48,0xa9,0x9b,0x87,0xbc,0x71,0x0f,0x8b,0xda,0x4f,0x09,0x27,0x1e,0x3d,0x9c,0x03,0x62,0x81,0xa8,0x7c,0x7b,0x8a,0x14,0xa7,0x22,0x69,0xa8,0xba,0x0e,0xcc,0x1f,0x2b,0xb3,0x0f,0x7d,0xce,0x3f,0xec,0xb5,0x9d,0xe0,0x3a,0x67,0x56,0x08,0x5d,0x03,0x8b,0x71,0x01,0x44,0x11,0x1b,0x7b,0xcf,0xcc,0x2e,0xfc,0xa5,0x52,0x9b,0xeb +.byte 0x1e,0x8a,0xa1,0x86,0x64,0xcf,0x32,0x03,0x6b,0x3e,0x29,0xe7,0x9a,0x16,0x7e,0xe2,0x21,0x2f,0x5f,0xe2,0x86,0x7f,0xf8,0x22,0x36,0x10,0x99,0xc8,0x27,0x43,0xa1,0xb9,0xf4,0xb4,0xb8,0xe1,0xa3,0x1d,0x80,0x9c,0x81,0x92,0xef,0x1f,0x28,0x54,0x51,0xf3,0x62,0x9c,0x7a,0x24,0xd4,0x5a,0xdc,0x38,0x4f,0xa5,0x57,0xdd,0x4d,0xa1,0x52,0xf3 +.byte 0xd3,0x9d,0xa1,0x93,0x5e,0xbe,0x9b,0xd1,0x2a,0x52,0xf1,0xbb,0xa5,0x3f,0x3a,0x94,0x7c,0x7d,0x41,0x61,0x36,0x14,0x25,0x5f,0xab,0xef,0x32,0xf3,0x0f,0x6c,0xc5,0xf5,0x5f,0xe5,0x88,0x51,0x17,0x60,0x8b,0xd5,0xa6,0xea,0x8b,0x21,0xec,0x1a,0xa7,0x69,0xa0,0x59,0xf9,0xeb,0x51,0x94,0x70,0x2b,0x96,0x2e,0x71,0xa9,0x8c,0x12,0x15,0xce +.byte 0x7d,0x59,0x6b,0xf2,0xca,0x2c,0xbd,0x85,0xfb,0x23,0xab,0xcb,0x89,0x89,0xda,0x28,0x49,0x7e,0xfc,0x90,0x2a,0x9a,0x3d,0x6d,0x24,0x57,0xba,0xd9,0x30,0xe0,0x10,0x04,0xb1,0x7f,0x8a,0xcf,0xc8,0x27,0x63,0xd6,0xbd,0xea,0xef,0x90,0x6f,0xc2,0xfc,0x78,0xfd,0xc4,0x5b,0x45,0x0c,0x41,0x8a,0x53,0x5b,0xbc,0x62,0x32,0x86,0x7f,0x19,0xb7 +.byte 0x8b,0x03,0x50,0xed,0xca,0x8e,0x8b,0xa0,0xe3,0xc2,0x0e,0x81,0xe5,0x8a,0xe8,0xf1,0x6a,0x0b,0x1a,0xa7,0xb6,0xed,0x74,0x23,0x34,0xad,0x5b,0xd8,0xf7,0x17,0x8d,0xa5,0x05,0xf3,0x00,0x4a,0xad,0x7e,0x91,0xc9,0x6b,0x13,0xff,0x76,0x78,0xf0,0xd1,0xf4,0x99,0x43,0x73,0xd9,0xba,0x59,0xbe,0xb5,0xa3,0xbd,0x5e,0xc5,0xd3,0x88,0x06,0x9c +.byte 0x86,0x32,0xb4,0xd5,0x30,0x77,0x78,0x8e,0xd5,0x6a,0x1d,0xeb,0xfd,0x6b,0xe6,0xf8,0x4b,0xe8,0xf3,0xba,0xbb,0x86,0x8e,0xe6,0x63,0x83,0x92,0x23,0x05,0x58,0x2e,0x61,0xdd,0x38,0xad,0x8d,0x19,0x7d,0xfa,0x7c,0x3e,0xc8,0x9f,0xae,0xea,0x6d,0x12,0xf0,0xa4,0x08,0xed,0x12,0x0c,0x97,0x87,0x58,0xd8,0xbc,0x3f,0xde,0x7c,0xee,0x0c,0xc0 +.byte 0xa2,0x2e,0xf0,0x25,0x6d,0xf3,0x30,0x23,0xa7,0xc2,0xc8,0x09,0x67,0x01,0xe1,0x25,0x26,0x46,0x38,0xf5,0x5e,0x55,0x8b,0xd6,0x43,0x6a,0xb8,0xe4,0xdf,0x0f,0x5d,0x6c,0xc3,0xb2,0x56,0x38,0xda,0xbc,0xbf,0x5e,0x85,0x8c,0xd5,0x2a,0x6a,0xe2,0xff,0x4f,0x36,0xf7,0x52,0x2c,0xe2,0xae,0x65,0x65,0xd1,0xfc,0xd3,0xc6,0xf7,0x26,0xa6,0xd0 +.byte 0x0b,0xc8,0xf0,0x68,0x5d,0x07,0x89,0x06,0xb3,0xfb,0x39,0x1d,0xd8,0xd8,0xd7,0x53,0xd0,0xc9,0x76,0x56,0xc0,0xd3,0xf5,0x66,0x80,0x5b,0xff,0x4a,0xdf,0xae,0x52,0x86,0x54,0x24,0x53,0xcf,0xcf,0xd2,0x89,0xde,0x71,0x62,0x9c,0x31,0xa5,0x3d,0x62,0x07,0xa1,0x33,0x49,0xbb,0x06,0x88,0xd8,0xa1,0xdd,0x0e,0x47,0x8d,0x72,0x00,0x2d,0x51 +.byte 0xa3,0x35,0x6e,0xb6,0x1f,0xbf,0xe5,0x42,0x68,0x6f,0x62,0xfa,0xf3,0x12,0xa9,0x1a,0xbd,0xe8,0xa4,0xf1,0x6d,0x07,0xe7,0x70,0x87,0x44,0xb7,0x3d,0xea,0xdc,0x3a,0x24,0xbd,0xa0,0x9b,0xb8,0xc5,0xa8,0xd9,0x06,0xde,0x02,0x68,0x7e,0xd5,0x2d,0x3b,0x5f,0x12,0x31,0x72,0x35,0x77,0xf6,0x10,0x6e,0x81,0x7d,0x3c,0xac,0x95,0x5b,0xbe,0x90 +.byte 0x74,0xf3,0x3e,0x9b,0x07,0x54,0x97,0xe3,0x1d,0xcf,0xe2,0xc5,0x80,0x6b,0x5f,0x0b,0x96,0x00,0x0f,0x0e,0x53,0x36,0x76,0x6e,0x99,0x0c,0x32,0xa2,0xc9,0xaa,0xa0,0xa1,0xb7,0xee,0x9d,0xd6,0x46,0xe7,0x2d,0x10,0x7a,0xf2,0x22,0x50,0x52,0xbf,0xec,0xcc,0xbc,0x0d,0x81,0x55,0x2d,0xac,0x2e,0xf7,0x99,0xbe,0x68,0x09,0xb0,0x11,0xc3,0xc8 +.byte 0xca,0x63,0xa7,0xc2,0x0f,0x37,0x2a,0x9e,0x85,0x79,0x6b,0x44,0xc1,0x4f,0xb9,0xd6,0x6c,0x56,0x0e,0x59,0x33,0xc3,0x00,0x53,0xe2,0xf4,0x30,0x90,0x4e,0x4b,0x09,0x4d,0x6f,0x9a,0x9e,0xb9,0x8d,0x0b,0xa1,0x80,0xfd,0xfb,0xde,0x74,0x49,0x53,0x04,0x3a,0x35,0xcb,0x45,0xe2,0x67,0x2c,0x4d,0x6e,0x39,0x7b,0xbd,0x68,0xaa,0x93,0x1e,0xee +.byte 0x1e,0x35,0xae,0x1e,0xf2,0xe7,0xb1,0x80,0x92,0x45,0x27,0x85,0xd0,0xc7,0x26,0x17,0x54,0x30,0xba,0x0c,0x8e,0x48,0xf3,0x08,0x51,0xa6,0x41,0x70,0xba,0x5b,0x90,0x69,0x7c,0x64,0x1d,0x61,0xb5,0x23,0x4a,0xef,0x97,0xe4,0x9a,0xd0,0xff,0x47,0x7a,0x93,0x1a,0x28,0xb3,0x8a,0x32,0x29,0xf8,0xe9,0x08,0xc3,0xf3,0x24,0xd7,0x2e,0x18,0x6d +.byte 0x99,0x40,0x77,0x43,0x9f,0x98,0xe4,0xe5,0x3a,0x34,0x9d,0x46,0x52,0x9f,0x84,0x79,0x8c,0x70,0xbc,0x88,0x30,0xaf,0x87,0x69,0x57,0x6e,0xde,0x2e,0xfe,0x0f,0x3b,0x8d,0xc8,0x95,0xcf,0x69,0x78,0xff,0xa1,0xb1,0x81,0x49,0x1e,0x45,0xc0,0x83,0x1b,0xa3,0x5a,0xee,0x3e,0x9a,0x15,0x7c,0xf0,0xa2,0xfd,0x04,0x22,0x55,0x2d,0x74,0x61,0x29 +.byte 0x0e,0x4f,0x31,0xdb,0x35,0x99,0x37,0xb7,0x7d,0x11,0xde,0x87,0x4f,0x84,0xeb,0x6c,0x14,0xcc,0xbb,0x71,0x47,0xab,0x5b,0x61,0x51,0xeb,0xa1,0xc1,0x5f,0xe4,0x5c,0x3c,0xab,0x04,0xf1,0x60,0x50,0xe1,0xd0,0x58,0xdf,0x42,0xed,0x73,0x5f,0x31,0xdf,0x8d,0xb8,0xb8,0xdc,0x4e,0x2f,0xe3,0x7f,0x89,0x9e,0x62,0xc9,0xef,0xfd,0x60,0xae,0x58 +.byte 0xa9,0xa5,0x8b,0xa8,0x3b,0xd8,0x5f,0xd4,0x09,0xff,0x61,0x8c,0x25,0xde,0x84,0x7f,0x35,0xc9,0x5c,0x2b,0xe8,0x46,0xe4,0x1c,0xbd,0x77,0x51,0x31,0x55,0x3d,0xb4,0x35,0xf3,0xdc,0xa5,0x55,0xd3,0xe3,0x24,0xf9,0x41,0xe2,0xf0,0xbd,0xf5,0xff,0x81,0x87,0x64,0xc9,0xe7,0x69,0x29,0x86,0xaf,0x98,0x33,0x33,0x62,0x9c,0x7b,0x16,0xbb,0xfe +.byte 0x0b,0xa7,0x92,0xa5,0x7b,0x81,0xbc,0x50,0x88,0xf6,0xe7,0xfc,0x73,0xd6,0x37,0x43,0x09,0xa5,0xc6,0xd6,0x4d,0x28,0xb5,0xaa,0x53,0x52,0x8c,0x2c,0x06,0x64,0x6c,0x21,0x6b,0xe7,0x67,0x4a,0xa5,0xcc,0xa1,0x32,0xf0,0xd9,0x78,0xb9,0xc3,0xdb,0x41,0xee,0x10,0x11,0x81,0x04,0x03,0x73,0x48,0xc6,0x3e,0x60,0x6d,0x82,0xef,0xe2,0xa8,0xe8 +.byte 0xd7,0xda,0xd9,0xb5,0x34,0x42,0xc8,0x1c,0xa7,0xa4,0x8e,0x88,0x2e,0xbc,0x96,0x0a,0xfc,0x40,0x36,0x80,0xdf,0x60,0xe9,0x03,0x02,0x0c,0x51,0xf7,0x7d,0x01,0xd2,0x21,0x38,0x44,0x4b,0x34,0x80,0xbf,0x5e,0xc1,0x86,0xf2,0x35,0xeb,0xa8,0x21,0x15,0x74,0x7c,0x99,0x55,0x64,0xf4,0x48,0xd6,0xd1,0x47,0x1f,0x4d,0xbf,0x0c,0x20,0x5d,0x86 +.byte 0xb9,0xab,0x4e,0xc8,0x86,0x08,0x71,0x1d,0x13,0xf6,0xd3,0x17,0xac,0x61,0x10,0x5d,0x2a,0xb4,0x48,0xa1,0xb9,0x79,0x5a,0x09,0x3a,0x65,0x4c,0xbd,0x97,0xbe,0x48,0xc6,0x66,0xd8,0xce,0x0c,0x19,0xb5,0x44,0x02,0xfa,0xb7,0xa8,0x3f,0x9b,0x86,0xec,0xd1,0xef,0x1d,0x7d,0xb3,0x82,0x5c,0x92,0x48,0x02,0x2c,0x56,0x0f,0xff,0xf7,0x19,0x74 +.byte 0xc2,0x38,0x24,0x8d,0xb2,0x87,0xb6,0xeb,0x49,0x50,0x6a,0x33,0x74,0x4e,0x2a,0xcb,0xf4,0x13,0x2c,0xfa,0x3b,0x0e,0x3d,0x98,0x3e,0x33,0xd9,0x55,0xfa,0xb9,0x74,0xb8,0x6f,0xc1,0xd8,0xfd,0x8f,0xff,0xb9,0x1a,0x17,0xf8,0xb6,0x21,0xc4,0x9d,0x47,0x5e,0x84,0xf6,0xe5,0xbf,0x93,0x98,0xac,0x8f,0x68,0x85,0xf8,0xe8,0x79,0x7f,0x6f,0x0d +.byte 0x62,0x2c,0xaa,0x1e,0xe4,0xab,0x73,0xf8,0x6f,0x02,0xda,0x6b,0x3c,0x14,0x2e,0xc9,0xdb,0xb0,0x4e,0x39,0xb5,0xcf,0x05,0xae,0x9c,0x63,0x2f,0x6a,0x25,0x61,0x9d,0x40,0xeb,0x7e,0xd8,0x97,0x97,0x33,0x67,0x5c,0x78,0x84,0x68,0xc2,0x7a,0x26,0x58,0xe3,0x6c,0x0a,0x2e,0x6a,0x82,0xd6,0x43,0xed,0x79,0xa5,0x8d,0x4e,0x7c,0xf7,0x80,0x01 +.byte 0xe7,0x02,0x5e,0x3a,0xf7,0x8a,0x4a,0x85,0xe9,0x98,0x1e,0x69,0x33,0xf3,0x54,0x96,0x79,0xc8,0x03,0x0a,0x9f,0x0c,0x5d,0x66,0x44,0x88,0x3c,0xd7,0x9e,0xd1,0xde,0x01,0xfd,0x5e,0xa5,0x6a,0x82,0x00,0x36,0xe6,0x12,0xe3,0x62,0x46,0x45,0x69,0xfb,0x4f,0x44,0x8e,0xe5,0x8d,0x21,0x57,0x6a,0x61,0x8e,0x56,0xcb,0x5b,0x2c,0x5f,0x65,0x41 +.byte 0x2c,0xad,0xf2,0x98,0x34,0xbb,0x06,0x0d,0x8a,0x3c,0x34,0x0d,0xa3,0xe2,0x6e,0x86,0xfa,0xa9,0xfb,0x6f,0xbb,0x32,0xd6,0x0d,0x76,0x6b,0x77,0xf3,0x83,0x41,0xc0,0x80,0x63,0x55,0x47,0xb8,0x13,0x6b,0x99,0x96,0x08,0x9b,0xc0,0x82,0xae,0x49,0x4a,0x51,0x63,0x74,0xf2,0xec,0xfa,0x0d,0xbc,0x3a,0xde,0xf5,0x4b,0x4f,0x08,0x41,0x23,0x88 +.byte 0x14,0x88,0x6a,0x3a,0xf0,0x5f,0x0c,0x45,0x7f,0x65,0x7a,0x67,0xd8,0x17,0xed,0x04,0x47,0x60,0x0e,0x74,0x8f,0xfd,0x48,0xda,0xcd,0xe9,0xfe,0xf5,0x6f,0x43,0xcd,0xa5,0x05,0xa2,0x2e,0x78,0x5b,0xff,0xb8,0x6f,0x2e,0xfd,0x3e,0x4b,0xef,0xcf,0xe0,0x06,0x57,0x28,0xf4,0x2e,0x3b,0xb5,0x9e,0x3c,0xbd,0x63,0xa6,0x78,0x8e,0xd5,0xb8,0x81 +.byte 0x4e,0xf0,0xbf,0x14,0x65,0xc8,0x00,0x9f,0x0e,0x25,0x6a,0x7a,0x63,0x58,0xe4,0xe7,0xa9,0x82,0x16,0xc9,0x86,0x20,0x94,0x71,0x5b,0x9f,0x9b,0xc3,0xc5,0x32,0xb0,0x6c,0x2b,0x8c,0x54,0x67,0x36,0x94,0xb1,0x47,0x33,0xfd,0x9f,0x7c,0x7f,0x7e,0x08,0x51,0x1f,0x7e,0xbf,0x09,0x57,0xf3,0xaa,0x77,0x94,0xf3,0x20,0x1b,0x95,0xf6,0x04,0xb2 +.byte 0x09,0x9d,0xe2,0xbb,0x4d,0xfe,0x6b,0x99,0x06,0x58,0x40,0x84,0x90,0xfa,0x0e,0x9b,0x58,0x6d,0x02,0xbe,0x53,0x73,0xd1,0xc9,0xc7,0x31,0x2a,0x4a,0x12,0x2c,0xb6,0x1c,0xfb,0x49,0xc6,0x1a,0x93,0x33,0x1f,0x29,0x8b,0x94,0xe9,0x20,0xa7,0xe6,0x20,0xe6,0xbf,0xcd,0x5c,0xb6,0x52,0x42,0xf0,0x9c,0x6c,0x21,0x61,0x10,0xe7,0x0e,0x9f,0x33 +.byte 0x5f,0xc8,0xd0,0x20,0xe0,0x3e,0xc5,0x7a,0x10,0xf1,0xe5,0x19,0x52,0xcd,0xe1,0xa8,0x62,0x43,0x20,0x79,0xc3,0xac,0x93,0x27,0x02,0x8e,0x21,0x06,0xb9,0x66,0xd9,0xc8,0x40,0xe0,0xd1,0xf0,0x64,0x81,0xa6,0xc4,0x87,0x85,0x2b,0x92,0x1c,0xd6,0x48,0x85,0xb1,0xbe,0x78,0xf3,0x89,0xa2,0xf0,0xe5,0x39,0xac,0xbf,0x59,0x5d,0xf8,0x4f,0x74 +.byte 0x44,0x85,0x98,0x03,0x81,0x4b,0x7e,0x6f,0x5c,0xa1,0x11,0xd2,0xfd,0x30,0x7f,0xcd,0xd0,0xe2,0xcc,0xd4,0x80,0x16,0x46,0xa6,0x64,0x8b,0x9e,0xfc,0x2a,0x1a,0x65,0x5c,0x90,0x82,0xf9,0x23,0x48,0x11,0xf6,0xf2,0x50,0x3f,0xed,0x44,0xf2,0x9a,0x5a,0xca,0x1c,0x9a,0xd2,0x71,0x1b,0xd6,0x4c,0x51,0xf6,0x89,0x6f,0x65,0xe4,0x97,0x41,0x47 +.byte 0x1b,0x86,0xbd,0x83,0xa0,0xfe,0xac,0x16,0xe8,0xab,0x28,0x96,0x2f,0xa2,0x12,0x5f,0x7c,0xb3,0x18,0x2b,0x05,0x51,0x49,0xba,0xb4,0x1f,0x1e,0xe6,0x8a,0x82,0xca,0x33,0x7d,0xe6,0x8c,0x95,0xba,0x08,0x60,0x47,0x6d,0x79,0xac,0x0f,0xba,0x46,0xff,0xed,0xe0,0x34,0x03,0xfe,0xa7,0x85,0xe5,0x61,0xe3,0xe4,0x6c,0x5c,0x1b,0x9d,0x8a,0x54 +.byte 0x17,0xaf,0x08,0x4c,0x44,0x7f,0xb7,0xb0,0x6a,0x3a,0xff,0xb7,0xf6,0x10,0xc4,0x8f,0x31,0xd6,0x1a,0x25,0x27,0x35,0xca,0x87,0xa9,0x61,0x0b,0x35,0x96,0x89,0x0f,0x1a,0xbd,0x1e,0xf6,0xee,0xaa,0x95,0x16,0xe4,0x38,0x7b,0xb2,0xbe,0xea,0xc9,0x5a,0xcd,0x3b,0xb8,0x9e,0xd7,0x20,0xcd,0x3f,0x90,0xaa,0x8b,0x2a,0x42,0xed,0xab,0xc1,0x53 +.byte 0x83,0xc7,0xb8,0x3f,0xa1,0xb9,0xf4,0xf4,0xb0,0xe0,0x1f,0xb0,0xeb,0xa9,0x81,0x9f,0x31,0x67,0x1e,0x6c,0x96,0x9f,0x09,0xea,0x04,0xfe,0x37,0x22,0x87,0x60,0xb9,0x91,0x8f,0xa9,0x11,0xa3,0x68,0x5e,0x29,0x21,0x41,0xa3,0x02,0x08,0x82,0xd0,0x2b,0x66,0x6d,0x3c,0x46,0xc7,0x23,0x09,0x86,0x7f,0x53,0x11,0x3e,0x83,0x52,0x0a,0x4a,0xe4 +.byte 0x93,0xc6,0xc1,0x96,0x17,0x94,0x51,0x17,0x69,0xea,0x72,0xb8,0x85,0xde,0x7e,0x13,0x4a,0x08,0x26,0xae,0x31,0x19,0x0f,0x6f,0x48,0xa1,0xf2,0x57,0xa2,0x01,0x8e,0x84,0xee,0x63,0x23,0xc0,0x97,0x84,0xa2,0xf5,0x3f,0xeb,0x30,0x9e,0xdd,0xd2,0x43,0x24,0xa2,0x57,0xb7,0x57,0x86,0x26,0xa3,0xe6,0x6e,0xf2,0xcd,0xfb,0x7b,0x34,0x74,0x53 +.byte 0x07,0x95,0x51,0xb7,0xfd,0xf3,0xd1,0x83,0xbd,0x25,0xd6,0x2c,0x69,0x73,0x02,0x8e,0x76,0x19,0xea,0xb0,0x83,0x60,0x8c,0x53,0x9d,0x77,0x86,0x1e,0x65,0xc7,0x57,0x31,0x29,0xd9,0xa9,0x3a,0xb2,0x0d,0xd8,0xf4,0xf9,0x48,0x49,0xfb,0x3c,0x40,0x3d,0x1b,0xc4,0x8b,0x94,0x0e,0x50,0x7f,0xd5,0x39,0x5e,0x57,0x86,0xd1,0xba,0x0c,0x38,0x10 +.byte 0x01,0x5f,0x44,0xf3,0xe5,0xb0,0xf8,0xae,0x17,0xdf,0xd2,0xb3,0x10,0xc5,0x3b,0xfd,0xd9,0x68,0x90,0x9c,0x6c,0x26,0xdf,0x12,0x50,0xfa,0xbf,0x8b,0xce,0x68,0x80,0x8c,0x04,0x60,0xbf,0x34,0x81,0xbd,0x29,0xa3,0xa2,0xe4,0xe0,0x2d,0x25,0xb2,0xff,0x9f,0xd1,0x20,0x07,0xd5,0x8c,0x19,0xfa,0x3f,0x47,0xec,0xc1,0x8d,0xc9,0x36,0xf8,0x51 +.byte 0x4c,0xaa,0x40,0xe3,0x6a,0x21,0xd5,0xe6,0xa6,0xcf,0x8c,0xd9,0x10,0x47,0x66,0xfd,0x32,0x48,0x36,0x8f,0x14,0xed,0x09,0x80,0x50,0x27,0xaa,0xd5,0x1f,0x69,0xb8,0xe4,0x96,0x27,0x56,0x78,0xd6,0xd5,0x2d,0xf0,0x4f,0x14,0x30,0x17,0x9e,0x5b,0x69,0x8c,0x7c,0x1c,0x97,0x38,0x65,0x77,0x75,0x49,0xac,0x4b,0x06,0xda,0x74,0x11,0x86,0xbc +.byte 0xad,0x01,0xf2,0x03,0x29,0x5d,0xa7,0x74,0xd3,0x44,0xae,0x1d,0xbf,0xf9,0xc5,0x5b,0x83,0x8c,0xd6,0x84,0x8a,0x8e,0xe9,0xa6,0x08,0xf4,0x88,0x13,0xcb,0x16,0x45,0x13,0x9c,0xc7,0x75,0xa9,0xa7,0x55,0x04,0x91,0xd6,0xe9,0xd4,0xe5,0x65,0xa0,0x3a,0x53,0xa0,0xfc,0x62,0xce,0x91,0x01,0xb4,0x06,0x8b,0x10,0x79,0x6f,0x2c,0xd6,0x0a,0xa2 +.byte 0x31,0x8f,0x75,0x32,0x0e,0xfa,0x0d,0xec,0xfd,0x71,0x7f,0x74,0x97,0x30,0xe9,0xee,0x9f,0x04,0x21,0xb5,0xc9,0xd1,0x52,0x2a,0x0f,0x18,0xbe,0x3e,0xbb,0x98,0xaf,0x59,0x9b,0x85,0x79,0x5e,0x52,0x93,0x1c,0x42,0x67,0x67,0x6b,0xd5,0x41,0xaf,0xba,0x09,0x3a,0xb4,0x0e,0x97,0x22,0xe6,0xbb,0xe1,0x27,0xa1,0xf9,0xf0,0xcd,0xa2,0x3d,0xdb +.byte 0x81,0x2f,0x65,0x90,0xb7,0xe5,0xe5,0xce,0x1d,0x3b,0xfe,0x34,0x57,0xcd,0x3a,0xbd,0x19,0x59,0x23,0x12,0xf1,0xb6,0xf2,0xf7,0xc1,0xf5,0x1d,0x0b,0x46,0x8f,0x16,0x6a,0x81,0xfe,0xc1,0x97,0x8d,0x69,0x55,0x60,0xdd,0xf0,0x61,0xe9,0x22,0x30,0x72,0x1a,0x24,0x30,0xd7,0xbc,0x1c,0xfa,0x02,0x55,0xfc,0xb9,0x4b,0x0a,0xe4,0x90,0x90,0x3a +.byte 0xe3,0xce,0xd4,0xa0,0x7d,0x21,0x5a,0xf7,0x79,0x6e,0x03,0x4f,0x4e,0x93,0xad,0xc4,0x8e,0x9d,0x9f,0x8a,0x39,0x59,0x20,0xc1,0x5d,0x6a,0x4d,0x8f,0x69,0x78,0xea,0xba,0xde,0xc0,0x87,0xb2,0xf2,0x20,0xd6,0x7a,0x9c,0xf9,0x09,0x03,0x2a,0x4d,0xb9,0x10,0xfc,0xe5,0x05,0x90,0xed,0x45,0x4f,0x5f,0x7c,0x5d,0xfa,0xe6,0x0d,0x07,0xae,0xcc +.byte 0x21,0xc8,0x1c,0x7a,0xfb,0x1d,0xb9,0xe3,0x69,0xa1,0xb7,0x5f,0xb5,0x6a,0xb9,0x58,0x9d,0xcd,0x99,0xf8,0x38,0xbb,0xa0,0xfe,0xf8,0x41,0x51,0x72,0xce,0x76,0x89,0x59,0xa2,0xab,0xef,0xea,0xab,0x79,0xbc,0xda,0x73,0xdb,0x18,0xda,0x60,0x1b,0xc4,0xb7,0x4f,0xb3,0x86,0x21,0x2a,0xc3,0xec,0x7f,0x0e,0x89,0x16,0x0e,0xd2,0xbd,0xea,0x0e +.byte 0xcf,0xc1,0x4b,0x2c,0x97,0x69,0xce,0xd3,0x94,0xad,0x81,0xe9,0x70,0xf4,0xf8,0xe5,0x77,0xe6,0x92,0xe0,0x23,0x38,0xd3,0xc1,0xdd,0x2e,0x58,0x77,0xc5,0xc3,0x29,0x34,0x66,0x48,0xf9,0x75,0x3c,0x8a,0x6a,0xb8,0xbf,0xf8,0xba,0xf0,0xb9,0xa1,0x81,0x0b,0xa1,0xaa,0x17,0x34,0x1a,0xbb,0xa3,0xa2,0xba,0x21,0x45,0xc0,0x1d,0x57,0x11,0x4d +.byte 0x9b,0xd4,0x64,0x84,0xd7,0x0b,0xd6,0xfb,0x72,0x2c,0xdb,0xc3,0xe6,0x24,0xa9,0xf3,0x30,0x9f,0x21,0x05,0x1e,0xcc,0x48,0x58,0xed,0xfd,0xb2,0x34,0xe3,0xf7,0x7e,0x56,0xee,0xdf,0xa4,0xbb,0xb1,0xcc,0x7f,0x81,0x40,0xe9,0xdf,0x3f,0x82,0xc4,0x0d,0x14,0x9b,0x3b,0x80,0x15,0x24,0x6e,0xa4,0xce,0xfa,0x28,0xa7,0x7f,0x89,0xfb,0xc6,0x83 +.byte 0xe8,0x2a,0x70,0xfb,0x9c,0x75,0xb8,0xfd,0xec,0xbc,0xbb,0xf5,0xef,0x0a,0xa5,0x77,0x0b,0x38,0xa0,0x63,0xa5,0x71,0x12,0xc9,0xaa,0xc3,0xf9,0x72,0x30,0x45,0x4e,0x19,0x44,0x2d,0x09,0xf4,0xf1,0xa8,0xe8,0xde,0x58,0x87,0x70,0xa8,0x91,0x86,0xef,0x5d,0x02,0x90,0x55,0x63,0x99,0xde,0xd7,0xb7,0x5f,0x07,0x01,0xdf,0xb1,0xe5,0x55,0xf5 +.byte 0x87,0x69,0xd2,0x7a,0x71,0xbc,0x0e,0x4b,0x8b,0x98,0xf7,0xf6,0x0a,0x01,0xbb,0x9f,0x1b,0x15,0xb6,0x76,0xe0,0xc0,0x4b,0x5d,0x08,0xba,0xba,0x73,0x3f,0x36,0x5a,0x29,0xd7,0x7c,0xc2,0x87,0x03,0x75,0xff,0x26,0x21,0xae,0xbe,0x66,0x70,0xa2,0x99,0x11,0x35,0x49,0x78,0x7b,0x3a,0xfe,0x94,0xf7,0x37,0xe0,0x69,0x56,0x39,0xf7,0x3f,0x71 +.byte 0x39,0x74,0x75,0x32,0x1f,0xfb,0x3a,0x87,0x07,0xab,0xf1,0xed,0xe3,0xe2,0xbf,0x3f,0xb1,0x73,0x11,0xc9,0x34,0x4b,0xb1,0x1e,0x62,0x4e,0xc1,0x8a,0xae,0xcc,0xc7,0xb3,0xa7,0x70,0x01,0x73,0xad,0xb3,0xc3,0x59,0x70,0x14,0x31,0x94,0x9f,0x6b,0x18,0x11,0x50,0x52,0xc9,0xf0,0xf8,0x12,0x9d,0x7c,0x90,0x64,0x9d,0xd9,0x41,0xa6,0x45,0xe3 +.byte 0xc9,0x25,0x73,0xe7,0x48,0x9d,0xdc,0xe0,0x2c,0x71,0xd3,0x68,0xc5,0xab,0xac,0xe3,0x16,0x95,0xe3,0xa5,0xae,0x2f,0x57,0x60,0x4b,0x11,0x90,0xaa,0xe7,0x48,0xca,0xc7,0xde,0x2e,0x56,0x10,0x8e,0xc3,0x0a,0x7d,0x66,0xf1,0xc3,0xf7,0x2d,0xdd,0xfa,0x5e,0xb2,0xcb,0x99,0x4d,0xaa,0x4e,0x91,0xc1,0x94,0x60,0x27,0x33,0x82,0xa6,0x2a,0xba +.byte 0x05,0x32,0x33,0x0a,0x30,0x47,0xb0,0xac,0x68,0x7d,0xef,0x25,0x09,0xcf,0x51,0xf4,0x06,0x28,0x14,0xb2,0xb4,0x1f,0xaf,0x37,0xdc,0x70,0x88,0x4d,0xb9,0xfc,0x2d,0x61,0x25,0x13,0x1f,0x32,0x48,0x6d,0xeb,0x46,0x05,0x66,0x44,0xa1,0xec,0xce,0xe9,0x51,0xa9,0xba,0xf8,0xde,0x95,0x1b,0x20,0xe1,0x21,0x75,0x4b,0x25,0x7f,0x3c,0x16,0xf7 +.byte 0xe2,0xbe,0xeb,0xca,0x2b,0x77,0x92,0x16,0x32,0xe2,0x74,0x21,0x52,0x3f,0x08,0xba,0x41,0xb0,0xd3,0xd2,0xf7,0xf3,0x29,0xb6,0x10,0xfa,0xa5,0x29,0x35,0x29,0x21,0x0d,0xec,0xba,0x5a,0xf3,0x63,0x0f,0x9d,0xbc,0x42,0x02,0x46,0xe9,0x07,0x4a,0x9a,0xe8,0xd3,0x78,0x92,0xa2,0xe5,0x03,0xec,0xd4,0xe2,0xc8,0x8f,0x92,0x4a,0xae,0xbc,0xd7 +.byte 0xdf,0x4b,0x07,0x22,0x47,0xbd,0xb4,0xb5,0xa0,0x7e,0xfb,0x21,0x40,0x62,0xb1,0x6c,0x07,0x00,0x64,0xf6,0xb2,0x75,0x5c,0x29,0x84,0xff,0x38,0x0c,0xc8,0x08,0x38,0x92,0xf9,0xad,0xd7,0xcc,0xc3,0x1c,0x03,0x80,0x49,0x39,0x1c,0xdb,0xae,0x60,0x87,0x8a,0x5c,0xe9,0x17,0xbd,0x2b,0x0f,0xa5,0xa1,0xf9,0x0d,0x4b,0x8c,0x4d,0x39,0xda,0x15 +.byte 0x8c,0xc4,0x69,0xaf,0x2b,0xb0,0xa1,0xfd,0xd9,0x65,0x3c,0x87,0x4b,0xf2,0x5a,0xd7,0xd8,0xb9,0xef,0x78,0x67,0x30,0x4c,0x6c,0x92,0xc5,0x1e,0x15,0xf8,0xd9,0x74,0x1b,0x54,0x0c,0x10,0x1b,0xb5,0x11,0x13,0xd6,0xb4,0xc0,0x53,0x03,0x2c,0x4b,0xee,0xac,0xf9,0x87,0x17,0x51,0x35,0xb8,0x1a,0xdc,0x16,0x61,0x5b,0xe9,0x5a,0x43,0x94,0x42 +.byte 0x8f,0x68,0xbd,0xb6,0x52,0x00,0x63,0xa3,0x52,0x6e,0x5d,0x8e,0xe9,0x4f,0xf5,0x69,0xd8,0x4f,0xf5,0x5c,0x89,0x7e,0x1c,0xb9,0xdc,0x7b,0x92,0x8a,0x2b,0xfc,0xb8,0xad,0xbb,0xff,0x61,0x2e,0xc0,0xdc,0xfb,0x2f,0x78,0x2a,0x50,0x32,0x9b,0x4c,0xfd,0x9e,0xab,0x80,0x5c,0x7d,0xc8,0x6b,0xb3,0x2d,0x0a,0xfe,0x43,0xa2,0x10,0x10,0x79,0xbc +.byte 0x8c,0xa0,0x86,0x09,0x8c,0x8b,0x28,0xf3,0x8a,0xc9,0xeb,0xcb,0xb5,0x0e,0x56,0x19,0xae,0xe0,0xa1,0x22,0x72,0xc5,0xad,0x01,0x12,0x69,0xb6,0x52,0xb8,0xdd,0x36,0x25,0x21,0xae,0x73,0x06,0xc1,0xe0,0x23,0x20,0xe1,0x8e,0xe4,0x99,0xcd,0x86,0xca,0xf5,0x93,0x0e,0x6b,0xb8,0xba,0x18,0x4a,0x36,0xed,0xd0,0x37,0xc8,0xc7,0x8a,0xb2,0x63 +.byte 0x2e,0xa4,0x22,0x76,0x6f,0xf7,0xdd,0x81,0xd6,0x6f,0xcd,0xb9,0x65,0xf0,0x95,0x77,0xae,0xca,0x54,0x62,0xce,0x5d,0x47,0x9e,0x10,0x89,0xb9,0xfa,0x72,0x0a,0xef,0x24,0x17,0x45,0xb0,0xb0,0xc7,0x51,0x85,0xa1,0xb1,0x6a,0xd2,0xea,0x48,0xe2,0x6a,0x03,0x2a,0xdf,0xa8,0x0e,0x62,0xa2,0x1e,0xe2,0xa7,0x20,0x57,0xbd,0x73,0xeb,0xef,0x86 +.byte 0xc9,0xd4,0xfa,0x96,0xfe,0xfa,0xb3,0xc6,0xbf,0x7a,0x16,0xa2,0x43,0x73,0x56,0x71,0x78,0x32,0x3b,0xc1,0xd8,0x26,0xbf,0xde,0x39,0x5d,0xbd,0x3b,0xff,0xd7,0x4f,0xa0,0x67,0xa6,0x09,0x9a,0x81,0xfd,0xec,0x34,0x73,0xcd,0x90,0x15,0x8b,0x3e,0x2d,0x6f,0x7d,0xcc,0xf5,0x20,0x15,0x07,0xa8,0x2f,0xa5,0x5b,0x2b,0x4f,0xb8,0x2f,0x14,0x6c +.byte 0x52,0x78,0xbd,0x92,0x98,0xda,0x69,0x19,0x58,0x4c,0x76,0xe4,0x20,0xb2,0x48,0xa4,0x9f,0x2f,0x4c,0x9b,0x45,0x7f,0x7d,0x1c,0x46,0xe9,0x1e,0x43,0x26,0x49,0x39,0xb6,0x42,0x3a,0x4c,0x59,0x95,0x6b,0x28,0xd5,0xbe,0xa7,0x2e,0xd0,0x0c,0x00,0xa0,0x67,0x06,0x4e,0xee,0xae,0x7f,0xc2,0xb5,0x12,0x46,0x3f,0xb4,0x35,0x16,0x2a,0xda,0xbf +.byte 0x41,0x34,0xbe,0x30,0x2a,0x0f,0x7b,0x60,0xa6,0x8b,0xcd,0xae,0x7a,0x8c,0xd6,0x97,0xab,0x06,0x1e,0x14,0x87,0x45,0xa3,0x3c,0x9c,0xc4,0xa0,0x1d,0xee,0xf0,0xca,0xb8,0xa6,0x8d,0x37,0x92,0xad,0xbc,0xe6,0x1f,0x65,0x75,0xd3,0xbc,0x72,0x66,0xe2,0xff,0xbc,0x19,0x93,0xae,0xee,0xd0,0x63,0x6d,0x97,0x6f,0x57,0xf3,0x77,0xcd,0xe3,0x57 +.byte 0x3f,0x00,0xc8,0xe1,0x63,0x83,0x15,0x84,0xc6,0x08,0xdb,0x03,0xc9,0x27,0x47,0x4c,0x17,0x12,0x40,0x6e,0xac,0x74,0x6f,0x3c,0x22,0x57,0x36,0x29,0xbb,0x6a,0xc7,0x5a,0xfe,0x60,0x1c,0x0f,0x32,0x95,0x1b,0xf2,0x3c,0xed,0x04,0x87,0x4c,0x48,0xc7,0x63,0x79,0x24,0xb3,0x12,0xbf,0x55,0x3b,0x32,0xbf,0x52,0x4e,0x1e,0xc1,0x1f,0xf2,0xfd +.byte 0xe6,0xb8,0x56,0x38,0x0e,0xd2,0x75,0x3d,0x41,0x99,0x0c,0x7a,0x12,0x3f,0xa7,0x3a,0x79,0xa0,0xd7,0x6f,0x47,0x97,0x7e,0x9e,0xf6,0xfe,0x29,0xc0,0x16,0x34,0x38,0x80,0x2f,0xde,0x65,0x79,0xc9,0xfd,0xa0,0x84,0xc3,0x39,0xbc,0x0b,0xbe,0x18,0xba,0x0d,0xe3,0x35,0x11,0xba,0x9f,0xde,0x5d,0x0c,0xae,0x8e,0x0c,0x0f,0x66,0x9c,0xe6,0xfc +.byte 0x3d,0xdb,0x46,0xf1,0x84,0x57,0x62,0xb0,0x00,0xd4,0x8c,0xaa,0x93,0xeb,0xf7,0xa7,0x8e,0x82,0xba,0x89,0x67,0xbb,0x38,0xb0,0xb6,0x13,0x0c,0x96,0x22,0x9c,0x6a,0x86,0xea,0x83,0xad,0x5f,0x7b,0x3a,0x28,0xd8,0x53,0x90,0x2d,0xab,0xc9,0xbe,0x99,0xfb,0x68,0x42,0x27,0xf6,0xe3,0x5a,0xaf,0xf3,0xd6,0xee,0xb6,0xa2,0xe0,0x32,0x3c,0x1d +.byte 0xd4,0x3c,0x2b,0x58,0xc2,0x4f,0x3d,0x20,0x39,0xdb,0x80,0x89,0x20,0x20,0x7b,0xe6,0x1d,0xd0,0xa2,0x1a,0xd4,0x88,0xc9,0xe0,0xb9,0xf6,0xb2,0xa1,0xcd,0xf2,0x67,0x60,0x44,0xd8,0xce,0x6a,0xe2,0x52,0xc3,0xf3,0x61,0xa3,0x14,0x58,0xd6,0xe5,0x43,0x4a,0x8d,0xcc,0x4f,0xf8,0x17,0xdd,0xd2,0x5d,0xd5,0x5a,0x86,0x8e,0xc4,0x74,0xdc,0x1b +.byte 0xad,0xca,0x63,0x75,0xf0,0x43,0x41,0x16,0x02,0x49,0x6a,0x3a,0xe3,0xb9,0xa9,0xdc,0xfb,0x99,0xbc,0x60,0x0d,0xdb,0xa0,0xcf,0x27,0xaa,0xd5,0xc5,0x42,0x0b,0x02,0x00,0x43,0xaf,0xb5,0x4f,0xe1,0x88,0xa1,0x9d,0xca,0xfb,0x9f,0x1f,0x08,0x9c,0x66,0x23,0xca,0x4b,0x88,0xb4,0x40,0xdc,0xd3,0xd3,0x1a,0x64,0xe3,0x9b,0x43,0xea,0x20,0x90 +.byte 0x30,0x2e,0xc4,0x75,0xc5,0x52,0xc5,0x7c,0x0e,0x35,0x56,0xf5,0x1f,0x50,0x2b,0xf6,0x28,0x93,0x6f,0xde,0x10,0xc6,0x49,0x2b,0x77,0xb1,0x6d,0xce,0xfd,0x37,0xd4,0x8d,0x11,0xed,0x88,0x1e,0xca,0x68,0x0c,0x4e,0x38,0x7f,0x0f,0xab,0x6f,0x8d,0x1c,0x7d,0xd4,0x7d,0xd8,0xa9,0x5c,0x24,0x5a,0x7d,0xf4,0x5b,0xb6,0xb7,0x28,0xc7,0x93,0xd6 +.byte 0xa9,0xe5,0xac,0x62,0x16,0x9c,0x4e,0x5c,0x24,0xa0,0x2a,0x76,0xce,0x7d,0x5c,0x4b,0xbe,0xbc,0x83,0x5c,0x9a,0xc8,0x06,0x7b,0x1e,0xac,0x98,0x67,0x17,0x32,0x94,0xda,0xd1,0x8b,0x58,0xad,0x8e,0x26,0x03,0x81,0x7c,0x48,0xd1,0x83,0x03,0xba,0x6c,0x51,0xe9,0x25,0x82,0xd2,0xb9,0x7f,0xd8,0x33,0x3f,0x77,0x29,0x45,0x41,0xa9,0x17,0x3d +.byte 0x62,0xc6,0xd2,0xfb,0xd1,0x24,0xc7,0xee,0x10,0xc0,0x64,0xc3,0x46,0xc6,0x2b,0xe8,0x9c,0xc8,0x99,0x23,0x77,0xa9,0xb5,0x12,0xc4,0x53,0xde,0xbc,0x20,0xb2,0xc4,0x12,0xdb,0xc2,0x0b,0x63,0x70,0x6a,0x41,0x31,0x65,0x48,0xa0,0xfc,0xbc,0xd6,0x3f,0x55,0x18,0x17,0x65,0x35,0x58,0xe3,0x33,0xac,0xaf,0xca,0xb2,0x51,0xc1,0xcc,0x60,0x38 +.byte 0x94,0x8f,0x13,0xb8,0xcc,0x8c,0xc4,0x12,0xea,0xd5,0x39,0xd3,0x46,0x55,0x17,0x27,0x7a,0x07,0x01,0x02,0x74,0xa6,0xe7,0xc8,0xa7,0xd0,0x76,0xc8,0x5e,0x57,0x50,0xc5,0x19,0xf1,0x95,0xa3,0x52,0x10,0xa3,0x1e,0xcd,0xb1,0x05,0x64,0xe5,0x69,0xd9,0x5e,0xfc,0x71,0xef,0xe1,0xf6,0xb3,0xa7,0xf7,0xf9,0x71,0xfd,0xbb,0x5b,0x2b,0x7a,0xd2 +.byte 0x72,0x7c,0xc7,0x73,0x89,0xf7,0xe2,0x0b,0xcd,0x05,0x4f,0x0c,0x10,0xed,0xcc,0xda,0xb6,0x81,0x19,0xe6,0x2b,0x06,0x66,0xef,0xc5,0xfd,0xd5,0xc6,0x66,0x20,0x86,0x2a,0x4f,0x05,0x49,0xf1,0x54,0x4a,0x6e,0x1d,0xcd,0xad,0x18,0xeb,0x6c,0x58,0xd6,0x75,0x3e,0x62,0x48,0xab,0xea,0x1f,0x7f,0x05,0x45,0x6e,0x75,0x2a,0x5e,0x97,0x5b,0xde +.byte 0x5a,0x99,0x42,0xc1,0x62,0xab,0xc7,0x01,0x4d,0xac,0xd6,0xdc,0xc9,0x71,0x24,0xd1,0x33,0xe2,0x4b,0x1f,0x09,0x04,0x1f,0x0d,0x42,0x45,0xcf,0x7c,0xa0,0xee,0x48,0xfd,0x8b,0x1f,0xaa,0x50,0x48,0x6d,0x8e,0x34,0x76,0x09,0x23,0x8a,0x40,0x0d,0x5d,0xc1,0x2a,0xba,0x5f,0x9c,0x86,0xfb,0x37,0xdf,0x24,0xff,0x27,0x88,0xbf,0xf6,0xa4,0xc3 +.byte 0xf0,0xd3,0x02,0xa8,0x7c,0x6d,0xc4,0xc5,0x14,0xc3,0x64,0x28,0xa8,0x05,0x33,0xc2,0xda,0x12,0xfc,0xbe,0x0d,0x8e,0xf4,0xf5,0x48,0x5a,0x8e,0x8a,0xd2,0x50,0x7c,0xc0,0xbc,0xde,0xdb,0x9a,0xf6,0xa0,0x92,0x8d,0x19,0xbc,0x5a,0xdc,0xbf,0xfb,0x13,0x8f,0x41,0x09,0xba,0xd9,0x0b,0x91,0x7a,0xdb,0x92,0x10,0xac,0xf2,0xb5,0x76,0xb5,0x7d +.byte 0x80,0x04,0xd6,0xec,0x98,0x09,0x5f,0x63,0x0d,0x58,0x00,0x8a,0x07,0x76,0xfa,0xe6,0x6e,0xdf,0xbf,0x73,0xe5,0xc9,0xe5,0x12,0x44,0x58,0xf9,0x2e,0xb1,0xe6,0x2c,0xf5,0x0d,0x94,0xa9,0x51,0x0d,0x01,0x03,0xab,0x79,0xf9,0xee,0x7e,0x10,0x4b,0xcb,0x20,0xbb,0x01,0x19,0xd6,0x12,0xd1,0xac,0x96,0xe9,0x0e,0xde,0xbf,0x7e,0x80,0xf6,0x58 +.byte 0xc9,0xec,0xaf,0xf7,0x2d,0x98,0xbc,0x2b,0xb1,0xf1,0x34,0x94,0x39,0x8e,0xbc,0x13,0x13,0x41,0x8f,0xf3,0x4e,0x4e,0x6b,0x2a,0xaa,0xea,0x70,0x5c,0xf8,0x42,0xf7,0xbc,0xfd,0xbd,0x6f,0x62,0x1b,0xcb,0xb9,0x39,0xdc,0x6a,0x47,0x81,0xaf,0xff,0x5b,0x7e,0x80,0xb9,0xbf,0xfa,0x15,0x7e,0xd1,0xc3,0xb2,0x80,0x99,0xbd,0xb9,0x30,0x8d,0xb5 +.byte 0x43,0x6b,0x7a,0x31,0xaf,0x45,0xf7,0xdd,0x21,0x8f,0x54,0xb1,0xf6,0x2d,0x7d,0x96,0x63,0x4a,0x93,0x98,0x37,0x7f,0x48,0x02,0x4b,0x0f,0x71,0xe4,0x70,0xce,0x66,0x6a,0x36,0xde,0x58,0x84,0x69,0xd6,0xbd,0x1a,0x9a,0x8b,0xc5,0xda,0x97,0xc5,0xe1,0x4e,0xec,0x9b,0x7a,0x65,0xe0,0xa5,0xdd,0x39,0x3c,0x9f,0xfd,0x45,0x17,0x4c,0x2f,0xb4 +.byte 0xb1,0xb1,0x42,0xe8,0x88,0x75,0x9f,0xb4,0xc1,0xdf,0x44,0xf9,0x4f,0x9a,0xf7,0x3d,0x35,0xc5,0x32,0xbe,0x43,0xd0,0x0d,0x71,0x4e,0x21,0xbf,0x31,0x99,0x73,0x5a,0x84,0x45,0x2e,0x00,0x8b,0x42,0x2b,0x14,0x86,0x51,0xcb,0xa0,0x98,0xa9,0x68,0x8d,0xdb,0x58,0x3d,0x73,0x9d,0xf9,0x2d,0x86,0x76,0x62,0xcb,0x93,0x29,0x48,0x92,0x38,0xfb +.byte 0xeb,0x1d,0xda,0xc3,0x10,0x1f,0x32,0x68,0xee,0xcb,0xb7,0x8a,0xcb,0xcb,0xe0,0x37,0x31,0xe8,0xad,0x7b,0x4a,0x29,0x2c,0x10,0x9e,0xdf,0x86,0xeb,0x13,0x0c,0xab,0xa4,0x30,0x36,0xf0,0xe0,0xac,0x14,0x41,0xa4,0xf4,0xf8,0x44,0x95,0xe8,0x8f,0x28,0xc2,0x35,0x0a,0x44,0x61,0xc7,0x60,0xc5,0x3b,0xc4,0x1d,0x67,0xfd,0xac,0x0b,0x2e,0x49 +.byte 0x62,0xea,0x17,0x3c,0xf5,0x4b,0xbe,0xba,0xba,0x42,0x02,0x0d,0x13,0xf1,0x15,0xff,0x2e,0x47,0x46,0xd1,0x27,0x64,0xb7,0x35,0x28,0x31,0xb5,0xde,0x1e,0xf9,0x26,0x6c,0x04,0x3c,0x0e,0x06,0x9d,0x4d,0xc7,0x1c,0x97,0x67,0x2c,0x6d,0x36,0x0d,0x4c,0x61,0x08,0xe9,0xbd,0x04,0x1d,0x8d,0xfb,0x0c,0x03,0x3d,0xb4,0x40,0xd5,0x1b,0x69,0x3b +.byte 0x68,0xcf,0x46,0x27,0xcf,0xb3,0xda,0x1e,0xdc,0x85,0x6f,0x4f,0x6b,0x09,0x9d,0xe9,0x6c,0x73,0x40,0x27,0xc9,0x8b,0x12,0x97,0xea,0x34,0xd7,0x51,0x32,0x90,0x4e,0xd7,0x91,0x41,0x3a,0xee,0xbc,0x97,0xb0,0x4a,0x39,0xdb,0xe3,0xe5,0x12,0x73,0xbf,0x5d,0x68,0xe0,0xc6,0x7c,0x6f,0x0d,0x14,0x1c,0xaa,0xde,0x29,0xb7,0xc7,0xa5,0x90,0x62 +.byte 0xe9,0xc5,0x75,0x16,0xe6,0xc0,0x9d,0xc5,0xb8,0xd6,0xfa,0xb0,0x72,0xb7,0x27,0xa6,0xa8,0x3f,0xbf,0x18,0x8b,0xaa,0x94,0xb3,0x47,0x50,0x2f,0x1c,0x49,0xab,0x46,0x38,0x7f,0x3e,0xf3,0xf1,0xb8,0xb3,0x44,0xaa,0x1f,0x76,0xb4,0x67,0xff,0xcf,0x7c,0x4b,0xa9,0xe1,0x62,0x93,0x4d,0x3e,0x96,0xdb,0x56,0xf6,0x26,0x5d,0x95,0x4c,0xfa,0x5f +.byte 0x06,0x2b,0x5c,0x33,0x2d,0xf8,0xfa,0x68,0x8a,0xed,0x28,0x2a,0x6e,0x95,0x86,0x59,0x71,0xef,0x86,0x47,0x60,0xec,0x35,0x79,0xa9,0x98,0x2d,0x6e,0x20,0x26,0x3a,0x21,0xec,0x59,0x15,0x65,0xcd,0xb9,0x91,0x19,0x6e,0x74,0x89,0x3b,0x10,0x00,0xab,0x8a,0x45,0x23,0x20,0x94,0x03,0x02,0x77,0xb7,0xcf,0x9c,0x71,0x18,0x0c,0x5b,0x40,0x62 +.byte 0x3b,0x8f,0xc9,0xf6,0x4c,0x8f,0x60,0x66,0x05,0x87,0x05,0x90,0xd4,0x08,0x76,0xd7,0xa3,0xb6,0x37,0xa8,0x83,0x05,0xb2,0x48,0xe9,0x24,0xc4,0xfb,0x79,0xa1,0xce,0xac,0x29,0x13,0x4e,0x72,0xdf,0xad,0x9e,0x5b,0xcd,0x9c,0x39,0x1d,0x3e,0x57,0x9d,0xf2,0x96,0x13,0xa4,0x79,0x4c,0x76,0x40,0x03,0xb3,0x18,0xcf,0xd7,0x45,0x2a,0x2d,0x07 +.byte 0xe5,0x2e,0xb7,0x74,0xda,0x94,0xea,0x32,0x74,0xb0,0xca,0xf4,0xd1,0x09,0x97,0x3c,0x69,0x17,0xf6,0x5b,0x13,0x7b,0xb8,0xb1,0xd9,0x0e,0x12,0x44,0x29,0xea,0x26,0xd8,0xaa,0x9d,0x26,0x87,0x0c,0x89,0x4e,0xec,0x29,0x48,0x43,0x66,0x21,0x0b,0xab,0xce,0x40,0x57,0x4c,0xa7,0xdd,0x56,0xde,0xac,0x5c,0x62,0xea,0xc4,0x54,0x4a,0xe0,0x8d +.byte 0x54,0xc8,0x65,0x44,0xcc,0x6f,0x2a,0xcd,0x0e,0xb3,0xad,0xa3,0x30,0xd1,0xb7,0x19,0x70,0x51,0xd3,0x9a,0xcf,0xe5,0x42,0x6c,0xa1,0xc1,0x0f,0xe2,0xda,0x86,0xb4,0x51,0x50,0x62,0xdc,0x51,0x3f,0xd2,0xff,0xde,0x7f,0x38,0x5a,0xff,0x2d,0x21,0x1d,0x59,0xb9,0xdd,0xde,0x83,0x13,0xb0,0x25,0xf5,0xbb,0x11,0x47,0x4a,0xaf,0x81,0x15,0xa0 +.byte 0x39,0x5b,0x30,0x17,0x2b,0xbf,0x5a,0x03,0x60,0xb6,0xbb,0x86,0x9f,0x50,0x45,0x15,0x0b,0xba,0x42,0xf4,0x3d,0x05,0x62,0xcd,0x9b,0x8c,0xcf,0x93,0x5c,0x33,0x6c,0xea,0x4b,0xd0,0x1d,0x91,0x3e,0xbf,0xa4,0x9d,0x7c,0x2c,0x87,0x9c,0x42,0x9f,0x03,0x98,0x03,0x1b,0x98,0x66,0x4f,0x8f,0x29,0x12,0xc5,0xb5,0xec,0x81,0xf8,0xb2,0x5e,0x44 +.byte 0x4f,0xb0,0x31,0xe4,0x2a,0x73,0x83,0xac,0x5a,0x3f,0xfa,0xcf,0x8b,0x7c,0xa3,0xf1,0x01,0x14,0xa1,0xca,0x60,0x8d,0x6a,0x6c,0x04,0x31,0xcc,0xba,0x12,0xe0,0x4e,0xaf,0x01,0x8d,0xf5,0x60,0x23,0x79,0x8a,0x80,0xcc,0x32,0x31,0x69,0x83,0xb6,0x83,0xaa,0xd9,0x3b,0x86,0x4a,0xd8,0x10,0x28,0x09,0x82,0x36,0xee,0x6a,0xc0,0x80,0x3f,0xfd +.byte 0xb1,0xd2,0xde,0x34,0xf9,0x4c,0x87,0x5b,0xdd,0xd0,0xb6,0x2d,0x99,0x69,0xd3,0x2c,0xb7,0x0b,0xfc,0x16,0x88,0x7b,0x80,0x21,0xbc,0x30,0x7b,0x56,0xe5,0x7b,0x41,0x43,0x4d,0xaf,0x40,0x5e,0x74,0x14,0x17,0x66,0x32,0xd6,0x81,0x53,0x94,0x35,0xf0,0x0f,0x4f,0x99,0x54,0x9a,0x38,0xc0,0x2a,0xa9,0xd3,0x53,0xdd,0x9a,0xc5,0x29,0x18,0x62 +.byte 0xf6,0x93,0xa3,0x02,0xf0,0x13,0xcb,0xcb,0xcc,0x64,0x0b,0x00,0xf4,0x43,0x03,0x26,0xe6,0x2f,0x39,0xa1,0x83,0xea,0x94,0x2f,0xde,0x61,0xbd,0xe1,0xbe,0x08,0xf8,0xd4,0x01,0x6e,0x61,0x98,0x01,0x39,0x4b,0x93,0x39,0x38,0x34,0x58,0x24,0xc1,0xf5,0x03,0x05,0x15,0x9c,0xf0,0x30,0x20,0x24,0xd4,0x7e,0x73,0xb2,0x60,0x06,0x3b,0xd3,0xb7 +.byte 0x2c,0x47,0x17,0xc4,0x79,0x4e,0x45,0x0b,0x89,0xf0,0xfc,0x42,0xa0,0x0d,0x80,0xd2,0x44,0x36,0x70,0xaa,0x9e,0x72,0x85,0xa8,0xc8,0x1d,0x35,0x28,0xc3,0x5a,0x72,0x4c,0x06,0x6d,0xf4,0xae,0x54,0x86,0x9a,0x32,0x3c,0xa5,0x06,0x63,0xc1,0x37,0xbb,0xaf,0xa6,0xae,0xce,0x94,0xea,0x9c,0x4a,0x9e,0x56,0xb1,0xc3,0x84,0x84,0xef,0x3d,0xe9 +.byte 0x24,0xf4,0xbf,0xc3,0xf6,0x45,0x74,0x4e,0xbb,0x86,0xd3,0x7f,0xab,0x19,0xe3,0x63,0x67,0x81,0xb6,0x18,0xc8,0x78,0x8e,0xf8,0x83,0x5f,0xfb,0x2e,0x49,0x97,0x2b,0x34,0xbb,0x76,0x2e,0x93,0xec,0xe9,0x7f,0x4d,0x7e,0x52,0x0c,0x92,0xbc,0x6d,0x3a,0x34,0x9b,0x5e,0x61,0x6f,0xea,0x45,0xe7,0x5c,0x34,0x6b,0xcb,0xc0,0x31,0x61,0x64,0x9d +.byte 0xad,0x7f,0x98,0xca,0xfe,0x3d,0xad,0xf7,0x21,0xf6,0x4c,0x2a,0x21,0x07,0x80,0x25,0xa2,0xea,0x26,0x85,0xc3,0xb1,0x74,0x04,0x7f,0xd1,0x1c,0x1b,0xa5,0x7e,0x96,0x45,0xfe,0x6f,0xa6,0x34,0xdf,0x94,0x1f,0x7e,0xfb,0xcf,0xfd,0x29,0xeb,0x3a,0xb0,0xfc,0xb6,0xd5,0x80,0x8b,0x37,0x71,0xfb,0x70,0x19,0x30,0xc4,0x6f,0xa0,0x5b,0xae,0x5b +.byte 0x75,0x51,0x98,0x89,0x9e,0xf0,0xf5,0x79,0xaf,0x1c,0x07,0xb6,0x5e,0xcf,0x34,0x70,0x0f,0x0b,0xbc,0x0a,0xa6,0x40,0xc7,0xf8,0xe4,0xef,0xe6,0xb7,0x94,0x6e,0x98,0x75,0x22,0x73,0x5c,0xca,0xcc,0xfb,0x09,0x2f,0x9c,0xfe,0x49,0x0f,0xd3,0x65,0xfe,0xd4,0xf0,0x9b,0xeb,0x8c,0xd7,0x8c,0xff,0x4b,0x18,0x3e,0xf3,0x9d,0x3f,0xf5,0x83,0xd6 +.byte 0x1d,0x3d,0x23,0x79,0x0f,0xae,0x17,0x62,0x33,0x07,0xc3,0xac,0x98,0x07,0x72,0x9b,0xd9,0x26,0x5c,0x1a,0x9d,0xf1,0x35,0x92,0xf9,0x38,0x17,0xf8,0xee,0x26,0xf9,0x64,0xfc,0x5e,0x8b,0x80,0xce,0xdb,0x64,0xf7,0xde,0x20,0x19,0x5c,0x26,0xf6,0x23,0xd6,0x99,0x8e,0x75,0x77,0x3d,0x17,0x0f,0xea,0x31,0x5a,0x65,0x32,0x1b,0x78,0x78,0xe4 +.byte 0xfe,0x76,0xf8,0xa7,0x81,0x34,0xf1,0x2a,0x13,0x22,0xe4,0x8a,0xe1,0x42,0x5a,0x3f,0x44,0x22,0xeb,0x7e,0xcd,0x20,0xcd,0xf7,0x44,0x1a,0x87,0xb9,0x7a,0x0e,0xf8,0xcb,0xb5,0x0a,0x1f,0x6a,0xe6,0x0b,0x70,0x59,0x38,0xa3,0x6b,0x64,0x7b,0x61,0xfe,0xbd,0xa4,0xb7,0x89,0x7a,0x28,0x70,0xfe,0x9d,0x64,0x2c,0xe9,0xc4,0xc9,0x2f,0xc8,0x3e +.byte 0xfa,0x70,0xce,0x21,0x9b,0xa8,0x10,0x6a,0x16,0xdd,0x28,0xce,0x4e,0xd4,0x6c,0x8c,0x47,0x83,0x13,0x8b,0xec,0x1c,0x76,0xdc,0x4d,0x81,0x25,0x08,0xd8,0xf9,0xde,0x66,0x1d,0xe2,0xf3,0xe7,0xdc,0x3e,0x3c,0x6b,0x98,0x25,0x55,0x88,0xe8,0xda,0x7f,0x16,0xe5,0x7d,0xad,0x8a,0x36,0x00,0xf0,0x68,0xc5,0xe4,0xfc,0xe9,0xe3,0x54,0xeb,0x4c +.byte 0xd1,0xff,0x07,0x1a,0x5c,0x5e,0xd4,0xb1,0xff,0x7d,0xfc,0x5b,0x34,0x42,0x95,0x89,0x01,0x24,0x8e,0x30,0xec,0xfe,0x67,0xf8,0xe2,0xaa,0xd5,0x6a,0x9f,0xe3,0xc3,0xa5,0x53,0x7f,0xd3,0xf4,0x98,0xa5,0x47,0x11,0xad,0xac,0xea,0xba,0x20,0x34,0x03,0x65,0x8c,0xec,0xb6,0xa3,0x2b,0xf6,0x93,0xe1,0xc8,0xad,0x34,0x30,0x8f,0x0e,0x3b,0xf6 +.byte 0x63,0xc6,0x58,0xc3,0xe8,0xa3,0x85,0xf8,0x24,0x8e,0x21,0xb9,0x36,0x7c,0xe0,0x11,0x64,0x31,0x6a,0x6a,0xa2,0xad,0xd3,0x94,0xbb,0x13,0x5b,0xb4,0xe9,0xee,0x09,0xdc,0xfe,0xb2,0xad,0xa8,0x43,0x02,0xba,0x85,0x1f,0x56,0xcb,0xb5,0x95,0x32,0xcc,0x7e,0xe0,0x00,0xde,0xfa,0x3f,0x91,0x71,0xde,0x21,0x19,0xff,0xc9,0x97,0x43,0x95,0xd8 +.byte 0x0d,0xc2,0x8a,0xde,0xcc,0x34,0x48,0xf4,0x35,0x41,0xb8,0x56,0x52,0xce,0x06,0xb3,0xcf,0xd4,0xae,0x7a,0xcb,0xe9,0xed,0x37,0xd6,0x76,0xa0,0x77,0x04,0xfb,0xb7,0x41,0x25,0x38,0xe1,0xd1,0xb5,0xde,0x21,0xe0,0x64,0xd8,0x83,0x13,0x7b,0x4b,0xb8,0xc9,0x12,0x02,0x51,0x56,0x52,0xe9,0x1c,0x49,0x48,0x83,0xd0,0x99,0x73,0x60,0x4a,0x4c +.byte 0x7d,0x8d,0x43,0xf9,0x06,0xa4,0xbb,0x0e,0xb6,0xdd,0x5f,0xc7,0x5e,0x35,0xcb,0xa0,0xc1,0x66,0x4a,0xe3,0x4a,0xa9,0xec,0xa4,0x5a,0xd7,0xd6,0xea,0xa5,0x20,0xa6,0xc3,0x1b,0xc0,0xa8,0xd1,0xf1,0x08,0x05,0xab,0x40,0x14,0x35,0xf2,0xdd,0x0f,0xc5,0xda,0xb3,0xa6,0xb1,0x07,0x36,0x17,0x5d,0xe9,0x96,0x23,0x96,0x46,0xd4,0xa7,0x71,0x64 +.byte 0x13,0x72,0x4e,0x83,0xe0,0x65,0x40,0x41,0xaf,0xb6,0x5b,0x00,0xa2,0xab,0x09,0x7f,0xa5,0xd5,0xc2,0xd9,0xc0,0x68,0x2a,0x44,0xdc,0x43,0x37,0x81,0xb8,0x88,0x4c,0x85,0x1b,0xb1,0x83,0xb2,0x56,0xa3,0x91,0x0f,0xa6,0x70,0x3f,0xbd,0xe9,0xda,0x40,0x9b,0xf5,0x9e,0x53,0xed,0x5f,0x84,0x70,0xd2,0x4c,0x1c,0xb6,0x87,0xd6,0xbb,0x3b,0xec +.byte 0xe5,0x35,0x1b,0x2c,0x9b,0xf1,0xe5,0xf8,0x0e,0x07,0x98,0xcc,0x58,0x38,0x57,0x74,0xdb,0x0e,0x08,0xd9,0x56,0xe8,0x08,0x63,0x3d,0x94,0x4a,0xdc,0x59,0xfc,0x3d,0xc1,0xa4,0x36,0xc3,0xe8,0xbe,0x4b,0xd7,0x47,0x69,0x33,0xb8,0x72,0x30,0x59,0x28,0x4e,0xf1,0xc1,0x25,0xa3,0xa4,0xe3,0x12,0xcf,0x31,0xf6,0xf8,0xae,0x31,0x06,0x76,0x92 +.byte 0x64,0x87,0x8e,0xb0,0x9f,0x1d,0xf4,0x56,0x73,0xc5,0x5d,0xbb,0x80,0x0d,0x19,0x3f,0x56,0x8c,0xe4,0xd6,0x8a,0x9a,0x62,0x26,0x4e,0x8a,0x21,0x7d,0x72,0x34,0x87,0xb6,0x7e,0x49,0xdc,0xfd,0x27,0x95,0xba,0x25,0xdd,0xf4,0x58,0x2b,0x11,0x3f,0xd1,0xd7,0x13,0x1d,0xb0,0xec,0xe2,0x55,0x5e,0x72,0xea,0x36,0xc9,0xd8,0x61,0xc0,0xee,0xc4 +.byte 0x9f,0x35,0x7e,0x73,0xd3,0xf6,0xd7,0x6a,0xce,0xd6,0xd2,0x80,0xe6,0x10,0x4b,0x65,0x18,0x6f,0xab,0xd3,0x41,0xbb,0x39,0x36,0x95,0x84,0x3c,0x99,0x9a,0xfd,0xf0,0xa3,0x46,0xdf,0x48,0x7c,0xd5,0x57,0x9d,0x10,0x59,0xca,0x70,0xc4,0xb5,0xbe,0x47,0x9e,0xca,0x2b,0x49,0x54,0xbb,0x34,0x8e,0x39,0xf4,0xf8,0x8c,0xa5,0xa1,0xab,0xf6,0x51 +.byte 0xd8,0x22,0x9a,0xd5,0xc2,0x12,0xf8,0x26,0xc6,0x19,0x2a,0xa6,0x6e,0xab,0xd3,0xac,0xd1,0x21,0x97,0x67,0x3e,0x39,0x90,0x5c,0x37,0x65,0x7b,0x06,0x54,0x1a,0xb8,0x2a,0x56,0x02,0xa3,0x92,0xee,0xf3,0x38,0x53,0x25,0x4d,0x5d,0x0a,0x37,0x9e,0xbb,0xf4,0xb2,0x13,0x77,0xbb,0x93,0xa9,0x85,0xf2,0x15,0xfd,0x71,0x17,0x00,0x89,0xe7,0x7b +.byte 0xa9,0xdc,0x10,0xd9,0xc7,0x44,0xa5,0x7b,0x3f,0x2f,0x1e,0x6d,0xa7,0xfe,0x0c,0x0e,0x83,0x3e,0x38,0x27,0xa7,0x4e,0x85,0x3c,0x84,0xfe,0x95,0x48,0x85,0x09,0x75,0x62,0x1d,0xa4,0x64,0x54,0xed,0x89,0xd5,0x28,0x62,0x52,0x18,0xef,0xf0,0x57,0x05,0x30,0xf0,0xce,0x87,0x05,0x0d,0x81,0xe8,0x2a,0x3c,0x8c,0x22,0xe1,0x4b,0x32,0x42,0x9d +.byte 0x02,0xc5,0xe4,0x6a,0xa4,0x4d,0x9b,0xc4,0x82,0x47,0xdc,0x61,0xbd,0x82,0x01,0xcd,0x5e,0x64,0x9f,0x4c,0xe3,0x31,0xe9,0x48,0x53,0x85,0x07,0xc7,0x47,0x49,0x35,0xd8,0x6a,0xab,0x4f,0x73,0x3f,0xd3,0xde,0x87,0x29,0xac,0xbc,0x35,0x0a,0xb4,0x74,0xc2,0xa7,0x0b,0xb1,0x93,0x92,0x29,0x3b,0x3e,0xa8,0xde,0x12,0x49,0x75,0xda,0x16,0x27 +.byte 0x52,0x2f,0x93,0x23,0xd6,0xf7,0x10,0xfe,0x1e,0x93,0x97,0x06,0x9d,0xef,0x4f,0xe4,0x3d,0x5d,0xde,0x30,0x70,0x3d,0x78,0x3a,0x30,0x00,0x9b,0x77,0x12,0x90,0x62,0xda,0x32,0x9b,0x6a,0x47,0xd7,0x0f,0xee,0x75,0x18,0xdd,0x4d,0x8a,0xe2,0x35,0x5b,0x60,0xb8,0xf9,0xa4,0x6c,0x93,0x3e,0x47,0x23,0xed,0x7a,0xe2,0x58,0x42,0xd6,0x3f,0x90 +.byte 0xc0,0x12,0x38,0x8b,0x70,0xe0,0xf8,0x1a,0xb5,0x8d,0xe1,0x39,0xdf,0x93,0x25,0x72,0x2e,0xa9,0x3f,0x58,0x12,0x40,0xc4,0x92,0x46,0x08,0xf0,0x64,0xdd,0x34,0x42,0xfe,0x74,0x35,0x0c,0xda,0xef,0x06,0x0b,0x33,0x59,0xd9,0xee,0x4c,0xf9,0x02,0x3a,0x93,0x40,0xa3,0x99,0x0e,0x64,0x11,0x2f,0x52,0x9d,0x28,0x4d,0xe8,0x45,0xd0,0x22,0xd7 +.byte 0x8f,0xd6,0x28,0x8c,0x0e,0x18,0x87,0x24,0xf9,0x88,0xd2,0xc0,0xe8,0xd4,0x9d,0xa2,0x5a,0x79,0x83,0x37,0x18,0x84,0x12,0xca,0xc7,0x10,0xd5,0x5a,0xa8,0xe5,0xa8,0xe7,0x79,0xb6,0x2c,0xb3,0x90,0x6c,0xc5,0xa4,0x99,0x1b,0x85,0x29,0x78,0x0b,0x09,0x77,0x05,0xf4,0x23,0x79,0x5c,0x91,0xf3,0xe0,0xe4,0x6f,0x82,0x33,0x4e,0xa2,0x2e,0xa2 +.byte 0x65,0x79,0xad,0x98,0x36,0x34,0x72,0x97,0xd7,0x39,0x89,0x5e,0x82,0x9f,0x4c,0xe2,0xea,0x51,0x85,0x62,0x0c,0x39,0xf6,0xdc,0xc6,0x80,0x48,0xcf,0x98,0x93,0x64,0x7d,0xf9,0x63,0xf4,0xf5,0x18,0x2a,0xb6,0x04,0xb7,0x44,0xc4,0x60,0xc0,0xcf,0x3d,0x88,0xa8,0xb6,0x81,0xa3,0x99,0x2a,0xf0,0x1a,0x8d,0x76,0x20,0x1d,0xcc,0x10,0x50,0x58 +.byte 0x09,0xf9,0xda,0x65,0x60,0xc3,0xb1,0xc1,0xc0,0x4d,0x62,0x52,0x22,0x45,0x32,0xbc,0x11,0x93,0x15,0xb6,0x25,0x8f,0x65,0xa0,0x4c,0x88,0xc9,0x83,0xe1,0x5c,0xbb,0xfb,0x1a,0xab,0xdb,0x35,0x40,0x66,0xc0,0x2f,0xdc,0xf5,0x92,0x08,0x4c,0xc7,0xb8,0x49,0x05,0xe0,0xe1,0x61,0x2b,0xde,0xc7,0x6a,0x04,0x05,0x4d,0x9f,0xe9,0x59,0x22,0x56 +.byte 0x63,0x77,0x9d,0xe3,0x1e,0x36,0xdf,0x87,0x4a,0xeb,0xba,0x42,0x3d,0x1b,0xa5,0xd0,0xc5,0x44,0x07,0xbe,0x37,0x37,0x70,0x10,0x2d,0x02,0x9b,0xf6,0x52,0xf3,0x54,0x6d,0x50,0xdb,0xdb,0x57,0x01,0x0b,0x9b,0xd5,0x99,0x99,0x69,0x9b,0x10,0x76,0x48,0xea,0x28,0x27,0x06,0x30,0x63,0x3b,0xdf,0x06,0x30,0x37,0x28,0x75,0xcf,0x9c,0xe7,0x52 +.byte 0x43,0xe2,0xd5,0x7b,0xfa,0x88,0x98,0x9c,0x3e,0x27,0x30,0x21,0xcc,0x11,0x71,0x14,0x24,0x04,0x1a,0x8c,0xe9,0xfe,0x2f,0x9d,0xec,0xb1,0x10,0x33,0x05,0x31,0x01,0x1b,0xde,0x6b,0x30,0x20,0x6d,0xf4,0x7c,0xbf,0x41,0x04,0x5f,0xb9,0x9c,0x24,0x63,0x74,0x98,0x3e,0x60,0xc7,0xf1,0xb1,0xc6,0x94,0xf3,0x6f,0x95,0x24,0xdf,0x97,0xd5,0xc7 +.byte 0x50,0x19,0xaf,0xa5,0xae,0x51,0xde,0x6d,0x44,0x0c,0x90,0x72,0x11,0x82,0x04,0xf9,0xda,0x17,0xd8,0xf3,0x03,0xf2,0x03,0x3f,0x65,0x7f,0xd7,0x66,0x84,0x9a,0x02,0x90,0x2b,0x65,0x00,0xd9,0x9c,0xfb,0xaa,0xe2,0xde,0x5f,0x1e,0x19,0x1e,0x6d,0x20,0x1e,0x01,0xf1,0xca,0x7b,0x90,0x06,0x96,0x1d,0x7a,0x34,0x0c,0x66,0x57,0xd7,0x61,0x1f +.byte 0x74,0x03,0xcb,0xae,0xea,0xaf,0x65,0x8e,0x32,0xbe,0xb8,0xe6,0xd8,0x6d,0xf7,0x51,0x6d,0xec,0x7e,0xc6,0x9d,0x20,0x01,0xbf,0xd7,0xbc,0xcb,0x34,0x7c,0xe5,0x1f,0x92,0x72,0x2f,0x6f,0xa3,0x1f,0xe8,0x4d,0x7e,0xa5,0x85,0x3b,0xed,0xc7,0x25,0x53,0xe3,0x77,0x90,0x1f,0xda,0xb7,0x48,0x7d,0xbe,0x20,0x48,0x9f,0xb4,0x05,0x5d,0x41,0xc5 +.byte 0x48,0xd0,0xc9,0x83,0xbe,0xf8,0xd8,0x6b,0x0d,0x26,0x66,0x2e,0xef,0x6b,0x13,0x58,0x6b,0x5f,0x0e,0x8b,0x4e,0x57,0xb2,0x6b,0x3d,0x4d,0xcd,0xcb,0x9a,0x9b,0xda,0x4d,0x7f,0xea,0x17,0x06,0x7f,0xcd,0xaf,0x18,0xda,0x3d,0xf0,0x30,0x2e,0xbb,0xc2,0x1d,0xcf,0xde,0xf7,0xee,0xda,0xd6,0x3d,0x75,0xcf,0x19,0xcf,0xfc,0xdf,0x7a,0xb6,0x1f +.byte 0x89,0xf5,0x0c,0xe9,0xd5,0xf1,0xd0,0x40,0xbd,0xae,0xb5,0x16,0xf6,0x05,0x1e,0xba,0xcd,0x18,0x80,0x4a,0xb3,0x87,0x93,0x6b,0x19,0xfc,0x47,0xa8,0x45,0x4b,0x75,0xe8,0x06,0xc0,0xbd,0x86,0xf7,0xcf,0x2c,0x39,0xc6,0x0b,0x3f,0x32,0xcd,0x1c,0x02,0xec,0x4b,0xd5,0x90,0x84,0xaf,0xc9,0x5c,0x9e,0x64,0x82,0x13,0x81,0x05,0x03,0xe4,0xed +.byte 0x48,0x23,0xc3,0x53,0x2c,0x5a,0x22,0x0a,0x27,0x7e,0x55,0x79,0xdc,0x46,0xf5,0x4b,0x04,0xcc,0x43,0x87,0x6c,0xb5,0xa4,0x2d,0x78,0x70,0x02,0x43,0x0e,0x76,0x62,0x99,0x86,0x40,0x2a,0xe4,0x62,0xe6,0xee,0x4e,0x03,0x64,0x83,0x9c,0x38,0x6d,0x62,0xa6,0x85,0xb8,0xce,0xd7,0xf8,0xcb,0x78,0x00,0x7a,0x48,0x72,0x75,0x4e,0x9c,0x6f,0x0c +.byte 0x61,0xc7,0x93,0x4e,0x6d,0x65,0xa3,0x1b,0x17,0x84,0xc6,0xd2,0x29,0xc3,0x4d,0xe3,0x14,0x21,0x5f,0x9e,0xa9,0x28,0x11,0xf3,0xb2,0xe8,0xe7,0x60,0x9e,0x24,0xab,0x88,0x9c,0x9c,0x5e,0x17,0xe4,0xe1,0xa7,0x74,0xb4,0x82,0xd5,0xaa,0x92,0x08,0xa7,0xa2,0x04,0x6f,0x77,0x14,0x54,0x44,0x5d,0x13,0x10,0xa2,0x40,0x1d,0xf0,0x44,0x16,0x17 +.byte 0xda,0x8c,0x80,0x83,0x2b,0x19,0xb8,0xab,0xf2,0xb8,0xb1,0x92,0xb5,0xc5,0x05,0x3e,0xd2,0x1a,0xfc,0xfd,0x21,0xa6,0xb2,0xbd,0x89,0xee,0x9c,0x3c,0x90,0xd9,0xf1,0xd2,0xe8,0xc3,0x21,0xb9,0x0e,0x0c,0x98,0xbc,0x5e,0xa1,0x0d,0x89,0xfe,0x0f,0x3c,0x45,0xea,0xe1,0x6e,0x06,0x59,0xff,0x79,0xf4,0x7e,0xf4,0x82,0xc0,0x6b,0xd9,0x53,0x30 +.byte 0x98,0xed,0x8d,0x6f,0x3d,0x0e,0xfb,0x42,0x66,0xab,0x41,0xa8,0x4a,0xef,0x73,0xa4,0x54,0x99,0x4f,0xb6,0x65,0x44,0xf9,0xd9,0x3c,0x6b,0x59,0x36,0xb0,0xe3,0x7c,0x4a,0x85,0x80,0x6c,0x77,0x6f,0x34,0x4e,0x9e,0x54,0xfd,0x0c,0x25,0x72,0xc3,0x5a,0xb6,0x3b,0xad,0x2b,0xd5,0x29,0x55,0x31,0xab,0x62,0xe4,0x15,0xed,0xef,0x16,0xef,0x43 +.byte 0xd5,0xdd,0x3d,0x64,0x8c,0x13,0xbc,0xcd,0x4d,0xfb,0x4f,0x86,0x3b,0x73,0x1e,0xc4,0xe8,0x54,0xb4,0xcc,0x49,0xba,0x4f,0x81,0xcd,0xe8,0x30,0x92,0x4b,0x57,0xd1,0x7c,0x0c,0x65,0x7d,0xe1,0x59,0xc6,0x8c,0x7d,0xad,0xd5,0xcf,0x6c,0xc4,0x9d,0xc5,0x3f,0x23,0x1f,0xb0,0x6d,0x1c,0x07,0xbf,0x38,0xc9,0x16,0xdc,0x5b,0x51,0xa1,0xdb,0x8f +.byte 0xf8,0x25,0xc6,0x4d,0xc0,0x4d,0xa1,0x02,0xd9,0xd3,0xb5,0x63,0xda,0xe1,0x91,0x60,0x71,0x39,0x46,0x1a,0x13,0xe0,0xf2,0xca,0xcc,0xd3,0xbb,0x6b,0xd0,0x64,0xaa,0x0e,0xc0,0x89,0xa3,0xc6,0x14,0x56,0xe4,0x44,0x97,0xa9,0xcc,0x17,0x68,0xe6,0xfc,0xe5,0xfd,0xf0,0xa6,0x69,0xcd,0xac,0x20,0xc7,0xeb,0x53,0x1b,0x4f,0xdd,0xd3,0xb0,0xed +.byte 0x30,0x4e,0x36,0x73,0x63,0xef,0x51,0x3e,0x9a,0x3e,0x41,0x2b,0x9c,0xda,0x67,0x96,0x46,0x33,0xe3,0x3f,0x87,0x01,0xd8,0xc5,0x26,0x80,0xe4,0x7e,0xf4,0x78,0x8c,0x2b,0x81,0x2a,0x01,0x7c,0xe3,0xfc,0x8d,0x6b,0xdc,0x84,0xb9,0xff,0x43,0x37,0x57,0xce,0x3f,0x5e,0x63,0xd3,0xbe,0xb6,0x4a,0x31,0xbf,0xb8,0x74,0x64,0x9c,0xf3,0xc5,0x8a +.byte 0xae,0xe8,0x5f,0x68,0xcf,0xce,0xff,0x3f,0xc5,0xb5,0xfd,0x13,0x08,0x11,0x9d,0x1a,0x0f,0x06,0x08,0x4d,0x7c,0xf9,0xd4,0x20,0xdf,0x82,0xf9,0x86,0xfc,0xf3,0x67,0xa0,0x14,0x99,0xe5,0x47,0xf0,0x02,0x7b,0x16,0xca,0xcf,0xb9,0x0f,0x68,0x08,0x5d,0x1d,0x65,0xee,0x23,0x56,0xeb,0x11,0x5b,0xca,0xf1,0xa7,0xad,0x50,0xb2,0xd1,0x37,0x65 +.byte 0xe9,0x7e,0xf6,0xe9,0x64,0x42,0x49,0x80,0x40,0x17,0xe3,0x43,0x00,0xda,0xe1,0x7a,0x1c,0xb3,0xde,0xd9,0xf7,0x33,0xeb,0xb3,0xb8,0xf5,0x40,0x1b,0xcd,0x71,0x97,0x30,0xf9,0x9c,0x4d,0xac,0x7e,0x8e,0xd9,0x36,0x92,0x39,0xb5,0x56,0x0f,0x4f,0xbf,0x58,0xb8,0xba,0xc3,0xbd,0x79,0xb0,0xd7,0x6c,0x45,0x49,0xe2,0xde,0x94,0x04,0x9d,0x3e +.byte 0x91,0x0a,0xb2,0x9b,0x90,0x57,0x2e,0x69,0xa4,0x4f,0x61,0xbf,0xdb,0xfb,0xe3,0xe9,0x81,0x26,0xe0,0x48,0x90,0x8c,0x32,0x95,0x8d,0x38,0xec,0x8e,0xa7,0x5e,0xc3,0x36,0xc6,0xd1,0xbc,0x9a,0xb3,0xba,0xdb,0x2c,0xe4,0xa0,0x50,0x74,0xef,0x98,0x48,0x14,0xc9,0x38,0x4d,0xa9,0x48,0x13,0xd4,0x08,0x60,0xfd,0xcf,0x5e,0xf2,0xcd,0xc7,0xeb +.byte 0xaf,0x88,0x32,0x30,0x6f,0x19,0x01,0xec,0x87,0xae,0x6d,0x63,0xa3,0xa7,0x7b,0xcd,0x53,0xa7,0xf2,0xf2,0x9f,0x43,0xcb,0x0a,0x3f,0x8c,0xd2,0x55,0x8d,0xa7,0x95,0xcf,0x5b,0xae,0x64,0x23,0xda,0xb4,0xbd,0x32,0x34,0x95,0x8a,0x03,0xe7,0x6e,0xef,0x3f,0xb4,0xcf,0xc6,0x8a,0x2f,0xc6,0x59,0x99,0xdf,0xad,0x3c,0x15,0xed,0x83,0x0b,0x59 +.byte 0x8b,0xcd,0x0d,0xa6,0xcf,0x3a,0xc3,0xdb,0xc3,0x01,0xa9,0x32,0x38,0x45,0x5c,0xc8,0x56,0x81,0xef,0x21,0x7f,0x52,0xc4,0xb5,0x48,0x97,0x6a,0x60,0x75,0x3a,0x1a,0xd3,0xb0,0x60,0x9a,0x83,0x61,0xad,0x3b,0x4b,0x65,0xaa,0x9e,0x77,0x47,0x6f,0x3b,0x48,0xb0,0xc6,0x36,0x9a,0x59,0x5e,0x26,0xc4,0xb9,0xed,0x04,0xf3,0xc7,0x09,0x33,0xda +.byte 0x81,0x63,0xa6,0x5d,0xe1,0x54,0x6b,0x04,0x17,0x2b,0xb9,0x2f,0xbd,0x55,0xdb,0xa1,0x69,0x00,0xcd,0xba,0xfa,0x36,0xaa,0x47,0x5a,0x7c,0xf4,0x1f,0x53,0x94,0x95,0x2f,0xf8,0x2a,0x4b,0xa8,0xcc,0x73,0xab,0xfd,0x25,0xb2,0x4e,0xd6,0x62,0x90,0x8c,0x8f,0x02,0xe4,0xdc,0x22,0x79,0x04,0x34,0x9b,0x54,0x5c,0x54,0xca,0x9b,0x8a,0xf8,0x05 +.byte 0xd1,0xb0,0x9e,0x8f,0xa3,0x0b,0x53,0xa8,0x6f,0x1b,0x2e,0xf2,0x71,0x78,0x28,0xce,0xa9,0xdb,0x4c,0x5b,0x83,0xfe,0xaa,0xff,0x99,0x2f,0x03,0x14,0xb2,0xe0,0x5f,0xaa,0x65,0x15,0x1f,0xd2,0x31,0x95,0x70,0x3c,0x8b,0x55,0x8e,0x87,0xed,0xbb,0x0c,0x91,0x87,0xaa,0xbe,0x49,0xdb,0x18,0x7b,0x1d,0x26,0xa7,0xdf,0x00,0xff,0x73,0x70,0x2e +.byte 0x10,0xaf,0x46,0xea,0x7f,0xca,0xfa,0x09,0x13,0x02,0xac,0x3f,0xa0,0x02,0xa6,0x67,0xb7,0xec,0x18,0x73,0x91,0x25,0xa0,0x28,0xe3,0xd8,0xfa,0x11,0x6d,0x34,0x79,0x1d,0xe4,0x8f,0x7c,0x73,0x66,0x77,0x3e,0x43,0x23,0xb0,0xee,0x84,0xb5,0x75,0xc9,0x23,0x87,0x6a,0x4f,0x59,0x3d,0xb5,0xf1,0xd6,0x06,0xf8,0xa6,0x5d,0x0c,0x24,0xed,0x94 +.byte 0xd7,0xa8,0x31,0x37,0x10,0x60,0xb6,0x03,0x33,0x27,0x38,0xdd,0xd3,0x74,0x02,0xa3,0xa6,0x01,0x94,0xa9,0x56,0x11,0x23,0x0e,0xdb,0xfd,0x25,0x92,0xa8,0xfb,0x79,0xc8,0x8e,0x0e,0x10,0x1f,0xca,0x95,0xf6,0xad,0x28,0xe7,0xaa,0x2b,0xf1,0x40,0xf6,0xef,0x7b,0x40,0x28,0x57,0xbb,0x4c,0xac,0x0b,0x8b,0xb3,0xe3,0xec,0x53,0xf2,0x15,0x61 +.byte 0x2e,0x91,0xdf,0x91,0xfb,0x55,0xb6,0x7f,0x6c,0xfc,0xb7,0x4b,0x91,0xdc,0xf7,0xe5,0x91,0xd8,0x70,0x92,0x94,0xea,0x3f,0x62,0x98,0x14,0xc3,0x43,0x34,0x02,0x87,0xc7,0xca,0x60,0x4a,0xfb,0x50,0xe4,0xa9,0x92,0x10,0x04,0x7c,0x55,0xd3,0x9a,0x89,0xba,0x8e,0x6f,0x02,0xd6,0xc7,0x6f,0x91,0xb5,0x87,0xb9,0x0e,0xbe,0xe4,0x9f,0x01,0x0b +.byte 0x20,0x60,0xc8,0x16,0xe6,0x23,0x1d,0x5f,0x4d,0x82,0xf4,0x42,0x25,0xe6,0x05,0xe3,0x5b,0xbb,0xd1,0xb0,0xad,0x0b,0x05,0x71,0x3a,0x7b,0xee,0x0e,0xe1,0xe4,0x08,0x9f,0xda,0xdf,0x59,0x57,0x4f,0x05,0x5a,0x51,0x9a,0x60,0xfd,0x85,0x21,0xd1,0x0a,0x3b,0x0a,0x15,0x61,0x28,0x98,0x0a,0x8f,0x1e,0x33,0x15,0xb3,0x5f,0xf3,0xbb,0x89,0x22 +.byte 0x0c,0xaf,0x91,0xce,0x44,0xb1,0x54,0xd0,0x80,0x86,0x43,0xa1,0xb9,0x07,0xde,0xab,0x1f,0x9b,0xae,0xef,0x07,0xf2,0x40,0x33,0x31,0x4d,0xf9,0x45,0x97,0xf6,0xcc,0xe5,0x3c,0x49,0xcd,0x83,0x6e,0x38,0x81,0xab,0x40,0x18,0xda,0xf6,0xfe,0xe7,0x96,0xd1,0x17,0x98,0xae,0xec,0xe9,0x93,0x37,0xbc,0x0b,0xa8,0x12,0xe7,0x65,0xca,0x27,0x37 +.byte 0x6a,0x74,0x81,0xf1,0xe0,0x6c,0x0d,0xba,0x86,0x48,0x94,0xd0,0x72,0xd5,0x4d,0x71,0xcf,0xa8,0x5e,0xd1,0x97,0xd1,0xed,0xf0,0xd3,0xe4,0xe3,0x41,0xc9,0x8f,0xfc,0x89,0xe8,0xbf,0x96,0x8b,0x86,0xb0,0x97,0x79,0x95,0xdf,0x69,0x56,0x6d,0x61,0x0a,0x37,0xcb,0x36,0xe1,0x95,0x88,0xf5,0xf0,0xe2,0x5c,0xb2,0x44,0x73,0xda,0x83,0xa7,0xdc +.byte 0x8b,0x35,0x3e,0xc1,0xd5,0x88,0x17,0x3b,0xeb,0xcf,0x36,0x9c,0xef,0x40,0xb2,0x72,0xde,0x4f,0x16,0x6c,0x8c,0x9d,0x15,0xce,0x7d,0x0d,0xc3,0x2f,0xea,0xab,0x50,0xdf,0x02,0xe0,0x24,0xcc,0xf4,0xa7,0x25,0xba,0x85,0x0d,0x62,0x9a,0x39,0xc7,0x5a,0xd1,0x9a,0xd1,0xa7,0x45,0x5f,0xc2,0x44,0xf5,0xa9,0x8d,0xd8,0xbc,0xd3,0xc8,0x75,0x0d +.byte 0x06,0xc6,0x4b,0x24,0xc6,0xe5,0x72,0xf7,0xd5,0x87,0xca,0x3c,0xc0,0x1c,0x18,0xa9,0x40,0xc6,0x7b,0xe5,0x4c,0xe6,0xb7,0x01,0x57,0xc1,0xcf,0x63,0x83,0x58,0x63,0x47,0xcf,0xa4,0xd3,0xf6,0x1d,0x2c,0xbf,0x17,0xe6,0x0a,0x7b,0x2d,0xa9,0x34,0x23,0xfc,0x1f,0x06,0x31,0x47,0x7b,0x31,0x34,0x8c,0x3c,0x15,0x9b,0xac,0xfd,0x38,0xe6,0xa3 +.byte 0x9e,0xa7,0xdf,0xa6,0x37,0x61,0xfd,0x85,0xb8,0x2e,0x67,0x73,0x7f,0x60,0x12,0x8b,0x62,0xb0,0x38,0xd0,0xaa,0xc4,0xad,0x3b,0xa9,0x04,0x66,0xdd,0xbb,0x9c,0xb1,0x95,0xe1,0x9c,0x0a,0x72,0x80,0x12,0xaa,0xa8,0x0c,0x3f,0x90,0x20,0x33,0xb4,0x76,0xdd,0x26,0xfe,0x1e,0x8f,0x6a,0x2d,0xea,0x4a,0xdc,0x28,0x47,0x66,0x36,0x5b,0x50,0x60 +.byte 0x7e,0x3e,0x93,0xf3,0xe9,0x37,0x31,0x3b,0x43,0x46,0x85,0xb3,0xa9,0xb2,0x14,0x95,0x96,0x49,0xf9,0x2a,0xe7,0x9e,0x3a,0x3e,0xd8,0x12,0xf7,0xbc,0x43,0x8c,0x35,0x31,0x44,0x08,0x7f,0x25,0x39,0x86,0x98,0x6a,0xe8,0xe3,0x2e,0x73,0x2d,0x3b,0xac,0x2d,0x75,0x4c,0xc8,0xca,0x21,0x2d,0x96,0x9b,0x4f,0x56,0xff,0x2d,0xc2,0xe2,0x98,0x3d +.byte 0xe2,0x3f,0xee,0x10,0xb7,0xc3,0x3d,0xa8,0x50,0x88,0x7f,0xd5,0x4e,0xbd,0xc7,0x9d,0xdc,0x01,0x49,0x27,0xf2,0xae,0xea,0x93,0x72,0xdf,0x00,0xcd,0xe6,0xa1,0xdd,0xd1,0x18,0xeb,0xa7,0xe1,0x4a,0x7b,0x38,0x72,0x73,0x29,0x46,0xa3,0xb3,0x25,0x23,0x6d,0x26,0xab,0x86,0xdc,0x67,0x52,0xe5,0x4a,0x5e,0x8f,0x16,0x67,0x8a,0x28,0x13,0xba +.byte 0x44,0x42,0xb5,0x21,0x9f,0x30,0x66,0x7f,0xc9,0x87,0x40,0xcb,0x75,0x58,0x2e,0xcd,0x09,0xb9,0x8a,0x84,0xa3,0xbd,0x63,0x53,0x75,0x2f,0x77,0x8b,0x7e,0x19,0x31,0x33,0x3b,0x9a,0xfb,0x86,0x39,0xa6,0xd9,0xeb,0x9b,0x43,0xc6,0xd9,0xc2,0x10,0xab,0x42,0xe5,0xc6,0x4a,0xe6,0x3e,0xde,0x9d,0xac,0x8e,0x95,0xf0,0xdb,0x48,0x95,0xc2,0x87 +.byte 0x6b,0x7f,0xde,0x09,0xdb,0xed,0x49,0x19,0x73,0x2d,0xa4,0x5c,0xdf,0xfa,0x2e,0x15,0xd0,0xb6,0x46,0x32,0xc9,0x7f,0x7e,0x01,0xd3,0x25,0x45,0x0e,0x5b,0x0d,0xf0,0x67,0xe3,0xd9,0xdf,0x4f,0x3b,0x6f,0xb3,0x15,0xc5,0x6b,0x91,0x75,0xa2,0xaf,0x42,0x3a,0x14,0x50,0xd9,0x4f,0x19,0x65,0x12,0x83,0x5d,0x8f,0x8a,0x01,0x0b,0x89,0xcc,0x7f +.byte 0x1a,0xde,0x5b,0x44,0x34,0x98,0x0f,0x8e,0x5a,0x5e,0x03,0x41,0x3e,0x66,0x9b,0x16,0xf5,0x91,0x7c,0xb0,0xc1,0xbf,0xa2,0x10,0x0b,0x60,0x3a,0x63,0x0c,0xcf,0xd8,0x49,0xdb,0x42,0x88,0x1f,0x36,0x8e,0x15,0xdb,0x5d,0x3f,0xe7,0xf1,0x9a,0x73,0x2b,0x74,0x0c,0xd5,0x09,0xab,0x01,0x2e,0x52,0x6f,0x03,0xf6,0xc9,0x0b,0xeb,0xa5,0xce,0x2e +.byte 0x1c,0x02,0x35,0xca,0xce,0xfe,0x4b,0xad,0x67,0x21,0xf8,0x44,0xea,0x70,0xf2,0x3d,0xfc,0x43,0x77,0x05,0x26,0xbe,0xaf,0x99,0xab,0x41,0xd4,0xcc,0x53,0x33,0x33,0xcd,0xb4,0x2d,0x76,0xfb,0xae,0x0c,0xac,0xc1,0xd0,0x42,0xfb,0x45,0x4a,0x6e,0x55,0xd2,0x93,0xef,0xb9,0x06,0xbc,0x38,0xce,0x94,0xc2,0x01,0xdf,0x27,0xc8,0x47,0xff,0x74 +.byte 0xfb,0x84,0xc5,0xa2,0x78,0x1f,0x4f,0x73,0x12,0xec,0x2d,0x82,0x5b,0xeb,0x3c,0xb6,0x1c,0x5a,0x29,0x9c,0xba,0x9e,0xa4,0x85,0x94,0x84,0x68,0x01,0xd7,0xb1,0x27,0x84,0x4a,0x7d,0x62,0x9c,0x32,0x12,0x89,0xd8,0x66,0xb5,0xe9,0x07,0xf4,0x5f,0x6b,0x0e,0x90,0x87,0xe5,0xc1,0x8b,0xaf,0x8f,0xf7,0xca,0x54,0xe0,0xc6,0x5f,0xa5,0xec,0xd1 +.byte 0xdc,0xdc,0x17,0x9e,0xca,0x4b,0x72,0x72,0x03,0x96,0x62,0xaa,0xc1,0xfe,0x23,0x7e,0xd2,0x06,0x61,0xb6,0xc9,0x0d,0x7e,0xbf,0x72,0x1c,0x66,0x46,0x0b,0x31,0x96,0x81,0x11,0x3d,0xac,0x5e,0xd0,0x35,0xaf,0xac,0x4c,0x74,0xce,0xf9,0x9c,0x64,0x3d,0xe5,0x9d,0xfe,0xc7,0x05,0x09,0xe1,0x70,0xc5,0x37,0xd5,0x4e,0xd8,0x7d,0xdb,0xfa,0x1c +.byte 0x28,0xfc,0x10,0x2a,0xe8,0x62,0x18,0x09,0x97,0xe0,0x98,0x2e,0x9f,0x1d,0x18,0xff,0x22,0xe9,0x5d,0x37,0xd2,0x74,0xf1,0x81,0x08,0x8a,0x55,0xc0,0x40,0x0f,0x70,0xbe,0x82,0x23,0x78,0x35,0xc8,0xf8,0x59,0x6e,0x0d,0x2e,0xd5,0xe7,0xf5,0x2e,0xbd,0xcd,0x1a,0xcf,0x76,0x43,0x1f,0xca,0x15,0x6c,0x4a,0xb7,0xc7,0xb9,0xaf,0x68,0xd7,0x31 +.byte 0x1e,0x0c,0x9c,0x78,0x74,0x66,0x80,0xc6,0x74,0xbe,0x86,0x59,0x0c,0x12,0xdc,0xf3,0x1b,0xaf,0x63,0x74,0xce,0x1e,0xac,0xf0,0x65,0xa0,0xab,0x7f,0x96,0x08,0x32,0xb2,0xca,0x9c,0xfb,0x9d,0x66,0x63,0x76,0xf9,0x69,0x08,0x6e,0xd3,0x46,0xde,0xdf,0x54,0x06,0x0d,0x25,0x81,0xd9,0x5a,0x45,0xeb,0xe5,0xc0,0xf6,0x86,0x0f,0xe9,0x27,0x7c +.byte 0xdc,0x52,0x28,0xb5,0xd0,0x7d,0x07,0xc1,0xb6,0x9b,0xdc,0xea,0xd3,0x2a,0xba,0xb0,0xd5,0xa3,0xd8,0x25,0x07,0x9c,0x6c,0xd6,0x16,0xa5,0x93,0x43,0x52,0xa7,0x5c,0x2b,0xe2,0xfa,0x8e,0x6e,0xaa,0x04,0x84,0x63,0x80,0x0f,0x90,0x10,0x41,0x1c,0xf6,0x67,0xea,0x39,0xb0,0x16,0xfc,0x6f,0x85,0x28,0x8c,0x8e,0xfb,0x79,0x39,0xdf,0xf6,0x6e +.byte 0x57,0xa1,0xaa,0xf1,0x0b,0x99,0xde,0xad,0x69,0xe2,0xf4,0x74,0x8e,0x8c,0x2d,0x20,0xdb,0xf3,0x2d,0xc2,0x75,0xe7,0xd6,0xc8,0x9d,0x46,0x3b,0x8b,0x8b,0x18,0xd8,0x41,0xfd,0xc2,0x7d,0xec,0x66,0x78,0xe7,0xbe,0xee,0x2b,0x07,0xd8,0x7e,0x13,0x61,0x7e,0xab,0x7d,0x2b,0x3f,0x83,0x96,0xf5,0xab,0x0b,0x20,0xd2,0x5b,0xb0,0xeb,0xf7,0x1b +.byte 0xac,0x1a,0x16,0x46,0x21,0x90,0xdb,0x67,0x66,0x42,0xe2,0x54,0x34,0xae,0x34,0xae,0x21,0x33,0x8c,0x48,0x19,0xdb,0x1f,0xa8,0x25,0x76,0xe0,0x03,0x1c,0x35,0x8d,0xd3,0xab,0x6b,0x93,0xf3,0xad,0x7d,0x3c,0x76,0x1d,0xaa,0x43,0x80,0x0f,0x5f,0x20,0xd9,0xf0,0xff,0x8b,0xf4,0xdb,0xbc,0xf2,0xff,0xf2,0x8a,0xfc,0xf5,0x0e,0x4e,0xd9,0xb0 +.byte 0xd6,0xb3,0x86,0x5b,0x3e,0x10,0x87,0x50,0xf1,0xd2,0x8f,0x8d,0xa4,0x39,0x85,0xf5,0x90,0xd6,0x53,0x69,0x40,0x42,0xc1,0xc3,0x7c,0xc1,0x3e,0x97,0xb4,0x08,0x49,0x93,0x4e,0x4c,0x67,0xd9,0x2e,0x05,0x70,0x04,0x98,0x0a,0xed,0xd0,0xff,0x0c,0x13,0xe4,0xde,0x75,0x81,0x24,0xb1,0x27,0x79,0xeb,0x80,0x68,0x52,0x50,0x66,0x77,0x4f,0xf6 +.byte 0x64,0x2f,0x85,0x9e,0xc1,0xbf,0x9f,0x0e,0x31,0x9a,0x36,0x24,0xcd,0xa8,0xe8,0xce,0x41,0x86,0xd1,0x02,0x96,0xdc,0x1a,0xa0,0x48,0xca,0x61,0xd5,0x87,0xdb,0x0a,0xeb,0x69,0x95,0xca,0xf8,0xe5,0xa0,0x5b,0x91,0x8f,0xb9,0x59,0x5f,0x68,0x60,0x58,0xc5,0xe0,0xc7,0x02,0x68,0xa5,0x67,0x1e,0xfc,0xa9,0x27,0x9f,0x83,0x4c,0x05,0x60,0xee +.byte 0xcb,0x79,0x31,0x73,0x36,0xf4,0x39,0x44,0xdb,0xea,0x62,0x89,0x97,0x69,0xd1,0x0d,0xf6,0x27,0xcf,0x47,0xfe,0x3d,0x5c,0xe9,0x92,0x54,0x0a,0x66,0xaf,0x82,0xb1,0x49,0x87,0x3f,0xa2,0x95,0x91,0x0e,0x72,0x1e,0x7b,0xde,0x32,0x31,0x51,0x40,0x24,0x4f,0x30,0x59,0x7d,0x97,0x28,0x30,0x7e,0x93,0xcd,0x1e,0x16,0xef,0xe1,0xb5,0xa8,0xff +.byte 0x3a,0xd0,0x62,0x94,0x8b,0x72,0xe7,0x97,0x8f,0x2f,0x58,0x3e,0x62,0x43,0x6b,0x28,0x05,0xc9,0x0d,0xf0,0x09,0xbd,0x12,0x3b,0xd8,0x15,0xd3,0x7c,0x97,0x96,0x5a,0xf4,0x9f,0x8d,0x25,0xb7,0xc5,0x66,0xf7,0xf7,0x5f,0x7e,0xca,0x2f,0xcd,0x9a,0xf2,0xa3,0x9b,0x4f,0x6f,0xc3,0xd9,0x64,0x38,0xda,0x87,0x97,0x8a,0x49,0x2d,0x80,0x16,0x73 +.byte 0x88,0x62,0xd2,0xdf,0x4f,0xf7,0x79,0xc0,0x83,0xeb,0x2b,0x66,0x5a,0x21,0x3a,0xa2,0x2a,0xed,0x8c,0xe7,0x91,0x6d,0x56,0x18,0xfc,0x59,0x68,0xea,0x9f,0x5c,0x3c,0xd5,0x0f,0x64,0x70,0x89,0x22,0x83,0xed,0xfa,0xc9,0x21,0x68,0x3c,0x69,0xb8,0x3e,0x89,0xb5,0x9d,0x8b,0xc8,0xf7,0x57,0x17,0x27,0x90,0x12,0xa7,0xd2,0x4d,0x2c,0x30,0x64 +.byte 0x42,0xbe,0xa6,0x49,0x4e,0xa3,0x3b,0xdb,0xdb,0x64,0x0e,0x89,0x66,0x87,0x72,0x90,0x86,0x1d,0x0b,0x61,0x32,0x47,0x3d,0x55,0x81,0xb2,0x50,0x5a,0x76,0x6c,0xa3,0x46,0x12,0x1b,0xaf,0x6e,0xbf,0xfd,0x98,0x2f,0xb7,0xd2,0x31,0x92,0xb5,0x26,0x1a,0x3d,0xfa,0x5d,0xc0,0x24,0x44,0xd2,0x6b,0x1c,0x81,0xf5,0x5d,0x50,0xb0,0x33,0x18,0xe0 +.byte 0xc5,0xb3,0x6b,0xf4,0xfd,0xde,0xf7,0x2f,0x69,0x1d,0x5a,0xfe,0x03,0x6d,0xca,0xad,0x29,0xe0,0x6e,0x70,0xcd,0xe3,0x6d,0x38,0xef,0xf1,0x3a,0x76,0x2b,0x2c,0xb6,0xcd,0xff,0xeb,0xbc,0xe7,0xd9,0x40,0xbe,0x23,0x61,0x20,0xd5,0xb8,0x66,0x77,0x65,0xc9,0x33,0xf5,0x75,0x8e,0x15,0x98,0x3f,0xb1,0x4a,0xb8,0x1c,0x47,0x73,0x45,0x0f,0x73 +.byte 0x2a,0xa1,0xb7,0x73,0x76,0x94,0x16,0x45,0xcf,0xd6,0x8f,0xe3,0x62,0x8a,0x42,0xfd,0xe3,0x1e,0xe0,0x7d,0xb5,0x99,0xbd,0x1c,0xf2,0x60,0xb2,0x72,0xa8,0x4b,0x19,0xd6,0xd0,0xdb,0x0b,0x1f,0xc9,0x68,0xc0,0xf3,0x65,0x04,0x50,0x41,0xf0,0xb3,0x0e,0x0a,0x9d,0x7f,0x0b,0x1f,0xeb,0x5b,0x4c,0x58,0x6a,0xf2,0x02,0x95,0xd2,0xf3,0xac,0xe5 +.byte 0x69,0x81,0xb1,0x3f,0x08,0xfc,0xba,0xcb,0x36,0xcd,0x54,0x28,0xac,0x65,0xd8,0x81,0xab,0xc1,0x6a,0x51,0x97,0x21,0xe4,0xc6,0xaf,0xd8,0x76,0x76,0xa4,0xc4,0xd0,0x58,0x63,0xdf,0x32,0xf5,0x04,0xfb,0x11,0xeb,0x76,0x39,0xda,0x55,0xf4,0x7e,0x1c,0x7b,0x04,0x07,0x4d,0x5a,0xeb,0x74,0x0a,0x57,0xcf,0x10,0xf6,0x0e,0x73,0x02,0x25,0x67 +.byte 0x4f,0x8f,0x37,0x75,0x8f,0x44,0x2a,0x1a,0x6d,0x05,0xda,0xe0,0xa0,0xaa,0xd2,0x78,0xaa,0x7e,0x76,0x0a,0xde,0x2a,0x54,0xae,0x1e,0x39,0xcc,0x3c,0x1c,0xa6,0xd5,0x8a,0xca,0xb4,0xcc,0x76,0xb9,0x30,0xd2,0xe2,0x46,0x31,0xb6,0x51,0xcf,0xe2,0x24,0x77,0xc9,0x9b,0x57,0x3c,0xa3,0x84,0x60,0x59,0x28,0x5f,0x23,0x74,0x17,0x79,0x42,0xbe +.byte 0x60,0x3f,0x09,0x6a,0x43,0x8e,0x40,0x25,0x79,0xb5,0xbb,0xbb,0x72,0x50,0xad,0x4f,0xaa,0xa2,0xd4,0xb2,0xc6,0x7d,0x50,0x7b,0x98,0x59,0x22,0x06,0x7d,0x2c,0x35,0xdd,0x44,0x34,0x9c,0x28,0x98,0xf3,0xe5,0xd0,0x7e,0x09,0xbe,0xc4,0x00,0x72,0xd5,0xa6,0x3b,0x0e,0xb1,0x18,0x91,0x0a,0x4d,0x5d,0xe2,0x0a,0x98,0x79,0x30,0x9b,0xaa,0x38 +.byte 0x03,0x2b,0x6c,0xb2,0x8e,0x0a,0x1d,0x30,0x59,0x8a,0xe8,0x6c,0x6d,0xb5,0xd4,0x91,0xc5,0x28,0x1d,0x5e,0x49,0xe0,0xfc,0x26,0x7f,0x40,0xc0,0x6a,0x81,0x0d,0xb9,0xc6,0x05,0xc6,0x18,0x82,0x70,0xf6,0xea,0x0e,0xb4,0x85,0xba,0x5d,0xfa,0xfd,0xe3,0xd6,0x08,0x7c,0x3d,0x99,0x03,0xd4,0xdc,0x9b,0x50,0x12,0xc8,0xbd,0x8c,0x47,0x67,0x28 +.byte 0x83,0x97,0xca,0xef,0xc3,0x1c,0x2b,0x6e,0x3b,0xf7,0xca,0x7a,0x68,0x6e,0x39,0x25,0x58,0xf7,0xa4,0x11,0x9d,0x8d,0x49,0x29,0xd6,0x6e,0x0b,0x0a,0xcf,0xa7,0x04,0x14,0x6f,0xc4,0x4c,0x36,0x1a,0x16,0x3e,0x8f,0x99,0x69,0x94,0x1d,0xa8,0x66,0x93,0xeb,0x1d,0x82,0xfd,0x3f,0x84,0xb0,0x9d,0xa4,0xe1,0xb0,0xd4,0x9d,0xb2,0x60,0x20,0xfb +.byte 0xd3,0xa0,0xdc,0x79,0x83,0xb0,0xfc,0x50,0x18,0x57,0xe1,0xeb,0x44,0x25,0x05,0xab,0x27,0xfb,0x5f,0x83,0xcd,0x51,0xd0,0x3b,0x80,0x4a,0xce,0xbf,0xe9,0xfe,0x46,0xd2,0x5f,0xea,0x8c,0x89,0x48,0xc8,0x65,0xdd,0x2a,0xa4,0xda,0x54,0xc2,0x37,0x7e,0xd7,0xff,0x80,0x5b,0xf0,0xc3,0x40,0x44,0x40,0x72,0x63,0x23,0xc6,0x9a,0x48,0xf3,0x4b +.byte 0x91,0x64,0x26,0xfc,0xf3,0xa0,0xb9,0x06,0x0c,0x88,0xbb,0xc0,0x93,0x73,0x63,0xf6,0x9c,0x0d,0xe2,0xf6,0xee,0xe0,0x51,0xfd,0xae,0x4d,0x21,0xb9,0x6b,0x7d,0x1e,0x34,0xa0,0x4d,0xe4,0x25,0x30,0xe6,0x81,0x2e,0x32,0xef,0xb9,0x9e,0xaf,0xa0,0x22,0xe0,0x67,0xe6,0x07,0x55,0x3a,0xed,0xef,0x4f,0x87,0x2f,0x44,0xd2,0xef,0xc1,0xfb,0xc4 +.byte 0x7b,0x27,0x20,0x44,0xd2,0xd6,0xf9,0xf3,0x67,0xc1,0xbf,0xaa,0xd5,0x9c,0xd9,0x2c,0xd5,0xf1,0x42,0x2d,0xec,0x39,0xb5,0xc1,0x18,0xed,0x6c,0x47,0x80,0xf8,0x6f,0x66,0x10,0xee,0x1d,0xd6,0x79,0x01,0x4e,0x2a,0xd0,0x83,0xa7,0x9d,0x1d,0x81,0xce,0xf5,0x6f,0x26,0x86,0xd2,0xd7,0x56,0x15,0x65,0x48,0x4c,0xf1,0xf9,0x21,0x77,0xd1,0x84 +.byte 0x22,0xce,0x4d,0x8d,0x83,0xda,0x8c,0x50,0x56,0xc8,0x3b,0xc5,0xb6,0xcf,0x3e,0x0d,0x50,0xe5,0x9d,0x6c,0xb5,0x2a,0x5a,0x58,0x28,0xf5,0x0a,0x05,0xf3,0x0e,0x40,0x8e,0xb6,0xb4,0xdf,0x11,0x1b,0x34,0x81,0xc5,0x0e,0x09,0xa6,0xfc,0x46,0x14,0x02,0x78,0x94,0xbb,0x63,0x9d,0x3e,0x25,0x2c,0xc8,0x1b,0x5c,0xef,0x64,0x77,0x0c,0x04,0x40 +.byte 0xe1,0x45,0x85,0xf8,0x07,0xbf,0x14,0x65,0xe9,0xfc,0xba,0xe4,0x9c,0xa7,0x91,0x56,0x2a,0x3a,0x8e,0x33,0xae,0x56,0x04,0x9d,0x35,0xbc,0xad,0x64,0x0e,0x99,0x8e,0xb5,0x84,0x72,0xcf,0xcc,0x81,0x14,0x11,0x9e,0xe6,0xac,0x0d,0x41,0x43,0x4e,0x2a,0x0d,0xda,0x98,0x42,0xfa,0x8c,0x21,0x79,0x93,0xa3,0xdf,0x84,0x88,0x76,0x14,0x5b,0xb9 +.byte 0xff,0xe1,0xab,0x94,0xc3,0xcd,0x10,0x69,0xee,0x53,0xea,0xfe,0xfb,0xaa,0x43,0x8f,0xdd,0x55,0x88,0x34,0x5d,0x55,0x0f,0x42,0x4d,0x1d,0x93,0xce,0x96,0x67,0xf8,0x33,0xc7,0xca,0x34,0x11,0x28,0xb2,0xed,0x0f,0x00,0x40,0x84,0xee,0x51,0x26,0x6e,0x7b,0x2d,0x77,0xeb,0x18,0xb8,0x9a,0xad,0x28,0xb6,0x6c,0x5e,0xde,0x10,0x4c,0x29,0x1d +.byte 0x79,0x3c,0x2e,0x1c,0xf0,0xc8,0xb3,0xee,0x19,0x7a,0x10,0xe1,0xe3,0x05,0x1e,0x63,0xe9,0x00,0xd7,0xfe,0x83,0xe7,0x54,0xff,0x65,0x9a,0x27,0xa3,0x86,0x72,0x5c,0xb6,0xef,0xf5,0x84,0x68,0x1e,0xae,0xe6,0xf8,0x66,0x9c,0x1b,0x86,0xab,0xfa,0x1a,0xe3,0xb8,0x97,0x16,0xb1,0xb7,0x42,0xfa,0x85,0xa3,0x3a,0x0d,0x21,0xd2,0x35,0xb1,0x89 +.byte 0xf0,0x4f,0x1a,0x1d,0x45,0x34,0x2f,0x31,0x12,0x8c,0x19,0xe7,0x4b,0x14,0xa7,0xcf,0x0f,0xf9,0xcd,0x77,0x40,0xbe,0x09,0xeb,0xc3,0x3e,0x4a,0x37,0x55,0xab,0xbb,0x9c,0xe5,0x22,0x56,0x8a,0x66,0xfa,0xb1,0xff,0x73,0x29,0x52,0xb1,0x89,0xf7,0xab,0xa6,0x58,0x53,0x97,0xfd,0x44,0xda,0xbd,0x0b,0x1f,0xc8,0x88,0x01,0xcc,0x5e,0xf7,0x05 +.byte 0xbd,0xf7,0x0a,0x4d,0xcb,0xef,0xbf,0xd9,0x8e,0x15,0xc3,0x40,0xb9,0xc9,0x14,0xe5,0x05,0x3c,0x20,0x67,0xfe,0xdc,0xa6,0xb8,0x92,0xbd,0xf5,0x33,0xb5,0x77,0x11,0x28,0x47,0x21,0x28,0x18,0x61,0xf8,0x1c,0xdb,0x65,0xad,0x89,0x0d,0x98,0x79,0xca,0x2b,0xa3,0x4f,0x16,0xa6,0xb3,0xb9,0xcc,0x47,0x5b,0x13,0x96,0x2e,0x39,0x78,0x24,0xc5 +.byte 0xf9,0xf5,0xae,0xdc,0x34,0x3c,0xf7,0x48,0x0d,0x75,0xaf,0x51,0x75,0x48,0xbe,0x4d,0x73,0x89,0x5a,0xfc,0xd7,0x51,0xd3,0x93,0xa8,0xbc,0xc3,0xa6,0x6b,0x63,0xc1,0xc3,0x7b,0x48,0xf1,0x57,0xe4,0xb4,0xce,0x5f,0x18,0xae,0xdc,0x61,0x99,0xaa,0x7e,0x49,0xd6,0xb5,0x2c,0x62,0xb8,0x8c,0x4a,0x94,0xc1,0xc2,0x13,0x23,0xdc,0x7c,0x48,0xc2 +.byte 0xaa,0xc4,0xd9,0xc0,0x09,0x11,0x6e,0x35,0x07,0x14,0x77,0x7e,0xeb,0x87,0x00,0x05,0x30,0xec,0xb2,0xc6,0xde,0x6e,0x42,0x0b,0x2a,0xb6,0xca,0xb1,0xdc,0x69,0x57,0x1b,0xad,0x52,0xa8,0x22,0x1e,0xb5,0x2b,0xb5,0x8e,0x39,0x4b,0xbf,0x38,0xf4,0xb2,0xf5,0xa1,0x9c,0x7b,0x7f,0x6c,0x14,0x48,0x37,0xa9,0xf9,0xcd,0x85,0x50,0x53,0xb0,0xc1 +.byte 0x15,0x28,0x19,0x3b,0xb1,0x04,0x44,0x93,0x7a,0x16,0x76,0x69,0xa1,0x5c,0x67,0xcc,0x8d,0x02,0x56,0xcd,0xd9,0x91,0x49,0x8c,0x1b,0xc9,0x89,0x98,0x09,0x2e,0x5b,0xf8,0x7c,0xe6,0x0f,0x46,0xb0,0xcc,0xe5,0x75,0x63,0xaf,0x40,0xd5,0xa3,0x45,0x4a,0x76,0x67,0x1d,0x81,0xc2,0x25,0x85,0x7f,0x52,0xc5,0xf8,0x6d,0xd9,0xb6,0xa8,0xa4,0x96 +.byte 0x63,0xcc,0x15,0xc5,0xec,0x40,0x0e,0x08,0xf7,0x6f,0x85,0xa5,0xe7,0x2e,0xbe,0x3f,0xf4,0xc8,0x74,0xc7,0xed,0x86,0x85,0xc0,0x44,0x9e,0x80,0xc8,0x89,0xdc,0x16,0x47,0xb1,0x68,0x0e,0x65,0x66,0x0f,0xbc,0x33,0xb1,0x78,0x1e,0x5e,0xd7,0xde,0x97,0x96,0xb8,0x74,0x5c,0x90,0x7a,0xed,0x36,0xf4,0x10,0x91,0x5a,0x42,0x92,0x81,0x11,0x73 +.byte 0x3e,0xf1,0x5e,0xfb,0xc2,0x38,0xe6,0xe5,0x41,0xce,0x96,0xed,0x44,0x14,0x9c,0xc0,0x1f,0x83,0x5f,0xdd,0x50,0x87,0x90,0x86,0x50,0x61,0x87,0x99,0x7c,0x64,0x2d,0x50,0x17,0xa3,0xb0,0x7e,0x69,0xd3,0x86,0xb4,0x7c,0xe7,0x15,0x34,0x9e,0x3b,0x17,0xc0,0x2d,0x08,0x60,0x8b,0xae,0xec,0xa2,0xf6,0xf1,0xa4,0xbc,0x7b,0xc2,0x75,0x91,0x13 +.byte 0xf6,0xd0,0x71,0xf0,0x3c,0x9c,0x51,0xb3,0x33,0x53,0x57,0x47,0x8b,0x47,0xb0,0x0b,0x95,0x9a,0x39,0x70,0x63,0x91,0xcc,0xd8,0xd0,0x23,0x32,0xc0,0xb6,0x0f,0x91,0x30,0x29,0x45,0xf1,0xfc,0xa1,0x83,0x10,0x9a,0xa4,0x05,0x05,0x9f,0x33,0xbd,0xaf,0x16,0x3e,0x53,0x39,0xb1,0x4b,0x76,0x55,0x3e,0x6f,0x47,0x23,0x59,0x4c,0xbb,0x82,0x31 +.byte 0x19,0xe2,0xb1,0x49,0x20,0x91,0x2d,0xb0,0xfe,0xa6,0xae,0x7f,0x6e,0xd1,0x5b,0xb9,0x84,0x18,0x0f,0x68,0xc6,0x56,0x8a,0x22,0x81,0x3f,0x38,0x42,0x7a,0x31,0xa1,0xc1,0xf7,0x10,0x6a,0xc3,0xb1,0xaf,0x19,0xad,0x06,0x3a,0x53,0x9d,0x44,0x9f,0xe7,0x25,0xac,0x59,0x06,0xb9,0xd2,0xf6,0xce,0xb6,0x1e,0x4d,0x65,0x2e,0x05,0xb4,0x14,0x91 +.byte 0xfb,0x5b,0x26,0xd0,0xee,0xfa,0x45,0x5b,0x0c,0xd5,0x5c,0x1f,0x0c,0xe0,0xf6,0x50,0x78,0x77,0x7e,0x83,0x04,0xec,0x3b,0x53,0x28,0x97,0x56,0x61,0xeb,0xa0,0x78,0xe5,0xc0,0xb2,0x3c,0xcd,0x6f,0x4b,0xda,0x11,0x00,0x93,0x49,0x9f,0x03,0x22,0x39,0x3a,0xc8,0xef,0x01,0x91,0x12,0x36,0x15,0x0c,0x47,0xd5,0x8b,0x77,0x5e,0x5f,0x91,0x4b +.byte 0x44,0x98,0xa0,0xa0,0x46,0x0f,0x17,0xef,0xf9,0x52,0x0b,0x92,0xc1,0xe0,0xfc,0x63,0x9b,0x6d,0xe2,0xde,0x88,0x89,0x32,0x89,0x93,0x44,0x6d,0x69,0xe7,0x26,0xfd,0x77,0xc0,0x18,0x58,0xdb,0x74,0xec,0x04,0x0c,0x60,0x51,0x74,0xca,0x49,0x3e,0x4f,0x5f,0xaa,0x53,0xf2,0xc1,0xcb,0x89,0x1f,0x69,0xaa,0xbb,0x97,0x17,0x04,0x49,0x5e,0x44 +.byte 0xf3,0xf3,0xc4,0x98,0x9d,0x49,0x1e,0xb0,0x27,0x7d,0xff,0x54,0xa5,0xed,0xbe,0xb0,0x52,0xf6,0x00,0x87,0x67,0x2d,0x28,0xdb,0x09,0x4e,0xa2,0xee,0x4f,0x81,0xeb,0xa1,0xca,0x2b,0x07,0x2f,0x54,0x6d,0x5a,0x2e,0x13,0xa4,0xd0,0xac,0x21,0x7c,0x44,0xc0,0x98,0xac,0xe4,0x6e,0x94,0xd1,0x5b,0x5e,0xd6,0xf1,0x3c,0x45,0x88,0xe1,0xbd,0x58 +.byte 0xf1,0xc7,0xba,0x36,0x2c,0x15,0xb9,0xf4,0xa3,0xea,0x73,0xb4,0x91,0x53,0xd8,0x18,0x86,0x23,0x87,0x0b,0x7a,0x4a,0x2d,0x2d,0x3d,0x73,0xcb,0x05,0x11,0x4c,0x19,0x26,0xf2,0x05,0x89,0xc8,0x29,0x26,0xa7,0xe4,0xcb,0x43,0xd0,0xf6,0xbc,0x76,0xbd,0x9a,0x17,0x4a,0xf1,0x39,0xe3,0xde,0x05,0x10,0x8a,0xd3,0x11,0x53,0x61,0xef,0x33,0xd9 +.byte 0x65,0x0d,0x99,0x0b,0x39,0xa4,0x1b,0x4f,0x0b,0xa5,0xf1,0x37,0xa3,0x4f,0x54,0xa7,0x29,0xc1,0xae,0x88,0x5c,0x13,0x2f,0xb2,0xbf,0xcf,0x1b,0x0d,0xa0,0x68,0x21,0xe2,0x20,0x3f,0x02,0x9f,0x08,0x39,0xc6,0x20,0x2d,0x08,0x01,0x5d,0xf1,0x47,0xde,0x88,0xad,0x49,0x09,0xf7,0x1a,0x0c,0xa7,0x29,0x91,0xe5,0xfc,0xc5,0xde,0xd7,0x92,0x3f +.byte 0xe5,0x0c,0x91,0xea,0x24,0xfb,0x02,0x9a,0x13,0x3a,0x61,0x01,0x9d,0x7e,0x9d,0x11,0xf8,0xbd,0xe0,0x05,0xbb,0x13,0xf0,0x00,0x67,0x90,0x6f,0x80,0xe7,0x2e,0xfc,0xe0,0xea,0x8a,0x9d,0x2c,0x13,0x57,0x4c,0x78,0x1c,0x44,0xe2,0xa6,0x62,0x01,0x46,0xf8,0xbe,0xf4,0x51,0x32,0x15,0xd4,0x3c,0x7d,0x3b,0xcc,0xfd,0xc3,0x46,0x43,0xf1,0xfa +.byte 0x9e,0xee,0xad,0x47,0x8f,0x32,0x31,0x94,0x70,0x92,0xea,0x45,0xe3,0x63,0xd6,0x28,0x23,0xa5,0xdf,0x61,0xee,0x19,0x1a,0x5e,0xb0,0xe7,0x17,0xab,0xac,0xb4,0x03,0xed,0xf6,0x9e,0xba,0xdf,0x52,0x88,0xb7,0xca,0x7c,0x27,0xcd,0x7b,0xf8,0x1e,0x54,0x4b,0xe6,0xa3,0x91,0xf7,0xeb,0x22,0x65,0x95,0x13,0xe1,0xac,0xb6,0x22,0x80,0xe3,0xeb +.byte 0xf9,0xde,0xf1,0xb7,0x6a,0xfd,0xc7,0xb8,0x9b,0x9c,0x49,0x4f,0x84,0x7f,0x68,0x93,0x6c,0x3c,0xea,0xb1,0x8a,0xeb,0x23,0xca,0x2d,0x5e,0x29,0xb5,0x52,0x49,0x98,0x12,0x3f,0xed,0xf0,0xb7,0xbc,0x22,0x14,0x73,0x92,0x84,0x1b,0x3e,0x2f,0xed,0x24,0x1e,0x62,0xcc,0x09,0xe8,0x7c,0x5a,0x08,0xd4,0xc6,0xd9,0xd1,0x55,0x66,0x18,0x2c,0x6a +.byte 0x99,0xc3,0x0e,0x1e,0x7b,0xb7,0xd4,0xbd,0x0e,0x1f,0x22,0x85,0x09,0x2c,0xcf,0xff,0x79,0x9f,0x93,0xbe,0xec,0xed,0x63,0xb7,0x97,0xbb,0xeb,0xd6,0x70,0x76,0xa9,0x4f,0xb7,0x9a,0x60,0x5b,0x50,0xdf,0x85,0x46,0x69,0xa0,0x9a,0x86,0xe3,0xe2,0x13,0x2b,0x8c,0x0f,0x3b,0xab,0xa8,0xce,0xa3,0xb0,0x78,0x72,0x40,0xfb,0xd1,0x26,0x72,0xc1 +.byte 0x91,0x25,0x7b,0x29,0xde,0xcf,0x99,0xf3,0x8e,0x87,0x39,0x81,0x04,0xad,0x3b,0x11,0x6a,0xda,0x00,0xdd,0xe9,0x41,0xc1,0xd8,0xcc,0xf9,0x59,0xac,0x9b,0xb1,0x64,0x6f,0xb8,0xf4,0x9f,0x20,0xde,0x67,0x09,0x1b,0xdf,0x11,0xa5,0x94,0x56,0xab,0x76,0xba,0xc5,0xda,0x6c,0x86,0xe6,0xa4,0x73,0x59,0xa9,0xe3,0x68,0xb9,0xc0,0x50,0x1b,0x55 +.byte 0x21,0x9e,0xea,0x8d,0xcc,0x5d,0xee,0x88,0xe1,0x18,0x7c,0xcd,0x8f,0xff,0x18,0xbd,0x13,0xea,0x95,0xc4,0x8e,0xd3,0x92,0xfe,0x3d,0xda,0x6f,0xa5,0xbc,0xa0,0x77,0x5a,0x1d,0x61,0xff,0x7b,0x77,0xc4,0x06,0x25,0xc5,0xa7,0x76,0x36,0x55,0xe7,0xc0,0xf0,0x46,0x7e,0xca,0xe7,0xc1,0xe8,0x88,0x65,0xff,0xa7,0xb6,0x9c,0x83,0x1d,0x2e,0x6e +.byte 0xd6,0xd3,0x07,0x22,0x65,0x79,0x4f,0x3c,0x0a,0x5c,0x4f,0x95,0xb3,0x14,0x37,0x9b,0x0b,0x97,0x69,0xd9,0x5b,0x37,0x09,0xc3,0x70,0x5b,0x4f,0x11,0xcb,0xce,0xc0,0x06,0xf2,0xb9,0x32,0xdd,0x24,0x7b,0x8c,0xe6,0x0c,0x91,0x3b,0xa8,0xb0,0x82,0x56,0x4d,0xde,0xa0,0x5c,0x0b,0x5b,0x70,0x53,0x64,0x9d,0xab,0xbb,0x51,0x6b,0x8c,0x8f,0xe5 +.byte 0x1f,0xc0,0xb8,0xfe,0x1b,0xf6,0x24,0x26,0x62,0xcb,0x78,0x84,0x90,0x76,0x67,0x30,0x18,0x37,0xa9,0xca,0xb7,0x0d,0xac,0x17,0x86,0xb1,0x87,0x59,0x18,0xc3,0x9e,0x62,0x1b,0xb1,0x04,0x52,0xfc,0x7c,0x86,0xa0,0x37,0xb9,0x8b,0x7a,0x85,0x79,0x21,0xe0,0x0f,0x87,0x28,0x91,0xd0,0xe5,0x24,0x63,0x5c,0x7c,0xe8,0x47,0xfa,0x42,0x55,0xe9 +.byte 0x66,0xad,0xdf,0xc3,0x43,0x90,0x47,0x83,0x24,0x09,0x54,0x5f,0x14,0x27,0x53,0xb3,0x22,0x15,0x52,0x84,0x2f,0x61,0x8c,0x01,0x9e,0x34,0x61,0x3f,0x76,0x44,0x1c,0xca,0x79,0x2c,0x40,0x4e,0xa0,0x36,0x11,0xe0,0x23,0x0f,0xa7,0x78,0xf9,0xf9,0x2a,0x2c,0x98,0x5c,0xa9,0x2d,0x66,0xb9,0x87,0x43,0xd5,0xbc,0x64,0xe5,0x52,0x2f,0x1d,0xdc +.byte 0x1d,0xf4,0xb3,0x18,0x6b,0xd1,0x3b,0x8b,0xa3,0x47,0x65,0x62,0xcc,0xca,0x5f,0x00,0xbb,0x78,0x9d,0x35,0xd4,0x79,0x45,0x33,0xc7,0xa8,0x29,0x96,0x98,0xa4,0x23,0x2c,0x23,0x7f,0x5a,0x1d,0x09,0xb4,0xcf,0xac,0x54,0xcd,0x27,0xda,0x88,0x21,0xe2,0xb4,0x85,0xdc,0xc9,0x4a,0x6b,0xc4,0xfa,0x48,0xc5,0x91,0xc1,0x53,0x4b,0xa1,0x7a,0x9c +.byte 0x8a,0x7d,0x35,0x52,0xf1,0x58,0x9d,0x20,0x36,0xc2,0x78,0xdb,0x37,0xf8,0xa4,0x2f,0x50,0x98,0xb0,0x34,0x51,0x66,0x93,0xcf,0xe7,0xf0,0x06,0xf1,0xcd,0x0e,0x4f,0x33,0xcc,0x9b,0x73,0x3b,0xc9,0x51,0x63,0x6d,0x29,0x6b,0xf4,0x9d,0x2c,0x76,0x59,0xcd,0xfc,0x11,0x35,0x52,0xbd,0x3b,0x2e,0x7d,0x8a,0x0d,0xb0,0xbb,0x90,0x9b,0x9c,0xac +.byte 0x1c,0x80,0x89,0xd6,0x6f,0xaf,0xea,0x89,0x38,0x74,0xef,0x83,0x82,0x91,0xf7,0x74,0x96,0x30,0x40,0xe2,0x18,0x2b,0xb4,0xf6,0x15,0xf0,0x8e,0x63,0xe1,0x82,0x55,0x7b,0x65,0x70,0x33,0x14,0xef,0x7a,0x7c,0x2d,0xa9,0x17,0x1b,0x53,0x1e,0xf8,0x98,0x1b,0xbe,0xc8,0x00,0xf5,0xbf,0x79,0xe7,0x8e,0xf2,0xdb,0x59,0x0d,0x46,0xab,0x43,0xd0 +.byte 0xe4,0xa0,0xeb,0x29,0x6a,0x8b,0xc1,0x99,0xa6,0xcc,0x8e,0xe5,0xde,0x67,0xdf,0x49,0x09,0x62,0x8d,0x4b,0xa1,0x1c,0x3b,0x01,0xe2,0x95,0x65,0x10,0xa5,0x91,0xd0,0x48,0x35,0x96,0xcf,0xe4,0x51,0xd2,0x7f,0x93,0x49,0xab,0x1a,0xba,0x08,0x33,0x54,0x34,0xd7,0x00,0xc9,0xa0,0x07,0x03,0xc7,0x8a,0x65,0xa2,0x84,0x60,0xcd,0xaa,0xa2,0x46 +.byte 0x8c,0x67,0xd9,0xc1,0xe7,0x58,0xc5,0x1d,0xc0,0xb3,0xc6,0xb2,0x2a,0xfb,0x70,0x04,0xa2,0x25,0x7f,0x75,0x3c,0xd5,0x8e,0x9c,0x33,0xa2,0xdc,0x20,0x4c,0x26,0x5b,0xbe,0xd9,0x00,0x5d,0xa2,0xbd,0x42,0xbd,0x0d,0xd6,0x52,0x79,0xb5,0x67,0xf6,0x27,0x62,0xc8,0x64,0x05,0xc5,0x0f,0xae,0xe1,0x78,0x39,0xd1,0xb5,0x28,0xe9,0xd4,0x2a,0xaa +.byte 0xd4,0xc4,0x3e,0x43,0x27,0x83,0xfa,0xdb,0x46,0x73,0x20,0xcd,0x2c,0xba,0x33,0xb4,0x77,0x10,0x32,0x3d,0x8e,0x56,0x88,0x81,0xe1,0x4c,0x8b,0x46,0x60,0xcb,0xb7,0x67,0xd7,0x7b,0xc2,0x47,0x7d,0xd8,0x2d,0x4c,0x09,0x9f,0x07,0x8e,0x34,0x45,0xf4,0x50,0x69,0xfd,0x35,0x0a,0x09,0x9e,0xac,0x49,0x5f,0xdf,0x72,0x84,0x97,0x93,0x30,0x2c +.byte 0xc6,0x20,0x6f,0xb5,0x18,0x03,0xb6,0x30,0x23,0xc8,0xcd,0xa1,0x43,0xbd,0xbb,0x6f,0xde,0xb3,0xcb,0x1c,0xdd,0x41,0x71,0xfa,0x37,0xa7,0xa9,0x57,0x5a,0xf7,0xee,0xcd,0xb1,0xc1,0xb6,0x78,0x1c,0xe3,0xde,0x5c,0x02,0xc8,0xce,0xb7,0x8e,0x72,0xce,0xfd,0x79,0xcf,0x1a,0xef,0xcb,0x5b,0x5d,0x3c,0x1d,0xc8,0x1e,0x9f,0x67,0x26,0x86,0xd3 +.byte 0x3b,0x98,0x49,0x04,0xcd,0x1b,0x48,0x7c,0xa6,0xbe,0x37,0x0b,0x19,0xb1,0xb7,0x8a,0x74,0x0a,0xd9,0x4f,0x7b,0xbb,0x8e,0xc6,0x9b,0xdd,0xbc,0x61,0xfd,0xdd,0x86,0x7e,0x70,0x2e,0xe4,0x94,0xb4,0x62,0x47,0x6b,0x7c,0x92,0x41,0xda,0x05,0xdc,0xaf,0x5c,0x93,0xbc,0x7d,0xad,0xce,0x44,0x9e,0x27,0x1c,0x74,0x30,0x01,0xf2,0x8a,0x22,0xce +.byte 0x88,0x61,0xf5,0xb8,0xe2,0xf0,0xca,0x14,0x21,0x53,0xd3,0xbe,0x95,0x8f,0x52,0x10,0x21,0xc5,0x25,0x16,0xa1,0x4f,0xef,0x9a,0x6f,0xce,0xe9,0xee,0x06,0xa8,0x32,0xa4,0xac,0xee,0xd8,0x95,0x0b,0x65,0x10,0xbc,0xb3,0x15,0x48,0xf9,0x96,0xee,0xde,0x5d,0xf6,0x38,0x5f,0x32,0x70,0xd1,0x29,0xa8,0x1d,0xdc,0xf4,0x34,0x2d,0x0c,0x93,0x48 +.byte 0x8c,0x40,0xed,0x35,0x41,0xfe,0x4b,0xab,0x20,0x7d,0x95,0x74,0x02,0xe5,0x71,0x76,0x7e,0x59,0x35,0xb3,0xd7,0x43,0x1f,0xd4,0xe6,0x02,0x86,0xba,0x4f,0x53,0xd9,0xc3,0x7d,0x7f,0x3d,0xb6,0xd8,0x92,0x07,0x89,0x99,0x46,0xf8,0x09,0xcd,0x19,0x43,0x93,0xa7,0xc1,0xb2,0x5d,0xec,0xbf,0x09,0xf4,0xba,0xfc,0xf7,0xf1,0xa7,0x2e,0xfe,0x71 +.byte 0x04,0x58,0xab,0x16,0xd7,0xc0,0xf7,0x03,0xd4,0xc4,0xb9,0xe4,0xd8,0xfc,0x5b,0x66,0xa6,0xb3,0x6a,0x94,0x0e,0xba,0x8c,0x54,0x5c,0x8c,0x02,0x0a,0x33,0xcb,0xde,0x1c,0xad,0x6d,0xef,0x48,0x05,0xa6,0xca,0x9a,0x27,0xd6,0x1c,0xc3,0xea,0x3a,0x46,0x20,0xec,0x72,0xc4,0x94,0x89,0x7e,0xba,0xa9,0x2f,0xe5,0xec,0x1a,0xe4,0x50,0x54,0xeb +.byte 0xd9,0x5a,0x08,0xc5,0x84,0xc1,0x9a,0xdf,0xb0,0xd4,0x9a,0x6d,0xa2,0x93,0x52,0xd2,0x4d,0x69,0x88,0xc8,0x40,0x2d,0x26,0xbd,0x7a,0x37,0x04,0x21,0xe1,0x9d,0xc9,0xed,0xda,0x7a,0x4c,0x11,0x49,0x14,0x42,0xa1,0xdb,0x6e,0xed,0x1b,0x37,0xbf,0x09,0xac,0x35,0xda,0x80,0xf6,0x75,0xd4,0x32,0x54,0xb5,0x18,0xe8,0x79,0x25,0xc4,0x95,0xe8 +.byte 0x74,0xcf,0x6d,0xac,0x34,0x1f,0xea,0xd4,0x2e,0xd1,0x77,0x5e,0x90,0x8f,0x12,0x51,0xbb,0x3c,0xdf,0xe6,0xf4,0x49,0x8c,0x0f,0x9a,0x8e,0xe3,0x96,0xbd,0xba,0xe6,0x47,0x4b,0x50,0xc7,0xa9,0x29,0xea,0x09,0x5d,0xef,0x3c,0x91,0x48,0xc6,0x37,0xfd,0xac,0x7b,0xe5,0x04,0x25,0x93,0x0b,0xe3,0xce,0x32,0x46,0x38,0x81,0x97,0x57,0xbe,0x1f +.byte 0x3c,0x61,0x2d,0xd1,0x4e,0xca,0xbb,0x44,0xc6,0xfd,0xdf,0xdd,0x11,0xbf,0xbf,0xa8,0xc0,0x32,0x67,0xc1,0x2e,0xd7,0xbe,0x3c,0xe3,0xcb,0x57,0xa5,0x6d,0xbb,0x8e,0x0f,0x69,0x22,0x42,0xef,0x53,0x0f,0xce,0x09,0x6a,0xda,0xbf,0xd6,0xed,0x61,0x67,0x82,0x83,0x13,0x63,0x97,0x7d,0x1a,0xad,0x34,0x77,0x37,0xa6,0xe0,0x89,0xaa,0xd4,0xb6 +.byte 0x8f,0x93,0xff,0xb8,0x8f,0x63,0x14,0xfd,0x17,0xff,0xe5,0x7c,0x83,0x23,0xaa,0xe0,0xb9,0xd9,0x94,0x3a,0x1a,0xe7,0xa5,0xbd,0xa6,0x2b,0xd3,0x49,0xca,0xeb,0x7d,0x87,0x1d,0x54,0x16,0x93,0xec,0x14,0x8b,0x77,0x3c,0xb4,0xbe,0x33,0x76,0x5e,0xcb,0x33,0x27,0xd3,0x20,0xd6,0xed,0x0c,0x66,0xb8,0xe0,0x00,0xa6,0x76,0xcd,0x8b,0xb4,0xef +.byte 0x11,0xbc,0xe5,0x59,0xcf,0x1d,0xf5,0x15,0x58,0x4a,0xe1,0xfd,0x87,0x8c,0x7b,0xb9,0xa4,0x42,0x5a,0xed,0x51,0x7e,0x8d,0xa6,0x19,0xaa,0xc4,0xa6,0x14,0x74,0x45,0xb1,0xda,0x87,0x0f,0xd7,0xe7,0x66,0x3b,0xcd,0x04,0x02,0x14,0x20,0x41,0x15,0x4c,0x33,0x79,0x80,0x7d,0xd4,0x44,0x2c,0xab,0x6c,0xf4,0xa8,0xd4,0x31,0x43,0x7b,0xa7,0xc7 +.byte 0x65,0x0e,0x32,0xc8,0xc8,0x6d,0xf5,0x65,0x1b,0x26,0xf1,0xe4,0x68,0x15,0x88,0x1b,0x00,0x60,0x23,0x31,0xd7,0x4b,0x57,0xda,0xf1,0x19,0xa9,0xd9,0xaf,0xe6,0xa9,0x1e,0x2c,0x0d,0x23,0xe4,0x5b,0xcb,0x43,0x38,0xf0,0x93,0xd3,0xfb,0x6a,0x9b,0x83,0x30,0x55,0x96,0x9f,0x53,0x06,0x3f,0xaf,0x40,0x69,0xef,0x9a,0x47,0x6b,0xba,0x7c,0x10 +.byte 0x10,0x44,0x89,0xfa,0xb9,0x9e,0x70,0xed,0x25,0x59,0x68,0xae,0x9b,0x17,0xcf,0x80,0x6f,0x34,0xb8,0x07,0x40,0xe5,0x27,0x6d,0xcd,0x46,0x2c,0x36,0x90,0xf3,0x83,0x74,0x68,0x35,0xf2,0x05,0xa8,0xdf,0x4e,0x34,0xc5,0xb4,0xeb,0x5a,0x7d,0xe6,0x10,0x8a,0x23,0x54,0xeb,0x9b,0x27,0xf2,0x07,0xee,0xf9,0x05,0xc2,0x5a,0x88,0xbd,0x49,0x2e +.byte 0x1b,0x00,0x31,0x68,0x4a,0xc9,0x3a,0xc5,0x93,0x82,0xa8,0x39,0xba,0x55,0xcd,0xc1,0xda,0x49,0xc2,0x4c,0xf4,0x93,0x00,0xcf,0x61,0xa4,0xbb,0x8c,0x64,0x33,0x90,0x14,0x6d,0x1d,0xad,0x75,0x97,0xd9,0x1d,0xfb,0x27,0x67,0x43,0x04,0xdc,0x4e,0xdf,0x0e,0x0c,0x7e,0x1c,0x89,0xfe,0x31,0xb7,0x9b,0x07,0x5e,0x99,0x08,0x22,0xef,0x6e,0x4d +.byte 0x8b,0xd6,0x27,0xe6,0x24,0x1a,0x28,0xb0,0x22,0xa5,0x69,0x17,0x82,0x46,0xe3,0x90,0xe8,0x04,0xae,0x90,0x66,0x14,0xec,0xa2,0x1b,0x7e,0x09,0x13,0x32,0x9d,0xec,0x8b,0x51,0x5f,0xa8,0x96,0x8f,0x4c,0xc6,0xbd,0x5c,0x70,0x29,0x21,0xac,0xe9,0x6e,0xb0,0x0c,0x61,0x50,0xba,0xcc,0x55,0x71,0xda,0x2a,0x92,0x86,0x0c,0xff,0xaf,0x7a,0xcf +.byte 0xaf,0x2a,0xbd,0xd6,0x15,0xa4,0x4c,0x2e,0x76,0x0d,0xcf,0x10,0x11,0x4a,0xd1,0x89,0xdd,0x46,0x5f,0x6b,0x5a,0x02,0x05,0x49,0x6f,0x98,0x6a,0xa7,0x8a,0x66,0x87,0x59,0x23,0xb5,0x3f,0x2e,0x95,0x73,0xfe,0x48,0xe9,0x0d,0x17,0xa6,0xa5,0x4e,0x40,0x98,0x79,0x40,0x1a,0x10,0x1d,0x84,0xdd,0x6f,0x17,0xa7,0xb7,0xfb,0x49,0xbd,0x54,0x97 +.byte 0x0f,0x42,0x25,0x95,0x83,0xf0,0x97,0xe7,0x4c,0x24,0xb5,0xe8,0x23,0x0a,0xd6,0xbf,0xef,0x2c,0x03,0x4f,0x87,0x59,0xe8,0x80,0x87,0xcc,0x51,0x1b,0x94,0xd8,0x60,0xe7,0x10,0x4d,0x01,0xfd,0x83,0xf2,0xd8,0x8d,0x1b,0x33,0xbf,0xaf,0x36,0x41,0x47,0x51,0xe0,0x45,0x2a,0x05,0x5f,0xe1,0x92,0xf8,0xa5,0x15,0x46,0x35,0xd8,0x9b,0xe0,0xff +.byte 0xee,0xa6,0x4e,0x7d,0xfd,0x96,0xa5,0x75,0xdf,0x7e,0xb0,0x7d,0x14,0x73,0xdd,0xbe,0x17,0x6d,0xdd,0xec,0xac,0x9a,0x92,0x68,0xe3,0x44,0x16,0x63,0x22,0xa8,0x15,0x58,0x8c,0x11,0x23,0x46,0x18,0xae,0x47,0x39,0x87,0xc7,0x4c,0x30,0x09,0xce,0xe5,0xc4,0xd8,0x82,0xc6,0xc6,0x3d,0x31,0xf6,0x0f,0xb5,0x69,0x61,0x63,0x88,0xd6,0xb8,0xda +.byte 0x89,0x29,0x87,0x69,0x6e,0x3f,0x55,0x2f,0xbc,0x91,0x91,0x43,0x7d,0xb3,0x7b,0x99,0x5a,0x5a,0xb0,0x7d,0x90,0xa7,0xe7,0x30,0x0d,0x32,0xb2,0x43,0x43,0x78,0x59,0x6e,0xbb,0xd7,0x76,0xd4,0x5b,0x4d,0xc4,0xa9,0x99,0xdd,0xd3,0xce,0x3d,0x13,0x41,0x38,0x33,0xed,0xb8,0x76,0x1a,0xbb,0xfd,0x26,0xcd,0x69,0x89,0x22,0x16,0x9a,0x21,0x35 +.byte 0x38,0x77,0x14,0x10,0x42,0x17,0x1f,0xa1,0xbf,0x55,0xb4,0x51,0x62,0x15,0xac,0xd0,0xa2,0x71,0xe4,0x32,0x89,0x33,0x8b,0x74,0xc6,0x61,0x38,0xd0,0xfe,0x28,0x69,0xe6,0x88,0x1b,0x11,0x7e,0x46,0x39,0xba,0x24,0xdd,0x1f,0x61,0xf4,0x74,0xad,0x58,0x94,0xa9,0x3e,0xc7,0x2a,0x9e,0xc0,0xe1,0x1c,0xee,0x21,0xab,0x3e,0x65,0x0c,0xe8,0xd8 +.byte 0x71,0x52,0xf3,0x6c,0x64,0x53,0x75,0x17,0x87,0x55,0x14,0x42,0x25,0x7f,0xe7,0x0d,0x89,0x1b,0x77,0x26,0xc4,0xaa,0xcc,0x91,0x47,0xe5,0x54,0xae,0x1a,0x0d,0x04,0x99,0xeb,0x56,0xd8,0xb4,0x6d,0xeb,0xec,0x2f,0x6c,0xc5,0x8e,0x76,0xe1,0xa0,0xa7,0x42,0x06,0xc9,0xc3,0x03,0xee,0xa9,0x9b,0x1e,0xfc,0x11,0xf5,0x2f,0x2b,0x14,0xb8,0x9f +.byte 0x87,0x61,0x9b,0xc7,0x38,0x0e,0x58,0xf1,0xd4,0x36,0xca,0x82,0x85,0x9c,0xde,0xec,0xd3,0x1e,0x29,0x4e,0x70,0x9e,0x9a,0xe0,0x8b,0x6f,0xfe,0xd0,0xe9,0x95,0x51,0xcf,0x36,0x31,0x9c,0xff,0x63,0xc6,0x04,0x8e,0x61,0xc2,0xcb,0x3a,0xfa,0xd0,0xd7,0x29,0xbd,0xe7,0x8a,0x2b,0x8e,0xa0,0xac,0x58,0x93,0xb3,0x52,0xca,0x80,0x17,0xd2,0x2d +.byte 0x93,0x5f,0xe0,0x8a,0x47,0x3c,0x67,0x95,0x64,0x91,0xa4,0x76,0xa4,0x5f,0xfa,0x93,0x4d,0xc7,0x6e,0x5d,0x23,0x9f,0xe1,0x4a,0x16,0xff,0xa5,0xf0,0x94,0xa8,0x02,0xcc,0x9a,0x84,0xd5,0x9d,0xb6,0xe5,0x7c,0x76,0x3f,0xc9,0xfd,0xdc,0x8e,0x59,0x9a,0x22,0x18,0x3c,0xe6,0x90,0x85,0x10,0x73,0x2d,0x65,0xa7,0xa7,0xe1,0xeb,0xc5,0x05,0x24 +.byte 0x1e,0x0b,0x31,0x19,0xb5,0xb0,0x8d,0xc0,0xb5,0x04,0xfe,0x9d,0xfa,0xf7,0xcd,0x71,0x29,0x40,0x19,0x23,0xed,0x2c,0xdb,0x89,0x89,0x8d,0x69,0x22,0x4c,0x9c,0xa7,0xf7,0xb1,0x56,0x87,0xa3,0x44,0xa9,0xa3,0x16,0x28,0xce,0x94,0x40,0x6f,0x71,0x77,0x0e,0x6d,0xe9,0x78,0xa2,0x2a,0x17,0x45,0x03,0xeb,0x1e,0xf1,0xfa,0x56,0x3e,0xa7,0x6b +.byte 0x08,0x06,0x6a,0xcb,0x8f,0x5e,0x0f,0xd3,0x6e,0x4b,0x21,0x31,0x73,0x50,0x94,0x56,0xf9,0xb9,0xc7,0x38,0x69,0xe8,0x09,0x3f,0x03,0xb3,0xb5,0xe8,0x2a,0x5e,0xf6,0xad,0xae,0x6f,0xab,0x6a,0x49,0xdd,0x93,0x6d,0xfb,0x8b,0xde,0xea,0x8b,0xb0,0xa1,0x44,0xf0,0xb3,0xf6,0xaa,0xe3,0xc8,0x04,0x87,0x9f,0x8b,0xee,0xab,0x13,0x1d,0x2d,0xeb +.byte 0x09,0x62,0x21,0x49,0x5f,0xb6,0x95,0xab,0xc4,0xee,0x69,0xfb,0x31,0xff,0xbf,0x1a,0xa6,0x4c,0x67,0x66,0x84,0xe6,0x0c,0xb7,0xb2,0x3e,0x3f,0xa4,0xb3,0x52,0xde,0x15,0xc9,0xa7,0xa9,0xb5,0x0d,0xe5,0x0b,0x99,0xa6,0xb6,0x8f,0x69,0xc5,0x6d,0x6c,0xbb,0x83,0x89,0x4e,0xfc,0x49,0x79,0x4d,0x46,0x31,0xa0,0x09,0x5f,0x5d,0xd0,0x5b,0x80 +.byte 0xa1,0xf4,0x36,0x48,0x97,0x6a,0xfd,0x34,0xcb,0x20,0xa8,0x01,0x25,0x04,0xe7,0x13,0x12,0x87,0x66,0x27,0x96,0x36,0xba,0x92,0xbd,0xda,0x94,0x11,0xef,0x90,0xbd,0xbc,0x9e,0xf9,0x63,0xb3,0xa6,0xc1,0xbb,0x46,0xe8,0x86,0x3f,0x2d,0xf9,0x11,0x3a,0x23,0xa8,0x7a,0x33,0x41,0x3e,0x2e,0x5d,0xde,0xc0,0xd2,0x23,0xca,0x41,0xa0,0xb9,0x70 +.byte 0x6d,0x31,0xf3,0x89,0x87,0x9b,0x72,0xd9,0x15,0x4d,0x8b,0x51,0xdd,0x56,0xa1,0xb4,0x68,0x52,0x65,0x81,0x12,0x46,0xea,0x24,0xb4,0x34,0xcc,0xa0,0xdb,0x7d,0x96,0xd9,0x8e,0x64,0x61,0x10,0x7c,0x2a,0x00,0x4d,0x82,0x61,0x54,0xa4,0x70,0x3d,0x9c,0xa5,0x0b,0xd2,0x08,0x71,0xa8,0x94,0xb1,0xb4,0x30,0x61,0x59,0x9f,0x72,0x61,0x56,0x2d +.byte 0xa3,0xf4,0x9d,0x1c,0xfc,0x49,0x9d,0x39,0x27,0xcb,0x54,0xb2,0xce,0x3c,0xb6,0x76,0xe5,0x8e,0xa5,0xe7,0x08,0xd4,0xc7,0x2c,0xa6,0x28,0xc8,0x3e,0x22,0x14,0x06,0x75,0x68,0x0d,0x6b,0xb5,0xa3,0x68,0x14,0x17,0xfe,0xb8,0xcc,0x26,0x5b,0x9d,0x0b,0xcc,0x3e,0xd7,0x6c,0xe0,0xec,0x5e,0x1e,0x1e,0xb8,0x9a,0xbe,0x91,0xb5,0xa6,0xb5,0x83 +.byte 0x28,0xc2,0x35,0x65,0xd3,0xde,0xdd,0x71,0x29,0x13,0xc1,0xee,0x78,0x22,0x34,0x0b,0x77,0x3a,0x48,0x98,0x26,0x43,0xc2,0xce,0x03,0xe8,0x75,0xf8,0x8a,0xdf,0x6a,0xb0,0xb4,0x8c,0x11,0x8c,0xe5,0x95,0x96,0x17,0xfb,0x06,0x5e,0x8f,0x36,0x10,0xc5,0x04,0x43,0x1b,0xed,0xd3,0xad,0xd4,0xa4,0xe0,0x17,0x85,0xed,0x9b,0xd8,0xae,0x98,0x46 +.byte 0x58,0x57,0x0e,0x46,0xea,0x3f,0x07,0x6d,0x0e,0x46,0xda,0x2f,0x68,0x2b,0xd6,0xe7,0x0d,0x4b,0xbe,0x32,0xee,0x10,0x73,0x18,0x7d,0x6b,0x2d,0x04,0x27,0x72,0xb1,0xe1,0xbf,0x89,0xaa,0x4d,0x1a,0xfc,0xbd,0xf2,0xc3,0x9f,0xf0,0x01,0x85,0x62,0x09,0x4d,0x08,0x2c,0x57,0x9a,0x7b,0xad,0x0b,0x79,0xff,0x14,0xa1,0x45,0xde,0x21,0x8f,0xe2 +.byte 0x93,0xd0,0x35,0x26,0xc3,0xbc,0x8c,0xb7,0x57,0x6a,0xdf,0x98,0xa7,0x75,0xc6,0xf6,0x4b,0x5f,0x91,0x6e,0x71,0x3a,0x5c,0x5f,0x57,0x63,0x34,0x87,0xf8,0x20,0x6a,0xa1,0xbf,0xf8,0xca,0x8e,0xf9,0xa9,0x10,0x8b,0xab,0x0b,0xc2,0xcc,0x71,0x89,0x7c,0xef,0x70,0x3a,0xb0,0xf6,0x90,0xcc,0x6b,0x2c,0xcc,0x8b,0x2a,0x21,0x78,0x23,0xa0,0x71 +.byte 0x8c,0x7b,0xc1,0x0f,0x27,0x72,0x40,0xe4,0x9e,0x35,0xf3,0x0a,0xc0,0x7e,0x7f,0xe5,0x9b,0xdb,0x93,0x49,0x08,0xc3,0x6b,0xb7,0xea,0xea,0xd4,0x5a,0x96,0x97,0x3c,0xdf,0xc7,0x02,0x39,0x9f,0xa3,0xca,0xdd,0x62,0xf3,0x68,0xc7,0xae,0x37,0xc1,0x35,0x73,0xb2,0x5d,0x99,0xe4,0xae,0x27,0x55,0x5e,0x6a,0xae,0x6f,0x1a,0x95,0x51,0xb1,0x3b +.byte 0xd7,0xb4,0x4d,0x3d,0x88,0x54,0x01,0xbe,0x2c,0x12,0x17,0x29,0x4f,0xf3,0xed,0x5a,0x1f,0xa9,0xf0,0x67,0xbd,0x7c,0xad,0xe5,0x58,0x52,0xd4,0xd1,0xfe,0x1e,0x1b,0xd6,0xce,0x7c,0xc3,0xa2,0xa9,0x72,0x9b,0x6a,0xe5,0xf9,0x39,0x22,0xaa,0x7f,0x2e,0xa2,0x53,0x75,0xf0,0x99,0x2e,0x36,0x86,0x83,0x10,0x63,0xd7,0xac,0xa3,0x52,0xa6,0x23 +.byte 0x80,0x46,0xe4,0xa9,0x07,0x79,0xe1,0x61,0x75,0xbf,0x08,0x31,0x6c,0xdd,0xe1,0x30,0xd0,0x35,0xc2,0xbd,0x30,0xb8,0x85,0xf3,0xd2,0x2c,0x90,0x7a,0xf0,0xd3,0x80,0xe5,0xf1,0xc2,0x58,0x3d,0xf7,0x3c,0xbc,0xff,0x03,0x4d,0xf7,0xad,0x2f,0xa6,0xfe,0x73,0xde,0xa8,0x60,0xd7,0x89,0x4a,0xcf,0x3d,0xf3,0xab,0x62,0xfa,0x9d,0x46,0xad,0xd0 +.byte 0x97,0x6f,0x89,0x84,0x16,0x9b,0x84,0xb2,0x6c,0x63,0x6d,0x29,0xee,0x8e,0x97,0x3c,0x48,0x19,0x92,0x62,0xdc,0x1d,0x35,0x9d,0xec,0x01,0x00,0x64,0xbf,0x4d,0x8b,0xa3,0x13,0x48,0x9f,0xb4,0x01,0x0d,0xb1,0xc4,0xf2,0xf2,0x6a,0x84,0x1a,0x07,0x3c,0x46,0xa6,0xb5,0x41,0x9a,0x32,0x7e,0xc3,0x4f,0x87,0x95,0x71,0x7a,0xbf,0x74,0xf8,0x0b +.byte 0xfb,0xa5,0xde,0xa8,0x35,0xf1,0xcb,0x04,0x8d,0x8b,0xd3,0xb0,0xc8,0x1d,0x6c,0xaf,0xb4,0x21,0x79,0x1c,0x34,0x71,0x2f,0xf5,0xc4,0xbe,0xad,0xbc,0xaf,0x2f,0x54,0x81,0xd9,0xf8,0xff,0x59,0xf9,0x4e,0x62,0x9f,0x7d,0x7c,0xe9,0xdc,0x67,0xae,0xa3,0x32,0x4b,0xf7,0x4e,0x53,0x4c,0x55,0x7d,0xc5,0xdd,0xd4,0x5d,0x93,0xb8,0x98,0x3e,0xd3 +.byte 0x15,0x65,0x52,0x78,0x5a,0xd2,0x21,0x84,0x5d,0x28,0xaf,0x44,0x7d,0x18,0xf8,0xdd,0x5c,0xc3,0x6e,0xc8,0x05,0x05,0x30,0xd0,0x82,0xf8,0x00,0x0f,0x3d,0x5c,0x62,0x7e,0xa6,0xd5,0x7b,0x9f,0xb1,0x44,0xb7,0x0d,0x22,0x81,0xe1,0x4a,0x2b,0x79,0x7e,0x39,0x4d,0x8a,0x9a,0xfd,0x94,0x0c,0xf7,0x23,0x10,0x99,0xd2,0xd2,0x8b,0x98,0xe5,0x9d +.byte 0xb0,0xbf,0xcf,0x06,0x08,0x80,0x32,0x69,0xfd,0x81,0x5f,0xb3,0x66,0x11,0x63,0xeb,0x30,0x1d,0xcd,0x5b,0x5b,0xec,0x0c,0xca,0x30,0x37,0xa0,0x82,0x79,0x75,0x87,0xc1,0xfa,0x5b,0x38,0x4b,0xe3,0xea,0x46,0x49,0x36,0x92,0x92,0xf0,0xc9,0x15,0xa5,0xec,0x9e,0x21,0xb6,0x9f,0xb4,0x6d,0xf6,0xef,0x5c,0x2f,0x7d,0xa4,0xb3,0x25,0xfb,0x13 +.byte 0x40,0xe1,0xa0,0x20,0x4a,0x3a,0xe2,0x3e,0xf5,0xe0,0x68,0x61,0x11,0x9a,0xfb,0x1e,0xe8,0x1b,0xe0,0x17,0x9c,0x8a,0xe5,0x53,0x74,0xdd,0xec,0xc6,0x03,0xc6,0xd0,0x9b,0xc2,0x0b,0x77,0x4c,0x36,0x2b,0xac,0x4e,0x4d,0xd2,0x26,0x70,0x39,0x96,0xb4,0x11,0x1a,0x5b,0xcc,0x3f,0xb9,0xcf,0x0d,0x04,0x55,0x05,0x00,0x66,0x8f,0xa9,0xec,0x31 +.byte 0xe5,0x47,0x4c,0x9b,0xb7,0x6e,0xa5,0xe7,0x9e,0x70,0xf4,0x02,0x2a,0x3c,0xa2,0x03,0x04,0x30,0x9e,0x3f,0x7c,0xaa,0x0a,0x8f,0x55,0x61,0xca,0x50,0x35,0xe6,0xa4,0x24,0x61,0x26,0x31,0x9e,0x9e,0x77,0x0d,0x15,0x3a,0xc0,0x88,0x32,0xb5,0xbb,0x3d,0x3e,0x59,0x25,0x52,0x81,0x2e,0x4b,0xc6,0x5d,0x9f,0x87,0x0f,0x1f,0x5e,0xec,0xdd,0xbe +.byte 0x32,0x6c,0x71,0xef,0xd2,0x9c,0xfd,0x70,0xc8,0xf6,0x1f,0xb9,0xc9,0xdd,0x4d,0x39,0x61,0x92,0xbd,0x0c,0x48,0x63,0x4b,0xd2,0x2b,0x8c,0x4b,0x35,0xb1,0x8e,0x04,0x44,0x3c,0xe1,0xde,0xfd,0x6e,0xde,0xeb,0x94,0x51,0xea,0x36,0x7b,0xc6,0x87,0x15,0x34,0x68,0xa0,0xb8,0x94,0xb6,0x56,0x33,0xf4,0xab,0x84,0xed,0x1c,0x36,0x91,0xa7,0x1b +.byte 0x03,0xca,0x48,0x64,0x16,0x5b,0x4b,0x69,0x47,0xae,0xd7,0xc9,0xcf,0x74,0xd2,0xbd,0x60,0x04,0x7c,0x66,0xe9,0x12,0x92,0x40,0x78,0x23,0x0b,0x5b,0xa0,0xda,0xf7,0xe4,0x9a,0xad,0x9c,0x31,0xe7,0xaa,0xad,0x5a,0xc3,0x45,0x00,0x6c,0xd3,0x4d,0x93,0xdf,0xb6,0x68,0x11,0x3f,0x2a,0xbc,0x9a,0x8d,0xeb,0x0f,0xb5,0xa9,0x8e,0xa5,0x2c,0x99 +.byte 0x94,0x8d,0x21,0xa9,0x41,0x6b,0x11,0x2e,0x02,0x21,0xd8,0xc1,0xbc,0xf0,0x2a,0x87,0xae,0x35,0xa9,0x78,0x5c,0x43,0xb8,0xb7,0x63,0x2d,0x09,0x31,0xae,0x6f,0xfc,0x39,0x7b,0x18,0xc3,0xce,0xe3,0xfa,0x51,0x70,0xc7,0x6b,0x5e,0xc3,0xce,0xc8,0xa2,0x3a,0x66,0x9e,0xfe,0x45,0xb4,0xa2,0xaf,0x81,0x03,0x74,0xbf,0x0c,0x65,0x4c,0x30,0x27 +.byte 0xd5,0x34,0x29,0x2d,0x83,0xa8,0xb9,0x1d,0xf8,0x12,0x09,0x51,0xdd,0x0e,0x66,0x95,0xf3,0x94,0xaa,0x83,0x3a,0x6f,0x8a,0x7c,0x3a,0x29,0x82,0xbb,0x80,0xa1,0x37,0x8c,0x79,0xf4,0x4a,0xa8,0xe4,0x17,0x72,0x77,0xee,0xc4,0xaa,0x25,0xd3,0x8f,0x2e,0xaf,0xb9,0xb2,0x3c,0xa6,0xd5,0x72,0x97,0x07,0x23,0x38,0xae,0x9e,0x22,0x08,0x85,0x70 +.byte 0xfa,0xff,0x38,0xe6,0x96,0x9f,0x2c,0x11,0x14,0x16,0x9a,0xfa,0x5a,0x7b,0x05,0x31,0x3e,0x20,0xbf,0x4d,0x87,0xaa,0xba,0x94,0xcd,0xdb,0xeb,0xec,0x29,0x58,0x4e,0x43,0x12,0xe8,0xf9,0x01,0x50,0xc8,0x51,0x7a,0x61,0x12,0xe9,0xed,0xc2,0xd6,0x2e,0xd3,0xed,0x54,0x72,0xf7,0x1b,0x0c,0x8c,0xb4,0x65,0xea,0x22,0x31,0x22,0xeb,0xcd,0x53 +.byte 0x66,0xf1,0xa5,0x34,0xe9,0x81,0x74,0xcb,0xb5,0x6b,0x45,0x71,0x69,0x6d,0x84,0xe8,0xc6,0x86,0xc9,0xdd,0x0c,0xa4,0x30,0x12,0x08,0x42,0x10,0x6b,0xcd,0x65,0x6c,0xfd,0x9c,0xde,0x77,0x3c,0x32,0x09,0xef,0x99,0x27,0x0e,0x4a,0x72,0x03,0x8d,0xb5,0x68,0xa0,0x67,0xf7,0xc2,0xae,0xb8,0xce,0x41,0x70,0x4e,0xdd,0x13,0xcb,0x3f,0x05,0x4e +.byte 0xf4,0xbc,0x88,0x98,0x2f,0x42,0x4e,0x5f,0x3e,0xcb,0x2c,0xd3,0x2f,0xb8,0x92,0xbb,0xd8,0x95,0xc8,0xaf,0xa9,0x44,0x8b,0xf0,0x2f,0x81,0xd4,0xe7,0x06,0x19,0xf7,0xa7,0x0a,0x73,0x3e,0x30,0xd9,0x00,0xe4,0x2d,0x76,0xb1,0x0d,0xfa,0x12,0x1f,0xbe,0x59,0x4f,0xf7,0xc8,0x5b,0xab,0xd7,0x16,0x3d,0x7e,0x97,0x9e,0xec,0xf8,0xcb,0x31,0x2e +.byte 0xe0,0x41,0x0b,0x00,0xa6,0x6d,0xe9,0x5e,0xd5,0x4a,0xc5,0xbf,0x1c,0xcc,0xa5,0x71,0x94,0x29,0x3d,0x17,0x43,0x27,0x63,0xc4,0xc7,0x8f,0x1b,0xb7,0x5f,0xcf,0xdf,0x8e,0x6a,0x69,0x87,0xc1,0x29,0xab,0x7b,0x8d,0xdf,0x07,0x95,0x50,0xa3,0x1c,0x8e,0xdc,0x7f,0x8a,0x21,0x37,0x1e,0x26,0xa7,0x67,0x28,0xb2,0xc8,0x23,0x5a,0x1d,0x94,0x46 +.byte 0x1b,0x3e,0x72,0x87,0x73,0x08,0xe2,0x3b,0x46,0x51,0xbe,0x5b,0xa9,0x72,0xb9,0xf8,0x45,0x6d,0x0c,0x89,0x80,0x0d,0x7a,0xfb,0x4c,0x3f,0x7f,0x3d,0x29,0xff,0xef,0xb2,0xec,0x23,0xc2,0x26,0xcf,0x8c,0x2e,0x28,0xbf,0xc5,0x68,0x47,0xd9,0x49,0x95,0xf1,0x67,0x7e,0x3a,0x48,0xe2,0x43,0x5c,0xc8,0x95,0x5b,0xb2,0xf3,0x22,0xc9,0x73,0x91 +.byte 0xb5,0x78,0x96,0x1b,0x9a,0x75,0x5f,0xb2,0x6b,0x8c,0x66,0x8c,0x8e,0xc1,0xe1,0xde,0xd6,0x64,0x31,0xe1,0x7b,0x12,0xd2,0x85,0x8f,0x52,0x68,0xec,0x80,0x26,0x3d,0xcc,0x9b,0xe3,0x57,0xbe,0x19,0x42,0xb9,0xdd,0x7d,0x2b,0x5b,0x6d,0x1b,0x9e,0x96,0xd7,0x75,0x83,0x82,0x3c,0x3e,0x5f,0xf8,0xa9,0x36,0xbe,0x14,0xc7,0xce,0x9d,0x05,0x7e +.byte 0xd7,0x38,0x37,0x35,0xc9,0x37,0x8b,0x9f,0xc6,0x2d,0xff,0x00,0x41,0xff,0x1b,0x09,0xea,0xd2,0xb0,0x04,0x48,0xff,0xfc,0xb5,0x67,0x54,0x39,0x3d,0x23,0x68,0x0b,0x7d,0x97,0xf3,0x65,0x20,0xa2,0xf8,0x33,0x96,0xd1,0xf4,0xc7,0xba,0x6f,0x00,0x95,0x36,0xf6,0x33,0xd1,0x8d,0xde,0xee,0x1e,0xfa,0x60,0x8e,0x5e,0x4c,0x70,0xbb,0x53,0x79 +.byte 0xc9,0x9a,0xdf,0x3c,0x53,0xe4,0x35,0x87,0xc3,0xe6,0x8e,0x0e,0x1a,0xd0,0xf8,0x57,0x2b,0x33,0x51,0x4d,0x7d,0x43,0x17,0x3e,0x6f,0x0e,0xca,0x86,0xb2,0xc6,0x09,0xf3,0x2f,0xc1,0x5f,0x0e,0x9a,0x5e,0x7d,0x9d,0xf7,0xff,0x09,0x46,0xe5,0x30,0x91,0x61,0x93,0xb5,0x2f,0xc5,0x7f,0x09,0x0b,0x55,0x94,0x17,0x25,0x19,0x9b,0xa9,0x0e,0x68 +.byte 0x71,0x18,0x1b,0x4b,0x1b,0xa3,0x75,0x90,0x56,0x96,0x5e,0x33,0x71,0xf2,0x06,0x69,0x07,0x04,0xcb,0x8c,0x79,0x9b,0xa5,0x17,0xd8,0xd8,0x77,0xc7,0xca,0x95,0x58,0x12,0xec,0xdd,0x41,0xc9,0x12,0x16,0x9a,0xc4,0xf0,0x27,0x7a,0x8e,0xeb,0x19,0x79,0x27,0x7b,0x2e,0x55,0x96,0x57,0x19,0xbe,0x55,0x8c,0x7f,0x97,0x90,0x80,0x40,0x5d,0x5a +.byte 0xf6,0x07,0xd6,0xb4,0xc5,0xe8,0x0e,0x54,0xde,0x78,0x23,0xca,0x39,0x90,0x42,0xb6,0x8b,0x14,0x22,0x06,0x71,0x77,0xd5,0xf7,0x8d,0x05,0x9d,0xbf,0xfe,0x38,0x91,0xba,0x79,0x85,0x30,0x47,0x25,0xf0,0xa2,0x72,0x55,0x94,0x2a,0x8a,0xc8,0x28,0xc8,0xa9,0x23,0xab,0xf0,0x4e,0x49,0x2f,0x58,0x53,0x35,0xd1,0xb6,0x16,0x81,0xc2,0x25,0x18 +.byte 0xd9,0x71,0x91,0xc4,0x81,0x3e,0xf4,0xd7,0x87,0x9e,0x57,0x78,0xf7,0x7d,0x4b,0xb2,0xfd,0x91,0x9f,0xa8,0x0e,0x77,0xb3,0xc7,0xe5,0x6a,0x95,0x17,0xc3,0xf4,0xcb,0x7f,0x96,0xc1,0xa8,0xee,0x6a,0x0f,0x1f,0x5d,0x20,0x28,0x93,0xe5,0xf3,0x13,0x46,0x53,0x47,0x9f,0x98,0xc6,0xf5,0x29,0x69,0xb9,0x83,0x36,0x03,0xa1,0x9a,0xb4,0xa9,0x4e +.byte 0xd6,0xda,0x25,0xe2,0x5b,0xbb,0x95,0xdf,0x0f,0x37,0x0b,0x02,0x51,0x03,0xd1,0x0e,0x84,0xef,0xdd,0x85,0xdd,0xae,0x10,0x32,0x65,0x03,0x65,0xf0,0x8e,0x0c,0x69,0x90,0x35,0x26,0x36,0xe8,0x05,0x46,0xe6,0xce,0x52,0x4d,0xb5,0x93,0x9f,0xe3,0xe5,0xb0,0x43,0x57,0x32,0x5d,0xca,0xd4,0xc9,0x89,0x2e,0x5b,0x03,0x8a,0x82,0x78,0x21,0x6b +.byte 0x41,0xa9,0x0a,0x9f,0xe0,0x50,0xec,0x72,0x01,0x67,0xe7,0x1c,0x92,0xe3,0xe4,0x83,0x4d,0x4b,0xcf,0x01,0x37,0x2f,0x34,0x86,0xcf,0x36,0xf7,0x3a,0x57,0xa3,0x89,0x73,0x0f,0x9c,0x06,0x82,0x75,0x7a,0x4b,0xd8,0x44,0x40,0xf2,0xc5,0xc4,0x22,0xa6,0x99,0x1b,0x73,0x2f,0xad,0x09,0xe9,0x84,0x6f,0xc3,0xca,0x72,0x3a,0x8a,0x55,0x55,0x0a +.byte 0xcd,0x33,0x51,0xef,0x5b,0x36,0x77,0x6c,0xb4,0x4a,0xae,0xdd,0xbd,0xec,0x65,0x99,0x43,0xd6,0x8a,0x16,0xba,0x89,0x4d,0x0c,0x11,0xb4,0x0d,0x5d,0x3e,0x76,0xcb,0x48,0x9d,0x31,0x40,0x71,0xe2,0xe4,0xa9,0xd9,0x6e,0x3c,0x3d,0xd1,0x6e,0xaf,0xb9,0x28,0x71,0x5a,0x07,0x6f,0xab,0xdb,0xf8,0x4f,0x11,0xbc,0xe0,0x14,0x01,0x43,0x4d,0xe2 +.byte 0xad,0x5d,0x2a,0xb2,0x58,0x66,0x05,0x50,0x66,0xf6,0x2f,0x66,0x11,0xd1,0xd7,0x05,0x85,0xb0,0x7f,0xa8,0x89,0xbd,0x41,0xda,0x35,0x1e,0xbb,0xff,0x70,0x1a,0xe8,0x65,0x96,0xe9,0x50,0x18,0x7f,0x4c,0xb2,0xe2,0x95,0x26,0xf6,0x37,0x09,0x8c,0x8d,0x7b,0x02,0xb0,0x7f,0x32,0xb5,0x70,0x22,0xd6,0x83,0x0b,0x85,0x25,0x00,0xc5,0x55,0x3f +.byte 0xfa,0x7a,0xc9,0xaf,0x87,0xc1,0x1c,0x11,0x96,0x71,0x18,0xd8,0xdb,0xab,0x86,0x57,0x0a,0x16,0x23,0x32,0x40,0xd3,0xaf,0x17,0x55,0xe3,0xe7,0x01,0x65,0x1f,0x87,0xda,0xb5,0x46,0x67,0x18,0x34,0xcc,0x28,0x77,0xc3,0x12,0x62,0x6c,0x8b,0x8a,0x11,0x7a,0x5a,0xd1,0xdf,0xb3,0x13,0x6b,0x29,0xce,0xf8,0x03,0xba,0xad,0x7c,0x14,0x60,0x42 +.byte 0x17,0xf6,0x7b,0x0c,0xb7,0x5f,0xd6,0xc1,0xb5,0xa5,0x2b,0xb1,0x9f,0x6c,0x65,0x29,0xe5,0xf4,0x84,0x85,0x11,0x82,0xf1,0x4c,0xcd,0xff,0x99,0x29,0x53,0x7b,0x43,0x04,0x60,0xc4,0x6c,0x01,0x5c,0xcb,0x33,0x4f,0xdb,0xc4,0xad,0x8c,0xea,0xff,0xd6,0xcd,0x8e,0x85,0x6e,0x54,0xd5,0x18,0x63,0x84,0x78,0xea,0xff,0x08,0x95,0xdc,0x2a,0x07 +.byte 0xac,0xea,0x44,0x79,0x52,0x07,0xf3,0xf1,0x03,0x7f,0x71,0x53,0xd8,0x85,0xdb,0x70,0xde,0x5e,0xd5,0x9a,0x18,0x9f,0xcc,0x3f,0xc0,0xc0,0x49,0x82,0x70,0x09,0xce,0x29,0x04,0x0a,0x19,0x81,0xd9,0x81,0x22,0x71,0x48,0x8e,0x79,0x08,0x1c,0xb4,0xc8,0x7e,0x60,0x43,0x4a,0xe3,0xd5,0x6b,0x09,0x5c,0x01,0x6e,0x20,0x9e,0xd2,0xaf,0x80,0xb7 +.byte 0xa2,0x0a,0x5b,0x26,0x08,0x32,0x73,0xbc,0xc6,0xfd,0x06,0xaa,0x2e,0x55,0xa0,0x5b,0xa9,0x3c,0x85,0xb2,0x04,0xdc,0x9a,0x94,0x02,0x93,0x96,0x6b,0x3e,0xc3,0x5e,0x37,0x9b,0x6f,0xef,0xb9,0x65,0x52,0x42,0x1c,0xa7,0x84,0x09,0x0c,0x49,0x3a,0x95,0x06,0x94,0xd7,0xc7,0x40,0xf5,0xf1,0x69,0x41,0xfb,0xf8,0x57,0xb5,0x1e,0x0c,0xf3,0xd9 +.byte 0xb1,0x2e,0x58,0x33,0xbe,0xb1,0x3d,0x61,0xc6,0xca,0x01,0xe5,0xda,0x60,0x8f,0x87,0xf7,0x9a,0xb5,0x92,0xb4,0x8c,0x2a,0xaf,0xd4,0x1e,0x9c,0x97,0x39,0x83,0x99,0x4a,0x07,0x54,0x75,0x7d,0xde,0x72,0x06,0xc1,0x8f,0xb4,0xde,0x12,0x43,0xf2,0x62,0xae,0xe7,0xec,0xfe,0xb2,0xe5,0x63,0x35,0xb7,0xee,0xaa,0xf0,0x09,0xb8,0x61,0xf2,0x42 +.byte 0x28,0x87,0xd7,0x47,0xa8,0xfc,0x51,0x85,0x6f,0xa2,0xb1,0xa6,0x82,0xd6,0x0e,0x1b,0x3f,0xea,0xa1,0xe1,0x91,0xc9,0xd2,0x5b,0x3e,0xff,0x18,0x39,0x14,0xe0,0x44,0xda,0x3d,0xd8,0xca,0xdb,0xd9,0xbf,0x3f,0xa4,0xdb,0x99,0x2e,0x31,0x32,0x7c,0xf4,0x61,0x2f,0xa1,0xf9,0xa9,0xbe,0x26,0x94,0xea,0xb4,0xe3,0x25,0x8d,0x93,0x3b,0xa1,0x7e +.byte 0x1e,0x99,0x87,0x6c,0xaf,0x14,0x54,0xd0,0xc0,0x37,0x39,0x76,0x3c,0x07,0x2e,0xce,0x98,0x25,0x81,0xe4,0x01,0x0c,0x07,0x79,0x4e,0xcd,0x82,0x44,0x83,0x04,0x07,0xa6,0x52,0xb7,0x96,0x7c,0x43,0x12,0xe1,0xc5,0x12,0x18,0x25,0x47,0xe4,0x19,0x6d,0x26,0x1e,0x55,0x66,0xca,0x28,0x4c,0xfa,0xd2,0xd9,0xcc,0x7e,0xad,0x9f,0x2a,0x2f,0xc6 +.byte 0x6c,0x77,0xaa,0x0f,0x5b,0xeb,0x15,0x97,0x62,0x52,0x3c,0x6f,0x4b,0xf3,0xcc,0x80,0x7b,0x1f,0x1d,0x58,0xf8,0xfe,0xc1,0x8c,0x3b,0xe3,0xd7,0x05,0xc3,0xd6,0xa9,0xda,0xcf,0x85,0x1c,0x68,0xd6,0x6d,0x2b,0x06,0x30,0x5f,0x58,0x39,0xea,0xfa,0x99,0xaa,0x04,0x10,0x05,0xaf,0xb0,0xf7,0x32,0x60,0x8d,0xe4,0xd1,0x40,0x32,0xd6,0xa3,0xf2 +.byte 0xba,0x5a,0x79,0x58,0x92,0x75,0xf0,0x3a,0xce,0xb2,0xee,0x66,0x3e,0xe3,0xbe,0x4d,0x53,0x9d,0xbb,0xdb,0x45,0xf0,0x09,0xeb,0xd5,0x83,0x39,0x20,0x06,0xa9,0x44,0x35,0xeb,0x6d,0x9b,0xd9,0xa4,0xda,0x4b,0x9d,0xde,0x3d,0x26,0xa2,0x2d,0xcf,0x8e,0x3e,0xbc,0xb4,0x8c,0x3a,0xbf,0x56,0x7c,0x48,0x50,0xb5,0xc5,0xbe,0x84,0x5e,0x63,0x82 +.byte 0x5f,0x87,0x77,0x4a,0xa7,0xf6,0x66,0x07,0x42,0x6a,0xb0,0xcf,0x19,0xaf,0x6c,0x16,0x85,0x78,0x88,0x3b,0xa5,0xbc,0x42,0xd2,0x4c,0xdf,0x51,0x3b,0xc4,0x0e,0xf5,0xc5,0x70,0x57,0x40,0xf6,0xed,0xd2,0x37,0x3e,0x14,0x0c,0x31,0xda,0x94,0x87,0x6b,0xd9,0x8c,0x15,0x41,0xa9,0xc0,0x2a,0x61,0xd3,0x52,0xe0,0xb6,0x0a,0x83,0x6b,0x75,0x1b +.byte 0x1e,0xd1,0x7f,0x26,0x19,0x34,0x9b,0x70,0xc9,0xba,0xdc,0xa2,0x03,0x6d,0xc7,0xac,0xbd,0x2c,0x63,0x8a,0x7b,0xb1,0x62,0x51,0xc1,0x1d,0x54,0x0d,0x34,0x0e,0xfb,0xa6,0xb8,0x9d,0x79,0x4f,0xc3,0xaa,0x8d,0xa0,0xcc,0x80,0x96,0x86,0x37,0xd6,0x80,0x9c,0x3d,0x91,0xd0,0xe7,0xe2,0xb4,0x00,0xba,0x86,0xe9,0xeb,0x86,0xea,0x84,0x78,0x81 +.byte 0x20,0x29,0x28,0x02,0x4d,0xd8,0x1b,0x5e,0x4f,0x41,0xfc,0x13,0x3e,0x4c,0x7f,0x64,0x55,0x35,0x41,0x0d,0x74,0xc5,0x6a,0x7c,0x37,0x82,0x41,0xbd,0x67,0x39,0xd9,0x83,0xfa,0x7f,0x8c,0xe1,0x9f,0x23,0x0d,0xe4,0x1d,0x40,0xe6,0x6e,0x94,0x5d,0xec,0x77,0xf7,0x5e,0xb4,0xa1,0x03,0xfb,0xa0,0x0e,0xba,0xf8,0x28,0x50,0x3c,0x38,0x47,0xf7 +.byte 0xed,0x2d,0xe5,0x0b,0xa8,0x7a,0xbd,0xbf,0x7e,0x38,0xc0,0x60,0xe7,0x7e,0xb1,0x03,0xef,0x4a,0x8c,0xc7,0x98,0xf1,0x94,0xf6,0xa0,0x50,0xb2,0x0b,0x7c,0x66,0x0a,0x62,0x10,0x24,0xb0,0xa1,0x69,0x02,0x33,0x79,0xbf,0xd0,0xb5,0xcb,0x17,0x20,0x55,0x02,0x70,0x44,0x5b,0xac,0x20,0x35,0xea,0x05,0x2d,0x68,0x51,0xe7,0x5f,0x1b,0xcd,0x4c +.byte 0x33,0x4d,0x04,0x21,0xfd,0x06,0x67,0x82,0x60,0x98,0x1f,0x79,0xf4,0x28,0xe0,0xa8,0x18,0xeb,0xf5,0x86,0x58,0xe6,0x9f,0xb5,0x29,0x0f,0xe8,0x37,0xeb,0x09,0xf4,0xc6,0x08,0xf2,0xde,0x4d,0x96,0x48,0x62,0x36,0x63,0x10,0x3f,0x63,0xeb,0x44,0x84,0xc8,0xf5,0x74,0x19,0x03,0x50,0xf7,0x7c,0xd2,0x06,0x20,0x6e,0x9b,0xa2,0x37,0xb0,0x68 +.byte 0x78,0x31,0xb6,0x05,0xfa,0xc9,0xcd,0x1d,0x4c,0xbd,0x33,0xb7,0xf3,0x93,0x38,0x7d,0x5f,0x00,0x85,0x5b,0x10,0x7f,0xc4,0x3f,0x3e,0xfe,0x62,0xca,0x51,0x83,0x95,0xcf,0x00,0x65,0x83,0x0e,0xd3,0x78,0xd0,0x51,0xcb,0x70,0x34,0x42,0xc6,0x3a,0x04,0xb9,0x10,0x92,0xe0,0x09,0x06,0xb0,0x66,0x9b,0x37,0x02,0x8d,0x0d,0x3e,0x2f,0xc5,0x17 +.byte 0x6a,0x87,0x7d,0x48,0xa4,0xcc,0x55,0x20,0x7b,0x77,0x07,0xcf,0x44,0x2f,0x88,0x8a,0xcc,0xf2,0x5d,0xa6,0x3e,0x5f,0xda,0xe2,0xde,0xd2,0x7f,0x7f,0xb7,0x90,0x53,0x64,0x6b,0x79,0x42,0x52,0x69,0xc6,0xd6,0xaa,0x9f,0xf9,0x19,0xbe,0x65,0x10,0x99,0x49,0xaf,0x36,0x49,0x1b,0x8a,0x3d,0x7f,0xdb,0xa2,0x1a,0xb5,0xd6,0x34,0x51,0xc8,0xc8 +.byte 0x06,0xca,0xf6,0xb8,0x76,0xa8,0x9d,0x43,0xae,0xf0,0x51,0xe5,0x9a,0x42,0xa2,0x83,0xed,0x20,0x8d,0xe8,0x1c,0xca,0x15,0x4e,0x37,0x3f,0xd8,0x06,0xa0,0xe1,0xf8,0x05,0xfd,0x42,0xf3,0x7a,0x96,0x44,0x36,0x02,0xca,0x11,0x2a,0xc3,0x24,0x58,0xdd,0x85,0x55,0xb2,0xe5,0x1d,0x92,0xc2,0x2d,0x5f,0x7c,0xb5,0x02,0x37,0x7c,0x07,0x35,0x25 +.byte 0x2b,0x33,0x80,0xe2,0xd4,0xfd,0xc7,0xa7,0x19,0x7e,0xba,0x36,0xaf,0xa0,0x4e,0xab,0x8b,0x28,0x4f,0x3b,0x92,0x72,0x42,0x49,0xaa,0x3b,0x08,0x0f,0x1e,0xff,0x2d,0xbf,0x9c,0x48,0x16,0x72,0xbe,0x28,0x05,0x8b,0x3a,0x20,0x6b,0x38,0x43,0xa2,0x35,0xea,0xf7,0x4e,0x50,0xa0,0x43,0x40,0x5c,0xbf,0xe5,0x75,0x13,0x4c,0x36,0x61,0xa1,0x5d +.byte 0x46,0xd7,0x7a,0x94,0x06,0x2f,0x63,0x32,0x9c,0x6e,0x54,0x18,0x31,0x79,0xf2,0x83,0xcf,0xb4,0x47,0x40,0xe5,0x9a,0xd6,0x99,0x12,0xb3,0x61,0x3d,0x0f,0x5e,0xc8,0x95,0xa3,0x5f,0xc3,0xd5,0x6b,0x6e,0xa0,0xf2,0x2f,0xeb,0x66,0xd0,0x68,0x67,0x10,0x85,0x64,0x27,0xd8,0xb8,0x68,0x00,0x36,0xa5,0xab,0x3e,0xe1,0x43,0x65,0x81,0x2d,0xb9 +.byte 0x0f,0x87,0xfe,0xa1,0x52,0xe9,0x8d,0x82,0x3a,0xd1,0x10,0x52,0x34,0x48,0x7c,0x1c,0xc6,0xd0,0xfe,0xa0,0x1a,0x92,0x07,0x88,0x57,0x9e,0xd7,0x5e,0x9f,0xc8,0xb0,0x93,0x73,0x03,0x28,0x36,0x8c,0x25,0x8c,0x0f,0x4e,0x0f,0x5b,0x26,0x58,0xed,0x5c,0x33,0x75,0x20,0x08,0x11,0x47,0xe1,0x47,0x85,0x47,0xeb,0x54,0xbf,0x58,0xe3,0xd4,0x5b +.byte 0xf9,0xc6,0x5e,0x42,0x58,0xe6,0xaf,0x79,0x66,0x3c,0xa5,0xa3,0x30,0x33,0xe3,0xbe,0x21,0x4b,0x42,0x98,0x6e,0x44,0xd7,0x68,0xc0,0xff,0xbe,0x7f,0xc5,0xb3,0x4f,0x4a,0x93,0xb0,0x11,0x88,0xcf,0x36,0xb2,0x03,0xbe,0x30,0x52,0x71,0x20,0x0d,0x16,0xc5,0xbb,0xf5,0x92,0x12,0x67,0x6a,0x35,0x66,0x00,0x09,0xd7,0xc6,0x67,0xb0,0x6a,0x04 +.byte 0x19,0x3e,0xbf,0xe2,0x82,0x74,0x78,0x2f,0x77,0x44,0xdc,0xad,0x0f,0x66,0x2a,0x23,0x62,0x2c,0x5a,0x4e,0x3a,0x82,0x2a,0x75,0x16,0x0d,0x74,0x64,0x35,0x53,0xc5,0xf6,0xda,0x36,0x44,0xba,0xe2,0xfa,0x1e,0xc2,0xcf,0x29,0x01,0x36,0x66,0xc3,0xca,0x40,0xf7,0xc4,0xba,0x67,0xac,0xf6,0x17,0xcc,0xa3,0x96,0x2d,0x08,0x5f,0x0a,0xea,0x5e +.byte 0x97,0xdc,0xc8,0xf9,0x59,0x24,0x6e,0xc5,0x0b,0x02,0xb9,0x1a,0xde,0xac,0x60,0x1d,0xaf,0x9f,0x5a,0x6f,0xe1,0xa6,0xdf,0x75,0xc5,0x9b,0xb7,0xde,0xa4,0xf7,0xf6,0xa4,0xdc,0xb6,0x96,0x08,0xde,0x2a,0x0e,0xb3,0x9d,0xf5,0x75,0x7d,0x7e,0x96,0x91,0x79,0xd4,0xa7,0x30,0x97,0x3a,0xbd,0x7c,0xe0,0xc5,0x87,0x24,0xb0,0x65,0xb7,0x58,0x00 +.byte 0xd9,0x0e,0x97,0xa6,0xa4,0x6a,0xe8,0x0a,0xac,0xac,0x9f,0x3a,0xe3,0x2a,0x9a,0x43,0x41,0x92,0x6e,0x0e,0xc4,0x63,0xc3,0x18,0xb6,0xe1,0xef,0x3d,0xe8,0x0b,0xb0,0x9f,0x2e,0x19,0xa0,0x98,0x98,0x34,0xf8,0x86,0x6d,0xc5,0x8c,0x41,0x26,0xb7,0xf2,0x1d,0xd4,0x72,0x39,0xeb,0x79,0x06,0xaf,0x53,0xaa,0x34,0x80,0x53,0xf8,0x1b,0xf4,0x53 +.byte 0x19,0xfa,0x16,0x8b,0x39,0xea,0x63,0x7f,0x38,0xc4,0x66,0x1d,0xd1,0x90,0xe4,0x2f,0x20,0x43,0x0d,0x5f,0x98,0xcc,0xae,0xef,0x86,0xc8,0xe5,0xf6,0xd2,0xa5,0x49,0xd0,0x3f,0xb5,0x7e,0x42,0xb5,0x6e,0x5e,0x13,0xa5,0xb4,0x71,0x2c,0x5d,0x57,0x24,0x06,0xd2,0x29,0x7c,0x4c,0x90,0xb6,0xea,0xdb,0x62,0xa4,0x2c,0x6c,0x38,0x57,0x97,0xbd +.byte 0xfd,0x41,0x6e,0x26,0xc1,0xe1,0x6b,0xbb,0xf0,0xe7,0x71,0xf1,0xcf,0x6a,0x7f,0xfa,0xe7,0xfb,0x17,0xe7,0x81,0x19,0x9a,0xf2,0xf6,0x86,0x22,0x4f,0x62,0x59,0xd6,0xc2,0x33,0xbd,0x11,0xe7,0x07,0x3a,0xfe,0x74,0x0d,0xf8,0xd9,0xdb,0xbd,0x05,0xf4,0xf4,0xb1,0x41,0xc9,0xb3,0xf8,0x6a,0x7b,0x98,0x08,0x6c,0xce,0x4c,0x28,0xbf,0x8c,0x77 +.byte 0x68,0xdc,0xee,0xf7,0x11,0xde,0xfc,0x5a,0x58,0x4f,0xf4,0x74,0x9d,0x5b,0x78,0xc3,0x78,0xe5,0x5e,0x26,0x83,0x40,0x17,0x80,0x2a,0x02,0xa4,0xf1,0x0f,0xa0,0xc8,0x22,0xe6,0x09,0x3a,0x52,0x74,0xf0,0xb9,0xb9,0x60,0xaf,0x20,0xa6,0x7e,0x88,0xf4,0xc2,0x38,0xa2,0x21,0x73,0xa9,0x18,0x3f,0x7a,0x04,0x7b,0xc4,0xcd,0x68,0xd9,0x83,0xa4 +.byte 0x8e,0x54,0x0d,0xbc,0xee,0x8b,0x39,0x93,0x66,0xa2,0xd6,0x76,0x4a,0xb2,0x33,0x4f,0x61,0x53,0xde,0x3b,0xff,0x47,0xcb,0x87,0xd9,0x21,0xd0,0x82,0x64,0x54,0xdf,0xf2,0x67,0x62,0x40,0x33,0xc7,0x0d,0xea,0x98,0xaa,0x95,0xfb,0xa9,0x0e,0x90,0xa5,0xd9,0x54,0x81,0x86,0xad,0x9e,0xa4,0x4d,0x36,0xe1,0x77,0xf2,0xe3,0x0a,0x54,0x1a,0x57 +.byte 0x9d,0x62,0x5e,0x0e,0x00,0xc8,0xa6,0x1e,0xf3,0x43,0xe6,0x20,0x0d,0x6a,0x8e,0x90,0x1d,0x4d,0xac,0x2f,0x9f,0x1c,0xb7,0x30,0xec,0x5c,0x99,0x78,0x6f,0x3b,0xe7,0xe0,0x28,0xb9,0x97,0xc5,0x6a,0xf2,0x17,0xc2,0x11,0xac,0x1a,0xe2,0xca,0x57,0x49,0x64,0xc8,0xc7,0x66,0x43,0x8d,0xc8,0xa7,0x0e,0xfc,0xcf,0x05,0x2f,0xae,0x4b,0xfe,0xe4 +.byte 0xbe,0x9c,0xe7,0xe6,0xa8,0x36,0x49,0x0d,0x9c,0x60,0x39,0x0c,0xfd,0x41,0x5b,0xc7,0xa4,0xa5,0x30,0x89,0xe5,0x10,0xf6,0xea,0xf8,0x2c,0xf2,0x3e,0xb1,0x96,0x81,0xa7,0x32,0x8b,0x39,0x14,0x15,0x36,0xfc,0x55,0x3c,0x22,0xcf,0xa3,0x98,0x90,0x68,0x13,0xd8,0x3f,0xf2,0x53,0x19,0x3e,0x9a,0x0c,0x1f,0xc6,0x29,0x43,0x46,0x23,0x58,0xea +.byte 0x49,0x49,0x15,0x46,0x8e,0x63,0x30,0x1f,0x3e,0x2a,0xa0,0x18,0xfd,0x28,0xc5,0x32,0x77,0x75,0xac,0x6e,0x5d,0x39,0xa9,0x44,0xce,0xfe,0x39,0xa6,0xec,0xde,0x69,0xde,0xfa,0xc8,0x40,0x44,0x34,0x29,0x15,0x19,0xa7,0xbe,0xd6,0x5b,0xfd,0x1f,0x7b,0xb9,0x88,0xf1,0x14,0xcf,0x42,0xc5,0xa7,0xa7,0x0e,0x6b,0x6e,0x86,0xb2,0x7c,0x23,0x8e +.byte 0xf6,0xae,0xde,0x3c,0xd7,0x26,0x5e,0xde,0x31,0x94,0xc1,0x19,0x65,0x55,0x03,0x73,0xba,0xdc,0x69,0x95,0x9c,0x9d,0x8e,0x59,0xd8,0x51,0x61,0x9f,0x8f,0xf4,0x29,0x43,0x4b,0x6a,0x75,0xb3,0x4b,0x9d,0xcc,0x46,0xd2,0x6e,0x00,0x49,0x4f,0xf0,0xac,0x80,0x55,0xc0,0x0c,0xbf,0x18,0x52,0x75,0x76,0x3b,0xac,0x92,0x83,0x69,0x1b,0xb4,0x15 +.byte 0xe5,0x9e,0xde,0x10,0x30,0x30,0x0e,0x85,0xc7,0xf9,0xae,0xbc,0x9e,0xaf,0x4b,0xee,0x27,0x6b,0xa5,0x6d,0xe4,0x8e,0xed,0xdd,0x95,0xaa,0x85,0xe2,0xf5,0x38,0x15,0x50,0xd3,0xcd,0x2c,0x88,0x6c,0x2b,0x14,0x37,0x74,0x2d,0x6d,0x30,0xec,0x96,0x78,0xae,0x80,0xb3,0xd9,0x84,0xc1,0xd6,0x71,0x90,0xe4,0x8d,0x3a,0x7c,0x9c,0xc4,0xf5,0xa0 +.byte 0x20,0x7e,0xa2,0x0e,0x75,0x7c,0x25,0x7a,0x7e,0x2b,0x2e,0xdb,0x12,0x23,0x73,0x6a,0x8e,0xe3,0xd7,0x47,0x94,0xfb,0xcc,0xe4,0x5a,0x8c,0xfb,0xdc,0x46,0xb3,0x4a,0x42,0x15,0xe0,0xaf,0x6e,0x81,0x72,0x72,0x04,0x52,0x09,0xc5,0x8b,0x6e,0xdd,0x7d,0xff,0x27,0xa8,0xc1,0x94,0xb5,0x33,0x59,0xc2,0x7d,0x59,0x6c,0x3c,0xaa,0xd9,0xd8,0x05 +.byte 0x43,0x7e,0x8a,0x47,0xdd,0x76,0x36,0xe3,0x05,0x49,0xd1,0x8f,0xdf,0x45,0x46,0x63,0xff,0x17,0xb4,0x52,0xc8,0xee,0x4d,0xf5,0x74,0x65,0xc6,0xca,0x19,0xfd,0xb9,0x51,0xc8,0xc9,0x96,0xd4,0x06,0xd4,0x09,0x1e,0xab,0x6d,0x1b,0x26,0x61,0x80,0x5b,0xa8,0xcb,0x62,0x92,0x5a,0x1a,0x8e,0xa4,0xb7,0x25,0x19,0x96,0x63,0xd5,0xc3,0xc9,0xdc +.byte 0x04,0x83,0x62,0x31,0xe3,0x76,0x00,0x4d,0xf8,0xb3,0x98,0xae,0x4d,0x1a,0x38,0xe3,0xa1,0x27,0x52,0x87,0xbe,0x2c,0x93,0x45,0xd1,0xab,0x56,0xc6,0xf5,0xbc,0xb5,0xe6,0x9c,0xe1,0x1b,0x37,0x42,0x08,0xe7,0x71,0xb5,0xa4,0x67,0xf9,0x48,0xd4,0xc4,0x10,0x25,0x53,0x9c,0x03,0xfc,0x6d,0x5e,0x62,0x5e,0x6d,0x56,0xbc,0x78,0x11,0x0a,0x6d +.byte 0x1b,0x7a,0xdc,0x62,0xb5,0x58,0x86,0x15,0x71,0xff,0x11,0x33,0x94,0x2b,0xa6,0xc7,0x68,0xd5,0x68,0xda,0x5b,0xd5,0xb7,0x38,0x6c,0x1c,0xf4,0x07,0x39,0xef,0x1f,0x72,0x0a,0xb3,0x12,0x13,0x25,0x86,0xd3,0xf8,0x9f,0xb5,0x40,0x58,0xe7,0x5e,0x9f,0xa0,0xbc,0xd7,0xab,0x4f,0xf3,0x94,0xcf,0x0f,0x5a,0x4c,0x98,0xb4,0x70,0x35,0x62,0xee +.byte 0x33,0x24,0x72,0x31,0xd4,0x06,0xd9,0xb4,0x1c,0x1e,0x0f,0xa7,0x48,0xc7,0x75,0x45,0x40,0x02,0xd0,0x60,0x32,0x29,0x4d,0x61,0x7a,0xee,0x65,0x35,0x2b,0xe5,0x50,0xac,0x82,0xdb,0xf7,0x9c,0x8f,0x82,0xe4,0xf0,0xbd,0xdb,0x00,0x3d,0x3a,0x3d,0xa2,0xc3,0x2d,0x0e,0x51,0x20,0xdb,0xdb,0x8d,0x15,0x03,0xbd,0xcb,0xcb,0x24,0x81,0xc5,0xdb +.byte 0x05,0x39,0x48,0xb8,0x3c,0x93,0x35,0x10,0xef,0x19,0xba,0x09,0x9e,0xff,0xf9,0x3f,0x0c,0xdc,0x96,0x98,0x32,0x26,0x76,0xe7,0xfa,0xaa,0xdf,0xdc,0xb9,0x15,0x44,0x42,0x9a,0x8c,0x6c,0x88,0xea,0x43,0x63,0xb5,0x79,0xb6,0x50,0x30,0x78,0xea,0x70,0xba,0x33,0x36,0x8f,0x8c,0xe5,0x78,0xfd,0xbc,0xc0,0xbd,0xde,0x3a,0x3d,0xe6,0xe6,0x57 +.byte 0x0f,0x29,0xf2,0x82,0x05,0xf2,0x5c,0xfd,0x33,0xc1,0xb2,0x2e,0xc2,0xc0,0x42,0xa2,0xc8,0xa5,0xf9,0x70,0x05,0xff,0x7b,0x8d,0xb9,0x68,0xc3,0xf6,0x74,0x00,0xcd,0x9d,0x70,0xfa,0x62,0x34,0xe5,0x05,0xe8,0x5f,0x53,0x9b,0x69,0x01,0x86,0xb9,0x1d,0x68,0x80,0x89,0x51,0x52,0x0d,0xe8,0x28,0xa1,0xdd,0x62,0x2b,0xf3,0x53,0x74,0xaa,0x98 +.byte 0xdb,0x7e,0x74,0x44,0xeb,0x25,0xe7,0xde,0xc4,0x29,0x14,0x11,0x7b,0xc6,0xef,0x14,0xe4,0x04,0xd0,0xf4,0x11,0xca,0xdc,0xdc,0xe6,0x3f,0x9a,0xc9,0xe2,0x0e,0x67,0x30,0x78,0x65,0x94,0x5a,0xa1,0x24,0xd6,0x90,0x2f,0x1c,0x13,0x46,0xf5,0xb5,0xf9,0x74,0x56,0x3e,0xd5,0x1b,0x09,0xb3,0x04,0xbe,0x89,0x00,0xbd,0xe0,0xba,0x13,0x05,0xd1 +.byte 0x98,0xa7,0x93,0x09,0xc5,0x96,0x46,0xb5,0x5a,0x05,0xac,0x1e,0x66,0x03,0xf0,0xaa,0x3d,0xc2,0x54,0xa3,0xc4,0x2b,0x0d,0xa3,0xe4,0x92,0xd6,0xd0,0x44,0xa6,0x37,0x30,0xa5,0xac,0xc2,0xc8,0x58,0x2a,0x2c,0x18,0x68,0x8d,0x9b,0x4f,0x99,0xd0,0x55,0x41,0xf4,0x84,0x3c,0x69,0xda,0x3c,0x6d,0x43,0xb3,0x85,0x15,0x1f,0xdb,0x58,0x0b,0x71 +.byte 0x33,0x24,0xbb,0x21,0x43,0x19,0x16,0xeb,0x83,0xde,0xe5,0xb7,0x68,0x9e,0xb9,0xd9,0xf6,0x2e,0xae,0xdd,0x88,0x2c,0x18,0xd7,0xc3,0x72,0x8b,0xbe,0xaf,0x8d,0xfd,0xcd,0x2f,0x8e,0x3e,0x2b,0xa4,0x20,0x11,0x9d,0x00,0x4f,0xea,0xf0,0xaa,0x2d,0xf3,0x9d,0xfd,0x11,0x7b,0xac,0x2c,0x66,0x74,0x03,0xe5,0xcc,0x70,0x9f,0xfb,0xb7,0x5a,0x16 +.byte 0xc3,0x05,0x61,0x7c,0x8c,0x73,0xcc,0x9c,0x6a,0x2f,0xee,0xae,0x85,0xc9,0x51,0x91,0x13,0xa4,0x09,0x82,0x4d,0x62,0x09,0x24,0x25,0x35,0x1f,0x82,0x88,0xbb,0xdd,0x16,0x5e,0x8d,0x98,0x5f,0x07,0x49,0x32,0x96,0xb7,0xee,0x85,0xb0,0x7b,0xfd,0xf5,0x35,0x4b,0xa9,0xd4,0xee,0xf2,0x37,0xd1,0xfe,0x62,0xf5,0x52,0x13,0xb4,0xb2,0xce,0xc4 +.byte 0xe0,0x09,0x78,0x48,0xd5,0xc6,0x5d,0x36,0x1b,0x90,0x3a,0x6a,0x3c,0x21,0x50,0xf0,0x0a,0xe9,0x46,0x24,0x45,0xc1,0x5e,0x76,0xa3,0xf9,0x70,0xb8,0x62,0x4d,0x0e,0x92,0x87,0x4a,0x6a,0xf9,0x46,0x91,0x64,0xfe,0x7f,0x53,0x24,0x7e,0xc7,0x3e,0xb0,0x37,0x1a,0xc8,0xd6,0x33,0x0b,0x5f,0xa5,0x30,0x03,0x0e,0x85,0x3d,0x7b,0xc1,0xa1,0x18 +.byte 0xb3,0x8c,0xfe,0xca,0x3e,0x71,0xd8,0x92,0x46,0x49,0x60,0x54,0xd9,0x7b,0xf7,0xc3,0x99,0x2f,0xb5,0x79,0xcc,0x32,0x40,0x7d,0x3d,0x0b,0xc6,0x6f,0x04,0xd9,0xf1,0xdd,0x64,0xf5,0xc4,0x60,0x14,0x04,0x5c,0x3a,0xa4,0xda,0xdc,0xad,0x8f,0xc2,0x44,0x37,0x96,0x63,0x00,0xf7,0xb1,0xc0,0x7c,0x8c,0x12,0xb5,0x3a,0xec,0xc0,0x16,0xd8,0x24 +.byte 0xe9,0xc0,0xc4,0xfa,0xb1,0x85,0x5b,0xe3,0x62,0x24,0xa1,0x75,0x92,0x82,0x04,0x59,0x10,0x50,0x4b,0x51,0x51,0x3e,0x39,0xba,0x6d,0xa0,0x65,0x2d,0xfc,0x23,0x1c,0x9d,0x69,0x22,0xe7,0x15,0xfa,0xba,0x76,0xbf,0x53,0x62,0xb0,0x0d,0x0d,0x5d,0x55,0x00,0xbc,0x58,0x01,0xed,0x37,0x53,0xb9,0xa6,0x0d,0x71,0xab,0xec,0x42,0xbf,0x3b,0x52 +.byte 0xfd,0xae,0xe9,0x6d,0x65,0x07,0xf3,0xd9,0x32,0x66,0xc1,0x66,0x1a,0x18,0x73,0x86,0x01,0xaf,0x1d,0xd1,0xd0,0xcf,0xb1,0xea,0x54,0x23,0xdf,0xf2,0x4d,0x7d,0xc7,0xfe,0xfe,0x7d,0x1d,0x2c,0x1b,0xb6,0xa7,0x7a,0x9e,0x90,0x3a,0x3b,0xb0,0x6c,0xb0,0xd2,0xd1,0xd0,0x6a,0x94,0x4c,0x84,0x1c,0x45,0xae,0xda,0x16,0xa9,0x2e,0x63,0x19,0x26 +.byte 0xf6,0x74,0xd3,0x6f,0x9b,0x9c,0x0c,0xb8,0x85,0x9f,0xeb,0x99,0xbc,0xab,0xff,0xc3,0x75,0x86,0xe5,0x3a,0xa0,0xf9,0xfc,0x6b,0x3d,0x5a,0xad,0x46,0x7f,0x17,0x0e,0x94,0xb7,0xa4,0x43,0x61,0x54,0x76,0x29,0x78,0xe4,0x41,0x91,0xbe,0xa5,0x36,0x39,0xdf,0xdc,0xcc,0x8e,0x42,0x40,0x08,0x51,0x26,0xb0,0x53,0x5d,0xb4,0x7a,0x18,0x8e,0xb3 +.byte 0xae,0xf2,0xe0,0xef,0x63,0x51,0x3a,0xbe,0x4c,0x2d,0xce,0xc7,0xe2,0x1b,0xc2,0x40,0xf3,0x82,0x61,0xf0,0x1b,0x05,0xdd,0x1e,0xae,0xed,0x87,0x2c,0xe5,0xad,0xc7,0xec,0xb5,0x63,0xf7,0x3a,0xf9,0xb7,0xd8,0x4e,0xa7,0xef,0xac,0x6d,0x9c,0x27,0xd9,0xcc,0x66,0xf4,0x75,0x40,0x94,0x8b,0x78,0x4f,0x61,0x4f,0x31,0x49,0x5c,0x96,0x72,0x58 +.byte 0xcf,0x55,0xb2,0x66,0x16,0x29,0x27,0x24,0x39,0xc3,0x64,0xb1,0xdf,0x69,0x87,0x85,0x46,0xe3,0xd0,0x82,0x53,0x1a,0xc2,0xf1,0x3a,0xab,0xdf,0xe5,0x29,0x17,0xdd,0xfe,0xbf,0xf9,0x3d,0x7a,0xfb,0xe7,0x74,0x49,0xa9,0xef,0x61,0x93,0x4c,0xfa,0x30,0xea,0x65,0xa7,0x61,0x32,0x88,0x74,0x12,0xc1,0x91,0xf1,0xc2,0x1f,0x38,0x6a,0xfd,0x0d +.byte 0xc8,0x6f,0x87,0xe6,0x15,0x55,0x26,0x13,0x86,0x13,0xb9,0x01,0x98,0x34,0x1c,0x2d,0x1d,0x30,0xae,0x7d,0x8e,0x07,0x7d,0x4d,0xe9,0xfd,0x58,0x18,0xc3,0xa6,0x8e,0x87,0x98,0x33,0xcc,0x80,0xd7,0x70,0x07,0x6a,0x4a,0x97,0xef,0x56,0xf3,0x9d,0xf9,0xef,0x6f,0xa8,0x71,0x7f,0x61,0x07,0x1d,0x9d,0x51,0x06,0x86,0x4a,0x35,0x9e,0xab,0x2c +.byte 0x66,0x8d,0x61,0x62,0xbd,0xed,0x6c,0x76,0x7c,0x67,0xe0,0xe1,0x6e,0x90,0x74,0xb1,0xa6,0x26,0x0d,0x01,0x1f,0xe9,0xb4,0x30,0x9a,0x7e,0x37,0xd1,0xea,0x97,0x9a,0x0f,0x9e,0x8d,0x52,0xd4,0x96,0x36,0x5b,0x6f,0x40,0xbb,0x9e,0x44,0xb4,0x6e,0xee,0x15,0x70,0xef,0x66,0x81,0xf5,0xb4,0xe7,0x69,0xb0,0x40,0x44,0xdc,0x70,0x1e,0x4d,0x3c +.byte 0x9b,0x19,0x2a,0x97,0xbd,0xb2,0xd2,0x9b,0x98,0xac,0x36,0xf1,0x05,0x48,0xdc,0x5d,0x21,0xfb,0x17,0xe3,0x9c,0x3c,0xbf,0xfd,0x1d,0x39,0x1e,0x5b,0x2a,0xa2,0xb3,0x7d,0x4f,0xdf,0x3a,0x41,0x7a,0x31,0x01,0xc2,0xe5,0xd0,0x06,0x50,0x29,0x05,0xce,0xb8,0x28,0xb7,0xdd,0x83,0xc8,0xaa,0x39,0x78,0xc7,0x7d,0x9e,0xcd,0x9a,0x07,0x71,0x7e +.byte 0x20,0x92,0x82,0xce,0x49,0x90,0xce,0xef,0x53,0xa7,0x48,0x2a,0x69,0x86,0xa1,0x5e,0x35,0xe8,0x7d,0x10,0xb8,0x5e,0xa6,0x9a,0x69,0x6f,0x32,0x75,0xf3,0x4a,0xee,0x9c,0x06,0x5c,0xdd,0x84,0x7e,0x38,0x00,0x67,0x39,0x42,0xed,0x72,0xda,0xe3,0x6b,0x5a,0xf4,0xc9,0x80,0x3e,0x0e,0xda,0x39,0xfa,0x83,0x2c,0x60,0x69,0x87,0x85,0x05,0xfc +.byte 0xf4,0x2b,0xd4,0x0a,0xad,0x86,0xca,0xd5,0xf0,0x92,0x1f,0x43,0x3c,0x0e,0xac,0x99,0xf3,0x67,0xa3,0x41,0x6d,0xb9,0x29,0x70,0x57,0x62,0x9f,0x45,0x91,0x72,0xe5,0x53,0xcc,0x89,0x80,0x3f,0xbc,0x1c,0x66,0x21,0xdd,0x90,0x2b,0xa4,0xca,0x2f,0xf0,0x0f,0x9f,0xd0,0xe9,0x28,0xe2,0xd9,0x36,0xaf,0xf9,0x01,0x81,0xce,0xb4,0xe7,0x71,0xfd +.byte 0x92,0xf8,0x56,0x2e,0xc3,0xc8,0x8b,0x54,0xc8,0xc7,0x40,0x79,0x27,0x06,0x18,0x4a,0x7b,0x88,0x3f,0xd6,0x4f,0xd4,0x66,0x1e,0x1f,0x9a,0x14,0x1a,0x0a,0x98,0xc7,0xd6,0x25,0x83,0x37,0x8a,0x5d,0xb2,0x88,0x39,0x68,0x7b,0x1f,0x4e,0x0a,0xed,0x11,0x1a,0x77,0x9b,0xcb,0xb6,0x7d,0x5c,0x36,0xac,0x07,0x07,0x9f,0x05,0xcf,0x90,0x8f,0x3f +.byte 0x4b,0xc5,0xf9,0x42,0x90,0xb4,0x42,0x26,0xa1,0x2c,0x66,0xc6,0xb8,0x98,0x80,0x8a,0xbb,0x9b,0x41,0xe4,0x44,0x8c,0x5e,0x56,0x33,0xe3,0xba,0xcf,0x31,0x8e,0x28,0xd7,0xc5,0xd1,0x3b,0x68,0x47,0x10,0xae,0xda,0xc3,0xbd,0x20,0xe7,0xac,0xe2,0xe1,0xe0,0x7a,0x4b,0x83,0xb1,0xab,0x72,0xf4,0xc4,0xe7,0x0d,0x02,0xaf,0x5b,0x74,0xac,0xda +.byte 0x9d,0xce,0x26,0x1f,0x79,0x05,0x67,0x7e,0xc4,0x98,0x3f,0xde,0xa6,0xf3,0xfe,0x59,0x65,0x88,0xfb,0x14,0x3a,0x43,0x91,0x04,0x1a,0x78,0x7e,0x08,0xba,0x55,0x50,0xc7,0x65,0xd3,0x8e,0xda,0x0a,0xee,0x8e,0x11,0xa9,0xf6,0x9e,0xd3,0x23,0x97,0x05,0x0c,0x98,0x2a,0x36,0x25,0xec,0x5e,0x0b,0xf9,0x31,0x80,0x00,0x8a,0x70,0xf1,0xaa,0x7c +.byte 0x73,0x02,0x98,0x8d,0x42,0x27,0x53,0xf1,0x83,0x37,0xd0,0x2d,0xfa,0xc7,0x4b,0xa5,0xb3,0xc9,0xb8,0xd4,0x56,0x94,0x5a,0x17,0x2e,0x9d,0x1b,0x46,0xaa,0xb6,0xd9,0x2a,0x3a,0x6c,0xaf,0x24,0x59,0xfd,0x08,0xc5,0xca,0x0c,0x79,0x3f,0xe7,0x91,0x8d,0x9d,0x59,0x91,0xd8,0x5f,0xda,0x6d,0x35,0x7b,0x52,0x47,0x35,0xf9,0x81,0x86,0x2c,0xee +.byte 0x1a,0x14,0xc5,0x1f,0xb6,0x85,0xb5,0x74,0xe9,0xb7,0x4f,0xde,0xcd,0x93,0x2d,0xf3,0x10,0xbe,0x34,0xfa,0xca,0x15,0x9f,0x02,0x9d,0x19,0x72,0x7c,0xd6,0xfd,0x81,0x43,0x49,0xb5,0x2b,0x52,0x31,0xd6,0x2c,0x28,0x2e,0x83,0x6d,0xd3,0x0f,0x6e,0x03,0x65,0xf0,0x8a,0xdd,0x0a,0xec,0x58,0x10,0x45,0x5d,0xac,0xda,0xf5,0x32,0x5d,0x18,0x26 +.byte 0xcc,0x2e,0xcf,0xd3,0x41,0x2d,0x1d,0xba,0xdf,0xd8,0x96,0x8f,0x18,0x0f,0xa7,0xec,0x8e,0x6e,0x84,0x2c,0xd6,0x1f,0x4e,0x76,0xfe,0xf3,0x14,0x27,0x4b,0x5b,0x3d,0x7c,0x1c,0x59,0x46,0x97,0x1b,0x59,0x5a,0x2d,0x57,0x80,0x17,0x98,0x7d,0x92,0x5d,0x2f,0x98,0x53,0x10,0x59,0x8e,0x7f,0x55,0x64,0x15,0x62,0x2c,0x16,0x0b,0x8d,0x48,0x54 +.byte 0xaf,0x96,0x17,0xa9,0x8e,0x2c,0xcf,0x41,0x8c,0x8a,0x37,0x55,0xe4,0xf9,0x20,0x3b,0x21,0x5c,0x86,0x8d,0x3f,0xa6,0x5e,0x43,0xf3,0x3b,0xf7,0x7c,0x27,0x88,0x8e,0xa5,0x15,0xca,0x0e,0x9e,0x85,0x30,0x17,0x0d,0xcf,0xf0,0x82,0x87,0xd6,0xe8,0xd2,0xad,0xe9,0x4d,0x3f,0xc9,0x58,0x19,0xf9,0x99,0x4d,0xf9,0x6b,0x1b,0xd3,0xf9,0xdd,0x52 +.byte 0xd1,0x3c,0x64,0x46,0xfd,0x4f,0x2e,0x63,0x39,0xd8,0xe4,0xeb,0xfc,0x07,0xf1,0xa5,0xff,0x84,0xa8,0x92,0xfe,0xbc,0xc5,0x36,0x91,0x2b,0xec,0x2c,0xad,0xf0,0xac,0xc5,0xb0,0xad,0x8a,0x0d,0x6a,0xd9,0x29,0x7a,0xb0,0x87,0x0c,0xaf,0xda,0x75,0x84,0x25,0xbe,0xee,0x0d,0xfd,0x4c,0xf5,0x2d,0x46,0xe9,0x17,0xb9,0x9d,0x3d,0x4b,0x8f,0x3a +.byte 0xe9,0x49,0xb6,0x32,0x99,0x27,0xe2,0x4d,0xff,0x2f,0x2e,0xd5,0x69,0x52,0x56,0x20,0x0a,0xbf,0x62,0x14,0x34,0xfb,0xbf,0x95,0xe8,0xfe,0xb1,0x9f,0x43,0x30,0x02,0x03,0x9e,0xa8,0xe2,0x68,0x64,0xdd,0x37,0xfc,0xb9,0x0f,0x85,0x8c,0x36,0x45,0xdb,0x7c,0x8b,0x97,0x50,0xc3,0x75,0xa1,0xcf,0xf4,0xc2,0x46,0xd8,0xa1,0x8c,0xab,0x8d,0x3a +.byte 0xde,0xe7,0x9e,0xd2,0x1e,0x2d,0x8b,0xe4,0x31,0xe3,0x12,0x3f,0x9f,0x0b,0x2c,0x95,0x75,0x8d,0xf1,0x24,0xb9,0xdf,0x1e,0x64,0x35,0x45,0x2a,0xc2,0xf9,0x96,0x5d,0x10,0x64,0x32,0xae,0xe9,0xf8,0x71,0xd4,0x2d,0x6b,0xc6,0xde,0x08,0x1e,0x5d,0x51,0xf1,0xe7,0xfd,0x3c,0x22,0x43,0x59,0x82,0x83,0x13,0x75,0x36,0xef,0x81,0xe4,0xcf,0xa8 +.byte 0xb8,0x30,0x16,0x44,0xae,0x55,0x06,0xdd,0xb9,0x60,0x3f,0x75,0xc6,0xd1,0x73,0xa9,0xea,0xc9,0x64,0x2b,0x8a,0xde,0x44,0x4b,0x3d,0xc3,0x31,0x12,0x84,0x9a,0xe3,0xda,0x24,0x82,0x99,0x00,0x6d,0x8e,0xb8,0x26,0x82,0xa6,0xc2,0x37,0x6c,0x2a,0x1d,0xcf,0x6d,0x18,0xc7,0xee,0x27,0xca,0xe7,0xad,0x95,0xed,0x7d,0xe0,0xe0,0x6f,0x45,0xc3 +.byte 0x8a,0x2f,0x08,0x49,0x7e,0x09,0x9e,0xc1,0xb7,0x1e,0x8f,0x57,0x61,0xf8,0x3e,0xea,0xd7,0x47,0xfb,0xd0,0xda,0xaa,0x04,0xf9,0x06,0xbb,0xa3,0x80,0x68,0x89,0xb0,0x7f,0x18,0xf3,0xd2,0xeb,0xee,0x48,0x30,0x6a,0x24,0xc8,0x71,0x43,0xc3,0x50,0xcc,0x85,0x68,0xf5,0xca,0x44,0x34,0x43,0xaa,0x2e,0x4f,0x02,0x1b,0x23,0x4f,0xe9,0x07,0x02 +.byte 0xa2,0xfa,0x24,0x57,0x70,0x4e,0x1a,0x78,0x03,0xa2,0xdd,0x53,0x50,0x82,0x05,0xb1,0x0f,0xcb,0x9e,0x2e,0x58,0x04,0x62,0xc8,0xac,0x71,0x31,0x56,0x0f,0xc7,0x70,0x32,0x53,0xda,0x51,0xc3,0x15,0x78,0x82,0xb6,0xe8,0x6e,0x32,0xeb,0x39,0xab,0xba,0x67,0xcc,0xbc,0x99,0x58,0x88,0xc4,0x60,0x0d,0x0b,0xc1,0xfa,0x6f,0x40,0x85,0x04,0xdf +.byte 0x5f,0x17,0x69,0xf1,0xbd,0x44,0x97,0xc8,0x62,0x19,0x49,0x1f,0x23,0xcb,0x3d,0x17,0x04,0xf2,0xbd,0x58,0x15,0xa6,0x37,0x3a,0x3f,0x77,0x98,0x32,0x40,0x8a,0x72,0xf0,0x41,0x0b,0xad,0x88,0xba,0xd3,0xae,0xdc,0x3b,0x9a,0x37,0x89,0xa5,0x09,0xe5,0xbb,0xf2,0xf8,0x5d,0xa5,0xed,0xe8,0x39,0x7b,0xed,0x2b,0x90,0xd6,0x6c,0xd3,0xfa,0x69 +.byte 0xa7,0xca,0x09,0x83,0x15,0x8d,0xd8,0xe3,0x81,0x03,0x4e,0x2d,0xd8,0x96,0x3b,0x4b,0x18,0x91,0xac,0x5f,0x22,0xe6,0x9d,0x4b,0x09,0xaf,0xf0,0xdf,0x16,0xa2,0xf1,0x2c,0xd9,0x35,0x8a,0x6e,0x85,0x7a,0xbc,0xc7,0x10,0xd1,0x5f,0x8a,0x53,0x9c,0x8e,0xbc,0x8c,0x15,0xb3,0x8a,0xb0,0x0b,0x74,0x40,0x2a,0x5f,0x46,0x71,0x1c,0x0b,0xee,0x08 +.byte 0xae,0x17,0x26,0x1e,0xcf,0xbf,0x3d,0xa0,0x5e,0x3a,0xdb,0x39,0x6b,0x4a,0x82,0x53,0x02,0xf4,0xa2,0x15,0x5c,0xb6,0xdb,0x20,0x30,0xa2,0x7d,0xcb,0x9a,0xf7,0x88,0x69,0xb5,0xc8,0xe6,0xcd,0x9e,0xa4,0xaf,0x27,0x0e,0x61,0x41,0xcd,0x8e,0x71,0x83,0x11,0xce,0x5e,0x6c,0xaf,0xa4,0x50,0x81,0xb6,0xf2,0x36,0x05,0xbb,0x36,0x4e,0x4a,0x1b +.byte 0x09,0x9f,0xca,0x1b,0x12,0xb0,0x01,0xc0,0xbf,0x7e,0x3f,0x81,0x60,0x9f,0xfd,0x56,0x81,0x54,0x99,0x2b,0x7f,0x1e,0xb1,0xbf,0xd4,0xb7,0xe1,0x7c,0x71,0xf9,0x00,0x72,0x5f,0x10,0xab,0x60,0x03,0x9d,0x13,0xf1,0xba,0x48,0x93,0x1c,0x1d,0x11,0x04,0x40,0xf6,0xde,0x3b,0xef,0x6c,0x47,0xb3,0x0d,0xcf,0x53,0xbd,0x45,0x7e,0xd7,0x8c,0x34 +.byte 0xd0,0xcb,0x85,0x4b,0x1e,0xd1,0xc5,0xfd,0x5b,0x1a,0x18,0x8a,0x27,0xe3,0x16,0x3c,0x25,0x12,0xf2,0xf1,0xa1,0x40,0x53,0x68,0x27,0x2c,0x81,0x0e,0x20,0x12,0xe3,0xde,0xe2,0x9f,0x08,0x75,0xc0,0x25,0x79,0xf0,0xc4,0xaa,0x10,0xad,0x41,0x3f,0x0b,0xc7,0xb2,0xe0,0x50,0xde,0xec,0x24,0x09,0xeb,0xb5,0xd3,0xbc,0xd3,0xdf,0x44,0x6d,0xc8 +.byte 0xf1,0x79,0xf8,0x33,0xb7,0x75,0x09,0x18,0x04,0x59,0x0f,0x15,0x5e,0xf9,0xca,0xe0,0xa9,0x2a,0xe1,0x1b,0xf0,0x49,0x5f,0xca,0xa3,0x80,0xd5,0x9b,0x1e,0xc1,0x1f,0x98,0x18,0x0a,0x24,0xc3,0x3f,0xfb,0x43,0xfd,0xa3,0x01,0x59,0x50,0xea,0x21,0xe0,0x92,0xfd,0xe1,0xd5,0xe4,0x38,0x24,0x88,0xf3,0xb0,0xc9,0x79,0xfd,0x4e,0xd3,0x3e,0xbf +.byte 0xc6,0xb8,0x9e,0x7f,0xab,0x65,0x79,0xd9,0xb9,0x83,0x38,0xe1,0xf7,0xd0,0x37,0x04,0xb3,0x0c,0x48,0x82,0x74,0xe1,0x0c,0x80,0x13,0x59,0xc4,0x72,0xf9,0x2d,0x88,0x06,0x46,0x08,0x7a,0x6b,0xb4,0xfc,0x5f,0x63,0x31,0x2f,0x4f,0xfd,0x4b,0x1f,0x8e,0x21,0x3c,0x67,0x83,0xdd,0xa9,0x65,0x68,0xc6,0xd0,0xb8,0x1d,0xcd,0x60,0xc5,0xb9,0x3b +.byte 0xea,0xe9,0xc7,0xa5,0x1a,0x98,0x8a,0x87,0xb7,0x73,0x29,0x3a,0x6a,0x3a,0x75,0xbf,0xa4,0x79,0x64,0xcb,0x94,0x68,0x93,0x56,0x55,0x1e,0xd5,0x61,0xda,0x87,0xe1,0x28,0xf0,0xa5,0x64,0x9a,0xd7,0xa0,0x91,0xfd,0x46,0x20,0x6c,0x87,0x1f,0xe8,0x9e,0x7e,0x95,0xc4,0x60,0xdb,0xf4,0xe2,0x3e,0xb2,0x6a,0x4a,0xe7,0x46,0x3f,0xca,0xf3,0x72 +.byte 0xb5,0xe8,0x06,0x3a,0x1b,0xeb,0xcb,0x81,0x46,0x44,0xf6,0x97,0xa0,0x79,0xe4,0xa4,0x8a,0xba,0x5e,0x1b,0x6d,0xf4,0xcf,0x7c,0x12,0x7a,0xec,0xdd,0xf6,0xc8,0xab,0x5f,0x30,0xb3,0xf9,0x8e,0x31,0xfd,0x51,0x95,0x8b,0xa1,0xe9,0xe8,0x2d,0xec,0x86,0x12,0x4a,0xf8,0x8b,0xa5,0xdd,0xb2,0xe4,0xad,0xdd,0xcb,0xf5,0xcd,0x9c,0x9f,0x0a,0x42 +.byte 0x5f,0x83,0x9d,0xa6,0x4f,0xbe,0x11,0x75,0x3c,0xde,0x67,0x6b,0x95,0xcd,0xcf,0xdc,0xfd,0x1f,0x1a,0x14,0x01,0x27,0x68,0xaf,0x9b,0x82,0xd6,0xae,0x29,0x8a,0x1f,0xc8,0xf1,0x1f,0xb8,0xa9,0xa2,0x1d,0x81,0xbb,0x19,0xda,0x06,0xe3,0x34,0x7b,0xce,0x99,0x3c,0x5b,0x0c,0x9b,0x8b,0x35,0xc0,0x6c,0x88,0xef,0xeb,0x9f,0x64,0xe3,0xc3,0xbf +.byte 0x37,0xd7,0xf6,0xdf,0xad,0x28,0xf4,0xd7,0x19,0xb0,0xf2,0xa7,0xd4,0x71,0xbc,0xd3,0xa3,0x09,0x5c,0x1a,0x45,0x30,0x2d,0x53,0xa5,0x19,0x2f,0xb0,0x5d,0xae,0x04,0x28,0xe6,0x16,0x3e,0x75,0x9f,0xcc,0x76,0xc4,0xc2,0xa0,0xfb,0xff,0xdd,0x4c,0xa3,0x8b,0xad,0x05,0x73,0x26,0xf0,0xef,0x48,0xd5,0x25,0x22,0x90,0x78,0x21,0xfd,0xc6,0x23 +.byte 0x14,0xbc,0xed,0x13,0x29,0x76,0x17,0xa6,0x93,0x09,0x6e,0xa7,0x42,0xdd,0x11,0x9e,0x05,0xa3,0xb7,0x48,0x84,0x85,0xf8,0x4e,0xed,0x3d,0xdb,0xfc,0x68,0xd2,0xec,0xec,0x69,0x2b,0x60,0x38,0xd1,0x99,0x44,0xf9,0x60,0xd3,0x5a,0x9e,0xe4,0x26,0x9d,0x12,0xf8,0x6a,0x53,0xde,0x76,0x78,0xa7,0x68,0xb0,0xb4,0xdc,0x33,0x7b,0x8a,0x73,0xa0 +.byte 0xa5,0x5f,0x8f,0x81,0x0e,0x51,0x06,0x13,0x6b,0x56,0x16,0x91,0x1f,0xf5,0x6b,0x68,0xe6,0x8b,0x69,0xda,0x0a,0x9c,0xb1,0x74,0x8f,0x1c,0xb3,0xbf,0x52,0x59,0xaa,0xb1,0xb6,0x3a,0x81,0xc2,0x04,0x54,0x12,0x46,0xa2,0xd5,0x21,0xdf,0xe0,0x57,0x1f,0xe8,0x36,0x56,0x87,0xbf,0xcb,0x7d,0x06,0x6c,0xd5,0xc9,0x4e,0xca,0x47,0x47,0x11,0x91 +.byte 0x7a,0x14,0x13,0x5d,0x5d,0x46,0xd5,0x3a,0xe4,0xa4,0x4d,0x99,0x3a,0x54,0x99,0x62,0xb4,0x70,0xa0,0xf5,0x8a,0xda,0x05,0x75,0xf1,0xa5,0xa1,0x5d,0x9d,0xc4,0x7f,0x83,0x8a,0x5b,0x09,0x54,0x0e,0x69,0x28,0xef,0x66,0xfb,0xe4,0xc4,0xe4,0xc4,0xda,0xb0,0xda,0xe2,0x19,0x33,0x3c,0x76,0xa0,0x35,0xdc,0x31,0x4e,0x40,0xfe,0xb8,0x20,0x26 +.byte 0x8f,0x6f,0x7d,0x02,0x54,0x86,0x1d,0xca,0xa6,0x10,0xa6,0x89,0x87,0x3a,0x5a,0xd5,0x3d,0x0f,0xb5,0x81,0x7d,0xab,0xb6,0xc6,0x36,0x87,0xce,0xd7,0xe4,0xc3,0x9e,0xc2,0x9c,0xf6,0x75,0xd5,0x9a,0x69,0xd2,0x13,0x89,0x5a,0xe9,0x29,0xc9,0xf5,0x6e,0xcc,0x05,0x87,0x0a,0x61,0x49,0xd7,0xa5,0x76,0xd0,0xaf,0x96,0xe0,0x2f,0x91,0xf4,0x45 +.byte 0x70,0x5a,0xdc,0x9f,0x07,0x7f,0x86,0x02,0xa4,0x83,0x8d,0x4a,0x6d,0xfc,0x1b,0xd8,0x9b,0xc2,0x42,0x4f,0xcb,0xdf,0xcb,0xe0,0x55,0xb4,0x8f,0xf7,0x27,0x73,0xd9,0x7e,0xf8,0x3a,0x5c,0x4f,0x29,0x64,0xd8,0x39,0xfa,0xf2,0xc4,0x6b,0xeb,0x55,0xc3,0x13,0x22,0x15,0xdf,0xc5,0x91,0x6d,0xd7,0xf3,0x11,0x34,0x08,0xce,0xe5,0xbd,0x16,0x14 +.byte 0x60,0x14,0x8a,0xed,0x4d,0x38,0x98,0x15,0x5d,0xee,0x70,0xff,0x05,0xd2,0x74,0x3a,0x5f,0x78,0x1a,0x70,0x61,0x2a,0x42,0x4a,0xf3,0x15,0x6f,0x9e,0x33,0xca,0xb8,0x46,0x22,0x64,0xd6,0x24,0xe8,0x10,0x1a,0x89,0xab,0x74,0xdf,0x56,0x35,0x41,0x57,0xe1,0xd9,0x4b,0x67,0x60,0x89,0x6f,0xbf,0x73,0xac,0x6b,0xf9,0x78,0x3f,0xbc,0xf3,0x2a +.byte 0xb5,0x8c,0x1f,0xda,0xe7,0xe2,0xac,0x60,0xbf,0x41,0x96,0xbb,0xd5,0x35,0x9c,0x56,0xe7,0xfd,0x95,0xc7,0x4d,0x32,0xa1,0x07,0x34,0xbc,0x99,0xca,0xcc,0x42,0x71,0xfb,0xec,0x5c,0x1e,0xf9,0x8b,0xde,0x43,0x65,0x84,0x16,0x52,0x0a,0x5e,0x92,0x20,0xd8,0x26,0x4b,0x97,0x71,0xde,0xd2,0x1f,0x2e,0xd1,0xb2,0xb6,0x29,0x6a,0x6d,0x41,0x00 +.byte 0x20,0x3d,0x03,0xf8,0x43,0x7b,0x57,0x87,0x4e,0xf1,0x8e,0x6f,0xd3,0xf4,0x6c,0x6c,0x29,0xf6,0x99,0xe3,0xd3,0x1d,0xd3,0x26,0x21,0x3b,0x02,0xa2,0xc1,0x06,0xcf,0x31,0xec,0x7f,0xc6,0x80,0xbc,0xab,0x86,0x01,0xff,0x11,0x8a,0x24,0xfd,0x1b,0x41,0x49,0xd4,0xbe,0x15,0x34,0x82,0xc5,0x02,0x51,0x67,0x5c,0x41,0x8e,0xbf,0x94,0x12,0x15 +.byte 0x64,0xea,0x00,0x0c,0x51,0x40,0x57,0x66,0x1e,0x6d,0x3e,0x41,0x8e,0x84,0xdf,0x71,0xb8,0xd7,0xfa,0x12,0x17,0x22,0x17,0x05,0xdc,0x82,0xfd,0x7c,0x5e,0xfa,0x62,0x23,0xa8,0xbe,0x14,0xdc,0x84,0x42,0xf0,0x90,0xc5,0xb0,0x68,0xbe,0x64,0x74,0xc3,0xa5,0xd1,0x10,0xcf,0xe3,0xd1,0x09,0x98,0x3b,0xb9,0x19,0xf2,0x9b,0x5d,0x90,0x99,0x3d +.byte 0x30,0x67,0x55,0x34,0x50,0x78,0x3b,0xd2,0x70,0xb1,0xd2,0x91,0x4e,0xfa,0x98,0x7d,0x93,0xad,0x7f,0xb1,0x89,0xb0,0x61,0x4c,0x95,0x3f,0x51,0x95,0xd7,0xc6,0x87,0x7a,0xc5,0x53,0xb6,0x6d,0x61,0xec,0xbe,0x40,0x1f,0xa5,0x7f,0x73,0x4a,0x78,0xd2,0x58,0x1e,0x41,0x8e,0x9a,0x08,0x49,0xce,0x39,0x52,0xf9,0xd1,0xcd,0x41,0xb6,0x39,0x99 +.byte 0xfa,0xfb,0x1c,0x38,0xe1,0xe5,0xe1,0xd6,0x16,0x0f,0xc8,0x12,0x0b,0x88,0xdc,0x00,0xd4,0x7b,0x24,0x69,0x16,0x27,0x37,0xa3,0xd5,0x39,0x27,0x34,0xda,0x23,0x24,0x50,0x13,0xd8,0x02,0x48,0x14,0xd7,0xc9,0x28,0x1b,0xba,0x66,0xa8,0xc8,0x9a,0x7b,0xed,0x92,0x5b,0x78,0x46,0x79,0x5a,0xd1,0xf2,0x75,0xf0,0x98,0xd3,0x9f,0x4c,0x72,0x51 +.byte 0xed,0xe5,0xce,0x83,0xac,0xe1,0xc8,0x2b,0x7f,0x77,0x6a,0x70,0xdd,0x80,0x88,0x62,0x58,0x94,0x15,0x72,0x53,0x34,0x48,0x17,0xb2,0xe8,0x4a,0xab,0x2d,0x4e,0xef,0x93,0xb7,0xba,0xd1,0x1c,0x53,0x69,0xd5,0xac,0xa1,0x61,0x7c,0x44,0xec,0x81,0x72,0xcc,0xe8,0x6f,0x5d,0x67,0x1f,0x65,0x9a,0x34,0xf5,0x95,0x89,0x1c,0x2e,0x54,0x42,0xc0 +.byte 0x85,0x79,0xb0,0xfa,0x44,0x0d,0x28,0xc4,0x20,0x2f,0x2e,0x85,0x73,0xfb,0xf6,0x44,0x0e,0xbc,0xab,0x4f,0x42,0x5c,0xdb,0x1f,0x11,0x6f,0x9a,0x23,0x75,0x70,0x78,0x1a,0xd2,0xb8,0x83,0x72,0xf5,0xf6,0x40,0x48,0x3f,0xc8,0xd5,0xe3,0x2c,0x08,0x5c,0x0c,0x2a,0xb0,0x8e,0x69,0xe6,0xdf,0x4b,0x4a,0x95,0x9c,0x4c,0x5e,0x09,0x24,0xc3,0xd0 +.byte 0x4c,0x20,0x0c,0x9a,0xce,0x95,0x53,0x6a,0x7b,0x54,0x0a,0x7e,0x73,0xa7,0x95,0xe7,0x7c,0x67,0x9d,0x05,0xbc,0x26,0x3a,0xa1,0x43,0x99,0x7a,0xee,0x04,0xcf,0x94,0x02,0x36,0x26,0xb3,0x81,0x74,0x22,0xee,0x1e,0x9e,0xe2,0x82,0xd4,0xe0,0xca,0xf2,0xec,0xd2,0x9e,0xf8,0x3f,0x9f,0xc4,0x5b,0xe8,0xfc,0xbd,0x93,0xaa,0xc3,0x2f,0xce,0xf2 +.byte 0x32,0xa9,0x23,0xf3,0xe1,0x06,0xae,0x7d,0x87,0xe9,0xe7,0xe0,0xc1,0x7c,0x74,0x9c,0xdf,0x86,0x6d,0x5c,0x8a,0x51,0x45,0x9d,0x43,0x49,0x87,0x45,0x75,0xfb,0x40,0x55,0xab,0x9a,0x52,0xf1,0x32,0x5e,0xde,0x8b,0x52,0x50,0x9f,0xb8,0x7a,0xe5,0x1c,0x40,0x4f,0xc7,0xb1,0x29,0x90,0xcc,0x98,0x99,0xa0,0x4e,0x1c,0x43,0x6e,0x91,0x61,0x9c +.byte 0xf7,0xa7,0xf7,0x43,0x89,0x15,0x8c,0x56,0x22,0x9d,0x66,0xac,0x71,0x19,0xdc,0xb9,0xf8,0xd3,0xaf,0x2e,0xd7,0x7b,0xc3,0xe4,0x25,0x0d,0x2c,0xaf,0x15,0x8c,0xea,0x2b,0xdb,0x8c,0x71,0xff,0x55,0x29,0x11,0x35,0x11,0xef,0xb0,0x97,0xb2,0x95,0xab,0xeb,0x4a,0x40,0x1c,0x92,0xc4,0x13,0x36,0x74,0x53,0x78,0x51,0x6c,0xca,0x37,0xcb,0xda +.byte 0x5e,0x6b,0x8c,0x69,0xc5,0xd0,0xf9,0xdb,0xbe,0xd9,0x30,0x42,0x16,0xcf,0x40,0x63,0x87,0x10,0x28,0x7d,0xae,0xa9,0x8c,0x14,0x99,0xe1,0x4f,0x11,0x98,0x7e,0xe9,0x14,0x9c,0x2e,0xe2,0xed,0x20,0x15,0x7c,0xb5,0xf4,0xc9,0x16,0x30,0x8d,0x7c,0x61,0x45,0xf4,0x23,0xf5,0xdb,0x81,0x8f,0x6b,0x41,0xaf,0xa9,0xf8,0x51,0xbe,0xc4,0x5d,0x8c +.byte 0xda,0x5e,0x07,0x62,0x7c,0xc6,0xd1,0xae,0x91,0x5e,0x05,0xa8,0xc6,0xc5,0xfc,0xb7,0x12,0x2e,0x7f,0x85,0xef,0xbd,0x2b,0x56,0x57,0x32,0xad,0x3d,0x97,0x5b,0x26,0xcf,0xd3,0xe7,0x48,0x4e,0x9b,0x15,0x98,0x77,0xb4,0x3e,0xf1,0x3e,0x1c,0x21,0xb0,0x98,0xe2,0x69,0xee,0xd8,0x29,0x10,0x93,0xd5,0xc9,0x71,0x8f,0x28,0xbd,0xe3,0xd9,0x54 +.byte 0xf3,0x72,0xb6,0x85,0xe9,0x2b,0xdc,0x96,0x52,0x53,0x5c,0x61,0x54,0x96,0x4a,0xf5,0x3f,0xee,0x53,0xc3,0x63,0xc9,0x67,0x14,0xdf,0x3a,0xfe,0x46,0x8a,0xa6,0xec,0x06,0x0c,0xea,0xb8,0x82,0x49,0xb5,0xed,0x94,0xf2,0xac,0x76,0xd5,0x87,0x79,0x15,0x4f,0xa1,0x34,0x90,0x8e,0x7b,0x02,0xf7,0x02,0xb0,0x07,0xa5,0x7c,0x6b,0xc2,0x34,0x84 +.byte 0xd4,0xaa,0xbf,0x32,0x81,0xf7,0xed,0x1f,0x61,0xd7,0x6e,0x40,0xa0,0xdc,0x4c,0xb5,0xb7,0x36,0x3a,0x87,0x09,0x82,0xd5,0x5a,0xc8,0x1f,0xe6,0x77,0xa6,0xaa,0xcf,0x3c,0x7b,0x23,0x46,0x58,0x95,0x7f,0x84,0xba,0x4a,0x05,0x0b,0x36,0xdb,0x58,0xf9,0xa4,0x2b,0x24,0xd4,0x8a,0xbc,0xb2,0xb7,0x04,0xac,0x64,0x0e,0x88,0x25,0x9a,0x69,0xe7 +.byte 0x87,0x70,0x0b,0xa6,0x43,0xe9,0xb2,0xbb,0x4e,0x4c,0x10,0x19,0x44,0x4d,0x12,0x4c,0x58,0x2a,0x49,0xe2,0x01,0xd2,0x65,0x23,0xee,0xe9,0xca,0x0b,0xa1,0x28,0x02,0x8d,0xcf,0x37,0x06,0xbc,0x5d,0x35,0xba,0xec,0x97,0x95,0xcc,0xfe,0x7b,0xc9,0x1c,0x0d,0x89,0x4e,0xe1,0x8d,0x9b,0x5e,0x5b,0xb9,0x6c,0x24,0x73,0x9a,0x62,0xd7,0xc5,0xfa +.byte 0x54,0xeb,0x05,0x22,0xd9,0xe7,0xc4,0x68,0x88,0x20,0x43,0xd9,0x14,0x47,0xd7,0xa5,0xd0,0xce,0x10,0x77,0xe8,0x5c,0x85,0x39,0x99,0x3f,0x72,0x88,0x4f,0x22,0x15,0x87,0xa0,0xa3,0x47,0x10,0x81,0x64,0xff,0x94,0x77,0x5d,0xce,0x6d,0xd8,0x29,0xb1,0x9c,0x8e,0xce,0xa8,0x39,0x4f,0xfc,0x36,0x3c,0x50,0xb2,0xf1,0x08,0x66,0x1a,0xf0,0x22 +.byte 0x65,0x1f,0x4d,0x17,0xd3,0x63,0x10,0x64,0xd1,0xc6,0x5a,0x3e,0x82,0x72,0x0c,0x48,0x5e,0x07,0x9c,0x07,0xa0,0x40,0x60,0xab,0x74,0x9a,0x00,0xdf,0xd7,0x7d,0xd4,0x11,0x4e,0xce,0x5a,0xaf,0x12,0x4f,0xe7,0x12,0x36,0x1a,0x12,0x11,0x16,0xb7,0xad,0x4b,0x28,0x84,0x7b,0xd8,0x30,0x0d,0x85,0xb8,0x76,0xde,0xa3,0x78,0x8c,0xb7,0x7c,0xbc +.byte 0x97,0x33,0x53,0x95,0xf8,0x14,0x5f,0xf8,0x0d,0xc1,0x6b,0x79,0xa2,0x42,0x49,0xab,0xae,0x8e,0x78,0xf3,0x51,0x01,0xcc,0x20,0x36,0x80,0xbd,0x32,0x0b,0x1b,0xd2,0xcd,0x27,0x52,0x69,0x1b,0x4a,0x37,0xba,0x31,0xe4,0xc2,0x03,0x8d,0x00,0x48,0x4b,0xcd,0x39,0x2e,0xec,0x94,0x2e,0xe0,0x81,0xfd,0x94,0xd9,0x86,0x39,0x23,0x87,0x3c,0x2f +.byte 0x25,0xe1,0x5b,0x22,0xe0,0x2e,0x37,0x6d,0x9b,0x97,0x9c,0x94,0x37,0x01,0x26,0xb8,0xb1,0x73,0x7c,0xfc,0x0a,0x64,0xe7,0x54,0xf1,0x0f,0x71,0xa1,0xd6,0xc7,0xc8,0xb4,0x86,0x2d,0xfe,0x30,0x8b,0xca,0xb2,0x18,0x21,0xc0,0xc7,0x7d,0x60,0xcf,0x2e,0x25,0xb0,0xa4,0x1a,0x28,0x19,0xa9,0xa9,0x15,0x32,0x5e,0x21,0x89,0x3a,0x99,0x5f,0x50 +.byte 0x86,0x37,0x3b,0x10,0xb8,0xa5,0xad,0x8e,0xbf,0xfc,0x8c,0x85,0xf1,0x76,0x5c,0xe7,0x4d,0xac,0xe7,0x21,0xb3,0x45,0x87,0x3b,0x05,0xc8,0x41,0xf4,0x99,0x83,0x28,0x40,0x6b,0x30,0x37,0x31,0xd2,0xb3,0xdd,0x43,0x3b,0x3f,0xec,0x50,0x58,0x7d,0x20,0xc6,0xb2,0xa9,0x3c,0x22,0x38,0xea,0x16,0x32,0x01,0xc4,0xb0,0x9f,0x7d,0x12,0x91,0x82 +.byte 0x0c,0xd8,0x36,0xfc,0xa4,0xec,0x06,0xb2,0xc2,0xce,0x9b,0xa4,0x53,0x71,0x77,0xdd,0xc3,0xfc,0x34,0x6f,0xd9,0x5c,0xfc,0x36,0xdd,0x63,0x19,0x06,0xfb,0x3c,0xf3,0x3f,0x82,0x28,0x6d,0x00,0xf9,0xfd,0x8d,0x6b,0x79,0x06,0x8a,0xe7,0x6f,0xcc,0x39,0x12,0x80,0x71,0xcb,0x71,0xb3,0xb6,0xa4,0xa8,0xbe,0x61,0x9d,0x1f,0x48,0xa2,0x15,0xa1 +.byte 0xb5,0xf5,0x16,0x70,0xc5,0x39,0xce,0x43,0xa3,0x09,0xe5,0xf4,0x8b,0x77,0x18,0x5e,0xa0,0x77,0xa3,0xa4,0x17,0x2c,0x3e,0x50,0x73,0x2f,0xaa,0x5d,0x58,0x5e,0xdc,0xec,0xaf,0xca,0x6e,0x57,0x80,0xa3,0xd5,0x94,0x30,0x7c,0x11,0x75,0xc4,0xbb,0x9d,0x18,0xc1,0x5a,0x58,0xc7,0x04,0x56,0xb1,0x3a,0x21,0x55,0x02,0xea,0xad,0x58,0x19,0x72 +.byte 0xdc,0x7d,0x0e,0x41,0x62,0x1b,0x5c,0x48,0x97,0x3f,0xed,0xd7,0x4e,0x30,0x1f,0xf5,0xde,0xc5,0x23,0xf2,0xd7,0x22,0xde,0x2f,0x3e,0x80,0x06,0x81,0xf6,0x24,0xb7,0x91,0x09,0x56,0x91,0x00,0x1a,0xea,0xaa,0xa6,0xc2,0x8b,0xc9,0x78,0xd7,0xde,0xf6,0x87,0xb1,0x04,0xcc,0xbb,0xc1,0xc6,0x48,0x43,0xc8,0x03,0xb2,0xdd,0x70,0xc0,0xe3,0xf5 +.byte 0xc0,0xf5,0x13,0xd5,0x11,0x41,0x7f,0x1a,0xdc,0x48,0xf5,0xd6,0x1b,0x0a,0x84,0xd2,0x84,0xcd,0x10,0x4f,0x0a,0xd7,0xcb,0x41,0x61,0x1c,0xcc,0x5c,0xa9,0xbd,0x6e,0x6a,0xf3,0x81,0xd8,0xaa,0x3a,0xff,0x39,0x90,0x8e,0x33,0xe6,0x58,0x13,0x5f,0xec,0x58,0x74,0x35,0xe0,0x06,0x38,0x0f,0xd0,0xbf,0x8d,0xf7,0x26,0x99,0xea,0xdd,0xfb,0xdf +.byte 0x5b,0xcc,0xf1,0x3d,0x9b,0x84,0x8b,0x5b,0xe8,0xc4,0xc6,0x3e,0x0a,0x55,0xec,0x73,0xf7,0x70,0xb1,0xc8,0xfa,0xf8,0xd6,0x72,0x2c,0x6d,0x8d,0xc1,0xa3,0xb2,0x9a,0xe7,0x80,0x6d,0x09,0xa6,0x76,0x06,0x71,0xf9,0x95,0x9a,0xa9,0x2f,0x4b,0x7c,0xad,0x64,0x01,0x01,0x91,0xe4,0x87,0x1d,0xe1,0x46,0xf5,0x4a,0x96,0xc6,0x58,0xd9,0xe0,0xa9 +.byte 0x2f,0x80,0x1e,0xd6,0xe9,0xa6,0xeb,0xfe,0x5a,0xb6,0xd3,0xe8,0x76,0xd2,0x51,0xc6,0x68,0x34,0xc9,0xed,0x76,0x29,0x7e,0x63,0xb1,0x09,0xdf,0x23,0x47,0x41,0x2f,0x70,0x46,0x4d,0xbb,0x36,0xc8,0x84,0xe9,0x58,0x20,0x6b,0x04,0xb2,0xa4,0x1c,0x4d,0xe0,0xa5,0xa2,0x59,0xc9,0xed,0x63,0x25,0x5f,0x3f,0x24,0x18,0x59,0x29,0xe3,0x79,0xbd +.byte 0x35,0x50,0xee,0x81,0x59,0xff,0xd4,0x0e,0x62,0xd3,0x52,0x30,0x81,0xa2,0xe6,0x9e,0xc3,0xc9,0x7a,0x10,0x57,0x36,0x27,0xb7,0x3c,0x61,0x38,0x89,0x70,0xa0,0xc5,0xdf,0x78,0x05,0xa5,0x81,0xe2,0x8a,0x93,0xda,0x7c,0xaf,0xbf,0x6d,0x42,0x09,0x1b,0x43,0x9d,0xf9,0x26,0x87,0xc3,0x84,0x6c,0xb7,0x25,0x31,0x50,0x00,0xd8,0x13,0xc0,0xc0 +.byte 0x6c,0x21,0x82,0x6d,0xf9,0x2f,0xef,0x40,0xe8,0xf8,0xae,0x4d,0x9e,0x1d,0x4a,0xda,0xa0,0x0d,0x77,0x36,0x8b,0xed,0xaf,0x6e,0x2a,0x3d,0xa8,0x36,0xe4,0xff,0x37,0xc2,0xa3,0x11,0x5e,0x68,0x58,0xa8,0xa3,0x19,0xf3,0xc1,0x33,0xea,0x39,0x49,0xfe,0x51,0x87,0xb6,0x31,0x6a,0x61,0x47,0xe7,0xb1,0x46,0xde,0x5a,0xf7,0x93,0x06,0xa7,0x72 +.byte 0xa9,0x2e,0x9e,0x2e,0xc9,0x7f,0xe1,0xb2,0x86,0xb4,0xc9,0xff,0x3b,0xf7,0xaf,0xef,0x91,0x47,0xc2,0xfa,0x42,0x0a,0x4e,0xbb,0x10,0x0d,0xea,0xa4,0x11,0x54,0xa9,0x53,0xde,0xc4,0x01,0xde,0xc7,0x2d,0x1f,0x18,0x40,0x79,0xd1,0x44,0x7d,0x51,0x1d,0xf6,0xdc,0x6f,0xad,0xa2,0x5d,0xd9,0xbe,0x5d,0x11,0x57,0xb7,0x68,0x0d,0x96,0xad,0xb3 +.byte 0x32,0xf7,0x99,0xcc,0x0e,0x03,0xa2,0x79,0x9b,0x63,0xce,0xee,0xf9,0x0c,0xfd,0xfa,0x9a,0x82,0xc9,0x43,0xd3,0xd5,0x23,0xfa,0xac,0x75,0xbe,0x61,0x85,0x18,0xb6,0x75,0x72,0x8d,0x17,0xdd,0xde,0x3f,0x6d,0xb4,0xe8,0x47,0x09,0xe1,0xa7,0xe0,0x4c,0xce,0x93,0x7b,0xc3,0xa3,0x3f,0xc0,0x81,0x21,0x6f,0xe8,0xce,0x68,0x61,0xde,0x1a,0x58 +.byte 0x48,0x7f,0xb4,0xae,0xfd,0x7c,0x80,0x63,0x43,0x5a,0xfc,0xf9,0xf9,0x4d,0xb4,0x8c,0x85,0x27,0x12,0x4f,0x7d,0xe8,0x69,0xc3,0x7d,0x57,0x63,0x0d,0x5f,0xd2,0x85,0x4e,0x0c,0x9a,0x0d,0x1c,0x4d,0xdf,0x3f,0x9a,0x16,0x2f,0x34,0x43,0xc3,0xf0,0xf1,0x16,0x16,0xd2,0x9f,0x2e,0x78,0xd8,0x3c,0x63,0xa0,0x7e,0x02,0x8e,0x65,0xd2,0xb0,0x61 +.byte 0xb0,0x1d,0x7a,0x8f,0xf7,0x30,0x45,0x05,0xf7,0x15,0xc3,0x69,0x24,0x98,0xc3,0x74,0x20,0x16,0x09,0x57,0x39,0x16,0x68,0x23,0x33,0x62,0x4c,0xf5,0xd6,0x34,0xe3,0xad,0x7a,0x14,0x64,0x8c,0x2b,0x48,0x96,0xf9,0x85,0x39,0x19,0x73,0x27,0x04,0xa6,0x55,0x66,0x15,0x8c,0xf1,0x47,0xcd,0x53,0xaf,0x31,0x3a,0xd9,0xfa,0xf9,0xac,0xbd,0xb8 +.byte 0x27,0xe0,0xaa,0xa5,0x62,0x85,0x9f,0xbb,0x4e,0xaf,0xa5,0x72,0x42,0x98,0xa6,0x7f,0xa1,0xb6,0xac,0x17,0xc2,0x2c,0xf3,0xd6,0xc0,0x14,0x4b,0xb3,0x86,0x88,0x89,0x81,0x83,0x7d,0x9d,0xf7,0xe3,0xe4,0x27,0xba,0xa8,0x03,0xb4,0xe3,0x97,0x74,0x1c,0x0d,0xab,0xb4,0x6e,0xc6,0x9e,0x58,0xdd,0x15,0x95,0x2f,0xa6,0xd6,0xaa,0x5a,0x96,0x71 +.byte 0x69,0xca,0xe0,0x5f,0xd2,0x3c,0x66,0x1b,0x58,0x25,0xd6,0xec,0xc0,0x46,0x3e,0x56,0xd0,0xe1,0x36,0x44,0x56,0xc0,0xf2,0x15,0x48,0x9e,0x07,0xce,0x5d,0xb9,0xd4,0x4e,0xcc,0x31,0x26,0xaa,0xdb,0x6a,0x87,0x98,0x0e,0x37,0xfc,0xc5,0x91,0x28,0x1b,0xf8,0x70,0xbf,0x30,0x71,0xbe,0xa0,0x81,0x1e,0x30,0x33,0x37,0x37,0xc8,0x07,0x08,0x9b +.byte 0x8f,0xe4,0x27,0x9f,0x90,0x67,0xb4,0x96,0x08,0xd7,0x30,0x9e,0xa6,0x53,0x39,0xd1,0x9b,0xde,0x02,0x35,0xf3,0xb1,0x19,0x7b,0xd2,0x28,0x5a,0xc3,0x1f,0x69,0x0e,0x48,0xbf,0xa3,0xb4,0x55,0xd1,0x10,0x3d,0x30,0x71,0xc6,0x82,0x2d,0xb8,0x6f,0xe6,0x99,0x6b,0xef,0x9f,0x86,0xed,0x93,0x13,0xb6,0xb0,0x87,0x91,0x77,0x4a,0x00,0xe4,0x5f +.byte 0x4c,0x7d,0x41,0x3b,0xc9,0xda,0x99,0x6b,0xff,0xec,0xef,0x05,0x3c,0xc6,0x0d,0xec,0x68,0x12,0x44,0x31,0xac,0xc9,0x0b,0x9c,0xf5,0xea,0xed,0xda,0x88,0xec,0x6e,0x6e,0x73,0xda,0x85,0x52,0x69,0xa1,0x13,0x52,0xcf,0xc3,0x4d,0x95,0x88,0xec,0x1f,0x53,0x81,0x6f,0xac,0x53,0x60,0x48,0x20,0x9a,0x4d,0x88,0x2c,0x4b,0xb0,0x69,0x5f,0x07 +.byte 0xf9,0xa7,0x2c,0x9a,0x13,0x91,0x86,0xa2,0x98,0x20,0xa9,0x80,0x1e,0xaa,0x8e,0xbc,0x3c,0x3d,0x51,0x34,0x3d,0x5b,0x80,0xe4,0x39,0xfe,0xc8,0xb1,0x6d,0xfe,0x36,0x9d,0x9b,0xde,0x22,0x39,0x41,0xe9,0xff,0xda,0x67,0x67,0xd4,0xeb,0x60,0x44,0xd5,0xc1,0x74,0xcd,0xa0,0x98,0x06,0x34,0x76,0xf8,0xe5,0x0d,0xc8,0x52,0xca,0x83,0xd2,0xdd +.byte 0xf2,0x12,0x36,0x7d,0x3e,0x7f,0xbd,0xa6,0xd8,0x1e,0xc0,0x9d,0x67,0x2a,0x33,0x87,0x86,0x79,0x7a,0x70,0x3a,0x63,0x0b,0x74,0x77,0x89,0xce,0x8f,0x5a,0x3b,0xf3,0x2e,0x52,0x4d,0x1d,0xc6,0xc3,0xc8,0x69,0x98,0xdc,0x81,0x45,0x99,0xfd,0xcd,0x6b,0x6d,0x05,0x33,0x40,0xde,0xb3,0xbd,0x4a,0x27,0xc2,0x9e,0x8b,0xf1,0x4c,0xac,0x92,0x82 +.byte 0x55,0x04,0x79,0xe7,0x28,0x74,0x5b,0x70,0xdc,0xc0,0x4f,0x0c,0xcf,0x3a,0x7f,0x08,0xcc,0x2e,0x1d,0xfd,0x8d,0xd9,0x5c,0xe2,0xa7,0x98,0xc1,0xe8,0x4b,0x96,0xbe,0x27,0xd6,0xfd,0x0a,0x59,0x30,0x33,0x85,0x41,0xc5,0x63,0xab,0xe7,0xda,0x26,0xbd,0xce,0xe7,0x9d,0x50,0xd7,0x2d,0x67,0x7a,0xa1,0x05,0x2b,0x74,0x60,0x5e,0x6c,0x04,0x2b +.byte 0xba,0xe6,0x2d,0x25,0xc9,0x00,0xd0,0xf0,0xa5,0x4f,0x22,0x59,0x34,0xb8,0x43,0x6b,0xb7,0x67,0x25,0x99,0xff,0x75,0x17,0xb1,0x13,0x7e,0x34,0x1d,0x42,0xa3,0x6b,0xb5,0x9d,0xfe,0xa1,0x71,0x0d,0x90,0x81,0x58,0xfc,0xc7,0x85,0xe6,0xbd,0xc2,0xcc,0xc9,0xc9,0x23,0x6e,0xd6,0xbe,0x4a,0x61,0xd4,0xf5,0x9e,0x37,0x6a,0xb1,0x8b,0x91,0x59 +.byte 0xe1,0x3e,0xac,0x87,0x54,0xa6,0xf9,0xf5,0x90,0xd2,0x7c,0xba,0x4b,0x37,0x33,0x1b,0x88,0x5e,0xbd,0x78,0x3f,0xed,0x43,0x40,0x4f,0x16,0x59,0x29,0xbc,0x27,0x98,0x87,0xfe,0x62,0x56,0x93,0x21,0x0a,0xca,0xc1,0x21,0x99,0xb3,0x32,0xbb,0x5a,0x79,0x40,0xab,0xea,0x00,0xf8,0xe9,0x90,0x0d,0x59,0xbd,0x6e,0x7f,0x74,0x01,0x50,0x67,0x3a +.byte 0x8e,0x24,0x1d,0x6c,0xc8,0xd6,0x93,0xca,0x71,0x95,0xec,0xac,0x78,0xe9,0x1f,0x38,0x0d,0xa2,0xe5,0x32,0x90,0xa2,0xaf,0xef,0x15,0x06,0xd6,0x52,0xa4,0xd2,0x94,0x0f,0xbd,0x86,0x81,0x82,0x12,0x9b,0x3a,0xc4,0x0b,0xdf,0x8a,0x5f,0xc6,0x3b,0xb4,0x13,0x9b,0xeb,0xed,0x2d,0x06,0x46,0xa3,0xbe,0xbb,0xe1,0xe1,0x93,0xa1,0xab,0x46,0xf3 +.byte 0xd0,0xd9,0xce,0xb6,0xfb,0xd0,0xd5,0xb6,0xde,0x0c,0xed,0x90,0x18,0x6c,0x1e,0x46,0xb0,0x36,0xa7,0xf1,0x29,0xbe,0x9a,0xa0,0xcf,0xed,0xd6,0xaf,0xb8,0x89,0x9b,0x83,0xa8,0xa0,0x8d,0x26,0xaf,0x8f,0x48,0x66,0xfc,0x22,0x1a,0xc0,0xcf,0xf8,0x90,0x57,0x7e,0x25,0x5f,0xe4,0x0c,0x68,0xd2,0xaa,0x59,0x09,0x2f,0x6d,0x3f,0x80,0x8d,0xe0 +.byte 0xfa,0x25,0xb0,0xe0,0x85,0xe9,0x13,0x39,0x3d,0x1f,0xed,0xd1,0x94,0x9b,0xb5,0xc2,0x65,0xda,0xec,0x7a,0x1f,0x2f,0xe2,0x0a,0x42,0x09,0xbd,0x79,0x7d,0xcb,0xb8,0x4a,0x02,0x2b,0x72,0xaf,0x33,0x85,0x72,0x1b,0x18,0x0c,0xa3,0xec,0x39,0x0e,0x30,0x21,0x41,0xf8,0x2e,0xc7,0x8e,0x5c,0x4c,0xda,0x22,0x49,0x8c,0xa7,0xfb,0x89,0x76,0x2e +.byte 0x45,0x90,0x6c,0xeb,0x70,0x78,0x6d,0x6e,0xee,0x12,0x6c,0xb9,0xb9,0x8d,0xe7,0xf3,0x4d,0x86,0xc4,0x58,0x49,0x55,0xa6,0x86,0xaf,0x39,0x03,0x21,0xfa,0xa7,0xdd,0x51,0x80,0x79,0x6d,0x5b,0xa5,0x58,0x0f,0xfd,0x57,0xb3,0x83,0xe6,0x0d,0x25,0xec,0x55,0xdc,0x0a,0x6f,0xbc,0x7d,0xfd,0x94,0x16,0xdd,0x60,0x9f,0x2a,0x4b,0x6c,0x82,0x03 +.byte 0x4b,0x44,0xbb,0x84,0xdc,0xcb,0x97,0x8e,0x58,0xe7,0xc1,0x79,0xa9,0xf3,0x53,0x78,0x1f,0xf1,0x3e,0xdd,0x94,0x24,0x6d,0xb1,0xd2,0x99,0xbc,0xa1,0xbe,0x7d,0xdd,0xff,0xa8,0x5d,0xd2,0xc2,0xba,0xad,0x60,0x6b,0x40,0x5d,0x7b,0x99,0xd2,0xea,0x45,0x66,0x80,0x6c,0x47,0xf2,0xeb,0x94,0xb8,0xe8,0xe8,0xa0,0x46,0x05,0xe1,0x4f,0x40,0x23 +.byte 0x34,0xdf,0x91,0x63,0xae,0xc9,0xe7,0x32,0x20,0x9a,0x95,0x1e,0xcd,0x5a,0x60,0xe1,0x3d,0xe0,0xf1,0x16,0x3d,0x6e,0x8b,0x96,0x23,0xe0,0xaa,0x1d,0x1a,0xde,0xed,0xc6,0x63,0xb5,0x46,0x8b,0x78,0x71,0x9a,0x14,0x88,0x79,0x61,0x68,0x6b,0xcf,0x80,0xd8,0x9c,0xaa,0xfb,0xb1,0xc0,0xf3,0x39,0x07,0x26,0x56,0x80,0xba,0x9d,0xf5,0xe7,0x95 +.byte 0x99,0xac,0x90,0xea,0xe7,0xe1,0xc9,0x0d,0x40,0x94,0x83,0x58,0xd2,0xc3,0x2b,0xce,0x1e,0xae,0x2a,0xa6,0xfa,0xc7,0x89,0x44,0xcb,0xe2,0x9e,0x74,0x33,0xaa,0x70,0xe5,0x28,0x3a,0x51,0x74,0x53,0xe2,0xfb,0x7c,0x47,0x76,0x22,0xdf,0x46,0xa6,0x01,0x17,0xef,0x88,0x43,0x46,0x3f,0x1a,0x26,0x0c,0xad,0xf4,0x31,0x55,0xf2,0xe7,0xc9,0x35 +.byte 0x6f,0x7c,0x0c,0x5c,0xfd,0x43,0xa4,0x6c,0x6c,0x74,0xf0,0xa4,0xec,0x1d,0x83,0x97,0xc1,0x6c,0x9c,0xd7,0x97,0x90,0x7c,0x07,0x88,0xc0,0xb4,0x79,0x2c,0x7a,0x9c,0x93,0xa2,0x15,0x6c,0xd2,0xa9,0x45,0xa5,0xc1,0x16,0xfe,0x72,0xf4,0x01,0x32,0xe4,0x51,0xdd,0xdb,0x50,0xe3,0x61,0x4e,0x29,0x1e,0x27,0x10,0xe9,0x5e,0x30,0x2b,0x30,0x27 +.byte 0x99,0xff,0x92,0x23,0x04,0x8d,0x28,0x68,0x28,0xd3,0x0f,0xec,0xbb,0xf9,0xfb,0x44,0x1c,0xaa,0x8b,0x38,0x95,0x67,0x1e,0xf5,0x42,0xc9,0xec,0x05,0xeb,0x94,0xe5,0x1c,0x8a,0x2a,0xef,0x3b,0x74,0x46,0x89,0x4f,0xd5,0x6f,0xa0,0xe5,0x74,0xae,0x24,0x8d,0x81,0xae,0x9d,0x3c,0x3e,0x3d,0x41,0x54,0x8f,0xd9,0xc2,0x98,0xf4,0x84,0xeb,0x30 +.byte 0x6a,0x06,0x67,0x11,0x2d,0xb0,0x55,0x70,0x26,0xdf,0x19,0x5f,0x81,0xe9,0x39,0x69,0x3a,0xd6,0x09,0xa4,0x40,0x22,0x1f,0x5c,0xbf,0xd5,0xa6,0xea,0x69,0x99,0x0d,0xea,0x70,0xed,0xfe,0x3a,0xba,0x23,0x8b,0xab,0x08,0xfe,0xfb,0xe9,0x1a,0x88,0x80,0x13,0x45,0x9c,0xca,0x2e,0xda,0x4a,0xc8,0x5d,0x15,0x52,0x87,0x36,0x9b,0x87,0x8a,0x76 +.byte 0x5d,0x31,0x24,0x4a,0xcb,0xf5,0xd3,0xd3,0xc1,0xec,0xde,0x1e,0x48,0x99,0xd5,0xcb,0x93,0xf7,0xca,0x2d,0xa4,0x66,0x5e,0xa4,0xcf,0xc6,0x15,0x20,0x10,0xb1,0xe2,0x8e,0xb9,0x44,0xa7,0xc3,0x54,0x14,0x86,0x08,0xb7,0x89,0x52,0xd5,0x72,0xc5,0x62,0x4d,0x82,0x96,0x23,0xcf,0x6e,0x52,0x3a,0x92,0x53,0x48,0xa2,0xa5,0x9d,0xa4,0xcc,0x32 +.byte 0x45,0x5a,0xdf,0xe2,0xbe,0xce,0x28,0xc8,0xb1,0xb7,0x0f,0x6a,0x38,0x28,0x14,0x66,0x55,0x7a,0xab,0x35,0x56,0xd0,0xc7,0xe5,0xa1,0x8a,0x84,0xf7,0xc5,0xa9,0xdb,0x2a,0x45,0xe9,0x34,0x2d,0xf2,0xed,0x2b,0xa9,0x9e,0x49,0x1b,0x23,0x10,0xeb,0x0e,0x01,0x46,0x6f,0x7a,0x50,0x09,0x5f,0xc3,0xb6,0x1e,0x2f,0x1a,0x3e,0x89,0x32,0xaa,0x5a +.byte 0xaa,0xef,0x23,0x45,0xdc,0xb5,0x7e,0x5f,0x87,0x77,0xde,0x50,0xab,0xbf,0x9e,0x62,0xa8,0xe0,0xf0,0xc8,0x4a,0xf1,0x4e,0xaf,0xe4,0x50,0x8a,0xfe,0xc9,0x68,0xdd,0x19,0x1d,0xc6,0x54,0xe5,0x38,0x0a,0x6f,0x36,0xe4,0x85,0xe8,0xab,0xc4,0x06,0xef,0x07,0x29,0xce,0xea,0x9d,0x2e,0x22,0x97,0x18,0x7e,0x59,0x89,0x92,0x31,0xc5,0x87,0x50 +.byte 0xa8,0x23,0x22,0x58,0x47,0x27,0x1c,0x89,0x5f,0xec,0x94,0x1d,0xb2,0xc8,0x61,0x1e,0x0a,0x80,0xd3,0xe9,0xbf,0x65,0xb9,0x66,0x32,0x56,0xde,0xd2,0x13,0xee,0xea,0xc4,0xc9,0xbf,0x4c,0xb7,0xa4,0x1c,0xc0,0xbf,0xcf,0xa4,0x58,0x1f,0x98,0x1d,0x25,0x4e,0x51,0xd9,0xbe,0x89,0x32,0xdb,0x7a,0xa6,0x39,0xa9,0xbf,0xed,0x65,0x6b,0x92,0xc4 +.byte 0x8d,0xcd,0x63,0x18,0x65,0x44,0x95,0xcf,0x17,0x72,0x8f,0x27,0x79,0x83,0xda,0xe3,0xe7,0xd9,0xca,0x57,0xff,0xa3,0x15,0xbf,0xb6,0xd8,0xc2,0x8c,0xe8,0xdb,0x8c,0xdc,0x54,0x6a,0xc8,0x57,0x6e,0x24,0xc3,0x3c,0x1f,0x33,0xdd,0x68,0xbd,0x7a,0xa3,0xbc,0xa9,0x9a,0xe8,0xfc,0x97,0xa5,0xbe,0x59,0xfb,0x77,0xcd,0x22,0xc6,0x3d,0x95,0x21 +.byte 0xcb,0xf7,0x8d,0xc1,0x77,0xc6,0xe0,0x06,0xb2,0xdb,0xec,0x54,0x19,0xad,0x02,0x25,0xe0,0x0f,0xda,0x4c,0xa5,0xf2,0x47,0x3f,0xc9,0xa0,0x91,0x21,0x39,0xe9,0x74,0x2a,0x9a,0xc1,0x57,0x86,0x3c,0x32,0x27,0x4c,0xc2,0x2d,0x50,0xbd,0x7a,0x04,0x9c,0x45,0x0d,0x7e,0x06,0x1d,0x3e,0xc1,0x6f,0x06,0x7f,0xd4,0x71,0xd3,0x5c,0x66,0x74,0xa7 +.byte 0x33,0x75,0x64,0xa8,0x7d,0xc0,0x23,0xda,0xb0,0x6d,0x12,0xbe,0x83,0x98,0xe7,0x65,0x38,0x4d,0x39,0xc3,0xd7,0x33,0xfb,0x58,0x64,0xfc,0xde,0xd7,0xbf,0x9e,0xdb,0xcc,0x7a,0x35,0xac,0xdf,0x13,0x08,0xbc,0x0a,0x55,0x82,0x5f,0xc3,0x74,0xc5,0xb2,0xdb,0x89,0xdc,0x9c,0x60,0xfa,0x02,0x1c,0xba,0x5b,0x7e,0x0f,0xb1,0x0f,0xad,0x43,0xe1 +.byte 0xe1,0xbe,0x1e,0x06,0x05,0x0f,0x39,0x80,0x3d,0x7d,0xbe,0x8f,0x38,0x25,0x46,0x5e,0xea,0x47,0x36,0x65,0x4c,0x3c,0x6c,0xd6,0xaa,0x46,0xaa,0xb0,0x95,0x1d,0xff,0x67,0x6c,0x70,0x9d,0xec,0x3d,0x3d,0x4c,0x2f,0xd9,0x2b,0xb0,0xbd,0x8c,0x6a,0xca,0xac,0x0c,0x53,0xa1,0xda,0xd8,0xc1,0x3c,0xaa,0xcc,0x50,0x85,0x41,0xa1,0xa7,0xe9,0x7f +.byte 0xf7,0xa8,0x28,0xb1,0x5f,0xd6,0x77,0xc9,0xb5,0xae,0x33,0xa7,0x2d,0x16,0xe0,0x13,0xe8,0xd4,0xf9,0x4e,0x62,0x2e,0xc2,0x9a,0xf3,0x83,0xe0,0x45,0x43,0x68,0x40,0x5a,0x56,0xf3,0x31,0xc8,0x5b,0x46,0x0b,0x38,0x1f,0xa5,0xff,0xe6,0xa1,0x81,0xc0,0x91,0xe5,0x5a,0x63,0x8f,0x47,0x9a,0xe7,0x26,0x0d,0x78,0x8d,0x11,0x7d,0xc8,0xd4,0x9f +.byte 0xc1,0xf7,0x8f,0x93,0xfa,0x2f,0xb5,0xfd,0x6d,0xa4,0x34,0xcf,0x3c,0x6c,0xf6,0x64,0xae,0x5c,0x60,0xa2,0xb4,0xcc,0x18,0x3e,0x08,0x8e,0x36,0x88,0xab,0xc3,0xea,0x53,0x4f,0x1c,0x9e,0xe6,0xef,0x2d,0x9c,0x78,0x4a,0x3a,0x5a,0x60,0x8e,0xf7,0xeb,0x0b,0x36,0xb1,0xbb,0x59,0xe2,0x5e,0x64,0x60,0xe5,0xd6,0x3d,0x2a,0xe1,0x1b,0x03,0x40 +.byte 0x8d,0xde,0x2e,0xd0,0x76,0x0a,0x6b,0x63,0x2a,0x53,0x2d,0x39,0xe0,0x53,0xee,0x7d,0xc4,0x8a,0x39,0xc5,0xda,0xfc,0x31,0x7e,0xa2,0x1b,0x11,0x1d,0x8a,0x8e,0x66,0xf4,0x00,0x17,0xd3,0x78,0x1b,0x94,0xad,0xcf,0xdd,0x56,0xce,0xaf,0xf6,0x34,0xe4,0xb6,0x47,0xe0,0xda,0x1b,0x36,0x4f,0x86,0x26,0xc1,0x65,0xec,0x85,0x8c,0xa9,0xfe,0x96 +.byte 0x75,0x0d,0xe3,0xeb,0x9a,0xa6,0x3f,0xb3,0x10,0x03,0x85,0x24,0xf2,0xb5,0xcd,0x69,0x7d,0xba,0xa2,0x5c,0x8a,0x6d,0x45,0xf4,0xc8,0x4f,0x69,0x8e,0xd4,0x69,0x82,0x42,0xfd,0x00,0x59,0xfd,0x20,0x7a,0x63,0x58,0x56,0x30,0x21,0x73,0xbd,0xd4,0x49,0x84,0x3f,0x51,0x0e,0xfb,0xd3,0xfc,0x93,0x17,0x7f,0x23,0x75,0x25,0xea,0x78,0x79,0xf7 +.byte 0xec,0x22,0xef,0x86,0x91,0x0a,0x90,0x10,0x71,0x3b,0xb8,0x8e,0xb7,0xc9,0xd1,0x26,0x98,0x7d,0x1a,0xab,0x74,0x3e,0x5f,0x10,0xa8,0x47,0xdf,0xc9,0x0a,0x03,0xbb,0xe2,0xbb,0x34,0xbe,0x87,0x1a,0x3e,0x13,0x4b,0xd5,0xdd,0x53,0xb7,0x65,0xb4,0x16,0x38,0xd3,0xfd,0x01,0xde,0xe8,0xba,0x1d,0x33,0x5b,0x7b,0x9b,0x9f,0xfb,0xe7,0x8d,0x82 +.byte 0x21,0x78,0x9e,0xb2,0xf5,0x16,0x37,0x88,0x47,0x9d,0x1a,0x2c,0xfe,0x6a,0xac,0xde,0x3e,0xc4,0xa8,0xed,0x64,0x46,0xdd,0x05,0x07,0x60,0xef,0x99,0x96,0xf0,0x84,0x27,0x38,0x58,0xe5,0xc0,0x53,0x7d,0x07,0xe3,0xa5,0x31,0xb5,0x8a,0xe7,0x50,0x94,0xbb,0x29,0xf9,0x58,0x13,0x91,0x5b,0x54,0x77,0xf6,0x91,0xb8,0x75,0x05,0x3d,0x70,0x3e +.byte 0x07,0x95,0x7d,0x37,0xbd,0x1d,0x29,0x4d,0x33,0x07,0x13,0x2b,0x54,0x70,0x9c,0x31,0xf1,0xcd,0x2d,0x28,0x09,0x43,0x90,0x24,0x8c,0x82,0xb0,0x08,0x71,0x08,0x97,0x7e,0x1a,0xbc,0x82,0xd8,0x31,0x0a,0x13,0xe9,0x22,0xf0,0x8d,0x2b,0x91,0xe5,0x2e,0x34,0x56,0x97,0x86,0xc9,0xbd,0x45,0x1e,0x32,0x03,0xcb,0xa1,0x29,0x00,0x81,0xd4,0x6e +.byte 0x5d,0xbc,0x0f,0x01,0x8d,0x5c,0xb9,0x80,0xcc,0xfe,0x0d,0xa3,0xef,0x8e,0x85,0x59,0x37,0xf7,0x64,0xa7,0xe5,0x2a,0xd5,0x44,0xee,0x91,0xcf,0x6c,0xf5,0x0a,0x9b,0xc7,0xdf,0xb6,0x02,0x2d,0xa4,0xf1,0x22,0x2a,0x97,0xfe,0x1d,0xb7,0x4c,0xc7,0x4f,0x2f,0x0b,0x38,0xd2,0xbf,0xfe,0xe3,0x94,0x55,0xae,0x85,0x0c,0x34,0x59,0x67,0x23,0x7b +.byte 0x4a,0x87,0xd9,0xd2,0xca,0xd5,0x38,0xd2,0x9d,0x05,0x2e,0xd8,0xe3,0x26,0x51,0xa4,0x14,0x66,0xfb,0x38,0x40,0x18,0x3b,0xda,0x43,0x85,0xc9,0xf5,0xf4,0xe7,0x22,0x82,0x45,0xa1,0xdf,0x98,0xa0,0xab,0x5f,0x7a,0x50,0x84,0x75,0x7a,0x70,0xa6,0x3b,0x04,0x20,0xed,0xa8,0x68,0x6d,0x3f,0x43,0xf8,0xb8,0xac,0xc7,0x32,0xa0,0xff,0x47,0xd5 +.byte 0xb3,0x92,0x6a,0x15,0x5a,0xf1,0x7c,0x32,0x30,0xda,0x1e,0x5d,0xab,0xcc,0xd0,0x3a,0xdc,0xcf,0x70,0xd8,0x4d,0xa3,0x50,0xac,0x50,0x42,0x53,0xc6,0xe0,0x3a,0x26,0xdc,0x77,0x30,0x31,0x59,0xa1,0xfc,0x4d,0x48,0x00,0x0d,0xe0,0x66,0xb3,0x9b,0xd3,0x38,0x45,0xbb,0x0c,0x57,0xc5,0x78,0xee,0x8c,0x96,0xea,0xa2,0x16,0xa3,0x12,0xb1,0x06 +.byte 0xd0,0x2a,0x70,0xf7,0xce,0x42,0xae,0x17,0x64,0xbf,0x13,0xa0,0xe9,0x62,0x57,0x1d,0x55,0x78,0xfa,0x72,0x19,0x58,0x15,0xea,0xe5,0xdf,0x72,0x0e,0xc6,0xd3,0xb4,0x3d,0x60,0xee,0x32,0x2a,0xce,0xdc,0xad,0xd0,0x34,0xe6,0xb4,0xcf,0xce,0x5a,0x4a,0x9f,0xaf,0x01,0xb3,0x2a,0xed,0x46,0xa0,0xad,0xaa,0x62,0x8b,0xa4,0xf7,0x4b,0xce,0x32 +.byte 0x35,0x29,0x1e,0x7a,0xda,0x74,0xf8,0xe5,0xda,0x52,0x66,0xaf,0x3d,0x1a,0xff,0x42,0xc0,0xcc,0xb1,0x32,0x36,0x10,0x44,0x34,0x6a,0x16,0xc2,0x5b,0x9a,0x35,0x3f,0xd2,0x29,0xc5,0x76,0x3c,0x24,0xc7,0x2b,0x92,0xae,0xe0,0xe2,0x04,0x6c,0x3b,0x97,0xda,0xfd,0x49,0x43,0x6d,0x35,0xf5,0xc3,0xc1,0x93,0xf8,0x2f,0x25,0xef,0x3e,0xd8,0xf2 +.byte 0xc0,0xb3,0xb5,0x71,0x01,0xe0,0x07,0x11,0xd5,0xf1,0xd3,0x54,0x59,0x93,0x77,0x2e,0x77,0xdc,0x57,0xd7,0x9b,0x0a,0xe2,0xde,0x29,0x04,0x81,0xa1,0x81,0x6f,0x94,0x86,0x39,0xd7,0x29,0x69,0x3f,0xfa,0xe4,0x02,0x01,0x85,0x04,0x21,0xd3,0x17,0xf5,0x68,0x85,0x6e,0x74,0x15,0x56,0xe6,0x5e,0x12,0x1c,0x0d,0x2f,0x7a,0x8d,0xe1,0xc8,0x47 +.byte 0x7b,0xdc,0x35,0x64,0xf1,0x00,0xc0,0x7b,0xd8,0x2c,0x8c,0x60,0x10,0x53,0x11,0x2c,0x5c,0xa2,0xb6,0x05,0xa3,0xcd,0x14,0xb6,0xd0,0x36,0xe9,0x74,0x78,0xc3,0x84,0x6b,0x51,0xa9,0xf9,0xf1,0x05,0xe2,0xd4,0xa3,0x57,0xec,0xb1,0x5e,0xd5,0x75,0x64,0xe3,0xb0,0xf9,0x8f,0x88,0x60,0xdf,0x8e,0x75,0xf9,0x32,0xfc,0x58,0x5b,0x4b,0x17,0xdb +.byte 0x41,0x04,0x6f,0x17,0x7a,0xf8,0xd0,0x47,0x8e,0xeb,0xd1,0xf9,0xa6,0xa8,0x52,0x7e,0x07,0x6b,0x5b,0x4d,0xb9,0xda,0x91,0x40,0x51,0x25,0x67,0x4b,0xf1,0x95,0x12,0x07,0xa9,0xa5,0x33,0x96,0x92,0x5e,0xb4,0x0e,0xf0,0x85,0x2e,0x70,0xd8,0xaf,0xae,0x9a,0x3d,0x0c,0xb0,0xee,0xe1,0x80,0x5a,0xb9,0x17,0xe6,0x00,0xa8,0x82,0xd0,0x9b,0xf5 +.byte 0xe3,0xa0,0x12,0xc4,0x15,0xd6,0x5e,0x57,0x5c,0xd2,0xb9,0xa7,0x8e,0xfd,0x09,0xc3,0xd2,0x66,0xfd,0x86,0xb4,0xdc,0xa3,0xc2,0xfe,0x16,0x86,0xc4,0x98,0xa3,0x2e,0x4c,0xc9,0x2c,0xd6,0x87,0x83,0x1b,0x6f,0xe2,0x44,0xd6,0x72,0x94,0x1d,0xba,0xaf,0x34,0x1f,0xf2,0x40,0x40,0x33,0x24,0x63,0xc1,0x26,0xef,0xbc,0x0f,0x3b,0x3c,0x65,0x2b +.byte 0xa7,0xc7,0xdf,0x96,0x67,0xab,0x92,0x0e,0x04,0x8c,0x82,0x9e,0xbe,0x52,0x61,0x40,0xdf,0x77,0x00,0xc5,0x01,0x9a,0xe9,0xde,0xe1,0xe2,0x45,0xb8,0xed,0x94,0xd5,0xf0,0x28,0x29,0xef,0x0d,0x91,0x07,0x9b,0xfe,0x69,0x78,0x26,0xd7,0xf9,0x51,0xf1,0x9c,0xf2,0xbb,0x83,0x2d,0x79,0x1e,0xff,0x97,0x13,0xdc,0x28,0x93,0x26,0x7c,0x54,0x52 +.byte 0xc0,0x92,0xeb,0x4a,0xa2,0xe3,0x01,0xfc,0x07,0xb9,0x26,0x11,0x03,0xe0,0x19,0xa8,0x9c,0xff,0x3a,0x95,0x26,0x3a,0x17,0xf1,0x7d,0x6a,0x6a,0xb2,0xb5,0x5a,0x07,0x43,0x2b,0xb7,0xdd,0x19,0x14,0xe0,0x05,0x91,0xc5,0xee,0x49,0x35,0x7b,0x1a,0x2d,0x34,0xda,0xa2,0x45,0x7e,0x0d,0x64,0x98,0xb6,0x2e,0x47,0xaa,0x6c,0x73,0x66,0x55,0x01 +.byte 0x27,0xb0,0xa9,0x13,0xa6,0xe0,0x74,0x38,0xb3,0x97,0xfe,0xaf,0xdc,0xc0,0x6a,0x4f,0xd8,0xdb,0x07,0x62,0x61,0x05,0xbb,0xa0,0xa8,0xc5,0xb3,0x89,0x13,0xbb,0x09,0x01,0x6f,0x09,0xcb,0x47,0x62,0x46,0xf0,0x4b,0xf0,0xb7,0x7c,0x39,0x8d,0xe5,0x7b,0x64,0x49,0x32,0x93,0x1e,0x94,0x0a,0x98,0xe0,0xca,0xc6,0x67,0x5b,0xdf,0x88,0x0a,0x26 +.byte 0x83,0x77,0xc3,0xd0,0x11,0x66,0x3d,0x25,0x91,0x61,0x80,0xfc,0x9c,0x50,0xfb,0xe8,0x81,0x6f,0xd8,0xfa,0x77,0x78,0x4c,0x2b,0x44,0xd0,0x92,0x52,0xa4,0x50,0x50,0x7e,0xa2,0xb9,0xe7,0x79,0x33,0x95,0xfe,0x29,0x1c,0x1d,0x43,0x9d,0xa7,0x12,0xfe,0xa1,0x45,0xf4,0xd9,0x1c,0x7e,0x5a,0x67,0x99,0x7f,0x22,0x7c,0xa3,0xb1,0x2d,0xb7,0x1d +.byte 0x6b,0xf6,0xb4,0x94,0xf2,0xd1,0x5c,0x28,0x56,0xe9,0x4f,0x21,0x81,0x96,0x37,0x7c,0x25,0x74,0x0f,0xf9,0xc5,0xf5,0xc6,0xe8,0x8f,0xbb,0xfb,0xe4,0xaf,0x23,0xac,0x4c,0x20,0x35,0x7d,0xb4,0x4a,0xde,0x90,0xec,0x16,0x30,0x95,0x1b,0x79,0xf6,0x77,0xfe,0x80,0x10,0xba,0xd2,0x49,0xda,0xca,0x9e,0x6b,0x63,0x2f,0x24,0x38,0xf9,0xee,0x20 +.byte 0x38,0x5c,0xeb,0xf5,0xbc,0x07,0x7a,0xeb,0xde,0xc4,0x97,0xcf,0x48,0x9b,0x80,0x40,0xfa,0x81,0xf5,0x24,0xa7,0xf3,0xf7,0x16,0xe9,0xba,0xae,0x9f,0xde,0xa1,0x00,0x34,0x74,0x36,0x9f,0x47,0xce,0xcf,0x35,0xdb,0x30,0x7e,0x72,0x81,0xc5,0xe1,0x59,0x07,0x3e,0xc7,0x5b,0x7b,0xd3,0xc6,0xeb,0x4e,0x71,0x9c,0xeb,0x41,0x37,0xd9,0x9e,0x34 +.byte 0x0b,0xc1,0x9c,0xf7,0xfd,0x56,0xb0,0xd6,0xa6,0xe4,0x1d,0xdf,0x43,0xc6,0xf3,0x26,0x0f,0x01,0x07,0x29,0x57,0x9c,0x8f,0xe1,0x31,0xc9,0xa6,0x98,0x0f,0x0e,0x27,0xfd,0xa0,0x59,0xdf,0x92,0x7b,0x0a,0x4c,0x42,0x4b,0x03,0x98,0x2a,0xea,0xcb,0xd8,0x0f,0x6d,0x19,0x0b,0x22,0x69,0x8b,0xaa,0x3b,0xc8,0x41,0x66,0x81,0xc3,0xaa,0x64,0x6d +.byte 0x44,0xdd,0xb9,0xe2,0xc4,0x47,0x6d,0xdf,0x61,0xe0,0xf3,0x26,0x40,0x23,0x2f,0xf9,0x2a,0xb3,0xfa,0xe2,0xe8,0x36,0xc0,0xd9,0x89,0xb0,0x05,0x47,0x36,0x20,0x3b,0x03,0x0c,0xd1,0x46,0x9b,0xc9,0x65,0xfa,0x14,0xba,0x68,0x49,0xfc,0x2a,0xb9,0x04,0x47,0xbb,0x64,0xe1,0x7f,0x5a,0xd3,0x70,0x19,0x0f,0x14,0x09,0xc0,0xbe,0xc3,0x9b,0x2f +.byte 0xd1,0x05,0x90,0x56,0x09,0x47,0xb3,0xc5,0x08,0x6f,0x89,0x59,0x8c,0xf3,0xd4,0x1c,0xaf,0x68,0x00,0x32,0x58,0xe2,0x66,0x55,0xe2,0xc3,0x46,0x73,0xfd,0x4b,0x63,0xc5,0xdd,0x48,0xa8,0x14,0xe9,0x07,0x94,0x8f,0x51,0x6e,0x2d,0x7c,0x62,0x97,0x73,0xa5,0x42,0x7d,0xad,0x43,0xcb,0x65,0x56,0xf0,0x23,0x28,0x72,0xdb,0x1f,0xcf,0x34,0x9a +.byte 0x62,0x06,0x8d,0xc9,0x86,0x40,0x6d,0xee,0x58,0x72,0x02,0xbb,0xce,0x33,0x6a,0xe4,0xcb,0x46,0x25,0xda,0x2f,0x8d,0xc9,0x8e,0xfe,0xcf,0xbb,0xfc,0xb0,0xe8,0xec,0xf2,0xf9,0xff,0x5d,0x70,0x9e,0x2e,0x22,0x0e,0x9a,0x4d,0xb8,0x26,0x7a,0x48,0x3f,0xba,0x5c,0xcd,0x10,0xf4,0x6d,0x89,0x3d,0x5d,0x87,0xd4,0x69,0xb8,0x4a,0x20,0xc6,0xf8 +.byte 0x03,0x6c,0x60,0x1e,0x9c,0xc6,0xe3,0x39,0x9b,0xa1,0x16,0x64,0xed,0xc6,0xd7,0x54,0xfd,0x8d,0xa0,0x2f,0xcf,0xc6,0xde,0x43,0xe4,0xc5,0xb7,0xd6,0x00,0xaf,0x95,0x7a,0xc6,0xde,0x26,0x59,0x39,0xb0,0x12,0x6b,0xe1,0x3c,0xa9,0x09,0xb6,0x15,0xb0,0x62,0xad,0xa9,0x11,0x4f,0x86,0xde,0xc6,0xe8,0x32,0x46,0x78,0xeb,0x60,0x81,0x6b,0x8f +.byte 0xac,0x80,0xbf,0xa4,0xc4,0xb7,0x5f,0x3b,0x2f,0xf8,0xe4,0x05,0xcf,0xbf,0xa3,0x14,0x6f,0x16,0xbc,0x6c,0x4e,0x31,0xd7,0x79,0x09,0xcf,0x9c,0x58,0xa3,0x0b,0x1a,0x31,0x4b,0xda,0xcb,0x11,0x35,0xb1,0xf5,0xbb,0xfb,0x00,0x46,0x6d,0x70,0x5e,0x4a,0x85,0x19,0xdf,0xb5,0xd0,0x03,0x2e,0x5d,0x01,0x95,0x4e,0x5a,0x59,0x99,0x24,0xac,0x3f +.byte 0x2d,0x64,0xaf,0xef,0x40,0x16,0x2a,0xcc,0x6a,0x6c,0x0f,0xe3,0x45,0x15,0x74,0x3d,0xea,0xdb,0xa7,0x3f,0xd2,0x50,0x4d,0xc7,0xc6,0x19,0x36,0x84,0xf4,0xbd,0x09,0xff,0xe7,0xf3,0xc0,0xa5,0x34,0x49,0x8a,0xfe,0x83,0xcd,0xe4,0x80,0x7d,0xe3,0xff,0xc9,0x8a,0xb9,0xd6,0x34,0x01,0xd1,0x47,0x16,0x5e,0x7c,0x16,0xf5,0x7c,0xf8,0xb5,0x53 +.byte 0x26,0x84,0x89,0x73,0xf3,0x7f,0x9c,0xb0,0x2f,0x07,0x9e,0xf2,0x12,0xdf,0xba,0xc0,0x15,0xd0,0x3a,0x59,0x9d,0xde,0x67,0x5e,0x1c,0x2b,0x4b,0x84,0xb8,0x89,0xfb,0x62,0x90,0xe9,0x89,0xd9,0xdb,0xb7,0x21,0x4a,0x9f,0xbd,0xc0,0x02,0x01,0xda,0xb3,0x4c,0x9d,0xfb,0x46,0xa1,0xd0,0x3c,0xf5,0x27,0x6f,0x70,0xb5,0xa9,0x74,0xdc,0xa0,0x76 +.byte 0xb7,0x3a,0x53,0x18,0xdd,0x80,0x5e,0x43,0xb5,0x35,0xe4,0x0e,0x26,0x27,0x0a,0xab,0xe8,0x4d,0x2e,0x89,0x20,0xc3,0xff,0xe4,0x7f,0x03,0x2c,0x5f,0x25,0xc7,0x70,0x53,0x27,0x4c,0xc8,0xb9,0xb1,0x81,0x10,0x7a,0xa2,0x65,0xe4,0x0b,0x65,0x8e,0x3d,0x2f,0x96,0xa0,0xa5,0x7b,0x4f,0x09,0xe9,0x9d,0x10,0x06,0xf7,0x18,0xad,0x2d,0x7f,0xb8 +.byte 0x8f,0x08,0xa7,0x2c,0xda,0x82,0xbe,0x5c,0xd6,0x1d,0xb6,0xe2,0x9b,0xa2,0xfc,0x18,0x8c,0x8d,0xf7,0x81,0xf4,0xc6,0x1e,0xcb,0xe5,0x73,0xa6,0x74,0x06,0x20,0xf3,0xa9,0xcb,0x80,0x01,0x55,0x7e,0xc0,0x6a,0x1f,0x5a,0x5b,0xb1,0x56,0x5d,0xd8,0x2a,0xd5,0xf5,0x57,0xe8,0x48,0x6c,0xfb,0x9e,0x93,0xa7,0x0e,0x13,0x2b,0x68,0xc5,0x6b,0x17 +.byte 0x43,0xb0,0x58,0x04,0x65,0x3d,0x46,0x57,0xa7,0x3d,0x99,0xb8,0xa1,0x48,0x17,0x44,0x67,0x2a,0x0d,0x44,0x87,0x9f,0x63,0xd7,0x92,0x56,0x7b,0xab,0xd3,0x6a,0xbd,0x4f,0xc0,0xc3,0xd2,0xee,0xd1,0x3d,0xd1,0x18,0x2e,0x6a,0xf5,0x3b,0x67,0xa0,0x0a,0xf3,0x11,0x49,0xc5,0x4b,0xef,0xcf,0x00,0xfd,0x22,0x8f,0xa0,0x9c,0x99,0x32,0x2f,0x58 +.byte 0xf9,0x97,0x98,0x13,0x4a,0x88,0x50,0xcc,0x58,0x1e,0x27,0x02,0x34,0x7d,0xec,0xf6,0x88,0x3a,0x74,0xb5,0x34,0x6d,0x6f,0x52,0x2d,0x20,0x02,0x70,0x22,0x27,0xdf,0x7a,0xff,0x30,0x36,0x66,0x1a,0xa0,0x51,0xc3,0x75,0x9a,0x06,0xe5,0x3f,0x6c,0x74,0x0d,0x15,0xa2,0xb6,0xe5,0xcd,0x55,0x4d,0xea,0x65,0x8f,0xbb,0xb2,0xd4,0x95,0x73,0xa4 +.byte 0xcd,0xb9,0xc8,0x82,0x60,0x49,0xe9,0x36,0xc9,0xb1,0xe9,0xcb,0x52,0xae,0xa7,0x7a,0x64,0xab,0x75,0x84,0x03,0x4b,0x37,0xf7,0x07,0x75,0xf7,0x1c,0x32,0x19,0xb6,0x8b,0xca,0x7c,0x43,0x15,0xe8,0xec,0x57,0x89,0x1d,0xe2,0xa0,0x80,0xc5,0xb6,0x02,0x29,0xfd,0xda,0xe0,0x14,0x93,0xb4,0xb3,0x44,0x2e,0x17,0x2f,0xed,0x3b,0x38,0x6e,0x8f +.byte 0xe0,0x3d,0xc6,0x77,0xe9,0xa7,0x76,0xcb,0x98,0x2d,0x08,0x61,0xcf,0x1b,0x25,0x3f,0xfb,0x1d,0x99,0xb1,0x5a,0x3c,0x53,0x96,0x4e,0x09,0x11,0xf6,0x5b,0x09,0x31,0xe1,0xad,0xb0,0xaf,0x7b,0xec,0xf9,0xa8,0x68,0xb7,0x93,0x57,0xf7,0x17,0x77,0x87,0x2b,0xdb,0x00,0x28,0xc6,0x48,0xac,0xff,0xcd,0x26,0x4a,0x8a,0x76,0x9a,0x2a,0x1d,0x37 +.byte 0x4c,0x70,0x4f,0xf6,0x52,0xe3,0x7a,0x78,0x94,0x5b,0x0b,0x50,0xb4,0x48,0x03,0xcd,0x78,0xd0,0x5d,0x89,0x6d,0x76,0xaf,0x9d,0x67,0xc3,0x75,0x6f,0x6a,0x2d,0xe2,0xb7,0x58,0x51,0x10,0x0d,0xef,0xa0,0x1a,0x74,0x28,0x3a,0x97,0x19,0x4f,0x3c,0x8a,0x86,0x3d,0xe4,0x66,0x3d,0x57,0xb4,0x66,0xb3,0x0b,0x4f,0x57,0x57,0x34,0x2e,0xc7,0x0c +.byte 0x11,0xdf,0x3c,0xb4,0x9f,0xe1,0xd5,0x27,0x41,0x08,0xec,0xca,0x18,0x88,0x48,0x5e,0x88,0x55,0x89,0x71,0xe6,0xa5,0x90,0x7c,0x3b,0xe5,0xf3,0x2a,0xd7,0xf5,0x0b,0x3d,0xbb,0x47,0xad,0xd7,0x78,0x41,0xa8,0xef,0xd4,0x36,0x31,0xd1,0xe4,0x9c,0x87,0x9e,0xb1,0x11,0x0e,0xff,0x8f,0x4d,0x79,0x65,0xc4,0x83,0x75,0x33,0xc9,0x89,0xe2,0xc3 +.byte 0x41,0x68,0x11,0xe7,0xe4,0x58,0xb9,0xf1,0xee,0x06,0x48,0x4d,0xc3,0xc7,0x76,0x60,0x42,0x94,0x8f,0x0d,0xb9,0x53,0x46,0x78,0x06,0x97,0x94,0x36,0xf4,0x3e,0xf3,0xdd,0x5b,0x46,0xe1,0x9d,0x3f,0x9e,0x78,0x00,0x9e,0xe7,0xcb,0x9e,0xc8,0x30,0x87,0x4a,0x52,0x91,0xd5,0xe2,0xa3,0x65,0x98,0xb2,0xc9,0x6c,0xfb,0x4e,0x54,0x5a,0x9f,0x57 +.byte 0x2c,0x4a,0x76,0xe4,0x97,0x88,0xd5,0x6a,0x0e,0x6c,0x7c,0xef,0x78,0x2a,0x7c,0x26,0xa3,0x25,0xf6,0x33,0x82,0x46,0x6d,0x91,0x0d,0xe4,0x83,0xec,0xf1,0x24,0xf8,0x0a,0x34,0xec,0xfc,0x7e,0x47,0xda,0x9a,0x17,0x1b,0x33,0xd0,0xf1,0x70,0xe4,0x0b,0xc7,0x70,0x58,0x1d,0x76,0x20,0x89,0xce,0x4f,0xd1,0xcb,0x3b,0x26,0xd1,0x98,0xd9,0x51 +.byte 0xb1,0xd0,0xaa,0x4a,0xd5,0x10,0xf2,0xae,0xaa,0x14,0xa7,0x72,0x99,0x3d,0xc8,0xbf,0xfb,0xec,0x6a,0x14,0xdd,0x97,0x7b,0x2f,0x16,0x96,0x0f,0x41,0xb8,0x33,0x15,0x1b,0xa2,0x6a,0x7e,0x64,0x0d,0xab,0xe7,0x62,0xf5,0x6c,0x56,0x69,0x09,0x46,0x32,0x24,0x60,0x4e,0x21,0xc7,0x5b,0xee,0x0a,0xe2,0x94,0x7c,0x20,0xe2,0x06,0xa0,0xa2,0x36 +.byte 0xa0,0x7d,0xb5,0x37,0x2a,0xee,0x20,0x25,0x4c,0xba,0x9a,0x06,0x4c,0x07,0x9b,0xea,0x55,0xac,0x2a,0xf7,0xb9,0x5c,0x23,0xac,0x43,0xda,0x9d,0xad,0x76,0xe2,0x5f,0xe0,0x27,0xaf,0x0a,0x5e,0x3d,0x54,0x84,0xfc,0x19,0x75,0x8c,0x62,0x4d,0x37,0x17,0x1a,0x90,0x55,0xb8,0x7e,0xa1,0xad,0x31,0x1a,0xc0,0x91,0x96,0x51,0xa9,0x5f,0xbb,0xb9 +.byte 0x95,0xbf,0xe2,0xd5,0x7e,0x31,0xba,0xc4,0x1e,0x63,0x98,0xd3,0xe2,0x7d,0x87,0xa5,0x46,0xe3,0xae,0xe1,0xe8,0x4e,0x74,0x29,0x0e,0x4b,0x10,0xa8,0x7f,0x3a,0xe5,0x60,0x0f,0x49,0x6a,0xcd,0x3d,0x5a,0x8e,0xf1,0x48,0xd0,0x80,0x7b,0xa3,0x7f,0x06,0x47,0x2b,0x60,0xf2,0x17,0xc3,0xe1,0x26,0x1e,0xb7,0x0f,0x2b,0x7c,0xc7,0xb8,0x3a,0x4f +.byte 0xad,0x05,0x97,0x88,0x93,0x82,0x8e,0x06,0x77,0x44,0xd1,0x65,0xfd,0x18,0x48,0xd6,0x88,0xcd,0x5c,0xbd,0xe4,0xaa,0xea,0xf1,0xed,0x16,0x5f,0xb3,0x58,0xe2,0x69,0x82,0xbe,0x9e,0xfc,0xcb,0xf6,0x17,0xa9,0x70,0xeb,0x08,0xd7,0x06,0x86,0xf6,0x5a,0x43,0x68,0x7b,0xcf,0xa3,0xfa,0x26,0x5e,0xe5,0x42,0xd3,0x5a,0xc8,0x1c,0x3b,0x8d,0x2d +.byte 0xf1,0x45,0xb0,0x97,0x90,0x0b,0xe7,0x2d,0xab,0xd7,0xd8,0x8a,0x16,0xf9,0x5f,0xa6,0xcf,0xc5,0x60,0x2c,0x34,0x5a,0x2e,0x2b,0xb9,0xb4,0x9c,0xa7,0x09,0x77,0xd2,0x3f,0x8c,0xf3,0xf6,0xf7,0xe0,0x27,0x79,0xc3,0x4e,0x61,0x7d,0x09,0x50,0x05,0x01,0x35,0x1b,0x33,0x54,0x6f,0x90,0x9a,0x19,0xcd,0x86,0x45,0x23,0xcd,0x6f,0x1b,0x62,0xc5 +.byte 0xce,0x4e,0x8e,0xff,0xe7,0x12,0x32,0x85,0x9a,0xc4,0x11,0x83,0xcf,0x78,0xd7,0x41,0x99,0x64,0x20,0xa6,0x69,0xdd,0xe3,0x53,0x98,0x6b,0xc7,0x98,0x51,0xc5,0xf8,0x3e,0xa3,0x5f,0x0d,0x78,0x2f,0xa7,0x05,0xff,0xe5,0x3a,0x0f,0x7c,0x09,0x58,0x3f,0xaa,0x0d,0x9a,0x9d,0x8d,0xe7,0xbf,0x6b,0x7d,0xfe,0x3a,0x4f,0x5c,0x50,0xb2,0xe7,0xc5 +.byte 0xa5,0x13,0xde,0xc8,0xe8,0x59,0xac,0xb0,0xdd,0xc0,0x81,0xa7,0x0b,0x78,0x32,0x23,0x76,0x85,0x11,0xef,0xe3,0x88,0x6f,0x7f,0xa9,0x09,0x7b,0x0c,0x6f,0x34,0xb2,0x67,0x5e,0xd6,0x11,0xad,0xd7,0x3b,0xf2,0xbb,0x66,0x5b,0xde,0x22,0xfc,0x55,0x26,0xa1,0x89,0x80,0x2e,0xb8,0xf3,0x3c,0xf8,0x1e,0xba,0x99,0x1c,0x24,0x33,0xb4,0xe6,0x17 +.byte 0x2b,0x9c,0x80,0xe5,0x9b,0x58,0x54,0x70,0xcd,0x15,0x81,0xcd,0x51,0x48,0x75,0x24,0x27,0xf5,0x30,0x79,0xc1,0x16,0xff,0x89,0x70,0x12,0x74,0x07,0x9d,0x39,0xf2,0x9c,0xc6,0x89,0x8d,0x94,0x41,0x01,0x04,0xf5,0x16,0x99,0xf3,0xf0,0xd1,0xf5,0x6d,0xd3,0x11,0x19,0x29,0x36,0xfb,0x41,0xf9,0x32,0xb9,0x0f,0x13,0xaf,0xac,0xfb,0x30,0x75 +.byte 0x62,0x8c,0x04,0x5b,0xf1,0xce,0x52,0x9b,0xbe,0x8c,0xf9,0x86,0x5d,0x7d,0xc1,0x8e,0x41,0x76,0x42,0x63,0xd7,0x74,0x8e,0x2c,0x46,0xa1,0x0a,0x51,0xb5,0xec,0xe9,0x91,0x56,0xbc,0xdc,0x32,0xfc,0x10,0xb5,0xca,0x5b,0x4b,0x72,0x99,0x07,0xff,0x01,0x11,0x2c,0xa4,0x60,0xf5,0x6b,0xd4,0xa8,0x96,0x21,0xee,0xbe,0x14,0x8f,0x69,0x99,0xdc +.byte 0x43,0x7f,0x13,0x3d,0x17,0x1e,0xa3,0x1b,0x21,0x23,0x26,0x7e,0xff,0x80,0x6b,0x66,0x3e,0xb2,0x48,0x1a,0x77,0x3c,0x50,0xe2,0xca,0x4d,0xc6,0xdb,0xfd,0xd1,0x23,0xcc,0xcb,0x01,0x25,0xc0,0x62,0x8d,0xe5,0x9c,0xb7,0x13,0x97,0xf5,0x49,0x01,0x19,0x45,0x45,0x83,0x17,0xff,0x8e,0x94,0x8c,0xb0,0xc0,0xaf,0x46,0x62,0x0e,0x62,0xb7,0x8c +.byte 0xd5,0xcf,0xb9,0x82,0x6e,0x8a,0xb9,0x22,0xbc,0x30,0xf9,0x65,0xc2,0x7f,0xce,0x6b,0x4d,0xad,0x87,0xcb,0x23,0xab,0x57,0x36,0x6a,0xb7,0x8c,0x63,0x17,0x60,0x13,0xa1,0x1f,0x3d,0xa4,0xd4,0xab,0x5d,0x97,0xc7,0x18,0xaf,0xf8,0xae,0x13,0x64,0x2a,0x19,0x34,0xe2,0x28,0x28,0x4f,0x32,0x2a,0xd8,0x43,0x79,0xaf,0x1e,0x56,0xfc,0x97,0x51 +.byte 0x67,0x8c,0x63,0x80,0x32,0x63,0x71,0x5c,0x78,0x00,0xeb,0xfd,0xa2,0x96,0x58,0x21,0x36,0x13,0x02,0xe5,0xa4,0xb7,0xcd,0x5a,0x30,0xa0,0x5b,0x7b,0x23,0xa4,0xcc,0x54,0x64,0x6f,0x6d,0x9b,0xaf,0xea,0x49,0x69,0x9e,0x2f,0x51,0x5c,0xe7,0xa3,0xa3,0xb8,0xac,0xed,0x47,0x23,0x7a,0x37,0x38,0xe3,0x15,0x98,0x6f,0x50,0x6c,0x8d,0xa7,0xe6 +.byte 0xa8,0x39,0xcc,0x63,0x08,0xeb,0x8f,0x8c,0xfd,0x83,0xaa,0x34,0x75,0x19,0xc0,0xf4,0xd6,0x25,0x18,0x94,0x9d,0xa1,0x7e,0xc8,0x6b,0x19,0x76,0xc0,0x8d,0xaf,0x51,0xe5,0x7c,0x8a,0x98,0x17,0x80,0x90,0xc0,0xb6,0xed,0x5c,0x8f,0x33,0x56,0xba,0xce,0xbe,0x83,0x87,0x5d,0x51,0x2e,0x64,0x84,0xa6,0x9d,0x49,0x27,0x5b,0x92,0xe0,0xe7,0xac +.byte 0x37,0x3d,0x22,0x5e,0x25,0xe7,0xca,0x2f,0x5d,0x2f,0xa0,0xd5,0xcb,0xe9,0xac,0x84,0x5b,0x19,0x72,0x1c,0x2c,0x0a,0xd1,0xb7,0x73,0x24,0x8a,0x0f,0xe0,0x07,0xd8,0x49,0x4d,0x23,0x1b,0xac,0xb8,0xd1,0x42,0xd4,0xdf,0xf8,0x4d,0x85,0xa2,0x37,0x30,0x46,0x38,0x88,0x55,0x1d,0xea,0x37,0x54,0x8c,0x43,0xb0,0xed,0x01,0x53,0x75,0xe6,0xf7 +.byte 0x9b,0xe6,0x10,0x91,0x6e,0x80,0x11,0xf9,0x96,0x29,0x4f,0x08,0x77,0x2b,0x7e,0xdb,0x5b,0x14,0xbd,0x77,0x37,0xe8,0x36,0x07,0x4a,0xe4,0xd8,0xa2,0x4e,0x38,0xea,0xeb,0xc2,0xd6,0x43,0x59,0x20,0x0c,0x12,0x31,0x6c,0x27,0xc5,0x7b,0xfc,0xfc,0x54,0x94,0x1d,0x5f,0x82,0x73,0xd7,0x1f,0x43,0x3a,0x73,0xc4,0xf3,0xb3,0xbb,0x53,0xfe,0x22 +.byte 0xc0,0xa4,0x7e,0x2b,0x84,0x1b,0xef,0x6d,0x83,0x9d,0xb3,0x8b,0x2a,0x6c,0xea,0x1e,0xfa,0x77,0x01,0x35,0xd2,0x5b,0xc4,0xd3,0xe7,0x1e,0xca,0x73,0x8b,0xb9,0x1f,0xfb,0x67,0xf2,0xdd,0x03,0xe6,0xca,0xfe,0x3b,0x61,0xd7,0xb5,0x96,0xe0,0x85,0xc2,0x23,0xa7,0xea,0x38,0xbf,0x6e,0x29,0x9e,0x8e,0x18,0xd4,0xbf,0x16,0x73,0xf9,0x18,0xef +.byte 0xc9,0xaf,0x6c,0xe2,0xdc,0xa4,0x58,0x9c,0xf5,0x6d,0x4a,0xc8,0xb4,0x8f,0x16,0x02,0xb7,0x65,0xd3,0x32,0x3b,0x83,0xfe,0xf3,0xc7,0xba,0x68,0xf4,0x95,0xa4,0xf6,0x33,0x57,0x43,0xbe,0xae,0x83,0xa9,0xe4,0x0d,0x0b,0x23,0xaa,0xbc,0x15,0x53,0x18,0x4d,0xb4,0x35,0xe3,0x8e,0x86,0xfe,0xe4,0x98,0x5d,0x63,0x23,0xce,0x44,0xea,0x4d,0x64 +.byte 0x86,0xf8,0x06,0x8f,0xc0,0x73,0xa6,0x6d,0x04,0x53,0x47,0x95,0x0f,0x6d,0x6c,0x01,0x1c,0x3f,0x7b,0x83,0xe4,0xc2,0x40,0xb8,0x97,0x26,0x9e,0x35,0xb0,0x76,0xee,0xe4,0xc7,0xd8,0xaa,0x22,0x83,0x96,0xe1,0x34,0x7b,0x78,0x31,0xee,0xd3,0x9a,0x50,0xd4,0x05,0xfd,0xd6,0x15,0xca,0x83,0x2f,0x49,0xfd,0x00,0x23,0x82,0x39,0xac,0x46,0x7a +.byte 0xe4,0xb5,0xcc,0xee,0xbb,0xaa,0x98,0x82,0xb5,0x27,0x45,0xd5,0x96,0x6e,0x89,0x01,0x1e,0x30,0xe4,0x1c,0x3a,0x65,0xcc,0x9f,0xda,0x38,0xf0,0x4c,0x68,0xfa,0xe5,0xf2,0xe2,0xce,0x34,0xc2,0x15,0xfd,0x21,0xf6,0xe2,0x33,0xbd,0xef,0xfd,0x49,0x15,0xdc,0x38,0x3b,0x24,0xba,0x3a,0x80,0x35,0x60,0xbe,0x50,0x17,0x38,0x3e,0xe2,0x96,0x84 +.byte 0x01,0x41,0x6c,0xb2,0x0b,0xc6,0xff,0xce,0xb3,0x37,0xa2,0x46,0x27,0x33,0x8e,0x04,0x44,0x8a,0x7c,0x64,0x0e,0xbc,0xed,0x74,0x4f,0x40,0x58,0xf4,0x8c,0xf8,0xd9,0x92,0xa9,0x0b,0x18,0x7c,0x93,0x95,0xca,0xa7,0x3e,0x1d,0xad,0x68,0x80,0xd9,0xdb,0x81,0x78,0x50,0x37,0x49,0xbc,0x64,0xc2,0x52,0x5c,0x70,0x7e,0x0a,0x26,0x7e,0xc6,0xbf +.byte 0xd2,0x7f,0x05,0x55,0x7a,0x5a,0x3e,0x9e,0xe3,0x8b,0xf5,0x95,0x2b,0xd8,0xb4,0xb8,0xc6,0x5d,0x91,0xb8,0xc7,0x7c,0xe1,0x75,0xf2,0x43,0x6b,0x73,0xb7,0xb1,0x10,0xf2,0xa7,0x1e,0xab,0xaf,0xc9,0xc0,0x3b,0xab,0xbe,0xf7,0x4a,0x43,0x9c,0xca,0x3d,0x00,0x5b,0x02,0xf8,0xa2,0x4f,0x57,0x81,0xb0,0xde,0x1e,0xd1,0x60,0xbe,0x6c,0x0d,0xe6 +.byte 0xcd,0x51,0xb6,0xc7,0x00,0x52,0x37,0x4f,0xfc,0xee,0xe2,0x43,0x5c,0x61,0x76,0xed,0x80,0x72,0x38,0x26,0x94,0xfe,0x28,0x06,0xfb,0x62,0xa6,0x21,0x9b,0x53,0x60,0x1b,0xf0,0x56,0xae,0xba,0x6b,0x52,0x27,0x2a,0xd5,0xed,0x11,0x92,0xa2,0xe2,0xab,0xdd,0x05,0x38,0x38,0xae,0xeb,0x72,0xcb,0x6c,0xa5,0x2a,0x73,0xc5,0xfc,0xb0,0x36,0x83 +.byte 0xd6,0xe6,0xda,0x6b,0x38,0x72,0x5e,0x8d,0xaf,0x11,0x5f,0x5b,0x89,0x58,0x21,0x36,0xf6,0x7d,0x42,0x48,0xdc,0xce,0xaa,0x94,0xf0,0xc3,0xc5,0x2c,0x08,0x2a,0x36,0x35,0x25,0x95,0xc4,0x11,0x09,0xea,0x7a,0xbc,0x2e,0xc6,0x0a,0x5b,0x4f,0x86,0xeb,0xc2,0x38,0x71,0x48,0x8c,0x63,0x79,0x3b,0xe4,0xba,0x14,0x44,0x31,0x28,0x4f,0x9d,0xb4 +.byte 0x26,0xa6,0x3b,0xea,0x3f,0xcb,0x30,0x6c,0x02,0x13,0xdb,0x4c,0x9c,0x76,0xc8,0xd8,0x01,0x52,0x3d,0x2f,0x51,0x70,0x15,0x91,0xec,0x8f,0x80,0xed,0x88,0xb7,0xfa,0x91,0x2c,0x10,0xcd,0x3b,0x92,0x85,0xe7,0xe8,0x11,0xfa,0x50,0x15,0xe2,0xdf,0xf7,0xbe,0xa4,0x2d,0x13,0x75,0xa6,0x00,0x25,0x8d,0xe1,0xb6,0x9b,0xbb,0x64,0xfb,0x5c,0xde +.byte 0x97,0xcc,0x00,0x51,0xd6,0xac,0x67,0xc3,0x91,0x1e,0x56,0x36,0x2b,0x43,0xed,0x8c,0x67,0x7b,0xf6,0x54,0x6f,0x91,0x44,0x28,0x93,0x60,0xac,0xca,0xb9,0x91,0x7e,0xeb,0x49,0xd8,0xfc,0x12,0x6c,0x40,0x9d,0x0a,0x4d,0xb4,0xab,0xe6,0xad,0x5b,0x8e,0x2d,0x3e,0x53,0xa1,0x88,0xf7,0x41,0x71,0xa7,0xff,0x05,0x46,0x04,0x34,0x1f,0x12,0x89 +.byte 0x92,0xc1,0xf9,0x26,0x16,0x23,0xb6,0x59,0x82,0xdc,0xa7,0xb8,0xa4,0x8a,0x0f,0x1d,0x7d,0x8f,0x44,0xe8,0x4f,0x70,0xbb,0xdb,0x8d,0xe6,0x7e,0x9d,0xd9,0x44,0x10,0x41,0x6c,0x3f,0xb7,0xe8,0x6f,0x39,0x93,0xe1,0xde,0xb8,0x6c,0xba,0x99,0x95,0xb7,0xc8,0xb2,0x2a,0xcd,0x81,0x53,0xc3,0xb5,0x2a,0x8a,0xd6,0x62,0x1e,0x74,0x4d,0xde,0xfa +.byte 0xff,0x7b,0xed,0x11,0x1e,0x44,0x3e,0x93,0x1c,0xae,0x7c,0x5c,0xed,0x52,0x75,0x5e,0x0a,0xf3,0x95,0xce,0x47,0x86,0x1b,0x7f,0x17,0x09,0x12,0xcc,0x08,0xca,0x16,0x11,0xf1,0xa1,0x39,0x78,0x89,0x5c,0x11,0x25,0xc7,0x39,0x5f,0x97,0x74,0xbc,0xa9,0x2a,0x25,0x5d,0xdd,0x93,0x0d,0x8c,0x74,0x07,0x1e,0xd9,0x9f,0xc1,0x38,0x9c,0xbf,0xe0 +.byte 0x42,0xad,0xb2,0xe7,0xb1,0x84,0x82,0xb4,0x56,0xbe,0x3c,0x42,0xb0,0xce,0x2c,0x94,0xb7,0xe6,0x78,0xc8,0x04,0x06,0x58,0x15,0x3e,0xdc,0xf6,0x9a,0x58,0xc3,0xe3,0x85,0x16,0xc8,0x84,0xba,0x8f,0xbc,0x94,0xa7,0x44,0x04,0x29,0xc4,0xd8,0xec,0x63,0xc4,0x47,0x58,0x22,0x02,0x08,0x20,0x44,0x39,0x52,0xa5,0x33,0xfe,0x1c,0x30,0x27,0x92 +.byte 0xbf,0x42,0x44,0x4c,0x3f,0x3d,0x00,0x7b,0x21,0xef,0xbb,0x25,0x75,0x4c,0xb2,0xe7,0x66,0xc9,0xc1,0xfb,0x1e,0x13,0x04,0xd0,0xcb,0x69,0x51,0x9d,0x9a,0xb0,0xb0,0xec,0xb0,0x12,0x24,0x84,0x57,0x9f,0xef,0xb4,0x19,0x50,0xa6,0xf5,0x03,0xa3,0x93,0x0f,0x77,0xaf,0xe0,0x4c,0xa5,0xd3,0xb0,0xd8,0x5e,0xc3,0x78,0x94,0xd5,0x6e,0x48,0x58 +.byte 0x7a,0x93,0xb1,0x62,0x60,0xea,0xa1,0xba,0x7a,0x86,0x6e,0x87,0xe9,0x97,0xe0,0x7c,0x1e,0xb6,0x63,0x94,0x76,0x5f,0x9c,0x95,0x65,0x00,0xd4,0x14,0x0e,0x4c,0x87,0xe7,0xcd,0x9e,0xb1,0xe2,0x13,0x1b,0xb1,0x8a,0x83,0xaa,0xaa,0x34,0xcd,0xb2,0xf6,0x7f,0x12,0xb0,0x79,0xff,0x1e,0x04,0xc8,0x9a,0xfc,0x41,0x88,0xbb,0x28,0x42,0xeb,0x45 +.byte 0x47,0x8b,0xcb,0x57,0x03,0xcd,0xe5,0x9a,0x84,0xea,0x0a,0xb5,0x0c,0xb8,0x30,0x33,0xd6,0xde,0x66,0xa8,0x57,0xf9,0x76,0x4f,0x0f,0x8f,0x53,0x56,0x57,0x91,0xd4,0x55,0xf5,0x78,0xde,0xa6,0xa2,0x59,0xc8,0xb0,0xf2,0xb9,0xfa,0x6d,0x4a,0x70,0x86,0x3d,0x24,0x1b,0xc6,0xb8,0x06,0xf5,0xea,0x09,0x63,0x9b,0x1e,0x61,0x18,0x85,0xba,0x08 +.byte 0x20,0xaa,0x33,0x66,0xcf,0xa7,0xff,0xf5,0x30,0xfe,0xf8,0x39,0xd3,0x88,0x9a,0x5b,0x3f,0x55,0xa6,0x00,0x4c,0x57,0x0d,0xd1,0xa4,0x0c,0xe7,0x8a,0x95,0xd8,0x64,0xc7,0x93,0x51,0x84,0xa6,0x41,0x2c,0xfc,0xb0,0xfb,0x99,0x9a,0xcd,0x2c,0x62,0x3a,0xca,0x43,0x15,0xf2,0x5a,0x22,0x25,0xa4,0x91,0xa3,0x7c,0x42,0x69,0xc1,0x67,0xe3,0xf5 +.byte 0xd4,0x92,0x54,0xbd,0xb3,0x57,0xe5,0x19,0xca,0x1b,0x9c,0x19,0x79,0x9d,0xbf,0x89,0xfc,0xaa,0x72,0xcd,0xcb,0xc5,0xbc,0xdd,0x0c,0x7c,0x31,0x42,0xb0,0xc2,0x76,0xe5,0x8b,0x9b,0x7c,0x92,0x13,0x20,0x5c,0xdc,0x94,0xfc,0xa1,0x90,0x34,0x27,0x88,0x9f,0xe5,0x97,0x5f,0xc3,0xa3,0x83,0xca,0x8b,0xf8,0xac,0x36,0x33,0x47,0xc6,0x20,0x2f +.byte 0x04,0x2d,0x13,0xc1,0x3c,0x07,0x6e,0xf0,0xe2,0x3d,0x32,0x5c,0x50,0x41,0xf2,0x92,0x3f,0x25,0x2c,0x80,0x34,0xa5,0x90,0x2b,0x97,0x6e,0xd1,0xa2,0xa6,0xf4,0x4a,0xe0,0x20,0xd9,0xb9,0x2b,0x66,0xe5,0x06,0x73,0x97,0xfe,0x80,0x70,0x28,0xf9,0xb6,0xae,0x93,0x27,0x7a,0x65,0xff,0x23,0xc1,0x78,0x18,0x92,0xc9,0x0b,0x05,0x82,0x93,0xbc +.byte 0x73,0x3f,0x98,0xe9,0xa0,0x6d,0x20,0x8d,0x13,0xb1,0xf0,0x7e,0xe4,0x07,0x21,0x7d,0x6d,0xea,0x03,0x59,0xf8,0x29,0xc0,0xc8,0x7d,0xce,0xd1,0xf8,0x67,0x82,0x7f,0x84,0xe8,0x77,0xa9,0x9c,0xa2,0x34,0xdf,0xa9,0xac,0xec,0x6d,0x54,0xe5,0x0f,0xcb,0xdb,0x86,0xbc,0x01,0x44,0x91,0x3b,0xc8,0x85,0x4e,0x1d,0xe4,0x74,0x19,0xc6,0x39,0x2e +.byte 0xdf,0xf2,0x8f,0x3a,0x7f,0xe3,0x1e,0x55,0x45,0xcb,0x7e,0xde,0xcd,0xa6,0x1c,0xef,0x20,0xf7,0x07,0x31,0x94,0x9a,0x3d,0x04,0xd7,0x5e,0x65,0x20,0x6a,0x4d,0x31,0x1e,0x6f,0x89,0x40,0x45,0x1f,0x37,0xc1,0x7e,0x07,0xd5,0xa6,0x38,0x4a,0xf1,0x39,0xae,0x72,0x26,0x60,0xb0,0xb5,0xc7,0xd3,0x9a,0xaf,0x57,0x12,0xe9,0x34,0x28,0x8b,0xaf +.byte 0xd8,0x62,0x24,0x58,0xe2,0xcd,0xa2,0x9e,0x74,0x23,0x2d,0x52,0xc7,0x09,0xe5,0xb5,0xf5,0xc1,0xd3,0xa3,0x19,0xe5,0x1d,0x8d,0x0c,0xdf,0x13,0x8d,0xa4,0xa7,0xc1,0x41,0xea,0x9e,0x6d,0x61,0xd4,0xa4,0x74,0xe5,0xf8,0x5f,0x9e,0xfd,0x6d,0xf6,0x6e,0x87,0x0f,0xb5,0xa3,0x82,0xac,0x64,0xb4,0xda,0x07,0x49,0x51,0xc2,0xfd,0xcb,0x55,0xa3 +.byte 0x59,0x34,0xdf,0xa1,0xd6,0x90,0x62,0x43,0x1a,0xf9,0xae,0x85,0x5c,0x11,0x40,0xb2,0xbe,0xa5,0x03,0x04,0x4f,0xec,0x2c,0x58,0x2d,0xe9,0xda,0xcf,0xaa,0x2f,0xcf,0x60,0xc3,0x2c,0x6c,0x81,0x4d,0xf2,0x71,0x41,0xe4,0xae,0x4c,0xfa,0x8e,0x05,0x10,0xff,0x40,0xfa,0xea,0x96,0x78,0x6e,0xfc,0x35,0x35,0xec,0x84,0xf6,0x1d,0x24,0x60,0xcd +.byte 0x96,0x21,0x21,0xa7,0x32,0x90,0x3d,0x51,0x72,0x13,0xa4,0x9b,0x7e,0x94,0x3a,0x9d,0x97,0xf6,0x68,0xd8,0x08,0x42,0x54,0x7a,0xbb,0x9a,0x95,0x83,0xac,0xb8,0xb4,0x68,0xe3,0x31,0xdb,0xe2,0x32,0x8b,0x7d,0x57,0x62,0x1d,0x61,0x81,0xa1,0x36,0x7a,0x25,0x00,0x72,0x24,0x4c,0xa7,0x96,0x3b,0xa5,0x82,0xba,0x8e,0x89,0x1e,0x1b,0x8e,0xf4 +.byte 0xab,0x91,0x85,0x7a,0x32,0x4a,0x47,0x9f,0xce,0xd2,0x51,0x77,0xcd,0xc9,0x02,0x54,0xf2,0x7b,0xcb,0xb8,0x83,0xe0,0xe0,0x1b,0x4a,0xa2,0xe0,0xd9,0x15,0xb6,0x02,0x19,0x75,0xa6,0xba,0xa6,0x98,0xd9,0x61,0x74,0xc6,0x48,0xa5,0x59,0x3d,0xc8,0x47,0xc9,0xe8,0x6b,0xbb,0x6d,0xcf,0x0e,0x8d,0x6b,0x58,0x8b,0x7d,0x4e,0x0b,0x3d,0x67,0xc4 +.byte 0x8e,0x78,0x59,0x40,0x88,0x82,0x33,0x27,0x2c,0xfe,0x2a,0x6c,0xe4,0x80,0xee,0x5a,0xd4,0x5f,0xc8,0xf7,0x82,0x02,0x67,0xfd,0xcb,0x55,0x3e,0xd8,0x41,0xb3,0xce,0x93,0xfe,0xe7,0x56,0xf5,0x63,0xba,0xfa,0x2e,0x79,0xfc,0x11,0x5d,0xb0,0xc6,0x32,0x54,0xed,0x71,0x9b,0x15,0xce,0x62,0x09,0xd4,0x28,0x7f,0x7b,0xa1,0x50,0x5b,0x46,0x24 +.byte 0x0e,0x40,0xa2,0xe2,0x7d,0x93,0xa6,0x2b,0x0b,0x9b,0x40,0x25,0xc9,0xca,0x7a,0x01,0x8b,0x7d,0x68,0xeb,0xd7,0x84,0xc1,0x9d,0xf9,0xfb,0xd0,0x1a,0xec,0xef,0x6b,0x4c,0x78,0x31,0x62,0x8e,0x9d,0xdc,0x78,0x8f,0xcb,0xf8,0xf9,0x41,0xdc,0x9f,0x6d,0x0a,0x27,0x67,0xce,0xbd,0xeb,0x87,0xb3,0x26,0xf3,0x51,0xe1,0xd6,0xd1,0x57,0x46,0xfe +.byte 0x21,0xb9,0x88,0x7c,0xdd,0xa2,0x49,0x71,0x24,0xfb,0xc4,0xc0,0x6a,0x6b,0x05,0x7f,0x80,0xb0,0x09,0x3b,0x9e,0x6c,0x59,0x31,0x3e,0xac,0x7a,0x2e,0x5c,0x04,0x03,0xa3,0x6e,0xf5,0x66,0xee,0xc2,0x9b,0x65,0x88,0x06,0xbf,0xf5,0xe3,0x23,0x73,0x38,0x88,0x99,0xf1,0x64,0x68,0xdf,0x7d,0x04,0x06,0x72,0x92,0x0b,0x62,0x5d,0x12,0x1e,0x4e +.byte 0xff,0x60,0x35,0xe3,0x0f,0xd9,0x8c,0xac,0x38,0x5b,0x91,0xc1,0x51,0xbb,0xa5,0x19,0x7d,0xfb,0x79,0xfa,0x42,0x3b,0xaa,0xf8,0xd3,0x0f,0xc3,0xf2,0xb2,0x68,0x91,0xae,0x28,0x83,0x4f,0x75,0xbd,0x20,0x5f,0x20,0xba,0xc2,0x75,0x85,0x74,0x23,0xf3,0x36,0x33,0x99,0x9c,0x64,0x4c,0xd1,0x5d,0xbd,0x06,0x46,0xbd,0x49,0xf0,0x86,0xc0,0xcb +.byte 0x1b,0xbd,0xec,0x98,0x5b,0xb1,0x80,0xba,0x12,0x42,0x22,0x09,0x9a,0x62,0x3c,0xa8,0x33,0xbf,0xce,0x92,0xd4,0x07,0xef,0x34,0x33,0x8f,0x67,0x1d,0x25,0x60,0xeb,0xd3,0xe4,0x31,0x63,0xa8,0xab,0xe3,0xab,0x70,0x50,0xd8,0x44,0x9f,0x39,0x51,0xd2,0xb9,0x4b,0x16,0xe4,0xfa,0xc5,0x47,0xf3,0xae,0xb5,0xfe,0x7d,0x5d,0x43,0x28,0xa6,0x3d +.byte 0xcf,0x71,0x23,0x6d,0x8e,0xd7,0x74,0xa4,0x86,0x9f,0x92,0x86,0x3c,0x1e,0x51,0xd4,0xe0,0xe6,0xd5,0xc4,0x53,0x3c,0x96,0x55,0xb9,0xac,0x63,0x5b,0xee,0x5a,0x03,0x84,0xb9,0x43,0x2c,0x0f,0x6d,0xbb,0xb5,0xca,0xf0,0x4f,0x3e,0x8b,0x3b,0x14,0x01,0x0e,0x81,0x0d,0xe6,0x62,0xa9,0x34,0x4e,0x03,0xc9,0x85,0x9f,0xc8,0x4f,0x52,0x3f,0x84 +.byte 0x1b,0xab,0x7e,0xaf,0x93,0x22,0xe2,0x0d,0x41,0x79,0x50,0xb2,0x17,0xa7,0x9a,0x80,0xd5,0x65,0x40,0x3b,0x56,0x9b,0xc9,0x00,0xcf,0x03,0xf1,0xff,0xcd,0x72,0x27,0xdb,0x74,0x94,0x70,0x02,0xdc,0x3a,0xee,0x00,0xcc,0x08,0x0a,0xab,0x40,0x87,0x24,0xaf,0x7d,0x67,0x18,0xd0,0x7c,0xeb,0x91,0x1f,0x7e,0x9e,0x41,0x7b,0x39,0xf2,0xfe,0xaf +.byte 0xb7,0x6c,0x58,0xe0,0xdb,0xf7,0xf1,0x23,0x0b,0x98,0x08,0xfa,0xde,0xfa,0xf9,0x24,0x23,0xd1,0x7f,0x69,0xd3,0xb1,0x82,0x68,0x03,0x06,0x86,0x7a,0xf4,0x90,0x8d,0xa5,0xbd,0xbe,0x14,0x2f,0xa2,0x5e,0xaf,0x5c,0x1e,0x07,0x68,0x19,0x5a,0xd3,0x53,0x7d,0xe8,0x13,0x6b,0xe3,0x02,0x49,0x0d,0xd2,0x96,0x56,0xae,0x67,0x8a,0x27,0x61,0xa0 +.byte 0x60,0x20,0x2c,0xb4,0x5d,0xdf,0xc3,0x24,0x50,0xa9,0xbc,0x3d,0x5c,0xf3,0x2e,0xb6,0xba,0x71,0xf0,0x04,0x43,0x84,0x4d,0x80,0xe9,0xa5,0xdd,0xb3,0x1e,0x5e,0x56,0x32,0x1a,0xd4,0xe3,0x10,0x57,0x35,0xa8,0xf1,0xe5,0x96,0xc1,0x27,0xef,0xcc,0x21,0x71,0x10,0xd1,0x07,0x7e,0xb3,0xab,0x95,0x64,0x86,0xaf,0xc9,0x15,0xe6,0x98,0x5e,0xb1 +.byte 0xbd,0xde,0x99,0x38,0xfc,0x8d,0xb2,0x5a,0xa4,0x44,0x5b,0x74,0x31,0x31,0x07,0x93,0xf5,0x86,0x78,0xc5,0x82,0x26,0xfc,0x95,0x1f,0x33,0xd8,0xfe,0x70,0x42,0x2a,0xa7,0x3a,0xb1,0xb2,0x63,0xd6,0x5b,0x54,0x9c,0x54,0x45,0x4f,0x1b,0x4a,0xc2,0xb4,0x0e,0x99,0x48,0xde,0x8d,0xa6,0x5d,0xd3,0xdc,0x31,0xa4,0x2b,0x0d,0x44,0x6e,0x1a,0x10 +.byte 0x3f,0x6c,0xa0,0xab,0xcb,0xb4,0xf6,0x18,0xba,0x11,0xd4,0xd4,0x70,0xc4,0xab,0x04,0x4c,0xe7,0xe9,0x53,0xe5,0xd9,0xe7,0xeb,0x21,0xa2,0x2c,0xc4,0xc6,0xc3,0xe7,0x73,0xd9,0xd3,0x84,0xb0,0x12,0x94,0x3b,0xfd,0xd9,0x32,0xba,0xe3,0x37,0xc1,0xb9,0x4d,0xea,0x3e,0x3d,0x31,0x4e,0xa0,0xe7,0x73,0x9d,0x4e,0x26,0xd1,0xdf,0xe6,0x26,0xcd +.byte 0xd7,0x17,0xd7,0x28,0x2c,0x04,0xe9,0x55,0xd5,0x70,0xaf,0xab,0xc1,0x07,0xbc,0xc4,0xd2,0x89,0xdc,0x22,0x59,0x19,0x0e,0xd8,0x8b,0xdd,0x46,0x7f,0xe4,0xad,0xa5,0x70,0xd7,0x18,0x51,0x30,0xd7,0xbc,0x26,0x45,0xe7,0xea,0xce,0xc7,0xf2,0xca,0xb1,0x9c,0x57,0x1e,0x10,0x5f,0x44,0x8d,0x3d,0xe8,0x55,0xa1,0x22,0x68,0x97,0xe8,0x03,0x9c +.byte 0x8b,0x63,0x81,0xd9,0xcd,0x4c,0x6c,0xe3,0x68,0xc9,0x35,0xee,0x94,0x13,0x25,0x0b,0x12,0x61,0xbd,0xee,0x6f,0xc7,0xe8,0xb5,0x01,0x7a,0x9e,0xd0,0x5a,0x46,0xc6,0x19,0x1b,0xc2,0xf1,0x2d,0xaa,0x53,0x29,0xcf,0x23,0x1a,0x4d,0x94,0x0a,0x50,0x64,0xf5,0x3b,0x52,0x55,0xac,0xa5,0x21,0x15,0x47,0xd9,0x14,0x8c,0x7f,0x4d,0x79,0x6b,0xc1 +.byte 0x43,0x0a,0xf2,0x42,0xd2,0xb0,0x95,0x19,0x99,0xdd,0x1d,0x8e,0x84,0x8c,0x7e,0x59,0x69,0x93,0x86,0xae,0xf1,0x67,0x35,0x55,0x7c,0x5b,0x38,0x11,0x56,0xec,0x6c,0xbb,0xe8,0xc0,0x54,0xec,0x5f,0x65,0x13,0xe3,0x86,0xa0,0xb1,0xc1,0x5e,0x34,0x4f,0xdd,0x4d,0x00,0xc6,0x29,0x05,0x78,0x64,0x8c,0x19,0xb0,0xfc,0x8a,0xb2,0xc7,0x86,0x57 +.byte 0xa2,0xdd,0xed,0x43,0xc1,0x7f,0xab,0x89,0x19,0xe8,0xa6,0xf5,0x7a,0x15,0xfe,0xd5,0x4f,0x53,0xde,0x78,0x42,0x76,0xf7,0x8a,0x54,0xe8,0x37,0xfd,0xee,0x82,0x20,0xd5,0xe2,0x32,0xb9,0x32,0x67,0xc7,0xff,0xdc,0xf0,0x40,0x07,0x28,0x55,0x16,0x56,0x84,0xe9,0x17,0x25,0x17,0x8e,0x10,0xef,0x9f,0xed,0x33,0x83,0x6d,0x9e,0x87,0x82,0xb8 +.byte 0xa9,0x6b,0xcb,0xe5,0x04,0xfb,0x87,0x51,0x05,0x1a,0x64,0x64,0x51,0x34,0xa3,0x61,0x4a,0xe3,0xa6,0x35,0xa5,0xc9,0xe3,0xde,0xb0,0xcf,0x5f,0x68,0x49,0xbc,0x98,0xf9,0x0b,0x82,0xde,0xb1,0xf9,0x77,0x16,0x7c,0x1f,0x80,0x0c,0xfc,0xbb,0x6d,0x8e,0x92,0x93,0x00,0xc2,0xa5,0xbe,0xde,0x55,0x09,0x9d,0x83,0xa5,0x6c,0x0a,0xb5,0xc4,0x53 +.byte 0xde,0xbc,0x07,0xca,0x0f,0x43,0xea,0x50,0x25,0xee,0x51,0x3b,0xfb,0x7a,0xcf,0x31,0x8a,0x19,0x1c,0xa2,0x2d,0x72,0x79,0x81,0xc6,0xb8,0xe6,0xe1,0xd8,0x3e,0x0f,0xc0,0xae,0x73,0x40,0x30,0x15,0xaa,0xe3,0x72,0xc3,0x36,0xc1,0x42,0x11,0xc5,0x3f,0xf5,0x69,0x78,0xea,0x95,0x54,0x36,0xe8,0x7e,0x9c,0xad,0xbd,0xcd,0x19,0xfe,0x4a,0x04 +.byte 0xb4,0x54,0x14,0x98,0x58,0x6f,0x06,0x8f,0x8c,0x95,0xa8,0xc9,0xe8,0xc4,0x2b,0x03,0xaa,0x42,0x75,0x74,0xa2,0x63,0xdb,0xca,0xd1,0xf0,0x60,0xc3,0x63,0x84,0xfb,0xd7,0x5a,0x7b,0xca,0x45,0x8d,0x14,0xdc,0xf8,0x71,0x40,0x71,0xbb,0xa1,0x1a,0xd3,0x8c,0xfb,0xf6,0xf7,0xfc,0x82,0x72,0x50,0xc9,0xe3,0xc5,0xe2,0xb1,0x57,0xb1,0x24,0x3e +.byte 0x11,0x4d,0x96,0x1c,0x3a,0xe1,0xb6,0xb7,0x0e,0x55,0x35,0x6c,0xd8,0x2b,0xe3,0x78,0xcd,0xac,0x8f,0x24,0x70,0xc6,0x35,0x5b,0x6e,0x75,0x7a,0xf1,0x7d,0x87,0x53,0xcf,0x0a,0x24,0xb6,0x6a,0xfd,0xef,0x90,0x07,0xcf,0xde,0x30,0xbc,0x8c,0xec,0xda,0x6f,0x45,0xad,0x92,0xb6,0x8d,0x6b,0xb8,0x8e,0xdc,0xe5,0xbf,0x57,0x67,0x5e,0x2f,0x4d +.byte 0x5d,0xee,0x38,0x0a,0xaf,0xeb,0x62,0x84,0x2b,0x4c,0x30,0x7b,0x91,0x99,0x40,0x6f,0x09,0x2b,0x36,0xcd,0x04,0xeb,0x7c,0x8d,0xa5,0xbd,0xd6,0xb0,0xfc,0x27,0xcf,0x6b,0xdd,0xe1,0x94,0xbc,0x21,0xc6,0xc9,0x55,0x24,0xd4,0xa1,0x6f,0x1e,0xa2,0x81,0x31,0x22,0xb7,0x75,0x9e,0xa7,0x01,0x26,0x01,0x6c,0x12,0x91,0x02,0x87,0x40,0x5c,0x91 +.byte 0x1f,0x0c,0x55,0x07,0x12,0xa7,0x48,0xdd,0xed,0xb6,0xfe,0x38,0x05,0xbc,0xe1,0x2e,0x3b,0x89,0x4f,0x98,0x65,0x22,0x93,0xda,0x09,0x9f,0x04,0x90,0x66,0x81,0xd1,0x56,0x27,0x8b,0x26,0x99,0xbe,0x93,0x08,0xf1,0xfb,0x80,0x5b,0xaa,0xc4,0x96,0x88,0x93,0xb6,0x01,0xae,0xf6,0x69,0xaa,0x6f,0x4d,0xde,0x2f,0xc7,0x24,0xbf,0xe9,0xb8,0xeb +.byte 0xcd,0xb2,0x0a,0x50,0x5c,0xd2,0x0b,0xfc,0x57,0x3b,0x96,0xf8,0xd9,0xbe,0xd2,0xb5,0x16,0xac,0x7c,0xe4,0x2f,0x46,0x93,0x86,0x48,0x91,0xfa,0xae,0xca,0x05,0x9e,0xfe,0x6e,0xae,0xa5,0x58,0x94,0xc0,0x58,0x1e,0xc5,0x69,0x28,0xe0,0x99,0x12,0x83,0xcf,0x35,0xe4,0x72,0x7d,0x4e,0x8b,0x66,0x56,0xb3,0xa6,0x2a,0x72,0x06,0x03,0x45,0xd1 +.byte 0x95,0xc9,0x93,0xb7,0xf4,0x8a,0x83,0xce,0x17,0x8b,0xf0,0x8e,0x8f,0x4a,0x68,0x55,0xd8,0xfc,0x54,0x8d,0xb5,0x62,0x17,0xa8,0xe6,0x18,0x03,0x53,0x04,0xb8,0xbe,0xd2,0xd0,0x7a,0x84,0xe1,0x39,0x31,0xc5,0x74,0xf2,0x64,0x1c,0x3b,0xd5,0x52,0x9b,0x81,0x8a,0x8f,0x36,0xc8,0xab,0x3d,0xe1,0xa8,0x2a,0xf2,0x84,0x9a,0xca,0x0c,0xcf,0xc9 +.byte 0x45,0x54,0x06,0xe8,0xd2,0x62,0x61,0x4d,0xeb,0x0b,0x38,0x4e,0x43,0x59,0x85,0x3a,0xe4,0xa3,0x25,0x15,0xc2,0xb5,0x7b,0x5e,0x2f,0xe6,0xc1,0x5d,0x2a,0xb7,0x57,0xb8,0x7e,0x61,0x51,0xc3,0x81,0x53,0x45,0x8a,0x6e,0x4c,0x89,0x84,0x2a,0x6b,0xca,0x15,0xff,0x97,0xfc,0x1f,0x8a,0x44,0xbd,0xcd,0x5e,0x32,0x6b,0x5f,0x78,0x7b,0xdf,0xdd +.byte 0x9d,0x2f,0x21,0xf2,0x14,0x40,0x5f,0x5a,0xd5,0x21,0x27,0x3d,0x0b,0x9f,0x9f,0xb0,0x8e,0xab,0x9e,0x68,0x96,0x02,0xfd,0x4d,0xcc,0x03,0xf0,0x03,0xfb,0x4c,0xac,0xfa,0x00,0x3b,0xea,0x1a,0x53,0x80,0x77,0xec,0x53,0xc3,0x3c,0x6c,0xf8,0xa5,0x3e,0x52,0x34,0xd4,0xa1,0x52,0xb8,0xd6,0x19,0x8c,0xdf,0x85,0x27,0x61,0x22,0xe7,0x43,0xeb +.byte 0x85,0xc0,0xbe,0x58,0xe6,0x60,0x81,0x4c,0xc6,0xbb,0xc0,0xbf,0x63,0x39,0x9d,0xad,0x2e,0xa8,0x2a,0x83,0x3d,0xfa,0xdb,0x0b,0x98,0x16,0x78,0x18,0x43,0xc7,0x17,0x82,0xb8,0xec,0x32,0x45,0x75,0x0c,0xc1,0x4c,0x84,0xbf,0xce,0x83,0x3b,0xb4,0x91,0xf4,0x0d,0x5d,0x83,0xf6,0xd6,0x10,0xab,0xc6,0x26,0x9b,0x68,0x59,0xec,0x48,0x4b,0x1d +.byte 0x35,0x2a,0x5b,0x23,0x83,0x22,0x8e,0x7d,0xfa,0xce,0xde,0xb1,0xd9,0x78,0xf6,0x9e,0x08,0xba,0xfb,0xda,0xf2,0x04,0xc5,0x2a,0xac,0xbf,0xb4,0x04,0x05,0x1f,0x0b,0xeb,0xe8,0x2a,0x3c,0x3f,0x4f,0xb6,0xc8,0x6b,0x97,0x5a,0x9e,0xdb,0x4b,0x3c,0x93,0xc1,0x20,0x1c,0x62,0x91,0x74,0x76,0x49,0x92,0xc2,0xd8,0x0d,0xd8,0xfe,0xb5,0x68,0x77 +.byte 0x48,0x9f,0xbe,0xe0,0x78,0x20,0xe7,0xa4,0x3d,0x3e,0xa1,0x4c,0xc7,0xeb,0xd3,0x30,0xd3,0xf0,0x65,0xcf,0x18,0x3c,0xf8,0x25,0xc2,0x99,0xf4,0xec,0xef,0xdd,0xef,0xf3,0x6b,0x28,0x00,0xaa,0xfd,0x76,0xec,0x19,0x67,0xd6,0x79,0xa6,0x01,0x6e,0x20,0x3a,0x7f,0xd4,0xd0,0x05,0xb4,0xea,0xd4,0xde,0x11,0x06,0x44,0x4a,0x6f,0x15,0x2f,0x62 +.byte 0x9a,0xaa,0xeb,0xaf,0xb5,0xb5,0x46,0xb2,0x28,0x2e,0x74,0x26,0x06,0x91,0xeb,0x15,0xef,0xd4,0xfd,0xc7,0x1b,0x65,0x25,0x01,0x24,0xd2,0x44,0x05,0x18,0x1c,0x71,0x36,0x58,0xc4,0x37,0xfe,0x22,0x29,0xc0,0x2f,0xd2,0x4e,0xeb,0x43,0xb9,0xf9,0x4e,0x87,0xd7,0x92,0x77,0xa8,0x4f,0xa5,0x6e,0x5c,0x4d,0x3a,0xe9,0x16,0x62,0x30,0x51,0xbb +.byte 0x32,0xd8,0x0d,0x86,0x20,0xbf,0x68,0x0f,0x3e,0xef,0x8b,0x0d,0xc5,0xa6,0x94,0x81,0xe9,0x6f,0x85,0xf5,0x22,0x6e,0x9e,0x0a,0x56,0xa3,0x43,0x79,0x50,0xd9,0x45,0x5f,0x5a,0x3f,0x53,0x53,0xb7,0xfe,0xb6,0x1c,0x63,0xab,0x7c,0xed,0x2f,0xc4,0x2b,0xa8,0x53,0xfb,0xad,0x46,0xf0,0x63,0xca,0x7a,0x6e,0xce,0xf4,0xb9,0x34,0xd0,0x9a,0xc8 +.byte 0x0d,0xd2,0x32,0xce,0x26,0x3f,0xcd,0xd9,0xbc,0xa9,0x46,0x65,0x45,0xfe,0x45,0xeb,0x0d,0xab,0xe6,0x31,0xb6,0xb9,0x41,0x53,0x7d,0x55,0xc3,0xfb,0x10,0x46,0x37,0x77,0x1f,0x15,0xf0,0x5f,0xcb,0x8f,0xea,0xc5,0xc0,0xb8,0xc6,0xb1,0x3a,0x06,0x42,0xec,0x38,0xec,0x06,0xd1,0x37,0x3b,0xe1,0x8d,0xad,0xc2,0xce,0x96,0x0b,0xf0,0xab,0xde +.byte 0x9c,0x3c,0x09,0xef,0x59,0xcd,0x67,0xa7,0x6e,0x0e,0xc7,0xee,0x51,0x6d,0x90,0x40,0x0e,0xdf,0xb1,0x13,0xe3,0x0c,0xb6,0xe8,0xcb,0xf5,0x57,0x50,0xeb,0xdf,0x09,0x45,0x72,0x40,0xff,0xdc,0x5c,0x51,0x42,0x47,0xb2,0x9e,0xca,0xf3,0x1b,0x06,0xb1,0x3e,0x04,0x55,0x96,0x63,0x24,0x16,0xdb,0x3e,0xab,0x98,0x33,0x70,0x6f,0xfd,0x8f,0x7b +.byte 0x56,0xb0,0x7f,0x28,0x26,0xc4,0x2a,0x9e,0xf5,0xa7,0xba,0x61,0x75,0xa4,0xb1,0x25,0x60,0xe5,0x9c,0x7e,0xb4,0xaa,0x04,0xa1,0x33,0x5a,0x8d,0x88,0x1d,0xc4,0x38,0x58,0x28,0x23,0xc7,0xac,0x20,0xf8,0xaa,0x18,0xf8,0xc7,0x27,0x05,0x07,0xf7,0x12,0xfe,0xe1,0xa5,0x99,0xaa,0x55,0x79,0x72,0xc4,0x14,0x08,0x14,0x4a,0xfb,0xf7,0x66,0x81 +.byte 0x6e,0xed,0x81,0x12,0x5f,0xb6,0x08,0x00,0x37,0xf9,0xdc,0xdf,0x4d,0xcb,0xfa,0xc6,0xf3,0xc2,0x17,0x17,0x52,0x39,0x7b,0xa0,0x3e,0x25,0xc9,0x48,0xd8,0xa6,0x1b,0x8b,0xdb,0xf8,0x74,0xac,0x6b,0x16,0xec,0xa6,0x4a,0x1e,0x7e,0x5c,0x50,0xbf,0x81,0xef,0x3c,0x7d,0x9d,0x21,0x38,0xa9,0x26,0x3c,0x30,0x7a,0xfb,0xab,0xd8,0x6a,0x0a,0xaa +.byte 0xbb,0x6e,0x91,0x92,0x7c,0x04,0x02,0x0e,0xa2,0x71,0xc7,0xde,0x7d,0x42,0xaf,0xe5,0x92,0xc1,0xb9,0xd7,0x52,0xaa,0x32,0xea,0x39,0x84,0x17,0x40,0xb0,0x83,0x18,0xff,0x46,0xb8,0x59,0xd9,0xa3,0xce,0x82,0x7e,0x65,0x54,0xe0,0xa4,0x6d,0x8a,0xbc,0x6a,0x65,0xb2,0xd5,0x96,0x5b,0x1c,0x9a,0x32,0x72,0xf7,0x81,0x57,0xcd,0xb3,0x22,0xc5 +.byte 0x7d,0x20,0x24,0xea,0xbe,0x51,0x4c,0xb3,0x48,0x36,0x4f,0x73,0xf4,0x3f,0x07,0x92,0x01,0xe2,0x1e,0x78,0x3f,0x8e,0x1f,0x35,0x1a,0xf1,0xe1,0x14,0xd1,0xe7,0xd9,0xfd,0xd8,0xf7,0x20,0xc2,0xf3,0x7a,0x59,0xc9,0x1d,0x13,0x41,0x01,0xf6,0x77,0x69,0xfb,0x0f,0xc7,0xe4,0x58,0x04,0xce,0xe8,0x73,0x87,0x2f,0xef,0xe6,0x36,0x38,0xc7,0x91 +.byte 0x2d,0x17,0xb5,0x56,0x68,0xb1,0x9f,0xbf,0x2e,0x4b,0xe7,0x09,0x7b,0x35,0x33,0x5a,0x6c,0xc1,0x6f,0xb3,0xac,0x6c,0x1e,0xfe,0xc0,0xc9,0xd8,0x77,0xf5,0xcb,0x5e,0xcc,0xd1,0x2f,0xdd,0x23,0x8b,0x3b,0xb5,0x43,0x96,0x1f,0xa9,0xe4,0x84,0x41,0x92,0xe9,0x68,0x47,0x50,0xf7,0xd4,0x85,0x22,0xa1,0x43,0xaa,0xde,0xf7,0xea,0xe0,0x54,0xaa +.byte 0x0d,0xe6,0xa5,0xb8,0x7e,0xec,0x13,0x9a,0x1e,0x6c,0x10,0x9d,0xa8,0xfb,0x97,0xde,0x24,0xda,0x33,0xbb,0xab,0x17,0x7a,0xb4,0x72,0xaf,0xed,0xc9,0xa4,0x62,0x65,0x0c,0x99,0x3d,0x74,0x7f,0xff,0x59,0xa9,0x8e,0x37,0xb9,0x10,0x30,0x26,0x3f,0x2f,0xfc,0x1e,0xe2,0xc6,0xb8,0xff,0x41,0xb3,0x35,0x3f,0x41,0xf4,0x47,0xbc,0x76,0xc6,0x77 +.byte 0x0f,0xf8,0xff,0xb8,0xd2,0x34,0x40,0xac,0x43,0xcb,0xcf,0x1f,0x57,0xaa,0x1a,0xa7,0xe1,0x4a,0x69,0xd7,0x05,0xa7,0x9d,0xff,0x13,0x43,0x91,0xe3,0x09,0x1c,0xb2,0xb2,0x82,0x06,0xa3,0x3c,0x35,0x85,0x9e,0xd0,0xcf,0x1c,0xb9,0x13,0x09,0x7d,0x3d,0x17,0x0f,0xf8,0x2f,0x61,0x97,0x7e,0x02,0xe0,0x78,0x07,0x69,0x8c,0x91,0xbe,0x96,0x92 +.byte 0x4a,0x03,0xa7,0x31,0x5f,0x6c,0xfe,0x55,0xb2,0x17,0xe8,0x4c,0x64,0x48,0x18,0xde,0x4f,0x5a,0xce,0xd2,0xcb,0x83,0x4d,0x1b,0x2a,0x1f,0xce,0x85,0xf7,0xdc,0x74,0x8c,0x42,0xc6,0x5a,0x3a,0x51,0x22,0x79,0x70,0xa0,0xe0,0x29,0x2a,0x73,0xe4,0x53,0xb4,0x47,0x5f,0x54,0xa8,0x65,0xe4,0x89,0x78,0xf9,0xb9,0x5f,0x5f,0x9d,0xa8,0xf7,0x82 +.byte 0x4e,0x34,0x60,0xfc,0xe3,0x88,0x65,0x73,0x99,0x1f,0x53,0xed,0xe8,0xf0,0xf4,0x5a,0x0a,0x49,0x42,0x6e,0x02,0x3f,0xa8,0x63,0x21,0x02,0x2e,0x8f,0x33,0xba,0x0e,0x10,0xd3,0x4c,0x1a,0x8b,0xf5,0x84,0x8e,0x2b,0x37,0x12,0x23,0x77,0x02,0x45,0xc7,0xc3,0x79,0x06,0xc2,0x8c,0xaa,0x32,0x53,0x7c,0x19,0xa2,0x92,0x7e,0x47,0x40,0x8f,0xae +.byte 0x8a,0x64,0x51,0x67,0xe1,0xc1,0xc3,0xd2,0x14,0x1d,0x63,0x0c,0x80,0x04,0x30,0x3d,0xee,0x58,0x44,0xe4,0x14,0x63,0xfc,0x95,0x05,0x3e,0xc1,0x8d,0xd3,0xcb,0x5d,0xc1,0x8e,0xf9,0xd7,0xe5,0x9d,0x97,0xef,0x8a,0xaa,0x50,0x31,0xa3,0x01,0x3a,0xb2,0x8d,0x63,0xb6,0xe7,0x34,0xec,0xa1,0x7a,0xff,0x57,0x95,0xbb,0x1d,0xbe,0x0c,0xa5,0x91 +.byte 0x92,0x08,0x06,0x1c,0x67,0x03,0x2e,0xee,0xf6,0x6f,0xa0,0xb7,0x9a,0x7c,0xe3,0x6a,0x8e,0xd8,0x50,0xc1,0xd6,0xa1,0x8d,0xe9,0x66,0x9a,0x1f,0x62,0x15,0x04,0x93,0x74,0xe8,0x04,0x0d,0x27,0x55,0x2b,0x07,0xb1,0xbd,0x69,0xe4,0xc1,0x34,0x8e,0xe7,0xfb,0xa0,0x3f,0x40,0x31,0x47,0xba,0xcb,0x80,0x88,0xf7,0x4f,0x46,0x05,0x31,0xaf,0x23 +.byte 0xdf,0x93,0x09,0x0a,0x15,0xc9,0x95,0x74,0x52,0x72,0xf4,0xbf,0x0d,0x07,0xb6,0xcc,0x4b,0x40,0x12,0xf3,0x87,0xea,0x29,0xd8,0x29,0x31,0x23,0xac,0x29,0x1a,0x89,0x83,0x5b,0x33,0x4b,0x6b,0x69,0xbe,0xb6,0x15,0x7e,0xfd,0xf2,0x95,0xc4,0xbe,0xeb,0xee,0x59,0x01,0x2a,0xce,0xca,0x80,0xda,0xf8,0x1a,0x01,0x23,0xf7,0xa1,0x4f,0xf5,0x83 +.byte 0x5e,0x16,0xd9,0x12,0xa9,0x4e,0xcb,0x59,0x23,0x4f,0x40,0xd7,0xbf,0xaf,0x76,0xf0,0x50,0x31,0x27,0x3a,0x8b,0x1d,0x9b,0xb1,0x1c,0x41,0xb0,0xed,0xe6,0xf3,0xa8,0x5f,0x6b,0x58,0x54,0x92,0xaf,0xcc,0x44,0x5c,0xea,0xdb,0x09,0xc5,0x26,0x5e,0xbe,0x46,0xbd,0x72,0x49,0x5a,0x4e,0x65,0x7e,0x75,0xcf,0xfc,0xf6,0xd0,0x3c,0x4a,0x7e,0xd6 +.byte 0x8e,0x8e,0xb4,0x19,0x45,0x75,0xbf,0xc3,0x5e,0x46,0xff,0xc9,0x46,0x65,0x8d,0x31,0x01,0x5e,0x1c,0x13,0x93,0x56,0x6f,0x28,0xec,0xf3,0x77,0xfa,0x6e,0xb9,0x0e,0xb6,0x8e,0x0e,0x38,0xf8,0x28,0x64,0xa2,0xa1,0x42,0x9a,0xb4,0xf3,0x14,0x8d,0x17,0x80,0x05,0x82,0x7c,0xf1,0xea,0x8b,0x4b,0x62,0xa0,0xde,0xf6,0xd7,0x36,0xb0,0x70,0x8d +.byte 0x03,0xf6,0xc8,0x2a,0x9e,0xc0,0xbb,0x2f,0xcb,0xef,0x35,0xf7,0x16,0xcd,0xd6,0xd6,0x90,0xd7,0x5d,0x61,0x00,0x33,0x9f,0xd8,0xd1,0xda,0x17,0x67,0x90,0xd1,0xf8,0x59,0xcb,0xf1,0x76,0xc2,0xbe,0x1f,0x5d,0x0d,0xb2,0x02,0xbd,0x19,0x9f,0x5a,0xa0,0x91,0xac,0x51,0xb5,0xf5,0x0a,0x64,0x67,0xf2,0x49,0x30,0x6c,0x57,0x83,0xda,0x90,0xf1 +.byte 0xc6,0xc7,0xe6,0x05,0x13,0x30,0x52,0xfd,0x2a,0x47,0xea,0xae,0xd3,0xed,0xe4,0x64,0x1f,0x6c,0xb1,0xdf,0xca,0x20,0x97,0x2a,0xc8,0xdc,0x00,0x0e,0x5b,0x59,0xc8,0x16,0x95,0x68,0x9a,0x2e,0x44,0xab,0xf6,0x93,0x7c,0x8f,0x66,0x4f,0x07,0x42,0x3f,0xa5,0x81,0xe7,0xab,0x59,0xbb,0xae,0xb1,0x3e,0x9a,0x25,0xf1,0xde,0xac,0x4c,0x1d,0x7a +.byte 0x54,0xb9,0xa9,0x59,0xaf,0xb0,0xab,0xaf,0x6b,0x76,0x66,0x1e,0xbe,0x1a,0xc1,0x61,0x1b,0x81,0x6b,0xe8,0xe4,0x73,0x6a,0x87,0xe9,0x39,0xcb,0x2c,0xab,0x64,0x36,0x9a,0x11,0x46,0xec,0x9f,0x30,0xb6,0x2c,0x14,0xe0,0xec,0xbe,0x33,0xde,0x60,0xc6,0x00,0x29,0x3c,0x55,0xda,0xfc,0x64,0xff,0xaa,0xbf,0x99,0x58,0xe2,0xe3,0xec,0xde,0xca +.byte 0xd1,0x3d,0xd2,0xad,0xaa,0xca,0x36,0x8f,0x93,0xa2,0xdd,0xde,0xaa,0x49,0x7f,0xdd,0x39,0x91,0xa0,0x7b,0x33,0xdf,0x36,0xcd,0xc3,0x3a,0xbc,0x53,0xf0,0x07,0x99,0x78,0x4e,0x63,0x47,0x79,0xbf,0x21,0xfc,0x05,0x47,0x69,0xec,0xee,0xf4,0x21,0x97,0x94,0x0c,0x7a,0x9f,0xa6,0xeb,0x5b,0x23,0xed,0x9d,0xc1,0xe1,0x5e,0x10,0xca,0xe0,0x84 +.byte 0x5a,0xdd,0xf6,0xae,0xd8,0x23,0x98,0xea,0x6c,0x43,0x77,0x41,0xf3,0x84,0x5a,0xe8,0xda,0xb3,0x11,0x0e,0x19,0x33,0xe9,0xf9,0x7a,0x90,0x07,0x68,0xf1,0xe4,0x52,0x0c,0x03,0x67,0xb9,0x42,0x41,0x24,0xa3,0x61,0x67,0x75,0xc9,0xb5,0xdd,0x10,0xf1,0x20,0x93,0x54,0xdb,0x0d,0xc7,0x0d,0x25,0x3e,0xda,0xb3,0xe7,0xce,0x97,0x7e,0xdb,0x1a +.byte 0x8f,0x92,0xff,0xe3,0x44,0x2d,0x6b,0xdb,0xe0,0x69,0x8b,0x16,0xce,0xe8,0xc7,0x93,0xf1,0x19,0xb9,0xd3,0x41,0x45,0x8d,0x95,0xb3,0x03,0xb2,0x66,0x96,0x95,0x91,0x33,0x1c,0xee,0xde,0xd7,0x9d,0xab,0x32,0x2f,0xb8,0x3c,0x7a,0x44,0x8f,0xa6,0xca,0x02,0x03,0x2f,0xa8,0x44,0x85,0x0e,0xf5,0x27,0x90,0x84,0xd9,0x80,0x06,0xf4,0x4f,0xc7 +.byte 0x21,0xc5,0x92,0xa4,0x2d,0x08,0x42,0x4c,0xa7,0x84,0xfa,0x7e,0x2b,0x66,0xfb,0x7c,0x81,0xea,0x5c,0x7d,0xdd,0x86,0xf1,0xf5,0x04,0xef,0xf2,0x50,0x12,0x72,0x42,0x22,0x23,0x74,0x7f,0xe7,0xed,0xd9,0xce,0x78,0x10,0x83,0x37,0xd0,0x81,0x97,0x4a,0xac,0xc2,0xe5,0x13,0x91,0x83,0xe2,0x6e,0xff,0x5a,0x0b,0xc3,0x4d,0xc1,0x3e,0x97,0x16 +.byte 0x96,0x69,0x39,0x9e,0x1d,0x6b,0x16,0x82,0xa2,0x94,0x0d,0x50,0xdd,0xa3,0xda,0x9d,0xda,0x3f,0x46,0xce,0x6c,0xd0,0xdf,0x6e,0x1b,0x17,0x47,0x51,0x74,0x6f,0xe9,0xa4,0x6b,0xae,0xd2,0x6e,0x5b,0xc0,0x26,0xc6,0x0b,0x84,0xb1,0x39,0xcf,0x9e,0x7c,0x18,0x52,0xd7,0x8f,0x33,0xae,0x3d,0xaf,0x3d,0x1a,0xba,0x3f,0x09,0x76,0x22,0x1d,0xf3 +.byte 0x42,0x14,0x4f,0x06,0xc7,0x33,0xc1,0x2d,0x58,0x1b,0x4c,0xc0,0x3a,0x29,0xa6,0x5e,0x19,0x26,0xdf,0x36,0x18,0xa9,0xc5,0xe9,0xd3,0xb1,0xae,0x86,0xa8,0x7f,0xd9,0xb4,0x18,0xef,0x9c,0x46,0xb6,0xf2,0xb2,0xb6,0x6e,0xe2,0xf8,0x5f,0x27,0xea,0x76,0xd3,0x40,0x68,0x94,0x66,0x8a,0xf5,0x9f,0xee,0x0c,0xe5,0xae,0xb6,0xba,0x87,0x42,0x40 +.byte 0xc9,0x83,0xac,0xb4,0x2c,0xec,0x74,0xb7,0x55,0x17,0x0b,0x1e,0x45,0x1a,0x87,0x9d,0x52,0xce,0xb7,0x58,0x2f,0x45,0xc7,0x7d,0xf3,0xd3,0x11,0x2e,0xf4,0xd8,0xc0,0xb8,0xc3,0x31,0x45,0x68,0x40,0xe8,0x8a,0x33,0x20,0x9a,0x06,0xa8,0x18,0x53,0xb2,0x73,0xa1,0x57,0xac,0x8f,0x56,0xeb,0x8e,0xa4,0xfc,0xd6,0x76,0x7e,0x81,0x62,0x2c,0x17 +.byte 0x49,0xb4,0xcc,0x15,0x66,0xcb,0xa2,0x3c,0x29,0xf0,0x73,0x0e,0x9a,0x34,0x16,0x6d,0x43,0x62,0x20,0x89,0x14,0xae,0x8b,0x5d,0x61,0x54,0xa1,0x82,0x49,0x73,0xb9,0x2b,0x48,0xd4,0xe3,0x21,0x37,0x5e,0x4d,0xbf,0xd0,0x72,0xa4,0x23,0xdb,0x7c,0xd9,0x45,0x77,0x8a,0x24,0x23,0x56,0xcd,0x84,0x80,0x44,0x12,0xce,0x99,0x39,0xbd,0x77,0xff +.byte 0x8c,0x62,0x8d,0x56,0x77,0x24,0x40,0x11,0x22,0xab,0x28,0xd6,0x75,0x2b,0xbb,0xc1,0x51,0xd6,0x5e,0x61,0x1c,0xe9,0xac,0x36,0x99,0x52,0x44,0xa5,0x20,0xdb,0xe0,0x12,0x9a,0x45,0x8f,0x7f,0x47,0xf9,0xa3,0x91,0x18,0x2b,0x51,0x9a,0x9f,0x3f,0x7d,0x36,0xde,0x71,0xae,0xca,0x62,0x62,0x16,0xda,0x19,0x9c,0x84,0xce,0xde,0x93,0x22,0xde +.byte 0xaf,0xe7,0x91,0x09,0xe8,0xf0,0x0e,0x07,0x71,0xdf,0x48,0xcd,0x8a,0x77,0x19,0x3c,0xd6,0xef,0x8e,0xe0,0x49,0xdf,0xcb,0xd6,0x34,0x78,0x7f,0x42,0xc2,0x6e,0x7a,0x50,0x53,0xee,0xbf,0x73,0x4b,0xd4,0x4f,0x06,0x18,0x26,0x67,0x51,0x54,0xa3,0x40,0xe6,0xb3,0x61,0x4b,0xfd,0xee,0x62,0x00,0x44,0x6c,0x0d,0x8b,0x2f,0x4d,0x06,0x17,0x41 +.byte 0xee,0x8b,0xde,0x1f,0x80,0x36,0x58,0x3e,0x0a,0x53,0x0a,0x83,0xf9,0xba,0xbd,0x91,0x6a,0x20,0x32,0x42,0x6c,0x85,0xdc,0x84,0xfd,0xce,0x57,0xbe,0xf8,0xa5,0x2c,0x7e,0xf9,0x1b,0x07,0xf4,0x32,0x13,0x32,0x79,0xdc,0x91,0xfc,0xc0,0x18,0xe6,0x1e,0xb2,0x67,0x9d,0x08,0xd2,0x89,0xa2,0xb1,0xbf,0x37,0xe1,0x3f,0x9e,0xb5,0x17,0xf7,0x2f +.byte 0x9a,0x4f,0x3c,0xea,0x5d,0x48,0x56,0x48,0x35,0x17,0xe9,0x5a,0x99,0xa7,0x2e,0x25,0x4f,0x96,0xa6,0x3d,0x3c,0xf8,0xdc,0xe7,0xe5,0x98,0x46,0xf7,0x10,0x16,0x4f,0xb0,0x7b,0x48,0x06,0xbb,0x9a,0x5a,0xad,0x32,0x49,0x92,0x39,0xb2,0xfe,0x01,0x1a,0x5e,0xcc,0xf7,0x0d,0x65,0x1c,0xf5,0x3d,0xb3,0x40,0x28,0x06,0x6e,0xbb,0x74,0x2a,0x95 +.byte 0xe9,0x62,0x2a,0xe2,0x19,0x38,0xc6,0x0d,0x46,0x30,0x6d,0x90,0xa5,0x68,0x4d,0x89,0xf0,0xf4,0xaf,0x52,0x11,0x8a,0x47,0x65,0xc0,0x6d,0xee,0xde,0xbc,0xed,0xf2,0x94,0xf3,0xfb,0xfd,0x2f,0xea,0xd5,0x36,0x89,0x8a,0x22,0xb8,0x75,0x3c,0xda,0x8d,0x3f,0x71,0xe5,0x50,0xb8,0xef,0xfc,0xa1,0x34,0x4a,0xb0,0x56,0x64,0xaf,0x28,0x0c,0x7a +.byte 0x28,0x3e,0xc8,0x83,0xc2,0xbb,0x89,0xc4,0x29,0x7f,0xc9,0xe7,0x4e,0xcb,0xdc,0x8f,0xe8,0xa4,0xdc,0x0d,0xcc,0xa0,0x16,0xda,0xa9,0x34,0x61,0xec,0x64,0xa7,0xf4,0x47,0xe9,0xee,0xbf,0xc6,0x4b,0xc5,0x01,0x65,0xe4,0xe0,0x12,0xd6,0x27,0xda,0x30,0xb5,0x60,0x72,0xe1,0xee,0x38,0x23,0x6c,0x9d,0xbb,0x83,0x01,0x4b,0x26,0x9a,0x68,0xb3 +.byte 0x89,0xb3,0xe0,0x10,0x22,0x58,0xef,0x2d,0xd4,0x86,0xab,0xab,0xc4,0xd8,0x9c,0x56,0xe8,0x54,0x40,0x86,0x11,0xd2,0x6b,0xc0,0xaf,0xfc,0x4a,0xef,0x24,0x38,0x79,0x32,0x54,0x26,0x8b,0x7e,0x02,0xad,0x86,0x9d,0x40,0x65,0x28,0x28,0xa3,0xa6,0xe4,0x07,0x29,0x3a,0xbb,0x81,0xed,0x17,0x54,0x51,0x35,0xc6,0x88,0x9c,0x63,0x7e,0x73,0x02 +.byte 0x28,0x13,0x4b,0x33,0xc0,0x68,0xbc,0xae,0x8c,0x59,0xd4,0x84,0x1d,0x41,0x86,0x5a,0xf6,0x14,0x50,0x13,0x88,0xca,0xc8,0xb8,0xfc,0x61,0xeb,0xe6,0x69,0x70,0x4a,0xa5,0xa5,0x36,0x4b,0xac,0xca,0x00,0x28,0xae,0xb0,0x03,0xef,0xe3,0x92,0xad,0x97,0x32,0x05,0x8c,0x93,0x95,0x45,0xd5,0x75,0x66,0x11,0xd3,0x6f,0x7f,0x5f,0x35,0x44,0xb7 +.byte 0xd7,0x34,0xcf,0x8c,0x4a,0x61,0x68,0x63,0x3f,0x92,0x54,0x01,0x3c,0x25,0x2d,0x6f,0x4a,0x2d,0x55,0xff,0x3f,0x86,0x85,0x9f,0xc2,0xa1,0xde,0x6b,0xbf,0x7e,0xb4,0x7c,0xc1,0x80,0x73,0xf5,0x3b,0x85,0xae,0x36,0x1a,0xdf,0x00,0x52,0xb7,0x70,0xa9,0x42,0x79,0xd2,0x26,0xf8,0x3b,0xeb,0x9f,0x2e,0x15,0x33,0xc8,0x85,0x2d,0x63,0xb2,0x89 +.byte 0x24,0x8e,0xfd,0xe6,0xdf,0x01,0x80,0x8b,0x27,0xe3,0x7e,0x17,0xc2,0x4e,0x26,0xa2,0xe1,0x95,0x81,0x3a,0xdd,0x2a,0xf4,0x75,0x21,0x64,0x11,0x04,0x5e,0x00,0x39,0xf0,0x08,0x68,0x67,0x09,0xa8,0x9b,0xbe,0xb7,0x62,0x0e,0xa8,0x69,0xcd,0x4e,0xaf,0xc8,0x4f,0x92,0x3d,0x8e,0x35,0x60,0x70,0xb3,0xda,0x2f,0x38,0x80,0x6f,0x5e,0xcc,0x3b +.byte 0x6e,0x05,0x26,0x14,0x9d,0x36,0x72,0x7d,0x09,0xb8,0xb7,0xa1,0xf7,0x5f,0xb3,0xe1,0xd6,0xc5,0x54,0x4e,0x80,0x4d,0x06,0x8f,0x84,0xbb,0xb6,0x65,0x87,0x2c,0x19,0x4a,0x74,0x3c,0x34,0x62,0x32,0xad,0x4c,0x06,0xa3,0xbb,0xfb,0x4f,0x4f,0x9d,0x91,0x84,0x63,0x75,0x34,0xcc,0x6b,0x00,0xa1,0x5a,0x63,0x03,0x8d,0x1e,0xdb,0xa4,0x0c,0xe6 +.byte 0x3d,0xd1,0x94,0x77,0xd8,0x77,0x8c,0x39,0x48,0x78,0xb1,0xb5,0xa2,0x41,0xd0,0x6d,0x27,0x20,0x4a,0x41,0x88,0xa5,0x78,0x3f,0x51,0x72,0x8c,0x80,0xe7,0x37,0x81,0x8b,0x06,0x46,0x58,0xab,0x23,0x85,0x47,0x89,0x39,0xf9,0x14,0xfe,0xbf,0x07,0x7c,0x47,0x8e,0xcc,0xd7,0x08,0xfe,0x5d,0xee,0xf9,0x94,0xa2,0x83,0x81,0x8a,0xfd,0x0f,0x9a +.byte 0xa7,0xe4,0x59,0xad,0xe6,0x1f,0xed,0x5d,0xe4,0x20,0xd6,0x2f,0xa7,0xd3,0xcf,0x5b,0x18,0x6d,0x24,0x79,0x66,0xd9,0xaa,0x44,0xfa,0x8d,0x74,0x60,0xcc,0x7e,0xbf,0x4f,0x0e,0xe3,0x9c,0xa5,0xe4,0xff,0x14,0x05,0xff,0x24,0x62,0x94,0x00,0x7a,0x58,0xe5,0x0b,0x3b,0xe8,0xee,0xe1,0x4d,0x4e,0x34,0x26,0xba,0x70,0x10,0x5e,0x14,0x4f,0xa5 +.byte 0x7a,0x9e,0x7b,0x28,0x99,0xbe,0x94,0x4a,0xcb,0x8d,0x65,0x60,0xa0,0x6e,0xc7,0xbc,0x51,0xba,0xb5,0x07,0x97,0x25,0x42,0xb7,0x2c,0x0e,0x9b,0xfc,0xfb,0x35,0x6f,0x74,0x10,0xce,0x25,0xdb,0xa9,0x7c,0x11,0x61,0x43,0xf9,0x19,0xbf,0xe2,0x21,0xa3,0x57,0x3c,0x41,0x0a,0x15,0x4e,0x7f,0x6b,0x38,0xb6,0x73,0x41,0xa2,0x4e,0x8e,0xb9,0x44 +.byte 0xee,0x2a,0x2e,0x0a,0x9e,0x85,0xf1,0x6e,0x93,0x72,0x42,0x50,0x55,0xe1,0xc6,0x18,0x11,0x92,0xf7,0xbf,0x05,0xd8,0xb6,0xbc,0x2b,0xd5,0xe0,0xd3,0x9b,0x64,0xc4,0xdd,0xb0,0xb3,0x46,0xd8,0xfb,0x73,0xea,0xed,0x06,0x96,0x16,0x9e,0xf6,0xc6,0xe8,0xbe,0xae,0x00,0x2f,0x5a,0xf4,0x1f,0xb5,0x28,0x7c,0x75,0x76,0x68,0x74,0xa2,0x57,0x0e +.byte 0x6c,0xfa,0x2d,0xbe,0x34,0xf1,0xc9,0x2b,0x83,0x58,0xe7,0x2a,0x87,0xdb,0x47,0xae,0xc7,0xc2,0x78,0x50,0xed,0x20,0xdf,0x30,0x38,0xdd,0x84,0xa9,0x6b,0x00,0xb1,0x7b,0xbb,0x69,0xd3,0xbe,0xed,0x3d,0x99,0x6e,0x39,0x42,0x75,0x8a,0x6c,0x7c,0xa5,0xcf,0xc9,0xcf,0x11,0x14,0xb3,0xaf,0x72,0x00,0x3b,0x58,0xdd,0x2a,0xe1,0x44,0xa7,0x51 +.byte 0x15,0x05,0x1b,0x18,0x49,0x07,0x90,0x4c,0xbc,0x99,0x88,0x64,0xf6,0x14,0x0b,0x99,0xc0,0x84,0xc9,0x06,0x32,0xf0,0xec,0x19,0x8d,0x4a,0xb8,0xdb,0x32,0xb4,0x5e,0xc9,0x0c,0x24,0xf0,0xad,0xdc,0xf4,0x32,0x3b,0xf6,0x68,0x28,0x4a,0xa5,0x5b,0xb7,0xd5,0x00,0x35,0xf8,0x56,0x03,0xa3,0x86,0xa0,0x8a,0x1b,0x53,0xb5,0x58,0x73,0x8c,0xf9 +.byte 0x2b,0xd8,0xcb,0x88,0xe7,0x7e,0x79,0x68,0x13,0x5d,0x7d,0x23,0xc4,0xec,0x9c,0xf4,0x95,0x97,0xbf,0xb2,0xd9,0xdf,0x38,0xe8,0xa2,0x79,0xf7,0xe8,0x36,0x80,0x59,0x3f,0x58,0x2f,0xf7,0xf9,0x32,0x73,0xdd,0xd6,0x9e,0x20,0x1a,0x29,0xab,0xc1,0x77,0x14,0x71,0x3c,0xde,0x90,0xe9,0xea,0xdb,0x78,0x14,0xa3,0x89,0x43,0xf1,0x42,0x43,0x3f +.byte 0xe7,0x67,0x32,0x3d,0x65,0xdc,0xa4,0x79,0x8f,0x81,0xa5,0xb0,0x94,0x0f,0x96,0xf5,0x82,0xcc,0x47,0xc1,0x29,0x39,0x70,0x7a,0xf3,0x49,0xf5,0x09,0x43,0x50,0x56,0xd6,0xea,0xc4,0x35,0xa5,0xa2,0x8a,0xbe,0xc0,0xe3,0xfe,0x4c,0xa2,0x83,0x09,0xab,0x72,0x8a,0x96,0x7c,0x01,0x70,0xb2,0xd5,0x62,0xb7,0x67,0x59,0x36,0xcf,0x56,0x2d,0x14 +.byte 0xc2,0x69,0x49,0x52,0x4e,0x7c,0x45,0x4b,0xef,0xcd,0x79,0xcd,0xe6,0xa6,0xd0,0xbe,0x10,0x1e,0x18,0xca,0xe7,0x8d,0x65,0xb1,0x17,0xc7,0x2c,0xc8,0x2a,0x5b,0xe8,0x08,0x11,0x15,0xea,0xa9,0x43,0x7b,0x70,0x04,0x0c,0xc8,0xca,0x67,0x18,0x18,0x12,0x16,0xc2,0xd3,0xf2,0x0a,0xc7,0x01,0xa9,0x97,0x61,0xf6,0xa7,0x44,0x9a,0xb3,0x67,0xdc +.byte 0x07,0x63,0x02,0x02,0x2e,0x58,0x80,0xa9,0x95,0xa0,0x8e,0x86,0xb6,0xf6,0x14,0x13,0x0a,0xea,0xf1,0x6d,0xd9,0x98,0x37,0x12,0xdb,0x67,0x1b,0x13,0x8e,0xd1,0xfa,0x2f,0x98,0x53,0x3c,0xd7,0x56,0x55,0x42,0x2f,0x64,0x59,0xd5,0xb7,0x6e,0xa8,0x6c,0xc2,0x40,0x11,0xb5,0xa1,0xc0,0x5c,0x45,0x87,0x91,0xb1,0x1c,0x4e,0xa9,0xf6,0x72,0x57 +.byte 0x50,0x8e,0xc5,0xfc,0x64,0x59,0x52,0x82,0xb0,0x75,0xc3,0x98,0xff,0x32,0xce,0xa4,0x39,0xb8,0xa4,0x61,0xb4,0x53,0x3f,0xc7,0x80,0x35,0x48,0xaf,0xa8,0x67,0xfe,0xa1,0x1d,0x3c,0x95,0xb5,0x63,0x1c,0x3a,0x2c,0x68,0xfa,0x98,0x8b,0xa7,0x19,0x29,0x79,0xe4,0x9b,0xff,0x8f,0x15,0x9c,0x65,0x60,0xd2,0xa9,0x4f,0xd5,0xb2,0x57,0xff,0x32 +.byte 0x4c,0x96,0x82,0x6b,0x09,0x6c,0x74,0x55,0x00,0x5c,0x68,0x68,0xd5,0x9b,0xd4,0xdf,0x3d,0x2d,0xb9,0x0b,0xf5,0x2c,0x87,0x35,0x2a,0xc0,0xc0,0xc9,0xd7,0xa1,0x76,0x30,0x82,0x46,0xd8,0x24,0x6e,0x27,0x02,0x71,0x57,0x5c,0x43,0xf2,0x54,0xd6,0xea,0xd7,0x67,0x7d,0xac,0x76,0x91,0xf1,0x26,0x6e,0xaf,0x87,0x05,0x06,0x48,0x57,0xbd,0x67 +.byte 0x1d,0xd7,0x07,0xcd,0x41,0x02,0x49,0x6c,0x8c,0xe1,0xe3,0x00,0x78,0xbe,0x28,0x84,0x16,0x44,0xb1,0x0d,0x6d,0x40,0xfe,0xab,0x7e,0xf6,0x6b,0xff,0xfa,0xe1,0xc7,0x9d,0x56,0x62,0xf1,0x68,0xba,0x76,0x34,0x8f,0x54,0x20,0x49,0xf5,0xa2,0x54,0x52,0xca,0x42,0xed,0x4f,0x9b,0xdf,0xcf,0xfb,0xf6,0xee,0x12,0x29,0x43,0x8f,0xf9,0xfd,0xf4 +.byte 0x8a,0xbf,0xae,0x50,0xf2,0x8f,0x46,0xa2,0x97,0x3b,0x2d,0xfb,0x84,0x98,0x61,0xae,0xba,0x36,0x25,0x30,0x8b,0xdc,0xd3,0x08,0x8e,0x7e,0xfa,0x91,0xac,0x4b,0x29,0x6d,0x0c,0x81,0x0f,0xc7,0xc8,0xc4,0x5c,0x48,0x68,0xa7,0x83,0xf3,0x6a,0xc8,0x0d,0x3a,0x9b,0x46,0xb9,0xe1,0x31,0xac,0x3c,0x12,0xa2,0xae,0x74,0xb8,0x91,0xed,0x63,0xba +.byte 0x40,0xb8,0x57,0x58,0x1f,0x1d,0x1a,0x2d,0x98,0x60,0xe8,0xe1,0x84,0x16,0xe5,0xf0,0x1e,0x35,0x58,0x31,0xc3,0x0c,0x49,0x6e,0x13,0x2c,0xac,0x14,0xc2,0xde,0x5f,0x62,0xe5,0x37,0x5b,0x1d,0x71,0x8b,0xc3,0x3d,0xd8,0xaf,0x3d,0x0a,0xef,0x80,0x3c,0x9a,0x4b,0x0a,0x3f,0x0e,0x8f,0x90,0x8f,0x73,0x2e,0xff,0x8e,0x8e,0x87,0xf8,0x46,0x52 +.byte 0xed,0x7d,0x76,0xf3,0xff,0xaf,0x5e,0x62,0x87,0x16,0x9c,0xa6,0x12,0x39,0x13,0xc3,0x62,0x4b,0xd2,0x21,0xa2,0x43,0xfa,0x4c,0x5d,0x75,0x61,0x64,0x5b,0x23,0xcd,0x76,0x86,0x81,0xd6,0xa6,0x25,0xe1,0xc1,0xc6,0x04,0x5e,0x65,0xfe,0x89,0x0e,0x67,0x02,0xeb,0xb9,0x26,0x88,0x81,0x97,0x1e,0x62,0x4e,0xf4,0x4e,0x0d,0xef,0xac,0xcf,0xd7 +.byte 0xc5,0x9b,0x9d,0x3a,0xa2,0x71,0xd7,0xd4,0x72,0xa6,0x66,0x90,0xe2,0xf7,0xb7,0xec,0xe4,0xca,0x9f,0xd1,0xd8,0x5a,0x65,0xff,0x39,0x65,0x78,0x47,0x1c,0x64,0xab,0x1a,0x35,0x2e,0xe2,0xf7,0x67,0xa4,0x7f,0xd5,0xea,0x04,0xee,0x4d,0xf6,0x29,0xe4,0xcd,0x1b,0xcf,0x0a,0xef,0xa1,0x14,0x90,0x0e,0xed,0x1a,0x10,0x63,0xa0,0x56,0x11,0x05 +.byte 0x57,0x94,0x3a,0x11,0xff,0xe0,0xc7,0x33,0x19,0x67,0xd7,0xd0,0xcc,0x76,0x52,0x5d,0x9e,0x10,0xe7,0xd6,0xaa,0x13,0xe8,0x8d,0xa5,0x60,0x66,0x98,0x26,0x11,0x66,0x0f,0x2d,0x4d,0xec,0x28,0x93,0x17,0x3a,0x6f,0x99,0x70,0x00,0x2b,0x66,0xb3,0x49,0x69,0x3c,0x3b,0x03,0xb8,0xc0,0x9b,0x1c,0x96,0xd9,0xd1,0xe1,0x6d,0x8f,0x45,0xce,0x22 +.byte 0xcf,0x48,0x61,0x85,0x10,0x1b,0x3f,0x2b,0x74,0x48,0x61,0x68,0x63,0xe3,0xa3,0x83,0xe2,0xcc,0xa0,0x6d,0x82,0x8b,0xe5,0x42,0xab,0xa7,0x62,0x6c,0x05,0xb4,0x7b,0x65,0xf5,0xd8,0x0b,0x7d,0x61,0xd6,0x5c,0xf0,0xc0,0x03,0x0c,0x51,0xec,0x06,0xad,0x79,0x8c,0x62,0x0c,0xf5,0x8e,0xcb,0x97,0x62,0xf9,0x3e,0x39,0x8d,0x3c,0x2e,0xd1,0xc0 +.byte 0x5f,0x98,0xea,0xb5,0x26,0x19,0xf5,0x93,0xbb,0xf8,0xd4,0xd5,0x35,0xee,0x1f,0xf8,0x71,0x81,0x0e,0xe6,0xe9,0xf3,0x2c,0x80,0xa8,0x15,0x35,0x1e,0xda,0x07,0x41,0x39,0x8a,0x19,0x1f,0x70,0x99,0xbe,0x3d,0x5c,0x1f,0xf6,0x72,0x85,0x73,0xea,0xb5,0x61,0xbb,0x77,0xaa,0xef,0xc7,0x2c,0xed,0x1e,0xa6,0xfd,0xc9,0xde,0xa9,0x82,0xba,0x19 +.byte 0x04,0x17,0xf7,0xa1,0x59,0x5c,0x7d,0x8d,0xe7,0x1c,0x89,0x7f,0xe1,0x02,0xd3,0xb0,0x46,0x6c,0xcf,0xde,0xf0,0x0b,0x00,0x43,0x8d,0xd6,0xe6,0xf7,0xc8,0x83,0x20,0x77,0x8b,0x9f,0x14,0xea,0x2b,0xb2,0xd2,0x41,0xfd,0x96,0x7c,0x0d,0x05,0xb9,0x5a,0xa0,0x83,0x50,0xde,0x0e,0xc6,0xa6,0x29,0x55,0x12,0x8e,0x2f,0x0a,0x5c,0xcd,0xae,0x92 +.byte 0x76,0x84,0xc9,0x8a,0x81,0xe5,0x3e,0xf0,0xe6,0x5b,0xe4,0x21,0xfb,0x4c,0xb6,0x0a,0x7b,0x7f,0x7e,0xab,0xdc,0x15,0x44,0xf8,0xeb,0x23,0x21,0x31,0xef,0x98,0xec,0x84,0x69,0x34,0x29,0x99,0x03,0x8a,0x12,0x8e,0x28,0xdd,0x00,0x6a,0xa3,0xe7,0x08,0x17,0x35,0x2a,0x42,0x8a,0xcb,0x4a,0x7b,0x1c,0xd2,0x74,0x4f,0x6a,0x8c,0x85,0x1c,0xd6 +.byte 0x05,0x3a,0xfd,0xdf,0x1c,0xa5,0x59,0xbb,0xdb,0xe3,0xa7,0x59,0xb1,0x67,0x3d,0xa4,0x71,0x4d,0x6c,0x99,0xe0,0xa7,0x8c,0xfa,0x96,0x1f,0x8d,0x0c,0xa7,0xc8,0xce,0xa3,0xbf,0x4d,0xc7,0xa9,0xb7,0xfd,0x04,0x58,0xcd,0xd7,0x20,0xb1,0xb9,0xf5,0x06,0x70,0x1b,0xdd,0xf4,0x1c,0xdc,0x32,0xa0,0x90,0x0d,0xb2,0x91,0x14,0x05,0xa2,0xf7,0xb7 +.byte 0xb6,0xd2,0xf1,0x30,0x75,0xcc,0x78,0x0d,0x56,0x70,0x64,0x02,0xe7,0x83,0x97,0x65,0x63,0x4b,0x64,0xff,0x8b,0x62,0xc9,0xa4,0x6e,0x96,0xbf,0xd3,0xeb,0x74,0xc5,0x1f,0xdb,0x1c,0xf3,0xca,0x54,0x7d,0x8d,0xd9,0xec,0x18,0xd8,0x99,0xd1,0xa5,0x70,0x8a,0xc5,0xdc,0xa0,0xcb,0xb7,0x52,0xe3,0xe6,0x88,0x0c,0x5a,0x42,0xde,0xe6,0xd8,0xc4 +.byte 0x39,0xe5,0x6c,0x0b,0xd4,0xa5,0x9b,0x51,0xa2,0x3d,0xc5,0xc7,0x17,0x17,0xb8,0xd8,0x09,0xad,0xeb,0x67,0x47,0xe0,0x88,0xef,0x1d,0x22,0x18,0x25,0xdc,0x32,0xb2,0xf7,0x47,0xc5,0xb3,0x0b,0x57,0x01,0x67,0xac,0xc3,0x9e,0xb0,0xa8,0xd7,0xce,0xb2,0xcd,0xea,0x3b,0x61,0xbb,0x24,0xad,0x91,0x7b,0xa2,0x9a,0xb3,0x63,0x56,0xe2,0x9d,0x69 +.byte 0x9e,0xd7,0x5f,0x5f,0x47,0x9f,0xae,0xf6,0x09,0xb1,0x9e,0x22,0x35,0xaa,0x55,0x0b,0xfc,0x70,0x96,0xfd,0x53,0x8a,0x37,0xaf,0x2d,0xa2,0xc5,0x49,0x5b,0x1e,0x32,0x47,0x9d,0xc3,0xb4,0x46,0xf3,0x54,0xdb,0x3f,0xb9,0x69,0x9e,0x8b,0xad,0x11,0xb2,0x68,0xe8,0x27,0x0d,0xca,0x33,0x1c,0x86,0xb2,0x2c,0xaa,0xc2,0x15,0xf9,0x6e,0xed,0x30 +.byte 0x71,0x08,0xeb,0x93,0x1d,0x16,0xc5,0x34,0x73,0x65,0x7a,0x19,0x2b,0xa7,0x3d,0xe6,0x88,0xb5,0x0f,0xa0,0x92,0x91,0x22,0x9d,0x01,0xf3,0xf4,0x57,0x9f,0xd9,0x23,0x1b,0xbd,0xd7,0xd5,0x11,0xc9,0x24,0xf6,0x36,0x30,0x30,0x69,0x95,0x17,0x48,0xf9,0x76,0x71,0xef,0xef,0xc0,0x00,0x9c,0x7d,0x87,0xdc,0xdc,0x1a,0x32,0x82,0x7a,0x13,0xc2 +.byte 0x9f,0x53,0xc2,0x7d,0x4d,0xbf,0xbe,0xf5,0x9d,0xc8,0x81,0x5b,0x81,0xe9,0x38,0xb6,0xa5,0x40,0xa5,0xd4,0x6f,0x0c,0xea,0xf1,0x52,0x59,0x37,0x3b,0xc2,0xb2,0x5f,0x10,0xdf,0x22,0xf7,0x77,0xe8,0x66,0xb0,0x97,0x91,0x5f,0xc2,0x18,0x8d,0x17,0x40,0xd1,0x6d,0xde,0x6e,0xf0,0x6c,0x1f,0x4e,0x9b,0x15,0x83,0x9b,0x70,0x21,0x2b,0x98,0x46 +.byte 0xbf,0xa5,0x82,0xac,0x63,0xac,0xd7,0x52,0xec,0x2c,0xf2,0xe4,0xe0,0x2a,0xbf,0x7e,0xa2,0xd2,0x9d,0x0d,0xf2,0x9b,0x79,0x5f,0x22,0xb0,0x6d,0x22,0x2e,0xed,0xe2,0x4f,0x73,0xc5,0x89,0xcc,0x4a,0xaa,0x9a,0x7e,0xab,0x95,0x25,0xa7,0x9d,0xf4,0xc2,0xe8,0x42,0x6e,0xd3,0xf9,0x25,0x54,0xb9,0x1f,0xa9,0x16,0x9c,0x22,0x7a,0xf0,0xa6,0xac +.byte 0x8b,0x9d,0xe6,0xe3,0x93,0x4e,0x65,0x3a,0x39,0x3e,0xf5,0x41,0x38,0x02,0xb7,0x37,0xd4,0xdc,0xea,0xc5,0x53,0x0e,0x52,0x85,0x96,0xc0,0xa7,0x21,0xbf,0xe7,0xca,0x12,0x1c,0x59,0x33,0xe4,0xd5,0x70,0x6b,0x25,0x54,0x24,0x58,0x48,0x1b,0x65,0x6e,0x7e,0xe6,0x84,0x39,0x38,0xbc,0xdf,0x96,0xbc,0x39,0xdf,0x8f,0x36,0x9e,0x3a,0xda,0x02 +.byte 0x86,0xe2,0x9f,0xb7,0x3a,0xd0,0xdb,0xc2,0x5d,0xb0,0xde,0x31,0x73,0x43,0xe5,0x4b,0x6a,0xa1,0x6d,0xaa,0xca,0x34,0xfa,0xa9,0xaf,0xec,0x05,0x2a,0xdb,0x82,0xa1,0xdc,0xdc,0x3d,0xb5,0x92,0x42,0x28,0xdc,0x93,0xec,0xab,0x9b,0x75,0xae,0x7c,0xbf,0x9b,0x25,0x01,0xb1,0xc8,0x3b,0x47,0xb6,0xfd,0x11,0x6f,0x4b,0xaa,0x6f,0xdf,0x1f,0x15 +.byte 0xc2,0xf3,0x87,0x4a,0xaf,0xf7,0x41,0x64,0x5a,0x19,0xa0,0xc4,0x4f,0x58,0xe8,0x19,0xe0,0x84,0x44,0xc7,0x65,0x0c,0xf1,0xff,0xcb,0x73,0xb2,0xac,0x25,0x28,0xe1,0xd4,0x03,0x16,0x3c,0x1c,0x24,0x3a,0xfc,0x2b,0x7e,0xcb,0xa3,0xba,0xb7,0x78,0x87,0xbe,0x95,0x06,0x27,0xb8,0x16,0x72,0xe4,0x24,0xa6,0x5d,0xe7,0x5e,0x93,0xa9,0x96,0xfd +.byte 0x01,0x1d,0xb8,0x7c,0x85,0x3c,0xe3,0xc9,0x56,0x68,0xcd,0xd9,0x79,0x97,0x50,0x39,0xfe,0x96,0x93,0x50,0xae,0xde,0xcd,0x8d,0xa0,0x38,0x31,0xba,0xca,0x21,0xff,0x19,0xea,0x44,0x95,0x4d,0xba,0xae,0xe2,0x62,0xd2,0x82,0x60,0x0c,0xb9,0x10,0x40,0x9a,0xaf,0x9b,0x17,0xcd,0xf3,0x26,0xec,0x38,0x13,0x18,0xd3,0xf2,0xd2,0x11,0xa6,0xc3 +.byte 0x3c,0x3b,0xe8,0xa0,0x49,0xba,0x4e,0x07,0xec,0x44,0x75,0x1c,0xc9,0x2f,0x68,0x64,0x02,0x1d,0x14,0x35,0x80,0xd8,0xa8,0x53,0xde,0x44,0x65,0x72,0x37,0x28,0x61,0x5f,0xa1,0x58,0xea,0x17,0xb3,0x89,0x25,0xf7,0xcb,0x87,0xe6,0x43,0xc5,0xc3,0xf3,0xd1,0xf5,0x1f,0x18,0xe9,0xd1,0x05,0xd9,0x85,0x38,0xf0,0x5e,0x26,0x35,0xf2,0x72,0x92 +.byte 0x34,0x2f,0xea,0xdd,0x7b,0x64,0xac,0x1d,0x78,0x41,0x56,0x83,0x7d,0x83,0x83,0x59,0xbe,0x9f,0x81,0x90,0x00,0x1f,0x04,0xd8,0xd8,0x8e,0xd9,0xeb,0x12,0x16,0x96,0x81,0x61,0x96,0xe8,0x7b,0x36,0x7b,0x26,0x9b,0x43,0x1e,0x0e,0xc2,0x59,0xdf,0x8f,0xb4,0x91,0x74,0x2e,0x1e,0x6d,0x20,0x70,0xe7,0x3c,0x39,0xe3,0xa8,0x62,0x66,0x32,0x63 +.byte 0x7d,0x89,0xb6,0xad,0x69,0x38,0x2c,0x21,0xe5,0x02,0xcc,0x93,0x8a,0x65,0x71,0x65,0x02,0x5c,0xeb,0xc9,0x70,0xf3,0x81,0xce,0x65,0x37,0x22,0xb7,0x47,0x3c,0xd6,0x3d,0x29,0x65,0x29,0xba,0xf9,0xae,0xd9,0x1f,0xd7,0x38,0x88,0x95,0xa9,0x66,0xa8,0x77,0x75,0x4a,0xf9,0x2e,0xd9,0x63,0x75,0x80,0x90,0x82,0x39,0x8b,0x21,0x58,0xf4,0x2e +.byte 0x2d,0x1f,0x7f,0xcb,0x33,0xdb,0x9b,0x9b,0x31,0x21,0x4e,0x6e,0xdb,0x0f,0x1f,0x69,0x22,0x97,0x69,0xd7,0x7f,0x2e,0xd7,0xce,0x6c,0xe4,0xc0,0xe7,0x27,0x82,0xe6,0x8a,0xf8,0xae,0x46,0x2d,0x5a,0x45,0x82,0xce,0xb6,0x49,0x84,0x15,0x4a,0x54,0xa6,0x76,0xf3,0x29,0x28,0xc0,0x05,0x82,0xae,0x7d,0x85,0x41,0xb0,0x87,0x67,0x44,0x37,0x46 +.byte 0x3e,0x47,0xbc,0x00,0x7c,0x05,0xd3,0xdc,0x9a,0x31,0x49,0xf8,0x48,0x99,0x57,0x4a,0x2b,0xe7,0xcf,0xb2,0xa7,0xf0,0xcf,0xc7,0xf5,0xfd,0x73,0x59,0xf1,0xe4,0x86,0xb5,0x5d,0xce,0x6d,0xbf,0xc6,0xe5,0xa9,0xca,0x75,0xe9,0x69,0xe6,0x09,0xab,0x66,0x17,0x09,0xe9,0xbc,0x14,0xd8,0x6f,0xe9,0xc2,0x87,0x39,0x2f,0x87,0x1e,0xb8,0x16,0x08 +.byte 0x10,0xee,0x1c,0x2f,0x47,0x7d,0xa3,0x5b,0x1f,0x1f,0x5d,0x95,0xd0,0xa4,0xbb,0x08,0xc2,0x47,0xab,0x46,0x3c,0xbb,0xbe,0x3a,0x64,0x82,0x40,0x08,0x75,0x03,0x02,0x6e,0x6a,0xab,0x6b,0xd4,0x90,0xa7,0x28,0x7a,0xb4,0x8b,0x1f,0x6b,0xcc,0x16,0x30,0x16,0xf5,0xc6,0xd8,0x4a,0xed,0xc9,0xc7,0xac,0x0f,0x75,0x1b,0x13,0xe3,0x45,0x6d,0x22 +.byte 0x7e,0x3d,0x59,0x55,0x87,0x8d,0x04,0xee,0x85,0xac,0x98,0x0c,0x52,0x5b,0xe6,0x92,0x04,0x31,0xdf,0x7c,0x44,0x4d,0x06,0xbe,0xb2,0x5a,0x95,0xef,0x29,0x75,0x9b,0xb2,0xe7,0xb8,0x83,0x18,0x82,0x23,0x4e,0x66,0xe5,0xdd,0x47,0xa1,0x6b,0x33,0x4e,0x9c,0x13,0x0e,0x0a,0x8a,0x5c,0xba,0x7b,0x2f,0x6c,0x72,0x78,0x86,0xd2,0xf8,0xbd,0x1b +.byte 0x4b,0x9e,0xe0,0x99,0x46,0x7f,0x24,0x0f,0x1b,0xda,0x85,0x87,0xe9,0xda,0x96,0x25,0xc6,0x81,0x77,0x8b,0x56,0xae,0x7a,0x9c,0x47,0x34,0xe1,0xac,0xf2,0xba,0x52,0x95,0xf8,0x56,0x26,0x66,0xf0,0x53,0xcc,0xc4,0x6f,0x46,0x94,0x10,0x22,0x69,0xb1,0x93,0x7b,0x51,0xb7,0xb8,0xdd,0x42,0x67,0x51,0x6d,0x9c,0xb2,0xbd,0xdb,0xdd,0x19,0xa2 +.byte 0x25,0x13,0xfe,0x42,0xca,0x36,0xeb,0xce,0x15,0x41,0xe7,0x35,0xce,0xa8,0x45,0x56,0x58,0x9f,0x46,0xcf,0x11,0xe7,0xcc,0x40,0x54,0xe4,0x85,0x0d,0x73,0x36,0x7e,0xae,0x38,0x8c,0x56,0xab,0xf0,0x5f,0x5c,0xff,0x14,0x9b,0x46,0x1b,0x35,0xbd,0x03,0x0e,0x2f,0x9e,0xde,0xd8,0x82,0xfe,0xa0,0x09,0xb4,0xb4,0xbd,0x58,0xc0,0xe2,0x01,0xb1 +.byte 0xca,0x5c,0x3d,0xc3,0x18,0x5e,0xc1,0xee,0x61,0x60,0x00,0xca,0x1e,0xf3,0x71,0xd8,0x15,0x37,0xf0,0x2e,0x13,0xa0,0xf7,0xac,0x73,0x4b,0xfb,0x6a,0x27,0x6b,0xde,0x69,0x3d,0x19,0x36,0x4b,0x63,0x55,0xae,0xd1,0x2b,0x66,0x69,0x0d,0x64,0xa7,0x86,0xfd,0x3a,0xb8,0xe6,0x87,0xaa,0x32,0x5f,0xbc,0xa7,0x67,0xde,0x7a,0xe0,0xdd,0xff,0x57 +.byte 0x2c,0xc9,0x25,0x92,0x03,0x91,0xa8,0x0e,0x39,0xe4,0x9a,0xdf,0x21,0x29,0xc7,0xbc,0x93,0x01,0x2a,0x02,0xd8,0xaf,0xbc,0x20,0x57,0xc7,0x37,0x77,0xa7,0xad,0x5e,0x15,0x20,0xcf,0x4a,0x3c,0x22,0x1b,0x92,0xa9,0x05,0x91,0x70,0xb3,0x88,0x4e,0x97,0x58,0xf7,0x33,0x1a,0x05,0x33,0x57,0xdc,0xbb,0x2a,0xba,0xd0,0x22,0xac,0x40,0xbe,0x60 +.byte 0xa2,0x89,0xe6,0x6c,0xf3,0x5d,0xef,0x58,0xb4,0x7c,0x4a,0x28,0xb8,0x16,0xd2,0xe0,0x49,0xf5,0xe8,0xaf,0x84,0x39,0xae,0x1e,0xa2,0x34,0x67,0x42,0x26,0x31,0x93,0x87,0x7a,0xd5,0xde,0x79,0xdb,0x4c,0x7e,0xcf,0x1f,0xef,0x9a,0x4c,0xb9,0x70,0xe2,0x72,0x9b,0xcd,0x30,0xe5,0xf1,0x84,0x44,0x5a,0xff,0x36,0xa2,0x37,0xe7,0x49,0x78,0x63 +.byte 0xbe,0xe0,0x90,0xdf,0xef,0x9e,0xf3,0x55,0x9e,0x8a,0x51,0xe8,0xa3,0x32,0x2d,0xed,0xc8,0x99,0xf6,0x92,0xf9,0x62,0x74,0xa7,0x8d,0xcf,0xa5,0x09,0xb3,0x43,0xb9,0x18,0x70,0x59,0x4f,0xd2,0x7f,0x7e,0xce,0x1e,0x7d,0xe8,0xa9,0xb7,0x29,0x0f,0x86,0x8a,0xac,0x22,0x41,0x98,0xb2,0xc3,0x48,0x3b,0x60,0xcb,0x7b,0x1d,0xc3,0x5e,0x19,0x5b +.byte 0x31,0x57,0x12,0x09,0x41,0x54,0xf8,0x01,0x70,0x02,0x03,0x8a,0x6e,0x8e,0x5b,0x23,0xf3,0xd4,0x13,0xbf,0x51,0xba,0xf9,0x2d,0x6c,0xb9,0xb3,0x90,0xd0,0xa3,0x76,0xfb,0xef,0x85,0x17,0x8b,0x2c,0x05,0xa3,0x06,0x0a,0xaa,0xdd,0xbf,0xd4,0xcc,0xe4,0x96,0x19,0x7f,0x51,0xf6,0x7e,0xa1,0x2c,0x14,0x1c,0x21,0x99,0x28,0x3a,0x0e,0x36,0x1b +.byte 0xf1,0xd7,0x3e,0x29,0x94,0xa6,0x03,0xf7,0xe5,0x6f,0x1b,0x56,0xc8,0xfb,0x2d,0x4f,0x12,0x2b,0xc7,0x3a,0xec,0x5e,0xc8,0x88,0x1b,0xd8,0x65,0x21,0x04,0x0e,0xe2,0x95,0x6d,0x62,0xea,0xeb,0xee,0xbe,0x47,0x0a,0x90,0x26,0xe3,0x85,0xd7,0x1d,0xb5,0xd5,0x56,0x8b,0xc0,0x2f,0x7f,0x01,0xc8,0xac,0x90,0xc3,0x2d,0x10,0xf2,0x11,0x30,0x0c +.byte 0xa9,0x4d,0x13,0xde,0x65,0x6d,0x34,0x68,0x5d,0xad,0x3f,0x7a,0x56,0x3a,0x1f,0xb9,0xd6,0x7b,0x8f,0xe8,0x42,0x2a,0x16,0xb6,0x3f,0xf2,0x4f,0x14,0x8e,0x8e,0x29,0x88,0x68,0x1b,0x10,0x80,0x80,0x47,0x36,0xaa,0x82,0xf5,0xa8,0x97,0xc4,0xcb,0xc2,0xef,0xaa,0x9f,0xdc,0x96,0x4f,0x1f,0xaf,0x39,0x71,0x55,0x8f,0x3c,0xbf,0x26,0x91,0x46 +.byte 0x38,0x59,0xa7,0xd1,0xb5,0x87,0xd6,0x81,0x71,0x17,0x83,0x05,0x40,0x9c,0xf3,0x33,0x4b,0x09,0x06,0xb1,0x69,0xfb,0x43,0x1f,0xef,0x9a,0xfe,0xc3,0x4e,0x4e,0x25,0xe1,0x3a,0xfb,0xf9,0xc9,0x97,0xe2,0x1c,0xa1,0x9a,0x06,0x6e,0xbb,0x16,0x4a,0x9f,0xf4,0x87,0x31,0x38,0x78,0xae,0x77,0x4c,0x42,0x28,0xc4,0x63,0xc0,0x49,0x37,0x4f,0xf9 +.byte 0xeb,0x31,0x0d,0x3e,0x0c,0x8a,0xb7,0x17,0xa7,0x90,0x26,0xc2,0xea,0xa5,0x9d,0xe4,0x4d,0xc6,0x3a,0x33,0x2d,0x47,0x42,0x8c,0xeb,0x50,0xea,0xfe,0x74,0x43,0x06,0xcd,0xa5,0xb1,0x49,0xf0,0x98,0x91,0x25,0xf4,0x8d,0x06,0xd1,0xeb,0x56,0x2c,0xf9,0xc4,0x84,0x02,0x9e,0xf2,0x3a,0xfe,0xb4,0x39,0xce,0xee,0x85,0xb6,0x64,0x6c,0xbc,0x1f +.byte 0xe6,0x86,0x00,0xc3,0xa9,0xb4,0x53,0xdf,0x2d,0x7c,0xc6,0xde,0x2e,0x79,0x25,0x5c,0xbb,0xe5,0xbe,0x33,0xe9,0x58,0x49,0x35,0xbe,0xae,0xbc,0x06,0xdc,0x48,0x9d,0xc3,0x08,0x6f,0xe8,0xb8,0x48,0x67,0xea,0x1c,0x05,0xb4,0xf7,0xe3,0xcc,0xc1,0xb3,0xa8,0x61,0xcb,0xa8,0xf6,0x12,0x52,0x68,0x06,0x36,0x2b,0x15,0x43,0xc9,0x98,0xfe,0xe5 +.byte 0x43,0x11,0x0d,0xc3,0x37,0x38,0x7a,0xcb,0x98,0x14,0xc1,0xaf,0x29,0x36,0x35,0x63,0x74,0x98,0xcf,0x0f,0x44,0xe4,0x6e,0xf7,0x3f,0x6e,0x15,0xe8,0xe9,0x93,0x7b,0x96,0x1b,0x84,0xe7,0x8b,0x83,0x30,0xa1,0xdc,0xc3,0xb8,0x18,0x2f,0xc5,0x34,0xd1,0xa5,0xb9,0xee,0x4a,0x04,0xbf,0x26,0x63,0x29,0xba,0x90,0xb5,0x7c,0x83,0x2b,0x1f,0xe8 +.byte 0x5c,0x9f,0x23,0x40,0x7f,0x9c,0x2f,0x76,0x96,0xd6,0xd5,0x13,0xda,0x5c,0x81,0xa4,0x60,0x60,0xbd,0x5e,0xb3,0xd2,0x2c,0xaa,0x48,0x04,0x74,0x31,0x5d,0xbd,0x46,0xd8,0x8d,0x3f,0x62,0x2d,0x1e,0x17,0x97,0x08,0x71,0x06,0x1b,0x96,0x1b,0xd5,0x80,0xa6,0x41,0x06,0x10,0x6e,0x36,0xd4,0xfb,0x36,0x6d,0x96,0xb8,0x86,0x22,0x34,0xda,0x7e +.byte 0x6c,0x5f,0x3b,0x95,0x35,0x1b,0x42,0x3c,0xf2,0x9d,0xe3,0xe9,0x3f,0x44,0xd5,0x4c,0x60,0x55,0xae,0xbe,0x4f,0xf2,0xb3,0x84,0xa1,0x79,0xdf,0x86,0xf0,0x8f,0xad,0xa5,0xa3,0x4a,0xea,0x5d,0x68,0x34,0x17,0x4c,0xb7,0xd8,0x6f,0x67,0x22,0x85,0xe2,0x16,0xcf,0xba,0xee,0x92,0xeb,0x95,0x8e,0x67,0xb1,0xf0,0xbb,0xb0,0x34,0x2f,0x58,0x49 +.byte 0x56,0x3e,0x81,0x31,0xb6,0xc3,0x2c,0xee,0x2b,0x85,0x72,0xbc,0xe9,0x20,0xaa,0x4e,0x34,0xb9,0x8b,0x32,0x2f,0x9e,0xd7,0x98,0x63,0x9d,0xfd,0x3a,0xe9,0x30,0x49,0x23,0x4a,0xb4,0xcb,0xc5,0xe5,0x78,0xcd,0x22,0x90,0xce,0x9f,0x35,0x13,0xda,0x8f,0x14,0xdb,0x36,0x0f,0x66,0x87,0x62,0x50,0xde,0x52,0x15,0x10,0x67,0x8a,0x5c,0xdb,0x76 +.byte 0x51,0x7f,0x72,0x9b,0x8e,0x91,0x39,0xc8,0x3c,0x34,0x0f,0x3d,0x92,0x07,0xb8,0xef,0x2a,0x8b,0x59,0xbd,0x82,0xc1,0x5c,0x95,0x93,0x0d,0x3d,0x9b,0x51,0x53,0x38,0x6b,0xd0,0xe3,0x5b,0xbb,0xe5,0x6c,0xc0,0xb5,0x71,0xa8,0xd8,0x7d,0x5d,0xbd,0xfc,0x69,0xcf,0xcc,0xa1,0xcd,0x83,0x9d,0x8f,0x46,0x47,0xe7,0x36,0x19,0x9f,0x4d,0xda,0x9c +.byte 0xcb,0x2a,0x47,0x58,0x93,0xbb,0x64,0xa3,0x89,0x53,0xbf,0xc7,0xc2,0xe2,0x65,0x0f,0x4f,0x17,0xc6,0x4c,0x15,0xfe,0x4b,0x95,0xb2,0x79,0x4a,0xb8,0xf6,0xae,0xcc,0xba,0xc3,0x5d,0x18,0xb2,0x8e,0xd8,0x6b,0x43,0x1b,0x2f,0xe1,0x36,0xb2,0xa5,0x22,0xa0,0xc7,0xc0,0x26,0x8e,0x48,0x77,0x0c,0x14,0xdd,0xdc,0xde,0x71,0x98,0xce,0xdd,0x61 +.byte 0x85,0xd9,0x23,0x42,0x7f,0x85,0xc8,0x06,0x81,0x3e,0xa2,0x0f,0x1e,0x3e,0xcf,0x33,0xef,0x43,0x6a,0xc7,0xee,0x3f,0x91,0x68,0x32,0x89,0xd9,0xed,0xdf,0x45,0x33,0x10,0xbb,0xd5,0xef,0x1d,0x3c,0x1e,0x26,0x21,0x4d,0x1a,0x06,0x98,0x60,0x71,0x7f,0xce,0x45,0x4e,0xe3,0x3f,0xfa,0xff,0xcd,0xe2,0x92,0x82,0x2e,0x83,0x69,0x9c,0xc6,0x5c +.byte 0x6e,0xb6,0xec,0x28,0xdc,0x7b,0xdb,0xf3,0x02,0x3a,0xf7,0xad,0x9b,0x7a,0x73,0xb2,0x07,0x70,0x76,0x9d,0xa2,0x11,0xcf,0x89,0xea,0xaf,0x6a,0xd2,0x15,0xeb,0x5a,0x99,0x1a,0x17,0x1d,0xce,0xc0,0x7f,0x50,0x26,0x84,0x07,0xd7,0x7e,0x33,0x27,0x74,0x84,0x18,0x32,0x86,0x32,0x34,0x28,0xe8,0x45,0x21,0xb7,0x26,0x3b,0x11,0xbb,0x9a,0x8b +.byte 0x46,0x8e,0x27,0xf8,0x62,0xb5,0x98,0x6e,0x03,0xee,0x9e,0xcb,0xbc,0x74,0xbe,0x63,0x7a,0x86,0xe5,0x75,0xeb,0x7f,0x14,0xa6,0x96,0x76,0x5a,0x46,0xa9,0xda,0xf1,0x4e,0x0e,0x90,0x59,0x56,0x4a,0x48,0x2d,0x91,0xbe,0x78,0x5b,0xfb,0xf7,0xea,0xab,0x1c,0xc0,0x0c,0x5d,0xba,0xb4,0x7b,0xc7,0x21,0xb1,0xc9,0xa3,0x20,0xe6,0xae,0xee,0x0e +.byte 0xf0,0x3b,0x44,0xd6,0xaa,0x57,0x88,0x1f,0x76,0xc8,0x43,0x07,0x91,0x71,0xa5,0xcc,0x04,0x38,0x01,0x13,0xa6,0xea,0x18,0x48,0x8f,0x09,0x8d,0x37,0x8b,0x6f,0x35,0x36,0x51,0xc6,0x30,0xca,0x9e,0xe2,0xaf,0x0c,0x26,0x14,0xe3,0xbf,0xea,0x0e,0x14,0x88,0x97,0xcc,0xf6,0xc1,0x8f,0xad,0xef,0x2d,0xc1,0x0f,0xad,0x45,0x12,0x7a,0xe6,0x37 +.byte 0x97,0xcb,0x34,0x83,0xd8,0xef,0x34,0x2a,0xce,0xd0,0x21,0x8a,0x7d,0x87,0x7a,0x66,0xf7,0x1c,0xdf,0xa0,0x3f,0xa0,0xf6,0xb3,0x24,0xee,0x6e,0x21,0xe9,0xc3,0x73,0xe4,0xd9,0xc6,0xf6,0xf6,0xac,0x25,0xb7,0xb5,0x64,0x7f,0xcc,0x88,0x3e,0x98,0xe1,0xef,0xa9,0xd2,0x03,0x10,0x4b,0xa3,0xbc,0x3c,0x24,0xfc,0x41,0x36,0x30,0x2d,0xca,0x17 +.byte 0x35,0xd6,0x17,0xa2,0x2b,0x48,0xed,0xd3,0xd7,0x18,0x4f,0x45,0xe9,0x59,0x03,0x35,0xa0,0x80,0x75,0x17,0x48,0xd5,0xea,0x07,0x7a,0x6c,0x3f,0x7a,0x2c,0x02,0x0a,0x7f,0xb5,0x17,0xea,0xf4,0xf6,0xb5,0xf4,0x81,0xba,0x69,0x44,0x81,0x6b,0xff,0xb2,0x43,0xae,0x3d,0x37,0x81,0x91,0x3f,0x6a,0x70,0x35,0x2d,0x06,0x9d,0xa8,0xb5,0xb8,0xc7 +.byte 0x19,0x3a,0x5f,0x59,0x79,0x0b,0x62,0x23,0xa4,0x5b,0x46,0x7b,0x17,0x82,0x19,0x87,0xe8,0xdf,0x09,0xb7,0x50,0x7e,0x40,0xe3,0x71,0x2d,0x09,0xde,0x69,0x2e,0x6c,0x35,0x5c,0x44,0xae,0xb7,0x05,0xb8,0x7e,0xb4,0xe4,0x34,0x05,0x1f,0xd2,0x1f,0xe5,0x79,0x2a,0x15,0xf8,0x8f,0x02,0xc7,0xc8,0x1e,0xe6,0x12,0x83,0x08,0x9c,0x7a,0x2f,0xc6 +.byte 0xc9,0x15,0x0f,0x0f,0x0f,0xa9,0x53,0x16,0x19,0x5b,0x74,0x58,0x6c,0xac,0x21,0x72,0x7f,0xa1,0xae,0xbc,0x34,0x76,0xa6,0x9b,0xbe,0x0f,0x13,0x55,0x50,0x5a,0x8b,0x9e,0xb3,0xf3,0x9e,0x8b,0x61,0xbe,0xb4,0x09,0x71,0x61,0xf0,0xd6,0xaa,0x8c,0x0d,0x0c,0x66,0x31,0x88,0xe3,0x71,0x6a,0xb5,0xaa,0xc0,0x9b,0xce,0x0d,0x79,0x90,0xc1,0x0a +.byte 0xf9,0xfe,0x4d,0x49,0xd0,0x5a,0x63,0xf1,0xfc,0x47,0x71,0x9e,0xbb,0xd1,0x2c,0xef,0xfe,0x90,0x28,0x75,0x82,0xf6,0xa5,0x95,0xea,0x65,0xfa,0xe8,0x04,0xcd,0xb4,0xe1,0x0d,0xb2,0xac,0xd5,0x12,0xf5,0x17,0xbb,0x3b,0x2e,0x52,0x9e,0x7b,0xe7,0x8e,0x86,0x03,0xce,0x77,0x01,0xf0,0x4f,0xb5,0xf7,0xef,0x8b,0x37,0x5e,0x97,0x80,0xbb,0x2b +.byte 0xcf,0x9a,0x63,0x18,0xc5,0x0c,0xfb,0x3c,0x91,0x9c,0x37,0x90,0x76,0x71,0x62,0xbc,0x80,0x40,0x1a,0x74,0xb8,0x1b,0x61,0xb1,0x89,0x4d,0xf7,0x8d,0xd4,0x46,0xef,0x1f,0x3b,0xac,0xe8,0x41,0x62,0x8e,0xea,0x2b,0x56,0x22,0x25,0x37,0x70,0x53,0xcd,0x8f,0x57,0xfa,0xad,0x00,0xc5,0x0c,0x9e,0x57,0xde,0x50,0x07,0x8d,0x80,0xbf,0x22,0x5d +.byte 0x4a,0xbd,0x6a,0xcb,0xfc,0x6f,0xd1,0x56,0x8f,0xd5,0x34,0x8a,0xe6,0xe9,0xa0,0x00,0x06,0x12,0xd8,0xb1,0x49,0x0a,0xbb,0x87,0xe5,0xca,0x75,0x11,0x4c,0x85,0x60,0x77,0xc0,0x90,0x1c,0x14,0x38,0x38,0x3e,0x4f,0xff,0xbf,0xfc,0xa1,0xa1,0xe7,0xb0,0x5d,0xd8,0x1f,0x33,0x07,0x5f,0x04,0x4f,0xc7,0x93,0xc6,0xcc,0xe3,0x01,0xd0,0x43,0xe1 +.byte 0xd9,0x00,0xc5,0x9f,0x79,0xab,0xfc,0xe9,0x55,0x51,0x03,0x0c,0xe1,0x73,0xd6,0x09,0xe3,0xb9,0x76,0x72,0x77,0x4c,0x1b,0x7c,0x57,0x1e,0x7f,0x5f,0x02,0x83,0xa3,0xc6,0xde,0x23,0x85,0x76,0x1a,0xbf,0x48,0xc8,0x02,0xdb,0x31,0x30,0x95,0x85,0x68,0x8a,0xf6,0xe9,0x48,0x7f,0xc9,0x26,0xab,0x68,0x36,0x9f,0x1c,0xf0,0x90,0xbc,0x4a,0x68 +.byte 0x94,0xf8,0x7f,0xae,0xa9,0x3b,0x5b,0x63,0x9a,0xcd,0xe3,0xf0,0xac,0x9f,0x6f,0x78,0xa0,0x67,0x58,0xd8,0x2c,0x71,0x8a,0x14,0x31,0x07,0x95,0x0c,0x38,0xa4,0x53,0x33,0x60,0x23,0x21,0x87,0x6b,0x4f,0xf9,0xa8,0xb8,0xfc,0x8e,0xf1,0x3a,0x03,0x0b,0x03,0x02,0x33,0xbc,0x6a,0xb9,0x8e,0x41,0xc8,0x38,0xd8,0x83,0x30,0x6a,0x61,0x5c,0xcf +.byte 0x49,0xdd,0xd7,0xda,0x2c,0xaf,0xc4,0x68,0xad,0x07,0x9c,0xd4,0xaf,0x94,0x64,0xcf,0xe1,0x9b,0x37,0x50,0x65,0x03,0x20,0x3c,0x34,0x43,0xe9,0xb0,0x9b,0xba,0xb1,0x9a,0x3e,0x10,0x99,0x8f,0x93,0xb7,0x3d,0xac,0xbd,0xab,0xa8,0xfa,0x74,0x90,0xe1,0x38,0xe4,0xf3,0x47,0xfc,0xad,0x8b,0xb4,0x98,0xe4,0x65,0xe9,0xd9,0x8a,0x21,0x81,0x4f +.byte 0x0c,0xd7,0xb1,0x84,0xb9,0x69,0x68,0x64,0xa3,0x1f,0x25,0x84,0x5f,0xf7,0x3f,0xca,0x52,0xff,0xda,0xc9,0x3d,0x5e,0x8b,0x57,0xd3,0x9a,0x1d,0xb7,0xae,0x90,0xa4,0xc3,0x78,0x68,0xfd,0x80,0x3f,0xfd,0x5c,0x09,0x83,0x5d,0xc2,0x48,0xd8,0x84,0xeb,0x8a,0xfe,0xbe,0x30,0x12,0x79,0x54,0x5f,0x7f,0x6e,0x4b,0x8a,0x1e,0xcb,0xcd,0xed,0xb6 +.byte 0xe9,0x6d,0x8a,0x1f,0xdc,0xb1,0x46,0xab,0xdc,0x0d,0xbf,0xda,0xd9,0x39,0x3b,0xd2,0x81,0x00,0x83,0x77,0x32,0xf7,0xdf,0x0e,0x31,0x5d,0x1d,0x6c,0xa7,0x4e,0x54,0xa8,0xac,0x81,0x8c,0xb6,0xa5,0x89,0x02,0xd7,0x2e,0xfd,0x26,0xa3,0x9e,0xcf,0xdb,0x1f,0x5a,0xf3,0x54,0xac,0xe5,0xd0,0x1f,0x9b,0xa7,0xab,0x28,0xcc,0x66,0xd3,0xbc,0x4c +.byte 0x54,0x1a,0x54,0x73,0x78,0xde,0x08,0xd5,0xa5,0x08,0xdc,0x00,0x09,0xc5,0x37,0x61,0x1a,0x98,0x12,0x84,0x2d,0xff,0xc3,0x25,0x62,0x93,0x83,0x05,0x66,0x3d,0xfb,0x1d,0x54,0x08,0x8a,0x50,0x03,0xc4,0xc4,0x6e,0xfa,0x16,0x83,0xbb,0x27,0xf1,0xb7,0x31,0x92,0x64,0x76,0xbc,0xf0,0x44,0x62,0xe9,0x5e,0x15,0x94,0xdc,0xe9,0xf3,0xf8,0x20 +.byte 0x93,0x4d,0x11,0xa2,0xc8,0xde,0x83,0xe6,0x75,0x63,0xfe,0x13,0x75,0x0f,0x79,0xd1,0x3d,0x75,0xb7,0x43,0x62,0x57,0x8d,0x96,0x9c,0xa3,0xc4,0xb2,0x84,0x6a,0x14,0x6e,0x17,0x32,0x09,0x76,0x95,0xbb,0xd6,0xc1,0x2e,0xdc,0x8c,0x73,0xd7,0xad,0x5a,0x41,0x8b,0xb3,0x7e,0x8d,0x90,0xec,0xf5,0xa0,0x46,0x90,0x4c,0x52,0xec,0x97,0xc6,0x98 +.byte 0x7d,0x19,0x77,0xa0,0x99,0x85,0x11,0x26,0x77,0x26,0xf9,0xac,0xe3,0x81,0xcf,0x7d,0x22,0xc8,0x00,0x3d,0x5b,0xee,0xa5,0xf8,0x6d,0xfe,0x47,0xe4,0xef,0x60,0xcc,0xd0,0x33,0xf7,0x5b,0xed,0xbd,0x82,0xc9,0xa8,0x41,0xb8,0x47,0x34,0x9f,0x62,0xb2,0x67,0x62,0xb0,0x3a,0x27,0x95,0xe1,0x22,0x76,0x98,0x0f,0x35,0xaf,0xfc,0x4d,0xc7,0x92 +.byte 0x92,0x7e,0xaf,0x3b,0x3a,0x36,0x5e,0x5c,0xbf,0x43,0x02,0x66,0x5a,0x30,0x78,0x82,0x52,0x20,0x98,0xd6,0xa1,0xe9,0x9a,0x61,0x54,0x0b,0x74,0x85,0xb5,0x99,0x69,0x9f,0x9b,0x3b,0x2f,0x49,0xec,0xb3,0x18,0x0c,0x4a,0x53,0x20,0xd7,0x80,0x7b,0xd4,0x20,0x21,0x32,0x89,0x08,0x81,0x50,0x2b,0x16,0x8d,0xbb,0xe6,0xbb,0xc7,0x74,0x80,0x67 +.byte 0x47,0xf1,0x06,0x68,0x02,0x37,0x31,0x00,0x50,0x8b,0xe2,0x44,0x85,0x2e,0x39,0x54,0xda,0x26,0x7b,0xe1,0xb0,0x23,0xd7,0x0c,0x3c,0x3b,0x81,0x9b,0xa6,0xbe,0x24,0xfd,0x09,0x73,0xbe,0xc3,0x2f,0xa0,0x7b,0x85,0x5b,0x1b,0x55,0x4e,0x9e,0x38,0x80,0x61,0xd7,0xe8,0x9b,0xec,0x88,0x00,0x6a,0x64,0x1b,0xd5,0x65,0x20,0x2a,0x62,0x64,0xbc +.byte 0x21,0xca,0xce,0xc3,0xeb,0x2d,0x2b,0x5c,0x4d,0xb8,0x7c,0xb5,0xbe,0x98,0x0d,0x5b,0x88,0x23,0x60,0xff,0xbe,0x0a,0xb6,0xdd,0xdf,0x28,0xd5,0x2c,0xe5,0x9d,0xb5,0x29,0xea,0x6c,0x3a,0xf4,0x78,0x91,0xa3,0xb2,0xab,0x12,0xf9,0x90,0x96,0xc9,0xa4,0xfc,0x4d,0x28,0x2b,0x0c,0x28,0x8b,0xb7,0x8b,0x36,0xd6,0x80,0xbf,0x07,0x09,0xf9,0x62 +.byte 0x32,0xc0,0x50,0x60,0xd9,0x73,0xe3,0xbe,0xfa,0xa6,0x78,0x48,0x47,0xd7,0xb5,0x39,0xd8,0x04,0x6d,0x79,0x98,0x2e,0xd6,0x3a,0xe5,0xc9,0x01,0xd0,0x00,0x2e,0xd2,0x8b,0xd7,0x1f,0xf1,0xba,0xd4,0x0e,0x9f,0x9d,0xab,0xbf,0x2c,0xe1,0x75,0xf6,0x9c,0xc0,0xae,0x73,0x2b,0x58,0xcb,0x6d,0x46,0x6d,0x11,0xb7,0xce,0xc7,0xef,0x34,0x2c,0x11 +.byte 0x93,0x3c,0x17,0xd9,0x3e,0xad,0xc9,0x4c,0xb3,0xd0,0x0a,0xd0,0xfe,0xf3,0x9d,0xc5,0x43,0x03,0xa9,0x78,0x4a,0x42,0x7f,0xfb,0x75,0xd2,0x85,0xfb,0xe7,0xe6,0xa9,0x48,0x2f,0xa6,0xc3,0x16,0xe2,0x2a,0x9d,0x0d,0xcb,0x2e,0x8b,0x75,0xa8,0x14,0x3a,0x2e,0xb1,0xff,0x58,0x1d,0xa8,0xa6,0xc0,0xf6,0x17,0xda,0xc1,0xce,0xaf,0x08,0xa9,0xc2 +.byte 0xa3,0xc1,0xab,0xb6,0xe8,0x10,0x57,0x8a,0xce,0xc0,0x03,0x5c,0x53,0x5c,0x02,0x5d,0xcf,0x5c,0x65,0xc6,0x47,0x3c,0x62,0x0e,0xa3,0xfc,0xe2,0xae,0x10,0x55,0x4a,0xb4,0x27,0xe8,0x59,0x5e,0x45,0xa9,0xbb,0x21,0x10,0x91,0x46,0x1f,0x50,0x3b,0xc6,0x8c,0xa1,0x8a,0xee,0x5e,0x6e,0x32,0xe6,0x42,0x40,0x79,0x7f,0xbb,0xb3,0x5b,0x05,0xde +.byte 0xe0,0xf6,0x7f,0x3d,0x37,0xe6,0xc3,0x3b,0x40,0xc9,0xe0,0x42,0x36,0xd0,0x0e,0x13,0x32,0x3e,0x48,0xce,0xd8,0xa2,0xef,0xae,0x93,0x66,0x7d,0xde,0xb9,0xdd,0x60,0x15,0x53,0xf2,0xd9,0x90,0x3d,0x38,0x8c,0xa6,0x34,0x44,0xb5,0x6c,0x74,0x7d,0x9d,0xe7,0xd0,0xef,0x6c,0xd6,0xfe,0x9b,0x79,0x4e,0x79,0x5e,0x48,0xef,0x93,0xb2,0x81,0x0b +.byte 0x2b,0xee,0x83,0x69,0x3d,0x15,0x8c,0x27,0x69,0x6f,0xca,0xbf,0x75,0x29,0x37,0xc6,0xe6,0xca,0xb2,0x70,0xd0,0xaf,0xc8,0x5e,0x69,0xf1,0x6b,0x2d,0x0d,0xe7,0xe9,0xbf,0x07,0x52,0xe5,0xac,0x98,0xcf,0xcf,0xd6,0xdd,0x7c,0x2b,0xfc,0x8f,0xd2,0x5f,0x81,0x4b,0x1b,0x7b,0x2d,0x84,0xe2,0x69,0x96,0xcb,0xa2,0x59,0x10,0xba,0xda,0x51,0x11 +.byte 0xeb,0xc3,0x4f,0x10,0xbf,0x8e,0x5b,0xbb,0xa3,0x29,0xe9,0xd8,0x0e,0x71,0xa0,0x1b,0xff,0xee,0x36,0x8c,0x00,0x83,0x6b,0x32,0xfe,0x05,0xeb,0x89,0x8f,0xed,0x48,0x22,0xe1,0x76,0x0a,0xac,0xae,0x3c,0x24,0x54,0x84,0xc2,0x0f,0x79,0x33,0x2b,0x49,0x35,0x1c,0x84,0x5a,0xca,0x92,0x6c,0x1f,0x78,0x15,0x5a,0x36,0xad,0xd5,0x1d,0x9d,0x10 +.byte 0xc1,0x5f,0x7c,0x61,0x60,0xba,0x2e,0xe6,0x9b,0x34,0x02,0xe9,0x68,0x1c,0xfb,0xbf,0x02,0xdc,0x79,0x57,0x1c,0x0f,0xc8,0x8c,0x2a,0x66,0x2a,0x50,0xaa,0x81,0x4e,0x1f,0xa8,0x2d,0xe4,0x61,0xe8,0x43,0x84,0xcb,0xda,0x96,0xf9,0x4a,0xd0,0x8f,0xe1,0xd7,0xc4,0x05,0xf5,0x76,0xfa,0x47,0x7a,0x07,0x1a,0x77,0xbb,0x63,0xb3,0x3a,0x85,0x3b +.byte 0x0d,0x32,0x4f,0x14,0x15,0x02,0x5b,0x9c,0xbc,0xc2,0x12,0x90,0x0f,0x7b,0x94,0x27,0x5f,0x70,0x23,0xd8,0x5d,0x54,0xc4,0xca,0x6a,0x69,0x9e,0xd1,0xb3,0x2a,0x75,0x1a,0x07,0x9c,0x20,0xf6,0x76,0x22,0x4d,0x09,0x30,0x24,0x3f,0x3b,0xe5,0xcb,0x4b,0x5a,0x03,0x2d,0xe8,0xbe,0xed,0xf0,0xe3,0x91,0xf2,0x6c,0xb8,0x02,0x2d,0x6c,0x7a,0xa6 +.byte 0xc1,0x8e,0xa7,0xbb,0x73,0xdf,0x40,0xa5,0x60,0x91,0xbf,0xbe,0x28,0x0b,0x37,0x2e,0x5f,0x4b,0xcd,0x14,0x4d,0x2d,0xfc,0x5e,0x43,0xb5,0x78,0x8d,0xea,0xa0,0x86,0x54,0x4f,0xb6,0x25,0x40,0x39,0x3f,0x9c,0x7a,0x26,0x74,0x88,0x42,0x53,0xb0,0x3b,0x81,0x75,0x04,0x67,0x41,0x65,0x66,0x2c,0xdc,0xe9,0xf0,0xb3,0xab,0x2a,0xa5,0xf3,0xef +.byte 0xfa,0xc5,0x10,0x63,0xe2,0x70,0xb5,0x29,0x60,0x86,0x9e,0xb9,0x0b,0xe2,0xc4,0x05,0xa9,0x3c,0x1b,0x60,0x15,0x6b,0x2f,0x74,0x93,0x5e,0x70,0x9a,0x56,0x6a,0xc4,0x92,0x49,0xaa,0x95,0x51,0xc4,0xba,0xfd,0xf6,0x2d,0x36,0x3e,0x66,0xbd,0x74,0xbc,0x2e,0xb3,0xad,0xa1,0x41,0x50,0x33,0x79,0x84,0xac,0x21,0x7a,0xfc,0x3a,0x8e,0xdb,0xcc +.byte 0x27,0xf6,0x2c,0x5c,0x23,0x38,0x73,0xd5,0xaf,0xc9,0x2d,0x9c,0x18,0x58,0xdf,0x8f,0x89,0x9d,0xdd,0x00,0x3c,0x5f,0x23,0x00,0x6e,0x66,0x1d,0xf3,0x1c,0x40,0x9d,0x43,0xb0,0x74,0xf1,0x41,0xa5,0x77,0xcb,0x8d,0x5b,0x94,0x68,0x95,0xb6,0x0e,0xd4,0x4d,0x47,0x9b,0xd2,0xcd,0x9b,0x94,0xa4,0x28,0xf9,0xf0,0x3d,0xcf,0x89,0xb1,0xc3,0x73 +.byte 0x84,0x15,0xb6,0xc8,0x6b,0xf1,0xb1,0xdc,0x1b,0x1a,0x6f,0xb5,0x73,0x87,0x8b,0x63,0xbf,0x4b,0x25,0x9b,0xe4,0xdd,0x44,0xed,0xe7,0x0e,0x6f,0x03,0xae,0xa1,0x5e,0x1f,0x5f,0xa7,0xa4,0xed,0x69,0x7a,0x91,0x6d,0x55,0xac,0xce,0x18,0x32,0x17,0x78,0x49,0x9f,0x1e,0x9c,0xd2,0x7b,0x1f,0x74,0x60,0xa5,0x64,0xb1,0x99,0xe6,0xc5,0x0d,0x69 +.byte 0xfa,0xb2,0xd9,0x05,0x61,0x71,0xa4,0x6f,0xc2,0xb6,0x91,0x0e,0x6c,0xf2,0xa6,0x6c,0xea,0x8e,0x94,0x8b,0xac,0xa7,0xfe,0x70,0x8e,0x8d,0xc2,0x85,0xa6,0xa7,0x8e,0xe8,0xfa,0xbc,0xa1,0xaf,0x0e,0xa9,0x06,0xa4,0x9a,0xb0,0x23,0x93,0xbc,0x93,0x2d,0x97,0x42,0xe2,0x0d,0x3a,0x65,0xb4,0x60,0x5b,0xeb,0xa1,0x20,0x8a,0xdc,0x17,0x6b,0xc5 +.byte 0x19,0xc3,0x67,0xbf,0xae,0xf7,0xb9,0xb1,0x88,0x7f,0xe5,0x1b,0xc2,0x61,0x97,0xa0,0xd3,0x64,0x74,0x6b,0x7a,0x46,0x39,0x3f,0xc8,0xd3,0x53,0x79,0x74,0x4e,0x1e,0x63,0x91,0xc5,0x4a,0x70,0xb0,0x05,0x35,0x19,0xc2,0x26,0x54,0x44,0x3b,0xa9,0x12,0x40,0xd0,0x21,0x19,0xf3,0x8d,0xc7,0x2b,0x88,0x9a,0xec,0x41,0x8f,0x4f,0x23,0x19,0x1a +.byte 0xf3,0x1d,0x0a,0x88,0x0f,0xa7,0x02,0xd4,0x78,0x88,0xe6,0x43,0xb6,0x9e,0x07,0xdf,0x6a,0x1f,0x41,0xbb,0x3e,0xea,0x15,0xff,0x66,0x4c,0x7a,0x8b,0xee,0x27,0x47,0x81,0x81,0x95,0xa2,0x22,0xb4,0x9f,0x1c,0x09,0x1c,0xfc,0x0a,0xef,0x88,0x7f,0x59,0x60,0x91,0x6a,0xe4,0x92,0x8c,0x02,0x54,0xc9,0xee,0xc7,0x5e,0xd1,0xbf,0xc9,0x41,0xde +.byte 0x2f,0xa3,0x22,0x07,0x1d,0x8c,0xe1,0x04,0x59,0x94,0x75,0x3e,0xee,0x56,0x62,0x07,0x80,0x18,0x60,0x78,0x0e,0x55,0x06,0xec,0xe1,0xa5,0xf6,0x21,0x7e,0xf9,0x37,0xab,0x6a,0xed,0x07,0xcb,0xbf,0xa2,0xab,0x50,0xee,0x1f,0x2f,0x54,0x2b,0x82,0x93,0x59,0x03,0x35,0xd9,0xe8,0x2b,0xa6,0x03,0xc2,0xef,0x37,0x85,0xfc,0x89,0x06,0x30,0xe0 +.byte 0xc2,0x00,0xc4,0xaf,0x59,0xb6,0x31,0x52,0x37,0xa4,0x6c,0xdb,0x1b,0x20,0x87,0xf0,0xa4,0x15,0x4b,0xa8,0xd9,0x7e,0x1b,0x96,0x00,0x07,0xf4,0x86,0x07,0x14,0x55,0x70,0x37,0xe3,0xe3,0xf0,0xeb,0xd6,0xf1,0xe0,0xe9,0x6c,0xdf,0x3d,0xaf,0x86,0xb8,0x00,0x9b,0xdf,0xc6,0x5c,0xd2,0x53,0xcb,0xcf,0x63,0xcc,0x3e,0x6d,0x62,0xeb,0xe6,0x97 +.byte 0xd8,0x54,0xed,0x36,0xe4,0xed,0x69,0xaa,0x10,0x83,0xde,0x16,0xfd,0xcc,0xd6,0x24,0xb9,0x3c,0x4f,0x99,0x81,0xc2,0x23,0x16,0x91,0x5d,0x9f,0x46,0xa5,0xdd,0xb4,0x8a,0xe1,0x07,0x89,0x84,0x2e,0x62,0x48,0xf6,0x1a,0x17,0x7b,0xc8,0xf7,0xb4,0x3d,0x9e,0x82,0xe3,0xe3,0xcf,0x0b,0xd9,0x52,0x90,0x61,0xd8,0xdf,0x9e,0xc4,0xc7,0x7c,0xfa +.byte 0xcf,0x09,0xd2,0x94,0x86,0x37,0x94,0xaf,0x7e,0x0a,0x9d,0x16,0xee,0xad,0xfb,0xa2,0x9e,0x2d,0x2f,0xad,0xd5,0xc2,0xf9,0x91,0xf8,0x7e,0x2b,0xb8,0xb2,0x60,0x3c,0x0a,0x89,0x53,0x07,0x87,0x3b,0x83,0x70,0xee,0x71,0xa3,0x94,0x0b,0x77,0x50,0xeb,0xcc,0x23,0xf0,0xbe,0x95,0x51,0x54,0xd2,0xd6,0xd2,0x09,0xa5,0x19,0x3d,0x4e,0xec,0xe3 +.byte 0x88,0x71,0xa7,0xb1,0x10,0x03,0x7e,0xc4,0x92,0x2a,0xe7,0x99,0x75,0xff,0xae,0x10,0x3d,0xbb,0x33,0xc9,0x7f,0xc2,0xe6,0x3c,0xc4,0xe7,0xba,0x37,0xba,0x68,0x69,0x92,0x4a,0xfb,0x32,0x3b,0xb5,0xde,0xdb,0x91,0xd0,0x8e,0x77,0xf2,0x1e,0x2d,0x25,0xb4,0xa0,0x42,0xef,0x78,0x6c,0x75,0xcb,0xa0,0x73,0xdf,0xde,0xd8,0x26,0xfe,0xe3,0xf9 +.byte 0x74,0xe7,0xa0,0xd2,0xbd,0x6c,0x99,0x8d,0x07,0xf2,0xf8,0xff,0x36,0x2d,0x8e,0xda,0x5e,0x5c,0x47,0x06,0xf8,0x08,0x33,0x1d,0x93,0xcf,0xc3,0x1a,0x20,0x86,0xb6,0x8e,0x44,0x10,0xbc,0xba,0x89,0xfc,0xa3,0x57,0x92,0x2c,0x28,0xa1,0xd0,0xab,0xdc,0xba,0x0a,0x7e,0x9d,0xd2,0xfd,0x09,0xd3,0x87,0x6c,0x06,0x44,0x17,0x73,0xfe,0xc9,0x8b +.byte 0x52,0xd3,0x09,0x60,0x14,0x03,0xb1,0x79,0x4c,0x9c,0xc4,0xec,0x42,0x4c,0xd3,0x21,0xe5,0x34,0x21,0x38,0xdd,0x12,0x95,0xd4,0x20,0x50,0xef,0x5f,0x46,0x4f,0x37,0x65,0xd5,0xf1,0xb2,0x2c,0x6c,0x9a,0x06,0x28,0x77,0xbf,0xe3,0xec,0xec,0x2b,0xcb,0x2c,0x8b,0x62,0x2e,0x39,0xaa,0x28,0x0b,0x51,0x01,0xa5,0x02,0x06,0x66,0x4a,0x67,0x0c +.byte 0x96,0xa3,0x12,0x74,0x94,0x2c,0x0f,0x23,0xa3,0xea,0xda,0x1a,0x6d,0x54,0x30,0x33,0xc8,0x33,0x0a,0xfb,0x25,0x2a,0x8b,0x9a,0x87,0xd9,0x9d,0x37,0x4c,0x41,0x3b,0xe5,0x4a,0x81,0x92,0x40,0x38,0x18,0x82,0x13,0x54,0xde,0x56,0x11,0x63,0xf3,0x09,0x61,0x3b,0xdd,0x0c,0x71,0xe8,0x4f,0xc2,0x9a,0x77,0x2f,0xeb,0xf1,0x39,0x1c,0x10,0x0e +.byte 0x01,0xaf,0x92,0x34,0x9a,0xb6,0x7b,0x79,0x86,0x0c,0xf1,0x53,0xb6,0x59,0xbd,0x6d,0x79,0x6e,0x37,0x11,0x25,0x67,0x95,0x31,0x4f,0x43,0xdf,0xb7,0x4b,0x80,0x8d,0x07,0x3c,0x49,0x73,0x8a,0x72,0x61,0x02,0x0f,0x2f,0x13,0xed,0x91,0x10,0xf6,0x08,0xf3,0x50,0x4a,0xd4,0x36,0xcb,0x52,0xb3,0x3b,0xe6,0xef,0x85,0xe9,0xe0,0xad,0x0d,0x3d +.byte 0x84,0x07,0x70,0xdf,0x16,0x47,0xeb,0x26,0x19,0x27,0xaf,0x7a,0x9f,0x2f,0x2b,0x6d,0xbb,0x37,0x68,0x8e,0x19,0x46,0x5a,0x65,0x0d,0x0a,0x67,0xd8,0xe2,0xc2,0xcd,0x49,0xf6,0xc2,0x27,0xac,0x12,0xea,0x1f,0x81,0x60,0xac,0x8b,0x5d,0xcc,0x9a,0x5b,0xec,0xc3,0xcb,0x85,0x0d,0xef,0xa6,0xd5,0x33,0xb3,0x67,0x73,0x3f,0xc9,0x90,0x25,0x3e +.byte 0xe6,0x7c,0x41,0x59,0x83,0xf7,0x90,0x4a,0xbf,0x14,0x72,0x11,0xf2,0x3a,0x38,0x58,0x17,0xd8,0x3d,0x00,0xc6,0x42,0xf2,0xbc,0xfd,0x05,0x37,0x6d,0x11,0xb0,0xd7,0xb2,0xb7,0x73,0x69,0x80,0x47,0x30,0x64,0x13,0x8c,0x24,0xb2,0x42,0x12,0x8c,0xc0,0x8a,0x45,0x0b,0x71,0x23,0xeb,0xac,0x65,0xda,0x44,0x13,0x85,0x77,0xdf,0xb8,0x4b,0x69 +.byte 0xd4,0x8e,0x40,0x54,0x24,0xac,0xc8,0x62,0x36,0x51,0x20,0xaa,0xcd,0x5d,0xa5,0x73,0x2c,0x81,0x92,0x99,0x44,0x6b,0x04,0xac,0x8e,0xee,0x96,0x29,0xca,0xdc,0x2f,0xd1,0x13,0x5c,0x9e,0xc2,0x67,0x6a,0xaf,0xf6,0x3e,0xe2,0xa1,0x6d,0xda,0xbe,0x8a,0x55,0x50,0x27,0xee,0x6d,0xb8,0x35,0x5f,0xb4,0xa8,0x76,0xa1,0xe2,0x52,0x87,0xf6,0xfb +.byte 0xe2,0x16,0x1c,0x90,0x78,0xe4,0x17,0xb0,0xd9,0x56,0xf5,0xd3,0xa4,0xb0,0x3f,0xe9,0x01,0xf9,0xd0,0x67,0x2b,0xeb,0x1d,0x73,0x24,0x90,0x36,0x36,0x0d,0xcf,0xfb,0x3f,0xa1,0xa0,0x25,0x3b,0xf1,0x7f,0x9e,0x90,0xcf,0xb6,0xd0,0x83,0x90,0xcd,0x3f,0xff,0x5f,0xa3,0x33,0x95,0xd7,0xbe,0x78,0xfe,0xcc,0x9a,0xb9,0x64,0x88,0xb7,0xd9,0x5e +.byte 0x46,0x2d,0xf0,0xb1,0xa1,0x81,0x2b,0xab,0x80,0xf5,0x4d,0x3b,0xd8,0x53,0x64,0x8f,0xac,0x7a,0x03,0xb3,0x39,0x7a,0x85,0xef,0x61,0xb5,0x2c,0x8e,0xf4,0x27,0x07,0x9b,0x7b,0xc9,0x8b,0x1a,0xe4,0x4f,0xce,0x8b,0x35,0x32,0xac,0xcf,0x47,0xb8,0x2f,0x9e,0xe5,0x11,0x48,0xc1,0x07,0xea,0x0c,0xee,0x06,0xc6,0xa3,0x48,0xb6,0x1a,0xd8,0xb4 +.byte 0xa7,0xae,0x59,0x7d,0x9e,0x4e,0x66,0x7f,0xe9,0x02,0x40,0xdc,0x21,0x5e,0x74,0x2c,0x1d,0x29,0x22,0xca,0x97,0x4f,0xc8,0xc7,0xea,0x69,0x02,0x89,0xd1,0x43,0xff,0x83,0x89,0x58,0x66,0x92,0xbc,0x11,0xf6,0x02,0x8b,0xa8,0x34,0x8d,0xbe,0x3a,0x70,0xc3,0x10,0xe7,0xb5,0xc4,0xda,0xdb,0xc6,0x87,0xee,0xee,0xe0,0x48,0x62,0x80,0x8d,0xfc +.byte 0xaa,0xc7,0xce,0x1a,0xea,0xb9,0x1b,0x30,0x4a,0x48,0x9b,0xf4,0x58,0xff,0x5d,0x15,0xc8,0xf2,0x84,0x44,0xae,0x63,0xe8,0xb1,0xe0,0x2e,0x38,0x8e,0x47,0xf9,0x09,0xec,0xb9,0x94,0x18,0x37,0x68,0xef,0xbd,0xd5,0x67,0x72,0x01,0x9a,0x15,0xb9,0x7c,0x36,0xc0,0x22,0x80,0x12,0xb1,0x4e,0xab,0x3c,0xea,0x81,0xcf,0x70,0xf3,0xde,0x1f,0xd4 +.byte 0x67,0x94,0xfa,0xe1,0xf0,0xb6,0xd6,0x6b,0xc3,0xa2,0xbb,0x59,0x6b,0x9f,0x58,0x26,0x99,0x0c,0xdc,0xcd,0xb8,0xae,0x49,0xf0,0x8f,0xd3,0x0d,0xb7,0x4c,0x22,0xcf,0xb6,0x6c,0xa3,0x19,0x09,0x42,0x59,0x25,0xf8,0xdc,0xf3,0xc2,0x00,0xc3,0xc3,0xd3,0x9e,0x98,0xd3,0xa3,0xd0,0x96,0xfd,0x4f,0x15,0x57,0x5b,0xa7,0x08,0x3a,0x0e,0x3d,0xd2 +.byte 0x7d,0xa1,0xa0,0x94,0xc0,0x76,0x83,0xf6,0xc1,0xe8,0x7e,0xd3,0x97,0xc1,0xbf,0x38,0x74,0x9b,0xfb,0x35,0xeb,0xf7,0x34,0x20,0xea,0xda,0xd3,0xb1,0x2e,0x10,0x16,0x9c,0x09,0x1c,0x67,0x46,0xa2,0x05,0xf9,0x47,0xde,0x35,0x53,0x18,0x58,0xb0,0xbb,0x7a,0x88,0x58,0xc5,0x3e,0x98,0x29,0x43,0x98,0x07,0x76,0xa3,0xe1,0x95,0x92,0x21,0xe9 +.byte 0x06,0x17,0x15,0xe0,0x6b,0xd5,0x5a,0x6d,0x10,0xa6,0x08,0x92,0xa9,0xf5,0xcf,0x57,0x1a,0x28,0x5d,0x14,0x33,0x99,0xf9,0xa0,0xb3,0xeb,0xee,0xd4,0x6e,0x0b,0x5e,0xf7,0xe9,0xe3,0xc6,0x71,0x34,0x55,0xf3,0xde,0xd5,0xc2,0x52,0xc3,0x7b,0x06,0x87,0xef,0x26,0x81,0xc9,0xbd,0xaf,0x12,0x61,0x95,0x2b,0xa4,0x8e,0xe8,0x08,0x9a,0x13,0x48 +.byte 0x2e,0x84,0x98,0xf6,0x95,0x21,0x22,0xe5,0xcf,0x30,0x8d,0xaf,0x70,0x16,0x27,0x0c,0xcd,0x26,0x7f,0xe8,0xa0,0x35,0x0c,0x01,0x0e,0xdd,0x9d,0x2c,0x89,0x41,0x34,0xc4,0xa2,0xaa,0xf6,0x3f,0xca,0x3b,0x86,0xce,0xd7,0x4c,0xe3,0xb5,0x69,0xe9,0x41,0xbe,0x3c,0x9a,0x4c,0x1a,0xb3,0x88,0xea,0x78,0x12,0x4c,0x1b,0x79,0xc7,0xcd,0x32,0x72 +.byte 0xfa,0x3f,0x0b,0x73,0x1b,0xd9,0xec,0x85,0xd4,0x52,0x6c,0x91,0x2d,0xbe,0x76,0x8b,0xfd,0xb6,0x49,0xcf,0x67,0xd1,0x18,0x7b,0xae,0x86,0x47,0x47,0xfd,0xff,0x63,0xf2,0x88,0x1b,0x58,0xd5,0x30,0x69,0xf9,0x9a,0x03,0x52,0xae,0xe5,0xe2,0x55,0xbf,0x35,0x12,0xb0,0x84,0xa9,0xed,0xb6,0x8d,0x5f,0x6c,0xed,0x1a,0x00,0x7a,0xdc,0xf2,0x03 +.byte 0x9e,0xef,0x59,0x27,0x4c,0xf4,0x83,0xa2,0x36,0x3d,0x3d,0x8c,0x75,0x8c,0x37,0x68,0x93,0x0b,0x30,0x48,0xea,0x91,0x14,0x37,0x88,0x87,0x7f,0xe6,0xd8,0xbd,0x04,0x34,0x1e,0xe8,0x2a,0x41,0x48,0x5c,0x66,0xf9,0xc2,0xd1,0x56,0x25,0x29,0x45,0xfa,0x71,0xe1,0x59,0xa8,0x52,0x99,0x0b,0x92,0xe0,0x33,0x52,0x91,0xd6,0x5f,0x0a,0x70,0x83 +.byte 0x4f,0xa3,0x47,0x6e,0xfa,0x85,0x5e,0xb1,0x0a,0x1d,0xe7,0x35,0xc9,0x88,0x27,0xc9,0x8c,0x3e,0x7f,0x6d,0x34,0x1e,0x11,0x7b,0xcd,0xe7,0x09,0x82,0x3a,0xa1,0x46,0xc6,0x15,0xde,0x0b,0xde,0x35,0x71,0x92,0x5c,0x72,0x50,0x08,0x6b,0x62,0xa7,0xec,0xa2,0xca,0x53,0x6e,0x47,0x7d,0x50,0x32,0xa7,0x32,0x7b,0x49,0x0c,0x97,0xcc,0x98,0x8d +.byte 0xc3,0x29,0x72,0x1e,0x85,0x47,0x1b,0xa7,0x89,0x19,0x85,0xaa,0x3f,0x11,0x6a,0xea,0x61,0x84,0x07,0x9a,0xc8,0xb3,0x25,0xfe,0x72,0xca,0x83,0xa9,0xf0,0x9e,0x01,0xe4,0x9a,0xd6,0x1b,0x87,0xfc,0xd4,0x3a,0x04,0x34,0x8c,0x0b,0x46,0xbc,0xe9,0x3c,0x3f,0xd9,0x93,0xf1,0xca,0x41,0x0b,0xdb,0x28,0xe8,0x28,0x1b,0x84,0x36,0x16,0x84,0x22 +.byte 0x1e,0x1e,0x2b,0xb0,0xfb,0xa6,0xcc,0x95,0x31,0x46,0xd7,0xca,0xc2,0x8b,0xa3,0x3a,0xa5,0xb0,0xaf,0x52,0x66,0x53,0x39,0x5f,0x58,0xb5,0xdf,0x01,0x52,0x07,0xb4,0x82,0xdc,0xb7,0xf9,0x88,0xd8,0x77,0xf8,0x12,0x9d,0xe8,0x21,0xd7,0x0b,0x0f,0x57,0x90,0x40,0xb2,0x64,0x3f,0xce,0xa0,0xa3,0xfa,0x12,0x16,0xec,0x6d,0xcc,0xc7,0x2a,0x43 +.byte 0xc9,0xe7,0xb7,0x90,0x52,0x35,0x22,0x6d,0x46,0x99,0x1e,0x44,0x12,0xd6,0x0f,0xaf,0x5c,0x16,0xd3,0x7a,0xd6,0xb4,0xfe,0x20,0x26,0x11,0xe1,0xc6,0xa5,0x10,0xfd,0x9f,0x0c,0x47,0xae,0x32,0x08,0x15,0x8f,0xef,0xef,0x4c,0x83,0xbc,0xbf,0x6a,0xe5,0xf5,0x69,0x11,0x4d,0x7d,0x47,0x1f,0x10,0x58,0x61,0xb0,0x0d,0x98,0x67,0xc0,0x99,0x3a +.byte 0x2d,0x9a,0x5b,0xd5,0x37,0xe7,0xe5,0xd4,0x56,0x96,0x69,0xf8,0x53,0x7e,0x24,0x70,0x51,0x01,0x83,0x8d,0x49,0x01,0x32,0x7d,0x4f,0x41,0x92,0x54,0x9c,0x15,0xf1,0x3c,0x05,0x32,0x28,0x0d,0x0f,0x67,0xbe,0x65,0xfa,0x1b,0xa3,0xd0,0x28,0x18,0xb8,0x84,0xfe,0x6a,0x30,0xea,0xb9,0x00,0xb1,0x10,0x7c,0xa2,0x94,0x4f,0x86,0x18,0xdd,0xb4 +.byte 0x80,0x18,0x48,0x18,0xe1,0x56,0x70,0x7d,0x5c,0x3b,0xe5,0xd7,0x88,0x66,0x57,0xe3,0xe1,0x04,0x4c,0x68,0x5b,0x64,0x4d,0x0d,0x30,0x76,0x26,0xaa,0x84,0x0e,0xe0,0xed,0x53,0x62,0x20,0x33,0xaf,0x45,0x42,0x40,0x47,0x01,0x15,0xc9,0x0b,0x27,0x7c,0x68,0x4d,0x55,0xc4,0x6a,0x5f,0x96,0x9f,0x96,0x67,0xae,0x13,0x1c,0x84,0x52,0x33,0x41 +.byte 0x80,0xfc,0xae,0xb6,0xb1,0x8c,0xc3,0x19,0x80,0xa8,0x5f,0xe5,0x8c,0xd0,0xa8,0xb4,0x58,0xc9,0x48,0x29,0xab,0x11,0xd1,0x09,0xc6,0x20,0x98,0x4c,0xdb,0xa4,0x83,0x5c,0x26,0x51,0xce,0x80,0xe5,0xc4,0x9b,0xae,0xba,0x8e,0x99,0x4e,0xa4,0xff,0xdc,0x99,0x4c,0x02,0xa0,0x42,0x80,0xca,0xd7,0xea,0x6a,0x58,0x31,0xdb,0x16,0xd8,0x4d,0xab +.byte 0x03,0x2e,0x3a,0xdc,0xe9,0x07,0xfb,0xfb,0x5b,0x57,0x67,0x2a,0x7b,0xdc,0xc1,0x66,0xd1,0x31,0x3a,0x03,0x87,0xd8,0x66,0xda,0xa1,0x24,0x00,0x26,0xc0,0x26,0x78,0xf8,0x59,0x13,0x3f,0x34,0x08,0x35,0x45,0xbd,0x45,0x4f,0x89,0x65,0x97,0xdb,0xe6,0x1e,0x09,0x6e,0x23,0x2a,0xc4,0xf5,0x6a,0x74,0x28,0xb0,0xae,0x8c,0xfb,0x49,0x35,0x99 +.byte 0x06,0x30,0xc6,0xb2,0x8c,0xcd,0x8b,0x41,0xea,0xf2,0x04,0x18,0x29,0x25,0x1b,0x32,0x42,0x45,0xb5,0x92,0x42,0xb4,0x33,0xd2,0x90,0x31,0x08,0xcd,0x35,0x5d,0x50,0x64,0xa8,0x93,0xfd,0xa5,0xfd,0x32,0xbd,0xe8,0x13,0x1c,0x48,0x5c,0x14,0x70,0x03,0x92,0x0f,0x12,0x86,0xf6,0x6c,0xcd,0xc6,0xec,0xbf,0x8e,0x85,0x28,0x1d,0x1c,0x63,0x3f +.byte 0x81,0x93,0xd4,0x80,0x3c,0x29,0x0b,0x63,0xfe,0x87,0xa6,0x24,0xd6,0x3e,0x62,0xb6,0xd9,0xb0,0x58,0xf1,0x41,0x36,0xc7,0x47,0x8b,0xfd,0x4b,0x91,0x4e,0x5d,0x41,0x44,0xb0,0x65,0x3d,0x9e,0x3b,0x70,0x01,0xcc,0x7d,0x77,0xf0,0x23,0xd9,0xca,0x5f,0xda,0xa1,0x8c,0x71,0x11,0x91,0x7d,0x36,0xf5,0xc9,0xcd,0xf4,0x34,0x5f,0x69,0x57,0xd6 +.byte 0x33,0x4c,0xb2,0xe1,0x38,0x5f,0x86,0x3c,0x57,0x7b,0x2e,0x99,0x05,0x80,0x63,0xc4,0x77,0x69,0x06,0xc2,0x47,0x44,0xca,0x17,0x27,0x1d,0x55,0x34,0x02,0xd0,0x89,0x3a,0x3b,0x79,0xf0,0x86,0xd7,0x6b,0x01,0x9c,0xc7,0xa8,0xde,0xdb,0xdf,0x49,0xd1,0xb9,0x11,0xaf,0x7e,0x22,0x8b,0x5d,0xb5,0x0b,0xdc,0xd0,0x36,0xe6,0x9d,0x85,0x41,0x4a +.byte 0x35,0xf0,0xe1,0xcd,0xce,0x7b,0xd1,0xd6,0x00,0xdd,0xb6,0xe4,0x06,0x3e,0x66,0xe9,0x2b,0xa8,0x44,0x0d,0x18,0xd4,0xbc,0xfb,0x3c,0x58,0x6c,0x11,0xe9,0xdc,0x19,0x14,0x08,0x27,0x23,0x0c,0xd0,0xf9,0x97,0xaf,0x97,0x07,0x02,0x1a,0x5e,0xcd,0xae,0xd2,0x80,0x96,0x16,0x49,0xc3,0xfc,0xda,0x25,0x12,0x20,0xe1,0xc0,0x68,0x90,0x4b,0x30 +.byte 0x2d,0x06,0x53,0x2c,0x57,0x63,0x4a,0x7a,0xf6,0xc8,0x5a,0xb7,0x58,0x8c,0x13,0xfe,0x43,0xb3,0xf8,0x25,0x3e,0x7a,0x25,0x3e,0x1d,0x7f,0x8f,0x5e,0xdb,0xad,0x99,0x83,0xfc,0xd9,0x0a,0xdf,0xb5,0x19,0x1c,0x2c,0xf6,0xe8,0x06,0xbe,0xc0,0x9f,0x7e,0x0f,0x95,0xaa,0xac,0x09,0xdc,0x8c,0x37,0xcf,0x35,0x35,0x95,0x62,0xf1,0xff,0x96,0x1c +.byte 0x77,0xe9,0x53,0x7e,0x12,0x56,0x2d,0x4e,0x3e,0x1f,0xdb,0x1d,0x71,0x0e,0xdc,0xf7,0x65,0xb1,0x78,0x7f,0xe4,0xba,0xbf,0x7f,0x6c,0xcb,0x73,0xd3,0xe8,0xd9,0xce,0xfb,0xdb,0x48,0x87,0xe0,0x10,0x00,0x74,0xcb,0xdf,0x32,0xa8,0xdd,0x83,0x24,0x49,0xda,0x86,0x38,0x1c,0x2c,0x93,0x09,0x8a,0x26,0xbb,0x34,0x21,0x1d,0xac,0xb5,0x16,0xae +.byte 0xd8,0xcb,0x94,0x04,0xd6,0xbc,0xde,0x9c,0x70,0x28,0xa5,0x1a,0x15,0x5e,0x35,0xe4,0xe6,0x53,0xea,0x9c,0x3b,0x0c,0x36,0x3b,0x80,0x13,0x28,0x1d,0xc7,0x1a,0xa8,0x8e,0x9e,0x09,0xce,0x5d,0x50,0xd3,0xc7,0x6f,0x3a,0x75,0xa5,0x84,0x1c,0x08,0x66,0xe6,0x05,0xda,0x8b,0xf1,0x4b,0x5c,0xe2,0xc7,0x0f,0xa1,0xf1,0x47,0x02,0xf4,0xa7,0x24 +.byte 0xf3,0x0e,0x2c,0xa9,0xae,0x67,0xdf,0xce,0x30,0x88,0x4a,0x9a,0x39,0x4a,0x97,0x64,0xa8,0x30,0x53,0xf9,0x47,0x66,0x5c,0x19,0x1c,0xfb,0x2f,0x05,0x89,0x4f,0xfe,0x25,0xe7,0xed,0xed,0x17,0x5a,0x86,0xeb,0x25,0xee,0xe4,0x09,0x88,0x05,0x49,0x20,0x54,0x4b,0x7f,0x3e,0xb5,0x23,0x85,0xa9,0x66,0x61,0x73,0xe0,0x61,0x94,0xc6,0xe5,0x29 +.byte 0xb4,0xe1,0x6f,0xa4,0x4d,0x50,0x56,0x2e,0x30,0x75,0x51,0x5d,0xdd,0xa2,0x68,0x56,0x67,0xd8,0xec,0x2d,0x2a,0xfd,0x49,0xc5,0xbc,0xae,0x2f,0x6b,0xc7,0x8d,0x2e,0xca,0x91,0x35,0xe8,0xea,0x65,0xe9,0x9c,0x65,0xaf,0x8e,0xd5,0x16,0xdf,0xac,0x44,0x1e,0xb6,0x16,0xf0,0xb6,0x33,0x6a,0xe6,0x96,0x0f,0x85,0x2e,0xa1,0xaa,0x6a,0xe0,0x12 +.byte 0x0c,0xaa,0x7d,0xae,0xf7,0xe3,0xb2,0x4c,0x3c,0x10,0xc6,0x87,0x8e,0x87,0xfb,0xac,0xf7,0xd7,0x7a,0x2e,0x9a,0x7a,0xa7,0x4f,0xf0,0x75,0xce,0xbd,0xc3,0xe6,0x79,0x1d,0x56,0xab,0xff,0x56,0xfe,0x69,0xbd,0xcf,0x15,0x27,0x64,0x3c,0x83,0x1c,0x08,0xb0,0x91,0x60,0x67,0xe7,0x27,0x44,0x49,0x22,0x78,0xd5,0x1a,0xc8,0x3b,0x35,0x9b,0xa5 +.byte 0x53,0xce,0xde,0x04,0xd2,0x3e,0x67,0x48,0xaf,0x54,0xdf,0x9c,0xf7,0xb9,0xd4,0xe3,0xb6,0x85,0x02,0x68,0x21,0x10,0xdb,0xb5,0xca,0x11,0xa2,0x7c,0xcf,0x13,0x41,0x7a,0xfd,0xe9,0x0a,0x3c,0x53,0xd6,0x07,0xf2,0xdd,0xe2,0x7c,0x16,0xf0,0x44,0x3f,0x5d,0x34,0x09,0x7c,0x7b,0x21,0x8c,0x8e,0xdb,0x0d,0xc5,0x73,0xce,0x61,0xce,0x17,0x46 +.byte 0x6c,0x14,0x07,0xb5,0x70,0x80,0xf0,0x29,0x7c,0x13,0x41,0x2d,0x8e,0xdc,0x53,0xc2,0xbf,0xf0,0xc2,0xfb,0x59,0xa0,0x66,0x5f,0x25,0xda,0x17,0x5f,0xac,0xab,0x75,0x1b,0xc7,0x61,0x87,0x53,0x80,0x2e,0x11,0x4e,0x04,0x48,0xf9,0xee,0x54,0xe6,0x69,0x69,0x57,0xc2,0x46,0xd8,0xb3,0x2e,0x7b,0xc8,0xa5,0xd0,0xb2,0x5e,0xd4,0x6b,0x9b,0x1a +.byte 0xd6,0x79,0x9d,0x99,0xa6,0xbb,0x4d,0xca,0x74,0x2c,0x3d,0xd4,0x86,0xd0,0x64,0xd4,0x81,0x49,0x76,0x42,0xb8,0xf9,0x2c,0x52,0xe7,0x77,0x37,0x31,0xbb,0x2e,0x5b,0x38,0x81,0x01,0x2c,0x27,0x28,0xcb,0x0c,0xba,0xfa,0x8a,0x9a,0x45,0x51,0xa2,0xde,0xf2,0x7b,0xe6,0x65,0xec,0x5b,0x2d,0xe8,0x55,0x8e,0xb4,0x7f,0xf8,0x1a,0x66,0x3a,0x5f +.byte 0x06,0x10,0x15,0xb2,0x3d,0xb2,0x36,0x6e,0x9f,0x8e,0xe2,0x4c,0x78,0xe5,0x3a,0xac,0x21,0x16,0x20,0x30,0x0f,0x51,0x56,0xcb,0x53,0xca,0x70,0x3c,0xa2,0x3f,0x37,0x06,0x6c,0x70,0xec,0xf4,0x3d,0x7c,0x77,0xa0,0x61,0xc7,0x0e,0x26,0x9f,0x25,0xc0,0xf2,0x28,0xdb,0x57,0xbe,0xe6,0x4e,0x9c,0x4d,0x2e,0x48,0x50,0xc2,0xd4,0xfd,0x5e,0x52 +.byte 0x3f,0xd0,0x82,0xd1,0xd4,0x53,0xad,0x42,0x38,0xb1,0x02,0xd6,0xa0,0x34,0x7a,0xb4,0xb3,0xdd,0x91,0x12,0xf4,0x91,0xc9,0xa2,0x35,0x2d,0xdc,0x97,0xa1,0xdb,0x82,0xe7,0x92,0x99,0x66,0x13,0x99,0x20,0x95,0x1f,0x47,0x64,0x80,0x5e,0x5f,0x74,0x6b,0xa6,0xca,0x47,0x0b,0x24,0x72,0xa6,0x27,0xe7,0x56,0x61,0xa7,0x8e,0x62,0xa4,0xff,0x8e +.byte 0x29,0xf8,0x09,0xa4,0xbb,0x70,0x97,0x8a,0x39,0xe8,0x65,0xc8,0x52,0x23,0x9d,0xbf,0x10,0xe8,0x7d,0xbc,0x3c,0xc4,0x8b,0x1e,0x5c,0x75,0x94,0x24,0x62,0x3f,0x5b,0x2b,0x9a,0x08,0x00,0x78,0xfd,0x28,0x44,0x12,0x62,0x2a,0x6f,0x47,0x9d,0x57,0xb0,0x4e,0x3b,0xcd,0x01,0x7d,0x6e,0x62,0xe3,0x99,0x9c,0xae,0x6e,0xe2,0x70,0x7a,0x32,0xb4 +.byte 0xc1,0x19,0xb1,0x03,0x6b,0x92,0x89,0x4f,0x37,0xaf,0x36,0xee,0x5e,0x03,0x31,0x8c,0x41,0x27,0x17,0x21,0xdf,0xe4,0x34,0x97,0x8d,0xe7,0x41,0x47,0xf2,0x80,0x51,0x41,0x01,0xe4,0x0c,0x1a,0x09,0xfc,0x07,0xc3,0x94,0x07,0x6f,0xa7,0x6c,0xff,0x32,0x21,0xa5,0x01,0x8c,0xa2,0x88,0x3c,0xc8,0x57,0xe8,0x68,0x19,0x4a,0x46,0x7a,0x36,0xd2 +.byte 0x75,0x8e,0xc5,0xa4,0x84,0x91,0x13,0x7f,0xdd,0x2b,0x3c,0x2e,0xc4,0x92,0x29,0xb3,0x60,0x74,0xc8,0x81,0x58,0x0e,0xad,0x6a,0x9d,0xaa,0x81,0x49,0x26,0x0f,0xd4,0x2a,0x39,0xdd,0x4d,0x2b,0x13,0xdb,0x2e,0x72,0xe6,0x45,0x99,0xeb,0xe6,0xe5,0xd5,0x76,0xd4,0x19,0xd8,0xd7,0xa9,0x1f,0xce,0x7f,0xc4,0x1c,0x9e,0x6f,0x68,0x32,0xb1,0x26 +.byte 0xc4,0xb6,0x4e,0x9f,0xbf,0xdc,0xe0,0xde,0x54,0x9b,0xe0,0x04,0x03,0xae,0xc9,0xce,0x3a,0xcb,0x93,0xad,0xcc,0x1f,0x46,0xf6,0xbb,0xff,0x40,0x52,0x9c,0x64,0x97,0x5a,0x6f,0x8d,0x28,0x45,0x1c,0xf6,0x8b,0xcb,0xb9,0x38,0xb8,0x00,0xee,0xec,0xac,0x68,0x3f,0x50,0xcb,0x36,0x6e,0x97,0xfd,0xa5,0x1d,0x29,0x6e,0xfa,0x9f,0x4b,0x83,0xcd +.byte 0x0d,0x34,0xf3,0x1e,0x3f,0x0f,0x2e,0x89,0xeb,0xf7,0x8e,0x5f,0xe0,0x3b,0x39,0xd2,0xe8,0x87,0xe3,0xe7,0xe9,0xd0,0x1b,0x32,0x03,0x6b,0x3c,0x75,0x7d,0xe2,0x5c,0x3c,0x42,0xb4,0x46,0x69,0x0b,0xaf,0x0a,0x5d,0x1a,0x83,0x0b,0x0e,0x3c,0x5a,0x36,0xbd,0x5d,0xb6,0xad,0x4c,0xdd,0xf1,0x8d,0xbf,0x2b,0x70,0x8e,0xbc,0x92,0x95,0x1b,0x0f +.byte 0xed,0x3f,0xae,0x9e,0xa2,0x5a,0x50,0xe4,0xda,0xde,0x04,0x51,0x31,0xac,0xa4,0x0b,0x94,0xcc,0x14,0x87,0x59,0xa8,0x30,0x09,0xe6,0x46,0xb9,0x07,0x3e,0x1a,0xbf,0x5a,0x23,0x32,0xfb,0x60,0x63,0x24,0x25,0x12,0xf6,0x3e,0x2d,0xd0,0x8b,0x88,0x9b,0xe9,0x2d,0xab,0xf5,0xaf,0xba,0xbc,0xfe,0xab,0xb2,0x61,0x7a,0x7c,0xbb,0x28,0x6b,0x86 +.byte 0xe5,0xa2,0x9c,0x2c,0x5a,0x23,0x12,0x11,0xe5,0x72,0xe8,0x7b,0x6b,0x40,0xf1,0x91,0x37,0x3b,0x47,0x75,0x65,0xac,0x4d,0x22,0x59,0x75,0x13,0xb0,0x73,0xff,0x59,0xd1,0x1b,0xcc,0x05,0x1f,0xf2,0xc8,0x50,0x83,0xf1,0x28,0x38,0x0b,0xc3,0xa0,0x3b,0xe3,0x86,0xbb,0x9c,0x7e,0xc1,0xe9,0xcc,0xd9,0xb8,0x2b,0x05,0xf3,0x6f,0xc7,0x9d,0xaf +.byte 0x7b,0xb7,0x38,0x41,0xa3,0x50,0x8f,0x92,0xe0,0x63,0x35,0xb3,0x95,0x9f,0x80,0xf8,0x75,0xbb,0xf3,0x2b,0x0e,0xaf,0x32,0x6e,0xff,0xeb,0x79,0xca,0xbf,0x1c,0x4f,0x6c,0x9c,0x06,0xb2,0xeb,0x99,0x57,0x1f,0xf6,0x64,0x0b,0x81,0x57,0xba,0xf4,0x32,0x1e,0x77,0x37,0x55,0xb7,0xbc,0xba,0x70,0x0b,0x0d,0xdd,0x95,0x41,0xb5,0x17,0x5b,0x14 +.byte 0x10,0x9d,0x14,0x52,0x83,0x65,0x0a,0xf4,0x55,0xca,0xf8,0xbe,0xa6,0x3a,0xa0,0x6e,0xcc,0x83,0x84,0x65,0xb4,0x1c,0x7e,0x40,0xdd,0x32,0x36,0x5a,0x23,0x17,0x7d,0xb5,0xb9,0x38,0x48,0x5c,0x6f,0x23,0x54,0x0e,0x93,0x74,0x27,0x0f,0xfd,0x58,0xc1,0x97,0x26,0x78,0x9a,0xd3,0x85,0xc5,0xb2,0xb3,0x44,0xb7,0x36,0x85,0x69,0xde,0x3b,0xa1 +.byte 0x2b,0x11,0xef,0x75,0xfc,0xaa,0x92,0xf1,0xf1,0x72,0xa0,0x5f,0x33,0xf6,0x0b,0x72,0xdb,0xce,0x6c,0x2a,0x15,0x76,0x40,0xd4,0x85,0xff,0x96,0xe1,0x48,0xe1,0x27,0x8f,0x74,0xf3,0xfa,0xa1,0xb7,0x2a,0xb6,0x41,0x90,0x92,0x7e,0xfa,0xfc,0xad,0xa3,0x94,0x91,0x77,0xf1,0x8f,0xee,0xa2,0x64,0x47,0x01,0xb3,0x01,0x99,0x05,0xe7,0x31,0x4a +.byte 0xe8,0xd2,0x65,0x40,0x21,0xc4,0x83,0x8e,0xc9,0x89,0xda,0x16,0x7b,0xe0,0xcb,0xc0,0xc0,0x3d,0x37,0x18,0x66,0xe9,0x70,0x86,0x0b,0x6c,0xe8,0x65,0x44,0xce,0x3a,0xcd,0x84,0x1e,0xce,0x0e,0xe3,0xf9,0x77,0x12,0xfb,0xe6,0x92,0x8b,0x0d,0x7e,0x15,0x7a,0x34,0x94,0x2a,0xa7,0xc5,0x35,0xa4,0xfc,0xbe,0xa3,0x13,0x70,0xe4,0x6b,0x2f,0x71 +.byte 0x31,0xef,0xdb,0x79,0x44,0xf2,0x77,0xc7,0xc9,0x0d,0x1a,0x7b,0xff,0x34,0xf8,0xc9,0xe8,0xc9,0xc2,0xe0,0x0c,0x9e,0xd6,0xb4,0x7a,0xdb,0x1f,0x65,0xb8,0xd4,0x92,0xbf,0x7f,0x06,0x44,0xe3,0xb4,0xd8,0x14,0xe3,0x9b,0x49,0x81,0x12,0xec,0x7d,0x01,0xe2,0x50,0x2c,0x0e,0xfd,0x4b,0x84,0x3b,0x4d,0x89,0x1d,0x2e,0x4b,0xe9,0xda,0xa5,0x3f +.byte 0x19,0xc2,0x53,0x36,0x5d,0xd8,0xdc,0x6e,0xc3,0x48,0x8f,0x09,0xd5,0x95,0x4b,0x0c,0x7c,0x00,0x15,0x33,0x8e,0x1d,0x0c,0xdf,0x32,0x3b,0x93,0x1f,0xf5,0x49,0x4f,0xfd,0x8b,0x64,0xe7,0x96,0xaf,0x2f,0xc8,0xea,0xab,0x91,0x53,0x29,0xe3,0x31,0x0a,0x1c,0x6e,0xe0,0xbb,0x81,0x11,0x83,0xe0,0x07,0xfb,0x29,0x11,0x0f,0x0d,0x85,0xd4,0x61 +.byte 0x3c,0x75,0xbb,0x8a,0x23,0xb6,0xa0,0x7f,0xa4,0xbb,0x11,0xd4,0x75,0xde,0x27,0xe5,0xeb,0x11,0x5d,0x02,0xfe,0x5c,0x62,0x60,0x0f,0x6f,0x45,0x9b,0xfb,0xb7,0x32,0xa8,0x1c,0xd6,0xff,0x43,0x7b,0x53,0xee,0xa4,0x1f,0xf2,0xba,0xb6,0xb7,0xb7,0x39,0x18,0x85,0x79,0x77,0x27,0x30,0x26,0xe4,0xef,0xd1,0x39,0xc9,0xa2,0x0d,0x50,0xd7,0xef +.byte 0x9e,0xd8,0x8e,0xd2,0x74,0x1a,0x3f,0x99,0x24,0xf4,0x8b,0x4d,0x02,0x63,0x18,0x3a,0xaf,0x26,0xef,0xfc,0x1d,0xfe,0x46,0xc1,0x55,0xd7,0x92,0x65,0x2f,0xe7,0x4f,0x47,0xa8,0x2f,0x5d,0x47,0x67,0xeb,0x62,0x1d,0x69,0xa6,0x0e,0x51,0x1d,0x2c,0xed,0x6e,0x94,0xe9,0x48,0x4c,0x22,0xc2,0x93,0x79,0x6f,0x1b,0xc2,0x93,0x61,0x3d,0x8b,0xba +.byte 0xcb,0xe9,0x4a,0x88,0x5e,0x19,0x50,0x14,0xfe,0xda,0x3f,0x4d,0x47,0x54,0xfc,0x1c,0x09,0x77,0x37,0x30,0xfe,0x75,0x9f,0xdd,0xa4,0x74,0x04,0x04,0x88,0xe0,0xac,0x93,0x64,0x6f,0xbf,0x50,0xd8,0xf0,0xf7,0xa0,0xfa,0x98,0x49,0xfa,0xf7,0x6e,0xcf,0xa2,0xbf,0xb6,0x07,0x15,0x0e,0x4e,0x21,0x74,0x0a,0xa6,0xa3,0x67,0xce,0xf9,0x3b,0xd6 +.byte 0x4c,0xc8,0x43,0xe3,0x3b,0x3b,0x6a,0x86,0x62,0x3f,0x5a,0xf3,0x3f,0xf9,0xeb,0xbf,0xa3,0x2a,0x83,0x8a,0x70,0x8f,0x01,0x65,0x17,0x9a,0xa6,0x26,0x3b,0x09,0x06,0x22,0x19,0xed,0xd7,0x25,0x4b,0xd2,0x9a,0x30,0xfe,0x1c,0x82,0x68,0x16,0x04,0x0e,0x04,0x8f,0xc6,0x92,0xbe,0xe4,0x43,0x98,0x1d,0x3b,0x10,0x15,0x5b,0xef,0x4e,0x60,0x5e +.byte 0x6b,0xc9,0xde,0xb8,0x47,0x02,0x86,0x45,0x39,0x7a,0x1a,0xef,0x67,0x28,0xc5,0x40,0x73,0x2a,0xa7,0x12,0x9d,0x58,0x3a,0x34,0xc2,0xda,0x34,0xb0,0x48,0xd9,0x34,0xcd,0x18,0xe9,0x76,0x41,0x78,0x8f,0xe5,0xe8,0x3d,0xb2,0x01,0x3b,0x84,0xd1,0xca,0x5e,0x26,0x1d,0x8c,0xea,0xe1,0x46,0xa3,0xf9,0x11,0xac,0x0d,0x98,0x9f,0xd3,0x46,0x79 +.byte 0xff,0xad,0x99,0x32,0x63,0x96,0xbc,0x57,0x39,0x16,0xce,0x06,0x7e,0x63,0x78,0x7b,0x86,0x92,0x1a,0xe1,0x45,0xc0,0x73,0xe1,0xec,0xfc,0x88,0x8f,0xf8,0x36,0x0f,0x54,0x76,0x02,0x98,0x49,0x40,0xb9,0xef,0xd8,0x13,0x68,0xf5,0x1d,0x0a,0x98,0x65,0x21,0xc5,0x1a,0x22,0x4e,0x8e,0xad,0xa9,0x52,0x57,0xc4,0xc6,0xa8,0x48,0x01,0x7a,0x78 +.byte 0xc9,0xfc,0xdd,0xf3,0xc3,0x83,0xc0,0x06,0xb5,0x56,0x84,0xe2,0x0c,0x6b,0x80,0xd9,0x59,0xa1,0x3d,0xe3,0x56,0xf0,0xe3,0x3f,0x93,0x61,0xf7,0x8c,0x6b,0x40,0x65,0x6e,0x01,0xc2,0xa1,0xc1,0xb8,0x9b,0x15,0x6c,0xa1,0x18,0x4a,0x6c,0x8b,0x18,0x2d,0x8e,0x71,0x7a,0xa1,0x26,0xc1,0x4b,0xac,0x0c,0xca,0x08,0x33,0xef,0x35,0x33,0x63,0xeb +.byte 0x57,0x6e,0x7e,0x36,0xe0,0x31,0xad,0x10,0x76,0xb7,0x45,0xd9,0x3a,0x92,0x66,0x69,0x13,0x61,0x59,0x87,0xfd,0x6b,0xf1,0x46,0x0a,0x7a,0x3f,0x29,0x88,0x5b,0x7d,0xef,0x07,0x02,0xa8,0xa1,0xdc,0xd4,0x0e,0x77,0x8f,0x68,0x32,0xbd,0x8e,0xd6,0x0b,0xe4,0xd1,0x75,0xc1,0xb0,0x74,0x6c,0x0e,0xc3,0x46,0x79,0x36,0x3b,0x5f,0x0e,0xa0,0xad +.byte 0x28,0x8c,0xcb,0x01,0x8e,0x58,0x14,0x09,0xf1,0xd4,0x3b,0x2e,0xdc,0xbf,0x37,0x95,0x26,0xda,0xb6,0xcf,0xc8,0xa1,0xd4,0xec,0x72,0xf3,0x44,0xf5,0x4e,0x27,0x9b,0x2e,0x7c,0xfa,0x37,0x16,0x1d,0x7f,0x90,0x86,0xae,0x96,0x3b,0xe1,0xda,0xf7,0xc4,0x54,0x0b,0x51,0x7e,0x83,0xbe,0xed,0xd6,0x5f,0xd2,0x6d,0xbb,0xd3,0xc6,0x53,0x95,0x65 +.byte 0x3d,0x19,0xc2,0xc5,0xdf,0x47,0x00,0x2c,0x4b,0x2d,0xec,0x32,0xd5,0x28,0xb5,0x30,0xe0,0x79,0x15,0x2e,0xab,0x97,0xa8,0xcf,0xc5,0x40,0x98,0x30,0x22,0x9f,0xbc,0xdb,0x65,0x06,0xfc,0x58,0xe5,0x55,0x5b,0xe2,0xf8,0x6e,0xc6,0xfc,0xec,0x6c,0x14,0xd2,0xe3,0x9a,0x71,0x8a,0x61,0xea,0x39,0xc6,0x77,0x94,0xdf,0x7b,0x99,0x71,0xdd,0x18 +.byte 0xc6,0x03,0x2d,0x49,0xf6,0xc3,0xe8,0x2b,0x7e,0x3f,0x28,0xfc,0xc8,0xa1,0xb0,0x15,0x31,0x7e,0x83,0xb8,0x14,0x34,0x0e,0x7f,0xde,0x74,0x7b,0xbf,0xb7,0x8e,0xd9,0x31,0x90,0x16,0xb6,0x57,0x14,0x4a,0xc6,0x67,0x3d,0xb9,0x46,0x92,0xf2,0xf9,0x94,0x36,0x2b,0xd6,0x1f,0x84,0xa5,0x8c,0x0f,0xd9,0x8c,0x5f,0x97,0x7a,0x7b,0xff,0xc9,0xf5 +.byte 0x5e,0x13,0x5f,0x19,0x58,0xba,0xa6,0xe8,0x29,0xf4,0xb8,0x7e,0x98,0xb7,0xef,0x1b,0x00,0xe8,0x90,0x8f,0x86,0x4c,0xe0,0x51,0x13,0x8b,0xa1,0x37,0x40,0x38,0x51,0x2f,0x5a,0x9b,0x63,0x8f,0xce,0x9a,0x97,0x07,0x0d,0x8e,0xce,0xb1,0x66,0x89,0x78,0xca,0xa6,0x0c,0x20,0xc4,0xf1,0xe3,0xab,0xe2,0x1c,0x83,0x2b,0x46,0x97,0xe8,0x8f,0x94 +.byte 0xb4,0x71,0x40,0xde,0xa1,0x05,0x4b,0xed,0xbf,0x0c,0x46,0xe1,0x25,0xf1,0xd0,0x5a,0xdb,0x9c,0x2a,0x09,0x03,0x80,0x24,0xc1,0x22,0x02,0xa5,0xde,0xf6,0x4c,0xbc,0x93,0x37,0xa9,0x28,0xb3,0x92,0x19,0xa8,0x3f,0x71,0x90,0x62,0x78,0xaa,0x9a,0x0c,0xab,0x50,0xaf,0x89,0x2b,0xf1,0xf4,0x12,0xbd,0xc9,0xd5,0xee,0x64,0x8b,0x48,0x21,0xd6 +.byte 0xa1,0xa1,0xf2,0x68,0x4a,0xf8,0x06,0x3e,0x20,0x31,0x66,0xb7,0x2f,0x64,0x01,0x5a,0x46,0x14,0x85,0xfb,0xde,0x04,0xc3,0xe4,0xd6,0x25,0x14,0xa0,0xbe,0x4d,0x39,0xd8,0xe0,0x9b,0xb7,0x6b,0x00,0xe6,0x46,0xfb,0xcc,0xa8,0xad,0x67,0x12,0x2c,0x53,0x2c,0xb6,0x9f,0x6e,0xfe,0xbc,0xcc,0x2c,0xa8,0x09,0x17,0x00,0x8e,0xf1,0xf4,0x3e,0xa9 +.byte 0x92,0x4d,0x83,0xe6,0x3c,0xf0,0xd3,0x1c,0xaf,0x84,0x2c,0x59,0x7e,0xda,0x1e,0xfd,0x7d,0xf3,0xef,0x93,0x05,0x03,0xb0,0x76,0x69,0xb5,0x51,0xa8,0x65,0x8f,0x8a,0xf8,0x55,0x92,0x08,0xfe,0xbf,0xc1,0x95,0x98,0x58,0xb1,0xd3,0xb6,0x78,0x4f,0x2f,0x25,0xcb,0x9d,0x32,0x4f,0xa6,0xcc,0xf8,0x36,0xff,0x72,0xb3,0x93,0x3d,0xd8,0x0b,0xe6 +.byte 0xc6,0xf6,0xed,0xcc,0x2a,0xa5,0x44,0x6e,0xe2,0x2d,0x6e,0x02,0xb4,0x7c,0x24,0x7f,0x57,0x02,0x84,0x61,0x8e,0xbd,0x32,0x4e,0x41,0x92,0x01,0x1b,0x8b,0x1d,0xd1,0x1e,0x31,0xc1,0x4c,0x5b,0x0c,0xa7,0x48,0x52,0x67,0xc2,0xd9,0xdc,0x86,0x9d,0xbd,0x6c,0x19,0x95,0x00,0xf0,0xd4,0x47,0xaf,0xfe,0x5d,0xa5,0x81,0xbd,0x1b,0x42,0x62,0xce +.byte 0x18,0x1b,0xa3,0x6f,0xf5,0x0b,0xb7,0x6a,0x3d,0xe3,0xcc,0x41,0x27,0xcd,0x49,0x4b,0xe5,0x2b,0xc4,0x28,0xfa,0xbe,0xd5,0x7e,0xb7,0xac,0xab,0x64,0x3b,0xe3,0x87,0xb1,0x33,0x8b,0xa8,0xe5,0x75,0xce,0x61,0x57,0x89,0xad,0x5f,0x61,0xdd,0x7c,0x06,0x2a,0x3f,0x50,0xb8,0x7e,0xd2,0xfb,0x32,0x83,0x07,0xd4,0xc5,0x3f,0xad,0x64,0x59,0x1f +.byte 0x21,0x59,0x6f,0x1b,0xd7,0x40,0x89,0x28,0x18,0xac,0xca,0xee,0x92,0x1c,0x0d,0x88,0x98,0x7a,0x75,0x68,0xe0,0xe2,0x96,0xda,0x88,0xb3,0xc6,0x21,0x02,0x34,0xfa,0xae,0x0b,0x38,0xcf,0x1c,0x6c,0x7a,0xc9,0xd9,0x5f,0xf0,0x4c,0x73,0xfd,0xe6,0x14,0xf3,0x39,0xed,0xbc,0x28,0x2f,0xf8,0x79,0x02,0x39,0x05,0xf3,0x6a,0x88,0xd9,0x03,0xe2 +.byte 0xb9,0x65,0x81,0x3a,0x34,0x80,0x3f,0x17,0x37,0x1e,0xe8,0x7d,0x41,0x49,0xfb,0x70,0x5d,0x58,0x3a,0x71,0x7b,0x3e,0xd3,0x83,0x0b,0x1b,0x11,0xfc,0x53,0xce,0xc6,0xc4,0x39,0x55,0xbe,0xbe,0x32,0xa5,0x88,0xab,0xcd,0x38,0x78,0x3e,0x52,0xaf,0x64,0x42,0x10,0xc3,0x70,0x81,0x76,0xe9,0x7d,0x8e,0x46,0x41,0xca,0x2c,0x0c,0x4c,0x30,0xd3 +.byte 0xca,0x38,0xa3,0x97,0x2e,0x0f,0xa5,0x18,0x3b,0xaa,0x0f,0x00,0x75,0x35,0x9c,0xcd,0x28,0x83,0xd4,0xa7,0x7c,0xb9,0xcd,0xb5,0x55,0x29,0x4c,0x14,0xcd,0xfc,0x8f,0xaf,0x7d,0x69,0x4f,0xf7,0x0f,0xed,0x7c,0xa5,0x79,0x9d,0x36,0xbb,0x72,0xbc,0xf2,0x14,0xfd,0xf0,0x04,0x2a,0x89,0x1e,0xf7,0x80,0x4c,0x5e,0xb8,0xc1,0xdb,0xfa,0x3c,0x27 +.byte 0xbb,0x30,0x08,0x2b,0xd2,0xf8,0xdb,0xe0,0x8c,0x00,0xe4,0xca,0xa9,0xde,0xb0,0x14,0x5b,0xec,0x6b,0xe6,0x5c,0x90,0x17,0x02,0x59,0x5f,0x5f,0x51,0xf8,0x30,0x10,0x11,0xc4,0xdf,0x37,0x30,0x32,0xb1,0x4d,0x49,0xfe,0x82,0x87,0xd2,0x42,0xf5,0x38,0x76,0xf9,0xa5,0x28,0xfc,0x14,0xb2,0xe0,0x72,0x82,0xde,0xc8,0x47,0x9e,0x8f,0x8a,0xb5 +.byte 0x85,0x44,0x42,0x12,0xc6,0xc0,0xa5,0x60,0x5a,0x27,0xd0,0x36,0x14,0x7b,0x2a,0x83,0x98,0x92,0x08,0xe9,0x03,0xc9,0xc3,0xd3,0x36,0x97,0xba,0x5e,0xd5,0x51,0xcc,0x44,0xeb,0x81,0x76,0xae,0x28,0x94,0x0b,0xf6,0xc7,0xeb,0xae,0x61,0x6f,0x7b,0x34,0xb5,0x8c,0x5f,0x31,0xb6,0x23,0xe3,0xe7,0x4b,0x60,0xe6,0xba,0x8d,0x0e,0xd1,0xb2,0x37 +.byte 0x72,0x3d,0xc1,0x75,0x9b,0x5e,0xcb,0x0f,0xf9,0xe4,0xdb,0x82,0x4c,0xc4,0x37,0xef,0x9d,0xde,0x16,0x85,0xe9,0xc2,0x03,0xd8,0x5b,0xa1,0xff,0xfa,0xd4,0xd7,0x5c,0x34,0xb6,0x1e,0x25,0x96,0xf5,0x8b,0xc3,0xee,0x16,0x1f,0xf8,0x55,0x4e,0x1c,0x83,0x80,0x77,0x1d,0x4f,0xb6,0x95,0x1c,0x91,0x7d,0x50,0x25,0xf4,0x2a,0x5d,0x2e,0xc7,0x8a +.byte 0x14,0xf8,0xb9,0xbc,0xab,0x5b,0xcd,0x47,0xb5,0xaf,0x85,0xc0,0x34,0x27,0x7d,0x6a,0x8c,0x84,0x8a,0xae,0x68,0x60,0x0e,0xa1,0x45,0xf7,0x83,0x66,0x91,0x69,0x30,0xed,0x26,0x5e,0xf5,0x48,0x6b,0x20,0xb3,0x11,0x50,0xf7,0x70,0x9d,0x10,0x50,0x44,0x87,0xfe,0x96,0x5c,0xc6,0xa4,0xa4,0xed,0x5e,0x7f,0x3d,0x90,0x19,0xbe,0x31,0xa3,0xdd +.byte 0x44,0xbb,0x9b,0x51,0x5a,0x06,0x1d,0x2e,0xd7,0xef,0xd1,0x81,0xb6,0xec,0xc6,0x89,0xfb,0x13,0xc5,0x21,0xef,0x9a,0x1a,0x48,0xf2,0xf8,0xb3,0xa3,0xec,0x7f,0x85,0xc1,0xc6,0x8c,0x5f,0xa9,0x30,0x38,0x25,0x1e,0x8d,0xcf,0x18,0x24,0xef,0x5a,0x9a,0x14,0x31,0xc0,0x2c,0x88,0xa5,0x3f,0x50,0x8b,0xb1,0xda,0x5d,0x26,0xd9,0xd3,0x81,0xb1 +.byte 0xec,0xf0,0x42,0x88,0xd0,0x81,0x51,0xf9,0x1b,0xbc,0x43,0xa4,0x37,0xf1,0xd7,0x90,0x21,0x7e,0xa0,0x3e,0x63,0xfb,0x21,0xfa,0x12,0xfb,0xde,0xc7,0xbf,0xb3,0x58,0xe7,0x76,0x42,0x20,0x01,0x3d,0x66,0x80,0xf1,0xb8,0xaf,0xfa,0x7d,0x96,0x89,0x36,0x48,0x95,0xd9,0x6e,0x6d,0xe6,0x4f,0xff,0x2a,0x47,0x61,0xf2,0x04,0xb7,0x83,0x14,0xce +.byte 0x0a,0x3c,0x73,0x17,0x50,0x88,0x03,0x25,0x4a,0xe3,0x13,0x55,0x8b,0x7e,0x50,0x38,0xfc,0x14,0x0b,0x04,0x8e,0xa8,0x5b,0xd6,0x72,0x20,0x60,0xe9,0xaa,0x22,0x82,0x11,0xc6,0xc4,0xd7,0xb9,0xc8,0x0c,0x7e,0x05,0xfb,0x90,0xe4,0x9c,0x28,0x89,0x29,0x99,0x63,0x4d,0xec,0x7b,0x50,0xbd,0xd8,0xa3,0x5b,0x50,0x77,0x19,0x81,0x92,0xce,0x82 + +.align 5 +Lpoly: +.quad 0xffffffffffffffff,0x00000000ffffffff,0x0000000000000000,0xffffffff00000001 +LRR: // 2^512 mod P precomputed for NIST P256 polynomial +.quad 0x0000000000000003,0xfffffffbffffffff,0xfffffffffffffffe,0x00000004fffffffd +Lone_mont: +.quad 0x0000000000000001,0xffffffff00000000,0xffffffffffffffff,0x00000000fffffffe +Lone: +.quad 1,0,0,0 +Lord: +.quad 0xf3b9cac2fc632551,0xbce6faada7179e84,0xffffffffffffffff,0xffffffff00000000 +LordK: +.quad 0xccd1c8aaee00bc4f +.byte 69,67,80,95,78,73,83,84,90,50,53,54,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 + +// void ecp_nistz256_to_mont(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_to_mont + +.align 6 +_ecp_nistz256_to_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-32]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + + ldr x3,LRR // bp[0] + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + adr x2,LRR // &bp[0] + + bl __ecp_nistz256_mul_mont + + ldp x19,x20,[sp,#16] + ldp x29,x30,[sp],#32 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_from_mont(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_from_mont + +.align 4 +_ecp_nistz256_from_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-32]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + + mov x3,#1 // bp[0] + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + adr x2,Lone // &bp[0] + + bl __ecp_nistz256_mul_mont + + ldp x19,x20,[sp,#16] + ldp x29,x30,[sp],#32 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_mul_mont(BN_ULONG x0[4],const BN_ULONG x1[4], +// const BN_ULONG x2[4]); +.globl _ecp_nistz256_mul_mont + +.align 4 +_ecp_nistz256_mul_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-32]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + + ldr x3,[x2] // bp[0] + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_mul_mont + + ldp x19,x20,[sp,#16] + ldp x29,x30,[sp],#32 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_sqr_mont(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_sqr_mont + +.align 4 +_ecp_nistz256_sqr_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-32]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_sqr_mont + + ldp x19,x20,[sp,#16] + ldp x29,x30,[sp],#32 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_add(BN_ULONG x0[4],const BN_ULONG x1[4], +// const BN_ULONG x2[4]); +.globl _ecp_nistz256_add + +.align 4 +_ecp_nistz256_add: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x8,x9,[x2] + ldp x16,x17,[x1,#16] + ldp x10,x11,[x2,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_add + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_div_by_2(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_div_by_2 + +.align 4 +_ecp_nistz256_div_by_2: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x16,x17,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_div_by_2 + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_mul_by_2(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_mul_by_2 + +.align 4 +_ecp_nistz256_mul_by_2: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x16,x17,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + mov x8,x14 + mov x9,x15 + mov x10,x16 + mov x11,x17 + + bl __ecp_nistz256_add // ret = a+a // 2*a + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_mul_by_3(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_mul_by_3 + +.align 4 +_ecp_nistz256_mul_by_3: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x16,x17,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + mov x8,x14 + mov x9,x15 + mov x10,x16 + mov x11,x17 + mov x4,x14 + mov x5,x15 + mov x6,x16 + mov x7,x17 + + bl __ecp_nistz256_add // ret = a+a // 2*a + + mov x8,x4 + mov x9,x5 + mov x10,x6 + mov x11,x7 + + bl __ecp_nistz256_add // ret += a // 2*a+a=3*a + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_sub(BN_ULONG x0[4],const BN_ULONG x1[4], +// const BN_ULONG x2[4]); +.globl _ecp_nistz256_sub + +.align 4 +_ecp_nistz256_sub: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x16,x17,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_sub_from + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_neg(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_neg + +.align 4 +_ecp_nistz256_neg: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + mov x2,x1 + mov x14,xzr // a = 0 + mov x15,xzr + mov x16,xzr + mov x17,xzr + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_sub_from + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// note that __ecp_nistz256_mul_mont expects a[0-3] input pre-loaded +// to x4-x7 and b[0] - to x3 + +.align 4 +__ecp_nistz256_mul_mont: + mul x14,x4,x3 // a[0]*b[0] + umulh x8,x4,x3 + + mul x15,x5,x3 // a[1]*b[0] + umulh x9,x5,x3 + + mul x16,x6,x3 // a[2]*b[0] + umulh x10,x6,x3 + + mul x17,x7,x3 // a[3]*b[0] + umulh x11,x7,x3 + ldr x3,[x2,#8] // b[1] + + adds x15,x15,x8 // accumulate high parts of multiplication + lsl x8,x14,#32 + adcs x16,x16,x9 + lsr x9,x14,#32 + adcs x17,x17,x10 + adc x19,xzr,x11 + mov x20,xzr + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + mul x8,x4,x3 // lo(a[0]*b[i]) + adcs x15,x16,x9 + mul x9,x5,x3 // lo(a[1]*b[i]) + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + mul x10,x6,x3 // lo(a[2]*b[i]) + adcs x17,x19,x11 + mul x11,x7,x3 // lo(a[3]*b[i]) + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts of multiplication + umulh x8,x4,x3 // hi(a[0]*b[i]) + adcs x15,x15,x9 + umulh x9,x5,x3 // hi(a[1]*b[i]) + adcs x16,x16,x10 + umulh x10,x6,x3 // hi(a[2]*b[i]) + adcs x17,x17,x11 + umulh x11,x7,x3 // hi(a[3]*b[i]) + adc x19,x19,xzr + ldr x3,[x2,#8*(1+1)] // b[1+1] + adds x15,x15,x8 // accumulate high parts of multiplication + lsl x8,x14,#32 + adcs x16,x16,x9 + lsr x9,x14,#32 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + mul x8,x4,x3 // lo(a[0]*b[i]) + adcs x15,x16,x9 + mul x9,x5,x3 // lo(a[1]*b[i]) + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + mul x10,x6,x3 // lo(a[2]*b[i]) + adcs x17,x19,x11 + mul x11,x7,x3 // lo(a[3]*b[i]) + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts of multiplication + umulh x8,x4,x3 // hi(a[0]*b[i]) + adcs x15,x15,x9 + umulh x9,x5,x3 // hi(a[1]*b[i]) + adcs x16,x16,x10 + umulh x10,x6,x3 // hi(a[2]*b[i]) + adcs x17,x17,x11 + umulh x11,x7,x3 // hi(a[3]*b[i]) + adc x19,x19,xzr + ldr x3,[x2,#8*(2+1)] // b[2+1] + adds x15,x15,x8 // accumulate high parts of multiplication + lsl x8,x14,#32 + adcs x16,x16,x9 + lsr x9,x14,#32 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + mul x8,x4,x3 // lo(a[0]*b[i]) + adcs x15,x16,x9 + mul x9,x5,x3 // lo(a[1]*b[i]) + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + mul x10,x6,x3 // lo(a[2]*b[i]) + adcs x17,x19,x11 + mul x11,x7,x3 // lo(a[3]*b[i]) + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts of multiplication + umulh x8,x4,x3 // hi(a[0]*b[i]) + adcs x15,x15,x9 + umulh x9,x5,x3 // hi(a[1]*b[i]) + adcs x16,x16,x10 + umulh x10,x6,x3 // hi(a[2]*b[i]) + adcs x17,x17,x11 + umulh x11,x7,x3 // hi(a[3]*b[i]) + adc x19,x19,xzr + adds x15,x15,x8 // accumulate high parts of multiplication + lsl x8,x14,#32 + adcs x16,x16,x9 + lsr x9,x14,#32 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + // last reduction + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + adcs x17,x19,x11 + adc x19,x20,xzr + + adds x8,x14,#1 // subs x8,x14,#-1 // tmp = ret-modulus + sbcs x9,x15,x12 + sbcs x10,x16,xzr + sbcs x11,x17,x13 + sbcs xzr,x19,xzr // did it borrow? + + csel x14,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x15,x15,x9,lo + csel x16,x16,x10,lo + stp x14,x15,[x0] + csel x17,x17,x11,lo + stp x16,x17,[x0,#16] + + ret + + +// note that __ecp_nistz256_sqr_mont expects a[0-3] input pre-loaded +// to x4-x7 + +.align 4 +__ecp_nistz256_sqr_mont: + // | | | | | |a1*a0| | + // | | | | |a2*a0| | | + // | |a3*a2|a3*a0| | | | + // | | | |a2*a1| | | | + // | | |a3*a1| | | | | + // *| | | | | | | | 2| + // +|a3*a3|a2*a2|a1*a1|a0*a0| + // |--+--+--+--+--+--+--+--| + // |A7|A6|A5|A4|A3|A2|A1|A0|, where Ax is , i.e. follow + // + // "can't overflow" below mark carrying into high part of + // multiplication result, which can't overflow, because it + // can never be all ones. + + mul x15,x5,x4 // a[1]*a[0] + umulh x9,x5,x4 + mul x16,x6,x4 // a[2]*a[0] + umulh x10,x6,x4 + mul x17,x7,x4 // a[3]*a[0] + umulh x19,x7,x4 + + adds x16,x16,x9 // accumulate high parts of multiplication + mul x8,x6,x5 // a[2]*a[1] + umulh x9,x6,x5 + adcs x17,x17,x10 + mul x10,x7,x5 // a[3]*a[1] + umulh x11,x7,x5 + adc x19,x19,xzr // can't overflow + + mul x20,x7,x6 // a[3]*a[2] + umulh x1,x7,x6 + + adds x9,x9,x10 // accumulate high parts of multiplication + mul x14,x4,x4 // a[0]*a[0] + adc x10,x11,xzr // can't overflow + + adds x17,x17,x8 // accumulate low parts of multiplication + umulh x4,x4,x4 + adcs x19,x19,x9 + mul x9,x5,x5 // a[1]*a[1] + adcs x20,x20,x10 + umulh x5,x5,x5 + adc x1,x1,xzr // can't overflow + + adds x15,x15,x15 // acc[1-6]*=2 + mul x10,x6,x6 // a[2]*a[2] + adcs x16,x16,x16 + umulh x6,x6,x6 + adcs x17,x17,x17 + mul x11,x7,x7 // a[3]*a[3] + adcs x19,x19,x19 + umulh x7,x7,x7 + adcs x20,x20,x20 + adcs x1,x1,x1 + adc x2,xzr,xzr + + adds x15,x15,x4 // +a[i]*a[i] + adcs x16,x16,x9 + adcs x17,x17,x5 + adcs x19,x19,x10 + adcs x20,x20,x6 + lsl x8,x14,#32 + adcs x1,x1,x11 + lsr x9,x14,#32 + adc x2,x2,x7 + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + lsl x8,x14,#32 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + lsr x9,x14,#32 + adc x17,x11,xzr // can't overflow + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + lsl x8,x14,#32 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + lsr x9,x14,#32 + adc x17,x11,xzr // can't overflow + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + lsl x8,x14,#32 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + lsr x9,x14,#32 + adc x17,x11,xzr // can't overflow + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + adc x17,x11,xzr // can't overflow + + adds x14,x14,x19 // accumulate upper half + adcs x15,x15,x20 + adcs x16,x16,x1 + adcs x17,x17,x2 + adc x19,xzr,xzr + + adds x8,x14,#1 // subs x8,x14,#-1 // tmp = ret-modulus + sbcs x9,x15,x12 + sbcs x10,x16,xzr + sbcs x11,x17,x13 + sbcs xzr,x19,xzr // did it borrow? + + csel x14,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x15,x15,x9,lo + csel x16,x16,x10,lo + stp x14,x15,[x0] + csel x17,x17,x11,lo + stp x16,x17,[x0,#16] + + ret + + +// Note that __ecp_nistz256_add expects both input vectors pre-loaded to +// x4-x7 and x8-x11. This is done because it's used in multiple +// contexts, e.g. in multiplication by 2 and 3... + +.align 4 +__ecp_nistz256_add: + adds x14,x14,x8 // ret = a+b + adcs x15,x15,x9 + adcs x16,x16,x10 + adcs x17,x17,x11 + adc x1,xzr,xzr // zap x1 + + adds x8,x14,#1 // subs x8,x4,#-1 // tmp = ret-modulus + sbcs x9,x15,x12 + sbcs x10,x16,xzr + sbcs x11,x17,x13 + sbcs xzr,x1,xzr // did subtraction borrow? + + csel x14,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x15,x15,x9,lo + csel x16,x16,x10,lo + stp x14,x15,[x0] + csel x17,x17,x11,lo + stp x16,x17,[x0,#16] + + ret + + + +.align 4 +__ecp_nistz256_sub_from: + ldp x8,x9,[x2] + ldp x10,x11,[x2,#16] + subs x14,x14,x8 // ret = a-b + sbcs x15,x15,x9 + sbcs x16,x16,x10 + sbcs x17,x17,x11 + sbc x1,xzr,xzr // zap x1 + + subs x8,x14,#1 // adds x8,x4,#-1 // tmp = ret+modulus + adcs x9,x15,x12 + adcs x10,x16,xzr + adc x11,x17,x13 + cmp x1,xzr // did subtraction borrow? + + csel x14,x14,x8,eq // ret = borrow ? ret+modulus : ret + csel x15,x15,x9,eq + csel x16,x16,x10,eq + stp x14,x15,[x0] + csel x17,x17,x11,eq + stp x16,x17,[x0,#16] + + ret + + + +.align 4 +__ecp_nistz256_sub_morf: + ldp x8,x9,[x2] + ldp x10,x11,[x2,#16] + subs x14,x8,x14 // ret = b-a + sbcs x15,x9,x15 + sbcs x16,x10,x16 + sbcs x17,x11,x17 + sbc x1,xzr,xzr // zap x1 + + subs x8,x14,#1 // adds x8,x4,#-1 // tmp = ret+modulus + adcs x9,x15,x12 + adcs x10,x16,xzr + adc x11,x17,x13 + cmp x1,xzr // did subtraction borrow? + + csel x14,x14,x8,eq // ret = borrow ? ret+modulus : ret + csel x15,x15,x9,eq + csel x16,x16,x10,eq + stp x14,x15,[x0] + csel x17,x17,x11,eq + stp x16,x17,[x0,#16] + + ret + + + +.align 4 +__ecp_nistz256_div_by_2: + subs x8,x14,#1 // adds x8,x4,#-1 // tmp = a+modulus + adcs x9,x15,x12 + adcs x10,x16,xzr + adcs x11,x17,x13 + adc x1,xzr,xzr // zap x1 + tst x14,#1 // is a even? + + csel x14,x14,x8,eq // ret = even ? a : a+modulus + csel x15,x15,x9,eq + csel x16,x16,x10,eq + csel x17,x17,x11,eq + csel x1,xzr,x1,eq + + lsr x14,x14,#1 // ret >>= 1 + orr x14,x14,x15,lsl#63 + lsr x15,x15,#1 + orr x15,x15,x16,lsl#63 + lsr x16,x16,#1 + orr x16,x16,x17,lsl#63 + lsr x17,x17,#1 + stp x14,x15,[x0] + orr x17,x17,x1,lsl#63 + stp x16,x17,[x0,#16] + + ret + +.globl _ecp_nistz256_point_double + +.align 5 +_ecp_nistz256_point_double: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + sub sp,sp,#32*4 + +Ldouble_shortcut: + ldp x14,x15,[x1,#32] + mov x21,x0 + ldp x16,x17,[x1,#48] + mov x22,x1 + ldr x12,Lpoly+8 + mov x8,x14 + ldr x13,Lpoly+24 + mov x9,x15 + ldp x4,x5,[x22,#64] // forward load for p256_sqr_mont + mov x10,x16 + mov x11,x17 + ldp x6,x7,[x22,#64+16] + add x0,sp,#0 + bl __ecp_nistz256_add // p256_mul_by_2(S, in_y); + + add x0,sp,#64 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Zsqr, in_z); + + ldp x8,x9,[x22] + ldp x10,x11,[x22,#16] + mov x4,x14 // put Zsqr aside for p256_sub + mov x5,x15 + mov x6,x16 + mov x7,x17 + add x0,sp,#32 + bl __ecp_nistz256_add // p256_add(M, Zsqr, in_x); + + add x2,x22,#0 + mov x14,x4 // restore Zsqr + mov x15,x5 + ldp x4,x5,[sp,#0] // forward load for p256_sqr_mont + mov x16,x6 + mov x17,x7 + ldp x6,x7,[sp,#0+16] + add x0,sp,#64 + bl __ecp_nistz256_sub_morf // p256_sub(Zsqr, in_x, Zsqr); + + add x0,sp,#0 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(S, S); + + ldr x3,[x22,#32] + ldp x4,x5,[x22,#64] + ldp x6,x7,[x22,#64+16] + add x2,x22,#32 + add x0,sp,#96 + bl __ecp_nistz256_mul_mont // p256_mul_mont(tmp0, in_z, in_y); + + mov x8,x14 + mov x9,x15 + ldp x4,x5,[sp,#0] // forward load for p256_sqr_mont + mov x10,x16 + mov x11,x17 + ldp x6,x7,[sp,#0+16] + add x0,x21,#64 + bl __ecp_nistz256_add // p256_mul_by_2(res_z, tmp0); + + add x0,sp,#96 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(tmp0, S); + + ldr x3,[sp,#64] // forward load for p256_mul_mont + ldp x4,x5,[sp,#32] + ldp x6,x7,[sp,#32+16] + add x0,x21,#32 + bl __ecp_nistz256_div_by_2 // p256_div_by_2(res_y, tmp0); + + add x2,sp,#64 + add x0,sp,#32 + bl __ecp_nistz256_mul_mont // p256_mul_mont(M, M, Zsqr); + + mov x8,x14 // duplicate M + mov x9,x15 + mov x10,x16 + mov x11,x17 + mov x4,x14 // put M aside + mov x5,x15 + mov x6,x16 + mov x7,x17 + add x0,sp,#32 + bl __ecp_nistz256_add + mov x8,x4 // restore M + mov x9,x5 + ldr x3,[x22] // forward load for p256_mul_mont + mov x10,x6 + ldp x4,x5,[sp,#0] + mov x11,x7 + ldp x6,x7,[sp,#0+16] + bl __ecp_nistz256_add // p256_mul_by_3(M, M); + + add x2,x22,#0 + add x0,sp,#0 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S, S, in_x); + + mov x8,x14 + mov x9,x15 + ldp x4,x5,[sp,#32] // forward load for p256_sqr_mont + mov x10,x16 + mov x11,x17 + ldp x6,x7,[sp,#32+16] + add x0,sp,#96 + bl __ecp_nistz256_add // p256_mul_by_2(tmp0, S); + + add x0,x21,#0 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(res_x, M); + + add x2,sp,#96 + bl __ecp_nistz256_sub_from // p256_sub(res_x, res_x, tmp0); + + add x2,sp,#0 + add x0,sp,#0 + bl __ecp_nistz256_sub_morf // p256_sub(S, S, res_x); + + ldr x3,[sp,#32] + mov x4,x14 // copy S + mov x5,x15 + mov x6,x16 + mov x7,x17 + add x2,sp,#32 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S, S, M); + + add x2,x21,#32 + add x0,x21,#32 + bl __ecp_nistz256_sub_from // p256_sub(res_y, S, res_y); + + add sp,x29,#0 // destroy frame + ldp x19,x20,[x29,#16] + ldp x21,x22,[x29,#32] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + +.globl _ecp_nistz256_point_add + +.align 5 +_ecp_nistz256_point_add: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#32*12 + + ldp x4,x5,[x2,#64] // in2_z + ldp x6,x7,[x2,#64+16] + mov x21,x0 + mov x22,x1 + mov x23,x2 + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + orr x8,x4,x5 + orr x10,x6,x7 + orr x25,x8,x10 + cmp x25,#0 + csetm x25,ne // ~in2infty + add x0,sp,#192 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Z2sqr, in2_z); + + ldp x4,x5,[x22,#64] // in1_z + ldp x6,x7,[x22,#64+16] + orr x8,x4,x5 + orr x10,x6,x7 + orr x24,x8,x10 + cmp x24,#0 + csetm x24,ne // ~in1infty + add x0,sp,#128 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Z1sqr, in1_z); + + ldr x3,[x23,#64] + ldp x4,x5,[sp,#192] + ldp x6,x7,[sp,#192+16] + add x2,x23,#64 + add x0,sp,#320 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S1, Z2sqr, in2_z); + + ldr x3,[x22,#64] + ldp x4,x5,[sp,#128] + ldp x6,x7,[sp,#128+16] + add x2,x22,#64 + add x0,sp,#352 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, Z1sqr, in1_z); + + ldr x3,[x22,#32] + ldp x4,x5,[sp,#320] + ldp x6,x7,[sp,#320+16] + add x2,x22,#32 + add x0,sp,#320 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S1, S1, in1_y); + + ldr x3,[x23,#32] + ldp x4,x5,[sp,#352] + ldp x6,x7,[sp,#352+16] + add x2,x23,#32 + add x0,sp,#352 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, S2, in2_y); + + add x2,sp,#320 + ldr x3,[sp,#192] // forward load for p256_mul_mont + ldp x4,x5,[x22] + ldp x6,x7,[x22,#16] + add x0,sp,#160 + bl __ecp_nistz256_sub_from // p256_sub(R, S2, S1); + + orr x14,x14,x15 // see if result is zero + orr x16,x16,x17 + orr x26,x14,x16 // ~is_equal(S1,S2) + + add x2,sp,#192 + add x0,sp,#256 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U1, in1_x, Z2sqr); + + ldr x3,[sp,#128] + ldp x4,x5,[x23] + ldp x6,x7,[x23,#16] + add x2,sp,#128 + add x0,sp,#288 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, in2_x, Z1sqr); + + add x2,sp,#256 + ldp x4,x5,[sp,#160] // forward load for p256_sqr_mont + ldp x6,x7,[sp,#160+16] + add x0,sp,#96 + bl __ecp_nistz256_sub_from // p256_sub(H, U2, U1); + + orr x14,x14,x15 // see if result is zero + orr x16,x16,x17 + orr x14,x14,x16 // ~is_equal(U1,U2) + + mvn x27,x24 // -1/0 -> 0/-1 + mvn x28,x25 // -1/0 -> 0/-1 + orr x14,x14,x27 + orr x14,x14,x28 + orr x14,x14,x26 + cbnz x14,Ladd_proceed // if(~is_equal(U1,U2) | in1infty | in2infty | ~is_equal(S1,S2)) + +Ladd_double: + mov x1,x22 + mov x0,x21 + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + add sp,sp,#32*(12-4) // difference in stack frames + b Ldouble_shortcut + +.align 4 +Ladd_proceed: + add x0,sp,#192 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Rsqr, R); + + ldr x3,[x22,#64] + ldp x4,x5,[sp,#96] + ldp x6,x7,[sp,#96+16] + add x2,x22,#64 + add x0,sp,#64 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_z, H, in1_z); + + ldp x4,x5,[sp,#96] + ldp x6,x7,[sp,#96+16] + add x0,sp,#128 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Hsqr, H); + + ldr x3,[x23,#64] + ldp x4,x5,[sp,#64] + ldp x6,x7,[sp,#64+16] + add x2,x23,#64 + add x0,sp,#64 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_z, res_z, in2_z); + + ldr x3,[sp,#96] + ldp x4,x5,[sp,#128] + ldp x6,x7,[sp,#128+16] + add x2,sp,#96 + add x0,sp,#224 + bl __ecp_nistz256_mul_mont // p256_mul_mont(Hcub, Hsqr, H); + + ldr x3,[sp,#128] + ldp x4,x5,[sp,#256] + ldp x6,x7,[sp,#256+16] + add x2,sp,#128 + add x0,sp,#288 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, U1, Hsqr); + + mov x8,x14 + mov x9,x15 + mov x10,x16 + mov x11,x17 + add x0,sp,#128 + bl __ecp_nistz256_add // p256_mul_by_2(Hsqr, U2); + + add x2,sp,#192 + add x0,sp,#0 + bl __ecp_nistz256_sub_morf // p256_sub(res_x, Rsqr, Hsqr); + + add x2,sp,#224 + bl __ecp_nistz256_sub_from // p256_sub(res_x, res_x, Hcub); + + add x2,sp,#288 + ldr x3,[sp,#224] // forward load for p256_mul_mont + ldp x4,x5,[sp,#320] + ldp x6,x7,[sp,#320+16] + add x0,sp,#32 + bl __ecp_nistz256_sub_morf // p256_sub(res_y, U2, res_x); + + add x2,sp,#224 + add x0,sp,#352 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, S1, Hcub); + + ldr x3,[sp,#160] + ldp x4,x5,[sp,#32] + ldp x6,x7,[sp,#32+16] + add x2,sp,#160 + add x0,sp,#32 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_y, res_y, R); + + add x2,sp,#352 + bl __ecp_nistz256_sub_from // p256_sub(res_y, res_y, S2); + + ldp x4,x5,[sp,#0] // res + ldp x6,x7,[sp,#0+16] + ldp x8,x9,[x23] // in2 + ldp x10,x11,[x23,#16] + ldp x14,x15,[x22,#0] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#0+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + ldp x4,x5,[sp,#0+0+32] // res + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + ldp x6,x7,[sp,#0+0+48] + csel x14,x8,x14,ne + csel x15,x9,x15,ne + ldp x8,x9,[x23,#0+32] // in2 + csel x16,x10,x16,ne + csel x17,x11,x17,ne + ldp x10,x11,[x23,#0+48] + stp x14,x15,[x21,#0] + stp x16,x17,[x21,#0+16] + ldp x14,x15,[x22,#32] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#32+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + ldp x4,x5,[sp,#0+32+32] // res + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + ldp x6,x7,[sp,#0+32+48] + csel x14,x8,x14,ne + csel x15,x9,x15,ne + ldp x8,x9,[x23,#32+32] // in2 + csel x16,x10,x16,ne + csel x17,x11,x17,ne + ldp x10,x11,[x23,#32+48] + stp x14,x15,[x21,#32] + stp x16,x17,[x21,#32+16] + ldp x14,x15,[x22,#64] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#64+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + csel x14,x8,x14,ne + csel x15,x9,x15,ne + csel x16,x10,x16,ne + csel x17,x11,x17,ne + stp x14,x15,[x21,#64] + stp x16,x17,[x21,#64+16] + +Ladd_done: + add sp,x29,#0 // destroy frame + ldp x19,x20,[x29,#16] + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + +.globl _ecp_nistz256_point_add_affine + +.align 5 +_ecp_nistz256_point_add_affine: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + sub sp,sp,#32*10 + + mov x21,x0 + mov x22,x1 + mov x23,x2 + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + ldp x4,x5,[x1,#64] // in1_z + ldp x6,x7,[x1,#64+16] + orr x8,x4,x5 + orr x10,x6,x7 + orr x24,x8,x10 + cmp x24,#0 + csetm x24,ne // ~in1infty + + ldp x14,x15,[x2] // in2_x + ldp x16,x17,[x2,#16] + ldp x8,x9,[x2,#32] // in2_y + ldp x10,x11,[x2,#48] + orr x14,x14,x15 + orr x16,x16,x17 + orr x8,x8,x9 + orr x10,x10,x11 + orr x14,x14,x16 + orr x8,x8,x10 + orr x25,x14,x8 + cmp x25,#0 + csetm x25,ne // ~in2infty + + add x0,sp,#128 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Z1sqr, in1_z); + + mov x4,x14 + mov x5,x15 + mov x6,x16 + mov x7,x17 + ldr x3,[x23] + add x2,x23,#0 + add x0,sp,#96 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, Z1sqr, in2_x); + + add x2,x22,#0 + ldr x3,[x22,#64] // forward load for p256_mul_mont + ldp x4,x5,[sp,#128] + ldp x6,x7,[sp,#128+16] + add x0,sp,#160 + bl __ecp_nistz256_sub_from // p256_sub(H, U2, in1_x); + + add x2,x22,#64 + add x0,sp,#128 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, Z1sqr, in1_z); + + ldr x3,[x22,#64] + ldp x4,x5,[sp,#160] + ldp x6,x7,[sp,#160+16] + add x2,x22,#64 + add x0,sp,#64 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_z, H, in1_z); + + ldr x3,[x23,#32] + ldp x4,x5,[sp,#128] + ldp x6,x7,[sp,#128+16] + add x2,x23,#32 + add x0,sp,#128 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, S2, in2_y); + + add x2,x22,#32 + ldp x4,x5,[sp,#160] // forward load for p256_sqr_mont + ldp x6,x7,[sp,#160+16] + add x0,sp,#192 + bl __ecp_nistz256_sub_from // p256_sub(R, S2, in1_y); + + add x0,sp,#224 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Hsqr, H); + + ldp x4,x5,[sp,#192] + ldp x6,x7,[sp,#192+16] + add x0,sp,#288 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Rsqr, R); + + ldr x3,[sp,#160] + ldp x4,x5,[sp,#224] + ldp x6,x7,[sp,#224+16] + add x2,sp,#160 + add x0,sp,#256 + bl __ecp_nistz256_mul_mont // p256_mul_mont(Hcub, Hsqr, H); + + ldr x3,[x22] + ldp x4,x5,[sp,#224] + ldp x6,x7,[sp,#224+16] + add x2,x22,#0 + add x0,sp,#96 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, in1_x, Hsqr); + + mov x8,x14 + mov x9,x15 + mov x10,x16 + mov x11,x17 + add x0,sp,#224 + bl __ecp_nistz256_add // p256_mul_by_2(Hsqr, U2); + + add x2,sp,#288 + add x0,sp,#0 + bl __ecp_nistz256_sub_morf // p256_sub(res_x, Rsqr, Hsqr); + + add x2,sp,#256 + bl __ecp_nistz256_sub_from // p256_sub(res_x, res_x, Hcub); + + add x2,sp,#96 + ldr x3,[x22,#32] // forward load for p256_mul_mont + ldp x4,x5,[sp,#256] + ldp x6,x7,[sp,#256+16] + add x0,sp,#32 + bl __ecp_nistz256_sub_morf // p256_sub(res_y, U2, res_x); + + add x2,x22,#32 + add x0,sp,#128 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, in1_y, Hcub); + + ldr x3,[sp,#192] + ldp x4,x5,[sp,#32] + ldp x6,x7,[sp,#32+16] + add x2,sp,#192 + add x0,sp,#32 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_y, res_y, R); + + add x2,sp,#128 + bl __ecp_nistz256_sub_from // p256_sub(res_y, res_y, S2); + + ldp x4,x5,[sp,#0] // res + ldp x6,x7,[sp,#0+16] + ldp x8,x9,[x23] // in2 + ldp x10,x11,[x23,#16] + ldp x14,x15,[x22,#0] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#0+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + ldp x4,x5,[sp,#0+0+32] // res + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + ldp x6,x7,[sp,#0+0+48] + csel x14,x8,x14,ne + csel x15,x9,x15,ne + ldp x8,x9,[x23,#0+32] // in2 + csel x16,x10,x16,ne + csel x17,x11,x17,ne + ldp x10,x11,[x23,#0+48] + stp x14,x15,[x21,#0] + stp x16,x17,[x21,#0+16] + adr x23,Lone_mont-64 + ldp x14,x15,[x22,#32] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#32+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + ldp x4,x5,[sp,#0+32+32] // res + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + ldp x6,x7,[sp,#0+32+48] + csel x14,x8,x14,ne + csel x15,x9,x15,ne + ldp x8,x9,[x23,#32+32] // in2 + csel x16,x10,x16,ne + csel x17,x11,x17,ne + ldp x10,x11,[x23,#32+48] + stp x14,x15,[x21,#32] + stp x16,x17,[x21,#32+16] + ldp x14,x15,[x22,#64] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#64+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + csel x14,x8,x14,ne + csel x15,x9,x15,ne + csel x16,x10,x16,ne + csel x17,x11,x17,ne + stp x14,x15,[x21,#64] + stp x16,x17,[x21,#64+16] + + add sp,x29,#0 // destroy frame + ldp x19,x20,[x29,#16] + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x29,x30,[sp],#80 +.long 0xd50323bf // autiasp + ret + +//////////////////////////////////////////////////////////////////////// +// void ecp_nistz256_ord_mul_mont(uint64_t res[4], uint64_t a[4], +// uint64_t b[4]); +.globl _ecp_nistz256_ord_mul_mont + +.align 4 +_ecp_nistz256_ord_mul_mont: + stp x29,x30,[sp,#-64]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + + adr x23,Lord + ldr x3,[x2] // bp[0] + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + + ldp x12,x13,[x23,#0] + ldp x21,x22,[x23,#16] + ldr x23,[x23,#32] + + mul x14,x4,x3 // a[0]*b[0] + umulh x8,x4,x3 + + mul x15,x5,x3 // a[1]*b[0] + umulh x9,x5,x3 + + mul x16,x6,x3 // a[2]*b[0] + umulh x10,x6,x3 + + mul x17,x7,x3 // a[3]*b[0] + umulh x19,x7,x3 + + mul x24,x14,x23 + + adds x15,x15,x8 // accumulate high parts of multiplication + adcs x16,x16,x9 + adcs x17,x17,x10 + adc x19,x19,xzr + mov x20,xzr + ldr x3,[x2,#8*1] // b[i] + + lsl x8,x24,#32 + subs x16,x16,x24 + lsr x9,x24,#32 + sbcs x17,x17,x8 + sbcs x19,x19,x9 + sbc x20,x20,xzr + + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + mul x8,x4,x3 + adc x11,x11,xzr + mul x9,x5,x3 + + adds x14,x15,x10 + mul x10,x6,x3 + adcs x15,x16,x11 + mul x11,x7,x3 + adcs x16,x17,x24 + adcs x17,x19,x24 + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts + umulh x8,x4,x3 + adcs x15,x15,x9 + umulh x9,x5,x3 + adcs x16,x16,x10 + umulh x10,x6,x3 + adcs x17,x17,x11 + umulh x11,x7,x3 + adc x19,x19,xzr + mul x24,x14,x23 + adds x15,x15,x8 // accumulate high parts + adcs x16,x16,x9 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + ldr x3,[x2,#8*2] // b[i] + + lsl x8,x24,#32 + subs x16,x16,x24 + lsr x9,x24,#32 + sbcs x17,x17,x8 + sbcs x19,x19,x9 + sbc x20,x20,xzr + + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + mul x8,x4,x3 + adc x11,x11,xzr + mul x9,x5,x3 + + adds x14,x15,x10 + mul x10,x6,x3 + adcs x15,x16,x11 + mul x11,x7,x3 + adcs x16,x17,x24 + adcs x17,x19,x24 + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts + umulh x8,x4,x3 + adcs x15,x15,x9 + umulh x9,x5,x3 + adcs x16,x16,x10 + umulh x10,x6,x3 + adcs x17,x17,x11 + umulh x11,x7,x3 + adc x19,x19,xzr + mul x24,x14,x23 + adds x15,x15,x8 // accumulate high parts + adcs x16,x16,x9 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + ldr x3,[x2,#8*3] // b[i] + + lsl x8,x24,#32 + subs x16,x16,x24 + lsr x9,x24,#32 + sbcs x17,x17,x8 + sbcs x19,x19,x9 + sbc x20,x20,xzr + + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + mul x8,x4,x3 + adc x11,x11,xzr + mul x9,x5,x3 + + adds x14,x15,x10 + mul x10,x6,x3 + adcs x15,x16,x11 + mul x11,x7,x3 + adcs x16,x17,x24 + adcs x17,x19,x24 + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts + umulh x8,x4,x3 + adcs x15,x15,x9 + umulh x9,x5,x3 + adcs x16,x16,x10 + umulh x10,x6,x3 + adcs x17,x17,x11 + umulh x11,x7,x3 + adc x19,x19,xzr + mul x24,x14,x23 + adds x15,x15,x8 // accumulate high parts + adcs x16,x16,x9 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + lsl x8,x24,#32 // last reduction + subs x16,x16,x24 + lsr x9,x24,#32 + sbcs x17,x17,x8 + sbcs x19,x19,x9 + sbc x20,x20,xzr + + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + adc x11,x11,xzr + + adds x14,x15,x10 + adcs x15,x16,x11 + adcs x16,x17,x24 + adcs x17,x19,x24 + adc x19,x20,xzr + + subs x8,x14,x12 // ret -= modulus + sbcs x9,x15,x13 + sbcs x10,x16,x21 + sbcs x11,x17,x22 + sbcs xzr,x19,xzr + + csel x14,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x15,x15,x9,lo + csel x16,x16,x10,lo + stp x14,x15,[x0] + csel x17,x17,x11,lo + stp x16,x17,[x0,#16] + + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x23,x24,[sp,#48] + ldr x29,[sp],#64 + ret + + +//////////////////////////////////////////////////////////////////////// +// void ecp_nistz256_ord_sqr_mont(uint64_t res[4], uint64_t a[4], +// int rep); +.globl _ecp_nistz256_ord_sqr_mont + +.align 4 +_ecp_nistz256_ord_sqr_mont: + stp x29,x30,[sp,#-64]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + + adr x23,Lord + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + + ldp x12,x13,[x23,#0] + ldp x21,x22,[x23,#16] + ldr x23,[x23,#32] + b Loop_ord_sqr + +.align 4 +Loop_ord_sqr: + sub x2,x2,#1 + //////////////////////////////////////////////////////////////// + // | | | | | |a1*a0| | + // | | | | |a2*a0| | | + // | |a3*a2|a3*a0| | | | + // | | | |a2*a1| | | | + // | | |a3*a1| | | | | + // *| | | | | | | | 2| + // +|a3*a3|a2*a2|a1*a1|a0*a0| + // |--+--+--+--+--+--+--+--| + // |A7|A6|A5|A4|A3|A2|A1|A0|, where Ax is , i.e. follow + // + // "can't overflow" below mark carrying into high part of + // multiplication result, which can't overflow, because it + // can never be all ones. + + mul x15,x5,x4 // a[1]*a[0] + umulh x9,x5,x4 + mul x16,x6,x4 // a[2]*a[0] + umulh x10,x6,x4 + mul x17,x7,x4 // a[3]*a[0] + umulh x19,x7,x4 + + adds x16,x16,x9 // accumulate high parts of multiplication + mul x8,x6,x5 // a[2]*a[1] + umulh x9,x6,x5 + adcs x17,x17,x10 + mul x10,x7,x5 // a[3]*a[1] + umulh x11,x7,x5 + adc x19,x19,xzr // can't overflow + + mul x20,x7,x6 // a[3]*a[2] + umulh x1,x7,x6 + + adds x9,x9,x10 // accumulate high parts of multiplication + mul x14,x4,x4 // a[0]*a[0] + adc x10,x11,xzr // can't overflow + + adds x17,x17,x8 // accumulate low parts of multiplication + umulh x4,x4,x4 + adcs x19,x19,x9 + mul x9,x5,x5 // a[1]*a[1] + adcs x20,x20,x10 + umulh x5,x5,x5 + adc x1,x1,xzr // can't overflow + + adds x15,x15,x15 // acc[1-6]*=2 + mul x10,x6,x6 // a[2]*a[2] + adcs x16,x16,x16 + umulh x6,x6,x6 + adcs x17,x17,x17 + mul x11,x7,x7 // a[3]*a[3] + adcs x19,x19,x19 + umulh x7,x7,x7 + adcs x20,x20,x20 + adcs x1,x1,x1 + adc x3,xzr,xzr + + adds x15,x15,x4 // +a[i]*a[i] + mul x24,x14,x23 + adcs x16,x16,x9 + adcs x17,x17,x5 + adcs x19,x19,x10 + adcs x20,x20,x6 + adcs x1,x1,x11 + adc x3,x3,x7 + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + adc x11,x11,xzr + + adds x14,x15,x10 + adcs x15,x16,x11 + adcs x16,x17,x24 + adc x17,xzr,x24 // can't overflow + mul x11,x14,x23 + lsl x8,x24,#32 + subs x15,x15,x24 + lsr x9,x24,#32 + sbcs x16,x16,x8 + sbc x17,x17,x9 // can't borrow + subs xzr,x14,#1 + umulh x9,x12,x11 + mul x10,x13,x11 + umulh x24,x13,x11 + + adcs x10,x10,x9 + adc x24,x24,xzr + + adds x14,x15,x10 + adcs x15,x16,x24 + adcs x16,x17,x11 + adc x17,xzr,x11 // can't overflow + mul x24,x14,x23 + lsl x8,x11,#32 + subs x15,x15,x11 + lsr x9,x11,#32 + sbcs x16,x16,x8 + sbc x17,x17,x9 // can't borrow + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + adc x11,x11,xzr + + adds x14,x15,x10 + adcs x15,x16,x11 + adcs x16,x17,x24 + adc x17,xzr,x24 // can't overflow + mul x11,x14,x23 + lsl x8,x24,#32 + subs x15,x15,x24 + lsr x9,x24,#32 + sbcs x16,x16,x8 + sbc x17,x17,x9 // can't borrow + subs xzr,x14,#1 + umulh x9,x12,x11 + mul x10,x13,x11 + umulh x24,x13,x11 + + adcs x10,x10,x9 + adc x24,x24,xzr + + adds x14,x15,x10 + adcs x15,x16,x24 + adcs x16,x17,x11 + adc x17,xzr,x11 // can't overflow + lsl x8,x11,#32 + subs x15,x15,x11 + lsr x9,x11,#32 + sbcs x16,x16,x8 + sbc x17,x17,x9 // can't borrow + adds x14,x14,x19 // accumulate upper half + adcs x15,x15,x20 + adcs x16,x16,x1 + adcs x17,x17,x3 + adc x19,xzr,xzr + + subs x8,x14,x12 // ret -= modulus + sbcs x9,x15,x13 + sbcs x10,x16,x21 + sbcs x11,x17,x22 + sbcs xzr,x19,xzr + + csel x4,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x5,x15,x9,lo + csel x6,x16,x10,lo + csel x7,x17,x11,lo + + cbnz x2,Loop_ord_sqr + + stp x4,x5,[x0] + stp x6,x7,[x0,#16] + + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x23,x24,[sp,#48] + ldr x29,[sp],#64 + ret + +// void ecp_nistz256_scatter_w5(void *x0,const P256_POINT *x1, +// int x2); +.globl _ecp_nistz256_scatter_w5 + +.align 4 +_ecp_nistz256_scatter_w5: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + add x0,x0,x2,lsl#2 + + ldp x4,x5,[x1] // X + ldp x6,x7,[x1,#16] + str w4,[x0,#64*0-4] + lsr x4,x4,#32 + str w5,[x0,#64*1-4] + lsr x5,x5,#32 + str w6,[x0,#64*2-4] + lsr x6,x6,#32 + str w7,[x0,#64*3-4] + lsr x7,x7,#32 + str w4,[x0,#64*4-4] + str w5,[x0,#64*5-4] + str w6,[x0,#64*6-4] + str w7,[x0,#64*7-4] + add x0,x0,#64*8 + + ldp x4,x5,[x1,#32] // Y + ldp x6,x7,[x1,#48] + str w4,[x0,#64*0-4] + lsr x4,x4,#32 + str w5,[x0,#64*1-4] + lsr x5,x5,#32 + str w6,[x0,#64*2-4] + lsr x6,x6,#32 + str w7,[x0,#64*3-4] + lsr x7,x7,#32 + str w4,[x0,#64*4-4] + str w5,[x0,#64*5-4] + str w6,[x0,#64*6-4] + str w7,[x0,#64*7-4] + add x0,x0,#64*8 + + ldp x4,x5,[x1,#64] // Z + ldp x6,x7,[x1,#80] + str w4,[x0,#64*0-4] + lsr x4,x4,#32 + str w5,[x0,#64*1-4] + lsr x5,x5,#32 + str w6,[x0,#64*2-4] + lsr x6,x6,#32 + str w7,[x0,#64*3-4] + lsr x7,x7,#32 + str w4,[x0,#64*4-4] + str w5,[x0,#64*5-4] + str w6,[x0,#64*6-4] + str w7,[x0,#64*7-4] + + ldr x29,[sp],#16 + ret + + +// void ecp_nistz256_gather_w5(P256_POINT *x0,const void *x1, +// int x2); +.globl _ecp_nistz256_gather_w5 + +.align 4 +_ecp_nistz256_gather_w5: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + cmp x2,xzr + csetm x3,ne + add x2,x2,x3 + add x1,x1,x2,lsl#2 + + ldr w4,[x1,#64*0] + ldr w5,[x1,#64*1] + ldr w6,[x1,#64*2] + ldr w7,[x1,#64*3] + ldr w8,[x1,#64*4] + ldr w9,[x1,#64*5] + ldr w10,[x1,#64*6] + ldr w11,[x1,#64*7] + add x1,x1,#64*8 + orr x4,x4,x8,lsl#32 + orr x5,x5,x9,lsl#32 + orr x6,x6,x10,lsl#32 + orr x7,x7,x11,lsl#32 + csel x4,x4,xzr,ne + csel x5,x5,xzr,ne + csel x6,x6,xzr,ne + csel x7,x7,xzr,ne + stp x4,x5,[x0] // X + stp x6,x7,[x0,#16] + + ldr w4,[x1,#64*0] + ldr w5,[x1,#64*1] + ldr w6,[x1,#64*2] + ldr w7,[x1,#64*3] + ldr w8,[x1,#64*4] + ldr w9,[x1,#64*5] + ldr w10,[x1,#64*6] + ldr w11,[x1,#64*7] + add x1,x1,#64*8 + orr x4,x4,x8,lsl#32 + orr x5,x5,x9,lsl#32 + orr x6,x6,x10,lsl#32 + orr x7,x7,x11,lsl#32 + csel x4,x4,xzr,ne + csel x5,x5,xzr,ne + csel x6,x6,xzr,ne + csel x7,x7,xzr,ne + stp x4,x5,[x0,#32] // Y + stp x6,x7,[x0,#48] + + ldr w4,[x1,#64*0] + ldr w5,[x1,#64*1] + ldr w6,[x1,#64*2] + ldr w7,[x1,#64*3] + ldr w8,[x1,#64*4] + ldr w9,[x1,#64*5] + ldr w10,[x1,#64*6] + ldr w11,[x1,#64*7] + orr x4,x4,x8,lsl#32 + orr x5,x5,x9,lsl#32 + orr x6,x6,x10,lsl#32 + orr x7,x7,x11,lsl#32 + csel x4,x4,xzr,ne + csel x5,x5,xzr,ne + csel x6,x6,xzr,ne + csel x7,x7,xzr,ne + stp x4,x5,[x0,#64] // Z + stp x6,x7,[x0,#80] + + ldr x29,[sp],#16 + ret + + +// void ecp_nistz256_scatter_w7(void *x0,const P256_POINT_AFFINE *x1, +// int x2); +.globl _ecp_nistz256_scatter_w7 + +.align 4 +_ecp_nistz256_scatter_w7: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + add x0,x0,x2 + mov x2,#64/8 +Loop_scatter_w7: + ldr x3,[x1],#8 + subs x2,x2,#1 + prfm pstl1strm,[x0,#4096+64*0] + prfm pstl1strm,[x0,#4096+64*1] + prfm pstl1strm,[x0,#4096+64*2] + prfm pstl1strm,[x0,#4096+64*3] + prfm pstl1strm,[x0,#4096+64*4] + prfm pstl1strm,[x0,#4096+64*5] + prfm pstl1strm,[x0,#4096+64*6] + prfm pstl1strm,[x0,#4096+64*7] + strb w3,[x0,#64*0] + lsr x3,x3,#8 + strb w3,[x0,#64*1] + lsr x3,x3,#8 + strb w3,[x0,#64*2] + lsr x3,x3,#8 + strb w3,[x0,#64*3] + lsr x3,x3,#8 + strb w3,[x0,#64*4] + lsr x3,x3,#8 + strb w3,[x0,#64*5] + lsr x3,x3,#8 + strb w3,[x0,#64*6] + lsr x3,x3,#8 + strb w3,[x0,#64*7] + add x0,x0,#64*8 + b.ne Loop_scatter_w7 + + ldr x29,[sp],#16 + ret + + +// void ecp_nistz256_gather_w7(P256_POINT_AFFINE *x0,const void *x1, +// int x2); +.globl _ecp_nistz256_gather_w7 + +.align 4 +_ecp_nistz256_gather_w7: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + cmp x2,xzr + csetm x3,ne + add x2,x2,x3 + add x1,x1,x2 + mov x2,#64/8 + nop +Loop_gather_w7: + ldrb w4,[x1,#64*0] + prfm pldl1strm,[x1,#4096+64*0] + subs x2,x2,#1 + ldrb w5,[x1,#64*1] + prfm pldl1strm,[x1,#4096+64*1] + ldrb w6,[x1,#64*2] + prfm pldl1strm,[x1,#4096+64*2] + ldrb w7,[x1,#64*3] + prfm pldl1strm,[x1,#4096+64*3] + ldrb w8,[x1,#64*4] + prfm pldl1strm,[x1,#4096+64*4] + ldrb w9,[x1,#64*5] + prfm pldl1strm,[x1,#4096+64*5] + ldrb w10,[x1,#64*6] + prfm pldl1strm,[x1,#4096+64*6] + ldrb w11,[x1,#64*7] + prfm pldl1strm,[x1,#4096+64*7] + add x1,x1,#64*8 + orr x4,x4,x5,lsl#8 + orr x6,x6,x7,lsl#8 + orr x8,x8,x9,lsl#8 + orr x4,x4,x6,lsl#16 + orr x10,x10,x11,lsl#8 + orr x4,x4,x8,lsl#32 + orr x4,x4,x10,lsl#48 + and x4,x4,x3 + str x4,[x0],#8 + b.ne Loop_gather_w7 + + ldr x29,[sp],#16 + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/include/internal/bn_conf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/include/internal/bn_conf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/include/internal/bn_conf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/include/internal/bn_conf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,28 @@ +/* WARNING: do not edit! */ +/* Generated by Makefile from include/crypto/bn_conf.h.in */ +/* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BN_CONF_H +# define OSSL_CRYPTO_BN_CONF_H + +/* + * The contents of this file are not used in the UEFI build, as + * both 32-bit and 64-bit builds are supported from a single run + * of the Configure script. + */ + +/* Should we define BN_DIV2W here? */ + +/* Only one for the following should be defined */ +#define SIXTY_FOUR_BIT_LONG +#undef SIXTY_FOUR_BIT +#undef THIRTY_TWO_BIT + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/include/internal/dso_conf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/include/internal/dso_conf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/include/internal/dso_conf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/include/internal/dso_conf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,17 @@ +/* WARNING: do not edit! */ +/* Generated by Makefile from include/crypto/dso_conf.h.in */ +/* + * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSO_CONF_H +# define OSSL_CRYPTO_DSO_CONF_H +# define DSO_DLFCN +# define HAVE_DLFCN_H +# define DSO_EXTENSION ".dylib" +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/modes/ghashv8-armx.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/modes/ghashv8-armx.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/modes/ghashv8-armx.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/modes/ghashv8-armx.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,552 @@ +#include "arm_arch.h" + +#if __ARM_MAX_ARCH__>=7 +.text + +.globl _gcm_init_v8 + +.align 4 +_gcm_init_v8: + ld1 {v17.2d},[x1] //load input H + movi v19.16b,#0xe1 + shl v19.2d,v19.2d,#57 //0xc2.0 + ext v3.16b,v17.16b,v17.16b,#8 + ushr v18.2d,v19.2d,#63 + dup v17.4s,v17.s[1] + ext v16.16b,v18.16b,v19.16b,#8 //t0=0xc2....01 + ushr v18.2d,v3.2d,#63 + sshr v17.4s,v17.4s,#31 //broadcast carry bit + and v18.16b,v18.16b,v16.16b + shl v3.2d,v3.2d,#1 + ext v18.16b,v18.16b,v18.16b,#8 + and v16.16b,v16.16b,v17.16b + orr v3.16b,v3.16b,v18.16b //H<<<=1 + eor v20.16b,v3.16b,v16.16b //twisted H + st1 {v20.2d},[x0],#16 //store Htable[0] + + //calculate H^2 + ext v16.16b,v20.16b,v20.16b,#8 //Karatsuba pre-processing + pmull v0.1q,v20.1d,v20.1d + eor v16.16b,v16.16b,v20.16b + pmull2 v2.1q,v20.2d,v20.2d + pmull v1.1q,v16.1d,v16.1d + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v22.16b,v0.16b,v18.16b + + ext v17.16b,v22.16b,v22.16b,#8 //Karatsuba pre-processing + eor v17.16b,v17.16b,v22.16b + ext v21.16b,v16.16b,v17.16b,#8 //pack Karatsuba pre-processed + st1 {v21.2d,v22.2d},[x0],#32 //store Htable[1..2] + //calculate H^3 and H^4 + pmull v0.1q,v20.1d, v22.1d + pmull v5.1q,v22.1d,v22.1d + pmull2 v2.1q,v20.2d, v22.2d + pmull2 v7.1q,v22.2d,v22.2d + pmull v1.1q,v16.1d,v17.1d + pmull v6.1q,v17.1d,v17.1d + + ext v16.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + ext v17.16b,v5.16b,v7.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v16.16b + eor v4.16b,v5.16b,v7.16b + eor v6.16b,v6.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase + eor v6.16b,v6.16b,v4.16b + pmull v4.1q,v5.1d,v19.1d + + ins v2.d[0],v1.d[1] + ins v7.d[0],v6.d[1] + ins v1.d[1],v0.d[0] + ins v6.d[1],v5.d[0] + eor v0.16b,v1.16b,v18.16b + eor v5.16b,v6.16b,v4.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase + ext v4.16b,v5.16b,v5.16b,#8 + pmull v0.1q,v0.1d,v19.1d + pmull v5.1q,v5.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v4.16b,v4.16b,v7.16b + eor v20.16b, v0.16b,v18.16b //H^3 + eor v22.16b,v5.16b,v4.16b //H^4 + + ext v16.16b,v20.16b, v20.16b,#8 //Karatsuba pre-processing + ext v17.16b,v22.16b,v22.16b,#8 + eor v16.16b,v16.16b,v20.16b + eor v17.16b,v17.16b,v22.16b + ext v21.16b,v16.16b,v17.16b,#8 //pack Karatsuba pre-processed + st1 {v20.2d,v21.2d,v22.2d},[x0] //store Htable[3..5] + ret + +.globl _gcm_gmult_v8 + +.align 4 +_gcm_gmult_v8: + ld1 {v17.2d},[x0] //load Xi + movi v19.16b,#0xe1 + ld1 {v20.2d,v21.2d},[x1] //load twisted H, ... + shl v19.2d,v19.2d,#57 +#ifndef __ARMEB__ + rev64 v17.16b,v17.16b +#endif + ext v3.16b,v17.16b,v17.16b,#8 + + pmull v0.1q,v20.1d,v3.1d //H.lo·Xi.lo + eor v17.16b,v17.16b,v3.16b //Karatsuba pre-processing + pmull2 v2.1q,v20.2d,v3.2d //H.hi·Xi.hi + pmull v1.1q,v21.1d,v17.1d //(H.lo+H.hi)·(Xi.lo+Xi.hi) + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + +#ifndef __ARMEB__ + rev64 v0.16b,v0.16b +#endif + ext v0.16b,v0.16b,v0.16b,#8 + st1 {v0.2d},[x0] //write out Xi + + ret + +.globl _gcm_ghash_v8 + +.align 4 +_gcm_ghash_v8: + cmp x3,#64 + b.hs Lgcm_ghash_v8_4x + ld1 {v0.2d},[x0] //load [rotated] Xi + //"[rotated]" means that + //loaded value would have + //to be rotated in order to + //make it appear as in + //algorithm specification + subs x3,x3,#32 //see if x3 is 32 or larger + mov x12,#16 //x12 is used as post- + //increment for input pointer; + //as loop is modulo-scheduled + //x12 is zeroed just in time + //to preclude overstepping + //inp[len], which means that + //last block[s] are actually + //loaded twice, but last + //copy is not processed + ld1 {v20.2d,v21.2d},[x1],#32 //load twisted H, ..., H^2 + movi v19.16b,#0xe1 + ld1 {v22.2d},[x1] + csel x12,xzr,x12,eq //is it time to zero x12? + ext v0.16b,v0.16b,v0.16b,#8 //rotate Xi + ld1 {v16.2d},[x2],#16 //load [rotated] I[0] + shl v19.2d,v19.2d,#57 //compose 0xc2.0 constant +#ifndef __ARMEB__ + rev64 v16.16b,v16.16b + rev64 v0.16b,v0.16b +#endif + ext v3.16b,v16.16b,v16.16b,#8 //rotate I[0] + b.lo Lodd_tail_v8 //x3 was less than 32 + ld1 {v17.2d},[x2],x12 //load [rotated] I[1] +#ifndef __ARMEB__ + rev64 v17.16b,v17.16b +#endif + ext v7.16b,v17.16b,v17.16b,#8 + eor v3.16b,v3.16b,v0.16b //I[i]^=Xi + pmull v4.1q,v20.1d,v7.1d //H·Ii+1 + eor v17.16b,v17.16b,v7.16b //Karatsuba pre-processing + pmull2 v6.1q,v20.2d,v7.2d + b Loop_mod2x_v8 + +.align 4 +Loop_mod2x_v8: + ext v18.16b,v3.16b,v3.16b,#8 + subs x3,x3,#32 //is there more data? + pmull v0.1q,v22.1d,v3.1d //H^2.lo·Xi.lo + csel x12,xzr,x12,lo //is it time to zero x12? + + pmull v5.1q,v21.1d,v17.1d + eor v18.16b,v18.16b,v3.16b //Karatsuba pre-processing + pmull2 v2.1q,v22.2d,v3.2d //H^2.hi·Xi.hi + eor v0.16b,v0.16b,v4.16b //accumulate + pmull2 v1.1q,v21.2d,v18.2d //(H^2.lo+H^2.hi)·(Xi.lo+Xi.hi) + ld1 {v16.2d},[x2],x12 //load [rotated] I[i+2] + + eor v2.16b,v2.16b,v6.16b + csel x12,xzr,x12,eq //is it time to zero x12? + eor v1.16b,v1.16b,v5.16b + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v17.2d},[x2],x12 //load [rotated] I[i+3] +#ifndef __ARMEB__ + rev64 v16.16b,v16.16b +#endif + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + +#ifndef __ARMEB__ + rev64 v17.16b,v17.16b +#endif + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v7.16b,v17.16b,v17.16b,#8 + ext v3.16b,v16.16b,v16.16b,#8 + eor v0.16b,v1.16b,v18.16b + pmull v4.1q,v20.1d,v7.1d //H·Ii+1 + eor v3.16b,v3.16b,v2.16b //accumulate v3.16b early + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v3.16b,v3.16b,v18.16b + eor v17.16b,v17.16b,v7.16b //Karatsuba pre-processing + eor v3.16b,v3.16b,v0.16b + pmull2 v6.1q,v20.2d,v7.2d + b.hs Loop_mod2x_v8 //there was at least 32 more bytes + + eor v2.16b,v2.16b,v18.16b + ext v3.16b,v16.16b,v16.16b,#8 //re-construct v3.16b + adds x3,x3,#32 //re-construct x3 + eor v0.16b,v0.16b,v2.16b //re-construct v0.16b + b.eq Ldone_v8 //is x3 zero? +Lodd_tail_v8: + ext v18.16b,v0.16b,v0.16b,#8 + eor v3.16b,v3.16b,v0.16b //inp^=Xi + eor v17.16b,v16.16b,v18.16b //v17.16b is rotated inp^Xi + + pmull v0.1q,v20.1d,v3.1d //H.lo·Xi.lo + eor v17.16b,v17.16b,v3.16b //Karatsuba pre-processing + pmull2 v2.1q,v20.2d,v3.2d //H.hi·Xi.hi + pmull v1.1q,v21.1d,v17.1d //(H.lo+H.hi)·(Xi.lo+Xi.hi) + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + +Ldone_v8: +#ifndef __ARMEB__ + rev64 v0.16b,v0.16b +#endif + ext v0.16b,v0.16b,v0.16b,#8 + st1 {v0.2d},[x0] //write out Xi + + ret + + +.align 4 +gcm_ghash_v8_4x: +Lgcm_ghash_v8_4x: + ld1 {v0.2d},[x0] //load [rotated] Xi + ld1 {v20.2d,v21.2d,v22.2d},[x1],#48 //load twisted H, ..., H^2 + movi v19.16b,#0xe1 + ld1 {v26.2d,v27.2d,v28.2d},[x1] //load twisted H^3, ..., H^4 + shl v19.2d,v19.2d,#57 //compose 0xc2.0 constant + + ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64 +#ifndef __ARMEB__ + rev64 v0.16b,v0.16b + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v7.16b,v7.16b + rev64 v4.16b,v4.16b +#endif + ext v25.16b,v7.16b,v7.16b,#8 + ext v24.16b,v6.16b,v6.16b,#8 + ext v23.16b,v5.16b,v5.16b,#8 + + pmull v29.1q,v20.1d,v25.1d //H·Ii+3 + eor v7.16b,v7.16b,v25.16b + pmull2 v31.1q,v20.2d,v25.2d + pmull v30.1q,v21.1d,v7.1d + + pmull v16.1q,v22.1d,v24.1d //H^2·Ii+2 + eor v6.16b,v6.16b,v24.16b + pmull2 v24.1q,v22.2d,v24.2d + pmull2 v6.1q,v21.2d,v6.2d + + eor v29.16b,v29.16b,v16.16b + eor v31.16b,v31.16b,v24.16b + eor v30.16b,v30.16b,v6.16b + + pmull v7.1q,v26.1d,v23.1d //H^3·Ii+1 + eor v5.16b,v5.16b,v23.16b + pmull2 v23.1q,v26.2d,v23.2d + pmull v5.1q,v27.1d,v5.1d + + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + eor v30.16b,v30.16b,v5.16b + + subs x3,x3,#128 + b.lo Ltail4x + + b Loop4x + +.align 4 +Loop4x: + eor v16.16b,v4.16b,v0.16b + ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64 + ext v3.16b,v16.16b,v16.16b,#8 +#ifndef __ARMEB__ + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v7.16b,v7.16b + rev64 v4.16b,v4.16b +#endif + + pmull v0.1q,v28.1d,v3.1d //H^4·(Xi+Ii) + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v28.2d,v3.2d + ext v25.16b,v7.16b,v7.16b,#8 + pmull2 v1.1q,v27.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + ext v24.16b,v6.16b,v6.16b,#8 + eor v1.16b,v1.16b,v30.16b + ext v23.16b,v5.16b,v5.16b,#8 + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + pmull v29.1q,v20.1d,v25.1d //H·Ii+3 + eor v7.16b,v7.16b,v25.16b + eor v1.16b,v1.16b,v17.16b + pmull2 v31.1q,v20.2d,v25.2d + eor v1.16b,v1.16b,v18.16b + pmull v30.1q,v21.1d,v7.1d + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + pmull v16.1q,v22.1d,v24.1d //H^2·Ii+2 + eor v6.16b,v6.16b,v24.16b + pmull2 v24.1q,v22.2d,v24.2d + eor v0.16b,v1.16b,v18.16b + pmull2 v6.1q,v21.2d,v6.2d + + eor v29.16b,v29.16b,v16.16b + eor v31.16b,v31.16b,v24.16b + eor v30.16b,v30.16b,v6.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + pmull v7.1q,v26.1d,v23.1d //H^3·Ii+1 + eor v5.16b,v5.16b,v23.16b + eor v18.16b,v18.16b,v2.16b + pmull2 v23.1q,v26.2d,v23.2d + pmull v5.1q,v27.1d,v5.1d + + eor v0.16b,v0.16b,v18.16b + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + ext v0.16b,v0.16b,v0.16b,#8 + eor v30.16b,v30.16b,v5.16b + + subs x3,x3,#64 + b.hs Loop4x + +Ltail4x: + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull v0.1q,v28.1d,v3.1d //H^4·(Xi+Ii) + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v28.2d,v3.2d + pmull2 v1.1q,v27.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + + adds x3,x3,#64 + b.eq Ldone4x + + cmp x3,#32 + b.lo Lone + b.eq Ltwo +Lthree: + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d,v5.2d,v6.2d},[x2] + eor v1.16b,v1.16b,v18.16b +#ifndef __ARMEB__ + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v4.16b,v4.16b +#endif + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v24.16b,v6.16b,v6.16b,#8 + ext v23.16b,v5.16b,v5.16b,#8 + eor v0.16b,v1.16b,v18.16b + + pmull v29.1q,v20.1d,v24.1d //H·Ii+2 + eor v6.16b,v6.16b,v24.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + pmull2 v31.1q,v20.2d,v24.2d + pmull v30.1q,v21.1d,v6.1d + eor v0.16b,v0.16b,v18.16b + pmull v7.1q,v22.1d,v23.1d //H^2·Ii+1 + eor v5.16b,v5.16b,v23.16b + ext v0.16b,v0.16b,v0.16b,#8 + + pmull2 v23.1q,v22.2d,v23.2d + eor v16.16b,v4.16b,v0.16b + pmull2 v5.1q,v21.2d,v5.2d + ext v3.16b,v16.16b,v16.16b,#8 + + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + eor v30.16b,v30.16b,v5.16b + + pmull v0.1q,v26.1d,v3.1d //H^3·(Xi+Ii) + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v26.2d,v3.2d + pmull v1.1q,v27.1d,v16.1d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + b Ldone4x + +.align 4 +Ltwo: + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d,v5.2d},[x2] + eor v1.16b,v1.16b,v18.16b +#ifndef __ARMEB__ + rev64 v5.16b,v5.16b + rev64 v4.16b,v4.16b +#endif + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v23.16b,v5.16b,v5.16b,#8 + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + pmull v29.1q,v20.1d,v23.1d //H·Ii+1 + eor v5.16b,v5.16b,v23.16b + + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull2 v31.1q,v20.2d,v23.2d + pmull v30.1q,v21.1d,v5.1d + + pmull v0.1q,v22.1d,v3.1d //H^2·(Xi+Ii) + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v22.2d,v3.2d + pmull2 v1.1q,v21.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + b Ldone4x + +.align 4 +Lone: + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d},[x2] + eor v1.16b,v1.16b,v18.16b +#ifndef __ARMEB__ + rev64 v4.16b,v4.16b +#endif + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull v0.1q,v20.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v20.2d,v3.2d + pmull v1.1q,v21.1d,v16.1d + +Ldone4x: + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + +#ifndef __ARMEB__ + rev64 v0.16b,v0.16b +#endif + st1 {v0.2d},[x0] //write out Xi + + ret + +.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/poly1305/poly1305-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/poly1305/poly1305-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/poly1305/poly1305-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/poly1305/poly1305-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,870 @@ +#include "arm_arch.h" + +.text + +// forward "declarations" are required for Apple + +.private_extern _OPENSSL_armcap_P +.globl _poly1305_init +.private_extern _poly1305_init +.globl _poly1305_blocks +.private_extern _poly1305_blocks +.globl _poly1305_emit +.private_extern _poly1305_emit + + +.align 5 +_poly1305_init: + cmp x1,xzr + stp xzr,xzr,[x0] // zero hash value + stp xzr,xzr,[x0,#16] // [along with is_base2_26] + + csel x0,xzr,x0,eq + b.eq Lno_key + +#ifdef __ILP32__ + ldrsw x11,LOPENSSL_armcap_P +#else + ldr x11,LOPENSSL_armcap_P +#endif + adr x10,LOPENSSL_armcap_P + + ldp x7,x8,[x1] // load key + mov x9,#0xfffffffc0fffffff + movk x9,#0x0fff,lsl#48 + ldr w17,[x10,x11] +#ifdef __ARMEB__ + rev x7,x7 // flip bytes + rev x8,x8 +#endif + and x7,x7,x9 // &=0ffffffc0fffffff + and x9,x9,#-4 + and x8,x8,x9 // &=0ffffffc0ffffffc + stp x7,x8,[x0,#32] // save key value + + tst w17,#ARMV7_NEON + + adr x12,_poly1305_blocks + adr x7,poly1305_blocks_neon + adr x13,_poly1305_emit + adr x8,poly1305_emit_neon + + csel x12,x12,x7,eq + csel x13,x13,x8,eq + +#ifdef __ILP32__ + stp w12,w13,[x2] +#else + stp x12,x13,[x2] +#endif + + mov x0,#1 +Lno_key: + ret + + + +.align 5 +_poly1305_blocks: + ands x2,x2,#-16 + b.eq Lno_data + + ldp x4,x5,[x0] // load hash value + ldp x7,x8,[x0,#32] // load key value + ldr x6,[x0,#16] + add x9,x8,x8,lsr#2 // s1 = r1 + (r1 >> 2) + b Loop + +.align 5 +Loop: + ldp x10,x11,[x1],#16 // load input + sub x2,x2,#16 +#ifdef __ARMEB__ + rev x10,x10 + rev x11,x11 +#endif + adds x4,x4,x10 // accumulate input + adcs x5,x5,x11 + + mul x12,x4,x7 // h0*r0 + adc x6,x6,x3 + umulh x13,x4,x7 + + mul x10,x5,x9 // h1*5*r1 + umulh x11,x5,x9 + + adds x12,x12,x10 + mul x10,x4,x8 // h0*r1 + adc x13,x13,x11 + umulh x14,x4,x8 + + adds x13,x13,x10 + mul x10,x5,x7 // h1*r0 + adc x14,x14,xzr + umulh x11,x5,x7 + + adds x13,x13,x10 + mul x10,x6,x9 // h2*5*r1 + adc x14,x14,x11 + mul x11,x6,x7 // h2*r0 + + adds x13,x13,x10 + adc x14,x14,x11 + + and x10,x14,#-4 // final reduction + and x6,x14,#3 + add x10,x10,x14,lsr#2 + adds x4,x12,x10 + adcs x5,x13,xzr + adc x6,x6,xzr + + cbnz x2,Loop + + stp x4,x5,[x0] // store hash value + str x6,[x0,#16] + +Lno_data: + ret + + + +.align 5 +_poly1305_emit: + ldp x4,x5,[x0] // load hash base 2^64 + ldr x6,[x0,#16] + ldp x10,x11,[x2] // load nonce + + adds x12,x4,#5 // compare to modulus + adcs x13,x5,xzr + adc x14,x6,xzr + + tst x14,#-4 // see if it's carried/borrowed + + csel x4,x4,x12,eq + csel x5,x5,x13,eq + +#ifdef __ARMEB__ + ror x10,x10,#32 // flip nonce words + ror x11,x11,#32 +#endif + adds x4,x4,x10 // accumulate nonce + adc x5,x5,x11 +#ifdef __ARMEB__ + rev x4,x4 // flip output bytes + rev x5,x5 +#endif + stp x4,x5,[x1] // write result + + ret + + +.align 5 +poly1305_mult: + mul x12,x4,x7 // h0*r0 + umulh x13,x4,x7 + + mul x10,x5,x9 // h1*5*r1 + umulh x11,x5,x9 + + adds x12,x12,x10 + mul x10,x4,x8 // h0*r1 + adc x13,x13,x11 + umulh x14,x4,x8 + + adds x13,x13,x10 + mul x10,x5,x7 // h1*r0 + adc x14,x14,xzr + umulh x11,x5,x7 + + adds x13,x13,x10 + mul x10,x6,x9 // h2*5*r1 + adc x14,x14,x11 + mul x11,x6,x7 // h2*r0 + + adds x13,x13,x10 + adc x14,x14,x11 + + and x10,x14,#-4 // final reduction + and x6,x14,#3 + add x10,x10,x14,lsr#2 + adds x4,x12,x10 + adcs x5,x13,xzr + adc x6,x6,xzr + + ret + + + +.align 5 +poly1305_splat: + and x12,x4,#0x03ffffff // base 2^64 -> base 2^26 + ubfx x13,x4,#26,#26 + extr x14,x5,x4,#52 + and x14,x14,#0x03ffffff + ubfx x15,x5,#14,#26 + extr x16,x6,x5,#40 + + str w12,[x0,#16*0] // r0 + add w12,w13,w13,lsl#2 // r1*5 + str w13,[x0,#16*1] // r1 + add w13,w14,w14,lsl#2 // r2*5 + str w12,[x0,#16*2] // s1 + str w14,[x0,#16*3] // r2 + add w14,w15,w15,lsl#2 // r3*5 + str w13,[x0,#16*4] // s2 + str w15,[x0,#16*5] // r3 + add w15,w16,w16,lsl#2 // r4*5 + str w14,[x0,#16*6] // s3 + str w16,[x0,#16*7] // r4 + str w15,[x0,#16*8] // s4 + + ret + + + +.align 5 +poly1305_blocks_neon: + ldr x17,[x0,#24] + cmp x2,#128 + b.hs Lblocks_neon + cbz x17,_poly1305_blocks + +Lblocks_neon: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + + ands x2,x2,#-16 + b.eq Lno_data_neon + + cbz x17,Lbase2_64_neon + + ldp w10,w11,[x0] // load hash value base 2^26 + ldp w12,w13,[x0,#8] + ldr w14,[x0,#16] + + tst x2,#31 + b.eq Leven_neon + + ldp x7,x8,[x0,#32] // load key value + + add x4,x10,x11,lsl#26 // base 2^26 -> base 2^64 + lsr x5,x12,#12 + adds x4,x4,x12,lsl#52 + add x5,x5,x13,lsl#14 + adc x5,x5,xzr + lsr x6,x14,#24 + adds x5,x5,x14,lsl#40 + adc x14,x6,xzr // can be partially reduced... + + ldp x12,x13,[x1],#16 // load input + sub x2,x2,#16 + add x9,x8,x8,lsr#2 // s1 = r1 + (r1 >> 2) + + and x10,x14,#-4 // ... so reduce + and x6,x14,#3 + add x10,x10,x14,lsr#2 + adds x4,x4,x10 + adcs x5,x5,xzr + adc x6,x6,xzr + +#ifdef __ARMEB__ + rev x12,x12 + rev x13,x13 +#endif + adds x4,x4,x12 // accumulate input + adcs x5,x5,x13 + adc x6,x6,x3 + + bl poly1305_mult + ldr x30,[sp,#8] + + cbz x3,Lstore_base2_64_neon + + and x10,x4,#0x03ffffff // base 2^64 -> base 2^26 + ubfx x11,x4,#26,#26 + extr x12,x5,x4,#52 + and x12,x12,#0x03ffffff + ubfx x13,x5,#14,#26 + extr x14,x6,x5,#40 + + cbnz x2,Leven_neon + + stp w10,w11,[x0] // store hash value base 2^26 + stp w12,w13,[x0,#8] + str w14,[x0,#16] + b Lno_data_neon + +.align 4 +Lstore_base2_64_neon: + stp x4,x5,[x0] // store hash value base 2^64 + stp x6,xzr,[x0,#16] // note that is_base2_26 is zeroed + b Lno_data_neon + +.align 4 +Lbase2_64_neon: + ldp x7,x8,[x0,#32] // load key value + + ldp x4,x5,[x0] // load hash value base 2^64 + ldr x6,[x0,#16] + + tst x2,#31 + b.eq Linit_neon + + ldp x12,x13,[x1],#16 // load input + sub x2,x2,#16 + add x9,x8,x8,lsr#2 // s1 = r1 + (r1 >> 2) +#ifdef __ARMEB__ + rev x12,x12 + rev x13,x13 +#endif + adds x4,x4,x12 // accumulate input + adcs x5,x5,x13 + adc x6,x6,x3 + + bl poly1305_mult + +Linit_neon: + and x10,x4,#0x03ffffff // base 2^64 -> base 2^26 + ubfx x11,x4,#26,#26 + extr x12,x5,x4,#52 + and x12,x12,#0x03ffffff + ubfx x13,x5,#14,#26 + extr x14,x6,x5,#40 + + stp d8,d9,[sp,#16] // meet ABI requirements + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] + + fmov d24,x10 + fmov d25,x11 + fmov d26,x12 + fmov d27,x13 + fmov d28,x14 + + ////////////////////////////////// initialize r^n table + mov x4,x7 // r^1 + add x9,x8,x8,lsr#2 // s1 = r1 + (r1 >> 2) + mov x5,x8 + mov x6,xzr + add x0,x0,#48+12 + bl poly1305_splat + + bl poly1305_mult // r^2 + sub x0,x0,#4 + bl poly1305_splat + + bl poly1305_mult // r^3 + sub x0,x0,#4 + bl poly1305_splat + + bl poly1305_mult // r^4 + sub x0,x0,#4 + bl poly1305_splat + ldr x30,[sp,#8] + + add x16,x1,#32 + adr x17,Lzeros + subs x2,x2,#64 + csel x16,x17,x16,lo + + mov x4,#1 + str x4,[x0,#-24] // set is_base2_26 + sub x0,x0,#48 // restore original x0 + b Ldo_neon + +.align 4 +Leven_neon: + add x16,x1,#32 + adr x17,Lzeros + subs x2,x2,#64 + csel x16,x17,x16,lo + + stp d8,d9,[sp,#16] // meet ABI requirements + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] + + fmov d24,x10 + fmov d25,x11 + fmov d26,x12 + fmov d27,x13 + fmov d28,x14 + +Ldo_neon: + ldp x8,x12,[x16],#16 // inp[2:3] (or zero) + ldp x9,x13,[x16],#48 + + lsl x3,x3,#24 + add x15,x0,#48 + +#ifdef __ARMEB__ + rev x8,x8 + rev x12,x12 + rev x9,x9 + rev x13,x13 +#endif + and x4,x8,#0x03ffffff // base 2^64 -> base 2^26 + and x5,x9,#0x03ffffff + ubfx x6,x8,#26,#26 + ubfx x7,x9,#26,#26 + add x4,x4,x5,lsl#32 // bfi x4,x5,#32,#32 + extr x8,x12,x8,#52 + extr x9,x13,x9,#52 + add x6,x6,x7,lsl#32 // bfi x6,x7,#32,#32 + fmov d14,x4 + and x8,x8,#0x03ffffff + and x9,x9,#0x03ffffff + ubfx x10,x12,#14,#26 + ubfx x11,x13,#14,#26 + add x12,x3,x12,lsr#40 + add x13,x3,x13,lsr#40 + add x8,x8,x9,lsl#32 // bfi x8,x9,#32,#32 + fmov d15,x6 + add x10,x10,x11,lsl#32 // bfi x10,x11,#32,#32 + add x12,x12,x13,lsl#32 // bfi x12,x13,#32,#32 + fmov d16,x8 + fmov d17,x10 + fmov d18,x12 + + ldp x8,x12,[x1],#16 // inp[0:1] + ldp x9,x13,[x1],#48 + + ld1 {v0.4s,v1.4s,v2.4s,v3.4s},[x15],#64 + ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x15],#64 + ld1 {v8.4s},[x15] + +#ifdef __ARMEB__ + rev x8,x8 + rev x12,x12 + rev x9,x9 + rev x13,x13 +#endif + and x4,x8,#0x03ffffff // base 2^64 -> base 2^26 + and x5,x9,#0x03ffffff + ubfx x6,x8,#26,#26 + ubfx x7,x9,#26,#26 + add x4,x4,x5,lsl#32 // bfi x4,x5,#32,#32 + extr x8,x12,x8,#52 + extr x9,x13,x9,#52 + add x6,x6,x7,lsl#32 // bfi x6,x7,#32,#32 + fmov d9,x4 + and x8,x8,#0x03ffffff + and x9,x9,#0x03ffffff + ubfx x10,x12,#14,#26 + ubfx x11,x13,#14,#26 + add x12,x3,x12,lsr#40 + add x13,x3,x13,lsr#40 + add x8,x8,x9,lsl#32 // bfi x8,x9,#32,#32 + fmov d10,x6 + add x10,x10,x11,lsl#32 // bfi x10,x11,#32,#32 + add x12,x12,x13,lsl#32 // bfi x12,x13,#32,#32 + movi v31.2d,#-1 + fmov d11,x8 + fmov d12,x10 + fmov d13,x12 + ushr v31.2d,v31.2d,#38 + + b.ls Lskip_loop + +.align 4 +Loop_neon: + //////////////////////////////////////////////////////////////// + // ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2 + // ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r + // ___________________/ + // ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2 + // ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r + // ___________________/ ____________________/ + // + // Note that we start with inp[2:3]*r^2. This is because it + // doesn't depend on reduction in previous iteration. + //////////////////////////////////////////////////////////////// + // d4 = h0*r4 + h1*r3 + h2*r2 + h3*r1 + h4*r0 + // d3 = h0*r3 + h1*r2 + h2*r1 + h3*r0 + h4*5*r4 + // d2 = h0*r2 + h1*r1 + h2*r0 + h3*5*r4 + h4*5*r3 + // d1 = h0*r1 + h1*r0 + h2*5*r4 + h3*5*r3 + h4*5*r2 + // d0 = h0*r0 + h1*5*r4 + h2*5*r3 + h3*5*r2 + h4*5*r1 + + subs x2,x2,#64 + umull v23.2d,v14.2s,v7.s[2] + csel x16,x17,x16,lo + umull v22.2d,v14.2s,v5.s[2] + umull v21.2d,v14.2s,v3.s[2] + ldp x8,x12,[x16],#16 // inp[2:3] (or zero) + umull v20.2d,v14.2s,v1.s[2] + ldp x9,x13,[x16],#48 + umull v19.2d,v14.2s,v0.s[2] +#ifdef __ARMEB__ + rev x8,x8 + rev x12,x12 + rev x9,x9 + rev x13,x13 +#endif + + umlal v23.2d,v15.2s,v5.s[2] + and x4,x8,#0x03ffffff // base 2^64 -> base 2^26 + umlal v22.2d,v15.2s,v3.s[2] + and x5,x9,#0x03ffffff + umlal v21.2d,v15.2s,v1.s[2] + ubfx x6,x8,#26,#26 + umlal v20.2d,v15.2s,v0.s[2] + ubfx x7,x9,#26,#26 + umlal v19.2d,v15.2s,v8.s[2] + add x4,x4,x5,lsl#32 // bfi x4,x5,#32,#32 + + umlal v23.2d,v16.2s,v3.s[2] + extr x8,x12,x8,#52 + umlal v22.2d,v16.2s,v1.s[2] + extr x9,x13,x9,#52 + umlal v21.2d,v16.2s,v0.s[2] + add x6,x6,x7,lsl#32 // bfi x6,x7,#32,#32 + umlal v20.2d,v16.2s,v8.s[2] + fmov d14,x4 + umlal v19.2d,v16.2s,v6.s[2] + and x8,x8,#0x03ffffff + + umlal v23.2d,v17.2s,v1.s[2] + and x9,x9,#0x03ffffff + umlal v22.2d,v17.2s,v0.s[2] + ubfx x10,x12,#14,#26 + umlal v21.2d,v17.2s,v8.s[2] + ubfx x11,x13,#14,#26 + umlal v20.2d,v17.2s,v6.s[2] + add x8,x8,x9,lsl#32 // bfi x8,x9,#32,#32 + umlal v19.2d,v17.2s,v4.s[2] + fmov d15,x6 + + add v11.2s,v11.2s,v26.2s + add x12,x3,x12,lsr#40 + umlal v23.2d,v18.2s,v0.s[2] + add x13,x3,x13,lsr#40 + umlal v22.2d,v18.2s,v8.s[2] + add x10,x10,x11,lsl#32 // bfi x10,x11,#32,#32 + umlal v21.2d,v18.2s,v6.s[2] + add x12,x12,x13,lsl#32 // bfi x12,x13,#32,#32 + umlal v20.2d,v18.2s,v4.s[2] + fmov d16,x8 + umlal v19.2d,v18.2s,v2.s[2] + fmov d17,x10 + + //////////////////////////////////////////////////////////////// + // (hash+inp[0:1])*r^4 and accumulate + + add v9.2s,v9.2s,v24.2s + fmov d18,x12 + umlal v22.2d,v11.2s,v1.s[0] + ldp x8,x12,[x1],#16 // inp[0:1] + umlal v19.2d,v11.2s,v6.s[0] + ldp x9,x13,[x1],#48 + umlal v23.2d,v11.2s,v3.s[0] + umlal v20.2d,v11.2s,v8.s[0] + umlal v21.2d,v11.2s,v0.s[0] +#ifdef __ARMEB__ + rev x8,x8 + rev x12,x12 + rev x9,x9 + rev x13,x13 +#endif + + add v10.2s,v10.2s,v25.2s + umlal v22.2d,v9.2s,v5.s[0] + umlal v23.2d,v9.2s,v7.s[0] + and x4,x8,#0x03ffffff // base 2^64 -> base 2^26 + umlal v21.2d,v9.2s,v3.s[0] + and x5,x9,#0x03ffffff + umlal v19.2d,v9.2s,v0.s[0] + ubfx x6,x8,#26,#26 + umlal v20.2d,v9.2s,v1.s[0] + ubfx x7,x9,#26,#26 + + add v12.2s,v12.2s,v27.2s + add x4,x4,x5,lsl#32 // bfi x4,x5,#32,#32 + umlal v22.2d,v10.2s,v3.s[0] + extr x8,x12,x8,#52 + umlal v23.2d,v10.2s,v5.s[0] + extr x9,x13,x9,#52 + umlal v19.2d,v10.2s,v8.s[0] + add x6,x6,x7,lsl#32 // bfi x6,x7,#32,#32 + umlal v21.2d,v10.2s,v1.s[0] + fmov d9,x4 + umlal v20.2d,v10.2s,v0.s[0] + and x8,x8,#0x03ffffff + + add v13.2s,v13.2s,v28.2s + and x9,x9,#0x03ffffff + umlal v22.2d,v12.2s,v0.s[0] + ubfx x10,x12,#14,#26 + umlal v19.2d,v12.2s,v4.s[0] + ubfx x11,x13,#14,#26 + umlal v23.2d,v12.2s,v1.s[0] + add x8,x8,x9,lsl#32 // bfi x8,x9,#32,#32 + umlal v20.2d,v12.2s,v6.s[0] + fmov d10,x6 + umlal v21.2d,v12.2s,v8.s[0] + add x12,x3,x12,lsr#40 + + umlal v22.2d,v13.2s,v8.s[0] + add x13,x3,x13,lsr#40 + umlal v19.2d,v13.2s,v2.s[0] + add x10,x10,x11,lsl#32 // bfi x10,x11,#32,#32 + umlal v23.2d,v13.2s,v0.s[0] + add x12,x12,x13,lsl#32 // bfi x12,x13,#32,#32 + umlal v20.2d,v13.2s,v4.s[0] + fmov d11,x8 + umlal v21.2d,v13.2s,v6.s[0] + fmov d12,x10 + fmov d13,x12 + + ///////////////////////////////////////////////////////////////// + // lazy reduction as discussed in "NEON crypto" by D.J. Bernstein + // and P. Schwabe + // + // [see discussion in poly1305-armv4 module] + + ushr v29.2d,v22.2d,#26 + xtn v27.2s,v22.2d + ushr v30.2d,v19.2d,#26 + and v19.16b,v19.16b,v31.16b + add v23.2d,v23.2d,v29.2d // h3 -> h4 + bic v27.2s,#0xfc,lsl#24 // &=0x03ffffff + add v20.2d,v20.2d,v30.2d // h0 -> h1 + + ushr v29.2d,v23.2d,#26 + xtn v28.2s,v23.2d + ushr v30.2d,v20.2d,#26 + xtn v25.2s,v20.2d + bic v28.2s,#0xfc,lsl#24 + add v21.2d,v21.2d,v30.2d // h1 -> h2 + + add v19.2d,v19.2d,v29.2d + shl v29.2d,v29.2d,#2 + shrn v30.2s,v21.2d,#26 + xtn v26.2s,v21.2d + add v19.2d,v19.2d,v29.2d // h4 -> h0 + bic v25.2s,#0xfc,lsl#24 + add v27.2s,v27.2s,v30.2s // h2 -> h3 + bic v26.2s,#0xfc,lsl#24 + + shrn v29.2s,v19.2d,#26 + xtn v24.2s,v19.2d + ushr v30.2s,v27.2s,#26 + bic v27.2s,#0xfc,lsl#24 + bic v24.2s,#0xfc,lsl#24 + add v25.2s,v25.2s,v29.2s // h0 -> h1 + add v28.2s,v28.2s,v30.2s // h3 -> h4 + + b.hi Loop_neon + +Lskip_loop: + dup v16.2d,v16.d[0] + add v11.2s,v11.2s,v26.2s + + //////////////////////////////////////////////////////////////// + // multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1 + + adds x2,x2,#32 + b.ne Long_tail + + dup v16.2d,v11.d[0] + add v14.2s,v9.2s,v24.2s + add v17.2s,v12.2s,v27.2s + add v15.2s,v10.2s,v25.2s + add v18.2s,v13.2s,v28.2s + +Long_tail: + dup v14.2d,v14.d[0] + umull2 v19.2d,v16.4s,v6.4s + umull2 v22.2d,v16.4s,v1.4s + umull2 v23.2d,v16.4s,v3.4s + umull2 v21.2d,v16.4s,v0.4s + umull2 v20.2d,v16.4s,v8.4s + + dup v15.2d,v15.d[0] + umlal2 v19.2d,v14.4s,v0.4s + umlal2 v21.2d,v14.4s,v3.4s + umlal2 v22.2d,v14.4s,v5.4s + umlal2 v23.2d,v14.4s,v7.4s + umlal2 v20.2d,v14.4s,v1.4s + + dup v17.2d,v17.d[0] + umlal2 v19.2d,v15.4s,v8.4s + umlal2 v22.2d,v15.4s,v3.4s + umlal2 v21.2d,v15.4s,v1.4s + umlal2 v23.2d,v15.4s,v5.4s + umlal2 v20.2d,v15.4s,v0.4s + + dup v18.2d,v18.d[0] + umlal2 v22.2d,v17.4s,v0.4s + umlal2 v23.2d,v17.4s,v1.4s + umlal2 v19.2d,v17.4s,v4.4s + umlal2 v20.2d,v17.4s,v6.4s + umlal2 v21.2d,v17.4s,v8.4s + + umlal2 v22.2d,v18.4s,v8.4s + umlal2 v19.2d,v18.4s,v2.4s + umlal2 v23.2d,v18.4s,v0.4s + umlal2 v20.2d,v18.4s,v4.4s + umlal2 v21.2d,v18.4s,v6.4s + + b.eq Lshort_tail + + //////////////////////////////////////////////////////////////// + // (hash+inp[0:1])*r^4:r^3 and accumulate + + add v9.2s,v9.2s,v24.2s + umlal v22.2d,v11.2s,v1.2s + umlal v19.2d,v11.2s,v6.2s + umlal v23.2d,v11.2s,v3.2s + umlal v20.2d,v11.2s,v8.2s + umlal v21.2d,v11.2s,v0.2s + + add v10.2s,v10.2s,v25.2s + umlal v22.2d,v9.2s,v5.2s + umlal v19.2d,v9.2s,v0.2s + umlal v23.2d,v9.2s,v7.2s + umlal v20.2d,v9.2s,v1.2s + umlal v21.2d,v9.2s,v3.2s + + add v12.2s,v12.2s,v27.2s + umlal v22.2d,v10.2s,v3.2s + umlal v19.2d,v10.2s,v8.2s + umlal v23.2d,v10.2s,v5.2s + umlal v20.2d,v10.2s,v0.2s + umlal v21.2d,v10.2s,v1.2s + + add v13.2s,v13.2s,v28.2s + umlal v22.2d,v12.2s,v0.2s + umlal v19.2d,v12.2s,v4.2s + umlal v23.2d,v12.2s,v1.2s + umlal v20.2d,v12.2s,v6.2s + umlal v21.2d,v12.2s,v8.2s + + umlal v22.2d,v13.2s,v8.2s + umlal v19.2d,v13.2s,v2.2s + umlal v23.2d,v13.2s,v0.2s + umlal v20.2d,v13.2s,v4.2s + umlal v21.2d,v13.2s,v6.2s + +Lshort_tail: + //////////////////////////////////////////////////////////////// + // horizontal add + + addp v22.2d,v22.2d,v22.2d + ldp d8,d9,[sp,#16] // meet ABI requirements + addp v19.2d,v19.2d,v19.2d + ldp d10,d11,[sp,#32] + addp v23.2d,v23.2d,v23.2d + ldp d12,d13,[sp,#48] + addp v20.2d,v20.2d,v20.2d + ldp d14,d15,[sp,#64] + addp v21.2d,v21.2d,v21.2d + + //////////////////////////////////////////////////////////////// + // lazy reduction, but without narrowing + + ushr v29.2d,v22.2d,#26 + and v22.16b,v22.16b,v31.16b + ushr v30.2d,v19.2d,#26 + and v19.16b,v19.16b,v31.16b + + add v23.2d,v23.2d,v29.2d // h3 -> h4 + add v20.2d,v20.2d,v30.2d // h0 -> h1 + + ushr v29.2d,v23.2d,#26 + and v23.16b,v23.16b,v31.16b + ushr v30.2d,v20.2d,#26 + and v20.16b,v20.16b,v31.16b + add v21.2d,v21.2d,v30.2d // h1 -> h2 + + add v19.2d,v19.2d,v29.2d + shl v29.2d,v29.2d,#2 + ushr v30.2d,v21.2d,#26 + and v21.16b,v21.16b,v31.16b + add v19.2d,v19.2d,v29.2d // h4 -> h0 + add v22.2d,v22.2d,v30.2d // h2 -> h3 + + ushr v29.2d,v19.2d,#26 + and v19.16b,v19.16b,v31.16b + ushr v30.2d,v22.2d,#26 + and v22.16b,v22.16b,v31.16b + add v20.2d,v20.2d,v29.2d // h0 -> h1 + add v23.2d,v23.2d,v30.2d // h3 -> h4 + + //////////////////////////////////////////////////////////////// + // write the result, can be partially reduced + + st4 {v19.s,v20.s,v21.s,v22.s}[0],[x0],#16 + st1 {v23.s}[0],[x0] + +Lno_data_neon: + ldr x29,[sp],#80 +.long 0xd50323bf // autiasp + ret + + + +.align 5 +poly1305_emit_neon: + ldr x17,[x0,#24] + cbz x17,_poly1305_emit + + ldp w10,w11,[x0] // load hash value base 2^26 + ldp w12,w13,[x0,#8] + ldr w14,[x0,#16] + + add x4,x10,x11,lsl#26 // base 2^26 -> base 2^64 + lsr x5,x12,#12 + adds x4,x4,x12,lsl#52 + add x5,x5,x13,lsl#14 + adc x5,x5,xzr + lsr x6,x14,#24 + adds x5,x5,x14,lsl#40 + adc x6,x6,xzr // can be partially reduced... + + ldp x10,x11,[x2] // load nonce + + and x12,x6,#-4 // ... so reduce + add x12,x12,x6,lsr#2 + and x6,x6,#3 + adds x4,x4,x12 + adcs x5,x5,xzr + adc x6,x6,xzr + + adds x12,x4,#5 // compare to modulus + adcs x13,x5,xzr + adc x14,x6,xzr + + tst x14,#-4 // see if it's carried/borrowed + + csel x4,x4,x12,eq + csel x5,x5,x13,eq + +#ifdef __ARMEB__ + ror x10,x10,#32 // flip nonce words + ror x11,x11,#32 +#endif + adds x4,x4,x10 // accumulate nonce + adc x5,x5,x11 +#ifdef __ARMEB__ + rev x4,x4 // flip output bytes + rev x5,x5 +#endif + stp x4,x5,[x1] // write result + + ret + + +.align 5 +Lzeros: +.long 0,0,0,0,0,0,0,0 +LOPENSSL_armcap_P: +#ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +#else +.quad _OPENSSL_armcap_P-. +#endif +.byte 80,111,108,121,49,51,48,53,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/keccak1600-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/keccak1600-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/keccak1600-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/keccak1600-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1095 @@ +.text + +.align 8 // strategic alignment and padding that allows to use + // address value as loop termination condition... +.quad 0,0,0,0,0,0,0,0 + +iotas: +.quad 0x0000000000000001 +.quad 0x0000000000008082 +.quad 0x800000000000808a +.quad 0x8000000080008000 +.quad 0x000000000000808b +.quad 0x0000000080000001 +.quad 0x8000000080008081 +.quad 0x8000000000008009 +.quad 0x000000000000008a +.quad 0x0000000000000088 +.quad 0x0000000080008009 +.quad 0x000000008000000a +.quad 0x000000008000808b +.quad 0x800000000000008b +.quad 0x8000000000008089 +.quad 0x8000000000008003 +.quad 0x8000000000008002 +.quad 0x8000000000000080 +.quad 0x000000000000800a +.quad 0x800000008000000a +.quad 0x8000000080008081 +.quad 0x8000000000008080 +.quad 0x0000000080000001 +.quad 0x8000000080008008 + + +.align 5 +KeccakF1600_int: + adr x28,iotas +.long 0xd503233f // paciasp + stp x28,x30,[sp,#16] // 32 bytes on top are mine + b Loop +.align 4 +Loop: + ////////////////////////////////////////// Theta + eor x26,x0,x5 + stp x4,x9,[sp,#0] // offload pair... + eor x27,x1,x6 + eor x28,x2,x7 + eor x30,x3,x8 + eor x4,x4,x9 + eor x26,x26,x10 + eor x27,x27,x11 + eor x28,x28,x12 + eor x30,x30,x13 + eor x4,x4,x14 + eor x26,x26,x15 + eor x27,x27,x16 + eor x28,x28,x17 + eor x30,x30,x25 + eor x4,x4,x19 + eor x26,x26,x20 + eor x28,x28,x22 + eor x27,x27,x21 + eor x30,x30,x23 + eor x4,x4,x24 + + eor x9,x26,x28,ror#63 + + eor x1,x1,x9 + eor x6,x6,x9 + eor x11,x11,x9 + eor x16,x16,x9 + eor x21,x21,x9 + + eor x9,x27,x30,ror#63 + eor x28,x28,x4,ror#63 + eor x30,x30,x26,ror#63 + eor x4,x4,x27,ror#63 + + eor x27, x2,x9 // mov x27,x2 + eor x7,x7,x9 + eor x12,x12,x9 + eor x17,x17,x9 + eor x22,x22,x9 + + eor x0,x0,x4 + eor x5,x5,x4 + eor x10,x10,x4 + eor x15,x15,x4 + eor x20,x20,x4 + ldp x4,x9,[sp,#0] // re-load offloaded data + eor x26, x3,x28 // mov x26,x3 + eor x8,x8,x28 + eor x13,x13,x28 + eor x25,x25,x28 + eor x23,x23,x28 + + eor x28, x4,x30 // mov x28,x4 + eor x9,x9,x30 + eor x14,x14,x30 + eor x19,x19,x30 + eor x24,x24,x30 + + ////////////////////////////////////////// Rho+Pi + mov x30,x1 + ror x1,x6,#64-44 + //mov x27,x2 + ror x2,x12,#64-43 + //mov x26,x3 + ror x3,x25,#64-21 + //mov x28,x4 + ror x4,x24,#64-14 + + ror x6,x9,#64-20 + ror x12,x13,#64-25 + ror x25,x17,#64-15 + ror x24,x21,#64-2 + + ror x9,x22,#64-61 + ror x13,x19,#64-8 + ror x17,x11,#64-10 + ror x21,x8,#64-55 + + ror x22,x14,#64-39 + ror x19,x23,#64-56 + ror x11,x7,#64-6 + ror x8,x16,#64-45 + + ror x14,x20,#64-18 + ror x23,x15,#64-41 + ror x7,x10,#64-3 + ror x16,x5,#64-36 + + ror x5,x26,#64-28 + ror x10,x30,#64-1 + ror x15,x28,#64-27 + ror x20,x27,#64-62 + + ////////////////////////////////////////// Chi+Iota + bic x26,x2,x1 + bic x27,x3,x2 + bic x28,x0,x4 + bic x30,x1,x0 + eor x0,x0,x26 + bic x26,x4,x3 + eor x1,x1,x27 + ldr x27,[sp,#16] + eor x3,x3,x28 + eor x4,x4,x30 + eor x2,x2,x26 + ldr x30,[x27],#8 // Iota[i++] + + bic x26,x7,x6 + tst x27,#255 // are we done? + str x27,[sp,#16] + bic x27,x8,x7 + bic x28,x5,x9 + eor x0,x0,x30 // A[0][0] ^= Iota + bic x30,x6,x5 + eor x5,x5,x26 + bic x26,x9,x8 + eor x6,x6,x27 + eor x8,x8,x28 + eor x9,x9,x30 + eor x7,x7,x26 + + bic x26,x12,x11 + bic x27,x13,x12 + bic x28,x10,x14 + bic x30,x11,x10 + eor x10,x10,x26 + bic x26,x14,x13 + eor x11,x11,x27 + eor x13,x13,x28 + eor x14,x14,x30 + eor x12,x12,x26 + + bic x26,x17,x16 + bic x27,x25,x17 + bic x28,x15,x19 + bic x30,x16,x15 + eor x15,x15,x26 + bic x26,x19,x25 + eor x16,x16,x27 + eor x25,x25,x28 + eor x19,x19,x30 + eor x17,x17,x26 + + bic x26,x22,x21 + bic x27,x23,x22 + bic x28,x20,x24 + bic x30,x21,x20 + eor x20,x20,x26 + bic x26,x24,x23 + eor x21,x21,x27 + eor x23,x23,x28 + eor x24,x24,x30 + eor x22,x22,x26 + + bne Loop + + ldr x30,[sp,#24] +.long 0xd50323bf // autiasp + ret + + + +.align 5 +KeccakF1600: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#48 + + str x0,[sp,#32] // offload argument + mov x26,x0 + ldp x0,x1,[x0,#16*0] + ldp x2,x3,[x26,#16*1] + ldp x4,x5,[x26,#16*2] + ldp x6,x7,[x26,#16*3] + ldp x8,x9,[x26,#16*4] + ldp x10,x11,[x26,#16*5] + ldp x12,x13,[x26,#16*6] + ldp x14,x15,[x26,#16*7] + ldp x16,x17,[x26,#16*8] + ldp x25,x19,[x26,#16*9] + ldp x20,x21,[x26,#16*10] + ldp x22,x23,[x26,#16*11] + ldr x24,[x26,#16*12] + + bl KeccakF1600_int + + ldr x26,[sp,#32] + stp x0,x1,[x26,#16*0] + stp x2,x3,[x26,#16*1] + stp x4,x5,[x26,#16*2] + stp x6,x7,[x26,#16*3] + stp x8,x9,[x26,#16*4] + stp x10,x11,[x26,#16*5] + stp x12,x13,[x26,#16*6] + stp x14,x15,[x26,#16*7] + stp x16,x17,[x26,#16*8] + stp x25,x19,[x26,#16*9] + stp x20,x21,[x26,#16*10] + stp x22,x23,[x26,#16*11] + str x24,[x26,#16*12] + + ldp x19,x20,[x29,#16] + add sp,sp,#48 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 +.long 0xd50323bf // autiasp + ret + + +.globl _SHA3_absorb + +.align 5 +_SHA3_absorb: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#64 + + stp x0,x1,[sp,#32] // offload arguments + stp x2,x3,[sp,#48] + + mov x26,x0 // uint64_t A[5][5] + mov x27,x1 // const void *inp + mov x28,x2 // size_t len + mov x30,x3 // size_t bsz + ldp x0,x1,[x26,#16*0] + ldp x2,x3,[x26,#16*1] + ldp x4,x5,[x26,#16*2] + ldp x6,x7,[x26,#16*3] + ldp x8,x9,[x26,#16*4] + ldp x10,x11,[x26,#16*5] + ldp x12,x13,[x26,#16*6] + ldp x14,x15,[x26,#16*7] + ldp x16,x17,[x26,#16*8] + ldp x25,x19,[x26,#16*9] + ldp x20,x21,[x26,#16*10] + ldp x22,x23,[x26,#16*11] + ldr x24,[x26,#16*12] + b Loop_absorb + +.align 4 +Loop_absorb: + subs x26,x28,x30 // len - bsz + blo Labsorbed + + str x26,[sp,#48] // save len - bsz + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x0,x0,x26 + cmp x30,#8*(0+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x1,x1,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x2,x2,x26 + cmp x30,#8*(2+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x3,x3,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x4,x4,x26 + cmp x30,#8*(4+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x5,x5,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x6,x6,x26 + cmp x30,#8*(6+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x7,x7,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x8,x8,x26 + cmp x30,#8*(8+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x9,x9,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x10,x10,x26 + cmp x30,#8*(10+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x11,x11,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x12,x12,x26 + cmp x30,#8*(12+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x13,x13,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x14,x14,x26 + cmp x30,#8*(14+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x15,x15,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x16,x16,x26 + cmp x30,#8*(16+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x17,x17,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x25,x25,x26 + cmp x30,#8*(18+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x19,x19,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x20,x20,x26 + cmp x30,#8*(20+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x21,x21,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x22,x22,x26 + cmp x30,#8*(22+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x23,x23,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x24,x24,x26 + +Lprocess_block: + str x27,[sp,#40] // save inp + + bl KeccakF1600_int + + ldr x27,[sp,#40] // restore arguments + ldp x28,x30,[sp,#48] + b Loop_absorb + +.align 4 +Labsorbed: + ldr x27,[sp,#32] + stp x0,x1,[x27,#16*0] + stp x2,x3,[x27,#16*1] + stp x4,x5,[x27,#16*2] + stp x6,x7,[x27,#16*3] + stp x8,x9,[x27,#16*4] + stp x10,x11,[x27,#16*5] + stp x12,x13,[x27,#16*6] + stp x14,x15,[x27,#16*7] + stp x16,x17,[x27,#16*8] + stp x25,x19,[x27,#16*9] + stp x20,x21,[x27,#16*10] + stp x22,x23,[x27,#16*11] + str x24,[x27,#16*12] + + mov x0,x28 // return value + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 +.long 0xd50323bf // autiasp + ret + +.globl _SHA3_squeeze + +.align 5 +_SHA3_squeeze: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-48]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + + mov x19,x0 // put aside arguments + mov x20,x1 + mov x21,x2 + mov x22,x3 + +Loop_squeeze: + ldr x4,[x0],#8 + cmp x21,#8 + blo Lsqueeze_tail +#ifdef __AARCH64EB__ + rev x4,x4 +#endif + str x4,[x20],#8 + subs x21,x21,#8 + beq Lsqueeze_done + + subs x3,x3,#8 + bhi Loop_squeeze + + mov x0,x19 + bl KeccakF1600 + mov x0,x19 + mov x3,x22 + b Loop_squeeze + +.align 4 +Lsqueeze_tail: + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + +Lsqueeze_done: + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x29,x30,[sp],#48 +.long 0xd50323bf // autiasp + ret + + +.align 5 +KeccakF1600_ce: + mov x9,#12 + adr x10,iotas + b Loop_ce +.align 4 +Loop_ce: + ////////////////////////////////////////////////// Theta +.long 0xce052819 //eor3 v25.16b,v0.16b,v5.16b,v10.16b +.long 0xce062c3a //eor3 v26.16b,v1.16b,v6.16b,v11.16b +.long 0xce07305b //eor3 v27.16b,v2.16b,v7.16b,v12.16b +.long 0xce08347c //eor3 v28.16b,v3.16b,v8.16b,v13.16b +.long 0xce09389d //eor3 v29.16b,v4.16b,v9.16b,v14.16b +.long 0xce0f5339 //eor3 v25.16b,v25.16b, v15.16b,v20.16b +.long 0xce10575a //eor3 v26.16b,v26.16b, v16.16b,v21.16b +.long 0xce115b7b //eor3 v27.16b,v27.16b, v17.16b,v22.16b +.long 0xce125f9c //eor3 v28.16b,v28.16b, v18.16b,v23.16b +.long 0xce1363bd //eor3 v29.16b,v29.16b, v19.16b,v24.16b + +.long 0xce7b8f3e //rax1 v30.16b,v25.16b,v27.16b // D[1] +.long 0xce7c8f5f //rax1 v31.16b,v26.16b,v28.16b // D[2] +.long 0xce7d8f7b //rax1 v27.16b,v27.16b,v29.16b // D[3] +.long 0xce798f9c //rax1 v28.16b,v28.16b,v25.16b // D[4] +.long 0xce7a8fbd //rax1 v29.16b,v29.16b,v26.16b // D[0] + + ////////////////////////////////////////////////// Theta+Rho+Pi +.long 0xce9e50d9 //xar v25.16b, v6.16b,v30.16b,#64-44 // C[0]=A[0][1] +.long 0xce9cb126 //xar v6.16b,v9.16b,v28.16b,#64-20 +.long 0xce9f0ec9 //xar v9.16b,v22.16b,v31.16b,#64-61 +.long 0xce9c65d6 //xar v22.16b,v14.16b,v28.16b,#64-39 +.long 0xce9dba8e //xar v14.16b,v20.16b,v29.16b,#64-18 + +.long 0xce9f0854 //xar v20.16b,v2.16b,v31.16b,#64-62 + +.long 0xce9f5582 //xar v2.16b,v12.16b,v31.16b,#64-43 +.long 0xce9b9dac //xar v12.16b,v13.16b,v27.16b,#64-25 +.long 0xce9ce26d //xar v13.16b,v19.16b,v28.16b,#64-8 +.long 0xce9b22f3 //xar v19.16b,v23.16b,v27.16b,#64-56 +.long 0xce9d5df7 //xar v23.16b,v15.16b,v29.16b,#64-41 + +.long 0xce9c948f //xar v15.16b,v4.16b,v28.16b,#64-27 + + eor v0.16b,v0.16b,v29.16b + ldr x11,[x10],#8 + +.long 0xce9bae5a //xar v26.16b, v18.16b,v27.16b,#64-21 // C[1]=A[0][3] +.long 0xce9fc632 //xar v18.16b,v17.16b,v31.16b,#64-15 +.long 0xce9ed971 //xar v17.16b,v11.16b,v30.16b,#64-10 +.long 0xce9fe8eb //xar v11.16b,v7.16b,v31.16b,#64-6 +.long 0xce9df547 //xar v7.16b,v10.16b,v29.16b,#64-3 + +.long 0xce9efc2a //xar v10.16b,v1.16b,v30.16b,#64-1 // * + +.long 0xce9ccb04 //xar v4.16b,v24.16b,v28.16b,#64-14 +.long 0xce9efab8 //xar v24.16b,v21.16b,v30.16b,#64-2 +.long 0xce9b2515 //xar v21.16b,v8.16b,v27.16b,#64-55 +.long 0xce9e4e08 //xar v8.16b,v16.16b,v30.16b,#64-45 +.long 0xce9d70b0 //xar v16.16b,v5.16b,v29.16b,#64-36 + +.long 0xce9b907b //xar v27.16b, v3.16b,v27.16b,#64-28 // C[2]=A[1][0] + + ////////////////////////////////////////////////// Chi+Iota + dup v31.2d,x11 // borrow C[6] +.long 0xce22641c //bcax v28.16b, v0.16b,v2.16b,v25.16b // * +.long 0xce3a0b21 //bcax v1.16b,v25.16b, v26.16b, v2.16b // * +.long 0xce246842 //bcax v2.16b,v2.16b,v4.16b,v26.16b +.long 0xce201343 //bcax v3.16b,v26.16b, v0.16b,v4.16b +.long 0xce390084 //bcax v4.16b,v4.16b,v25.16b, v0.16b + +.long 0xce271b65 //bcax v5.16b,v27.16b, v7.16b,v6.16b // * +.long 0xce281cd9 //bcax v25.16b, v6.16b,v8.16b,v7.16b // * +.long 0xce2920e7 //bcax v7.16b,v7.16b,v9.16b,v8.16b +.long 0xce3b2508 //bcax v8.16b,v8.16b,v27.16b, v9.16b +.long 0xce266d29 //bcax v9.16b,v9.16b,v6.16b,v27.16b + + eor v0.16b,v28.16b,v31.16b // Iota + +.long 0xce2c2d5a //bcax v26.16b, v10.16b,v12.16b,v11.16b // * +.long 0xce2d317b //bcax v27.16b, v11.16b,v13.16b,v12.16b // * +.long 0xce2e358c //bcax v12.16b,v12.16b,v14.16b,v13.16b +.long 0xce2a39ad //bcax v13.16b,v13.16b,v10.16b,v14.16b +.long 0xce2b29ce //bcax v14.16b,v14.16b,v11.16b,v10.16b + +.long 0xce3141fc //bcax v28.16b, v15.16b,v17.16b,v16.16b // * +.long 0xce32461d //bcax v29.16b, v16.16b,v18.16b,v17.16b // * +.long 0xce334a31 //bcax v17.16b,v17.16b,v19.16b,v18.16b +.long 0xce2f4e52 //bcax v18.16b,v18.16b,v15.16b,v19.16b +.long 0xce303e73 //bcax v19.16b,v19.16b,v16.16b,v15.16b + +.long 0xce36569e //bcax v30.16b, v20.16b,v22.16b,v21.16b // * +.long 0xce375abf //bcax v31.16b, v21.16b,v23.16b,v22.16b // * +.long 0xce385ed6 //bcax v22.16b,v22.16b,v24.16b,v23.16b +.long 0xce3462f7 //bcax v23.16b,v23.16b,v20.16b,v24.16b +.long 0xce355318 //bcax v24.16b,v24.16b,v21.16b,v20.16b + ////////////////////////////////////////////////// Theta +.long 0xce056806 //eor3 v6.16b,v0.16b,v5.16b,v26.16b +.long 0xce196c2a //eor3 v10.16b,v1.16b,v25.16b,v27.16b +.long 0xce07304b //eor3 v11.16b,v2.16b,v7.16b,v12.16b +.long 0xce08346f //eor3 v15.16b,v3.16b,v8.16b,v13.16b +.long 0xce093890 //eor3 v16.16b,v4.16b,v9.16b,v14.16b +.long 0xce1c78c6 //eor3 v6.16b,v6.16b, v28.16b,v30.16b +.long 0xce1d7d4a //eor3 v10.16b,v10.16b, v29.16b,v31.16b +.long 0xce11596b //eor3 v11.16b,v11.16b, v17.16b,v22.16b +.long 0xce125def //eor3 v15.16b,v15.16b, v18.16b,v23.16b +.long 0xce136210 //eor3 v16.16b,v16.16b, v19.16b,v24.16b + +.long 0xce6b8cd4 //rax1 v20.16b,v6.16b,v11.16b // D[1] +.long 0xce6f8d55 //rax1 v21.16b,v10.16b,v15.16b // D[2] +.long 0xce708d6b //rax1 v11.16b,v11.16b,v16.16b // D[3] +.long 0xce668def //rax1 v15.16b,v15.16b,v6.16b // D[4] +.long 0xce6a8e10 //rax1 v16.16b,v16.16b,v10.16b // D[0] + + ////////////////////////////////////////////////// Theta+Rho+Pi +.long 0xce945326 //xar v6.16b, v25.16b,v20.16b,#64-44 // C[0]=A[0][1] +.long 0xce8fb139 //xar v25.16b,v9.16b,v15.16b,#64-20 +.long 0xce950ec9 //xar v9.16b,v22.16b,v21.16b,#64-61 +.long 0xce8f65d6 //xar v22.16b,v14.16b,v15.16b,#64-39 +.long 0xce90bbce //xar v14.16b,v30.16b,v16.16b,#64-18 + +.long 0xce95085e //xar v30.16b,v2.16b,v21.16b,#64-62 + +.long 0xce955582 //xar v2.16b,v12.16b,v21.16b,#64-43 +.long 0xce8b9dac //xar v12.16b,v13.16b,v11.16b,#64-25 +.long 0xce8fe26d //xar v13.16b,v19.16b,v15.16b,#64-8 +.long 0xce8b22f3 //xar v19.16b,v23.16b,v11.16b,#64-56 +.long 0xce905f97 //xar v23.16b,v28.16b,v16.16b,#64-41 + +.long 0xce8f949c //xar v28.16b,v4.16b,v15.16b,#64-27 + + eor v0.16b,v0.16b,v16.16b + ldr x11,[x10],#8 + +.long 0xce8bae4a //xar v10.16b, v18.16b,v11.16b,#64-21 // C[1]=A[0][3] +.long 0xce95c632 //xar v18.16b,v17.16b,v21.16b,#64-15 +.long 0xce94db71 //xar v17.16b,v27.16b,v20.16b,#64-10 +.long 0xce95e8fb //xar v27.16b,v7.16b,v21.16b,#64-6 +.long 0xce90f747 //xar v7.16b,v26.16b,v16.16b,#64-3 + +.long 0xce94fc3a //xar v26.16b,v1.16b,v20.16b,#64-1 // * + +.long 0xce8fcb04 //xar v4.16b,v24.16b,v15.16b,#64-14 +.long 0xce94fbf8 //xar v24.16b,v31.16b,v20.16b,#64-2 +.long 0xce8b251f //xar v31.16b,v8.16b,v11.16b,#64-55 +.long 0xce944fa8 //xar v8.16b,v29.16b,v20.16b,#64-45 +.long 0xce9070bd //xar v29.16b,v5.16b,v16.16b,#64-36 + +.long 0xce8b906b //xar v11.16b, v3.16b,v11.16b,#64-28 // C[2]=A[1][0] + + ////////////////////////////////////////////////// Chi+Iota + dup v21.2d,x11 // borrow C[6] +.long 0xce22180f //bcax v15.16b, v0.16b,v2.16b,v6.16b // * +.long 0xce2a08c1 //bcax v1.16b,v6.16b, v10.16b, v2.16b // * +.long 0xce242842 //bcax v2.16b,v2.16b,v4.16b,v10.16b +.long 0xce201143 //bcax v3.16b,v10.16b, v0.16b,v4.16b +.long 0xce260084 //bcax v4.16b,v4.16b,v6.16b, v0.16b + +.long 0xce276565 //bcax v5.16b,v11.16b, v7.16b,v25.16b // * +.long 0xce281f26 //bcax v6.16b, v25.16b,v8.16b,v7.16b // * +.long 0xce2920e7 //bcax v7.16b,v7.16b,v9.16b,v8.16b +.long 0xce2b2508 //bcax v8.16b,v8.16b,v11.16b, v9.16b +.long 0xce392d29 //bcax v9.16b,v9.16b,v25.16b,v11.16b + + eor v0.16b,v15.16b,v21.16b // Iota + +.long 0xce2c6f4a //bcax v10.16b, v26.16b,v12.16b,v27.16b // * +.long 0xce2d336b //bcax v11.16b, v27.16b,v13.16b,v12.16b // * +.long 0xce2e358c //bcax v12.16b,v12.16b,v14.16b,v13.16b +.long 0xce3a39ad //bcax v13.16b,v13.16b,v26.16b,v14.16b +.long 0xce3b69ce //bcax v14.16b,v14.16b,v27.16b,v26.16b + +.long 0xce31778f //bcax v15.16b, v28.16b,v17.16b,v29.16b // * +.long 0xce3247b0 //bcax v16.16b, v29.16b,v18.16b,v17.16b // * +.long 0xce334a31 //bcax v17.16b,v17.16b,v19.16b,v18.16b +.long 0xce3c4e52 //bcax v18.16b,v18.16b,v28.16b,v19.16b +.long 0xce3d7273 //bcax v19.16b,v19.16b,v29.16b,v28.16b + +.long 0xce367fd4 //bcax v20.16b, v30.16b,v22.16b,v31.16b // * +.long 0xce375bf5 //bcax v21.16b, v31.16b,v23.16b,v22.16b // * +.long 0xce385ed6 //bcax v22.16b,v22.16b,v24.16b,v23.16b +.long 0xce3e62f7 //bcax v23.16b,v23.16b,v30.16b,v24.16b +.long 0xce3f7b18 //bcax v24.16b,v24.16b,v31.16b,v30.16b + subs x9,x9,#1 + bne Loop_ce + + ret + + + +.align 5 +KeccakF1600_cext: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + stp d8,d9,[sp,#16] // per ABI requirement + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] + ldp d0,d1,[x0,#8*0] + ldp d2,d3,[x0,#8*2] + ldp d4,d5,[x0,#8*4] + ldp d6,d7,[x0,#8*6] + ldp d8,d9,[x0,#8*8] + ldp d10,d11,[x0,#8*10] + ldp d12,d13,[x0,#8*12] + ldp d14,d15,[x0,#8*14] + ldp d16,d17,[x0,#8*16] + ldp d18,d19,[x0,#8*18] + ldp d20,d21,[x0,#8*20] + ldp d22,d23,[x0,#8*22] + ldr d24,[x0,#8*24] + bl KeccakF1600_ce + ldr x30,[sp,#8] + stp d0,d1,[x0,#8*0] + stp d2,d3,[x0,#8*2] + stp d4,d5,[x0,#8*4] + stp d6,d7,[x0,#8*6] + stp d8,d9,[x0,#8*8] + stp d10,d11,[x0,#8*10] + stp d12,d13,[x0,#8*12] + stp d14,d15,[x0,#8*14] + stp d16,d17,[x0,#8*16] + stp d18,d19,[x0,#8*18] + stp d20,d21,[x0,#8*20] + stp d22,d23,[x0,#8*22] + str d24,[x0,#8*24] + + ldp d8,d9,[sp,#16] + ldp d10,d11,[sp,#32] + ldp d12,d13,[sp,#48] + ldp d14,d15,[sp,#64] + ldr x29,[sp],#80 +.long 0xd50323bf // autiasp + ret + +.globl _SHA3_absorb_cext + +.align 5 +_SHA3_absorb_cext: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + stp d8,d9,[sp,#16] // per ABI requirement + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] + ldp d0,d1,[x0,#8*0] + ldp d2,d3,[x0,#8*2] + ldp d4,d5,[x0,#8*4] + ldp d6,d7,[x0,#8*6] + ldp d8,d9,[x0,#8*8] + ldp d10,d11,[x0,#8*10] + ldp d12,d13,[x0,#8*12] + ldp d14,d15,[x0,#8*14] + ldp d16,d17,[x0,#8*16] + ldp d18,d19,[x0,#8*18] + ldp d20,d21,[x0,#8*20] + ldp d22,d23,[x0,#8*22] + ldr d24,[x0,#8*24] + b Loop_absorb_ce + +.align 4 +Loop_absorb_ce: + subs x2,x2,x3 // len - bsz + blo Labsorbed_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v0.16b,v0.16b,v31.16b + cmp x3,#8*(0+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v1.16b,v1.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v2.16b,v2.16b,v31.16b + cmp x3,#8*(2+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v3.16b,v3.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v4.16b,v4.16b,v31.16b + cmp x3,#8*(4+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v5.16b,v5.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v6.16b,v6.16b,v31.16b + cmp x3,#8*(6+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v7.16b,v7.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v8.16b,v8.16b,v31.16b + cmp x3,#8*(8+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v9.16b,v9.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v10.16b,v10.16b,v31.16b + cmp x3,#8*(10+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v11.16b,v11.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v12.16b,v12.16b,v31.16b + cmp x3,#8*(12+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v13.16b,v13.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v14.16b,v14.16b,v31.16b + cmp x3,#8*(14+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v15.16b,v15.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v16.16b,v16.16b,v31.16b + cmp x3,#8*(16+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v17.16b,v17.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v18.16b,v18.16b,v31.16b + cmp x3,#8*(18+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v19.16b,v19.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v20.16b,v20.16b,v31.16b + cmp x3,#8*(20+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v21.16b,v21.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v22.16b,v22.16b,v31.16b + cmp x3,#8*(22+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v23.16b,v23.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v24.16b,v24.16b,v31.16b + +Lprocess_block_ce: + + bl KeccakF1600_ce + + b Loop_absorb_ce + +.align 4 +Labsorbed_ce: + stp d0,d1,[x0,#8*0] + stp d2,d3,[x0,#8*2] + stp d4,d5,[x0,#8*4] + stp d6,d7,[x0,#8*6] + stp d8,d9,[x0,#8*8] + stp d10,d11,[x0,#8*10] + stp d12,d13,[x0,#8*12] + stp d14,d15,[x0,#8*14] + stp d16,d17,[x0,#8*16] + stp d18,d19,[x0,#8*18] + stp d20,d21,[x0,#8*20] + stp d22,d23,[x0,#8*22] + str d24,[x0,#8*24] + add x0,x2,x3 // return value + + ldp d8,d9,[sp,#16] + ldp d10,d11,[sp,#32] + ldp d12,d13,[sp,#48] + ldp d14,d15,[sp,#64] + ldp x29,x30,[sp],#80 +.long 0xd50323bf // autiasp + ret + +.globl _SHA3_squeeze_cext + +.align 5 +_SHA3_squeeze_cext: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + mov x9,x0 + mov x10,x3 + +Loop_squeeze_ce: + ldr x4,[x9],#8 + cmp x2,#8 + blo Lsqueeze_tail_ce +#ifdef __AARCH64EB__ + rev x4,x4 +#endif + str x4,[x1],#8 + beq Lsqueeze_done_ce + + sub x2,x2,#8 + subs x10,x10,#8 + bhi Loop_squeeze_ce + + bl KeccakF1600_cext + ldr x30,[sp,#8] + mov x9,x0 + mov x10,x3 + b Loop_squeeze_ce + +.align 4 +Lsqueeze_tail_ce: + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + +Lsqueeze_done_ce: + ldr x29,[sp],#16 +.long 0xd50323bf // autiasp + ret + +.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha1-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha1-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha1-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha1-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1221 @@ +#include "arm_arch.h" + +.text + + +.private_extern _OPENSSL_armcap_P +.globl _sha1_block_data_order + +.align 6 +_sha1_block_data_order: +#ifdef __ILP32__ + ldrsw x16,LOPENSSL_armcap_P +#else + ldr x16,LOPENSSL_armcap_P +#endif + adr x17,LOPENSSL_armcap_P + add x16,x16,x17 + ldr w16,[x16] + tst w16,#ARMV8_SHA1 + b.ne Lv8_entry + + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + + ldp w20,w21,[x0] + ldp w22,w23,[x0,#8] + ldr w24,[x0,#16] + +Loop: + ldr x3,[x1],#64 + movz w28,#0x7999 + sub x2,x2,#1 + movk w28,#0x5a82,lsl#16 +#ifdef __ARMEB__ + ror x3,x3,#32 +#else + rev32 x3,x3 +#endif + add w24,w24,w28 // warm it up + add w24,w24,w3 + lsr x4,x3,#32 + ldr x5,[x1,#-56] + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + orr w25,w25,w26 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + add w23,w23,w4 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x5,x5,#32 +#else + rev32 x5,x5 +#endif + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + orr w25,w25,w26 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + add w22,w22,w5 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + lsr x6,x5,#32 + ldr x7,[x1,#-48] + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + orr w25,w25,w26 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + add w21,w21,w6 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x7,x7,#32 +#else + rev32 x7,x7 +#endif + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + orr w25,w25,w26 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + add w20,w20,w7 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + lsr x8,x7,#32 + ldr x9,[x1,#-40] + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + orr w25,w25,w26 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + add w24,w24,w8 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x9,x9,#32 +#else + rev32 x9,x9 +#endif + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + orr w25,w25,w26 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + add w23,w23,w9 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + lsr x10,x9,#32 + ldr x11,[x1,#-32] + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + orr w25,w25,w26 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + add w22,w22,w10 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x11,x11,#32 +#else + rev32 x11,x11 +#endif + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + orr w25,w25,w26 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + add w21,w21,w11 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + lsr x12,x11,#32 + ldr x13,[x1,#-24] + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + orr w25,w25,w26 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + add w20,w20,w12 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x13,x13,#32 +#else + rev32 x13,x13 +#endif + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + orr w25,w25,w26 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + add w24,w24,w13 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + lsr x14,x13,#32 + ldr x15,[x1,#-16] + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + orr w25,w25,w26 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + add w23,w23,w14 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x15,x15,#32 +#else + rev32 x15,x15 +#endif + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + orr w25,w25,w26 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + add w22,w22,w15 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + lsr x16,x15,#32 + ldr x17,[x1,#-8] + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + orr w25,w25,w26 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + add w21,w21,w16 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x17,x17,#32 +#else + rev32 x17,x17 +#endif + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + orr w25,w25,w26 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + add w20,w20,w17 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + lsr x19,x17,#32 + eor w3,w3,w5 + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + eor w3,w3,w11 + add w24,w24,w28 // future e+=K + orr w25,w25,w26 + add w20,w20,w27 // e+=rot(a,5) + eor w3,w3,w16 + ror w22,w22,#2 + add w24,w24,w19 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w3,w3,#31 + eor w4,w4,w6 + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + eor w4,w4,w12 + add w23,w23,w28 // future e+=K + orr w25,w25,w26 + add w24,w24,w27 // e+=rot(a,5) + eor w4,w4,w17 + ror w21,w21,#2 + add w23,w23,w3 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w4,w4,#31 + eor w5,w5,w7 + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + eor w5,w5,w13 + add w22,w22,w28 // future e+=K + orr w25,w25,w26 + add w23,w23,w27 // e+=rot(a,5) + eor w5,w5,w19 + ror w20,w20,#2 + add w22,w22,w4 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w5,w5,#31 + eor w6,w6,w8 + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + eor w6,w6,w14 + add w21,w21,w28 // future e+=K + orr w25,w25,w26 + add w22,w22,w27 // e+=rot(a,5) + eor w6,w6,w3 + ror w24,w24,#2 + add w21,w21,w5 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w6,w6,#31 + eor w7,w7,w9 + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + eor w7,w7,w15 + add w20,w20,w28 // future e+=K + orr w25,w25,w26 + add w21,w21,w27 // e+=rot(a,5) + eor w7,w7,w4 + ror w23,w23,#2 + add w20,w20,w6 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w7,w7,#31 + movz w28,#0xeba1 + movk w28,#0x6ed9,lsl#16 + eor w8,w8,w10 + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + eor w8,w8,w16 + add w24,w24,w28 // future e+=K + orr w25,w25,w26 + add w20,w20,w27 // e+=rot(a,5) + eor w8,w8,w5 + ror w22,w22,#2 + add w24,w24,w7 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w9,w9,w17 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w9,w9,w6 + add w23,w23,w8 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w10,w10,w19 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w10,w10,w7 + add w22,w22,w9 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w11,w11,w3 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w11,w11,w8 + add w21,w21,w10 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w11,w11,#31 + eor w12,w12,w14 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w12,w12,w4 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w12,w12,w9 + add w20,w20,w11 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w12,w12,#31 + eor w13,w13,w15 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w13,w13,w5 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w13,w13,w10 + add w24,w24,w12 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w13,w13,#31 + eor w14,w14,w16 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w14,w14,w6 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w14,w14,w11 + add w23,w23,w13 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w14,w14,#31 + eor w15,w15,w17 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w15,w15,w7 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w15,w15,w12 + add w22,w22,w14 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w15,w15,#31 + eor w16,w16,w19 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w16,w16,w8 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w16,w16,w13 + add w21,w21,w15 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w17,w17,w9 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w17,w17,w14 + add w20,w20,w16 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w19,w19,w10 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w19,w19,w15 + add w24,w24,w17 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w19,w19,#31 + eor w3,w3,w5 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w3,w3,w11 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w3,w3,w16 + add w23,w23,w19 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w3,w3,#31 + eor w4,w4,w6 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w4,w4,w12 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w4,w4,w17 + add w22,w22,w3 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w4,w4,#31 + eor w5,w5,w7 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w5,w5,w13 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w5,w5,w19 + add w21,w21,w4 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w5,w5,#31 + eor w6,w6,w8 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w6,w6,w14 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w6,w6,w3 + add w20,w20,w5 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w6,w6,#31 + eor w7,w7,w9 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w7,w7,w15 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w7,w7,w4 + add w24,w24,w6 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w7,w7,#31 + eor w8,w8,w10 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w8,w8,w16 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w8,w8,w5 + add w23,w23,w7 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w9,w9,w17 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w9,w9,w6 + add w22,w22,w8 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w10,w10,w19 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w10,w10,w7 + add w21,w21,w9 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w11,w11,w3 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w11,w11,w8 + add w20,w20,w10 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w11,w11,#31 + movz w28,#0xbcdc + movk w28,#0x8f1b,lsl#16 + eor w12,w12,w14 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w12,w12,w4 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w12,w12,w9 + add w24,w24,w11 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w12,w12,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w13,w13,w15 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 // future e+=K + eor w13,w13,w5 + add w24,w24,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w21,w21,#2 + eor w13,w13,w10 + add w23,w23,w12 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w13,w13,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w14,w14,w16 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 // future e+=K + eor w14,w14,w6 + add w23,w23,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w20,w20,#2 + eor w14,w14,w11 + add w22,w22,w13 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w14,w14,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w15,w15,w17 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 // future e+=K + eor w15,w15,w7 + add w22,w22,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w24,w24,#2 + eor w15,w15,w12 + add w21,w21,w14 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w15,w15,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w16,w16,w19 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 // future e+=K + eor w16,w16,w8 + add w21,w21,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w23,w23,#2 + eor w16,w16,w13 + add w20,w20,w15 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w16,w16,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w17,w17,w3 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 // future e+=K + eor w17,w17,w9 + add w20,w20,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w22,w22,#2 + eor w17,w17,w14 + add w24,w24,w16 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w17,w17,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w19,w19,w4 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 // future e+=K + eor w19,w19,w10 + add w24,w24,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w21,w21,#2 + eor w19,w19,w15 + add w23,w23,w17 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w19,w19,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w3,w3,w5 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 // future e+=K + eor w3,w3,w11 + add w23,w23,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w20,w20,#2 + eor w3,w3,w16 + add w22,w22,w19 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w3,w3,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w4,w4,w6 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 // future e+=K + eor w4,w4,w12 + add w22,w22,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w24,w24,#2 + eor w4,w4,w17 + add w21,w21,w3 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w4,w4,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w5,w5,w7 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 // future e+=K + eor w5,w5,w13 + add w21,w21,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w23,w23,#2 + eor w5,w5,w19 + add w20,w20,w4 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w5,w5,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w6,w6,w8 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 // future e+=K + eor w6,w6,w14 + add w20,w20,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w22,w22,#2 + eor w6,w6,w3 + add w24,w24,w5 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w6,w6,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w7,w7,w9 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 // future e+=K + eor w7,w7,w15 + add w24,w24,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w21,w21,#2 + eor w7,w7,w4 + add w23,w23,w6 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w7,w7,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w8,w8,w10 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 // future e+=K + eor w8,w8,w16 + add w23,w23,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w20,w20,#2 + eor w8,w8,w5 + add w22,w22,w7 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w8,w8,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w9,w9,w11 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 // future e+=K + eor w9,w9,w17 + add w22,w22,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w24,w24,#2 + eor w9,w9,w6 + add w21,w21,w8 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w9,w9,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w10,w10,w12 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 // future e+=K + eor w10,w10,w19 + add w21,w21,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w23,w23,#2 + eor w10,w10,w7 + add w20,w20,w9 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w10,w10,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w11,w11,w13 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 // future e+=K + eor w11,w11,w3 + add w20,w20,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w22,w22,#2 + eor w11,w11,w8 + add w24,w24,w10 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w11,w11,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w12,w12,w14 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 // future e+=K + eor w12,w12,w4 + add w24,w24,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w21,w21,#2 + eor w12,w12,w9 + add w23,w23,w11 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w12,w12,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w13,w13,w15 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 // future e+=K + eor w13,w13,w5 + add w23,w23,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w20,w20,#2 + eor w13,w13,w10 + add w22,w22,w12 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w13,w13,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w14,w14,w16 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 // future e+=K + eor w14,w14,w6 + add w22,w22,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w24,w24,#2 + eor w14,w14,w11 + add w21,w21,w13 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w14,w14,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w15,w15,w17 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 // future e+=K + eor w15,w15,w7 + add w21,w21,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w23,w23,#2 + eor w15,w15,w12 + add w20,w20,w14 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w15,w15,#31 + movz w28,#0xc1d6 + movk w28,#0xca62,lsl#16 + orr w25,w22,w23 + and w26,w22,w23 + eor w16,w16,w19 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 // future e+=K + eor w16,w16,w8 + add w20,w20,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w22,w22,#2 + eor w16,w16,w13 + add w24,w24,w15 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w17,w17,w9 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w17,w17,w14 + add w23,w23,w16 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w19,w19,w10 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w19,w19,w15 + add w22,w22,w17 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w19,w19,#31 + eor w3,w3,w5 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w3,w3,w11 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w3,w3,w16 + add w21,w21,w19 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w3,w3,#31 + eor w4,w4,w6 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w4,w4,w12 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w4,w4,w17 + add w20,w20,w3 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w4,w4,#31 + eor w5,w5,w7 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w5,w5,w13 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w5,w5,w19 + add w24,w24,w4 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w5,w5,#31 + eor w6,w6,w8 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w6,w6,w14 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w6,w6,w3 + add w23,w23,w5 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w6,w6,#31 + eor w7,w7,w9 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w7,w7,w15 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w7,w7,w4 + add w22,w22,w6 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w7,w7,#31 + eor w8,w8,w10 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w8,w8,w16 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w8,w8,w5 + add w21,w21,w7 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w9,w9,w17 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w9,w9,w6 + add w20,w20,w8 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w10,w10,w19 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w10,w10,w7 + add w24,w24,w9 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w11,w11,w3 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w11,w11,w8 + add w23,w23,w10 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w11,w11,#31 + eor w12,w12,w14 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w12,w12,w4 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w12,w12,w9 + add w22,w22,w11 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w12,w12,#31 + eor w13,w13,w15 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w13,w13,w5 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w13,w13,w10 + add w21,w21,w12 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w13,w13,#31 + eor w14,w14,w16 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w14,w14,w6 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w14,w14,w11 + add w20,w20,w13 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w14,w14,#31 + eor w15,w15,w17 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w15,w15,w7 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w15,w15,w12 + add w24,w24,w14 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w15,w15,#31 + eor w16,w16,w19 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w16,w16,w8 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w16,w16,w13 + add w23,w23,w15 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w17,w17,w9 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w17,w17,w14 + add w22,w22,w16 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w19,w19,w10 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w19,w19,w15 + add w21,w21,w17 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w19,w19,#31 + ldp w4,w5,[x0] + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + add w20,w20,w19 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ldp w6,w7,[x0,#8] + eor w25,w24,w22 + ror w27,w21,#27 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + ldr w8,[x0,#16] + add w20,w20,w25 // e+=F(b,c,d) + add w21,w21,w5 + add w22,w22,w6 + add w20,w20,w4 + add w23,w23,w7 + add w24,w24,w8 + stp w20,w21,[x0] + stp w22,w23,[x0,#8] + str w24,[x0,#16] + cbnz x2,Loop + + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x23,x24,[sp,#48] + ldp x25,x26,[sp,#64] + ldp x27,x28,[sp,#80] + ldr x29,[sp],#96 + ret + + +.align 6 +sha1_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + adr x4,Lconst + eor v1.16b,v1.16b,v1.16b + ld1 {v0.4s},[x0],#16 + ld1 {v1.s}[0],[x0] + sub x0,x0,#16 + ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4] + +Loop_hw: + ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 + sub x2,x2,#1 + rev32 v4.16b,v4.16b + rev32 v5.16b,v5.16b + + add v20.4s,v16.4s,v4.4s + rev32 v6.16b,v6.16b + orr v22.16b,v0.16b,v0.16b // offload + + add v21.4s,v16.4s,v5.4s + rev32 v7.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b +.long 0x5e140020 //sha1c v0.16b,v1.16b,v20.4s // 0 + add v20.4s,v16.4s,v6.4s +.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 1 +.long 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s + add v21.4s,v16.4s,v7.4s +.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b +.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 2 +.long 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s + add v20.4s,v16.4s,v4.4s +.long 0x5e281885 //sha1su1 v5.16b,v4.16b +.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 3 +.long 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s + add v21.4s,v17.4s,v5.4s +.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b +.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 4 +.long 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s + add v20.4s,v17.4s,v6.4s +.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b +.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 5 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v17.4s,v7.4s +.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b +.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 6 +.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s + add v20.4s,v17.4s,v4.4s +.long 0x5e281885 //sha1su1 v5.16b,v4.16b +.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 7 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v17.4s,v5.4s +.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b +.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 8 +.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s + add v20.4s,v18.4s,v6.4s +.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b +.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 9 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v18.4s,v7.4s +.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b +.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 10 +.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s + add v20.4s,v18.4s,v4.4s +.long 0x5e281885 //sha1su1 v5.16b,v4.16b +.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 11 +.long 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s + add v21.4s,v18.4s,v5.4s +.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b +.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 12 +.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s + add v20.4s,v18.4s,v6.4s +.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b +.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 13 +.long 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s + add v21.4s,v19.4s,v7.4s +.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b +.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 14 +.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s + add v20.4s,v19.4s,v4.4s +.long 0x5e281885 //sha1su1 v5.16b,v4.16b +.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 15 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v19.4s,v5.4s +.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b +.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 16 +.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s + add v20.4s,v19.4s,v6.4s +.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 17 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v19.4s,v7.4s + +.long 0x5e280803 //sha1h v3.16b,v0.16b // 18 +.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s + +.long 0x5e280802 //sha1h v2.16b,v0.16b // 19 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + + add v1.4s,v1.4s,v2.4s + add v0.4s,v0.4s,v22.4s + + cbnz x2,Loop_hw + + st1 {v0.4s},[x0],#16 + st1 {v1.s}[0],[x0] + + ldr x29,[sp],#16 + ret + +.align 6 +Lconst: +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39 +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59 +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79 +LOPENSSL_armcap_P: +#ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +#else +.quad _OPENSSL_armcap_P-. +#endif +.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha256-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha256-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha256-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha256-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,2063 @@ +// Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the OpenSSL license (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// ==================================================================== +// Written by Andy Polyakov for the OpenSSL +// project. The module is, however, dual licensed under OpenSSL and +// CRYPTOGAMS licenses depending on where you obtain it. For further +// details see http://www.openssl.org/~appro/cryptogams/. +// +// Permission to use under GPLv2 terms is granted. +// ==================================================================== +// +// SHA256/512 for ARMv8. +// +// Performance in cycles per processed byte and improvement coefficient +// over code generated with "default" compiler: +// +// SHA256-hw SHA256(*) SHA512 +// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +// Denver 2.01 10.5 (+26%) 6.70 (+8%) +// X-Gene 20.0 (+100%) 12.8 (+300%(***)) +// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +// Kryo 1.92 17.4 (+30%) 11.2 (+8%) +// +// (*) Software SHA256 results are of lesser relevance, presented +// mostly for informational purposes. +// (**) The result is a trade-off: it's possible to improve it by +// 10% (or by 1 cycle per round), but at the cost of 20% loss +// on Cortex-A53 (or by 4 cycles per round). +// (***) Super-impressive coefficients over gcc-generated code are +// indication of some compiler "pathology", most notably code +// generated with -mgeneral-regs-only is significantly faster +// and the gap is only 40-90%. +// +// October 2016. +// +// Originally it was reckoned that it makes no sense to implement NEON +// version of SHA256 for 64-bit processors. This is because performance +// improvement on most wide-spread Cortex-A5x processors was observed +// to be marginal, same on Cortex-A53 and ~10% on A57. But then it was +// observed that 32-bit NEON SHA256 performs significantly better than +// 64-bit scalar version on *some* of the more recent processors. As +// result 64-bit NEON version of SHA256 was added to provide best +// all-round performance. For example it executes ~30% faster on X-Gene +// and Mongoose. [For reference, NEON version of SHA512 is bound to +// deliver much less improvement, likely *negative* on Cortex-A5x. +// Which is why NEON support is limited to SHA256.] + +#ifndef __KERNEL__ +# include "arm_arch.h" +#endif + +.text + + +.private_extern _OPENSSL_armcap_P +.globl _sha256_block_data_order + +.align 6 +_sha256_block_data_order: +#ifndef __KERNEL__ +# ifdef __ILP32__ + ldrsw x16,LOPENSSL_armcap_P +# else + ldr x16,LOPENSSL_armcap_P +# endif + adr x17,LOPENSSL_armcap_P + add x16,x16,x17 + ldr w16,[x16] + tst w16,#ARMV8_SHA256 + b.ne Lv8_entry + tst w16,#ARMV7_NEON + b.ne Lneon_entry +#endif +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#4*4 + + ldp w20,w21,[x0] // load context + ldp w22,w23,[x0,#2*4] + ldp w24,w25,[x0,#4*4] + add x2,x1,x2,lsl#6 // end of input + ldp w26,w27,[x0,#6*4] + adr x30,LK256 + stp x0,x2,[x29,#96] + +Loop: + ldp w3,w4,[x1],#2*4 + ldr w19,[x30],#4 // *K++ + eor w28,w21,w22 // magic seed + str x1,[x29,#112] +#ifndef __AARCH64EB__ + rev w3,w3 // 0 +#endif + ror w16,w24,#6 + add w27,w27,w19 // h+=K[i] + eor w6,w24,w24,ror#14 + and w17,w25,w24 + bic w19,w26,w24 + add w27,w27,w3 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w20,w21 // a^b, b^c in next round + eor w16,w16,w6,ror#11 // Sigma1(e) + ror w6,w20,#2 + add w27,w27,w17 // h+=Ch(e,f,g) + eor w17,w20,w20,ror#9 + add w27,w27,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w23,w23,w27 // d+=h + eor w28,w28,w21 // Maj(a,b,c) + eor w17,w6,w17,ror#13 // Sigma0(a) + add w27,w27,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w27,w27,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w4,w4 // 1 +#endif + ldp w5,w6,[x1],#2*4 + add w27,w27,w17 // h+=Sigma0(a) + ror w16,w23,#6 + add w26,w26,w28 // h+=K[i] + eor w7,w23,w23,ror#14 + and w17,w24,w23 + bic w28,w25,w23 + add w26,w26,w4 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w27,w20 // a^b, b^c in next round + eor w16,w16,w7,ror#11 // Sigma1(e) + ror w7,w27,#2 + add w26,w26,w17 // h+=Ch(e,f,g) + eor w17,w27,w27,ror#9 + add w26,w26,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w22,w22,w26 // d+=h + eor w19,w19,w20 // Maj(a,b,c) + eor w17,w7,w17,ror#13 // Sigma0(a) + add w26,w26,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w26,w26,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w5,w5 // 2 +#endif + add w26,w26,w17 // h+=Sigma0(a) + ror w16,w22,#6 + add w25,w25,w19 // h+=K[i] + eor w8,w22,w22,ror#14 + and w17,w23,w22 + bic w19,w24,w22 + add w25,w25,w5 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w26,w27 // a^b, b^c in next round + eor w16,w16,w8,ror#11 // Sigma1(e) + ror w8,w26,#2 + add w25,w25,w17 // h+=Ch(e,f,g) + eor w17,w26,w26,ror#9 + add w25,w25,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w21,w21,w25 // d+=h + eor w28,w28,w27 // Maj(a,b,c) + eor w17,w8,w17,ror#13 // Sigma0(a) + add w25,w25,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w25,w25,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w6,w6 // 3 +#endif + ldp w7,w8,[x1],#2*4 + add w25,w25,w17 // h+=Sigma0(a) + ror w16,w21,#6 + add w24,w24,w28 // h+=K[i] + eor w9,w21,w21,ror#14 + and w17,w22,w21 + bic w28,w23,w21 + add w24,w24,w6 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w25,w26 // a^b, b^c in next round + eor w16,w16,w9,ror#11 // Sigma1(e) + ror w9,w25,#2 + add w24,w24,w17 // h+=Ch(e,f,g) + eor w17,w25,w25,ror#9 + add w24,w24,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w20,w20,w24 // d+=h + eor w19,w19,w26 // Maj(a,b,c) + eor w17,w9,w17,ror#13 // Sigma0(a) + add w24,w24,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w24,w24,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w7,w7 // 4 +#endif + add w24,w24,w17 // h+=Sigma0(a) + ror w16,w20,#6 + add w23,w23,w19 // h+=K[i] + eor w10,w20,w20,ror#14 + and w17,w21,w20 + bic w19,w22,w20 + add w23,w23,w7 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w24,w25 // a^b, b^c in next round + eor w16,w16,w10,ror#11 // Sigma1(e) + ror w10,w24,#2 + add w23,w23,w17 // h+=Ch(e,f,g) + eor w17,w24,w24,ror#9 + add w23,w23,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w27,w27,w23 // d+=h + eor w28,w28,w25 // Maj(a,b,c) + eor w17,w10,w17,ror#13 // Sigma0(a) + add w23,w23,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w23,w23,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w8,w8 // 5 +#endif + ldp w9,w10,[x1],#2*4 + add w23,w23,w17 // h+=Sigma0(a) + ror w16,w27,#6 + add w22,w22,w28 // h+=K[i] + eor w11,w27,w27,ror#14 + and w17,w20,w27 + bic w28,w21,w27 + add w22,w22,w8 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w23,w24 // a^b, b^c in next round + eor w16,w16,w11,ror#11 // Sigma1(e) + ror w11,w23,#2 + add w22,w22,w17 // h+=Ch(e,f,g) + eor w17,w23,w23,ror#9 + add w22,w22,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w26,w26,w22 // d+=h + eor w19,w19,w24 // Maj(a,b,c) + eor w17,w11,w17,ror#13 // Sigma0(a) + add w22,w22,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w22,w22,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w9,w9 // 6 +#endif + add w22,w22,w17 // h+=Sigma0(a) + ror w16,w26,#6 + add w21,w21,w19 // h+=K[i] + eor w12,w26,w26,ror#14 + and w17,w27,w26 + bic w19,w20,w26 + add w21,w21,w9 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w22,w23 // a^b, b^c in next round + eor w16,w16,w12,ror#11 // Sigma1(e) + ror w12,w22,#2 + add w21,w21,w17 // h+=Ch(e,f,g) + eor w17,w22,w22,ror#9 + add w21,w21,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w25,w25,w21 // d+=h + eor w28,w28,w23 // Maj(a,b,c) + eor w17,w12,w17,ror#13 // Sigma0(a) + add w21,w21,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w21,w21,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w10,w10 // 7 +#endif + ldp w11,w12,[x1],#2*4 + add w21,w21,w17 // h+=Sigma0(a) + ror w16,w25,#6 + add w20,w20,w28 // h+=K[i] + eor w13,w25,w25,ror#14 + and w17,w26,w25 + bic w28,w27,w25 + add w20,w20,w10 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w21,w22 // a^b, b^c in next round + eor w16,w16,w13,ror#11 // Sigma1(e) + ror w13,w21,#2 + add w20,w20,w17 // h+=Ch(e,f,g) + eor w17,w21,w21,ror#9 + add w20,w20,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w24,w24,w20 // d+=h + eor w19,w19,w22 // Maj(a,b,c) + eor w17,w13,w17,ror#13 // Sigma0(a) + add w20,w20,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w20,w20,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w11,w11 // 8 +#endif + add w20,w20,w17 // h+=Sigma0(a) + ror w16,w24,#6 + add w27,w27,w19 // h+=K[i] + eor w14,w24,w24,ror#14 + and w17,w25,w24 + bic w19,w26,w24 + add w27,w27,w11 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w20,w21 // a^b, b^c in next round + eor w16,w16,w14,ror#11 // Sigma1(e) + ror w14,w20,#2 + add w27,w27,w17 // h+=Ch(e,f,g) + eor w17,w20,w20,ror#9 + add w27,w27,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w23,w23,w27 // d+=h + eor w28,w28,w21 // Maj(a,b,c) + eor w17,w14,w17,ror#13 // Sigma0(a) + add w27,w27,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w27,w27,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w12,w12 // 9 +#endif + ldp w13,w14,[x1],#2*4 + add w27,w27,w17 // h+=Sigma0(a) + ror w16,w23,#6 + add w26,w26,w28 // h+=K[i] + eor w15,w23,w23,ror#14 + and w17,w24,w23 + bic w28,w25,w23 + add w26,w26,w12 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w27,w20 // a^b, b^c in next round + eor w16,w16,w15,ror#11 // Sigma1(e) + ror w15,w27,#2 + add w26,w26,w17 // h+=Ch(e,f,g) + eor w17,w27,w27,ror#9 + add w26,w26,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w22,w22,w26 // d+=h + eor w19,w19,w20 // Maj(a,b,c) + eor w17,w15,w17,ror#13 // Sigma0(a) + add w26,w26,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w26,w26,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w13,w13 // 10 +#endif + add w26,w26,w17 // h+=Sigma0(a) + ror w16,w22,#6 + add w25,w25,w19 // h+=K[i] + eor w0,w22,w22,ror#14 + and w17,w23,w22 + bic w19,w24,w22 + add w25,w25,w13 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w26,w27 // a^b, b^c in next round + eor w16,w16,w0,ror#11 // Sigma1(e) + ror w0,w26,#2 + add w25,w25,w17 // h+=Ch(e,f,g) + eor w17,w26,w26,ror#9 + add w25,w25,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w21,w21,w25 // d+=h + eor w28,w28,w27 // Maj(a,b,c) + eor w17,w0,w17,ror#13 // Sigma0(a) + add w25,w25,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w25,w25,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w14,w14 // 11 +#endif + ldp w15,w0,[x1],#2*4 + add w25,w25,w17 // h+=Sigma0(a) + str w6,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 // h+=K[i] + eor w6,w21,w21,ror#14 + and w17,w22,w21 + bic w28,w23,w21 + add w24,w24,w14 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w25,w26 // a^b, b^c in next round + eor w16,w16,w6,ror#11 // Sigma1(e) + ror w6,w25,#2 + add w24,w24,w17 // h+=Ch(e,f,g) + eor w17,w25,w25,ror#9 + add w24,w24,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w20,w20,w24 // d+=h + eor w19,w19,w26 // Maj(a,b,c) + eor w17,w6,w17,ror#13 // Sigma0(a) + add w24,w24,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w24,w24,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w15,w15 // 12 +#endif + add w24,w24,w17 // h+=Sigma0(a) + str w7,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 // h+=K[i] + eor w7,w20,w20,ror#14 + and w17,w21,w20 + bic w19,w22,w20 + add w23,w23,w15 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w24,w25 // a^b, b^c in next round + eor w16,w16,w7,ror#11 // Sigma1(e) + ror w7,w24,#2 + add w23,w23,w17 // h+=Ch(e,f,g) + eor w17,w24,w24,ror#9 + add w23,w23,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w27,w27,w23 // d+=h + eor w28,w28,w25 // Maj(a,b,c) + eor w17,w7,w17,ror#13 // Sigma0(a) + add w23,w23,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w23,w23,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w0,w0 // 13 +#endif + ldp w1,w2,[x1] + add w23,w23,w17 // h+=Sigma0(a) + str w8,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 // h+=K[i] + eor w8,w27,w27,ror#14 + and w17,w20,w27 + bic w28,w21,w27 + add w22,w22,w0 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w23,w24 // a^b, b^c in next round + eor w16,w16,w8,ror#11 // Sigma1(e) + ror w8,w23,#2 + add w22,w22,w17 // h+=Ch(e,f,g) + eor w17,w23,w23,ror#9 + add w22,w22,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w26,w26,w22 // d+=h + eor w19,w19,w24 // Maj(a,b,c) + eor w17,w8,w17,ror#13 // Sigma0(a) + add w22,w22,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w22,w22,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w1,w1 // 14 +#endif + ldr w6,[sp,#12] + add w22,w22,w17 // h+=Sigma0(a) + str w9,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 // h+=K[i] + eor w9,w26,w26,ror#14 + and w17,w27,w26 + bic w19,w20,w26 + add w21,w21,w1 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w22,w23 // a^b, b^c in next round + eor w16,w16,w9,ror#11 // Sigma1(e) + ror w9,w22,#2 + add w21,w21,w17 // h+=Ch(e,f,g) + eor w17,w22,w22,ror#9 + add w21,w21,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w25,w25,w21 // d+=h + eor w28,w28,w23 // Maj(a,b,c) + eor w17,w9,w17,ror#13 // Sigma0(a) + add w21,w21,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w21,w21,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w2,w2 // 15 +#endif + ldr w7,[sp,#0] + add w21,w21,w17 // h+=Sigma0(a) + str w10,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 // h+=K[i] + ror w9,w4,#7 + and w17,w26,w25 + ror w8,w1,#17 + bic w28,w27,w25 + ror w10,w21,#2 + add w20,w20,w2 // h+=X[i] + eor w16,w16,w25,ror#11 + eor w9,w9,w4,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w21,w22 // a^b, b^c in next round + eor w16,w16,w25,ror#25 // Sigma1(e) + eor w10,w10,w21,ror#13 + add w20,w20,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w8,w8,w1,ror#19 + eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) + add w20,w20,w16 // h+=Sigma1(e) + eor w19,w19,w22 // Maj(a,b,c) + eor w17,w10,w21,ror#22 // Sigma0(a) + eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) + add w3,w3,w12 + add w24,w24,w20 // d+=h + add w20,w20,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w3,w3,w9 + add w20,w20,w17 // h+=Sigma0(a) + add w3,w3,w8 +Loop_16_xx: + ldr w8,[sp,#4] + str w11,[sp,#0] + ror w16,w24,#6 + add w27,w27,w19 // h+=K[i] + ror w10,w5,#7 + and w17,w25,w24 + ror w9,w2,#17 + bic w19,w26,w24 + ror w11,w20,#2 + add w27,w27,w3 // h+=X[i] + eor w16,w16,w24,ror#11 + eor w10,w10,w5,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w20,w21 // a^b, b^c in next round + eor w16,w16,w24,ror#25 // Sigma1(e) + eor w11,w11,w20,ror#13 + add w27,w27,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w9,w9,w2,ror#19 + eor w10,w10,w5,lsr#3 // sigma0(X[i+1]) + add w27,w27,w16 // h+=Sigma1(e) + eor w28,w28,w21 // Maj(a,b,c) + eor w17,w11,w20,ror#22 // Sigma0(a) + eor w9,w9,w2,lsr#10 // sigma1(X[i+14]) + add w4,w4,w13 + add w23,w23,w27 // d+=h + add w27,w27,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w4,w4,w10 + add w27,w27,w17 // h+=Sigma0(a) + add w4,w4,w9 + ldr w9,[sp,#8] + str w12,[sp,#4] + ror w16,w23,#6 + add w26,w26,w28 // h+=K[i] + ror w11,w6,#7 + and w17,w24,w23 + ror w10,w3,#17 + bic w28,w25,w23 + ror w12,w27,#2 + add w26,w26,w4 // h+=X[i] + eor w16,w16,w23,ror#11 + eor w11,w11,w6,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w27,w20 // a^b, b^c in next round + eor w16,w16,w23,ror#25 // Sigma1(e) + eor w12,w12,w27,ror#13 + add w26,w26,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w10,w10,w3,ror#19 + eor w11,w11,w6,lsr#3 // sigma0(X[i+1]) + add w26,w26,w16 // h+=Sigma1(e) + eor w19,w19,w20 // Maj(a,b,c) + eor w17,w12,w27,ror#22 // Sigma0(a) + eor w10,w10,w3,lsr#10 // sigma1(X[i+14]) + add w5,w5,w14 + add w22,w22,w26 // d+=h + add w26,w26,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w5,w5,w11 + add w26,w26,w17 // h+=Sigma0(a) + add w5,w5,w10 + ldr w10,[sp,#12] + str w13,[sp,#8] + ror w16,w22,#6 + add w25,w25,w19 // h+=K[i] + ror w12,w7,#7 + and w17,w23,w22 + ror w11,w4,#17 + bic w19,w24,w22 + ror w13,w26,#2 + add w25,w25,w5 // h+=X[i] + eor w16,w16,w22,ror#11 + eor w12,w12,w7,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w26,w27 // a^b, b^c in next round + eor w16,w16,w22,ror#25 // Sigma1(e) + eor w13,w13,w26,ror#13 + add w25,w25,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w11,w11,w4,ror#19 + eor w12,w12,w7,lsr#3 // sigma0(X[i+1]) + add w25,w25,w16 // h+=Sigma1(e) + eor w28,w28,w27 // Maj(a,b,c) + eor w17,w13,w26,ror#22 // Sigma0(a) + eor w11,w11,w4,lsr#10 // sigma1(X[i+14]) + add w6,w6,w15 + add w21,w21,w25 // d+=h + add w25,w25,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w6,w6,w12 + add w25,w25,w17 // h+=Sigma0(a) + add w6,w6,w11 + ldr w11,[sp,#0] + str w14,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 // h+=K[i] + ror w13,w8,#7 + and w17,w22,w21 + ror w12,w5,#17 + bic w28,w23,w21 + ror w14,w25,#2 + add w24,w24,w6 // h+=X[i] + eor w16,w16,w21,ror#11 + eor w13,w13,w8,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w25,w26 // a^b, b^c in next round + eor w16,w16,w21,ror#25 // Sigma1(e) + eor w14,w14,w25,ror#13 + add w24,w24,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w12,w12,w5,ror#19 + eor w13,w13,w8,lsr#3 // sigma0(X[i+1]) + add w24,w24,w16 // h+=Sigma1(e) + eor w19,w19,w26 // Maj(a,b,c) + eor w17,w14,w25,ror#22 // Sigma0(a) + eor w12,w12,w5,lsr#10 // sigma1(X[i+14]) + add w7,w7,w0 + add w20,w20,w24 // d+=h + add w24,w24,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w7,w7,w13 + add w24,w24,w17 // h+=Sigma0(a) + add w7,w7,w12 + ldr w12,[sp,#4] + str w15,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 // h+=K[i] + ror w14,w9,#7 + and w17,w21,w20 + ror w13,w6,#17 + bic w19,w22,w20 + ror w15,w24,#2 + add w23,w23,w7 // h+=X[i] + eor w16,w16,w20,ror#11 + eor w14,w14,w9,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w24,w25 // a^b, b^c in next round + eor w16,w16,w20,ror#25 // Sigma1(e) + eor w15,w15,w24,ror#13 + add w23,w23,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w13,w13,w6,ror#19 + eor w14,w14,w9,lsr#3 // sigma0(X[i+1]) + add w23,w23,w16 // h+=Sigma1(e) + eor w28,w28,w25 // Maj(a,b,c) + eor w17,w15,w24,ror#22 // Sigma0(a) + eor w13,w13,w6,lsr#10 // sigma1(X[i+14]) + add w8,w8,w1 + add w27,w27,w23 // d+=h + add w23,w23,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w8,w8,w14 + add w23,w23,w17 // h+=Sigma0(a) + add w8,w8,w13 + ldr w13,[sp,#8] + str w0,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 // h+=K[i] + ror w15,w10,#7 + and w17,w20,w27 + ror w14,w7,#17 + bic w28,w21,w27 + ror w0,w23,#2 + add w22,w22,w8 // h+=X[i] + eor w16,w16,w27,ror#11 + eor w15,w15,w10,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w23,w24 // a^b, b^c in next round + eor w16,w16,w27,ror#25 // Sigma1(e) + eor w0,w0,w23,ror#13 + add w22,w22,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w14,w14,w7,ror#19 + eor w15,w15,w10,lsr#3 // sigma0(X[i+1]) + add w22,w22,w16 // h+=Sigma1(e) + eor w19,w19,w24 // Maj(a,b,c) + eor w17,w0,w23,ror#22 // Sigma0(a) + eor w14,w14,w7,lsr#10 // sigma1(X[i+14]) + add w9,w9,w2 + add w26,w26,w22 // d+=h + add w22,w22,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w9,w9,w15 + add w22,w22,w17 // h+=Sigma0(a) + add w9,w9,w14 + ldr w14,[sp,#12] + str w1,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 // h+=K[i] + ror w0,w11,#7 + and w17,w27,w26 + ror w15,w8,#17 + bic w19,w20,w26 + ror w1,w22,#2 + add w21,w21,w9 // h+=X[i] + eor w16,w16,w26,ror#11 + eor w0,w0,w11,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w22,w23 // a^b, b^c in next round + eor w16,w16,w26,ror#25 // Sigma1(e) + eor w1,w1,w22,ror#13 + add w21,w21,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w15,w15,w8,ror#19 + eor w0,w0,w11,lsr#3 // sigma0(X[i+1]) + add w21,w21,w16 // h+=Sigma1(e) + eor w28,w28,w23 // Maj(a,b,c) + eor w17,w1,w22,ror#22 // Sigma0(a) + eor w15,w15,w8,lsr#10 // sigma1(X[i+14]) + add w10,w10,w3 + add w25,w25,w21 // d+=h + add w21,w21,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w10,w10,w0 + add w21,w21,w17 // h+=Sigma0(a) + add w10,w10,w15 + ldr w15,[sp,#0] + str w2,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 // h+=K[i] + ror w1,w12,#7 + and w17,w26,w25 + ror w0,w9,#17 + bic w28,w27,w25 + ror w2,w21,#2 + add w20,w20,w10 // h+=X[i] + eor w16,w16,w25,ror#11 + eor w1,w1,w12,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w21,w22 // a^b, b^c in next round + eor w16,w16,w25,ror#25 // Sigma1(e) + eor w2,w2,w21,ror#13 + add w20,w20,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w0,w0,w9,ror#19 + eor w1,w1,w12,lsr#3 // sigma0(X[i+1]) + add w20,w20,w16 // h+=Sigma1(e) + eor w19,w19,w22 // Maj(a,b,c) + eor w17,w2,w21,ror#22 // Sigma0(a) + eor w0,w0,w9,lsr#10 // sigma1(X[i+14]) + add w11,w11,w4 + add w24,w24,w20 // d+=h + add w20,w20,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w11,w11,w1 + add w20,w20,w17 // h+=Sigma0(a) + add w11,w11,w0 + ldr w0,[sp,#4] + str w3,[sp,#0] + ror w16,w24,#6 + add w27,w27,w19 // h+=K[i] + ror w2,w13,#7 + and w17,w25,w24 + ror w1,w10,#17 + bic w19,w26,w24 + ror w3,w20,#2 + add w27,w27,w11 // h+=X[i] + eor w16,w16,w24,ror#11 + eor w2,w2,w13,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w20,w21 // a^b, b^c in next round + eor w16,w16,w24,ror#25 // Sigma1(e) + eor w3,w3,w20,ror#13 + add w27,w27,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w1,w1,w10,ror#19 + eor w2,w2,w13,lsr#3 // sigma0(X[i+1]) + add w27,w27,w16 // h+=Sigma1(e) + eor w28,w28,w21 // Maj(a,b,c) + eor w17,w3,w20,ror#22 // Sigma0(a) + eor w1,w1,w10,lsr#10 // sigma1(X[i+14]) + add w12,w12,w5 + add w23,w23,w27 // d+=h + add w27,w27,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w12,w12,w2 + add w27,w27,w17 // h+=Sigma0(a) + add w12,w12,w1 + ldr w1,[sp,#8] + str w4,[sp,#4] + ror w16,w23,#6 + add w26,w26,w28 // h+=K[i] + ror w3,w14,#7 + and w17,w24,w23 + ror w2,w11,#17 + bic w28,w25,w23 + ror w4,w27,#2 + add w26,w26,w12 // h+=X[i] + eor w16,w16,w23,ror#11 + eor w3,w3,w14,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w27,w20 // a^b, b^c in next round + eor w16,w16,w23,ror#25 // Sigma1(e) + eor w4,w4,w27,ror#13 + add w26,w26,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w2,w2,w11,ror#19 + eor w3,w3,w14,lsr#3 // sigma0(X[i+1]) + add w26,w26,w16 // h+=Sigma1(e) + eor w19,w19,w20 // Maj(a,b,c) + eor w17,w4,w27,ror#22 // Sigma0(a) + eor w2,w2,w11,lsr#10 // sigma1(X[i+14]) + add w13,w13,w6 + add w22,w22,w26 // d+=h + add w26,w26,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w13,w13,w3 + add w26,w26,w17 // h+=Sigma0(a) + add w13,w13,w2 + ldr w2,[sp,#12] + str w5,[sp,#8] + ror w16,w22,#6 + add w25,w25,w19 // h+=K[i] + ror w4,w15,#7 + and w17,w23,w22 + ror w3,w12,#17 + bic w19,w24,w22 + ror w5,w26,#2 + add w25,w25,w13 // h+=X[i] + eor w16,w16,w22,ror#11 + eor w4,w4,w15,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w26,w27 // a^b, b^c in next round + eor w16,w16,w22,ror#25 // Sigma1(e) + eor w5,w5,w26,ror#13 + add w25,w25,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w3,w3,w12,ror#19 + eor w4,w4,w15,lsr#3 // sigma0(X[i+1]) + add w25,w25,w16 // h+=Sigma1(e) + eor w28,w28,w27 // Maj(a,b,c) + eor w17,w5,w26,ror#22 // Sigma0(a) + eor w3,w3,w12,lsr#10 // sigma1(X[i+14]) + add w14,w14,w7 + add w21,w21,w25 // d+=h + add w25,w25,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w14,w14,w4 + add w25,w25,w17 // h+=Sigma0(a) + add w14,w14,w3 + ldr w3,[sp,#0] + str w6,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 // h+=K[i] + ror w5,w0,#7 + and w17,w22,w21 + ror w4,w13,#17 + bic w28,w23,w21 + ror w6,w25,#2 + add w24,w24,w14 // h+=X[i] + eor w16,w16,w21,ror#11 + eor w5,w5,w0,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w25,w26 // a^b, b^c in next round + eor w16,w16,w21,ror#25 // Sigma1(e) + eor w6,w6,w25,ror#13 + add w24,w24,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w4,w4,w13,ror#19 + eor w5,w5,w0,lsr#3 // sigma0(X[i+1]) + add w24,w24,w16 // h+=Sigma1(e) + eor w19,w19,w26 // Maj(a,b,c) + eor w17,w6,w25,ror#22 // Sigma0(a) + eor w4,w4,w13,lsr#10 // sigma1(X[i+14]) + add w15,w15,w8 + add w20,w20,w24 // d+=h + add w24,w24,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w15,w15,w5 + add w24,w24,w17 // h+=Sigma0(a) + add w15,w15,w4 + ldr w4,[sp,#4] + str w7,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 // h+=K[i] + ror w6,w1,#7 + and w17,w21,w20 + ror w5,w14,#17 + bic w19,w22,w20 + ror w7,w24,#2 + add w23,w23,w15 // h+=X[i] + eor w16,w16,w20,ror#11 + eor w6,w6,w1,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w24,w25 // a^b, b^c in next round + eor w16,w16,w20,ror#25 // Sigma1(e) + eor w7,w7,w24,ror#13 + add w23,w23,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w5,w5,w14,ror#19 + eor w6,w6,w1,lsr#3 // sigma0(X[i+1]) + add w23,w23,w16 // h+=Sigma1(e) + eor w28,w28,w25 // Maj(a,b,c) + eor w17,w7,w24,ror#22 // Sigma0(a) + eor w5,w5,w14,lsr#10 // sigma1(X[i+14]) + add w0,w0,w9 + add w27,w27,w23 // d+=h + add w23,w23,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w0,w0,w6 + add w23,w23,w17 // h+=Sigma0(a) + add w0,w0,w5 + ldr w5,[sp,#8] + str w8,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 // h+=K[i] + ror w7,w2,#7 + and w17,w20,w27 + ror w6,w15,#17 + bic w28,w21,w27 + ror w8,w23,#2 + add w22,w22,w0 // h+=X[i] + eor w16,w16,w27,ror#11 + eor w7,w7,w2,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w23,w24 // a^b, b^c in next round + eor w16,w16,w27,ror#25 // Sigma1(e) + eor w8,w8,w23,ror#13 + add w22,w22,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w6,w6,w15,ror#19 + eor w7,w7,w2,lsr#3 // sigma0(X[i+1]) + add w22,w22,w16 // h+=Sigma1(e) + eor w19,w19,w24 // Maj(a,b,c) + eor w17,w8,w23,ror#22 // Sigma0(a) + eor w6,w6,w15,lsr#10 // sigma1(X[i+14]) + add w1,w1,w10 + add w26,w26,w22 // d+=h + add w22,w22,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w1,w1,w7 + add w22,w22,w17 // h+=Sigma0(a) + add w1,w1,w6 + ldr w6,[sp,#12] + str w9,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 // h+=K[i] + ror w8,w3,#7 + and w17,w27,w26 + ror w7,w0,#17 + bic w19,w20,w26 + ror w9,w22,#2 + add w21,w21,w1 // h+=X[i] + eor w16,w16,w26,ror#11 + eor w8,w8,w3,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w22,w23 // a^b, b^c in next round + eor w16,w16,w26,ror#25 // Sigma1(e) + eor w9,w9,w22,ror#13 + add w21,w21,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w7,w7,w0,ror#19 + eor w8,w8,w3,lsr#3 // sigma0(X[i+1]) + add w21,w21,w16 // h+=Sigma1(e) + eor w28,w28,w23 // Maj(a,b,c) + eor w17,w9,w22,ror#22 // Sigma0(a) + eor w7,w7,w0,lsr#10 // sigma1(X[i+14]) + add w2,w2,w11 + add w25,w25,w21 // d+=h + add w21,w21,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w2,w2,w8 + add w21,w21,w17 // h+=Sigma0(a) + add w2,w2,w7 + ldr w7,[sp,#0] + str w10,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 // h+=K[i] + ror w9,w4,#7 + and w17,w26,w25 + ror w8,w1,#17 + bic w28,w27,w25 + ror w10,w21,#2 + add w20,w20,w2 // h+=X[i] + eor w16,w16,w25,ror#11 + eor w9,w9,w4,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w21,w22 // a^b, b^c in next round + eor w16,w16,w25,ror#25 // Sigma1(e) + eor w10,w10,w21,ror#13 + add w20,w20,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w8,w8,w1,ror#19 + eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) + add w20,w20,w16 // h+=Sigma1(e) + eor w19,w19,w22 // Maj(a,b,c) + eor w17,w10,w21,ror#22 // Sigma0(a) + eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) + add w3,w3,w12 + add w24,w24,w20 // d+=h + add w20,w20,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w3,w3,w9 + add w20,w20,w17 // h+=Sigma0(a) + add w3,w3,w8 + cbnz w19,Loop_16_xx + + ldp x0,x2,[x29,#96] + ldr x1,[x29,#112] + sub x30,x30,#260 // rewind + + ldp w3,w4,[x0] + ldp w5,w6,[x0,#2*4] + add x1,x1,#14*4 // advance input pointer + ldp w7,w8,[x0,#4*4] + add w20,w20,w3 + ldp w9,w10,[x0,#6*4] + add w21,w21,w4 + add w22,w22,w5 + add w23,w23,w6 + stp w20,w21,[x0] + add w24,w24,w7 + add w25,w25,w8 + stp w22,w23,[x0,#2*4] + add w26,w26,w9 + add w27,w27,w10 + cmp x1,x2 + stp w24,w25,[x0,#4*4] + stp w26,w27,[x0,#6*4] + b.ne Loop + + ldp x19,x20,[x29,#16] + add sp,sp,#4*4 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 +.long 0xd50323bf // autiasp + ret + + +.align 6 + +LK256: +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +.long 0 //terminator + +#ifndef __KERNEL__ +.align 3 +LOPENSSL_armcap_P: +# ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +# else +.quad _OPENSSL_armcap_P-. +# endif +#endif +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 +#ifndef __KERNEL__ + +.align 6 +sha256_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v0.4s,v1.4s},[x0] + adr x3,LK256 + +Loop_hw: + ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 + sub x2,x2,#1 + ld1 {v16.4s},[x3],#16 + rev32 v4.16b,v4.16b + rev32 v5.16b,v5.16b + rev32 v6.16b,v6.16b + rev32 v7.16b,v7.16b + orr v18.16b,v0.16b,v0.16b // offload + orr v19.16b,v1.16b,v1.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 //sha256su0 v4.16b,v5.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 //sha256su0 v5.16b,v6.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 //sha256su0 v6.16b,v7.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 //sha256su0 v7.16b,v4.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 //sha256su0 v4.16b,v5.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 //sha256su0 v5.16b,v6.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 //sha256su0 v6.16b,v7.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 //sha256su0 v7.16b,v4.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 //sha256su0 v4.16b,v5.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 //sha256su0 v5.16b,v6.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 //sha256su0 v6.16b,v7.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 //sha256su0 v7.16b,v4.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s + + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s + + ld1 {v17.4s},[x3] + add v16.4s,v16.4s,v6.4s + sub x3,x3,#64*4-16 // rewind + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s + + add v17.4s,v17.4s,v7.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s + + add v0.4s,v0.4s,v18.4s + add v1.4s,v1.4s,v19.4s + + cbnz x2,Loop_hw + + st1 {v0.4s,v1.4s},[x0] + + ldr x29,[sp],#16 + ret + +#endif +#ifdef __KERNEL__ +.globl _sha256_block_neon +#endif + +.align 4 +_sha256_block_neon: +Lneon_entry: + stp x29, x30, [sp, #-16]! + mov x29, sp + sub sp,sp,#16*4 + + adr x16,LK256 + add x2,x1,x2,lsl#6 // len to point at the end of inp + + ld1 {v0.16b},[x1], #16 + ld1 {v1.16b},[x1], #16 + ld1 {v2.16b},[x1], #16 + ld1 {v3.16b},[x1], #16 + ld1 {v4.4s},[x16], #16 + ld1 {v5.4s},[x16], #16 + ld1 {v6.4s},[x16], #16 + ld1 {v7.4s},[x16], #16 + rev32 v0.16b,v0.16b // yes, even on + rev32 v1.16b,v1.16b // big-endian + rev32 v2.16b,v2.16b + rev32 v3.16b,v3.16b + mov x17,sp + add v4.4s,v4.4s,v0.4s + add v5.4s,v5.4s,v1.4s + add v6.4s,v6.4s,v2.4s + st1 {v4.4s,v5.4s},[x17], #32 + add v7.4s,v7.4s,v3.4s + st1 {v6.4s,v7.4s},[x17] + sub x17,x17,#32 + + ldp w3,w4,[x0] + ldp w5,w6,[x0,#8] + ldp w7,w8,[x0,#16] + ldp w9,w10,[x0,#24] + ldr w12,[sp,#0] + mov w13,wzr + eor w14,w4,w5 + mov w15,wzr + b L_00_48 + +.align 4 +L_00_48: + ext v4.16b,v0.16b,v1.16b,#4 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + bic w15,w9,w7 + ext v7.16b,v2.16b,v3.16b,#4 + eor w11,w7,w7,ror#5 + add w3,w3,w13 + mov d19,v3.d[1] + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w3,w3,ror#11 + ushr v5.4s,v4.4s,#3 + add w10,w10,w12 + add v0.4s,v0.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + ushr v7.4s,v4.4s,#18 + add w10,w10,w11 + ldr w12,[sp,#4] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w6,w6,w10 + sli v7.4s,v4.4s,#14 + eor w14,w14,w4 + ushr v16.4s,v19.4s,#17 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + eor v5.16b,v5.16b,v7.16b + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + sli v16.4s,v19.4s,#15 + add w10,w10,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + ushr v7.4s,v19.4s,#19 + add w9,w9,w12 + ror w11,w11,#6 + add v0.4s,v0.4s,v5.4s + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + sli v7.4s,v19.4s,#13 + add w9,w9,w11 + ldr w12,[sp,#8] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + eor v17.16b,v17.16b,v7.16b + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + add v0.4s,v0.4s,v17.4s + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + ushr v18.4s,v0.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v0.4s,#10 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + sli v18.4s,v0.4s,#15 + add w8,w8,w12 + ushr v17.4s,v0.4s,#19 + ror w11,w11,#6 + eor w13,w9,w10 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w9,ror#20 + add w8,w8,w11 + sli v17.4s,v0.4s,#13 + ldr w12,[sp,#12] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w4,w4,w8 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w10 + eor v17.16b,v17.16b,v17.16b + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + mov v17.d[1],v19.d[0] + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + add v0.4s,v0.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add v4.4s,v4.4s,v0.4s + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#16] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + ext v4.16b,v1.16b,v2.16b,#4 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + bic w15,w5,w3 + ext v7.16b,v3.16b,v0.16b,#4 + eor w11,w3,w3,ror#5 + add w7,w7,w13 + mov d19,v0.d[1] + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w7,w7,ror#11 + ushr v5.4s,v4.4s,#3 + add w6,w6,w12 + add v1.4s,v1.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + ushr v7.4s,v4.4s,#18 + add w6,w6,w11 + ldr w12,[sp,#20] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w10,w10,w6 + sli v7.4s,v4.4s,#14 + eor w14,w14,w8 + ushr v16.4s,v19.4s,#17 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + eor v5.16b,v5.16b,v7.16b + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + sli v16.4s,v19.4s,#15 + add w6,w6,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + ushr v7.4s,v19.4s,#19 + add w5,w5,w12 + ror w11,w11,#6 + add v1.4s,v1.4s,v5.4s + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + sli v7.4s,v19.4s,#13 + add w5,w5,w11 + ldr w12,[sp,#24] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + eor v17.16b,v17.16b,v7.16b + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + add v1.4s,v1.4s,v17.4s + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + ushr v18.4s,v1.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v1.4s,#10 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + sli v18.4s,v1.4s,#15 + add w4,w4,w12 + ushr v17.4s,v1.4s,#19 + ror w11,w11,#6 + eor w13,w5,w6 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w5,ror#20 + add w4,w4,w11 + sli v17.4s,v1.4s,#13 + ldr w12,[sp,#28] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w8,w8,w4 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w6 + eor v17.16b,v17.16b,v17.16b + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + mov v17.d[1],v19.d[0] + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + add v1.4s,v1.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add v4.4s,v4.4s,v1.4s + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[sp,#32] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + ext v4.16b,v2.16b,v3.16b,#4 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + bic w15,w9,w7 + ext v7.16b,v0.16b,v1.16b,#4 + eor w11,w7,w7,ror#5 + add w3,w3,w13 + mov d19,v1.d[1] + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w3,w3,ror#11 + ushr v5.4s,v4.4s,#3 + add w10,w10,w12 + add v2.4s,v2.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + ushr v7.4s,v4.4s,#18 + add w10,w10,w11 + ldr w12,[sp,#36] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w6,w6,w10 + sli v7.4s,v4.4s,#14 + eor w14,w14,w4 + ushr v16.4s,v19.4s,#17 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + eor v5.16b,v5.16b,v7.16b + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + sli v16.4s,v19.4s,#15 + add w10,w10,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + ushr v7.4s,v19.4s,#19 + add w9,w9,w12 + ror w11,w11,#6 + add v2.4s,v2.4s,v5.4s + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + sli v7.4s,v19.4s,#13 + add w9,w9,w11 + ldr w12,[sp,#40] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + eor v17.16b,v17.16b,v7.16b + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + add v2.4s,v2.4s,v17.4s + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + ushr v18.4s,v2.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v2.4s,#10 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + sli v18.4s,v2.4s,#15 + add w8,w8,w12 + ushr v17.4s,v2.4s,#19 + ror w11,w11,#6 + eor w13,w9,w10 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w9,ror#20 + add w8,w8,w11 + sli v17.4s,v2.4s,#13 + ldr w12,[sp,#44] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w4,w4,w8 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w10 + eor v17.16b,v17.16b,v17.16b + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + mov v17.d[1],v19.d[0] + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + add v2.4s,v2.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add v4.4s,v4.4s,v2.4s + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#48] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + ext v4.16b,v3.16b,v0.16b,#4 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + bic w15,w5,w3 + ext v7.16b,v1.16b,v2.16b,#4 + eor w11,w3,w3,ror#5 + add w7,w7,w13 + mov d19,v2.d[1] + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w7,w7,ror#11 + ushr v5.4s,v4.4s,#3 + add w6,w6,w12 + add v3.4s,v3.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + ushr v7.4s,v4.4s,#18 + add w6,w6,w11 + ldr w12,[sp,#52] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w10,w10,w6 + sli v7.4s,v4.4s,#14 + eor w14,w14,w8 + ushr v16.4s,v19.4s,#17 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + eor v5.16b,v5.16b,v7.16b + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + sli v16.4s,v19.4s,#15 + add w6,w6,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + ushr v7.4s,v19.4s,#19 + add w5,w5,w12 + ror w11,w11,#6 + add v3.4s,v3.4s,v5.4s + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + sli v7.4s,v19.4s,#13 + add w5,w5,w11 + ldr w12,[sp,#56] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + eor v17.16b,v17.16b,v7.16b + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + add v3.4s,v3.4s,v17.4s + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + ushr v18.4s,v3.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v3.4s,#10 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + sli v18.4s,v3.4s,#15 + add w4,w4,w12 + ushr v17.4s,v3.4s,#19 + ror w11,w11,#6 + eor w13,w5,w6 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w5,ror#20 + add w4,w4,w11 + sli v17.4s,v3.4s,#13 + ldr w12,[sp,#60] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w8,w8,w4 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w6 + eor v17.16b,v17.16b,v17.16b + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + mov v17.d[1],v19.d[0] + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + add v3.4s,v3.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add v4.4s,v4.4s,v3.4s + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[x16] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + cmp w12,#0 // check for K256 terminator + ldr w12,[sp,#0] + sub x17,x17,#64 + bne L_00_48 + + sub x16,x16,#256 // rewind x16 + cmp x1,x2 + mov x17, #64 + csel x17, x17, xzr, eq + sub x1,x1,x17 // avoid SEGV + mov x17,sp + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + ld1 {v0.16b},[x1],#16 + bic w15,w9,w7 + eor w11,w7,w7,ror#5 + ld1 {v4.4s},[x16],#16 + add w3,w3,w13 + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + eor w15,w3,w3,ror#11 + rev32 v0.16b,v0.16b + add w10,w10,w12 + ror w11,w11,#6 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + add v4.4s,v4.4s,v0.4s + add w10,w10,w11 + ldr w12,[sp,#4] + and w14,w14,w13 + ror w15,w15,#2 + add w6,w6,w10 + eor w14,w14,w4 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + add w10,w10,w14 + orr w12,w12,w15 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + add w9,w9,w12 + ror w11,w11,#6 + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + add w9,w9,w11 + ldr w12,[sp,#8] + and w13,w13,w14 + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + orr w12,w12,w15 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + add w8,w8,w12 + ror w11,w11,#6 + eor w13,w9,w10 + eor w15,w15,w9,ror#20 + add w8,w8,w11 + ldr w12,[sp,#12] + and w14,w14,w13 + ror w15,w15,#2 + add w4,w4,w8 + eor w14,w14,w10 + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#16] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + ld1 {v1.16b},[x1],#16 + bic w15,w5,w3 + eor w11,w3,w3,ror#5 + ld1 {v4.4s},[x16],#16 + add w7,w7,w13 + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + eor w15,w7,w7,ror#11 + rev32 v1.16b,v1.16b + add w6,w6,w12 + ror w11,w11,#6 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + add v4.4s,v4.4s,v1.4s + add w6,w6,w11 + ldr w12,[sp,#20] + and w14,w14,w13 + ror w15,w15,#2 + add w10,w10,w6 + eor w14,w14,w8 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + add w6,w6,w14 + orr w12,w12,w15 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + add w5,w5,w12 + ror w11,w11,#6 + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + add w5,w5,w11 + ldr w12,[sp,#24] + and w13,w13,w14 + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + orr w12,w12,w15 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + add w4,w4,w12 + ror w11,w11,#6 + eor w13,w5,w6 + eor w15,w15,w5,ror#20 + add w4,w4,w11 + ldr w12,[sp,#28] + and w14,w14,w13 + ror w15,w15,#2 + add w8,w8,w4 + eor w14,w14,w6 + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[sp,#32] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + ld1 {v2.16b},[x1],#16 + bic w15,w9,w7 + eor w11,w7,w7,ror#5 + ld1 {v4.4s},[x16],#16 + add w3,w3,w13 + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + eor w15,w3,w3,ror#11 + rev32 v2.16b,v2.16b + add w10,w10,w12 + ror w11,w11,#6 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + add v4.4s,v4.4s,v2.4s + add w10,w10,w11 + ldr w12,[sp,#36] + and w14,w14,w13 + ror w15,w15,#2 + add w6,w6,w10 + eor w14,w14,w4 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + add w10,w10,w14 + orr w12,w12,w15 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + add w9,w9,w12 + ror w11,w11,#6 + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + add w9,w9,w11 + ldr w12,[sp,#40] + and w13,w13,w14 + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + orr w12,w12,w15 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + add w8,w8,w12 + ror w11,w11,#6 + eor w13,w9,w10 + eor w15,w15,w9,ror#20 + add w8,w8,w11 + ldr w12,[sp,#44] + and w14,w14,w13 + ror w15,w15,#2 + add w4,w4,w8 + eor w14,w14,w10 + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#48] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + ld1 {v3.16b},[x1],#16 + bic w15,w5,w3 + eor w11,w3,w3,ror#5 + ld1 {v4.4s},[x16],#16 + add w7,w7,w13 + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + eor w15,w7,w7,ror#11 + rev32 v3.16b,v3.16b + add w6,w6,w12 + ror w11,w11,#6 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + add v4.4s,v4.4s,v3.4s + add w6,w6,w11 + ldr w12,[sp,#52] + and w14,w14,w13 + ror w15,w15,#2 + add w10,w10,w6 + eor w14,w14,w8 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + add w6,w6,w14 + orr w12,w12,w15 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + add w5,w5,w12 + ror w11,w11,#6 + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + add w5,w5,w11 + ldr w12,[sp,#56] + and w13,w13,w14 + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + orr w12,w12,w15 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + add w4,w4,w12 + ror w11,w11,#6 + eor w13,w5,w6 + eor w15,w15,w5,ror#20 + add w4,w4,w11 + ldr w12,[sp,#60] + and w14,w14,w13 + ror w15,w15,#2 + add w8,w8,w4 + eor w14,w14,w6 + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + add w3,w3,w15 // h+=Sigma0(a) from the past + ldp w11,w12,[x0,#0] + add w3,w3,w13 // h+=Maj(a,b,c) from the past + ldp w13,w14,[x0,#8] + add w3,w3,w11 // accumulate + add w4,w4,w12 + ldp w11,w12,[x0,#16] + add w5,w5,w13 + add w6,w6,w14 + ldp w13,w14,[x0,#24] + add w7,w7,w11 + add w8,w8,w12 + ldr w12,[sp,#0] + stp w3,w4,[x0,#0] + add w9,w9,w13 + mov w13,wzr + stp w5,w6,[x0,#8] + add w10,w10,w14 + stp w7,w8,[x0,#16] + eor w14,w4,w5 + stp w9,w10,[x0,#24] + mov w15,wzr + mov x17,sp + b.ne L_00_48 + + ldr x29,[x29] + add sp,sp,#16*4+16 + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha512-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha512-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha512-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/crypto/sha/sha512-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1618 @@ +// Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the OpenSSL license (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// ==================================================================== +// Written by Andy Polyakov for the OpenSSL +// project. The module is, however, dual licensed under OpenSSL and +// CRYPTOGAMS licenses depending on where you obtain it. For further +// details see http://www.openssl.org/~appro/cryptogams/. +// +// Permission to use under GPLv2 terms is granted. +// ==================================================================== +// +// SHA256/512 for ARMv8. +// +// Performance in cycles per processed byte and improvement coefficient +// over code generated with "default" compiler: +// +// SHA256-hw SHA256(*) SHA512 +// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +// Denver 2.01 10.5 (+26%) 6.70 (+8%) +// X-Gene 20.0 (+100%) 12.8 (+300%(***)) +// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +// Kryo 1.92 17.4 (+30%) 11.2 (+8%) +// +// (*) Software SHA256 results are of lesser relevance, presented +// mostly for informational purposes. +// (**) The result is a trade-off: it's possible to improve it by +// 10% (or by 1 cycle per round), but at the cost of 20% loss +// on Cortex-A53 (or by 4 cycles per round). +// (***) Super-impressive coefficients over gcc-generated code are +// indication of some compiler "pathology", most notably code +// generated with -mgeneral-regs-only is significantly faster +// and the gap is only 40-90%. +// +// October 2016. +// +// Originally it was reckoned that it makes no sense to implement NEON +// version of SHA256 for 64-bit processors. This is because performance +// improvement on most wide-spread Cortex-A5x processors was observed +// to be marginal, same on Cortex-A53 and ~10% on A57. But then it was +// observed that 32-bit NEON SHA256 performs significantly better than +// 64-bit scalar version on *some* of the more recent processors. As +// result 64-bit NEON version of SHA256 was added to provide best +// all-round performance. For example it executes ~30% faster on X-Gene +// and Mongoose. [For reference, NEON version of SHA512 is bound to +// deliver much less improvement, likely *negative* on Cortex-A5x. +// Which is why NEON support is limited to SHA256.] + +#ifndef __KERNEL__ +# include "arm_arch.h" +#endif + +.text + + +.private_extern _OPENSSL_armcap_P +.globl _sha512_block_data_order + +.align 6 +_sha512_block_data_order: +#ifndef __KERNEL__ +# ifdef __ILP32__ + ldrsw x16,LOPENSSL_armcap_P +# else + ldr x16,LOPENSSL_armcap_P +# endif + adr x17,LOPENSSL_armcap_P + add x16,x16,x17 + ldr w16,[x16] + tst w16,#ARMV8_SHA512 + b.ne Lv8_entry +#endif +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#4*8 + + ldp x20,x21,[x0] // load context + ldp x22,x23,[x0,#2*8] + ldp x24,x25,[x0,#4*8] + add x2,x1,x2,lsl#7 // end of input + ldp x26,x27,[x0,#6*8] + adr x30,LK512 + stp x0,x2,[x29,#96] + +Loop: + ldp x3,x4,[x1],#2*8 + ldr x19,[x30],#8 // *K++ + eor x28,x21,x22 // magic seed + str x1,[x29,#112] +#ifndef __AARCH64EB__ + rev x3,x3 // 0 +#endif + ror x16,x24,#14 + add x27,x27,x19 // h+=K[i] + eor x6,x24,x24,ror#23 + and x17,x25,x24 + bic x19,x26,x24 + add x27,x27,x3 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x20,x21 // a^b, b^c in next round + eor x16,x16,x6,ror#18 // Sigma1(e) + ror x6,x20,#28 + add x27,x27,x17 // h+=Ch(e,f,g) + eor x17,x20,x20,ror#5 + add x27,x27,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x23,x23,x27 // d+=h + eor x28,x28,x21 // Maj(a,b,c) + eor x17,x6,x17,ror#34 // Sigma0(a) + add x27,x27,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x27,x27,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x4,x4 // 1 +#endif + ldp x5,x6,[x1],#2*8 + add x27,x27,x17 // h+=Sigma0(a) + ror x16,x23,#14 + add x26,x26,x28 // h+=K[i] + eor x7,x23,x23,ror#23 + and x17,x24,x23 + bic x28,x25,x23 + add x26,x26,x4 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x27,x20 // a^b, b^c in next round + eor x16,x16,x7,ror#18 // Sigma1(e) + ror x7,x27,#28 + add x26,x26,x17 // h+=Ch(e,f,g) + eor x17,x27,x27,ror#5 + add x26,x26,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x22,x22,x26 // d+=h + eor x19,x19,x20 // Maj(a,b,c) + eor x17,x7,x17,ror#34 // Sigma0(a) + add x26,x26,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x26,x26,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x5,x5 // 2 +#endif + add x26,x26,x17 // h+=Sigma0(a) + ror x16,x22,#14 + add x25,x25,x19 // h+=K[i] + eor x8,x22,x22,ror#23 + and x17,x23,x22 + bic x19,x24,x22 + add x25,x25,x5 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x26,x27 // a^b, b^c in next round + eor x16,x16,x8,ror#18 // Sigma1(e) + ror x8,x26,#28 + add x25,x25,x17 // h+=Ch(e,f,g) + eor x17,x26,x26,ror#5 + add x25,x25,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x21,x21,x25 // d+=h + eor x28,x28,x27 // Maj(a,b,c) + eor x17,x8,x17,ror#34 // Sigma0(a) + add x25,x25,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x25,x25,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x6,x6 // 3 +#endif + ldp x7,x8,[x1],#2*8 + add x25,x25,x17 // h+=Sigma0(a) + ror x16,x21,#14 + add x24,x24,x28 // h+=K[i] + eor x9,x21,x21,ror#23 + and x17,x22,x21 + bic x28,x23,x21 + add x24,x24,x6 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x25,x26 // a^b, b^c in next round + eor x16,x16,x9,ror#18 // Sigma1(e) + ror x9,x25,#28 + add x24,x24,x17 // h+=Ch(e,f,g) + eor x17,x25,x25,ror#5 + add x24,x24,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x20,x20,x24 // d+=h + eor x19,x19,x26 // Maj(a,b,c) + eor x17,x9,x17,ror#34 // Sigma0(a) + add x24,x24,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x24,x24,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x7,x7 // 4 +#endif + add x24,x24,x17 // h+=Sigma0(a) + ror x16,x20,#14 + add x23,x23,x19 // h+=K[i] + eor x10,x20,x20,ror#23 + and x17,x21,x20 + bic x19,x22,x20 + add x23,x23,x7 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x24,x25 // a^b, b^c in next round + eor x16,x16,x10,ror#18 // Sigma1(e) + ror x10,x24,#28 + add x23,x23,x17 // h+=Ch(e,f,g) + eor x17,x24,x24,ror#5 + add x23,x23,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x27,x27,x23 // d+=h + eor x28,x28,x25 // Maj(a,b,c) + eor x17,x10,x17,ror#34 // Sigma0(a) + add x23,x23,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x23,x23,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x8,x8 // 5 +#endif + ldp x9,x10,[x1],#2*8 + add x23,x23,x17 // h+=Sigma0(a) + ror x16,x27,#14 + add x22,x22,x28 // h+=K[i] + eor x11,x27,x27,ror#23 + and x17,x20,x27 + bic x28,x21,x27 + add x22,x22,x8 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x23,x24 // a^b, b^c in next round + eor x16,x16,x11,ror#18 // Sigma1(e) + ror x11,x23,#28 + add x22,x22,x17 // h+=Ch(e,f,g) + eor x17,x23,x23,ror#5 + add x22,x22,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x26,x26,x22 // d+=h + eor x19,x19,x24 // Maj(a,b,c) + eor x17,x11,x17,ror#34 // Sigma0(a) + add x22,x22,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x22,x22,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x9,x9 // 6 +#endif + add x22,x22,x17 // h+=Sigma0(a) + ror x16,x26,#14 + add x21,x21,x19 // h+=K[i] + eor x12,x26,x26,ror#23 + and x17,x27,x26 + bic x19,x20,x26 + add x21,x21,x9 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x22,x23 // a^b, b^c in next round + eor x16,x16,x12,ror#18 // Sigma1(e) + ror x12,x22,#28 + add x21,x21,x17 // h+=Ch(e,f,g) + eor x17,x22,x22,ror#5 + add x21,x21,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x25,x25,x21 // d+=h + eor x28,x28,x23 // Maj(a,b,c) + eor x17,x12,x17,ror#34 // Sigma0(a) + add x21,x21,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x21,x21,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x10,x10 // 7 +#endif + ldp x11,x12,[x1],#2*8 + add x21,x21,x17 // h+=Sigma0(a) + ror x16,x25,#14 + add x20,x20,x28 // h+=K[i] + eor x13,x25,x25,ror#23 + and x17,x26,x25 + bic x28,x27,x25 + add x20,x20,x10 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x21,x22 // a^b, b^c in next round + eor x16,x16,x13,ror#18 // Sigma1(e) + ror x13,x21,#28 + add x20,x20,x17 // h+=Ch(e,f,g) + eor x17,x21,x21,ror#5 + add x20,x20,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x24,x24,x20 // d+=h + eor x19,x19,x22 // Maj(a,b,c) + eor x17,x13,x17,ror#34 // Sigma0(a) + add x20,x20,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x20,x20,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x11,x11 // 8 +#endif + add x20,x20,x17 // h+=Sigma0(a) + ror x16,x24,#14 + add x27,x27,x19 // h+=K[i] + eor x14,x24,x24,ror#23 + and x17,x25,x24 + bic x19,x26,x24 + add x27,x27,x11 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x20,x21 // a^b, b^c in next round + eor x16,x16,x14,ror#18 // Sigma1(e) + ror x14,x20,#28 + add x27,x27,x17 // h+=Ch(e,f,g) + eor x17,x20,x20,ror#5 + add x27,x27,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x23,x23,x27 // d+=h + eor x28,x28,x21 // Maj(a,b,c) + eor x17,x14,x17,ror#34 // Sigma0(a) + add x27,x27,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x27,x27,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x12,x12 // 9 +#endif + ldp x13,x14,[x1],#2*8 + add x27,x27,x17 // h+=Sigma0(a) + ror x16,x23,#14 + add x26,x26,x28 // h+=K[i] + eor x15,x23,x23,ror#23 + and x17,x24,x23 + bic x28,x25,x23 + add x26,x26,x12 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x27,x20 // a^b, b^c in next round + eor x16,x16,x15,ror#18 // Sigma1(e) + ror x15,x27,#28 + add x26,x26,x17 // h+=Ch(e,f,g) + eor x17,x27,x27,ror#5 + add x26,x26,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x22,x22,x26 // d+=h + eor x19,x19,x20 // Maj(a,b,c) + eor x17,x15,x17,ror#34 // Sigma0(a) + add x26,x26,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x26,x26,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x13,x13 // 10 +#endif + add x26,x26,x17 // h+=Sigma0(a) + ror x16,x22,#14 + add x25,x25,x19 // h+=K[i] + eor x0,x22,x22,ror#23 + and x17,x23,x22 + bic x19,x24,x22 + add x25,x25,x13 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x26,x27 // a^b, b^c in next round + eor x16,x16,x0,ror#18 // Sigma1(e) + ror x0,x26,#28 + add x25,x25,x17 // h+=Ch(e,f,g) + eor x17,x26,x26,ror#5 + add x25,x25,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x21,x21,x25 // d+=h + eor x28,x28,x27 // Maj(a,b,c) + eor x17,x0,x17,ror#34 // Sigma0(a) + add x25,x25,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x25,x25,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x14,x14 // 11 +#endif + ldp x15,x0,[x1],#2*8 + add x25,x25,x17 // h+=Sigma0(a) + str x6,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 // h+=K[i] + eor x6,x21,x21,ror#23 + and x17,x22,x21 + bic x28,x23,x21 + add x24,x24,x14 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x25,x26 // a^b, b^c in next round + eor x16,x16,x6,ror#18 // Sigma1(e) + ror x6,x25,#28 + add x24,x24,x17 // h+=Ch(e,f,g) + eor x17,x25,x25,ror#5 + add x24,x24,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x20,x20,x24 // d+=h + eor x19,x19,x26 // Maj(a,b,c) + eor x17,x6,x17,ror#34 // Sigma0(a) + add x24,x24,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x24,x24,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x15,x15 // 12 +#endif + add x24,x24,x17 // h+=Sigma0(a) + str x7,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 // h+=K[i] + eor x7,x20,x20,ror#23 + and x17,x21,x20 + bic x19,x22,x20 + add x23,x23,x15 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x24,x25 // a^b, b^c in next round + eor x16,x16,x7,ror#18 // Sigma1(e) + ror x7,x24,#28 + add x23,x23,x17 // h+=Ch(e,f,g) + eor x17,x24,x24,ror#5 + add x23,x23,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x27,x27,x23 // d+=h + eor x28,x28,x25 // Maj(a,b,c) + eor x17,x7,x17,ror#34 // Sigma0(a) + add x23,x23,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x23,x23,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x0,x0 // 13 +#endif + ldp x1,x2,[x1] + add x23,x23,x17 // h+=Sigma0(a) + str x8,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 // h+=K[i] + eor x8,x27,x27,ror#23 + and x17,x20,x27 + bic x28,x21,x27 + add x22,x22,x0 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x23,x24 // a^b, b^c in next round + eor x16,x16,x8,ror#18 // Sigma1(e) + ror x8,x23,#28 + add x22,x22,x17 // h+=Ch(e,f,g) + eor x17,x23,x23,ror#5 + add x22,x22,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x26,x26,x22 // d+=h + eor x19,x19,x24 // Maj(a,b,c) + eor x17,x8,x17,ror#34 // Sigma0(a) + add x22,x22,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x22,x22,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x1,x1 // 14 +#endif + ldr x6,[sp,#24] + add x22,x22,x17 // h+=Sigma0(a) + str x9,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 // h+=K[i] + eor x9,x26,x26,ror#23 + and x17,x27,x26 + bic x19,x20,x26 + add x21,x21,x1 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x22,x23 // a^b, b^c in next round + eor x16,x16,x9,ror#18 // Sigma1(e) + ror x9,x22,#28 + add x21,x21,x17 // h+=Ch(e,f,g) + eor x17,x22,x22,ror#5 + add x21,x21,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x25,x25,x21 // d+=h + eor x28,x28,x23 // Maj(a,b,c) + eor x17,x9,x17,ror#34 // Sigma0(a) + add x21,x21,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x21,x21,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x2,x2 // 15 +#endif + ldr x7,[sp,#0] + add x21,x21,x17 // h+=Sigma0(a) + str x10,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 // h+=K[i] + ror x9,x4,#1 + and x17,x26,x25 + ror x8,x1,#19 + bic x28,x27,x25 + ror x10,x21,#28 + add x20,x20,x2 // h+=X[i] + eor x16,x16,x25,ror#18 + eor x9,x9,x4,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x21,x22 // a^b, b^c in next round + eor x16,x16,x25,ror#41 // Sigma1(e) + eor x10,x10,x21,ror#34 + add x20,x20,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x8,x8,x1,ror#61 + eor x9,x9,x4,lsr#7 // sigma0(X[i+1]) + add x20,x20,x16 // h+=Sigma1(e) + eor x19,x19,x22 // Maj(a,b,c) + eor x17,x10,x21,ror#39 // Sigma0(a) + eor x8,x8,x1,lsr#6 // sigma1(X[i+14]) + add x3,x3,x12 + add x24,x24,x20 // d+=h + add x20,x20,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x3,x3,x9 + add x20,x20,x17 // h+=Sigma0(a) + add x3,x3,x8 +Loop_16_xx: + ldr x8,[sp,#8] + str x11,[sp,#0] + ror x16,x24,#14 + add x27,x27,x19 // h+=K[i] + ror x10,x5,#1 + and x17,x25,x24 + ror x9,x2,#19 + bic x19,x26,x24 + ror x11,x20,#28 + add x27,x27,x3 // h+=X[i] + eor x16,x16,x24,ror#18 + eor x10,x10,x5,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x20,x21 // a^b, b^c in next round + eor x16,x16,x24,ror#41 // Sigma1(e) + eor x11,x11,x20,ror#34 + add x27,x27,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x9,x9,x2,ror#61 + eor x10,x10,x5,lsr#7 // sigma0(X[i+1]) + add x27,x27,x16 // h+=Sigma1(e) + eor x28,x28,x21 // Maj(a,b,c) + eor x17,x11,x20,ror#39 // Sigma0(a) + eor x9,x9,x2,lsr#6 // sigma1(X[i+14]) + add x4,x4,x13 + add x23,x23,x27 // d+=h + add x27,x27,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x4,x4,x10 + add x27,x27,x17 // h+=Sigma0(a) + add x4,x4,x9 + ldr x9,[sp,#16] + str x12,[sp,#8] + ror x16,x23,#14 + add x26,x26,x28 // h+=K[i] + ror x11,x6,#1 + and x17,x24,x23 + ror x10,x3,#19 + bic x28,x25,x23 + ror x12,x27,#28 + add x26,x26,x4 // h+=X[i] + eor x16,x16,x23,ror#18 + eor x11,x11,x6,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x27,x20 // a^b, b^c in next round + eor x16,x16,x23,ror#41 // Sigma1(e) + eor x12,x12,x27,ror#34 + add x26,x26,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x10,x10,x3,ror#61 + eor x11,x11,x6,lsr#7 // sigma0(X[i+1]) + add x26,x26,x16 // h+=Sigma1(e) + eor x19,x19,x20 // Maj(a,b,c) + eor x17,x12,x27,ror#39 // Sigma0(a) + eor x10,x10,x3,lsr#6 // sigma1(X[i+14]) + add x5,x5,x14 + add x22,x22,x26 // d+=h + add x26,x26,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x5,x5,x11 + add x26,x26,x17 // h+=Sigma0(a) + add x5,x5,x10 + ldr x10,[sp,#24] + str x13,[sp,#16] + ror x16,x22,#14 + add x25,x25,x19 // h+=K[i] + ror x12,x7,#1 + and x17,x23,x22 + ror x11,x4,#19 + bic x19,x24,x22 + ror x13,x26,#28 + add x25,x25,x5 // h+=X[i] + eor x16,x16,x22,ror#18 + eor x12,x12,x7,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x26,x27 // a^b, b^c in next round + eor x16,x16,x22,ror#41 // Sigma1(e) + eor x13,x13,x26,ror#34 + add x25,x25,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x11,x11,x4,ror#61 + eor x12,x12,x7,lsr#7 // sigma0(X[i+1]) + add x25,x25,x16 // h+=Sigma1(e) + eor x28,x28,x27 // Maj(a,b,c) + eor x17,x13,x26,ror#39 // Sigma0(a) + eor x11,x11,x4,lsr#6 // sigma1(X[i+14]) + add x6,x6,x15 + add x21,x21,x25 // d+=h + add x25,x25,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x6,x6,x12 + add x25,x25,x17 // h+=Sigma0(a) + add x6,x6,x11 + ldr x11,[sp,#0] + str x14,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 // h+=K[i] + ror x13,x8,#1 + and x17,x22,x21 + ror x12,x5,#19 + bic x28,x23,x21 + ror x14,x25,#28 + add x24,x24,x6 // h+=X[i] + eor x16,x16,x21,ror#18 + eor x13,x13,x8,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x25,x26 // a^b, b^c in next round + eor x16,x16,x21,ror#41 // Sigma1(e) + eor x14,x14,x25,ror#34 + add x24,x24,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x12,x12,x5,ror#61 + eor x13,x13,x8,lsr#7 // sigma0(X[i+1]) + add x24,x24,x16 // h+=Sigma1(e) + eor x19,x19,x26 // Maj(a,b,c) + eor x17,x14,x25,ror#39 // Sigma0(a) + eor x12,x12,x5,lsr#6 // sigma1(X[i+14]) + add x7,x7,x0 + add x20,x20,x24 // d+=h + add x24,x24,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x7,x7,x13 + add x24,x24,x17 // h+=Sigma0(a) + add x7,x7,x12 + ldr x12,[sp,#8] + str x15,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 // h+=K[i] + ror x14,x9,#1 + and x17,x21,x20 + ror x13,x6,#19 + bic x19,x22,x20 + ror x15,x24,#28 + add x23,x23,x7 // h+=X[i] + eor x16,x16,x20,ror#18 + eor x14,x14,x9,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x24,x25 // a^b, b^c in next round + eor x16,x16,x20,ror#41 // Sigma1(e) + eor x15,x15,x24,ror#34 + add x23,x23,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x13,x13,x6,ror#61 + eor x14,x14,x9,lsr#7 // sigma0(X[i+1]) + add x23,x23,x16 // h+=Sigma1(e) + eor x28,x28,x25 // Maj(a,b,c) + eor x17,x15,x24,ror#39 // Sigma0(a) + eor x13,x13,x6,lsr#6 // sigma1(X[i+14]) + add x8,x8,x1 + add x27,x27,x23 // d+=h + add x23,x23,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x8,x8,x14 + add x23,x23,x17 // h+=Sigma0(a) + add x8,x8,x13 + ldr x13,[sp,#16] + str x0,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 // h+=K[i] + ror x15,x10,#1 + and x17,x20,x27 + ror x14,x7,#19 + bic x28,x21,x27 + ror x0,x23,#28 + add x22,x22,x8 // h+=X[i] + eor x16,x16,x27,ror#18 + eor x15,x15,x10,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x23,x24 // a^b, b^c in next round + eor x16,x16,x27,ror#41 // Sigma1(e) + eor x0,x0,x23,ror#34 + add x22,x22,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x14,x14,x7,ror#61 + eor x15,x15,x10,lsr#7 // sigma0(X[i+1]) + add x22,x22,x16 // h+=Sigma1(e) + eor x19,x19,x24 // Maj(a,b,c) + eor x17,x0,x23,ror#39 // Sigma0(a) + eor x14,x14,x7,lsr#6 // sigma1(X[i+14]) + add x9,x9,x2 + add x26,x26,x22 // d+=h + add x22,x22,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x9,x9,x15 + add x22,x22,x17 // h+=Sigma0(a) + add x9,x9,x14 + ldr x14,[sp,#24] + str x1,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 // h+=K[i] + ror x0,x11,#1 + and x17,x27,x26 + ror x15,x8,#19 + bic x19,x20,x26 + ror x1,x22,#28 + add x21,x21,x9 // h+=X[i] + eor x16,x16,x26,ror#18 + eor x0,x0,x11,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x22,x23 // a^b, b^c in next round + eor x16,x16,x26,ror#41 // Sigma1(e) + eor x1,x1,x22,ror#34 + add x21,x21,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x15,x15,x8,ror#61 + eor x0,x0,x11,lsr#7 // sigma0(X[i+1]) + add x21,x21,x16 // h+=Sigma1(e) + eor x28,x28,x23 // Maj(a,b,c) + eor x17,x1,x22,ror#39 // Sigma0(a) + eor x15,x15,x8,lsr#6 // sigma1(X[i+14]) + add x10,x10,x3 + add x25,x25,x21 // d+=h + add x21,x21,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x10,x10,x0 + add x21,x21,x17 // h+=Sigma0(a) + add x10,x10,x15 + ldr x15,[sp,#0] + str x2,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 // h+=K[i] + ror x1,x12,#1 + and x17,x26,x25 + ror x0,x9,#19 + bic x28,x27,x25 + ror x2,x21,#28 + add x20,x20,x10 // h+=X[i] + eor x16,x16,x25,ror#18 + eor x1,x1,x12,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x21,x22 // a^b, b^c in next round + eor x16,x16,x25,ror#41 // Sigma1(e) + eor x2,x2,x21,ror#34 + add x20,x20,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x0,x0,x9,ror#61 + eor x1,x1,x12,lsr#7 // sigma0(X[i+1]) + add x20,x20,x16 // h+=Sigma1(e) + eor x19,x19,x22 // Maj(a,b,c) + eor x17,x2,x21,ror#39 // Sigma0(a) + eor x0,x0,x9,lsr#6 // sigma1(X[i+14]) + add x11,x11,x4 + add x24,x24,x20 // d+=h + add x20,x20,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x11,x11,x1 + add x20,x20,x17 // h+=Sigma0(a) + add x11,x11,x0 + ldr x0,[sp,#8] + str x3,[sp,#0] + ror x16,x24,#14 + add x27,x27,x19 // h+=K[i] + ror x2,x13,#1 + and x17,x25,x24 + ror x1,x10,#19 + bic x19,x26,x24 + ror x3,x20,#28 + add x27,x27,x11 // h+=X[i] + eor x16,x16,x24,ror#18 + eor x2,x2,x13,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x20,x21 // a^b, b^c in next round + eor x16,x16,x24,ror#41 // Sigma1(e) + eor x3,x3,x20,ror#34 + add x27,x27,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x1,x1,x10,ror#61 + eor x2,x2,x13,lsr#7 // sigma0(X[i+1]) + add x27,x27,x16 // h+=Sigma1(e) + eor x28,x28,x21 // Maj(a,b,c) + eor x17,x3,x20,ror#39 // Sigma0(a) + eor x1,x1,x10,lsr#6 // sigma1(X[i+14]) + add x12,x12,x5 + add x23,x23,x27 // d+=h + add x27,x27,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x12,x12,x2 + add x27,x27,x17 // h+=Sigma0(a) + add x12,x12,x1 + ldr x1,[sp,#16] + str x4,[sp,#8] + ror x16,x23,#14 + add x26,x26,x28 // h+=K[i] + ror x3,x14,#1 + and x17,x24,x23 + ror x2,x11,#19 + bic x28,x25,x23 + ror x4,x27,#28 + add x26,x26,x12 // h+=X[i] + eor x16,x16,x23,ror#18 + eor x3,x3,x14,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x27,x20 // a^b, b^c in next round + eor x16,x16,x23,ror#41 // Sigma1(e) + eor x4,x4,x27,ror#34 + add x26,x26,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x2,x2,x11,ror#61 + eor x3,x3,x14,lsr#7 // sigma0(X[i+1]) + add x26,x26,x16 // h+=Sigma1(e) + eor x19,x19,x20 // Maj(a,b,c) + eor x17,x4,x27,ror#39 // Sigma0(a) + eor x2,x2,x11,lsr#6 // sigma1(X[i+14]) + add x13,x13,x6 + add x22,x22,x26 // d+=h + add x26,x26,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x13,x13,x3 + add x26,x26,x17 // h+=Sigma0(a) + add x13,x13,x2 + ldr x2,[sp,#24] + str x5,[sp,#16] + ror x16,x22,#14 + add x25,x25,x19 // h+=K[i] + ror x4,x15,#1 + and x17,x23,x22 + ror x3,x12,#19 + bic x19,x24,x22 + ror x5,x26,#28 + add x25,x25,x13 // h+=X[i] + eor x16,x16,x22,ror#18 + eor x4,x4,x15,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x26,x27 // a^b, b^c in next round + eor x16,x16,x22,ror#41 // Sigma1(e) + eor x5,x5,x26,ror#34 + add x25,x25,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x3,x3,x12,ror#61 + eor x4,x4,x15,lsr#7 // sigma0(X[i+1]) + add x25,x25,x16 // h+=Sigma1(e) + eor x28,x28,x27 // Maj(a,b,c) + eor x17,x5,x26,ror#39 // Sigma0(a) + eor x3,x3,x12,lsr#6 // sigma1(X[i+14]) + add x14,x14,x7 + add x21,x21,x25 // d+=h + add x25,x25,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x14,x14,x4 + add x25,x25,x17 // h+=Sigma0(a) + add x14,x14,x3 + ldr x3,[sp,#0] + str x6,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 // h+=K[i] + ror x5,x0,#1 + and x17,x22,x21 + ror x4,x13,#19 + bic x28,x23,x21 + ror x6,x25,#28 + add x24,x24,x14 // h+=X[i] + eor x16,x16,x21,ror#18 + eor x5,x5,x0,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x25,x26 // a^b, b^c in next round + eor x16,x16,x21,ror#41 // Sigma1(e) + eor x6,x6,x25,ror#34 + add x24,x24,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x4,x4,x13,ror#61 + eor x5,x5,x0,lsr#7 // sigma0(X[i+1]) + add x24,x24,x16 // h+=Sigma1(e) + eor x19,x19,x26 // Maj(a,b,c) + eor x17,x6,x25,ror#39 // Sigma0(a) + eor x4,x4,x13,lsr#6 // sigma1(X[i+14]) + add x15,x15,x8 + add x20,x20,x24 // d+=h + add x24,x24,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x15,x15,x5 + add x24,x24,x17 // h+=Sigma0(a) + add x15,x15,x4 + ldr x4,[sp,#8] + str x7,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 // h+=K[i] + ror x6,x1,#1 + and x17,x21,x20 + ror x5,x14,#19 + bic x19,x22,x20 + ror x7,x24,#28 + add x23,x23,x15 // h+=X[i] + eor x16,x16,x20,ror#18 + eor x6,x6,x1,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x24,x25 // a^b, b^c in next round + eor x16,x16,x20,ror#41 // Sigma1(e) + eor x7,x7,x24,ror#34 + add x23,x23,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x5,x5,x14,ror#61 + eor x6,x6,x1,lsr#7 // sigma0(X[i+1]) + add x23,x23,x16 // h+=Sigma1(e) + eor x28,x28,x25 // Maj(a,b,c) + eor x17,x7,x24,ror#39 // Sigma0(a) + eor x5,x5,x14,lsr#6 // sigma1(X[i+14]) + add x0,x0,x9 + add x27,x27,x23 // d+=h + add x23,x23,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x0,x0,x6 + add x23,x23,x17 // h+=Sigma0(a) + add x0,x0,x5 + ldr x5,[sp,#16] + str x8,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 // h+=K[i] + ror x7,x2,#1 + and x17,x20,x27 + ror x6,x15,#19 + bic x28,x21,x27 + ror x8,x23,#28 + add x22,x22,x0 // h+=X[i] + eor x16,x16,x27,ror#18 + eor x7,x7,x2,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x23,x24 // a^b, b^c in next round + eor x16,x16,x27,ror#41 // Sigma1(e) + eor x8,x8,x23,ror#34 + add x22,x22,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x6,x6,x15,ror#61 + eor x7,x7,x2,lsr#7 // sigma0(X[i+1]) + add x22,x22,x16 // h+=Sigma1(e) + eor x19,x19,x24 // Maj(a,b,c) + eor x17,x8,x23,ror#39 // Sigma0(a) + eor x6,x6,x15,lsr#6 // sigma1(X[i+14]) + add x1,x1,x10 + add x26,x26,x22 // d+=h + add x22,x22,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x1,x1,x7 + add x22,x22,x17 // h+=Sigma0(a) + add x1,x1,x6 + ldr x6,[sp,#24] + str x9,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 // h+=K[i] + ror x8,x3,#1 + and x17,x27,x26 + ror x7,x0,#19 + bic x19,x20,x26 + ror x9,x22,#28 + add x21,x21,x1 // h+=X[i] + eor x16,x16,x26,ror#18 + eor x8,x8,x3,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x22,x23 // a^b, b^c in next round + eor x16,x16,x26,ror#41 // Sigma1(e) + eor x9,x9,x22,ror#34 + add x21,x21,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x7,x7,x0,ror#61 + eor x8,x8,x3,lsr#7 // sigma0(X[i+1]) + add x21,x21,x16 // h+=Sigma1(e) + eor x28,x28,x23 // Maj(a,b,c) + eor x17,x9,x22,ror#39 // Sigma0(a) + eor x7,x7,x0,lsr#6 // sigma1(X[i+14]) + add x2,x2,x11 + add x25,x25,x21 // d+=h + add x21,x21,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x2,x2,x8 + add x21,x21,x17 // h+=Sigma0(a) + add x2,x2,x7 + ldr x7,[sp,#0] + str x10,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 // h+=K[i] + ror x9,x4,#1 + and x17,x26,x25 + ror x8,x1,#19 + bic x28,x27,x25 + ror x10,x21,#28 + add x20,x20,x2 // h+=X[i] + eor x16,x16,x25,ror#18 + eor x9,x9,x4,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x21,x22 // a^b, b^c in next round + eor x16,x16,x25,ror#41 // Sigma1(e) + eor x10,x10,x21,ror#34 + add x20,x20,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x8,x8,x1,ror#61 + eor x9,x9,x4,lsr#7 // sigma0(X[i+1]) + add x20,x20,x16 // h+=Sigma1(e) + eor x19,x19,x22 // Maj(a,b,c) + eor x17,x10,x21,ror#39 // Sigma0(a) + eor x8,x8,x1,lsr#6 // sigma1(X[i+14]) + add x3,x3,x12 + add x24,x24,x20 // d+=h + add x20,x20,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x3,x3,x9 + add x20,x20,x17 // h+=Sigma0(a) + add x3,x3,x8 + cbnz x19,Loop_16_xx + + ldp x0,x2,[x29,#96] + ldr x1,[x29,#112] + sub x30,x30,#648 // rewind + + ldp x3,x4,[x0] + ldp x5,x6,[x0,#2*8] + add x1,x1,#14*8 // advance input pointer + ldp x7,x8,[x0,#4*8] + add x20,x20,x3 + ldp x9,x10,[x0,#6*8] + add x21,x21,x4 + add x22,x22,x5 + add x23,x23,x6 + stp x20,x21,[x0] + add x24,x24,x7 + add x25,x25,x8 + stp x22,x23,[x0,#2*8] + add x26,x26,x9 + add x27,x27,x10 + cmp x1,x2 + stp x24,x25,[x0,#4*8] + stp x26,x27,[x0,#6*8] + b.ne Loop + + ldp x19,x20,[x29,#16] + add sp,sp,#4*8 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 +.long 0xd50323bf // autiasp + ret + + +.align 6 + +LK512: +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +.quad 0 // terminator + +#ifndef __KERNEL__ +.align 3 +LOPENSSL_armcap_P: +# ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +# else +.quad _OPENSSL_armcap_P-. +# endif +#endif +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 +#ifndef __KERNEL__ + +.align 6 +sha512_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x1],#64 // load input + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + + ld1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0] // load context + adr x3,LK512 + + rev64 v16.16b,v16.16b + rev64 v17.16b,v17.16b + rev64 v18.16b,v18.16b + rev64 v19.16b,v19.16b + rev64 v20.16b,v20.16b + rev64 v21.16b,v21.16b + rev64 v22.16b,v22.16b + rev64 v23.16b,v23.16b + b Loop_hw + +.align 4 +Loop_hw: + ld1 {v24.2d},[x3],#16 + subs x2,x2,#1 + sub x4,x1,#128 + orr v26.16b,v0.16b,v0.16b // offload + orr v27.16b,v1.16b,v1.16b + orr v28.16b,v2.16b,v2.16b + orr v29.16b,v3.16b,v3.16b + csel x1,x1,x4,ne // conditional rewind + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08230 //sha512su0 v16.16b,v17.16b + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08251 //sha512su0 v17.16b,v18.16b + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08272 //sha512su0 v18.16b,v19.16b + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08293 //sha512su0 v19.16b,v20.16b + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082b4 //sha512su0 v20.16b,v21.16b + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec082d5 //sha512su0 v21.16b,v22.16b + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082f6 //sha512su0 v22.16b,v23.16b + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08217 //sha512su0 v23.16b,v16.16b + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08230 //sha512su0 v16.16b,v17.16b + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08251 //sha512su0 v17.16b,v18.16b + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08272 //sha512su0 v18.16b,v19.16b + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08293 //sha512su0 v19.16b,v20.16b + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082b4 //sha512su0 v20.16b,v21.16b + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec082d5 //sha512su0 v21.16b,v22.16b + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082f6 //sha512su0 v22.16b,v23.16b + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08217 //sha512su0 v23.16b,v16.16b + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08230 //sha512su0 v16.16b,v17.16b + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08251 //sha512su0 v17.16b,v18.16b + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08272 //sha512su0 v18.16b,v19.16b + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08293 //sha512su0 v19.16b,v20.16b + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082b4 //sha512su0 v20.16b,v21.16b + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec082d5 //sha512su0 v21.16b,v22.16b + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082f6 //sha512su0 v22.16b,v23.16b + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08217 //sha512su0 v23.16b,v16.16b + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08230 //sha512su0 v16.16b,v17.16b + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08251 //sha512su0 v17.16b,v18.16b + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08272 //sha512su0 v18.16b,v19.16b + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08293 //sha512su0 v19.16b,v20.16b + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082b4 //sha512su0 v20.16b,v21.16b + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec082d5 //sha512su0 v21.16b,v22.16b + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082f6 //sha512su0 v22.16b,v23.16b + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08217 //sha512su0 v23.16b,v16.16b + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v16.2d + ld1 {v16.16b},[x1],#16 // load next input + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]" +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b + rev64 v16.16b,v16.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v17.2d + ld1 {v17.16b},[x1],#16 // load next input + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]" +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b + rev64 v17.16b,v17.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v18.2d + ld1 {v18.16b},[x1],#16 // load next input + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]" +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b + rev64 v18.16b,v18.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v19.2d + ld1 {v19.16b},[x1],#16 // load next input + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]" +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b + rev64 v19.16b,v19.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v20.2d + ld1 {v20.16b},[x1],#16 // load next input + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]" +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b + rev64 v20.16b,v20.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v21.2d + ld1 {v21.16b},[x1],#16 // load next input + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]" +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b + rev64 v21.16b,v21.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v22.2d + ld1 {v22.16b},[x1],#16 // load next input + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]" +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b + rev64 v22.16b,v22.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + sub x3,x3,#80*8 // rewind + add v25.2d,v25.2d,v23.2d + ld1 {v23.16b},[x1],#16 // load next input + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]" +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b + rev64 v23.16b,v23.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v0.2d,v0.2d,v26.2d // accumulate + add v1.2d,v1.2d,v27.2d + add v2.2d,v2.2d,v28.2d + add v3.2d,v3.2d,v29.2d + + cbnz x2,Loop_hw + + st1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0] // store context + + ldr x29,[sp],#16 + ret + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/include/openssl/opensslconf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,203 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_SYS_MACOSX +# define OPENSSL_SYS_MACOSX 1 +#endif +#ifndef OPENSSL_NO_COMP +# define OPENSSL_NO_COMP +#endif +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#ifndef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f; +# ifdef __GNUC__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# endif +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +/* + * Do not deprecate things to be deprecated in version 1.2.0 before the + * OpenSSL version number matches. + */ +#if OPENSSL_VERSION_NUMBER < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) f; +#elif OPENSSL_API_COMPAT < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_2_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# define SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned int + +#ifdef __cplusplus +} +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/include/progs.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,507 @@ +/* + * WARNING: do not edit! + * Generated by apps/progs.pl + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +typedef enum FUNC_TYPE { + FT_none, FT_general, FT_md, FT_cipher, FT_pkey, + FT_md_alg, FT_cipher_alg +} FUNC_TYPE; + +typedef struct function_st { + FUNC_TYPE type; + const char *name; + int (*func)(int argc, char *argv[]); + const OPTIONS *help; +} FUNCTION; + +DEFINE_LHASH_OF(FUNCTION); + +extern int asn1parse_main(int argc, char *argv[]); +extern int ca_main(int argc, char *argv[]); +extern int ciphers_main(int argc, char *argv[]); +extern int cms_main(int argc, char *argv[]); +extern int crl_main(int argc, char *argv[]); +extern int crl2pkcs7_main(int argc, char *argv[]); +extern int dgst_main(int argc, char *argv[]); +extern int dhparam_main(int argc, char *argv[]); +extern int dsa_main(int argc, char *argv[]); +extern int dsaparam_main(int argc, char *argv[]); +extern int ec_main(int argc, char *argv[]); +extern int ecparam_main(int argc, char *argv[]); +extern int enc_main(int argc, char *argv[]); +extern int engine_main(int argc, char *argv[]); +extern int errstr_main(int argc, char *argv[]); +extern int gendsa_main(int argc, char *argv[]); +extern int genpkey_main(int argc, char *argv[]); +extern int genrsa_main(int argc, char *argv[]); +extern int help_main(int argc, char *argv[]); +extern int list_main(int argc, char *argv[]); +extern int nseq_main(int argc, char *argv[]); +extern int ocsp_main(int argc, char *argv[]); +extern int passwd_main(int argc, char *argv[]); +extern int pkcs12_main(int argc, char *argv[]); +extern int pkcs7_main(int argc, char *argv[]); +extern int pkcs8_main(int argc, char *argv[]); +extern int pkey_main(int argc, char *argv[]); +extern int pkeyparam_main(int argc, char *argv[]); +extern int pkeyutl_main(int argc, char *argv[]); +extern int prime_main(int argc, char *argv[]); +extern int rand_main(int argc, char *argv[]); +extern int rehash_main(int argc, char *argv[]); +extern int req_main(int argc, char *argv[]); +extern int rsa_main(int argc, char *argv[]); +extern int rsautl_main(int argc, char *argv[]); +extern int s_client_main(int argc, char *argv[]); +extern int s_server_main(int argc, char *argv[]); +extern int s_time_main(int argc, char *argv[]); +extern int sess_id_main(int argc, char *argv[]); +extern int smime_main(int argc, char *argv[]); +extern int speed_main(int argc, char *argv[]); +extern int spkac_main(int argc, char *argv[]); +extern int srp_main(int argc, char *argv[]); +extern int storeutl_main(int argc, char *argv[]); +extern int ts_main(int argc, char *argv[]); +extern int verify_main(int argc, char *argv[]); +extern int version_main(int argc, char *argv[]); +extern int x509_main(int argc, char *argv[]); + +extern const OPTIONS asn1parse_options[]; +extern const OPTIONS ca_options[]; +extern const OPTIONS ciphers_options[]; +extern const OPTIONS cms_options[]; +extern const OPTIONS crl_options[]; +extern const OPTIONS crl2pkcs7_options[]; +extern const OPTIONS dgst_options[]; +extern const OPTIONS dhparam_options[]; +extern const OPTIONS dsa_options[]; +extern const OPTIONS dsaparam_options[]; +extern const OPTIONS ec_options[]; +extern const OPTIONS ecparam_options[]; +extern const OPTIONS enc_options[]; +extern const OPTIONS engine_options[]; +extern const OPTIONS errstr_options[]; +extern const OPTIONS gendsa_options[]; +extern const OPTIONS genpkey_options[]; +extern const OPTIONS genrsa_options[]; +extern const OPTIONS help_options[]; +extern const OPTIONS list_options[]; +extern const OPTIONS nseq_options[]; +extern const OPTIONS ocsp_options[]; +extern const OPTIONS passwd_options[]; +extern const OPTIONS pkcs12_options[]; +extern const OPTIONS pkcs7_options[]; +extern const OPTIONS pkcs8_options[]; +extern const OPTIONS pkey_options[]; +extern const OPTIONS pkeyparam_options[]; +extern const OPTIONS pkeyutl_options[]; +extern const OPTIONS prime_options[]; +extern const OPTIONS rand_options[]; +extern const OPTIONS rehash_options[]; +extern const OPTIONS req_options[]; +extern const OPTIONS rsa_options[]; +extern const OPTIONS rsautl_options[]; +extern const OPTIONS s_client_options[]; +extern const OPTIONS s_server_options[]; +extern const OPTIONS s_time_options[]; +extern const OPTIONS sess_id_options[]; +extern const OPTIONS smime_options[]; +extern const OPTIONS speed_options[]; +extern const OPTIONS spkac_options[]; +extern const OPTIONS srp_options[]; +extern const OPTIONS storeutl_options[]; +extern const OPTIONS ts_options[]; +extern const OPTIONS verify_options[]; +extern const OPTIONS version_options[]; +extern const OPTIONS x509_options[]; + +#ifdef INCLUDE_FUNCTION_TABLE +static FUNCTION functions[] = { + {FT_general, "asn1parse", asn1parse_main, asn1parse_options}, + {FT_general, "ca", ca_main, ca_options}, +#ifndef OPENSSL_NO_SOCK + {FT_general, "ciphers", ciphers_main, ciphers_options}, +#endif +#ifndef OPENSSL_NO_CMS + {FT_general, "cms", cms_main, cms_options}, +#endif + {FT_general, "crl", crl_main, crl_options}, + {FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options}, + {FT_general, "dgst", dgst_main, dgst_options}, +#ifndef OPENSSL_NO_DH + {FT_general, "dhparam", dhparam_main, dhparam_options}, +#endif +#ifndef OPENSSL_NO_DSA + {FT_general, "dsa", dsa_main, dsa_options}, +#endif +#ifndef OPENSSL_NO_DSA + {FT_general, "dsaparam", dsaparam_main, dsaparam_options}, +#endif +#ifndef OPENSSL_NO_EC + {FT_general, "ec", ec_main, ec_options}, +#endif +#ifndef OPENSSL_NO_EC + {FT_general, "ecparam", ecparam_main, ecparam_options}, +#endif + {FT_general, "enc", enc_main, enc_options}, +#ifndef OPENSSL_NO_ENGINE + {FT_general, "engine", engine_main, engine_options}, +#endif + {FT_general, "errstr", errstr_main, errstr_options}, +#ifndef OPENSSL_NO_DSA + {FT_general, "gendsa", gendsa_main, gendsa_options}, +#endif + {FT_general, "genpkey", genpkey_main, genpkey_options}, +#ifndef OPENSSL_NO_RSA + {FT_general, "genrsa", genrsa_main, genrsa_options}, +#endif + {FT_general, "help", help_main, help_options}, + {FT_general, "list", list_main, list_options}, + {FT_general, "nseq", nseq_main, nseq_options}, +#ifndef OPENSSL_NO_OCSP + {FT_general, "ocsp", ocsp_main, ocsp_options}, +#endif + {FT_general, "passwd", passwd_main, passwd_options}, +#ifndef OPENSSL_NO_DES + {FT_general, "pkcs12", pkcs12_main, pkcs12_options}, +#endif + {FT_general, "pkcs7", pkcs7_main, pkcs7_options}, + {FT_general, "pkcs8", pkcs8_main, pkcs8_options}, + {FT_general, "pkey", pkey_main, pkey_options}, + {FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options}, + {FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options}, + {FT_general, "prime", prime_main, prime_options}, + {FT_general, "rand", rand_main, rand_options}, + {FT_general, "rehash", rehash_main, rehash_options}, + {FT_general, "req", req_main, req_options}, + {FT_general, "rsa", rsa_main, rsa_options}, +#ifndef OPENSSL_NO_RSA + {FT_general, "rsautl", rsautl_main, rsautl_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_client", s_client_main, s_client_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_server", s_server_main, s_server_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_time", s_time_main, s_time_options}, +#endif + {FT_general, "sess_id", sess_id_main, sess_id_options}, + {FT_general, "smime", smime_main, smime_options}, + {FT_general, "speed", speed_main, speed_options}, + {FT_general, "spkac", spkac_main, spkac_options}, +#ifndef OPENSSL_NO_SRP + {FT_general, "srp", srp_main, srp_options}, +#endif + {FT_general, "storeutl", storeutl_main, storeutl_options}, +#ifndef OPENSSL_NO_TS + {FT_general, "ts", ts_main, ts_options}, +#endif + {FT_general, "verify", verify_main, verify_options}, + {FT_general, "version", version_main, version_options}, + {FT_general, "x509", x509_main, x509_options}, +#ifndef OPENSSL_NO_MD2 + {FT_md, "md2", dgst_main}, +#endif +#ifndef OPENSSL_NO_MD4 + {FT_md, "md4", dgst_main}, +#endif + {FT_md, "md5", dgst_main}, +#ifndef OPENSSL_NO_GOST + {FT_md, "gost", dgst_main}, +#endif + {FT_md, "sha1", dgst_main}, + {FT_md, "sha224", dgst_main}, + {FT_md, "sha256", dgst_main}, + {FT_md, "sha384", dgst_main}, + {FT_md, "sha512", dgst_main}, + {FT_md, "sha512-224", dgst_main}, + {FT_md, "sha512-256", dgst_main}, + {FT_md, "sha3-224", dgst_main}, + {FT_md, "sha3-256", dgst_main}, + {FT_md, "sha3-384", dgst_main}, + {FT_md, "sha3-512", dgst_main}, + {FT_md, "shake128", dgst_main}, + {FT_md, "shake256", dgst_main}, +#ifndef OPENSSL_NO_MDC2 + {FT_md, "mdc2", dgst_main}, +#endif +#ifndef OPENSSL_NO_RMD160 + {FT_md, "rmd160", dgst_main}, +#endif +#ifndef OPENSSL_NO_BLAKE2 + {FT_md, "blake2b512", dgst_main}, +#endif +#ifndef OPENSSL_NO_BLAKE2 + {FT_md, "blake2s256", dgst_main}, +#endif +#ifndef OPENSSL_NO_SM3 + {FT_md, "sm3", dgst_main}, +#endif + {FT_cipher, "aes-128-cbc", enc_main, enc_options}, + {FT_cipher, "aes-128-ecb", enc_main, enc_options}, + {FT_cipher, "aes-192-cbc", enc_main, enc_options}, + {FT_cipher, "aes-192-ecb", enc_main, enc_options}, + {FT_cipher, "aes-256-cbc", enc_main, enc_options}, + {FT_cipher, "aes-256-ecb", enc_main, enc_options}, +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-128-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-128-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-192-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-192-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-256-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-256-ecb", enc_main, enc_options}, +#endif + {FT_cipher, "base64", enc_main, enc_options}, +#ifdef ZLIB + {FT_cipher, "zlib", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des3", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "desx", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC4 + {FT_cipher, "rc4", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC4 + {FT_cipher, "rc4-40", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-64-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-40-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ctr", enc_main, enc_options}, +#endif + {0, NULL, NULL} +}; +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/openssl-cl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/openssl-cl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/openssl-cl.gypi 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/openssl-cl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,89 @@ +{ + 'variables': { + 'openssl_defines_darwin64-arm64-cc': [ + 'NDEBUG', + 'L_ENDIAN', + 'OPENSSL_PIC', + 'OPENSSL_CPUID_OBJ', + 'OPENSSL_BN_ASM_MONT', + 'SHA1_ASM', + 'SHA256_ASM', + 'SHA512_ASM', + 'KECCAK1600_ASM', + 'VPAES_ASM', + 'ECP_NISTZ256_ASM', + 'POLY1305_ASM', + ], + 'openssl_cflags_darwin64-arm64-cc': [ + '-Wa,--noexecstack', + '-O3 -Wall', + '-arch arm64', + '-O3 -Wall', + ], + 'openssl_ex_libs_darwin64-arm64-cc': [ + '', + ], + 'openssl_cli_srcs_darwin64-arm64-cc': [ + 'openssl/apps/asn1pars.c', + 'openssl/apps/ca.c', + 'openssl/apps/ciphers.c', + 'openssl/apps/cms.c', + 'openssl/apps/crl.c', + 'openssl/apps/crl2p7.c', + 'openssl/apps/dgst.c', + 'openssl/apps/dhparam.c', + 'openssl/apps/dsa.c', + 'openssl/apps/dsaparam.c', + 'openssl/apps/ec.c', + 'openssl/apps/ecparam.c', + 'openssl/apps/enc.c', + 'openssl/apps/engine.c', + 'openssl/apps/errstr.c', + 'openssl/apps/gendsa.c', + 'openssl/apps/genpkey.c', + 'openssl/apps/genrsa.c', + 'openssl/apps/nseq.c', + 'openssl/apps/ocsp.c', + 'openssl/apps/openssl.c', + 'openssl/apps/passwd.c', + 'openssl/apps/pkcs12.c', + 'openssl/apps/pkcs7.c', + 'openssl/apps/pkcs8.c', + 'openssl/apps/pkey.c', + 'openssl/apps/pkeyparam.c', + 'openssl/apps/pkeyutl.c', + 'openssl/apps/prime.c', + 'openssl/apps/rand.c', + 'openssl/apps/rehash.c', + 'openssl/apps/req.c', + 'openssl/apps/rsa.c', + 'openssl/apps/rsautl.c', + 'openssl/apps/s_client.c', + 'openssl/apps/s_server.c', + 'openssl/apps/s_time.c', + 'openssl/apps/sess_id.c', + 'openssl/apps/smime.c', + 'openssl/apps/speed.c', + 'openssl/apps/spkac.c', + 'openssl/apps/srp.c', + 'openssl/apps/storeutl.c', + 'openssl/apps/ts.c', + 'openssl/apps/verify.c', + 'openssl/apps/version.c', + 'openssl/apps/x509.c', + 'openssl/apps/app_rand.c', + 'openssl/apps/apps.c', + 'openssl/apps/bf_prefix.c', + 'openssl/apps/opt.c', + 'openssl/apps/s_cb.c', + 'openssl/apps/s_socket.c', + ], + }, + 'defines': ['<@(openssl_defines_darwin64-arm64-cc)'], + 'include_dirs': [ + './include', + ], + 'cflags' : ['<@(openssl_cflags_darwin64-arm64-cc)'], + 'libraries': ['<@(openssl_ex_libs_darwin64-arm64-cc)'], + 'sources': ['<@(openssl_cli_srcs_darwin64-arm64-cc)'], +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/openssl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/openssl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm/openssl.gypi 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm/openssl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,732 @@ +{ + 'variables': { + 'openssl_sources': [ + 'openssl/ssl/bio_ssl.c', + 'openssl/ssl/d1_lib.c', + 'openssl/ssl/d1_msg.c', + 'openssl/ssl/d1_srtp.c', + 'openssl/ssl/methods.c', + 'openssl/ssl/packet.c', + 'openssl/ssl/pqueue.c', + 'openssl/ssl/record/dtls1_bitmap.c', + 'openssl/ssl/record/rec_layer_d1.c', + 'openssl/ssl/record/rec_layer_s3.c', + 'openssl/ssl/record/ssl3_buffer.c', + 'openssl/ssl/record/ssl3_record.c', + 'openssl/ssl/record/ssl3_record_tls13.c', + 'openssl/ssl/s3_cbc.c', + 'openssl/ssl/s3_enc.c', + 'openssl/ssl/s3_lib.c', + 'openssl/ssl/s3_msg.c', + 'openssl/ssl/ssl_asn1.c', + 'openssl/ssl/ssl_cert.c', + 'openssl/ssl/ssl_ciph.c', + 'openssl/ssl/ssl_conf.c', + 'openssl/ssl/ssl_err.c', + 'openssl/ssl/ssl_init.c', + 'openssl/ssl/ssl_lib.c', + 'openssl/ssl/ssl_mcnf.c', + 'openssl/ssl/ssl_rsa.c', + 'openssl/ssl/ssl_sess.c', + 'openssl/ssl/ssl_stat.c', + 'openssl/ssl/ssl_txt.c', + 'openssl/ssl/ssl_utst.c', + 'openssl/ssl/statem/extensions.c', + 'openssl/ssl/statem/extensions_clnt.c', + 'openssl/ssl/statem/extensions_cust.c', + 'openssl/ssl/statem/extensions_srvr.c', + 'openssl/ssl/statem/statem.c', + 'openssl/ssl/statem/statem_clnt.c', + 'openssl/ssl/statem/statem_dtls.c', + 'openssl/ssl/statem/statem_lib.c', + 'openssl/ssl/statem/statem_srvr.c', + 'openssl/ssl/t1_enc.c', + 'openssl/ssl/t1_lib.c', + 'openssl/ssl/t1_trce.c', + 'openssl/ssl/tls13_enc.c', + 'openssl/ssl/tls_srp.c', + 'openssl/crypto/aes/aes_cbc.c', + 'openssl/crypto/aes/aes_cfb.c', + 'openssl/crypto/aes/aes_core.c', + 'openssl/crypto/aes/aes_ecb.c', + 'openssl/crypto/aes/aes_ige.c', + 'openssl/crypto/aes/aes_misc.c', + 'openssl/crypto/aes/aes_ofb.c', + 'openssl/crypto/aes/aes_wrap.c', + 'openssl/crypto/aria/aria.c', + 'openssl/crypto/armcap.c', + 'openssl/crypto/asn1/a_bitstr.c', + 'openssl/crypto/asn1/a_d2i_fp.c', + 'openssl/crypto/asn1/a_digest.c', + 'openssl/crypto/asn1/a_dup.c', + 'openssl/crypto/asn1/a_gentm.c', + 'openssl/crypto/asn1/a_i2d_fp.c', + 'openssl/crypto/asn1/a_int.c', + 'openssl/crypto/asn1/a_mbstr.c', + 'openssl/crypto/asn1/a_object.c', + 'openssl/crypto/asn1/a_octet.c', + 'openssl/crypto/asn1/a_print.c', + 'openssl/crypto/asn1/a_sign.c', + 'openssl/crypto/asn1/a_strex.c', + 'openssl/crypto/asn1/a_strnid.c', + 'openssl/crypto/asn1/a_time.c', + 'openssl/crypto/asn1/a_type.c', + 'openssl/crypto/asn1/a_utctm.c', + 'openssl/crypto/asn1/a_utf8.c', + 'openssl/crypto/asn1/a_verify.c', + 'openssl/crypto/asn1/ameth_lib.c', + 'openssl/crypto/asn1/asn1_err.c', + 'openssl/crypto/asn1/asn1_gen.c', + 'openssl/crypto/asn1/asn1_item_list.c', + 'openssl/crypto/asn1/asn1_lib.c', + 'openssl/crypto/asn1/asn1_par.c', + 'openssl/crypto/asn1/asn_mime.c', + 'openssl/crypto/asn1/asn_moid.c', + 'openssl/crypto/asn1/asn_mstbl.c', + 'openssl/crypto/asn1/asn_pack.c', + 'openssl/crypto/asn1/bio_asn1.c', + 'openssl/crypto/asn1/bio_ndef.c', + 'openssl/crypto/asn1/d2i_pr.c', + 'openssl/crypto/asn1/d2i_pu.c', + 'openssl/crypto/asn1/evp_asn1.c', + 'openssl/crypto/asn1/f_int.c', + 'openssl/crypto/asn1/f_string.c', + 'openssl/crypto/asn1/i2d_pr.c', + 'openssl/crypto/asn1/i2d_pu.c', + 'openssl/crypto/asn1/n_pkey.c', + 'openssl/crypto/asn1/nsseq.c', + 'openssl/crypto/asn1/p5_pbe.c', + 'openssl/crypto/asn1/p5_pbev2.c', + 'openssl/crypto/asn1/p5_scrypt.c', + 'openssl/crypto/asn1/p8_pkey.c', + 'openssl/crypto/asn1/t_bitst.c', + 'openssl/crypto/asn1/t_pkey.c', + 'openssl/crypto/asn1/t_spki.c', + 'openssl/crypto/asn1/tasn_dec.c', + 'openssl/crypto/asn1/tasn_enc.c', + 'openssl/crypto/asn1/tasn_fre.c', + 'openssl/crypto/asn1/tasn_new.c', + 'openssl/crypto/asn1/tasn_prn.c', + 'openssl/crypto/asn1/tasn_scn.c', + 'openssl/crypto/asn1/tasn_typ.c', + 'openssl/crypto/asn1/tasn_utl.c', + 'openssl/crypto/asn1/x_algor.c', + 'openssl/crypto/asn1/x_bignum.c', + 'openssl/crypto/asn1/x_info.c', + 'openssl/crypto/asn1/x_int64.c', + 'openssl/crypto/asn1/x_long.c', + 'openssl/crypto/asn1/x_pkey.c', + 'openssl/crypto/asn1/x_sig.c', + 'openssl/crypto/asn1/x_spki.c', + 'openssl/crypto/asn1/x_val.c', + 'openssl/crypto/async/arch/async_null.c', + 'openssl/crypto/async/arch/async_posix.c', + 'openssl/crypto/async/arch/async_win.c', + 'openssl/crypto/async/async.c', + 'openssl/crypto/async/async_err.c', + 'openssl/crypto/async/async_wait.c', + 'openssl/crypto/bf/bf_cfb64.c', + 'openssl/crypto/bf/bf_ecb.c', + 'openssl/crypto/bf/bf_enc.c', + 'openssl/crypto/bf/bf_ofb64.c', + 'openssl/crypto/bf/bf_skey.c', + 'openssl/crypto/bio/b_addr.c', + 'openssl/crypto/bio/b_dump.c', + 'openssl/crypto/bio/b_print.c', + 'openssl/crypto/bio/b_sock.c', + 'openssl/crypto/bio/b_sock2.c', + 'openssl/crypto/bio/bf_buff.c', + 'openssl/crypto/bio/bf_lbuf.c', + 'openssl/crypto/bio/bf_nbio.c', + 'openssl/crypto/bio/bf_null.c', + 'openssl/crypto/bio/bio_cb.c', + 'openssl/crypto/bio/bio_err.c', + 'openssl/crypto/bio/bio_lib.c', + 'openssl/crypto/bio/bio_meth.c', + 'openssl/crypto/bio/bss_acpt.c', + 'openssl/crypto/bio/bss_bio.c', + 'openssl/crypto/bio/bss_conn.c', + 'openssl/crypto/bio/bss_dgram.c', + 'openssl/crypto/bio/bss_fd.c', + 'openssl/crypto/bio/bss_file.c', + 'openssl/crypto/bio/bss_log.c', + 'openssl/crypto/bio/bss_mem.c', + 'openssl/crypto/bio/bss_null.c', + 'openssl/crypto/bio/bss_sock.c', + 'openssl/crypto/blake2/blake2b.c', + 'openssl/crypto/blake2/blake2s.c', + 'openssl/crypto/blake2/m_blake2b.c', + 'openssl/crypto/blake2/m_blake2s.c', + 'openssl/crypto/bn/bn_add.c', + 'openssl/crypto/bn/bn_asm.c', + 'openssl/crypto/bn/bn_blind.c', + 'openssl/crypto/bn/bn_const.c', + 'openssl/crypto/bn/bn_ctx.c', + 'openssl/crypto/bn/bn_depr.c', + 'openssl/crypto/bn/bn_dh.c', + 'openssl/crypto/bn/bn_div.c', + 'openssl/crypto/bn/bn_err.c', + 'openssl/crypto/bn/bn_exp.c', + 'openssl/crypto/bn/bn_exp2.c', + 'openssl/crypto/bn/bn_gcd.c', + 'openssl/crypto/bn/bn_gf2m.c', + 'openssl/crypto/bn/bn_intern.c', + 'openssl/crypto/bn/bn_kron.c', + 'openssl/crypto/bn/bn_lib.c', + 'openssl/crypto/bn/bn_mod.c', + 'openssl/crypto/bn/bn_mont.c', + 'openssl/crypto/bn/bn_mpi.c', + 'openssl/crypto/bn/bn_mul.c', + 'openssl/crypto/bn/bn_nist.c', + 'openssl/crypto/bn/bn_prime.c', + 'openssl/crypto/bn/bn_print.c', + 'openssl/crypto/bn/bn_rand.c', + 'openssl/crypto/bn/bn_recp.c', + 'openssl/crypto/bn/bn_shift.c', + 'openssl/crypto/bn/bn_sqr.c', + 'openssl/crypto/bn/bn_sqrt.c', + 'openssl/crypto/bn/bn_srp.c', + 'openssl/crypto/bn/bn_word.c', + 'openssl/crypto/bn/bn_x931p.c', + 'openssl/crypto/buffer/buf_err.c', + 'openssl/crypto/buffer/buffer.c', + 'openssl/crypto/camellia/camellia.c', + 'openssl/crypto/camellia/cmll_cbc.c', + 'openssl/crypto/camellia/cmll_cfb.c', + 'openssl/crypto/camellia/cmll_ctr.c', + 'openssl/crypto/camellia/cmll_ecb.c', + 'openssl/crypto/camellia/cmll_misc.c', + 'openssl/crypto/camellia/cmll_ofb.c', + 'openssl/crypto/cast/c_cfb64.c', + 'openssl/crypto/cast/c_ecb.c', + 'openssl/crypto/cast/c_enc.c', + 'openssl/crypto/cast/c_ofb64.c', + 'openssl/crypto/cast/c_skey.c', + 'openssl/crypto/cmac/cm_ameth.c', + 'openssl/crypto/cmac/cm_pmeth.c', + 'openssl/crypto/cmac/cmac.c', + 'openssl/crypto/cms/cms_asn1.c', + 'openssl/crypto/cms/cms_att.c', + 'openssl/crypto/cms/cms_cd.c', + 'openssl/crypto/cms/cms_dd.c', + 'openssl/crypto/cms/cms_enc.c', + 'openssl/crypto/cms/cms_env.c', + 'openssl/crypto/cms/cms_err.c', + 'openssl/crypto/cms/cms_ess.c', + 'openssl/crypto/cms/cms_io.c', + 'openssl/crypto/cms/cms_kari.c', + 'openssl/crypto/cms/cms_lib.c', + 'openssl/crypto/cms/cms_pwri.c', + 'openssl/crypto/cms/cms_sd.c', + 'openssl/crypto/cms/cms_smime.c', + 'openssl/crypto/conf/conf_api.c', + 'openssl/crypto/conf/conf_def.c', + 'openssl/crypto/conf/conf_err.c', + 'openssl/crypto/conf/conf_lib.c', + 'openssl/crypto/conf/conf_mall.c', + 'openssl/crypto/conf/conf_mod.c', + 'openssl/crypto/conf/conf_sap.c', + 'openssl/crypto/conf/conf_ssl.c', + 'openssl/crypto/cpt_err.c', + 'openssl/crypto/cryptlib.c', + 'openssl/crypto/ct/ct_b64.c', + 'openssl/crypto/ct/ct_err.c', + 'openssl/crypto/ct/ct_log.c', + 'openssl/crypto/ct/ct_oct.c', + 'openssl/crypto/ct/ct_policy.c', + 'openssl/crypto/ct/ct_prn.c', + 'openssl/crypto/ct/ct_sct.c', + 'openssl/crypto/ct/ct_sct_ctx.c', + 'openssl/crypto/ct/ct_vfy.c', + 'openssl/crypto/ct/ct_x509v3.c', + 'openssl/crypto/ctype.c', + 'openssl/crypto/cversion.c', + 'openssl/crypto/des/cbc_cksm.c', + 'openssl/crypto/des/cbc_enc.c', + 'openssl/crypto/des/cfb64ede.c', + 'openssl/crypto/des/cfb64enc.c', + 'openssl/crypto/des/cfb_enc.c', + 'openssl/crypto/des/des_enc.c', + 'openssl/crypto/des/ecb3_enc.c', + 'openssl/crypto/des/ecb_enc.c', + 'openssl/crypto/des/fcrypt.c', + 'openssl/crypto/des/fcrypt_b.c', + 'openssl/crypto/des/ofb64ede.c', + 'openssl/crypto/des/ofb64enc.c', + 'openssl/crypto/des/ofb_enc.c', + 'openssl/crypto/des/pcbc_enc.c', + 'openssl/crypto/des/qud_cksm.c', + 'openssl/crypto/des/rand_key.c', + 'openssl/crypto/des/set_key.c', + 'openssl/crypto/des/str2key.c', + 'openssl/crypto/des/xcbc_enc.c', + 'openssl/crypto/dh/dh_ameth.c', + 'openssl/crypto/dh/dh_asn1.c', + 'openssl/crypto/dh/dh_check.c', + 'openssl/crypto/dh/dh_depr.c', + 'openssl/crypto/dh/dh_err.c', + 'openssl/crypto/dh/dh_gen.c', + 'openssl/crypto/dh/dh_kdf.c', + 'openssl/crypto/dh/dh_key.c', + 'openssl/crypto/dh/dh_lib.c', + 'openssl/crypto/dh/dh_meth.c', + 'openssl/crypto/dh/dh_pmeth.c', + 'openssl/crypto/dh/dh_prn.c', + 'openssl/crypto/dh/dh_rfc5114.c', + 'openssl/crypto/dh/dh_rfc7919.c', + 'openssl/crypto/dsa/dsa_ameth.c', + 'openssl/crypto/dsa/dsa_asn1.c', + 'openssl/crypto/dsa/dsa_depr.c', + 'openssl/crypto/dsa/dsa_err.c', + 'openssl/crypto/dsa/dsa_gen.c', + 'openssl/crypto/dsa/dsa_key.c', + 'openssl/crypto/dsa/dsa_lib.c', + 'openssl/crypto/dsa/dsa_meth.c', + 'openssl/crypto/dsa/dsa_ossl.c', + 'openssl/crypto/dsa/dsa_pmeth.c', + 'openssl/crypto/dsa/dsa_prn.c', + 'openssl/crypto/dsa/dsa_sign.c', + 'openssl/crypto/dsa/dsa_vrf.c', + 'openssl/crypto/dso/dso_dl.c', + 'openssl/crypto/dso/dso_dlfcn.c', + 'openssl/crypto/dso/dso_err.c', + 'openssl/crypto/dso/dso_lib.c', + 'openssl/crypto/dso/dso_openssl.c', + 'openssl/crypto/dso/dso_vms.c', + 'openssl/crypto/dso/dso_win32.c', + 'openssl/crypto/ebcdic.c', + 'openssl/crypto/ec/curve25519.c', + 'openssl/crypto/ec/curve448/arch_32/f_impl.c', + 'openssl/crypto/ec/curve448/curve448.c', + 'openssl/crypto/ec/curve448/curve448_tables.c', + 'openssl/crypto/ec/curve448/eddsa.c', + 'openssl/crypto/ec/curve448/f_generic.c', + 'openssl/crypto/ec/curve448/scalar.c', + 'openssl/crypto/ec/ec2_oct.c', + 'openssl/crypto/ec/ec2_smpl.c', + 'openssl/crypto/ec/ec_ameth.c', + 'openssl/crypto/ec/ec_asn1.c', + 'openssl/crypto/ec/ec_check.c', + 'openssl/crypto/ec/ec_curve.c', + 'openssl/crypto/ec/ec_cvt.c', + 'openssl/crypto/ec/ec_err.c', + 'openssl/crypto/ec/ec_key.c', + 'openssl/crypto/ec/ec_kmeth.c', + 'openssl/crypto/ec/ec_lib.c', + 'openssl/crypto/ec/ec_mult.c', + 'openssl/crypto/ec/ec_oct.c', + 'openssl/crypto/ec/ec_pmeth.c', + 'openssl/crypto/ec/ec_print.c', + 'openssl/crypto/ec/ecdh_kdf.c', + 'openssl/crypto/ec/ecdh_ossl.c', + 'openssl/crypto/ec/ecdsa_ossl.c', + 'openssl/crypto/ec/ecdsa_sign.c', + 'openssl/crypto/ec/ecdsa_vrf.c', + 'openssl/crypto/ec/eck_prn.c', + 'openssl/crypto/ec/ecp_mont.c', + 'openssl/crypto/ec/ecp_nist.c', + 'openssl/crypto/ec/ecp_nistp224.c', + 'openssl/crypto/ec/ecp_nistp256.c', + 'openssl/crypto/ec/ecp_nistp521.c', + 'openssl/crypto/ec/ecp_nistputil.c', + 'openssl/crypto/ec/ecp_nistz256.c', + 'openssl/crypto/ec/ecp_oct.c', + 'openssl/crypto/ec/ecp_smpl.c', + 'openssl/crypto/ec/ecx_meth.c', + 'openssl/crypto/engine/eng_all.c', + 'openssl/crypto/engine/eng_cnf.c', + 'openssl/crypto/engine/eng_ctrl.c', + 'openssl/crypto/engine/eng_dyn.c', + 'openssl/crypto/engine/eng_err.c', + 'openssl/crypto/engine/eng_fat.c', + 'openssl/crypto/engine/eng_init.c', + 'openssl/crypto/engine/eng_lib.c', + 'openssl/crypto/engine/eng_list.c', + 'openssl/crypto/engine/eng_openssl.c', + 'openssl/crypto/engine/eng_pkey.c', + 'openssl/crypto/engine/eng_rdrand.c', + 'openssl/crypto/engine/eng_table.c', + 'openssl/crypto/engine/tb_asnmth.c', + 'openssl/crypto/engine/tb_cipher.c', + 'openssl/crypto/engine/tb_dh.c', + 'openssl/crypto/engine/tb_digest.c', + 'openssl/crypto/engine/tb_dsa.c', + 'openssl/crypto/engine/tb_eckey.c', + 'openssl/crypto/engine/tb_pkmeth.c', + 'openssl/crypto/engine/tb_rand.c', + 'openssl/crypto/engine/tb_rsa.c', + 'openssl/crypto/err/err.c', + 'openssl/crypto/err/err_all.c', + 'openssl/crypto/err/err_prn.c', + 'openssl/crypto/evp/bio_b64.c', + 'openssl/crypto/evp/bio_enc.c', + 'openssl/crypto/evp/bio_md.c', + 'openssl/crypto/evp/bio_ok.c', + 'openssl/crypto/evp/c_allc.c', + 'openssl/crypto/evp/c_alld.c', + 'openssl/crypto/evp/cmeth_lib.c', + 'openssl/crypto/evp/digest.c', + 'openssl/crypto/evp/e_aes.c', + 'openssl/crypto/evp/e_aes_cbc_hmac_sha1.c', + 'openssl/crypto/evp/e_aes_cbc_hmac_sha256.c', + 'openssl/crypto/evp/e_aria.c', + 'openssl/crypto/evp/e_bf.c', + 'openssl/crypto/evp/e_camellia.c', + 'openssl/crypto/evp/e_cast.c', + 'openssl/crypto/evp/e_chacha20_poly1305.c', + 'openssl/crypto/evp/e_des.c', + 'openssl/crypto/evp/e_des3.c', + 'openssl/crypto/evp/e_idea.c', + 'openssl/crypto/evp/e_null.c', + 'openssl/crypto/evp/e_old.c', + 'openssl/crypto/evp/e_rc2.c', + 'openssl/crypto/evp/e_rc4.c', + 'openssl/crypto/evp/e_rc4_hmac_md5.c', + 'openssl/crypto/evp/e_rc5.c', + 'openssl/crypto/evp/e_seed.c', + 'openssl/crypto/evp/e_sm4.c', + 'openssl/crypto/evp/e_xcbc_d.c', + 'openssl/crypto/evp/encode.c', + 'openssl/crypto/evp/evp_cnf.c', + 'openssl/crypto/evp/evp_enc.c', + 'openssl/crypto/evp/evp_err.c', + 'openssl/crypto/evp/evp_key.c', + 'openssl/crypto/evp/evp_lib.c', + 'openssl/crypto/evp/evp_pbe.c', + 'openssl/crypto/evp/evp_pkey.c', + 'openssl/crypto/evp/m_md2.c', + 'openssl/crypto/evp/m_md4.c', + 'openssl/crypto/evp/m_md5.c', + 'openssl/crypto/evp/m_md5_sha1.c', + 'openssl/crypto/evp/m_mdc2.c', + 'openssl/crypto/evp/m_null.c', + 'openssl/crypto/evp/m_ripemd.c', + 'openssl/crypto/evp/m_sha1.c', + 'openssl/crypto/evp/m_sha3.c', + 'openssl/crypto/evp/m_sigver.c', + 'openssl/crypto/evp/m_wp.c', + 'openssl/crypto/evp/names.c', + 'openssl/crypto/evp/p5_crpt.c', + 'openssl/crypto/evp/p5_crpt2.c', + 'openssl/crypto/evp/p_dec.c', + 'openssl/crypto/evp/p_enc.c', + 'openssl/crypto/evp/p_lib.c', + 'openssl/crypto/evp/p_open.c', + 'openssl/crypto/evp/p_seal.c', + 'openssl/crypto/evp/p_sign.c', + 'openssl/crypto/evp/p_verify.c', + 'openssl/crypto/evp/pbe_scrypt.c', + 'openssl/crypto/evp/pmeth_fn.c', + 'openssl/crypto/evp/pmeth_gn.c', + 'openssl/crypto/evp/pmeth_lib.c', + 'openssl/crypto/ex_data.c', + 'openssl/crypto/getenv.c', + 'openssl/crypto/hmac/hm_ameth.c', + 'openssl/crypto/hmac/hm_pmeth.c', + 'openssl/crypto/hmac/hmac.c', + 'openssl/crypto/idea/i_cbc.c', + 'openssl/crypto/idea/i_cfb64.c', + 'openssl/crypto/idea/i_ecb.c', + 'openssl/crypto/idea/i_ofb64.c', + 'openssl/crypto/idea/i_skey.c', + 'openssl/crypto/init.c', + 'openssl/crypto/kdf/hkdf.c', + 'openssl/crypto/kdf/kdf_err.c', + 'openssl/crypto/kdf/scrypt.c', + 'openssl/crypto/kdf/tls1_prf.c', + 'openssl/crypto/lhash/lh_stats.c', + 'openssl/crypto/lhash/lhash.c', + 'openssl/crypto/md4/md4_dgst.c', + 'openssl/crypto/md4/md4_one.c', + 'openssl/crypto/md5/md5_dgst.c', + 'openssl/crypto/md5/md5_one.c', + 'openssl/crypto/mdc2/mdc2_one.c', + 'openssl/crypto/mdc2/mdc2dgst.c', + 'openssl/crypto/mem.c', + 'openssl/crypto/mem_dbg.c', + 'openssl/crypto/mem_sec.c', + 'openssl/crypto/modes/cbc128.c', + 'openssl/crypto/modes/ccm128.c', + 'openssl/crypto/modes/cfb128.c', + 'openssl/crypto/modes/ctr128.c', + 'openssl/crypto/modes/cts128.c', + 'openssl/crypto/modes/gcm128.c', + 'openssl/crypto/modes/ocb128.c', + 'openssl/crypto/modes/ofb128.c', + 'openssl/crypto/modes/wrap128.c', + 'openssl/crypto/modes/xts128.c', + 'openssl/crypto/o_dir.c', + 'openssl/crypto/o_fips.c', + 'openssl/crypto/o_fopen.c', + 'openssl/crypto/o_init.c', + 'openssl/crypto/o_str.c', + 'openssl/crypto/o_time.c', + 'openssl/crypto/objects/o_names.c', + 'openssl/crypto/objects/obj_dat.c', + 'openssl/crypto/objects/obj_err.c', + 'openssl/crypto/objects/obj_lib.c', + 'openssl/crypto/objects/obj_xref.c', + 'openssl/crypto/ocsp/ocsp_asn.c', + 'openssl/crypto/ocsp/ocsp_cl.c', + 'openssl/crypto/ocsp/ocsp_err.c', + 'openssl/crypto/ocsp/ocsp_ext.c', + 'openssl/crypto/ocsp/ocsp_ht.c', + 'openssl/crypto/ocsp/ocsp_lib.c', + 'openssl/crypto/ocsp/ocsp_prn.c', + 'openssl/crypto/ocsp/ocsp_srv.c', + 'openssl/crypto/ocsp/ocsp_vfy.c', + 'openssl/crypto/ocsp/v3_ocsp.c', + 'openssl/crypto/pem/pem_all.c', + 'openssl/crypto/pem/pem_err.c', + 'openssl/crypto/pem/pem_info.c', + 'openssl/crypto/pem/pem_lib.c', + 'openssl/crypto/pem/pem_oth.c', + 'openssl/crypto/pem/pem_pk8.c', + 'openssl/crypto/pem/pem_pkey.c', + 'openssl/crypto/pem/pem_sign.c', + 'openssl/crypto/pem/pem_x509.c', + 'openssl/crypto/pem/pem_xaux.c', + 'openssl/crypto/pem/pvkfmt.c', + 'openssl/crypto/pkcs12/p12_add.c', + 'openssl/crypto/pkcs12/p12_asn.c', + 'openssl/crypto/pkcs12/p12_attr.c', + 'openssl/crypto/pkcs12/p12_crpt.c', + 'openssl/crypto/pkcs12/p12_crt.c', + 'openssl/crypto/pkcs12/p12_decr.c', + 'openssl/crypto/pkcs12/p12_init.c', + 'openssl/crypto/pkcs12/p12_key.c', + 'openssl/crypto/pkcs12/p12_kiss.c', + 'openssl/crypto/pkcs12/p12_mutl.c', + 'openssl/crypto/pkcs12/p12_npas.c', + 'openssl/crypto/pkcs12/p12_p8d.c', + 'openssl/crypto/pkcs12/p12_p8e.c', + 'openssl/crypto/pkcs12/p12_sbag.c', + 'openssl/crypto/pkcs12/p12_utl.c', + 'openssl/crypto/pkcs12/pk12err.c', + 'openssl/crypto/pkcs7/bio_pk7.c', + 'openssl/crypto/pkcs7/pk7_asn1.c', + 'openssl/crypto/pkcs7/pk7_attr.c', + 'openssl/crypto/pkcs7/pk7_doit.c', + 'openssl/crypto/pkcs7/pk7_lib.c', + 'openssl/crypto/pkcs7/pk7_mime.c', + 'openssl/crypto/pkcs7/pk7_smime.c', + 'openssl/crypto/pkcs7/pkcs7err.c', + 'openssl/crypto/poly1305/poly1305.c', + 'openssl/crypto/poly1305/poly1305_ameth.c', + 'openssl/crypto/poly1305/poly1305_pmeth.c', + 'openssl/crypto/rand/drbg_ctr.c', + 'openssl/crypto/rand/drbg_lib.c', + 'openssl/crypto/rand/rand_egd.c', + 'openssl/crypto/rand/rand_err.c', + 'openssl/crypto/rand/rand_lib.c', + 'openssl/crypto/rand/rand_unix.c', + 'openssl/crypto/rand/rand_vms.c', + 'openssl/crypto/rand/rand_win.c', + 'openssl/crypto/rand/randfile.c', + 'openssl/crypto/rc2/rc2_cbc.c', + 'openssl/crypto/rc2/rc2_ecb.c', + 'openssl/crypto/rc2/rc2_skey.c', + 'openssl/crypto/rc2/rc2cfb64.c', + 'openssl/crypto/rc2/rc2ofb64.c', + 'openssl/crypto/rc4/rc4_enc.c', + 'openssl/crypto/rc4/rc4_skey.c', + 'openssl/crypto/ripemd/rmd_dgst.c', + 'openssl/crypto/ripemd/rmd_one.c', + 'openssl/crypto/rsa/rsa_ameth.c', + 'openssl/crypto/rsa/rsa_asn1.c', + 'openssl/crypto/rsa/rsa_chk.c', + 'openssl/crypto/rsa/rsa_crpt.c', + 'openssl/crypto/rsa/rsa_depr.c', + 'openssl/crypto/rsa/rsa_err.c', + 'openssl/crypto/rsa/rsa_gen.c', + 'openssl/crypto/rsa/rsa_lib.c', + 'openssl/crypto/rsa/rsa_meth.c', + 'openssl/crypto/rsa/rsa_mp.c', + 'openssl/crypto/rsa/rsa_none.c', + 'openssl/crypto/rsa/rsa_oaep.c', + 'openssl/crypto/rsa/rsa_ossl.c', + 'openssl/crypto/rsa/rsa_pk1.c', + 'openssl/crypto/rsa/rsa_pmeth.c', + 'openssl/crypto/rsa/rsa_prn.c', + 'openssl/crypto/rsa/rsa_pss.c', + 'openssl/crypto/rsa/rsa_saos.c', + 'openssl/crypto/rsa/rsa_sign.c', + 'openssl/crypto/rsa/rsa_ssl.c', + 'openssl/crypto/rsa/rsa_x931.c', + 'openssl/crypto/rsa/rsa_x931g.c', + 'openssl/crypto/seed/seed.c', + 'openssl/crypto/seed/seed_cbc.c', + 'openssl/crypto/seed/seed_cfb.c', + 'openssl/crypto/seed/seed_ecb.c', + 'openssl/crypto/seed/seed_ofb.c', + 'openssl/crypto/sha/sha1_one.c', + 'openssl/crypto/sha/sha1dgst.c', + 'openssl/crypto/sha/sha256.c', + 'openssl/crypto/sha/sha512.c', + 'openssl/crypto/siphash/siphash.c', + 'openssl/crypto/siphash/siphash_ameth.c', + 'openssl/crypto/siphash/siphash_pmeth.c', + 'openssl/crypto/sm2/sm2_crypt.c', + 'openssl/crypto/sm2/sm2_err.c', + 'openssl/crypto/sm2/sm2_pmeth.c', + 'openssl/crypto/sm2/sm2_sign.c', + 'openssl/crypto/sm3/m_sm3.c', + 'openssl/crypto/sm3/sm3.c', + 'openssl/crypto/sm4/sm4.c', + 'openssl/crypto/srp/srp_lib.c', + 'openssl/crypto/srp/srp_vfy.c', + 'openssl/crypto/stack/stack.c', + 'openssl/crypto/store/loader_file.c', + 'openssl/crypto/store/store_err.c', + 'openssl/crypto/store/store_init.c', + 'openssl/crypto/store/store_lib.c', + 'openssl/crypto/store/store_register.c', + 'openssl/crypto/store/store_strings.c', + 'openssl/crypto/threads_none.c', + 'openssl/crypto/threads_pthread.c', + 'openssl/crypto/threads_win.c', + 'openssl/crypto/ts/ts_asn1.c', + 'openssl/crypto/ts/ts_conf.c', + 'openssl/crypto/ts/ts_err.c', + 'openssl/crypto/ts/ts_lib.c', + 'openssl/crypto/ts/ts_req_print.c', + 'openssl/crypto/ts/ts_req_utils.c', + 'openssl/crypto/ts/ts_rsp_print.c', + 'openssl/crypto/ts/ts_rsp_sign.c', + 'openssl/crypto/ts/ts_rsp_utils.c', + 'openssl/crypto/ts/ts_rsp_verify.c', + 'openssl/crypto/ts/ts_verify_ctx.c', + 'openssl/crypto/txt_db/txt_db.c', + 'openssl/crypto/ui/ui_err.c', + 'openssl/crypto/ui/ui_lib.c', + 'openssl/crypto/ui/ui_null.c', + 'openssl/crypto/ui/ui_openssl.c', + 'openssl/crypto/ui/ui_util.c', + 'openssl/crypto/uid.c', + 'openssl/crypto/whrlpool/wp_block.c', + 'openssl/crypto/whrlpool/wp_dgst.c', + 'openssl/crypto/x509/by_dir.c', + 'openssl/crypto/x509/by_file.c', + 'openssl/crypto/x509/t_crl.c', + 'openssl/crypto/x509/t_req.c', + 'openssl/crypto/x509/t_x509.c', + 'openssl/crypto/x509/x509_att.c', + 'openssl/crypto/x509/x509_cmp.c', + 'openssl/crypto/x509/x509_d2.c', + 'openssl/crypto/x509/x509_def.c', + 'openssl/crypto/x509/x509_err.c', + 'openssl/crypto/x509/x509_ext.c', + 'openssl/crypto/x509/x509_lu.c', + 'openssl/crypto/x509/x509_meth.c', + 'openssl/crypto/x509/x509_obj.c', + 'openssl/crypto/x509/x509_r2x.c', + 'openssl/crypto/x509/x509_req.c', + 'openssl/crypto/x509/x509_set.c', + 'openssl/crypto/x509/x509_trs.c', + 'openssl/crypto/x509/x509_txt.c', + 'openssl/crypto/x509/x509_v3.c', + 'openssl/crypto/x509/x509_vfy.c', + 'openssl/crypto/x509/x509_vpm.c', + 'openssl/crypto/x509/x509cset.c', + 'openssl/crypto/x509/x509name.c', + 'openssl/crypto/x509/x509rset.c', + 'openssl/crypto/x509/x509spki.c', + 'openssl/crypto/x509/x509type.c', + 'openssl/crypto/x509/x_all.c', + 'openssl/crypto/x509/x_attrib.c', + 'openssl/crypto/x509/x_crl.c', + 'openssl/crypto/x509/x_exten.c', + 'openssl/crypto/x509/x_name.c', + 'openssl/crypto/x509/x_pubkey.c', + 'openssl/crypto/x509/x_req.c', + 'openssl/crypto/x509/x_x509.c', + 'openssl/crypto/x509/x_x509a.c', + 'openssl/crypto/x509v3/pcy_cache.c', + 'openssl/crypto/x509v3/pcy_data.c', + 'openssl/crypto/x509v3/pcy_lib.c', + 'openssl/crypto/x509v3/pcy_map.c', + 'openssl/crypto/x509v3/pcy_node.c', + 'openssl/crypto/x509v3/pcy_tree.c', + 'openssl/crypto/x509v3/v3_addr.c', + 'openssl/crypto/x509v3/v3_admis.c', + 'openssl/crypto/x509v3/v3_akey.c', + 'openssl/crypto/x509v3/v3_akeya.c', + 'openssl/crypto/x509v3/v3_alt.c', + 'openssl/crypto/x509v3/v3_asid.c', + 'openssl/crypto/x509v3/v3_bcons.c', + 'openssl/crypto/x509v3/v3_bitst.c', + 'openssl/crypto/x509v3/v3_conf.c', + 'openssl/crypto/x509v3/v3_cpols.c', + 'openssl/crypto/x509v3/v3_crld.c', + 'openssl/crypto/x509v3/v3_enum.c', + 'openssl/crypto/x509v3/v3_extku.c', + 'openssl/crypto/x509v3/v3_genn.c', + 'openssl/crypto/x509v3/v3_ia5.c', + 'openssl/crypto/x509v3/v3_info.c', + 'openssl/crypto/x509v3/v3_int.c', + 'openssl/crypto/x509v3/v3_lib.c', + 'openssl/crypto/x509v3/v3_ncons.c', + 'openssl/crypto/x509v3/v3_pci.c', + 'openssl/crypto/x509v3/v3_pcia.c', + 'openssl/crypto/x509v3/v3_pcons.c', + 'openssl/crypto/x509v3/v3_pku.c', + 'openssl/crypto/x509v3/v3_pmaps.c', + 'openssl/crypto/x509v3/v3_prn.c', + 'openssl/crypto/x509v3/v3_purp.c', + 'openssl/crypto/x509v3/v3_skey.c', + 'openssl/crypto/x509v3/v3_sxnet.c', + 'openssl/crypto/x509v3/v3_tlsf.c', + 'openssl/crypto/x509v3/v3_utl.c', + 'openssl/crypto/x509v3/v3err.c', + 'openssl/engines/e_capi.c', + 'openssl/engines/e_padlock.c', + ], + 'openssl_sources_darwin64-arm64-cc': [ + './config/archs/darwin64-arm64-cc/asm/crypto/aes/aesv8-armx.S', + './config/archs/darwin64-arm64-cc/asm/crypto/aes/vpaes-armv8.S', + './config/archs/darwin64-arm64-cc/asm/crypto/arm64cpuid.S', + './config/archs/darwin64-arm64-cc/asm/crypto/bn/armv8-mont.S', + './config/archs/darwin64-arm64-cc/asm/crypto/chacha/chacha-armv8.S', + './config/archs/darwin64-arm64-cc/asm/crypto/ec/ecp_nistz256-armv8.S', + './config/archs/darwin64-arm64-cc/asm/crypto/modes/ghashv8-armx.S', + './config/archs/darwin64-arm64-cc/asm/crypto/poly1305/poly1305-armv8.S', + './config/archs/darwin64-arm64-cc/asm/crypto/sha/keccak1600-armv8.S', + './config/archs/darwin64-arm64-cc/asm/crypto/sha/sha1-armv8.S', + './config/archs/darwin64-arm64-cc/asm/crypto/sha/sha256-armv8.S', + './config/archs/darwin64-arm64-cc/asm/crypto/sha/sha512-armv8.S', + ], + 'openssl_defines_darwin64-arm64-cc': [ + 'NDEBUG', + 'L_ENDIAN', + 'OPENSSL_PIC', + 'OPENSSL_CPUID_OBJ', + 'OPENSSL_BN_ASM_MONT', + 'SHA1_ASM', + 'SHA256_ASM', + 'SHA512_ASM', + 'KECCAK1600_ASM', + 'VPAES_ASM', + 'ECP_NISTZ256_ASM', + 'POLY1305_ASM', + ], + 'openssl_cflags_darwin64-arm64-cc': [ + '-Wa,--noexecstack', + '-O3 -Wall', + '-arch arm64', + '-O3 -Wall', + ], + 'openssl_ex_libs_darwin64-arm64-cc': [ + '', + ], + }, + 'include_dirs': [ + '.', + './include', + './crypto', + './crypto/include/internal', + ], + 'defines': ['<@(openssl_defines_darwin64-arm64-cc)'], + 'cflags' : ['<@(openssl_cflags_darwin64-arm64-cc)'], + 'libraries': ['<@(openssl_ex_libs_darwin64-arm64-cc)'], + 'sources': ['<@(openssl_sources)', '<@(openssl_sources_darwin64-arm64-cc)'], +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/configdata.pm 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,15415 @@ +#! /usr/bin/env perl + +package configdata; + +use strict; +use warnings; + +use Exporter; +#use vars qw(@ISA @EXPORT); +our @ISA = qw(Exporter); +our @EXPORT = qw(%config %target %disabled %withargs %unified_info @disablables); + +our %config = ( + AR => "ar", + ARFLAGS => [ "r" ], + CC => "../config/fake_gcc.pl", + CFLAGS => [ "-O3 -Wall" ], + CPPDEFINES => [ ], + CPPFLAGS => [ ], + CPPINCLUDES => [ ], + CXXFLAGS => [ ], + HASHBANGPERL => "/usr/bin/env perl", + LDFLAGS => [ ], + LDLIBS => [ ], + PERL => "/usr/bin/perl", + RANLIB => "ranlib -c", + RC => "windres", + RCFLAGS => [ ], + b32 => "0", + b64 => "0", + b64l => "1", + bn_ll => "0", + build_file => "Makefile", + build_file_templates => [ "Configurations/common0.tmpl", "Configurations/unix-Makefile.tmpl", "Configurations/common.tmpl" ], + build_infos => [ "./build.info", "crypto/build.info", "ssl/build.info", "engines/build.info", "apps/build.info", "test/build.info", "util/build.info", "tools/build.info", "fuzz/build.info", "crypto/objects/build.info", "crypto/md4/build.info", "crypto/md5/build.info", "crypto/sha/build.info", "crypto/mdc2/build.info", "crypto/hmac/build.info", "crypto/ripemd/build.info", "crypto/whrlpool/build.info", "crypto/poly1305/build.info", "crypto/blake2/build.info", "crypto/siphash/build.info", "crypto/sm3/build.info", "crypto/des/build.info", "crypto/aes/build.info", "crypto/rc2/build.info", "crypto/rc4/build.info", "crypto/idea/build.info", "crypto/aria/build.info", "crypto/bf/build.info", "crypto/cast/build.info", "crypto/camellia/build.info", "crypto/seed/build.info", "crypto/sm4/build.info", "crypto/chacha/build.info", "crypto/modes/build.info", "crypto/bn/build.info", "crypto/ec/build.info", "crypto/rsa/build.info", "crypto/dsa/build.info", "crypto/dh/build.info", "crypto/sm2/build.info", "crypto/dso/build.info", "crypto/engine/build.info", "crypto/buffer/build.info", "crypto/bio/build.info", "crypto/stack/build.info", "crypto/lhash/build.info", "crypto/rand/build.info", "crypto/err/build.info", "crypto/evp/build.info", "crypto/asn1/build.info", "crypto/pem/build.info", "crypto/x509/build.info", "crypto/x509v3/build.info", "crypto/conf/build.info", "crypto/txt_db/build.info", "crypto/pkcs7/build.info", "crypto/pkcs12/build.info", "crypto/ocsp/build.info", "crypto/ui/build.info", "crypto/cms/build.info", "crypto/ts/build.info", "crypto/srp/build.info", "crypto/cmac/build.info", "crypto/ct/build.info", "crypto/async/build.info", "crypto/kdf/build.info", "crypto/store/build.info", "test/ossl_shim/build.info" ], + build_type => "release", + builddir => ".", + cflags => [ "-Wa,--noexecstack" ], + conf_files => [ "Configurations/00-base-templates.conf", "Configurations/10-main.conf" ], + cppflags => [ ], + cxxflags => [ ], + defines => [ "NDEBUG" ], + dirs => [ "crypto", "ssl", "engines", "apps", "test", "util", "tools", "fuzz" ], + dynamic_engines => "0", + engdirs => [ ], + ex_libs => [ ], + export_var_as_fn => "0", + includes => [ ], + lflags => [ ], + lib_defines => [ "OPENSSL_PIC", "OPENSSL_CPUID_OBJ", "OPENSSL_BN_ASM_MONT", "SHA1_ASM", "SHA256_ASM", "SHA512_ASM", "KECCAK1600_ASM", "VPAES_ASM", "ECP_NISTZ256_ASM", "POLY1305_ASM" ], + libdir => "", + major => "1", + makedepprog => "\$(CROSS_COMPILE)../config/fake_gcc.pl", + minor => "1.1", + openssl_algorithm_defines => [ "OPENSSL_NO_COMP", "OPENSSL_NO_MD2", "OPENSSL_NO_RC5" ], + openssl_api_defines => [ ], + openssl_other_defines => [ "OPENSSL_RAND_SEED_OS", "OPENSSL_NO_AFALGENG", "OPENSSL_NO_ASAN", "OPENSSL_NO_CRYPTO_MDEBUG", "OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE", "OPENSSL_NO_DEVCRYPTOENG", "OPENSSL_NO_EC_NISTP_64_GCC_128", "OPENSSL_NO_EGD", "OPENSSL_NO_EXTERNAL_TESTS", "OPENSSL_NO_FUZZ_AFL", "OPENSSL_NO_FUZZ_LIBFUZZER", "OPENSSL_NO_HEARTBEATS", "OPENSSL_NO_MSAN", "OPENSSL_NO_SCTP", "OPENSSL_NO_SSL3", "OPENSSL_NO_SSL3_METHOD", "OPENSSL_NO_UBSAN", "OPENSSL_NO_UNIT_TEST", "OPENSSL_NO_WEAK_SSL_CIPHERS", "OPENSSL_NO_DYNAMIC_ENGINE" ], + openssl_sys_defines => [ "OPENSSL_SYS_MACOSX" ], + openssl_thread_defines => [ "OPENSSL_THREADS" ], + openssldir => "", + options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", + perl_archname => "x86_64-linux-gnu-thread-multi", + perl_cmd => "/usr/bin/perl", + perl_version => "5.30.0", + perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "darwin64-arm64-cc" ], + perlenv => { + "AR" => undef, + "ARFLAGS" => undef, + "AS" => undef, + "ASFLAGS" => undef, + "BUILDFILE" => undef, + "CC" => "../config/fake_gcc.pl", + "CFLAGS" => undef, + "CPP" => undef, + "CPPDEFINES" => undef, + "CPPFLAGS" => undef, + "CPPINCLUDES" => undef, + "CROSS_COMPILE" => undef, + "CXX" => undef, + "CXXFLAGS" => undef, + "HASHBANGPERL" => undef, + "LD" => undef, + "LDFLAGS" => undef, + "LDLIBS" => undef, + "MT" => undef, + "MTFLAGS" => undef, + "OPENSSL_LOCAL_CONFIG_DIR" => undef, + "PERL" => undef, + "RANLIB" => undef, + "RC" => undef, + "RCFLAGS" => undef, + "RM" => undef, + "WINDRES" => undef, + "__CNF_CFLAGS" => undef, + "__CNF_CPPDEFINES" => undef, + "__CNF_CPPFLAGS" => undef, + "__CNF_CPPINCLUDES" => undef, + "__CNF_CXXFLAGS" => undef, + "__CNF_LDFLAGS" => undef, + "__CNF_LDLIBS" => undef, + }, + prefix => "", + processor => "", + rc4_int => "unsigned int", + sdirs => [ "objects", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305", "blake2", "siphash", "sm3", "des", "aes", "rc2", "rc4", "idea", "aria", "bf", "cast", "camellia", "seed", "sm4", "chacha", "modes", "bn", "ec", "rsa", "dsa", "dh", "sm2", "dso", "engine", "buffer", "bio", "stack", "lhash", "rand", "err", "evp", "asn1", "pem", "x509", "x509v3", "conf", "txt_db", "pkcs7", "pkcs12", "ocsp", "ui", "cms", "ts", "srp", "cmac", "ct", "async", "kdf", "store" ], + shlib_major => "1", + shlib_minor => "1", + shlib_version_history => "", + shlib_version_number => "1.1", + sourcedir => ".", + target => "darwin64-arm64-cc", + tdirs => [ "ossl_shim" ], + version => "1.1.1n", + version_num => "0x101010efL", +); + +our %target = ( + AR => "ar", + ARFLAGS => "r", + CC => "cc", + CFLAGS => "-O3 -Wall", + HASHBANGPERL => "/usr/bin/env perl", + RANLIB => "ranlib -c", + RC => "windres", + _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], + aes_asm_src => "aes_core.c aes_cbc.c aesv8-armx.S vpaes-armv8.S", + aes_obj => "aes_core.o aes_cbc.o aesv8-armx.o vpaes-armv8.o", + apps_aux_src => "", + apps_init_src => "", + apps_obj => "", + bf_asm_src => "bf_enc.c", + bf_obj => "bf_enc.o", + bn_asm_src => "bn_asm.c armv8-mont.S", + bn_obj => "bn_asm.o armv8-mont.o", + bn_ops => "SIXTY_FOUR_BIT_LONG", + build_file => "Makefile", + build_scheme => [ "unified", "unix" ], + cast_asm_src => "c_enc.c", + cast_obj => "c_enc.o", + cflags => "-arch arm64", + chacha_asm_src => "chacha-armv8.S", + chacha_obj => "chacha-armv8.o", + cmll_asm_src => "camellia.c cmll_misc.c cmll_cbc.c", + cmll_obj => "camellia.o cmll_misc.o cmll_cbc.o", + cppflags => "-D_REENTRANT", + cpuid_asm_src => "armcap.c arm64cpuid.S", + cpuid_obj => "armcap.o arm64cpuid.o", + defines => [ ], + des_asm_src => "des_enc.c fcrypt_b.c", + des_obj => "des_enc.o fcrypt_b.o", + disable => [ ], + dso_extension => ".dylib", + dso_scheme => "dlfcn", + ec_asm_src => "ecp_nistz256.c ecp_nistz256-armv8.S", + ec_obj => "ecp_nistz256.o ecp_nistz256-armv8.o", + enable => [ ], + exe_extension => "", + includes => [ ], + keccak1600_asm_src => "keccak1600-armv8.S", + keccak1600_obj => "keccak1600-armv8.o", + lflags => "-Wl,-search_paths_first", + lib_cflags => "", + lib_cppflags => "-DL_ENDIAN", + lib_defines => [ ], + md5_asm_src => "", + md5_obj => "", + modes_asm_src => "ghashv8-armx.S", + modes_obj => "ghashv8-armx.o", + module_cflags => "-fPIC", + module_cxxflags => "", + module_ldflags => "-bundle", + padlock_asm_src => "", + padlock_obj => "", + perlasm_scheme => "ios64", + poly1305_asm_src => "poly1305-armv8.S", + poly1305_obj => "poly1305-armv8.o", + rc4_asm_src => "rc4_enc.c rc4_skey.c", + rc4_obj => "rc4_enc.o rc4_skey.o", + rc5_asm_src => "rc5_enc.c", + rc5_obj => "rc5_enc.o", + rmd160_asm_src => "", + rmd160_obj => "", + sha1_asm_src => "sha1-armv8.S sha256-armv8.S sha512-armv8.S", + sha1_obj => "sha1-armv8.o sha256-armv8.o sha512-armv8.o", + shared_cflag => "-fPIC", + shared_defines => [ ], + shared_extension => ".\$(SHLIB_VERSION_NUMBER).dylib", + shared_extension_simple => ".dylib", + shared_ldflag => "-dynamiclib -current_version \$(SHLIB_VERSION_NUMBER) -compatibility_version \$(SHLIB_VERSION_NUMBER)", + shared_rcflag => "", + shared_sonameflag => "-install_name \$(INSTALLTOP)/\$(LIBDIR)/", + shared_target => "darwin-shared", + sys_id => "MACOSX", + template => "1", + thread_defines => [ ], + thread_scheme => "pthreads", + unistd => "", + uplink_aux_src => "", + uplink_obj => "", + wp_asm_src => "wp_block.c", + wp_obj => "wp_block.o", +); + +our %available_protocols = ( + tls => [ "ssl3", "tls1", "tls1_1", "tls1_2", "tls1_3" ], + dtls => [ "dtls1", "dtls1_2" ], +); + +our @disablables = ( + "afalgeng", + "aria", + "asan", + "asm", + "async", + "autoalginit", + "autoerrinit", + "autoload-config", + "bf", + "blake2", + "buildtest-c\\+\\+", + "camellia", + "capieng", + "cast", + "chacha", + "cmac", + "cms", + "comp", + "crypto-mdebug", + "crypto-mdebug-backtrace", + "ct", + "deprecated", + "des", + "devcryptoeng", + "dgram", + "dh", + "dsa", + "dso", + "dtls", + "dynamic-engine", + "ec", + "ec2m", + "ecdh", + "ecdsa", + "ec_nistp_64_gcc_128", + "egd", + "engine", + "err", + "external-tests", + "filenames", + "fuzz-libfuzzer", + "fuzz-afl", + "gost", + "heartbeats", + "hw(-.+)?", + "idea", + "makedepend", + "md2", + "md4", + "mdc2", + "msan", + "multiblock", + "nextprotoneg", + "pinshared", + "ocb", + "ocsp", + "pic", + "poly1305", + "posix-io", + "psk", + "rc2", + "rc4", + "rc5", + "rdrand", + "rfc3779", + "rmd160", + "scrypt", + "sctp", + "seed", + "shared", + "siphash", + "sm2", + "sm3", + "sm4", + "sock", + "srp", + "srtp", + "sse2", + "ssl", + "ssl-trace", + "static-engine", + "stdio", + "tests", + "threads", + "tls", + "ts", + "ubsan", + "ui-console", + "unit-test", + "whirlpool", + "weak-ssl-ciphers", + "zlib", + "zlib-dynamic", + "ssl3", + "ssl3-method", + "tls1", + "tls1-method", + "tls1_1", + "tls1_1-method", + "tls1_2", + "tls1_2-method", + "tls1_3", + "dtls1", + "dtls1-method", + "dtls1_2", + "dtls1_2-method", +); + +our %disabled = ( + "afalgeng" => "option", + "asan" => "default", + "buildtest-c++" => "default", + "comp" => "option", + "crypto-mdebug" => "default", + "crypto-mdebug-backtrace" => "default", + "devcryptoeng" => "default", + "dynamic-engine" => "cascade", + "ec_nistp_64_gcc_128" => "default", + "egd" => "default", + "external-tests" => "default", + "fuzz-afl" => "default", + "fuzz-libfuzzer" => "default", + "heartbeats" => "default", + "md2" => "default", + "msan" => "default", + "rc5" => "default", + "sctp" => "default", + "shared" => "option", + "ssl3" => "default", + "ssl3-method" => "default", + "ubsan" => "default", + "unit-test" => "default", + "weak-ssl-ciphers" => "default", + "zlib" => "default", + "zlib-dynamic" => "default", +); + +our %withargs = ( +); + +our %unified_info = ( + "depends" => + { + "" => + [ + "include/crypto/bn_conf.h", + "include/crypto/dso_conf.h", + "include/openssl/opensslconf.h", + ], + "apps/asn1pars.o" => + [ + "apps/progs.h", + ], + "apps/ca.o" => + [ + "apps/progs.h", + ], + "apps/ciphers.o" => + [ + "apps/progs.h", + ], + "apps/cms.o" => + [ + "apps/progs.h", + ], + "apps/crl.o" => + [ + "apps/progs.h", + ], + "apps/crl2p7.o" => + [ + "apps/progs.h", + ], + "apps/dgst.o" => + [ + "apps/progs.h", + ], + "apps/dhparam.o" => + [ + "apps/progs.h", + ], + "apps/dsa.o" => + [ + "apps/progs.h", + ], + "apps/dsaparam.o" => + [ + "apps/progs.h", + ], + "apps/ec.o" => + [ + "apps/progs.h", + ], + "apps/ecparam.o" => + [ + "apps/progs.h", + ], + "apps/enc.o" => + [ + "apps/progs.h", + ], + "apps/engine.o" => + [ + "apps/progs.h", + ], + "apps/errstr.o" => + [ + "apps/progs.h", + ], + "apps/gendsa.o" => + [ + "apps/progs.h", + ], + "apps/genpkey.o" => + [ + "apps/progs.h", + ], + "apps/genrsa.o" => + [ + "apps/progs.h", + ], + "apps/nseq.o" => + [ + "apps/progs.h", + ], + "apps/ocsp.o" => + [ + "apps/progs.h", + ], + "apps/openssl" => + [ + "apps/libapps.a", + "libssl", + ], + "apps/openssl.o" => + [ + "apps/progs.h", + ], + "apps/passwd.o" => + [ + "apps/progs.h", + ], + "apps/pkcs12.o" => + [ + "apps/progs.h", + ], + "apps/pkcs7.o" => + [ + "apps/progs.h", + ], + "apps/pkcs8.o" => + [ + "apps/progs.h", + ], + "apps/pkey.o" => + [ + "apps/progs.h", + ], + "apps/pkeyparam.o" => + [ + "apps/progs.h", + ], + "apps/pkeyutl.o" => + [ + "apps/progs.h", + ], + "apps/prime.o" => + [ + "apps/progs.h", + ], + "apps/progs.h" => + [ + "configdata.pm", + ], + "apps/rand.o" => + [ + "apps/progs.h", + ], + "apps/rehash.o" => + [ + "apps/progs.h", + ], + "apps/req.o" => + [ + "apps/progs.h", + ], + "apps/rsa.o" => + [ + "apps/progs.h", + ], + "apps/rsautl.o" => + [ + "apps/progs.h", + ], + "apps/s_client.o" => + [ + "apps/progs.h", + ], + "apps/s_server.o" => + [ + "apps/progs.h", + ], + "apps/s_time.o" => + [ + "apps/progs.h", + ], + "apps/sess_id.o" => + [ + "apps/progs.h", + ], + "apps/smime.o" => + [ + "apps/progs.h", + ], + "apps/speed.o" => + [ + "apps/progs.h", + ], + "apps/spkac.o" => + [ + "apps/progs.h", + ], + "apps/srp.o" => + [ + "apps/progs.h", + ], + "apps/storeutl.o" => + [ + "apps/progs.h", + ], + "apps/ts.o" => + [ + "apps/progs.h", + ], + "apps/verify.o" => + [ + "apps/progs.h", + ], + "apps/version.o" => + [ + "apps/progs.h", + ], + "apps/x509.o" => + [ + "apps/progs.h", + ], + "crypto/aes/aes-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/aes/aesni-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/aes/aest4-sparcv9.S" => + [ + "crypto/perlasm/sparcv9_modes.pl", + ], + "crypto/aes/vpaes-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bf/bf-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/bn-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/co-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/x86-gf2m.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/x86-mont.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/buildinf.h" => + [ + "configdata.pm", + ], + "crypto/camellia/cmll-x86.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/camellia/cmllt4-sparcv9.S" => + [ + "crypto/perlasm/sparcv9_modes.pl", + ], + "crypto/cast/cast-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/cversion.o" => + [ + "crypto/buildinf.h", + ], + "crypto/des/crypt586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/des/des-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/rc4/rc4-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/ripemd/rmd-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha1-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha256-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha512-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/whrlpool/wp-mmx.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/x86cpuid.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "fuzz/asn1-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/asn1parse-test" => + [ + "libcrypto", + ], + "fuzz/bignum-test" => + [ + "libcrypto", + ], + "fuzz/bndiv-test" => + [ + "libcrypto", + ], + "fuzz/client-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/cms-test" => + [ + "libcrypto", + ], + "fuzz/conf-test" => + [ + "libcrypto", + ], + "fuzz/crl-test" => + [ + "libcrypto", + ], + "fuzz/ct-test" => + [ + "libcrypto", + ], + "fuzz/server-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/x509-test" => + [ + "libcrypto", + ], + "include/crypto/bn_conf.h" => + [ + "configdata.pm", + ], + "include/crypto/dso_conf.h" => + [ + "configdata.pm", + ], + "include/openssl/opensslconf.h" => + [ + "configdata.pm", + ], + "libssl" => + [ + "libcrypto", + ], + "test/aborttest" => + [ + "libcrypto", + ], + "test/afalgtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_decode_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_encode_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/asn1_string_table_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asynciotest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/asynctest" => + [ + "libcrypto", + ], + "test/bad_dtls_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/bftest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_callback_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_enc_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_memleak_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bioprinttest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bntest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/buildtest_c_aes" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_asn1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_asn1t" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_async" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_bio" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_blowfish" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_bn" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_buffer" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_camellia" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cast" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cmac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cms" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_conf" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_conf_api" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_crypto" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ct" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_des" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dh" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dtls1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_e_os2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ebcdic" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ec" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ecdh" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ecdsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_engine" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_evp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_hmac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_idea" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_kdf" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_lhash" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_md4" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_md5" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_mdc2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_modes" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_obj_mac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_objects" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ocsp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_opensslv" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ossl_typ" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pem" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pem2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pkcs12" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pkcs7" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rand" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rand_drbg" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rc2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rc4" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ripemd" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_safestack" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_seed" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_sha" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_srp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_srtp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ssl" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ssl2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_stack" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_store" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_symhacks" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_tls1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ts" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_txt_db" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ui" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_whrlpool" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509_vfy" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509v3" => + [ + "libcrypto", + "libssl", + ], + "test/casttest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/chacha_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/cipher_overhead_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cipherbytes_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cipherlist_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ciphername_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/clienthellotest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/cmsapitest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/conf_include_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/constant_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/crltest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ct_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ctype_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/curve448_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/d2i_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/danetest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/destest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dhtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/drbg_cavs_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/drbgtest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/dsa_no_digest_size_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dsatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dtls_mtu_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/dtlstest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/dtlsv1listentest" => + [ + "libssl", + "test/libtestutil.a", + ], + "test/ec_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/ecdsatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ecstresstest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ectest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/enginetest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/errtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/evp_extra_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/evp_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/exdatatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/exptest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/fatalerrtest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/gmdifftest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/gosttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/hmactest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ideatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/igetest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/lhash_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/libtestutil.a" => + [ + "libcrypto", + ], + "test/md2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/mdc2_internal_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/mdc2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/memleaktest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/modes_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/ocspapitest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/packettest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pbelutest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pemtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pkey_meth_kdf_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pkey_meth_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/poly1305_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/rc2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rc4test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rc5test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rdrand_sanitytest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/recordlentest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/rsa_mp_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rsa_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/sanitytest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/secmemtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/servername_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/siphash_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/sm2_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/sm4_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/srptest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ssl_cert_table_internal_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ssl_ctx_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssl_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssl_test_ctx_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslapitest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslbuffertest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslcorrupttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssltest_old" => + [ + "libcrypto", + "libssl", + ], + "test/stack_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/sysdefaulttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/test_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/threadstest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/time_offset_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/tls13ccstest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/tls13encryptiontest" => + [ + "libcrypto", + "libssl.a", + "test/libtestutil.a", + ], + "test/uitest" => + [ + "apps/libapps.a", + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/v3ext" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/v3nametest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/verify_extra_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/versions" => + [ + "libcrypto", + ], + "test/wpackettest" => + [ + "libcrypto", + "libssl.a", + "test/libtestutil.a", + ], + "test/x509_check_cert_pkey_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509_dup_cert_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/x509_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509aux" => + [ + "libcrypto", + "test/libtestutil.a", + ], + }, + "dirinfo" => + { + "apps" => + { + "products" => + { + "bin" => + [ + "apps/openssl", + ], + "lib" => + [ + "apps/libapps.a", + ], + "script" => + [ + "apps/CA.pl", + "apps/tsget.pl", + ], + }, + }, + "crypto" => + { + "deps" => + [ + "crypto/arm64cpuid.o", + "crypto/armcap.o", + "crypto/cpt_err.o", + "crypto/cryptlib.o", + "crypto/ctype.o", + "crypto/cversion.o", + "crypto/ebcdic.o", + "crypto/ex_data.o", + "crypto/getenv.o", + "crypto/init.o", + "crypto/mem.o", + "crypto/mem_dbg.o", + "crypto/mem_sec.o", + "crypto/o_dir.o", + "crypto/o_fips.o", + "crypto/o_fopen.o", + "crypto/o_init.o", + "crypto/o_str.o", + "crypto/o_time.o", + "crypto/threads_none.o", + "crypto/threads_pthread.o", + "crypto/threads_win.o", + "crypto/uid.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/aes" => + { + "deps" => + [ + "crypto/aes/aes_cbc.o", + "crypto/aes/aes_cfb.o", + "crypto/aes/aes_core.o", + "crypto/aes/aes_ecb.o", + "crypto/aes/aes_ige.o", + "crypto/aes/aes_misc.o", + "crypto/aes/aes_ofb.o", + "crypto/aes/aes_wrap.o", + "crypto/aes/aesv8-armx.o", + "crypto/aes/vpaes-armv8.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/aria" => + { + "deps" => + [ + "crypto/aria/aria.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/asn1" => + { + "deps" => + [ + "crypto/asn1/a_bitstr.o", + "crypto/asn1/a_d2i_fp.o", + "crypto/asn1/a_digest.o", + "crypto/asn1/a_dup.o", + "crypto/asn1/a_gentm.o", + "crypto/asn1/a_i2d_fp.o", + "crypto/asn1/a_int.o", + "crypto/asn1/a_mbstr.o", + "crypto/asn1/a_object.o", + "crypto/asn1/a_octet.o", + "crypto/asn1/a_print.o", + "crypto/asn1/a_sign.o", + "crypto/asn1/a_strex.o", + "crypto/asn1/a_strnid.o", + "crypto/asn1/a_time.o", + "crypto/asn1/a_type.o", + "crypto/asn1/a_utctm.o", + "crypto/asn1/a_utf8.o", + "crypto/asn1/a_verify.o", + "crypto/asn1/ameth_lib.o", + "crypto/asn1/asn1_err.o", + "crypto/asn1/asn1_gen.o", + "crypto/asn1/asn1_item_list.o", + "crypto/asn1/asn1_lib.o", + "crypto/asn1/asn1_par.o", + "crypto/asn1/asn_mime.o", + "crypto/asn1/asn_moid.o", + "crypto/asn1/asn_mstbl.o", + "crypto/asn1/asn_pack.o", + "crypto/asn1/bio_asn1.o", + "crypto/asn1/bio_ndef.o", + "crypto/asn1/d2i_pr.o", + "crypto/asn1/d2i_pu.o", + "crypto/asn1/evp_asn1.o", + "crypto/asn1/f_int.o", + "crypto/asn1/f_string.o", + "crypto/asn1/i2d_pr.o", + "crypto/asn1/i2d_pu.o", + "crypto/asn1/n_pkey.o", + "crypto/asn1/nsseq.o", + "crypto/asn1/p5_pbe.o", + "crypto/asn1/p5_pbev2.o", + "crypto/asn1/p5_scrypt.o", + "crypto/asn1/p8_pkey.o", + "crypto/asn1/t_bitst.o", + "crypto/asn1/t_pkey.o", + "crypto/asn1/t_spki.o", + "crypto/asn1/tasn_dec.o", + "crypto/asn1/tasn_enc.o", + "crypto/asn1/tasn_fre.o", + "crypto/asn1/tasn_new.o", + "crypto/asn1/tasn_prn.o", + "crypto/asn1/tasn_scn.o", + "crypto/asn1/tasn_typ.o", + "crypto/asn1/tasn_utl.o", + "crypto/asn1/x_algor.o", + "crypto/asn1/x_bignum.o", + "crypto/asn1/x_info.o", + "crypto/asn1/x_int64.o", + "crypto/asn1/x_long.o", + "crypto/asn1/x_pkey.o", + "crypto/asn1/x_sig.o", + "crypto/asn1/x_spki.o", + "crypto/asn1/x_val.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/async" => + { + "deps" => + [ + "crypto/async/async.o", + "crypto/async/async_err.o", + "crypto/async/async_wait.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/async/arch" => + { + "deps" => + [ + "crypto/async/arch/async_null.o", + "crypto/async/arch/async_posix.o", + "crypto/async/arch/async_win.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bf" => + { + "deps" => + [ + "crypto/bf/bf_cfb64.o", + "crypto/bf/bf_ecb.o", + "crypto/bf/bf_enc.o", + "crypto/bf/bf_ofb64.o", + "crypto/bf/bf_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bio" => + { + "deps" => + [ + "crypto/bio/b_addr.o", + "crypto/bio/b_dump.o", + "crypto/bio/b_print.o", + "crypto/bio/b_sock.o", + "crypto/bio/b_sock2.o", + "crypto/bio/bf_buff.o", + "crypto/bio/bf_lbuf.o", + "crypto/bio/bf_nbio.o", + "crypto/bio/bf_null.o", + "crypto/bio/bio_cb.o", + "crypto/bio/bio_err.o", + "crypto/bio/bio_lib.o", + "crypto/bio/bio_meth.o", + "crypto/bio/bss_acpt.o", + "crypto/bio/bss_bio.o", + "crypto/bio/bss_conn.o", + "crypto/bio/bss_dgram.o", + "crypto/bio/bss_fd.o", + "crypto/bio/bss_file.o", + "crypto/bio/bss_log.o", + "crypto/bio/bss_mem.o", + "crypto/bio/bss_null.o", + "crypto/bio/bss_sock.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/blake2" => + { + "deps" => + [ + "crypto/blake2/blake2b.o", + "crypto/blake2/blake2s.o", + "crypto/blake2/m_blake2b.o", + "crypto/blake2/m_blake2s.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bn" => + { + "deps" => + [ + "crypto/bn/armv8-mont.o", + "crypto/bn/bn_add.o", + "crypto/bn/bn_asm.o", + "crypto/bn/bn_blind.o", + "crypto/bn/bn_const.o", + "crypto/bn/bn_ctx.o", + "crypto/bn/bn_depr.o", + "crypto/bn/bn_dh.o", + "crypto/bn/bn_div.o", + "crypto/bn/bn_err.o", + "crypto/bn/bn_exp.o", + "crypto/bn/bn_exp2.o", + "crypto/bn/bn_gcd.o", + "crypto/bn/bn_gf2m.o", + "crypto/bn/bn_intern.o", + "crypto/bn/bn_kron.o", + "crypto/bn/bn_lib.o", + "crypto/bn/bn_mod.o", + "crypto/bn/bn_mont.o", + "crypto/bn/bn_mpi.o", + "crypto/bn/bn_mul.o", + "crypto/bn/bn_nist.o", + "crypto/bn/bn_prime.o", + "crypto/bn/bn_print.o", + "crypto/bn/bn_rand.o", + "crypto/bn/bn_recp.o", + "crypto/bn/bn_shift.o", + "crypto/bn/bn_sqr.o", + "crypto/bn/bn_sqrt.o", + "crypto/bn/bn_srp.o", + "crypto/bn/bn_word.o", + "crypto/bn/bn_x931p.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/buffer" => + { + "deps" => + [ + "crypto/buffer/buf_err.o", + "crypto/buffer/buffer.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/camellia" => + { + "deps" => + [ + "crypto/camellia/camellia.o", + "crypto/camellia/cmll_cbc.o", + "crypto/camellia/cmll_cfb.o", + "crypto/camellia/cmll_ctr.o", + "crypto/camellia/cmll_ecb.o", + "crypto/camellia/cmll_misc.o", + "crypto/camellia/cmll_ofb.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cast" => + { + "deps" => + [ + "crypto/cast/c_cfb64.o", + "crypto/cast/c_ecb.o", + "crypto/cast/c_enc.o", + "crypto/cast/c_ofb64.o", + "crypto/cast/c_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/chacha" => + { + "deps" => + [ + "crypto/chacha/chacha-armv8.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cmac" => + { + "deps" => + [ + "crypto/cmac/cm_ameth.o", + "crypto/cmac/cm_pmeth.o", + "crypto/cmac/cmac.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cms" => + { + "deps" => + [ + "crypto/cms/cms_asn1.o", + "crypto/cms/cms_att.o", + "crypto/cms/cms_cd.o", + "crypto/cms/cms_dd.o", + "crypto/cms/cms_enc.o", + "crypto/cms/cms_env.o", + "crypto/cms/cms_err.o", + "crypto/cms/cms_ess.o", + "crypto/cms/cms_io.o", + "crypto/cms/cms_kari.o", + "crypto/cms/cms_lib.o", + "crypto/cms/cms_pwri.o", + "crypto/cms/cms_sd.o", + "crypto/cms/cms_smime.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/conf" => + { + "deps" => + [ + "crypto/conf/conf_api.o", + "crypto/conf/conf_def.o", + "crypto/conf/conf_err.o", + "crypto/conf/conf_lib.o", + "crypto/conf/conf_mall.o", + "crypto/conf/conf_mod.o", + "crypto/conf/conf_sap.o", + "crypto/conf/conf_ssl.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ct" => + { + "deps" => + [ + "crypto/ct/ct_b64.o", + "crypto/ct/ct_err.o", + "crypto/ct/ct_log.o", + "crypto/ct/ct_oct.o", + "crypto/ct/ct_policy.o", + "crypto/ct/ct_prn.o", + "crypto/ct/ct_sct.o", + "crypto/ct/ct_sct_ctx.o", + "crypto/ct/ct_vfy.o", + "crypto/ct/ct_x509v3.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/des" => + { + "deps" => + [ + "crypto/des/cbc_cksm.o", + "crypto/des/cbc_enc.o", + "crypto/des/cfb64ede.o", + "crypto/des/cfb64enc.o", + "crypto/des/cfb_enc.o", + "crypto/des/des_enc.o", + "crypto/des/ecb3_enc.o", + "crypto/des/ecb_enc.o", + "crypto/des/fcrypt.o", + "crypto/des/fcrypt_b.o", + "crypto/des/ofb64ede.o", + "crypto/des/ofb64enc.o", + "crypto/des/ofb_enc.o", + "crypto/des/pcbc_enc.o", + "crypto/des/qud_cksm.o", + "crypto/des/rand_key.o", + "crypto/des/set_key.o", + "crypto/des/str2key.o", + "crypto/des/xcbc_enc.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dh" => + { + "deps" => + [ + "crypto/dh/dh_ameth.o", + "crypto/dh/dh_asn1.o", + "crypto/dh/dh_check.o", + "crypto/dh/dh_depr.o", + "crypto/dh/dh_err.o", + "crypto/dh/dh_gen.o", + "crypto/dh/dh_kdf.o", + "crypto/dh/dh_key.o", + "crypto/dh/dh_lib.o", + "crypto/dh/dh_meth.o", + "crypto/dh/dh_pmeth.o", + "crypto/dh/dh_prn.o", + "crypto/dh/dh_rfc5114.o", + "crypto/dh/dh_rfc7919.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dsa" => + { + "deps" => + [ + "crypto/dsa/dsa_ameth.o", + "crypto/dsa/dsa_asn1.o", + "crypto/dsa/dsa_depr.o", + "crypto/dsa/dsa_err.o", + "crypto/dsa/dsa_gen.o", + "crypto/dsa/dsa_key.o", + "crypto/dsa/dsa_lib.o", + "crypto/dsa/dsa_meth.o", + "crypto/dsa/dsa_ossl.o", + "crypto/dsa/dsa_pmeth.o", + "crypto/dsa/dsa_prn.o", + "crypto/dsa/dsa_sign.o", + "crypto/dsa/dsa_vrf.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dso" => + { + "deps" => + [ + "crypto/dso/dso_dl.o", + "crypto/dso/dso_dlfcn.o", + "crypto/dso/dso_err.o", + "crypto/dso/dso_lib.o", + "crypto/dso/dso_openssl.o", + "crypto/dso/dso_vms.o", + "crypto/dso/dso_win32.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec" => + { + "deps" => + [ + "crypto/ec/curve25519.o", + "crypto/ec/ec2_oct.o", + "crypto/ec/ec2_smpl.o", + "crypto/ec/ec_ameth.o", + "crypto/ec/ec_asn1.o", + "crypto/ec/ec_check.o", + "crypto/ec/ec_curve.o", + "crypto/ec/ec_cvt.o", + "crypto/ec/ec_err.o", + "crypto/ec/ec_key.o", + "crypto/ec/ec_kmeth.o", + "crypto/ec/ec_lib.o", + "crypto/ec/ec_mult.o", + "crypto/ec/ec_oct.o", + "crypto/ec/ec_pmeth.o", + "crypto/ec/ec_print.o", + "crypto/ec/ecdh_kdf.o", + "crypto/ec/ecdh_ossl.o", + "crypto/ec/ecdsa_ossl.o", + "crypto/ec/ecdsa_sign.o", + "crypto/ec/ecdsa_vrf.o", + "crypto/ec/eck_prn.o", + "crypto/ec/ecp_mont.o", + "crypto/ec/ecp_nist.o", + "crypto/ec/ecp_nistp224.o", + "crypto/ec/ecp_nistp256.o", + "crypto/ec/ecp_nistp521.o", + "crypto/ec/ecp_nistputil.o", + "crypto/ec/ecp_nistz256-armv8.o", + "crypto/ec/ecp_nistz256.o", + "crypto/ec/ecp_oct.o", + "crypto/ec/ecp_smpl.o", + "crypto/ec/ecx_meth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec/curve448" => + { + "deps" => + [ + "crypto/ec/curve448/curve448.o", + "crypto/ec/curve448/curve448_tables.o", + "crypto/ec/curve448/eddsa.o", + "crypto/ec/curve448/f_generic.o", + "crypto/ec/curve448/scalar.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec/curve448/arch_32" => + { + "deps" => + [ + "crypto/ec/curve448/arch_32/f_impl.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/engine" => + { + "deps" => + [ + "crypto/engine/eng_all.o", + "crypto/engine/eng_cnf.o", + "crypto/engine/eng_ctrl.o", + "crypto/engine/eng_dyn.o", + "crypto/engine/eng_err.o", + "crypto/engine/eng_fat.o", + "crypto/engine/eng_init.o", + "crypto/engine/eng_lib.o", + "crypto/engine/eng_list.o", + "crypto/engine/eng_openssl.o", + "crypto/engine/eng_pkey.o", + "crypto/engine/eng_rdrand.o", + "crypto/engine/eng_table.o", + "crypto/engine/tb_asnmth.o", + "crypto/engine/tb_cipher.o", + "crypto/engine/tb_dh.o", + "crypto/engine/tb_digest.o", + "crypto/engine/tb_dsa.o", + "crypto/engine/tb_eckey.o", + "crypto/engine/tb_pkmeth.o", + "crypto/engine/tb_rand.o", + "crypto/engine/tb_rsa.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/err" => + { + "deps" => + [ + "crypto/err/err.o", + "crypto/err/err_all.o", + "crypto/err/err_prn.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/evp" => + { + "deps" => + [ + "crypto/evp/bio_b64.o", + "crypto/evp/bio_enc.o", + "crypto/evp/bio_md.o", + "crypto/evp/bio_ok.o", + "crypto/evp/c_allc.o", + "crypto/evp/c_alld.o", + "crypto/evp/cmeth_lib.o", + "crypto/evp/digest.o", + "crypto/evp/e_aes.o", + "crypto/evp/e_aes_cbc_hmac_sha1.o", + "crypto/evp/e_aes_cbc_hmac_sha256.o", + "crypto/evp/e_aria.o", + "crypto/evp/e_bf.o", + "crypto/evp/e_camellia.o", + "crypto/evp/e_cast.o", + "crypto/evp/e_chacha20_poly1305.o", + "crypto/evp/e_des.o", + "crypto/evp/e_des3.o", + "crypto/evp/e_idea.o", + "crypto/evp/e_null.o", + "crypto/evp/e_old.o", + "crypto/evp/e_rc2.o", + "crypto/evp/e_rc4.o", + "crypto/evp/e_rc4_hmac_md5.o", + "crypto/evp/e_rc5.o", + "crypto/evp/e_seed.o", + "crypto/evp/e_sm4.o", + "crypto/evp/e_xcbc_d.o", + "crypto/evp/encode.o", + "crypto/evp/evp_cnf.o", + "crypto/evp/evp_enc.o", + "crypto/evp/evp_err.o", + "crypto/evp/evp_key.o", + "crypto/evp/evp_lib.o", + "crypto/evp/evp_pbe.o", + "crypto/evp/evp_pkey.o", + "crypto/evp/m_md2.o", + "crypto/evp/m_md4.o", + "crypto/evp/m_md5.o", + "crypto/evp/m_md5_sha1.o", + "crypto/evp/m_mdc2.o", + "crypto/evp/m_null.o", + "crypto/evp/m_ripemd.o", + "crypto/evp/m_sha1.o", + "crypto/evp/m_sha3.o", + "crypto/evp/m_sigver.o", + "crypto/evp/m_wp.o", + "crypto/evp/names.o", + "crypto/evp/p5_crpt.o", + "crypto/evp/p5_crpt2.o", + "crypto/evp/p_dec.o", + "crypto/evp/p_enc.o", + "crypto/evp/p_lib.o", + "crypto/evp/p_open.o", + "crypto/evp/p_seal.o", + "crypto/evp/p_sign.o", + "crypto/evp/p_verify.o", + "crypto/evp/pbe_scrypt.o", + "crypto/evp/pmeth_fn.o", + "crypto/evp/pmeth_gn.o", + "crypto/evp/pmeth_lib.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/hmac" => + { + "deps" => + [ + "crypto/hmac/hm_ameth.o", + "crypto/hmac/hm_pmeth.o", + "crypto/hmac/hmac.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/idea" => + { + "deps" => + [ + "crypto/idea/i_cbc.o", + "crypto/idea/i_cfb64.o", + "crypto/idea/i_ecb.o", + "crypto/idea/i_ofb64.o", + "crypto/idea/i_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/kdf" => + { + "deps" => + [ + "crypto/kdf/hkdf.o", + "crypto/kdf/kdf_err.o", + "crypto/kdf/scrypt.o", + "crypto/kdf/tls1_prf.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/lhash" => + { + "deps" => + [ + "crypto/lhash/lh_stats.o", + "crypto/lhash/lhash.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/md4" => + { + "deps" => + [ + "crypto/md4/md4_dgst.o", + "crypto/md4/md4_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/md5" => + { + "deps" => + [ + "crypto/md5/md5_dgst.o", + "crypto/md5/md5_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/mdc2" => + { + "deps" => + [ + "crypto/mdc2/mdc2_one.o", + "crypto/mdc2/mdc2dgst.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/modes" => + { + "deps" => + [ + "crypto/modes/cbc128.o", + "crypto/modes/ccm128.o", + "crypto/modes/cfb128.o", + "crypto/modes/ctr128.o", + "crypto/modes/cts128.o", + "crypto/modes/gcm128.o", + "crypto/modes/ghashv8-armx.o", + "crypto/modes/ocb128.o", + "crypto/modes/ofb128.o", + "crypto/modes/wrap128.o", + "crypto/modes/xts128.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/objects" => + { + "deps" => + [ + "crypto/objects/o_names.o", + "crypto/objects/obj_dat.o", + "crypto/objects/obj_err.o", + "crypto/objects/obj_lib.o", + "crypto/objects/obj_xref.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ocsp" => + { + "deps" => + [ + "crypto/ocsp/ocsp_asn.o", + "crypto/ocsp/ocsp_cl.o", + "crypto/ocsp/ocsp_err.o", + "crypto/ocsp/ocsp_ext.o", + "crypto/ocsp/ocsp_ht.o", + "crypto/ocsp/ocsp_lib.o", + "crypto/ocsp/ocsp_prn.o", + "crypto/ocsp/ocsp_srv.o", + "crypto/ocsp/ocsp_vfy.o", + "crypto/ocsp/v3_ocsp.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pem" => + { + "deps" => + [ + "crypto/pem/pem_all.o", + "crypto/pem/pem_err.o", + "crypto/pem/pem_info.o", + "crypto/pem/pem_lib.o", + "crypto/pem/pem_oth.o", + "crypto/pem/pem_pk8.o", + "crypto/pem/pem_pkey.o", + "crypto/pem/pem_sign.o", + "crypto/pem/pem_x509.o", + "crypto/pem/pem_xaux.o", + "crypto/pem/pvkfmt.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pkcs12" => + { + "deps" => + [ + "crypto/pkcs12/p12_add.o", + "crypto/pkcs12/p12_asn.o", + "crypto/pkcs12/p12_attr.o", + "crypto/pkcs12/p12_crpt.o", + "crypto/pkcs12/p12_crt.o", + "crypto/pkcs12/p12_decr.o", + "crypto/pkcs12/p12_init.o", + "crypto/pkcs12/p12_key.o", + "crypto/pkcs12/p12_kiss.o", + "crypto/pkcs12/p12_mutl.o", + "crypto/pkcs12/p12_npas.o", + "crypto/pkcs12/p12_p8d.o", + "crypto/pkcs12/p12_p8e.o", + "crypto/pkcs12/p12_sbag.o", + "crypto/pkcs12/p12_utl.o", + "crypto/pkcs12/pk12err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pkcs7" => + { + "deps" => + [ + "crypto/pkcs7/bio_pk7.o", + "crypto/pkcs7/pk7_asn1.o", + "crypto/pkcs7/pk7_attr.o", + "crypto/pkcs7/pk7_doit.o", + "crypto/pkcs7/pk7_lib.o", + "crypto/pkcs7/pk7_mime.o", + "crypto/pkcs7/pk7_smime.o", + "crypto/pkcs7/pkcs7err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/poly1305" => + { + "deps" => + [ + "crypto/poly1305/poly1305-armv8.o", + "crypto/poly1305/poly1305.o", + "crypto/poly1305/poly1305_ameth.o", + "crypto/poly1305/poly1305_pmeth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rand" => + { + "deps" => + [ + "crypto/rand/drbg_ctr.o", + "crypto/rand/drbg_lib.o", + "crypto/rand/rand_egd.o", + "crypto/rand/rand_err.o", + "crypto/rand/rand_lib.o", + "crypto/rand/rand_unix.o", + "crypto/rand/rand_vms.o", + "crypto/rand/rand_win.o", + "crypto/rand/randfile.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rc2" => + { + "deps" => + [ + "crypto/rc2/rc2_cbc.o", + "crypto/rc2/rc2_ecb.o", + "crypto/rc2/rc2_skey.o", + "crypto/rc2/rc2cfb64.o", + "crypto/rc2/rc2ofb64.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rc4" => + { + "deps" => + [ + "crypto/rc4/rc4_enc.o", + "crypto/rc4/rc4_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ripemd" => + { + "deps" => + [ + "crypto/ripemd/rmd_dgst.o", + "crypto/ripemd/rmd_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rsa" => + { + "deps" => + [ + "crypto/rsa/rsa_ameth.o", + "crypto/rsa/rsa_asn1.o", + "crypto/rsa/rsa_chk.o", + "crypto/rsa/rsa_crpt.o", + "crypto/rsa/rsa_depr.o", + "crypto/rsa/rsa_err.o", + "crypto/rsa/rsa_gen.o", + "crypto/rsa/rsa_lib.o", + "crypto/rsa/rsa_meth.o", + "crypto/rsa/rsa_mp.o", + "crypto/rsa/rsa_none.o", + "crypto/rsa/rsa_oaep.o", + "crypto/rsa/rsa_ossl.o", + "crypto/rsa/rsa_pk1.o", + "crypto/rsa/rsa_pmeth.o", + "crypto/rsa/rsa_prn.o", + "crypto/rsa/rsa_pss.o", + "crypto/rsa/rsa_saos.o", + "crypto/rsa/rsa_sign.o", + "crypto/rsa/rsa_ssl.o", + "crypto/rsa/rsa_x931.o", + "crypto/rsa/rsa_x931g.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/seed" => + { + "deps" => + [ + "crypto/seed/seed.o", + "crypto/seed/seed_cbc.o", + "crypto/seed/seed_cfb.o", + "crypto/seed/seed_ecb.o", + "crypto/seed/seed_ofb.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sha" => + { + "deps" => + [ + "crypto/sha/keccak1600-armv8.o", + "crypto/sha/sha1-armv8.o", + "crypto/sha/sha1_one.o", + "crypto/sha/sha1dgst.o", + "crypto/sha/sha256-armv8.o", + "crypto/sha/sha256.o", + "crypto/sha/sha512-armv8.o", + "crypto/sha/sha512.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/siphash" => + { + "deps" => + [ + "crypto/siphash/siphash.o", + "crypto/siphash/siphash_ameth.o", + "crypto/siphash/siphash_pmeth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm2" => + { + "deps" => + [ + "crypto/sm2/sm2_crypt.o", + "crypto/sm2/sm2_err.o", + "crypto/sm2/sm2_pmeth.o", + "crypto/sm2/sm2_sign.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm3" => + { + "deps" => + [ + "crypto/sm3/m_sm3.o", + "crypto/sm3/sm3.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm4" => + { + "deps" => + [ + "crypto/sm4/sm4.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/srp" => + { + "deps" => + [ + "crypto/srp/srp_lib.o", + "crypto/srp/srp_vfy.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/stack" => + { + "deps" => + [ + "crypto/stack/stack.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/store" => + { + "deps" => + [ + "crypto/store/loader_file.o", + "crypto/store/store_err.o", + "crypto/store/store_init.o", + "crypto/store/store_lib.o", + "crypto/store/store_register.o", + "crypto/store/store_strings.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ts" => + { + "deps" => + [ + "crypto/ts/ts_asn1.o", + "crypto/ts/ts_conf.o", + "crypto/ts/ts_err.o", + "crypto/ts/ts_lib.o", + "crypto/ts/ts_req_print.o", + "crypto/ts/ts_req_utils.o", + "crypto/ts/ts_rsp_print.o", + "crypto/ts/ts_rsp_sign.o", + "crypto/ts/ts_rsp_utils.o", + "crypto/ts/ts_rsp_verify.o", + "crypto/ts/ts_verify_ctx.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/txt_db" => + { + "deps" => + [ + "crypto/txt_db/txt_db.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ui" => + { + "deps" => + [ + "crypto/ui/ui_err.o", + "crypto/ui/ui_lib.o", + "crypto/ui/ui_null.o", + "crypto/ui/ui_openssl.o", + "crypto/ui/ui_util.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/whrlpool" => + { + "deps" => + [ + "crypto/whrlpool/wp_block.o", + "crypto/whrlpool/wp_dgst.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/x509" => + { + "deps" => + [ + "crypto/x509/by_dir.o", + "crypto/x509/by_file.o", + "crypto/x509/t_crl.o", + "crypto/x509/t_req.o", + "crypto/x509/t_x509.o", + "crypto/x509/x509_att.o", + "crypto/x509/x509_cmp.o", + "crypto/x509/x509_d2.o", + "crypto/x509/x509_def.o", + "crypto/x509/x509_err.o", + "crypto/x509/x509_ext.o", + "crypto/x509/x509_lu.o", + "crypto/x509/x509_meth.o", + "crypto/x509/x509_obj.o", + "crypto/x509/x509_r2x.o", + "crypto/x509/x509_req.o", + "crypto/x509/x509_set.o", + "crypto/x509/x509_trs.o", + "crypto/x509/x509_txt.o", + "crypto/x509/x509_v3.o", + "crypto/x509/x509_vfy.o", + "crypto/x509/x509_vpm.o", + "crypto/x509/x509cset.o", + "crypto/x509/x509name.o", + "crypto/x509/x509rset.o", + "crypto/x509/x509spki.o", + "crypto/x509/x509type.o", + "crypto/x509/x_all.o", + "crypto/x509/x_attrib.o", + "crypto/x509/x_crl.o", + "crypto/x509/x_exten.o", + "crypto/x509/x_name.o", + "crypto/x509/x_pubkey.o", + "crypto/x509/x_req.o", + "crypto/x509/x_x509.o", + "crypto/x509/x_x509a.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/x509v3" => + { + "deps" => + [ + "crypto/x509v3/pcy_cache.o", + "crypto/x509v3/pcy_data.o", + "crypto/x509v3/pcy_lib.o", + "crypto/x509v3/pcy_map.o", + "crypto/x509v3/pcy_node.o", + "crypto/x509v3/pcy_tree.o", + "crypto/x509v3/v3_addr.o", + "crypto/x509v3/v3_admis.o", + "crypto/x509v3/v3_akey.o", + "crypto/x509v3/v3_akeya.o", + "crypto/x509v3/v3_alt.o", + "crypto/x509v3/v3_asid.o", + "crypto/x509v3/v3_bcons.o", + "crypto/x509v3/v3_bitst.o", + "crypto/x509v3/v3_conf.o", + "crypto/x509v3/v3_cpols.o", + "crypto/x509v3/v3_crld.o", + "crypto/x509v3/v3_enum.o", + "crypto/x509v3/v3_extku.o", + "crypto/x509v3/v3_genn.o", + "crypto/x509v3/v3_ia5.o", + "crypto/x509v3/v3_info.o", + "crypto/x509v3/v3_int.o", + "crypto/x509v3/v3_lib.o", + "crypto/x509v3/v3_ncons.o", + "crypto/x509v3/v3_pci.o", + "crypto/x509v3/v3_pcia.o", + "crypto/x509v3/v3_pcons.o", + "crypto/x509v3/v3_pku.o", + "crypto/x509v3/v3_pmaps.o", + "crypto/x509v3/v3_prn.o", + "crypto/x509v3/v3_purp.o", + "crypto/x509v3/v3_skey.o", + "crypto/x509v3/v3_sxnet.o", + "crypto/x509v3/v3_tlsf.o", + "crypto/x509v3/v3_utl.o", + "crypto/x509v3/v3err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "engines" => + { + "deps" => + [ + "engines/e_capi.o", + "engines/e_padlock.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "fuzz" => + { + "products" => + { + "bin" => + [ + "fuzz/asn1-test", + "fuzz/asn1parse-test", + "fuzz/bignum-test", + "fuzz/bndiv-test", + "fuzz/client-test", + "fuzz/cms-test", + "fuzz/conf-test", + "fuzz/crl-test", + "fuzz/ct-test", + "fuzz/server-test", + "fuzz/x509-test", + ], + }, + }, + "ssl" => + { + "deps" => + [ + "ssl/bio_ssl.o", + "ssl/d1_lib.o", + "ssl/d1_msg.o", + "ssl/d1_srtp.o", + "ssl/methods.o", + "ssl/packet.o", + "ssl/pqueue.o", + "ssl/s3_cbc.o", + "ssl/s3_enc.o", + "ssl/s3_lib.o", + "ssl/s3_msg.o", + "ssl/ssl_asn1.o", + "ssl/ssl_cert.o", + "ssl/ssl_ciph.o", + "ssl/ssl_conf.o", + "ssl/ssl_err.o", + "ssl/ssl_init.o", + "ssl/ssl_lib.o", + "ssl/ssl_mcnf.o", + "ssl/ssl_rsa.o", + "ssl/ssl_sess.o", + "ssl/ssl_stat.o", + "ssl/ssl_txt.o", + "ssl/ssl_utst.o", + "ssl/t1_enc.o", + "ssl/t1_lib.o", + "ssl/t1_trce.o", + "ssl/tls13_enc.o", + "ssl/tls_srp.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "ssl/record" => + { + "deps" => + [ + "ssl/record/dtls1_bitmap.o", + "ssl/record/rec_layer_d1.o", + "ssl/record/rec_layer_s3.o", + "ssl/record/ssl3_buffer.o", + "ssl/record/ssl3_record.o", + "ssl/record/ssl3_record_tls13.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "ssl/statem" => + { + "deps" => + [ + "ssl/statem/extensions.o", + "ssl/statem/extensions_clnt.o", + "ssl/statem/extensions_cust.o", + "ssl/statem/extensions_srvr.o", + "ssl/statem/statem.o", + "ssl/statem/statem_clnt.o", + "ssl/statem/statem_dtls.o", + "ssl/statem/statem_lib.o", + "ssl/statem/statem_srvr.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "test/testutil" => + { + "deps" => + [ + "test/testutil/basic_output.o", + "test/testutil/cb.o", + "test/testutil/driver.o", + "test/testutil/format_output.o", + "test/testutil/main.o", + "test/testutil/output_helpers.o", + "test/testutil/random.o", + "test/testutil/stanza.o", + "test/testutil/tap_bio.o", + "test/testutil/test_cleanup.o", + "test/testutil/tests.o", + "test/testutil/testutil_init.o", + ], + "products" => + { + "lib" => + [ + "test/libtestutil.a", + ], + }, + }, + "tools" => + { + "products" => + { + "script" => + [ + "tools/c_rehash", + ], + }, + }, + "util" => + { + "products" => + { + "script" => + [ + "util/shlib_wrap.sh", + ], + }, + }, + }, + "engines" => + [ + ], + "extra" => + [ + "crypto/alphacpuid.pl", + "crypto/arm64cpuid.pl", + "crypto/armv4cpuid.pl", + "crypto/ia64cpuid.S", + "crypto/pariscid.pl", + "crypto/ppccpuid.pl", + "crypto/x86_64cpuid.pl", + "crypto/x86cpuid.pl", + "ms/applink.c", + "ms/uplink-x86.pl", + "ms/uplink.c", + ], + "generate" => + { + "apps/progs.h" => + [ + "apps/progs.pl", + "\$(APPS_OPENSSL)", + ], + "crypto/aes/aes-586.s" => + [ + "crypto/aes/asm/aes-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/aes-armv4.S" => + [ + "crypto/aes/asm/aes-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-ia64.s" => + [ + "crypto/aes/asm/aes-ia64.S", + ], + "crypto/aes/aes-mips.S" => + [ + "crypto/aes/asm/aes-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-parisc.s" => + [ + "crypto/aes/asm/aes-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-ppc.s" => + [ + "crypto/aes/asm/aes-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-s390x.S" => + [ + "crypto/aes/asm/aes-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-sparcv9.S" => + [ + "crypto/aes/asm/aes-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-x86_64.s" => + [ + "crypto/aes/asm/aes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesfx-sparcv9.S" => + [ + "crypto/aes/asm/aesfx-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-mb-x86_64.s" => + [ + "crypto/aes/asm/aesni-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-sha1-x86_64.s" => + [ + "crypto/aes/asm/aesni-sha1-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-sha256-x86_64.s" => + [ + "crypto/aes/asm/aesni-sha256-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-x86.s" => + [ + "crypto/aes/asm/aesni-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/aesni-x86_64.s" => + [ + "crypto/aes/asm/aesni-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesp8-ppc.s" => + [ + "crypto/aes/asm/aesp8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aest4-sparcv9.S" => + [ + "crypto/aes/asm/aest4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesv8-armx.S" => + [ + "crypto/aes/asm/aesv8-armx.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/bsaes-armv7.S" => + [ + "crypto/aes/asm/bsaes-armv7.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/bsaes-x86_64.s" => + [ + "crypto/aes/asm/bsaes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-armv8.S" => + [ + "crypto/aes/asm/vpaes-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-ppc.s" => + [ + "crypto/aes/asm/vpaes-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-x86.s" => + [ + "crypto/aes/asm/vpaes-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/vpaes-x86_64.s" => + [ + "crypto/aes/asm/vpaes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/alphacpuid.s" => + [ + "crypto/alphacpuid.pl", + ], + "crypto/arm64cpuid.S" => + [ + "crypto/arm64cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/armv4cpuid.S" => + [ + "crypto/armv4cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bf/bf-586.s" => + [ + "crypto/bf/asm/bf-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/alpha-mont.S" => + [ + "crypto/bn/asm/alpha-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv4-gf2m.S" => + [ + "crypto/bn/asm/armv4-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv4-mont.S" => + [ + "crypto/bn/asm/armv4-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv8-mont.S" => + [ + "crypto/bn/asm/armv8-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/bn-586.s" => + [ + "crypto/bn/asm/bn-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/bn-ia64.s" => + [ + "crypto/bn/asm/ia64.S", + ], + "crypto/bn/bn-mips.S" => + [ + "crypto/bn/asm/mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/bn-ppc.s" => + [ + "crypto/bn/asm/ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/co-586.s" => + [ + "crypto/bn/asm/co-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/ia64-mont.s" => + [ + "crypto/bn/asm/ia64-mont.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/bn/mips-mont.S" => + [ + "crypto/bn/asm/mips-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/parisc-mont.s" => + [ + "crypto/bn/asm/parisc-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/ppc-mont.s" => + [ + "crypto/bn/asm/ppc-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/ppc64-mont.s" => + [ + "crypto/bn/asm/ppc64-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/rsaz-avx2.s" => + [ + "crypto/bn/asm/rsaz-avx2.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/rsaz-x86_64.s" => + [ + "crypto/bn/asm/rsaz-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/s390x-gf2m.s" => + [ + "crypto/bn/asm/s390x-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/s390x-mont.S" => + [ + "crypto/bn/asm/s390x-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparct4-mont.S" => + [ + "crypto/bn/asm/sparct4-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9-gf2m.S" => + [ + "crypto/bn/asm/sparcv9-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9-mont.S" => + [ + "crypto/bn/asm/sparcv9-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9a-mont.S" => + [ + "crypto/bn/asm/sparcv9a-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/vis3-mont.S" => + [ + "crypto/bn/asm/vis3-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86-gf2m.s" => + [ + "crypto/bn/asm/x86-gf2m.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/x86-mont.s" => + [ + "crypto/bn/asm/x86-mont.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/x86_64-gf2m.s" => + [ + "crypto/bn/asm/x86_64-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86_64-mont.s" => + [ + "crypto/bn/asm/x86_64-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86_64-mont5.s" => + [ + "crypto/bn/asm/x86_64-mont5.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/buildinf.h" => + [ + "util/mkbuildinf.pl", + "\"\$(CC)", + "\$(LIB_CFLAGS)", + "\$(CPPFLAGS_Q)\"", + "\"\$(PLATFORM)\"", + ], + "crypto/camellia/cmll-x86.s" => + [ + "crypto/camellia/asm/cmll-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/camellia/cmll-x86_64.s" => + [ + "crypto/camellia/asm/cmll-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/camellia/cmllt4-sparcv9.S" => + [ + "crypto/camellia/asm/cmllt4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/cast/cast-586.s" => + [ + "crypto/cast/asm/cast-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/chacha/chacha-armv4.S" => + [ + "crypto/chacha/asm/chacha-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-armv8.S" => + [ + "crypto/chacha/asm/chacha-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-ppc.s" => + [ + "crypto/chacha/asm/chacha-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-s390x.S" => + [ + "crypto/chacha/asm/chacha-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-x86.s" => + [ + "crypto/chacha/asm/chacha-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/chacha/chacha-x86_64.s" => + [ + "crypto/chacha/asm/chacha-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/des/crypt586.s" => + [ + "crypto/des/asm/crypt586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/des/des-586.s" => + [ + "crypto/des/asm/des-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/des/des_enc-sparc.S" => + [ + "crypto/des/asm/des_enc.m4", + ], + "crypto/des/dest4-sparcv9.S" => + [ + "crypto/des/asm/dest4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-armv4.S" => + [ + "crypto/ec/asm/ecp_nistz256-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-armv8.S" => + [ + "crypto/ec/asm/ecp_nistz256-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-avx2.s" => + [ + "crypto/ec/asm/ecp_nistz256-avx2.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-ppc64.s" => + [ + "crypto/ec/asm/ecp_nistz256-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-sparcv9.S" => + [ + "crypto/ec/asm/ecp_nistz256-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-x86.s" => + [ + "crypto/ec/asm/ecp_nistz256-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/ec/ecp_nistz256-x86_64.s" => + [ + "crypto/ec/asm/ecp_nistz256-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/x25519-ppc64.s" => + [ + "crypto/ec/asm/x25519-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/x25519-x86_64.s" => + [ + "crypto/ec/asm/x25519-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ia64cpuid.s" => + [ + "crypto/ia64cpuid.S", + ], + "crypto/md5/md5-586.s" => + [ + "crypto/md5/asm/md5-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/md5/md5-sparcv9.S" => + [ + "crypto/md5/asm/md5-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/md5/md5-x86_64.s" => + [ + "crypto/md5/asm/md5-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/aesni-gcm-x86_64.s" => + [ + "crypto/modes/asm/aesni-gcm-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-alpha.S" => + [ + "crypto/modes/asm/ghash-alpha.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-armv4.S" => + [ + "crypto/modes/asm/ghash-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-ia64.s" => + [ + "crypto/modes/asm/ghash-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/modes/ghash-parisc.s" => + [ + "crypto/modes/asm/ghash-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-s390x.S" => + [ + "crypto/modes/asm/ghash-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-sparcv9.S" => + [ + "crypto/modes/asm/ghash-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-x86.s" => + [ + "crypto/modes/asm/ghash-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/modes/ghash-x86_64.s" => + [ + "crypto/modes/asm/ghash-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghashp8-ppc.s" => + [ + "crypto/modes/asm/ghashp8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghashv8-armx.S" => + [ + "crypto/modes/asm/ghashv8-armx.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/pariscid.s" => + [ + "crypto/pariscid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-armv4.S" => + [ + "crypto/poly1305/asm/poly1305-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-armv8.S" => + [ + "crypto/poly1305/asm/poly1305-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-mips.S" => + [ + "crypto/poly1305/asm/poly1305-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-ppc.s" => + [ + "crypto/poly1305/asm/poly1305-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-ppcfp.s" => + [ + "crypto/poly1305/asm/poly1305-ppcfp.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-s390x.S" => + [ + "crypto/poly1305/asm/poly1305-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-sparcv9.S" => + [ + "crypto/poly1305/asm/poly1305-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-x86.s" => + [ + "crypto/poly1305/asm/poly1305-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/poly1305/poly1305-x86_64.s" => + [ + "crypto/poly1305/asm/poly1305-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ppccpuid.s" => + [ + "crypto/ppccpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-586.s" => + [ + "crypto/rc4/asm/rc4-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/rc4/rc4-md5-x86_64.s" => + [ + "crypto/rc4/asm/rc4-md5-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-parisc.s" => + [ + "crypto/rc4/asm/rc4-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-s390x.s" => + [ + "crypto/rc4/asm/rc4-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-x86_64.s" => + [ + "crypto/rc4/asm/rc4-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ripemd/rmd-586.s" => + [ + "crypto/ripemd/asm/rmd-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/s390xcpuid.S" => + [ + "crypto/s390xcpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-armv4.S" => + [ + "crypto/sha/asm/keccak1600-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-armv8.S" => + [ + "crypto/sha/asm/keccak1600-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-ppc64.s" => + [ + "crypto/sha/asm/keccak1600-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-s390x.S" => + [ + "crypto/sha/asm/keccak1600-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-x86_64.s" => + [ + "crypto/sha/asm/keccak1600-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-586.s" => + [ + "crypto/sha/asm/sha1-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha1-alpha.S" => + [ + "crypto/sha/asm/sha1-alpha.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-armv4-large.S" => + [ + "crypto/sha/asm/sha1-armv4-large.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-armv8.S" => + [ + "crypto/sha/asm/sha1-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-ia64.s" => + [ + "crypto/sha/asm/sha1-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha1-mb-x86_64.s" => + [ + "crypto/sha/asm/sha1-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-mips.S" => + [ + "crypto/sha/asm/sha1-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-parisc.s" => + [ + "crypto/sha/asm/sha1-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-ppc.s" => + [ + "crypto/sha/asm/sha1-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-s390x.S" => + [ + "crypto/sha/asm/sha1-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-sparcv9.S" => + [ + "crypto/sha/asm/sha1-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-x86_64.s" => + [ + "crypto/sha/asm/sha1-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-586.s" => + [ + "crypto/sha/asm/sha256-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha256-armv4.S" => + [ + "crypto/sha/asm/sha256-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-armv8.S" => + [ + "crypto/sha/asm/sha512-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-ia64.s" => + [ + "crypto/sha/asm/sha512-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha256-mb-x86_64.s" => + [ + "crypto/sha/asm/sha256-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-mips.S" => + [ + "crypto/sha/asm/sha512-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-parisc.s" => + [ + "crypto/sha/asm/sha512-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-ppc.s" => + [ + "crypto/sha/asm/sha512-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-s390x.S" => + [ + "crypto/sha/asm/sha512-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-sparcv9.S" => + [ + "crypto/sha/asm/sha512-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-x86_64.s" => + [ + "crypto/sha/asm/sha512-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256p8-ppc.s" => + [ + "crypto/sha/asm/sha512p8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-586.s" => + [ + "crypto/sha/asm/sha512-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha512-armv4.S" => + [ + "crypto/sha/asm/sha512-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-armv8.S" => + [ + "crypto/sha/asm/sha512-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-ia64.s" => + [ + "crypto/sha/asm/sha512-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha512-mips.S" => + [ + "crypto/sha/asm/sha512-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-parisc.s" => + [ + "crypto/sha/asm/sha512-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-ppc.s" => + [ + "crypto/sha/asm/sha512-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-s390x.S" => + [ + "crypto/sha/asm/sha512-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-sparcv9.S" => + [ + "crypto/sha/asm/sha512-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-x86_64.s" => + [ + "crypto/sha/asm/sha512-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512p8-ppc.s" => + [ + "crypto/sha/asm/sha512p8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-ia64.s" => + [ + "ms/uplink-ia64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-x86.s" => + [ + "ms/uplink-x86.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-x86_64.s" => + [ + "ms/uplink-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/whrlpool/wp-mmx.s" => + [ + "crypto/whrlpool/asm/wp-mmx.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/whrlpool/wp-x86_64.s" => + [ + "crypto/whrlpool/asm/wp-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/x86_64cpuid.s" => + [ + "crypto/x86_64cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/x86cpuid.s" => + [ + "crypto/x86cpuid.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "engines/e_padlock-x86.s" => + [ + "engines/asm/e_padlock-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "engines/e_padlock-x86_64.s" => + [ + "engines/asm/e_padlock-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "include/crypto/bn_conf.h" => + [ + "include/crypto/bn_conf.h.in", + ], + "include/crypto/dso_conf.h" => + [ + "include/crypto/dso_conf.h.in", + ], + "include/openssl/opensslconf.h" => + [ + "include/openssl/opensslconf.h.in", + ], + "test/buildtest_aes.c" => + [ + "test/generate_buildtest.pl", + "aes", + ], + "test/buildtest_asn1.c" => + [ + "test/generate_buildtest.pl", + "asn1", + ], + "test/buildtest_asn1t.c" => + [ + "test/generate_buildtest.pl", + "asn1t", + ], + "test/buildtest_async.c" => + [ + "test/generate_buildtest.pl", + "async", + ], + "test/buildtest_bio.c" => + [ + "test/generate_buildtest.pl", + "bio", + ], + "test/buildtest_blowfish.c" => + [ + "test/generate_buildtest.pl", + "blowfish", + ], + "test/buildtest_bn.c" => + [ + "test/generate_buildtest.pl", + "bn", + ], + "test/buildtest_buffer.c" => + [ + "test/generate_buildtest.pl", + "buffer", + ], + "test/buildtest_camellia.c" => + [ + "test/generate_buildtest.pl", + "camellia", + ], + "test/buildtest_cast.c" => + [ + "test/generate_buildtest.pl", + "cast", + ], + "test/buildtest_cmac.c" => + [ + "test/generate_buildtest.pl", + "cmac", + ], + "test/buildtest_cms.c" => + [ + "test/generate_buildtest.pl", + "cms", + ], + "test/buildtest_conf.c" => + [ + "test/generate_buildtest.pl", + "conf", + ], + "test/buildtest_conf_api.c" => + [ + "test/generate_buildtest.pl", + "conf_api", + ], + "test/buildtest_crypto.c" => + [ + "test/generate_buildtest.pl", + "crypto", + ], + "test/buildtest_ct.c" => + [ + "test/generate_buildtest.pl", + "ct", + ], + "test/buildtest_des.c" => + [ + "test/generate_buildtest.pl", + "des", + ], + "test/buildtest_dh.c" => + [ + "test/generate_buildtest.pl", + "dh", + ], + "test/buildtest_dsa.c" => + [ + "test/generate_buildtest.pl", + "dsa", + ], + "test/buildtest_dtls1.c" => + [ + "test/generate_buildtest.pl", + "dtls1", + ], + "test/buildtest_e_os2.c" => + [ + "test/generate_buildtest.pl", + "e_os2", + ], + "test/buildtest_ebcdic.c" => + [ + "test/generate_buildtest.pl", + "ebcdic", + ], + "test/buildtest_ec.c" => + [ + "test/generate_buildtest.pl", + "ec", + ], + "test/buildtest_ecdh.c" => + [ + "test/generate_buildtest.pl", + "ecdh", + ], + "test/buildtest_ecdsa.c" => + [ + "test/generate_buildtest.pl", + "ecdsa", + ], + "test/buildtest_engine.c" => + [ + "test/generate_buildtest.pl", + "engine", + ], + "test/buildtest_evp.c" => + [ + "test/generate_buildtest.pl", + "evp", + ], + "test/buildtest_hmac.c" => + [ + "test/generate_buildtest.pl", + "hmac", + ], + "test/buildtest_idea.c" => + [ + "test/generate_buildtest.pl", + "idea", + ], + "test/buildtest_kdf.c" => + [ + "test/generate_buildtest.pl", + "kdf", + ], + "test/buildtest_lhash.c" => + [ + "test/generate_buildtest.pl", + "lhash", + ], + "test/buildtest_md4.c" => + [ + "test/generate_buildtest.pl", + "md4", + ], + "test/buildtest_md5.c" => + [ + "test/generate_buildtest.pl", + "md5", + ], + "test/buildtest_mdc2.c" => + [ + "test/generate_buildtest.pl", + "mdc2", + ], + "test/buildtest_modes.c" => + [ + "test/generate_buildtest.pl", + "modes", + ], + "test/buildtest_obj_mac.c" => + [ + "test/generate_buildtest.pl", + "obj_mac", + ], + "test/buildtest_objects.c" => + [ + "test/generate_buildtest.pl", + "objects", + ], + "test/buildtest_ocsp.c" => + [ + "test/generate_buildtest.pl", + "ocsp", + ], + "test/buildtest_opensslv.c" => + [ + "test/generate_buildtest.pl", + "opensslv", + ], + "test/buildtest_ossl_typ.c" => + [ + "test/generate_buildtest.pl", + "ossl_typ", + ], + "test/buildtest_pem.c" => + [ + "test/generate_buildtest.pl", + "pem", + ], + "test/buildtest_pem2.c" => + [ + "test/generate_buildtest.pl", + "pem2", + ], + "test/buildtest_pkcs12.c" => + [ + "test/generate_buildtest.pl", + "pkcs12", + ], + "test/buildtest_pkcs7.c" => + [ + "test/generate_buildtest.pl", + "pkcs7", + ], + "test/buildtest_rand.c" => + [ + "test/generate_buildtest.pl", + "rand", + ], + "test/buildtest_rand_drbg.c" => + [ + "test/generate_buildtest.pl", + "rand_drbg", + ], + "test/buildtest_rc2.c" => + [ + "test/generate_buildtest.pl", + "rc2", + ], + "test/buildtest_rc4.c" => + [ + "test/generate_buildtest.pl", + "rc4", + ], + "test/buildtest_ripemd.c" => + [ + "test/generate_buildtest.pl", + "ripemd", + ], + "test/buildtest_rsa.c" => + [ + "test/generate_buildtest.pl", + "rsa", + ], + "test/buildtest_safestack.c" => + [ + "test/generate_buildtest.pl", + "safestack", + ], + "test/buildtest_seed.c" => + [ + "test/generate_buildtest.pl", + "seed", + ], + "test/buildtest_sha.c" => + [ + "test/generate_buildtest.pl", + "sha", + ], + "test/buildtest_srp.c" => + [ + "test/generate_buildtest.pl", + "srp", + ], + "test/buildtest_srtp.c" => + [ + "test/generate_buildtest.pl", + "srtp", + ], + "test/buildtest_ssl.c" => + [ + "test/generate_buildtest.pl", + "ssl", + ], + "test/buildtest_ssl2.c" => + [ + "test/generate_buildtest.pl", + "ssl2", + ], + "test/buildtest_stack.c" => + [ + "test/generate_buildtest.pl", + "stack", + ], + "test/buildtest_store.c" => + [ + "test/generate_buildtest.pl", + "store", + ], + "test/buildtest_symhacks.c" => + [ + "test/generate_buildtest.pl", + "symhacks", + ], + "test/buildtest_tls1.c" => + [ + "test/generate_buildtest.pl", + "tls1", + ], + "test/buildtest_ts.c" => + [ + "test/generate_buildtest.pl", + "ts", + ], + "test/buildtest_txt_db.c" => + [ + "test/generate_buildtest.pl", + "txt_db", + ], + "test/buildtest_ui.c" => + [ + "test/generate_buildtest.pl", + "ui", + ], + "test/buildtest_whrlpool.c" => + [ + "test/generate_buildtest.pl", + "whrlpool", + ], + "test/buildtest_x509.c" => + [ + "test/generate_buildtest.pl", + "x509", + ], + "test/buildtest_x509_vfy.c" => + [ + "test/generate_buildtest.pl", + "x509_vfy", + ], + "test/buildtest_x509v3.c" => + [ + "test/generate_buildtest.pl", + "x509v3", + ], + }, + "includes" => + { + "apps/app_rand.o" => + [ + ".", + "include", + ], + "apps/apps.o" => + [ + ".", + "include", + ], + "apps/asn1pars.o" => + [ + ".", + "include", + "apps", + ], + "apps/bf_prefix.o" => + [ + ".", + "include", + ], + "apps/ca.o" => + [ + ".", + "include", + "apps", + ], + "apps/ciphers.o" => + [ + ".", + "include", + "apps", + ], + "apps/cms.o" => + [ + ".", + "include", + "apps", + ], + "apps/crl.o" => + [ + ".", + "include", + "apps", + ], + "apps/crl2p7.o" => + [ + ".", + "include", + "apps", + ], + "apps/dgst.o" => + [ + ".", + "include", + "apps", + ], + "apps/dhparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/dsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/dsaparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/ec.o" => + [ + ".", + "include", + "apps", + ], + "apps/ecparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/enc.o" => + [ + ".", + "include", + "apps", + ], + "apps/engine.o" => + [ + ".", + "include", + "apps", + ], + "apps/errstr.o" => + [ + ".", + "include", + "apps", + ], + "apps/gendsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/genpkey.o" => + [ + ".", + "include", + "apps", + ], + "apps/genrsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/nseq.o" => + [ + ".", + "include", + "apps", + ], + "apps/ocsp.o" => + [ + ".", + "include", + "apps", + ], + "apps/openssl.o" => + [ + ".", + "include", + "apps", + ], + "apps/opt.o" => + [ + ".", + "include", + ], + "apps/passwd.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs12.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs7.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs8.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkey.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkeyparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkeyutl.o" => + [ + ".", + "include", + "apps", + ], + "apps/prime.o" => + [ + ".", + "include", + "apps", + ], + "apps/progs.h" => + [ + ".", + ], + "apps/rand.o" => + [ + ".", + "include", + "apps", + ], + "apps/rehash.o" => + [ + ".", + "include", + "apps", + ], + "apps/req.o" => + [ + ".", + "include", + "apps", + ], + "apps/rsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/rsautl.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_cb.o" => + [ + ".", + "include", + ], + "apps/s_client.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_server.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_socket.o" => + [ + ".", + "include", + ], + "apps/s_time.o" => + [ + ".", + "include", + "apps", + ], + "apps/sess_id.o" => + [ + ".", + "include", + "apps", + ], + "apps/smime.o" => + [ + ".", + "include", + "apps", + ], + "apps/speed.o" => + [ + ".", + "include", + "apps", + ], + "apps/spkac.o" => + [ + ".", + "include", + "apps", + ], + "apps/srp.o" => + [ + ".", + "include", + "apps", + ], + "apps/storeutl.o" => + [ + ".", + "include", + "apps", + ], + "apps/ts.o" => + [ + ".", + "include", + "apps", + ], + "apps/verify.o" => + [ + ".", + "include", + "apps", + ], + "apps/version.o" => + [ + ".", + "include", + "apps", + ], + "apps/x509.o" => + [ + ".", + "include", + "apps", + ], + "crypto/aes/aes-armv4.o" => + [ + "crypto", + ], + "crypto/aes/aes-mips.o" => + [ + "crypto", + ], + "crypto/aes/aes-s390x.o" => + [ + "crypto", + ], + "crypto/aes/aes-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aes_cbc.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_cfb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_core.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ecb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ige.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_misc.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ofb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_wrap.o" => + [ + ".", + "include", + ], + "crypto/aes/aesfx-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aest4-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aesv8-armx.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/aes/bsaes-armv7.o" => + [ + "crypto", + ], + "crypto/aes/vpaes-armv8.o" => + [ + ".", + "include", + ], + "crypto/aria/aria.o" => + [ + ".", + "include", + ], + "crypto/arm64cpuid.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/armcap.o" => + [ + ".", + "include", + ], + "crypto/armv4cpuid.o" => + [ + "crypto", + ], + "crypto/asn1/a_bitstr.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_d2i_fp.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_digest.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_dup.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_gentm.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_i2d_fp.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_int.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_mbstr.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_object.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_octet.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_print.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_sign.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_strex.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_strnid.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_time.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_type.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_utctm.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_utf8.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_verify.o" => + [ + ".", + "include", + ], + "crypto/asn1/ameth_lib.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_err.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_gen.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_item_list.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_lib.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_par.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_mime.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_moid.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_mstbl.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_pack.o" => + [ + ".", + "include", + ], + "crypto/asn1/bio_asn1.o" => + [ + ".", + "include", + ], + "crypto/asn1/bio_ndef.o" => + [ + ".", + "include", + ], + "crypto/asn1/d2i_pr.o" => + [ + ".", + "include", + ], + "crypto/asn1/d2i_pu.o" => + [ + ".", + "include", + ], + "crypto/asn1/evp_asn1.o" => + [ + ".", + "include", + ], + "crypto/asn1/f_int.o" => + [ + ".", + "include", + ], + "crypto/asn1/f_string.o" => + [ + ".", + "include", + ], + "crypto/asn1/i2d_pr.o" => + [ + ".", + "include", + ], + "crypto/asn1/i2d_pu.o" => + [ + ".", + "include", + ], + "crypto/asn1/n_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/nsseq.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_pbe.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_pbev2.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_scrypt.o" => + [ + ".", + "include", + ], + "crypto/asn1/p8_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_bitst.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_spki.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_dec.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_enc.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_fre.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_new.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_prn.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_scn.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_typ.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_utl.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_algor.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_bignum.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_info.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_int64.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_long.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_sig.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_spki.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_val.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_null.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_posix.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_win.o" => + [ + ".", + "include", + ], + "crypto/async/async.o" => + [ + ".", + "include", + ], + "crypto/async/async_err.o" => + [ + ".", + "include", + ], + "crypto/async/async_wait.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_cfb64.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_ecb.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_enc.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_ofb64.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_skey.o" => + [ + ".", + "include", + ], + "crypto/bio/b_addr.o" => + [ + ".", + "include", + ], + "crypto/bio/b_dump.o" => + [ + ".", + "include", + ], + "crypto/bio/b_print.o" => + [ + ".", + "include", + ], + "crypto/bio/b_sock.o" => + [ + ".", + "include", + ], + "crypto/bio/b_sock2.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_buff.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_lbuf.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_nbio.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_null.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_cb.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_err.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_lib.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_meth.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_acpt.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_bio.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_conn.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_dgram.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_fd.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_file.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_log.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_mem.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_null.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_sock.o" => + [ + ".", + "include", + ], + "crypto/blake2/blake2b.o" => + [ + ".", + "include", + ], + "crypto/blake2/blake2s.o" => + [ + ".", + "include", + ], + "crypto/blake2/m_blake2b.o" => + [ + ".", + "include", + ], + "crypto/blake2/m_blake2s.o" => + [ + ".", + "include", + ], + "crypto/bn/armv4-gf2m.o" => + [ + "crypto", + ], + "crypto/bn/armv4-mont.o" => + [ + "crypto", + ], + "crypto/bn/armv8-mont.o" => + [ + ".", + "include", + ], + "crypto/bn/bn-mips.o" => + [ + "crypto", + ], + "crypto/bn/bn_add.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_asm.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_blind.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_const.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_ctx.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_depr.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_dh.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_div.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_err.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_exp.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/bn/bn_exp2.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_gcd.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_gf2m.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_intern.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_kron.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_lib.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mod.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mont.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mpi.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mul.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_nist.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_prime.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_print.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_rand.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_recp.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_shift.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_sqr.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_sqrt.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_srp.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_word.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_x931p.o" => + [ + ".", + "include", + ], + "crypto/bn/mips-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparct4-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9-gf2m.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9a-mont.o" => + [ + "crypto", + ], + "crypto/bn/vis3-mont.o" => + [ + "crypto", + ], + "crypto/buffer/buf_err.o" => + [ + ".", + "include", + ], + "crypto/buffer/buffer.o" => + [ + ".", + "include", + ], + "crypto/buildinf.h" => + [ + ".", + ], + "crypto/camellia/camellia.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_cbc.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_cfb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ctr.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ecb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_misc.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ofb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmllt4-sparcv9.o" => + [ + "crypto", + ], + "crypto/cast/c_cfb64.o" => + [ + ".", + "include", + ], + "crypto/cast/c_ecb.o" => + [ + ".", + "include", + ], + "crypto/cast/c_enc.o" => + [ + ".", + "include", + ], + "crypto/cast/c_ofb64.o" => + [ + ".", + "include", + ], + "crypto/cast/c_skey.o" => + [ + ".", + "include", + ], + "crypto/chacha/chacha-armv4.o" => + [ + "crypto", + ], + "crypto/chacha/chacha-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/chacha/chacha-s390x.o" => + [ + "crypto", + ], + "crypto/cmac/cm_ameth.o" => + [ + ".", + "include", + ], + "crypto/cmac/cm_pmeth.o" => + [ + ".", + "include", + ], + "crypto/cmac/cmac.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_asn1.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_att.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_cd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_dd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_enc.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_env.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_err.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_ess.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_io.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_kari.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_lib.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_pwri.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_sd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_smime.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_api.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_def.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_err.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_lib.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_mall.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_mod.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_sap.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_ssl.o" => + [ + ".", + "include", + ], + "crypto/cpt_err.o" => + [ + ".", + "include", + ], + "crypto/cryptlib.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_b64.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_err.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_log.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_oct.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_policy.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_prn.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_sct.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_sct_ctx.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_vfy.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_x509v3.o" => + [ + ".", + "include", + ], + "crypto/ctype.o" => + [ + ".", + "include", + ], + "crypto/cversion.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/des/cbc_cksm.o" => + [ + ".", + "include", + ], + "crypto/des/cbc_enc.o" => + [ + ".", + "include", + ], + "crypto/des/cfb64ede.o" => + [ + ".", + "include", + ], + "crypto/des/cfb64enc.o" => + [ + ".", + "include", + ], + "crypto/des/cfb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/des_enc.o" => + [ + ".", + "include", + ], + "crypto/des/dest4-sparcv9.o" => + [ + "crypto", + ], + "crypto/des/ecb3_enc.o" => + [ + ".", + "include", + ], + "crypto/des/ecb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/fcrypt.o" => + [ + ".", + "include", + ], + "crypto/des/fcrypt_b.o" => + [ + ".", + "include", + ], + "crypto/des/ofb64ede.o" => + [ + ".", + "include", + ], + "crypto/des/ofb64enc.o" => + [ + ".", + "include", + ], + "crypto/des/ofb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/pcbc_enc.o" => + [ + ".", + "include", + ], + "crypto/des/qud_cksm.o" => + [ + ".", + "include", + ], + "crypto/des/rand_key.o" => + [ + ".", + "include", + ], + "crypto/des/set_key.o" => + [ + ".", + "include", + ], + "crypto/des/str2key.o" => + [ + ".", + "include", + ], + "crypto/des/xcbc_enc.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_ameth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_asn1.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_check.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_depr.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_err.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_gen.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_kdf.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_key.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_lib.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_meth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_pmeth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_prn.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_rfc5114.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_rfc7919.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_ameth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_asn1.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_depr.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_err.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_gen.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_key.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_lib.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_meth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_pmeth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_prn.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_sign.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_vrf.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_dl.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_dlfcn.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_err.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_lib.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_openssl.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_vms.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_win32.o" => + [ + ".", + "include", + ], + "crypto/ebcdic.o" => + [ + ".", + "include", + ], + "crypto/ec/curve25519.o" => + [ + ".", + "include", + ], + "crypto/ec/curve448/arch_32/f_impl.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/curve448.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/curve448_tables.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/eddsa.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/f_generic.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/scalar.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/ec2_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ec2_smpl.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_ameth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_asn1.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_check.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_curve.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_cvt.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_err.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_key.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_kmeth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_lib.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_mult.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_pmeth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_print.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdh_kdf.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdh_ossl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_sign.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_vrf.o" => + [ + ".", + "include", + ], + "crypto/ec/eck_prn.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_mont.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nist.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp224.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp256.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp521.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistputil.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistz256-armv4.o" => + [ + "crypto", + ], + "crypto/ec/ecp_nistz256-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/ec/ecp_nistz256-sparcv9.o" => + [ + "crypto", + ], + "crypto/ec/ecp_nistz256.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_smpl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecx_meth.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_all.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_cnf.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_ctrl.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_dyn.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_err.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_fat.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_init.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_lib.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_list.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_openssl.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_pkey.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_rdrand.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_table.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_asnmth.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_cipher.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_dh.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_digest.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_dsa.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_eckey.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_pkmeth.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_rand.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_rsa.o" => + [ + ".", + "include", + ], + "crypto/err/err.o" => + [ + ".", + "include", + ], + "crypto/err/err_all.o" => + [ + ".", + "include", + ], + "crypto/err/err_prn.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_b64.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_md.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_ok.o" => + [ + ".", + "include", + ], + "crypto/evp/c_allc.o" => + [ + ".", + "include", + ], + "crypto/evp/c_alld.o" => + [ + ".", + "include", + ], + "crypto/evp/cmeth_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/digest.o" => + [ + ".", + "include", + ], + "crypto/evp/e_aes.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_aes_cbc_hmac_sha1.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/evp/e_aes_cbc_hmac_sha256.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/evp/e_aria.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_bf.o" => + [ + ".", + "include", + ], + "crypto/evp/e_camellia.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_cast.o" => + [ + ".", + "include", + ], + "crypto/evp/e_chacha20_poly1305.o" => + [ + ".", + "include", + ], + "crypto/evp/e_des.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/e_des3.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/e_idea.o" => + [ + ".", + "include", + ], + "crypto/evp/e_null.o" => + [ + ".", + "include", + ], + "crypto/evp/e_old.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc2.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc4.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc4_hmac_md5.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc5.o" => + [ + ".", + "include", + ], + "crypto/evp/e_seed.o" => + [ + ".", + "include", + ], + "crypto/evp/e_sm4.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_xcbc_d.o" => + [ + ".", + "include", + ], + "crypto/evp/encode.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_cnf.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_err.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_key.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_pbe.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_pkey.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md2.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md4.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md5.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md5_sha1.o" => + [ + ".", + "include", + ], + "crypto/evp/m_mdc2.o" => + [ + ".", + "include", + ], + "crypto/evp/m_null.o" => + [ + ".", + "include", + ], + "crypto/evp/m_ripemd.o" => + [ + ".", + "include", + ], + "crypto/evp/m_sha1.o" => + [ + ".", + "include", + ], + "crypto/evp/m_sha3.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/m_sigver.o" => + [ + ".", + "include", + ], + "crypto/evp/m_wp.o" => + [ + ".", + "include", + ], + "crypto/evp/names.o" => + [ + ".", + "include", + ], + "crypto/evp/p5_crpt.o" => + [ + ".", + "include", + ], + "crypto/evp/p5_crpt2.o" => + [ + ".", + "include", + ], + "crypto/evp/p_dec.o" => + [ + ".", + "include", + ], + "crypto/evp/p_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/p_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/p_open.o" => + [ + ".", + "include", + ], + "crypto/evp/p_seal.o" => + [ + ".", + "include", + ], + "crypto/evp/p_sign.o" => + [ + ".", + "include", + ], + "crypto/evp/p_verify.o" => + [ + ".", + "include", + ], + "crypto/evp/pbe_scrypt.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_fn.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_gn.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_lib.o" => + [ + ".", + "include", + ], + "crypto/ex_data.o" => + [ + ".", + "include", + ], + "crypto/getenv.o" => + [ + ".", + "include", + ], + "crypto/hmac/hm_ameth.o" => + [ + ".", + "include", + ], + "crypto/hmac/hm_pmeth.o" => + [ + ".", + "include", + ], + "crypto/hmac/hmac.o" => + [ + ".", + "include", + ], + "crypto/idea/i_cbc.o" => + [ + ".", + "include", + ], + "crypto/idea/i_cfb64.o" => + [ + ".", + "include", + ], + "crypto/idea/i_ecb.o" => + [ + ".", + "include", + ], + "crypto/idea/i_ofb64.o" => + [ + ".", + "include", + ], + "crypto/idea/i_skey.o" => + [ + ".", + "include", + ], + "crypto/init.o" => + [ + ".", + "include", + ], + "crypto/kdf/hkdf.o" => + [ + ".", + "include", + ], + "crypto/kdf/kdf_err.o" => + [ + ".", + "include", + ], + "crypto/kdf/scrypt.o" => + [ + ".", + "include", + ], + "crypto/kdf/tls1_prf.o" => + [ + ".", + "include", + ], + "crypto/lhash/lh_stats.o" => + [ + ".", + "include", + ], + "crypto/lhash/lhash.o" => + [ + ".", + "include", + ], + "crypto/md4/md4_dgst.o" => + [ + ".", + "include", + ], + "crypto/md4/md4_one.o" => + [ + ".", + "include", + ], + "crypto/md5/md5-sparcv9.o" => + [ + "crypto", + ], + "crypto/md5/md5_dgst.o" => + [ + ".", + "include", + ], + "crypto/md5/md5_one.o" => + [ + ".", + "include", + ], + "crypto/mdc2/mdc2_one.o" => + [ + ".", + "include", + ], + "crypto/mdc2/mdc2dgst.o" => + [ + ".", + "include", + ], + "crypto/mem.o" => + [ + ".", + "include", + ], + "crypto/mem_dbg.o" => + [ + ".", + "include", + ], + "crypto/mem_sec.o" => + [ + ".", + "include", + ], + "crypto/modes/cbc128.o" => + [ + ".", + "include", + ], + "crypto/modes/ccm128.o" => + [ + ".", + "include", + ], + "crypto/modes/cfb128.o" => + [ + ".", + "include", + ], + "crypto/modes/ctr128.o" => + [ + ".", + "include", + ], + "crypto/modes/cts128.o" => + [ + ".", + "include", + ], + "crypto/modes/gcm128.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/modes/ghash-armv4.o" => + [ + "crypto", + ], + "crypto/modes/ghash-s390x.o" => + [ + "crypto", + ], + "crypto/modes/ghash-sparcv9.o" => + [ + "crypto", + ], + "crypto/modes/ghashv8-armx.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/modes/ocb128.o" => + [ + ".", + "include", + ], + "crypto/modes/ofb128.o" => + [ + ".", + "include", + ], + "crypto/modes/wrap128.o" => + [ + ".", + "include", + ], + "crypto/modes/xts128.o" => + [ + ".", + "include", + ], + "crypto/o_dir.o" => + [ + ".", + "include", + ], + "crypto/o_fips.o" => + [ + ".", + "include", + ], + "crypto/o_fopen.o" => + [ + ".", + "include", + ], + "crypto/o_init.o" => + [ + ".", + "include", + ], + "crypto/o_str.o" => + [ + ".", + "include", + ], + "crypto/o_time.o" => + [ + ".", + "include", + ], + "crypto/objects/o_names.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_dat.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_err.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_lib.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_xref.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_asn.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_cl.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_err.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_ext.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_ht.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_lib.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_prn.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_srv.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_vfy.o" => + [ + ".", + "include", + ], + "crypto/ocsp/v3_ocsp.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_all.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_err.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_info.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_lib.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_oth.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_pk8.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_pkey.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_sign.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_x509.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_xaux.o" => + [ + ".", + "include", + ], + "crypto/pem/pvkfmt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_add.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_asn.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_attr.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_crpt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_crt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_decr.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_init.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_key.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_kiss.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_mutl.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_npas.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_p8d.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_p8e.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_sbag.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_utl.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/pk12err.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/bio_pk7.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_asn1.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_attr.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_doit.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_lib.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_mime.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_smime.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pkcs7err.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305-armv4.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/poly1305/poly1305-mips.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305-sparcv9.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305_ameth.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305_pmeth.o" => + [ + ".", + "include", + ], + "crypto/rand/drbg_ctr.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/rand/drbg_lib.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_egd.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_err.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_lib.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_unix.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_vms.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_win.o" => + [ + ".", + "include", + ], + "crypto/rand/randfile.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_cbc.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_ecb.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_skey.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2cfb64.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2ofb64.o" => + [ + ".", + "include", + ], + "crypto/rc4/rc4_enc.o" => + [ + ".", + "include", + ], + "crypto/rc4/rc4_skey.o" => + [ + ".", + "include", + ], + "crypto/ripemd/rmd_dgst.o" => + [ + ".", + "include", + ], + "crypto/ripemd/rmd_one.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ameth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_asn1.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_chk.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_crpt.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_depr.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_err.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_gen.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_lib.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_meth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_mp.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_none.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_oaep.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pk1.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pmeth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_prn.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pss.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_saos.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_sign.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ssl.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_x931.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_x931g.o" => + [ + ".", + "include", + ], + "crypto/s390xcpuid.o" => + [ + "crypto", + ], + "crypto/seed/seed.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_cbc.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_cfb.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_ecb.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_ofb.o" => + [ + ".", + "include", + ], + "crypto/sha/keccak1600-armv4.o" => + [ + "crypto", + ], + "crypto/sha/keccak1600-armv8.o" => + [ + ".", + "include", + ], + "crypto/sha/sha1-armv4-large.o" => + [ + "crypto", + ], + "crypto/sha/sha1-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/sha/sha1-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha1-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha1-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha1_one.o" => + [ + ".", + "include", + ], + "crypto/sha/sha1dgst.o" => + [ + ".", + "include", + ], + "crypto/sha/sha256-armv4.o" => + [ + "crypto", + ], + "crypto/sha/sha256-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/sha/sha256-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha256-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha256-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha256.o" => + [ + ".", + "include", + ], + "crypto/sha/sha512-armv4.o" => + [ + "crypto", + ], + "crypto/sha/sha512-armv8.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/sha/sha512-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha512-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha512-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha512.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash_ameth.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash_pmeth.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_crypt.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_err.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_pmeth.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_sign.o" => + [ + ".", + "include", + ], + "crypto/sm3/m_sm3.o" => + [ + ".", + "include", + ], + "crypto/sm3/sm3.o" => + [ + ".", + "include", + ], + "crypto/sm4/sm4.o" => + [ + ".", + "include", + ], + "crypto/srp/srp_lib.o" => + [ + ".", + "include", + ], + "crypto/srp/srp_vfy.o" => + [ + ".", + "include", + ], + "crypto/stack/stack.o" => + [ + ".", + "include", + ], + "crypto/store/loader_file.o" => + [ + ".", + "include", + ], + "crypto/store/store_err.o" => + [ + ".", + "include", + ], + "crypto/store/store_init.o" => + [ + ".", + "include", + ], + "crypto/store/store_lib.o" => + [ + ".", + "include", + ], + "crypto/store/store_register.o" => + [ + ".", + "include", + ], + "crypto/store/store_strings.o" => + [ + ".", + "include", + ], + "crypto/threads_none.o" => + [ + ".", + "include", + ], + "crypto/threads_pthread.o" => + [ + ".", + "include", + ], + "crypto/threads_win.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_asn1.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_conf.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_err.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_lib.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_req_print.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_req_utils.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_print.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_sign.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_utils.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_verify.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_verify_ctx.o" => + [ + ".", + "include", + ], + "crypto/txt_db/txt_db.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_err.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_lib.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_null.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_openssl.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_util.o" => + [ + ".", + "include", + ], + "crypto/uid.o" => + [ + ".", + "include", + ], + "crypto/whrlpool/wp_block.o" => + [ + ".", + "include", + ], + "crypto/whrlpool/wp_dgst.o" => + [ + ".", + "include", + ], + "crypto/x509/by_dir.o" => + [ + ".", + "include", + ], + "crypto/x509/by_file.o" => + [ + ".", + "include", + ], + "crypto/x509/t_crl.o" => + [ + ".", + "include", + ], + "crypto/x509/t_req.o" => + [ + ".", + "include", + ], + "crypto/x509/t_x509.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_att.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_cmp.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_d2.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_def.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_err.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_ext.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_lu.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_meth.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_obj.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_r2x.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_req.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_set.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_trs.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_txt.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_v3.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_vfy.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_vpm.o" => + [ + ".", + "include", + ], + "crypto/x509/x509cset.o" => + [ + ".", + "include", + ], + "crypto/x509/x509name.o" => + [ + ".", + "include", + ], + "crypto/x509/x509rset.o" => + [ + ".", + "include", + ], + "crypto/x509/x509spki.o" => + [ + ".", + "include", + ], + "crypto/x509/x509type.o" => + [ + ".", + "include", + ], + "crypto/x509/x_all.o" => + [ + ".", + "include", + ], + "crypto/x509/x_attrib.o" => + [ + ".", + "include", + ], + "crypto/x509/x_crl.o" => + [ + ".", + "include", + ], + "crypto/x509/x_exten.o" => + [ + ".", + "include", + ], + "crypto/x509/x_name.o" => + [ + ".", + "include", + ], + "crypto/x509/x_pubkey.o" => + [ + ".", + "include", + ], + "crypto/x509/x_req.o" => + [ + ".", + "include", + ], + "crypto/x509/x_x509.o" => + [ + ".", + "include", + ], + "crypto/x509/x_x509a.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_cache.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_data.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_lib.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_map.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_node.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_tree.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_addr.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_admis.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_akey.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_akeya.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_alt.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_asid.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_bcons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_bitst.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_conf.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_cpols.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_crld.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_enum.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_extku.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_genn.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_ia5.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_info.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_int.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_lib.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_ncons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pci.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pcia.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pcons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pku.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pmaps.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_prn.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_purp.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_skey.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_sxnet.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_tlsf.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_utl.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3err.o" => + [ + ".", + "include", + ], + "engines/e_capi.o" => + [ + ".", + "include", + ], + "engines/e_padlock.o" => + [ + ".", + "include", + ], + "fuzz/asn1.o" => + [ + "include", + ], + "fuzz/asn1parse.o" => + [ + "include", + ], + "fuzz/bignum.o" => + [ + "include", + ], + "fuzz/bndiv.o" => + [ + "include", + ], + "fuzz/client.o" => + [ + "include", + ], + "fuzz/cms.o" => + [ + "include", + ], + "fuzz/conf.o" => + [ + "include", + ], + "fuzz/crl.o" => + [ + "include", + ], + "fuzz/ct.o" => + [ + "include", + ], + "fuzz/server.o" => + [ + "include", + ], + "fuzz/test-corpus.o" => + [ + "include", + ], + "fuzz/x509.o" => + [ + "include", + ], + "include/crypto/bn_conf.h" => + [ + ".", + ], + "include/crypto/dso_conf.h" => + [ + ".", + ], + "include/openssl/opensslconf.h" => + [ + ".", + ], + "ssl/bio_ssl.o" => + [ + ".", + "include", + ], + "ssl/d1_lib.o" => + [ + ".", + "include", + ], + "ssl/d1_msg.o" => + [ + ".", + "include", + ], + "ssl/d1_srtp.o" => + [ + ".", + "include", + ], + "ssl/methods.o" => + [ + ".", + "include", + ], + "ssl/packet.o" => + [ + ".", + "include", + ], + "ssl/pqueue.o" => + [ + ".", + "include", + ], + "ssl/record/dtls1_bitmap.o" => + [ + ".", + "include", + ], + "ssl/record/rec_layer_d1.o" => + [ + ".", + "include", + ], + "ssl/record/rec_layer_s3.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_buffer.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_record.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_record_tls13.o" => + [ + ".", + "include", + ], + "ssl/s3_cbc.o" => + [ + ".", + "include", + ], + "ssl/s3_enc.o" => + [ + ".", + "include", + ], + "ssl/s3_lib.o" => + [ + ".", + "include", + ], + "ssl/s3_msg.o" => + [ + ".", + "include", + ], + "ssl/ssl_asn1.o" => + [ + ".", + "include", + ], + "ssl/ssl_cert.o" => + [ + ".", + "include", + ], + "ssl/ssl_ciph.o" => + [ + ".", + "include", + ], + "ssl/ssl_conf.o" => + [ + ".", + "include", + ], + "ssl/ssl_err.o" => + [ + ".", + "include", + ], + "ssl/ssl_init.o" => + [ + ".", + "include", + ], + "ssl/ssl_lib.o" => + [ + ".", + "include", + ], + "ssl/ssl_mcnf.o" => + [ + ".", + "include", + ], + "ssl/ssl_rsa.o" => + [ + ".", + "include", + ], + "ssl/ssl_sess.o" => + [ + ".", + "include", + ], + "ssl/ssl_stat.o" => + [ + ".", + "include", + ], + "ssl/ssl_txt.o" => + [ + ".", + "include", + ], + "ssl/ssl_utst.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_clnt.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_cust.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_srvr.o" => + [ + ".", + "include", + ], + "ssl/statem/statem.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_clnt.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_dtls.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_lib.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_srvr.o" => + [ + ".", + "include", + ], + "ssl/t1_enc.o" => + [ + ".", + "include", + ], + "ssl/t1_lib.o" => + [ + ".", + "include", + ], + "ssl/t1_trce.o" => + [ + ".", + "include", + ], + "ssl/tls13_enc.o" => + [ + ".", + "include", + ], + "ssl/tls_srp.o" => + [ + ".", + "include", + ], + "test/aborttest.o" => + [ + "include", + ], + "test/afalgtest.o" => + [ + "include", + ], + "test/asn1_decode_test.o" => + [ + "include", + ], + "test/asn1_encode_test.o" => + [ + "include", + ], + "test/asn1_internal_test.o" => + [ + ".", + "include", + ], + "test/asn1_string_table_test.o" => + [ + "include", + ], + "test/asn1_time_test.o" => + [ + "include", + ], + "test/asynciotest.o" => + [ + "include", + ], + "test/asynctest.o" => + [ + "include", + ], + "test/bad_dtls_test.o" => + [ + "include", + ], + "test/bftest.o" => + [ + "include", + ], + "test/bio_callback_test.o" => + [ + "include", + ], + "test/bio_enc_test.o" => + [ + "include", + ], + "test/bio_memleak_test.o" => + [ + "include", + ], + "test/bioprinttest.o" => + [ + "include", + ], + "test/bntest.o" => + [ + "include", + ], + "test/buildtest_aes.o" => + [ + "include", + ], + "test/buildtest_asn1.o" => + [ + "include", + ], + "test/buildtest_asn1t.o" => + [ + "include", + ], + "test/buildtest_async.o" => + [ + "include", + ], + "test/buildtest_bio.o" => + [ + "include", + ], + "test/buildtest_blowfish.o" => + [ + "include", + ], + "test/buildtest_bn.o" => + [ + "include", + ], + "test/buildtest_buffer.o" => + [ + "include", + ], + "test/buildtest_camellia.o" => + [ + "include", + ], + "test/buildtest_cast.o" => + [ + "include", + ], + "test/buildtest_cmac.o" => + [ + "include", + ], + "test/buildtest_cms.o" => + [ + "include", + ], + "test/buildtest_conf.o" => + [ + "include", + ], + "test/buildtest_conf_api.o" => + [ + "include", + ], + "test/buildtest_crypto.o" => + [ + "include", + ], + "test/buildtest_ct.o" => + [ + "include", + ], + "test/buildtest_des.o" => + [ + "include", + ], + "test/buildtest_dh.o" => + [ + "include", + ], + "test/buildtest_dsa.o" => + [ + "include", + ], + "test/buildtest_dtls1.o" => + [ + "include", + ], + "test/buildtest_e_os2.o" => + [ + "include", + ], + "test/buildtest_ebcdic.o" => + [ + "include", + ], + "test/buildtest_ec.o" => + [ + "include", + ], + "test/buildtest_ecdh.o" => + [ + "include", + ], + "test/buildtest_ecdsa.o" => + [ + "include", + ], + "test/buildtest_engine.o" => + [ + "include", + ], + "test/buildtest_evp.o" => + [ + "include", + ], + "test/buildtest_hmac.o" => + [ + "include", + ], + "test/buildtest_idea.o" => + [ + "include", + ], + "test/buildtest_kdf.o" => + [ + "include", + ], + "test/buildtest_lhash.o" => + [ + "include", + ], + "test/buildtest_md4.o" => + [ + "include", + ], + "test/buildtest_md5.o" => + [ + "include", + ], + "test/buildtest_mdc2.o" => + [ + "include", + ], + "test/buildtest_modes.o" => + [ + "include", + ], + "test/buildtest_obj_mac.o" => + [ + "include", + ], + "test/buildtest_objects.o" => + [ + "include", + ], + "test/buildtest_ocsp.o" => + [ + "include", + ], + "test/buildtest_opensslv.o" => + [ + "include", + ], + "test/buildtest_ossl_typ.o" => + [ + "include", + ], + "test/buildtest_pem.o" => + [ + "include", + ], + "test/buildtest_pem2.o" => + [ + "include", + ], + "test/buildtest_pkcs12.o" => + [ + "include", + ], + "test/buildtest_pkcs7.o" => + [ + "include", + ], + "test/buildtest_rand.o" => + [ + "include", + ], + "test/buildtest_rand_drbg.o" => + [ + "include", + ], + "test/buildtest_rc2.o" => + [ + "include", + ], + "test/buildtest_rc4.o" => + [ + "include", + ], + "test/buildtest_ripemd.o" => + [ + "include", + ], + "test/buildtest_rsa.o" => + [ + "include", + ], + "test/buildtest_safestack.o" => + [ + "include", + ], + "test/buildtest_seed.o" => + [ + "include", + ], + "test/buildtest_sha.o" => + [ + "include", + ], + "test/buildtest_srp.o" => + [ + "include", + ], + "test/buildtest_srtp.o" => + [ + "include", + ], + "test/buildtest_ssl.o" => + [ + "include", + ], + "test/buildtest_ssl2.o" => + [ + "include", + ], + "test/buildtest_stack.o" => + [ + "include", + ], + "test/buildtest_store.o" => + [ + "include", + ], + "test/buildtest_symhacks.o" => + [ + "include", + ], + "test/buildtest_tls1.o" => + [ + "include", + ], + "test/buildtest_ts.o" => + [ + "include", + ], + "test/buildtest_txt_db.o" => + [ + "include", + ], + "test/buildtest_ui.o" => + [ + "include", + ], + "test/buildtest_whrlpool.o" => + [ + "include", + ], + "test/buildtest_x509.o" => + [ + "include", + ], + "test/buildtest_x509_vfy.o" => + [ + "include", + ], + "test/buildtest_x509v3.o" => + [ + "include", + ], + "test/casttest.o" => + [ + "include", + ], + "test/chacha_internal_test.o" => + [ + ".", + "include", + ], + "test/cipher_overhead_test.o" => + [ + ".", + "include", + ], + "test/cipherbytes_test.o" => + [ + "include", + ], + "test/cipherlist_test.o" => + [ + "include", + ], + "test/ciphername_test.o" => + [ + "include", + ], + "test/clienthellotest.o" => + [ + "include", + ], + "test/cmactest.o" => + [ + "include", + ], + "test/cmsapitest.o" => + [ + "include", + ], + "test/conf_include_test.o" => + [ + "include", + ], + "test/constant_time_test.o" => + [ + "include", + ], + "test/crltest.o" => + [ + "include", + ], + "test/ct_test.o" => + [ + "include", + ], + "test/ctype_internal_test.o" => + [ + ".", + "include", + ], + "test/curve448_internal_test.o" => + [ + ".", + "include", + "crypto/ec/curve448", + ], + "test/d2i_test.o" => + [ + "include", + ], + "test/danetest.o" => + [ + "include", + ], + "test/destest.o" => + [ + "include", + ], + "test/dhtest.o" => + [ + "include", + ], + "test/drbg_cavs_data.o" => + [ + "include", + "test", + ".", + ], + "test/drbg_cavs_test.o" => + [ + "include", + "test", + ".", + ], + "test/drbgtest.o" => + [ + "include", + ], + "test/dsa_no_digest_size_test.o" => + [ + "include", + ], + "test/dsatest.o" => + [ + "include", + ], + "test/dtls_mtu_test.o" => + [ + ".", + "include", + ], + "test/dtlstest.o" => + [ + "include", + ], + "test/dtlsv1listentest.o" => + [ + "include", + ], + "test/ec_internal_test.o" => + [ + "include", + "crypto/ec", + ], + "test/ecdsatest.o" => + [ + "include", + ], + "test/ecstresstest.o" => + [ + "include", + ], + "test/ectest.o" => + [ + "include", + ], + "test/enginetest.o" => + [ + "include", + ], + "test/errtest.o" => + [ + "include", + ], + "test/evp_extra_test.o" => + [ + "include", + ], + "test/evp_test.o" => + [ + "include", + ], + "test/exdatatest.o" => + [ + "include", + ], + "test/exptest.o" => + [ + "include", + ], + "test/fatalerrtest.o" => + [ + "include", + ], + "test/gmdifftest.o" => + [ + "include", + ], + "test/gosttest.o" => + [ + "include", + ".", + ], + "test/handshake_helper.o" => + [ + ".", + "include", + ], + "test/hmactest.o" => + [ + "include", + ], + "test/ideatest.o" => + [ + "include", + ], + "test/igetest.o" => + [ + "include", + ], + "test/lhash_test.o" => + [ + "include", + ], + "test/md2test.o" => + [ + "include", + ], + "test/mdc2_internal_test.o" => + [ + ".", + "include", + ], + "test/mdc2test.o" => + [ + "include", + ], + "test/memleaktest.o" => + [ + "include", + ], + "test/modes_internal_test.o" => + [ + ".", + "include", + ], + "test/ocspapitest.o" => + [ + "include", + ], + "test/packettest.o" => + [ + "include", + ], + "test/pbelutest.o" => + [ + "include", + ], + "test/pemtest.o" => + [ + "include", + ], + "test/pkey_meth_kdf_test.o" => + [ + "include", + ], + "test/pkey_meth_test.o" => + [ + "include", + ], + "test/poly1305_internal_test.o" => + [ + ".", + "include", + ], + "test/rc2test.o" => + [ + "include", + ], + "test/rc4test.o" => + [ + "include", + ], + "test/rc5test.o" => + [ + "include", + ], + "test/rdrand_sanitytest.o" => + [ + "include", + ], + "test/recordlentest.o" => + [ + "include", + ], + "test/rsa_complex.o" => + [ + "include", + ], + "test/rsa_mp_test.o" => + [ + "include", + ], + "test/rsa_test.o" => + [ + "include", + ], + "test/sanitytest.o" => + [ + "include", + ], + "test/secmemtest.o" => + [ + "include", + ], + "test/servername_test.o" => + [ + "include", + ], + "test/siphash_internal_test.o" => + [ + ".", + "include", + ], + "test/sm2_internal_test.o" => + [ + "include", + ], + "test/sm4_internal_test.o" => + [ + ".", + "include", + ], + "test/srptest.o" => + [ + "include", + ], + "test/ssl_cert_table_internal_test.o" => + [ + ".", + "include", + ], + "test/ssl_ctx_test.o" => + [ + "include", + ], + "test/ssl_test.o" => + [ + "include", + ], + "test/ssl_test_ctx.o" => + [ + "include", + ], + "test/ssl_test_ctx_test.o" => + [ + "include", + ], + "test/sslapitest.o" => + [ + "include", + ".", + ], + "test/sslbuffertest.o" => + [ + "include", + ], + "test/sslcorrupttest.o" => + [ + "include", + ], + "test/ssltest_old.o" => + [ + ".", + "include", + ], + "test/ssltestlib.o" => + [ + ".", + "include", + ], + "test/stack_test.o" => + [ + "include", + ], + "test/sysdefaulttest.o" => + [ + "include", + ], + "test/test_test.o" => + [ + "include", + ], + "test/testutil/basic_output.o" => + [ + "include", + ], + "test/testutil/cb.o" => + [ + "include", + ], + "test/testutil/driver.o" => + [ + "include", + ], + "test/testutil/format_output.o" => + [ + "include", + ], + "test/testutil/main.o" => + [ + "include", + ], + "test/testutil/output_helpers.o" => + [ + "include", + ], + "test/testutil/random.o" => + [ + "include", + ], + "test/testutil/stanza.o" => + [ + "include", + ], + "test/testutil/tap_bio.o" => + [ + "include", + ], + "test/testutil/test_cleanup.o" => + [ + "include", + ], + "test/testutil/tests.o" => + [ + "include", + ], + "test/testutil/testutil_init.o" => + [ + "include", + ], + "test/threadstest.o" => + [ + "include", + ], + "test/time_offset_test.o" => + [ + "include", + ], + "test/tls13ccstest.o" => + [ + "include", + ], + "test/tls13encryptiontest.o" => + [ + ".", + "include", + ], + "test/uitest.o" => + [ + ".", + "include", + "apps", + ], + "test/v3ext.o" => + [ + "include", + ], + "test/v3nametest.o" => + [ + "include", + ], + "test/verify_extra_test.o" => + [ + "include", + ], + "test/versions.o" => + [ + "include", + ], + "test/wpackettest.o" => + [ + "include", + ], + "test/x509_check_cert_pkey_test.o" => + [ + "include", + ], + "test/x509_dup_cert_test.o" => + [ + "include", + ], + "test/x509_internal_test.o" => + [ + ".", + "include", + ], + "test/x509_time_test.o" => + [ + "include", + ], + "test/x509aux.o" => + [ + "include", + ], + }, + "install" => + { + "libraries" => + [ + "libcrypto", + "libssl", + ], + "programs" => + [ + "apps/openssl", + ], + "scripts" => + [ + "apps/CA.pl", + "apps/tsget.pl", + "tools/c_rehash", + ], + }, + "ldadd" => + { + }, + "libraries" => + [ + "apps/libapps.a", + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "overrides" => + [ + ], + "programs" => + [ + "apps/openssl", + "fuzz/asn1-test", + "fuzz/asn1parse-test", + "fuzz/bignum-test", + "fuzz/bndiv-test", + "fuzz/client-test", + "fuzz/cms-test", + "fuzz/conf-test", + "fuzz/crl-test", + "fuzz/ct-test", + "fuzz/server-test", + "fuzz/x509-test", + "test/aborttest", + "test/afalgtest", + "test/asn1_decode_test", + "test/asn1_encode_test", + "test/asn1_internal_test", + "test/asn1_string_table_test", + "test/asn1_time_test", + "test/asynciotest", + "test/asynctest", + "test/bad_dtls_test", + "test/bftest", + "test/bio_callback_test", + "test/bio_enc_test", + "test/bio_memleak_test", + "test/bioprinttest", + "test/bntest", + "test/buildtest_c_aes", + "test/buildtest_c_asn1", + "test/buildtest_c_asn1t", + "test/buildtest_c_async", + "test/buildtest_c_bio", + "test/buildtest_c_blowfish", + "test/buildtest_c_bn", + "test/buildtest_c_buffer", + "test/buildtest_c_camellia", + "test/buildtest_c_cast", + "test/buildtest_c_cmac", + "test/buildtest_c_cms", + "test/buildtest_c_conf", + "test/buildtest_c_conf_api", + "test/buildtest_c_crypto", + "test/buildtest_c_ct", + "test/buildtest_c_des", + "test/buildtest_c_dh", + "test/buildtest_c_dsa", + "test/buildtest_c_dtls1", + "test/buildtest_c_e_os2", + "test/buildtest_c_ebcdic", + "test/buildtest_c_ec", + "test/buildtest_c_ecdh", + "test/buildtest_c_ecdsa", + "test/buildtest_c_engine", + "test/buildtest_c_evp", + "test/buildtest_c_hmac", + "test/buildtest_c_idea", + "test/buildtest_c_kdf", + "test/buildtest_c_lhash", + "test/buildtest_c_md4", + "test/buildtest_c_md5", + "test/buildtest_c_mdc2", + "test/buildtest_c_modes", + "test/buildtest_c_obj_mac", + "test/buildtest_c_objects", + "test/buildtest_c_ocsp", + "test/buildtest_c_opensslv", + "test/buildtest_c_ossl_typ", + "test/buildtest_c_pem", + "test/buildtest_c_pem2", + "test/buildtest_c_pkcs12", + "test/buildtest_c_pkcs7", + "test/buildtest_c_rand", + "test/buildtest_c_rand_drbg", + "test/buildtest_c_rc2", + "test/buildtest_c_rc4", + "test/buildtest_c_ripemd", + "test/buildtest_c_rsa", + "test/buildtest_c_safestack", + "test/buildtest_c_seed", + "test/buildtest_c_sha", + "test/buildtest_c_srp", + "test/buildtest_c_srtp", + "test/buildtest_c_ssl", + "test/buildtest_c_ssl2", + "test/buildtest_c_stack", + "test/buildtest_c_store", + "test/buildtest_c_symhacks", + "test/buildtest_c_tls1", + "test/buildtest_c_ts", + "test/buildtest_c_txt_db", + "test/buildtest_c_ui", + "test/buildtest_c_whrlpool", + "test/buildtest_c_x509", + "test/buildtest_c_x509_vfy", + "test/buildtest_c_x509v3", + "test/casttest", + "test/chacha_internal_test", + "test/cipher_overhead_test", + "test/cipherbytes_test", + "test/cipherlist_test", + "test/ciphername_test", + "test/clienthellotest", + "test/cmactest", + "test/cmsapitest", + "test/conf_include_test", + "test/constant_time_test", + "test/crltest", + "test/ct_test", + "test/ctype_internal_test", + "test/curve448_internal_test", + "test/d2i_test", + "test/danetest", + "test/destest", + "test/dhtest", + "test/drbg_cavs_test", + "test/drbgtest", + "test/dsa_no_digest_size_test", + "test/dsatest", + "test/dtls_mtu_test", + "test/dtlstest", + "test/dtlsv1listentest", + "test/ec_internal_test", + "test/ecdsatest", + "test/ecstresstest", + "test/ectest", + "test/enginetest", + "test/errtest", + "test/evp_extra_test", + "test/evp_test", + "test/exdatatest", + "test/exptest", + "test/fatalerrtest", + "test/gmdifftest", + "test/gosttest", + "test/hmactest", + "test/ideatest", + "test/igetest", + "test/lhash_test", + "test/md2test", + "test/mdc2_internal_test", + "test/mdc2test", + "test/memleaktest", + "test/modes_internal_test", + "test/ocspapitest", + "test/packettest", + "test/pbelutest", + "test/pemtest", + "test/pkey_meth_kdf_test", + "test/pkey_meth_test", + "test/poly1305_internal_test", + "test/rc2test", + "test/rc4test", + "test/rc5test", + "test/rdrand_sanitytest", + "test/recordlentest", + "test/rsa_complex", + "test/rsa_mp_test", + "test/rsa_test", + "test/sanitytest", + "test/secmemtest", + "test/servername_test", + "test/siphash_internal_test", + "test/sm2_internal_test", + "test/sm4_internal_test", + "test/srptest", + "test/ssl_cert_table_internal_test", + "test/ssl_ctx_test", + "test/ssl_test", + "test/ssl_test_ctx_test", + "test/sslapitest", + "test/sslbuffertest", + "test/sslcorrupttest", + "test/ssltest_old", + "test/stack_test", + "test/sysdefaulttest", + "test/test_test", + "test/threadstest", + "test/time_offset_test", + "test/tls13ccstest", + "test/tls13encryptiontest", + "test/uitest", + "test/v3ext", + "test/v3nametest", + "test/verify_extra_test", + "test/versions", + "test/wpackettest", + "test/x509_check_cert_pkey_test", + "test/x509_dup_cert_test", + "test/x509_internal_test", + "test/x509_time_test", + "test/x509aux", + ], + "rawlines" => + [ + "##### SHA assembler implementations", + "", + "# GNU make \"catch all\"", + "crypto/sha/sha1-%.S: crypto/sha/asm/sha1-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/sha/sha256-%.S: crypto/sha/asm/sha512-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/sha/sha512-%.S: crypto/sha/asm/sha512-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/poly1305/poly1305-%.S: crypto/poly1305/asm/poly1305-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "##### AES assembler implementations", + "", + "# GNU make \"catch all\"", + "crypto/aes/aes-%.S: crypto/aes/asm/aes-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/aes/bsaes-%.S: crypto/aes/asm/bsaes-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "", + "# GNU make \"catch all\"", + "crypto/rc4/rc4-%.s: crypto/rc4/asm/rc4-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "##### CHACHA assembler implementations", + "", + "crypto/chacha/chacha-%.S: crypto/chacha/asm/chacha-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "# GNU make \"catch all\"", + "crypto/modes/ghash-%.S: crypto/modes/asm/ghash-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/ec/ecp_nistz256-%.S: crypto/ec/asm/ecp_nistz256-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + ], + "rename" => + { + }, + "scripts" => + [ + "apps/CA.pl", + "apps/tsget.pl", + "tools/c_rehash", + "util/shlib_wrap.sh", + ], + "shared_sources" => + { + }, + "sources" => + { + "apps/CA.pl" => + [ + "apps/CA.pl.in", + ], + "apps/app_rand.o" => + [ + "apps/app_rand.c", + ], + "apps/apps.o" => + [ + "apps/apps.c", + ], + "apps/asn1pars.o" => + [ + "apps/asn1pars.c", + ], + "apps/bf_prefix.o" => + [ + "apps/bf_prefix.c", + ], + "apps/ca.o" => + [ + "apps/ca.c", + ], + "apps/ciphers.o" => + [ + "apps/ciphers.c", + ], + "apps/cms.o" => + [ + "apps/cms.c", + ], + "apps/crl.o" => + [ + "apps/crl.c", + ], + "apps/crl2p7.o" => + [ + "apps/crl2p7.c", + ], + "apps/dgst.o" => + [ + "apps/dgst.c", + ], + "apps/dhparam.o" => + [ + "apps/dhparam.c", + ], + "apps/dsa.o" => + [ + "apps/dsa.c", + ], + "apps/dsaparam.o" => + [ + "apps/dsaparam.c", + ], + "apps/ec.o" => + [ + "apps/ec.c", + ], + "apps/ecparam.o" => + [ + "apps/ecparam.c", + ], + "apps/enc.o" => + [ + "apps/enc.c", + ], + "apps/engine.o" => + [ + "apps/engine.c", + ], + "apps/errstr.o" => + [ + "apps/errstr.c", + ], + "apps/gendsa.o" => + [ + "apps/gendsa.c", + ], + "apps/genpkey.o" => + [ + "apps/genpkey.c", + ], + "apps/genrsa.o" => + [ + "apps/genrsa.c", + ], + "apps/libapps.a" => + [ + "apps/app_rand.o", + "apps/apps.o", + "apps/bf_prefix.o", + "apps/opt.o", + "apps/s_cb.o", + "apps/s_socket.o", + ], + "apps/nseq.o" => + [ + "apps/nseq.c", + ], + "apps/ocsp.o" => + [ + "apps/ocsp.c", + ], + "apps/openssl" => + [ + "apps/asn1pars.o", + "apps/ca.o", + "apps/ciphers.o", + "apps/cms.o", + "apps/crl.o", + "apps/crl2p7.o", + "apps/dgst.o", + "apps/dhparam.o", + "apps/dsa.o", + "apps/dsaparam.o", + "apps/ec.o", + "apps/ecparam.o", + "apps/enc.o", + "apps/engine.o", + "apps/errstr.o", + "apps/gendsa.o", + "apps/genpkey.o", + "apps/genrsa.o", + "apps/nseq.o", + "apps/ocsp.o", + "apps/openssl.o", + "apps/passwd.o", + "apps/pkcs12.o", + "apps/pkcs7.o", + "apps/pkcs8.o", + "apps/pkey.o", + "apps/pkeyparam.o", + "apps/pkeyutl.o", + "apps/prime.o", + "apps/rand.o", + "apps/rehash.o", + "apps/req.o", + "apps/rsa.o", + "apps/rsautl.o", + "apps/s_client.o", + "apps/s_server.o", + "apps/s_time.o", + "apps/sess_id.o", + "apps/smime.o", + "apps/speed.o", + "apps/spkac.o", + "apps/srp.o", + "apps/storeutl.o", + "apps/ts.o", + "apps/verify.o", + "apps/version.o", + "apps/x509.o", + ], + "apps/openssl.o" => + [ + "apps/openssl.c", + ], + "apps/opt.o" => + [ + "apps/opt.c", + ], + "apps/passwd.o" => + [ + "apps/passwd.c", + ], + "apps/pkcs12.o" => + [ + "apps/pkcs12.c", + ], + "apps/pkcs7.o" => + [ + "apps/pkcs7.c", + ], + "apps/pkcs8.o" => + [ + "apps/pkcs8.c", + ], + "apps/pkey.o" => + [ + "apps/pkey.c", + ], + "apps/pkeyparam.o" => + [ + "apps/pkeyparam.c", + ], + "apps/pkeyutl.o" => + [ + "apps/pkeyutl.c", + ], + "apps/prime.o" => + [ + "apps/prime.c", + ], + "apps/rand.o" => + [ + "apps/rand.c", + ], + "apps/rehash.o" => + [ + "apps/rehash.c", + ], + "apps/req.o" => + [ + "apps/req.c", + ], + "apps/rsa.o" => + [ + "apps/rsa.c", + ], + "apps/rsautl.o" => + [ + "apps/rsautl.c", + ], + "apps/s_cb.o" => + [ + "apps/s_cb.c", + ], + "apps/s_client.o" => + [ + "apps/s_client.c", + ], + "apps/s_server.o" => + [ + "apps/s_server.c", + ], + "apps/s_socket.o" => + [ + "apps/s_socket.c", + ], + "apps/s_time.o" => + [ + "apps/s_time.c", + ], + "apps/sess_id.o" => + [ + "apps/sess_id.c", + ], + "apps/smime.o" => + [ + "apps/smime.c", + ], + "apps/speed.o" => + [ + "apps/speed.c", + ], + "apps/spkac.o" => + [ + "apps/spkac.c", + ], + "apps/srp.o" => + [ + "apps/srp.c", + ], + "apps/storeutl.o" => + [ + "apps/storeutl.c", + ], + "apps/ts.o" => + [ + "apps/ts.c", + ], + "apps/tsget.pl" => + [ + "apps/tsget.in", + ], + "apps/verify.o" => + [ + "apps/verify.c", + ], + "apps/version.o" => + [ + "apps/version.c", + ], + "apps/x509.o" => + [ + "apps/x509.c", + ], + "crypto/aes/aes_cbc.o" => + [ + "crypto/aes/aes_cbc.c", + ], + "crypto/aes/aes_cfb.o" => + [ + "crypto/aes/aes_cfb.c", + ], + "crypto/aes/aes_core.o" => + [ + "crypto/aes/aes_core.c", + ], + "crypto/aes/aes_ecb.o" => + [ + "crypto/aes/aes_ecb.c", + ], + "crypto/aes/aes_ige.o" => + [ + "crypto/aes/aes_ige.c", + ], + "crypto/aes/aes_misc.o" => + [ + "crypto/aes/aes_misc.c", + ], + "crypto/aes/aes_ofb.o" => + [ + "crypto/aes/aes_ofb.c", + ], + "crypto/aes/aes_wrap.o" => + [ + "crypto/aes/aes_wrap.c", + ], + "crypto/aes/aesv8-armx.o" => + [ + "crypto/aes/aesv8-armx.S", + ], + "crypto/aes/vpaes-armv8.o" => + [ + "crypto/aes/vpaes-armv8.S", + ], + "crypto/aria/aria.o" => + [ + "crypto/aria/aria.c", + ], + "crypto/arm64cpuid.o" => + [ + "crypto/arm64cpuid.S", + ], + "crypto/armcap.o" => + [ + "crypto/armcap.c", + ], + "crypto/asn1/a_bitstr.o" => + [ + "crypto/asn1/a_bitstr.c", + ], + "crypto/asn1/a_d2i_fp.o" => + [ + "crypto/asn1/a_d2i_fp.c", + ], + "crypto/asn1/a_digest.o" => + [ + "crypto/asn1/a_digest.c", + ], + "crypto/asn1/a_dup.o" => + [ + "crypto/asn1/a_dup.c", + ], + "crypto/asn1/a_gentm.o" => + [ + "crypto/asn1/a_gentm.c", + ], + "crypto/asn1/a_i2d_fp.o" => + [ + "crypto/asn1/a_i2d_fp.c", + ], + "crypto/asn1/a_int.o" => + [ + "crypto/asn1/a_int.c", + ], + "crypto/asn1/a_mbstr.o" => + [ + "crypto/asn1/a_mbstr.c", + ], + "crypto/asn1/a_object.o" => + [ + "crypto/asn1/a_object.c", + ], + "crypto/asn1/a_octet.o" => + [ + "crypto/asn1/a_octet.c", + ], + "crypto/asn1/a_print.o" => + [ + "crypto/asn1/a_print.c", + ], + "crypto/asn1/a_sign.o" => + [ + "crypto/asn1/a_sign.c", + ], + "crypto/asn1/a_strex.o" => + [ + "crypto/asn1/a_strex.c", + ], + "crypto/asn1/a_strnid.o" => + [ + "crypto/asn1/a_strnid.c", + ], + "crypto/asn1/a_time.o" => + [ + "crypto/asn1/a_time.c", + ], + "crypto/asn1/a_type.o" => + [ + "crypto/asn1/a_type.c", + ], + "crypto/asn1/a_utctm.o" => + [ + "crypto/asn1/a_utctm.c", + ], + "crypto/asn1/a_utf8.o" => + [ + "crypto/asn1/a_utf8.c", + ], + "crypto/asn1/a_verify.o" => + [ + "crypto/asn1/a_verify.c", + ], + "crypto/asn1/ameth_lib.o" => + [ + "crypto/asn1/ameth_lib.c", + ], + "crypto/asn1/asn1_err.o" => + [ + "crypto/asn1/asn1_err.c", + ], + "crypto/asn1/asn1_gen.o" => + [ + "crypto/asn1/asn1_gen.c", + ], + "crypto/asn1/asn1_item_list.o" => + [ + "crypto/asn1/asn1_item_list.c", + ], + "crypto/asn1/asn1_lib.o" => + [ + "crypto/asn1/asn1_lib.c", + ], + "crypto/asn1/asn1_par.o" => + [ + "crypto/asn1/asn1_par.c", + ], + "crypto/asn1/asn_mime.o" => + [ + "crypto/asn1/asn_mime.c", + ], + "crypto/asn1/asn_moid.o" => + [ + "crypto/asn1/asn_moid.c", + ], + "crypto/asn1/asn_mstbl.o" => + [ + "crypto/asn1/asn_mstbl.c", + ], + "crypto/asn1/asn_pack.o" => + [ + "crypto/asn1/asn_pack.c", + ], + "crypto/asn1/bio_asn1.o" => + [ + "crypto/asn1/bio_asn1.c", + ], + "crypto/asn1/bio_ndef.o" => + [ + "crypto/asn1/bio_ndef.c", + ], + "crypto/asn1/d2i_pr.o" => + [ + "crypto/asn1/d2i_pr.c", + ], + "crypto/asn1/d2i_pu.o" => + [ + "crypto/asn1/d2i_pu.c", + ], + "crypto/asn1/evp_asn1.o" => + [ + "crypto/asn1/evp_asn1.c", + ], + "crypto/asn1/f_int.o" => + [ + "crypto/asn1/f_int.c", + ], + "crypto/asn1/f_string.o" => + [ + "crypto/asn1/f_string.c", + ], + "crypto/asn1/i2d_pr.o" => + [ + "crypto/asn1/i2d_pr.c", + ], + "crypto/asn1/i2d_pu.o" => + [ + "crypto/asn1/i2d_pu.c", + ], + "crypto/asn1/n_pkey.o" => + [ + "crypto/asn1/n_pkey.c", + ], + "crypto/asn1/nsseq.o" => + [ + "crypto/asn1/nsseq.c", + ], + "crypto/asn1/p5_pbe.o" => + [ + "crypto/asn1/p5_pbe.c", + ], + "crypto/asn1/p5_pbev2.o" => + [ + "crypto/asn1/p5_pbev2.c", + ], + "crypto/asn1/p5_scrypt.o" => + [ + "crypto/asn1/p5_scrypt.c", + ], + "crypto/asn1/p8_pkey.o" => + [ + "crypto/asn1/p8_pkey.c", + ], + "crypto/asn1/t_bitst.o" => + [ + "crypto/asn1/t_bitst.c", + ], + "crypto/asn1/t_pkey.o" => + [ + "crypto/asn1/t_pkey.c", + ], + "crypto/asn1/t_spki.o" => + [ + "crypto/asn1/t_spki.c", + ], + "crypto/asn1/tasn_dec.o" => + [ + "crypto/asn1/tasn_dec.c", + ], + "crypto/asn1/tasn_enc.o" => + [ + "crypto/asn1/tasn_enc.c", + ], + "crypto/asn1/tasn_fre.o" => + [ + "crypto/asn1/tasn_fre.c", + ], + "crypto/asn1/tasn_new.o" => + [ + "crypto/asn1/tasn_new.c", + ], + "crypto/asn1/tasn_prn.o" => + [ + "crypto/asn1/tasn_prn.c", + ], + "crypto/asn1/tasn_scn.o" => + [ + "crypto/asn1/tasn_scn.c", + ], + "crypto/asn1/tasn_typ.o" => + [ + "crypto/asn1/tasn_typ.c", + ], + "crypto/asn1/tasn_utl.o" => + [ + "crypto/asn1/tasn_utl.c", + ], + "crypto/asn1/x_algor.o" => + [ + "crypto/asn1/x_algor.c", + ], + "crypto/asn1/x_bignum.o" => + [ + "crypto/asn1/x_bignum.c", + ], + "crypto/asn1/x_info.o" => + [ + "crypto/asn1/x_info.c", + ], + "crypto/asn1/x_int64.o" => + [ + "crypto/asn1/x_int64.c", + ], + "crypto/asn1/x_long.o" => + [ + "crypto/asn1/x_long.c", + ], + "crypto/asn1/x_pkey.o" => + [ + "crypto/asn1/x_pkey.c", + ], + "crypto/asn1/x_sig.o" => + [ + "crypto/asn1/x_sig.c", + ], + "crypto/asn1/x_spki.o" => + [ + "crypto/asn1/x_spki.c", + ], + "crypto/asn1/x_val.o" => + [ + "crypto/asn1/x_val.c", + ], + "crypto/async/arch/async_null.o" => + [ + "crypto/async/arch/async_null.c", + ], + "crypto/async/arch/async_posix.o" => + [ + "crypto/async/arch/async_posix.c", + ], + "crypto/async/arch/async_win.o" => + [ + "crypto/async/arch/async_win.c", + ], + "crypto/async/async.o" => + [ + "crypto/async/async.c", + ], + "crypto/async/async_err.o" => + [ + "crypto/async/async_err.c", + ], + "crypto/async/async_wait.o" => + [ + "crypto/async/async_wait.c", + ], + "crypto/bf/bf_cfb64.o" => + [ + "crypto/bf/bf_cfb64.c", + ], + "crypto/bf/bf_ecb.o" => + [ + "crypto/bf/bf_ecb.c", + ], + "crypto/bf/bf_enc.o" => + [ + "crypto/bf/bf_enc.c", + ], + "crypto/bf/bf_ofb64.o" => + [ + "crypto/bf/bf_ofb64.c", + ], + "crypto/bf/bf_skey.o" => + [ + "crypto/bf/bf_skey.c", + ], + "crypto/bio/b_addr.o" => + [ + "crypto/bio/b_addr.c", + ], + "crypto/bio/b_dump.o" => + [ + "crypto/bio/b_dump.c", + ], + "crypto/bio/b_print.o" => + [ + "crypto/bio/b_print.c", + ], + "crypto/bio/b_sock.o" => + [ + "crypto/bio/b_sock.c", + ], + "crypto/bio/b_sock2.o" => + [ + "crypto/bio/b_sock2.c", + ], + "crypto/bio/bf_buff.o" => + [ + "crypto/bio/bf_buff.c", + ], + "crypto/bio/bf_lbuf.o" => + [ + "crypto/bio/bf_lbuf.c", + ], + "crypto/bio/bf_nbio.o" => + [ + "crypto/bio/bf_nbio.c", + ], + "crypto/bio/bf_null.o" => + [ + "crypto/bio/bf_null.c", + ], + "crypto/bio/bio_cb.o" => + [ + "crypto/bio/bio_cb.c", + ], + "crypto/bio/bio_err.o" => + [ + "crypto/bio/bio_err.c", + ], + "crypto/bio/bio_lib.o" => + [ + "crypto/bio/bio_lib.c", + ], + "crypto/bio/bio_meth.o" => + [ + "crypto/bio/bio_meth.c", + ], + "crypto/bio/bss_acpt.o" => + [ + "crypto/bio/bss_acpt.c", + ], + "crypto/bio/bss_bio.o" => + [ + "crypto/bio/bss_bio.c", + ], + "crypto/bio/bss_conn.o" => + [ + "crypto/bio/bss_conn.c", + ], + "crypto/bio/bss_dgram.o" => + [ + "crypto/bio/bss_dgram.c", + ], + "crypto/bio/bss_fd.o" => + [ + "crypto/bio/bss_fd.c", + ], + "crypto/bio/bss_file.o" => + [ + "crypto/bio/bss_file.c", + ], + "crypto/bio/bss_log.o" => + [ + "crypto/bio/bss_log.c", + ], + "crypto/bio/bss_mem.o" => + [ + "crypto/bio/bss_mem.c", + ], + "crypto/bio/bss_null.o" => + [ + "crypto/bio/bss_null.c", + ], + "crypto/bio/bss_sock.o" => + [ + "crypto/bio/bss_sock.c", + ], + "crypto/blake2/blake2b.o" => + [ + "crypto/blake2/blake2b.c", + ], + "crypto/blake2/blake2s.o" => + [ + "crypto/blake2/blake2s.c", + ], + "crypto/blake2/m_blake2b.o" => + [ + "crypto/blake2/m_blake2b.c", + ], + "crypto/blake2/m_blake2s.o" => + [ + "crypto/blake2/m_blake2s.c", + ], + "crypto/bn/armv8-mont.o" => + [ + "crypto/bn/armv8-mont.S", + ], + "crypto/bn/bn_add.o" => + [ + "crypto/bn/bn_add.c", + ], + "crypto/bn/bn_asm.o" => + [ + "crypto/bn/bn_asm.c", + ], + "crypto/bn/bn_blind.o" => + [ + "crypto/bn/bn_blind.c", + ], + "crypto/bn/bn_const.o" => + [ + "crypto/bn/bn_const.c", + ], + "crypto/bn/bn_ctx.o" => + [ + "crypto/bn/bn_ctx.c", + ], + "crypto/bn/bn_depr.o" => + [ + "crypto/bn/bn_depr.c", + ], + "crypto/bn/bn_dh.o" => + [ + "crypto/bn/bn_dh.c", + ], + "crypto/bn/bn_div.o" => + [ + "crypto/bn/bn_div.c", + ], + "crypto/bn/bn_err.o" => + [ + "crypto/bn/bn_err.c", + ], + "crypto/bn/bn_exp.o" => + [ + "crypto/bn/bn_exp.c", + ], + "crypto/bn/bn_exp2.o" => + [ + "crypto/bn/bn_exp2.c", + ], + "crypto/bn/bn_gcd.o" => + [ + "crypto/bn/bn_gcd.c", + ], + "crypto/bn/bn_gf2m.o" => + [ + "crypto/bn/bn_gf2m.c", + ], + "crypto/bn/bn_intern.o" => + [ + "crypto/bn/bn_intern.c", + ], + "crypto/bn/bn_kron.o" => + [ + "crypto/bn/bn_kron.c", + ], + "crypto/bn/bn_lib.o" => + [ + "crypto/bn/bn_lib.c", + ], + "crypto/bn/bn_mod.o" => + [ + "crypto/bn/bn_mod.c", + ], + "crypto/bn/bn_mont.o" => + [ + "crypto/bn/bn_mont.c", + ], + "crypto/bn/bn_mpi.o" => + [ + "crypto/bn/bn_mpi.c", + ], + "crypto/bn/bn_mul.o" => + [ + "crypto/bn/bn_mul.c", + ], + "crypto/bn/bn_nist.o" => + [ + "crypto/bn/bn_nist.c", + ], + "crypto/bn/bn_prime.o" => + [ + "crypto/bn/bn_prime.c", + ], + "crypto/bn/bn_print.o" => + [ + "crypto/bn/bn_print.c", + ], + "crypto/bn/bn_rand.o" => + [ + "crypto/bn/bn_rand.c", + ], + "crypto/bn/bn_recp.o" => + [ + "crypto/bn/bn_recp.c", + ], + "crypto/bn/bn_shift.o" => + [ + "crypto/bn/bn_shift.c", + ], + "crypto/bn/bn_sqr.o" => + [ + "crypto/bn/bn_sqr.c", + ], + "crypto/bn/bn_sqrt.o" => + [ + "crypto/bn/bn_sqrt.c", + ], + "crypto/bn/bn_srp.o" => + [ + "crypto/bn/bn_srp.c", + ], + "crypto/bn/bn_word.o" => + [ + "crypto/bn/bn_word.c", + ], + "crypto/bn/bn_x931p.o" => + [ + "crypto/bn/bn_x931p.c", + ], + "crypto/buffer/buf_err.o" => + [ + "crypto/buffer/buf_err.c", + ], + "crypto/buffer/buffer.o" => + [ + "crypto/buffer/buffer.c", + ], + "crypto/camellia/camellia.o" => + [ + "crypto/camellia/camellia.c", + ], + "crypto/camellia/cmll_cbc.o" => + [ + "crypto/camellia/cmll_cbc.c", + ], + "crypto/camellia/cmll_cfb.o" => + [ + "crypto/camellia/cmll_cfb.c", + ], + "crypto/camellia/cmll_ctr.o" => + [ + "crypto/camellia/cmll_ctr.c", + ], + "crypto/camellia/cmll_ecb.o" => + [ + "crypto/camellia/cmll_ecb.c", + ], + "crypto/camellia/cmll_misc.o" => + [ + "crypto/camellia/cmll_misc.c", + ], + "crypto/camellia/cmll_ofb.o" => + [ + "crypto/camellia/cmll_ofb.c", + ], + "crypto/cast/c_cfb64.o" => + [ + "crypto/cast/c_cfb64.c", + ], + "crypto/cast/c_ecb.o" => + [ + "crypto/cast/c_ecb.c", + ], + "crypto/cast/c_enc.o" => + [ + "crypto/cast/c_enc.c", + ], + "crypto/cast/c_ofb64.o" => + [ + "crypto/cast/c_ofb64.c", + ], + "crypto/cast/c_skey.o" => + [ + "crypto/cast/c_skey.c", + ], + "crypto/chacha/chacha-armv8.o" => + [ + "crypto/chacha/chacha-armv8.S", + ], + "crypto/cmac/cm_ameth.o" => + [ + "crypto/cmac/cm_ameth.c", + ], + "crypto/cmac/cm_pmeth.o" => + [ + "crypto/cmac/cm_pmeth.c", + ], + "crypto/cmac/cmac.o" => + [ + "crypto/cmac/cmac.c", + ], + "crypto/cms/cms_asn1.o" => + [ + "crypto/cms/cms_asn1.c", + ], + "crypto/cms/cms_att.o" => + [ + "crypto/cms/cms_att.c", + ], + "crypto/cms/cms_cd.o" => + [ + "crypto/cms/cms_cd.c", + ], + "crypto/cms/cms_dd.o" => + [ + "crypto/cms/cms_dd.c", + ], + "crypto/cms/cms_enc.o" => + [ + "crypto/cms/cms_enc.c", + ], + "crypto/cms/cms_env.o" => + [ + "crypto/cms/cms_env.c", + ], + "crypto/cms/cms_err.o" => + [ + "crypto/cms/cms_err.c", + ], + "crypto/cms/cms_ess.o" => + [ + "crypto/cms/cms_ess.c", + ], + "crypto/cms/cms_io.o" => + [ + "crypto/cms/cms_io.c", + ], + "crypto/cms/cms_kari.o" => + [ + "crypto/cms/cms_kari.c", + ], + "crypto/cms/cms_lib.o" => + [ + "crypto/cms/cms_lib.c", + ], + "crypto/cms/cms_pwri.o" => + [ + "crypto/cms/cms_pwri.c", + ], + "crypto/cms/cms_sd.o" => + [ + "crypto/cms/cms_sd.c", + ], + "crypto/cms/cms_smime.o" => + [ + "crypto/cms/cms_smime.c", + ], + "crypto/conf/conf_api.o" => + [ + "crypto/conf/conf_api.c", + ], + "crypto/conf/conf_def.o" => + [ + "crypto/conf/conf_def.c", + ], + "crypto/conf/conf_err.o" => + [ + "crypto/conf/conf_err.c", + ], + "crypto/conf/conf_lib.o" => + [ + "crypto/conf/conf_lib.c", + ], + "crypto/conf/conf_mall.o" => + [ + "crypto/conf/conf_mall.c", + ], + "crypto/conf/conf_mod.o" => + [ + "crypto/conf/conf_mod.c", + ], + "crypto/conf/conf_sap.o" => + [ + "crypto/conf/conf_sap.c", + ], + "crypto/conf/conf_ssl.o" => + [ + "crypto/conf/conf_ssl.c", + ], + "crypto/cpt_err.o" => + [ + "crypto/cpt_err.c", + ], + "crypto/cryptlib.o" => + [ + "crypto/cryptlib.c", + ], + "crypto/ct/ct_b64.o" => + [ + "crypto/ct/ct_b64.c", + ], + "crypto/ct/ct_err.o" => + [ + "crypto/ct/ct_err.c", + ], + "crypto/ct/ct_log.o" => + [ + "crypto/ct/ct_log.c", + ], + "crypto/ct/ct_oct.o" => + [ + "crypto/ct/ct_oct.c", + ], + "crypto/ct/ct_policy.o" => + [ + "crypto/ct/ct_policy.c", + ], + "crypto/ct/ct_prn.o" => + [ + "crypto/ct/ct_prn.c", + ], + "crypto/ct/ct_sct.o" => + [ + "crypto/ct/ct_sct.c", + ], + "crypto/ct/ct_sct_ctx.o" => + [ + "crypto/ct/ct_sct_ctx.c", + ], + "crypto/ct/ct_vfy.o" => + [ + "crypto/ct/ct_vfy.c", + ], + "crypto/ct/ct_x509v3.o" => + [ + "crypto/ct/ct_x509v3.c", + ], + "crypto/ctype.o" => + [ + "crypto/ctype.c", + ], + "crypto/cversion.o" => + [ + "crypto/cversion.c", + ], + "crypto/des/cbc_cksm.o" => + [ + "crypto/des/cbc_cksm.c", + ], + "crypto/des/cbc_enc.o" => + [ + "crypto/des/cbc_enc.c", + ], + "crypto/des/cfb64ede.o" => + [ + "crypto/des/cfb64ede.c", + ], + "crypto/des/cfb64enc.o" => + [ + "crypto/des/cfb64enc.c", + ], + "crypto/des/cfb_enc.o" => + [ + "crypto/des/cfb_enc.c", + ], + "crypto/des/des_enc.o" => + [ + "crypto/des/des_enc.c", + ], + "crypto/des/ecb3_enc.o" => + [ + "crypto/des/ecb3_enc.c", + ], + "crypto/des/ecb_enc.o" => + [ + "crypto/des/ecb_enc.c", + ], + "crypto/des/fcrypt.o" => + [ + "crypto/des/fcrypt.c", + ], + "crypto/des/fcrypt_b.o" => + [ + "crypto/des/fcrypt_b.c", + ], + "crypto/des/ofb64ede.o" => + [ + "crypto/des/ofb64ede.c", + ], + "crypto/des/ofb64enc.o" => + [ + "crypto/des/ofb64enc.c", + ], + "crypto/des/ofb_enc.o" => + [ + "crypto/des/ofb_enc.c", + ], + "crypto/des/pcbc_enc.o" => + [ + "crypto/des/pcbc_enc.c", + ], + "crypto/des/qud_cksm.o" => + [ + "crypto/des/qud_cksm.c", + ], + "crypto/des/rand_key.o" => + [ + "crypto/des/rand_key.c", + ], + "crypto/des/set_key.o" => + [ + "crypto/des/set_key.c", + ], + "crypto/des/str2key.o" => + [ + "crypto/des/str2key.c", + ], + "crypto/des/xcbc_enc.o" => + [ + "crypto/des/xcbc_enc.c", + ], + "crypto/dh/dh_ameth.o" => + [ + "crypto/dh/dh_ameth.c", + ], + "crypto/dh/dh_asn1.o" => + [ + "crypto/dh/dh_asn1.c", + ], + "crypto/dh/dh_check.o" => + [ + "crypto/dh/dh_check.c", + ], + "crypto/dh/dh_depr.o" => + [ + "crypto/dh/dh_depr.c", + ], + "crypto/dh/dh_err.o" => + [ + "crypto/dh/dh_err.c", + ], + "crypto/dh/dh_gen.o" => + [ + "crypto/dh/dh_gen.c", + ], + "crypto/dh/dh_kdf.o" => + [ + "crypto/dh/dh_kdf.c", + ], + "crypto/dh/dh_key.o" => + [ + "crypto/dh/dh_key.c", + ], + "crypto/dh/dh_lib.o" => + [ + "crypto/dh/dh_lib.c", + ], + "crypto/dh/dh_meth.o" => + [ + "crypto/dh/dh_meth.c", + ], + "crypto/dh/dh_pmeth.o" => + [ + "crypto/dh/dh_pmeth.c", + ], + "crypto/dh/dh_prn.o" => + [ + "crypto/dh/dh_prn.c", + ], + "crypto/dh/dh_rfc5114.o" => + [ + "crypto/dh/dh_rfc5114.c", + ], + "crypto/dh/dh_rfc7919.o" => + [ + "crypto/dh/dh_rfc7919.c", + ], + "crypto/dsa/dsa_ameth.o" => + [ + "crypto/dsa/dsa_ameth.c", + ], + "crypto/dsa/dsa_asn1.o" => + [ + "crypto/dsa/dsa_asn1.c", + ], + "crypto/dsa/dsa_depr.o" => + [ + "crypto/dsa/dsa_depr.c", + ], + "crypto/dsa/dsa_err.o" => + [ + "crypto/dsa/dsa_err.c", + ], + "crypto/dsa/dsa_gen.o" => + [ + "crypto/dsa/dsa_gen.c", + ], + "crypto/dsa/dsa_key.o" => + [ + "crypto/dsa/dsa_key.c", + ], + "crypto/dsa/dsa_lib.o" => + [ + "crypto/dsa/dsa_lib.c", + ], + "crypto/dsa/dsa_meth.o" => + [ + "crypto/dsa/dsa_meth.c", + ], + "crypto/dsa/dsa_ossl.o" => + [ + "crypto/dsa/dsa_ossl.c", + ], + "crypto/dsa/dsa_pmeth.o" => + [ + "crypto/dsa/dsa_pmeth.c", + ], + "crypto/dsa/dsa_prn.o" => + [ + "crypto/dsa/dsa_prn.c", + ], + "crypto/dsa/dsa_sign.o" => + [ + "crypto/dsa/dsa_sign.c", + ], + "crypto/dsa/dsa_vrf.o" => + [ + "crypto/dsa/dsa_vrf.c", + ], + "crypto/dso/dso_dl.o" => + [ + "crypto/dso/dso_dl.c", + ], + "crypto/dso/dso_dlfcn.o" => + [ + "crypto/dso/dso_dlfcn.c", + ], + "crypto/dso/dso_err.o" => + [ + "crypto/dso/dso_err.c", + ], + "crypto/dso/dso_lib.o" => + [ + "crypto/dso/dso_lib.c", + ], + "crypto/dso/dso_openssl.o" => + [ + "crypto/dso/dso_openssl.c", + ], + "crypto/dso/dso_vms.o" => + [ + "crypto/dso/dso_vms.c", + ], + "crypto/dso/dso_win32.o" => + [ + "crypto/dso/dso_win32.c", + ], + "crypto/ebcdic.o" => + [ + "crypto/ebcdic.c", + ], + "crypto/ec/curve25519.o" => + [ + "crypto/ec/curve25519.c", + ], + "crypto/ec/curve448/arch_32/f_impl.o" => + [ + "crypto/ec/curve448/arch_32/f_impl.c", + ], + "crypto/ec/curve448/curve448.o" => + [ + "crypto/ec/curve448/curve448.c", + ], + "crypto/ec/curve448/curve448_tables.o" => + [ + "crypto/ec/curve448/curve448_tables.c", + ], + "crypto/ec/curve448/eddsa.o" => + [ + "crypto/ec/curve448/eddsa.c", + ], + "crypto/ec/curve448/f_generic.o" => + [ + "crypto/ec/curve448/f_generic.c", + ], + "crypto/ec/curve448/scalar.o" => + [ + "crypto/ec/curve448/scalar.c", + ], + "crypto/ec/ec2_oct.o" => + [ + "crypto/ec/ec2_oct.c", + ], + "crypto/ec/ec2_smpl.o" => + [ + "crypto/ec/ec2_smpl.c", + ], + "crypto/ec/ec_ameth.o" => + [ + "crypto/ec/ec_ameth.c", + ], + "crypto/ec/ec_asn1.o" => + [ + "crypto/ec/ec_asn1.c", + ], + "crypto/ec/ec_check.o" => + [ + "crypto/ec/ec_check.c", + ], + "crypto/ec/ec_curve.o" => + [ + "crypto/ec/ec_curve.c", + ], + "crypto/ec/ec_cvt.o" => + [ + "crypto/ec/ec_cvt.c", + ], + "crypto/ec/ec_err.o" => + [ + "crypto/ec/ec_err.c", + ], + "crypto/ec/ec_key.o" => + [ + "crypto/ec/ec_key.c", + ], + "crypto/ec/ec_kmeth.o" => + [ + "crypto/ec/ec_kmeth.c", + ], + "crypto/ec/ec_lib.o" => + [ + "crypto/ec/ec_lib.c", + ], + "crypto/ec/ec_mult.o" => + [ + "crypto/ec/ec_mult.c", + ], + "crypto/ec/ec_oct.o" => + [ + "crypto/ec/ec_oct.c", + ], + "crypto/ec/ec_pmeth.o" => + [ + "crypto/ec/ec_pmeth.c", + ], + "crypto/ec/ec_print.o" => + [ + "crypto/ec/ec_print.c", + ], + "crypto/ec/ecdh_kdf.o" => + [ + "crypto/ec/ecdh_kdf.c", + ], + "crypto/ec/ecdh_ossl.o" => + [ + "crypto/ec/ecdh_ossl.c", + ], + "crypto/ec/ecdsa_ossl.o" => + [ + "crypto/ec/ecdsa_ossl.c", + ], + "crypto/ec/ecdsa_sign.o" => + [ + "crypto/ec/ecdsa_sign.c", + ], + "crypto/ec/ecdsa_vrf.o" => + [ + "crypto/ec/ecdsa_vrf.c", + ], + "crypto/ec/eck_prn.o" => + [ + "crypto/ec/eck_prn.c", + ], + "crypto/ec/ecp_mont.o" => + [ + "crypto/ec/ecp_mont.c", + ], + "crypto/ec/ecp_nist.o" => + [ + "crypto/ec/ecp_nist.c", + ], + "crypto/ec/ecp_nistp224.o" => + [ + "crypto/ec/ecp_nistp224.c", + ], + "crypto/ec/ecp_nistp256.o" => + [ + "crypto/ec/ecp_nistp256.c", + ], + "crypto/ec/ecp_nistp521.o" => + [ + "crypto/ec/ecp_nistp521.c", + ], + "crypto/ec/ecp_nistputil.o" => + [ + "crypto/ec/ecp_nistputil.c", + ], + "crypto/ec/ecp_nistz256-armv8.o" => + [ + "crypto/ec/ecp_nistz256-armv8.S", + ], + "crypto/ec/ecp_nistz256.o" => + [ + "crypto/ec/ecp_nistz256.c", + ], + "crypto/ec/ecp_oct.o" => + [ + "crypto/ec/ecp_oct.c", + ], + "crypto/ec/ecp_smpl.o" => + [ + "crypto/ec/ecp_smpl.c", + ], + "crypto/ec/ecx_meth.o" => + [ + "crypto/ec/ecx_meth.c", + ], + "crypto/engine/eng_all.o" => + [ + "crypto/engine/eng_all.c", + ], + "crypto/engine/eng_cnf.o" => + [ + "crypto/engine/eng_cnf.c", + ], + "crypto/engine/eng_ctrl.o" => + [ + "crypto/engine/eng_ctrl.c", + ], + "crypto/engine/eng_dyn.o" => + [ + "crypto/engine/eng_dyn.c", + ], + "crypto/engine/eng_err.o" => + [ + "crypto/engine/eng_err.c", + ], + "crypto/engine/eng_fat.o" => + [ + "crypto/engine/eng_fat.c", + ], + "crypto/engine/eng_init.o" => + [ + "crypto/engine/eng_init.c", + ], + "crypto/engine/eng_lib.o" => + [ + "crypto/engine/eng_lib.c", + ], + "crypto/engine/eng_list.o" => + [ + "crypto/engine/eng_list.c", + ], + "crypto/engine/eng_openssl.o" => + [ + "crypto/engine/eng_openssl.c", + ], + "crypto/engine/eng_pkey.o" => + [ + "crypto/engine/eng_pkey.c", + ], + "crypto/engine/eng_rdrand.o" => + [ + "crypto/engine/eng_rdrand.c", + ], + "crypto/engine/eng_table.o" => + [ + "crypto/engine/eng_table.c", + ], + "crypto/engine/tb_asnmth.o" => + [ + "crypto/engine/tb_asnmth.c", + ], + "crypto/engine/tb_cipher.o" => + [ + "crypto/engine/tb_cipher.c", + ], + "crypto/engine/tb_dh.o" => + [ + "crypto/engine/tb_dh.c", + ], + "crypto/engine/tb_digest.o" => + [ + "crypto/engine/tb_digest.c", + ], + "crypto/engine/tb_dsa.o" => + [ + "crypto/engine/tb_dsa.c", + ], + "crypto/engine/tb_eckey.o" => + [ + "crypto/engine/tb_eckey.c", + ], + "crypto/engine/tb_pkmeth.o" => + [ + "crypto/engine/tb_pkmeth.c", + ], + "crypto/engine/tb_rand.o" => + [ + "crypto/engine/tb_rand.c", + ], + "crypto/engine/tb_rsa.o" => + [ + "crypto/engine/tb_rsa.c", + ], + "crypto/err/err.o" => + [ + "crypto/err/err.c", + ], + "crypto/err/err_all.o" => + [ + "crypto/err/err_all.c", + ], + "crypto/err/err_prn.o" => + [ + "crypto/err/err_prn.c", + ], + "crypto/evp/bio_b64.o" => + [ + "crypto/evp/bio_b64.c", + ], + "crypto/evp/bio_enc.o" => + [ + "crypto/evp/bio_enc.c", + ], + "crypto/evp/bio_md.o" => + [ + "crypto/evp/bio_md.c", + ], + "crypto/evp/bio_ok.o" => + [ + "crypto/evp/bio_ok.c", + ], + "crypto/evp/c_allc.o" => + [ + "crypto/evp/c_allc.c", + ], + "crypto/evp/c_alld.o" => + [ + "crypto/evp/c_alld.c", + ], + "crypto/evp/cmeth_lib.o" => + [ + "crypto/evp/cmeth_lib.c", + ], + "crypto/evp/digest.o" => + [ + "crypto/evp/digest.c", + ], + "crypto/evp/e_aes.o" => + [ + "crypto/evp/e_aes.c", + ], + "crypto/evp/e_aes_cbc_hmac_sha1.o" => + [ + "crypto/evp/e_aes_cbc_hmac_sha1.c", + ], + "crypto/evp/e_aes_cbc_hmac_sha256.o" => + [ + "crypto/evp/e_aes_cbc_hmac_sha256.c", + ], + "crypto/evp/e_aria.o" => + [ + "crypto/evp/e_aria.c", + ], + "crypto/evp/e_bf.o" => + [ + "crypto/evp/e_bf.c", + ], + "crypto/evp/e_camellia.o" => + [ + "crypto/evp/e_camellia.c", + ], + "crypto/evp/e_cast.o" => + [ + "crypto/evp/e_cast.c", + ], + "crypto/evp/e_chacha20_poly1305.o" => + [ + "crypto/evp/e_chacha20_poly1305.c", + ], + "crypto/evp/e_des.o" => + [ + "crypto/evp/e_des.c", + ], + "crypto/evp/e_des3.o" => + [ + "crypto/evp/e_des3.c", + ], + "crypto/evp/e_idea.o" => + [ + "crypto/evp/e_idea.c", + ], + "crypto/evp/e_null.o" => + [ + "crypto/evp/e_null.c", + ], + "crypto/evp/e_old.o" => + [ + "crypto/evp/e_old.c", + ], + "crypto/evp/e_rc2.o" => + [ + "crypto/evp/e_rc2.c", + ], + "crypto/evp/e_rc4.o" => + [ + "crypto/evp/e_rc4.c", + ], + "crypto/evp/e_rc4_hmac_md5.o" => + [ + "crypto/evp/e_rc4_hmac_md5.c", + ], + "crypto/evp/e_rc5.o" => + [ + "crypto/evp/e_rc5.c", + ], + "crypto/evp/e_seed.o" => + [ + "crypto/evp/e_seed.c", + ], + "crypto/evp/e_sm4.o" => + [ + "crypto/evp/e_sm4.c", + ], + "crypto/evp/e_xcbc_d.o" => + [ + "crypto/evp/e_xcbc_d.c", + ], + "crypto/evp/encode.o" => + [ + "crypto/evp/encode.c", + ], + "crypto/evp/evp_cnf.o" => + [ + "crypto/evp/evp_cnf.c", + ], + "crypto/evp/evp_enc.o" => + [ + "crypto/evp/evp_enc.c", + ], + "crypto/evp/evp_err.o" => + [ + "crypto/evp/evp_err.c", + ], + "crypto/evp/evp_key.o" => + [ + "crypto/evp/evp_key.c", + ], + "crypto/evp/evp_lib.o" => + [ + "crypto/evp/evp_lib.c", + ], + "crypto/evp/evp_pbe.o" => + [ + "crypto/evp/evp_pbe.c", + ], + "crypto/evp/evp_pkey.o" => + [ + "crypto/evp/evp_pkey.c", + ], + "crypto/evp/m_md2.o" => + [ + "crypto/evp/m_md2.c", + ], + "crypto/evp/m_md4.o" => + [ + "crypto/evp/m_md4.c", + ], + "crypto/evp/m_md5.o" => + [ + "crypto/evp/m_md5.c", + ], + "crypto/evp/m_md5_sha1.o" => + [ + "crypto/evp/m_md5_sha1.c", + ], + "crypto/evp/m_mdc2.o" => + [ + "crypto/evp/m_mdc2.c", + ], + "crypto/evp/m_null.o" => + [ + "crypto/evp/m_null.c", + ], + "crypto/evp/m_ripemd.o" => + [ + "crypto/evp/m_ripemd.c", + ], + "crypto/evp/m_sha1.o" => + [ + "crypto/evp/m_sha1.c", + ], + "crypto/evp/m_sha3.o" => + [ + "crypto/evp/m_sha3.c", + ], + "crypto/evp/m_sigver.o" => + [ + "crypto/evp/m_sigver.c", + ], + "crypto/evp/m_wp.o" => + [ + "crypto/evp/m_wp.c", + ], + "crypto/evp/names.o" => + [ + "crypto/evp/names.c", + ], + "crypto/evp/p5_crpt.o" => + [ + "crypto/evp/p5_crpt.c", + ], + "crypto/evp/p5_crpt2.o" => + [ + "crypto/evp/p5_crpt2.c", + ], + "crypto/evp/p_dec.o" => + [ + "crypto/evp/p_dec.c", + ], + "crypto/evp/p_enc.o" => + [ + "crypto/evp/p_enc.c", + ], + "crypto/evp/p_lib.o" => + [ + "crypto/evp/p_lib.c", + ], + "crypto/evp/p_open.o" => + [ + "crypto/evp/p_open.c", + ], + "crypto/evp/p_seal.o" => + [ + "crypto/evp/p_seal.c", + ], + "crypto/evp/p_sign.o" => + [ + "crypto/evp/p_sign.c", + ], + "crypto/evp/p_verify.o" => + [ + "crypto/evp/p_verify.c", + ], + "crypto/evp/pbe_scrypt.o" => + [ + "crypto/evp/pbe_scrypt.c", + ], + "crypto/evp/pmeth_fn.o" => + [ + "crypto/evp/pmeth_fn.c", + ], + "crypto/evp/pmeth_gn.o" => + [ + "crypto/evp/pmeth_gn.c", + ], + "crypto/evp/pmeth_lib.o" => + [ + "crypto/evp/pmeth_lib.c", + ], + "crypto/ex_data.o" => + [ + "crypto/ex_data.c", + ], + "crypto/getenv.o" => + [ + "crypto/getenv.c", + ], + "crypto/hmac/hm_ameth.o" => + [ + "crypto/hmac/hm_ameth.c", + ], + "crypto/hmac/hm_pmeth.o" => + [ + "crypto/hmac/hm_pmeth.c", + ], + "crypto/hmac/hmac.o" => + [ + "crypto/hmac/hmac.c", + ], + "crypto/idea/i_cbc.o" => + [ + "crypto/idea/i_cbc.c", + ], + "crypto/idea/i_cfb64.o" => + [ + "crypto/idea/i_cfb64.c", + ], + "crypto/idea/i_ecb.o" => + [ + "crypto/idea/i_ecb.c", + ], + "crypto/idea/i_ofb64.o" => + [ + "crypto/idea/i_ofb64.c", + ], + "crypto/idea/i_skey.o" => + [ + "crypto/idea/i_skey.c", + ], + "crypto/init.o" => + [ + "crypto/init.c", + ], + "crypto/kdf/hkdf.o" => + [ + "crypto/kdf/hkdf.c", + ], + "crypto/kdf/kdf_err.o" => + [ + "crypto/kdf/kdf_err.c", + ], + "crypto/kdf/scrypt.o" => + [ + "crypto/kdf/scrypt.c", + ], + "crypto/kdf/tls1_prf.o" => + [ + "crypto/kdf/tls1_prf.c", + ], + "crypto/lhash/lh_stats.o" => + [ + "crypto/lhash/lh_stats.c", + ], + "crypto/lhash/lhash.o" => + [ + "crypto/lhash/lhash.c", + ], + "crypto/md4/md4_dgst.o" => + [ + "crypto/md4/md4_dgst.c", + ], + "crypto/md4/md4_one.o" => + [ + "crypto/md4/md4_one.c", + ], + "crypto/md5/md5_dgst.o" => + [ + "crypto/md5/md5_dgst.c", + ], + "crypto/md5/md5_one.o" => + [ + "crypto/md5/md5_one.c", + ], + "crypto/mdc2/mdc2_one.o" => + [ + "crypto/mdc2/mdc2_one.c", + ], + "crypto/mdc2/mdc2dgst.o" => + [ + "crypto/mdc2/mdc2dgst.c", + ], + "crypto/mem.o" => + [ + "crypto/mem.c", + ], + "crypto/mem_dbg.o" => + [ + "crypto/mem_dbg.c", + ], + "crypto/mem_sec.o" => + [ + "crypto/mem_sec.c", + ], + "crypto/modes/cbc128.o" => + [ + "crypto/modes/cbc128.c", + ], + "crypto/modes/ccm128.o" => + [ + "crypto/modes/ccm128.c", + ], + "crypto/modes/cfb128.o" => + [ + "crypto/modes/cfb128.c", + ], + "crypto/modes/ctr128.o" => + [ + "crypto/modes/ctr128.c", + ], + "crypto/modes/cts128.o" => + [ + "crypto/modes/cts128.c", + ], + "crypto/modes/gcm128.o" => + [ + "crypto/modes/gcm128.c", + ], + "crypto/modes/ghashv8-armx.o" => + [ + "crypto/modes/ghashv8-armx.S", + ], + "crypto/modes/ocb128.o" => + [ + "crypto/modes/ocb128.c", + ], + "crypto/modes/ofb128.o" => + [ + "crypto/modes/ofb128.c", + ], + "crypto/modes/wrap128.o" => + [ + "crypto/modes/wrap128.c", + ], + "crypto/modes/xts128.o" => + [ + "crypto/modes/xts128.c", + ], + "crypto/o_dir.o" => + [ + "crypto/o_dir.c", + ], + "crypto/o_fips.o" => + [ + "crypto/o_fips.c", + ], + "crypto/o_fopen.o" => + [ + "crypto/o_fopen.c", + ], + "crypto/o_init.o" => + [ + "crypto/o_init.c", + ], + "crypto/o_str.o" => + [ + "crypto/o_str.c", + ], + "crypto/o_time.o" => + [ + "crypto/o_time.c", + ], + "crypto/objects/o_names.o" => + [ + "crypto/objects/o_names.c", + ], + "crypto/objects/obj_dat.o" => + [ + "crypto/objects/obj_dat.c", + ], + "crypto/objects/obj_err.o" => + [ + "crypto/objects/obj_err.c", + ], + "crypto/objects/obj_lib.o" => + [ + "crypto/objects/obj_lib.c", + ], + "crypto/objects/obj_xref.o" => + [ + "crypto/objects/obj_xref.c", + ], + "crypto/ocsp/ocsp_asn.o" => + [ + "crypto/ocsp/ocsp_asn.c", + ], + "crypto/ocsp/ocsp_cl.o" => + [ + "crypto/ocsp/ocsp_cl.c", + ], + "crypto/ocsp/ocsp_err.o" => + [ + "crypto/ocsp/ocsp_err.c", + ], + "crypto/ocsp/ocsp_ext.o" => + [ + "crypto/ocsp/ocsp_ext.c", + ], + "crypto/ocsp/ocsp_ht.o" => + [ + "crypto/ocsp/ocsp_ht.c", + ], + "crypto/ocsp/ocsp_lib.o" => + [ + "crypto/ocsp/ocsp_lib.c", + ], + "crypto/ocsp/ocsp_prn.o" => + [ + "crypto/ocsp/ocsp_prn.c", + ], + "crypto/ocsp/ocsp_srv.o" => + [ + "crypto/ocsp/ocsp_srv.c", + ], + "crypto/ocsp/ocsp_vfy.o" => + [ + "crypto/ocsp/ocsp_vfy.c", + ], + "crypto/ocsp/v3_ocsp.o" => + [ + "crypto/ocsp/v3_ocsp.c", + ], + "crypto/pem/pem_all.o" => + [ + "crypto/pem/pem_all.c", + ], + "crypto/pem/pem_err.o" => + [ + "crypto/pem/pem_err.c", + ], + "crypto/pem/pem_info.o" => + [ + "crypto/pem/pem_info.c", + ], + "crypto/pem/pem_lib.o" => + [ + "crypto/pem/pem_lib.c", + ], + "crypto/pem/pem_oth.o" => + [ + "crypto/pem/pem_oth.c", + ], + "crypto/pem/pem_pk8.o" => + [ + "crypto/pem/pem_pk8.c", + ], + "crypto/pem/pem_pkey.o" => + [ + "crypto/pem/pem_pkey.c", + ], + "crypto/pem/pem_sign.o" => + [ + "crypto/pem/pem_sign.c", + ], + "crypto/pem/pem_x509.o" => + [ + "crypto/pem/pem_x509.c", + ], + "crypto/pem/pem_xaux.o" => + [ + "crypto/pem/pem_xaux.c", + ], + "crypto/pem/pvkfmt.o" => + [ + "crypto/pem/pvkfmt.c", + ], + "crypto/pkcs12/p12_add.o" => + [ + "crypto/pkcs12/p12_add.c", + ], + "crypto/pkcs12/p12_asn.o" => + [ + "crypto/pkcs12/p12_asn.c", + ], + "crypto/pkcs12/p12_attr.o" => + [ + "crypto/pkcs12/p12_attr.c", + ], + "crypto/pkcs12/p12_crpt.o" => + [ + "crypto/pkcs12/p12_crpt.c", + ], + "crypto/pkcs12/p12_crt.o" => + [ + "crypto/pkcs12/p12_crt.c", + ], + "crypto/pkcs12/p12_decr.o" => + [ + "crypto/pkcs12/p12_decr.c", + ], + "crypto/pkcs12/p12_init.o" => + [ + "crypto/pkcs12/p12_init.c", + ], + "crypto/pkcs12/p12_key.o" => + [ + "crypto/pkcs12/p12_key.c", + ], + "crypto/pkcs12/p12_kiss.o" => + [ + "crypto/pkcs12/p12_kiss.c", + ], + "crypto/pkcs12/p12_mutl.o" => + [ + "crypto/pkcs12/p12_mutl.c", + ], + "crypto/pkcs12/p12_npas.o" => + [ + "crypto/pkcs12/p12_npas.c", + ], + "crypto/pkcs12/p12_p8d.o" => + [ + "crypto/pkcs12/p12_p8d.c", + ], + "crypto/pkcs12/p12_p8e.o" => + [ + "crypto/pkcs12/p12_p8e.c", + ], + "crypto/pkcs12/p12_sbag.o" => + [ + "crypto/pkcs12/p12_sbag.c", + ], + "crypto/pkcs12/p12_utl.o" => + [ + "crypto/pkcs12/p12_utl.c", + ], + "crypto/pkcs12/pk12err.o" => + [ + "crypto/pkcs12/pk12err.c", + ], + "crypto/pkcs7/bio_pk7.o" => + [ + "crypto/pkcs7/bio_pk7.c", + ], + "crypto/pkcs7/pk7_asn1.o" => + [ + "crypto/pkcs7/pk7_asn1.c", + ], + "crypto/pkcs7/pk7_attr.o" => + [ + "crypto/pkcs7/pk7_attr.c", + ], + "crypto/pkcs7/pk7_doit.o" => + [ + "crypto/pkcs7/pk7_doit.c", + ], + "crypto/pkcs7/pk7_lib.o" => + [ + "crypto/pkcs7/pk7_lib.c", + ], + "crypto/pkcs7/pk7_mime.o" => + [ + "crypto/pkcs7/pk7_mime.c", + ], + "crypto/pkcs7/pk7_smime.o" => + [ + "crypto/pkcs7/pk7_smime.c", + ], + "crypto/pkcs7/pkcs7err.o" => + [ + "crypto/pkcs7/pkcs7err.c", + ], + "crypto/poly1305/poly1305-armv8.o" => + [ + "crypto/poly1305/poly1305-armv8.S", + ], + "crypto/poly1305/poly1305.o" => + [ + "crypto/poly1305/poly1305.c", + ], + "crypto/poly1305/poly1305_ameth.o" => + [ + "crypto/poly1305/poly1305_ameth.c", + ], + "crypto/poly1305/poly1305_pmeth.o" => + [ + "crypto/poly1305/poly1305_pmeth.c", + ], + "crypto/rand/drbg_ctr.o" => + [ + "crypto/rand/drbg_ctr.c", + ], + "crypto/rand/drbg_lib.o" => + [ + "crypto/rand/drbg_lib.c", + ], + "crypto/rand/rand_egd.o" => + [ + "crypto/rand/rand_egd.c", + ], + "crypto/rand/rand_err.o" => + [ + "crypto/rand/rand_err.c", + ], + "crypto/rand/rand_lib.o" => + [ + "crypto/rand/rand_lib.c", + ], + "crypto/rand/rand_unix.o" => + [ + "crypto/rand/rand_unix.c", + ], + "crypto/rand/rand_vms.o" => + [ + "crypto/rand/rand_vms.c", + ], + "crypto/rand/rand_win.o" => + [ + "crypto/rand/rand_win.c", + ], + "crypto/rand/randfile.o" => + [ + "crypto/rand/randfile.c", + ], + "crypto/rc2/rc2_cbc.o" => + [ + "crypto/rc2/rc2_cbc.c", + ], + "crypto/rc2/rc2_ecb.o" => + [ + "crypto/rc2/rc2_ecb.c", + ], + "crypto/rc2/rc2_skey.o" => + [ + "crypto/rc2/rc2_skey.c", + ], + "crypto/rc2/rc2cfb64.o" => + [ + "crypto/rc2/rc2cfb64.c", + ], + "crypto/rc2/rc2ofb64.o" => + [ + "crypto/rc2/rc2ofb64.c", + ], + "crypto/rc4/rc4_enc.o" => + [ + "crypto/rc4/rc4_enc.c", + ], + "crypto/rc4/rc4_skey.o" => + [ + "crypto/rc4/rc4_skey.c", + ], + "crypto/ripemd/rmd_dgst.o" => + [ + "crypto/ripemd/rmd_dgst.c", + ], + "crypto/ripemd/rmd_one.o" => + [ + "crypto/ripemd/rmd_one.c", + ], + "crypto/rsa/rsa_ameth.o" => + [ + "crypto/rsa/rsa_ameth.c", + ], + "crypto/rsa/rsa_asn1.o" => + [ + "crypto/rsa/rsa_asn1.c", + ], + "crypto/rsa/rsa_chk.o" => + [ + "crypto/rsa/rsa_chk.c", + ], + "crypto/rsa/rsa_crpt.o" => + [ + "crypto/rsa/rsa_crpt.c", + ], + "crypto/rsa/rsa_depr.o" => + [ + "crypto/rsa/rsa_depr.c", + ], + "crypto/rsa/rsa_err.o" => + [ + "crypto/rsa/rsa_err.c", + ], + "crypto/rsa/rsa_gen.o" => + [ + "crypto/rsa/rsa_gen.c", + ], + "crypto/rsa/rsa_lib.o" => + [ + "crypto/rsa/rsa_lib.c", + ], + "crypto/rsa/rsa_meth.o" => + [ + "crypto/rsa/rsa_meth.c", + ], + "crypto/rsa/rsa_mp.o" => + [ + "crypto/rsa/rsa_mp.c", + ], + "crypto/rsa/rsa_none.o" => + [ + "crypto/rsa/rsa_none.c", + ], + "crypto/rsa/rsa_oaep.o" => + [ + "crypto/rsa/rsa_oaep.c", + ], + "crypto/rsa/rsa_ossl.o" => + [ + "crypto/rsa/rsa_ossl.c", + ], + "crypto/rsa/rsa_pk1.o" => + [ + "crypto/rsa/rsa_pk1.c", + ], + "crypto/rsa/rsa_pmeth.o" => + [ + "crypto/rsa/rsa_pmeth.c", + ], + "crypto/rsa/rsa_prn.o" => + [ + "crypto/rsa/rsa_prn.c", + ], + "crypto/rsa/rsa_pss.o" => + [ + "crypto/rsa/rsa_pss.c", + ], + "crypto/rsa/rsa_saos.o" => + [ + "crypto/rsa/rsa_saos.c", + ], + "crypto/rsa/rsa_sign.o" => + [ + "crypto/rsa/rsa_sign.c", + ], + "crypto/rsa/rsa_ssl.o" => + [ + "crypto/rsa/rsa_ssl.c", + ], + "crypto/rsa/rsa_x931.o" => + [ + "crypto/rsa/rsa_x931.c", + ], + "crypto/rsa/rsa_x931g.o" => + [ + "crypto/rsa/rsa_x931g.c", + ], + "crypto/seed/seed.o" => + [ + "crypto/seed/seed.c", + ], + "crypto/seed/seed_cbc.o" => + [ + "crypto/seed/seed_cbc.c", + ], + "crypto/seed/seed_cfb.o" => + [ + "crypto/seed/seed_cfb.c", + ], + "crypto/seed/seed_ecb.o" => + [ + "crypto/seed/seed_ecb.c", + ], + "crypto/seed/seed_ofb.o" => + [ + "crypto/seed/seed_ofb.c", + ], + "crypto/sha/keccak1600-armv8.o" => + [ + "crypto/sha/keccak1600-armv8.S", + ], + "crypto/sha/sha1-armv8.o" => + [ + "crypto/sha/sha1-armv8.S", + ], + "crypto/sha/sha1_one.o" => + [ + "crypto/sha/sha1_one.c", + ], + "crypto/sha/sha1dgst.o" => + [ + "crypto/sha/sha1dgst.c", + ], + "crypto/sha/sha256-armv8.o" => + [ + "crypto/sha/sha256-armv8.S", + ], + "crypto/sha/sha256.o" => + [ + "crypto/sha/sha256.c", + ], + "crypto/sha/sha512-armv8.o" => + [ + "crypto/sha/sha512-armv8.S", + ], + "crypto/sha/sha512.o" => + [ + "crypto/sha/sha512.c", + ], + "crypto/siphash/siphash.o" => + [ + "crypto/siphash/siphash.c", + ], + "crypto/siphash/siphash_ameth.o" => + [ + "crypto/siphash/siphash_ameth.c", + ], + "crypto/siphash/siphash_pmeth.o" => + [ + "crypto/siphash/siphash_pmeth.c", + ], + "crypto/sm2/sm2_crypt.o" => + [ + "crypto/sm2/sm2_crypt.c", + ], + "crypto/sm2/sm2_err.o" => + [ + "crypto/sm2/sm2_err.c", + ], + "crypto/sm2/sm2_pmeth.o" => + [ + "crypto/sm2/sm2_pmeth.c", + ], + "crypto/sm2/sm2_sign.o" => + [ + "crypto/sm2/sm2_sign.c", + ], + "crypto/sm3/m_sm3.o" => + [ + "crypto/sm3/m_sm3.c", + ], + "crypto/sm3/sm3.o" => + [ + "crypto/sm3/sm3.c", + ], + "crypto/sm4/sm4.o" => + [ + "crypto/sm4/sm4.c", + ], + "crypto/srp/srp_lib.o" => + [ + "crypto/srp/srp_lib.c", + ], + "crypto/srp/srp_vfy.o" => + [ + "crypto/srp/srp_vfy.c", + ], + "crypto/stack/stack.o" => + [ + "crypto/stack/stack.c", + ], + "crypto/store/loader_file.o" => + [ + "crypto/store/loader_file.c", + ], + "crypto/store/store_err.o" => + [ + "crypto/store/store_err.c", + ], + "crypto/store/store_init.o" => + [ + "crypto/store/store_init.c", + ], + "crypto/store/store_lib.o" => + [ + "crypto/store/store_lib.c", + ], + "crypto/store/store_register.o" => + [ + "crypto/store/store_register.c", + ], + "crypto/store/store_strings.o" => + [ + "crypto/store/store_strings.c", + ], + "crypto/threads_none.o" => + [ + "crypto/threads_none.c", + ], + "crypto/threads_pthread.o" => + [ + "crypto/threads_pthread.c", + ], + "crypto/threads_win.o" => + [ + "crypto/threads_win.c", + ], + "crypto/ts/ts_asn1.o" => + [ + "crypto/ts/ts_asn1.c", + ], + "crypto/ts/ts_conf.o" => + [ + "crypto/ts/ts_conf.c", + ], + "crypto/ts/ts_err.o" => + [ + "crypto/ts/ts_err.c", + ], + "crypto/ts/ts_lib.o" => + [ + "crypto/ts/ts_lib.c", + ], + "crypto/ts/ts_req_print.o" => + [ + "crypto/ts/ts_req_print.c", + ], + "crypto/ts/ts_req_utils.o" => + [ + "crypto/ts/ts_req_utils.c", + ], + "crypto/ts/ts_rsp_print.o" => + [ + "crypto/ts/ts_rsp_print.c", + ], + "crypto/ts/ts_rsp_sign.o" => + [ + "crypto/ts/ts_rsp_sign.c", + ], + "crypto/ts/ts_rsp_utils.o" => + [ + "crypto/ts/ts_rsp_utils.c", + ], + "crypto/ts/ts_rsp_verify.o" => + [ + "crypto/ts/ts_rsp_verify.c", + ], + "crypto/ts/ts_verify_ctx.o" => + [ + "crypto/ts/ts_verify_ctx.c", + ], + "crypto/txt_db/txt_db.o" => + [ + "crypto/txt_db/txt_db.c", + ], + "crypto/ui/ui_err.o" => + [ + "crypto/ui/ui_err.c", + ], + "crypto/ui/ui_lib.o" => + [ + "crypto/ui/ui_lib.c", + ], + "crypto/ui/ui_null.o" => + [ + "crypto/ui/ui_null.c", + ], + "crypto/ui/ui_openssl.o" => + [ + "crypto/ui/ui_openssl.c", + ], + "crypto/ui/ui_util.o" => + [ + "crypto/ui/ui_util.c", + ], + "crypto/uid.o" => + [ + "crypto/uid.c", + ], + "crypto/whrlpool/wp_block.o" => + [ + "crypto/whrlpool/wp_block.c", + ], + "crypto/whrlpool/wp_dgst.o" => + [ + "crypto/whrlpool/wp_dgst.c", + ], + "crypto/x509/by_dir.o" => + [ + "crypto/x509/by_dir.c", + ], + "crypto/x509/by_file.o" => + [ + "crypto/x509/by_file.c", + ], + "crypto/x509/t_crl.o" => + [ + "crypto/x509/t_crl.c", + ], + "crypto/x509/t_req.o" => + [ + "crypto/x509/t_req.c", + ], + "crypto/x509/t_x509.o" => + [ + "crypto/x509/t_x509.c", + ], + "crypto/x509/x509_att.o" => + [ + "crypto/x509/x509_att.c", + ], + "crypto/x509/x509_cmp.o" => + [ + "crypto/x509/x509_cmp.c", + ], + "crypto/x509/x509_d2.o" => + [ + "crypto/x509/x509_d2.c", + ], + "crypto/x509/x509_def.o" => + [ + "crypto/x509/x509_def.c", + ], + "crypto/x509/x509_err.o" => + [ + "crypto/x509/x509_err.c", + ], + "crypto/x509/x509_ext.o" => + [ + "crypto/x509/x509_ext.c", + ], + "crypto/x509/x509_lu.o" => + [ + "crypto/x509/x509_lu.c", + ], + "crypto/x509/x509_meth.o" => + [ + "crypto/x509/x509_meth.c", + ], + "crypto/x509/x509_obj.o" => + [ + "crypto/x509/x509_obj.c", + ], + "crypto/x509/x509_r2x.o" => + [ + "crypto/x509/x509_r2x.c", + ], + "crypto/x509/x509_req.o" => + [ + "crypto/x509/x509_req.c", + ], + "crypto/x509/x509_set.o" => + [ + "crypto/x509/x509_set.c", + ], + "crypto/x509/x509_trs.o" => + [ + "crypto/x509/x509_trs.c", + ], + "crypto/x509/x509_txt.o" => + [ + "crypto/x509/x509_txt.c", + ], + "crypto/x509/x509_v3.o" => + [ + "crypto/x509/x509_v3.c", + ], + "crypto/x509/x509_vfy.o" => + [ + "crypto/x509/x509_vfy.c", + ], + "crypto/x509/x509_vpm.o" => + [ + "crypto/x509/x509_vpm.c", + ], + "crypto/x509/x509cset.o" => + [ + "crypto/x509/x509cset.c", + ], + "crypto/x509/x509name.o" => + [ + "crypto/x509/x509name.c", + ], + "crypto/x509/x509rset.o" => + [ + "crypto/x509/x509rset.c", + ], + "crypto/x509/x509spki.o" => + [ + "crypto/x509/x509spki.c", + ], + "crypto/x509/x509type.o" => + [ + "crypto/x509/x509type.c", + ], + "crypto/x509/x_all.o" => + [ + "crypto/x509/x_all.c", + ], + "crypto/x509/x_attrib.o" => + [ + "crypto/x509/x_attrib.c", + ], + "crypto/x509/x_crl.o" => + [ + "crypto/x509/x_crl.c", + ], + "crypto/x509/x_exten.o" => + [ + "crypto/x509/x_exten.c", + ], + "crypto/x509/x_name.o" => + [ + "crypto/x509/x_name.c", + ], + "crypto/x509/x_pubkey.o" => + [ + "crypto/x509/x_pubkey.c", + ], + "crypto/x509/x_req.o" => + [ + "crypto/x509/x_req.c", + ], + "crypto/x509/x_x509.o" => + [ + "crypto/x509/x_x509.c", + ], + "crypto/x509/x_x509a.o" => + [ + "crypto/x509/x_x509a.c", + ], + "crypto/x509v3/pcy_cache.o" => + [ + "crypto/x509v3/pcy_cache.c", + ], + "crypto/x509v3/pcy_data.o" => + [ + "crypto/x509v3/pcy_data.c", + ], + "crypto/x509v3/pcy_lib.o" => + [ + "crypto/x509v3/pcy_lib.c", + ], + "crypto/x509v3/pcy_map.o" => + [ + "crypto/x509v3/pcy_map.c", + ], + "crypto/x509v3/pcy_node.o" => + [ + "crypto/x509v3/pcy_node.c", + ], + "crypto/x509v3/pcy_tree.o" => + [ + "crypto/x509v3/pcy_tree.c", + ], + "crypto/x509v3/v3_addr.o" => + [ + "crypto/x509v3/v3_addr.c", + ], + "crypto/x509v3/v3_admis.o" => + [ + "crypto/x509v3/v3_admis.c", + ], + "crypto/x509v3/v3_akey.o" => + [ + "crypto/x509v3/v3_akey.c", + ], + "crypto/x509v3/v3_akeya.o" => + [ + "crypto/x509v3/v3_akeya.c", + ], + "crypto/x509v3/v3_alt.o" => + [ + "crypto/x509v3/v3_alt.c", + ], + "crypto/x509v3/v3_asid.o" => + [ + "crypto/x509v3/v3_asid.c", + ], + "crypto/x509v3/v3_bcons.o" => + [ + "crypto/x509v3/v3_bcons.c", + ], + "crypto/x509v3/v3_bitst.o" => + [ + "crypto/x509v3/v3_bitst.c", + ], + "crypto/x509v3/v3_conf.o" => + [ + "crypto/x509v3/v3_conf.c", + ], + "crypto/x509v3/v3_cpols.o" => + [ + "crypto/x509v3/v3_cpols.c", + ], + "crypto/x509v3/v3_crld.o" => + [ + "crypto/x509v3/v3_crld.c", + ], + "crypto/x509v3/v3_enum.o" => + [ + "crypto/x509v3/v3_enum.c", + ], + "crypto/x509v3/v3_extku.o" => + [ + "crypto/x509v3/v3_extku.c", + ], + "crypto/x509v3/v3_genn.o" => + [ + "crypto/x509v3/v3_genn.c", + ], + "crypto/x509v3/v3_ia5.o" => + [ + "crypto/x509v3/v3_ia5.c", + ], + "crypto/x509v3/v3_info.o" => + [ + "crypto/x509v3/v3_info.c", + ], + "crypto/x509v3/v3_int.o" => + [ + "crypto/x509v3/v3_int.c", + ], + "crypto/x509v3/v3_lib.o" => + [ + "crypto/x509v3/v3_lib.c", + ], + "crypto/x509v3/v3_ncons.o" => + [ + "crypto/x509v3/v3_ncons.c", + ], + "crypto/x509v3/v3_pci.o" => + [ + "crypto/x509v3/v3_pci.c", + ], + "crypto/x509v3/v3_pcia.o" => + [ + "crypto/x509v3/v3_pcia.c", + ], + "crypto/x509v3/v3_pcons.o" => + [ + "crypto/x509v3/v3_pcons.c", + ], + "crypto/x509v3/v3_pku.o" => + [ + "crypto/x509v3/v3_pku.c", + ], + "crypto/x509v3/v3_pmaps.o" => + [ + "crypto/x509v3/v3_pmaps.c", + ], + "crypto/x509v3/v3_prn.o" => + [ + "crypto/x509v3/v3_prn.c", + ], + "crypto/x509v3/v3_purp.o" => + [ + "crypto/x509v3/v3_purp.c", + ], + "crypto/x509v3/v3_skey.o" => + [ + "crypto/x509v3/v3_skey.c", + ], + "crypto/x509v3/v3_sxnet.o" => + [ + "crypto/x509v3/v3_sxnet.c", + ], + "crypto/x509v3/v3_tlsf.o" => + [ + "crypto/x509v3/v3_tlsf.c", + ], + "crypto/x509v3/v3_utl.o" => + [ + "crypto/x509v3/v3_utl.c", + ], + "crypto/x509v3/v3err.o" => + [ + "crypto/x509v3/v3err.c", + ], + "engines/e_capi.o" => + [ + "engines/e_capi.c", + ], + "engines/e_padlock.o" => + [ + "engines/e_padlock.c", + ], + "fuzz/asn1-test" => + [ + "fuzz/asn1.o", + "fuzz/test-corpus.o", + ], + "fuzz/asn1.o" => + [ + "fuzz/asn1.c", + ], + "fuzz/asn1parse-test" => + [ + "fuzz/asn1parse.o", + "fuzz/test-corpus.o", + ], + "fuzz/asn1parse.o" => + [ + "fuzz/asn1parse.c", + ], + "fuzz/bignum-test" => + [ + "fuzz/bignum.o", + "fuzz/test-corpus.o", + ], + "fuzz/bignum.o" => + [ + "fuzz/bignum.c", + ], + "fuzz/bndiv-test" => + [ + "fuzz/bndiv.o", + "fuzz/test-corpus.o", + ], + "fuzz/bndiv.o" => + [ + "fuzz/bndiv.c", + ], + "fuzz/client-test" => + [ + "fuzz/client.o", + "fuzz/test-corpus.o", + ], + "fuzz/client.o" => + [ + "fuzz/client.c", + ], + "fuzz/cms-test" => + [ + "fuzz/cms.o", + "fuzz/test-corpus.o", + ], + "fuzz/cms.o" => + [ + "fuzz/cms.c", + ], + "fuzz/conf-test" => + [ + "fuzz/conf.o", + "fuzz/test-corpus.o", + ], + "fuzz/conf.o" => + [ + "fuzz/conf.c", + ], + "fuzz/crl-test" => + [ + "fuzz/crl.o", + "fuzz/test-corpus.o", + ], + "fuzz/crl.o" => + [ + "fuzz/crl.c", + ], + "fuzz/ct-test" => + [ + "fuzz/ct.o", + "fuzz/test-corpus.o", + ], + "fuzz/ct.o" => + [ + "fuzz/ct.c", + ], + "fuzz/server-test" => + [ + "fuzz/server.o", + "fuzz/test-corpus.o", + ], + "fuzz/server.o" => + [ + "fuzz/server.c", + ], + "fuzz/test-corpus.o" => + [ + "fuzz/test-corpus.c", + ], + "fuzz/x509-test" => + [ + "fuzz/test-corpus.o", + "fuzz/x509.o", + ], + "fuzz/x509.o" => + [ + "fuzz/x509.c", + ], + "libcrypto" => + [ + "crypto/aes/aes_cbc.o", + "crypto/aes/aes_cfb.o", + "crypto/aes/aes_core.o", + "crypto/aes/aes_ecb.o", + "crypto/aes/aes_ige.o", + "crypto/aes/aes_misc.o", + "crypto/aes/aes_ofb.o", + "crypto/aes/aes_wrap.o", + "crypto/aes/aesv8-armx.o", + "crypto/aes/vpaes-armv8.o", + "crypto/aria/aria.o", + "crypto/arm64cpuid.o", + "crypto/armcap.o", + "crypto/asn1/a_bitstr.o", + "crypto/asn1/a_d2i_fp.o", + "crypto/asn1/a_digest.o", + "crypto/asn1/a_dup.o", + "crypto/asn1/a_gentm.o", + "crypto/asn1/a_i2d_fp.o", + "crypto/asn1/a_int.o", + "crypto/asn1/a_mbstr.o", + "crypto/asn1/a_object.o", + "crypto/asn1/a_octet.o", + "crypto/asn1/a_print.o", + "crypto/asn1/a_sign.o", + "crypto/asn1/a_strex.o", + "crypto/asn1/a_strnid.o", + "crypto/asn1/a_time.o", + "crypto/asn1/a_type.o", + "crypto/asn1/a_utctm.o", + "crypto/asn1/a_utf8.o", + "crypto/asn1/a_verify.o", + "crypto/asn1/ameth_lib.o", + "crypto/asn1/asn1_err.o", + "crypto/asn1/asn1_gen.o", + "crypto/asn1/asn1_item_list.o", + "crypto/asn1/asn1_lib.o", + "crypto/asn1/asn1_par.o", + "crypto/asn1/asn_mime.o", + "crypto/asn1/asn_moid.o", + "crypto/asn1/asn_mstbl.o", + "crypto/asn1/asn_pack.o", + "crypto/asn1/bio_asn1.o", + "crypto/asn1/bio_ndef.o", + "crypto/asn1/d2i_pr.o", + "crypto/asn1/d2i_pu.o", + "crypto/asn1/evp_asn1.o", + "crypto/asn1/f_int.o", + "crypto/asn1/f_string.o", + "crypto/asn1/i2d_pr.o", + "crypto/asn1/i2d_pu.o", + "crypto/asn1/n_pkey.o", + "crypto/asn1/nsseq.o", + "crypto/asn1/p5_pbe.o", + "crypto/asn1/p5_pbev2.o", + "crypto/asn1/p5_scrypt.o", + "crypto/asn1/p8_pkey.o", + "crypto/asn1/t_bitst.o", + "crypto/asn1/t_pkey.o", + "crypto/asn1/t_spki.o", + "crypto/asn1/tasn_dec.o", + "crypto/asn1/tasn_enc.o", + "crypto/asn1/tasn_fre.o", + "crypto/asn1/tasn_new.o", + "crypto/asn1/tasn_prn.o", + "crypto/asn1/tasn_scn.o", + "crypto/asn1/tasn_typ.o", + "crypto/asn1/tasn_utl.o", + "crypto/asn1/x_algor.o", + "crypto/asn1/x_bignum.o", + "crypto/asn1/x_info.o", + "crypto/asn1/x_int64.o", + "crypto/asn1/x_long.o", + "crypto/asn1/x_pkey.o", + "crypto/asn1/x_sig.o", + "crypto/asn1/x_spki.o", + "crypto/asn1/x_val.o", + "crypto/async/arch/async_null.o", + "crypto/async/arch/async_posix.o", + "crypto/async/arch/async_win.o", + "crypto/async/async.o", + "crypto/async/async_err.o", + "crypto/async/async_wait.o", + "crypto/bf/bf_cfb64.o", + "crypto/bf/bf_ecb.o", + "crypto/bf/bf_enc.o", + "crypto/bf/bf_ofb64.o", + "crypto/bf/bf_skey.o", + "crypto/bio/b_addr.o", + "crypto/bio/b_dump.o", + "crypto/bio/b_print.o", + "crypto/bio/b_sock.o", + "crypto/bio/b_sock2.o", + "crypto/bio/bf_buff.o", + "crypto/bio/bf_lbuf.o", + "crypto/bio/bf_nbio.o", + "crypto/bio/bf_null.o", + "crypto/bio/bio_cb.o", + "crypto/bio/bio_err.o", + "crypto/bio/bio_lib.o", + "crypto/bio/bio_meth.o", + "crypto/bio/bss_acpt.o", + "crypto/bio/bss_bio.o", + "crypto/bio/bss_conn.o", + "crypto/bio/bss_dgram.o", + "crypto/bio/bss_fd.o", + "crypto/bio/bss_file.o", + "crypto/bio/bss_log.o", + "crypto/bio/bss_mem.o", + "crypto/bio/bss_null.o", + "crypto/bio/bss_sock.o", + "crypto/blake2/blake2b.o", + "crypto/blake2/blake2s.o", + "crypto/blake2/m_blake2b.o", + "crypto/blake2/m_blake2s.o", + "crypto/bn/armv8-mont.o", + "crypto/bn/bn_add.o", + "crypto/bn/bn_asm.o", + "crypto/bn/bn_blind.o", + "crypto/bn/bn_const.o", + "crypto/bn/bn_ctx.o", + "crypto/bn/bn_depr.o", + "crypto/bn/bn_dh.o", + "crypto/bn/bn_div.o", + "crypto/bn/bn_err.o", + "crypto/bn/bn_exp.o", + "crypto/bn/bn_exp2.o", + "crypto/bn/bn_gcd.o", + "crypto/bn/bn_gf2m.o", + "crypto/bn/bn_intern.o", + "crypto/bn/bn_kron.o", + "crypto/bn/bn_lib.o", + "crypto/bn/bn_mod.o", + "crypto/bn/bn_mont.o", + "crypto/bn/bn_mpi.o", + "crypto/bn/bn_mul.o", + "crypto/bn/bn_nist.o", + "crypto/bn/bn_prime.o", + "crypto/bn/bn_print.o", + "crypto/bn/bn_rand.o", + "crypto/bn/bn_recp.o", + "crypto/bn/bn_shift.o", + "crypto/bn/bn_sqr.o", + "crypto/bn/bn_sqrt.o", + "crypto/bn/bn_srp.o", + "crypto/bn/bn_word.o", + "crypto/bn/bn_x931p.o", + "crypto/buffer/buf_err.o", + "crypto/buffer/buffer.o", + "crypto/camellia/camellia.o", + "crypto/camellia/cmll_cbc.o", + "crypto/camellia/cmll_cfb.o", + "crypto/camellia/cmll_ctr.o", + "crypto/camellia/cmll_ecb.o", + "crypto/camellia/cmll_misc.o", + "crypto/camellia/cmll_ofb.o", + "crypto/cast/c_cfb64.o", + "crypto/cast/c_ecb.o", + "crypto/cast/c_enc.o", + "crypto/cast/c_ofb64.o", + "crypto/cast/c_skey.o", + "crypto/chacha/chacha-armv8.o", + "crypto/cmac/cm_ameth.o", + "crypto/cmac/cm_pmeth.o", + "crypto/cmac/cmac.o", + "crypto/cms/cms_asn1.o", + "crypto/cms/cms_att.o", + "crypto/cms/cms_cd.o", + "crypto/cms/cms_dd.o", + "crypto/cms/cms_enc.o", + "crypto/cms/cms_env.o", + "crypto/cms/cms_err.o", + "crypto/cms/cms_ess.o", + "crypto/cms/cms_io.o", + "crypto/cms/cms_kari.o", + "crypto/cms/cms_lib.o", + "crypto/cms/cms_pwri.o", + "crypto/cms/cms_sd.o", + "crypto/cms/cms_smime.o", + "crypto/conf/conf_api.o", + "crypto/conf/conf_def.o", + "crypto/conf/conf_err.o", + "crypto/conf/conf_lib.o", + "crypto/conf/conf_mall.o", + "crypto/conf/conf_mod.o", + "crypto/conf/conf_sap.o", + "crypto/conf/conf_ssl.o", + "crypto/cpt_err.o", + "crypto/cryptlib.o", + "crypto/ct/ct_b64.o", + "crypto/ct/ct_err.o", + "crypto/ct/ct_log.o", + "crypto/ct/ct_oct.o", + "crypto/ct/ct_policy.o", + "crypto/ct/ct_prn.o", + "crypto/ct/ct_sct.o", + "crypto/ct/ct_sct_ctx.o", + "crypto/ct/ct_vfy.o", + "crypto/ct/ct_x509v3.o", + "crypto/ctype.o", + "crypto/cversion.o", + "crypto/des/cbc_cksm.o", + "crypto/des/cbc_enc.o", + "crypto/des/cfb64ede.o", + "crypto/des/cfb64enc.o", + "crypto/des/cfb_enc.o", + "crypto/des/des_enc.o", + "crypto/des/ecb3_enc.o", + "crypto/des/ecb_enc.o", + "crypto/des/fcrypt.o", + "crypto/des/fcrypt_b.o", + "crypto/des/ofb64ede.o", + "crypto/des/ofb64enc.o", + "crypto/des/ofb_enc.o", + "crypto/des/pcbc_enc.o", + "crypto/des/qud_cksm.o", + "crypto/des/rand_key.o", + "crypto/des/set_key.o", + "crypto/des/str2key.o", + "crypto/des/xcbc_enc.o", + "crypto/dh/dh_ameth.o", + "crypto/dh/dh_asn1.o", + "crypto/dh/dh_check.o", + "crypto/dh/dh_depr.o", + "crypto/dh/dh_err.o", + "crypto/dh/dh_gen.o", + "crypto/dh/dh_kdf.o", + "crypto/dh/dh_key.o", + "crypto/dh/dh_lib.o", + "crypto/dh/dh_meth.o", + "crypto/dh/dh_pmeth.o", + "crypto/dh/dh_prn.o", + "crypto/dh/dh_rfc5114.o", + "crypto/dh/dh_rfc7919.o", + "crypto/dsa/dsa_ameth.o", + "crypto/dsa/dsa_asn1.o", + "crypto/dsa/dsa_depr.o", + "crypto/dsa/dsa_err.o", + "crypto/dsa/dsa_gen.o", + "crypto/dsa/dsa_key.o", + "crypto/dsa/dsa_lib.o", + "crypto/dsa/dsa_meth.o", + "crypto/dsa/dsa_ossl.o", + "crypto/dsa/dsa_pmeth.o", + "crypto/dsa/dsa_prn.o", + "crypto/dsa/dsa_sign.o", + "crypto/dsa/dsa_vrf.o", + "crypto/dso/dso_dl.o", + "crypto/dso/dso_dlfcn.o", + "crypto/dso/dso_err.o", + "crypto/dso/dso_lib.o", + "crypto/dso/dso_openssl.o", + "crypto/dso/dso_vms.o", + "crypto/dso/dso_win32.o", + "crypto/ebcdic.o", + "crypto/ec/curve25519.o", + "crypto/ec/curve448/arch_32/f_impl.o", + "crypto/ec/curve448/curve448.o", + "crypto/ec/curve448/curve448_tables.o", + "crypto/ec/curve448/eddsa.o", + "crypto/ec/curve448/f_generic.o", + "crypto/ec/curve448/scalar.o", + "crypto/ec/ec2_oct.o", + "crypto/ec/ec2_smpl.o", + "crypto/ec/ec_ameth.o", + "crypto/ec/ec_asn1.o", + "crypto/ec/ec_check.o", + "crypto/ec/ec_curve.o", + "crypto/ec/ec_cvt.o", + "crypto/ec/ec_err.o", + "crypto/ec/ec_key.o", + "crypto/ec/ec_kmeth.o", + "crypto/ec/ec_lib.o", + "crypto/ec/ec_mult.o", + "crypto/ec/ec_oct.o", + "crypto/ec/ec_pmeth.o", + "crypto/ec/ec_print.o", + "crypto/ec/ecdh_kdf.o", + "crypto/ec/ecdh_ossl.o", + "crypto/ec/ecdsa_ossl.o", + "crypto/ec/ecdsa_sign.o", + "crypto/ec/ecdsa_vrf.o", + "crypto/ec/eck_prn.o", + "crypto/ec/ecp_mont.o", + "crypto/ec/ecp_nist.o", + "crypto/ec/ecp_nistp224.o", + "crypto/ec/ecp_nistp256.o", + "crypto/ec/ecp_nistp521.o", + "crypto/ec/ecp_nistputil.o", + "crypto/ec/ecp_nistz256-armv8.o", + "crypto/ec/ecp_nistz256.o", + "crypto/ec/ecp_oct.o", + "crypto/ec/ecp_smpl.o", + "crypto/ec/ecx_meth.o", + "crypto/engine/eng_all.o", + "crypto/engine/eng_cnf.o", + "crypto/engine/eng_ctrl.o", + "crypto/engine/eng_dyn.o", + "crypto/engine/eng_err.o", + "crypto/engine/eng_fat.o", + "crypto/engine/eng_init.o", + "crypto/engine/eng_lib.o", + "crypto/engine/eng_list.o", + "crypto/engine/eng_openssl.o", + "crypto/engine/eng_pkey.o", + "crypto/engine/eng_rdrand.o", + "crypto/engine/eng_table.o", + "crypto/engine/tb_asnmth.o", + "crypto/engine/tb_cipher.o", + "crypto/engine/tb_dh.o", + "crypto/engine/tb_digest.o", + "crypto/engine/tb_dsa.o", + "crypto/engine/tb_eckey.o", + "crypto/engine/tb_pkmeth.o", + "crypto/engine/tb_rand.o", + "crypto/engine/tb_rsa.o", + "crypto/err/err.o", + "crypto/err/err_all.o", + "crypto/err/err_prn.o", + "crypto/evp/bio_b64.o", + "crypto/evp/bio_enc.o", + "crypto/evp/bio_md.o", + "crypto/evp/bio_ok.o", + "crypto/evp/c_allc.o", + "crypto/evp/c_alld.o", + "crypto/evp/cmeth_lib.o", + "crypto/evp/digest.o", + "crypto/evp/e_aes.o", + "crypto/evp/e_aes_cbc_hmac_sha1.o", + "crypto/evp/e_aes_cbc_hmac_sha256.o", + "crypto/evp/e_aria.o", + "crypto/evp/e_bf.o", + "crypto/evp/e_camellia.o", + "crypto/evp/e_cast.o", + "crypto/evp/e_chacha20_poly1305.o", + "crypto/evp/e_des.o", + "crypto/evp/e_des3.o", + "crypto/evp/e_idea.o", + "crypto/evp/e_null.o", + "crypto/evp/e_old.o", + "crypto/evp/e_rc2.o", + "crypto/evp/e_rc4.o", + "crypto/evp/e_rc4_hmac_md5.o", + "crypto/evp/e_rc5.o", + "crypto/evp/e_seed.o", + "crypto/evp/e_sm4.o", + "crypto/evp/e_xcbc_d.o", + "crypto/evp/encode.o", + "crypto/evp/evp_cnf.o", + "crypto/evp/evp_enc.o", + "crypto/evp/evp_err.o", + "crypto/evp/evp_key.o", + "crypto/evp/evp_lib.o", + "crypto/evp/evp_pbe.o", + "crypto/evp/evp_pkey.o", + "crypto/evp/m_md2.o", + "crypto/evp/m_md4.o", + "crypto/evp/m_md5.o", + "crypto/evp/m_md5_sha1.o", + "crypto/evp/m_mdc2.o", + "crypto/evp/m_null.o", + "crypto/evp/m_ripemd.o", + "crypto/evp/m_sha1.o", + "crypto/evp/m_sha3.o", + "crypto/evp/m_sigver.o", + "crypto/evp/m_wp.o", + "crypto/evp/names.o", + "crypto/evp/p5_crpt.o", + "crypto/evp/p5_crpt2.o", + "crypto/evp/p_dec.o", + "crypto/evp/p_enc.o", + "crypto/evp/p_lib.o", + "crypto/evp/p_open.o", + "crypto/evp/p_seal.o", + "crypto/evp/p_sign.o", + "crypto/evp/p_verify.o", + "crypto/evp/pbe_scrypt.o", + "crypto/evp/pmeth_fn.o", + "crypto/evp/pmeth_gn.o", + "crypto/evp/pmeth_lib.o", + "crypto/ex_data.o", + "crypto/getenv.o", + "crypto/hmac/hm_ameth.o", + "crypto/hmac/hm_pmeth.o", + "crypto/hmac/hmac.o", + "crypto/idea/i_cbc.o", + "crypto/idea/i_cfb64.o", + "crypto/idea/i_ecb.o", + "crypto/idea/i_ofb64.o", + "crypto/idea/i_skey.o", + "crypto/init.o", + "crypto/kdf/hkdf.o", + "crypto/kdf/kdf_err.o", + "crypto/kdf/scrypt.o", + "crypto/kdf/tls1_prf.o", + "crypto/lhash/lh_stats.o", + "crypto/lhash/lhash.o", + "crypto/md4/md4_dgst.o", + "crypto/md4/md4_one.o", + "crypto/md5/md5_dgst.o", + "crypto/md5/md5_one.o", + "crypto/mdc2/mdc2_one.o", + "crypto/mdc2/mdc2dgst.o", + "crypto/mem.o", + "crypto/mem_dbg.o", + "crypto/mem_sec.o", + "crypto/modes/cbc128.o", + "crypto/modes/ccm128.o", + "crypto/modes/cfb128.o", + "crypto/modes/ctr128.o", + "crypto/modes/cts128.o", + "crypto/modes/gcm128.o", + "crypto/modes/ghashv8-armx.o", + "crypto/modes/ocb128.o", + "crypto/modes/ofb128.o", + "crypto/modes/wrap128.o", + "crypto/modes/xts128.o", + "crypto/o_dir.o", + "crypto/o_fips.o", + "crypto/o_fopen.o", + "crypto/o_init.o", + "crypto/o_str.o", + "crypto/o_time.o", + "crypto/objects/o_names.o", + "crypto/objects/obj_dat.o", + "crypto/objects/obj_err.o", + "crypto/objects/obj_lib.o", + "crypto/objects/obj_xref.o", + "crypto/ocsp/ocsp_asn.o", + "crypto/ocsp/ocsp_cl.o", + "crypto/ocsp/ocsp_err.o", + "crypto/ocsp/ocsp_ext.o", + "crypto/ocsp/ocsp_ht.o", + "crypto/ocsp/ocsp_lib.o", + "crypto/ocsp/ocsp_prn.o", + "crypto/ocsp/ocsp_srv.o", + "crypto/ocsp/ocsp_vfy.o", + "crypto/ocsp/v3_ocsp.o", + "crypto/pem/pem_all.o", + "crypto/pem/pem_err.o", + "crypto/pem/pem_info.o", + "crypto/pem/pem_lib.o", + "crypto/pem/pem_oth.o", + "crypto/pem/pem_pk8.o", + "crypto/pem/pem_pkey.o", + "crypto/pem/pem_sign.o", + "crypto/pem/pem_x509.o", + "crypto/pem/pem_xaux.o", + "crypto/pem/pvkfmt.o", + "crypto/pkcs12/p12_add.o", + "crypto/pkcs12/p12_asn.o", + "crypto/pkcs12/p12_attr.o", + "crypto/pkcs12/p12_crpt.o", + "crypto/pkcs12/p12_crt.o", + "crypto/pkcs12/p12_decr.o", + "crypto/pkcs12/p12_init.o", + "crypto/pkcs12/p12_key.o", + "crypto/pkcs12/p12_kiss.o", + "crypto/pkcs12/p12_mutl.o", + "crypto/pkcs12/p12_npas.o", + "crypto/pkcs12/p12_p8d.o", + "crypto/pkcs12/p12_p8e.o", + "crypto/pkcs12/p12_sbag.o", + "crypto/pkcs12/p12_utl.o", + "crypto/pkcs12/pk12err.o", + "crypto/pkcs7/bio_pk7.o", + "crypto/pkcs7/pk7_asn1.o", + "crypto/pkcs7/pk7_attr.o", + "crypto/pkcs7/pk7_doit.o", + "crypto/pkcs7/pk7_lib.o", + "crypto/pkcs7/pk7_mime.o", + "crypto/pkcs7/pk7_smime.o", + "crypto/pkcs7/pkcs7err.o", + "crypto/poly1305/poly1305-armv8.o", + "crypto/poly1305/poly1305.o", + "crypto/poly1305/poly1305_ameth.o", + "crypto/poly1305/poly1305_pmeth.o", + "crypto/rand/drbg_ctr.o", + "crypto/rand/drbg_lib.o", + "crypto/rand/rand_egd.o", + "crypto/rand/rand_err.o", + "crypto/rand/rand_lib.o", + "crypto/rand/rand_unix.o", + "crypto/rand/rand_vms.o", + "crypto/rand/rand_win.o", + "crypto/rand/randfile.o", + "crypto/rc2/rc2_cbc.o", + "crypto/rc2/rc2_ecb.o", + "crypto/rc2/rc2_skey.o", + "crypto/rc2/rc2cfb64.o", + "crypto/rc2/rc2ofb64.o", + "crypto/rc4/rc4_enc.o", + "crypto/rc4/rc4_skey.o", + "crypto/ripemd/rmd_dgst.o", + "crypto/ripemd/rmd_one.o", + "crypto/rsa/rsa_ameth.o", + "crypto/rsa/rsa_asn1.o", + "crypto/rsa/rsa_chk.o", + "crypto/rsa/rsa_crpt.o", + "crypto/rsa/rsa_depr.o", + "crypto/rsa/rsa_err.o", + "crypto/rsa/rsa_gen.o", + "crypto/rsa/rsa_lib.o", + "crypto/rsa/rsa_meth.o", + "crypto/rsa/rsa_mp.o", + "crypto/rsa/rsa_none.o", + "crypto/rsa/rsa_oaep.o", + "crypto/rsa/rsa_ossl.o", + "crypto/rsa/rsa_pk1.o", + "crypto/rsa/rsa_pmeth.o", + "crypto/rsa/rsa_prn.o", + "crypto/rsa/rsa_pss.o", + "crypto/rsa/rsa_saos.o", + "crypto/rsa/rsa_sign.o", + "crypto/rsa/rsa_ssl.o", + "crypto/rsa/rsa_x931.o", + "crypto/rsa/rsa_x931g.o", + "crypto/seed/seed.o", + "crypto/seed/seed_cbc.o", + "crypto/seed/seed_cfb.o", + "crypto/seed/seed_ecb.o", + "crypto/seed/seed_ofb.o", + "crypto/sha/keccak1600-armv8.o", + "crypto/sha/sha1-armv8.o", + "crypto/sha/sha1_one.o", + "crypto/sha/sha1dgst.o", + "crypto/sha/sha256-armv8.o", + "crypto/sha/sha256.o", + "crypto/sha/sha512-armv8.o", + "crypto/sha/sha512.o", + "crypto/siphash/siphash.o", + "crypto/siphash/siphash_ameth.o", + "crypto/siphash/siphash_pmeth.o", + "crypto/sm2/sm2_crypt.o", + "crypto/sm2/sm2_err.o", + "crypto/sm2/sm2_pmeth.o", + "crypto/sm2/sm2_sign.o", + "crypto/sm3/m_sm3.o", + "crypto/sm3/sm3.o", + "crypto/sm4/sm4.o", + "crypto/srp/srp_lib.o", + "crypto/srp/srp_vfy.o", + "crypto/stack/stack.o", + "crypto/store/loader_file.o", + "crypto/store/store_err.o", + "crypto/store/store_init.o", + "crypto/store/store_lib.o", + "crypto/store/store_register.o", + "crypto/store/store_strings.o", + "crypto/threads_none.o", + "crypto/threads_pthread.o", + "crypto/threads_win.o", + "crypto/ts/ts_asn1.o", + "crypto/ts/ts_conf.o", + "crypto/ts/ts_err.o", + "crypto/ts/ts_lib.o", + "crypto/ts/ts_req_print.o", + "crypto/ts/ts_req_utils.o", + "crypto/ts/ts_rsp_print.o", + "crypto/ts/ts_rsp_sign.o", + "crypto/ts/ts_rsp_utils.o", + "crypto/ts/ts_rsp_verify.o", + "crypto/ts/ts_verify_ctx.o", + "crypto/txt_db/txt_db.o", + "crypto/ui/ui_err.o", + "crypto/ui/ui_lib.o", + "crypto/ui/ui_null.o", + "crypto/ui/ui_openssl.o", + "crypto/ui/ui_util.o", + "crypto/uid.o", + "crypto/whrlpool/wp_block.o", + "crypto/whrlpool/wp_dgst.o", + "crypto/x509/by_dir.o", + "crypto/x509/by_file.o", + "crypto/x509/t_crl.o", + "crypto/x509/t_req.o", + "crypto/x509/t_x509.o", + "crypto/x509/x509_att.o", + "crypto/x509/x509_cmp.o", + "crypto/x509/x509_d2.o", + "crypto/x509/x509_def.o", + "crypto/x509/x509_err.o", + "crypto/x509/x509_ext.o", + "crypto/x509/x509_lu.o", + "crypto/x509/x509_meth.o", + "crypto/x509/x509_obj.o", + "crypto/x509/x509_r2x.o", + "crypto/x509/x509_req.o", + "crypto/x509/x509_set.o", + "crypto/x509/x509_trs.o", + "crypto/x509/x509_txt.o", + "crypto/x509/x509_v3.o", + "crypto/x509/x509_vfy.o", + "crypto/x509/x509_vpm.o", + "crypto/x509/x509cset.o", + "crypto/x509/x509name.o", + "crypto/x509/x509rset.o", + "crypto/x509/x509spki.o", + "crypto/x509/x509type.o", + "crypto/x509/x_all.o", + "crypto/x509/x_attrib.o", + "crypto/x509/x_crl.o", + "crypto/x509/x_exten.o", + "crypto/x509/x_name.o", + "crypto/x509/x_pubkey.o", + "crypto/x509/x_req.o", + "crypto/x509/x_x509.o", + "crypto/x509/x_x509a.o", + "crypto/x509v3/pcy_cache.o", + "crypto/x509v3/pcy_data.o", + "crypto/x509v3/pcy_lib.o", + "crypto/x509v3/pcy_map.o", + "crypto/x509v3/pcy_node.o", + "crypto/x509v3/pcy_tree.o", + "crypto/x509v3/v3_addr.o", + "crypto/x509v3/v3_admis.o", + "crypto/x509v3/v3_akey.o", + "crypto/x509v3/v3_akeya.o", + "crypto/x509v3/v3_alt.o", + "crypto/x509v3/v3_asid.o", + "crypto/x509v3/v3_bcons.o", + "crypto/x509v3/v3_bitst.o", + "crypto/x509v3/v3_conf.o", + "crypto/x509v3/v3_cpols.o", + "crypto/x509v3/v3_crld.o", + "crypto/x509v3/v3_enum.o", + "crypto/x509v3/v3_extku.o", + "crypto/x509v3/v3_genn.o", + "crypto/x509v3/v3_ia5.o", + "crypto/x509v3/v3_info.o", + "crypto/x509v3/v3_int.o", + "crypto/x509v3/v3_lib.o", + "crypto/x509v3/v3_ncons.o", + "crypto/x509v3/v3_pci.o", + "crypto/x509v3/v3_pcia.o", + "crypto/x509v3/v3_pcons.o", + "crypto/x509v3/v3_pku.o", + "crypto/x509v3/v3_pmaps.o", + "crypto/x509v3/v3_prn.o", + "crypto/x509v3/v3_purp.o", + "crypto/x509v3/v3_skey.o", + "crypto/x509v3/v3_sxnet.o", + "crypto/x509v3/v3_tlsf.o", + "crypto/x509v3/v3_utl.o", + "crypto/x509v3/v3err.o", + "engines/e_capi.o", + "engines/e_padlock.o", + ], + "libssl" => + [ + "ssl/bio_ssl.o", + "ssl/d1_lib.o", + "ssl/d1_msg.o", + "ssl/d1_srtp.o", + "ssl/methods.o", + "ssl/packet.o", + "ssl/pqueue.o", + "ssl/record/dtls1_bitmap.o", + "ssl/record/rec_layer_d1.o", + "ssl/record/rec_layer_s3.o", + "ssl/record/ssl3_buffer.o", + "ssl/record/ssl3_record.o", + "ssl/record/ssl3_record_tls13.o", + "ssl/s3_cbc.o", + "ssl/s3_enc.o", + "ssl/s3_lib.o", + "ssl/s3_msg.o", + "ssl/ssl_asn1.o", + "ssl/ssl_cert.o", + "ssl/ssl_ciph.o", + "ssl/ssl_conf.o", + "ssl/ssl_err.o", + "ssl/ssl_init.o", + "ssl/ssl_lib.o", + "ssl/ssl_mcnf.o", + "ssl/ssl_rsa.o", + "ssl/ssl_sess.o", + "ssl/ssl_stat.o", + "ssl/ssl_txt.o", + "ssl/ssl_utst.o", + "ssl/statem/extensions.o", + "ssl/statem/extensions_clnt.o", + "ssl/statem/extensions_cust.o", + "ssl/statem/extensions_srvr.o", + "ssl/statem/statem.o", + "ssl/statem/statem_clnt.o", + "ssl/statem/statem_dtls.o", + "ssl/statem/statem_lib.o", + "ssl/statem/statem_srvr.o", + "ssl/t1_enc.o", + "ssl/t1_lib.o", + "ssl/t1_trce.o", + "ssl/tls13_enc.o", + "ssl/tls_srp.o", + ], + "ssl/bio_ssl.o" => + [ + "ssl/bio_ssl.c", + ], + "ssl/d1_lib.o" => + [ + "ssl/d1_lib.c", + ], + "ssl/d1_msg.o" => + [ + "ssl/d1_msg.c", + ], + "ssl/d1_srtp.o" => + [ + "ssl/d1_srtp.c", + ], + "ssl/methods.o" => + [ + "ssl/methods.c", + ], + "ssl/packet.o" => + [ + "ssl/packet.c", + ], + "ssl/pqueue.o" => + [ + "ssl/pqueue.c", + ], + "ssl/record/dtls1_bitmap.o" => + [ + "ssl/record/dtls1_bitmap.c", + ], + "ssl/record/rec_layer_d1.o" => + [ + "ssl/record/rec_layer_d1.c", + ], + "ssl/record/rec_layer_s3.o" => + [ + "ssl/record/rec_layer_s3.c", + ], + "ssl/record/ssl3_buffer.o" => + [ + "ssl/record/ssl3_buffer.c", + ], + "ssl/record/ssl3_record.o" => + [ + "ssl/record/ssl3_record.c", + ], + "ssl/record/ssl3_record_tls13.o" => + [ + "ssl/record/ssl3_record_tls13.c", + ], + "ssl/s3_cbc.o" => + [ + "ssl/s3_cbc.c", + ], + "ssl/s3_enc.o" => + [ + "ssl/s3_enc.c", + ], + "ssl/s3_lib.o" => + [ + "ssl/s3_lib.c", + ], + "ssl/s3_msg.o" => + [ + "ssl/s3_msg.c", + ], + "ssl/ssl_asn1.o" => + [ + "ssl/ssl_asn1.c", + ], + "ssl/ssl_cert.o" => + [ + "ssl/ssl_cert.c", + ], + "ssl/ssl_ciph.o" => + [ + "ssl/ssl_ciph.c", + ], + "ssl/ssl_conf.o" => + [ + "ssl/ssl_conf.c", + ], + "ssl/ssl_err.o" => + [ + "ssl/ssl_err.c", + ], + "ssl/ssl_init.o" => + [ + "ssl/ssl_init.c", + ], + "ssl/ssl_lib.o" => + [ + "ssl/ssl_lib.c", + ], + "ssl/ssl_mcnf.o" => + [ + "ssl/ssl_mcnf.c", + ], + "ssl/ssl_rsa.o" => + [ + "ssl/ssl_rsa.c", + ], + "ssl/ssl_sess.o" => + [ + "ssl/ssl_sess.c", + ], + "ssl/ssl_stat.o" => + [ + "ssl/ssl_stat.c", + ], + "ssl/ssl_txt.o" => + [ + "ssl/ssl_txt.c", + ], + "ssl/ssl_utst.o" => + [ + "ssl/ssl_utst.c", + ], + "ssl/statem/extensions.o" => + [ + "ssl/statem/extensions.c", + ], + "ssl/statem/extensions_clnt.o" => + [ + "ssl/statem/extensions_clnt.c", + ], + "ssl/statem/extensions_cust.o" => + [ + "ssl/statem/extensions_cust.c", + ], + "ssl/statem/extensions_srvr.o" => + [ + "ssl/statem/extensions_srvr.c", + ], + "ssl/statem/statem.o" => + [ + "ssl/statem/statem.c", + ], + "ssl/statem/statem_clnt.o" => + [ + "ssl/statem/statem_clnt.c", + ], + "ssl/statem/statem_dtls.o" => + [ + "ssl/statem/statem_dtls.c", + ], + "ssl/statem/statem_lib.o" => + [ + "ssl/statem/statem_lib.c", + ], + "ssl/statem/statem_srvr.o" => + [ + "ssl/statem/statem_srvr.c", + ], + "ssl/t1_enc.o" => + [ + "ssl/t1_enc.c", + ], + "ssl/t1_lib.o" => + [ + "ssl/t1_lib.c", + ], + "ssl/t1_trce.o" => + [ + "ssl/t1_trce.c", + ], + "ssl/tls13_enc.o" => + [ + "ssl/tls13_enc.c", + ], + "ssl/tls_srp.o" => + [ + "ssl/tls_srp.c", + ], + "test/aborttest" => + [ + "test/aborttest.o", + ], + "test/aborttest.o" => + [ + "test/aborttest.c", + ], + "test/afalgtest" => + [ + "test/afalgtest.o", + ], + "test/afalgtest.o" => + [ + "test/afalgtest.c", + ], + "test/asn1_decode_test" => + [ + "test/asn1_decode_test.o", + ], + "test/asn1_decode_test.o" => + [ + "test/asn1_decode_test.c", + ], + "test/asn1_encode_test" => + [ + "test/asn1_encode_test.o", + ], + "test/asn1_encode_test.o" => + [ + "test/asn1_encode_test.c", + ], + "test/asn1_internal_test" => + [ + "test/asn1_internal_test.o", + ], + "test/asn1_internal_test.o" => + [ + "test/asn1_internal_test.c", + ], + "test/asn1_string_table_test" => + [ + "test/asn1_string_table_test.o", + ], + "test/asn1_string_table_test.o" => + [ + "test/asn1_string_table_test.c", + ], + "test/asn1_time_test" => + [ + "test/asn1_time_test.o", + ], + "test/asn1_time_test.o" => + [ + "test/asn1_time_test.c", + ], + "test/asynciotest" => + [ + "test/asynciotest.o", + "test/ssltestlib.o", + ], + "test/asynciotest.o" => + [ + "test/asynciotest.c", + ], + "test/asynctest" => + [ + "test/asynctest.o", + ], + "test/asynctest.o" => + [ + "test/asynctest.c", + ], + "test/bad_dtls_test" => + [ + "test/bad_dtls_test.o", + ], + "test/bad_dtls_test.o" => + [ + "test/bad_dtls_test.c", + ], + "test/bftest" => + [ + "test/bftest.o", + ], + "test/bftest.o" => + [ + "test/bftest.c", + ], + "test/bio_callback_test" => + [ + "test/bio_callback_test.o", + ], + "test/bio_callback_test.o" => + [ + "test/bio_callback_test.c", + ], + "test/bio_enc_test" => + [ + "test/bio_enc_test.o", + ], + "test/bio_enc_test.o" => + [ + "test/bio_enc_test.c", + ], + "test/bio_memleak_test" => + [ + "test/bio_memleak_test.o", + ], + "test/bio_memleak_test.o" => + [ + "test/bio_memleak_test.c", + ], + "test/bioprinttest" => + [ + "test/bioprinttest.o", + ], + "test/bioprinttest.o" => + [ + "test/bioprinttest.c", + ], + "test/bntest" => + [ + "test/bntest.o", + ], + "test/bntest.o" => + [ + "test/bntest.c", + ], + "test/buildtest_aes.o" => + [ + "test/buildtest_aes.c", + ], + "test/buildtest_asn1.o" => + [ + "test/buildtest_asn1.c", + ], + "test/buildtest_asn1t.o" => + [ + "test/buildtest_asn1t.c", + ], + "test/buildtest_async.o" => + [ + "test/buildtest_async.c", + ], + "test/buildtest_bio.o" => + [ + "test/buildtest_bio.c", + ], + "test/buildtest_blowfish.o" => + [ + "test/buildtest_blowfish.c", + ], + "test/buildtest_bn.o" => + [ + "test/buildtest_bn.c", + ], + "test/buildtest_buffer.o" => + [ + "test/buildtest_buffer.c", + ], + "test/buildtest_c_aes" => + [ + "test/buildtest_aes.o", + ], + "test/buildtest_c_asn1" => + [ + "test/buildtest_asn1.o", + ], + "test/buildtest_c_asn1t" => + [ + "test/buildtest_asn1t.o", + ], + "test/buildtest_c_async" => + [ + "test/buildtest_async.o", + ], + "test/buildtest_c_bio" => + [ + "test/buildtest_bio.o", + ], + "test/buildtest_c_blowfish" => + [ + "test/buildtest_blowfish.o", + ], + "test/buildtest_c_bn" => + [ + "test/buildtest_bn.o", + ], + "test/buildtest_c_buffer" => + [ + "test/buildtest_buffer.o", + ], + "test/buildtest_c_camellia" => + [ + "test/buildtest_camellia.o", + ], + "test/buildtest_c_cast" => + [ + "test/buildtest_cast.o", + ], + "test/buildtest_c_cmac" => + [ + "test/buildtest_cmac.o", + ], + "test/buildtest_c_cms" => + [ + "test/buildtest_cms.o", + ], + "test/buildtest_c_conf" => + [ + "test/buildtest_conf.o", + ], + "test/buildtest_c_conf_api" => + [ + "test/buildtest_conf_api.o", + ], + "test/buildtest_c_crypto" => + [ + "test/buildtest_crypto.o", + ], + "test/buildtest_c_ct" => + [ + "test/buildtest_ct.o", + ], + "test/buildtest_c_des" => + [ + "test/buildtest_des.o", + ], + "test/buildtest_c_dh" => + [ + "test/buildtest_dh.o", + ], + "test/buildtest_c_dsa" => + [ + "test/buildtest_dsa.o", + ], + "test/buildtest_c_dtls1" => + [ + "test/buildtest_dtls1.o", + ], + "test/buildtest_c_e_os2" => + [ + "test/buildtest_e_os2.o", + ], + "test/buildtest_c_ebcdic" => + [ + "test/buildtest_ebcdic.o", + ], + "test/buildtest_c_ec" => + [ + "test/buildtest_ec.o", + ], + "test/buildtest_c_ecdh" => + [ + "test/buildtest_ecdh.o", + ], + "test/buildtest_c_ecdsa" => + [ + "test/buildtest_ecdsa.o", + ], + "test/buildtest_c_engine" => + [ + "test/buildtest_engine.o", + ], + "test/buildtest_c_evp" => + [ + "test/buildtest_evp.o", + ], + "test/buildtest_c_hmac" => + [ + "test/buildtest_hmac.o", + ], + "test/buildtest_c_idea" => + [ + "test/buildtest_idea.o", + ], + "test/buildtest_c_kdf" => + [ + "test/buildtest_kdf.o", + ], + "test/buildtest_c_lhash" => + [ + "test/buildtest_lhash.o", + ], + "test/buildtest_c_md4" => + [ + "test/buildtest_md4.o", + ], + "test/buildtest_c_md5" => + [ + "test/buildtest_md5.o", + ], + "test/buildtest_c_mdc2" => + [ + "test/buildtest_mdc2.o", + ], + "test/buildtest_c_modes" => + [ + "test/buildtest_modes.o", + ], + "test/buildtest_c_obj_mac" => + [ + "test/buildtest_obj_mac.o", + ], + "test/buildtest_c_objects" => + [ + "test/buildtest_objects.o", + ], + "test/buildtest_c_ocsp" => + [ + "test/buildtest_ocsp.o", + ], + "test/buildtest_c_opensslv" => + [ + "test/buildtest_opensslv.o", + ], + "test/buildtest_c_ossl_typ" => + [ + "test/buildtest_ossl_typ.o", + ], + "test/buildtest_c_pem" => + [ + "test/buildtest_pem.o", + ], + "test/buildtest_c_pem2" => + [ + "test/buildtest_pem2.o", + ], + "test/buildtest_c_pkcs12" => + [ + "test/buildtest_pkcs12.o", + ], + "test/buildtest_c_pkcs7" => + [ + "test/buildtest_pkcs7.o", + ], + "test/buildtest_c_rand" => + [ + "test/buildtest_rand.o", + ], + "test/buildtest_c_rand_drbg" => + [ + "test/buildtest_rand_drbg.o", + ], + "test/buildtest_c_rc2" => + [ + "test/buildtest_rc2.o", + ], + "test/buildtest_c_rc4" => + [ + "test/buildtest_rc4.o", + ], + "test/buildtest_c_ripemd" => + [ + "test/buildtest_ripemd.o", + ], + "test/buildtest_c_rsa" => + [ + "test/buildtest_rsa.o", + ], + "test/buildtest_c_safestack" => + [ + "test/buildtest_safestack.o", + ], + "test/buildtest_c_seed" => + [ + "test/buildtest_seed.o", + ], + "test/buildtest_c_sha" => + [ + "test/buildtest_sha.o", + ], + "test/buildtest_c_srp" => + [ + "test/buildtest_srp.o", + ], + "test/buildtest_c_srtp" => + [ + "test/buildtest_srtp.o", + ], + "test/buildtest_c_ssl" => + [ + "test/buildtest_ssl.o", + ], + "test/buildtest_c_ssl2" => + [ + "test/buildtest_ssl2.o", + ], + "test/buildtest_c_stack" => + [ + "test/buildtest_stack.o", + ], + "test/buildtest_c_store" => + [ + "test/buildtest_store.o", + ], + "test/buildtest_c_symhacks" => + [ + "test/buildtest_symhacks.o", + ], + "test/buildtest_c_tls1" => + [ + "test/buildtest_tls1.o", + ], + "test/buildtest_c_ts" => + [ + "test/buildtest_ts.o", + ], + "test/buildtest_c_txt_db" => + [ + "test/buildtest_txt_db.o", + ], + "test/buildtest_c_ui" => + [ + "test/buildtest_ui.o", + ], + "test/buildtest_c_whrlpool" => + [ + "test/buildtest_whrlpool.o", + ], + "test/buildtest_c_x509" => + [ + "test/buildtest_x509.o", + ], + "test/buildtest_c_x509_vfy" => + [ + "test/buildtest_x509_vfy.o", + ], + "test/buildtest_c_x509v3" => + [ + "test/buildtest_x509v3.o", + ], + "test/buildtest_camellia.o" => + [ + "test/buildtest_camellia.c", + ], + "test/buildtest_cast.o" => + [ + "test/buildtest_cast.c", + ], + "test/buildtest_cmac.o" => + [ + "test/buildtest_cmac.c", + ], + "test/buildtest_cms.o" => + [ + "test/buildtest_cms.c", + ], + "test/buildtest_conf.o" => + [ + "test/buildtest_conf.c", + ], + "test/buildtest_conf_api.o" => + [ + "test/buildtest_conf_api.c", + ], + "test/buildtest_crypto.o" => + [ + "test/buildtest_crypto.c", + ], + "test/buildtest_ct.o" => + [ + "test/buildtest_ct.c", + ], + "test/buildtest_des.o" => + [ + "test/buildtest_des.c", + ], + "test/buildtest_dh.o" => + [ + "test/buildtest_dh.c", + ], + "test/buildtest_dsa.o" => + [ + "test/buildtest_dsa.c", + ], + "test/buildtest_dtls1.o" => + [ + "test/buildtest_dtls1.c", + ], + "test/buildtest_e_os2.o" => + [ + "test/buildtest_e_os2.c", + ], + "test/buildtest_ebcdic.o" => + [ + "test/buildtest_ebcdic.c", + ], + "test/buildtest_ec.o" => + [ + "test/buildtest_ec.c", + ], + "test/buildtest_ecdh.o" => + [ + "test/buildtest_ecdh.c", + ], + "test/buildtest_ecdsa.o" => + [ + "test/buildtest_ecdsa.c", + ], + "test/buildtest_engine.o" => + [ + "test/buildtest_engine.c", + ], + "test/buildtest_evp.o" => + [ + "test/buildtest_evp.c", + ], + "test/buildtest_hmac.o" => + [ + "test/buildtest_hmac.c", + ], + "test/buildtest_idea.o" => + [ + "test/buildtest_idea.c", + ], + "test/buildtest_kdf.o" => + [ + "test/buildtest_kdf.c", + ], + "test/buildtest_lhash.o" => + [ + "test/buildtest_lhash.c", + ], + "test/buildtest_md4.o" => + [ + "test/buildtest_md4.c", + ], + "test/buildtest_md5.o" => + [ + "test/buildtest_md5.c", + ], + "test/buildtest_mdc2.o" => + [ + "test/buildtest_mdc2.c", + ], + "test/buildtest_modes.o" => + [ + "test/buildtest_modes.c", + ], + "test/buildtest_obj_mac.o" => + [ + "test/buildtest_obj_mac.c", + ], + "test/buildtest_objects.o" => + [ + "test/buildtest_objects.c", + ], + "test/buildtest_ocsp.o" => + [ + "test/buildtest_ocsp.c", + ], + "test/buildtest_opensslv.o" => + [ + "test/buildtest_opensslv.c", + ], + "test/buildtest_ossl_typ.o" => + [ + "test/buildtest_ossl_typ.c", + ], + "test/buildtest_pem.o" => + [ + "test/buildtest_pem.c", + ], + "test/buildtest_pem2.o" => + [ + "test/buildtest_pem2.c", + ], + "test/buildtest_pkcs12.o" => + [ + "test/buildtest_pkcs12.c", + ], + "test/buildtest_pkcs7.o" => + [ + "test/buildtest_pkcs7.c", + ], + "test/buildtest_rand.o" => + [ + "test/buildtest_rand.c", + ], + "test/buildtest_rand_drbg.o" => + [ + "test/buildtest_rand_drbg.c", + ], + "test/buildtest_rc2.o" => + [ + "test/buildtest_rc2.c", + ], + "test/buildtest_rc4.o" => + [ + "test/buildtest_rc4.c", + ], + "test/buildtest_ripemd.o" => + [ + "test/buildtest_ripemd.c", + ], + "test/buildtest_rsa.o" => + [ + "test/buildtest_rsa.c", + ], + "test/buildtest_safestack.o" => + [ + "test/buildtest_safestack.c", + ], + "test/buildtest_seed.o" => + [ + "test/buildtest_seed.c", + ], + "test/buildtest_sha.o" => + [ + "test/buildtest_sha.c", + ], + "test/buildtest_srp.o" => + [ + "test/buildtest_srp.c", + ], + "test/buildtest_srtp.o" => + [ + "test/buildtest_srtp.c", + ], + "test/buildtest_ssl.o" => + [ + "test/buildtest_ssl.c", + ], + "test/buildtest_ssl2.o" => + [ + "test/buildtest_ssl2.c", + ], + "test/buildtest_stack.o" => + [ + "test/buildtest_stack.c", + ], + "test/buildtest_store.o" => + [ + "test/buildtest_store.c", + ], + "test/buildtest_symhacks.o" => + [ + "test/buildtest_symhacks.c", + ], + "test/buildtest_tls1.o" => + [ + "test/buildtest_tls1.c", + ], + "test/buildtest_ts.o" => + [ + "test/buildtest_ts.c", + ], + "test/buildtest_txt_db.o" => + [ + "test/buildtest_txt_db.c", + ], + "test/buildtest_ui.o" => + [ + "test/buildtest_ui.c", + ], + "test/buildtest_whrlpool.o" => + [ + "test/buildtest_whrlpool.c", + ], + "test/buildtest_x509.o" => + [ + "test/buildtest_x509.c", + ], + "test/buildtest_x509_vfy.o" => + [ + "test/buildtest_x509_vfy.c", + ], + "test/buildtest_x509v3.o" => + [ + "test/buildtest_x509v3.c", + ], + "test/casttest" => + [ + "test/casttest.o", + ], + "test/casttest.o" => + [ + "test/casttest.c", + ], + "test/chacha_internal_test" => + [ + "test/chacha_internal_test.o", + ], + "test/chacha_internal_test.o" => + [ + "test/chacha_internal_test.c", + ], + "test/cipher_overhead_test" => + [ + "test/cipher_overhead_test.o", + ], + "test/cipher_overhead_test.o" => + [ + "test/cipher_overhead_test.c", + ], + "test/cipherbytes_test" => + [ + "test/cipherbytes_test.o", + ], + "test/cipherbytes_test.o" => + [ + "test/cipherbytes_test.c", + ], + "test/cipherlist_test" => + [ + "test/cipherlist_test.o", + ], + "test/cipherlist_test.o" => + [ + "test/cipherlist_test.c", + ], + "test/ciphername_test" => + [ + "test/ciphername_test.o", + ], + "test/ciphername_test.o" => + [ + "test/ciphername_test.c", + ], + "test/clienthellotest" => + [ + "test/clienthellotest.o", + ], + "test/clienthellotest.o" => + [ + "test/clienthellotest.c", + ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], + "test/cmsapitest" => + [ + "test/cmsapitest.o", + ], + "test/cmsapitest.o" => + [ + "test/cmsapitest.c", + ], + "test/conf_include_test" => + [ + "test/conf_include_test.o", + ], + "test/conf_include_test.o" => + [ + "test/conf_include_test.c", + ], + "test/constant_time_test" => + [ + "test/constant_time_test.o", + ], + "test/constant_time_test.o" => + [ + "test/constant_time_test.c", + ], + "test/crltest" => + [ + "test/crltest.o", + ], + "test/crltest.o" => + [ + "test/crltest.c", + ], + "test/ct_test" => + [ + "test/ct_test.o", + ], + "test/ct_test.o" => + [ + "test/ct_test.c", + ], + "test/ctype_internal_test" => + [ + "test/ctype_internal_test.o", + ], + "test/ctype_internal_test.o" => + [ + "test/ctype_internal_test.c", + ], + "test/curve448_internal_test" => + [ + "test/curve448_internal_test.o", + ], + "test/curve448_internal_test.o" => + [ + "test/curve448_internal_test.c", + ], + "test/d2i_test" => + [ + "test/d2i_test.o", + ], + "test/d2i_test.o" => + [ + "test/d2i_test.c", + ], + "test/danetest" => + [ + "test/danetest.o", + ], + "test/danetest.o" => + [ + "test/danetest.c", + ], + "test/destest" => + [ + "test/destest.o", + ], + "test/destest.o" => + [ + "test/destest.c", + ], + "test/dhtest" => + [ + "test/dhtest.o", + ], + "test/dhtest.o" => + [ + "test/dhtest.c", + ], + "test/drbg_cavs_data.o" => + [ + "test/drbg_cavs_data.c", + ], + "test/drbg_cavs_test" => + [ + "test/drbg_cavs_data.o", + "test/drbg_cavs_test.o", + ], + "test/drbg_cavs_test.o" => + [ + "test/drbg_cavs_test.c", + ], + "test/drbgtest" => + [ + "test/drbgtest.o", + ], + "test/drbgtest.o" => + [ + "test/drbgtest.c", + ], + "test/dsa_no_digest_size_test" => + [ + "test/dsa_no_digest_size_test.o", + ], + "test/dsa_no_digest_size_test.o" => + [ + "test/dsa_no_digest_size_test.c", + ], + "test/dsatest" => + [ + "test/dsatest.o", + ], + "test/dsatest.o" => + [ + "test/dsatest.c", + ], + "test/dtls_mtu_test" => + [ + "test/dtls_mtu_test.o", + "test/ssltestlib.o", + ], + "test/dtls_mtu_test.o" => + [ + "test/dtls_mtu_test.c", + ], + "test/dtlstest" => + [ + "test/dtlstest.o", + "test/ssltestlib.o", + ], + "test/dtlstest.o" => + [ + "test/dtlstest.c", + ], + "test/dtlsv1listentest" => + [ + "test/dtlsv1listentest.o", + ], + "test/dtlsv1listentest.o" => + [ + "test/dtlsv1listentest.c", + ], + "test/ec_internal_test" => + [ + "test/ec_internal_test.o", + ], + "test/ec_internal_test.o" => + [ + "test/ec_internal_test.c", + ], + "test/ecdsatest" => + [ + "test/ecdsatest.o", + ], + "test/ecdsatest.o" => + [ + "test/ecdsatest.c", + ], + "test/ecstresstest" => + [ + "test/ecstresstest.o", + ], + "test/ecstresstest.o" => + [ + "test/ecstresstest.c", + ], + "test/ectest" => + [ + "test/ectest.o", + ], + "test/ectest.o" => + [ + "test/ectest.c", + ], + "test/enginetest" => + [ + "test/enginetest.o", + ], + "test/enginetest.o" => + [ + "test/enginetest.c", + ], + "test/errtest" => + [ + "test/errtest.o", + ], + "test/errtest.o" => + [ + "test/errtest.c", + ], + "test/evp_extra_test" => + [ + "test/evp_extra_test.o", + ], + "test/evp_extra_test.o" => + [ + "test/evp_extra_test.c", + ], + "test/evp_test" => + [ + "test/evp_test.o", + ], + "test/evp_test.o" => + [ + "test/evp_test.c", + ], + "test/exdatatest" => + [ + "test/exdatatest.o", + ], + "test/exdatatest.o" => + [ + "test/exdatatest.c", + ], + "test/exptest" => + [ + "test/exptest.o", + ], + "test/exptest.o" => + [ + "test/exptest.c", + ], + "test/fatalerrtest" => + [ + "test/fatalerrtest.o", + "test/ssltestlib.o", + ], + "test/fatalerrtest.o" => + [ + "test/fatalerrtest.c", + ], + "test/gmdifftest" => + [ + "test/gmdifftest.o", + ], + "test/gmdifftest.o" => + [ + "test/gmdifftest.c", + ], + "test/gosttest" => + [ + "test/gosttest.o", + "test/ssltestlib.o", + ], + "test/gosttest.o" => + [ + "test/gosttest.c", + ], + "test/handshake_helper.o" => + [ + "test/handshake_helper.c", + ], + "test/hmactest" => + [ + "test/hmactest.o", + ], + "test/hmactest.o" => + [ + "test/hmactest.c", + ], + "test/ideatest" => + [ + "test/ideatest.o", + ], + "test/ideatest.o" => + [ + "test/ideatest.c", + ], + "test/igetest" => + [ + "test/igetest.o", + ], + "test/igetest.o" => + [ + "test/igetest.c", + ], + "test/lhash_test" => + [ + "test/lhash_test.o", + ], + "test/lhash_test.o" => + [ + "test/lhash_test.c", + ], + "test/libtestutil.a" => + [ + "test/testutil/basic_output.o", + "test/testutil/cb.o", + "test/testutil/driver.o", + "test/testutil/format_output.o", + "test/testutil/main.o", + "test/testutil/output_helpers.o", + "test/testutil/random.o", + "test/testutil/stanza.o", + "test/testutil/tap_bio.o", + "test/testutil/test_cleanup.o", + "test/testutil/tests.o", + "test/testutil/testutil_init.o", + ], + "test/md2test" => + [ + "test/md2test.o", + ], + "test/md2test.o" => + [ + "test/md2test.c", + ], + "test/mdc2_internal_test" => + [ + "test/mdc2_internal_test.o", + ], + "test/mdc2_internal_test.o" => + [ + "test/mdc2_internal_test.c", + ], + "test/mdc2test" => + [ + "test/mdc2test.o", + ], + "test/mdc2test.o" => + [ + "test/mdc2test.c", + ], + "test/memleaktest" => + [ + "test/memleaktest.o", + ], + "test/memleaktest.o" => + [ + "test/memleaktest.c", + ], + "test/modes_internal_test" => + [ + "test/modes_internal_test.o", + ], + "test/modes_internal_test.o" => + [ + "test/modes_internal_test.c", + ], + "test/ocspapitest" => + [ + "test/ocspapitest.o", + ], + "test/ocspapitest.o" => + [ + "test/ocspapitest.c", + ], + "test/packettest" => + [ + "test/packettest.o", + ], + "test/packettest.o" => + [ + "test/packettest.c", + ], + "test/pbelutest" => + [ + "test/pbelutest.o", + ], + "test/pbelutest.o" => + [ + "test/pbelutest.c", + ], + "test/pemtest" => + [ + "test/pemtest.o", + ], + "test/pemtest.o" => + [ + "test/pemtest.c", + ], + "test/pkey_meth_kdf_test" => + [ + "test/pkey_meth_kdf_test.o", + ], + "test/pkey_meth_kdf_test.o" => + [ + "test/pkey_meth_kdf_test.c", + ], + "test/pkey_meth_test" => + [ + "test/pkey_meth_test.o", + ], + "test/pkey_meth_test.o" => + [ + "test/pkey_meth_test.c", + ], + "test/poly1305_internal_test" => + [ + "test/poly1305_internal_test.o", + ], + "test/poly1305_internal_test.o" => + [ + "test/poly1305_internal_test.c", + ], + "test/rc2test" => + [ + "test/rc2test.o", + ], + "test/rc2test.o" => + [ + "test/rc2test.c", + ], + "test/rc4test" => + [ + "test/rc4test.o", + ], + "test/rc4test.o" => + [ + "test/rc4test.c", + ], + "test/rc5test" => + [ + "test/rc5test.o", + ], + "test/rc5test.o" => + [ + "test/rc5test.c", + ], + "test/rdrand_sanitytest" => + [ + "test/rdrand_sanitytest.o", + ], + "test/rdrand_sanitytest.o" => + [ + "test/rdrand_sanitytest.c", + ], + "test/recordlentest" => + [ + "test/recordlentest.o", + "test/ssltestlib.o", + ], + "test/recordlentest.o" => + [ + "test/recordlentest.c", + ], + "test/rsa_complex" => + [ + "test/rsa_complex.o", + ], + "test/rsa_complex.o" => + [ + "test/rsa_complex.c", + ], + "test/rsa_mp_test" => + [ + "test/rsa_mp_test.o", + ], + "test/rsa_mp_test.o" => + [ + "test/rsa_mp_test.c", + ], + "test/rsa_test" => + [ + "test/rsa_test.o", + ], + "test/rsa_test.o" => + [ + "test/rsa_test.c", + ], + "test/sanitytest" => + [ + "test/sanitytest.o", + ], + "test/sanitytest.o" => + [ + "test/sanitytest.c", + ], + "test/secmemtest" => + [ + "test/secmemtest.o", + ], + "test/secmemtest.o" => + [ + "test/secmemtest.c", + ], + "test/servername_test" => + [ + "test/servername_test.o", + "test/ssltestlib.o", + ], + "test/servername_test.o" => + [ + "test/servername_test.c", + ], + "test/siphash_internal_test" => + [ + "test/siphash_internal_test.o", + ], + "test/siphash_internal_test.o" => + [ + "test/siphash_internal_test.c", + ], + "test/sm2_internal_test" => + [ + "test/sm2_internal_test.o", + ], + "test/sm2_internal_test.o" => + [ + "test/sm2_internal_test.c", + ], + "test/sm4_internal_test" => + [ + "test/sm4_internal_test.o", + ], + "test/sm4_internal_test.o" => + [ + "test/sm4_internal_test.c", + ], + "test/srptest" => + [ + "test/srptest.o", + ], + "test/srptest.o" => + [ + "test/srptest.c", + ], + "test/ssl_cert_table_internal_test" => + [ + "test/ssl_cert_table_internal_test.o", + ], + "test/ssl_cert_table_internal_test.o" => + [ + "test/ssl_cert_table_internal_test.c", + ], + "test/ssl_ctx_test" => + [ + "test/ssl_ctx_test.o", + ], + "test/ssl_ctx_test.o" => + [ + "test/ssl_ctx_test.c", + ], + "test/ssl_test" => + [ + "test/handshake_helper.o", + "test/ssl_test.o", + "test/ssl_test_ctx.o", + ], + "test/ssl_test.o" => + [ + "test/ssl_test.c", + ], + "test/ssl_test_ctx.o" => + [ + "test/ssl_test_ctx.c", + ], + "test/ssl_test_ctx_test" => + [ + "test/ssl_test_ctx.o", + "test/ssl_test_ctx_test.o", + ], + "test/ssl_test_ctx_test.o" => + [ + "test/ssl_test_ctx_test.c", + ], + "test/sslapitest" => + [ + "test/sslapitest.o", + "test/ssltestlib.o", + ], + "test/sslapitest.o" => + [ + "test/sslapitest.c", + ], + "test/sslbuffertest" => + [ + "test/sslbuffertest.o", + "test/ssltestlib.o", + ], + "test/sslbuffertest.o" => + [ + "test/sslbuffertest.c", + ], + "test/sslcorrupttest" => + [ + "test/sslcorrupttest.o", + "test/ssltestlib.o", + ], + "test/sslcorrupttest.o" => + [ + "test/sslcorrupttest.c", + ], + "test/ssltest_old" => + [ + "test/ssltest_old.o", + ], + "test/ssltest_old.o" => + [ + "test/ssltest_old.c", + ], + "test/ssltestlib.o" => + [ + "test/ssltestlib.c", + ], + "test/stack_test" => + [ + "test/stack_test.o", + ], + "test/stack_test.o" => + [ + "test/stack_test.c", + ], + "test/sysdefaulttest" => + [ + "test/sysdefaulttest.o", + ], + "test/sysdefaulttest.o" => + [ + "test/sysdefaulttest.c", + ], + "test/test_test" => + [ + "test/test_test.o", + ], + "test/test_test.o" => + [ + "test/test_test.c", + ], + "test/testutil/basic_output.o" => + [ + "test/testutil/basic_output.c", + ], + "test/testutil/cb.o" => + [ + "test/testutil/cb.c", + ], + "test/testutil/driver.o" => + [ + "test/testutil/driver.c", + ], + "test/testutil/format_output.o" => + [ + "test/testutil/format_output.c", + ], + "test/testutil/main.o" => + [ + "test/testutil/main.c", + ], + "test/testutil/output_helpers.o" => + [ + "test/testutil/output_helpers.c", + ], + "test/testutil/random.o" => + [ + "test/testutil/random.c", + ], + "test/testutil/stanza.o" => + [ + "test/testutil/stanza.c", + ], + "test/testutil/tap_bio.o" => + [ + "test/testutil/tap_bio.c", + ], + "test/testutil/test_cleanup.o" => + [ + "test/testutil/test_cleanup.c", + ], + "test/testutil/tests.o" => + [ + "test/testutil/tests.c", + ], + "test/testutil/testutil_init.o" => + [ + "test/testutil/testutil_init.c", + ], + "test/threadstest" => + [ + "test/threadstest.o", + ], + "test/threadstest.o" => + [ + "test/threadstest.c", + ], + "test/time_offset_test" => + [ + "test/time_offset_test.o", + ], + "test/time_offset_test.o" => + [ + "test/time_offset_test.c", + ], + "test/tls13ccstest" => + [ + "test/ssltestlib.o", + "test/tls13ccstest.o", + ], + "test/tls13ccstest.o" => + [ + "test/tls13ccstest.c", + ], + "test/tls13encryptiontest" => + [ + "test/tls13encryptiontest.o", + ], + "test/tls13encryptiontest.o" => + [ + "test/tls13encryptiontest.c", + ], + "test/uitest" => + [ + "test/uitest.o", + ], + "test/uitest.o" => + [ + "test/uitest.c", + ], + "test/v3ext" => + [ + "test/v3ext.o", + ], + "test/v3ext.o" => + [ + "test/v3ext.c", + ], + "test/v3nametest" => + [ + "test/v3nametest.o", + ], + "test/v3nametest.o" => + [ + "test/v3nametest.c", + ], + "test/verify_extra_test" => + [ + "test/verify_extra_test.o", + ], + "test/verify_extra_test.o" => + [ + "test/verify_extra_test.c", + ], + "test/versions" => + [ + "test/versions.o", + ], + "test/versions.o" => + [ + "test/versions.c", + ], + "test/wpackettest" => + [ + "test/wpackettest.o", + ], + "test/wpackettest.o" => + [ + "test/wpackettest.c", + ], + "test/x509_check_cert_pkey_test" => + [ + "test/x509_check_cert_pkey_test.o", + ], + "test/x509_check_cert_pkey_test.o" => + [ + "test/x509_check_cert_pkey_test.c", + ], + "test/x509_dup_cert_test" => + [ + "test/x509_dup_cert_test.o", + ], + "test/x509_dup_cert_test.o" => + [ + "test/x509_dup_cert_test.c", + ], + "test/x509_internal_test" => + [ + "test/x509_internal_test.o", + ], + "test/x509_internal_test.o" => + [ + "test/x509_internal_test.c", + ], + "test/x509_time_test" => + [ + "test/x509_time_test.o", + ], + "test/x509_time_test.o" => + [ + "test/x509_time_test.c", + ], + "test/x509aux" => + [ + "test/x509aux.o", + ], + "test/x509aux.o" => + [ + "test/x509aux.c", + ], + "tools/c_rehash" => + [ + "tools/c_rehash.in", + ], + "util/shlib_wrap.sh" => + [ + "util/shlib_wrap.sh.in", + ], + }, +); + +# The following data is only used when this files is use as a script +my @makevars = ( + 'AR', + 'ARFLAGS', + 'AS', + 'ASFLAGS', + 'CC', + 'CFLAGS', + 'CPP', + 'CPPDEFINES', + 'CPPFLAGS', + 'CPPINCLUDES', + 'CROSS_COMPILE', + 'CXX', + 'CXXFLAGS', + 'HASHBANGPERL', + 'LD', + 'LDFLAGS', + 'LDLIBS', + 'MT', + 'MTFLAGS', + 'PERL', + 'RANLIB', + 'RC', + 'RCFLAGS', + 'RM', +); +my %disabled_info = ( + 'afalgeng' => { + macro => 'OPENSSL_NO_AFALGENG', + }, + 'asan' => { + macro => 'OPENSSL_NO_ASAN', + }, + 'comp' => { + macro => 'OPENSSL_NO_COMP', + skipped => [ 'crypto/comp' ], + }, + 'crypto-mdebug' => { + macro => 'OPENSSL_NO_CRYPTO_MDEBUG', + }, + 'crypto-mdebug-backtrace' => { + macro => 'OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE', + }, + 'devcryptoeng' => { + macro => 'OPENSSL_NO_DEVCRYPTOENG', + }, + 'ec_nistp_64_gcc_128' => { + macro => 'OPENSSL_NO_EC_NISTP_64_GCC_128', + }, + 'egd' => { + macro => 'OPENSSL_NO_EGD', + }, + 'external-tests' => { + macro => 'OPENSSL_NO_EXTERNAL_TESTS', + }, + 'fuzz-afl' => { + macro => 'OPENSSL_NO_FUZZ_AFL', + }, + 'fuzz-libfuzzer' => { + macro => 'OPENSSL_NO_FUZZ_LIBFUZZER', + }, + 'heartbeats' => { + macro => 'OPENSSL_NO_HEARTBEATS', + }, + 'md2' => { + macro => 'OPENSSL_NO_MD2', + skipped => [ 'crypto/md2' ], + }, + 'msan' => { + macro => 'OPENSSL_NO_MSAN', + }, + 'rc5' => { + macro => 'OPENSSL_NO_RC5', + skipped => [ 'crypto/rc5' ], + }, + 'sctp' => { + macro => 'OPENSSL_NO_SCTP', + }, + 'ssl3' => { + macro => 'OPENSSL_NO_SSL3', + }, + 'ssl3-method' => { + macro => 'OPENSSL_NO_SSL3_METHOD', + }, + 'ubsan' => { + macro => 'OPENSSL_NO_UBSAN', + }, + 'unit-test' => { + macro => 'OPENSSL_NO_UNIT_TEST', + }, + 'weak-ssl-ciphers' => { + macro => 'OPENSSL_NO_WEAK_SSL_CIPHERS', + }, +); +my @user_crossable = qw( AR AS CC CXX CPP LD MT RANLIB RC ); +# If run directly, we can give some answers, and even reconfigure +unless (caller) { + use Getopt::Long; + use File::Spec::Functions; + use File::Basename; + use Pod::Usage; + + my $here = dirname($0); + + my $dump = undef; + my $cmdline = undef; + my $options = undef; + my $target = undef; + my $envvars = undef; + my $makevars = undef; + my $buildparams = undef; + my $reconf = undef; + my $verbose = undef; + my $help = undef; + my $man = undef; + GetOptions('dump|d' => \$dump, + 'command-line|c' => \$cmdline, + 'options|o' => \$options, + 'target|t' => \$target, + 'environment|e' => \$envvars, + 'make-variables|m' => \$makevars, + 'build-parameters|b' => \$buildparams, + 'reconfigure|reconf|r' => \$reconf, + 'verbose|v' => \$verbose, + 'help' => \$help, + 'man' => \$man) + or die "Errors in command line arguments\n"; + + unless ($dump || $cmdline || $options || $target || $envvars || $makevars + || $buildparams || $reconf || $verbose || $help || $man) { + print STDERR <<"_____"; +You must give at least one option. +For more information, do '$0 --help' +_____ + exit(2); + } + + if ($help) { + pod2usage(-exitval => 0, + -verbose => 1); + } + if ($man) { + pod2usage(-exitval => 0, + -verbose => 2); + } + if ($dump || $cmdline) { + print "\nCommand line (with current working directory = $here):\n\n"; + print ' ',join(' ', + $config{PERL}, + catfile($config{sourcedir}, 'Configure'), + @{$config{perlargv}}), "\n"; + print "\nPerl information:\n\n"; + print ' ',$config{perl_cmd},"\n"; + print ' ',$config{perl_version},' for ',$config{perl_archname},"\n"; + } + if ($dump || $options) { + my $longest = 0; + my $longest2 = 0; + foreach my $what (@disablables) { + $longest = length($what) if $longest < length($what); + $longest2 = length($disabled{$what}) + if $disabled{$what} && $longest2 < length($disabled{$what}); + } + print "\nEnabled features:\n\n"; + foreach my $what (@disablables) { + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; + } + print "\nDisabled features:\n\n"; + foreach my $what (@disablables) { + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; + print ' (skip ', + join(', ', @{$disabled_info{$what3}->{skipped}}), + ')' + if $disabled_info{$what3}->{skipped}; + print "\n"; + } + } + } + if ($dump || $target) { + print "\nConfig target attributes:\n\n"; + foreach (sort keys %target) { + next if $_ =~ m|^_| || $_ eq 'template'; + my $quotify = sub { + map { (my $x = $_) =~ s|([\\\$\@"])|\\$1|g; "\"$x\""} @_; + }; + print ' ', $_, ' => '; + if (ref($target{$_}) eq "ARRAY") { + print '[ ', join(', ', $quotify->(@{$target{$_}})), " ],\n"; + } else { + print $quotify->($target{$_}), ",\n" + } + } + } + if ($dump || $envvars) { + print "\nRecorded environment:\n\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ''),"\n"; + } + } + if ($dump || $makevars) { + print "\nMakevars:\n\n"; + foreach my $var (@makevars) { + my $prefix = ''; + $prefix = $config{CROSS_COMPILE} + if grep { $var eq $_ } @user_crossable; + $prefix //= ''; + print ' ',$var,' ' x (16 - length $var),'= ', + (ref $config{$var} eq 'ARRAY' + ? join(' ', @{$config{$var}}) + : $prefix.$config{$var}), + "\n" + if defined $config{$var}; + } + + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + my $buildfile = canonpath(catdir(@buildfile)); + print <<"_____"; + +NOTE: These variables only represent the configuration view. The build file +template may have processed these variables further, please have a look at the +build file for more exact data: + $buildfile +_____ + } + if ($dump || $buildparams) { + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + print "\nbuild file:\n\n"; + print " ", canonpath(catfile(@buildfile)),"\n"; + + print "\nbuild file templates:\n\n"; + foreach (@{$config{build_file_templates}}) { + my @tmpl = ($_); + unshift @tmpl, $here + unless file_name_is_absolute($config{sourcedir}); + print ' ',canonpath(catfile(@tmpl)),"\n"; + } + } + if ($reconf) { + if ($verbose) { + print 'Reconfiguring with: ', join(' ',@{$config{perlargv}}), "\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ""),"\n"; + } + } + + chdir $here; + exec $^X,catfile($config{sourcedir}, 'Configure'),'reconf'; + } +} + +1; + +__END__ + +=head1 NAME + +configdata.pm - configuration data for OpenSSL builds + +=head1 SYNOPSIS + +Interactive: + + perl configdata.pm [options] + +As data bank module: + + use configdata; + +=head1 DESCRIPTION + +This module can be used in two modes, interactively and as a module containing +all the data recorded by OpenSSL's Configure script. + +When used interactively, simply run it as any perl script, with at least one +option, and you will get the information you ask for. See L below. + +When loaded as a module, you get a few databanks with useful information to +perform build related tasks. The databanks are: + + %config Configured things. + %target The OpenSSL config target with all inheritances + resolved. + %disabled The features that are disabled. + @disablables The list of features that can be disabled. + %withargs All data given through --with-THING options. + %unified_info All information that was computed from the build.info + files. + +=head1 OPTIONS + +=over 4 + +=item B<--help> + +Print a brief help message and exit. + +=item B<--man> + +Print the manual page and exit. + +=item B<--dump> | B<-d> + +Print all relevant configuration data. This is equivalent to B<--command-line> +B<--options> B<--target> B<--environment> B<--make-variables> +B<--build-parameters>. + +=item B<--command-line> | B<-c> + +Print the current configuration command line. + +=item B<--options> | B<-o> + +Print the features, both enabled and disabled, and display defined macro and +skipped directories where applicable. + +=item B<--target> | B<-t> + +Print the config attributes for this config target. + +=item B<--environment> | B<-e> + +Print the environment variables and their values at the time of configuration. + +=item B<--make-variables> | B<-m> + +Print the main make variables generated in the current configuration + +=item B<--build-parameters> | B<-b> + +Print the build parameters, i.e. build file and build file templates. + +=item B<--reconfigure> | B<--reconf> | B<-r> + +Redo the configuration. + +=item B<--verbose> | B<-v> + +Verbose output. + +=back + +=cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/aesv8-armx.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/aesv8-armx.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/aesv8-armx.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/aesv8-armx.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,757 @@ +#include "arm_arch.h" + +#if __ARM_MAX_ARCH__>=7 +.text + +.align 5 +Lrcon: +.long 0x01,0x01,0x01,0x01 +.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d // rotate-n-splat +.long 0x1b,0x1b,0x1b,0x1b + +.globl _aes_v8_set_encrypt_key + +.align 5 +_aes_v8_set_encrypt_key: +Lenc_key: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + mov x3,#-1 + cmp x0,#0 + b.eq Lenc_key_abort + cmp x2,#0 + b.eq Lenc_key_abort + mov x3,#-2 + cmp w1,#128 + b.lt Lenc_key_abort + cmp w1,#256 + b.gt Lenc_key_abort + tst w1,#0x3f + b.ne Lenc_key_abort + + adr x3,Lrcon + cmp w1,#192 + + eor v0.16b,v0.16b,v0.16b + ld1 {v3.16b},[x0],#16 + mov w1,#8 // reuse w1 + ld1 {v1.4s,v2.4s},[x3],#32 + + b.lt Loop128 + b.eq L192 + b L256 + +.align 4 +Loop128: + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + b.ne Loop128 + + ld1 {v1.4s},[x3] + + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + + tbl v6.16b,{v3.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v3.4s},[x2],#16 + aese v6.16b,v0.16b + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + eor v3.16b,v3.16b,v6.16b + st1 {v3.4s},[x2] + add x2,x2,#0x50 + + mov w12,#10 + b Ldone + +.align 4 +L192: + ld1 {v4.8b},[x0],#8 + movi v6.16b,#8 // borrow v6.16b + st1 {v3.4s},[x2],#16 + sub v2.16b,v2.16b,v6.16b // adjust the mask + +Loop192: + tbl v6.16b,{v4.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 +#ifdef __ARMEB__ + st1 {v4.4s},[x2],#16 + sub x2,x2,#8 +#else + st1 {v4.8b},[x2],#8 +#endif + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + + dup v5.4s,v3.s[3] + eor v5.16b,v5.16b,v4.16b + eor v6.16b,v6.16b,v1.16b + ext v4.16b,v0.16b,v4.16b,#12 + shl v1.16b,v1.16b,#1 + eor v4.16b,v4.16b,v5.16b + eor v3.16b,v3.16b,v6.16b + eor v4.16b,v4.16b,v6.16b + st1 {v3.4s},[x2],#16 + b.ne Loop192 + + mov w12,#12 + add x2,x2,#0x20 + b Ldone + +.align 4 +L256: + ld1 {v4.16b},[x0] + mov w1,#7 + mov w12,#14 + st1 {v3.4s},[x2],#16 + +Loop256: + tbl v6.16b,{v4.16b},v2.16b + ext v5.16b,v0.16b,v3.16b,#12 + st1 {v4.4s},[x2],#16 + aese v6.16b,v0.16b + subs w1,w1,#1 + + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v3.16b,v3.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v6.16b,v6.16b,v1.16b + eor v3.16b,v3.16b,v5.16b + shl v1.16b,v1.16b,#1 + eor v3.16b,v3.16b,v6.16b + st1 {v3.4s},[x2],#16 + b.eq Ldone + + dup v6.4s,v3.s[3] // just splat + ext v5.16b,v0.16b,v4.16b,#12 + aese v6.16b,v0.16b + + eor v4.16b,v4.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v4.16b,v4.16b,v5.16b + ext v5.16b,v0.16b,v5.16b,#12 + eor v4.16b,v4.16b,v5.16b + + eor v4.16b,v4.16b,v6.16b + b Loop256 + +Ldone: + str w12,[x2] + mov x3,#0 + +Lenc_key_abort: + mov x0,x3 // return value + ldr x29,[sp],#16 + ret + + +.globl _aes_v8_set_decrypt_key + +.align 5 +_aes_v8_set_decrypt_key: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + bl Lenc_key + + cmp x0,#0 + b.ne Ldec_key_abort + + sub x2,x2,#240 // restore original x2 + mov x4,#-16 + add x0,x2,x12,lsl#4 // end of key schedule + + ld1 {v0.4s},[x2] + ld1 {v1.4s},[x0] + st1 {v0.4s},[x0],x4 + st1 {v1.4s},[x2],#16 + +Loop_imc: + ld1 {v0.4s},[x2] + ld1 {v1.4s},[x0] + aesimc v0.16b,v0.16b + aesimc v1.16b,v1.16b + st1 {v0.4s},[x0],x4 + st1 {v1.4s},[x2],#16 + cmp x0,x2 + b.hi Loop_imc + + ld1 {v0.4s},[x2] + aesimc v0.16b,v0.16b + st1 {v0.4s},[x0] + + eor x0,x0,x0 // return value +Ldec_key_abort: + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + +.globl _aes_v8_encrypt + +.align 5 +_aes_v8_encrypt: + ldr w3,[x2,#240] + ld1 {v0.4s},[x2],#16 + ld1 {v2.16b},[x0] + sub w3,w3,#2 + ld1 {v1.4s},[x2],#16 + +Loop_enc: + aese v2.16b,v0.16b + aesmc v2.16b,v2.16b + ld1 {v0.4s},[x2],#16 + subs w3,w3,#2 + aese v2.16b,v1.16b + aesmc v2.16b,v2.16b + ld1 {v1.4s},[x2],#16 + b.gt Loop_enc + + aese v2.16b,v0.16b + aesmc v2.16b,v2.16b + ld1 {v0.4s},[x2] + aese v2.16b,v1.16b + eor v2.16b,v2.16b,v0.16b + + st1 {v2.16b},[x1] + ret + +.globl _aes_v8_decrypt + +.align 5 +_aes_v8_decrypt: + ldr w3,[x2,#240] + ld1 {v0.4s},[x2],#16 + ld1 {v2.16b},[x0] + sub w3,w3,#2 + ld1 {v1.4s},[x2],#16 + +Loop_dec: + aesd v2.16b,v0.16b + aesimc v2.16b,v2.16b + ld1 {v0.4s},[x2],#16 + subs w3,w3,#2 + aesd v2.16b,v1.16b + aesimc v2.16b,v2.16b + ld1 {v1.4s},[x2],#16 + b.gt Loop_dec + + aesd v2.16b,v0.16b + aesimc v2.16b,v2.16b + ld1 {v0.4s},[x2] + aesd v2.16b,v1.16b + eor v2.16b,v2.16b,v0.16b + + st1 {v2.16b},[x1] + ret + +.globl _aes_v8_cbc_encrypt + +.align 5 +_aes_v8_cbc_encrypt: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + subs x2,x2,#16 + mov x8,#16 + b.lo Lcbc_abort + csel x8,xzr,x8,eq + + cmp w5,#0 // en- or decrypting? + ldr w5,[x3,#240] + and x2,x2,#-16 + ld1 {v6.16b},[x4] + ld1 {v0.16b},[x0],x8 + + ld1 {v16.4s,v17.4s},[x3] // load key schedule... + sub w5,w5,#6 + add x7,x3,x5,lsl#4 // pointer to last 7 round keys + sub w5,w5,#2 + ld1 {v18.4s,v19.4s},[x7],#32 + ld1 {v20.4s,v21.4s},[x7],#32 + ld1 {v22.4s,v23.4s},[x7],#32 + ld1 {v7.4s},[x7] + + add x7,x3,#32 + mov w6,w5 + b.eq Lcbc_dec + + cmp w5,#2 + eor v0.16b,v0.16b,v6.16b + eor v5.16b,v16.16b,v7.16b + b.eq Lcbc_enc128 + + ld1 {v2.4s,v3.4s},[x7] + add x7,x3,#16 + add x6,x3,#16*4 + add x12,x3,#16*5 + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + add x14,x3,#16*6 + add x3,x3,#16*7 + b Lenter_cbc_enc + +.align 4 +Loop_cbc_enc: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + st1 {v6.16b},[x1],#16 +Lenter_cbc_enc: + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v0.16b,v2.16b + aesmc v0.16b,v0.16b + ld1 {v16.4s},[x6] + cmp w5,#4 + aese v0.16b,v3.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x12] + b.eq Lcbc_enc192 + + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + ld1 {v16.4s},[x14] + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x3] + nop + +Lcbc_enc192: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + subs x2,x2,#16 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + csel x8,xzr,x8,eq + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ld1 {v16.16b},[x0],x8 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + eor v16.16b,v16.16b,v5.16b + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + ld1 {v17.4s},[x7] // re-pre-load rndkey[1] + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + aese v0.16b,v23.16b + eor v6.16b,v0.16b,v7.16b + b.hs Loop_cbc_enc + + st1 {v6.16b},[x1],#16 + b Lcbc_done + +.align 5 +Lcbc_enc128: + ld1 {v2.4s,v3.4s},[x7] + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + b Lenter_cbc_enc128 +Loop_cbc_enc128: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + st1 {v6.16b},[x1],#16 +Lenter_cbc_enc128: + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + subs x2,x2,#16 + aese v0.16b,v2.16b + aesmc v0.16b,v0.16b + csel x8,xzr,x8,eq + aese v0.16b,v3.16b + aesmc v0.16b,v0.16b + aese v0.16b,v18.16b + aesmc v0.16b,v0.16b + aese v0.16b,v19.16b + aesmc v0.16b,v0.16b + ld1 {v16.16b},[x0],x8 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + eor v16.16b,v16.16b,v5.16b + aese v0.16b,v23.16b + eor v6.16b,v0.16b,v7.16b + b.hs Loop_cbc_enc128 + + st1 {v6.16b},[x1],#16 + b Lcbc_done +.align 5 +Lcbc_dec: + ld1 {v18.16b},[x0],#16 + subs x2,x2,#32 // bias + add w6,w5,#2 + orr v3.16b,v0.16b,v0.16b + orr v1.16b,v0.16b,v0.16b + orr v19.16b,v18.16b,v18.16b + b.lo Lcbc_dec_tail + + orr v1.16b,v18.16b,v18.16b + ld1 {v18.16b},[x0],#16 + orr v2.16b,v0.16b,v0.16b + orr v3.16b,v1.16b,v1.16b + orr v19.16b,v18.16b,v18.16b + +Loop3x_cbc_dec: + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Loop3x_cbc_dec + + aesd v0.16b,v16.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + eor v4.16b,v6.16b,v7.16b + subs x2,x2,#0x30 + eor v5.16b,v2.16b,v7.16b + csel x6,x2,x6,lo // x6, w6, is zero at this point + aesd v0.16b,v17.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + eor v17.16b,v3.16b,v7.16b + add x0,x0,x6 // x0 is adjusted in such way that + // at exit from the loop v1.16b-v18.16b + // are loaded with last "words" + orr v6.16b,v19.16b,v19.16b + mov x7,x3 + aesd v0.16b,v20.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v20.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v20.16b + aesimc v18.16b,v18.16b + ld1 {v2.16b},[x0],#16 + aesd v0.16b,v21.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v21.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v21.16b + aesimc v18.16b,v18.16b + ld1 {v3.16b},[x0],#16 + aesd v0.16b,v22.16b + aesimc v0.16b,v0.16b + aesd v1.16b,v22.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v22.16b + aesimc v18.16b,v18.16b + ld1 {v19.16b},[x0],#16 + aesd v0.16b,v23.16b + aesd v1.16b,v23.16b + aesd v18.16b,v23.16b + ld1 {v16.4s},[x7],#16 // re-pre-load rndkey[0] + add w6,w5,#2 + eor v4.16b,v4.16b,v0.16b + eor v5.16b,v5.16b,v1.16b + eor v18.16b,v18.16b,v17.16b + ld1 {v17.4s},[x7],#16 // re-pre-load rndkey[1] + st1 {v4.16b},[x1],#16 + orr v0.16b,v2.16b,v2.16b + st1 {v5.16b},[x1],#16 + orr v1.16b,v3.16b,v3.16b + st1 {v18.16b},[x1],#16 + orr v18.16b,v19.16b,v19.16b + b.hs Loop3x_cbc_dec + + cmn x2,#0x30 + b.eq Lcbc_done + nop + +Lcbc_dec_tail: + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Lcbc_dec_tail + + aesd v1.16b,v16.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v16.16b + aesimc v18.16b,v18.16b + aesd v1.16b,v17.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v17.16b + aesimc v18.16b,v18.16b + aesd v1.16b,v20.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v20.16b + aesimc v18.16b,v18.16b + cmn x2,#0x20 + aesd v1.16b,v21.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v21.16b + aesimc v18.16b,v18.16b + eor v5.16b,v6.16b,v7.16b + aesd v1.16b,v22.16b + aesimc v1.16b,v1.16b + aesd v18.16b,v22.16b + aesimc v18.16b,v18.16b + eor v17.16b,v3.16b,v7.16b + aesd v1.16b,v23.16b + aesd v18.16b,v23.16b + b.eq Lcbc_dec_one + eor v5.16b,v5.16b,v1.16b + eor v17.16b,v17.16b,v18.16b + orr v6.16b,v19.16b,v19.16b + st1 {v5.16b},[x1],#16 + st1 {v17.16b},[x1],#16 + b Lcbc_done + +Lcbc_dec_one: + eor v5.16b,v5.16b,v18.16b + orr v6.16b,v19.16b,v19.16b + st1 {v5.16b},[x1],#16 + +Lcbc_done: + st1 {v6.16b},[x4] +Lcbc_abort: + ldr x29,[sp],#16 + ret + +.globl _aes_v8_ctr32_encrypt_blocks + +.align 5 +_aes_v8_ctr32_encrypt_blocks: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + ldr w5,[x3,#240] + + ldr w8, [x4, #12] +#ifdef __ARMEB__ + ld1 {v0.16b},[x4] +#else + ld1 {v0.4s},[x4] +#endif + ld1 {v16.4s,v17.4s},[x3] // load key schedule... + sub w5,w5,#4 + mov x12,#16 + cmp x2,#2 + add x7,x3,x5,lsl#4 // pointer to last 5 round keys + sub w5,w5,#2 + ld1 {v20.4s,v21.4s},[x7],#32 + ld1 {v22.4s,v23.4s},[x7],#32 + ld1 {v7.4s},[x7] + add x7,x3,#32 + mov w6,w5 + csel x12,xzr,x12,lo +#ifndef __ARMEB__ + rev w8, w8 +#endif + add w10, w8, #1 + orr v6.16b,v0.16b,v0.16b + rev w10, w10 + mov v6.s[3],w10 + add w8, w8, #2 + orr v1.16b,v6.16b,v6.16b + b.ls Lctr32_tail + rev w12, w8 + mov v6.s[3],w12 + sub x2,x2,#3 // bias + orr v18.16b,v6.16b,v6.16b + b Loop3x_ctr32 + +.align 4 +Loop3x_ctr32: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + aese v18.16b,v16.16b + aesmc v18.16b,v18.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + aese v18.16b,v17.16b + aesmc v18.16b,v18.16b + ld1 {v17.4s},[x7],#16 + b.gt Loop3x_ctr32 + + aese v0.16b,v16.16b + aesmc v4.16b,v0.16b + aese v1.16b,v16.16b + aesmc v5.16b,v1.16b + ld1 {v2.16b},[x0],#16 + add w9,w8,#1 + aese v18.16b,v16.16b + aesmc v18.16b,v18.16b + ld1 {v3.16b},[x0],#16 + rev w9,w9 + aese v4.16b,v17.16b + aesmc v4.16b,v4.16b + aese v5.16b,v17.16b + aesmc v5.16b,v5.16b + ld1 {v19.16b},[x0],#16 + mov x7,x3 + aese v18.16b,v17.16b + aesmc v17.16b,v18.16b + aese v4.16b,v20.16b + aesmc v4.16b,v4.16b + aese v5.16b,v20.16b + aesmc v5.16b,v5.16b + eor v2.16b,v2.16b,v7.16b + add w10,w8,#2 + aese v17.16b,v20.16b + aesmc v17.16b,v17.16b + eor v3.16b,v3.16b,v7.16b + add w8,w8,#3 + aese v4.16b,v21.16b + aesmc v4.16b,v4.16b + aese v5.16b,v21.16b + aesmc v5.16b,v5.16b + eor v19.16b,v19.16b,v7.16b + mov v6.s[3], w9 + aese v17.16b,v21.16b + aesmc v17.16b,v17.16b + orr v0.16b,v6.16b,v6.16b + rev w10,w10 + aese v4.16b,v22.16b + aesmc v4.16b,v4.16b + mov v6.s[3], w10 + rev w12,w8 + aese v5.16b,v22.16b + aesmc v5.16b,v5.16b + orr v1.16b,v6.16b,v6.16b + mov v6.s[3], w12 + aese v17.16b,v22.16b + aesmc v17.16b,v17.16b + orr v18.16b,v6.16b,v6.16b + subs x2,x2,#3 + aese v4.16b,v23.16b + aese v5.16b,v23.16b + aese v17.16b,v23.16b + + eor v2.16b,v2.16b,v4.16b + ld1 {v16.4s},[x7],#16 // re-pre-load rndkey[0] + st1 {v2.16b},[x1],#16 + eor v3.16b,v3.16b,v5.16b + mov w6,w5 + st1 {v3.16b},[x1],#16 + eor v19.16b,v19.16b,v17.16b + ld1 {v17.4s},[x7],#16 // re-pre-load rndkey[1] + st1 {v19.16b},[x1],#16 + b.hs Loop3x_ctr32 + + adds x2,x2,#3 + b.eq Lctr32_done + cmp x2,#1 + mov x12,#16 + csel x12,xzr,x12,eq + +Lctr32_tail: + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + ld1 {v16.4s},[x7],#16 + subs w6,w6,#2 + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + ld1 {v17.4s},[x7],#16 + b.gt Lctr32_tail + + aese v0.16b,v16.16b + aesmc v0.16b,v0.16b + aese v1.16b,v16.16b + aesmc v1.16b,v1.16b + aese v0.16b,v17.16b + aesmc v0.16b,v0.16b + aese v1.16b,v17.16b + aesmc v1.16b,v1.16b + ld1 {v2.16b},[x0],x12 + aese v0.16b,v20.16b + aesmc v0.16b,v0.16b + aese v1.16b,v20.16b + aesmc v1.16b,v1.16b + ld1 {v3.16b},[x0] + aese v0.16b,v21.16b + aesmc v0.16b,v0.16b + aese v1.16b,v21.16b + aesmc v1.16b,v1.16b + eor v2.16b,v2.16b,v7.16b + aese v0.16b,v22.16b + aesmc v0.16b,v0.16b + aese v1.16b,v22.16b + aesmc v1.16b,v1.16b + eor v3.16b,v3.16b,v7.16b + aese v0.16b,v23.16b + aese v1.16b,v23.16b + + cmp x2,#1 + eor v2.16b,v2.16b,v0.16b + eor v3.16b,v3.16b,v1.16b + st1 {v2.16b},[x1],#16 + b.eq Lctr32_done + st1 {v3.16b},[x1] + +Lctr32_done: + ldr x29,[sp],#16 + ret + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/vpaes-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/vpaes-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/vpaes-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/vpaes-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1196 @@ +.text + + +.align 7 // totally strategic alignment +_vpaes_consts: +Lk_mc_forward: // mc_forward +.quad 0x0407060500030201, 0x0C0F0E0D080B0A09 +.quad 0x080B0A0904070605, 0x000302010C0F0E0D +.quad 0x0C0F0E0D080B0A09, 0x0407060500030201 +.quad 0x000302010C0F0E0D, 0x080B0A0904070605 +Lk_mc_backward: // mc_backward +.quad 0x0605040702010003, 0x0E0D0C0F0A09080B +.quad 0x020100030E0D0C0F, 0x0A09080B06050407 +.quad 0x0E0D0C0F0A09080B, 0x0605040702010003 +.quad 0x0A09080B06050407, 0x020100030E0D0C0F +Lk_sr: // sr +.quad 0x0706050403020100, 0x0F0E0D0C0B0A0908 +.quad 0x030E09040F0A0500, 0x0B06010C07020D08 +.quad 0x0F060D040B020900, 0x070E050C030A0108 +.quad 0x0B0E0104070A0D00, 0x0306090C0F020508 + +// +// "Hot" constants +// +Lk_inv: // inv, inva +.quad 0x0E05060F0D080180, 0x040703090A0B0C02 +.quad 0x01040A060F0B0780, 0x030D0E0C02050809 +Lk_ipt: // input transform (lo, hi) +.quad 0xC2B2E8985A2A7000, 0xCABAE09052227808 +.quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81 +Lk_sbo: // sbou, sbot +.quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878 +.quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA +Lk_sb1: // sb1u, sb1t +.quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF +.quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544 +Lk_sb2: // sb2u, sb2t +.quad 0x69EB88400AE12900, 0xC2A163C8AB82234A +.quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD + +// +// Decryption stuff +// +Lk_dipt: // decryption input transform +.quad 0x0F505B040B545F00, 0x154A411E114E451A +.quad 0x86E383E660056500, 0x12771772F491F194 +Lk_dsbo: // decryption sbox final output +.quad 0x1387EA537EF94000, 0xC7AA6DB9D4943E2D +.quad 0x12D7560F93441D00, 0xCA4B8159D8C58E9C +Lk_dsb9: // decryption sbox output *9*u, *9*t +.quad 0x851C03539A86D600, 0xCAD51F504F994CC9 +.quad 0xC03B1789ECD74900, 0x725E2C9EB2FBA565 +Lk_dsbd: // decryption sbox output *D*u, *D*t +.quad 0x7D57CCDFE6B1A200, 0xF56E9B13882A4439 +.quad 0x3CE2FAF724C6CB00, 0x2931180D15DEEFD3 +Lk_dsbb: // decryption sbox output *B*u, *B*t +.quad 0xD022649296B44200, 0x602646F6B0F2D404 +.quad 0xC19498A6CD596700, 0xF3FF0C3E3255AA6B +Lk_dsbe: // decryption sbox output *E*u, *E*t +.quad 0x46F2929626D4D000, 0x2242600464B4F6B0 +.quad 0x0C55A6CDFFAAC100, 0x9467F36B98593E32 + +// +// Key schedule constants +// +Lk_dksd: // decryption key schedule: invskew x*D +.quad 0xFEB91A5DA3E44700, 0x0740E3A45A1DBEF9 +.quad 0x41C277F4B5368300, 0x5FDC69EAAB289D1E +Lk_dksb: // decryption key schedule: invskew x*B +.quad 0x9A4FCA1F8550D500, 0x03D653861CC94C99 +.quad 0x115BEDA7B6FC4A00, 0xD993256F7E3482C8 +Lk_dkse: // decryption key schedule: invskew x*E + 0x63 +.quad 0xD5031CCA1FC9D600, 0x53859A4C994F5086 +.quad 0xA23196054FDC7BE8, 0xCD5EF96A20B31487 +Lk_dks9: // decryption key schedule: invskew x*9 +.quad 0xB6116FC87ED9A700, 0x4AED933482255BFC +.quad 0x4576516227143300, 0x8BB89FACE9DAFDCE + +Lk_rcon: // rcon +.quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81 + +Lk_opt: // output transform +.quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808 +.quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0 +Lk_deskew: // deskew tables: inverts the sbox's "skew" +.quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A +.quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77 + +.byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105,111,110,32,65,69,83,32,102,111,114,32,65,82,77,118,56,44,32,77,105,107,101,32,72,97,109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105,118,101,114,115,105,116,121,41,0 +.align 2 + +.align 6 +## +## _aes_preheat +## +## Fills register %r10 -> .aes_consts (so you can -fPIC) +## and %xmm9-%xmm15 as specified below. +## + +.align 4 +_vpaes_encrypt_preheat: + adr x10, Lk_inv + movi v17.16b, #0x0f + ld1 {v18.2d,v19.2d}, [x10],#32 // Lk_inv + ld1 {v20.2d,v21.2d,v22.2d,v23.2d}, [x10],#64 // Lk_ipt, Lk_sbo + ld1 {v24.2d,v25.2d,v26.2d,v27.2d}, [x10] // Lk_sb1, Lk_sb2 + ret + + +## +## _aes_encrypt_core +## +## AES-encrypt %xmm0. +## +## Inputs: +## %xmm0 = input +## %xmm9-%xmm15 as in _vpaes_preheat +## (%rdx) = scheduled keys +## +## Output in %xmm0 +## Clobbers %xmm1-%xmm5, %r9, %r10, %r11, %rax +## Preserves %xmm6 - %xmm8 so you get some local vectors +## +## + +.align 4 +_vpaes_encrypt_core: + mov x9, x2 + ldr w8, [x2,#240] // pull rounds + adr x11, Lk_mc_forward+16 + // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key + and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v7.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + tbl v1.16b, {v20.16b}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1 + // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi + tbl v2.16b, {v21.16b}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2 + eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0 + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + b Lenc_entry + +.align 4 +Lenc_loop: + // middle of middle round + add x10, x11, #0x40 + tbl v4.16b, {v25.16b}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u + ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # Lk_mc_forward[] + tbl v0.16b, {v24.16b}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + tbl v5.16b, {v27.16b}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + tbl v2.16b, {v26.16b}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t + ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # Lk_mc_backward[] + tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B + eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A + tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B + tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C + eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D + and x11, x11, #~(1<<6) // and $0x30, %r11 # ... mod 4 + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D + sub w8, w8, #1 // nr-- + +Lenc_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + tbl v5.16b, {v19.16b}, v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + tbl v3.16b, {v18.16b}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v4.16b, {v18.16b}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + tbl v2.16b, {v18.16b}, v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v3.16b, {v18.16b}, v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5 + cbnz w8, Lenc_loop + + // middle of last round + add x10, x11, #0x80 + // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo + // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + tbl v4.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # Lk_sr[] + tbl v0.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 + ret + + +.globl _vpaes_encrypt + +.align 4 +_vpaes_encrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v7.16b}, [x0] + bl _vpaes_encrypt_preheat + bl _vpaes_encrypt_core + st1 {v0.16b}, [x1] + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + + +.align 4 +_vpaes_encrypt_2x: + mov x9, x2 + ldr w8, [x2,#240] // pull rounds + adr x11, Lk_mc_forward+16 + // vmovdqa .Lk_ipt(%rip), %xmm2 # iptlo + ld1 {v16.2d}, [x9], #16 // vmovdqu (%r9), %xmm5 # round0 key + and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v14.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + and v9.16b, v15.16b, v17.16b + ushr v8.16b, v15.16b, #4 + tbl v1.16b, {v20.16b}, v1.16b // vpshufb %xmm1, %xmm2, %xmm1 + tbl v9.16b, {v20.16b}, v9.16b + // vmovdqa .Lk_ipt+16(%rip), %xmm3 # ipthi + tbl v2.16b, {v21.16b}, v0.16b // vpshufb %xmm0, %xmm3, %xmm2 + tbl v10.16b, {v21.16b}, v8.16b + eor v0.16b, v1.16b, v16.16b // vpxor %xmm5, %xmm1, %xmm0 + eor v8.16b, v9.16b, v16.16b + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + eor v8.16b, v8.16b, v10.16b + b Lenc_2x_entry + +.align 4 +Lenc_2x_loop: + // middle of middle round + add x10, x11, #0x40 + tbl v4.16b, {v25.16b}, v2.16b // vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u + tbl v12.16b, {v25.16b}, v10.16b + ld1 {v1.2d}, [x11], #16 // vmovdqa -0x40(%r11,%r10), %xmm1 # Lk_mc_forward[] + tbl v0.16b, {v24.16b}, v3.16b // vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t + tbl v8.16b, {v24.16b}, v11.16b + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v12.16b, v12.16b, v16.16b + tbl v5.16b, {v27.16b}, v2.16b // vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u + tbl v13.16b, {v27.16b}, v10.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + eor v8.16b, v8.16b, v12.16b + tbl v2.16b, {v26.16b}, v3.16b // vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t + tbl v10.16b, {v26.16b}, v11.16b + ld1 {v4.2d}, [x10] // vmovdqa (%r11,%r10), %xmm4 # Lk_mc_backward[] + tbl v3.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm3 # 0 = B + tbl v11.16b, {v8.16b}, v1.16b + eor v2.16b, v2.16b, v5.16b // vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A + eor v10.16b, v10.16b, v13.16b + tbl v0.16b, {v0.16b}, v4.16b // vpshufb %xmm4, %xmm0, %xmm0 # 3 = D + tbl v8.16b, {v8.16b}, v4.16b + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B + eor v11.16b, v11.16b, v10.16b + tbl v4.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C + tbl v12.16b, {v11.16b},v1.16b + eor v0.16b, v0.16b, v3.16b // vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D + eor v8.16b, v8.16b, v11.16b + and x11, x11, #~(1<<6) // and $0x30, %r11 # ... mod 4 + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D + eor v8.16b, v8.16b, v12.16b + sub w8, w8, #1 // nr-- + +Lenc_2x_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm0, %xmm9, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + and v9.16b, v8.16b, v17.16b + ushr v8.16b, v8.16b, #4 + tbl v5.16b, {v19.16b},v1.16b // vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k + tbl v13.16b, {v19.16b},v9.16b + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + eor v9.16b, v9.16b, v8.16b + tbl v3.16b, {v18.16b},v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v11.16b, {v18.16b},v8.16b + tbl v4.16b, {v18.16b},v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + tbl v12.16b, {v18.16b},v9.16b + eor v3.16b, v3.16b, v5.16b // vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v11.16b, v11.16b, v13.16b + eor v4.16b, v4.16b, v5.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + eor v12.16b, v12.16b, v13.16b + tbl v2.16b, {v18.16b},v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v10.16b, {v18.16b},v11.16b + tbl v3.16b, {v18.16b},v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + tbl v11.16b, {v18.16b},v12.16b + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v10.16b, v10.16b, v9.16b + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + eor v11.16b, v11.16b, v8.16b + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm5 + cbnz w8, Lenc_2x_loop + + // middle of last round + add x10, x11, #0x80 + // vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo + // vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16 + tbl v4.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + tbl v12.16b, {v22.16b}, v10.16b + ld1 {v1.2d}, [x10] // vmovdqa 0x40(%r11,%r10), %xmm1 # Lk_sr[] + tbl v0.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t + tbl v8.16b, {v23.16b}, v11.16b + eor v4.16b, v4.16b, v16.16b // vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k + eor v12.16b, v12.16b, v16.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 0 = A + eor v8.16b, v8.16b, v12.16b + tbl v0.16b, {v0.16b},v1.16b // vpshufb %xmm1, %xmm0, %xmm0 + tbl v1.16b, {v8.16b},v1.16b + ret + + + +.align 4 +_vpaes_decrypt_preheat: + adr x10, Lk_inv + movi v17.16b, #0x0f + adr x11, Lk_dipt + ld1 {v18.2d,v19.2d}, [x10],#32 // Lk_inv + ld1 {v20.2d,v21.2d,v22.2d,v23.2d}, [x11],#64 // Lk_dipt, Lk_dsbo + ld1 {v24.2d,v25.2d,v26.2d,v27.2d}, [x11],#64 // Lk_dsb9, Lk_dsbd + ld1 {v28.2d,v29.2d,v30.2d,v31.2d}, [x11] // Lk_dsbb, Lk_dsbe + ret + + +## +## Decryption core +## +## Same API as encryption core. +## + +.align 4 +_vpaes_decrypt_core: + mov x9, x2 + ldr w8, [x2,#240] // pull rounds + + // vmovdqa .Lk_dipt(%rip), %xmm2 # iptlo + lsl x11, x8, #4 // mov %rax, %r11; shl $4, %r11 + eor x11, x11, #0x30 // xor $0x30, %r11 + adr x10, Lk_sr + and x11, x11, #0x30 // and $0x30, %r11 + add x11, x11, x10 + adr x10, Lk_mc_forward+48 + + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm4 # round0 key + and v1.16b, v7.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v7.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + tbl v2.16b, {v20.16b}, v1.16b // vpshufb %xmm1, %xmm2, %xmm2 + ld1 {v5.2d}, [x10] // vmovdqa Lk_mc_forward+48(%rip), %xmm5 + // vmovdqa .Lk_dipt+16(%rip), %xmm1 # ipthi + tbl v0.16b, {v21.16b}, v0.16b // vpshufb %xmm0, %xmm1, %xmm0 + eor v2.16b, v2.16b, v16.16b // vpxor %xmm4, %xmm2, %xmm2 + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + b Ldec_entry + +.align 4 +Ldec_loop: +// +// Inverse mix columns +// + // vmovdqa -0x20(%r10),%xmm4 # 4 : sb9u + // vmovdqa -0x10(%r10),%xmm1 # 0 : sb9t + tbl v4.16b, {v24.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sb9u + tbl v1.16b, {v25.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb9t + eor v0.16b, v4.16b, v16.16b // vpxor %xmm4, %xmm0, %xmm0 + // vmovdqa 0x00(%r10),%xmm4 # 4 : sbdu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + // vmovdqa 0x10(%r10),%xmm1 # 0 : sbdt + + tbl v4.16b, {v26.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbdu + tbl v0.16b, {v0.16b}, v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v1.16b, {v27.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbdt + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + // vmovdqa 0x20(%r10), %xmm4 # 4 : sbbu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + // vmovdqa 0x30(%r10), %xmm1 # 0 : sbbt + + tbl v4.16b, {v28.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbbu + tbl v0.16b, {v0.16b}, v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v1.16b, {v29.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbbt + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + // vmovdqa 0x40(%r10), %xmm4 # 4 : sbeu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + // vmovdqa 0x50(%r10), %xmm1 # 0 : sbet + + tbl v4.16b, {v30.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbeu + tbl v0.16b, {v0.16b}, v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v1.16b, {v31.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbet + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + ext v5.16b, v5.16b, v5.16b, #12 // vpalignr $12, %xmm5, %xmm5, %xmm5 + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + sub w8, w8, #1 // sub $1,%rax # nr-- + +Ldec_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + tbl v2.16b, {v19.16b}, v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + tbl v3.16b, {v18.16b}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v4.16b, {v18.16b}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + tbl v2.16b, {v18.16b}, v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v3.16b, {v18.16b}, v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm0 + cbnz w8, Ldec_loop + + // middle of last round + // vmovdqa 0x60(%r10), %xmm4 # 3 : sbou + tbl v4.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + // vmovdqa 0x70(%r10), %xmm1 # 0 : sbot + ld1 {v2.2d}, [x11] // vmovdqa -0x160(%r11), %xmm2 # Lk_sr-Lk_dsbd=-0x160 + tbl v1.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb1t + eor v4.16b, v4.16b, v16.16b // vpxor %xmm0, %xmm4, %xmm4 # 4 = sb1u + k + eor v0.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm0 # 0 = A + tbl v0.16b, {v0.16b}, v2.16b // vpshufb %xmm2, %xmm0, %xmm0 + ret + + +.globl _vpaes_decrypt + +.align 4 +_vpaes_decrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v7.16b}, [x0] + bl _vpaes_decrypt_preheat + bl _vpaes_decrypt_core + st1 {v0.16b}, [x1] + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// v14-v15 input, v0-v1 output + +.align 4 +_vpaes_decrypt_2x: + mov x9, x2 + ldr w8, [x2,#240] // pull rounds + + // vmovdqa .Lk_dipt(%rip), %xmm2 # iptlo + lsl x11, x8, #4 // mov %rax, %r11; shl $4, %r11 + eor x11, x11, #0x30 // xor $0x30, %r11 + adr x10, Lk_sr + and x11, x11, #0x30 // and $0x30, %r11 + add x11, x11, x10 + adr x10, Lk_mc_forward+48 + + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm4 # round0 key + and v1.16b, v14.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v14.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + and v9.16b, v15.16b, v17.16b + ushr v8.16b, v15.16b, #4 + tbl v2.16b, {v20.16b},v1.16b // vpshufb %xmm1, %xmm2, %xmm2 + tbl v10.16b, {v20.16b},v9.16b + ld1 {v5.2d}, [x10] // vmovdqa Lk_mc_forward+48(%rip), %xmm5 + // vmovdqa .Lk_dipt+16(%rip), %xmm1 # ipthi + tbl v0.16b, {v21.16b},v0.16b // vpshufb %xmm0, %xmm1, %xmm0 + tbl v8.16b, {v21.16b},v8.16b + eor v2.16b, v2.16b, v16.16b // vpxor %xmm4, %xmm2, %xmm2 + eor v10.16b, v10.16b, v16.16b + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + eor v8.16b, v8.16b, v10.16b + b Ldec_2x_entry + +.align 4 +Ldec_2x_loop: +// +// Inverse mix columns +// + // vmovdqa -0x20(%r10),%xmm4 # 4 : sb9u + // vmovdqa -0x10(%r10),%xmm1 # 0 : sb9t + tbl v4.16b, {v24.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sb9u + tbl v12.16b, {v24.16b}, v10.16b + tbl v1.16b, {v25.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb9t + tbl v9.16b, {v25.16b}, v11.16b + eor v0.16b, v4.16b, v16.16b // vpxor %xmm4, %xmm0, %xmm0 + eor v8.16b, v12.16b, v16.16b + // vmovdqa 0x00(%r10),%xmm4 # 4 : sbdu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + eor v8.16b, v8.16b, v9.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + // vmovdqa 0x10(%r10),%xmm1 # 0 : sbdt + + tbl v4.16b, {v26.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbdu + tbl v12.16b, {v26.16b}, v10.16b + tbl v0.16b, {v0.16b},v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v8.16b, {v8.16b},v5.16b + tbl v1.16b, {v27.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbdt + tbl v9.16b, {v27.16b}, v11.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + eor v8.16b, v8.16b, v12.16b + // vmovdqa 0x20(%r10), %xmm4 # 4 : sbbu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + eor v8.16b, v8.16b, v9.16b + // vmovdqa 0x30(%r10), %xmm1 # 0 : sbbt + + tbl v4.16b, {v28.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbbu + tbl v12.16b, {v28.16b}, v10.16b + tbl v0.16b, {v0.16b},v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v8.16b, {v8.16b},v5.16b + tbl v1.16b, {v29.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbbt + tbl v9.16b, {v29.16b}, v11.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + eor v8.16b, v8.16b, v12.16b + // vmovdqa 0x40(%r10), %xmm4 # 4 : sbeu + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + eor v8.16b, v8.16b, v9.16b + // vmovdqa 0x50(%r10), %xmm1 # 0 : sbet + + tbl v4.16b, {v30.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbeu + tbl v12.16b, {v30.16b}, v10.16b + tbl v0.16b, {v0.16b},v5.16b // vpshufb %xmm5, %xmm0, %xmm0 # MC ch + tbl v8.16b, {v8.16b},v5.16b + tbl v1.16b, {v31.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbet + tbl v9.16b, {v31.16b}, v11.16b + eor v0.16b, v0.16b, v4.16b // vpxor %xmm4, %xmm0, %xmm0 # 4 = ch + eor v8.16b, v8.16b, v12.16b + ext v5.16b, v5.16b, v5.16b, #12 // vpalignr $12, %xmm5, %xmm5, %xmm5 + eor v0.16b, v0.16b, v1.16b // vpxor %xmm1, %xmm0, %xmm0 # 0 = ch + eor v8.16b, v8.16b, v9.16b + sub w8, w8, #1 // sub $1,%rax # nr-- + +Ldec_2x_entry: + // top of round + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + and v9.16b, v8.16b, v17.16b + ushr v8.16b, v8.16b, #4 + tbl v2.16b, {v19.16b},v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k + tbl v10.16b, {v19.16b},v9.16b + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + eor v9.16b, v9.16b, v8.16b + tbl v3.16b, {v18.16b},v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + tbl v11.16b, {v18.16b},v8.16b + tbl v4.16b, {v18.16b},v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + tbl v12.16b, {v18.16b},v9.16b + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + eor v11.16b, v11.16b, v10.16b + eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + eor v12.16b, v12.16b, v10.16b + tbl v2.16b, {v18.16b},v3.16b // vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak + tbl v10.16b, {v18.16b},v11.16b + tbl v3.16b, {v18.16b},v4.16b // vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak + tbl v11.16b, {v18.16b},v12.16b + eor v2.16b, v2.16b, v1.16b // vpxor %xmm1, %xmm2, %xmm2 # 2 = io + eor v10.16b, v10.16b, v9.16b + eor v3.16b, v3.16b, v0.16b // vpxor %xmm0, %xmm3, %xmm3 # 3 = jo + eor v11.16b, v11.16b, v8.16b + ld1 {v16.2d}, [x9],#16 // vmovdqu (%r9), %xmm0 + cbnz w8, Ldec_2x_loop + + // middle of last round + // vmovdqa 0x60(%r10), %xmm4 # 3 : sbou + tbl v4.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou + tbl v12.16b, {v22.16b}, v10.16b + // vmovdqa 0x70(%r10), %xmm1 # 0 : sbot + tbl v1.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb1t + tbl v9.16b, {v23.16b}, v11.16b + ld1 {v2.2d}, [x11] // vmovdqa -0x160(%r11), %xmm2 # Lk_sr-Lk_dsbd=-0x160 + eor v4.16b, v4.16b, v16.16b // vpxor %xmm0, %xmm4, %xmm4 # 4 = sb1u + k + eor v12.16b, v12.16b, v16.16b + eor v0.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm0 # 0 = A + eor v8.16b, v9.16b, v12.16b + tbl v0.16b, {v0.16b},v2.16b // vpshufb %xmm2, %xmm0, %xmm0 + tbl v1.16b, {v8.16b},v2.16b + ret + +######################################################## +## ## +## AES key schedule ## +## ## +######################################################## + +.align 4 +_vpaes_key_preheat: + adr x10, Lk_inv + movi v16.16b, #0x5b // Lk_s63 + adr x11, Lk_sb1 + movi v17.16b, #0x0f // Lk_s0F + ld1 {v18.2d,v19.2d,v20.2d,v21.2d}, [x10] // Lk_inv, Lk_ipt + adr x10, Lk_dksd + ld1 {v22.2d,v23.2d}, [x11] // Lk_sb1 + adr x11, Lk_mc_forward + ld1 {v24.2d,v25.2d,v26.2d,v27.2d}, [x10],#64 // Lk_dksd, Lk_dksb + ld1 {v28.2d,v29.2d,v30.2d,v31.2d}, [x10],#64 // Lk_dkse, Lk_dks9 + ld1 {v8.2d}, [x10] // Lk_rcon + ld1 {v9.2d}, [x11] // Lk_mc_forward[0] + ret + + + +.align 4 +_vpaes_schedule_core: +.long 0xd503233f // paciasp + stp x29, x30, [sp,#-16]! + add x29,sp,#0 + + bl _vpaes_key_preheat // load the tables + + ld1 {v0.16b}, [x0],#16 // vmovdqu (%rdi), %xmm0 # load key (unaligned) + + // input transform + mov v3.16b, v0.16b // vmovdqa %xmm0, %xmm3 + bl _vpaes_schedule_transform + mov v7.16b, v0.16b // vmovdqa %xmm0, %xmm7 + + adr x10, Lk_sr // lea Lk_sr(%rip),%r10 + add x8, x8, x10 + cbnz w3, Lschedule_am_decrypting + + // encrypting, output zeroth round key after transform + st1 {v0.2d}, [x2] // vmovdqu %xmm0, (%rdx) + b Lschedule_go + +Lschedule_am_decrypting: + // decrypting, output zeroth round key after shiftrows + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1 + tbl v3.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + st1 {v3.2d}, [x2] // vmovdqu %xmm3, (%rdx) + eor x8, x8, #0x30 // xor $0x30, %r8 + +Lschedule_go: + cmp w1, #192 // cmp $192, %esi + b.hi Lschedule_256 + b.eq Lschedule_192 + // 128: fall though + +## +## .schedule_128 +## +## 128-bit specific part of key schedule. +## +## This schedule is really simple, because all its parts +## are accomplished by the subroutines. +## +Lschedule_128: + mov x0, #10 // mov $10, %esi + +Loop_schedule_128: + sub x0, x0, #1 // dec %esi + bl _vpaes_schedule_round + cbz x0, Lschedule_mangle_last + bl _vpaes_schedule_mangle // write output + b Loop_schedule_128 + +## +## .aes_schedule_192 +## +## 192-bit specific part of key schedule. +## +## The main body of this schedule is the same as the 128-bit +## schedule, but with more smearing. The long, high side is +## stored in %xmm7 as before, and the short, low side is in +## the high bits of %xmm6. +## +## This schedule is somewhat nastier, however, because each +## round produces 192 bits of key material, or 1.5 round keys. +## Therefore, on each cycle we do 2 rounds and produce 3 round +## keys. +## +.align 4 +Lschedule_192: + sub x0, x0, #8 + ld1 {v0.16b}, [x0] // vmovdqu 8(%rdi),%xmm0 # load key part 2 (very unaligned) + bl _vpaes_schedule_transform // input transform + mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save short part + eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 # clear 4 + ins v6.d[0], v4.d[0] // vmovhlps %xmm4, %xmm6, %xmm6 # clobber low side with zeros + mov x0, #4 // mov $4, %esi + +Loop_schedule_192: + sub x0, x0, #1 // dec %esi + bl _vpaes_schedule_round + ext v0.16b, v6.16b, v0.16b, #8 // vpalignr $8,%xmm6,%xmm0,%xmm0 + bl _vpaes_schedule_mangle // save key n + bl _vpaes_schedule_192_smear + bl _vpaes_schedule_mangle // save key n+1 + bl _vpaes_schedule_round + cbz x0, Lschedule_mangle_last + bl _vpaes_schedule_mangle // save key n+2 + bl _vpaes_schedule_192_smear + b Loop_schedule_192 + +## +## .aes_schedule_256 +## +## 256-bit specific part of key schedule. +## +## The structure here is very similar to the 128-bit +## schedule, but with an additional "low side" in +## %xmm6. The low side's rounds are the same as the +## high side's, except no rcon and no rotation. +## +.align 4 +Lschedule_256: + ld1 {v0.16b}, [x0] // vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned) + bl _vpaes_schedule_transform // input transform + mov x0, #7 // mov $7, %esi + +Loop_schedule_256: + sub x0, x0, #1 // dec %esi + bl _vpaes_schedule_mangle // output low result + mov v6.16b, v0.16b // vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6 + + // high round + bl _vpaes_schedule_round + cbz x0, Lschedule_mangle_last + bl _vpaes_schedule_mangle + + // low round. swap xmm7 and xmm6 + dup v0.4s, v0.s[3] // vpshufd $0xFF, %xmm0, %xmm0 + movi v4.16b, #0 + mov v5.16b, v7.16b // vmovdqa %xmm7, %xmm5 + mov v7.16b, v6.16b // vmovdqa %xmm6, %xmm7 + bl _vpaes_schedule_low_round + mov v7.16b, v5.16b // vmovdqa %xmm5, %xmm7 + + b Loop_schedule_256 + +## +## .aes_schedule_mangle_last +## +## Mangler for last round of key schedule +## Mangles %xmm0 +## when encrypting, outputs out(%xmm0) ^ 63 +## when decrypting, outputs unskew(%xmm0) +## +## Always called right before return... jumps to cleanup and exits +## +.align 4 +Lschedule_mangle_last: + // schedule last round key from xmm0 + adr x11, Lk_deskew // lea Lk_deskew(%rip),%r11 # prepare to deskew + cbnz w3, Lschedule_mangle_last_dec + + // encrypting + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10),%xmm1 + adr x11, Lk_opt // lea Lk_opt(%rip), %r11 # prepare to output transform + add x2, x2, #32 // add $32, %rdx + tbl v0.16b, {v0.16b}, v1.16b // vpshufb %xmm1, %xmm0, %xmm0 # output permute + +Lschedule_mangle_last_dec: + ld1 {v20.2d,v21.2d}, [x11] // reload constants + sub x2, x2, #16 // add $-16, %rdx + eor v0.16b, v0.16b, v16.16b // vpxor Lk_s63(%rip), %xmm0, %xmm0 + bl _vpaes_schedule_transform // output transform + st1 {v0.2d}, [x2] // vmovdqu %xmm0, (%rdx) # save last key + + // cleanup + eor v0.16b, v0.16b, v0.16b // vpxor %xmm0, %xmm0, %xmm0 + eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1 + eor v2.16b, v2.16b, v2.16b // vpxor %xmm2, %xmm2, %xmm2 + eor v3.16b, v3.16b, v3.16b // vpxor %xmm3, %xmm3, %xmm3 + eor v4.16b, v4.16b, v4.16b // vpxor %xmm4, %xmm4, %xmm4 + eor v5.16b, v5.16b, v5.16b // vpxor %xmm5, %xmm5, %xmm5 + eor v6.16b, v6.16b, v6.16b // vpxor %xmm6, %xmm6, %xmm6 + eor v7.16b, v7.16b, v7.16b // vpxor %xmm7, %xmm7, %xmm7 + ldp x29, x30, [sp],#16 +.long 0xd50323bf // autiasp + ret + + +## +## .aes_schedule_192_smear +## +## Smear the short, low side in the 192-bit key schedule. +## +## Inputs: +## %xmm7: high side, b a x y +## %xmm6: low side, d c 0 0 +## %xmm13: 0 +## +## Outputs: +## %xmm6: b+c+d b+c 0 0 +## %xmm0: b+c+d b+c b a +## + +.align 4 +_vpaes_schedule_192_smear: + movi v1.16b, #0 + dup v0.4s, v7.s[3] + ins v1.s[3], v6.s[2] // vpshufd $0x80, %xmm6, %xmm1 # d c 0 0 -> c 0 0 0 + ins v0.s[0], v7.s[2] // vpshufd $0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a + eor v6.16b, v6.16b, v1.16b // vpxor %xmm1, %xmm6, %xmm6 # -> c+d c 0 0 + eor v1.16b, v1.16b, v1.16b // vpxor %xmm1, %xmm1, %xmm1 + eor v6.16b, v6.16b, v0.16b // vpxor %xmm0, %xmm6, %xmm6 # -> b+c+d b+c b a + mov v0.16b, v6.16b // vmovdqa %xmm6, %xmm0 + ins v6.d[0], v1.d[0] // vmovhlps %xmm1, %xmm6, %xmm6 # clobber low side with zeros + ret + + +## +## .aes_schedule_round +## +## Runs one main round of the key schedule on %xmm0, %xmm7 +## +## Specifically, runs subbytes on the high dword of %xmm0 +## then rotates it by one byte and xors into the low dword of +## %xmm7. +## +## Adds rcon from low byte of %xmm8, then rotates %xmm8 for +## next rcon. +## +## Smears the dwords of %xmm7 by xoring the low into the +## second low, result into third, result into highest. +## +## Returns results in %xmm7 = %xmm0. +## Clobbers %xmm1-%xmm4, %r11. +## + +.align 4 +_vpaes_schedule_round: + // extract rcon from xmm8 + movi v4.16b, #0 // vpxor %xmm4, %xmm4, %xmm4 + ext v1.16b, v8.16b, v4.16b, #15 // vpalignr $15, %xmm8, %xmm4, %xmm1 + ext v8.16b, v8.16b, v8.16b, #15 // vpalignr $15, %xmm8, %xmm8, %xmm8 + eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7 + + // rotate + dup v0.4s, v0.s[3] // vpshufd $0xFF, %xmm0, %xmm0 + ext v0.16b, v0.16b, v0.16b, #1 // vpalignr $1, %xmm0, %xmm0, %xmm0 + + // fall through... + + // low round: same as high round, but no rotation and no rcon. +_vpaes_schedule_low_round: + // smear xmm7 + ext v1.16b, v4.16b, v7.16b, #12 // vpslldq $4, %xmm7, %xmm1 + eor v7.16b, v7.16b, v1.16b // vpxor %xmm1, %xmm7, %xmm7 + ext v4.16b, v4.16b, v7.16b, #8 // vpslldq $8, %xmm7, %xmm4 + + // subbytes + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 # 0 = k + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 # 1 = i + eor v7.16b, v7.16b, v4.16b // vpxor %xmm4, %xmm7, %xmm7 + tbl v2.16b, {v19.16b}, v1.16b // vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k + eor v1.16b, v1.16b, v0.16b // vpxor %xmm0, %xmm1, %xmm1 # 0 = j + tbl v3.16b, {v18.16b}, v0.16b // vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k + tbl v4.16b, {v18.16b}, v1.16b // vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j + eor v7.16b, v7.16b, v16.16b // vpxor Lk_s63(%rip), %xmm7, %xmm7 + tbl v3.16b, {v18.16b}, v3.16b // vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak + eor v4.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k + tbl v2.16b, {v18.16b}, v4.16b // vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak + eor v3.16b, v3.16b, v1.16b // vpxor %xmm1, %xmm3, %xmm3 # 2 = io + eor v2.16b, v2.16b, v0.16b // vpxor %xmm0, %xmm2, %xmm2 # 3 = jo + tbl v4.16b, {v23.16b}, v3.16b // vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou + tbl v1.16b, {v22.16b}, v2.16b // vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t + eor v1.16b, v1.16b, v4.16b // vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output + + // add in smeared stuff + eor v0.16b, v1.16b, v7.16b // vpxor %xmm7, %xmm1, %xmm0 + eor v7.16b, v1.16b, v7.16b // vmovdqa %xmm0, %xmm7 + ret + + +## +## .aes_schedule_transform +## +## Linear-transform %xmm0 according to tables at (%r11) +## +## Requires that %xmm9 = 0x0F0F... as in preheat +## Output in %xmm0 +## Clobbers %xmm1, %xmm2 +## + +.align 4 +_vpaes_schedule_transform: + and v1.16b, v0.16b, v17.16b // vpand %xmm9, %xmm0, %xmm1 + ushr v0.16b, v0.16b, #4 // vpsrlb $4, %xmm0, %xmm0 + // vmovdqa (%r11), %xmm2 # lo + tbl v2.16b, {v20.16b}, v1.16b // vpshufb %xmm1, %xmm2, %xmm2 + // vmovdqa 16(%r11), %xmm1 # hi + tbl v0.16b, {v21.16b}, v0.16b // vpshufb %xmm0, %xmm1, %xmm0 + eor v0.16b, v0.16b, v2.16b // vpxor %xmm2, %xmm0, %xmm0 + ret + + +## +## .aes_schedule_mangle +## +## Mangle xmm0 from (basis-transformed) standard version +## to our version. +## +## On encrypt, +## xor with 0x63 +## multiply by circulant 0,1,1,1 +## apply shiftrows transform +## +## On decrypt, +## xor with 0x63 +## multiply by "inverse mixcolumns" circulant E,B,D,9 +## deskew +## apply shiftrows transform +## +## +## Writes out to (%rdx), and increments or decrements it +## Keeps track of round number mod 4 in %r8 +## Preserves xmm0 +## Clobbers xmm1-xmm5 +## + +.align 4 +_vpaes_schedule_mangle: + mov v4.16b, v0.16b // vmovdqa %xmm0, %xmm4 # save xmm0 for later + // vmovdqa .Lk_mc_forward(%rip),%xmm5 + cbnz w3, Lschedule_mangle_dec + + // encrypting + eor v4.16b, v0.16b, v16.16b // vpxor Lk_s63(%rip), %xmm0, %xmm4 + add x2, x2, #16 // add $16, %rdx + tbl v4.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm4 + tbl v1.16b, {v4.16b}, v9.16b // vpshufb %xmm5, %xmm4, %xmm1 + tbl v3.16b, {v1.16b}, v9.16b // vpshufb %xmm5, %xmm1, %xmm3 + eor v4.16b, v4.16b, v1.16b // vpxor %xmm1, %xmm4, %xmm4 + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1 + eor v3.16b, v3.16b, v4.16b // vpxor %xmm4, %xmm3, %xmm3 + + b Lschedule_mangle_both +.align 4 +Lschedule_mangle_dec: + // inverse mix columns + // lea .Lk_dksd(%rip),%r11 + ushr v1.16b, v4.16b, #4 // vpsrlb $4, %xmm4, %xmm1 # 1 = hi + and v4.16b, v4.16b, v17.16b // vpand %xmm9, %xmm4, %xmm4 # 4 = lo + + // vmovdqa 0x00(%r11), %xmm2 + tbl v2.16b, {v24.16b}, v4.16b // vpshufb %xmm4, %xmm2, %xmm2 + // vmovdqa 0x10(%r11), %xmm3 + tbl v3.16b, {v25.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 + tbl v3.16b, {v3.16b}, v9.16b // vpshufb %xmm5, %xmm3, %xmm3 + + // vmovdqa 0x20(%r11), %xmm2 + tbl v2.16b, {v26.16b}, v4.16b // vpshufb %xmm4, %xmm2, %xmm2 + eor v2.16b, v2.16b, v3.16b // vpxor %xmm3, %xmm2, %xmm2 + // vmovdqa 0x30(%r11), %xmm3 + tbl v3.16b, {v27.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 + tbl v3.16b, {v3.16b}, v9.16b // vpshufb %xmm5, %xmm3, %xmm3 + + // vmovdqa 0x40(%r11), %xmm2 + tbl v2.16b, {v28.16b}, v4.16b // vpshufb %xmm4, %xmm2, %xmm2 + eor v2.16b, v2.16b, v3.16b // vpxor %xmm3, %xmm2, %xmm2 + // vmovdqa 0x50(%r11), %xmm3 + tbl v3.16b, {v29.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + eor v3.16b, v3.16b, v2.16b // vpxor %xmm2, %xmm3, %xmm3 + + // vmovdqa 0x60(%r11), %xmm2 + tbl v2.16b, {v30.16b}, v4.16b // vpshufb %xmm4, %xmm2, %xmm2 + tbl v3.16b, {v3.16b}, v9.16b // vpshufb %xmm5, %xmm3, %xmm3 + // vmovdqa 0x70(%r11), %xmm4 + tbl v4.16b, {v31.16b}, v1.16b // vpshufb %xmm1, %xmm4, %xmm4 + ld1 {v1.2d}, [x8] // vmovdqa (%r8,%r10), %xmm1 + eor v2.16b, v2.16b, v3.16b // vpxor %xmm3, %xmm2, %xmm2 + eor v3.16b, v4.16b, v2.16b // vpxor %xmm2, %xmm4, %xmm3 + + sub x2, x2, #16 // add $-16, %rdx + +Lschedule_mangle_both: + tbl v3.16b, {v3.16b}, v1.16b // vpshufb %xmm1, %xmm3, %xmm3 + add x8, x8, #64-16 // add $-16, %r8 + and x8, x8, #~(1<<6) // and $0x30, %r8 + st1 {v3.2d}, [x2] // vmovdqu %xmm3, (%rdx) + ret + + +.globl _vpaes_set_encrypt_key + +.align 4 +_vpaes_set_encrypt_key: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + + lsr w9, w1, #5 // shr $5,%eax + add w9, w9, #5 // $5,%eax + str w9, [x2,#240] // mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; + + mov w3, #0 // mov $0,%ecx + mov x8, #0x30 // mov $0x30,%r8d + bl _vpaes_schedule_core + eor x0, x0, x0 + + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +.globl _vpaes_set_decrypt_key + +.align 4 +_vpaes_set_decrypt_key: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + + lsr w9, w1, #5 // shr $5,%eax + add w9, w9, #5 // $5,%eax + str w9, [x2,#240] // mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5; + lsl w9, w9, #4 // shl $4,%eax + add x2, x2, #16 // lea 16(%rdx,%rax),%rdx + add x2, x2, x9 + + mov w3, #1 // mov $1,%ecx + lsr w8, w1, #1 // shr $1,%r8d + and x8, x8, #32 // and $32,%r8d + eor x8, x8, #32 // xor $32,%r8d # nbits==192?0:32 + bl _vpaes_schedule_core + + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + +.globl _vpaes_cbc_encrypt + +.align 4 +_vpaes_cbc_encrypt: + cbz x2, Lcbc_abort + cmp w5, #0 // check direction + b.eq vpaes_cbc_decrypt + +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + mov x17, x2 // reassign + mov x2, x3 // reassign + + ld1 {v0.16b}, [x4] // load ivec + bl _vpaes_encrypt_preheat + b Lcbc_enc_loop + +.align 4 +Lcbc_enc_loop: + ld1 {v7.16b}, [x0],#16 // load input + eor v7.16b, v7.16b, v0.16b // xor with ivec + bl _vpaes_encrypt_core + st1 {v0.16b}, [x1],#16 // save output + subs x17, x17, #16 + b.hi Lcbc_enc_loop + + st1 {v0.16b}, [x4] // write ivec + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp +Lcbc_abort: + ret + + + +.align 4 +vpaes_cbc_decrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + stp d10,d11,[sp,#-16]! + stp d12,d13,[sp,#-16]! + stp d14,d15,[sp,#-16]! + + mov x17, x2 // reassign + mov x2, x3 // reassign + ld1 {v6.16b}, [x4] // load ivec + bl _vpaes_decrypt_preheat + tst x17, #16 + b.eq Lcbc_dec_loop2x + + ld1 {v7.16b}, [x0], #16 // load input + bl _vpaes_decrypt_core + eor v0.16b, v0.16b, v6.16b // xor with ivec + orr v6.16b, v7.16b, v7.16b // next ivec value + st1 {v0.16b}, [x1], #16 + subs x17, x17, #16 + b.ls Lcbc_dec_done + +.align 4 +Lcbc_dec_loop2x: + ld1 {v14.16b,v15.16b}, [x0], #32 + bl _vpaes_decrypt_2x + eor v0.16b, v0.16b, v6.16b // xor with ivec + eor v1.16b, v1.16b, v14.16b + orr v6.16b, v15.16b, v15.16b + st1 {v0.16b,v1.16b}, [x1], #32 + subs x17, x17, #32 + b.hi Lcbc_dec_loop2x + +Lcbc_dec_done: + st1 {v6.16b}, [x4] + + ldp d14,d15,[sp],#16 + ldp d12,d13,[sp],#16 + ldp d10,d11,[sp],#16 + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + +.globl _vpaes_ecb_encrypt + +.align 4 +_vpaes_ecb_encrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + stp d10,d11,[sp,#-16]! + stp d12,d13,[sp,#-16]! + stp d14,d15,[sp,#-16]! + + mov x17, x2 + mov x2, x3 + bl _vpaes_encrypt_preheat + tst x17, #16 + b.eq Lecb_enc_loop + + ld1 {v7.16b}, [x0],#16 + bl _vpaes_encrypt_core + st1 {v0.16b}, [x1],#16 + subs x17, x17, #16 + b.ls Lecb_enc_done + +.align 4 +Lecb_enc_loop: + ld1 {v14.16b,v15.16b}, [x0], #32 + bl _vpaes_encrypt_2x + st1 {v0.16b,v1.16b}, [x1], #32 + subs x17, x17, #32 + b.hi Lecb_enc_loop + +Lecb_enc_done: + ldp d14,d15,[sp],#16 + ldp d12,d13,[sp],#16 + ldp d10,d11,[sp],#16 + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +.globl _vpaes_ecb_decrypt + +.align 4 +_vpaes_ecb_decrypt: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + stp d8,d9,[sp,#-16]! // ABI spec says so + stp d10,d11,[sp,#-16]! + stp d12,d13,[sp,#-16]! + stp d14,d15,[sp,#-16]! + + mov x17, x2 + mov x2, x3 + bl _vpaes_decrypt_preheat + tst x17, #16 + b.eq Lecb_dec_loop + + ld1 {v7.16b}, [x0],#16 + bl _vpaes_encrypt_core + st1 {v0.16b}, [x1],#16 + subs x17, x17, #16 + b.ls Lecb_dec_done + +.align 4 +Lecb_dec_loop: + ld1 {v14.16b,v15.16b}, [x0], #32 + bl _vpaes_decrypt_2x + st1 {v0.16b,v1.16b}, [x1], #32 + subs x17, x17, #32 + b.hi Lecb_dec_loop + +Lecb_dec_done: + ldp d14,d15,[sp],#16 + ldp d12,d13,[sp],#16 + ldp d10,d11,[sp],#16 + ldp d8,d9,[sp],#16 + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/arm64cpuid.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/arm64cpuid.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/arm64cpuid.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/arm64cpuid.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,122 @@ +#include "arm_arch.h" + +.text + + +.align 5 +.globl __armv7_neon_probe + +__armv7_neon_probe: + orr v15.16b, v15.16b, v15.16b + ret + + +.globl __armv7_tick + +__armv7_tick: +#ifdef __APPLE__ + mrs x0, CNTPCT_EL0 +#else + mrs x0, CNTVCT_EL0 +#endif + ret + + +.globl __armv8_aes_probe + +__armv8_aes_probe: + aese v0.16b, v0.16b + ret + + +.globl __armv8_sha1_probe + +__armv8_sha1_probe: + sha1h s0, s0 + ret + + +.globl __armv8_sha256_probe + +__armv8_sha256_probe: + sha256su0 v0.4s, v0.4s + ret + + +.globl __armv8_pmull_probe + +__armv8_pmull_probe: + pmull v0.1q, v0.1d, v0.1d + ret + + +.globl __armv8_sha512_probe + +__armv8_sha512_probe: +.long 0xcec08000 // sha512su0 v0.2d,v0.2d + ret + + +.globl _OPENSSL_cleanse + +.align 5 +_OPENSSL_cleanse: + cbz x1,Lret // len==0? + cmp x1,#15 + b.hi Lot // len>15 + nop +Little: + strb wzr,[x0],#1 // store byte-by-byte + subs x1,x1,#1 + b.ne Little +Lret: ret + +.align 4 +Lot: tst x0,#7 + b.eq Laligned // inp is aligned + strb wzr,[x0],#1 // store byte-by-byte + sub x1,x1,#1 + b Lot + +.align 4 +Laligned: + str xzr,[x0],#8 // store word-by-word + sub x1,x1,#8 + tst x1,#-8 + b.ne Laligned // len>=8 + cbnz x1,Little // len!=0? + ret + + +.globl _CRYPTO_memcmp + +.align 4 +_CRYPTO_memcmp: + eor w3,w3,w3 + cbz x2,Lno_data // len==0? + cmp x2,#16 + b.ne Loop_cmp + ldp x8,x9,[x0] + ldp x10,x11,[x1] + eor x8,x8,x10 + eor x9,x9,x11 + orr x8,x8,x9 + mov x0,#1 + cmp x8,#0 + csel x0,xzr,x0,eq + ret + +.align 4 +Loop_cmp: + ldrb w4,[x0],#1 + ldrb w5,[x1],#1 + eor w4,w4,w5 + orr w3,w3,w4 + subs x2,x2,#1 + b.ne Loop_cmp + +Lno_data: + neg w0,w3 + lsr w0,w0,#31 + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/bn/armv8-mont.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/bn/armv8-mont.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/bn/armv8-mont.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/bn/armv8-mont.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1408 @@ +.text + +.globl _bn_mul_mont + +.align 5 +_bn_mul_mont: + tst x5,#7 + b.eq __bn_sqr8x_mont + tst x5,#3 + b.eq __bn_mul4x_mont +Lmul_mont: + stp x29,x30,[sp,#-64]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + + ldr x9,[x2],#8 // bp[0] + sub x22,sp,x5,lsl#3 + ldp x7,x8,[x1],#16 // ap[0..1] + lsl x5,x5,#3 + ldr x4,[x4] // *n0 + and x22,x22,#-16 // ABI says so + ldp x13,x14,[x3],#16 // np[0..1] + + mul x6,x7,x9 // ap[0]*bp[0] + sub x21,x5,#16 // j=num-2 + umulh x7,x7,x9 + mul x10,x8,x9 // ap[1]*bp[0] + umulh x11,x8,x9 + + mul x15,x6,x4 // "tp[0]"*n0 + mov sp,x22 // alloca + + // (*) mul x12,x13,x15 // np[0]*m1 + umulh x13,x13,x15 + mul x16,x14,x15 // np[1]*m1 + // (*) adds x12,x12,x6 // discarded + // (*) As for removal of first multiplication and addition + // instructions. The outcome of first addition is + // guaranteed to be zero, which leaves two computationally + // significant outcomes: it either carries or not. Then + // question is when does it carry? Is there alternative + // way to deduce it? If you follow operations, you can + // observe that condition for carry is quite simple: + // x6 being non-zero. So that carry can be calculated + // by adding -1 to x6. That's what next instruction does. + subs xzr,x6,#1 // (*) + umulh x17,x14,x15 + adc x13,x13,xzr + cbz x21,L1st_skip + +L1st: + ldr x8,[x1],#8 + adds x6,x10,x7 + sub x21,x21,#8 // j-- + adc x7,x11,xzr + + ldr x14,[x3],#8 + adds x12,x16,x13 + mul x10,x8,x9 // ap[j]*bp[0] + adc x13,x17,xzr + umulh x11,x8,x9 + + adds x12,x12,x6 + mul x16,x14,x15 // np[j]*m1 + adc x13,x13,xzr + umulh x17,x14,x15 + str x12,[x22],#8 // tp[j-1] + cbnz x21,L1st + +L1st_skip: + adds x6,x10,x7 + sub x1,x1,x5 // rewind x1 + adc x7,x11,xzr + + adds x12,x16,x13 + sub x3,x3,x5 // rewind x3 + adc x13,x17,xzr + + adds x12,x12,x6 + sub x20,x5,#8 // i=num-1 + adcs x13,x13,x7 + + adc x19,xzr,xzr // upmost overflow bit + stp x12,x13,[x22] + +Louter: + ldr x9,[x2],#8 // bp[i] + ldp x7,x8,[x1],#16 + ldr x23,[sp] // tp[0] + add x22,sp,#8 + + mul x6,x7,x9 // ap[0]*bp[i] + sub x21,x5,#16 // j=num-2 + umulh x7,x7,x9 + ldp x13,x14,[x3],#16 + mul x10,x8,x9 // ap[1]*bp[i] + adds x6,x6,x23 + umulh x11,x8,x9 + adc x7,x7,xzr + + mul x15,x6,x4 + sub x20,x20,#8 // i-- + + // (*) mul x12,x13,x15 // np[0]*m1 + umulh x13,x13,x15 + mul x16,x14,x15 // np[1]*m1 + // (*) adds x12,x12,x6 + subs xzr,x6,#1 // (*) + umulh x17,x14,x15 + cbz x21,Linner_skip + +Linner: + ldr x8,[x1],#8 + adc x13,x13,xzr + ldr x23,[x22],#8 // tp[j] + adds x6,x10,x7 + sub x21,x21,#8 // j-- + adc x7,x11,xzr + + adds x12,x16,x13 + ldr x14,[x3],#8 + adc x13,x17,xzr + + mul x10,x8,x9 // ap[j]*bp[i] + adds x6,x6,x23 + umulh x11,x8,x9 + adc x7,x7,xzr + + mul x16,x14,x15 // np[j]*m1 + adds x12,x12,x6 + umulh x17,x14,x15 + str x12,[x22,#-16] // tp[j-1] + cbnz x21,Linner + +Linner_skip: + ldr x23,[x22],#8 // tp[j] + adc x13,x13,xzr + adds x6,x10,x7 + sub x1,x1,x5 // rewind x1 + adc x7,x11,xzr + + adds x12,x16,x13 + sub x3,x3,x5 // rewind x3 + adcs x13,x17,x19 + adc x19,xzr,xzr + + adds x6,x6,x23 + adc x7,x7,xzr + + adds x12,x12,x6 + adcs x13,x13,x7 + adc x19,x19,xzr // upmost overflow bit + stp x12,x13,[x22,#-16] + + cbnz x20,Louter + + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + ldr x23,[sp] // tp[0] + add x22,sp,#8 + ldr x14,[x3],#8 // np[0] + subs x21,x5,#8 // j=num-1 and clear borrow + mov x1,x0 +Lsub: + sbcs x8,x23,x14 // tp[j]-np[j] + ldr x23,[x22],#8 + sub x21,x21,#8 // j-- + ldr x14,[x3],#8 + str x8,[x1],#8 // rp[j]=tp[j]-np[j] + cbnz x21,Lsub + + sbcs x8,x23,x14 + sbcs x19,x19,xzr // did it borrow? + str x8,[x1],#8 // rp[num-1] + + ldr x23,[sp] // tp[0] + add x22,sp,#8 + ldr x8,[x0],#8 // rp[0] + sub x5,x5,#8 // num-- + nop +Lcond_copy: + sub x5,x5,#8 // num-- + csel x14,x23,x8,lo // did it borrow? + ldr x23,[x22],#8 + ldr x8,[x0],#8 + str xzr,[x22,#-16] // wipe tp + str x14,[x0,#-16] + cbnz x5,Lcond_copy + + csel x14,x23,x8,lo + str xzr,[x22,#-8] // wipe tp + str x14,[x0,#-8] + + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldr x29,[sp],#64 + ret + + +.align 5 +__bn_sqr8x_mont: + cmp x1,x2 + b.ne __bn_mul4x_mont +Lsqr8x_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + stp x0,x3,[sp,#96] // offload rp and np + + ldp x6,x7,[x1,#8*0] + ldp x8,x9,[x1,#8*2] + ldp x10,x11,[x1,#8*4] + ldp x12,x13,[x1,#8*6] + + sub x2,sp,x5,lsl#4 + lsl x5,x5,#3 + ldr x4,[x4] // *n0 + mov sp,x2 // alloca + sub x27,x5,#8*8 + b Lsqr8x_zero_start + +Lsqr8x_zero: + sub x27,x27,#8*8 + stp xzr,xzr,[x2,#8*0] + stp xzr,xzr,[x2,#8*2] + stp xzr,xzr,[x2,#8*4] + stp xzr,xzr,[x2,#8*6] +Lsqr8x_zero_start: + stp xzr,xzr,[x2,#8*8] + stp xzr,xzr,[x2,#8*10] + stp xzr,xzr,[x2,#8*12] + stp xzr,xzr,[x2,#8*14] + add x2,x2,#8*16 + cbnz x27,Lsqr8x_zero + + add x3,x1,x5 + add x1,x1,#8*8 + mov x19,xzr + mov x20,xzr + mov x21,xzr + mov x22,xzr + mov x23,xzr + mov x24,xzr + mov x25,xzr + mov x26,xzr + mov x2,sp + str x4,[x29,#112] // offload n0 + + // Multiply everything but a[i]*a[i] +.align 4 +Lsqr8x_outer_loop: + // a[1]a[0] (i) + // a[2]a[0] + // a[3]a[0] + // a[4]a[0] + // a[5]a[0] + // a[6]a[0] + // a[7]a[0] + // a[2]a[1] (ii) + // a[3]a[1] + // a[4]a[1] + // a[5]a[1] + // a[6]a[1] + // a[7]a[1] + // a[3]a[2] (iii) + // a[4]a[2] + // a[5]a[2] + // a[6]a[2] + // a[7]a[2] + // a[4]a[3] (iv) + // a[5]a[3] + // a[6]a[3] + // a[7]a[3] + // a[5]a[4] (v) + // a[6]a[4] + // a[7]a[4] + // a[6]a[5] (vi) + // a[7]a[5] + // a[7]a[6] (vii) + + mul x14,x7,x6 // lo(a[1..7]*a[0]) (i) + mul x15,x8,x6 + mul x16,x9,x6 + mul x17,x10,x6 + adds x20,x20,x14 // t[1]+lo(a[1]*a[0]) + mul x14,x11,x6 + adcs x21,x21,x15 + mul x15,x12,x6 + adcs x22,x22,x16 + mul x16,x13,x6 + adcs x23,x23,x17 + umulh x17,x7,x6 // hi(a[1..7]*a[0]) + adcs x24,x24,x14 + umulh x14,x8,x6 + adcs x25,x25,x15 + umulh x15,x9,x6 + adcs x26,x26,x16 + umulh x16,x10,x6 + stp x19,x20,[x2],#8*2 // t[0..1] + adc x19,xzr,xzr // t[8] + adds x21,x21,x17 // t[2]+lo(a[1]*a[0]) + umulh x17,x11,x6 + adcs x22,x22,x14 + umulh x14,x12,x6 + adcs x23,x23,x15 + umulh x15,x13,x6 + adcs x24,x24,x16 + mul x16,x8,x7 // lo(a[2..7]*a[1]) (ii) + adcs x25,x25,x17 + mul x17,x9,x7 + adcs x26,x26,x14 + mul x14,x10,x7 + adc x19,x19,x15 + + mul x15,x11,x7 + adds x22,x22,x16 + mul x16,x12,x7 + adcs x23,x23,x17 + mul x17,x13,x7 + adcs x24,x24,x14 + umulh x14,x8,x7 // hi(a[2..7]*a[1]) + adcs x25,x25,x15 + umulh x15,x9,x7 + adcs x26,x26,x16 + umulh x16,x10,x7 + adcs x19,x19,x17 + umulh x17,x11,x7 + stp x21,x22,[x2],#8*2 // t[2..3] + adc x20,xzr,xzr // t[9] + adds x23,x23,x14 + umulh x14,x12,x7 + adcs x24,x24,x15 + umulh x15,x13,x7 + adcs x25,x25,x16 + mul x16,x9,x8 // lo(a[3..7]*a[2]) (iii) + adcs x26,x26,x17 + mul x17,x10,x8 + adcs x19,x19,x14 + mul x14,x11,x8 + adc x20,x20,x15 + + mul x15,x12,x8 + adds x24,x24,x16 + mul x16,x13,x8 + adcs x25,x25,x17 + umulh x17,x9,x8 // hi(a[3..7]*a[2]) + adcs x26,x26,x14 + umulh x14,x10,x8 + adcs x19,x19,x15 + umulh x15,x11,x8 + adcs x20,x20,x16 + umulh x16,x12,x8 + stp x23,x24,[x2],#8*2 // t[4..5] + adc x21,xzr,xzr // t[10] + adds x25,x25,x17 + umulh x17,x13,x8 + adcs x26,x26,x14 + mul x14,x10,x9 // lo(a[4..7]*a[3]) (iv) + adcs x19,x19,x15 + mul x15,x11,x9 + adcs x20,x20,x16 + mul x16,x12,x9 + adc x21,x21,x17 + + mul x17,x13,x9 + adds x26,x26,x14 + umulh x14,x10,x9 // hi(a[4..7]*a[3]) + adcs x19,x19,x15 + umulh x15,x11,x9 + adcs x20,x20,x16 + umulh x16,x12,x9 + adcs x21,x21,x17 + umulh x17,x13,x9 + stp x25,x26,[x2],#8*2 // t[6..7] + adc x22,xzr,xzr // t[11] + adds x19,x19,x14 + mul x14,x11,x10 // lo(a[5..7]*a[4]) (v) + adcs x20,x20,x15 + mul x15,x12,x10 + adcs x21,x21,x16 + mul x16,x13,x10 + adc x22,x22,x17 + + umulh x17,x11,x10 // hi(a[5..7]*a[4]) + adds x20,x20,x14 + umulh x14,x12,x10 + adcs x21,x21,x15 + umulh x15,x13,x10 + adcs x22,x22,x16 + mul x16,x12,x11 // lo(a[6..7]*a[5]) (vi) + adc x23,xzr,xzr // t[12] + adds x21,x21,x17 + mul x17,x13,x11 + adcs x22,x22,x14 + umulh x14,x12,x11 // hi(a[6..7]*a[5]) + adc x23,x23,x15 + + umulh x15,x13,x11 + adds x22,x22,x16 + mul x16,x13,x12 // lo(a[7]*a[6]) (vii) + adcs x23,x23,x17 + umulh x17,x13,x12 // hi(a[7]*a[6]) + adc x24,xzr,xzr // t[13] + adds x23,x23,x14 + sub x27,x3,x1 // done yet? + adc x24,x24,x15 + + adds x24,x24,x16 + sub x14,x3,x5 // rewinded ap + adc x25,xzr,xzr // t[14] + add x25,x25,x17 + + cbz x27,Lsqr8x_outer_break + + mov x4,x6 + ldp x6,x7,[x2,#8*0] + ldp x8,x9,[x2,#8*2] + ldp x10,x11,[x2,#8*4] + ldp x12,x13,[x2,#8*6] + adds x19,x19,x6 + adcs x20,x20,x7 + ldp x6,x7,[x1,#8*0] + adcs x21,x21,x8 + adcs x22,x22,x9 + ldp x8,x9,[x1,#8*2] + adcs x23,x23,x10 + adcs x24,x24,x11 + ldp x10,x11,[x1,#8*4] + adcs x25,x25,x12 + mov x0,x1 + adcs x26,xzr,x13 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + //adc x28,xzr,xzr // moved below + mov x27,#-8*8 + + // a[8]a[0] + // a[9]a[0] + // a[a]a[0] + // a[b]a[0] + // a[c]a[0] + // a[d]a[0] + // a[e]a[0] + // a[f]a[0] + // a[8]a[1] + // a[f]a[1]........................ + // a[8]a[2] + // a[f]a[2]........................ + // a[8]a[3] + // a[f]a[3]........................ + // a[8]a[4] + // a[f]a[4]........................ + // a[8]a[5] + // a[f]a[5]........................ + // a[8]a[6] + // a[f]a[6]........................ + // a[8]a[7] + // a[f]a[7]........................ +Lsqr8x_mul: + mul x14,x6,x4 + adc x28,xzr,xzr // carry bit, modulo-scheduled + mul x15,x7,x4 + add x27,x27,#8 + mul x16,x8,x4 + mul x17,x9,x4 + adds x19,x19,x14 + mul x14,x10,x4 + adcs x20,x20,x15 + mul x15,x11,x4 + adcs x21,x21,x16 + mul x16,x12,x4 + adcs x22,x22,x17 + mul x17,x13,x4 + adcs x23,x23,x14 + umulh x14,x6,x4 + adcs x24,x24,x15 + umulh x15,x7,x4 + adcs x25,x25,x16 + umulh x16,x8,x4 + adcs x26,x26,x17 + umulh x17,x9,x4 + adc x28,x28,xzr + str x19,[x2],#8 + adds x19,x20,x14 + umulh x14,x10,x4 + adcs x20,x21,x15 + umulh x15,x11,x4 + adcs x21,x22,x16 + umulh x16,x12,x4 + adcs x22,x23,x17 + umulh x17,x13,x4 + ldr x4,[x0,x27] + adcs x23,x24,x14 + adcs x24,x25,x15 + adcs x25,x26,x16 + adcs x26,x28,x17 + //adc x28,xzr,xzr // moved above + cbnz x27,Lsqr8x_mul + // note that carry flag is guaranteed + // to be zero at this point + cmp x1,x3 // done yet? + b.eq Lsqr8x_break + + ldp x6,x7,[x2,#8*0] + ldp x8,x9,[x2,#8*2] + ldp x10,x11,[x2,#8*4] + ldp x12,x13,[x2,#8*6] + adds x19,x19,x6 + ldr x4,[x0,#-8*8] + adcs x20,x20,x7 + ldp x6,x7,[x1,#8*0] + adcs x21,x21,x8 + adcs x22,x22,x9 + ldp x8,x9,[x1,#8*2] + adcs x23,x23,x10 + adcs x24,x24,x11 + ldp x10,x11,[x1,#8*4] + adcs x25,x25,x12 + mov x27,#-8*8 + adcs x26,x26,x13 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + //adc x28,xzr,xzr // moved above + b Lsqr8x_mul + +.align 4 +Lsqr8x_break: + ldp x6,x7,[x0,#8*0] + add x1,x0,#8*8 + ldp x8,x9,[x0,#8*2] + sub x14,x3,x1 // is it last iteration? + ldp x10,x11,[x0,#8*4] + sub x15,x2,x14 + ldp x12,x13,[x0,#8*6] + cbz x14,Lsqr8x_outer_loop + + stp x19,x20,[x2,#8*0] + ldp x19,x20,[x15,#8*0] + stp x21,x22,[x2,#8*2] + ldp x21,x22,[x15,#8*2] + stp x23,x24,[x2,#8*4] + ldp x23,x24,[x15,#8*4] + stp x25,x26,[x2,#8*6] + mov x2,x15 + ldp x25,x26,[x15,#8*6] + b Lsqr8x_outer_loop + +.align 4 +Lsqr8x_outer_break: + // Now multiply above result by 2 and add a[n-1]*a[n-1]|...|a[0]*a[0] + ldp x7,x9,[x14,#8*0] // recall that x14 is &a[0] + ldp x15,x16,[sp,#8*1] + ldp x11,x13,[x14,#8*2] + add x1,x14,#8*4 + ldp x17,x14,[sp,#8*3] + + stp x19,x20,[x2,#8*0] + mul x19,x7,x7 + stp x21,x22,[x2,#8*2] + umulh x7,x7,x7 + stp x23,x24,[x2,#8*4] + mul x8,x9,x9 + stp x25,x26,[x2,#8*6] + mov x2,sp + umulh x9,x9,x9 + adds x20,x7,x15,lsl#1 + extr x15,x16,x15,#63 + sub x27,x5,#8*4 + +Lsqr4x_shift_n_add: + adcs x21,x8,x15 + extr x16,x17,x16,#63 + sub x27,x27,#8*4 + adcs x22,x9,x16 + ldp x15,x16,[x2,#8*5] + mul x10,x11,x11 + ldp x7,x9,[x1],#8*2 + umulh x11,x11,x11 + mul x12,x13,x13 + umulh x13,x13,x13 + extr x17,x14,x17,#63 + stp x19,x20,[x2,#8*0] + adcs x23,x10,x17 + extr x14,x15,x14,#63 + stp x21,x22,[x2,#8*2] + adcs x24,x11,x14 + ldp x17,x14,[x2,#8*7] + extr x15,x16,x15,#63 + adcs x25,x12,x15 + extr x16,x17,x16,#63 + adcs x26,x13,x16 + ldp x15,x16,[x2,#8*9] + mul x6,x7,x7 + ldp x11,x13,[x1],#8*2 + umulh x7,x7,x7 + mul x8,x9,x9 + umulh x9,x9,x9 + stp x23,x24,[x2,#8*4] + extr x17,x14,x17,#63 + stp x25,x26,[x2,#8*6] + add x2,x2,#8*8 + adcs x19,x6,x17 + extr x14,x15,x14,#63 + adcs x20,x7,x14 + ldp x17,x14,[x2,#8*3] + extr x15,x16,x15,#63 + cbnz x27,Lsqr4x_shift_n_add + ldp x1,x4,[x29,#104] // pull np and n0 + + adcs x21,x8,x15 + extr x16,x17,x16,#63 + adcs x22,x9,x16 + ldp x15,x16,[x2,#8*5] + mul x10,x11,x11 + umulh x11,x11,x11 + stp x19,x20,[x2,#8*0] + mul x12,x13,x13 + umulh x13,x13,x13 + stp x21,x22,[x2,#8*2] + extr x17,x14,x17,#63 + adcs x23,x10,x17 + extr x14,x15,x14,#63 + ldp x19,x20,[sp,#8*0] + adcs x24,x11,x14 + extr x15,x16,x15,#63 + ldp x6,x7,[x1,#8*0] + adcs x25,x12,x15 + extr x16,xzr,x16,#63 + ldp x8,x9,[x1,#8*2] + adc x26,x13,x16 + ldp x10,x11,[x1,#8*4] + + // Reduce by 512 bits per iteration + mul x28,x4,x19 // t[0]*n0 + ldp x12,x13,[x1,#8*6] + add x3,x1,x5 + ldp x21,x22,[sp,#8*2] + stp x23,x24,[x2,#8*4] + ldp x23,x24,[sp,#8*4] + stp x25,x26,[x2,#8*6] + ldp x25,x26,[sp,#8*6] + add x1,x1,#8*8 + mov x30,xzr // initial top-most carry + mov x2,sp + mov x27,#8 + +Lsqr8x_reduction: + // (*) mul x14,x6,x28 // lo(n[0-7])*lo(t[0]*n0) + mul x15,x7,x28 + sub x27,x27,#1 + mul x16,x8,x28 + str x28,[x2],#8 // put aside t[0]*n0 for tail processing + mul x17,x9,x28 + // (*) adds xzr,x19,x14 + subs xzr,x19,#1 // (*) + mul x14,x10,x28 + adcs x19,x20,x15 + mul x15,x11,x28 + adcs x20,x21,x16 + mul x16,x12,x28 + adcs x21,x22,x17 + mul x17,x13,x28 + adcs x22,x23,x14 + umulh x14,x6,x28 // hi(n[0-7])*lo(t[0]*n0) + adcs x23,x24,x15 + umulh x15,x7,x28 + adcs x24,x25,x16 + umulh x16,x8,x28 + adcs x25,x26,x17 + umulh x17,x9,x28 + adc x26,xzr,xzr + adds x19,x19,x14 + umulh x14,x10,x28 + adcs x20,x20,x15 + umulh x15,x11,x28 + adcs x21,x21,x16 + umulh x16,x12,x28 + adcs x22,x22,x17 + umulh x17,x13,x28 + mul x28,x4,x19 // next t[0]*n0 + adcs x23,x23,x14 + adcs x24,x24,x15 + adcs x25,x25,x16 + adc x26,x26,x17 + cbnz x27,Lsqr8x_reduction + + ldp x14,x15,[x2,#8*0] + ldp x16,x17,[x2,#8*2] + mov x0,x2 + sub x27,x3,x1 // done yet? + adds x19,x19,x14 + adcs x20,x20,x15 + ldp x14,x15,[x2,#8*4] + adcs x21,x21,x16 + adcs x22,x22,x17 + ldp x16,x17,[x2,#8*6] + adcs x23,x23,x14 + adcs x24,x24,x15 + adcs x25,x25,x16 + adcs x26,x26,x17 + //adc x28,xzr,xzr // moved below + cbz x27,Lsqr8x8_post_condition + + ldr x4,[x2,#-8*8] + ldp x6,x7,[x1,#8*0] + ldp x8,x9,[x1,#8*2] + ldp x10,x11,[x1,#8*4] + mov x27,#-8*8 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + +Lsqr8x_tail: + mul x14,x6,x4 + adc x28,xzr,xzr // carry bit, modulo-scheduled + mul x15,x7,x4 + add x27,x27,#8 + mul x16,x8,x4 + mul x17,x9,x4 + adds x19,x19,x14 + mul x14,x10,x4 + adcs x20,x20,x15 + mul x15,x11,x4 + adcs x21,x21,x16 + mul x16,x12,x4 + adcs x22,x22,x17 + mul x17,x13,x4 + adcs x23,x23,x14 + umulh x14,x6,x4 + adcs x24,x24,x15 + umulh x15,x7,x4 + adcs x25,x25,x16 + umulh x16,x8,x4 + adcs x26,x26,x17 + umulh x17,x9,x4 + adc x28,x28,xzr + str x19,[x2],#8 + adds x19,x20,x14 + umulh x14,x10,x4 + adcs x20,x21,x15 + umulh x15,x11,x4 + adcs x21,x22,x16 + umulh x16,x12,x4 + adcs x22,x23,x17 + umulh x17,x13,x4 + ldr x4,[x0,x27] + adcs x23,x24,x14 + adcs x24,x25,x15 + adcs x25,x26,x16 + adcs x26,x28,x17 + //adc x28,xzr,xzr // moved above + cbnz x27,Lsqr8x_tail + // note that carry flag is guaranteed + // to be zero at this point + ldp x6,x7,[x2,#8*0] + sub x27,x3,x1 // done yet? + sub x16,x3,x5 // rewinded np + ldp x8,x9,[x2,#8*2] + ldp x10,x11,[x2,#8*4] + ldp x12,x13,[x2,#8*6] + cbz x27,Lsqr8x_tail_break + + ldr x4,[x0,#-8*8] + adds x19,x19,x6 + adcs x20,x20,x7 + ldp x6,x7,[x1,#8*0] + adcs x21,x21,x8 + adcs x22,x22,x9 + ldp x8,x9,[x1,#8*2] + adcs x23,x23,x10 + adcs x24,x24,x11 + ldp x10,x11,[x1,#8*4] + adcs x25,x25,x12 + mov x27,#-8*8 + adcs x26,x26,x13 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + //adc x28,xzr,xzr // moved above + b Lsqr8x_tail + +.align 4 +Lsqr8x_tail_break: + ldr x4,[x29,#112] // pull n0 + add x27,x2,#8*8 // end of current t[num] window + + subs xzr,x30,#1 // "move" top-most carry to carry bit + adcs x14,x19,x6 + adcs x15,x20,x7 + ldp x19,x20,[x0,#8*0] + adcs x21,x21,x8 + ldp x6,x7,[x16,#8*0] // recall that x16 is &n[0] + adcs x22,x22,x9 + ldp x8,x9,[x16,#8*2] + adcs x23,x23,x10 + adcs x24,x24,x11 + ldp x10,x11,[x16,#8*4] + adcs x25,x25,x12 + adcs x26,x26,x13 + ldp x12,x13,[x16,#8*6] + add x1,x16,#8*8 + adc x30,xzr,xzr // top-most carry + mul x28,x4,x19 + stp x14,x15,[x2,#8*0] + stp x21,x22,[x2,#8*2] + ldp x21,x22,[x0,#8*2] + stp x23,x24,[x2,#8*4] + ldp x23,x24,[x0,#8*4] + cmp x27,x29 // did we hit the bottom? + stp x25,x26,[x2,#8*6] + mov x2,x0 // slide the window + ldp x25,x26,[x0,#8*6] + mov x27,#8 + b.ne Lsqr8x_reduction + + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + ldr x0,[x29,#96] // pull rp + add x2,x2,#8*8 + subs x14,x19,x6 + sbcs x15,x20,x7 + sub x27,x5,#8*8 + mov x3,x0 // x0 copy + +Lsqr8x_sub: + sbcs x16,x21,x8 + ldp x6,x7,[x1,#8*0] + sbcs x17,x22,x9 + stp x14,x15,[x0,#8*0] + sbcs x14,x23,x10 + ldp x8,x9,[x1,#8*2] + sbcs x15,x24,x11 + stp x16,x17,[x0,#8*2] + sbcs x16,x25,x12 + ldp x10,x11,[x1,#8*4] + sbcs x17,x26,x13 + ldp x12,x13,[x1,#8*6] + add x1,x1,#8*8 + ldp x19,x20,[x2,#8*0] + sub x27,x27,#8*8 + ldp x21,x22,[x2,#8*2] + ldp x23,x24,[x2,#8*4] + ldp x25,x26,[x2,#8*6] + add x2,x2,#8*8 + stp x14,x15,[x0,#8*4] + sbcs x14,x19,x6 + stp x16,x17,[x0,#8*6] + add x0,x0,#8*8 + sbcs x15,x20,x7 + cbnz x27,Lsqr8x_sub + + sbcs x16,x21,x8 + mov x2,sp + add x1,sp,x5 + ldp x6,x7,[x3,#8*0] + sbcs x17,x22,x9 + stp x14,x15,[x0,#8*0] + sbcs x14,x23,x10 + ldp x8,x9,[x3,#8*2] + sbcs x15,x24,x11 + stp x16,x17,[x0,#8*2] + sbcs x16,x25,x12 + ldp x19,x20,[x1,#8*0] + sbcs x17,x26,x13 + ldp x21,x22,[x1,#8*2] + sbcs xzr,x30,xzr // did it borrow? + ldr x30,[x29,#8] // pull return address + stp x14,x15,[x0,#8*4] + stp x16,x17,[x0,#8*6] + + sub x27,x5,#8*4 +Lsqr4x_cond_copy: + sub x27,x27,#8*4 + csel x14,x19,x6,lo + stp xzr,xzr,[x2,#8*0] + csel x15,x20,x7,lo + ldp x6,x7,[x3,#8*4] + ldp x19,x20,[x1,#8*4] + csel x16,x21,x8,lo + stp xzr,xzr,[x2,#8*2] + add x2,x2,#8*4 + csel x17,x22,x9,lo + ldp x8,x9,[x3,#8*6] + ldp x21,x22,[x1,#8*6] + add x1,x1,#8*4 + stp x14,x15,[x3,#8*0] + stp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + stp xzr,xzr,[x1,#8*0] + stp xzr,xzr,[x1,#8*2] + cbnz x27,Lsqr4x_cond_copy + + csel x14,x19,x6,lo + stp xzr,xzr,[x2,#8*0] + csel x15,x20,x7,lo + stp xzr,xzr,[x2,#8*2] + csel x16,x21,x8,lo + csel x17,x22,x9,lo + stp x14,x15,[x3,#8*0] + stp x16,x17,[x3,#8*2] + + b Lsqr8x_done + +.align 4 +Lsqr8x8_post_condition: + adc x28,xzr,xzr + ldr x30,[x29,#8] // pull return address + // x19-7,x28 hold result, x6-7 hold modulus + subs x6,x19,x6 + ldr x1,[x29,#96] // pull rp + sbcs x7,x20,x7 + stp xzr,xzr,[sp,#8*0] + sbcs x8,x21,x8 + stp xzr,xzr,[sp,#8*2] + sbcs x9,x22,x9 + stp xzr,xzr,[sp,#8*4] + sbcs x10,x23,x10 + stp xzr,xzr,[sp,#8*6] + sbcs x11,x24,x11 + stp xzr,xzr,[sp,#8*8] + sbcs x12,x25,x12 + stp xzr,xzr,[sp,#8*10] + sbcs x13,x26,x13 + stp xzr,xzr,[sp,#8*12] + sbcs x28,x28,xzr // did it borrow? + stp xzr,xzr,[sp,#8*14] + + // x6-7 hold result-modulus + csel x6,x19,x6,lo + csel x7,x20,x7,lo + csel x8,x21,x8,lo + csel x9,x22,x9,lo + stp x6,x7,[x1,#8*0] + csel x10,x23,x10,lo + csel x11,x24,x11,lo + stp x8,x9,[x1,#8*2] + csel x12,x25,x12,lo + csel x13,x26,x13,lo + stp x10,x11,[x1,#8*4] + stp x12,x13,[x1,#8*6] + +Lsqr8x_done: + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldr x29,[sp],#128 +.long 0xd50323bf // autiasp + ret + + +.align 5 +__bn_mul4x_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + + sub x26,sp,x5,lsl#3 + lsl x5,x5,#3 + ldr x4,[x4] // *n0 + sub sp,x26,#8*4 // alloca + + add x10,x2,x5 + add x27,x1,x5 + stp x0,x10,[x29,#96] // offload rp and &b[num] + + ldr x24,[x2,#8*0] // b[0] + ldp x6,x7,[x1,#8*0] // a[0..3] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + mov x19,xzr + mov x20,xzr + mov x21,xzr + mov x22,xzr + ldp x14,x15,[x3,#8*0] // n[0..3] + ldp x16,x17,[x3,#8*2] + adds x3,x3,#8*4 // clear carry bit + mov x0,xzr + mov x28,#0 + mov x26,sp + +Loop_mul4x_1st_reduction: + mul x10,x6,x24 // lo(a[0..3]*b[0]) + adc x0,x0,xzr // modulo-scheduled + mul x11,x7,x24 + add x28,x28,#8 + mul x12,x8,x24 + and x28,x28,#31 + mul x13,x9,x24 + adds x19,x19,x10 + umulh x10,x6,x24 // hi(a[0..3]*b[0]) + adcs x20,x20,x11 + mul x25,x19,x4 // t[0]*n0 + adcs x21,x21,x12 + umulh x11,x7,x24 + adcs x22,x22,x13 + umulh x12,x8,x24 + adc x23,xzr,xzr + umulh x13,x9,x24 + ldr x24,[x2,x28] // next b[i] (or b[0]) + adds x20,x20,x10 + // (*) mul x10,x14,x25 // lo(n[0..3]*t[0]*n0) + str x25,[x26],#8 // put aside t[0]*n0 for tail processing + adcs x21,x21,x11 + mul x11,x15,x25 + adcs x22,x22,x12 + mul x12,x16,x25 + adc x23,x23,x13 // can't overflow + mul x13,x17,x25 + // (*) adds xzr,x19,x10 + subs xzr,x19,#1 // (*) + umulh x10,x14,x25 // hi(n[0..3]*t[0]*n0) + adcs x19,x20,x11 + umulh x11,x15,x25 + adcs x20,x21,x12 + umulh x12,x16,x25 + adcs x21,x22,x13 + umulh x13,x17,x25 + adcs x22,x23,x0 + adc x0,xzr,xzr + adds x19,x19,x10 + sub x10,x27,x1 + adcs x20,x20,x11 + adcs x21,x21,x12 + adcs x22,x22,x13 + //adc x0,x0,xzr + cbnz x28,Loop_mul4x_1st_reduction + + cbz x10,Lmul4x4_post_condition + + ldp x6,x7,[x1,#8*0] // a[4..7] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + ldr x25,[sp] // a[0]*n0 + ldp x14,x15,[x3,#8*0] // n[4..7] + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + +Loop_mul4x_1st_tail: + mul x10,x6,x24 // lo(a[4..7]*b[i]) + adc x0,x0,xzr // modulo-scheduled + mul x11,x7,x24 + add x28,x28,#8 + mul x12,x8,x24 + and x28,x28,#31 + mul x13,x9,x24 + adds x19,x19,x10 + umulh x10,x6,x24 // hi(a[4..7]*b[i]) + adcs x20,x20,x11 + umulh x11,x7,x24 + adcs x21,x21,x12 + umulh x12,x8,x24 + adcs x22,x22,x13 + umulh x13,x9,x24 + adc x23,xzr,xzr + ldr x24,[x2,x28] // next b[i] (or b[0]) + adds x20,x20,x10 + mul x10,x14,x25 // lo(n[4..7]*a[0]*n0) + adcs x21,x21,x11 + mul x11,x15,x25 + adcs x22,x22,x12 + mul x12,x16,x25 + adc x23,x23,x13 // can't overflow + mul x13,x17,x25 + adds x19,x19,x10 + umulh x10,x14,x25 // hi(n[4..7]*a[0]*n0) + adcs x20,x20,x11 + umulh x11,x15,x25 + adcs x21,x21,x12 + umulh x12,x16,x25 + adcs x22,x22,x13 + adcs x23,x23,x0 + umulh x13,x17,x25 + adc x0,xzr,xzr + ldr x25,[sp,x28] // next t[0]*n0 + str x19,[x26],#8 // result!!! + adds x19,x20,x10 + sub x10,x27,x1 // done yet? + adcs x20,x21,x11 + adcs x21,x22,x12 + adcs x22,x23,x13 + //adc x0,x0,xzr + cbnz x28,Loop_mul4x_1st_tail + + sub x11,x27,x5 // rewinded x1 + cbz x10,Lmul4x_proceed + + ldp x6,x7,[x1,#8*0] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + ldp x14,x15,[x3,#8*0] + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + b Loop_mul4x_1st_tail + +.align 5 +Lmul4x_proceed: + ldr x24,[x2,#8*4]! // *++b + adc x30,x0,xzr + ldp x6,x7,[x11,#8*0] // a[0..3] + sub x3,x3,x5 // rewind np + ldp x8,x9,[x11,#8*2] + add x1,x11,#8*4 + + stp x19,x20,[x26,#8*0] // result!!! + ldp x19,x20,[sp,#8*4] // t[0..3] + stp x21,x22,[x26,#8*2] // result!!! + ldp x21,x22,[sp,#8*6] + + ldp x14,x15,[x3,#8*0] // n[0..3] + mov x26,sp + ldp x16,x17,[x3,#8*2] + adds x3,x3,#8*4 // clear carry bit + mov x0,xzr + +.align 4 +Loop_mul4x_reduction: + mul x10,x6,x24 // lo(a[0..3]*b[4]) + adc x0,x0,xzr // modulo-scheduled + mul x11,x7,x24 + add x28,x28,#8 + mul x12,x8,x24 + and x28,x28,#31 + mul x13,x9,x24 + adds x19,x19,x10 + umulh x10,x6,x24 // hi(a[0..3]*b[4]) + adcs x20,x20,x11 + mul x25,x19,x4 // t[0]*n0 + adcs x21,x21,x12 + umulh x11,x7,x24 + adcs x22,x22,x13 + umulh x12,x8,x24 + adc x23,xzr,xzr + umulh x13,x9,x24 + ldr x24,[x2,x28] // next b[i] + adds x20,x20,x10 + // (*) mul x10,x14,x25 + str x25,[x26],#8 // put aside t[0]*n0 for tail processing + adcs x21,x21,x11 + mul x11,x15,x25 // lo(n[0..3]*t[0]*n0 + adcs x22,x22,x12 + mul x12,x16,x25 + adc x23,x23,x13 // can't overflow + mul x13,x17,x25 + // (*) adds xzr,x19,x10 + subs xzr,x19,#1 // (*) + umulh x10,x14,x25 // hi(n[0..3]*t[0]*n0 + adcs x19,x20,x11 + umulh x11,x15,x25 + adcs x20,x21,x12 + umulh x12,x16,x25 + adcs x21,x22,x13 + umulh x13,x17,x25 + adcs x22,x23,x0 + adc x0,xzr,xzr + adds x19,x19,x10 + adcs x20,x20,x11 + adcs x21,x21,x12 + adcs x22,x22,x13 + //adc x0,x0,xzr + cbnz x28,Loop_mul4x_reduction + + adc x0,x0,xzr + ldp x10,x11,[x26,#8*4] // t[4..7] + ldp x12,x13,[x26,#8*6] + ldp x6,x7,[x1,#8*0] // a[4..7] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + adds x19,x19,x10 + adcs x20,x20,x11 + adcs x21,x21,x12 + adcs x22,x22,x13 + //adc x0,x0,xzr + + ldr x25,[sp] // t[0]*n0 + ldp x14,x15,[x3,#8*0] // n[4..7] + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + +.align 4 +Loop_mul4x_tail: + mul x10,x6,x24 // lo(a[4..7]*b[4]) + adc x0,x0,xzr // modulo-scheduled + mul x11,x7,x24 + add x28,x28,#8 + mul x12,x8,x24 + and x28,x28,#31 + mul x13,x9,x24 + adds x19,x19,x10 + umulh x10,x6,x24 // hi(a[4..7]*b[4]) + adcs x20,x20,x11 + umulh x11,x7,x24 + adcs x21,x21,x12 + umulh x12,x8,x24 + adcs x22,x22,x13 + umulh x13,x9,x24 + adc x23,xzr,xzr + ldr x24,[x2,x28] // next b[i] + adds x20,x20,x10 + mul x10,x14,x25 // lo(n[4..7]*t[0]*n0) + adcs x21,x21,x11 + mul x11,x15,x25 + adcs x22,x22,x12 + mul x12,x16,x25 + adc x23,x23,x13 // can't overflow + mul x13,x17,x25 + adds x19,x19,x10 + umulh x10,x14,x25 // hi(n[4..7]*t[0]*n0) + adcs x20,x20,x11 + umulh x11,x15,x25 + adcs x21,x21,x12 + umulh x12,x16,x25 + adcs x22,x22,x13 + umulh x13,x17,x25 + adcs x23,x23,x0 + ldr x25,[sp,x28] // next a[0]*n0 + adc x0,xzr,xzr + str x19,[x26],#8 // result!!! + adds x19,x20,x10 + sub x10,x27,x1 // done yet? + adcs x20,x21,x11 + adcs x21,x22,x12 + adcs x22,x23,x13 + //adc x0,x0,xzr + cbnz x28,Loop_mul4x_tail + + sub x11,x3,x5 // rewinded np? + adc x0,x0,xzr + cbz x10,Loop_mul4x_break + + ldp x10,x11,[x26,#8*4] + ldp x12,x13,[x26,#8*6] + ldp x6,x7,[x1,#8*0] + ldp x8,x9,[x1,#8*2] + add x1,x1,#8*4 + adds x19,x19,x10 + adcs x20,x20,x11 + adcs x21,x21,x12 + adcs x22,x22,x13 + //adc x0,x0,xzr + ldp x14,x15,[x3,#8*0] + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + b Loop_mul4x_tail + +.align 4 +Loop_mul4x_break: + ldp x12,x13,[x29,#96] // pull rp and &b[num] + adds x19,x19,x30 + add x2,x2,#8*4 // bp++ + adcs x20,x20,xzr + sub x1,x1,x5 // rewind ap + adcs x21,x21,xzr + stp x19,x20,[x26,#8*0] // result!!! + adcs x22,x22,xzr + ldp x19,x20,[sp,#8*4] // t[0..3] + adc x30,x0,xzr + stp x21,x22,[x26,#8*2] // result!!! + cmp x2,x13 // done yet? + ldp x21,x22,[sp,#8*6] + ldp x14,x15,[x11,#8*0] // n[0..3] + ldp x16,x17,[x11,#8*2] + add x3,x11,#8*4 + b.eq Lmul4x_post + + ldr x24,[x2] + ldp x6,x7,[x1,#8*0] // a[0..3] + ldp x8,x9,[x1,#8*2] + adds x1,x1,#8*4 // clear carry bit + mov x0,xzr + mov x26,sp + b Loop_mul4x_reduction + +.align 4 +Lmul4x_post: + // Final step. We see if result is larger than modulus, and + // if it is, subtract the modulus. But comparison implies + // subtraction. So we subtract modulus, see if it borrowed, + // and conditionally copy original value. + mov x0,x12 + mov x27,x12 // x0 copy + subs x10,x19,x14 + add x26,sp,#8*8 + sbcs x11,x20,x15 + sub x28,x5,#8*4 + +Lmul4x_sub: + sbcs x12,x21,x16 + ldp x14,x15,[x3,#8*0] + sub x28,x28,#8*4 + ldp x19,x20,[x26,#8*0] + sbcs x13,x22,x17 + ldp x16,x17,[x3,#8*2] + add x3,x3,#8*4 + ldp x21,x22,[x26,#8*2] + add x26,x26,#8*4 + stp x10,x11,[x0,#8*0] + sbcs x10,x19,x14 + stp x12,x13,[x0,#8*2] + add x0,x0,#8*4 + sbcs x11,x20,x15 + cbnz x28,Lmul4x_sub + + sbcs x12,x21,x16 + mov x26,sp + add x1,sp,#8*4 + ldp x6,x7,[x27,#8*0] + sbcs x13,x22,x17 + stp x10,x11,[x0,#8*0] + ldp x8,x9,[x27,#8*2] + stp x12,x13,[x0,#8*2] + ldp x19,x20,[x1,#8*0] + ldp x21,x22,[x1,#8*2] + sbcs xzr,x30,xzr // did it borrow? + ldr x30,[x29,#8] // pull return address + + sub x28,x5,#8*4 +Lmul4x_cond_copy: + sub x28,x28,#8*4 + csel x10,x19,x6,lo + stp xzr,xzr,[x26,#8*0] + csel x11,x20,x7,lo + ldp x6,x7,[x27,#8*4] + ldp x19,x20,[x1,#8*4] + csel x12,x21,x8,lo + stp xzr,xzr,[x26,#8*2] + add x26,x26,#8*4 + csel x13,x22,x9,lo + ldp x8,x9,[x27,#8*6] + ldp x21,x22,[x1,#8*6] + add x1,x1,#8*4 + stp x10,x11,[x27,#8*0] + stp x12,x13,[x27,#8*2] + add x27,x27,#8*4 + cbnz x28,Lmul4x_cond_copy + + csel x10,x19,x6,lo + stp xzr,xzr,[x26,#8*0] + csel x11,x20,x7,lo + stp xzr,xzr,[x26,#8*2] + csel x12,x21,x8,lo + stp xzr,xzr,[x26,#8*3] + csel x13,x22,x9,lo + stp xzr,xzr,[x26,#8*4] + stp x10,x11,[x27,#8*0] + stp x12,x13,[x27,#8*2] + + b Lmul4x_done + +.align 4 +Lmul4x4_post_condition: + adc x0,x0,xzr + ldr x1,[x29,#96] // pull rp + // x19-3,x0 hold result, x14-7 hold modulus + subs x6,x19,x14 + ldr x30,[x29,#8] // pull return address + sbcs x7,x20,x15 + stp xzr,xzr,[sp,#8*0] + sbcs x8,x21,x16 + stp xzr,xzr,[sp,#8*2] + sbcs x9,x22,x17 + stp xzr,xzr,[sp,#8*4] + sbcs xzr,x0,xzr // did it borrow? + stp xzr,xzr,[sp,#8*6] + + // x6-3 hold result-modulus + csel x6,x19,x6,lo + csel x7,x20,x7,lo + csel x8,x21,x8,lo + csel x9,x22,x9,lo + stp x6,x7,[x1,#8*0] + stp x8,x9,[x1,#8*2] + +Lmul4x_done: + ldp x19,x20,[x29,#16] + mov sp,x29 + ldp x21,x22,[x29,#32] + mov x0,#1 + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldr x29,[sp],#128 +.long 0xd50323bf // autiasp + ret + +.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 4 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,39 @@ +/* + * WARNING: do not edit! + * Generated by util/mkbuildinf.pl + * + * Copyright 2014-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#define PLATFORM "platform: darwin64-arm64-cc" +#define DATE "built on: Tue Mar 15 17:24:51 2022 UTC" + +/* + * Generate compiler_flags as an array of individual characters. This is a + * workaround for the situation where CFLAGS gets too long for a C90 string + * literal + */ +static const char compiler_flags[] = { + 'c','o','m','p','i','l','e','r',':',' ','.','.','/','c','o','n', + 'f','i','g','/','f','a','k','e','_','g','c','c','.','p','l',' ', + '-','f','P','I','C',' ','-','a','r','c','h',' ','a','r','m','6', + '4',' ','-','W','a',',','-','-','n','o','e','x','e','c','s','t', + 'a','c','k',' ','-','O','3',' ','-','W','a','l','l',' ','-','D', + 'L','_','E','N','D','I','A','N',' ','-','D','O','P','E','N','S', + 'S','L','_','P','I','C',' ','-','D','O','P','E','N','S','S','L', + '_','C','P','U','I','D','_','O','B','J',' ','-','D','O','P','E', + 'N','S','S','L','_','B','N','_','A','S','M','_','M','O','N','T', + ' ','-','D','S','H','A','1','_','A','S','M',' ','-','D','S','H', + 'A','2','5','6','_','A','S','M',' ','-','D','S','H','A','5','1', + '2','_','A','S','M',' ','-','D','K','E','C','C','A','K','1','6', + '0','0','_','A','S','M',' ','-','D','V','P','A','E','S','_','A', + 'S','M',' ','-','D','E','C','P','_','N','I','S','T','Z','2','5', + '6','_','A','S','M',' ','-','D','P','O','L','Y','1','3','0','5', + '_','A','S','M',' ','-','D','_','R','E','E','N','T','R','A','N', + 'T',' ','-','D','N','D','E','B','U','G','\0' +}; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/chacha/chacha-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/chacha/chacha-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/chacha/chacha-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/chacha/chacha-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1977 @@ +#include "arm_arch.h" + +.text + + +.private_extern _OPENSSL_armcap_P + +.align 5 +Lsigma: +.quad 0x3320646e61707865,0x6b20657479622d32 // endian-neutral +Lone: +.long 1,0,0,0 +LOPENSSL_armcap_P: +#ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +#else +.quad _OPENSSL_armcap_P-. +#endif +.byte 67,104,97,67,104,97,50,48,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 + +.globl _ChaCha20_ctr32 + +.align 5 +_ChaCha20_ctr32: + cbz x2,Labort + adr x5,LOPENSSL_armcap_P + cmp x2,#192 + b.lo Lshort +#ifdef __ILP32__ + ldrsw x6,[x5] +#else + ldr x6,[x5] +#endif + ldr w17,[x6,x5] + tst w17,#ARMV7_NEON + b.ne ChaCha20_neon + +Lshort: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adr x5,Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#64 + + ldp x22,x23,[x5] // load sigma + ldp x24,x25,[x3] // load key + ldp x26,x27,[x3,#16] + ldp x28,x30,[x4] // load counter +#ifdef __ARMEB__ + ror x24,x24,#32 + ror x25,x25,#32 + ror x26,x26,#32 + ror x27,x27,#32 + ror x28,x28,#32 + ror x30,x30,#32 +#endif + +Loop_outer: + mov w5,w22 // unpack key block + lsr x6,x22,#32 + mov w7,w23 + lsr x8,x23,#32 + mov w9,w24 + lsr x10,x24,#32 + mov w11,w25 + lsr x12,x25,#32 + mov w13,w26 + lsr x14,x26,#32 + mov w15,w27 + lsr x16,x27,#32 + mov w17,w28 + lsr x19,x28,#32 + mov w20,w30 + lsr x21,x30,#32 + + mov x4,#10 + subs x2,x2,#64 +Loop: + sub x4,x4,#1 + add w5,w5,w9 + add w6,w6,w10 + add w7,w7,w11 + add w8,w8,w12 + eor w17,w17,w5 + eor w19,w19,w6 + eor w20,w20,w7 + eor w21,w21,w8 + ror w17,w17,#16 + ror w19,w19,#16 + ror w20,w20,#16 + ror w21,w21,#16 + add w13,w13,w17 + add w14,w14,w19 + add w15,w15,w20 + add w16,w16,w21 + eor w9,w9,w13 + eor w10,w10,w14 + eor w11,w11,w15 + eor w12,w12,w16 + ror w9,w9,#20 + ror w10,w10,#20 + ror w11,w11,#20 + ror w12,w12,#20 + add w5,w5,w9 + add w6,w6,w10 + add w7,w7,w11 + add w8,w8,w12 + eor w17,w17,w5 + eor w19,w19,w6 + eor w20,w20,w7 + eor w21,w21,w8 + ror w17,w17,#24 + ror w19,w19,#24 + ror w20,w20,#24 + ror w21,w21,#24 + add w13,w13,w17 + add w14,w14,w19 + add w15,w15,w20 + add w16,w16,w21 + eor w9,w9,w13 + eor w10,w10,w14 + eor w11,w11,w15 + eor w12,w12,w16 + ror w9,w9,#25 + ror w10,w10,#25 + ror w11,w11,#25 + ror w12,w12,#25 + add w5,w5,w10 + add w6,w6,w11 + add w7,w7,w12 + add w8,w8,w9 + eor w21,w21,w5 + eor w17,w17,w6 + eor w19,w19,w7 + eor w20,w20,w8 + ror w21,w21,#16 + ror w17,w17,#16 + ror w19,w19,#16 + ror w20,w20,#16 + add w15,w15,w21 + add w16,w16,w17 + add w13,w13,w19 + add w14,w14,w20 + eor w10,w10,w15 + eor w11,w11,w16 + eor w12,w12,w13 + eor w9,w9,w14 + ror w10,w10,#20 + ror w11,w11,#20 + ror w12,w12,#20 + ror w9,w9,#20 + add w5,w5,w10 + add w6,w6,w11 + add w7,w7,w12 + add w8,w8,w9 + eor w21,w21,w5 + eor w17,w17,w6 + eor w19,w19,w7 + eor w20,w20,w8 + ror w21,w21,#24 + ror w17,w17,#24 + ror w19,w19,#24 + ror w20,w20,#24 + add w15,w15,w21 + add w16,w16,w17 + add w13,w13,w19 + add w14,w14,w20 + eor w10,w10,w15 + eor w11,w11,w16 + eor w12,w12,w13 + eor w9,w9,w14 + ror w10,w10,#25 + ror w11,w11,#25 + ror w12,w12,#25 + ror w9,w9,#25 + cbnz x4,Loop + + add w5,w5,w22 // accumulate key block + add x6,x6,x22,lsr#32 + add w7,w7,w23 + add x8,x8,x23,lsr#32 + add w9,w9,w24 + add x10,x10,x24,lsr#32 + add w11,w11,w25 + add x12,x12,x25,lsr#32 + add w13,w13,w26 + add x14,x14,x26,lsr#32 + add w15,w15,w27 + add x16,x16,x27,lsr#32 + add w17,w17,w28 + add x19,x19,x28,lsr#32 + add w20,w20,w30 + add x21,x21,x30,lsr#32 + + b.lo Ltail + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + ldp x6,x8,[x1,#0] // load input + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + ldp x10,x12,[x1,#16] + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + ldp x14,x16,[x1,#32] + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 + ldp x19,x21,[x1,#48] + add x1,x1,#64 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor x15,x15,x16 + eor x17,x17,x19 + eor x20,x20,x21 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#1 // increment counter + stp x9,x11,[x0,#16] + stp x13,x15,[x0,#32] + stp x17,x20,[x0,#48] + add x0,x0,#64 + + b.hi Loop_outer + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp +Labort: + ret + +.align 4 +Ltail: + add x2,x2,#64 +Less_than_64: + sub x0,x0,#1 + add x1,x1,x2 + add x0,x0,x2 + add x4,sp,x2 + neg x2,x2 + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + stp x5,x7,[sp,#0] + stp x9,x11,[sp,#16] + stp x13,x15,[sp,#32] + stp x17,x20,[sp,#48] + +Loop_tail: + ldrb w10,[x1,x2] + ldrb w11,[x4,x2] + add x2,x2,#1 + eor w10,w10,w11 + strb w10,[x0,x2] + cbnz x2,Loop_tail + + stp xzr,xzr,[sp,#0] + stp xzr,xzr,[sp,#16] + stp xzr,xzr,[sp,#32] + stp xzr,xzr,[sp,#48] + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + + + +.align 5 +ChaCha20_neon: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adr x5,Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + cmp x2,#512 + b.hs L512_or_more_neon + + sub sp,sp,#64 + + ldp x22,x23,[x5] // load sigma + ld1 {v24.4s},[x5],#16 + ldp x24,x25,[x3] // load key + ldp x26,x27,[x3,#16] + ld1 {v25.4s,v26.4s},[x3] + ldp x28,x30,[x4] // load counter + ld1 {v27.4s},[x4] + ld1 {v31.4s},[x5] +#ifdef __ARMEB__ + rev64 v24.4s,v24.4s + ror x24,x24,#32 + ror x25,x25,#32 + ror x26,x26,#32 + ror x27,x27,#32 + ror x28,x28,#32 + ror x30,x30,#32 +#endif + add v27.4s,v27.4s,v31.4s // += 1 + add v28.4s,v27.4s,v31.4s + add v29.4s,v28.4s,v31.4s + shl v31.4s,v31.4s,#2 // 1 -> 4 + +Loop_outer_neon: + mov w5,w22 // unpack key block + lsr x6,x22,#32 + mov v0.16b,v24.16b + mov w7,w23 + lsr x8,x23,#32 + mov v4.16b,v24.16b + mov w9,w24 + lsr x10,x24,#32 + mov v16.16b,v24.16b + mov w11,w25 + mov v1.16b,v25.16b + lsr x12,x25,#32 + mov v5.16b,v25.16b + mov w13,w26 + mov v17.16b,v25.16b + lsr x14,x26,#32 + mov v3.16b,v27.16b + mov w15,w27 + mov v7.16b,v28.16b + lsr x16,x27,#32 + mov v19.16b,v29.16b + mov w17,w28 + mov v2.16b,v26.16b + lsr x19,x28,#32 + mov v6.16b,v26.16b + mov w20,w30 + mov v18.16b,v26.16b + lsr x21,x30,#32 + + mov x4,#10 + subs x2,x2,#256 +Loop_neon: + sub x4,x4,#1 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v16.4s,v16.4s,v17.4s + add w7,w7,w11 + eor v3.16b,v3.16b,v0.16b + add w8,w8,w12 + eor v7.16b,v7.16b,v4.16b + eor w17,w17,w5 + eor v19.16b,v19.16b,v16.16b + eor w19,w19,w6 + rev32 v3.8h,v3.8h + eor w20,w20,w7 + rev32 v7.8h,v7.8h + eor w21,w21,w8 + rev32 v19.8h,v19.8h + ror w17,w17,#16 + add v2.4s,v2.4s,v3.4s + ror w19,w19,#16 + add v6.4s,v6.4s,v7.4s + ror w20,w20,#16 + add v18.4s,v18.4s,v19.4s + ror w21,w21,#16 + eor v20.16b,v1.16b,v2.16b + add w13,w13,w17 + eor v21.16b,v5.16b,v6.16b + add w14,w14,w19 + eor v22.16b,v17.16b,v18.16b + add w15,w15,w20 + ushr v1.4s,v20.4s,#20 + add w16,w16,w21 + ushr v5.4s,v21.4s,#20 + eor w9,w9,w13 + ushr v17.4s,v22.4s,#20 + eor w10,w10,w14 + sli v1.4s,v20.4s,#12 + eor w11,w11,w15 + sli v5.4s,v21.4s,#12 + eor w12,w12,w16 + sli v17.4s,v22.4s,#12 + ror w9,w9,#20 + add v0.4s,v0.4s,v1.4s + ror w10,w10,#20 + add v4.4s,v4.4s,v5.4s + ror w11,w11,#20 + add v16.4s,v16.4s,v17.4s + ror w12,w12,#20 + eor v20.16b,v3.16b,v0.16b + add w5,w5,w9 + eor v21.16b,v7.16b,v4.16b + add w6,w6,w10 + eor v22.16b,v19.16b,v16.16b + add w7,w7,w11 + ushr v3.4s,v20.4s,#24 + add w8,w8,w12 + ushr v7.4s,v21.4s,#24 + eor w17,w17,w5 + ushr v19.4s,v22.4s,#24 + eor w19,w19,w6 + sli v3.4s,v20.4s,#8 + eor w20,w20,w7 + sli v7.4s,v21.4s,#8 + eor w21,w21,w8 + sli v19.4s,v22.4s,#8 + ror w17,w17,#24 + add v2.4s,v2.4s,v3.4s + ror w19,w19,#24 + add v6.4s,v6.4s,v7.4s + ror w20,w20,#24 + add v18.4s,v18.4s,v19.4s + ror w21,w21,#24 + eor v20.16b,v1.16b,v2.16b + add w13,w13,w17 + eor v21.16b,v5.16b,v6.16b + add w14,w14,w19 + eor v22.16b,v17.16b,v18.16b + add w15,w15,w20 + ushr v1.4s,v20.4s,#25 + add w16,w16,w21 + ushr v5.4s,v21.4s,#25 + eor w9,w9,w13 + ushr v17.4s,v22.4s,#25 + eor w10,w10,w14 + sli v1.4s,v20.4s,#7 + eor w11,w11,w15 + sli v5.4s,v21.4s,#7 + eor w12,w12,w16 + sli v17.4s,v22.4s,#7 + ror w9,w9,#25 + ext v2.16b,v2.16b,v2.16b,#8 + ror w10,w10,#25 + ext v6.16b,v6.16b,v6.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v3.16b,v3.16b,v3.16b,#12 + ext v7.16b,v7.16b,v7.16b,#12 + ext v19.16b,v19.16b,v19.16b,#12 + ext v1.16b,v1.16b,v1.16b,#4 + ext v5.16b,v5.16b,v5.16b,#4 + ext v17.16b,v17.16b,v17.16b,#4 + add v0.4s,v0.4s,v1.4s + add w5,w5,w10 + add v4.4s,v4.4s,v5.4s + add w6,w6,w11 + add v16.4s,v16.4s,v17.4s + add w7,w7,w12 + eor v3.16b,v3.16b,v0.16b + add w8,w8,w9 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w5 + eor v19.16b,v19.16b,v16.16b + eor w17,w17,w6 + rev32 v3.8h,v3.8h + eor w19,w19,w7 + rev32 v7.8h,v7.8h + eor w20,w20,w8 + rev32 v19.8h,v19.8h + ror w21,w21,#16 + add v2.4s,v2.4s,v3.4s + ror w17,w17,#16 + add v6.4s,v6.4s,v7.4s + ror w19,w19,#16 + add v18.4s,v18.4s,v19.4s + ror w20,w20,#16 + eor v20.16b,v1.16b,v2.16b + add w15,w15,w21 + eor v21.16b,v5.16b,v6.16b + add w16,w16,w17 + eor v22.16b,v17.16b,v18.16b + add w13,w13,w19 + ushr v1.4s,v20.4s,#20 + add w14,w14,w20 + ushr v5.4s,v21.4s,#20 + eor w10,w10,w15 + ushr v17.4s,v22.4s,#20 + eor w11,w11,w16 + sli v1.4s,v20.4s,#12 + eor w12,w12,w13 + sli v5.4s,v21.4s,#12 + eor w9,w9,w14 + sli v17.4s,v22.4s,#12 + ror w10,w10,#20 + add v0.4s,v0.4s,v1.4s + ror w11,w11,#20 + add v4.4s,v4.4s,v5.4s + ror w12,w12,#20 + add v16.4s,v16.4s,v17.4s + ror w9,w9,#20 + eor v20.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v21.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v22.16b,v19.16b,v16.16b + add w7,w7,w12 + ushr v3.4s,v20.4s,#24 + add w8,w8,w9 + ushr v7.4s,v21.4s,#24 + eor w21,w21,w5 + ushr v19.4s,v22.4s,#24 + eor w17,w17,w6 + sli v3.4s,v20.4s,#8 + eor w19,w19,w7 + sli v7.4s,v21.4s,#8 + eor w20,w20,w8 + sli v19.4s,v22.4s,#8 + ror w21,w21,#24 + add v2.4s,v2.4s,v3.4s + ror w17,w17,#24 + add v6.4s,v6.4s,v7.4s + ror w19,w19,#24 + add v18.4s,v18.4s,v19.4s + ror w20,w20,#24 + eor v20.16b,v1.16b,v2.16b + add w15,w15,w21 + eor v21.16b,v5.16b,v6.16b + add w16,w16,w17 + eor v22.16b,v17.16b,v18.16b + add w13,w13,w19 + ushr v1.4s,v20.4s,#25 + add w14,w14,w20 + ushr v5.4s,v21.4s,#25 + eor w10,w10,w15 + ushr v17.4s,v22.4s,#25 + eor w11,w11,w16 + sli v1.4s,v20.4s,#7 + eor w12,w12,w13 + sli v5.4s,v21.4s,#7 + eor w9,w9,w14 + sli v17.4s,v22.4s,#7 + ror w10,w10,#25 + ext v2.16b,v2.16b,v2.16b,#8 + ror w11,w11,#25 + ext v6.16b,v6.16b,v6.16b,#8 + ror w12,w12,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#4 + ext v7.16b,v7.16b,v7.16b,#4 + ext v19.16b,v19.16b,v19.16b,#4 + ext v1.16b,v1.16b,v1.16b,#12 + ext v5.16b,v5.16b,v5.16b,#12 + ext v17.16b,v17.16b,v17.16b,#12 + cbnz x4,Loop_neon + + add w5,w5,w22 // accumulate key block + add v0.4s,v0.4s,v24.4s + add x6,x6,x22,lsr#32 + add v4.4s,v4.4s,v24.4s + add w7,w7,w23 + add v16.4s,v16.4s,v24.4s + add x8,x8,x23,lsr#32 + add v2.4s,v2.4s,v26.4s + add w9,w9,w24 + add v6.4s,v6.4s,v26.4s + add x10,x10,x24,lsr#32 + add v18.4s,v18.4s,v26.4s + add w11,w11,w25 + add v3.4s,v3.4s,v27.4s + add x12,x12,x25,lsr#32 + add w13,w13,w26 + add v7.4s,v7.4s,v28.4s + add x14,x14,x26,lsr#32 + add w15,w15,w27 + add v19.4s,v19.4s,v29.4s + add x16,x16,x27,lsr#32 + add w17,w17,w28 + add v1.4s,v1.4s,v25.4s + add x19,x19,x28,lsr#32 + add w20,w20,w30 + add v5.4s,v5.4s,v25.4s + add x21,x21,x30,lsr#32 + add v17.4s,v17.4s,v25.4s + + b.lo Ltail_neon + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + ldp x6,x8,[x1,#0] // load input + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + ldp x10,x12,[x1,#16] + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + ldp x14,x16,[x1,#32] + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 + ldp x19,x21,[x1,#48] + add x1,x1,#64 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor v0.16b,v0.16b,v20.16b + eor x15,x15,x16 + eor v1.16b,v1.16b,v21.16b + eor x17,x17,x19 + eor v2.16b,v2.16b,v22.16b + eor x20,x20,x21 + eor v3.16b,v3.16b,v23.16b + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#4 // increment counter + stp x9,x11,[x0,#16] + add v27.4s,v27.4s,v31.4s // += 4 + stp x13,x15,[x0,#32] + add v28.4s,v28.4s,v31.4s + stp x17,x20,[x0,#48] + add v29.4s,v29.4s,v31.4s + add x0,x0,#64 + + st1 {v0.16b,v1.16b,v2.16b,v3.16b},[x0],#64 + ld1 {v0.16b,v1.16b,v2.16b,v3.16b},[x1],#64 + + eor v4.16b,v4.16b,v20.16b + eor v5.16b,v5.16b,v21.16b + eor v6.16b,v6.16b,v22.16b + eor v7.16b,v7.16b,v23.16b + st1 {v4.16b,v5.16b,v6.16b,v7.16b},[x0],#64 + + eor v16.16b,v16.16b,v0.16b + eor v17.16b,v17.16b,v1.16b + eor v18.16b,v18.16b,v2.16b + eor v19.16b,v19.16b,v3.16b + st1 {v16.16b,v17.16b,v18.16b,v19.16b},[x0],#64 + + b.hi Loop_outer_neon + + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + +Ltail_neon: + add x2,x2,#256 + cmp x2,#64 + b.lo Less_than_64 + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + ldp x6,x8,[x1,#0] // load input + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + ldp x10,x12,[x1,#16] + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + ldp x14,x16,[x1,#32] + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 + ldp x19,x21,[x1,#48] + add x1,x1,#64 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor x15,x15,x16 + eor x17,x17,x19 + eor x20,x20,x21 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#4 // increment counter + stp x9,x11,[x0,#16] + stp x13,x15,[x0,#32] + stp x17,x20,[x0,#48] + add x0,x0,#64 + b.eq Ldone_neon + sub x2,x2,#64 + cmp x2,#64 + b.lo Less_than_128 + + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + eor v0.16b,v0.16b,v20.16b + eor v1.16b,v1.16b,v21.16b + eor v2.16b,v2.16b,v22.16b + eor v3.16b,v3.16b,v23.16b + st1 {v0.16b,v1.16b,v2.16b,v3.16b},[x0],#64 + b.eq Ldone_neon + sub x2,x2,#64 + cmp x2,#64 + b.lo Less_than_192 + + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + eor v4.16b,v4.16b,v20.16b + eor v5.16b,v5.16b,v21.16b + eor v6.16b,v6.16b,v22.16b + eor v7.16b,v7.16b,v23.16b + st1 {v4.16b,v5.16b,v6.16b,v7.16b},[x0],#64 + b.eq Ldone_neon + sub x2,x2,#64 + + st1 {v16.16b,v17.16b,v18.16b,v19.16b},[sp] + b Last_neon + +Less_than_128: + st1 {v0.16b,v1.16b,v2.16b,v3.16b},[sp] + b Last_neon +Less_than_192: + st1 {v4.16b,v5.16b,v6.16b,v7.16b},[sp] + b Last_neon + +.align 4 +Last_neon: + sub x0,x0,#1 + add x1,x1,x2 + add x0,x0,x2 + add x4,sp,x2 + neg x2,x2 + +Loop_tail_neon: + ldrb w10,[x1,x2] + ldrb w11,[x4,x2] + add x2,x2,#1 + eor w10,w10,w11 + strb w10,[x0,x2] + cbnz x2,Loop_tail_neon + + stp xzr,xzr,[sp,#0] + stp xzr,xzr,[sp,#16] + stp xzr,xzr,[sp,#32] + stp xzr,xzr,[sp,#48] + +Ldone_neon: + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + + +.align 5 +ChaCha20_512_neon: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + + adr x5,Lsigma + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + +L512_or_more_neon: + sub sp,sp,#128+64 + + ldp x22,x23,[x5] // load sigma + ld1 {v24.4s},[x5],#16 + ldp x24,x25,[x3] // load key + ldp x26,x27,[x3,#16] + ld1 {v25.4s,v26.4s},[x3] + ldp x28,x30,[x4] // load counter + ld1 {v27.4s},[x4] + ld1 {v31.4s},[x5] +#ifdef __ARMEB__ + rev64 v24.4s,v24.4s + ror x24,x24,#32 + ror x25,x25,#32 + ror x26,x26,#32 + ror x27,x27,#32 + ror x28,x28,#32 + ror x30,x30,#32 +#endif + add v27.4s,v27.4s,v31.4s // += 1 + stp q24,q25,[sp,#0] // off-load key block, invariant part + add v27.4s,v27.4s,v31.4s // not typo + str q26,[sp,#32] + add v28.4s,v27.4s,v31.4s + add v29.4s,v28.4s,v31.4s + add v30.4s,v29.4s,v31.4s + shl v31.4s,v31.4s,#2 // 1 -> 4 + + stp d8,d9,[sp,#128+0] // meet ABI requirements + stp d10,d11,[sp,#128+16] + stp d12,d13,[sp,#128+32] + stp d14,d15,[sp,#128+48] + + sub x2,x2,#512 // not typo + +Loop_outer_512_neon: + mov v0.16b,v24.16b + mov v4.16b,v24.16b + mov v8.16b,v24.16b + mov v12.16b,v24.16b + mov v16.16b,v24.16b + mov v20.16b,v24.16b + mov v1.16b,v25.16b + mov w5,w22 // unpack key block + mov v5.16b,v25.16b + lsr x6,x22,#32 + mov v9.16b,v25.16b + mov w7,w23 + mov v13.16b,v25.16b + lsr x8,x23,#32 + mov v17.16b,v25.16b + mov w9,w24 + mov v21.16b,v25.16b + lsr x10,x24,#32 + mov v3.16b,v27.16b + mov w11,w25 + mov v7.16b,v28.16b + lsr x12,x25,#32 + mov v11.16b,v29.16b + mov w13,w26 + mov v15.16b,v30.16b + lsr x14,x26,#32 + mov v2.16b,v26.16b + mov w15,w27 + mov v6.16b,v26.16b + lsr x16,x27,#32 + add v19.4s,v3.4s,v31.4s // +4 + mov w17,w28 + add v23.4s,v7.4s,v31.4s // +4 + lsr x19,x28,#32 + mov v10.16b,v26.16b + mov w20,w30 + mov v14.16b,v26.16b + lsr x21,x30,#32 + mov v18.16b,v26.16b + stp q27,q28,[sp,#48] // off-load key block, variable part + mov v22.16b,v26.16b + str q29,[sp,#80] + + mov x4,#5 + subs x2,x2,#512 +Loop_upper_neon: + sub x4,x4,#1 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v8.4s,v8.4s,v9.4s + add w7,w7,w11 + add v12.4s,v12.4s,v13.4s + add w8,w8,w12 + add v16.4s,v16.4s,v17.4s + eor w17,w17,w5 + add v20.4s,v20.4s,v21.4s + eor w19,w19,w6 + eor v3.16b,v3.16b,v0.16b + eor w20,w20,w7 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w8 + eor v11.16b,v11.16b,v8.16b + ror w17,w17,#16 + eor v15.16b,v15.16b,v12.16b + ror w19,w19,#16 + eor v19.16b,v19.16b,v16.16b + ror w20,w20,#16 + eor v23.16b,v23.16b,v20.16b + ror w21,w21,#16 + rev32 v3.8h,v3.8h + add w13,w13,w17 + rev32 v7.8h,v7.8h + add w14,w14,w19 + rev32 v11.8h,v11.8h + add w15,w15,w20 + rev32 v15.8h,v15.8h + add w16,w16,w21 + rev32 v19.8h,v19.8h + eor w9,w9,w13 + rev32 v23.8h,v23.8h + eor w10,w10,w14 + add v2.4s,v2.4s,v3.4s + eor w11,w11,w15 + add v6.4s,v6.4s,v7.4s + eor w12,w12,w16 + add v10.4s,v10.4s,v11.4s + ror w9,w9,#20 + add v14.4s,v14.4s,v15.4s + ror w10,w10,#20 + add v18.4s,v18.4s,v19.4s + ror w11,w11,#20 + add v22.4s,v22.4s,v23.4s + ror w12,w12,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w9 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w10 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w11 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w12 + eor v28.16b,v17.16b,v18.16b + eor w17,w17,w5 + eor v29.16b,v21.16b,v22.16b + eor w19,w19,w6 + ushr v1.4s,v24.4s,#20 + eor w20,w20,w7 + ushr v5.4s,v25.4s,#20 + eor w21,w21,w8 + ushr v9.4s,v26.4s,#20 + ror w17,w17,#24 + ushr v13.4s,v27.4s,#20 + ror w19,w19,#24 + ushr v17.4s,v28.4s,#20 + ror w20,w20,#24 + ushr v21.4s,v29.4s,#20 + ror w21,w21,#24 + sli v1.4s,v24.4s,#12 + add w13,w13,w17 + sli v5.4s,v25.4s,#12 + add w14,w14,w19 + sli v9.4s,v26.4s,#12 + add w15,w15,w20 + sli v13.4s,v27.4s,#12 + add w16,w16,w21 + sli v17.4s,v28.4s,#12 + eor w9,w9,w13 + sli v21.4s,v29.4s,#12 + eor w10,w10,w14 + add v0.4s,v0.4s,v1.4s + eor w11,w11,w15 + add v4.4s,v4.4s,v5.4s + eor w12,w12,w16 + add v8.4s,v8.4s,v9.4s + ror w9,w9,#25 + add v12.4s,v12.4s,v13.4s + ror w10,w10,#25 + add v16.4s,v16.4s,v17.4s + ror w11,w11,#25 + add v20.4s,v20.4s,v21.4s + ror w12,w12,#25 + eor v24.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v25.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v26.16b,v11.16b,v8.16b + add w7,w7,w12 + eor v27.16b,v15.16b,v12.16b + add w8,w8,w9 + eor v28.16b,v19.16b,v16.16b + eor w21,w21,w5 + eor v29.16b,v23.16b,v20.16b + eor w17,w17,w6 + ushr v3.4s,v24.4s,#24 + eor w19,w19,w7 + ushr v7.4s,v25.4s,#24 + eor w20,w20,w8 + ushr v11.4s,v26.4s,#24 + ror w21,w21,#16 + ushr v15.4s,v27.4s,#24 + ror w17,w17,#16 + ushr v19.4s,v28.4s,#24 + ror w19,w19,#16 + ushr v23.4s,v29.4s,#24 + ror w20,w20,#16 + sli v3.4s,v24.4s,#8 + add w15,w15,w21 + sli v7.4s,v25.4s,#8 + add w16,w16,w17 + sli v11.4s,v26.4s,#8 + add w13,w13,w19 + sli v15.4s,v27.4s,#8 + add w14,w14,w20 + sli v19.4s,v28.4s,#8 + eor w10,w10,w15 + sli v23.4s,v29.4s,#8 + eor w11,w11,w16 + add v2.4s,v2.4s,v3.4s + eor w12,w12,w13 + add v6.4s,v6.4s,v7.4s + eor w9,w9,w14 + add v10.4s,v10.4s,v11.4s + ror w10,w10,#20 + add v14.4s,v14.4s,v15.4s + ror w11,w11,#20 + add v18.4s,v18.4s,v19.4s + ror w12,w12,#20 + add v22.4s,v22.4s,v23.4s + ror w9,w9,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w10 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w11 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w12 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w9 + eor v28.16b,v17.16b,v18.16b + eor w21,w21,w5 + eor v29.16b,v21.16b,v22.16b + eor w17,w17,w6 + ushr v1.4s,v24.4s,#25 + eor w19,w19,w7 + ushr v5.4s,v25.4s,#25 + eor w20,w20,w8 + ushr v9.4s,v26.4s,#25 + ror w21,w21,#24 + ushr v13.4s,v27.4s,#25 + ror w17,w17,#24 + ushr v17.4s,v28.4s,#25 + ror w19,w19,#24 + ushr v21.4s,v29.4s,#25 + ror w20,w20,#24 + sli v1.4s,v24.4s,#7 + add w15,w15,w21 + sli v5.4s,v25.4s,#7 + add w16,w16,w17 + sli v9.4s,v26.4s,#7 + add w13,w13,w19 + sli v13.4s,v27.4s,#7 + add w14,w14,w20 + sli v17.4s,v28.4s,#7 + eor w10,w10,w15 + sli v21.4s,v29.4s,#7 + eor w11,w11,w16 + ext v2.16b,v2.16b,v2.16b,#8 + eor w12,w12,w13 + ext v6.16b,v6.16b,v6.16b,#8 + eor w9,w9,w14 + ext v10.16b,v10.16b,v10.16b,#8 + ror w10,w10,#25 + ext v14.16b,v14.16b,v14.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v22.16b,v22.16b,v22.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#12 + ext v7.16b,v7.16b,v7.16b,#12 + ext v11.16b,v11.16b,v11.16b,#12 + ext v15.16b,v15.16b,v15.16b,#12 + ext v19.16b,v19.16b,v19.16b,#12 + ext v23.16b,v23.16b,v23.16b,#12 + ext v1.16b,v1.16b,v1.16b,#4 + ext v5.16b,v5.16b,v5.16b,#4 + ext v9.16b,v9.16b,v9.16b,#4 + ext v13.16b,v13.16b,v13.16b,#4 + ext v17.16b,v17.16b,v17.16b,#4 + ext v21.16b,v21.16b,v21.16b,#4 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v8.4s,v8.4s,v9.4s + add w7,w7,w11 + add v12.4s,v12.4s,v13.4s + add w8,w8,w12 + add v16.4s,v16.4s,v17.4s + eor w17,w17,w5 + add v20.4s,v20.4s,v21.4s + eor w19,w19,w6 + eor v3.16b,v3.16b,v0.16b + eor w20,w20,w7 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w8 + eor v11.16b,v11.16b,v8.16b + ror w17,w17,#16 + eor v15.16b,v15.16b,v12.16b + ror w19,w19,#16 + eor v19.16b,v19.16b,v16.16b + ror w20,w20,#16 + eor v23.16b,v23.16b,v20.16b + ror w21,w21,#16 + rev32 v3.8h,v3.8h + add w13,w13,w17 + rev32 v7.8h,v7.8h + add w14,w14,w19 + rev32 v11.8h,v11.8h + add w15,w15,w20 + rev32 v15.8h,v15.8h + add w16,w16,w21 + rev32 v19.8h,v19.8h + eor w9,w9,w13 + rev32 v23.8h,v23.8h + eor w10,w10,w14 + add v2.4s,v2.4s,v3.4s + eor w11,w11,w15 + add v6.4s,v6.4s,v7.4s + eor w12,w12,w16 + add v10.4s,v10.4s,v11.4s + ror w9,w9,#20 + add v14.4s,v14.4s,v15.4s + ror w10,w10,#20 + add v18.4s,v18.4s,v19.4s + ror w11,w11,#20 + add v22.4s,v22.4s,v23.4s + ror w12,w12,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w9 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w10 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w11 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w12 + eor v28.16b,v17.16b,v18.16b + eor w17,w17,w5 + eor v29.16b,v21.16b,v22.16b + eor w19,w19,w6 + ushr v1.4s,v24.4s,#20 + eor w20,w20,w7 + ushr v5.4s,v25.4s,#20 + eor w21,w21,w8 + ushr v9.4s,v26.4s,#20 + ror w17,w17,#24 + ushr v13.4s,v27.4s,#20 + ror w19,w19,#24 + ushr v17.4s,v28.4s,#20 + ror w20,w20,#24 + ushr v21.4s,v29.4s,#20 + ror w21,w21,#24 + sli v1.4s,v24.4s,#12 + add w13,w13,w17 + sli v5.4s,v25.4s,#12 + add w14,w14,w19 + sli v9.4s,v26.4s,#12 + add w15,w15,w20 + sli v13.4s,v27.4s,#12 + add w16,w16,w21 + sli v17.4s,v28.4s,#12 + eor w9,w9,w13 + sli v21.4s,v29.4s,#12 + eor w10,w10,w14 + add v0.4s,v0.4s,v1.4s + eor w11,w11,w15 + add v4.4s,v4.4s,v5.4s + eor w12,w12,w16 + add v8.4s,v8.4s,v9.4s + ror w9,w9,#25 + add v12.4s,v12.4s,v13.4s + ror w10,w10,#25 + add v16.4s,v16.4s,v17.4s + ror w11,w11,#25 + add v20.4s,v20.4s,v21.4s + ror w12,w12,#25 + eor v24.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v25.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v26.16b,v11.16b,v8.16b + add w7,w7,w12 + eor v27.16b,v15.16b,v12.16b + add w8,w8,w9 + eor v28.16b,v19.16b,v16.16b + eor w21,w21,w5 + eor v29.16b,v23.16b,v20.16b + eor w17,w17,w6 + ushr v3.4s,v24.4s,#24 + eor w19,w19,w7 + ushr v7.4s,v25.4s,#24 + eor w20,w20,w8 + ushr v11.4s,v26.4s,#24 + ror w21,w21,#16 + ushr v15.4s,v27.4s,#24 + ror w17,w17,#16 + ushr v19.4s,v28.4s,#24 + ror w19,w19,#16 + ushr v23.4s,v29.4s,#24 + ror w20,w20,#16 + sli v3.4s,v24.4s,#8 + add w15,w15,w21 + sli v7.4s,v25.4s,#8 + add w16,w16,w17 + sli v11.4s,v26.4s,#8 + add w13,w13,w19 + sli v15.4s,v27.4s,#8 + add w14,w14,w20 + sli v19.4s,v28.4s,#8 + eor w10,w10,w15 + sli v23.4s,v29.4s,#8 + eor w11,w11,w16 + add v2.4s,v2.4s,v3.4s + eor w12,w12,w13 + add v6.4s,v6.4s,v7.4s + eor w9,w9,w14 + add v10.4s,v10.4s,v11.4s + ror w10,w10,#20 + add v14.4s,v14.4s,v15.4s + ror w11,w11,#20 + add v18.4s,v18.4s,v19.4s + ror w12,w12,#20 + add v22.4s,v22.4s,v23.4s + ror w9,w9,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w10 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w11 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w12 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w9 + eor v28.16b,v17.16b,v18.16b + eor w21,w21,w5 + eor v29.16b,v21.16b,v22.16b + eor w17,w17,w6 + ushr v1.4s,v24.4s,#25 + eor w19,w19,w7 + ushr v5.4s,v25.4s,#25 + eor w20,w20,w8 + ushr v9.4s,v26.4s,#25 + ror w21,w21,#24 + ushr v13.4s,v27.4s,#25 + ror w17,w17,#24 + ushr v17.4s,v28.4s,#25 + ror w19,w19,#24 + ushr v21.4s,v29.4s,#25 + ror w20,w20,#24 + sli v1.4s,v24.4s,#7 + add w15,w15,w21 + sli v5.4s,v25.4s,#7 + add w16,w16,w17 + sli v9.4s,v26.4s,#7 + add w13,w13,w19 + sli v13.4s,v27.4s,#7 + add w14,w14,w20 + sli v17.4s,v28.4s,#7 + eor w10,w10,w15 + sli v21.4s,v29.4s,#7 + eor w11,w11,w16 + ext v2.16b,v2.16b,v2.16b,#8 + eor w12,w12,w13 + ext v6.16b,v6.16b,v6.16b,#8 + eor w9,w9,w14 + ext v10.16b,v10.16b,v10.16b,#8 + ror w10,w10,#25 + ext v14.16b,v14.16b,v14.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v22.16b,v22.16b,v22.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#4 + ext v7.16b,v7.16b,v7.16b,#4 + ext v11.16b,v11.16b,v11.16b,#4 + ext v15.16b,v15.16b,v15.16b,#4 + ext v19.16b,v19.16b,v19.16b,#4 + ext v23.16b,v23.16b,v23.16b,#4 + ext v1.16b,v1.16b,v1.16b,#12 + ext v5.16b,v5.16b,v5.16b,#12 + ext v9.16b,v9.16b,v9.16b,#12 + ext v13.16b,v13.16b,v13.16b,#12 + ext v17.16b,v17.16b,v17.16b,#12 + ext v21.16b,v21.16b,v21.16b,#12 + cbnz x4,Loop_upper_neon + + add w5,w5,w22 // accumulate key block + add x6,x6,x22,lsr#32 + add w7,w7,w23 + add x8,x8,x23,lsr#32 + add w9,w9,w24 + add x10,x10,x24,lsr#32 + add w11,w11,w25 + add x12,x12,x25,lsr#32 + add w13,w13,w26 + add x14,x14,x26,lsr#32 + add w15,w15,w27 + add x16,x16,x27,lsr#32 + add w17,w17,w28 + add x19,x19,x28,lsr#32 + add w20,w20,w30 + add x21,x21,x30,lsr#32 + + add x5,x5,x6,lsl#32 // pack + add x7,x7,x8,lsl#32 + ldp x6,x8,[x1,#0] // load input + add x9,x9,x10,lsl#32 + add x11,x11,x12,lsl#32 + ldp x10,x12,[x1,#16] + add x13,x13,x14,lsl#32 + add x15,x15,x16,lsl#32 + ldp x14,x16,[x1,#32] + add x17,x17,x19,lsl#32 + add x20,x20,x21,lsl#32 + ldp x19,x21,[x1,#48] + add x1,x1,#64 +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor x15,x15,x16 + eor x17,x17,x19 + eor x20,x20,x21 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#1 // increment counter + mov w5,w22 // unpack key block + lsr x6,x22,#32 + stp x9,x11,[x0,#16] + mov w7,w23 + lsr x8,x23,#32 + stp x13,x15,[x0,#32] + mov w9,w24 + lsr x10,x24,#32 + stp x17,x20,[x0,#48] + add x0,x0,#64 + mov w11,w25 + lsr x12,x25,#32 + mov w13,w26 + lsr x14,x26,#32 + mov w15,w27 + lsr x16,x27,#32 + mov w17,w28 + lsr x19,x28,#32 + mov w20,w30 + lsr x21,x30,#32 + + mov x4,#5 +Loop_lower_neon: + sub x4,x4,#1 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v8.4s,v8.4s,v9.4s + add w7,w7,w11 + add v12.4s,v12.4s,v13.4s + add w8,w8,w12 + add v16.4s,v16.4s,v17.4s + eor w17,w17,w5 + add v20.4s,v20.4s,v21.4s + eor w19,w19,w6 + eor v3.16b,v3.16b,v0.16b + eor w20,w20,w7 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w8 + eor v11.16b,v11.16b,v8.16b + ror w17,w17,#16 + eor v15.16b,v15.16b,v12.16b + ror w19,w19,#16 + eor v19.16b,v19.16b,v16.16b + ror w20,w20,#16 + eor v23.16b,v23.16b,v20.16b + ror w21,w21,#16 + rev32 v3.8h,v3.8h + add w13,w13,w17 + rev32 v7.8h,v7.8h + add w14,w14,w19 + rev32 v11.8h,v11.8h + add w15,w15,w20 + rev32 v15.8h,v15.8h + add w16,w16,w21 + rev32 v19.8h,v19.8h + eor w9,w9,w13 + rev32 v23.8h,v23.8h + eor w10,w10,w14 + add v2.4s,v2.4s,v3.4s + eor w11,w11,w15 + add v6.4s,v6.4s,v7.4s + eor w12,w12,w16 + add v10.4s,v10.4s,v11.4s + ror w9,w9,#20 + add v14.4s,v14.4s,v15.4s + ror w10,w10,#20 + add v18.4s,v18.4s,v19.4s + ror w11,w11,#20 + add v22.4s,v22.4s,v23.4s + ror w12,w12,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w9 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w10 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w11 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w12 + eor v28.16b,v17.16b,v18.16b + eor w17,w17,w5 + eor v29.16b,v21.16b,v22.16b + eor w19,w19,w6 + ushr v1.4s,v24.4s,#20 + eor w20,w20,w7 + ushr v5.4s,v25.4s,#20 + eor w21,w21,w8 + ushr v9.4s,v26.4s,#20 + ror w17,w17,#24 + ushr v13.4s,v27.4s,#20 + ror w19,w19,#24 + ushr v17.4s,v28.4s,#20 + ror w20,w20,#24 + ushr v21.4s,v29.4s,#20 + ror w21,w21,#24 + sli v1.4s,v24.4s,#12 + add w13,w13,w17 + sli v5.4s,v25.4s,#12 + add w14,w14,w19 + sli v9.4s,v26.4s,#12 + add w15,w15,w20 + sli v13.4s,v27.4s,#12 + add w16,w16,w21 + sli v17.4s,v28.4s,#12 + eor w9,w9,w13 + sli v21.4s,v29.4s,#12 + eor w10,w10,w14 + add v0.4s,v0.4s,v1.4s + eor w11,w11,w15 + add v4.4s,v4.4s,v5.4s + eor w12,w12,w16 + add v8.4s,v8.4s,v9.4s + ror w9,w9,#25 + add v12.4s,v12.4s,v13.4s + ror w10,w10,#25 + add v16.4s,v16.4s,v17.4s + ror w11,w11,#25 + add v20.4s,v20.4s,v21.4s + ror w12,w12,#25 + eor v24.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v25.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v26.16b,v11.16b,v8.16b + add w7,w7,w12 + eor v27.16b,v15.16b,v12.16b + add w8,w8,w9 + eor v28.16b,v19.16b,v16.16b + eor w21,w21,w5 + eor v29.16b,v23.16b,v20.16b + eor w17,w17,w6 + ushr v3.4s,v24.4s,#24 + eor w19,w19,w7 + ushr v7.4s,v25.4s,#24 + eor w20,w20,w8 + ushr v11.4s,v26.4s,#24 + ror w21,w21,#16 + ushr v15.4s,v27.4s,#24 + ror w17,w17,#16 + ushr v19.4s,v28.4s,#24 + ror w19,w19,#16 + ushr v23.4s,v29.4s,#24 + ror w20,w20,#16 + sli v3.4s,v24.4s,#8 + add w15,w15,w21 + sli v7.4s,v25.4s,#8 + add w16,w16,w17 + sli v11.4s,v26.4s,#8 + add w13,w13,w19 + sli v15.4s,v27.4s,#8 + add w14,w14,w20 + sli v19.4s,v28.4s,#8 + eor w10,w10,w15 + sli v23.4s,v29.4s,#8 + eor w11,w11,w16 + add v2.4s,v2.4s,v3.4s + eor w12,w12,w13 + add v6.4s,v6.4s,v7.4s + eor w9,w9,w14 + add v10.4s,v10.4s,v11.4s + ror w10,w10,#20 + add v14.4s,v14.4s,v15.4s + ror w11,w11,#20 + add v18.4s,v18.4s,v19.4s + ror w12,w12,#20 + add v22.4s,v22.4s,v23.4s + ror w9,w9,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w10 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w11 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w12 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w9 + eor v28.16b,v17.16b,v18.16b + eor w21,w21,w5 + eor v29.16b,v21.16b,v22.16b + eor w17,w17,w6 + ushr v1.4s,v24.4s,#25 + eor w19,w19,w7 + ushr v5.4s,v25.4s,#25 + eor w20,w20,w8 + ushr v9.4s,v26.4s,#25 + ror w21,w21,#24 + ushr v13.4s,v27.4s,#25 + ror w17,w17,#24 + ushr v17.4s,v28.4s,#25 + ror w19,w19,#24 + ushr v21.4s,v29.4s,#25 + ror w20,w20,#24 + sli v1.4s,v24.4s,#7 + add w15,w15,w21 + sli v5.4s,v25.4s,#7 + add w16,w16,w17 + sli v9.4s,v26.4s,#7 + add w13,w13,w19 + sli v13.4s,v27.4s,#7 + add w14,w14,w20 + sli v17.4s,v28.4s,#7 + eor w10,w10,w15 + sli v21.4s,v29.4s,#7 + eor w11,w11,w16 + ext v2.16b,v2.16b,v2.16b,#8 + eor w12,w12,w13 + ext v6.16b,v6.16b,v6.16b,#8 + eor w9,w9,w14 + ext v10.16b,v10.16b,v10.16b,#8 + ror w10,w10,#25 + ext v14.16b,v14.16b,v14.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v22.16b,v22.16b,v22.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#12 + ext v7.16b,v7.16b,v7.16b,#12 + ext v11.16b,v11.16b,v11.16b,#12 + ext v15.16b,v15.16b,v15.16b,#12 + ext v19.16b,v19.16b,v19.16b,#12 + ext v23.16b,v23.16b,v23.16b,#12 + ext v1.16b,v1.16b,v1.16b,#4 + ext v5.16b,v5.16b,v5.16b,#4 + ext v9.16b,v9.16b,v9.16b,#4 + ext v13.16b,v13.16b,v13.16b,#4 + ext v17.16b,v17.16b,v17.16b,#4 + ext v21.16b,v21.16b,v21.16b,#4 + add v0.4s,v0.4s,v1.4s + add w5,w5,w9 + add v4.4s,v4.4s,v5.4s + add w6,w6,w10 + add v8.4s,v8.4s,v9.4s + add w7,w7,w11 + add v12.4s,v12.4s,v13.4s + add w8,w8,w12 + add v16.4s,v16.4s,v17.4s + eor w17,w17,w5 + add v20.4s,v20.4s,v21.4s + eor w19,w19,w6 + eor v3.16b,v3.16b,v0.16b + eor w20,w20,w7 + eor v7.16b,v7.16b,v4.16b + eor w21,w21,w8 + eor v11.16b,v11.16b,v8.16b + ror w17,w17,#16 + eor v15.16b,v15.16b,v12.16b + ror w19,w19,#16 + eor v19.16b,v19.16b,v16.16b + ror w20,w20,#16 + eor v23.16b,v23.16b,v20.16b + ror w21,w21,#16 + rev32 v3.8h,v3.8h + add w13,w13,w17 + rev32 v7.8h,v7.8h + add w14,w14,w19 + rev32 v11.8h,v11.8h + add w15,w15,w20 + rev32 v15.8h,v15.8h + add w16,w16,w21 + rev32 v19.8h,v19.8h + eor w9,w9,w13 + rev32 v23.8h,v23.8h + eor w10,w10,w14 + add v2.4s,v2.4s,v3.4s + eor w11,w11,w15 + add v6.4s,v6.4s,v7.4s + eor w12,w12,w16 + add v10.4s,v10.4s,v11.4s + ror w9,w9,#20 + add v14.4s,v14.4s,v15.4s + ror w10,w10,#20 + add v18.4s,v18.4s,v19.4s + ror w11,w11,#20 + add v22.4s,v22.4s,v23.4s + ror w12,w12,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w9 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w10 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w11 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w12 + eor v28.16b,v17.16b,v18.16b + eor w17,w17,w5 + eor v29.16b,v21.16b,v22.16b + eor w19,w19,w6 + ushr v1.4s,v24.4s,#20 + eor w20,w20,w7 + ushr v5.4s,v25.4s,#20 + eor w21,w21,w8 + ushr v9.4s,v26.4s,#20 + ror w17,w17,#24 + ushr v13.4s,v27.4s,#20 + ror w19,w19,#24 + ushr v17.4s,v28.4s,#20 + ror w20,w20,#24 + ushr v21.4s,v29.4s,#20 + ror w21,w21,#24 + sli v1.4s,v24.4s,#12 + add w13,w13,w17 + sli v5.4s,v25.4s,#12 + add w14,w14,w19 + sli v9.4s,v26.4s,#12 + add w15,w15,w20 + sli v13.4s,v27.4s,#12 + add w16,w16,w21 + sli v17.4s,v28.4s,#12 + eor w9,w9,w13 + sli v21.4s,v29.4s,#12 + eor w10,w10,w14 + add v0.4s,v0.4s,v1.4s + eor w11,w11,w15 + add v4.4s,v4.4s,v5.4s + eor w12,w12,w16 + add v8.4s,v8.4s,v9.4s + ror w9,w9,#25 + add v12.4s,v12.4s,v13.4s + ror w10,w10,#25 + add v16.4s,v16.4s,v17.4s + ror w11,w11,#25 + add v20.4s,v20.4s,v21.4s + ror w12,w12,#25 + eor v24.16b,v3.16b,v0.16b + add w5,w5,w10 + eor v25.16b,v7.16b,v4.16b + add w6,w6,w11 + eor v26.16b,v11.16b,v8.16b + add w7,w7,w12 + eor v27.16b,v15.16b,v12.16b + add w8,w8,w9 + eor v28.16b,v19.16b,v16.16b + eor w21,w21,w5 + eor v29.16b,v23.16b,v20.16b + eor w17,w17,w6 + ushr v3.4s,v24.4s,#24 + eor w19,w19,w7 + ushr v7.4s,v25.4s,#24 + eor w20,w20,w8 + ushr v11.4s,v26.4s,#24 + ror w21,w21,#16 + ushr v15.4s,v27.4s,#24 + ror w17,w17,#16 + ushr v19.4s,v28.4s,#24 + ror w19,w19,#16 + ushr v23.4s,v29.4s,#24 + ror w20,w20,#16 + sli v3.4s,v24.4s,#8 + add w15,w15,w21 + sli v7.4s,v25.4s,#8 + add w16,w16,w17 + sli v11.4s,v26.4s,#8 + add w13,w13,w19 + sli v15.4s,v27.4s,#8 + add w14,w14,w20 + sli v19.4s,v28.4s,#8 + eor w10,w10,w15 + sli v23.4s,v29.4s,#8 + eor w11,w11,w16 + add v2.4s,v2.4s,v3.4s + eor w12,w12,w13 + add v6.4s,v6.4s,v7.4s + eor w9,w9,w14 + add v10.4s,v10.4s,v11.4s + ror w10,w10,#20 + add v14.4s,v14.4s,v15.4s + ror w11,w11,#20 + add v18.4s,v18.4s,v19.4s + ror w12,w12,#20 + add v22.4s,v22.4s,v23.4s + ror w9,w9,#20 + eor v24.16b,v1.16b,v2.16b + add w5,w5,w10 + eor v25.16b,v5.16b,v6.16b + add w6,w6,w11 + eor v26.16b,v9.16b,v10.16b + add w7,w7,w12 + eor v27.16b,v13.16b,v14.16b + add w8,w8,w9 + eor v28.16b,v17.16b,v18.16b + eor w21,w21,w5 + eor v29.16b,v21.16b,v22.16b + eor w17,w17,w6 + ushr v1.4s,v24.4s,#25 + eor w19,w19,w7 + ushr v5.4s,v25.4s,#25 + eor w20,w20,w8 + ushr v9.4s,v26.4s,#25 + ror w21,w21,#24 + ushr v13.4s,v27.4s,#25 + ror w17,w17,#24 + ushr v17.4s,v28.4s,#25 + ror w19,w19,#24 + ushr v21.4s,v29.4s,#25 + ror w20,w20,#24 + sli v1.4s,v24.4s,#7 + add w15,w15,w21 + sli v5.4s,v25.4s,#7 + add w16,w16,w17 + sli v9.4s,v26.4s,#7 + add w13,w13,w19 + sli v13.4s,v27.4s,#7 + add w14,w14,w20 + sli v17.4s,v28.4s,#7 + eor w10,w10,w15 + sli v21.4s,v29.4s,#7 + eor w11,w11,w16 + ext v2.16b,v2.16b,v2.16b,#8 + eor w12,w12,w13 + ext v6.16b,v6.16b,v6.16b,#8 + eor w9,w9,w14 + ext v10.16b,v10.16b,v10.16b,#8 + ror w10,w10,#25 + ext v14.16b,v14.16b,v14.16b,#8 + ror w11,w11,#25 + ext v18.16b,v18.16b,v18.16b,#8 + ror w12,w12,#25 + ext v22.16b,v22.16b,v22.16b,#8 + ror w9,w9,#25 + ext v3.16b,v3.16b,v3.16b,#4 + ext v7.16b,v7.16b,v7.16b,#4 + ext v11.16b,v11.16b,v11.16b,#4 + ext v15.16b,v15.16b,v15.16b,#4 + ext v19.16b,v19.16b,v19.16b,#4 + ext v23.16b,v23.16b,v23.16b,#4 + ext v1.16b,v1.16b,v1.16b,#12 + ext v5.16b,v5.16b,v5.16b,#12 + ext v9.16b,v9.16b,v9.16b,#12 + ext v13.16b,v13.16b,v13.16b,#12 + ext v17.16b,v17.16b,v17.16b,#12 + ext v21.16b,v21.16b,v21.16b,#12 + cbnz x4,Loop_lower_neon + + add w5,w5,w22 // accumulate key block + ldp q24,q25,[sp,#0] + add x6,x6,x22,lsr#32 + ldp q26,q27,[sp,#32] + add w7,w7,w23 + ldp q28,q29,[sp,#64] + add x8,x8,x23,lsr#32 + add v0.4s,v0.4s,v24.4s + add w9,w9,w24 + add v4.4s,v4.4s,v24.4s + add x10,x10,x24,lsr#32 + add v8.4s,v8.4s,v24.4s + add w11,w11,w25 + add v12.4s,v12.4s,v24.4s + add x12,x12,x25,lsr#32 + add v16.4s,v16.4s,v24.4s + add w13,w13,w26 + add v20.4s,v20.4s,v24.4s + add x14,x14,x26,lsr#32 + add v2.4s,v2.4s,v26.4s + add w15,w15,w27 + add v6.4s,v6.4s,v26.4s + add x16,x16,x27,lsr#32 + add v10.4s,v10.4s,v26.4s + add w17,w17,w28 + add v14.4s,v14.4s,v26.4s + add x19,x19,x28,lsr#32 + add v18.4s,v18.4s,v26.4s + add w20,w20,w30 + add v22.4s,v22.4s,v26.4s + add x21,x21,x30,lsr#32 + add v19.4s,v19.4s,v31.4s // +4 + add x5,x5,x6,lsl#32 // pack + add v23.4s,v23.4s,v31.4s // +4 + add x7,x7,x8,lsl#32 + add v3.4s,v3.4s,v27.4s + ldp x6,x8,[x1,#0] // load input + add v7.4s,v7.4s,v28.4s + add x9,x9,x10,lsl#32 + add v11.4s,v11.4s,v29.4s + add x11,x11,x12,lsl#32 + add v15.4s,v15.4s,v30.4s + ldp x10,x12,[x1,#16] + add v19.4s,v19.4s,v27.4s + add x13,x13,x14,lsl#32 + add v23.4s,v23.4s,v28.4s + add x15,x15,x16,lsl#32 + add v1.4s,v1.4s,v25.4s + ldp x14,x16,[x1,#32] + add v5.4s,v5.4s,v25.4s + add x17,x17,x19,lsl#32 + add v9.4s,v9.4s,v25.4s + add x20,x20,x21,lsl#32 + add v13.4s,v13.4s,v25.4s + ldp x19,x21,[x1,#48] + add v17.4s,v17.4s,v25.4s + add x1,x1,#64 + add v21.4s,v21.4s,v25.4s + +#ifdef __ARMEB__ + rev x5,x5 + rev x7,x7 + rev x9,x9 + rev x11,x11 + rev x13,x13 + rev x15,x15 + rev x17,x17 + rev x20,x20 +#endif + ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x1],#64 + eor x5,x5,x6 + eor x7,x7,x8 + eor x9,x9,x10 + eor x11,x11,x12 + eor x13,x13,x14 + eor v0.16b,v0.16b,v24.16b + eor x15,x15,x16 + eor v1.16b,v1.16b,v25.16b + eor x17,x17,x19 + eor v2.16b,v2.16b,v26.16b + eor x20,x20,x21 + eor v3.16b,v3.16b,v27.16b + ld1 {v24.16b,v25.16b,v26.16b,v27.16b},[x1],#64 + + stp x5,x7,[x0,#0] // store output + add x28,x28,#7 // increment counter + stp x9,x11,[x0,#16] + stp x13,x15,[x0,#32] + stp x17,x20,[x0,#48] + add x0,x0,#64 + st1 {v0.16b,v1.16b,v2.16b,v3.16b},[x0],#64 + + ld1 {v0.16b,v1.16b,v2.16b,v3.16b},[x1],#64 + eor v4.16b,v4.16b,v24.16b + eor v5.16b,v5.16b,v25.16b + eor v6.16b,v6.16b,v26.16b + eor v7.16b,v7.16b,v27.16b + st1 {v4.16b,v5.16b,v6.16b,v7.16b},[x0],#64 + + ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 + eor v8.16b,v8.16b,v0.16b + ldp q24,q25,[sp,#0] + eor v9.16b,v9.16b,v1.16b + ldp q26,q27,[sp,#32] + eor v10.16b,v10.16b,v2.16b + eor v11.16b,v11.16b,v3.16b + st1 {v8.16b,v9.16b,v10.16b,v11.16b},[x0],#64 + + ld1 {v8.16b,v9.16b,v10.16b,v11.16b},[x1],#64 + eor v12.16b,v12.16b,v4.16b + eor v13.16b,v13.16b,v5.16b + eor v14.16b,v14.16b,v6.16b + eor v15.16b,v15.16b,v7.16b + st1 {v12.16b,v13.16b,v14.16b,v15.16b},[x0],#64 + + ld1 {v12.16b,v13.16b,v14.16b,v15.16b},[x1],#64 + eor v16.16b,v16.16b,v8.16b + eor v17.16b,v17.16b,v9.16b + eor v18.16b,v18.16b,v10.16b + eor v19.16b,v19.16b,v11.16b + st1 {v16.16b,v17.16b,v18.16b,v19.16b},[x0],#64 + + shl v0.4s,v31.4s,#1 // 4 -> 8 + eor v20.16b,v20.16b,v12.16b + eor v21.16b,v21.16b,v13.16b + eor v22.16b,v22.16b,v14.16b + eor v23.16b,v23.16b,v15.16b + st1 {v20.16b,v21.16b,v22.16b,v23.16b},[x0],#64 + + add v27.4s,v27.4s,v0.4s // += 8 + add v28.4s,v28.4s,v0.4s + add v29.4s,v29.4s,v0.4s + add v30.4s,v30.4s,v0.4s + + b.hs Loop_outer_512_neon + + adds x2,x2,#512 + ushr v0.4s,v31.4s,#2 // 4 -> 1 + + ldp d8,d9,[sp,#128+0] // meet ABI requirements + ldp d10,d11,[sp,#128+16] + ldp d12,d13,[sp,#128+32] + ldp d14,d15,[sp,#128+48] + + stp q24,q31,[sp,#0] // wipe off-load area + stp q24,q31,[sp,#32] + stp q24,q31,[sp,#64] + + b.eq Ldone_512_neon + + cmp x2,#192 + sub v27.4s,v27.4s,v0.4s // -= 1 + sub v28.4s,v28.4s,v0.4s + sub v29.4s,v29.4s,v0.4s + add sp,sp,#128 + b.hs Loop_outer_neon + + eor v25.16b,v25.16b,v25.16b + eor v26.16b,v26.16b,v26.16b + eor v27.16b,v27.16b,v27.16b + eor v28.16b,v28.16b,v28.16b + eor v29.16b,v29.16b,v29.16b + eor v30.16b,v30.16b,v30.16b + b Loop_outer + +Ldone_512_neon: + ldp x19,x20,[x29,#16] + add sp,sp,#128+64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/ec/ecp_nistz256-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/ec/ecp_nistz256-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/ec/ecp_nistz256-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/ec/ecp_nistz256-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,4242 @@ +#include "arm_arch.h" + +.text +.globl _ecp_nistz256_precomputed + +.align 12 +_ecp_nistz256_precomputed: +.byte 0x3c,0x4d,0x27,0xcc,0xf5,0x4a,0x4f,0x8f,0xe8,0xc8,0x04,0x68,0x09,0x4a,0x5b,0x80,0x9d,0x7a,0xe8,0x31,0x08,0x76,0x68,0x19,0x9f,0x08,0xb4,0x1f,0x32,0x43,0x89,0xd8,0x34,0xd3,0xf5,0xb7,0xb5,0xee,0x42,0x3e,0x91,0x01,0x06,0x7c,0xbf,0xd9,0x97,0x12,0xd3,0x1a,0xc9,0x04,0x8d,0x53,0x83,0x14,0x28,0xf0,0x8e,0x19,0xcc,0x91,0xe5,0x80 +.byte 0x14,0xd6,0xc1,0x8d,0x61,0x66,0x3b,0xa7,0x20,0x1e,0xe4,0x77,0xd7,0x66,0x05,0xfb,0x5c,0xa9,0x9a,0x7a,0xb2,0x30,0x50,0x28,0x87,0x80,0xfe,0xcd,0xe1,0xb3,0xff,0xa3,0x45,0x3c,0x7e,0x9b,0x08,0xc0,0xc1,0x9f,0x2e,0xad,0x7d,0x89,0x79,0x90,0x60,0xc6,0xac,0x17,0x64,0x59,0x4d,0xcf,0x56,0x7a,0xca,0x82,0xaa,0x6e,0x04,0x2f,0x1f,0x8b +.byte 0xa9,0xdd,0xeb,0x91,0x5c,0x77,0x17,0x99,0x4e,0xc2,0x45,0x69,0x2e,0xcf,0x60,0xc6,0x3c,0xad,0x65,0x33,0x35,0x6f,0xe4,0xd0,0x37,0x1f,0xe2,0x2c,0x66,0x98,0x55,0xe3,0x66,0xa2,0xc6,0x21,0xce,0x63,0x59,0x2e,0xd2,0x2b,0x8a,0x5a,0xcd,0xee,0xa7,0xad,0xf6,0x8c,0x3f,0x44,0x6c,0x12,0x30,0x8d,0xca,0xea,0x46,0x8a,0x4c,0x96,0xf9,0x96 +.byte 0x18,0x10,0x4e,0x46,0xc4,0x3e,0xa0,0x94,0x26,0x9d,0x62,0xd2,0x4b,0xb0,0xbc,0x0b,0xd5,0x56,0xa5,0xd2,0xc1,0x2f,0x2d,0x15,0xd8,0xed,0x97,0x17,0xcb,0x32,0x67,0xc5,0x0f,0x7c,0xde,0xa8,0x8c,0x4d,0xa0,0xb8,0x2e,0xed,0x24,0xd5,0xd5,0x49,0xca,0x77,0x1f,0x48,0x3b,0x83,0x54,0xb2,0xe7,0x7e,0x7a,0xa7,0x5c,0xed,0x7f,0xa1,0x9f,0x05 +.byte 0xd4,0xd4,0x90,0x0d,0xae,0x37,0x4e,0xd1,0x8f,0xd1,0x0a,0xa7,0x63,0x5b,0xb7,0x65,0xcb,0xc8,0xba,0x29,0xec,0x35,0x53,0xb2,0xac,0x32,0xf4,0xb7,0x6a,0xb1,0x69,0xcf,0x56,0x14,0x7f,0xd6,0xc5,0xca,0x88,0x1d,0x49,0xcf,0xfd,0x1f,0xcc,0xb1,0x13,0x30,0x42,0xd0,0x1c,0x6e,0x38,0x8e,0xf9,0x40,0xe7,0xe8,0xd6,0x28,0x1a,0x75,0x31,0xf3 +.byte 0x30,0x46,0x3f,0xb5,0x8a,0x47,0x35,0x4c,0x6e,0xdb,0x26,0x1a,0x25,0xa3,0xd8,0x0b,0x1d,0x51,0x12,0x91,0x4c,0x11,0x76,0x83,0x19,0xad,0x2a,0x3e,0xb4,0x1c,0x3c,0xfc,0x14,0x20,0x84,0x58,0x7b,0xc3,0x94,0x68,0x60,0x5c,0x3f,0x7c,0x26,0xb5,0x75,0x41,0x0b,0xc2,0xec,0xf3,0x96,0x5b,0xbb,0x41,0x32,0x00,0x4e,0x68,0xeb,0xf1,0xd9,0x96 +.byte 0xe7,0x00,0xac,0xb0,0x1b,0x39,0x46,0xf1,0xc9,0x18,0x7d,0xb7,0xc4,0x42,0xbc,0x8b,0x09,0x3e,0xa9,0x97,0x2e,0xc6,0xf8,0x38,0xa3,0xe4,0x2c,0x52,0x5d,0x24,0xf7,0xc5,0x15,0xab,0x16,0x5e,0x46,0x2c,0xd8,0xd7,0x4d,0xb3,0xf2,0xfd,0xe4,0x75,0x3c,0x34,0x95,0xb9,0x8c,0x92,0x35,0x42,0x8b,0xc4,0xc8,0x6c,0xd4,0x1e,0x67,0x35,0xd3,0x6d +.byte 0x79,0x85,0xff,0x74,0xbe,0x40,0x07,0x27,0x75,0x2c,0xea,0x04,0xcc,0xa2,0x72,0x80,0x97,0x5f,0xfe,0x8a,0x56,0x0f,0xf4,0x6d,0xa4,0x61,0x04,0x4b,0x5e,0xb4,0xe2,0xd8,0x87,0xb6,0xfd,0x3d,0x00,0x8a,0xa9,0xe4,0x62,0x5f,0x4f,0xec,0x1e,0x40,0x28,0x6b,0x21,0x0f,0x50,0x26,0x97,0xa0,0x25,0x8f,0x3e,0xf2,0x69,0xdc,0x36,0xe5,0xb8,0xdb +.byte 0x01,0x7d,0xfb,0x73,0x7d,0x3e,0xf7,0x55,0x41,0x39,0xe0,0x33,0x0d,0xe3,0x4b,0x6b,0x7b,0x3e,0x6e,0xdc,0x7d,0x9a,0x6e,0x35,0xb0,0x38,0x13,0x92,0x80,0xa1,0xe6,0xbf,0x03,0x9d,0xb7,0x7f,0x55,0xce,0x46,0x3c,0x22,0xc7,0xfa,0xfb,0x18,0xba,0x06,0xa0,0x09,0x78,0x3f,0xc0,0x79,0x5f,0xe6,0x6a,0x29,0xaf,0xd1,0xc7,0x84,0xa7,0xed,0xb9 +.byte 0xb6,0x82,0x81,0xc1,0x53,0xee,0x00,0x34,0xa8,0x81,0xdf,0x5a,0xd3,0x07,0x7e,0x2e,0x17,0x40,0xa1,0x2b,0xf4,0x2a,0x1f,0x9a,0x67,0x75,0x73,0xa8,0x58,0x65,0x17,0xdf,0xf1,0x84,0x76,0xc5,0x8d,0x48,0x93,0xe1,0x28,0xa5,0x73,0x10,0x6e,0x9e,0x39,0x03,0x69,0x52,0xdf,0xf9,0x46,0x7c,0x5b,0xf3,0x5b,0x9a,0x63,0xd9,0x4f,0xf5,0x8e,0x73 +.byte 0xed,0x33,0x7d,0x23,0xb9,0x6c,0x3c,0x9b,0xa7,0xcf,0x7f,0x34,0x6f,0x97,0xe2,0xfe,0x0a,0x8b,0xe1,0x86,0x83,0x91,0x2e,0xdd,0x6b,0xb1,0xbf,0xa6,0x92,0x4f,0x30,0x79,0x68,0x91,0x3e,0x06,0x17,0xe9,0x0b,0x25,0x07,0xa6,0x88,0x91,0x6c,0x6e,0xc8,0xd8,0xdc,0x68,0x5e,0x45,0xf2,0x55,0xef,0x56,0x38,0x29,0xd0,0x89,0x40,0x58,0x51,0x9f +.byte 0x5f,0xa4,0x08,0xc6,0x94,0x34,0xd2,0x6f,0x59,0x0f,0x6e,0xca,0x85,0x7f,0x56,0x3f,0xac,0x8f,0x25,0x0f,0x47,0xe3,0x9e,0x40,0xed,0xd8,0xae,0x30,0x0d,0xb4,0x47,0x40,0x4b,0xa3,0x23,0x1b,0x7f,0x0f,0xff,0xdf,0x6f,0x1d,0x87,0xb2,0x94,0xa0,0x36,0xbb,0x53,0x13,0x1e,0xaf,0x92,0xf8,0x07,0x95,0xc7,0xe4,0xa8,0x41,0xa9,0xed,0xf0,0x08 +.byte 0xfc,0xc1,0x4a,0xed,0x9a,0x4f,0x13,0xc5,0xed,0x8a,0x95,0xf5,0x69,0xf7,0xee,0x75,0xb6,0x4d,0xba,0x8f,0x65,0x23,0xe8,0x50,0x9e,0x7a,0xd7,0x28,0x3a,0x49,0xe7,0x4c,0x7c,0xc6,0x64,0xbd,0x8c,0x17,0x14,0x0b,0xb5,0xe3,0xb4,0xab,0x0b,0x9a,0xa9,0x29,0x84,0xaa,0xba,0x69,0xc4,0x2e,0xbf,0xca,0x57,0x0d,0xd3,0x36,0x21,0x61,0x00,0x13 +.byte 0x95,0xe3,0xf8,0xa6,0x64,0x74,0x02,0xb5,0xbf,0x86,0x07,0xde,0x67,0x48,0x23,0xe0,0x24,0x96,0x3a,0x86,0xb2,0xfa,0xa7,0x75,0xb4,0x26,0x42,0xcb,0x96,0x4e,0xf7,0x90,0xae,0xa5,0xe4,0xd0,0x45,0x31,0xe7,0x0f,0xe0,0xcb,0xbf,0x94,0x94,0x33,0x4f,0x65,0x04,0xfb,0xc0,0xc4,0x3f,0x51,0xa5,0xf3,0xea,0xc8,0xd5,0x23,0x66,0xe0,0x48,0x09 +.byte 0xba,0x6a,0x27,0x50,0xec,0xae,0xd2,0x2a,0xe6,0xf9,0xe4,0xde,0x35,0x6e,0xcc,0x82,0x76,0xfc,0x36,0x16,0xe1,0x9f,0xc7,0x0d,0xc1,0xc9,0x6a,0x23,0xbe,0xa1,0x3c,0xfd,0xce,0xa7,0x2e,0x91,0x36,0x23,0x5a,0x20,0xdf,0x55,0xc5,0x91,0x32,0x5c,0x62,0x49,0xe7,0x8b,0x0b,0x0e,0x9c,0x2e,0xee,0x1f,0xfe,0xca,0x00,0xfc,0x55,0xd7,0x9c,0x0a +.byte 0x75,0xaa,0xb0,0x46,0x90,0x55,0x2b,0x46,0xab,0x98,0x9d,0xab,0x0e,0x12,0x03,0x58,0xf1,0x4a,0x68,0x59,0x74,0xc9,0x37,0x6d,0x6f,0xe6,0xd3,0x73,0xf1,0xa3,0xdd,0xbe,0x85,0xca,0x74,0xc6,0xb6,0x51,0x6f,0x83,0x6f,0xa1,0x80,0x00,0x00,0x78,0x0a,0xa7,0xff,0xa7,0xe2,0x2e,0x5f,0x4f,0x31,0xbb,0x1b,0x99,0x21,0x33,0x59,0x6e,0x03,0x38 +.byte 0x10,0xd9,0x98,0xf2,0x0c,0xad,0x08,0x6b,0x00,0x49,0xb5,0x5e,0x11,0x60,0x70,0x49,0xff,0x79,0xac,0xba,0x30,0x3d,0x69,0x9f,0xaf,0xfb,0xd7,0xeb,0xe2,0xcd,0x0d,0x97,0xb9,0x94,0xc8,0x6e,0x06,0x3b,0x64,0x80,0x71,0x8f,0x81,0xb0,0x58,0xe0,0xc7,0xbd,0x27,0x6a,0xd4,0xb7,0xd9,0x6c,0xc1,0x44,0x38,0xe1,0x36,0xbc,0x0a,0x33,0x26,0x01 +.byte 0x25,0x90,0xbc,0x0a,0xc2,0xa3,0xbb,0xfc,0xeb,0x0b,0x1a,0x38,0x98,0x26,0x93,0xf5,0x2d,0x29,0x41,0x83,0x3b,0xba,0x40,0x46,0xf3,0xf6,0xfd,0x53,0xb9,0x7a,0x60,0x01,0x8a,0x8d,0xb4,0x57,0xd8,0xf3,0x36,0x72,0x22,0x2f,0x59,0xd3,0x7f,0x25,0xf2,0x05,0x61,0xfa,0x18,0x28,0xac,0xd5,0x14,0x00,0xaf,0x8b,0x7c,0x39,0xb5,0xa2,0xcb,0x1e +.byte 0x62,0x14,0xcb,0x10,0x76,0x17,0x23,0x2c,0xc8,0x25,0xac,0x37,0x9e,0x83,0x81,0x83,0xfe,0x2e,0x2c,0xd2,0x3f,0xf8,0x58,0x2b,0xf1,0x7f,0x4f,0xe1,0x17,0xc7,0xf7,0xad,0x57,0x67,0xc2,0x57,0x77,0x2e,0xfb,0xf2,0xce,0xa9,0x74,0x81,0x47,0xf8,0x5a,0x88,0x76,0xb1,0x43,0x75,0xc8,0xc4,0xc8,0x60,0x1e,0xd7,0xd1,0x1c,0xce,0x89,0x82,0xc6 +.byte 0x77,0x8d,0x87,0xe8,0xd0,0x5b,0x0c,0xf0,0x44,0x48,0x8d,0xee,0x55,0xc6,0xe4,0x2c,0x2c,0x41,0x75,0x5d,0x5a,0xd2,0xa3,0x1d,0x32,0x85,0x08,0xcf,0x03,0x3a,0x3c,0xfe,0x65,0x75,0xef,0xd2,0xa6,0x22,0x16,0x66,0x39,0x30,0x05,0xe3,0x57,0xab,0x71,0x6d,0x28,0xd5,0x2f,0xc6,0xa8,0x25,0x46,0x14,0xfd,0x7e,0xa2,0x67,0x7e,0x20,0x91,0xc2 +.byte 0x2b,0x03,0xdd,0xac,0xaa,0x1a,0xb5,0x2a,0x04,0xd6,0x15,0x9d,0x3f,0x54,0x24,0x7c,0x75,0xab,0x77,0xd9,0x6c,0x85,0xa2,0xf9,0x33,0xeb,0xeb,0xc0,0x27,0xcd,0x9d,0x58,0xae,0xa3,0x34,0x10,0xae,0x85,0x7d,0x4c,0x15,0x4c,0x90,0x46,0xe0,0x5b,0xec,0xa7,0xb2,0x68,0x85,0x01,0xed,0xf9,0x4a,0x85,0xe3,0xb6,0xea,0xe2,0x53,0xc0,0x32,0x83 +.byte 0x73,0x05,0x77,0xac,0xb5,0x96,0xaa,0xf0,0x9c,0x2c,0xa4,0xd2,0xd4,0xbf,0x74,0x2f,0x39,0x47,0x22,0x99,0x50,0x06,0x5f,0xcb,0x99,0xc5,0xc9,0x2e,0x70,0xd6,0x68,0x6a,0xc4,0x73,0x41,0xcb,0x8b,0xfd,0x23,0x98,0x11,0x59,0xad,0x20,0x8a,0x0d,0xaf,0xaa,0xd0,0xe2,0xeb,0x32,0x8b,0x6f,0x0e,0x43,0x12,0xe3,0x27,0x8f,0xf6,0xa4,0x76,0x0b +.byte 0xfb,0x22,0xad,0xda,0x1c,0x0a,0x3e,0x90,0xc0,0x7d,0xf3,0x09,0xbc,0x17,0x33,0xef,0xf1,0xf2,0x84,0x80,0x2a,0x0b,0x82,0xd7,0x95,0xc7,0xd2,0x08,0x4a,0xf4,0xf5,0x6d,0x09,0x06,0x8e,0xe4,0x74,0x63,0x8f,0x09,0xca,0xe2,0xd9,0x0e,0x1e,0x03,0x20,0x1b,0x4c,0xfb,0x1d,0x5a,0x2e,0x28,0xeb,0x84,0x82,0x6f,0x97,0x6f,0xcd,0x7a,0xc3,0xa7 +.byte 0x79,0x73,0x66,0x0c,0x94,0xd5,0xf4,0x8f,0x2c,0x73,0x1f,0x24,0xbc,0x17,0xee,0xd5,0xb0,0xa6,0xb8,0x04,0x6d,0x6a,0xd0,0x61,0xe3,0x1a,0x49,0x97,0x94,0xc5,0x8e,0xbc,0xac,0x5b,0x0b,0x0a,0xc5,0x74,0x06,0x89,0xee,0xc2,0xb7,0x5f,0x1b,0xa1,0x6b,0x1a,0xff,0xed,0xda,0x90,0x91,0xc1,0x0d,0x6a,0x06,0xd6,0xcb,0x02,0x71,0x17,0x95,0x7d +.byte 0xc6,0x3b,0x7e,0x6b,0xc8,0x73,0x03,0x0d,0x6b,0x8f,0x73,0x56,0x59,0x2e,0x09,0x23,0x4e,0xda,0xfc,0x4e,0xfc,0xa4,0x42,0x15,0x2e,0x10,0x6a,0x97,0x48,0x3c,0xb4,0xa4,0x0c,0x64,0x21,0xc3,0xeb,0x6c,0xac,0x27,0x4f,0x43,0x94,0x91,0x78,0xdc,0xfd,0xad,0x2b,0xa7,0x43,0x42,0xb0,0x51,0xdd,0x63,0xcc,0xcd,0xb7,0x15,0xfa,0x13,0x8d,0xc7 +.byte 0x55,0x3a,0x74,0x17,0x23,0x36,0x3e,0x23,0xe1,0x42,0x90,0xe1,0xb7,0xc7,0xda,0xb7,0x57,0xeb,0xc3,0xfb,0x62,0x58,0xbf,0x31,0x2a,0xfb,0xc7,0xdb,0x3d,0xfc,0x87,0x32,0xb1,0x3e,0xe5,0x3d,0x94,0x3d,0x86,0x32,0x61,0xfe,0x19,0xd2,0x32,0x31,0x8b,0x43,0xdb,0xab,0xa4,0xe5,0x34,0xc8,0x30,0xae,0x8c,0x02,0x53,0x99,0x35,0xb4,0x56,0x38 +.byte 0x37,0xcf,0xff,0xb0,0x05,0x21,0x12,0x65,0xc4,0xb3,0x9c,0x83,0x95,0x12,0xd3,0x03,0x7a,0x80,0x97,0x5b,0x67,0x33,0x27,0xfc,0x43,0xf2,0xf7,0xaa,0x60,0xb6,0xfc,0x55,0x44,0x30,0xa3,0x4a,0xa3,0x60,0x31,0xf7,0x01,0xfa,0xb0,0x8d,0x82,0x29,0xa7,0x03,0xb7,0x7e,0x3f,0xe5,0x66,0x26,0xb7,0x51,0xcf,0x8d,0xdd,0x6f,0x83,0x39,0xfc,0x9b +.byte 0xa5,0x3d,0xb6,0x41,0x89,0x54,0xc3,0xb2,0xf0,0x24,0x64,0xcb,0x53,0xfd,0x0a,0x91,0x6c,0x6f,0x28,0xfe,0xc1,0xe9,0x17,0x2e,0x65,0x55,0x2e,0xf2,0x48,0x52,0xb1,0x69,0xf0,0xdd,0x42,0xd5,0xdf,0x7c,0x36,0x75,0xdb,0x5b,0x3d,0xa9,0x6d,0xa4,0xeb,0x47,0x4f,0x2b,0x5c,0xd0,0x30,0xee,0xa7,0x74,0x6a,0x64,0x8a,0xbc,0x9b,0xe5,0x82,0x56 +.byte 0x76,0xe4,0x3f,0xf5,0x05,0x59,0x19,0x1e,0x80,0x47,0xf1,0x77,0xac,0x32,0x43,0x80,0x0a,0x1b,0x28,0xb6,0xf4,0xe8,0x7c,0x2f,0xeb,0xa8,0x4b,0x6a,0x59,0xb5,0xf8,0x77,0x68,0xd4,0x86,0x6c,0x87,0xdc,0xc4,0x00,0x4f,0xce,0xdb,0xf6,0x34,0xc3,0x74,0x02,0x08,0xdb,0x0d,0x34,0x8d,0xea,0x49,0x4a,0x30,0x5f,0x1b,0xcd,0xa6,0x3a,0x34,0x94 +.byte 0x5f,0x32,0x6a,0x62,0x96,0x4b,0x51,0x89,0x30,0xc9,0x90,0xdf,0x77,0x73,0x0e,0x3c,0x5c,0xbd,0x5c,0xee,0xd9,0x77,0xea,0x23,0x42,0xaa,0xa5,0x6b,0xf9,0x8c,0xc4,0x70,0x68,0xdd,0x0b,0x65,0xa3,0xc7,0xe4,0x7b,0x0a,0x89,0x85,0x25,0x7d,0x84,0x99,0x39,0xe6,0xb8,0xbe,0x7f,0x31,0x0f,0x84,0x0c,0x98,0x72,0xab,0x4c,0x44,0xb0,0xa4,0x83 +.byte 0x90,0xbb,0x93,0x73,0x07,0x07,0xba,0x63,0x5b,0x61,0x70,0xe1,0x84,0xae,0xaa,0xd6,0xa3,0x5a,0x54,0xd1,0xea,0xc7,0x2c,0x7b,0x67,0x4b,0x8a,0x7f,0x66,0x28,0x8d,0x22,0xec,0x82,0x64,0x69,0x63,0xf0,0x53,0x2d,0x10,0x9c,0x9c,0x34,0x4f,0xc6,0x96,0x40,0xdb,0xce,0x0e,0xf7,0x3a,0x8a,0xee,0x3f,0x32,0x5f,0x2b,0x0c,0x4a,0xbc,0x63,0xfb +.byte 0x18,0xf6,0x26,0x57,0xc9,0x13,0x13,0xb7,0xe0,0xcc,0x3e,0x4e,0x73,0xfa,0xe2,0x54,0xc1,0x67,0xfe,0xe2,0xec,0xfd,0xaf,0xf9,0x96,0x99,0x9f,0xe9,0xe2,0xd0,0x94,0x39,0x33,0xc9,0xca,0x35,0x27,0xad,0x58,0x46,0x98,0x64,0x17,0x5f,0xe9,0xce,0x4b,0xc8,0xab,0x0d,0xd2,0x88,0xec,0xbb,0x5c,0xba,0xc1,0x30,0x4c,0xd4,0x99,0x0d,0x07,0x95 +.byte 0x0a,0xa5,0xeb,0xa6,0x10,0x4b,0x4d,0x77,0x14,0x76,0x88,0x43,0x7f,0x6b,0x5d,0x9b,0x87,0x1d,0x6b,0x5d,0xb9,0x04,0xa9,0xc7,0x28,0x18,0x70,0xa1,0x99,0xbc,0x99,0xf5,0xf1,0x71,0xa9,0x3a,0xb6,0xe5,0x98,0x98,0x8f,0x7a,0x6c,0xda,0x1a,0x63,0x0e,0xf1,0xe8,0x10,0xa3,0x7c,0x64,0x7e,0xde,0x2a,0x59,0x1b,0x04,0xca,0x69,0x8e,0xba,0x2f +.byte 0x56,0xe1,0xa7,0xab,0x4f,0xe4,0x9d,0x49,0x33,0x9e,0x4e,0x5b,0xe1,0x58,0xc4,0x3f,0x99,0x5a,0x69,0x00,0xe5,0x5f,0x85,0xcb,0x62,0x80,0x5e,0x3d,0x88,0x0a,0x32,0x42,0xc1,0xf9,0x6a,0xa0,0xeb,0x65,0x2f,0x17,0x62,0x25,0x96,0x50,0xa2,0x6e,0xd6,0xdf,0x09,0xb7,0x1e,0x68,0xb2,0x10,0x2b,0xf3,0x9e,0xb2,0x67,0x75,0x9b,0xe3,0x76,0xfe +.byte 0x95,0xbe,0x83,0xcb,0xba,0x77,0x5b,0x2d,0x5f,0xdd,0x94,0xbb,0x0e,0x5d,0x83,0xa2,0xe7,0x48,0x4c,0x84,0x86,0x41,0x47,0x4b,0x96,0x24,0x89,0xa8,0x20,0x04,0xa5,0xef,0x8e,0xb6,0xeb,0xcd,0x3c,0x77,0xc5,0x65,0x5c,0xff,0xa6,0x0d,0x2b,0x58,0x21,0x5a,0x11,0xe2,0x24,0x64,0x1c,0xd6,0x18,0x9a,0xac,0x3f,0x42,0x0e,0xeb,0x32,0x3e,0xed +.byte 0xce,0x61,0xc9,0xe4,0xe7,0xd3,0x3f,0x53,0xa4,0x80,0x2b,0x1c,0xc0,0x99,0x63,0x52,0x93,0x5e,0xdc,0x78,0xe2,0x35,0x9e,0xb2,0xb4,0x1d,0x09,0xd1,0x5c,0x1c,0x4e,0xdb,0x3a,0x5d,0x8c,0x94,0x7d,0xfe,0x63,0xf2,0xa3,0xe9,0x61,0x73,0x78,0xc1,0xd9,0x17,0x5e,0x9a,0x73,0x58,0xc3,0xe7,0xa0,0x1f,0x2a,0x62,0x15,0xf8,0xdb,0xbb,0x38,0x80 +.byte 0x57,0xd3,0x1f,0x4c,0x4a,0x20,0x30,0xa9,0x7a,0x78,0x61,0xd9,0x90,0xb7,0x4f,0xd6,0x46,0x72,0xe7,0x41,0xb2,0xbb,0xfb,0x50,0xfe,0xe1,0xba,0x3e,0x73,0x2f,0x81,0x6d,0x2b,0x0b,0x90,0xbd,0x8a,0x3b,0x23,0x88,0xa2,0x7d,0x62,0x87,0x96,0xc9,0xcc,0x66,0x28,0x89,0xa7,0x29,0x41,0xd2,0xc5,0x5b,0xdb,0xc4,0x0c,0xbb,0x19,0x4e,0xd5,0x12 +.byte 0x53,0x48,0x5c,0xf2,0x9b,0x62,0xd0,0xa3,0x77,0x40,0x85,0x12,0x2b,0x2d,0x52,0x1b,0x31,0xbd,0xe9,0x1c,0xd4,0x87,0xa4,0xd7,0xc9,0x14,0xb7,0x39,0x66,0x8c,0xfe,0x3e,0x83,0x00,0x01,0xae,0x44,0x2d,0x7d,0xa1,0xda,0x66,0xb0,0x66,0xcb,0x62,0x55,0x9f,0x92,0x80,0x4e,0x8d,0x7f,0x70,0x95,0xc2,0xf2,0x1b,0xe9,0x35,0xf8,0x42,0x04,0x65 +.byte 0xf2,0x36,0x4c,0x96,0x30,0xd3,0x47,0x9d,0xb7,0x2b,0x76,0xac,0x75,0xb5,0xb8,0xf1,0x7d,0xa2,0x36,0xef,0x9d,0xa7,0x60,0x51,0x8d,0xcf,0x00,0x3d,0xdb,0xcc,0xe9,0xe2,0xc4,0x7b,0x3a,0xeb,0x2b,0xc3,0xd8,0x0b,0xb0,0x58,0x41,0xa0,0x47,0xab,0x07,0xf5,0x7c,0x9e,0x0b,0x7a,0x16,0x8f,0xb4,0xca,0x09,0xed,0x84,0xa1,0xfa,0xdc,0x7c,0x3c +.byte 0xdd,0x2f,0xb0,0x2d,0xeb,0x93,0x28,0xf5,0x1e,0x0c,0x1a,0x0c,0x35,0x27,0x40,0xf2,0x22,0x66,0x2d,0x82,0xf2,0x94,0x03,0xa5,0x4b,0x84,0x92,0x1d,0x98,0xd5,0xd9,0x09,0x6a,0xfd,0x65,0xe5,0xa1,0x0e,0xe2,0xd9,0xb6,0xd1,0xba,0xbf,0xc7,0x42,0x22,0x39,0x83,0xbf,0x37,0xf6,0x80,0xc2,0xea,0xdf,0xb9,0x33,0xa0,0xaf,0xd7,0xe3,0x70,0x9a +.byte 0x5c,0xf8,0x1a,0x47,0x2b,0xb5,0xdd,0x15,0xe3,0x08,0xc8,0x37,0xe3,0xc2,0x25,0x87,0x0e,0x3c,0xc5,0xae,0x61,0xa4,0x4a,0x56,0x50,0x08,0x58,0x68,0xa3,0x4a,0x28,0x08,0xef,0x92,0xd5,0x13,0x50,0x09,0x76,0x34,0x47,0xae,0xa8,0x7f,0xa5,0x2b,0x13,0xb7,0x5a,0x96,0x65,0x62,0xf2,0xaa,0xb4,0x4b,0x2a,0xad,0xea,0x2c,0x0d,0x1e,0x97,0x82 +.byte 0xe4,0x6f,0xfe,0xf4,0x88,0x14,0x7b,0xba,0x45,0xbe,0x61,0x56,0xd2,0x37,0x1b,0x65,0xb8,0x0b,0x77,0xcb,0x3c,0xfe,0x9f,0xe3,0x39,0xc5,0xfb,0x2a,0x18,0x9b,0x60,0x99,0xd5,0x6f,0x52,0xfe,0xd8,0x04,0x88,0x1c,0x9a,0x50,0xe5,0x3b,0x33,0x3f,0xca,0xc5,0x5b,0x9c,0x5f,0x35,0x13,0x65,0xa6,0x21,0x78,0x19,0xeb,0xff,0x35,0x70,0x81,0xaf +.byte 0x19,0x23,0x61,0xd6,0xeb,0xff,0xa6,0x9e,0x5d,0x3f,0x7f,0x89,0x2e,0x22,0xa4,0x0b,0x9c,0x4f,0xa9,0xff,0xbb,0x23,0x29,0xa1,0xf4,0x8a,0xb7,0x4b,0xfb,0xbf,0xeb,0x0a,0x47,0x87,0x78,0x2b,0x20,0x38,0x82,0xab,0x7e,0x2c,0xdc,0x08,0x2b,0xb4,0xae,0xd8,0x64,0x44,0x1a,0xdf,0x21,0x62,0x27,0xf2,0x61,0x63,0x37,0xad,0xd4,0x06,0x4e,0xae +.byte 0xba,0xeb,0x08,0xfa,0xe5,0xad,0x5d,0xcf,0xce,0x38,0xe5,0xca,0x74,0x83,0x42,0x4b,0xe8,0x8f,0xfb,0xff,0x83,0x4d,0x27,0x88,0x43,0x62,0xdd,0x80,0xa2,0x06,0x98,0x48,0x58,0x6f,0x54,0x16,0x6f,0xbf,0x81,0x36,0xc8,0xf3,0xea,0x4b,0xf7,0x5a,0x7b,0xb7,0xf4,0xa4,0x5e,0x22,0x52,0xe7,0x9e,0xb1,0xb6,0x7a,0xa8,0x22,0xee,0x68,0x82,0x8f +.byte 0xe4,0xcb,0xad,0x71,0xef,0x53,0xf2,0x7d,0xed,0x91,0x9e,0xf6,0x90,0x9e,0x54,0x19,0x30,0xaf,0x4a,0x17,0xc0,0x6a,0x9c,0x49,0x12,0x8b,0x6f,0xc7,0x47,0x1e,0xa2,0x64,0x28,0x1f,0x0c,0xd3,0x3e,0x59,0x66,0x8c,0x2e,0x11,0x52,0x6c,0x69,0x66,0x10,0xfb,0x27,0xe6,0x1c,0xae,0x6f,0x44,0x87,0x86,0x0d,0x3e,0xd3,0xa0,0x80,0xef,0x30,0xb9 +.byte 0xb8,0xd7,0x47,0x84,0x68,0x2b,0xf2,0x32,0x7b,0x89,0x93,0xd2,0x83,0x56,0x35,0xc3,0xbf,0x5c,0x24,0xec,0xad,0x2d,0xa4,0x49,0x63,0x89,0xc6,0xf9,0x24,0x51,0x1c,0x9b,0xd1,0xcb,0x30,0x82,0xda,0xb3,0xa7,0xe1,0x4d,0x96,0xd0,0x44,0x44,0x1d,0x4e,0xd7,0x7d,0x7a,0x51,0x2e,0x2f,0xc4,0x9f,0xdb,0x06,0x53,0xfc,0x51,0x56,0xe5,0xb9,0x6b +.byte 0x4a,0x2c,0x3e,0x62,0xc5,0x9c,0x42,0xe3,0xaf,0x3a,0x0f,0x0e,0x74,0x29,0x66,0x70,0x75,0x2a,0x06,0xd4,0x0f,0x0c,0xfd,0xea,0xcc,0x39,0xd0,0xa7,0x47,0x75,0x92,0x44,0x09,0xa2,0x3c,0x4e,0xad,0xaa,0xc4,0xc6,0xf9,0x35,0x82,0x23,0x25,0x43,0x94,0x26,0x14,0xde,0xf1,0xb9,0xb8,0xe0,0x75,0xe0,0x48,0x70,0x8a,0xc6,0x3c,0x72,0x98,0x72 +.byte 0x8b,0x15,0x58,0x17,0x73,0x29,0x67,0x21,0x56,0xc4,0x25,0x17,0x68,0xbe,0xd7,0x36,0x05,0x4b,0x58,0xa2,0x1b,0x64,0xe5,0x11,0x96,0x5a,0x3b,0xa6,0x90,0xb6,0x2d,0x7e,0x55,0xbb,0x31,0x93,0xe7,0xcc,0x2e,0x74,0xb6,0x9b,0x4d,0x04,0xc5,0x45,0x9b,0x0b,0x26,0xef,0x61,0x23,0x3d,0x7e,0xee,0x01,0x57,0xfa,0x77,0x12,0x47,0x64,0xac,0x8f +.byte 0x25,0xbe,0x8e,0x2e,0x68,0x11,0x95,0xf0,0x1a,0xd2,0x3d,0x66,0xc1,0xdb,0x97,0x9e,0xbb,0xba,0xc1,0x66,0xa4,0xb5,0x71,0x01,0xee,0xf5,0xbb,0x1e,0x9f,0x41,0xfc,0x40,0x74,0x26,0xf7,0xc6,0x2c,0x9c,0x1c,0x59,0xce,0xcf,0x18,0x17,0x81,0x5d,0xd4,0xe3,0xd8,0x46,0x62,0x9e,0x97,0xb1,0xca,0xac,0x01,0x3e,0xf8,0x96,0xa2,0xee,0xe0,0xf8 +.byte 0xf3,0x2d,0xe9,0xd2,0x1f,0x9f,0x41,0xbb,0x2f,0xe5,0x64,0x6d,0x5b,0xe7,0x47,0x0e,0x83,0x7b,0x08,0x5e,0x29,0x35,0x2f,0x75,0x31,0x44,0x4c,0xb7,0x61,0xa4,0x03,0x2e,0x15,0x94,0x7a,0xa0,0x46,0x31,0x7b,0x43,0xd9,0x14,0xa3,0x34,0x0c,0x83,0x93,0x75,0x8e,0x3a,0x1c,0xc3,0xe1,0x36,0x18,0x96,0x7a,0xfb,0x77,0xad,0xbb,0xe9,0x0d,0x4b +.byte 0x21,0x04,0x2e,0xdd,0x7a,0x63,0xc9,0x60,0xb1,0x9b,0xad,0xde,0x1f,0x65,0x8a,0x58,0x18,0x84,0x95,0xa9,0xac,0x3a,0xac,0xcb,0xb7,0xa9,0xeb,0x0c,0x7c,0x3a,0x98,0x9a,0x3f,0x56,0x23,0x51,0x58,0x59,0x4e,0xf5,0x57,0x60,0xe6,0x9d,0xf8,0xf7,0xed,0x9d,0x81,0x14,0x68,0xbe,0xaf,0x19,0xe5,0xb5,0x9b,0x5f,0xe4,0x51,0x44,0x4b,0x23,0x42 +.byte 0xdd,0x92,0x1a,0xe5,0x7e,0xef,0x77,0xbe,0x88,0x77,0x1e,0x8a,0xbd,0x2a,0x77,0xb1,0x0d,0x1b,0xe3,0x8a,0x7f,0x15,0x71,0x93,0xc9,0x5f,0x78,0x2d,0x77,0x9b,0x0c,0xad,0x76,0x3c,0x6b,0xe2,0x15,0x8e,0xe1,0x5e,0x1d,0x90,0xa5,0xd6,0xc7,0x55,0x5d,0x52,0xf7,0xcc,0x82,0x9b,0xdc,0x1d,0x80,0xa4,0xc7,0xbe,0x7c,0x4f,0xda,0x81,0x91,0x78 +.byte 0x88,0x0e,0x31,0xde,0x87,0x4c,0xdc,0x84,0x9a,0x65,0x89,0xfa,0x22,0x3e,0xde,0x3b,0x7f,0x7f,0x9b,0x3f,0x3e,0xda,0x13,0x31,0x59,0x7b,0x08,0x48,0x39,0x37,0xfd,0x1a,0x4f,0xa3,0x12,0xba,0xe5,0xd6,0xfa,0xa3,0x59,0x0b,0x3b,0x7d,0xde,0xc0,0x51,0xce,0x92,0x6b,0x3d,0x4b,0xd2,0xa4,0x68,0xc2,0x32,0x2d,0x01,0xbd,0x66,0x98,0x8f,0xa0 +.byte 0x86,0xfb,0x08,0x36,0xa9,0xd4,0x3b,0x7b,0x01,0x2d,0xaa,0x8c,0x64,0x19,0xa6,0x62,0x24,0x92,0x5e,0xc5,0x02,0x17,0x8e,0xf0,0x88,0xe9,0xd1,0x8b,0x69,0xda,0xed,0x9c,0x60,0x32,0xab,0xc0,0xbc,0x84,0x64,0x6e,0x32,0xb2,0xcd,0x24,0xf6,0xb2,0x9d,0xf5,0xf5,0x71,0xe2,0x01,0xbc,0x77,0x6a,0x5b,0x26,0x56,0xf7,0x04,0x84,0xff,0x7c,0xa4 +.byte 0xe8,0xa8,0x82,0x6c,0x40,0x24,0x93,0x3c,0x6e,0x7d,0x0d,0x22,0xd0,0xe4,0xef,0xc4,0x4e,0x26,0x66,0x61,0x75,0xe9,0x06,0x69,0x06,0xfd,0x97,0x68,0x96,0x67,0xec,0x96,0x09,0x73,0xe4,0x0a,0x3e,0xaa,0xb8,0x25,0x77,0x00,0x91,0x7a,0x2e,0xc8,0x81,0x75,0x78,0xb7,0xa5,0x27,0x55,0xf2,0xcf,0x9a,0xab,0xab,0x51,0x0a,0x65,0x47,0xbf,0x10 +.byte 0xd2,0x19,0x78,0x6b,0x35,0xf4,0xef,0x12,0x2b,0x5f,0x0c,0x28,0x7c,0xe8,0x64,0x55,0x2f,0x26,0x85,0x91,0x7a,0x9d,0x48,0x76,0x12,0x14,0x2d,0x4a,0x8a,0xd6,0xfa,0x7b,0xf9,0xc7,0x24,0x45,0xf6,0xbd,0x47,0xab,0xc6,0x4b,0x9e,0x39,0x77,0x57,0x04,0xa8,0x4d,0x43,0x99,0x5c,0xb1,0x3d,0xc2,0x4e,0xc5,0x17,0x66,0xc4,0xb6,0xdd,0x92,0x80 +.byte 0x85,0x3b,0x07,0x63,0x16,0x5f,0x67,0x76,0x9b,0xb5,0x8e,0xca,0x97,0xbb,0xf4,0x20,0xd0,0x4d,0x7b,0xd0,0xa3,0x74,0x6f,0x8a,0x68,0xc7,0x31,0x78,0x1b,0x72,0x45,0xa4,0xc4,0xf8,0xf8,0x26,0xa8,0x4d,0x08,0x2f,0x7b,0x3d,0xa0,0x2a,0xb5,0x65,0x27,0xc2,0x36,0x13,0x2d,0x8d,0x83,0xeb,0xf4,0x08,0x26,0x41,0x8b,0x32,0xf3,0x09,0x70,0x70 +.byte 0x5d,0x8a,0xcc,0xb8,0xe9,0xf7,0x08,0xdf,0x5f,0x4a,0xb8,0x8a,0xb7,0x1b,0xad,0xe2,0xc3,0x39,0x59,0xe0,0x7f,0xd0,0x66,0x7b,0x99,0x5a,0xde,0x52,0xe2,0x1f,0x47,0xc2,0x63,0x74,0x7a,0xa5,0x88,0xc3,0x24,0x70,0x4a,0x7d,0xdd,0xa4,0xe6,0xf8,0xfd,0x5c,0xfa,0x8c,0x4c,0x0f,0x52,0x95,0xf3,0x2c,0x76,0x47,0x7a,0xe8,0xdb,0xe0,0x9b,0x49 +.byte 0x88,0x5b,0x87,0x5a,0xd1,0x07,0x24,0x06,0x83,0x3b,0x25,0x23,0xe7,0xaa,0x79,0xef,0x74,0x02,0x12,0xfe,0x47,0x5c,0x77,0x73,0xf7,0x2e,0x4b,0x58,0x3b,0x60,0x7b,0x91,0x2f,0x0d,0xb4,0x6d,0x00,0x80,0x19,0xaa,0x88,0xbc,0xb2,0x7b,0xd9,0xb7,0xdd,0x32,0x47,0x62,0xf5,0x0f,0x46,0x95,0x4c,0x6c,0x01,0x67,0xfb,0xe4,0x2b,0xac,0x95,0x84 +.byte 0x25,0x0a,0xe5,0x4c,0x2d,0x4a,0x6e,0x77,0xfd,0xeb,0xe1,0x53,0xc9,0x2e,0x70,0x01,0x32,0x05,0x6d,0xc5,0xc9,0x5d,0x90,0xca,0x56,0xd1,0xd8,0x40,0x2a,0x51,0x4d,0x95,0xc3,0x57,0x8b,0xdd,0x62,0x9c,0x69,0xd1,0x03,0x89,0x95,0x38,0x2c,0xc1,0x6d,0x41,0xf2,0xc3,0xa2,0x9c,0x43,0xea,0xf1,0x02,0x00,0x56,0x46,0xbb,0x87,0x35,0x40,0x0e +.byte 0x18,0x51,0x29,0x39,0xbb,0x6d,0x15,0xf2,0xcd,0x54,0x23,0x95,0x69,0xdc,0x0a,0xb2,0x26,0xd9,0x25,0xe1,0xf1,0x07,0x7b,0x5e,0xc3,0x30,0x68,0x5f,0x2a,0xce,0x91,0x92,0x03,0x0c,0x62,0x11,0x43,0x80,0xe5,0x12,0xec,0xe3,0x4f,0x90,0xfe,0x38,0x6e,0xe9,0x7e,0x94,0x83,0x26,0x59,0x3f,0x3f,0x81,0xc6,0x94,0x98,0x09,0x80,0xff,0x01,0x44 +.byte 0xff,0x77,0x6a,0x4c,0x76,0x91,0xd9,0x12,0x59,0x9a,0x00,0x7c,0x87,0x06,0x17,0xf7,0x12,0xc7,0xee,0x04,0xd5,0x8d,0x68,0xc5,0x8d,0x80,0x10,0xcc,0x14,0x45,0xe8,0xd7,0x43,0x10,0x01,0x9e,0x61,0xc2,0xc0,0x66,0xfe,0xcf,0x5f,0x9f,0xcb,0xa3,0xf8,0xc7,0x07,0x41,0xe3,0xf2,0xda,0x6e,0x01,0x76,0xc6,0x49,0x49,0x01,0xc7,0xcf,0x6a,0x20 +.byte 0x71,0xc5,0xf0,0xb1,0xa0,0xc9,0xed,0xec,0x66,0x71,0x93,0xf5,0xc0,0x27,0x42,0xed,0xd5,0x6f,0x20,0xe1,0x86,0x3e,0xd0,0x5d,0x94,0x17,0x43,0xb4,0x98,0x0d,0x8a,0x31,0x6c,0x59,0xa9,0x0b,0xb3,0xa4,0x0b,0x46,0x0b,0xa8,0x79,0x62,0x3a,0x3d,0xbf,0xef,0x94,0xd3,0x31,0xf2,0xa1,0x55,0xe8,0x92,0x44,0x37,0x62,0x82,0x1b,0x60,0x87,0x67 +.byte 0x85,0x78,0xd5,0x84,0x73,0xa4,0xea,0x56,0x08,0x78,0x68,0x7f,0xfb,0x15,0x20,0x64,0xeb,0x6c,0xf7,0x5e,0xc0,0x79,0x83,0x59,0x7b,0xed,0x2d,0xa9,0x37,0x46,0xf3,0x62,0xb1,0xa1,0x2b,0x48,0x58,0xd9,0x0c,0x03,0xf7,0xf3,0x47,0xeb,0xd7,0x03,0x9b,0x85,0xd3,0xd7,0xd7,0x7e,0xfb,0x1a,0x25,0x83,0xda,0x06,0xa0,0x04,0x0d,0x6b,0x90,0x29 +.byte 0x2a,0xfc,0xcd,0x96,0xe9,0x17,0x4f,0xdd,0x2c,0x90,0xdf,0xf1,0xe3,0x08,0x0a,0xb8,0x0c,0x59,0x2a,0x83,0x62,0x94,0x00,0xd3,0x80,0x1a,0x31,0xd7,0x17,0x70,0xc7,0xa2,0x20,0x17,0x65,0x88,0xae,0x11,0x25,0xc9,0xba,0x76,0xa7,0x61,0x60,0xd1,0x59,0x50,0x22,0xdd,0xaa,0xcf,0x9d,0xc1,0x36,0x7d,0xf9,0x7b,0x69,0xc0,0x98,0xba,0x40,0xd5 +.byte 0xd6,0x46,0x93,0x92,0x7d,0x37,0x3f,0x3a,0x04,0x9a,0x84,0xaf,0x8e,0x61,0x04,0x26,0x54,0x33,0x84,0xc0,0xac,0x21,0x51,0xd7,0x9a,0x93,0x6e,0xf2,0x09,0x87,0xc5,0x35,0xa8,0x96,0xb0,0x64,0x90,0x35,0x52,0xed,0x0e,0xbc,0xdb,0xa6,0x06,0x3e,0xe7,0xea,0x57,0x4b,0xd7,0xc5,0x1c,0x76,0x3d,0x0d,0xc3,0x1f,0x8e,0x4f,0x12,0xdb,0x3a,0x21 +.byte 0x2a,0x69,0xc2,0x94,0xda,0x4c,0x91,0xcc,0xa8,0x36,0x89,0xd7,0x78,0xa8,0x74,0x79,0x63,0x92,0xeb,0x39,0x3b,0x84,0x8c,0xe5,0xc6,0x26,0xf0,0xef,0xcc,0xc1,0x72,0x4b,0x8e,0xcd,0xe4,0xd9,0x00,0x80,0xbc,0xdf,0xe2,0x61,0x53,0x04,0x81,0xb0,0x13,0xc5,0x6c,0x77,0x74,0xa3,0x0c,0x5b,0xef,0xef,0xea,0xc7,0x5b,0xeb,0xbf,0xee,0x54,0xd7 +.byte 0x7a,0x69,0x6e,0x39,0xc2,0xed,0x08,0x44,0x82,0x08,0x16,0x8b,0xf1,0x74,0x5f,0xeb,0x60,0xd5,0x46,0x63,0x80,0x39,0xe9,0x91,0x0a,0x17,0x8b,0xd4,0x09,0xdc,0xa6,0xab,0x6a,0xbc,0xf8,0xe9,0x09,0x19,0xc1,0x83,0x9f,0xdf,0xad,0x6c,0x31,0x94,0xb9,0xc5,0x77,0x83,0xd1,0xd8,0x76,0xeb,0x12,0x3c,0x00,0x31,0xea,0xac,0x97,0x39,0x16,0xd5 +.byte 0x81,0xfa,0x6d,0x10,0x5b,0x3e,0x20,0xe1,0x88,0x5c,0x4b,0xf3,0x04,0xd4,0xc3,0xb9,0xec,0xe5,0xb0,0x13,0xf5,0x09,0x5c,0xe8,0x27,0xe2,0xde,0x9b,0xac,0x2e,0xf2,0xe5,0x2c,0x33,0x4b,0x4f,0xec,0xc7,0x08,0xf9,0xc2,0xd3,0x1b,0x4d,0x81,0x69,0x14,0xa1,0xc5,0x0f,0xb2,0x57,0x8b,0xcc,0xca,0x3b,0xc9,0x9c,0x1f,0xee,0x06,0x4d,0xc7,0x62 +.byte 0xcb,0x8f,0x49,0x81,0xfb,0xa5,0x68,0x81,0x36,0x38,0x33,0x6b,0x9e,0x58,0xd4,0x24,0x67,0xf1,0x30,0xd6,0x08,0x61,0x5a,0x7f,0x2e,0x4e,0xf1,0xd6,0x64,0x75,0x72,0xb0,0xdf,0xcd,0xae,0x04,0x41,0xbd,0x04,0x2c,0x96,0x36,0x34,0x32,0xec,0xbd,0xd0,0xbf,0x8e,0xe8,0x47,0xe3,0x22,0xdd,0x79,0x53,0xcc,0x6a,0x25,0xf1,0x5e,0x63,0x09,0x98 +.byte 0xc5,0x6d,0x0a,0xe3,0x30,0xd6,0x52,0x70,0x21,0xb2,0xef,0x15,0x66,0x4a,0x2d,0x2b,0x5c,0xcb,0x39,0x1b,0x91,0x10,0xa6,0x02,0x22,0xd0,0xcc,0x32,0x50,0x5c,0x70,0x72,0xd1,0x03,0xb3,0x2d,0x2e,0x33,0xed,0xae,0x7a,0x07,0x3f,0x70,0x38,0x35,0xfc,0xcf,0xdb,0xfe,0x7b,0x26,0xd9,0x38,0x1e,0x52,0x07,0x2f,0x72,0x81,0xcc,0xd3,0x21,0x00 +.byte 0x63,0x48,0x38,0x44,0xb8,0x35,0xf2,0x4f,0xe5,0x33,0x8c,0xb3,0x07,0x0c,0xac,0x3d,0x73,0xe8,0xe3,0xb3,0x43,0xc5,0xb4,0x32,0xf4,0x41,0xdf,0x7b,0x06,0x3a,0xb8,0x67,0x17,0xc5,0xec,0x46,0x30,0xc0,0xa4,0x29,0x40,0xe4,0x8a,0xa3,0x14,0x84,0xa6,0x84,0xc7,0x5d,0x4b,0x57,0x37,0x9c,0x42,0xe6,0xa4,0x20,0xf7,0x5d,0xef,0x21,0xe2,0x80 +.byte 0x54,0x6d,0xf5,0xb5,0xbe,0xa3,0x95,0xcf,0x98,0xf8,0x38,0x46,0xa2,0x90,0x57,0x09,0x8f,0xb0,0x6d,0x01,0x5f,0x95,0x5a,0x78,0xf6,0xfd,0x01,0x0f,0xfd,0xa5,0xe2,0xcf,0x54,0xa3,0x2b,0xc1,0x30,0xbe,0x6d,0x1a,0xd3,0xdb,0x5a,0x17,0x43,0x46,0x93,0x81,0x0c,0x85,0x04,0x13,0xda,0xb4,0xde,0x81,0x48,0x5c,0xbc,0x42,0x9e,0x6d,0x6c,0x82 +.byte 0xff,0xa5,0x51,0xb1,0xd3,0xd2,0x3d,0x82,0x82,0xb4,0x96,0xb1,0x38,0x5d,0xc9,0x55,0xcb,0x9f,0xe5,0x47,0xd4,0x52,0x0f,0x76,0x54,0xec,0x39,0xb6,0x40,0xc3,0xc5,0xaa,0xc2,0x30,0x02,0xa0,0x68,0xc3,0x22,0x63,0x5a,0x8c,0x62,0x6d,0x40,0xc5,0xde,0x06,0x29,0x44,0x5d,0x2b,0x18,0x0a,0xa5,0x43,0x47,0xfe,0x5f,0x0f,0x63,0xa4,0x3c,0xa1 +.byte 0x62,0xcb,0x70,0x1d,0xf8,0x0e,0xc9,0xbe,0x27,0x0e,0x87,0x81,0x69,0x4c,0xea,0xbe,0xf9,0x9b,0xda,0xb6,0x9b,0xd0,0xdd,0xa0,0x1e,0x60,0x38,0x88,0x85,0x25,0x53,0xee,0x2c,0x77,0x53,0x82,0xb0,0x88,0x19,0x87,0x2a,0x77,0x7b,0x37,0x4b,0x4c,0xf4,0x96,0x5f,0x73,0xa1,0xbb,0x5c,0xfc,0x7e,0xbb,0xed,0x6f,0xb7,0x6f,0x9d,0x55,0xde,0xd3 +.byte 0xac,0xb9,0x8e,0x36,0x0f,0x3d,0xea,0x87,0xcd,0x19,0x33,0x1d,0xa8,0xee,0xfc,0xcd,0xe5,0x53,0x7b,0xdf,0x37,0x49,0x2d,0x73,0xf5,0x36,0xdd,0x42,0xc6,0x88,0x0d,0xf5,0xf2,0xba,0x2e,0x81,0xed,0x88,0x27,0x8d,0xe5,0x3f,0x83,0x5e,0xde,0x63,0x8f,0x67,0x2b,0x85,0xf3,0x2a,0x9b,0x26,0x3e,0x2b,0xe2,0x29,0xc5,0x5e,0x21,0x04,0xfe,0x5b +.byte 0xb9,0xd8,0xa7,0x7b,0xdf,0xcf,0x61,0xd6,0xaf,0x9b,0x17,0xcb,0xaf,0x8f,0x71,0xb3,0xc2,0x9d,0x9a,0x55,0x1d,0x3e,0x1d,0x17,0x25,0xc8,0x44,0x71,0x29,0x2f,0xc8,0x01,0x3b,0xe4,0xc4,0x2e,0xcc,0x3b,0xdb,0x34,0xbb,0xc0,0xcc,0xb6,0x07,0xe3,0x86,0x4c,0x62,0x02,0xe8,0xc3,0x11,0x85,0x6c,0x18,0x80,0xa3,0xbd,0x02,0x30,0x68,0x36,0xa3 +.byte 0xb6,0xc6,0xbd,0x82,0x43,0x40,0xed,0xa1,0xcf,0xc5,0xce,0xe4,0x27,0x8a,0xeb,0x8c,0x59,0xea,0x4a,0x81,0xd9,0x35,0x87,0x7d,0x6d,0xb2,0x8f,0x67,0x37,0x1f,0x11,0x60,0x0d,0xed,0x34,0xd5,0xa0,0x7b,0x46,0x71,0x68,0x19,0x69,0xd3,0x65,0x1d,0x47,0xf1,0x7e,0x16,0xd8,0xec,0xbb,0x52,0xc3,0x7b,0x62,0x5a,0xb3,0x60,0x67,0x2e,0xfd,0x57 +.byte 0xf2,0xfb,0x3d,0x63,0xe6,0x82,0x20,0xff,0x31,0x90,0x1d,0x5e,0x4f,0x04,0x9a,0xf8,0xb2,0x0c,0x84,0xff,0x7d,0xe2,0xec,0x4b,0x09,0xbb,0xdf,0xae,0xc5,0xaf,0xcb,0x8b,0xb5,0x5d,0xa8,0x53,0x78,0xf9,0xb9,0x43,0x71,0xa6,0xc2,0x10,0xfa,0xad,0xda,0xba,0x46,0x13,0x72,0x97,0xef,0x6f,0xe3,0x4f,0x5f,0xf9,0xec,0x25,0xdb,0xcd,0xca,0x33 +.byte 0x7e,0x50,0x73,0x5b,0xd0,0x9f,0xea,0xd5,0xd9,0x29,0xe8,0x1b,0xc1,0xf8,0x40,0xbf,0x50,0xdb,0x8e,0x39,0x0b,0xb7,0x6c,0xf1,0x34,0x0b,0x1f,0x88,0x27,0x4b,0xea,0x1d,0xb2,0x36,0x07,0x4b,0x22,0xa9,0xd0,0xf8,0xf2,0x13,0x8e,0x97,0x9d,0xd9,0x53,0xd3,0xdc,0x63,0x40,0x11,0xc7,0x74,0x9e,0xd9,0x83,0x01,0xae,0x36,0xcb,0x35,0x9a,0x0c +.byte 0xb5,0x15,0x0a,0xf5,0x41,0xa5,0x6c,0x72,0x40,0x80,0xf0,0x15,0xc0,0x80,0x23,0x0b,0xab,0x98,0xfc,0xab,0x81,0xe0,0x8b,0x61,0x91,0x18,0xd2,0x23,0x71,0xed,0x32,0x80,0x26,0x86,0x96,0xe9,0x90,0x5e,0x43,0xd2,0x89,0x8f,0x89,0x57,0x73,0xca,0xe1,0x42,0xa9,0xa9,0xed,0xdd,0xc5,0x9f,0xf7,0x00,0x0d,0xa3,0xe5,0xc8,0x6f,0x0c,0x14,0xa4 +.byte 0x9d,0x5a,0x14,0xaf,0x96,0x3a,0xb2,0x64,0xa7,0xac,0x20,0xa9,0x01,0x4c,0xec,0x64,0xc6,0x9b,0xfd,0x04,0xc5,0x2e,0xe7,0xdd,0xa5,0x8e,0xe7,0xe7,0x76,0x53,0x59,0x95,0x14,0x07,0xed,0xe9,0x96,0xd0,0x2d,0xc8,0x9d,0xa2,0x11,0xe3,0x02,0x20,0x68,0x09,0x25,0x69,0x07,0x88,0xdb,0x26,0x36,0xf5,0x8e,0xc3,0xf0,0x70,0x8c,0xeb,0xe6,0xcd +.byte 0xad,0xf3,0x49,0x6e,0x8a,0x54,0xa6,0xdd,0x97,0x8e,0x37,0x28,0x3a,0x6d,0xc4,0xdd,0x99,0x85,0xf7,0x96,0x63,0xb4,0xa2,0xdf,0xff,0x81,0x17,0xa1,0x22,0xb1,0x43,0x5b,0x29,0xdb,0x92,0x91,0xc9,0xc6,0x8d,0x29,0x1d,0x6e,0xe3,0x44,0x3e,0xe4,0x20,0xd5,0xf4,0x4a,0xfa,0xae,0xf6,0x2c,0xff,0x80,0xc9,0xce,0x7f,0x13,0x1e,0xd7,0x24,0xa2 +.byte 0xb3,0x90,0xb8,0x20,0x18,0xe5,0x6c,0x0e,0xf5,0xc6,0x26,0xd6,0xe9,0xe8,0x55,0xe4,0x3f,0x49,0x13,0xe2,0xca,0xef,0x9b,0xc0,0x8f,0x24,0x50,0x37,0xef,0x21,0xff,0x79,0xb7,0x5d,0x86,0x03,0xfb,0x85,0x75,0x74,0xbf,0xc5,0x3a,0x30,0xcc,0x00,0xc3,0x0d,0x4f,0x91,0xd6,0x31,0x19,0xd6,0xcd,0x0e,0x1c,0x53,0x88,0x75,0xb8,0xf9,0x68,0x7a +.byte 0xa4,0x3e,0x8d,0xed,0xba,0x05,0xb4,0x6c,0xe0,0x45,0x9c,0x41,0x34,0x24,0x82,0xaf,0x9a,0xcf,0x9e,0xd2,0x27,0x5c,0x7f,0xb3,0xcb,0xe5,0xad,0xb4,0x8e,0x74,0x9d,0xe4,0xba,0x55,0xb3,0xd3,0x32,0xbc,0x62,0x11,0xb3,0xa4,0x82,0xf0,0xd8,0xfc,0x79,0x03,0x70,0xae,0x7f,0x7f,0xc8,0x50,0xb5,0xbe,0x47,0x14,0x31,0xd7,0x16,0x65,0x52,0x3b +.byte 0xbb,0x42,0x38,0x23,0x77,0x4d,0x38,0x0b,0x0a,0x61,0x94,0xac,0xa3,0xc9,0xd7,0x99,0x4f,0x34,0x3a,0x88,0xe8,0x1d,0x0b,0x97,0x48,0x6d,0x5c,0x61,0x4c,0x3f,0xc2,0x7c,0x6c,0x63,0x00,0xdd,0x59,0xae,0xcd,0x17,0x0a,0x21,0x27,0x98,0x15,0x23,0x6d,0x84,0x7e,0x24,0xd4,0x7f,0x1b,0x3a,0x98,0x52,0xc3,0x60,0x33,0xd6,0xc1,0xfe,0x68,0xa8 +.byte 0x49,0x3d,0x7e,0x53,0xee,0x0d,0xed,0x89,0x9a,0x9a,0xe6,0xa1,0x47,0xc7,0xba,0xf3,0x73,0x5b,0xef,0x33,0x51,0x8c,0x1f,0x84,0xa6,0xef,0x77,0x94,0x2d,0xd6,0xda,0x8f,0x85,0x8c,0xd3,0xb6,0x02,0x68,0x9e,0x57,0xb6,0xd9,0x1a,0x8c,0xb5,0xf4,0x61,0x39,0x29,0xb5,0xb7,0x0d,0x0d,0xa6,0x81,0x87,0x54,0xc0,0xca,0x67,0x09,0xca,0x20,0xf3 +.byte 0x37,0x7e,0x03,0x3e,0x31,0x8c,0x51,0x89,0x06,0x81,0xf6,0x7b,0x8b,0xe3,0x4f,0xd0,0xb8,0x0c,0x34,0x7c,0xd6,0xfc,0x25,0xf8,0x00,0xa6,0x10,0x15,0x0d,0xeb,0x22,0x72,0x03,0x79,0x1c,0x84,0x1d,0x3d,0x10,0xaf,0x43,0x6d,0xd7,0xed,0x10,0x2c,0x14,0x26,0xd4,0xa1,0xee,0x6c,0x7f,0x52,0xe4,0x83,0xcc,0x5f,0x1a,0x4b,0xd0,0xc8,0xfb,0x27 +.byte 0x17,0x2c,0xf6,0x90,0x02,0xb4,0xb0,0x63,0x7c,0x14,0xec,0x9e,0x08,0x60,0xec,0x45,0x85,0xc6,0x76,0x42,0x4f,0x1c,0x5f,0x48,0x7f,0x87,0xef,0x8c,0x04,0x23,0x3c,0xda,0x39,0xbc,0xec,0x09,0xda,0xeb,0x9b,0x72,0x7a,0xb4,0x20,0x1c,0xb2,0xdd,0x2e,0x63,0x72,0xd7,0xb1,0xfe,0x5b,0x21,0x28,0xfb,0xeb,0x45,0x31,0x89,0xe5,0x3e,0xa0,0x85 +.byte 0xa6,0x96,0xdb,0x42,0xd5,0xb4,0x27,0x78,0x10,0xa0,0xcb,0x69,0x68,0x1e,0x76,0xed,0xbc,0x3c,0xa1,0x04,0x10,0x81,0x2a,0x4f,0x52,0x78,0x1e,0xae,0x5a,0x47,0x69,0x81,0xee,0xd3,0x14,0x1a,0x68,0x19,0x75,0x92,0x72,0x47,0x61,0x70,0xcf,0x96,0x35,0xa6,0xbb,0x00,0xaf,0x3e,0x90,0x86,0x22,0x9b,0x72,0x8a,0xa1,0x05,0xe2,0xfb,0xdc,0x30 +.byte 0xd5,0xdd,0x46,0x1f,0xf6,0x33,0x43,0xd1,0x59,0xc4,0x93,0x89,0x36,0x6a,0x7b,0x76,0xa7,0x40,0x6c,0xb1,0x9c,0xce,0x3a,0x8c,0xb6,0xd5,0xd1,0x0a,0x78,0xf6,0x08,0xfb,0xf5,0x9c,0xee,0x74,0x0d,0x39,0x51,0x6d,0x0e,0xa6,0xe9,0x22,0xd8,0x30,0xdf,0x16,0xf7,0xe3,0xbd,0xbb,0xe6,0x45,0xb8,0x9c,0xb5,0x49,0xf0,0xe8,0x7c,0xce,0x25,0xf8 +.byte 0x46,0xc0,0x59,0xc2,0xbc,0xdd,0xea,0x3e,0xeb,0x2e,0xf5,0xfd,0xd9,0x05,0x8a,0x2f,0xa3,0xa4,0x63,0xa6,0x50,0x08,0xce,0x2a,0x69,0xe7,0x58,0x57,0xa1,0xb2,0x44,0x41,0x04,0xfc,0x61,0xb1,0xb8,0x19,0x27,0x14,0x71,0x2f,0x55,0x64,0x28,0xa0,0xcc,0x47,0x0c,0xd4,0xed,0xfd,0x07,0x99,0xc6,0x9e,0xdc,0x5f,0x19,0x03,0x1a,0x00,0xda,0xf6 +.byte 0x2c,0x95,0xb0,0xd2,0xaa,0xfb,0xbc,0x1a,0xf3,0x62,0xaf,0x9c,0x38,0xde,0x61,0x30,0xd5,0x56,0x82,0x4b,0xf6,0xeb,0x34,0xc0,0xdc,0x51,0x97,0x89,0x80,0x47,0x9d,0x2a,0xae,0x0e,0x92,0x48,0xd2,0x9d,0x5a,0x67,0xef,0x33,0xa3,0xbe,0xdd,0x80,0x64,0x9c,0xc1,0xaf,0xf9,0x1a,0x4b,0x55,0x67,0x88,0x37,0x37,0xff,0x98,0xe3,0x9e,0xa9,0x4e +.byte 0x1f,0xa1,0x32,0x70,0xa3,0xbb,0xdc,0x6e,0xb3,0x6d,0xfe,0x8f,0x74,0x89,0xed,0xe1,0x13,0x3c,0x8f,0x08,0x75,0x84,0x84,0xee,0xac,0xcc,0xa5,0x47,0x9f,0x3e,0xb9,0xed,0x26,0x20,0xf7,0x7b,0xfb,0x8a,0x48,0x58,0x51,0x24,0xf9,0xeb,0x66,0x6d,0xd6,0x83,0x24,0xff,0x9f,0x0d,0x38,0x9c,0xf9,0x24,0x99,0x12,0x49,0xb6,0xdd,0xce,0x44,0xe7 +.byte 0x31,0x3d,0x4b,0x23,0x8a,0xd5,0x62,0xa2,0xdb,0x78,0x56,0x3a,0x62,0xc8,0x59,0x5f,0xcc,0x58,0x76,0x19,0x5d,0x48,0x4a,0xc2,0x87,0x21,0xc3,0x3d,0x3a,0x38,0xbd,0x20,0xfd,0xc3,0xa6,0xab,0x32,0xb8,0xc8,0xd1,0x5c,0xa5,0xb4,0x64,0x60,0xd2,0x87,0xb7,0xe9,0xc2,0x2b,0xb2,0x75,0x04,0xf4,0x6e,0x96,0x99,0x5d,0x08,0xff,0xa3,0x45,0x8a +.byte 0xad,0x7c,0xee,0x94,0x4e,0x45,0x86,0xad,0x0a,0x7a,0x5c,0x8f,0xff,0x28,0xb3,0x3c,0xf8,0x5e,0xb3,0x1e,0x5c,0xe0,0x22,0xf7,0x4e,0xe4,0xdf,0x1f,0xd2,0xa2,0x37,0x4a,0x87,0xa6,0x16,0x80,0x0c,0xc3,0x75,0x18,0xe4,0x76,0x8f,0xc3,0x1b,0xee,0xb1,0xe4,0x4b,0xeb,0x6f,0x15,0x48,0x60,0xaf,0x8e,0x0e,0xeb,0xbe,0x26,0xa3,0xbd,0x2a,0xb5 +.byte 0x6d,0x8b,0xd1,0xa1,0x0f,0x8e,0xaa,0xaa,0xb8,0x8d,0x84,0xe7,0x65,0x40,0x60,0x3d,0x59,0xb7,0x1c,0xef,0x08,0x0e,0x6f,0x21,0xb4,0xe6,0x10,0xda,0x59,0x9a,0x0f,0xe6,0xba,0xfd,0xed,0x7f,0xc1,0xe3,0x7a,0xb7,0x21,0x5d,0xcf,0x1c,0xbd,0xd2,0x59,0xc0,0x31,0xa5,0x8a,0x39,0x86,0x9e,0x7e,0x6a,0xcb,0x87,0x6f,0x01,0xba,0xa4,0x06,0x6b +.byte 0x3b,0x5d,0x68,0x85,0x11,0xd2,0x2a,0x3c,0x8e,0x3a,0x8c,0x8b,0x59,0xa0,0x4a,0xfb,0x76,0x85,0xe6,0x47,0xc3,0xf4,0xc4,0xe6,0xcc,0x7b,0xff,0x71,0x03,0xd1,0xc2,0x01,0xe4,0x5e,0x49,0x31,0xa6,0x0e,0x17,0x9b,0x42,0xdc,0x75,0xd6,0xfe,0x09,0x0b,0x6d,0x21,0x46,0xfe,0x40,0xcd,0x7c,0xdb,0xca,0xc9,0xba,0x64,0x83,0xd3,0xf7,0x0b,0xad +.byte 0xff,0xfd,0xe3,0xd9,0x49,0x7f,0x5d,0x48,0xaa,0xac,0xe5,0x74,0x2a,0x14,0x6f,0x64,0x21,0x81,0x09,0xcd,0x2d,0x19,0xf5,0x56,0x85,0xa8,0xec,0x98,0x65,0x46,0x99,0xec,0xbe,0xe3,0x86,0xd3,0x41,0x8b,0xe4,0x76,0x9b,0x5b,0x98,0x33,0x9e,0xdb,0xc9,0xde,0x89,0xfa,0x60,0x58,0xa8,0x2f,0x7a,0xca,0x30,0x91,0xc8,0x26,0x14,0x9c,0xd6,0x6d +.byte 0xc2,0x3c,0xca,0xe0,0x9a,0x13,0x72,0x63,0x5e,0x20,0xfd,0xa0,0xca,0xb2,0xed,0x37,0xc5,0xd4,0x4e,0xec,0x1f,0x74,0x25,0x37,0xe2,0xbe,0xb1,0x7f,0x52,0x26,0x28,0x4f,0x02,0xe5,0x6a,0x27,0xf3,0xc4,0x9c,0x69,0x09,0xac,0xff,0x77,0x9c,0xa4,0x1d,0xe7,0xa1,0x7c,0x37,0x70,0x3b,0x3c,0xc4,0x16,0x8f,0x5d,0xe5,0x05,0xa9,0x2c,0x91,0x2e +.byte 0x87,0xb0,0xa9,0x2e,0x32,0x73,0x5c,0x15,0x1e,0xbe,0x01,0xc9,0xd8,0x2e,0x26,0xf4,0x05,0x2d,0xe0,0xc0,0x38,0x81,0x61,0xf4,0x37,0x08,0xa0,0xc0,0x28,0x0a,0xb6,0xd4,0xcc,0x2c,0xc6,0xd4,0xda,0x48,0x49,0xcf,0x76,0x91,0x23,0x51,0x91,0xe7,0x50,0x94,0xae,0xb7,0x15,0x26,0xaa,0x82,0xd0,0x97,0xe8,0x5e,0xaa,0xfc,0xaa,0x60,0x62,0x81 +.byte 0x80,0xfd,0xfd,0xaf,0x65,0xcc,0x29,0x27,0x95,0xad,0x56,0xb9,0x85,0x66,0x49,0x62,0xb3,0x1a,0xf4,0x54,0xc7,0x5d,0x7f,0x73,0xe0,0xd2,0xc8,0x18,0x95,0x62,0x2f,0x5c,0x96,0xfb,0x63,0x15,0x46,0x07,0x5f,0x3e,0x52,0x18,0xf8,0x5d,0x45,0x0b,0xb6,0xf7,0xc5,0x3d,0x16,0xaa,0x0b,0x8f,0x9d,0x16,0xc8,0x93,0x13,0xd2,0xba,0x7a,0x52,0x1a +.byte 0x7a,0x73,0xc4,0xca,0xfb,0x04,0xaf,0x6f,0x3e,0xfa,0xff,0x29,0x09,0xe2,0x74,0x35,0xc1,0xfc,0x21,0xcf,0x5f,0xf7,0x82,0x55,0x75,0x27,0xc9,0x91,0xc5,0xbf,0xe6,0x68,0xb6,0x0f,0x10,0x0e,0x91,0x30,0xb7,0x05,0xca,0x59,0x4a,0x7f,0xb0,0xf6,0xaf,0xf1,0x5d,0xc9,0xc5,0x06,0xc5,0xf4,0xe1,0x75,0x16,0x9a,0x2c,0xc0,0x3f,0xc1,0x98,0x91 +.byte 0xb7,0xe6,0xb1,0xf2,0xf9,0xfa,0x6d,0x27,0x98,0x33,0x8b,0x73,0x7a,0x57,0x12,0x6f,0x80,0x11,0x28,0x17,0x7d,0xf1,0x26,0xaa,0x05,0xf1,0x6e,0x86,0x98,0xe7,0xf6,0x9f,0x9c,0x06,0x8f,0xec,0xd7,0x2d,0xb0,0x83,0xdf,0x23,0x80,0x34,0xd3,0xd7,0xf7,0xd5,0x0d,0x52,0x18,0xcd,0xc7,0xe7,0x15,0xc9,0x1b,0xae,0x58,0xcf,0xc5,0xdd,0x25,0x2a +.byte 0xff,0xa5,0xf3,0x6d,0x20,0xfd,0xda,0xfd,0x78,0x30,0x14,0x1f,0xb3,0x47,0xe3,0x2d,0x54,0x87,0xdc,0x30,0xbe,0x41,0xc0,0x48,0x52,0x82,0x49,0x78,0xad,0xfd,0x24,0xad,0xd6,0xc1,0x14,0x1e,0xa0,0xc1,0x3d,0x82,0x59,0x01,0x9b,0xc3,0xf4,0xf7,0x26,0xce,0x92,0x50,0x13,0x47,0xe0,0xf3,0xfa,0xd9,0x61,0x19,0x80,0x12,0xee,0x73,0x45,0x5b +.byte 0x34,0xfc,0xb2,0x84,0xb2,0x3f,0xdc,0x77,0x8e,0x2d,0xb3,0x62,0xb9,0x03,0x2d,0xb6,0x2a,0x17,0xcd,0xfb,0x54,0xc2,0x5e,0xb9,0xcf,0xd6,0x05,0xe2,0xac,0x3f,0xce,0x50,0x0f,0xa1,0x3e,0x67,0x68,0x46,0x0c,0xab,0xa1,0xdc,0x2a,0x26,0x1f,0x22,0x1b,0xa7,0xc9,0x3b,0x6c,0x97,0x5d,0x5c,0x7d,0x1a,0x46,0x4a,0x99,0x92,0x85,0x87,0x35,0x6c +.byte 0x78,0x9d,0xb0,0x39,0xd6,0x3b,0x52,0x60,0xb4,0xba,0xcc,0x2e,0xe9,0xe1,0x91,0x51,0xc1,0x52,0xc7,0x5d,0x84,0x95,0x54,0x25,0xdd,0xcd,0x40,0x35,0xa1,0xc8,0x7e,0xff,0x82,0x55,0x9f,0x64,0xef,0xa7,0xc1,0x79,0x57,0xc7,0x44,0xa8,0x1c,0x06,0xaa,0x2a,0x05,0x65,0x6c,0xdc,0x90,0x7d,0x2e,0x53,0x3c,0x56,0xe1,0x30,0xdf,0xcb,0x75,0x3d +.byte 0x36,0x88,0xfd,0x72,0x2d,0xc7,0x8e,0x2f,0x11,0x5a,0x2e,0xa9,0xd6,0x37,0x4b,0x31,0x4e,0x6e,0xa0,0x4a,0xd9,0xa9,0x48,0x18,0x50,0xb1,0x28,0xf6,0x74,0x03,0x44,0xa7,0x06,0x55,0x86,0x1a,0x1b,0x07,0x79,0xc4,0x25,0xba,0x5d,0xce,0xa2,0x96,0x7d,0x62,0xa7,0x21,0xf0,0xa7,0xc2,0x91,0x03,0x38,0x37,0x0b,0x20,0x40,0x88,0x7b,0x28,0xf4 +.byte 0xf3,0xc2,0xb0,0x4b,0xf6,0xef,0x2f,0xd9,0xb5,0x81,0x17,0x95,0x42,0x98,0x7f,0x18,0xd4,0x7e,0xa1,0x85,0xbf,0x62,0xdc,0x40,0xe4,0xd3,0xcc,0x78,0x01,0xec,0x12,0xcc,0x04,0x5b,0xfe,0xdb,0x39,0x7c,0x1e,0x56,0x7c,0x72,0x57,0xb9,0xdf,0x9d,0x43,0xd4,0xe3,0x1f,0xbf,0x69,0xfb,0x43,0x23,0xd8,0x75,0x81,0xe8,0x39,0x0f,0xe4,0xe9,0x51 +.byte 0xea,0xb7,0xa7,0xc6,0x17,0xc6,0x75,0x4c,0xa8,0x17,0x41,0x1c,0x55,0x8e,0x8d,0xf3,0x64,0xbc,0xc3,0x33,0xa7,0xc1,0xbe,0xa2,0x89,0x75,0xd6,0xda,0xad,0x44,0xd5,0xdd,0x18,0xe2,0xfc,0x1d,0xa1,0xbc,0x1a,0xb8,0x40,0x1a,0x4f,0x44,0x4b,0x56,0xe9,0xf4,0xa8,0x16,0xe6,0xc9,0x40,0x90,0x9b,0x49,0xae,0x62,0x12,0x3d,0x50,0x2e,0x7b,0x60 +.byte 0x6f,0x04,0x01,0x2c,0x83,0x2a,0xd2,0x92,0x63,0xa2,0xe2,0x39,0x9a,0xc4,0x1e,0x5a,0x53,0x3f,0x4d,0x69,0xfa,0x0a,0x22,0x13,0x80,0xa4,0x6e,0xfb,0x09,0xcb,0x35,0xd7,0x12,0xa4,0xcd,0xfc,0x0b,0x06,0xa6,0x5e,0xc6,0x4a,0x22,0x56,0x5d,0x7f,0x70,0xd0,0xf8,0xe6,0x96,0x77,0xce,0xd9,0x69,0x6c,0x06,0xac,0xaa,0x94,0x6d,0x57,0x1b,0x28 +.byte 0xb4,0x07,0x50,0x19,0xd1,0x86,0xba,0xe6,0xe6,0x31,0x74,0x1d,0x3d,0xe8,0xe2,0x7b,0xfe,0xc9,0x41,0x89,0x20,0x5b,0x6a,0xc0,0x18,0x16,0xee,0x35,0xfa,0x56,0x35,0x3e,0x53,0x99,0xfb,0x8d,0xae,0x75,0x4f,0xc5,0x8d,0xff,0x23,0xd5,0x42,0xf4,0x81,0x5c,0x8b,0x71,0x7a,0x22,0xb0,0x6b,0x45,0x86,0xa6,0xc6,0xdb,0xa6,0x83,0x01,0x28,0xde +.byte 0x38,0xaa,0x6e,0xf8,0x5a,0xf2,0xcc,0x3c,0xc5,0x65,0x78,0x37,0xe8,0x8a,0x59,0xf3,0xfe,0x8b,0xcd,0xf6,0x31,0x46,0xdc,0x72,0x19,0xf7,0x73,0xac,0x5c,0xf1,0xe3,0xfd,0x85,0x51,0xec,0x92,0x3a,0xf3,0xd7,0xb2,0x95,0x53,0x79,0x48,0xd3,0x29,0x84,0xec,0xc5,0x0a,0x71,0x15,0x52,0x69,0x6a,0xe1,0xab,0x69,0x94,0xc2,0x51,0xdf,0x27,0xd8 +.byte 0xb1,0x05,0xc4,0x12,0xea,0x1e,0xda,0x6e,0xf2,0xf5,0x8a,0xa8,0x72,0x74,0x5a,0xe5,0x45,0x5b,0x5f,0xf9,0xb0,0x56,0x5c,0x85,0xf7,0x63,0x8d,0x1d,0xbf,0xe9,0x7c,0x97,0xe9,0x37,0xb3,0x5b,0x4b,0x57,0xfc,0xf4,0x58,0x84,0x26,0x55,0x07,0xc7,0x0a,0xfe,0x5a,0x58,0xd0,0xd8,0x19,0xf4,0x02,0xad,0x2c,0x4e,0xbd,0xe1,0x07,0x48,0x3b,0xc4 +.byte 0xd6,0x23,0x3a,0x63,0xc3,0xf5,0x17,0x46,0x03,0xa4,0x9a,0x10,0xf9,0xac,0x70,0x9c,0x13,0x10,0x94,0xda,0x17,0xc5,0xbb,0x87,0x0f,0x9b,0x4f,0x54,0x55,0x6b,0x57,0x2d,0x12,0x0b,0xa7,0x9c,0x77,0x6d,0x67,0xb0,0x03,0xdf,0xc6,0xa2,0x76,0x96,0x0c,0xac,0x30,0xbc,0xa2,0x55,0x23,0x01,0xae,0x51,0x50,0xd4,0xab,0xd0,0xee,0x75,0xf1,0x96 +.byte 0x75,0xf5,0x2e,0xae,0x52,0x31,0x0b,0x0a,0x8a,0xdb,0x4c,0x4d,0x4c,0x80,0xfc,0xd7,0x68,0x05,0x54,0x47,0xa5,0xc4,0xb1,0x63,0x87,0x43,0x1b,0xe1,0x0b,0x4f,0xff,0x0c,0x02,0xf7,0x00,0xd4,0x8d,0x6e,0xa1,0x21,0x91,0x62,0xec,0x55,0xd5,0x72,0x70,0x59,0x7a,0xa4,0x0e,0x78,0x7a,0x87,0x1f,0x71,0x35,0x3b,0xf7,0x1f,0x66,0x8c,0x90,0xf9 +.byte 0x6d,0x1f,0x74,0x47,0x41,0xf5,0x21,0x98,0x0d,0x42,0x61,0x21,0x0b,0x62,0x59,0xc7,0x5e,0x58,0x37,0xfb,0xee,0xbb,0xa0,0x45,0xa8,0x84,0xae,0x41,0x29,0xc9,0x88,0x64,0x69,0x75,0xc1,0x5f,0x63,0x7c,0x00,0x1c,0x35,0x61,0x9e,0xad,0x19,0xd7,0xd8,0xf1,0x64,0x57,0x10,0x87,0x73,0xa8,0x8b,0x39,0x9b,0x1c,0x1a,0xc2,0x1b,0x01,0x1a,0x41 +.byte 0x26,0x58,0x93,0x8f,0xed,0xf9,0xe7,0xfe,0xcc,0x27,0x1b,0x6b,0xb8,0x28,0x5a,0x0b,0x04,0xa0,0x94,0x23,0x4b,0x21,0x5f,0xb3,0xc9,0xb6,0x7b,0x36,0x5a,0x67,0x6b,0xd2,0xc2,0x53,0x97,0x5d,0xa5,0x43,0xd3,0x79,0x83,0xe2,0x3b,0xe0,0xaf,0x5f,0xbd,0xf3,0xb0,0xfc,0x04,0x95,0x06,0x17,0x0c,0xe2,0x68,0xe8,0xf3,0x90,0xc7,0x2b,0x7b,0xcc +.byte 0xaa,0xce,0xf5,0x0b,0x3c,0x3f,0x10,0xa7,0x31,0x9d,0xf0,0x1e,0x3e,0x74,0x57,0xbd,0x87,0xe7,0x37,0xd0,0x37,0x09,0xae,0x03,0x96,0xb1,0xad,0x8f,0x2d,0x72,0xdc,0x0f,0xdf,0xd9,0xfb,0xcc,0xb8,0x48,0x62,0xf7,0xad,0x05,0x4d,0xc6,0xe5,0x92,0xe3,0x95,0xa0,0x74,0x7a,0xa6,0x84,0x13,0x68,0x17,0xaa,0x8f,0x40,0x2a,0x8d,0x2b,0x66,0xdc +.byte 0xf8,0xf6,0x6d,0x7c,0x7e,0x40,0x22,0x05,0x16,0x20,0xbc,0xe5,0xc2,0x87,0xe2,0xd5,0xbd,0x47,0xd5,0x69,0x95,0x12,0x25,0x1c,0xaa,0x9d,0xb5,0x73,0x08,0xaf,0xfb,0x46,0xa5,0x11,0x2c,0x93,0xc6,0xfc,0xc0,0x5e,0x0e,0x99,0x1c,0x80,0x5f,0xe5,0xc8,0x52,0x73,0x35,0x4d,0xbc,0x70,0xeb,0x40,0xc9,0x47,0x8a,0x8f,0x19,0xd9,0xa9,0xec,0x4b +.byte 0x88,0x53,0x56,0x08,0x4a,0xa2,0x32,0x1f,0xe2,0xbb,0x68,0x35,0xfd,0xf2,0x0e,0x0f,0x7f,0xc8,0xf1,0x59,0xac,0x97,0x8f,0x84,0x69,0xb6,0xb9,0x5f,0x84,0xe9,0xf2,0xf9,0x09,0xf6,0xf1,0x31,0xd7,0x1a,0xa8,0x25,0x32,0x5f,0xb1,0xa7,0x84,0x15,0xfa,0x07,0xa8,0x53,0xce,0x2a,0x26,0xe0,0x4d,0x07,0x4f,0x45,0x63,0x76,0xfd,0xe3,0xb4,0x4e +.byte 0x81,0x5e,0xe6,0x01,0x9c,0xf5,0x82,0x2d,0x71,0x0f,0x98,0xb4,0x72,0x06,0xbc,0x89,0x89,0x60,0x5f,0xd9,0x92,0xcf,0xb9,0x41,0xe3,0x13,0xaa,0xe4,0x80,0xb5,0x75,0xf4,0x9a,0x1b,0xc2,0xa3,0xa4,0xa9,0x0f,0x15,0xdc,0x26,0xdd,0x20,0x10,0x27,0xbd,0x06,0x77,0x12,0xa5,0xb3,0xde,0x9f,0xbf,0xc4,0xb6,0x1d,0x76,0xdc,0x16,0x00,0x2e,0xe2 +.byte 0x00,0x4d,0xb3,0x62,0x57,0x73,0x1e,0x90,0xe2,0xaa,0x4c,0x47,0xdf,0x6b,0x2d,0x66,0x2f,0x82,0x55,0x91,0x26,0x33,0xb9,0x3a,0xc7,0xf1,0x0a,0xda,0x9b,0x6b,0x05,0x82,0x0f,0x0e,0x30,0x74,0x0b,0xea,0x0f,0x49,0x55,0x3b,0xe7,0x42,0x48,0xca,0x82,0x3e,0x8c,0xbc,0xe2,0x88,0x43,0x44,0x0d,0x37,0x9b,0xd1,0xfc,0xf1,0x45,0x46,0x0e,0xe1 +.byte 0xec,0x91,0x39,0x96,0x7d,0xbc,0xd5,0xb1,0x11,0x55,0x54,0x49,0x4f,0x18,0xed,0xec,0x58,0xdb,0xb3,0x7d,0x64,0x8d,0xfc,0x65,0x1f,0xf0,0xe0,0xc0,0x41,0xc0,0x19,0xeb,0x16,0x16,0x71,0x36,0x88,0xcf,0x75,0x3d,0x9c,0xe6,0xa0,0x84,0x54,0x26,0x64,0x95,0x9a,0xe1,0x0b,0x51,0xcf,0x9a,0x55,0x60,0x4d,0x9d,0x1d,0x37,0x71,0xa8,0x94,0x0a +.byte 0x20,0xeb,0xf2,0x91,0x14,0xfc,0x12,0xb0,0x1e,0xe3,0x5e,0x3a,0xbb,0x22,0xde,0x20,0xb1,0x58,0xef,0x0b,0xb1,0xc2,0x2f,0xea,0xd8,0xdb,0x1d,0x3a,0x67,0x7b,0xbd,0x26,0xfa,0x4a,0x3c,0x3d,0xbd,0x87,0x4c,0xba,0x57,0xdf,0xfb,0x1d,0xf7,0x26,0x5f,0x52,0x4e,0xdd,0x9b,0x38,0x62,0xed,0x48,0xc1,0xae,0x7f,0xa8,0x13,0x05,0x09,0xff,0xc0 +.byte 0xd3,0x49,0x75,0x1f,0x6a,0xe0,0x79,0x94,0xc1,0xe9,0xe3,0xf5,0x33,0x40,0xd4,0x6b,0xfe,0x4d,0x6e,0x84,0xb9,0x20,0x68,0x2b,0x6c,0xb3,0xf1,0xb1,0x1c,0xfd,0x93,0x14,0x7f,0x35,0x9b,0xd5,0x07,0x15,0x87,0x56,0xb9,0x45,0x22,0x64,0x73,0xdb,0x34,0x35,0xca,0x15,0x4e,0xa2,0xa2,0xe2,0x7a,0x6e,0x14,0x46,0xf5,0xf1,0x70,0xd3,0x3a,0x2e +.byte 0x38,0x9d,0xf6,0xc6,0x29,0xd5,0x7f,0xc7,0x77,0x2c,0x33,0x55,0x1c,0xc2,0xf1,0xaf,0x8e,0x4d,0x1b,0x22,0x36,0x35,0x93,0x47,0xa5,0x59,0xb4,0x94,0x0f,0x2d,0x66,0x24,0x6f,0x57,0xa4,0x95,0xf3,0xd7,0xf3,0x59,0x9d,0xc0,0xda,0xa7,0xf7,0xf2,0x8d,0x93,0xc9,0x90,0x91,0x9e,0x12,0x3f,0x34,0x01,0x90,0x8b,0x13,0x09,0x3d,0x2f,0xa8,0x31 +.byte 0xfa,0x39,0x4a,0x7d,0x0d,0x34,0xa3,0xf1,0x75,0xdb,0xa2,0xd2,0x5c,0xf1,0x72,0xfd,0x7f,0x7b,0x15,0x92,0xf0,0x71,0xd6,0xa0,0x74,0x53,0x61,0x67,0xa4,0x8b,0x72,0x3a,0x66,0x0a,0xce,0xc9,0x1c,0x5b,0x4d,0xaa,0x0a,0x3a,0x91,0x0a,0xbb,0xef,0x6e,0x8d,0x00,0xc0,0xa1,0x89,0xa9,0xbd,0x5a,0x2d,0xf8,0x7c,0x1f,0xb2,0x5a,0x73,0x33,0xe7 +.byte 0xb3,0xfd,0xd4,0xe3,0x81,0x69,0x30,0xc1,0xf8,0x97,0x7b,0xf3,0x63,0xaa,0xd5,0x5a,0x98,0x95,0xb3,0x65,0x2d,0xf9,0x68,0x2e,0x2c,0x26,0xe6,0x77,0x8f,0x76,0x7a,0x02,0xc7,0x50,0x28,0x40,0xcf,0x44,0x66,0x18,0x54,0x52,0xef,0x79,0x26,0xc2,0x76,0x5b,0x71,0x92,0x49,0xba,0xe1,0xd7,0xf2,0xdd,0x57,0xe0,0x78,0x6e,0xb6,0xdd,0x0d,0x20 +.byte 0x85,0xf9,0x34,0x9e,0x65,0x6b,0x9f,0x41,0x24,0xe2,0xb1,0x2a,0xef,0x8b,0xd2,0x19,0x81,0x73,0x56,0x5a,0x84,0xd3,0x46,0xf8,0x74,0xe3,0x1f,0x3d,0xd9,0x16,0x86,0x38,0xf6,0x7c,0x04,0xab,0x9a,0x64,0x0e,0x48,0x06,0x4c,0x61,0xcd,0x2d,0x4d,0xef,0x6f,0xd6,0x7d,0x31,0x1c,0x56,0x65,0xc4,0xf1,0xa7,0x15,0xac,0xa4,0xe2,0x8b,0x83,0x5e +.byte 0x64,0x36,0x2e,0x77,0x94,0x2e,0x2e,0xa3,0x62,0xcf,0x6e,0x7a,0x6d,0x39,0xaf,0xf7,0x96,0x88,0x31,0x14,0x58,0x46,0x30,0x0c,0x36,0x3a,0x4c,0x53,0xe0,0xa7,0x24,0x76,0x84,0x0f,0xfb,0x7e,0x55,0xa0,0x0f,0x63,0xfc,0xd6,0x1f,0x58,0x68,0xb5,0xcc,0x77,0x4f,0x16,0x91,0xa7,0xfd,0x62,0xb3,0x88,0x13,0x7c,0xcb,0x63,0x6d,0xe4,0x38,0x4c +.byte 0x6e,0x3b,0xf7,0xe3,0x8d,0x52,0x84,0x61,0x19,0x12,0x51,0xbe,0xed,0x32,0x3d,0x77,0xdd,0xa1,0xc3,0x59,0x65,0x79,0xa1,0x6b,0xbc,0x65,0x6c,0xe3,0x7e,0x60,0x49,0xbd,0xcf,0x6f,0x61,0x97,0x98,0xbe,0x74,0x38,0xd1,0x09,0xc1,0x59,0xe5,0x7f,0xfe,0xbf,0xfd,0x60,0x1b,0x96,0x00,0x46,0x56,0x4d,0x81,0x4c,0x70,0x59,0x39,0x66,0x13,0x58 +.byte 0xe7,0x62,0x3a,0xfc,0x1b,0xe5,0xf9,0x03,0xd4,0x4b,0xab,0x1d,0x56,0x22,0x4a,0x09,0xa5,0xdd,0xac,0x39,0xbe,0x27,0x39,0xb3,0xe8,0xad,0xe0,0x07,0x86,0x10,0xce,0xa9,0x4e,0x8b,0x47,0x8d,0xb8,0x63,0x2f,0x61,0x1a,0x8b,0xd4,0xd3,0xfe,0x73,0x82,0x5a,0xd6,0xa9,0x46,0x56,0xa7,0x81,0xe9,0xda,0xb9,0x17,0xa7,0xc8,0x0f,0x24,0x16,0x6a +.byte 0x12,0xfe,0xc3,0x65,0x85,0x77,0xab,0x89,0x44,0x1b,0xa3,0x8b,0xfd,0x07,0xf4,0x77,0xaa,0xe1,0x71,0x33,0x74,0x93,0xdc,0x90,0x53,0x39,0x47,0x8c,0xea,0x18,0xe1,0x6a,0xed,0x8c,0x56,0x08,0x2f,0xa1,0x1f,0x22,0xf2,0xc0,0x12,0xcd,0xb7,0xdf,0xb6,0x3c,0xd6,0x22,0x6c,0x5b,0x00,0x0f,0xdb,0x66,0x5b,0x54,0x35,0x48,0x37,0x8c,0x79,0x74 +.byte 0xd1,0xb0,0x15,0x01,0x22,0x3a,0x7c,0x17,0x8c,0x20,0x06,0x9b,0x13,0x6e,0xee,0xbf,0xb4,0xac,0x01,0x61,0xb9,0x28,0x65,0x8e,0x53,0x12,0x4f,0xe0,0x5f,0xfc,0xdb,0x40,0x6c,0xa2,0x19,0x64,0x49,0x7a,0xc7,0xc5,0xc8,0x53,0x6e,0xd5,0x68,0xe1,0x61,0xe5,0x87,0xc2,0x99,0x59,0x4c,0x27,0xc8,0xd0,0xd0,0x10,0xce,0x9f,0x09,0xff,0xf5,0xa8 +.byte 0xf8,0x79,0xf6,0x0f,0x73,0xda,0x8a,0x36,0x8e,0x48,0x7e,0xbd,0x98,0x76,0x57,0xfa,0x5c,0xec,0xa5,0x3d,0x30,0xfe,0xa3,0xe5,0x27,0x87,0xcf,0x26,0xfe,0x61,0xe4,0xed,0xd1,0xfb,0xfc,0x91,0x5d,0xb6,0x70,0x2c,0x2c,0x59,0x14,0xd5,0x1d,0x9a,0xb9,0x2c,0xef,0x24,0x7b,0x10,0x8d,0x99,0x63,0xaa,0x82,0xf0,0x1c,0xe8,0xa0,0x00,0xa5,0xa7 +.byte 0xf8,0xc0,0x35,0x9e,0x12,0x18,0xaf,0x42,0x9d,0xe5,0x2b,0x72,0x6c,0x31,0xd8,0x8f,0x6c,0xde,0x2e,0x37,0xa6,0x73,0x06,0xe7,0x90,0x43,0x79,0x99,0x64,0xd1,0x17,0xa1,0x43,0x6d,0xd4,0x90,0x50,0xf2,0xcc,0x0b,0x73,0x49,0x9e,0x14,0x7c,0x49,0x92,0x05,0x0e,0x8c,0xda,0xb7,0x18,0xf0,0xcc,0xea,0xe4,0x32,0x58,0xc7,0xbd,0x8e,0xca,0x35 +.byte 0x52,0x9f,0xec,0x5d,0xa0,0x6c,0x83,0x61,0x07,0x74,0x37,0x4a,0x10,0xa0,0x98,0x83,0x3a,0x65,0x17,0x63,0xd0,0x22,0x96,0xb5,0xed,0xbb,0xbb,0x1c,0x18,0x8a,0x49,0x3d,0x0f,0xcc,0x24,0xb3,0x9b,0xb6,0x23,0x2e,0x9d,0x97,0xe7,0x31,0xf8,0x36,0x6d,0x7b,0xa1,0xf1,0x02,0xde,0x7c,0xad,0x77,0x5d,0x85,0x7c,0x39,0x61,0xc7,0xd7,0x3f,0x70 +.byte 0x1c,0xe1,0x0e,0x49,0xf4,0xcd,0xab,0xfd,0x4d,0x2f,0xc7,0xb7,0x53,0xfc,0xed,0xeb,0x41,0x2a,0x80,0x40,0xf3,0x47,0xf8,0x15,0xa0,0x4c,0x8b,0x34,0xf6,0x6a,0xb8,0x30,0x09,0x4d,0xe6,0x60,0xb7,0x24,0x6b,0x4c,0x26,0xdf,0x83,0x37,0xc7,0x96,0xba,0x35,0xda,0x29,0x4e,0xca,0x52,0xf7,0x41,0xd3,0x98,0x27,0xb2,0x9e,0xec,0xcc,0x12,0xdc +.byte 0x77,0xfd,0x11,0xbd,0xbd,0xbb,0x5e,0x0c,0x37,0x29,0xd2,0x4f,0x7d,0x5c,0x97,0xad,0x72,0x93,0x4a,0xfa,0x17,0x07,0x07,0x26,0xee,0xa7,0x29,0x2e,0xdb,0xf6,0x60,0x65,0x2d,0x85,0xbe,0x27,0x4d,0xf7,0x2b,0xb4,0x81,0xf5,0x3a,0x1d,0xae,0x25,0x8b,0x60,0xc2,0x75,0x3a,0xfd,0xf9,0x4d,0x90,0x7a,0x8a,0x3a,0xf6,0xa9,0xf0,0x11,0xd2,0xb9 +.byte 0xdb,0x23,0x40,0x9d,0x33,0xc3,0xbf,0x60,0x95,0x9c,0x6f,0xa9,0x82,0x42,0xe5,0x67,0x52,0x36,0xea,0x68,0x64,0x24,0x85,0x46,0x7e,0x2a,0x1a,0x6a,0x4b,0xa8,0xb0,0xa0,0x9c,0xb8,0x4a,0xb6,0x2e,0xb2,0x6b,0xf4,0x63,0x9f,0x54,0xb5,0x6f,0x1b,0xf5,0x71,0x7e,0xf8,0xef,0xb2,0x92,0xe2,0xcf,0x65,0xb4,0x02,0x9b,0x75,0x4b,0xf9,0x6b,0xa1 +.byte 0x24,0x3b,0xea,0x7f,0x31,0x08,0xd4,0xdc,0xab,0x12,0xc0,0xca,0x64,0xee,0xfa,0x61,0x1c,0x0f,0x24,0xc3,0x8c,0xbd,0xc8,0xd2,0x42,0xf7,0x1f,0x2e,0xd3,0xd1,0x51,0x86,0xfb,0xa2,0x95,0xc5,0x8c,0x5b,0x61,0x14,0xc9,0xe4,0x07,0xa1,0xf7,0x39,0x11,0x40,0x68,0xd6,0xe2,0x38,0x96,0x6f,0x99,0xf1,0xd2,0xfb,0x8e,0xb8,0x3d,0xf2,0x8a,0x4e +.byte 0x3e,0x54,0xd9,0x0e,0xd1,0xc9,0x31,0x04,0xa4,0xee,0xbe,0x51,0xcf,0x5f,0xd1,0xc8,0x13,0x96,0x9d,0x9b,0xdf,0x32,0xa9,0x38,0x8f,0xbc,0x7e,0x22,0x1a,0x52,0x5f,0x14,0x61,0xeb,0x78,0xf4,0x01,0xe9,0x5c,0x18,0x1c,0xb5,0xe1,0x80,0x06,0x3e,0x8e,0x72,0x33,0xf9,0xaa,0x49,0xec,0x5b,0x7a,0x04,0xf2,0x9b,0x48,0x8a,0x58,0x14,0x4b,0x7e +.byte 0x4d,0x26,0x0b,0xe0,0xf0,0x69,0xa3,0x36,0x75,0x3e,0x73,0xec,0x53,0x20,0x35,0x8e,0xfa,0x40,0xf0,0xcd,0x70,0xe1,0xe4,0x64,0x89,0x14,0x55,0xd7,0x20,0xe8,0xbd,0xc2,0x85,0xa8,0x4d,0x51,0x96,0x27,0x54,0x50,0xc7,0xa1,0x9c,0x35,0x52,0x1f,0x8b,0x6f,0xa2,0x62,0x36,0x94,0x02,0xb1,0x01,0xc6,0x4e,0x53,0x83,0x65,0x98,0x25,0x6d,0x26 +.byte 0x6d,0xef,0x4e,0x7a,0xe0,0x56,0x6a,0x6c,0x23,0xe8,0xa6,0x97,0xc1,0xf2,0xb1,0x2d,0x03,0x29,0xef,0xa0,0x6d,0x86,0x8d,0x5a,0x00,0x83,0x14,0xed,0xd4,0x1e,0x79,0xc4,0xb4,0x42,0xfd,0x53,0xaa,0xab,0xd7,0xa3,0xf9,0x7d,0x15,0x26,0xab,0x81,0xc4,0x7a,0x96,0x14,0x94,0x71,0xe1,0x7f,0xc1,0x67,0x5f,0x5f,0x11,0xb4,0x72,0x03,0xf8,0x9b +.byte 0x2f,0x82,0xa3,0x4e,0xda,0xfd,0x2a,0x31,0xf1,0x74,0x6d,0x96,0x7a,0x9c,0xf9,0x01,0xd9,0x55,0x8e,0x52,0xe4,0xae,0x22,0x14,0x7b,0xc0,0x5a,0xc4,0x31,0x23,0x9a,0x2e,0x9d,0x86,0x86,0xd5,0x66,0xc8,0x8b,0xdb,0x49,0x5f,0xca,0x57,0x51,0x50,0x75,0x3f,0xeb,0xb1,0xe5,0x84,0x42,0x8f,0x0f,0xca,0x86,0xcf,0xb0,0x17,0x06,0x06,0x46,0x8c +.byte 0x4a,0x84,0xde,0x28,0x84,0x24,0x7f,0x33,0x48,0xe8,0x89,0x87,0x1f,0x02,0x07,0x4f,0x36,0xa9,0xdc,0x8a,0x42,0xb6,0xc7,0x9c,0x47,0xd4,0xd4,0x2d,0xc0,0x17,0xb0,0xe6,0x23,0xb7,0xae,0x0d,0x9f,0x38,0x0a,0xdf,0x7f,0x73,0xbf,0x93,0x19,0x05,0x23,0xbf,0xc0,0x53,0x2d,0xcd,0x3e,0x73,0x01,0x78,0xa7,0xdc,0x6c,0x85,0x1d,0x25,0xc5,0x54 +.byte 0x68,0x95,0xc1,0x20,0x65,0xd9,0x01,0x85,0x7d,0xc9,0xba,0x63,0x43,0x7a,0x23,0xbb,0x95,0x3a,0x76,0x2d,0x75,0x1e,0xac,0x66,0x3e,0x20,0x30,0x8d,0x37,0x64,0x3c,0xc7,0x6f,0x36,0xb8,0x34,0x60,0xd2,0xb4,0x54,0x07,0x52,0x6c,0xfa,0x04,0xfe,0x2b,0x71,0x03,0x03,0x97,0xfc,0x4a,0xf9,0x4d,0x44,0x1a,0xf9,0xd7,0x4b,0xe5,0xe1,0xf9,0xb9 +.byte 0x41,0xa0,0x5b,0xa2,0x69,0x48,0xba,0xeb,0xcc,0x4e,0x55,0x4b,0xbd,0x41,0x09,0xa8,0x90,0x5c,0xc6,0xe3,0x20,0x0c,0x8f,0xfc,0x7e,0x0e,0x4f,0x3d,0x47,0x65,0x40,0x1e,0x79,0x9a,0xe0,0x8f,0x8f,0xe9,0xcb,0xaa,0x04,0xb8,0xd9,0x91,0x30,0x2a,0x4c,0x17,0x44,0xc0,0x03,0x4c,0x37,0xd3,0xdb,0x20,0xe5,0x8e,0x70,0x87,0x57,0x4f,0x8a,0xcf +.byte 0xee,0x64,0xbc,0xef,0x0f,0x9e,0xcf,0x95,0x5e,0x11,0x4f,0x7a,0x35,0x53,0x8c,0x85,0x6a,0xff,0x72,0x1b,0x35,0x51,0x89,0xf8,0x94,0x65,0x97,0xec,0xfe,0xbd,0x00,0x29,0x3d,0xe8,0x96,0x23,0xa4,0xe3,0xcf,0x81,0xb2,0x8f,0x73,0x4c,0x05,0xc3,0xcc,0x37,0x22,0x97,0xa0,0xda,0x49,0xb2,0xbd,0x07,0x2b,0x26,0xa0,0x6f,0x6b,0x1f,0xa6,0x15 +.byte 0xe3,0x6e,0x12,0xa4,0x51,0x1b,0x72,0x22,0x08,0xfe,0xf7,0x93,0x1a,0x9f,0x62,0x12,0xd4,0x11,0x1f,0xd1,0x80,0xeb,0xa4,0xb1,0xf4,0x37,0x3b,0x60,0xd8,0x2b,0x53,0xae,0x69,0xf8,0x48,0x38,0xf4,0x20,0x28,0xe1,0xfb,0x6a,0xec,0x6e,0x11,0x2e,0x2c,0x59,0x62,0x23,0x8a,0x82,0xc4,0x33,0x7b,0xdc,0x33,0x99,0x41,0x29,0x4f,0xa1,0x6e,0x3a +.byte 0x48,0x13,0x1c,0x1f,0xa3,0x1f,0xd2,0x02,0x79,0xe1,0xe4,0xb9,0x99,0xa4,0x50,0xea,0x53,0x96,0x4e,0x82,0x7c,0xee,0x65,0x07,0x26,0x87,0xf9,0x9d,0x45,0x17,0x37,0x61,0x7e,0x5f,0xb9,0xd2,0x55,0x3c,0x45,0xf7,0xec,0x33,0x08,0xa3,0x41,0x24,0x8f,0xb2,0x75,0x41,0xb6,0xa2,0x21,0xfe,0x94,0x7e,0x1e,0xe6,0x03,0x6e,0xf4,0xeb,0x23,0x59 +.byte 0x51,0x25,0x99,0x19,0x6d,0xf7,0xe3,0x22,0xd8,0x41,0x0f,0xd5,0xaf,0x0d,0xc6,0x3f,0x8e,0x36,0xee,0x90,0x23,0x67,0x03,0xcb,0xe3,0xaf,0xc4,0xf8,0x22,0x1f,0xd8,0x3e,0x94,0xdf,0x13,0xc9,0x4f,0x17,0x22,0x8c,0x93,0x6b,0x3f,0x60,0x1a,0xbd,0xfa,0x9f,0xe6,0x43,0x45,0xe1,0x0a,0x95,0x21,0x06,0x52,0xbd,0x58,0x56,0x84,0x56,0x36,0xf3 +.byte 0x55,0x58,0x46,0x62,0x6c,0xb3,0xa0,0x29,0x5a,0xfc,0xb4,0x87,0x5f,0x89,0xa5,0xab,0x6d,0x5a,0x44,0xc5,0xc8,0x50,0x83,0xe1,0x41,0xd4,0x97,0x6c,0x08,0xb1,0x43,0x33,0x0d,0x3a,0x8b,0x31,0xa1,0xae,0x77,0x71,0xb7,0x67,0x65,0xd7,0xa7,0xc9,0x6c,0x4a,0x9b,0x80,0xd5,0xbf,0xae,0x0f,0x9b,0xce,0x1a,0xa3,0x26,0xc6,0x19,0xa1,0x8d,0x12 +.byte 0xd9,0x09,0xae,0xac,0x9f,0x4b,0xab,0xaf,0xf6,0xc5,0x9e,0x26,0xe6,0x23,0xcb,0x3e,0x60,0x1e,0x3d,0xa1,0xec,0x59,0xca,0xf1,0x87,0x0e,0xaf,0x47,0x5f,0xab,0x17,0x99,0xbd,0x87,0x1c,0x1d,0x00,0xd6,0xb2,0x59,0x56,0xdd,0x49,0x20,0xb5,0x91,0xf8,0x0c,0xf1,0x80,0xc6,0x37,0x92,0xd7,0x2c,0x02,0x0d,0x47,0x1b,0x1b,0x6b,0x3f,0x60,0xd0 +.byte 0x21,0x9b,0x49,0x47,0x3c,0xaa,0x83,0x44,0x1b,0x92,0x8e,0xec,0x63,0x40,0xd6,0x9a,0x48,0x7c,0x5e,0x97,0xe4,0xf0,0x84,0x36,0x30,0x11,0x0b,0x7c,0x79,0x3b,0xff,0xdf,0x77,0xf6,0xc9,0xdb,0x49,0xdd,0x2a,0xe7,0xca,0x9a,0x5b,0xef,0xd4,0x84,0xe2,0x44,0x8b,0xef,0x4e,0x0d,0x13,0xd6,0xbb,0xba,0x29,0x02,0xae,0xfc,0x55,0x24,0xfa,0x4b +.byte 0x7d,0x71,0xc9,0xde,0x71,0x36,0xbc,0xac,0x31,0x5c,0xf8,0x20,0xdd,0xb8,0xae,0x03,0xd3,0xb0,0xdc,0x27,0x7f,0xc5,0xff,0xda,0x8a,0x36,0x2d,0x8f,0xae,0xbd,0xf8,0x92,0x28,0x8e,0x0c,0xc3,0xaf,0x4e,0x33,0xf0,0x71,0xdb,0xad,0x4d,0xc1,0xef,0x52,0x1c,0x84,0xdc,0x0d,0xf3,0xab,0xb9,0x0b,0xe0,0x18,0xa5,0x06,0xdc,0x78,0x41,0x73,0x35 +.byte 0x95,0x37,0x84,0xba,0xc1,0x4e,0x0a,0xe4,0x4d,0x05,0xfe,0x9d,0x74,0x68,0x4a,0x35,0xf0,0x15,0xaa,0x7b,0xfe,0x08,0x47,0xb2,0x84,0x65,0x1d,0x0d,0x9f,0xe7,0xe0,0x04,0xf9,0x1c,0xac,0x66,0xb3,0x75,0x96,0x8f,0x25,0xb6,0x29,0x53,0x52,0x50,0x7a,0x50,0xd1,0x89,0xc7,0x05,0xfb,0x3a,0xb0,0xfa,0x6b,0x96,0x9d,0xfc,0xb0,0xcd,0x68,0x21 +.byte 0x61,0xf6,0x65,0x64,0xa7,0xc6,0x56,0xbd,0xf0,0x9b,0x4a,0x9a,0xe2,0x8c,0xd8,0x88,0x70,0x82,0x0c,0x87,0x51,0x77,0x23,0xd8,0xd8,0xf8,0x4a,0xfe,0xf4,0x6d,0x3f,0x2a,0x36,0x0c,0x67,0x85,0x43,0x13,0x83,0xd5,0xe9,0x32,0xff,0x8c,0xec,0xd4,0x7f,0xd2,0x32,0x4d,0x4e,0xec,0x76,0x55,0xf9,0x0d,0xb7,0x57,0x6c,0xc4,0xd6,0x22,0xd3,0x6e +.byte 0x71,0x23,0x68,0x45,0x03,0x37,0x27,0x3d,0x56,0x89,0xbb,0x7c,0xf1,0xa8,0x09,0xd6,0xb2,0xc5,0xe6,0xf6,0x72,0x77,0x3e,0xb0,0x8a,0x3d,0x17,0xbd,0xd5,0x0d,0xdb,0x62,0xa7,0x07,0x66,0x35,0x19,0x12,0xff,0xcf,0xdd,0xb3,0x09,0xa3,0x58,0x5b,0x0d,0x87,0x76,0x33,0x28,0x98,0x91,0x48,0xac,0xa1,0x22,0x9f,0xda,0x36,0x03,0x8a,0xc1,0x5e +.byte 0x6c,0x2e,0x42,0x8e,0x1a,0x7d,0x75,0x69,0xb2,0xcf,0xb0,0x14,0x80,0xa8,0x91,0xc2,0xbc,0x24,0x8f,0x25,0x9a,0x9e,0xa3,0x4d,0x46,0x55,0x53,0x05,0x0c,0xf8,0xdb,0xe0,0xee,0xe4,0x32,0xff,0x39,0x74,0x9a,0xa8,0xf7,0xa4,0x6e,0x5b,0x9a,0x89,0x33,0x40,0xf4,0xce,0x54,0x4a,0x18,0xdb,0x11,0xe4,0x83,0x69,0x52,0xef,0x12,0xc6,0x13,0x6e +.byte 0x2a,0x14,0xb9,0x8e,0x38,0x8d,0x6b,0xef,0x02,0xc8,0x66,0xf0,0x78,0xaa,0xa6,0x04,0xa3,0xa5,0x1d,0xdb,0xac,0x02,0x23,0x4c,0x2a,0xa5,0xbf,0x66,0xa4,0x47,0xa9,0x8e,0x50,0xd2,0xf8,0xf5,0x0d,0x0f,0xc9,0x07,0xd8,0x1a,0x94,0x84,0xcf,0xb3,0x56,0x53,0x5f,0x83,0x1d,0x30,0xb6,0x94,0x36,0xf4,0x16,0x72,0x8c,0x6d,0x49,0xe4,0x6d,0x93 +.byte 0xb1,0xa1,0x97,0x70,0x75,0x47,0x3a,0x7e,0xa6,0x39,0x1d,0xf5,0xcc,0x37,0xaa,0x90,0x53,0xe1,0x9b,0xcb,0x9a,0x97,0x7d,0x18,0x4a,0x3c,0x1f,0x05,0xf4,0xe3,0x6f,0x7a,0x19,0x84,0xbc,0x68,0xa4,0x6e,0x5a,0xb5,0x7a,0x51,0xda,0xf5,0x75,0x1e,0xfe,0xb0,0x73,0x43,0x39,0x98,0xb7,0x1e,0x17,0x36,0x35,0x15,0x64,0x90,0xb6,0x83,0x43,0x8f +.byte 0xcd,0xb6,0x8c,0xc4,0xe4,0xee,0x0e,0x1c,0xbd,0x3a,0xe6,0x6e,0x44,0x73,0x88,0x30,0xa0,0xf0,0x97,0xf5,0x5e,0x12,0xea,0xd9,0xd7,0xb5,0xc5,0x1d,0xc7,0xc8,0x55,0xbb,0x2c,0x64,0x43,0x50,0x15,0x71,0x02,0xd3,0xf9,0xb4,0xe7,0x2f,0x0f,0x98,0x9e,0x87,0x40,0x2a,0x61,0x06,0x44,0xc2,0x47,0xaf,0x44,0x4f,0xdd,0xa3,0xb0,0xb2,0x8d,0x8c +.byte 0x83,0x96,0xd3,0x2a,0x38,0xdf,0x87,0x5d,0x1c,0x64,0xc8,0x4f,0x3c,0x41,0xc7,0xf8,0x64,0x58,0xa6,0x9b,0xcb,0xcd,0x77,0xdb,0x38,0xe7,0x30,0xb6,0x91,0x88,0xd8,0x9d,0x29,0x71,0x12,0x9e,0xdf,0x20,0xd9,0x14,0xa3,0xa0,0xbd,0x0a,0x99,0x67,0x0a,0xe1,0xe9,0xba,0xd0,0x1b,0xba,0xc8,0x8d,0x76,0x10,0xe8,0x30,0xa1,0x93,0xf4,0x95,0x6a +.byte 0x12,0xd5,0x95,0x31,0x7f,0xdb,0x33,0xfc,0xbf,0x7a,0xbe,0xe4,0xfa,0x50,0x1b,0x24,0x75,0x9b,0xf8,0x81,0x34,0xc8,0xfb,0xda,0x3c,0x6f,0x3b,0x9a,0xb2,0x6f,0x94,0x0c,0xd9,0xc3,0x05,0xd6,0x96,0x10,0x27,0xdb,0xd6,0x88,0x72,0xe4,0x8f,0xfc,0xd3,0x52,0xf8,0x63,0xb2,0xce,0xf1,0x2a,0xbc,0x1c,0x23,0x9d,0xfb,0x27,0xdd,0x8d,0xe4,0xcc +.byte 0x63,0xcf,0xad,0xe6,0xe9,0x4f,0xb8,0x8a,0x20,0x47,0x75,0x73,0x3f,0x27,0x07,0x5d,0x8c,0x8c,0x6e,0x7a,0x91,0xe2,0xf6,0xd5,0x70,0xd8,0x00,0xe5,0x0f,0xde,0x78,0xd8,0xb4,0xd3,0x18,0x5a,0x24,0x43,0x91,0x0c,0xbe,0x8b,0x1b,0x88,0x48,0x7e,0x94,0x05,0xd0,0xec,0xd2,0x71,0x26,0xc7,0x70,0xeb,0x8a,0x83,0x01,0x52,0xdb,0xe5,0x76,0x31 +.byte 0x19,0x14,0x13,0x90,0x5b,0x5a,0x94,0x89,0xe2,0x4e,0x2d,0x17,0xf6,0xbc,0x67,0xee,0x51,0xd4,0x00,0x83,0xe5,0x18,0xa5,0x54,0x6c,0xd2,0x7a,0x1f,0xdb,0x6f,0xed,0x7f,0x07,0xbb,0x9f,0x3a,0xc2,0x8c,0x04,0xf9,0x9a,0x55,0xe3,0x70,0xf3,0x36,0xfd,0x44,0x05,0xd9,0xf3,0xe1,0x87,0x2c,0x29,0xec,0x30,0x8b,0xb7,0xde,0x27,0xa4,0xcd,0xdf +.byte 0x64,0x0b,0x62,0xdf,0x34,0xa0,0xf5,0xa1,0x69,0xc9,0x0b,0x00,0x81,0xf4,0x03,0x5e,0xef,0xb8,0x26,0x49,0x71,0x5e,0xcd,0x76,0xa2,0x38,0x25,0x1f,0x92,0xc3,0xbf,0xdb,0xb3,0x29,0x37,0x06,0xc5,0xc2,0x3b,0xd8,0xbd,0x55,0xf2,0x7f,0xd5,0xd5,0x34,0x32,0xf1,0xa0,0x92,0x9b,0x1c,0xee,0x6f,0x48,0x40,0x6b,0xd1,0x45,0x09,0x3f,0xaf,0xdc +.byte 0xe1,0xac,0x75,0x9a,0x33,0xf7,0x50,0x4f,0x2c,0x3c,0x30,0x69,0x69,0x84,0xcb,0xe9,0xca,0xdf,0x8d,0x02,0x5d,0x30,0x71,0x99,0x7b,0xd5,0xb2,0x55,0xdd,0x9c,0x2f,0xae,0x11,0x41,0x01,0x6b,0xf7,0x95,0xe3,0xda,0xe3,0xcc,0xa4,0x17,0xd0,0x50,0xf9,0x4c,0x31,0x2b,0x4e,0xf7,0x49,0xbb,0x75,0x8f,0x28,0x19,0x9f,0x89,0x7b,0x78,0x80,0x41 +.byte 0x50,0x5a,0x5c,0x1e,0x82,0x93,0x9f,0x4f,0x61,0x96,0x29,0x0c,0x25,0xb3,0xe6,0xff,0x86,0x90,0x78,0x09,0x04,0xf9,0x2a,0x3d,0xa1,0xd5,0x68,0xa8,0x0d,0xd9,0x41,0x01,0xdc,0x41,0x01,0xff,0x20,0xc0,0x63,0x0b,0x4d,0xd5,0x80,0x78,0x82,0x05,0x51,0x62,0x09,0xf9,0x11,0xbd,0xde,0xc0,0x7d,0x3f,0xf2,0x30,0xfb,0x41,0x68,0x39,0xb0,0xc2 +.byte 0x2e,0x33,0x4e,0xa7,0x85,0x01,0x6b,0xd1,0xf9,0x78,0xef,0xe9,0x7c,0x0e,0xaf,0x13,0x1a,0xf5,0x97,0xde,0xf0,0xbb,0x67,0xf9,0x9b,0xab,0xee,0x86,0x73,0x9b,0x23,0x6c,0x56,0x0d,0xa0,0xda,0x4c,0xff,0x2b,0xc5,0x92,0xdb,0xee,0xbd,0xba,0x3a,0x54,0x21,0xc0,0x5c,0xfe,0x21,0xf1,0xbd,0xac,0xaf,0xa3,0x7a,0x52,0x62,0x15,0x8b,0x8f,0xb5 +.byte 0x82,0xc6,0x1a,0xfb,0x22,0xbc,0xa2,0x05,0x42,0xfe,0xb4,0x12,0x6b,0xad,0xa9,0x76,0xb7,0x6b,0x1c,0xd8,0x34,0x5c,0x7d,0xd5,0xa9,0x0d,0x91,0xf6,0xc1,0x47,0x69,0xbc,0x43,0x8f,0xb7,0xfc,0x84,0x2e,0xa0,0x8e,0x3f,0x52,0x3b,0xbd,0x1f,0x28,0x6b,0xc8,0x13,0x37,0xd6,0x44,0xe9,0x8d,0x08,0x92,0x96,0xe5,0x2c,0x57,0x34,0x59,0x21,0x04 +.byte 0xa8,0xaa,0x56,0x25,0xa4,0xc8,0xae,0x68,0x17,0x9e,0xa4,0xf4,0x42,0x64,0x57,0x4b,0x54,0x85,0x8a,0xd1,0x09,0x09,0x25,0x18,0x05,0xb0,0x09,0x9d,0xd9,0x75,0x21,0xd3,0x75,0x31,0xf8,0x35,0x46,0xc8,0xd4,0x47,0x9d,0x87,0xeb,0x40,0x95,0x19,0x24,0x7c,0x6e,0xe9,0xd5,0x14,0xaa,0xc3,0xbe,0x22,0x18,0xc1,0xa0,0x5f,0x34,0x98,0xc2,0x4d +.byte 0x3f,0xa6,0x09,0x57,0x1b,0x75,0xc6,0x89,0xee,0xf0,0xbd,0xbc,0x1a,0xd3,0xea,0x6e,0x82,0x06,0x90,0x4f,0xbb,0x61,0xac,0xbb,0x3e,0x8c,0x94,0xea,0x69,0x58,0x26,0x2e,0x17,0x78,0xad,0x14,0xa4,0x79,0x14,0xbd,0xc1,0x78,0xf9,0xbb,0x11,0x7e,0x8d,0xbf,0x3e,0xc8,0xc5,0x69,0xd7,0x5a,0x4c,0x4b,0x86,0x25,0x4c,0xe9,0x3a,0xc2,0xd9,0xf8 +.byte 0xbf,0x5e,0x46,0x4f,0xca,0xba,0x25,0x58,0x73,0x82,0x02,0x8a,0x41,0x9e,0x2d,0xa9,0x08,0xb4,0x60,0x2a,0x11,0x2c,0x2f,0x3d,0x5e,0x68,0xd8,0xa9,0x2e,0x1c,0xfa,0xdc,0xda,0xfb,0xfb,0xf3,0xb2,0x66,0xd3,0x57,0xe6,0x09,0xeb,0xe5,0xf4,0xed,0x2d,0xb7,0x3a,0xce,0x69,0x2d,0xb4,0x79,0x1a,0x99,0x9d,0xc8,0x99,0x9f,0x9b,0x78,0xd4,0x8a +.byte 0x73,0xd5,0x89,0x9f,0xda,0xdf,0xd0,0xca,0x6b,0x63,0x5a,0x1e,0xe0,0x2f,0x01,0xa4,0xd0,0x62,0xc0,0x5f,0x4e,0xd9,0xd3,0x47,0xe4,0x68,0x73,0x8c,0x87,0x50,0x91,0xec,0x8e,0x0b,0xa7,0xf0,0x4c,0x32,0x19,0xaa,0x00,0xbd,0xe4,0x20,0xab,0x5c,0x00,0xdb,0x18,0xc0,0xff,0xc1,0xc0,0x8f,0xa2,0x8c,0x47,0x91,0x86,0xde,0xa9,0x09,0xb5,0x86 +.byte 0xcc,0x1d,0x7f,0x4b,0x7d,0x16,0xf6,0x21,0xd0,0xf8,0xaa,0x16,0x20,0xa9,0xac,0x3e,0xef,0x56,0xee,0x0e,0x1d,0xd6,0x44,0x7d,0xa9,0x84,0x41,0x8d,0x69,0x69,0x92,0x74,0x87,0x3b,0x8a,0xbf,0x40,0x29,0x45,0xf9,0xa8,0x52,0x8c,0x99,0x95,0xe7,0x6a,0xcd,0x3f,0x74,0x2d,0xde,0x82,0x47,0x41,0xa6,0xd9,0x5a,0x30,0x6c,0x20,0x98,0x3f,0xfb +.byte 0x66,0x08,0x73,0x68,0xe1,0xcd,0xfd,0x3c,0x4f,0x33,0x6b,0x42,0xa4,0xab,0x78,0x22,0xb5,0xd9,0x6f,0x99,0xcb,0x85,0x6a,0x14,0xb9,0xd3,0x0f,0xfb,0xd7,0x07,0x7b,0xbe,0x6a,0xd9,0xba,0xde,0x98,0xac,0xd8,0xe5,0x40,0xcd,0x59,0x7f,0x88,0x3c,0x4e,0xfa,0xfe,0xbe,0x48,0x21,0xb5,0x40,0xd5,0xc8,0x1e,0x8a,0x56,0xd9,0xec,0x25,0xad,0x5e +.byte 0x31,0xf3,0xf2,0x3d,0x0b,0x56,0xb5,0x20,0x08,0xd3,0x02,0x81,0x93,0x29,0x3d,0xbd,0x0a,0x9c,0x26,0x74,0xdb,0x6b,0x7e,0xd1,0x4a,0x1a,0x1c,0x47,0x49,0x34,0xba,0x08,0x7a,0x6a,0xb3,0xd6,0x3b,0xd0,0x28,0x50,0xa1,0xd8,0x17,0x85,0x61,0xab,0x24,0x22,0xda,0xc8,0xb4,0x1b,0x07,0x2e,0x67,0x77,0x84,0xdc,0x6f,0xfd,0x51,0xa5,0xe8,0x34 +.byte 0x63,0xbd,0xae,0xae,0xc7,0x84,0x1d,0x60,0xc8,0x8f,0xde,0x22,0xfd,0x85,0xb4,0x12,0xb4,0x04,0x5b,0xe7,0xb5,0x58,0xf8,0x56,0x66,0xa3,0xb7,0x1e,0x54,0xd0,0xdb,0x12,0xaa,0x9c,0x89,0x5b,0xfa,0xf4,0xe7,0xe2,0xf4,0x9c,0x08,0xa8,0xbe,0x6b,0xe3,0xce,0x6a,0x88,0xb5,0x74,0xb9,0x49,0xaa,0x7b,0xcd,0xbc,0x17,0x81,0x61,0xe2,0x28,0x6f +.byte 0x4b,0xe8,0xa4,0x55,0xc5,0x1e,0x69,0x21,0x8f,0xfd,0xa8,0xd0,0xb9,0x6f,0x1b,0xfe,0x8c,0x5e,0xf9,0x7d,0xd9,0xc2,0xbe,0x0f,0x6f,0xbd,0xa7,0x94,0x10,0x4e,0xe0,0x5a,0xbb,0xa3,0x40,0x9a,0x5a,0xad,0x10,0x97,0x92,0x3b,0xbd,0xa7,0x75,0x77,0xc6,0xa6,0xde,0x42,0x00,0x3b,0xf7,0xe4,0xf4,0xd7,0xdd,0xaa,0x31,0x1e,0x64,0xae,0x17,0x0a +.byte 0x25,0xa0,0x94,0x5f,0x3c,0xbc,0x3d,0x00,0x00,0xd3,0xba,0x7b,0x98,0x81,0xe1,0xdf,0xba,0x60,0x08,0x2a,0xe5,0x66,0x08,0x3e,0xfa,0x81,0x0a,0x89,0x4e,0xe5,0x3b,0xc3,0xdf,0x21,0x9b,0x54,0xa3,0xb3,0xc3,0xc1,0xce,0xb4,0xaa,0x06,0xee,0x2e,0x34,0x55,0xcc,0x8b,0x0f,0xcd,0x1d,0x1b,0xd9,0x9e,0x59,0xf0,0x93,0xc9,0xba,0x35,0x5c,0x99 +.byte 0xf6,0x86,0x9e,0xe9,0xf8,0x84,0x80,0x05,0x76,0x6f,0x8b,0x38,0xb6,0xe0,0xdf,0x0c,0xb3,0xc7,0x6e,0x62,0x53,0xe4,0x69,0x0a,0xc1,0xcf,0x5b,0x84,0x75,0x78,0x56,0x35,0xa5,0x26,0xc6,0xae,0x76,0x2e,0xc8,0x29,0x8d,0x16,0xd1,0x4f,0x27,0x36,0x22,0x41,0x31,0xfb,0xbe,0xd0,0xf9,0x0a,0x06,0xbf,0x59,0x6e,0x06,0x20,0x0d,0x52,0x66,0x63 +.byte 0x38,0x2a,0xb6,0x15,0x0f,0x51,0x14,0x0b,0xd1,0x63,0x40,0x2a,0xfe,0x88,0x51,0x53,0x5d,0x82,0x4e,0x1b,0x91,0x30,0x7a,0x09,0xec,0xb6,0x53,0x10,0x87,0xba,0x34,0x1f,0x8a,0xf7,0x85,0x31,0x77,0x76,0xba,0x55,0x07,0x6b,0x80,0x5d,0x14,0x23,0x50,0xef,0x07,0x91,0xc5,0x71,0x3a,0x55,0x44,0x9d,0xbf,0xe6,0xab,0xde,0x7c,0xdd,0xe0,0xcb +.byte 0xcc,0xc1,0x78,0xb4,0x8c,0xd1,0x35,0x73,0x80,0x9c,0x44,0xff,0xf8,0x8a,0xaa,0x9a,0x94,0xcf,0xc9,0x51,0xfc,0xa5,0x3d,0x86,0xd6,0x67,0x71,0x1b,0xdb,0x83,0xb2,0x67,0xb0,0x17,0xce,0x13,0x1b,0x7a,0x84,0xc8,0xaf,0x69,0x7e,0xf0,0xab,0xc5,0x8c,0x37,0x12,0x43,0x33,0x5f,0xaa,0xde,0xcf,0x4c,0x73,0x7f,0x6b,0x80,0x18,0x27,0x72,0x62 +.byte 0xe8,0x3d,0x1c,0x94,0x91,0xfa,0x33,0xef,0x13,0x94,0x7f,0xb6,0x53,0xe3,0xd7,0x73,0x05,0x3e,0xe8,0x45,0xde,0x1e,0x1d,0xa4,0x41,0x11,0x0a,0x7f,0x62,0x6e,0x9f,0x9f,0xec,0xe9,0x87,0xe0,0x5d,0xbb,0xbc,0x0b,0x37,0xa2,0xf3,0x68,0x8a,0x24,0xec,0x98,0xe5,0x5d,0xbf,0xa1,0x60,0x2b,0xc2,0x74,0x4b,0x8b,0x85,0x44,0x28,0x02,0xd5,0xb9 +.byte 0xae,0x00,0x37,0x1e,0x0b,0x46,0xe6,0x40,0xf1,0xdc,0xa0,0xfc,0xae,0x04,0x7f,0xb6,0x46,0xa3,0x22,0x79,0x92,0xda,0x89,0xa0,0x38,0xf0,0xa2,0x4a,0x76,0x79,0x0c,0x46,0x4d,0xa9,0xe6,0x75,0xff,0x01,0xb3,0xe4,0x13,0xc2,0x53,0xe9,0x6d,0x1f,0xdd,0x88,0xcf,0x10,0xf5,0x16,0xef,0x05,0x59,0x51,0x15,0x49,0x17,0xda,0xff,0x0e,0xb3,0xb9 +.byte 0xae,0x79,0xc6,0xb1,0x94,0x08,0x09,0x30,0x9f,0x2a,0xfd,0x55,0xc0,0x41,0x8c,0xe5,0x0e,0xee,0xc2,0xa0,0x05,0x36,0x66,0x8d,0x9a,0xcc,0xc9,0xeb,0x1d,0x34,0xc0,0x1a,0x29,0xc2,0xcd,0xb7,0x25,0xd3,0x83,0xf8,0x1e,0xa0,0xf4,0x50,0xd4,0x08,0x0d,0xcb,0x6a,0x2f,0xa5,0x8b,0x30,0x94,0x89,0xea,0x94,0x6c,0x00,0x7e,0x7f,0xb5,0x4d,0x61 +.byte 0xa7,0x9d,0x94,0xcc,0x14,0x8f,0x75,0x1f,0xef,0x2b,0xbe,0x37,0xdd,0x19,0x41,0x2e,0x90,0x36,0x27,0xa5,0xa9,0x6c,0x75,0x8c,0x2d,0xe3,0x97,0x74,0x91,0xf3,0xb8,0xcb,0xcb,0x74,0xba,0xf0,0x57,0x70,0x89,0xee,0x4d,0xc5,0xfe,0x3e,0x60,0xe3,0x5b,0x28,0x36,0x91,0x6f,0xcd,0x6c,0x33,0xb6,0x44,0x0c,0xce,0x81,0xe4,0xdb,0x84,0xbe,0x4e +.byte 0xef,0xb8,0x75,0xf7,0x8b,0xb0,0xb7,0x0d,0x00,0x13,0x54,0x39,0xfd,0x9e,0x86,0x5c,0x59,0xd0,0x84,0x0f,0x97,0xc0,0xf8,0xfa,0x4a,0xcf,0x57,0xb8,0x24,0xf0,0xa8,0x40,0x70,0x9d,0xc4,0xe5,0xc7,0xc9,0xcb,0xb6,0xf4,0x0b,0xb5,0xcc,0xe0,0x90,0x2b,0x42,0x81,0xd6,0x59,0x2e,0x11,0xbd,0xe8,0xf5,0xef,0xa8,0x2b,0xdb,0x93,0x62,0x1e,0xef +.byte 0x3a,0x5f,0xf5,0x47,0x15,0x1f,0x03,0x6f,0x40,0x85,0xff,0x50,0x89,0x2e,0x72,0x8f,0x5c,0x0d,0x61,0x84,0x8d,0x8a,0x8f,0x2a,0x47,0x7c,0x97,0xfe,0x8a,0x97,0x6c,0xd5,0x1c,0x97,0xfa,0x59,0xbe,0x2c,0x0f,0x4d,0x85,0x7f,0x18,0xe3,0xea,0xe8,0xde,0x5a,0xf3,0x67,0xe1,0x71,0x7e,0x81,0xa3,0x74,0x0d,0xf4,0x3d,0x5a,0xec,0xc1,0xcf,0x6f +.byte 0x08,0x0f,0x5a,0x63,0x72,0x0b,0x46,0x5d,0x38,0x80,0xea,0xb7,0x12,0x5d,0xce,0x37,0x26,0xaa,0xd3,0x0d,0x93,0x4a,0x34,0x20,0xd5,0x51,0x54,0x1c,0x5e,0x53,0xa9,0xed,0x26,0x3c,0x29,0xaf,0xbe,0x73,0x34,0xa5,0xc3,0xbf,0x8c,0x8a,0xc3,0x30,0x89,0xaf,0xa9,0x2d,0x28,0x35,0x7d,0x6b,0x84,0x23,0x22,0xee,0x8c,0x82,0x04,0xbd,0x26,0x52 +.byte 0x26,0x73,0x76,0x05,0x35,0x0c,0xec,0xf7,0x54,0xb2,0x17,0x68,0xe9,0x68,0x67,0xbb,0x0d,0x98,0x19,0x32,0xa7,0xdb,0xf9,0xef,0x42,0xe7,0xc2,0xe2,0x39,0x9c,0xae,0xbb,0xdb,0x91,0x28,0x82,0x88,0x23,0x61,0x50,0x6d,0x61,0x39,0x73,0xf8,0x6a,0xee,0xf3,0xa9,0x2c,0x78,0x0d,0x5a,0xed,0xb1,0x08,0x8f,0x24,0xe5,0xb7,0xa4,0xdf,0x65,0x9a +.byte 0x72,0x3a,0x39,0x9c,0xf4,0x43,0xdc,0x8a,0xa3,0x3d,0xb5,0x1e,0x7b,0xe5,0x83,0x11,0x07,0xab,0x62,0x7e,0xac,0xab,0x52,0x94,0x0b,0xaf,0xdf,0x54,0x18,0xf1,0xc0,0x9f,0x1c,0x33,0x02,0xd9,0x62,0xc3,0xcc,0xaf,0x32,0x09,0x35,0x77,0xad,0x72,0xd6,0xb5,0x2d,0xaf,0xf9,0x39,0xfb,0x95,0xbb,0xf9,0x84,0x80,0x84,0xc8,0xc6,0x6d,0xb5,0x79 +.byte 0x25,0xf4,0x6c,0x71,0x26,0xda,0x74,0x86,0xad,0x52,0x47,0x8b,0x46,0x32,0xf6,0x2c,0x89,0xdb,0x93,0x1f,0x46,0x83,0x91,0x19,0xd2,0x0c,0x29,0x97,0x5f,0xa9,0x2b,0x87,0x0c,0x87,0x89,0xe6,0x63,0xa1,0x36,0xfb,0xfa,0xb4,0xb8,0x8e,0x5f,0xe9,0x8f,0x62,0xd2,0x81,0x1d,0x7b,0xc6,0x14,0x37,0x56,0x73,0x64,0x3d,0x0a,0xfd,0xe5,0x94,0x01 +.byte 0x09,0xc8,0x0d,0xa8,0x92,0xda,0x43,0xc4,0x41,0xca,0x3c,0x27,0x2c,0xbb,0xc4,0xb2,0x77,0x13,0xa6,0xb0,0x0e,0x97,0x6a,0xb2,0x83,0xe5,0x5e,0xa3,0xc0,0xe8,0x5e,0x0b,0xe6,0x00,0x04,0x6c,0x1b,0xac,0x84,0xab,0xd3,0xac,0x5f,0x39,0xc2,0xf8,0xfd,0x66,0xf7,0x97,0xd7,0xb9,0x6b,0xd8,0x2a,0x49,0xf7,0x67,0xd8,0xd5,0xa4,0x89,0x57,0xa6 +.byte 0x8f,0x7c,0xcf,0xaf,0xfe,0x3c,0x92,0xc8,0x23,0x2c,0x26,0x83,0x86,0x16,0x97,0x34,0x71,0x3e,0x82,0x2b,0xc7,0x75,0x5a,0x59,0xb3,0x44,0xdd,0x4e,0xd4,0x6d,0x1b,0x9f,0x3c,0x35,0xc4,0xe4,0xf2,0x95,0xb6,0x90,0x95,0xa7,0xc4,0x03,0x10,0x7d,0x3d,0xeb,0x74,0x29,0xaa,0x0c,0xd3,0x27,0xcd,0x3a,0x85,0x3c,0x88,0xd5,0x9a,0x46,0x84,0x8e +.byte 0x36,0xde,0xe3,0x6a,0x27,0xbf,0xc3,0xd0,0x3e,0xa3,0x0e,0x62,0x1f,0xdf,0x4c,0x02,0xa7,0x11,0x91,0xb0,0x6b,0x50,0xc1,0xe0,0x18,0x5a,0xc0,0x10,0xc7,0x1c,0xb6,0x36,0xac,0xe7,0x7d,0xad,0x34,0x63,0x4f,0x17,0xcc,0x41,0x30,0xec,0xd7,0x14,0xb9,0xfe,0x07,0x5c,0x3d,0xbe,0x08,0x77,0x5b,0xdf,0xa3,0x20,0x56,0x55,0xa2,0x8a,0xe7,0x0d +.byte 0xf6,0xfc,0x91,0x37,0xb8,0x92,0x6c,0xd9,0x5c,0xb0,0xc2,0xf7,0xc0,0x38,0xfa,0x54,0xc6,0xa1,0xd3,0x4d,0xae,0x49,0x0d,0xd1,0xc0,0xef,0xbe,0x27,0xce,0x23,0x8e,0xf2,0x9b,0x68,0x02,0x67,0x8f,0x53,0x9d,0xf6,0x23,0x57,0x85,0xdd,0x8d,0xd7,0xcb,0x47,0xf1,0xd8,0x17,0xd8,0x46,0x72,0x28,0x4b,0xac,0x94,0xd3,0x5d,0x53,0x4f,0x06,0x19 +.byte 0xc6,0x0e,0x0b,0x9f,0x58,0xc6,0x3f,0xea,0x4e,0x83,0x5e,0xd3,0xcc,0x44,0x55,0xa3,0xc7,0x24,0x19,0xea,0x1b,0x18,0xc1,0x18,0x5f,0x21,0x67,0x73,0x32,0x4e,0x31,0x69,0x05,0x40,0x79,0x7c,0x05,0x13,0xdd,0x50,0xea,0xfa,0xc2,0x26,0xe2,0x33,0xff,0x34,0x0d,0xda,0x77,0x27,0xe0,0xe7,0xa6,0x7b,0x8e,0xcd,0xdb,0x92,0x48,0x3a,0x2d,0x52 +.byte 0xf5,0x59,0xca,0xc7,0x47,0xda,0xb7,0xc7,0x8c,0x37,0x5e,0x29,0x30,0xf5,0x57,0x74,0x8b,0x10,0xcb,0x20,0x31,0x4b,0x12,0xe3,0x84,0xd2,0xb2,0xc3,0xd0,0xe3,0x94,0x18,0xa2,0xdc,0x8f,0x4d,0xc3,0x0a,0x43,0x07,0x2c,0x6b,0x41,0x64,0xc0,0x35,0x8f,0x37,0x9b,0xd7,0x78,0xab,0xd0,0xdc,0x1f,0x77,0x55,0xab,0x71,0xc8,0x99,0x98,0x00,0x29 +.byte 0x1c,0xab,0x3c,0x5f,0x82,0x96,0xc2,0xc8,0x9b,0xd4,0x68,0x3f,0x3d,0xe6,0x5a,0x4c,0x1c,0x7b,0x51,0xa3,0x79,0xe8,0x0e,0x8a,0x78,0xdc,0x98,0x63,0x80,0x74,0x32,0x9d,0x7c,0x3a,0x79,0x54,0xa7,0x4c,0xa4,0x4e,0xfc,0xa5,0x8a,0xa4,0x19,0xce,0x84,0xbb,0x8a,0xb9,0x93,0x4a,0x2d,0x82,0x5d,0x1d,0xf8,0x2f,0x85,0xb3,0x90,0x32,0x61,0x6d +.byte 0x13,0x33,0xac,0xbc,0x5d,0x3a,0x54,0x45,0x04,0x50,0x30,0x30,0xc7,0x58,0xbe,0xed,0xdd,0xa1,0xae,0x6d,0xe5,0xde,0xed,0x63,0x9f,0xd4,0x2b,0x8d,0x1f,0x69,0xde,0xda,0x55,0x3f,0x3b,0xe7,0xc8,0x73,0xc0,0x68,0x18,0x6a,0xb3,0xfb,0xce,0xaf,0x46,0x0a,0xcc,0x81,0xa8,0x96,0x6d,0xb6,0xa4,0x74,0xf3,0x8c,0x95,0x2d,0xa1,0xfe,0x09,0xb8 +.byte 0xdb,0x3c,0xcd,0xdc,0x5b,0x0e,0x2d,0xff,0x89,0x8a,0xfd,0x7a,0xe9,0x69,0x0b,0xdd,0x4e,0x9b,0x94,0x64,0xe4,0xb6,0x5d,0x69,0xef,0x9c,0xf6,0xe6,0x44,0x73,0xd5,0x86,0x47,0x63,0x77,0x3e,0x74,0xaa,0xf3,0x6b,0x1f,0x37,0xbf,0xef,0xa2,0xff,0x86,0x61,0x78,0xc4,0xb5,0xbd,0x5a,0x43,0x49,0x80,0x16,0xf2,0x4c,0xec,0x1e,0x07,0x0f,0x41 +.byte 0x60,0x6f,0x3a,0xd2,0xab,0x85,0xc0,0x5c,0xfc,0x9f,0x48,0xad,0x5e,0xe0,0x7d,0x66,0x8e,0x46,0xf1,0xc3,0xb0,0xbc,0x5e,0x3b,0x10,0x7c,0xfc,0xa3,0x27,0xbd,0x8f,0xae,0xd9,0x61,0x39,0xbf,0xca,0x27,0xbb,0xe7,0xda,0x59,0xa8,0x63,0x38,0x16,0xd9,0xb5,0xa6,0xd9,0x1c,0x2b,0xa1,0x42,0xec,0x50,0xd7,0x63,0x09,0x22,0xe0,0x0c,0xb8,0xec +.byte 0x12,0x9b,0xdb,0x8a,0xd3,0x02,0xcf,0x32,0xa9,0x88,0xa4,0x31,0xc8,0xa9,0xf4,0x03,0xf2,0x9d,0xe1,0x41,0xf0,0x0f,0x23,0x65,0xa8,0x99,0x55,0x87,0xf2,0x17,0x66,0xf0,0x94,0xe8,0xe9,0xb6,0xfd,0x10,0xb9,0x55,0xf4,0xda,0x06,0x7a,0xbe,0xe2,0xd3,0xfa,0xb8,0xf7,0x85,0xdf,0xee,0x39,0xdc,0x0f,0xda,0x87,0xf5,0x66,0xd8,0x1b,0x5c,0x0c +.byte 0x13,0xe8,0xa2,0xcd,0xdf,0x47,0x33,0xd7,0xf4,0x5c,0x79,0xc7,0xf4,0x68,0xe4,0x2d,0xa1,0xde,0x5c,0x06,0x1c,0x85,0xf1,0x2a,0xf9,0x73,0x44,0xbc,0xd3,0x57,0x4f,0x0f,0xcd,0xcc,0x40,0xeb,0x9d,0x35,0x8e,0xdf,0x1d,0x4a,0x61,0xd0,0x66,0xb5,0x16,0xce,0x45,0xc0,0xbf,0x01,0xe3,0xb2,0x51,0xba,0x53,0x18,0x2a,0xff,0x19,0xea,0x41,0xa2 +.byte 0xac,0x0b,0x50,0xd3,0xc1,0x6a,0x9c,0xb0,0x34,0x6f,0xa0,0xcb,0xc7,0xc6,0x79,0x5d,0x17,0x3a,0x4c,0xa3,0x16,0xdc,0xac,0x10,0xf0,0x24,0xad,0x9a,0x5b,0xa9,0x7e,0x45,0xcd,0xe9,0xad,0x87,0x04,0xbc,0x2a,0x05,0x59,0xd1,0xdb,0x86,0x22,0x40,0xdf,0xb1,0xff,0x8d,0x3c,0xf8,0x6a,0xf3,0xcb,0x60,0xf9,0x35,0xa6,0x42,0x81,0xcb,0x0f,0x7c +.byte 0xf7,0x24,0x3b,0x0c,0x94,0x32,0xd9,0xec,0xcf,0xd1,0x31,0x3e,0x3e,0xeb,0xa9,0xf2,0x1f,0x2d,0xa7,0x89,0xf7,0x67,0x7d,0x90,0x9d,0x40,0xf2,0xdb,0x07,0x8f,0xb8,0x6f,0xfd,0x78,0x6e,0xd0,0x9e,0xd5,0x7d,0xb0,0x7d,0x65,0xdc,0x6e,0x50,0xec,0x7a,0x5c,0x2c,0x3e,0x6f,0x64,0xa3,0x10,0x34,0xf7,0x71,0xc8,0x82,0xb6,0x96,0xb8,0xb1,0x2a +.byte 0xb4,0x03,0x95,0x75,0x90,0xac,0x6c,0x81,0x17,0x97,0x06,0xd0,0xb8,0xc5,0x98,0xc5,0x9e,0x46,0x07,0x13,0x02,0x9e,0x47,0x69,0xba,0x85,0x2d,0x09,0x86,0x50,0xe4,0x76,0xb1,0xa2,0xbe,0x8b,0x91,0x6b,0x3b,0x76,0xa3,0xb7,0xf5,0x7f,0xfe,0xf1,0xa4,0xf3,0xc3,0x53,0x64,0xef,0x97,0x86,0x96,0x8b,0xc4,0xae,0x06,0x8b,0xe8,0x3c,0xdc,0xff +.byte 0xfa,0xad,0xcb,0xcb,0x53,0x15,0xf2,0xcc,0x9f,0x48,0xf9,0x57,0x6a,0xcd,0xb2,0xee,0x46,0xc0,0xbf,0x82,0x58,0x60,0xda,0x2f,0xbd,0xde,0xc7,0x41,0xcb,0xf1,0x38,0x56,0x9d,0x38,0x38,0x3d,0xea,0x5e,0x38,0xf1,0xd0,0x02,0x35,0xee,0x4c,0x2f,0x1d,0x19,0xbd,0x08,0x01,0xc3,0x8f,0x75,0xe2,0xf3,0x93,0xbb,0x76,0x6b,0xd7,0x87,0x76,0x7f +.byte 0x3b,0x29,0x08,0x9f,0x3a,0xa5,0x44,0x96,0x5a,0xb3,0x78,0xa9,0xbe,0xf7,0x5d,0xda,0x06,0x37,0x98,0x5d,0xbe,0x6e,0xec,0x58,0x53,0xd1,0xa5,0xd7,0x7a,0x16,0xb1,0x59,0x98,0x42,0x37,0x76,0x1b,0xd6,0x2e,0xa7,0xdc,0x45,0xa6,0x9c,0x9c,0x99,0x24,0x0e,0x22,0xae,0x94,0x65,0xeb,0x4e,0x64,0xc3,0xb0,0xac,0x19,0x41,0xf1,0x62,0x65,0xb2 +.byte 0x35,0xf5,0x2f,0xdb,0xd2,0xf0,0x78,0x19,0x35,0x04,0x6f,0x9c,0xf4,0xaf,0x81,0x68,0x4f,0x8b,0x85,0xfa,0x31,0x23,0x06,0xeb,0x37,0x86,0x43,0x51,0xb3,0xd2,0x2a,0xd7,0xd5,0xa9,0x33,0xba,0xfd,0xb5,0x0e,0x6d,0x9a,0x91,0xf9,0xe7,0x27,0xb7,0xff,0xe6,0xe7,0x34,0xc5,0x1a,0xa3,0x45,0x3b,0x71,0x34,0x87,0x7e,0xe7,0xab,0x74,0xc5,0xff +.byte 0xeb,0x23,0x8f,0x3f,0x5d,0x1c,0x91,0x47,0xeb,0x3e,0x5f,0x5a,0xa6,0x5a,0xde,0xa9,0x5f,0xf4,0x8f,0x95,0xc6,0x25,0x3c,0xd5,0xaf,0xfd,0x4d,0x33,0x68,0xe1,0xa3,0x51,0x1b,0x07,0xad,0xb9,0xec,0xf1,0x50,0x51,0xbf,0xeb,0xe8,0x58,0x2a,0x50,0x0e,0x9d,0xc2,0x8a,0x83,0x8c,0xb0,0xb8,0xde,0x1d,0x7b,0x0f,0xff,0xfc,0xfc,0x31,0xe5,0x62 +.byte 0x40,0xc8,0x28,0x30,0x31,0xc9,0x82,0xab,0xbe,0x50,0xe5,0xfe,0x1f,0x49,0x17,0xf9,0xea,0x23,0xc7,0x6d,0x8d,0x63,0xc3,0x70,0x40,0x32,0x0b,0x48,0x7a,0xd9,0x03,0x52,0x1b,0xf4,0x90,0xd6,0x6d,0xd2,0xfc,0xec,0x24,0x7f,0x21,0x2e,0xd4,0xb5,0x60,0x44,0xd9,0x83,0xb0,0x3e,0x75,0x8a,0x6a,0x09,0xab,0xa8,0x4f,0x48,0x3c,0x2b,0x89,0x30 +.byte 0x29,0xdb,0x1a,0x8e,0x68,0xe4,0x89,0xed,0x10,0xe8,0x46,0xa7,0xf9,0x5f,0x7d,0x42,0xe0,0x8d,0xbc,0x3d,0x4d,0xd8,0x06,0x4a,0xf9,0xbb,0x97,0xa7,0xdb,0x24,0x0b,0xfc,0x49,0x92,0x5d,0x80,0xf8,0xed,0x57,0xc7,0x1e,0x82,0xed,0x41,0xb8,0xfd,0x71,0xb9,0xa5,0x11,0x52,0xdd,0x1e,0xa4,0xf1,0x02,0xc7,0x54,0x7c,0xdc,0x37,0x9f,0xfe,0x37 +.byte 0xe8,0xa5,0xcf,0xb0,0x3d,0x25,0x3f,0x24,0xfe,0xf2,0x63,0x97,0x3c,0x13,0xdc,0x31,0x78,0x07,0xf1,0x8e,0xee,0xc6,0x00,0xf8,0xfd,0x84,0x53,0x4d,0x92,0xa1,0xef,0xd0,0xb1,0x12,0x0a,0x12,0x91,0xeb,0x52,0xdd,0x6e,0x15,0x98,0xd2,0xe1,0x53,0x7a,0x0e,0x02,0x83,0xd3,0xd1,0xde,0x72,0x6e,0x5b,0x4b,0x8d,0x40,0xe3,0x2d,0x22,0x59,0x9d +.byte 0xee,0xbe,0x43,0x18,0x62,0x8c,0x77,0x18,0x91,0xf5,0x9e,0xbc,0x3e,0x8b,0x77,0xb6,0xdb,0x5c,0xcb,0xcd,0xdb,0x36,0xea,0xf5,0x1d,0x9b,0xa7,0x13,0xef,0xda,0xd0,0xe8,0xd8,0xb2,0x4c,0xc6,0x19,0x3d,0x77,0x2d,0x0d,0xad,0xe4,0x32,0x24,0xe9,0xd4,0x7f,0x72,0x1d,0xc6,0x6e,0x83,0x7d,0xb8,0x62,0x64,0x9d,0x9a,0xd7,0x13,0x93,0x92,0xf1 +.byte 0x37,0x98,0xcf,0x44,0x66,0xab,0xd1,0x61,0x6c,0x08,0xa7,0x41,0x4e,0x37,0xc1,0x67,0xfb,0x7c,0x22,0x8f,0xbd,0x93,0xb2,0x09,0x13,0xa0,0x48,0x60,0xaf,0xda,0x73,0x2b,0xa3,0x2a,0xf3,0x4d,0x8e,0x22,0x5b,0x7a,0x32,0xe6,0xca,0xff,0x0e,0xa1,0x0a,0x15,0x33,0x31,0x50,0x71,0x1c,0x85,0x26,0x9b,0x19,0xf2,0xe3,0x69,0x4e,0x2d,0xff,0x79 +.byte 0x80,0xfe,0x2c,0x2f,0x7a,0x49,0x95,0xf3,0x0e,0x78,0xb1,0x0c,0x1c,0x45,0x59,0x68,0x2a,0x37,0xf2,0x48,0x6f,0xd9,0x32,0xf7,0xfc,0xdc,0xbe,0xe3,0xdd,0x61,0x17,0xc0,0x08,0x9d,0xbc,0x2d,0x8d,0x24,0x1c,0xbb,0x53,0xbe,0x37,0x59,0x30,0x87,0xa0,0x14,0xf5,0x08,0xcf,0xd1,0xcc,0x84,0xa7,0x0f,0x69,0xe0,0x77,0x8c,0x0d,0xdc,0x82,0xe5 +.byte 0x88,0x9a,0x58,0x05,0xe3,0x4f,0xdd,0x55,0x1e,0x6e,0x90,0xd5,0x3c,0xa6,0xa6,0x10,0x24,0xe5,0x58,0x97,0xdc,0x31,0x87,0x39,0xdc,0x3a,0xe6,0x24,0x64,0x23,0x45,0xd8,0x01,0x1b,0xf6,0x38,0x68,0x9e,0x62,0x53,0x00,0x97,0x71,0x04,0xb5,0x3b,0x54,0xdb,0xb5,0xcb,0x30,0x91,0x14,0xce,0x94,0xd5,0xe0,0x96,0x70,0x99,0xa5,0xed,0x69,0x32 +.byte 0xc7,0xb7,0x14,0xff,0xc0,0xde,0x19,0x5d,0x31,0xdb,0xa7,0xc0,0x7a,0x94,0xec,0x60,0xfc,0x52,0x71,0x69,0x9b,0xd8,0xbe,0x97,0x0b,0xb5,0x70,0xa7,0x47,0x11,0x37,0x84,0xda,0x3c,0x23,0xfe,0xf2,0x53,0xad,0x55,0x71,0x1e,0x70,0x9b,0x7b,0x61,0x97,0xf8,0x71,0xc4,0xad,0x72,0x98,0x43,0x0c,0x33,0x30,0x2c,0xb2,0xd6,0x21,0x8d,0xbb,0x1b +.byte 0x85,0x82,0x24,0x14,0x85,0x95,0x88,0xff,0x3f,0x8c,0x88,0x96,0xa0,0xf8,0xd7,0x36,0x78,0x37,0x6d,0x92,0x09,0x04,0x76,0x27,0xb9,0xd5,0xea,0x0f,0x07,0x9f,0xe1,0x49,0x0e,0xd1,0x9c,0x46,0xcd,0x2b,0x7a,0x57,0xb6,0x56,0x39,0xe5,0x59,0x6b,0x1b,0x39,0xbf,0x15,0x3b,0x56,0xf5,0xc2,0x08,0x96,0xf5,0x63,0x4c,0x31,0x33,0x65,0x8b,0x74 +.byte 0x4e,0xde,0xa8,0x20,0xe0,0x7c,0x27,0xee,0x91,0x74,0xe8,0x24,0xb3,0xcf,0xa3,0xd4,0xf1,0xb9,0x18,0x43,0x05,0x5d,0x13,0x36,0x82,0xd1,0xbf,0x16,0x89,0x48,0x83,0xf0,0xcc,0x5c,0xbb,0x75,0x7e,0x71,0xc0,0x73,0xd1,0xf5,0x00,0x38,0x7f,0x10,0x98,0xd6,0xb9,0x14,0xea,0xd3,0x3f,0x0f,0xe3,0x61,0x1a,0x5e,0x21,0xd0,0x11,0x58,0x68,0x47 +.byte 0xf2,0xe5,0xe9,0x65,0x9a,0xc1,0xf4,0xa0,0x98,0x8e,0x9f,0x7f,0xbe,0x7e,0xd0,0xb6,0x88,0x4e,0xce,0xc1,0x8b,0xd4,0xd3,0x93,0xb7,0xd8,0xf3,0x0b,0xf3,0x73,0xc9,0x08,0x2f,0xcf,0xd8,0xbd,0xa6,0x1d,0x7c,0xfa,0x44,0x82,0x9f,0x03,0xca,0x56,0x3b,0xbf,0x4d,0x1e,0xbc,0x06,0xc2,0x37,0xfb,0xde,0xd3,0xa9,0xe3,0xae,0x61,0xef,0x26,0x7d +.byte 0xbd,0x2f,0xee,0x2d,0xe1,0x65,0x71,0x77,0xab,0x9c,0x96,0x4f,0x00,0xe2,0xde,0xd7,0x05,0x54,0x00,0xb6,0xaf,0x12,0x0c,0x79,0x1a,0xed,0x20,0x72,0xc7,0x3b,0x3a,0x10,0x15,0x74,0xff,0xbd,0xf8,0xaa,0x8f,0x3a,0x83,0x39,0x24,0xfa,0x53,0x2d,0xc3,0x61,0xfc,0x12,0x6b,0x54,0x33,0xbf,0x83,0xc9,0x59,0x00,0xf0,0xdc,0xa8,0x64,0xbc,0xb5 +.byte 0xc3,0x96,0x60,0x3e,0x7b,0xe2,0x08,0x19,0x92,0x17,0x80,0x9b,0x0c,0x09,0x49,0x68,0x8b,0x15,0xe3,0xce,0x0c,0xfa,0x0c,0x8b,0xf0,0xdc,0x58,0xb0,0x7b,0x82,0x85,0xd2,0x56,0x1c,0xfb,0xb5,0xd0,0x0e,0x0a,0x55,0x61,0xda,0xd8,0x20,0xc1,0x79,0x70,0x3c,0x69,0x8e,0x49,0x5f,0x1c,0xdb,0x22,0xb8,0xdd,0x4c,0x4f,0xca,0xe9,0x0f,0x9a,0x4e +.byte 0xff,0x56,0xbc,0xcf,0x72,0x09,0xa6,0x41,0x38,0xf0,0x7d,0xe7,0x45,0x0a,0x71,0x2c,0x92,0xdd,0x21,0x17,0xb2,0x3b,0x31,0x3c,0x91,0x11,0x69,0x29,0x50,0x31,0xe6,0xa6,0x10,0xc7,0x35,0xe8,0x44,0xec,0x74,0xa3,0x7e,0xb6,0x34,0xe5,0xb7,0xba,0xdf,0x5b,0x2f,0x85,0x02,0x6c,0xb0,0x71,0xb1,0x43,0xff,0x0e,0x47,0x04,0x63,0x4d,0x5b,0x81 +.byte 0x81,0x28,0x8b,0x84,0x79,0xad,0x2a,0x45,0x00,0x1c,0x0c,0x9f,0xef,0x35,0xbb,0x6d,0xc5,0x6a,0x6b,0xef,0x2b,0xae,0x78,0x66,0x05,0x7a,0x61,0x4c,0xe9,0x5e,0xf7,0x95,0x66,0x7e,0x1a,0xa7,0xdf,0x4c,0x4d,0x7c,0x66,0xa5,0x38,0x84,0x86,0x8d,0x66,0xcc,0x7f,0x32,0xb2,0x9c,0xc5,0x0d,0x3d,0xb7,0xb1,0xa6,0xc5,0x80,0x68,0xaf,0x79,0x81 +.byte 0x15,0x8f,0xec,0x50,0x5c,0x1b,0x57,0x31,0xd2,0xb9,0x16,0x66,0xf8,0x16,0xfd,0xcd,0xc7,0xa8,0x84,0x6f,0x35,0xea,0x3f,0xa4,0x72,0x8d,0xad,0xf4,0xd1,0x14,0x46,0xcc,0x06,0xed,0x71,0x39,0x07,0x99,0x28,0xc8,0xf9,0xc4,0xc2,0xec,0xde,0xb8,0x92,0xae,0xc5,0xf8,0xb2,0x49,0xc9,0x32,0x58,0xec,0x9f,0xb0,0x59,0xaf,0x49,0xef,0xe8,0x0d +.byte 0x4c,0x56,0x8d,0xf7,0x57,0xb0,0x09,0xbe,0xc2,0x6a,0x62,0xc4,0x87,0xf3,0x20,0x07,0xc9,0xe3,0x3b,0x31,0xcc,0x8d,0xcf,0x5d,0x18,0x00,0x2a,0x9f,0xde,0x80,0x1a,0x7e,0x95,0x93,0xd1,0xbd,0xe6,0xd4,0x69,0x37,0x96,0xbb,0x70,0xc5,0x3c,0x87,0x8f,0xff,0x95,0x97,0xfe,0x95,0x56,0x7b,0xba,0x03,0x3d,0x29,0x0f,0xdb,0xd0,0x65,0x4f,0xf8 +.byte 0xa8,0xf3,0x42,0x09,0xb5,0x81,0x34,0xc6,0xa9,0x60,0xb9,0xef,0x3e,0x9d,0xc5,0x42,0x1e,0x79,0x5d,0x2b,0xf2,0x46,0x0d,0xeb,0x88,0x84,0x8f,0xad,0x60,0x69,0x57,0x49,0x33,0xb4,0xdd,0xfe,0x10,0x65,0x65,0x51,0xaf,0x68,0xa0,0xce,0xbd,0xe1,0x6e,0x03,0xe1,0x5f,0xba,0x3f,0x36,0xca,0xed,0x20,0x95,0xfa,0xff,0x3c,0x65,0xa8,0xb1,0x6b +.byte 0xc5,0x91,0xa0,0xd5,0x36,0x38,0x1c,0x38,0xe9,0x1d,0x1b,0x67,0x4c,0x17,0xd3,0x29,0x92,0xa2,0x27,0x76,0x3d,0xe2,0x26,0x37,0x2a,0x2c,0xf6,0xee,0x64,0x40,0x8a,0x1c,0x2b,0xc1,0xd3,0x28,0xd0,0xcf,0x2d,0xc2,0x45,0xf4,0x37,0x5a,0x63,0xfb,0x18,0x67,0x01,0x0a,0xe8,0xe2,0x41,0xf7,0x15,0x47,0xa7,0xe9,0xc8,0x05,0xbc,0xc7,0x8f,0xf0 +.byte 0xc3,0xc5,0x9a,0x4e,0x0d,0x7b,0xf0,0x20,0x8c,0x21,0x49,0x99,0x0d,0xf7,0x34,0x84,0x35,0xfb,0x11,0x33,0xd6,0x46,0x14,0x3c,0xf1,0xb3,0x37,0xac,0x75,0x63,0xe7,0x1a,0x19,0xa4,0x49,0xf2,0x58,0x1d,0x56,0x55,0x64,0x46,0x25,0xff,0x7d,0x90,0x34,0x21,0x5d,0x00,0xa1,0xa8,0xaa,0xe0,0x93,0xe7,0xda,0x11,0x34,0x1d,0xa3,0x0c,0x67,0xae +.byte 0xf5,0x60,0x72,0x14,0xdf,0x08,0xf6,0x72,0x3e,0x48,0x41,0x3d,0x00,0x58,0xfb,0x0c,0x15,0x80,0x2d,0xd9,0x72,0x47,0xa6,0x20,0x6a,0x74,0x9e,0x06,0xb9,0xac,0x68,0x3a,0xe7,0xf1,0x19,0xb8,0x0b,0x66,0x07,0x4d,0xa0,0xb5,0xab,0xea,0x70,0xa1,0xdf,0x41,0x76,0x85,0x18,0x5b,0x6f,0x78,0x5a,0x5d,0x08,0xe0,0x1b,0xd8,0x06,0x73,0x1e,0x16 +.byte 0xcb,0xdb,0x02,0xf8,0x96,0x64,0x65,0xc5,0xc1,0x52,0xd4,0xd8,0xb3,0x1e,0xd4,0x09,0xfd,0xa7,0x30,0x41,0x5a,0xce,0x53,0x4d,0x11,0xc8,0xdd,0x13,0x50,0xd5,0x2e,0xa0,0xe6,0x48,0x49,0x31,0x4b,0x1d,0xce,0xfc,0x42,0xed,0x8f,0xc8,0xb3,0x0a,0xae,0x1d,0x4c,0x1e,0x4f,0x39,0xa4,0x37,0xc8,0x54,0xdf,0x40,0xa6,0x42,0x61,0x7d,0x34,0xd4 +.byte 0x75,0x0a,0x9f,0xf0,0x33,0x54,0xf3,0xc4,0xdc,0x4e,0x2f,0x81,0xc2,0x20,0xaa,0x4f,0xa0,0xae,0xa6,0xb8,0x50,0xf8,0x45,0xf1,0xf2,0xd1,0xd2,0xcf,0xc8,0xf0,0xf4,0x54,0x37,0xdc,0xfb,0x13,0xdf,0x38,0xc2,0x3f,0xe0,0x59,0xb5,0x9a,0x0f,0x27,0x87,0xd4,0xd3,0xdc,0xfd,0xda,0x1d,0xfa,0xdd,0x12,0xe0,0x7f,0x34,0x01,0xde,0x28,0xf5,0x0e +.byte 0xff,0x59,0xc7,0xbd,0x6a,0xe4,0x0c,0x85,0x7b,0x87,0xf9,0xd7,0xe2,0xed,0xb2,0xf7,0xb7,0x13,0xfb,0xfc,0x4d,0x25,0x52,0xfd,0x23,0x6b,0x10,0xd0,0x80,0xd8,0xbd,0xbd,0xf0,0x87,0xfc,0x38,0x85,0x83,0x20,0x5f,0x7c,0x26,0x14,0x93,0xd3,0xe1,0xdc,0xa4,0xda,0xa7,0xf9,0xfd,0x6c,0x9a,0x2b,0x75,0x82,0xf1,0x9f,0x1b,0x0c,0x43,0xd4,0x2d +.byte 0x5b,0x0c,0x54,0x7e,0x61,0x24,0x8e,0x50,0x25,0xd8,0x54,0xfd,0x30,0xec,0x4c,0xa8,0xb6,0xf0,0x35,0x67,0xf7,0xe4,0x3c,0xfd,0xc8,0x40,0xf4,0x2d,0xc5,0x4d,0xc3,0x29,0xc2,0x88,0x60,0xab,0xd9,0x2a,0xe8,0x31,0xcc,0x0c,0x9f,0x97,0xa8,0x2e,0xaa,0xa5,0xb6,0xee,0x3c,0x71,0xa9,0xff,0x90,0xb4,0x43,0x2e,0x16,0x80,0x8c,0xfe,0xb5,0x7a +.byte 0x40,0x58,0xd5,0x98,0x7e,0xca,0xaf,0x95,0xee,0x00,0x26,0x8d,0x5b,0xba,0x33,0xee,0x35,0xb5,0x9b,0xf8,0x08,0x1e,0x15,0x2d,0x01,0xb1,0x83,0xa6,0x57,0x58,0xd1,0xf3,0xa4,0xf1,0x3a,0x00,0xf4,0x40,0xee,0x35,0x3a,0x20,0xc2,0x13,0x1e,0xda,0x32,0xc2,0x35,0x74,0x29,0xce,0x51,0x3f,0xec,0xb2,0xd7,0x23,0xa7,0xc6,0xef,0x70,0xb9,0x88 +.byte 0x6f,0xa8,0xf5,0x5b,0xff,0xc5,0xf5,0xb4,0x3b,0x12,0x75,0x20,0xbf,0x61,0x8a,0xb1,0xae,0x01,0x9b,0x17,0xf4,0xf3,0x2d,0xfb,0x44,0xe8,0xac,0x29,0x81,0xc2,0x6d,0x50,0x05,0x11,0xd9,0x43,0xf8,0xc7,0x58,0x5d,0xbc,0x2d,0xc0,0x83,0xd2,0x81,0x41,0x1c,0x46,0x62,0x60,0x6e,0x65,0x52,0x4b,0x1c,0x88,0x72,0x1b,0x0e,0x8e,0x7d,0xa2,0xb5 +.byte 0x4e,0x28,0x32,0xf2,0xb1,0xfa,0xf1,0x4b,0xc5,0x85,0x95,0x2c,0x08,0x78,0x85,0x68,0xe5,0x20,0x23,0x8b,0xc4,0xf5,0xb2,0xdb,0xc1,0xdd,0xe5,0x69,0xa4,0x97,0xa9,0x6c,0x2e,0x3a,0x25,0x1c,0x24,0x54,0x97,0x3e,0x8d,0x61,0x61,0xa3,0x60,0xf5,0xd2,0x4e,0x90,0x25,0x06,0x09,0x31,0x7b,0x96,0xce,0xcc,0xb7,0xbc,0x63,0x9f,0x04,0x7d,0xec +.byte 0xa1,0x4a,0x65,0xd3,0x26,0xe1,0xbf,0xf9,0x88,0xea,0x5c,0x5d,0xfe,0xe9,0x60,0x77,0xbd,0xf2,0xa0,0x11,0x91,0x24,0xca,0xa1,0x0d,0x05,0x7b,0xe2,0x7d,0x22,0x2e,0xd2,0xc9,0x4b,0x78,0xce,0x0c,0x7b,0x49,0xaf,0xd6,0x59,0x5f,0xb4,0xbd,0x2e,0x4a,0x22,0xcb,0x5d,0x1c,0xd5,0xde,0xea,0x86,0x74,0xd5,0x15,0x52,0x59,0xfc,0x3d,0x7b,0x1c +.byte 0x3f,0x14,0xec,0xf2,0xc8,0x3c,0x88,0xbf,0x89,0xd5,0x23,0xc3,0x94,0x3c,0x28,0x04,0x91,0x6c,0x36,0x35,0x4b,0x75,0xf8,0xdc,0xf3,0xff,0xba,0x8c,0xa4,0xc7,0x85,0xc5,0x1a,0x30,0x4b,0x7c,0xc5,0x2f,0xb9,0x2a,0x14,0xaa,0x65,0xe3,0x92,0xdc,0xe1,0xed,0x3f,0xb6,0xff,0x0e,0x74,0xe0,0xb3,0xc9,0x4b,0xd1,0x96,0xfc,0x49,0x72,0xbe,0xb0 +.byte 0xc8,0x4a,0xd5,0xf0,0xb3,0x58,0x29,0x35,0x97,0xd4,0x5c,0xc7,0x0b,0x27,0x1d,0x14,0xdb,0xb7,0x5c,0x7e,0x6d,0xc1,0x56,0xa9,0x80,0x72,0x7d,0x75,0xc2,0x2f,0x07,0x28,0xb4,0xff,0xef,0xa7,0x34,0xed,0x31,0x44,0x85,0xe6,0xc3,0xa4,0x5f,0xe2,0xe8,0xab,0xd1,0x59,0xe7,0x32,0x20,0xd1,0xcc,0xef,0x6f,0xe1,0x10,0x89,0x6c,0x0c,0xf3,0x5f +.byte 0xe8,0xc7,0x1c,0x3b,0xeb,0x3e,0xa5,0x53,0x2d,0x48,0x64,0x92,0xa0,0xec,0xf3,0x75,0x5b,0x5b,0xe2,0x83,0x87,0x04,0xa7,0xd8,0x1b,0x44,0xfb,0x42,0xee,0xd8,0xf2,0x98,0xff,0x30,0xc8,0x09,0xf8,0x1a,0x95,0x46,0x2d,0xe7,0x43,0x10,0x90,0xf4,0x2c,0x8f,0x0b,0x60,0x6d,0xeb,0xbf,0x19,0xc1,0x9d,0x5c,0xc0,0xff,0xb1,0x86,0xbc,0x01,0x73 +.byte 0x35,0x1f,0xd8,0xf4,0xa1,0xd4,0x7f,0x2d,0x1b,0xf9,0xa6,0x78,0x1a,0x2e,0x2c,0xe2,0xcc,0x8b,0x5f,0xbb,0xb9,0x80,0x31,0x32,0xa5,0x5d,0x70,0x59,0xae,0xe3,0xac,0xab,0xde,0x38,0x09,0x07,0x57,0x5f,0xbf,0xe8,0xa0,0xb8,0xd0,0x03,0xac,0x02,0x0d,0x7f,0x7e,0x0c,0xd2,0xcf,0x46,0x01,0x07,0x9f,0x16,0xf6,0x2b,0x94,0xaf,0xae,0x66,0x09 +.byte 0xca,0x4c,0x5f,0x37,0x53,0xa6,0x50,0x82,0x3a,0x0a,0x7b,0xb3,0x52,0x2e,0x0f,0xe4,0x64,0xab,0x40,0x21,0x2d,0xb7,0x20,0x9b,0xe3,0x2f,0xec,0x2b,0xb3,0x31,0x60,0x51,0x2e,0xb6,0x68,0xac,0xae,0xee,0x2d,0x28,0x5b,0xe0,0xa7,0x85,0xab,0x95,0xba,0x53,0x8c,0xc0,0xf8,0x16,0x8f,0x42,0x01,0xef,0x00,0x32,0x44,0x8e,0x41,0xc9,0x05,0x5b +.byte 0xe0,0x3f,0xe1,0xd8,0xd4,0x97,0x8e,0xa0,0x14,0x84,0xce,0x5c,0xef,0xbe,0xa4,0xae,0x18,0x91,0xd9,0x48,0x9b,0xc3,0x7a,0x8f,0xfb,0xb3,0x3e,0xa9,0x87,0x74,0x84,0xd2,0xc6,0x7c,0xc9,0xce,0x01,0xa5,0xcc,0xff,0x5a,0xe8,0x94,0x98,0x54,0x2a,0x6e,0xd9,0x58,0x75,0xd4,0xdd,0x6c,0x7d,0x83,0x32,0xc9,0x4e,0x35,0x2c,0x51,0x26,0x68,0x1f +.byte 0x95,0x20,0x82,0x54,0x0a,0xad,0x5e,0xe2,0xba,0xf9,0xa3,0x54,0x24,0x93,0x4a,0x62,0xff,0x28,0x05,0xd2,0x22,0x62,0x82,0xd4,0x2d,0xe2,0xec,0x66,0xc5,0xee,0x63,0xd0,0xf6,0x93,0xa8,0x37,0xbf,0xdd,0xe0,0x95,0x0b,0x19,0xa1,0x9d,0x9a,0xf8,0x94,0x1a,0x3a,0x50,0x9e,0x66,0x75,0x8c,0x25,0xbd,0x18,0xb0,0x58,0x76,0x7f,0x2d,0x3d,0x06 +.byte 0x02,0xb3,0xcf,0xa3,0x14,0x6e,0xe7,0xc8,0xcd,0xe6,0xbe,0xae,0x92,0xd6,0xa2,0xfe,0x12,0xf0,0xdf,0x9f,0x9e,0xad,0x77,0x77,0xfb,0xfc,0x36,0xb7,0x82,0x9c,0xf1,0x51,0xc2,0x58,0xa0,0xf3,0xa0,0xd6,0x6e,0x64,0x28,0xac,0x09,0x8f,0x7b,0xef,0x19,0x87,0x76,0xb9,0x4e,0xca,0x1f,0x05,0xb6,0x00,0x4a,0x14,0x83,0xaf,0xff,0xd9,0xa1,0xc6 +.byte 0x0f,0x98,0x3a,0xcf,0x85,0x18,0xea,0xa6,0x9a,0x1e,0xae,0x7c,0xaa,0xae,0xef,0x89,0x5e,0x14,0x5d,0x2f,0x73,0x8f,0xd1,0xf0,0x77,0xcd,0x45,0x92,0x7f,0xee,0xb9,0x7c,0xc2,0x3c,0xff,0x56,0x56,0xa5,0xa5,0x49,0xe4,0x20,0xd6,0xa2,0xb6,0xe4,0xfc,0x86,0x53,0xce,0x9e,0x2b,0x7b,0xcb,0xcf,0x6a,0xd5,0x62,0xb7,0x34,0x0e,0x39,0xe2,0xaa +.byte 0x1c,0x24,0x30,0x71,0x94,0xb3,0x57,0xd8,0xe8,0xd4,0xc5,0x4f,0x33,0x2c,0x73,0x7e,0x48,0xba,0xb3,0x55,0x84,0x6d,0x10,0xcf,0x8f,0xf2,0xb6,0xdb,0x4e,0xcf,0x49,0x08,0xf6,0x5a,0x3c,0x7e,0xef,0x3f,0x5c,0x11,0x09,0xfe,0x26,0xfb,0xff,0x30,0xcb,0x81,0x12,0xea,0x1e,0xa9,0x6e,0xf8,0xea,0x4f,0x92,0x2c,0x23,0x99,0x35,0xa5,0x59,0xca +.byte 0x1d,0x66,0x72,0xad,0x5b,0x7c,0xb3,0x4a,0x7c,0x76,0x4c,0xf6,0xc1,0xec,0x68,0x5f,0x2c,0x17,0xbe,0x92,0xe1,0xa1,0xee,0x40,0x24,0x25,0x6b,0xc5,0x0b,0x6f,0x06,0xc0,0x05,0x8c,0x23,0x24,0x76,0xea,0xe9,0xb9,0xa1,0x3d,0x59,0x15,0xe7,0x65,0x47,0x5a,0x75,0x9b,0xc8,0x7b,0x86,0x97,0xf4,0x4a,0xa3,0xec,0x54,0x0e,0x66,0xef,0xda,0x41 +.byte 0xb8,0x3b,0xa6,0x86,0x63,0xe1,0x4e,0x89,0x92,0x40,0xf4,0x8b,0x32,0x47,0x3b,0x4b,0xb4,0xe6,0xd8,0x4b,0x1c,0xac,0x03,0xab,0xde,0x2e,0x63,0x96,0x3f,0x27,0xa1,0x32,0x11,0x35,0x24,0x6a,0xe9,0x0b,0x73,0x61,0x4e,0xd8,0xdc,0x91,0x98,0x01,0x8a,0x0d,0x61,0xec,0x39,0xbe,0x3b,0xb9,0x78,0x77,0xea,0xaa,0xa2,0x12,0x20,0x92,0x98,0x16 +.byte 0x27,0x3b,0xd1,0xfa,0x59,0xef,0x81,0x38,0x9f,0x42,0xe8,0xb4,0xab,0x4f,0x26,0x9a,0xe7,0x0b,0x05,0x03,0xfa,0xe1,0xe1,0x3d,0x45,0xac,0x7d,0x40,0xcc,0x2f,0xf2,0xb0,0x33,0x42,0x14,0xbd,0x91,0x3e,0xe1,0xb7,0x17,0x25,0xc3,0x92,0xcb,0x9e,0x44,0x1e,0x13,0x93,0x98,0x1f,0x96,0x64,0x3a,0xaa,0x53,0x9a,0x18,0xc0,0x34,0x3c,0x47,0x94 +.byte 0x14,0x70,0x67,0x76,0x2a,0x82,0xd3,0x6a,0x18,0x13,0xe7,0x01,0x8d,0x97,0x52,0x51,0x8e,0x08,0xde,0x44,0xb0,0x74,0x07,0x58,0x35,0xc2,0x29,0xb5,0xd7,0x00,0x46,0x31,0x34,0xd7,0x1f,0xdd,0xaa,0x5c,0x27,0xc7,0x37,0x71,0xe8,0xbe,0xad,0x89,0xf1,0xb2,0xd1,0x46,0x33,0x0c,0x2f,0x26,0x21,0x5e,0xc9,0xda,0x25,0xcd,0xd0,0x17,0x23,0x87 +.byte 0x15,0xc2,0xa0,0x1a,0x9f,0x6e,0xfb,0x63,0xe9,0x69,0xdf,0x79,0x18,0x33,0x2f,0x47,0xca,0x54,0x23,0x7e,0x4f,0x6e,0x38,0x06,0x99,0xfb,0xcd,0x22,0xdb,0x4b,0x3f,0x8a,0x05,0x2e,0x5c,0x56,0x65,0xb7,0xab,0x57,0x8b,0xdd,0x28,0xab,0x7e,0x77,0x32,0x0f,0xc6,0x3c,0xf3,0xde,0x43,0xb0,0x13,0x3b,0xbd,0x28,0x3a,0x8b,0xd5,0x6b,0x1d,0x5d +.byte 0x20,0x1a,0x5f,0xa6,0x01,0xed,0x88,0x7f,0x87,0x55,0x38,0xc2,0x0d,0x03,0x6c,0x41,0x6a,0x43,0xdf,0x09,0xf3,0x58,0x69,0x13,0xa1,0xd6,0x39,0x0c,0x8e,0x8f,0x40,0x67,0xe8,0x0e,0x9b,0x9b,0x42,0x30,0xd7,0xae,0x04,0x75,0x66,0xfb,0x4a,0xa7,0xe0,0xe9,0xea,0x6d,0x28,0x4f,0xc0,0x5c,0xd4,0xd4,0xb7,0x60,0x5a,0x35,0xc1,0xe8,0x5f,0xc3 +.byte 0x4f,0x7a,0x5d,0x8d,0xc2,0x29,0x6e,0x36,0x50,0x5b,0x82,0x63,0xf2,0xda,0x8d,0x02,0x61,0x09,0x69,0x0a,0x47,0x9d,0x58,0xf3,0xf6,0xe0,0xc0,0x09,0xd9,0x3b,0x8d,0xf5,0xba,0xf6,0xc4,0xf0,0x65,0x89,0x7b,0xdd,0x93,0x6b,0x6e,0x21,0xa1,0x2a,0x66,0xe0,0x8f,0x62,0xb0,0x49,0x60,0xa3,0x48,0x42,0x62,0xcc,0x26,0x1f,0x59,0x3a,0x7b,0xa7 +.byte 0x82,0x10,0x5f,0xc6,0xf8,0xa2,0xc0,0x07,0x7b,0x26,0x26,0x11,0xe2,0x5b,0xb8,0x86,0xb7,0x66,0xcf,0x0a,0xcc,0x6f,0xe8,0x02,0x22,0x4c,0x13,0x75,0xdc,0x68,0xf0,0x7c,0x0c,0x46,0x9a,0xa2,0x4c,0xf5,0x50,0x3f,0xf9,0xbc,0x01,0xb1,0xa1,0x28,0x90,0x07,0x6b,0x17,0x69,0x89,0x7b,0xe5,0x0a,0xf7,0x7b,0xe1,0x94,0x30,0xfc,0xd3,0x8d,0xd3 +.byte 0x99,0x37,0x91,0xd5,0xdf,0x59,0x2a,0x4f,0xfe,0x6c,0x37,0x4b,0x78,0x2c,0xa9,0x28,0x6a,0x5c,0xd6,0xe1,0x0b,0xad,0xae,0x62,0x7c,0x09,0xb8,0x90,0x3f,0x29,0x37,0x7b,0x79,0xee,0x55,0x02,0x05,0xef,0x28,0xa2,0xc7,0x07,0x2b,0xe6,0xab,0x87,0x9d,0x8f,0x4c,0x0f,0xc1,0x75,0x5d,0x88,0x7f,0x26,0xe0,0x1e,0xf8,0x3f,0xb5,0x2a,0x6c,0xe6 +.byte 0x7f,0x85,0xae,0x55,0x7b,0x58,0x34,0x4c,0x81,0x05,0x21,0xa1,0x5e,0xd7,0xb6,0x20,0x6e,0xf9,0x60,0x15,0xa4,0xb2,0x8f,0x68,0xd2,0x23,0x9f,0xbf,0xfa,0x6a,0xcb,0x87,0x7d,0x41,0x4a,0xae,0x28,0x4f,0x9e,0xbb,0x69,0x1c,0x37,0xb2,0xc9,0xd2,0x21,0xa1,0x2b,0x6b,0x5d,0xff,0xd6,0xdb,0x8f,0x21,0xd9,0x17,0xd6,0xe6,0x74,0xf2,0x20,0x0e +.byte 0x06,0xb5,0x0c,0xdc,0x74,0x4e,0x93,0xcb,0x27,0xc7,0x4b,0xf3,0xef,0x46,0xa8,0xf0,0x58,0x1c,0xa0,0x65,0x09,0x84,0xc7,0x2e,0xba,0x51,0xd9,0xd4,0x53,0x20,0xc7,0x20,0x85,0x93,0x2b,0xf3,0x42,0x93,0x7b,0x22,0x1c,0x8d,0x22,0x76,0xcf,0xde,0x6a,0xa1,0x76,0xea,0x65,0x20,0x2f,0x2e,0xdb,0x85,0xdd,0x73,0x43,0xf8,0xe0,0xe3,0x3a,0xe5 +.byte 0x02,0x57,0x96,0x54,0xbc,0xaf,0xa4,0xd5,0xda,0x9d,0x9d,0x8b,0x85,0x01,0x7c,0x72,0x03,0xfe,0x39,0x46,0xab,0x04,0xcc,0x62,0x71,0xf5,0xa5,0x67,0xd7,0xfc,0xc0,0xb6,0x95,0x74,0xdf,0x1c,0xfe,0x1c,0x5b,0x25,0xae,0x42,0x75,0x00,0x71,0x3c,0xec,0xfc,0x3c,0x7b,0x0f,0xec,0x44,0xc7,0xec,0x9b,0x86,0xf5,0x3d,0x47,0x15,0xf0,0x25,0xba +.byte 0x43,0xc8,0x68,0x15,0x4f,0xeb,0x35,0x76,0x2d,0x04,0xb7,0x9b,0xb8,0xa7,0x0d,0xb3,0xb4,0xf2,0x93,0x85,0xb1,0xb8,0x81,0x7c,0xd6,0x5f,0xbd,0xc2,0xcc,0xf4,0x0e,0x98,0x2c,0x06,0x54,0x2f,0x5e,0x49,0x94,0x93,0x78,0xa0,0x0a,0x33,0x2e,0x3f,0xb2,0xa7,0x81,0xed,0xe9,0xb6,0xb5,0x86,0x4b,0xa5,0xc0,0x51,0x30,0x9d,0xe2,0x9f,0xc2,0x56 +.byte 0x92,0x6b,0x96,0xca,0xcb,0x65,0x5c,0x0e,0xf4,0x91,0x2b,0x89,0xf4,0x27,0x55,0x26,0xd7,0x7b,0x00,0x19,0x1f,0x67,0x4e,0x43,0x24,0x81,0x05,0xb7,0xc6,0x41,0x1a,0x39,0x3d,0x40,0x3e,0x8a,0x03,0x94,0x63,0x1b,0xb1,0x87,0xb6,0xe1,0x52,0xd0,0xe8,0xbb,0x0e,0x37,0x72,0xe5,0xde,0x86,0xc0,0xdf,0x5b,0xc2,0xc6,0x0a,0x67,0xa7,0x4c,0x03 +.byte 0xb6,0xd8,0x7f,0x1d,0xb3,0xe3,0x84,0xb7,0x5c,0x04,0x15,0xe0,0xd0,0xae,0x44,0xac,0x39,0xa5,0xa2,0x86,0xc8,0xad,0x27,0xa0,0x36,0xa1,0x6e,0xaa,0x87,0x7a,0x43,0xae,0xa0,0x45,0x1a,0xac,0x04,0xe2,0x55,0xf2,0x9a,0x97,0x67,0xfb,0x01,0x8f,0xb8,0x80,0x9c,0x27,0x1d,0xbe,0xa3,0xf1,0x6d,0x66,0xf2,0x1a,0x99,0x99,0xf6,0xa5,0xba,0x58 +.byte 0x28,0x58,0xb5,0x44,0x5b,0x38,0x4a,0x3f,0x37,0x85,0x7e,0x36,0x8e,0x16,0xb9,0x1e,0x0b,0xbf,0x7d,0x0a,0x0c,0x83,0x53,0x0d,0xcc,0x37,0xe1,0x42,0xbb,0x0d,0xfc,0x01,0x25,0x10,0xbe,0xb5,0x83,0x2f,0xa5,0x42,0x98,0xbc,0xd6,0x50,0x75,0xda,0x32,0x2b,0x3f,0xd6,0xc1,0x1a,0xe7,0x0b,0x80,0x07,0x6f,0xfe,0x77,0x9e,0xe9,0x1e,0x45,0x65 +.byte 0x68,0x92,0x34,0x8b,0xce,0xf3,0xcd,0x94,0x17,0xe0,0x41,0x92,0x96,0xb5,0xd1,0x98,0xd1,0x25,0xd1,0x3d,0x76,0x88,0x86,0xb1,0x01,0x80,0xc7,0xde,0x60,0x20,0xb8,0x03,0xe7,0x3f,0x44,0x39,0xb1,0xb8,0x19,0x53,0x5a,0xc6,0xa0,0x18,0x8e,0x0e,0xb6,0xfd,0x7e,0xe7,0x7e,0x8a,0xeb,0x4c,0x35,0x4a,0x0f,0x52,0x81,0x68,0x12,0xe4,0x46,0x2e +.byte 0x20,0xb4,0x41,0x59,0xb3,0x16,0x02,0x9f,0xdb,0xe8,0xea,0xfd,0xe3,0x5d,0x14,0xd0,0x97,0x52,0x66,0xcb,0xb4,0x48,0xa3,0x05,0xab,0x73,0x8e,0x2c,0x46,0xc2,0x94,0xd5,0xc8,0x57,0xc4,0x13,0xa4,0x0b,0x7c,0x34,0xbf,0xb4,0x07,0x28,0x92,0xe2,0x1d,0x00,0xa6,0xf0,0xb0,0xbf,0xdd,0x5d,0x20,0x05,0x9f,0x53,0xcf,0x07,0xf7,0xe8,0x79,0x04 +.byte 0x57,0xd1,0xac,0x9c,0xdd,0xae,0xcd,0x8b,0x04,0x0a,0x2d,0x0a,0x0f,0x21,0x09,0xc8,0x0d,0xfa,0x23,0x26,0xe3,0xdb,0x84,0xc8,0x8e,0x9c,0x96,0x93,0x4f,0xcc,0x2f,0x96,0xed,0x04,0x91,0x0d,0xc7,0xbb,0x27,0xa3,0x6b,0x9d,0xe2,0x15,0x83,0x31,0x78,0xb5,0xb9,0x6d,0xb1,0x6c,0xa2,0x3e,0xf5,0x45,0x77,0xf4,0x96,0x3a,0xe6,0x10,0x08,0xfd +.byte 0x23,0xcc,0xda,0x27,0x73,0x67,0xbb,0x8b,0x59,0xe2,0xcf,0xda,0x57,0xf9,0x17,0xeb,0xeb,0x98,0x39,0x48,0xbf,0x3d,0x5b,0x7b,0xc2,0x11,0x4b,0xd6,0xb6,0x8a,0x14,0xb3,0xf5,0xc3,0x18,0xff,0xde,0x62,0x98,0x4a,0x1d,0x6b,0x4e,0x00,0x4f,0x7d,0x2f,0x67,0xf4,0x22,0x1e,0xdb,0x69,0xd5,0x87,0xfd,0xee,0x97,0x56,0xd4,0x00,0x0c,0x9e,0x22 +.byte 0x11,0xda,0x8e,0x3b,0x91,0xad,0xf1,0xb6,0x0a,0xba,0xe7,0xc6,0x14,0x0e,0xc4,0x85,0x5f,0x7d,0x69,0x7d,0x73,0x9c,0x83,0x6a,0x69,0xef,0x10,0xb0,0xe6,0x33,0x32,0x0f,0xd8,0x54,0xa4,0x9d,0x39,0xaf,0xfc,0x6d,0x4f,0xeb,0x34,0x89,0x2e,0xb0,0xa1,0xcd,0xe1,0x5b,0xab,0xe1,0xff,0x82,0x85,0x6b,0x5e,0xa9,0x9e,0x43,0x02,0x0d,0x38,0x33 +.byte 0xe1,0xbc,0xa4,0x77,0x8a,0x5e,0x54,0xa8,0xcf,0xc9,0x76,0xcb,0x73,0x21,0x1f,0xa7,0x1e,0x5c,0x0a,0xd6,0xa2,0x36,0x6f,0x07,0xa1,0x6b,0x0d,0x5a,0x21,0x3a,0xc3,0xc0,0xcd,0x9d,0xed,0x83,0x96,0x89,0xaa,0x55,0x56,0xfd,0x0a,0x97,0x3a,0x50,0xfd,0x95,0x3f,0xb7,0xfa,0x87,0x7d,0xa6,0x5d,0x12,0x65,0x3f,0x61,0x4f,0x86,0xdd,0x58,0x64 +.byte 0xd7,0xde,0xd6,0xb9,0x68,0x87,0xde,0xba,0x96,0xf5,0x1c,0xec,0x8e,0x81,0xfc,0xca,0x77,0xe2,0x85,0x11,0x93,0xc7,0xf2,0x0f,0x77,0xbb,0x7c,0xed,0x20,0x7a,0xe3,0xc5,0x76,0xff,0x04,0xc7,0xe6,0x7a,0xa1,0xfe,0x58,0x52,0x1b,0xec,0x27,0xbb,0xd4,0x27,0x7c,0xc7,0x4a,0xfb,0x07,0x62,0x99,0x36,0xff,0x6e,0x71,0x2f,0xbd,0x25,0xff,0x8d +.byte 0x97,0x14,0x56,0x23,0x7f,0x13,0x89,0x10,0xd8,0x29,0x1f,0x91,0x56,0x52,0x85,0xa7,0xd3,0x04,0xc9,0xe2,0x09,0xa2,0x0f,0xaa,0x28,0xb1,0x79,0xf9,0x08,0xf4,0x14,0x57,0xc4,0x54,0xd7,0x69,0xb0,0x37,0xf0,0x80,0x90,0xce,0x75,0x81,0xe7,0x75,0x0f,0x7f,0x71,0x58,0x3b,0x78,0x53,0x9b,0x4a,0x5e,0xcc,0x23,0x04,0x9e,0x0c,0xd7,0xd8,0x69 +.byte 0x90,0xdf,0x36,0x99,0x90,0xd3,0xfa,0x35,0xf7,0x13,0x64,0xb0,0xc0,0x70,0x0c,0xd4,0x87,0xc0,0xca,0xd8,0xca,0x8a,0xc3,0x9a,0xfa,0x73,0x34,0x18,0xe9,0x3a,0x85,0x42,0xc5,0xe1,0xaa,0xb5,0x87,0xac,0x43,0x9c,0xfa,0x7e,0x05,0x35,0xed,0x7e,0x0d,0x38,0x82,0x17,0x7f,0x22,0xa2,0x3d,0xd3,0x0d,0xd1,0xff,0x0a,0x68,0x52,0xd2,0x17,0x59 +.byte 0xaa,0x57,0xbd,0xd3,0xea,0x0c,0xe8,0xb0,0x22,0x13,0x59,0x42,0x46,0x34,0x58,0xa9,0x16,0xc5,0x9f,0x88,0x8f,0x75,0x02,0xbf,0x63,0xda,0x28,0xba,0x9a,0xcf,0xbb,0x73,0x58,0xb1,0x13,0xf2,0x68,0xd8,0x6b,0xfd,0x49,0x50,0xcf,0x09,0xea,0x6a,0xff,0x20,0x39,0xc5,0xae,0x70,0x79,0xea,0xec,0x9d,0x09,0xf8,0x51,0x1f,0xfd,0x01,0xd5,0x9f +.byte 0xec,0x29,0x36,0xfc,0x39,0xb4,0x4c,0x1f,0xe6,0xb4,0xcc,0x97,0x21,0xe5,0x19,0xe9,0x7a,0x60,0x6d,0x39,0x3c,0x31,0xd4,0x43,0x76,0xba,0x10,0xd9,0x3f,0x75,0x7a,0xa6,0x1d,0x02,0x88,0x3d,0xa5,0x9f,0x91,0x61,0x4e,0x32,0xec,0xf5,0xd3,0xe4,0x65,0xf7,0x0e,0x3b,0x8a,0x8f,0x22,0x31,0x71,0x8f,0xf1,0x5f,0x7b,0x04,0x88,0xf9,0x88,0x67 +.byte 0x14,0x85,0x74,0x9e,0x54,0x0b,0xed,0x7a,0x48,0xcd,0xcf,0xd2,0x05,0x38,0xd5,0x58,0xa2,0xaf,0x6a,0x28,0x21,0xfd,0x38,0x4e,0x83,0x06,0x15,0x60,0xfb,0x89,0x2a,0x72,0xfe,0x75,0xc7,0xa4,0xae,0xe4,0x5b,0xbb,0xde,0x54,0xde,0x77,0xbb,0x9d,0xd2,0x07,0x05,0x61,0x53,0x65,0x31,0xd4,0x3a,0x8a,0x7d,0x9d,0x30,0x09,0x25,0x28,0x72,0x19 +.byte 0xe4,0xae,0x1d,0xbf,0xa7,0xef,0x75,0xd0,0xe3,0xdc,0x0b,0xd1,0x17,0x9c,0xc6,0xdf,0x65,0x9a,0x7c,0x9d,0x0b,0x9a,0x3d,0x8f,0xb0,0xf5,0x51,0x46,0x6b,0x12,0x0d,0xe6,0xa9,0x3a,0xb5,0xe9,0x52,0x85,0xa5,0x25,0x1f,0xc9,0x8b,0xff,0xe3,0x37,0x25,0x97,0xd8,0x91,0x17,0xed,0xcf,0x2a,0x6d,0x4f,0xef,0x74,0x5e,0x92,0xa2,0x2d,0x84,0xa6 +.byte 0x09,0xc4,0xfc,0x36,0x95,0x54,0x25,0x9e,0xeb,0xd9,0xea,0x5a,0x01,0x0c,0x54,0xdb,0x82,0x01,0xed,0x0b,0xf7,0x9f,0x0d,0x8f,0x2e,0xee,0x7c,0x6e,0xb3,0xe7,0xe8,0x04,0xef,0x8d,0x5e,0xfe,0x3d,0x96,0x3a,0x65,0xd3,0xb2,0x11,0x75,0x1c,0x6f,0x2a,0xd3,0x26,0x1f,0x5f,0x35,0x02,0x0b,0x9f,0x38,0x5b,0xa5,0x3a,0x90,0x3e,0x03,0x9f,0x50 +.byte 0xf2,0xd7,0xe4,0x3c,0xd3,0x28,0x67,0x0a,0x5a,0xe8,0x59,0x6f,0x38,0x8f,0x8b,0x0d,0xe4,0x1c,0xfc,0x6e,0x07,0x69,0x7b,0xfb,0x04,0x30,0xe7,0xa6,0x13,0xfb,0x33,0xa0,0x52,0x6a,0xec,0x64,0xad,0x90,0xbd,0xba,0x15,0x12,0x48,0xed,0xd1,0x94,0x2d,0xe7,0x19,0x28,0x5e,0x7a,0x94,0xf4,0x79,0xd7,0x79,0xc9,0xf6,0x16,0xb4,0x88,0xee,0x15 +.byte 0xa2,0x68,0xe3,0x1d,0xd0,0xd2,0x63,0x78,0x7c,0xb3,0x30,0xac,0x63,0x7a,0x36,0xc5,0x50,0xbf,0x57,0xf6,0xfe,0x4e,0x43,0x4e,0xf9,0xc4,0xa2,0x2a,0xa7,0xa4,0x2c,0x18,0xb9,0x43,0x7b,0xe8,0xf6,0x14,0x4f,0x07,0x6e,0x65,0x9a,0xdd,0x10,0x2a,0x4c,0xa4,0x58,0x86,0x19,0xad,0x6d,0x5e,0x30,0xfb,0x5f,0xb6,0x9f,0x2a,0xac,0x90,0x0d,0xae +.byte 0xf9,0xab,0xc1,0x33,0xd3,0x73,0x1d,0x46,0xe5,0xc8,0x1e,0x1d,0x61,0xf1,0xda,0x53,0x3e,0x61,0xf0,0x9a,0xe4,0xb7,0x04,0xe9,0x5e,0xf6,0x11,0xa6,0x56,0x39,0xed,0xfb,0x06,0xd0,0x92,0xb9,0xb8,0xb5,0x3b,0x39,0xec,0xa5,0xc0,0xb1,0x7e,0x7e,0xfb,0x89,0x86,0xa8,0x70,0x47,0xa5,0x60,0x8c,0xf8,0x47,0x31,0x04,0x54,0x29,0xf3,0xa2,0x79 +.byte 0xac,0x24,0xda,0x33,0x6c,0x1c,0x34,0xc2,0xa0,0x96,0x27,0xbb,0x31,0xbf,0xc1,0xd9,0xc8,0x35,0xbc,0xb3,0x13,0x8a,0xb6,0x25,0x92,0xdc,0xcc,0x3b,0x8a,0x65,0xf3,0xf9,0xd1,0x2a,0xcd,0xb0,0xf4,0xd7,0x44,0xa0,0x27,0xfc,0x0e,0x69,0x46,0x0b,0x56,0x5b,0x58,0x40,0xd9,0xc4,0x37,0x9b,0x4d,0xa1,0x45,0xd8,0xab,0x4d,0x02,0x31,0x4f,0x93 +.byte 0x56,0xd0,0x26,0x99,0x1c,0xc7,0x2b,0xc2,0x80,0xb4,0xbd,0x6e,0xfe,0xa1,0xf7,0x8f,0x13,0x74,0x2c,0xa8,0x63,0xb1,0x3d,0x6d,0x32,0x4a,0x80,0x6a,0x7f,0xcf,0x6c,0x51,0xa9,0x21,0x34,0x4e,0x13,0x19,0x8f,0x33,0xfc,0x06,0x46,0x05,0xf0,0xcf,0xf1,0xce,0x20,0xe0,0x40,0xf2,0x0a,0xd0,0xf6,0xcc,0xcc,0xc2,0xc7,0x07,0x2e,0x9e,0x0a,0x1e +.byte 0x53,0x59,0xbb,0xe3,0x02,0xc8,0x20,0x9f,0x3c,0xe6,0xec,0xf7,0x8a,0x6d,0x3c,0x0f,0xb3,0x14,0x66,0x5c,0x51,0xbe,0x82,0xc2,0x0b,0x10,0x63,0xa9,0xd4,0x7f,0x12,0x88,0x13,0x81,0x8a,0x06,0x8a,0x7f,0xc8,0x89,0xe7,0xbd,0xce,0x51,0xdc,0x93,0x03,0x07,0x6f,0x8c,0xe6,0xcc,0x0d,0x45,0xa8,0xfc,0x02,0xe2,0x3e,0xa7,0xc8,0x83,0x77,0x98 +.byte 0x91,0x4e,0x1f,0x8d,0xed,0xa5,0x38,0x54,0x0e,0x4e,0x53,0x1c,0x0c,0x47,0x11,0x59,0x54,0x15,0xb5,0x47,0xb0,0x21,0xa1,0x3d,0xaa,0xef,0xee,0x9e,0x26,0x3c,0x39,0x75,0xff,0x1a,0x8c,0xbb,0x1a,0x49,0x62,0x21,0x76,0xe8,0x3d,0x10,0x55,0xf5,0x5a,0x44,0xf0,0xb3,0x81,0xd0,0x35,0x96,0x95,0x63,0xf7,0x50,0xb1,0xa0,0xf0,0x29,0x97,0xc9 +.byte 0x27,0x73,0xd8,0x29,0xef,0x74,0xd2,0x6d,0xf4,0xfb,0x72,0xa9,0x4f,0x12,0xd5,0xfd,0xc9,0xba,0xf0,0xbd,0xfd,0x5e,0x5c,0xfa,0x53,0xe3,0x96,0xab,0x57,0xc3,0xb6,0xe8,0x0e,0x43,0xe4,0x77,0x97,0x04,0x69,0xff,0x72,0xd0,0xd8,0xab,0xb9,0x19,0x25,0x89,0xf7,0xbb,0x01,0x03,0xf2,0xc6,0x8d,0xd5,0x86,0xe3,0xfe,0x9c,0xff,0x78,0xd7,0xfc +.byte 0xda,0xd4,0x69,0x8e,0xd6,0x31,0xfb,0x15,0xd3,0x38,0xfd,0x53,0xe2,0x4e,0xce,0xcc,0xfe,0x17,0xc5,0x88,0x92,0x28,0x98,0xb7,0xcf,0x7b,0x53,0x7b,0x96,0x14,0xaf,0xeb,0x5b,0x2d,0x16,0x41,0xcc,0x7b,0x65,0xe1,0x73,0x81,0x4e,0x8f,0xc3,0xad,0xe1,0x3f,0x0c,0xa7,0xbe,0x38,0xed,0x02,0x67,0xf5,0xfa,0x1d,0xb0,0xd5,0x4c,0xe1,0xd8,0x62 +.byte 0xc9,0xb5,0xf8,0x84,0xc4,0x51,0x57,0x14,0x11,0xf8,0x7d,0x1d,0xe7,0x81,0x85,0x61,0xa9,0x9f,0xc8,0x45,0xb9,0x2d,0x8a,0xc9,0xa3,0xfe,0x5a,0xf9,0xe0,0x1c,0x80,0xd8,0x77,0xaa,0x85,0xca,0x93,0x9a,0x2e,0x10,0x03,0x71,0x3d,0xb1,0x2a,0x64,0x2e,0xad,0x64,0xba,0x5c,0xaa,0x8a,0xc2,0x2a,0x80,0x28,0x2e,0xf9,0x93,0xe1,0x71,0x72,0xae +.byte 0xda,0xd8,0x4f,0x4c,0xec,0xb5,0xe3,0x05,0x10,0x5f,0x4c,0xe6,0xe1,0xf4,0x07,0x63,0x75,0x6f,0xc5,0xf9,0xcd,0xfc,0xfc,0x35,0x2f,0xe4,0xca,0x4b,0xfc,0xc3,0x20,0x8b,0x5c,0x4a,0x3c,0xf8,0x92,0xca,0x2b,0xb0,0xce,0xd9,0x4b,0xf0,0x44,0xcb,0x4e,0x83,0xf3,0x9d,0xb0,0xd4,0xab,0xba,0x2a,0x76,0xaa,0x87,0xcd,0xa2,0xd1,0x3f,0xa0,0xb9 +.byte 0xdb,0x7e,0x67,0x2d,0x92,0x4c,0xeb,0x3c,0xa6,0x8c,0x62,0x80,0x18,0x78,0x2b,0x9d,0x8f,0x5e,0xc3,0xa5,0x3b,0x10,0xb3,0x8a,0x3b,0x00,0x96,0xb2,0xab,0xce,0x8d,0xff,0x3c,0xee,0xeb,0x4f,0xfb,0xab,0x96,0x38,0x4c,0x15,0x6e,0x7c,0xf3,0x31,0x5f,0x8f,0x99,0x88,0x52,0x48,0x8b,0x71,0x1b,0x31,0x3f,0x7c,0xe4,0xae,0x9c,0x7b,0xeb,0x64 +.byte 0xe3,0x80,0xd4,0x56,0x9a,0x6a,0xd9,0xca,0xc5,0xf0,0x86,0xe7,0xda,0x80,0x8f,0x17,0x61,0xca,0x24,0x0b,0xb6,0xf9,0x24,0xc5,0x7a,0x28,0x42,0x32,0x7f,0x2b,0xde,0x44,0x30,0xed,0x69,0x63,0x07,0x3f,0xca,0x7b,0x02,0xea,0x6e,0xef,0x27,0x1d,0x76,0x32,0xc2,0x81,0x3d,0x03,0x9a,0xe7,0x0d,0x28,0x07,0x03,0x0c,0x65,0x73,0x58,0x26,0xc6 +.byte 0xfe,0xcc,0x33,0x7f,0x33,0xad,0xea,0x81,0x05,0xcc,0x61,0x1e,0x78,0x69,0x70,0xc9,0x1f,0x6e,0x4f,0xb8,0x19,0x42,0x03,0x03,0x9d,0x56,0x87,0x0e,0x9a,0x32,0x3a,0xba,0xb9,0x11,0x66,0x9f,0x4d,0xd1,0xb0,0x11,0xbf,0x46,0xfc,0xcf,0xe5,0xef,0xf1,0x61,0xeb,0xad,0x31,0x7c,0x0d,0x66,0x0d,0xa9,0x1f,0xe4,0xf9,0x80,0x9e,0xae,0x9e,0x34 +.byte 0x1e,0x95,0x6c,0xa2,0x77,0x69,0x84,0x77,0xb7,0xe8,0xca,0x1f,0xea,0xc1,0x34,0xe6,0x0d,0x4f,0xba,0x77,0x2b,0x8c,0xbe,0xff,0xc4,0x06,0xa3,0xb6,0x1a,0xbe,0x55,0x99,0x57,0x6f,0x54,0x24,0x93,0x7a,0x0d,0x52,0xd6,0xbb,0xd2,0x9c,0xd5,0x76,0x6a,0x22,0x66,0xdc,0x43,0x9a,0x7b,0x1b,0x11,0x80,0x02,0x0c,0x8f,0xc6,0xc6,0x02,0x42,0x29 +.byte 0x00,0xc4,0xb2,0xa1,0x6a,0x7f,0xa9,0x60,0x8d,0x41,0x4f,0xd3,0xde,0x33,0x5a,0x44,0x31,0xb0,0xdc,0xc0,0x0c,0x31,0x03,0x96,0x71,0x0a,0xce,0xe3,0x0b,0xc7,0xe3,0x5d,0xe0,0x88,0x4b,0xfd,0x4c,0x1a,0xce,0xaa,0x89,0xc6,0x99,0xa8,0xd3,0x1e,0xe9,0x6c,0x2a,0xbd,0x26,0x81,0x03,0x6a,0xf2,0xf2,0x0f,0x1e,0x9d,0x8a,0x59,0x45,0xbf,0x6d +.byte 0xb7,0xc8,0xec,0x77,0xb0,0x70,0x1a,0x31,0x21,0xeb,0x25,0x12,0xff,0x13,0x33,0x6b,0x47,0x34,0xd8,0x66,0x11,0x8a,0xc9,0x93,0x5b,0x2c,0x55,0x42,0xb2,0x9b,0x60,0xc6,0xba,0xab,0x12,0x12,0x5d,0x0a,0xd4,0x54,0x79,0x17,0x6d,0x31,0x7d,0x4f,0xf2,0x94,0x16,0x65,0x62,0x38,0x76,0x3a,0x7d,0x55,0x05,0xd9,0x17,0x45,0x62,0xb4,0x1d,0x31 +.byte 0x34,0x40,0xd3,0x8e,0xf9,0x29,0x4d,0x3f,0x93,0x9a,0x2e,0xa4,0x75,0x66,0xf6,0x62,0x8f,0xf9,0x8d,0x79,0x4b,0x51,0x7e,0xfb,0xeb,0x9a,0x86,0x96,0x01,0x79,0xbe,0xe4,0x42,0xb3,0xc8,0x28,0x9e,0xed,0xa8,0xb6,0x6d,0xd3,0x31,0xed,0x30,0x9e,0x6a,0x5b,0x02,0x4b,0xbd,0xb3,0xf2,0xf0,0x9d,0x50,0x09,0x40,0x71,0xfe,0x4b,0x91,0xc9,0xd6 +.byte 0x07,0x87,0x9e,0xdb,0xa9,0xcd,0x0b,0x95,0x18,0x5a,0x55,0x10,0xaa,0xe1,0x70,0xe9,0x2e,0xc2,0x31,0x6b,0x48,0x84,0x2f,0xe5,0x7b,0xdd,0x4c,0x03,0xed,0xb6,0xb6,0x64,0x24,0x38,0x7a,0x5a,0x15,0x35,0x9d,0x66,0x08,0x4d,0xa6,0x3c,0x96,0x1a,0xcd,0x02,0x61,0x40,0xde,0xac,0xc3,0x15,0x8c,0xca,0xe6,0x62,0xe9,0x61,0x68,0xf6,0x60,0xd3 +.byte 0x7e,0x5f,0x44,0xcf,0x09,0x01,0x60,0xc2,0xb1,0xfc,0x2f,0x41,0x4c,0xc1,0x06,0x72,0xcc,0xde,0x25,0xe0,0x8c,0x34,0xb8,0xe0,0xb2,0xeb,0x05,0x5d,0x9e,0x7e,0xf7,0x1e,0x24,0xcd,0x1b,0x14,0x3f,0x1b,0x13,0xc0,0x64,0x38,0x43,0x95,0xba,0x7b,0x61,0xa0,0xdc,0xe0,0xf5,0x80,0x13,0xa1,0xc5,0x48,0x92,0xc5,0xd5,0xd0,0x87,0x0c,0x73,0xae +.byte 0xe2,0xb3,0xe8,0x70,0x4a,0x7e,0xa0,0x13,0xc3,0xc6,0x9c,0x77,0x51,0xca,0x88,0xcf,0xe0,0x1e,0xff,0x6c,0xe2,0xc3,0x33,0xce,0x7f,0x3e,0x7d,0xd5,0x37,0x23,0x09,0xb7,0xbd,0xb7,0xec,0x9a,0x29,0xd6,0x4f,0xea,0x79,0x24,0x4c,0x09,0x74,0x9c,0x97,0x3b,0x08,0x1f,0x82,0xcc,0xae,0xc4,0x3f,0xcf,0xc6,0xcb,0xaf,0x8c,0x89,0x15,0x79,0xeb +.byte 0x88,0xb9,0x03,0xab,0xc6,0xf8,0x6e,0x54,0xde,0x50,0x6e,0xcf,0x8a,0x4b,0x3f,0x64,0xd0,0xcb,0x69,0xc2,0xe3,0x40,0x4a,0x94,0xe2,0x04,0xfa,0x9b,0x4a,0xf6,0x2b,0x93,0x0c,0x0e,0xf8,0x68,0xbc,0x6e,0x6c,0xe6,0xd9,0xb6,0x04,0x40,0xf4,0x60,0xbc,0xc1,0x1e,0x67,0x1f,0xce,0x5c,0x4d,0xba,0x78,0xa8,0xf5,0x96,0x00,0xb9,0x61,0x82,0x65 +.byte 0xb2,0x1d,0x42,0xb8,0x88,0x66,0x43,0xd9,0xfe,0xe0,0x86,0xef,0x5d,0x4d,0xcc,0xeb,0x57,0x9a,0x2b,0x27,0xf2,0xcf,0x68,0xc3,0x05,0x92,0x4d,0x4d,0xb7,0x46,0x7e,0xfd,0xb7,0x4a,0x4d,0x6f,0xac,0xc8,0x8d,0xf2,0xcd,0x52,0xcf,0x91,0x77,0x2d,0x68,0x06,0x7a,0xc9,0xf3,0x17,0xc6,0x8f,0x8f,0xb5,0x8f,0x74,0xfa,0x90,0xcc,0xfc,0xaf,0x4e +.byte 0xd2,0x29,0xd9,0x57,0x71,0xe9,0x52,0xd8,0x50,0xfa,0x4d,0x13,0x7c,0x42,0x15,0x22,0x65,0x26,0x08,0xda,0xaa,0x53,0xcf,0xeb,0xd1,0x87,0xd5,0x7c,0x4e,0x66,0x1c,0x7d,0xc9,0x03,0x59,0xf8,0x09,0x3e,0x1b,0x94,0x4c,0x39,0x56,0xeb,0xfd,0xb6,0xd0,0xf9,0x76,0x8b,0x5d,0x6e,0x44,0x15,0xcf,0x27,0x7f,0x69,0x9a,0x00,0x96,0xbe,0x80,0x5e +.byte 0xbb,0x5a,0x05,0xea,0x15,0xdd,0x44,0x69,0x9e,0x64,0xcd,0xba,0xf2,0x6f,0x67,0x10,0xc5,0xa1,0x75,0x85,0x5f,0xdc,0x61,0x43,0x34,0xc3,0x52,0x06,0xd4,0xe9,0x9f,0xdf,0xd4,0xa6,0x96,0xac,0xb1,0x21,0xdd,0x20,0x46,0x20,0x89,0x5f,0x0e,0x9d,0xa8,0xc7,0x75,0x3a,0x54,0x9e,0x7c,0x3a,0xd5,0xb2,0x68,0x77,0x06,0x1b,0x1c,0xbd,0xb3,0x02 +.byte 0xb5,0xdd,0x87,0x55,0x6b,0x00,0x9f,0x2c,0x30,0xb7,0x4e,0xc3,0x67,0x38,0x37,0x61,0x81,0x68,0xcb,0x14,0x81,0x27,0xd7,0x38,0x18,0x81,0x68,0x45,0xca,0xf4,0xaa,0xae,0x58,0x9e,0xf8,0xbe,0xe9,0x1e,0x05,0x19,0xf0,0xea,0x89,0xf8,0xa1,0x9c,0x7b,0x63,0xc1,0xcd,0x81,0xc8,0x95,0x56,0x81,0x81,0x29,0xb0,0x4d,0xbf,0xe6,0x8d,0xa3,0xb3 +.byte 0xfa,0xae,0x13,0xc8,0xca,0x4d,0x5c,0x5e,0xd9,0x17,0xf8,0x87,0xdb,0x5b,0xe2,0xd9,0xba,0xe3,0xe8,0xdb,0xcb,0x74,0x36,0x7e,0x0e,0x3a,0x94,0x6a,0xe9,0x9e,0x50,0x8e,0xf4,0xd4,0x15,0xb7,0x50,0x60,0x3f,0x14,0x72,0x41,0x9d,0x51,0x63,0x8c,0x31,0x95,0xf2,0xbc,0x14,0xc7,0x64,0x2c,0xee,0x0b,0xe6,0xde,0xf6,0x33,0x85,0x65,0x00,0x54 +.byte 0x54,0x84,0x85,0x94,0x87,0xa0,0xc3,0x95,0x4e,0x74,0xcb,0x2d,0x82,0x9e,0x46,0x7f,0xf5,0x64,0x60,0xfe,0x1a,0x37,0xee,0xa7,0xb6,0x85,0xb5,0x4e,0x30,0x11,0x39,0x4b,0xe9,0x57,0x18,0x3a,0x2c,0x6b,0xb9,0x8e,0x5a,0x54,0xa9,0x31,0xf7,0xe1,0xe0,0xc7,0x52,0xfe,0x76,0x9b,0xc6,0xfe,0xde,0xe0,0xe9,0xf9,0xf6,0x10,0xda,0xef,0x72,0x24 +.byte 0x9c,0xbe,0x4a,0xba,0x58,0x21,0x1b,0xe3,0x1d,0x80,0x10,0x76,0x70,0xde,0x8f,0xf3,0x07,0x93,0x01,0xe0,0xb4,0xd9,0x7d,0x60,0x0d,0x08,0x07,0xa4,0x6d,0x9b,0x2b,0x8c,0x9a,0x58,0x65,0x5e,0x29,0xf1,0x24,0xb2,0x31,0xfb,0xb7,0xad,0xf0,0x50,0x8e,0x25,0x1b,0x75,0xc5,0x82,0x88,0x8c,0x68,0x14,0x2c,0x28,0xa2,0xb6,0x93,0x14,0xe3,0x28 +.byte 0xd0,0x95,0x6f,0x79,0x91,0x03,0x75,0x82,0x5c,0x20,0x46,0x0d,0x53,0x40,0x2c,0x88,0x62,0xa4,0x8c,0xd5,0xf1,0xc1,0xbf,0xde,0x57,0x91,0xb2,0xa6,0x66,0x29,0xf0,0x6b,0xb8,0x5e,0x78,0x5f,0xd1,0x76,0x98,0xf2,0x56,0xc2,0x5f,0x48,0x1f,0xa6,0x98,0xb0,0x87,0x53,0x13,0x1d,0x1a,0xa7,0xdf,0xa5,0xea,0x37,0x12,0x6d,0x64,0x53,0xdc,0x04 +.byte 0x2d,0xb9,0xeb,0x78,0x89,0x7b,0x70,0xd2,0x6d,0x45,0x8d,0x45,0x50,0x57,0xc7,0xb2,0xaf,0xdd,0x72,0x0f,0x9f,0x1b,0x29,0x61,0x68,0xb5,0x4a,0xd4,0xe9,0xd7,0x10,0xe7,0xcd,0xe8,0x22,0xd3,0x54,0x0c,0x0b,0x32,0x77,0x7d,0x3e,0xed,0x6e,0x79,0x4b,0x7b,0x99,0x1f,0x9e,0xbe,0xe7,0x12,0x7c,0x94,0x36,0x1c,0x20,0x8a,0xd0,0xab,0xda,0x95 +.byte 0xf6,0x4f,0xbe,0x6f,0x44,0x0b,0xa3,0x7b,0x4d,0x00,0xf6,0xdf,0x6f,0xc8,0x50,0x9e,0x3e,0x0c,0x1e,0xfe,0xb8,0x39,0x9f,0x83,0x4f,0xb3,0x1f,0x7e,0x53,0x54,0x64,0x04,0xa3,0xf7,0x79,0x01,0x71,0xce,0x18,0x0d,0x47,0x4e,0xae,0x88,0x6a,0xe7,0x26,0x4e,0x59,0xee,0x3a,0x03,0xc2,0x4d,0x0c,0x29,0xf0,0x96,0x9d,0xc0,0xa3,0xb3,0x82,0xf9 +.byte 0xc4,0xf8,0x8b,0xae,0x68,0x47,0x39,0xdc,0x10,0xd7,0x09,0xb4,0x86,0x87,0xfa,0x7e,0x0c,0xe4,0xee,0x3a,0x35,0x1a,0x0e,0x95,0x88,0xce,0xe7,0x9e,0xcc,0xa5,0x58,0x98,0x48,0xbd,0x9c,0x27,0xe6,0xb9,0xf7,0xca,0x66,0xee,0x54,0x87,0xd0,0x6d,0xab,0x31,0x1a,0x57,0x33,0x8b,0x89,0xa0,0xc0,0x18,0x9a,0x87,0x5e,0x58,0x02,0xe5,0x50,0x47 +.byte 0x0f,0x60,0x53,0x9d,0x99,0xe4,0x0a,0xfa,0x4a,0xc3,0x77,0x4b,0x4d,0x4e,0x0c,0xbb,0x68,0xd9,0xb3,0xd3,0x59,0x78,0xdf,0x65,0x97,0x6e,0x22,0x5b,0x24,0x26,0xf9,0x2a,0x14,0x73,0xa7,0xec,0x65,0xfc,0xdf,0x7d,0x35,0x0d,0x44,0x1b,0x4b,0xad,0x6b,0x8f,0x0e,0xa3,0x3b,0x6b,0x40,0xb3,0xe3,0xd9,0x41,0xba,0xbf,0x95,0xbb,0x6e,0x91,0xf6 +.byte 0x63,0xb3,0xde,0xdb,0xc2,0x6f,0xfe,0x00,0xf1,0x53,0x96,0x37,0xa4,0x27,0x48,0x3e,0xf9,0x32,0x23,0x90,0x90,0xe0,0x01,0xde,0x08,0xad,0xc4,0x6c,0x25,0x7a,0x7f,0x2f,0xb7,0xb7,0xc6,0xaf,0xeb,0x91,0x9c,0xa2,0x9c,0xf7,0x7f,0x9f,0x74,0x9b,0x7d,0x54,0x66,0xf9,0xe0,0x73,0xb4,0x15,0x2b,0xaa,0x71,0x50,0xd0,0x74,0x5d,0xcd,0x1c,0x09 +.byte 0x4c,0x80,0xcc,0xdc,0x10,0xd9,0x96,0xb3,0xdc,0x09,0x73,0x1f,0x36,0x4c,0x1b,0x86,0x25,0x13,0x7c,0xd2,0xc6,0x9d,0x5a,0xce,0xd6,0x22,0x97,0x66,0x7b,0x7b,0x84,0xba,0x69,0xd2,0x87,0x9b,0x08,0xda,0x77,0x66,0x90,0xbc,0x7c,0x3c,0x5d,0x43,0x92,0x5f,0x05,0xfb,0x23,0x46,0x88,0xf7,0xa4,0x10,0xbd,0x7d,0x00,0x29,0x2d,0xa5,0x6a,0xab +.byte 0xcc,0xdd,0xcf,0x1e,0x2b,0x9b,0x5f,0xa9,0x94,0x14,0x99,0x6e,0x3b,0x41,0x52,0x61,0x16,0x17,0x44,0xcf,0x5b,0x34,0x5c,0x27,0x29,0x4a,0xc3,0xba,0x9a,0x0c,0x20,0x17,0x2b,0x92,0xd9,0xf1,0x76,0x51,0xd8,0xa5,0x4a,0x4b,0x4a,0x0b,0xe4,0x6b,0x93,0x61,0xc7,0xb3,0x23,0x7a,0x24,0xfa,0x5e,0xee,0x80,0x10,0x65,0x44,0xa5,0xed,0x72,0xd9 +.byte 0x8a,0x06,0x2a,0x86,0xa9,0x26,0x50,0xa1,0xb2,0xb2,0x8b,0x7b,0x4a,0x29,0xf1,0x18,0xef,0xff,0x61,0xf1,0xa1,0x48,0x0f,0x84,0x8c,0xef,0xd8,0x02,0x65,0x44,0x11,0xf2,0xe1,0xba,0x98,0x03,0xbe,0x5a,0x5d,0xb8,0x0a,0x88,0xd8,0x4a,0x49,0x4c,0x70,0xa6,0x98,0x81,0x36,0x56,0x92,0xde,0xcb,0xaf,0x33,0xf5,0x1c,0x0a,0xce,0x7a,0xc0,0xff +.byte 0x24,0x54,0xd3,0x9a,0x0f,0x82,0x76,0xe5,0x0e,0x82,0xb4,0xfe,0xc2,0xac,0xe4,0xba,0xa3,0x4c,0x8a,0x0d,0xa7,0x3e,0x2b,0x71,0x73,0x5f,0xd2,0x35,0xd3,0xae,0xc0,0x3e,0x6f,0x67,0x98,0x51,0xa6,0xdf,0xb2,0xf4,0xd2,0xc1,0x43,0xe2,0x0a,0x7c,0xa0,0xb6,0xff,0xfc,0xc0,0x88,0xe5,0x34,0x20,0x79,0x50,0xc3,0x06,0x5b,0x20,0x9f,0x05,0x33 +.byte 0x22,0x30,0xaf,0xc4,0xc3,0x17,0x09,0xbb,0x30,0x0f,0x42,0xb7,0xc1,0xe0,0x4c,0x71,0xc5,0xf7,0x96,0xb4,0xd4,0x0f,0x44,0x47,0xa3,0x06,0x17,0xbd,0x0f,0x7c,0xc6,0x53,0x07,0x34,0x9a,0x9a,0x2f,0x3f,0x01,0xea,0xdf,0x1c,0x06,0x33,0x15,0x9c,0x5a,0xe3,0x33,0x29,0xce,0x40,0x4b,0xb1,0x99,0xe0,0x80,0x6e,0x0c,0xa1,0x4c,0x34,0x01,0x21 +.byte 0x12,0xbe,0x67,0x26,0xe6,0xdb,0xab,0x8d,0x45,0xdd,0x12,0x60,0x02,0x1a,0xdd,0x85,0xd6,0x33,0x78,0x23,0xe1,0x58,0x2a,0x46,0xf0,0xc2,0x4d,0x71,0x59,0x5b,0x8d,0x65,0xa7,0x97,0xf4,0x71,0x88,0x7d,0x60,0xe0,0x2d,0x2d,0x09,0x2f,0x26,0x15,0xa7,0xbf,0x30,0x0b,0x99,0x08,0xd7,0x85,0xfc,0x0c,0x19,0x31,0xde,0x5e,0x55,0x91,0x13,0x45 +.byte 0x3a,0x6d,0xd0,0x61,0x02,0x81,0xa0,0x42,0x7d,0xd8,0x7d,0x41,0x11,0xd2,0x25,0xb7,0x15,0xa1,0x16,0x3e,0x70,0x77,0x1b,0x80,0xb7,0xf1,0x24,0x8e,0x70,0x8d,0x73,0x6d,0xba,0xf1,0x46,0x32,0x60,0xe4,0xc8,0x4d,0x69,0xc8,0x10,0xf8,0x2d,0x53,0xe1,0x81,0x96,0x20,0x9d,0x59,0x74,0xae,0x93,0x92,0x44,0x5a,0x09,0x79,0x20,0xcb,0xff,0xb2 +.byte 0x08,0x7a,0x81,0xee,0x98,0x83,0x0b,0xa4,0x15,0xb0,0xaa,0x55,0xb0,0xb5,0x60,0x09,0x21,0xeb,0xe2,0x9b,0x57,0x41,0xb9,0xb4,0xd9,0xbe,0x7d,0x60,0x5d,0x25,0xde,0x9f,0x9e,0x5b,0x7c,0xee,0xeb,0x87,0x54,0x6a,0xc3,0xcf,0xec,0x57,0xce,0x97,0x2e,0x47,0x84,0x4c,0x15,0xf4,0xf5,0xe9,0xd4,0x45,0x23,0x20,0xf0,0x0f,0xda,0x97,0xc2,0xb9 +.byte 0xb2,0xe2,0x44,0xea,0xbd,0x95,0x73,0xcc,0x94,0x03,0x0b,0x97,0xeb,0x03,0xc1,0x51,0xc8,0x14,0xa6,0x7d,0x18,0x30,0xa1,0xda,0xa3,0xcd,0x78,0x67,0xb0,0xc1,0x6c,0x88,0xdd,0xd6,0x52,0x4b,0x85,0x1d,0x4a,0xaa,0x44,0xec,0x3b,0xff,0x00,0xd8,0x9e,0x18,0xf8,0xac,0x4f,0x73,0x6d,0xc7,0x4b,0x59,0x15,0x85,0x87,0x02,0xd8,0xf1,0xe6,0xfb +.byte 0x66,0x57,0xcf,0x06,0x84,0x50,0xc5,0x67,0x94,0xc6,0x96,0xb2,0x1a,0x37,0x06,0x3d,0x21,0xf2,0x1e,0xb4,0xe7,0xcb,0x36,0x8b,0xa3,0xe3,0x84,0xa0,0x9a,0x31,0xdb,0x87,0xf9,0xb0,0xef,0x06,0xfe,0xb0,0x8a,0x32,0x53,0xb4,0x41,0x79,0x6b,0xf7,0x7c,0xf7,0x9c,0xc1,0xea,0x61,0xf3,0x75,0xac,0x1f,0x92,0x75,0x44,0x58,0x9a,0x20,0xa4,0x20 +.byte 0xe3,0x19,0x1c,0x0d,0x27,0xe5,0x2e,0xbd,0x14,0xcb,0x40,0x3f,0x1c,0x19,0x7c,0xf9,0x92,0x13,0x1a,0x71,0x87,0xaf,0x77,0x0f,0x50,0x92,0x06,0x75,0x2d,0x75,0xe0,0x2e,0x37,0x54,0xcd,0xac,0xcb,0xca,0x7c,0x0e,0x66,0x53,0x10,0x50,0x70,0x9a,0xa4,0x79,0x76,0x87,0x71,0x4a,0x55,0xd4,0xa3,0x83,0xb3,0x04,0xed,0xa9,0xd6,0x84,0x7d,0x1a +.byte 0x64,0x5d,0xf7,0x4f,0x55,0x97,0x5e,0x26,0x9c,0x03,0x42,0x0a,0x16,0xd3,0xdf,0xc8,0x07,0xb8,0xb3,0xe9,0xac,0xa9,0x99,0x83,0x32,0x5b,0x83,0xde,0x7f,0x2b,0x70,0xca,0x15,0x09,0x33,0x0e,0x28,0xc9,0x89,0xc6,0xa6,0x47,0xd1,0x56,0x04,0x40,0x5d,0xd2,0x17,0x1d,0x32,0x21,0x6d,0xb2,0xc7,0x89,0x14,0x98,0xc6,0x58,0xc4,0xca,0xda,0x0f +.byte 0x32,0xdd,0xe1,0xe1,0x9a,0x25,0x09,0x31,0x16,0xf1,0x48,0x40,0x1c,0xc2,0xf9,0xd0,0xba,0xec,0x07,0x94,0xea,0x17,0xcf,0x6e,0xbc,0xfd,0x70,0xb4,0xbb,0x40,0xae,0xc3,0xae,0xf7,0x56,0xf5,0x13,0x55,0xfb,0x4b,0x81,0x5d,0xab,0xf2,0x3f,0xd7,0xa7,0xe6,0xcf,0x17,0xef,0x1f,0x71,0x1b,0x92,0x67,0xd3,0xd2,0xed,0x89,0x14,0x8f,0x8d,0x83 +.byte 0xef,0x7f,0xca,0x65,0x6d,0x79,0x13,0x5f,0x6e,0xf9,0x5d,0x9a,0x68,0x54,0x71,0x5c,0x9d,0x03,0x7c,0x73,0x7a,0xc2,0x17,0x9b,0x5a,0x7d,0x45,0x24,0x0c,0x41,0x13,0xe4,0xcb,0xdb,0x7b,0xc6,0xfb,0x93,0x48,0xca,0xd3,0x01,0x68,0x3f,0x36,0xc0,0x4b,0x1d,0xfa,0x9f,0x25,0x0e,0xcc,0xd0,0xf7,0xa0,0x7a,0x14,0xac,0xd7,0x6e,0x00,0x9f,0xf1 +.byte 0xc0,0xdc,0xfc,0x3b,0xd9,0xbf,0x68,0xfd,0x65,0x34,0x66,0x18,0xe5,0x02,0x9a,0x2d,0xff,0xaa,0xf7,0x73,0x58,0x21,0xe3,0xff,0x23,0x0f,0x63,0x1f,0xf3,0x8b,0x08,0xc7,0x00,0x46,0xe7,0xef,0x85,0x5f,0x7f,0xd9,0x5f,0xc2,0x36,0xe2,0xb6,0xa3,0x00,0xcb,0xff,0xe0,0x22,0x28,0x8c,0xb1,0xb1,0x17,0x91,0x4a,0x4a,0xc8,0x77,0x5a,0xa9,0xb2 +.byte 0x6e,0xb7,0xf0,0x4f,0x70,0x34,0x7f,0x87,0x2a,0x0c,0xcb,0x16,0x24,0x9b,0x41,0xb2,0x3e,0x0a,0xc1,0x33,0xf3,0xbb,0x48,0x17,0x2f,0xe6,0xfc,0xf4,0x27,0xc0,0xdb,0x58,0x24,0x9b,0x99,0x43,0x25,0xfb,0xd3,0xcf,0x1c,0x5a,0x5f,0xbe,0x28,0x3a,0x84,0x51,0x19,0xc3,0x53,0x6b,0xc8,0x73,0x44,0x6e,0x3d,0x7e,0x01,0x37,0xc2,0x2b,0xf7,0xa8 +.byte 0x1f,0x8e,0xd8,0x02,0x5a,0xae,0x56,0x81,0x2b,0x46,0x1b,0x7d,0xca,0x27,0x1f,0x48,0x99,0x24,0x54,0x59,0x08,0xfd,0xb7,0xdf,0x0a,0x77,0xef,0x4e,0x89,0x21,0x71,0x71,0x3f,0x8c,0xd7,0x52,0x89,0x7a,0x0d,0x68,0x09,0xc8,0x88,0x9c,0x0c,0x60,0xca,0x77,0x96,0xeb,0x05,0xeb,0xeb,0x60,0x5b,0x68,0x51,0x2c,0xcb,0x8f,0xca,0x3b,0x18,0x39 +.byte 0x28,0x8f,0xda,0x17,0x9b,0x53,0x71,0x26,0xa9,0x19,0xfb,0x1e,0x4a,0xd0,0x14,0x93,0x1c,0xee,0xe1,0x21,0xea,0xb3,0x16,0x47,0xaf,0x50,0xe5,0xe5,0xd3,0x21,0x8c,0x67,0x46,0x5d,0x97,0x19,0xda,0x6e,0xd9,0x70,0x7d,0x9f,0xd6,0x25,0xd0,0xfb,0x01,0x62,0x0a,0x9e,0x49,0x3d,0x33,0x0d,0x35,0xe5,0xae,0xfd,0xeb,0xb5,0x9b,0xd8,0xc1,0x2a +.byte 0xee,0x4d,0xf2,0xfc,0x16,0x51,0xab,0x58,0x7a,0x9e,0x5c,0xca,0x0a,0x92,0xbb,0xbb,0xa8,0x5b,0xfb,0xf9,0x33,0x67,0x0e,0x13,0x4c,0x83,0x3a,0x25,0x84,0x23,0xe1,0x41,0xfb,0xf1,0x42,0xc1,0x8d,0x58,0x0c,0x5e,0x75,0x09,0x34,0x58,0x96,0x32,0x54,0xb6,0xd8,0xaa,0x48,0xc1,0xed,0xc0,0x92,0x5a,0xec,0xeb,0xb1,0x75,0x59,0xf6,0x35,0xf5 +.byte 0xfd,0x7d,0x96,0x9b,0x83,0x38,0x31,0x10,0xa4,0xd7,0xfb,0x28,0xf0,0xc9,0xe4,0x33,0x5d,0x66,0x81,0x9c,0x31,0x9a,0xe9,0x9a,0x5e,0x70,0xf7,0x61,0xf9,0x93,0xaf,0x2b,0xbd,0x78,0x9e,0xdc,0x61,0xe0,0xa9,0xd1,0xa0,0x8e,0x3a,0x5f,0xb1,0x71,0xe7,0x9e,0xfd,0x81,0xee,0xf0,0xd6,0x63,0xec,0x4a,0xca,0x30,0xaf,0xb6,0x2d,0xaa,0x2d,0xa1 +.byte 0x5a,0x38,0xb5,0xc6,0x3f,0x5f,0x63,0x48,0xd3,0x18,0xeb,0xe3,0x36,0xca,0x91,0x86,0x4b,0x6f,0x57,0x66,0x47,0x2f,0xce,0xe4,0x44,0x26,0xe4,0xfd,0x8c,0xde,0x74,0xdc,0x17,0x0e,0x7d,0x6a,0xcf,0x89,0x0e,0x7f,0x09,0x65,0xf8,0xeb,0x58,0x00,0x3d,0xc5,0x1b,0x14,0xc5,0xca,0xca,0x28,0xbc,0xb7,0x63,0x6f,0x3b,0xa4,0x62,0x23,0x0e,0xd5 +.byte 0x04,0x76,0x0c,0xe8,0xea,0x64,0x10,0x3a,0x76,0x03,0xd6,0xea,0x69,0x52,0x14,0xa7,0x5e,0x40,0x7e,0x14,0xdb,0x7f,0xbf,0xe8,0xf6,0xf0,0xdd,0x5e,0xac,0x55,0x44,0xfb,0x28,0xf3,0x16,0xcb,0xed,0x8f,0x10,0x01,0x91,0xac,0x2c,0x27,0x46,0x0c,0x51,0xd6,0xf6,0x30,0xa3,0x34,0xd0,0x5e,0x93,0xe8,0x4e,0xc0,0xb4,0x9b,0xc1,0xe8,0x20,0x7d +.byte 0xb7,0x68,0xdd,0xf1,0xc4,0x60,0x20,0x97,0xdd,0x5c,0x7c,0x9b,0xea,0xc0,0x22,0x84,0x2c,0x65,0x78,0xbd,0x18,0xa1,0x62,0x7e,0x06,0x49,0x96,0xde,0xd1,0x89,0x06,0x0d,0x35,0xa0,0xcc,0x22,0xd3,0xf5,0xa6,0x4b,0xb6,0xca,0x43,0x34,0x5a,0x3d,0x39,0x95,0x0b,0x95,0xbe,0xdc,0xe6,0x61,0x72,0xbe,0x2f,0x19,0x1c,0xe8,0x22,0x5e,0x18,0xc9 +.byte 0x59,0x4a,0x08,0xa3,0x85,0x5c,0x06,0x36,0x00,0x2e,0x84,0x3e,0x3e,0x07,0x5b,0xfa,0xda,0xbb,0xbb,0x57,0x20,0x6f,0x1b,0x8d,0xe5,0xc5,0xdb,0x8d,0x23,0x1a,0xfc,0x67,0xa9,0xc8,0xea,0xe1,0x54,0xbb,0x8a,0x8a,0x0b,0xa6,0x02,0x35,0xd6,0xd5,0x4d,0xff,0x09,0x79,0x31,0x9a,0xc2,0xad,0xa7,0x66,0xb5,0x3c,0xbd,0xb7,0xcb,0x17,0x30,0x4b +.byte 0x56,0xf5,0xd2,0x51,0x90,0xbb,0x47,0x00,0xc0,0xf3,0x8b,0xd7,0x10,0x33,0x6d,0xe8,0xe4,0xcf,0xd6,0xbf,0x35,0x75,0x8d,0x40,0x55,0xd7,0x5d,0xb0,0x40,0xf6,0x95,0xfb,0x1a,0x97,0x24,0xb8,0xc1,0x91,0x5f,0x66,0x6c,0xc7,0xdb,0x16,0xba,0xb8,0x07,0xf8,0xf8,0x91,0xb2,0x8c,0x26,0xb9,0xa2,0x59,0xb0,0xde,0x49,0x63,0xcc,0x7c,0x4c,0x48 +.byte 0xb5,0xe4,0xf9,0x81,0x28,0x48,0x9f,0xa0,0xa4,0xf8,0x0d,0xcc,0x7b,0xf3,0xce,0x08,0x85,0x73,0x4a,0x64,0xfc,0xa8,0xc0,0xae,0x7a,0xbf,0xa5,0x3f,0x45,0xaf,0xe7,0x7f,0x41,0x61,0x34,0x08,0x6e,0x09,0x0d,0x9d,0xea,0x90,0xbe,0x62,0x7c,0x38,0x92,0xa7,0x63,0xfa,0x03,0x80,0x10,0xc4,0x53,0x46,0x0b,0x44,0x88,0xea,0x50,0xb6,0x82,0xf8 +.byte 0x0b,0x2d,0x93,0x63,0x82,0x80,0x2b,0x61,0x3e,0x17,0xd1,0xd8,0x6c,0xb1,0xb4,0xbd,0xfd,0xad,0x1c,0x10,0x30,0xc1,0x78,0xd4,0x5f,0x21,0x49,0x54,0x7a,0x08,0x2b,0x25,0x3b,0xc9,0xb7,0x0a,0xf2,0x37,0x83,0xc0,0x43,0x73,0xee,0xd6,0x8b,0x92,0x15,0xde,0xfe,0x14,0xf1,0xfb,0x8b,0x4a,0x85,0x8d,0x78,0xe6,0x36,0x1a,0xbb,0x32,0x6c,0xdd +.byte 0x43,0x76,0xad,0x68,0x90,0x08,0xd2,0xbd,0x24,0x41,0xd4,0x93,0x17,0xa8,0x9f,0xeb,0x33,0x25,0x1f,0x1a,0xfd,0x45,0x20,0xc1,0x47,0xf1,0x25,0x09,0x89,0x14,0x9e,0x4c,0x88,0xa4,0x1c,0xb8,0xba,0x84,0xd5,0x7d,0x73,0xb2,0x9c,0x48,0x9f,0x84,0x31,0xd3,0x2c,0xe1,0x94,0x61,0x3e,0x5f,0x37,0x25,0xc7,0xb7,0x2d,0xc3,0xa9,0xaf,0xcc,0x0e +.byte 0xe6,0xc7,0x9a,0xa7,0x06,0xe3,0x41,0xb8,0xa6,0xa8,0x9a,0xe7,0x76,0xef,0x83,0x5a,0x80,0xa4,0xe3,0x0c,0x04,0xa2,0x0b,0x91,0x33,0x34,0x17,0xa4,0x02,0x2d,0x12,0x84,0x67,0x85,0x6b,0xc0,0x3a,0x0d,0x16,0xf2,0x66,0x04,0x71,0xe9,0xec,0xa6,0xbb,0x58,0x42,0x92,0x70,0xf5,0x0d,0x52,0xcd,0x1e,0x2d,0xd4,0x28,0x0f,0x68,0x35,0xd9,0xa4 +.byte 0x40,0x09,0x30,0xe9,0xbb,0xaf,0x77,0x63,0x4f,0xba,0x56,0x97,0xe8,0x92,0xcc,0xba,0xdb,0xe4,0xe0,0xdf,0x19,0x21,0x71,0x23,0x3d,0xd0,0xb1,0x25,0xd3,0xf8,0x53,0x01,0x30,0x9a,0xea,0x84,0x1b,0x18,0x68,0x4a,0xb9,0x9e,0x60,0xc4,0xfc,0xf7,0x56,0xb7,0x49,0xe1,0x50,0x38,0x7d,0x3d,0x87,0xa2,0xad,0x38,0x5c,0x0c,0x53,0x21,0xa0,0x56 +.byte 0x3a,0x94,0xd7,0xa8,0x23,0x96,0xa9,0x66,0x4e,0x88,0xae,0x4b,0x6e,0xcb,0xc6,0xa6,0xdb,0x1f,0x2e,0xae,0xe7,0x24,0xe2,0x1e,0xf7,0x3a,0x14,0x48,0x5e,0xfa,0x90,0x0a,0x84,0xa6,0x1c,0xaa,0x60,0xc0,0x2c,0x69,0xe8,0x36,0xb3,0xee,0x55,0x2a,0xf7,0x90,0xa1,0x92,0x4f,0x29,0x1e,0x49,0x6e,0x73,0x22,0x1f,0x8b,0x0c,0xb6,0xf4,0x3c,0xbf +.byte 0x82,0x47,0x49,0xc3,0x94,0x0e,0xcf,0x9b,0x86,0x88,0xc2,0xd0,0xd7,0xa7,0x43,0xfb,0x89,0x4b,0xbd,0x5d,0x4c,0x6b,0x7a,0xc7,0x74,0x1b,0xfb,0x48,0x12,0x68,0x61,0x91,0xf9,0xf3,0xb6,0x7f,0x4f,0x72,0x89,0xf0,0x72,0x46,0xf7,0x6f,0x84,0xd1,0x38,0x6d,0xd9,0x1b,0xa5,0xd1,0xe2,0x29,0xe0,0xa6,0xbf,0x1c,0xbd,0xfb,0xdd,0xdc,0xa5,0xae +.byte 0x7a,0x9c,0xd0,0xc3,0xfa,0x6f,0x72,0xa3,0xa2,0x8b,0x87,0x0d,0x9a,0x6a,0xfc,0x53,0x9a,0x08,0x61,0x86,0x67,0x2a,0x90,0x6a,0x09,0x20,0x8e,0xde,0x32,0x35,0x34,0x75,0xc0,0xa8,0xab,0x1b,0xc4,0x7c,0xc8,0xd9,0x90,0xcf,0x32,0x27,0x6c,0x68,0xf9,0x18,0x14,0x05,0x57,0x39,0xc6,0x9e,0x5e,0x38,0x07,0xdb,0x81,0xb4,0xa4,0x54,0x06,0xd6 +.byte 0x79,0x78,0x0e,0xc8,0xb9,0x56,0xda,0x08,0x2e,0x77,0x26,0xcc,0xf7,0xa5,0x2d,0xd8,0x91,0xa6,0xfc,0x25,0x0e,0x91,0xdd,0x3c,0xa8,0x14,0x7a,0x95,0x05,0x5b,0x15,0x7d,0x1d,0x9b,0x3c,0x8c,0xfd,0xdc,0xa5,0xcd,0xec,0xea,0x7a,0x2b,0x7e,0x79,0x21,0x54,0xea,0x7f,0x52,0xb4,0xbb,0x4f,0x07,0x95,0x39,0x4a,0xaf,0x2e,0xb4,0x1e,0x9e,0xc6 +.byte 0x0a,0x07,0x58,0xd4,0xa5,0x44,0x73,0xa8,0x84,0x26,0x67,0xb8,0x0f,0xc7,0x6b,0xa7,0x28,0xf6,0x05,0x91,0x3e,0x22,0xcd,0xd7,0xf5,0xfc,0xae,0x22,0x42,0x96,0x3b,0x57,0x91,0xce,0x44,0xd0,0xfd,0xc3,0x4c,0x8b,0x8b,0x67,0xfe,0x03,0x86,0x92,0x34,0xf7,0xf9,0x53,0xb3,0xdf,0x36,0xcf,0x16,0x1c,0x68,0x36,0x17,0x1f,0x41,0x56,0x1d,0xda +.byte 0x90,0xb3,0xab,0x03,0x97,0x88,0x23,0x65,0x89,0x72,0xe3,0x6d,0x8e,0x37,0x5d,0xee,0x89,0x81,0x11,0x27,0x8b,0xf0,0x9b,0xef,0xa2,0x34,0x45,0xcc,0x41,0xcf,0x2a,0x88,0x70,0xe4,0x78,0xfc,0xe1,0xb5,0x51,0x70,0x84,0x64,0xd1,0x10,0x71,0x5d,0xa4,0xb4,0x6d,0xb5,0x98,0x6e,0xcc,0x9a,0x62,0x14,0x30,0xce,0x1a,0xff,0x49,0xd6,0xaa,0xcc +.byte 0xe1,0x99,0x42,0xb1,0xfe,0x77,0x8a,0x2d,0xdb,0xc0,0x0d,0x50,0x53,0x0d,0x92,0xe5,0x2b,0xd0,0x78,0x83,0x08,0x4a,0x0c,0x1d,0x5b,0x03,0x22,0x65,0x3d,0x9e,0xdb,0xcf,0x01,0x61,0xf7,0x6d,0x2b,0x99,0xef,0xba,0x80,0x50,0xda,0xda,0x2d,0xbf,0x00,0xdf,0x6f,0xec,0x95,0xbc,0x5b,0x4e,0xda,0x83,0xe4,0x5d,0xf0,0xa7,0x1b,0x27,0xf1,0x76 +.byte 0x04,0x5d,0x3d,0x2c,0x12,0x15,0xad,0xef,0x47,0xdc,0x22,0x9b,0xc2,0x80,0x91,0xf3,0xbf,0x16,0xe9,0xd3,0x35,0x94,0x4b,0xfd,0xa3,0xa1,0xee,0x98,0xad,0x99,0xea,0x07,0xe1,0x0f,0xa7,0xbd,0x0b,0xfb,0xc0,0xd5,0xb0,0x49,0x37,0xc6,0x5f,0xe7,0x18,0xc1,0x60,0xe9,0x1d,0x5e,0x0e,0xea,0x73,0xf2,0xa1,0x75,0x7e,0x39,0x51,0x07,0x1e,0xcb +.byte 0x2a,0x5b,0x26,0x75,0xbe,0x02,0x5e,0xde,0x6c,0x37,0xb1,0x3c,0x1f,0x25,0x65,0x7d,0x9e,0x5d,0xa1,0x0b,0x98,0x27,0x53,0xb9,0xbb,0xc2,0x3e,0x8d,0x2d,0x5e,0x5c,0xbf,0xed,0x66,0xe8,0xd1,0x7d,0xaa,0xef,0xca,0x0e,0xd0,0x78,0x2b,0x89,0x07,0x76,0xb6,0xc3,0x92,0x42,0x3a,0x84,0x1d,0x81,0xc1,0xe8,0x1a,0xb8,0xe6,0xf1,0x43,0xcc,0x7a +.byte 0x59,0x4d,0x9f,0x00,0xfe,0x6a,0xe5,0x42,0x71,0x3c,0xcb,0xc8,0x45,0x18,0xf0,0xf2,0x81,0x9d,0x5a,0xb7,0x8d,0xbe,0x31,0xcb,0x7d,0xca,0xb7,0x19,0x57,0xb1,0x61,0x36,0x90,0x42,0xe2,0xc3,0xf5,0xa5,0x4b,0xc3,0xd4,0xe7,0x6c,0xb6,0x0c,0x06,0x19,0x4b,0x54,0x8f,0x2d,0xdc,0xc5,0x2b,0xff,0x1c,0x61,0x29,0xda,0x95,0x4f,0xa1,0x21,0x25 +.byte 0x24,0xbe,0xc7,0x34,0x2f,0xbf,0x33,0x6d,0x82,0x8f,0xf1,0xa9,0x97,0x5a,0x49,0x7f,0x60,0x00,0xf2,0x3e,0x7b,0x64,0xdf,0xc8,0xd3,0x5f,0x6e,0x1f,0xfb,0x71,0x80,0xf3,0x55,0x42,0xbe,0x32,0x7b,0xa9,0xeb,0xf6,0x31,0xe2,0xf0,0xd1,0xe9,0xbe,0x96,0x0e,0xb3,0xdf,0x3e,0xb2,0x2c,0xc3,0xce,0xbd,0xe7,0xfe,0x1c,0xed,0x2c,0x0b,0xaa,0x32 +.byte 0x76,0x82,0xb4,0x6b,0x18,0xa7,0x68,0x19,0xb7,0x27,0x21,0x4c,0xb0,0x22,0x98,0x58,0xd5,0x90,0x80,0xab,0xa1,0xfe,0x83,0xc5,0x66,0xf6,0x3e,0xa2,0xa9,0x6f,0x73,0xce,0x7f,0x0c,0xe6,0xde,0xee,0xb0,0xe6,0x2a,0xcc,0xcc,0xb0,0x53,0x8c,0xce,0xc8,0xdc,0xea,0x83,0xb4,0x0e,0x69,0x8d,0x90,0x86,0xaa,0xe3,0x3b,0xfb,0x88,0xe2,0xe8,0x27 +.byte 0x65,0x36,0x07,0xb3,0x91,0x0e,0x5a,0x6b,0x9f,0x0f,0xbd,0x81,0xb3,0x54,0x65,0x71,0xa4,0x2c,0x8e,0xda,0x47,0x04,0xce,0xfe,0x00,0x52,0xf1,0xdf,0x82,0x27,0x70,0x2a,0xb1,0x79,0x2f,0x27,0x7f,0xae,0x9e,0x5c,0x36,0xec,0xa0,0x2a,0xf3,0x74,0x78,0x01,0x17,0x74,0x2a,0x21,0x4f,0xb8,0xd2,0xe4,0xfe,0x5b,0x06,0x14,0xa5,0xb1,0xb1,0xff +.byte 0xee,0x79,0xf7,0x18,0xb9,0x31,0xa4,0x63,0x47,0x1c,0xdf,0x38,0x04,0x2d,0x18,0xca,0x14,0xf8,0x2f,0xec,0x0d,0x58,0xad,0xbb,0xf4,0x45,0x11,0x0e,0xfa,0x17,0x4c,0x5e,0xd4,0xa6,0xde,0xe4,0x13,0x44,0x2c,0xb9,0xfd,0xcd,0x41,0xe7,0xf9,0xda,0xbc,0x28,0x8f,0x0c,0x41,0x4d,0xa7,0x0d,0xf5,0x96,0xd7,0x8f,0x10,0x96,0xfb,0x75,0x75,0x86 +.byte 0xc9,0x6e,0x23,0x92,0x71,0x69,0x7b,0x94,0x61,0x1c,0x3f,0xcf,0x66,0x34,0x62,0x68,0x5d,0xee,0x7b,0x34,0x5d,0x2a,0x39,0xbb,0x6a,0x34,0xea,0x6e,0xe3,0xe9,0xdb,0xe4,0x34,0x6e,0x29,0x0b,0x21,0x38,0xe7,0x5b,0x79,0x37,0x54,0xf0,0xed,0xaa,0x07,0x2b,0x21,0x29,0x67,0xfe,0x7d,0xa5,0x99,0x0e,0x5d,0x05,0xe7,0x61,0x6e,0xd1,0x4a,0x15 +.byte 0x4a,0x56,0xb1,0x13,0x49,0x8c,0xf4,0x4f,0xd7,0xe9,0x68,0xae,0x09,0x37,0xd3,0x96,0x21,0xe8,0x1f,0x9f,0xa9,0xc6,0x54,0x57,0x63,0x09,0x1e,0x71,0xf2,0x48,0x9e,0x50,0xbb,0xb3,0xf1,0x4e,0x2d,0x1d,0x79,0x69,0x0a,0xa2,0xa9,0xdd,0x1b,0x55,0x62,0x6b,0x0d,0xcc,0x9c,0xb1,0x5e,0xc8,0x4c,0x4f,0x62,0x3c,0xc4,0xa3,0xb4,0xe4,0x34,0xec +.byte 0x9d,0x0c,0x1b,0x46,0x60,0x68,0xd5,0x04,0xd7,0x1b,0x3c,0x7a,0x98,0x0c,0xd9,0x87,0x2b,0x4f,0x97,0x5b,0x56,0x65,0xb0,0x06,0x6e,0x9e,0x06,0x37,0x0e,0xd2,0xa1,0x52,0xf5,0xaa,0x2b,0xec,0xbd,0x0f,0xb6,0xba,0x48,0x63,0x57,0x51,0xe3,0x00,0x53,0xf5,0x77,0xb2,0xa4,0xb1,0x44,0x01,0x3e,0xcf,0xe9,0x2a,0x7a,0xf5,0x19,0x5e,0x43,0x36 +.byte 0xe0,0x38,0x41,0xbc,0xda,0xb5,0xd0,0x69,0xdf,0xd2,0x04,0xd4,0xf8,0x38,0x37,0x1c,0x90,0x30,0xf2,0x3d,0x03,0xe4,0x3f,0x84,0x2c,0x9a,0xa4,0x8a,0x00,0x4e,0x49,0x24,0x62,0x06,0xb4,0x9d,0x33,0x8a,0x8e,0xd2,0xbd,0x1b,0xa1,0x83,0x0b,0xa5,0xa2,0x5c,0xcf,0xb1,0x65,0x85,0x92,0x1f,0xb0,0x2e,0x3b,0xb2,0xf3,0x80,0xff,0x9d,0x41,0x4d +.byte 0xcd,0x25,0x09,0x02,0x85,0xb3,0xa8,0x49,0x12,0x10,0xe7,0x5c,0x94,0x13,0x4b,0x52,0x53,0x35,0x9c,0xbc,0x7a,0xad,0x04,0x19,0x54,0x8a,0xbc,0x42,0x73,0xf1,0x0a,0x22,0x75,0xbf,0x3b,0x12,0xa8,0xa4,0x47,0x5c,0x95,0x48,0x60,0x71,0x5c,0x9a,0x39,0x5c,0xdb,0x44,0xe8,0x74,0x92,0x3e,0x2b,0x3b,0x1b,0xb7,0x21,0x98,0xe1,0x87,0x32,0xaf +.byte 0x4a,0xe3,0xda,0x4a,0x46,0xde,0x15,0x4c,0xdc,0xc6,0x60,0xe6,0xd7,0x92,0x29,0x05,0x21,0x22,0x9b,0xaf,0xc4,0xd7,0x6a,0xea,0x2c,0x82,0x5d,0xc7,0x81,0xe2,0x67,0x85,0xd2,0x16,0x6f,0x83,0xa8,0x82,0x5f,0x8f,0xf5,0x3a,0x50,0xba,0x04,0xcb,0x76,0x4d,0x80,0x16,0x12,0x72,0xa8,0x6c,0xac,0x78,0xf1,0x8c,0x93,0xab,0xe0,0xb5,0xdc,0xd1 +.byte 0xa5,0x40,0x0e,0x50,0x88,0xd2,0x9d,0x56,0xf6,0xa0,0xd4,0x45,0xcf,0xef,0x16,0x1a,0xa4,0xaa,0x91,0x5c,0xa3,0x8f,0x84,0xf8,0x3e,0x30,0x1f,0x5f,0x55,0xf9,0xd3,0x3d,0xb8,0x64,0xbb,0x3c,0x91,0xe4,0x0d,0xa5,0x43,0x14,0x75,0xe7,0xec,0x8c,0x12,0x56,0x34,0xb0,0xa9,0xae,0x93,0x91,0x34,0xfc,0x78,0xa3,0x81,0x51,0x45,0x7d,0x9f,0x7d +.byte 0x5e,0xc7,0x5e,0x51,0x17,0xfa,0x02,0x5d,0xb2,0xf7,0x79,0x4b,0x49,0xd2,0x1b,0x6f,0xfd,0x9e,0xff,0x75,0x74,0xf0,0x26,0x7e,0xd7,0x65,0xb0,0xf3,0x0a,0x0c,0xd2,0xa2,0x26,0x98,0x03,0x26,0xb5,0x67,0xc4,0xc0,0xed,0x80,0xd4,0x20,0xf6,0x7e,0x17,0x54,0xeb,0xde,0xc3,0x86,0x51,0xda,0xf7,0xe5,0xc7,0xfe,0xfc,0x71,0x83,0x80,0xbe,0xde +.byte 0x4b,0xda,0x83,0x76,0x63,0x04,0x03,0xdd,0xe0,0xe0,0x4e,0xb6,0x32,0xd5,0xd0,0xce,0xd7,0xaa,0xcd,0x5f,0x64,0xa6,0xd8,0x9e,0xc5,0x97,0x30,0xad,0xf1,0x82,0x8f,0x7c,0x18,0xec,0x30,0x1d,0x2d,0xb6,0xdb,0x33,0x65,0xed,0xe2,0x24,0xd8,0xba,0x0a,0x1f,0x79,0x2a,0x1c,0xe1,0x4e,0x04,0xa6,0x74,0x74,0x37,0x42,0x94,0xc4,0x99,0x0e,0xf8 +.byte 0x3f,0xf3,0xff,0xeb,0x7f,0x95,0x9c,0x47,0x56,0x68,0x6a,0x0d,0x6e,0x66,0x71,0x3b,0x51,0xd5,0x12,0x7e,0x59,0x39,0x43,0xb5,0x53,0xd3,0x1d,0xa2,0xe9,0xa1,0xc8,0x8d,0xf2,0x8e,0xa1,0x9c,0x36,0xdd,0xda,0xd3,0x61,0xd8,0xe9,0x76,0x5e,0xcb,0x0a,0x52,0xc8,0x5a,0x25,0x00,0x21,0xea,0x6a,0x96,0xde,0x02,0x76,0x02,0x63,0x73,0x28,0x63 +.byte 0x46,0x37,0xe1,0x75,0x2f,0x42,0x8f,0xee,0x2c,0x84,0x82,0x43,0x43,0x2d,0xa9,0x13,0x50,0x46,0x54,0xed,0x76,0xbd,0x10,0x1c,0x9b,0xa1,0x42,0x97,0x68,0xca,0x84,0x2e,0x1d,0x6f,0x86,0x67,0xaf,0xb7,0x20,0xc1,0x7c,0xab,0x70,0x20,0xa1,0x79,0x71,0xe4,0xb7,0x45,0x8a,0x04,0xd3,0x70,0x10,0xa8,0x28,0xc3,0x56,0xff,0x43,0x36,0x13,0x88 +.byte 0xb6,0x2d,0xfd,0x7f,0xbc,0xc9,0x1d,0x11,0x9a,0x7c,0xd0,0xfc,0x11,0xac,0x54,0xd5,0xc3,0x03,0xd1,0xe3,0x9e,0xff,0x03,0xdb,0xd9,0xd8,0x77,0x96,0x08,0xf4,0x1b,0xd9,0xfa,0x70,0xed,0xab,0x53,0x78,0xca,0x28,0xa7,0x29,0x49,0x45,0x37,0x10,0x8f,0x61,0x7d,0x11,0x99,0x2e,0xe8,0x5d,0x45,0x3a,0xe7,0xd2,0x6c,0xb6,0x03,0xc4,0x6d,0xaa +.byte 0x52,0x60,0x8c,0xc6,0x9c,0x17,0xba,0xf6,0x3b,0xd4,0x4b,0x26,0x63,0x92,0x8c,0xb9,0x6a,0xf2,0x26,0x91,0x9d,0x8d,0x99,0x39,0x26,0x7d,0xb5,0x4f,0x4c,0xc6,0x0e,0x2e,0xe1,0xc6,0xcb,0x98,0x93,0x71,0x9b,0xaa,0x01,0x40,0x70,0x93,0x2a,0xe8,0x27,0xc5,0x20,0xa7,0xd2,0x06,0x8b,0xb0,0x29,0xcd,0x4f,0x2c,0x5a,0xde,0x35,0xc7,0x2a,0x8e +.byte 0xa7,0xae,0x02,0xfa,0x8e,0x4d,0xf3,0x77,0x67,0xe0,0xcb,0x84,0x69,0xc6,0x05,0xe4,0x84,0xe3,0x6e,0x02,0x6c,0x3b,0x93,0x30,0x3e,0x89,0x2c,0xc7,0xa5,0x7e,0xaa,0x58,0x59,0x25,0xf6,0xff,0x56,0x9a,0x4a,0x70,0xbf,0x88,0x20,0x8d,0x51,0x5e,0x08,0x13,0x26,0x2c,0x5d,0x88,0x13,0x3e,0x32,0x7a,0xf6,0x17,0x5c,0xdb,0xc4,0xcd,0x5a,0x16 +.byte 0x65,0xe4,0x34,0xeb,0x21,0x6d,0xb9,0x30,0x5d,0xc0,0xa2,0xea,0x4f,0x63,0x0e,0xbe,0x32,0x91,0x89,0x6f,0x96,0x40,0xf3,0x5f,0xa3,0xf2,0x15,0xc3,0x3c,0x3c,0xb8,0x2f,0x0d,0xc2,0xcd,0x4e,0xa0,0xa5,0xf6,0x78,0x40,0x0b,0x90,0x11,0x52,0xff,0x8f,0x7f,0x6a,0x0c,0xd6,0x3b,0x64,0x80,0x47,0xfa,0x70,0xbe,0x01,0xdc,0xdf,0x5b,0x75,0x7c +.byte 0xca,0x66,0xf0,0x2a,0x53,0x89,0x55,0x87,0xf8,0xec,0xd1,0x18,0x22,0x0c,0xd5,0x0e,0xc8,0x1c,0xbc,0x1e,0x66,0x14,0x44,0x10,0x3c,0xd4,0x2e,0xca,0x0b,0xd8,0x3f,0x81,0xd8,0x9f,0x81,0xf6,0x62,0x23,0xe4,0xc7,0x0d,0xb0,0x1b,0x00,0xd8,0xf4,0x1a,0xdd,0x9b,0xa1,0x74,0xeb,0xf0,0x65,0x5c,0x82,0x00,0x17,0xa6,0x68,0x29,0xd5,0xa4,0x64 +.byte 0xd3,0x15,0x90,0xd0,0x91,0x17,0xfc,0xd2,0xd7,0xad,0x4b,0xd8,0x41,0x03,0x51,0xfd,0x61,0xac,0x34,0xd4,0xff,0xaa,0xb1,0x64,0x6c,0x79,0x78,0xf7,0x6b,0x18,0x03,0x2b,0x6b,0x9a,0xd7,0xce,0x55,0x6e,0xdd,0xab,0x2e,0xbc,0x27,0x3a,0x8c,0xa5,0x8d,0xf0,0x55,0x81,0x0c,0x6e,0x8d,0xd8,0xd2,0x24,0x5e,0x2e,0x56,0xa8,0x1e,0x9c,0x98,0x88 +.byte 0xd3,0xbe,0x90,0x56,0x70,0xe5,0xcc,0x49,0x2a,0x13,0x98,0x99,0xbd,0xc9,0x9f,0x53,0x85,0x07,0xbe,0x54,0xa7,0x4c,0xd6,0x96,0x7d,0x8f,0x24,0x79,0x67,0xb2,0x62,0x4c,0x6a,0xc1,0x6c,0xb7,0xdc,0xe9,0x21,0xe3,0x27,0xc7,0x53,0xff,0xe7,0xd1,0xea,0x60,0xa8,0x56,0x08,0x5c,0x29,0x0a,0x04,0x0c,0xda,0x7a,0x70,0x8c,0x3d,0x55,0x3f,0xcf +.byte 0x9e,0xea,0x74,0x8b,0xbc,0xf0,0xf1,0x3a,0x86,0x22,0xe5,0x54,0xa7,0x70,0xc2,0xcd,0xb8,0x9f,0x4e,0x9f,0x48,0xa8,0xc0,0x82,0x0d,0x73,0x8b,0x3c,0xfc,0x20,0xf4,0xbe,0x79,0xde,0x8e,0x3c,0x26,0x85,0xde,0x74,0xd1,0xe3,0xd5,0x8f,0x39,0x71,0x46,0x8c,0xbd,0x68,0x28,0x2d,0x36,0x0d,0x66,0xc1,0x0b,0x96,0x3e,0x11,0x2e,0x44,0x17,0xd5 +.byte 0xfe,0x0d,0x70,0x84,0x96,0x20,0x34,0x2f,0xbe,0xf0,0xf5,0x9b,0xb4,0x5a,0xa9,0x50,0x6a,0xda,0xdb,0x69,0xea,0xef,0xa9,0xaa,0x06,0xc0,0x68,0xa4,0x61,0x1b,0x4b,0xf8,0x0b,0x56,0x91,0xc8,0x6f,0x39,0x15,0xe2,0xcc,0xbf,0x2b,0x36,0x96,0x0c,0x84,0xfb,0x3d,0x4b,0x09,0xe3,0xc2,0x4b,0x05,0x5e,0xfa,0x30,0x75,0xc5,0x54,0xa5,0xbd,0x45 +.byte 0x1e,0x14,0x72,0xd6,0xfd,0xe0,0x8f,0x7b,0x46,0x9b,0x11,0x07,0x27,0x03,0xe1,0x2d,0xcc,0x0a,0x01,0x49,0x61,0xc4,0x61,0x78,0x06,0x5f,0xaa,0x01,0x5b,0x68,0xd7,0x29,0xb4,0x9e,0xd3,0xaf,0xc7,0x45,0xf0,0x23,0xaf,0x28,0xcd,0x96,0x23,0x61,0xb2,0xb4,0x21,0x96,0x5d,0x91,0x3e,0x71,0xb5,0x41,0xf1,0x29,0xf4,0x5b,0x45,0x77,0x16,0x00 +.byte 0x9d,0x39,0x2a,0x1c,0x38,0x6d,0x36,0x97,0x98,0x4c,0x84,0xfc,0xf5,0xf1,0x59,0x7a,0x8c,0x21,0xfb,0xbc,0x9b,0x0c,0x8d,0x60,0xb6,0xc4,0xe3,0x4b,0x33,0x4f,0x04,0x4c,0x27,0xd2,0xa0,0xe1,0x71,0x0b,0x6d,0x40,0x8d,0xba,0xb3,0x11,0x9b,0x07,0x97,0x82,0x01,0x47,0xaa,0x2a,0xd4,0xcc,0x02,0xd3,0x86,0x86,0xb5,0xd7,0x5d,0xbc,0xd0,0x0f +.byte 0x97,0x5c,0xe5,0xac,0xc6,0x53,0xb3,0x39,0x09,0x68,0x2e,0xcc,0xf3,0x43,0xba,0xed,0x15,0x90,0xbe,0x9d,0xeb,0xa4,0xfb,0x4a,0x20,0xcf,0x10,0xb9,0x47,0x99,0xb0,0x89,0x26,0xb9,0xbd,0x4b,0xf6,0xa5,0xbd,0x2f,0xad,0x1a,0x75,0xe8,0xff,0xc6,0x6b,0x6a,0x31,0xbe,0xec,0xd2,0xc4,0x39,0x9e,0x3b,0x05,0x3f,0x24,0xba,0xf1,0x4d,0x0c,0x0c +.byte 0x05,0x60,0x60,0x22,0x0c,0x1b,0x0b,0x6c,0x80,0xd5,0xe8,0x8f,0x81,0xee,0x80,0x41,0x4a,0x69,0x47,0xc6,0x4c,0xeb,0xf6,0x2b,0x91,0x7c,0x9f,0x22,0x74,0x7b,0x43,0x95,0x56,0x55,0xba,0x85,0x23,0xb3,0xc3,0xee,0x6a,0xcc,0x49,0x2c,0x6c,0x86,0x6d,0x60,0x5d,0x84,0x0c,0x3c,0x88,0x61,0x58,0x1d,0xfc,0x00,0x2c,0x84,0x49,0x4d,0x95,0x75 +.byte 0xc0,0x03,0x02,0x59,0xc0,0xe9,0x84,0xea,0xce,0x3f,0x8b,0x76,0xbf,0x19,0xaa,0x13,0x1b,0x8d,0x9f,0xb2,0xeb,0xb3,0x02,0x87,0xee,0xfe,0x73,0xdb,0xc4,0x19,0x27,0xaf,0x15,0x8d,0xf4,0x58,0x97,0x43,0xb9,0x45,0x32,0x5f,0x24,0x2d,0x08,0xfe,0xec,0xf2,0xf1,0x34,0x99,0x7a,0x66,0x44,0x3d,0xd4,0xf7,0x82,0xcf,0xca,0x6f,0x53,0x9f,0x0a +.byte 0x74,0x79,0x9b,0x45,0x5b,0x07,0x92,0x35,0xc6,0xf4,0xd1,0x90,0x2b,0x62,0xec,0x93,0x7b,0x05,0x90,0x75,0xb7,0xb6,0xd9,0x6c,0x30,0xdd,0x9b,0x2a,0x32,0xb1,0xba,0xab,0x1a,0x6c,0x2b,0xd8,0xfb,0x39,0x8e,0x80,0x98,0x6c,0xd0,0xb3,0xf3,0x76,0xe2,0xe6,0x5e,0xee,0xd0,0x29,0xd7,0x57,0x8f,0xc3,0x13,0xcb,0x45,0x90,0x3e,0xa2,0x54,0x88 +.byte 0xd5,0x50,0xd3,0x75,0xed,0x2d,0xa6,0x50,0x11,0x6b,0xb0,0xb6,0xf0,0x1d,0xc9,0x3d,0x1d,0x2a,0xda,0x5e,0x43,0x44,0xf4,0xef,0x3e,0xc7,0xa9,0xe0,0x6d,0x3c,0x38,0xbf,0x84,0x72,0xaf,0xea,0x60,0x15,0x03,0x14,0x77,0xb7,0xb3,0x15,0x4c,0xbc,0xbf,0x55,0x86,0x24,0x73,0x97,0x22,0x9d,0x59,0xa0,0x39,0x76,0x38,0xd1,0x1f,0x25,0xb0,0x64 +.byte 0xf3,0x10,0x67,0xf2,0x7c,0x11,0xf2,0xce,0xbe,0xaf,0x5e,0x2e,0xc5,0xc1,0x01,0xfa,0x80,0xf9,0x87,0xfc,0x5c,0xfd,0x66,0x50,0x01,0xc2,0x00,0x92,0x84,0x0f,0xdc,0xfc,0x10,0xa5,0x6e,0x45,0xf5,0xff,0x58,0x78,0x45,0x5e,0x50,0xbe,0xe3,0xc7,0x25,0x1e,0xdf,0x7f,0x68,0x6f,0xa5,0xb8,0xf8,0x69,0x89,0x5a,0x55,0x65,0xf4,0x96,0xe5,0x7a +.byte 0xa6,0x89,0x69,0x8d,0xdd,0x4f,0x24,0x5a,0x29,0x92,0x1e,0xca,0x74,0x65,0x7f,0xb8,0x32,0x75,0xb5,0x7b,0x15,0xea,0xeb,0xcc,0xf1,0x23,0x69,0xc7,0x58,0x1c,0x3a,0xaa,0x27,0x0a,0x11,0x79,0xcf,0xc9,0xb6,0xbd,0x9d,0x56,0x47,0x36,0x6b,0x7f,0x82,0xb5,0xa7,0x9f,0x79,0x72,0x16,0xba,0x50,0xef,0x37,0x68,0xdf,0xe0,0xd8,0x0c,0x16,0xcc +.byte 0x50,0x6c,0x25,0x63,0xc2,0xd6,0x7b,0xef,0xd9,0xa1,0xef,0x62,0x81,0x97,0x51,0x49,0x69,0xe3,0x13,0x6c,0x1a,0xd0,0x64,0x1b,0x3e,0x48,0x25,0x5b,0x34,0xe9,0xee,0x41,0x34,0xfb,0x8e,0x9d,0x3c,0xbc,0xc8,0xcf,0xe7,0xf8,0x72,0x21,0x0f,0x95,0xde,0x57,0xd7,0x2f,0x80,0x97,0xbd,0x8f,0x2c,0xde,0x19,0xa3,0xba,0x5c,0x92,0xa3,0x75,0x83 +.byte 0xe3,0xc9,0x33,0x3f,0x8f,0x09,0xfa,0x0b,0x60,0x0a,0x2f,0xb3,0x45,0x9d,0x8e,0x9d,0xa3,0x66,0x2d,0xda,0x37,0xe0,0x21,0x52,0x74,0x9d,0x59,0xa4,0x9e,0xea,0x15,0x22,0xb0,0xbf,0x3c,0xd4,0x59,0xef,0x27,0x60,0xf7,0xbf,0x5d,0x1d,0x36,0x9a,0xa5,0xfb,0x53,0x90,0x40,0x83,0x3a,0x20,0x3d,0x6b,0x47,0xbc,0xc3,0xe6,0x07,0xfe,0xd0,0x8e +.byte 0x40,0x42,0x65,0x2b,0x27,0xba,0x69,0x61,0x03,0x36,0x58,0x35,0x7e,0x82,0x53,0xb5,0xe2,0x25,0x31,0xc3,0x77,0xc1,0x91,0x13,0xa4,0x92,0x52,0xea,0x9f,0x43,0x44,0x6b,0x43,0xe9,0x11,0xd4,0x3d,0x53,0xba,0x6b,0x96,0xb5,0x96,0x29,0xa3,0x2a,0x0a,0xf2,0xb5,0x0c,0x5d,0x62,0x37,0xe0,0xd6,0xa2,0xbf,0xcd,0xf9,0x58,0x7f,0xa2,0xfd,0x54 +.byte 0x6a,0xa1,0x90,0xa5,0x61,0x9e,0xa6,0xc2,0xb9,0x80,0x7a,0xb8,0xaf,0x60,0x68,0xa7,0x27,0x77,0x41,0x03,0x4e,0xc1,0x96,0x46,0x23,0x1b,0xff,0xa1,0x37,0x28,0x33,0x27,0xc2,0x99,0xf7,0xcb,0x7f,0x1a,0xfb,0x41,0xc3,0x59,0x11,0xf8,0x39,0x50,0xbd,0x90,0x61,0x4a,0x67,0x4a,0x07,0x5f,0xb1,0x07,0x66,0x0b,0x52,0xad,0x90,0xc2,0xd7,0x4e +.byte 0x42,0x9e,0xcc,0x5c,0xeb,0xf2,0xdc,0xaa,0x52,0xcf,0x0e,0x7d,0xae,0x3e,0x1a,0x2c,0x9e,0x79,0xfb,0x29,0x10,0x29,0x61,0xa4,0x93,0x9d,0xa9,0xe9,0x71,0xc5,0xf7,0x07,0x13,0xe9,0xbd,0x2e,0x2d,0x0c,0xd6,0xaf,0x54,0x48,0x58,0xc2,0x91,0x37,0xf4,0x61,0x3a,0x96,0x81,0xdc,0x82,0x02,0xff,0xc9,0xf7,0xf7,0x9f,0x9f,0x28,0xd1,0xb1,0xe3 +.byte 0x2b,0x3d,0x85,0xef,0x15,0x82,0x3b,0x9a,0x17,0xee,0x7f,0xd3,0xa5,0x7c,0x41,0x27,0xc9,0x4c,0xe9,0x7a,0x30,0x9f,0xc5,0x34,0xaf,0xc8,0x1c,0x8a,0x7c,0xa6,0xf4,0xdc,0xa6,0xdb,0x68,0xc1,0xa1,0x13,0xb0,0x54,0x49,0x25,0x43,0xc0,0xd4,0x93,0xd6,0x70,0x53,0x3e,0x5f,0xd5,0x42,0x6e,0x78,0xb8,0x15,0x07,0x6a,0x91,0xe8,0xf1,0x2f,0xcf +.byte 0x07,0x84,0x25,0xb3,0x20,0xb9,0x35,0x25,0xbb,0x26,0x96,0x02,0x25,0xd5,0x83,0x23,0x71,0x6d,0x62,0xa7,0x99,0x73,0x63,0x2a,0x51,0x25,0x34,0x3d,0x51,0x95,0xc7,0x9b,0x01,0x0a,0xab,0x11,0xb2,0x32,0xcd,0xe3,0xef,0x63,0xa4,0x6d,0xdb,0x7b,0xf6,0x5f,0xc5,0xf3,0xe5,0x8c,0x6b,0x0a,0x04,0x33,0x53,0x0d,0xf6,0x13,0x8c,0xb8,0xc7,0xba +.byte 0xc2,0xf0,0xd4,0xa7,0x1a,0xce,0x7c,0x54,0x72,0x2b,0x89,0xf4,0x05,0x5c,0x30,0x42,0xe5,0x58,0x65,0x3a,0x2e,0xf9,0x40,0xab,0x2b,0xf9,0xc3,0x99,0x40,0x3c,0xb1,0x7b,0x2c,0xdc,0xfe,0x41,0x21,0x71,0x00,0x75,0xbd,0xea,0xf3,0x84,0x88,0x6b,0x9c,0xe2,0x80,0x2f,0xad,0x9f,0x9d,0x0a,0xdf,0xb5,0x38,0x61,0x89,0xfb,0x67,0x45,0x9c,0x39 +.byte 0xf9,0x84,0x54,0xc4,0xd6,0x6f,0x00,0x39,0x90,0x82,0xfa,0xce,0xae,0xe8,0xaf,0xa4,0x97,0x3a,0xfe,0x71,0xaf,0x5e,0x00,0xd1,0x9e,0x33,0x41,0x63,0xca,0xa5,0x5a,0x8b,0x09,0x2a,0x26,0xef,0x96,0xb7,0x5d,0xc4,0x92,0xfa,0x51,0xdb,0x1d,0x63,0x5f,0x7c,0x94,0x53,0x84,0xed,0xa3,0x99,0x07,0x9f,0xdc,0x55,0xb3,0x31,0x67,0x1a,0x63,0x05 +.byte 0xec,0x36,0x79,0x57,0xf8,0x39,0xc3,0xdd,0xd5,0x6a,0x21,0xfc,0x54,0xe6,0x28,0xc4,0xf1,0xd2,0xce,0x02,0x43,0x50,0x30,0x15,0x4d,0x3c,0xd0,0x1c,0xf6,0x7e,0xd0,0xa4,0x86,0xe7,0xf5,0xc2,0x06,0xc5,0xc4,0xa8,0xe2,0xd3,0xc7,0xcf,0xbd,0xab,0x9f,0xe3,0x42,0xc4,0xcd,0x65,0xfa,0xd3,0xcd,0xdf,0x55,0xc4,0xce,0x6e,0xe8,0xfc,0x96,0x0f +.byte 0xe2,0x92,0xca,0xde,0x37,0x7c,0xc9,0x80,0x4a,0x54,0xe9,0xfd,0x3c,0x4b,0x81,0xb8,0xd9,0x1a,0xf1,0x91,0x5d,0x9d,0xef,0x3e,0xd1,0x78,0xe2,0x1e,0x0e,0x09,0x62,0xdd,0xc6,0xb9,0xde,0x29,0xba,0xb0,0x62,0x49,0x53,0xb6,0x8d,0x9f,0xbf,0x4d,0x77,0xa4,0xd1,0x0b,0xf0,0x31,0x2e,0xe5,0x71,0x2e,0x18,0xa4,0xa7,0xcb,0xa6,0x30,0x24,0x11 +.byte 0x8d,0x16,0x21,0x71,0x6a,0x19,0xde,0x3c,0x5a,0x00,0xa6,0xe2,0x43,0x98,0xe8,0x83,0x10,0x76,0xef,0xca,0x67,0x61,0x80,0x98,0x48,0x06,0xa9,0xcd,0x13,0xa6,0x1e,0x5b,0x2b,0xef,0xb7,0x3a,0x24,0xf7,0x10,0x8d,0xc2,0xaa,0x9c,0x78,0x0d,0xd1,0x54,0xb1,0x4e,0x5a,0x21,0xc2,0xb4,0x11,0x15,0xdb,0xb3,0x9c,0xe4,0xf1,0xfc,0xa5,0x66,0x0c +.byte 0x56,0x34,0x05,0x14,0x88,0x2c,0xfc,0x3f,0x97,0x30,0xd5,0xd0,0xba,0xa3,0xf1,0x47,0xc0,0xf1,0x59,0x3c,0xda,0x1a,0xc1,0x90,0xae,0x4b,0x26,0xd3,0x5f,0xc9,0x8f,0x62,0x56,0x9c,0x64,0xec,0xda,0x63,0x37,0xa1,0xa2,0x87,0x74,0xcb,0xcc,0x27,0xcb,0x2a,0x97,0x57,0xa3,0xb9,0xac,0xe2,0xbd,0x97,0x93,0x21,0xb9,0x8b,0x82,0xa1,0xe7,0x76 +.byte 0xc1,0x49,0xd6,0xb2,0x52,0x7b,0xd6,0xbb,0x31,0x0f,0x87,0xc0,0xaa,0x91,0x70,0x19,0x76,0xa5,0xea,0xf0,0x87,0x47,0x50,0xc1,0xff,0xf7,0xa6,0x6c,0x65,0xff,0xdf,0x83,0x5c,0x54,0xf0,0xb1,0x18,0xe0,0x13,0x58,0x74,0xc0,0x67,0x0e,0xb8,0xdc,0x59,0x6c,0x19,0xf4,0xee,0x3a,0x07,0x63,0x68,0x1d,0x62,0x60,0xb5,0x71,0xce,0x21,0x61,0x8c +.byte 0xa5,0x74,0x9b,0x77,0x8e,0x15,0x20,0x18,0x19,0x96,0xf6,0xfa,0xd2,0x6c,0x03,0xcb,0xcb,0x8c,0x91,0x0d,0x29,0x91,0x70,0xc5,0x96,0x60,0x18,0xad,0x65,0x66,0x43,0xf9,0x13,0x97,0xe3,0xe3,0xcb,0xbf,0x68,0x0b,0xb2,0x87,0x9c,0xfa,0x96,0x48,0x14,0xef,0x6e,0xbd,0x45,0xb9,0x2f,0xbb,0x80,0x80,0xc5,0xf6,0x22,0x41,0x9a,0xec,0xdd,0x41 +.byte 0xfc,0xf3,0x0d,0x8e,0x2e,0x3c,0xda,0xef,0x2c,0xbd,0xbc,0x0e,0x88,0xd2,0x97,0x3d,0x40,0x37,0xa6,0xde,0x1d,0x00,0xeb,0x39,0xea,0x44,0xee,0x8a,0x2f,0x77,0xea,0xea,0x1d,0x90,0xd1,0xec,0xe4,0x31,0x0c,0xde,0x6f,0x55,0x17,0x5c,0x1e,0x19,0x91,0xac,0x36,0x00,0x26,0x17,0xa6,0xcd,0x8b,0xe2,0x72,0x6f,0x8f,0x3c,0xc6,0x76,0x6e,0x3d +.byte 0x4e,0x93,0xb3,0x8b,0xad,0x24,0x17,0x39,0xc0,0xfe,0xba,0x90,0xc5,0xbd,0x4b,0xe4,0xae,0xac,0xf6,0x55,0x72,0x3e,0xf0,0x12,0x32,0x5a,0xdd,0x8a,0x3f,0x67,0xb6,0xdf,0xf6,0x11,0x02,0xf5,0x84,0xcc,0x7d,0x36,0xe7,0x1b,0xf0,0x9a,0x52,0xbe,0xf3,0x06,0xd6,0xdb,0x02,0xd4,0x80,0x0b,0xcd,0xf0,0xfe,0xec,0x86,0x3f,0x89,0x34,0xcb,0x88 +.byte 0x34,0x28,0x57,0x00,0x33,0xeb,0x4f,0xfa,0xdb,0xd8,0x09,0xd9,0x56,0x53,0xc1,0x02,0xc0,0xa8,0x4c,0xdc,0xfd,0x26,0xb3,0x55,0x1d,0x47,0x0d,0x68,0x50,0xb8,0xa3,0xb4,0xf1,0x31,0xfa,0x16,0x33,0x94,0x40,0x95,0x53,0x9c,0x9f,0x5b,0x25,0x47,0xb1,0x27,0xbc,0x38,0x7d,0x23,0x01,0x7f,0x70,0x7a,0x61,0x0e,0x46,0x5c,0xcc,0xd7,0xcc,0x15 +.byte 0x15,0x0a,0xed,0x4c,0x99,0x66,0x3a,0xc3,0xc1,0x9a,0x7a,0x38,0x6a,0x0c,0xde,0x13,0x67,0x65,0xfc,0x06,0x99,0x7c,0xa5,0x90,0x8a,0x90,0x58,0xce,0xf3,0x23,0x76,0xfc,0x03,0xfb,0xb3,0x36,0x54,0xa9,0x33,0x35,0xfe,0xe3,0x3d,0x53,0x7e,0xe0,0xae,0xcf,0xc0,0xa2,0xe1,0x28,0xb9,0x97,0x96,0x87,0x90,0xa1,0x13,0xd0,0x1d,0x5b,0x43,0xf1 +.byte 0xa5,0xfa,0x81,0x83,0xe7,0x7b,0xa1,0x5f,0x9f,0xf5,0xd3,0xb6,0x80,0x8b,0x91,0xed,0x31,0x14,0x05,0x78,0x85,0x9d,0xea,0x59,0x69,0xa5,0x29,0xc5,0xf1,0xd7,0x9d,0xa3,0x8b,0x9d,0xe0,0x8d,0xc3,0x4e,0x2d,0xfa,0x1c,0x6c,0xd2,0xd7,0xcb,0xda,0x86,0x5d,0xb3,0x1a,0xb4,0x12,0xe3,0xa8,0xd7,0xe1,0x84,0xce,0x0e,0x06,0xd0,0x9e,0xf0,0xb1 +.byte 0x5b,0x2f,0x77,0x10,0x6f,0x41,0x2f,0x5b,0x48,0x43,0xf3,0xef,0xdb,0x09,0xdb,0x01,0x89,0xfc,0x7a,0x4a,0xc0,0x96,0x33,0xdf,0xbe,0x49,0x85,0xa7,0x88,0x93,0x05,0xf2,0x15,0x12,0x85,0x04,0x20,0x7d,0x8c,0xe2,0x0a,0xea,0xfe,0xed,0xbf,0x98,0xdb,0x9d,0x1f,0xaf,0x0f,0xbf,0xf7,0x12,0x4f,0x69,0x4e,0x87,0x09,0xf0,0xae,0x2a,0x4d,0x4c +.byte 0xbf,0xaa,0x08,0x2c,0x78,0x2d,0xbe,0xb9,0xf5,0x3c,0x4c,0xcd,0x75,0x93,0xc3,0x3c,0xc2,0x86,0x47,0xca,0xc1,0x9c,0x1c,0xe5,0x0d,0x8d,0x36,0x9c,0x44,0x40,0x89,0xfa,0x17,0x57,0x08,0xd4,0x22,0x9a,0x5b,0x94,0xbf,0x39,0xcd,0xbe,0xf7,0xd1,0xcd,0x35,0x74,0xdf,0xfa,0x5d,0x00,0xaa,0xaa,0x82,0x6d,0x9b,0xf8,0x69,0x51,0x9c,0xaa,0xaa +.byte 0xc8,0x2c,0xa2,0x68,0x57,0x3c,0x5f,0x10,0xa2,0x7b,0xee,0xc9,0x97,0x8d,0x5c,0x41,0x08,0x0d,0x30,0xd5,0x2b,0x5f,0x8d,0xdd,0xdc,0x2c,0xa8,0x52,0x6e,0xea,0x61,0x77,0xca,0x75,0xc3,0x56,0x6e,0x17,0x51,0x0e,0x00,0xb6,0x18,0xa0,0xe5,0x9d,0x49,0x4e,0x20,0x78,0x1e,0x5f,0x3e,0xec,0xc3,0x4a,0x41,0xf3,0xfe,0x89,0x64,0xac,0x4c,0x4d +.byte 0xa8,0x73,0x4f,0x31,0xc4,0xe2,0x62,0x69,0x2b,0x40,0xdf,0xef,0xed,0xf0,0x62,0x4e,0xc3,0x65,0xcc,0xcb,0xef,0xc1,0x28,0x61,0x71,0xac,0xa5,0x89,0x52,0x7b,0x32,0x59,0xc2,0x16,0x1a,0x63,0x18,0xb0,0xd8,0xe4,0x28,0x92,0xff,0x45,0xc1,0x24,0x56,0x86,0x66,0x23,0x7a,0xff,0xf7,0x33,0x30,0xdc,0xd1,0x7d,0xaf,0x68,0x10,0x4b,0xde,0x3e +.byte 0x4a,0x70,0xbe,0x31,0x1a,0x37,0x28,0xee,0xe0,0xba,0x65,0x8b,0x7d,0xea,0x07,0xce,0xf2,0x51,0x3d,0xcb,0xb2,0x33,0xd8,0xf3,0xa4,0xa0,0xcd,0x53,0x76,0xf9,0x46,0x5b,0x82,0xf9,0x9d,0x0e,0x29,0x5b,0xcf,0x76,0xd4,0x5c,0x47,0xf1,0x98,0x02,0x5a,0x16,0x18,0xf2,0x61,0x6d,0x3e,0x64,0x7f,0xbe,0x13,0x18,0xc2,0x45,0xd2,0x87,0x17,0xff +.byte 0xf1,0x01,0x0b,0x5d,0x21,0x0d,0x73,0x9a,0xeb,0x82,0xc4,0x9a,0xb3,0xe4,0x31,0x44,0x58,0xa2,0xfd,0x76,0xf6,0xbe,0x6f,0x75,0xcc,0xbb,0xe3,0xa2,0xa9,0x78,0x0f,0x4b,0x1d,0x47,0x2d,0x32,0x2c,0x45,0x5e,0xcd,0x8f,0x13,0xe2,0x9a,0x9d,0xa2,0xce,0x73,0x54,0x20,0xc0,0x44,0x1c,0x26,0xde,0x0d,0x72,0xb2,0xfa,0x4d,0x32,0x35,0xac,0x69 +.byte 0x4d,0x16,0x4a,0xd5,0x51,0x33,0xc1,0xe0,0x90,0x9c,0x93,0x66,0xed,0x16,0xac,0x7e,0x79,0x2b,0x0f,0xb4,0x42,0xaf,0x80,0x22,0x80,0x07,0x7d,0x72,0xe4,0xb3,0x3a,0x2c,0xb8,0x68,0x14,0x4d,0x31,0x5f,0xbb,0xac,0x43,0x3b,0x28,0xd6,0x81,0x81,0x26,0xe5,0xc4,0x67,0x7c,0x4a,0x42,0xc4,0x1a,0x59,0x04,0x2d,0xb8,0x26,0xfc,0x4e,0xc7,0xfc +.byte 0x11,0x61,0xe3,0x4b,0x2c,0x3f,0xdb,0x43,0xe4,0x24,0xb4,0xd1,0xc0,0xc0,0x01,0xe1,0xeb,0x84,0x0b,0x6d,0x93,0x83,0x07,0x9f,0x01,0xb8,0x9d,0xe5,0x7e,0x4d,0xa2,0x05,0x3e,0xf2,0x40,0x59,0x88,0xc8,0x8c,0x62,0x44,0x95,0x20,0x96,0x28,0xa9,0x3f,0x7c,0xed,0x85,0x03,0x65,0x49,0xf7,0x94,0x3d,0x51,0xe2,0x8e,0x21,0x19,0x7b,0x55,0x5f +.byte 0x55,0x70,0xf8,0xf0,0xce,0xd9,0x1a,0x10,0xbb,0xfe,0x65,0x72,0x8a,0x5b,0x6c,0x27,0xd3,0x57,0x61,0x07,0x7b,0x85,0xd6,0x21,0xd2,0x07,0x81,0xaa,0x17,0x73,0xb5,0xef,0x2d,0x84,0x7b,0x8f,0xe0,0xb3,0x9e,0x9f,0x31,0x82,0x33,0x07,0x14,0x84,0x79,0x18,0xc4,0xec,0x20,0xb5,0xec,0x21,0x4b,0x51,0x78,0x96,0xc6,0xe7,0xf0,0x6a,0x7a,0xb5 +.byte 0xe5,0xc2,0xef,0x24,0x4c,0x57,0xb6,0xf5,0xee,0xe5,0x69,0x2b,0x73,0x9e,0x66,0x91,0x9d,0xd4,0x24,0x58,0x4b,0x72,0x68,0xf6,0x62,0xb4,0x0c,0xe3,0xbd,0x1f,0x0b,0x42,0x6c,0xf9,0x6e,0x6a,0x64,0x64,0x69,0xa5,0x6d,0xe7,0x38,0x9f,0xb2,0x65,0x35,0x6b,0xd9,0x20,0x84,0xe4,0x5f,0x8b,0xfd,0x58,0xab,0x5f,0xe1,0x4c,0xf7,0xd7,0xf5,0xe7 +.byte 0xae,0xe8,0xc1,0x68,0xfe,0x0c,0xb1,0xe2,0xe4,0xca,0xf0,0xf1,0x20,0xbc,0xf9,0x99,0xef,0x4e,0x63,0xca,0x89,0xe4,0x7c,0x17,0x49,0x40,0x47,0xce,0x67,0x8e,0xbd,0xd0,0x96,0x8b,0x5a,0x0d,0x2f,0xd0,0x8f,0x4f,0x42,0x06,0x01,0x8e,0x47,0x35,0x13,0x9e,0xd1,0x24,0x85,0xe4,0x17,0x59,0xe8,0x1c,0xb3,0x25,0x53,0xf9,0xb4,0x96,0xb1,0x33 +.byte 0x97,0xb2,0x60,0xc7,0xb3,0x48,0xa2,0xfc,0x7f,0x86,0x94,0x2a,0xd3,0x94,0xfe,0x6d,0xa6,0x7a,0xa1,0xe1,0x96,0x5b,0xe8,0xe4,0x91,0xfb,0xf3,0x2c,0x84,0xb4,0x2f,0xbe,0xc9,0xdd,0x1c,0x9f,0x72,0x12,0xcb,0xbd,0x22,0x07,0xc4,0xec,0x05,0xe8,0x32,0x47,0x21,0x27,0xf6,0xc1,0x36,0x59,0x25,0x6c,0xbe,0xb9,0x3e,0xd4,0x1b,0x59,0x11,0x27 +.byte 0x6b,0xa3,0x64,0x71,0x98,0xeb,0x21,0x65,0xc0,0x4c,0x30,0xbd,0x51,0x2b,0xc3,0xfb,0xb1,0x33,0x56,0x1e,0xf0,0x92,0x0f,0x4b,0x63,0x3a,0x9c,0xfb,0xd1,0xac,0x8c,0xf0,0x3e,0xb7,0x0b,0xd2,0x52,0x62,0xd8,0x37,0x9a,0xef,0x79,0xdc,0xcb,0x87,0x1e,0x3d,0x9d,0x91,0x12,0xba,0x78,0x8a,0x11,0x57,0x96,0x44,0x8e,0x2b,0xd2,0xe3,0x4d,0x27 +.byte 0xec,0xba,0xef,0x1c,0x04,0x8d,0x56,0x56,0x11,0x74,0xc0,0xcc,0x1f,0x3d,0x7a,0xad,0x79,0x49,0x59,0xa3,0x71,0xe0,0xf5,0x89,0x89,0x8f,0xcf,0x1e,0x63,0x77,0x91,0x91,0xf1,0x0c,0x1c,0xcc,0x77,0x00,0xd7,0x28,0x9f,0x68,0xbc,0xb6,0x9d,0x33,0x43,0xb2,0x4a,0x72,0x3e,0x57,0x26,0xd0,0x00,0x93,0xc9,0x4c,0xc9,0x53,0x52,0xd9,0xe2,0x31 +.byte 0xc5,0x7f,0xf6,0xb6,0xc2,0x10,0x51,0x67,0xae,0x63,0x35,0x74,0xcc,0xd4,0x05,0xb3,0x08,0x23,0x35,0x37,0x8e,0xf1,0xbb,0x1d,0x56,0xff,0x62,0xa2,0x13,0x7b,0x01,0x75,0x6d,0xb3,0x92,0x51,0xdc,0x6e,0x08,0x76,0x25,0x52,0xbf,0x9a,0xea,0x89,0x0f,0x96,0xcc,0x79,0xd4,0x72,0xcf,0x65,0x79,0x4e,0x40,0xa3,0xae,0x67,0x0c,0x82,0x85,0x05 +.byte 0xfd,0x43,0x84,0x17,0x24,0x79,0xa9,0xa7,0x7f,0x24,0x76,0x57,0x66,0x11,0xd5,0x33,0x30,0x42,0x5b,0x5f,0x7c,0x04,0x4b,0x45,0xc3,0x69,0x20,0x02,0x92,0xe3,0x6a,0x06,0x8f,0xdf,0x30,0xf6,0x17,0x8f,0xc6,0x8c,0x5e,0x42,0xf3,0x59,0x7a,0x3a,0x55,0x3a,0xc1,0x96,0xd5,0x67,0x3d,0xab,0x32,0xee,0xf0,0x08,0x28,0x73,0xb0,0x11,0x1a,0x92 +.byte 0x4d,0xcc,0x0c,0x86,0xb2,0xa1,0xbf,0x9f,0xcd,0xc7,0x1c,0xbc,0xee,0x39,0x77,0x75,0xfc,0xe6,0x3b,0x62,0xf2,0xaf,0xd5,0xb6,0x77,0x2d,0x86,0x38,0x13,0x00,0xdb,0x71,0x4a,0x87,0x03,0x6d,0x99,0x28,0xf8,0x6a,0x23,0x2e,0xe2,0xb8,0x9c,0x18,0x02,0x00,0x9e,0x5b,0xf0,0x6f,0x9b,0x32,0xdc,0x6b,0x61,0xeb,0xeb,0xe9,0xfc,0xee,0x44,0xbc +.byte 0x4a,0x88,0x04,0xc0,0x10,0xc8,0x65,0x6c,0xa4,0xae,0x9a,0x36,0xb6,0x68,0xd5,0xbf,0x6d,0xe3,0x6f,0x5d,0xad,0xd6,0xf9,0xc8,0x06,0x36,0x25,0x64,0xc9,0x5b,0x71,0x7f,0xbf,0xe3,0x56,0x31,0x2a,0x93,0x47,0x46,0x39,0x91,0x80,0xc5,0xdd,0xdd,0xa1,0x25,0x85,0xd9,0x05,0x49,0x4f,0x1b,0xeb,0x2f,0x6e,0xd9,0xe4,0x65,0x3d,0xcd,0xbd,0x47 +.byte 0x37,0x27,0xb0,0xd1,0x9b,0xa4,0x89,0xd5,0xa0,0x0f,0x8b,0xc5,0xfd,0x91,0xa8,0x86,0x22,0x65,0xf1,0xe1,0x1e,0xb6,0xf7,0x50,0xe6,0x1e,0xf0,0x2b,0x9d,0x02,0xc9,0xe8,0x2a,0xb8,0x9b,0x89,0x28,0x25,0x43,0xcf,0x23,0x08,0xe2,0xa7,0x70,0x31,0x89,0xab,0x5b,0xd9,0x2e,0xa9,0xe4,0xe9,0x1d,0x63,0x7f,0xc6,0xc1,0xfb,0x63,0x45,0x9c,0xf1 +.byte 0xd4,0xc3,0x56,0xb6,0xad,0xb3,0x00,0xce,0x12,0x9e,0x63,0x33,0x25,0xd3,0xb2,0xee,0xa7,0x6b,0xa1,0xfd,0x20,0xa3,0xb2,0x07,0x1a,0x9d,0xed,0xe0,0x1d,0x70,0x5b,0x9f,0xc0,0xbc,0x83,0x09,0x94,0x47,0x8c,0x05,0xef,0x73,0x96,0x31,0xc7,0x35,0xc2,0x2c,0x00,0x2a,0x68,0xd1,0xc4,0xb3,0x3d,0x84,0x44,0x8c,0x93,0xfd,0x64,0x00,0x77,0x46 +.byte 0x18,0xac,0x83,0x9d,0xe5,0xe5,0x46,0x61,0x37,0x72,0x9f,0x0e,0x76,0x55,0xf7,0xca,0x36,0x57,0x24,0x16,0xfc,0x11,0x27,0xaa,0x44,0xa4,0xb0,0x58,0x41,0x46,0x94,0xc7,0x3b,0x9c,0xa3,0xe4,0x89,0xd9,0xdb,0x7b,0x64,0x69,0x84,0x9f,0xc8,0x09,0x6f,0xf7,0xf0,0x58,0x10,0x56,0x9f,0x26,0xf0,0x74,0x0c,0x76,0xcb,0x9d,0x45,0x3d,0xe7,0x94 +.byte 0x54,0xa3,0x84,0x08,0xb5,0x9c,0xff,0xdb,0xba,0x62,0x5e,0x87,0x0d,0x11,0x5d,0x96,0x06,0xd6,0xec,0xf4,0x3e,0x9d,0x66,0xbd,0xc4,0x64,0xed,0x03,0xe0,0xad,0x3f,0x4e,0xb4,0xef,0x16,0xdd,0xee,0xd6,0x00,0x27,0x62,0x74,0x0a,0xe0,0x68,0x72,0x4c,0x6d,0x62,0x15,0x87,0x6a,0xf0,0x25,0x9f,0x33,0x1d,0x92,0x3b,0xa3,0xa4,0xf1,0x81,0xdf +.byte 0xa8,0xed,0xaf,0xa5,0x8d,0x19,0x20,0x72,0x03,0x91,0xf0,0x34,0x60,0x70,0xbe,0xaa,0xdf,0xaa,0x24,0x1a,0x1f,0x1a,0x8d,0xb0,0x7b,0xef,0x10,0x43,0x69,0x24,0x74,0xf2,0x72,0x71,0xa1,0x8f,0x85,0x75,0x3e,0x8c,0xf6,0x0e,0x88,0xe2,0x1d,0x5c,0xb8,0xf1,0xc4,0x8a,0x21,0x76,0x20,0x50,0x3f,0xb3,0x8b,0x9f,0xa4,0x45,0x9e,0x07,0x60,0x22 +.byte 0x2c,0xa6,0xb1,0xc2,0xd2,0xcb,0xc6,0xd8,0xe9,0x94,0x66,0xfb,0x10,0x73,0x92,0x25,0x7e,0x31,0x42,0xf4,0x4a,0x75,0xac,0x78,0x43,0xcb,0xc0,0xc9,0xb0,0xaf,0xb4,0x22,0x8f,0x51,0x36,0x0f,0x5a,0xb8,0xbb,0x44,0x03,0x09,0xd0,0xf9,0x04,0xc8,0x73,0x8e,0xa1,0x76,0x27,0xde,0x72,0xf4,0x3a,0x79,0x63,0x85,0x32,0x09,0xad,0x12,0xe4,0xd7 +.byte 0x8f,0x8e,0x24,0x03,0x4f,0xde,0x39,0xac,0x81,0xe8,0x64,0x09,0x17,0xd7,0x99,0xe6,0x62,0xb7,0x53,0x20,0x9f,0xb9,0x3a,0xb9,0xb1,0x81,0xfa,0x6e,0x33,0xe7,0x4a,0xca,0xd7,0xa7,0xfa,0x7a,0xbf,0x0b,0x0a,0x99,0x3c,0xc7,0xbd,0xef,0xc7,0x90,0xda,0x62,0x30,0xc6,0x94,0x94,0x6b,0xee,0xbd,0xb7,0x0d,0x86,0xc5,0xb1,0x9a,0xb9,0x86,0x34 +.byte 0xc2,0x81,0x2b,0x09,0x7a,0x88,0x09,0x65,0xcf,0x51,0x78,0x19,0x1d,0x5a,0x62,0x2f,0xb3,0x43,0x8d,0xf5,0x9d,0x26,0x2f,0x4a,0x27,0x96,0x22,0x1b,0x4c,0xc8,0xd9,0x73,0x4b,0x32,0x01,0x11,0x7b,0x59,0x85,0xda,0x50,0x92,0x17,0x45,0xd4,0x1f,0xcf,0x98,0xf6,0x2c,0x69,0xba,0x43,0x22,0xdc,0x36,0x31,0xfb,0x1e,0xe8,0x54,0x24,0x0f,0x24 +.byte 0x4c,0xcd,0xbe,0xdb,0xd8,0x23,0x69,0xe2,0x97,0xf5,0x66,0xb2,0x66,0x6c,0xf2,0x90,0xd0,0x15,0x14,0x9a,0x47,0x65,0x97,0xb0,0xf2,0x3e,0x35,0x09,0xd2,0x3d,0x01,0x9c,0xb3,0xfd,0xf3,0x32,0x46,0x4e,0x11,0xab,0x88,0x9e,0x04,0x6d,0xf0,0xe1,0x9d,0x48,0x01,0x24,0xc3,0x87,0xdf,0x58,0xb6,0x6d,0x6d,0x4f,0xb9,0x1b,0x13,0xee,0x03,0x5b +.byte 0x75,0x39,0x28,0x31,0x90,0x70,0x49,0x10,0x71,0x87,0x76,0x30,0xac,0x88,0xb0,0xf6,0x6c,0xaf,0x5b,0xf4,0xf3,0xe7,0x25,0x75,0x8c,0xa3,0xf4,0xa7,0xd8,0x94,0x78,0xc8,0x77,0xc1,0x48,0x6c,0x62,0xf6,0x2c,0xb5,0x41,0x59,0xf6,0xd3,0xae,0x1b,0x55,0xed,0xdf,0xd1,0x59,0x63,0x76,0x03,0x65,0xd3,0xd0,0xcd,0xb6,0x5b,0x8f,0x1a,0x78,0x88 +.byte 0x78,0x07,0x14,0x3f,0xc3,0xd4,0x1c,0x69,0xd8,0x15,0x25,0xca,0x76,0x15,0x24,0x7d,0xed,0x69,0x2a,0xb5,0x04,0xd2,0x3b,0xbd,0x7a,0xb2,0xae,0x04,0x51,0x85,0x2b,0x1b,0xb0,0x3f,0x6d,0xbc,0xa0,0xc7,0x19,0x40,0xab,0x75,0x51,0x4b,0xa8,0x5a,0xd7,0xb5,0xc7,0xa8,0xfc,0x4a,0xcf,0xa9,0x9c,0xe6,0x2e,0x35,0x51,0x3b,0x05,0x41,0x43,0x7c +.byte 0x1f,0x2e,0x16,0x5d,0x2f,0xa8,0xe9,0xce,0x6d,0x06,0xa7,0x5a,0xed,0x07,0x39,0xe4,0x7e,0xc3,0x01,0x2d,0x97,0xe4,0xc1,0x89,0x2c,0xb4,0xb1,0xb5,0x7f,0x0a,0xe2,0x9f,0x82,0x36,0xee,0x9b,0x76,0xbc,0x9d,0x37,0xdf,0x5e,0x81,0x95,0x9b,0x2b,0xc4,0x58,0x20,0x6a,0xd2,0xc7,0xb6,0x82,0xe6,0xa2,0x52,0x73,0x4a,0xaf,0x37,0x5a,0xf6,0x6b +.byte 0xc4,0x2b,0x53,0x4e,0xca,0x44,0x17,0x9f,0x1c,0xeb,0x4d,0xf2,0xd1,0xb0,0x35,0xaa,0xc3,0xfe,0x77,0x34,0x2a,0x4a,0xe8,0x85,0x96,0x2f,0xa4,0x7d,0xdf,0xd0,0x6a,0x4a,0x0c,0x9b,0xd9,0x6a,0x00,0x92,0xb4,0xb1,0x9f,0xc3,0x56,0xee,0xcb,0xa5,0x3a,0x37,0x68,0xc8,0x7c,0x1e,0xa8,0x0a,0x3d,0xbc,0xd1,0xd0,0xd7,0x8b,0x32,0x34,0x20,0xfc +.byte 0xd3,0x9e,0xf5,0x18,0x3a,0xb9,0x87,0xae,0xde,0x6c,0xc0,0x7d,0xbd,0x20,0x00,0xe5,0x7b,0xcb,0xf9,0x7d,0x70,0x9a,0x10,0x45,0xc9,0x33,0x13,0x9d,0x2c,0x16,0x67,0xe6,0x36,0x38,0xcf,0xa2,0xf1,0xad,0xec,0x48,0x7f,0x9b,0x2a,0xdc,0x13,0xe2,0xee,0xef,0xf2,0x5c,0x3f,0x52,0x3a,0x72,0x79,0x9b,0xba,0x50,0xb2,0x2b,0xfb,0x97,0x8e,0xe6 +.byte 0x27,0x39,0x63,0x72,0x05,0x11,0x7d,0x2e,0xa8,0x44,0x08,0xf7,0xf3,0x26,0xe5,0xe4,0x6c,0x98,0x7b,0xb1,0x42,0x6d,0x74,0xd4,0x3b,0xfa,0x35,0xfa,0x0a,0xac,0x5e,0x9e,0x8f,0xc7,0x07,0xc5,0x50,0x25,0xfd,0xbf,0x13,0x52,0x3d,0xf1,0x18,0x1e,0x19,0x8c,0xf3,0x8b,0x4d,0xc8,0xfb,0x76,0xa4,0xe3,0x3f,0xb2,0x47,0x9c,0x50,0x97,0x32,0x65 +.byte 0x9e,0x42,0x81,0x21,0xd1,0x92,0xd2,0x81,0x4a,0x93,0x68,0xa2,0xc1,0x76,0xc8,0x40,0xce,0xfe,0x4e,0xc5,0xa7,0xb2,0x77,0x9f,0xc8,0xe5,0x41,0xb1,0xda,0x15,0xf6,0xfa,0x21,0x3f,0x11,0x5c,0xc6,0x62,0xda,0x01,0x7f,0x0f,0x9f,0x9e,0x98,0xfe,0x38,0x53,0x6c,0x7f,0xba,0x8b,0x55,0x01,0x36,0x33,0x41,0x5e,0xa9,0x78,0xbf,0x2e,0x60,0x4f +.byte 0xcb,0xe9,0x27,0x09,0x8c,0x01,0x2d,0x82,0x7d,0x3f,0xaf,0x8f,0x1e,0x37,0x79,0x35,0xfb,0xce,0x83,0xc5,0xf8,0xc5,0x54,0xfd,0x50,0xec,0x31,0xd1,0xb5,0x8a,0x4d,0x37,0xf6,0x7f,0x0e,0xbe,0x35,0xdd,0xa8,0x9e,0x5e,0xb9,0x3c,0xf4,0x2b,0xd2,0x97,0x56,0xd0,0x28,0xcb,0x60,0x27,0xcf,0x27,0x68,0x8a,0xa1,0xbf,0x9f,0xa3,0x45,0x4a,0x44 +.byte 0x71,0xe2,0xb2,0x9c,0x69,0x0b,0x18,0x69,0xcf,0x03,0xcc,0xc3,0x93,0xe0,0xf5,0xb7,0x4e,0xa4,0xdc,0x96,0xe0,0x2e,0xf8,0x3b,0xc6,0x67,0x30,0x06,0x5e,0xb9,0xb9,0x7d,0xaf,0x97,0x38,0x9a,0xf4,0x22,0x20,0x5a,0x9e,0x83,0x26,0x3c,0xcc,0x93,0x84,0x20,0x15,0x2e,0x85,0x23,0x17,0x1d,0x28,0xb4,0xe2,0x8f,0x2d,0x22,0x99,0x66,0xfd,0x6a +.byte 0xa8,0xe6,0xb7,0x19,0x18,0xec,0xbd,0x54,0xc2,0xcc,0xb7,0xb4,0x6b,0x10,0xdd,0xb5,0xe3,0x3b,0xb7,0x77,0xbf,0x66,0x65,0x82,0x6a,0xc6,0x0d,0x26,0xe6,0xe8,0xe1,0x96,0xe4,0x0b,0x3c,0xe3,0xf2,0xfb,0xd6,0x91,0x5d,0xb6,0x08,0x15,0x67,0x10,0xfa,0xf8,0xdc,0x72,0x84,0xca,0x48,0x29,0x75,0x98,0x62,0x30,0x43,0xa9,0xf1,0xde,0x58,0xb5 +.byte 0x6e,0x67,0x53,0x62,0x0d,0x06,0xa8,0x97,0x35,0x04,0x02,0x34,0x3f,0xd7,0x77,0x38,0xed,0x51,0x32,0x7c,0x6f,0x25,0x94,0x04,0x30,0xa5,0xfc,0xf1,0xb0,0x65,0x77,0x16,0xec,0xb0,0xf9,0x6d,0xaf,0xbc,0x75,0x6e,0x29,0x44,0x20,0x86,0x36,0xbe,0x22,0xe0,0xe1,0xc4,0x0c,0x97,0x10,0x45,0x3e,0x06,0xc3,0xee,0xa5,0x1f,0x97,0xc7,0xde,0xdb +.byte 0xf1,0x05,0xe3,0xb7,0x24,0xc5,0xa5,0xca,0x4e,0x8e,0x9e,0x44,0x7e,0x98,0xb1,0x3c,0xe9,0xa6,0xe5,0xa6,0x08,0xcb,0x08,0xd7,0xf6,0x38,0x37,0xa4,0x46,0xd1,0xdc,0x53,0x6f,0x6c,0x3f,0xca,0xa1,0x9b,0x7c,0xa6,0x44,0xd4,0x08,0x33,0xd2,0xf8,0x32,0xd2,0x4f,0x60,0x75,0x0f,0x49,0xf1,0x70,0x52,0x56,0x16,0x5b,0x3e,0x34,0x0e,0xe4,0x94 +.byte 0xc3,0xa9,0xd4,0x1c,0x9e,0xa4,0x10,0xce,0xc1,0x69,0x5b,0x3a,0xc9,0xd5,0xab,0x98,0x81,0x78,0x42,0x7e,0xf2,0x76,0x10,0xad,0x97,0x85,0x98,0x2f,0xe2,0x3f,0xb1,0x1d,0xc0,0x4d,0xa4,0x0b,0x54,0x7e,0x19,0x16,0x0a,0x71,0x74,0x37,0xfd,0x67,0x23,0x86,0xb2,0x3b,0x1e,0x49,0x92,0x92,0x1b,0x5f,0x65,0x56,0x76,0x6d,0x97,0x3b,0x91,0xc0 +.byte 0x5a,0x7e,0xf1,0x5b,0xe9,0x83,0xb9,0x67,0x2f,0xe1,0x0c,0xcf,0xe9,0x51,0x26,0x45,0x03,0x06,0x63,0xa4,0xb2,0x06,0xe0,0x8e,0xa3,0xbf,0xf5,0x7c,0x19,0xdf,0xfe,0x38,0x28,0x98,0xa1,0x23,0x16,0x69,0xc4,0x9f,0x20,0xe4,0x42,0x27,0x4e,0x7b,0xc9,0x42,0x5e,0xd2,0xb9,0xbf,0x33,0x03,0xbb,0x96,0x6d,0x80,0x65,0x90,0x3b,0x82,0x5b,0x68 +.byte 0x46,0x4f,0xe3,0xe0,0x0e,0xc5,0x90,0x91,0x80,0xf8,0xf4,0x9c,0xfe,0x03,0xaf,0x31,0x44,0xb7,0xfc,0x1f,0x65,0xc8,0x65,0x68,0xcc,0x27,0xb4,0x0d,0x81,0x14,0x9e,0x52,0xab,0xdd,0x71,0xf6,0xd9,0xcf,0x29,0x04,0xcd,0xae,0x6f,0xd6,0x41,0xb5,0xfd,0x1d,0x0f,0xbf,0x71,0xc2,0x60,0x98,0xb9,0xc0,0x6e,0x8a,0x2c,0x7d,0xec,0x31,0xa5,0xea +.byte 0x1a,0xb1,0xe4,0xc2,0x36,0xcb,0xf0,0xf4,0x3f,0x1d,0x03,0x01,0xcd,0xac,0xd0,0x9d,0x2e,0xa3,0xc4,0x54,0x49,0x75,0x90,0xac,0x7e,0x1e,0xc3,0x90,0xab,0x55,0xb0,0x34,0x0d,0xd6,0x99,0xb5,0x40,0xda,0xdd,0x30,0x57,0x61,0x15,0xec,0x8f,0x8c,0xc7,0xda,0xfc,0xf5,0x0a,0x86,0xd8,0x6b,0x0f,0x6e,0x09,0xb8,0x50,0x2a,0xea,0x51,0x84,0x33 +.byte 0x7a,0x97,0x0c,0x56,0x61,0x2c,0xd9,0x83,0xb9,0xb1,0x53,0x31,0x72,0x20,0x79,0x85,0x7f,0xdc,0xb8,0xfe,0xfa,0x9a,0xd4,0x6a,0x3c,0xc7,0xcc,0x75,0x20,0xba,0x9c,0xb9,0x1a,0xff,0x9c,0xbe,0xfd,0x87,0xb4,0xd7,0xe8,0x5e,0x22,0x6a,0x1b,0x91,0x52,0x6a,0x58,0xbc,0xf4,0xde,0xcc,0x18,0x37,0x0e,0xf5,0x22,0x91,0xd2,0x4f,0x08,0x91,0x62 +.byte 0x1c,0xb7,0xa0,0x7e,0x66,0x97,0xda,0xa0,0x3c,0xc8,0xe8,0xdc,0x61,0xa4,0x64,0x8b,0x0a,0x43,0x90,0x0c,0x78,0xd9,0x96,0x8a,0xb0,0x17,0x0f,0x32,0x17,0x11,0x82,0x69,0x9d,0x7c,0xa9,0xfd,0x9b,0xe3,0xeb,0x0d,0x44,0x1d,0xcb,0xf6,0xee,0x26,0x6b,0xd5,0x4c,0x49,0x69,0x18,0xd7,0xf3,0x63,0xd9,0x7e,0x83,0xdd,0xa3,0x2d,0xdf,0x88,0x10 +.byte 0xd1,0x5c,0xb0,0x7e,0x44,0xfe,0x64,0x39,0x33,0x05,0x04,0x54,0x74,0x4d,0xd5,0xbc,0xdf,0x19,0x52,0x81,0x60,0x92,0xc5,0x4e,0xa4,0xff,0xf0,0xa2,0xfd,0x88,0x96,0xde,0xb4,0x8d,0x58,0x06,0xfb,0x96,0x6f,0x0e,0xb0,0x4a,0x2b,0xed,0x15,0xa7,0xfb,0x9f,0xf2,0x30,0xc4,0xce,0x02,0x4d,0x83,0xb8,0x5d,0x10,0x60,0xb8,0xbc,0x05,0xa2,0xd4 +.byte 0xf1,0xae,0x46,0x56,0xb9,0xac,0x68,0x79,0x41,0x90,0xee,0x79,0xda,0x3a,0x91,0x7a,0xf6,0xdb,0xe3,0xea,0x91,0x48,0x77,0x4a,0xa3,0xab,0x9c,0x99,0x49,0x1f,0xc9,0xcd,0xe7,0x2e,0xe3,0xe7,0x78,0x6d,0x07,0x1b,0xc6,0x08,0x48,0xd8,0x20,0xff,0x19,0x8a,0x73,0x1d,0xc6,0xa1,0xd4,0x95,0x33,0xf7,0x45,0xab,0xea,0x05,0x3e,0xdf,0xde,0x68 +.byte 0xb2,0xb6,0xef,0x71,0xb4,0xd1,0x09,0x4b,0x43,0x16,0x35,0x1a,0xb6,0xcb,0x78,0x63,0xca,0x9e,0x9a,0xe3,0x86,0xb2,0x8e,0x7b,0x68,0x89,0xa7,0x5c,0xd3,0x06,0x21,0x88,0x94,0xde,0xa1,0xb1,0x3a,0xe8,0xb7,0xfa,0x58,0xc5,0xc8,0x01,0xfa,0x56,0xe4,0x0e,0x6b,0xeb,0x5d,0x67,0xf4,0x63,0xd4,0x44,0xe2,0xe7,0x42,0xfe,0x09,0x58,0xdf,0xd9 +.byte 0x1d,0xb7,0x14,0x91,0xac,0x88,0x49,0xf6,0x7c,0x03,0x92,0x11,0xb4,0x66,0x68,0x6c,0x94,0x2a,0x22,0xaf,0xa6,0xb1,0x29,0x2a,0xae,0xdd,0xa8,0x65,0xe4,0xa9,0x39,0x00,0x1e,0xca,0x17,0x99,0xba,0xd6,0xf2,0x20,0x21,0xbf,0x1a,0xab,0xca,0x7c,0x92,0x22,0xee,0x3c,0x0c,0xc6,0x63,0xcc,0x86,0xfe,0xc0,0x8f,0xac,0x18,0x4e,0x2b,0xa5,0x2e +.byte 0x46,0x57,0x8a,0xbf,0xdc,0xd1,0xd2,0x2c,0x5b,0xe2,0x96,0x81,0xca,0x41,0xb5,0x17,0x38,0x4a,0xa4,0xd2,0x0e,0xac,0x5d,0xe9,0x44,0x63,0x1b,0xb8,0x81,0xd6,0x69,0x1c,0x99,0xc5,0xdb,0xdd,0x18,0xc1,0x6d,0x28,0x7d,0x36,0x52,0x82,0xaa,0x1a,0x10,0x01,0x9d,0xf1,0x7b,0x09,0x69,0x56,0xb1,0x31,0xa3,0x54,0x3c,0x56,0xf9,0x82,0x8c,0x06 +.byte 0x5a,0x32,0x2d,0xc0,0x7c,0x7e,0x91,0x6d,0x73,0x7b,0x7c,0x45,0x0b,0x2c,0x2a,0x4f,0x3c,0xea,0x6b,0x2b,0x84,0x76,0xab,0x8d,0x4c,0x5c,0x64,0xa3,0x97,0x9f,0x56,0x20,0x05,0xf9,0xc2,0x20,0xf3,0xd0,0x6a,0x7f,0x7d,0x12,0xfc,0x20,0x52,0x5d,0xff,0x92,0xaf,0x4e,0x7f,0x8f,0x2f,0xd0,0x73,0x06,0x23,0x09,0xce,0x11,0xc0,0x1b,0x48,0x7d +.byte 0x11,0x51,0x06,0x0e,0x05,0x95,0xca,0x42,0x71,0x87,0xa3,0xa3,0xc1,0x27,0xf8,0xb1,0x24,0x92,0x38,0x95,0xf6,0x8f,0x3b,0x70,0x74,0x19,0x9b,0x08,0xb3,0x49,0xe9,0x57,0xd4,0xce,0x5b,0xdd,0xab,0x95,0x26,0xe9,0x70,0x21,0xef,0x16,0xdd,0x36,0x89,0xe5,0x9e,0xaf,0xc5,0x28,0x0c,0xd3,0x67,0x64,0xbc,0xfb,0x18,0x17,0x15,0x1e,0xa7,0xb7 +.byte 0x72,0x3d,0xfd,0x10,0x5c,0xa2,0xc1,0xbf,0x62,0x79,0x2b,0xa7,0xb9,0x1f,0x73,0xe6,0x11,0xd8,0xbc,0x74,0x6c,0x45,0x95,0xef,0xa2,0xda,0x90,0xc3,0x00,0x00,0xbb,0xc7,0x28,0x36,0x82,0xd4,0x5e,0x5c,0x11,0xea,0x7c,0xf6,0x79,0x66,0xff,0x93,0x77,0x49,0x05,0xc9,0xc1,0x8d,0x5c,0xf6,0xff,0xb9,0xf9,0xcd,0xb3,0x01,0x83,0x83,0x43,0x2d +.byte 0xa1,0x90,0x73,0xc9,0x32,0xae,0xdb,0xd0,0xf3,0x61,0x63,0x72,0x06,0xde,0x21,0x7b,0x3b,0x2d,0xec,0xd3,0x1d,0xfe,0xbd,0x6e,0xd8,0xe3,0x39,0xe0,0xa1,0x9f,0x67,0xaf,0xab,0x79,0xbc,0x59,0xf9,0xa7,0xdf,0x28,0x75,0xea,0x34,0x6b,0x25,0xde,0x49,0x1b,0x07,0x95,0x19,0x47,0x86,0x46,0x7b,0x68,0x30,0x70,0xec,0x9c,0x05,0xb6,0xc9,0x00 +.byte 0x68,0x10,0x4b,0xc4,0xe5,0xf1,0x67,0x3f,0xd4,0x3c,0xd6,0x49,0x98,0x71,0x23,0xff,0x07,0x6e,0x01,0x01,0x08,0x08,0x3d,0x8a,0xa1,0x71,0xdf,0x25,0x1a,0xef,0x60,0x86,0x6d,0x1c,0xd9,0x90,0x29,0x95,0xf2,0x4c,0x96,0xd3,0x17,0xe8,0x96,0x32,0x25,0x8c,0x65,0x38,0xbc,0x44,0x6a,0x5a,0xef,0x5a,0x72,0x12,0x43,0x2b,0xaf,0xc3,0xdc,0xb3 +.byte 0x6c,0x9f,0x57,0x61,0x2f,0x12,0x3f,0x72,0x16,0x4f,0x34,0xe3,0xb5,0xca,0x72,0xca,0x1c,0xdb,0xd2,0x8d,0x70,0x1f,0x19,0x75,0xb3,0x1b,0xdf,0xdb,0xb3,0xbf,0x6c,0x9a,0x70,0x64,0xa8,0xac,0x30,0x2d,0x4b,0x30,0xf5,0x4f,0x12,0x19,0xbd,0x65,0x25,0x70,0x33,0xe1,0x6f,0x18,0xdf,0x17,0xec,0xa3,0x80,0x51,0x6e,0xbb,0x33,0xa5,0xa8,0x58 +.byte 0x95,0x3c,0xab,0x86,0xd1,0x33,0xbe,0x55,0x04,0x8c,0x20,0x0d,0xfc,0x1a,0xa9,0x9d,0xb1,0x16,0x42,0x56,0x20,0xcc,0xa6,0x73,0xa0,0x85,0x3d,0xbf,0x1e,0xe0,0x01,0x51,0xd2,0xd7,0x2e,0x9d,0xd8,0x3c,0xea,0x03,0xf9,0x9a,0xbf,0x19,0x17,0x04,0x99,0xaf,0x8b,0xfc,0x9c,0x86,0xdf,0x58,0x78,0xfc,0x54,0x0d,0xac,0x26,0x27,0x2f,0x2e,0xbc +.byte 0xdd,0x4a,0xd5,0x6f,0x7c,0xd8,0x93,0xe3,0x51,0x9e,0xcc,0xc8,0xd2,0xfe,0x68,0xfb,0x5b,0x22,0xda,0xef,0x76,0xb9,0xc3,0xdd,0x13,0x52,0x24,0xb6,0x23,0x1f,0x69,0x22,0xb6,0xf5,0x86,0xff,0x2e,0x6e,0xd0,0xe0,0x21,0xbc,0x31,0x81,0xb5,0xc5,0xdb,0x36,0x58,0x44,0xe7,0xb8,0xf7,0xfd,0xd3,0x34,0xee,0xab,0xe6,0x99,0xf2,0x84,0x86,0x9b +.byte 0x67,0x45,0x08,0x07,0x66,0xae,0x6a,0x55,0xa2,0x74,0x46,0xda,0x02,0x82,0x67,0x93,0x60,0x64,0x5d,0x1f,0xac,0xe7,0x36,0xb6,0xcd,0x31,0x28,0x78,0x93,0xcd,0x54,0xe9,0x42,0xbb,0xb4,0xb3,0x15,0x72,0x12,0x31,0x85,0x15,0x68,0x3a,0x31,0x35,0xd6,0xc9,0x0d,0x3f,0xa0,0x4b,0x36,0x03,0xda,0xfd,0x7a,0xd6,0xce,0x0c,0xf5,0x14,0x23,0x71 +.byte 0x47,0x85,0x64,0xe7,0xe7,0x8b,0x8e,0x25,0x03,0x32,0x5f,0xa9,0x3b,0xdb,0x2b,0x27,0x7c,0x02,0xfb,0x79,0xd7,0x7a,0x76,0x75,0x69,0xfd,0x74,0x24,0xd2,0x72,0x8c,0xdd,0xc5,0xa1,0x45,0x90,0x50,0x65,0x95,0x41,0xae,0x7e,0x5c,0x83,0x3e,0x24,0x3c,0x02,0xa9,0x37,0x49,0x36,0x63,0x2f,0x18,0x92,0x3a,0x8a,0xe5,0x2a,0x6a,0x5c,0xa7,0x3e +.byte 0x98,0x24,0xfd,0xd9,0x3b,0x2d,0x4c,0xe2,0x8e,0x05,0x5b,0xdd,0x47,0x0f,0x19,0x5a,0x62,0x94,0xd6,0x6e,0x45,0xd8,0x99,0x43,0x78,0xa0,0xb1,0xdf,0x68,0x8a,0x56,0xa8,0xfb,0x2e,0x52,0x4e,0xfa,0x21,0xec,0x62,0x14,0xf5,0x90,0xdb,0x8c,0x02,0xa7,0xff,0x29,0x22,0xb8,0x40,0x87,0x58,0xda,0x4e,0xfd,0xab,0xeb,0xa2,0x40,0xce,0xfc,0x58 +.byte 0x46,0x37,0x3f,0x04,0x4e,0x36,0x76,0x44,0x3c,0xfc,0x54,0xb8,0x6f,0x4b,0x66,0x6a,0x4a,0x78,0x8f,0x33,0x86,0x07,0xe4,0x3c,0xb5,0x0f,0x86,0x2e,0x21,0x7e,0x44,0xce,0x18,0x77,0xe0,0xcc,0xd7,0x7f,0xc9,0xac,0xb7,0x2b,0x94,0xb5,0x91,0xcd,0x2c,0xfa,0xc7,0x98,0xbd,0xb0,0x2a,0x85,0x77,0xcf,0x82,0xd9,0xae,0x76,0x33,0x34,0xc0,0x9d +.byte 0x3a,0xbc,0x27,0xbc,0x97,0x25,0xf4,0xf1,0x43,0x53,0xac,0xf6,0xde,0xf5,0x1f,0xa6,0x6a,0xd5,0xe3,0x11,0x32,0x49,0x46,0x5b,0x56,0x68,0x07,0xdb,0x03,0xad,0xc2,0x35,0x16,0x8f,0x01,0xcc,0x8a,0xd2,0x0c,0x6b,0xb2,0x62,0x73,0x99,0xb5,0x74,0xf1,0x4b,0x2e,0xbc,0x8e,0xed,0xc0,0x55,0x56,0x40,0xae,0x24,0xf2,0x7e,0x1f,0xba,0x9d,0xc4 +.byte 0xd1,0x69,0xd3,0xba,0x21,0x83,0xf5,0xc4,0xbf,0x78,0x96,0x74,0xa1,0xd8,0x8c,0x35,0xba,0x9f,0xa0,0x0f,0xb5,0x6a,0xb2,0x72,0x52,0xfa,0x02,0x71,0xbb,0x79,0x61,0xbd,0xa9,0xee,0x22,0x7c,0xc5,0xac,0x6b,0x52,0x67,0xab,0xc4,0xd2,0x8d,0x26,0x1c,0x2b,0xaf,0x0c,0xa4,0xce,0xb5,0x11,0x99,0x4d,0x22,0x69,0x68,0xe0,0xc6,0x3e,0x84,0x3d +.byte 0xeb,0xad,0xc9,0x5b,0xb5,0xb4,0xba,0x06,0x9b,0x0a,0xb2,0x54,0x89,0xf2,0xb0,0x5f,0x41,0xb4,0x8b,0x21,0x31,0x29,0x94,0x52,0x1e,0xa7,0xc4,0xc2,0x97,0xb9,0x74,0x95,0xa3,0x30,0xfb,0x02,0x77,0x01,0x4f,0x32,0x03,0x34,0x8f,0x51,0x2d,0x10,0x61,0xee,0xc5,0x2f,0x89,0x42,0x3c,0xbe,0xed,0x66,0xa6,0x7a,0x10,0xc6,0x06,0x7e,0xb2,0x3d +.byte 0xf2,0xc9,0xd1,0x08,0x97,0x6c,0x6f,0x6d,0x06,0x9d,0x72,0xd0,0x5e,0x79,0x3b,0xa5,0xa5,0xd0,0xdc,0xc6,0xda,0x73,0xd2,0xf3,0x0a,0xfd,0x94,0xc2,0x9c,0x4b,0x85,0x38,0x8d,0xb2,0xfb,0x29,0xdd,0x90,0xc2,0xb7,0x8f,0x2c,0x52,0xa2,0x32,0x5e,0xa1,0x0f,0x62,0x38,0x58,0xfa,0x46,0x4e,0x87,0x4b,0xcf,0xc5,0xe9,0xfc,0xf2,0x97,0x62,0xdd +.byte 0x92,0xd2,0x41,0x7b,0xa2,0x2a,0xae,0x6e,0x4d,0xbc,0xef,0x43,0x18,0x6e,0xbb,0xe5,0x06,0x45,0x53,0xa1,0x00,0xef,0xf5,0x4b,0xad,0xbd,0xa5,0x2c,0x77,0x0a,0x37,0x04,0x22,0x95,0xeb,0x7b,0xc1,0x3c,0x20,0x0a,0x44,0xdf,0xa2,0x23,0xc9,0xfc,0x85,0xf3,0x5b,0x9b,0x0f,0x40,0x2a,0xe3,0xc7,0x5a,0xa1,0xf6,0xe4,0x39,0x2a,0xfe,0xd7,0xe7 +.byte 0x33,0xd8,0xbc,0xd6,0x1f,0xef,0xac,0xa9,0x3f,0x2d,0x55,0xb0,0x85,0x74,0xef,0xeb,0xcd,0x9b,0x23,0xa3,0xe6,0x19,0xde,0xea,0x7c,0x9c,0x83,0x48,0x4b,0x12,0xfd,0xe3,0xcb,0x1b,0x70,0x2d,0x9f,0x2c,0x13,0x82,0x87,0x68,0xca,0x60,0x5e,0xc0,0x2e,0x60,0xde,0xf2,0x6b,0x78,0x0a,0x63,0xaa,0x9c,0x9b,0x61,0x63,0xc7,0x0c,0x98,0x92,0x68 +.byte 0xc7,0x44,0x00,0x6a,0x76,0x43,0xa0,0x61,0x7c,0x37,0x62,0x1a,0xd4,0x9b,0x58,0x59,0xe5,0xae,0x78,0x79,0x80,0xf0,0x75,0x68,0x9e,0xab,0x02,0xb8,0x00,0xc5,0x33,0x0d,0xea,0xb1,0x91,0x0f,0x17,0x57,0x96,0x23,0x8d,0x36,0x4d,0x89,0x94,0x42,0xc9,0x61,0x6e,0xf6,0x9f,0x37,0xee,0xa5,0x4b,0x3d,0x06,0x08,0xee,0x9a,0x7c,0x73,0xa9,0x58 +.byte 0xcd,0xcb,0x78,0xa9,0x3d,0x5c,0x11,0x0e,0x5a,0xd9,0xb0,0x7b,0xc4,0x3e,0x83,0xdc,0xe2,0x11,0xe9,0x6d,0x8a,0x8b,0x24,0x28,0x1d,0x7e,0x45,0x1b,0x05,0x5a,0x6b,0x97,0x1c,0x25,0x15,0x84,0x5c,0x3f,0x95,0x44,0xd5,0x4f,0x3c,0x4b,0x52,0xb1,0x0b,0x6a,0xb3,0xae,0x4e,0x1b,0x12,0xcf,0x16,0x78,0xd7,0xcb,0x32,0x43,0x39,0x88,0xf4,0x5e +.byte 0x26,0x29,0xe7,0x93,0x08,0x19,0x14,0x88,0x8f,0x54,0x91,0x13,0xb6,0x57,0xd1,0x87,0xd4,0x9d,0xf7,0xec,0x9b,0x22,0x6b,0x91,0x79,0x9d,0x6c,0x32,0x47,0x4a,0x79,0x55,0x7d,0xac,0x87,0x98,0x59,0x97,0xa5,0x71,0xbc,0xbf,0x1b,0xf0,0x6f,0xbb,0x81,0x8e,0xc2,0xef,0x7c,0x63,0x2f,0x80,0x37,0xb6,0xc5,0xae,0x59,0x5e,0x57,0x5e,0x1f,0x3a +.byte 0xe5,0x6b,0x6b,0x5e,0xdb,0x8e,0xd2,0x87,0xf7,0x94,0x7b,0x11,0x0e,0x4b,0xa6,0x9f,0x49,0xc6,0x68,0xc7,0x52,0x5f,0x28,0x87,0x33,0x84,0x52,0x5f,0xc8,0x5f,0x81,0x85,0x10,0xe8,0x92,0xce,0x13,0x6c,0x01,0x28,0x5e,0x59,0x8f,0xbb,0xa9,0x9c,0xdc,0x85,0xd3,0x73,0xa0,0x5a,0xbf,0x5b,0x04,0x80,0x99,0x90,0xc8,0x16,0x44,0x0d,0x09,0x01 +.byte 0xcd,0x24,0xe7,0x59,0xe7,0x42,0xe0,0xdd,0x01,0x93,0x1f,0x9e,0x1f,0x36,0xdb,0xcd,0x49,0xdb,0xea,0xa9,0x63,0x71,0xb9,0x2c,0xcd,0xca,0x1a,0x64,0xe1,0x95,0xbe,0xe1,0x64,0x2e,0xc7,0x59,0x15,0x61,0xe1,0xf9,0x45,0x0f,0x2a,0x3a,0x85,0xf8,0x7c,0x06,0xae,0x53,0x84,0xd2,0xe7,0xee,0x8b,0xbf,0x7a,0x72,0xa3,0x57,0xf1,0xc2,0x12,0x40 +.byte 0x9c,0x93,0xe1,0x04,0x81,0xde,0xc6,0xa8,0xae,0x4f,0x5c,0x31,0x93,0xc7,0x11,0x1d,0x89,0x70,0x85,0xd5,0x6f,0xab,0x58,0x1f,0x3f,0x76,0x45,0x7e,0x19,0xd0,0x6c,0xc1,0x41,0xa9,0x64,0x0a,0x79,0xb5,0xe0,0x9e,0xbc,0x4f,0x10,0x0c,0xac,0xfc,0x54,0xad,0xcf,0xb8,0xd0,0xfd,0x9b,0xed,0xea,0x54,0x05,0xbf,0x4f,0x91,0xbd,0x16,0x4a,0x57 +.byte 0xa9,0xda,0x38,0xb9,0x40,0x0d,0x63,0x68,0x83,0x7d,0xec,0x1c,0xe6,0x7f,0x9c,0xec,0x16,0x4e,0x0b,0xd0,0x91,0xb4,0x2c,0x04,0x65,0xb8,0x12,0xdf,0x3f,0xff,0x6a,0x08,0x4e,0x65,0xdf,0x09,0xa5,0xea,0xb1,0xac,0xa9,0x67,0xd2,0xbb,0x73,0x51,0xd2,0x37,0x72,0xfc,0x3f,0x69,0xe2,0x3f,0x01,0x94,0x3a,0xf7,0x23,0x0e,0x5d,0x23,0x44,0x82 +.byte 0xc7,0x38,0x35,0x9f,0xfa,0x13,0x15,0x47,0x0d,0x18,0xab,0x02,0x39,0x6e,0xb2,0x7c,0x29,0x11,0x9a,0x5a,0x01,0x2d,0xb2,0x10,0xea,0x9d,0xb7,0x37,0x4b,0xf2,0x2b,0x76,0x22,0xf7,0xaf,0x8a,0x5f,0x1d,0x6b,0xb2,0x13,0x9e,0x84,0xf5,0xbc,0x6e,0xad,0x66,0x5c,0x1b,0x5d,0x12,0xb0,0xe1,0x48,0x94,0x83,0xa0,0x26,0x54,0xd2,0xfd,0x3c,0x8d +.byte 0x81,0xac,0x31,0x9a,0x15,0xc6,0xd8,0xd5,0x07,0x1b,0x21,0x3f,0x04,0x40,0x3a,0x60,0x80,0x5f,0x1f,0x42,0x3e,0xd7,0x2b,0x7a,0x5f,0x71,0x93,0xb4,0x9d,0xf0,0x8b,0x5e,0xf1,0xc6,0x19,0x0a,0xa9,0x43,0xac,0xb2,0xc1,0x73,0x0d,0x44,0x6a,0x92,0x22,0xd0,0xda,0x40,0x14,0x7d,0x88,0xd1,0x5e,0x10,0xc9,0xa4,0x4d,0xd8,0xe0,0x7d,0x74,0x1b +.byte 0x2b,0xcb,0x50,0x24,0xbd,0x50,0x4a,0xe4,0xed,0x0e,0xe8,0xc0,0x5b,0x50,0x6d,0xf5,0x68,0x59,0xd1,0xc3,0x6f,0x32,0x86,0x29,0xe0,0x32,0x3f,0x05,0x86,0xa2,0x7f,0x93,0xd8,0xb7,0x02,0x68,0xb3,0x16,0xaa,0x0c,0xd3,0x4d,0xec,0x9a,0x66,0x06,0x7c,0x74,0x35,0x6f,0xde,0x8b,0xd9,0xdb,0x79,0x0a,0x15,0x84,0xc4,0x63,0xba,0x42,0xa2,0x3c +.byte 0x29,0xc8,0x65,0xdc,0x06,0x60,0x0a,0x08,0x4e,0x80,0x33,0x5c,0xfa,0x4b,0x91,0xdb,0xf6,0x57,0xd6,0x25,0x7d,0x70,0x80,0x09,0xb2,0x27,0xdb,0x80,0x4c,0xa7,0xe8,0x35,0xf5,0x18,0x2d,0x10,0x62,0x22,0xf9,0xb1,0x22,0xf3,0x9b,0x74,0xa0,0xc5,0x25,0xd3,0x44,0xc9,0x27,0x7c,0xba,0x01,0xfe,0x32,0x23,0xf7,0x90,0x90,0xbc,0x0d,0xad,0x9e +.byte 0x22,0x77,0xc5,0xfb,0xf2,0x0e,0xda,0xe5,0x7c,0xb4,0xbb,0xed,0xd4,0xfd,0xb0,0xfb,0x4a,0x4c,0x2a,0x32,0x2d,0x81,0xcd,0xef,0x74,0x3c,0x6a,0x9a,0x0c,0x95,0x58,0x25,0xd0,0x3a,0xb4,0x84,0x8f,0xa5,0xef,0xad,0x91,0xd7,0x2d,0xae,0x61,0xaf,0x9d,0x3f,0x03,0xa8,0xab,0xa4,0x66,0xd4,0x73,0x3a,0x84,0x0d,0x4c,0x6a,0xca,0xbd,0x0c,0x3c +.byte 0xdc,0x1d,0x37,0xea,0xe6,0x5a,0x7f,0x15,0xbe,0x9d,0xc7,0xce,0xbd,0x46,0x97,0xd3,0x07,0x19,0x82,0xaf,0x58,0x39,0x39,0x95,0x5d,0x4b,0x8e,0x1b,0xe9,0xf1,0xf6,0xa9,0xb3,0xfc,0xe6,0xe0,0x68,0x2c,0xbb,0xfa,0xd9,0x9b,0xc1,0x69,0xf3,0x5a,0x8f,0x67,0xd5,0x9c,0x11,0x1e,0x02,0x20,0x20,0xfe,0x4b,0xc9,0x8b,0x62,0x17,0x9a,0xfa,0x47 +.byte 0x7f,0xa2,0x8b,0xc1,0x3b,0x02,0x78,0x38,0xff,0xce,0xe1,0x54,0x40,0x3f,0x27,0x5c,0x9d,0xdd,0x56,0x38,0x48,0xea,0x39,0xbe,0xa0,0x76,0x43,0x82,0xef,0x74,0x50,0xdf,0xda,0x4c,0xca,0x47,0x46,0x7e,0xc5,0xff,0xce,0x66,0xdf,0xeb,0x5b,0x6e,0x45,0x77,0x19,0xac,0x01,0x1f,0x20,0xa1,0xad,0x01,0x5f,0x87,0x3e,0x3a,0xd0,0x83,0x13,0x17 +.byte 0x53,0x40,0xfe,0x26,0x99,0x42,0xfa,0x54,0xa8,0x82,0x79,0xa7,0x44,0xd0,0x9e,0x59,0x64,0x77,0xec,0x70,0x0e,0xcd,0xb9,0xb1,0xc2,0xe2,0x39,0x93,0xb7,0xd1,0xd5,0x67,0x9f,0xb0,0x5b,0xd9,0x50,0x8b,0x17,0xec,0xbc,0x83,0x64,0x35,0xaa,0x43,0x3f,0x4c,0x8c,0x56,0x83,0x76,0xa2,0x72,0x30,0xe7,0xe8,0x9f,0x88,0x35,0x8e,0x8d,0x11,0x31 +.byte 0x8e,0xb5,0x71,0x75,0x31,0xc8,0x28,0x15,0x50,0xe6,0x0a,0x00,0x4d,0x75,0x51,0x7c,0x33,0x14,0x96,0xff,0xe8,0xf3,0xa0,0xb1,0x9c,0xeb,0x9d,0x8a,0x45,0xcf,0x62,0x82,0xeb,0xce,0xea,0xa5,0xb9,0x10,0x83,0x54,0x79,0xf8,0xcf,0x67,0x82,0x1d,0xea,0xce,0x86,0xcf,0xc3,0x94,0xf0,0xe8,0xf4,0x80,0x8b,0x84,0x96,0x06,0x2e,0xe4,0x58,0x21 +.byte 0x98,0x42,0x1a,0xb7,0x8c,0x5d,0x30,0x15,0x83,0xe8,0x17,0xd4,0xb8,0x7b,0x90,0x57,0x35,0x72,0x6d,0x1b,0x7c,0xc0,0x88,0x0a,0xa2,0xea,0xcd,0x58,0xcc,0xf1,0xb4,0x8b,0xcd,0x66,0x3c,0xa5,0xb0,0xd4,0xc9,0xcc,0x42,0x1d,0xef,0x3b,0x42,0x22,0x9b,0xfb,0x45,0x24,0xcc,0x66,0xd7,0x67,0x73,0xb2,0x12,0x03,0xf6,0xa3,0x06,0x61,0xe2,0xab +.byte 0x91,0x8e,0x33,0x0b,0x9f,0x6a,0x80,0x5e,0x0f,0x68,0x41,0x5a,0x7e,0xd8,0xe2,0x32,0x50,0xc2,0x88,0x60,0xca,0xe3,0x23,0x86,0xff,0xdc,0x0c,0x19,0xbb,0xba,0x01,0xa3,0x41,0x89,0xf0,0x79,0x55,0x79,0xa6,0xa4,0x66,0x7b,0x46,0xde,0xac,0xae,0xb1,0xde,0xe1,0x1e,0x8d,0x62,0xc1,0xd6,0xeb,0x39,0x2f,0x1d,0x50,0x27,0x53,0xc9,0xea,0xb6 +.byte 0xd3,0x91,0x9b,0xdd,0xc1,0x68,0x8c,0xb6,0xe1,0x5e,0x9f,0xea,0xbe,0x98,0x88,0xeb,0xa8,0x77,0xf6,0x69,0x64,0xab,0x99,0xf3,0x7a,0x08,0xff,0x8c,0xa6,0x17,0x1b,0x2e,0x6e,0xcc,0xd8,0x33,0x30,0xef,0x5a,0x86,0x07,0x49,0xa5,0x13,0x08,0xbc,0xd6,0x88,0x7e,0x19,0xe0,0x1c,0x23,0xa9,0xe5,0x0a,0xa7,0xaf,0x8a,0xe9,0x81,0x3f,0xd8,0x99 +.byte 0xa6,0x01,0x6b,0xec,0x14,0x08,0x90,0xb1,0x76,0x16,0x3a,0xcb,0x34,0x0b,0x91,0x26,0xe9,0xec,0xe5,0xbc,0xd6,0xdc,0xf0,0xa9,0xfd,0xf2,0xe9,0xcc,0xa1,0x9d,0x7f,0x32,0x0d,0x0a,0x2a,0x92,0xff,0xc4,0x38,0xf8,0x9e,0x31,0x78,0x47,0xbf,0x3f,0x27,0x71,0xe1,0x7a,0x33,0x48,0x91,0xe8,0x8e,0x1a,0x66,0xcf,0xa1,0x61,0xc2,0x62,0x30,0x7c +.byte 0x69,0x35,0x21,0x67,0x9b,0xa7,0x1c,0x72,0x06,0xd8,0x28,0x94,0x6e,0x6d,0xf0,0x22,0x85,0xb4,0x6c,0x89,0xe8,0x2e,0x3a,0xc5,0xdc,0xe3,0xe3,0x0c,0x8a,0xba,0x1c,0x57,0x86,0xef,0x55,0x6a,0x24,0x59,0x5e,0x6e,0x47,0xb8,0xad,0xc5,0x10,0xff,0xbe,0x2d,0x93,0x09,0xfe,0x17,0x03,0x16,0x4d,0x4a,0x9a,0x15,0x38,0x94,0x38,0x18,0x45,0xa7 +.byte 0xcf,0xe4,0x16,0xd3,0x26,0x72,0x49,0xe7,0x89,0x9a,0xb4,0xc7,0x78,0xc3,0x18,0x3b,0xc8,0x08,0x9d,0x66,0x0f,0x48,0xc8,0x23,0x91,0x57,0x61,0xf1,0xf3,0x01,0x3e,0x0a,0xa3,0x4c,0x6c,0x34,0x5b,0x98,0x40,0x47,0x42,0xc1,0xeb,0x58,0x58,0xff,0x1f,0x4b,0x5f,0xf1,0x29,0x2e,0x7e,0x76,0x15,0x56,0x17,0x9c,0xe7,0x55,0x09,0x22,0x0a,0xa2 +.byte 0xd8,0xbf,0xd9,0x44,0x49,0xa9,0x24,0xd7,0x4f,0x12,0x04,0xa2,0x18,0x1c,0xdc,0x54,0xc0,0x22,0x27,0x3c,0xeb,0x1f,0x02,0xae,0xb3,0x33,0xb2,0xa2,0x84,0x23,0x76,0xc6,0x2b,0x94,0x53,0xae,0x7b,0xee,0xbb,0x81,0x64,0x8a,0x3f,0xe0,0x75,0x6b,0x2c,0xd5,0x60,0xad,0x49,0x0c,0xf8,0x65,0x64,0x1a,0x83,0xc7,0xb9,0xd9,0x01,0x5b,0xde,0xb0 +.byte 0x76,0x9b,0x1c,0x0d,0x89,0x2d,0xd5,0x09,0xc7,0xa9,0xbb,0x0a,0x54,0x5c,0xd4,0x5b,0xbf,0xbc,0x5e,0x00,0x29,0x0b,0x30,0x19,0x73,0x66,0xfd,0x3f,0xdb,0xd4,0x1b,0xd4,0xc0,0x27,0xde,0x49,0x90,0x5f,0x65,0x87,0x3c,0xc4,0x43,0xd0,0x49,0x76,0x64,0x39,0x88,0xd7,0x0e,0xfc,0x27,0x52,0xb1,0x8d,0xd0,0x27,0x29,0x84,0xe3,0x49,0xb9,0x0c +.byte 0x2d,0x4e,0x73,0x95,0x57,0xa8,0x07,0xa0,0xe1,0x5b,0x5a,0xb6,0xbc,0xa1,0x7f,0xfd,0x4b,0x9c,0x4d,0x7d,0x0c,0x5c,0x4c,0x4b,0x42,0x70,0xc3,0x0a,0xc1,0x89,0x12,0xb5,0x46,0x04,0x3c,0x56,0x25,0xc6,0x8f,0x49,0x7d,0x3b,0xf1,0xcd,0xfc,0xb8,0xa6,0x66,0xb1,0xc2,0xa3,0xa7,0x98,0x93,0x0e,0xdb,0xcd,0xce,0xdf,0x7f,0x68,0x5e,0xea,0xf2 +.byte 0x85,0x61,0x8f,0xd6,0x23,0xb4,0x5f,0x2f,0xf8,0x78,0x47,0x15,0x59,0x2d,0xca,0x35,0x0f,0xf5,0x91,0x74,0x3b,0x32,0xe1,0xcf,0x54,0x1b,0xf4,0x9d,0xdb,0x20,0x5e,0xf8,0x71,0x10,0xa3,0x31,0xf1,0xb8,0x98,0x8d,0x76,0x70,0xce,0x4c,0xed,0xd3,0x81,0x6b,0xd5,0x8d,0x73,0x5f,0x8c,0x66,0x7c,0x87,0x73,0xfa,0x20,0xbe,0xcd,0xba,0x41,0x88 +.byte 0x46,0xc3,0x38,0xc0,0xd9,0x08,0x79,0x30,0xda,0x7f,0x2a,0xc0,0x72,0x47,0xb0,0xc9,0x41,0x68,0xb1,0xe8,0xb4,0x86,0xcb,0x5d,0xb0,0x5b,0x7a,0x26,0xfd,0xf2,0x1b,0x4e,0x1f,0x4c,0x6a,0x8a,0x84,0xd4,0x07,0x2f,0xf4,0x06,0x73,0x3d,0x1c,0x55,0x04,0x6a,0xa5,0x8a,0xbb,0xaa,0x8a,0x8d,0x8f,0x05,0xcc,0x63,0x04,0xe0,0xc6,0x6f,0x6b,0xf8 +.byte 0x24,0x56,0xbb,0x9d,0xa9,0xe5,0x4c,0xac,0x9d,0xbe,0xfd,0x70,0x9d,0x1f,0x98,0xc4,0xfc,0xdb,0x3c,0x45,0xe7,0xbb,0xea,0x51,0xb6,0x56,0xe0,0x2c,0xb2,0x77,0x1b,0x80,0x9b,0x43,0xa7,0xb2,0x9a,0x40,0x8f,0xdb,0x2d,0x51,0x7b,0x2c,0x89,0xfd,0x14,0xf5,0x77,0xbf,0x40,0x3d,0x32,0xe0,0x10,0x32,0xcd,0xc4,0x3f,0xe2,0xe8,0xb4,0xdf,0xc2 +.byte 0x43,0x7a,0x0b,0x17,0x72,0xa1,0x0e,0xd6,0x66,0x35,0x8f,0xf4,0x21,0xf1,0xe3,0x46,0x13,0xd7,0xcd,0xc7,0x7b,0xb4,0x9b,0x39,0x1e,0x33,0x3c,0x18,0x15,0x7a,0xea,0x77,0xc5,0x57,0x4d,0xf9,0x35,0x8a,0xc1,0xb5,0x78,0x5d,0xc3,0x3e,0xd5,0xfd,0xb5,0x50,0xee,0x44,0x24,0xa2,0x55,0xb6,0xd8,0x3d,0x5d,0x75,0x2a,0x26,0x37,0xe7,0x85,0xb3 +.byte 0xff,0x70,0x5d,0x99,0x8d,0x99,0xba,0x9d,0x09,0x97,0xf2,0x67,0xe5,0xa3,0x86,0x06,0x21,0xb4,0x03,0x9b,0x63,0x76,0x1f,0xf8,0x09,0xd8,0x4e,0x22,0xcb,0x48,0xcf,0x79,0x72,0xc9,0x3f,0x84,0x5e,0xb8,0x39,0x87,0x27,0x92,0x1e,0x59,0xdf,0xc2,0xe6,0xd2,0xc4,0x5f,0xad,0x6e,0x9c,0xa4,0xec,0xd5,0x7d,0xf6,0x2b,0x9b,0x93,0x56,0xcd,0xa3 +.byte 0xc5,0xfa,0x82,0x39,0x46,0x29,0x57,0x43,0x08,0xe2,0xe1,0x3e,0x80,0x3b,0x8e,0x08,0xe5,0xc5,0xfe,0x05,0x17,0xaf,0xe0,0xf0,0xb7,0x5b,0x34,0x33,0x59,0xfa,0x93,0xbf,0x6a,0xb3,0x6c,0xbc,0x99,0x62,0x34,0x2c,0xf2,0x3b,0x62,0xf2,0x1c,0x48,0x07,0xc9,0x60,0x03,0xa5,0xe1,0x66,0x8d,0x84,0x36,0xc7,0xf9,0xc6,0x3b,0xa9,0xee,0x0f,0x48 +.byte 0xff,0xff,0xad,0x95,0x21,0xb5,0x12,0x63,0x7d,0x0f,0x0d,0x09,0x63,0x51,0x64,0x69,0xb4,0x95,0xd3,0x25,0xf0,0x3b,0x6d,0xc4,0xdd,0x8c,0x80,0x0d,0x3b,0xd2,0x4b,0xe0,0x67,0xcb,0xcd,0x7d,0x2e,0xbd,0x61,0x4b,0x0c,0x32,0x1f,0xfd,0xd2,0x31,0xed,0xa8,0xaa,0x98,0xf4,0x85,0x21,0xbc,0x08,0x14,0x2f,0xbb,0xbf,0x01,0xba,0x24,0x5e,0x5c +.byte 0xf3,0x72,0xed,0x05,0xec,0xf3,0xd1,0x9b,0xb0,0x63,0x8a,0x14,0xd1,0x9e,0xae,0x9b,0xce,0x4d,0x6c,0xb6,0x7a,0x78,0x9e,0x1d,0xcd,0x1e,0x50,0x66,0x26,0x70,0x74,0x2b,0x43,0x6a,0xc7,0xd7,0xe9,0xa2,0xcf,0xf3,0x09,0x9a,0x81,0x80,0x04,0xb8,0x5a,0x4f,0x2e,0x10,0x35,0xb2,0xb0,0xc6,0x40,0x97,0xa5,0x6a,0x24,0x5a,0x6b,0x97,0xc7,0xc0 +.byte 0x24,0x50,0x8d,0x65,0x21,0x25,0xce,0xb9,0x19,0xfc,0x40,0x08,0xcf,0xfd,0x1c,0xc4,0x30,0xd4,0x06,0x70,0xac,0x8a,0x3c,0x3f,0xfc,0xc3,0xeb,0xdd,0x43,0x56,0x4a,0xf6,0x50,0x92,0x9d,0xce,0x9c,0xea,0x15,0xdd,0x7c,0x5e,0x40,0xf5,0x7e,0x41,0x70,0xdd,0xc7,0x62,0x21,0x5a,0x20,0xc8,0x71,0x10,0x97,0xd5,0x12,0xfa,0x31,0x96,0xfb,0x38 +.byte 0x17,0x66,0x73,0x32,0x7a,0x93,0xf0,0x82,0xb9,0xf1,0x24,0xc5,0x64,0x0b,0xa9,0x24,0x4a,0x47,0xac,0xfb,0xf1,0x55,0xd7,0xb3,0x9a,0x64,0x63,0x0b,0x2e,0x13,0x9e,0x1a,0xee,0x21,0xd0,0x70,0x5c,0x0c,0x25,0xe7,0x38,0x23,0xd7,0x2f,0x6a,0x20,0x59,0xef,0x70,0xb2,0x8e,0xb4,0x15,0xee,0x6f,0x70,0xd0,0x75,0x19,0x9d,0x42,0xa7,0x17,0xad +.byte 0x99,0xaa,0x0d,0xa3,0x87,0x3d,0xf1,0x7b,0x0e,0xfa,0x62,0x9a,0x20,0x64,0x17,0x64,0x07,0xc2,0x84,0x13,0xb2,0x59,0x81,0x66,0x45,0xab,0x47,0x6d,0xfc,0x7b,0x60,0x05,0xac,0x30,0xb2,0x86,0x7e,0x34,0x6b,0xaf,0x37,0x00,0xa6,0x47,0x4c,0xb9,0x10,0xbd,0x9e,0xce,0x47,0x9e,0xc2,0x0e,0xfd,0x47,0xfa,0xd8,0x08,0xd1,0xc2,0xaa,0x6d,0x8c +.byte 0x91,0x2c,0x18,0x32,0x52,0x84,0x47,0x71,0x3b,0xc9,0xa1,0xf5,0xfc,0x90,0xb8,0x79,0xbf,0xe5,0x59,0x1b,0x91,0x22,0xcb,0xd3,0x87,0x7e,0xd4,0xb5,0x33,0xb2,0xfc,0x7c,0xee,0x22,0xfb,0xe8,0xb0,0x3c,0xa7,0x8b,0x05,0xd7,0x7f,0x17,0x52,0xbe,0xb6,0xe0,0x1e,0x47,0xce,0xfd,0x79,0xdf,0x16,0x5f,0x01,0x70,0x0c,0x47,0x5a,0x01,0x96,0x08 +.byte 0x3e,0x9b,0xc4,0xb2,0x58,0x73,0xc4,0x38,0xd6,0xf2,0x1b,0x0a,0x2c,0xb9,0x2a,0x96,0xb5,0x89,0x2d,0x33,0xdf,0xa4,0x5f,0x24,0x1b,0x79,0x0e,0xb6,0x9f,0xec,0x46,0xd3,0x27,0x4a,0xc1,0x26,0x94,0x95,0x41,0xd5,0xb3,0x84,0x74,0x62,0x47,0xc5,0x4d,0xb4,0xe2,0xe7,0xdb,0xc3,0xc3,0x7b,0x33,0x2a,0xbf,0x69,0xf6,0x5e,0xdc,0xfe,0xa4,0x81 +.byte 0x91,0xf3,0xa8,0x26,0x82,0x44,0x37,0xea,0xe1,0x20,0xff,0x52,0x33,0x5b,0x0b,0x6f,0xf8,0x33,0x4e,0x02,0x4d,0x38,0x93,0xcd,0xc0,0xfc,0x73,0x1a,0xf9,0xf6,0x9f,0x53,0xfc,0xf7,0xe2,0x4b,0x25,0xdd,0xa7,0x4d,0x1e,0x5c,0x17,0xc3,0xa0,0x41,0x1d,0x67,0x45,0xff,0xcb,0x41,0x49,0xc4,0x18,0x68,0x7e,0x7f,0xb6,0x6f,0xdb,0xbc,0x73,0x2f +.byte 0xc7,0x9a,0x46,0x8c,0x0b,0x57,0xa3,0xd3,0x0a,0x34,0xb7,0x27,0x67,0xbb,0xe1,0x64,0xa7,0x7e,0x79,0xac,0x4f,0x09,0x54,0x9b,0x43,0x5e,0x9a,0x33,0x02,0x45,0xdc,0x85,0x0b,0x59,0x8d,0x78,0xe8,0xd8,0xb5,0xd3,0x31,0x9d,0x2a,0x60,0x5b,0x91,0xed,0xf1,0xf1,0x37,0x3f,0xdb,0xda,0xd6,0xd1,0x8f,0x14,0x7e,0xe1,0xfc,0x92,0x60,0xa5,0x33 +.byte 0x86,0xef,0x29,0xbf,0x94,0x84,0x2b,0x24,0x20,0xb4,0x5e,0x23,0x34,0x08,0x63,0xc9,0xe6,0x80,0xa0,0x27,0x27,0x2f,0xab,0xc0,0x52,0x44,0x66,0x29,0x32,0x2e,0x91,0x96,0x02,0x1c,0x3b,0xb4,0x6e,0x33,0x49,0x5b,0x60,0x6f,0x14,0x93,0x65,0x0d,0x97,0x01,0xfb,0xf9,0x42,0x74,0xb6,0x21,0xf7,0xc2,0x5d,0xbf,0x91,0x2b,0xf5,0xb1,0x4e,0xe2 +.byte 0xd6,0x24,0x57,0x41,0x7a,0xcb,0xdd,0xb6,0x96,0x8b,0xfc,0x42,0x19,0x21,0x7f,0x41,0x32,0x3d,0x69,0x9b,0xee,0xda,0x97,0x45,0x26,0x71,0x0d,0x12,0xf0,0x20,0x7f,0x44,0x0f,0x4c,0xd2,0xd3,0x34,0x93,0xc7,0xe5,0xe7,0x83,0x62,0x13,0x0b,0x7d,0xc6,0xe4,0xd2,0xae,0x53,0x2e,0xd1,0x18,0x81,0xd0,0x81,0xf6,0xc0,0x98,0xaf,0x1d,0xb2,0x8a +.byte 0xcb,0xd3,0xde,0x1d,0x53,0x71,0x92,0x0e,0x4b,0x8c,0x7c,0x8e,0x65,0xf6,0xe2,0xc2,0x5a,0x4f,0x8c,0x59,0x0f,0x35,0x5e,0xe4,0x43,0x50,0xab,0xb7,0xdd,0xfc,0x66,0xf9,0xb1,0x9b,0x6b,0x1b,0xaf,0x2e,0x85,0xe6,0x3e,0x4c,0xa2,0xd4,0x55,0x47,0xb9,0x66,0x66,0x7b,0xa3,0xb2,0xd5,0x8a,0x8e,0x88,0x0e,0xfb,0x4e,0xad,0xf4,0x39,0xd2,0xd6 +.byte 0x39,0xef,0xe0,0xee,0x0f,0xf3,0x94,0x47,0xa7,0x32,0x24,0x9a,0xb0,0x82,0x08,0x67,0x00,0x3f,0xe6,0x95,0x76,0x84,0x0a,0x5c,0xb7,0x74,0xc1,0x64,0x5e,0x7c,0xba,0x0b,0x2e,0x6f,0x26,0xc3,0x20,0x2e,0x95,0xc1,0xf0,0x8c,0x55,0x4a,0x45,0x26,0xe6,0xf3,0x55,0x78,0xbd,0xd4,0xdb,0x07,0xbd,0xff,0x61,0x51,0xde,0x7f,0xdb,0x56,0x73,0x6b +.byte 0x9c,0xa4,0xb0,0x72,0xa7,0xd0,0x93,0x4d,0x1d,0x3a,0x92,0x78,0xde,0x77,0x65,0xe8,0x07,0x41,0x92,0xc1,0xbb,0x69,0x79,0x20,0x43,0xab,0x21,0x2e,0x6d,0xdf,0x43,0xeb,0x73,0x49,0x12,0x1f,0x53,0x75,0x01,0xed,0xce,0xf4,0x05,0x05,0x2b,0xc7,0x2a,0x65,0x29,0xe8,0xcf,0x5b,0xf0,0xc1,0x5b,0xd8,0xa8,0xac,0xbb,0xe3,0xac,0x29,0x0a,0x90 +.byte 0x79,0x2f,0x5b,0x92,0x14,0xf2,0xc7,0x2d,0xe5,0x33,0x6e,0x5e,0x31,0xe2,0xab,0xdf,0x21,0x71,0x4a,0x44,0xaa,0xc6,0xe9,0xb8,0x51,0x1d,0xe2,0xf3,0x07,0x19,0xa1,0x98,0x9e,0x8a,0xed,0xe4,0x9e,0x52,0x16,0x1f,0x2f,0xd3,0x4c,0x97,0x1e,0x38,0x49,0x84,0x2e,0x45,0xb5,0x4b,0x4f,0xfe,0xdb,0x25,0x3e,0xa9,0x6e,0x7d,0x60,0x3b,0xa7,0x7e +.byte 0xda,0x32,0x1a,0xd6,0x04,0xbe,0x0c,0x92,0x4e,0x6d,0x85,0xf9,0x9c,0x26,0x9a,0x88,0xf5,0x50,0x95,0x7b,0x9e,0x43,0x07,0x97,0xd4,0xdb,0xa0,0x6e,0x30,0x5d,0x44,0xa9,0x41,0xc2,0xdf,0xdf,0x37,0x35,0xc4,0x85,0x83,0x08,0xea,0x22,0xfa,0xae,0xdd,0x95,0xe5,0x35,0x47,0x23,0x86,0x27,0xfa,0x71,0x88,0xa0,0x12,0x00,0xe0,0xa7,0xd1,0x1b +.byte 0x5e,0x78,0x6f,0x38,0x30,0xa9,0x80,0x75,0xd7,0x61,0xcc,0xfd,0x33,0xd2,0xb8,0xf8,0xd7,0x12,0xf5,0x03,0xf9,0x53,0x6d,0x3b,0x6b,0xff,0x24,0x0a,0x3b,0xe8,0x2a,0xe9,0xae,0xb7,0xc3,0xe3,0x0f,0x26,0x71,0x55,0xc5,0x03,0x60,0xf4,0x47,0x01,0xa3,0x69,0xb2,0x98,0x75,0x5b,0x90,0x4a,0xf9,0x61,0x49,0xd6,0xc4,0xdb,0xab,0x04,0x0c,0x47 +.byte 0x1e,0x31,0x75,0xfa,0xa2,0xc5,0xfa,0x66,0x0c,0x4a,0x93,0xa0,0xea,0x56,0xf9,0x49,0xd4,0xc7,0xcc,0x2c,0xe5,0xdc,0xab,0x61,0x8e,0x0c,0xf3,0x2f,0xb5,0x9f,0x36,0xa1,0x05,0xab,0xb6,0xbc,0x4a,0x6d,0x97,0xe7,0x19,0xe5,0xfe,0x92,0xa5,0x94,0xd5,0xc0,0xf5,0x31,0xf6,0x8a,0xf7,0x24,0x62,0xdd,0x56,0x12,0x84,0xf5,0xc6,0xa0,0x37,0xa3 +.byte 0xfc,0xbd,0x16,0x2a,0xa6,0x36,0x8e,0xd4,0x29,0xfe,0xc4,0xc5,0xcb,0xdd,0xdd,0x8b,0x7e,0xa6,0x9d,0x08,0x28,0x10,0x6b,0xff,0xd7,0x79,0x48,0x35,0x2f,0xbe,0x34,0x9a,0xfb,0xd0,0x7d,0x5c,0xad,0xf0,0xde,0x96,0xea,0x2d,0xc5,0x8b,0xa9,0x7a,0x8b,0xbe,0x97,0xde,0x7a,0x95,0xc7,0x95,0xd9,0x86,0xde,0x3c,0x8d,0x15,0x8e,0x45,0x69,0x27 +.byte 0xd4,0x27,0xa8,0xe3,0xa9,0x1e,0xa0,0x95,0x74,0xf1,0x8b,0xbe,0x3b,0xff,0xa3,0xf6,0x23,0x78,0xd9,0xbd,0xc2,0x44,0x3a,0x93,0xb5,0xa6,0x87,0x7c,0x65,0xd1,0xd8,0xd5,0x43,0x2a,0xb2,0xc8,0x65,0x86,0x83,0x06,0xf7,0x33,0x88,0x3b,0xc0,0x2c,0xb3,0x3b,0x23,0xa3,0x67,0x15,0x49,0x09,0x02,0xbb,0x11,0x08,0xe3,0x37,0x9a,0x9b,0x67,0x8e +.byte 0x63,0xc3,0x8b,0xff,0x21,0xa6,0xbe,0x3b,0xa6,0x57,0xc1,0x56,0x2a,0x02,0xdb,0x24,0x50,0x4a,0x4f,0x60,0x49,0x03,0xcf,0xba,0x55,0x1c,0x64,0xfe,0x0c,0x58,0xb4,0xb0,0x89,0x91,0xd5,0xbc,0xbc,0x85,0xe6,0x96,0x32,0x89,0x1f,0xa0,0x48,0xd1,0x6e,0xa7,0x03,0x86,0x8a,0xf2,0x5f,0xc3,0x5a,0x57,0x8a,0xa3,0x4a,0x61,0x90,0x18,0xb2,0x0d +.byte 0xc7,0x94,0xb9,0x3e,0x40,0x8b,0x1d,0x54,0xd0,0x4c,0xe7,0x2a,0xd5,0x85,0xa7,0x93,0x07,0x10,0x58,0xc4,0x8a,0x18,0x0a,0x49,0x30,0x87,0x93,0x0e,0xcf,0xc7,0x95,0x9f,0xd1,0x3f,0x9b,0x06,0xe3,0xf9,0x4f,0x16,0x58,0x04,0xb4,0xf0,0xf0,0xf3,0x3a,0xab,0x4a,0x35,0xf1,0xec,0x23,0x15,0x0c,0x24,0xba,0x90,0xdc,0xd1,0xfe,0x47,0xca,0xb2 +.byte 0x95,0x33,0x30,0x45,0xba,0x18,0x15,0xec,0x58,0x36,0x02,0xdf,0x28,0x09,0x74,0x4b,0x09,0x01,0x24,0x0f,0x00,0x7b,0xb3,0x65,0x45,0x42,0x63,0x15,0xf8,0x50,0x8b,0x4f,0x28,0x73,0x03,0x3a,0x31,0xe5,0x0d,0x56,0x8f,0x6b,0x4b,0x9e,0xda,0x71,0xee,0x68,0xba,0x85,0x81,0x3d,0x5d,0x74,0x5e,0xda,0x60,0x87,0xf4,0x5a,0x38,0xad,0xc5,0x3f +.byte 0xb5,0x15,0x02,0x59,0x1c,0xd2,0x93,0x66,0x54,0x65,0xf1,0xe7,0x9b,0xf0,0x30,0x2d,0x9e,0xba,0xc5,0x86,0xf4,0xf6,0xc7,0x92,0x73,0x12,0x3b,0x28,0x21,0x1b,0x3d,0x84,0xc0,0x1a,0x7d,0x35,0x8b,0xd4,0x35,0x39,0x35,0xa6,0x51,0xd9,0x19,0x8b,0x92,0xa3,0xea,0x8c,0x7e,0x25,0x05,0x1f,0x1d,0x8f,0x4d,0xba,0xdf,0x20,0x8c,0x8d,0xe2,0xac +.byte 0xdd,0x3d,0xf1,0x04,0x3f,0x77,0x4b,0x8f,0x39,0x7d,0x01,0xb7,0x71,0x4b,0x7b,0xe1,0x6f,0xd4,0x28,0x1a,0x57,0x96,0x4d,0xe2,0x84,0xf6,0x64,0x10,0xbb,0x0f,0xbc,0xe0,0x19,0xed,0x92,0x9e,0x60,0x15,0x78,0xd1,0x30,0xc0,0x53,0x4b,0x94,0xca,0x4b,0x5a,0x44,0x8b,0xa9,0xda,0x2f,0x08,0x70,0x94,0xe4,0x54,0xe1,0x28,0x6e,0xdd,0x34,0x56 +.byte 0x54,0xb0,0xd4,0x87,0x00,0x72,0x1e,0x46,0x10,0x3a,0x27,0x5d,0xc6,0xb5,0x72,0x20,0x2b,0xbe,0x17,0x01,0xbb,0x04,0x11,0x16,0x7d,0xbf,0x91,0xd3,0x7b,0x44,0x58,0x13,0x2a,0x9c,0xda,0x9d,0x26,0x46,0xf5,0x5f,0x51,0xef,0x6c,0xf6,0x36,0xdb,0xb7,0x21,0xde,0xdb,0x87,0xa0,0xd8,0x60,0x24,0x86,0x6d,0x64,0x85,0x9e,0x94,0xd9,0x21,0x0d +.byte 0xed,0xda,0x33,0xea,0x3c,0xdf,0x74,0xe3,0xa5,0xc7,0xc7,0x9e,0xe5,0xb1,0x29,0xdf,0xfa,0x20,0x25,0xcd,0x13,0x08,0xee,0xe6,0xba,0xf1,0x62,0x39,0xcf,0xe3,0x29,0xb8,0xaa,0x65,0x43,0x8a,0x48,0xb5,0xb5,0x70,0x35,0x66,0x42,0xf4,0x32,0x70,0x0b,0x0c,0xa7,0x46,0x79,0xdf,0xb2,0x80,0x13,0x72,0x7a,0xeb,0xf9,0x52,0xcb,0xb8,0x9f,0x4b +.byte 0x4f,0x29,0x2b,0xb3,0x94,0x02,0x0a,0xe1,0x20,0xe5,0x91,0x15,0x6a,0xa1,0x0c,0x71,0x96,0x77,0x01,0x80,0xf7,0x51,0x0b,0xaf,0x54,0x9b,0x3c,0x7b,0x91,0xd2,0xbd,0xaf,0x13,0xa5,0x32,0x17,0x7c,0xca,0xd0,0x22,0xd5,0xe5,0x83,0x44,0x24,0x5c,0xcc,0x24,0x31,0xcd,0x81,0x4e,0x96,0xcd,0x60,0x9f,0x7a,0xe7,0x2e,0x89,0x16,0xd5,0x66,0x6b +.byte 0xac,0x31,0x11,0x7c,0x76,0xc6,0xde,0xbe,0x46,0x55,0x20,0xdf,0x9d,0x2c,0x33,0xa5,0x80,0x76,0xb1,0xc9,0x1c,0x84,0x17,0x4d,0x15,0xe6,0x6d,0xce,0xed,0xea,0xc7,0xe6,0xff,0x01,0x10,0x60,0x26,0xf7,0x63,0x5f,0x91,0x89,0x7e,0xc1,0x7c,0x76,0x67,0x7b,0x7e,0xfa,0x28,0xa0,0xa7,0x82,0x1b,0x28,0x82,0x6a,0x4f,0x78,0x61,0x48,0xbf,0x13 +.byte 0x0b,0x71,0x0c,0xad,0xee,0xd7,0xf8,0xcc,0x0f,0x77,0x74,0x7d,0x2b,0x8a,0x09,0xd8,0x47,0xa0,0xfc,0x45,0x40,0x24,0xf3,0xce,0xdb,0x81,0xa1,0x50,0x9e,0x0a,0xd0,0x58,0xf7,0xaf,0xf1,0x09,0x12,0xa8,0x24,0xb2,0x34,0x99,0x67,0x17,0x53,0x1f,0x9d,0x09,0x7b,0xcb,0x83,0x6e,0x6a,0x0b,0xbf,0x8f,0x6e,0x3d,0xdb,0x29,0xe5,0xd0,0x06,0xdb +.byte 0xb8,0xf2,0xf3,0x43,0x4e,0xa7,0xf3,0x73,0x93,0xe8,0xab,0x2f,0xc8,0x75,0xce,0x62,0xda,0x74,0x39,0x57,0xe4,0xe4,0xb1,0x41,0x8f,0x9d,0xda,0x43,0xb4,0x2c,0x4b,0xd5,0x1c,0x10,0xf0,0x29,0x6b,0x94,0x15,0x04,0x3c,0xd3,0x45,0x73,0x29,0xb3,0x60,0x87,0x93,0xdb,0xbf,0x60,0x4e,0xdf,0x4d,0xbb,0xde,0xb2,0x57,0x67,0x14,0x0d,0x0b,0x60 +.byte 0x63,0xd5,0xc6,0x81,0x82,0xd6,0x0c,0xe6,0x4c,0x43,0x13,0x02,0x74,0x56,0x20,0x6b,0x21,0x28,0xe6,0xe2,0x0b,0xc1,0x7a,0xc3,0x08,0x60,0x82,0xe0,0x4f,0xbf,0x1e,0x3f,0xf0,0xa9,0xb2,0x2e,0x0c,0xbf,0xd6,0x03,0x1d,0x0d,0xd6,0x1c,0x36,0xb5,0xb2,0x14,0x56,0x21,0xc2,0xe0,0x1e,0xff,0xee,0x8a,0x70,0xae,0x3f,0x1e,0xe5,0xac,0x05,0x46 +.byte 0x6b,0x81,0x32,0xce,0x50,0xbb,0x82,0x66,0x32,0x93,0x46,0xf7,0xee,0x77,0x1c,0x9a,0x2f,0x31,0x60,0xa2,0x09,0x7c,0x14,0xd9,0x81,0xe9,0x19,0x27,0x31,0x5e,0xa0,0x98,0x71,0x42,0x2f,0x30,0x71,0xd6,0x31,0x94,0xe0,0x61,0xed,0x50,0x66,0xfa,0xba,0x12,0x5e,0xc6,0xc8,0x67,0xe5,0x8e,0xfd,0x34,0xa9,0xeb,0xde,0x25,0x43,0xbf,0xe7,0xb5 +.byte 0x16,0xf5,0x62,0x66,0x5d,0x0b,0x13,0x9a,0xd4,0x8c,0x2b,0x8f,0xe6,0x91,0x33,0xcb,0xa0,0x70,0x48,0x3e,0x22,0x7d,0xe4,0xf3,0x75,0xc9,0x49,0x82,0x50,0xc9,0x90,0x04,0x32,0xab,0x99,0x6e,0xf1,0xf0,0x0b,0x60,0x80,0x35,0x25,0x45,0x88,0xe9,0x82,0x06,0xe1,0xbb,0x85,0x11,0x40,0xf8,0x0e,0xbd,0x19,0x7a,0xdd,0x78,0xf9,0xc2,0x46,0xe4 +.byte 0xb5,0x27,0xfb,0xb6,0xba,0xbc,0x7d,0xb8,0x27,0xe7,0xbf,0xfe,0x8e,0xfe,0x7e,0x83,0x63,0x43,0x92,0x26,0xf0,0xbb,0xde,0xb6,0x93,0x4f,0x55,0x0c,0x07,0x99,0x3c,0x98,0xa1,0x8c,0x73,0xc1,0x4c,0x9a,0x09,0xa8,0xea,0x16,0x0b,0x49,0x2a,0x43,0xee,0x90,0x61,0x6f,0x09,0x1b,0xc3,0x2d,0x62,0x4b,0xfc,0x90,0xa1,0x8e,0x84,0x2e,0x90,0x8d +.byte 0x5f,0x80,0xff,0x6a,0x3c,0x61,0x0f,0xf2,0xac,0x70,0x20,0xc1,0xf2,0x85,0xcf,0x94,0xc8,0x94,0xe7,0xa0,0x04,0xdf,0xaf,0xef,0x26,0xd2,0xbc,0x07,0x70,0xc1,0x48,0xd6,0x87,0xd6,0xbe,0xea,0x95,0x6a,0xce,0xa2,0x48,0xac,0x46,0x46,0xb1,0x74,0x70,0x96,0x6c,0x26,0x58,0x75,0x9d,0x84,0xd7,0xd9,0x17,0x9a,0x46,0xe9,0xd7,0x3d,0xde,0xfd +.byte 0x7e,0xf4,0xd8,0x7e,0xf8,0x8f,0x1c,0xb5,0xfb,0xe9,0xc4,0xca,0xba,0x52,0x5f,0x17,0xee,0x75,0x7d,0x1d,0x50,0x16,0x9f,0x16,0x1e,0x00,0x8b,0xc1,0x2f,0xab,0x73,0x65,0x88,0x7b,0x80,0xa6,0x71,0xb7,0xfb,0xb0,0xda,0xd1,0x96,0x18,0x5c,0x48,0x6e,0x18,0x45,0x59,0x45,0xef,0x5c,0x65,0x35,0x99,0x5e,0xb9,0xd4,0x1a,0x07,0x7d,0x1e,0xa6 +.byte 0x69,0x42,0x9d,0xfa,0xec,0x02,0xdc,0xc4,0x19,0x6b,0x9c,0xb1,0x5e,0xa3,0xb4,0x6d,0xb4,0xa6,0x25,0xa8,0xe4,0x3f,0x3d,0x6e,0x2c,0x95,0xf7,0xcd,0xa5,0x4e,0x32,0xca,0x7e,0xe0,0x7b,0x11,0xf9,0x0a,0xe1,0x61,0x41,0x60,0xec,0xb3,0xb1,0x92,0x89,0x33,0x17,0xe9,0xaf,0x70,0x7f,0x1c,0x07,0xb5,0x24,0x3a,0x37,0x84,0x38,0xf5,0xb6,0x11 +.byte 0xfc,0x0c,0x12,0xc1,0xfc,0xa9,0x82,0x67,0x4d,0x17,0xe8,0xea,0xd0,0x62,0x17,0xb2,0x9c,0x59,0x01,0x87,0xfb,0x54,0x8e,0xa7,0xa5,0x85,0xa9,0x8a,0xec,0xfe,0x29,0xc0,0x73,0xc6,0xa0,0xbf,0x66,0x9a,0xc5,0xf8,0xee,0xa4,0xcb,0x09,0x44,0x74,0xfe,0x32,0xf5,0x42,0xea,0xf0,0xa6,0xec,0x74,0xea,0x14,0x5c,0x43,0x51,0xfa,0x3a,0x48,0x1e +.byte 0xa0,0x2e,0x59,0x2e,0xdb,0x3a,0x19,0xfe,0x1f,0x95,0x25,0xee,0x27,0x2b,0x99,0xb4,0xe1,0xd0,0xe6,0x33,0x91,0xa1,0xaf,0x30,0xa0,0x89,0x00,0x3c,0x13,0x31,0x18,0x70,0x90,0x42,0x55,0x0a,0xc9,0xc5,0x0c,0x43,0xa5,0xee,0xd6,0x90,0x07,0xae,0xc4,0x8c,0xdc,0xe4,0x07,0xbb,0x61,0x70,0xd1,0x10,0xe4,0x68,0x96,0x70,0x78,0xab,0xe9,0x3a +.byte 0x6e,0xc7,0x75,0x93,0xa0,0xba,0xff,0x6a,0x2d,0x57,0xaa,0x93,0x09,0xc3,0x6b,0x81,0xf3,0xde,0xc2,0xee,0xac,0x86,0x0a,0xfb,0xad,0xdb,0x6f,0x2a,0xa0,0x15,0x7b,0x96,0x77,0x38,0xf8,0x86,0x51,0x33,0x7a,0x6f,0x1c,0xf8,0xd5,0x15,0xcd,0x76,0x7f,0x37,0x68,0x82,0xdf,0xab,0xc3,0xdb,0xbe,0xeb,0x2b,0xa8,0x34,0x72,0x20,0x34,0xfb,0x12 +.byte 0x64,0x17,0x05,0x64,0xc0,0xa1,0xca,0xd3,0xac,0x27,0xc2,0x68,0x28,0x40,0x42,0xe2,0x0a,0xdd,0xd7,0xd6,0xf6,0x92,0x95,0x3c,0x10,0x17,0x4e,0xef,0x75,0xae,0x98,0x2d,0x10,0xc8,0xa8,0xac,0x15,0xf7,0x5b,0x81,0xc1,0xdf,0x5e,0xbe,0x88,0x49,0xe3,0xd1,0x88,0x1c,0xcb,0xce,0x20,0x01,0x12,0x60,0x57,0x0b,0xf6,0x32,0x57,0xaf,0x59,0xef +.byte 0xc9,0xe7,0xbf,0x62,0xf3,0xb6,0xe6,0x5c,0xee,0x36,0x7e,0x11,0x90,0xd1,0xeb,0xfa,0x62,0x0b,0xc6,0xf3,0x1a,0xd5,0x8b,0x95,0xec,0xb4,0x38,0xfe,0x45,0xb0,0xb5,0xff,0x84,0x0a,0x27,0x3a,0xa2,0x5a,0x2a,0xc9,0xa4,0xc0,0x11,0xc6,0x61,0x13,0xb7,0x53,0xa3,0x47,0x45,0x6d,0xc6,0xa9,0x00,0xd1,0x40,0xf4,0x77,0xac,0xb3,0xd3,0x26,0x99 +.byte 0xf1,0x36,0x59,0x28,0xb4,0xd0,0xdd,0x0e,0xed,0x53,0x33,0x45,0x71,0x9c,0x5c,0x11,0x27,0x2c,0x2f,0x10,0x9e,0x5b,0x8a,0x5b,0xc5,0x1f,0x36,0xc9,0x2a,0xba,0xc7,0xa5,0x31,0xd7,0x9f,0x2b,0x0a,0x09,0xcb,0x7c,0x4f,0xa2,0xdc,0xc5,0x64,0x0d,0xe6,0xfe,0xb0,0x9d,0x3b,0xf0,0xa7,0x19,0x8c,0x84,0x21,0x6b,0x9e,0x1c,0xb5,0x7b,0x66,0x77 +.byte 0xd0,0x85,0xb4,0x22,0x93,0x6e,0x84,0x29,0x9b,0x60,0x90,0x37,0x9d,0x8c,0x94,0x95,0x95,0x3b,0xf1,0x2d,0x56,0x5b,0x53,0x60,0x2d,0xe5,0x7f,0x80,0x71,0x56,0xa7,0x6e,0x66,0x76,0x1f,0xaa,0x0d,0xba,0xfb,0x0e,0xcf,0x20,0x68,0x74,0x2b,0x99,0x13,0xe1,0xa8,0x33,0xc9,0xf6,0xbc,0xd3,0xf4,0x46,0x01,0x02,0x85,0x27,0xf4,0x20,0x97,0xa3 +.byte 0xba,0xbc,0x47,0x30,0x48,0xed,0x60,0xe6,0xca,0xbf,0x76,0x8c,0x2c,0x6a,0x43,0x32,0xfd,0x90,0x04,0x95,0xc2,0x42,0xcb,0xca,0xc4,0x33,0xe1,0xd3,0x23,0x92,0xa1,0xde,0x09,0x38,0xce,0x00,0x93,0xb3,0xed,0x82,0x8e,0xfb,0xce,0x4c,0x9a,0x10,0x6e,0xce,0x4a,0x37,0x05,0x75,0x37,0x58,0xc3,0x8e,0x57,0x50,0xa0,0x7d,0x80,0x2d,0x51,0xea +.byte 0x08,0xcd,0x1b,0xd2,0x81,0x85,0x19,0xc1,0xe8,0xce,0x31,0x18,0xcf,0x54,0x37,0x96,0x77,0x3d,0x64,0xfb,0xc2,0xa9,0xdb,0xb8,0x37,0x03,0x83,0x34,0x3c,0x25,0x6a,0x22,0x33,0xfa,0x27,0x70,0xc7,0x0a,0x27,0x12,0x1e,0xb3,0xd0,0x59,0x6f,0xa3,0xc5,0x73,0x95,0x4c,0x1f,0xf1,0x3c,0xb3,0xc2,0xa2,0xc6,0x45,0x17,0x53,0xa8,0xfc,0x00,0xff +.byte 0x77,0x40,0x28,0xd2,0x53,0x90,0x92,0xe9,0x86,0x6c,0xa5,0x40,0xce,0xbc,0x79,0x6f,0x8f,0x12,0xef,0x1b,0x38,0x1f,0xb3,0x24,0xf0,0x75,0x17,0x20,0x9e,0x03,0x9c,0x2b,0x51,0x57,0x93,0x44,0xce,0x74,0xc9,0x12,0xe7,0xcb,0x2f,0x5e,0x1b,0x95,0xf2,0x4d,0x2e,0x51,0x8d,0x52,0xd5,0x21,0xe3,0x1b,0x33,0xe7,0xf2,0x18,0x61,0xa2,0x53,0xdb +.byte 0x73,0xaa,0x6a,0x6c,0xf9,0xf4,0xef,0x3d,0x40,0xa3,0x00,0x80,0x82,0xed,0xe6,0x66,0xd1,0xd6,0xe9,0x93,0xd8,0x92,0xfa,0xdf,0xf9,0x9c,0x7a,0xfb,0x2b,0xc7,0xa7,0x73,0x67,0x2b,0xed,0x76,0xb1,0x52,0xaa,0xcf,0x34,0x84,0xa1,0x6d,0x56,0x85,0xef,0xcb,0xbc,0xa3,0xc6,0xf3,0x5a,0x88,0x04,0xd5,0xd8,0xf1,0x7b,0xf8,0x11,0x6f,0xa0,0x44 +.byte 0xa5,0x0f,0x76,0xed,0xd7,0x98,0xe3,0xda,0xb8,0x1b,0xc7,0xe6,0x89,0x08,0x19,0x1f,0xf8,0xe3,0x32,0x32,0xa5,0x3c,0x71,0x9f,0x11,0xde,0x50,0x29,0xb0,0x54,0x7e,0x3b,0x5e,0xeb,0xf7,0xab,0xa8,0xa0,0x35,0x96,0xc7,0xc5,0xea,0x60,0xc0,0x37,0xca,0x61,0x55,0x96,0xac,0xb4,0xd0,0x29,0x9a,0x1a,0x3f,0x9e,0xf5,0xf5,0x3d,0xed,0xc5,0x7c +.byte 0x2c,0x9d,0x67,0xf8,0x4d,0x82,0x6e,0x2a,0x9a,0xfc,0x5f,0xdc,0x02,0xb0,0x3d,0xa5,0x1c,0x08,0x5d,0x4a,0xaa,0xd0,0x38,0xfb,0xbc,0xbb,0x7f,0x37,0xfb,0xec,0xc0,0x62,0x79,0xaa,0xde,0xfd,0x23,0x9c,0x4c,0x4a,0xe1,0x48,0x40,0x36,0xc0,0x0a,0x6f,0x43,0xb7,0xad,0x4c,0xf6,0x56,0xb5,0x44,0xf4,0x72,0xcd,0x13,0x10,0xea,0x0d,0x24,0xc1 +.byte 0xa9,0x36,0x3b,0x36,0xf2,0x6e,0xf9,0x0a,0x67,0xcd,0x02,0x67,0xb3,0x5c,0x63,0x3a,0x7c,0xc1,0x3b,0xf2,0x1d,0x3d,0xf1,0xff,0xbf,0xf7,0x97,0x9f,0x30,0x1f,0xaa,0xd8,0xdb,0x53,0x9b,0x0a,0xbd,0x38,0xd8,0xb6,0xf1,0x4a,0x78,0x1a,0xc2,0x46,0xd2,0x0c,0xa8,0xcd,0x7b,0x39,0xc7,0x42,0x55,0xc8,0x3e,0x02,0x1d,0xf4,0xad,0x55,0x01,0x6a +.byte 0x11,0x2d,0xfa,0x67,0x48,0xae,0x45,0x31,0x9b,0x09,0x7d,0xd9,0xdd,0xaf,0x5c,0xd5,0x40,0x51,0x2a,0xa1,0x0f,0xb3,0x6e,0xc2,0x94,0xfe,0xde,0x70,0xaf,0x6c,0xea,0x5f,0x7d,0x3c,0x72,0x85,0x86,0x24,0x20,0x0a,0x7a,0xe7,0x69,0x32,0x66,0x7d,0x34,0x13,0x60,0x62,0xc7,0x68,0x32,0xde,0x34,0x30,0x36,0xc8,0x8e,0xb7,0x13,0x66,0xf1,0xce +.byte 0x5f,0x7a,0x3a,0xfe,0x62,0xd6,0x72,0xb6,0x1b,0x80,0x43,0x8a,0x3e,0x13,0x15,0xe4,0x1c,0x7b,0x08,0x70,0x0b,0x6e,0xb3,0xfe,0x07,0x91,0x23,0x21,0x57,0x48,0xc6,0xa9,0xa3,0xa8,0xc7,0x19,0x89,0x8a,0x49,0x12,0x25,0x88,0xd2,0x11,0xa5,0xa8,0x9e,0x0e,0xa7,0x71,0xfe,0xaf,0x88,0xee,0xa7,0x1c,0x3b,0x27,0x27,0x7e,0x79,0x92,0xed,0x77 +.byte 0x74,0x65,0xbd,0x46,0x41,0x25,0xd9,0x8b,0x21,0x73,0x9f,0xaa,0x35,0xa0,0x22,0xb3,0xc8,0x71,0x28,0x72,0xd2,0xcb,0xf4,0x2a,0x06,0x0a,0x63,0x96,0x55,0x2e,0x83,0x0b,0xe8,0x07,0x99,0x9d,0x59,0xde,0xde,0x62,0xbd,0xb4,0x3e,0x70,0x15,0xed,0x95,0xa8,0x2f,0xb7,0xa2,0xb6,0x65,0x56,0x9d,0xe5,0x81,0xa0,0x05,0x5b,0xce,0x00,0xd4,0xb9 +.byte 0x28,0x5a,0xc1,0x9a,0x74,0xc6,0xd7,0x27,0xdd,0x7c,0xbe,0xe8,0x0d,0x47,0xfc,0x81,0x05,0x6b,0x4f,0x68,0xc7,0xcc,0x5d,0xd5,0x66,0x83,0x34,0x72,0x35,0xab,0x39,0x64,0x19,0x67,0xbd,0xff,0x15,0x44,0x20,0x18,0x2a,0xaf,0xbc,0x58,0x94,0xdb,0x18,0x50,0x55,0x11,0x6a,0xc4,0x1d,0xee,0xe2,0xe0,0x75,0x73,0xf1,0xa1,0x83,0xf4,0xcb,0x40 +.byte 0x96,0xf4,0x77,0x45,0x61,0x8b,0x1a,0x8c,0x0c,0xfc,0xd2,0x7e,0x0b,0x1e,0x18,0xd2,0x95,0xa5,0x4c,0x5b,0xd6,0x9d,0x40,0x8b,0xc0,0x51,0xe8,0x2d,0xe5,0x16,0xbf,0xd7,0x98,0x8a,0xa0,0x46,0x1f,0xc4,0xe9,0x12,0x31,0x40,0xc5,0x2d,0x59,0xf8,0x9b,0x5f,0xe3,0x3a,0x10,0xdf,0xda,0x72,0x9e,0xab,0x13,0x7b,0x8f,0xc8,0x52,0x9f,0x58,0x45 +.byte 0x7a,0xe6,0x3a,0xbb,0xdd,0x1d,0xc7,0x3b,0xc4,0x26,0xdc,0x99,0x29,0xf2,0x74,0x16,0x84,0xe9,0x8a,0x86,0xc0,0x1e,0x49,0x96,0x2f,0x5c,0x2a,0x49,0x71,0x88,0xe6,0x82,0xb2,0x18,0x88,0xc1,0x86,0xcb,0x26,0x3c,0xa5,0x50,0x31,0x22,0x9a,0x8f,0x45,0x2b,0xde,0xf0,0x86,0x8e,0x13,0x86,0xc4,0x4a,0x9b,0x35,0x27,0x93,0x0b,0x13,0xc8,0xef +.byte 0x96,0x74,0x97,0x85,0x09,0xc0,0xa0,0x32,0xfe,0xc3,0xe3,0x92,0x2e,0xe8,0x54,0xbd,0xc2,0x23,0xeb,0x4b,0x02,0xf5,0x5a,0x0b,0x0d,0x58,0x50,0x45,0xe7,0x01,0xd4,0x17,0x00,0xdb,0x0d,0xd4,0x2e,0xa0,0xde,0x38,0xf4,0xb1,0x1e,0xd0,0xf0,0xa3,0x6b,0x21,0x0c,0xbd,0xae,0x84,0x7e,0x42,0x36,0x4f,0x2e,0x46,0xae,0x23,0x91,0xb9,0x06,0xac +.byte 0x86,0x7f,0x29,0xca,0xfb,0xe9,0xde,0xdb,0x90,0xfe,0x6f,0xbc,0xdb,0x3c,0x48,0x3d,0x6e,0x06,0x68,0x49,0xbb,0x43,0x8d,0x9d,0xc4,0x5f,0x45,0xcb,0x77,0x28,0xe0,0x35,0xd1,0xb4,0x25,0xb2,0x45,0x6d,0xb4,0x89,0x53,0x26,0x33,0x98,0x83,0x45,0x9d,0xf5,0xad,0xf9,0xa7,0x59,0xb6,0x6e,0xa8,0x25,0xa5,0xef,0xee,0xf6,0x6a,0xd5,0x6c,0x60 +.byte 0x9a,0xea,0x78,0x9e,0xe4,0xa2,0x29,0x0b,0x70,0xb3,0x6e,0x3a,0xfd,0x07,0xc7,0x7f,0x1b,0x07,0xc7,0xca,0x1b,0xb8,0x08,0xe1,0xc9,0x94,0xb2,0x62,0x7c,0x04,0x96,0xa6,0xda,0x65,0x28,0xfd,0xf9,0x70,0x22,0xb7,0x21,0xd3,0xa6,0x38,0x0f,0x1e,0x88,0x7e,0x73,0xec,0x04,0x99,0x8b,0x23,0x91,0x13,0xe6,0x4f,0x74,0x81,0xcc,0x1f,0xdd,0xaf +.byte 0x58,0xc4,0x80,0x00,0x4d,0x1d,0xbe,0x84,0x7d,0xfe,0x85,0xe7,0x77,0x20,0x3c,0x65,0x4e,0x0e,0x2e,0x5d,0xc1,0xd9,0xcb,0xf7,0xbb,0xc8,0x8d,0xbf,0x16,0xa8,0x1e,0x63,0xf5,0x10,0x5e,0xa5,0x9c,0x63,0xb6,0x9a,0xeb,0x98,0xa8,0xb1,0x59,0x82,0x66,0x51,0xae,0x3c,0xfc,0xa8,0x11,0x92,0xf4,0x45,0x88,0x7c,0x03,0x6f,0xe6,0x87,0xe4,0xa8 +.byte 0x79,0xbf,0xb3,0x0d,0xd6,0x0b,0x8d,0xa3,0x16,0x2a,0xfb,0x79,0xb9,0xe7,0xdb,0xa7,0xdb,0x94,0xd3,0xe6,0x3a,0xdd,0xe9,0x5f,0x30,0x7d,0x68,0x90,0x35,0xfd,0x18,0x91,0x8e,0xc5,0x12,0xd6,0xf9,0x98,0xa0,0x5b,0xcd,0x81,0x76,0x84,0x08,0xd0,0xab,0x59,0x2d,0x3b,0x8a,0xf9,0xd9,0x95,0xde,0x8b,0xbb,0x92,0xef,0x35,0xc3,0x3e,0x46,0x73 +.byte 0xf3,0x3b,0x09,0xbf,0x22,0x2b,0x9c,0x0f,0x70,0x9a,0x16,0x0e,0x4b,0xa7,0x1a,0x96,0x98,0xb7,0x5a,0x40,0x06,0x81,0xf4,0xac,0xa6,0xe6,0xab,0xf2,0xda,0x87,0x18,0x61,0xcb,0xc1,0x67,0xbd,0x2f,0x6f,0x06,0x21,0xaf,0x73,0x98,0xe1,0x3f,0x7a,0x17,0x7f,0x44,0xcb,0x1d,0xdd,0x60,0xb3,0x2c,0x58,0x20,0x8a,0x04,0x74,0x56,0x9b,0x26,0x51 +.byte 0x61,0xb0,0x07,0x50,0x53,0x83,0x31,0x42,0x59,0xb3,0x33,0xfa,0xfe,0xbc,0xad,0x7f,0x99,0x9b,0x86,0xf1,0xaa,0x85,0xf1,0xbb,0xc0,0x0c,0x91,0x8d,0x1a,0x0f,0x8f,0x9f,0xfe,0x62,0x2b,0x35,0xae,0xcc,0x8c,0x09,0xe3,0x29,0x96,0xd1,0xbe,0x7f,0x25,0xd6,0x03,0xf0,0x4c,0x53,0xad,0x5b,0x56,0x66,0x68,0x9a,0xa3,0xc4,0x07,0x71,0xde,0x49 +.byte 0x82,0xbb,0xf7,0x9a,0x2b,0x96,0xcf,0x50,0xf6,0x00,0xf7,0x0b,0x27,0xdd,0xf5,0xf6,0xc5,0xc8,0xbd,0x2a,0xa2,0x06,0x2c,0x42,0x3f,0xa0,0xf8,0xcc,0x1d,0x64,0xcf,0xbc,0xb4,0xc4,0x63,0xde,0x6b,0xd3,0xb4,0x61,0xdf,0xbd,0x73,0x50,0x34,0xc3,0x20,0x45,0x06,0x73,0x9b,0xf0,0xfb,0xa6,0x2b,0xec,0x92,0x32,0xa9,0x1f,0x4f,0x1e,0x38,0x78 +.byte 0x2a,0xd2,0x7c,0x1d,0x89,0xf9,0x70,0xbc,0xef,0x09,0x77,0xd3,0x6a,0x56,0xa1,0x8b,0x4b,0x23,0x1b,0xb1,0x2f,0xec,0x84,0xe5,0x59,0xc5,0x20,0x23,0xbc,0x3f,0x0a,0x43,0x97,0x1c,0x5e,0xf7,0xee,0xfe,0x0b,0x2a,0x42,0x08,0x2a,0x39,0x91,0xce,0x8a,0x33,0x9f,0x63,0x77,0x6d,0xf6,0xf3,0x0e,0x1d,0xb3,0xfb,0xcf,0x2f,0x7f,0x95,0xc2,0x71 +.byte 0x1c,0xa0,0x0b,0xc6,0xb8,0xde,0x4d,0xd8,0xcc,0x4c,0x4f,0xaf,0x07,0x87,0x6d,0x3b,0xab,0x95,0xab,0xa1,0x6a,0x50,0x9f,0x7c,0x35,0xb6,0x65,0xdd,0xe3,0x06,0xe5,0xb3,0x42,0x5f,0x4d,0xe5,0x3e,0xfa,0x6c,0xdf,0x19,0x58,0xd1,0xf6,0xc6,0x94,0x1c,0xce,0x30,0x90,0xd3,0xeb,0xa3,0x7c,0xe5,0x3f,0x57,0x99,0x2e,0x22,0x0a,0x94,0x2f,0xfe +.byte 0x39,0x16,0xe6,0xfa,0xd0,0xb5,0xf9,0xb4,0x88,0x61,0xa4,0xa8,0xc3,0xb8,0xb7,0x52,0xaf,0x90,0xc1,0xe0,0x19,0x78,0x04,0x2b,0x71,0x04,0x03,0x2f,0x63,0xbe,0x40,0xf5,0x82,0x3b,0x1b,0x6b,0xde,0x6d,0x1e,0x86,0x87,0x82,0xc3,0x31,0x97,0x20,0xdd,0xdd,0xce,0x61,0x64,0x99,0xf6,0xbe,0xbf,0xec,0x37,0x54,0x8b,0x92,0x29,0xda,0xc5,0x7b +.byte 0x4d,0xc5,0xaf,0xb8,0x4e,0x4b,0x4a,0x2b,0x35,0x30,0xf5,0x19,0x9e,0x32,0xd8,0x2e,0xc1,0x19,0xfe,0xd1,0x61,0xb0,0xaa,0x05,0x58,0x15,0xd9,0x0e,0x4e,0xca,0x4e,0x10,0x83,0xe6,0xe6,0x57,0xe8,0x8d,0x13,0xb4,0x6f,0x85,0x59,0xf2,0x83,0xc8,0x37,0xaa,0xa2,0xe5,0xc8,0x77,0x06,0x82,0x21,0x5d,0x84,0x58,0x67,0x9b,0xcc,0x9c,0xfc,0x1b +.byte 0x28,0x2f,0xac,0xc8,0x96,0x91,0x26,0x46,0x42,0x2b,0x68,0x57,0xb0,0x79,0x1e,0xb1,0x9b,0x92,0x2c,0xeb,0x67,0x00,0xd4,0x26,0x7d,0xca,0x45,0x97,0x55,0xea,0x2a,0x20,0x70,0x7c,0x20,0x14,0x38,0x40,0x3d,0x4f,0xf5,0x3a,0x1f,0x0a,0xe3,0x9a,0x48,0xcc,0xb2,0x7d,0xee,0x5b,0x48,0x90,0x0d,0x12,0x77,0xd8,0xd3,0xb6,0xd7,0x66,0x9e,0x48 +.byte 0xbb,0x92,0xc1,0x7c,0x4e,0x90,0x4d,0xd5,0x96,0x99,0xea,0x86,0x2d,0xb9,0x5a,0x50,0x05,0xc2,0x6b,0xa7,0x0c,0x43,0x44,0x22,0x09,0xb9,0xc0,0x56,0x47,0x5f,0xdf,0xaf,0x6b,0x91,0xe2,0xd7,0x45,0x77,0x17,0x7a,0x71,0x6d,0x27,0x93,0xe2,0xc6,0x10,0x2f,0xc8,0x3b,0x75,0x78,0x11,0xae,0x07,0xe6,0xba,0x64,0xd4,0x06,0xfa,0xf9,0x1d,0x74 +.byte 0x9e,0x4f,0x6d,0x02,0xfc,0x40,0x80,0x9a,0x2e,0xd4,0x15,0x32,0x15,0xe8,0x97,0x0a,0xd4,0x65,0x6a,0x87,0xd3,0x66,0x4b,0xb8,0x66,0x84,0x8e,0xb9,0x4b,0xa7,0xcf,0x58,0x13,0x66,0x3a,0x4e,0xa5,0x76,0x17,0x13,0x92,0x79,0x42,0x67,0x6d,0xb6,0x65,0xec,0xc8,0xb5,0x5f,0x17,0x2a,0x2d,0x4b,0x19,0xe9,0x00,0x6e,0x38,0xaf,0xe9,0x06,0xb6 +.byte 0xe8,0x99,0x69,0x8a,0x74,0xe7,0x7e,0x70,0x69,0x4b,0xbc,0xce,0x5d,0x61,0x94,0x1b,0x47,0x41,0x38,0x5f,0x2e,0xcf,0x2b,0xe1,0xcd,0xa3,0x98,0x71,0xf7,0x09,0x65,0xfe,0x5f,0x62,0x4b,0x9e,0x91,0x88,0x35,0xa2,0x66,0x02,0x1d,0xc9,0x93,0x0c,0x19,0x50,0x4b,0x95,0x71,0x79,0xdd,0x74,0xe1,0xda,0x5a,0xb7,0x38,0x70,0x61,0x18,0x3f,0x68 +.byte 0x08,0x34,0xd8,0xfe,0xbb,0xd1,0xbf,0x57,0xed,0xc2,0x52,0x6d,0x54,0x3e,0xcb,0x0c,0x32,0xc7,0x09,0xa9,0x31,0x10,0xe8,0xbd,0x70,0xe3,0x0e,0xe9,0x4f,0x7a,0xd6,0x42,0x45,0x2e,0x1b,0x3c,0x0d,0x15,0x6d,0xb4,0xad,0xe9,0xc5,0xa2,0x12,0x77,0x34,0x43,0x20,0x95,0xc1,0xb7,0x51,0x72,0xed,0x78,0xa0,0xae,0x3c,0xae,0xb4,0xd4,0xda,0x58 +.byte 0x83,0x62,0xa9,0xc6,0x01,0x3d,0x14,0x19,0x07,0x00,0x3c,0x82,0x16,0x7e,0x8a,0x91,0x78,0xa1,0x65,0x0b,0x5b,0x3a,0x40,0x72,0xe5,0xf0,0xd4,0x82,0x04,0xe4,0x01,0xf1,0x84,0x87,0x96,0x26,0x91,0x66,0x77,0xf7,0x59,0xd6,0xc2,0xca,0x29,0x3b,0x68,0x2a,0x27,0x99,0x64,0x86,0xc2,0x96,0xbf,0x11,0x3c,0xa8,0x0c,0xf7,0x86,0xb8,0xc1,0x40 +.byte 0x15,0x1a,0x84,0xe3,0x93,0x23,0x73,0xa9,0x8b,0xbd,0xb4,0x8a,0xe4,0xf1,0xa5,0x8f,0x56,0xa3,0xdc,0x77,0xbd,0x7d,0x15,0x74,0x2b,0x18,0x92,0x56,0x45,0xbc,0xaf,0xf2,0x55,0xce,0x9d,0xc2,0xab,0x39,0x90,0xec,0x78,0x3f,0xa5,0x14,0xeb,0x40,0x2f,0x01,0xca,0xeb,0xad,0x73,0x85,0xbc,0xe1,0x91,0xaa,0x77,0xa9,0x6c,0x02,0x66,0x6a,0x65 +.byte 0x63,0x6c,0x50,0x62,0x83,0x83,0xef,0x16,0x4f,0x21,0xfd,0x28,0x8e,0x52,0x66,0x5b,0x6f,0x8f,0xbe,0x8d,0x17,0xb9,0xd5,0x99,0xf7,0x39,0xd1,0xbc,0xa2,0x43,0xd7,0x0a,0x80,0xea,0x42,0xf8,0x38,0x53,0x95,0x07,0x6f,0xb7,0x7c,0xc1,0x16,0x88,0xc8,0xb7,0x59,0xde,0x76,0x51,0x2f,0x92,0xd0,0x40,0xfd,0xd9,0x2d,0xca,0x9e,0x8d,0x28,0xae +.byte 0x48,0xc1,0x0a,0xe0,0x76,0x9c,0x02,0x0b,0xc5,0xd1,0xf9,0x83,0x90,0x86,0xa4,0xeb,0x5c,0x64,0x65,0xf8,0x98,0x38,0xc5,0xce,0xef,0x6f,0xc3,0x88,0xb6,0x2f,0x8a,0x40,0x55,0x52,0x47,0x06,0x75,0x16,0x46,0x9c,0xff,0x3c,0x68,0x97,0xc3,0xfb,0x10,0x11,0x7b,0xba,0x04,0xcc,0xad,0xba,0xcf,0xf0,0xae,0xba,0xe6,0x59,0x9c,0xf5,0x27,0xeb +.byte 0xdd,0x5c,0x86,0x25,0xa1,0xb6,0xb8,0x1c,0x94,0x98,0xa5,0x79,0x82,0x4e,0xdf,0x09,0x3f,0x2f,0x8a,0x4e,0x1b,0x5a,0xab,0xd4,0xe6,0x21,0xb3,0x02,0x19,0x39,0xa9,0x2e,0x0e,0xae,0x86,0x30,0xc7,0xa0,0x00,0xed,0x72,0xdc,0x71,0x77,0x42,0x76,0x54,0x68,0xb2,0x8d,0x5d,0xc3,0x5c,0x86,0xf8,0xb1,0x6c,0x67,0xdf,0x24,0x40,0x6a,0x2b,0x1d +.byte 0xbc,0x0d,0x25,0x7d,0x9e,0x1c,0xbd,0x18,0x85,0xda,0x7a,0x86,0x5e,0xed,0x10,0x80,0x83,0xa6,0xef,0x1e,0x93,0xac,0xce,0xe6,0x32,0x35,0xdf,0xb8,0xc7,0x9b,0xf0,0x0f,0x9d,0x37,0xbd,0xd9,0x58,0x33,0x19,0xa1,0x23,0x51,0x5f,0xa7,0x5a,0x99,0x7e,0x2a,0xfd,0x85,0x3c,0x26,0xad,0xcc,0x7e,0x07,0x32,0x7b,0x24,0x5a,0x6b,0x4b,0x71,0x4e +.byte 0xca,0x8b,0xc4,0x03,0x26,0x76,0x02,0x68,0x0d,0xa1,0x09,0xe0,0x2e,0xa4,0x82,0x88,0x05,0x5a,0xc4,0xcb,0x31,0x9d,0x56,0xda,0x0d,0x00,0x04,0xbc,0x07,0xca,0x1f,0xdf,0x9e,0x44,0xed,0x36,0xbd,0xa0,0x22,0xff,0x78,0xd1,0xcb,0x62,0xe0,0x0d,0x2e,0xdc,0x2e,0x36,0x28,0x8e,0xd3,0xa9,0xe0,0x38,0xd4,0xc5,0x2b,0xee,0xaf,0xa4,0x08,0x7d +.byte 0xed,0x2c,0x8a,0xf5,0x86,0x5e,0xed,0x2a,0x0d,0xbf,0xe6,0xfb,0x6f,0xc4,0x02,0x75,0x36,0xe5,0x7b,0xe9,0x4a,0xb3,0xf1,0xf4,0x86,0x6c,0x9a,0x6e,0xaa,0x7a,0xbe,0x4b,0xd6,0xf2,0x6b,0xcb,0x78,0x6f,0xf9,0x42,0x1a,0x19,0x7b,0x7e,0xba,0x59,0x02,0x8b,0xe3,0x5c,0x44,0xa4,0x84,0xa8,0x4a,0x67,0x93,0xee,0xc4,0x17,0x07,0x26,0xfe,0x86 +.byte 0xf1,0xc6,0xba,0xbf,0xc4,0x3d,0x33,0x41,0x4d,0xc4,0xf0,0xa8,0x6d,0xe1,0x06,0x16,0x2d,0xc9,0x5d,0x2a,0xf5,0x4a,0xc6,0xd2,0x8c,0x98,0x55,0xe8,0x8d,0xd0,0x31,0x5f,0xc7,0x05,0xd1,0xca,0xd2,0x72,0xe6,0xd0,0xcb,0x62,0x79,0xac,0x60,0x59,0x94,0x59,0x48,0x9e,0x91,0x17,0xa7,0xa0,0xac,0x4a,0xe5,0x08,0xe5,0x52,0xa4,0xd4,0x83,0x8c +.byte 0x83,0x57,0xe7,0xe5,0xfc,0x9b,0x43,0x78,0xc8,0x7e,0x94,0xc4,0x35,0x3e,0xac,0x4a,0x8d,0x60,0x80,0xdc,0x72,0xe3,0x15,0x09,0x2a,0xbd,0xcc,0x9a,0xe4,0x1a,0x18,0xa8,0xf1,0x29,0x9b,0xca,0x58,0x0b,0x6d,0x7b,0x33,0x91,0x05,0x27,0x6a,0x48,0xbe,0xac,0x08,0xa5,0x2a,0x64,0xf5,0xae,0x2a,0x90,0xf1,0x2d,0x3f,0xa8,0xff,0x17,0x92,0xc4 +.byte 0xec,0x3a,0x09,0xbf,0xae,0xd3,0xe2,0x1c,0x3c,0xc8,0x6f,0x91,0x72,0x99,0xe3,0x82,0x30,0x4f,0x40,0x5c,0x0c,0x8d,0xfd,0xbe,0x10,0xbc,0xce,0x1e,0x0a,0x09,0xbf,0xde,0xdc,0x72,0x7e,0x4c,0xbc,0xec,0x34,0xe2,0x96,0x8a,0xc6,0xee,0x19,0x6c,0xa8,0xf1,0xa5,0xb2,0x71,0x88,0x13,0xe8,0x11,0xda,0x3b,0x77,0x10,0x9c,0x9f,0x74,0x49,0x21 +.byte 0x16,0xcf,0x6f,0x05,0xc5,0xc1,0x4d,0xfe,0xe7,0x4d,0x67,0xe8,0x12,0x14,0xf7,0xaf,0x66,0x8d,0x55,0x34,0x00,0x18,0x10,0x6e,0x6a,0xd2,0x4c,0xd9,0xd3,0x15,0x40,0xbf,0xce,0x7b,0x10,0x69,0xbd,0x15,0x0e,0x60,0x2b,0x76,0x50,0x80,0x92,0x02,0x3c,0x0f,0xea,0x47,0x03,0xd9,0xf6,0x2c,0x00,0xde,0x29,0xb9,0x2e,0xf6,0x80,0x10,0x81,0x28 +.byte 0x6f,0x41,0xfc,0x88,0x65,0xe9,0xb5,0xd4,0x78,0x53,0xff,0x04,0xc4,0xdd,0xd7,0x35,0x34,0x59,0x85,0x33,0x01,0x33,0x67,0xe1,0x4e,0xc2,0xac,0xe6,0x24,0x24,0xb6,0x83,0x48,0x08,0x0c,0x73,0xe5,0x9c,0x98,0xe4,0x4c,0x3c,0x1f,0x6e,0x77,0xea,0x8c,0x76,0x23,0xbb,0x41,0x5e,0xc1,0x8a,0xba,0x3e,0xe5,0x3e,0x86,0x89,0xab,0x32,0x65,0x1b +.byte 0x00,0x92,0x56,0xe0,0x62,0xc1,0x8f,0xeb,0x15,0x7f,0x86,0xdf,0xa2,0xc2,0x8d,0xf5,0xb5,0x88,0x72,0x8c,0xba,0x92,0x30,0x53,0x58,0x3e,0x0b,0xe6,0x4f,0xd4,0xef,0x34,0xab,0xbb,0x61,0xe0,0x31,0x3c,0xe7,0xb2,0x5f,0x64,0xcb,0x52,0xc7,0x1d,0x95,0x96,0xd2,0x8c,0x87,0x34,0x92,0xf2,0xad,0xd9,0x78,0x1d,0xa1,0x67,0x58,0xfa,0xfb,0x06 +.byte 0xc8,0x7f,0x9e,0xf7,0x02,0x12,0xd9,0x8c,0x68,0xbc,0x2b,0xd3,0xe1,0x0e,0x1e,0xbd,0x33,0x7a,0xfd,0x03,0x41,0xb9,0x72,0x2e,0x63,0xfe,0xb1,0x39,0xc3,0x0f,0xa0,0xa9,0x76,0x4f,0x7b,0xab,0xae,0xda,0x22,0xec,0x83,0x32,0xb0,0xec,0xd1,0xfd,0xc2,0x28,0x1e,0x42,0x29,0x31,0xd5,0xb3,0x33,0xcd,0x13,0x1d,0x9f,0xac,0x73,0x27,0xf7,0xea +.byte 0xc6,0x66,0xd2,0x32,0x91,0x60,0x35,0xf4,0x28,0x34,0x43,0x6a,0x74,0x8c,0x05,0x2a,0x84,0x34,0xfd,0x84,0xa5,0xcb,0x1d,0x2b,0x41,0x28,0xa6,0x19,0xed,0xcd,0xad,0xea,0x6e,0xf7,0x14,0x18,0xac,0x56,0x9a,0xf5,0xaa,0x7d,0x4e,0x8a,0x99,0xd1,0xda,0x41,0xaf,0xe8,0xfc,0xef,0x66,0x88,0xd0,0xed,0xfd,0xae,0x2a,0x85,0xc0,0x60,0xa2,0x30 +.byte 0x5d,0x1b,0x48,0xf6,0x3e,0xcf,0x56,0xdf,0x53,0xdc,0x2d,0xf5,0xfd,0x7f,0x2a,0x2a,0x4d,0x4f,0x11,0xcc,0xea,0x72,0xdb,0xb9,0xeb,0x92,0x0e,0x9f,0xc1,0x26,0xe9,0xbf,0x25,0x6a,0x27,0xe1,0x63,0x9b,0xdd,0x62,0x38,0xad,0xd3,0xb2,0x75,0x62,0x45,0xbf,0xbf,0xf4,0xe2,0xd6,0x97,0xe9,0xeb,0xeb,0x98,0xab,0x73,0xdc,0x8a,0xde,0xaa,0x3b +.byte 0x69,0xfd,0x61,0x6f,0xbb,0xfc,0x28,0xc0,0xff,0x37,0x2e,0xeb,0x31,0x59,0x57,0xfb,0xd3,0x0e,0xed,0x01,0x66,0x50,0x63,0x53,0xa2,0xd1,0x24,0x8c,0xc8,0x8d,0x80,0x03,0x2a,0x1e,0x11,0x3a,0xb9,0x6c,0xf4,0x5f,0x58,0xa2,0xd6,0x58,0x6b,0x85,0x61,0xd1,0xe7,0xdc,0x90,0x07,0x34,0x6e,0xb9,0x0b,0x0d,0xcb,0xd5,0xe3,0xc6,0x9d,0xb8,0x51 +.byte 0x37,0x61,0xd0,0x6c,0x2e,0xed,0xe0,0xbc,0x55,0x74,0x63,0x1b,0x42,0x17,0x6a,0x9c,0x91,0x1b,0x96,0x76,0xc8,0xe4,0x2b,0x2e,0x90,0xd9,0xe5,0x3f,0x56,0x1b,0x2f,0x93,0x81,0x86,0x2a,0xb4,0xdf,0x93,0xcb,0xfa,0x01,0x85,0xd9,0x26,0x46,0x46,0x97,0x2a,0x2e,0xb3,0x91,0xe4,0xcf,0xd9,0x01,0x5a,0x37,0xa6,0xca,0x5e,0xed,0xa9,0x94,0x35 +.byte 0x2c,0x69,0x5b,0x1e,0xf8,0x38,0x61,0x41,0x10,0xf6,0xe9,0x6e,0x96,0xee,0xe6,0x5f,0x78,0x14,0x93,0x12,0xd2,0x57,0xe5,0xf4,0x58,0x46,0xca,0xc8,0x75,0x59,0xbd,0xd0,0xe4,0x70,0x35,0xa5,0x4a,0xfd,0x54,0xe2,0x91,0x76,0x0e,0xe6,0xe3,0xbb,0x31,0x65,0x4b,0x18,0xa8,0xb4,0xfa,0xa6,0x7d,0x7a,0xa9,0x47,0x3d,0x2b,0x2e,0x66,0xac,0x5b +.byte 0x3e,0x5e,0x8c,0x27,0x0c,0x33,0x04,0x03,0x4e,0x5f,0xcd,0x6b,0x9c,0xaa,0x13,0x83,0x38,0xe9,0x38,0xcf,0x03,0x70,0x5a,0x0f,0x18,0xf5,0xec,0x64,0xf3,0x0c,0xe8,0xb1,0xa9,0x07,0x70,0xf7,0xde,0x0c,0x35,0xf5,0xe2,0xcd,0xed,0xe6,0x4d,0xac,0x5c,0x4d,0x3e,0x03,0x96,0x90,0x7b,0x4c,0x3e,0x18,0x42,0xc0,0xa7,0x23,0x12,0x8e,0x54,0xc1 +.byte 0xa1,0x2f,0x82,0x13,0xe6,0x1f,0x74,0xae,0x7b,0x4a,0xa4,0xbb,0xdc,0xc0,0x68,0x0f,0x83,0xbc,0xda,0xce,0xa2,0xe7,0xbe,0x18,0xcd,0x8b,0x35,0x05,0xa3,0x4b,0x6f,0xf0,0x53,0x12,0x42,0x2f,0x3c,0x09,0x87,0xb7,0xe3,0x36,0x29,0xe1,0xa2,0xb6,0x60,0x05,0xb9,0x66,0x80,0xe9,0xec,0x40,0x2a,0x55,0x78,0x5f,0x1c,0x5f,0xc3,0xc7,0x49,0x69 +.byte 0x87,0x97,0x5f,0xa5,0x31,0xa8,0x83,0x66,0x5a,0xd7,0xaf,0xf0,0x15,0xf3,0x01,0x62,0x9a,0x88,0x76,0x0f,0xb3,0xdf,0xf1,0xc6,0x34,0xc3,0xac,0x68,0x60,0x9a,0x91,0x03,0x13,0xea,0x0e,0x36,0x9c,0xf5,0x51,0xb7,0x0c,0xa4,0xeb,0xf0,0x41,0x85,0x54,0x05,0xed,0x7a,0xc2,0xba,0x3b,0xb8,0x1c,0x41,0x0d,0xbb,0xad,0x16,0x7e,0x64,0x4f,0x88 +.byte 0x7a,0x17,0xae,0x76,0x55,0x78,0x93,0xe8,0x99,0xa1,0x70,0x1f,0xf6,0x8a,0xb9,0xeb,0x41,0xb9,0x08,0xb8,0x9d,0x78,0x57,0xa1,0xe1,0x23,0xa0,0x03,0xd3,0x16,0xbc,0x16,0x24,0xed,0xc5,0x12,0x16,0x0a,0x8a,0x23,0x11,0x22,0xc2,0xfe,0x49,0x9d,0x3d,0x10,0x3d,0x4b,0xeb,0xab,0xcb,0x21,0x9d,0x9d,0xb1,0x64,0x87,0xe5,0x4d,0xb9,0xe7,0x10 +.byte 0x05,0xa0,0x55,0x2f,0xdf,0x53,0x5e,0x03,0xec,0x7e,0xe4,0x1f,0x9b,0x16,0x0c,0xfc,0xd9,0xf9,0x66,0x39,0x93,0x9e,0x49,0x34,0x97,0xd6,0xa5,0x56,0x00,0xf1,0xaf,0x08,0xeb,0x58,0xcf,0x87,0x02,0xc4,0xf1,0x24,0xe8,0x29,0x83,0xc9,0x5d,0x56,0x68,0xa2,0xaa,0xba,0xb3,0x86,0x23,0x59,0x8d,0x32,0x96,0x4a,0xbb,0xe9,0xf2,0x53,0xb2,0x87 +.byte 0x4a,0xf5,0xdc,0x23,0xd4,0x2f,0x36,0x70,0xb5,0x1d,0xee,0x47,0x51,0x6c,0x35,0x2a,0xad,0x35,0x74,0x1b,0x98,0xb5,0x33,0x2c,0x6d,0x4c,0xf8,0x39,0x07,0x92,0x6c,0xc7,0x65,0x10,0x64,0xcd,0x53,0xa3,0xcb,0xcc,0xe4,0xb2,0x46,0xb3,0xb7,0x44,0x01,0x92,0x44,0x12,0x23,0x25,0x3e,0x00,0xe3,0xeb,0x5f,0xe5,0x76,0x48,0x4e,0x4a,0x7f,0x36 +.byte 0xf0,0x0b,0x5e,0xc0,0x97,0x0d,0xc8,0xcf,0xd5,0xb8,0xc0,0x11,0x8d,0xb9,0x1e,0x31,0x0f,0x84,0x36,0x2e,0xe0,0x42,0xe6,0x02,0x9d,0xa4,0xdb,0xa2,0x76,0xfd,0xa1,0x95,0xe0,0x49,0xe6,0xf1,0xd2,0xae,0x27,0x6b,0x11,0x05,0x47,0xb0,0xaa,0x61,0x01,0xd4,0xe6,0xcd,0x9d,0x7e,0x33,0x5d,0xec,0x22,0x96,0x59,0xb7,0xc5,0x50,0x83,0xa4,0x66 +.byte 0x56,0xc7,0x43,0xa6,0xf7,0x5d,0xb2,0x45,0xc0,0x96,0xa0,0x5b,0xb8,0xed,0xae,0x29,0xb3,0x7d,0xbd,0x01,0xde,0xc0,0xe7,0xcc,0xe9,0x55,0x32,0x32,0xbf,0xdd,0x03,0x1b,0xb0,0x4e,0xff,0x53,0x1f,0x4b,0xc6,0xec,0x16,0x9d,0x5b,0x78,0x74,0xc4,0x75,0x51,0x8a,0x1c,0xae,0x6b,0xcd,0x9c,0x77,0x47,0xbf,0xd1,0x38,0x3e,0x9e,0xc0,0xad,0x16 +.byte 0xb7,0x15,0x6b,0xdc,0xad,0xe9,0x13,0xbc,0x48,0xc1,0xaf,0x69,0xce,0xc4,0xcc,0x9b,0x73,0xf9,0xd5,0x7c,0xab,0xf0,0xf1,0x9b,0xea,0xc6,0x0b,0x19,0x47,0x42,0xc1,0xa0,0x02,0x64,0x17,0xce,0x88,0x4f,0x16,0xa6,0xed,0xdb,0xfe,0x61,0xd3,0xd6,0xc0,0x11,0x30,0x16,0xd2,0x45,0xb3,0x7e,0x52,0xd0,0x94,0x77,0xf0,0x0e,0xbf,0x16,0xc0,0x4a +.byte 0x2a,0x5c,0xac,0x55,0x57,0xb1,0x41,0xb6,0xa3,0x68,0x8c,0x0a,0x66,0x15,0xb4,0xf5,0xd9,0x9a,0xa9,0x68,0xf2,0xbc,0x06,0xc5,0x7c,0xd1,0x18,0x55,0x9a,0x2d,0x94,0x2e,0x04,0x4b,0x7d,0x3c,0xb1,0xe3,0x03,0x7a,0xa7,0xe3,0xe5,0x63,0x49,0x7c,0x3f,0x0a,0xc5,0xbd,0xd3,0x0f,0x04,0xfd,0x99,0xf7,0xe6,0x05,0x35,0x66,0x17,0x05,0x85,0x3b +.byte 0x98,0x92,0x11,0x26,0xe2,0x21,0x52,0x1b,0x54,0x08,0xc8,0xf0,0x4e,0x75,0x22,0x3f,0xe8,0xb6,0x35,0xa4,0x02,0x52,0x70,0xc2,0xce,0x5a,0x00,0xe2,0xe2,0x92,0x8c,0x97,0xa7,0x1d,0x42,0x52,0x8b,0xf1,0x81,0xa7,0xce,0x60,0x46,0xbe,0xf0,0x1d,0x34,0xdf,0x73,0x2a,0xd6,0x9a,0x2d,0xf9,0xe3,0x91,0x05,0xe4,0x1f,0x31,0x11,0x30,0xb0,0xff +.byte 0x8f,0x61,0x74,0xf4,0xef,0xcd,0xf6,0xa4,0x9a,0xd2,0x5e,0xba,0x27,0xe8,0x78,0x38,0xfc,0x75,0xff,0x3b,0x6c,0xde,0x4a,0x46,0x47,0x8e,0x97,0x28,0xe4,0x23,0xe0,0x10,0x07,0xca,0xcb,0x6d,0xed,0x29,0xc0,0xee,0x98,0x96,0x7c,0x90,0x1f,0x89,0x12,0x0f,0xd5,0x28,0xcf,0x6e,0x4b,0x9b,0x2d,0xb3,0xcd,0x97,0xb8,0xeb,0x58,0x23,0x26,0xb1 +.byte 0xb4,0x95,0x11,0x1e,0xee,0x00,0xde,0x24,0x28,0xa6,0x3f,0x15,0xa2,0x9a,0xcb,0x9d,0xe3,0x04,0x5d,0xc3,0x60,0x97,0x14,0x2c,0x84,0x2b,0x69,0x9c,0x2a,0xbf,0x08,0xba,0xc4,0x38,0x36,0xaa,0x89,0x11,0x32,0x63,0x01,0xa2,0x44,0x5f,0x50,0xf0,0x5b,0x11,0x15,0xc8,0x80,0xc9,0xa6,0xe7,0x5d,0x70,0xa8,0x34,0x42,0x97,0x2a,0x60,0x99,0x20 +.byte 0xa6,0x60,0xc0,0x70,0x8d,0x2f,0x3f,0x8a,0x14,0x80,0x8a,0xbe,0x05,0xb3,0x50,0x16,0xaf,0x32,0xb4,0x35,0x3e,0x1d,0x31,0x42,0xdd,0x50,0xeb,0x04,0x82,0x4c,0x83,0x3d,0x8f,0xb6,0x1e,0xc2,0xa9,0xd2,0x30,0xba,0x33,0xdb,0x97,0x6d,0x2d,0x97,0x59,0x33,0xc0,0xf8,0xa5,0x59,0xc5,0x44,0x9c,0xf1,0x06,0xc4,0xf2,0x31,0x3e,0xff,0xb8,0x12 +.byte 0x00,0x4d,0x6c,0x2d,0xa1,0xc7,0x83,0xea,0x55,0x93,0x0e,0x89,0x76,0xbf,0x56,0x2a,0x99,0x62,0x54,0xad,0x2c,0xe8,0xf0,0xf9,0x70,0x18,0xa5,0x2b,0x24,0xac,0x59,0xc9,0x84,0xe3,0x1a,0x9d,0xa0,0xdb,0x1b,0x7f,0xd5,0x7e,0xb5,0xe0,0x86,0x36,0xc5,0x71,0x6a,0xab,0xdb,0xa5,0x84,0xf1,0x9e,0x9e,0xf6,0x1b,0xab,0x47,0x94,0x38,0x8e,0x5d +.byte 0x55,0xb4,0xf5,0xc3,0x59,0xc2,0x2c,0x6d,0x9d,0x28,0x7d,0x33,0xcd,0xc7,0xd6,0xdf,0x10,0xda,0x7c,0xd0,0x6c,0x91,0x88,0xd6,0x6b,0xe7,0x72,0x75,0x18,0xb1,0x87,0xe4,0xbb,0x10,0xe0,0xa3,0x0f,0xea,0x65,0x0a,0x70,0xc8,0xee,0x52,0x05,0x0a,0x27,0x39,0x66,0xda,0xd6,0xa6,0xfe,0x97,0x24,0x09,0x9d,0x20,0x76,0x4e,0x97,0x9d,0xa9,0x9f +.byte 0x76,0x20,0x27,0x57,0x5b,0xf4,0x76,0x1a,0x4b,0xcf,0x13,0x6c,0x9e,0x63,0x53,0x97,0xca,0x10,0xd6,0x90,0x7d,0xfc,0xe3,0x03,0x2c,0x6c,0x79,0x93,0x1a,0xae,0x0f,0x43,0xdb,0x75,0xde,0x56,0xa6,0x69,0x93,0xce,0x2d,0x94,0x56,0x77,0x90,0x19,0x71,0x7f,0x7a,0x99,0xbd,0x9c,0x79,0x62,0x00,0x49,0x3a,0x62,0x49,0x4b,0x92,0x65,0x8b,0xe2 +.byte 0xa8,0x3d,0xa5,0x89,0x23,0xac,0xea,0xf1,0xbf,0x38,0x84,0xd7,0xe2,0x65,0xb6,0xc7,0xbc,0x02,0x11,0xfd,0xe3,0x4c,0x57,0x38,0xd4,0x36,0x54,0xe8,0xbb,0x63,0x17,0xe9,0xda,0x82,0x50,0xf1,0x8c,0x34,0x4d,0x75,0x2a,0x64,0x49,0xaf,0x98,0xc3,0x1d,0xad,0x31,0xf3,0x90,0x23,0x39,0xf5,0xb5,0xf4,0x37,0x88,0x67,0x12,0x5d,0xfc,0xee,0xe5 +.byte 0x44,0x52,0x2c,0x78,0xb1,0x90,0xc1,0xc2,0x77,0x6e,0x31,0x3e,0xa0,0x36,0x87,0xb0,0xc6,0x6c,0x94,0xc2,0x43,0x4a,0x7b,0xa2,0x73,0xe7,0xa0,0xc3,0x4c,0xaf,0x4f,0xa6,0x92,0x1c,0x9a,0x6d,0xee,0xe8,0x4d,0xe1,0xe0,0xc7,0x67,0xcf,0xcf,0x7d,0x7f,0x0f,0x07,0x0d,0x6c,0x06,0x06,0xc2,0xc9,0x28,0xfc,0x8d,0xcd,0x23,0x01,0x97,0x5b,0x4d +.byte 0x1c,0xdb,0x34,0x51,0x6e,0xe2,0x56,0x24,0xd7,0xbd,0x12,0xc4,0x2f,0xb4,0x3b,0x02,0xaa,0x47,0xda,0x61,0xf6,0xca,0x44,0xa8,0x02,0xbf,0xbc,0x58,0xfb,0xa2,0xff,0xf3,0x54,0x59,0x5f,0xd7,0xa0,0x7c,0x83,0xa6,0xef,0xeb,0x71,0x51,0x74,0xa1,0x27,0x10,0x97,0x13,0x1f,0x42,0x91,0xdd,0xa8,0xf8,0xc7,0x60,0x90,0xca,0x2e,0xc8,0xaf,0x9f +.byte 0x65,0x1f,0x24,0x0a,0x30,0x5f,0xb9,0x4c,0xfb,0xcb,0xa3,0x96,0x5e,0xad,0xab,0xac,0x09,0x91,0xf5,0x96,0x1f,0xe0,0x96,0x14,0xc5,0xa0,0x26,0xa1,0xf1,0x91,0x80,0x38,0x7f,0x38,0xdc,0x98,0x96,0x20,0x46,0x50,0x20,0xd2,0x20,0xce,0x79,0xd5,0x81,0x60,0x97,0xb2,0xb0,0xeb,0x58,0x75,0x3c,0x99,0xf0,0xe0,0xfd,0xfc,0x90,0xc5,0xd1,0x3d +.byte 0x68,0x07,0xfd,0xa1,0x3f,0xeb,0x47,0xd0,0x58,0xe3,0xfa,0xbe,0xbf,0x20,0xdf,0x66,0x08,0x91,0xa4,0x5c,0x52,0x3e,0xdf,0x5c,0xb8,0xee,0xca,0xa6,0x89,0x06,0x97,0xb4,0x8d,0x60,0x35,0xb1,0xff,0x1e,0x39,0xf2,0x67,0xbc,0x71,0xee,0xeb,0x48,0x94,0x19,0x1a,0xee,0xc5,0xe2,0x7e,0x0d,0xf1,0xca,0xe8,0x2c,0xb0,0xaa,0x02,0x58,0x23,0x23 +.byte 0xce,0x37,0x5e,0xcb,0x58,0x40,0x2e,0x1a,0xa6,0x09,0x11,0x95,0xc4,0x6f,0x10,0xb0,0x15,0x22,0x48,0x67,0x74,0x6c,0x2f,0x4f,0x4a,0xb4,0x01,0xe5,0xa3,0x77,0xab,0xad,0xa4,0x04,0x22,0x71,0x58,0x4a,0x71,0xb1,0xe8,0xdf,0x43,0x18,0x0e,0x95,0x7c,0x8c,0x23,0x3a,0xf3,0x9c,0x20,0x60,0x20,0x69,0x51,0x28,0x7e,0x13,0x67,0x5c,0x7d,0x35 +.byte 0xfa,0x1b,0x04,0x8b,0xcf,0x42,0x6e,0x15,0x55,0xcd,0x04,0xdb,0x73,0xdb,0x47,0x5f,0x83,0x6e,0xd1,0x5a,0x15,0xa2,0xbb,0xf7,0xbb,0x84,0x58,0xce,0x75,0xe8,0xd2,0x92,0xd5,0xb7,0x76,0xf2,0x94,0x67,0x27,0x5f,0x32,0x91,0x3a,0xaf,0xd4,0x31,0xf8,0x92,0xce,0x63,0xb7,0x45,0x27,0xb4,0xb8,0x7a,0x1e,0x4e,0xde,0xcb,0xc8,0x5e,0xd3,0xbb +.byte 0x52,0x91,0xd5,0x72,0xad,0x98,0xec,0x07,0xa1,0x56,0xb4,0x8e,0x04,0xfa,0x48,0x3f,0x17,0x07,0xf7,0xef,0x92,0x61,0x69,0xaf,0xdd,0xfc,0x76,0x03,0xe2,0xe9,0xe2,0xbe,0x5c,0xf2,0x8a,0xc5,0x99,0x51,0x7f,0xa4,0xf1,0xac,0x16,0xec,0x16,0xf5,0xb8,0x95,0x88,0x87,0xdb,0x27,0x2e,0x63,0x12,0x31,0x7d,0x6b,0x2b,0xa0,0x9b,0xb5,0xf9,0x82 +.byte 0x42,0x04,0x94,0xee,0x60,0x6e,0x4e,0x54,0x9b,0xfd,0xeb,0x01,0x3a,0xad,0x42,0xeb,0x08,0x3c,0x6a,0xa3,0xf2,0x46,0xfb,0x18,0x59,0x2c,0xa3,0x0b,0x22,0x1d,0x5d,0x47,0xa6,0x8c,0x06,0x9c,0xa1,0xcc,0x20,0x67,0xbd,0xf0,0x5b,0x94,0x9f,0xc6,0x10,0x8c,0xc8,0x15,0x52,0xe3,0x19,0xa1,0x89,0xfd,0x99,0xad,0x4f,0x10,0x51,0x0a,0xe4,0x4b +.byte 0x02,0x7b,0x0d,0x73,0x2d,0xae,0xa4,0x68,0x1d,0xb6,0xcf,0x58,0x67,0xc0,0xd0,0xca,0x11,0x34,0x31,0x9e,0xa3,0xbc,0x12,0x28,0x1e,0x8e,0x5a,0x63,0xf5,0xda,0xf2,0x36,0x94,0x63,0x2c,0x39,0x3d,0xf9,0x80,0x9f,0xbf,0x8d,0xef,0x1f,0x15,0xc8,0xdb,0x62,0x58,0x7d,0xdc,0x0a,0x7f,0x87,0xaf,0x6d,0x2e,0xac,0x92,0x4f,0x51,0xdf,0x5e,0x75 +.byte 0x5e,0x0f,0x7c,0x51,0x49,0x88,0x0f,0x7b,0x49,0xa5,0x7c,0x41,0x4e,0x2a,0x0f,0xd0,0x0f,0x78,0xeb,0x42,0xfc,0x07,0x8a,0x8b,0x4e,0x3e,0xf2,0x42,0xc5,0x21,0x01,0x66,0xe2,0x50,0xf6,0x3d,0x28,0x1e,0xbf,0xdc,0x71,0x7f,0xc5,0x6e,0xc1,0xab,0x1a,0x33,0x49,0xdd,0xa2,0xb9,0x52,0xbe,0x93,0x97,0x97,0x7a,0xf0,0x22,0xa8,0xc5,0x01,0xc6 +.byte 0x76,0x6f,0xb6,0x2c,0x09,0x80,0x62,0x5b,0x84,0x05,0x7f,0x79,0x28,0x04,0x67,0xa2,0x0f,0xfc,0xbb,0x17,0xe2,0x85,0xe3,0xa0,0xf3,0x44,0x47,0x96,0x68,0x80,0xb2,0xbf,0xba,0x63,0x53,0x38,0x6c,0x3b,0xcd,0x3c,0xa4,0x10,0x48,0x80,0xd8,0x49,0x5a,0xf0,0x5c,0x38,0x02,0x02,0x5b,0xf2,0x77,0xa4,0xfd,0x16,0xfd,0x13,0xc8,0x8b,0x9b,0xcd +.byte 0xe1,0x8d,0x70,0xb6,0x3d,0x24,0x65,0xda,0x1a,0x42,0x6f,0x90,0x64,0x9a,0x9b,0xda,0x54,0x44,0xc0,0xe0,0xd7,0xfb,0x73,0x10,0x3c,0xcf,0xa6,0x04,0x99,0xd9,0x45,0xe5,0x74,0xfe,0xdf,0x81,0xac,0xc8,0x30,0xe5,0x66,0x45,0x02,0xca,0xcd,0xd7,0xe6,0x7b,0x0d,0xda,0xe1,0xa0,0xa1,0xa1,0x87,0x34,0x63,0x0b,0xa7,0x82,0x39,0x83,0xba,0x18 +.byte 0x0b,0x16,0x35,0x11,0x53,0x8d,0xbe,0x7d,0xa8,0x7e,0x3f,0xf4,0x71,0xc9,0x37,0x6f,0x1a,0xd9,0x3f,0x8e,0xc4,0xc1,0xd3,0x80,0xdf,0xee,0x0e,0x6b,0x23,0xf7,0xbc,0x42,0x93,0x7a,0x36,0x6f,0x03,0x24,0xb4,0x9c,0x62,0xa0,0xed,0xed,0x0b,0x66,0xa8,0x25,0xe6,0x1a,0xd4,0x13,0xd1,0x16,0x14,0x2b,0x90,0x7d,0x2e,0xa4,0xda,0xb2,0xf9,0x33 +.byte 0x54,0xf9,0x0a,0x04,0x27,0x03,0x14,0xd2,0xd7,0xe2,0xc1,0xaa,0xb6,0xe8,0xe5,0x4c,0xf2,0xdb,0x4c,0xc8,0xb3,0xa4,0xeb,0xbf,0x12,0x5c,0x9d,0x65,0xaa,0x9a,0x66,0x77,0x42,0xb4,0xd5,0x5b,0x1f,0x3b,0xd7,0x91,0x89,0x57,0x2f,0xd0,0x86,0x99,0xb2,0xc8,0xc1,0x31,0xde,0x33,0x43,0x36,0x81,0xdb,0x97,0x7b,0x17,0x3b,0xa5,0x99,0xdb,0x63 +.byte 0x2b,0x48,0x4c,0xa6,0x5c,0x6c,0xd8,0xc9,0x6e,0x72,0x39,0xbe,0x6e,0x55,0x7e,0x9d,0xb7,0x20,0x8d,0x8f,0x81,0x20,0x78,0xae,0xc6,0x1d,0xe0,0x2d,0xb1,0xe7,0x64,0xbb,0xd4,0xc8,0x08,0x61,0x14,0x29,0x08,0xbc,0x1a,0xeb,0xfa,0x64,0x33,0x91,0x7d,0x91,0x41,0x65,0x8e,0x4c,0x0c,0xb2,0x79,0xc3,0x01,0x68,0xfc,0xd6,0xbb,0x50,0xcc,0x07 +.byte 0xa5,0xf6,0x2c,0x5e,0x10,0xd6,0xa3,0x62,0x18,0xec,0xa2,0xf2,0x6b,0xad,0xcd,0x02,0x01,0x75,0xbb,0x36,0x27,0x56,0x0f,0x55,0x03,0xe0,0x57,0xe1,0x72,0xeb,0x66,0x00,0x21,0xff,0x9a,0xbc,0xc1,0x1e,0x2c,0x93,0xe6,0x4d,0x93,0x28,0x10,0x7d,0x67,0x6c,0xf1,0xa4,0xe6,0x3a,0xa6,0x30,0xc8,0x50,0x1d,0x8b,0x6e,0x7b,0x76,0x98,0x14,0x4e +.byte 0xed,0x84,0x67,0x2a,0x5f,0xac,0x0b,0x7b,0x47,0x40,0xb3,0x2d,0x7a,0xc1,0x23,0xdc,0x62,0xf8,0x8e,0x90,0x77,0xd4,0xf9,0x00,0x4b,0x67,0x04,0x72,0xf8,0xc9,0x2c,0x2d,0x0e,0x3c,0x3c,0xf3,0xfc,0xa8,0xe2,0x49,0xa4,0x00,0x82,0x98,0x72,0xa9,0xec,0xea,0xbd,0x3a,0x4e,0xd7,0x32,0xf1,0x11,0xf0,0x0d,0x9e,0xa2,0xe8,0xfe,0xcc,0x67,0xec +.byte 0xfc,0xd6,0xfe,0x83,0x5e,0x7c,0x2b,0xb3,0x42,0xf4,0x2d,0x9a,0xbe,0x20,0xd1,0x81,0x62,0xe9,0x59,0x19,0x28,0xdf,0x97,0x10,0x54,0xf7,0xde,0x60,0x51,0x6a,0xce,0x32,0x03,0x75,0x5c,0x25,0x25,0x82,0x9c,0x07,0xf7,0x2d,0xa8,0x1b,0x9f,0xd3,0x32,0x46,0x25,0x1f,0xb1,0xc5,0xbb,0x28,0x14,0x3e,0xed,0xa8,0x83,0x20,0xf4,0x9c,0x75,0xf4 +.byte 0xe6,0xc4,0x2d,0x05,0x88,0x31,0xfd,0x48,0xca,0x6c,0x7f,0xab,0xb4,0x77,0x93,0x1d,0x87,0xc3,0x4e,0xb8,0xad,0xb4,0x3d,0x37,0x7a,0xd2,0x77,0xff,0xc2,0xcb,0x9c,0xc7,0xbf,0x02,0x02,0x70,0xc9,0x9f,0x77,0x8a,0x7d,0xa7,0x9a,0x10,0xd1,0x0e,0xb7,0xec,0x61,0xee,0x77,0x24,0xe9,0x3d,0xcd,0x12,0xca,0xee,0x50,0xb0,0x27,0x5d,0xe5,0xac +.byte 0xa3,0x92,0xc7,0xd0,0x23,0x54,0xb1,0xe5,0x50,0xc3,0x15,0xd7,0x66,0x32,0x38,0x34,0xb1,0x59,0x1b,0xc3,0x59,0xe8,0xad,0x59,0x90,0x58,0x6e,0x02,0x40,0xb1,0x51,0x65,0x78,0x25,0x26,0x01,0xdd,0xcf,0x04,0xa2,0xfe,0xc3,0xbb,0x80,0x1c,0xb0,0x4e,0x9c,0x49,0x48,0xa3,0xe2,0xcc,0x81,0xc5,0xa8,0xd4,0xd5,0xe4,0xab,0x39,0xe7,0xe8,0x97 +.byte 0xc7,0x51,0xb4,0x5e,0x3f,0xe6,0xa7,0xcc,0x45,0x18,0xa2,0x6a,0xb3,0xa8,0x0b,0x7d,0xce,0x1a,0x97,0x4a,0x67,0xe1,0x3c,0x7c,0x4e,0xad,0x90,0xcf,0x2a,0x8f,0xb8,0xb6,0x96,0xaa,0x9a,0xc3,0x73,0xe6,0x71,0xdb,0x11,0x9b,0xd9,0xd9,0xfe,0xba,0x4a,0xf0,0x77,0xa4,0x15,0xb5,0xca,0xe1,0xb4,0x16,0x06,0x46,0xdf,0xc5,0x49,0x07,0x66,0xb3 +.byte 0xf5,0x30,0xe3,0xfb,0x44,0xac,0x80,0x3a,0x21,0xd9,0x5b,0x22,0x54,0x3a,0xae,0xbe,0xbd,0xf0,0x99,0x8d,0xb5,0x2a,0xf7,0xc9,0xf2,0xd3,0xfb,0x07,0x7c,0xd7,0x75,0x30,0x2a,0xcd,0x80,0xa8,0x2a,0x6a,0xb9,0x47,0xe2,0xa1,0xb0,0x76,0x6a,0x0f,0x9f,0x4a,0x56,0x3e,0xde,0xb3,0x89,0x12,0x25,0x63,0x1a,0x9d,0xea,0x64,0x08,0xc5,0x78,0xa7 +.byte 0x53,0xce,0xf8,0xb2,0xe5,0x97,0x3a,0xeb,0xd1,0x92,0xe1,0x4d,0xe0,0xf5,0x93,0x39,0x73,0xad,0x67,0xc9,0x0e,0x6b,0x16,0x4a,0x00,0xaa,0xb4,0xe6,0xa6,0xa5,0x67,0x95,0x90,0x04,0x5e,0x4d,0xc3,0x7f,0x6b,0xa1,0x50,0xb0,0x3b,0x72,0x0d,0xb3,0xec,0x9a,0x18,0x92,0x65,0x0c,0x2d,0x0f,0x94,0xd6,0x0f,0x95,0xba,0x4b,0xe6,0xc3,0x07,0x22 +.byte 0x0d,0x40,0xd4,0x0d,0x97,0x44,0xba,0x54,0x8c,0xf8,0x97,0x52,0x1f,0xa7,0xb2,0xe8,0x1b,0x0a,0xd5,0xde,0xff,0x1b,0x33,0x60,0x6a,0x28,0x68,0x36,0xb9,0x5a,0x3e,0x43,0x84,0x9a,0xb1,0x3d,0x3d,0xdb,0x1b,0xa2,0xc5,0x0e,0x2d,0xb5,0x5a,0xa5,0x36,0xe7,0xbf,0x7e,0xc3,0x76,0xad,0x1e,0xb5,0x49,0xc2,0xd5,0xa2,0x69,0x97,0x45,0x43,0x3e +.byte 0xeb,0xcd,0xdf,0x4f,0xab,0xb3,0xe8,0x49,0xaa,0x9c,0x9c,0x58,0x1e,0xc8,0x1c,0x79,0xe9,0x16,0x1d,0xfe,0x54,0xac,0x55,0x18,0x10,0x73,0x97,0xdc,0xbe,0x45,0x63,0xfb,0x48,0x41,0x88,0xb4,0x0b,0x3a,0x1d,0x65,0x40,0x1b,0x10,0x66,0xeb,0xbe,0xed,0xc7,0x6c,0xd5,0x0c,0x19,0x85,0x23,0xb1,0x38,0xb3,0x4b,0xcd,0xc7,0xc5,0x06,0x18,0x40 +.byte 0xbd,0xef,0x9f,0x2e,0x3a,0x71,0x33,0x05,0x30,0x71,0xca,0xe9,0x7a,0x2c,0xe7,0x83,0x4e,0x3d,0x4b,0xc8,0xc7,0xcb,0x74,0x9c,0xa2,0xc7,0xbb,0x8c,0x44,0x0d,0xd8,0xb3,0x01,0x7c,0xdf,0x79,0xee,0x47,0xcb,0x91,0x6f,0xc3,0xfd,0x0f,0xfb,0xf8,0x6b,0x9b,0x00,0xaf,0xf6,0x69,0x82,0xa5,0x58,0x54,0x22,0x7f,0x4b,0xee,0xa7,0x03,0xdb,0xb6 +.byte 0x5f,0x12,0xe1,0x04,0x43,0x17,0xec,0xd4,0xdd,0x39,0x28,0xfa,0xa3,0x09,0x5e,0x14,0xaf,0x6b,0xfe,0x0c,0x65,0x01,0x13,0x75,0x3d,0xe7,0x6d,0xd9,0xda,0x1d,0x13,0xc1,0x56,0x40,0x50,0x95,0x65,0x8f,0xad,0x51,0x3f,0x13,0x05,0x2f,0x83,0xcd,0xca,0x8b,0x75,0xa2,0x39,0x61,0xde,0xd7,0x36,0xf9,0x1d,0x43,0x5b,0xc4,0x9a,0xc9,0xfc,0xa8 +.byte 0xf4,0x76,0x90,0x91,0xe8,0x52,0x5b,0x84,0xe7,0xc9,0x8e,0x7d,0x84,0xba,0xb1,0x32,0x12,0xce,0x06,0x9e,0x98,0x83,0x1f,0x7f,0x31,0xd7,0xf0,0x8a,0xa2,0xca,0xae,0xb3,0x50,0x51,0x93,0xfb,0x2f,0x43,0x0a,0xee,0x06,0x85,0xec,0xb8,0xf1,0x73,0xb1,0x65,0x37,0x05,0x8e,0x68,0xf7,0x7a,0xff,0xe7,0x17,0x08,0x5e,0x19,0x75,0x3d,0xf9,0x5e +.byte 0xd5,0x25,0xf6,0x3b,0x99,0xb9,0x96,0x42,0x7a,0x37,0x8f,0x0d,0xde,0x22,0x83,0x89,0xf0,0x77,0x1f,0x22,0x42,0xc7,0xb5,0x70,0xcb,0xfd,0xf0,0xa9,0x87,0x8e,0x1f,0x01,0x9a,0x26,0xa6,0x8c,0x41,0xb9,0x12,0xd6,0xf2,0x5b,0xe5,0xfd,0xdc,0x74,0xbd,0xa1,0xc8,0xf7,0x3b,0x8c,0xe1,0x1d,0x42,0xb4,0x07,0x24,0x18,0x84,0x94,0x8a,0xce,0x00 +.byte 0xbd,0xd7,0xb0,0xfd,0x8f,0x0a,0xd3,0x75,0xa4,0xe8,0xfc,0x09,0xa9,0xa3,0x57,0x68,0x79,0x0e,0xef,0x37,0x46,0xd5,0x3b,0x8c,0x0d,0x67,0xbc,0x2c,0x5d,0x3e,0xf7,0xcc,0x9c,0x9e,0x81,0x62,0xc8,0xec,0x38,0x20,0x07,0x66,0xe4,0x83,0x15,0x13,0x3b,0x47,0x23,0xd9,0x46,0xaf,0x65,0xe1,0x40,0x2d,0x14,0x84,0x72,0xc1,0xbf,0xbe,0x81,0xc4 +.byte 0xcb,0x04,0x16,0x5e,0x2f,0x60,0x3a,0x8e,0x1a,0xd3,0xa2,0x00,0x25,0x6c,0xb7,0xdb,0x0d,0x20,0x99,0xb8,0x45,0x54,0xbf,0xc4,0x52,0x52,0x92,0x7d,0xcd,0xa1,0x9a,0x12,0x5e,0x27,0xe9,0xcf,0x79,0x9d,0xa8,0x6c,0xcd,0x37,0x20,0x08,0x09,0xc6,0x94,0x53,0x00,0x04,0xf5,0x3b,0xea,0x00,0x1b,0xc3,0x02,0xff,0xbc,0x18,0x1f,0xb7,0xf7,0x26 +.byte 0xe8,0x8b,0xc4,0x5f,0xf7,0xbe,0x9b,0xb3,0xba,0xae,0xbd,0x9c,0x3f,0x95,0xf7,0xcd,0x2b,0x40,0xf4,0x1c,0x6f,0xd7,0x52,0xe1,0xa7,0xdc,0x79,0xa4,0x88,0xff,0xfc,0xcf,0xfb,0xbb,0xe6,0xef,0xb6,0x31,0xac,0x24,0xa7,0x40,0xea,0x76,0xa2,0x34,0x6c,0xb1,0xfb,0x96,0x6b,0xfa,0xdd,0x60,0x70,0x73,0xb8,0xfd,0x66,0x3d,0xf9,0x63,0xc9,0x04 +.byte 0x70,0x20,0x35,0xca,0x04,0xb8,0xb3,0x4f,0x24,0x64,0x54,0xc2,0xd9,0x4d,0x8b,0xad,0x07,0xad,0xc5,0xb9,0x84,0xac,0x7c,0x65,0x4b,0x98,0x1d,0x09,0x23,0x95,0x5c,0x85,0x26,0xe5,0x8e,0xec,0xeb,0xc3,0xd5,0x15,0x9c,0x37,0x4e,0xf3,0x3c,0x97,0x92,0x75,0x99,0x48,0x48,0x52,0x4b,0x7b,0x93,0x54,0xd7,0x4f,0x7f,0xe5,0x51,0xdc,0x74,0x85 +.byte 0x9a,0xae,0xbd,0xf8,0xe6,0xe8,0x3f,0x1b,0xee,0x8b,0xf4,0xd8,0x5c,0x6c,0x46,0x6e,0x1d,0xaf,0x67,0x27,0x9a,0x39,0x4e,0x6b,0x99,0xcc,0xc0,0x66,0x54,0xbf,0x60,0xf6,0x24,0x64,0xfd,0x16,0xbf,0x56,0xb2,0x07,0x87,0x46,0xa6,0xef,0x40,0x67,0x78,0x2f,0x78,0x49,0x81,0x25,0xbd,0xa1,0xcf,0x78,0x68,0x25,0x8e,0x93,0x0a,0x4b,0xe1,0x92 +.byte 0x33,0x9c,0x13,0x70,0xd4,0xdf,0x74,0x34,0x8f,0x21,0xb9,0x51,0xd7,0x74,0xa9,0x02,0x6e,0xdd,0xb2,0xb4,0x6e,0x2a,0x95,0xdb,0xe4,0xaf,0x17,0xf5,0x9b,0xa5,0xc1,0x72,0x36,0x35,0x02,0x37,0x1c,0x38,0xaa,0x81,0x76,0xc6,0x1c,0xc3,0x2c,0xc5,0x45,0xaf,0x03,0xea,0xe6,0x14,0x51,0x44,0x84,0x9e,0x32,0xfe,0x4b,0x47,0xe9,0xb4,0x12,0x96 +.byte 0x13,0x6f,0x4c,0xed,0xe4,0xb0,0x79,0x7b,0xe5,0xc0,0x37,0x87,0x78,0x28,0x42,0xf7,0xd4,0xde,0xfc,0xd2,0x23,0x11,0x09,0xa5,0x11,0xc3,0xc4,0xf5,0xe0,0x2b,0x47,0x01,0x63,0xf2,0x85,0x1f,0x45,0x28,0xae,0xd3,0x29,0x04,0x1a,0x4b,0x83,0xab,0xf2,0x35,0x3a,0x40,0x2c,0x8d,0xb3,0xc7,0x47,0x0d,0xd1,0x3c,0xd0,0x1c,0x6b,0x5d,0x9b,0x4e +.byte 0xdf,0x36,0x8d,0xc6,0x54,0x9e,0x61,0x51,0xf1,0xd2,0xa4,0x39,0xad,0x4a,0x14,0xa1,0x0b,0xd3,0xae,0x91,0x1a,0x29,0xeb,0xc5,0x75,0x88,0x13,0x1e,0x96,0xdd,0x6f,0x86,0x92,0xaa,0x37,0x16,0x95,0x86,0xbc,0xb1,0x35,0xbf,0x5f,0x75,0x40,0x46,0xe1,0x6f,0x2f,0x33,0x2d,0x13,0x35,0xef,0xca,0x09,0x04,0xe4,0x42,0xef,0x69,0x66,0xda,0xa6 +.byte 0x01,0xda,0x09,0xfd,0xb1,0x40,0x8d,0xaa,0xdd,0x08,0x0d,0xf5,0xf1,0xd6,0xc6,0x11,0x3b,0xbd,0xd3,0x04,0x70,0x76,0xaf,0xec,0x9b,0xcc,0x6a,0x1d,0xeb,0x95,0x4a,0x01,0x0a,0x03,0x62,0x00,0x32,0xb3,0xe0,0xd1,0x36,0xb6,0xeb,0xde,0x4b,0x5f,0x35,0x79,0x07,0x4a,0x0d,0xa1,0x8c,0xde,0x6b,0xd2,0xca,0x71,0x64,0x73,0xf7,0x9c,0x1d,0x95 +.byte 0x5c,0xdc,0xb9,0x4f,0x00,0x2e,0x86,0x3d,0x81,0x7b,0x05,0xa5,0x9e,0x03,0xa3,0x62,0xcf,0x22,0x78,0x0b,0xfe,0x09,0x3e,0x62,0x93,0x19,0x6e,0x47,0x7d,0x92,0x4a,0x0b,0xae,0xcb,0x37,0x4d,0x5a,0x3a,0x7a,0x68,0xde,0xb2,0x7e,0xd7,0xda,0x5c,0x45,0xd2,0x0f,0x1d,0x03,0xbc,0xed,0xd8,0xe5,0x2e,0x26,0x10,0x82,0x46,0x5a,0xe0,0x13,0x32 +.byte 0xf8,0xb9,0x18,0x8c,0xbd,0xb4,0xb3,0x8c,0x2f,0xb0,0x5d,0x0b,0xf3,0x8f,0x5a,0xda,0x8b,0xda,0x39,0xfe,0xe6,0x66,0x95,0x3f,0xfe,0x49,0x89,0xbf,0x43,0x36,0x77,0xc7,0x6d,0xea,0x92,0x5c,0x71,0xa6,0x29,0x50,0xb0,0x2f,0xed,0x89,0x9f,0x2c,0xd6,0x6b,0xfa,0xbe,0x62,0x9f,0x62,0xc7,0xe3,0x2e,0xd4,0xf2,0x2c,0x9c,0x98,0x37,0x38,0x5e +.byte 0x81,0x6c,0x9e,0xcc,0xff,0x0f,0xfa,0xfa,0xe8,0xdd,0x2e,0x2d,0xb5,0x92,0x44,0x5e,0x2f,0xe1,0xd0,0x6c,0xc3,0xb9,0x11,0x95,0x70,0x4b,0x01,0xa0,0xc1,0x5e,0xe8,0x1d,0x40,0x16,0x9b,0x6e,0x29,0x1b,0x13,0xb9,0xda,0x39,0xbd,0x40,0x42,0xe2,0x06,0x35,0x57,0x2f,0xa8,0xf5,0xa7,0x00,0x60,0x07,0x26,0x21,0x6b,0xe6,0x23,0xa2,0x2a,0x70 +.byte 0xeb,0x85,0xcb,0xa9,0x73,0x31,0x62,0xf7,0xb0,0x90,0xd7,0x26,0xc1,0xd3,0xd7,0xcc,0x15,0x72,0x86,0xa6,0x0f,0x4a,0x24,0x14,0x5d,0xcd,0xbe,0xad,0x7d,0xf0,0x05,0x39,0x0c,0x10,0xbe,0x11,0x9a,0x36,0x9f,0x60,0x41,0xc6,0x7c,0xab,0x54,0x8a,0xac,0xc4,0xea,0xbd,0x43,0xeb,0x19,0x5a,0x8d,0x05,0xd1,0x83,0x58,0x92,0xb8,0xc6,0x75,0x56 +.byte 0x2c,0x58,0xb8,0x2d,0xe1,0x42,0xb4,0x0b,0xc9,0x97,0x79,0xb8,0x62,0xd0,0x15,0xd1,0x5d,0x0d,0x57,0x83,0xe4,0xba,0x73,0xa2,0x27,0xb8,0x56,0x64,0x28,0xaf,0xd2,0x58,0xe3,0xe6,0x12,0x01,0x6e,0x6a,0xfb,0x81,0x57,0xcd,0x32,0xc2,0x42,0x2a,0xe2,0x51,0x4a,0x4c,0xf8,0x69,0x0e,0xc0,0xe6,0x9f,0xf4,0x46,0x4b,0x60,0xcc,0x41,0x03,0xa4 +.byte 0x14,0xf0,0x15,0xb5,0xe5,0x39,0xfd,0x69,0xee,0xce,0x23,0x3a,0x50,0x66,0xdb,0xf4,0xe4,0x31,0x23,0xe9,0x06,0x93,0xdd,0x38,0xbc,0x2d,0xb9,0xf2,0x64,0x39,0x2f,0x1b,0xa9,0x71,0x0c,0x68,0xf7,0xb0,0x5b,0x74,0xe5,0x08,0xc6,0x5d,0xbe,0xb8,0xf7,0x40,0x0e,0xb4,0xe6,0x76,0x0c,0x14,0x8f,0x9d,0x25,0x95,0x6c,0x05,0x78,0x68,0x8a,0xa6 +.byte 0x80,0x24,0x8a,0x0b,0x6a,0xd7,0xfc,0xec,0x36,0xba,0x57,0xdd,0x49,0x82,0x3c,0x5f,0x9d,0xf4,0x57,0xac,0x16,0x99,0xed,0x73,0xa6,0xb0,0x2c,0x23,0xdb,0xf8,0x45,0x22,0xf4,0x82,0x16,0xc4,0x68,0x2f,0xe7,0x8c,0x85,0x6e,0x3c,0x43,0xdd,0x3d,0xea,0x90,0xeb,0xf4,0xef,0xf1,0x36,0x48,0x15,0x29,0x07,0x96,0x51,0xb5,0x78,0xa1,0xa3,0x59 +.byte 0x18,0x4d,0x11,0x5d,0x5e,0x67,0x69,0x28,0x29,0xcb,0xeb,0xbc,0x8f,0x17,0x12,0x57,0xaf,0xda,0xb5,0x86,0xef,0x59,0xdf,0xb1,0x6b,0x6a,0x33,0x66,0x67,0xd1,0x42,0xee,0xec,0x65,0xf2,0xeb,0x97,0x17,0x4e,0x01,0x3f,0x4d,0xb4,0x06,0x8e,0xf9,0xa8,0x79,0xb6,0xf1,0x67,0x8b,0xff,0x0b,0x5f,0x93,0x70,0x76,0x54,0xae,0x7b,0x0d,0x4a,0xbc +.byte 0xf7,0xdc,0x11,0x64,0xb3,0x6a,0xd1,0x69,0x45,0x1b,0x57,0xfc,0xb5,0xfe,0x86,0xb2,0xd6,0xde,0x82,0x23,0x86,0x6b,0x21,0x78,0x8b,0x2e,0x96,0xf8,0x04,0x8b,0xba,0x15,0xae,0x33,0x91,0x27,0x88,0xe3,0xc1,0xe7,0xf8,0xc3,0xa6,0xb6,0x73,0xec,0x84,0x95,0x22,0x45,0x58,0xb1,0x50,0x99,0xde,0x8a,0x37,0x41,0x9f,0xb8,0x27,0xd6,0xd8,0xaa +.byte 0x0f,0x0e,0xac,0xe4,0xd0,0x38,0xcf,0x2f,0x03,0x6f,0x3d,0x8a,0xd7,0x51,0xd6,0xf3,0x17,0x76,0xb5,0x0f,0xc5,0xf8,0xa7,0x0a,0x91,0xaa,0x8d,0xbc,0x15,0xd6,0x46,0xb9,0xdc,0x18,0x47,0x9c,0xd9,0x13,0xa5,0xb1,0xb5,0x45,0x2f,0x03,0x32,0x5c,0x8b,0xac,0x42,0x5b,0xd9,0x1a,0x41,0x1e,0x27,0xf9,0x92,0x72,0xc1,0xc7,0xc1,0x50,0x25,0x22 +.byte 0x7a,0x00,0x41,0x1f,0x2d,0x28,0xaf,0x41,0x96,0x8e,0x97,0x3b,0x36,0x80,0x16,0xe6,0x51,0x8f,0x07,0x13,0xd9,0x81,0x79,0x94,0x92,0xaa,0xb9,0xb6,0x39,0xf2,0x4d,0x24,0x6b,0x77,0x25,0x7e,0x47,0x6c,0xc7,0x62,0x3d,0x96,0x21,0xac,0x1a,0xf0,0x5f,0x5d,0x5a,0x7e,0x17,0xdd,0x47,0xd5,0x19,0x0a,0x85,0x3e,0xd5,0x6b,0x52,0x12,0xe2,0xbc +.byte 0x43,0x79,0x28,0x1d,0x72,0xcc,0xa6,0x6c,0xea,0x9b,0xe9,0x04,0x34,0x2c,0x41,0x3a,0x64,0xe8,0xcb,0x12,0xfa,0xd5,0x45,0xad,0xe8,0x3e,0xa2,0x5c,0xb8,0x83,0x52,0xdb,0x0c,0x98,0x24,0x76,0xd2,0x00,0x62,0xff,0xac,0xd7,0x11,0xee,0xcf,0xfb,0xdd,0x65,0xd2,0x75,0xb0,0x25,0x4e,0x76,0x3f,0xa2,0x1a,0xae,0xee,0xc1,0x59,0x1b,0x0c,0x42 +.byte 0x70,0x42,0x06,0x00,0x64,0x31,0xe0,0xce,0x3a,0x91,0x5e,0x9d,0x56,0x83,0xab,0xa7,0x73,0xc2,0x15,0x29,0xba,0xf9,0x1d,0xc8,0x4b,0xc6,0x3a,0x9e,0xab,0xd7,0xfd,0x17,0x8d,0x80,0xf0,0xa1,0x8a,0x5a,0x7a,0x80,0xd8,0x1f,0xa9,0x5b,0xec,0x68,0x99,0x3a,0x66,0xcc,0x5a,0xdf,0x5f,0xe9,0xd5,0x6a,0xf2,0x2c,0x7e,0xf8,0xa7,0xdf,0x0c,0x59 +.byte 0xbd,0x85,0xf0,0xc9,0x91,0x44,0x9c,0x86,0x24,0x60,0xfb,0xe9,0xff,0x3c,0xa7,0xa7,0x6d,0x4b,0x17,0xb3,0x24,0x99,0x14,0xbc,0x64,0xd0,0x41,0xaa,0xcd,0x26,0xd3,0xa3,0x51,0xeb,0x25,0x1d,0xb2,0x7d,0xf1,0xf3,0xf3,0xf0,0x3a,0xe0,0xb5,0xa9,0x24,0xc3,0x78,0x4a,0xef,0x9b,0x34,0x93,0xf8,0x0c,0x71,0x10,0x5b,0xf0,0xe7,0x08,0x4d,0x5f +.byte 0x74,0xbf,0x18,0x8b,0x48,0x8d,0xd7,0x23,0x81,0xed,0xa2,0x29,0xa9,0xdb,0x91,0xf6,0x61,0x7c,0xca,0x1e,0xe0,0xa7,0x21,0x9d,0xfc,0x04,0x3a,0x87,0xbb,0xf9,0xa4,0x3b,0xbb,0xc4,0x89,0xa1,0x7f,0xdc,0x83,0xfa,0x5e,0x0f,0xcf,0xdf,0xf6,0x41,0xd3,0xa3,0x76,0x76,0x44,0x3e,0x01,0xee,0xce,0xf6,0xc3,0xb9,0x49,0x43,0x6e,0xee,0x09,0x4c +.byte 0x87,0xe6,0xa3,0xf5,0xa0,0x8d,0x99,0xb3,0x3b,0xd6,0xeb,0x27,0xf9,0x34,0x68,0xc8,0x04,0x80,0xb2,0x4d,0xb6,0xde,0x98,0x81,0xe0,0xec,0xc9,0x06,0xde,0x86,0xee,0xf0,0x87,0xb8,0x67,0x0e,0xce,0xf8,0xc5,0xb1,0xd2,0xe1,0xe3,0x53,0x1d,0xbe,0x6c,0xdd,0x5e,0x83,0x02,0xf5,0xc8,0xda,0xcf,0x3c,0xcb,0x88,0x2c,0xca,0x65,0x65,0x9e,0x71 +.byte 0x4e,0xf2,0x98,0x96,0xb2,0x54,0xb4,0x96,0xdc,0x84,0xb5,0x39,0x74,0x9b,0x61,0xcf,0x52,0xef,0xb3,0x0c,0x62,0xc9,0x92,0xe1,0xe5,0x6f,0x2f,0x0c,0x61,0x0d,0x6f,0xfd,0xd8,0x84,0x25,0xba,0x20,0x59,0x00,0xf5,0xa9,0xf1,0x77,0x6e,0x9a,0x3d,0x93,0x69,0xde,0xaf,0x9a,0xe6,0xe3,0xfd,0xb9,0xd3,0x04,0x82,0x18,0xa1,0x5b,0x9b,0xe0,0x29 +.byte 0x4c,0x64,0xf5,0x95,0x57,0x25,0xd3,0x04,0x8b,0x4a,0xe9,0x57,0x6f,0xd1,0x8c,0x40,0x73,0x49,0x32,0x93,0x3f,0x26,0xb4,0x6b,0xd3,0xd4,0x90,0xb7,0xe1,0xaf,0xa0,0x9a,0xc0,0x86,0xb7,0x5e,0xec,0x29,0xaa,0x03,0x4e,0x56,0xb5,0xcd,0x46,0x7d,0xe0,0x26,0x3d,0x5f,0xd3,0x55,0x86,0x68,0x4a,0xc5,0x42,0x5d,0x60,0x3a,0x39,0x6f,0x45,0xb9 +.byte 0x6a,0xea,0xf4,0x05,0xc8,0x24,0xf8,0xcd,0xe5,0xeb,0xca,0x3a,0xe7,0xb4,0x59,0x83,0x5a,0xa5,0x1d,0xe4,0x6a,0xaa,0x35,0x00,0x42,0x32,0xa5,0x6c,0x3e,0xc1,0xc2,0xc4,0x9d,0x2e,0x43,0x57,0x79,0x52,0xf6,0x1e,0x02,0xb8,0x9b,0xcd,0xf0,0x3d,0x57,0xa3,0x6f,0xf7,0x12,0x54,0x6c,0x63,0x0d,0xb2,0xba,0xff,0xa1,0xf6,0xf5,0xdf,0xa5,0xed +.byte 0xda,0xdf,0x56,0x72,0x1e,0xc5,0x3f,0xad,0xd0,0xf9,0x38,0x94,0x51,0xe3,0xa4,0xb4,0xbf,0xd5,0x24,0x2a,0x90,0xfe,0xd4,0x34,0x6c,0xa8,0xc8,0x1c,0x9a,0xaf,0xac,0xff,0x5b,0x67,0x44,0x4c,0x4d,0xa7,0x59,0x2c,0x9f,0x67,0x07,0x25,0xe1,0x7f,0x4e,0x4a,0xaa,0x8f,0x5d,0xd1,0x26,0x0d,0x73,0x9b,0x69,0x5d,0xdf,0xb2,0xa5,0x89,0xbb,0x82 +.byte 0x0b,0x09,0xf3,0x11,0x76,0x5d,0x2d,0xad,0xc3,0xc1,0x15,0xbc,0xaf,0xa2,0xe6,0xd5,0xb0,0x6d,0x80,0xa6,0xda,0xfa,0x3b,0x9c,0xaf,0xff,0x98,0x40,0x83,0x3a,0xe1,0xb8,0x98,0x0e,0x97,0x00,0x89,0xfb,0x37,0xcb,0x81,0x36,0x34,0x33,0xbb,0x5c,0xd0,0x51,0x37,0xd6,0xb5,0x6c,0x3a,0x61,0x0a,0x27,0x23,0x96,0xa9,0x79,0x8d,0xf0,0xbe,0x31 +.byte 0xba,0xdc,0x89,0x4e,0x88,0x98,0xe4,0x10,0x15,0x8a,0xe1,0xae,0xe8,0x6d,0xa4,0x61,0x56,0x14,0x84,0x59,0x64,0xc2,0xaa,0xd8,0xfd,0x19,0xfc,0x17,0xf1,0xfc,0x6d,0x17,0xcb,0xea,0x7a,0x47,0x00,0x75,0x17,0xf3,0x62,0xfe,0x3a,0xbc,0x28,0x1a,0x0e,0x88,0x48,0x63,0x4a,0xcb,0x20,0x46,0xa4,0x75,0xf8,0xf1,0x7a,0xd6,0x92,0x7f,0x92,0xfa +.byte 0x91,0x95,0x2f,0xbc,0x5b,0x42,0xf1,0x55,0xaf,0x91,0xa2,0x3b,0x29,0x5c,0xc8,0x5e,0x97,0x91,0xa2,0x2e,0xd2,0xa8,0x1c,0xf6,0x16,0xc5,0x15,0xf2,0x42,0xb3,0x41,0x59,0x52,0x8d,0x94,0x52,0xc4,0xc6,0x2c,0xdd,0x6f,0x01,0xea,0x62,0x42,0x83,0x7e,0x2e,0xf8,0xb8,0xc1,0xf3,0x71,0xd1,0x11,0x14,0x7a,0x3d,0xcd,0xec,0xe0,0x79,0x8b,0xbd +.byte 0x28,0x12,0x60,0xf0,0x66,0xf1,0x1c,0x1c,0x19,0x07,0x8c,0x26,0xff,0xcc,0x72,0x9a,0xbd,0x12,0xe6,0x2b,0x2b,0xb1,0x32,0x04,0x98,0x92,0xd9,0x24,0x97,0x59,0x46,0xc6,0x11,0xe1,0x31,0x14,0x46,0x27,0x96,0xb1,0x06,0x81,0xd5,0xe8,0xff,0x45,0x3d,0x3c,0x04,0x9a,0xd8,0x0b,0x1f,0x41,0x03,0xba,0x1b,0x3e,0x4e,0xd5,0x7d,0x48,0x00,0x68 +.byte 0xb3,0xe8,0xe0,0xc8,0x3c,0xcf,0xdc,0xbe,0x29,0x90,0x64,0x51,0x18,0xdc,0xcd,0x87,0xcb,0xa8,0x3d,0xf8,0xb4,0x73,0x11,0xdc,0x7a,0xcb,0xa4,0x81,0x9e,0x3a,0x72,0xde,0x18,0x36,0x86,0x15,0x91,0xbc,0xeb,0x7f,0xe2,0xfb,0x6b,0xf1,0x5a,0x3d,0x05,0x50,0xeb,0xcf,0xd2,0xcc,0xf2,0x62,0xb1,0x32,0x46,0x14,0x95,0x4e,0xdf,0x73,0x64,0x61 +.byte 0x5f,0x3d,0xbf,0x52,0x3e,0xa7,0x55,0x01,0x9a,0xd8,0x01,0xef,0xf7,0x60,0x6f,0x83,0x43,0x6b,0x4c,0xa2,0xc8,0x04,0x34,0x70,0x70,0xa1,0x99,0xc9,0xa7,0x54,0x1e,0x87,0x99,0xb3,0xec,0xfe,0xe9,0x2d,0x39,0xef,0x6f,0x4d,0x8c,0xf2,0x4b,0xd2,0x12,0x5d,0xb6,0xa7,0x0b,0x04,0x3b,0x69,0xdd,0x9a,0x18,0x2d,0xd9,0x22,0x00,0x38,0x15,0x9a +.byte 0x6e,0x6c,0x0c,0x84,0x32,0x32,0xb2,0xf9,0x61,0xef,0x74,0x35,0xec,0xcc,0xd7,0xbc,0x9d,0xe9,0xcd,0xe3,0xa0,0xa5,0x15,0x0a,0xfe,0x1f,0x37,0x35,0x2b,0x7c,0x42,0x50,0x81,0x67,0x52,0xb7,0xa7,0x9e,0x8f,0xda,0x64,0xc0,0xc0,0xc3,0x93,0xc7,0x9d,0x41,0xb8,0x4b,0x69,0x80,0x13,0x88,0x8a,0x07,0xf9,0x47,0xad,0xc9,0x4f,0x3d,0xc7,0xba +.byte 0xd2,0xf2,0x7a,0xa0,0x38,0xbe,0xe1,0xfa,0x83,0xda,0x79,0x29,0x7f,0x4c,0xfa,0x0e,0x9b,0x59,0x1e,0x89,0x76,0x05,0x60,0x84,0x13,0x63,0x11,0x14,0x20,0xa9,0x2b,0xd0,0xc3,0x58,0xcc,0x73,0x3e,0x2c,0xa8,0xa7,0xa5,0xd0,0x2f,0x03,0xfc,0xa9,0x5d,0xdd,0xcd,0x40,0x91,0x90,0x1f,0xda,0x0a,0x73,0x58,0xd8,0x84,0x05,0x45,0x01,0x84,0x52 +.byte 0x8b,0x9b,0x17,0x98,0xa8,0xc4,0xc3,0xb5,0x94,0xd5,0x32,0x86,0xe9,0x10,0xe5,0xa5,0x99,0x8d,0x57,0x3e,0x32,0x25,0xfa,0xb4,0x5c,0x3a,0x5f,0xa6,0x2d,0x7d,0x4e,0xd3,0x7b,0xee,0x41,0x23,0x5e,0xc2,0xc9,0x91,0xf4,0x21,0xe0,0x4f,0x0d,0x87,0x30,0x53,0xf1,0x0e,0x63,0xe8,0x5b,0x3d,0xee,0x4a,0xc8,0x78,0x38,0xa2,0xa4,0xe8,0x72,0x41 +.byte 0xf1,0x37,0x30,0xe3,0x3d,0x93,0xc6,0x4b,0x10,0x0d,0xf6,0x20,0x15,0x0a,0x77,0x41,0xd5,0x7d,0xcb,0xf9,0xda,0x3b,0x17,0xa6,0xf1,0xe4,0x56,0xd4,0x65,0x7b,0x33,0xe4,0xef,0x34,0xfb,0x8c,0x9f,0x87,0x86,0xfc,0xce,0x90,0x60,0x77,0x57,0xc0,0xe4,0x37,0x2c,0xdf,0x41,0x95,0x85,0x89,0x4e,0x77,0x3f,0xa0,0xc7,0x55,0x4c,0x3f,0xa8,0x10 +.byte 0xd2,0x87,0x7e,0xd2,0x97,0xa1,0x6c,0xe7,0xec,0xaa,0xf6,0x93,0x13,0x2e,0x10,0xed,0x5b,0x7a,0xed,0x53,0xb4,0x55,0xaa,0xb4,0x67,0x78,0x07,0x5f,0xc2,0xd2,0xf1,0x7b,0x98,0xf0,0x82,0xf6,0x7c,0xb2,0xd4,0xa8,0xc2,0x53,0x39,0x21,0x7f,0xa0,0x76,0x37,0x1a,0x69,0xb3,0x49,0xd4,0xc3,0xd1,0xcb,0x31,0x76,0xec,0xaf,0x75,0x66,0x31,0x65 +.byte 0xeb,0x44,0x63,0xa0,0x13,0xf5,0x9e,0x67,0x40,0x41,0x76,0xce,0xd3,0xd6,0x91,0xb1,0x3a,0x07,0xff,0x38,0x1e,0xaf,0x55,0x57,0x55,0xd1,0x94,0x63,0xd3,0x81,0x16,0x59,0x68,0x01,0xe8,0x6d,0x7d,0x7a,0xa1,0x39,0xb9,0xa2,0xba,0x79,0x9d,0x69,0x00,0x13,0x59,0x2f,0x3d,0xef,0x10,0xe7,0x3c,0x02,0x7d,0xa3,0xa8,0xee,0x31,0x1a,0xad,0xa6 +.byte 0xdb,0x1b,0xe3,0x4a,0xdd,0x60,0xfb,0x4e,0xa6,0x49,0xbb,0xea,0x34,0x5d,0x21,0xac,0x83,0xa4,0xb5,0x23,0x8e,0x69,0xb3,0x25,0x14,0x8d,0xc2,0x89,0x8d,0xcf,0x38,0x46,0x18,0xb6,0x0c,0xce,0x45,0x22,0xeb,0xb5,0xb2,0xed,0xe5,0x0f,0x35,0x8f,0xdd,0xa1,0x15,0xd6,0x50,0x5b,0xe1,0x04,0xa7,0x32,0xc0,0xc9,0x03,0x56,0xc2,0x33,0xe8,0x16 +.byte 0x1c,0xd4,0x7a,0xfd,0x6b,0x4d,0x04,0xc0,0x9e,0xf8,0x32,0x9f,0x52,0x24,0xac,0xc5,0xb0,0xa1,0x63,0x77,0xc9,0x14,0xaf,0x46,0x60,0x67,0x52,0x81,0xbb,0x3f,0xf5,0x7f,0xad,0xef,0x7c,0x3a,0x71,0xc1,0x1e,0xea,0x4a,0xe0,0xd7,0xdd,0x31,0xf2,0x4b,0xdf,0x53,0x8a,0xc9,0x59,0x7a,0xb2,0x6f,0x7e,0xc0,0x00,0xa4,0x0d,0x09,0x9c,0xf7,0x22 +.byte 0x22,0xa9,0x37,0xde,0x3b,0xe1,0x74,0x85,0xcf,0xc5,0xb7,0x7b,0x0a,0xfd,0x6b,0xfa,0x98,0x49,0xa9,0x7f,0x52,0x23,0x0e,0xc0,0x4a,0xb3,0x81,0xa6,0x96,0x46,0x24,0xe7,0x01,0xd1,0xf2,0xac,0x31,0xb2,0x5e,0x61,0xe3,0xab,0xf8,0x1b,0x28,0xca,0xa2,0x78,0x3c,0xdf,0x8a,0xc1,0x17,0x46,0x9d,0xbd,0x69,0x31,0x41,0x8b,0xc1,0xc8,0xaa,0x68 +.byte 0xd5,0x35,0x65,0x49,0xfe,0xc6,0xa4,0x99,0xcc,0x62,0x4b,0x81,0x1c,0x21,0xa4,0xd8,0xe3,0xb3,0xe9,0x7c,0xf8,0x33,0x2f,0x21,0xa5,0x88,0xf2,0x8e,0x7d,0xee,0x00,0x00,0x62,0xcf,0x07,0x37,0x00,0x68,0x6c,0xb5,0x2d,0xc6,0x1b,0xcc,0x86,0x71,0xf0,0x4f,0x68,0xaf,0x0c,0x9a,0x25,0x69,0x71,0x2d,0xb5,0x87,0x90,0x02,0xd3,0xfc,0xbb,0x63 +.byte 0xa9,0xf1,0x13,0x4f,0xda,0x71,0x69,0x5c,0x0b,0xfd,0x3f,0x6c,0x2f,0x0b,0x4f,0x07,0x72,0x2d,0x2f,0x77,0xcb,0xa4,0xe4,0xbd,0x30,0xc7,0xe4,0xd9,0xf9,0x5d,0x2f,0x65,0xe4,0x41,0x5c,0xbc,0x03,0xa2,0x01,0xf9,0xfa,0x06,0x14,0x52,0x08,0x44,0x67,0x75,0x4e,0xbd,0x66,0x4a,0x26,0x3a,0x49,0xc4,0xba,0x02,0xb3,0x8e,0xa2,0x42,0xe7,0x92 +.byte 0x03,0x6d,0x61,0x10,0x73,0xd0,0x6f,0xe1,0x6e,0x67,0xff,0xb0,0x29,0x62,0x70,0x3c,0xeb,0x80,0xed,0x11,0x06,0xd6,0x18,0x60,0xe1,0x3d,0x21,0xa9,0xe9,0xd2,0x92,0x00,0x9e,0x13,0xf2,0x5d,0x38,0x71,0xdf,0xf3,0x5f,0x8a,0x90,0x45,0xf0,0x47,0x1f,0x0b,0x2d,0x12,0xf7,0x10,0x07,0x6a,0x52,0xe8,0xe2,0x26,0x9b,0x4b,0x7a,0x5f,0x97,0xb6 +.byte 0xf1,0x6d,0x47,0x3a,0x1e,0xc8,0x1d,0x78,0x5b,0x0a,0xb8,0x03,0xb1,0xe1,0xe7,0xc8,0xf0,0xe7,0x00,0xac,0xfc,0xd7,0x4a,0xde,0xaa,0xcd,0x0f,0xaf,0xf7,0x56,0x8e,0xed,0xfb,0xbe,0x7e,0xfe,0x62,0x75,0x7a,0x07,0x96,0xff,0xc3,0x21,0x35,0x71,0xb9,0x73,0x41,0xc2,0xb0,0xa8,0x6a,0x65,0x48,0xc4,0x50,0x31,0xe2,0xba,0xf4,0xe9,0x6c,0x03 +.byte 0x26,0x2c,0x77,0xfe,0x1a,0xd5,0x96,0xf6,0x6d,0xe4,0x14,0xfc,0xe2,0x1d,0x20,0x0c,0x14,0xa2,0x39,0x63,0xe5,0x16,0xef,0x6a,0xeb,0xe1,0x69,0xb8,0x67,0xa0,0x91,0xc1,0x8f,0xed,0xff,0xdf,0x26,0x1f,0xc3,0xb7,0x5d,0xe9,0xd2,0x72,0xe2,0x54,0x27,0x46,0x4f,0x33,0x25,0x59,0xaf,0xfa,0x87,0x4b,0x5a,0xda,0x7d,0x15,0x71,0x5d,0xb4,0x8d +.byte 0x95,0xb6,0x09,0x5b,0x8b,0xeb,0xe6,0xba,0xc8,0x2f,0x8f,0x9e,0xa8,0xab,0x6a,0xa6,0x26,0xb6,0xf5,0x80,0xd0,0x7d,0xe7,0x4c,0x18,0x5a,0x72,0x8f,0x3e,0x90,0xe5,0xa1,0x16,0x33,0x66,0xc3,0x7b,0xf6,0xb6,0xdd,0x15,0x94,0x6d,0xca,0x8b,0xd7,0xa5,0x05,0xfb,0x5f,0x4e,0x94,0x6a,0xcc,0x54,0xed,0xeb,0xc0,0xb1,0xe1,0xc9,0x7f,0xc4,0x90 +.byte 0x2f,0x50,0x34,0x81,0x3c,0x83,0x47,0x3c,0x5a,0xb2,0x33,0x63,0xb6,0xa7,0xfb,0x59,0x70,0x87,0xea,0x7f,0x30,0x22,0xb4,0x54,0x48,0xfb,0x40,0xd2,0x7b,0xc9,0x49,0x80,0x18,0x27,0xc2,0x75,0x09,0x06,0x0a,0x83,0x1e,0x7a,0xf1,0x97,0xa1,0xc2,0x34,0x3f,0x6d,0xd6,0x2d,0xfe,0x5d,0x8b,0xfd,0x64,0x5d,0x6f,0x7f,0xbf,0x4e,0x01,0xb7,0x46 +.byte 0xfb,0xf7,0xd5,0x6f,0x5f,0x74,0xc8,0xca,0x9a,0x2e,0x74,0x08,0xe9,0x3d,0x8b,0xfd,0x97,0x38,0x72,0x67,0xbb,0x8a,0x34,0xee,0xf5,0x3a,0x2b,0x5e,0x64,0x64,0x06,0x7c,0x60,0x0f,0x7a,0x88,0x45,0x1b,0x69,0x90,0xb8,0xb0,0x4d,0x71,0x80,0x77,0xa8,0xaa,0x9f,0xd3,0xc6,0xfb,0xb8,0x12,0x1e,0x0c,0xf4,0x94,0x67,0x44,0xdc,0xb1,0x95,0x0e +.byte 0x51,0xd1,0x06,0x69,0x92,0xbf,0xe6,0x67,0xe3,0xcd,0x0b,0x87,0x03,0x12,0x2e,0xa7,0x23,0x72,0x13,0xe9,0x89,0xcf,0x15,0x43,0xc0,0xa7,0x68,0xbd,0xce,0xec,0x28,0xb6,0x85,0x36,0xbe,0x52,0x5d,0x57,0xfa,0x7d,0x72,0xd1,0x4b,0x88,0xc9,0x64,0xbc,0x7a,0x18,0xe5,0x0e,0xab,0x19,0x81,0xee,0x11,0xbe,0xe0,0x68,0x44,0x81,0x49,0x3f,0xd8 +.byte 0x12,0xd1,0x8b,0xc1,0xe0,0x51,0xf7,0xc3,0x64,0xa7,0xc5,0x61,0x9b,0x32,0x6d,0xf0,0x6c,0xa6,0xaf,0xf9,0x4a,0xdf,0x94,0xaf,0xc8,0xf2,0x86,0xb1,0x4e,0x2e,0xa9,0xb4,0x35,0x82,0x15,0x8a,0x58,0xf3,0x03,0x2f,0x78,0x07,0x8f,0xb9,0x16,0x7c,0x42,0xfa,0x36,0xaa,0xa5,0x66,0x62,0x44,0xca,0xa6,0x55,0x95,0x27,0xdb,0x48,0xea,0x0a,0x1d +.byte 0x5a,0xae,0x5c,0xad,0x99,0xfe,0x00,0xf1,0xb9,0x94,0xda,0x09,0x48,0x52,0x9d,0xfc,0xb4,0xb2,0x80,0x19,0x16,0xf8,0xcd,0x68,0x10,0xec,0x1c,0x16,0x3f,0xbb,0x42,0xb4,0x10,0xe3,0xdb,0xaa,0xe4,0x3f,0x2e,0x8e,0xb5,0xce,0xba,0x8f,0xf2,0xb5,0x76,0x98,0x15,0xa7,0x77,0x4b,0x1c,0x30,0xb7,0x6f,0xc9,0xa9,0xa4,0x64,0x59,0xab,0x3a,0x43 +.byte 0x74,0x33,0xab,0xe1,0x3e,0x5e,0x79,0x1c,0xa5,0xb4,0x87,0xe1,0xcb,0xea,0x0e,0x02,0x4b,0x01,0x84,0xbc,0xdc,0x75,0xf4,0x2c,0x2b,0x8d,0xc8,0x5f,0xb5,0xba,0x6b,0xb2,0x4a,0x7c,0xe7,0xaa,0x61,0xa5,0x0c,0xf8,0x02,0x73,0xec,0x11,0x13,0x6b,0x31,0x07,0xaa,0x79,0x78,0x86,0x01,0x77,0x5e,0xa3,0x09,0xd1,0xec,0xaf,0x7d,0xb7,0x65,0xa9 +.byte 0xd8,0x99,0xd2,0xd7,0x6d,0x32,0x97,0x0f,0x0e,0x51,0x0d,0x69,0x81,0x7a,0x94,0x48,0x31,0xe1,0xff,0x26,0x4d,0x30,0x49,0x93,0xfb,0x6e,0xdb,0xea,0xaf,0xcb,0xb4,0xa9,0xc9,0x9f,0xeb,0xca,0x52,0x36,0x26,0xac,0x47,0xda,0x02,0x3d,0xd0,0x93,0x8b,0x61,0x78,0x26,0x54,0x32,0xe8,0x14,0xac,0xf3,0xd2,0x46,0x04,0x12,0x89,0x9f,0xf6,0x11 +.byte 0xf5,0x64,0x83,0x66,0x00,0x50,0x55,0x05,0xb5,0xf6,0x58,0x9f,0xbf,0x4b,0x95,0xf1,0x7f,0x0b,0xb4,0xf7,0x63,0xea,0x6f,0xf7,0xb0,0x20,0x53,0xfe,0x95,0xbc,0xc4,0xe2,0xff,0x75,0xbd,0xab,0x73,0x68,0x44,0x18,0xf7,0x6b,0x04,0x46,0xde,0x6c,0x65,0xb2,0x22,0x4e,0x25,0x8e,0xba,0x7c,0x3a,0x6f,0x80,0x99,0xb4,0xe7,0xf9,0x97,0x68,0x40 +.byte 0xa9,0x96,0xfc,0x6b,0xcf,0x08,0x75,0xe4,0xda,0x6f,0xaf,0x71,0x4f,0x31,0x62,0x31,0x18,0xbf,0xb9,0xa0,0xcc,0x9e,0xa7,0xa2,0x27,0x2a,0xb8,0x6b,0xc0,0x93,0xf5,0x1f,0x41,0x25,0xa7,0x4d,0x9f,0xb4,0x12,0x5c,0x27,0x38,0x5d,0x80,0x88,0xa3,0xb8,0xb2,0xc3,0xd2,0xfb,0x1d,0xba,0x7b,0xac,0x51,0x0b,0x71,0x58,0x3f,0xe5,0xfa,0x36,0xb8 +.byte 0xc7,0x90,0x46,0xd0,0x5a,0x94,0xf0,0x7d,0x6e,0x6c,0x4c,0xb1,0xfa,0xdb,0x97,0x1e,0x19,0xf2,0x1f,0x4e,0x05,0x25,0x0e,0xbd,0x47,0x94,0x2a,0xd3,0x1a,0xbe,0x4a,0x04,0xaa,0x57,0x02,0xc9,0x42,0xc1,0x74,0xcd,0xe1,0x78,0x8b,0xff,0xc1,0xc6,0x17,0x4e,0x71,0xc4,0x2c,0x00,0x23,0x56,0x57,0x1f,0x47,0xd8,0x93,0x80,0xc1,0xc5,0x7b,0xd9 +.byte 0x25,0x30,0xac,0x72,0x37,0x00,0xd2,0xbc,0xc7,0x33,0x73,0xf9,0x14,0x86,0x7c,0xb0,0x28,0x14,0x5d,0xbf,0xbd,0x98,0x1c,0x00,0x05,0x19,0x2b,0x0a,0x55,0xad,0xb4,0x06,0x28,0x58,0x03,0xa1,0xe6,0x27,0xa3,0x32,0x5f,0x41,0xd5,0x6a,0x0b,0xbc,0x0f,0xaa,0xf5,0xc1,0xa7,0x09,0x2f,0x86,0xda,0x56,0xb0,0x04,0x49,0xd4,0x20,0xc6,0xa2,0x6c +.byte 0x27,0x56,0x4e,0xcd,0x22,0x46,0xac,0x0f,0xd3,0x99,0x69,0x83,0xc4,0xae,0x9f,0x88,0xed,0x9c,0xba,0xfb,0xf3,0x66,0xc7,0x3d,0x65,0x55,0xd0,0xe3,0x04,0x03,0x6a,0x02,0x5c,0xbf,0x9f,0x23,0x34,0x79,0xe1,0xbe,0x7d,0xad,0xb4,0xc7,0x9e,0x4d,0x80,0x73,0x6d,0xe5,0x37,0x03,0xac,0xa3,0xf4,0x93,0xad,0x1e,0xf3,0xcd,0xb8,0xe2,0xeb,0x30 +.byte 0xc7,0x50,0xfe,0x0a,0x63,0x5e,0x0f,0xc9,0xd0,0x06,0x58,0xc1,0x6e,0x65,0x54,0x54,0x5d,0xaf,0xf1,0xe8,0x3e,0x95,0xe3,0x70,0x40,0x8e,0xb8,0x4d,0x76,0xda,0xa8,0xe8,0x9e,0x88,0xd8,0xaf,0x67,0x83,0x3b,0x77,0x65,0x58,0x00,0xbb,0xf7,0xe9,0x52,0xf0,0xba,0x0d,0x0a,0x59,0x28,0xe4,0xa7,0xfb,0x06,0xe5,0x34,0xbe,0xcf,0x10,0x7c,0x73 +.byte 0xa8,0xf3,0xa2,0x93,0x96,0x9e,0x4f,0x9b,0x3c,0xd1,0x9f,0x64,0x5b,0x8c,0xc1,0x89,0x66,0x67,0x13,0x52,0xb2,0xaa,0x6b,0x8e,0xea,0x97,0x27,0x20,0x2e,0x64,0xec,0xf0,0x72,0xc9,0x54,0x8a,0xed,0x78,0x3a,0xd7,0x4f,0xc2,0xba,0xc3,0xb8,0x64,0x7f,0xe4,0x5f,0x3d,0xf7,0xe5,0xd9,0xf1,0x8d,0xb1,0xd2,0xf6,0xcc,0x34,0xd8,0x7d,0x16,0xca +.byte 0x47,0xaf,0x85,0xe5,0x4a,0x57,0xb9,0x5a,0x9e,0xff,0xb8,0x83,0xec,0x7c,0xb8,0x07,0xf5,0xd3,0x31,0x31,0x2b,0xf0,0x40,0x46,0xc3,0x63,0x27,0xe4,0xb0,0x3b,0x84,0x0d,0x50,0x05,0x80,0x0c,0xfa,0x8b,0x0e,0x33,0x6b,0x10,0xd4,0xf5,0x4f,0x8b,0x2d,0x9e,0xc5,0x01,0x92,0x52,0x62,0x1a,0x89,0x1e,0xca,0x48,0xc3,0xd6,0xfa,0xd2,0x94,0x7c +.byte 0x77,0x6e,0xa7,0xeb,0xd7,0x4f,0xe8,0xc8,0xc2,0x71,0xb2,0x9e,0x86,0x30,0x18,0xfd,0x4c,0x56,0x4c,0xd0,0xa4,0x84,0x37,0x02,0x02,0x6a,0x8d,0x57,0x6b,0xc2,0x06,0xd1,0x8a,0xdb,0xa0,0xcc,0x31,0xf9,0xcf,0xbf,0xf2,0x29,0x7c,0x26,0xac,0x1f,0x03,0x20,0x26,0x76,0x03,0x6f,0xa5,0xb5,0x33,0xfb,0x02,0xe8,0xf6,0xe9,0x5e,0xb1,0x36,0x7c +.byte 0x96,0x56,0xb1,0x98,0x2d,0x9c,0x38,0x9b,0xd4,0x56,0x28,0xcc,0xdb,0x08,0xd3,0x42,0x00,0x35,0x24,0xd9,0x74,0xa2,0x0d,0x55,0x21,0x06,0xb7,0xf9,0x6a,0xa0,0x81,0xc1,0x2d,0xb6,0x67,0x91,0x92,0x24,0x36,0xfd,0x2e,0xd8,0xc0,0xcb,0xc8,0x87,0x1a,0x41,0x11,0x70,0xbf,0xd2,0xe7,0x82,0x10,0x74,0xdf,0x65,0x46,0x19,0x6b,0xb4,0x89,0xeb +.byte 0x9e,0xcf,0x79,0x35,0xba,0x25,0x75,0x32,0x64,0x6a,0xfb,0xaf,0xe5,0xed,0x85,0x98,0x34,0x75,0x31,0x40,0xbb,0xd8,0xe3,0xf5,0xa7,0xa2,0x9a,0x9e,0xcd,0xc4,0xf8,0xd8,0x15,0x6c,0x64,0x0c,0x6c,0x16,0x60,0xe9,0x40,0xf4,0x7a,0x14,0x37,0x7b,0x45,0x9b,0x0e,0x29,0x7a,0x1a,0x88,0x10,0xb9,0x2b,0xee,0x13,0xbd,0x8a,0xde,0x7a,0xe9,0x30 +.byte 0xe8,0x39,0x77,0x74,0xf5,0x2f,0xe3,0x10,0x19,0x89,0x28,0x21,0x3a,0x68,0x38,0xb4,0x4d,0x20,0x8d,0x7d,0xec,0x3f,0xf7,0x61,0xbf,0x53,0x32,0x3b,0xb8,0x6a,0xc9,0x58,0xeb,0xd4,0x33,0x0e,0xee,0xc7,0xb9,0x5e,0x3d,0x17,0x7e,0x36,0xa2,0xa6,0x94,0xb1,0x56,0xb6,0x8e,0x94,0x05,0x50,0x69,0x52,0x4f,0x31,0xe5,0x97,0x18,0xde,0x8f,0xb7 +.byte 0xff,0x2e,0x6f,0x1b,0x6a,0xda,0xfd,0xa1,0xd1,0x9a,0x4e,0x6a,0x1b,0x46,0x71,0x52,0x76,0x66,0xf9,0x70,0x8d,0x7d,0x97,0xb0,0xc3,0x8d,0xbc,0x35,0x26,0xe8,0x0b,0x80,0xc7,0x58,0x19,0x22,0x70,0x33,0x06,0xeb,0xcf,0x26,0x22,0xe0,0x97,0x91,0xbf,0xd6,0x94,0x05,0xe1,0x84,0xe2,0x31,0x66,0x57,0xc7,0x1e,0x36,0x30,0x50,0xaf,0x72,0xb3 +.byte 0x31,0xad,0x84,0xcc,0xb5,0x76,0x03,0xe1,0x56,0x97,0x87,0x36,0xf5,0xaa,0x97,0x99,0x38,0xa5,0xf5,0xb7,0x42,0x86,0x3b,0x2f,0x8a,0xb9,0x8e,0x6a,0x0b,0xe0,0xca,0xbc,0x4c,0x6c,0xc1,0x3f,0xbe,0x45,0xef,0xd2,0x57,0xcd,0x29,0xfb,0xfb,0xa5,0x79,0xf2,0xb1,0xbb,0x4b,0x55,0x26,0x2f,0x5c,0x84,0x5e,0x6a,0xc6,0xa9,0xd5,0x23,0xe4,0xd1 +.byte 0xe5,0xf0,0xbc,0x50,0x6a,0x2a,0xaf,0xa2,0x7c,0xcc,0x36,0x95,0xf9,0x5c,0x04,0x6d,0x04,0x31,0xbe,0x1d,0xb2,0x50,0x97,0x8f,0xdf,0x8a,0xed,0x4e,0x4e,0x0a,0x0b,0xfc,0xfc,0x1d,0xa9,0x6a,0x76,0x6a,0x33,0xd7,0x0a,0xcf,0xd5,0xdd,0xc6,0x62,0xe5,0x59,0x02,0xba,0x9c,0x43,0x32,0x8a,0x0e,0x47,0x91,0x00,0x07,0x47,0x93,0xc4,0xad,0x29 +.byte 0x33,0x57,0x15,0x45,0x44,0xb9,0xf3,0xc4,0xe6,0xd2,0xb9,0x3a,0x44,0x16,0x32,0x8d,0x57,0x78,0xac,0xf5,0xdb,0xa2,0x93,0x97,0x64,0x08,0x9b,0x66,0x4b,0xa0,0x64,0xab,0xa0,0xd6,0x0e,0x2c,0xa1,0x25,0x16,0x5c,0x6f,0x82,0xff,0x8e,0x89,0xfb,0xca,0x03,0xa6,0xf8,0xa1,0xf6,0x87,0x02,0x5c,0x90,0xcb,0x33,0xa0,0xc0,0x90,0xc2,0x1f,0xdd +.byte 0x5c,0x50,0x93,0xf2,0x8b,0x87,0xa1,0x73,0xda,0x5f,0xa3,0x20,0xd4,0xe7,0x45,0xd7,0xea,0x4b,0x5d,0xd6,0x80,0xfc,0x2d,0xdc,0x45,0x6a,0xf6,0xaf,0xd4,0x7a,0x91,0x64,0x15,0x17,0xbf,0xc7,0x58,0x54,0x7c,0x08,0x42,0x4f,0x8d,0xab,0x9b,0xd0,0x1d,0x57,0x71,0x50,0xa7,0xe3,0xb4,0xf2,0x14,0x0c,0xd7,0x2f,0x7c,0x8b,0x17,0x61,0x98,0xfa +.byte 0x19,0x34,0xb9,0x65,0xc5,0x5c,0xfe,0xa3,0x80,0x6f,0x99,0xec,0xfa,0x06,0x22,0x71,0xa9,0x10,0x2a,0xcf,0x12,0xb3,0x17,0xe5,0x59,0x3a,0xaa,0xcb,0x55,0x5f,0x45,0x9d,0xe9,0x29,0x56,0x34,0x11,0x62,0x6e,0x0a,0x95,0x12,0x5d,0xd4,0xa2,0x28,0x05,0xf1,0x0f,0x2d,0xa0,0x1e,0xe1,0x2b,0x42,0x6c,0xf0,0xe6,0x47,0xe0,0xb2,0xbd,0x89,0x20 +.byte 0x5e,0x24,0x05,0xec,0xf1,0x33,0xfc,0xa9,0x2f,0xef,0x3a,0x1f,0xfe,0x39,0xfe,0x01,0x09,0x0a,0x2a,0xe0,0x96,0x1e,0xde,0xad,0x96,0xaa,0x48,0xeb,0x8a,0xe6,0x54,0xbb,0x5d,0x7a,0xbe,0x4a,0xbf,0x96,0xf6,0x15,0x7a,0x70,0x6f,0xee,0xe7,0xf5,0x53,0xaf,0xe1,0xbb,0xaf,0x58,0x51,0xd4,0xa0,0xc6,0x44,0x03,0x47,0x33,0xce,0x58,0x62,0xd3 +.byte 0x93,0x21,0xa5,0xa5,0xb4,0xef,0x1d,0x93,0xcc,0x8c,0xf7,0x14,0xe3,0xec,0x40,0x52,0x47,0xe6,0xbc,0xe6,0x85,0x69,0xd0,0x15,0xad,0x24,0x21,0x4f,0x26,0x01,0x60,0x0f,0x0f,0xcb,0x7e,0x14,0x01,0xe1,0x90,0x11,0x06,0x17,0x38,0x2d,0xd8,0x26,0xe2,0x7c,0xd6,0xef,0xe0,0x59,0xf0,0x8c,0x2a,0xbd,0xba,0xe5,0x8b,0x07,0x56,0xd3,0x35,0xb3 +.byte 0x64,0x83,0x9e,0xb9,0xb9,0xeb,0x88,0x03,0xff,0x14,0xf3,0x8b,0x14,0xd3,0xa4,0xac,0x08,0xd9,0x75,0xf6,0x2c,0x9d,0x7f,0xc8,0x9d,0x11,0x3b,0xd1,0x71,0x14,0x4b,0x2a,0x6d,0x20,0x83,0x32,0x35,0x7e,0x1f,0x20,0xa6,0x69,0xbf,0xcf,0x22,0xd9,0xa2,0x57,0x4b,0x66,0xb1,0x9f,0x5a,0xa8,0xaa,0xb8,0x11,0x1d,0x45,0x28,0xac,0x86,0x09,0x37 +.byte 0xe9,0x1f,0xef,0xb4,0xe0,0x6f,0x75,0xad,0xe5,0xd8,0x25,0x06,0x19,0xb4,0xa8,0x07,0x78,0x79,0x43,0x63,0x40,0x26,0xbd,0x28,0x50,0x2d,0x29,0x26,0xf9,0xfc,0x5c,0x71,0x8f,0xfd,0x62,0x12,0x7c,0xd0,0x67,0xb3,0x65,0xef,0x31,0xc0,0x99,0xc1,0x54,0xfc,0x32,0x6e,0x25,0x56,0x77,0x6e,0xc1,0x6b,0x11,0x50,0x7c,0xa1,0x0b,0x97,0x8a,0xfe +.byte 0x0f,0x5b,0x16,0x93,0x83,0xe0,0xd8,0xb7,0xbf,0xa8,0x90,0x6d,0xd6,0x8b,0x4b,0xd9,0x17,0xbb,0xe8,0xd9,0xbb,0x5f,0x39,0x4a,0x33,0x7c,0xb3,0x12,0x99,0x1e,0xfc,0xb2,0x05,0x91,0x67,0xdf,0x8d,0x0b,0x55,0xfb,0xd1,0x8d,0x0c,0x9b,0x80,0x81,0xee,0x8c,0x05,0xe2,0x16,0x30,0xad,0x1f,0x88,0x04,0x75,0xc1,0xe5,0xec,0x32,0xf8,0xa0,0x5b +.byte 0x21,0xf6,0xd8,0x13,0x26,0xe4,0xa1,0x32,0xa8,0x93,0x91,0x5d,0x33,0x45,0x83,0x72,0x52,0x59,0x23,0x84,0xf6,0x7b,0xe2,0x90,0x20,0xc6,0x40,0x33,0xa9,0x94,0xcd,0xb9,0xab,0xe4,0x44,0x0b,0x06,0xbb,0x4c,0x2c,0x2a,0x5e,0x4d,0x57,0xb7,0xe0,0xb8,0x86,0x74,0xab,0xea,0x37,0x1c,0xa0,0xa6,0x21,0x33,0xc7,0xf5,0x24,0x7d,0x14,0xc8,0x8b +.byte 0x9d,0x8f,0x31,0x23,0x29,0x9d,0x11,0x42,0x07,0xe8,0x2c,0xec,0x7d,0x70,0x8d,0xb5,0xa4,0xca,0x33,0x30,0x03,0x75,0x17,0xa1,0x10,0xe7,0x6b,0x87,0xf9,0x0b,0xef,0x43,0xef,0xf8,0x24,0xc2,0xf1,0x7a,0x1a,0x70,0x7e,0x2f,0xd4,0xeb,0x97,0x40,0xa6,0xe6,0x2d,0xc1,0xd8,0x3b,0xee,0xa4,0xda,0xd3,0x50,0x41,0x18,0xbf,0xad,0x66,0x02,0x85 +.byte 0x60,0x14,0xcf,0xce,0x50,0x88,0x5e,0xb6,0x73,0x11,0xbb,0x6a,0xca,0xb1,0x46,0x8e,0xbb,0x58,0x2c,0x63,0x61,0x20,0xec,0xc9,0x98,0x0c,0xdb,0x5c,0xe5,0x47,0xb5,0x89,0xe9,0x14,0xc8,0xbc,0x35,0xf2,0xa7,0x2d,0x84,0xcc,0x61,0xc8,0xb6,0x9d,0xeb,0xcb,0x8b,0x73,0x90,0x6d,0x06,0xc9,0x42,0xcf,0xd2,0x15,0x80,0x2d,0x39,0xeb,0x71,0x83 +.byte 0x27,0x0d,0x85,0xf9,0xa3,0xce,0xef,0x29,0x3b,0x10,0xb7,0xe9,0xd0,0x86,0x6e,0x88,0x1e,0x3b,0xdd,0xaf,0x52,0xde,0xa2,0xa4,0x13,0x3c,0x1f,0xcb,0x84,0x74,0x12,0x04,0x91,0x40,0xb8,0x1b,0x15,0xfd,0xdb,0xe8,0x74,0xcc,0x4d,0x41,0xb5,0x5a,0x92,0xd3,0x71,0xf7,0x57,0xa5,0xf7,0x18,0x5a,0x57,0x36,0xde,0x8f,0xb2,0x81,0x59,0xc8,0x5c +.byte 0x22,0xcf,0xdc,0x7d,0xff,0x83,0xf2,0xad,0x8c,0x7b,0xd5,0x04,0xc4,0xb9,0x79,0x4a,0x12,0xa7,0xb1,0x7e,0x57,0xa5,0x6b,0x56,0x8a,0x11,0x96,0x57,0xde,0x35,0xdd,0xef,0x9b,0x03,0x41,0xde,0x61,0x5b,0x73,0x8c,0x6a,0x0c,0x6f,0xae,0x45,0x4b,0x56,0x4d,0xbe,0x8a,0x3f,0xdb,0x79,0x58,0x88,0xad,0xcb,0xfa,0x66,0x06,0x0e,0x74,0x21,0x1d +.byte 0xe1,0x94,0xd7,0x06,0xea,0x60,0xe2,0x7d,0x70,0xcf,0xa9,0x4f,0xe6,0x9b,0xba,0x19,0x71,0x69,0x94,0x66,0x5a,0xb8,0x49,0x0c,0xd1,0x9a,0xc4,0x5f,0xa7,0xf4,0x9e,0x3d,0x9e,0xc2,0xd8,0x0e,0xd2,0x6d,0xc6,0xc8,0x99,0xc3,0x5e,0x3b,0xb9,0xd8,0x48,0xc0,0x38,0x48,0x95,0x89,0xff,0x7e,0x1d,0x80,0x53,0xac,0x7b,0xd7,0xfc,0x6f,0x5d,0x25 +.byte 0x2f,0xcf,0x15,0xdb,0x1a,0x64,0xc1,0x16,0x91,0x65,0x84,0x99,0x0a,0xc1,0xbf,0x4d,0x11,0xa5,0x55,0x55,0x35,0x93,0x6f,0x47,0xf1,0x75,0xb8,0xb6,0x11,0x9d,0x6e,0x3b,0xd1,0x11,0x20,0xa2,0xa2,0x5c,0x33,0x85,0x09,0xb8,0x13,0xc9,0xdd,0xf2,0xd4,0x32,0x37,0xf2,0xef,0x47,0xfa,0x25,0x1a,0xcc,0xdf,0xf4,0xe4,0x2c,0x2c,0x7f,0x23,0xb6 +.byte 0xa8,0xd4,0x6a,0xd4,0xb4,0x06,0x2e,0xb0,0xaa,0xa1,0x18,0x8a,0x5c,0xc6,0xb2,0x4c,0x71,0x92,0x4a,0xdc,0x81,0x20,0x51,0x8d,0x3f,0x71,0x7d,0x8c,0x25,0x79,0x07,0x14,0xa9,0x7a,0x8b,0xda,0x00,0xfc,0x51,0xdb,0xa0,0x50,0x2b,0x15,0x39,0xf6,0xad,0xdc,0x9e,0x22,0x93,0x2f,0x43,0xd8,0x5c,0xa2,0x5e,0xfa,0x70,0x8c,0xe0,0x6b,0x0e,0x93 +.byte 0x6c,0x89,0xfe,0x22,0x4c,0xec,0xb0,0x7e,0xc1,0x06,0x69,0xf7,0x2f,0x3e,0xe5,0xa4,0x45,0x53,0xab,0x9c,0xf5,0x40,0x05,0x53,0x64,0xc6,0xa7,0xf9,0xc4,0xd6,0x89,0xd9,0x47,0x72,0x8e,0x42,0xf9,0x64,0x12,0xeb,0xd9,0x25,0xdc,0x4c,0xc6,0xea,0x9c,0x4b,0x93,0xb4,0xa2,0xa6,0xae,0x95,0xc1,0x84,0x75,0xc9,0x22,0xe3,0x22,0x81,0x31,0xd1 +.byte 0xfd,0x2e,0x91,0x4a,0xc3,0x00,0xa6,0x57,0xbb,0x89,0x9f,0x2d,0xc3,0x2e,0x1f,0xa2,0x47,0xc4,0xa3,0xcd,0x2b,0xc2,0x29,0xaf,0x89,0xce,0x2e,0x87,0x8e,0xd8,0xfc,0xee,0xab,0x8a,0xbd,0x2f,0xee,0xcf,0x94,0xe0,0x74,0x70,0x86,0x00,0x42,0x11,0x8b,0x6c,0x81,0xd4,0x82,0xf2,0x29,0x3e,0x9c,0x68,0x71,0xaa,0x20,0x0a,0x51,0x5d,0x80,0x4c +.byte 0xca,0x04,0x23,0x23,0xe2,0x69,0xb3,0xf5,0x65,0x98,0x19,0xee,0xa9,0x4d,0xd8,0xe0,0x06,0x4b,0x17,0xed,0xfa,0xf2,0xe3,0xd3,0x69,0x48,0xe4,0x4e,0xc0,0x5a,0x16,0x90,0xdb,0xb6,0x32,0x6e,0x6b,0xd7,0x7a,0xb6,0xd4,0x82,0xe4,0xcc,0x31,0x31,0x5c,0x18,0x84,0xef,0x75,0x9f,0xda,0xf6,0x62,0x2d,0x96,0x4d,0xa1,0x3c,0xb5,0x4a,0xbb,0xbf +.byte 0x9d,0xb3,0x33,0x00,0xc1,0x73,0xc5,0xb2,0xeb,0x85,0x74,0xb0,0x68,0xed,0x16,0x66,0x71,0xc9,0x7e,0x6f,0x74,0xa6,0xe7,0xed,0xf0,0xfa,0xab,0x41,0xdd,0x10,0xf9,0xff,0x4c,0xb6,0x4f,0x15,0xe3,0x77,0x31,0x17,0x5c,0x5a,0xef,0xb2,0xa9,0x44,0xbe,0x97,0xa9,0x75,0x5a,0xb7,0xe0,0x16,0x17,0x37,0x1b,0x71,0x03,0xb9,0xaa,0x7b,0x7b,0x52 +.byte 0x46,0x58,0x6b,0x9b,0x87,0x27,0xa6,0x8a,0x0e,0x84,0x03,0x45,0x95,0x04,0xf1,0x7e,0xb6,0xf6,0x79,0xd5,0x66,0x6d,0x50,0x8c,0x5a,0x67,0xe0,0xdd,0x69,0xd8,0x92,0x75,0x15,0xcb,0xa5,0x05,0xfe,0x7a,0xc1,0xd6,0x11,0x57,0x10,0xa3,0xc3,0xb6,0xe9,0xe3,0x97,0xa5,0x46,0xc9,0xe9,0x9b,0x68,0xb6,0x55,0x0b,0xf2,0x17,0x9d,0x0e,0x7f,0xd9 +.byte 0x26,0x0c,0x01,0xff,0x95,0xe1,0x05,0xb7,0xbf,0x0d,0x77,0x12,0x96,0x03,0x71,0x01,0xc9,0x98,0xb4,0x44,0x94,0xc0,0xad,0x3d,0xfc,0x6f,0xe5,0x0c,0xa4,0x65,0xd7,0xe7,0x76,0x7c,0xb8,0xa0,0x0a,0xcd,0xe8,0x01,0x26,0x8e,0x94,0xec,0x94,0x65,0x86,0xee,0x4d,0x3b,0xc5,0xb5,0x2e,0x51,0xb7,0xa9,0x68,0xcd,0x14,0x90,0xd8,0x36,0xfb,0x52 +.byte 0x04,0x52,0xb4,0xca,0x9b,0xbf,0xc6,0x94,0x28,0xc5,0x7e,0x27,0x73,0xae,0x6d,0xba,0xe7,0x56,0xce,0x2e,0x00,0xeb,0x36,0x19,0xd7,0x4f,0x20,0x5e,0xfd,0x0f,0xd4,0x4c,0x02,0xaf,0xdb,0x74,0xef,0xf0,0x73,0x1e,0x2a,0x1a,0xe7,0x3a,0xe0,0xa5,0x89,0xcf,0x1a,0x66,0xbd,0x72,0x65,0xb4,0xf4,0x86,0x33,0x44,0xee,0x35,0xf6,0x09,0xbe,0x13 +.byte 0x96,0x84,0x04,0x95,0x3f,0x35,0xbb,0x01,0x2c,0x78,0x25,0xe8,0x1e,0x46,0xdb,0xd9,0xb1,0xe8,0xfb,0x2b,0xa8,0x59,0x72,0x5f,0x91,0xd3,0x7c,0x21,0x95,0xa9,0x50,0xa2,0x45,0x6f,0x48,0x0c,0xf2,0x51,0x10,0x3c,0xcd,0xea,0xeb,0x5d,0xc7,0xf9,0x0e,0xae,0x1a,0x02,0x05,0x15,0x12,0x10,0xc0,0x35,0x12,0x97,0xcd,0x5b,0x61,0x4f,0xd1,0xd3 +.byte 0x5b,0xec,0x2b,0xa0,0x20,0x03,0x2b,0xf3,0xe6,0x71,0x23,0xca,0x1d,0x48,0x64,0x3f,0x7e,0x52,0x8b,0xf9,0x96,0x33,0x31,0xbc,0xbd,0x73,0x2f,0xa6,0x80,0xb8,0x0b,0x3a,0xd7,0xf8,0x05,0xf0,0x06,0xc7,0xa5,0xce,0x6a,0x6a,0x62,0xae,0x06,0x93,0xa4,0x5f,0x0b,0x5d,0x4d,0xb8,0xa4,0xfa,0x2e,0xfc,0xb6,0x58,0x8c,0x2a,0x46,0xa4,0x55,0x1f +.byte 0x9b,0x9b,0x13,0xdd,0x17,0x2a,0x3d,0x04,0x51,0xb6,0xbe,0x9c,0xca,0xf3,0x23,0xb6,0x7b,0x7a,0x92,0xb7,0x2f,0xf9,0x69,0x9a,0xee,0xb3,0xa1,0x60,0x56,0xcf,0x9d,0xab,0xfe,0x86,0x7a,0x41,0x94,0x15,0xbe,0xa3,0xa5,0x85,0x09,0xfb,0x7b,0x89,0xbd,0xc3,0x09,0x10,0xa6,0xfc,0x41,0x8e,0x57,0x27,0xdc,0x58,0xf4,0x01,0x7c,0x31,0x5e,0xca +.byte 0xaf,0x31,0x2f,0x98,0x8b,0xbe,0x19,0x16,0xa1,0x81,0x7e,0xb3,0xa9,0xc5,0x15,0xd2,0xad,0x51,0xa1,0x73,0x56,0xd3,0x6a,0x15,0x35,0xe3,0xb1,0xdb,0x83,0x4c,0xe2,0x85,0x8c,0x03,0x12,0xc4,0x64,0x69,0xc0,0x23,0x16,0x7b,0x68,0x46,0x44,0x22,0x84,0xa6,0xb5,0xe4,0x90,0x91,0xc1,0xdd,0x25,0x7c,0x54,0x0e,0xce,0x5b,0x11,0xe4,0x50,0x1c +.byte 0x3c,0x0d,0xc7,0xc1,0x0c,0x10,0x2d,0x8b,0xb7,0xde,0xe2,0x4f,0x7e,0x22,0x53,0xfc,0x07,0x55,0x19,0x14,0x3b,0x33,0xf5,0xf3,0xd8,0x7b,0x5e,0x40,0xa2,0x81,0x6d,0x40,0x0d,0x20,0x36,0x4b,0xa1,0x34,0x34,0xac,0x43,0x59,0xb5,0xb1,0x90,0x8b,0x48,0xcf,0x15,0x57,0x17,0x0e,0xd0,0xbf,0x28,0xcd,0xa4,0x77,0x4d,0xae,0x09,0x4c,0x67,0x51 +.byte 0x18,0xaa,0xb4,0xc9,0x35,0x41,0x0b,0x34,0x4d,0xb3,0xef,0x3f,0x46,0x97,0x6e,0xae,0x75,0xd7,0x6a,0x2b,0x22,0x9c,0xef,0x8e,0xaf,0x72,0xb0,0x14,0x90,0xbd,0x11,0x90,0xde,0x9a,0x02,0x8c,0x20,0xf5,0xc7,0x33,0x4d,0x94,0x88,0x9a,0x6c,0x18,0xb4,0xc0,0xa9,0x94,0x07,0x9a,0x4b,0x10,0x8f,0xe8,0x25,0xcd,0x9b,0xf5,0xfa,0x91,0x8a,0xc0 +.byte 0x93,0x61,0x1c,0x00,0xd1,0x34,0x9a,0x29,0xa3,0x35,0x38,0xe4,0xa7,0x9f,0xb6,0x88,0x0f,0xad,0x88,0x96,0xa0,0x73,0xe7,0x10,0xea,0x36,0xe8,0x88,0x6c,0x7f,0x03,0xbc,0xfe,0xe0,0xb2,0x4b,0x24,0x98,0xf6,0x73,0x6f,0xab,0x00,0x1e,0x26,0x83,0x0d,0x86,0x5b,0xa6,0x51,0x8f,0x5f,0xa9,0x8f,0xf4,0xa0,0x51,0xff,0xe0,0x64,0x09,0x95,0xfb +.byte 0x56,0x53,0x18,0x61,0xea,0xc5,0x33,0xe8,0x6f,0x8a,0x07,0x97,0x1a,0x6c,0xb5,0xf8,0x73,0xae,0xe4,0x4e,0x6d,0xb2,0x83,0x20,0xfa,0xfd,0x79,0xa6,0x6c,0xaa,0x9b,0x7b,0x2c,0xfe,0x63,0x73,0xbc,0x87,0xd4,0x56,0xd1,0xb1,0xf1,0x0f,0x72,0x2c,0x2f,0xf0,0xf0,0x53,0xe2,0x6c,0x19,0x0d,0x9c,0xad,0xc8,0x0a,0x62,0x72,0xcb,0xc3,0x12,0x90 +.byte 0x4c,0x26,0xe3,0xa0,0x07,0x35,0xee,0xaf,0x81,0x35,0x07,0xa9,0x31,0xa0,0x59,0xc8,0x40,0xa5,0x45,0xb6,0x6d,0x3e,0xa2,0x5f,0x6a,0x79,0x74,0x65,0xa1,0xe3,0x1c,0xca,0xae,0xcc,0xa6,0xb6,0x0a,0x12,0x99,0x8e,0xc3,0xef,0x43,0xcf,0x42,0x92,0xa4,0x12,0xa3,0x8b,0x97,0x7d,0x6f,0xe0,0x35,0xed,0xac,0x69,0xae,0x8c,0xe1,0x32,0x11,0xa4 +.byte 0xe0,0x76,0x7f,0x75,0x92,0xda,0xfe,0x94,0x33,0xeb,0xe1,0xa4,0x3c,0x95,0x7c,0xc6,0xbc,0x3d,0xf2,0x39,0xa1,0x29,0x39,0x24,0x09,0xd4,0x52,0x68,0xfb,0x80,0xd0,0xd4,0x57,0xc6,0x4c,0xa5,0xa6,0x90,0xa6,0x61,0x15,0x2f,0xd3,0x35,0x36,0xf5,0x16,0xb3,0x65,0x0a,0xc4,0xcb,0x7f,0x73,0xe4,0xba,0x9a,0xd8,0x8b,0xc3,0x01,0xa0,0x08,0x57 +.byte 0x9e,0x26,0x54,0xbc,0x55,0xd1,0x5f,0xaa,0xb5,0x0d,0x42,0x75,0x04,0x76,0x8c,0xef,0xcf,0x64,0x3a,0x2e,0x4c,0x78,0xe5,0x37,0x8d,0x55,0xec,0xc1,0x7b,0xce,0x5f,0x5f,0x43,0x8b,0xdd,0x46,0x43,0xf5,0xa8,0x41,0xa6,0x82,0x1b,0x12,0xcb,0xcb,0x6d,0xa1,0x6c,0xb6,0x79,0x46,0x12,0x89,0x12,0x61,0xd6,0x4f,0xf9,0x43,0x2d,0x27,0xa9,0x61 +.byte 0x2e,0x2a,0x29,0x1b,0x6d,0xad,0x32,0x0b,0x6c,0x7c,0xf4,0xb8,0x98,0x91,0xbb,0x78,0xda,0x85,0xe8,0xfb,0x4e,0x11,0xc4,0x2a,0x07,0x54,0xa0,0x67,0x73,0x1b,0xa4,0x60,0x15,0x5c,0x83,0xbf,0x3f,0xd9,0x61,0x30,0x02,0xbb,0xa6,0x67,0xcd,0x0c,0xd1,0xb4,0x11,0x7e,0xca,0xf4,0x1e,0xed,0x83,0x34,0x66,0x54,0x23,0x39,0x36,0x8c,0xa0,0xc6 +.byte 0xef,0xad,0xa1,0x95,0x04,0x20,0x46,0x42,0xa8,0x99,0xd2,0x98,0xc6,0x0a,0x92,0x11,0xd1,0x84,0x4a,0xbf,0x25,0xe5,0xcf,0x78,0x98,0x81,0x80,0xaa,0x31,0x0a,0xa4,0xfb,0xef,0x35,0xfa,0xa4,0xac,0x5f,0x01,0x6b,0xb7,0x8e,0x86,0xc1,0x46,0x97,0x88,0xe2,0xaa,0x3b,0x1f,0xb5,0xf8,0xa9,0x90,0xf0,0x45,0x6d,0xdd,0xa3,0xdd,0xd8,0xef,0x36 +.byte 0x6f,0x87,0x55,0xf6,0x96,0xcd,0x88,0x43,0x03,0x97,0x82,0xea,0x5a,0x1c,0xa1,0x1a,0x7b,0x1b,0xa7,0xfc,0xaa,0x86,0xb4,0x71,0xde,0x0d,0x0a,0x52,0x98,0xd2,0x65,0x5d,0xa4,0xea,0x91,0xc9,0xe4,0x8b,0xd0,0xdb,0x85,0xe3,0x86,0x85,0x50,0xe1,0x41,0x1f,0x48,0x97,0x64,0xec,0x34,0xe4,0x54,0x42,0xf4,0x01,0xed,0x6f,0x4d,0xe3,0x1f,0x86 +.byte 0x14,0xbc,0x01,0x9c,0x7f,0x02,0x0c,0x65,0x94,0xd2,0x90,0x2c,0x1b,0xab,0x41,0x88,0xad,0x58,0xb5,0x71,0xd3,0xd6,0xe1,0x3f,0xf3,0x3c,0xb6,0xab,0x22,0x08,0x17,0xc7,0xf5,0x7e,0x34,0x56,0xae,0x1d,0x1e,0x7e,0xdb,0x24,0xe2,0xc2,0x38,0xf3,0x4d,0x46,0xe4,0x45,0xcb,0xb7,0x2f,0x0f,0x96,0x72,0x7e,0x31,0x89,0x17,0x9c,0xed,0x85,0xb9 +.byte 0xc8,0x8f,0x65,0x93,0xfb,0xb8,0x9e,0x41,0xa2,0xc1,0xcf,0xdb,0xe2,0x4c,0x26,0x4a,0xc7,0x2a,0x72,0xf6,0x28,0xbc,0x18,0x22,0xde,0xa1,0xfa,0x46,0xbe,0x95,0xc8,0xe2,0x19,0xbb,0x20,0x7b,0xd5,0xf8,0x34,0x15,0xaa,0xec,0xe2,0x9e,0xa9,0x3d,0xa1,0xd9,0xaa,0xc9,0x18,0x39,0x07,0x5c,0x81,0x61,0xe7,0x00,0xc5,0x57,0x3e,0xca,0x4d,0x89 +.byte 0x33,0x02,0xa6,0xc8,0x15,0xb7,0x24,0xdd,0x5c,0x55,0x56,0x11,0x5c,0x17,0x1b,0xda,0xc6,0xd5,0x46,0x6e,0x9f,0x70,0xe7,0x1e,0x41,0xee,0x91,0x1a,0xa0,0xad,0x35,0x64,0xdf,0x4a,0x18,0x03,0xa7,0xa8,0x88,0x8f,0x65,0xbc,0x76,0x34,0x08,0xab,0x50,0xc6,0xd3,0x08,0x7c,0xc1,0x4f,0x77,0xcd,0x1a,0xc6,0xed,0x35,0xea,0x4e,0x8a,0x6a,0x38 +.byte 0xa3,0xa3,0xd8,0xa9,0xa2,0x68,0xa7,0xd8,0xe0,0xc8,0x3f,0xfe,0xe7,0x73,0xc6,0x6b,0xd8,0x0c,0xd5,0x8f,0x81,0xe7,0x37,0x08,0x93,0x28,0x73,0xef,0xc4,0x91,0x52,0xa5,0x30,0xff,0x47,0x95,0x02,0x0d,0x8c,0xfd,0xc9,0x28,0x60,0xa9,0xad,0x30,0x00,0xcc,0x3a,0x00,0xbb,0x25,0xab,0xd0,0xf8,0x25,0x46,0x20,0xc0,0x67,0x9b,0xd6,0x10,0xa6 +.byte 0x84,0x6f,0x66,0x60,0x66,0x75,0xb6,0xfb,0x39,0x3a,0x9f,0x7d,0x32,0x7f,0x12,0x6f,0x8c,0xed,0x79,0x40,0x47,0xa3,0x27,0x17,0xa8,0xa4,0x02,0x93,0xb9,0x32,0x03,0x34,0x06,0x76,0x71,0x40,0x90,0x2b,0xe7,0xd0,0x3f,0x59,0xa7,0xfb,0x3a,0x7b,0xc8,0xa5,0x86,0x21,0x0d,0xf6,0xc6,0x49,0x07,0x56,0xe9,0xfc,0xac,0x61,0x30,0xa5,0x7e,0x90 +.byte 0x10,0xc8,0xdb,0x15,0x2b,0x75,0x27,0x77,0x51,0x42,0xcf,0x50,0xe8,0x6c,0x0b,0xb7,0x17,0x1a,0x89,0x7d,0xfe,0xd2,0x75,0xfa,0xb7,0xe5,0x68,0x10,0x1c,0x27,0x85,0x8b,0x52,0x7d,0x87,0x57,0x50,0x77,0x25,0x9d,0xcc,0x08,0x6a,0xad,0x63,0xf8,0x8e,0xe0,0x21,0x62,0x56,0x48,0x29,0xed,0x81,0x1d,0x6b,0x60,0x55,0x78,0x6a,0xce,0xd6,0x79 +.byte 0xe1,0x66,0x18,0x9f,0x71,0xf7,0x0c,0xec,0x35,0x53,0xef,0x39,0xfe,0x57,0x71,0xc0,0x49,0x4b,0x55,0xe8,0x3d,0x9b,0xe3,0x9a,0xbb,0xf8,0x61,0x31,0xa1,0x94,0x94,0x8a,0xb1,0xd2,0x0f,0x01,0xe0,0xd4,0x26,0xa0,0x59,0x70,0xd0,0x5e,0xb8,0x6f,0x63,0x7b,0x71,0x49,0xe1,0x98,0xfb,0xdb,0x22,0x26,0x18,0x16,0x31,0x08,0x90,0x32,0xd5,0x7a +.byte 0xc0,0xd8,0xeb,0xae,0x93,0x3d,0x46,0xeb,0x0e,0xdd,0x08,0xa2,0xde,0x4e,0xc1,0x88,0x26,0xc2,0xf8,0xc6,0x5e,0x8a,0x9b,0x0d,0x9f,0x2b,0xcf,0x4e,0x13,0x43,0x4a,0x65,0xf6,0x47,0x1a,0x0a,0xae,0xf9,0x9f,0x7c,0xc5,0x18,0x65,0x09,0xcb,0x85,0x7d,0x33,0x36,0x43,0x19,0x99,0x20,0xa2,0x64,0xb2,0xf5,0x20,0xd2,0x74,0xc6,0x2c,0x29,0x46 +.byte 0xde,0xa7,0x4a,0x7f,0x3b,0x05,0x3e,0x11,0xb6,0xc1,0x98,0xfb,0xf5,0x9d,0x93,0x95,0x76,0x11,0x80,0x41,0x44,0xd3,0x2f,0xf4,0xfd,0x92,0x1e,0xd7,0xa7,0x5f,0x02,0x4a,0xbc,0xb7,0x96,0x33,0xc0,0x0d,0x2d,0x97,0xb8,0xd4,0x67,0x7a,0x4c,0x74,0x93,0xa7,0x8d,0x68,0x78,0xed,0xc8,0xc9,0x02,0x6e,0xae,0x10,0x97,0x7c,0x56,0x11,0x2a,0x29 +.byte 0x87,0x5c,0x21,0xec,0x75,0x9c,0x17,0x17,0x8d,0x45,0x08,0x31,0x36,0x64,0xc0,0xf7,0x95,0xb6,0x72,0xcf,0xac,0xd8,0x52,0x02,0x6f,0x3b,0x14,0x34,0x30,0xcc,0x39,0x7c,0xe4,0x1f,0x38,0x23,0xcf,0x1f,0xb7,0x7e,0x92,0x66,0xf7,0xda,0x9f,0x27,0xbb,0x83,0x45,0x71,0x67,0x63,0x6c,0x85,0x64,0x34,0xa8,0x93,0x5a,0x13,0x0c,0xff,0x8b,0x3a +.byte 0x2a,0x10,0x1d,0xb6,0x43,0xef,0x57,0xf3,0xf0,0x29,0x2e,0x59,0x72,0x2e,0xc3,0xb6,0xd3,0xd0,0xdd,0x17,0x19,0x82,0x49,0x05,0xd4,0xfc,0xd6,0x2e,0x5d,0xd7,0x0c,0xb6,0x18,0xd5,0x08,0xbb,0xe5,0x3b,0x2e,0x85,0x62,0xc0,0x1e,0xa3,0xb8,0x92,0x21,0x06,0xfa,0xf1,0x2d,0xab,0x62,0x67,0x62,0xee,0x13,0x7f,0x07,0xb6,0x24,0x64,0x94,0x4f +.byte 0x69,0xb9,0x7a,0xdc,0x23,0x5e,0x19,0x96,0xc5,0x4d,0xcb,0xee,0x2d,0x4a,0x7d,0x1d,0xd2,0x72,0x18,0x8f,0x43,0x8f,0x76,0xbf,0x30,0xd8,0xf1,0xfe,0x9c,0xe7,0x63,0x38,0xff,0x1a,0x3f,0x40,0xbd,0x73,0x66,0xf7,0xa9,0xd9,0x17,0x4a,0x8a,0x79,0x04,0x0e,0x20,0xe1,0x39,0x49,0xd9,0x30,0x9c,0x52,0xf9,0x14,0x8f,0xdc,0x9d,0x52,0xd5,0x34 +.byte 0xaa,0x58,0xfe,0x5d,0x68,0xcb,0xab,0x3b,0x3c,0x9e,0x25,0xde,0x6d,0xdd,0x58,0x0d,0x1b,0x99,0xa9,0xcc,0x26,0x4e,0xc0,0x3c,0x8b,0x1e,0xaa,0x52,0x3d,0x4d,0xb8,0x27,0xc1,0xd1,0xa2,0xaa,0x78,0xb9,0xee,0x5f,0x26,0x46,0x5f,0x41,0x0d,0xe1,0x70,0x7d,0xcd,0x3f,0x4a,0xca,0xb2,0xca,0x2f,0x36,0x1f,0x68,0xe6,0x66,0x8a,0xf6,0xe3,0x94 +.byte 0xe5,0xab,0x90,0xeb,0x2f,0xe8,0xb2,0x6c,0xa9,0x69,0xd2,0xe0,0x5f,0x4a,0x65,0xa8,0x6b,0xc1,0xfb,0x03,0x51,0x17,0x3b,0xf8,0xe0,0x67,0xc3,0x5a,0xe8,0x18,0xdf,0xc1,0xf8,0x7f,0x44,0x68,0x4a,0x01,0xbe,0xf8,0xa5,0x7a,0xb9,0x3b,0x0f,0x05,0x8e,0x4b,0x28,0x14,0x61,0x2f,0x2e,0xc7,0xf2,0x96,0xc7,0x60,0x99,0xc4,0xbf,0xe8,0x37,0x98 +.byte 0x00,0x34,0xf7,0x5a,0xd7,0x6f,0x90,0xc4,0x19,0xb5,0x07,0xd1,0x76,0x6e,0x65,0xcc,0xf6,0x51,0x88,0x5c,0x81,0x91,0xa8,0x4d,0xb7,0x33,0x53,0xb6,0x93,0x42,0x52,0x82,0xfa,0x2b,0xca,0xa0,0xbd,0xf3,0x09,0x2b,0x0f,0x09,0x02,0xdd,0x29,0x5f,0xa6,0x49,0x7b,0x97,0xe8,0x96,0xbf,0x6f,0x76,0xb7,0xa2,0x76,0x58,0xda,0x1d,0xb2,0xdb,0x6d +.byte 0x9d,0x3b,0x32,0x6e,0x9c,0xea,0x45,0xfd,0x33,0xeb,0x41,0x91,0x91,0x52,0x2b,0x68,0xa3,0xf3,0xc6,0x92,0x43,0x13,0x49,0x8a,0x10,0xb1,0x2f,0x9a,0x0f,0xe1,0x94,0x21,0x18,0x76,0x87,0xaf,0x50,0xe4,0x71,0x5d,0x0a,0xba,0x75,0xaa,0x17,0xf5,0x37,0xf2,0x84,0x9b,0x29,0xdf,0x44,0x60,0xd0,0xac,0xcf,0x25,0x87,0x66,0x64,0x1f,0x0d,0xba +.byte 0xb3,0xdb,0x14,0xb6,0x1f,0x00,0x70,0x98,0x83,0x1d,0x9e,0xbd,0xf9,0x17,0xf4,0x57,0xae,0xa8,0xae,0x7b,0xa7,0xde,0x1f,0x31,0xc6,0x29,0xb2,0xf7,0xef,0x36,0x31,0xe7,0x50,0x33,0x69,0x4e,0x8c,0xb5,0xe4,0xdd,0x74,0x87,0xc8,0xf5,0x22,0x1b,0x4b,0xec,0xc4,0xe1,0x5a,0x7d,0x5a,0xe8,0xb9,0x2f,0xf4,0xd1,0x83,0xa2,0xb7,0x97,0xe0,0x1e +.byte 0xf7,0x3a,0x74,0xef,0x5f,0xb3,0x30,0xce,0xfa,0x23,0xd5,0x98,0x56,0x19,0x24,0xb5,0xc7,0x60,0x8b,0x03,0x8e,0xe7,0xdf,0x2c,0x36,0x4c,0x3b,0x3b,0x84,0x45,0x97,0x40,0x29,0x30,0x98,0xc3,0xc0,0xa2,0xf0,0xdf,0x69,0x47,0x95,0x26,0xdb,0x6c,0xcc,0xff,0x2d,0x32,0xaa,0xa7,0xb8,0x6b,0x24,0xec,0xff,0x94,0x4d,0x36,0xdd,0x7b,0x4d,0xc5 +.byte 0x8d,0xe2,0x3c,0x14,0x5a,0x37,0x75,0x1f,0xd6,0x98,0x7d,0xd3,0xdc,0xb0,0x24,0x69,0xe7,0x65,0x60,0x2a,0xe7,0x00,0x5b,0x68,0x99,0xa0,0x9e,0x10,0xf0,0x5c,0xa8,0x39,0x85,0x59,0xde,0xe4,0x46,0xf3,0xde,0xda,0xc0,0xb1,0xd2,0xf1,0xd2,0x05,0xd5,0xd4,0x2c,0x2e,0x7e,0x44,0x5c,0x52,0x80,0x85,0xbb,0x54,0x97,0xb6,0xad,0x6d,0x57,0x49 +.byte 0xed,0x67,0xaf,0x27,0xb4,0x5b,0xce,0x0f,0x3c,0x58,0xa2,0x24,0x22,0xa2,0xcb,0xfc,0x4e,0x8e,0xc2,0x3c,0x32,0xc6,0x07,0xc4,0xc6,0xc0,0x50,0xc3,0xe3,0x1b,0x96,0x76,0x62,0xf9,0xea,0x5e,0xdc,0xc5,0x96,0xe8,0xaa,0x20,0x26,0xac,0x44,0xfb,0xf2,0x16,0x72,0x72,0x4c,0x5c,0xee,0x51,0x07,0xb0,0x74,0xf6,0xde,0xd7,0x5d,0x73,0xf4,0xe9 +.byte 0x0d,0x29,0x06,0x5f,0xca,0xe2,0xbb,0xa4,0x3e,0xdc,0xf7,0x74,0x99,0x53,0x7a,0x52,0x60,0x46,0xaa,0xf0,0x34,0x97,0x0c,0x81,0x5b,0xd8,0x95,0x52,0x76,0x55,0xcb,0xc4,0x6d,0x50,0x26,0x3f,0x7e,0xc2,0x93,0x6e,0x14,0x0c,0xd7,0x49,0x5f,0x52,0x8f,0x34,0x49,0xb4,0xe7,0x12,0xfe,0xae,0xd1,0xfa,0xfc,0xc5,0x80,0x38,0x26,0x9c,0xf1,0x81 +.byte 0x01,0x58,0x15,0x99,0x29,0x8d,0x1b,0x2d,0x74,0xca,0xf1,0xf4,0xfa,0xcd,0xae,0xfa,0xa9,0x1d,0xbb,0xf1,0x55,0x2e,0x69,0x46,0x6e,0xe4,0x91,0xa3,0x48,0xb5,0xaa,0xb3,0x85,0xab,0x14,0xd2,0x84,0x8c,0xb1,0xb6,0x0c,0xa5,0x4a,0x90,0xed,0x6e,0xdf,0x1e,0x15,0x36,0x7b,0xa3,0x59,0xd6,0x8d,0x7d,0x7b,0x12,0x7c,0x9a,0x40,0x8a,0x28,0xde +.byte 0xb5,0xbc,0xc4,0x52,0x96,0xfb,0x62,0x1f,0xc9,0xe0,0xc9,0x1d,0xc7,0xc4,0xcb,0x8a,0x96,0x21,0x42,0x7c,0x0a,0xdd,0x42,0x74,0xcf,0xc4,0x57,0x8f,0x28,0x0a,0x7c,0x4f,0x49,0x5a,0xc6,0x21,0xb2,0xd4,0xd0,0x61,0xa5,0x35,0xbd,0x4a,0x0c,0x16,0x68,0x1f,0xe3,0xff,0x3f,0x72,0xf0,0x1d,0x50,0x26,0x48,0x91,0x27,0x1b,0x2b,0x0d,0x8b,0xf2 +.byte 0xa0,0xc0,0xa0,0x5d,0xdb,0xcf,0x71,0x41,0x83,0x00,0xb9,0x3c,0xe0,0x4a,0x96,0x43,0xf8,0x64,0x0f,0x42,0xc5,0x75,0xec,0x26,0x62,0x99,0x13,0xeb,0xf9,0xa6,0x86,0xe4,0xc9,0xaf,0x3c,0x2c,0xc9,0x4f,0x89,0xf4,0xc0,0x46,0x99,0xb8,0xd1,0x9e,0x7b,0xb7,0x41,0x0a,0x5f,0x40,0x98,0x65,0x29,0xdd,0x60,0x6b,0x27,0xbf,0x66,0x08,0x32,0xc2 +.byte 0xcf,0xea,0x91,0x44,0x45,0x49,0x1c,0xb4,0x16,0x7f,0x11,0x1a,0x8c,0xb4,0x59,0x54,0xc6,0xcf,0x40,0xd2,0xe9,0xc1,0x54,0x9c,0xe2,0x6e,0xd5,0xfe,0xfb,0x4a,0xa3,0x98,0x63,0xef,0x86,0xe0,0x63,0x30,0x32,0x5a,0xbd,0xd4,0x7c,0xe8,0xbe,0xf1,0xed,0xa2,0x19,0x98,0xc8,0x34,0x65,0x4c,0xef,0x1a,0xb3,0xbc,0x87,0xbe,0x6b,0x75,0x2c,0xe5 +.byte 0x54,0xcc,0xe5,0x69,0xb2,0xc8,0xdb,0x57,0xf8,0xa7,0x82,0x07,0xf7,0x20,0x95,0x7f,0x6d,0x7b,0x33,0x66,0x67,0xa1,0x38,0x0e,0x9c,0x3b,0x22,0xab,0xc1,0xd3,0xed,0x87,0x32,0xfb,0x4a,0x5d,0xad,0x3a,0xe1,0x90,0xa6,0xe3,0x4d,0x6b,0x00,0xe4,0x5c,0x66,0x59,0x90,0x63,0x24,0x5b,0xe1,0x3b,0x69,0xb6,0xc9,0x05,0x83,0x3a,0x7b,0xf4,0xa5 +.byte 0xc8,0x47,0xf9,0x8e,0xab,0x92,0xbd,0xd3,0x41,0xc7,0x61,0xf4,0xce,0x30,0xdb,0xae,0x27,0x69,0x0f,0xcc,0x69,0x50,0xe8,0x18,0xf2,0x39,0x04,0x5a,0x29,0x12,0x61,0x46,0x5c,0x1b,0x2e,0x15,0x9c,0xfa,0x73,0x50,0xe3,0x51,0xda,0x4d,0x88,0x25,0xb2,0xff,0x55,0x27,0xce,0x86,0xca,0xe6,0x2a,0xb8,0x0c,0xa7,0xd0,0x06,0xbf,0x70,0xb5,0x6b +.byte 0x80,0x44,0x65,0x5d,0x23,0xfa,0x0d,0x74,0x5c,0xfc,0xc7,0x86,0x5e,0x23,0x8a,0xf1,0xff,0x80,0xf0,0x19,0xaa,0x98,0xae,0x56,0xcf,0x12,0x74,0x6c,0x70,0xb2,0x39,0xbe,0x66,0x71,0xee,0xe3,0x43,0x3b,0xfa,0x79,0xa9,0x7e,0x69,0x6a,0x19,0x42,0xd5,0x0e,0x1e,0x92,0xfe,0x8a,0x0f,0xca,0x74,0xf2,0x68,0x71,0xf5,0xcb,0x05,0x94,0xc1,0x06 +.byte 0x1b,0xae,0x55,0xe9,0x16,0x03,0xa9,0x97,0xad,0x49,0xaf,0x88,0x8c,0x26,0x33,0x4d,0x46,0x75,0xb3,0x9c,0xee,0x70,0xe1,0x57,0x43,0xeb,0x59,0xff,0x77,0x89,0x8a,0x77,0x3f,0x7e,0xe6,0xbe,0xa2,0x05,0xb1,0xe3,0x41,0x5e,0xc7,0xd4,0x14,0xda,0xc0,0x84,0xd0,0x05,0x50,0xdd,0x62,0xdb,0x4c,0x3b,0x16,0xb0,0xe0,0xf5,0x2b,0xf1,0x83,0xea +.byte 0x7b,0x89,0xbb,0xde,0x57,0xdb,0xc0,0xb9,0x7d,0xdf,0x53,0x0f,0x6c,0xc5,0x5a,0x0b,0x36,0xeb,0xa3,0xc3,0xe6,0xc5,0x80,0x98,0xf3,0x87,0x29,0x97,0xc9,0x2e,0xd6,0x3b,0x43,0x2a,0x36,0x3b,0xba,0x43,0x85,0xf5,0x0d,0x18,0x2e,0x78,0x43,0xae,0xa4,0x24,0x6d,0xdc,0xab,0x05,0x94,0x09,0x94,0x27,0x17,0xef,0xbc,0x7e,0x52,0xa4,0x80,0xda +.byte 0x28,0xf5,0xc3,0x20,0x99,0xbb,0x5d,0xb6,0x7e,0x0e,0x59,0x3b,0x5e,0x1d,0x1b,0x4f,0xd1,0x91,0xe4,0xe4,0xc7,0x35,0xc7,0x2e,0xc1,0xba,0x60,0x05,0xa4,0xd5,0xca,0x5f,0x09,0xbf,0x79,0x06,0xcb,0xa7,0x32,0x7c,0xf4,0xdc,0xa8,0xb3,0x8b,0x26,0x59,0x6d,0xcb,0x74,0x37,0x56,0x51,0x96,0x0b,0x44,0xf1,0x95,0x16,0xe3,0x9b,0x9b,0x3b,0xb3 +.byte 0xea,0x6a,0x1b,0x76,0x99,0x69,0xd6,0x5b,0x10,0x5a,0x91,0x23,0xb5,0xc3,0xf9,0x6a,0xba,0xc4,0xe6,0x18,0x28,0x50,0x9d,0x09,0x14,0xbe,0xed,0x73,0xd2,0x51,0xff,0xf8,0x14,0x2b,0x8b,0xdd,0x2a,0x1a,0x8e,0x48,0xae,0xd8,0xdf,0xb9,0x5b,0xcb,0x8f,0xc2,0x8c,0xd6,0xb3,0xfb,0x40,0x2f,0xb0,0x6c,0x9a,0xea,0xd0,0x14,0x8c,0xc5,0xc7,0xc7 +.byte 0xf8,0xf5,0x4f,0xe2,0xd7,0x41,0xcd,0xb6,0x34,0x3e,0x81,0x19,0x09,0xa2,0x51,0xb4,0x60,0xfb,0xf2,0x6c,0xe6,0xae,0x68,0x47,0xb9,0x93,0x7b,0xc9,0xe7,0x00,0xc4,0xa7,0xf2,0xef,0x8b,0xd8,0xfc,0x9f,0xe5,0x6d,0x48,0xe2,0x6c,0x32,0x73,0x5c,0x30,0x7c,0x12,0x13,0xca,0xc3,0x31,0xc3,0xa2,0xb4,0xf7,0x23,0xc4,0xd0,0x47,0x39,0x93,0xc8 +.byte 0xa0,0x7b,0xb4,0x09,0x3f,0xe8,0x15,0x15,0x9c,0xa7,0xe6,0xa8,0xbe,0xba,0x60,0xf9,0x28,0x88,0x66,0x7b,0x62,0x32,0x17,0x18,0x68,0x87,0x53,0xf5,0xbc,0xf5,0x77,0x17,0xa1,0x3f,0x62,0xd1,0x10,0x0a,0x54,0x96,0x9c,0x31,0xc3,0xb7,0x1d,0xaf,0xc7,0xb3,0x27,0x9e,0x46,0xfe,0x7e,0x9b,0x88,0xf2,0x9e,0x6e,0x19,0x0f,0xb1,0x88,0xe4,0x08 +.byte 0x76,0x7c,0x77,0x46,0x09,0xa7,0x9e,0xf4,0xd9,0xbf,0x67,0xe8,0x9d,0x6a,0x75,0xa7,0xf5,0xee,0x29,0xba,0x84,0xa0,0x44,0x46,0x35,0x4c,0x22,0xef,0xb3,0xea,0xb0,0xf2,0xd6,0x78,0x20,0x97,0x28,0x5c,0x7e,0x90,0x06,0x80,0x19,0x63,0xa4,0x8a,0xef,0x0a,0xea,0x88,0xa9,0xa2,0xae,0x23,0x2e,0x40,0xce,0xc5,0xc2,0xbf,0xfe,0x5a,0x8f,0x14 +.byte 0xb8,0x66,0x1a,0x2d,0xdb,0x43,0x39,0xbd,0xe7,0x7b,0xbc,0x41,0x58,0x74,0x56,0xd1,0xe7,0xd0,0xba,0x24,0xd2,0x41,0xbf,0xd0,0x4e,0x97,0x38,0x8f,0x6b,0x6f,0xe2,0x7d,0x6d,0x32,0x94,0x43,0xa7,0x66,0xf7,0x90,0x21,0xe0,0xdd,0x19,0x48,0x72,0xc1,0xa5,0xbc,0x9c,0xe2,0xdd,0x2c,0x6e,0x50,0x45,0x2c,0xa0,0x95,0xcb,0x1d,0x2c,0x1d,0xa6 +.byte 0xbe,0x9c,0xd4,0x6c,0x07,0x2e,0x5e,0xc8,0xc1,0x05,0x61,0x7d,0x44,0x28,0xe6,0xad,0xf0,0x9d,0x2d,0x3d,0xce,0x90,0x7d,0x79,0x2e,0xf3,0x08,0xbe,0x7a,0xa9,0x58,0x04,0xa7,0x39,0x05,0xdd,0xb4,0x87,0x6c,0x7b,0xd5,0xb3,0x2d,0x6b,0x43,0xf4,0x37,0xd9,0x6f,0x5c,0xa2,0x23,0x92,0x53,0xb9,0xd7,0x1b,0x2d,0x5d,0xcd,0x6d,0x3f,0xef,0xc8 +.byte 0x66,0x91,0x10,0x1b,0xc5,0x24,0x50,0x87,0x70,0x93,0x03,0x3f,0x7b,0x40,0xc8,0x0c,0x9b,0xec,0x3d,0x82,0x27,0x96,0x2a,0xbe,0xca,0xaf,0x1b,0xbf,0xef,0x14,0x0c,0xdc,0xa6,0xc7,0x48,0x18,0xce,0x8e,0x43,0x58,0x97,0xb3,0x5e,0xd6,0xc9,0x70,0x65,0xd0,0x0e,0x17,0xac,0xa0,0x6b,0xc9,0x55,0x30,0x12,0x7c,0xbe,0xe5,0x46,0xfc,0xd8,0x3f +.byte 0x0e,0xd7,0x96,0x16,0x32,0x8e,0xb7,0x2d,0x07,0xd1,0x26,0x98,0x70,0x4c,0xb1,0x6f,0x92,0x32,0x75,0x4f,0x57,0x6b,0x78,0xe0,0xc5,0x9b,0xf0,0x08,0x59,0x0b,0xfa,0x2d,0x79,0xbe,0xde,0x44,0x3d,0x65,0x77,0x27,0x3b,0xd9,0xea,0x55,0x79,0x22,0xe8,0xf7,0x62,0xb1,0xe3,0x32,0x4e,0x03,0x17,0x65,0xd3,0x5d,0xee,0xa0,0x9b,0xc2,0xbd,0x9f +.byte 0xcd,0xdc,0xde,0xd7,0x6c,0x95,0x7a,0xf1,0x09,0x4c,0x14,0xb9,0x37,0x1d,0xd0,0xdd,0x4b,0x2e,0x93,0x0b,0xfa,0x08,0x40,0x01,0x36,0xdf,0x89,0x46,0xa6,0xbb,0x19,0xd9,0x4f,0xf9,0xe1,0x7b,0x03,0xc9,0xef,0x01,0x25,0xe9,0x6d,0x95,0x84,0x7f,0xf8,0x8e,0x02,0xfd,0x6f,0x30,0xed,0x1b,0x98,0xd0,0xb3,0xdd,0x92,0x65,0x46,0x49,0x61,0xde +.byte 0x76,0xf5,0x4b,0x29,0x03,0x6f,0x79,0xee,0xbe,0x7a,0x07,0x6e,0xa8,0x29,0xb8,0x03,0xb4,0x6c,0x50,0x1f,0x4a,0xa2,0xaf,0xbd,0xde,0x18,0x72,0x90,0xa2,0x12,0xa9,0x59,0x7b,0xf6,0x96,0x2d,0xda,0x3d,0x90,0xba,0x7c,0x79,0x3e,0x6e,0xef,0x94,0x37,0xe2,0xef,0x6b,0x2a,0x74,0x6b,0x52,0xa0,0xc2,0x1e,0xa1,0x24,0x59,0x84,0xeb,0xdc,0xd0 +.byte 0x34,0x60,0xa8,0x81,0xaf,0xdd,0x57,0xc2,0xa6,0x02,0x7f,0xcf,0x9e,0x64,0x28,0x18,0x7c,0x95,0x98,0x90,0x7a,0x76,0x3f,0x78,0x16,0x2c,0xe0,0xa7,0xdf,0x0d,0x4d,0x5e,0xcc,0x0d,0x73,0x12,0x26,0xd7,0xe9,0x32,0x3e,0xa1,0xa9,0xde,0x29,0xb2,0x3b,0x6f,0x3b,0x6e,0x12,0x0c,0x10,0x34,0x86,0xf2,0xa0,0xd4,0x9c,0xf6,0x14,0x5a,0x41,0x06 +.byte 0x31,0xb1,0xe4,0x31,0x52,0xf4,0xcb,0xe3,0x39,0xcd,0x0b,0xc2,0xca,0x90,0xba,0xb3,0x21,0xbf,0x94,0x13,0x75,0x3b,0x0e,0x0a,0xc0,0x05,0x35,0xe6,0x28,0x74,0x63,0xc5,0x34,0x44,0xd8,0x9a,0x0e,0xec,0xb3,0x1b,0x30,0x58,0xfc,0xa0,0xc4,0xd1,0x26,0x50,0x6b,0x22,0x88,0xfc,0xad,0xa9,0xb4,0x3e,0x36,0xb6,0xb1,0x6d,0x62,0x7e,0x60,0x8f +.byte 0xf5,0x17,0x65,0x1c,0xf6,0x51,0x4d,0x89,0x4a,0x7e,0x5d,0x23,0x3b,0x83,0x1f,0xa6,0xc8,0xd2,0x1a,0x90,0xd3,0x53,0xfc,0x48,0x64,0x94,0x6e,0x1c,0x72,0xef,0x5d,0xd4,0x23,0xa2,0x3a,0x93,0xe4,0x29,0x33,0x8a,0xbd,0xe5,0x17,0xc2,0xe9,0x18,0x6a,0x81,0x1e,0x5b,0x03,0x41,0x45,0x35,0x14,0xe7,0xc8,0x45,0x5c,0x37,0x69,0x77,0x62,0xf8 +.byte 0xd7,0xec,0x9d,0x62,0x2e,0xfa,0x43,0x3a,0xdc,0x8b,0x86,0x86,0x1b,0x31,0x71,0x0e,0x92,0x59,0xf7,0xef,0x96,0xfd,0x04,0x1e,0x1d,0x74,0x7d,0x08,0x06,0x21,0x54,0x39,0xd3,0x9f,0x30,0xa1,0x19,0x7f,0xc8,0x19,0x16,0xd1,0x21,0x2a,0xf3,0x21,0xce,0x19,0x1a,0xde,0x70,0x1b,0x87,0x05,0x9e,0xe8,0xf3,0xfd,0x1d,0xaa,0x61,0x6c,0xfb,0xdf +.byte 0x50,0x9a,0xa0,0x32,0x4e,0xe4,0x68,0xda,0x0e,0x2f,0x2a,0x70,0xe1,0x51,0x66,0xb4,0x2d,0x5b,0xb6,0x32,0x3f,0xcb,0xc0,0xaf,0x01,0x03,0xcd,0xd6,0xb8,0x4e,0x3d,0x24,0x17,0xe2,0x30,0x3b,0xa4,0x08,0x0e,0x6a,0xcf,0xbe,0xc2,0x5c,0x79,0x5d,0x25,0xe2,0xae,0xa7,0x7f,0x42,0xff,0xa9,0xa5,0x05,0xbf,0xf4,0x92,0x30,0xaa,0x1d,0x96,0x7a +.byte 0x49,0xbc,0x1c,0xaa,0x5c,0x8d,0xe8,0xf3,0xd3,0x1a,0x67,0x7f,0x47,0x09,0x90,0x35,0x82,0x4e,0xcc,0x2e,0x50,0xfe,0x2c,0xb9,0x29,0x39,0xff,0x49,0x8f,0x7e,0x89,0x8d,0x4a,0x15,0xd1,0xd6,0x83,0xdb,0x25,0xac,0xc1,0x81,0x23,0x70,0x3f,0xb9,0xce,0x7f,0x03,0x46,0xa8,0x39,0xab,0xff,0x71,0xc9,0x7b,0x3c,0xb3,0x5e,0x9f,0xfe,0x8a,0x0a +.byte 0x39,0xad,0x6a,0xc1,0x8e,0x5a,0xa8,0x71,0xb7,0x01,0x25,0x28,0x15,0xd9,0x0a,0xae,0xc1,0xf9,0x23,0x1c,0xc1,0xe8,0x86,0x1d,0xb8,0x71,0x6e,0xa2,0xa4,0x67,0x22,0x4d,0x0e,0xd2,0xaa,0x70,0x26,0x23,0xfc,0x15,0xed,0x67,0x11,0x87,0x69,0x6f,0xc6,0x4c,0xe1,0x4b,0x04,0x86,0xe9,0x56,0x40,0xea,0x07,0xb1,0x6f,0xe9,0x8f,0xdd,0x2f,0xce +.byte 0x8d,0xca,0x0a,0x58,0x01,0x44,0x2c,0x74,0xd0,0x14,0x07,0x9a,0xb7,0x5a,0xc1,0xea,0xa9,0xdd,0xa4,0x94,0x84,0xc2,0x11,0xa5,0xe2,0x00,0xd8,0xfc,0x77,0xb9,0x5e,0xe6,0x72,0xef,0xc5,0x38,0xe0,0x90,0x11,0x16,0xfd,0xa7,0x77,0xbd,0x4c,0x1d,0xeb,0x32,0x54,0xdb,0x2a,0x43,0xa1,0x87,0xbb,0x2e,0x79,0x22,0x4d,0xb3,0xdf,0x1a,0xee,0x75 +.byte 0xb0,0xdd,0xf2,0x09,0x05,0xf4,0x6a,0x3c,0x86,0xc6,0xe7,0x60,0x2a,0xee,0xb6,0x55,0xae,0xdc,0xce,0xf8,0xe4,0xd7,0xdf,0x72,0x42,0x91,0x6d,0xc4,0xd8,0x60,0xf1,0xe8,0x06,0x71,0x38,0xa3,0x03,0x3e,0x1b,0x14,0x47,0x74,0x93,0xb5,0x61,0x28,0xde,0x23,0x8f,0xbe,0x88,0x5e,0xdf,0x87,0x47,0xd4,0x5f,0x91,0x40,0xeb,0x02,0xda,0x27,0x3b +.byte 0x65,0x9f,0xd8,0xf1,0x78,0x7f,0xba,0x9b,0x35,0xb3,0x10,0xaf,0x7f,0x51,0x37,0xa5,0x63,0x64,0x1f,0xf1,0xc3,0x1b,0x9e,0xe4,0xdd,0x93,0x8c,0x3a,0x98,0x20,0x9a,0x75,0x22,0x7b,0x48,0x0a,0x9d,0x55,0xed,0x07,0x1a,0x79,0x3b,0x98,0xe3,0x16,0x9b,0x16,0x2c,0xb2,0x03,0xc1,0xf5,0x6c,0xac,0x00,0x6a,0xb6,0xc1,0xc2,0x49,0x4d,0x9d,0xf5 +.byte 0x0e,0x7b,0x60,0x09,0xcc,0xa7,0x35,0xbb,0x70,0x34,0x18,0x49,0x2c,0xf1,0x41,0x4f,0xce,0x68,0x03,0x60,0x14,0xa7,0x2e,0x59,0x0f,0xa2,0xc4,0x2f,0x33,0xf0,0xb6,0xa4,0x31,0x75,0xdc,0xb4,0x88,0xe4,0xe3,0x0e,0x4b,0x3f,0x58,0xd0,0xa4,0xea,0x9a,0xef,0x47,0xb7,0xf7,0x20,0x71,0x52,0xd3,0x8a,0x1c,0xd9,0x2d,0x88,0x05,0x03,0x8a,0x1c +.byte 0x3d,0x69,0xf0,0x39,0xf0,0x25,0xad,0x95,0xd4,0x47,0x3c,0xbb,0xfa,0x48,0xd7,0x8e,0xf5,0xdc,0x33,0x43,0x0a,0xbb,0xf0,0xd3,0xb1,0xc3,0x94,0x81,0xcd,0x22,0x79,0xdc,0xd0,0x92,0x8b,0xd3,0xc3,0xac,0x73,0x72,0x83,0xaa,0xa2,0x52,0x13,0x27,0x0e,0xc5,0x8c,0xa5,0x69,0x21,0x6e,0x9c,0x9d,0x9b,0xeb,0x7a,0x19,0xfe,0xb6,0xdb,0x4e,0xc1 +.byte 0xa6,0xec,0x42,0xb0,0x86,0x69,0x60,0xde,0x36,0x11,0x6a,0x86,0xd7,0xbf,0x15,0x48,0xa2,0x73,0x8f,0x68,0xde,0xd6,0xb2,0x6d,0xe0,0xc5,0x1f,0x1f,0xd5,0xc5,0xef,0xce,0xa1,0x90,0x5c,0xe6,0x6c,0x15,0x73,0xa7,0xcc,0x2d,0xe8,0xcf,0x4c,0xc8,0x17,0x3c,0xfa,0x5e,0xdb,0x4f,0x54,0xf3,0xa3,0xff,0x50,0x3e,0x42,0x60,0x0d,0xf3,0xf7,0xbb +.byte 0xc6,0xf5,0xe7,0x63,0x50,0x49,0xc1,0x94,0x60,0x68,0xbd,0x62,0xc0,0x81,0x80,0x16,0xfd,0x65,0xfb,0x2e,0x23,0x67,0xb3,0xb6,0xf8,0x95,0xfa,0x00,0x3f,0x1d,0x10,0x16,0xd5,0xd9,0x66,0xf8,0x25,0xb4,0xce,0xf2,0x2e,0x4f,0xa2,0x21,0x14,0xbd,0x2c,0x63,0xec,0x44,0x57,0x07,0x87,0x3c,0x2f,0x22,0xcf,0x48,0xd3,0x20,0x51,0xfc,0x5d,0xd5 +.byte 0x9f,0x67,0x9c,0xaf,0xe3,0x89,0x36,0xc5,0xfa,0x7c,0xca,0x07,0xdc,0x56,0x2a,0x4e,0xa5,0x76,0xe6,0x09,0x99,0xfb,0xb7,0xba,0xaa,0x0b,0x9c,0xe2,0x0f,0x73,0xab,0x9b,0xbe,0x6f,0x50,0xe3,0xf7,0x28,0x32,0xf2,0xab,0x86,0xa3,0x89,0x3a,0xea,0xd7,0x52,0x52,0x6e,0xed,0x1b,0x94,0xf0,0x59,0x9d,0xbb,0x7a,0x88,0x6f,0xbf,0xaf,0x6a,0x87 +.byte 0x47,0x34,0x7f,0xf4,0x8b,0x0d,0x33,0x12,0x2b,0x67,0x6b,0xc9,0x1d,0x18,0x23,0x2e,0x54,0xee,0x07,0x28,0xbd,0x9d,0xa1,0xaf,0x85,0x7a,0x0f,0xe5,0x5d,0xf7,0x8b,0xca,0xd9,0x3d,0x8f,0x4f,0xcc,0xce,0xc3,0x6e,0x3a,0x40,0x08,0xd2,0x14,0xf0,0x28,0x9b,0xc0,0x4a,0x7a,0x3c,0xc2,0xed,0xe0,0x20,0x04,0xf5,0xf9,0xee,0xb8,0x35,0x94,0xbc +.byte 0x53,0x46,0xf2,0x1a,0xab,0xe9,0xde,0xd8,0x27,0x67,0x0d,0x63,0x2a,0x7b,0x3a,0x38,0x91,0xbc,0x48,0x2c,0x38,0x09,0xa0,0xe3,0x66,0xe3,0xeb,0xb9,0x02,0x2d,0x80,0x87,0x81,0x4f,0x5c,0x1c,0xfd,0x2b,0x0f,0x99,0x37,0x3a,0xfa,0x0f,0x8e,0x8c,0x87,0x76,0x72,0xd3,0xcf,0xc8,0x1e,0x8a,0x3b,0x97,0xa0,0xe6,0x32,0x66,0x3c,0x55,0x2c,0xfb +.byte 0xa9,0x41,0xfd,0xf9,0xd4,0x50,0xe0,0x5b,0x03,0xb7,0x1e,0x49,0xfa,0x59,0xeb,0x55,0xb1,0x21,0xd0,0x52,0xeb,0xe6,0x0f,0x21,0x81,0x4f,0x82,0x9a,0x8f,0x67,0x3d,0x0d,0x1d,0x11,0x1f,0x70,0x59,0x09,0x87,0x99,0xe5,0xf2,0x89,0xa6,0x56,0x8d,0x52,0x55,0xa8,0x91,0x5d,0x51,0x48,0xec,0x66,0x05,0xd6,0x18,0xd1,0x61,0x02,0x5a,0x80,0xcc +.byte 0xee,0xf3,0x3b,0x8e,0x73,0x2a,0xb1,0x22,0xda,0x1d,0xca,0xb2,0xd6,0x7f,0xd7,0x7d,0xaf,0x23,0x8d,0xff,0x24,0x8e,0x5e,0x38,0x29,0x23,0x1f,0xbc,0xfd,0xe4,0x3d,0xcd,0x66,0xe3,0xe1,0x0f,0x85,0xe3,0xda,0x34,0xc6,0xba,0x60,0x5f,0xaf,0x32,0x79,0x34,0xc0,0x01,0x93,0xae,0x1e,0x72,0x7f,0xd2,0x32,0xa1,0xdc,0x0b,0xca,0xee,0x5a,0x7a +.byte 0x09,0x98,0x2a,0x46,0x0a,0xe7,0xfd,0x0f,0x76,0xa0,0x3b,0x2b,0x3d,0xe5,0xcd,0x04,0xa2,0x5e,0x9b,0xba,0x4a,0xd5,0x0a,0xce,0x94,0x77,0xbb,0x24,0xa4,0x12,0xbc,0x24,0xb6,0x60,0x40,0x62,0xd2,0x70,0x0e,0x3f,0x62,0x72,0x2f,0xa1,0xc9,0x12,0x03,0x0f,0x39,0x57,0x77,0x7c,0x5c,0x31,0x13,0xcb,0x8c,0x2c,0x84,0xfd,0x7b,0x6f,0x60,0xbb +.byte 0x1a,0x0b,0x65,0x8c,0xc1,0xe6,0x4b,0x60,0x8c,0xe7,0x3e,0x94,0x2a,0xcc,0x70,0x9f,0xd0,0xfd,0x00,0x0e,0x36,0xb2,0xf1,0x62,0x78,0x6a,0xc8,0x9b,0xbe,0x8b,0x54,0xa7,0xad,0xee,0x3e,0x8e,0x1c,0x23,0xbe,0xa2,0x73,0x43,0xbe,0x15,0x32,0x84,0xdd,0x22,0x75,0xd5,0x9a,0xfb,0x93,0x38,0x55,0x2f,0xa4,0x34,0x4c,0x33,0xc3,0xd7,0x7c,0x9f +.byte 0x42,0x2f,0x9f,0xf6,0x27,0x90,0x15,0x6b,0x14,0x4f,0xbc,0x4b,0x07,0x42,0x24,0x98,0xa6,0xc4,0x4c,0x2f,0x22,0xd9,0x80,0x99,0x97,0x6b,0x7d,0xe8,0x2b,0x31,0x37,0xfe,0xd1,0x8b,0xbd,0xbf,0x08,0x4a,0x56,0x3d,0xff,0xb5,0x12,0x6d,0xc4,0xcf,0xbc,0x75,0xe9,0xe6,0x6f,0x1a,0x30,0x34,0x5b,0x2c,0x1d,0x8f,0x85,0xa0,0xe8,0xfd,0xfd,0xe2 +.byte 0xe7,0x13,0x73,0xcd,0x63,0x63,0x90,0xa5,0xa4,0x3f,0x91,0x65,0x77,0xd4,0xed,0x0c,0x1d,0x06,0x95,0x93,0x74,0x85,0xec,0x31,0xde,0xc9,0xb9,0x2e,0x7c,0x6d,0x2c,0x0d,0x15,0xb7,0x6b,0x0c,0xd2,0xe8,0xa8,0xcb,0x90,0x5c,0x11,0x53,0xc5,0x9d,0x54,0xf4,0x90,0xf7,0xc8,0x17,0x65,0xc0,0x3f,0xea,0xf6,0x28,0x8e,0xf0,0x1c,0x51,0xcc,0xfd +.byte 0x99,0x67,0x3d,0xa5,0x82,0x1f,0xb3,0x75,0x08,0x27,0x85,0xa9,0x7b,0x54,0x91,0x6e,0x80,0x9a,0xdb,0x6c,0x17,0x4a,0x36,0x73,0x0e,0x61,0x2e,0x01,0xae,0x32,0xf8,0x54,0xdb,0xcf,0x24,0xa5,0x13,0xb1,0x7e,0x0b,0xf5,0xe7,0x0e,0x27,0x9a,0xef,0x01,0x0b,0x34,0x4f,0x91,0xc2,0x93,0xe0,0xe6,0x14,0x64,0xf8,0x7b,0x41,0x37,0x22,0x39,0xad +.byte 0xf4,0xa9,0x3b,0xfb,0x7e,0x2b,0xd8,0x2b,0x0f,0x7e,0x40,0x55,0x5a,0x48,0x61,0x2f,0x95,0x5e,0x5c,0x25,0xe5,0x06,0x89,0x17,0x23,0xb6,0x1b,0x38,0x2e,0x7b,0x45,0xa5,0x11,0x0a,0x8d,0xd3,0x8d,0xb6,0x8d,0x47,0xc5,0x4f,0x8f,0x8b,0xe2,0x03,0x85,0xa1,0x5a,0xa2,0x8d,0xca,0x4d,0xef,0xc9,0xde,0x7d,0x06,0xa1,0x3f,0x21,0xb9,0x38,0x7b +.byte 0x91,0xf7,0x5c,0x9f,0x97,0xe3,0xeb,0x5d,0xea,0x5e,0xc1,0xa5,0x30,0xb0,0x7f,0xe0,0x4c,0xef,0xe5,0xe3,0xa0,0x2d,0x23,0xb6,0x08,0x21,0xe6,0x67,0x35,0x82,0x07,0x59,0x02,0xd4,0x68,0xa5,0xf1,0x42,0x70,0xb4,0x5e,0x54,0xed,0x1e,0x99,0xb2,0x55,0xf1,0x69,0x2e,0x7c,0xaa,0x6c,0x5e,0xd4,0xfa,0x16,0xa7,0x1f,0xdb,0x46,0x70,0x65,0x26 +.byte 0x98,0xf1,0xb6,0x42,0xb3,0x48,0x99,0x7c,0x07,0xbe,0x2b,0xee,0xb4,0xc1,0xf0,0xb7,0x47,0xf8,0xcf,0xe4,0x8d,0x34,0xa6,0xe5,0x17,0x9a,0xb7,0x2c,0x2e,0x03,0x30,0xfd,0xfb,0x42,0xe7,0xa1,0xe0,0x34,0x49,0x64,0xd8,0x0c,0xd5,0xb8,0x77,0x9f,0x0e,0xe2,0x73,0x0d,0x20,0x0c,0x21,0x07,0xaf,0x0f,0x93,0x94,0xd6,0xdc,0xe3,0xac,0x8d,0x8e +.byte 0xae,0x87,0xbd,0x2c,0x19,0x66,0xef,0x90,0x4a,0xd9,0xb0,0xf6,0xac,0x3a,0xe2,0xb5,0x2e,0xb4,0x63,0x91,0xf1,0x8b,0xac,0xce,0x51,0xc2,0xe0,0x02,0x7d,0xf8,0xab,0xe4,0xd6,0x85,0xd6,0xbb,0xd7,0x72,0xd0,0x5f,0x4e,0x90,0x09,0xcc,0x51,0xee,0x5b,0xad,0xb2,0xf6,0x16,0x37,0x09,0xa8,0xfc,0x74,0xa5,0x2e,0x26,0x27,0xff,0x53,0xd4,0x45 +.byte 0x82,0xb1,0xb6,0x16,0x65,0xc6,0xbb,0x54,0x0b,0x89,0xa1,0x0e,0x09,0x7c,0xc9,0xc9,0x48,0xa7,0x51,0x78,0x1d,0x3a,0x30,0xc5,0xe7,0x02,0x9e,0x91,0xd6,0x39,0xc8,0x35,0xf0,0x33,0xab,0xf6,0x0f,0xf9,0xce,0xef,0x26,0x46,0x48,0x56,0xbc,0x45,0x44,0xe2,0xd7,0xfc,0xdf,0xb2,0x95,0x20,0x07,0xeb,0x47,0x1c,0xde,0x88,0x5e,0x08,0xee,0xa1 +.byte 0x56,0x9a,0x5d,0x8f,0x35,0xc5,0xb3,0xd3,0x7d,0xe3,0x25,0x82,0xcc,0xcb,0xad,0xd8,0xef,0x83,0x76,0x08,0x55,0x9e,0xf4,0x00,0x1f,0x92,0x24,0x0e,0xf6,0x96,0x98,0x34,0x10,0x10,0x93,0x27,0x3b,0x96,0xbd,0x75,0x45,0x9d,0xad,0xc1,0x79,0xa7,0x09,0x68,0x0a,0xbc,0x14,0xe9,0x62,0xf6,0x5e,0x4e,0x6d,0xfb,0xf2,0x25,0x20,0x8b,0x53,0xa6 +.byte 0xc2,0x31,0x71,0xaa,0xfa,0xa2,0x1c,0xa1,0xb3,0xa2,0xd7,0x22,0x5a,0x72,0x61,0x5c,0x30,0x75,0xcc,0x82,0xb0,0xd0,0x07,0x8c,0x95,0x11,0x57,0xa4,0xe2,0x42,0xf3,0x3d,0x87,0x56,0x45,0x38,0xd6,0x1b,0x2b,0x26,0x11,0x99,0xce,0xcc,0x2e,0x96,0x1b,0xa1,0x06,0xa1,0xa9,0x65,0xe1,0x1f,0x53,0xb6,0x1e,0x5c,0x44,0x40,0xa2,0xf2,0x03,0xe7 +.byte 0x39,0x24,0x59,0x5f,0xdd,0x30,0xf0,0x78,0x9f,0x34,0xf1,0xd3,0x5d,0x9a,0xdd,0xf9,0x02,0x16,0x4b,0xfa,0x8d,0xab,0x2f,0x96,0xdb,0x67,0xf6,0x1e,0x7a,0xf8,0xd8,0xe6,0x71,0xdc,0x1a,0xbf,0x44,0xd2,0xbd,0xb3,0x6d,0x47,0x69,0xe0,0x14,0xef,0xe5,0x5e,0x0a,0xe9,0x1a,0x8b,0x3f,0x67,0x1e,0x1c,0x37,0x86,0x25,0x02,0x52,0x3f,0xf5,0xde +.byte 0xe0,0xbe,0x1d,0x61,0x44,0x3d,0xd2,0xe9,0x26,0x3d,0x4b,0xa4,0xb1,0xb9,0x62,0xc5,0x70,0xfb,0x1d,0xaf,0xe6,0x19,0x97,0x0f,0x6e,0x6d,0x4e,0xdf,0x5f,0xc9,0xb2,0xb0,0xb9,0x4b,0x72,0xc7,0x60,0x5d,0xf8,0x7d,0x3b,0xd8,0x74,0x29,0xf2,0x56,0x25,0xd9,0xd9,0x12,0x3a,0x50,0x01,0x54,0xd3,0x0e,0x4c,0xbd,0xc9,0xf5,0x66,0xc4,0x4b,0xa2 +.byte 0x68,0x31,0xb1,0x9d,0x47,0xd8,0x28,0xce,0x6b,0xe4,0x5f,0x78,0x75,0x22,0x7d,0x44,0x08,0x71,0xfb,0xd8,0xa0,0x6e,0xd1,0xbd,0x64,0x4e,0x00,0x99,0xf7,0x85,0xad,0x31,0xde,0x5c,0x4c,0x7c,0xc3,0x89,0x49,0x9f,0xea,0x22,0x86,0xa0,0x48,0x48,0xcf,0x47,0xfb,0x68,0x04,0x4c,0x05,0x62,0x57,0x60,0x9b,0xa0,0x37,0x41,0x77,0xe4,0x7d,0x3e +.byte 0x36,0xda,0xd5,0xfd,0x68,0x47,0x8c,0x68,0x61,0x4c,0xea,0x38,0x20,0xa5,0xe4,0x12,0x6e,0xd5,0x14,0x37,0x01,0xcf,0xbd,0xdd,0x55,0x97,0xb4,0x30,0xf0,0x65,0x15,0xee,0x1f,0xc8,0x5b,0x07,0x82,0xae,0x43,0xad,0x11,0xda,0x0e,0x61,0x23,0x0a,0x5f,0x52,0xf9,0x9d,0xc5,0x98,0x4e,0xaf,0x77,0x21,0xc8,0x9f,0x6d,0x25,0x94,0x4f,0x91,0x1a +.byte 0xb4,0x2d,0xe3,0x15,0xe5,0xe6,0x25,0xb8,0x8e,0xd8,0x33,0xe3,0x05,0x01,0x7b,0x6b,0xa8,0x39,0x44,0x4b,0x58,0x3c,0x17,0x53,0x17,0x5c,0xbc,0xd5,0xcd,0xd4,0x29,0xe7,0x17,0x7a,0x69,0xa6,0x75,0x8e,0x0a,0x00,0x41,0xbe,0xb4,0x8d,0x79,0x1d,0xac,0x2a,0x0f,0x9b,0x7b,0x5a,0xe8,0x17,0xe2,0xb3,0x1d,0x03,0xde,0x5a,0x7c,0x31,0x18,0x8c +.byte 0x1c,0xf9,0x19,0x7b,0x37,0x1f,0x53,0x77,0xce,0x1f,0xad,0xb6,0x0d,0x21,0xe1,0xb0,0xf9,0x42,0x52,0x99,0x02,0xa8,0x58,0xab,0x94,0xf8,0x9f,0x99,0x2d,0x1e,0x68,0x4f,0x5a,0x91,0x2b,0xdf,0xe8,0xe6,0x34,0xb6,0x80,0x9b,0xb1,0x0e,0x87,0xec,0x29,0x17,0x4d,0x98,0x2d,0x40,0xd0,0xf7,0xca,0x55,0x9d,0x56,0x19,0xd5,0x7c,0x4e,0x2e,0x75 +.byte 0x5d,0xe7,0x3e,0xed,0x47,0xdc,0xb1,0x04,0xe5,0x61,0x0f,0xe7,0xc4,0x16,0x71,0xf4,0xf8,0x8a,0xf1,0xfc,0xd5,0xdb,0xeb,0x0b,0x82,0x0f,0xfe,0x64,0xa2,0xb0,0x53,0xab,0xf5,0x01,0xc2,0x8f,0xa0,0x4d,0x5d,0x1b,0x54,0x32,0x48,0xca,0x8a,0x42,0x59,0x4a,0x85,0x68,0x75,0xd1,0x1b,0x03,0x11,0xfe,0x28,0xd7,0xd5,0x37,0x81,0x7a,0xfb,0x84 +.byte 0xfd,0xa8,0x98,0x54,0xf7,0x81,0xb0,0x2d,0x2d,0x5d,0x95,0x0a,0x5b,0x80,0x13,0x95,0xad,0x8f,0x88,0xaa,0x38,0x7e,0xbc,0x88,0xc2,0xf6,0xa6,0x1e,0x6d,0x78,0xc9,0x4f,0xa9,0xb3,0xaa,0x23,0x0c,0x62,0x19,0x6f,0x26,0x5d,0xca,0x36,0x23,0xf8,0xd1,0x76,0x80,0x32,0x59,0xa0,0x47,0x86,0xee,0xc9,0x0f,0x1d,0x37,0xd9,0xc9,0x4e,0x65,0x22 +.byte 0x17,0x95,0x88,0x85,0xb3,0x8a,0x5d,0xb9,0xe6,0x3b,0x6c,0x02,0x81,0x61,0xe0,0xab,0x19,0x6c,0x9a,0x29,0x33,0xf1,0x7b,0x0c,0x22,0x16,0x0c,0xd6,0xfa,0xc2,0x84,0xe5,0x74,0x9e,0x8e,0xf8,0xdb,0x44,0x68,0xa0,0x58,0x52,0x9f,0xad,0xe6,0x2b,0x23,0x70,0xf3,0x6e,0xdc,0xf1,0x2d,0xa5,0xc2,0x7f,0xef,0x5f,0x58,0xc2,0x96,0x66,0x67,0x4b +.byte 0x7c,0xe0,0xd7,0x96,0xda,0xf7,0xd7,0x7a,0x7d,0xb4,0x4f,0x48,0xbd,0x87,0x6b,0xf4,0xbd,0xd1,0x45,0xdc,0xba,0x4f,0xd2,0x00,0x7f,0xde,0x3c,0x57,0xd7,0x3b,0x5b,0xa9,0xf3,0x17,0x76,0x47,0x0c,0xcf,0x48,0x07,0xa8,0xc3,0x30,0x60,0xc6,0x98,0x20,0x29,0xba,0x5f,0x76,0x6d,0x63,0x5f,0x87,0x7e,0x36,0xbc,0xa3,0xe4,0xd6,0x6a,0x55,0x73 +.byte 0x8b,0x8b,0x62,0x40,0xc5,0x7e,0xa3,0x33,0x04,0xce,0xe2,0x9d,0x9f,0x67,0x1c,0xf0,0xa1,0x78,0xd2,0x0b,0x58,0xc1,0x2e,0xec,0x78,0x0a,0xc9,0x0b,0x1d,0xfb,0xcc,0x72,0xd8,0xe4,0x15,0xcb,0x09,0x8b,0xd9,0x33,0xa9,0xb6,0x24,0x7e,0x59,0x48,0xbf,0xda,0xdb,0x5c,0x99,0xd1,0x92,0x1b,0xb6,0xf6,0x75,0x78,0x53,0x69,0x89,0x27,0x6b,0x3c +.byte 0xfb,0xd2,0xa7,0xeb,0xc5,0xf7,0xea,0x8b,0x38,0x59,0x8e,0x02,0xc7,0x6e,0x96,0x8a,0x85,0x1c,0x91,0x1b,0x97,0x97,0x9e,0xa7,0x9d,0x10,0xa4,0x4a,0x6e,0xa8,0x51,0x05,0xbe,0x5f,0x9a,0x5b,0x94,0xf2,0x2c,0xa1,0x1e,0x33,0xc5,0xe8,0x92,0xb8,0xd2,0xfa,0x27,0x07,0x12,0xa1,0xdc,0x24,0x43,0x28,0x06,0xe5,0x43,0x57,0x8f,0x66,0x72,0x2f +.byte 0x26,0xf7,0xea,0xa1,0xcf,0x57,0xd6,0xa6,0xf7,0x37,0x1d,0x6e,0xd9,0xde,0x1a,0x8c,0xf5,0x01,0x76,0xc3,0x56,0x40,0x57,0x3d,0x4a,0x14,0x04,0xf2,0xfc,0xba,0x3b,0x60,0xf1,0x88,0x1e,0x16,0x08,0x99,0x90,0xfe,0x27,0xaa,0x04,0x53,0xd8,0x7e,0x0c,0x58,0x6a,0xd9,0x5a,0xe4,0x11,0xd4,0xcc,0x48,0xbe,0x03,0x08,0xbc,0x61,0x47,0xdd,0xde +.byte 0x5f,0x03,0xc7,0x8f,0x9c,0x08,0x93,0xe3,0xaa,0xee,0x9c,0xe3,0xc6,0x06,0x78,0xda,0x0a,0xdd,0xb0,0xc3,0xf3,0x0b,0xe5,0xa0,0x5f,0x1e,0x3e,0xb3,0x15,0x7f,0xf1,0xf4,0x38,0xb2,0xed,0xf2,0xa6,0x8b,0x1d,0x78,0xb6,0x03,0x19,0xcd,0x17,0xb4,0x18,0x17,0x49,0x61,0x17,0xbd,0xbe,0x4b,0x04,0x00,0xce,0x4b,0xcc,0x47,0x61,0x76,0x85,0xdc +.byte 0x2b,0x85,0x48,0x82,0xf4,0x9b,0xb4,0x62,0x53,0xc7,0x06,0x50,0xf2,0x3e,0xba,0x6d,0xf2,0x19,0x0f,0x7f,0x84,0xce,0xa6,0x4d,0x96,0x97,0x94,0x12,0xb6,0xd0,0xd6,0xa4,0xc1,0xcc,0x14,0x54,0xf6,0x7a,0xf1,0x94,0x62,0xa1,0xc7,0x22,0x9b,0x0d,0x0e,0x69,0xcf,0x38,0x5c,0xda,0x9f,0xc0,0xfa,0x93,0x81,0x24,0xce,0x9f,0xf3,0xc2,0x66,0xad +.byte 0x06,0x21,0xf2,0x48,0x6c,0x4a,0x0d,0xb8,0x41,0x86,0xaf,0xb7,0x6c,0x65,0xcb,0x83,0xd8,0x75,0x11,0x60,0xfa,0x06,0xe5,0xd2,0x11,0x87,0x29,0xb8,0x41,0xcb,0x17,0xb5,0xbd,0xbd,0xf9,0xd5,0xbc,0x89,0xb6,0x60,0x65,0x59,0xbb,0x38,0x9d,0x70,0xf9,0x81,0x6b,0xe6,0x12,0x80,0x08,0x73,0x9f,0xfb,0x2f,0x72,0x4e,0x18,0xff,0x65,0xab,0xa6 +.byte 0xaa,0x78,0xf1,0xa4,0xe9,0x1a,0x7d,0xa5,0xdd,0x91,0x77,0xa9,0xa3,0xf3,0xe3,0xe5,0x5a,0xa2,0x0d,0x3a,0x2a,0x4a,0x11,0x9a,0x8d,0xc3,0x00,0x6e,0xd4,0x4f,0xb9,0xe7,0x39,0x78,0x89,0x64,0xb2,0xc8,0xfd,0x1f,0xe6,0xa9,0x54,0x17,0x83,0x3f,0xeb,0x97,0x77,0xac,0xc8,0xba,0x0e,0x77,0x02,0xb0,0x29,0xbe,0x51,0x62,0xef,0xa5,0xd5,0xab +.byte 0x79,0x98,0xab,0x7a,0x1e,0x13,0xe8,0x87,0x4f,0x61,0xa3,0x37,0xdf,0xe6,0xda,0xb9,0xf5,0x69,0xf7,0x7a,0xee,0xd6,0x5f,0x6a,0xb3,0x95,0x55,0x59,0xd1,0x6c,0x5b,0xd5,0xba,0x8b,0x74,0x85,0xbf,0x1e,0xe5,0xb3,0x24,0x28,0x4b,0xc8,0x4a,0xec,0xa1,0x1d,0xda,0x99,0x3f,0xdf,0xfc,0xe6,0x2e,0x1b,0xa4,0xba,0x1a,0x03,0x89,0xb7,0x93,0x4e +.byte 0xaf,0x40,0xb0,0x7e,0x3f,0x34,0x0d,0x94,0x75,0x8c,0x8a,0xfb,0x88,0xcd,0xd3,0xc2,0x61,0x95,0x63,0x51,0xaa,0x78,0x1f,0x24,0x95,0x5a,0xb5,0x98,0x9a,0xd4,0xb8,0x34,0xe1,0x47,0x1c,0x68,0x0f,0x08,0xf1,0x69,0xe6,0xd4,0xaf,0x23,0xf6,0x32,0x71,0x51,0x01,0xa9,0xf2,0xa1,0x45,0x0b,0x75,0x82,0x09,0xe4,0x9c,0x2a,0x1d,0x0b,0xd6,0xd2 +.byte 0x26,0xe8,0x30,0x44,0xdf,0xa3,0x2b,0x97,0x11,0xc7,0xe7,0x47,0xfd,0xc7,0xbf,0x59,0xf3,0x28,0x32,0x46,0xc0,0xc4,0x7a,0x96,0x08,0x0d,0x2c,0xa1,0x82,0x6c,0x0a,0x33,0x82,0x55,0xd7,0xcf,0x3e,0x08,0xbb,0x22,0x15,0x96,0x12,0x66,0xd2,0xae,0x21,0x3a,0x54,0x6a,0xe0,0x33,0x0c,0xa4,0x96,0x4b,0x5d,0xf2,0x86,0xb9,0x70,0xe4,0x65,0x45 +.byte 0xe4,0x2f,0xa7,0xb4,0xc1,0xd5,0x9a,0x02,0xa1,0x5b,0x4e,0x58,0xca,0xf8,0x63,0xae,0x45,0x1c,0xf4,0xa7,0xc8,0xa5,0x84,0x23,0x87,0xcb,0x3e,0x88,0xca,0xe9,0xa9,0x49,0xc5,0xc6,0x63,0x37,0x99,0xe0,0x27,0x03,0x96,0x7b,0x73,0x8c,0x36,0xde,0x89,0x80,0x30,0x2c,0x00,0x94,0x0b,0xfb,0x1f,0x39,0xe0,0xed,0xb6,0x31,0x21,0x90,0xfe,0xa4 +.byte 0xee,0xa5,0xe5,0x7b,0x9a,0x11,0x41,0x51,0xab,0x89,0x54,0xe0,0x8d,0x5f,0x10,0x1b,0x76,0x27,0x77,0x3d,0xb0,0x58,0x86,0x7b,0xb7,0x45,0xfb,0xd0,0x81,0xa8,0xcd,0xc0,0xc8,0x5f,0xfb,0xfe,0x8c,0x0a,0x3d,0x5d,0x61,0x4b,0x9b,0x32,0x75,0x66,0xa9,0xac,0x32,0x35,0xe9,0x1a,0xdf,0x06,0x8d,0x13,0x5d,0x40,0xcb,0x7d,0x50,0x3e,0x54,0xab +.byte 0x04,0xbc,0x83,0x32,0x8f,0xf5,0x93,0x1d,0x9b,0x5a,0xe1,0x19,0x70,0x4a,0xba,0xfc,0x4c,0x6a,0xf3,0xd6,0xd1,0xfd,0x48,0xd0,0x7c,0xa4,0xab,0x0b,0xb6,0x5f,0xe1,0x31,0xce,0x99,0x10,0x98,0xfc,0x6e,0x1c,0xaa,0x9c,0x34,0xa2,0x55,0xdc,0xe0,0x81,0x1b,0x9e,0xff,0x75,0x2e,0x25,0xe9,0x2c,0x20,0x83,0xf6,0x66,0xf9,0x63,0x31,0xfe,0xa7 +.byte 0xbf,0x4d,0xfd,0xff,0x0b,0x93,0x84,0xd4,0xb4,0x72,0x13,0x38,0x90,0x75,0xc9,0xff,0x61,0x4b,0xf9,0x55,0x62,0x58,0xf0,0x60,0xce,0x2d,0xec,0x94,0x06,0x0a,0xde,0x48,0xc0,0x46,0x89,0xfb,0x5c,0xf7,0x9f,0x37,0xad,0xd2,0xff,0xbe,0xfb,0x81,0x21,0xe0,0x20,0x43,0x88,0xad,0x40,0x47,0x7a,0xa9,0x30,0x88,0x10,0x16,0x41,0xf8,0x25,0xe0 +.byte 0x8f,0xc2,0xe3,0x9f,0x48,0xd3,0xfe,0x61,0x70,0xb9,0xa1,0x9e,0xaa,0xa6,0x73,0xcf,0xc3,0xd6,0xab,0x69,0x65,0x4a,0x3c,0xec,0x28,0x02,0x63,0x62,0xa1,0xb6,0xa3,0xd5,0x8c,0x9e,0x11,0x81,0x98,0x12,0x4f,0xec,0xb6,0xe5,0x3a,0x96,0xa1,0x11,0x13,0x77,0x5f,0x0f,0x19,0x40,0x14,0x28,0xcc,0xf1,0x3e,0x19,0x1d,0x78,0x31,0xac,0x5c,0xce +.byte 0xd7,0x29,0xfa,0x02,0x3b,0x29,0xd8,0x3a,0x37,0xcb,0x94,0xb2,0x38,0xc7,0x7f,0x3a,0x46,0xd2,0xb7,0xfe,0xfb,0x54,0x7c,0x01,0xa2,0x9b,0x53,0x57,0x04,0x73,0x4e,0x06,0x90,0xe5,0x78,0x0a,0x45,0x67,0x12,0x83,0xd7,0x31,0x59,0xa4,0x76,0xaa,0x7c,0xde,0x72,0x92,0x11,0x94,0x4c,0x6a,0xe4,0x35,0x35,0x3a,0x2e,0xef,0x7c,0xc1,0x91,0x76 +.byte 0xd0,0xfe,0x84,0xd1,0xa1,0xf9,0x03,0xc3,0xba,0x09,0xbb,0x2c,0xe2,0xb5,0x06,0x7e,0x23,0xb7,0xe0,0xc1,0xd3,0xfd,0x55,0x01,0xf3,0xba,0xc5,0x1b,0xf8,0x02,0x60,0x92,0x0a,0x93,0x1c,0xc4,0x19,0x03,0x88,0xf5,0x45,0xe5,0x8f,0x7d,0xce,0x2c,0x87,0x2e,0xf6,0x55,0x8c,0xf9,0xb0,0xd2,0x72,0x2d,0x93,0x6d,0x28,0x6e,0x8e,0x3a,0xed,0x68 +.byte 0x02,0xda,0x80,0xd0,0x71,0x4a,0x8f,0x06,0x59,0x38,0x89,0x81,0xcb,0x1a,0x74,0x1e,0x62,0xa3,0xa5,0xb8,0x85,0xc3,0xd2,0x04,0x3d,0x3b,0x93,0x36,0x0c,0x12,0x55,0xfb,0x7b,0xc8,0xa3,0x25,0xa7,0x93,0xb0,0x3e,0x49,0x86,0xbf,0x76,0x8f,0xc4,0x4c,0xfe,0xce,0x4a,0xf6,0x2f,0x15,0x33,0x06,0x3a,0x35,0x49,0xe7,0x08,0xff,0x99,0xac,0xf6 +.byte 0x20,0x6d,0xab,0xb2,0x05,0xa9,0xe4,0x06,0x57,0x9c,0xf4,0x76,0x8c,0x82,0x64,0xd5,0x67,0xe0,0xad,0xe1,0x69,0xdc,0x9e,0x2c,0x59,0x92,0x3a,0xc8,0xc1,0x0a,0x61,0x89,0x45,0x9f,0x8b,0xf8,0x64,0x0a,0x5a,0x75,0x55,0x37,0x24,0xe1,0x42,0x43,0x7c,0x9c,0xcd,0x4e,0x9e,0x19,0xfb,0xd9,0x15,0x29,0x30,0x52,0x33,0xf3,0xc8,0x88,0xdb,0xaa +.byte 0x07,0x27,0xfb,0x2b,0x0c,0xc0,0xa1,0x5f,0x51,0xf1,0x54,0xf8,0x90,0x0a,0x35,0x07,0x6e,0x9c,0x64,0xd8,0x4f,0x2d,0xb3,0x61,0xbc,0x18,0x1f,0x22,0x84,0x94,0x4b,0x85,0xfc,0x4a,0xf9,0xe5,0xfc,0xdd,0x7a,0x07,0xa2,0xbb,0xbe,0x7e,0x1f,0x4e,0xf9,0x29,0xb8,0xde,0x56,0xe9,0x04,0xc1,0xc2,0xb6,0xa8,0xc7,0xb6,0x83,0xf2,0x85,0x3d,0x35 +.byte 0xe3,0xeb,0x2f,0x2f,0x3c,0x1a,0x3a,0xf1,0x61,0x1f,0xe8,0xf0,0xce,0xa2,0x29,0xda,0x3f,0x38,0xf5,0x82,0x7a,0xb8,0x55,0xf1,0x1a,0x6e,0x5b,0x5c,0xd0,0xc8,0xc8,0x3a,0xe2,0xaf,0xb4,0x6f,0xba,0xe4,0x03,0x78,0x5f,0x47,0x4b,0xaf,0xfe,0x2a,0x7e,0x27,0xba,0x17,0xb4,0x92,0x27,0x70,0x13,0xd9,0xbb,0x6b,0x1c,0x9a,0x3e,0x29,0x85,0x9a +.byte 0xb7,0x64,0x5b,0x6d,0x7b,0xec,0xb2,0x26,0x3a,0x4b,0xb7,0x17,0xaf,0xb5,0xa1,0xbc,0x4d,0x67,0x4c,0x86,0xd1,0x53,0x2e,0x5d,0x64,0xe8,0x55,0xd9,0xbb,0xae,0xc1,0x55,0x41,0x99,0x8e,0x4d,0xed,0x3d,0x9e,0xea,0xe3,0xf2,0x76,0x45,0x6d,0xaa,0xbb,0x89,0x0b,0xc0,0x13,0xfe,0x99,0x2c,0xb0,0xd2,0xa9,0xeb,0x58,0x57,0x4d,0x88,0x2e,0x04 +.byte 0x4f,0x7a,0x76,0xaa,0x3a,0xa6,0x08,0x93,0x42,0x74,0x2f,0x3a,0x35,0xb0,0x36,0xcc,0x77,0xec,0x54,0x41,0x2e,0x81,0xf6,0x9f,0xf3,0xe7,0x23,0xc0,0x3f,0xa4,0x52,0x83,0x38,0xe2,0x12,0xed,0xdb,0x23,0xa0,0x0b,0xbf,0x61,0x98,0x89,0xb0,0xa4,0x3d,0xa9,0x6a,0x73,0xa1,0x99,0xc9,0x9e,0x68,0x45,0x37,0x4b,0x6c,0x87,0xfb,0x93,0xf2,0xaa +.byte 0xe8,0x1d,0x53,0x6c,0x4b,0xda,0xc5,0x6f,0xaa,0xde,0x99,0xd2,0xba,0x7c,0x27,0xc2,0x4e,0xd5,0x5b,0xc8,0x13,0x9e,0xa2,0x10,0x6a,0xbb,0x39,0xf9,0xa7,0x55,0x0a,0x65,0x88,0x3c,0x9b,0xff,0x83,0x4e,0xf7,0x9c,0x99,0x69,0xbd,0x64,0x0d,0xd1,0xc0,0xb0,0x43,0xd6,0x63,0x50,0x13,0x68,0x8d,0xd1,0x7e,0x56,0x93,0xb5,0x8e,0x8f,0x12,0xe5 +.byte 0x37,0x96,0x21,0x64,0xd5,0x0b,0xf6,0x27,0xf8,0xaa,0x34,0x8e,0xc4,0x2b,0x7b,0x6a,0x7c,0x89,0x4e,0x15,0x15,0x3d,0x17,0x93,0xd4,0x99,0xfe,0x97,0x95,0x20,0x85,0xcc,0xd4,0xcd,0x73,0x67,0x80,0x22,0x06,0xed,0x5e,0xce,0x90,0x59,0x01,0x31,0x24,0x17,0x37,0x4a,0x63,0x96,0xc2,0xf3,0xe0,0x21,0x0a,0x3b,0x9f,0x94,0xad,0xd6,0xa4,0xa9 +.byte 0xa2,0x54,0x0d,0x2a,0xb3,0x5c,0xfa,0xbe,0xeb,0x21,0xd6,0x13,0x22,0xa5,0x95,0x5e,0x25,0x72,0xf9,0x18,0x1f,0x50,0x64,0x04,0x5b,0xe8,0x0e,0x1f,0x6c,0xe1,0x4e,0xf5,0x7f,0xf0,0x13,0x4f,0xda,0x75,0xab,0x5a,0x98,0xd3,0x07,0x32,0x96,0x2a,0xc7,0x1e,0x0f,0x14,0xdb,0x96,0x5f,0xac,0xc1,0xef,0x5b,0x2d,0xd6,0x6d,0x13,0x01,0xd9,0x04 +.byte 0x9c,0xcd,0xe5,0x5e,0xbe,0x3a,0x47,0x14,0x09,0xbe,0x11,0xad,0x87,0x3f,0x0e,0xe1,0xcb,0x97,0xd0,0x6e,0x1f,0x49,0x07,0xd1,0x8c,0x2b,0xe0,0xf0,0xb2,0xaa,0x8b,0x70,0x18,0x7f,0x29,0xcc,0xc4,0x23,0x66,0x48,0xc4,0xb5,0x5e,0xf1,0x10,0xd7,0x1d,0x2a,0xba,0xe4,0x12,0x64,0x1d,0xf5,0x03,0x35,0x71,0x57,0x5d,0xf4,0xa4,0xb5,0x99,0x0b +.byte 0x4c,0x80,0x65,0x07,0x2f,0xbc,0xf7,0x28,0x8b,0xc0,0x8f,0x84,0x63,0x7e,0xf5,0x01,0x23,0x8c,0xaf,0x71,0x35,0xd4,0xe1,0x70,0xc7,0xef,0x1f,0x66,0xa9,0x34,0x57,0xaa,0x9a,0xbb,0x80,0x43,0x15,0x96,0xc4,0x03,0xd9,0xae,0xbe,0x89,0x1c,0xa1,0x9f,0x65,0x61,0xe5,0x90,0x9f,0xa6,0xf4,0x3b,0xde,0xa1,0xd1,0xf1,0xf9,0x2d,0xd7,0xa7,0x7e +.byte 0x3d,0x42,0x3d,0x1b,0x99,0xed,0x49,0x2e,0x92,0x6b,0x47,0x0e,0x0b,0x90,0x56,0xe0,0x1b,0x6b,0xfe,0x97,0xfe,0x9b,0xa2,0x50,0xcc,0xbf,0xea,0xae,0xe8,0xf0,0xc4,0xe5,0x81,0x20,0x4a,0xb0,0xf7,0xa5,0x23,0x24,0xf6,0x3f,0x9e,0x9c,0xcc,0xce,0xe4,0x95,0x49,0xea,0x66,0x4a,0x35,0x31,0xf3,0x03,0xc3,0x08,0xf9,0x5f,0x95,0x4c,0xbc,0x84 +.byte 0x13,0xbe,0x7f,0x35,0xbb,0xd7,0x35,0x3c,0xfb,0x05,0x43,0x95,0xbf,0x87,0xf2,0xc3,0x2d,0xef,0x13,0x1d,0x65,0x17,0x82,0x75,0x3d,0x67,0x51,0xcd,0x6e,0x42,0x5f,0x49,0x53,0x8b,0xaf,0x34,0x7d,0xa8,0xc1,0x45,0xcd,0x3d,0x29,0x00,0xa3,0xf3,0xbb,0x44,0x00,0x05,0x57,0xa5,0xeb,0xfd,0x98,0xa6,0xae,0xc6,0xc4,0x6c,0x6d,0x7d,0xf6,0x3e +.byte 0x82,0x1d,0x12,0xe7,0xcd,0xd2,0xd5,0xfe,0x41,0xf8,0xa4,0xb3,0x6a,0x04,0x13,0x28,0x10,0x40,0x27,0xc9,0x43,0x74,0xcf,0xaf,0x9b,0x60,0x17,0x43,0x8f,0xd7,0xb7,0x56,0x72,0xf3,0x48,0x0a,0xe6,0x36,0xf2,0x3f,0x51,0xf9,0x6e,0xc8,0xa3,0x04,0x8c,0x01,0x86,0x6e,0x83,0x27,0xe2,0xba,0xf2,0x8f,0x8f,0xa1,0x39,0xe7,0x17,0xdd,0x06,0x10 +.byte 0x0c,0x7f,0xfa,0x22,0x5d,0x88,0x35,0xc6,0xcd,0x60,0xa2,0xf0,0xfd,0xc9,0xed,0x85,0xac,0x88,0xfd,0x7d,0xc0,0x77,0x1b,0x80,0x3d,0x21,0x1e,0x8e,0x4d,0xdb,0x20,0xe2,0x38,0xad,0xd4,0xb5,0x2b,0x2b,0x31,0xbc,0x7b,0x02,0xa2,0x25,0x50,0xc0,0x01,0x20,0x76,0x6f,0x98,0x0b,0x3d,0x46,0xed,0xbb,0x2b,0x39,0x74,0x30,0xce,0x3e,0x6d,0x91 +.byte 0xa1,0x89,0x83,0xde,0x69,0x93,0x1a,0x14,0xa1,0xb0,0xaa,0x80,0xb0,0x1c,0x02,0x3f,0x13,0x9a,0x15,0x7f,0xb4,0x02,0x8f,0x30,0x0b,0xee,0xd9,0x72,0xcb,0x74,0x95,0x4a,0x39,0xb3,0x4e,0x78,0x12,0xb1,0x77,0x89,0xc0,0xaf,0x17,0xfd,0xc1,0x68,0x65,0xd1,0x08,0xae,0x56,0x5c,0xe0,0xe7,0x6f,0xb3,0x1e,0x10,0xce,0xd8,0xdf,0xee,0x67,0xad +.byte 0xd8,0x08,0xe0,0x79,0x36,0xe4,0x57,0x1c,0x45,0x22,0xa7,0x44,0xa8,0x12,0x37,0x92,0x85,0x9f,0x3a,0x48,0xd0,0xfd,0xb3,0x40,0x20,0x10,0xed,0x11,0xe0,0x9a,0xa6,0x09,0x5b,0xe9,0x21,0x95,0xe1,0x45,0x19,0x39,0xcc,0x85,0x5f,0xa5,0x6b,0x46,0x37,0xe1,0xa1,0x17,0x3f,0xb6,0xe9,0xb0,0x81,0x25,0xf6,0xd1,0xb8,0x22,0x5a,0x27,0x48,0x83 +.byte 0x01,0x36,0xd4,0xb8,0xc0,0x9f,0x37,0x52,0x22,0xd2,0x69,0x7b,0x3d,0xfb,0x31,0xc1,0xa3,0xb4,0xa1,0x1d,0x0e,0x24,0x9a,0xda,0x02,0x15,0x4b,0x46,0x24,0x0e,0xb1,0x79,0xc2,0x5b,0x01,0x60,0x4a,0x24,0x8a,0xbb,0x70,0xaa,0xf4,0x45,0xc1,0x0d,0x04,0x26,0x3f,0x74,0xbd,0xdd,0x33,0xaa,0xd6,0x62,0x56,0xb1,0xe7,0x2d,0x7b,0x66,0xa2,0x40 +.byte 0xb4,0xe4,0xbd,0x8e,0x35,0xba,0xf1,0x2f,0x59,0xa7,0x01,0x6d,0x5a,0xa7,0xa6,0x3b,0x82,0xa3,0xb4,0x54,0x51,0x33,0x6b,0xfb,0x78,0x4a,0x74,0x88,0x7f,0x55,0xea,0x08,0x8e,0x19,0x78,0xbc,0x80,0x19,0x2f,0x41,0x97,0x20,0xa0,0x9e,0xbf,0x44,0xae,0x2e,0x26,0x66,0xe3,0x25,0xa0,0x92,0xa9,0xbe,0x8c,0x0d,0x96,0xec,0x93,0x99,0xe2,0xe7 +.byte 0x81,0xd5,0x10,0x62,0x3a,0x97,0x38,0x51,0x36,0x11,0x00,0xe0,0xc1,0x3a,0xc5,0xd4,0xa5,0x19,0xf4,0x82,0x66,0x0c,0xf9,0xb3,0x04,0x3e,0x57,0xc3,0x43,0xab,0xc6,0x52,0x95,0x8f,0xd3,0xf1,0xde,0xd9,0x57,0x6d,0x32,0x4f,0xc7,0x8c,0x1b,0x7a,0x53,0x6a,0xcf,0x56,0xea,0x61,0xb4,0xe5,0x64,0x2d,0x02,0x26,0x5b,0xcf,0x1c,0xc7,0x37,0xc3 +.byte 0x41,0xd2,0x1b,0x6c,0x5b,0x47,0xb8,0x73,0x89,0xfe,0x0e,0x7a,0x35,0x05,0xfc,0xea,0x6a,0x34,0x74,0x69,0xf0,0x12,0x29,0xa9,0x33,0xce,0x93,0x15,0xa0,0x68,0xb3,0x46,0x43,0xdb,0x8d,0xfa,0xef,0x93,0x66,0x72,0x18,0xae,0xe4,0xab,0xf4,0x8a,0xd1,0xb5,0x42,0xbd,0x2d,0xda,0xcb,0xf6,0x44,0x25,0xb1,0x01,0x8a,0xff,0xd5,0x34,0x16,0xec +.byte 0x7e,0x38,0x7b,0x50,0x41,0x61,0xf9,0xdf,0x4c,0x3e,0x02,0xd6,0xc3,0xce,0x19,0x9f,0x12,0x45,0x0c,0x99,0xb1,0xd9,0xeb,0xb9,0xe3,0xd5,0xb6,0x2b,0x25,0x8c,0x0b,0x04,0xf8,0x8d,0x41,0x41,0x3d,0x39,0x1b,0x7f,0x88,0xa7,0x8f,0x61,0x30,0xfe,0x67,0x75,0x35,0xd1,0x41,0x90,0xda,0x73,0x80,0xcf,0xc9,0xf6,0x44,0x00,0x67,0xcd,0xca,0xaf +.byte 0x6d,0x84,0x39,0x9a,0xb2,0xbb,0xfc,0xac,0x9b,0xb2,0x95,0x2f,0xc9,0x06,0x3a,0xa4,0x7b,0x9a,0x25,0xc6,0xe5,0xdb,0x7a,0xc6,0x8b,0x84,0x6a,0xb7,0x1e,0x22,0xaa,0x10,0x96,0xd3,0x55,0x50,0xa2,0x02,0x04,0x69,0x92,0xd7,0x6b,0x1f,0x9b,0x45,0x07,0x71,0xda,0xdc,0x76,0xc5,0xb8,0x34,0xa2,0x32,0x33,0x16,0x2e,0xb0,0x2a,0x90,0x43,0x40 +.byte 0x92,0x77,0x74,0x4e,0xdc,0xb4,0xe2,0x7d,0xc1,0x57,0xaf,0xf4,0x2c,0x20,0x65,0x77,0x88,0xc9,0x6e,0x69,0x38,0xc8,0x19,0x95,0x32,0x54,0x59,0x7f,0x37,0xd7,0x3c,0x07,0x05,0x87,0x2b,0xf9,0x58,0x74,0xc7,0x61,0x13,0x3d,0xc2,0xd9,0xec,0x3b,0x36,0x9f,0x8e,0xae,0x52,0xdd,0x5c,0xaa,0x29,0x6b,0x31,0x34,0x48,0x61,0x34,0x62,0x56,0xce +.byte 0x25,0xa8,0xc0,0x62,0xf5,0x35,0x58,0x4d,0x8e,0x61,0xd4,0xae,0x25,0x50,0xee,0x45,0xdd,0x14,0x7d,0x46,0x81,0x47,0xc3,0x3f,0x3f,0x81,0xdb,0x9a,0x59,0x56,0x4f,0x45,0xed,0x9c,0xe2,0xfc,0x96,0xff,0x5d,0x37,0x70,0xad,0xd2,0xeb,0xd9,0x2d,0x2a,0xaf,0xb9,0x16,0x4a,0x79,0x5d,0x76,0xb5,0x8f,0x74,0x19,0x6f,0x74,0x7d,0x4a,0xee,0x83 +.byte 0xa5,0x81,0xf3,0xd5,0xa0,0x43,0x5e,0x46,0xba,0xbe,0x49,0xa8,0xce,0x72,0x36,0x32,0xcd,0x8c,0x9b,0xa0,0xf9,0x5d,0xb7,0xb9,0xc7,0x8c,0xb2,0x59,0xb4,0x44,0xc1,0x90,0x53,0x92,0xd2,0xa8,0x4c,0xf9,0x35,0x40,0x32,0xd1,0xf0,0x2f,0xcb,0x6a,0x0b,0xe0,0xbe,0x34,0xc9,0x82,0x18,0x8d,0xfb,0xfc,0x50,0x8d,0x67,0xd5,0x86,0xd4,0xf1,0xb1 +.byte 0xaa,0x2f,0x9c,0xbc,0x52,0xbb,0x9f,0x17,0x1c,0x74,0x1d,0xdf,0x2d,0x1a,0x94,0x43,0x9b,0x80,0xb9,0x48,0xa3,0xaf,0x4b,0x30,0x0d,0xd9,0x3f,0x11,0x48,0x79,0x60,0xcc,0x25,0x6a,0xdb,0x8a,0xda,0xab,0xda,0x09,0x7c,0x9c,0x4a,0xaf,0xf9,0x0d,0xfb,0x7a,0x92,0x61,0xa5,0x17,0xf8,0x79,0x1b,0x00,0x52,0x56,0x5e,0x27,0x22,0x37,0xf4,0xbe +.byte 0x52,0x36,0xd3,0xdc,0x9a,0x33,0xf5,0x44,0x0e,0x53,0x0b,0xf6,0x9b,0xb0,0xb6,0x11,0xe4,0xd5,0x45,0x2e,0xdc,0xdb,0x46,0x18,0x9a,0x90,0x8b,0xcc,0xfe,0xc6,0x94,0x4f,0x97,0xb9,0x42,0xb6,0xd3,0x8f,0x7c,0x20,0xd1,0xa8,0xe6,0x85,0xce,0x65,0xeb,0x95,0x38,0x11,0x5c,0x1a,0x9d,0x34,0x25,0xc2,0xf0,0x33,0xbb,0x2c,0xc9,0x8d,0x0a,0x7a +.byte 0xb1,0x90,0x9f,0x24,0xed,0x35,0x3c,0x7e,0x71,0x82,0x12,0x3a,0x79,0x29,0xc8,0xa7,0x3e,0xa2,0x4e,0x50,0x03,0x94,0x7a,0x94,0xb7,0x2b,0x61,0x95,0x3d,0x5e,0x60,0x1c,0x68,0x51,0x82,0x73,0xe0,0x4a,0x2a,0x48,0x26,0xda,0xa3,0x53,0x8c,0x83,0xba,0x9f,0x95,0x37,0x5e,0x68,0x54,0x19,0x21,0xf8,0x31,0xaf,0x6b,0xfc,0x3a,0x3e,0xe3,0x3f +.byte 0xdb,0x16,0xb5,0x7e,0x13,0xf8,0xfd,0x7f,0x36,0xd6,0x8e,0x33,0xaa,0xe9,0xa4,0xa7,0xfd,0xf0,0x32,0xa6,0xdf,0xfa,0x22,0x7d,0xff,0x2a,0xe6,0x0d,0x6f,0xe2,0x21,0x54,0x6c,0x1a,0x99,0x17,0x56,0xad,0xce,0x39,0x6b,0x1a,0xe8,0x27,0x13,0x12,0x9c,0x4b,0x84,0x69,0x73,0xde,0x44,0x14,0xb2,0x7c,0x44,0x54,0x91,0x4f,0xeb,0x83,0xec,0x04 +.byte 0x73,0x85,0xb1,0xa8,0x44,0x72,0xa7,0x77,0xaf,0x0c,0xe0,0x52,0x65,0x04,0xe7,0x2a,0xee,0x0c,0x20,0x83,0x32,0x34,0x17,0x00,0x61,0xf9,0xf5,0x42,0x03,0xa4,0xb8,0x02,0x6f,0xb2,0xd3,0x65,0x51,0x2a,0x8e,0xdf,0x28,0x78,0x8a,0x8a,0x00,0xfb,0x24,0xd6,0xd5,0x86,0xaa,0xfb,0x86,0x93,0x5d,0x11,0xa4,0xf3,0xfd,0x36,0x18,0xf3,0x61,0xea +.byte 0x33,0xa8,0x0c,0xf0,0xb4,0x68,0xee,0xd3,0xe3,0x4f,0x22,0x24,0xde,0x1f,0x29,0x84,0x8b,0x5b,0x73,0x15,0xd6,0x62,0xa3,0x71,0x7d,0xf0,0x65,0x36,0xca,0x68,0x8a,0x6d,0x61,0x9c,0x0d,0x53,0xdd,0xf4,0x12,0xb3,0x5f,0xf0,0xb1,0x86,0xd6,0xe2,0xd6,0x80,0x4a,0x01,0x09,0x99,0x65,0xdb,0xae,0xe6,0xfc,0x68,0x5b,0xf9,0x10,0x99,0x8b,0x9f +.byte 0x08,0x52,0x09,0xae,0x59,0x4d,0x6c,0xf9,0x91,0x2b,0x57,0xea,0xf0,0xa3,0xdb,0xb8,0x99,0x29,0x2f,0xab,0x95,0x01,0x7d,0xec,0xd8,0x77,0x73,0x75,0x4f,0x88,0x44,0x69,0x76,0xc9,0x3c,0xf0,0x2d,0x7b,0x0d,0xbe,0xd4,0x88,0x0d,0xbc,0xa0,0x52,0xf4,0x2a,0xd1,0x62,0x2a,0xa9,0xe2,0x41,0x2f,0x52,0xce,0x96,0x7d,0x65,0x9b,0x74,0x82,0xde +.byte 0x43,0x4d,0xf8,0x8e,0x77,0x1c,0x18,0xf5,0x7e,0xab,0x94,0x3e,0xe7,0x90,0x2b,0xa1,0x16,0x00,0x7f,0x9c,0x9d,0x86,0xd1,0x74,0x7e,0xf7,0xbd,0x5a,0xa7,0x2f,0x0f,0xb0,0x5c,0xfc,0xfb,0x59,0x00,0xf3,0x84,0x09,0x77,0x66,0x17,0xf6,0x5d,0x0e,0xe2,0xe2,0xd4,0xb3,0x9e,0x79,0x88,0x66,0xa5,0x8e,0x30,0xae,0xca,0x7e,0x2b,0x32,0xa2,0x89 +.byte 0xe9,0x7e,0x59,0x21,0xd5,0x99,0xc7,0x10,0xa8,0x6f,0x95,0x8d,0x84,0xb4,0xcf,0x61,0xe7,0x5c,0x09,0xf3,0xbc,0xeb,0xf6,0x0c,0x84,0x1a,0x8d,0x13,0xf8,0x49,0x22,0xeb,0x09,0x55,0xef,0x56,0x12,0x21,0xcb,0x61,0x87,0xbf,0xef,0x43,0x5b,0x82,0xa8,0xc2,0xa2,0x5e,0xad,0x54,0x9a,0xcc,0x95,0xa2,0x01,0x05,0xb2,0xbb,0x26,0xa8,0xfd,0x6b +.byte 0x66,0x95,0x9c,0x0b,0x7b,0x23,0x32,0xff,0xdd,0x6c,0x18,0x1e,0x77,0x01,0x3c,0x82,0xaa,0x97,0x28,0x0f,0x93,0xa5,0x6c,0x85,0xe5,0x94,0x40,0xe0,0xa3,0x01,0x57,0x56,0x43,0x40,0xdd,0xa9,0xaf,0x21,0x79,0x10,0x8b,0xff,0x4b,0x51,0xe4,0xa2,0xe5,0xd7,0x0c,0xe2,0x9e,0x1e,0x38,0xdb,0x64,0xe1,0xb1,0x5b,0xe5,0x40,0xab,0xf6,0x05,0xd2 +.byte 0xba,0x85,0x78,0x61,0x2d,0x2e,0x07,0x06,0x6d,0x86,0x59,0xaa,0xd9,0x2c,0xfb,0x83,0x34,0xd0,0x2d,0x1d,0xad,0x5f,0xe4,0xac,0x05,0x46,0x3a,0x7b,0xd9,0xef,0x9f,0x2b,0x0c,0x18,0x21,0xf1,0x24,0x8a,0xb4,0x6e,0xd2,0x98,0x75,0x08,0x96,0x0c,0x7b,0x41,0xb7,0xf7,0x1f,0xcd,0xa8,0x1f,0x44,0xb1,0xed,0xdc,0x0e,0xcb,0x94,0xa0,0xb8,0x62 +.byte 0x67,0xdc,0x24,0xde,0x9e,0xe9,0x89,0xcd,0x92,0x7c,0x91,0x15,0xff,0xbd,0xfd,0xee,0xf8,0x29,0xd7,0xf9,0xe8,0x51,0xe7,0xc8,0x21,0xc5,0x20,0xe4,0xb8,0xa6,0xdb,0xfb,0x09,0x65,0x1c,0x3b,0x9e,0x39,0x44,0xcf,0xf5,0xc2,0x7b,0xf3,0x14,0x7d,0x69,0xf2,0xd0,0x97,0x63,0xf1,0xa7,0x81,0x56,0xfb,0xdf,0x4d,0x83,0x55,0x4f,0xde,0x50,0x7d +.byte 0xfe,0xb0,0xc0,0xc8,0x3b,0x3d,0x78,0x74,0x58,0x74,0x5e,0xfc,0xb7,0x0d,0x9a,0x26,0x3b,0x39,0xb6,0xf7,0xe0,0xe4,0x12,0x3c,0xd6,0x88,0x1c,0x9b,0x51,0x89,0xe7,0x53,0xcd,0x24,0x2e,0x34,0xa2,0xee,0xfa,0x5a,0x87,0xe5,0x7e,0xd5,0xf2,0x2f,0x15,0x99,0x57,0x5d,0x31,0x02,0xf8,0x08,0x38,0xea,0x8c,0x30,0x21,0xb0,0xff,0x94,0x51,0xcf +.byte 0x23,0xb7,0x02,0x5d,0xa3,0x75,0x7f,0x9d,0x66,0x49,0xe5,0xbe,0xc7,0x06,0x5e,0x1d,0xc9,0xe2,0x82,0x8a,0xc4,0x17,0x83,0x7e,0x65,0x6d,0x85,0x26,0x66,0xc0,0xf4,0xa5,0x1c,0x6e,0xba,0x32,0xfa,0x41,0x7b,0x2b,0x64,0x98,0x58,0x8c,0xce,0x2f,0xf3,0x56,0xf0,0x67,0xef,0x73,0x79,0xc4,0xc2,0x07,0xd7,0x85,0x1d,0x75,0x38,0x1e,0x15,0x82 +.byte 0x9d,0xf3,0xdd,0x3a,0x72,0xa3,0x23,0x0e,0x4a,0x1a,0x3a,0x97,0xc8,0xf1,0xf1,0x58,0x5d,0x1f,0xae,0x6d,0xc8,0x03,0xe0,0x7b,0x0f,0xf5,0x6f,0x35,0x41,0x8d,0xd5,0x03,0x85,0xdd,0xeb,0x3d,0x73,0xb1,0x93,0x35,0xc0,0x0f,0xfb,0x42,0xd4,0xf1,0x6b,0x35,0xe2,0x96,0xc5,0xd9,0xf2,0x69,0xbb,0x70,0x5e,0xf0,0x0c,0xe6,0xb5,0x81,0x94,0xc9 +.byte 0x29,0xa1,0x34,0x89,0xd9,0x9c,0x49,0x01,0x37,0x56,0x16,0x30,0x47,0x6f,0xe4,0x7c,0x5b,0xdd,0xfb,0x80,0x7f,0x0c,0x38,0x53,0x3d,0x57,0xf7,0xc4,0x80,0xf9,0x12,0x3a,0x9f,0xf9,0xb0,0xb6,0x94,0x6d,0xde,0x41,0x4e,0x30,0xac,0x1f,0x25,0x34,0xa0,0x95,0xe8,0x00,0x86,0x32,0x40,0xbb,0xc1,0x49,0x2d,0x07,0x49,0xb8,0x5f,0xcd,0x1b,0xd3 +.byte 0x0e,0x0c,0x54,0x0f,0xe4,0x20,0xe5,0xa1,0xed,0x98,0x65,0x5a,0xe7,0xce,0x68,0x9c,0x4c,0x48,0x03,0x9c,0x5b,0x68,0x4b,0x75,0x71,0x11,0x40,0x69,0xca,0x9a,0x3a,0xb2,0x3d,0x35,0x2c,0x70,0x35,0x8b,0x80,0x53,0x86,0x30,0x7d,0x4c,0xe9,0xc0,0x30,0x60,0xd0,0x06,0xbe,0xc2,0xad,0x39,0xcc,0xb2,0xec,0x90,0xcc,0xbd,0x7c,0xb5,0x57,0x20 +.byte 0x34,0x2e,0xfc,0xce,0xff,0xe3,0xd9,0xac,0xb8,0x62,0x6b,0x45,0x22,0x34,0xdf,0x8e,0x4b,0xf1,0x80,0x28,0x8d,0x0f,0xd5,0x3b,0x61,0x3e,0x91,0xa1,0xb1,0x85,0x27,0x78,0x88,0xbc,0xc4,0xb1,0xa1,0xbe,0x4f,0xc3,0xfd,0x1f,0xb9,0x30,0x31,0x2f,0xc1,0x9d,0xa3,0xb6,0x29,0xa4,0x60,0x82,0x73,0x93,0x74,0xea,0x97,0x67,0xf2,0xa3,0x97,0x50 +.byte 0x2f,0x9f,0x7b,0x23,0x18,0xb6,0xb4,0xee,0x15,0xa0,0xa4,0x07,0x1a,0xe9,0xb6,0x63,0x7e,0x88,0x40,0x57,0x86,0x79,0x6b,0x75,0xbe,0x57,0x8f,0xfe,0x0d,0xdf,0x4c,0x7f,0x39,0x9a,0x97,0xa6,0x87,0xc5,0xfd,0x52,0x77,0x36,0xc9,0x66,0x63,0xcf,0xc7,0x34,0x3b,0xf4,0x7a,0x12,0x56,0xf0,0xbc,0x7a,0x1a,0xa2,0xa2,0x51,0xb8,0xc1,0x70,0x81 +.byte 0xcf,0x1d,0xb5,0xe2,0x82,0xbb,0xfc,0xa3,0x80,0x18,0xf8,0x4b,0x76,0x9c,0xdf,0x9d,0x6c,0xf1,0xd8,0x2a,0xab,0x0c,0x12,0x02,0x29,0x09,0xfd,0x28,0xfb,0x57,0x38,0x05,0x2c,0xc5,0x67,0xd1,0xaa,0xbc,0x98,0xe6,0x22,0x78,0x06,0x4f,0x69,0x6a,0x63,0x1a,0x13,0x0b,0xa5,0xd2,0x61,0xc7,0x45,0x5b,0x21,0xab,0xbf,0x7b,0x7f,0x8c,0x2c,0xba +.byte 0x93,0x9f,0x41,0x67,0xc4,0x5f,0x53,0xac,0x90,0x05,0x86,0xb5,0x80,0x1f,0x5b,0x35,0x4f,0x92,0xf5,0xa8,0x5f,0xfb,0x56,0xdd,0x2d,0x9b,0xea,0xcb,0x0f,0x98,0x3c,0x4e,0xf1,0xa5,0x2c,0x37,0x70,0xe3,0x5c,0xaf,0x96,0x36,0xa8,0x2a,0xec,0xe0,0x2c,0x00,0xcd,0xaf,0x03,0x1d,0x05,0x2f,0x8c,0xe7,0xfe,0x4d,0xe9,0x97,0x6d,0xe1,0xf9,0x23 +.byte 0x60,0x08,0xea,0xfb,0x27,0xc8,0xf9,0xdf,0x49,0xfe,0xd9,0x48,0x35,0x6b,0x43,0xc5,0x19,0x90,0xb1,0xf1,0xee,0x84,0x7a,0x57,0xfa,0xa5,0xd6,0xd8,0xc9,0xf0,0x8a,0xe7,0x13,0x84,0xfc,0x28,0x54,0xae,0x99,0xfd,0x91,0xbe,0x91,0x27,0x98,0x28,0xdc,0xd7,0x2e,0xc1,0x21,0xcb,0x31,0xf8,0x47,0xe6,0x77,0x6d,0xee,0x7b,0x12,0xe4,0x9e,0x9d +.byte 0x07,0x46,0xa9,0x15,0x0b,0x3c,0xbe,0xc7,0x2d,0xe5,0xd6,0x25,0x4c,0xea,0x61,0xdc,0x18,0xb2,0x9d,0xb0,0x9a,0xff,0xa3,0x5f,0x2b,0xab,0x52,0x7d,0x1b,0xc3,0xa3,0x41,0x8f,0x5a,0x29,0xbd,0xc4,0x56,0x54,0x43,0x2d,0x61,0x07,0xed,0xd1,0x81,0x45,0xdb,0x61,0x0f,0xda,0xea,0xa6,0x1e,0xf9,0x9c,0xc0,0x8c,0xc4,0x8e,0xc7,0xca,0x38,0xe2 +.byte 0x45,0xde,0xdc,0xc5,0xc6,0xb0,0x43,0x17,0x8b,0xb1,0x58,0xd1,0x10,0x8e,0xa5,0x17,0x37,0x85,0xca,0x61,0x67,0x5c,0xd0,0x72,0x22,0x6b,0xd3,0x3b,0x53,0xbc,0xfb,0xe1,0x1e,0xa4,0x1b,0xd3,0xc3,0x8a,0x50,0x03,0x39,0xf5,0x36,0xdf,0x51,0x2e,0x05,0x4a,0xa8,0xdb,0x91,0x87,0xae,0xfe,0x3f,0x5c,0x35,0x5e,0xf9,0x8f,0x43,0x9e,0x92,0x36 +.byte 0x91,0x27,0x90,0xe8,0x7c,0xcc,0xc4,0x9c,0x13,0xbb,0x61,0x40,0xec,0x4f,0x49,0xcf,0x04,0x38,0x77,0x3b,0xb5,0xf8,0x69,0x8d,0xbb,0xb2,0x30,0x32,0x42,0x4d,0x7d,0x6c,0x56,0xdc,0xf4,0x8f,0xfc,0xb8,0x53,0xc5,0x11,0x17,0x23,0x94,0xf9,0x6d,0x6f,0xee,0xee,0x31,0xbf,0xce,0x11,0x8b,0x9e,0xd7,0xa5,0x09,0x36,0x89,0x72,0x25,0x18,0x1f +.byte 0x13,0xa7,0xdf,0xc5,0x91,0x7e,0xd6,0x2b,0xb8,0x08,0x9c,0x12,0x83,0x21,0x97,0x3d,0xad,0xac,0x1c,0x54,0xf3,0x65,0x04,0x2f,0x09,0xd1,0xd2,0xe5,0xce,0x24,0xb1,0xd9,0xe4,0x38,0x1f,0xb4,0xce,0xea,0x27,0x7f,0x5f,0x16,0x52,0xa4,0x2f,0x2f,0xaf,0x91,0xec,0x7a,0x21,0xf7,0xa1,0x38,0x78,0x78,0xc5,0xa9,0x94,0x63,0x87,0xf8,0x95,0x9e +.byte 0xf9,0x82,0x98,0x6d,0x9d,0x48,0x80,0xaa,0x7a,0x36,0xf9,0x5f,0xfb,0x39,0x3d,0xae,0xbc,0xcd,0xfc,0x67,0x46,0x07,0x7e,0xdf,0xef,0xff,0x8d,0x67,0xe7,0xd9,0x60,0x90,0x7b,0x49,0x10,0x65,0x3a,0x60,0x87,0x7a,0xed,0x9a,0x44,0x48,0x81,0xcc,0xad,0xe4,0x6a,0x62,0xf8,0x02,0x6f,0x41,0x8a,0x8d,0x44,0x28,0x1a,0xb8,0x52,0x60,0x4b,0x3f +.byte 0xfc,0xdd,0x33,0xad,0x14,0xb1,0x34,0x63,0x1f,0xdc,0xeb,0x9a,0x3f,0x99,0x82,0x28,0x36,0x6f,0x8e,0xd7,0x39,0x2e,0xc0,0x37,0xfb,0xad,0x57,0x6c,0x82,0x1a,0xc6,0xe4,0x4b,0xca,0x00,0x68,0x57,0x34,0xf0,0x57,0x6a,0xcb,0x50,0x5d,0x8d,0xfa,0xcd,0x89,0x41,0x91,0x23,0x98,0x1f,0x4f,0x18,0xb6,0xd2,0x9d,0xde,0x2f,0x5c,0xe6,0x08,0x76 +.byte 0x97,0xba,0x24,0x4e,0x84,0xd7,0xeb,0x80,0xde,0xec,0xee,0x51,0x5a,0x0e,0x5f,0xb7,0x37,0xda,0xa5,0x94,0x2b,0x6d,0x73,0xb7,0x6c,0x22,0x95,0x3a,0xaa,0x5c,0x6f,0x89,0x90,0xec,0xb3,0x31,0x00,0x37,0x28,0x18,0xbb,0x98,0x23,0xfc,0x3e,0x21,0x7c,0xaa,0x44,0x54,0x7b,0xe6,0xa0,0x17,0x58,0xef,0x11,0x3f,0x48,0xb8,0xa8,0x15,0x4a,0x92 +.byte 0xa9,0x39,0xe2,0xa6,0x38,0x03,0xa6,0xd3,0x79,0x8b,0x38,0x06,0xaf,0x4b,0xd4,0xab,0x0a,0x13,0xff,0x2d,0xfa,0xab,0x4b,0x64,0x9e,0xb0,0x3d,0xba,0x18,0x01,0xfd,0xc3,0x6a,0x6f,0x21,0x9c,0xf5,0x2f,0xab,0x2d,0x42,0x12,0xc9,0x72,0xde,0x83,0x42,0x6a,0xf0,0xd4,0x96,0x73,0xf1,0x93,0xa3,0x2d,0x9b,0xb4,0x94,0x51,0x0c,0x6e,0x8e,0xf0 +.byte 0x5e,0xbf,0x98,0xbf,0x08,0x0f,0xd8,0x6c,0x65,0x4e,0xb5,0x47,0xeb,0x7c,0x1b,0x73,0xe0,0xe6,0x2c,0x03,0xd2,0x2a,0x32,0xff,0xa7,0x03,0x6d,0x38,0x47,0x56,0x4b,0x25,0x0b,0x39,0x73,0x87,0x4b,0xa5,0x12,0x79,0x79,0xf3,0x88,0x37,0xe2,0x4f,0xb8,0xbf,0x70,0x0e,0xf7,0x8c,0xe6,0xa3,0xbc,0x35,0x10,0xcd,0x72,0x56,0xd6,0x83,0xc1,0x0b +.byte 0x5b,0xf3,0xa8,0x74,0xc7,0xb9,0x84,0xc8,0x6c,0xff,0x66,0xad,0x95,0x6f,0xbc,0x82,0x84,0x2a,0x11,0x40,0xf9,0xa8,0x3f,0x05,0xf9,0xab,0x19,0x55,0xce,0x80,0x90,0x65,0x49,0x3d,0xe1,0x54,0x2c,0x1a,0xdb,0xf3,0xaa,0x2f,0xeb,0xf5,0x10,0x1f,0x8c,0x35,0x46,0x68,0xb1,0x4c,0x52,0xe7,0xe9,0x58,0x78,0x33,0xfd,0xc6,0x13,0x0e,0x69,0xae +.byte 0xf4,0x1a,0x8a,0x77,0x8f,0xcc,0x98,0x74,0x88,0x20,0x84,0x5b,0x83,0x54,0xa9,0xee,0xc2,0x0f,0x8a,0x46,0xb1,0xc7,0xfb,0xfd,0xf2,0x2c,0xaf,0xfa,0x72,0x34,0x7a,0x79,0x50,0x10,0xc6,0x04,0xfd,0x0a,0x1e,0x4a,0xb5,0xf5,0xe7,0x4d,0x98,0x80,0x5d,0x0b,0x81,0x23,0xc3,0x6e,0xbf,0xc8,0xcd,0x35,0x96,0x5a,0x58,0xec,0xef,0x6a,0x8d,0x48 +.byte 0xda,0x48,0xbb,0x8f,0xcc,0x1f,0x86,0xff,0x7a,0x27,0xef,0xe6,0xb7,0xc7,0x2a,0x47,0x8d,0x6c,0x4a,0xc6,0x0a,0x32,0x67,0x1d,0x2f,0x83,0x3d,0x46,0x41,0x46,0x1c,0x75,0x7b,0x29,0x89,0xa2,0x65,0x9b,0x53,0x3d,0xd9,0x90,0x83,0xce,0xab,0x07,0xbb,0x46,0x61,0xb1,0x54,0xbd,0xc9,0x98,0xf7,0x96,0x76,0x03,0xdc,0x1f,0x1b,0xf2,0x5c,0x07 +.byte 0xdd,0x24,0x94,0x72,0x1e,0x94,0xb1,0x14,0x0b,0x40,0x77,0xde,0x3d,0x3f,0x1c,0xf0,0x8f,0xa4,0xcb,0x34,0xb5,0x2b,0x72,0x53,0x78,0xf3,0x3f,0x8e,0x47,0x30,0xb2,0x7e,0x73,0x3f,0x9a,0xef,0x19,0xb1,0xef,0x82,0x99,0xd4,0x17,0x60,0x94,0xf6,0x15,0x75,0x50,0x1f,0xb3,0xdd,0xae,0x1f,0xf8,0x63,0x9a,0x30,0x2c,0xf0,0xdd,0xbf,0x49,0x70 +.byte 0xd7,0x86,0x4a,0x5c,0x46,0x10,0x48,0x46,0x02,0x18,0xa4,0x39,0xb6,0x75,0x11,0x21,0xae,0x62,0x64,0xd8,0x85,0xc8,0xda,0xd2,0xd6,0x69,0xcc,0x37,0x57,0x49,0x73,0x1a,0x10,0x7b,0xd7,0x58,0xdd,0x0b,0xf3,0x16,0xe7,0x62,0x2c,0x32,0x92,0x0e,0x70,0x6f,0x77,0x74,0x0d,0xff,0xc2,0x8d,0x3b,0x3f,0x29,0x28,0x8f,0x88,0xb8,0x02,0x5b,0x3a +.byte 0x8b,0x65,0x89,0x92,0x2f,0xc7,0x30,0x73,0xc3,0x20,0xbc,0xa4,0xe4,0x5e,0xea,0xf8,0x21,0xb6,0xc5,0x47,0x56,0x35,0x8f,0xf6,0xd5,0xdd,0x77,0x1d,0xdf,0xd0,0x27,0xa3,0x04,0xb9,0xd0,0xc4,0x28,0x16,0xa5,0xaf,0x47,0x55,0x85,0x93,0x38,0xf4,0xac,0x13,0x30,0x7d,0x77,0x1f,0x3d,0xd5,0xd7,0x22,0xbe,0xe2,0x4e,0x6d,0x4b,0x0e,0xbe,0x1d +.byte 0x43,0x79,0x34,0x95,0x6f,0x38,0xa1,0xb3,0xa0,0xed,0xf6,0x17,0xf4,0x24,0x70,0x26,0x18,0x3e,0x1c,0xde,0xdc,0xa9,0x67,0x12,0xd3,0xc8,0xd7,0x70,0x13,0xa5,0xb3,0x25,0xe1,0x0a,0xe9,0xf6,0x4e,0x56,0x82,0x17,0xdc,0xbc,0x96,0x2f,0x59,0x03,0x9b,0xf4,0xc3,0x66,0xd2,0x90,0x95,0x1d,0xe0,0x99,0xfb,0xd8,0xa8,0x14,0xc7,0xa6,0x12,0x6b +.byte 0x08,0x6a,0xc8,0x0f,0x34,0x2a,0xb6,0xc4,0x9a,0xcd,0x61,0xf7,0x61,0xa3,0x59,0x29,0x11,0x30,0x76,0xb5,0x97,0xbc,0x2f,0x87,0xd8,0x12,0xb3,0x1d,0x99,0x8d,0x5d,0x57,0x0c,0xda,0xb0,0x9f,0x51,0x1a,0xb5,0xc6,0x94,0xc3,0xe9,0x5a,0x72,0x0c,0x37,0x76,0xb6,0x3c,0x00,0x02,0x69,0xad,0x8e,0x66,0x8b,0x5c,0x13,0x48,0xb7,0x9e,0xc5,0x7e +.byte 0xe0,0x35,0x07,0xd2,0x04,0x9c,0x35,0x95,0x8b,0x55,0x87,0x03,0x32,0x36,0xeb,0x11,0x88,0x54,0x8d,0x3e,0x88,0x46,0xc2,0xfe,0x24,0xa4,0x4b,0x92,0x19,0x44,0x6c,0xc9,0x69,0x32,0x22,0x95,0x5b,0xda,0x58,0xa4,0x00,0x33,0x83,0x2d,0xa4,0x17,0x2e,0x00,0x4d,0x9a,0x7d,0xef,0x04,0xa8,0x8b,0xf2,0x7c,0xb9,0xdb,0x54,0xcf,0x63,0x14,0x52 +.byte 0x5b,0x79,0xf6,0x89,0x5c,0xfa,0x8a,0x85,0x88,0x7f,0xca,0xed,0xfb,0x62,0xbc,0x1d,0x0d,0x90,0x51,0x27,0x45,0x74,0xa0,0x55,0xfc,0x60,0xea,0xef,0x6e,0x40,0xeb,0x0b,0x61,0x45,0x44,0xee,0xb6,0x20,0x4c,0xe1,0x08,0x62,0x29,0xdd,0xd0,0xa1,0xd5,0x7f,0x42,0xb9,0x0f,0x12,0xef,0xfb,0x13,0xa2,0xf1,0x85,0xaa,0x56,0x18,0x6c,0x70,0x7a +.byte 0x4d,0x52,0x76,0xce,0xa9,0xed,0x0a,0xcc,0x55,0xf0,0x01,0x99,0x44,0xe9,0xc4,0x74,0x33,0x2a,0xce,0x53,0xf3,0x4f,0x8f,0x1c,0x67,0x39,0x2b,0x0e,0x46,0xe2,0x49,0x06,0x52,0xbf,0xc4,0x3f,0x93,0x84,0x46,0x0a,0x9b,0xcb,0x1d,0xa5,0x66,0x9c,0x3e,0x3d,0xd1,0x92,0xda,0xe2,0x11,0x5b,0x89,0x7a,0xc4,0x33,0xba,0xa9,0x19,0xfd,0x3c,0xe3 +.byte 0xf0,0xa0,0x9b,0x83,0x50,0xce,0xa9,0x62,0xe3,0x85,0xc6,0xc4,0xe5,0x22,0xbb,0x1a,0x8e,0x04,0xb5,0x4d,0xca,0x18,0x7d,0xb0,0x99,0x50,0x78,0x88,0x69,0x43,0xe0,0xfd,0x90,0xa6,0xbf,0xdc,0xe3,0x03,0xf2,0x5d,0xa1,0xa2,0x88,0xc7,0xab,0xa9,0xc2,0xda,0x3f,0xff,0x79,0xa6,0x07,0xfd,0xc4,0xb1,0xfb,0x47,0x3d,0x75,0x82,0x26,0x52,0x85 +.byte 0x3f,0xf9,0xc9,0x85,0x46,0x24,0xe9,0x0f,0x96,0x8c,0xbb,0x02,0x83,0x60,0x69,0x49,0x8c,0x38,0xd1,0x4e,0xd0,0x63,0x2c,0xb6,0x12,0xb2,0x8e,0x4b,0xd3,0xe3,0xdf,0x20,0x00,0x99,0xf1,0x06,0x93,0xbf,0x27,0x42,0x8b,0xe3,0x8d,0x4c,0x3b,0x05,0x62,0x64,0x21,0xb1,0xfe,0xce,0x08,0xd2,0x23,0x69,0x11,0x74,0x31,0x3a,0x90,0x10,0x07,0x1a +.byte 0xd5,0xf5,0xc2,0x09,0x61,0x67,0x65,0x99,0x3a,0xf3,0x9e,0x4a,0xd8,0xa1,0xb2,0x50,0xf4,0x07,0xf0,0x7b,0x89,0x6d,0x4d,0x6a,0xd4,0x54,0xb9,0x3c,0xd5,0x4e,0x1c,0x12,0x0f,0x19,0x92,0x97,0x21,0x65,0x83,0x33,0x20,0x92,0x95,0xd4,0x0e,0x78,0xf4,0x92,0x16,0x36,0xd8,0x1b,0xd8,0xbf,0x41,0xe4,0xfb,0xb9,0x81,0x26,0x72,0x7e,0x1b,0x58 +.byte 0x05,0x45,0x97,0x66,0xf2,0x23,0x16,0xca,0x4e,0x95,0xc2,0x6c,0x60,0x84,0x5f,0x77,0x82,0x44,0x0e,0xf7,0x30,0xaa,0x51,0xa9,0x85,0x8b,0x03,0xfc,0x3d,0x6d,0x66,0x91,0x37,0xa5,0x1c,0xf8,0xcf,0x9d,0xd8,0xcd,0x8c,0xa1,0x29,0xbd,0xb5,0x4f,0x47,0xba,0xd1,0x55,0x3b,0x4e,0xc9,0xce,0x4c,0xcf,0x2e,0x19,0xa0,0x95,0xe6,0xcb,0x36,0x97 +.byte 0x3e,0x23,0xbe,0x09,0xfd,0x38,0x47,0x00,0x03,0xec,0x49,0xbb,0x49,0x1f,0x45,0x84,0x0f,0x1e,0x74,0xab,0xc9,0x07,0x00,0x04,0x70,0xe9,0xbd,0x61,0xb1,0x92,0xee,0x67,0x9a,0x5e,0x90,0xdc,0xe7,0x99,0x36,0xd0,0x58,0x15,0xe5,0x15,0xa2,0x1d,0x61,0x18,0x39,0x5f,0x6c,0xc7,0xbe,0xd0,0x23,0x1e,0x41,0xc8,0xaa,0x8e,0xbf,0xb8,0xdb,0x90 +.byte 0x8c,0x60,0x07,0x1e,0xe9,0x6c,0xe4,0xde,0xec,0x73,0x34,0x94,0x54,0xa4,0x6b,0x49,0xcf,0x87,0xb5,0x88,0x98,0xe6,0x2c,0xce,0xb7,0x76,0xa5,0x29,0xf1,0x29,0x50,0xc5,0x9e,0x13,0xe4,0x61,0x6a,0x54,0xb2,0x26,0xfa,0xfa,0x4a,0x41,0x3b,0x0a,0xf5,0x9a,0x60,0xbb,0xfc,0x1e,0x5d,0x21,0x7e,0x91,0x51,0xd6,0x5e,0x92,0xf9,0x21,0x80,0xa8 +.byte 0x35,0xc0,0xbb,0x7a,0xeb,0x75,0xb4,0xa3,0xd3,0x8d,0xaf,0x07,0x53,0x65,0x36,0x11,0xf9,0xb6,0x69,0x29,0x1e,0x5d,0x8f,0x57,0x5d,0xed,0x42,0xf9,0xd5,0xf6,0xc3,0x1e,0x29,0xc4,0x49,0x04,0xe4,0xfb,0xbf,0x9b,0x4a,0x7b,0xdd,0x57,0x51,0xfe,0xc4,0xd1,0xd9,0xe9,0x8f,0x94,0x78,0xbc,0x5c,0xeb,0xb6,0xbc,0x51,0xb0,0x82,0x87,0x47,0xb4 +.byte 0xf7,0xf9,0x02,0xd7,0xac,0x23,0xc0,0xe5,0x9a,0xc3,0x2f,0xd2,0xb8,0xb2,0x62,0xb9,0xdb,0x49,0x85,0x77,0x92,0xa6,0xe5,0x24,0x43,0x4d,0x0d,0x67,0x94,0x01,0x29,0xd6,0x2e,0xee,0xd9,0x2e,0x97,0x0e,0x20,0x7f,0x84,0x19,0x3c,0x3a,0x6f,0xa5,0xb0,0x8b,0x8f,0x8d,0x96,0xbb,0x76,0x61,0x97,0xc2,0x65,0x83,0xd8,0xda,0xab,0x42,0xfa,0xe5 +.byte 0x1e,0x42,0x93,0xa7,0x66,0x03,0x06,0x3b,0xbe,0xb8,0xae,0x71,0xee,0xdb,0x5d,0xdf,0x40,0x64,0x17,0x17,0x2e,0x03,0xca,0x37,0x2a,0x71,0x92,0x0a,0x01,0xa3,0x0f,0x0b,0x09,0xf2,0x0e,0x4b,0x4d,0x18,0xf3,0xc4,0xf2,0x51,0x7b,0x53,0x30,0xab,0x24,0xa2,0x47,0x38,0xc9,0x2c,0xdf,0x0d,0x32,0x3e,0x3f,0x57,0x2d,0xfc,0x44,0x19,0x64,0x8b +.byte 0xe9,0x9a,0xc2,0xf2,0xf6,0x2d,0x30,0x0c,0x0f,0xc3,0xc3,0xfe,0xc2,0xd1,0xbc,0xe0,0xbf,0xaf,0xeb,0x40,0x64,0x28,0xe2,0xd9,0x3c,0x7e,0x24,0x94,0x8f,0xe8,0x54,0x8b,0x26,0x6b,0xe1,0x4e,0x44,0x5a,0x7d,0x7b,0x12,0x36,0x2c,0x12,0xad,0x26,0xbc,0xa7,0xa3,0x2b,0x25,0xb9,0xde,0xe6,0x64,0x2d,0xab,0x7f,0x15,0x22,0x51,0x26,0x1c,0x15 +.byte 0x5d,0x13,0x18,0x93,0xc1,0x19,0x65,0xca,0xf3,0x8b,0xe0,0xcf,0x8c,0x43,0xe9,0xfd,0xa1,0xbd,0xe9,0xde,0x78,0x26,0xcb,0x7c,0xdc,0x68,0x06,0x98,0xf6,0x90,0x44,0x40,0xf0,0x5e,0xe1,0x16,0xf5,0x5d,0x4d,0x9b,0x85,0xe6,0x26,0xbd,0xab,0xcc,0x46,0x62,0x18,0x51,0xd5,0x3c,0x9f,0x6e,0xfa,0xe7,0x94,0xfc,0xc2,0x1a,0x9d,0x63,0x2c,0xdc +.byte 0xc3,0x89,0x67,0x94,0x37,0x58,0x0d,0x13,0xb8,0xdf,0x41,0x3d,0x70,0x78,0x1e,0x61,0x75,0x77,0xcc,0xbf,0x5f,0xa8,0xd3,0x89,0xcc,0xd3,0x40,0x4e,0x65,0xbd,0xce,0x3c,0xf0,0x5a,0x8f,0xe2,0xe1,0x24,0xaa,0xed,0x0f,0xd1,0x03,0x0d,0xf5,0x36,0x98,0xcd,0xa5,0x77,0x40,0x24,0x0a,0x82,0x68,0x79,0x82,0x38,0x68,0x6f,0x2b,0x0b,0xce,0x0f +.byte 0xcd,0x0f,0xba,0xdb,0xb5,0x22,0x38,0xd2,0xb0,0x9f,0x0f,0x08,0x0d,0xd8,0x5e,0xa7,0xd0,0xa9,0x39,0x66,0x4c,0x46,0xce,0x2a,0xc3,0x67,0x8c,0x91,0xdc,0xf1,0xc0,0x3a,0x58,0x50,0x1f,0xb0,0xa4,0x4d,0xbf,0x99,0x57,0xcf,0xae,0xb2,0xaf,0x6a,0x42,0xd2,0x7f,0x85,0x8c,0x40,0xc6,0x9a,0x93,0x57,0x54,0xf5,0xb4,0x83,0x59,0xb5,0x19,0x52 +.byte 0x7c,0x8b,0x76,0xee,0x35,0x90,0xbf,0xbe,0x65,0x58,0x3b,0x25,0x52,0x18,0xd8,0x7f,0x1f,0xe6,0x70,0xce,0x56,0x1a,0x45,0xa0,0x81,0xee,0x95,0x6f,0x55,0x43,0xaa,0x6e,0x87,0xa9,0xab,0x7d,0xe9,0xa1,0xa3,0x63,0xe7,0x1b,0x6b,0xa6,0x2c,0xe5,0x4a,0xb2,0x1e,0x73,0x5e,0xb5,0xae,0x83,0xe6,0x54,0x0b,0xc5,0x6b,0xb6,0xc4,0x73,0x62,0x1a +.byte 0xbf,0x1a,0x65,0xa2,0x5e,0x3a,0x45,0xd9,0xba,0x5b,0xef,0xf7,0x13,0x0c,0x7c,0x68,0xa1,0x98,0x71,0xb7,0x39,0x7c,0xbc,0x69,0xdb,0xd4,0xac,0x3f,0x82,0x63,0x9b,0x71,0x25,0x3a,0x06,0x73,0x60,0x71,0xc3,0x30,0xd3,0x96,0x02,0x4b,0x46,0xbd,0xd4,0x6e,0xc6,0x29,0xcc,0xd0,0xe1,0x0b,0x66,0x62,0xea,0x29,0xc7,0xcf,0x35,0x9e,0x2f,0x1f +.byte 0xa0,0xfc,0x8c,0x4a,0x83,0x8e,0x3b,0xf5,0x7a,0x6f,0x52,0xaf,0x99,0x9c,0x86,0xab,0xe5,0x1b,0x82,0xb3,0x18,0x35,0x77,0x9b,0xa3,0x94,0xc8,0x39,0x30,0x3f,0xad,0xa9,0x0f,0x93,0xb8,0xc8,0xed,0x04,0xf2,0x0b,0x9a,0xb1,0xd1,0xc9,0x9e,0x40,0x4f,0x71,0x21,0x63,0x2a,0x05,0x26,0x53,0xa3,0x3f,0x43,0xe4,0xf8,0x7c,0x2f,0xa3,0x5a,0x6e +.byte 0xc1,0x40,0xa8,0x4d,0xbc,0x03,0xae,0xe9,0x36,0xb6,0x37,0xdc,0x5f,0xef,0xb0,0x35,0x33,0xdf,0x33,0x71,0xaf,0x80,0xf2,0x69,0xd9,0xb5,0xfc,0xff,0xd2,0x5b,0x6a,0xeb,0xdc,0xe0,0x26,0x43,0x38,0x7b,0x24,0xb2,0x79,0x53,0x52,0x57,0xc4,0x1f,0x6d,0xc9,0x50,0xf2,0x63,0x9d,0xc1,0x22,0x5f,0x11,0x82,0x38,0xdb,0xd3,0xb4,0x1d,0x10,0x72 +.byte 0x9e,0x4d,0x03,0x30,0xba,0x5e,0xe9,0x8c,0x21,0x12,0xe6,0x3a,0xd6,0x4c,0x18,0xa4,0x27,0xc9,0xf5,0x50,0xbd,0xbe,0xf0,0x86,0xd8,0x00,0x56,0xf0,0x10,0x81,0xec,0xeb,0xfc,0x5b,0x29,0x88,0xff,0x73,0x60,0x6b,0xf5,0x8c,0x0b,0x30,0x04,0x53,0x85,0x61,0x0c,0xfc,0xff,0x8f,0x21,0xd2,0xa1,0xcb,0xf7,0x90,0x53,0x3b,0xf4,0xf0,0x2c,0x7d +.byte 0xb6,0x84,0xe7,0x4c,0x88,0xea,0x4f,0xdf,0xff,0x0f,0x5d,0x0f,0xd3,0x2d,0x4f,0x7e,0xdc,0xd1,0x22,0x71,0x0d,0xae,0xa8,0xcf,0x05,0x7b,0xfc,0xfe,0x87,0x40,0xa5,0xe8,0xfd,0x3f,0xdb,0x2f,0x00,0x21,0xb9,0x70,0x02,0x2c,0x96,0x24,0xaf,0x35,0xe2,0x87,0xcb,0x50,0xcf,0x7e,0xfa,0xaf,0x39,0x82,0x0c,0xd5,0xa6,0x3f,0x9c,0x77,0x60,0x16 +.byte 0xbf,0x42,0xcc,0x97,0xd1,0x19,0x0d,0x8a,0x50,0x98,0x7d,0x19,0x7b,0x40,0x1c,0x22,0xde,0x50,0x90,0x32,0x9a,0x3d,0x07,0x35,0xc0,0x48,0x4c,0x0a,0xcd,0x91,0xab,0xf7,0xf3,0x06,0x77,0x80,0x96,0x7b,0x59,0x33,0xe6,0xbf,0x93,0xb8,0x59,0xd0,0x3a,0x1f,0xcc,0xe7,0x1d,0xd4,0xb5,0x58,0xee,0xe7,0x95,0xfa,0x75,0xdb,0x37,0x74,0xb0,0x7d +.byte 0x4d,0xee,0xef,0x20,0x13,0xe5,0x82,0x07,0x8e,0xdd,0x57,0x75,0x33,0x56,0xc4,0x80,0xb0,0x06,0x9f,0x6b,0x72,0x31,0xcf,0xac,0x5f,0x96,0x13,0xeb,0xf4,0x34,0xb6,0x6b,0x55,0xef,0x55,0x26,0x4e,0xdb,0x6c,0x2f,0x64,0x29,0x91,0x3c,0x6d,0x29,0xd2,0x94,0xbd,0x2c,0x99,0xb9,0x97,0x76,0xee,0x7d,0xfd,0xb2,0x8d,0x14,0x4f,0x09,0x81,0xb3 +.byte 0x68,0x3e,0x79,0x28,0x56,0x50,0x3f,0x86,0x4c,0x95,0x6c,0xad,0xf6,0xc5,0x43,0x25,0xea,0xbc,0xe2,0xba,0x77,0x18,0xc6,0x82,0x65,0x73,0x38,0x90,0x9d,0xc9,0x57,0xcd,0xa2,0x7c,0xd3,0x26,0x59,0x44,0xd9,0x79,0xae,0xdd,0x6f,0xe9,0xdc,0x16,0x73,0xba,0x05,0x8a,0x40,0x9f,0xe7,0xcf,0x29,0xa4,0xdf,0x49,0x7f,0x1d,0x73,0xc7,0x8b,0x8d +.byte 0xad,0xb5,0x3d,0x1b,0x64,0xb1,0x8f,0x78,0x06,0xbe,0xaa,0x2c,0x08,0x73,0xc7,0x2c,0xdc,0xd8,0x3f,0x9f,0x1b,0xd2,0xe1,0x4f,0x9d,0x87,0xb8,0xa9,0xdc,0xef,0xbc,0x31,0x9f,0xf7,0x84,0x09,0xe7,0xbc,0xec,0x2a,0xcb,0x3b,0x3a,0x30,0xe2,0x5b,0xbc,0xcd,0xa8,0xdb,0x46,0x80,0xec,0xaa,0x06,0x8e,0xd8,0x6c,0x35,0x65,0x52,0xb8,0xc3,0xf9 +.byte 0x97,0x68,0x06,0x2d,0x3e,0x91,0x71,0x44,0x6e,0x01,0x51,0x10,0x5b,0x74,0xb9,0x3f,0xd7,0xf9,0x5c,0x98,0xe6,0xf8,0x98,0x32,0x26,0x9b,0x5e,0x9c,0x88,0xfb,0xaa,0x70,0xd2,0x2e,0xc2,0xf6,0x02,0x92,0x33,0x55,0x92,0xba,0xfb,0x0e,0x0b,0x08,0xdf,0x5d,0xdd,0x47,0x28,0xae,0x32,0xb3,0x27,0x8d,0xd4,0x18,0x43,0x64,0xc4,0x7f,0x60,0x62 +.byte 0xd9,0x63,0xd1,0x28,0xc9,0x75,0x3b,0x44,0xb4,0x8e,0x2a,0x93,0xf9,0x4c,0x4f,0x7e,0x6b,0x98,0xc9,0x1a,0x82,0x51,0x9a,0xb2,0x80,0x70,0x2e,0xff,0x19,0x66,0x1b,0xb6,0xbc,0x15,0x8e,0xe6,0x0f,0x8e,0x04,0x10,0x94,0x44,0x6c,0x32,0x4b,0x61,0xbc,0x4a,0x16,0x7b,0x25,0x2a,0x27,0x96,0xa9,0xa9,0x61,0x10,0xc1,0x46,0xdd,0xf5,0xe3,0xe8 +.byte 0x1f,0x5b,0xa0,0x77,0xe1,0x42,0x9a,0xd4,0x04,0x33,0x68,0x72,0x1c,0x44,0x29,0xce,0x98,0xe0,0xc7,0x3a,0x9e,0x3c,0xb9,0xb4,0x29,0xef,0x57,0xee,0x8c,0x8f,0x7c,0xe6,0xe1,0x43,0x6e,0x45,0x0e,0xdd,0x4e,0x11,0x4b,0x28,0x69,0xde,0xb8,0xfa,0x32,0xbe,0xc6,0x4f,0x11,0x99,0xe5,0xe3,0xe2,0x1f,0x03,0xbe,0x4a,0xad,0x60,0x68,0xc8,0x13 +.byte 0x80,0x4e,0xb6,0xc0,0xc5,0xc7,0x97,0x5c,0x0b,0x0e,0x64,0x43,0x78,0x70,0x95,0x91,0x8e,0x36,0x6b,0xad,0x57,0xc7,0x1e,0x9c,0x54,0xc9,0x89,0xf0,0x13,0xde,0x0a,0xbe,0xc0,0xa9,0x35,0x77,0x0a,0x01,0x7f,0x98,0x51,0x82,0x92,0x14,0xe0,0x9a,0x08,0xa3,0x0c,0x6c,0x67,0xf2,0x05,0xaa,0xa9,0x4e,0xce,0x3b,0xb1,0xb6,0x8c,0x82,0x5d,0x11 +.byte 0xf2,0xe5,0xd7,0xda,0x3a,0x65,0xa0,0xe3,0xa4,0x09,0x01,0x1c,0xb2,0x08,0x90,0x94,0xb5,0x51,0x56,0x24,0x22,0xfd,0x12,0xad,0x7a,0x75,0xcf,0x0f,0x0f,0x23,0xc3,0xa6,0x1f,0xf8,0x39,0xbc,0x2f,0x18,0x53,0x14,0xef,0xdf,0x90,0x6a,0x50,0x2b,0x8c,0x8b,0xa8,0xd4,0x8c,0x59,0x8f,0xd8,0x81,0x86,0x57,0xc1,0xd1,0xfb,0xe7,0xa6,0x20,0x6e +.byte 0x7c,0xbf,0xce,0xe3,0xce,0x28,0x35,0x7c,0x8e,0x1a,0x66,0xea,0x7d,0x81,0x09,0xdb,0xa8,0x64,0xba,0x3c,0x07,0x3f,0x23,0xd3,0x05,0x97,0x4c,0x92,0xc2,0xa4,0xe8,0x6c,0xfb,0xa0,0x9d,0x8b,0x4d,0xcb,0x3a,0x96,0xe7,0x04,0x0f,0x48,0x87,0x2c,0xdd,0x51,0xf3,0x46,0x7e,0x61,0x89,0xbe,0xb8,0xb0,0x9e,0x9c,0xc4,0x37,0x55,0xe6,0x4f,0x78 +.byte 0x7e,0xb0,0x59,0x42,0xca,0xba,0x4a,0xb2,0x50,0xbd,0x16,0x68,0x99,0x42,0xb4,0x8b,0x60,0x3d,0x54,0x41,0x17,0x11,0x39,0x42,0x5d,0x41,0xec,0xc2,0x53,0x82,0x7c,0x32,0xc9,0xd1,0x34,0x49,0xd8,0x4f,0x29,0x21,0xeb,0x97,0x98,0x4c,0xeb,0x21,0xce,0x50,0xd6,0x53,0xd9,0xf1,0x6e,0x26,0xfa,0xe4,0x71,0x34,0xd8,0x38,0xac,0x39,0x4f,0x02 +.byte 0x36,0x93,0xf2,0x08,0x88,0xdc,0x24,0xdd,0x1f,0xf5,0xe9,0x7f,0x83,0xa0,0xa4,0x6b,0xc5,0xef,0x8e,0x82,0xf9,0x92,0xbc,0x82,0x3f,0xce,0x86,0xa6,0x34,0xf8,0x16,0xa7,0xdb,0x97,0xca,0x54,0x43,0xd8,0xfc,0x31,0xde,0x73,0xd0,0x79,0x1a,0xac,0x61,0x15,0xbd,0x38,0x64,0x3b,0xc6,0xb5,0x95,0xeb,0x2e,0x68,0xe4,0x1d,0x6b,0x18,0xab,0x88 +.byte 0xb0,0x96,0x51,0x8c,0xbe,0x41,0x63,0xd6,0x9a,0x21,0x60,0xe8,0x26,0x37,0xb3,0x10,0x76,0x46,0x31,0x90,0xb0,0x9f,0x17,0xab,0x0f,0x93,0xcc,0x12,0x78,0xee,0x17,0x1c,0xd8,0xc7,0x76,0x0a,0x5a,0xb4,0x8b,0xb1,0x67,0x11,0xde,0x48,0x14,0x8a,0x2a,0xc7,0x71,0x46,0x94,0x15,0x29,0x44,0x9e,0x35,0x03,0x10,0xf7,0x51,0x8a,0xaa,0x9c,0x4a +.byte 0x9a,0x44,0xd5,0xc7,0x37,0x9d,0xb4,0xad,0x41,0xd0,0xda,0xd2,0x1a,0xf9,0x93,0xee,0x28,0x32,0x65,0x0b,0x9c,0x12,0xe3,0xad,0x9f,0x82,0xeb,0x3f,0x03,0xe7,0x6a,0x58,0x83,0x3f,0xbe,0x9f,0x27,0xd3,0xd6,0xe2,0x45,0xbf,0x90,0xe2,0x12,0x61,0x0b,0x57,0xd7,0x06,0x72,0x39,0x2c,0x3e,0x65,0xb2,0xf4,0xf7,0x54,0xef,0x32,0x99,0x44,0x0d +.byte 0xf0,0x5c,0xde,0x4c,0x2e,0x22,0xcd,0x3c,0x25,0x02,0xa5,0x0d,0x79,0x16,0xb0,0x51,0x3f,0x3c,0x84,0x56,0xfa,0x00,0xae,0x7a,0x36,0x45,0x3a,0xcc,0x1d,0x66,0xff,0xf4,0x49,0xce,0xb5,0x5c,0x51,0xf4,0x3e,0x07,0xf2,0x83,0x84,0x4d,0x4e,0xb7,0xce,0x03,0x7b,0x23,0x63,0xdf,0x64,0xa2,0x55,0x92,0xf9,0x2e,0xa5,0x21,0x89,0x29,0x42,0x48 +.byte 0x36,0xc5,0xab,0xd6,0x82,0xe3,0xff,0x45,0xfc,0x61,0xa6,0x4f,0xb9,0x51,0xba,0xd5,0x03,0xa9,0x0b,0xe7,0x73,0x83,0x97,0x1d,0xb2,0xc6,0x75,0xa0,0x52,0x99,0xfc,0x1b,0x27,0x7a,0x10,0xc1,0xed,0x70,0x21,0x4b,0x93,0xa4,0x20,0xed,0x16,0x76,0x97,0x82,0xab,0x21,0xfe,0xa4,0x3f,0xd9,0xbd,0x9c,0x2f,0x19,0x42,0xbc,0xb3,0x4f,0x44,0xf3 +.byte 0x9e,0xd0,0xe7,0xc9,0x7e,0x31,0xaa,0xbc,0x4b,0xba,0x73,0xe1,0xc3,0xbf,0x5d,0xa2,0xd8,0xb7,0xb6,0xfc,0x0a,0x32,0xb9,0xff,0x80,0xb6,0x2a,0x8b,0xea,0x81,0xa0,0xeb,0x1e,0x9e,0x69,0xdd,0xbe,0xc1,0x8a,0x5d,0xfb,0x66,0x21,0x98,0x5c,0x6f,0xd8,0xb4,0xcf,0x8a,0x1a,0x4b,0xde,0xa2,0x20,0xe8,0x5a,0x5a,0xee,0x14,0x09,0xcb,0x63,0x1c +.byte 0x14,0x7d,0x9b,0x47,0xf8,0xfa,0xda,0xb7,0x0e,0xc6,0xbd,0xb2,0x13,0xb8,0x10,0xe2,0x71,0x04,0x36,0x78,0x6d,0x3a,0x8b,0x45,0xd3,0x05,0xec,0x8a,0x2d,0xfa,0x85,0x7c,0xdd,0x75,0xb3,0x2d,0xd1,0xae,0xfc,0xdd,0x02,0x2e,0xcc,0x43,0xc5,0xed,0xe4,0x3f,0xee,0x2c,0xd7,0x37,0x81,0x3a,0x44,0xe6,0xed,0x8c,0x9d,0x9d,0xfa,0xb5,0xdc,0xde +.byte 0xb2,0x7c,0x51,0x58,0xa4,0x21,0xac,0xe2,0x79,0x96,0x90,0xe2,0x0b,0xbf,0x51,0x66,0x77,0x02,0xff,0x67,0x0a,0x70,0x1f,0x04,0x6c,0xb0,0x5b,0x2d,0x26,0x23,0x5a,0x85,0x73,0x66,0x6e,0x7c,0xb3,0xeb,0x36,0x73,0x0f,0xcd,0xb2,0x07,0xee,0x78,0xd1,0xbd,0x5e,0xfa,0x31,0xf6,0x82,0x67,0x94,0xaa,0xff,0xef,0xd2,0x23,0xfc,0x82,0xaa,0xe2 +.byte 0xef,0xc3,0x74,0x79,0x6c,0xe9,0x3f,0x8d,0xe1,0x1b,0xc8,0xb4,0xff,0x15,0xf4,0x60,0xe8,0x84,0x3f,0xaa,0xc6,0x53,0x51,0x1a,0x9b,0x04,0x9b,0xab,0xc5,0xee,0x9a,0x98,0x80,0x89,0x8d,0x5b,0xef,0x0a,0x69,0x71,0xd2,0xf3,0x49,0xc1,0xc1,0x87,0xb3,0x18,0x4b,0x82,0x02,0x87,0xb0,0xf1,0x76,0x4b,0x3e,0xad,0x95,0x51,0xb1,0x64,0xb1,0x03 +.byte 0x5b,0xd2,0x10,0x7b,0x4e,0xd4,0x08,0xf8,0xfd,0xea,0xf0,0xc7,0x16,0x43,0x86,0xa6,0xdb,0xcd,0x75,0xce,0xa9,0xfd,0xa8,0x7c,0x51,0xf7,0xa5,0x29,0x6f,0x0d,0xee,0x66,0x8f,0xc6,0xcd,0x9e,0x3f,0x00,0x24,0x21,0xca,0x69,0x79,0x27,0x03,0x62,0xdf,0xad,0xb9,0x8c,0xd8,0x08,0x88,0x0d,0x0c,0xa1,0x29,0xf9,0xba,0x92,0xb5,0xdd,0xb8,0x1a +.byte 0xbb,0xab,0x44,0xb2,0xda,0x1b,0x8b,0xc1,0x3c,0x61,0x9f,0x7a,0x8b,0x89,0x99,0x09,0xc3,0xb4,0xe4,0x24,0xf5,0x3b,0x36,0xa6,0x61,0x0a,0xec,0x2a,0x1c,0x92,0x7c,0xb1,0x7c,0xd8,0x0b,0x98,0x48,0x8d,0x52,0xa2,0x57,0xc1,0x28,0x89,0xbb,0x60,0x5c,0x58,0x62,0x41,0x1c,0xd6,0xfb,0x69,0x09,0x93,0x90,0x31,0xc4,0x72,0x71,0xf0,0x4f,0xcf +.byte 0x10,0xbb,0xb7,0x6c,0x3b,0x53,0xa3,0x0b,0xff,0x44,0x4c,0x37,0xd5,0x26,0x83,0x7e,0x5c,0xb9,0xa5,0xe8,0x8b,0xc4,0x15,0xf6,0xc7,0xd1,0x39,0x67,0x01,0xb7,0xca,0xa7,0x71,0xa8,0x04,0x95,0x0f,0xfc,0x0a,0x9e,0x52,0xb2,0xfb,0x48,0x47,0xb6,0xa5,0x14,0xc2,0x4f,0xa8,0xd5,0x0f,0x10,0x76,0x39,0x23,0x74,0x2e,0xe5,0x17,0xcb,0xad,0x8a +.byte 0x4a,0x25,0xc8,0x9b,0x25,0x94,0x34,0xbc,0x4b,0x2f,0xdc,0x0a,0xcd,0xc1,0x02,0x72,0x7d,0xa0,0x10,0xa7,0x32,0x68,0xe8,0xd5,0x23,0xe8,0xc9,0xbc,0x05,0x05,0x1e,0xac,0x55,0x45,0xfb,0x42,0x2f,0x0f,0x51,0x8d,0x31,0xb1,0xbc,0x10,0xa1,0x03,0xc3,0x6f,0x35,0x08,0xa5,0x2f,0x91,0x4e,0x43,0x6b,0x62,0x3b,0x00,0x4c,0xd0,0xb8,0x33,0xbc +.byte 0xca,0x57,0xb8,0x1b,0xb4,0x52,0x1a,0xa7,0x03,0x78,0xa0,0x4f,0xda,0x86,0xb9,0xd8,0xc6,0x69,0xe6,0x61,0x2e,0x62,0x96,0x60,0x0d,0x76,0xdc,0x5d,0x0e,0xa8,0xf3,0x86,0xde,0xcf,0x39,0x34,0xc7,0x69,0xed,0xcb,0x9a,0xf5,0xc3,0xce,0x6d,0xa5,0x7f,0xae,0x73,0xb9,0xa6,0xbf,0x88,0x93,0x2b,0x0e,0x8b,0x4b,0xa5,0xeb,0x62,0xc6,0x1a,0xc7 +.byte 0x63,0x63,0x58,0x62,0x37,0xc6,0xbc,0x00,0x72,0xac,0x3d,0x7c,0x22,0xa5,0x59,0xf1,0x6e,0x60,0x45,0x3e,0x99,0x76,0x40,0x82,0xa7,0x52,0xf3,0x48,0x8e,0x4a,0xa3,0xe1,0x3b,0xea,0x77,0xa7,0x7d,0x13,0xe7,0xc4,0xc6,0xa6,0x6e,0xda,0xe8,0x50,0xc8,0x39,0x30,0xab,0x8a,0xe1,0x08,0xa9,0xe3,0xbd,0x8d,0xbd,0x83,0x3c,0xbc,0x6c,0x92,0xed +.byte 0xf1,0xa9,0xd3,0x50,0xf2,0x29,0x8b,0x39,0x46,0xaf,0x08,0x7e,0x00,0x64,0x2f,0xa8,0x18,0xab,0x7e,0x07,0xd3,0x63,0x2a,0xd3,0xd3,0xbb,0xf9,0xdd,0x2b,0xec,0x70,0x35,0x1a,0x94,0x6b,0x87,0xe4,0x1a,0x0a,0x44,0x46,0x08,0xa6,0xce,0x1b,0xf7,0xd7,0x20,0x87,0x1a,0x96,0x6c,0xbe,0xdf,0x73,0x3b,0xc9,0xaf,0x89,0x1c,0x2f,0x47,0xe9,0xd8 +.byte 0x03,0xa6,0x03,0x6c,0x73,0xa9,0x65,0x20,0x36,0xea,0x6f,0xe7,0x96,0x7c,0x01,0x87,0xb0,0x21,0xba,0xb4,0xed,0x1f,0x81,0x65,0x97,0x36,0xda,0x68,0x80,0x64,0x99,0xe6,0xda,0x95,0x04,0xdf,0x5d,0xfd,0x86,0xd1,0xfd,0xfa,0x1c,0xd7,0x89,0xbf,0xe6,0x99,0x6c,0xf5,0x01,0x56,0x20,0x88,0x79,0xa7,0x8d,0x88,0x82,0xe5,0x32,0x38,0xe0,0xf0 +.byte 0x98,0x63,0xa9,0xab,0xeb,0x09,0x8d,0xaf,0x3f,0xa8,0x57,0x98,0xde,0xc8,0x9c,0x8d,0x1d,0x18,0xc5,0xa8,0x82,0x51,0x9b,0x6f,0xc6,0xb8,0x09,0xd3,0xea,0xd4,0xe3,0xac,0xd1,0x0e,0x88,0xda,0xdf,0x38,0x53,0x14,0x87,0x28,0x6f,0x13,0x35,0xdb,0xfe,0xa1,0xe7,0x43,0xb5,0x02,0x46,0x08,0x1a,0x31,0x0d,0x9e,0x3d,0x3b,0xbf,0xbb,0x82,0x9c +.byte 0x09,0xf3,0xd9,0x22,0x0a,0x82,0x07,0xd3,0xe8,0x19,0x6e,0x21,0xd2,0xa2,0xa8,0x14,0xbc,0x42,0xb6,0xeb,0x8c,0x40,0x9b,0xb2,0xa9,0x17,0xad,0x2c,0x19,0xaa,0x4b,0x22,0xf9,0x4e,0xde,0x8f,0xbe,0x78,0x9b,0xab,0xb9,0xfa,0xb1,0x3e,0x68,0x86,0x1a,0x4a,0x61,0xba,0x63,0x51,0x25,0x11,0x59,0xd0,0xb7,0x0c,0xb7,0xcc,0x45,0x05,0x6d,0x5a +.byte 0xe2,0xd7,0x10,0x80,0x19,0xd3,0xa9,0xab,0xb6,0x9f,0x53,0x7a,0xaa,0x19,0x74,0x01,0xc9,0xd6,0x45,0x42,0x2c,0xe5,0xc0,0xcf,0x62,0xe6,0x95,0x6f,0x4c,0x90,0x50,0x97,0x61,0x83,0x73,0xd0,0xc2,0xd5,0xf0,0x05,0xca,0xe9,0x6f,0x67,0xa9,0x51,0xb8,0xb4,0x9d,0x30,0x8e,0xe3,0x29,0xf9,0x3b,0x3d,0x17,0x25,0xad,0xbb,0xb0,0x34,0x68,0x29 +.byte 0x06,0xad,0x0e,0xdf,0x41,0xa6,0xf1,0xa6,0x25,0xc4,0xf0,0x0d,0x57,0x84,0x34,0x2c,0x3b,0xb1,0x41,0xd6,0x83,0x00,0x3a,0x91,0x98,0x8e,0xd0,0x59,0x0b,0x2d,0xc9,0x65,0x03,0x91,0xcb,0x03,0x97,0x57,0xde,0x11,0x8b,0x4b,0x1b,0x85,0x0b,0xb6,0x68,0x25,0x3c,0x1a,0x04,0x7d,0xd5,0x2b,0x16,0x69,0x1f,0x64,0x8b,0x47,0x60,0x17,0xaa,0x68 +.byte 0x45,0xf2,0x0b,0xf8,0xa2,0x27,0xf8,0x47,0x86,0x41,0x94,0x3f,0x92,0xc3,0x02,0xab,0x80,0x2b,0x0e,0x3c,0xd0,0x13,0x59,0x08,0xfc,0x13,0x33,0x52,0xbb,0x2d,0x6b,0x22,0xa2,0x8b,0x9f,0x7c,0x8e,0x40,0x35,0xa4,0xc7,0x45,0xb7,0xf8,0x10,0x22,0x95,0xc5,0x48,0xc1,0x50,0x4d,0x4a,0x36,0xe1,0xec,0x1e,0x07,0xf7,0x68,0x63,0xcb,0x13,0x03 +.byte 0x70,0x63,0xb1,0x9b,0xf3,0x60,0x01,0x6e,0x63,0x5c,0x4d,0x2c,0x5c,0x5c,0x58,0x8b,0xbb,0x6e,0xd1,0x69,0xdd,0x19,0xfe,0xfb,0xd6,0xdc,0x68,0x97,0x9c,0x46,0x0d,0xdd,0x4d,0xbd,0x52,0xe4,0xd9,0xc2,0x03,0x4e,0x4c,0xe2,0x66,0x6b,0x4d,0xbe,0x6b,0xf3,0xd6,0xbe,0x2d,0xba,0xdd,0x1b,0x4f,0x60,0x02,0x74,0xa1,0xf0,0xd0,0xfa,0x23,0x33 +.byte 0x29,0x7e,0x00,0x09,0x47,0x15,0xa8,0xd8,0xdb,0xb8,0xe1,0x20,0xd5,0xe2,0x91,0xd0,0xe8,0xfa,0xa1,0x0d,0x80,0xbd,0x7d,0x62,0x9d,0xf2,0xbc,0x03,0xa1,0x44,0x9f,0x8d,0x3d,0xe3,0xb4,0xec,0x32,0xd9,0x66,0xb0,0xc7,0x75,0x11,0xaa,0xab,0xb7,0x84,0x1d,0x5b,0x4f,0x25,0x5c,0x53,0xed,0xbb,0x6d,0x06,0x1f,0x12,0x5f,0xc0,0xeb,0x55,0x3e +.byte 0xd0,0x5b,0x4d,0x07,0xf7,0x84,0x12,0xbc,0xc8,0xd4,0xf4,0x69,0xdb,0x71,0x8a,0x00,0x58,0xf5,0x84,0xff,0xc3,0xbc,0x13,0x6e,0x5f,0xac,0xd6,0x72,0x1b,0x2d,0xbb,0x27,0xfd,0x8d,0xcc,0x59,0x79,0xb9,0x63,0xe8,0x0a,0xf3,0x7f,0xa4,0x9f,0x4c,0x35,0x9a,0xdc,0xff,0x11,0x42,0xf3,0x1c,0x86,0xd0,0x22,0x7e,0x81,0x79,0x04,0x93,0x5c,0xf2 +.byte 0xab,0xdf,0xb7,0x1d,0x84,0xbd,0xde,0xfb,0xd2,0x75,0x43,0xb8,0x19,0x63,0x97,0xfe,0x0e,0x91,0x9d,0x38,0x50,0xc5,0x7a,0xd6,0x51,0xd4,0xfc,0x8d,0xec,0xd5,0xe2,0x07,0xce,0x21,0x03,0x02,0xa1,0x61,0x8d,0xf1,0xf5,0x1f,0xb3,0xaf,0x9f,0x13,0xd8,0x81,0xd2,0xf7,0xe9,0xe2,0x62,0x49,0xca,0x1c,0x15,0x07,0x39,0xe6,0x01,0xec,0x6c,0x7d +.byte 0x3b,0xf1,0x52,0xda,0xf2,0x97,0x55,0xef,0x6f,0x88,0x82,0x0e,0xe6,0xf4,0x3e,0x33,0xf6,0x61,0x6d,0xef,0xbf,0xa8,0x9a,0x91,0x2f,0xb3,0xd2,0x3d,0xaa,0x7a,0x4e,0x80,0xe1,0x04,0xbe,0xc7,0xf8,0xc3,0xc9,0xd8,0xa2,0x01,0x5d,0x30,0xae,0x6d,0x39,0x52,0x60,0x9d,0x07,0xd5,0xa2,0x86,0xf0,0x88,0x00,0xec,0x18,0x11,0x2d,0x69,0x86,0xa9 +.byte 0x5a,0x73,0xda,0x4e,0x4c,0xdb,0xb8,0x02,0xad,0x53,0xec,0x20,0x0f,0x35,0xe0,0x4f,0x6e,0xd5,0x04,0xcc,0xa0,0xf5,0x8c,0x7d,0x31,0x04,0xa4,0xcf,0xf0,0x27,0xd2,0xb6,0x7d,0x8c,0x26,0x5f,0x19,0xba,0x79,0x80,0xec,0x6d,0xfe,0xaf,0xc1,0x3a,0xc2,0x3d,0x14,0x3c,0xa0,0xc5,0x77,0xf4,0x96,0x56,0x51,0x8b,0x7c,0x7e,0xe5,0x23,0x5d,0x46 +.byte 0x1b,0x2e,0x28,0xc0,0x80,0x6b,0x6a,0x85,0x6c,0xcf,0xaa,0x28,0xf3,0x83,0x2d,0x42,0x6f,0xf3,0x5e,0x5d,0xa2,0x7b,0xba,0x5c,0x12,0xb0,0xda,0xa0,0xeb,0xdf,0xad,0x1d,0x4c,0x54,0xcf,0xad,0x02,0x68,0xcd,0xfe,0x5c,0x5b,0x65,0x6d,0xa5,0xcc,0xd3,0xed,0x32,0x74,0x6c,0x58,0x83,0x3a,0xc1,0x71,0xbf,0xb5,0xa2,0xbd,0x10,0xe5,0x46,0xc5 +.byte 0x00,0x82,0xb1,0xeb,0x6f,0x73,0xf9,0x12,0x23,0xe4,0xda,0xff,0xa3,0xc4,0x9c,0xf1,0xcc,0x0e,0x1a,0x7a,0x10,0x62,0x8f,0xa5,0xb2,0x35,0x51,0x67,0xb5,0x95,0xbe,0x4c,0x81,0x53,0xfc,0xdd,0x27,0x26,0x97,0x42,0x01,0xec,0x08,0x91,0xb8,0xf0,0xaf,0x57,0x54,0x73,0x52,0x8f,0xde,0xca,0xed,0x1b,0xca,0x8d,0x97,0x1e,0xdc,0xe7,0xfa,0x68 +.byte 0xaf,0x37,0xb0,0x62,0xa3,0x9f,0xbc,0xac,0x9f,0x28,0x1e,0xb7,0xaa,0xb0,0x91,0xe4,0x95,0xad,0xf9,0xe5,0xd4,0xcc,0x23,0x0f,0x4a,0x2d,0xdd,0xea,0x64,0xd1,0x04,0x3c,0xd0,0xca,0xfe,0xd3,0x19,0x9d,0x28,0xa5,0x1c,0xff,0x3e,0xae,0xe9,0xfb,0x12,0x03,0x6d,0xcf,0xbc,0x5f,0x27,0xce,0x1a,0xb9,0xc0,0x31,0x88,0x6e,0x2e,0xaf,0x35,0x5f +.byte 0xf0,0xce,0x92,0xf8,0x6f,0xd6,0x67,0x1c,0xc6,0x5c,0xee,0x59,0xaa,0xd6,0x8c,0xa8,0x13,0xe6,0xf7,0xe2,0x82,0x2f,0x82,0x1e,0x4c,0x0d,0xab,0x3e,0xdb,0x4d,0xc5,0x90,0x32,0xe4,0xf0,0x74,0xc1,0x92,0x1b,0xdd,0xf3,0xa7,0xf6,0x6b,0x01,0x9d,0x8d,0x78,0x3d,0x5a,0x46,0x74,0x16,0x93,0x44,0xca,0xbe,0x31,0xea,0xb4,0x65,0xcd,0xe6,0xdd +.byte 0x56,0x9d,0x63,0x48,0xf0,0xf3,0x15,0x91,0x6c,0x27,0xf9,0xf7,0x3b,0x9f,0x04,0x6d,0x4d,0x1d,0xf1,0x7c,0xd1,0x81,0x06,0xef,0x04,0x47,0x98,0x5d,0x21,0xf4,0xe0,0xa0,0x13,0xaf,0x1d,0xb0,0xd5,0x45,0x64,0x92,0x46,0x99,0xff,0xb4,0xbf,0x36,0x01,0x2d,0x23,0x6a,0xc4,0x6b,0x3f,0x91,0x10,0x03,0xaf,0x6e,0x79,0x86,0xdb,0x15,0xde,0xfa +.byte 0x0d,0x71,0x04,0x16,0x12,0x31,0x9b,0x69,0xb9,0xe0,0xe7,0x4e,0xfd,0x0e,0xd5,0x71,0xa0,0xc7,0xd7,0x46,0xdb,0xda,0xbd,0xcd,0xdc,0x77,0xe5,0x71,0x9d,0xa1,0xf4,0x02,0x10,0xc6,0x27,0x76,0x4e,0xa6,0x35,0xe6,0x9e,0xda,0xbe,0xd8,0xc0,0x21,0x15,0xd4,0xcc,0xd5,0x4b,0xdf,0x38,0xc5,0x15,0x4b,0xfa,0x4e,0x83,0xf4,0x27,0xdb,0x8a,0xb1 +.byte 0x0e,0x1f,0xc9,0x3c,0x1c,0x36,0x35,0x54,0x8b,0x54,0xf8,0x31,0x1e,0x0e,0x1c,0x4e,0x44,0x29,0x90,0xad,0x28,0x85,0xb4,0x72,0x2d,0x1b,0x8b,0x26,0x2f,0xb6,0xc2,0x14,0x0e,0x81,0xd0,0x37,0x29,0x5c,0x0f,0xdc,0x21,0x62,0x10,0x7a,0xeb,0xa3,0x6e,0xd4,0x5b,0xb4,0x13,0x2e,0xd6,0x8f,0xd9,0x57,0x0d,0x9b,0xfd,0x1e,0x66,0xb7,0x6e,0xac +.byte 0x88,0xb9,0x75,0x60,0x62,0x83,0x72,0x96,0xc6,0x2e,0xdc,0xfe,0x88,0xee,0x07,0x9a,0x62,0x19,0xde,0xf1,0xa5,0xfb,0xcc,0xdb,0x4a,0xeb,0x16,0x60,0x34,0x46,0xfc,0xf2,0x6d,0xee,0xfc,0xa0,0x3a,0xb1,0x11,0x03,0x8b,0xae,0x26,0xef,0x86,0x91,0x20,0x7a,0x19,0x35,0xd6,0x12,0xfc,0x73,0x5a,0xb3,0x13,0xf8,0x65,0x04,0xec,0x35,0xee,0xf8 +.byte 0x70,0xb2,0x0b,0xe1,0xfc,0x16,0x35,0xec,0x6b,0xdd,0x8b,0xdc,0x0d,0xe8,0x91,0xcf,0x18,0xff,0x44,0x1d,0xd9,0x29,0xae,0x33,0x83,0xfe,0x8d,0xe6,0x70,0xbb,0x77,0x48,0xaa,0xe6,0xbc,0x51,0xa7,0x25,0x01,0xcf,0x88,0xc4,0x8b,0xfc,0xb1,0x71,0x01,0xc7,0xfc,0xd6,0x96,0x63,0xee,0x2d,0x04,0x1d,0x80,0x24,0xd0,0x80,0x03,0xd9,0x18,0x96 +.byte 0xec,0x6a,0x98,0xed,0x6e,0x9a,0xe0,0x42,0x5a,0x9d,0xec,0xed,0x46,0x3c,0xb5,0xf0,0xd6,0x88,0x92,0x89,0x38,0x5f,0xd6,0xba,0xfd,0x32,0x31,0x81,0xe9,0xf1,0x56,0x89,0xa3,0x56,0xa6,0x03,0x00,0x60,0xe1,0xa8,0x59,0xdb,0xbe,0x72,0x39,0x6c,0x08,0x4d,0x26,0x57,0xa6,0xf6,0x13,0x7d,0x4a,0x2f,0x64,0xb8,0xa7,0x23,0x2c,0xa4,0x4a,0xad +.byte 0xcf,0xa1,0xa2,0x32,0xbb,0xd1,0x98,0x02,0xe4,0x1a,0x41,0x26,0x23,0xba,0xa2,0x17,0x62,0xaa,0xa6,0xc7,0x74,0x9d,0xea,0xc7,0xa0,0x08,0x0a,0x1a,0x4e,0x71,0xd9,0x45,0xf7,0xe8,0x57,0x79,0x12,0xd0,0x38,0x2f,0xdb,0xbd,0x5a,0x84,0xe1,0xb2,0x62,0x7e,0x56,0xb3,0x50,0x2a,0xa0,0x32,0x1f,0x86,0x71,0xc4,0xa5,0xba,0x93,0x5b,0x22,0x97 +.byte 0xf4,0xe5,0x44,0x27,0x6b,0x06,0x84,0x55,0x19,0x45,0x12,0x75,0x4b,0xf0,0x76,0x6d,0x3c,0x0a,0x17,0xc2,0x9d,0x96,0x72,0xe7,0x5e,0x79,0x84,0x0a,0x39,0x64,0x09,0x6e,0x7e,0xd7,0x77,0x40,0x75,0x2c,0xbd,0x98,0xae,0x3e,0x34,0x08,0x4d,0xda,0x2c,0xcf,0x0c,0xa2,0x8c,0x40,0xfa,0x34,0x43,0x15,0xed,0x4f,0x69,0xa6,0xef,0x2d,0x3c,0x55 +.byte 0x7a,0xe1,0x67,0xd1,0x0a,0x89,0xe0,0x2d,0x02,0x35,0x57,0xc8,0x9a,0x4b,0xc4,0x46,0xa7,0x57,0x03,0x89,0x7d,0x3f,0x70,0x47,0x03,0x06,0xd9,0x81,0x1f,0x8d,0x7e,0x36,0x9b,0xfd,0xad,0x20,0x9d,0x5a,0x29,0xe9,0x40,0x6a,0xb8,0x07,0x6b,0xc7,0x2b,0x58,0xd2,0x1d,0xef,0x88,0xa5,0xfb,0x3b,0xd6,0x9f,0xfd,0x89,0x0e,0x50,0xd4,0xbc,0x89 +.byte 0x3f,0x3c,0x6c,0x50,0xc6,0xe3,0x8b,0x7e,0x34,0x8b,0x26,0x99,0x2a,0xfa,0xa5,0x19,0x53,0xb5,0x5e,0xfd,0x94,0xe8,0x33,0xb2,0x6d,0x9c,0x3c,0x0c,0x14,0x90,0xc4,0xa2,0x4a,0x3a,0xca,0x07,0x72,0x46,0x37,0xfc,0x02,0x5d,0xf4,0x97,0xca,0x8e,0xc6,0xc4,0x63,0xda,0x5c,0x89,0xc3,0x6c,0xb1,0x1a,0xf5,0x2a,0xbc,0x2e,0xe3,0xcd,0x2f,0xe2 +.byte 0x91,0x16,0xf9,0x94,0x0e,0x1b,0xe6,0x01,0x73,0x61,0x1e,0xcf,0x5e,0x21,0x70,0xcb,0x5b,0x87,0xc1,0x46,0x39,0x59,0xa6,0x74,0x82,0x7f,0xa2,0x6c,0x4a,0x50,0x5f,0xbd,0x1c,0x1a,0x65,0x80,0x01,0x44,0x19,0xcf,0xcd,0xef,0x3d,0x5e,0x1b,0x71,0x82,0x4f,0x8b,0xc1,0xa0,0x9a,0x77,0xee,0xac,0x06,0xdc,0x6a,0xa0,0x34,0x50,0xa4,0xe0,0xda +.byte 0x3d,0xa0,0xf7,0x9a,0xb8,0xd5,0x59,0xe0,0x7f,0x05,0x04,0xd5,0x32,0x8c,0x49,0xf5,0x0a,0x0e,0x99,0x83,0xf5,0x47,0x2b,0x7c,0x7b,0x65,0x25,0x02,0xc4,0x88,0xbb,0x6a,0x4f,0x89,0x31,0x60,0xc2,0x47,0x8b,0x22,0xfc,0x4a,0xde,0xb3,0xb9,0xed,0xb8,0xdf,0xd7,0xd5,0x09,0x98,0xcc,0x5f,0xaf,0xbb,0x02,0xc3,0x62,0x62,0xee,0x99,0x42,0x1b +.byte 0xbe,0x5b,0xa8,0x5c,0x40,0x03,0x86,0x29,0x29,0x06,0x0b,0x53,0x46,0x29,0x03,0x3b,0x11,0x64,0xf1,0x09,0xca,0x69,0x69,0xfa,0xcc,0x85,0x23,0x14,0x1b,0xfd,0x65,0xb9,0xf5,0x6b,0xbb,0x2a,0x9d,0x6e,0x64,0x1a,0xe1,0x37,0x39,0xd4,0x85,0x40,0xa3,0xf9,0x04,0xec,0x9e,0x3b,0x74,0x97,0xa4,0x64,0x8a,0x48,0xb2,0x62,0xc1,0x1c,0xed,0x67 +.byte 0x6f,0x23,0xae,0x0f,0x64,0x2e,0xe5,0x92,0xb6,0xb5,0x71,0x24,0xc0,0x60,0x9a,0x10,0x23,0x6b,0x4a,0x22,0xe9,0x0a,0xaa,0x09,0x62,0x39,0xe0,0x40,0xee,0x13,0x27,0x14,0x73,0xeb,0x75,0x7b,0x4a,0xe1,0x42,0x65,0x37,0xae,0x80,0x08,0x26,0xf9,0x53,0x98,0x58,0xdd,0xf5,0xed,0x26,0x37,0x37,0x85,0xb5,0x88,0x91,0x05,0x2d,0x04,0xa6,0xd5 +.byte 0xa6,0x98,0xb0,0x0e,0x4b,0x4c,0x53,0x76,0x79,0xad,0x82,0xc5,0x16,0xba,0xd8,0x20,0x5f,0x4c,0x1d,0x69,0xa0,0xe0,0xe9,0xbc,0xb8,0x5c,0x10,0x4a,0x0a,0xd3,0x52,0x9c,0x2e,0x1b,0x6c,0xf7,0x43,0x83,0x6f,0xa9,0xcc,0x00,0xed,0x16,0x4c,0xc3,0x24,0x79,0x59,0x68,0xfb,0xf9,0xf6,0xb0,0xb4,0x01,0xc2,0xdd,0xf7,0xe5,0x3b,0x60,0x48,0x49 +.byte 0x32,0x48,0x05,0xa8,0x62,0xa3,0x03,0x9f,0x3d,0x91,0xdb,0x84,0x64,0x6f,0x1e,0x50,0x8e,0xdf,0x1a,0xa0,0xb1,0xf4,0x34,0x7c,0xe6,0xb7,0x7c,0x14,0xa1,0x65,0x1a,0xb4,0xdb,0x67,0x78,0xb1,0x88,0x3c,0xc2,0x5e,0x0e,0xea,0x32,0x15,0xc7,0xda,0xe4,0x9a,0x44,0xde,0x61,0x90,0x3b,0x97,0x11,0x5b,0x6d,0xa5,0x9a,0x2f,0x1b,0x8b,0xd7,0xdd +.byte 0x73,0xe4,0xc3,0x19,0x5d,0x68,0xcf,0x0e,0xe4,0x69,0xa5,0xeb,0x50,0x6f,0x79,0xff,0x91,0xc6,0x95,0x83,0xe8,0x72,0x6a,0x01,0x49,0x2b,0xcf,0x8f,0x93,0x1e,0xef,0x31,0x17,0x8f,0xa8,0x2b,0x5f,0x4b,0x79,0x8b,0xe5,0x6c,0xb7,0x61,0xd5,0x9e,0xe0,0xd4,0x25,0xc3,0x93,0x31,0x8f,0x66,0x6c,0x48,0x30,0x65,0xf4,0xd7,0xde,0x64,0xee,0xbd +.byte 0xbd,0xad,0x32,0xfc,0xf3,0xd8,0x7c,0x85,0x7c,0x24,0x40,0xb6,0xd4,0xe0,0x4b,0xc0,0xab,0xcc,0xeb,0x77,0x7c,0xb7,0x33,0x3c,0x90,0x04,0xaf,0x85,0xaa,0xb4,0xaa,0x90,0x67,0x29,0xd9,0x85,0x6a,0x34,0xf4,0xc4,0x6c,0xbc,0xb4,0x86,0x54,0x83,0xd5,0x5e,0xf3,0xdd,0x1a,0x56,0x5e,0xa5,0xd8,0x06,0xc0,0xa7,0x27,0xd4,0x0d,0x5b,0x08,0xf4 +.byte 0xb4,0x15,0xf9,0xb4,0x56,0x1c,0x80,0x98,0xc9,0xcd,0xf0,0x38,0x18,0xbe,0x99,0xec,0x7e,0x0c,0x3d,0xc1,0x98,0x26,0x9d,0x50,0xe4,0x00,0xcf,0x0f,0x0b,0x77,0x86,0x31,0x55,0x38,0xa4,0x31,0x50,0x51,0x64,0x88,0x81,0x05,0x32,0x99,0x38,0xd1,0x62,0x20,0x8e,0xf0,0x29,0x31,0xf5,0x79,0xbb,0x1e,0x0f,0xba,0x51,0x94,0xa9,0x54,0xcd,0x43 +.byte 0xce,0xe5,0x2c,0x29,0xa5,0x51,0x23,0x97,0x5d,0x36,0xff,0x51,0x5c,0x66,0xb7,0x62,0x1b,0x5f,0xd7,0x2f,0x19,0x07,0xff,0x0a,0xfc,0xf6,0x6e,0xb5,0xfd,0xa9,0x92,0x40,0xd3,0xe6,0x99,0x15,0x6f,0x1e,0x91,0xad,0x1f,0x4d,0x1c,0xe2,0xd9,0xcf,0x01,0x71,0xec,0x1a,0xa3,0xba,0x48,0x40,0xfd,0x18,0xb1,0x24,0x2b,0xd2,0x37,0xb5,0x74,0xdd +.byte 0x7e,0xf6,0x18,0xb4,0x7b,0x0e,0x7d,0x65,0x46,0x7b,0xe3,0x51,0x03,0xae,0xe1,0xd0,0x74,0xc6,0xc9,0xda,0x0e,0x79,0x6f,0xf5,0x62,0xc0,0x7e,0x76,0x3e,0x13,0x8b,0xe0,0x4c,0xfa,0x7e,0xe1,0xa2,0xee,0x9d,0x3f,0x91,0x9d,0x21,0xdd,0xc2,0xd0,0xa5,0x1d,0x17,0xd6,0xdc,0xeb,0xa3,0xc0,0x71,0xa0,0xfe,0xf0,0xaf,0x31,0xdc,0xa3,0xd4,0x21 +.byte 0x4a,0x32,0x1d,0x54,0x25,0x3b,0xc8,0x8f,0x68,0xcd,0x99,0xce,0x76,0x39,0x42,0xd8,0xca,0xf2,0x46,0x72,0xfe,0x52,0xc2,0x90,0x83,0xed,0xa0,0x6d,0x1b,0xf5,0xb1,0x09,0xae,0x2b,0x34,0x4f,0xd3,0x78,0x19,0x7f,0xad,0x8d,0x50,0x26,0x9c,0x36,0xa3,0xb5,0x3d,0x0b,0xa6,0x87,0x65,0xa0,0xdb,0x88,0x20,0xff,0xb6,0xfd,0xc5,0xbd,0x0a,0x28 +.byte 0xc8,0x9c,0x42,0x7f,0x24,0x58,0xe9,0x07,0x53,0x4b,0x9a,0x2a,0x1e,0x7b,0x90,0x97,0x78,0x74,0x80,0x5d,0xe5,0x6e,0xae,0x15,0x68,0xd4,0x2a,0x3a,0xd3,0x00,0x4f,0x4b,0xff,0x8f,0x1e,0x8f,0x9f,0x75,0xe5,0xea,0x9d,0xb9,0xed,0x8f,0xa9,0x2b,0x70,0xa8,0xcb,0x08,0x85,0xd3,0x8f,0x5d,0xc7,0x49,0x66,0xcc,0xa8,0x6d,0xbd,0x01,0x93,0xd5 +.byte 0xe6,0x75,0x2e,0x25,0x07,0x59,0x86,0x3f,0x44,0x8b,0x0b,0xb5,0x38,0xd5,0xbd,0xcf,0x48,0x8a,0xf7,0x71,0xd6,0x6b,0x2e,0x93,0x3d,0x0b,0xc0,0x75,0xee,0xa8,0x5d,0x9c,0x3d,0xa5,0xdb,0xc5,0x8d,0xac,0xda,0xf4,0xcd,0x5f,0x24,0xfe,0x86,0x14,0x44,0x65,0x3f,0x89,0x7f,0xd3,0x61,0x48,0xb0,0x43,0xf0,0x1e,0xde,0xbc,0xb7,0x51,0x0f,0xfc +.byte 0x32,0xf2,0x04,0xe2,0x4b,0xcb,0xbb,0x63,0x7d,0x5b,0x9a,0xb1,0x91,0x57,0x89,0xdc,0xed,0xde,0x91,0x2d,0xdd,0x42,0xc8,0x3c,0xb0,0xd7,0xa5,0xbc,0xa7,0x33,0x14,0x32,0xaf,0xf7,0xe9,0x25,0xd2,0x1a,0x64,0xf7,0x1b,0xab,0x0e,0xbc,0x50,0xbc,0x85,0x44,0xe0,0xa6,0xf1,0x4a,0x32,0x2f,0x30,0x27,0x48,0x4f,0xfc,0x8a,0x5a,0x78,0xe7,0x16 +.byte 0x55,0xcf,0xca,0x15,0xa8,0xa8,0xa2,0xef,0x9a,0x16,0x02,0xf4,0xb0,0x44,0xfd,0xc4,0x51,0x01,0x4f,0x1d,0x9d,0x09,0x62,0x42,0xe9,0x8b,0x18,0xa4,0x65,0xef,0x8b,0xfe,0x71,0x9f,0x4b,0x47,0x48,0x41,0x73,0x5c,0x0c,0x52,0x7d,0x79,0xbc,0x93,0x2a,0xaa,0x81,0x99,0x21,0xa5,0x9e,0xac,0xcd,0x57,0x51,0x50,0xbc,0xc9,0x96,0xaf,0xdf,0x1a +.byte 0x8f,0xee,0x36,0x05,0x20,0x32,0xe8,0x51,0x94,0x72,0x12,0xa3,0x17,0x25,0x7f,0x0a,0x3e,0xcc,0x22,0xcf,0x05,0xb2,0x2b,0xaa,0x36,0x01,0xdf,0xd4,0x4e,0xe1,0x02,0x43,0x4e,0xac,0x50,0x64,0xcd,0x2f,0xc2,0xa9,0xb0,0xf2,0xf2,0x4c,0xdf,0x16,0xa6,0x54,0xf7,0xbf,0x1a,0x69,0xeb,0xa1,0x5a,0xc7,0xcf,0x46,0x2d,0xc2,0x3a,0x7f,0x4a,0x14 +.byte 0x22,0x15,0x46,0x46,0x2d,0xc1,0x98,0xf7,0x0b,0xf3,0x27,0xfc,0x78,0x67,0x05,0xd8,0xe0,0xf6,0xb8,0xb6,0x0b,0xdb,0x4d,0x6b,0x7e,0x9b,0xbf,0x5c,0x15,0x97,0x49,0x9f,0x6f,0x11,0x6c,0x6e,0x1d,0x1e,0x65,0x5b,0xb9,0x60,0x8f,0xa3,0xa9,0x99,0x17,0x92,0xb8,0x65,0x25,0xc4,0xef,0xea,0xa6,0xc0,0x57,0xa9,0x4c,0x78,0xe3,0xd6,0xf2,0x19 +.byte 0x9c,0x86,0x9e,0x45,0x3e,0xfd,0x21,0x4c,0x2a,0x56,0x7c,0x23,0xf2,0x22,0xa1,0x81,0xdb,0xe6,0xfa,0x85,0x19,0x3b,0x1d,0x61,0xb3,0x21,0xb5,0x64,0x1d,0x07,0x66,0xd2,0xe5,0x9c,0xb0,0x76,0x9d,0xc9,0x02,0x6a,0x8d,0xd5,0x84,0xd5,0xa7,0x7c,0x70,0x64,0x46,0xd6,0xff,0xc7,0x9f,0x2f,0xed,0xc1,0x5a,0xcb,0x56,0x12,0x31,0x9d,0xff,0x66 +.byte 0x9a,0xf8,0x50,0xc6,0x54,0xfd,0x8d,0x49,0x32,0x8c,0xdd,0x8c,0xbe,0x30,0x79,0xaf,0x1a,0xd5,0x28,0x1d,0x03,0x87,0x12,0x60,0x7a,0xcc,0xe6,0xe8,0x4e,0x21,0x5d,0xa3,0x06,0xfb,0xdf,0xf6,0x31,0xd6,0x10,0x3e,0xec,0x23,0x69,0xc7,0x7b,0xf6,0x78,0xa6,0xd1,0x8a,0x48,0xd9,0xdc,0x35,0x1f,0xd4,0xd5,0xf2,0xe1,0xa2,0x13,0x8a,0xec,0x12 +.byte 0xa7,0xf1,0x5d,0xb2,0xc3,0x6b,0x72,0xd4,0xea,0x4f,0x21,0xff,0x68,0x51,0x51,0xd9,0xd7,0x2f,0x28,0xd7,0xdf,0xbc,0x35,0x4f,0x49,0x7e,0xe7,0x21,0x82,0xd7,0x0c,0x7c,0xf4,0x86,0x86,0x62,0xcd,0xf5,0x23,0x77,0xc1,0x14,0x8a,0xc4,0x2a,0x82,0x74,0x0e,0x90,0x93,0xd5,0x5a,0xc0,0x57,0x93,0x1a,0xe1,0x1c,0x13,0x17,0x72,0xc3,0xa6,0x54 +.byte 0xc4,0xe2,0xfc,0xd3,0xa0,0xce,0x08,0x87,0x9e,0x2a,0xaf,0xa7,0xbb,0x2d,0xaf,0xc0,0x38,0x97,0xc8,0x6d,0xb8,0x7b,0x75,0xc5,0xf2,0x79,0x62,0xdc,0x7c,0xa9,0xfd,0x19,0xa2,0xb1,0xee,0xdf,0x90,0x18,0x5a,0xdb,0x3c,0xba,0x0d,0x84,0xd6,0xaf,0x15,0xee,0xb6,0xa5,0x78,0x38,0x87,0xdf,0x42,0xd6,0xd1,0xa2,0xe9,0xe0,0xa6,0xf2,0x4e,0xa4 +.byte 0xed,0xa5,0xf6,0x66,0x7f,0x99,0xbc,0xfb,0x4b,0x37,0xca,0x5a,0xb3,0x29,0x8e,0x80,0x30,0x8b,0x74,0x7b,0xac,0x61,0xfb,0xca,0x62,0xfe,0x24,0xc4,0x6e,0xac,0x66,0x97,0xaa,0x9a,0x99,0xe6,0xa8,0xa4,0xd8,0x62,0x58,0x7c,0xd1,0xeb,0xee,0xc8,0x08,0xa0,0x54,0xde,0xb1,0xef,0x57,0x2c,0xb6,0x2c,0x78,0x22,0x10,0xbb,0xfe,0x4b,0x77,0xa5 +.byte 0x5a,0xed,0xbb,0xf8,0x97,0x96,0x20,0xa9,0x8c,0x78,0xb5,0xb9,0x55,0xc9,0xaf,0xb9,0xa1,0x1f,0x13,0x52,0xf9,0xbb,0xaa,0x98,0x01,0x57,0xa6,0x88,0xaa,0x5c,0xf0,0x62,0x5b,0x3e,0xe1,0x5f,0xf4,0x98,0x95,0x8b,0x8f,0x48,0xd6,0xd5,0x8b,0xc2,0x1d,0x45,0x7d,0xe2,0x03,0x66,0x84,0xfc,0xbd,0x8e,0x95,0x9f,0x58,0x99,0x7b,0x4c,0xb6,0xe5 +.byte 0xe2,0xf9,0x2e,0x92,0x58,0xca,0xa9,0x24,0x9c,0x7c,0x46,0xdf,0xea,0xb4,0x6e,0x0e,0xa5,0x9c,0x14,0xbf,0x25,0x5b,0x39,0x4a,0xaf,0x31,0xaa,0xd1,0x2c,0xe6,0x06,0x3d,0xc4,0x60,0xc7,0xcd,0x49,0x8d,0xe1,0x50,0x55,0xe4,0x72,0x68,0xed,0x43,0xb8,0x85,0xa3,0xc3,0xf1,0xf5,0xd1,0xcf,0xcb,0x57,0xac,0x04,0x16,0x22,0xe4,0xfc,0x4a,0x13 +.byte 0x60,0x3f,0x09,0xa4,0xf2,0x9b,0x34,0xeb,0x0c,0x10,0x57,0xc3,0x3f,0x15,0xb5,0x1b,0x6a,0xb3,0x7d,0x37,0x02,0x4c,0x0f,0x6f,0x8b,0x4d,0x5d,0x57,0x7d,0xbf,0x00,0x8a,0x74,0xb4,0x4c,0x5f,0x90,0x27,0x76,0x09,0x8c,0x18,0x3f,0x26,0x3a,0x09,0x06,0xdd,0x8b,0xff,0x0e,0xa4,0xae,0xef,0x0c,0x81,0xf2,0xf3,0x1f,0xe0,0x33,0x33,0x37,0xc6 +.byte 0xc3,0xfb,0x14,0xdd,0xa1,0x16,0x84,0x80,0xcb,0x37,0xe7,0x97,0x6d,0x21,0xa7,0x71,0x19,0x2b,0x2d,0x30,0xf5,0x89,0x2d,0x23,0x98,0xfc,0x60,0x64,0x4a,0x26,0x65,0x4a,0xef,0x12,0x59,0xa3,0x8c,0xd9,0xbd,0xdc,0xb7,0x67,0xc9,0x8d,0x51,0x72,0x56,0x6a,0xe5,0x59,0xa2,0x53,0x4f,0xb6,0x53,0xff,0xb0,0xd4,0x06,0x7f,0x79,0x23,0xf9,0xcb +.byte 0xbf,0x9a,0x93,0xde,0x88,0x33,0x58,0x70,0xa7,0xcc,0x07,0xb1,0x44,0xb9,0x99,0x1f,0x0d,0xb9,0xc9,0x18,0xdc,0x3e,0x50,0x22,0xfb,0x4e,0x86,0x0d,0xc0,0xe7,0x7f,0xc6,0xa1,0x52,0x0d,0x8d,0x37,0xe6,0xaf,0xe3,0x13,0xbe,0xa6,0xf9,0x59,0x39,0x0f,0x17,0x66,0xce,0xb1,0x7d,0x7f,0x19,0x1a,0xf8,0x30,0x3a,0xa5,0x72,0x33,0xa4,0x03,0xb6 +.byte 0xb6,0x9b,0xde,0x7a,0x7a,0x62,0x3d,0x85,0x98,0x8e,0x5d,0x8a,0xca,0x03,0xc8,0x2c,0xae,0xf0,0xf7,0x43,0x3f,0x53,0xb2,0xbb,0x1d,0xd0,0xd4,0xa7,0xa9,0x48,0xfa,0x46,0x5e,0x44,0x35,0x50,0x55,0xdc,0xd5,0x30,0xf9,0x94,0xe6,0x5f,0x4a,0x72,0xc2,0x77,0x59,0x68,0x93,0x49,0xb8,0xba,0xb4,0x67,0xd8,0x27,0xda,0x6a,0x97,0x8b,0x37,0x7e +.byte 0xe9,0x59,0x89,0xc7,0x5e,0xd9,0x32,0xe2,0xaa,0xd1,0xe9,0x2b,0x23,0xca,0x9d,0x89,0x7a,0xf5,0xe4,0xfb,0x29,0xcc,0x88,0xfb,0x82,0x0f,0xbf,0x47,0x54,0xca,0x2b,0x4b,0xd8,0x47,0x7f,0x65,0x38,0x5a,0xb3,0xe8,0x0b,0xd7,0xe1,0x8b,0x89,0x57,0x32,0xdb,0xa3,0x85,0xba,0xf9,0xbc,0x52,0x92,0x20,0x10,0x66,0x54,0x81,0xe1,0x49,0x3f,0xe1 +.byte 0x8c,0x2e,0x0b,0x3b,0xe7,0x49,0xb4,0x60,0x5a,0x20,0x33,0xc4,0x4e,0x81,0xef,0x96,0xda,0x73,0x90,0x2b,0xb4,0x86,0xa1,0x5c,0xcd,0xa0,0xc7,0xf3,0x06,0x0d,0x2a,0x5a,0x41,0x96,0xf5,0x40,0x1b,0x0a,0x3a,0xb7,0x38,0xe1,0xbb,0xe3,0x42,0xf9,0x52,0xe5,0x98,0xe2,0x17,0xd4,0xb0,0x09,0x73,0x75,0xc1,0x00,0x18,0x0f,0xa7,0x0b,0x58,0xc1 +.byte 0x78,0x5c,0x0c,0x05,0xd8,0xfb,0xc5,0xfd,0x5c,0x66,0xbe,0x54,0x68,0xd1,0x16,0x54,0xfb,0xc5,0x97,0xd7,0x03,0x82,0x47,0xbb,0x47,0xea,0x9e,0x8b,0x90,0x07,0xb2,0xd2,0x06,0x14,0x79,0xeb,0xb6,0xe1,0x10,0x55,0xa9,0x13,0xea,0x65,0x7a,0xd0,0xe5,0x66,0x5d,0xe7,0x7b,0x10,0x5f,0x7c,0x25,0x7d,0x4e,0x77,0xb3,0x19,0x02,0xb1,0x45,0x1c +.byte 0x1a,0x51,0x24,0x72,0xd4,0xaa,0x03,0x0c,0x37,0x2a,0x78,0x81,0x05,0xca,0x73,0xb9,0xb5,0xd8,0xf5,0x25,0x2b,0x30,0x59,0x00,0x66,0xbd,0x6c,0x38,0xa2,0xc3,0xfb,0x43,0x85,0x6d,0xab,0xca,0xd8,0x73,0xa8,0x76,0xda,0x6e,0x00,0x19,0xd0,0xb9,0x1e,0x9b,0x33,0xe4,0x57,0x68,0xf4,0xb8,0x35,0x44,0xe6,0x74,0xd2,0x33,0x64,0xa1,0x41,0xa6 +.byte 0x5a,0xf6,0x8e,0x29,0xb5,0xa6,0x21,0x8e,0xc4,0x0c,0x0c,0x16,0x81,0x08,0xef,0x0a,0x41,0x08,0x34,0xc7,0xe1,0xd8,0xa8,0x68,0xb1,0xf3,0x9a,0x7a,0xaa,0x90,0xc0,0x77,0x32,0x70,0x50,0x5c,0x92,0xfc,0x38,0x31,0xaf,0x3e,0xd8,0xd8,0x4b,0x90,0x99,0xc4,0x17,0xde,0xa6,0xb5,0x29,0xc0,0x82,0x45,0x20,0x08,0x0c,0x4f,0x76,0x36,0x56,0x7e +.byte 0x07,0x17,0x42,0x78,0xa1,0x2d,0x62,0x48,0x81,0x57,0xc4,0xcf,0xf4,0x89,0x34,0x78,0x10,0xe6,0x98,0x78,0xb0,0x69,0x15,0x06,0xdb,0x2b,0xbb,0x8b,0xa5,0x72,0x50,0x24,0xae,0x6b,0x33,0x49,0x7b,0x9d,0x69,0x74,0xc8,0x7c,0xca,0x7a,0x31,0x39,0x0d,0x72,0x78,0xc1,0x6b,0x97,0x50,0x97,0xea,0x90,0xab,0xe7,0xdf,0x29,0x2e,0xf7,0x6e,0x49 +.byte 0x95,0xab,0xbd,0xea,0x1f,0xd4,0x93,0x4d,0x30,0x6b,0x6d,0xb0,0x86,0x38,0x2c,0xc8,0x77,0x2c,0xb5,0xb5,0x5c,0xd9,0xbb,0xe9,0x7d,0xb2,0xb7,0x6b,0xd1,0x1c,0xd3,0xd0,0x66,0x51,0x63,0x8c,0xf3,0x13,0xad,0xcf,0xeb,0x82,0x12,0x1a,0x6d,0xf5,0x75,0x66,0xa2,0x55,0x30,0x64,0x1d,0x68,0x46,0x50,0x5a,0x93,0xf1,0xc2,0x13,0x68,0x95,0x55 +.byte 0x51,0xe0,0x56,0x3a,0x96,0x86,0x8e,0xfb,0x5f,0x3b,0x1f,0x49,0x9c,0x3d,0xe5,0xf2,0x8c,0x3f,0xd6,0x6d,0x17,0xc7,0x18,0x59,0x1a,0x8a,0x72,0xa8,0xb3,0x39,0xda,0xc4,0xfa,0xc5,0xca,0xdf,0x48,0x48,0xd1,0xd2,0xba,0x14,0x5d,0x28,0x3b,0x4c,0xb3,0xcb,0x8d,0x1b,0x91,0x46,0x6b,0x2d,0x21,0x21,0x99,0x98,0x6d,0xcc,0x6b,0x8e,0x91,0x1d +.byte 0x42,0xc2,0x72,0x1a,0xc6,0xd2,0xaf,0xed,0x10,0xff,0x1e,0xa5,0xae,0x16,0xc0,0x05,0xdf,0x37,0xe2,0x1e,0x2e,0x15,0x21,0x0c,0x33,0x6f,0xfd,0xed,0x3f,0x7e,0xd7,0x69,0xfb,0x76,0x79,0x65,0xe9,0xd9,0x8d,0xf6,0xc0,0x6c,0xf7,0x15,0x7f,0x04,0xd7,0x71,0xcc,0xaa,0x85,0x73,0x23,0xf1,0xc8,0x62,0xd0,0x8e,0x01,0x35,0xff,0x4f,0x4f,0x13 +.byte 0xe6,0x28,0xf1,0xc1,0x7a,0x04,0xc0,0x7b,0x75,0xac,0x1c,0x55,0xb4,0x7c,0x00,0xb9,0xe0,0x14,0x67,0xb6,0xc5,0x69,0x62,0x0b,0xe6,0xb5,0x46,0x86,0x6f,0x09,0xdf,0x84,0x2c,0xa8,0x30,0x89,0x5b,0x24,0x47,0xfa,0x43,0x24,0xd5,0x07,0xf7,0xba,0xab,0x1b,0xfd,0x60,0xad,0x89,0x5f,0x60,0x87,0x78,0x48,0xbb,0xc0,0x63,0xf4,0x27,0x86,0x33 +.byte 0xf4,0x49,0x64,0x4c,0x5c,0x94,0x9a,0xb8,0x0f,0x45,0xe2,0x92,0x7d,0x9a,0x86,0xdb,0xb7,0x05,0xe8,0xd7,0x64,0x44,0xfa,0x74,0x60,0x72,0x89,0x13,0x8f,0x2e,0x96,0x33,0xa9,0x12,0x4a,0x62,0x6b,0xc3,0xcb,0x55,0xd3,0xef,0x17,0x11,0x82,0x4a,0x51,0x77,0xbf,0x63,0xa0,0x21,0xfc,0xbc,0x0c,0x6f,0x9a,0xfd,0xde,0xbe,0x9f,0x2e,0x50,0xd5 +.byte 0x32,0xa4,0xf0,0x1b,0xed,0xfa,0xbf,0xcd,0xc9,0xd8,0xf8,0x06,0xf2,0x17,0x8a,0x92,0x18,0xb8,0xc3,0xe5,0xbf,0xc2,0xf4,0x77,0xb9,0x71,0xfb,0x60,0x6e,0xe7,0xad,0xe4,0x7d,0xd4,0x59,0xa9,0xbd,0x21,0xd5,0x03,0x69,0xb5,0xf1,0xce,0xb5,0x88,0xd9,0x1d,0xc7,0xb3,0x14,0xa6,0xb1,0x30,0x8d,0xaa,0xcd,0xe5,0x50,0xc5,0x0d,0x4b,0x6d,0xde +.byte 0x17,0x4d,0xd2,0x93,0xf3,0xc2,0x8d,0x59,0xf1,0xd0,0x2f,0xb5,0x62,0x18,0x81,0x07,0xb3,0xfb,0x08,0xb3,0xa8,0x15,0xe0,0x9a,0x4c,0xa5,0x24,0xcd,0x47,0x69,0xf9,0xf7,0xda,0xa9,0xff,0xe1,0xe2,0x43,0xe3,0x69,0xf1,0x26,0xac,0xc6,0x42,0xf2,0x32,0x42,0xfb,0x7c,0xa2,0x94,0xc6,0xaa,0xd9,0x05,0x29,0xc6,0x3d,0x45,0x44,0x1d,0x52,0x7e +.byte 0x48,0x47,0x93,0x34,0x08,0xa0,0x93,0xc2,0x5e,0x9b,0x22,0xc1,0x2a,0xaa,0xfe,0xa2,0x26,0x00,0xa8,0xbb,0xd0,0x58,0xfd,0x5a,0x09,0x4f,0xa1,0x0c,0xff,0x66,0xcc,0x88,0x3a,0x69,0x9a,0x12,0xb6,0x05,0x6e,0xdf,0x54,0x5d,0xe7,0x03,0x8e,0x95,0x86,0x68,0x83,0x83,0x6f,0x04,0x0b,0x9c,0x05,0x05,0x77,0x14,0x83,0x47,0x98,0x5f,0x22,0xaf +.byte 0xa8,0xfd,0xf3,0xe7,0x73,0xec,0xef,0xd7,0x57,0xd9,0xef,0xe7,0x1b,0x18,0x24,0x09,0xd9,0x14,0xf9,0x60,0xba,0x05,0x0f,0x8f,0x33,0x48,0xb1,0x06,0x41,0x2e,0x95,0x3d,0xf5,0xcf,0x14,0x50,0x5d,0xb6,0x93,0xeb,0xd5,0xf8,0x9f,0x7c,0x8f,0x23,0x35,0x39,0x30,0xc8,0xf6,0x74,0x07,0xc4,0x4c,0xcf,0xe1,0xdb,0x3e,0x9f,0x0a,0xfd,0x48,0x9e +.byte 0x56,0xe4,0xa7,0xa3,0x07,0x06,0x18,0xbb,0x50,0x75,0x33,0x48,0xb9,0xa1,0x4e,0x63,0x65,0xd3,0xf4,0x40,0xc3,0x2d,0x52,0x9a,0xad,0x56,0x7f,0xff,0xb0,0x46,0x24,0xa1,0x78,0x5f,0xb6,0xa8,0x72,0x28,0xb3,0x6c,0x61,0x6e,0xa0,0xfc,0xcb,0xe8,0xfe,0x07,0x28,0x97,0x1c,0xda,0x76,0xc7,0x98,0x2f,0x00,0x1d,0xf2,0x17,0xbe,0x48,0x3f,0xd3 +.byte 0xc7,0xbe,0x89,0x89,0xe1,0x96,0x75,0x1e,0xee,0xf9,0x78,0x67,0xbf,0x12,0x1e,0xe2,0x14,0xbf,0xd4,0xfd,0x49,0xaa,0xbf,0xc6,0xb8,0x4f,0x84,0xcd,0x5d,0x3c,0x45,0xb3,0xb0,0x14,0x6f,0x2d,0x6f,0x35,0xfa,0x60,0x7f,0x64,0x40,0xc8,0xde,0xa8,0x2b,0x56,0x75,0x74,0xc9,0xe1,0x2c,0xe2,0x2f,0xc2,0x3e,0xba,0xa3,0x20,0xd8,0xa3,0xbc,0x69 +.byte 0x9d,0x1c,0xcf,0x5e,0xe3,0xc0,0x66,0x72,0xce,0x22,0x96,0xad,0x47,0xc9,0x5b,0xac,0x45,0xdc,0x4f,0x8e,0xf6,0xa6,0x2e,0x4a,0x1e,0x01,0xe4,0xb7,0x83,0x68,0x92,0x2b,0x98,0xdf,0x22,0x0f,0xd9,0x4f,0x6f,0x72,0x37,0x56,0xfa,0x1b,0xbb,0x5a,0x4d,0xd8,0x5b,0xc6,0x65,0xf8,0xd4,0x4e,0xa5,0xc0,0x0f,0x2d,0xc2,0x38,0xa4,0x6c,0x33,0x2f +.byte 0x7a,0x52,0x14,0xbb,0xfb,0xb3,0xf2,0xa9,0xbf,0xa0,0xad,0xcb,0x8c,0x81,0x47,0x26,0xe9,0xfb,0xc1,0x8e,0xc6,0xe5,0x39,0x48,0xa5,0xb3,0xbc,0xb2,0xe4,0xac,0xf9,0x49,0xbb,0x34,0x2b,0xc4,0x4d,0x06,0xe4,0xd6,0x0b,0xdd,0x55,0x36,0xe6,0xaf,0x64,0xea,0x84,0xf2,0xa5,0x68,0xe3,0x4e,0x4c,0x77,0x46,0x6c,0x17,0x6e,0x08,0x99,0x96,0x1b +.byte 0xb5,0x44,0x3b,0x94,0x2d,0x0f,0xcd,0x90,0x17,0x8f,0x80,0xcb,0xc2,0x30,0xbe,0xe1,0x36,0xdc,0x1e,0x48,0xe3,0x2c,0xe5,0xc9,0xbc,0xbd,0xff,0x3f,0x95,0x59,0x35,0x58,0x2f,0x9c,0xa6,0x1c,0x45,0xa7,0x61,0xde,0xf2,0x9c,0xa3,0x04,0x0f,0xa0,0x93,0xaf,0x69,0x2b,0x0d,0x1c,0xfc,0xff,0x97,0x1c,0x69,0x7e,0x30,0x06,0x88,0x01,0xa4,0xf1 +.byte 0x32,0x36,0xed,0x56,0x89,0xff,0xa9,0x63,0x3a,0x17,0x91,0xc5,0xba,0x6e,0x38,0x84,0xb1,0xaf,0x28,0xac,0x8a,0xb2,0x60,0xbe,0x1b,0x0a,0xd8,0x05,0x22,0x25,0x56,0xbe,0x75,0x47,0x59,0xcf,0x8c,0x2e,0xb3,0xc3,0x5f,0x06,0x81,0x65,0x39,0x78,0xed,0xe3,0xc9,0x5a,0x99,0x01,0xae,0xfb,0xf6,0xed,0x55,0xf5,0xbd,0x2f,0x93,0xf1,0x62,0x6a +.byte 0x54,0x4f,0xe1,0x9f,0x0a,0x23,0x83,0xbc,0xc2,0xba,0xb4,0x6f,0xd9,0x88,0xc5,0x06,0x7a,0x83,0xd5,0xdb,0xeb,0x49,0x48,0xd6,0xc9,0x45,0xa2,0xd0,0xc4,0x06,0xd9,0x01,0xec,0x2d,0x6d,0xc1,0x95,0x69,0x22,0xd0,0xae,0x88,0x75,0x8b,0xd2,0x02,0x98,0x83,0xd9,0x10,0x27,0x8d,0x68,0x97,0x5e,0x6b,0xdd,0x51,0xbb,0x92,0x38,0xa8,0x12,0xde +.byte 0x0f,0xa4,0x1e,0x2e,0xec,0xd5,0x73,0x55,0x5f,0x46,0x6a,0x0f,0xc9,0x50,0x0d,0xb3,0x55,0x20,0xe0,0x01,0xef,0x92,0x29,0x04,0x38,0x60,0xbd,0xc7,0x0b,0x1e,0x94,0x10,0x37,0xb7,0x02,0x94,0xbc,0xde,0xdb,0xb3,0xe3,0x1e,0xd5,0xe2,0xa8,0xed,0x46,0xe8,0xd4,0x8a,0x6c,0x93,0x4e,0xb7,0x73,0xa6,0x20,0x86,0xd2,0x82,0x2f,0x78,0x80,0x34 +.byte 0x44,0x79,0x84,0x2e,0x54,0xd0,0x30,0xa8,0x06,0x0c,0xcf,0x78,0xb4,0xd7,0xe2,0xc9,0x6e,0xfb,0x37,0x47,0x8f,0xe5,0x9f,0xf8,0xca,0x58,0x9c,0xb6,0x8b,0xbe,0xf4,0x3a,0xfe,0x75,0xec,0x1b,0x22,0xfd,0x93,0x92,0x07,0x09,0xcd,0xe6,0x2f,0xe6,0x51,0x0f,0x19,0x43,0x9c,0x6a,0x32,0x38,0x7d,0xf0,0x0c,0x78,0x81,0xb7,0x5c,0xbe,0x3c,0xf4 +.byte 0xc0,0x12,0x57,0x51,0x8a,0x69,0x84,0x0d,0x1e,0x0a,0xed,0x75,0xde,0x9e,0x31,0x8a,0x9b,0x18,0x82,0x01,0x5a,0xee,0x0e,0x33,0x3c,0x8c,0x95,0xb1,0x0b,0x05,0x3b,0xb2,0x85,0xab,0xaf,0x47,0xa2,0x03,0xb6,0xbb,0xda,0xf5,0xc8,0xbe,0x0e,0x4d,0xf8,0x84,0xe4,0xfb,0xd4,0x54,0x44,0x72,0xe5,0x30,0x57,0xa3,0xb6,0x47,0x8f,0xd3,0x32,0xc2 +.byte 0x83,0x07,0x4f,0x17,0x20,0x88,0xa1,0x0b,0xb3,0xef,0x4b,0x27,0x60,0xe0,0x9d,0xec,0xc2,0xdf,0xaf,0x2e,0x74,0xae,0xa4,0x2b,0x59,0x94,0x75,0xbe,0x54,0xf5,0x18,0x62,0xd9,0xe2,0x35,0xee,0x37,0x2e,0xdf,0x48,0xf8,0x80,0x32,0xcb,0xf1,0x83,0x78,0x03,0x68,0x06,0xd7,0x82,0xc6,0x76,0x2a,0x10,0x2a,0xdb,0x73,0xe6,0x65,0x24,0x9f,0x73 +.byte 0x1f,0x55,0x55,0xb6,0x10,0x65,0x80,0x70,0x5a,0x8e,0x8a,0xc8,0x4c,0xca,0x74,0x47,0x63,0x3f,0xee,0x49,0xc3,0x86,0x0f,0x66,0x56,0x08,0xee,0x9f,0xf5,0x5a,0x89,0x4c,0xb4,0x97,0x6e,0x75,0x61,0xc0,0xa7,0x92,0xa8,0x38,0x99,0x08,0x01,0x12,0x82,0x77,0x80,0x20,0x9d,0x62,0x46,0x92,0xdd,0x39,0x4d,0xcf,0xc0,0x8a,0x3e,0x30,0x9a,0xfa +.byte 0x28,0xe8,0xd8,0xf8,0x07,0x0d,0xab,0x4c,0xd4,0x02,0x4c,0xd7,0xc3,0x16,0x89,0x24,0x84,0x52,0x7c,0xa4,0x1b,0x54,0x7f,0xc4,0x74,0x4f,0x88,0x0a,0x14,0x03,0xd9,0x1a,0x48,0xff,0x2c,0xfb,0xbf,0x33,0xf1,0xf8,0x0e,0xdd,0xc4,0x98,0xf2,0xbd,0x32,0x99,0x03,0x8e,0x56,0xc1,0x84,0x5d,0xa6,0xd7,0x21,0xf2,0x43,0xfb,0x3b,0xf5,0x6a,0x75 +.byte 0x20,0xfb,0x08,0x7b,0x66,0x15,0x47,0x31,0xb6,0xb6,0x7a,0xc9,0xe6,0xf5,0xd6,0x0a,0x14,0xb3,0x68,0x0a,0x32,0x13,0xb5,0xe6,0x56,0xbd,0xa5,0x24,0xe2,0xa3,0x7b,0x3d,0x01,0x23,0xed,0x08,0x09,0xb5,0xdb,0x7c,0xa9,0x4b,0x23,0xdb,0xa2,0x25,0x0c,0xc6,0xa4,0x0d,0xbb,0x1a,0x5d,0x1b,0x42,0x0b,0x86,0x72,0xc3,0xca,0x5b,0x14,0x04,0xa3 +.byte 0xd7,0x01,0xe7,0x17,0x78,0xd0,0x54,0xde,0xd4,0x76,0x3d,0xe1,0x7d,0x26,0x3e,0xb4,0x71,0x42,0x84,0x36,0x58,0x78,0x22,0x32,0x26,0x0e,0xc8,0x99,0x05,0xe3,0x4a,0xa6,0x5a,0x1a,0x06,0x0a,0x88,0x47,0x51,0x5c,0xa8,0x72,0x70,0x0c,0x62,0x5f,0xf3,0x1e,0x02,0x50,0x20,0xc6,0x5c,0x50,0x30,0x1f,0x4e,0x5a,0x3a,0x02,0xc9,0xca,0x3f,0xa4 +.byte 0xf1,0x66,0x05,0xf3,0x19,0xe5,0xaa,0xdb,0x75,0x51,0xc1,0xb8,0x94,0xfa,0x2d,0xb6,0x8b,0x42,0xdc,0x9a,0xa3,0x13,0xeb,0x95,0x8d,0xf0,0x65,0x87,0xc9,0xa1,0x43,0xb4,0xfe,0x76,0xf4,0xc8,0xbb,0x19,0x96,0x84,0x9d,0x2f,0x92,0xe8,0x22,0x9a,0xf0,0xd5,0xf4,0xc4,0x8d,0x19,0x59,0x21,0xbf,0x15,0xfd,0xa6,0xc4,0xde,0x77,0x58,0xae,0x93 +.byte 0xb3,0xff,0x44,0x49,0x6e,0x37,0x94,0x04,0xd2,0x96,0xe9,0x80,0xd8,0xe3,0x93,0xd8,0xb4,0x7f,0x5f,0xcf,0xe5,0x9d,0x51,0x92,0xac,0x5d,0x9f,0x23,0x3a,0x3e,0xdf,0x96,0x68,0x9a,0x46,0x9b,0x1a,0x06,0x44,0x54,0xc4,0x2e,0x19,0x0f,0x50,0xee,0x73,0xda,0x39,0x7e,0xec,0xcb,0x1d,0x39,0xf7,0x9f,0xbc,0xe0,0x6d,0x49,0x56,0xf8,0xa7,0x24 +.byte 0x70,0xab,0xe1,0xc3,0x82,0x99,0x0a,0x4d,0x64,0x41,0x37,0xab,0x92,0x76,0xeb,0x6a,0x2a,0xa5,0xab,0x75,0xd7,0xe3,0x6a,0x72,0x4a,0x2b,0x57,0x02,0xc7,0xbe,0xd5,0x35,0xce,0xdf,0xee,0xf1,0xc6,0xe6,0x69,0xb7,0x76,0x99,0x22,0xb0,0xb9,0xe1,0x18,0x91,0x9a,0x35,0xd9,0x3a,0x19,0xc7,0x77,0xf2,0x2d,0xae,0x04,0x2e,0xb7,0x35,0x97,0xa5 +.byte 0xc6,0x97,0x4e,0x5d,0xbe,0xa9,0x35,0x2b,0x53,0x1a,0x6b,0x4e,0xa8,0xa6,0x22,0x48,0x2c,0x81,0x25,0xac,0x30,0x89,0x7b,0xb3,0x38,0x34,0x42,0x0b,0xa5,0x5f,0x02,0xe8,0xee,0x12,0x9b,0xce,0xe7,0x10,0xf9,0x65,0xb6,0xc5,0x74,0x06,0xef,0xc8,0x95,0xb3,0x40,0x30,0xec,0x1f,0x8e,0xeb,0x93,0x31,0x91,0x5a,0x2f,0xc2,0x90,0x85,0xaa,0x4c +.byte 0x51,0xc4,0xd0,0x3e,0xc8,0xc9,0x61,0x46,0x96,0xd4,0x60,0x56,0x7d,0x91,0xc4,0x24,0x76,0xfb,0x09,0x08,0x48,0x2f,0x4a,0x73,0x90,0x8e,0x9d,0xb2,0x38,0xa8,0x95,0x3e,0x6d,0x10,0x57,0x91,0x8d,0x55,0x62,0x1f,0x21,0xc7,0x01,0x15,0xb0,0x71,0x0b,0x26,0xbc,0x10,0x33,0x3e,0x79,0x37,0x64,0x85,0x98,0x42,0x21,0xcc,0xff,0x51,0x9a,0xc2 +.byte 0xe0,0x51,0xc3,0xff,0xf2,0x14,0x3d,0xe8,0x89,0x12,0xe7,0xcd,0x58,0x2f,0x87,0xfb,0x4a,0x50,0x6c,0x4d,0xdf,0x6f,0x64,0x9c,0x64,0x93,0x49,0x89,0xb6,0x0d,0x10,0x3f,0x13,0x9d,0x9a,0x35,0xf1,0xc0,0xe7,0xf0,0x9b,0xe8,0x39,0xd3,0x32,0xb2,0x23,0x67,0x77,0xdb,0xbc,0x0d,0x19,0x77,0x7a,0xbe,0x54,0x56,0x64,0xec,0xb6,0x2e,0x03,0xc5 +.byte 0x35,0xda,0xf1,0xc7,0x7d,0x0c,0x5a,0x32,0xec,0x86,0xdf,0xdb,0x94,0x73,0x4e,0xe3,0x45,0xf6,0xb2,0x63,0xc4,0xb7,0x80,0x59,0x4b,0x82,0x0b,0x61,0xa0,0xd5,0x43,0x18,0x78,0x35,0x93,0xde,0x46,0xa3,0xa2,0xd5,0xa2,0x71,0xec,0x3e,0xee,0x7a,0x89,0x7f,0xe9,0x70,0xff,0xad,0xae,0xa3,0x64,0xde,0x61,0xea,0x71,0xc2,0x37,0x98,0x8a,0x33 +.byte 0xd1,0x5f,0x03,0x08,0x23,0x24,0xc7,0x6c,0x62,0x24,0x6d,0x3f,0x44,0x8e,0x7c,0x9f,0x64,0x87,0xa5,0x79,0x0b,0x16,0x7e,0x4e,0xc0,0x0e,0xb8,0x77,0x56,0x9c,0xa5,0x7d,0x2d,0x5d,0x7d,0x81,0x13,0x2c,0x08,0xd5,0x83,0x84,0x38,0xfe,0x50,0x6f,0xa7,0x30,0x1f,0x06,0xee,0xab,0x13,0xc2,0x19,0xe6,0xcf,0x7b,0x85,0xfc,0x31,0x5b,0xdf,0xb8 +.byte 0x0e,0xe8,0x72,0xba,0x97,0x03,0x25,0xbc,0xad,0x74,0x7c,0xe1,0x59,0xf7,0x08,0xc1,0xe3,0x2d,0xb1,0x05,0xe7,0x1f,0xb9,0x0f,0x09,0xcd,0xe6,0x4f,0x5a,0xf6,0xcc,0xea,0xc7,0x92,0x35,0xf5,0xbc,0x3f,0xef,0xc9,0x2b,0xb4,0xd7,0x66,0x50,0xaa,0x80,0xb9,0xaf,0x5d,0x02,0x9c,0x77,0xdf,0xc0,0xc7,0xe2,0xbf,0x7d,0xff,0x69,0x63,0x3e,0x7c +.byte 0x91,0x94,0xae,0xa4,0x0a,0x25,0xa3,0x1f,0xf3,0xc6,0x88,0xda,0x82,0xac,0xbc,0x1f,0x8d,0x53,0xd6,0xfd,0x2b,0x5c,0x33,0x6d,0x03,0x68,0x92,0x38,0x07,0xeb,0x85,0x7f,0x55,0x89,0x17,0x58,0x7f,0xc7,0xb4,0x7a,0xff,0x15,0xe5,0xe0,0xea,0xce,0xac,0x3f,0x0f,0x09,0x25,0xfa,0x80,0xe3,0x07,0x89,0x4e,0xbf,0x7e,0xc2,0x42,0xf1,0x18,0x78 +.byte 0x05,0xe3,0x6a,0x2e,0xf7,0x2e,0xe5,0xbf,0x63,0x9e,0x48,0x69,0xe6,0x3c,0x4b,0x12,0x73,0x58,0xde,0x0c,0x73,0x27,0x9a,0x95,0xfa,0x51,0x8c,0xbb,0x74,0x31,0x53,0x4e,0x9a,0x13,0xda,0x49,0xf0,0x8b,0xb4,0xcd,0xc1,0xe9,0xaf,0xd6,0x59,0x59,0xa8,0x24,0x94,0xd9,0x4b,0xf8,0x20,0x79,0xa0,0x79,0x01,0x08,0x84,0x9b,0x04,0xe7,0xda,0x06 +.byte 0x22,0x3e,0x85,0x23,0x0c,0xa9,0xe5,0xcd,0xd3,0xc4,0x27,0x8c,0x4e,0x75,0xe4,0x60,0xb5,0xe9,0xc5,0xb7,0xb1,0x3a,0x84,0x68,0x40,0x3e,0x36,0x1b,0x9a,0x64,0x50,0x45,0x6f,0xc6,0x58,0x70,0x46,0x1a,0xca,0xf6,0x81,0x02,0xa8,0x17,0x4d,0x92,0x0d,0xae,0x88,0x1a,0xbd,0x52,0xc0,0x32,0xb1,0x2d,0x2d,0x12,0x9c,0x29,0xfa,0xa6,0x70,0x5f +.byte 0xe7,0x0b,0xd5,0x5d,0xa5,0x49,0x9e,0x9e,0x5b,0x55,0xbc,0xce,0x5b,0xb4,0xef,0x3f,0xe4,0x7c,0x50,0xef,0x58,0xf5,0xfe,0xcc,0xf6,0xd0,0xf1,0x3a,0x0b,0xf2,0x3e,0x1c,0xce,0x22,0x7e,0x88,0x1c,0x8f,0x9a,0x69,0x76,0xa9,0xf0,0x18,0xa8,0x76,0x7f,0x0c,0xa6,0xfd,0x67,0x43,0xc7,0x43,0x67,0x98,0x6e,0x37,0xd4,0x82,0x29,0x62,0xa6,0xcf +.byte 0x2b,0x7c,0xee,0x14,0x4d,0x2d,0x1a,0xfc,0xc6,0xaf,0x5b,0xea,0x8a,0xa8,0x9a,0x3b,0xab,0x7d,0x76,0x15,0x50,0xe8,0x95,0x31,0xc8,0x5d,0x5d,0x19,0x68,0x07,0xf5,0xb0,0x29,0x5f,0x79,0x4f,0x0d,0x2b,0xba,0x1d,0xd2,0xf2,0x83,0x50,0x89,0x0b,0x96,0x16,0xde,0x7c,0x04,0xea,0x9c,0x75,0x97,0x7e,0xd7,0x2c,0xee,0x82,0x7c,0xbf,0x0b,0x71 +.byte 0x05,0x59,0xd7,0x11,0x70,0x8e,0x41,0x62,0x91,0x38,0x3a,0x69,0x3f,0x3d,0xde,0x8e,0x03,0x0a,0xea,0xfb,0xea,0x36,0xf0,0x5c,0xb6,0xdf,0x9a,0x66,0x9e,0x64,0x43,0xaf,0xb7,0x83,0xd1,0xef,0x7c,0xb6,0x9b,0x40,0xd8,0x0f,0x0e,0x0b,0xa7,0xd0,0x98,0xca,0x8e,0x3b,0xed,0xb7,0xa5,0x19,0xca,0x67,0x30,0x87,0x17,0x0e,0xc4,0xe1,0xaa,0x6e +.byte 0xdb,0x67,0xbd,0xf5,0xed,0x10,0x68,0xb1,0x43,0x73,0xaa,0x99,0x1a,0x83,0x0d,0x1a,0x5a,0x8b,0xc8,0xff,0xe9,0xe0,0x1c,0x15,0xda,0xb0,0x99,0x90,0xce,0x1f,0xfd,0x17,0xd2,0xfa,0x8f,0x3a,0xe8,0x1b,0xd3,0x96,0x2a,0x0d,0xa9,0x4d,0x6d,0x77,0x53,0xe8,0x8f,0xc7,0x6b,0xb4,0x3b,0x6d,0x0c,0x8e,0x35,0x67,0x09,0x6e,0x43,0x36,0x52,0x3e +.byte 0x0e,0xf6,0x4f,0x16,0x40,0x45,0x7f,0xab,0x39,0xf2,0x23,0xfb,0x4e,0xea,0x6e,0xcf,0xa0,0xb6,0xec,0x6d,0x93,0x1b,0x6f,0x9f,0xd6,0xce,0xcd,0x1e,0x90,0x5c,0x7d,0x61,0xc4,0xae,0x02,0xb2,0x7a,0xb2,0x25,0x59,0xac,0x0a,0xcb,0xc6,0x28,0xa2,0x9c,0x7b,0x4b,0x05,0x5a,0x23,0x55,0xc8,0x9a,0x72,0xe6,0x3b,0x91,0xa2,0x9b,0x12,0x1c,0x1f +.byte 0x4b,0x85,0x42,0x9d,0x73,0xf9,0x50,0x3e,0x12,0xc4,0x51,0xb4,0xe1,0x2a,0x08,0xfc,0xf9,0xc8,0x5a,0x53,0x79,0xcc,0xd1,0x24,0x4c,0xc1,0xf6,0xe7,0x10,0x9d,0xe6,0xce,0xcc,0xc7,0x04,0xf8,0x7a,0xd4,0x2f,0x0a,0x97,0x32,0xaf,0x38,0x77,0x97,0x78,0xc8,0xa9,0x9a,0xca,0x65,0xee,0x2b,0x07,0x0e,0xb1,0xaa,0x3c,0xee,0x03,0x85,0xf7,0x09 +.byte 0xd1,0x03,0xe5,0x4f,0x8a,0x6b,0xba,0x83,0xd2,0x6a,0x05,0xe6,0x4e,0x59,0x21,0x26,0xcc,0x8d,0x4a,0x91,0x21,0x6b,0xe5,0x7a,0x83,0xed,0x4e,0x95,0x4b,0x16,0x98,0x3f,0x2d,0x51,0xc5,0x67,0x56,0x58,0xc9,0xc3,0x32,0xff,0x91,0x9d,0x7f,0x6d,0xc7,0x8a,0x40,0x58,0x56,0x35,0xca,0xc1,0xa9,0x07,0xe2,0xc6,0xe1,0x8f,0x7b,0x7c,0x68,0x4e +.byte 0xde,0x19,0xc8,0x9c,0x41,0x65,0x74,0x33,0xb5,0x5b,0xf7,0x47,0x91,0x51,0x41,0x56,0x54,0xaa,0x8e,0xa5,0x1f,0xdb,0x50,0xa4,0x97,0x7a,0xea,0x86,0x2e,0xfd,0xdd,0x64,0x23,0x6e,0x44,0x28,0xfb,0xae,0xe8,0xc2,0x38,0x96,0x56,0x2e,0xd8,0x7e,0x3a,0xc8,0xc6,0x7f,0x20,0x15,0xad,0x9f,0xfa,0x5c,0x55,0xf5,0xe1,0x9a,0x07,0x84,0x5b,0x81 +.byte 0x39,0x4b,0x70,0xc3,0xfd,0x2b,0xc5,0xb7,0x47,0x36,0x74,0x5a,0x85,0xaa,0x45,0x94,0x8e,0xbe,0x7f,0x6c,0x45,0xf5,0x02,0x4e,0x5f,0x16,0x04,0x7e,0xfa,0xb8,0xa9,0x38,0xc4,0xd9,0xca,0x5f,0x7a,0xe3,0x96,0x78,0x82,0xa0,0xac,0xef,0xc4,0x2a,0xb5,0xf4,0x7d,0x28,0x8c,0x25,0xba,0x4e,0xd5,0xd5,0xd1,0x24,0xc6,0x05,0xb2,0x18,0x2d,0x66 +.byte 0xea,0xe3,0x42,0x79,0x33,0x9e,0x70,0x3a,0x1b,0x5a,0x8e,0xcb,0x03,0xa8,0x43,0xf3,0xd5,0x66,0x41,0x10,0xd7,0x09,0xf0,0x28,0xe5,0x25,0xe6,0xac,0x9a,0xe6,0x34,0x36,0xfb,0xc4,0xa6,0x9a,0xd0,0x24,0x4d,0x18,0xf9,0xd1,0x8e,0xca,0x92,0x83,0x0f,0x55,0x54,0x6d,0x72,0x81,0x81,0xdb,0x72,0x1f,0xd6,0x32,0xb9,0x32,0x45,0x84,0x9c,0x66 +.byte 0x68,0x7e,0xab,0xb3,0xca,0xf5,0x4f,0xdd,0xb4,0xee,0xbb,0x05,0x70,0xbe,0x4f,0xd1,0x27,0x01,0xcc,0x7c,0x4f,0x47,0x55,0xce,0x91,0x73,0x6f,0xff,0x8d,0xfc,0x0c,0x4c,0xaa,0xfc,0xce,0x9f,0xf3,0x4a,0x46,0x92,0x89,0x84,0x8f,0x4d,0x94,0x37,0xda,0xe3,0x11,0x0d,0x63,0x60,0xcb,0x40,0x8f,0xe8,0x0f,0xf9,0xa1,0x89,0x64,0x44,0x45,0x74 +.byte 0xc5,0xa2,0x73,0x33,0x08,0xa2,0x59,0xb0,0xeb,0x7b,0x7b,0xa7,0x28,0x4c,0x13,0x6a,0x04,0x15,0x14,0xd0,0x3e,0x5e,0xec,0xe1,0x3f,0xe5,0x93,0x06,0x6b,0x60,0x50,0x1c,0x90,0xc0,0x5c,0xea,0x7e,0x58,0xf1,0xed,0xba,0x43,0x0b,0x84,0xf7,0xa4,0xbd,0x4c,0xed,0x88,0x5b,0xae,0xa2,0x0a,0xf6,0x06,0xfd,0x43,0x63,0xfe,0x8a,0x03,0x21,0x8b +.byte 0x27,0xc6,0xef,0xa3,0xa9,0x3a,0xc1,0x8b,0x65,0x62,0x25,0x85,0xaa,0x2f,0xff,0x22,0x96,0xb7,0x5c,0x82,0xde,0x21,0x4e,0x0d,0x8d,0xd9,0x7f,0x97,0x79,0x95,0x6c,0xe6,0xfd,0xb1,0x7c,0x84,0xc8,0x73,0xbc,0x50,0x2f,0x87,0x03,0x56,0xcf,0xea,0x7f,0xed,0x17,0x7d,0xf7,0x61,0x6b,0x6f,0x5b,0xd3,0xe4,0x83,0xbd,0x8b,0xd3,0x8e,0x51,0x57 +.byte 0x3d,0xcc,0xe4,0x09,0xb9,0x73,0x1f,0xb4,0x47,0x5e,0xf2,0x10,0x3e,0xf4,0x9c,0x86,0x02,0xdf,0x3e,0x75,0x1c,0x9b,0xb5,0x0f,0x31,0xc6,0xbb,0x00,0xb4,0x8a,0x1a,0xe5,0x0d,0x9c,0x3e,0x93,0x61,0x5a,0x61,0x86,0x12,0x64,0xaa,0xfd,0xa2,0x6e,0x8f,0xcc,0xcd,0x60,0xa1,0xad,0x6d,0xdc,0xa2,0x7b,0x5a,0xe0,0xee,0x27,0x5d,0xc5,0xfe,0x1f +.byte 0x7b,0x9f,0x33,0xf1,0xee,0x2a,0x58,0x39,0x56,0x14,0x4f,0x2f,0x11,0x26,0x6b,0x56,0x7c,0x75,0xb7,0xc3,0xa7,0xf6,0x54,0xd8,0xa7,0xbb,0x73,0xb5,0xa5,0x83,0x1e,0x65,0x7e,0xa7,0x85,0x74,0xa4,0x04,0x0e,0x26,0x01,0x88,0xbc,0x8b,0x98,0x0c,0x9b,0x74,0x22,0x44,0x16,0x16,0xed,0x94,0x81,0x81,0x13,0x26,0xc9,0x27,0xa9,0xa7,0xe0,0x45 +.byte 0x69,0x6e,0x33,0xcc,0xa3,0x15,0x10,0x99,0x84,0x06,0x95,0x00,0xbb,0xc6,0x8e,0x4e,0x37,0x1b,0x23,0xb2,0xf7,0x4d,0xd7,0x24,0x68,0x6b,0xaa,0x2e,0x57,0x8d,0xd6,0x4e,0xa2,0x69,0xd8,0x8d,0x84,0xb2,0x85,0x91,0x30,0xbf,0x41,0xab,0xcf,0x5c,0xa6,0x51,0x1e,0xf5,0x79,0x5a,0x20,0xfa,0x3d,0x0a,0xc5,0xd7,0x3f,0xa6,0xcc,0xf6,0x9b,0x76 +.byte 0xe0,0xec,0x9e,0x0b,0x23,0xe4,0x74,0x36,0x14,0x6f,0x24,0x9d,0xe7,0xb2,0x41,0xd7,0x68,0x37,0x67,0xdc,0x01,0xb1,0x20,0xf9,0x8b,0x0b,0xf5,0xa7,0x95,0x78,0xa0,0x6c,0x4b,0xc0,0x44,0x92,0x4a,0x75,0x0f,0x61,0xde,0xc3,0xc2,0x3d,0x17,0xa0,0x4d,0x57,0x8b,0x11,0x35,0xbd,0x49,0x87,0x05,0xba,0x5d,0x1f,0x76,0xd4,0x0f,0xb0,0x5b,0x5f +.byte 0xb7,0xf8,0xcf,0x12,0x54,0x19,0x9a,0x49,0x6a,0x42,0xad,0x93,0x85,0x0b,0xe7,0x8c,0x30,0x59,0x82,0x82,0x2d,0xd9,0x89,0xf5,0x8c,0x39,0x9c,0xf5,0xcd,0x25,0x22,0x74,0xcf,0x56,0xa2,0x15,0x40,0xa6,0xa8,0xfc,0xdc,0x85,0x9e,0xab,0xd6,0x94,0x5d,0xd6,0x73,0x07,0xed,0x7b,0x76,0x11,0x67,0xf5,0x52,0xac,0x1a,0x69,0x1f,0x4a,0xa2,0xaa +.byte 0x4d,0x11,0xe0,0xc4,0x4c,0x6e,0x9e,0x8e,0x13,0x46,0x0b,0x95,0x40,0x53,0x35,0x53,0x58,0x7f,0x81,0x5f,0x17,0xd7,0x5e,0x53,0x86,0xf3,0x1b,0x70,0xf1,0x95,0x8f,0xf6,0xd4,0x6f,0x55,0x92,0xa2,0x38,0xd3,0x43,0x6c,0x7e,0xa2,0x21,0x5b,0x18,0x11,0xdd,0x03,0x52,0xe6,0xe5,0xc0,0xc5,0x4e,0x8e,0xda,0xdb,0x91,0xcf,0xf7,0x75,0xc2,0x33 +.byte 0x69,0xd1,0xd1,0x29,0x9d,0x51,0x79,0x91,0xe4,0x58,0x05,0xa5,0xf6,0x54,0x16,0x3e,0x42,0xf3,0xc4,0x1f,0x88,0x94,0xfc,0x6b,0x53,0xb1,0xd5,0x17,0xe6,0xab,0x77,0x33,0x8a,0xd0,0x93,0x74,0x02,0xe0,0x81,0x5e,0xbe,0x2f,0x4d,0xcd,0x25,0x0b,0xd0,0x06,0xd8,0xc9,0xf9,0xcf,0x8e,0xf8,0xc3,0xe2,0x33,0x60,0xe5,0xfa,0x89,0x68,0xf8,0xb7 +.byte 0xef,0x9d,0xfc,0x9d,0x76,0x13,0x2d,0x9d,0x18,0x7d,0x05,0xb4,0xa7,0xa3,0x8a,0x91,0xe0,0x73,0x65,0x89,0xb4,0xc1,0x53,0x7c,0xdc,0xf2,0xab,0x39,0x94,0xc7,0x3d,0xf8,0x1c,0x8f,0x49,0x37,0xee,0xc1,0x19,0x84,0x15,0x3b,0x36,0xb2,0xc2,0xe1,0x16,0xe2,0xfb,0xde,0x1f,0x0e,0xa4,0xea,0x59,0x67,0x2d,0xea,0x47,0xe5,0x2c,0xd1,0xb5,0xa9 +.byte 0xbd,0x5c,0x92,0x34,0x8b,0xc5,0xab,0x4f,0x2b,0x6b,0xc4,0x8b,0xdb,0xbb,0xcb,0x86,0x34,0x35,0xa0,0x5c,0x29,0x1a,0x8b,0xce,0xdc,0xd7,0x46,0x2b,0x20,0x9d,0xea,0xa8,0x97,0x68,0x37,0x56,0x03,0x7d,0x4f,0xb6,0xfc,0x30,0x82,0x68,0xb4,0x56,0xf3,0xbe,0x58,0xcc,0x20,0xc1,0x53,0x9f,0xbb,0x0b,0x2b,0x6e,0xa0,0x2d,0xc0,0x61,0x02,0x0b +.byte 0xf9,0x0e,0x55,0xb8,0xb8,0x23,0x6e,0x50,0xc0,0x36,0xb8,0xf6,0x5e,0xb3,0xa7,0x8f,0xf8,0x7f,0xd0,0x5d,0x0a,0xc4,0x2b,0xa9,0xd3,0x76,0xcf,0x4d,0x27,0xda,0xac,0xf3,0xb0,0xca,0x00,0xa0,0x94,0x12,0x20,0x89,0x22,0xa9,0x89,0xe4,0x23,0x71,0xe0,0xdb,0xec,0xb0,0xa9,0x2e,0x45,0xf6,0x8d,0x1e,0x4b,0x0e,0xc7,0xf8,0x40,0xd6,0xf4,0x2f +.byte 0x80,0x3e,0xf8,0xfb,0xcf,0x7b,0x54,0xb5,0xbd,0x55,0xf2,0x37,0x46,0x9f,0x32,0x45,0x87,0xa3,0x6a,0x51,0x25,0x43,0x54,0xa2,0x92,0xc6,0xbe,0xa4,0x33,0x54,0x82,0xc7,0xf1,0xe4,0x52,0xf9,0x09,0xac,0xc3,0xb1,0x25,0x86,0xc7,0x89,0x83,0x2c,0xf6,0x35,0x9e,0xd1,0xd8,0xb1,0x71,0xed,0xfa,0xae,0x09,0x83,0xb3,0xf0,0xde,0x24,0xed,0x3c +.byte 0xc6,0x60,0xe8,0x15,0x49,0x93,0x29,0x82,0xbf,0x1d,0x23,0x17,0x11,0xea,0xa7,0x53,0x83,0xa5,0xc1,0x9e,0x02,0x17,0x08,0x99,0xa6,0x72,0xaf,0x82,0x3f,0x0b,0x69,0xca,0xb8,0x72,0xa9,0x31,0x71,0x20,0x32,0x57,0x89,0x9b,0x16,0x92,0x54,0xc0,0x99,0x6d,0xa4,0xbf,0x5a,0xb5,0x53,0xa7,0x4c,0x69,0xd8,0xf7,0xe7,0x4c,0xc0,0x76,0xb6,0x35 +.byte 0xdd,0xe7,0xb2,0xd9,0x1c,0xd5,0xf7,0x39,0x32,0x44,0x48,0x02,0x85,0x69,0x02,0xad,0xe6,0xfc,0xbb,0x07,0x9e,0x7f,0xee,0x6d,0x07,0x12,0x21,0xeb,0x67,0x4d,0x74,0x90,0x8f,0x79,0x51,0x9d,0x8a,0x63,0x24,0xab,0x6f,0x8f,0x73,0xd3,0x91,0x68,0x15,0xa9,0x6a,0x84,0x92,0xc2,0xd4,0x4d,0xa8,0xe1,0x4f,0xa2,0x1e,0x34,0xa3,0x9a,0x04,0xf2 +.byte 0xfc,0xc4,0xe7,0xd0,0x52,0xc4,0x49,0x51,0x8e,0x7d,0xaa,0x74,0xaa,0x08,0xbe,0x08,0xf6,0xe4,0xc1,0x61,0xff,0x2e,0x9c,0x17,0x61,0xb6,0x01,0x44,0x18,0xe8,0x5e,0xa9,0xfb,0x02,0x21,0xbb,0x08,0x5c,0xe0,0xd3,0x0c,0x98,0xc5,0x93,0x2a,0x1c,0x69,0xf3,0xe8,0x8b,0x36,0xa0,0x9d,0x1e,0xda,0x18,0x14,0x06,0x7f,0x75,0x3d,0x42,0x92,0x5a +.byte 0xb9,0xb7,0xc0,0xc0,0xb0,0xc5,0xa9,0xb2,0x67,0x24,0xc2,0x28,0x29,0xcb,0x78,0x8e,0xf3,0xd1,0x37,0x63,0xca,0xc8,0x9a,0x1b,0x38,0xa5,0x9f,0x0e,0x0d,0x26,0x5b,0xfe,0x2f,0xdf,0x4f,0xb9,0x21,0x8c,0xc8,0xe0,0x9f,0x71,0xb9,0xc3,0x6c,0xd8,0xd3,0x2f,0xe4,0x3c,0x67,0x35,0x45,0x74,0x7f,0xcb,0x13,0xda,0x64,0x47,0xff,0x6f,0x05,0xf0 +.byte 0x87,0x8d,0x0d,0x1f,0x10,0x47,0x0e,0xf6,0x9d,0x89,0x6d,0x79,0x04,0x77,0x8a,0x6c,0xeb,0x7d,0x9b,0xd7,0x65,0x82,0xa8,0x95,0xa2,0x8c,0x02,0x91,0x0d,0xf2,0xe8,0x65,0x60,0x0d,0xb6,0x1d,0xf4,0xf3,0x41,0x75,0x33,0x21,0x13,0x22,0x93,0x01,0x2f,0x11,0xe7,0xed,0x45,0x56,0x90,0xec,0x0b,0x99,0x8e,0x84,0xc8,0x76,0x31,0x1d,0xb9,0xcb +.byte 0x87,0x3f,0x5f,0x39,0xeb,0xe8,0x9e,0x5e,0x96,0x9e,0x42,0x64,0xf3,0xef,0x00,0x1f,0x2a,0x6c,0x18,0x67,0xbd,0xdd,0xf9,0x65,0x11,0x1b,0x9c,0xd7,0xf3,0x3d,0xb2,0x6f,0x88,0xf7,0xd2,0x26,0x06,0xef,0xc8,0x23,0x3f,0x46,0x5d,0xf0,0x96,0x40,0xb1,0xdd,0xad,0xe4,0xee,0xb6,0xc2,0x67,0x18,0x46,0x67,0xc4,0xa5,0x7e,0x3e,0xce,0x72,0x47 +.byte 0xca,0xc3,0xa7,0x94,0x56,0xe2,0x23,0x03,0xcf,0xd0,0x18,0x55,0x30,0xe3,0x14,0x00,0xda,0x0f,0xaa,0x7f,0x20,0xaf,0x3b,0x24,0x43,0x7a,0xaa,0xd4,0x12,0x42,0x10,0xe4,0x44,0x8a,0x7f,0xf1,0x74,0x9d,0xe0,0x28,0x60,0xce,0xdd,0x04,0x96,0x03,0x80,0xcb,0xaa,0xa9,0xb5,0xc7,0xb4,0xbb,0xc7,0x9a,0x93,0xd8,0xff,0x3b,0x8f,0x1f,0xb7,0xce +.byte 0xed,0xbc,0xde,0x9f,0x9e,0x56,0x96,0x65,0xba,0xe7,0x89,0x03,0xb2,0xbd,0xfe,0xa7,0x02,0xeb,0x33,0x9a,0x8b,0x5b,0x36,0x64,0x17,0x9f,0xd2,0xe4,0x75,0xb5,0xfb,0x21,0x03,0xa4,0xe7,0xb4,0x49,0x72,0xfd,0xf3,0x1e,0x5f,0xdb,0xe5,0x6c,0x92,0x51,0xe7,0x91,0x55,0xb7,0x82,0x18,0x05,0xc3,0x2c,0xf1,0x23,0x61,0x36,0xad,0x80,0x1b,0xde +.byte 0xe1,0x51,0x4e,0x51,0xa1,0xf6,0x5a,0xb9,0x03,0x48,0xa7,0x12,0x88,0x63,0x30,0xff,0x48,0xfc,0x92,0x30,0x9a,0xca,0x08,0x1b,0x64,0xa9,0x74,0x2a,0x64,0x42,0x7d,0xa9,0xa4,0x9d,0xcb,0x59,0x71,0x53,0xc1,0xa8,0xa6,0xb5,0x47,0xf9,0x87,0xb5,0x41,0x58,0x92,0x14,0xf7,0xbd,0x10,0x45,0x37,0x20,0x1d,0x5b,0x42,0x04,0xed,0x69,0x4c,0xa5 +.byte 0xdc,0x2a,0x58,0xba,0x00,0x1e,0x05,0x9c,0x3c,0xbf,0x65,0x76,0xd1,0x11,0xe0,0x15,0x22,0xb0,0x2a,0x53,0x32,0x0f,0x6e,0x08,0x4e,0x27,0xc2,0x71,0x14,0x20,0xee,0xb0,0x0b,0x60,0xef,0x54,0xae,0x2c,0xe0,0x1d,0x30,0xac,0x0d,0x3a,0x93,0x15,0x0a,0xe7,0x14,0xf3,0x1a,0x67,0xb1,0x43,0x85,0xbd,0x06,0x53,0xab,0x6d,0x5d,0xe7,0xe3,0x82 +.byte 0xb8,0x39,0x35,0x10,0x87,0xe7,0x90,0x4d,0x9c,0x6f,0x83,0xad,0xa2,0x43,0x7a,0x5d,0xc1,0x8a,0x39,0xa3,0xa6,0xda,0x48,0x5c,0x9b,0xe1,0x0d,0x69,0xfc,0x87,0x18,0xdd,0x34,0x9a,0xb4,0x9c,0x04,0x0d,0x49,0x18,0x3e,0x38,0xd8,0x01,0x67,0xb1,0x7f,0x6b,0xb5,0xfe,0x58,0x1c,0x64,0x11,0x10,0x6b,0xc1,0xca,0x56,0xe3,0x12,0x8c,0xb4,0xac +.byte 0x03,0xbd,0xc1,0x54,0xbe,0x5c,0x70,0x6f,0xdd,0x73,0xa3,0x84,0xcd,0x0b,0x1b,0xbf,0x05,0xac,0x27,0x11,0xe8,0x5f,0xc3,0xb9,0x68,0xc2,0xe9,0x3f,0x5a,0x9b,0x28,0xca,0x65,0x5e,0x66,0x4e,0x50,0xa9,0x81,0xb1,0x10,0xc1,0x2c,0xa5,0x62,0xc8,0x52,0x07,0xa5,0xa1,0x99,0x16,0x7b,0x08,0xa4,0x1e,0xf4,0x50,0x8f,0xb2,0x42,0xa5,0x19,0xa2 +.byte 0x34,0x91,0xcf,0xa7,0x5e,0x73,0x6b,0xc2,0xa3,0x4d,0xdd,0x7c,0x26,0x46,0x34,0xe6,0x5d,0x54,0x52,0xe3,0x1e,0xc1,0x10,0x36,0x7c,0xc9,0xd2,0x1e,0xca,0xeb,0x80,0xc5,0x3c,0x04,0xf6,0xb7,0x09,0xd4,0x3e,0x67,0xc3,0xf6,0x6b,0xd4,0x60,0x00,0xc9,0x68,0x17,0x39,0xbc,0xcd,0x14,0x32,0xfc,0x33,0xa4,0xb0,0x6f,0x12,0x6b,0x5f,0xe2,0x15 +.byte 0x1c,0x9a,0x15,0x4f,0x0b,0x7d,0x4c,0xa0,0x89,0x40,0xb3,0x0e,0x84,0x90,0xb3,0xc6,0x3e,0xa5,0x0b,0x81,0x66,0x14,0x5f,0x8d,0xe0,0xbf,0xf7,0x9d,0xa4,0x4e,0x69,0xd5,0xac,0x0f,0x6c,0x29,0x94,0x8f,0x3b,0x4b,0xed,0x5b,0x6e,0xe1,0x58,0x5d,0x32,0x19,0xe6,0xbd,0xfb,0xd5,0xb7,0x0f,0x72,0x0e,0x5b,0x14,0xd3,0xf3,0x09,0xa8,0xea,0xf7 +.byte 0x98,0x2f,0x42,0x07,0x8e,0x72,0x27,0x53,0x8d,0x0b,0xea,0x74,0x38,0xbc,0xaf,0xb8,0x76,0x65,0x97,0xda,0xa7,0x06,0x37,0x29,0x09,0xbe,0xaa,0xe6,0xf7,0xb6,0xb1,0x5f,0x71,0x1f,0x5d,0x14,0x47,0xdf,0x20,0xa3,0x94,0x93,0x7d,0x21,0xe6,0x22,0x7e,0x38,0x1a,0x26,0x83,0xc7,0x32,0xdf,0x58,0xcd,0xab,0x67,0xae,0x94,0xa5,0x68,0xcb,0xe3 +.byte 0x51,0x70,0xc0,0xc4,0x41,0x9f,0xca,0x05,0xc9,0x51,0x2a,0x8e,0x53,0x89,0x3f,0x52,0x6b,0x29,0x64,0xa8,0xb8,0xdf,0x02,0xb1,0x41,0x4e,0x36,0x42,0x32,0xa8,0xc0,0x91,0xf0,0x69,0x69,0x55,0x99,0xb7,0x78,0x4f,0x79,0x5b,0xc5,0xab,0xc6,0xed,0x15,0x88,0x6b,0x94,0x0a,0xdd,0xea,0x47,0xf9,0x0e,0xb8,0x89,0x15,0x68,0x3e,0xc0,0x50,0xf8 +.byte 0xa1,0x2d,0x2a,0x11,0x8a,0xc5,0xb0,0x09,0x4f,0x7d,0x90,0x5f,0x49,0x35,0xe9,0xdd,0xfc,0xac,0xea,0x1b,0x20,0xad,0xd2,0xe6,0xb6,0xbf,0x3c,0x0e,0x7b,0xdf,0x2f,0x55,0x58,0x0e,0x25,0x53,0x62,0xd3,0x73,0xb8,0x3e,0x12,0x91,0xcb,0x23,0xf2,0xc0,0x5d,0x74,0x2b,0x51,0xcc,0xa2,0xb1,0x5a,0xd2,0xf4,0x9b,0xc9,0xa5,0x83,0x2b,0x5a,0x8a +.byte 0x0b,0xe9,0x09,0x59,0xb5,0x44,0xc9,0x55,0xcc,0xbd,0xb6,0x69,0x66,0x9a,0x0c,0x15,0xae,0x76,0x35,0xbe,0xe9,0x37,0x70,0x9e,0xdc,0x97,0x5a,0x82,0x97,0xf6,0x1a,0x45,0xd7,0x27,0xfe,0x1f,0xc3,0x7c,0x3a,0x52,0x85,0x12,0x73,0x8a,0x8e,0x07,0xec,0x1f,0x59,0x3f,0xb0,0x32,0x07,0x92,0x3e,0x81,0xe0,0x7a,0x9a,0xc9,0x91,0xca,0x84,0xf1 +.byte 0xe1,0x32,0x57,0x0a,0x3c,0x9a,0x20,0xa8,0xbe,0x84,0x91,0x44,0x66,0x81,0xdd,0x12,0xa8,0x46,0x15,0x18,0xfc,0xae,0x5e,0x9a,0xf3,0xd9,0xb9,0x6a,0xbb,0x90,0x1c,0x61,0x7f,0x61,0x2c,0xa7,0x12,0x1e,0x05,0xee,0x0c,0x66,0x9e,0xc2,0xc8,0xb9,0xe0,0xc9,0xc4,0xb9,0xee,0x3a,0x6f,0x97,0x2a,0x5e,0xcb,0xd9,0xff,0xd1,0x37,0x5e,0xa0,0x03 +.byte 0x70,0xc1,0x2f,0x15,0xf9,0xf7,0x90,0xbe,0x23,0xe7,0x7c,0x90,0x4b,0xe4,0x5a,0x01,0x65,0x27,0x2d,0x4b,0xd3,0xa8,0x8c,0x1d,0x2d,0x5d,0x48,0xac,0x6b,0x59,0xc9,0x78,0xb2,0xee,0xda,0x6e,0xa8,0x68,0x08,0x99,0x22,0x25,0xfe,0xc2,0xb8,0x83,0xa8,0x08,0xbb,0x6e,0x64,0xae,0x2e,0xbb,0x93,0xaf,0xdc,0xeb,0xa3,0x11,0xa7,0x5d,0x3f,0x22 +.byte 0xf1,0x95,0x27,0xf6,0xd6,0xa6,0xc3,0x56,0x0a,0xd0,0x17,0x43,0x35,0xd2,0xe7,0xa4,0x8f,0x6c,0x1c,0xc4,0x4d,0xa7,0x3b,0xb8,0x7f,0x0c,0xa0,0xd6,0x56,0x82,0xf4,0x16,0x96,0xcd,0xcf,0x6f,0x78,0xec,0xbb,0xb2,0xdb,0x67,0xcf,0x78,0x0c,0x22,0x1d,0x72,0x21,0x8e,0x40,0x85,0xa5,0x07,0x3b,0x0e,0xfa,0x44,0xb0,0xfe,0xbf,0x54,0x80,0x41 +.byte 0xdc,0xa7,0xc7,0xdb,0xaa,0x04,0x42,0x0d,0x42,0x03,0x17,0xc8,0x57,0xd7,0x08,0x34,0x37,0xf5,0x9a,0x90,0x30,0x43,0x54,0x5b,0x58,0x50,0x4e,0xc4,0x56,0x57,0xff,0xf0,0x05,0x82,0xca,0x2e,0x20,0xb0,0xbd,0xd0,0x00,0x7d,0x60,0x3f,0xdb,0x9c,0x08,0x7e,0x21,0x63,0xbc,0x89,0xbf,0xcb,0xcc,0x36,0xb5,0x36,0x41,0xb4,0x9c,0x5c,0x9d,0xa6 +.byte 0x74,0xa4,0x4f,0x6a,0xcb,0x63,0x51,0xb1,0x92,0xa0,0x03,0x9b,0x88,0x03,0xd5,0x82,0x30,0xfb,0x69,0x49,0x20,0xb0,0x37,0x50,0xe4,0x02,0x9e,0x11,0x09,0x20,0x1a,0x41,0x8d,0xdd,0xa0,0x18,0xb4,0x74,0x04,0x1e,0x3a,0xea,0xb4,0x28,0x01,0x7f,0x0b,0x73,0x27,0x5f,0x76,0x2e,0x71,0xfa,0x50,0x1b,0x43,0x8d,0x0d,0x6c,0x87,0xc3,0x10,0x7b +.byte 0x42,0x7d,0x17,0xa6,0x00,0x5b,0x83,0x6c,0x7b,0x7f,0x72,0xd8,0x90,0x4d,0x7f,0x54,0x72,0x17,0x21,0xe4,0x45,0x74,0x20,0x53,0x30,0x46,0x90,0xbf,0x2f,0xac,0x01,0xbd,0x40,0xa9,0xc5,0xbe,0xbd,0x9b,0x59,0x62,0x03,0x30,0x80,0xe3,0x8e,0x23,0x7b,0x2d,0x63,0x4f,0x30,0xe3,0xb8,0x56,0x87,0x57,0x43,0xdc,0x6a,0x3c,0x13,0xed,0x93,0xc9 +.byte 0x1a,0x1b,0xea,0x38,0x67,0x33,0x7f,0x11,0x5c,0x96,0x20,0x4d,0xf6,0x82,0x51,0x45,0xca,0x20,0xfd,0x59,0xef,0x4c,0xb4,0xb0,0xb2,0x0f,0xdb,0x4c,0x00,0x7a,0x18,0x58,0xb0,0xd3,0x65,0x73,0x42,0xe5,0x05,0x76,0xd7,0xa2,0x1e,0x9f,0x59,0xc0,0xd0,0x76,0x29,0x1b,0x12,0x29,0x9b,0xe4,0x7d,0x45,0x13,0xb4,0x57,0xf2,0x0b,0xd1,0xb5,0x60 +.byte 0x6d,0x15,0x0b,0xca,0x5e,0xe4,0x80,0xda,0x56,0x95,0x41,0x18,0x54,0xa7,0xad,0x40,0xe5,0xd7,0xa7,0x3e,0xf7,0x73,0x40,0x70,0xb3,0x23,0xdb,0x22,0x62,0xc7,0x44,0xfb,0x64,0x18,0x18,0x05,0x84,0x07,0x68,0x06,0x7f,0xb9,0xc3,0xf9,0x55,0xe2,0x0d,0x37,0x51,0x34,0xc3,0x55,0x3c,0x29,0x5d,0x1d,0x27,0x77,0xd3,0xe1,0x6a,0x60,0x9f,0x10 +.byte 0xef,0xb1,0x93,0xbf,0x2a,0xb7,0xe8,0x42,0x4d,0xfd,0xa9,0xa9,0x2f,0xb6,0x07,0x5b,0xe8,0xf7,0xd7,0x10,0x47,0x71,0x56,0xba,0x11,0x11,0x32,0xc4,0x22,0xf4,0x12,0x6f,0xc3,0xef,0x81,0xc5,0x82,0xb4,0x1b,0x99,0xbb,0x1a,0x63,0x6b,0x3a,0x70,0x4f,0xec,0x2c,0xf9,0xde,0x1a,0x2e,0x62,0x27,0x1c,0x81,0x21,0x30,0x08,0x30,0xf6,0xf5,0xc1 +.byte 0x6d,0x0b,0xeb,0x34,0xd9,0x3a,0xa2,0xa2,0xc6,0x17,0x60,0x85,0x65,0x43,0xd6,0x3d,0x71,0xac,0xc2,0xaf,0x2b,0x9e,0x62,0xf2,0x08,0x47,0x6f,0x42,0xa8,0x21,0xad,0x42,0x98,0xa0,0xef,0xdf,0xd8,0xda,0x10,0xad,0xf7,0xe5,0xf9,0x22,0x89,0x44,0xbf,0x86,0x86,0x2b,0x02,0xd1,0x9e,0x8f,0xb7,0x10,0x63,0xb1,0xcc,0x40,0x6b,0xa3,0x8e,0x09 +.byte 0xb8,0xe3,0x77,0x3c,0xde,0x36,0x7a,0xb7,0x78,0x4f,0x99,0x5d,0x9a,0x9e,0x19,0x2d,0xb5,0xd9,0x9c,0x95,0x1f,0xa1,0xcc,0x61,0x31,0x1c,0x96,0xe5,0xca,0xeb,0x26,0x34,0xa4,0x63,0x5c,0x7c,0x0f,0x23,0xd1,0xe1,0x09,0xf4,0xab,0xf6,0x73,0x2f,0x8a,0x62,0xf0,0xd3,0x8c,0x44,0xe5,0xe9,0x9d,0x58,0x71,0xfa,0xf5,0x39,0xa5,0x6f,0xf7,0x04 +.byte 0x43,0x0a,0x78,0x54,0xfb,0xa7,0x66,0x57,0x1f,0x61,0xd6,0xda,0xff,0x4f,0x32,0x9d,0x80,0x6b,0x77,0xed,0xda,0xaf,0xbc,0x9e,0xea,0x77,0x04,0xf3,0x47,0x96,0xd1,0x44,0x8e,0xca,0xfe,0xb0,0xa3,0xa6,0x1d,0x8d,0xa4,0xb5,0x8c,0x35,0x28,0xf3,0xaa,0xab,0x28,0x1e,0xc9,0x94,0x12,0x07,0xc6,0xea,0x23,0xf9,0x69,0xc3,0x14,0x27,0xcc,0x55 +.byte 0x27,0x0b,0x27,0x64,0x23,0x38,0x05,0xd9,0xb4,0xf7,0x00,0xf3,0x02,0xae,0xc8,0x5a,0xbd,0x2f,0x20,0xd5,0x45,0xa6,0x09,0x6f,0x1a,0x09,0xb7,0xe7,0x6f,0xf6,0xa6,0x6f,0xc7,0x03,0x4e,0xa3,0x72,0xb5,0xfc,0x17,0xcf,0x1e,0x64,0x8b,0xc4,0xa2,0xba,0x83,0x0e,0x2a,0x11,0xba,0x71,0xe0,0x1c,0x9f,0x70,0x6e,0xf4,0xd9,0x47,0x31,0xf7,0xaf +.byte 0xf7,0x1a,0xe7,0xc1,0xe9,0x66,0xa4,0x48,0xd4,0x25,0x8b,0xf7,0x6f,0x33,0x72,0xff,0x93,0x2e,0xcd,0xc7,0xae,0x3b,0x71,0x3f,0x84,0x7f,0xe6,0xb5,0x58,0x4f,0x95,0x34,0xe7,0x89,0x10,0xd3,0x2b,0x5c,0x30,0x9b,0xd3,0xef,0x98,0xf3,0x33,0x0e,0x6d,0x5f,0x7e,0xba,0x55,0x7a,0xb6,0xf3,0xb6,0xcd,0xa8,0x10,0x68,0x85,0x6f,0xea,0x54,0xc3 +.byte 0x66,0x51,0x5a,0xfc,0x11,0x83,0x9e,0x68,0x95,0xdb,0xec,0x74,0xf0,0x86,0x4a,0x90,0x24,0x66,0xf2,0x61,0x40,0x2e,0x3b,0x53,0xea,0xc1,0x3e,0x1c,0x69,0xaf,0x5f,0x04,0xb5,0xbd,0x3d,0x44,0x1c,0xc6,0x49,0x65,0xf6,0x78,0xfd,0x69,0x49,0x95,0x96,0xa1,0xa0,0xa9,0x78,0x1a,0xf6,0x0f,0xe9,0x52,0x93,0x9c,0x96,0x6c,0x5e,0x67,0x63,0x2d +.byte 0x18,0x22,0x2a,0xcc,0x7f,0x2f,0xd3,0x72,0x82,0x98,0xae,0xb0,0x2b,0xa6,0x96,0x41,0x25,0x47,0x3c,0x92,0xc5,0x0f,0x2c,0xd4,0x43,0x09,0x0b,0x94,0x73,0x73,0x29,0xc2,0x8a,0xa3,0xcc,0x8d,0xed,0x40,0x6d,0x40,0x18,0x7c,0x32,0x1e,0xe1,0x4e,0x26,0xa7,0xa4,0xd5,0xcb,0xfa,0x90,0xba,0xb2,0x04,0x1d,0x5d,0xbe,0x32,0x6c,0x71,0x09,0x51 +.byte 0xdb,0xe3,0xb0,0xe1,0x34,0x74,0xa3,0x2b,0xf2,0xcb,0x9e,0xc0,0xae,0x88,0x40,0x90,0xb6,0x22,0xc8,0xac,0xff,0x45,0xc6,0xfa,0xce,0x0f,0x03,0x9d,0xc0,0xb2,0x2e,0xdb,0x1e,0x6c,0xa5,0xbe,0xb5,0xb3,0xaa,0xd5,0x2d,0x06,0x4d,0x29,0xa3,0xbe,0x25,0x5f,0x21,0x42,0x8d,0x27,0xaa,0x6f,0x59,0x88,0x61,0x4d,0x72,0x9f,0x64,0xfc,0x07,0xaf +.byte 0xeb,0x02,0x5e,0xb9,0x1f,0xfe,0x1a,0x67,0x10,0x35,0xe9,0x9f,0x5f,0x9c,0x8d,0x4a,0xb3,0x10,0x99,0x8d,0x5b,0x9c,0x8b,0x8a,0x0c,0x02,0x8b,0x44,0x1a,0xaa,0xe7,0x14,0x05,0x3d,0x9e,0x62,0xfc,0x76,0x49,0x56,0x46,0xae,0xcc,0x0e,0x47,0x58,0x4d,0x94,0x33,0x4d,0x23,0x24,0x44,0x52,0x2e,0x18,0xf7,0x53,0x6b,0x24,0x67,0xb8,0x88,0x46 +.byte 0x70,0xc8,0xcb,0x60,0xac,0x70,0x85,0xdd,0x00,0xa1,0x5d,0xbb,0x94,0x07,0x0a,0xb6,0x1c,0x88,0x59,0xa7,0x88,0x7e,0x1e,0xc9,0x1d,0x7c,0xa0,0x1c,0xad,0xe4,0xa5,0x36,0xa5,0x35,0xe8,0xda,0x27,0x15,0xbc,0x7b,0x1e,0x8a,0x33,0x74,0x4b,0xc1,0xc7,0x9d,0xa9,0x21,0x98,0x02,0xe5,0xf4,0x8b,0x8e,0x2d,0x64,0x81,0xea,0xa6,0xbe,0xe2,0x05 +.byte 0x16,0xba,0xac,0x75,0x79,0xa4,0xc0,0xd3,0x9d,0xe0,0x25,0x63,0x22,0xb3,0x9c,0xee,0x04,0x8f,0x60,0xab,0x52,0x43,0x05,0x16,0xd4,0xb3,0x88,0xe8,0x68,0xc3,0x81,0x94,0xc4,0xee,0x13,0xaf,0xdd,0x36,0x23,0xe6,0x78,0xc9,0xf6,0x42,0xf0,0xf7,0x89,0x64,0x79,0x13,0xe8,0xed,0x50,0x03,0x16,0x78,0x6d,0xf4,0xdf,0x85,0x2e,0x4e,0x8f,0x2c +.byte 0x5b,0xfe,0x4c,0xf2,0x49,0xde,0xf2,0xa4,0x96,0xe0,0x8a,0x25,0xc8,0x6d,0x22,0xff,0xab,0xfc,0x18,0xe8,0x7f,0xd5,0xc1,0x7e,0x44,0x8e,0x21,0xb4,0xc8,0x79,0xc0,0x55,0xaa,0xb7,0x28,0xa1,0x3a,0xbd,0xc2,0x1d,0xf8,0x87,0xf9,0x35,0x30,0x25,0xb2,0xaa,0x8f,0x3c,0x0d,0x64,0xf2,0xd1,0xa0,0x51,0xbf,0x9b,0x9a,0x9a,0x9c,0x18,0x43,0xea +.byte 0xd2,0x54,0x50,0xe0,0xca,0x1a,0x29,0x16,0x9f,0x49,0x47,0x56,0x65,0x21,0x0f,0xb0,0x53,0x41,0xe3,0xec,0xe0,0x15,0xcb,0xd0,0x61,0x05,0x67,0xd6,0x02,0x1a,0x31,0x80,0xa4,0x9f,0xf5,0x9b,0x28,0xcd,0x43,0xd5,0x70,0x05,0x67,0xe8,0x76,0xb7,0x99,0x98,0x0a,0xd6,0x27,0xe9,0xfb,0x62,0xff,0x66,0x47,0xf7,0xbe,0x5e,0x35,0xa0,0x3b,0x56 +.byte 0x58,0x78,0x9b,0x9c,0x5b,0x9f,0xf5,0x6b,0x1a,0x6a,0xfd,0x8e,0xe3,0xd9,0xa2,0x8b,0x2e,0xef,0xc7,0xd3,0x74,0xb1,0xea,0x6a,0x03,0x8b,0xe2,0x78,0xbe,0xf1,0x75,0x7f,0x02,0x03,0xbc,0xd3,0x15,0x2c,0x87,0x01,0x95,0xa6,0x87,0x2d,0xf8,0x63,0xfe,0x33,0x8f,0xc5,0xc9,0x0a,0x06,0x79,0x93,0x46,0xd7,0x0b,0x61,0x06,0x68,0xae,0x9b,0x46 +.byte 0x6f,0x9e,0x1b,0x21,0x58,0xc1,0x72,0xa9,0x05,0xa7,0xaa,0x88,0xee,0xed,0x8d,0x7f,0x55,0x3b,0xb8,0xb8,0xf8,0x42,0x26,0x4a,0x78,0xe3,0x17,0xe8,0xac,0xb3,0xdb,0x9b,0x90,0x7d,0x8d,0x65,0x00,0x39,0x40,0xc2,0xe2,0x9c,0xc6,0x16,0x35,0x54,0x64,0x09,0xc8,0xc7,0x08,0x77,0x90,0x9d,0xb4,0xd4,0xe1,0x36,0xd4,0x5e,0x63,0xb0,0xba,0x81 +.byte 0x0c,0x4e,0x24,0x20,0xc0,0x7f,0xfc,0x02,0x3d,0x83,0x60,0x8a,0xf5,0xff,0x87,0x60,0x9c,0xd5,0xc0,0x94,0x64,0xe2,0x3f,0xeb,0x9a,0xe5,0xb6,0x50,0x13,0x36,0xf4,0x96,0x5d,0xf4,0xb5,0xab,0xa4,0x28,0x17,0x38,0x7f,0xca,0xf7,0x0c,0xcf,0xae,0xf8,0xef,0x41,0x6d,0x9c,0xa1,0x53,0x33,0xcb,0x8d,0x21,0xab,0x3a,0x8c,0x72,0x8d,0xf3,0xf2 +.byte 0x05,0x69,0xf5,0xe8,0x6b,0x5b,0x42,0x85,0xb1,0x2e,0x6f,0xf8,0x62,0x00,0x1c,0x48,0x6c,0x85,0x72,0x93,0x34,0x67,0x80,0xe7,0x2a,0xfe,0xcf,0x54,0xc6,0x94,0xf2,0x5a,0x48,0xab,0x40,0x52,0x66,0x7d,0x7a,0x75,0x68,0x77,0xfd,0xb2,0xdd,0xb1,0xdb,0x72,0x50,0x31,0x53,0x24,0xbd,0xb0,0x6e,0x1f,0xbd,0xa6,0x90,0x67,0x07,0x1d,0x31,0xf3 +.byte 0x8c,0x82,0xf7,0x53,0x85,0x54,0x64,0x7c,0x76,0x7b,0x5f,0xaa,0xe0,0xe0,0x36,0xa4,0x13,0xb3,0x0b,0x99,0x09,0xfe,0xed,0xbb,0x81,0x4b,0xb3,0x16,0x45,0x2e,0x3a,0xfe,0x60,0x9c,0xdc,0xcb,0x00,0x5a,0x41,0xc4,0x80,0x3c,0x9d,0x15,0x05,0xfa,0x5e,0x37,0x64,0x89,0x9c,0x2d,0xb8,0xf7,0xbc,0x35,0x8c,0x49,0xfe,0x0a,0x43,0x1a,0x59,0xaf +.byte 0x1e,0x50,0x08,0x0f,0x2d,0xb8,0x5d,0x63,0x7f,0x95,0x6a,0xe6,0xad,0x88,0xc3,0xac,0x05,0x14,0x44,0xb0,0x70,0x83,0x5f,0x94,0x45,0x3d,0xe5,0xbd,0xb8,0x92,0x28,0x20,0xd5,0xa0,0x83,0xd2,0xe2,0x41,0x71,0x27,0x29,0x1b,0x2a,0x3a,0x08,0xca,0x75,0xec,0x16,0x4a,0xcf,0x39,0xed,0xbe,0x2a,0x26,0x9b,0xa3,0x26,0xc6,0x89,0xf2,0xc6,0x8d +.byte 0x49,0x3a,0xfe,0xda,0x16,0x54,0x55,0x7e,0x7f,0x65,0x65,0xd2,0x16,0xdd,0xe2,0xa3,0x86,0x7a,0x69,0x82,0x99,0x58,0x45,0x16,0x4c,0x69,0xff,0x72,0xf2,0xbc,0xbb,0xdd,0xe1,0xb4,0x56,0xcf,0xc0,0x84,0xd6,0x2c,0xd8,0xce,0xf4,0x67,0xd8,0x1d,0xb7,0x77,0x6d,0x96,0xf4,0x28,0x7a,0x33,0x03,0x97,0x72,0x37,0xd9,0x35,0xcf,0x20,0x28,0xc2 +.byte 0xc4,0xea,0xf9,0x99,0x89,0xe0,0xcc,0x3d,0xec,0x2c,0xbf,0x06,0x78,0x91,0x1b,0x55,0x1b,0x51,0x9b,0xbe,0xf7,0x4a,0xf8,0x9f,0x46,0xab,0xee,0x5d,0x4e,0x29,0x36,0xf3,0xb9,0xa7,0x85,0x9b,0xf7,0xa1,0x9e,0x2a,0xbb,0xb3,0x0a,0x61,0xb5,0x0f,0x79,0xf4,0xe2,0xd2,0x2c,0x15,0xf7,0x4f,0xca,0xa9,0x46,0x25,0x1c,0xdc,0xfa,0x0f,0x9e,0xfa +.byte 0xf5,0xb8,0x54,0x7a,0xe3,0x98,0x3c,0x3b,0x85,0xf8,0xb3,0x7c,0x70,0x40,0x86,0x2a,0x66,0xd1,0x4d,0x83,0x38,0xc2,0x24,0x8e,0x30,0xc0,0x9e,0x54,0x4c,0x7a,0x62,0x9a,0x55,0x8e,0x11,0x02,0xef,0x30,0x08,0x5c,0xf3,0x57,0xa7,0xbe,0x32,0x04,0xab,0xb1,0x3a,0x51,0x6e,0xcd,0x6f,0xc1,0xd8,0xd0,0x7d,0x4f,0x1b,0xa9,0x1e,0x12,0x92,0x94 +.byte 0xd7,0x40,0xa9,0x99,0x70,0x06,0xcb,0x46,0xa5,0xe0,0x77,0xbe,0x6d,0x48,0xab,0x67,0x4e,0xa7,0x0e,0xfe,0x1f,0x53,0x24,0xbc,0x89,0xcb,0x70,0xac,0x05,0xa2,0xf4,0xa3,0x44,0xde,0xcb,0x18,0x95,0x78,0x70,0x0f,0x69,0xf0,0x5e,0xbd,0xe7,0xfc,0xd3,0x17,0x3e,0x18,0xb0,0x2f,0xa6,0xfe,0x82,0x81,0xe7,0x74,0x44,0xfb,0x43,0x5e,0xda,0xf4 +.byte 0xfb,0xfe,0x5c,0xb4,0x3c,0x1d,0xea,0x0d,0x2d,0xdb,0xee,0x1f,0xc5,0xbd,0xb2,0xa0,0x52,0x76,0x9e,0xad,0xfa,0x19,0x37,0xb0,0x15,0x53,0x82,0x25,0x86,0xd9,0xce,0x99,0x84,0x67,0x5f,0x57,0xb2,0x6f,0x99,0xa4,0x56,0xb5,0x01,0x4f,0xdf,0xa2,0xca,0x8c,0x23,0x51,0xd3,0xc7,0x72,0x9b,0x90,0x72,0x29,0x0c,0xca,0x86,0xff,0xc3,0xd9,0x9e +.byte 0x87,0xe4,0x8d,0xc6,0xac,0xba,0xfb,0x73,0xa9,0xcd,0x5d,0x16,0xfc,0x12,0xea,0x30,0xd5,0x7d,0x7b,0x16,0xa6,0x2c,0xeb,0x3c,0x3e,0x46,0x7c,0xee,0x03,0xd6,0x7a,0xe8,0x88,0x1c,0x17,0xa9,0x08,0xe9,0xd5,0x38,0x59,0x54,0x0b,0xb0,0x77,0x1b,0x76,0x09,0x53,0xca,0x38,0x12,0xd1,0xb5,0x2c,0xe3,0xd6,0xa0,0xca,0x9f,0x65,0x56,0xea,0x95 +.byte 0xab,0xc1,0xf4,0x98,0xaf,0x1a,0xe7,0x2b,0x1e,0x8d,0x75,0x43,0x43,0x9f,0x42,0x5c,0x2c,0xa5,0xd7,0x9a,0xcd,0xc2,0xab,0xd9,0x1f,0x1f,0xde,0x8a,0x3e,0xf8,0x0f,0x56,0x8a,0x01,0xde,0x47,0x41,0xd8,0xa0,0xc8,0x32,0x4d,0xa3,0x75,0x80,0x87,0xb1,0x1e,0x05,0x06,0x5e,0x2c,0x9a,0x7b,0xd3,0x22,0xe0,0x53,0x8f,0x4f,0x35,0x5f,0x46,0x3a +.byte 0xb2,0xfe,0x62,0x44,0x54,0x38,0xe0,0x03,0x5e,0xda,0xcb,0x86,0xdf,0xda,0x67,0x66,0x40,0x27,0x97,0xf0,0xc2,0xbd,0xce,0xce,0x37,0xeb,0x47,0xe2,0x56,0x7e,0x54,0xe9,0x51,0xda,0xec,0xd5,0xe6,0xc1,0x69,0x6e,0x4c,0x3d,0x92,0xdc,0xa0,0x51,0xe2,0x2b,0xb8,0x96,0xb6,0xce,0xdf,0x35,0xdb,0xd0,0xd4,0x42,0xe3,0x94,0x89,0x09,0x1b,0xb4 +.byte 0xe2,0x8f,0xfb,0x23,0x62,0x35,0x56,0xc7,0x94,0x40,0xd7,0x2d,0xdb,0x80,0xc9,0xbd,0x4d,0xe3,0x14,0x30,0x44,0x43,0xad,0xeb,0x3d,0x89,0xe9,0x61,0xd7,0x80,0x15,0x59,0xcd,0xda,0x38,0x11,0x3b,0x84,0x14,0x85,0xef,0x55,0xf2,0x01,0x2c,0xed,0x74,0xf5,0x71,0x75,0x0c,0x52,0x0c,0x41,0x86,0xbe,0x84,0xc5,0x89,0x8b,0xa5,0x6d,0xc3,0xfa +.byte 0x2b,0xe5,0xe7,0xe8,0xdd,0xf9,0xe8,0x27,0x08,0x5d,0xdf,0x61,0xdc,0xb2,0xe0,0x8c,0xe8,0xda,0xa8,0x68,0x22,0x51,0x6b,0xdf,0xd0,0x92,0x87,0x6a,0x43,0xff,0xd1,0x9d,0x9a,0x4c,0x03,0xdf,0x3e,0xc1,0x31,0x33,0x6e,0x2a,0x55,0xc1,0x58,0x59,0x69,0x66,0x05,0xd1,0xa7,0xa1,0x3b,0x98,0x1d,0x44,0x74,0xc7,0x7e,0xc0,0x07,0xd9,0x9c,0x87 +.byte 0x5f,0xc3,0x44,0x25,0x7b,0x96,0xbc,0x20,0x5d,0x14,0x08,0x34,0xe9,0xad,0x34,0xa3,0xc3,0x95,0x1a,0xc1,0xd1,0x37,0x43,0x49,0x66,0xff,0x39,0x70,0x27,0xa0,0x2b,0x39,0x9d,0x1b,0x78,0x52,0x55,0x77,0x30,0xe8,0x72,0x65,0x8a,0xc8,0xa4,0xe6,0xb7,0xd6,0x66,0x82,0xa7,0x1d,0xde,0x3e,0xc2,0x23,0x5a,0x8b,0x51,0xe4,0x44,0x03,0xf3,0x89 +.byte 0x10,0xb0,0x9a,0x09,0x5d,0xe3,0xe9,0x4a,0x0b,0xe3,0x86,0x58,0xf8,0xe3,0x1a,0x3f,0x7f,0x42,0xa5,0xd7,0xb0,0x24,0xb7,0xbc,0x1d,0x40,0xe7,0x2f,0x42,0x8c,0xa8,0x3c,0x33,0xee,0x9f,0xaf,0xd1,0x51,0x8e,0x34,0x82,0xc5,0x16,0xef,0xb1,0xa6,0xa8,0x0e,0xae,0xe6,0xc3,0x2f,0xb3,0x06,0xd4,0x4c,0xec,0xee,0x9e,0xff,0x88,0x82,0x4b,0xb8 +.byte 0xc5,0xef,0x94,0xe2,0x68,0x48,0x23,0xa2,0xc8,0xe4,0xdb,0x33,0xf9,0xee,0x73,0xc2,0xe6,0xa1,0x64,0xf9,0xf6,0xab,0x5a,0xdc,0xa5,0xb3,0xd8,0xae,0xf4,0x1f,0x47,0xfe,0xa0,0xee,0xf5,0xee,0x41,0x30,0xa6,0xbe,0x34,0x2c,0x1a,0x24,0x8a,0x80,0xb1,0x79,0x7e,0x2c,0xc0,0x65,0x68,0x46,0xae,0x0a,0x01,0x77,0xce,0xa2,0x5f,0xc3,0x00,0x8f +.byte 0xd4,0x0f,0xbe,0xbf,0x81,0x20,0x4e,0xb8,0x21,0x5f,0xfa,0xb2,0xf2,0x02,0x83,0x41,0xa8,0xf1,0xe8,0x2c,0x7e,0x0e,0xe6,0xf0,0x6e,0xd5,0x7b,0xcb,0x4e,0xed,0x06,0xc4,0x18,0xfb,0x0e,0x0d,0x8e,0x22,0x8a,0x40,0x4d,0x66,0xa5,0x0c,0x74,0xf3,0x9e,0xd9,0x90,0xf8,0x71,0xe4,0x92,0x05,0x3d,0x2d,0xa0,0xed,0x42,0x88,0x18,0x9a,0xc7,0xe4 +.byte 0x41,0x5d,0xde,0x44,0x2e,0x26,0x30,0xfe,0x51,0xa8,0x91,0xa3,0xa6,0xfd,0x3e,0x04,0x7f,0x3a,0xa9,0x1c,0x21,0x98,0xab,0xaa,0x39,0x9d,0xe4,0x51,0x75,0xeb,0x90,0x6b,0xab,0x11,0x89,0xa9,0x22,0xa8,0xc5,0x92,0x16,0x51,0xe1,0x77,0x09,0x53,0x7f,0xb6,0x80,0x4b,0xf5,0xf5,0xa2,0x0e,0x36,0x24,0x7f,0xe7,0xcc,0x67,0xfb,0x2c,0x6e,0xc2 +.byte 0x16,0x47,0x41,0xc2,0x77,0xf4,0xcf,0x49,0x37,0x17,0x67,0x34,0x14,0x92,0x7d,0x0f,0x14,0xe8,0x4b,0x4c,0xc3,0xbb,0x78,0xf7,0xa0,0x59,0xbe,0x06,0x10,0x38,0xe6,0x2c,0x08,0x15,0xba,0xc6,0x49,0x38,0x9a,0x91,0x2b,0x4d,0x82,0x42,0x0e,0xe4,0x02,0xef,0x2b,0xa2,0x06,0xcc,0x3a,0x3c,0xb9,0xc5,0xb5,0x71,0x1e,0x17,0x5d,0x65,0x35,0x91 +.byte 0x89,0x54,0x97,0xa8,0x7b,0x02,0x24,0xf9,0xdb,0xb5,0x52,0xf7,0xd0,0xa0,0x42,0x48,0x01,0xf4,0x47,0x7c,0x84,0x7c,0x8a,0xb4,0xf4,0x30,0xec,0xb9,0x21,0x44,0x87,0xb2,0x96,0xa4,0x3b,0x0d,0x93,0x26,0x09,0xc8,0xfa,0x28,0x6f,0x09,0xb7,0x03,0x85,0x66,0x21,0x2d,0xf1,0xaa,0x3f,0x0b,0x59,0x15,0xfe,0x8b,0x2b,0xe0,0x81,0x38,0x63,0x70 +.byte 0x09,0x37,0x38,0x62,0x04,0x8e,0x3f,0x23,0x65,0xf8,0xf7,0xc0,0x30,0xb8,0x04,0xb4,0x17,0xd7,0x21,0xcc,0x8b,0x31,0xd3,0x7b,0x11,0xea,0xc5,0x51,0x01,0x93,0x5f,0xe3,0xf3,0x1e,0x0d,0x41,0x52,0x2a,0xfd,0x27,0x02,0x00,0x58,0x0d,0x1f,0x16,0xd7,0x50,0x09,0xea,0x3f,0x9f,0x72,0xae,0x7a,0x79,0x4b,0x69,0x61,0xfc,0xac,0x5c,0x4d,0x6a +.byte 0x65,0x5d,0xa5,0x67,0x76,0xe4,0x24,0x3f,0xa0,0x6f,0xf6,0x60,0xd2,0x70,0x8e,0x2e,0xbe,0xf9,0x8b,0xab,0x22,0xc8,0x9c,0x5b,0x26,0xc5,0x75,0xeb,0x96,0xa2,0x4f,0xdf,0x6c,0x05,0x9a,0x15,0xef,0xbf,0x3e,0x35,0x6d,0x8d,0x48,0xa4,0x33,0xc2,0xe8,0x3b,0x89,0xe4,0x0c,0xb2,0x9a,0xc6,0x89,0x52,0xba,0xc7,0x2a,0xa5,0xfb,0xe5,0xde,0x06 +.byte 0xbd,0xc3,0x4f,0xe8,0xa9,0x9d,0x36,0xa5,0xcc,0x90,0xcd,0x68,0x49,0x52,0x6e,0x9a,0x85,0xd4,0x1b,0xe5,0x3f,0x54,0xc8,0xb4,0x7a,0x76,0xbf,0xa8,0xf4,0x25,0x05,0xeb,0x43,0x0c,0x2b,0x1c,0x59,0x5b,0x51,0x7f,0xd5,0x13,0x54,0x37,0x44,0x37,0x2f,0x79,0x1c,0x1f,0x18,0x57,0x60,0xab,0xf7,0xcc,0x5d,0xd5,0xdd,0x69,0xab,0x7f,0xc7,0x9d +.byte 0x7f,0xd7,0x6a,0xdc,0x34,0x3d,0x6e,0x2c,0x1e,0xb8,0x74,0xef,0xec,0x14,0x83,0x98,0x20,0x85,0x8a,0x95,0x93,0x26,0xed,0xbb,0x7d,0xfe,0x63,0xaa,0x20,0xbb,0x40,0x7b,0x35,0x1d,0xe5,0x64,0xc0,0x64,0x83,0x90,0x59,0xb4,0xae,0xf7,0xfe,0x14,0xb2,0xaa,0x72,0xf7,0x34,0x61,0xe0,0x61,0x06,0xb3,0xdc,0x09,0x5f,0xe1,0x57,0x65,0x83,0x8a +.byte 0x6d,0x46,0x54,0x8f,0xbf,0x38,0x12,0xf5,0xa3,0xfc,0x7b,0x90,0x4f,0x30,0xed,0xc1,0xab,0xb2,0x6e,0xee,0x7c,0x5e,0x35,0x70,0x80,0xb0,0xae,0x93,0xdc,0x4e,0x8f,0x6c,0x37,0xef,0xc9,0x4c,0x3a,0x41,0x14,0x91,0x99,0x0d,0x48,0xbe,0x5e,0x9b,0xc5,0xa6,0x4d,0x07,0x0d,0xd5,0xe6,0x5d,0x26,0x6b,0xa0,0xf3,0xb2,0x28,0x15,0x57,0xdb,0x7b +.byte 0x8e,0x6b,0x88,0xc3,0x81,0xb6,0x16,0xd1,0x3c,0xd0,0x2d,0x5a,0x23,0x35,0x8e,0xb0,0x8b,0x5c,0x99,0x6a,0x7a,0x55,0xb1,0xf9,0x45,0x97,0x94,0x05,0x6e,0x58,0xd4,0x53,0x8d,0x73,0x43,0x02,0x68,0xdf,0x7c,0x37,0x1a,0x6b,0x71,0x04,0xa0,0x31,0x77,0xbc,0xe0,0x16,0x5a,0x2a,0x9a,0xb2,0x40,0xe4,0xbb,0xd0,0xfd,0x35,0xcb,0x7f,0xf4,0x13 +.byte 0x0f,0xb5,0x93,0x9a,0x7d,0x50,0xf8,0xfe,0x56,0x34,0x83,0x20,0xce,0x3d,0x02,0x2e,0x0b,0x95,0x76,0x88,0x47,0x8c,0x75,0x51,0x14,0x52,0x49,0xbc,0xed,0x66,0x0e,0x81,0x65,0x5e,0x64,0xfb,0x45,0x59,0x3d,0x2b,0xd6,0x3a,0xc6,0xfd,0x50,0xe4,0xeb,0x0c,0x68,0x38,0x0f,0xdd,0xa2,0xdc,0xaa,0x26,0xf5,0x7b,0x40,0x6a,0x90,0xf8,0x08,0x2c +.byte 0xe8,0x8f,0x8e,0xc1,0xf2,0x6b,0x87,0xeb,0x7a,0x02,0x9e,0x26,0x3e,0x6b,0xb9,0x71,0x2e,0x6f,0x26,0x20,0xa9,0xc0,0x7c,0xe5,0x6c,0x6b,0xd4,0xc4,0x7b,0x54,0x8e,0x4a,0x7a,0xef,0xfc,0x03,0x02,0x1d,0x6a,0x16,0x99,0x35,0x12,0x49,0xba,0x86,0x37,0x7a,0xb0,0x8d,0x58,0x6f,0x1c,0xba,0xa9,0x5d,0x93,0xdf,0x98,0x50,0x7e,0xea,0x0a,0x88 +.byte 0x1a,0xd4,0x63,0x91,0x23,0x43,0x43,0x17,0x2e,0xe6,0x04,0x95,0x96,0xa8,0x2b,0xb4,0x9e,0x91,0x6c,0x13,0x52,0x8c,0xbf,0x7d,0x50,0xfc,0x79,0xef,0xa1,0x3e,0x90,0xba,0xac,0xd1,0x0d,0xb0,0x4d,0xd5,0x7a,0xc7,0xbd,0x82,0xb7,0x03,0x9c,0x0b,0xbc,0xa7,0x3c,0x05,0x8f,0xbd,0x0d,0x7f,0x80,0xeb,0xe9,0xbd,0x8f,0xdc,0xcd,0x86,0x23,0x26 +.byte 0xb0,0xa4,0xdc,0x63,0xef,0xad,0x61,0x53,0x7e,0x23,0x34,0x0d,0xd9,0x75,0x7c,0xa7,0x57,0xba,0x28,0x0c,0x82,0x7f,0x68,0xe5,0x24,0xdc,0x23,0x99,0xcd,0x6f,0x03,0x59,0x4f,0x35,0x47,0xc4,0x11,0xc0,0x0c,0x2b,0x16,0x94,0xb8,0x28,0xf2,0x0a,0x91,0x2e,0x1c,0xde,0x75,0x50,0x52,0x00,0x0a,0x92,0x80,0xca,0x39,0x3a,0xdf,0x16,0xb7,0xe2 +.byte 0xbd,0x98,0x7b,0x70,0x48,0x85,0x6d,0x48,0xa0,0x1b,0x0a,0xbb,0xa8,0xb6,0xca,0x9c,0x4e,0xda,0x0a,0x17,0x0b,0x30,0xf5,0xa2,0x9b,0x5a,0x89,0xf4,0x53,0x89,0x38,0x34,0x2b,0x7d,0x14,0x04,0x44,0xa3,0x8f,0x70,0x29,0xa5,0x3e,0xdd,0x5a,0x61,0xa1,0x04,0xac,0xd8,0xd3,0xec,0x42,0xc4,0xd9,0x2c,0x13,0x80,0xf8,0xc9,0xec,0x54,0xa7,0xa0 +.byte 0xe6,0x37,0x04,0x38,0x5f,0x1e,0x0b,0xfb,0x38,0x06,0xb9,0xe2,0x05,0x12,0x12,0xa2,0x28,0xff,0x12,0xae,0x44,0xd8,0x0d,0x2c,0x5a,0x8f,0xfb,0x1d,0x98,0x69,0x85,0x69,0x99,0xc0,0x63,0xc5,0x88,0xa7,0x2d,0x56,0x76,0x32,0x23,0x4c,0xf7,0x29,0xd6,0x3e,0x45,0xfa,0xd7,0x61,0xf4,0x9a,0xa6,0x9e,0x4a,0xe7,0xe7,0xf9,0xbf,0x1f,0x09,0x82 +.byte 0xbe,0x36,0xa0,0xdd,0x91,0x47,0x3b,0xbc,0x52,0xf2,0xc2,0x04,0x96,0x85,0xb6,0x93,0xac,0x99,0x94,0xbe,0xfd,0xe6,0x53,0x9f,0x75,0xab,0x38,0xdd,0x81,0xc0,0x79,0x25,0xcd,0x73,0x72,0x5b,0x4d,0xc0,0xba,0xa9,0x18,0xaa,0x76,0x51,0x15,0xef,0xb9,0x22,0xdd,0x5f,0x22,0x62,0x6c,0x36,0xf6,0xc0,0x72,0x34,0x01,0x7a,0xaf,0xe2,0x87,0x1b +.byte 0x5f,0x33,0x9c,0xd5,0xe2,0x81,0x03,0xbe,0x4e,0xac,0xcc,0x17,0xc5,0xc6,0xf8,0x0f,0x24,0xe0,0x26,0x56,0x8a,0x20,0x2e,0xe4,0x05,0xc8,0x0f,0x89,0x24,0x0e,0xd4,0xb7,0x07,0xd1,0x99,0x8c,0x55,0xfd,0x75,0xc1,0xdb,0xaa,0xd1,0xd2,0xa6,0xf2,0xf0,0x3c,0xae,0x62,0x0e,0x1f,0xaa,0xc9,0xa5,0x16,0x09,0x2c,0xc0,0x61,0x55,0x72,0x70,0x63 +.byte 0x22,0xb6,0x41,0xa5,0x08,0x34,0x6a,0x1b,0xfc,0x42,0x81,0xe7,0x25,0x98,0xcf,0xba,0x18,0xb0,0x36,0x90,0x72,0x65,0x75,0xf3,0x57,0x68,0xd0,0x86,0xe4,0xaf,0x33,0xb6,0x2b,0xef,0x96,0x97,0x17,0x42,0x6b,0x8e,0x19,0xaa,0x4b,0x9d,0xc7,0x73,0x34,0x5f,0x41,0x24,0x12,0xfb,0x66,0xa2,0x1e,0x91,0x41,0xc2,0x78,0x08,0x66,0xc4,0xb2,0x86 +.byte 0x67,0x70,0xe6,0x96,0x76,0x8d,0xa4,0x69,0x6f,0xe5,0x35,0x8b,0x20,0x3d,0x6a,0xcb,0x65,0x7b,0x82,0x7b,0xf6,0x2d,0xd8,0xd0,0xda,0x69,0x8b,0xcd,0xdf,0x15,0xf6,0x3a,0x2c,0xfe,0xc7,0x84,0x20,0x11,0xcc,0x18,0x4f,0xc7,0x2e,0x1c,0x46,0x41,0x6b,0x91,0x79,0xa0,0xbb,0xf4,0x48,0xd7,0x0c,0x9a,0x88,0x01,0xda,0xa1,0xd1,0x8f,0x27,0x49 +.byte 0x9d,0xa0,0x3f,0x5a,0xc2,0xf7,0x26,0x9b,0xe5,0xff,0xa4,0xcb,0x86,0x32,0xb3,0x3c,0xd5,0xe5,0x7c,0xbb,0x5e,0xfe,0x3d,0xcf,0x60,0x1c,0x16,0x8e,0x0c,0xc4,0xa9,0xf2,0xb2,0x42,0x1d,0x13,0xb0,0xa8,0xff,0x90,0xbc,0xd9,0x9a,0x6d,0x78,0x7a,0x46,0x1a,0xa8,0x35,0x4e,0xa4,0x79,0xd5,0xb4,0x36,0x47,0x62,0x3c,0x0e,0x23,0x56,0xca,0xa2 +.byte 0x60,0xe6,0xca,0xf6,0xc3,0xd6,0x7c,0x5d,0x54,0x9c,0x0c,0xfa,0x9a,0x0f,0x3a,0x8c,0x64,0x52,0xdb,0x62,0x5e,0x93,0x82,0xef,0x9e,0x8d,0x30,0xa5,0xe7,0x3d,0x52,0x11,0xd4,0x93,0xb1,0x77,0x8f,0xee,0x54,0x9c,0x80,0x47,0xa9,0x21,0xa8,0xf7,0x16,0x4b,0xbb,0xab,0x75,0x52,0xed,0x0c,0x85,0xf8,0x04,0xf4,0x80,0x08,0x4a,0xb5,0x2d,0x2d +.byte 0xd8,0x98,0x57,0x24,0xd5,0xc8,0x77,0xa0,0xd8,0xb5,0xb1,0x83,0x92,0xb4,0xc7,0x42,0x36,0xd1,0xa5,0xd6,0xbd,0x89,0xc6,0x76,0x31,0x92,0x31,0x67,0x2c,0xa4,0xb2,0x2b,0xcf,0x94,0x20,0x6a,0x17,0x63,0xb9,0x76,0xac,0x9c,0x1c,0x95,0x3e,0x57,0xf8,0x87,0x0d,0xef,0x36,0xcd,0x87,0xd1,0x58,0x2c,0x9a,0x5e,0x54,0x0e,0xac,0x97,0xbd,0x15 +.byte 0xc4,0xdb,0xea,0xd3,0x21,0x05,0x2d,0x78,0xce,0x4c,0x60,0xf3,0xf8,0xeb,0xd9,0x19,0x89,0xb0,0x83,0xc0,0xe4,0x42,0x08,0x5c,0x1a,0x1c,0x53,0xf3,0x1e,0x5a,0x28,0x92,0x0d,0x32,0xbe,0x4a,0x9a,0x70,0x78,0x93,0xc1,0x66,0x81,0xda,0xe7,0x3d,0x05,0xc5,0xaa,0xdc,0x51,0x6b,0xaf,0x67,0x4d,0x18,0xfe,0x29,0xe0,0xfa,0x5c,0xe5,0x9a,0x18 +.byte 0x7f,0x8f,0xaa,0x21,0xa5,0xd0,0x8b,0x62,0x32,0x6b,0x93,0x02,0x19,0x62,0xd3,0xd6,0x74,0xea,0x83,0xdb,0x6c,0x57,0xe3,0x1f,0x1f,0x90,0xd0,0x22,0xf7,0x9a,0x4a,0x14,0xf4,0x8a,0xb3,0x86,0xa5,0x4c,0x1e,0xdf,0x49,0xa5,0x78,0x30,0x5e,0xf0,0x9a,0x69,0x0d,0xaa,0xe9,0x47,0x01,0xae,0x51,0xcf,0x32,0x4c,0xec,0x03,0x08,0xe7,0xcb,0x35 +.byte 0x59,0xd2,0x48,0xd4,0xfa,0x6a,0x45,0x6b,0x66,0x1f,0xb8,0x1e,0x45,0x85,0xef,0x14,0x25,0x34,0x48,0x50,0x59,0xf3,0x76,0x09,0x32,0xf5,0xe4,0xa8,0x98,0xb0,0x9a,0x70,0xec,0x0a,0x17,0x87,0xcf,0x6d,0x96,0x7d,0x50,0x5e,0x3a,0xff,0x57,0xa7,0xaf,0x04,0x0d,0xdc,0xcc,0xad,0xe3,0x09,0xd3,0x92,0xab,0xd8,0x3a,0x61,0x1f,0x9c,0xc4,0x36 +.byte 0x3b,0xf3,0xf6,0x87,0x43,0xea,0xc8,0xff,0x29,0x19,0x9e,0x87,0x44,0xc7,0xe5,0x5c,0x43,0x30,0x9a,0xb2,0xd8,0x47,0x4a,0x87,0xcc,0xc7,0x8e,0x99,0x32,0xdd,0x3c,0x37,0xda,0xa0,0x39,0x04,0x55,0xca,0xcf,0x2f,0xce,0x8b,0x22,0x35,0x2c,0x29,0x89,0xef,0x5c,0x05,0x82,0x55,0xf3,0x8d,0x64,0x7f,0x69,0xf7,0x3d,0x43,0x27,0xf3,0x4c,0xd7 +.byte 0x43,0x89,0x47,0xd5,0x0b,0x01,0x1b,0x17,0x6c,0x7e,0x63,0x18,0x87,0x8b,0x8f,0x20,0x0d,0xa4,0x1e,0xa5,0x3b,0xf1,0x5c,0xe5,0xc8,0x23,0xd4,0xee,0x79,0x3e,0xd1,0xbc,0x83,0x30,0x03,0x64,0x80,0x7e,0xda,0x13,0x7c,0x52,0x88,0xc1,0x7c,0xa7,0x8a,0x5d,0x8d,0x7b,0x57,0x4e,0x59,0x97,0x83,0x52,0x03,0x04,0x6b,0xd2,0xf3,0xff,0x1c,0x4e +.byte 0x3b,0xae,0x70,0x61,0x3b,0x8b,0xaf,0x56,0x3d,0x28,0x73,0x24,0x39,0x4b,0xb8,0x6e,0x89,0x28,0xe6,0xc8,0x5c,0xe9,0xf8,0xec,0x8f,0xf7,0x75,0x1a,0x13,0xc1,0x8e,0x53,0x4e,0xe5,0xef,0x37,0xce,0xa1,0x54,0xca,0xcc,0xf5,0x01,0x29,0x2a,0x8f,0x00,0x1c,0xde,0xcd,0x5e,0x24,0x0b,0xa5,0x94,0x0c,0x8a,0xab,0x54,0x1e,0x80,0x2a,0x0d,0x84 +.byte 0x38,0x4c,0x17,0xea,0x84,0x07,0x9c,0xbd,0x85,0xd8,0x1b,0x57,0x6a,0xde,0xb3,0x86,0xa3,0xf8,0x6d,0x03,0x3e,0xf1,0x37,0xae,0x7d,0x02,0x33,0xc5,0x7b,0xf6,0x64,0xdb,0x3e,0xb0,0x48,0xda,0x49,0xec,0x89,0xb4,0x83,0xff,0xe1,0x6f,0x9a,0x7e,0x0a,0xda,0x6e,0xec,0x70,0x0b,0x51,0xac,0x82,0xac,0xb8,0xce,0x16,0xe7,0x47,0xab,0xe8,0xc7 +.byte 0x56,0xd1,0xab,0x73,0x72,0x5c,0xe7,0x9e,0xb8,0x77,0xa7,0xc1,0x47,0x9c,0x4e,0x16,0x68,0xce,0x21,0x23,0x2d,0x6c,0xcf,0x79,0xd6,0xd4,0xdf,0x74,0x30,0xb8,0x0f,0x60,0xea,0xbf,0x39,0x77,0x45,0xdc,0xaf,0x25,0xbd,0xc5,0x8d,0x0b,0x44,0x21,0xc1,0xc1,0x2e,0x54,0x2a,0x32,0x6c,0xea,0x51,0xe0,0x7d,0xa8,0x09,0x94,0x2f,0x4e,0xfe,0x27 +.byte 0xe8,0x63,0xfb,0x71,0xca,0x01,0x7d,0xc9,0x70,0xd8,0xe4,0x82,0xbf,0x3f,0xea,0x64,0x5e,0xa9,0x84,0x1d,0x2c,0xfd,0x8a,0x7d,0x33,0x73,0x5c,0x82,0xbe,0x9e,0x46,0xfc,0x39,0x5e,0x38,0x2a,0x20,0xd9,0xa9,0x20,0x46,0x23,0xc1,0x8b,0x0a,0x9c,0x42,0xb6,0x50,0x9f,0xc8,0x7d,0x4a,0x85,0x98,0xed,0x92,0x13,0xd3,0xd6,0xe6,0x6d,0x50,0x6e +.byte 0x93,0x63,0x41,0xa3,0x63,0x97,0x52,0xe3,0xaf,0x09,0xe1,0x40,0x12,0x41,0xed,0xb3,0xc5,0xb8,0x9f,0xc1,0xf2,0xd2,0xe6,0x16,0x94,0x97,0xdb,0xae,0xdb,0xd4,0x1f,0x5a,0x2f,0xf1,0xb1,0x22,0xf6,0x60,0xa4,0x0e,0xd8,0x2f,0xf7,0xf7,0x3f,0x6c,0x7d,0x73,0xe3,0x1d,0x99,0x04,0x7f,0x4f,0x70,0x2a,0x8c,0x43,0x80,0xa3,0xd0,0x25,0x75,0xd8 +.byte 0xb6,0xc8,0x90,0xa2,0x26,0xee,0xba,0xc5,0x1a,0xdc,0x1f,0x81,0x65,0x54,0xc6,0x57,0x6e,0xa2,0x03,0x32,0xf5,0x14,0xb2,0xdd,0x4d,0x21,0xaa,0xb9,0x78,0x4f,0x76,0xab,0xbe,0xfe,0x5d,0xc6,0xaf,0xed,0x6f,0xf9,0xaa,0x31,0x21,0x08,0xa4,0x6e,0xfb,0x78,0xdc,0xed,0x0c,0x05,0xff,0x1e,0x60,0x38,0x60,0x94,0xa9,0x92,0xa7,0x07,0x6e,0x6f +.byte 0x6d,0x89,0x8a,0x73,0xfb,0xaf,0x01,0x34,0x7d,0x7d,0x33,0x76,0xff,0x1f,0x6b,0x79,0x5e,0xff,0x50,0x14,0x80,0x7d,0x55,0x0e,0x2d,0xc3,0x77,0x85,0x30,0x20,0xf6,0xc8,0xc7,0xb7,0x73,0x1b,0xd1,0x87,0x69,0x44,0xeb,0x02,0x5e,0x45,0x66,0x6f,0x28,0x00,0x1f,0xf8,0x58,0x93,0xe5,0x21,0xbc,0x19,0x8d,0x72,0x19,0xaa,0x9a,0xbb,0xc6,0x47 +.byte 0xe6,0x0b,0xe4,0x76,0x13,0xc7,0xc4,0x1b,0x9d,0x85,0xba,0x17,0xb6,0x30,0x2a,0xdb,0x7c,0x36,0xd7,0xd8,0x8b,0x9c,0x99,0x92,0x64,0x03,0x4f,0xd4,0x1f,0x04,0x2e,0x45,0x34,0x55,0x92,0x99,0x77,0xb8,0x45,0xce,0x59,0x22,0x3c,0x6e,0xe5,0x18,0xb0,0x83,0x42,0x42,0x75,0x1c,0x34,0x0f,0x2e,0x59,0x06,0x94,0x17,0xea,0xc3,0xdb,0x0b,0x2f +.byte 0x44,0x97,0x54,0xe8,0x76,0xd3,0x25,0x24,0xe9,0x21,0x4f,0xd7,0x01,0x7d,0xbe,0x90,0x8a,0x0a,0x7d,0x4e,0x91,0x5f,0x4c,0x32,0x83,0x42,0x55,0x95,0x3c,0x7a,0x3e,0x46,0x8a,0x5d,0x0c,0x05,0xcd,0x0b,0xf6,0x3e,0x4d,0xf3,0x55,0xea,0x42,0x3e,0x19,0x0e,0xda,0xd4,0x22,0x88,0xe2,0x29,0x06,0x9e,0xea,0x1c,0x27,0x96,0x7f,0x3a,0x8a,0x28 +.byte 0x2f,0x7d,0xa2,0x65,0x37,0xae,0xb6,0x6a,0x59,0x41,0x19,0x73,0x91,0x64,0x77,0x4e,0x5a,0x1a,0x85,0x9f,0xc5,0xb0,0x85,0xc1,0x96,0x47,0x69,0x9c,0x36,0x70,0x36,0xa3,0x2e,0x1a,0x7d,0x11,0x59,0x55,0xec,0x4c,0x49,0xa1,0x86,0x3c,0x3d,0x24,0xb8,0x7a,0x84,0xca,0x4c,0x3f,0x7e,0x81,0x95,0x39,0x41,0xfe,0xc4,0x74,0xe5,0x89,0x7e,0xdc +.byte 0x86,0xd2,0xdb,0x8b,0xb8,0xa2,0xbb,0x15,0x64,0x89,0xf9,0x00,0x7d,0x56,0xec,0x8b,0xc8,0x05,0xcd,0x76,0x6c,0xcb,0xaf,0x7e,0xd2,0xdd,0x67,0xb3,0x99,0x16,0x63,0xf2,0x6d,0x49,0x7d,0xeb,0x67,0x24,0x98,0xf1,0x28,0xa3,0xb2,0x14,0xfc,0x95,0xf6,0x55,0xa0,0xb5,0x8c,0x26,0x2f,0xc6,0x08,0x49,0x57,0x4c,0x20,0xbc,0x48,0xab,0x24,0xef +.byte 0xe9,0xab,0x6b,0x77,0x4d,0x3b,0x61,0x84,0x68,0x67,0x72,0xc2,0xcf,0xab,0x8e,0xac,0x39,0xec,0x43,0x03,0xbb,0x4f,0x32,0x7d,0x7d,0x51,0x69,0x30,0xee,0x4f,0xd0,0xb9,0xa5,0x22,0xdd,0x47,0x06,0xad,0xac,0x62,0x20,0xff,0x7b,0x8c,0x90,0x91,0xb3,0xd8,0x89,0xd3,0xea,0x81,0xdc,0xca,0x31,0xc3,0x65,0xca,0x4c,0x50,0x0a,0x85,0xf7,0xaf +.byte 0xe3,0x67,0x57,0x53,0x1d,0x4e,0x42,0x17,0x2d,0x14,0x80,0x29,0x09,0x2b,0x48,0x45,0x43,0xb9,0xad,0x1f,0xb7,0x2d,0xab,0xfa,0x6a,0x1b,0x3c,0x7d,0x76,0xd7,0x36,0x20,0xb0,0xd3,0xc0,0x5e,0xc7,0x20,0x06,0x0c,0xa9,0x6a,0xb2,0x67,0xad,0x91,0x49,0xfc,0x4d,0xb2,0x15,0x61,0x61,0xfa,0x33,0x6c,0x94,0x92,0x58,0xef,0x46,0x82,0x9c,0x04 +.byte 0x52,0x21,0x28,0x08,0xb4,0xa9,0xd4,0x2e,0xd9,0x8c,0x93,0xd0,0xd8,0x4f,0x33,0x1d,0x0b,0x7e,0x07,0x12,0x40,0x64,0x3d,0xa2,0x8f,0xa3,0x96,0x45,0x0e,0xfc,0x9b,0x55,0x5f,0x3c,0xa2,0x57,0x3e,0x51,0x40,0x69,0xdc,0x7a,0x51,0xd2,0x3b,0x79,0x2f,0xd2,0x01,0x18,0xbf,0xd5,0xd2,0xd1,0x0e,0x08,0xcf,0xac,0x07,0x4d,0xd1,0x92,0xc7,0xca +.byte 0x92,0x75,0x0b,0x80,0x29,0xf1,0x46,0x24,0xba,0x47,0x6b,0x4a,0x64,0xfb,0x31,0x69,0xe9,0x40,0x0d,0x69,0x50,0xd0,0xdf,0xf8,0xcb,0x6a,0xe8,0xd4,0xc2,0xbd,0x0b,0x23,0x00,0xe0,0x29,0x0a,0x0a,0x8e,0x19,0xec,0xa9,0x14,0xe4,0x5d,0x4c,0x30,0xc9,0x85,0x42,0xd6,0x9f,0x83,0x8f,0x2a,0x5b,0x22,0x37,0xe4,0x71,0x3b,0x19,0x86,0xd4,0xda +.byte 0xb5,0x81,0x8e,0x84,0x57,0xcd,0x13,0x64,0xc3,0x23,0xfd,0x91,0x8a,0xe4,0xb9,0x32,0x12,0x17,0x02,0xa6,0x8d,0xec,0x44,0x9d,0xa5,0x7c,0x96,0x14,0xd1,0xd5,0x93,0x02,0x0c,0x9d,0xfc,0x26,0xa0,0xd2,0x41,0xaa,0x75,0xe8,0x82,0x6f,0x47,0x1d,0xe8,0xcf,0x94,0xe3,0x35,0xa9,0x76,0x1e,0xdb,0x92,0x5f,0x32,0x49,0xf4,0xd5,0x59,0x9c,0x4e +.byte 0xf7,0x89,0xda,0x23,0x7f,0x46,0x0e,0xfc,0xaf,0x1c,0x6f,0xcc,0x59,0xa5,0x43,0x04,0xbf,0x55,0xab,0x7d,0x36,0xa3,0xa5,0x03,0x7f,0xdf,0x33,0x6c,0x6d,0xd0,0x53,0xaa,0xef,0x54,0xc1,0x62,0xa0,0xd6,0x3a,0x67,0x87,0xe3,0x76,0x17,0x45,0xbe,0x7f,0x55,0xc8,0x8b,0xe8,0x1c,0xa8,0xe6,0xa6,0xb2,0xbf,0xe5,0x45,0xc0,0x88,0x22,0x36,0xa0 +.byte 0xec,0x21,0xdc,0x3e,0x6b,0xd2,0xc7,0xdf,0x5b,0xa4,0x32,0x28,0xca,0x23,0xe1,0x50,0x55,0x72,0x59,0x28,0x1c,0xf7,0x93,0x91,0x07,0x3c,0x4e,0x81,0x20,0x58,0x9b,0x07,0x38,0x37,0x68,0x2c,0x29,0xba,0x20,0x11,0xa9,0xa0,0x29,0x65,0x57,0xb1,0xe3,0xb1,0xfb,0xe2,0x70,0xee,0x1f,0xcd,0xf5,0x61,0xea,0x7a,0x08,0xb4,0x1e,0xfe,0xe7,0x4d +.byte 0x32,0xa0,0xfd,0xb4,0x52,0xa1,0x4b,0x67,0xba,0x5e,0x90,0xe7,0x56,0xec,0x06,0x03,0xb6,0xe6,0xc6,0x98,0xa1,0x41,0xf4,0xaf,0xde,0xe2,0x67,0xef,0xaa,0x05,0x97,0xc5,0x80,0x32,0xd0,0x43,0xc2,0x02,0x7a,0xcc,0x4c,0xdd,0xe9,0x1e,0xd0,0x4f,0xad,0xf3,0x4b,0x2c,0x5e,0xb8,0xd8,0x84,0xc2,0x43,0xc7,0xa9,0x86,0x4d,0x10,0xae,0xb7,0xe3 +.byte 0x5c,0xd5,0x2a,0xba,0x3b,0xd3,0x7b,0x5d,0xc8,0xe0,0x67,0x87,0xbe,0xbf,0x71,0x4e,0x22,0x68,0x12,0x53,0x95,0x73,0x5c,0x30,0x7b,0x2b,0xfd,0xc1,0x3c,0xfc,0xc4,0x0f,0xdd,0x5b,0x3e,0x1b,0x72,0x71,0xa6,0xe3,0x1f,0x2d,0x51,0xe2,0x61,0x3d,0xa0,0x60,0xc2,0x6b,0x41,0x8f,0x94,0x83,0x29,0xa3,0xb6,0xa7,0xc7,0x11,0x8f,0x1c,0xb5,0x19 +.byte 0x66,0x44,0xc7,0x05,0x58,0x83,0x28,0x69,0x0c,0xb6,0x65,0xe5,0x93,0x1c,0xb1,0xf6,0xf9,0xea,0xda,0x84,0x26,0x8e,0xa2,0xbb,0x9b,0x55,0xd3,0xbc,0x42,0x56,0x8f,0xce,0x6e,0x74,0x40,0xf2,0x02,0xa6,0x22,0x22,0x6e,0x20,0x0e,0x4b,0x8b,0x15,0xa5,0x04,0xf0,0xe0,0x7b,0x27,0x0a,0x38,0xe3,0x99,0x04,0xd0,0x5b,0x64,0xd2,0x04,0x92,0x61 +.byte 0x57,0x74,0xbc,0x1e,0x98,0x01,0x4b,0x2f,0x46,0x56,0x1c,0xeb,0x49,0x2d,0x66,0xac,0x85,0x96,0x48,0xfd,0xa1,0xf0,0xf5,0xc0,0xdb,0x7a,0xf2,0x0b,0x57,0x86,0xac,0x4c,0x6a,0x02,0x97,0x13,0xef,0x08,0xf6,0x18,0xe1,0x5c,0xb3,0x18,0x3d,0x70,0xc0,0x76,0x5e,0xd0,0xb8,0x44,0x32,0x25,0x75,0x62,0xa2,0x80,0x78,0x8c,0xc4,0x2a,0x84,0xbc +.byte 0x51,0xd4,0xee,0x44,0x48,0xe5,0xc4,0x48,0xbf,0xc0,0x27,0xc1,0x77,0x25,0xf5,0x59,0x6b,0x60,0xae,0xa5,0x42,0xfe,0xc3,0x06,0x91,0xe3,0xdb,0xa9,0x4b,0xe2,0x73,0x95,0x1f,0xf6,0xb6,0x66,0x71,0x63,0xb3,0x14,0x4a,0x3d,0x36,0x84,0xbe,0x2a,0x7c,0x7c,0xba,0x0e,0x8d,0x9a,0x73,0x52,0x21,0x89,0x02,0x8f,0x94,0xa5,0x9a,0x11,0x2e,0x6e +.byte 0x78,0xf7,0x07,0xf8,0xb1,0x42,0x96,0x06,0x78,0xf0,0x53,0x86,0xec,0x2b,0x1f,0xa7,0x84,0x79,0x37,0xc7,0x61,0x83,0x8e,0x62,0x65,0x49,0xdd,0xfe,0xee,0x97,0x70,0xa2,0x73,0xb5,0x85,0xaf,0x10,0xed,0xb8,0x74,0xec,0x42,0xd0,0x14,0x47,0xa6,0x90,0x7c,0x07,0x22,0xb4,0x4e,0xfc,0x12,0xa1,0x9d,0xd4,0x73,0x8f,0x6a,0x55,0xf8,0x56,0x25 +.byte 0xdb,0x9b,0xe8,0x10,0x87,0x7a,0x4b,0x42,0x9c,0xbb,0x6e,0xf1,0xd7,0x1d,0xf4,0x07,0x31,0x9c,0x94,0x3a,0xb6,0xad,0x4b,0xf4,0x57,0x3d,0x2f,0xba,0x23,0x36,0x34,0x52,0x62,0xf7,0x64,0xc7,0x47,0xeb,0x41,0xad,0x07,0xfb,0x3e,0x08,0x74,0x92,0x58,0x0f,0x73,0xe2,0x53,0x35,0xda,0xae,0x64,0x3c,0x47,0x89,0xaf,0xce,0x59,0x35,0x75,0x8b +.byte 0x50,0xee,0xbf,0xbe,0xd1,0xf4,0x2f,0x11,0xa3,0xfe,0xce,0xfd,0x15,0x0d,0x32,0x17,0x00,0xfb,0xad,0x02,0x70,0x5c,0xeb,0x59,0xfb,0x87,0xe5,0xed,0x0e,0xde,0x97,0xe7,0x75,0xb6,0xdc,0xe9,0xb0,0x08,0x26,0x0e,0x11,0xd4,0x4f,0xc4,0x92,0x71,0x7c,0x63,0xef,0xc0,0x14,0x64,0xe1,0x0f,0x7e,0xe6,0xcb,0x5b,0x4c,0xd4,0x16,0x8b,0x7b,0x8b +.byte 0x2f,0x2a,0x77,0xef,0xd3,0xdf,0x56,0xc0,0x5a,0x94,0x72,0xd5,0x36,0x12,0xfa,0x25,0xd7,0x77,0x52,0xdd,0xea,0x11,0x2f,0x6b,0x16,0x6e,0xe3,0xa2,0x84,0xba,0x55,0xc2,0xb0,0xe2,0x3b,0x53,0xb6,0xa4,0xc6,0xa5,0x3f,0x1b,0xb3,0x38,0xc0,0x2f,0x1a,0x80,0xe0,0xa4,0x60,0x49,0x8c,0xe3,0x23,0x5f,0x59,0xfd,0x2a,0x0f,0xe8,0x4c,0xaf,0xd7 +.byte 0x36,0xc7,0x25,0x21,0xad,0x41,0x54,0x27,0x95,0x15,0x42,0xbc,0xb3,0x77,0x4e,0x97,0xf4,0x3c,0x54,0xcc,0x19,0x63,0x62,0x67,0x97,0x5a,0xd0,0x59,0xfb,0xce,0xcd,0xe1,0x3c,0xb6,0xc9,0x49,0xc4,0xff,0xde,0xf9,0x89,0x87,0x9c,0xdf,0x4e,0x8c,0x9d,0xe5,0xbd,0x0d,0x0c,0x6e,0x93,0xfd,0xea,0x90,0xf2,0x80,0x7e,0x00,0x9a,0x06,0x02,0x87 +.byte 0xae,0xca,0xf4,0x46,0xbb,0xb5,0x52,0xee,0x18,0xb0,0xf1,0x61,0xcb,0xe1,0x65,0x9c,0x0b,0xfb,0xe6,0x3b,0xeb,0x3a,0x1a,0x22,0x41,0x0b,0x99,0xa4,0x8e,0x01,0x5e,0x7c,0x4e,0x1a,0xaa,0xab,0xd3,0x8b,0x99,0x7f,0xba,0x6b,0xec,0xe7,0x3a,0xd6,0x55,0x46,0x20,0x1b,0x10,0x39,0x06,0xcc,0x90,0xc1,0x6a,0xa5,0x27,0x7c,0xca,0xa5,0x58,0x07 +.byte 0xd7,0xaf,0x6d,0x12,0xa6,0x68,0xc7,0x0e,0x19,0x53,0x44,0x22,0x85,0xbb,0x72,0x9c,0x4d,0xfb,0xeb,0x94,0x3a,0xa0,0x64,0xf5,0x25,0xe8,0xee,0x7a,0x3b,0x71,0x0e,0xbb,0x40,0xa2,0xb3,0xc9,0x6b,0x14,0x0f,0xc3,0x75,0xac,0x1b,0x5c,0xf1,0x34,0x51,0xcb,0xeb,0x5f,0x40,0x0f,0x82,0xe9,0xd2,0x6d,0x95,0x88,0x84,0xea,0xe9,0xe3,0xa0,0xe9 +.byte 0xef,0x3b,0x33,0xfe,0x32,0x52,0x93,0xce,0x95,0x4b,0x64,0x3c,0x97,0x76,0x91,0xd8,0xce,0xb5,0xc2,0xda,0x58,0x23,0x27,0xe2,0x3d,0xbe,0xf6,0x31,0x79,0x73,0x0e,0x31,0xd7,0xa3,0xaa,0xac,0xcf,0x31,0x1e,0x75,0x58,0x14,0x21,0x52,0x1c,0x3e,0x4f,0x2a,0x2b,0x9a,0x22,0xbc,0x42,0x68,0x5b,0x83,0xc2,0x8c,0xd4,0xe8,0xd9,0x02,0x0d,0x13 +.byte 0x2f,0x08,0xd3,0x11,0xb7,0x4b,0x84,0x67,0x43,0xda,0x20,0xdb,0x89,0xd5,0x9e,0x14,0x54,0x3d,0x49,0xda,0xac,0x3f,0x8f,0xf5,0x17,0xfe,0xb8,0x5f,0xc3,0x20,0x38,0x27,0x21,0x32,0xbf,0xf3,0x9b,0x2c,0x0b,0x9b,0xeb,0x64,0x87,0xf7,0x9d,0xed,0x15,0x05,0x21,0x69,0xcf,0x2d,0xf8,0xfb,0xf2,0x81,0x51,0x08,0xc7,0x18,0x81,0xdf,0xed,0xa4 +.byte 0x70,0xb3,0x07,0xfa,0x00,0xd5,0x65,0xb9,0x5a,0x82,0x67,0x6f,0x10,0xfc,0x46,0x05,0x9a,0x85,0x64,0x14,0x60,0x64,0x4d,0x1f,0x13,0x57,0xbb,0x7c,0x4a,0x10,0x84,0x8c,0x57,0x36,0x13,0x22,0x00,0x04,0x2d,0xcf,0x27,0x3d,0xf4,0x27,0x3e,0x32,0xb3,0x87,0xda,0x82,0xaa,0xad,0xd7,0xa7,0xc5,0x3c,0x45,0xec,0x28,0x82,0x79,0x95,0x8f,0x56 +.byte 0x50,0x5f,0xc2,0x15,0xab,0x18,0x58,0x4f,0x69,0x46,0xce,0x29,0x33,0x42,0x53,0xe9,0xea,0xe5,0xa8,0x5b,0x90,0xc4,0xf4,0xbf,0x8a,0x20,0x62,0xad,0xa5,0xea,0x6a,0x4e,0xb4,0x20,0x2d,0xca,0x90,0xdf,0xbd,0xab,0x5b,0xc3,0x33,0x7c,0x53,0x1f,0xf5,0x2e,0xc0,0xbf,0x19,0xe1,0xa1,0x5a,0x63,0xf3,0x13,0x4d,0x6e,0xef,0x4f,0x3a,0x94,0x18 +.byte 0xbe,0x79,0xdb,0xbf,0xc2,0x2c,0xb3,0x36,0x59,0xab,0x21,0x1d,0x98,0x60,0x70,0xdd,0x95,0x51,0x19,0x07,0xd6,0x68,0x0e,0x2a,0xd4,0x4c,0x30,0x18,0x1c,0xe4,0xe1,0x89,0x15,0x25,0xea,0x27,0xcf,0x51,0x56,0xc9,0xa9,0xa7,0x31,0x08,0x17,0xfb,0xfc,0xf6,0x0c,0x5d,0xf1,0x7c,0x36,0xcb,0xad,0xef,0x29,0xf5,0x2e,0x23,0x09,0xcf,0x31,0x6f +.byte 0x74,0x12,0xd2,0xc2,0xc7,0x19,0xa5,0x6e,0x20,0x09,0x67,0xdc,0x41,0x69,0xbe,0x15,0xd6,0xeb,0x7b,0xba,0x63,0xae,0x65,0xd8,0x67,0xec,0x6e,0xcc,0x1d,0x04,0x08,0xfb,0x7c,0x34,0x1d,0x5f,0x1e,0x51,0x1c,0x30,0x72,0xd3,0x0c,0x48,0x60,0x3d,0x52,0xae,0xe6,0x78,0x44,0x6d,0xb8,0x40,0x08,0xb7,0x7a,0xa9,0xfc,0xa0,0x86,0xff,0x32,0xd6 +.byte 0x5a,0x31,0x4e,0xe2,0x65,0xab,0xb0,0x84,0xb6,0x74,0x3e,0xa6,0x67,0x7c,0xa2,0x0f,0x23,0x22,0xab,0x72,0x7e,0xeb,0x45,0xa9,0x2a,0xb4,0xd3,0xcc,0x27,0x5c,0x12,0xdb,0x14,0x68,0x73,0x0f,0x36,0xbf,0x9f,0x14,0x12,0xe9,0xef,0x04,0x2a,0x63,0x41,0x4b,0x04,0x9b,0x4c,0xc4,0xb2,0xb9,0x1c,0xc0,0xb8,0xcc,0x23,0x61,0xc4,0xed,0x27,0x1e +.byte 0x1d,0x97,0x3d,0x40,0x4c,0x1f,0xeb,0x6e,0xc4,0xfb,0x5c,0x2d,0xf5,0xf1,0xbb,0x05,0x47,0xa2,0x1a,0x9c,0x2b,0x8f,0xce,0x98,0x09,0x6b,0x86,0x22,0xf8,0x3a,0xae,0xf3,0xb4,0x66,0x2f,0xdb,0x20,0xa5,0xc6,0xb6,0x35,0xb5,0x5a,0x68,0xb5,0x37,0x2c,0xab,0x13,0x3d,0x2d,0xcb,0x38,0xed,0x3c,0x7a,0x1f,0x26,0x08,0x58,0x94,0x52,0x30,0xec +.byte 0x06,0x9f,0x90,0x97,0x4d,0x90,0x49,0x23,0xaf,0x00,0x90,0x6b,0x96,0x37,0x02,0x4c,0x35,0xc0,0x3e,0x66,0x2c,0x52,0xbc,0x75,0x28,0xd7,0x8f,0x25,0xbe,0x91,0x10,0x22,0x67,0xbf,0x4a,0x4d,0x62,0xc4,0xe9,0xda,0xe2,0x79,0xcc,0x76,0xeb,0x99,0x87,0xac,0x39,0x7d,0xf6,0x5a,0x37,0x85,0x30,0x33,0x65,0x3f,0xd9,0xd6,0x17,0xf8,0xf0,0x86 +.byte 0xee,0x5c,0x2f,0xb0,0xb3,0x4f,0x83,0x6c,0x4a,0x8f,0xfc,0x80,0x91,0xaf,0x4b,0x21,0x9c,0x9b,0x44,0x3c,0xed,0x67,0xfb,0xa3,0x31,0x7f,0xd4,0x73,0x72,0xb9,0xc1,0x31,0x96,0x47,0x8e,0x99,0x8e,0x62,0x1a,0xfd,0xc7,0x9d,0x2f,0x4c,0xda,0xe5,0xae,0x17,0xb6,0x40,0x5f,0x9e,0xa8,0xf2,0xcc,0xd7,0xd5,0x40,0x33,0x88,0x57,0x63,0x9b,0xde +.byte 0x82,0x71,0x68,0xfe,0xaf,0x29,0x6c,0xc1,0x2c,0x2f,0x02,0x42,0xd7,0xa5,0x28,0x05,0xca,0xa0,0xb6,0x8c,0x43,0x90,0x05,0xe2,0x1c,0xb7,0x76,0x79,0x39,0xd3,0x23,0xe1,0xe7,0xbb,0x19,0x65,0x1a,0xb4,0xbb,0x5a,0xcf,0x43,0x70,0x26,0x1a,0x2f,0x61,0x78,0x75,0x08,0xb0,0x88,0xe5,0x4a,0x46,0x0a,0xfc,0xcb,0x46,0x18,0xb0,0x8d,0x9b,0xeb +.byte 0xf5,0xe1,0x83,0x04,0x84,0x4f,0xd6,0xa0,0x4f,0xb2,0x4c,0x44,0x08,0xde,0xd6,0x82,0xb5,0x9a,0x45,0x15,0xb8,0x21,0xc7,0xf5,0xe2,0xfd,0x02,0x27,0x18,0x13,0x24,0x18,0x01,0xd1,0x2a,0xff,0x63,0xf2,0xa4,0x97,0xc8,0x4b,0x3b,0xae,0x49,0x47,0x54,0xe8,0x75,0xe7,0x16,0x77,0x22,0x10,0x7b,0x3c,0xf0,0xdb,0x49,0x6e,0xd6,0x55,0x9d,0x43 +.byte 0x6f,0x6e,0x2d,0x97,0xea,0x16,0x2e,0x0c,0x85,0x89,0x67,0xe1,0x7b,0x38,0xa6,0x2b,0x89,0xf0,0xcd,0x90,0xcd,0xba,0x9a,0x70,0xa9,0xe3,0xff,0xe0,0xbd,0x15,0x3e,0x4b,0x13,0x62,0x7b,0x59,0x64,0x18,0x96,0xe9,0x6a,0xf3,0x69,0x2d,0x2d,0x25,0xe7,0x91,0xd3,0xbc,0x74,0x58,0x66,0x2f,0x5e,0x8b,0x52,0xf6,0x91,0x24,0xa8,0x6f,0xa5,0xce +.byte 0xa1,0x4e,0x3b,0xe9,0xc5,0x30,0x7e,0xa5,0xc7,0xe2,0xb3,0x71,0x3b,0x25,0xb9,0x5f,0xe5,0x9c,0xf8,0x46,0x23,0xc5,0xa2,0xc1,0x1f,0x3f,0x43,0xa6,0xaa,0xf1,0x36,0x27,0xc6,0xa8,0xed,0x0d,0x50,0x71,0xf1,0x38,0x27,0xb7,0x16,0x43,0x7c,0x7f,0x77,0x5b,0x25,0x59,0xb7,0x08,0x0d,0xc8,0x84,0xe4,0xc2,0x03,0x95,0xe5,0xf3,0x0a,0x9c,0x1f +.byte 0xde,0x98,0x7c,0xa9,0xe2,0x70,0x9e,0xde,0xf6,0x80,0xd0,0xf8,0x86,0x4a,0x7a,0x0d,0x16,0xaa,0xde,0xba,0x02,0x30,0x8a,0xe6,0x03,0x0f,0xa1,0xf1,0xe8,0xd6,0xf8,0xce,0x7b,0xba,0x74,0xa8,0x25,0xb0,0x49,0x22,0xa6,0x81,0x7e,0x71,0xc5,0x97,0x9e,0xa8,0x46,0xa7,0xe9,0x8b,0x7c,0x7c,0x4c,0xc5,0x3c,0x93,0x08,0xb9,0x8b,0x3c,0x33,0xd6 +.byte 0xc4,0x37,0xc8,0x05,0xe7,0xfe,0xc2,0x7c,0x02,0xe6,0xda,0x09,0x52,0x2c,0xc6,0xa8,0x6e,0x44,0x7e,0x55,0xf0,0x32,0x10,0xcb,0x1e,0xa7,0x77,0x8d,0xc7,0xfe,0xb5,0xf6,0x3b,0x49,0xf2,0xfb,0xe0,0x41,0x98,0xd3,0x17,0xa6,0x5d,0x3f,0x4c,0x95,0xb0,0x02,0x8d,0xab,0x36,0xb7,0xa0,0x92,0x40,0x5e,0x15,0xfb,0xa9,0xb4,0xa3,0x04,0x8b,0x6b +.byte 0x81,0x44,0x59,0x22,0x10,0xcb,0xc5,0x52,0x3f,0x78,0x70,0x00,0xe2,0xa2,0xf7,0x76,0x62,0x72,0x06,0x8b,0xbb,0x56,0x0f,0x8c,0x67,0x2f,0x52,0x3f,0x3b,0xdc,0x15,0x79,0x55,0x89,0x6c,0x61,0x23,0xcc,0x6b,0x41,0x77,0xe5,0xc4,0x90,0x51,0xc3,0x87,0x22,0x1e,0x89,0xf5,0x5b,0x41,0xd7,0x34,0x22,0x3c,0xbd,0x29,0xaa,0x54,0xed,0x5a,0x90 +.byte 0x17,0x24,0xba,0x7a,0x46,0x5f,0x54,0x33,0x56,0x7e,0x2d,0x03,0x59,0xcb,0xbb,0x7a,0xce,0xbb,0x8d,0xf7,0xb6,0x38,0x00,0x18,0x6a,0xa1,0x6c,0xdf,0x42,0x49,0x4d,0x9b,0x4f,0xd6,0x85,0x54,0x1f,0xad,0x17,0xdd,0x66,0x0e,0x7c,0x30,0x86,0x82,0x1c,0x5a,0x81,0x08,0x55,0x51,0x5b,0x06,0x54,0x52,0x3e,0x8b,0x6e,0x72,0x92,0xd2,0x05,0x5d +.byte 0xe4,0xe8,0x0e,0x62,0x1d,0xec,0xb1,0x7f,0x42,0x05,0xd5,0xd3,0x60,0xd4,0xdc,0xa4,0x48,0xc0,0xf0,0x89,0xef,0x5b,0xae,0x5f,0xcd,0xf0,0x62,0xaa,0x3e,0xd5,0x1a,0xbe,0xe3,0x08,0xd5,0xe8,0x00,0x21,0x8c,0x0b,0x0c,0x8e,0x24,0xac,0xb2,0xea,0x44,0x9f,0xce,0x53,0x45,0x9a,0x85,0x67,0x99,0x85,0xea,0x92,0xa7,0x1d,0x86,0xb4,0x3b,0x22 +.byte 0xa2,0xcd,0x35,0x65,0xb5,0xa6,0xdb,0x6d,0x48,0xd1,0xa4,0x76,0x0c,0x00,0x30,0x62,0x86,0x06,0xda,0xa8,0xfe,0xec,0x70,0x87,0x4a,0xe8,0x2e,0x4d,0xe3,0x94,0x0b,0xdf,0x81,0xcd,0xfe,0x23,0x79,0x2c,0x2b,0xae,0xf7,0x75,0x49,0x47,0x24,0x46,0x09,0x10,0x62,0x39,0x3b,0x50,0xf1,0xfa,0xf7,0x5f,0xe4,0x7c,0xa5,0xc0,0x25,0x9e,0x20,0x4d +.byte 0xc8,0x6b,0x93,0xc5,0x4a,0x6b,0x62,0xb8,0x3b,0xe5,0x0d,0x92,0x70,0x26,0xa5,0x2b,0xd0,0x9f,0x03,0x8b,0xd3,0x1a,0xc4,0xb0,0xa3,0xc7,0xf4,0x35,0xe5,0x1d,0xe0,0xaa,0x43,0xab,0x64,0x10,0x2b,0xa4,0x09,0x42,0xee,0xba,0xb7,0xbf,0xfd,0xa6,0xff,0x76,0xe5,0x12,0xd6,0x50,0x9a,0x26,0x6b,0x3a,0xd3,0xe6,0x7d,0x3e,0x0e,0x9b,0x95,0xd7 +.byte 0xbf,0xb6,0x7e,0xfb,0x3c,0x24,0xa4,0x26,0x98,0x88,0x81,0xf4,0x56,0xa4,0xf7,0xe8,0x87,0x15,0x5e,0x9f,0x84,0xdd,0x04,0x66,0x43,0xd8,0x76,0xc2,0xa3,0xfd,0x4b,0x58,0x09,0x06,0xa6,0x60,0x5c,0x3f,0x75,0x80,0xd7,0xc4,0x29,0xf9,0x0b,0x1e,0x4d,0xe5,0x26,0xf6,0xae,0x7a,0xc1,0x05,0xf3,0xf1,0x6c,0xee,0xed,0x56,0x0b,0x51,0x66,0xbe +.byte 0x99,0xec,0x9c,0xc2,0x97,0xe2,0xed,0x09,0x1d,0xa8,0x18,0xaa,0x1c,0x9e,0x20,0x62,0xb1,0x80,0x68,0x3e,0x28,0x1f,0x4f,0x50,0x0e,0x41,0xaf,0x17,0x44,0x79,0x16,0xca,0x17,0xe9,0x13,0x66,0x0a,0x04,0x68,0x41,0xe2,0x1d,0xc7,0x00,0x1e,0x66,0xa3,0x6c,0x2d,0x52,0x8c,0x0b,0x7c,0x03,0x48,0x73,0x3b,0xa9,0x84,0xe5,0x31,0x12,0x0f,0xe8 +.byte 0x1e,0x58,0x4d,0xd0,0x1b,0xb7,0xcf,0x75,0xd5,0x2c,0xca,0x33,0x17,0x95,0x9c,0x30,0xc7,0x7f,0xe9,0xde,0xae,0x19,0x72,0x00,0x2a,0xf5,0xde,0x93,0x3f,0xf5,0x44,0xe5,0xf8,0xc7,0xeb,0x1a,0x5d,0x5b,0x11,0x30,0x09,0xf5,0x49,0x66,0x70,0x1a,0xd5,0xe6,0xfc,0xe6,0x59,0x3d,0x17,0x6c,0xb5,0x0c,0xdf,0x1e,0x9c,0x48,0xd1,0xde,0x12,0xd6 +.byte 0xc8,0x48,0xc8,0x73,0x6d,0xfc,0xec,0x07,0xce,0x02,0xe5,0xb3,0x18,0xb9,0x55,0x4d,0x64,0x07,0xf3,0xaa,0x3c,0xf1,0x71,0x22,0x31,0xbb,0x74,0x2c,0x9f,0x7b,0x68,0x9d,0x80,0x49,0x32,0x48,0x9b,0x54,0xf3,0x74,0x37,0xac,0x4e,0xb2,0x96,0xdf,0x9d,0xeb,0x43,0xe0,0xd0,0xa0,0xe3,0x77,0xbd,0x8b,0x92,0x95,0x9d,0x63,0x8d,0xa8,0x23,0x07 +.byte 0xb0,0xcb,0x9d,0x8d,0x3f,0xe2,0xd5,0x81,0x6a,0xe5,0xc2,0xfe,0xda,0x1c,0x25,0x25,0x5b,0xa8,0xad,0x06,0xec,0x0d,0x4b,0x68,0xc3,0x45,0x81,0x38,0xb0,0x22,0x71,0xa4,0x2b,0xf3,0xa6,0x05,0xae,0x0c,0x48,0x94,0x0d,0x3d,0x48,0x51,0x76,0xdf,0x79,0x66,0x0e,0x28,0xc0,0xc1,0x6f,0xc8,0x8f,0xf7,0x7d,0x37,0x06,0xa2,0x8a,0x3a,0x6b,0xab +.byte 0xe0,0x55,0x8e,0xec,0x89,0xe2,0xca,0xc4,0x01,0x03,0x5d,0xa1,0x84,0x21,0x44,0xbb,0x6b,0x36,0x63,0x57,0x4f,0x54,0x88,0x81,0xbe,0xf8,0x53,0xf7,0x57,0xee,0x30,0x85,0x03,0x11,0x86,0xff,0xe4,0xd6,0xc4,0xf0,0x3c,0xcf,0xfd,0x38,0xd8,0xcb,0xd0,0x96,0x03,0xf2,0xc7,0xfa,0x18,0xc8,0x1b,0xe6,0x77,0x3c,0x61,0xa9,0x14,0xdb,0xb4,0x5c +.byte 0x2d,0xee,0xd7,0xe8,0xc4,0x0c,0x69,0x0c,0x55,0xe2,0x99,0x4b,0xc4,0x89,0xc8,0xee,0x48,0x0e,0x16,0xd7,0xa4,0x78,0x25,0xda,0xd3,0xa8,0xac,0x89,0x66,0x67,0x0d,0x51,0x21,0x0e,0x91,0xfb,0xb5,0xab,0x33,0xcb,0x3e,0xc7,0x0f,0x03,0x22,0x51,0x71,0x03,0xa0,0x3c,0xa9,0x35,0xcb,0x40,0xa7,0xbe,0xe7,0xc3,0x51,0x43,0xd8,0x9a,0x24,0xb7 +.byte 0x7e,0xfb,0x26,0x8d,0xa5,0x1a,0x6b,0xe7,0x97,0xe4,0xdd,0xc0,0x3e,0x98,0x67,0x55,0x79,0x56,0xb9,0x7e,0x25,0x4c,0x5c,0x5a,0x47,0x0a,0xce,0xb6,0x4d,0x2c,0x69,0x73,0xaa,0xf0,0x12,0xbb,0x9d,0xe1,0x60,0xc4,0x5b,0x10,0x32,0x6d,0x89,0x54,0xb1,0xfe,0x36,0xbe,0xb2,0x60,0x9a,0x91,0x73,0x9c,0x32,0x61,0xad,0x9a,0xf7,0x56,0x5f,0x5a +.byte 0x54,0xaf,0xb2,0x0c,0x5b,0x1a,0xe6,0x98,0x94,0xed,0x69,0x0b,0x8d,0x06,0x87,0xc9,0x20,0xdc,0x92,0x2d,0x5e,0xba,0xbb,0x15,0xef,0xc1,0x07,0x18,0x44,0x3f,0xf4,0x48,0x3e,0x7b,0xa4,0x9e,0x14,0x6b,0x97,0xdd,0x68,0x33,0x18,0xdd,0x47,0x08,0xa6,0x3b,0x8d,0x79,0x58,0x92,0xd9,0xda,0x82,0x34,0xa7,0x99,0xbc,0x43,0xa3,0x0a,0x7e,0x85 +.byte 0x0b,0xab,0x0e,0xc2,0x94,0x22,0x2d,0x05,0x99,0x9d,0x5c,0xc7,0xb2,0x7b,0x18,0x3e,0xb2,0xdd,0x47,0xb3,0xd7,0xcf,0x19,0xc7,0x55,0x5e,0x64,0xd8,0x7b,0xb4,0xf6,0x11,0x72,0xed,0xbd,0xfc,0xd8,0xe9,0x9f,0xcd,0x9a,0xeb,0xb2,0x6c,0x04,0xb9,0x88,0xf7,0x60,0x68,0xc3,0xf2,0xfd,0xa0,0x8c,0x82,0xc5,0xf7,0x5d,0xc3,0x9a,0x1e,0x49,0x27 +.byte 0x69,0x35,0xb0,0x8f,0xe9,0xb3,0xe4,0x09,0xd8,0x1a,0x73,0x9e,0x56,0x41,0xfa,0xe0,0x94,0x9e,0x0e,0x65,0xe6,0x5b,0xe2,0x12,0x39,0xca,0x86,0x0c,0xae,0xee,0x24,0x58,0xfd,0x85,0x09,0x7a,0xad,0x54,0xde,0xda,0x06,0x73,0x7d,0x11,0x7e,0x91,0x44,0xf3,0x4b,0x61,0xce,0x8a,0xff,0x76,0x92,0x2e,0x43,0x52,0xcf,0x63,0x3f,0xc4,0x1f,0x7f +.byte 0x4d,0x67,0x21,0xed,0xd7,0x88,0xdb,0x36,0x56,0x11,0xb2,0x3b,0xee,0x5f,0x2d,0x5f,0x17,0x98,0xa1,0xd5,0xcc,0x82,0xfd,0xc2,0x56,0x69,0xaa,0x68,0x86,0xaf,0x48,0x77,0xba,0xe9,0xd9,0x42,0xcd,0xaa,0xe3,0xad,0x2b,0x17,0xef,0xd3,0x54,0xc5,0x4e,0x31,0x0b,0x14,0xb7,0x73,0xc1,0x6f,0xc3,0x06,0x41,0x1a,0x11,0x19,0x9f,0xe9,0x9f,0x61 +.byte 0x4f,0x13,0x9b,0x3e,0xcd,0x7c,0xd6,0x2a,0xb3,0x87,0x84,0x58,0x58,0x10,0x1f,0xa0,0x2e,0x5c,0x15,0x8b,0x5e,0x37,0xd4,0x22,0x93,0xd9,0x67,0xe1,0xa8,0x35,0xe2,0x95,0xd8,0x4c,0x2c,0x65,0xc9,0x21,0xaf,0xf9,0xdd,0x3d,0x2c,0x0e,0x0c,0xcc,0x6b,0xad,0xb3,0x6d,0xd2,0x3e,0x65,0x8e,0x82,0x70,0x41,0xd6,0xaa,0x97,0xab,0x38,0x78,0xe4 +.byte 0x62,0x7c,0x5f,0x22,0xa3,0x1e,0xf2,0x6c,0xfe,0x3c,0xa9,0xb5,0x57,0xcd,0x96,0x11,0xd0,0x8b,0xcf,0x6d,0x06,0xcf,0x7c,0xda,0x1d,0xe4,0x22,0x5c,0x5d,0x9f,0xa8,0x24,0x55,0x45,0x93,0xc6,0xeb,0xfc,0xb5,0x71,0x5a,0x1d,0x52,0x40,0x95,0xc7,0x76,0x32,0xfb,0x2b,0x0c,0x7d,0x64,0xfa,0x5b,0x5e,0x7a,0x3b,0x0b,0xa0,0x99,0x5d,0x19,0x16 +.byte 0xe4,0x8e,0xae,0x49,0xee,0xc5,0xb2,0x24,0xd7,0x0b,0xa4,0x20,0xa6,0x74,0xc4,0x36,0x1d,0x43,0x25,0xd6,0x71,0x54,0x69,0x79,0xea,0xa3,0xd5,0xe9,0x75,0x53,0xcf,0x99,0x4e,0x3b,0xc0,0x52,0x28,0x80,0xe5,0x07,0x65,0x83,0xb3,0x24,0xfe,0x13,0x92,0xd6,0x18,0xf7,0xa3,0xeb,0x9e,0xf0,0xd5,0x69,0x93,0x79,0xda,0xb7,0x2e,0xe2,0x01,0xdd +.byte 0x9a,0xc3,0x7b,0x3b,0x17,0x88,0xe5,0xe9,0x9b,0x46,0x5c,0x5f,0x0e,0x1e,0x80,0x9b,0x11,0x1f,0xa4,0x08,0x90,0x14,0x08,0xb4,0x73,0x32,0x72,0xbe,0x43,0x4f,0x70,0x90,0xe7,0x80,0xdd,0xfd,0xa7,0xea,0x13,0xd9,0x5d,0xae,0x93,0x24,0x2b,0x1e,0xc7,0xf4,0x81,0xbb,0x5f,0xb0,0xb9,0xe4,0x35,0x39,0xf4,0x9a,0x49,0xb5,0xc0,0x47,0x18,0xc3 +.byte 0xcc,0xbe,0x26,0x36,0x44,0x2d,0x65,0x24,0xa3,0x09,0xde,0x69,0x3b,0xb8,0xdc,0x52,0x98,0x2e,0x38,0x5f,0xf7,0xb1,0x84,0xdd,0xea,0xe2,0xe5,0xec,0x96,0x31,0xb1,0x93,0xc0,0x5b,0xc4,0x87,0x4a,0x51,0x58,0x2d,0xea,0x47,0xab,0xfd,0xd3,0x76,0xf1,0xbc,0x52,0xa7,0x94,0x6c,0x74,0x1e,0x84,0x07,0x1f,0x5c,0x18,0xb9,0x06,0x37,0xf0,0xfb +.byte 0xbd,0x5d,0xaf,0xa8,0x06,0xc9,0x86,0xf0,0xd1,0x78,0x84,0x95,0x01,0xdd,0x70,0x9d,0x71,0x51,0xb7,0x80,0x69,0xbe,0xe8,0xfb,0x8f,0x43,0x72,0xd9,0xa9,0xf1,0x90,0xbb,0xf1,0xb5,0xc0,0x75,0x93,0x4e,0x14,0xc5,0x14,0x77,0x59,0xf8,0xe5,0x81,0x11,0x25,0x48,0x51,0x46,0x2a,0x69,0x59,0x92,0xe7,0xa7,0x39,0x96,0xad,0x67,0x30,0xaa,0xb2 +.byte 0x5d,0x95,0x94,0x83,0x83,0x93,0xf3,0x52,0x81,0x1c,0x27,0x78,0x1d,0x19,0x35,0x6e,0x8f,0x16,0xe5,0x3b,0xce,0x80,0x2a,0x3a,0x89,0xb7,0x51,0xfc,0x34,0x24,0xa2,0x61,0x95,0x9e,0xd4,0x69,0xa1,0x2f,0x49,0x16,0x2d,0x12,0x05,0xfe,0x69,0x62,0x12,0xa4,0x2c,0x04,0x7b,0xce,0x3f,0x34,0xc4,0x48,0x1a,0xe6,0x64,0x4b,0x8a,0xbf,0x68,0xdd +.byte 0x54,0x15,0xd3,0x25,0x49,0xdd,0xed,0x5e,0x2c,0x0e,0x25,0xbe,0x77,0xcf,0x94,0xf4,0xe9,0xf3,0xcc,0xe6,0x94,0xf9,0xb2,0x5d,0x24,0x53,0x63,0xbb,0x66,0x8d,0x73,0xef,0x79,0x5c,0x95,0x1a,0x64,0xc3,0xfd,0xc0,0xd3,0x71,0xf4,0x79,0x19,0x79,0xa5,0x30,0xf8,0x2c,0x28,0xc2,0xc2,0x9d,0x12,0x50,0x95,0x38,0xec,0xd5,0xc6,0x28,0x94,0xaa +.byte 0x83,0x66,0x3b,0xe3,0x51,0xc7,0x6a,0x75,0x2a,0x9b,0xb9,0xb0,0xa2,0xe1,0xfd,0xaf,0x58,0xd2,0x4b,0xf4,0x22,0xef,0x77,0x1e,0xa0,0x00,0xd7,0x9e,0x20,0x63,0x87,0x1d,0x98,0xab,0x0e,0x57,0x31,0x4b,0xda,0x90,0x3a,0xe6,0x6e,0x5e,0xd4,0x17,0x06,0x83,0x4f,0x90,0x33,0x1c,0xe5,0xea,0xf7,0x8d,0x95,0xa2,0x1e,0x7d,0x27,0x15,0x49,0x68 +.byte 0x3a,0x54,0xe3,0x1e,0x60,0x72,0x42,0xa6,0x8c,0x5b,0x63,0x1d,0x7d,0xb1,0xe2,0x7e,0x8b,0x19,0xf4,0x25,0x6c,0x77,0x64,0x15,0x5e,0x4c,0xfa,0x35,0x68,0xd2,0x54,0x11,0x5a,0xac,0x85,0xb0,0xb3,0xe8,0xa8,0x70,0x36,0xa8,0xe5,0x04,0xd1,0x82,0xdc,0x62,0x63,0xe6,0x3f,0x86,0x46,0x77,0x08,0x6b,0xa8,0x09,0xd0,0x56,0x09,0x87,0x9c,0x65 +.byte 0x8e,0x53,0xae,0xa6,0x2b,0x59,0x23,0xca,0xe9,0xc7,0xc4,0xb5,0xb9,0xca,0x20,0xf6,0xcc,0x62,0xfd,0xb5,0x66,0x66,0x86,0x99,0xb2,0x5a,0xeb,0xac,0xff,0x22,0xf4,0x94,0x9c,0x6d,0xc9,0xce,0xf3,0x8d,0x26,0x7f,0x06,0x40,0x71,0x8b,0x3e,0x5c,0x3e,0xe6,0x11,0x64,0x91,0x79,0xbe,0x66,0x80,0xd2,0xf6,0x2d,0x28,0x4b,0x6c,0x8d,0x9c,0x5b +.byte 0x1e,0xd1,0x15,0xb0,0xdf,0xfb,0x57,0xaf,0x4a,0xab,0xde,0x12,0xe9,0xb8,0x41,0x3d,0xc3,0xff,0xb2,0xc1,0x86,0xb0,0x06,0x5b,0xaf,0xa4,0x30,0x62,0xd0,0xd8,0x91,0x36,0x28,0xc1,0xc2,0xef,0x60,0x5d,0x42,0x04,0xd5,0x6b,0x10,0xa9,0x6c,0x88,0x5c,0x56,0x59,0x4a,0x87,0xdc,0x7c,0x41,0x03,0xb3,0x7c,0x35,0x8c,0x52,0x0e,0xc1,0xd5,0xdf +.byte 0x9b,0x8a,0x2e,0xc2,0x6b,0x06,0x7f,0xb4,0x93,0xc9,0x52,0xd0,0xc5,0x57,0x78,0x9e,0xf9,0x08,0x36,0xbc,0x4b,0xc1,0xbd,0x71,0x35,0xf8,0x73,0xae,0x9c,0xbc,0xf1,0xd1,0xba,0xe3,0x7f,0x49,0x9b,0x9b,0xb3,0xe2,0x7d,0x7d,0x18,0x6d,0x0d,0x96,0xe3,0x50,0x28,0xf2,0x7c,0x7a,0x71,0x27,0x33,0x3c,0xd3,0xeb,0x3d,0x5a,0x79,0xb5,0x69,0xed +.byte 0x40,0x38,0xbe,0xc9,0xad,0x11,0x7b,0x9d,0xe6,0x71,0xc8,0x89,0x54,0x51,0xf0,0x8f,0xdc,0xad,0x96,0xc3,0x04,0x60,0x5f,0x6d,0xa0,0x37,0xba,0x1c,0x69,0xca,0x42,0x26,0xeb,0x31,0x34,0x8d,0xae,0x25,0xe2,0x29,0x8d,0x19,0x9f,0xfa,0x75,0x91,0x4b,0x51,0xcd,0x76,0xd6,0x8f,0xa2,0x40,0x79,0xc3,0xbb,0x61,0xaf,0xc4,0x69,0xf5,0x8b,0x8a +.byte 0xb6,0x2c,0x25,0xb9,0x3c,0x8e,0x13,0xa4,0x0f,0x52,0x72,0x11,0x4b,0x89,0x63,0x01,0x05,0x54,0xd5,0x0d,0x5f,0x91,0x59,0x84,0x64,0xac,0xf7,0x9c,0xa3,0x48,0x31,0x4a,0x2e,0xea,0xf8,0xf8,0x0e,0xf0,0xd9,0x4d,0x06,0x60,0x11,0x4a,0x72,0x6f,0x93,0x93,0x85,0xf0,0x20,0x55,0x8b,0x37,0xf1,0x29,0x92,0x2d,0x1f,0xa1,0x6c,0x7c,0x90,0x4f +.byte 0xdb,0x78,0xcc,0x6c,0xb2,0x14,0x85,0x07,0x34,0xc8,0x98,0x18,0x52,0x2d,0x6b,0x13,0x63,0xc5,0x31,0x20,0x8e,0xa9,0x88,0x6b,0xb3,0x3f,0x1a,0x68,0x2f,0xf9,0xf3,0x97,0x29,0x68,0x22,0x89,0xb0,0x45,0xc4,0xf4,0x1f,0x31,0xba,0x97,0x14,0x59,0xae,0x05,0xe0,0x99,0x5b,0x29,0xcf,0xe3,0xf0,0x2a,0x0c,0xca,0x5f,0xc1,0xe7,0xe7,0x11,0x48 +.byte 0x73,0xc0,0x86,0x0b,0x59,0xc2,0x8a,0xfa,0x44,0x51,0x1c,0x84,0xdf,0x2f,0x4d,0xab,0xca,0xea,0xe1,0x48,0x9a,0xa1,0x86,0x60,0x47,0x7a,0x86,0x30,0x6a,0xba,0xbe,0x6a,0x9b,0x34,0xf4,0x52,0x0e,0xae,0x7f,0xbd,0xe0,0xf4,0x5f,0xfd,0xbc,0x57,0x02,0x95,0x6f,0xad,0x78,0x2e,0xa7,0x46,0x1c,0x2d,0x98,0x40,0xb7,0xfa,0xb5,0x08,0xee,0xb5 +.byte 0x25,0x51,0xaa,0x1a,0x14,0x41,0x48,0xe0,0x8f,0xe7,0x2f,0xfc,0xfd,0x47,0x10,0x55,0x90,0x02,0xeb,0x7f,0x0d,0x40,0xa8,0x4b,0x82,0xdc,0xab,0x43,0x35,0x62,0xa1,0x1d,0x5a,0xb0,0xc0,0x93,0x75,0x3d,0x68,0xd9,0xf8,0x31,0x22,0xfd,0x30,0xda,0xea,0xea,0x7c,0x30,0xf8,0x6f,0x75,0x5f,0x07,0x39,0xfe,0x69,0x93,0x73,0x22,0xa2,0x72,0xed +.byte 0x39,0x2f,0x00,0x5c,0xc3,0x14,0x86,0x90,0xda,0xc9,0x09,0x43,0x80,0x85,0x22,0x98,0xb0,0x4e,0x05,0x47,0x8f,0xc7,0xba,0x2e,0x4c,0x8f,0x57,0x8a,0xe9,0xb0,0x97,0x3b,0x51,0x12,0xcb,0x88,0xfd,0x5e,0x7f,0xa6,0xc6,0x00,0xd0,0x3a,0x3a,0x70,0x9e,0x56,0x28,0xa0,0x08,0x76,0x58,0x57,0x4a,0x0f,0xff,0x31,0x44,0x08,0x6c,0x23,0x79,0xad +.byte 0x35,0x95,0xc5,0xc8,0x26,0x0f,0xb3,0x17,0x04,0x1d,0xde,0x16,0x5d,0xb8,0x71,0x76,0x89,0x0b,0xd6,0xd8,0x9d,0xa1,0xdf,0xcb,0xb5,0x1c,0x86,0xc3,0x15,0x8d,0xaa,0x25,0x82,0xbf,0x6b,0x06,0xfb,0x1b,0xf5,0x11,0xaa,0x14,0x0e,0x67,0x7f,0xbd,0x46,0x21,0x8f,0x6d,0xbd,0x63,0xe6,0x14,0x05,0xa2,0xee,0x56,0xee,0xe6,0x37,0xf9,0xc0,0x2f +.byte 0xc9,0xe0,0x8e,0xdb,0xf7,0xf6,0xcb,0x83,0x79,0xcc,0xe3,0xf6,0x30,0x9d,0x56,0x31,0x40,0xd2,0x50,0x25,0xb6,0x89,0x16,0x97,0x65,0xd8,0x8d,0x1a,0xa5,0xf4,0x47,0xfc,0x4c,0x73,0x07,0x42,0x9c,0x8f,0x7f,0x10,0xb4,0x96,0x33,0x1e,0xe2,0xff,0x0c,0x33,0x35,0xbc,0x37,0x01,0x2b,0x67,0xda,0xca,0xcf,0x87,0xa2,0x38,0x71,0x6b,0xf4,0xcf +.byte 0xa6,0xc6,0x6a,0x90,0x5c,0xa0,0x8b,0x66,0x44,0xc7,0xc2,0x05,0x24,0xee,0x53,0x99,0xf3,0x07,0x78,0xb0,0x17,0xf8,0x11,0xf9,0x52,0x20,0x41,0xc5,0xdb,0x4e,0x92,0xd3,0xeb,0xd2,0x86,0xea,0x9b,0xc3,0x4c,0x1b,0x75,0xcd,0x15,0x0c,0xe0,0x28,0xe9,0xe1,0x99,0x98,0x96,0x33,0x06,0xea,0xa8,0x4e,0xde,0xc1,0x1c,0xfe,0x6c,0xca,0xac,0x6d +.byte 0xc4,0x3a,0x7d,0xd2,0x41,0xf5,0xb3,0x7d,0x1c,0x28,0x93,0x72,0xf8,0x08,0xc1,0x71,0x72,0x4c,0x41,0x68,0x38,0x80,0x2e,0x4b,0xa6,0xc5,0xc7,0xb4,0x24,0x29,0xd0,0xce,0xb2,0x3d,0xc4,0x60,0x5b,0xeb,0x2d,0x80,0x13,0xee,0x95,0x41,0xfe,0x49,0x6d,0x89,0xc0,0x7a,0x61,0x51,0x3f,0xbb,0x24,0x7c,0x64,0x5e,0x9f,0xf7,0x60,0x88,0x95,0xe8 +.byte 0x60,0xc5,0xf6,0xc3,0xc3,0xd4,0x43,0xce,0xf9,0x4e,0x35,0xf2,0xfa,0xb0,0x2b,0xe3,0xfe,0xb8,0x88,0x19,0xf2,0x89,0xc0,0xb5,0x00,0x61,0xc8,0xe5,0xaa,0xde,0x18,0xb4,0xd4,0x21,0xbe,0xcc,0x61,0xc7,0xc9,0xfe,0x22,0xcc,0x65,0xf6,0x79,0xe8,0x4d,0x1c,0x30,0x31,0x7a,0xd4,0xbc,0x98,0x2d,0x72,0x5e,0x5c,0x4f,0x7e,0x52,0x9c,0x95,0x20 +.byte 0x29,0xa4,0x0b,0xf7,0xb2,0x7d,0xcc,0xc3,0x8c,0x94,0xb0,0x09,0xf4,0x6f,0x59,0x63,0x91,0x2a,0x06,0x80,0x09,0x01,0x3c,0x73,0x83,0x42,0xa1,0x5c,0x0f,0x42,0xf4,0x74,0x3c,0x24,0x8c,0xbe,0x91,0x73,0xdf,0xf1,0xea,0x21,0xbd,0xc9,0x36,0x17,0xca,0x81,0x28,0xd9,0x4a,0xc4,0x2e,0xdf,0x4c,0x4f,0xbd,0x1e,0xbc,0xe9,0x32,0x12,0xd3,0x8f +.byte 0x48,0x9b,0x4f,0x49,0x23,0x54,0x15,0x15,0x14,0x8b,0x18,0x64,0x7d,0x08,0x7f,0xc4,0x56,0x01,0x94,0x4e,0x50,0xe8,0xf2,0x4a,0xb5,0x3c,0xa0,0xb5,0xaf,0x55,0x70,0x44,0x41,0x5c,0xe6,0x61,0x5a,0xbb,0xf2,0xe6,0xc9,0x05,0x33,0x45,0x8f,0xbc,0xe5,0x59,0x7f,0x66,0xc5,0x61,0x4d,0x1b,0xc7,0xee,0x45,0x7d,0x57,0x8f,0x6c,0x9d,0x8b,0x87 +.byte 0x98,0xa8,0x58,0xac,0x4a,0x31,0x79,0xd6,0x26,0x08,0x2f,0x28,0x3f,0x31,0x77,0xad,0xff,0xe1,0x9d,0xa8,0xf7,0xe0,0x76,0x66,0x48,0x00,0x52,0xe8,0x9a,0xb2,0x47,0x5e,0x0a,0x87,0x86,0xaf,0xf6,0x7d,0x46,0x78,0x66,0x68,0xf7,0x68,0x0c,0x6f,0x5c,0xd7,0x09,0xc0,0xd7,0x90,0x98,0xe2,0x5c,0x07,0xe9,0xd1,0x58,0x48,0x57,0x9f,0x48,0x99 +.byte 0x87,0xdf,0x06,0xc1,0x35,0x0f,0xd8,0xb0,0xa9,0xfa,0xdc,0x31,0x76,0xd1,0xad,0x47,0x80,0xe4,0x74,0xe0,0xda,0x4b,0x77,0x8b,0x71,0xab,0x9a,0x8e,0xd7,0x6b,0x91,0xb1,0xdb,0x78,0xd2,0x86,0xf7,0x61,0x1b,0xdc,0x34,0x57,0x32,0x51,0xee,0xd3,0xff,0xb2,0x6c,0x6a,0x79,0x90,0x9c,0x1f,0x6b,0xe7,0x43,0x20,0x05,0x4f,0x66,0x83,0xd0,0x56 +.byte 0xe1,0x21,0x63,0xf4,0xd6,0x96,0x91,0xcb,0x51,0x3c,0x13,0x88,0x97,0x26,0x88,0xda,0x7c,0xd4,0x0d,0xcb,0xdf,0xc2,0x7d,0xcd,0x2c,0x0e,0x28,0x23,0x21,0x5f,0xbe,0x5d,0x62,0x58,0x6c,0xa7,0x45,0xae,0x1f,0xac,0x35,0x53,0xdb,0x2c,0xa6,0x71,0xe4,0x11,0x5e,0x59,0xbe,0xd5,0x20,0x2a,0xc4,0xcd,0x4c,0x1b,0xe0,0x38,0xef,0x02,0x0c,0x5f +.byte 0x5a,0x1b,0xf9,0x1e,0x32,0x63,0xd7,0xa6,0x0f,0x1d,0x98,0xd5,0x3a,0x0f,0xf6,0xcc,0xfc,0xd6,0xb4,0x87,0xc5,0x76,0xd8,0x3e,0x72,0xb0,0x20,0xfe,0xb3,0xfc,0x48,0x4c,0xd1,0x71,0xcd,0x13,0xef,0xe8,0x40,0xd9,0x0d,0xf6,0x1d,0x5b,0xa4,0x26,0x56,0x8c,0x66,0xcb,0x18,0x5a,0x5f,0x86,0x43,0x2c,0xa4,0x1e,0x00,0x3f,0x09,0xbf,0x8e,0x61 +.byte 0xad,0x2a,0x44,0x97,0x35,0xb2,0xf3,0x50,0x5f,0xfa,0x01,0x74,0xbf,0x70,0x46,0x38,0xf1,0x15,0xaa,0x04,0xfe,0xe9,0x3f,0x43,0x2f,0x53,0xcb,0xea,0x5c,0x04,0x8e,0xe6,0x43,0xeb,0xc0,0xd9,0xbf,0x4a,0xc1,0xbc,0xf9,0x11,0xd5,0x33,0xdc,0x41,0x8e,0xfe,0x5e,0xf3,0x8c,0x80,0x47,0x46,0x01,0x9e,0xa9,0x2c,0x2d,0xd2,0x90,0x7f,0xce,0x7c +.byte 0x59,0x78,0xaa,0xbb,0x96,0x52,0x0a,0xf3,0x18,0x1f,0x0b,0x41,0xc1,0xd5,0x12,0x14,0x1a,0xe1,0x4e,0xac,0xf8,0x2a,0x56,0xfe,0x66,0x34,0x21,0xdf,0x1f,0x6a,0x02,0x85,0xd2,0x38,0xc0,0x39,0x5c,0xa7,0x3f,0xcc,0x2b,0x6f,0x69,0xe7,0xa7,0x0a,0x36,0xf1,0xa9,0x77,0x59,0x2c,0x44,0x8b,0x72,0xc9,0xc2,0x74,0x32,0x48,0x76,0x19,0x1e,0x49 +.byte 0x10,0xe6,0x46,0xdf,0x82,0x9b,0xad,0x4e,0x40,0x20,0xd7,0xd3,0xf5,0x5c,0xbc,0x25,0x94,0xd1,0x68,0xaf,0x29,0xc5,0xcd,0x1b,0x86,0x4b,0x88,0x21,0x6e,0xeb,0x06,0x14,0xb5,0x15,0xe7,0x26,0x01,0x05,0x4e,0x3a,0x2a,0x24,0xbe,0xf2,0x64,0x6e,0xf4,0x9c,0x60,0xf8,0xd4,0xfd,0x4b,0xc0,0x0e,0x68,0x0d,0x19,0x26,0x87,0xa5,0xbf,0xe1,0x16 +.byte 0xf0,0x27,0x58,0xa8,0x3a,0xed,0x27,0x5b,0x73,0x4f,0x19,0x40,0x58,0x36,0xf6,0xfd,0x60,0x37,0x09,0x74,0x3c,0xb9,0x76,0x9a,0x32,0xfd,0x98,0x79,0x53,0xb3,0xea,0x3a,0x98,0x21,0xf9,0xb2,0x97,0xe4,0x00,0xb6,0xed,0x67,0xc4,0x76,0x8f,0x1e,0x4d,0xc8,0x2e,0xf4,0x54,0xd9,0x09,0xd7,0xcb,0xa0,0x91,0x1e,0x5a,0x60,0x53,0xbc,0x3e,0x35 +.byte 0x69,0xa6,0xca,0xf3,0xce,0x41,0x84,0x71,0xee,0xf3,0x75,0xd4,0x7a,0x71,0x36,0x62,0xe3,0x08,0xae,0x40,0x05,0xde,0x01,0x34,0x92,0x5f,0x71,0xa9,0x08,0xb3,0x43,0xcd,0xe7,0x2f,0x42,0x7e,0x9c,0x1e,0xfe,0x9a,0x40,0x99,0x58,0x31,0xd9,0x8d,0x5d,0xda,0x75,0x14,0x3f,0xae,0x45,0x27,0x85,0x47,0x7d,0x41,0x0e,0x94,0x20,0xee,0x11,0xd0 +.byte 0x1e,0xcd,0x00,0x56,0xb7,0x59,0xe6,0x58,0xab,0x2c,0xa6,0x44,0x14,0x8c,0xff,0x49,0x7b,0xe5,0xf7,0x93,0xd5,0x78,0x1a,0xe0,0x16,0xd8,0x24,0x08,0x1e,0x70,0xce,0x1a,0x84,0x87,0x6b,0xe5,0xf2,0x43,0x5f,0xb3,0x34,0xaa,0x85,0x3e,0x9e,0x2e,0x86,0x22,0x74,0xe2,0x1a,0x87,0xfb,0x1b,0x6c,0x08,0x8c,0x43,0xb4,0x85,0x75,0x2c,0x13,0xc2 +.byte 0x18,0x94,0xe8,0x0d,0x09,0xd5,0x8f,0xd4,0xca,0x50,0x93,0x9f,0xa3,0x9f,0x3b,0x3c,0x54,0x68,0xa9,0xb1,0xdd,0x0a,0x0b,0xe2,0x15,0x92,0x9c,0x6f,0xfa,0x45,0x6f,0x0a,0xb4,0x6b,0xcb,0xdc,0xa4,0xf3,0xf0,0xa6,0x1c,0x8a,0x60,0x42,0x35,0xa8,0xe3,0xdf,0xc8,0xdc,0xbb,0xbe,0x95,0xa7,0xac,0x08,0x08,0xbc,0x56,0x1a,0xa4,0xc2,0xd2,0x53 +.byte 0xfa,0xb2,0x89,0x4f,0xb8,0xe4,0xb9,0x90,0x95,0x91,0x2f,0x0f,0x93,0xa9,0x8c,0xc6,0xf8,0x01,0x34,0x08,0xe6,0x8c,0x58,0x43,0x57,0x40,0xf9,0x78,0x83,0xea,0x92,0x70,0xa8,0xa5,0xc8,0x9e,0xf8,0xc6,0x39,0x4c,0xb4,0xe9,0xbb,0xdf,0xd2,0x52,0x43,0x6b,0x6c,0x8b,0x2c,0x47,0xd7,0x11,0x42,0x3d,0xc7,0x3f,0xce,0xd1,0xd9,0x28,0x5b,0xce +.byte 0xec,0xb6,0x31,0x3a,0xc9,0xad,0x0c,0x93,0x82,0x2b,0xf6,0xdc,0xd4,0xcd,0x80,0xe1,0x75,0x45,0xeb,0x3b,0xbf,0x12,0x42,0xeb,0x71,0xc1,0x8b,0x27,0xd5,0xcb,0xd9,0xb6,0xe8,0xe9,0xc6,0x79,0xff,0x38,0x88,0x87,0x72,0xf2,0x71,0x4a,0x44,0x55,0x0f,0x9c,0x93,0xcf,0x15,0x18,0x44,0x62,0x2a,0xc5,0x0a,0x80,0x69,0x91,0x6e,0x4b,0x30,0x4e +.byte 0x3f,0x2f,0xb5,0x65,0x9e,0x65,0x07,0x36,0x9b,0xba,0x5f,0x81,0xd9,0x60,0xbe,0x1f,0xf5,0x98,0x20,0xf9,0x9e,0x53,0xf7,0x5d,0x57,0x7f,0x22,0xaf,0x8e,0x82,0x9e,0x0f,0x33,0x74,0x37,0x26,0x61,0x67,0xf6,0xfd,0x2c,0xab,0xd8,0x18,0x1d,0x10,0x48,0x7a,0x1d,0xed,0xbb,0x57,0x83,0xf9,0x82,0xf5,0xe3,0xf9,0x98,0x5c,0xc0,0x3e,0xee,0x38 +.byte 0x0a,0x57,0x10,0x22,0xc4,0xe8,0x1d,0xe3,0x46,0xa3,0x81,0x5e,0x92,0xba,0xcc,0x53,0x48,0x85,0x33,0x58,0xa2,0x3e,0xea,0x0a,0xfb,0x72,0x5c,0xcd,0xd9,0xa4,0x3f,0x56,0x99,0x35,0x92,0x6c,0xe8,0xf2,0x59,0x0f,0xc8,0x6a,0x21,0xb2,0x9f,0xa2,0xf6,0xf3,0x1b,0xec,0x38,0x95,0xed,0xef,0x00,0x09,0x16,0x6e,0xf7,0xf8,0x1a,0xef,0x0d,0x2b +.byte 0xef,0x83,0x8a,0xc2,0x22,0x3d,0x50,0xa3,0x70,0x52,0xe8,0xad,0x11,0x44,0x83,0x80,0xfe,0x88,0x7e,0x40,0x02,0x8f,0x4a,0x5d,0xd3,0x28,0x66,0x75,0x5a,0xf2,0x38,0xb5,0xdc,0x54,0xa8,0xb3,0xaa,0x76,0xdb,0x73,0xe0,0xd1,0xd7,0x51,0x20,0x8c,0x38,0x18,0x46,0x25,0x2e,0x0d,0x5b,0x61,0x9d,0x36,0x9a,0x14,0xfb,0xc8,0x4e,0x5a,0xba,0xa1 +.byte 0x98,0x34,0xfd,0x05,0x2c,0x87,0x58,0x8d,0xe3,0x5d,0x79,0x5a,0x45,0xff,0x75,0x25,0x98,0xbd,0xe4,0x9d,0x1a,0x70,0x79,0xaa,0x44,0x1a,0x10,0x7f,0xfb,0xe9,0x30,0x81,0xc7,0xa2,0x81,0x41,0x49,0x41,0x4e,0x42,0x5f,0x8a,0x9b,0x10,0xe2,0xdc,0xd9,0xdf,0xbd,0x61,0x29,0x72,0xa5,0x39,0xb7,0xf6,0x9f,0x4e,0x98,0xb8,0x04,0xae,0xd7,0xda +.byte 0x9a,0x9f,0x08,0xb8,0x2c,0x40,0x14,0x6d,0x01,0xb7,0x86,0x58,0x55,0x42,0xe5,0xdb,0x5f,0x4a,0xef,0xd8,0xed,0xdf,0x3b,0x24,0x1c,0xe4,0xb1,0x73,0xd1,0xce,0x29,0x96,0xde,0x8e,0xf3,0x1d,0x8d,0x75,0x57,0xd3,0x9a,0xf8,0xff,0x1a,0x4c,0x0c,0x47,0x82,0x83,0x73,0x34,0x43,0x55,0xfa,0xf2,0xd4,0x38,0xed,0xde,0x6d,0x24,0x55,0x90,0x06 +.byte 0xd6,0x03,0x52,0x28,0xc7,0x38,0x4a,0x16,0x95,0x4d,0xf4,0x46,0x56,0xf7,0x63,0x1f,0xe4,0xa9,0x51,0xc6,0x0b,0x85,0x42,0x40,0x8e,0x49,0x1e,0xc2,0xab,0xeb,0xda,0x99,0x26,0xf6,0x6e,0x00,0x8f,0x26,0x82,0xef,0x03,0xb0,0xd4,0xdb,0x54,0x46,0xdf,0xdc,0x23,0xaf,0xa8,0x6a,0x9f,0xb7,0xf9,0x41,0x07,0x5e,0x2d,0xcf,0x85,0xfd,0x9c,0x46 +.byte 0x30,0xb9,0x14,0xca,0xe2,0x30,0x12,0x06,0x88,0x08,0x05,0x2c,0x9a,0x4b,0x52,0x98,0xa9,0x99,0xd7,0xca,0xb5,0x1e,0x60,0x44,0xd9,0x5c,0x19,0x42,0xbe,0xa5,0x04,0xfd,0x7a,0xfc,0xb9,0xdf,0xd6,0xe3,0x6d,0x02,0xe3,0x96,0xf6,0xae,0xf3,0x78,0x1d,0x90,0x6d,0x86,0x17,0xf7,0xb7,0x6b,0x1d,0x52,0x32,0x5b,0xc0,0x31,0xaf,0x09,0x90,0x5e +.byte 0x81,0x75,0x17,0x47,0x6b,0x5e,0x9a,0x40,0xa5,0xa8,0x84,0x60,0xdc,0xdb,0xd2,0x89,0xcd,0xb2,0x72,0xf4,0x74,0xda,0x5d,0x34,0xf8,0xc6,0x1b,0x26,0x3e,0x8b,0xc7,0x73,0xf9,0x0c,0x93,0xf4,0x40,0x02,0xe0,0xed,0xe5,0xa0,0xae,0x91,0x03,0x85,0xa8,0x2f,0xe2,0x72,0xfe,0x17,0x7d,0x2b,0xa6,0x39,0x10,0x80,0x4c,0x58,0xaa,0xd8,0x22,0x7d +.byte 0x2f,0xbf,0x0c,0x40,0x48,0xfa,0xbe,0x40,0x4c,0x32,0x96,0x69,0xa5,0xab,0x0b,0x1e,0x33,0x9b,0xcf,0xe6,0x4e,0x2b,0x41,0x5a,0x21,0x23,0xa1,0xbb,0xd3,0xd6,0xd1,0xfd,0xbd,0x55,0xfc,0x92,0x92,0xcb,0x4b,0x72,0x39,0x8b,0xeb,0x72,0xdd,0xf7,0x77,0x43,0x52,0x2f,0x99,0x14,0x6e,0x41,0xce,0x1d,0x57,0x2c,0x09,0xd2,0x18,0xec,0x1b,0x89 +.byte 0xa0,0xe9,0xfe,0x1e,0x41,0xda,0x0f,0x76,0x02,0x38,0xec,0x9a,0x30,0xb7,0x5a,0x54,0x70,0xbc,0xe8,0xfa,0x06,0xd0,0x80,0xfb,0x27,0xd2,0xd8,0x00,0x80,0x65,0x9d,0x23,0xfd,0xad,0x26,0xb8,0xdc,0x09,0x4f,0xfb,0x52,0xcd,0xe4,0x41,0x68,0xca,0xdd,0xbc,0x2a,0x62,0xeb,0xa6,0x32,0x71,0xb0,0x08,0xb6,0x9f,0x3e,0x74,0xfe,0xb0,0xd4,0x9d +.byte 0x9e,0x6c,0x50,0x96,0x8a,0xde,0xd6,0xe9,0xde,0x2c,0xa6,0xf0,0x9f,0x67,0x00,0x50,0x0a,0x8c,0xe5,0xc2,0x37,0xcc,0xf0,0x53,0xeb,0x72,0xf2,0x87,0x77,0xee,0x80,0xe8,0xb2,0xa1,0x13,0x52,0x70,0xe6,0x8f,0x70,0x17,0x90,0x60,0xcb,0xac,0xb2,0x72,0xef,0xd9,0xb5,0xc3,0x68,0x57,0xdf,0x2d,0xcb,0x5a,0x35,0xf9,0x2e,0xfb,0xef,0x6e,0x77 +.byte 0x5d,0x21,0x37,0x4b,0x36,0x9b,0x3f,0x03,0x65,0xc9,0x84,0xb1,0x12,0x99,0xd1,0x6b,0x00,0x71,0x37,0xc7,0x57,0x82,0x44,0x7f,0xe1,0x81,0x24,0x70,0x96,0xd5,0x27,0xba,0x36,0xf7,0x25,0xc6,0x1c,0x7c,0x1b,0xdb,0xa3,0x6a,0x3e,0xb9,0x69,0x78,0xf7,0x51,0x46,0xe2,0x74,0xd3,0xfc,0xef,0x58,0x63,0x53,0x1d,0xd7,0xd0,0x8a,0x6a,0xd3,0xb0 +.byte 0xb9,0xbb,0xba,0x43,0xbf,0x8b,0x6b,0x04,0xd2,0xb1,0xe8,0xd1,0x72,0x3f,0xdc,0x2b,0x01,0xa6,0x2f,0x9c,0x7d,0x65,0xa1,0x9f,0x9b,0x4d,0x70,0x26,0x11,0x4c,0xb2,0xe1,0x01,0x0e,0x78,0xf2,0x32,0x87,0x2d,0x8e,0x95,0x02,0x76,0xca,0xe5,0x71,0x5f,0x36,0x35,0xb9,0xbb,0xc3,0xdf,0xf3,0x1e,0x1a,0x7a,0xe4,0x2c,0xdf,0x64,0x5d,0x96,0x12 +.byte 0xea,0x5c,0x14,0x73,0xa0,0xf1,0xbc,0xa9,0x6e,0x30,0x8a,0x47,0xf0,0x4b,0x9b,0x4c,0xc5,0xb0,0xbe,0x15,0x32,0x1b,0xde,0x0c,0x39,0x6a,0x6d,0x4e,0x3b,0x69,0x4c,0xb4,0x1f,0x56,0xf0,0xa1,0xb1,0x8c,0x29,0x5c,0x87,0x54,0xf2,0x5b,0x51,0x03,0x20,0x70,0x90,0x38,0x66,0x07,0xcc,0xd7,0xde,0x96,0x40,0x82,0xee,0xb5,0x87,0x2a,0x86,0xec +.byte 0x66,0x09,0xb7,0x4a,0xfe,0x4e,0x92,0x89,0x07,0xde,0x35,0xc4,0x6e,0x91,0x25,0xfd,0x18,0xfa,0xd9,0x8f,0xa7,0xa6,0xa7,0x6b,0x32,0xba,0xd3,0x1c,0x90,0xb9,0x8a,0x6c,0x9f,0x3f,0xb5,0x16,0x81,0x81,0xee,0xd7,0x55,0xc1,0x41,0x62,0xfd,0xe9,0x4c,0x5d,0xd7,0x70,0xdd,0xc6,0x4a,0x2b,0x42,0x77,0xe7,0x74,0xed,0x02,0x80,0x0d,0x7c,0x73 +.byte 0x8e,0xf0,0xd3,0xb0,0x20,0xbb,0xc8,0x82,0x06,0xdd,0x56,0x64,0xcb,0x9c,0xda,0xa1,0xa9,0x92,0xbc,0x8c,0x65,0x03,0xcd,0x68,0x87,0xa2,0x94,0x41,0x3c,0x36,0x96,0x1f,0xa4,0xd2,0x6d,0x5d,0x9f,0x2d,0x0c,0xf9,0x8a,0x82,0x19,0x93,0x47,0x62,0x71,0x8e,0x59,0xaa,0xf1,0x87,0xe0,0xb8,0xab,0x10,0x7f,0x4e,0xa8,0xa3,0xe2,0x32,0x58,0xb0 +.byte 0xcf,0x12,0xc0,0xf8,0x94,0x4a,0x61,0x36,0xdc,0x2d,0xb5,0x91,0xf9,0x0f,0x7d,0x91,0xd3,0xc7,0x03,0x8a,0xae,0x5c,0x22,0x8c,0x60,0x30,0xf4,0x71,0x51,0x00,0xf5,0x5d,0xe9,0x37,0x6c,0xae,0x64,0xff,0x45,0x35,0x4b,0x47,0x08,0xca,0xda,0x7b,0xe9,0xef,0xcb,0x27,0xcb,0x7e,0x3c,0xa6,0xd2,0x38,0x54,0x74,0xc3,0x7c,0xf8,0x71,0xb7,0x47 +.byte 0xe9,0xe0,0x43,0x03,0x3b,0x41,0x57,0xc3,0xda,0xa1,0xcb,0x64,0xb1,0x31,0x0d,0x12,0x45,0x3a,0xa0,0xad,0x6b,0xc7,0x26,0x62,0x50,0xcf,0x94,0x5a,0x30,0x8d,0xf6,0x91,0x49,0x9e,0xd5,0x84,0x0e,0x0c,0xe3,0x47,0x08,0x7f,0xa1,0x54,0x78,0x1b,0xa8,0x2c,0xbc,0x12,0x4f,0x7e,0x53,0x1b,0xca,0xfb,0x09,0x35,0xe0,0x9c,0x15,0xea,0xf6,0x3e +.byte 0xb2,0x20,0x9e,0x2c,0x81,0x6f,0xa4,0xb5,0x6b,0x04,0x6d,0xd1,0x90,0x66,0x46,0xdc,0x4b,0x71,0x7e,0x4b,0x3f,0xd6,0xe1,0xa8,0xc0,0xa7,0x45,0x85,0xe3,0x98,0x30,0xda,0x23,0x68,0x55,0xd8,0x96,0xb1,0xcc,0xeb,0xe1,0x95,0x0b,0x20,0xf3,0x4c,0xf2,0xc5,0xfa,0x0e,0xca,0xf5,0xc9,0xb3,0xd7,0xb4,0x1b,0x9f,0xef,0x82,0x56,0x4c,0xc5,0xa5 +.byte 0x21,0xda,0xcc,0x19,0x69,0x68,0xcb,0x37,0xb2,0x0c,0x73,0xb1,0x13,0x61,0x6b,0xca,0xda,0xfc,0xf7,0x1c,0xbc,0xd1,0x72,0x56,0xb8,0x7d,0xa1,0xef,0xc4,0x32,0x38,0xa3,0xdb,0x8b,0x2d,0x0a,0xce,0xcb,0x86,0x51,0x60,0xd2,0x47,0xf0,0x97,0x58,0xd8,0xa5,0x12,0x77,0xfc,0x32,0x04,0x29,0x61,0xfc,0xab,0xc2,0x42,0x86,0xd9,0x57,0x80,0xad +.byte 0x00,0xf0,0x9a,0x2a,0xac,0x52,0x27,0xd6,0xf8,0xd6,0x38,0xc8,0xfc,0xc1,0xab,0x4f,0x41,0xbf,0x8e,0x60,0x20,0xeb,0x24,0x36,0xd8,0xd8,0x25,0x6f,0xc8,0x5d,0x6b,0x00,0xdd,0x7a,0xe2,0x37,0xe4,0x13,0xd0,0xaa,0x5c,0x56,0x32,0x98,0x00,0x4b,0x8a,0x81,0xb1,0xfa,0xe8,0xf3,0xfa,0x0d,0xbb,0x66,0x6e,0x24,0xfd,0x3c,0x50,0x63,0x3a,0xf1 +.byte 0x72,0x63,0x18,0x71,0x6d,0xee,0x6f,0xf1,0x0e,0x1f,0x9e,0x9d,0x87,0x12,0x5c,0xdf,0x1d,0x9e,0xc0,0x0b,0x39,0x0e,0xd6,0x56,0x79,0x30,0xcb,0x07,0x7b,0x88,0xa5,0xbe,0xfd,0xd4,0x49,0xcc,0x92,0x6a,0xcc,0x78,0x1e,0xaf,0xee,0x89,0xc8,0x51,0x08,0x98,0x14,0x20,0xe5,0x52,0x93,0x18,0x6f,0xbb,0xdc,0xb2,0x68,0x14,0xd1,0xdb,0xe8,0x56 +.byte 0x24,0xd0,0x34,0xab,0xa6,0xfa,0xfe,0x72,0x5a,0xe3,0xe1,0x87,0x0d,0xf4,0xfa,0xa6,0xa6,0x6c,0xb6,0xcb,0xf8,0xfc,0x59,0xac,0xd9,0xb0,0xcd,0x15,0xa4,0x37,0x73,0x6e,0x70,0xc9,0x74,0xef,0x87,0x78,0x61,0xc2,0xd0,0x52,0x51,0xa9,0x2c,0xdb,0x9d,0xd9,0x3d,0xac,0xcd,0x52,0x39,0x69,0x2d,0x2a,0x4f,0xf3,0xb2,0x69,0xb9,0x01,0x3c,0x57 +.byte 0xeb,0x1b,0x0e,0x87,0xe9,0x42,0x58,0x83,0x6b,0xbc,0x72,0xc8,0x46,0x32,0x42,0x17,0x6a,0x19,0xa0,0xb3,0xf1,0x1c,0x96,0x9c,0x11,0x09,0x8b,0xc1,0x9e,0xe9,0x7f,0x18,0x8e,0xca,0xea,0x24,0x1b,0xce,0x12,0x57,0x1d,0x34,0xbe,0x60,0x60,0x2c,0xd8,0xa0,0x61,0x73,0xd6,0xf8,0xaf,0x15,0x26,0x84,0xd7,0xec,0xc0,0xbe,0x7e,0xa1,0xa8,0xba +.byte 0x2b,0xcc,0x20,0x67,0x6e,0xea,0x48,0x79,0x23,0xea,0x14,0x36,0x85,0x0a,0x56,0x3a,0xcd,0x5b,0x51,0xa4,0xf5,0x92,0x49,0xc2,0x55,0x62,0xed,0x88,0xde,0xd0,0x0c,0x01,0x36,0xb9,0x2e,0x94,0x80,0x75,0x8a,0x21,0x0a,0x07,0x45,0x68,0xd8,0x9d,0x49,0x7b,0xa7,0xb2,0x84,0xfa,0x3c,0xc4,0xd5,0x59,0xf9,0xc3,0xff,0xcf,0xe4,0x5f,0xea,0xbb +.byte 0x0f,0xae,0x7d,0x96,0xd3,0xe9,0x38,0xd1,0xb1,0x02,0xf6,0x4b,0x95,0x43,0x1c,0x69,0xa6,0x99,0xf5,0xdb,0x46,0x62,0xea,0x69,0x5a,0x08,0x2d,0x01,0x11,0xed,0x70,0x03,0x60,0x54,0xba,0x32,0x2c,0x0e,0x44,0x1f,0x8d,0xee,0x2e,0x39,0xab,0xc0,0xd4,0x88,0x11,0xef,0x07,0x3a,0x47,0xb9,0x6e,0x0c,0x22,0x9a,0xf3,0x89,0x01,0xfb,0xb8,0x2d +.byte 0x52,0xa0,0x42,0x4c,0xb3,0x9e,0xf5,0x4b,0x0c,0x78,0x0a,0x3b,0x29,0xae,0x4a,0xc0,0xb2,0xa3,0xc0,0x0d,0x38,0x07,0x49,0x9c,0xda,0x7c,0x48,0x81,0xba,0x53,0x0d,0x0d,0x78,0x8c,0xac,0x9b,0x3d,0x1f,0xaa,0xc1,0x32,0x54,0xca,0x54,0xe1,0xef,0x46,0x82,0x61,0xd0,0x88,0x04,0x53,0xb0,0x34,0xc2,0x23,0x9a,0x90,0xe3,0x73,0x9c,0x0d,0x46 +.byte 0x61,0xe5,0xc0,0x42,0x87,0x4a,0x3b,0x3a,0xf9,0xab,0xbe,0x4c,0xba,0x2f,0x88,0x03,0x6b,0x52,0x25,0x8c,0x9b,0xc0,0x13,0xb6,0x80,0x09,0x85,0x97,0x64,0x6d,0x65,0xcd,0x18,0x42,0x00,0xdf,0x76,0x4d,0x67,0xbf,0x04,0x7a,0x5f,0x7e,0x3a,0x5c,0x6f,0x1d,0x12,0x5b,0xbe,0xd2,0xc8,0xe5,0x09,0x45,0x4d,0xae,0xed,0xd8,0x77,0xc5,0x6f,0xb6 +.byte 0x43,0x09,0xe2,0xee,0xc9,0x5a,0x76,0xc5,0xeb,0xdd,0x96,0x23,0xb9,0xe5,0xfc,0xf2,0x3c,0xe1,0x67,0x5f,0x1b,0x10,0x39,0x47,0x67,0x8b,0x48,0x32,0xd0,0xbc,0xa0,0xa8,0x3e,0xc3,0x30,0x21,0x18,0x54,0x49,0xfe,0x8a,0x14,0x7a,0xe5,0x6e,0xbe,0x70,0xec,0xf6,0x97,0xa0,0xa4,0xf4,0xdd,0xaf,0xf2,0xde,0x50,0x1a,0x68,0xb9,0x1a,0x4b,0x37 +.byte 0xf8,0x29,0x16,0x4f,0x8c,0xa5,0x9e,0xd2,0x72,0x7f,0xf6,0x6b,0x7d,0xac,0xe4,0x17,0x93,0x39,0x8f,0xd9,0xdf,0x50,0x1f,0xce,0xf5,0x58,0xdd,0xcd,0xc2,0xb9,0x64,0xfc,0xad,0x8a,0x3c,0x2e,0x52,0x58,0x91,0x3b,0x78,0xb4,0xfd,0x4a,0x3b,0x13,0x5d,0x20,0xd5,0xdf,0xe7,0x52,0x3d,0x4c,0x2f,0x02,0x30,0xfc,0x24,0x17,0x99,0x6e,0x4b,0xfe +.byte 0x1d,0xf0,0xe6,0x86,0x32,0x37,0xb5,0xd5,0x09,0xa3,0xa5,0x3b,0xc1,0x88,0x9f,0x01,0x57,0x12,0x03,0x1d,0x60,0xd8,0x57,0xba,0xc6,0xfc,0xda,0xab,0x02,0xbe,0xab,0x89,0xf9,0x08,0x63,0xbd,0x42,0x11,0xf7,0xbf,0xd3,0x45,0x2b,0xa5,0x34,0x91,0x18,0xb9,0xb3,0x79,0xb4,0x15,0xa1,0x01,0x1a,0xf9,0x74,0x91,0x08,0x94,0xb2,0xf3,0xb2,0xca +.byte 0x0a,0x3a,0x4f,0x42,0x8a,0x16,0xf7,0x9e,0xbf,0x27,0x72,0x7b,0xff,0xd3,0xb9,0x4e,0xf5,0x8e,0x68,0xb5,0x91,0x23,0xef,0xeb,0x5d,0x7d,0xd8,0xc9,0xda,0x07,0x33,0xc9,0x1c,0x4a,0x7a,0xf2,0x72,0x64,0xb3,0x35,0x2e,0x54,0xec,0xc4,0xd9,0xee,0xea,0xda,0xfe,0x8b,0x1c,0x21,0x93,0x52,0x95,0x7c,0x2d,0xfe,0x56,0x05,0xdd,0x57,0x37,0xf2 +.byte 0x54,0x1c,0xe2,0x6c,0xc0,0xaa,0x71,0x67,0xdd,0x73,0x43,0x17,0x3e,0x76,0xdb,0x60,0xb4,0x66,0x62,0xc7,0x74,0x08,0x91,0x1f,0xd5,0x4c,0xa9,0xd0,0x34,0x33,0xea,0xb0,0x2c,0x0a,0x88,0xda,0xf7,0xca,0x91,0xf6,0x5f,0x9e,0x72,0xf6,0x18,0xf9,0x19,0x9d,0x84,0xf8,0x4c,0xe1,0xeb,0x45,0x29,0xaa,0xf2,0xa6,0xfd,0x64,0xf9,0x0b,0xfe,0x09 +.byte 0x1c,0xc2,0xde,0x19,0xdd,0x0f,0x02,0x16,0x65,0x70,0x33,0xd4,0x32,0x67,0x7b,0xc4,0xbb,0x11,0x60,0x4f,0xc3,0x4d,0x29,0x23,0x7e,0x84,0x58,0x51,0x43,0x7e,0x25,0x4f,0x3d,0xd4,0xe0,0x20,0x79,0xfd,0xce,0x59,0x49,0xf8,0xd1,0x53,0xca,0x2d,0x66,0xec,0xe5,0x7f,0xc8,0x14,0x06,0xc1,0x96,0x40,0xf2,0x61,0xa7,0x1b,0xf9,0x5e,0x97,0xfe +.byte 0x62,0x57,0x05,0xcc,0x6f,0x26,0x4b,0xa6,0x40,0x33,0x72,0x20,0xd3,0x1e,0x2b,0xb2,0x60,0xe7,0x56,0xda,0x87,0xd3,0xb4,0x5a,0x73,0x04,0xc9,0xc2,0x68,0xe3,0x18,0x74,0xd9,0x46,0x74,0x31,0xf4,0xf4,0xab,0xc4,0x0a,0xbc,0x66,0x4e,0x23,0x5f,0x92,0x7c,0x0a,0x81,0xdd,0xcc,0x79,0xee,0xb3,0x3d,0xc0,0x91,0x81,0xd0,0x79,0x39,0xd2,0x69 +.byte 0x5d,0xdc,0xc1,0x5c,0x61,0xb9,0x5e,0x87,0x32,0x73,0x70,0xd0,0xa8,0x7d,0xb5,0xd0,0xfc,0xf4,0xb6,0x55,0x9f,0x1f,0x8a,0xec,0xf4,0xb0,0x47,0xeb,0x3b,0x68,0x80,0x0b,0x79,0xd0,0x71,0x99,0xb1,0xd0,0xed,0x1f,0x9f,0x6c,0x2d,0x9d,0xae,0x1c,0x62,0x3b,0xec,0x3e,0x2f,0xb4,0x6f,0xbb,0x2e,0x1e,0xa9,0x7c,0xe8,0x5d,0x14,0x7d,0x0d,0x17 +.byte 0x6d,0x9c,0x54,0xce,0x64,0x93,0x8e,0x3b,0xa4,0xa9,0xfb,0xd9,0x44,0x06,0xbb,0xb8,0x7f,0xdf,0xd3,0xc2,0xa2,0xcf,0x5a,0xa2,0xa7,0xbb,0xb5,0x08,0xe2,0x67,0xdf,0x0e,0x4e,0xc6,0xcf,0x0a,0x79,0x1e,0xa5,0x60,0x1a,0x81,0xb1,0x8e,0x1b,0x27,0x7f,0x8d,0x28,0x50,0xa7,0x4a,0xe4,0x4b,0x61,0x6b,0xa9,0xfa,0xaf,0x82,0x83,0xfb,0x1f,0x2e +.byte 0xfa,0xce,0x18,0x0e,0x32,0x5f,0x5a,0xcf,0xac,0xaf,0x22,0x30,0x16,0xd7,0x97,0x99,0x0d,0xb8,0x92,0xa5,0x1d,0x44,0xb2,0xa5,0xc7,0x74,0xd2,0x81,0x8d,0x5c,0x38,0xda,0x9f,0x76,0xcb,0x47,0x6c,0xb7,0x08,0xd9,0xc1,0x52,0xd0,0x64,0x0a,0xf9,0xdd,0x3e,0xe8,0x99,0x15,0x4d,0xcb,0x7b,0x25,0x53,0x8c,0x13,0xb1,0xbf,0xb7,0xca,0x2d,0xce +.byte 0x71,0x48,0xee,0x5b,0x3a,0x01,0x5b,0xfd,0x22,0xfa,0x6f,0x17,0xcb,0x52,0xcc,0x0a,0x2b,0xbb,0x6d,0xce,0x2d,0x00,0xf5,0x9e,0x0d,0x58,0xf1,0xf4,0xa4,0x9f,0x13,0xf9,0x68,0x15,0xd7,0x02,0x41,0x6c,0x19,0x6b,0x66,0x9a,0x74,0xee,0xb4,0xb3,0xc7,0xec,0x60,0x19,0xbd,0xbb,0x97,0x22,0x7c,0x4e,0xe6,0xc6,0x00,0x03,0xa5,0x36,0x52,0xec +.byte 0x21,0xcf,0xc8,0xda,0x2c,0x14,0xa9,0xd8,0x75,0xab,0xea,0x05,0x8c,0x24,0x28,0x63,0xbd,0x58,0x35,0xd7,0x95,0xcb,0x14,0x89,0x04,0x99,0x7e,0x67,0x0d,0x07,0x35,0xdb,0x17,0x7c,0x72,0x2d,0xbc,0x89,0x9b,0xb4,0x16,0x21,0x2f,0x90,0xe8,0x8f,0xeb,0xc3,0x8d,0x86,0x0d,0x92,0xf6,0x4b,0x80,0x36,0x96,0x6b,0xd8,0x95,0x7b,0xad,0xe8,0xbf +.byte 0x77,0x9e,0xf4,0x93,0xcd,0xa5,0x06,0xbc,0x38,0xf2,0x57,0x25,0x54,0xfa,0x8e,0x19,0x8e,0x25,0x8e,0x3c,0x28,0xaa,0xf2,0x02,0x30,0xd4,0x47,0x89,0x36,0xb9,0xb7,0x01,0x5f,0x0c,0xd1,0x8d,0x93,0x7e,0xf0,0xf0,0xff,0x2f,0x8f,0xb5,0x97,0xa7,0x02,0xe8,0x9b,0xf2,0x51,0xe6,0x51,0x62,0xa5,0x27,0x26,0xc6,0x7a,0x39,0x7a,0xa9,0xaf,0x1e +.byte 0x03,0xd5,0x25,0xbe,0x3b,0x19,0x46,0xc4,0xdd,0xd6,0x5e,0x6a,0x18,0xc0,0x41,0x5f,0x53,0x89,0xd3,0x16,0xfb,0x3a,0x10,0xce,0x0d,0x8c,0x04,0x4c,0xcf,0xab,0xb9,0x0d,0x6c,0x45,0x6c,0x29,0xed,0x77,0x37,0x1f,0xd8,0x10,0x8a,0xfe,0x07,0xbd,0x7e,0xd7,0xa6,0x6b,0x80,0xde,0x3e,0x2c,0xa8,0xb1,0x38,0xcc,0xab,0x10,0x69,0x8f,0x58,0x3d +.byte 0x12,0xc7,0x9c,0xc1,0x0a,0xeb,0x3d,0x5e,0xf1,0x65,0xc6,0x09,0xcb,0x4b,0x09,0x24,0xa7,0x56,0x1d,0x1d,0x4c,0xd7,0x06,0xbd,0xe2,0x72,0x70,0xae,0x7e,0xe9,0xaa,0x97,0x6d,0xec,0xcb,0x55,0x0b,0x5d,0x45,0x3a,0x25,0x3d,0x52,0x0f,0x48,0x2f,0xe4,0xd0,0x5e,0x85,0x87,0xb6,0xa7,0x70,0x2f,0x9c,0x19,0x89,0x95,0x45,0x76,0x00,0xfe,0x27 +.byte 0xff,0xf8,0x73,0x59,0xba,0x98,0x92,0x4e,0x76,0x1a,0x90,0x1d,0xbc,0x1b,0xae,0x44,0xb6,0x63,0x86,0x4c,0x3c,0x8a,0x8f,0x3e,0x03,0x95,0x50,0x30,0xd8,0x0f,0x7f,0x6f,0xb6,0xe9,0xbe,0x2e,0xc9,0x55,0xe7,0x73,0xd6,0x77,0xdc,0xbc,0x67,0x54,0x31,0x47,0x30,0x46,0xe1,0xa4,0xf8,0xf3,0x90,0x4f,0x68,0x5a,0x52,0xe2,0xe7,0xdb,0xd9,0xfd +.byte 0xf6,0x36,0x2a,0xc1,0xdb,0x35,0x82,0x69,0xff,0xf9,0xea,0x53,0xff,0xcd,0x21,0x2c,0x26,0x79,0xd6,0x8c,0x74,0xe7,0x9e,0x85,0x1a,0x04,0xf5,0xed,0x89,0x16,0xf5,0xd7,0xf1,0x89,0xf1,0xb3,0x5b,0x47,0x42,0xcb,0x92,0x2e,0x70,0xf6,0x3e,0xfc,0x20,0x87,0x70,0xec,0x30,0x16,0xcc,0x88,0x64,0x13,0x58,0xf1,0x0d,0x17,0x90,0xc4,0xdb,0x07 +.byte 0xf5,0xe3,0x34,0x31,0x10,0x9c,0xa4,0x6a,0x4a,0xe6,0x6c,0x80,0x49,0x07,0x23,0x21,0xd6,0xf1,0xcb,0x4a,0xd1,0xb5,0xb7,0x63,0x94,0x4c,0x0a,0xce,0x90,0xf2,0x63,0x31,0x4f,0x96,0x6c,0x5d,0x3e,0xaa,0x10,0x20,0xd6,0xb6,0xbe,0xfa,0x3f,0x83,0xbc,0xa8,0x08,0x38,0xec,0x38,0xe4,0xe9,0xf5,0xb3,0x8e,0x32,0x31,0xcd,0x7c,0x08,0x98,0xf6 +.byte 0x0f,0x8a,0x8f,0xc1,0xd8,0x9e,0x05,0xb6,0x74,0x11,0x94,0xef,0x4f,0x8f,0xa1,0xc6,0x8c,0xdb,0xc3,0x27,0x4e,0xa3,0x30,0x94,0xf5,0xe8,0x2a,0x18,0x0a,0x51,0x9b,0x79,0xb2,0x1f,0xc3,0xa0,0x26,0xa9,0xf5,0xc4,0x9e,0x39,0xda,0x6a,0x53,0x8f,0x8c,0x4c,0x54,0x50,0x81,0xa0,0x0a,0xd3,0x7c,0x99,0x91,0xc7,0x3e,0x56,0x7d,0x53,0x8c,0x3c +.byte 0x51,0x44,0xa5,0x22,0x9d,0xd2,0x9b,0x13,0xcf,0xb8,0x0c,0xb8,0xd4,0xaa,0xb4,0xaa,0x8d,0xab,0x7c,0x06,0xca,0xbb,0x85,0xac,0x01,0xee,0xef,0xe7,0x74,0xd5,0x0d,0x64,0x91,0x1c,0xde,0x6c,0x05,0x37,0x1e,0x23,0x05,0x7e,0x38,0xdc,0x17,0xaf,0xa7,0x95,0x85,0x1f,0xaf,0xc8,0xe1,0xc2,0xda,0xda,0xf1,0x14,0x56,0x66,0x68,0x70,0x36,0x38 +.byte 0x7b,0xb8,0x22,0x9f,0xc4,0xeb,0x5d,0x76,0x97,0xc5,0xa3,0xb9,0x06,0x86,0x4f,0x20,0xab,0x7d,0xce,0x7d,0x78,0x59,0xc5,0x1f,0x73,0x81,0xf6,0x6d,0xb4,0xcc,0x10,0xc5,0x4d,0xe3,0x81,0xaf,0xbc,0x37,0x42,0x28,0x5f,0x51,0x1e,0xaa,0xc7,0x81,0x20,0xc3,0x89,0x35,0xf1,0x74,0x3a,0xe8,0x04,0x24,0xef,0x8b,0x70,0xe1,0x74,0xdf,0x87,0xd5 +.byte 0x3c,0x32,0x32,0x7d,0x03,0xd7,0xda,0x6d,0x8b,0x25,0x8d,0x11,0xa3,0xc2,0x27,0xdc,0xa3,0xfc,0xdf,0x70,0xa4,0x41,0xad,0xda,0xce,0x12,0x45,0x14,0xa1,0x96,0x16,0xd8,0x54,0x89,0x9e,0x78,0x7f,0x23,0x12,0xd1,0x15,0x08,0x7f,0xbd,0xf0,0x9a,0xf1,0x5b,0x07,0xd5,0xbc,0xab,0xab,0x15,0xae,0xda,0xf1,0x26,0x12,0x4e,0xd6,0x6c,0x35,0xc1 +.byte 0x6e,0x27,0x4d,0xa8,0x71,0x51,0x1e,0xae,0xa8,0x35,0x26,0x06,0x18,0x03,0xd8,0xae,0x9e,0x8b,0x07,0x30,0x10,0xfb,0x47,0x05,0x02,0xcc,0x0a,0xbd,0x57,0x43,0x15,0x0a,0x7a,0xb5,0x30,0x0b,0xa6,0x3c,0xa8,0xc9,0xf5,0x68,0xe1,0xfb,0xd1,0xe0,0xe7,0x44,0x6c,0xb4,0x44,0xb6,0xd1,0x2b,0x30,0x5e,0x17,0x89,0x40,0xcc,0x10,0x8f,0x97,0x8a +.byte 0xf3,0xf4,0x52,0x55,0xc4,0x8e,0x46,0xe5,0x24,0x0b,0x2a,0x5d,0x84,0xc1,0x4e,0xa8,0x5a,0x53,0xa8,0xce,0xc6,0x3f,0xa2,0xaa,0x3a,0x8f,0x51,0xed,0x4c,0xa6,0x34,0x6a,0x8c,0x18,0x9b,0x36,0x49,0x40,0x34,0xa3,0xe4,0xd8,0x3c,0x8a,0xfc,0x41,0xc9,0x35,0xfe,0x6e,0x3e,0x29,0xbc,0x04,0x61,0xaf,0x04,0x03,0x43,0x79,0xb5,0x77,0x27,0x25 +.byte 0xbe,0x85,0xc9,0x56,0xa4,0x17,0xc4,0x27,0x3d,0x53,0x1b,0x49,0x86,0xb2,0xb6,0x52,0x62,0x12,0x5d,0xe9,0x47,0x6f,0x65,0x78,0xf8,0x95,0x63,0xbc,0x73,0x6d,0xa6,0xb9,0xcd,0x17,0x39,0x56,0xb0,0xab,0x3a,0x15,0x5f,0x9a,0x98,0xfb,0xcd,0x51,0x4a,0x35,0x21,0xaf,0x07,0x4a,0x3d,0xfd,0x39,0x11,0x42,0xed,0xfc,0x7e,0x10,0x24,0xa5,0x0c +.byte 0xb2,0x4f,0x27,0xe4,0x78,0x32,0xfe,0xfc,0x8e,0x46,0x68,0xbb,0x2e,0x85,0x87,0x0f,0x01,0xde,0x1c,0x02,0xdd,0x82,0xa0,0x9e,0x30,0x31,0x8d,0x86,0x36,0x33,0xa6,0x59,0x16,0x78,0xae,0x1f,0x1d,0x27,0x0b,0x29,0x42,0x16,0x93,0x3b,0xe6,0xfb,0x8d,0xd5,0x48,0x42,0x61,0x39,0x5b,0xf7,0xea,0xd0,0x6f,0x67,0xd9,0x03,0x72,0xed,0x54,0xe1 +.byte 0xab,0x3f,0xa0,0xdc,0x4b,0x19,0xe6,0xe3,0xfe,0x5f,0x65,0x64,0x4c,0xa9,0x5c,0x52,0x36,0xb3,0x65,0x28,0x3e,0xe5,0x07,0x50,0xed,0xec,0x2f,0xc9,0xff,0x47,0x27,0xf6,0xfe,0xb8,0x60,0x60,0x52,0xe5,0xec,0x3c,0x4f,0x69,0x9f,0xaa,0x06,0x8a,0x99,0x9f,0xac,0xfc,0x0a,0x6f,0x8a,0xa4,0x0e,0x5c,0x58,0xb4,0x09,0xba,0x93,0x95,0x94,0x12 +.byte 0x9b,0x23,0x4f,0x93,0x28,0x6d,0xd0,0x76,0xfd,0xc9,0x87,0x3b,0xf1,0x8c,0x7d,0x56,0x84,0x5a,0x04,0x08,0x30,0xf7,0xf6,0x52,0x15,0xba,0xd6,0x7a,0x39,0x8c,0x5a,0xbf,0xeb,0x02,0x6d,0x31,0x30,0x92,0xbc,0xe2,0x07,0x21,0x16,0x96,0x70,0x66,0x00,0xe0,0x04,0xc5,0xa8,0xe4,0x08,0x6d,0x08,0x69,0x35,0xe2,0xb1,0x83,0x03,0x37,0xca,0xff +.byte 0x06,0x37,0x80,0xd5,0x1a,0xc5,0x31,0xfc,0x9a,0xb0,0x8a,0x4b,0x58,0xf3,0x00,0x4e,0xa4,0xfe,0x9e,0xe0,0x60,0xc7,0x3d,0x2c,0x52,0xb5,0x39,0xf0,0xa4,0x88,0x39,0x37,0xa5,0x26,0x8a,0xa3,0xe6,0x31,0xce,0xf3,0xa1,0x54,0x73,0xe7,0x69,0x38,0xef,0xa2,0xab,0x52,0x50,0x1a,0x45,0xcc,0x29,0x9c,0xb6,0xf4,0xde,0xc2,0xfe,0x7a,0x26,0xf7 +.byte 0x7a,0x6e,0x07,0xb6,0xd8,0x3f,0x77,0x60,0x35,0xae,0x6a,0x90,0xd6,0xb8,0x37,0xed,0x73,0x59,0x54,0xd9,0x0c,0x87,0x0e,0x81,0xef,0x69,0xc7,0xd4,0x8f,0x00,0x74,0x57,0x12,0xcf,0xa1,0x76,0xe8,0x45,0xf5,0x9a,0x4f,0xe2,0x5d,0x8a,0x89,0xb1,0x8b,0xea,0x9c,0x0a,0x1e,0x00,0x61,0x3b,0x66,0xbd,0xb5,0xd6,0xff,0xa3,0xff,0x52,0xc2,0x35 +.byte 0x81,0x05,0x08,0x2b,0xf9,0x52,0xda,0x74,0xd1,0x76,0x13,0xba,0x28,0x4c,0xb1,0xb1,0x82,0x5b,0x4e,0x79,0x39,0x22,0xf9,0x96,0x91,0x07,0x4f,0xf9,0xf2,0x25,0x25,0xb1,0x3e,0xda,0x07,0x5c,0x01,0x7b,0xfa,0x3e,0x95,0x92,0x1d,0xf8,0x44,0x06,0xc1,0xed,0x64,0x74,0x14,0x84,0x25,0xee,0x75,0xaf,0xe3,0x7c,0xd3,0xbe,0x7a,0x51,0x6b,0x80 +.byte 0x20,0x43,0x20,0x10,0x5f,0xf5,0xfc,0xd5,0xe8,0x06,0x43,0xad,0x10,0x6b,0x67,0x48,0xca,0xca,0x6e,0x3e,0x1c,0xdf,0x8f,0x7a,0x65,0xc8,0x5d,0xba,0x3b,0x67,0xeb,0x1f,0xc4,0x37,0xad,0xef,0x73,0x9e,0x18,0x8e,0xc1,0x99,0xaf,0x75,0xd3,0x91,0x73,0xc3,0x3a,0xb2,0xfe,0xff,0x30,0x81,0xc4,0x4f,0x37,0x37,0x23,0x96,0x17,0xf1,0xa2,0x9b +.byte 0x55,0x6e,0xd6,0xb3,0xc4,0x98,0xa3,0x32,0xb6,0xff,0x86,0x87,0x77,0xf4,0xad,0x16,0x3e,0xf0,0x24,0x01,0xb4,0x8e,0x1e,0x0f,0x10,0xa4,0x2e,0xe4,0x79,0xe6,0x88,0xe7,0x09,0x58,0x5e,0x97,0xad,0x0d,0x72,0x05,0xbf,0x2f,0x3f,0x99,0xee,0x8a,0x84,0xc3,0x62,0x43,0x52,0x6d,0xab,0x66,0xcf,0x9f,0x4e,0xf2,0x0d,0x13,0x15,0x49,0x84,0x5e +.byte 0x6c,0x8d,0x2d,0xef,0x53,0x16,0xa0,0x63,0xbe,0x05,0xb8,0x9b,0x23,0xca,0xca,0xb8,0xdd,0xbc,0x96,0x68,0x35,0x43,0x63,0x30,0x8e,0xaf,0x53,0x98,0xe2,0x76,0xe8,0x89,0x00,0x29,0x11,0x70,0xd5,0x94,0xbd,0x78,0xff,0xf6,0x88,0x4a,0x3d,0x99,0xd9,0x7e,0xdf,0xa8,0x33,0x92,0xa2,0xc0,0x32,0x42,0x73,0x08,0xd4,0x55,0x5d,0x18,0x93,0xca +.byte 0x7e,0x33,0xe3,0x51,0xc7,0xb7,0x24,0x62,0x69,0xf4,0xab,0x36,0xe3,0x22,0x10,0x9b,0xe0,0xbd,0x48,0x65,0x30,0x9c,0xfe,0xeb,0x3f,0x7f,0x22,0x67,0xcc,0x87,0x5a,0x71,0xb0,0xd1,0x19,0x82,0x1c,0xb2,0xf1,0x73,0xd2,0xd6,0x3f,0xef,0xe3,0x2f,0x25,0xf3,0x8b,0x21,0x4e,0xbf,0x0e,0xc1,0xd2,0x8a,0xbb,0x04,0xde,0xcf,0xd1,0x77,0xba,0xaa +.byte 0xc7,0x41,0x68,0xce,0xc4,0x64,0xf9,0x3a,0x2f,0x1c,0x0b,0x22,0xf8,0x60,0x09,0x76,0x31,0x88,0x62,0x3a,0xf3,0x49,0xe6,0xda,0x4b,0xd3,0xf3,0x35,0xaa,0x56,0x4c,0x2f,0x7f,0x03,0x3e,0xf8,0xcb,0x5e,0xed,0x37,0xa1,0x29,0xe8,0x20,0xf5,0x4a,0x32,0x73,0x30,0xfd,0xd1,0xf6,0xb4,0xa1,0x30,0x87,0xcb,0x21,0x63,0xf5,0x3a,0xad,0x05,0x1a +.byte 0x34,0xf5,0x32,0xf6,0x02,0xf3,0x10,0x52,0xfd,0x86,0x37,0x1f,0x5d,0xe4,0x2e,0x31,0xcb,0xb8,0x4c,0xeb,0xdd,0xea,0x01,0x0d,0x94,0x13,0xa8,0x8f,0xf0,0x52,0x4e,0x0d,0x4f,0xd1,0x24,0xeb,0x0f,0x2b,0xb1,0xaa,0xc5,0xc8,0x52,0xb9,0xbe,0x21,0x48,0x2a,0x53,0x98,0xe4,0x00,0x72,0x64,0xdb,0x44,0x48,0x36,0x60,0xe7,0x81,0xdc,0x25,0x85 +.byte 0x4d,0xaf,0xa8,0x0d,0xfb,0x07,0x76,0x4f,0x6a,0x30,0x3c,0x7c,0x3b,0x36,0xa9,0xf8,0xae,0x81,0x03,0xe9,0x19,0xdf,0xdb,0xd9,0x7f,0x59,0xe0,0xd7,0x50,0x14,0x9f,0x67,0x3d,0xc7,0xdf,0xa8,0x44,0x86,0x29,0x81,0x65,0x44,0x9e,0x37,0x27,0xdd,0x2f,0x33,0x59,0xf7,0xaa,0x17,0x34,0x8c,0x1c,0xa7,0x8e,0x06,0x46,0xf1,0x43,0x87,0xa9,0xb7 +.byte 0x85,0xec,0x92,0x0d,0xdd,0x78,0x55,0x99,0xfb,0x1c,0x66,0x85,0x0d,0x59,0x31,0x00,0xbc,0xd9,0x9b,0xbb,0xfb,0xfc,0xb2,0x36,0x3c,0x34,0x8f,0x4a,0xb6,0x74,0x9c,0x32,0x6f,0x69,0x6c,0x3e,0x68,0x7e,0xec,0xeb,0x58,0x6a,0xf5,0xa2,0xbb,0x04,0x68,0xdb,0x8c,0xf0,0x04,0xba,0xf7,0xf7,0x50,0xd0,0x60,0xba,0x45,0x73,0x0f,0x2c,0x2f,0x97 +.byte 0x58,0xcc,0xa2,0xbe,0xfe,0x5e,0xf9,0x44,0x03,0x8b,0x99,0x56,0xb0,0x4f,0xe1,0xd0,0xa5,0x9f,0xd1,0xfc,0x95,0x44,0x4b,0x01,0x24,0xc0,0x4c,0x91,0xc1,0xb5,0x99,0xe7,0x5f,0x2f,0xcf,0x5d,0x4f,0x64,0x6e,0x54,0x51,0x0c,0x35,0x5f,0xa8,0x7b,0x27,0xa0,0x7d,0xb1,0x90,0xc2,0xdd,0x50,0xef,0x09,0x6f,0xed,0x25,0x6b,0xf5,0x6f,0xc1,0x97 +.byte 0xea,0xd5,0x49,0xf5,0x40,0x60,0xc3,0xbb,0x0d,0x82,0x15,0xa5,0xf7,0xfe,0xa1,0x20,0x13,0x9e,0xbb,0x43,0x58,0xba,0xd2,0xe8,0x89,0xaa,0xfc,0xe0,0x47,0x6b,0xac,0x91,0x8b,0xeb,0x4f,0xf5,0xda,0xf5,0xc8,0x11,0x64,0x7c,0x8d,0x43,0x92,0xf2,0x84,0xeb,0xfb,0x5c,0x1b,0x6b,0x68,0x8e,0x3c,0x66,0xb2,0xd1,0x8e,0x67,0x44,0xbf,0x69,0x3b +.byte 0xb9,0x41,0x78,0x8d,0xc8,0x7b,0x81,0x61,0x70,0x6e,0xe2,0xfc,0xd2,0x96,0x31,0x31,0x2f,0x27,0x90,0xf2,0xc4,0xed,0xbd,0xb5,0x0e,0x91,0x7d,0xd0,0xec,0x3c,0xe9,0xcf,0xf2,0x07,0xac,0x54,0x44,0x9a,0x24,0x41,0xcb,0x2a,0x86,0x30,0x18,0xba,0x65,0x59,0x41,0x00,0x59,0xbf,0x3d,0x01,0x8a,0x51,0xe5,0xd2,0x90,0x8c,0x7d,0xd7,0xad,0x71 +.byte 0xdc,0x45,0x62,0x95,0xf9,0x9f,0xe8,0x55,0x6d,0x48,0x22,0x32,0xcb,0x9a,0x55,0x65,0xe5,0xdf,0xee,0x22,0x99,0x91,0xd7,0xed,0x33,0x04,0x72,0xc7,0xc5,0xb2,0x56,0x5e,0x8f,0x38,0x4b,0xd0,0x61,0x4b,0x4b,0x04,0x4c,0x4c,0x2b,0x23,0x00,0xd4,0x5c,0xdd,0x84,0x8d,0x73,0xf4,0xf7,0xef,0xd5,0xdb,0x2b,0xec,0x54,0x86,0x37,0x01,0x64,0x56 +.byte 0xef,0x73,0x9f,0xb4,0xb6,0xd2,0xf4,0x33,0x93,0xbd,0xd7,0xd9,0x6e,0x8f,0x60,0x85,0xbc,0xa6,0x16,0x3f,0x3f,0xc3,0xd7,0xfc,0xb6,0x82,0xf0,0xe5,0x1e,0x2c,0x51,0x48,0x27,0x50,0x3e,0xdb,0xe6,0x86,0x3b,0xa1,0xfa,0x09,0x39,0x04,0x6f,0xb1,0x85,0xbd,0xda,0x4d,0x2f,0xd1,0x40,0x6f,0x2e,0x2b,0xf2,0x9a,0x4d,0x8e,0xb2,0xc5,0x6e,0x21 +.byte 0xf9,0xdd,0xc9,0x2e,0x81,0x18,0x7b,0x88,0xb9,0x86,0x36,0xe5,0xb2,0xdd,0x19,0xb4,0x7f,0x5d,0xc0,0x20,0x34,0xdc,0x63,0x7d,0x8c,0x80,0x0f,0xe6,0x85,0x14,0xbb,0x87,0x6c,0x3e,0x39,0x53,0x60,0x3d,0xc5,0x46,0x11,0xa3,0x96,0x60,0x6f,0xe9,0xfe,0x59,0xcc,0xed,0x4d,0xdb,0xa3,0xa1,0xf1,0x71,0x0b,0xb0,0x1f,0x89,0x4c,0x32,0x59,0xa5 +.byte 0x7d,0xf7,0x3e,0x5b,0xca,0xa4,0xe1,0xc3,0x50,0xac,0xdf,0x00,0xad,0x45,0x59,0x9e,0x23,0x5f,0x52,0xbd,0x36,0x78,0x55,0xcf,0x90,0x91,0x41,0x14,0xdb,0x76,0x3a,0x43,0x39,0x89,0xe1,0x93,0xc8,0x66,0x91,0xc7,0x42,0x06,0x6f,0xbb,0x35,0x1e,0x07,0x52,0x5a,0xe4,0x41,0x9f,0x65,0xe0,0xdc,0x49,0x8c,0xd3,0x5f,0x16,0x21,0xc9,0xb8,0x8a +.byte 0xc2,0x56,0x91,0xcb,0x18,0x6b,0x38,0x7b,0x3a,0xeb,0x91,0x3c,0x0d,0x6a,0x1f,0xd6,0xc6,0xd7,0x56,0x8d,0xd3,0x76,0x1c,0x9d,0xed,0x3d,0xb6,0x92,0x71,0x6e,0x73,0xc6,0xb8,0xa2,0x1c,0x25,0xb9,0x3c,0xd4,0x41,0xf7,0x8f,0x39,0x60,0xe6,0x27,0xf2,0xc6,0x5f,0x56,0x08,0x7c,0xd3,0x16,0x9d,0x06,0xc0,0xca,0x3d,0xc6,0x61,0xb0,0x21,0x51 +.byte 0x6d,0xca,0x82,0x59,0xe6,0xbb,0x99,0xa2,0x4f,0xfc,0x71,0x66,0x2b,0x4e,0x40,0x62,0x97,0x34,0x73,0x4a,0xe5,0xf0,0x4f,0x4c,0x36,0x4c,0xdb,0x03,0xa9,0x87,0x29,0x21,0x5d,0x91,0x5b,0x89,0xb8,0x3d,0x65,0xc7,0x58,0x0a,0x81,0xb5,0x3e,0x22,0xa1,0x57,0x95,0xbe,0x60,0xf5,0xeb,0xb3,0x49,0xdf,0xd9,0xa2,0x31,0x36,0x5f,0xb2,0xa6,0xf6 +.byte 0x66,0x88,0x88,0x8e,0xa3,0x2c,0xac,0x5e,0xa1,0x33,0x16,0x64,0x08,0x47,0xc8,0xbc,0xc2,0xe9,0xdb,0x73,0x57,0x50,0xd4,0x24,0x01,0x26,0x26,0x04,0x4f,0x8a,0xc0,0x7a,0x97,0x14,0xf2,0xd0,0xbe,0x03,0xea,0x8a,0x25,0xcb,0x98,0xe7,0xbd,0x67,0xff,0x32,0xfd,0x8a,0x7d,0x11,0xe1,0xb2,0x91,0xb5,0xa0,0xb6,0x3c,0x2c,0xb3,0x6e,0x35,0x61 +.byte 0x86,0xbc,0x37,0x15,0xf8,0x3b,0x0d,0x84,0x83,0x69,0x76,0xb0,0xaa,0x8f,0x4f,0xca,0xba,0x54,0xfe,0x42,0xc8,0xba,0x9a,0xd5,0x53,0x69,0x67,0x29,0x23,0x3a,0x6a,0x75,0x97,0xb4,0x29,0x2e,0x62,0xe3,0x95,0x82,0xb3,0xa0,0xa1,0xb7,0xdf,0xc2,0x66,0x4d,0xdd,0x0d,0xda,0xda,0xc2,0x42,0xe0,0x69,0xb1,0xab,0x3c,0x44,0x39,0x11,0x3b,0x0a +.byte 0xd6,0x96,0x2c,0x36,0xb0,0xa0,0xed,0x3d,0x0c,0x63,0x8b,0x90,0xe4,0xb9,0x5f,0x4c,0x27,0x70,0x87,0xb3,0x54,0xe2,0x36,0x74,0x6f,0x3e,0x22,0xb1,0x3b,0x1b,0xba,0xdb,0x1c,0xbd,0x9c,0x6d,0x84,0xbd,0x33,0xfb,0xc0,0x98,0x4c,0xcf,0x7a,0xe8,0x41,0xdb,0x32,0x1f,0xb7,0x64,0x19,0xdb,0x87,0xe7,0xf9,0x52,0x40,0x8c,0xc6,0x89,0x98,0x15 +.byte 0x69,0xde,0xfa,0x29,0x9a,0x0f,0xaf,0xb0,0xad,0x71,0x35,0xab,0xab,0x34,0xe0,0xf4,0x03,0x24,0x6f,0x94,0x38,0x87,0xba,0x68,0xd5,0x1f,0x58,0x88,0x3e,0x12,0x20,0x57,0x43,0xde,0xd0,0xbc,0xaa,0x31,0x8f,0xbc,0x88,0xa0,0xdf,0x5a,0xcc,0xd1,0xba,0x9c,0x18,0x80,0x4e,0x8f,0x68,0x91,0x9c,0x57,0x3b,0x5a,0x62,0xc7,0x29,0x3e,0x49,0xc7 +.byte 0x23,0x26,0xfd,0x9e,0xd0,0xb0,0x4f,0xd4,0xb2,0xa9,0xa8,0x4c,0x66,0x54,0x52,0x75,0x6b,0xbf,0x63,0x76,0x49,0x3b,0xa3,0xb2,0x8f,0x87,0x9d,0xb4,0x8f,0x07,0x3c,0x8e,0xae,0xe1,0x0e,0x9a,0x86,0x90,0x58,0x73,0x8a,0xb3,0xa9,0xab,0xe6,0x27,0xd7,0x70,0x94,0x77,0x12,0xdc,0x71,0xdf,0xcf,0xba,0xdd,0x85,0xfe,0x28,0xaa,0xcd,0xcc,0xe8 +.byte 0x5f,0xd4,0xd8,0x45,0x6f,0x20,0xa8,0x5e,0x40,0x91,0x3b,0xd7,0x59,0x92,0xb8,0x7d,0x2b,0x8b,0x38,0xbd,0xfe,0x7b,0xae,0x5c,0xee,0x47,0x9b,0x20,0xb7,0xf3,0xad,0x75,0xa9,0xe1,0x96,0xc8,0xb2,0x30,0xfe,0x0c,0x36,0xa2,0x02,0xf4,0x3b,0x30,0xfd,0x91,0xfa,0x5f,0xd6,0x18,0x1a,0xcb,0xd2,0x26,0xbb,0x67,0xbe,0x1c,0x99,0xa5,0x4f,0x57 +.byte 0x40,0xb5,0xed,0xd6,0x84,0xfd,0x6b,0x00,0xc8,0xe7,0x18,0x1a,0x9f,0xf7,0x3b,0xd1,0xcc,0x12,0xeb,0x9d,0x61,0xf0,0x8d,0x64,0x08,0x93,0x61,0xc4,0x3e,0xdb,0xda,0x15,0xb1,0xd6,0x2c,0x84,0x2a,0xd8,0xd2,0xa1,0x66,0x4e,0xc9,0xd6,0xbf,0x7e,0xb6,0x22,0xfa,0x35,0x5e,0xdc,0xc0,0x31,0x02,0xb8,0x17,0x46,0x9e,0x67,0xd3,0x6a,0x8f,0x33 +.byte 0x85,0xc3,0xfe,0x36,0xbc,0x6f,0x18,0x8a,0xef,0x47,0xf1,0xf2,0x6e,0x15,0x6c,0xb1,0x4a,0x4b,0x13,0x84,0xd5,0x1b,0xf9,0xa2,0x69,0xcd,0xc7,0x49,0xce,0x36,0x8e,0xe5,0xd5,0x35,0x05,0x7c,0x7f,0xc6,0x15,0x29,0x2e,0x64,0xa6,0x91,0x9d,0xe5,0x9d,0x90,0xe7,0x26,0xec,0x75,0x19,0x58,0x57,0xf2,0x19,0x7b,0x24,0x7d,0x19,0xd3,0x72,0x69 +.byte 0xaa,0xa2,0x8c,0xe3,0x3d,0x38,0xb9,0xf0,0x5b,0xe9,0x3b,0xaa,0x96,0xef,0x2c,0xfc,0xf5,0x13,0xa6,0xa9,0x57,0x8c,0xa9,0x3a,0xc1,0xf0,0x2d,0x57,0x06,0x08,0xe3,0x9c,0xfe,0x82,0x8a,0x6a,0x79,0x5b,0xef,0x2b,0x81,0x83,0x01,0x53,0xac,0xdc,0x79,0x93,0x9b,0x23,0xd4,0xae,0x17,0x6f,0x62,0xaa,0x33,0x41,0xa6,0x31,0x1c,0x7b,0x46,0x2b +.byte 0x17,0xd3,0x6f,0x66,0x73,0x54,0xee,0xa1,0x08,0xee,0x8f,0x0f,0x0e,0x53,0xa7,0x49,0x17,0xdb,0x35,0xaf,0x4e,0x94,0x87,0x8e,0xff,0xf4,0x2b,0x29,0x01,0x45,0xa3,0x0a,0xd9,0x13,0x38,0x09,0x46,0x2c,0x56,0x97,0xd7,0xee,0x24,0x43,0xd1,0x20,0xed,0x38,0xde,0x52,0x13,0x38,0x06,0xd3,0x97,0xc7,0x48,0x8b,0x72,0x0a,0xc5,0xca,0x75,0x2c +.byte 0x04,0x9e,0xee,0x14,0xe7,0xda,0x59,0xc2,0x54,0x7a,0x72,0x55,0x35,0x00,0x93,0xb7,0xb9,0x81,0x01,0x46,0xae,0x43,0x81,0x34,0xd7,0xb4,0x7a,0xfc,0xfc,0x98,0x2b,0x29,0xe5,0x5e,0x9d,0x8e,0xef,0xd4,0x44,0x9d,0x9a,0xbe,0xdb,0x83,0x33,0x18,0x9e,0xbd,0x0f,0x34,0x4d,0xd9,0x34,0xe0,0x2c,0x1f,0x10,0xaa,0x06,0x5e,0x54,0x51,0x72,0xec +.byte 0xbf,0x6b,0x3e,0xb9,0xdd,0x37,0xc3,0xe1,0xbe,0xbe,0x1d,0x86,0xde,0x12,0xca,0x82,0xc5,0xe5,0x47,0xf8,0xbe,0xef,0xb6,0x79,0xd5,0x3c,0x69,0x0a,0x35,0x3e,0xd3,0xf8,0xaf,0x5b,0x8e,0x69,0xff,0xb2,0xf7,0x91,0xc2,0x70,0x22,0x97,0x1c,0x5c,0x56,0x25,0x5a,0xcf,0x31,0x7a,0x37,0xce,0xc7,0xf2,0x98,0xdc,0xb5,0x58,0x71,0x5a,0x60,0xe2 +.byte 0xfe,0x4f,0xf3,0xe2,0x2a,0xca,0x22,0x3e,0x07,0xc2,0xea,0x23,0xc8,0x04,0x97,0x7f,0xca,0xf6,0xf8,0x12,0x06,0x88,0x81,0xee,0xb7,0xdd,0x56,0x9e,0x0f,0x36,0xd3,0x09,0xa8,0x74,0x4d,0x8b,0x8f,0x31,0x64,0xbe,0x9d,0x7b,0x68,0x50,0xc8,0x64,0x40,0x3b,0x0c,0x04,0xb9,0x4b,0x9e,0xff,0x7e,0x5d,0xd8,0x57,0xa0,0xe5,0x6d,0xc2,0x37,0xe7 +.byte 0xd1,0xd9,0x96,0xaa,0x16,0x3e,0xa2,0x9d,0x32,0xe7,0x1e,0x11,0x6e,0x41,0xe2,0xa0,0xe1,0x6f,0x32,0x6d,0xd5,0x38,0x0c,0x27,0x27,0xa9,0xc2,0x04,0xc6,0xe7,0x8d,0x7d,0x7b,0x30,0xbe,0x54,0x6b,0x82,0x37,0x39,0x53,0x54,0xc9,0xac,0xcb,0xd1,0x31,0x79,0xd4,0x7b,0x85,0x07,0xf4,0xf4,0x5d,0x33,0xc7,0x91,0x4e,0xe5,0x13,0x78,0x09,0x42 +.byte 0x29,0x48,0xaf,0x82,0xb1,0x88,0xd4,0xd3,0x57,0x50,0x38,0xa7,0x66,0x41,0x63,0x34,0x2a,0x3c,0x5e,0x8f,0xc4,0xc1,0x00,0xa1,0x22,0xbe,0x5e,0x64,0xb0,0x60,0x9b,0x42,0x9d,0xc6,0x59,0x5c,0xcc,0x29,0x6f,0x64,0x5b,0x5c,0x0f,0xb2,0xae,0x21,0x0c,0x9a,0x6a,0x19,0xb9,0xa6,0x32,0xf8,0xdc,0x82,0xea,0xba,0x27,0xcf,0x42,0xd3,0xde,0x78 +.byte 0xfe,0x9c,0xa5,0x36,0xb6,0x24,0xb6,0x0d,0x5b,0x67,0x6c,0xf5,0x16,0xbf,0x67,0x54,0x4f,0xe4,0x83,0x29,0x75,0x42,0x9a,0xbb,0xd5,0xe7,0x01,0x1f,0xbd,0x80,0x1a,0x7a,0xb6,0xe1,0x2b,0x5d,0x71,0x93,0x00,0xad,0xf6,0x11,0x8d,0x67,0xdc,0x9c,0x8f,0xf0,0x09,0x3f,0xf9,0xa4,0xd6,0xe0,0xdd,0x95,0xea,0xfb,0x71,0x76,0x21,0x31,0x6d,0x48 +.byte 0x0a,0x27,0xa8,0xa6,0x3a,0x7f,0x42,0x6b,0x7e,0xd7,0x6e,0xd5,0x42,0x97,0xad,0x55,0xae,0x26,0x3c,0xde,0x3f,0xaf,0xfd,0x1d,0x6d,0xd3,0xeb,0x84,0xad,0x6d,0xd1,0x4a,0x85,0x1a,0xf7,0x99,0xa4,0xd0,0x48,0xfb,0xf6,0xfe,0xc6,0xea,0x61,0x77,0xe2,0x56,0x87,0xc1,0x36,0x44,0xb4,0xe3,0xd7,0xd9,0x6d,0x3e,0x1b,0xf4,0x72,0x3e,0xfe,0xa5 +.byte 0x47,0xf8,0x3f,0x1a,0x6e,0x43,0xf5,0x67,0xfe,0x90,0x96,0x9b,0x52,0xde,0xab,0xfb,0x45,0x7d,0x93,0xea,0xc3,0x40,0xe1,0x5f,0xcd,0xad,0x3b,0xe9,0x4e,0x36,0xc5,0x38,0xf4,0x66,0xde,0x4b,0xc8,0x2a,0xc3,0xa2,0x3a,0x2a,0xf1,0xd1,0xe8,0x01,0x07,0x37,0xca,0x42,0xbf,0x4f,0xd8,0xc5,0x50,0x93,0x1a,0x01,0x1d,0x51,0x41,0x6e,0xbf,0x68 +.byte 0x93,0x2e,0xdc,0x41,0x23,0xf3,0x13,0xe7,0x09,0xfa,0x39,0x6d,0xee,0x41,0x49,0xbb,0x78,0x04,0xcf,0xc9,0xbb,0x11,0xaa,0x57,0xb5,0x3e,0x4c,0x3a,0x77,0xb7,0x0b,0x38,0x34,0x48,0xd0,0x99,0x20,0x55,0xcd,0x43,0x2f,0x68,0x66,0xb0,0xe6,0x75,0x41,0xe4,0xae,0xfd,0x96,0xe8,0x01,0x4c,0x0b,0x5c,0xbc,0x4f,0x45,0x70,0x08,0x9e,0xf7,0x68 +.byte 0x9e,0xbb,0xe5,0x39,0x20,0x3f,0xbe,0xd3,0xe3,0x95,0xba,0x98,0xd5,0x12,0x2e,0x87,0xd4,0xf4,0x12,0xa2,0xcb,0xd4,0x51,0x53,0x93,0x67,0x06,0xf1,0x21,0x0e,0x92,0x8f,0x9f,0x9e,0x6c,0x16,0xa4,0x2c,0x6d,0xb0,0xd0,0xe1,0x87,0x2f,0x09,0x2c,0x8f,0x4b,0x89,0x1f,0xab,0x66,0xf1,0xcd,0x6e,0x67,0xaf,0x07,0x99,0x18,0x1b,0xda,0xc8,0x65 +.byte 0x81,0xa3,0x37,0x8a,0xad,0xe4,0x1d,0xfd,0x82,0xa0,0xf1,0xe1,0x1e,0x8d,0x0b,0xf7,0x07,0x7c,0xb3,0x10,0xc8,0x5a,0xa9,0xcc,0xc8,0xd0,0x2e,0x5a,0x71,0x45,0x4c,0x30,0xf0,0x10,0xe0,0xf6,0x0d,0x0d,0x11,0xb4,0x83,0x40,0x75,0xee,0xb9,0x24,0x04,0xe3,0xba,0xb3,0xd3,0x00,0x57,0x71,0x98,0xf0,0x4b,0x35,0x8d,0xd8,0x71,0xa0,0xcc,0xaf +.byte 0x46,0x54,0x67,0x65,0x70,0x0b,0x9c,0x61,0xf8,0xd4,0xb2,0x35,0xfd,0xcf,0x2b,0x3a,0x48,0x5b,0x03,0x86,0xd8,0x13,0x48,0x8a,0x55,0xa5,0x4d,0xef,0x42,0x41,0xbb,0x6a,0x8c,0x92,0x46,0x87,0x82,0x09,0x43,0xf3,0x94,0x1d,0x23,0x36,0xfe,0x6f,0xb8,0x9f,0xfa,0xf9,0x92,0x27,0x3c,0xcc,0x47,0x89,0x5c,0x7f,0x81,0x42,0x74,0x12,0x14,0xff +.byte 0x98,0x63,0xc0,0xfb,0x70,0xff,0xc7,0x65,0x5a,0xc3,0xb9,0x74,0x1b,0x71,0x3c,0x2c,0x47,0x79,0x07,0xb9,0x3c,0xc2,0x5f,0x48,0x4f,0xbd,0xaf,0x03,0x05,0x57,0xa9,0x84,0x33,0xc8,0x0d,0xd5,0xac,0x42,0xdb,0x4b,0x57,0x46,0x41,0xf0,0xe4,0x08,0x0d,0xf3,0x43,0x41,0xa5,0x14,0xb7,0xcd,0x64,0x23,0xc9,0xfe,0xff,0x12,0x97,0xc6,0x2f,0x8d +.byte 0x9e,0xf2,0x1d,0x33,0x26,0x3c,0x57,0x17,0xe1,0x7b,0x92,0x3f,0xb6,0xf4,0xd9,0xf8,0xe0,0x37,0xe6,0x18,0x7d,0xa7,0x8a,0x1e,0xe8,0xd8,0x56,0xa6,0x63,0xdf,0xa3,0x99,0x16,0x74,0x48,0x01,0xaf,0x95,0x55,0x40,0xce,0xa8,0x0d,0x30,0x01,0x09,0x40,0xc9,0x9d,0x3d,0xdf,0x4e,0x00,0xe0,0x2a,0xe6,0xdb,0xa2,0x79,0x42,0x57,0xd0,0x3d,0x81 +.byte 0x7f,0x67,0x3a,0xa9,0x63,0xb3,0xd4,0x60,0xa7,0xab,0x54,0x46,0xb0,0xbe,0xb0,0x83,0x72,0xec,0x47,0x0f,0xc7,0xd1,0xed,0x16,0x96,0xbc,0xa5,0x62,0x38,0xdb,0x88,0x2b,0x25,0x26,0x27,0x56,0x7f,0x46,0x39,0xe8,0x4e,0xc0,0x6c,0x62,0xf8,0x80,0x68,0x56,0x8a,0x93,0x51,0x95,0x77,0xe3,0x11,0x7b,0xaf,0xc4,0xcf,0x34,0x5a,0xd5,0x26,0xfc +.byte 0xa2,0x18,0xb0,0xc0,0xa5,0x8b,0x25,0x70,0x40,0x70,0x29,0xc3,0xda,0x80,0x3d,0xe2,0x59,0x49,0x7f,0xdd,0x62,0x6e,0x5a,0xe6,0x27,0x73,0xce,0xb6,0x32,0x37,0x5f,0x73,0x12,0x2b,0x34,0x84,0xff,0x85,0xe3,0xb5,0x93,0x41,0x47,0xc5,0xf5,0x0e,0x21,0xfb,0x24,0x0f,0xdf,0x7b,0xb4,0x29,0x7f,0x67,0x2a,0x38,0x79,0xf0,0x54,0x8a,0x94,0x68 +.byte 0xe2,0x0b,0xb0,0xd4,0xb2,0xa4,0xe4,0xfb,0x3b,0xe6,0xe7,0x59,0x41,0xbd,0xed,0x62,0xce,0x50,0x1a,0x47,0x92,0x92,0x8d,0x80,0xa6,0x05,0x7a,0xb0,0xce,0x48,0x9c,0xb0,0x64,0xea,0xe0,0xa5,0x77,0xff,0xc1,0x82,0x99,0x7b,0xfb,0x74,0x53,0xfa,0x41,0x9a,0x2c,0xb4,0xbb,0xd2,0x26,0xa1,0x80,0x68,0x17,0xaa,0x8f,0x14,0x52,0xb6,0x5d,0xe0 +.byte 0x69,0x5b,0x31,0xc5,0xf5,0x32,0x0d,0xff,0xa4,0x7b,0x28,0x38,0x9b,0x61,0xfc,0xd0,0x92,0xb8,0x6e,0x23,0x8a,0xf3,0xc7,0x85,0x11,0xb8,0xd0,0x19,0xaf,0xca,0xa7,0xb4,0xcc,0xeb,0x5d,0xf6,0xa1,0x1c,0x56,0xdf,0x78,0x7a,0xe3,0x6a,0xa4,0x07,0x71,0xce,0xf1,0xb2,0xd5,0x38,0x3c,0xfa,0xf7,0x7a,0xbf,0x4b,0x43,0xa6,0xb3,0x4d,0xff,0x82 +.byte 0x96,0x46,0xb5,0xec,0xda,0xb4,0x5e,0x35,0x78,0xeb,0x4a,0x7e,0xc5,0x7b,0x05,0xd4,0xdd,0xf7,0xb7,0xf3,0xf0,0x04,0x26,0x7e,0x5e,0xc1,0x23,0xca,0x7f,0x14,0x27,0xac,0xda,0xe7,0xdb,0x31,0x05,0x9d,0xd4,0xda,0x20,0xc7,0x6d,0x9a,0x47,0x14,0x38,0xbd,0x7c,0xfe,0xbe,0x8d,0x42,0x7c,0xba,0x36,0xe2,0x2c,0x26,0xd2,0x46,0xa5,0x6b,0xbd +.byte 0x6a,0x75,0x6b,0x52,0x8c,0x10,0xc6,0x0e,0x76,0x60,0x46,0xcc,0x93,0x54,0xc4,0x6e,0xc7,0x70,0x5b,0xb4,0x81,0x51,0x56,0x03,0x22,0x33,0x21,0xe4,0x36,0xee,0x01,0xc3,0x0d,0x17,0x23,0x15,0xae,0x79,0xbc,0xe6,0x13,0x0f,0xfc,0x77,0xa2,0x06,0xed,0x76,0x4a,0xf7,0x2d,0x99,0xc8,0x5c,0xfd,0xac,0xd0,0x11,0xe8,0xfa,0x55,0x17,0x56,0x63 +.byte 0x3e,0xd5,0x23,0x71,0xf8,0xe9,0x1f,0x62,0x95,0xae,0x7c,0x2d,0xcd,0xb8,0x6e,0xb0,0xfe,0xf3,0xd0,0xba,0x72,0x8e,0xe3,0x95,0x82,0x00,0x85,0xdb,0x25,0xe4,0xf2,0xaa,0xbc,0x8d,0xb9,0x4d,0x69,0xa4,0xcd,0x39,0x52,0x9e,0x10,0xae,0x90,0xf0,0x74,0x2f,0xc6,0x5e,0x01,0x99,0x03,0xd5,0x88,0x59,0xfd,0x1b,0x80,0x56,0x0a,0x04,0x27,0xd9 +.byte 0x04,0x51,0xb0,0xb7,0x7a,0x65,0x79,0xa8,0xe2,0x6d,0x7f,0xb2,0xba,0x37,0x40,0xa0,0xbb,0xaf,0x15,0x46,0x23,0x5f,0x22,0xd0,0x2c,0x6c,0x7a,0x58,0x76,0x6f,0xb8,0x19,0xfe,0xb5,0x3d,0xf0,0x77,0x00,0x6b,0x4c,0x83,0x36,0x90,0xe6,0x57,0x29,0x6e,0x27,0x76,0xd4,0x7d,0x9a,0x6a,0xf1,0xf6,0x1b,0x1a,0x45,0xf5,0xf6,0x2d,0xb8,0x30,0x33 +.byte 0x65,0x51,0x37,0x26,0xbc,0xf7,0xb7,0xf9,0x56,0x05,0x6b,0xd4,0xd6,0x00,0x1d,0x13,0x15,0x45,0x24,0x0d,0x28,0x69,0xc6,0x50,0xe1,0x48,0x48,0x34,0x69,0x31,0x3c,0x58,0x71,0xd6,0x4a,0xd9,0xda,0x0d,0x28,0xbd,0xe9,0x5d,0x5d,0x8a,0x6e,0x71,0xc0,0x8b,0x7a,0xba,0x17,0x8e,0x82,0xcb,0xe9,0x95,0xc4,0x43,0x37,0xd0,0x58,0xed,0xec,0x77 +.byte 0x1e,0x22,0xf0,0xf0,0x7c,0x9d,0xeb,0x64,0x30,0x7b,0xb2,0x7b,0x86,0xdb,0xef,0x92,0x79,0xd9,0x9c,0x1c,0x1a,0xf6,0x98,0x26,0x18,0xa2,0x83,0x45,0x08,0xd4,0x1d,0x84,0xd4,0x28,0x6d,0x1f,0xb5,0x1f,0xab,0x97,0xc9,0x0d,0x1f,0x83,0x34,0x18,0xa3,0x20,0x63,0x60,0x6c,0xf3,0xd8,0xb2,0x0a,0xd9,0x35,0xa6,0xce,0x44,0x50,0xc6,0xf3,0x91 +.byte 0xe3,0x95,0x89,0x49,0x99,0x32,0x1d,0xf2,0x54,0x39,0x09,0xca,0xd1,0xc4,0x7f,0xa1,0x1d,0xce,0x94,0x67,0xf1,0x88,0x04,0x29,0xcb,0x5d,0xf7,0xfa,0xcd,0x69,0x16,0x17,0x05,0xc3,0x93,0x45,0xbf,0xd3,0x74,0x63,0xdc,0xe2,0x84,0xab,0x27,0x60,0x56,0x61,0x72,0x5d,0xdf,0xb4,0xa4,0x0f,0xb0,0x21,0x82,0x9b,0x73,0x0a,0x11,0x22,0x2d,0x65 +.byte 0xa2,0xff,0x29,0x8a,0x19,0x28,0x4f,0x4f,0xdd,0x64,0x0a,0x48,0x35,0x70,0x30,0x9f,0x41,0x4d,0x0c,0x7b,0xa6,0xcb,0x63,0x83,0xd1,0x79,0xfa,0x5f,0xc9,0x9b,0x6e,0x09,0x12,0x87,0xcd,0x1e,0x39,0xd6,0x40,0x08,0x0f,0xfd,0x79,0xc8,0xcb,0x77,0x8f,0x7a,0x52,0x42,0xc0,0xb2,0xc8,0xa0,0x2a,0xff,0xbc,0x60,0x13,0xbc,0x41,0x4a,0xc6,0x8b +.byte 0x08,0xb0,0x9f,0x75,0x87,0xa1,0x75,0x42,0x4b,0x3a,0xf7,0xf7,0x84,0x39,0xa5,0x88,0x25,0x2d,0x4f,0x73,0x4e,0x30,0x27,0x92,0xea,0x93,0x70,0x5c,0xb5,0xeb,0xb0,0x10,0xda,0x0f,0xaa,0xb3,0x3f,0xb5,0x55,0x64,0x65,0xae,0xb5,0xf8,0x0a,0xe4,0x9f,0x86,0x02,0x6f,0x63,0x8a,0x0b,0x6b,0x82,0x85,0x3c,0x6a,0xdf,0x68,0x4c,0x1e,0xe9,0x5c +.byte 0xd0,0x99,0xe5,0x0c,0xfc,0x63,0xfb,0xce,0x2d,0x63,0xd5,0x7d,0x8a,0x7d,0x14,0x22,0xbd,0x71,0x5e,0x79,0x3f,0x44,0x95,0xe5,0x6c,0x58,0x94,0x84,0x41,0x65,0x52,0x94,0x50,0xec,0xd3,0x2a,0x16,0x88,0xdb,0x71,0xb9,0xe4,0xb6,0xbf,0xc5,0x3c,0x48,0x37,0x62,0x32,0x79,0xbe,0x1d,0xdb,0xc9,0x79,0x37,0x40,0x65,0x20,0x62,0x45,0xb4,0xda +.byte 0x24,0xef,0x33,0xf1,0x05,0x49,0xef,0x36,0x17,0x17,0x0f,0xdc,0x65,0xb4,0xdc,0x57,0xc3,0xc6,0x82,0x57,0x08,0xf2,0x20,0x57,0x5c,0x25,0x0e,0x46,0x75,0xa7,0x4f,0x9e,0xa4,0x00,0xf7,0x79,0xb9,0x0a,0xef,0x4f,0x50,0x79,0xf8,0x59,0x01,0xf2,0x74,0x9f,0x16,0x27,0xa5,0xc1,0x32,0xcc,0x58,0xa7,0x40,0xa1,0xa1,0x26,0x80,0x00,0xb5,0x64 +.byte 0x0a,0xd8,0x53,0x1f,0x72,0xf7,0x60,0xf7,0x0a,0xaa,0xdf,0x31,0x95,0xff,0xfc,0xb4,0xca,0xbc,0xf8,0x2a,0x33,0x20,0x04,0x16,0x1a,0xe7,0xeb,0x22,0xd1,0x25,0xa6,0x03,0xc9,0x9e,0x9e,0xca,0x7a,0x46,0x7c,0xcb,0x8a,0x63,0x4a,0xf0,0x1b,0xd0,0x34,0xc3,0xbb,0x89,0xcf,0x16,0x38,0xcb,0xe0,0xce,0xd5,0x0b,0xfd,0x4e,0xbc,0xce,0xba,0x28 +.byte 0x68,0x00,0x2a,0x31,0x52,0xe6,0xaf,0x81,0x3c,0x12,0x09,0x2f,0x11,0x0d,0x96,0xc7,0x07,0x42,0xd6,0xa4,0x2e,0xc1,0xa5,0x82,0xa5,0xbe,0xb3,0x67,0x7a,0x38,0xf0,0x5e,0xd8,0xff,0x09,0xf6,0xab,0x6b,0x5d,0xec,0x2b,0x9f,0xf4,0xe6,0xcc,0x9b,0x71,0x72,0xd1,0xcf,0x29,0x10,0xe6,0xe3,0x27,0x1c,0x41,0xc8,0x21,0xdf,0x55,0x27,0xa6,0x73 +.byte 0xb7,0x45,0xa1,0x09,0x66,0x2f,0x08,0x26,0xf1,0x50,0xe0,0xec,0x9d,0xf2,0x08,0xf3,0x49,0x56,0x50,0xe0,0xba,0x73,0x3a,0x93,0xf5,0xab,0x64,0xb6,0x50,0xf4,0xfa,0xce,0x8d,0x79,0x0b,0xad,0x73,0xf2,0x8c,0x1e,0xe4,0xdd,0x24,0x38,0x1a,0xde,0x77,0x99,0xb8,0x92,0xca,0xc0,0xc0,0xbc,0x3d,0x01,0x6f,0x93,0x3a,0x6e,0xc5,0x28,0x6e,0x24 +.byte 0x9c,0xf9,0xd9,0xcb,0x4b,0xbe,0x9e,0xda,0x0d,0x10,0xfb,0x9d,0x15,0xfe,0x28,0xdc,0xd9,0x09,0x72,0xd3,0x9f,0x6d,0x77,0x14,0x84,0x86,0x56,0x10,0xdc,0x8e,0x6a,0xa7,0x62,0xf0,0x0b,0x65,0x2c,0xa2,0xd1,0x7f,0xae,0x32,0xfa,0x9b,0x46,0x0f,0x12,0x08,0x22,0x8c,0x87,0x15,0x4b,0xc4,0x6d,0x85,0xfb,0x69,0xfe,0xce,0xfb,0xb4,0x3e,0x7b +.byte 0xcf,0x88,0xa7,0x97,0x52,0x56,0xd0,0x9f,0xb4,0x33,0xf9,0x08,0xd2,0x28,0x46,0x5e,0xc4,0xec,0x22,0xc6,0x1e,0x7b,0x34,0x99,0x0c,0x5b,0x04,0x19,0xe2,0xca,0x09,0x11,0x50,0x45,0xcc,0xb2,0x90,0x25,0x51,0x68,0xc9,0x20,0x6c,0x99,0x2e,0xdb,0x5b,0x07,0x91,0xb2,0x69,0xbf,0x3c,0x05,0x50,0xfb,0x21,0x33,0x4f,0x6e,0x18,0x19,0xd5,0xff +.byte 0xce,0x9d,0xb5,0x7f,0xd4,0xd5,0x8f,0x41,0x26,0x1f,0xa1,0x4c,0x34,0xd3,0x98,0x08,0x5d,0xb5,0x56,0xa7,0x04,0x63,0x76,0x7d,0xae,0xee,0xea,0xbf,0x69,0x8d,0xff,0xa1,0x62,0x86,0x19,0x7b,0xe5,0x08,0x7a,0xe5,0x9e,0xe5,0x44,0xca,0x24,0xde,0x00,0x43,0xc7,0xcd,0xc8,0x5b,0x21,0x00,0xb9,0x56,0x3f,0xba,0xef,0xcd,0xc4,0xe0,0xd7,0x90 +.byte 0xa7,0xe1,0xf9,0x83,0x2c,0x1d,0x8d,0xc3,0x1b,0xa2,0xab,0xcd,0x7d,0xbc,0xd1,0x2b,0xf8,0x30,0x9e,0xb6,0x95,0xe0,0xd1,0xe6,0x81,0x89,0xa7,0xda,0xf0,0x54,0xc1,0xcb,0x3a,0x85,0x85,0xb5,0x03,0xb4,0x8c,0x7d,0x98,0x16,0xa8,0x83,0x29,0xbb,0x1c,0x1d,0xe1,0x7e,0x0e,0xb5,0x04,0xba,0xbf,0x89,0x30,0x3c,0x44,0xa2,0xc5,0xbf,0xf1,0x70 +.byte 0xdb,0xf3,0x13,0xf4,0x44,0xac,0x63,0xc4,0x9c,0x93,0xa9,0x13,0x1b,0xf1,0xcc,0x16,0x66,0xdf,0x56,0x10,0x88,0x0c,0x76,0xab,0x43,0xcb,0x75,0xf8,0x4f,0x04,0x26,0x95,0x4c,0x6d,0x55,0xc8,0xbd,0xf8,0x94,0x0f,0xca,0x29,0x2b,0xcd,0xce,0x05,0x1e,0xea,0xae,0x02,0x01,0x8b,0x60,0x6a,0x6a,0x03,0x14,0xe5,0xa7,0xdf,0x9e,0x9f,0x94,0x92 +.byte 0x41,0x2c,0xf0,0x1a,0xa7,0xc2,0xc1,0xfc,0x11,0xf3,0x00,0xe1,0xfc,0x7a,0x97,0xc0,0xe1,0x81,0x90,0x3f,0xea,0x1e,0x7f,0xf8,0xb0,0xd8,0x4c,0x2d,0xdc,0x83,0xfa,0x27,0x8b,0xf2,0xef,0x3b,0x3a,0x44,0xdc,0xa5,0xa9,0xd5,0x24,0x5f,0xb1,0xdd,0x1d,0x3f,0x03,0x76,0x3b,0x92,0x0d,0xb4,0x84,0xa4,0x5b,0xef,0x9f,0x89,0x9d,0xef,0xff,0xcf +.byte 0xc2,0x28,0x3b,0x9d,0xd2,0x28,0x75,0x3e,0xdc,0x14,0x79,0x7c,0x0c,0xaa,0x6c,0xf2,0x05,0x9d,0x27,0x01,0x15,0x19,0x60,0x48,0x5a,0x7d,0x04,0x27,0x2d,0x82,0x92,0x3e,0x0b,0x62,0xd7,0x5a,0xfb,0x72,0xfb,0xdd,0x43,0xfa,0xf4,0x6f,0x16,0xd2,0x8f,0x8f,0x21,0xdc,0x81,0x48,0x7a,0xe8,0x39,0xd5,0xdf,0x54,0x0f,0xe1,0xbe,0x65,0xc9,0x49 +.byte 0x98,0xb1,0xff,0x8d,0x52,0x31,0x6a,0xcd,0x5e,0x83,0x17,0x41,0x93,0xcd,0x23,0x76,0x18,0xe9,0x82,0x71,0x15,0xb7,0xd8,0xde,0x0d,0x57,0x8b,0x90,0xe6,0xf4,0x57,0xc1,0xfd,0x3d,0x0d,0x6a,0xae,0xd1,0xd6,0x02,0x3e,0xb9,0x82,0xb2,0x82,0x80,0x48,0xa4,0x14,0x29,0x80,0x55,0x1d,0xaf,0x3e,0xf8,0x7e,0x36,0x5f,0x77,0x4c,0x73,0x6c,0x35 +.byte 0xd2,0x7c,0x36,0xca,0x2f,0xec,0x1e,0x3f,0x74,0xee,0xa5,0xe7,0x7d,0xce,0x81,0xf1,0xd5,0xc1,0xb3,0xaf,0x90,0x2c,0xc6,0x5b,0x81,0x37,0x85,0x98,0x78,0x3c,0x4f,0x2a,0x55,0xea,0x06,0x30,0x77,0x73,0x97,0x39,0x75,0xcf,0x4a,0x9b,0x55,0xb8,0x64,0x5c,0x86,0xfd,0x26,0x3e,0x8d,0x68,0xd2,0x70,0xe8,0xd7,0x99,0x57,0x6f,0x96,0x47,0x6d +.byte 0xa7,0x1a,0x0e,0x85,0xcd,0x00,0xa5,0x3e,0x11,0xec,0x76,0xd2,0x47,0x26,0x71,0xda,0x5c,0xf4,0xb1,0xd5,0x23,0xe1,0x62,0x71,0x43,0x30,0xa7,0x95,0xf6,0xc1,0xcf,0x8a,0x1b,0x75,0x53,0x39,0x6d,0x9d,0x18,0x7c,0xe3,0x48,0x27,0x33,0x1c,0x38,0x45,0xdf,0x75,0x22,0x05,0x6d,0x81,0x5d,0xfc,0xeb,0x0e,0x05,0x26,0x45,0x81,0x9f,0xce,0x0f +.byte 0xc9,0xdd,0x95,0x11,0x04,0x47,0x40,0xa4,0x07,0x3b,0x52,0x92,0xe0,0x91,0xdb,0xdd,0x3c,0x9f,0xd3,0xa1,0xb7,0xf9,0xeb,0xd6,0x6d,0x64,0x88,0xe9,0xf5,0x4e,0x98,0x8e,0x7b,0xd3,0xec,0xc0,0x22,0xe0,0xf2,0x14,0xf2,0x20,0xa2,0xa3,0xb3,0x0d,0x75,0x1a,0xbb,0xde,0x4a,0x41,0x04,0x43,0x0d,0xd9,0xd0,0x1d,0x73,0xc8,0x67,0x8e,0x58,0xe5 +.byte 0x4b,0x28,0x4d,0x8f,0x2f,0xab,0x1a,0x4a,0xfc,0x7c,0xd1,0x27,0x3e,0x4a,0x10,0x6a,0x5f,0x55,0x3a,0xf7,0x63,0x14,0xe9,0xad,0xb4,0x95,0xef,0x3d,0x5c,0xc3,0x7d,0xe4,0xb7,0x15,0xd7,0x0b,0x68,0xf0,0x23,0xa8,0xd4,0x8e,0x27,0xf6,0x55,0x11,0xbc,0xc0,0xff,0x3e,0x2c,0x24,0x59,0xb7,0xb7,0xb5,0x0b,0xd2,0x99,0xa5,0xd5,0xe2,0x24,0x33 +.byte 0x21,0xb8,0x96,0x48,0x18,0x94,0xb5,0xb2,0x50,0x5e,0x04,0x24,0x86,0x17,0x62,0x1e,0xc9,0xf8,0x22,0x6a,0xd0,0xec,0xc5,0xbc,0x90,0xf7,0x55,0xcf,0x3f,0x4c,0x7c,0xf7,0x51,0x19,0x95,0xa4,0x81,0x38,0x0c,0xa5,0x58,0x22,0xf3,0x10,0x05,0x05,0x44,0xbf,0x7e,0x2a,0xbd,0x5f,0x79,0x56,0x08,0xd5,0x68,0xea,0x85,0xa1,0xeb,0x0b,0xe1,0xd4 +.byte 0xfd,0x3a,0x38,0xd2,0x5a,0x49,0x17,0x9a,0x58,0x8f,0x52,0xf5,0xf4,0x7b,0x1f,0x58,0xa8,0xc0,0x1c,0x46,0x38,0xa6,0xe4,0x7d,0xcc,0x88,0x97,0x10,0x2b,0x5e,0x61,0xf5,0x73,0x7d,0x79,0x1b,0x53,0xf1,0xac,0xb4,0x3f,0xbd,0x9d,0xb6,0xc2,0x57,0xd5,0x84,0x4d,0x60,0xd6,0x45,0x56,0xa1,0x36,0x28,0xf5,0x74,0xc6,0x29,0xd7,0xc9,0x63,0x5e +.byte 0x7c,0x97,0x46,0xde,0x56,0x3f,0xd8,0x8e,0x75,0x29,0x87,0xe7,0xd1,0x24,0x78,0x26,0xdc,0x17,0x97,0xc9,0xf0,0x8e,0x95,0xbc,0xe5,0xfe,0xe3,0x3a,0x75,0x70,0x52,0xa9,0x31,0x97,0x79,0x3a,0xc2,0x53,0x6a,0x73,0xe2,0x76,0xf8,0x85,0xe6,0x0d,0x85,0x9b,0xfc,0x72,0x08,0x2a,0xa5,0x8e,0x42,0xb2,0x7c,0x8d,0x8b,0x28,0x4b,0xf5,0xcb,0x66 +.byte 0x80,0x46,0xb3,0x87,0xdf,0x38,0xa7,0x08,0xc8,0xea,0x85,0x0e,0x6f,0x13,0xe0,0x57,0x99,0xc6,0xb8,0xed,0x9c,0xb0,0xa9,0x89,0xd7,0xc5,0xa9,0x71,0xfd,0x8a,0x21,0xb1,0xec,0xc8,0x65,0x78,0x72,0xc6,0x77,0x69,0xd4,0x0b,0x47,0x4d,0x79,0x93,0xcf,0x2a,0x34,0xf1,0x1b,0x0e,0x6f,0x0d,0xd1,0xbb,0xe7,0xd7,0xb5,0x6f,0x57,0x01,0xd4,0xcd +.byte 0x56,0xbe,0xf0,0xd9,0xe2,0x8e,0x0e,0xb8,0x3d,0xdb,0xf6,0x97,0x39,0x0b,0x3e,0xe2,0xb2,0xa3,0x93,0x0b,0x74,0xe5,0x6a,0x21,0x04,0x29,0x5a,0x3e,0x07,0x9c,0x11,0x4e,0xfe,0x01,0x6e,0x96,0x1e,0x8f,0xe0,0xfe,0x24,0x24,0x7e,0x04,0x2f,0x65,0xf4,0xe2,0x1f,0x36,0x56,0x43,0x3a,0x6c,0xeb,0xd7,0x20,0x13,0x71,0x45,0x6a,0xe8,0xc6,0xfa +.byte 0xba,0x26,0x6f,0x7d,0x9a,0x62,0x76,0x34,0x7d,0xed,0x47,0x71,0xd1,0x0e,0x5b,0x04,0x39,0xd6,0xc0,0xe5,0xa5,0xd8,0xf5,0x73,0xf9,0xf4,0xc2,0x2a,0x54,0x25,0x67,0xdf,0x83,0xa3,0xcd,0xfd,0x1e,0x46,0x87,0x06,0x17,0x6d,0x78,0x8e,0x0c,0x7b,0x08,0x06,0x1b,0xd9,0x5d,0x3d,0x03,0x40,0xbc,0xe7,0x02,0xc4,0xe0,0xe0,0x49,0xb2,0x6c,0x6f +.byte 0x97,0x76,0x0f,0xc7,0x14,0xd8,0x7c,0xc0,0xad,0x8a,0xbb,0xbc,0x2a,0x7e,0x68,0x46,0xcd,0xa7,0x26,0x16,0x77,0x1b,0x89,0x38,0xd8,0x2a,0x69,0x43,0xc4,0xaa,0x0d,0xf6,0xd1,0x65,0xda,0x41,0x75,0x77,0xcd,0xf7,0xd2,0x38,0x9c,0xdb,0x81,0x17,0x27,0x2f,0xba,0x2e,0xa5,0xb5,0xbe,0x05,0xe8,0xdd,0x5f,0xa9,0xad,0xbe,0xb2,0x0e,0x0b,0x69 +.byte 0xb6,0x8d,0xd2,0xf2,0xde,0x76,0x32,0x26,0xd9,0x06,0x1d,0x42,0x26,0x8c,0xf7,0xca,0x4c,0xe1,0x59,0x82,0x6c,0xea,0x96,0x70,0x39,0xb8,0x0d,0xf3,0x67,0x9d,0x5e,0x94,0x99,0x77,0xf2,0x0a,0x9a,0xde,0xa5,0xd2,0xe1,0xaa,0x91,0x85,0xc7,0x0f,0x92,0x35,0x04,0xd3,0x7a,0x13,0xfa,0xf2,0x86,0x5a,0x38,0xd1,0x7f,0x10,0xd8,0x30,0x0e,0x33 +.byte 0xe3,0xa0,0x8a,0xad,0x4f,0x6c,0x24,0xdd,0x9d,0x1c,0x4e,0xff,0x4c,0xfc,0x74,0x01,0xab,0x08,0x6c,0xe6,0x4c,0x78,0x75,0xc9,0x67,0x83,0x1f,0x75,0x22,0xb0,0x7c,0x44,0xa0,0xa1,0xee,0x4e,0xf6,0x3e,0xd3,0x35,0x70,0xbe,0x36,0x1e,0x90,0xa6,0xaa,0x64,0x67,0x7f,0x52,0x84,0xd9,0x27,0xab,0x37,0x30,0x68,0x46,0xcc,0x0e,0x57,0x58,0x6f +.byte 0xdb,0xb2,0x5f,0x24,0xf7,0xeb,0x97,0xea,0x64,0xec,0x6c,0x1e,0xe1,0xc4,0x72,0xfb,0x00,0xa7,0x62,0xa0,0x59,0xb9,0x17,0x8a,0x33,0x32,0x59,0xb8,0xbe,0x84,0xd4,0x62,0xb7,0xf6,0x35,0xd4,0xf1,0x1c,0xdb,0x7e,0xa6,0xbc,0x2c,0x54,0x3c,0xf5,0x63,0x4a,0x22,0x26,0x58,0xa0,0x35,0x98,0xa7,0x32,0xb2,0xa0,0x2b,0xd5,0xfa,0x2f,0x9b,0xb4 +.byte 0xea,0xd6,0x58,0x61,0xb2,0x24,0x45,0x46,0x1e,0xac,0x79,0xa4,0xf7,0xc1,0x13,0x2f,0xf5,0x6b,0xfa,0x70,0x50,0x2b,0x83,0xee,0x7c,0xc1,0x55,0x27,0x7b,0x4f,0xa6,0x0a,0x72,0x26,0x82,0xcd,0x4d,0xe2,0xe8,0x45,0xe6,0xd7,0x39,0x7e,0xed,0x35,0xdf,0x9e,0xb1,0x41,0x55,0xa2,0x5d,0x68,0x4b,0x0b,0xd1,0x73,0x5a,0x2b,0x81,0x35,0x28,0xfc +.byte 0x64,0x08,0xd7,0xc4,0x9f,0x30,0x77,0x3d,0x9d,0x80,0x15,0x67,0x9a,0x84,0xe4,0x34,0xea,0x8c,0xf7,0x73,0x9e,0x33,0xb4,0x09,0x33,0xbd,0xd8,0x82,0x43,0x7d,0xc5,0x1f,0x0e,0x7b,0xa0,0x53,0x59,0x20,0x12,0x57,0xed,0xda,0xc7,0x19,0x8e,0x62,0xe4,0x09,0xc1,0x4b,0x20,0x32,0x9e,0x18,0x11,0x1c,0x42,0x49,0x62,0x76,0xa8,0x83,0x72,0x11 +.byte 0x45,0xe7,0xb5,0x60,0xa7,0xc0,0x07,0xbd,0xb4,0x7c,0xc6,0x5c,0x03,0x34,0xa3,0x85,0x47,0x24,0x75,0xd2,0xab,0x46,0xbb,0xc7,0x0d,0xcd,0x40,0xe2,0x5e,0x5b,0xa7,0x98,0x67,0xe4,0xe2,0x02,0xe9,0xdc,0xd7,0xc2,0xaf,0x90,0x43,0x94,0xfe,0xf3,0x53,0xc1,0x10,0x28,0xa7,0x90,0xba,0x73,0x57,0x0c,0x4d,0x6d,0xbd,0xda,0x81,0xd5,0x90,0xce +.byte 0x02,0x40,0xb3,0xf0,0xec,0x50,0x82,0xc9,0xfb,0xf1,0x22,0x6d,0xc8,0xd2,0x7b,0xed,0x0b,0x43,0x7e,0x0b,0x60,0x9b,0x69,0x9e,0x58,0x26,0xc3,0x9f,0x6b,0xd0,0x31,0xeb,0xb7,0x0a,0xf3,0x9a,0x9a,0xf5,0x72,0xcf,0x29,0xc8,0x19,0x08,0x4d,0x67,0xd5,0xa1,0x8f,0x68,0x0e,0xee,0x59,0x14,0xf8,0x86,0xc0,0x08,0x5a,0x56,0xfe,0x6a,0xb7,0xac +.byte 0x78,0x8d,0x77,0x39,0x5e,0xb1,0x01,0x4d,0x31,0x81,0x56,0xdc,0x5b,0x10,0xda,0x4d,0xd2,0xfd,0xfc,0xa3,0xe3,0xaa,0x46,0x29,0x1a,0xea,0x9c,0x47,0x1b,0xd0,0xa6,0x84,0x1f,0x71,0x1a,0xd3,0x35,0x59,0x7f,0xef,0xf7,0x81,0x39,0x7a,0x9f,0x4a,0x01,0x4d,0x46,0xcf,0xa4,0x6a,0x9c,0x7e,0x07,0x8b,0x98,0x17,0x49,0x5c,0x46,0xac,0xc8,0xfd +.byte 0x1c,0xaf,0x91,0x30,0x0c,0x36,0x63,0xef,0x69,0xd3,0x47,0xf4,0x76,0xc1,0xf7,0x40,0x03,0x98,0x9e,0xcb,0x61,0x65,0x46,0x45,0x1c,0x1b,0xfd,0x13,0x36,0xe9,0x19,0xbf,0x2b,0x59,0x51,0xe8,0x04,0x44,0xe3,0xc2,0x4b,0x66,0x78,0x69,0x66,0xa3,0x1a,0xe5,0x2a,0xad,0xf8,0xc5,0x0f,0xb7,0x3e,0xe8,0xab,0xe0,0xe4,0xd9,0xc2,0xb8,0x61,0x5b +.byte 0xef,0x6b,0x4d,0x5f,0xb8,0xdc,0x06,0xa5,0xce,0x08,0x5b,0x1f,0xf4,0x29,0x4d,0x0a,0x3e,0xb3,0x60,0xf4,0x63,0x3c,0x70,0x5d,0x02,0x9c,0x55,0x5e,0x5e,0xd1,0x9b,0xed,0x20,0x75,0x54,0xa1,0x8e,0xae,0xce,0x5a,0xb2,0x2d,0xe4,0xc3,0x9b,0x7d,0x72,0xce,0x7c,0x0c,0xa9,0x99,0xa4,0x12,0xaa,0x31,0xe9,0x61,0x47,0x8a,0x41,0x93,0xd5,0x69 +.byte 0xc5,0xf3,0x9f,0xf4,0x97,0x69,0x64,0x6f,0xf9,0x5b,0xbf,0x58,0xf6,0x3b,0x3e,0xd6,0x93,0x94,0x89,0xcc,0xc0,0x25,0x7d,0xf8,0x40,0x9e,0xb2,0xc8,0x75,0x9d,0x4d,0xf0,0x5f,0xa5,0x3d,0x38,0x67,0xea,0x8d,0x1b,0x60,0x5e,0xfe,0xa8,0x26,0xb9,0xed,0xc0,0xe9,0xc8,0xec,0xb1,0x77,0x0f,0xf2,0xaa,0x77,0x2a,0xcd,0xa8,0x70,0xb7,0xda,0x60 +.byte 0x49,0xb3,0x01,0x95,0xc8,0xac,0x71,0x6a,0xd0,0x49,0x67,0x2a,0x04,0xfc,0x55,0x38,0x08,0x37,0xd9,0x21,0x37,0xce,0x41,0xaf,0x7c,0x33,0xdd,0xcd,0xe0,0x92,0x27,0x38,0x63,0x77,0xea,0x86,0x04,0x99,0x4e,0x61,0x8b,0x8f,0xfe,0x4e,0xc1,0x16,0x6c,0x89,0xac,0x1f,0x0b,0x67,0x75,0x49,0xf4,0xdb,0x6d,0xd3,0xb8,0x1d,0x9c,0xb2,0xe6,0x98 +.byte 0x81,0xae,0x3f,0xe0,0xdd,0xda,0xfa,0x4c,0x8b,0x30,0x18,0x88,0xa1,0x1d,0xa1,0x18,0xb8,0x28,0xc2,0x04,0x6a,0x80,0x02,0x5a,0xe6,0x04,0x85,0xfa,0x54,0x38,0x45,0x64,0xe1,0x50,0x4a,0x38,0x4c,0x85,0xf7,0x00,0x0c,0xd3,0x16,0xcb,0xfa,0x38,0xb4,0x1b,0x6a,0x95,0x3d,0xc3,0x24,0x79,0x0e,0x3e,0x81,0xe6,0xc3,0xd9,0xdb,0x05,0x19,0x7c +.byte 0xb4,0x4d,0xef,0x71,0x22,0x53,0x97,0x8a,0xc9,0xe3,0x69,0x20,0x5b,0x83,0xb1,0x44,0xd7,0xd1,0x1e,0x87,0xa7,0xbf,0xe4,0x84,0x68,0x9c,0x77,0xfe,0x83,0xdb,0x7a,0x53,0xa8,0x53,0x1f,0xc7,0xd1,0x6a,0x26,0x87,0x71,0x06,0x23,0xa7,0xe0,0x18,0x5d,0xfa,0x8c,0xa7,0x24,0xee,0xf6,0x74,0xab,0x17,0xd3,0x46,0x33,0xe9,0xc3,0xcd,0xa6,0xaf +.byte 0xcf,0xa1,0x60,0x75,0x7b,0x77,0xc3,0x58,0xa2,0xe8,0x87,0x7b,0x4b,0x57,0xb1,0x96,0xc1,0x91,0x6d,0xbf,0x71,0xb3,0xbf,0xe2,0x62,0x86,0x72,0xa9,0x01,0x64,0x62,0x32,0x33,0xc8,0xa4,0x26,0x7d,0xfa,0x0d,0xd4,0xd8,0xc3,0xaa,0xc0,0xc8,0x7c,0x51,0xe8,0x10,0x08,0x6f,0xf6,0xc1,0x46,0x89,0xc4,0xd2,0x00,0x1d,0x14,0x05,0x89,0x64,0x52 +.byte 0xcd,0x1f,0x97,0x0b,0x1d,0x94,0xbe,0x9d,0xa0,0x6b,0x03,0x9b,0x83,0x87,0x38,0x0f,0x65,0xdd,0x6a,0xaf,0xf1,0x22,0x74,0x7e,0x11,0xa0,0xdf,0x1e,0x95,0xef,0x1a,0xdc,0x8b,0x29,0x4a,0xbe,0xfd,0x2f,0xc7,0x48,0x94,0x3f,0xb9,0x8c,0x8e,0xe1,0x0c,0x54,0xa6,0x2f,0xa5,0x2b,0x71,0xdd,0x16,0x68,0x91,0x35,0xd0,0x22,0x48,0x1f,0xf2,0xe2 +.byte 0xe8,0x57,0x83,0xd7,0x49,0x43,0xfd,0xf9,0x77,0xb5,0xfa,0x70,0x19,0xeb,0xae,0xf6,0x31,0xfe,0xd6,0x81,0x6c,0xcc,0x14,0x28,0xa6,0x9f,0x74,0x56,0xc5,0xf6,0x51,0xba,0xc8,0xbd,0x32,0x80,0x5f,0xdb,0x28,0x3f,0x4a,0x55,0x01,0xe1,0x39,0xf5,0x9c,0xda,0xb3,0x42,0xee,0x43,0x17,0xc3,0xc7,0xf5,0xd1,0xda,0xd2,0x2e,0x56,0xcf,0x77,0x0e +.byte 0xdd,0x72,0xcf,0xe5,0xab,0xfb,0xd6,0xa2,0x6c,0x03,0xa6,0x77,0x25,0xf8,0x2a,0x8c,0xfa,0x6f,0x45,0x79,0x59,0x84,0x92,0xd1,0x00,0x58,0xc7,0xb8,0x95,0x4d,0xc8,0x49,0xad,0xe0,0x1e,0x64,0x47,0x00,0xfb,0x93,0x7f,0x3e,0xf1,0x65,0x70,0x47,0x64,0xbb,0x36,0x63,0xe3,0x09,0xcb,0xdb,0x5a,0xd1,0x72,0x83,0xfd,0x15,0x91,0xa2,0x03,0x81 +.byte 0x04,0x98,0x45,0x0f,0x7f,0x23,0x48,0x6c,0xb1,0x2d,0xd0,0x2c,0x61,0x52,0x1b,0x4a,0x52,0x08,0x92,0xe1,0x7a,0xf1,0x8c,0x1f,0x1f,0xdf,0x1c,0xfd,0xd9,0x46,0x99,0x71,0x05,0x58,0x71,0x82,0x5c,0x05,0xa0,0xb2,0x6a,0x50,0xd2,0x6e,0x35,0xf4,0x6c,0xfb,0x50,0x99,0xb3,0xc1,0x2b,0x05,0xaf,0x02,0xe5,0x18,0xfa,0x74,0x09,0xcc,0xa5,0x2c +.byte 0x26,0xfd,0xc5,0xe7,0x2c,0x96,0x0f,0xa4,0x7c,0x88,0xc6,0x7f,0xf9,0x74,0x9d,0x1c,0xe5,0xd2,0x27,0xf0,0xae,0x5b,0x4c,0xbf,0x0a,0x99,0x2e,0xaa,0x54,0xba,0x0d,0x75,0xd9,0x48,0x76,0xf3,0xe9,0xd9,0x01,0xbe,0xaa,0x97,0x09,0xfe,0xb2,0x4a,0xcb,0x55,0xd0,0xe1,0x58,0xec,0x31,0x0c,0xd9,0xdf,0xd9,0x01,0xf9,0x3c,0x28,0x40,0x91,0xbb +.byte 0x4d,0x2d,0x88,0x60,0x31,0xc7,0xc9,0x1d,0xaf,0x22,0x44,0x21,0x05,0x06,0xdd,0x07,0x60,0x29,0x7d,0x49,0x30,0x9d,0x35,0x1d,0x9f,0x37,0xbd,0x32,0xb2,0x21,0xa6,0x4f,0x89,0xd8,0xe6,0x85,0x44,0xcf,0x13,0x12,0x4f,0x5f,0x50,0x71,0x01,0x39,0xff,0x6e,0xa0,0x07,0xff,0xf0,0xa6,0x3b,0x39,0x59,0x17,0xae,0x93,0xb2,0x86,0xcc,0xe5,0x59 +.byte 0x5a,0xf2,0x82,0x62,0xc6,0x8d,0x13,0x2f,0x6b,0x92,0x28,0xbe,0xd1,0xc0,0xf6,0xc9,0xe1,0xd6,0x98,0x94,0x65,0xd4,0x2a,0xdb,0x37,0xb1,0xd3,0x83,0xf2,0xaa,0xa5,0x00,0xf9,0x08,0xe6,0x22,0x38,0x30,0xb6,0x49,0x8d,0x9d,0x1c,0xa4,0xf7,0xdb,0x3c,0x6f,0x75,0x08,0xa0,0xda,0xe9,0xc0,0x01,0x54,0x09,0x68,0xc6,0x7c,0x5b,0x4d,0x88,0x71 +.byte 0xa7,0x2f,0xb3,0x50,0x18,0x4a,0xfb,0x55,0x29,0xf2,0x56,0x1d,0x4c,0x12,0x22,0x1c,0x54,0xd2,0x63,0x67,0xfa,0xe9,0x5b,0x74,0x3b,0x38,0xf6,0xa0,0x85,0x63,0x1c,0x41,0x6a,0x6d,0x71,0x1d,0xb1,0x39,0x28,0x88,0x96,0x9b,0x9c,0x50,0x9e,0x57,0x4e,0xf5,0xa7,0xf4,0x17,0xc6,0xca,0x42,0x84,0x83,0xca,0xa4,0x28,0x72,0x08,0x74,0x62,0xe1 +.byte 0xf0,0x73,0xc5,0x86,0x6c,0x76,0x9d,0xd3,0xa6,0xb8,0x5d,0x73,0x1b,0x02,0xe2,0x69,0x8b,0x59,0xd6,0x6a,0x53,0xe9,0x13,0x88,0x41,0x95,0xe9,0x97,0x5f,0x07,0x62,0xa5,0x21,0x97,0x7e,0x5e,0xc2,0x2c,0xc7,0xaf,0x0a,0xdb,0x9e,0x4f,0x44,0x4b,0xd6,0x3d,0xc0,0x24,0x38,0x50,0x47,0x98,0xa3,0xfc,0xda,0xfc,0xae,0x0e,0x2b,0x9b,0x53,0x0f +.byte 0x6b,0xb1,0x2f,0xd5,0xd7,0x68,0xc9,0xab,0xb9,0xff,0x7f,0x54,0xd6,0x2f,0x88,0xbc,0x5e,0x6a,0x22,0x49,0x0f,0x98,0xbe,0x1f,0xef,0x3e,0xcc,0xa2,0x72,0x6b,0x16,0xbe,0xe8,0x5f,0x0e,0x36,0xa2,0x68,0xe0,0x65,0xd9,0x7c,0xdc,0x8c,0x6a,0x66,0xf0,0x6a,0xfc,0x2b,0x85,0x28,0x2a,0x1a,0xfc,0x92,0x64,0x3d,0x38,0x5b,0xc1,0x0c,0x68,0x45 +.byte 0x94,0x85,0x58,0x82,0x99,0xfc,0x20,0xdd,0x62,0xae,0xed,0x35,0x7c,0x02,0x16,0x9b,0x00,0x8a,0x44,0x02,0x80,0x00,0xca,0x7d,0x95,0x03,0x5d,0xa6,0xec,0xe1,0x0c,0x50,0x34,0x61,0x55,0xee,0xb5,0x11,0xff,0xc3,0xaa,0xf2,0xbc,0xa3,0xa9,0xc7,0x6b,0x16,0xab,0x56,0x7b,0x55,0x54,0x95,0x88,0x15,0x15,0x6a,0x2c,0x97,0xd7,0x7c,0x26,0x65 +.byte 0xaf,0x8d,0xd1,0x05,0x57,0xb2,0x63,0xd1,0x22,0xf7,0x7d,0x77,0x54,0x6c,0x87,0x03,0x1f,0x0e,0x2b,0xae,0xa6,0xa4,0xb5,0xd6,0x95,0x34,0xd0,0x62,0x4e,0xfb,0xcb,0xee,0x01,0xc1,0xf7,0x36,0x94,0xa6,0x54,0x94,0x90,0x0e,0x45,0x9c,0x95,0x89,0x96,0x88,0x32,0x90,0x27,0x48,0xc5,0x96,0xf0,0x7e,0x7f,0x69,0x99,0xdf,0x7b,0xfb,0x2b,0x7b +.byte 0x38,0x10,0x6b,0xd1,0x1a,0xfb,0xf2,0xcd,0x2d,0x8b,0x47,0x21,0xca,0x92,0x64,0x28,0xd1,0x53,0x1d,0xed,0xa7,0x7d,0xa4,0x88,0xab,0xd0,0xfe,0x9b,0x2b,0xf8,0x48,0x94,0x8d,0xd5,0xfa,0x5c,0xef,0x12,0x43,0xdf,0xb6,0x5b,0x83,0x43,0xf3,0xf7,0x1d,0x6f,0x3e,0x44,0xe6,0x20,0xd8,0xbc,0x4a,0x9a,0xed,0xa0,0x79,0x66,0x8d,0x23,0xca,0x35 +.byte 0x15,0x87,0x11,0x50,0xa4,0x40,0x6e,0xfa,0xf7,0xaf,0xa2,0xb7,0x3b,0x9b,0x8b,0x44,0x19,0x90,0xb3,0x47,0x92,0x08,0x2f,0x0c,0xe2,0x95,0x5d,0x80,0xb5,0x93,0x5e,0x1c,0xb5,0xce,0x52,0x0b,0x12,0xc1,0x72,0x2e,0x66,0x8c,0xd1,0x13,0x94,0x36,0xf7,0x17,0xe3,0xad,0x69,0xc9,0x2d,0x21,0x64,0xcd,0x8f,0x2d,0x8f,0x0c,0x85,0xa5,0x23,0x8b +.byte 0x6c,0x00,0x13,0xf7,0x6a,0xb4,0x68,0x1a,0xcc,0xc4,0x03,0x5b,0xd6,0x7b,0x5b,0x34,0x90,0x34,0x3e,0x0a,0x07,0x19,0x81,0x99,0xe9,0xd2,0xa8,0x73,0x2c,0xa2,0xcf,0xdf,0x29,0x69,0xbf,0xec,0xdd,0xa5,0xd3,0x16,0xb0,0xd2,0x9c,0x2f,0xeb,0x70,0x50,0x20,0x3c,0x22,0x1a,0x5b,0x55,0x79,0x76,0x0f,0x1f,0xd0,0x34,0xa9,0x55,0xad,0x75,0x75 +.byte 0x7f,0xa7,0x9b,0xa7,0x3d,0x5d,0x73,0xce,0x91,0xf6,0x9b,0xcd,0xa5,0xee,0x48,0x44,0xba,0xd5,0xad,0xbe,0x1e,0xc6,0xd2,0x8b,0x05,0x21,0x20,0xb5,0x7d,0x78,0x88,0x10,0x20,0x85,0x90,0x8f,0x47,0x74,0x68,0xe6,0x32,0x2a,0x13,0x7a,0xb3,0x5d,0xfe,0x24,0x97,0xd1,0x65,0x55,0x60,0xb3,0x88,0xfb,0x59,0xc9,0x29,0x70,0xf1,0x45,0xbd,0xbe +.byte 0x4d,0x01,0x4e,0x5e,0x5f,0x99,0x52,0xf8,0x5f,0x38,0xcf,0xa8,0x5d,0x69,0x54,0x87,0x72,0x41,0xca,0xc4,0x63,0xc1,0x52,0x58,0x66,0x8b,0xda,0x8b,0x61,0xd1,0xab,0x7d,0x8d,0xfe,0x51,0x8d,0xf6,0xd0,0x21,0x4d,0x0b,0xc5,0xea,0x74,0xcd,0x21,0x93,0x4a,0x91,0xe5,0x3f,0xce,0x35,0x3b,0x3f,0xc0,0xab,0xa4,0x23,0x76,0xd1,0x8c,0xa7,0xbe +.byte 0x15,0xab,0x8e,0xd7,0x0d,0x86,0xac,0xc3,0x06,0xff,0x33,0xf2,0x41,0x6f,0x69,0x58,0x49,0xd1,0x73,0xcf,0x5e,0x4e,0x1e,0x46,0x12,0xfa,0x30,0x0d,0x4b,0xb1,0xfb,0xc6,0xe6,0x0d,0xcd,0x8d,0xca,0x34,0x28,0x5a,0xed,0x85,0x55,0x31,0xee,0xba,0xbf,0xa4,0x6f,0x9c,0x7d,0xeb,0x4b,0x1b,0x73,0xea,0x4e,0xb9,0x62,0x5d,0xac,0xe3,0x53,0xdf +.byte 0x27,0x87,0x2f,0x39,0xca,0x5b,0xd6,0x72,0xcf,0x95,0xc6,0x2a,0xa5,0x3f,0x57,0xfd,0xdc,0xa9,0x4a,0x86,0x0f,0xcd,0xd5,0xea,0xfe,0x85,0xeb,0x9b,0x84,0xc6,0xf7,0xba,0xc2,0x37,0xbc,0x18,0x85,0x49,0xa6,0x7f,0xd9,0x3e,0xfb,0xf0,0x0c,0x39,0xe3,0x1c,0x06,0xfe,0xb6,0x49,0xa3,0x8b,0x72,0x2b,0x39,0xa1,0x48,0xfd,0x1f,0xfe,0xa4,0xf7 +.byte 0xcc,0x7a,0xef,0x64,0xa0,0x0d,0xeb,0x78,0x71,0x8c,0xd6,0x59,0x7c,0xf4,0xaa,0x81,0x7a,0x89,0xe6,0x22,0xc9,0x57,0xe8,0x13,0x9c,0xca,0xc4,0x6f,0xb5,0xbf,0x08,0x31,0x93,0x56,0x2a,0x82,0x00,0x95,0xdc,0x4b,0xfd,0x9b,0xc7,0x8b,0x31,0x72,0xa0,0xff,0xbe,0xb4,0xd6,0x07,0x16,0x0a,0x4a,0x0a,0x96,0x02,0x83,0x53,0x2a,0x4d,0x33,0x72 +.byte 0x1f,0x20,0x20,0xc3,0x63,0xee,0x4e,0x05,0x90,0x7d,0x21,0xd0,0xf1,0xda,0xde,0x0d,0x4a,0x59,0xb9,0xca,0x81,0xe3,0x1f,0x83,0x19,0xdc,0x09,0x03,0x5f,0xaa,0xee,0xbc,0x5a,0xfa,0xc6,0x4d,0x3d,0xfe,0xfe,0xf3,0xdb,0xc3,0x77,0x31,0x74,0xb4,0x94,0xb5,0x09,0xb1,0xb5,0x13,0x47,0x2e,0x4f,0x3b,0x38,0x83,0xf5,0xfc,0xe9,0xcc,0x45,0xea +.byte 0x5b,0x88,0x21,0xba,0x53,0xc5,0xf6,0xd4,0x63,0xc5,0x37,0x1d,0xa1,0x42,0x2e,0x9c,0x9a,0x50,0x2c,0xfe,0xdb,0xf6,0x31,0x36,0x5f,0x9d,0xed,0x63,0x42,0x20,0xdd,0x27,0xe5,0x34,0x3c,0x0f,0x06,0x8b,0x8f,0x32,0xb6,0x47,0xce,0x07,0xcb,0x27,0xc1,0xb7,0xfe,0xb2,0x69,0x81,0x79,0x20,0xd7,0x47,0xbb,0xab,0x61,0x5f,0x09,0x99,0xdf,0x9f +.byte 0xde,0x59,0x33,0x75,0xd1,0xcc,0xfe,0x92,0x79,0x1f,0x2d,0x59,0x88,0xef,0x4b,0x80,0x0c,0x38,0xa3,0xb1,0xef,0xae,0x53,0x84,0x2f,0xbd,0xd3,0x0c,0xcf,0xd5,0xf7,0xb7,0x6f,0xa7,0x22,0x1f,0xf1,0x56,0x76,0x0c,0x78,0x52,0xa3,0xc0,0xd0,0x2f,0xbc,0xdf,0x29,0x0d,0xa8,0x54,0x0d,0x2b,0x65,0x1b,0x7f,0xeb,0x21,0x22,0xaf,0x10,0xc1,0xd6 +.byte 0x30,0xa8,0x2f,0xb1,0x25,0xbf,0xdc,0xee,0xe9,0x35,0x40,0x69,0xa0,0xa0,0x27,0x85,0x2e,0x18,0xc1,0x36,0x24,0xc5,0x96,0x9a,0x85,0x3f,0xbb,0xfd,0xf5,0x02,0xa2,0xa1,0x92,0x3c,0x16,0x48,0x9f,0xc5,0x00,0x7c,0x7b,0xaf,0x31,0xba,0x68,0x0e,0x58,0x88,0xf4,0x10,0xb9,0xa6,0xe0,0x46,0x2a,0xb8,0x8d,0xc7,0x8e,0xad,0x7c,0xec,0xd2,0x74 +.byte 0x92,0xfe,0x1b,0xd0,0x73,0x79,0x0b,0x4e,0xcc,0x2d,0x5c,0xe7,0x80,0x2d,0x21,0x1c,0x97,0xfc,0x2a,0xc9,0x9c,0x07,0x10,0x64,0x8b,0xf7,0xf5,0x1c,0x54,0xb6,0x6c,0x73,0x1c,0x50,0xd3,0x1a,0x2a,0x63,0xcb,0xba,0xd3,0x95,0xe2,0xa6,0xc3,0xca,0x45,0xfd,0x5e,0x1b,0xbb,0x6b,0x4d,0xb3,0xf7,0xfd,0xaa,0xf9,0x73,0xb8,0x74,0x4d,0x36,0x7e +.byte 0xcc,0xaa,0x1e,0xf3,0x20,0x68,0xa5,0x0c,0x03,0xe3,0xbe,0xee,0x82,0x03,0x8d,0x10,0xa6,0xf6,0x6c,0x73,0xc2,0x9d,0x74,0xba,0x57,0x17,0xd7,0xfa,0x85,0xf5,0x1e,0x3d,0xf8,0xc7,0x80,0xef,0xcd,0xf0,0xf4,0x46,0xfc,0x07,0xb5,0xc4,0x5f,0xd2,0x04,0x6a,0x90,0xf5,0x76,0xb6,0xf9,0x73,0x22,0xa6,0x09,0x2f,0xbf,0xb5,0x93,0x9a,0x95,0x05 +.byte 0x95,0xaa,0xf9,0x8c,0x71,0xd6,0xc6,0xd9,0x72,0x50,0xf6,0x58,0x77,0x09,0x47,0x97,0x21,0x42,0xf0,0x30,0x5c,0x3c,0xec,0x60,0x67,0xdf,0x5e,0xd2,0xed,0x0f,0xab,0x25,0x11,0xbb,0xf8,0x34,0x1e,0xbd,0x7f,0xc6,0x52,0x19,0xf5,0x53,0x28,0x46,0x75,0x93,0xce,0xc2,0x0b,0xdf,0xfd,0xa5,0xf1,0xb0,0xa2,0x0b,0x97,0xb5,0x76,0xb4,0x8a,0x2b +.byte 0x82,0x55,0x23,0x29,0xc2,0xd3,0x32,0x94,0x2f,0xf0,0xe6,0x77,0x2c,0xe4,0x6a,0x7f,0xd7,0xee,0x84,0xfb,0xba,0xb8,0x4b,0xae,0x13,0x34,0xbd,0xa8,0x12,0x7a,0x3c,0x28,0x40,0x74,0x5d,0x9a,0x11,0x1a,0xe9,0x74,0x31,0x28,0x3d,0x3d,0x64,0xb7,0x54,0xa0,0x51,0x0d,0xed,0x97,0x94,0x56,0x7a,0x48,0x8e,0x36,0xc9,0xae,0x5f,0xc6,0x79,0x45 +.byte 0x4f,0x07,0xdd,0x13,0x52,0x8b,0xfc,0x3b,0x73,0x44,0x68,0x64,0x51,0x0d,0x95,0x6f,0x0f,0x94,0xba,0xf8,0x40,0x64,0x51,0x43,0x49,0x63,0xc1,0xbd,0xf3,0x39,0x7f,0x6e,0x6f,0x45,0xeb,0xd2,0x33,0x44,0x2d,0x10,0xb4,0x68,0xcb,0xcb,0x8c,0x84,0xc5,0xd4,0x63,0x1d,0x23,0x85,0x30,0x4d,0x6c,0xfc,0xc9,0xa4,0x8c,0xd2,0x42,0x69,0x2f,0x17 +.byte 0x86,0xf0,0x17,0xd0,0xb2,0xaa,0xfd,0x62,0xcb,0xb4,0xfd,0xba,0x29,0xf8,0x85,0x45,0x84,0x9d,0xae,0xf8,0x9c,0x8f,0x64,0xd5,0xb8,0xb6,0xa9,0x64,0xf9,0x39,0x86,0x68,0x29,0xac,0x32,0x87,0x84,0x6c,0xb0,0x09,0xd2,0xdd,0xf2,0xec,0xa1,0x3a,0xfd,0x11,0x37,0x54,0x67,0x29,0x62,0x25,0x62,0xe8,0x6a,0x4b,0x5e,0xde,0x9a,0xf0,0x97,0x73 +.byte 0x66,0x69,0x2a,0x21,0xbe,0x95,0x86,0xca,0xf9,0x17,0xe9,0x4b,0x23,0x83,0x1e,0x8c,0x37,0x47,0x91,0x03,0x3f,0x9f,0xb8,0x60,0x2c,0xdd,0x82,0xbd,0x2a,0xc3,0xe7,0x30,0x8f,0x91,0x2b,0xa4,0x23,0x01,0x03,0xb2,0x8b,0xbd,0xd2,0x1d,0x16,0xf7,0x6a,0x86,0xa8,0xe4,0x54,0x6f,0x9c,0x47,0xa5,0x0f,0xbe,0x94,0x56,0xfa,0x18,0x69,0xbe,0x92 +.byte 0xe9,0xf8,0x24,0x4d,0x65,0x42,0x81,0x1f,0x85,0x52,0xb7,0xc9,0x49,0xde,0xa5,0x4c,0x8f,0x0d,0x5f,0x12,0x68,0x68,0x35,0xce,0x29,0x22,0x5c,0x55,0x3e,0xbd,0xce,0xf2,0x2a,0xec,0x7e,0xe1,0x29,0x0a,0x88,0xf3,0x5e,0xeb,0x27,0xe5,0x52,0xee,0x72,0x37,0xba,0xff,0x82,0x97,0xa9,0x5d,0x77,0x6f,0xb9,0xc3,0xa7,0x73,0xba,0x7f,0x2f,0x7a +.byte 0x19,0x32,0x87,0x56,0xa2,0x89,0xb2,0xb4,0x48,0xbe,0x2e,0x30,0x89,0x0a,0x8f,0x75,0x25,0x25,0x5c,0x46,0xe8,0x02,0x45,0xcb,0x03,0xd1,0xa3,0xeb,0x70,0x71,0x08,0x1c,0x46,0xf1,0x2c,0x43,0xe2,0x44,0x30,0x6a,0x61,0x31,0x45,0x3e,0xbb,0x47,0x33,0x24,0x25,0x13,0xeb,0xf7,0x24,0x66,0x15,0x4c,0xf3,0x07,0x2f,0xff,0xdc,0x37,0x0f,0x71 +.byte 0x85,0xc8,0x56,0xa7,0x2a,0x22,0x87,0x8b,0xae,0x35,0x31,0x29,0x96,0xf0,0x81,0xfb,0x2c,0xbf,0x44,0x69,0x69,0x9a,0x77,0xfd,0xc0,0x2b,0x42,0x16,0x67,0xd6,0xbd,0xd0,0xf1,0xb9,0x40,0x8f,0xd2,0x9a,0x1b,0x2c,0x64,0x78,0x6b,0xda,0x37,0x26,0xae,0x4c,0xee,0x36,0xaf,0x84,0x61,0xe4,0x93,0x22,0x64,0xaf,0xee,0x6d,0x69,0x5c,0xe5,0x85 +.byte 0xd8,0xcc,0xcf,0xf3,0xe8,0x05,0xcd,0xd2,0x09,0x66,0xaf,0xbb,0xc4,0x79,0xb2,0xa7,0xa5,0x09,0xd9,0xf5,0xa2,0x83,0x4f,0xd5,0xf5,0xf3,0x7d,0x7a,0xab,0x94,0x83,0xb3,0x15,0xfb,0x0d,0x1a,0x1d,0x77,0xc5,0x63,0x0b,0x54,0xde,0xa8,0x0d,0xc4,0x16,0xe3,0x89,0xeb,0xa3,0x1b,0xd4,0x77,0x13,0xe3,0x55,0x98,0x15,0xab,0x3b,0x32,0xc8,0xd4 +.byte 0x0c,0x91,0x80,0x57,0xf7,0x1e,0x24,0xd0,0x56,0x78,0x29,0xd2,0x03,0xe7,0xc4,0xd2,0x09,0xca,0xee,0x9b,0x60,0x5f,0xa1,0xfd,0xaa,0x85,0x4b,0x68,0x35,0xa4,0x3b,0xef,0x29,0xb8,0x49,0x85,0xee,0xbb,0x39,0xc0,0xc6,0x99,0x97,0xc6,0x86,0x6c,0x27,0xf9,0x1a,0x19,0x6e,0x7c,0xae,0x75,0x41,0x0d,0x08,0x1e,0xf0,0xb4,0xc3,0x9e,0xdb,0x40 +.byte 0x86,0x94,0x9d,0x90,0x09,0x3f,0xdc,0xb9,0xfc,0x59,0x41,0xc5,0x5b,0x89,0x97,0x49,0x4a,0x1a,0x06,0x68,0x83,0xd8,0x7e,0x09,0x51,0xe1,0x86,0xd8,0x88,0xbe,0x8a,0x36,0x48,0xb3,0x83,0x7b,0x57,0xdd,0x8f,0x18,0x67,0x4a,0x7d,0x68,0xab,0xb9,0x05,0xf0,0xe4,0x27,0x4e,0x33,0x44,0xa7,0x13,0x04,0x94,0xc5,0x57,0xaf,0x36,0x03,0xe8,0x09 +.byte 0x36,0x5b,0xe8,0x92,0xad,0x0a,0x79,0x02,0x24,0x43,0x62,0xc7,0xa5,0xce,0x7c,0xac,0x6d,0x0a,0xf2,0x83,0x33,0x05,0x3b,0x6f,0x9d,0xda,0x96,0x9f,0x8b,0x79,0x3e,0x6c,0xd6,0xba,0x7f,0xea,0x84,0xd8,0x23,0xb6,0x92,0xc3,0x9c,0x7f,0x0d,0xcb,0x7b,0x9f,0xbd,0xc2,0xf5,0x6f,0x71,0x67,0x5f,0x0b,0xd1,0x73,0xb5,0x8c,0x46,0x07,0xcd,0xd8 +.byte 0xee,0x28,0xcf,0x8f,0x8e,0x5c,0xde,0x14,0x78,0xc7,0x60,0xd5,0xf4,0x49,0x97,0x46,0x5f,0x49,0x4a,0xb4,0x8f,0xc9,0xd1,0x52,0x34,0x01,0x29,0xa1,0x46,0x55,0xf8,0x29,0x53,0xbb,0x32,0x1e,0x4b,0x89,0x96,0x53,0x0b,0xf2,0x16,0xf9,0xa7,0x70,0x93,0x59,0x78,0xc0,0x77,0x78,0x9f,0x6c,0xb3,0x0e,0x3f,0x6f,0x40,0x09,0x1d,0xd6,0x66,0x4e +.byte 0xe8,0xb0,0xa1,0x14,0x65,0xc8,0xc7,0x3f,0xd2,0xf0,0x1f,0xfd,0x51,0xe0,0x29,0xd6,0x39,0x26,0x60,0xfe,0x62,0xc2,0xe4,0x45,0x6d,0x01,0xdb,0xd3,0x7c,0xdf,0x48,0x10,0x2f,0xf2,0x8e,0x6c,0xc6,0x58,0xc3,0x7d,0x26,0xb1,0x9d,0x52,0x02,0x2a,0x5f,0x2b,0x57,0xca,0x84,0x9d,0x74,0x31,0x01,0x0f,0xda,0x3d,0x7c,0xbb,0xdc,0x71,0x82,0x8b +.byte 0x42,0xaf,0x49,0x9e,0x2c,0xe8,0xdc,0xa1,0xfb,0x23,0x6d,0xdb,0xdc,0x36,0x01,0xc9,0xb3,0x93,0xd4,0x2e,0x8b,0xd1,0xe4,0xed,0x1b,0xd0,0x4c,0xeb,0xaf,0x96,0x57,0xde,0xee,0x90,0xf4,0xa7,0x58,0x46,0x8a,0xd4,0xa9,0x44,0xe0,0xb3,0x13,0x96,0xb2,0x8a,0xb0,0xd3,0xbe,0x71,0x38,0xb7,0x35,0xa9,0xa8,0x48,0x37,0xa3,0x11,0x0e,0x61,0x36 +.byte 0x6c,0xaf,0x6c,0xf2,0x3f,0xd6,0x55,0xb3,0xa5,0xe0,0xaf,0x18,0x6a,0xf5,0x78,0xb5,0x7c,0xc7,0x48,0x24,0x6c,0xea,0x1e,0x7f,0x52,0xb4,0xe8,0x72,0x46,0xd2,0xbd,0x1c,0x9e,0xe6,0x5b,0x3e,0x9c,0x6c,0x6c,0x6b,0x45,0x0c,0x3a,0xb7,0x67,0x3c,0x8e,0x77,0x77,0xbf,0x50,0xb6,0x30,0x6e,0xe1,0x28,0x0d,0x2a,0x85,0x44,0xf8,0xbb,0xf1,0x14 +.byte 0x89,0xaa,0xc2,0x27,0xf5,0x8e,0xa1,0xd3,0x07,0xba,0xe8,0x03,0xcf,0x27,0x1c,0xa6,0xc4,0x63,0x70,0x40,0xe7,0xca,0x1e,0x05,0xb7,0xb7,0xdc,0xc0,0x07,0x4c,0x0d,0x21,0x12,0x60,0x02,0xe3,0x86,0x65,0xe7,0x1c,0x42,0x86,0xdd,0xdb,0x7f,0x26,0x60,0x01,0x3d,0xd8,0x18,0xcd,0x7a,0x9f,0xf8,0xb2,0xf6,0x6d,0xd3,0xe0,0x57,0x1f,0x80,0x30 +.byte 0x2d,0x5e,0x71,0xdf,0x4d,0x7f,0xcd,0x63,0x77,0x19,0x5e,0x2d,0xd5,0xb5,0xfa,0xa9,0x26,0x02,0xb9,0x62,0x2b,0x57,0x80,0x0a,0xe9,0xbc,0xa4,0x3b,0xa7,0xf1,0xf3,0x77,0x2b,0x6b,0x41,0x5e,0xf7,0xe8,0x66,0x23,0x63,0xac,0xcd,0x58,0xfc,0xa9,0x97,0x6b,0x5a,0x1e,0xe5,0x7d,0xfd,0xb1,0x42,0x7f,0x99,0xdd,0x60,0xaf,0x39,0x46,0x36,0xdd +.byte 0xc2,0x70,0x83,0x53,0xd1,0xc3,0x69,0xc8,0x90,0x0e,0x2b,0x34,0xb2,0x0c,0xb9,0x7a,0xb8,0x6b,0x7c,0xc2,0xf3,0xae,0x41,0x24,0xb8,0x94,0x5f,0xdd,0xce,0xda,0x95,0xda,0x49,0x81,0xb6,0xf8,0xa9,0x8e,0xb3,0x79,0xf8,0x55,0xf9,0xcf,0x8c,0x24,0x99,0xfc,0x6b,0x15,0x0f,0x39,0xac,0xd0,0x3e,0x89,0x9d,0xc2,0x46,0x8c,0x99,0x45,0xfd,0xce +.byte 0x13,0x4c,0x9c,0xc8,0x80,0x87,0x8f,0x7b,0x28,0xe3,0x5e,0x2b,0xe3,0x89,0x7e,0x13,0x52,0x52,0xe9,0x3a,0xed,0x33,0xe7,0x28,0xc7,0x7a,0x48,0x8d,0x0e,0xee,0x24,0xc4,0x61,0x04,0x3c,0xd4,0x7e,0xf3,0x30,0x22,0x07,0x58,0xae,0x02,0xc5,0xd1,0x7d,0x04,0x18,0xca,0xd6,0x04,0xd4,0xc5,0xa4,0xff,0x8d,0x0d,0x68,0xd4,0x1a,0x3a,0x72,0x6f +.byte 0x41,0x1e,0xda,0xc0,0x97,0x7c,0x55,0x2c,0x13,0x20,0x9a,0x07,0x35,0xcc,0xc5,0x83,0xee,0x41,0x77,0x51,0x28,0x07,0xe0,0x81,0xe3,0x9b,0x1f,0xdb,0x73,0x5c,0x8d,0x82,0xa2,0x8b,0xf4,0x92,0x4f,0x70,0xa8,0x6a,0xcf,0xbf,0xcf,0x0b,0x71,0xbc,0xeb,0x81,0xb4,0xc9,0x65,0xe7,0x43,0xef,0x25,0x45,0x27,0xea,0xcd,0x60,0x68,0xcd,0x2d,0x7a +.byte 0xfd,0x88,0x6d,0x06,0xd5,0x92,0x32,0xc3,0x18,0x88,0x64,0xa7,0xde,0x39,0xeb,0x0b,0x5c,0x9c,0xf6,0xf6,0x93,0x90,0x24,0x0c,0x9e,0x0b,0x89,0x1c,0xcb,0xc8,0x96,0x72,0x17,0xae,0x46,0x61,0x69,0x6e,0xbe,0x6c,0xf1,0xa4,0xa4,0x50,0xa9,0x2a,0x47,0xd7,0x80,0xe4,0x72,0xd2,0x3f,0x1a,0xdd,0x82,0xdc,0x12,0x66,0x10,0x26,0x15,0x80,0x56 +.byte 0x4d,0xbe,0x02,0xae,0xe1,0x24,0x8a,0x41,0x52,0xc8,0x5d,0x8d,0x62,0x85,0xbe,0x7c,0x35,0xdd,0x88,0xd3,0xf5,0xf7,0x9b,0xf1,0x5a,0x4e,0x70,0x48,0x31,0x5a,0xaa,0x96,0x1e,0xf8,0x73,0xb4,0x0f,0xb2,0x82,0xf4,0x13,0xac,0xba,0x3b,0x12,0x36,0x1e,0x23,0xbf,0x09,0x8a,0x1c,0x96,0x47,0x56,0x2d,0x16,0x24,0xc3,0x23,0x65,0xe2,0x99,0xd0 +.byte 0xf0,0xa0,0x2c,0x64,0x35,0xad,0x16,0x34,0x67,0x52,0xbc,0x8f,0x17,0x90,0xf9,0xc7,0x4f,0x64,0x6c,0x75,0x3f,0xd7,0x48,0xa4,0x6b,0x43,0xe6,0x2e,0x7a,0xe3,0x79,0xe8,0x47,0x51,0xe9,0x52,0x36,0x30,0xa4,0x24,0x89,0x00,0xd5,0x77,0xbd,0x34,0x2e,0xa9,0x74,0x02,0x25,0xc0,0x0c,0x10,0x31,0xf0,0xa7,0xcb,0x01,0xed,0x43,0x70,0x15,0xe6 +.byte 0xda,0x01,0xb4,0x7a,0x13,0xbc,0xf1,0x57,0x34,0xb1,0xb7,0xb3,0x26,0x18,0x5f,0x42,0x6b,0xcb,0x78,0x25,0x48,0xe9,0xe6,0xe8,0xf5,0x45,0xa2,0x61,0x97,0x10,0xa5,0x7e,0x7a,0x48,0xf3,0x23,0xa5,0x88,0xc0,0xc4,0xc7,0x3b,0x5c,0x0c,0xfc,0xe0,0xf4,0x68,0x64,0xc6,0x9f,0xd9,0x17,0xcb,0xe5,0xba,0x4a,0xa4,0xe0,0x27,0xf8,0x2b,0x4e,0x67 +.byte 0x13,0xab,0xd2,0xce,0xbc,0x8d,0xdf,0x6e,0x49,0xaf,0x72,0x8a,0x51,0xa1,0x78,0x38,0x0a,0x58,0x2e,0x72,0xec,0x94,0x70,0x8d,0xdf,0x0b,0x5a,0x52,0x81,0xb1,0x9b,0xda,0x2c,0xd2,0x85,0xbb,0x8f,0xb0,0x99,0x64,0x24,0xbe,0x03,0xd9,0x92,0x8d,0x29,0xf3,0x41,0x9c,0xd6,0xef,0xef,0xb2,0x5c,0x22,0x90,0xff,0x27,0x4d,0xb3,0x91,0x72,0x9f +.byte 0x42,0xca,0x66,0xc5,0x66,0xb7,0x50,0x3e,0x83,0x6f,0x2d,0xe3,0x7b,0x2a,0xc4,0x5a,0x93,0x92,0x80,0xdb,0x1a,0xdd,0xef,0xfd,0x96,0xcb,0x6a,0xd8,0x4a,0xc5,0x6e,0x36,0x4a,0xe4,0x10,0x15,0xb3,0x12,0xb4,0xd9,0x9e,0x37,0x48,0x96,0xcb,0xe5,0x3a,0x4f,0x57,0xa6,0x46,0x2f,0xd3,0x06,0xb8,0x61,0x1c,0x17,0x3a,0xb8,0xad,0x40,0x50,0x57 +.byte 0x10,0xd9,0xd0,0xe9,0x1b,0xe3,0x18,0x8c,0xc4,0xfa,0x08,0x8d,0x82,0x3c,0x22,0x22,0x1b,0x97,0x64,0xa6,0x8b,0x7c,0x70,0x2b,0xa0,0xd8,0x4c,0x64,0xcf,0xbc,0x49,0x78,0xcb,0x92,0x0f,0xe1,0x60,0x12,0x4e,0x92,0x0d,0xaf,0xa4,0x1f,0xe0,0x2a,0xa5,0x69,0xc6,0xa1,0x91,0x5c,0xdd,0xb8,0xae,0xfa,0xc5,0xb9,0x18,0x31,0x81,0x32,0x6e,0x97 +.byte 0x44,0x2a,0xda,0x58,0xcd,0x9e,0x0d,0x57,0xe0,0xe3,0x5f,0x7b,0x04,0xd8,0xc8,0x68,0xf5,0xa2,0xac,0x0c,0x29,0xf0,0x7e,0xff,0x32,0xfb,0x53,0x1a,0xc2,0xe3,0xae,0xa5,0xe4,0x9c,0x50,0xaf,0xf4,0xde,0x0b,0xdd,0x4d,0xfa,0x65,0x3c,0xbe,0x3c,0xb8,0xda,0x88,0xd9,0x6c,0x55,0x58,0xe1,0x4d,0x00,0xa8,0x1e,0xe2,0x3a,0x9c,0x53,0x9b,0xca +.byte 0xb7,0x5d,0x3a,0x83,0xe0,0xbb,0x95,0xc4,0xd5,0x45,0x48,0xdc,0x12,0xab,0x24,0xfc,0x5d,0x91,0xe1,0xc8,0x0a,0x5c,0x10,0xc4,0xc9,0xaf,0xb6,0x54,0x80,0xfd,0xa0,0x70,0xb9,0xab,0xdf,0x34,0x9f,0x5c,0xff,0xde,0x8e,0xa0,0x0b,0x21,0xcf,0x28,0xc4,0xdf,0x67,0xb5,0xc0,0x20,0x49,0x0c,0x7e,0xe6,0xf7,0x41,0x6b,0x75,0xd9,0x1d,0x3b,0x49 +.byte 0xb7,0x4f,0x01,0xd1,0x20,0x62,0x15,0x1e,0x9f,0x16,0xb0,0xbd,0x30,0x09,0x05,0x00,0x0f,0x25,0x5a,0x37,0xe9,0xa6,0xc6,0xef,0xe5,0x39,0x2b,0xd7,0x6b,0xc5,0x96,0xd2,0xad,0x46,0xaf,0xd3,0xc0,0xfd,0xea,0xff,0x4c,0xaa,0x44,0x48,0x9a,0xdb,0x99,0x44,0x3f,0x4a,0xf0,0x3f,0x81,0x75,0xf2,0x79,0x31,0x3c,0xed,0x56,0xc6,0xf0,0xf1,0x8c +.byte 0xdb,0x1d,0x6c,0x6c,0xcc,0xfb,0xc2,0x30,0xf6,0x24,0x14,0x69,0xc4,0x89,0x4d,0xd0,0x10,0x77,0x37,0x00,0xe8,0xc9,0xf2,0x32,0xf1,0x43,0x8b,0xe1,0x09,0xc4,0x59,0x17,0xf9,0x20,0x2b,0x01,0x76,0x20,0xb8,0x03,0x84,0xf6,0xd7,0x2e,0xef,0x20,0xa6,0xfa,0x8b,0x74,0x7f,0x4a,0x14,0x33,0xad,0xac,0x45,0x66,0x18,0x2b,0x6b,0xd2,0xb8,0x20 +.byte 0x1a,0xff,0xca,0x25,0x69,0xfd,0xba,0x4b,0x5b,0x9c,0x38,0x35,0x4c,0x30,0xa2,0x24,0x3d,0xbb,0xd4,0xf3,0x67,0x24,0xa5,0x93,0xc6,0xf5,0xb2,0xb4,0xa5,0x04,0x53,0xb6,0xe4,0xc7,0xdc,0xf1,0xe5,0x43,0xb7,0x73,0xaa,0xab,0x5c,0xea,0xcb,0xf1,0xeb,0x5b,0x04,0x7a,0xff,0x0f,0x5e,0xb4,0xd3,0x2a,0x39,0x50,0x1b,0x54,0x1f,0x32,0xd7,0x7c +.byte 0xea,0x3f,0xee,0xa5,0xc8,0x46,0x48,0x7e,0x75,0x60,0x7a,0x42,0x42,0xd3,0x15,0x07,0x69,0x46,0x1c,0xe2,0x21,0x31,0x94,0x31,0x24,0x9e,0x39,0xab,0x7a,0xf9,0xc2,0x0b,0x2d,0x6b,0x55,0xa3,0x36,0xb2,0x65,0xf2,0x17,0x08,0xde,0x15,0x83,0x07,0x36,0x12,0x54,0x8f,0x0b,0x23,0xa8,0x7e,0xb5,0x57,0x1c,0x9e,0x29,0xd7,0xd4,0x9b,0xc1,0xf6 +.byte 0x94,0x23,0xf3,0x92,0xbf,0xba,0xc8,0xf5,0x78,0x3e,0x67,0x48,0x14,0x3b,0xd4,0xe9,0x8f,0x78,0xc1,0x4b,0x9a,0x59,0x08,0xaa,0x50,0xf4,0x9d,0xc4,0xc3,0x2c,0xbc,0x56,0x2c,0x13,0x30,0x75,0xfb,0xed,0x48,0xab,0x90,0xec,0x64,0x18,0xb5,0xd5,0xb5,0x7f,0xc1,0x7f,0x83,0xf2,0xdb,0xae,0xde,0xf5,0xb5,0x29,0x03,0xbe,0x80,0xb1,0x5d,0x97 +.byte 0xd3,0x7a,0xa4,0xd0,0xe0,0xce,0x04,0xda,0xaa,0x82,0x19,0xc9,0x02,0xb7,0x1c,0xe1,0x66,0xd9,0x3e,0x86,0x6d,0xb5,0xd1,0x35,0x63,0x8e,0x4b,0xc6,0x58,0x41,0xf9,0xb7,0xba,0xf3,0x06,0x91,0xb7,0xa2,0xfb,0xb5,0x5f,0x53,0xf3,0xe0,0xc1,0xf6,0x91,0x66,0xc7,0x93,0x3a,0x0a,0x72,0xb1,0xed,0x36,0x9d,0xde,0x21,0xdd,0x7d,0x0a,0x7b,0x35 +.byte 0x1f,0xc3,0x56,0xde,0xbb,0xcb,0xb2,0x0a,0xb6,0x84,0xce,0xa1,0xc6,0x1a,0x46,0x2f,0x9f,0x48,0xd5,0x98,0x73,0xa4,0xbd,0xbd,0xa3,0xe9,0xc9,0xc4,0x64,0x89,0xb7,0x9c,0x97,0x7c,0x2f,0x88,0x22,0xe4,0x4b,0x71,0x3d,0x2a,0x47,0xee,0xf8,0xfe,0xe0,0xf7,0x03,0x14,0xe6,0x7c,0x9e,0x57,0xbb,0x8e,0xf5,0xea,0x63,0xfc,0x5b,0x18,0x3b,0xa2 +.byte 0xa1,0x4a,0x28,0x82,0x37,0x77,0x5b,0xc4,0xd3,0xc1,0xf2,0x87,0x13,0x2b,0x2a,0xc8,0xac,0x70,0xe1,0x82,0x38,0x9c,0x12,0xa0,0xc4,0x9e,0x6b,0xac,0x33,0x8a,0xe9,0x31,0x6f,0xa1,0x76,0x94,0x48,0xcf,0xbc,0x78,0x22,0x82,0x6a,0xb0,0xb9,0x49,0x71,0xdb,0xde,0x8b,0x90,0x09,0x82,0x4d,0x79,0x17,0xe8,0xcf,0xd8,0x50,0xc3,0x08,0x07,0x81 +.byte 0x5f,0x9a,0x72,0xce,0x0a,0xe4,0x29,0xc9,0xdd,0x95,0x67,0x58,0xa1,0x14,0xec,0xcf,0x2f,0x29,0xcf,0xce,0xb3,0x35,0x54,0x77,0x67,0x56,0xec,0x95,0x68,0xee,0xbf,0x9c,0x9f,0x74,0x78,0x12,0xd5,0x30,0x83,0x28,0xd5,0x36,0x96,0x57,0xa0,0x8d,0x1c,0x99,0x19,0x04,0xaf,0x25,0xe5,0x71,0x83,0x88,0xb0,0x74,0x38,0xdd,0x8a,0xff,0x39,0x7a +.byte 0xfd,0x34,0x8f,0x9c,0x67,0xa8,0xc8,0x6f,0x13,0x5d,0xf2,0x5b,0x22,0xd3,0x8e,0x63,0x51,0x58,0x9b,0xfc,0xaa,0x89,0x65,0x4e,0x36,0xc4,0xa7,0xef,0x98,0xf9,0xaf,0xcd,0x35,0x8c,0x16,0xbc,0x70,0x4f,0xcd,0x71,0x2a,0xf4,0x13,0xb3,0x3d,0xa3,0x92,0x71,0x45,0xe5,0x9a,0x45,0xbd,0xc5,0x1d,0x82,0x60,0x3a,0x97,0xf3,0x0f,0x96,0x21,0x3d +.byte 0xe5,0x6e,0xfb,0x9d,0x9b,0xeb,0x15,0xc2,0xa6,0x73,0x76,0xf2,0xcd,0xec,0xfd,0x0f,0xf4,0x3f,0x46,0xc9,0x9c,0x73,0xa1,0x21,0x08,0xdc,0x31,0x00,0xaa,0x95,0x07,0xf0,0x3d,0x51,0x57,0xfa,0x6b,0xc3,0x8e,0xe9,0xa4,0x65,0xdc,0xff,0x57,0xb9,0x1f,0x4f,0xc6,0x6d,0x03,0x00,0xa7,0x19,0xb8,0x24,0xb5,0x3d,0x87,0xcb,0x84,0xb7,0xf5,0xfe +.byte 0x51,0x16,0x5b,0xc7,0xed,0x4b,0xff,0xa3,0x66,0x17,0x93,0x60,0x69,0x84,0x8c,0x95,0x74,0xa7,0x30,0x2d,0x09,0xf7,0x4e,0x0e,0x2f,0x99,0xda,0x46,0x34,0x0f,0x93,0x90,0x97,0x4c,0xa6,0x25,0x15,0xb8,0x6f,0x1d,0xd5,0xe1,0xc1,0x39,0x50,0xfd,0xd5,0x79,0x4f,0x04,0x2f,0x76,0x50,0x3f,0x67,0x56,0xad,0x02,0x82,0x30,0x1a,0xaa,0x6e,0xe2 +.byte 0x05,0x6a,0x93,0xb7,0xbe,0xde,0x84,0xce,0xd8,0x53,0xed,0xad,0x95,0xab,0x45,0x1f,0x4c,0x3b,0x22,0x36,0x27,0x45,0x19,0xa4,0x7f,0x12,0x20,0x6c,0x9d,0xeb,0xd2,0xfe,0xd6,0x7d,0x25,0xf9,0xe3,0x64,0x77,0x56,0x89,0x12,0x57,0x80,0xd5,0x40,0xbb,0x2a,0xcc,0xac,0x34,0x8e,0x87,0xfd,0x58,0xc3,0xbd,0x92,0x48,0xd8,0x7f,0xc4,0x39,0x6a +.byte 0x4e,0x1c,0x50,0x93,0xef,0xae,0x81,0x93,0x50,0x95,0x6e,0x46,0x7c,0xf5,0x27,0x44,0x6c,0x21,0x06,0x49,0x89,0x7e,0xf4,0xfa,0x08,0xa5,0xbc,0x0a,0xbd,0xb6,0x7b,0x55,0xac,0x87,0x19,0x33,0xfa,0xab,0xf3,0x15,0xc9,0x1b,0x83,0xf2,0x41,0xf1,0x26,0x6f,0xdf,0x15,0x60,0xdb,0xa6,0x03,0x43,0x3e,0x34,0x7a,0xa9,0xb1,0x38,0x57,0xe4,0x09 +.byte 0x1a,0x4a,0xd8,0x6e,0x28,0xee,0x7d,0x74,0x54,0x03,0xb3,0x29,0x24,0xb3,0xf0,0xc6,0x20,0x7c,0x47,0x01,0x66,0x36,0x7a,0x14,0x18,0x09,0xd6,0xaa,0xa6,0x82,0x5b,0xe4,0x0a,0xf9,0x41,0x52,0x3b,0x56,0xa2,0xf8,0xa2,0xa1,0x2b,0xe0,0x0d,0x1f,0x5b,0xe4,0x0e,0xe1,0x94,0x84,0x6f,0xed,0x2e,0x11,0xfa,0x4a,0xbd,0x41,0xf4,0x3c,0x8c,0x7e +.byte 0x94,0x46,0xec,0x79,0x81,0xb0,0x36,0xfd,0x9c,0x73,0x0f,0x84,0x1a,0x59,0x4e,0x1b,0xd5,0xd1,0x0d,0xff,0xfd,0xb7,0xfb,0x73,0x35,0x8a,0x66,0xed,0xf3,0xee,0x6d,0xf7,0x86,0x0a,0xb9,0xc0,0xf1,0xa3,0xb7,0x32,0x49,0x01,0xe8,0xcd,0xfe,0x82,0x7b,0xf6,0x46,0xd8,0x73,0x47,0x8b,0x7b,0x6e,0x31,0x92,0x0f,0x4b,0x16,0x11,0x86,0x1d,0x02 +.byte 0x5d,0x12,0x79,0x59,0xdc,0x8c,0xaa,0x1b,0xc1,0x75,0x63,0xb2,0xd6,0xbf,0x19,0xb0,0x81,0x70,0x34,0x12,0xd2,0x09,0xbe,0x6d,0xa1,0x31,0x77,0xd2,0x9b,0x59,0xdc,0xcb,0x67,0xb5,0x14,0xcd,0x37,0x31,0x2c,0xa6,0x17,0x58,0x2b,0x24,0xfc,0x2a,0x9e,0x8f,0x38,0x38,0x7a,0x80,0xda,0x8b,0x54,0x1d,0xc9,0x99,0xc7,0x1f,0x98,0x7a,0x1f,0x32 +.byte 0x23,0x1c,0xb5,0x6e,0x53,0xd3,0x61,0xe7,0x78,0x19,0x6c,0xd5,0x2f,0x85,0xde,0xd1,0x67,0x6b,0x9b,0xa1,0x09,0x87,0x5e,0x89,0x5e,0x89,0x21,0x36,0xf2,0x94,0xc1,0xfd,0x6c,0x4e,0xd9,0x6b,0xd2,0xb1,0x1b,0x48,0x37,0x9a,0x7b,0xc9,0x52,0xfd,0xe2,0x6d,0x07,0x19,0xf2,0xa5,0x69,0xdc,0x0b,0x52,0x8f,0xb3,0x87,0x03,0x1a,0xd8,0x43,0x20 +.byte 0x68,0xcf,0x08,0xcc,0xce,0x37,0xf6,0x96,0x7f,0x03,0x62,0xb2,0xce,0x6a,0xfb,0x22,0x54,0xd6,0xfc,0x84,0x5c,0xf5,0x55,0x32,0x36,0x77,0x1d,0x15,0x6a,0x2c,0x3a,0x01,0x34,0xff,0x5b,0x7f,0x3f,0xab,0x97,0x8f,0xbd,0x1d,0x07,0xb9,0x47,0xb1,0xcc,0xc0,0xdf,0x17,0x38,0x54,0x07,0xc0,0x1b,0xb9,0xa2,0x29,0xa6,0x25,0x73,0x32,0x4d,0x5e +.byte 0x51,0x60,0xb3,0x27,0xe5,0xb6,0xdb,0x56,0x81,0x95,0x03,0x7e,0xca,0xc6,0x15,0x8f,0x48,0xd4,0xac,0x71,0x41,0xdc,0x9c,0x86,0x5d,0xd8,0x90,0x90,0x54,0xdd,0x3d,0xf3,0xa8,0xbb,0xe5,0x55,0x69,0x26,0xdf,0xd1,0x8e,0x75,0x2a,0xe4,0xfe,0xe0,0x80,0x1d,0x6b,0xd2,0x8a,0x06,0x49,0x4e,0x60,0xf8,0xbd,0x3d,0x99,0x27,0x80,0x27,0x42,0x66 +.byte 0x01,0x32,0xe1,0x9e,0xa6,0xde,0x7b,0x14,0xa4,0x49,0x68,0x70,0xbe,0xa4,0xe1,0x44,0x2e,0xce,0xa3,0xe9,0x1d,0x7a,0xbd,0xf1,0xe4,0x25,0x11,0x47,0xd8,0xaa,0x32,0x34,0xf8,0xca,0x3d,0xec,0xf3,0x5d,0x8a,0x55,0xe7,0xd4,0x7c,0xfb,0xcf,0xe7,0xa6,0x13,0xaa,0x16,0x5f,0xaa,0x02,0x19,0xdd,0xf1,0xf8,0x5c,0xb2,0x1e,0x68,0x9a,0x21,0x93 +.byte 0xd1,0x38,0x31,0xbb,0x26,0x76,0x44,0xf8,0x84,0x3b,0xf5,0xd1,0x52,0xbe,0x1b,0x8e,0x4d,0xa0,0xb4,0x4a,0x5a,0x7e,0x89,0xe5,0x36,0xb0,0x76,0x77,0xc5,0xc2,0x22,0x73,0xc2,0x19,0x12,0x7f,0xdf,0x9c,0xb8,0xc0,0xf5,0x0e,0xd5,0xa3,0x55,0xae,0x61,0xf8,0xf1,0x6b,0x79,0xc8,0x2e,0xbc,0xa5,0xef,0xd4,0xb1,0x84,0x0c,0x15,0xc4,0xed,0xb3 +.byte 0x18,0x29,0xd6,0x31,0x83,0x79,0x30,0x1a,0x8f,0xf0,0x3b,0xe9,0xd1,0xf2,0x1d,0xec,0xcb,0xe8,0xc5,0x1c,0xb5,0xcb,0x8e,0x01,0xd1,0xb2,0x86,0x43,0x33,0x95,0x70,0x7e,0x75,0xa9,0xa1,0xe7,0xcb,0xd9,0xf4,0xd3,0xe1,0xe2,0xe9,0x46,0x21,0x20,0x3b,0xe9,0x48,0x1c,0x3f,0x93,0x57,0x31,0xeb,0x15,0x9c,0xa7,0xa6,0xcb,0xb5,0xb7,0xa7,0x24 +.byte 0xbe,0x66,0x4c,0x92,0x7c,0xe8,0x8e,0x3f,0x9c,0xa9,0xd7,0xad,0x73,0x68,0x19,0x19,0xd4,0xb5,0x57,0x82,0xdc,0x67,0x3c,0xec,0xac,0x06,0xec,0x86,0x9b,0x65,0xff,0xbb,0xc3,0x90,0x48,0xdb,0x52,0xcc,0xa4,0xf5,0xdf,0x2c,0xc5,0x5a,0xe3,0x30,0xed,0xad,0x37,0x40,0x8c,0xaa,0x32,0x4f,0x94,0x1e,0x14,0x59,0x48,0x1d,0xd3,0xaf,0x80,0xe7 +.byte 0xcf,0x6b,0xa7,0x70,0xe7,0x98,0x22,0x4b,0x40,0x02,0x0c,0x29,0x09,0x0a,0x53,0xf7,0xd4,0xeb,0xbb,0x75,0xb4,0x30,0x1c,0x67,0xea,0xd2,0xb5,0x40,0xfe,0x57,0x2c,0x3c,0x44,0x8d,0x8d,0x02,0x78,0xf0,0x76,0x8f,0x92,0xab,0xb4,0xc9,0xc0,0x2f,0xf5,0xde,0xa7,0x09,0x14,0xf1,0xe5,0x34,0xeb,0x86,0xfa,0xcf,0xcc,0x85,0x1c,0x9c,0xa6,0xe1 +.byte 0x72,0x9e,0xc1,0xe4,0x74,0xc4,0x96,0x5d,0xf4,0x4b,0x23,0x4f,0xa5,0x32,0xff,0x38,0x21,0x8f,0x43,0xe5,0x96,0x20,0x3c,0x78,0xb8,0xb4,0xcd,0x29,0x62,0x84,0x59,0xb5,0xb4,0x57,0x07,0xa8,0x79,0x77,0x21,0xf4,0x82,0xa7,0xb1,0x36,0xee,0x16,0x8e,0xb5,0x9a,0xf7,0x03,0xac,0x64,0x03,0x20,0x48,0x24,0xbc,0xbb,0xec,0x50,0xed,0xa1,0xf3 +.byte 0x67,0xd9,0x34,0xe1,0x0c,0x0b,0xc3,0xd0,0x46,0x0b,0x55,0x85,0x59,0x3c,0xb4,0x7d,0xd0,0xc2,0xe7,0x95,0x24,0x1f,0x53,0x76,0xf1,0x81,0x4a,0x61,0x6a,0x2e,0x3b,0x3f,0x92,0x14,0x7c,0xe0,0x33,0x7f,0xb4,0x85,0x92,0x78,0x0c,0x0b,0xe7,0xbd,0x7a,0x08,0x31,0x7d,0x47,0x3b,0xfa,0xdd,0x90,0x9e,0xf0,0xa9,0xd1,0xa7,0x7c,0x2a,0x37,0xb1 +.byte 0x23,0x71,0x34,0xa0,0x63,0xfb,0x9e,0x8f,0x39,0x00,0xa0,0x09,0xd4,0x1f,0xf4,0xba,0x2d,0xc1,0xac,0x6c,0x94,0x18,0x56,0x3e,0x89,0x92,0x63,0x10,0x5e,0xfe,0x76,0xec,0x4e,0xb6,0x5d,0x59,0xf9,0x94,0x46,0x4f,0xda,0xd5,0x3e,0x6c,0x48,0x49,0x7e,0x7c,0x77,0xe7,0x7e,0x22,0x31,0xb5,0x9d,0x15,0xd3,0x08,0x24,0xdb,0x67,0x98,0x6b,0xfc +.byte 0x45,0x54,0x85,0x29,0x9a,0x47,0xa5,0x60,0xe2,0x46,0x36,0x45,0x16,0x54,0xd6,0xb1,0x5c,0x38,0x45,0xf8,0x43,0x28,0x58,0x81,0xc9,0x57,0x10,0xda,0x3b,0xfc,0x3e,0xe4,0xf4,0xb2,0x16,0xb6,0x16,0x1d,0xa4,0x68,0xa6,0xe0,0x36,0xdb,0xe2,0x19,0x1c,0xce,0x9f,0x94,0xa9,0x94,0xad,0x20,0xcb,0x17,0xd0,0x92,0x37,0x75,0x88,0x0d,0xaf,0xdf +.byte 0x98,0x6d,0x19,0x9e,0x8e,0x61,0xe4,0x8c,0xfc,0x27,0x27,0x6a,0xa7,0xa4,0x66,0x7f,0x08,0x03,0xef,0x5c,0x4a,0xb7,0x89,0xa1,0xae,0xe8,0x70,0x3f,0x13,0x27,0x0a,0x7d,0x5d,0x5e,0x2b,0x69,0xb5,0x98,0x1f,0x25,0x1e,0x41,0xff,0x46,0x5a,0x25,0x1f,0xb4,0x90,0x8e,0x81,0x91,0x19,0x63,0x10,0xd4,0xa9,0xdf,0x3b,0xae,0xe6,0x63,0x1a,0xdc +.byte 0x09,0x5f,0xac,0xaa,0xb8,0x6b,0xbd,0x6a,0x90,0x70,0xce,0x2c,0x63,0x6d,0x48,0x78,0xca,0xc1,0x59,0x94,0xe2,0xc7,0x89,0x17,0x73,0xfa,0x73,0x34,0xb7,0xd3,0x9c,0x4e,0xd8,0xac,0x18,0x80,0x25,0xbf,0xbe,0x75,0x0a,0x9a,0x05,0x5e,0x54,0xcb,0xba,0xab,0xca,0x7f,0x96,0xf7,0x26,0x8c,0x82,0xe0,0x23,0xa5,0x86,0xb5,0xdf,0x31,0xd0,0x2f +.byte 0xe3,0x66,0x96,0x83,0xd2,0x04,0x43,0x8a,0x28,0x59,0x49,0xdc,0x11,0x38,0xd9,0x5f,0xc2,0x31,0xaa,0xa8,0x1a,0xff,0x57,0xf1,0x84,0x18,0x28,0xe8,0x04,0xae,0x98,0xa4,0x17,0xc4,0x35,0x75,0xf5,0x37,0xf5,0x27,0x3e,0x7e,0x32,0xa4,0xcb,0xd4,0x43,0x59,0x02,0x63,0x7b,0x7c,0x9d,0xa7,0x61,0x12,0xf7,0xdc,0x12,0xe0,0x07,0xac,0x96,0xf3 +.byte 0x71,0x43,0xe5,0x30,0xe0,0x4c,0x51,0x2a,0x19,0xf5,0x79,0x59,0x5a,0xc5,0x74,0xfa,0x54,0x18,0xb4,0xb1,0xfb,0x4b,0x9b,0xf8,0xe4,0xa4,0x63,0x25,0xc3,0x84,0xeb,0x2e,0xa1,0xf8,0xf8,0x7b,0x25,0x6a,0x7d,0x14,0x38,0x06,0xeb,0xae,0x9f,0xa5,0x80,0x9a,0x8a,0xb6,0x46,0x95,0xdf,0x52,0x11,0xd4,0x30,0xcc,0x11,0x8f,0x4a,0x5e,0x56,0x26 +.byte 0x60,0x3d,0x5f,0x0b,0x04,0x94,0xcd,0xca,0x1d,0x6b,0x83,0x51,0x83,0x8d,0xf8,0x33,0x4a,0x91,0x00,0xa4,0xf5,0x44,0x5b,0xad,0xa0,0x4a,0x72,0xaf,0xe6,0x4a,0x0d,0x1e,0x9f,0x18,0x6b,0xb4,0xdf,0x85,0x61,0x2a,0x3b,0xe1,0x4c,0xaa,0xc3,0x17,0xef,0x51,0x9f,0xae,0xb5,0xca,0xaa,0x6c,0xd9,0xa1,0xf5,0xa3,0x6f,0x1c,0xca,0xb3,0x37,0xda +.byte 0x27,0xea,0xcb,0xb7,0x36,0xb2,0x11,0xda,0x9f,0x07,0x78,0xaa,0x6c,0xad,0x63,0x9b,0x49,0x6b,0xfe,0x1f,0x93,0x82,0x73,0xc9,0xc8,0xf6,0x68,0x54,0x50,0x77,0xba,0x78,0xc7,0x82,0xee,0xbd,0x97,0x66,0xb9,0x22,0x49,0x0d,0x7a,0x1f,0x0f,0x4e,0xe5,0x02,0x8b,0xa6,0x1b,0x11,0xfc,0xa6,0x37,0x2a,0x5c,0x66,0xaf,0xac,0xa5,0x9f,0xbf,0x26 +.byte 0x98,0x9b,0x25,0x44,0x48,0x09,0xe6,0x76,0xb9,0x08,0xf1,0x37,0xcf,0x86,0xc9,0xdf,0xa8,0xf3,0x88,0x2f,0xc1,0x33,0x15,0x95,0x59,0xf7,0x9b,0xf2,0x48,0x76,0xcb,0xd0,0x31,0xe4,0x27,0x74,0x2d,0x6e,0xd2,0xc3,0x29,0xea,0xef,0xff,0x4e,0x3d,0xda,0x3e,0xef,0x94,0x94,0x40,0xcd,0x93,0xcf,0xb8,0x56,0x29,0xf8,0x20,0x20,0xa3,0x66,0x83 +.byte 0xba,0xc8,0x4f,0xe6,0x22,0x96,0xb5,0xb2,0x44,0x75,0x55,0x98,0xed,0x11,0xd0,0x58,0x50,0x26,0xf1,0x4a,0xf6,0x80,0x5c,0x17,0x92,0xba,0xc2,0xd6,0x68,0xd4,0x7a,0x4f,0xdf,0x16,0x97,0xbd,0xad,0xd7,0x1b,0x0c,0xe5,0x23,0xa9,0xaa,0xf4,0x1c,0x8d,0xec,0xbf,0xf0,0xb5,0xaa,0x49,0xfd,0xf1,0x31,0x9b,0xf9,0xe9,0x21,0xa1,0x20,0xab,0xbe +.byte 0x56,0x8c,0xf2,0x85,0xdc,0x1f,0xea,0x25,0xce,0xf5,0x6c,0x18,0x7d,0xc4,0x1a,0x01,0x08,0x01,0xed,0x02,0xa8,0xac,0x7f,0x74,0x2c,0xd7,0x28,0x25,0x6e,0x68,0x19,0x38,0x8d,0x20,0x51,0x8f,0x38,0x8b,0x03,0x36,0xae,0x50,0x35,0x28,0x65,0x7e,0x15,0x2a,0x80,0x2c,0xae,0xcd,0xb3,0xb6,0x91,0xf1,0x8c,0xf2,0x8c,0xc5,0xce,0x3e,0x3a,0x97 +.byte 0x5a,0xff,0xe1,0x37,0x13,0xf7,0x6b,0x07,0xb2,0xaa,0xaa,0x57,0x18,0xb7,0xb2,0x19,0x52,0xbf,0x59,0x0b,0x6f,0xba,0x56,0x54,0x14,0xac,0x21,0xfd,0x7d,0x03,0x4b,0x0b,0x39,0x54,0xba,0xf9,0xba,0x73,0xcd,0x67,0x13,0x30,0xca,0x19,0x80,0x4f,0x18,0xb4,0x75,0x2a,0xec,0x78,0xa7,0xd0,0x5c,0x53,0xe2,0x43,0x2c,0x08,0x5f,0x5c,0xe6,0x60 +.byte 0xde,0x04,0xf6,0x75,0xca,0x35,0x3b,0xf6,0x68,0x53,0x60,0xc0,0xed,0xb0,0x15,0xa1,0xa4,0x89,0x23,0x34,0x49,0x35,0xd2,0x78,0x4b,0x8f,0x7c,0x8d,0x59,0x22,0x9f,0xad,0x72,0x47,0x5b,0xde,0xf2,0x09,0x08,0xa0,0x8d,0x5f,0x4d,0xc3,0xd1,0x83,0x17,0xbc,0x39,0x8e,0xa5,0x53,0xaa,0xe3,0x31,0x03,0x93,0x14,0xb4,0x57,0xf0,0xdf,0x54,0x1d +.byte 0x79,0x4d,0x21,0x1a,0x8f,0x3f,0x6e,0x07,0x41,0xcc,0x2d,0x94,0x55,0x4e,0x50,0xfd,0xac,0xe3,0xef,0xa7,0x50,0x3b,0x3c,0xda,0x32,0x25,0xee,0xd9,0x01,0x37,0x8e,0xb3,0x23,0xc5,0x5e,0x12,0x88,0x6d,0xd5,0x41,0xfd,0x3f,0xfa,0x75,0xb8,0xcb,0x82,0x10,0x81,0x38,0x1b,0x10,0x2d,0x2c,0x6b,0x62,0xa1,0x7c,0xd1,0x75,0xd8,0x8c,0x0c,0x2f +.byte 0xe8,0x97,0xff,0x18,0xb3,0x12,0xa2,0xef,0x6c,0xc5,0x79,0x9f,0x64,0xf3,0xc7,0xdc,0xdb,0x54,0xa4,0x25,0xc7,0x30,0xfb,0x6c,0x5a,0x50,0x24,0xf9,0xb6,0xc9,0xe7,0xda,0x78,0xcc,0x1b,0x5e,0xf3,0xe7,0x32,0xd8,0x36,0x47,0x10,0xe5,0x2c,0xeb,0xea,0xf7,0x25,0x30,0x93,0x64,0x88,0xc8,0x59,0xf8,0x5c,0x02,0x43,0x4c,0x23,0x8e,0x1c,0x42 +.byte 0xe4,0x36,0x39,0xbf,0xba,0x8b,0xe3,0x53,0x01,0x32,0x0d,0x89,0xc2,0xea,0x35,0x94,0xf1,0x0d,0x29,0x45,0x08,0x07,0x15,0xcb,0xd7,0x3e,0x4d,0x9f,0x04,0xd8,0x18,0x8a,0x56,0xa3,0xb1,0x1c,0x46,0x19,0x8b,0xd0,0x51,0x30,0xf3,0xca,0x52,0x2a,0x16,0xc4,0x90,0xc1,0x00,0x50,0x87,0x8b,0x4c,0x71,0x61,0x48,0x69,0xb2,0xf1,0x33,0xaa,0x79 +.byte 0x81,0x8b,0x36,0x33,0x19,0x41,0x6b,0xc1,0x91,0x40,0xf2,0xcc,0x1d,0x83,0x09,0xab,0xcc,0x6f,0x6c,0x54,0x91,0x62,0x80,0xac,0xe6,0x1f,0xcd,0x5d,0x05,0x2b,0xe5,0xac,0xbc,0xd6,0x1b,0x8b,0xef,0x95,0xa0,0xf3,0xfe,0x8e,0x4d,0x32,0x77,0xe8,0x02,0x8f,0x44,0xad,0xc4,0x40,0xc3,0x99,0x68,0x81,0x47,0x15,0xbd,0x3b,0x8f,0x0b,0x9b,0x3a +.byte 0xb3,0x9d,0x8f,0x3d,0x86,0xd1,0x89,0x5f,0x67,0x19,0x33,0x2d,0x18,0x64,0x0e,0x3a,0x13,0xa4,0xe9,0xb4,0xc9,0x90,0x09,0x6a,0xcb,0x5d,0x0d,0x83,0x13,0x04,0x29,0xe5,0xa5,0xf4,0x00,0x56,0xf4,0x80,0x96,0x33,0x93,0xe4,0x9b,0xc4,0x6e,0x38,0xbf,0x0a,0xe0,0xee,0x8c,0x89,0x5d,0x60,0x36,0x7e,0x69,0xc2,0xc7,0x28,0x6f,0x2b,0x97,0xfb +.byte 0xb3,0x5b,0x82,0xe8,0x9a,0x36,0x44,0xd7,0x1f,0x9b,0x1b,0xd0,0x14,0xe4,0xd4,0x0d,0x35,0xcd,0xee,0x88,0x50,0x37,0x5c,0x88,0x09,0xa5,0x16,0x4d,0xe1,0xbc,0xe8,0x79,0x8f,0xa9,0x18,0xb8,0x43,0xb4,0xd7,0x32,0xcd,0x26,0xdd,0x78,0x29,0x59,0xad,0x29,0xe3,0xe0,0xe7,0xcf,0x16,0x03,0xc6,0x8a,0xb6,0xa2,0x09,0x9a,0x6e,0x90,0x7b,0x0c +.byte 0x9d,0x20,0xb6,0xc4,0x28,0x3f,0x44,0x06,0xa9,0x45,0x72,0x27,0xa7,0x56,0x3f,0x07,0xff,0x13,0xd9,0x80,0xda,0xbd,0x25,0xad,0xd3,0x74,0x2c,0xd8,0xd2,0x93,0xa5,0xda,0xbc,0x5f,0xa5,0xde,0xb7,0x3a,0xf0,0xd2,0x17,0xb1,0xc3,0x70,0x2a,0x85,0xde,0xf0,0x97,0x7b,0x96,0xb2,0x0e,0x45,0x7f,0x63,0xd4,0x94,0xd8,0x78,0x05,0xcf,0xea,0xb3 +.byte 0xfb,0x7a,0x79,0xb5,0x91,0x53,0xb8,0x8c,0xa2,0x03,0xf4,0xc3,0xed,0xf0,0xab,0x33,0x5c,0x6e,0xcd,0xbd,0x73,0xe3,0xe9,0xd0,0x83,0x2a,0x2a,0x68,0x32,0xf1,0x69,0x4f,0xd0,0x8b,0xe8,0xa1,0x7d,0x5b,0x0f,0x69,0xc2,0x33,0xbf,0xc1,0x54,0x29,0x47,0xed,0x9f,0xdb,0x35,0x0a,0x3d,0x2b,0x9d,0x8b,0x91,0xb6,0xe0,0xbc,0x53,0xba,0xb7,0xcd +.byte 0x2c,0xd9,0xeb,0x81,0xa0,0x2e,0x14,0x6e,0xdc,0xe1,0x90,0x36,0x14,0x9d,0xa8,0x8b,0x6b,0x1b,0xac,0x4c,0x09,0x8b,0x1a,0x87,0xf4,0x66,0xf6,0xfb,0x62,0x92,0x13,0xcf,0xb2,0x96,0xf0,0xc9,0x8b,0x12,0x99,0xf1,0x16,0xae,0x5c,0x27,0x24,0xa8,0xfd,0xb3,0x4c,0xc2,0xe6,0x3f,0xd2,0xc6,0x0c,0xf2,0x65,0x4e,0xdf,0xf1,0x06,0xb8,0x99,0xc4 +.byte 0x3a,0x35,0xba,0xed,0x18,0x3e,0xfa,0x03,0x51,0x8d,0x45,0x68,0x12,0x7b,0xb6,0xac,0x63,0x99,0x47,0xee,0x6f,0x8b,0xcb,0xc1,0x0a,0xf9,0x23,0xf0,0x05,0xe1,0x03,0x4a,0xb5,0xe0,0x65,0x71,0xc8,0x64,0x7e,0x0d,0x39,0xe7,0x96,0xdb,0x34,0x63,0x2e,0x1a,0x27,0x85,0x52,0x63,0x8e,0x44,0xfb,0x61,0xca,0x79,0xe5,0x91,0x99,0x83,0x2d,0xe0 +.byte 0x26,0x04,0xad,0x43,0x26,0xf2,0x7e,0x56,0xae,0x35,0x6a,0xfb,0xec,0xc6,0x27,0xe4,0x3a,0xa3,0x6b,0x63,0x72,0xba,0x98,0x03,0x9f,0x2a,0x4c,0xb1,0x33,0x22,0x9d,0x53,0xf6,0x00,0xa3,0x1e,0x32,0xcb,0xbe,0xe0,0xc2,0xf8,0x71,0xcd,0x3f,0xe3,0x4d,0x83,0xf2,0x9f,0x1c,0x91,0x35,0x97,0x52,0x95,0xba,0x24,0x04,0x04,0xca,0x32,0x6d,0xd7 +.byte 0x4b,0xd4,0x9e,0x8b,0x73,0x42,0xfb,0x9f,0xfc,0x93,0xea,0xc2,0x41,0x56,0xa9,0xe5,0xdd,0xd0,0x37,0x8a,0xe2,0x92,0x9f,0x45,0x4f,0xd8,0xef,0xe6,0x6f,0x58,0x41,0x5f,0x7b,0xe7,0x0f,0x32,0xce,0x06,0x02,0x7f,0xe2,0x37,0x87,0xb7,0x35,0x72,0x68,0x87,0xc9,0x35,0xa8,0x51,0xce,0xd8,0xde,0xc3,0x8c,0xb4,0xab,0xf4,0xa7,0x3b,0xcd,0xc8 +.byte 0x0a,0x56,0x5b,0x48,0xb1,0xa4,0x27,0xa8,0x9e,0x3e,0x04,0xbc,0xb3,0x63,0x3e,0xd5,0xf7,0xae,0xec,0x0c,0x6e,0x4a,0x73,0xb6,0xed,0x66,0xea,0xc1,0x7a,0xc4,0xaa,0x21,0x27,0x62,0xef,0x3d,0x1d,0x51,0x8b,0x63,0xe6,0xe2,0x8a,0xed,0x7a,0x4b,0x90,0xc3,0x9f,0x91,0xb4,0x8f,0x78,0x65,0x9c,0xdd,0x0a,0x7a,0x50,0x36,0x33,0x30,0x3b,0xb4 +.byte 0xdf,0x67,0xbd,0xfd,0x71,0xfc,0x40,0x49,0xaa,0x01,0xdf,0x68,0x67,0x73,0x31,0x2c,0x98,0x2f,0x8c,0x9e,0x2d,0xce,0x4a,0x71,0xbc,0x6f,0x90,0x1d,0xc0,0x37,0x07,0x30,0x0c,0xa3,0x04,0xfb,0xd1,0xd0,0x0e,0xcb,0xdc,0x94,0x06,0x7f,0x83,0xe5,0x45,0x47,0xd0,0x71,0x06,0x94,0x23,0x7c,0x03,0x80,0x46,0xa5,0x10,0x08,0xd1,0xdb,0xfb,0x9d +.byte 0xd4,0x05,0x01,0x5e,0x66,0x4d,0xf9,0x32,0x9b,0x5b,0xfe,0x7a,0x60,0x63,0x77,0x9a,0x31,0x34,0xe5,0x9a,0x82,0x2d,0x2b,0xb7,0xe0,0x04,0x8f,0x86,0xf3,0xb2,0x16,0x86,0x50,0x37,0x9d,0x80,0xe7,0x62,0xdf,0x77,0xda,0xf4,0xfc,0xb7,0x42,0x9d,0xac,0xcb,0x11,0xff,0x0c,0x6f,0x4e,0x16,0x0c,0x59,0x04,0x05,0x8f,0x88,0x64,0x37,0xe6,0x6c +.byte 0xee,0x64,0x58,0x79,0x60,0xd4,0x2f,0xb7,0x90,0x59,0xfb,0x82,0x3b,0x20,0x2e,0x2b,0xba,0x15,0xfb,0xf7,0x5b,0x1d,0x81,0x8a,0x8a,0x8f,0xe3,0x39,0x92,0x34,0xfc,0x3a,0x67,0xce,0xb6,0xa0,0x9b,0x56,0x78,0x96,0x4d,0x32,0xbf,0x9c,0x83,0x9e,0x19,0x66,0x20,0x42,0xb2,0x78,0x62,0x42,0xdd,0xdf,0x98,0xab,0x0c,0x3d,0x41,0xb5,0x74,0xc1 +.byte 0x2d,0xf0,0x02,0x58,0x6e,0xb3,0x4d,0x7b,0x41,0x1c,0xf1,0x09,0xc1,0xbb,0x84,0x67,0xf8,0x24,0x77,0x32,0xcd,0x7a,0x63,0x87,0x0d,0xf2,0xc5,0xaf,0xe4,0xb5,0xc6,0x3b,0xad,0x66,0x5e,0xae,0x90,0xc2,0x24,0x27,0x7a,0x0b,0xed,0x1b,0x86,0x5d,0x02,0x19,0x85,0x78,0xc8,0xb1,0xce,0xe7,0xc9,0x5c,0xce,0x43,0x58,0xac,0x1c,0x4e,0xcd,0xb8 +.byte 0x3a,0xb8,0x7a,0xf3,0x79,0x4b,0x97,0xcf,0xbe,0x88,0x24,0xd0,0x9a,0x5a,0x55,0x43,0x0c,0x48,0xa2,0x7f,0xaf,0x4b,0xd8,0x16,0x02,0xfb,0xe6,0x0c,0x6b,0x85,0xb4,0xb8,0x5e,0x40,0x60,0x5d,0x93,0x51,0xc6,0x32,0xb9,0x4a,0x23,0x96,0x71,0xeb,0xe8,0xe8,0x01,0x1e,0x85,0xb0,0x47,0xde,0x86,0x15,0x52,0x3a,0xb2,0xd3,0x86,0x4b,0x78,0x09 +.byte 0x9c,0x6e,0x9d,0xd9,0xef,0xe8,0x64,0x2d,0x2a,0xec,0x21,0x5a,0x60,0xa5,0xe4,0x26,0xbb,0x79,0x0c,0xdb,0x48,0xd6,0x4b,0x5c,0x5b,0xe3,0x34,0xc9,0x96,0xf0,0xcb,0x68,0x8a,0x2d,0xee,0xa3,0x37,0x34,0x5f,0x3e,0x65,0x40,0xce,0xe1,0xc8,0x2e,0x11,0xca,0x42,0x51,0x53,0x72,0x3d,0xa9,0x68,0x54,0xb4,0xd8,0xd7,0x72,0x84,0x8d,0xcd,0x6d +.byte 0x1f,0x0e,0x0c,0x0f,0x32,0x3a,0x7d,0xdd,0xc1,0xd3,0xe7,0x2d,0x1f,0x52,0x8b,0x73,0x86,0x70,0x2a,0xcb,0x71,0x37,0xa1,0xab,0xe3,0x94,0x5a,0xd7,0x9d,0x68,0xc1,0x6e,0x5d,0x72,0x25,0x81,0xe8,0x45,0xad,0x6c,0xf8,0xdb,0x9b,0x70,0x31,0xb9,0xf0,0x4f,0x23,0xd7,0x03,0xc8,0x87,0x43,0x51,0x7a,0x55,0xfe,0x6f,0x2d,0x40,0xbc,0xfe,0xdf +.byte 0xe6,0x21,0x4b,0x4d,0xc6,0x02,0x48,0xe7,0x7a,0x2a,0xef,0x91,0xdf,0xbc,0x98,0x91,0x6f,0x59,0xc4,0x47,0x77,0x2e,0x45,0x45,0x23,0x47,0x5d,0xf8,0x50,0x41,0x84,0x75,0x8a,0xe7,0x4d,0xfb,0xeb,0x58,0x00,0xcf,0x42,0xca,0x02,0x05,0xc7,0xfa,0x11,0xfb,0x6e,0x90,0x7d,0x53,0xa0,0x19,0x23,0x24,0x8f,0x89,0x17,0x40,0xbe,0x11,0xfb,0xd9 +.byte 0x04,0xf8,0x84,0xeb,0x90,0x7c,0x84,0x45,0x9c,0x53,0x45,0x5e,0x45,0x51,0x55,0xfc,0xf1,0x6b,0x02,0x24,0xfd,0x95,0x4a,0x40,0x80,0xdc,0xa6,0x94,0x15,0x2c,0x1d,0x85,0xa0,0x07,0x8d,0xf8,0xf2,0x95,0x0c,0xa0,0x4e,0x5a,0x5b,0x29,0x09,0xcc,0xf3,0x4e,0x8e,0xea,0xe8,0x26,0xb8,0xbe,0xb2,0x6f,0x76,0x6f,0xa4,0xe5,0x6a,0x50,0xcf,0xc8 +.byte 0x7d,0xb6,0x1e,0x9d,0x90,0x6b,0xde,0xe2,0x55,0x49,0x97,0x00,0xa5,0xc5,0x1f,0x1c,0x41,0x66,0xe7,0x6b,0x20,0xb2,0x1e,0xc7,0xb3,0xd4,0xa9,0x75,0xbb,0x83,0x24,0xd0,0xdf,0xbd,0xba,0x2c,0x2f,0xa4,0x03,0x1d,0x17,0xc5,0x74,0xc2,0x6a,0x20,0x71,0x18,0xd1,0xc5,0xb0,0x78,0xfe,0xda,0x55,0xd2,0x43,0x2a,0xd8,0x88,0x74,0x75,0x86,0x07 +.byte 0xe9,0x8b,0x0d,0x0f,0xe5,0x8d,0xe8,0x3d,0xf4,0x93,0xde,0x4c,0x97,0x98,0xe2,0x9b,0x22,0xde,0x13,0x18,0x8b,0xc5,0xe1,0x6f,0x6d,0xb4,0x19,0x46,0xff,0xbd,0xa6,0x2e,0xe6,0x48,0xcd,0x66,0x22,0x7d,0xf4,0x0e,0xeb,0x74,0x25,0x5c,0x90,0x0e,0x26,0xce,0x17,0xe9,0xdb,0x30,0xb9,0x25,0x99,0x96,0x46,0x3a,0x78,0xa3,0x76,0x2d,0x9e,0x42 +.byte 0x06,0x8a,0x1e,0x62,0x46,0xa4,0xd0,0x1d,0xe2,0x4c,0x3c,0xb4,0x4c,0xc0,0xd1,0xf7,0x05,0x5b,0xe4,0xd4,0x71,0x73,0x31,0xfc,0x98,0x2a,0x55,0xb0,0x78,0x92,0x59,0x8b,0x25,0x97,0x15,0xf2,0xf9,0x57,0x8b,0x7c,0xd4,0xc4,0x47,0x2f,0x10,0x3b,0x76,0xde,0x5f,0xb1,0xdf,0xdc,0xb0,0x15,0xd5,0x4a,0xd2,0x54,0xad,0x5e,0x32,0xf4,0x5a,0x1a +.byte 0x8d,0xe8,0xa0,0x4a,0x4e,0x04,0xdc,0xdd,0xd2,0x57,0xe5,0x24,0x4b,0x93,0x51,0xef,0xd4,0xba,0x3f,0x77,0xfc,0x0a,0x5c,0x7d,0x6e,0xa7,0x86,0xe5,0x88,0xd1,0xac,0x74,0x46,0x9a,0x39,0xb6,0x98,0x3d,0xae,0x89,0x4e,0xea,0x8d,0xdc,0xc7,0xb9,0x0c,0xd7,0xa6,0x06,0x4d,0x28,0x2b,0x51,0x2b,0xdb,0x30,0x4a,0x91,0x1c,0x40,0x89,0xe4,0xba +.byte 0x72,0xd5,0xed,0x16,0x66,0xb8,0xef,0x81,0xd9,0x51,0xf8,0x1b,0xff,0xab,0x8b,0x52,0xb8,0xf3,0x11,0xb3,0xe5,0x04,0x5a,0xb0,0x60,0xa3,0x35,0x12,0x6a,0xa0,0x75,0x5c,0x21,0xa9,0x5a,0xe8,0xd3,0xd7,0x8a,0x1f,0xe0,0x9b,0xb7,0x1e,0x7d,0xbe,0x81,0xaa,0x56,0x5a,0xd8,0x2d,0x7e,0x0c,0x60,0xb2,0x68,0x26,0x6d,0xaa,0x8b,0xcc,0x11,0x40 +.byte 0x25,0xea,0xc9,0x94,0xfb,0x3b,0x9b,0xa7,0x3a,0xde,0xd9,0xfe,0x6b,0x4b,0xfc,0x3f,0xbf,0xdd,0x51,0x9b,0xa1,0xca,0x2f,0xed,0x33,0xd8,0x3d,0x92,0xa4,0x1d,0xee,0xb2,0x47,0xd0,0x72,0x6a,0x96,0x33,0x0f,0xdd,0x0a,0xd9,0xbd,0x86,0xdb,0x25,0x53,0x0e,0x3c,0x31,0xad,0x05,0xb9,0x24,0x13,0x00,0xdf,0xc2,0x7c,0x3d,0x03,0x9b,0xf6,0x6d +.byte 0x93,0xd9,0xdf,0x73,0xf8,0x1c,0x98,0xe2,0x77,0x46,0x46,0xdc,0x07,0xe6,0xbb,0xc1,0xa7,0xb6,0xbe,0x21,0x07,0xae,0xdb,0xca,0x69,0x2d,0x8a,0x2b,0x59,0x27,0xe0,0x7c,0xf0,0xf1,0x34,0x69,0x97,0x44,0xba,0xbb,0x48,0x9f,0xd9,0xd8,0x16,0x1a,0xef,0x11,0x68,0xb6,0xaf,0x3a,0x10,0xc6,0x7c,0xd1,0x12,0xc7,0x89,0x47,0xe3,0xd1,0x24,0xc6 +.byte 0x44,0x9f,0x7e,0x6a,0x66,0x43,0x48,0xd6,0x9f,0x7b,0xf0,0x1f,0xd2,0x5f,0x2b,0xa7,0x13,0x6a,0x7c,0x70,0x08,0x38,0xb0,0x00,0xbc,0x7c,0xd3,0x01,0x9b,0xf6,0x29,0xd3,0x9c,0xa4,0x11,0x90,0xe4,0x9f,0x04,0xd6,0x21,0xec,0xfd,0xcb,0xb8,0xe6,0xb6,0x49,0x2b,0xfa,0x4b,0x90,0x9e,0xc6,0x0c,0x87,0xff,0x5e,0x2e,0xcc,0xf8,0x09,0x70,0x52 +.byte 0x42,0xec,0x88,0xac,0x1e,0x76,0x2b,0xeb,0xfc,0xb3,0x65,0x81,0x34,0xb1,0x06,0x90,0xde,0xb2,0xc4,0xd3,0xfd,0xd4,0x9c,0x78,0x1a,0x5c,0x8f,0x65,0x0a,0xbd,0x88,0xe5,0x95,0x06,0xb5,0x94,0xe5,0xbf,0x90,0x31,0xbb,0xcb,0xce,0x19,0x51,0x25,0x4a,0x47,0x35,0x26,0x93,0xdb,0xe2,0x93,0x36,0x47,0x7d,0xdd,0x4e,0xd5,0xeb,0xdd,0x63,0x1c +.byte 0xbc,0x2d,0x75,0xdb,0xd4,0xfa,0x60,0x4b,0x51,0x45,0x32,0x0f,0x01,0xf9,0x73,0x9b,0xd8,0xbc,0xee,0xaa,0x7d,0x2e,0xfe,0xbf,0x9d,0x45,0xae,0xe2,0x01,0xe3,0xbf,0x58,0xdc,0xc0,0xb8,0xe8,0x44,0x16,0x3b,0xd8,0xaa,0x3b,0x13,0xca,0xfb,0x5f,0x8d,0xb3,0x2a,0x83,0x66,0x49,0xae,0x54,0x02,0x4e,0xd8,0x68,0xee,0x21,0x1a,0xbb,0xf4,0xf7 +.byte 0xdf,0xf1,0x51,0x7b,0x62,0xa8,0xb2,0xdc,0x4b,0xd4,0x04,0xd2,0x05,0x49,0xdd,0xa4,0x75,0xe6,0x64,0x82,0xe7,0x25,0x55,0x60,0x2c,0x9f,0x8a,0x7a,0x11,0xe9,0xf2,0x72,0xfe,0x89,0xe1,0xaf,0xca,0x0c,0xb9,0xf5,0xcc,0xcf,0x07,0xef,0x8f,0xbb,0xef,0x53,0x1e,0xe2,0xfb,0x98,0xe8,0x05,0xab,0x4e,0x7e,0x38,0x56,0x24,0xd5,0x74,0x1c,0x95 +.byte 0x1a,0x0e,0x62,0x92,0x80,0x16,0x45,0x78,0x2f,0xb1,0xe1,0x83,0x24,0x2b,0x16,0x5c,0x05,0x52,0x17,0xe9,0xe8,0x9e,0x5d,0x63,0x8f,0x77,0xc4,0x89,0x22,0x76,0x43,0x31,0xfd,0x09,0xc0,0x51,0x70,0x57,0x2d,0x51,0x91,0xe5,0x61,0x3f,0x77,0xff,0x17,0xfc,0xa6,0x19,0x9d,0x82,0x46,0x11,0x0c,0x77,0x19,0x2a,0xf5,0x19,0xb4,0x3d,0xa6,0xd4 +.byte 0x8b,0x07,0x4b,0xc6,0xa3,0x1e,0x8c,0xf5,0xe8,0x2d,0xe7,0xcc,0xa1,0x38,0x57,0x66,0x76,0x1d,0xdd,0xe3,0xb9,0x0a,0x1e,0x2c,0xad,0x09,0x07,0x26,0xff,0x7a,0xc0,0xb0,0x51,0x71,0x44,0x6d,0x2c,0x39,0x3d,0xa6,0x14,0x4e,0x74,0x2c,0x54,0x3d,0xfa,0xdc,0x2e,0x0c,0xc4,0x88,0x32,0xda,0xb0,0x9d,0xf4,0x2c,0x0a,0x1b,0xb7,0xb4,0x78,0x6f +.byte 0x1b,0x6a,0x21,0x03,0x4e,0xe0,0x87,0xa0,0x1c,0xd8,0xe6,0x0c,0x97,0x47,0xde,0x98,0x81,0x3d,0x39,0x93,0x3d,0xcb,0x29,0xa3,0x93,0x8d,0x27,0x5d,0x29,0xb5,0x85,0xc4,0x32,0xd8,0xdc,0x19,0xb1,0x63,0xdc,0x76,0x32,0xc3,0x52,0x9a,0xfd,0x3d,0xff,0xf9,0x94,0x55,0x72,0xbb,0x4d,0xe2,0x42,0xd2,0xf7,0xb2,0xac,0xac,0x5d,0x50,0x95,0xda +.byte 0x3a,0x87,0xb6,0x0f,0x27,0x72,0x34,0xe7,0xe8,0x9f,0xc7,0xba,0xca,0x8d,0xf3,0xb9,0xa1,0xdd,0xd7,0xa5,0x70,0x3b,0xcc,0x72,0x0e,0x9d,0x85,0x75,0x01,0x11,0xe1,0xc2,0xca,0xcb,0x40,0x3a,0x31,0xf2,0x5d,0x0c,0x63,0xc8,0xbf,0x38,0xde,0x09,0x3b,0x32,0xaa,0x6c,0x07,0xd2,0x2b,0x3b,0x94,0x37,0xd0,0xd9,0xe0,0x4c,0x25,0xa3,0x22,0x64 +.byte 0x05,0xcc,0x69,0x9e,0x73,0xd4,0x46,0x2c,0x73,0x23,0xd0,0x6f,0x09,0xff,0x8b,0xef,0x7a,0x08,0x3e,0xa2,0xa7,0x9d,0xf5,0xc9,0x40,0xd1,0x06,0xd6,0xe3,0x89,0xa5,0xcc,0x9f,0x40,0x67,0x80,0x11,0xec,0x5d,0x23,0x19,0xf3,0x66,0xaf,0x06,0xcc,0xe4,0xb6,0x5e,0x20,0xf7,0x19,0xce,0x1a,0xb6,0x86,0x0d,0x39,0x1d,0xc8,0x0a,0xdb,0x50,0x52 +.byte 0x7e,0x3b,0x96,0x9f,0x05,0xdd,0xd8,0xdf,0x40,0xdf,0xe4,0x66,0x14,0x4d,0x4e,0xb3,0x9f,0x86,0x7b,0xc2,0x99,0xc3,0x8f,0xb9,0xe7,0xc3,0x50,0xa4,0xab,0xb8,0x8e,0xc5,0x28,0xce,0x8b,0x51,0xcb,0xad,0xd8,0x1a,0x23,0x7d,0x12,0xc2,0xaf,0x1a,0x93,0x4c,0x57,0xe9,0x59,0x6a,0x03,0x65,0x81,0x07,0x40,0x84,0x92,0x9d,0x22,0x8a,0x3d,0x27 +.byte 0x39,0x05,0xdd,0xf7,0x20,0xad,0xc2,0x03,0x27,0x87,0x8e,0xc1,0x23,0xad,0xe5,0x59,0x16,0xe7,0xde,0xe4,0x44,0x6b,0x06,0xb5,0x1d,0xaf,0xda,0x08,0x4a,0xfa,0x75,0x1a,0x0b,0x35,0xe8,0x6e,0x29,0xd3,0x79,0x19,0x80,0xb9,0x5f,0x36,0xec,0x43,0x25,0x3c,0xbc,0xcf,0x70,0x0c,0xc7,0x2c,0xbc,0x2e,0x72,0x40,0x73,0x98,0x11,0xc9,0x72,0x9f +.byte 0xd9,0x95,0x9f,0x8d,0x4a,0x52,0xbb,0x89,0x30,0x5b,0xa2,0x7e,0x0c,0x21,0x11,0xda,0x4e,0xa1,0x7c,0xc1,0x0f,0x95,0x1b,0x5b,0x2e,0xbd,0xae,0x8a,0x56,0x82,0x8f,0x84,0x43,0xdf,0x24,0xac,0x99,0xaa,0x8a,0xaf,0x82,0x33,0xf7,0x0a,0xbf,0x5e,0xfd,0xf2,0x91,0xf0,0xe1,0x5d,0x4e,0xa5,0x16,0x6e,0xb4,0x39,0x8b,0x99,0x32,0x6b,0xc8,0x16 +.byte 0xc1,0x84,0x10,0xc2,0x74,0x54,0xfc,0x02,0x71,0x44,0xfc,0x52,0xfa,0xc2,0x3c,0x8d,0xf7,0x8b,0x1e,0xcc,0x5e,0x43,0x66,0x29,0x29,0x93,0xe7,0xf6,0x9f,0xa8,0xa3,0x35,0xc9,0xde,0xb0,0xbe,0x4d,0xdf,0x8c,0x61,0x5a,0x6b,0x16,0x88,0x33,0x65,0x47,0x98,0xd2,0xf8,0x71,0x09,0x9f,0x00,0xb6,0x9e,0x21,0x37,0x2a,0x0b,0xb4,0x74,0x6b,0x0e +.byte 0x6e,0x4d,0x14,0x45,0x6c,0x1b,0xa8,0x4c,0xa7,0xc6,0xc3,0x36,0x6e,0x9e,0x63,0x5a,0x36,0x76,0x04,0x06,0x7f,0xdd,0x74,0x24,0x19,0xd8,0xb7,0xbc,0x6c,0x52,0x82,0x67,0x6b,0xd5,0xcb,0x81,0xdf,0xd7,0xe4,0xdd,0x14,0x33,0x71,0xcf,0x6b,0x7f,0xaf,0x66,0x27,0x8a,0x70,0xb8,0x45,0xae,0x8c,0x1a,0x65,0xd3,0x16,0x5c,0x05,0x65,0xd0,0xfb +.byte 0x07,0xe3,0x98,0xa9,0x94,0x27,0x6c,0xac,0xfc,0xee,0x1b,0x35,0x43,0xd6,0x3b,0x41,0x1c,0x86,0xc0,0x4f,0xf3,0x63,0xf4,0xba,0x4d,0xdf,0x6a,0xda,0xcf,0xb5,0x9f,0x69,0x3f,0x3d,0x0c,0x80,0x79,0x02,0x34,0x4a,0x9a,0xfd,0xb6,0xea,0x0b,0x61,0x32,0x67,0x2d,0x6a,0x6b,0xcb,0xcf,0xa6,0xee,0x6a,0x93,0x11,0x00,0xb8,0x6e,0x27,0x88,0x62 +.byte 0xf7,0x4c,0x7b,0xe1,0x13,0xe1,0x47,0xaf,0x96,0x24,0x3b,0x46,0x8c,0xf4,0xbe,0x13,0xed,0x65,0xe1,0xf2,0x36,0x2d,0xa4,0x6d,0x5e,0xa6,0x93,0xfb,0x64,0x0e,0xbd,0x50,0xdc,0x29,0x4f,0x90,0x8e,0xe1,0x7f,0x5e,0x47,0x08,0x9b,0x1c,0xb7,0xce,0x06,0x80,0x52,0xc0,0xb5,0x82,0x77,0x49,0x3c,0xe0,0x70,0x1f,0x84,0x75,0x9e,0x19,0xb2,0x83 +.byte 0xda,0x40,0xf8,0xd7,0x27,0x1e,0xbc,0x39,0xb5,0x1d,0x25,0x75,0x63,0x7d,0x85,0x2f,0x09,0x07,0xe9,0x73,0x8e,0x2b,0xb8,0x9a,0xbe,0xd6,0x90,0x91,0x6e,0xdb,0x7c,0x9d,0x9b,0x43,0x1d,0x21,0x88,0x76,0xb0,0xaa,0x7b,0x68,0xe4,0xa7,0x92,0x64,0xe4,0x1f,0xff,0x53,0x1d,0xf7,0xc0,0x44,0x5c,0x0a,0x1e,0xcd,0xa7,0x6e,0x41,0x1c,0x8c,0x7d +.byte 0x66,0xa7,0xf6,0xfc,0xa9,0x0d,0x3f,0x9c,0xfb,0x15,0x87,0x14,0x20,0x43,0x1b,0x05,0xf5,0xea,0x5c,0x07,0x61,0xb3,0x0e,0x7c,0x52,0x57,0x1c,0x09,0x33,0xb4,0xd8,0x3d,0x9d,0x17,0xee,0x86,0x25,0xdc,0x6b,0xcd,0x58,0xb7,0x18,0xbd,0x85,0x39,0x0b,0xb9,0xb8,0x35,0x3a,0x86,0xbb,0x88,0xb5,0x5e,0x4b,0x0a,0x7e,0x9c,0x02,0xb5,0x45,0xe5 +.byte 0xc7,0x38,0x56,0x1e,0xe4,0xe7,0xf7,0x88,0xac,0x75,0x9a,0x97,0xa8,0x15,0xb6,0x2d,0xcf,0x2a,0x59,0x65,0x0e,0x00,0x9f,0x8e,0xa9,0x94,0x23,0x1c,0x40,0xe4,0xb9,0x6b,0xcf,0xf0,0x53,0x7f,0x98,0xd1,0xa7,0x72,0xd7,0xe3,0x22,0xfd,0x5f,0x3d,0x3f,0xd6,0x21,0xb4,0x84,0x0c,0x1b,0x1d,0x00,0x2d,0x8f,0x72,0x22,0x2d,0x2c,0x8c,0x54,0x46 +.byte 0xe5,0x53,0xca,0x66,0x67,0x5e,0xb3,0x62,0x6f,0xaf,0x33,0x81,0xc1,0xf6,0x77,0x92,0x3e,0xdb,0x74,0x68,0x93,0xca,0x38,0xf8,0x18,0x50,0xef,0xe4,0xc9,0x45,0x40,0xc9,0xf0,0xc5,0x7a,0x4b,0xf2,0xd8,0xca,0x72,0x62,0x5f,0x67,0x10,0x10,0xcc,0xff,0x1a,0xc7,0x9c,0x3a,0x7f,0xca,0x11,0x67,0x3e,0xca,0xa6,0x9c,0x48,0x15,0xaf,0x68,0xb7 +.byte 0x2b,0xa7,0xa2,0x68,0x7b,0x40,0xb2,0xe3,0x27,0x18,0x7e,0x94,0x4c,0xca,0x0e,0x5b,0x3a,0x30,0xcb,0xc3,0x72,0x31,0x6b,0xe6,0x3e,0xa7,0x09,0x3e,0xf2,0x53,0xda,0x7d,0x6f,0x55,0x08,0xd2,0x26,0xc3,0x07,0x52,0x38,0x90,0x04,0xc6,0x3c,0xb6,0xb5,0x2a,0x7b,0x38,0x07,0x9e,0xb4,0xa5,0x48,0x36,0xf5,0x5e,0xac,0xa8,0x97,0x4e,0x37,0xc2 +.byte 0xee,0x12,0x88,0x28,0xd0,0x7d,0xd1,0xae,0xc0,0xc7,0x84,0x69,0x25,0x79,0x9a,0x8a,0x16,0x49,0x50,0x72,0x69,0x1a,0x02,0xc9,0xfe,0xd5,0x2c,0x40,0xc6,0xc8,0x8b,0x7d,0xe3,0xab,0x89,0xe3,0x78,0xf1,0xe9,0xbd,0x3c,0xbd,0x02,0x96,0xfe,0x0c,0x5c,0xc4,0x9e,0x89,0x3a,0x4b,0xe9,0xcd,0x41,0x1c,0x59,0x71,0x52,0xb0,0xc9,0x36,0xf1,0x80 +.byte 0xab,0x5e,0xbc,0xf1,0x20,0x99,0xc0,0xab,0x0c,0x59,0x43,0xc2,0xcd,0x09,0xa6,0x30,0x91,0xfa,0x12,0x23,0xbe,0x18,0x24,0xa6,0xbf,0x55,0x4c,0xe8,0x22,0xff,0x01,0xbd,0xde,0x2c,0x72,0x3c,0x0a,0x36,0xd5,0x7e,0xed,0x6a,0xe3,0x63,0x14,0x60,0xa3,0x0a,0x6f,0x04,0x90,0x64,0xc1,0xd1,0x78,0x54,0xae,0x19,0x74,0xe2,0xea,0xec,0x86,0x22 +.byte 0xc7,0xdb,0xf6,0x48,0x0e,0x75,0x43,0x04,0xf7,0x62,0xe6,0xa9,0x46,0x65,0xcc,0xa5,0xa4,0x1a,0xb2,0x94,0x7b,0x7a,0x8c,0x9a,0x80,0x62,0x32,0x17,0x80,0xc3,0xc6,0x54,0x0e,0x4e,0xe3,0x46,0x74,0xa8,0xae,0xcd,0xd0,0xc1,0x19,0x84,0x61,0xb4,0x1d,0x18,0x4d,0x80,0xf1,0x70,0x40,0xbe,0xa2,0xa3,0x38,0xcc,0x21,0x1c,0x2f,0x72,0x85,0x72 +.byte 0x0a,0xa1,0x0d,0xa3,0xdc,0xa2,0xf4,0x64,0x84,0x3c,0x43,0x6d,0xfb,0x45,0x11,0xf9,0x40,0xdc,0x25,0x85,0x80,0x41,0x84,0xa7,0x06,0x2e,0x79,0xbf,0x0c,0xa7,0x8f,0x17,0xea,0xa2,0xc4,0x6f,0xd8,0xc6,0x9e,0xab,0xdc,0x45,0x6f,0xaa,0xda,0xe9,0xe6,0x84,0xf0,0x5f,0x8a,0x90,0x99,0x33,0x9b,0xcf,0x03,0xe6,0xce,0x19,0x0c,0xad,0x2f,0xad +.byte 0x81,0xb8,0x17,0xff,0x6b,0xff,0xc8,0x14,0xa6,0xf4,0x37,0x55,0xdc,0xbb,0x09,0x3c,0x3c,0xe7,0x29,0x95,0x23,0x5c,0x58,0x92,0x2e,0x95,0xe8,0x3b,0x8b,0x81,0x2d,0xfd,0x58,0x8a,0x1f,0xdf,0xf1,0x54,0xa3,0xd0,0x01,0xaa,0x3d,0x32,0x61,0xe5,0x8e,0x62,0xa7,0xf6,0x3b,0x2d,0x0e,0xff,0xf4,0xe9,0x08,0xe7,0xef,0x3a,0x63,0x10,0x34,0x49 +.byte 0x14,0xe1,0x88,0xd0,0xb2,0x1d,0xb7,0x31,0xc9,0xa4,0x48,0xa8,0xaf,0x64,0x29,0xab,0x1f,0x14,0x13,0xa7,0xb8,0xb8,0xa4,0x24,0x1d,0xf9,0xb6,0x3e,0x62,0xa6,0x5e,0x10,0xcb,0x44,0x5c,0x9d,0x2c,0x58,0x3a,0x36,0xa3,0x81,0x9f,0xa9,0xa4,0xa1,0x06,0x1d,0xbf,0x97,0x03,0x88,0xf2,0xf4,0x81,0x3e,0x1b,0x35,0xea,0xd0,0xb6,0x96,0xa1,0xf7 +.byte 0x1e,0x49,0xb7,0xe8,0x23,0x6f,0x05,0x7c,0x9f,0xc4,0x53,0xb1,0x63,0xdc,0x07,0xbb,0xd6,0x57,0x85,0x4d,0x77,0x33,0x21,0xbf,0x77,0xfe,0xfe,0x34,0x52,0x02,0xe7,0xe4,0x87,0x11,0xa0,0xfd,0x11,0x4a,0x34,0x36,0x88,0x69,0xdf,0x77,0xfd,0x83,0x71,0xa8,0x68,0xed,0x49,0x39,0xb4,0x06,0x32,0x48,0xf1,0xd2,0x4e,0x61,0x47,0x65,0x26,0x87 +.byte 0xba,0x2b,0x2e,0xf4,0x12,0xfc,0xd0,0x84,0x81,0xa1,0x59,0xdc,0xe3,0x13,0x51,0x9e,0xea,0x57,0x56,0x3b,0x7c,0x71,0x6b,0xff,0xe9,0xf8,0xec,0x3e,0xe7,0xbe,0x65,0x47,0xe1,0x6f,0x8f,0x7c,0x3a,0x77,0xdb,0x75,0x4a,0x43,0x43,0x39,0x37,0xb2,0x68,0x16,0x72,0xdb,0x49,0xf7,0x13,0x3c,0x09,0x93,0xef,0xc1,0x2a,0x99,0xff,0xc7,0xdb,0xd9 +.byte 0x80,0xd2,0xfe,0x7c,0x39,0x50,0x21,0xdc,0x1d,0xae,0x9b,0xfc,0xd4,0x5f,0x56,0xae,0x6a,0xd9,0x35,0xa1,0x2b,0xd6,0x53,0x90,0xe8,0x8c,0x31,0x73,0x0f,0xa3,0x9e,0xa1,0x2f,0x76,0xa8,0x72,0x4d,0x5e,0x58,0xca,0x9f,0x8f,0xdf,0xf0,0xf9,0x6a,0x54,0xb1,0x5f,0x39,0x03,0x7a,0x26,0x06,0x71,0x74,0x6f,0x42,0xee,0x63,0x76,0x13,0xb9,0xed +.byte 0x74,0xad,0xf9,0xe0,0xa7,0x35,0x9c,0x18,0xe0,0xf7,0xc5,0xb2,0x27,0x14,0x0f,0xd7,0xaa,0x17,0x1c,0x8f,0x50,0xc8,0xb0,0xc2,0x63,0xff,0x38,0x65,0x87,0x69,0xb3,0xd5,0x3f,0xb4,0xf2,0xe8,0x8b,0x7b,0x24,0xdc,0x1f,0x62,0x2f,0x0a,0xd7,0x2d,0x0f,0x6f,0x48,0x1d,0xf0,0x3c,0xb1,0xb4,0x10,0x8d,0xc6,0x5c,0x79,0x30,0xde,0x20,0x9e,0x7b +.byte 0xf1,0xa5,0x73,0x38,0x05,0x1b,0x13,0x78,0xb1,0x02,0x2f,0x32,0x2a,0x07,0x59,0xa4,0xfc,0x88,0x08,0x0c,0xff,0x42,0x72,0x6a,0xb0,0x8a,0xc9,0x3d,0xdb,0x04,0x90,0xdd,0x0b,0xbc,0x3a,0x4e,0xfa,0xd4,0x57,0xd8,0x2f,0x7b,0xcb,0xd9,0x6a,0xe7,0xfd,0x32,0x17,0x99,0x20,0x64,0x1e,0x76,0x07,0xb9,0xa3,0x58,0x7f,0x79,0xda,0x0c,0xe0,0xec +.byte 0x30,0xbf,0xa4,0x85,0x0a,0x39,0xc0,0xe9,0xf7,0xbe,0xd1,0xa7,0x94,0x1f,0xa6,0x6d,0xe8,0xc5,0x1b,0x04,0x27,0xf4,0xdc,0xc2,0x4d,0x9a,0x0e,0x9b,0xe8,0xec,0x56,0x99,0x90,0x5f,0x8b,0x28,0x0a,0x92,0xaf,0x0b,0xa1,0xd2,0x85,0x86,0x26,0xc7,0x8a,0x01,0xa4,0x08,0x29,0x32,0x7d,0x3d,0xa5,0x74,0x9c,0x90,0x63,0x83,0x1f,0xd4,0xee,0x98 +.byte 0xf5,0x14,0xff,0x39,0xeb,0xbf,0x40,0xa4,0xc9,0x70,0x4f,0x81,0x03,0x19,0xef,0xf5,0xdf,0xf7,0x00,0x75,0xcb,0x2e,0x81,0x41,0xc5,0xda,0xfb,0x67,0x6a,0xf0,0xa3,0xd3,0x5a,0x60,0xaf,0x72,0x27,0x3e,0xad,0x37,0x3e,0x3d,0xe6,0x85,0x4c,0xa1,0xb0,0xe9,0xab,0xc5,0xd3,0x8b,0x04,0x0d,0x64,0x7f,0xa2,0xb9,0x6d,0x6d,0x28,0xf8,0x4b,0x43 +.byte 0x78,0x51,0xf4,0x84,0xf1,0x3c,0x67,0xd8,0xdd,0xd7,0x0b,0x67,0xc3,0xd9,0x95,0x7b,0xfc,0x7d,0xc4,0x33,0x05,0x90,0xec,0x0a,0x98,0xfb,0x6b,0x0d,0xe9,0x8c,0x74,0x94,0x20,0xf8,0xcb,0xca,0xb6,0x72,0x07,0x7c,0xef,0xfa,0xd0,0x3f,0x51,0xc5,0x6e,0xf8,0x3f,0x37,0xe3,0xfe,0xb9,0x9a,0x9c,0xb3,0xf6,0x96,0x4e,0x65,0x77,0x21,0xcf,0xaf +.byte 0xe7,0x20,0x06,0xc2,0x93,0xc5,0x2e,0xc0,0x7f,0xe5,0x0a,0x42,0xad,0x89,0x64,0x6e,0x95,0xbf,0x95,0x1d,0x24,0x47,0xf8,0xd5,0xec,0x7c,0x1f,0x98,0x67,0x9c,0x5f,0x6e,0xaf,0x74,0x95,0x65,0x4c,0xb6,0xe0,0xd3,0xb7,0x5b,0xc7,0x76,0xe6,0x87,0x19,0xf5,0xc7,0xb0,0x2d,0xe0,0x8b,0xaf,0x6d,0x3c,0x31,0x6e,0x84,0xc8,0x86,0x51,0xff,0x29 +.byte 0x2a,0x1f,0xea,0xd4,0x2d,0x1a,0x8f,0x04,0xb4,0xc0,0x6a,0x93,0xc2,0xc5,0xe7,0x98,0x8c,0xc7,0xff,0xbf,0xb8,0x8e,0x5b,0x29,0x5b,0xa6,0x87,0xc7,0x02,0x88,0x51,0x29,0x66,0xd8,0xf3,0x68,0x38,0xd4,0xa6,0xbd,0xa2,0x5c,0x1b,0xb7,0x13,0xd7,0x64,0xed,0x68,0x21,0x88,0x2b,0x59,0xba,0x95,0x84,0xda,0xce,0x61,0x3b,0x51,0x04,0x3e,0xc2 +.byte 0xdd,0xec,0x0c,0x6b,0xbe,0x35,0x51,0x63,0x29,0x40,0xcb,0xa5,0x62,0xe4,0x27,0x35,0x15,0x1f,0x7c,0x8b,0xe5,0xd0,0x2e,0xde,0x8c,0x3d,0xa0,0xd2,0xbe,0x51,0x3d,0x65,0xed,0x94,0x8b,0x8c,0x00,0xda,0x0e,0x78,0x4d,0x25,0xef,0x8e,0x3c,0x55,0x77,0xeb,0x58,0x06,0x7d,0xd1,0xfc,0x73,0xad,0x76,0x0a,0x81,0xbe,0xda,0x50,0x30,0xf3,0xfd +.byte 0x58,0x25,0x0a,0x4b,0x1b,0x1e,0x0b,0xd0,0x9b,0xbc,0xb9,0x31,0x26,0xbc,0x4c,0x7b,0x05,0xd7,0x5c,0xe4,0x7a,0xdd,0xff,0x04,0xac,0x5d,0xcb,0xfd,0x91,0x34,0x68,0x26,0x1e,0xb4,0x86,0xcc,0xe3,0x90,0xaf,0x6a,0x65,0xda,0x6b,0x3e,0xec,0x44,0x90,0x72,0x7a,0x34,0xfc,0x7b,0x65,0x83,0x34,0x93,0xbc,0x85,0x50,0xdf,0x03,0x89,0x35,0xb8 +.byte 0x6a,0x39,0xd3,0xb6,0x38,0x66,0x5b,0xa7,0x9e,0x93,0xa2,0x3b,0xb6,0xe7,0xee,0x1e,0x5c,0xd6,0xa8,0xd9,0x1f,0xf7,0xd1,0x0a,0x2f,0x87,0x63,0xf4,0xf9,0x8c,0xd4,0x7c,0x02,0xaf,0x7e,0xb6,0xc7,0xfc,0xc9,0x4d,0x35,0x0c,0x8c,0x3c,0x13,0x9d,0xe6,0xd7,0x2e,0x4b,0x91,0xcc,0x88,0xdb,0xfc,0x68,0x3a,0xd1,0x15,0x07,0x16,0x66,0x11,0x9b +.byte 0x66,0x9f,0x3f,0x37,0xae,0x11,0xba,0x5f,0xc7,0x3a,0x1a,0x49,0xbc,0x14,0x21,0x75,0xdc,0xcc,0xbb,0x5c,0xed,0xdc,0x8b,0x21,0x9a,0x8f,0x5f,0x91,0x6a,0x9b,0x26,0x33,0x64,0x45,0xa0,0xdf,0xc4,0xa1,0x32,0xc4,0x4c,0xc2,0x42,0x1b,0x59,0x37,0x1f,0xdb,0x01,0x6d,0xed,0xd8,0x05,0x5b,0x90,0x59,0x32,0x45,0x50,0x5d,0xf1,0x34,0xc4,0xb7 +.byte 0x52,0x97,0xbb,0x42,0x12,0xf1,0xa5,0x76,0xe4,0x1a,0xbc,0x4a,0x64,0xd3,0x08,0xac,0xe1,0x49,0x70,0x61,0xc8,0xcf,0xb1,0xd3,0xc4,0x7f,0x38,0x31,0x6b,0xd3,0xe1,0xe1,0xe9,0x5b,0xaa,0x7a,0xec,0x26,0x81,0x44,0xd3,0xb9,0x63,0xea,0x37,0x98,0x15,0x41,0xf1,0xa1,0x72,0x87,0xcc,0x3b,0x6a,0x27,0x9b,0x85,0xa8,0x7b,0xb6,0x25,0xf9,0xd4 +.byte 0x84,0x3e,0x66,0x12,0xce,0x24,0xee,0x22,0x51,0x73,0x7e,0xba,0x1e,0x95,0x64,0xc5,0xbf,0x4e,0x4f,0x73,0xc1,0xc3,0x98,0xb9,0x6b,0x90,0x1f,0x39,0xfc,0x03,0x55,0x76,0x8c,0x57,0xea,0xe8,0xc1,0x25,0x09,0x69,0xc0,0xe8,0x54,0x91,0xc1,0x7c,0x52,0x8e,0x82,0x6d,0xf2,0x0e,0x3f,0xa9,0x98,0x04,0x40,0xda,0x1c,0xc0,0xbb,0x42,0xf0,0x7d +.byte 0xed,0x78,0xb0,0x4f,0x94,0xba,0x0d,0xbf,0x60,0xbe,0x09,0x67,0x42,0xc5,0x41,0x4c,0x80,0x8d,0x30,0x10,0xa9,0xd2,0x07,0x8c,0xa8,0x40,0xc6,0xe2,0x08,0x42,0x7f,0x99,0xad,0xc5,0x66,0x1f,0xfd,0xd2,0xc5,0x79,0x77,0x9b,0x60,0x7d,0x25,0x2d,0x69,0x14,0x94,0xa5,0xf0,0x0a,0x14,0xb6,0xf9,0xbe,0x3a,0x4a,0x3d,0xc6,0x45,0x2e,0x27,0x4a +.byte 0xd1,0x1d,0xcf,0x08,0xee,0x93,0x3c,0xb5,0x8a,0xee,0xdd,0xf3,0x33,0xa6,0x35,0x9d,0xd8,0xb4,0x68,0xc5,0x98,0x09,0x78,0xcc,0xb3,0xeb,0x0f,0xcd,0x25,0xf8,0x17,0x9c,0x45,0x77,0xc7,0x06,0x40,0x44,0x90,0xec,0x6a,0xd9,0xf5,0x05,0xd4,0x88,0x17,0x47,0xeb,0x29,0x85,0x32,0x76,0x7b,0xa4,0xe3,0x65,0x30,0x50,0x9a,0x99,0x26,0x91,0x60 +.byte 0xb0,0xb8,0xe5,0x8d,0x35,0x9e,0x9a,0x13,0x65,0x82,0xb2,0x4b,0xf1,0xed,0x1f,0xb7,0xb4,0xc0,0x03,0xe6,0x1d,0x2b,0xaa,0x1e,0x01,0x92,0x0b,0xcb,0x34,0x77,0x80,0x94,0xc2,0x4e,0x3b,0x73,0xd8,0x2e,0xd8,0x95,0x33,0x05,0x65,0xa2,0x99,0x29,0x7a,0xd1,0xb3,0xed,0x5a,0x8d,0x4d,0x6a,0x6d,0x69,0x2b,0x5a,0xa1,0x3a,0xc0,0x81,0x96,0xf1 +.byte 0xc2,0xa7,0x4e,0x07,0x90,0x04,0x99,0x70,0xea,0x1a,0x3a,0x26,0xb5,0xed,0x92,0xbd,0x57,0x80,0x11,0x06,0xf2,0xb4,0x05,0x69,0x7a,0xbf,0x27,0xa1,0xbd,0xdb,0x09,0xe5,0xb3,0x2d,0x86,0x41,0xcc,0x5d,0x68,0x37,0x9e,0x98,0xa5,0x4a,0x20,0x8a,0x5f,0x54,0xae,0x4f,0x73,0xd0,0x22,0x18,0x8d,0x2b,0x91,0xcb,0xbb,0x83,0x1e,0x04,0x93,0xc8 +.byte 0xc3,0x89,0x35,0xfd,0xda,0xeb,0x52,0x53,0x9f,0xdc,0x33,0xf0,0xe0,0x99,0x19,0x11,0xeb,0x55,0xd3,0x3c,0x5f,0xca,0x29,0x52,0xe7,0x6b,0xd1,0xad,0xeb,0xed,0x8e,0x68,0x82,0x91,0x85,0x81,0x68,0x70,0x78,0x61,0x1e,0x0c,0x09,0x3a,0x82,0xdc,0xdb,0x26,0x66,0x1c,0xa3,0x80,0x99,0x23,0x8a,0x45,0xd7,0xb8,0x10,0x97,0x80,0x70,0x49,0x78 +.byte 0xa9,0x4c,0xf0,0xec,0xcc,0x05,0xd0,0x6a,0x6a,0x1a,0xa0,0xf7,0xde,0x78,0xc6,0x42,0xbe,0xbd,0xa0,0x24,0x1d,0x3f,0xdd,0xfb,0x92,0xc2,0xbd,0xd6,0x5c,0x25,0x74,0x3d,0x2b,0xb8,0x60,0x67,0xdb,0x70,0x1e,0xe8,0x9f,0xcd,0xb4,0x82,0x90,0x9e,0x2a,0x94,0xa5,0xa2,0xd4,0xd2,0x24,0xa7,0xca,0xbf,0xe1,0x8b,0xab,0xf3,0xd2,0x7c,0xa6,0xc8 +.byte 0xe6,0xaf,0xef,0xe3,0x86,0xb1,0x42,0x1d,0xc6,0xa2,0x37,0x9b,0x26,0x46,0x0b,0xfd,0xee,0x88,0xa4,0xf1,0xa8,0x72,0xaf,0xda,0x30,0x56,0x22,0xd3,0x1b,0x31,0x76,0xd7,0x03,0xef,0xf3,0x98,0x16,0x4d,0x36,0x57,0x1b,0xd5,0x90,0xb8,0x67,0x50,0x7f,0x22,0xa8,0xdc,0x9c,0xf1,0x6e,0xa4,0x65,0x45,0xf0,0x73,0xd8,0x7e,0x41,0xb0,0x68,0x52 +.byte 0x00,0x0a,0xda,0x99,0x6c,0x84,0xce,0xf0,0x73,0x65,0x93,0x52,0xc8,0x4b,0xb4,0x72,0xda,0x2c,0xa1,0x47,0xb5,0xe3,0x00,0x63,0xc0,0x4e,0x84,0x16,0x00,0xe6,0x1f,0xbd,0xba,0x49,0xcb,0xd3,0x7d,0xd2,0xeb,0x4a,0xb2,0xd5,0xb2,0x53,0x96,0xfb,0x04,0x73,0xc0,0x09,0x31,0xf3,0xf2,0xc0,0xd3,0xa6,0xe1,0xea,0xe1,0x58,0xbe,0x90,0xc9,0xfb +.byte 0x6e,0x13,0x69,0xbe,0x17,0xd4,0x16,0x5b,0xcb,0xf4,0x93,0x0a,0x38,0x46,0xea,0x64,0xad,0xb0,0x0d,0xc0,0x3b,0xfc,0xe3,0xd4,0x20,0x75,0x0c,0x3e,0x71,0x1b,0x5f,0xde,0xff,0xd6,0xfa,0x6f,0xe4,0x10,0xb0,0x14,0x05,0xaa,0x05,0x70,0x5e,0xbd,0x58,0x9f,0x3c,0x9d,0x4f,0xa7,0x5a,0x65,0x57,0x02,0x05,0x44,0xe0,0x95,0x9d,0xa2,0x60,0x06 +.byte 0xcb,0xfd,0x91,0x8e,0x7f,0xce,0xa1,0x80,0x94,0xbb,0x88,0xf2,0xa6,0xe7,0x83,0xf9,0x38,0x8f,0x09,0x8e,0xe4,0xa9,0xc2,0xc7,0x84,0x9d,0x25,0x09,0x52,0x8b,0x32,0xaa,0x3b,0xde,0xb6,0x82,0x9f,0x6d,0xc4,0xdf,0x11,0xf7,0x72,0x1a,0xe4,0x00,0x51,0x41,0x01,0xba,0x21,0xea,0x0a,0xda,0xf2,0xbb,0x66,0xae,0x51,0x2b,0xb0,0x6d,0x1d,0xe8 +.byte 0x4b,0x1e,0x42,0x68,0x3a,0xed,0xe6,0x59,0x13,0x42,0x07,0x54,0xae,0x2e,0x15,0x93,0xd7,0xff,0xad,0x49,0x09,0x41,0x52,0x6b,0x3b,0x9c,0x41,0x43,0x0d,0xed,0xed,0x6f,0xb8,0xe9,0x0d,0xcc,0xde,0x0d,0xaa,0x91,0xef,0x89,0x2f,0x2d,0x94,0xd0,0x03,0x2b,0x51,0x7f,0x85,0x9b,0x7b,0x08,0xc8,0xb6,0xe2,0x82,0x22,0xa9,0x57,0x71,0xf2,0xae +.byte 0x08,0xfa,0x6c,0xd8,0xca,0x78,0x42,0x98,0x23,0xfd,0x38,0x4b,0x6c,0xd3,0x9f,0xc6,0xa3,0xb2,0xc1,0x8c,0x4a,0xa3,0xcd,0x9f,0x56,0xe7,0xc2,0x06,0xd7,0xc5,0xc2,0xd9,0x98,0x57,0xc8,0x5a,0xaa,0xf4,0xaa,0x44,0x02,0x83,0x11,0x1e,0xf6,0x64,0x8d,0xf7,0x3b,0x86,0x3c,0x04,0x53,0x5f,0x62,0xc8,0x7a,0x0e,0x1c,0x4f,0xa8,0xe3,0x5c,0xe8 +.byte 0x64,0xf7,0xe3,0x5d,0xea,0xb5,0x2d,0xdb,0x7b,0x0e,0xdb,0x91,0x34,0xd5,0x87,0x4f,0xe6,0x73,0xee,0x3d,0x79,0x7c,0x67,0x48,0xb5,0xbb,0x42,0x96,0x0d,0x9d,0xbd,0x68,0x98,0xe5,0x59,0x51,0x16,0x45,0x15,0xac,0x80,0x41,0xae,0x45,0xdb,0xe4,0x2a,0x44,0x0d,0xe4,0x25,0xc7,0xd3,0x06,0xf7,0x98,0x15,0xe1,0xc5,0x9b,0x34,0x0e,0x87,0xb8 +.byte 0x90,0x1b,0x24,0x84,0x06,0x24,0xb0,0x80,0xbe,0x03,0xa0,0x95,0x10,0x1e,0x72,0xde,0x0f,0xd4,0x15,0x7b,0xa0,0xf5,0x42,0xc3,0x6f,0x10,0xe9,0x76,0x44,0xe3,0xa9,0xb7,0xef,0xf6,0xc2,0x80,0xe2,0x0c,0x2d,0xad,0xe0,0xb9,0x45,0xca,0x67,0x6f,0xb6,0xc5,0xc0,0x8d,0x25,0xee,0x50,0xeb,0x51,0xc6,0x87,0x87,0x61,0x3a,0x75,0x95,0x41,0x47 +.byte 0x26,0xfd,0x35,0xf6,0x46,0xf4,0xe9,0x42,0xc6,0xef,0x37,0x97,0xb3,0x0a,0x1d,0xc8,0xdf,0x07,0x24,0xb1,0x0d,0x07,0x43,0x67,0x7d,0x81,0x09,0x58,0xdd,0xf6,0xcf,0xf1,0x47,0x42,0xbd,0x3c,0xa3,0xd7,0xe8,0x73,0xf9,0x5b,0xff,0x2c,0xcd,0xe6,0xd1,0xe9,0x47,0x6d,0x19,0x9b,0x6a,0x63,0x69,0xf4,0x4a,0xdf,0x69,0xab,0xa9,0xb7,0xe5,0x8d +.byte 0x1c,0x44,0x52,0x0c,0x7e,0xa1,0xfe,0x9d,0xd5,0xa4,0x71,0x62,0x0b,0x3c,0xf6,0xd2,0xd3,0xe9,0x70,0x09,0x68,0xf7,0xd6,0x0a,0x00,0x61,0xf1,0xf3,0xd0,0x41,0x4a,0x14,0xc6,0xf5,0x49,0xb1,0xde,0x10,0xd3,0x20,0x8b,0xfe,0x78,0x6a,0x87,0x79,0x15,0xd3,0x43,0x00,0xbe,0x71,0x40,0xaa,0xca,0x1a,0x64,0xe3,0x96,0x34,0x2f,0xea,0x0c,0x11 +.byte 0x41,0x21,0xf8,0xa7,0x65,0x9b,0x75,0xe2,0x1e,0x6f,0x5e,0xe0,0x68,0x42,0xca,0xd3,0x19,0x35,0xe8,0x88,0x0f,0x05,0xa3,0xb1,0x73,0xea,0x53,0x79,0x40,0x24,0x00,0x86,0x20,0xbb,0x25,0x58,0x89,0x6b,0xde,0xd6,0xd0,0x36,0xbb,0x33,0x30,0x59,0x4b,0x30,0x92,0xac,0xe5,0x95,0x94,0x22,0xab,0xc1,0x10,0x35,0x9c,0xa1,0x20,0x11,0x5d,0x4f +.byte 0x57,0x5c,0x9c,0xb8,0x3a,0xdc,0x97,0xa5,0xf3,0x0b,0xf5,0x96,0xe7,0xef,0x90,0x72,0x01,0x52,0x70,0x5a,0xf0,0xd9,0x7e,0x59,0x05,0x8c,0xd1,0x45,0x47,0xbf,0x16,0x15,0xa2,0xc9,0xdd,0xe7,0x5f,0x4b,0x94,0x5f,0xe6,0xf9,0x78,0xbb,0x8f,0xf9,0x79,0x9f,0x5e,0xd7,0x1f,0x0b,0xef,0x8d,0xfe,0x75,0xd4,0x8a,0x12,0x28,0xa5,0xf9,0x6e,0x14 +.byte 0x3c,0x52,0x80,0x57,0xc6,0x96,0xae,0x67,0x27,0xc1,0x1c,0xb6,0xd6,0x1c,0x74,0x8c,0x6f,0xc7,0x71,0x3e,0xd5,0x73,0xf2,0x3e,0x02,0x15,0x67,0x18,0xb8,0x5b,0x61,0x9e,0xfa,0x7e,0xba,0x00,0xe9,0xd9,0x51,0x91,0x63,0x7e,0xf7,0xab,0xc0,0xc6,0xee,0x66,0xdd,0x66,0x88,0x7a,0x8a,0xc5,0xc2,0x08,0x45,0x62,0xde,0xe1,0xfb,0x35,0x65,0x34 +.byte 0x00,0x9e,0x1d,0x25,0xdf,0x69,0xb6,0xe3,0xfe,0xbb,0x13,0xac,0xd3,0x13,0xb2,0x64,0x5a,0xf3,0x47,0xf1,0x36,0x55,0x5f,0x1b,0x87,0xea,0x5d,0x5c,0xfd,0x8a,0x68,0x69,0x8a,0x00,0x9f,0x83,0xbe,0x79,0x7d,0x01,0x9e,0xf2,0xb2,0x5d,0x56,0xe0,0xe6,0x49,0xe5,0xe1,0x76,0x57,0x7a,0x85,0xac,0x94,0x16,0xe3,0x68,0x05,0x14,0xb5,0x33,0x54 +.byte 0x64,0x5a,0xbe,0xa3,0x04,0x90,0x5c,0x1c,0xf8,0x97,0x16,0x36,0xce,0x76,0xe7,0xf0,0xaf,0x8a,0xea,0x65,0xa8,0x15,0x5b,0x1e,0x0a,0x91,0xad,0x62,0x62,0x67,0xb4,0xf0,0x94,0x1f,0x64,0x50,0xa8,0xc0,0x6b,0x38,0x80,0xd7,0x53,0xbb,0x70,0xbd,0x54,0x01,0xb0,0xa5,0xbc,0x00,0xe0,0xd6,0x23,0x37,0xe6,0x9f,0x0f,0x2f,0x96,0x21,0xc2,0x90 +.byte 0x55,0x26,0x55,0xa4,0xcd,0x3e,0x54,0x6b,0xa6,0xb0,0x2c,0xf2,0xd4,0xcc,0x6a,0x44,0xea,0x18,0x61,0xc5,0x1a,0x8e,0x60,0x64,0xf4,0x5f,0x21,0x36,0x01,0x5d,0x9f,0xc4,0x2c,0x67,0x1c,0x48,0x94,0x16,0xae,0xa8,0x13,0x5c,0xee,0x18,0x88,0x61,0xe4,0x54,0x6b,0xa2,0xe8,0x7f,0xf0,0x15,0xc3,0xce,0xbc,0x5b,0x91,0x25,0x7b,0x1d,0xd3,0x9f +.byte 0x13,0x1b,0x01,0x5d,0x43,0xe8,0xa1,0x77,0x5a,0x87,0x79,0x8b,0xd5,0x69,0xf7,0xdf,0x66,0xa2,0x84,0x0c,0x66,0xac,0x15,0x65,0xbf,0x74,0xc0,0xd2,0x78,0x6a,0x3a,0x9c,0x98,0x62,0x04,0x41,0x95,0xb2,0x23,0x59,0xc6,0xb0,0xc5,0x22,0xc0,0xfa,0xaa,0xc8,0x94,0x73,0x91,0x5b,0x64,0x1b,0x74,0xbe,0xcb,0xa1,0x81,0xb1,0xc1,0x26,0xa1,0x94 +.byte 0x55,0x04,0xb3,0x9c,0x80,0xb7,0x00,0x6f,0x36,0xc7,0x7f,0x6d,0x97,0xea,0xf3,0xf5,0x55,0xc5,0xfe,0x61,0xd9,0xb1,0x6d,0x8c,0xa1,0x02,0x08,0xb3,0x41,0xe6,0xe6,0x57,0xc6,0xff,0x6e,0x47,0xa4,0x22,0x2e,0x2d,0x21,0x53,0xbe,0xe3,0xbe,0x15,0xec,0x23,0x9d,0x87,0xe0,0x2e,0xcc,0x6c,0xd0,0xc7,0xb7,0x3d,0xa4,0x07,0x5f,0x69,0x4e,0x2b +.byte 0x07,0x69,0x4f,0xc5,0xa3,0x66,0x52,0x91,0x8f,0xa4,0x48,0xb9,0x40,0x76,0xd9,0xcb,0x6e,0x1a,0x35,0x9e,0x50,0x9f,0xd1,0x78,0xb2,0xb8,0x0d,0xa8,0xf8,0x6e,0x07,0xa5,0x3a,0xdf,0x3c,0x32,0xa6,0x10,0xbd,0x73,0x2f,0x07,0x45,0x66,0x0f,0x61,0xce,0xc2,0x08,0x19,0x98,0x33,0x4b,0x59,0x81,0xb5,0x78,0x4f,0x46,0x88,0xae,0x29,0xf8,0xf5 +.byte 0xc2,0x29,0x6f,0x8f,0xe5,0x8f,0xb0,0x53,0xc8,0x7a,0x48,0xda,0x6f,0x7e,0x8a,0x69,0x68,0xab,0xba,0xd9,0x20,0x0f,0x96,0x69,0x41,0xa6,0x92,0x94,0x8e,0x0f,0x86,0xdf,0x8d,0x70,0xaf,0xfe,0xf1,0x20,0x50,0x01,0xff,0xca,0x30,0x24,0x67,0x4a,0x04,0xa2,0xde,0x06,0xdc,0x26,0x1e,0x17,0xbc,0x52,0x9a,0x62,0x72,0xc1,0xd8,0xd7,0xe0,0xed +.byte 0xcf,0x4b,0x13,0x80,0x9a,0xbf,0x72,0x4f,0xf4,0x24,0x26,0xcd,0xe0,0x21,0x99,0x7b,0x5c,0x4f,0xbf,0x5c,0x41,0x08,0x8b,0x17,0x69,0x62,0x60,0x2c,0x74,0xb0,0x2d,0x22,0x7e,0x25,0x95,0x6a,0x84,0x0f,0x45,0x8f,0x9a,0x92,0xa1,0xcd,0xa5,0x50,0xf0,0x52,0x7f,0x60,0xd8,0x91,0xe1,0x17,0xe1,0x66,0x8f,0xd3,0x1f,0x41,0x7f,0x6f,0xf1,0x72 +.byte 0xa3,0xb6,0x12,0x62,0x46,0x16,0xea,0x26,0x9e,0xda,0x61,0x13,0x0b,0x17,0xf7,0xe1,0xec,0xc0,0x38,0xfe,0x40,0x31,0x6b,0x38,0x2a,0x4b,0xa5,0x8e,0xfb,0x99,0x60,0xd6,0x4a,0xbd,0xfb,0x75,0x2b,0x41,0xd4,0x33,0x5d,0x35,0xfe,0x2d,0xfc,0x1a,0xac,0x02,0xb3,0xf0,0xa2,0x6d,0xfa,0x8b,0x12,0x99,0xdd,0x54,0xf2,0x1c,0x35,0xd3,0x60,0x5a +.byte 0xdb,0x65,0xa7,0x58,0x1b,0x82,0xb4,0xf6,0x49,0x77,0xf2,0xea,0xa3,0xa9,0x57,0x94,0xb7,0x6e,0x19,0xda,0x7e,0xa5,0x70,0xb8,0xff,0x39,0x81,0x7d,0xfa,0xea,0xd6,0xc6,0x12,0x84,0x0a,0x8a,0x16,0xde,0x99,0xa6,0xe7,0xe0,0x77,0x76,0xb8,0xa3,0x6f,0xfb,0xb4,0x8f,0xc3,0xbd,0x90,0xd8,0x2a,0x04,0xed,0x42,0x91,0x9b,0x84,0x40,0x2d,0x01 +.byte 0x94,0xdb,0xbb,0x58,0x25,0xed,0xa3,0xdd,0xaa,0x0c,0xce,0x25,0x12,0xcd,0x11,0xbf,0xd0,0x57,0xe9,0x51,0x74,0xa7,0x45,0x6c,0x58,0xe7,0x4d,0x43,0xc6,0xd0,0x09,0x93,0x2d,0xe0,0xe3,0xae,0x7b,0x8f,0x53,0xa0,0x80,0xa1,0xef,0xcb,0xf5,0xfe,0x38,0x4d,0x31,0xa2,0x5c,0xd3,0x4a,0x66,0x1a,0x5c,0x07,0xbe,0x25,0xba,0x30,0xb6,0x00,0x27 +.byte 0x52,0xb9,0x1f,0xa3,0xed,0xd7,0x31,0x33,0x4a,0xf6,0x3f,0xed,0x75,0xe7,0xa4,0xf4,0xdf,0x97,0xc1,0x78,0x90,0x9b,0x4b,0xbd,0x06,0xc6,0x72,0x5c,0xdf,0x57,0x60,0xbe,0xbc,0x88,0x02,0xb6,0x5a,0x65,0xea,0x3a,0x3a,0x74,0x03,0xc8,0x66,0xef,0xf0,0x63,0xc7,0x9d,0x58,0x8e,0xa1,0xb2,0x25,0x4f,0xc4,0x14,0x5f,0x80,0x78,0x08,0x06,0x21 +.byte 0x50,0x34,0x01,0x2b,0x15,0xf4,0x7d,0x1f,0x1f,0x32,0x36,0x0a,0x52,0x1f,0x50,0xa2,0x50,0xbc,0x9a,0xdf,0x4e,0x84,0x49,0x2d,0x08,0xaa,0x46,0xc0,0x0e,0xcf,0x27,0x17,0x91,0x78,0x8c,0xb9,0x72,0xc5,0x8e,0x25,0x85,0x11,0xff,0x2f,0x4a,0x71,0x7c,0x14,0xfe,0x86,0xfe,0xb4,0x3a,0xd0,0x67,0xfd,0xaa,0x9b,0xee,0x89,0x66,0x03,0x59,0x4e +.byte 0x1c,0x96,0xaf,0x2b,0x8d,0x4d,0x6f,0xf6,0x72,0xc6,0x13,0xc7,0x14,0xce,0x19,0x0c,0x0b,0xa3,0x01,0x12,0x7c,0x8e,0x10,0xb8,0x63,0x41,0x57,0xb9,0xfe,0x6e,0x3e,0xda,0x20,0xfb,0x92,0x08,0x7d,0x66,0x31,0x9d,0x4f,0xdb,0x14,0xf4,0xb6,0xb8,0xea,0xee,0x54,0x0f,0xaf,0xc1,0x99,0xf0,0x8f,0x55,0x44,0x20,0x44,0xd0,0xa6,0x98,0xa3,0xa8 +.byte 0x8b,0x8e,0x26,0x03,0xec,0x2d,0x50,0x4f,0xb0,0x8d,0xd0,0xf2,0x96,0xcc,0x18,0xa9,0xb1,0x0f,0x79,0xe3,0x9f,0x08,0xb3,0x53,0x0b,0x9c,0x9f,0x22,0xdb,0x45,0x57,0xd6,0xaa,0x3b,0x6a,0xcb,0xdc,0xc9,0xda,0x57,0x75,0x65,0x0a,0xc1,0x17,0xb3,0x97,0xa9,0x07,0x40,0x20,0xfb,0x72,0x2d,0xc6,0x37,0x1e,0x44,0xb7,0x7e,0x0b,0x38,0xcc,0xfc +.byte 0xa0,0xed,0x48,0xa9,0x9b,0x87,0xbc,0x71,0x0f,0x8b,0xda,0x4f,0x09,0x27,0x1e,0x3d,0x9c,0x03,0x62,0x81,0xa8,0x7c,0x7b,0x8a,0x14,0xa7,0x22,0x69,0xa8,0xba,0x0e,0xcc,0x1f,0x2b,0xb3,0x0f,0x7d,0xce,0x3f,0xec,0xb5,0x9d,0xe0,0x3a,0x67,0x56,0x08,0x5d,0x03,0x8b,0x71,0x01,0x44,0x11,0x1b,0x7b,0xcf,0xcc,0x2e,0xfc,0xa5,0x52,0x9b,0xeb +.byte 0x1e,0x8a,0xa1,0x86,0x64,0xcf,0x32,0x03,0x6b,0x3e,0x29,0xe7,0x9a,0x16,0x7e,0xe2,0x21,0x2f,0x5f,0xe2,0x86,0x7f,0xf8,0x22,0x36,0x10,0x99,0xc8,0x27,0x43,0xa1,0xb9,0xf4,0xb4,0xb8,0xe1,0xa3,0x1d,0x80,0x9c,0x81,0x92,0xef,0x1f,0x28,0x54,0x51,0xf3,0x62,0x9c,0x7a,0x24,0xd4,0x5a,0xdc,0x38,0x4f,0xa5,0x57,0xdd,0x4d,0xa1,0x52,0xf3 +.byte 0xd3,0x9d,0xa1,0x93,0x5e,0xbe,0x9b,0xd1,0x2a,0x52,0xf1,0xbb,0xa5,0x3f,0x3a,0x94,0x7c,0x7d,0x41,0x61,0x36,0x14,0x25,0x5f,0xab,0xef,0x32,0xf3,0x0f,0x6c,0xc5,0xf5,0x5f,0xe5,0x88,0x51,0x17,0x60,0x8b,0xd5,0xa6,0xea,0x8b,0x21,0xec,0x1a,0xa7,0x69,0xa0,0x59,0xf9,0xeb,0x51,0x94,0x70,0x2b,0x96,0x2e,0x71,0xa9,0x8c,0x12,0x15,0xce +.byte 0x7d,0x59,0x6b,0xf2,0xca,0x2c,0xbd,0x85,0xfb,0x23,0xab,0xcb,0x89,0x89,0xda,0x28,0x49,0x7e,0xfc,0x90,0x2a,0x9a,0x3d,0x6d,0x24,0x57,0xba,0xd9,0x30,0xe0,0x10,0x04,0xb1,0x7f,0x8a,0xcf,0xc8,0x27,0x63,0xd6,0xbd,0xea,0xef,0x90,0x6f,0xc2,0xfc,0x78,0xfd,0xc4,0x5b,0x45,0x0c,0x41,0x8a,0x53,0x5b,0xbc,0x62,0x32,0x86,0x7f,0x19,0xb7 +.byte 0x8b,0x03,0x50,0xed,0xca,0x8e,0x8b,0xa0,0xe3,0xc2,0x0e,0x81,0xe5,0x8a,0xe8,0xf1,0x6a,0x0b,0x1a,0xa7,0xb6,0xed,0x74,0x23,0x34,0xad,0x5b,0xd8,0xf7,0x17,0x8d,0xa5,0x05,0xf3,0x00,0x4a,0xad,0x7e,0x91,0xc9,0x6b,0x13,0xff,0x76,0x78,0xf0,0xd1,0xf4,0x99,0x43,0x73,0xd9,0xba,0x59,0xbe,0xb5,0xa3,0xbd,0x5e,0xc5,0xd3,0x88,0x06,0x9c +.byte 0x86,0x32,0xb4,0xd5,0x30,0x77,0x78,0x8e,0xd5,0x6a,0x1d,0xeb,0xfd,0x6b,0xe6,0xf8,0x4b,0xe8,0xf3,0xba,0xbb,0x86,0x8e,0xe6,0x63,0x83,0x92,0x23,0x05,0x58,0x2e,0x61,0xdd,0x38,0xad,0x8d,0x19,0x7d,0xfa,0x7c,0x3e,0xc8,0x9f,0xae,0xea,0x6d,0x12,0xf0,0xa4,0x08,0xed,0x12,0x0c,0x97,0x87,0x58,0xd8,0xbc,0x3f,0xde,0x7c,0xee,0x0c,0xc0 +.byte 0xa2,0x2e,0xf0,0x25,0x6d,0xf3,0x30,0x23,0xa7,0xc2,0xc8,0x09,0x67,0x01,0xe1,0x25,0x26,0x46,0x38,0xf5,0x5e,0x55,0x8b,0xd6,0x43,0x6a,0xb8,0xe4,0xdf,0x0f,0x5d,0x6c,0xc3,0xb2,0x56,0x38,0xda,0xbc,0xbf,0x5e,0x85,0x8c,0xd5,0x2a,0x6a,0xe2,0xff,0x4f,0x36,0xf7,0x52,0x2c,0xe2,0xae,0x65,0x65,0xd1,0xfc,0xd3,0xc6,0xf7,0x26,0xa6,0xd0 +.byte 0x0b,0xc8,0xf0,0x68,0x5d,0x07,0x89,0x06,0xb3,0xfb,0x39,0x1d,0xd8,0xd8,0xd7,0x53,0xd0,0xc9,0x76,0x56,0xc0,0xd3,0xf5,0x66,0x80,0x5b,0xff,0x4a,0xdf,0xae,0x52,0x86,0x54,0x24,0x53,0xcf,0xcf,0xd2,0x89,0xde,0x71,0x62,0x9c,0x31,0xa5,0x3d,0x62,0x07,0xa1,0x33,0x49,0xbb,0x06,0x88,0xd8,0xa1,0xdd,0x0e,0x47,0x8d,0x72,0x00,0x2d,0x51 +.byte 0xa3,0x35,0x6e,0xb6,0x1f,0xbf,0xe5,0x42,0x68,0x6f,0x62,0xfa,0xf3,0x12,0xa9,0x1a,0xbd,0xe8,0xa4,0xf1,0x6d,0x07,0xe7,0x70,0x87,0x44,0xb7,0x3d,0xea,0xdc,0x3a,0x24,0xbd,0xa0,0x9b,0xb8,0xc5,0xa8,0xd9,0x06,0xde,0x02,0x68,0x7e,0xd5,0x2d,0x3b,0x5f,0x12,0x31,0x72,0x35,0x77,0xf6,0x10,0x6e,0x81,0x7d,0x3c,0xac,0x95,0x5b,0xbe,0x90 +.byte 0x74,0xf3,0x3e,0x9b,0x07,0x54,0x97,0xe3,0x1d,0xcf,0xe2,0xc5,0x80,0x6b,0x5f,0x0b,0x96,0x00,0x0f,0x0e,0x53,0x36,0x76,0x6e,0x99,0x0c,0x32,0xa2,0xc9,0xaa,0xa0,0xa1,0xb7,0xee,0x9d,0xd6,0x46,0xe7,0x2d,0x10,0x7a,0xf2,0x22,0x50,0x52,0xbf,0xec,0xcc,0xbc,0x0d,0x81,0x55,0x2d,0xac,0x2e,0xf7,0x99,0xbe,0x68,0x09,0xb0,0x11,0xc3,0xc8 +.byte 0xca,0x63,0xa7,0xc2,0x0f,0x37,0x2a,0x9e,0x85,0x79,0x6b,0x44,0xc1,0x4f,0xb9,0xd6,0x6c,0x56,0x0e,0x59,0x33,0xc3,0x00,0x53,0xe2,0xf4,0x30,0x90,0x4e,0x4b,0x09,0x4d,0x6f,0x9a,0x9e,0xb9,0x8d,0x0b,0xa1,0x80,0xfd,0xfb,0xde,0x74,0x49,0x53,0x04,0x3a,0x35,0xcb,0x45,0xe2,0x67,0x2c,0x4d,0x6e,0x39,0x7b,0xbd,0x68,0xaa,0x93,0x1e,0xee +.byte 0x1e,0x35,0xae,0x1e,0xf2,0xe7,0xb1,0x80,0x92,0x45,0x27,0x85,0xd0,0xc7,0x26,0x17,0x54,0x30,0xba,0x0c,0x8e,0x48,0xf3,0x08,0x51,0xa6,0x41,0x70,0xba,0x5b,0x90,0x69,0x7c,0x64,0x1d,0x61,0xb5,0x23,0x4a,0xef,0x97,0xe4,0x9a,0xd0,0xff,0x47,0x7a,0x93,0x1a,0x28,0xb3,0x8a,0x32,0x29,0xf8,0xe9,0x08,0xc3,0xf3,0x24,0xd7,0x2e,0x18,0x6d +.byte 0x99,0x40,0x77,0x43,0x9f,0x98,0xe4,0xe5,0x3a,0x34,0x9d,0x46,0x52,0x9f,0x84,0x79,0x8c,0x70,0xbc,0x88,0x30,0xaf,0x87,0x69,0x57,0x6e,0xde,0x2e,0xfe,0x0f,0x3b,0x8d,0xc8,0x95,0xcf,0x69,0x78,0xff,0xa1,0xb1,0x81,0x49,0x1e,0x45,0xc0,0x83,0x1b,0xa3,0x5a,0xee,0x3e,0x9a,0x15,0x7c,0xf0,0xa2,0xfd,0x04,0x22,0x55,0x2d,0x74,0x61,0x29 +.byte 0x0e,0x4f,0x31,0xdb,0x35,0x99,0x37,0xb7,0x7d,0x11,0xde,0x87,0x4f,0x84,0xeb,0x6c,0x14,0xcc,0xbb,0x71,0x47,0xab,0x5b,0x61,0x51,0xeb,0xa1,0xc1,0x5f,0xe4,0x5c,0x3c,0xab,0x04,0xf1,0x60,0x50,0xe1,0xd0,0x58,0xdf,0x42,0xed,0x73,0x5f,0x31,0xdf,0x8d,0xb8,0xb8,0xdc,0x4e,0x2f,0xe3,0x7f,0x89,0x9e,0x62,0xc9,0xef,0xfd,0x60,0xae,0x58 +.byte 0xa9,0xa5,0x8b,0xa8,0x3b,0xd8,0x5f,0xd4,0x09,0xff,0x61,0x8c,0x25,0xde,0x84,0x7f,0x35,0xc9,0x5c,0x2b,0xe8,0x46,0xe4,0x1c,0xbd,0x77,0x51,0x31,0x55,0x3d,0xb4,0x35,0xf3,0xdc,0xa5,0x55,0xd3,0xe3,0x24,0xf9,0x41,0xe2,0xf0,0xbd,0xf5,0xff,0x81,0x87,0x64,0xc9,0xe7,0x69,0x29,0x86,0xaf,0x98,0x33,0x33,0x62,0x9c,0x7b,0x16,0xbb,0xfe +.byte 0x0b,0xa7,0x92,0xa5,0x7b,0x81,0xbc,0x50,0x88,0xf6,0xe7,0xfc,0x73,0xd6,0x37,0x43,0x09,0xa5,0xc6,0xd6,0x4d,0x28,0xb5,0xaa,0x53,0x52,0x8c,0x2c,0x06,0x64,0x6c,0x21,0x6b,0xe7,0x67,0x4a,0xa5,0xcc,0xa1,0x32,0xf0,0xd9,0x78,0xb9,0xc3,0xdb,0x41,0xee,0x10,0x11,0x81,0x04,0x03,0x73,0x48,0xc6,0x3e,0x60,0x6d,0x82,0xef,0xe2,0xa8,0xe8 +.byte 0xd7,0xda,0xd9,0xb5,0x34,0x42,0xc8,0x1c,0xa7,0xa4,0x8e,0x88,0x2e,0xbc,0x96,0x0a,0xfc,0x40,0x36,0x80,0xdf,0x60,0xe9,0x03,0x02,0x0c,0x51,0xf7,0x7d,0x01,0xd2,0x21,0x38,0x44,0x4b,0x34,0x80,0xbf,0x5e,0xc1,0x86,0xf2,0x35,0xeb,0xa8,0x21,0x15,0x74,0x7c,0x99,0x55,0x64,0xf4,0x48,0xd6,0xd1,0x47,0x1f,0x4d,0xbf,0x0c,0x20,0x5d,0x86 +.byte 0xb9,0xab,0x4e,0xc8,0x86,0x08,0x71,0x1d,0x13,0xf6,0xd3,0x17,0xac,0x61,0x10,0x5d,0x2a,0xb4,0x48,0xa1,0xb9,0x79,0x5a,0x09,0x3a,0x65,0x4c,0xbd,0x97,0xbe,0x48,0xc6,0x66,0xd8,0xce,0x0c,0x19,0xb5,0x44,0x02,0xfa,0xb7,0xa8,0x3f,0x9b,0x86,0xec,0xd1,0xef,0x1d,0x7d,0xb3,0x82,0x5c,0x92,0x48,0x02,0x2c,0x56,0x0f,0xff,0xf7,0x19,0x74 +.byte 0xc2,0x38,0x24,0x8d,0xb2,0x87,0xb6,0xeb,0x49,0x50,0x6a,0x33,0x74,0x4e,0x2a,0xcb,0xf4,0x13,0x2c,0xfa,0x3b,0x0e,0x3d,0x98,0x3e,0x33,0xd9,0x55,0xfa,0xb9,0x74,0xb8,0x6f,0xc1,0xd8,0xfd,0x8f,0xff,0xb9,0x1a,0x17,0xf8,0xb6,0x21,0xc4,0x9d,0x47,0x5e,0x84,0xf6,0xe5,0xbf,0x93,0x98,0xac,0x8f,0x68,0x85,0xf8,0xe8,0x79,0x7f,0x6f,0x0d +.byte 0x62,0x2c,0xaa,0x1e,0xe4,0xab,0x73,0xf8,0x6f,0x02,0xda,0x6b,0x3c,0x14,0x2e,0xc9,0xdb,0xb0,0x4e,0x39,0xb5,0xcf,0x05,0xae,0x9c,0x63,0x2f,0x6a,0x25,0x61,0x9d,0x40,0xeb,0x7e,0xd8,0x97,0x97,0x33,0x67,0x5c,0x78,0x84,0x68,0xc2,0x7a,0x26,0x58,0xe3,0x6c,0x0a,0x2e,0x6a,0x82,0xd6,0x43,0xed,0x79,0xa5,0x8d,0x4e,0x7c,0xf7,0x80,0x01 +.byte 0xe7,0x02,0x5e,0x3a,0xf7,0x8a,0x4a,0x85,0xe9,0x98,0x1e,0x69,0x33,0xf3,0x54,0x96,0x79,0xc8,0x03,0x0a,0x9f,0x0c,0x5d,0x66,0x44,0x88,0x3c,0xd7,0x9e,0xd1,0xde,0x01,0xfd,0x5e,0xa5,0x6a,0x82,0x00,0x36,0xe6,0x12,0xe3,0x62,0x46,0x45,0x69,0xfb,0x4f,0x44,0x8e,0xe5,0x8d,0x21,0x57,0x6a,0x61,0x8e,0x56,0xcb,0x5b,0x2c,0x5f,0x65,0x41 +.byte 0x2c,0xad,0xf2,0x98,0x34,0xbb,0x06,0x0d,0x8a,0x3c,0x34,0x0d,0xa3,0xe2,0x6e,0x86,0xfa,0xa9,0xfb,0x6f,0xbb,0x32,0xd6,0x0d,0x76,0x6b,0x77,0xf3,0x83,0x41,0xc0,0x80,0x63,0x55,0x47,0xb8,0x13,0x6b,0x99,0x96,0x08,0x9b,0xc0,0x82,0xae,0x49,0x4a,0x51,0x63,0x74,0xf2,0xec,0xfa,0x0d,0xbc,0x3a,0xde,0xf5,0x4b,0x4f,0x08,0x41,0x23,0x88 +.byte 0x14,0x88,0x6a,0x3a,0xf0,0x5f,0x0c,0x45,0x7f,0x65,0x7a,0x67,0xd8,0x17,0xed,0x04,0x47,0x60,0x0e,0x74,0x8f,0xfd,0x48,0xda,0xcd,0xe9,0xfe,0xf5,0x6f,0x43,0xcd,0xa5,0x05,0xa2,0x2e,0x78,0x5b,0xff,0xb8,0x6f,0x2e,0xfd,0x3e,0x4b,0xef,0xcf,0xe0,0x06,0x57,0x28,0xf4,0x2e,0x3b,0xb5,0x9e,0x3c,0xbd,0x63,0xa6,0x78,0x8e,0xd5,0xb8,0x81 +.byte 0x4e,0xf0,0xbf,0x14,0x65,0xc8,0x00,0x9f,0x0e,0x25,0x6a,0x7a,0x63,0x58,0xe4,0xe7,0xa9,0x82,0x16,0xc9,0x86,0x20,0x94,0x71,0x5b,0x9f,0x9b,0xc3,0xc5,0x32,0xb0,0x6c,0x2b,0x8c,0x54,0x67,0x36,0x94,0xb1,0x47,0x33,0xfd,0x9f,0x7c,0x7f,0x7e,0x08,0x51,0x1f,0x7e,0xbf,0x09,0x57,0xf3,0xaa,0x77,0x94,0xf3,0x20,0x1b,0x95,0xf6,0x04,0xb2 +.byte 0x09,0x9d,0xe2,0xbb,0x4d,0xfe,0x6b,0x99,0x06,0x58,0x40,0x84,0x90,0xfa,0x0e,0x9b,0x58,0x6d,0x02,0xbe,0x53,0x73,0xd1,0xc9,0xc7,0x31,0x2a,0x4a,0x12,0x2c,0xb6,0x1c,0xfb,0x49,0xc6,0x1a,0x93,0x33,0x1f,0x29,0x8b,0x94,0xe9,0x20,0xa7,0xe6,0x20,0xe6,0xbf,0xcd,0x5c,0xb6,0x52,0x42,0xf0,0x9c,0x6c,0x21,0x61,0x10,0xe7,0x0e,0x9f,0x33 +.byte 0x5f,0xc8,0xd0,0x20,0xe0,0x3e,0xc5,0x7a,0x10,0xf1,0xe5,0x19,0x52,0xcd,0xe1,0xa8,0x62,0x43,0x20,0x79,0xc3,0xac,0x93,0x27,0x02,0x8e,0x21,0x06,0xb9,0x66,0xd9,0xc8,0x40,0xe0,0xd1,0xf0,0x64,0x81,0xa6,0xc4,0x87,0x85,0x2b,0x92,0x1c,0xd6,0x48,0x85,0xb1,0xbe,0x78,0xf3,0x89,0xa2,0xf0,0xe5,0x39,0xac,0xbf,0x59,0x5d,0xf8,0x4f,0x74 +.byte 0x44,0x85,0x98,0x03,0x81,0x4b,0x7e,0x6f,0x5c,0xa1,0x11,0xd2,0xfd,0x30,0x7f,0xcd,0xd0,0xe2,0xcc,0xd4,0x80,0x16,0x46,0xa6,0x64,0x8b,0x9e,0xfc,0x2a,0x1a,0x65,0x5c,0x90,0x82,0xf9,0x23,0x48,0x11,0xf6,0xf2,0x50,0x3f,0xed,0x44,0xf2,0x9a,0x5a,0xca,0x1c,0x9a,0xd2,0x71,0x1b,0xd6,0x4c,0x51,0xf6,0x89,0x6f,0x65,0xe4,0x97,0x41,0x47 +.byte 0x1b,0x86,0xbd,0x83,0xa0,0xfe,0xac,0x16,0xe8,0xab,0x28,0x96,0x2f,0xa2,0x12,0x5f,0x7c,0xb3,0x18,0x2b,0x05,0x51,0x49,0xba,0xb4,0x1f,0x1e,0xe6,0x8a,0x82,0xca,0x33,0x7d,0xe6,0x8c,0x95,0xba,0x08,0x60,0x47,0x6d,0x79,0xac,0x0f,0xba,0x46,0xff,0xed,0xe0,0x34,0x03,0xfe,0xa7,0x85,0xe5,0x61,0xe3,0xe4,0x6c,0x5c,0x1b,0x9d,0x8a,0x54 +.byte 0x17,0xaf,0x08,0x4c,0x44,0x7f,0xb7,0xb0,0x6a,0x3a,0xff,0xb7,0xf6,0x10,0xc4,0x8f,0x31,0xd6,0x1a,0x25,0x27,0x35,0xca,0x87,0xa9,0x61,0x0b,0x35,0x96,0x89,0x0f,0x1a,0xbd,0x1e,0xf6,0xee,0xaa,0x95,0x16,0xe4,0x38,0x7b,0xb2,0xbe,0xea,0xc9,0x5a,0xcd,0x3b,0xb8,0x9e,0xd7,0x20,0xcd,0x3f,0x90,0xaa,0x8b,0x2a,0x42,0xed,0xab,0xc1,0x53 +.byte 0x83,0xc7,0xb8,0x3f,0xa1,0xb9,0xf4,0xf4,0xb0,0xe0,0x1f,0xb0,0xeb,0xa9,0x81,0x9f,0x31,0x67,0x1e,0x6c,0x96,0x9f,0x09,0xea,0x04,0xfe,0x37,0x22,0x87,0x60,0xb9,0x91,0x8f,0xa9,0x11,0xa3,0x68,0x5e,0x29,0x21,0x41,0xa3,0x02,0x08,0x82,0xd0,0x2b,0x66,0x6d,0x3c,0x46,0xc7,0x23,0x09,0x86,0x7f,0x53,0x11,0x3e,0x83,0x52,0x0a,0x4a,0xe4 +.byte 0x93,0xc6,0xc1,0x96,0x17,0x94,0x51,0x17,0x69,0xea,0x72,0xb8,0x85,0xde,0x7e,0x13,0x4a,0x08,0x26,0xae,0x31,0x19,0x0f,0x6f,0x48,0xa1,0xf2,0x57,0xa2,0x01,0x8e,0x84,0xee,0x63,0x23,0xc0,0x97,0x84,0xa2,0xf5,0x3f,0xeb,0x30,0x9e,0xdd,0xd2,0x43,0x24,0xa2,0x57,0xb7,0x57,0x86,0x26,0xa3,0xe6,0x6e,0xf2,0xcd,0xfb,0x7b,0x34,0x74,0x53 +.byte 0x07,0x95,0x51,0xb7,0xfd,0xf3,0xd1,0x83,0xbd,0x25,0xd6,0x2c,0x69,0x73,0x02,0x8e,0x76,0x19,0xea,0xb0,0x83,0x60,0x8c,0x53,0x9d,0x77,0x86,0x1e,0x65,0xc7,0x57,0x31,0x29,0xd9,0xa9,0x3a,0xb2,0x0d,0xd8,0xf4,0xf9,0x48,0x49,0xfb,0x3c,0x40,0x3d,0x1b,0xc4,0x8b,0x94,0x0e,0x50,0x7f,0xd5,0x39,0x5e,0x57,0x86,0xd1,0xba,0x0c,0x38,0x10 +.byte 0x01,0x5f,0x44,0xf3,0xe5,0xb0,0xf8,0xae,0x17,0xdf,0xd2,0xb3,0x10,0xc5,0x3b,0xfd,0xd9,0x68,0x90,0x9c,0x6c,0x26,0xdf,0x12,0x50,0xfa,0xbf,0x8b,0xce,0x68,0x80,0x8c,0x04,0x60,0xbf,0x34,0x81,0xbd,0x29,0xa3,0xa2,0xe4,0xe0,0x2d,0x25,0xb2,0xff,0x9f,0xd1,0x20,0x07,0xd5,0x8c,0x19,0xfa,0x3f,0x47,0xec,0xc1,0x8d,0xc9,0x36,0xf8,0x51 +.byte 0x4c,0xaa,0x40,0xe3,0x6a,0x21,0xd5,0xe6,0xa6,0xcf,0x8c,0xd9,0x10,0x47,0x66,0xfd,0x32,0x48,0x36,0x8f,0x14,0xed,0x09,0x80,0x50,0x27,0xaa,0xd5,0x1f,0x69,0xb8,0xe4,0x96,0x27,0x56,0x78,0xd6,0xd5,0x2d,0xf0,0x4f,0x14,0x30,0x17,0x9e,0x5b,0x69,0x8c,0x7c,0x1c,0x97,0x38,0x65,0x77,0x75,0x49,0xac,0x4b,0x06,0xda,0x74,0x11,0x86,0xbc +.byte 0xad,0x01,0xf2,0x03,0x29,0x5d,0xa7,0x74,0xd3,0x44,0xae,0x1d,0xbf,0xf9,0xc5,0x5b,0x83,0x8c,0xd6,0x84,0x8a,0x8e,0xe9,0xa6,0x08,0xf4,0x88,0x13,0xcb,0x16,0x45,0x13,0x9c,0xc7,0x75,0xa9,0xa7,0x55,0x04,0x91,0xd6,0xe9,0xd4,0xe5,0x65,0xa0,0x3a,0x53,0xa0,0xfc,0x62,0xce,0x91,0x01,0xb4,0x06,0x8b,0x10,0x79,0x6f,0x2c,0xd6,0x0a,0xa2 +.byte 0x31,0x8f,0x75,0x32,0x0e,0xfa,0x0d,0xec,0xfd,0x71,0x7f,0x74,0x97,0x30,0xe9,0xee,0x9f,0x04,0x21,0xb5,0xc9,0xd1,0x52,0x2a,0x0f,0x18,0xbe,0x3e,0xbb,0x98,0xaf,0x59,0x9b,0x85,0x79,0x5e,0x52,0x93,0x1c,0x42,0x67,0x67,0x6b,0xd5,0x41,0xaf,0xba,0x09,0x3a,0xb4,0x0e,0x97,0x22,0xe6,0xbb,0xe1,0x27,0xa1,0xf9,0xf0,0xcd,0xa2,0x3d,0xdb +.byte 0x81,0x2f,0x65,0x90,0xb7,0xe5,0xe5,0xce,0x1d,0x3b,0xfe,0x34,0x57,0xcd,0x3a,0xbd,0x19,0x59,0x23,0x12,0xf1,0xb6,0xf2,0xf7,0xc1,0xf5,0x1d,0x0b,0x46,0x8f,0x16,0x6a,0x81,0xfe,0xc1,0x97,0x8d,0x69,0x55,0x60,0xdd,0xf0,0x61,0xe9,0x22,0x30,0x72,0x1a,0x24,0x30,0xd7,0xbc,0x1c,0xfa,0x02,0x55,0xfc,0xb9,0x4b,0x0a,0xe4,0x90,0x90,0x3a +.byte 0xe3,0xce,0xd4,0xa0,0x7d,0x21,0x5a,0xf7,0x79,0x6e,0x03,0x4f,0x4e,0x93,0xad,0xc4,0x8e,0x9d,0x9f,0x8a,0x39,0x59,0x20,0xc1,0x5d,0x6a,0x4d,0x8f,0x69,0x78,0xea,0xba,0xde,0xc0,0x87,0xb2,0xf2,0x20,0xd6,0x7a,0x9c,0xf9,0x09,0x03,0x2a,0x4d,0xb9,0x10,0xfc,0xe5,0x05,0x90,0xed,0x45,0x4f,0x5f,0x7c,0x5d,0xfa,0xe6,0x0d,0x07,0xae,0xcc +.byte 0x21,0xc8,0x1c,0x7a,0xfb,0x1d,0xb9,0xe3,0x69,0xa1,0xb7,0x5f,0xb5,0x6a,0xb9,0x58,0x9d,0xcd,0x99,0xf8,0x38,0xbb,0xa0,0xfe,0xf8,0x41,0x51,0x72,0xce,0x76,0x89,0x59,0xa2,0xab,0xef,0xea,0xab,0x79,0xbc,0xda,0x73,0xdb,0x18,0xda,0x60,0x1b,0xc4,0xb7,0x4f,0xb3,0x86,0x21,0x2a,0xc3,0xec,0x7f,0x0e,0x89,0x16,0x0e,0xd2,0xbd,0xea,0x0e +.byte 0xcf,0xc1,0x4b,0x2c,0x97,0x69,0xce,0xd3,0x94,0xad,0x81,0xe9,0x70,0xf4,0xf8,0xe5,0x77,0xe6,0x92,0xe0,0x23,0x38,0xd3,0xc1,0xdd,0x2e,0x58,0x77,0xc5,0xc3,0x29,0x34,0x66,0x48,0xf9,0x75,0x3c,0x8a,0x6a,0xb8,0xbf,0xf8,0xba,0xf0,0xb9,0xa1,0x81,0x0b,0xa1,0xaa,0x17,0x34,0x1a,0xbb,0xa3,0xa2,0xba,0x21,0x45,0xc0,0x1d,0x57,0x11,0x4d +.byte 0x9b,0xd4,0x64,0x84,0xd7,0x0b,0xd6,0xfb,0x72,0x2c,0xdb,0xc3,0xe6,0x24,0xa9,0xf3,0x30,0x9f,0x21,0x05,0x1e,0xcc,0x48,0x58,0xed,0xfd,0xb2,0x34,0xe3,0xf7,0x7e,0x56,0xee,0xdf,0xa4,0xbb,0xb1,0xcc,0x7f,0x81,0x40,0xe9,0xdf,0x3f,0x82,0xc4,0x0d,0x14,0x9b,0x3b,0x80,0x15,0x24,0x6e,0xa4,0xce,0xfa,0x28,0xa7,0x7f,0x89,0xfb,0xc6,0x83 +.byte 0xe8,0x2a,0x70,0xfb,0x9c,0x75,0xb8,0xfd,0xec,0xbc,0xbb,0xf5,0xef,0x0a,0xa5,0x77,0x0b,0x38,0xa0,0x63,0xa5,0x71,0x12,0xc9,0xaa,0xc3,0xf9,0x72,0x30,0x45,0x4e,0x19,0x44,0x2d,0x09,0xf4,0xf1,0xa8,0xe8,0xde,0x58,0x87,0x70,0xa8,0x91,0x86,0xef,0x5d,0x02,0x90,0x55,0x63,0x99,0xde,0xd7,0xb7,0x5f,0x07,0x01,0xdf,0xb1,0xe5,0x55,0xf5 +.byte 0x87,0x69,0xd2,0x7a,0x71,0xbc,0x0e,0x4b,0x8b,0x98,0xf7,0xf6,0x0a,0x01,0xbb,0x9f,0x1b,0x15,0xb6,0x76,0xe0,0xc0,0x4b,0x5d,0x08,0xba,0xba,0x73,0x3f,0x36,0x5a,0x29,0xd7,0x7c,0xc2,0x87,0x03,0x75,0xff,0x26,0x21,0xae,0xbe,0x66,0x70,0xa2,0x99,0x11,0x35,0x49,0x78,0x7b,0x3a,0xfe,0x94,0xf7,0x37,0xe0,0x69,0x56,0x39,0xf7,0x3f,0x71 +.byte 0x39,0x74,0x75,0x32,0x1f,0xfb,0x3a,0x87,0x07,0xab,0xf1,0xed,0xe3,0xe2,0xbf,0x3f,0xb1,0x73,0x11,0xc9,0x34,0x4b,0xb1,0x1e,0x62,0x4e,0xc1,0x8a,0xae,0xcc,0xc7,0xb3,0xa7,0x70,0x01,0x73,0xad,0xb3,0xc3,0x59,0x70,0x14,0x31,0x94,0x9f,0x6b,0x18,0x11,0x50,0x52,0xc9,0xf0,0xf8,0x12,0x9d,0x7c,0x90,0x64,0x9d,0xd9,0x41,0xa6,0x45,0xe3 +.byte 0xc9,0x25,0x73,0xe7,0x48,0x9d,0xdc,0xe0,0x2c,0x71,0xd3,0x68,0xc5,0xab,0xac,0xe3,0x16,0x95,0xe3,0xa5,0xae,0x2f,0x57,0x60,0x4b,0x11,0x90,0xaa,0xe7,0x48,0xca,0xc7,0xde,0x2e,0x56,0x10,0x8e,0xc3,0x0a,0x7d,0x66,0xf1,0xc3,0xf7,0x2d,0xdd,0xfa,0x5e,0xb2,0xcb,0x99,0x4d,0xaa,0x4e,0x91,0xc1,0x94,0x60,0x27,0x33,0x82,0xa6,0x2a,0xba +.byte 0x05,0x32,0x33,0x0a,0x30,0x47,0xb0,0xac,0x68,0x7d,0xef,0x25,0x09,0xcf,0x51,0xf4,0x06,0x28,0x14,0xb2,0xb4,0x1f,0xaf,0x37,0xdc,0x70,0x88,0x4d,0xb9,0xfc,0x2d,0x61,0x25,0x13,0x1f,0x32,0x48,0x6d,0xeb,0x46,0x05,0x66,0x44,0xa1,0xec,0xce,0xe9,0x51,0xa9,0xba,0xf8,0xde,0x95,0x1b,0x20,0xe1,0x21,0x75,0x4b,0x25,0x7f,0x3c,0x16,0xf7 +.byte 0xe2,0xbe,0xeb,0xca,0x2b,0x77,0x92,0x16,0x32,0xe2,0x74,0x21,0x52,0x3f,0x08,0xba,0x41,0xb0,0xd3,0xd2,0xf7,0xf3,0x29,0xb6,0x10,0xfa,0xa5,0x29,0x35,0x29,0x21,0x0d,0xec,0xba,0x5a,0xf3,0x63,0x0f,0x9d,0xbc,0x42,0x02,0x46,0xe9,0x07,0x4a,0x9a,0xe8,0xd3,0x78,0x92,0xa2,0xe5,0x03,0xec,0xd4,0xe2,0xc8,0x8f,0x92,0x4a,0xae,0xbc,0xd7 +.byte 0xdf,0x4b,0x07,0x22,0x47,0xbd,0xb4,0xb5,0xa0,0x7e,0xfb,0x21,0x40,0x62,0xb1,0x6c,0x07,0x00,0x64,0xf6,0xb2,0x75,0x5c,0x29,0x84,0xff,0x38,0x0c,0xc8,0x08,0x38,0x92,0xf9,0xad,0xd7,0xcc,0xc3,0x1c,0x03,0x80,0x49,0x39,0x1c,0xdb,0xae,0x60,0x87,0x8a,0x5c,0xe9,0x17,0xbd,0x2b,0x0f,0xa5,0xa1,0xf9,0x0d,0x4b,0x8c,0x4d,0x39,0xda,0x15 +.byte 0x8c,0xc4,0x69,0xaf,0x2b,0xb0,0xa1,0xfd,0xd9,0x65,0x3c,0x87,0x4b,0xf2,0x5a,0xd7,0xd8,0xb9,0xef,0x78,0x67,0x30,0x4c,0x6c,0x92,0xc5,0x1e,0x15,0xf8,0xd9,0x74,0x1b,0x54,0x0c,0x10,0x1b,0xb5,0x11,0x13,0xd6,0xb4,0xc0,0x53,0x03,0x2c,0x4b,0xee,0xac,0xf9,0x87,0x17,0x51,0x35,0xb8,0x1a,0xdc,0x16,0x61,0x5b,0xe9,0x5a,0x43,0x94,0x42 +.byte 0x8f,0x68,0xbd,0xb6,0x52,0x00,0x63,0xa3,0x52,0x6e,0x5d,0x8e,0xe9,0x4f,0xf5,0x69,0xd8,0x4f,0xf5,0x5c,0x89,0x7e,0x1c,0xb9,0xdc,0x7b,0x92,0x8a,0x2b,0xfc,0xb8,0xad,0xbb,0xff,0x61,0x2e,0xc0,0xdc,0xfb,0x2f,0x78,0x2a,0x50,0x32,0x9b,0x4c,0xfd,0x9e,0xab,0x80,0x5c,0x7d,0xc8,0x6b,0xb3,0x2d,0x0a,0xfe,0x43,0xa2,0x10,0x10,0x79,0xbc +.byte 0x8c,0xa0,0x86,0x09,0x8c,0x8b,0x28,0xf3,0x8a,0xc9,0xeb,0xcb,0xb5,0x0e,0x56,0x19,0xae,0xe0,0xa1,0x22,0x72,0xc5,0xad,0x01,0x12,0x69,0xb6,0x52,0xb8,0xdd,0x36,0x25,0x21,0xae,0x73,0x06,0xc1,0xe0,0x23,0x20,0xe1,0x8e,0xe4,0x99,0xcd,0x86,0xca,0xf5,0x93,0x0e,0x6b,0xb8,0xba,0x18,0x4a,0x36,0xed,0xd0,0x37,0xc8,0xc7,0x8a,0xb2,0x63 +.byte 0x2e,0xa4,0x22,0x76,0x6f,0xf7,0xdd,0x81,0xd6,0x6f,0xcd,0xb9,0x65,0xf0,0x95,0x77,0xae,0xca,0x54,0x62,0xce,0x5d,0x47,0x9e,0x10,0x89,0xb9,0xfa,0x72,0x0a,0xef,0x24,0x17,0x45,0xb0,0xb0,0xc7,0x51,0x85,0xa1,0xb1,0x6a,0xd2,0xea,0x48,0xe2,0x6a,0x03,0x2a,0xdf,0xa8,0x0e,0x62,0xa2,0x1e,0xe2,0xa7,0x20,0x57,0xbd,0x73,0xeb,0xef,0x86 +.byte 0xc9,0xd4,0xfa,0x96,0xfe,0xfa,0xb3,0xc6,0xbf,0x7a,0x16,0xa2,0x43,0x73,0x56,0x71,0x78,0x32,0x3b,0xc1,0xd8,0x26,0xbf,0xde,0x39,0x5d,0xbd,0x3b,0xff,0xd7,0x4f,0xa0,0x67,0xa6,0x09,0x9a,0x81,0xfd,0xec,0x34,0x73,0xcd,0x90,0x15,0x8b,0x3e,0x2d,0x6f,0x7d,0xcc,0xf5,0x20,0x15,0x07,0xa8,0x2f,0xa5,0x5b,0x2b,0x4f,0xb8,0x2f,0x14,0x6c +.byte 0x52,0x78,0xbd,0x92,0x98,0xda,0x69,0x19,0x58,0x4c,0x76,0xe4,0x20,0xb2,0x48,0xa4,0x9f,0x2f,0x4c,0x9b,0x45,0x7f,0x7d,0x1c,0x46,0xe9,0x1e,0x43,0x26,0x49,0x39,0xb6,0x42,0x3a,0x4c,0x59,0x95,0x6b,0x28,0xd5,0xbe,0xa7,0x2e,0xd0,0x0c,0x00,0xa0,0x67,0x06,0x4e,0xee,0xae,0x7f,0xc2,0xb5,0x12,0x46,0x3f,0xb4,0x35,0x16,0x2a,0xda,0xbf +.byte 0x41,0x34,0xbe,0x30,0x2a,0x0f,0x7b,0x60,0xa6,0x8b,0xcd,0xae,0x7a,0x8c,0xd6,0x97,0xab,0x06,0x1e,0x14,0x87,0x45,0xa3,0x3c,0x9c,0xc4,0xa0,0x1d,0xee,0xf0,0xca,0xb8,0xa6,0x8d,0x37,0x92,0xad,0xbc,0xe6,0x1f,0x65,0x75,0xd3,0xbc,0x72,0x66,0xe2,0xff,0xbc,0x19,0x93,0xae,0xee,0xd0,0x63,0x6d,0x97,0x6f,0x57,0xf3,0x77,0xcd,0xe3,0x57 +.byte 0x3f,0x00,0xc8,0xe1,0x63,0x83,0x15,0x84,0xc6,0x08,0xdb,0x03,0xc9,0x27,0x47,0x4c,0x17,0x12,0x40,0x6e,0xac,0x74,0x6f,0x3c,0x22,0x57,0x36,0x29,0xbb,0x6a,0xc7,0x5a,0xfe,0x60,0x1c,0x0f,0x32,0x95,0x1b,0xf2,0x3c,0xed,0x04,0x87,0x4c,0x48,0xc7,0x63,0x79,0x24,0xb3,0x12,0xbf,0x55,0x3b,0x32,0xbf,0x52,0x4e,0x1e,0xc1,0x1f,0xf2,0xfd +.byte 0xe6,0xb8,0x56,0x38,0x0e,0xd2,0x75,0x3d,0x41,0x99,0x0c,0x7a,0x12,0x3f,0xa7,0x3a,0x79,0xa0,0xd7,0x6f,0x47,0x97,0x7e,0x9e,0xf6,0xfe,0x29,0xc0,0x16,0x34,0x38,0x80,0x2f,0xde,0x65,0x79,0xc9,0xfd,0xa0,0x84,0xc3,0x39,0xbc,0x0b,0xbe,0x18,0xba,0x0d,0xe3,0x35,0x11,0xba,0x9f,0xde,0x5d,0x0c,0xae,0x8e,0x0c,0x0f,0x66,0x9c,0xe6,0xfc +.byte 0x3d,0xdb,0x46,0xf1,0x84,0x57,0x62,0xb0,0x00,0xd4,0x8c,0xaa,0x93,0xeb,0xf7,0xa7,0x8e,0x82,0xba,0x89,0x67,0xbb,0x38,0xb0,0xb6,0x13,0x0c,0x96,0x22,0x9c,0x6a,0x86,0xea,0x83,0xad,0x5f,0x7b,0x3a,0x28,0xd8,0x53,0x90,0x2d,0xab,0xc9,0xbe,0x99,0xfb,0x68,0x42,0x27,0xf6,0xe3,0x5a,0xaf,0xf3,0xd6,0xee,0xb6,0xa2,0xe0,0x32,0x3c,0x1d +.byte 0xd4,0x3c,0x2b,0x58,0xc2,0x4f,0x3d,0x20,0x39,0xdb,0x80,0x89,0x20,0x20,0x7b,0xe6,0x1d,0xd0,0xa2,0x1a,0xd4,0x88,0xc9,0xe0,0xb9,0xf6,0xb2,0xa1,0xcd,0xf2,0x67,0x60,0x44,0xd8,0xce,0x6a,0xe2,0x52,0xc3,0xf3,0x61,0xa3,0x14,0x58,0xd6,0xe5,0x43,0x4a,0x8d,0xcc,0x4f,0xf8,0x17,0xdd,0xd2,0x5d,0xd5,0x5a,0x86,0x8e,0xc4,0x74,0xdc,0x1b +.byte 0xad,0xca,0x63,0x75,0xf0,0x43,0x41,0x16,0x02,0x49,0x6a,0x3a,0xe3,0xb9,0xa9,0xdc,0xfb,0x99,0xbc,0x60,0x0d,0xdb,0xa0,0xcf,0x27,0xaa,0xd5,0xc5,0x42,0x0b,0x02,0x00,0x43,0xaf,0xb5,0x4f,0xe1,0x88,0xa1,0x9d,0xca,0xfb,0x9f,0x1f,0x08,0x9c,0x66,0x23,0xca,0x4b,0x88,0xb4,0x40,0xdc,0xd3,0xd3,0x1a,0x64,0xe3,0x9b,0x43,0xea,0x20,0x90 +.byte 0x30,0x2e,0xc4,0x75,0xc5,0x52,0xc5,0x7c,0x0e,0x35,0x56,0xf5,0x1f,0x50,0x2b,0xf6,0x28,0x93,0x6f,0xde,0x10,0xc6,0x49,0x2b,0x77,0xb1,0x6d,0xce,0xfd,0x37,0xd4,0x8d,0x11,0xed,0x88,0x1e,0xca,0x68,0x0c,0x4e,0x38,0x7f,0x0f,0xab,0x6f,0x8d,0x1c,0x7d,0xd4,0x7d,0xd8,0xa9,0x5c,0x24,0x5a,0x7d,0xf4,0x5b,0xb6,0xb7,0x28,0xc7,0x93,0xd6 +.byte 0xa9,0xe5,0xac,0x62,0x16,0x9c,0x4e,0x5c,0x24,0xa0,0x2a,0x76,0xce,0x7d,0x5c,0x4b,0xbe,0xbc,0x83,0x5c,0x9a,0xc8,0x06,0x7b,0x1e,0xac,0x98,0x67,0x17,0x32,0x94,0xda,0xd1,0x8b,0x58,0xad,0x8e,0x26,0x03,0x81,0x7c,0x48,0xd1,0x83,0x03,0xba,0x6c,0x51,0xe9,0x25,0x82,0xd2,0xb9,0x7f,0xd8,0x33,0x3f,0x77,0x29,0x45,0x41,0xa9,0x17,0x3d +.byte 0x62,0xc6,0xd2,0xfb,0xd1,0x24,0xc7,0xee,0x10,0xc0,0x64,0xc3,0x46,0xc6,0x2b,0xe8,0x9c,0xc8,0x99,0x23,0x77,0xa9,0xb5,0x12,0xc4,0x53,0xde,0xbc,0x20,0xb2,0xc4,0x12,0xdb,0xc2,0x0b,0x63,0x70,0x6a,0x41,0x31,0x65,0x48,0xa0,0xfc,0xbc,0xd6,0x3f,0x55,0x18,0x17,0x65,0x35,0x58,0xe3,0x33,0xac,0xaf,0xca,0xb2,0x51,0xc1,0xcc,0x60,0x38 +.byte 0x94,0x8f,0x13,0xb8,0xcc,0x8c,0xc4,0x12,0xea,0xd5,0x39,0xd3,0x46,0x55,0x17,0x27,0x7a,0x07,0x01,0x02,0x74,0xa6,0xe7,0xc8,0xa7,0xd0,0x76,0xc8,0x5e,0x57,0x50,0xc5,0x19,0xf1,0x95,0xa3,0x52,0x10,0xa3,0x1e,0xcd,0xb1,0x05,0x64,0xe5,0x69,0xd9,0x5e,0xfc,0x71,0xef,0xe1,0xf6,0xb3,0xa7,0xf7,0xf9,0x71,0xfd,0xbb,0x5b,0x2b,0x7a,0xd2 +.byte 0x72,0x7c,0xc7,0x73,0x89,0xf7,0xe2,0x0b,0xcd,0x05,0x4f,0x0c,0x10,0xed,0xcc,0xda,0xb6,0x81,0x19,0xe6,0x2b,0x06,0x66,0xef,0xc5,0xfd,0xd5,0xc6,0x66,0x20,0x86,0x2a,0x4f,0x05,0x49,0xf1,0x54,0x4a,0x6e,0x1d,0xcd,0xad,0x18,0xeb,0x6c,0x58,0xd6,0x75,0x3e,0x62,0x48,0xab,0xea,0x1f,0x7f,0x05,0x45,0x6e,0x75,0x2a,0x5e,0x97,0x5b,0xde +.byte 0x5a,0x99,0x42,0xc1,0x62,0xab,0xc7,0x01,0x4d,0xac,0xd6,0xdc,0xc9,0x71,0x24,0xd1,0x33,0xe2,0x4b,0x1f,0x09,0x04,0x1f,0x0d,0x42,0x45,0xcf,0x7c,0xa0,0xee,0x48,0xfd,0x8b,0x1f,0xaa,0x50,0x48,0x6d,0x8e,0x34,0x76,0x09,0x23,0x8a,0x40,0x0d,0x5d,0xc1,0x2a,0xba,0x5f,0x9c,0x86,0xfb,0x37,0xdf,0x24,0xff,0x27,0x88,0xbf,0xf6,0xa4,0xc3 +.byte 0xf0,0xd3,0x02,0xa8,0x7c,0x6d,0xc4,0xc5,0x14,0xc3,0x64,0x28,0xa8,0x05,0x33,0xc2,0xda,0x12,0xfc,0xbe,0x0d,0x8e,0xf4,0xf5,0x48,0x5a,0x8e,0x8a,0xd2,0x50,0x7c,0xc0,0xbc,0xde,0xdb,0x9a,0xf6,0xa0,0x92,0x8d,0x19,0xbc,0x5a,0xdc,0xbf,0xfb,0x13,0x8f,0x41,0x09,0xba,0xd9,0x0b,0x91,0x7a,0xdb,0x92,0x10,0xac,0xf2,0xb5,0x76,0xb5,0x7d +.byte 0x80,0x04,0xd6,0xec,0x98,0x09,0x5f,0x63,0x0d,0x58,0x00,0x8a,0x07,0x76,0xfa,0xe6,0x6e,0xdf,0xbf,0x73,0xe5,0xc9,0xe5,0x12,0x44,0x58,0xf9,0x2e,0xb1,0xe6,0x2c,0xf5,0x0d,0x94,0xa9,0x51,0x0d,0x01,0x03,0xab,0x79,0xf9,0xee,0x7e,0x10,0x4b,0xcb,0x20,0xbb,0x01,0x19,0xd6,0x12,0xd1,0xac,0x96,0xe9,0x0e,0xde,0xbf,0x7e,0x80,0xf6,0x58 +.byte 0xc9,0xec,0xaf,0xf7,0x2d,0x98,0xbc,0x2b,0xb1,0xf1,0x34,0x94,0x39,0x8e,0xbc,0x13,0x13,0x41,0x8f,0xf3,0x4e,0x4e,0x6b,0x2a,0xaa,0xea,0x70,0x5c,0xf8,0x42,0xf7,0xbc,0xfd,0xbd,0x6f,0x62,0x1b,0xcb,0xb9,0x39,0xdc,0x6a,0x47,0x81,0xaf,0xff,0x5b,0x7e,0x80,0xb9,0xbf,0xfa,0x15,0x7e,0xd1,0xc3,0xb2,0x80,0x99,0xbd,0xb9,0x30,0x8d,0xb5 +.byte 0x43,0x6b,0x7a,0x31,0xaf,0x45,0xf7,0xdd,0x21,0x8f,0x54,0xb1,0xf6,0x2d,0x7d,0x96,0x63,0x4a,0x93,0x98,0x37,0x7f,0x48,0x02,0x4b,0x0f,0x71,0xe4,0x70,0xce,0x66,0x6a,0x36,0xde,0x58,0x84,0x69,0xd6,0xbd,0x1a,0x9a,0x8b,0xc5,0xda,0x97,0xc5,0xe1,0x4e,0xec,0x9b,0x7a,0x65,0xe0,0xa5,0xdd,0x39,0x3c,0x9f,0xfd,0x45,0x17,0x4c,0x2f,0xb4 +.byte 0xb1,0xb1,0x42,0xe8,0x88,0x75,0x9f,0xb4,0xc1,0xdf,0x44,0xf9,0x4f,0x9a,0xf7,0x3d,0x35,0xc5,0x32,0xbe,0x43,0xd0,0x0d,0x71,0x4e,0x21,0xbf,0x31,0x99,0x73,0x5a,0x84,0x45,0x2e,0x00,0x8b,0x42,0x2b,0x14,0x86,0x51,0xcb,0xa0,0x98,0xa9,0x68,0x8d,0xdb,0x58,0x3d,0x73,0x9d,0xf9,0x2d,0x86,0x76,0x62,0xcb,0x93,0x29,0x48,0x92,0x38,0xfb +.byte 0xeb,0x1d,0xda,0xc3,0x10,0x1f,0x32,0x68,0xee,0xcb,0xb7,0x8a,0xcb,0xcb,0xe0,0x37,0x31,0xe8,0xad,0x7b,0x4a,0x29,0x2c,0x10,0x9e,0xdf,0x86,0xeb,0x13,0x0c,0xab,0xa4,0x30,0x36,0xf0,0xe0,0xac,0x14,0x41,0xa4,0xf4,0xf8,0x44,0x95,0xe8,0x8f,0x28,0xc2,0x35,0x0a,0x44,0x61,0xc7,0x60,0xc5,0x3b,0xc4,0x1d,0x67,0xfd,0xac,0x0b,0x2e,0x49 +.byte 0x62,0xea,0x17,0x3c,0xf5,0x4b,0xbe,0xba,0xba,0x42,0x02,0x0d,0x13,0xf1,0x15,0xff,0x2e,0x47,0x46,0xd1,0x27,0x64,0xb7,0x35,0x28,0x31,0xb5,0xde,0x1e,0xf9,0x26,0x6c,0x04,0x3c,0x0e,0x06,0x9d,0x4d,0xc7,0x1c,0x97,0x67,0x2c,0x6d,0x36,0x0d,0x4c,0x61,0x08,0xe9,0xbd,0x04,0x1d,0x8d,0xfb,0x0c,0x03,0x3d,0xb4,0x40,0xd5,0x1b,0x69,0x3b +.byte 0x68,0xcf,0x46,0x27,0xcf,0xb3,0xda,0x1e,0xdc,0x85,0x6f,0x4f,0x6b,0x09,0x9d,0xe9,0x6c,0x73,0x40,0x27,0xc9,0x8b,0x12,0x97,0xea,0x34,0xd7,0x51,0x32,0x90,0x4e,0xd7,0x91,0x41,0x3a,0xee,0xbc,0x97,0xb0,0x4a,0x39,0xdb,0xe3,0xe5,0x12,0x73,0xbf,0x5d,0x68,0xe0,0xc6,0x7c,0x6f,0x0d,0x14,0x1c,0xaa,0xde,0x29,0xb7,0xc7,0xa5,0x90,0x62 +.byte 0xe9,0xc5,0x75,0x16,0xe6,0xc0,0x9d,0xc5,0xb8,0xd6,0xfa,0xb0,0x72,0xb7,0x27,0xa6,0xa8,0x3f,0xbf,0x18,0x8b,0xaa,0x94,0xb3,0x47,0x50,0x2f,0x1c,0x49,0xab,0x46,0x38,0x7f,0x3e,0xf3,0xf1,0xb8,0xb3,0x44,0xaa,0x1f,0x76,0xb4,0x67,0xff,0xcf,0x7c,0x4b,0xa9,0xe1,0x62,0x93,0x4d,0x3e,0x96,0xdb,0x56,0xf6,0x26,0x5d,0x95,0x4c,0xfa,0x5f +.byte 0x06,0x2b,0x5c,0x33,0x2d,0xf8,0xfa,0x68,0x8a,0xed,0x28,0x2a,0x6e,0x95,0x86,0x59,0x71,0xef,0x86,0x47,0x60,0xec,0x35,0x79,0xa9,0x98,0x2d,0x6e,0x20,0x26,0x3a,0x21,0xec,0x59,0x15,0x65,0xcd,0xb9,0x91,0x19,0x6e,0x74,0x89,0x3b,0x10,0x00,0xab,0x8a,0x45,0x23,0x20,0x94,0x03,0x02,0x77,0xb7,0xcf,0x9c,0x71,0x18,0x0c,0x5b,0x40,0x62 +.byte 0x3b,0x8f,0xc9,0xf6,0x4c,0x8f,0x60,0x66,0x05,0x87,0x05,0x90,0xd4,0x08,0x76,0xd7,0xa3,0xb6,0x37,0xa8,0x83,0x05,0xb2,0x48,0xe9,0x24,0xc4,0xfb,0x79,0xa1,0xce,0xac,0x29,0x13,0x4e,0x72,0xdf,0xad,0x9e,0x5b,0xcd,0x9c,0x39,0x1d,0x3e,0x57,0x9d,0xf2,0x96,0x13,0xa4,0x79,0x4c,0x76,0x40,0x03,0xb3,0x18,0xcf,0xd7,0x45,0x2a,0x2d,0x07 +.byte 0xe5,0x2e,0xb7,0x74,0xda,0x94,0xea,0x32,0x74,0xb0,0xca,0xf4,0xd1,0x09,0x97,0x3c,0x69,0x17,0xf6,0x5b,0x13,0x7b,0xb8,0xb1,0xd9,0x0e,0x12,0x44,0x29,0xea,0x26,0xd8,0xaa,0x9d,0x26,0x87,0x0c,0x89,0x4e,0xec,0x29,0x48,0x43,0x66,0x21,0x0b,0xab,0xce,0x40,0x57,0x4c,0xa7,0xdd,0x56,0xde,0xac,0x5c,0x62,0xea,0xc4,0x54,0x4a,0xe0,0x8d +.byte 0x54,0xc8,0x65,0x44,0xcc,0x6f,0x2a,0xcd,0x0e,0xb3,0xad,0xa3,0x30,0xd1,0xb7,0x19,0x70,0x51,0xd3,0x9a,0xcf,0xe5,0x42,0x6c,0xa1,0xc1,0x0f,0xe2,0xda,0x86,0xb4,0x51,0x50,0x62,0xdc,0x51,0x3f,0xd2,0xff,0xde,0x7f,0x38,0x5a,0xff,0x2d,0x21,0x1d,0x59,0xb9,0xdd,0xde,0x83,0x13,0xb0,0x25,0xf5,0xbb,0x11,0x47,0x4a,0xaf,0x81,0x15,0xa0 +.byte 0x39,0x5b,0x30,0x17,0x2b,0xbf,0x5a,0x03,0x60,0xb6,0xbb,0x86,0x9f,0x50,0x45,0x15,0x0b,0xba,0x42,0xf4,0x3d,0x05,0x62,0xcd,0x9b,0x8c,0xcf,0x93,0x5c,0x33,0x6c,0xea,0x4b,0xd0,0x1d,0x91,0x3e,0xbf,0xa4,0x9d,0x7c,0x2c,0x87,0x9c,0x42,0x9f,0x03,0x98,0x03,0x1b,0x98,0x66,0x4f,0x8f,0x29,0x12,0xc5,0xb5,0xec,0x81,0xf8,0xb2,0x5e,0x44 +.byte 0x4f,0xb0,0x31,0xe4,0x2a,0x73,0x83,0xac,0x5a,0x3f,0xfa,0xcf,0x8b,0x7c,0xa3,0xf1,0x01,0x14,0xa1,0xca,0x60,0x8d,0x6a,0x6c,0x04,0x31,0xcc,0xba,0x12,0xe0,0x4e,0xaf,0x01,0x8d,0xf5,0x60,0x23,0x79,0x8a,0x80,0xcc,0x32,0x31,0x69,0x83,0xb6,0x83,0xaa,0xd9,0x3b,0x86,0x4a,0xd8,0x10,0x28,0x09,0x82,0x36,0xee,0x6a,0xc0,0x80,0x3f,0xfd +.byte 0xb1,0xd2,0xde,0x34,0xf9,0x4c,0x87,0x5b,0xdd,0xd0,0xb6,0x2d,0x99,0x69,0xd3,0x2c,0xb7,0x0b,0xfc,0x16,0x88,0x7b,0x80,0x21,0xbc,0x30,0x7b,0x56,0xe5,0x7b,0x41,0x43,0x4d,0xaf,0x40,0x5e,0x74,0x14,0x17,0x66,0x32,0xd6,0x81,0x53,0x94,0x35,0xf0,0x0f,0x4f,0x99,0x54,0x9a,0x38,0xc0,0x2a,0xa9,0xd3,0x53,0xdd,0x9a,0xc5,0x29,0x18,0x62 +.byte 0xf6,0x93,0xa3,0x02,0xf0,0x13,0xcb,0xcb,0xcc,0x64,0x0b,0x00,0xf4,0x43,0x03,0x26,0xe6,0x2f,0x39,0xa1,0x83,0xea,0x94,0x2f,0xde,0x61,0xbd,0xe1,0xbe,0x08,0xf8,0xd4,0x01,0x6e,0x61,0x98,0x01,0x39,0x4b,0x93,0x39,0x38,0x34,0x58,0x24,0xc1,0xf5,0x03,0x05,0x15,0x9c,0xf0,0x30,0x20,0x24,0xd4,0x7e,0x73,0xb2,0x60,0x06,0x3b,0xd3,0xb7 +.byte 0x2c,0x47,0x17,0xc4,0x79,0x4e,0x45,0x0b,0x89,0xf0,0xfc,0x42,0xa0,0x0d,0x80,0xd2,0x44,0x36,0x70,0xaa,0x9e,0x72,0x85,0xa8,0xc8,0x1d,0x35,0x28,0xc3,0x5a,0x72,0x4c,0x06,0x6d,0xf4,0xae,0x54,0x86,0x9a,0x32,0x3c,0xa5,0x06,0x63,0xc1,0x37,0xbb,0xaf,0xa6,0xae,0xce,0x94,0xea,0x9c,0x4a,0x9e,0x56,0xb1,0xc3,0x84,0x84,0xef,0x3d,0xe9 +.byte 0x24,0xf4,0xbf,0xc3,0xf6,0x45,0x74,0x4e,0xbb,0x86,0xd3,0x7f,0xab,0x19,0xe3,0x63,0x67,0x81,0xb6,0x18,0xc8,0x78,0x8e,0xf8,0x83,0x5f,0xfb,0x2e,0x49,0x97,0x2b,0x34,0xbb,0x76,0x2e,0x93,0xec,0xe9,0x7f,0x4d,0x7e,0x52,0x0c,0x92,0xbc,0x6d,0x3a,0x34,0x9b,0x5e,0x61,0x6f,0xea,0x45,0xe7,0x5c,0x34,0x6b,0xcb,0xc0,0x31,0x61,0x64,0x9d +.byte 0xad,0x7f,0x98,0xca,0xfe,0x3d,0xad,0xf7,0x21,0xf6,0x4c,0x2a,0x21,0x07,0x80,0x25,0xa2,0xea,0x26,0x85,0xc3,0xb1,0x74,0x04,0x7f,0xd1,0x1c,0x1b,0xa5,0x7e,0x96,0x45,0xfe,0x6f,0xa6,0x34,0xdf,0x94,0x1f,0x7e,0xfb,0xcf,0xfd,0x29,0xeb,0x3a,0xb0,0xfc,0xb6,0xd5,0x80,0x8b,0x37,0x71,0xfb,0x70,0x19,0x30,0xc4,0x6f,0xa0,0x5b,0xae,0x5b +.byte 0x75,0x51,0x98,0x89,0x9e,0xf0,0xf5,0x79,0xaf,0x1c,0x07,0xb6,0x5e,0xcf,0x34,0x70,0x0f,0x0b,0xbc,0x0a,0xa6,0x40,0xc7,0xf8,0xe4,0xef,0xe6,0xb7,0x94,0x6e,0x98,0x75,0x22,0x73,0x5c,0xca,0xcc,0xfb,0x09,0x2f,0x9c,0xfe,0x49,0x0f,0xd3,0x65,0xfe,0xd4,0xf0,0x9b,0xeb,0x8c,0xd7,0x8c,0xff,0x4b,0x18,0x3e,0xf3,0x9d,0x3f,0xf5,0x83,0xd6 +.byte 0x1d,0x3d,0x23,0x79,0x0f,0xae,0x17,0x62,0x33,0x07,0xc3,0xac,0x98,0x07,0x72,0x9b,0xd9,0x26,0x5c,0x1a,0x9d,0xf1,0x35,0x92,0xf9,0x38,0x17,0xf8,0xee,0x26,0xf9,0x64,0xfc,0x5e,0x8b,0x80,0xce,0xdb,0x64,0xf7,0xde,0x20,0x19,0x5c,0x26,0xf6,0x23,0xd6,0x99,0x8e,0x75,0x77,0x3d,0x17,0x0f,0xea,0x31,0x5a,0x65,0x32,0x1b,0x78,0x78,0xe4 +.byte 0xfe,0x76,0xf8,0xa7,0x81,0x34,0xf1,0x2a,0x13,0x22,0xe4,0x8a,0xe1,0x42,0x5a,0x3f,0x44,0x22,0xeb,0x7e,0xcd,0x20,0xcd,0xf7,0x44,0x1a,0x87,0xb9,0x7a,0x0e,0xf8,0xcb,0xb5,0x0a,0x1f,0x6a,0xe6,0x0b,0x70,0x59,0x38,0xa3,0x6b,0x64,0x7b,0x61,0xfe,0xbd,0xa4,0xb7,0x89,0x7a,0x28,0x70,0xfe,0x9d,0x64,0x2c,0xe9,0xc4,0xc9,0x2f,0xc8,0x3e +.byte 0xfa,0x70,0xce,0x21,0x9b,0xa8,0x10,0x6a,0x16,0xdd,0x28,0xce,0x4e,0xd4,0x6c,0x8c,0x47,0x83,0x13,0x8b,0xec,0x1c,0x76,0xdc,0x4d,0x81,0x25,0x08,0xd8,0xf9,0xde,0x66,0x1d,0xe2,0xf3,0xe7,0xdc,0x3e,0x3c,0x6b,0x98,0x25,0x55,0x88,0xe8,0xda,0x7f,0x16,0xe5,0x7d,0xad,0x8a,0x36,0x00,0xf0,0x68,0xc5,0xe4,0xfc,0xe9,0xe3,0x54,0xeb,0x4c +.byte 0xd1,0xff,0x07,0x1a,0x5c,0x5e,0xd4,0xb1,0xff,0x7d,0xfc,0x5b,0x34,0x42,0x95,0x89,0x01,0x24,0x8e,0x30,0xec,0xfe,0x67,0xf8,0xe2,0xaa,0xd5,0x6a,0x9f,0xe3,0xc3,0xa5,0x53,0x7f,0xd3,0xf4,0x98,0xa5,0x47,0x11,0xad,0xac,0xea,0xba,0x20,0x34,0x03,0x65,0x8c,0xec,0xb6,0xa3,0x2b,0xf6,0x93,0xe1,0xc8,0xad,0x34,0x30,0x8f,0x0e,0x3b,0xf6 +.byte 0x63,0xc6,0x58,0xc3,0xe8,0xa3,0x85,0xf8,0x24,0x8e,0x21,0xb9,0x36,0x7c,0xe0,0x11,0x64,0x31,0x6a,0x6a,0xa2,0xad,0xd3,0x94,0xbb,0x13,0x5b,0xb4,0xe9,0xee,0x09,0xdc,0xfe,0xb2,0xad,0xa8,0x43,0x02,0xba,0x85,0x1f,0x56,0xcb,0xb5,0x95,0x32,0xcc,0x7e,0xe0,0x00,0xde,0xfa,0x3f,0x91,0x71,0xde,0x21,0x19,0xff,0xc9,0x97,0x43,0x95,0xd8 +.byte 0x0d,0xc2,0x8a,0xde,0xcc,0x34,0x48,0xf4,0x35,0x41,0xb8,0x56,0x52,0xce,0x06,0xb3,0xcf,0xd4,0xae,0x7a,0xcb,0xe9,0xed,0x37,0xd6,0x76,0xa0,0x77,0x04,0xfb,0xb7,0x41,0x25,0x38,0xe1,0xd1,0xb5,0xde,0x21,0xe0,0x64,0xd8,0x83,0x13,0x7b,0x4b,0xb8,0xc9,0x12,0x02,0x51,0x56,0x52,0xe9,0x1c,0x49,0x48,0x83,0xd0,0x99,0x73,0x60,0x4a,0x4c +.byte 0x7d,0x8d,0x43,0xf9,0x06,0xa4,0xbb,0x0e,0xb6,0xdd,0x5f,0xc7,0x5e,0x35,0xcb,0xa0,0xc1,0x66,0x4a,0xe3,0x4a,0xa9,0xec,0xa4,0x5a,0xd7,0xd6,0xea,0xa5,0x20,0xa6,0xc3,0x1b,0xc0,0xa8,0xd1,0xf1,0x08,0x05,0xab,0x40,0x14,0x35,0xf2,0xdd,0x0f,0xc5,0xda,0xb3,0xa6,0xb1,0x07,0x36,0x17,0x5d,0xe9,0x96,0x23,0x96,0x46,0xd4,0xa7,0x71,0x64 +.byte 0x13,0x72,0x4e,0x83,0xe0,0x65,0x40,0x41,0xaf,0xb6,0x5b,0x00,0xa2,0xab,0x09,0x7f,0xa5,0xd5,0xc2,0xd9,0xc0,0x68,0x2a,0x44,0xdc,0x43,0x37,0x81,0xb8,0x88,0x4c,0x85,0x1b,0xb1,0x83,0xb2,0x56,0xa3,0x91,0x0f,0xa6,0x70,0x3f,0xbd,0xe9,0xda,0x40,0x9b,0xf5,0x9e,0x53,0xed,0x5f,0x84,0x70,0xd2,0x4c,0x1c,0xb6,0x87,0xd6,0xbb,0x3b,0xec +.byte 0xe5,0x35,0x1b,0x2c,0x9b,0xf1,0xe5,0xf8,0x0e,0x07,0x98,0xcc,0x58,0x38,0x57,0x74,0xdb,0x0e,0x08,0xd9,0x56,0xe8,0x08,0x63,0x3d,0x94,0x4a,0xdc,0x59,0xfc,0x3d,0xc1,0xa4,0x36,0xc3,0xe8,0xbe,0x4b,0xd7,0x47,0x69,0x33,0xb8,0x72,0x30,0x59,0x28,0x4e,0xf1,0xc1,0x25,0xa3,0xa4,0xe3,0x12,0xcf,0x31,0xf6,0xf8,0xae,0x31,0x06,0x76,0x92 +.byte 0x64,0x87,0x8e,0xb0,0x9f,0x1d,0xf4,0x56,0x73,0xc5,0x5d,0xbb,0x80,0x0d,0x19,0x3f,0x56,0x8c,0xe4,0xd6,0x8a,0x9a,0x62,0x26,0x4e,0x8a,0x21,0x7d,0x72,0x34,0x87,0xb6,0x7e,0x49,0xdc,0xfd,0x27,0x95,0xba,0x25,0xdd,0xf4,0x58,0x2b,0x11,0x3f,0xd1,0xd7,0x13,0x1d,0xb0,0xec,0xe2,0x55,0x5e,0x72,0xea,0x36,0xc9,0xd8,0x61,0xc0,0xee,0xc4 +.byte 0x9f,0x35,0x7e,0x73,0xd3,0xf6,0xd7,0x6a,0xce,0xd6,0xd2,0x80,0xe6,0x10,0x4b,0x65,0x18,0x6f,0xab,0xd3,0x41,0xbb,0x39,0x36,0x95,0x84,0x3c,0x99,0x9a,0xfd,0xf0,0xa3,0x46,0xdf,0x48,0x7c,0xd5,0x57,0x9d,0x10,0x59,0xca,0x70,0xc4,0xb5,0xbe,0x47,0x9e,0xca,0x2b,0x49,0x54,0xbb,0x34,0x8e,0x39,0xf4,0xf8,0x8c,0xa5,0xa1,0xab,0xf6,0x51 +.byte 0xd8,0x22,0x9a,0xd5,0xc2,0x12,0xf8,0x26,0xc6,0x19,0x2a,0xa6,0x6e,0xab,0xd3,0xac,0xd1,0x21,0x97,0x67,0x3e,0x39,0x90,0x5c,0x37,0x65,0x7b,0x06,0x54,0x1a,0xb8,0x2a,0x56,0x02,0xa3,0x92,0xee,0xf3,0x38,0x53,0x25,0x4d,0x5d,0x0a,0x37,0x9e,0xbb,0xf4,0xb2,0x13,0x77,0xbb,0x93,0xa9,0x85,0xf2,0x15,0xfd,0x71,0x17,0x00,0x89,0xe7,0x7b +.byte 0xa9,0xdc,0x10,0xd9,0xc7,0x44,0xa5,0x7b,0x3f,0x2f,0x1e,0x6d,0xa7,0xfe,0x0c,0x0e,0x83,0x3e,0x38,0x27,0xa7,0x4e,0x85,0x3c,0x84,0xfe,0x95,0x48,0x85,0x09,0x75,0x62,0x1d,0xa4,0x64,0x54,0xed,0x89,0xd5,0x28,0x62,0x52,0x18,0xef,0xf0,0x57,0x05,0x30,0xf0,0xce,0x87,0x05,0x0d,0x81,0xe8,0x2a,0x3c,0x8c,0x22,0xe1,0x4b,0x32,0x42,0x9d +.byte 0x02,0xc5,0xe4,0x6a,0xa4,0x4d,0x9b,0xc4,0x82,0x47,0xdc,0x61,0xbd,0x82,0x01,0xcd,0x5e,0x64,0x9f,0x4c,0xe3,0x31,0xe9,0x48,0x53,0x85,0x07,0xc7,0x47,0x49,0x35,0xd8,0x6a,0xab,0x4f,0x73,0x3f,0xd3,0xde,0x87,0x29,0xac,0xbc,0x35,0x0a,0xb4,0x74,0xc2,0xa7,0x0b,0xb1,0x93,0x92,0x29,0x3b,0x3e,0xa8,0xde,0x12,0x49,0x75,0xda,0x16,0x27 +.byte 0x52,0x2f,0x93,0x23,0xd6,0xf7,0x10,0xfe,0x1e,0x93,0x97,0x06,0x9d,0xef,0x4f,0xe4,0x3d,0x5d,0xde,0x30,0x70,0x3d,0x78,0x3a,0x30,0x00,0x9b,0x77,0x12,0x90,0x62,0xda,0x32,0x9b,0x6a,0x47,0xd7,0x0f,0xee,0x75,0x18,0xdd,0x4d,0x8a,0xe2,0x35,0x5b,0x60,0xb8,0xf9,0xa4,0x6c,0x93,0x3e,0x47,0x23,0xed,0x7a,0xe2,0x58,0x42,0xd6,0x3f,0x90 +.byte 0xc0,0x12,0x38,0x8b,0x70,0xe0,0xf8,0x1a,0xb5,0x8d,0xe1,0x39,0xdf,0x93,0x25,0x72,0x2e,0xa9,0x3f,0x58,0x12,0x40,0xc4,0x92,0x46,0x08,0xf0,0x64,0xdd,0x34,0x42,0xfe,0x74,0x35,0x0c,0xda,0xef,0x06,0x0b,0x33,0x59,0xd9,0xee,0x4c,0xf9,0x02,0x3a,0x93,0x40,0xa3,0x99,0x0e,0x64,0x11,0x2f,0x52,0x9d,0x28,0x4d,0xe8,0x45,0xd0,0x22,0xd7 +.byte 0x8f,0xd6,0x28,0x8c,0x0e,0x18,0x87,0x24,0xf9,0x88,0xd2,0xc0,0xe8,0xd4,0x9d,0xa2,0x5a,0x79,0x83,0x37,0x18,0x84,0x12,0xca,0xc7,0x10,0xd5,0x5a,0xa8,0xe5,0xa8,0xe7,0x79,0xb6,0x2c,0xb3,0x90,0x6c,0xc5,0xa4,0x99,0x1b,0x85,0x29,0x78,0x0b,0x09,0x77,0x05,0xf4,0x23,0x79,0x5c,0x91,0xf3,0xe0,0xe4,0x6f,0x82,0x33,0x4e,0xa2,0x2e,0xa2 +.byte 0x65,0x79,0xad,0x98,0x36,0x34,0x72,0x97,0xd7,0x39,0x89,0x5e,0x82,0x9f,0x4c,0xe2,0xea,0x51,0x85,0x62,0x0c,0x39,0xf6,0xdc,0xc6,0x80,0x48,0xcf,0x98,0x93,0x64,0x7d,0xf9,0x63,0xf4,0xf5,0x18,0x2a,0xb6,0x04,0xb7,0x44,0xc4,0x60,0xc0,0xcf,0x3d,0x88,0xa8,0xb6,0x81,0xa3,0x99,0x2a,0xf0,0x1a,0x8d,0x76,0x20,0x1d,0xcc,0x10,0x50,0x58 +.byte 0x09,0xf9,0xda,0x65,0x60,0xc3,0xb1,0xc1,0xc0,0x4d,0x62,0x52,0x22,0x45,0x32,0xbc,0x11,0x93,0x15,0xb6,0x25,0x8f,0x65,0xa0,0x4c,0x88,0xc9,0x83,0xe1,0x5c,0xbb,0xfb,0x1a,0xab,0xdb,0x35,0x40,0x66,0xc0,0x2f,0xdc,0xf5,0x92,0x08,0x4c,0xc7,0xb8,0x49,0x05,0xe0,0xe1,0x61,0x2b,0xde,0xc7,0x6a,0x04,0x05,0x4d,0x9f,0xe9,0x59,0x22,0x56 +.byte 0x63,0x77,0x9d,0xe3,0x1e,0x36,0xdf,0x87,0x4a,0xeb,0xba,0x42,0x3d,0x1b,0xa5,0xd0,0xc5,0x44,0x07,0xbe,0x37,0x37,0x70,0x10,0x2d,0x02,0x9b,0xf6,0x52,0xf3,0x54,0x6d,0x50,0xdb,0xdb,0x57,0x01,0x0b,0x9b,0xd5,0x99,0x99,0x69,0x9b,0x10,0x76,0x48,0xea,0x28,0x27,0x06,0x30,0x63,0x3b,0xdf,0x06,0x30,0x37,0x28,0x75,0xcf,0x9c,0xe7,0x52 +.byte 0x43,0xe2,0xd5,0x7b,0xfa,0x88,0x98,0x9c,0x3e,0x27,0x30,0x21,0xcc,0x11,0x71,0x14,0x24,0x04,0x1a,0x8c,0xe9,0xfe,0x2f,0x9d,0xec,0xb1,0x10,0x33,0x05,0x31,0x01,0x1b,0xde,0x6b,0x30,0x20,0x6d,0xf4,0x7c,0xbf,0x41,0x04,0x5f,0xb9,0x9c,0x24,0x63,0x74,0x98,0x3e,0x60,0xc7,0xf1,0xb1,0xc6,0x94,0xf3,0x6f,0x95,0x24,0xdf,0x97,0xd5,0xc7 +.byte 0x50,0x19,0xaf,0xa5,0xae,0x51,0xde,0x6d,0x44,0x0c,0x90,0x72,0x11,0x82,0x04,0xf9,0xda,0x17,0xd8,0xf3,0x03,0xf2,0x03,0x3f,0x65,0x7f,0xd7,0x66,0x84,0x9a,0x02,0x90,0x2b,0x65,0x00,0xd9,0x9c,0xfb,0xaa,0xe2,0xde,0x5f,0x1e,0x19,0x1e,0x6d,0x20,0x1e,0x01,0xf1,0xca,0x7b,0x90,0x06,0x96,0x1d,0x7a,0x34,0x0c,0x66,0x57,0xd7,0x61,0x1f +.byte 0x74,0x03,0xcb,0xae,0xea,0xaf,0x65,0x8e,0x32,0xbe,0xb8,0xe6,0xd8,0x6d,0xf7,0x51,0x6d,0xec,0x7e,0xc6,0x9d,0x20,0x01,0xbf,0xd7,0xbc,0xcb,0x34,0x7c,0xe5,0x1f,0x92,0x72,0x2f,0x6f,0xa3,0x1f,0xe8,0x4d,0x7e,0xa5,0x85,0x3b,0xed,0xc7,0x25,0x53,0xe3,0x77,0x90,0x1f,0xda,0xb7,0x48,0x7d,0xbe,0x20,0x48,0x9f,0xb4,0x05,0x5d,0x41,0xc5 +.byte 0x48,0xd0,0xc9,0x83,0xbe,0xf8,0xd8,0x6b,0x0d,0x26,0x66,0x2e,0xef,0x6b,0x13,0x58,0x6b,0x5f,0x0e,0x8b,0x4e,0x57,0xb2,0x6b,0x3d,0x4d,0xcd,0xcb,0x9a,0x9b,0xda,0x4d,0x7f,0xea,0x17,0x06,0x7f,0xcd,0xaf,0x18,0xda,0x3d,0xf0,0x30,0x2e,0xbb,0xc2,0x1d,0xcf,0xde,0xf7,0xee,0xda,0xd6,0x3d,0x75,0xcf,0x19,0xcf,0xfc,0xdf,0x7a,0xb6,0x1f +.byte 0x89,0xf5,0x0c,0xe9,0xd5,0xf1,0xd0,0x40,0xbd,0xae,0xb5,0x16,0xf6,0x05,0x1e,0xba,0xcd,0x18,0x80,0x4a,0xb3,0x87,0x93,0x6b,0x19,0xfc,0x47,0xa8,0x45,0x4b,0x75,0xe8,0x06,0xc0,0xbd,0x86,0xf7,0xcf,0x2c,0x39,0xc6,0x0b,0x3f,0x32,0xcd,0x1c,0x02,0xec,0x4b,0xd5,0x90,0x84,0xaf,0xc9,0x5c,0x9e,0x64,0x82,0x13,0x81,0x05,0x03,0xe4,0xed +.byte 0x48,0x23,0xc3,0x53,0x2c,0x5a,0x22,0x0a,0x27,0x7e,0x55,0x79,0xdc,0x46,0xf5,0x4b,0x04,0xcc,0x43,0x87,0x6c,0xb5,0xa4,0x2d,0x78,0x70,0x02,0x43,0x0e,0x76,0x62,0x99,0x86,0x40,0x2a,0xe4,0x62,0xe6,0xee,0x4e,0x03,0x64,0x83,0x9c,0x38,0x6d,0x62,0xa6,0x85,0xb8,0xce,0xd7,0xf8,0xcb,0x78,0x00,0x7a,0x48,0x72,0x75,0x4e,0x9c,0x6f,0x0c +.byte 0x61,0xc7,0x93,0x4e,0x6d,0x65,0xa3,0x1b,0x17,0x84,0xc6,0xd2,0x29,0xc3,0x4d,0xe3,0x14,0x21,0x5f,0x9e,0xa9,0x28,0x11,0xf3,0xb2,0xe8,0xe7,0x60,0x9e,0x24,0xab,0x88,0x9c,0x9c,0x5e,0x17,0xe4,0xe1,0xa7,0x74,0xb4,0x82,0xd5,0xaa,0x92,0x08,0xa7,0xa2,0x04,0x6f,0x77,0x14,0x54,0x44,0x5d,0x13,0x10,0xa2,0x40,0x1d,0xf0,0x44,0x16,0x17 +.byte 0xda,0x8c,0x80,0x83,0x2b,0x19,0xb8,0xab,0xf2,0xb8,0xb1,0x92,0xb5,0xc5,0x05,0x3e,0xd2,0x1a,0xfc,0xfd,0x21,0xa6,0xb2,0xbd,0x89,0xee,0x9c,0x3c,0x90,0xd9,0xf1,0xd2,0xe8,0xc3,0x21,0xb9,0x0e,0x0c,0x98,0xbc,0x5e,0xa1,0x0d,0x89,0xfe,0x0f,0x3c,0x45,0xea,0xe1,0x6e,0x06,0x59,0xff,0x79,0xf4,0x7e,0xf4,0x82,0xc0,0x6b,0xd9,0x53,0x30 +.byte 0x98,0xed,0x8d,0x6f,0x3d,0x0e,0xfb,0x42,0x66,0xab,0x41,0xa8,0x4a,0xef,0x73,0xa4,0x54,0x99,0x4f,0xb6,0x65,0x44,0xf9,0xd9,0x3c,0x6b,0x59,0x36,0xb0,0xe3,0x7c,0x4a,0x85,0x80,0x6c,0x77,0x6f,0x34,0x4e,0x9e,0x54,0xfd,0x0c,0x25,0x72,0xc3,0x5a,0xb6,0x3b,0xad,0x2b,0xd5,0x29,0x55,0x31,0xab,0x62,0xe4,0x15,0xed,0xef,0x16,0xef,0x43 +.byte 0xd5,0xdd,0x3d,0x64,0x8c,0x13,0xbc,0xcd,0x4d,0xfb,0x4f,0x86,0x3b,0x73,0x1e,0xc4,0xe8,0x54,0xb4,0xcc,0x49,0xba,0x4f,0x81,0xcd,0xe8,0x30,0x92,0x4b,0x57,0xd1,0x7c,0x0c,0x65,0x7d,0xe1,0x59,0xc6,0x8c,0x7d,0xad,0xd5,0xcf,0x6c,0xc4,0x9d,0xc5,0x3f,0x23,0x1f,0xb0,0x6d,0x1c,0x07,0xbf,0x38,0xc9,0x16,0xdc,0x5b,0x51,0xa1,0xdb,0x8f +.byte 0xf8,0x25,0xc6,0x4d,0xc0,0x4d,0xa1,0x02,0xd9,0xd3,0xb5,0x63,0xda,0xe1,0x91,0x60,0x71,0x39,0x46,0x1a,0x13,0xe0,0xf2,0xca,0xcc,0xd3,0xbb,0x6b,0xd0,0x64,0xaa,0x0e,0xc0,0x89,0xa3,0xc6,0x14,0x56,0xe4,0x44,0x97,0xa9,0xcc,0x17,0x68,0xe6,0xfc,0xe5,0xfd,0xf0,0xa6,0x69,0xcd,0xac,0x20,0xc7,0xeb,0x53,0x1b,0x4f,0xdd,0xd3,0xb0,0xed +.byte 0x30,0x4e,0x36,0x73,0x63,0xef,0x51,0x3e,0x9a,0x3e,0x41,0x2b,0x9c,0xda,0x67,0x96,0x46,0x33,0xe3,0x3f,0x87,0x01,0xd8,0xc5,0x26,0x80,0xe4,0x7e,0xf4,0x78,0x8c,0x2b,0x81,0x2a,0x01,0x7c,0xe3,0xfc,0x8d,0x6b,0xdc,0x84,0xb9,0xff,0x43,0x37,0x57,0xce,0x3f,0x5e,0x63,0xd3,0xbe,0xb6,0x4a,0x31,0xbf,0xb8,0x74,0x64,0x9c,0xf3,0xc5,0x8a +.byte 0xae,0xe8,0x5f,0x68,0xcf,0xce,0xff,0x3f,0xc5,0xb5,0xfd,0x13,0x08,0x11,0x9d,0x1a,0x0f,0x06,0x08,0x4d,0x7c,0xf9,0xd4,0x20,0xdf,0x82,0xf9,0x86,0xfc,0xf3,0x67,0xa0,0x14,0x99,0xe5,0x47,0xf0,0x02,0x7b,0x16,0xca,0xcf,0xb9,0x0f,0x68,0x08,0x5d,0x1d,0x65,0xee,0x23,0x56,0xeb,0x11,0x5b,0xca,0xf1,0xa7,0xad,0x50,0xb2,0xd1,0x37,0x65 +.byte 0xe9,0x7e,0xf6,0xe9,0x64,0x42,0x49,0x80,0x40,0x17,0xe3,0x43,0x00,0xda,0xe1,0x7a,0x1c,0xb3,0xde,0xd9,0xf7,0x33,0xeb,0xb3,0xb8,0xf5,0x40,0x1b,0xcd,0x71,0x97,0x30,0xf9,0x9c,0x4d,0xac,0x7e,0x8e,0xd9,0x36,0x92,0x39,0xb5,0x56,0x0f,0x4f,0xbf,0x58,0xb8,0xba,0xc3,0xbd,0x79,0xb0,0xd7,0x6c,0x45,0x49,0xe2,0xde,0x94,0x04,0x9d,0x3e +.byte 0x91,0x0a,0xb2,0x9b,0x90,0x57,0x2e,0x69,0xa4,0x4f,0x61,0xbf,0xdb,0xfb,0xe3,0xe9,0x81,0x26,0xe0,0x48,0x90,0x8c,0x32,0x95,0x8d,0x38,0xec,0x8e,0xa7,0x5e,0xc3,0x36,0xc6,0xd1,0xbc,0x9a,0xb3,0xba,0xdb,0x2c,0xe4,0xa0,0x50,0x74,0xef,0x98,0x48,0x14,0xc9,0x38,0x4d,0xa9,0x48,0x13,0xd4,0x08,0x60,0xfd,0xcf,0x5e,0xf2,0xcd,0xc7,0xeb +.byte 0xaf,0x88,0x32,0x30,0x6f,0x19,0x01,0xec,0x87,0xae,0x6d,0x63,0xa3,0xa7,0x7b,0xcd,0x53,0xa7,0xf2,0xf2,0x9f,0x43,0xcb,0x0a,0x3f,0x8c,0xd2,0x55,0x8d,0xa7,0x95,0xcf,0x5b,0xae,0x64,0x23,0xda,0xb4,0xbd,0x32,0x34,0x95,0x8a,0x03,0xe7,0x6e,0xef,0x3f,0xb4,0xcf,0xc6,0x8a,0x2f,0xc6,0x59,0x99,0xdf,0xad,0x3c,0x15,0xed,0x83,0x0b,0x59 +.byte 0x8b,0xcd,0x0d,0xa6,0xcf,0x3a,0xc3,0xdb,0xc3,0x01,0xa9,0x32,0x38,0x45,0x5c,0xc8,0x56,0x81,0xef,0x21,0x7f,0x52,0xc4,0xb5,0x48,0x97,0x6a,0x60,0x75,0x3a,0x1a,0xd3,0xb0,0x60,0x9a,0x83,0x61,0xad,0x3b,0x4b,0x65,0xaa,0x9e,0x77,0x47,0x6f,0x3b,0x48,0xb0,0xc6,0x36,0x9a,0x59,0x5e,0x26,0xc4,0xb9,0xed,0x04,0xf3,0xc7,0x09,0x33,0xda +.byte 0x81,0x63,0xa6,0x5d,0xe1,0x54,0x6b,0x04,0x17,0x2b,0xb9,0x2f,0xbd,0x55,0xdb,0xa1,0x69,0x00,0xcd,0xba,0xfa,0x36,0xaa,0x47,0x5a,0x7c,0xf4,0x1f,0x53,0x94,0x95,0x2f,0xf8,0x2a,0x4b,0xa8,0xcc,0x73,0xab,0xfd,0x25,0xb2,0x4e,0xd6,0x62,0x90,0x8c,0x8f,0x02,0xe4,0xdc,0x22,0x79,0x04,0x34,0x9b,0x54,0x5c,0x54,0xca,0x9b,0x8a,0xf8,0x05 +.byte 0xd1,0xb0,0x9e,0x8f,0xa3,0x0b,0x53,0xa8,0x6f,0x1b,0x2e,0xf2,0x71,0x78,0x28,0xce,0xa9,0xdb,0x4c,0x5b,0x83,0xfe,0xaa,0xff,0x99,0x2f,0x03,0x14,0xb2,0xe0,0x5f,0xaa,0x65,0x15,0x1f,0xd2,0x31,0x95,0x70,0x3c,0x8b,0x55,0x8e,0x87,0xed,0xbb,0x0c,0x91,0x87,0xaa,0xbe,0x49,0xdb,0x18,0x7b,0x1d,0x26,0xa7,0xdf,0x00,0xff,0x73,0x70,0x2e +.byte 0x10,0xaf,0x46,0xea,0x7f,0xca,0xfa,0x09,0x13,0x02,0xac,0x3f,0xa0,0x02,0xa6,0x67,0xb7,0xec,0x18,0x73,0x91,0x25,0xa0,0x28,0xe3,0xd8,0xfa,0x11,0x6d,0x34,0x79,0x1d,0xe4,0x8f,0x7c,0x73,0x66,0x77,0x3e,0x43,0x23,0xb0,0xee,0x84,0xb5,0x75,0xc9,0x23,0x87,0x6a,0x4f,0x59,0x3d,0xb5,0xf1,0xd6,0x06,0xf8,0xa6,0x5d,0x0c,0x24,0xed,0x94 +.byte 0xd7,0xa8,0x31,0x37,0x10,0x60,0xb6,0x03,0x33,0x27,0x38,0xdd,0xd3,0x74,0x02,0xa3,0xa6,0x01,0x94,0xa9,0x56,0x11,0x23,0x0e,0xdb,0xfd,0x25,0x92,0xa8,0xfb,0x79,0xc8,0x8e,0x0e,0x10,0x1f,0xca,0x95,0xf6,0xad,0x28,0xe7,0xaa,0x2b,0xf1,0x40,0xf6,0xef,0x7b,0x40,0x28,0x57,0xbb,0x4c,0xac,0x0b,0x8b,0xb3,0xe3,0xec,0x53,0xf2,0x15,0x61 +.byte 0x2e,0x91,0xdf,0x91,0xfb,0x55,0xb6,0x7f,0x6c,0xfc,0xb7,0x4b,0x91,0xdc,0xf7,0xe5,0x91,0xd8,0x70,0x92,0x94,0xea,0x3f,0x62,0x98,0x14,0xc3,0x43,0x34,0x02,0x87,0xc7,0xca,0x60,0x4a,0xfb,0x50,0xe4,0xa9,0x92,0x10,0x04,0x7c,0x55,0xd3,0x9a,0x89,0xba,0x8e,0x6f,0x02,0xd6,0xc7,0x6f,0x91,0xb5,0x87,0xb9,0x0e,0xbe,0xe4,0x9f,0x01,0x0b +.byte 0x20,0x60,0xc8,0x16,0xe6,0x23,0x1d,0x5f,0x4d,0x82,0xf4,0x42,0x25,0xe6,0x05,0xe3,0x5b,0xbb,0xd1,0xb0,0xad,0x0b,0x05,0x71,0x3a,0x7b,0xee,0x0e,0xe1,0xe4,0x08,0x9f,0xda,0xdf,0x59,0x57,0x4f,0x05,0x5a,0x51,0x9a,0x60,0xfd,0x85,0x21,0xd1,0x0a,0x3b,0x0a,0x15,0x61,0x28,0x98,0x0a,0x8f,0x1e,0x33,0x15,0xb3,0x5f,0xf3,0xbb,0x89,0x22 +.byte 0x0c,0xaf,0x91,0xce,0x44,0xb1,0x54,0xd0,0x80,0x86,0x43,0xa1,0xb9,0x07,0xde,0xab,0x1f,0x9b,0xae,0xef,0x07,0xf2,0x40,0x33,0x31,0x4d,0xf9,0x45,0x97,0xf6,0xcc,0xe5,0x3c,0x49,0xcd,0x83,0x6e,0x38,0x81,0xab,0x40,0x18,0xda,0xf6,0xfe,0xe7,0x96,0xd1,0x17,0x98,0xae,0xec,0xe9,0x93,0x37,0xbc,0x0b,0xa8,0x12,0xe7,0x65,0xca,0x27,0x37 +.byte 0x6a,0x74,0x81,0xf1,0xe0,0x6c,0x0d,0xba,0x86,0x48,0x94,0xd0,0x72,0xd5,0x4d,0x71,0xcf,0xa8,0x5e,0xd1,0x97,0xd1,0xed,0xf0,0xd3,0xe4,0xe3,0x41,0xc9,0x8f,0xfc,0x89,0xe8,0xbf,0x96,0x8b,0x86,0xb0,0x97,0x79,0x95,0xdf,0x69,0x56,0x6d,0x61,0x0a,0x37,0xcb,0x36,0xe1,0x95,0x88,0xf5,0xf0,0xe2,0x5c,0xb2,0x44,0x73,0xda,0x83,0xa7,0xdc +.byte 0x8b,0x35,0x3e,0xc1,0xd5,0x88,0x17,0x3b,0xeb,0xcf,0x36,0x9c,0xef,0x40,0xb2,0x72,0xde,0x4f,0x16,0x6c,0x8c,0x9d,0x15,0xce,0x7d,0x0d,0xc3,0x2f,0xea,0xab,0x50,0xdf,0x02,0xe0,0x24,0xcc,0xf4,0xa7,0x25,0xba,0x85,0x0d,0x62,0x9a,0x39,0xc7,0x5a,0xd1,0x9a,0xd1,0xa7,0x45,0x5f,0xc2,0x44,0xf5,0xa9,0x8d,0xd8,0xbc,0xd3,0xc8,0x75,0x0d +.byte 0x06,0xc6,0x4b,0x24,0xc6,0xe5,0x72,0xf7,0xd5,0x87,0xca,0x3c,0xc0,0x1c,0x18,0xa9,0x40,0xc6,0x7b,0xe5,0x4c,0xe6,0xb7,0x01,0x57,0xc1,0xcf,0x63,0x83,0x58,0x63,0x47,0xcf,0xa4,0xd3,0xf6,0x1d,0x2c,0xbf,0x17,0xe6,0x0a,0x7b,0x2d,0xa9,0x34,0x23,0xfc,0x1f,0x06,0x31,0x47,0x7b,0x31,0x34,0x8c,0x3c,0x15,0x9b,0xac,0xfd,0x38,0xe6,0xa3 +.byte 0x9e,0xa7,0xdf,0xa6,0x37,0x61,0xfd,0x85,0xb8,0x2e,0x67,0x73,0x7f,0x60,0x12,0x8b,0x62,0xb0,0x38,0xd0,0xaa,0xc4,0xad,0x3b,0xa9,0x04,0x66,0xdd,0xbb,0x9c,0xb1,0x95,0xe1,0x9c,0x0a,0x72,0x80,0x12,0xaa,0xa8,0x0c,0x3f,0x90,0x20,0x33,0xb4,0x76,0xdd,0x26,0xfe,0x1e,0x8f,0x6a,0x2d,0xea,0x4a,0xdc,0x28,0x47,0x66,0x36,0x5b,0x50,0x60 +.byte 0x7e,0x3e,0x93,0xf3,0xe9,0x37,0x31,0x3b,0x43,0x46,0x85,0xb3,0xa9,0xb2,0x14,0x95,0x96,0x49,0xf9,0x2a,0xe7,0x9e,0x3a,0x3e,0xd8,0x12,0xf7,0xbc,0x43,0x8c,0x35,0x31,0x44,0x08,0x7f,0x25,0x39,0x86,0x98,0x6a,0xe8,0xe3,0x2e,0x73,0x2d,0x3b,0xac,0x2d,0x75,0x4c,0xc8,0xca,0x21,0x2d,0x96,0x9b,0x4f,0x56,0xff,0x2d,0xc2,0xe2,0x98,0x3d +.byte 0xe2,0x3f,0xee,0x10,0xb7,0xc3,0x3d,0xa8,0x50,0x88,0x7f,0xd5,0x4e,0xbd,0xc7,0x9d,0xdc,0x01,0x49,0x27,0xf2,0xae,0xea,0x93,0x72,0xdf,0x00,0xcd,0xe6,0xa1,0xdd,0xd1,0x18,0xeb,0xa7,0xe1,0x4a,0x7b,0x38,0x72,0x73,0x29,0x46,0xa3,0xb3,0x25,0x23,0x6d,0x26,0xab,0x86,0xdc,0x67,0x52,0xe5,0x4a,0x5e,0x8f,0x16,0x67,0x8a,0x28,0x13,0xba +.byte 0x44,0x42,0xb5,0x21,0x9f,0x30,0x66,0x7f,0xc9,0x87,0x40,0xcb,0x75,0x58,0x2e,0xcd,0x09,0xb9,0x8a,0x84,0xa3,0xbd,0x63,0x53,0x75,0x2f,0x77,0x8b,0x7e,0x19,0x31,0x33,0x3b,0x9a,0xfb,0x86,0x39,0xa6,0xd9,0xeb,0x9b,0x43,0xc6,0xd9,0xc2,0x10,0xab,0x42,0xe5,0xc6,0x4a,0xe6,0x3e,0xde,0x9d,0xac,0x8e,0x95,0xf0,0xdb,0x48,0x95,0xc2,0x87 +.byte 0x6b,0x7f,0xde,0x09,0xdb,0xed,0x49,0x19,0x73,0x2d,0xa4,0x5c,0xdf,0xfa,0x2e,0x15,0xd0,0xb6,0x46,0x32,0xc9,0x7f,0x7e,0x01,0xd3,0x25,0x45,0x0e,0x5b,0x0d,0xf0,0x67,0xe3,0xd9,0xdf,0x4f,0x3b,0x6f,0xb3,0x15,0xc5,0x6b,0x91,0x75,0xa2,0xaf,0x42,0x3a,0x14,0x50,0xd9,0x4f,0x19,0x65,0x12,0x83,0x5d,0x8f,0x8a,0x01,0x0b,0x89,0xcc,0x7f +.byte 0x1a,0xde,0x5b,0x44,0x34,0x98,0x0f,0x8e,0x5a,0x5e,0x03,0x41,0x3e,0x66,0x9b,0x16,0xf5,0x91,0x7c,0xb0,0xc1,0xbf,0xa2,0x10,0x0b,0x60,0x3a,0x63,0x0c,0xcf,0xd8,0x49,0xdb,0x42,0x88,0x1f,0x36,0x8e,0x15,0xdb,0x5d,0x3f,0xe7,0xf1,0x9a,0x73,0x2b,0x74,0x0c,0xd5,0x09,0xab,0x01,0x2e,0x52,0x6f,0x03,0xf6,0xc9,0x0b,0xeb,0xa5,0xce,0x2e +.byte 0x1c,0x02,0x35,0xca,0xce,0xfe,0x4b,0xad,0x67,0x21,0xf8,0x44,0xea,0x70,0xf2,0x3d,0xfc,0x43,0x77,0x05,0x26,0xbe,0xaf,0x99,0xab,0x41,0xd4,0xcc,0x53,0x33,0x33,0xcd,0xb4,0x2d,0x76,0xfb,0xae,0x0c,0xac,0xc1,0xd0,0x42,0xfb,0x45,0x4a,0x6e,0x55,0xd2,0x93,0xef,0xb9,0x06,0xbc,0x38,0xce,0x94,0xc2,0x01,0xdf,0x27,0xc8,0x47,0xff,0x74 +.byte 0xfb,0x84,0xc5,0xa2,0x78,0x1f,0x4f,0x73,0x12,0xec,0x2d,0x82,0x5b,0xeb,0x3c,0xb6,0x1c,0x5a,0x29,0x9c,0xba,0x9e,0xa4,0x85,0x94,0x84,0x68,0x01,0xd7,0xb1,0x27,0x84,0x4a,0x7d,0x62,0x9c,0x32,0x12,0x89,0xd8,0x66,0xb5,0xe9,0x07,0xf4,0x5f,0x6b,0x0e,0x90,0x87,0xe5,0xc1,0x8b,0xaf,0x8f,0xf7,0xca,0x54,0xe0,0xc6,0x5f,0xa5,0xec,0xd1 +.byte 0xdc,0xdc,0x17,0x9e,0xca,0x4b,0x72,0x72,0x03,0x96,0x62,0xaa,0xc1,0xfe,0x23,0x7e,0xd2,0x06,0x61,0xb6,0xc9,0x0d,0x7e,0xbf,0x72,0x1c,0x66,0x46,0x0b,0x31,0x96,0x81,0x11,0x3d,0xac,0x5e,0xd0,0x35,0xaf,0xac,0x4c,0x74,0xce,0xf9,0x9c,0x64,0x3d,0xe5,0x9d,0xfe,0xc7,0x05,0x09,0xe1,0x70,0xc5,0x37,0xd5,0x4e,0xd8,0x7d,0xdb,0xfa,0x1c +.byte 0x28,0xfc,0x10,0x2a,0xe8,0x62,0x18,0x09,0x97,0xe0,0x98,0x2e,0x9f,0x1d,0x18,0xff,0x22,0xe9,0x5d,0x37,0xd2,0x74,0xf1,0x81,0x08,0x8a,0x55,0xc0,0x40,0x0f,0x70,0xbe,0x82,0x23,0x78,0x35,0xc8,0xf8,0x59,0x6e,0x0d,0x2e,0xd5,0xe7,0xf5,0x2e,0xbd,0xcd,0x1a,0xcf,0x76,0x43,0x1f,0xca,0x15,0x6c,0x4a,0xb7,0xc7,0xb9,0xaf,0x68,0xd7,0x31 +.byte 0x1e,0x0c,0x9c,0x78,0x74,0x66,0x80,0xc6,0x74,0xbe,0x86,0x59,0x0c,0x12,0xdc,0xf3,0x1b,0xaf,0x63,0x74,0xce,0x1e,0xac,0xf0,0x65,0xa0,0xab,0x7f,0x96,0x08,0x32,0xb2,0xca,0x9c,0xfb,0x9d,0x66,0x63,0x76,0xf9,0x69,0x08,0x6e,0xd3,0x46,0xde,0xdf,0x54,0x06,0x0d,0x25,0x81,0xd9,0x5a,0x45,0xeb,0xe5,0xc0,0xf6,0x86,0x0f,0xe9,0x27,0x7c +.byte 0xdc,0x52,0x28,0xb5,0xd0,0x7d,0x07,0xc1,0xb6,0x9b,0xdc,0xea,0xd3,0x2a,0xba,0xb0,0xd5,0xa3,0xd8,0x25,0x07,0x9c,0x6c,0xd6,0x16,0xa5,0x93,0x43,0x52,0xa7,0x5c,0x2b,0xe2,0xfa,0x8e,0x6e,0xaa,0x04,0x84,0x63,0x80,0x0f,0x90,0x10,0x41,0x1c,0xf6,0x67,0xea,0x39,0xb0,0x16,0xfc,0x6f,0x85,0x28,0x8c,0x8e,0xfb,0x79,0x39,0xdf,0xf6,0x6e +.byte 0x57,0xa1,0xaa,0xf1,0x0b,0x99,0xde,0xad,0x69,0xe2,0xf4,0x74,0x8e,0x8c,0x2d,0x20,0xdb,0xf3,0x2d,0xc2,0x75,0xe7,0xd6,0xc8,0x9d,0x46,0x3b,0x8b,0x8b,0x18,0xd8,0x41,0xfd,0xc2,0x7d,0xec,0x66,0x78,0xe7,0xbe,0xee,0x2b,0x07,0xd8,0x7e,0x13,0x61,0x7e,0xab,0x7d,0x2b,0x3f,0x83,0x96,0xf5,0xab,0x0b,0x20,0xd2,0x5b,0xb0,0xeb,0xf7,0x1b +.byte 0xac,0x1a,0x16,0x46,0x21,0x90,0xdb,0x67,0x66,0x42,0xe2,0x54,0x34,0xae,0x34,0xae,0x21,0x33,0x8c,0x48,0x19,0xdb,0x1f,0xa8,0x25,0x76,0xe0,0x03,0x1c,0x35,0x8d,0xd3,0xab,0x6b,0x93,0xf3,0xad,0x7d,0x3c,0x76,0x1d,0xaa,0x43,0x80,0x0f,0x5f,0x20,0xd9,0xf0,0xff,0x8b,0xf4,0xdb,0xbc,0xf2,0xff,0xf2,0x8a,0xfc,0xf5,0x0e,0x4e,0xd9,0xb0 +.byte 0xd6,0xb3,0x86,0x5b,0x3e,0x10,0x87,0x50,0xf1,0xd2,0x8f,0x8d,0xa4,0x39,0x85,0xf5,0x90,0xd6,0x53,0x69,0x40,0x42,0xc1,0xc3,0x7c,0xc1,0x3e,0x97,0xb4,0x08,0x49,0x93,0x4e,0x4c,0x67,0xd9,0x2e,0x05,0x70,0x04,0x98,0x0a,0xed,0xd0,0xff,0x0c,0x13,0xe4,0xde,0x75,0x81,0x24,0xb1,0x27,0x79,0xeb,0x80,0x68,0x52,0x50,0x66,0x77,0x4f,0xf6 +.byte 0x64,0x2f,0x85,0x9e,0xc1,0xbf,0x9f,0x0e,0x31,0x9a,0x36,0x24,0xcd,0xa8,0xe8,0xce,0x41,0x86,0xd1,0x02,0x96,0xdc,0x1a,0xa0,0x48,0xca,0x61,0xd5,0x87,0xdb,0x0a,0xeb,0x69,0x95,0xca,0xf8,0xe5,0xa0,0x5b,0x91,0x8f,0xb9,0x59,0x5f,0x68,0x60,0x58,0xc5,0xe0,0xc7,0x02,0x68,0xa5,0x67,0x1e,0xfc,0xa9,0x27,0x9f,0x83,0x4c,0x05,0x60,0xee +.byte 0xcb,0x79,0x31,0x73,0x36,0xf4,0x39,0x44,0xdb,0xea,0x62,0x89,0x97,0x69,0xd1,0x0d,0xf6,0x27,0xcf,0x47,0xfe,0x3d,0x5c,0xe9,0x92,0x54,0x0a,0x66,0xaf,0x82,0xb1,0x49,0x87,0x3f,0xa2,0x95,0x91,0x0e,0x72,0x1e,0x7b,0xde,0x32,0x31,0x51,0x40,0x24,0x4f,0x30,0x59,0x7d,0x97,0x28,0x30,0x7e,0x93,0xcd,0x1e,0x16,0xef,0xe1,0xb5,0xa8,0xff +.byte 0x3a,0xd0,0x62,0x94,0x8b,0x72,0xe7,0x97,0x8f,0x2f,0x58,0x3e,0x62,0x43,0x6b,0x28,0x05,0xc9,0x0d,0xf0,0x09,0xbd,0x12,0x3b,0xd8,0x15,0xd3,0x7c,0x97,0x96,0x5a,0xf4,0x9f,0x8d,0x25,0xb7,0xc5,0x66,0xf7,0xf7,0x5f,0x7e,0xca,0x2f,0xcd,0x9a,0xf2,0xa3,0x9b,0x4f,0x6f,0xc3,0xd9,0x64,0x38,0xda,0x87,0x97,0x8a,0x49,0x2d,0x80,0x16,0x73 +.byte 0x88,0x62,0xd2,0xdf,0x4f,0xf7,0x79,0xc0,0x83,0xeb,0x2b,0x66,0x5a,0x21,0x3a,0xa2,0x2a,0xed,0x8c,0xe7,0x91,0x6d,0x56,0x18,0xfc,0x59,0x68,0xea,0x9f,0x5c,0x3c,0xd5,0x0f,0x64,0x70,0x89,0x22,0x83,0xed,0xfa,0xc9,0x21,0x68,0x3c,0x69,0xb8,0x3e,0x89,0xb5,0x9d,0x8b,0xc8,0xf7,0x57,0x17,0x27,0x90,0x12,0xa7,0xd2,0x4d,0x2c,0x30,0x64 +.byte 0x42,0xbe,0xa6,0x49,0x4e,0xa3,0x3b,0xdb,0xdb,0x64,0x0e,0x89,0x66,0x87,0x72,0x90,0x86,0x1d,0x0b,0x61,0x32,0x47,0x3d,0x55,0x81,0xb2,0x50,0x5a,0x76,0x6c,0xa3,0x46,0x12,0x1b,0xaf,0x6e,0xbf,0xfd,0x98,0x2f,0xb7,0xd2,0x31,0x92,0xb5,0x26,0x1a,0x3d,0xfa,0x5d,0xc0,0x24,0x44,0xd2,0x6b,0x1c,0x81,0xf5,0x5d,0x50,0xb0,0x33,0x18,0xe0 +.byte 0xc5,0xb3,0x6b,0xf4,0xfd,0xde,0xf7,0x2f,0x69,0x1d,0x5a,0xfe,0x03,0x6d,0xca,0xad,0x29,0xe0,0x6e,0x70,0xcd,0xe3,0x6d,0x38,0xef,0xf1,0x3a,0x76,0x2b,0x2c,0xb6,0xcd,0xff,0xeb,0xbc,0xe7,0xd9,0x40,0xbe,0x23,0x61,0x20,0xd5,0xb8,0x66,0x77,0x65,0xc9,0x33,0xf5,0x75,0x8e,0x15,0x98,0x3f,0xb1,0x4a,0xb8,0x1c,0x47,0x73,0x45,0x0f,0x73 +.byte 0x2a,0xa1,0xb7,0x73,0x76,0x94,0x16,0x45,0xcf,0xd6,0x8f,0xe3,0x62,0x8a,0x42,0xfd,0xe3,0x1e,0xe0,0x7d,0xb5,0x99,0xbd,0x1c,0xf2,0x60,0xb2,0x72,0xa8,0x4b,0x19,0xd6,0xd0,0xdb,0x0b,0x1f,0xc9,0x68,0xc0,0xf3,0x65,0x04,0x50,0x41,0xf0,0xb3,0x0e,0x0a,0x9d,0x7f,0x0b,0x1f,0xeb,0x5b,0x4c,0x58,0x6a,0xf2,0x02,0x95,0xd2,0xf3,0xac,0xe5 +.byte 0x69,0x81,0xb1,0x3f,0x08,0xfc,0xba,0xcb,0x36,0xcd,0x54,0x28,0xac,0x65,0xd8,0x81,0xab,0xc1,0x6a,0x51,0x97,0x21,0xe4,0xc6,0xaf,0xd8,0x76,0x76,0xa4,0xc4,0xd0,0x58,0x63,0xdf,0x32,0xf5,0x04,0xfb,0x11,0xeb,0x76,0x39,0xda,0x55,0xf4,0x7e,0x1c,0x7b,0x04,0x07,0x4d,0x5a,0xeb,0x74,0x0a,0x57,0xcf,0x10,0xf6,0x0e,0x73,0x02,0x25,0x67 +.byte 0x4f,0x8f,0x37,0x75,0x8f,0x44,0x2a,0x1a,0x6d,0x05,0xda,0xe0,0xa0,0xaa,0xd2,0x78,0xaa,0x7e,0x76,0x0a,0xde,0x2a,0x54,0xae,0x1e,0x39,0xcc,0x3c,0x1c,0xa6,0xd5,0x8a,0xca,0xb4,0xcc,0x76,0xb9,0x30,0xd2,0xe2,0x46,0x31,0xb6,0x51,0xcf,0xe2,0x24,0x77,0xc9,0x9b,0x57,0x3c,0xa3,0x84,0x60,0x59,0x28,0x5f,0x23,0x74,0x17,0x79,0x42,0xbe +.byte 0x60,0x3f,0x09,0x6a,0x43,0x8e,0x40,0x25,0x79,0xb5,0xbb,0xbb,0x72,0x50,0xad,0x4f,0xaa,0xa2,0xd4,0xb2,0xc6,0x7d,0x50,0x7b,0x98,0x59,0x22,0x06,0x7d,0x2c,0x35,0xdd,0x44,0x34,0x9c,0x28,0x98,0xf3,0xe5,0xd0,0x7e,0x09,0xbe,0xc4,0x00,0x72,0xd5,0xa6,0x3b,0x0e,0xb1,0x18,0x91,0x0a,0x4d,0x5d,0xe2,0x0a,0x98,0x79,0x30,0x9b,0xaa,0x38 +.byte 0x03,0x2b,0x6c,0xb2,0x8e,0x0a,0x1d,0x30,0x59,0x8a,0xe8,0x6c,0x6d,0xb5,0xd4,0x91,0xc5,0x28,0x1d,0x5e,0x49,0xe0,0xfc,0x26,0x7f,0x40,0xc0,0x6a,0x81,0x0d,0xb9,0xc6,0x05,0xc6,0x18,0x82,0x70,0xf6,0xea,0x0e,0xb4,0x85,0xba,0x5d,0xfa,0xfd,0xe3,0xd6,0x08,0x7c,0x3d,0x99,0x03,0xd4,0xdc,0x9b,0x50,0x12,0xc8,0xbd,0x8c,0x47,0x67,0x28 +.byte 0x83,0x97,0xca,0xef,0xc3,0x1c,0x2b,0x6e,0x3b,0xf7,0xca,0x7a,0x68,0x6e,0x39,0x25,0x58,0xf7,0xa4,0x11,0x9d,0x8d,0x49,0x29,0xd6,0x6e,0x0b,0x0a,0xcf,0xa7,0x04,0x14,0x6f,0xc4,0x4c,0x36,0x1a,0x16,0x3e,0x8f,0x99,0x69,0x94,0x1d,0xa8,0x66,0x93,0xeb,0x1d,0x82,0xfd,0x3f,0x84,0xb0,0x9d,0xa4,0xe1,0xb0,0xd4,0x9d,0xb2,0x60,0x20,0xfb +.byte 0xd3,0xa0,0xdc,0x79,0x83,0xb0,0xfc,0x50,0x18,0x57,0xe1,0xeb,0x44,0x25,0x05,0xab,0x27,0xfb,0x5f,0x83,0xcd,0x51,0xd0,0x3b,0x80,0x4a,0xce,0xbf,0xe9,0xfe,0x46,0xd2,0x5f,0xea,0x8c,0x89,0x48,0xc8,0x65,0xdd,0x2a,0xa4,0xda,0x54,0xc2,0x37,0x7e,0xd7,0xff,0x80,0x5b,0xf0,0xc3,0x40,0x44,0x40,0x72,0x63,0x23,0xc6,0x9a,0x48,0xf3,0x4b +.byte 0x91,0x64,0x26,0xfc,0xf3,0xa0,0xb9,0x06,0x0c,0x88,0xbb,0xc0,0x93,0x73,0x63,0xf6,0x9c,0x0d,0xe2,0xf6,0xee,0xe0,0x51,0xfd,0xae,0x4d,0x21,0xb9,0x6b,0x7d,0x1e,0x34,0xa0,0x4d,0xe4,0x25,0x30,0xe6,0x81,0x2e,0x32,0xef,0xb9,0x9e,0xaf,0xa0,0x22,0xe0,0x67,0xe6,0x07,0x55,0x3a,0xed,0xef,0x4f,0x87,0x2f,0x44,0xd2,0xef,0xc1,0xfb,0xc4 +.byte 0x7b,0x27,0x20,0x44,0xd2,0xd6,0xf9,0xf3,0x67,0xc1,0xbf,0xaa,0xd5,0x9c,0xd9,0x2c,0xd5,0xf1,0x42,0x2d,0xec,0x39,0xb5,0xc1,0x18,0xed,0x6c,0x47,0x80,0xf8,0x6f,0x66,0x10,0xee,0x1d,0xd6,0x79,0x01,0x4e,0x2a,0xd0,0x83,0xa7,0x9d,0x1d,0x81,0xce,0xf5,0x6f,0x26,0x86,0xd2,0xd7,0x56,0x15,0x65,0x48,0x4c,0xf1,0xf9,0x21,0x77,0xd1,0x84 +.byte 0x22,0xce,0x4d,0x8d,0x83,0xda,0x8c,0x50,0x56,0xc8,0x3b,0xc5,0xb6,0xcf,0x3e,0x0d,0x50,0xe5,0x9d,0x6c,0xb5,0x2a,0x5a,0x58,0x28,0xf5,0x0a,0x05,0xf3,0x0e,0x40,0x8e,0xb6,0xb4,0xdf,0x11,0x1b,0x34,0x81,0xc5,0x0e,0x09,0xa6,0xfc,0x46,0x14,0x02,0x78,0x94,0xbb,0x63,0x9d,0x3e,0x25,0x2c,0xc8,0x1b,0x5c,0xef,0x64,0x77,0x0c,0x04,0x40 +.byte 0xe1,0x45,0x85,0xf8,0x07,0xbf,0x14,0x65,0xe9,0xfc,0xba,0xe4,0x9c,0xa7,0x91,0x56,0x2a,0x3a,0x8e,0x33,0xae,0x56,0x04,0x9d,0x35,0xbc,0xad,0x64,0x0e,0x99,0x8e,0xb5,0x84,0x72,0xcf,0xcc,0x81,0x14,0x11,0x9e,0xe6,0xac,0x0d,0x41,0x43,0x4e,0x2a,0x0d,0xda,0x98,0x42,0xfa,0x8c,0x21,0x79,0x93,0xa3,0xdf,0x84,0x88,0x76,0x14,0x5b,0xb9 +.byte 0xff,0xe1,0xab,0x94,0xc3,0xcd,0x10,0x69,0xee,0x53,0xea,0xfe,0xfb,0xaa,0x43,0x8f,0xdd,0x55,0x88,0x34,0x5d,0x55,0x0f,0x42,0x4d,0x1d,0x93,0xce,0x96,0x67,0xf8,0x33,0xc7,0xca,0x34,0x11,0x28,0xb2,0xed,0x0f,0x00,0x40,0x84,0xee,0x51,0x26,0x6e,0x7b,0x2d,0x77,0xeb,0x18,0xb8,0x9a,0xad,0x28,0xb6,0x6c,0x5e,0xde,0x10,0x4c,0x29,0x1d +.byte 0x79,0x3c,0x2e,0x1c,0xf0,0xc8,0xb3,0xee,0x19,0x7a,0x10,0xe1,0xe3,0x05,0x1e,0x63,0xe9,0x00,0xd7,0xfe,0x83,0xe7,0x54,0xff,0x65,0x9a,0x27,0xa3,0x86,0x72,0x5c,0xb6,0xef,0xf5,0x84,0x68,0x1e,0xae,0xe6,0xf8,0x66,0x9c,0x1b,0x86,0xab,0xfa,0x1a,0xe3,0xb8,0x97,0x16,0xb1,0xb7,0x42,0xfa,0x85,0xa3,0x3a,0x0d,0x21,0xd2,0x35,0xb1,0x89 +.byte 0xf0,0x4f,0x1a,0x1d,0x45,0x34,0x2f,0x31,0x12,0x8c,0x19,0xe7,0x4b,0x14,0xa7,0xcf,0x0f,0xf9,0xcd,0x77,0x40,0xbe,0x09,0xeb,0xc3,0x3e,0x4a,0x37,0x55,0xab,0xbb,0x9c,0xe5,0x22,0x56,0x8a,0x66,0xfa,0xb1,0xff,0x73,0x29,0x52,0xb1,0x89,0xf7,0xab,0xa6,0x58,0x53,0x97,0xfd,0x44,0xda,0xbd,0x0b,0x1f,0xc8,0x88,0x01,0xcc,0x5e,0xf7,0x05 +.byte 0xbd,0xf7,0x0a,0x4d,0xcb,0xef,0xbf,0xd9,0x8e,0x15,0xc3,0x40,0xb9,0xc9,0x14,0xe5,0x05,0x3c,0x20,0x67,0xfe,0xdc,0xa6,0xb8,0x92,0xbd,0xf5,0x33,0xb5,0x77,0x11,0x28,0x47,0x21,0x28,0x18,0x61,0xf8,0x1c,0xdb,0x65,0xad,0x89,0x0d,0x98,0x79,0xca,0x2b,0xa3,0x4f,0x16,0xa6,0xb3,0xb9,0xcc,0x47,0x5b,0x13,0x96,0x2e,0x39,0x78,0x24,0xc5 +.byte 0xf9,0xf5,0xae,0xdc,0x34,0x3c,0xf7,0x48,0x0d,0x75,0xaf,0x51,0x75,0x48,0xbe,0x4d,0x73,0x89,0x5a,0xfc,0xd7,0x51,0xd3,0x93,0xa8,0xbc,0xc3,0xa6,0x6b,0x63,0xc1,0xc3,0x7b,0x48,0xf1,0x57,0xe4,0xb4,0xce,0x5f,0x18,0xae,0xdc,0x61,0x99,0xaa,0x7e,0x49,0xd6,0xb5,0x2c,0x62,0xb8,0x8c,0x4a,0x94,0xc1,0xc2,0x13,0x23,0xdc,0x7c,0x48,0xc2 +.byte 0xaa,0xc4,0xd9,0xc0,0x09,0x11,0x6e,0x35,0x07,0x14,0x77,0x7e,0xeb,0x87,0x00,0x05,0x30,0xec,0xb2,0xc6,0xde,0x6e,0x42,0x0b,0x2a,0xb6,0xca,0xb1,0xdc,0x69,0x57,0x1b,0xad,0x52,0xa8,0x22,0x1e,0xb5,0x2b,0xb5,0x8e,0x39,0x4b,0xbf,0x38,0xf4,0xb2,0xf5,0xa1,0x9c,0x7b,0x7f,0x6c,0x14,0x48,0x37,0xa9,0xf9,0xcd,0x85,0x50,0x53,0xb0,0xc1 +.byte 0x15,0x28,0x19,0x3b,0xb1,0x04,0x44,0x93,0x7a,0x16,0x76,0x69,0xa1,0x5c,0x67,0xcc,0x8d,0x02,0x56,0xcd,0xd9,0x91,0x49,0x8c,0x1b,0xc9,0x89,0x98,0x09,0x2e,0x5b,0xf8,0x7c,0xe6,0x0f,0x46,0xb0,0xcc,0xe5,0x75,0x63,0xaf,0x40,0xd5,0xa3,0x45,0x4a,0x76,0x67,0x1d,0x81,0xc2,0x25,0x85,0x7f,0x52,0xc5,0xf8,0x6d,0xd9,0xb6,0xa8,0xa4,0x96 +.byte 0x63,0xcc,0x15,0xc5,0xec,0x40,0x0e,0x08,0xf7,0x6f,0x85,0xa5,0xe7,0x2e,0xbe,0x3f,0xf4,0xc8,0x74,0xc7,0xed,0x86,0x85,0xc0,0x44,0x9e,0x80,0xc8,0x89,0xdc,0x16,0x47,0xb1,0x68,0x0e,0x65,0x66,0x0f,0xbc,0x33,0xb1,0x78,0x1e,0x5e,0xd7,0xde,0x97,0x96,0xb8,0x74,0x5c,0x90,0x7a,0xed,0x36,0xf4,0x10,0x91,0x5a,0x42,0x92,0x81,0x11,0x73 +.byte 0x3e,0xf1,0x5e,0xfb,0xc2,0x38,0xe6,0xe5,0x41,0xce,0x96,0xed,0x44,0x14,0x9c,0xc0,0x1f,0x83,0x5f,0xdd,0x50,0x87,0x90,0x86,0x50,0x61,0x87,0x99,0x7c,0x64,0x2d,0x50,0x17,0xa3,0xb0,0x7e,0x69,0xd3,0x86,0xb4,0x7c,0xe7,0x15,0x34,0x9e,0x3b,0x17,0xc0,0x2d,0x08,0x60,0x8b,0xae,0xec,0xa2,0xf6,0xf1,0xa4,0xbc,0x7b,0xc2,0x75,0x91,0x13 +.byte 0xf6,0xd0,0x71,0xf0,0x3c,0x9c,0x51,0xb3,0x33,0x53,0x57,0x47,0x8b,0x47,0xb0,0x0b,0x95,0x9a,0x39,0x70,0x63,0x91,0xcc,0xd8,0xd0,0x23,0x32,0xc0,0xb6,0x0f,0x91,0x30,0x29,0x45,0xf1,0xfc,0xa1,0x83,0x10,0x9a,0xa4,0x05,0x05,0x9f,0x33,0xbd,0xaf,0x16,0x3e,0x53,0x39,0xb1,0x4b,0x76,0x55,0x3e,0x6f,0x47,0x23,0x59,0x4c,0xbb,0x82,0x31 +.byte 0x19,0xe2,0xb1,0x49,0x20,0x91,0x2d,0xb0,0xfe,0xa6,0xae,0x7f,0x6e,0xd1,0x5b,0xb9,0x84,0x18,0x0f,0x68,0xc6,0x56,0x8a,0x22,0x81,0x3f,0x38,0x42,0x7a,0x31,0xa1,0xc1,0xf7,0x10,0x6a,0xc3,0xb1,0xaf,0x19,0xad,0x06,0x3a,0x53,0x9d,0x44,0x9f,0xe7,0x25,0xac,0x59,0x06,0xb9,0xd2,0xf6,0xce,0xb6,0x1e,0x4d,0x65,0x2e,0x05,0xb4,0x14,0x91 +.byte 0xfb,0x5b,0x26,0xd0,0xee,0xfa,0x45,0x5b,0x0c,0xd5,0x5c,0x1f,0x0c,0xe0,0xf6,0x50,0x78,0x77,0x7e,0x83,0x04,0xec,0x3b,0x53,0x28,0x97,0x56,0x61,0xeb,0xa0,0x78,0xe5,0xc0,0xb2,0x3c,0xcd,0x6f,0x4b,0xda,0x11,0x00,0x93,0x49,0x9f,0x03,0x22,0x39,0x3a,0xc8,0xef,0x01,0x91,0x12,0x36,0x15,0x0c,0x47,0xd5,0x8b,0x77,0x5e,0x5f,0x91,0x4b +.byte 0x44,0x98,0xa0,0xa0,0x46,0x0f,0x17,0xef,0xf9,0x52,0x0b,0x92,0xc1,0xe0,0xfc,0x63,0x9b,0x6d,0xe2,0xde,0x88,0x89,0x32,0x89,0x93,0x44,0x6d,0x69,0xe7,0x26,0xfd,0x77,0xc0,0x18,0x58,0xdb,0x74,0xec,0x04,0x0c,0x60,0x51,0x74,0xca,0x49,0x3e,0x4f,0x5f,0xaa,0x53,0xf2,0xc1,0xcb,0x89,0x1f,0x69,0xaa,0xbb,0x97,0x17,0x04,0x49,0x5e,0x44 +.byte 0xf3,0xf3,0xc4,0x98,0x9d,0x49,0x1e,0xb0,0x27,0x7d,0xff,0x54,0xa5,0xed,0xbe,0xb0,0x52,0xf6,0x00,0x87,0x67,0x2d,0x28,0xdb,0x09,0x4e,0xa2,0xee,0x4f,0x81,0xeb,0xa1,0xca,0x2b,0x07,0x2f,0x54,0x6d,0x5a,0x2e,0x13,0xa4,0xd0,0xac,0x21,0x7c,0x44,0xc0,0x98,0xac,0xe4,0x6e,0x94,0xd1,0x5b,0x5e,0xd6,0xf1,0x3c,0x45,0x88,0xe1,0xbd,0x58 +.byte 0xf1,0xc7,0xba,0x36,0x2c,0x15,0xb9,0xf4,0xa3,0xea,0x73,0xb4,0x91,0x53,0xd8,0x18,0x86,0x23,0x87,0x0b,0x7a,0x4a,0x2d,0x2d,0x3d,0x73,0xcb,0x05,0x11,0x4c,0x19,0x26,0xf2,0x05,0x89,0xc8,0x29,0x26,0xa7,0xe4,0xcb,0x43,0xd0,0xf6,0xbc,0x76,0xbd,0x9a,0x17,0x4a,0xf1,0x39,0xe3,0xde,0x05,0x10,0x8a,0xd3,0x11,0x53,0x61,0xef,0x33,0xd9 +.byte 0x65,0x0d,0x99,0x0b,0x39,0xa4,0x1b,0x4f,0x0b,0xa5,0xf1,0x37,0xa3,0x4f,0x54,0xa7,0x29,0xc1,0xae,0x88,0x5c,0x13,0x2f,0xb2,0xbf,0xcf,0x1b,0x0d,0xa0,0x68,0x21,0xe2,0x20,0x3f,0x02,0x9f,0x08,0x39,0xc6,0x20,0x2d,0x08,0x01,0x5d,0xf1,0x47,0xde,0x88,0xad,0x49,0x09,0xf7,0x1a,0x0c,0xa7,0x29,0x91,0xe5,0xfc,0xc5,0xde,0xd7,0x92,0x3f +.byte 0xe5,0x0c,0x91,0xea,0x24,0xfb,0x02,0x9a,0x13,0x3a,0x61,0x01,0x9d,0x7e,0x9d,0x11,0xf8,0xbd,0xe0,0x05,0xbb,0x13,0xf0,0x00,0x67,0x90,0x6f,0x80,0xe7,0x2e,0xfc,0xe0,0xea,0x8a,0x9d,0x2c,0x13,0x57,0x4c,0x78,0x1c,0x44,0xe2,0xa6,0x62,0x01,0x46,0xf8,0xbe,0xf4,0x51,0x32,0x15,0xd4,0x3c,0x7d,0x3b,0xcc,0xfd,0xc3,0x46,0x43,0xf1,0xfa +.byte 0x9e,0xee,0xad,0x47,0x8f,0x32,0x31,0x94,0x70,0x92,0xea,0x45,0xe3,0x63,0xd6,0x28,0x23,0xa5,0xdf,0x61,0xee,0x19,0x1a,0x5e,0xb0,0xe7,0x17,0xab,0xac,0xb4,0x03,0xed,0xf6,0x9e,0xba,0xdf,0x52,0x88,0xb7,0xca,0x7c,0x27,0xcd,0x7b,0xf8,0x1e,0x54,0x4b,0xe6,0xa3,0x91,0xf7,0xeb,0x22,0x65,0x95,0x13,0xe1,0xac,0xb6,0x22,0x80,0xe3,0xeb +.byte 0xf9,0xde,0xf1,0xb7,0x6a,0xfd,0xc7,0xb8,0x9b,0x9c,0x49,0x4f,0x84,0x7f,0x68,0x93,0x6c,0x3c,0xea,0xb1,0x8a,0xeb,0x23,0xca,0x2d,0x5e,0x29,0xb5,0x52,0x49,0x98,0x12,0x3f,0xed,0xf0,0xb7,0xbc,0x22,0x14,0x73,0x92,0x84,0x1b,0x3e,0x2f,0xed,0x24,0x1e,0x62,0xcc,0x09,0xe8,0x7c,0x5a,0x08,0xd4,0xc6,0xd9,0xd1,0x55,0x66,0x18,0x2c,0x6a +.byte 0x99,0xc3,0x0e,0x1e,0x7b,0xb7,0xd4,0xbd,0x0e,0x1f,0x22,0x85,0x09,0x2c,0xcf,0xff,0x79,0x9f,0x93,0xbe,0xec,0xed,0x63,0xb7,0x97,0xbb,0xeb,0xd6,0x70,0x76,0xa9,0x4f,0xb7,0x9a,0x60,0x5b,0x50,0xdf,0x85,0x46,0x69,0xa0,0x9a,0x86,0xe3,0xe2,0x13,0x2b,0x8c,0x0f,0x3b,0xab,0xa8,0xce,0xa3,0xb0,0x78,0x72,0x40,0xfb,0xd1,0x26,0x72,0xc1 +.byte 0x91,0x25,0x7b,0x29,0xde,0xcf,0x99,0xf3,0x8e,0x87,0x39,0x81,0x04,0xad,0x3b,0x11,0x6a,0xda,0x00,0xdd,0xe9,0x41,0xc1,0xd8,0xcc,0xf9,0x59,0xac,0x9b,0xb1,0x64,0x6f,0xb8,0xf4,0x9f,0x20,0xde,0x67,0x09,0x1b,0xdf,0x11,0xa5,0x94,0x56,0xab,0x76,0xba,0xc5,0xda,0x6c,0x86,0xe6,0xa4,0x73,0x59,0xa9,0xe3,0x68,0xb9,0xc0,0x50,0x1b,0x55 +.byte 0x21,0x9e,0xea,0x8d,0xcc,0x5d,0xee,0x88,0xe1,0x18,0x7c,0xcd,0x8f,0xff,0x18,0xbd,0x13,0xea,0x95,0xc4,0x8e,0xd3,0x92,0xfe,0x3d,0xda,0x6f,0xa5,0xbc,0xa0,0x77,0x5a,0x1d,0x61,0xff,0x7b,0x77,0xc4,0x06,0x25,0xc5,0xa7,0x76,0x36,0x55,0xe7,0xc0,0xf0,0x46,0x7e,0xca,0xe7,0xc1,0xe8,0x88,0x65,0xff,0xa7,0xb6,0x9c,0x83,0x1d,0x2e,0x6e +.byte 0xd6,0xd3,0x07,0x22,0x65,0x79,0x4f,0x3c,0x0a,0x5c,0x4f,0x95,0xb3,0x14,0x37,0x9b,0x0b,0x97,0x69,0xd9,0x5b,0x37,0x09,0xc3,0x70,0x5b,0x4f,0x11,0xcb,0xce,0xc0,0x06,0xf2,0xb9,0x32,0xdd,0x24,0x7b,0x8c,0xe6,0x0c,0x91,0x3b,0xa8,0xb0,0x82,0x56,0x4d,0xde,0xa0,0x5c,0x0b,0x5b,0x70,0x53,0x64,0x9d,0xab,0xbb,0x51,0x6b,0x8c,0x8f,0xe5 +.byte 0x1f,0xc0,0xb8,0xfe,0x1b,0xf6,0x24,0x26,0x62,0xcb,0x78,0x84,0x90,0x76,0x67,0x30,0x18,0x37,0xa9,0xca,0xb7,0x0d,0xac,0x17,0x86,0xb1,0x87,0x59,0x18,0xc3,0x9e,0x62,0x1b,0xb1,0x04,0x52,0xfc,0x7c,0x86,0xa0,0x37,0xb9,0x8b,0x7a,0x85,0x79,0x21,0xe0,0x0f,0x87,0x28,0x91,0xd0,0xe5,0x24,0x63,0x5c,0x7c,0xe8,0x47,0xfa,0x42,0x55,0xe9 +.byte 0x66,0xad,0xdf,0xc3,0x43,0x90,0x47,0x83,0x24,0x09,0x54,0x5f,0x14,0x27,0x53,0xb3,0x22,0x15,0x52,0x84,0x2f,0x61,0x8c,0x01,0x9e,0x34,0x61,0x3f,0x76,0x44,0x1c,0xca,0x79,0x2c,0x40,0x4e,0xa0,0x36,0x11,0xe0,0x23,0x0f,0xa7,0x78,0xf9,0xf9,0x2a,0x2c,0x98,0x5c,0xa9,0x2d,0x66,0xb9,0x87,0x43,0xd5,0xbc,0x64,0xe5,0x52,0x2f,0x1d,0xdc +.byte 0x1d,0xf4,0xb3,0x18,0x6b,0xd1,0x3b,0x8b,0xa3,0x47,0x65,0x62,0xcc,0xca,0x5f,0x00,0xbb,0x78,0x9d,0x35,0xd4,0x79,0x45,0x33,0xc7,0xa8,0x29,0x96,0x98,0xa4,0x23,0x2c,0x23,0x7f,0x5a,0x1d,0x09,0xb4,0xcf,0xac,0x54,0xcd,0x27,0xda,0x88,0x21,0xe2,0xb4,0x85,0xdc,0xc9,0x4a,0x6b,0xc4,0xfa,0x48,0xc5,0x91,0xc1,0x53,0x4b,0xa1,0x7a,0x9c +.byte 0x8a,0x7d,0x35,0x52,0xf1,0x58,0x9d,0x20,0x36,0xc2,0x78,0xdb,0x37,0xf8,0xa4,0x2f,0x50,0x98,0xb0,0x34,0x51,0x66,0x93,0xcf,0xe7,0xf0,0x06,0xf1,0xcd,0x0e,0x4f,0x33,0xcc,0x9b,0x73,0x3b,0xc9,0x51,0x63,0x6d,0x29,0x6b,0xf4,0x9d,0x2c,0x76,0x59,0xcd,0xfc,0x11,0x35,0x52,0xbd,0x3b,0x2e,0x7d,0x8a,0x0d,0xb0,0xbb,0x90,0x9b,0x9c,0xac +.byte 0x1c,0x80,0x89,0xd6,0x6f,0xaf,0xea,0x89,0x38,0x74,0xef,0x83,0x82,0x91,0xf7,0x74,0x96,0x30,0x40,0xe2,0x18,0x2b,0xb4,0xf6,0x15,0xf0,0x8e,0x63,0xe1,0x82,0x55,0x7b,0x65,0x70,0x33,0x14,0xef,0x7a,0x7c,0x2d,0xa9,0x17,0x1b,0x53,0x1e,0xf8,0x98,0x1b,0xbe,0xc8,0x00,0xf5,0xbf,0x79,0xe7,0x8e,0xf2,0xdb,0x59,0x0d,0x46,0xab,0x43,0xd0 +.byte 0xe4,0xa0,0xeb,0x29,0x6a,0x8b,0xc1,0x99,0xa6,0xcc,0x8e,0xe5,0xde,0x67,0xdf,0x49,0x09,0x62,0x8d,0x4b,0xa1,0x1c,0x3b,0x01,0xe2,0x95,0x65,0x10,0xa5,0x91,0xd0,0x48,0x35,0x96,0xcf,0xe4,0x51,0xd2,0x7f,0x93,0x49,0xab,0x1a,0xba,0x08,0x33,0x54,0x34,0xd7,0x00,0xc9,0xa0,0x07,0x03,0xc7,0x8a,0x65,0xa2,0x84,0x60,0xcd,0xaa,0xa2,0x46 +.byte 0x8c,0x67,0xd9,0xc1,0xe7,0x58,0xc5,0x1d,0xc0,0xb3,0xc6,0xb2,0x2a,0xfb,0x70,0x04,0xa2,0x25,0x7f,0x75,0x3c,0xd5,0x8e,0x9c,0x33,0xa2,0xdc,0x20,0x4c,0x26,0x5b,0xbe,0xd9,0x00,0x5d,0xa2,0xbd,0x42,0xbd,0x0d,0xd6,0x52,0x79,0xb5,0x67,0xf6,0x27,0x62,0xc8,0x64,0x05,0xc5,0x0f,0xae,0xe1,0x78,0x39,0xd1,0xb5,0x28,0xe9,0xd4,0x2a,0xaa +.byte 0xd4,0xc4,0x3e,0x43,0x27,0x83,0xfa,0xdb,0x46,0x73,0x20,0xcd,0x2c,0xba,0x33,0xb4,0x77,0x10,0x32,0x3d,0x8e,0x56,0x88,0x81,0xe1,0x4c,0x8b,0x46,0x60,0xcb,0xb7,0x67,0xd7,0x7b,0xc2,0x47,0x7d,0xd8,0x2d,0x4c,0x09,0x9f,0x07,0x8e,0x34,0x45,0xf4,0x50,0x69,0xfd,0x35,0x0a,0x09,0x9e,0xac,0x49,0x5f,0xdf,0x72,0x84,0x97,0x93,0x30,0x2c +.byte 0xc6,0x20,0x6f,0xb5,0x18,0x03,0xb6,0x30,0x23,0xc8,0xcd,0xa1,0x43,0xbd,0xbb,0x6f,0xde,0xb3,0xcb,0x1c,0xdd,0x41,0x71,0xfa,0x37,0xa7,0xa9,0x57,0x5a,0xf7,0xee,0xcd,0xb1,0xc1,0xb6,0x78,0x1c,0xe3,0xde,0x5c,0x02,0xc8,0xce,0xb7,0x8e,0x72,0xce,0xfd,0x79,0xcf,0x1a,0xef,0xcb,0x5b,0x5d,0x3c,0x1d,0xc8,0x1e,0x9f,0x67,0x26,0x86,0xd3 +.byte 0x3b,0x98,0x49,0x04,0xcd,0x1b,0x48,0x7c,0xa6,0xbe,0x37,0x0b,0x19,0xb1,0xb7,0x8a,0x74,0x0a,0xd9,0x4f,0x7b,0xbb,0x8e,0xc6,0x9b,0xdd,0xbc,0x61,0xfd,0xdd,0x86,0x7e,0x70,0x2e,0xe4,0x94,0xb4,0x62,0x47,0x6b,0x7c,0x92,0x41,0xda,0x05,0xdc,0xaf,0x5c,0x93,0xbc,0x7d,0xad,0xce,0x44,0x9e,0x27,0x1c,0x74,0x30,0x01,0xf2,0x8a,0x22,0xce +.byte 0x88,0x61,0xf5,0xb8,0xe2,0xf0,0xca,0x14,0x21,0x53,0xd3,0xbe,0x95,0x8f,0x52,0x10,0x21,0xc5,0x25,0x16,0xa1,0x4f,0xef,0x9a,0x6f,0xce,0xe9,0xee,0x06,0xa8,0x32,0xa4,0xac,0xee,0xd8,0x95,0x0b,0x65,0x10,0xbc,0xb3,0x15,0x48,0xf9,0x96,0xee,0xde,0x5d,0xf6,0x38,0x5f,0x32,0x70,0xd1,0x29,0xa8,0x1d,0xdc,0xf4,0x34,0x2d,0x0c,0x93,0x48 +.byte 0x8c,0x40,0xed,0x35,0x41,0xfe,0x4b,0xab,0x20,0x7d,0x95,0x74,0x02,0xe5,0x71,0x76,0x7e,0x59,0x35,0xb3,0xd7,0x43,0x1f,0xd4,0xe6,0x02,0x86,0xba,0x4f,0x53,0xd9,0xc3,0x7d,0x7f,0x3d,0xb6,0xd8,0x92,0x07,0x89,0x99,0x46,0xf8,0x09,0xcd,0x19,0x43,0x93,0xa7,0xc1,0xb2,0x5d,0xec,0xbf,0x09,0xf4,0xba,0xfc,0xf7,0xf1,0xa7,0x2e,0xfe,0x71 +.byte 0x04,0x58,0xab,0x16,0xd7,0xc0,0xf7,0x03,0xd4,0xc4,0xb9,0xe4,0xd8,0xfc,0x5b,0x66,0xa6,0xb3,0x6a,0x94,0x0e,0xba,0x8c,0x54,0x5c,0x8c,0x02,0x0a,0x33,0xcb,0xde,0x1c,0xad,0x6d,0xef,0x48,0x05,0xa6,0xca,0x9a,0x27,0xd6,0x1c,0xc3,0xea,0x3a,0x46,0x20,0xec,0x72,0xc4,0x94,0x89,0x7e,0xba,0xa9,0x2f,0xe5,0xec,0x1a,0xe4,0x50,0x54,0xeb +.byte 0xd9,0x5a,0x08,0xc5,0x84,0xc1,0x9a,0xdf,0xb0,0xd4,0x9a,0x6d,0xa2,0x93,0x52,0xd2,0x4d,0x69,0x88,0xc8,0x40,0x2d,0x26,0xbd,0x7a,0x37,0x04,0x21,0xe1,0x9d,0xc9,0xed,0xda,0x7a,0x4c,0x11,0x49,0x14,0x42,0xa1,0xdb,0x6e,0xed,0x1b,0x37,0xbf,0x09,0xac,0x35,0xda,0x80,0xf6,0x75,0xd4,0x32,0x54,0xb5,0x18,0xe8,0x79,0x25,0xc4,0x95,0xe8 +.byte 0x74,0xcf,0x6d,0xac,0x34,0x1f,0xea,0xd4,0x2e,0xd1,0x77,0x5e,0x90,0x8f,0x12,0x51,0xbb,0x3c,0xdf,0xe6,0xf4,0x49,0x8c,0x0f,0x9a,0x8e,0xe3,0x96,0xbd,0xba,0xe6,0x47,0x4b,0x50,0xc7,0xa9,0x29,0xea,0x09,0x5d,0xef,0x3c,0x91,0x48,0xc6,0x37,0xfd,0xac,0x7b,0xe5,0x04,0x25,0x93,0x0b,0xe3,0xce,0x32,0x46,0x38,0x81,0x97,0x57,0xbe,0x1f +.byte 0x3c,0x61,0x2d,0xd1,0x4e,0xca,0xbb,0x44,0xc6,0xfd,0xdf,0xdd,0x11,0xbf,0xbf,0xa8,0xc0,0x32,0x67,0xc1,0x2e,0xd7,0xbe,0x3c,0xe3,0xcb,0x57,0xa5,0x6d,0xbb,0x8e,0x0f,0x69,0x22,0x42,0xef,0x53,0x0f,0xce,0x09,0x6a,0xda,0xbf,0xd6,0xed,0x61,0x67,0x82,0x83,0x13,0x63,0x97,0x7d,0x1a,0xad,0x34,0x77,0x37,0xa6,0xe0,0x89,0xaa,0xd4,0xb6 +.byte 0x8f,0x93,0xff,0xb8,0x8f,0x63,0x14,0xfd,0x17,0xff,0xe5,0x7c,0x83,0x23,0xaa,0xe0,0xb9,0xd9,0x94,0x3a,0x1a,0xe7,0xa5,0xbd,0xa6,0x2b,0xd3,0x49,0xca,0xeb,0x7d,0x87,0x1d,0x54,0x16,0x93,0xec,0x14,0x8b,0x77,0x3c,0xb4,0xbe,0x33,0x76,0x5e,0xcb,0x33,0x27,0xd3,0x20,0xd6,0xed,0x0c,0x66,0xb8,0xe0,0x00,0xa6,0x76,0xcd,0x8b,0xb4,0xef +.byte 0x11,0xbc,0xe5,0x59,0xcf,0x1d,0xf5,0x15,0x58,0x4a,0xe1,0xfd,0x87,0x8c,0x7b,0xb9,0xa4,0x42,0x5a,0xed,0x51,0x7e,0x8d,0xa6,0x19,0xaa,0xc4,0xa6,0x14,0x74,0x45,0xb1,0xda,0x87,0x0f,0xd7,0xe7,0x66,0x3b,0xcd,0x04,0x02,0x14,0x20,0x41,0x15,0x4c,0x33,0x79,0x80,0x7d,0xd4,0x44,0x2c,0xab,0x6c,0xf4,0xa8,0xd4,0x31,0x43,0x7b,0xa7,0xc7 +.byte 0x65,0x0e,0x32,0xc8,0xc8,0x6d,0xf5,0x65,0x1b,0x26,0xf1,0xe4,0x68,0x15,0x88,0x1b,0x00,0x60,0x23,0x31,0xd7,0x4b,0x57,0xda,0xf1,0x19,0xa9,0xd9,0xaf,0xe6,0xa9,0x1e,0x2c,0x0d,0x23,0xe4,0x5b,0xcb,0x43,0x38,0xf0,0x93,0xd3,0xfb,0x6a,0x9b,0x83,0x30,0x55,0x96,0x9f,0x53,0x06,0x3f,0xaf,0x40,0x69,0xef,0x9a,0x47,0x6b,0xba,0x7c,0x10 +.byte 0x10,0x44,0x89,0xfa,0xb9,0x9e,0x70,0xed,0x25,0x59,0x68,0xae,0x9b,0x17,0xcf,0x80,0x6f,0x34,0xb8,0x07,0x40,0xe5,0x27,0x6d,0xcd,0x46,0x2c,0x36,0x90,0xf3,0x83,0x74,0x68,0x35,0xf2,0x05,0xa8,0xdf,0x4e,0x34,0xc5,0xb4,0xeb,0x5a,0x7d,0xe6,0x10,0x8a,0x23,0x54,0xeb,0x9b,0x27,0xf2,0x07,0xee,0xf9,0x05,0xc2,0x5a,0x88,0xbd,0x49,0x2e +.byte 0x1b,0x00,0x31,0x68,0x4a,0xc9,0x3a,0xc5,0x93,0x82,0xa8,0x39,0xba,0x55,0xcd,0xc1,0xda,0x49,0xc2,0x4c,0xf4,0x93,0x00,0xcf,0x61,0xa4,0xbb,0x8c,0x64,0x33,0x90,0x14,0x6d,0x1d,0xad,0x75,0x97,0xd9,0x1d,0xfb,0x27,0x67,0x43,0x04,0xdc,0x4e,0xdf,0x0e,0x0c,0x7e,0x1c,0x89,0xfe,0x31,0xb7,0x9b,0x07,0x5e,0x99,0x08,0x22,0xef,0x6e,0x4d +.byte 0x8b,0xd6,0x27,0xe6,0x24,0x1a,0x28,0xb0,0x22,0xa5,0x69,0x17,0x82,0x46,0xe3,0x90,0xe8,0x04,0xae,0x90,0x66,0x14,0xec,0xa2,0x1b,0x7e,0x09,0x13,0x32,0x9d,0xec,0x8b,0x51,0x5f,0xa8,0x96,0x8f,0x4c,0xc6,0xbd,0x5c,0x70,0x29,0x21,0xac,0xe9,0x6e,0xb0,0x0c,0x61,0x50,0xba,0xcc,0x55,0x71,0xda,0x2a,0x92,0x86,0x0c,0xff,0xaf,0x7a,0xcf +.byte 0xaf,0x2a,0xbd,0xd6,0x15,0xa4,0x4c,0x2e,0x76,0x0d,0xcf,0x10,0x11,0x4a,0xd1,0x89,0xdd,0x46,0x5f,0x6b,0x5a,0x02,0x05,0x49,0x6f,0x98,0x6a,0xa7,0x8a,0x66,0x87,0x59,0x23,0xb5,0x3f,0x2e,0x95,0x73,0xfe,0x48,0xe9,0x0d,0x17,0xa6,0xa5,0x4e,0x40,0x98,0x79,0x40,0x1a,0x10,0x1d,0x84,0xdd,0x6f,0x17,0xa7,0xb7,0xfb,0x49,0xbd,0x54,0x97 +.byte 0x0f,0x42,0x25,0x95,0x83,0xf0,0x97,0xe7,0x4c,0x24,0xb5,0xe8,0x23,0x0a,0xd6,0xbf,0xef,0x2c,0x03,0x4f,0x87,0x59,0xe8,0x80,0x87,0xcc,0x51,0x1b,0x94,0xd8,0x60,0xe7,0x10,0x4d,0x01,0xfd,0x83,0xf2,0xd8,0x8d,0x1b,0x33,0xbf,0xaf,0x36,0x41,0x47,0x51,0xe0,0x45,0x2a,0x05,0x5f,0xe1,0x92,0xf8,0xa5,0x15,0x46,0x35,0xd8,0x9b,0xe0,0xff +.byte 0xee,0xa6,0x4e,0x7d,0xfd,0x96,0xa5,0x75,0xdf,0x7e,0xb0,0x7d,0x14,0x73,0xdd,0xbe,0x17,0x6d,0xdd,0xec,0xac,0x9a,0x92,0x68,0xe3,0x44,0x16,0x63,0x22,0xa8,0x15,0x58,0x8c,0x11,0x23,0x46,0x18,0xae,0x47,0x39,0x87,0xc7,0x4c,0x30,0x09,0xce,0xe5,0xc4,0xd8,0x82,0xc6,0xc6,0x3d,0x31,0xf6,0x0f,0xb5,0x69,0x61,0x63,0x88,0xd6,0xb8,0xda +.byte 0x89,0x29,0x87,0x69,0x6e,0x3f,0x55,0x2f,0xbc,0x91,0x91,0x43,0x7d,0xb3,0x7b,0x99,0x5a,0x5a,0xb0,0x7d,0x90,0xa7,0xe7,0x30,0x0d,0x32,0xb2,0x43,0x43,0x78,0x59,0x6e,0xbb,0xd7,0x76,0xd4,0x5b,0x4d,0xc4,0xa9,0x99,0xdd,0xd3,0xce,0x3d,0x13,0x41,0x38,0x33,0xed,0xb8,0x76,0x1a,0xbb,0xfd,0x26,0xcd,0x69,0x89,0x22,0x16,0x9a,0x21,0x35 +.byte 0x38,0x77,0x14,0x10,0x42,0x17,0x1f,0xa1,0xbf,0x55,0xb4,0x51,0x62,0x15,0xac,0xd0,0xa2,0x71,0xe4,0x32,0x89,0x33,0x8b,0x74,0xc6,0x61,0x38,0xd0,0xfe,0x28,0x69,0xe6,0x88,0x1b,0x11,0x7e,0x46,0x39,0xba,0x24,0xdd,0x1f,0x61,0xf4,0x74,0xad,0x58,0x94,0xa9,0x3e,0xc7,0x2a,0x9e,0xc0,0xe1,0x1c,0xee,0x21,0xab,0x3e,0x65,0x0c,0xe8,0xd8 +.byte 0x71,0x52,0xf3,0x6c,0x64,0x53,0x75,0x17,0x87,0x55,0x14,0x42,0x25,0x7f,0xe7,0x0d,0x89,0x1b,0x77,0x26,0xc4,0xaa,0xcc,0x91,0x47,0xe5,0x54,0xae,0x1a,0x0d,0x04,0x99,0xeb,0x56,0xd8,0xb4,0x6d,0xeb,0xec,0x2f,0x6c,0xc5,0x8e,0x76,0xe1,0xa0,0xa7,0x42,0x06,0xc9,0xc3,0x03,0xee,0xa9,0x9b,0x1e,0xfc,0x11,0xf5,0x2f,0x2b,0x14,0xb8,0x9f +.byte 0x87,0x61,0x9b,0xc7,0x38,0x0e,0x58,0xf1,0xd4,0x36,0xca,0x82,0x85,0x9c,0xde,0xec,0xd3,0x1e,0x29,0x4e,0x70,0x9e,0x9a,0xe0,0x8b,0x6f,0xfe,0xd0,0xe9,0x95,0x51,0xcf,0x36,0x31,0x9c,0xff,0x63,0xc6,0x04,0x8e,0x61,0xc2,0xcb,0x3a,0xfa,0xd0,0xd7,0x29,0xbd,0xe7,0x8a,0x2b,0x8e,0xa0,0xac,0x58,0x93,0xb3,0x52,0xca,0x80,0x17,0xd2,0x2d +.byte 0x93,0x5f,0xe0,0x8a,0x47,0x3c,0x67,0x95,0x64,0x91,0xa4,0x76,0xa4,0x5f,0xfa,0x93,0x4d,0xc7,0x6e,0x5d,0x23,0x9f,0xe1,0x4a,0x16,0xff,0xa5,0xf0,0x94,0xa8,0x02,0xcc,0x9a,0x84,0xd5,0x9d,0xb6,0xe5,0x7c,0x76,0x3f,0xc9,0xfd,0xdc,0x8e,0x59,0x9a,0x22,0x18,0x3c,0xe6,0x90,0x85,0x10,0x73,0x2d,0x65,0xa7,0xa7,0xe1,0xeb,0xc5,0x05,0x24 +.byte 0x1e,0x0b,0x31,0x19,0xb5,0xb0,0x8d,0xc0,0xb5,0x04,0xfe,0x9d,0xfa,0xf7,0xcd,0x71,0x29,0x40,0x19,0x23,0xed,0x2c,0xdb,0x89,0x89,0x8d,0x69,0x22,0x4c,0x9c,0xa7,0xf7,0xb1,0x56,0x87,0xa3,0x44,0xa9,0xa3,0x16,0x28,0xce,0x94,0x40,0x6f,0x71,0x77,0x0e,0x6d,0xe9,0x78,0xa2,0x2a,0x17,0x45,0x03,0xeb,0x1e,0xf1,0xfa,0x56,0x3e,0xa7,0x6b +.byte 0x08,0x06,0x6a,0xcb,0x8f,0x5e,0x0f,0xd3,0x6e,0x4b,0x21,0x31,0x73,0x50,0x94,0x56,0xf9,0xb9,0xc7,0x38,0x69,0xe8,0x09,0x3f,0x03,0xb3,0xb5,0xe8,0x2a,0x5e,0xf6,0xad,0xae,0x6f,0xab,0x6a,0x49,0xdd,0x93,0x6d,0xfb,0x8b,0xde,0xea,0x8b,0xb0,0xa1,0x44,0xf0,0xb3,0xf6,0xaa,0xe3,0xc8,0x04,0x87,0x9f,0x8b,0xee,0xab,0x13,0x1d,0x2d,0xeb +.byte 0x09,0x62,0x21,0x49,0x5f,0xb6,0x95,0xab,0xc4,0xee,0x69,0xfb,0x31,0xff,0xbf,0x1a,0xa6,0x4c,0x67,0x66,0x84,0xe6,0x0c,0xb7,0xb2,0x3e,0x3f,0xa4,0xb3,0x52,0xde,0x15,0xc9,0xa7,0xa9,0xb5,0x0d,0xe5,0x0b,0x99,0xa6,0xb6,0x8f,0x69,0xc5,0x6d,0x6c,0xbb,0x83,0x89,0x4e,0xfc,0x49,0x79,0x4d,0x46,0x31,0xa0,0x09,0x5f,0x5d,0xd0,0x5b,0x80 +.byte 0xa1,0xf4,0x36,0x48,0x97,0x6a,0xfd,0x34,0xcb,0x20,0xa8,0x01,0x25,0x04,0xe7,0x13,0x12,0x87,0x66,0x27,0x96,0x36,0xba,0x92,0xbd,0xda,0x94,0x11,0xef,0x90,0xbd,0xbc,0x9e,0xf9,0x63,0xb3,0xa6,0xc1,0xbb,0x46,0xe8,0x86,0x3f,0x2d,0xf9,0x11,0x3a,0x23,0xa8,0x7a,0x33,0x41,0x3e,0x2e,0x5d,0xde,0xc0,0xd2,0x23,0xca,0x41,0xa0,0xb9,0x70 +.byte 0x6d,0x31,0xf3,0x89,0x87,0x9b,0x72,0xd9,0x15,0x4d,0x8b,0x51,0xdd,0x56,0xa1,0xb4,0x68,0x52,0x65,0x81,0x12,0x46,0xea,0x24,0xb4,0x34,0xcc,0xa0,0xdb,0x7d,0x96,0xd9,0x8e,0x64,0x61,0x10,0x7c,0x2a,0x00,0x4d,0x82,0x61,0x54,0xa4,0x70,0x3d,0x9c,0xa5,0x0b,0xd2,0x08,0x71,0xa8,0x94,0xb1,0xb4,0x30,0x61,0x59,0x9f,0x72,0x61,0x56,0x2d +.byte 0xa3,0xf4,0x9d,0x1c,0xfc,0x49,0x9d,0x39,0x27,0xcb,0x54,0xb2,0xce,0x3c,0xb6,0x76,0xe5,0x8e,0xa5,0xe7,0x08,0xd4,0xc7,0x2c,0xa6,0x28,0xc8,0x3e,0x22,0x14,0x06,0x75,0x68,0x0d,0x6b,0xb5,0xa3,0x68,0x14,0x17,0xfe,0xb8,0xcc,0x26,0x5b,0x9d,0x0b,0xcc,0x3e,0xd7,0x6c,0xe0,0xec,0x5e,0x1e,0x1e,0xb8,0x9a,0xbe,0x91,0xb5,0xa6,0xb5,0x83 +.byte 0x28,0xc2,0x35,0x65,0xd3,0xde,0xdd,0x71,0x29,0x13,0xc1,0xee,0x78,0x22,0x34,0x0b,0x77,0x3a,0x48,0x98,0x26,0x43,0xc2,0xce,0x03,0xe8,0x75,0xf8,0x8a,0xdf,0x6a,0xb0,0xb4,0x8c,0x11,0x8c,0xe5,0x95,0x96,0x17,0xfb,0x06,0x5e,0x8f,0x36,0x10,0xc5,0x04,0x43,0x1b,0xed,0xd3,0xad,0xd4,0xa4,0xe0,0x17,0x85,0xed,0x9b,0xd8,0xae,0x98,0x46 +.byte 0x58,0x57,0x0e,0x46,0xea,0x3f,0x07,0x6d,0x0e,0x46,0xda,0x2f,0x68,0x2b,0xd6,0xe7,0x0d,0x4b,0xbe,0x32,0xee,0x10,0x73,0x18,0x7d,0x6b,0x2d,0x04,0x27,0x72,0xb1,0xe1,0xbf,0x89,0xaa,0x4d,0x1a,0xfc,0xbd,0xf2,0xc3,0x9f,0xf0,0x01,0x85,0x62,0x09,0x4d,0x08,0x2c,0x57,0x9a,0x7b,0xad,0x0b,0x79,0xff,0x14,0xa1,0x45,0xde,0x21,0x8f,0xe2 +.byte 0x93,0xd0,0x35,0x26,0xc3,0xbc,0x8c,0xb7,0x57,0x6a,0xdf,0x98,0xa7,0x75,0xc6,0xf6,0x4b,0x5f,0x91,0x6e,0x71,0x3a,0x5c,0x5f,0x57,0x63,0x34,0x87,0xf8,0x20,0x6a,0xa1,0xbf,0xf8,0xca,0x8e,0xf9,0xa9,0x10,0x8b,0xab,0x0b,0xc2,0xcc,0x71,0x89,0x7c,0xef,0x70,0x3a,0xb0,0xf6,0x90,0xcc,0x6b,0x2c,0xcc,0x8b,0x2a,0x21,0x78,0x23,0xa0,0x71 +.byte 0x8c,0x7b,0xc1,0x0f,0x27,0x72,0x40,0xe4,0x9e,0x35,0xf3,0x0a,0xc0,0x7e,0x7f,0xe5,0x9b,0xdb,0x93,0x49,0x08,0xc3,0x6b,0xb7,0xea,0xea,0xd4,0x5a,0x96,0x97,0x3c,0xdf,0xc7,0x02,0x39,0x9f,0xa3,0xca,0xdd,0x62,0xf3,0x68,0xc7,0xae,0x37,0xc1,0x35,0x73,0xb2,0x5d,0x99,0xe4,0xae,0x27,0x55,0x5e,0x6a,0xae,0x6f,0x1a,0x95,0x51,0xb1,0x3b +.byte 0xd7,0xb4,0x4d,0x3d,0x88,0x54,0x01,0xbe,0x2c,0x12,0x17,0x29,0x4f,0xf3,0xed,0x5a,0x1f,0xa9,0xf0,0x67,0xbd,0x7c,0xad,0xe5,0x58,0x52,0xd4,0xd1,0xfe,0x1e,0x1b,0xd6,0xce,0x7c,0xc3,0xa2,0xa9,0x72,0x9b,0x6a,0xe5,0xf9,0x39,0x22,0xaa,0x7f,0x2e,0xa2,0x53,0x75,0xf0,0x99,0x2e,0x36,0x86,0x83,0x10,0x63,0xd7,0xac,0xa3,0x52,0xa6,0x23 +.byte 0x80,0x46,0xe4,0xa9,0x07,0x79,0xe1,0x61,0x75,0xbf,0x08,0x31,0x6c,0xdd,0xe1,0x30,0xd0,0x35,0xc2,0xbd,0x30,0xb8,0x85,0xf3,0xd2,0x2c,0x90,0x7a,0xf0,0xd3,0x80,0xe5,0xf1,0xc2,0x58,0x3d,0xf7,0x3c,0xbc,0xff,0x03,0x4d,0xf7,0xad,0x2f,0xa6,0xfe,0x73,0xde,0xa8,0x60,0xd7,0x89,0x4a,0xcf,0x3d,0xf3,0xab,0x62,0xfa,0x9d,0x46,0xad,0xd0 +.byte 0x97,0x6f,0x89,0x84,0x16,0x9b,0x84,0xb2,0x6c,0x63,0x6d,0x29,0xee,0x8e,0x97,0x3c,0x48,0x19,0x92,0x62,0xdc,0x1d,0x35,0x9d,0xec,0x01,0x00,0x64,0xbf,0x4d,0x8b,0xa3,0x13,0x48,0x9f,0xb4,0x01,0x0d,0xb1,0xc4,0xf2,0xf2,0x6a,0x84,0x1a,0x07,0x3c,0x46,0xa6,0xb5,0x41,0x9a,0x32,0x7e,0xc3,0x4f,0x87,0x95,0x71,0x7a,0xbf,0x74,0xf8,0x0b +.byte 0xfb,0xa5,0xde,0xa8,0x35,0xf1,0xcb,0x04,0x8d,0x8b,0xd3,0xb0,0xc8,0x1d,0x6c,0xaf,0xb4,0x21,0x79,0x1c,0x34,0x71,0x2f,0xf5,0xc4,0xbe,0xad,0xbc,0xaf,0x2f,0x54,0x81,0xd9,0xf8,0xff,0x59,0xf9,0x4e,0x62,0x9f,0x7d,0x7c,0xe9,0xdc,0x67,0xae,0xa3,0x32,0x4b,0xf7,0x4e,0x53,0x4c,0x55,0x7d,0xc5,0xdd,0xd4,0x5d,0x93,0xb8,0x98,0x3e,0xd3 +.byte 0x15,0x65,0x52,0x78,0x5a,0xd2,0x21,0x84,0x5d,0x28,0xaf,0x44,0x7d,0x18,0xf8,0xdd,0x5c,0xc3,0x6e,0xc8,0x05,0x05,0x30,0xd0,0x82,0xf8,0x00,0x0f,0x3d,0x5c,0x62,0x7e,0xa6,0xd5,0x7b,0x9f,0xb1,0x44,0xb7,0x0d,0x22,0x81,0xe1,0x4a,0x2b,0x79,0x7e,0x39,0x4d,0x8a,0x9a,0xfd,0x94,0x0c,0xf7,0x23,0x10,0x99,0xd2,0xd2,0x8b,0x98,0xe5,0x9d +.byte 0xb0,0xbf,0xcf,0x06,0x08,0x80,0x32,0x69,0xfd,0x81,0x5f,0xb3,0x66,0x11,0x63,0xeb,0x30,0x1d,0xcd,0x5b,0x5b,0xec,0x0c,0xca,0x30,0x37,0xa0,0x82,0x79,0x75,0x87,0xc1,0xfa,0x5b,0x38,0x4b,0xe3,0xea,0x46,0x49,0x36,0x92,0x92,0xf0,0xc9,0x15,0xa5,0xec,0x9e,0x21,0xb6,0x9f,0xb4,0x6d,0xf6,0xef,0x5c,0x2f,0x7d,0xa4,0xb3,0x25,0xfb,0x13 +.byte 0x40,0xe1,0xa0,0x20,0x4a,0x3a,0xe2,0x3e,0xf5,0xe0,0x68,0x61,0x11,0x9a,0xfb,0x1e,0xe8,0x1b,0xe0,0x17,0x9c,0x8a,0xe5,0x53,0x74,0xdd,0xec,0xc6,0x03,0xc6,0xd0,0x9b,0xc2,0x0b,0x77,0x4c,0x36,0x2b,0xac,0x4e,0x4d,0xd2,0x26,0x70,0x39,0x96,0xb4,0x11,0x1a,0x5b,0xcc,0x3f,0xb9,0xcf,0x0d,0x04,0x55,0x05,0x00,0x66,0x8f,0xa9,0xec,0x31 +.byte 0xe5,0x47,0x4c,0x9b,0xb7,0x6e,0xa5,0xe7,0x9e,0x70,0xf4,0x02,0x2a,0x3c,0xa2,0x03,0x04,0x30,0x9e,0x3f,0x7c,0xaa,0x0a,0x8f,0x55,0x61,0xca,0x50,0x35,0xe6,0xa4,0x24,0x61,0x26,0x31,0x9e,0x9e,0x77,0x0d,0x15,0x3a,0xc0,0x88,0x32,0xb5,0xbb,0x3d,0x3e,0x59,0x25,0x52,0x81,0x2e,0x4b,0xc6,0x5d,0x9f,0x87,0x0f,0x1f,0x5e,0xec,0xdd,0xbe +.byte 0x32,0x6c,0x71,0xef,0xd2,0x9c,0xfd,0x70,0xc8,0xf6,0x1f,0xb9,0xc9,0xdd,0x4d,0x39,0x61,0x92,0xbd,0x0c,0x48,0x63,0x4b,0xd2,0x2b,0x8c,0x4b,0x35,0xb1,0x8e,0x04,0x44,0x3c,0xe1,0xde,0xfd,0x6e,0xde,0xeb,0x94,0x51,0xea,0x36,0x7b,0xc6,0x87,0x15,0x34,0x68,0xa0,0xb8,0x94,0xb6,0x56,0x33,0xf4,0xab,0x84,0xed,0x1c,0x36,0x91,0xa7,0x1b +.byte 0x03,0xca,0x48,0x64,0x16,0x5b,0x4b,0x69,0x47,0xae,0xd7,0xc9,0xcf,0x74,0xd2,0xbd,0x60,0x04,0x7c,0x66,0xe9,0x12,0x92,0x40,0x78,0x23,0x0b,0x5b,0xa0,0xda,0xf7,0xe4,0x9a,0xad,0x9c,0x31,0xe7,0xaa,0xad,0x5a,0xc3,0x45,0x00,0x6c,0xd3,0x4d,0x93,0xdf,0xb6,0x68,0x11,0x3f,0x2a,0xbc,0x9a,0x8d,0xeb,0x0f,0xb5,0xa9,0x8e,0xa5,0x2c,0x99 +.byte 0x94,0x8d,0x21,0xa9,0x41,0x6b,0x11,0x2e,0x02,0x21,0xd8,0xc1,0xbc,0xf0,0x2a,0x87,0xae,0x35,0xa9,0x78,0x5c,0x43,0xb8,0xb7,0x63,0x2d,0x09,0x31,0xae,0x6f,0xfc,0x39,0x7b,0x18,0xc3,0xce,0xe3,0xfa,0x51,0x70,0xc7,0x6b,0x5e,0xc3,0xce,0xc8,0xa2,0x3a,0x66,0x9e,0xfe,0x45,0xb4,0xa2,0xaf,0x81,0x03,0x74,0xbf,0x0c,0x65,0x4c,0x30,0x27 +.byte 0xd5,0x34,0x29,0x2d,0x83,0xa8,0xb9,0x1d,0xf8,0x12,0x09,0x51,0xdd,0x0e,0x66,0x95,0xf3,0x94,0xaa,0x83,0x3a,0x6f,0x8a,0x7c,0x3a,0x29,0x82,0xbb,0x80,0xa1,0x37,0x8c,0x79,0xf4,0x4a,0xa8,0xe4,0x17,0x72,0x77,0xee,0xc4,0xaa,0x25,0xd3,0x8f,0x2e,0xaf,0xb9,0xb2,0x3c,0xa6,0xd5,0x72,0x97,0x07,0x23,0x38,0xae,0x9e,0x22,0x08,0x85,0x70 +.byte 0xfa,0xff,0x38,0xe6,0x96,0x9f,0x2c,0x11,0x14,0x16,0x9a,0xfa,0x5a,0x7b,0x05,0x31,0x3e,0x20,0xbf,0x4d,0x87,0xaa,0xba,0x94,0xcd,0xdb,0xeb,0xec,0x29,0x58,0x4e,0x43,0x12,0xe8,0xf9,0x01,0x50,0xc8,0x51,0x7a,0x61,0x12,0xe9,0xed,0xc2,0xd6,0x2e,0xd3,0xed,0x54,0x72,0xf7,0x1b,0x0c,0x8c,0xb4,0x65,0xea,0x22,0x31,0x22,0xeb,0xcd,0x53 +.byte 0x66,0xf1,0xa5,0x34,0xe9,0x81,0x74,0xcb,0xb5,0x6b,0x45,0x71,0x69,0x6d,0x84,0xe8,0xc6,0x86,0xc9,0xdd,0x0c,0xa4,0x30,0x12,0x08,0x42,0x10,0x6b,0xcd,0x65,0x6c,0xfd,0x9c,0xde,0x77,0x3c,0x32,0x09,0xef,0x99,0x27,0x0e,0x4a,0x72,0x03,0x8d,0xb5,0x68,0xa0,0x67,0xf7,0xc2,0xae,0xb8,0xce,0x41,0x70,0x4e,0xdd,0x13,0xcb,0x3f,0x05,0x4e +.byte 0xf4,0xbc,0x88,0x98,0x2f,0x42,0x4e,0x5f,0x3e,0xcb,0x2c,0xd3,0x2f,0xb8,0x92,0xbb,0xd8,0x95,0xc8,0xaf,0xa9,0x44,0x8b,0xf0,0x2f,0x81,0xd4,0xe7,0x06,0x19,0xf7,0xa7,0x0a,0x73,0x3e,0x30,0xd9,0x00,0xe4,0x2d,0x76,0xb1,0x0d,0xfa,0x12,0x1f,0xbe,0x59,0x4f,0xf7,0xc8,0x5b,0xab,0xd7,0x16,0x3d,0x7e,0x97,0x9e,0xec,0xf8,0xcb,0x31,0x2e +.byte 0xe0,0x41,0x0b,0x00,0xa6,0x6d,0xe9,0x5e,0xd5,0x4a,0xc5,0xbf,0x1c,0xcc,0xa5,0x71,0x94,0x29,0x3d,0x17,0x43,0x27,0x63,0xc4,0xc7,0x8f,0x1b,0xb7,0x5f,0xcf,0xdf,0x8e,0x6a,0x69,0x87,0xc1,0x29,0xab,0x7b,0x8d,0xdf,0x07,0x95,0x50,0xa3,0x1c,0x8e,0xdc,0x7f,0x8a,0x21,0x37,0x1e,0x26,0xa7,0x67,0x28,0xb2,0xc8,0x23,0x5a,0x1d,0x94,0x46 +.byte 0x1b,0x3e,0x72,0x87,0x73,0x08,0xe2,0x3b,0x46,0x51,0xbe,0x5b,0xa9,0x72,0xb9,0xf8,0x45,0x6d,0x0c,0x89,0x80,0x0d,0x7a,0xfb,0x4c,0x3f,0x7f,0x3d,0x29,0xff,0xef,0xb2,0xec,0x23,0xc2,0x26,0xcf,0x8c,0x2e,0x28,0xbf,0xc5,0x68,0x47,0xd9,0x49,0x95,0xf1,0x67,0x7e,0x3a,0x48,0xe2,0x43,0x5c,0xc8,0x95,0x5b,0xb2,0xf3,0x22,0xc9,0x73,0x91 +.byte 0xb5,0x78,0x96,0x1b,0x9a,0x75,0x5f,0xb2,0x6b,0x8c,0x66,0x8c,0x8e,0xc1,0xe1,0xde,0xd6,0x64,0x31,0xe1,0x7b,0x12,0xd2,0x85,0x8f,0x52,0x68,0xec,0x80,0x26,0x3d,0xcc,0x9b,0xe3,0x57,0xbe,0x19,0x42,0xb9,0xdd,0x7d,0x2b,0x5b,0x6d,0x1b,0x9e,0x96,0xd7,0x75,0x83,0x82,0x3c,0x3e,0x5f,0xf8,0xa9,0x36,0xbe,0x14,0xc7,0xce,0x9d,0x05,0x7e +.byte 0xd7,0x38,0x37,0x35,0xc9,0x37,0x8b,0x9f,0xc6,0x2d,0xff,0x00,0x41,0xff,0x1b,0x09,0xea,0xd2,0xb0,0x04,0x48,0xff,0xfc,0xb5,0x67,0x54,0x39,0x3d,0x23,0x68,0x0b,0x7d,0x97,0xf3,0x65,0x20,0xa2,0xf8,0x33,0x96,0xd1,0xf4,0xc7,0xba,0x6f,0x00,0x95,0x36,0xf6,0x33,0xd1,0x8d,0xde,0xee,0x1e,0xfa,0x60,0x8e,0x5e,0x4c,0x70,0xbb,0x53,0x79 +.byte 0xc9,0x9a,0xdf,0x3c,0x53,0xe4,0x35,0x87,0xc3,0xe6,0x8e,0x0e,0x1a,0xd0,0xf8,0x57,0x2b,0x33,0x51,0x4d,0x7d,0x43,0x17,0x3e,0x6f,0x0e,0xca,0x86,0xb2,0xc6,0x09,0xf3,0x2f,0xc1,0x5f,0x0e,0x9a,0x5e,0x7d,0x9d,0xf7,0xff,0x09,0x46,0xe5,0x30,0x91,0x61,0x93,0xb5,0x2f,0xc5,0x7f,0x09,0x0b,0x55,0x94,0x17,0x25,0x19,0x9b,0xa9,0x0e,0x68 +.byte 0x71,0x18,0x1b,0x4b,0x1b,0xa3,0x75,0x90,0x56,0x96,0x5e,0x33,0x71,0xf2,0x06,0x69,0x07,0x04,0xcb,0x8c,0x79,0x9b,0xa5,0x17,0xd8,0xd8,0x77,0xc7,0xca,0x95,0x58,0x12,0xec,0xdd,0x41,0xc9,0x12,0x16,0x9a,0xc4,0xf0,0x27,0x7a,0x8e,0xeb,0x19,0x79,0x27,0x7b,0x2e,0x55,0x96,0x57,0x19,0xbe,0x55,0x8c,0x7f,0x97,0x90,0x80,0x40,0x5d,0x5a +.byte 0xf6,0x07,0xd6,0xb4,0xc5,0xe8,0x0e,0x54,0xde,0x78,0x23,0xca,0x39,0x90,0x42,0xb6,0x8b,0x14,0x22,0x06,0x71,0x77,0xd5,0xf7,0x8d,0x05,0x9d,0xbf,0xfe,0x38,0x91,0xba,0x79,0x85,0x30,0x47,0x25,0xf0,0xa2,0x72,0x55,0x94,0x2a,0x8a,0xc8,0x28,0xc8,0xa9,0x23,0xab,0xf0,0x4e,0x49,0x2f,0x58,0x53,0x35,0xd1,0xb6,0x16,0x81,0xc2,0x25,0x18 +.byte 0xd9,0x71,0x91,0xc4,0x81,0x3e,0xf4,0xd7,0x87,0x9e,0x57,0x78,0xf7,0x7d,0x4b,0xb2,0xfd,0x91,0x9f,0xa8,0x0e,0x77,0xb3,0xc7,0xe5,0x6a,0x95,0x17,0xc3,0xf4,0xcb,0x7f,0x96,0xc1,0xa8,0xee,0x6a,0x0f,0x1f,0x5d,0x20,0x28,0x93,0xe5,0xf3,0x13,0x46,0x53,0x47,0x9f,0x98,0xc6,0xf5,0x29,0x69,0xb9,0x83,0x36,0x03,0xa1,0x9a,0xb4,0xa9,0x4e +.byte 0xd6,0xda,0x25,0xe2,0x5b,0xbb,0x95,0xdf,0x0f,0x37,0x0b,0x02,0x51,0x03,0xd1,0x0e,0x84,0xef,0xdd,0x85,0xdd,0xae,0x10,0x32,0x65,0x03,0x65,0xf0,0x8e,0x0c,0x69,0x90,0x35,0x26,0x36,0xe8,0x05,0x46,0xe6,0xce,0x52,0x4d,0xb5,0x93,0x9f,0xe3,0xe5,0xb0,0x43,0x57,0x32,0x5d,0xca,0xd4,0xc9,0x89,0x2e,0x5b,0x03,0x8a,0x82,0x78,0x21,0x6b +.byte 0x41,0xa9,0x0a,0x9f,0xe0,0x50,0xec,0x72,0x01,0x67,0xe7,0x1c,0x92,0xe3,0xe4,0x83,0x4d,0x4b,0xcf,0x01,0x37,0x2f,0x34,0x86,0xcf,0x36,0xf7,0x3a,0x57,0xa3,0x89,0x73,0x0f,0x9c,0x06,0x82,0x75,0x7a,0x4b,0xd8,0x44,0x40,0xf2,0xc5,0xc4,0x22,0xa6,0x99,0x1b,0x73,0x2f,0xad,0x09,0xe9,0x84,0x6f,0xc3,0xca,0x72,0x3a,0x8a,0x55,0x55,0x0a +.byte 0xcd,0x33,0x51,0xef,0x5b,0x36,0x77,0x6c,0xb4,0x4a,0xae,0xdd,0xbd,0xec,0x65,0x99,0x43,0xd6,0x8a,0x16,0xba,0x89,0x4d,0x0c,0x11,0xb4,0x0d,0x5d,0x3e,0x76,0xcb,0x48,0x9d,0x31,0x40,0x71,0xe2,0xe4,0xa9,0xd9,0x6e,0x3c,0x3d,0xd1,0x6e,0xaf,0xb9,0x28,0x71,0x5a,0x07,0x6f,0xab,0xdb,0xf8,0x4f,0x11,0xbc,0xe0,0x14,0x01,0x43,0x4d,0xe2 +.byte 0xad,0x5d,0x2a,0xb2,0x58,0x66,0x05,0x50,0x66,0xf6,0x2f,0x66,0x11,0xd1,0xd7,0x05,0x85,0xb0,0x7f,0xa8,0x89,0xbd,0x41,0xda,0x35,0x1e,0xbb,0xff,0x70,0x1a,0xe8,0x65,0x96,0xe9,0x50,0x18,0x7f,0x4c,0xb2,0xe2,0x95,0x26,0xf6,0x37,0x09,0x8c,0x8d,0x7b,0x02,0xb0,0x7f,0x32,0xb5,0x70,0x22,0xd6,0x83,0x0b,0x85,0x25,0x00,0xc5,0x55,0x3f +.byte 0xfa,0x7a,0xc9,0xaf,0x87,0xc1,0x1c,0x11,0x96,0x71,0x18,0xd8,0xdb,0xab,0x86,0x57,0x0a,0x16,0x23,0x32,0x40,0xd3,0xaf,0x17,0x55,0xe3,0xe7,0x01,0x65,0x1f,0x87,0xda,0xb5,0x46,0x67,0x18,0x34,0xcc,0x28,0x77,0xc3,0x12,0x62,0x6c,0x8b,0x8a,0x11,0x7a,0x5a,0xd1,0xdf,0xb3,0x13,0x6b,0x29,0xce,0xf8,0x03,0xba,0xad,0x7c,0x14,0x60,0x42 +.byte 0x17,0xf6,0x7b,0x0c,0xb7,0x5f,0xd6,0xc1,0xb5,0xa5,0x2b,0xb1,0x9f,0x6c,0x65,0x29,0xe5,0xf4,0x84,0x85,0x11,0x82,0xf1,0x4c,0xcd,0xff,0x99,0x29,0x53,0x7b,0x43,0x04,0x60,0xc4,0x6c,0x01,0x5c,0xcb,0x33,0x4f,0xdb,0xc4,0xad,0x8c,0xea,0xff,0xd6,0xcd,0x8e,0x85,0x6e,0x54,0xd5,0x18,0x63,0x84,0x78,0xea,0xff,0x08,0x95,0xdc,0x2a,0x07 +.byte 0xac,0xea,0x44,0x79,0x52,0x07,0xf3,0xf1,0x03,0x7f,0x71,0x53,0xd8,0x85,0xdb,0x70,0xde,0x5e,0xd5,0x9a,0x18,0x9f,0xcc,0x3f,0xc0,0xc0,0x49,0x82,0x70,0x09,0xce,0x29,0x04,0x0a,0x19,0x81,0xd9,0x81,0x22,0x71,0x48,0x8e,0x79,0x08,0x1c,0xb4,0xc8,0x7e,0x60,0x43,0x4a,0xe3,0xd5,0x6b,0x09,0x5c,0x01,0x6e,0x20,0x9e,0xd2,0xaf,0x80,0xb7 +.byte 0xa2,0x0a,0x5b,0x26,0x08,0x32,0x73,0xbc,0xc6,0xfd,0x06,0xaa,0x2e,0x55,0xa0,0x5b,0xa9,0x3c,0x85,0xb2,0x04,0xdc,0x9a,0x94,0x02,0x93,0x96,0x6b,0x3e,0xc3,0x5e,0x37,0x9b,0x6f,0xef,0xb9,0x65,0x52,0x42,0x1c,0xa7,0x84,0x09,0x0c,0x49,0x3a,0x95,0x06,0x94,0xd7,0xc7,0x40,0xf5,0xf1,0x69,0x41,0xfb,0xf8,0x57,0xb5,0x1e,0x0c,0xf3,0xd9 +.byte 0xb1,0x2e,0x58,0x33,0xbe,0xb1,0x3d,0x61,0xc6,0xca,0x01,0xe5,0xda,0x60,0x8f,0x87,0xf7,0x9a,0xb5,0x92,0xb4,0x8c,0x2a,0xaf,0xd4,0x1e,0x9c,0x97,0x39,0x83,0x99,0x4a,0x07,0x54,0x75,0x7d,0xde,0x72,0x06,0xc1,0x8f,0xb4,0xde,0x12,0x43,0xf2,0x62,0xae,0xe7,0xec,0xfe,0xb2,0xe5,0x63,0x35,0xb7,0xee,0xaa,0xf0,0x09,0xb8,0x61,0xf2,0x42 +.byte 0x28,0x87,0xd7,0x47,0xa8,0xfc,0x51,0x85,0x6f,0xa2,0xb1,0xa6,0x82,0xd6,0x0e,0x1b,0x3f,0xea,0xa1,0xe1,0x91,0xc9,0xd2,0x5b,0x3e,0xff,0x18,0x39,0x14,0xe0,0x44,0xda,0x3d,0xd8,0xca,0xdb,0xd9,0xbf,0x3f,0xa4,0xdb,0x99,0x2e,0x31,0x32,0x7c,0xf4,0x61,0x2f,0xa1,0xf9,0xa9,0xbe,0x26,0x94,0xea,0xb4,0xe3,0x25,0x8d,0x93,0x3b,0xa1,0x7e +.byte 0x1e,0x99,0x87,0x6c,0xaf,0x14,0x54,0xd0,0xc0,0x37,0x39,0x76,0x3c,0x07,0x2e,0xce,0x98,0x25,0x81,0xe4,0x01,0x0c,0x07,0x79,0x4e,0xcd,0x82,0x44,0x83,0x04,0x07,0xa6,0x52,0xb7,0x96,0x7c,0x43,0x12,0xe1,0xc5,0x12,0x18,0x25,0x47,0xe4,0x19,0x6d,0x26,0x1e,0x55,0x66,0xca,0x28,0x4c,0xfa,0xd2,0xd9,0xcc,0x7e,0xad,0x9f,0x2a,0x2f,0xc6 +.byte 0x6c,0x77,0xaa,0x0f,0x5b,0xeb,0x15,0x97,0x62,0x52,0x3c,0x6f,0x4b,0xf3,0xcc,0x80,0x7b,0x1f,0x1d,0x58,0xf8,0xfe,0xc1,0x8c,0x3b,0xe3,0xd7,0x05,0xc3,0xd6,0xa9,0xda,0xcf,0x85,0x1c,0x68,0xd6,0x6d,0x2b,0x06,0x30,0x5f,0x58,0x39,0xea,0xfa,0x99,0xaa,0x04,0x10,0x05,0xaf,0xb0,0xf7,0x32,0x60,0x8d,0xe4,0xd1,0x40,0x32,0xd6,0xa3,0xf2 +.byte 0xba,0x5a,0x79,0x58,0x92,0x75,0xf0,0x3a,0xce,0xb2,0xee,0x66,0x3e,0xe3,0xbe,0x4d,0x53,0x9d,0xbb,0xdb,0x45,0xf0,0x09,0xeb,0xd5,0x83,0x39,0x20,0x06,0xa9,0x44,0x35,0xeb,0x6d,0x9b,0xd9,0xa4,0xda,0x4b,0x9d,0xde,0x3d,0x26,0xa2,0x2d,0xcf,0x8e,0x3e,0xbc,0xb4,0x8c,0x3a,0xbf,0x56,0x7c,0x48,0x50,0xb5,0xc5,0xbe,0x84,0x5e,0x63,0x82 +.byte 0x5f,0x87,0x77,0x4a,0xa7,0xf6,0x66,0x07,0x42,0x6a,0xb0,0xcf,0x19,0xaf,0x6c,0x16,0x85,0x78,0x88,0x3b,0xa5,0xbc,0x42,0xd2,0x4c,0xdf,0x51,0x3b,0xc4,0x0e,0xf5,0xc5,0x70,0x57,0x40,0xf6,0xed,0xd2,0x37,0x3e,0x14,0x0c,0x31,0xda,0x94,0x87,0x6b,0xd9,0x8c,0x15,0x41,0xa9,0xc0,0x2a,0x61,0xd3,0x52,0xe0,0xb6,0x0a,0x83,0x6b,0x75,0x1b +.byte 0x1e,0xd1,0x7f,0x26,0x19,0x34,0x9b,0x70,0xc9,0xba,0xdc,0xa2,0x03,0x6d,0xc7,0xac,0xbd,0x2c,0x63,0x8a,0x7b,0xb1,0x62,0x51,0xc1,0x1d,0x54,0x0d,0x34,0x0e,0xfb,0xa6,0xb8,0x9d,0x79,0x4f,0xc3,0xaa,0x8d,0xa0,0xcc,0x80,0x96,0x86,0x37,0xd6,0x80,0x9c,0x3d,0x91,0xd0,0xe7,0xe2,0xb4,0x00,0xba,0x86,0xe9,0xeb,0x86,0xea,0x84,0x78,0x81 +.byte 0x20,0x29,0x28,0x02,0x4d,0xd8,0x1b,0x5e,0x4f,0x41,0xfc,0x13,0x3e,0x4c,0x7f,0x64,0x55,0x35,0x41,0x0d,0x74,0xc5,0x6a,0x7c,0x37,0x82,0x41,0xbd,0x67,0x39,0xd9,0x83,0xfa,0x7f,0x8c,0xe1,0x9f,0x23,0x0d,0xe4,0x1d,0x40,0xe6,0x6e,0x94,0x5d,0xec,0x77,0xf7,0x5e,0xb4,0xa1,0x03,0xfb,0xa0,0x0e,0xba,0xf8,0x28,0x50,0x3c,0x38,0x47,0xf7 +.byte 0xed,0x2d,0xe5,0x0b,0xa8,0x7a,0xbd,0xbf,0x7e,0x38,0xc0,0x60,0xe7,0x7e,0xb1,0x03,0xef,0x4a,0x8c,0xc7,0x98,0xf1,0x94,0xf6,0xa0,0x50,0xb2,0x0b,0x7c,0x66,0x0a,0x62,0x10,0x24,0xb0,0xa1,0x69,0x02,0x33,0x79,0xbf,0xd0,0xb5,0xcb,0x17,0x20,0x55,0x02,0x70,0x44,0x5b,0xac,0x20,0x35,0xea,0x05,0x2d,0x68,0x51,0xe7,0x5f,0x1b,0xcd,0x4c +.byte 0x33,0x4d,0x04,0x21,0xfd,0x06,0x67,0x82,0x60,0x98,0x1f,0x79,0xf4,0x28,0xe0,0xa8,0x18,0xeb,0xf5,0x86,0x58,0xe6,0x9f,0xb5,0x29,0x0f,0xe8,0x37,0xeb,0x09,0xf4,0xc6,0x08,0xf2,0xde,0x4d,0x96,0x48,0x62,0x36,0x63,0x10,0x3f,0x63,0xeb,0x44,0x84,0xc8,0xf5,0x74,0x19,0x03,0x50,0xf7,0x7c,0xd2,0x06,0x20,0x6e,0x9b,0xa2,0x37,0xb0,0x68 +.byte 0x78,0x31,0xb6,0x05,0xfa,0xc9,0xcd,0x1d,0x4c,0xbd,0x33,0xb7,0xf3,0x93,0x38,0x7d,0x5f,0x00,0x85,0x5b,0x10,0x7f,0xc4,0x3f,0x3e,0xfe,0x62,0xca,0x51,0x83,0x95,0xcf,0x00,0x65,0x83,0x0e,0xd3,0x78,0xd0,0x51,0xcb,0x70,0x34,0x42,0xc6,0x3a,0x04,0xb9,0x10,0x92,0xe0,0x09,0x06,0xb0,0x66,0x9b,0x37,0x02,0x8d,0x0d,0x3e,0x2f,0xc5,0x17 +.byte 0x6a,0x87,0x7d,0x48,0xa4,0xcc,0x55,0x20,0x7b,0x77,0x07,0xcf,0x44,0x2f,0x88,0x8a,0xcc,0xf2,0x5d,0xa6,0x3e,0x5f,0xda,0xe2,0xde,0xd2,0x7f,0x7f,0xb7,0x90,0x53,0x64,0x6b,0x79,0x42,0x52,0x69,0xc6,0xd6,0xaa,0x9f,0xf9,0x19,0xbe,0x65,0x10,0x99,0x49,0xaf,0x36,0x49,0x1b,0x8a,0x3d,0x7f,0xdb,0xa2,0x1a,0xb5,0xd6,0x34,0x51,0xc8,0xc8 +.byte 0x06,0xca,0xf6,0xb8,0x76,0xa8,0x9d,0x43,0xae,0xf0,0x51,0xe5,0x9a,0x42,0xa2,0x83,0xed,0x20,0x8d,0xe8,0x1c,0xca,0x15,0x4e,0x37,0x3f,0xd8,0x06,0xa0,0xe1,0xf8,0x05,0xfd,0x42,0xf3,0x7a,0x96,0x44,0x36,0x02,0xca,0x11,0x2a,0xc3,0x24,0x58,0xdd,0x85,0x55,0xb2,0xe5,0x1d,0x92,0xc2,0x2d,0x5f,0x7c,0xb5,0x02,0x37,0x7c,0x07,0x35,0x25 +.byte 0x2b,0x33,0x80,0xe2,0xd4,0xfd,0xc7,0xa7,0x19,0x7e,0xba,0x36,0xaf,0xa0,0x4e,0xab,0x8b,0x28,0x4f,0x3b,0x92,0x72,0x42,0x49,0xaa,0x3b,0x08,0x0f,0x1e,0xff,0x2d,0xbf,0x9c,0x48,0x16,0x72,0xbe,0x28,0x05,0x8b,0x3a,0x20,0x6b,0x38,0x43,0xa2,0x35,0xea,0xf7,0x4e,0x50,0xa0,0x43,0x40,0x5c,0xbf,0xe5,0x75,0x13,0x4c,0x36,0x61,0xa1,0x5d +.byte 0x46,0xd7,0x7a,0x94,0x06,0x2f,0x63,0x32,0x9c,0x6e,0x54,0x18,0x31,0x79,0xf2,0x83,0xcf,0xb4,0x47,0x40,0xe5,0x9a,0xd6,0x99,0x12,0xb3,0x61,0x3d,0x0f,0x5e,0xc8,0x95,0xa3,0x5f,0xc3,0xd5,0x6b,0x6e,0xa0,0xf2,0x2f,0xeb,0x66,0xd0,0x68,0x67,0x10,0x85,0x64,0x27,0xd8,0xb8,0x68,0x00,0x36,0xa5,0xab,0x3e,0xe1,0x43,0x65,0x81,0x2d,0xb9 +.byte 0x0f,0x87,0xfe,0xa1,0x52,0xe9,0x8d,0x82,0x3a,0xd1,0x10,0x52,0x34,0x48,0x7c,0x1c,0xc6,0xd0,0xfe,0xa0,0x1a,0x92,0x07,0x88,0x57,0x9e,0xd7,0x5e,0x9f,0xc8,0xb0,0x93,0x73,0x03,0x28,0x36,0x8c,0x25,0x8c,0x0f,0x4e,0x0f,0x5b,0x26,0x58,0xed,0x5c,0x33,0x75,0x20,0x08,0x11,0x47,0xe1,0x47,0x85,0x47,0xeb,0x54,0xbf,0x58,0xe3,0xd4,0x5b +.byte 0xf9,0xc6,0x5e,0x42,0x58,0xe6,0xaf,0x79,0x66,0x3c,0xa5,0xa3,0x30,0x33,0xe3,0xbe,0x21,0x4b,0x42,0x98,0x6e,0x44,0xd7,0x68,0xc0,0xff,0xbe,0x7f,0xc5,0xb3,0x4f,0x4a,0x93,0xb0,0x11,0x88,0xcf,0x36,0xb2,0x03,0xbe,0x30,0x52,0x71,0x20,0x0d,0x16,0xc5,0xbb,0xf5,0x92,0x12,0x67,0x6a,0x35,0x66,0x00,0x09,0xd7,0xc6,0x67,0xb0,0x6a,0x04 +.byte 0x19,0x3e,0xbf,0xe2,0x82,0x74,0x78,0x2f,0x77,0x44,0xdc,0xad,0x0f,0x66,0x2a,0x23,0x62,0x2c,0x5a,0x4e,0x3a,0x82,0x2a,0x75,0x16,0x0d,0x74,0x64,0x35,0x53,0xc5,0xf6,0xda,0x36,0x44,0xba,0xe2,0xfa,0x1e,0xc2,0xcf,0x29,0x01,0x36,0x66,0xc3,0xca,0x40,0xf7,0xc4,0xba,0x67,0xac,0xf6,0x17,0xcc,0xa3,0x96,0x2d,0x08,0x5f,0x0a,0xea,0x5e +.byte 0x97,0xdc,0xc8,0xf9,0x59,0x24,0x6e,0xc5,0x0b,0x02,0xb9,0x1a,0xde,0xac,0x60,0x1d,0xaf,0x9f,0x5a,0x6f,0xe1,0xa6,0xdf,0x75,0xc5,0x9b,0xb7,0xde,0xa4,0xf7,0xf6,0xa4,0xdc,0xb6,0x96,0x08,0xde,0x2a,0x0e,0xb3,0x9d,0xf5,0x75,0x7d,0x7e,0x96,0x91,0x79,0xd4,0xa7,0x30,0x97,0x3a,0xbd,0x7c,0xe0,0xc5,0x87,0x24,0xb0,0x65,0xb7,0x58,0x00 +.byte 0xd9,0x0e,0x97,0xa6,0xa4,0x6a,0xe8,0x0a,0xac,0xac,0x9f,0x3a,0xe3,0x2a,0x9a,0x43,0x41,0x92,0x6e,0x0e,0xc4,0x63,0xc3,0x18,0xb6,0xe1,0xef,0x3d,0xe8,0x0b,0xb0,0x9f,0x2e,0x19,0xa0,0x98,0x98,0x34,0xf8,0x86,0x6d,0xc5,0x8c,0x41,0x26,0xb7,0xf2,0x1d,0xd4,0x72,0x39,0xeb,0x79,0x06,0xaf,0x53,0xaa,0x34,0x80,0x53,0xf8,0x1b,0xf4,0x53 +.byte 0x19,0xfa,0x16,0x8b,0x39,0xea,0x63,0x7f,0x38,0xc4,0x66,0x1d,0xd1,0x90,0xe4,0x2f,0x20,0x43,0x0d,0x5f,0x98,0xcc,0xae,0xef,0x86,0xc8,0xe5,0xf6,0xd2,0xa5,0x49,0xd0,0x3f,0xb5,0x7e,0x42,0xb5,0x6e,0x5e,0x13,0xa5,0xb4,0x71,0x2c,0x5d,0x57,0x24,0x06,0xd2,0x29,0x7c,0x4c,0x90,0xb6,0xea,0xdb,0x62,0xa4,0x2c,0x6c,0x38,0x57,0x97,0xbd +.byte 0xfd,0x41,0x6e,0x26,0xc1,0xe1,0x6b,0xbb,0xf0,0xe7,0x71,0xf1,0xcf,0x6a,0x7f,0xfa,0xe7,0xfb,0x17,0xe7,0x81,0x19,0x9a,0xf2,0xf6,0x86,0x22,0x4f,0x62,0x59,0xd6,0xc2,0x33,0xbd,0x11,0xe7,0x07,0x3a,0xfe,0x74,0x0d,0xf8,0xd9,0xdb,0xbd,0x05,0xf4,0xf4,0xb1,0x41,0xc9,0xb3,0xf8,0x6a,0x7b,0x98,0x08,0x6c,0xce,0x4c,0x28,0xbf,0x8c,0x77 +.byte 0x68,0xdc,0xee,0xf7,0x11,0xde,0xfc,0x5a,0x58,0x4f,0xf4,0x74,0x9d,0x5b,0x78,0xc3,0x78,0xe5,0x5e,0x26,0x83,0x40,0x17,0x80,0x2a,0x02,0xa4,0xf1,0x0f,0xa0,0xc8,0x22,0xe6,0x09,0x3a,0x52,0x74,0xf0,0xb9,0xb9,0x60,0xaf,0x20,0xa6,0x7e,0x88,0xf4,0xc2,0x38,0xa2,0x21,0x73,0xa9,0x18,0x3f,0x7a,0x04,0x7b,0xc4,0xcd,0x68,0xd9,0x83,0xa4 +.byte 0x8e,0x54,0x0d,0xbc,0xee,0x8b,0x39,0x93,0x66,0xa2,0xd6,0x76,0x4a,0xb2,0x33,0x4f,0x61,0x53,0xde,0x3b,0xff,0x47,0xcb,0x87,0xd9,0x21,0xd0,0x82,0x64,0x54,0xdf,0xf2,0x67,0x62,0x40,0x33,0xc7,0x0d,0xea,0x98,0xaa,0x95,0xfb,0xa9,0x0e,0x90,0xa5,0xd9,0x54,0x81,0x86,0xad,0x9e,0xa4,0x4d,0x36,0xe1,0x77,0xf2,0xe3,0x0a,0x54,0x1a,0x57 +.byte 0x9d,0x62,0x5e,0x0e,0x00,0xc8,0xa6,0x1e,0xf3,0x43,0xe6,0x20,0x0d,0x6a,0x8e,0x90,0x1d,0x4d,0xac,0x2f,0x9f,0x1c,0xb7,0x30,0xec,0x5c,0x99,0x78,0x6f,0x3b,0xe7,0xe0,0x28,0xb9,0x97,0xc5,0x6a,0xf2,0x17,0xc2,0x11,0xac,0x1a,0xe2,0xca,0x57,0x49,0x64,0xc8,0xc7,0x66,0x43,0x8d,0xc8,0xa7,0x0e,0xfc,0xcf,0x05,0x2f,0xae,0x4b,0xfe,0xe4 +.byte 0xbe,0x9c,0xe7,0xe6,0xa8,0x36,0x49,0x0d,0x9c,0x60,0x39,0x0c,0xfd,0x41,0x5b,0xc7,0xa4,0xa5,0x30,0x89,0xe5,0x10,0xf6,0xea,0xf8,0x2c,0xf2,0x3e,0xb1,0x96,0x81,0xa7,0x32,0x8b,0x39,0x14,0x15,0x36,0xfc,0x55,0x3c,0x22,0xcf,0xa3,0x98,0x90,0x68,0x13,0xd8,0x3f,0xf2,0x53,0x19,0x3e,0x9a,0x0c,0x1f,0xc6,0x29,0x43,0x46,0x23,0x58,0xea +.byte 0x49,0x49,0x15,0x46,0x8e,0x63,0x30,0x1f,0x3e,0x2a,0xa0,0x18,0xfd,0x28,0xc5,0x32,0x77,0x75,0xac,0x6e,0x5d,0x39,0xa9,0x44,0xce,0xfe,0x39,0xa6,0xec,0xde,0x69,0xde,0xfa,0xc8,0x40,0x44,0x34,0x29,0x15,0x19,0xa7,0xbe,0xd6,0x5b,0xfd,0x1f,0x7b,0xb9,0x88,0xf1,0x14,0xcf,0x42,0xc5,0xa7,0xa7,0x0e,0x6b,0x6e,0x86,0xb2,0x7c,0x23,0x8e +.byte 0xf6,0xae,0xde,0x3c,0xd7,0x26,0x5e,0xde,0x31,0x94,0xc1,0x19,0x65,0x55,0x03,0x73,0xba,0xdc,0x69,0x95,0x9c,0x9d,0x8e,0x59,0xd8,0x51,0x61,0x9f,0x8f,0xf4,0x29,0x43,0x4b,0x6a,0x75,0xb3,0x4b,0x9d,0xcc,0x46,0xd2,0x6e,0x00,0x49,0x4f,0xf0,0xac,0x80,0x55,0xc0,0x0c,0xbf,0x18,0x52,0x75,0x76,0x3b,0xac,0x92,0x83,0x69,0x1b,0xb4,0x15 +.byte 0xe5,0x9e,0xde,0x10,0x30,0x30,0x0e,0x85,0xc7,0xf9,0xae,0xbc,0x9e,0xaf,0x4b,0xee,0x27,0x6b,0xa5,0x6d,0xe4,0x8e,0xed,0xdd,0x95,0xaa,0x85,0xe2,0xf5,0x38,0x15,0x50,0xd3,0xcd,0x2c,0x88,0x6c,0x2b,0x14,0x37,0x74,0x2d,0x6d,0x30,0xec,0x96,0x78,0xae,0x80,0xb3,0xd9,0x84,0xc1,0xd6,0x71,0x90,0xe4,0x8d,0x3a,0x7c,0x9c,0xc4,0xf5,0xa0 +.byte 0x20,0x7e,0xa2,0x0e,0x75,0x7c,0x25,0x7a,0x7e,0x2b,0x2e,0xdb,0x12,0x23,0x73,0x6a,0x8e,0xe3,0xd7,0x47,0x94,0xfb,0xcc,0xe4,0x5a,0x8c,0xfb,0xdc,0x46,0xb3,0x4a,0x42,0x15,0xe0,0xaf,0x6e,0x81,0x72,0x72,0x04,0x52,0x09,0xc5,0x8b,0x6e,0xdd,0x7d,0xff,0x27,0xa8,0xc1,0x94,0xb5,0x33,0x59,0xc2,0x7d,0x59,0x6c,0x3c,0xaa,0xd9,0xd8,0x05 +.byte 0x43,0x7e,0x8a,0x47,0xdd,0x76,0x36,0xe3,0x05,0x49,0xd1,0x8f,0xdf,0x45,0x46,0x63,0xff,0x17,0xb4,0x52,0xc8,0xee,0x4d,0xf5,0x74,0x65,0xc6,0xca,0x19,0xfd,0xb9,0x51,0xc8,0xc9,0x96,0xd4,0x06,0xd4,0x09,0x1e,0xab,0x6d,0x1b,0x26,0x61,0x80,0x5b,0xa8,0xcb,0x62,0x92,0x5a,0x1a,0x8e,0xa4,0xb7,0x25,0x19,0x96,0x63,0xd5,0xc3,0xc9,0xdc +.byte 0x04,0x83,0x62,0x31,0xe3,0x76,0x00,0x4d,0xf8,0xb3,0x98,0xae,0x4d,0x1a,0x38,0xe3,0xa1,0x27,0x52,0x87,0xbe,0x2c,0x93,0x45,0xd1,0xab,0x56,0xc6,0xf5,0xbc,0xb5,0xe6,0x9c,0xe1,0x1b,0x37,0x42,0x08,0xe7,0x71,0xb5,0xa4,0x67,0xf9,0x48,0xd4,0xc4,0x10,0x25,0x53,0x9c,0x03,0xfc,0x6d,0x5e,0x62,0x5e,0x6d,0x56,0xbc,0x78,0x11,0x0a,0x6d +.byte 0x1b,0x7a,0xdc,0x62,0xb5,0x58,0x86,0x15,0x71,0xff,0x11,0x33,0x94,0x2b,0xa6,0xc7,0x68,0xd5,0x68,0xda,0x5b,0xd5,0xb7,0x38,0x6c,0x1c,0xf4,0x07,0x39,0xef,0x1f,0x72,0x0a,0xb3,0x12,0x13,0x25,0x86,0xd3,0xf8,0x9f,0xb5,0x40,0x58,0xe7,0x5e,0x9f,0xa0,0xbc,0xd7,0xab,0x4f,0xf3,0x94,0xcf,0x0f,0x5a,0x4c,0x98,0xb4,0x70,0x35,0x62,0xee +.byte 0x33,0x24,0x72,0x31,0xd4,0x06,0xd9,0xb4,0x1c,0x1e,0x0f,0xa7,0x48,0xc7,0x75,0x45,0x40,0x02,0xd0,0x60,0x32,0x29,0x4d,0x61,0x7a,0xee,0x65,0x35,0x2b,0xe5,0x50,0xac,0x82,0xdb,0xf7,0x9c,0x8f,0x82,0xe4,0xf0,0xbd,0xdb,0x00,0x3d,0x3a,0x3d,0xa2,0xc3,0x2d,0x0e,0x51,0x20,0xdb,0xdb,0x8d,0x15,0x03,0xbd,0xcb,0xcb,0x24,0x81,0xc5,0xdb +.byte 0x05,0x39,0x48,0xb8,0x3c,0x93,0x35,0x10,0xef,0x19,0xba,0x09,0x9e,0xff,0xf9,0x3f,0x0c,0xdc,0x96,0x98,0x32,0x26,0x76,0xe7,0xfa,0xaa,0xdf,0xdc,0xb9,0x15,0x44,0x42,0x9a,0x8c,0x6c,0x88,0xea,0x43,0x63,0xb5,0x79,0xb6,0x50,0x30,0x78,0xea,0x70,0xba,0x33,0x36,0x8f,0x8c,0xe5,0x78,0xfd,0xbc,0xc0,0xbd,0xde,0x3a,0x3d,0xe6,0xe6,0x57 +.byte 0x0f,0x29,0xf2,0x82,0x05,0xf2,0x5c,0xfd,0x33,0xc1,0xb2,0x2e,0xc2,0xc0,0x42,0xa2,0xc8,0xa5,0xf9,0x70,0x05,0xff,0x7b,0x8d,0xb9,0x68,0xc3,0xf6,0x74,0x00,0xcd,0x9d,0x70,0xfa,0x62,0x34,0xe5,0x05,0xe8,0x5f,0x53,0x9b,0x69,0x01,0x86,0xb9,0x1d,0x68,0x80,0x89,0x51,0x52,0x0d,0xe8,0x28,0xa1,0xdd,0x62,0x2b,0xf3,0x53,0x74,0xaa,0x98 +.byte 0xdb,0x7e,0x74,0x44,0xeb,0x25,0xe7,0xde,0xc4,0x29,0x14,0x11,0x7b,0xc6,0xef,0x14,0xe4,0x04,0xd0,0xf4,0x11,0xca,0xdc,0xdc,0xe6,0x3f,0x9a,0xc9,0xe2,0x0e,0x67,0x30,0x78,0x65,0x94,0x5a,0xa1,0x24,0xd6,0x90,0x2f,0x1c,0x13,0x46,0xf5,0xb5,0xf9,0x74,0x56,0x3e,0xd5,0x1b,0x09,0xb3,0x04,0xbe,0x89,0x00,0xbd,0xe0,0xba,0x13,0x05,0xd1 +.byte 0x98,0xa7,0x93,0x09,0xc5,0x96,0x46,0xb5,0x5a,0x05,0xac,0x1e,0x66,0x03,0xf0,0xaa,0x3d,0xc2,0x54,0xa3,0xc4,0x2b,0x0d,0xa3,0xe4,0x92,0xd6,0xd0,0x44,0xa6,0x37,0x30,0xa5,0xac,0xc2,0xc8,0x58,0x2a,0x2c,0x18,0x68,0x8d,0x9b,0x4f,0x99,0xd0,0x55,0x41,0xf4,0x84,0x3c,0x69,0xda,0x3c,0x6d,0x43,0xb3,0x85,0x15,0x1f,0xdb,0x58,0x0b,0x71 +.byte 0x33,0x24,0xbb,0x21,0x43,0x19,0x16,0xeb,0x83,0xde,0xe5,0xb7,0x68,0x9e,0xb9,0xd9,0xf6,0x2e,0xae,0xdd,0x88,0x2c,0x18,0xd7,0xc3,0x72,0x8b,0xbe,0xaf,0x8d,0xfd,0xcd,0x2f,0x8e,0x3e,0x2b,0xa4,0x20,0x11,0x9d,0x00,0x4f,0xea,0xf0,0xaa,0x2d,0xf3,0x9d,0xfd,0x11,0x7b,0xac,0x2c,0x66,0x74,0x03,0xe5,0xcc,0x70,0x9f,0xfb,0xb7,0x5a,0x16 +.byte 0xc3,0x05,0x61,0x7c,0x8c,0x73,0xcc,0x9c,0x6a,0x2f,0xee,0xae,0x85,0xc9,0x51,0x91,0x13,0xa4,0x09,0x82,0x4d,0x62,0x09,0x24,0x25,0x35,0x1f,0x82,0x88,0xbb,0xdd,0x16,0x5e,0x8d,0x98,0x5f,0x07,0x49,0x32,0x96,0xb7,0xee,0x85,0xb0,0x7b,0xfd,0xf5,0x35,0x4b,0xa9,0xd4,0xee,0xf2,0x37,0xd1,0xfe,0x62,0xf5,0x52,0x13,0xb4,0xb2,0xce,0xc4 +.byte 0xe0,0x09,0x78,0x48,0xd5,0xc6,0x5d,0x36,0x1b,0x90,0x3a,0x6a,0x3c,0x21,0x50,0xf0,0x0a,0xe9,0x46,0x24,0x45,0xc1,0x5e,0x76,0xa3,0xf9,0x70,0xb8,0x62,0x4d,0x0e,0x92,0x87,0x4a,0x6a,0xf9,0x46,0x91,0x64,0xfe,0x7f,0x53,0x24,0x7e,0xc7,0x3e,0xb0,0x37,0x1a,0xc8,0xd6,0x33,0x0b,0x5f,0xa5,0x30,0x03,0x0e,0x85,0x3d,0x7b,0xc1,0xa1,0x18 +.byte 0xb3,0x8c,0xfe,0xca,0x3e,0x71,0xd8,0x92,0x46,0x49,0x60,0x54,0xd9,0x7b,0xf7,0xc3,0x99,0x2f,0xb5,0x79,0xcc,0x32,0x40,0x7d,0x3d,0x0b,0xc6,0x6f,0x04,0xd9,0xf1,0xdd,0x64,0xf5,0xc4,0x60,0x14,0x04,0x5c,0x3a,0xa4,0xda,0xdc,0xad,0x8f,0xc2,0x44,0x37,0x96,0x63,0x00,0xf7,0xb1,0xc0,0x7c,0x8c,0x12,0xb5,0x3a,0xec,0xc0,0x16,0xd8,0x24 +.byte 0xe9,0xc0,0xc4,0xfa,0xb1,0x85,0x5b,0xe3,0x62,0x24,0xa1,0x75,0x92,0x82,0x04,0x59,0x10,0x50,0x4b,0x51,0x51,0x3e,0x39,0xba,0x6d,0xa0,0x65,0x2d,0xfc,0x23,0x1c,0x9d,0x69,0x22,0xe7,0x15,0xfa,0xba,0x76,0xbf,0x53,0x62,0xb0,0x0d,0x0d,0x5d,0x55,0x00,0xbc,0x58,0x01,0xed,0x37,0x53,0xb9,0xa6,0x0d,0x71,0xab,0xec,0x42,0xbf,0x3b,0x52 +.byte 0xfd,0xae,0xe9,0x6d,0x65,0x07,0xf3,0xd9,0x32,0x66,0xc1,0x66,0x1a,0x18,0x73,0x86,0x01,0xaf,0x1d,0xd1,0xd0,0xcf,0xb1,0xea,0x54,0x23,0xdf,0xf2,0x4d,0x7d,0xc7,0xfe,0xfe,0x7d,0x1d,0x2c,0x1b,0xb6,0xa7,0x7a,0x9e,0x90,0x3a,0x3b,0xb0,0x6c,0xb0,0xd2,0xd1,0xd0,0x6a,0x94,0x4c,0x84,0x1c,0x45,0xae,0xda,0x16,0xa9,0x2e,0x63,0x19,0x26 +.byte 0xf6,0x74,0xd3,0x6f,0x9b,0x9c,0x0c,0xb8,0x85,0x9f,0xeb,0x99,0xbc,0xab,0xff,0xc3,0x75,0x86,0xe5,0x3a,0xa0,0xf9,0xfc,0x6b,0x3d,0x5a,0xad,0x46,0x7f,0x17,0x0e,0x94,0xb7,0xa4,0x43,0x61,0x54,0x76,0x29,0x78,0xe4,0x41,0x91,0xbe,0xa5,0x36,0x39,0xdf,0xdc,0xcc,0x8e,0x42,0x40,0x08,0x51,0x26,0xb0,0x53,0x5d,0xb4,0x7a,0x18,0x8e,0xb3 +.byte 0xae,0xf2,0xe0,0xef,0x63,0x51,0x3a,0xbe,0x4c,0x2d,0xce,0xc7,0xe2,0x1b,0xc2,0x40,0xf3,0x82,0x61,0xf0,0x1b,0x05,0xdd,0x1e,0xae,0xed,0x87,0x2c,0xe5,0xad,0xc7,0xec,0xb5,0x63,0xf7,0x3a,0xf9,0xb7,0xd8,0x4e,0xa7,0xef,0xac,0x6d,0x9c,0x27,0xd9,0xcc,0x66,0xf4,0x75,0x40,0x94,0x8b,0x78,0x4f,0x61,0x4f,0x31,0x49,0x5c,0x96,0x72,0x58 +.byte 0xcf,0x55,0xb2,0x66,0x16,0x29,0x27,0x24,0x39,0xc3,0x64,0xb1,0xdf,0x69,0x87,0x85,0x46,0xe3,0xd0,0x82,0x53,0x1a,0xc2,0xf1,0x3a,0xab,0xdf,0xe5,0x29,0x17,0xdd,0xfe,0xbf,0xf9,0x3d,0x7a,0xfb,0xe7,0x74,0x49,0xa9,0xef,0x61,0x93,0x4c,0xfa,0x30,0xea,0x65,0xa7,0x61,0x32,0x88,0x74,0x12,0xc1,0x91,0xf1,0xc2,0x1f,0x38,0x6a,0xfd,0x0d +.byte 0xc8,0x6f,0x87,0xe6,0x15,0x55,0x26,0x13,0x86,0x13,0xb9,0x01,0x98,0x34,0x1c,0x2d,0x1d,0x30,0xae,0x7d,0x8e,0x07,0x7d,0x4d,0xe9,0xfd,0x58,0x18,0xc3,0xa6,0x8e,0x87,0x98,0x33,0xcc,0x80,0xd7,0x70,0x07,0x6a,0x4a,0x97,0xef,0x56,0xf3,0x9d,0xf9,0xef,0x6f,0xa8,0x71,0x7f,0x61,0x07,0x1d,0x9d,0x51,0x06,0x86,0x4a,0x35,0x9e,0xab,0x2c +.byte 0x66,0x8d,0x61,0x62,0xbd,0xed,0x6c,0x76,0x7c,0x67,0xe0,0xe1,0x6e,0x90,0x74,0xb1,0xa6,0x26,0x0d,0x01,0x1f,0xe9,0xb4,0x30,0x9a,0x7e,0x37,0xd1,0xea,0x97,0x9a,0x0f,0x9e,0x8d,0x52,0xd4,0x96,0x36,0x5b,0x6f,0x40,0xbb,0x9e,0x44,0xb4,0x6e,0xee,0x15,0x70,0xef,0x66,0x81,0xf5,0xb4,0xe7,0x69,0xb0,0x40,0x44,0xdc,0x70,0x1e,0x4d,0x3c +.byte 0x9b,0x19,0x2a,0x97,0xbd,0xb2,0xd2,0x9b,0x98,0xac,0x36,0xf1,0x05,0x48,0xdc,0x5d,0x21,0xfb,0x17,0xe3,0x9c,0x3c,0xbf,0xfd,0x1d,0x39,0x1e,0x5b,0x2a,0xa2,0xb3,0x7d,0x4f,0xdf,0x3a,0x41,0x7a,0x31,0x01,0xc2,0xe5,0xd0,0x06,0x50,0x29,0x05,0xce,0xb8,0x28,0xb7,0xdd,0x83,0xc8,0xaa,0x39,0x78,0xc7,0x7d,0x9e,0xcd,0x9a,0x07,0x71,0x7e +.byte 0x20,0x92,0x82,0xce,0x49,0x90,0xce,0xef,0x53,0xa7,0x48,0x2a,0x69,0x86,0xa1,0x5e,0x35,0xe8,0x7d,0x10,0xb8,0x5e,0xa6,0x9a,0x69,0x6f,0x32,0x75,0xf3,0x4a,0xee,0x9c,0x06,0x5c,0xdd,0x84,0x7e,0x38,0x00,0x67,0x39,0x42,0xed,0x72,0xda,0xe3,0x6b,0x5a,0xf4,0xc9,0x80,0x3e,0x0e,0xda,0x39,0xfa,0x83,0x2c,0x60,0x69,0x87,0x85,0x05,0xfc +.byte 0xf4,0x2b,0xd4,0x0a,0xad,0x86,0xca,0xd5,0xf0,0x92,0x1f,0x43,0x3c,0x0e,0xac,0x99,0xf3,0x67,0xa3,0x41,0x6d,0xb9,0x29,0x70,0x57,0x62,0x9f,0x45,0x91,0x72,0xe5,0x53,0xcc,0x89,0x80,0x3f,0xbc,0x1c,0x66,0x21,0xdd,0x90,0x2b,0xa4,0xca,0x2f,0xf0,0x0f,0x9f,0xd0,0xe9,0x28,0xe2,0xd9,0x36,0xaf,0xf9,0x01,0x81,0xce,0xb4,0xe7,0x71,0xfd +.byte 0x92,0xf8,0x56,0x2e,0xc3,0xc8,0x8b,0x54,0xc8,0xc7,0x40,0x79,0x27,0x06,0x18,0x4a,0x7b,0x88,0x3f,0xd6,0x4f,0xd4,0x66,0x1e,0x1f,0x9a,0x14,0x1a,0x0a,0x98,0xc7,0xd6,0x25,0x83,0x37,0x8a,0x5d,0xb2,0x88,0x39,0x68,0x7b,0x1f,0x4e,0x0a,0xed,0x11,0x1a,0x77,0x9b,0xcb,0xb6,0x7d,0x5c,0x36,0xac,0x07,0x07,0x9f,0x05,0xcf,0x90,0x8f,0x3f +.byte 0x4b,0xc5,0xf9,0x42,0x90,0xb4,0x42,0x26,0xa1,0x2c,0x66,0xc6,0xb8,0x98,0x80,0x8a,0xbb,0x9b,0x41,0xe4,0x44,0x8c,0x5e,0x56,0x33,0xe3,0xba,0xcf,0x31,0x8e,0x28,0xd7,0xc5,0xd1,0x3b,0x68,0x47,0x10,0xae,0xda,0xc3,0xbd,0x20,0xe7,0xac,0xe2,0xe1,0xe0,0x7a,0x4b,0x83,0xb1,0xab,0x72,0xf4,0xc4,0xe7,0x0d,0x02,0xaf,0x5b,0x74,0xac,0xda +.byte 0x9d,0xce,0x26,0x1f,0x79,0x05,0x67,0x7e,0xc4,0x98,0x3f,0xde,0xa6,0xf3,0xfe,0x59,0x65,0x88,0xfb,0x14,0x3a,0x43,0x91,0x04,0x1a,0x78,0x7e,0x08,0xba,0x55,0x50,0xc7,0x65,0xd3,0x8e,0xda,0x0a,0xee,0x8e,0x11,0xa9,0xf6,0x9e,0xd3,0x23,0x97,0x05,0x0c,0x98,0x2a,0x36,0x25,0xec,0x5e,0x0b,0xf9,0x31,0x80,0x00,0x8a,0x70,0xf1,0xaa,0x7c +.byte 0x73,0x02,0x98,0x8d,0x42,0x27,0x53,0xf1,0x83,0x37,0xd0,0x2d,0xfa,0xc7,0x4b,0xa5,0xb3,0xc9,0xb8,0xd4,0x56,0x94,0x5a,0x17,0x2e,0x9d,0x1b,0x46,0xaa,0xb6,0xd9,0x2a,0x3a,0x6c,0xaf,0x24,0x59,0xfd,0x08,0xc5,0xca,0x0c,0x79,0x3f,0xe7,0x91,0x8d,0x9d,0x59,0x91,0xd8,0x5f,0xda,0x6d,0x35,0x7b,0x52,0x47,0x35,0xf9,0x81,0x86,0x2c,0xee +.byte 0x1a,0x14,0xc5,0x1f,0xb6,0x85,0xb5,0x74,0xe9,0xb7,0x4f,0xde,0xcd,0x93,0x2d,0xf3,0x10,0xbe,0x34,0xfa,0xca,0x15,0x9f,0x02,0x9d,0x19,0x72,0x7c,0xd6,0xfd,0x81,0x43,0x49,0xb5,0x2b,0x52,0x31,0xd6,0x2c,0x28,0x2e,0x83,0x6d,0xd3,0x0f,0x6e,0x03,0x65,0xf0,0x8a,0xdd,0x0a,0xec,0x58,0x10,0x45,0x5d,0xac,0xda,0xf5,0x32,0x5d,0x18,0x26 +.byte 0xcc,0x2e,0xcf,0xd3,0x41,0x2d,0x1d,0xba,0xdf,0xd8,0x96,0x8f,0x18,0x0f,0xa7,0xec,0x8e,0x6e,0x84,0x2c,0xd6,0x1f,0x4e,0x76,0xfe,0xf3,0x14,0x27,0x4b,0x5b,0x3d,0x7c,0x1c,0x59,0x46,0x97,0x1b,0x59,0x5a,0x2d,0x57,0x80,0x17,0x98,0x7d,0x92,0x5d,0x2f,0x98,0x53,0x10,0x59,0x8e,0x7f,0x55,0x64,0x15,0x62,0x2c,0x16,0x0b,0x8d,0x48,0x54 +.byte 0xaf,0x96,0x17,0xa9,0x8e,0x2c,0xcf,0x41,0x8c,0x8a,0x37,0x55,0xe4,0xf9,0x20,0x3b,0x21,0x5c,0x86,0x8d,0x3f,0xa6,0x5e,0x43,0xf3,0x3b,0xf7,0x7c,0x27,0x88,0x8e,0xa5,0x15,0xca,0x0e,0x9e,0x85,0x30,0x17,0x0d,0xcf,0xf0,0x82,0x87,0xd6,0xe8,0xd2,0xad,0xe9,0x4d,0x3f,0xc9,0x58,0x19,0xf9,0x99,0x4d,0xf9,0x6b,0x1b,0xd3,0xf9,0xdd,0x52 +.byte 0xd1,0x3c,0x64,0x46,0xfd,0x4f,0x2e,0x63,0x39,0xd8,0xe4,0xeb,0xfc,0x07,0xf1,0xa5,0xff,0x84,0xa8,0x92,0xfe,0xbc,0xc5,0x36,0x91,0x2b,0xec,0x2c,0xad,0xf0,0xac,0xc5,0xb0,0xad,0x8a,0x0d,0x6a,0xd9,0x29,0x7a,0xb0,0x87,0x0c,0xaf,0xda,0x75,0x84,0x25,0xbe,0xee,0x0d,0xfd,0x4c,0xf5,0x2d,0x46,0xe9,0x17,0xb9,0x9d,0x3d,0x4b,0x8f,0x3a +.byte 0xe9,0x49,0xb6,0x32,0x99,0x27,0xe2,0x4d,0xff,0x2f,0x2e,0xd5,0x69,0x52,0x56,0x20,0x0a,0xbf,0x62,0x14,0x34,0xfb,0xbf,0x95,0xe8,0xfe,0xb1,0x9f,0x43,0x30,0x02,0x03,0x9e,0xa8,0xe2,0x68,0x64,0xdd,0x37,0xfc,0xb9,0x0f,0x85,0x8c,0x36,0x45,0xdb,0x7c,0x8b,0x97,0x50,0xc3,0x75,0xa1,0xcf,0xf4,0xc2,0x46,0xd8,0xa1,0x8c,0xab,0x8d,0x3a +.byte 0xde,0xe7,0x9e,0xd2,0x1e,0x2d,0x8b,0xe4,0x31,0xe3,0x12,0x3f,0x9f,0x0b,0x2c,0x95,0x75,0x8d,0xf1,0x24,0xb9,0xdf,0x1e,0x64,0x35,0x45,0x2a,0xc2,0xf9,0x96,0x5d,0x10,0x64,0x32,0xae,0xe9,0xf8,0x71,0xd4,0x2d,0x6b,0xc6,0xde,0x08,0x1e,0x5d,0x51,0xf1,0xe7,0xfd,0x3c,0x22,0x43,0x59,0x82,0x83,0x13,0x75,0x36,0xef,0x81,0xe4,0xcf,0xa8 +.byte 0xb8,0x30,0x16,0x44,0xae,0x55,0x06,0xdd,0xb9,0x60,0x3f,0x75,0xc6,0xd1,0x73,0xa9,0xea,0xc9,0x64,0x2b,0x8a,0xde,0x44,0x4b,0x3d,0xc3,0x31,0x12,0x84,0x9a,0xe3,0xda,0x24,0x82,0x99,0x00,0x6d,0x8e,0xb8,0x26,0x82,0xa6,0xc2,0x37,0x6c,0x2a,0x1d,0xcf,0x6d,0x18,0xc7,0xee,0x27,0xca,0xe7,0xad,0x95,0xed,0x7d,0xe0,0xe0,0x6f,0x45,0xc3 +.byte 0x8a,0x2f,0x08,0x49,0x7e,0x09,0x9e,0xc1,0xb7,0x1e,0x8f,0x57,0x61,0xf8,0x3e,0xea,0xd7,0x47,0xfb,0xd0,0xda,0xaa,0x04,0xf9,0x06,0xbb,0xa3,0x80,0x68,0x89,0xb0,0x7f,0x18,0xf3,0xd2,0xeb,0xee,0x48,0x30,0x6a,0x24,0xc8,0x71,0x43,0xc3,0x50,0xcc,0x85,0x68,0xf5,0xca,0x44,0x34,0x43,0xaa,0x2e,0x4f,0x02,0x1b,0x23,0x4f,0xe9,0x07,0x02 +.byte 0xa2,0xfa,0x24,0x57,0x70,0x4e,0x1a,0x78,0x03,0xa2,0xdd,0x53,0x50,0x82,0x05,0xb1,0x0f,0xcb,0x9e,0x2e,0x58,0x04,0x62,0xc8,0xac,0x71,0x31,0x56,0x0f,0xc7,0x70,0x32,0x53,0xda,0x51,0xc3,0x15,0x78,0x82,0xb6,0xe8,0x6e,0x32,0xeb,0x39,0xab,0xba,0x67,0xcc,0xbc,0x99,0x58,0x88,0xc4,0x60,0x0d,0x0b,0xc1,0xfa,0x6f,0x40,0x85,0x04,0xdf +.byte 0x5f,0x17,0x69,0xf1,0xbd,0x44,0x97,0xc8,0x62,0x19,0x49,0x1f,0x23,0xcb,0x3d,0x17,0x04,0xf2,0xbd,0x58,0x15,0xa6,0x37,0x3a,0x3f,0x77,0x98,0x32,0x40,0x8a,0x72,0xf0,0x41,0x0b,0xad,0x88,0xba,0xd3,0xae,0xdc,0x3b,0x9a,0x37,0x89,0xa5,0x09,0xe5,0xbb,0xf2,0xf8,0x5d,0xa5,0xed,0xe8,0x39,0x7b,0xed,0x2b,0x90,0xd6,0x6c,0xd3,0xfa,0x69 +.byte 0xa7,0xca,0x09,0x83,0x15,0x8d,0xd8,0xe3,0x81,0x03,0x4e,0x2d,0xd8,0x96,0x3b,0x4b,0x18,0x91,0xac,0x5f,0x22,0xe6,0x9d,0x4b,0x09,0xaf,0xf0,0xdf,0x16,0xa2,0xf1,0x2c,0xd9,0x35,0x8a,0x6e,0x85,0x7a,0xbc,0xc7,0x10,0xd1,0x5f,0x8a,0x53,0x9c,0x8e,0xbc,0x8c,0x15,0xb3,0x8a,0xb0,0x0b,0x74,0x40,0x2a,0x5f,0x46,0x71,0x1c,0x0b,0xee,0x08 +.byte 0xae,0x17,0x26,0x1e,0xcf,0xbf,0x3d,0xa0,0x5e,0x3a,0xdb,0x39,0x6b,0x4a,0x82,0x53,0x02,0xf4,0xa2,0x15,0x5c,0xb6,0xdb,0x20,0x30,0xa2,0x7d,0xcb,0x9a,0xf7,0x88,0x69,0xb5,0xc8,0xe6,0xcd,0x9e,0xa4,0xaf,0x27,0x0e,0x61,0x41,0xcd,0x8e,0x71,0x83,0x11,0xce,0x5e,0x6c,0xaf,0xa4,0x50,0x81,0xb6,0xf2,0x36,0x05,0xbb,0x36,0x4e,0x4a,0x1b +.byte 0x09,0x9f,0xca,0x1b,0x12,0xb0,0x01,0xc0,0xbf,0x7e,0x3f,0x81,0x60,0x9f,0xfd,0x56,0x81,0x54,0x99,0x2b,0x7f,0x1e,0xb1,0xbf,0xd4,0xb7,0xe1,0x7c,0x71,0xf9,0x00,0x72,0x5f,0x10,0xab,0x60,0x03,0x9d,0x13,0xf1,0xba,0x48,0x93,0x1c,0x1d,0x11,0x04,0x40,0xf6,0xde,0x3b,0xef,0x6c,0x47,0xb3,0x0d,0xcf,0x53,0xbd,0x45,0x7e,0xd7,0x8c,0x34 +.byte 0xd0,0xcb,0x85,0x4b,0x1e,0xd1,0xc5,0xfd,0x5b,0x1a,0x18,0x8a,0x27,0xe3,0x16,0x3c,0x25,0x12,0xf2,0xf1,0xa1,0x40,0x53,0x68,0x27,0x2c,0x81,0x0e,0x20,0x12,0xe3,0xde,0xe2,0x9f,0x08,0x75,0xc0,0x25,0x79,0xf0,0xc4,0xaa,0x10,0xad,0x41,0x3f,0x0b,0xc7,0xb2,0xe0,0x50,0xde,0xec,0x24,0x09,0xeb,0xb5,0xd3,0xbc,0xd3,0xdf,0x44,0x6d,0xc8 +.byte 0xf1,0x79,0xf8,0x33,0xb7,0x75,0x09,0x18,0x04,0x59,0x0f,0x15,0x5e,0xf9,0xca,0xe0,0xa9,0x2a,0xe1,0x1b,0xf0,0x49,0x5f,0xca,0xa3,0x80,0xd5,0x9b,0x1e,0xc1,0x1f,0x98,0x18,0x0a,0x24,0xc3,0x3f,0xfb,0x43,0xfd,0xa3,0x01,0x59,0x50,0xea,0x21,0xe0,0x92,0xfd,0xe1,0xd5,0xe4,0x38,0x24,0x88,0xf3,0xb0,0xc9,0x79,0xfd,0x4e,0xd3,0x3e,0xbf +.byte 0xc6,0xb8,0x9e,0x7f,0xab,0x65,0x79,0xd9,0xb9,0x83,0x38,0xe1,0xf7,0xd0,0x37,0x04,0xb3,0x0c,0x48,0x82,0x74,0xe1,0x0c,0x80,0x13,0x59,0xc4,0x72,0xf9,0x2d,0x88,0x06,0x46,0x08,0x7a,0x6b,0xb4,0xfc,0x5f,0x63,0x31,0x2f,0x4f,0xfd,0x4b,0x1f,0x8e,0x21,0x3c,0x67,0x83,0xdd,0xa9,0x65,0x68,0xc6,0xd0,0xb8,0x1d,0xcd,0x60,0xc5,0xb9,0x3b +.byte 0xea,0xe9,0xc7,0xa5,0x1a,0x98,0x8a,0x87,0xb7,0x73,0x29,0x3a,0x6a,0x3a,0x75,0xbf,0xa4,0x79,0x64,0xcb,0x94,0x68,0x93,0x56,0x55,0x1e,0xd5,0x61,0xda,0x87,0xe1,0x28,0xf0,0xa5,0x64,0x9a,0xd7,0xa0,0x91,0xfd,0x46,0x20,0x6c,0x87,0x1f,0xe8,0x9e,0x7e,0x95,0xc4,0x60,0xdb,0xf4,0xe2,0x3e,0xb2,0x6a,0x4a,0xe7,0x46,0x3f,0xca,0xf3,0x72 +.byte 0xb5,0xe8,0x06,0x3a,0x1b,0xeb,0xcb,0x81,0x46,0x44,0xf6,0x97,0xa0,0x79,0xe4,0xa4,0x8a,0xba,0x5e,0x1b,0x6d,0xf4,0xcf,0x7c,0x12,0x7a,0xec,0xdd,0xf6,0xc8,0xab,0x5f,0x30,0xb3,0xf9,0x8e,0x31,0xfd,0x51,0x95,0x8b,0xa1,0xe9,0xe8,0x2d,0xec,0x86,0x12,0x4a,0xf8,0x8b,0xa5,0xdd,0xb2,0xe4,0xad,0xdd,0xcb,0xf5,0xcd,0x9c,0x9f,0x0a,0x42 +.byte 0x5f,0x83,0x9d,0xa6,0x4f,0xbe,0x11,0x75,0x3c,0xde,0x67,0x6b,0x95,0xcd,0xcf,0xdc,0xfd,0x1f,0x1a,0x14,0x01,0x27,0x68,0xaf,0x9b,0x82,0xd6,0xae,0x29,0x8a,0x1f,0xc8,0xf1,0x1f,0xb8,0xa9,0xa2,0x1d,0x81,0xbb,0x19,0xda,0x06,0xe3,0x34,0x7b,0xce,0x99,0x3c,0x5b,0x0c,0x9b,0x8b,0x35,0xc0,0x6c,0x88,0xef,0xeb,0x9f,0x64,0xe3,0xc3,0xbf +.byte 0x37,0xd7,0xf6,0xdf,0xad,0x28,0xf4,0xd7,0x19,0xb0,0xf2,0xa7,0xd4,0x71,0xbc,0xd3,0xa3,0x09,0x5c,0x1a,0x45,0x30,0x2d,0x53,0xa5,0x19,0x2f,0xb0,0x5d,0xae,0x04,0x28,0xe6,0x16,0x3e,0x75,0x9f,0xcc,0x76,0xc4,0xc2,0xa0,0xfb,0xff,0xdd,0x4c,0xa3,0x8b,0xad,0x05,0x73,0x26,0xf0,0xef,0x48,0xd5,0x25,0x22,0x90,0x78,0x21,0xfd,0xc6,0x23 +.byte 0x14,0xbc,0xed,0x13,0x29,0x76,0x17,0xa6,0x93,0x09,0x6e,0xa7,0x42,0xdd,0x11,0x9e,0x05,0xa3,0xb7,0x48,0x84,0x85,0xf8,0x4e,0xed,0x3d,0xdb,0xfc,0x68,0xd2,0xec,0xec,0x69,0x2b,0x60,0x38,0xd1,0x99,0x44,0xf9,0x60,0xd3,0x5a,0x9e,0xe4,0x26,0x9d,0x12,0xf8,0x6a,0x53,0xde,0x76,0x78,0xa7,0x68,0xb0,0xb4,0xdc,0x33,0x7b,0x8a,0x73,0xa0 +.byte 0xa5,0x5f,0x8f,0x81,0x0e,0x51,0x06,0x13,0x6b,0x56,0x16,0x91,0x1f,0xf5,0x6b,0x68,0xe6,0x8b,0x69,0xda,0x0a,0x9c,0xb1,0x74,0x8f,0x1c,0xb3,0xbf,0x52,0x59,0xaa,0xb1,0xb6,0x3a,0x81,0xc2,0x04,0x54,0x12,0x46,0xa2,0xd5,0x21,0xdf,0xe0,0x57,0x1f,0xe8,0x36,0x56,0x87,0xbf,0xcb,0x7d,0x06,0x6c,0xd5,0xc9,0x4e,0xca,0x47,0x47,0x11,0x91 +.byte 0x7a,0x14,0x13,0x5d,0x5d,0x46,0xd5,0x3a,0xe4,0xa4,0x4d,0x99,0x3a,0x54,0x99,0x62,0xb4,0x70,0xa0,0xf5,0x8a,0xda,0x05,0x75,0xf1,0xa5,0xa1,0x5d,0x9d,0xc4,0x7f,0x83,0x8a,0x5b,0x09,0x54,0x0e,0x69,0x28,0xef,0x66,0xfb,0xe4,0xc4,0xe4,0xc4,0xda,0xb0,0xda,0xe2,0x19,0x33,0x3c,0x76,0xa0,0x35,0xdc,0x31,0x4e,0x40,0xfe,0xb8,0x20,0x26 +.byte 0x8f,0x6f,0x7d,0x02,0x54,0x86,0x1d,0xca,0xa6,0x10,0xa6,0x89,0x87,0x3a,0x5a,0xd5,0x3d,0x0f,0xb5,0x81,0x7d,0xab,0xb6,0xc6,0x36,0x87,0xce,0xd7,0xe4,0xc3,0x9e,0xc2,0x9c,0xf6,0x75,0xd5,0x9a,0x69,0xd2,0x13,0x89,0x5a,0xe9,0x29,0xc9,0xf5,0x6e,0xcc,0x05,0x87,0x0a,0x61,0x49,0xd7,0xa5,0x76,0xd0,0xaf,0x96,0xe0,0x2f,0x91,0xf4,0x45 +.byte 0x70,0x5a,0xdc,0x9f,0x07,0x7f,0x86,0x02,0xa4,0x83,0x8d,0x4a,0x6d,0xfc,0x1b,0xd8,0x9b,0xc2,0x42,0x4f,0xcb,0xdf,0xcb,0xe0,0x55,0xb4,0x8f,0xf7,0x27,0x73,0xd9,0x7e,0xf8,0x3a,0x5c,0x4f,0x29,0x64,0xd8,0x39,0xfa,0xf2,0xc4,0x6b,0xeb,0x55,0xc3,0x13,0x22,0x15,0xdf,0xc5,0x91,0x6d,0xd7,0xf3,0x11,0x34,0x08,0xce,0xe5,0xbd,0x16,0x14 +.byte 0x60,0x14,0x8a,0xed,0x4d,0x38,0x98,0x15,0x5d,0xee,0x70,0xff,0x05,0xd2,0x74,0x3a,0x5f,0x78,0x1a,0x70,0x61,0x2a,0x42,0x4a,0xf3,0x15,0x6f,0x9e,0x33,0xca,0xb8,0x46,0x22,0x64,0xd6,0x24,0xe8,0x10,0x1a,0x89,0xab,0x74,0xdf,0x56,0x35,0x41,0x57,0xe1,0xd9,0x4b,0x67,0x60,0x89,0x6f,0xbf,0x73,0xac,0x6b,0xf9,0x78,0x3f,0xbc,0xf3,0x2a +.byte 0xb5,0x8c,0x1f,0xda,0xe7,0xe2,0xac,0x60,0xbf,0x41,0x96,0xbb,0xd5,0x35,0x9c,0x56,0xe7,0xfd,0x95,0xc7,0x4d,0x32,0xa1,0x07,0x34,0xbc,0x99,0xca,0xcc,0x42,0x71,0xfb,0xec,0x5c,0x1e,0xf9,0x8b,0xde,0x43,0x65,0x84,0x16,0x52,0x0a,0x5e,0x92,0x20,0xd8,0x26,0x4b,0x97,0x71,0xde,0xd2,0x1f,0x2e,0xd1,0xb2,0xb6,0x29,0x6a,0x6d,0x41,0x00 +.byte 0x20,0x3d,0x03,0xf8,0x43,0x7b,0x57,0x87,0x4e,0xf1,0x8e,0x6f,0xd3,0xf4,0x6c,0x6c,0x29,0xf6,0x99,0xe3,0xd3,0x1d,0xd3,0x26,0x21,0x3b,0x02,0xa2,0xc1,0x06,0xcf,0x31,0xec,0x7f,0xc6,0x80,0xbc,0xab,0x86,0x01,0xff,0x11,0x8a,0x24,0xfd,0x1b,0x41,0x49,0xd4,0xbe,0x15,0x34,0x82,0xc5,0x02,0x51,0x67,0x5c,0x41,0x8e,0xbf,0x94,0x12,0x15 +.byte 0x64,0xea,0x00,0x0c,0x51,0x40,0x57,0x66,0x1e,0x6d,0x3e,0x41,0x8e,0x84,0xdf,0x71,0xb8,0xd7,0xfa,0x12,0x17,0x22,0x17,0x05,0xdc,0x82,0xfd,0x7c,0x5e,0xfa,0x62,0x23,0xa8,0xbe,0x14,0xdc,0x84,0x42,0xf0,0x90,0xc5,0xb0,0x68,0xbe,0x64,0x74,0xc3,0xa5,0xd1,0x10,0xcf,0xe3,0xd1,0x09,0x98,0x3b,0xb9,0x19,0xf2,0x9b,0x5d,0x90,0x99,0x3d +.byte 0x30,0x67,0x55,0x34,0x50,0x78,0x3b,0xd2,0x70,0xb1,0xd2,0x91,0x4e,0xfa,0x98,0x7d,0x93,0xad,0x7f,0xb1,0x89,0xb0,0x61,0x4c,0x95,0x3f,0x51,0x95,0xd7,0xc6,0x87,0x7a,0xc5,0x53,0xb6,0x6d,0x61,0xec,0xbe,0x40,0x1f,0xa5,0x7f,0x73,0x4a,0x78,0xd2,0x58,0x1e,0x41,0x8e,0x9a,0x08,0x49,0xce,0x39,0x52,0xf9,0xd1,0xcd,0x41,0xb6,0x39,0x99 +.byte 0xfa,0xfb,0x1c,0x38,0xe1,0xe5,0xe1,0xd6,0x16,0x0f,0xc8,0x12,0x0b,0x88,0xdc,0x00,0xd4,0x7b,0x24,0x69,0x16,0x27,0x37,0xa3,0xd5,0x39,0x27,0x34,0xda,0x23,0x24,0x50,0x13,0xd8,0x02,0x48,0x14,0xd7,0xc9,0x28,0x1b,0xba,0x66,0xa8,0xc8,0x9a,0x7b,0xed,0x92,0x5b,0x78,0x46,0x79,0x5a,0xd1,0xf2,0x75,0xf0,0x98,0xd3,0x9f,0x4c,0x72,0x51 +.byte 0xed,0xe5,0xce,0x83,0xac,0xe1,0xc8,0x2b,0x7f,0x77,0x6a,0x70,0xdd,0x80,0x88,0x62,0x58,0x94,0x15,0x72,0x53,0x34,0x48,0x17,0xb2,0xe8,0x4a,0xab,0x2d,0x4e,0xef,0x93,0xb7,0xba,0xd1,0x1c,0x53,0x69,0xd5,0xac,0xa1,0x61,0x7c,0x44,0xec,0x81,0x72,0xcc,0xe8,0x6f,0x5d,0x67,0x1f,0x65,0x9a,0x34,0xf5,0x95,0x89,0x1c,0x2e,0x54,0x42,0xc0 +.byte 0x85,0x79,0xb0,0xfa,0x44,0x0d,0x28,0xc4,0x20,0x2f,0x2e,0x85,0x73,0xfb,0xf6,0x44,0x0e,0xbc,0xab,0x4f,0x42,0x5c,0xdb,0x1f,0x11,0x6f,0x9a,0x23,0x75,0x70,0x78,0x1a,0xd2,0xb8,0x83,0x72,0xf5,0xf6,0x40,0x48,0x3f,0xc8,0xd5,0xe3,0x2c,0x08,0x5c,0x0c,0x2a,0xb0,0x8e,0x69,0xe6,0xdf,0x4b,0x4a,0x95,0x9c,0x4c,0x5e,0x09,0x24,0xc3,0xd0 +.byte 0x4c,0x20,0x0c,0x9a,0xce,0x95,0x53,0x6a,0x7b,0x54,0x0a,0x7e,0x73,0xa7,0x95,0xe7,0x7c,0x67,0x9d,0x05,0xbc,0x26,0x3a,0xa1,0x43,0x99,0x7a,0xee,0x04,0xcf,0x94,0x02,0x36,0x26,0xb3,0x81,0x74,0x22,0xee,0x1e,0x9e,0xe2,0x82,0xd4,0xe0,0xca,0xf2,0xec,0xd2,0x9e,0xf8,0x3f,0x9f,0xc4,0x5b,0xe8,0xfc,0xbd,0x93,0xaa,0xc3,0x2f,0xce,0xf2 +.byte 0x32,0xa9,0x23,0xf3,0xe1,0x06,0xae,0x7d,0x87,0xe9,0xe7,0xe0,0xc1,0x7c,0x74,0x9c,0xdf,0x86,0x6d,0x5c,0x8a,0x51,0x45,0x9d,0x43,0x49,0x87,0x45,0x75,0xfb,0x40,0x55,0xab,0x9a,0x52,0xf1,0x32,0x5e,0xde,0x8b,0x52,0x50,0x9f,0xb8,0x7a,0xe5,0x1c,0x40,0x4f,0xc7,0xb1,0x29,0x90,0xcc,0x98,0x99,0xa0,0x4e,0x1c,0x43,0x6e,0x91,0x61,0x9c +.byte 0xf7,0xa7,0xf7,0x43,0x89,0x15,0x8c,0x56,0x22,0x9d,0x66,0xac,0x71,0x19,0xdc,0xb9,0xf8,0xd3,0xaf,0x2e,0xd7,0x7b,0xc3,0xe4,0x25,0x0d,0x2c,0xaf,0x15,0x8c,0xea,0x2b,0xdb,0x8c,0x71,0xff,0x55,0x29,0x11,0x35,0x11,0xef,0xb0,0x97,0xb2,0x95,0xab,0xeb,0x4a,0x40,0x1c,0x92,0xc4,0x13,0x36,0x74,0x53,0x78,0x51,0x6c,0xca,0x37,0xcb,0xda +.byte 0x5e,0x6b,0x8c,0x69,0xc5,0xd0,0xf9,0xdb,0xbe,0xd9,0x30,0x42,0x16,0xcf,0x40,0x63,0x87,0x10,0x28,0x7d,0xae,0xa9,0x8c,0x14,0x99,0xe1,0x4f,0x11,0x98,0x7e,0xe9,0x14,0x9c,0x2e,0xe2,0xed,0x20,0x15,0x7c,0xb5,0xf4,0xc9,0x16,0x30,0x8d,0x7c,0x61,0x45,0xf4,0x23,0xf5,0xdb,0x81,0x8f,0x6b,0x41,0xaf,0xa9,0xf8,0x51,0xbe,0xc4,0x5d,0x8c +.byte 0xda,0x5e,0x07,0x62,0x7c,0xc6,0xd1,0xae,0x91,0x5e,0x05,0xa8,0xc6,0xc5,0xfc,0xb7,0x12,0x2e,0x7f,0x85,0xef,0xbd,0x2b,0x56,0x57,0x32,0xad,0x3d,0x97,0x5b,0x26,0xcf,0xd3,0xe7,0x48,0x4e,0x9b,0x15,0x98,0x77,0xb4,0x3e,0xf1,0x3e,0x1c,0x21,0xb0,0x98,0xe2,0x69,0xee,0xd8,0x29,0x10,0x93,0xd5,0xc9,0x71,0x8f,0x28,0xbd,0xe3,0xd9,0x54 +.byte 0xf3,0x72,0xb6,0x85,0xe9,0x2b,0xdc,0x96,0x52,0x53,0x5c,0x61,0x54,0x96,0x4a,0xf5,0x3f,0xee,0x53,0xc3,0x63,0xc9,0x67,0x14,0xdf,0x3a,0xfe,0x46,0x8a,0xa6,0xec,0x06,0x0c,0xea,0xb8,0x82,0x49,0xb5,0xed,0x94,0xf2,0xac,0x76,0xd5,0x87,0x79,0x15,0x4f,0xa1,0x34,0x90,0x8e,0x7b,0x02,0xf7,0x02,0xb0,0x07,0xa5,0x7c,0x6b,0xc2,0x34,0x84 +.byte 0xd4,0xaa,0xbf,0x32,0x81,0xf7,0xed,0x1f,0x61,0xd7,0x6e,0x40,0xa0,0xdc,0x4c,0xb5,0xb7,0x36,0x3a,0x87,0x09,0x82,0xd5,0x5a,0xc8,0x1f,0xe6,0x77,0xa6,0xaa,0xcf,0x3c,0x7b,0x23,0x46,0x58,0x95,0x7f,0x84,0xba,0x4a,0x05,0x0b,0x36,0xdb,0x58,0xf9,0xa4,0x2b,0x24,0xd4,0x8a,0xbc,0xb2,0xb7,0x04,0xac,0x64,0x0e,0x88,0x25,0x9a,0x69,0xe7 +.byte 0x87,0x70,0x0b,0xa6,0x43,0xe9,0xb2,0xbb,0x4e,0x4c,0x10,0x19,0x44,0x4d,0x12,0x4c,0x58,0x2a,0x49,0xe2,0x01,0xd2,0x65,0x23,0xee,0xe9,0xca,0x0b,0xa1,0x28,0x02,0x8d,0xcf,0x37,0x06,0xbc,0x5d,0x35,0xba,0xec,0x97,0x95,0xcc,0xfe,0x7b,0xc9,0x1c,0x0d,0x89,0x4e,0xe1,0x8d,0x9b,0x5e,0x5b,0xb9,0x6c,0x24,0x73,0x9a,0x62,0xd7,0xc5,0xfa +.byte 0x54,0xeb,0x05,0x22,0xd9,0xe7,0xc4,0x68,0x88,0x20,0x43,0xd9,0x14,0x47,0xd7,0xa5,0xd0,0xce,0x10,0x77,0xe8,0x5c,0x85,0x39,0x99,0x3f,0x72,0x88,0x4f,0x22,0x15,0x87,0xa0,0xa3,0x47,0x10,0x81,0x64,0xff,0x94,0x77,0x5d,0xce,0x6d,0xd8,0x29,0xb1,0x9c,0x8e,0xce,0xa8,0x39,0x4f,0xfc,0x36,0x3c,0x50,0xb2,0xf1,0x08,0x66,0x1a,0xf0,0x22 +.byte 0x65,0x1f,0x4d,0x17,0xd3,0x63,0x10,0x64,0xd1,0xc6,0x5a,0x3e,0x82,0x72,0x0c,0x48,0x5e,0x07,0x9c,0x07,0xa0,0x40,0x60,0xab,0x74,0x9a,0x00,0xdf,0xd7,0x7d,0xd4,0x11,0x4e,0xce,0x5a,0xaf,0x12,0x4f,0xe7,0x12,0x36,0x1a,0x12,0x11,0x16,0xb7,0xad,0x4b,0x28,0x84,0x7b,0xd8,0x30,0x0d,0x85,0xb8,0x76,0xde,0xa3,0x78,0x8c,0xb7,0x7c,0xbc +.byte 0x97,0x33,0x53,0x95,0xf8,0x14,0x5f,0xf8,0x0d,0xc1,0x6b,0x79,0xa2,0x42,0x49,0xab,0xae,0x8e,0x78,0xf3,0x51,0x01,0xcc,0x20,0x36,0x80,0xbd,0x32,0x0b,0x1b,0xd2,0xcd,0x27,0x52,0x69,0x1b,0x4a,0x37,0xba,0x31,0xe4,0xc2,0x03,0x8d,0x00,0x48,0x4b,0xcd,0x39,0x2e,0xec,0x94,0x2e,0xe0,0x81,0xfd,0x94,0xd9,0x86,0x39,0x23,0x87,0x3c,0x2f +.byte 0x25,0xe1,0x5b,0x22,0xe0,0x2e,0x37,0x6d,0x9b,0x97,0x9c,0x94,0x37,0x01,0x26,0xb8,0xb1,0x73,0x7c,0xfc,0x0a,0x64,0xe7,0x54,0xf1,0x0f,0x71,0xa1,0xd6,0xc7,0xc8,0xb4,0x86,0x2d,0xfe,0x30,0x8b,0xca,0xb2,0x18,0x21,0xc0,0xc7,0x7d,0x60,0xcf,0x2e,0x25,0xb0,0xa4,0x1a,0x28,0x19,0xa9,0xa9,0x15,0x32,0x5e,0x21,0x89,0x3a,0x99,0x5f,0x50 +.byte 0x86,0x37,0x3b,0x10,0xb8,0xa5,0xad,0x8e,0xbf,0xfc,0x8c,0x85,0xf1,0x76,0x5c,0xe7,0x4d,0xac,0xe7,0x21,0xb3,0x45,0x87,0x3b,0x05,0xc8,0x41,0xf4,0x99,0x83,0x28,0x40,0x6b,0x30,0x37,0x31,0xd2,0xb3,0xdd,0x43,0x3b,0x3f,0xec,0x50,0x58,0x7d,0x20,0xc6,0xb2,0xa9,0x3c,0x22,0x38,0xea,0x16,0x32,0x01,0xc4,0xb0,0x9f,0x7d,0x12,0x91,0x82 +.byte 0x0c,0xd8,0x36,0xfc,0xa4,0xec,0x06,0xb2,0xc2,0xce,0x9b,0xa4,0x53,0x71,0x77,0xdd,0xc3,0xfc,0x34,0x6f,0xd9,0x5c,0xfc,0x36,0xdd,0x63,0x19,0x06,0xfb,0x3c,0xf3,0x3f,0x82,0x28,0x6d,0x00,0xf9,0xfd,0x8d,0x6b,0x79,0x06,0x8a,0xe7,0x6f,0xcc,0x39,0x12,0x80,0x71,0xcb,0x71,0xb3,0xb6,0xa4,0xa8,0xbe,0x61,0x9d,0x1f,0x48,0xa2,0x15,0xa1 +.byte 0xb5,0xf5,0x16,0x70,0xc5,0x39,0xce,0x43,0xa3,0x09,0xe5,0xf4,0x8b,0x77,0x18,0x5e,0xa0,0x77,0xa3,0xa4,0x17,0x2c,0x3e,0x50,0x73,0x2f,0xaa,0x5d,0x58,0x5e,0xdc,0xec,0xaf,0xca,0x6e,0x57,0x80,0xa3,0xd5,0x94,0x30,0x7c,0x11,0x75,0xc4,0xbb,0x9d,0x18,0xc1,0x5a,0x58,0xc7,0x04,0x56,0xb1,0x3a,0x21,0x55,0x02,0xea,0xad,0x58,0x19,0x72 +.byte 0xdc,0x7d,0x0e,0x41,0x62,0x1b,0x5c,0x48,0x97,0x3f,0xed,0xd7,0x4e,0x30,0x1f,0xf5,0xde,0xc5,0x23,0xf2,0xd7,0x22,0xde,0x2f,0x3e,0x80,0x06,0x81,0xf6,0x24,0xb7,0x91,0x09,0x56,0x91,0x00,0x1a,0xea,0xaa,0xa6,0xc2,0x8b,0xc9,0x78,0xd7,0xde,0xf6,0x87,0xb1,0x04,0xcc,0xbb,0xc1,0xc6,0x48,0x43,0xc8,0x03,0xb2,0xdd,0x70,0xc0,0xe3,0xf5 +.byte 0xc0,0xf5,0x13,0xd5,0x11,0x41,0x7f,0x1a,0xdc,0x48,0xf5,0xd6,0x1b,0x0a,0x84,0xd2,0x84,0xcd,0x10,0x4f,0x0a,0xd7,0xcb,0x41,0x61,0x1c,0xcc,0x5c,0xa9,0xbd,0x6e,0x6a,0xf3,0x81,0xd8,0xaa,0x3a,0xff,0x39,0x90,0x8e,0x33,0xe6,0x58,0x13,0x5f,0xec,0x58,0x74,0x35,0xe0,0x06,0x38,0x0f,0xd0,0xbf,0x8d,0xf7,0x26,0x99,0xea,0xdd,0xfb,0xdf +.byte 0x5b,0xcc,0xf1,0x3d,0x9b,0x84,0x8b,0x5b,0xe8,0xc4,0xc6,0x3e,0x0a,0x55,0xec,0x73,0xf7,0x70,0xb1,0xc8,0xfa,0xf8,0xd6,0x72,0x2c,0x6d,0x8d,0xc1,0xa3,0xb2,0x9a,0xe7,0x80,0x6d,0x09,0xa6,0x76,0x06,0x71,0xf9,0x95,0x9a,0xa9,0x2f,0x4b,0x7c,0xad,0x64,0x01,0x01,0x91,0xe4,0x87,0x1d,0xe1,0x46,0xf5,0x4a,0x96,0xc6,0x58,0xd9,0xe0,0xa9 +.byte 0x2f,0x80,0x1e,0xd6,0xe9,0xa6,0xeb,0xfe,0x5a,0xb6,0xd3,0xe8,0x76,0xd2,0x51,0xc6,0x68,0x34,0xc9,0xed,0x76,0x29,0x7e,0x63,0xb1,0x09,0xdf,0x23,0x47,0x41,0x2f,0x70,0x46,0x4d,0xbb,0x36,0xc8,0x84,0xe9,0x58,0x20,0x6b,0x04,0xb2,0xa4,0x1c,0x4d,0xe0,0xa5,0xa2,0x59,0xc9,0xed,0x63,0x25,0x5f,0x3f,0x24,0x18,0x59,0x29,0xe3,0x79,0xbd +.byte 0x35,0x50,0xee,0x81,0x59,0xff,0xd4,0x0e,0x62,0xd3,0x52,0x30,0x81,0xa2,0xe6,0x9e,0xc3,0xc9,0x7a,0x10,0x57,0x36,0x27,0xb7,0x3c,0x61,0x38,0x89,0x70,0xa0,0xc5,0xdf,0x78,0x05,0xa5,0x81,0xe2,0x8a,0x93,0xda,0x7c,0xaf,0xbf,0x6d,0x42,0x09,0x1b,0x43,0x9d,0xf9,0x26,0x87,0xc3,0x84,0x6c,0xb7,0x25,0x31,0x50,0x00,0xd8,0x13,0xc0,0xc0 +.byte 0x6c,0x21,0x82,0x6d,0xf9,0x2f,0xef,0x40,0xe8,0xf8,0xae,0x4d,0x9e,0x1d,0x4a,0xda,0xa0,0x0d,0x77,0x36,0x8b,0xed,0xaf,0x6e,0x2a,0x3d,0xa8,0x36,0xe4,0xff,0x37,0xc2,0xa3,0x11,0x5e,0x68,0x58,0xa8,0xa3,0x19,0xf3,0xc1,0x33,0xea,0x39,0x49,0xfe,0x51,0x87,0xb6,0x31,0x6a,0x61,0x47,0xe7,0xb1,0x46,0xde,0x5a,0xf7,0x93,0x06,0xa7,0x72 +.byte 0xa9,0x2e,0x9e,0x2e,0xc9,0x7f,0xe1,0xb2,0x86,0xb4,0xc9,0xff,0x3b,0xf7,0xaf,0xef,0x91,0x47,0xc2,0xfa,0x42,0x0a,0x4e,0xbb,0x10,0x0d,0xea,0xa4,0x11,0x54,0xa9,0x53,0xde,0xc4,0x01,0xde,0xc7,0x2d,0x1f,0x18,0x40,0x79,0xd1,0x44,0x7d,0x51,0x1d,0xf6,0xdc,0x6f,0xad,0xa2,0x5d,0xd9,0xbe,0x5d,0x11,0x57,0xb7,0x68,0x0d,0x96,0xad,0xb3 +.byte 0x32,0xf7,0x99,0xcc,0x0e,0x03,0xa2,0x79,0x9b,0x63,0xce,0xee,0xf9,0x0c,0xfd,0xfa,0x9a,0x82,0xc9,0x43,0xd3,0xd5,0x23,0xfa,0xac,0x75,0xbe,0x61,0x85,0x18,0xb6,0x75,0x72,0x8d,0x17,0xdd,0xde,0x3f,0x6d,0xb4,0xe8,0x47,0x09,0xe1,0xa7,0xe0,0x4c,0xce,0x93,0x7b,0xc3,0xa3,0x3f,0xc0,0x81,0x21,0x6f,0xe8,0xce,0x68,0x61,0xde,0x1a,0x58 +.byte 0x48,0x7f,0xb4,0xae,0xfd,0x7c,0x80,0x63,0x43,0x5a,0xfc,0xf9,0xf9,0x4d,0xb4,0x8c,0x85,0x27,0x12,0x4f,0x7d,0xe8,0x69,0xc3,0x7d,0x57,0x63,0x0d,0x5f,0xd2,0x85,0x4e,0x0c,0x9a,0x0d,0x1c,0x4d,0xdf,0x3f,0x9a,0x16,0x2f,0x34,0x43,0xc3,0xf0,0xf1,0x16,0x16,0xd2,0x9f,0x2e,0x78,0xd8,0x3c,0x63,0xa0,0x7e,0x02,0x8e,0x65,0xd2,0xb0,0x61 +.byte 0xb0,0x1d,0x7a,0x8f,0xf7,0x30,0x45,0x05,0xf7,0x15,0xc3,0x69,0x24,0x98,0xc3,0x74,0x20,0x16,0x09,0x57,0x39,0x16,0x68,0x23,0x33,0x62,0x4c,0xf5,0xd6,0x34,0xe3,0xad,0x7a,0x14,0x64,0x8c,0x2b,0x48,0x96,0xf9,0x85,0x39,0x19,0x73,0x27,0x04,0xa6,0x55,0x66,0x15,0x8c,0xf1,0x47,0xcd,0x53,0xaf,0x31,0x3a,0xd9,0xfa,0xf9,0xac,0xbd,0xb8 +.byte 0x27,0xe0,0xaa,0xa5,0x62,0x85,0x9f,0xbb,0x4e,0xaf,0xa5,0x72,0x42,0x98,0xa6,0x7f,0xa1,0xb6,0xac,0x17,0xc2,0x2c,0xf3,0xd6,0xc0,0x14,0x4b,0xb3,0x86,0x88,0x89,0x81,0x83,0x7d,0x9d,0xf7,0xe3,0xe4,0x27,0xba,0xa8,0x03,0xb4,0xe3,0x97,0x74,0x1c,0x0d,0xab,0xb4,0x6e,0xc6,0x9e,0x58,0xdd,0x15,0x95,0x2f,0xa6,0xd6,0xaa,0x5a,0x96,0x71 +.byte 0x69,0xca,0xe0,0x5f,0xd2,0x3c,0x66,0x1b,0x58,0x25,0xd6,0xec,0xc0,0x46,0x3e,0x56,0xd0,0xe1,0x36,0x44,0x56,0xc0,0xf2,0x15,0x48,0x9e,0x07,0xce,0x5d,0xb9,0xd4,0x4e,0xcc,0x31,0x26,0xaa,0xdb,0x6a,0x87,0x98,0x0e,0x37,0xfc,0xc5,0x91,0x28,0x1b,0xf8,0x70,0xbf,0x30,0x71,0xbe,0xa0,0x81,0x1e,0x30,0x33,0x37,0x37,0xc8,0x07,0x08,0x9b +.byte 0x8f,0xe4,0x27,0x9f,0x90,0x67,0xb4,0x96,0x08,0xd7,0x30,0x9e,0xa6,0x53,0x39,0xd1,0x9b,0xde,0x02,0x35,0xf3,0xb1,0x19,0x7b,0xd2,0x28,0x5a,0xc3,0x1f,0x69,0x0e,0x48,0xbf,0xa3,0xb4,0x55,0xd1,0x10,0x3d,0x30,0x71,0xc6,0x82,0x2d,0xb8,0x6f,0xe6,0x99,0x6b,0xef,0x9f,0x86,0xed,0x93,0x13,0xb6,0xb0,0x87,0x91,0x77,0x4a,0x00,0xe4,0x5f +.byte 0x4c,0x7d,0x41,0x3b,0xc9,0xda,0x99,0x6b,0xff,0xec,0xef,0x05,0x3c,0xc6,0x0d,0xec,0x68,0x12,0x44,0x31,0xac,0xc9,0x0b,0x9c,0xf5,0xea,0xed,0xda,0x88,0xec,0x6e,0x6e,0x73,0xda,0x85,0x52,0x69,0xa1,0x13,0x52,0xcf,0xc3,0x4d,0x95,0x88,0xec,0x1f,0x53,0x81,0x6f,0xac,0x53,0x60,0x48,0x20,0x9a,0x4d,0x88,0x2c,0x4b,0xb0,0x69,0x5f,0x07 +.byte 0xf9,0xa7,0x2c,0x9a,0x13,0x91,0x86,0xa2,0x98,0x20,0xa9,0x80,0x1e,0xaa,0x8e,0xbc,0x3c,0x3d,0x51,0x34,0x3d,0x5b,0x80,0xe4,0x39,0xfe,0xc8,0xb1,0x6d,0xfe,0x36,0x9d,0x9b,0xde,0x22,0x39,0x41,0xe9,0xff,0xda,0x67,0x67,0xd4,0xeb,0x60,0x44,0xd5,0xc1,0x74,0xcd,0xa0,0x98,0x06,0x34,0x76,0xf8,0xe5,0x0d,0xc8,0x52,0xca,0x83,0xd2,0xdd +.byte 0xf2,0x12,0x36,0x7d,0x3e,0x7f,0xbd,0xa6,0xd8,0x1e,0xc0,0x9d,0x67,0x2a,0x33,0x87,0x86,0x79,0x7a,0x70,0x3a,0x63,0x0b,0x74,0x77,0x89,0xce,0x8f,0x5a,0x3b,0xf3,0x2e,0x52,0x4d,0x1d,0xc6,0xc3,0xc8,0x69,0x98,0xdc,0x81,0x45,0x99,0xfd,0xcd,0x6b,0x6d,0x05,0x33,0x40,0xde,0xb3,0xbd,0x4a,0x27,0xc2,0x9e,0x8b,0xf1,0x4c,0xac,0x92,0x82 +.byte 0x55,0x04,0x79,0xe7,0x28,0x74,0x5b,0x70,0xdc,0xc0,0x4f,0x0c,0xcf,0x3a,0x7f,0x08,0xcc,0x2e,0x1d,0xfd,0x8d,0xd9,0x5c,0xe2,0xa7,0x98,0xc1,0xe8,0x4b,0x96,0xbe,0x27,0xd6,0xfd,0x0a,0x59,0x30,0x33,0x85,0x41,0xc5,0x63,0xab,0xe7,0xda,0x26,0xbd,0xce,0xe7,0x9d,0x50,0xd7,0x2d,0x67,0x7a,0xa1,0x05,0x2b,0x74,0x60,0x5e,0x6c,0x04,0x2b +.byte 0xba,0xe6,0x2d,0x25,0xc9,0x00,0xd0,0xf0,0xa5,0x4f,0x22,0x59,0x34,0xb8,0x43,0x6b,0xb7,0x67,0x25,0x99,0xff,0x75,0x17,0xb1,0x13,0x7e,0x34,0x1d,0x42,0xa3,0x6b,0xb5,0x9d,0xfe,0xa1,0x71,0x0d,0x90,0x81,0x58,0xfc,0xc7,0x85,0xe6,0xbd,0xc2,0xcc,0xc9,0xc9,0x23,0x6e,0xd6,0xbe,0x4a,0x61,0xd4,0xf5,0x9e,0x37,0x6a,0xb1,0x8b,0x91,0x59 +.byte 0xe1,0x3e,0xac,0x87,0x54,0xa6,0xf9,0xf5,0x90,0xd2,0x7c,0xba,0x4b,0x37,0x33,0x1b,0x88,0x5e,0xbd,0x78,0x3f,0xed,0x43,0x40,0x4f,0x16,0x59,0x29,0xbc,0x27,0x98,0x87,0xfe,0x62,0x56,0x93,0x21,0x0a,0xca,0xc1,0x21,0x99,0xb3,0x32,0xbb,0x5a,0x79,0x40,0xab,0xea,0x00,0xf8,0xe9,0x90,0x0d,0x59,0xbd,0x6e,0x7f,0x74,0x01,0x50,0x67,0x3a +.byte 0x8e,0x24,0x1d,0x6c,0xc8,0xd6,0x93,0xca,0x71,0x95,0xec,0xac,0x78,0xe9,0x1f,0x38,0x0d,0xa2,0xe5,0x32,0x90,0xa2,0xaf,0xef,0x15,0x06,0xd6,0x52,0xa4,0xd2,0x94,0x0f,0xbd,0x86,0x81,0x82,0x12,0x9b,0x3a,0xc4,0x0b,0xdf,0x8a,0x5f,0xc6,0x3b,0xb4,0x13,0x9b,0xeb,0xed,0x2d,0x06,0x46,0xa3,0xbe,0xbb,0xe1,0xe1,0x93,0xa1,0xab,0x46,0xf3 +.byte 0xd0,0xd9,0xce,0xb6,0xfb,0xd0,0xd5,0xb6,0xde,0x0c,0xed,0x90,0x18,0x6c,0x1e,0x46,0xb0,0x36,0xa7,0xf1,0x29,0xbe,0x9a,0xa0,0xcf,0xed,0xd6,0xaf,0xb8,0x89,0x9b,0x83,0xa8,0xa0,0x8d,0x26,0xaf,0x8f,0x48,0x66,0xfc,0x22,0x1a,0xc0,0xcf,0xf8,0x90,0x57,0x7e,0x25,0x5f,0xe4,0x0c,0x68,0xd2,0xaa,0x59,0x09,0x2f,0x6d,0x3f,0x80,0x8d,0xe0 +.byte 0xfa,0x25,0xb0,0xe0,0x85,0xe9,0x13,0x39,0x3d,0x1f,0xed,0xd1,0x94,0x9b,0xb5,0xc2,0x65,0xda,0xec,0x7a,0x1f,0x2f,0xe2,0x0a,0x42,0x09,0xbd,0x79,0x7d,0xcb,0xb8,0x4a,0x02,0x2b,0x72,0xaf,0x33,0x85,0x72,0x1b,0x18,0x0c,0xa3,0xec,0x39,0x0e,0x30,0x21,0x41,0xf8,0x2e,0xc7,0x8e,0x5c,0x4c,0xda,0x22,0x49,0x8c,0xa7,0xfb,0x89,0x76,0x2e +.byte 0x45,0x90,0x6c,0xeb,0x70,0x78,0x6d,0x6e,0xee,0x12,0x6c,0xb9,0xb9,0x8d,0xe7,0xf3,0x4d,0x86,0xc4,0x58,0x49,0x55,0xa6,0x86,0xaf,0x39,0x03,0x21,0xfa,0xa7,0xdd,0x51,0x80,0x79,0x6d,0x5b,0xa5,0x58,0x0f,0xfd,0x57,0xb3,0x83,0xe6,0x0d,0x25,0xec,0x55,0xdc,0x0a,0x6f,0xbc,0x7d,0xfd,0x94,0x16,0xdd,0x60,0x9f,0x2a,0x4b,0x6c,0x82,0x03 +.byte 0x4b,0x44,0xbb,0x84,0xdc,0xcb,0x97,0x8e,0x58,0xe7,0xc1,0x79,0xa9,0xf3,0x53,0x78,0x1f,0xf1,0x3e,0xdd,0x94,0x24,0x6d,0xb1,0xd2,0x99,0xbc,0xa1,0xbe,0x7d,0xdd,0xff,0xa8,0x5d,0xd2,0xc2,0xba,0xad,0x60,0x6b,0x40,0x5d,0x7b,0x99,0xd2,0xea,0x45,0x66,0x80,0x6c,0x47,0xf2,0xeb,0x94,0xb8,0xe8,0xe8,0xa0,0x46,0x05,0xe1,0x4f,0x40,0x23 +.byte 0x34,0xdf,0x91,0x63,0xae,0xc9,0xe7,0x32,0x20,0x9a,0x95,0x1e,0xcd,0x5a,0x60,0xe1,0x3d,0xe0,0xf1,0x16,0x3d,0x6e,0x8b,0x96,0x23,0xe0,0xaa,0x1d,0x1a,0xde,0xed,0xc6,0x63,0xb5,0x46,0x8b,0x78,0x71,0x9a,0x14,0x88,0x79,0x61,0x68,0x6b,0xcf,0x80,0xd8,0x9c,0xaa,0xfb,0xb1,0xc0,0xf3,0x39,0x07,0x26,0x56,0x80,0xba,0x9d,0xf5,0xe7,0x95 +.byte 0x99,0xac,0x90,0xea,0xe7,0xe1,0xc9,0x0d,0x40,0x94,0x83,0x58,0xd2,0xc3,0x2b,0xce,0x1e,0xae,0x2a,0xa6,0xfa,0xc7,0x89,0x44,0xcb,0xe2,0x9e,0x74,0x33,0xaa,0x70,0xe5,0x28,0x3a,0x51,0x74,0x53,0xe2,0xfb,0x7c,0x47,0x76,0x22,0xdf,0x46,0xa6,0x01,0x17,0xef,0x88,0x43,0x46,0x3f,0x1a,0x26,0x0c,0xad,0xf4,0x31,0x55,0xf2,0xe7,0xc9,0x35 +.byte 0x6f,0x7c,0x0c,0x5c,0xfd,0x43,0xa4,0x6c,0x6c,0x74,0xf0,0xa4,0xec,0x1d,0x83,0x97,0xc1,0x6c,0x9c,0xd7,0x97,0x90,0x7c,0x07,0x88,0xc0,0xb4,0x79,0x2c,0x7a,0x9c,0x93,0xa2,0x15,0x6c,0xd2,0xa9,0x45,0xa5,0xc1,0x16,0xfe,0x72,0xf4,0x01,0x32,0xe4,0x51,0xdd,0xdb,0x50,0xe3,0x61,0x4e,0x29,0x1e,0x27,0x10,0xe9,0x5e,0x30,0x2b,0x30,0x27 +.byte 0x99,0xff,0x92,0x23,0x04,0x8d,0x28,0x68,0x28,0xd3,0x0f,0xec,0xbb,0xf9,0xfb,0x44,0x1c,0xaa,0x8b,0x38,0x95,0x67,0x1e,0xf5,0x42,0xc9,0xec,0x05,0xeb,0x94,0xe5,0x1c,0x8a,0x2a,0xef,0x3b,0x74,0x46,0x89,0x4f,0xd5,0x6f,0xa0,0xe5,0x74,0xae,0x24,0x8d,0x81,0xae,0x9d,0x3c,0x3e,0x3d,0x41,0x54,0x8f,0xd9,0xc2,0x98,0xf4,0x84,0xeb,0x30 +.byte 0x6a,0x06,0x67,0x11,0x2d,0xb0,0x55,0x70,0x26,0xdf,0x19,0x5f,0x81,0xe9,0x39,0x69,0x3a,0xd6,0x09,0xa4,0x40,0x22,0x1f,0x5c,0xbf,0xd5,0xa6,0xea,0x69,0x99,0x0d,0xea,0x70,0xed,0xfe,0x3a,0xba,0x23,0x8b,0xab,0x08,0xfe,0xfb,0xe9,0x1a,0x88,0x80,0x13,0x45,0x9c,0xca,0x2e,0xda,0x4a,0xc8,0x5d,0x15,0x52,0x87,0x36,0x9b,0x87,0x8a,0x76 +.byte 0x5d,0x31,0x24,0x4a,0xcb,0xf5,0xd3,0xd3,0xc1,0xec,0xde,0x1e,0x48,0x99,0xd5,0xcb,0x93,0xf7,0xca,0x2d,0xa4,0x66,0x5e,0xa4,0xcf,0xc6,0x15,0x20,0x10,0xb1,0xe2,0x8e,0xb9,0x44,0xa7,0xc3,0x54,0x14,0x86,0x08,0xb7,0x89,0x52,0xd5,0x72,0xc5,0x62,0x4d,0x82,0x96,0x23,0xcf,0x6e,0x52,0x3a,0x92,0x53,0x48,0xa2,0xa5,0x9d,0xa4,0xcc,0x32 +.byte 0x45,0x5a,0xdf,0xe2,0xbe,0xce,0x28,0xc8,0xb1,0xb7,0x0f,0x6a,0x38,0x28,0x14,0x66,0x55,0x7a,0xab,0x35,0x56,0xd0,0xc7,0xe5,0xa1,0x8a,0x84,0xf7,0xc5,0xa9,0xdb,0x2a,0x45,0xe9,0x34,0x2d,0xf2,0xed,0x2b,0xa9,0x9e,0x49,0x1b,0x23,0x10,0xeb,0x0e,0x01,0x46,0x6f,0x7a,0x50,0x09,0x5f,0xc3,0xb6,0x1e,0x2f,0x1a,0x3e,0x89,0x32,0xaa,0x5a +.byte 0xaa,0xef,0x23,0x45,0xdc,0xb5,0x7e,0x5f,0x87,0x77,0xde,0x50,0xab,0xbf,0x9e,0x62,0xa8,0xe0,0xf0,0xc8,0x4a,0xf1,0x4e,0xaf,0xe4,0x50,0x8a,0xfe,0xc9,0x68,0xdd,0x19,0x1d,0xc6,0x54,0xe5,0x38,0x0a,0x6f,0x36,0xe4,0x85,0xe8,0xab,0xc4,0x06,0xef,0x07,0x29,0xce,0xea,0x9d,0x2e,0x22,0x97,0x18,0x7e,0x59,0x89,0x92,0x31,0xc5,0x87,0x50 +.byte 0xa8,0x23,0x22,0x58,0x47,0x27,0x1c,0x89,0x5f,0xec,0x94,0x1d,0xb2,0xc8,0x61,0x1e,0x0a,0x80,0xd3,0xe9,0xbf,0x65,0xb9,0x66,0x32,0x56,0xde,0xd2,0x13,0xee,0xea,0xc4,0xc9,0xbf,0x4c,0xb7,0xa4,0x1c,0xc0,0xbf,0xcf,0xa4,0x58,0x1f,0x98,0x1d,0x25,0x4e,0x51,0xd9,0xbe,0x89,0x32,0xdb,0x7a,0xa6,0x39,0xa9,0xbf,0xed,0x65,0x6b,0x92,0xc4 +.byte 0x8d,0xcd,0x63,0x18,0x65,0x44,0x95,0xcf,0x17,0x72,0x8f,0x27,0x79,0x83,0xda,0xe3,0xe7,0xd9,0xca,0x57,0xff,0xa3,0x15,0xbf,0xb6,0xd8,0xc2,0x8c,0xe8,0xdb,0x8c,0xdc,0x54,0x6a,0xc8,0x57,0x6e,0x24,0xc3,0x3c,0x1f,0x33,0xdd,0x68,0xbd,0x7a,0xa3,0xbc,0xa9,0x9a,0xe8,0xfc,0x97,0xa5,0xbe,0x59,0xfb,0x77,0xcd,0x22,0xc6,0x3d,0x95,0x21 +.byte 0xcb,0xf7,0x8d,0xc1,0x77,0xc6,0xe0,0x06,0xb2,0xdb,0xec,0x54,0x19,0xad,0x02,0x25,0xe0,0x0f,0xda,0x4c,0xa5,0xf2,0x47,0x3f,0xc9,0xa0,0x91,0x21,0x39,0xe9,0x74,0x2a,0x9a,0xc1,0x57,0x86,0x3c,0x32,0x27,0x4c,0xc2,0x2d,0x50,0xbd,0x7a,0x04,0x9c,0x45,0x0d,0x7e,0x06,0x1d,0x3e,0xc1,0x6f,0x06,0x7f,0xd4,0x71,0xd3,0x5c,0x66,0x74,0xa7 +.byte 0x33,0x75,0x64,0xa8,0x7d,0xc0,0x23,0xda,0xb0,0x6d,0x12,0xbe,0x83,0x98,0xe7,0x65,0x38,0x4d,0x39,0xc3,0xd7,0x33,0xfb,0x58,0x64,0xfc,0xde,0xd7,0xbf,0x9e,0xdb,0xcc,0x7a,0x35,0xac,0xdf,0x13,0x08,0xbc,0x0a,0x55,0x82,0x5f,0xc3,0x74,0xc5,0xb2,0xdb,0x89,0xdc,0x9c,0x60,0xfa,0x02,0x1c,0xba,0x5b,0x7e,0x0f,0xb1,0x0f,0xad,0x43,0xe1 +.byte 0xe1,0xbe,0x1e,0x06,0x05,0x0f,0x39,0x80,0x3d,0x7d,0xbe,0x8f,0x38,0x25,0x46,0x5e,0xea,0x47,0x36,0x65,0x4c,0x3c,0x6c,0xd6,0xaa,0x46,0xaa,0xb0,0x95,0x1d,0xff,0x67,0x6c,0x70,0x9d,0xec,0x3d,0x3d,0x4c,0x2f,0xd9,0x2b,0xb0,0xbd,0x8c,0x6a,0xca,0xac,0x0c,0x53,0xa1,0xda,0xd8,0xc1,0x3c,0xaa,0xcc,0x50,0x85,0x41,0xa1,0xa7,0xe9,0x7f +.byte 0xf7,0xa8,0x28,0xb1,0x5f,0xd6,0x77,0xc9,0xb5,0xae,0x33,0xa7,0x2d,0x16,0xe0,0x13,0xe8,0xd4,0xf9,0x4e,0x62,0x2e,0xc2,0x9a,0xf3,0x83,0xe0,0x45,0x43,0x68,0x40,0x5a,0x56,0xf3,0x31,0xc8,0x5b,0x46,0x0b,0x38,0x1f,0xa5,0xff,0xe6,0xa1,0x81,0xc0,0x91,0xe5,0x5a,0x63,0x8f,0x47,0x9a,0xe7,0x26,0x0d,0x78,0x8d,0x11,0x7d,0xc8,0xd4,0x9f +.byte 0xc1,0xf7,0x8f,0x93,0xfa,0x2f,0xb5,0xfd,0x6d,0xa4,0x34,0xcf,0x3c,0x6c,0xf6,0x64,0xae,0x5c,0x60,0xa2,0xb4,0xcc,0x18,0x3e,0x08,0x8e,0x36,0x88,0xab,0xc3,0xea,0x53,0x4f,0x1c,0x9e,0xe6,0xef,0x2d,0x9c,0x78,0x4a,0x3a,0x5a,0x60,0x8e,0xf7,0xeb,0x0b,0x36,0xb1,0xbb,0x59,0xe2,0x5e,0x64,0x60,0xe5,0xd6,0x3d,0x2a,0xe1,0x1b,0x03,0x40 +.byte 0x8d,0xde,0x2e,0xd0,0x76,0x0a,0x6b,0x63,0x2a,0x53,0x2d,0x39,0xe0,0x53,0xee,0x7d,0xc4,0x8a,0x39,0xc5,0xda,0xfc,0x31,0x7e,0xa2,0x1b,0x11,0x1d,0x8a,0x8e,0x66,0xf4,0x00,0x17,0xd3,0x78,0x1b,0x94,0xad,0xcf,0xdd,0x56,0xce,0xaf,0xf6,0x34,0xe4,0xb6,0x47,0xe0,0xda,0x1b,0x36,0x4f,0x86,0x26,0xc1,0x65,0xec,0x85,0x8c,0xa9,0xfe,0x96 +.byte 0x75,0x0d,0xe3,0xeb,0x9a,0xa6,0x3f,0xb3,0x10,0x03,0x85,0x24,0xf2,0xb5,0xcd,0x69,0x7d,0xba,0xa2,0x5c,0x8a,0x6d,0x45,0xf4,0xc8,0x4f,0x69,0x8e,0xd4,0x69,0x82,0x42,0xfd,0x00,0x59,0xfd,0x20,0x7a,0x63,0x58,0x56,0x30,0x21,0x73,0xbd,0xd4,0x49,0x84,0x3f,0x51,0x0e,0xfb,0xd3,0xfc,0x93,0x17,0x7f,0x23,0x75,0x25,0xea,0x78,0x79,0xf7 +.byte 0xec,0x22,0xef,0x86,0x91,0x0a,0x90,0x10,0x71,0x3b,0xb8,0x8e,0xb7,0xc9,0xd1,0x26,0x98,0x7d,0x1a,0xab,0x74,0x3e,0x5f,0x10,0xa8,0x47,0xdf,0xc9,0x0a,0x03,0xbb,0xe2,0xbb,0x34,0xbe,0x87,0x1a,0x3e,0x13,0x4b,0xd5,0xdd,0x53,0xb7,0x65,0xb4,0x16,0x38,0xd3,0xfd,0x01,0xde,0xe8,0xba,0x1d,0x33,0x5b,0x7b,0x9b,0x9f,0xfb,0xe7,0x8d,0x82 +.byte 0x21,0x78,0x9e,0xb2,0xf5,0x16,0x37,0x88,0x47,0x9d,0x1a,0x2c,0xfe,0x6a,0xac,0xde,0x3e,0xc4,0xa8,0xed,0x64,0x46,0xdd,0x05,0x07,0x60,0xef,0x99,0x96,0xf0,0x84,0x27,0x38,0x58,0xe5,0xc0,0x53,0x7d,0x07,0xe3,0xa5,0x31,0xb5,0x8a,0xe7,0x50,0x94,0xbb,0x29,0xf9,0x58,0x13,0x91,0x5b,0x54,0x77,0xf6,0x91,0xb8,0x75,0x05,0x3d,0x70,0x3e +.byte 0x07,0x95,0x7d,0x37,0xbd,0x1d,0x29,0x4d,0x33,0x07,0x13,0x2b,0x54,0x70,0x9c,0x31,0xf1,0xcd,0x2d,0x28,0x09,0x43,0x90,0x24,0x8c,0x82,0xb0,0x08,0x71,0x08,0x97,0x7e,0x1a,0xbc,0x82,0xd8,0x31,0x0a,0x13,0xe9,0x22,0xf0,0x8d,0x2b,0x91,0xe5,0x2e,0x34,0x56,0x97,0x86,0xc9,0xbd,0x45,0x1e,0x32,0x03,0xcb,0xa1,0x29,0x00,0x81,0xd4,0x6e +.byte 0x5d,0xbc,0x0f,0x01,0x8d,0x5c,0xb9,0x80,0xcc,0xfe,0x0d,0xa3,0xef,0x8e,0x85,0x59,0x37,0xf7,0x64,0xa7,0xe5,0x2a,0xd5,0x44,0xee,0x91,0xcf,0x6c,0xf5,0x0a,0x9b,0xc7,0xdf,0xb6,0x02,0x2d,0xa4,0xf1,0x22,0x2a,0x97,0xfe,0x1d,0xb7,0x4c,0xc7,0x4f,0x2f,0x0b,0x38,0xd2,0xbf,0xfe,0xe3,0x94,0x55,0xae,0x85,0x0c,0x34,0x59,0x67,0x23,0x7b +.byte 0x4a,0x87,0xd9,0xd2,0xca,0xd5,0x38,0xd2,0x9d,0x05,0x2e,0xd8,0xe3,0x26,0x51,0xa4,0x14,0x66,0xfb,0x38,0x40,0x18,0x3b,0xda,0x43,0x85,0xc9,0xf5,0xf4,0xe7,0x22,0x82,0x45,0xa1,0xdf,0x98,0xa0,0xab,0x5f,0x7a,0x50,0x84,0x75,0x7a,0x70,0xa6,0x3b,0x04,0x20,0xed,0xa8,0x68,0x6d,0x3f,0x43,0xf8,0xb8,0xac,0xc7,0x32,0xa0,0xff,0x47,0xd5 +.byte 0xb3,0x92,0x6a,0x15,0x5a,0xf1,0x7c,0x32,0x30,0xda,0x1e,0x5d,0xab,0xcc,0xd0,0x3a,0xdc,0xcf,0x70,0xd8,0x4d,0xa3,0x50,0xac,0x50,0x42,0x53,0xc6,0xe0,0x3a,0x26,0xdc,0x77,0x30,0x31,0x59,0xa1,0xfc,0x4d,0x48,0x00,0x0d,0xe0,0x66,0xb3,0x9b,0xd3,0x38,0x45,0xbb,0x0c,0x57,0xc5,0x78,0xee,0x8c,0x96,0xea,0xa2,0x16,0xa3,0x12,0xb1,0x06 +.byte 0xd0,0x2a,0x70,0xf7,0xce,0x42,0xae,0x17,0x64,0xbf,0x13,0xa0,0xe9,0x62,0x57,0x1d,0x55,0x78,0xfa,0x72,0x19,0x58,0x15,0xea,0xe5,0xdf,0x72,0x0e,0xc6,0xd3,0xb4,0x3d,0x60,0xee,0x32,0x2a,0xce,0xdc,0xad,0xd0,0x34,0xe6,0xb4,0xcf,0xce,0x5a,0x4a,0x9f,0xaf,0x01,0xb3,0x2a,0xed,0x46,0xa0,0xad,0xaa,0x62,0x8b,0xa4,0xf7,0x4b,0xce,0x32 +.byte 0x35,0x29,0x1e,0x7a,0xda,0x74,0xf8,0xe5,0xda,0x52,0x66,0xaf,0x3d,0x1a,0xff,0x42,0xc0,0xcc,0xb1,0x32,0x36,0x10,0x44,0x34,0x6a,0x16,0xc2,0x5b,0x9a,0x35,0x3f,0xd2,0x29,0xc5,0x76,0x3c,0x24,0xc7,0x2b,0x92,0xae,0xe0,0xe2,0x04,0x6c,0x3b,0x97,0xda,0xfd,0x49,0x43,0x6d,0x35,0xf5,0xc3,0xc1,0x93,0xf8,0x2f,0x25,0xef,0x3e,0xd8,0xf2 +.byte 0xc0,0xb3,0xb5,0x71,0x01,0xe0,0x07,0x11,0xd5,0xf1,0xd3,0x54,0x59,0x93,0x77,0x2e,0x77,0xdc,0x57,0xd7,0x9b,0x0a,0xe2,0xde,0x29,0x04,0x81,0xa1,0x81,0x6f,0x94,0x86,0x39,0xd7,0x29,0x69,0x3f,0xfa,0xe4,0x02,0x01,0x85,0x04,0x21,0xd3,0x17,0xf5,0x68,0x85,0x6e,0x74,0x15,0x56,0xe6,0x5e,0x12,0x1c,0x0d,0x2f,0x7a,0x8d,0xe1,0xc8,0x47 +.byte 0x7b,0xdc,0x35,0x64,0xf1,0x00,0xc0,0x7b,0xd8,0x2c,0x8c,0x60,0x10,0x53,0x11,0x2c,0x5c,0xa2,0xb6,0x05,0xa3,0xcd,0x14,0xb6,0xd0,0x36,0xe9,0x74,0x78,0xc3,0x84,0x6b,0x51,0xa9,0xf9,0xf1,0x05,0xe2,0xd4,0xa3,0x57,0xec,0xb1,0x5e,0xd5,0x75,0x64,0xe3,0xb0,0xf9,0x8f,0x88,0x60,0xdf,0x8e,0x75,0xf9,0x32,0xfc,0x58,0x5b,0x4b,0x17,0xdb +.byte 0x41,0x04,0x6f,0x17,0x7a,0xf8,0xd0,0x47,0x8e,0xeb,0xd1,0xf9,0xa6,0xa8,0x52,0x7e,0x07,0x6b,0x5b,0x4d,0xb9,0xda,0x91,0x40,0x51,0x25,0x67,0x4b,0xf1,0x95,0x12,0x07,0xa9,0xa5,0x33,0x96,0x92,0x5e,0xb4,0x0e,0xf0,0x85,0x2e,0x70,0xd8,0xaf,0xae,0x9a,0x3d,0x0c,0xb0,0xee,0xe1,0x80,0x5a,0xb9,0x17,0xe6,0x00,0xa8,0x82,0xd0,0x9b,0xf5 +.byte 0xe3,0xa0,0x12,0xc4,0x15,0xd6,0x5e,0x57,0x5c,0xd2,0xb9,0xa7,0x8e,0xfd,0x09,0xc3,0xd2,0x66,0xfd,0x86,0xb4,0xdc,0xa3,0xc2,0xfe,0x16,0x86,0xc4,0x98,0xa3,0x2e,0x4c,0xc9,0x2c,0xd6,0x87,0x83,0x1b,0x6f,0xe2,0x44,0xd6,0x72,0x94,0x1d,0xba,0xaf,0x34,0x1f,0xf2,0x40,0x40,0x33,0x24,0x63,0xc1,0x26,0xef,0xbc,0x0f,0x3b,0x3c,0x65,0x2b +.byte 0xa7,0xc7,0xdf,0x96,0x67,0xab,0x92,0x0e,0x04,0x8c,0x82,0x9e,0xbe,0x52,0x61,0x40,0xdf,0x77,0x00,0xc5,0x01,0x9a,0xe9,0xde,0xe1,0xe2,0x45,0xb8,0xed,0x94,0xd5,0xf0,0x28,0x29,0xef,0x0d,0x91,0x07,0x9b,0xfe,0x69,0x78,0x26,0xd7,0xf9,0x51,0xf1,0x9c,0xf2,0xbb,0x83,0x2d,0x79,0x1e,0xff,0x97,0x13,0xdc,0x28,0x93,0x26,0x7c,0x54,0x52 +.byte 0xc0,0x92,0xeb,0x4a,0xa2,0xe3,0x01,0xfc,0x07,0xb9,0x26,0x11,0x03,0xe0,0x19,0xa8,0x9c,0xff,0x3a,0x95,0x26,0x3a,0x17,0xf1,0x7d,0x6a,0x6a,0xb2,0xb5,0x5a,0x07,0x43,0x2b,0xb7,0xdd,0x19,0x14,0xe0,0x05,0x91,0xc5,0xee,0x49,0x35,0x7b,0x1a,0x2d,0x34,0xda,0xa2,0x45,0x7e,0x0d,0x64,0x98,0xb6,0x2e,0x47,0xaa,0x6c,0x73,0x66,0x55,0x01 +.byte 0x27,0xb0,0xa9,0x13,0xa6,0xe0,0x74,0x38,0xb3,0x97,0xfe,0xaf,0xdc,0xc0,0x6a,0x4f,0xd8,0xdb,0x07,0x62,0x61,0x05,0xbb,0xa0,0xa8,0xc5,0xb3,0x89,0x13,0xbb,0x09,0x01,0x6f,0x09,0xcb,0x47,0x62,0x46,0xf0,0x4b,0xf0,0xb7,0x7c,0x39,0x8d,0xe5,0x7b,0x64,0x49,0x32,0x93,0x1e,0x94,0x0a,0x98,0xe0,0xca,0xc6,0x67,0x5b,0xdf,0x88,0x0a,0x26 +.byte 0x83,0x77,0xc3,0xd0,0x11,0x66,0x3d,0x25,0x91,0x61,0x80,0xfc,0x9c,0x50,0xfb,0xe8,0x81,0x6f,0xd8,0xfa,0x77,0x78,0x4c,0x2b,0x44,0xd0,0x92,0x52,0xa4,0x50,0x50,0x7e,0xa2,0xb9,0xe7,0x79,0x33,0x95,0xfe,0x29,0x1c,0x1d,0x43,0x9d,0xa7,0x12,0xfe,0xa1,0x45,0xf4,0xd9,0x1c,0x7e,0x5a,0x67,0x99,0x7f,0x22,0x7c,0xa3,0xb1,0x2d,0xb7,0x1d +.byte 0x6b,0xf6,0xb4,0x94,0xf2,0xd1,0x5c,0x28,0x56,0xe9,0x4f,0x21,0x81,0x96,0x37,0x7c,0x25,0x74,0x0f,0xf9,0xc5,0xf5,0xc6,0xe8,0x8f,0xbb,0xfb,0xe4,0xaf,0x23,0xac,0x4c,0x20,0x35,0x7d,0xb4,0x4a,0xde,0x90,0xec,0x16,0x30,0x95,0x1b,0x79,0xf6,0x77,0xfe,0x80,0x10,0xba,0xd2,0x49,0xda,0xca,0x9e,0x6b,0x63,0x2f,0x24,0x38,0xf9,0xee,0x20 +.byte 0x38,0x5c,0xeb,0xf5,0xbc,0x07,0x7a,0xeb,0xde,0xc4,0x97,0xcf,0x48,0x9b,0x80,0x40,0xfa,0x81,0xf5,0x24,0xa7,0xf3,0xf7,0x16,0xe9,0xba,0xae,0x9f,0xde,0xa1,0x00,0x34,0x74,0x36,0x9f,0x47,0xce,0xcf,0x35,0xdb,0x30,0x7e,0x72,0x81,0xc5,0xe1,0x59,0x07,0x3e,0xc7,0x5b,0x7b,0xd3,0xc6,0xeb,0x4e,0x71,0x9c,0xeb,0x41,0x37,0xd9,0x9e,0x34 +.byte 0x0b,0xc1,0x9c,0xf7,0xfd,0x56,0xb0,0xd6,0xa6,0xe4,0x1d,0xdf,0x43,0xc6,0xf3,0x26,0x0f,0x01,0x07,0x29,0x57,0x9c,0x8f,0xe1,0x31,0xc9,0xa6,0x98,0x0f,0x0e,0x27,0xfd,0xa0,0x59,0xdf,0x92,0x7b,0x0a,0x4c,0x42,0x4b,0x03,0x98,0x2a,0xea,0xcb,0xd8,0x0f,0x6d,0x19,0x0b,0x22,0x69,0x8b,0xaa,0x3b,0xc8,0x41,0x66,0x81,0xc3,0xaa,0x64,0x6d +.byte 0x44,0xdd,0xb9,0xe2,0xc4,0x47,0x6d,0xdf,0x61,0xe0,0xf3,0x26,0x40,0x23,0x2f,0xf9,0x2a,0xb3,0xfa,0xe2,0xe8,0x36,0xc0,0xd9,0x89,0xb0,0x05,0x47,0x36,0x20,0x3b,0x03,0x0c,0xd1,0x46,0x9b,0xc9,0x65,0xfa,0x14,0xba,0x68,0x49,0xfc,0x2a,0xb9,0x04,0x47,0xbb,0x64,0xe1,0x7f,0x5a,0xd3,0x70,0x19,0x0f,0x14,0x09,0xc0,0xbe,0xc3,0x9b,0x2f +.byte 0xd1,0x05,0x90,0x56,0x09,0x47,0xb3,0xc5,0x08,0x6f,0x89,0x59,0x8c,0xf3,0xd4,0x1c,0xaf,0x68,0x00,0x32,0x58,0xe2,0x66,0x55,0xe2,0xc3,0x46,0x73,0xfd,0x4b,0x63,0xc5,0xdd,0x48,0xa8,0x14,0xe9,0x07,0x94,0x8f,0x51,0x6e,0x2d,0x7c,0x62,0x97,0x73,0xa5,0x42,0x7d,0xad,0x43,0xcb,0x65,0x56,0xf0,0x23,0x28,0x72,0xdb,0x1f,0xcf,0x34,0x9a +.byte 0x62,0x06,0x8d,0xc9,0x86,0x40,0x6d,0xee,0x58,0x72,0x02,0xbb,0xce,0x33,0x6a,0xe4,0xcb,0x46,0x25,0xda,0x2f,0x8d,0xc9,0x8e,0xfe,0xcf,0xbb,0xfc,0xb0,0xe8,0xec,0xf2,0xf9,0xff,0x5d,0x70,0x9e,0x2e,0x22,0x0e,0x9a,0x4d,0xb8,0x26,0x7a,0x48,0x3f,0xba,0x5c,0xcd,0x10,0xf4,0x6d,0x89,0x3d,0x5d,0x87,0xd4,0x69,0xb8,0x4a,0x20,0xc6,0xf8 +.byte 0x03,0x6c,0x60,0x1e,0x9c,0xc6,0xe3,0x39,0x9b,0xa1,0x16,0x64,0xed,0xc6,0xd7,0x54,0xfd,0x8d,0xa0,0x2f,0xcf,0xc6,0xde,0x43,0xe4,0xc5,0xb7,0xd6,0x00,0xaf,0x95,0x7a,0xc6,0xde,0x26,0x59,0x39,0xb0,0x12,0x6b,0xe1,0x3c,0xa9,0x09,0xb6,0x15,0xb0,0x62,0xad,0xa9,0x11,0x4f,0x86,0xde,0xc6,0xe8,0x32,0x46,0x78,0xeb,0x60,0x81,0x6b,0x8f +.byte 0xac,0x80,0xbf,0xa4,0xc4,0xb7,0x5f,0x3b,0x2f,0xf8,0xe4,0x05,0xcf,0xbf,0xa3,0x14,0x6f,0x16,0xbc,0x6c,0x4e,0x31,0xd7,0x79,0x09,0xcf,0x9c,0x58,0xa3,0x0b,0x1a,0x31,0x4b,0xda,0xcb,0x11,0x35,0xb1,0xf5,0xbb,0xfb,0x00,0x46,0x6d,0x70,0x5e,0x4a,0x85,0x19,0xdf,0xb5,0xd0,0x03,0x2e,0x5d,0x01,0x95,0x4e,0x5a,0x59,0x99,0x24,0xac,0x3f +.byte 0x2d,0x64,0xaf,0xef,0x40,0x16,0x2a,0xcc,0x6a,0x6c,0x0f,0xe3,0x45,0x15,0x74,0x3d,0xea,0xdb,0xa7,0x3f,0xd2,0x50,0x4d,0xc7,0xc6,0x19,0x36,0x84,0xf4,0xbd,0x09,0xff,0xe7,0xf3,0xc0,0xa5,0x34,0x49,0x8a,0xfe,0x83,0xcd,0xe4,0x80,0x7d,0xe3,0xff,0xc9,0x8a,0xb9,0xd6,0x34,0x01,0xd1,0x47,0x16,0x5e,0x7c,0x16,0xf5,0x7c,0xf8,0xb5,0x53 +.byte 0x26,0x84,0x89,0x73,0xf3,0x7f,0x9c,0xb0,0x2f,0x07,0x9e,0xf2,0x12,0xdf,0xba,0xc0,0x15,0xd0,0x3a,0x59,0x9d,0xde,0x67,0x5e,0x1c,0x2b,0x4b,0x84,0xb8,0x89,0xfb,0x62,0x90,0xe9,0x89,0xd9,0xdb,0xb7,0x21,0x4a,0x9f,0xbd,0xc0,0x02,0x01,0xda,0xb3,0x4c,0x9d,0xfb,0x46,0xa1,0xd0,0x3c,0xf5,0x27,0x6f,0x70,0xb5,0xa9,0x74,0xdc,0xa0,0x76 +.byte 0xb7,0x3a,0x53,0x18,0xdd,0x80,0x5e,0x43,0xb5,0x35,0xe4,0x0e,0x26,0x27,0x0a,0xab,0xe8,0x4d,0x2e,0x89,0x20,0xc3,0xff,0xe4,0x7f,0x03,0x2c,0x5f,0x25,0xc7,0x70,0x53,0x27,0x4c,0xc8,0xb9,0xb1,0x81,0x10,0x7a,0xa2,0x65,0xe4,0x0b,0x65,0x8e,0x3d,0x2f,0x96,0xa0,0xa5,0x7b,0x4f,0x09,0xe9,0x9d,0x10,0x06,0xf7,0x18,0xad,0x2d,0x7f,0xb8 +.byte 0x8f,0x08,0xa7,0x2c,0xda,0x82,0xbe,0x5c,0xd6,0x1d,0xb6,0xe2,0x9b,0xa2,0xfc,0x18,0x8c,0x8d,0xf7,0x81,0xf4,0xc6,0x1e,0xcb,0xe5,0x73,0xa6,0x74,0x06,0x20,0xf3,0xa9,0xcb,0x80,0x01,0x55,0x7e,0xc0,0x6a,0x1f,0x5a,0x5b,0xb1,0x56,0x5d,0xd8,0x2a,0xd5,0xf5,0x57,0xe8,0x48,0x6c,0xfb,0x9e,0x93,0xa7,0x0e,0x13,0x2b,0x68,0xc5,0x6b,0x17 +.byte 0x43,0xb0,0x58,0x04,0x65,0x3d,0x46,0x57,0xa7,0x3d,0x99,0xb8,0xa1,0x48,0x17,0x44,0x67,0x2a,0x0d,0x44,0x87,0x9f,0x63,0xd7,0x92,0x56,0x7b,0xab,0xd3,0x6a,0xbd,0x4f,0xc0,0xc3,0xd2,0xee,0xd1,0x3d,0xd1,0x18,0x2e,0x6a,0xf5,0x3b,0x67,0xa0,0x0a,0xf3,0x11,0x49,0xc5,0x4b,0xef,0xcf,0x00,0xfd,0x22,0x8f,0xa0,0x9c,0x99,0x32,0x2f,0x58 +.byte 0xf9,0x97,0x98,0x13,0x4a,0x88,0x50,0xcc,0x58,0x1e,0x27,0x02,0x34,0x7d,0xec,0xf6,0x88,0x3a,0x74,0xb5,0x34,0x6d,0x6f,0x52,0x2d,0x20,0x02,0x70,0x22,0x27,0xdf,0x7a,0xff,0x30,0x36,0x66,0x1a,0xa0,0x51,0xc3,0x75,0x9a,0x06,0xe5,0x3f,0x6c,0x74,0x0d,0x15,0xa2,0xb6,0xe5,0xcd,0x55,0x4d,0xea,0x65,0x8f,0xbb,0xb2,0xd4,0x95,0x73,0xa4 +.byte 0xcd,0xb9,0xc8,0x82,0x60,0x49,0xe9,0x36,0xc9,0xb1,0xe9,0xcb,0x52,0xae,0xa7,0x7a,0x64,0xab,0x75,0x84,0x03,0x4b,0x37,0xf7,0x07,0x75,0xf7,0x1c,0x32,0x19,0xb6,0x8b,0xca,0x7c,0x43,0x15,0xe8,0xec,0x57,0x89,0x1d,0xe2,0xa0,0x80,0xc5,0xb6,0x02,0x29,0xfd,0xda,0xe0,0x14,0x93,0xb4,0xb3,0x44,0x2e,0x17,0x2f,0xed,0x3b,0x38,0x6e,0x8f +.byte 0xe0,0x3d,0xc6,0x77,0xe9,0xa7,0x76,0xcb,0x98,0x2d,0x08,0x61,0xcf,0x1b,0x25,0x3f,0xfb,0x1d,0x99,0xb1,0x5a,0x3c,0x53,0x96,0x4e,0x09,0x11,0xf6,0x5b,0x09,0x31,0xe1,0xad,0xb0,0xaf,0x7b,0xec,0xf9,0xa8,0x68,0xb7,0x93,0x57,0xf7,0x17,0x77,0x87,0x2b,0xdb,0x00,0x28,0xc6,0x48,0xac,0xff,0xcd,0x26,0x4a,0x8a,0x76,0x9a,0x2a,0x1d,0x37 +.byte 0x4c,0x70,0x4f,0xf6,0x52,0xe3,0x7a,0x78,0x94,0x5b,0x0b,0x50,0xb4,0x48,0x03,0xcd,0x78,0xd0,0x5d,0x89,0x6d,0x76,0xaf,0x9d,0x67,0xc3,0x75,0x6f,0x6a,0x2d,0xe2,0xb7,0x58,0x51,0x10,0x0d,0xef,0xa0,0x1a,0x74,0x28,0x3a,0x97,0x19,0x4f,0x3c,0x8a,0x86,0x3d,0xe4,0x66,0x3d,0x57,0xb4,0x66,0xb3,0x0b,0x4f,0x57,0x57,0x34,0x2e,0xc7,0x0c +.byte 0x11,0xdf,0x3c,0xb4,0x9f,0xe1,0xd5,0x27,0x41,0x08,0xec,0xca,0x18,0x88,0x48,0x5e,0x88,0x55,0x89,0x71,0xe6,0xa5,0x90,0x7c,0x3b,0xe5,0xf3,0x2a,0xd7,0xf5,0x0b,0x3d,0xbb,0x47,0xad,0xd7,0x78,0x41,0xa8,0xef,0xd4,0x36,0x31,0xd1,0xe4,0x9c,0x87,0x9e,0xb1,0x11,0x0e,0xff,0x8f,0x4d,0x79,0x65,0xc4,0x83,0x75,0x33,0xc9,0x89,0xe2,0xc3 +.byte 0x41,0x68,0x11,0xe7,0xe4,0x58,0xb9,0xf1,0xee,0x06,0x48,0x4d,0xc3,0xc7,0x76,0x60,0x42,0x94,0x8f,0x0d,0xb9,0x53,0x46,0x78,0x06,0x97,0x94,0x36,0xf4,0x3e,0xf3,0xdd,0x5b,0x46,0xe1,0x9d,0x3f,0x9e,0x78,0x00,0x9e,0xe7,0xcb,0x9e,0xc8,0x30,0x87,0x4a,0x52,0x91,0xd5,0xe2,0xa3,0x65,0x98,0xb2,0xc9,0x6c,0xfb,0x4e,0x54,0x5a,0x9f,0x57 +.byte 0x2c,0x4a,0x76,0xe4,0x97,0x88,0xd5,0x6a,0x0e,0x6c,0x7c,0xef,0x78,0x2a,0x7c,0x26,0xa3,0x25,0xf6,0x33,0x82,0x46,0x6d,0x91,0x0d,0xe4,0x83,0xec,0xf1,0x24,0xf8,0x0a,0x34,0xec,0xfc,0x7e,0x47,0xda,0x9a,0x17,0x1b,0x33,0xd0,0xf1,0x70,0xe4,0x0b,0xc7,0x70,0x58,0x1d,0x76,0x20,0x89,0xce,0x4f,0xd1,0xcb,0x3b,0x26,0xd1,0x98,0xd9,0x51 +.byte 0xb1,0xd0,0xaa,0x4a,0xd5,0x10,0xf2,0xae,0xaa,0x14,0xa7,0x72,0x99,0x3d,0xc8,0xbf,0xfb,0xec,0x6a,0x14,0xdd,0x97,0x7b,0x2f,0x16,0x96,0x0f,0x41,0xb8,0x33,0x15,0x1b,0xa2,0x6a,0x7e,0x64,0x0d,0xab,0xe7,0x62,0xf5,0x6c,0x56,0x69,0x09,0x46,0x32,0x24,0x60,0x4e,0x21,0xc7,0x5b,0xee,0x0a,0xe2,0x94,0x7c,0x20,0xe2,0x06,0xa0,0xa2,0x36 +.byte 0xa0,0x7d,0xb5,0x37,0x2a,0xee,0x20,0x25,0x4c,0xba,0x9a,0x06,0x4c,0x07,0x9b,0xea,0x55,0xac,0x2a,0xf7,0xb9,0x5c,0x23,0xac,0x43,0xda,0x9d,0xad,0x76,0xe2,0x5f,0xe0,0x27,0xaf,0x0a,0x5e,0x3d,0x54,0x84,0xfc,0x19,0x75,0x8c,0x62,0x4d,0x37,0x17,0x1a,0x90,0x55,0xb8,0x7e,0xa1,0xad,0x31,0x1a,0xc0,0x91,0x96,0x51,0xa9,0x5f,0xbb,0xb9 +.byte 0x95,0xbf,0xe2,0xd5,0x7e,0x31,0xba,0xc4,0x1e,0x63,0x98,0xd3,0xe2,0x7d,0x87,0xa5,0x46,0xe3,0xae,0xe1,0xe8,0x4e,0x74,0x29,0x0e,0x4b,0x10,0xa8,0x7f,0x3a,0xe5,0x60,0x0f,0x49,0x6a,0xcd,0x3d,0x5a,0x8e,0xf1,0x48,0xd0,0x80,0x7b,0xa3,0x7f,0x06,0x47,0x2b,0x60,0xf2,0x17,0xc3,0xe1,0x26,0x1e,0xb7,0x0f,0x2b,0x7c,0xc7,0xb8,0x3a,0x4f +.byte 0xad,0x05,0x97,0x88,0x93,0x82,0x8e,0x06,0x77,0x44,0xd1,0x65,0xfd,0x18,0x48,0xd6,0x88,0xcd,0x5c,0xbd,0xe4,0xaa,0xea,0xf1,0xed,0x16,0x5f,0xb3,0x58,0xe2,0x69,0x82,0xbe,0x9e,0xfc,0xcb,0xf6,0x17,0xa9,0x70,0xeb,0x08,0xd7,0x06,0x86,0xf6,0x5a,0x43,0x68,0x7b,0xcf,0xa3,0xfa,0x26,0x5e,0xe5,0x42,0xd3,0x5a,0xc8,0x1c,0x3b,0x8d,0x2d +.byte 0xf1,0x45,0xb0,0x97,0x90,0x0b,0xe7,0x2d,0xab,0xd7,0xd8,0x8a,0x16,0xf9,0x5f,0xa6,0xcf,0xc5,0x60,0x2c,0x34,0x5a,0x2e,0x2b,0xb9,0xb4,0x9c,0xa7,0x09,0x77,0xd2,0x3f,0x8c,0xf3,0xf6,0xf7,0xe0,0x27,0x79,0xc3,0x4e,0x61,0x7d,0x09,0x50,0x05,0x01,0x35,0x1b,0x33,0x54,0x6f,0x90,0x9a,0x19,0xcd,0x86,0x45,0x23,0xcd,0x6f,0x1b,0x62,0xc5 +.byte 0xce,0x4e,0x8e,0xff,0xe7,0x12,0x32,0x85,0x9a,0xc4,0x11,0x83,0xcf,0x78,0xd7,0x41,0x99,0x64,0x20,0xa6,0x69,0xdd,0xe3,0x53,0x98,0x6b,0xc7,0x98,0x51,0xc5,0xf8,0x3e,0xa3,0x5f,0x0d,0x78,0x2f,0xa7,0x05,0xff,0xe5,0x3a,0x0f,0x7c,0x09,0x58,0x3f,0xaa,0x0d,0x9a,0x9d,0x8d,0xe7,0xbf,0x6b,0x7d,0xfe,0x3a,0x4f,0x5c,0x50,0xb2,0xe7,0xc5 +.byte 0xa5,0x13,0xde,0xc8,0xe8,0x59,0xac,0xb0,0xdd,0xc0,0x81,0xa7,0x0b,0x78,0x32,0x23,0x76,0x85,0x11,0xef,0xe3,0x88,0x6f,0x7f,0xa9,0x09,0x7b,0x0c,0x6f,0x34,0xb2,0x67,0x5e,0xd6,0x11,0xad,0xd7,0x3b,0xf2,0xbb,0x66,0x5b,0xde,0x22,0xfc,0x55,0x26,0xa1,0x89,0x80,0x2e,0xb8,0xf3,0x3c,0xf8,0x1e,0xba,0x99,0x1c,0x24,0x33,0xb4,0xe6,0x17 +.byte 0x2b,0x9c,0x80,0xe5,0x9b,0x58,0x54,0x70,0xcd,0x15,0x81,0xcd,0x51,0x48,0x75,0x24,0x27,0xf5,0x30,0x79,0xc1,0x16,0xff,0x89,0x70,0x12,0x74,0x07,0x9d,0x39,0xf2,0x9c,0xc6,0x89,0x8d,0x94,0x41,0x01,0x04,0xf5,0x16,0x99,0xf3,0xf0,0xd1,0xf5,0x6d,0xd3,0x11,0x19,0x29,0x36,0xfb,0x41,0xf9,0x32,0xb9,0x0f,0x13,0xaf,0xac,0xfb,0x30,0x75 +.byte 0x62,0x8c,0x04,0x5b,0xf1,0xce,0x52,0x9b,0xbe,0x8c,0xf9,0x86,0x5d,0x7d,0xc1,0x8e,0x41,0x76,0x42,0x63,0xd7,0x74,0x8e,0x2c,0x46,0xa1,0x0a,0x51,0xb5,0xec,0xe9,0x91,0x56,0xbc,0xdc,0x32,0xfc,0x10,0xb5,0xca,0x5b,0x4b,0x72,0x99,0x07,0xff,0x01,0x11,0x2c,0xa4,0x60,0xf5,0x6b,0xd4,0xa8,0x96,0x21,0xee,0xbe,0x14,0x8f,0x69,0x99,0xdc +.byte 0x43,0x7f,0x13,0x3d,0x17,0x1e,0xa3,0x1b,0x21,0x23,0x26,0x7e,0xff,0x80,0x6b,0x66,0x3e,0xb2,0x48,0x1a,0x77,0x3c,0x50,0xe2,0xca,0x4d,0xc6,0xdb,0xfd,0xd1,0x23,0xcc,0xcb,0x01,0x25,0xc0,0x62,0x8d,0xe5,0x9c,0xb7,0x13,0x97,0xf5,0x49,0x01,0x19,0x45,0x45,0x83,0x17,0xff,0x8e,0x94,0x8c,0xb0,0xc0,0xaf,0x46,0x62,0x0e,0x62,0xb7,0x8c +.byte 0xd5,0xcf,0xb9,0x82,0x6e,0x8a,0xb9,0x22,0xbc,0x30,0xf9,0x65,0xc2,0x7f,0xce,0x6b,0x4d,0xad,0x87,0xcb,0x23,0xab,0x57,0x36,0x6a,0xb7,0x8c,0x63,0x17,0x60,0x13,0xa1,0x1f,0x3d,0xa4,0xd4,0xab,0x5d,0x97,0xc7,0x18,0xaf,0xf8,0xae,0x13,0x64,0x2a,0x19,0x34,0xe2,0x28,0x28,0x4f,0x32,0x2a,0xd8,0x43,0x79,0xaf,0x1e,0x56,0xfc,0x97,0x51 +.byte 0x67,0x8c,0x63,0x80,0x32,0x63,0x71,0x5c,0x78,0x00,0xeb,0xfd,0xa2,0x96,0x58,0x21,0x36,0x13,0x02,0xe5,0xa4,0xb7,0xcd,0x5a,0x30,0xa0,0x5b,0x7b,0x23,0xa4,0xcc,0x54,0x64,0x6f,0x6d,0x9b,0xaf,0xea,0x49,0x69,0x9e,0x2f,0x51,0x5c,0xe7,0xa3,0xa3,0xb8,0xac,0xed,0x47,0x23,0x7a,0x37,0x38,0xe3,0x15,0x98,0x6f,0x50,0x6c,0x8d,0xa7,0xe6 +.byte 0xa8,0x39,0xcc,0x63,0x08,0xeb,0x8f,0x8c,0xfd,0x83,0xaa,0x34,0x75,0x19,0xc0,0xf4,0xd6,0x25,0x18,0x94,0x9d,0xa1,0x7e,0xc8,0x6b,0x19,0x76,0xc0,0x8d,0xaf,0x51,0xe5,0x7c,0x8a,0x98,0x17,0x80,0x90,0xc0,0xb6,0xed,0x5c,0x8f,0x33,0x56,0xba,0xce,0xbe,0x83,0x87,0x5d,0x51,0x2e,0x64,0x84,0xa6,0x9d,0x49,0x27,0x5b,0x92,0xe0,0xe7,0xac +.byte 0x37,0x3d,0x22,0x5e,0x25,0xe7,0xca,0x2f,0x5d,0x2f,0xa0,0xd5,0xcb,0xe9,0xac,0x84,0x5b,0x19,0x72,0x1c,0x2c,0x0a,0xd1,0xb7,0x73,0x24,0x8a,0x0f,0xe0,0x07,0xd8,0x49,0x4d,0x23,0x1b,0xac,0xb8,0xd1,0x42,0xd4,0xdf,0xf8,0x4d,0x85,0xa2,0x37,0x30,0x46,0x38,0x88,0x55,0x1d,0xea,0x37,0x54,0x8c,0x43,0xb0,0xed,0x01,0x53,0x75,0xe6,0xf7 +.byte 0x9b,0xe6,0x10,0x91,0x6e,0x80,0x11,0xf9,0x96,0x29,0x4f,0x08,0x77,0x2b,0x7e,0xdb,0x5b,0x14,0xbd,0x77,0x37,0xe8,0x36,0x07,0x4a,0xe4,0xd8,0xa2,0x4e,0x38,0xea,0xeb,0xc2,0xd6,0x43,0x59,0x20,0x0c,0x12,0x31,0x6c,0x27,0xc5,0x7b,0xfc,0xfc,0x54,0x94,0x1d,0x5f,0x82,0x73,0xd7,0x1f,0x43,0x3a,0x73,0xc4,0xf3,0xb3,0xbb,0x53,0xfe,0x22 +.byte 0xc0,0xa4,0x7e,0x2b,0x84,0x1b,0xef,0x6d,0x83,0x9d,0xb3,0x8b,0x2a,0x6c,0xea,0x1e,0xfa,0x77,0x01,0x35,0xd2,0x5b,0xc4,0xd3,0xe7,0x1e,0xca,0x73,0x8b,0xb9,0x1f,0xfb,0x67,0xf2,0xdd,0x03,0xe6,0xca,0xfe,0x3b,0x61,0xd7,0xb5,0x96,0xe0,0x85,0xc2,0x23,0xa7,0xea,0x38,0xbf,0x6e,0x29,0x9e,0x8e,0x18,0xd4,0xbf,0x16,0x73,0xf9,0x18,0xef +.byte 0xc9,0xaf,0x6c,0xe2,0xdc,0xa4,0x58,0x9c,0xf5,0x6d,0x4a,0xc8,0xb4,0x8f,0x16,0x02,0xb7,0x65,0xd3,0x32,0x3b,0x83,0xfe,0xf3,0xc7,0xba,0x68,0xf4,0x95,0xa4,0xf6,0x33,0x57,0x43,0xbe,0xae,0x83,0xa9,0xe4,0x0d,0x0b,0x23,0xaa,0xbc,0x15,0x53,0x18,0x4d,0xb4,0x35,0xe3,0x8e,0x86,0xfe,0xe4,0x98,0x5d,0x63,0x23,0xce,0x44,0xea,0x4d,0x64 +.byte 0x86,0xf8,0x06,0x8f,0xc0,0x73,0xa6,0x6d,0x04,0x53,0x47,0x95,0x0f,0x6d,0x6c,0x01,0x1c,0x3f,0x7b,0x83,0xe4,0xc2,0x40,0xb8,0x97,0x26,0x9e,0x35,0xb0,0x76,0xee,0xe4,0xc7,0xd8,0xaa,0x22,0x83,0x96,0xe1,0x34,0x7b,0x78,0x31,0xee,0xd3,0x9a,0x50,0xd4,0x05,0xfd,0xd6,0x15,0xca,0x83,0x2f,0x49,0xfd,0x00,0x23,0x82,0x39,0xac,0x46,0x7a +.byte 0xe4,0xb5,0xcc,0xee,0xbb,0xaa,0x98,0x82,0xb5,0x27,0x45,0xd5,0x96,0x6e,0x89,0x01,0x1e,0x30,0xe4,0x1c,0x3a,0x65,0xcc,0x9f,0xda,0x38,0xf0,0x4c,0x68,0xfa,0xe5,0xf2,0xe2,0xce,0x34,0xc2,0x15,0xfd,0x21,0xf6,0xe2,0x33,0xbd,0xef,0xfd,0x49,0x15,0xdc,0x38,0x3b,0x24,0xba,0x3a,0x80,0x35,0x60,0xbe,0x50,0x17,0x38,0x3e,0xe2,0x96,0x84 +.byte 0x01,0x41,0x6c,0xb2,0x0b,0xc6,0xff,0xce,0xb3,0x37,0xa2,0x46,0x27,0x33,0x8e,0x04,0x44,0x8a,0x7c,0x64,0x0e,0xbc,0xed,0x74,0x4f,0x40,0x58,0xf4,0x8c,0xf8,0xd9,0x92,0xa9,0x0b,0x18,0x7c,0x93,0x95,0xca,0xa7,0x3e,0x1d,0xad,0x68,0x80,0xd9,0xdb,0x81,0x78,0x50,0x37,0x49,0xbc,0x64,0xc2,0x52,0x5c,0x70,0x7e,0x0a,0x26,0x7e,0xc6,0xbf +.byte 0xd2,0x7f,0x05,0x55,0x7a,0x5a,0x3e,0x9e,0xe3,0x8b,0xf5,0x95,0x2b,0xd8,0xb4,0xb8,0xc6,0x5d,0x91,0xb8,0xc7,0x7c,0xe1,0x75,0xf2,0x43,0x6b,0x73,0xb7,0xb1,0x10,0xf2,0xa7,0x1e,0xab,0xaf,0xc9,0xc0,0x3b,0xab,0xbe,0xf7,0x4a,0x43,0x9c,0xca,0x3d,0x00,0x5b,0x02,0xf8,0xa2,0x4f,0x57,0x81,0xb0,0xde,0x1e,0xd1,0x60,0xbe,0x6c,0x0d,0xe6 +.byte 0xcd,0x51,0xb6,0xc7,0x00,0x52,0x37,0x4f,0xfc,0xee,0xe2,0x43,0x5c,0x61,0x76,0xed,0x80,0x72,0x38,0x26,0x94,0xfe,0x28,0x06,0xfb,0x62,0xa6,0x21,0x9b,0x53,0x60,0x1b,0xf0,0x56,0xae,0xba,0x6b,0x52,0x27,0x2a,0xd5,0xed,0x11,0x92,0xa2,0xe2,0xab,0xdd,0x05,0x38,0x38,0xae,0xeb,0x72,0xcb,0x6c,0xa5,0x2a,0x73,0xc5,0xfc,0xb0,0x36,0x83 +.byte 0xd6,0xe6,0xda,0x6b,0x38,0x72,0x5e,0x8d,0xaf,0x11,0x5f,0x5b,0x89,0x58,0x21,0x36,0xf6,0x7d,0x42,0x48,0xdc,0xce,0xaa,0x94,0xf0,0xc3,0xc5,0x2c,0x08,0x2a,0x36,0x35,0x25,0x95,0xc4,0x11,0x09,0xea,0x7a,0xbc,0x2e,0xc6,0x0a,0x5b,0x4f,0x86,0xeb,0xc2,0x38,0x71,0x48,0x8c,0x63,0x79,0x3b,0xe4,0xba,0x14,0x44,0x31,0x28,0x4f,0x9d,0xb4 +.byte 0x26,0xa6,0x3b,0xea,0x3f,0xcb,0x30,0x6c,0x02,0x13,0xdb,0x4c,0x9c,0x76,0xc8,0xd8,0x01,0x52,0x3d,0x2f,0x51,0x70,0x15,0x91,0xec,0x8f,0x80,0xed,0x88,0xb7,0xfa,0x91,0x2c,0x10,0xcd,0x3b,0x92,0x85,0xe7,0xe8,0x11,0xfa,0x50,0x15,0xe2,0xdf,0xf7,0xbe,0xa4,0x2d,0x13,0x75,0xa6,0x00,0x25,0x8d,0xe1,0xb6,0x9b,0xbb,0x64,0xfb,0x5c,0xde +.byte 0x97,0xcc,0x00,0x51,0xd6,0xac,0x67,0xc3,0x91,0x1e,0x56,0x36,0x2b,0x43,0xed,0x8c,0x67,0x7b,0xf6,0x54,0x6f,0x91,0x44,0x28,0x93,0x60,0xac,0xca,0xb9,0x91,0x7e,0xeb,0x49,0xd8,0xfc,0x12,0x6c,0x40,0x9d,0x0a,0x4d,0xb4,0xab,0xe6,0xad,0x5b,0x8e,0x2d,0x3e,0x53,0xa1,0x88,0xf7,0x41,0x71,0xa7,0xff,0x05,0x46,0x04,0x34,0x1f,0x12,0x89 +.byte 0x92,0xc1,0xf9,0x26,0x16,0x23,0xb6,0x59,0x82,0xdc,0xa7,0xb8,0xa4,0x8a,0x0f,0x1d,0x7d,0x8f,0x44,0xe8,0x4f,0x70,0xbb,0xdb,0x8d,0xe6,0x7e,0x9d,0xd9,0x44,0x10,0x41,0x6c,0x3f,0xb7,0xe8,0x6f,0x39,0x93,0xe1,0xde,0xb8,0x6c,0xba,0x99,0x95,0xb7,0xc8,0xb2,0x2a,0xcd,0x81,0x53,0xc3,0xb5,0x2a,0x8a,0xd6,0x62,0x1e,0x74,0x4d,0xde,0xfa +.byte 0xff,0x7b,0xed,0x11,0x1e,0x44,0x3e,0x93,0x1c,0xae,0x7c,0x5c,0xed,0x52,0x75,0x5e,0x0a,0xf3,0x95,0xce,0x47,0x86,0x1b,0x7f,0x17,0x09,0x12,0xcc,0x08,0xca,0x16,0x11,0xf1,0xa1,0x39,0x78,0x89,0x5c,0x11,0x25,0xc7,0x39,0x5f,0x97,0x74,0xbc,0xa9,0x2a,0x25,0x5d,0xdd,0x93,0x0d,0x8c,0x74,0x07,0x1e,0xd9,0x9f,0xc1,0x38,0x9c,0xbf,0xe0 +.byte 0x42,0xad,0xb2,0xe7,0xb1,0x84,0x82,0xb4,0x56,0xbe,0x3c,0x42,0xb0,0xce,0x2c,0x94,0xb7,0xe6,0x78,0xc8,0x04,0x06,0x58,0x15,0x3e,0xdc,0xf6,0x9a,0x58,0xc3,0xe3,0x85,0x16,0xc8,0x84,0xba,0x8f,0xbc,0x94,0xa7,0x44,0x04,0x29,0xc4,0xd8,0xec,0x63,0xc4,0x47,0x58,0x22,0x02,0x08,0x20,0x44,0x39,0x52,0xa5,0x33,0xfe,0x1c,0x30,0x27,0x92 +.byte 0xbf,0x42,0x44,0x4c,0x3f,0x3d,0x00,0x7b,0x21,0xef,0xbb,0x25,0x75,0x4c,0xb2,0xe7,0x66,0xc9,0xc1,0xfb,0x1e,0x13,0x04,0xd0,0xcb,0x69,0x51,0x9d,0x9a,0xb0,0xb0,0xec,0xb0,0x12,0x24,0x84,0x57,0x9f,0xef,0xb4,0x19,0x50,0xa6,0xf5,0x03,0xa3,0x93,0x0f,0x77,0xaf,0xe0,0x4c,0xa5,0xd3,0xb0,0xd8,0x5e,0xc3,0x78,0x94,0xd5,0x6e,0x48,0x58 +.byte 0x7a,0x93,0xb1,0x62,0x60,0xea,0xa1,0xba,0x7a,0x86,0x6e,0x87,0xe9,0x97,0xe0,0x7c,0x1e,0xb6,0x63,0x94,0x76,0x5f,0x9c,0x95,0x65,0x00,0xd4,0x14,0x0e,0x4c,0x87,0xe7,0xcd,0x9e,0xb1,0xe2,0x13,0x1b,0xb1,0x8a,0x83,0xaa,0xaa,0x34,0xcd,0xb2,0xf6,0x7f,0x12,0xb0,0x79,0xff,0x1e,0x04,0xc8,0x9a,0xfc,0x41,0x88,0xbb,0x28,0x42,0xeb,0x45 +.byte 0x47,0x8b,0xcb,0x57,0x03,0xcd,0xe5,0x9a,0x84,0xea,0x0a,0xb5,0x0c,0xb8,0x30,0x33,0xd6,0xde,0x66,0xa8,0x57,0xf9,0x76,0x4f,0x0f,0x8f,0x53,0x56,0x57,0x91,0xd4,0x55,0xf5,0x78,0xde,0xa6,0xa2,0x59,0xc8,0xb0,0xf2,0xb9,0xfa,0x6d,0x4a,0x70,0x86,0x3d,0x24,0x1b,0xc6,0xb8,0x06,0xf5,0xea,0x09,0x63,0x9b,0x1e,0x61,0x18,0x85,0xba,0x08 +.byte 0x20,0xaa,0x33,0x66,0xcf,0xa7,0xff,0xf5,0x30,0xfe,0xf8,0x39,0xd3,0x88,0x9a,0x5b,0x3f,0x55,0xa6,0x00,0x4c,0x57,0x0d,0xd1,0xa4,0x0c,0xe7,0x8a,0x95,0xd8,0x64,0xc7,0x93,0x51,0x84,0xa6,0x41,0x2c,0xfc,0xb0,0xfb,0x99,0x9a,0xcd,0x2c,0x62,0x3a,0xca,0x43,0x15,0xf2,0x5a,0x22,0x25,0xa4,0x91,0xa3,0x7c,0x42,0x69,0xc1,0x67,0xe3,0xf5 +.byte 0xd4,0x92,0x54,0xbd,0xb3,0x57,0xe5,0x19,0xca,0x1b,0x9c,0x19,0x79,0x9d,0xbf,0x89,0xfc,0xaa,0x72,0xcd,0xcb,0xc5,0xbc,0xdd,0x0c,0x7c,0x31,0x42,0xb0,0xc2,0x76,0xe5,0x8b,0x9b,0x7c,0x92,0x13,0x20,0x5c,0xdc,0x94,0xfc,0xa1,0x90,0x34,0x27,0x88,0x9f,0xe5,0x97,0x5f,0xc3,0xa3,0x83,0xca,0x8b,0xf8,0xac,0x36,0x33,0x47,0xc6,0x20,0x2f +.byte 0x04,0x2d,0x13,0xc1,0x3c,0x07,0x6e,0xf0,0xe2,0x3d,0x32,0x5c,0x50,0x41,0xf2,0x92,0x3f,0x25,0x2c,0x80,0x34,0xa5,0x90,0x2b,0x97,0x6e,0xd1,0xa2,0xa6,0xf4,0x4a,0xe0,0x20,0xd9,0xb9,0x2b,0x66,0xe5,0x06,0x73,0x97,0xfe,0x80,0x70,0x28,0xf9,0xb6,0xae,0x93,0x27,0x7a,0x65,0xff,0x23,0xc1,0x78,0x18,0x92,0xc9,0x0b,0x05,0x82,0x93,0xbc +.byte 0x73,0x3f,0x98,0xe9,0xa0,0x6d,0x20,0x8d,0x13,0xb1,0xf0,0x7e,0xe4,0x07,0x21,0x7d,0x6d,0xea,0x03,0x59,0xf8,0x29,0xc0,0xc8,0x7d,0xce,0xd1,0xf8,0x67,0x82,0x7f,0x84,0xe8,0x77,0xa9,0x9c,0xa2,0x34,0xdf,0xa9,0xac,0xec,0x6d,0x54,0xe5,0x0f,0xcb,0xdb,0x86,0xbc,0x01,0x44,0x91,0x3b,0xc8,0x85,0x4e,0x1d,0xe4,0x74,0x19,0xc6,0x39,0x2e +.byte 0xdf,0xf2,0x8f,0x3a,0x7f,0xe3,0x1e,0x55,0x45,0xcb,0x7e,0xde,0xcd,0xa6,0x1c,0xef,0x20,0xf7,0x07,0x31,0x94,0x9a,0x3d,0x04,0xd7,0x5e,0x65,0x20,0x6a,0x4d,0x31,0x1e,0x6f,0x89,0x40,0x45,0x1f,0x37,0xc1,0x7e,0x07,0xd5,0xa6,0x38,0x4a,0xf1,0x39,0xae,0x72,0x26,0x60,0xb0,0xb5,0xc7,0xd3,0x9a,0xaf,0x57,0x12,0xe9,0x34,0x28,0x8b,0xaf +.byte 0xd8,0x62,0x24,0x58,0xe2,0xcd,0xa2,0x9e,0x74,0x23,0x2d,0x52,0xc7,0x09,0xe5,0xb5,0xf5,0xc1,0xd3,0xa3,0x19,0xe5,0x1d,0x8d,0x0c,0xdf,0x13,0x8d,0xa4,0xa7,0xc1,0x41,0xea,0x9e,0x6d,0x61,0xd4,0xa4,0x74,0xe5,0xf8,0x5f,0x9e,0xfd,0x6d,0xf6,0x6e,0x87,0x0f,0xb5,0xa3,0x82,0xac,0x64,0xb4,0xda,0x07,0x49,0x51,0xc2,0xfd,0xcb,0x55,0xa3 +.byte 0x59,0x34,0xdf,0xa1,0xd6,0x90,0x62,0x43,0x1a,0xf9,0xae,0x85,0x5c,0x11,0x40,0xb2,0xbe,0xa5,0x03,0x04,0x4f,0xec,0x2c,0x58,0x2d,0xe9,0xda,0xcf,0xaa,0x2f,0xcf,0x60,0xc3,0x2c,0x6c,0x81,0x4d,0xf2,0x71,0x41,0xe4,0xae,0x4c,0xfa,0x8e,0x05,0x10,0xff,0x40,0xfa,0xea,0x96,0x78,0x6e,0xfc,0x35,0x35,0xec,0x84,0xf6,0x1d,0x24,0x60,0xcd +.byte 0x96,0x21,0x21,0xa7,0x32,0x90,0x3d,0x51,0x72,0x13,0xa4,0x9b,0x7e,0x94,0x3a,0x9d,0x97,0xf6,0x68,0xd8,0x08,0x42,0x54,0x7a,0xbb,0x9a,0x95,0x83,0xac,0xb8,0xb4,0x68,0xe3,0x31,0xdb,0xe2,0x32,0x8b,0x7d,0x57,0x62,0x1d,0x61,0x81,0xa1,0x36,0x7a,0x25,0x00,0x72,0x24,0x4c,0xa7,0x96,0x3b,0xa5,0x82,0xba,0x8e,0x89,0x1e,0x1b,0x8e,0xf4 +.byte 0xab,0x91,0x85,0x7a,0x32,0x4a,0x47,0x9f,0xce,0xd2,0x51,0x77,0xcd,0xc9,0x02,0x54,0xf2,0x7b,0xcb,0xb8,0x83,0xe0,0xe0,0x1b,0x4a,0xa2,0xe0,0xd9,0x15,0xb6,0x02,0x19,0x75,0xa6,0xba,0xa6,0x98,0xd9,0x61,0x74,0xc6,0x48,0xa5,0x59,0x3d,0xc8,0x47,0xc9,0xe8,0x6b,0xbb,0x6d,0xcf,0x0e,0x8d,0x6b,0x58,0x8b,0x7d,0x4e,0x0b,0x3d,0x67,0xc4 +.byte 0x8e,0x78,0x59,0x40,0x88,0x82,0x33,0x27,0x2c,0xfe,0x2a,0x6c,0xe4,0x80,0xee,0x5a,0xd4,0x5f,0xc8,0xf7,0x82,0x02,0x67,0xfd,0xcb,0x55,0x3e,0xd8,0x41,0xb3,0xce,0x93,0xfe,0xe7,0x56,0xf5,0x63,0xba,0xfa,0x2e,0x79,0xfc,0x11,0x5d,0xb0,0xc6,0x32,0x54,0xed,0x71,0x9b,0x15,0xce,0x62,0x09,0xd4,0x28,0x7f,0x7b,0xa1,0x50,0x5b,0x46,0x24 +.byte 0x0e,0x40,0xa2,0xe2,0x7d,0x93,0xa6,0x2b,0x0b,0x9b,0x40,0x25,0xc9,0xca,0x7a,0x01,0x8b,0x7d,0x68,0xeb,0xd7,0x84,0xc1,0x9d,0xf9,0xfb,0xd0,0x1a,0xec,0xef,0x6b,0x4c,0x78,0x31,0x62,0x8e,0x9d,0xdc,0x78,0x8f,0xcb,0xf8,0xf9,0x41,0xdc,0x9f,0x6d,0x0a,0x27,0x67,0xce,0xbd,0xeb,0x87,0xb3,0x26,0xf3,0x51,0xe1,0xd6,0xd1,0x57,0x46,0xfe +.byte 0x21,0xb9,0x88,0x7c,0xdd,0xa2,0x49,0x71,0x24,0xfb,0xc4,0xc0,0x6a,0x6b,0x05,0x7f,0x80,0xb0,0x09,0x3b,0x9e,0x6c,0x59,0x31,0x3e,0xac,0x7a,0x2e,0x5c,0x04,0x03,0xa3,0x6e,0xf5,0x66,0xee,0xc2,0x9b,0x65,0x88,0x06,0xbf,0xf5,0xe3,0x23,0x73,0x38,0x88,0x99,0xf1,0x64,0x68,0xdf,0x7d,0x04,0x06,0x72,0x92,0x0b,0x62,0x5d,0x12,0x1e,0x4e +.byte 0xff,0x60,0x35,0xe3,0x0f,0xd9,0x8c,0xac,0x38,0x5b,0x91,0xc1,0x51,0xbb,0xa5,0x19,0x7d,0xfb,0x79,0xfa,0x42,0x3b,0xaa,0xf8,0xd3,0x0f,0xc3,0xf2,0xb2,0x68,0x91,0xae,0x28,0x83,0x4f,0x75,0xbd,0x20,0x5f,0x20,0xba,0xc2,0x75,0x85,0x74,0x23,0xf3,0x36,0x33,0x99,0x9c,0x64,0x4c,0xd1,0x5d,0xbd,0x06,0x46,0xbd,0x49,0xf0,0x86,0xc0,0xcb +.byte 0x1b,0xbd,0xec,0x98,0x5b,0xb1,0x80,0xba,0x12,0x42,0x22,0x09,0x9a,0x62,0x3c,0xa8,0x33,0xbf,0xce,0x92,0xd4,0x07,0xef,0x34,0x33,0x8f,0x67,0x1d,0x25,0x60,0xeb,0xd3,0xe4,0x31,0x63,0xa8,0xab,0xe3,0xab,0x70,0x50,0xd8,0x44,0x9f,0x39,0x51,0xd2,0xb9,0x4b,0x16,0xe4,0xfa,0xc5,0x47,0xf3,0xae,0xb5,0xfe,0x7d,0x5d,0x43,0x28,0xa6,0x3d +.byte 0xcf,0x71,0x23,0x6d,0x8e,0xd7,0x74,0xa4,0x86,0x9f,0x92,0x86,0x3c,0x1e,0x51,0xd4,0xe0,0xe6,0xd5,0xc4,0x53,0x3c,0x96,0x55,0xb9,0xac,0x63,0x5b,0xee,0x5a,0x03,0x84,0xb9,0x43,0x2c,0x0f,0x6d,0xbb,0xb5,0xca,0xf0,0x4f,0x3e,0x8b,0x3b,0x14,0x01,0x0e,0x81,0x0d,0xe6,0x62,0xa9,0x34,0x4e,0x03,0xc9,0x85,0x9f,0xc8,0x4f,0x52,0x3f,0x84 +.byte 0x1b,0xab,0x7e,0xaf,0x93,0x22,0xe2,0x0d,0x41,0x79,0x50,0xb2,0x17,0xa7,0x9a,0x80,0xd5,0x65,0x40,0x3b,0x56,0x9b,0xc9,0x00,0xcf,0x03,0xf1,0xff,0xcd,0x72,0x27,0xdb,0x74,0x94,0x70,0x02,0xdc,0x3a,0xee,0x00,0xcc,0x08,0x0a,0xab,0x40,0x87,0x24,0xaf,0x7d,0x67,0x18,0xd0,0x7c,0xeb,0x91,0x1f,0x7e,0x9e,0x41,0x7b,0x39,0xf2,0xfe,0xaf +.byte 0xb7,0x6c,0x58,0xe0,0xdb,0xf7,0xf1,0x23,0x0b,0x98,0x08,0xfa,0xde,0xfa,0xf9,0x24,0x23,0xd1,0x7f,0x69,0xd3,0xb1,0x82,0x68,0x03,0x06,0x86,0x7a,0xf4,0x90,0x8d,0xa5,0xbd,0xbe,0x14,0x2f,0xa2,0x5e,0xaf,0x5c,0x1e,0x07,0x68,0x19,0x5a,0xd3,0x53,0x7d,0xe8,0x13,0x6b,0xe3,0x02,0x49,0x0d,0xd2,0x96,0x56,0xae,0x67,0x8a,0x27,0x61,0xa0 +.byte 0x60,0x20,0x2c,0xb4,0x5d,0xdf,0xc3,0x24,0x50,0xa9,0xbc,0x3d,0x5c,0xf3,0x2e,0xb6,0xba,0x71,0xf0,0x04,0x43,0x84,0x4d,0x80,0xe9,0xa5,0xdd,0xb3,0x1e,0x5e,0x56,0x32,0x1a,0xd4,0xe3,0x10,0x57,0x35,0xa8,0xf1,0xe5,0x96,0xc1,0x27,0xef,0xcc,0x21,0x71,0x10,0xd1,0x07,0x7e,0xb3,0xab,0x95,0x64,0x86,0xaf,0xc9,0x15,0xe6,0x98,0x5e,0xb1 +.byte 0xbd,0xde,0x99,0x38,0xfc,0x8d,0xb2,0x5a,0xa4,0x44,0x5b,0x74,0x31,0x31,0x07,0x93,0xf5,0x86,0x78,0xc5,0x82,0x26,0xfc,0x95,0x1f,0x33,0xd8,0xfe,0x70,0x42,0x2a,0xa7,0x3a,0xb1,0xb2,0x63,0xd6,0x5b,0x54,0x9c,0x54,0x45,0x4f,0x1b,0x4a,0xc2,0xb4,0x0e,0x99,0x48,0xde,0x8d,0xa6,0x5d,0xd3,0xdc,0x31,0xa4,0x2b,0x0d,0x44,0x6e,0x1a,0x10 +.byte 0x3f,0x6c,0xa0,0xab,0xcb,0xb4,0xf6,0x18,0xba,0x11,0xd4,0xd4,0x70,0xc4,0xab,0x04,0x4c,0xe7,0xe9,0x53,0xe5,0xd9,0xe7,0xeb,0x21,0xa2,0x2c,0xc4,0xc6,0xc3,0xe7,0x73,0xd9,0xd3,0x84,0xb0,0x12,0x94,0x3b,0xfd,0xd9,0x32,0xba,0xe3,0x37,0xc1,0xb9,0x4d,0xea,0x3e,0x3d,0x31,0x4e,0xa0,0xe7,0x73,0x9d,0x4e,0x26,0xd1,0xdf,0xe6,0x26,0xcd +.byte 0xd7,0x17,0xd7,0x28,0x2c,0x04,0xe9,0x55,0xd5,0x70,0xaf,0xab,0xc1,0x07,0xbc,0xc4,0xd2,0x89,0xdc,0x22,0x59,0x19,0x0e,0xd8,0x8b,0xdd,0x46,0x7f,0xe4,0xad,0xa5,0x70,0xd7,0x18,0x51,0x30,0xd7,0xbc,0x26,0x45,0xe7,0xea,0xce,0xc7,0xf2,0xca,0xb1,0x9c,0x57,0x1e,0x10,0x5f,0x44,0x8d,0x3d,0xe8,0x55,0xa1,0x22,0x68,0x97,0xe8,0x03,0x9c +.byte 0x8b,0x63,0x81,0xd9,0xcd,0x4c,0x6c,0xe3,0x68,0xc9,0x35,0xee,0x94,0x13,0x25,0x0b,0x12,0x61,0xbd,0xee,0x6f,0xc7,0xe8,0xb5,0x01,0x7a,0x9e,0xd0,0x5a,0x46,0xc6,0x19,0x1b,0xc2,0xf1,0x2d,0xaa,0x53,0x29,0xcf,0x23,0x1a,0x4d,0x94,0x0a,0x50,0x64,0xf5,0x3b,0x52,0x55,0xac,0xa5,0x21,0x15,0x47,0xd9,0x14,0x8c,0x7f,0x4d,0x79,0x6b,0xc1 +.byte 0x43,0x0a,0xf2,0x42,0xd2,0xb0,0x95,0x19,0x99,0xdd,0x1d,0x8e,0x84,0x8c,0x7e,0x59,0x69,0x93,0x86,0xae,0xf1,0x67,0x35,0x55,0x7c,0x5b,0x38,0x11,0x56,0xec,0x6c,0xbb,0xe8,0xc0,0x54,0xec,0x5f,0x65,0x13,0xe3,0x86,0xa0,0xb1,0xc1,0x5e,0x34,0x4f,0xdd,0x4d,0x00,0xc6,0x29,0x05,0x78,0x64,0x8c,0x19,0xb0,0xfc,0x8a,0xb2,0xc7,0x86,0x57 +.byte 0xa2,0xdd,0xed,0x43,0xc1,0x7f,0xab,0x89,0x19,0xe8,0xa6,0xf5,0x7a,0x15,0xfe,0xd5,0x4f,0x53,0xde,0x78,0x42,0x76,0xf7,0x8a,0x54,0xe8,0x37,0xfd,0xee,0x82,0x20,0xd5,0xe2,0x32,0xb9,0x32,0x67,0xc7,0xff,0xdc,0xf0,0x40,0x07,0x28,0x55,0x16,0x56,0x84,0xe9,0x17,0x25,0x17,0x8e,0x10,0xef,0x9f,0xed,0x33,0x83,0x6d,0x9e,0x87,0x82,0xb8 +.byte 0xa9,0x6b,0xcb,0xe5,0x04,0xfb,0x87,0x51,0x05,0x1a,0x64,0x64,0x51,0x34,0xa3,0x61,0x4a,0xe3,0xa6,0x35,0xa5,0xc9,0xe3,0xde,0xb0,0xcf,0x5f,0x68,0x49,0xbc,0x98,0xf9,0x0b,0x82,0xde,0xb1,0xf9,0x77,0x16,0x7c,0x1f,0x80,0x0c,0xfc,0xbb,0x6d,0x8e,0x92,0x93,0x00,0xc2,0xa5,0xbe,0xde,0x55,0x09,0x9d,0x83,0xa5,0x6c,0x0a,0xb5,0xc4,0x53 +.byte 0xde,0xbc,0x07,0xca,0x0f,0x43,0xea,0x50,0x25,0xee,0x51,0x3b,0xfb,0x7a,0xcf,0x31,0x8a,0x19,0x1c,0xa2,0x2d,0x72,0x79,0x81,0xc6,0xb8,0xe6,0xe1,0xd8,0x3e,0x0f,0xc0,0xae,0x73,0x40,0x30,0x15,0xaa,0xe3,0x72,0xc3,0x36,0xc1,0x42,0x11,0xc5,0x3f,0xf5,0x69,0x78,0xea,0x95,0x54,0x36,0xe8,0x7e,0x9c,0xad,0xbd,0xcd,0x19,0xfe,0x4a,0x04 +.byte 0xb4,0x54,0x14,0x98,0x58,0x6f,0x06,0x8f,0x8c,0x95,0xa8,0xc9,0xe8,0xc4,0x2b,0x03,0xaa,0x42,0x75,0x74,0xa2,0x63,0xdb,0xca,0xd1,0xf0,0x60,0xc3,0x63,0x84,0xfb,0xd7,0x5a,0x7b,0xca,0x45,0x8d,0x14,0xdc,0xf8,0x71,0x40,0x71,0xbb,0xa1,0x1a,0xd3,0x8c,0xfb,0xf6,0xf7,0xfc,0x82,0x72,0x50,0xc9,0xe3,0xc5,0xe2,0xb1,0x57,0xb1,0x24,0x3e +.byte 0x11,0x4d,0x96,0x1c,0x3a,0xe1,0xb6,0xb7,0x0e,0x55,0x35,0x6c,0xd8,0x2b,0xe3,0x78,0xcd,0xac,0x8f,0x24,0x70,0xc6,0x35,0x5b,0x6e,0x75,0x7a,0xf1,0x7d,0x87,0x53,0xcf,0x0a,0x24,0xb6,0x6a,0xfd,0xef,0x90,0x07,0xcf,0xde,0x30,0xbc,0x8c,0xec,0xda,0x6f,0x45,0xad,0x92,0xb6,0x8d,0x6b,0xb8,0x8e,0xdc,0xe5,0xbf,0x57,0x67,0x5e,0x2f,0x4d +.byte 0x5d,0xee,0x38,0x0a,0xaf,0xeb,0x62,0x84,0x2b,0x4c,0x30,0x7b,0x91,0x99,0x40,0x6f,0x09,0x2b,0x36,0xcd,0x04,0xeb,0x7c,0x8d,0xa5,0xbd,0xd6,0xb0,0xfc,0x27,0xcf,0x6b,0xdd,0xe1,0x94,0xbc,0x21,0xc6,0xc9,0x55,0x24,0xd4,0xa1,0x6f,0x1e,0xa2,0x81,0x31,0x22,0xb7,0x75,0x9e,0xa7,0x01,0x26,0x01,0x6c,0x12,0x91,0x02,0x87,0x40,0x5c,0x91 +.byte 0x1f,0x0c,0x55,0x07,0x12,0xa7,0x48,0xdd,0xed,0xb6,0xfe,0x38,0x05,0xbc,0xe1,0x2e,0x3b,0x89,0x4f,0x98,0x65,0x22,0x93,0xda,0x09,0x9f,0x04,0x90,0x66,0x81,0xd1,0x56,0x27,0x8b,0x26,0x99,0xbe,0x93,0x08,0xf1,0xfb,0x80,0x5b,0xaa,0xc4,0x96,0x88,0x93,0xb6,0x01,0xae,0xf6,0x69,0xaa,0x6f,0x4d,0xde,0x2f,0xc7,0x24,0xbf,0xe9,0xb8,0xeb +.byte 0xcd,0xb2,0x0a,0x50,0x5c,0xd2,0x0b,0xfc,0x57,0x3b,0x96,0xf8,0xd9,0xbe,0xd2,0xb5,0x16,0xac,0x7c,0xe4,0x2f,0x46,0x93,0x86,0x48,0x91,0xfa,0xae,0xca,0x05,0x9e,0xfe,0x6e,0xae,0xa5,0x58,0x94,0xc0,0x58,0x1e,0xc5,0x69,0x28,0xe0,0x99,0x12,0x83,0xcf,0x35,0xe4,0x72,0x7d,0x4e,0x8b,0x66,0x56,0xb3,0xa6,0x2a,0x72,0x06,0x03,0x45,0xd1 +.byte 0x95,0xc9,0x93,0xb7,0xf4,0x8a,0x83,0xce,0x17,0x8b,0xf0,0x8e,0x8f,0x4a,0x68,0x55,0xd8,0xfc,0x54,0x8d,0xb5,0x62,0x17,0xa8,0xe6,0x18,0x03,0x53,0x04,0xb8,0xbe,0xd2,0xd0,0x7a,0x84,0xe1,0x39,0x31,0xc5,0x74,0xf2,0x64,0x1c,0x3b,0xd5,0x52,0x9b,0x81,0x8a,0x8f,0x36,0xc8,0xab,0x3d,0xe1,0xa8,0x2a,0xf2,0x84,0x9a,0xca,0x0c,0xcf,0xc9 +.byte 0x45,0x54,0x06,0xe8,0xd2,0x62,0x61,0x4d,0xeb,0x0b,0x38,0x4e,0x43,0x59,0x85,0x3a,0xe4,0xa3,0x25,0x15,0xc2,0xb5,0x7b,0x5e,0x2f,0xe6,0xc1,0x5d,0x2a,0xb7,0x57,0xb8,0x7e,0x61,0x51,0xc3,0x81,0x53,0x45,0x8a,0x6e,0x4c,0x89,0x84,0x2a,0x6b,0xca,0x15,0xff,0x97,0xfc,0x1f,0x8a,0x44,0xbd,0xcd,0x5e,0x32,0x6b,0x5f,0x78,0x7b,0xdf,0xdd +.byte 0x9d,0x2f,0x21,0xf2,0x14,0x40,0x5f,0x5a,0xd5,0x21,0x27,0x3d,0x0b,0x9f,0x9f,0xb0,0x8e,0xab,0x9e,0x68,0x96,0x02,0xfd,0x4d,0xcc,0x03,0xf0,0x03,0xfb,0x4c,0xac,0xfa,0x00,0x3b,0xea,0x1a,0x53,0x80,0x77,0xec,0x53,0xc3,0x3c,0x6c,0xf8,0xa5,0x3e,0x52,0x34,0xd4,0xa1,0x52,0xb8,0xd6,0x19,0x8c,0xdf,0x85,0x27,0x61,0x22,0xe7,0x43,0xeb +.byte 0x85,0xc0,0xbe,0x58,0xe6,0x60,0x81,0x4c,0xc6,0xbb,0xc0,0xbf,0x63,0x39,0x9d,0xad,0x2e,0xa8,0x2a,0x83,0x3d,0xfa,0xdb,0x0b,0x98,0x16,0x78,0x18,0x43,0xc7,0x17,0x82,0xb8,0xec,0x32,0x45,0x75,0x0c,0xc1,0x4c,0x84,0xbf,0xce,0x83,0x3b,0xb4,0x91,0xf4,0x0d,0x5d,0x83,0xf6,0xd6,0x10,0xab,0xc6,0x26,0x9b,0x68,0x59,0xec,0x48,0x4b,0x1d +.byte 0x35,0x2a,0x5b,0x23,0x83,0x22,0x8e,0x7d,0xfa,0xce,0xde,0xb1,0xd9,0x78,0xf6,0x9e,0x08,0xba,0xfb,0xda,0xf2,0x04,0xc5,0x2a,0xac,0xbf,0xb4,0x04,0x05,0x1f,0x0b,0xeb,0xe8,0x2a,0x3c,0x3f,0x4f,0xb6,0xc8,0x6b,0x97,0x5a,0x9e,0xdb,0x4b,0x3c,0x93,0xc1,0x20,0x1c,0x62,0x91,0x74,0x76,0x49,0x92,0xc2,0xd8,0x0d,0xd8,0xfe,0xb5,0x68,0x77 +.byte 0x48,0x9f,0xbe,0xe0,0x78,0x20,0xe7,0xa4,0x3d,0x3e,0xa1,0x4c,0xc7,0xeb,0xd3,0x30,0xd3,0xf0,0x65,0xcf,0x18,0x3c,0xf8,0x25,0xc2,0x99,0xf4,0xec,0xef,0xdd,0xef,0xf3,0x6b,0x28,0x00,0xaa,0xfd,0x76,0xec,0x19,0x67,0xd6,0x79,0xa6,0x01,0x6e,0x20,0x3a,0x7f,0xd4,0xd0,0x05,0xb4,0xea,0xd4,0xde,0x11,0x06,0x44,0x4a,0x6f,0x15,0x2f,0x62 +.byte 0x9a,0xaa,0xeb,0xaf,0xb5,0xb5,0x46,0xb2,0x28,0x2e,0x74,0x26,0x06,0x91,0xeb,0x15,0xef,0xd4,0xfd,0xc7,0x1b,0x65,0x25,0x01,0x24,0xd2,0x44,0x05,0x18,0x1c,0x71,0x36,0x58,0xc4,0x37,0xfe,0x22,0x29,0xc0,0x2f,0xd2,0x4e,0xeb,0x43,0xb9,0xf9,0x4e,0x87,0xd7,0x92,0x77,0xa8,0x4f,0xa5,0x6e,0x5c,0x4d,0x3a,0xe9,0x16,0x62,0x30,0x51,0xbb +.byte 0x32,0xd8,0x0d,0x86,0x20,0xbf,0x68,0x0f,0x3e,0xef,0x8b,0x0d,0xc5,0xa6,0x94,0x81,0xe9,0x6f,0x85,0xf5,0x22,0x6e,0x9e,0x0a,0x56,0xa3,0x43,0x79,0x50,0xd9,0x45,0x5f,0x5a,0x3f,0x53,0x53,0xb7,0xfe,0xb6,0x1c,0x63,0xab,0x7c,0xed,0x2f,0xc4,0x2b,0xa8,0x53,0xfb,0xad,0x46,0xf0,0x63,0xca,0x7a,0x6e,0xce,0xf4,0xb9,0x34,0xd0,0x9a,0xc8 +.byte 0x0d,0xd2,0x32,0xce,0x26,0x3f,0xcd,0xd9,0xbc,0xa9,0x46,0x65,0x45,0xfe,0x45,0xeb,0x0d,0xab,0xe6,0x31,0xb6,0xb9,0x41,0x53,0x7d,0x55,0xc3,0xfb,0x10,0x46,0x37,0x77,0x1f,0x15,0xf0,0x5f,0xcb,0x8f,0xea,0xc5,0xc0,0xb8,0xc6,0xb1,0x3a,0x06,0x42,0xec,0x38,0xec,0x06,0xd1,0x37,0x3b,0xe1,0x8d,0xad,0xc2,0xce,0x96,0x0b,0xf0,0xab,0xde +.byte 0x9c,0x3c,0x09,0xef,0x59,0xcd,0x67,0xa7,0x6e,0x0e,0xc7,0xee,0x51,0x6d,0x90,0x40,0x0e,0xdf,0xb1,0x13,0xe3,0x0c,0xb6,0xe8,0xcb,0xf5,0x57,0x50,0xeb,0xdf,0x09,0x45,0x72,0x40,0xff,0xdc,0x5c,0x51,0x42,0x47,0xb2,0x9e,0xca,0xf3,0x1b,0x06,0xb1,0x3e,0x04,0x55,0x96,0x63,0x24,0x16,0xdb,0x3e,0xab,0x98,0x33,0x70,0x6f,0xfd,0x8f,0x7b +.byte 0x56,0xb0,0x7f,0x28,0x26,0xc4,0x2a,0x9e,0xf5,0xa7,0xba,0x61,0x75,0xa4,0xb1,0x25,0x60,0xe5,0x9c,0x7e,0xb4,0xaa,0x04,0xa1,0x33,0x5a,0x8d,0x88,0x1d,0xc4,0x38,0x58,0x28,0x23,0xc7,0xac,0x20,0xf8,0xaa,0x18,0xf8,0xc7,0x27,0x05,0x07,0xf7,0x12,0xfe,0xe1,0xa5,0x99,0xaa,0x55,0x79,0x72,0xc4,0x14,0x08,0x14,0x4a,0xfb,0xf7,0x66,0x81 +.byte 0x6e,0xed,0x81,0x12,0x5f,0xb6,0x08,0x00,0x37,0xf9,0xdc,0xdf,0x4d,0xcb,0xfa,0xc6,0xf3,0xc2,0x17,0x17,0x52,0x39,0x7b,0xa0,0x3e,0x25,0xc9,0x48,0xd8,0xa6,0x1b,0x8b,0xdb,0xf8,0x74,0xac,0x6b,0x16,0xec,0xa6,0x4a,0x1e,0x7e,0x5c,0x50,0xbf,0x81,0xef,0x3c,0x7d,0x9d,0x21,0x38,0xa9,0x26,0x3c,0x30,0x7a,0xfb,0xab,0xd8,0x6a,0x0a,0xaa +.byte 0xbb,0x6e,0x91,0x92,0x7c,0x04,0x02,0x0e,0xa2,0x71,0xc7,0xde,0x7d,0x42,0xaf,0xe5,0x92,0xc1,0xb9,0xd7,0x52,0xaa,0x32,0xea,0x39,0x84,0x17,0x40,0xb0,0x83,0x18,0xff,0x46,0xb8,0x59,0xd9,0xa3,0xce,0x82,0x7e,0x65,0x54,0xe0,0xa4,0x6d,0x8a,0xbc,0x6a,0x65,0xb2,0xd5,0x96,0x5b,0x1c,0x9a,0x32,0x72,0xf7,0x81,0x57,0xcd,0xb3,0x22,0xc5 +.byte 0x7d,0x20,0x24,0xea,0xbe,0x51,0x4c,0xb3,0x48,0x36,0x4f,0x73,0xf4,0x3f,0x07,0x92,0x01,0xe2,0x1e,0x78,0x3f,0x8e,0x1f,0x35,0x1a,0xf1,0xe1,0x14,0xd1,0xe7,0xd9,0xfd,0xd8,0xf7,0x20,0xc2,0xf3,0x7a,0x59,0xc9,0x1d,0x13,0x41,0x01,0xf6,0x77,0x69,0xfb,0x0f,0xc7,0xe4,0x58,0x04,0xce,0xe8,0x73,0x87,0x2f,0xef,0xe6,0x36,0x38,0xc7,0x91 +.byte 0x2d,0x17,0xb5,0x56,0x68,0xb1,0x9f,0xbf,0x2e,0x4b,0xe7,0x09,0x7b,0x35,0x33,0x5a,0x6c,0xc1,0x6f,0xb3,0xac,0x6c,0x1e,0xfe,0xc0,0xc9,0xd8,0x77,0xf5,0xcb,0x5e,0xcc,0xd1,0x2f,0xdd,0x23,0x8b,0x3b,0xb5,0x43,0x96,0x1f,0xa9,0xe4,0x84,0x41,0x92,0xe9,0x68,0x47,0x50,0xf7,0xd4,0x85,0x22,0xa1,0x43,0xaa,0xde,0xf7,0xea,0xe0,0x54,0xaa +.byte 0x0d,0xe6,0xa5,0xb8,0x7e,0xec,0x13,0x9a,0x1e,0x6c,0x10,0x9d,0xa8,0xfb,0x97,0xde,0x24,0xda,0x33,0xbb,0xab,0x17,0x7a,0xb4,0x72,0xaf,0xed,0xc9,0xa4,0x62,0x65,0x0c,0x99,0x3d,0x74,0x7f,0xff,0x59,0xa9,0x8e,0x37,0xb9,0x10,0x30,0x26,0x3f,0x2f,0xfc,0x1e,0xe2,0xc6,0xb8,0xff,0x41,0xb3,0x35,0x3f,0x41,0xf4,0x47,0xbc,0x76,0xc6,0x77 +.byte 0x0f,0xf8,0xff,0xb8,0xd2,0x34,0x40,0xac,0x43,0xcb,0xcf,0x1f,0x57,0xaa,0x1a,0xa7,0xe1,0x4a,0x69,0xd7,0x05,0xa7,0x9d,0xff,0x13,0x43,0x91,0xe3,0x09,0x1c,0xb2,0xb2,0x82,0x06,0xa3,0x3c,0x35,0x85,0x9e,0xd0,0xcf,0x1c,0xb9,0x13,0x09,0x7d,0x3d,0x17,0x0f,0xf8,0x2f,0x61,0x97,0x7e,0x02,0xe0,0x78,0x07,0x69,0x8c,0x91,0xbe,0x96,0x92 +.byte 0x4a,0x03,0xa7,0x31,0x5f,0x6c,0xfe,0x55,0xb2,0x17,0xe8,0x4c,0x64,0x48,0x18,0xde,0x4f,0x5a,0xce,0xd2,0xcb,0x83,0x4d,0x1b,0x2a,0x1f,0xce,0x85,0xf7,0xdc,0x74,0x8c,0x42,0xc6,0x5a,0x3a,0x51,0x22,0x79,0x70,0xa0,0xe0,0x29,0x2a,0x73,0xe4,0x53,0xb4,0x47,0x5f,0x54,0xa8,0x65,0xe4,0x89,0x78,0xf9,0xb9,0x5f,0x5f,0x9d,0xa8,0xf7,0x82 +.byte 0x4e,0x34,0x60,0xfc,0xe3,0x88,0x65,0x73,0x99,0x1f,0x53,0xed,0xe8,0xf0,0xf4,0x5a,0x0a,0x49,0x42,0x6e,0x02,0x3f,0xa8,0x63,0x21,0x02,0x2e,0x8f,0x33,0xba,0x0e,0x10,0xd3,0x4c,0x1a,0x8b,0xf5,0x84,0x8e,0x2b,0x37,0x12,0x23,0x77,0x02,0x45,0xc7,0xc3,0x79,0x06,0xc2,0x8c,0xaa,0x32,0x53,0x7c,0x19,0xa2,0x92,0x7e,0x47,0x40,0x8f,0xae +.byte 0x8a,0x64,0x51,0x67,0xe1,0xc1,0xc3,0xd2,0x14,0x1d,0x63,0x0c,0x80,0x04,0x30,0x3d,0xee,0x58,0x44,0xe4,0x14,0x63,0xfc,0x95,0x05,0x3e,0xc1,0x8d,0xd3,0xcb,0x5d,0xc1,0x8e,0xf9,0xd7,0xe5,0x9d,0x97,0xef,0x8a,0xaa,0x50,0x31,0xa3,0x01,0x3a,0xb2,0x8d,0x63,0xb6,0xe7,0x34,0xec,0xa1,0x7a,0xff,0x57,0x95,0xbb,0x1d,0xbe,0x0c,0xa5,0x91 +.byte 0x92,0x08,0x06,0x1c,0x67,0x03,0x2e,0xee,0xf6,0x6f,0xa0,0xb7,0x9a,0x7c,0xe3,0x6a,0x8e,0xd8,0x50,0xc1,0xd6,0xa1,0x8d,0xe9,0x66,0x9a,0x1f,0x62,0x15,0x04,0x93,0x74,0xe8,0x04,0x0d,0x27,0x55,0x2b,0x07,0xb1,0xbd,0x69,0xe4,0xc1,0x34,0x8e,0xe7,0xfb,0xa0,0x3f,0x40,0x31,0x47,0xba,0xcb,0x80,0x88,0xf7,0x4f,0x46,0x05,0x31,0xaf,0x23 +.byte 0xdf,0x93,0x09,0x0a,0x15,0xc9,0x95,0x74,0x52,0x72,0xf4,0xbf,0x0d,0x07,0xb6,0xcc,0x4b,0x40,0x12,0xf3,0x87,0xea,0x29,0xd8,0x29,0x31,0x23,0xac,0x29,0x1a,0x89,0x83,0x5b,0x33,0x4b,0x6b,0x69,0xbe,0xb6,0x15,0x7e,0xfd,0xf2,0x95,0xc4,0xbe,0xeb,0xee,0x59,0x01,0x2a,0xce,0xca,0x80,0xda,0xf8,0x1a,0x01,0x23,0xf7,0xa1,0x4f,0xf5,0x83 +.byte 0x5e,0x16,0xd9,0x12,0xa9,0x4e,0xcb,0x59,0x23,0x4f,0x40,0xd7,0xbf,0xaf,0x76,0xf0,0x50,0x31,0x27,0x3a,0x8b,0x1d,0x9b,0xb1,0x1c,0x41,0xb0,0xed,0xe6,0xf3,0xa8,0x5f,0x6b,0x58,0x54,0x92,0xaf,0xcc,0x44,0x5c,0xea,0xdb,0x09,0xc5,0x26,0x5e,0xbe,0x46,0xbd,0x72,0x49,0x5a,0x4e,0x65,0x7e,0x75,0xcf,0xfc,0xf6,0xd0,0x3c,0x4a,0x7e,0xd6 +.byte 0x8e,0x8e,0xb4,0x19,0x45,0x75,0xbf,0xc3,0x5e,0x46,0xff,0xc9,0x46,0x65,0x8d,0x31,0x01,0x5e,0x1c,0x13,0x93,0x56,0x6f,0x28,0xec,0xf3,0x77,0xfa,0x6e,0xb9,0x0e,0xb6,0x8e,0x0e,0x38,0xf8,0x28,0x64,0xa2,0xa1,0x42,0x9a,0xb4,0xf3,0x14,0x8d,0x17,0x80,0x05,0x82,0x7c,0xf1,0xea,0x8b,0x4b,0x62,0xa0,0xde,0xf6,0xd7,0x36,0xb0,0x70,0x8d +.byte 0x03,0xf6,0xc8,0x2a,0x9e,0xc0,0xbb,0x2f,0xcb,0xef,0x35,0xf7,0x16,0xcd,0xd6,0xd6,0x90,0xd7,0x5d,0x61,0x00,0x33,0x9f,0xd8,0xd1,0xda,0x17,0x67,0x90,0xd1,0xf8,0x59,0xcb,0xf1,0x76,0xc2,0xbe,0x1f,0x5d,0x0d,0xb2,0x02,0xbd,0x19,0x9f,0x5a,0xa0,0x91,0xac,0x51,0xb5,0xf5,0x0a,0x64,0x67,0xf2,0x49,0x30,0x6c,0x57,0x83,0xda,0x90,0xf1 +.byte 0xc6,0xc7,0xe6,0x05,0x13,0x30,0x52,0xfd,0x2a,0x47,0xea,0xae,0xd3,0xed,0xe4,0x64,0x1f,0x6c,0xb1,0xdf,0xca,0x20,0x97,0x2a,0xc8,0xdc,0x00,0x0e,0x5b,0x59,0xc8,0x16,0x95,0x68,0x9a,0x2e,0x44,0xab,0xf6,0x93,0x7c,0x8f,0x66,0x4f,0x07,0x42,0x3f,0xa5,0x81,0xe7,0xab,0x59,0xbb,0xae,0xb1,0x3e,0x9a,0x25,0xf1,0xde,0xac,0x4c,0x1d,0x7a +.byte 0x54,0xb9,0xa9,0x59,0xaf,0xb0,0xab,0xaf,0x6b,0x76,0x66,0x1e,0xbe,0x1a,0xc1,0x61,0x1b,0x81,0x6b,0xe8,0xe4,0x73,0x6a,0x87,0xe9,0x39,0xcb,0x2c,0xab,0x64,0x36,0x9a,0x11,0x46,0xec,0x9f,0x30,0xb6,0x2c,0x14,0xe0,0xec,0xbe,0x33,0xde,0x60,0xc6,0x00,0x29,0x3c,0x55,0xda,0xfc,0x64,0xff,0xaa,0xbf,0x99,0x58,0xe2,0xe3,0xec,0xde,0xca +.byte 0xd1,0x3d,0xd2,0xad,0xaa,0xca,0x36,0x8f,0x93,0xa2,0xdd,0xde,0xaa,0x49,0x7f,0xdd,0x39,0x91,0xa0,0x7b,0x33,0xdf,0x36,0xcd,0xc3,0x3a,0xbc,0x53,0xf0,0x07,0x99,0x78,0x4e,0x63,0x47,0x79,0xbf,0x21,0xfc,0x05,0x47,0x69,0xec,0xee,0xf4,0x21,0x97,0x94,0x0c,0x7a,0x9f,0xa6,0xeb,0x5b,0x23,0xed,0x9d,0xc1,0xe1,0x5e,0x10,0xca,0xe0,0x84 +.byte 0x5a,0xdd,0xf6,0xae,0xd8,0x23,0x98,0xea,0x6c,0x43,0x77,0x41,0xf3,0x84,0x5a,0xe8,0xda,0xb3,0x11,0x0e,0x19,0x33,0xe9,0xf9,0x7a,0x90,0x07,0x68,0xf1,0xe4,0x52,0x0c,0x03,0x67,0xb9,0x42,0x41,0x24,0xa3,0x61,0x67,0x75,0xc9,0xb5,0xdd,0x10,0xf1,0x20,0x93,0x54,0xdb,0x0d,0xc7,0x0d,0x25,0x3e,0xda,0xb3,0xe7,0xce,0x97,0x7e,0xdb,0x1a +.byte 0x8f,0x92,0xff,0xe3,0x44,0x2d,0x6b,0xdb,0xe0,0x69,0x8b,0x16,0xce,0xe8,0xc7,0x93,0xf1,0x19,0xb9,0xd3,0x41,0x45,0x8d,0x95,0xb3,0x03,0xb2,0x66,0x96,0x95,0x91,0x33,0x1c,0xee,0xde,0xd7,0x9d,0xab,0x32,0x2f,0xb8,0x3c,0x7a,0x44,0x8f,0xa6,0xca,0x02,0x03,0x2f,0xa8,0x44,0x85,0x0e,0xf5,0x27,0x90,0x84,0xd9,0x80,0x06,0xf4,0x4f,0xc7 +.byte 0x21,0xc5,0x92,0xa4,0x2d,0x08,0x42,0x4c,0xa7,0x84,0xfa,0x7e,0x2b,0x66,0xfb,0x7c,0x81,0xea,0x5c,0x7d,0xdd,0x86,0xf1,0xf5,0x04,0xef,0xf2,0x50,0x12,0x72,0x42,0x22,0x23,0x74,0x7f,0xe7,0xed,0xd9,0xce,0x78,0x10,0x83,0x37,0xd0,0x81,0x97,0x4a,0xac,0xc2,0xe5,0x13,0x91,0x83,0xe2,0x6e,0xff,0x5a,0x0b,0xc3,0x4d,0xc1,0x3e,0x97,0x16 +.byte 0x96,0x69,0x39,0x9e,0x1d,0x6b,0x16,0x82,0xa2,0x94,0x0d,0x50,0xdd,0xa3,0xda,0x9d,0xda,0x3f,0x46,0xce,0x6c,0xd0,0xdf,0x6e,0x1b,0x17,0x47,0x51,0x74,0x6f,0xe9,0xa4,0x6b,0xae,0xd2,0x6e,0x5b,0xc0,0x26,0xc6,0x0b,0x84,0xb1,0x39,0xcf,0x9e,0x7c,0x18,0x52,0xd7,0x8f,0x33,0xae,0x3d,0xaf,0x3d,0x1a,0xba,0x3f,0x09,0x76,0x22,0x1d,0xf3 +.byte 0x42,0x14,0x4f,0x06,0xc7,0x33,0xc1,0x2d,0x58,0x1b,0x4c,0xc0,0x3a,0x29,0xa6,0x5e,0x19,0x26,0xdf,0x36,0x18,0xa9,0xc5,0xe9,0xd3,0xb1,0xae,0x86,0xa8,0x7f,0xd9,0xb4,0x18,0xef,0x9c,0x46,0xb6,0xf2,0xb2,0xb6,0x6e,0xe2,0xf8,0x5f,0x27,0xea,0x76,0xd3,0x40,0x68,0x94,0x66,0x8a,0xf5,0x9f,0xee,0x0c,0xe5,0xae,0xb6,0xba,0x87,0x42,0x40 +.byte 0xc9,0x83,0xac,0xb4,0x2c,0xec,0x74,0xb7,0x55,0x17,0x0b,0x1e,0x45,0x1a,0x87,0x9d,0x52,0xce,0xb7,0x58,0x2f,0x45,0xc7,0x7d,0xf3,0xd3,0x11,0x2e,0xf4,0xd8,0xc0,0xb8,0xc3,0x31,0x45,0x68,0x40,0xe8,0x8a,0x33,0x20,0x9a,0x06,0xa8,0x18,0x53,0xb2,0x73,0xa1,0x57,0xac,0x8f,0x56,0xeb,0x8e,0xa4,0xfc,0xd6,0x76,0x7e,0x81,0x62,0x2c,0x17 +.byte 0x49,0xb4,0xcc,0x15,0x66,0xcb,0xa2,0x3c,0x29,0xf0,0x73,0x0e,0x9a,0x34,0x16,0x6d,0x43,0x62,0x20,0x89,0x14,0xae,0x8b,0x5d,0x61,0x54,0xa1,0x82,0x49,0x73,0xb9,0x2b,0x48,0xd4,0xe3,0x21,0x37,0x5e,0x4d,0xbf,0xd0,0x72,0xa4,0x23,0xdb,0x7c,0xd9,0x45,0x77,0x8a,0x24,0x23,0x56,0xcd,0x84,0x80,0x44,0x12,0xce,0x99,0x39,0xbd,0x77,0xff +.byte 0x8c,0x62,0x8d,0x56,0x77,0x24,0x40,0x11,0x22,0xab,0x28,0xd6,0x75,0x2b,0xbb,0xc1,0x51,0xd6,0x5e,0x61,0x1c,0xe9,0xac,0x36,0x99,0x52,0x44,0xa5,0x20,0xdb,0xe0,0x12,0x9a,0x45,0x8f,0x7f,0x47,0xf9,0xa3,0x91,0x18,0x2b,0x51,0x9a,0x9f,0x3f,0x7d,0x36,0xde,0x71,0xae,0xca,0x62,0x62,0x16,0xda,0x19,0x9c,0x84,0xce,0xde,0x93,0x22,0xde +.byte 0xaf,0xe7,0x91,0x09,0xe8,0xf0,0x0e,0x07,0x71,0xdf,0x48,0xcd,0x8a,0x77,0x19,0x3c,0xd6,0xef,0x8e,0xe0,0x49,0xdf,0xcb,0xd6,0x34,0x78,0x7f,0x42,0xc2,0x6e,0x7a,0x50,0x53,0xee,0xbf,0x73,0x4b,0xd4,0x4f,0x06,0x18,0x26,0x67,0x51,0x54,0xa3,0x40,0xe6,0xb3,0x61,0x4b,0xfd,0xee,0x62,0x00,0x44,0x6c,0x0d,0x8b,0x2f,0x4d,0x06,0x17,0x41 +.byte 0xee,0x8b,0xde,0x1f,0x80,0x36,0x58,0x3e,0x0a,0x53,0x0a,0x83,0xf9,0xba,0xbd,0x91,0x6a,0x20,0x32,0x42,0x6c,0x85,0xdc,0x84,0xfd,0xce,0x57,0xbe,0xf8,0xa5,0x2c,0x7e,0xf9,0x1b,0x07,0xf4,0x32,0x13,0x32,0x79,0xdc,0x91,0xfc,0xc0,0x18,0xe6,0x1e,0xb2,0x67,0x9d,0x08,0xd2,0x89,0xa2,0xb1,0xbf,0x37,0xe1,0x3f,0x9e,0xb5,0x17,0xf7,0x2f +.byte 0x9a,0x4f,0x3c,0xea,0x5d,0x48,0x56,0x48,0x35,0x17,0xe9,0x5a,0x99,0xa7,0x2e,0x25,0x4f,0x96,0xa6,0x3d,0x3c,0xf8,0xdc,0xe7,0xe5,0x98,0x46,0xf7,0x10,0x16,0x4f,0xb0,0x7b,0x48,0x06,0xbb,0x9a,0x5a,0xad,0x32,0x49,0x92,0x39,0xb2,0xfe,0x01,0x1a,0x5e,0xcc,0xf7,0x0d,0x65,0x1c,0xf5,0x3d,0xb3,0x40,0x28,0x06,0x6e,0xbb,0x74,0x2a,0x95 +.byte 0xe9,0x62,0x2a,0xe2,0x19,0x38,0xc6,0x0d,0x46,0x30,0x6d,0x90,0xa5,0x68,0x4d,0x89,0xf0,0xf4,0xaf,0x52,0x11,0x8a,0x47,0x65,0xc0,0x6d,0xee,0xde,0xbc,0xed,0xf2,0x94,0xf3,0xfb,0xfd,0x2f,0xea,0xd5,0x36,0x89,0x8a,0x22,0xb8,0x75,0x3c,0xda,0x8d,0x3f,0x71,0xe5,0x50,0xb8,0xef,0xfc,0xa1,0x34,0x4a,0xb0,0x56,0x64,0xaf,0x28,0x0c,0x7a +.byte 0x28,0x3e,0xc8,0x83,0xc2,0xbb,0x89,0xc4,0x29,0x7f,0xc9,0xe7,0x4e,0xcb,0xdc,0x8f,0xe8,0xa4,0xdc,0x0d,0xcc,0xa0,0x16,0xda,0xa9,0x34,0x61,0xec,0x64,0xa7,0xf4,0x47,0xe9,0xee,0xbf,0xc6,0x4b,0xc5,0x01,0x65,0xe4,0xe0,0x12,0xd6,0x27,0xda,0x30,0xb5,0x60,0x72,0xe1,0xee,0x38,0x23,0x6c,0x9d,0xbb,0x83,0x01,0x4b,0x26,0x9a,0x68,0xb3 +.byte 0x89,0xb3,0xe0,0x10,0x22,0x58,0xef,0x2d,0xd4,0x86,0xab,0xab,0xc4,0xd8,0x9c,0x56,0xe8,0x54,0x40,0x86,0x11,0xd2,0x6b,0xc0,0xaf,0xfc,0x4a,0xef,0x24,0x38,0x79,0x32,0x54,0x26,0x8b,0x7e,0x02,0xad,0x86,0x9d,0x40,0x65,0x28,0x28,0xa3,0xa6,0xe4,0x07,0x29,0x3a,0xbb,0x81,0xed,0x17,0x54,0x51,0x35,0xc6,0x88,0x9c,0x63,0x7e,0x73,0x02 +.byte 0x28,0x13,0x4b,0x33,0xc0,0x68,0xbc,0xae,0x8c,0x59,0xd4,0x84,0x1d,0x41,0x86,0x5a,0xf6,0x14,0x50,0x13,0x88,0xca,0xc8,0xb8,0xfc,0x61,0xeb,0xe6,0x69,0x70,0x4a,0xa5,0xa5,0x36,0x4b,0xac,0xca,0x00,0x28,0xae,0xb0,0x03,0xef,0xe3,0x92,0xad,0x97,0x32,0x05,0x8c,0x93,0x95,0x45,0xd5,0x75,0x66,0x11,0xd3,0x6f,0x7f,0x5f,0x35,0x44,0xb7 +.byte 0xd7,0x34,0xcf,0x8c,0x4a,0x61,0x68,0x63,0x3f,0x92,0x54,0x01,0x3c,0x25,0x2d,0x6f,0x4a,0x2d,0x55,0xff,0x3f,0x86,0x85,0x9f,0xc2,0xa1,0xde,0x6b,0xbf,0x7e,0xb4,0x7c,0xc1,0x80,0x73,0xf5,0x3b,0x85,0xae,0x36,0x1a,0xdf,0x00,0x52,0xb7,0x70,0xa9,0x42,0x79,0xd2,0x26,0xf8,0x3b,0xeb,0x9f,0x2e,0x15,0x33,0xc8,0x85,0x2d,0x63,0xb2,0x89 +.byte 0x24,0x8e,0xfd,0xe6,0xdf,0x01,0x80,0x8b,0x27,0xe3,0x7e,0x17,0xc2,0x4e,0x26,0xa2,0xe1,0x95,0x81,0x3a,0xdd,0x2a,0xf4,0x75,0x21,0x64,0x11,0x04,0x5e,0x00,0x39,0xf0,0x08,0x68,0x67,0x09,0xa8,0x9b,0xbe,0xb7,0x62,0x0e,0xa8,0x69,0xcd,0x4e,0xaf,0xc8,0x4f,0x92,0x3d,0x8e,0x35,0x60,0x70,0xb3,0xda,0x2f,0x38,0x80,0x6f,0x5e,0xcc,0x3b +.byte 0x6e,0x05,0x26,0x14,0x9d,0x36,0x72,0x7d,0x09,0xb8,0xb7,0xa1,0xf7,0x5f,0xb3,0xe1,0xd6,0xc5,0x54,0x4e,0x80,0x4d,0x06,0x8f,0x84,0xbb,0xb6,0x65,0x87,0x2c,0x19,0x4a,0x74,0x3c,0x34,0x62,0x32,0xad,0x4c,0x06,0xa3,0xbb,0xfb,0x4f,0x4f,0x9d,0x91,0x84,0x63,0x75,0x34,0xcc,0x6b,0x00,0xa1,0x5a,0x63,0x03,0x8d,0x1e,0xdb,0xa4,0x0c,0xe6 +.byte 0x3d,0xd1,0x94,0x77,0xd8,0x77,0x8c,0x39,0x48,0x78,0xb1,0xb5,0xa2,0x41,0xd0,0x6d,0x27,0x20,0x4a,0x41,0x88,0xa5,0x78,0x3f,0x51,0x72,0x8c,0x80,0xe7,0x37,0x81,0x8b,0x06,0x46,0x58,0xab,0x23,0x85,0x47,0x89,0x39,0xf9,0x14,0xfe,0xbf,0x07,0x7c,0x47,0x8e,0xcc,0xd7,0x08,0xfe,0x5d,0xee,0xf9,0x94,0xa2,0x83,0x81,0x8a,0xfd,0x0f,0x9a +.byte 0xa7,0xe4,0x59,0xad,0xe6,0x1f,0xed,0x5d,0xe4,0x20,0xd6,0x2f,0xa7,0xd3,0xcf,0x5b,0x18,0x6d,0x24,0x79,0x66,0xd9,0xaa,0x44,0xfa,0x8d,0x74,0x60,0xcc,0x7e,0xbf,0x4f,0x0e,0xe3,0x9c,0xa5,0xe4,0xff,0x14,0x05,0xff,0x24,0x62,0x94,0x00,0x7a,0x58,0xe5,0x0b,0x3b,0xe8,0xee,0xe1,0x4d,0x4e,0x34,0x26,0xba,0x70,0x10,0x5e,0x14,0x4f,0xa5 +.byte 0x7a,0x9e,0x7b,0x28,0x99,0xbe,0x94,0x4a,0xcb,0x8d,0x65,0x60,0xa0,0x6e,0xc7,0xbc,0x51,0xba,0xb5,0x07,0x97,0x25,0x42,0xb7,0x2c,0x0e,0x9b,0xfc,0xfb,0x35,0x6f,0x74,0x10,0xce,0x25,0xdb,0xa9,0x7c,0x11,0x61,0x43,0xf9,0x19,0xbf,0xe2,0x21,0xa3,0x57,0x3c,0x41,0x0a,0x15,0x4e,0x7f,0x6b,0x38,0xb6,0x73,0x41,0xa2,0x4e,0x8e,0xb9,0x44 +.byte 0xee,0x2a,0x2e,0x0a,0x9e,0x85,0xf1,0x6e,0x93,0x72,0x42,0x50,0x55,0xe1,0xc6,0x18,0x11,0x92,0xf7,0xbf,0x05,0xd8,0xb6,0xbc,0x2b,0xd5,0xe0,0xd3,0x9b,0x64,0xc4,0xdd,0xb0,0xb3,0x46,0xd8,0xfb,0x73,0xea,0xed,0x06,0x96,0x16,0x9e,0xf6,0xc6,0xe8,0xbe,0xae,0x00,0x2f,0x5a,0xf4,0x1f,0xb5,0x28,0x7c,0x75,0x76,0x68,0x74,0xa2,0x57,0x0e +.byte 0x6c,0xfa,0x2d,0xbe,0x34,0xf1,0xc9,0x2b,0x83,0x58,0xe7,0x2a,0x87,0xdb,0x47,0xae,0xc7,0xc2,0x78,0x50,0xed,0x20,0xdf,0x30,0x38,0xdd,0x84,0xa9,0x6b,0x00,0xb1,0x7b,0xbb,0x69,0xd3,0xbe,0xed,0x3d,0x99,0x6e,0x39,0x42,0x75,0x8a,0x6c,0x7c,0xa5,0xcf,0xc9,0xcf,0x11,0x14,0xb3,0xaf,0x72,0x00,0x3b,0x58,0xdd,0x2a,0xe1,0x44,0xa7,0x51 +.byte 0x15,0x05,0x1b,0x18,0x49,0x07,0x90,0x4c,0xbc,0x99,0x88,0x64,0xf6,0x14,0x0b,0x99,0xc0,0x84,0xc9,0x06,0x32,0xf0,0xec,0x19,0x8d,0x4a,0xb8,0xdb,0x32,0xb4,0x5e,0xc9,0x0c,0x24,0xf0,0xad,0xdc,0xf4,0x32,0x3b,0xf6,0x68,0x28,0x4a,0xa5,0x5b,0xb7,0xd5,0x00,0x35,0xf8,0x56,0x03,0xa3,0x86,0xa0,0x8a,0x1b,0x53,0xb5,0x58,0x73,0x8c,0xf9 +.byte 0x2b,0xd8,0xcb,0x88,0xe7,0x7e,0x79,0x68,0x13,0x5d,0x7d,0x23,0xc4,0xec,0x9c,0xf4,0x95,0x97,0xbf,0xb2,0xd9,0xdf,0x38,0xe8,0xa2,0x79,0xf7,0xe8,0x36,0x80,0x59,0x3f,0x58,0x2f,0xf7,0xf9,0x32,0x73,0xdd,0xd6,0x9e,0x20,0x1a,0x29,0xab,0xc1,0x77,0x14,0x71,0x3c,0xde,0x90,0xe9,0xea,0xdb,0x78,0x14,0xa3,0x89,0x43,0xf1,0x42,0x43,0x3f +.byte 0xe7,0x67,0x32,0x3d,0x65,0xdc,0xa4,0x79,0x8f,0x81,0xa5,0xb0,0x94,0x0f,0x96,0xf5,0x82,0xcc,0x47,0xc1,0x29,0x39,0x70,0x7a,0xf3,0x49,0xf5,0x09,0x43,0x50,0x56,0xd6,0xea,0xc4,0x35,0xa5,0xa2,0x8a,0xbe,0xc0,0xe3,0xfe,0x4c,0xa2,0x83,0x09,0xab,0x72,0x8a,0x96,0x7c,0x01,0x70,0xb2,0xd5,0x62,0xb7,0x67,0x59,0x36,0xcf,0x56,0x2d,0x14 +.byte 0xc2,0x69,0x49,0x52,0x4e,0x7c,0x45,0x4b,0xef,0xcd,0x79,0xcd,0xe6,0xa6,0xd0,0xbe,0x10,0x1e,0x18,0xca,0xe7,0x8d,0x65,0xb1,0x17,0xc7,0x2c,0xc8,0x2a,0x5b,0xe8,0x08,0x11,0x15,0xea,0xa9,0x43,0x7b,0x70,0x04,0x0c,0xc8,0xca,0x67,0x18,0x18,0x12,0x16,0xc2,0xd3,0xf2,0x0a,0xc7,0x01,0xa9,0x97,0x61,0xf6,0xa7,0x44,0x9a,0xb3,0x67,0xdc +.byte 0x07,0x63,0x02,0x02,0x2e,0x58,0x80,0xa9,0x95,0xa0,0x8e,0x86,0xb6,0xf6,0x14,0x13,0x0a,0xea,0xf1,0x6d,0xd9,0x98,0x37,0x12,0xdb,0x67,0x1b,0x13,0x8e,0xd1,0xfa,0x2f,0x98,0x53,0x3c,0xd7,0x56,0x55,0x42,0x2f,0x64,0x59,0xd5,0xb7,0x6e,0xa8,0x6c,0xc2,0x40,0x11,0xb5,0xa1,0xc0,0x5c,0x45,0x87,0x91,0xb1,0x1c,0x4e,0xa9,0xf6,0x72,0x57 +.byte 0x50,0x8e,0xc5,0xfc,0x64,0x59,0x52,0x82,0xb0,0x75,0xc3,0x98,0xff,0x32,0xce,0xa4,0x39,0xb8,0xa4,0x61,0xb4,0x53,0x3f,0xc7,0x80,0x35,0x48,0xaf,0xa8,0x67,0xfe,0xa1,0x1d,0x3c,0x95,0xb5,0x63,0x1c,0x3a,0x2c,0x68,0xfa,0x98,0x8b,0xa7,0x19,0x29,0x79,0xe4,0x9b,0xff,0x8f,0x15,0x9c,0x65,0x60,0xd2,0xa9,0x4f,0xd5,0xb2,0x57,0xff,0x32 +.byte 0x4c,0x96,0x82,0x6b,0x09,0x6c,0x74,0x55,0x00,0x5c,0x68,0x68,0xd5,0x9b,0xd4,0xdf,0x3d,0x2d,0xb9,0x0b,0xf5,0x2c,0x87,0x35,0x2a,0xc0,0xc0,0xc9,0xd7,0xa1,0x76,0x30,0x82,0x46,0xd8,0x24,0x6e,0x27,0x02,0x71,0x57,0x5c,0x43,0xf2,0x54,0xd6,0xea,0xd7,0x67,0x7d,0xac,0x76,0x91,0xf1,0x26,0x6e,0xaf,0x87,0x05,0x06,0x48,0x57,0xbd,0x67 +.byte 0x1d,0xd7,0x07,0xcd,0x41,0x02,0x49,0x6c,0x8c,0xe1,0xe3,0x00,0x78,0xbe,0x28,0x84,0x16,0x44,0xb1,0x0d,0x6d,0x40,0xfe,0xab,0x7e,0xf6,0x6b,0xff,0xfa,0xe1,0xc7,0x9d,0x56,0x62,0xf1,0x68,0xba,0x76,0x34,0x8f,0x54,0x20,0x49,0xf5,0xa2,0x54,0x52,0xca,0x42,0xed,0x4f,0x9b,0xdf,0xcf,0xfb,0xf6,0xee,0x12,0x29,0x43,0x8f,0xf9,0xfd,0xf4 +.byte 0x8a,0xbf,0xae,0x50,0xf2,0x8f,0x46,0xa2,0x97,0x3b,0x2d,0xfb,0x84,0x98,0x61,0xae,0xba,0x36,0x25,0x30,0x8b,0xdc,0xd3,0x08,0x8e,0x7e,0xfa,0x91,0xac,0x4b,0x29,0x6d,0x0c,0x81,0x0f,0xc7,0xc8,0xc4,0x5c,0x48,0x68,0xa7,0x83,0xf3,0x6a,0xc8,0x0d,0x3a,0x9b,0x46,0xb9,0xe1,0x31,0xac,0x3c,0x12,0xa2,0xae,0x74,0xb8,0x91,0xed,0x63,0xba +.byte 0x40,0xb8,0x57,0x58,0x1f,0x1d,0x1a,0x2d,0x98,0x60,0xe8,0xe1,0x84,0x16,0xe5,0xf0,0x1e,0x35,0x58,0x31,0xc3,0x0c,0x49,0x6e,0x13,0x2c,0xac,0x14,0xc2,0xde,0x5f,0x62,0xe5,0x37,0x5b,0x1d,0x71,0x8b,0xc3,0x3d,0xd8,0xaf,0x3d,0x0a,0xef,0x80,0x3c,0x9a,0x4b,0x0a,0x3f,0x0e,0x8f,0x90,0x8f,0x73,0x2e,0xff,0x8e,0x8e,0x87,0xf8,0x46,0x52 +.byte 0xed,0x7d,0x76,0xf3,0xff,0xaf,0x5e,0x62,0x87,0x16,0x9c,0xa6,0x12,0x39,0x13,0xc3,0x62,0x4b,0xd2,0x21,0xa2,0x43,0xfa,0x4c,0x5d,0x75,0x61,0x64,0x5b,0x23,0xcd,0x76,0x86,0x81,0xd6,0xa6,0x25,0xe1,0xc1,0xc6,0x04,0x5e,0x65,0xfe,0x89,0x0e,0x67,0x02,0xeb,0xb9,0x26,0x88,0x81,0x97,0x1e,0x62,0x4e,0xf4,0x4e,0x0d,0xef,0xac,0xcf,0xd7 +.byte 0xc5,0x9b,0x9d,0x3a,0xa2,0x71,0xd7,0xd4,0x72,0xa6,0x66,0x90,0xe2,0xf7,0xb7,0xec,0xe4,0xca,0x9f,0xd1,0xd8,0x5a,0x65,0xff,0x39,0x65,0x78,0x47,0x1c,0x64,0xab,0x1a,0x35,0x2e,0xe2,0xf7,0x67,0xa4,0x7f,0xd5,0xea,0x04,0xee,0x4d,0xf6,0x29,0xe4,0xcd,0x1b,0xcf,0x0a,0xef,0xa1,0x14,0x90,0x0e,0xed,0x1a,0x10,0x63,0xa0,0x56,0x11,0x05 +.byte 0x57,0x94,0x3a,0x11,0xff,0xe0,0xc7,0x33,0x19,0x67,0xd7,0xd0,0xcc,0x76,0x52,0x5d,0x9e,0x10,0xe7,0xd6,0xaa,0x13,0xe8,0x8d,0xa5,0x60,0x66,0x98,0x26,0x11,0x66,0x0f,0x2d,0x4d,0xec,0x28,0x93,0x17,0x3a,0x6f,0x99,0x70,0x00,0x2b,0x66,0xb3,0x49,0x69,0x3c,0x3b,0x03,0xb8,0xc0,0x9b,0x1c,0x96,0xd9,0xd1,0xe1,0x6d,0x8f,0x45,0xce,0x22 +.byte 0xcf,0x48,0x61,0x85,0x10,0x1b,0x3f,0x2b,0x74,0x48,0x61,0x68,0x63,0xe3,0xa3,0x83,0xe2,0xcc,0xa0,0x6d,0x82,0x8b,0xe5,0x42,0xab,0xa7,0x62,0x6c,0x05,0xb4,0x7b,0x65,0xf5,0xd8,0x0b,0x7d,0x61,0xd6,0x5c,0xf0,0xc0,0x03,0x0c,0x51,0xec,0x06,0xad,0x79,0x8c,0x62,0x0c,0xf5,0x8e,0xcb,0x97,0x62,0xf9,0x3e,0x39,0x8d,0x3c,0x2e,0xd1,0xc0 +.byte 0x5f,0x98,0xea,0xb5,0x26,0x19,0xf5,0x93,0xbb,0xf8,0xd4,0xd5,0x35,0xee,0x1f,0xf8,0x71,0x81,0x0e,0xe6,0xe9,0xf3,0x2c,0x80,0xa8,0x15,0x35,0x1e,0xda,0x07,0x41,0x39,0x8a,0x19,0x1f,0x70,0x99,0xbe,0x3d,0x5c,0x1f,0xf6,0x72,0x85,0x73,0xea,0xb5,0x61,0xbb,0x77,0xaa,0xef,0xc7,0x2c,0xed,0x1e,0xa6,0xfd,0xc9,0xde,0xa9,0x82,0xba,0x19 +.byte 0x04,0x17,0xf7,0xa1,0x59,0x5c,0x7d,0x8d,0xe7,0x1c,0x89,0x7f,0xe1,0x02,0xd3,0xb0,0x46,0x6c,0xcf,0xde,0xf0,0x0b,0x00,0x43,0x8d,0xd6,0xe6,0xf7,0xc8,0x83,0x20,0x77,0x8b,0x9f,0x14,0xea,0x2b,0xb2,0xd2,0x41,0xfd,0x96,0x7c,0x0d,0x05,0xb9,0x5a,0xa0,0x83,0x50,0xde,0x0e,0xc6,0xa6,0x29,0x55,0x12,0x8e,0x2f,0x0a,0x5c,0xcd,0xae,0x92 +.byte 0x76,0x84,0xc9,0x8a,0x81,0xe5,0x3e,0xf0,0xe6,0x5b,0xe4,0x21,0xfb,0x4c,0xb6,0x0a,0x7b,0x7f,0x7e,0xab,0xdc,0x15,0x44,0xf8,0xeb,0x23,0x21,0x31,0xef,0x98,0xec,0x84,0x69,0x34,0x29,0x99,0x03,0x8a,0x12,0x8e,0x28,0xdd,0x00,0x6a,0xa3,0xe7,0x08,0x17,0x35,0x2a,0x42,0x8a,0xcb,0x4a,0x7b,0x1c,0xd2,0x74,0x4f,0x6a,0x8c,0x85,0x1c,0xd6 +.byte 0x05,0x3a,0xfd,0xdf,0x1c,0xa5,0x59,0xbb,0xdb,0xe3,0xa7,0x59,0xb1,0x67,0x3d,0xa4,0x71,0x4d,0x6c,0x99,0xe0,0xa7,0x8c,0xfa,0x96,0x1f,0x8d,0x0c,0xa7,0xc8,0xce,0xa3,0xbf,0x4d,0xc7,0xa9,0xb7,0xfd,0x04,0x58,0xcd,0xd7,0x20,0xb1,0xb9,0xf5,0x06,0x70,0x1b,0xdd,0xf4,0x1c,0xdc,0x32,0xa0,0x90,0x0d,0xb2,0x91,0x14,0x05,0xa2,0xf7,0xb7 +.byte 0xb6,0xd2,0xf1,0x30,0x75,0xcc,0x78,0x0d,0x56,0x70,0x64,0x02,0xe7,0x83,0x97,0x65,0x63,0x4b,0x64,0xff,0x8b,0x62,0xc9,0xa4,0x6e,0x96,0xbf,0xd3,0xeb,0x74,0xc5,0x1f,0xdb,0x1c,0xf3,0xca,0x54,0x7d,0x8d,0xd9,0xec,0x18,0xd8,0x99,0xd1,0xa5,0x70,0x8a,0xc5,0xdc,0xa0,0xcb,0xb7,0x52,0xe3,0xe6,0x88,0x0c,0x5a,0x42,0xde,0xe6,0xd8,0xc4 +.byte 0x39,0xe5,0x6c,0x0b,0xd4,0xa5,0x9b,0x51,0xa2,0x3d,0xc5,0xc7,0x17,0x17,0xb8,0xd8,0x09,0xad,0xeb,0x67,0x47,0xe0,0x88,0xef,0x1d,0x22,0x18,0x25,0xdc,0x32,0xb2,0xf7,0x47,0xc5,0xb3,0x0b,0x57,0x01,0x67,0xac,0xc3,0x9e,0xb0,0xa8,0xd7,0xce,0xb2,0xcd,0xea,0x3b,0x61,0xbb,0x24,0xad,0x91,0x7b,0xa2,0x9a,0xb3,0x63,0x56,0xe2,0x9d,0x69 +.byte 0x9e,0xd7,0x5f,0x5f,0x47,0x9f,0xae,0xf6,0x09,0xb1,0x9e,0x22,0x35,0xaa,0x55,0x0b,0xfc,0x70,0x96,0xfd,0x53,0x8a,0x37,0xaf,0x2d,0xa2,0xc5,0x49,0x5b,0x1e,0x32,0x47,0x9d,0xc3,0xb4,0x46,0xf3,0x54,0xdb,0x3f,0xb9,0x69,0x9e,0x8b,0xad,0x11,0xb2,0x68,0xe8,0x27,0x0d,0xca,0x33,0x1c,0x86,0xb2,0x2c,0xaa,0xc2,0x15,0xf9,0x6e,0xed,0x30 +.byte 0x71,0x08,0xeb,0x93,0x1d,0x16,0xc5,0x34,0x73,0x65,0x7a,0x19,0x2b,0xa7,0x3d,0xe6,0x88,0xb5,0x0f,0xa0,0x92,0x91,0x22,0x9d,0x01,0xf3,0xf4,0x57,0x9f,0xd9,0x23,0x1b,0xbd,0xd7,0xd5,0x11,0xc9,0x24,0xf6,0x36,0x30,0x30,0x69,0x95,0x17,0x48,0xf9,0x76,0x71,0xef,0xef,0xc0,0x00,0x9c,0x7d,0x87,0xdc,0xdc,0x1a,0x32,0x82,0x7a,0x13,0xc2 +.byte 0x9f,0x53,0xc2,0x7d,0x4d,0xbf,0xbe,0xf5,0x9d,0xc8,0x81,0x5b,0x81,0xe9,0x38,0xb6,0xa5,0x40,0xa5,0xd4,0x6f,0x0c,0xea,0xf1,0x52,0x59,0x37,0x3b,0xc2,0xb2,0x5f,0x10,0xdf,0x22,0xf7,0x77,0xe8,0x66,0xb0,0x97,0x91,0x5f,0xc2,0x18,0x8d,0x17,0x40,0xd1,0x6d,0xde,0x6e,0xf0,0x6c,0x1f,0x4e,0x9b,0x15,0x83,0x9b,0x70,0x21,0x2b,0x98,0x46 +.byte 0xbf,0xa5,0x82,0xac,0x63,0xac,0xd7,0x52,0xec,0x2c,0xf2,0xe4,0xe0,0x2a,0xbf,0x7e,0xa2,0xd2,0x9d,0x0d,0xf2,0x9b,0x79,0x5f,0x22,0xb0,0x6d,0x22,0x2e,0xed,0xe2,0x4f,0x73,0xc5,0x89,0xcc,0x4a,0xaa,0x9a,0x7e,0xab,0x95,0x25,0xa7,0x9d,0xf4,0xc2,0xe8,0x42,0x6e,0xd3,0xf9,0x25,0x54,0xb9,0x1f,0xa9,0x16,0x9c,0x22,0x7a,0xf0,0xa6,0xac +.byte 0x8b,0x9d,0xe6,0xe3,0x93,0x4e,0x65,0x3a,0x39,0x3e,0xf5,0x41,0x38,0x02,0xb7,0x37,0xd4,0xdc,0xea,0xc5,0x53,0x0e,0x52,0x85,0x96,0xc0,0xa7,0x21,0xbf,0xe7,0xca,0x12,0x1c,0x59,0x33,0xe4,0xd5,0x70,0x6b,0x25,0x54,0x24,0x58,0x48,0x1b,0x65,0x6e,0x7e,0xe6,0x84,0x39,0x38,0xbc,0xdf,0x96,0xbc,0x39,0xdf,0x8f,0x36,0x9e,0x3a,0xda,0x02 +.byte 0x86,0xe2,0x9f,0xb7,0x3a,0xd0,0xdb,0xc2,0x5d,0xb0,0xde,0x31,0x73,0x43,0xe5,0x4b,0x6a,0xa1,0x6d,0xaa,0xca,0x34,0xfa,0xa9,0xaf,0xec,0x05,0x2a,0xdb,0x82,0xa1,0xdc,0xdc,0x3d,0xb5,0x92,0x42,0x28,0xdc,0x93,0xec,0xab,0x9b,0x75,0xae,0x7c,0xbf,0x9b,0x25,0x01,0xb1,0xc8,0x3b,0x47,0xb6,0xfd,0x11,0x6f,0x4b,0xaa,0x6f,0xdf,0x1f,0x15 +.byte 0xc2,0xf3,0x87,0x4a,0xaf,0xf7,0x41,0x64,0x5a,0x19,0xa0,0xc4,0x4f,0x58,0xe8,0x19,0xe0,0x84,0x44,0xc7,0x65,0x0c,0xf1,0xff,0xcb,0x73,0xb2,0xac,0x25,0x28,0xe1,0xd4,0x03,0x16,0x3c,0x1c,0x24,0x3a,0xfc,0x2b,0x7e,0xcb,0xa3,0xba,0xb7,0x78,0x87,0xbe,0x95,0x06,0x27,0xb8,0x16,0x72,0xe4,0x24,0xa6,0x5d,0xe7,0x5e,0x93,0xa9,0x96,0xfd +.byte 0x01,0x1d,0xb8,0x7c,0x85,0x3c,0xe3,0xc9,0x56,0x68,0xcd,0xd9,0x79,0x97,0x50,0x39,0xfe,0x96,0x93,0x50,0xae,0xde,0xcd,0x8d,0xa0,0x38,0x31,0xba,0xca,0x21,0xff,0x19,0xea,0x44,0x95,0x4d,0xba,0xae,0xe2,0x62,0xd2,0x82,0x60,0x0c,0xb9,0x10,0x40,0x9a,0xaf,0x9b,0x17,0xcd,0xf3,0x26,0xec,0x38,0x13,0x18,0xd3,0xf2,0xd2,0x11,0xa6,0xc3 +.byte 0x3c,0x3b,0xe8,0xa0,0x49,0xba,0x4e,0x07,0xec,0x44,0x75,0x1c,0xc9,0x2f,0x68,0x64,0x02,0x1d,0x14,0x35,0x80,0xd8,0xa8,0x53,0xde,0x44,0x65,0x72,0x37,0x28,0x61,0x5f,0xa1,0x58,0xea,0x17,0xb3,0x89,0x25,0xf7,0xcb,0x87,0xe6,0x43,0xc5,0xc3,0xf3,0xd1,0xf5,0x1f,0x18,0xe9,0xd1,0x05,0xd9,0x85,0x38,0xf0,0x5e,0x26,0x35,0xf2,0x72,0x92 +.byte 0x34,0x2f,0xea,0xdd,0x7b,0x64,0xac,0x1d,0x78,0x41,0x56,0x83,0x7d,0x83,0x83,0x59,0xbe,0x9f,0x81,0x90,0x00,0x1f,0x04,0xd8,0xd8,0x8e,0xd9,0xeb,0x12,0x16,0x96,0x81,0x61,0x96,0xe8,0x7b,0x36,0x7b,0x26,0x9b,0x43,0x1e,0x0e,0xc2,0x59,0xdf,0x8f,0xb4,0x91,0x74,0x2e,0x1e,0x6d,0x20,0x70,0xe7,0x3c,0x39,0xe3,0xa8,0x62,0x66,0x32,0x63 +.byte 0x7d,0x89,0xb6,0xad,0x69,0x38,0x2c,0x21,0xe5,0x02,0xcc,0x93,0x8a,0x65,0x71,0x65,0x02,0x5c,0xeb,0xc9,0x70,0xf3,0x81,0xce,0x65,0x37,0x22,0xb7,0x47,0x3c,0xd6,0x3d,0x29,0x65,0x29,0xba,0xf9,0xae,0xd9,0x1f,0xd7,0x38,0x88,0x95,0xa9,0x66,0xa8,0x77,0x75,0x4a,0xf9,0x2e,0xd9,0x63,0x75,0x80,0x90,0x82,0x39,0x8b,0x21,0x58,0xf4,0x2e +.byte 0x2d,0x1f,0x7f,0xcb,0x33,0xdb,0x9b,0x9b,0x31,0x21,0x4e,0x6e,0xdb,0x0f,0x1f,0x69,0x22,0x97,0x69,0xd7,0x7f,0x2e,0xd7,0xce,0x6c,0xe4,0xc0,0xe7,0x27,0x82,0xe6,0x8a,0xf8,0xae,0x46,0x2d,0x5a,0x45,0x82,0xce,0xb6,0x49,0x84,0x15,0x4a,0x54,0xa6,0x76,0xf3,0x29,0x28,0xc0,0x05,0x82,0xae,0x7d,0x85,0x41,0xb0,0x87,0x67,0x44,0x37,0x46 +.byte 0x3e,0x47,0xbc,0x00,0x7c,0x05,0xd3,0xdc,0x9a,0x31,0x49,0xf8,0x48,0x99,0x57,0x4a,0x2b,0xe7,0xcf,0xb2,0xa7,0xf0,0xcf,0xc7,0xf5,0xfd,0x73,0x59,0xf1,0xe4,0x86,0xb5,0x5d,0xce,0x6d,0xbf,0xc6,0xe5,0xa9,0xca,0x75,0xe9,0x69,0xe6,0x09,0xab,0x66,0x17,0x09,0xe9,0xbc,0x14,0xd8,0x6f,0xe9,0xc2,0x87,0x39,0x2f,0x87,0x1e,0xb8,0x16,0x08 +.byte 0x10,0xee,0x1c,0x2f,0x47,0x7d,0xa3,0x5b,0x1f,0x1f,0x5d,0x95,0xd0,0xa4,0xbb,0x08,0xc2,0x47,0xab,0x46,0x3c,0xbb,0xbe,0x3a,0x64,0x82,0x40,0x08,0x75,0x03,0x02,0x6e,0x6a,0xab,0x6b,0xd4,0x90,0xa7,0x28,0x7a,0xb4,0x8b,0x1f,0x6b,0xcc,0x16,0x30,0x16,0xf5,0xc6,0xd8,0x4a,0xed,0xc9,0xc7,0xac,0x0f,0x75,0x1b,0x13,0xe3,0x45,0x6d,0x22 +.byte 0x7e,0x3d,0x59,0x55,0x87,0x8d,0x04,0xee,0x85,0xac,0x98,0x0c,0x52,0x5b,0xe6,0x92,0x04,0x31,0xdf,0x7c,0x44,0x4d,0x06,0xbe,0xb2,0x5a,0x95,0xef,0x29,0x75,0x9b,0xb2,0xe7,0xb8,0x83,0x18,0x82,0x23,0x4e,0x66,0xe5,0xdd,0x47,0xa1,0x6b,0x33,0x4e,0x9c,0x13,0x0e,0x0a,0x8a,0x5c,0xba,0x7b,0x2f,0x6c,0x72,0x78,0x86,0xd2,0xf8,0xbd,0x1b +.byte 0x4b,0x9e,0xe0,0x99,0x46,0x7f,0x24,0x0f,0x1b,0xda,0x85,0x87,0xe9,0xda,0x96,0x25,0xc6,0x81,0x77,0x8b,0x56,0xae,0x7a,0x9c,0x47,0x34,0xe1,0xac,0xf2,0xba,0x52,0x95,0xf8,0x56,0x26,0x66,0xf0,0x53,0xcc,0xc4,0x6f,0x46,0x94,0x10,0x22,0x69,0xb1,0x93,0x7b,0x51,0xb7,0xb8,0xdd,0x42,0x67,0x51,0x6d,0x9c,0xb2,0xbd,0xdb,0xdd,0x19,0xa2 +.byte 0x25,0x13,0xfe,0x42,0xca,0x36,0xeb,0xce,0x15,0x41,0xe7,0x35,0xce,0xa8,0x45,0x56,0x58,0x9f,0x46,0xcf,0x11,0xe7,0xcc,0x40,0x54,0xe4,0x85,0x0d,0x73,0x36,0x7e,0xae,0x38,0x8c,0x56,0xab,0xf0,0x5f,0x5c,0xff,0x14,0x9b,0x46,0x1b,0x35,0xbd,0x03,0x0e,0x2f,0x9e,0xde,0xd8,0x82,0xfe,0xa0,0x09,0xb4,0xb4,0xbd,0x58,0xc0,0xe2,0x01,0xb1 +.byte 0xca,0x5c,0x3d,0xc3,0x18,0x5e,0xc1,0xee,0x61,0x60,0x00,0xca,0x1e,0xf3,0x71,0xd8,0x15,0x37,0xf0,0x2e,0x13,0xa0,0xf7,0xac,0x73,0x4b,0xfb,0x6a,0x27,0x6b,0xde,0x69,0x3d,0x19,0x36,0x4b,0x63,0x55,0xae,0xd1,0x2b,0x66,0x69,0x0d,0x64,0xa7,0x86,0xfd,0x3a,0xb8,0xe6,0x87,0xaa,0x32,0x5f,0xbc,0xa7,0x67,0xde,0x7a,0xe0,0xdd,0xff,0x57 +.byte 0x2c,0xc9,0x25,0x92,0x03,0x91,0xa8,0x0e,0x39,0xe4,0x9a,0xdf,0x21,0x29,0xc7,0xbc,0x93,0x01,0x2a,0x02,0xd8,0xaf,0xbc,0x20,0x57,0xc7,0x37,0x77,0xa7,0xad,0x5e,0x15,0x20,0xcf,0x4a,0x3c,0x22,0x1b,0x92,0xa9,0x05,0x91,0x70,0xb3,0x88,0x4e,0x97,0x58,0xf7,0x33,0x1a,0x05,0x33,0x57,0xdc,0xbb,0x2a,0xba,0xd0,0x22,0xac,0x40,0xbe,0x60 +.byte 0xa2,0x89,0xe6,0x6c,0xf3,0x5d,0xef,0x58,0xb4,0x7c,0x4a,0x28,0xb8,0x16,0xd2,0xe0,0x49,0xf5,0xe8,0xaf,0x84,0x39,0xae,0x1e,0xa2,0x34,0x67,0x42,0x26,0x31,0x93,0x87,0x7a,0xd5,0xde,0x79,0xdb,0x4c,0x7e,0xcf,0x1f,0xef,0x9a,0x4c,0xb9,0x70,0xe2,0x72,0x9b,0xcd,0x30,0xe5,0xf1,0x84,0x44,0x5a,0xff,0x36,0xa2,0x37,0xe7,0x49,0x78,0x63 +.byte 0xbe,0xe0,0x90,0xdf,0xef,0x9e,0xf3,0x55,0x9e,0x8a,0x51,0xe8,0xa3,0x32,0x2d,0xed,0xc8,0x99,0xf6,0x92,0xf9,0x62,0x74,0xa7,0x8d,0xcf,0xa5,0x09,0xb3,0x43,0xb9,0x18,0x70,0x59,0x4f,0xd2,0x7f,0x7e,0xce,0x1e,0x7d,0xe8,0xa9,0xb7,0x29,0x0f,0x86,0x8a,0xac,0x22,0x41,0x98,0xb2,0xc3,0x48,0x3b,0x60,0xcb,0x7b,0x1d,0xc3,0x5e,0x19,0x5b +.byte 0x31,0x57,0x12,0x09,0x41,0x54,0xf8,0x01,0x70,0x02,0x03,0x8a,0x6e,0x8e,0x5b,0x23,0xf3,0xd4,0x13,0xbf,0x51,0xba,0xf9,0x2d,0x6c,0xb9,0xb3,0x90,0xd0,0xa3,0x76,0xfb,0xef,0x85,0x17,0x8b,0x2c,0x05,0xa3,0x06,0x0a,0xaa,0xdd,0xbf,0xd4,0xcc,0xe4,0x96,0x19,0x7f,0x51,0xf6,0x7e,0xa1,0x2c,0x14,0x1c,0x21,0x99,0x28,0x3a,0x0e,0x36,0x1b +.byte 0xf1,0xd7,0x3e,0x29,0x94,0xa6,0x03,0xf7,0xe5,0x6f,0x1b,0x56,0xc8,0xfb,0x2d,0x4f,0x12,0x2b,0xc7,0x3a,0xec,0x5e,0xc8,0x88,0x1b,0xd8,0x65,0x21,0x04,0x0e,0xe2,0x95,0x6d,0x62,0xea,0xeb,0xee,0xbe,0x47,0x0a,0x90,0x26,0xe3,0x85,0xd7,0x1d,0xb5,0xd5,0x56,0x8b,0xc0,0x2f,0x7f,0x01,0xc8,0xac,0x90,0xc3,0x2d,0x10,0xf2,0x11,0x30,0x0c +.byte 0xa9,0x4d,0x13,0xde,0x65,0x6d,0x34,0x68,0x5d,0xad,0x3f,0x7a,0x56,0x3a,0x1f,0xb9,0xd6,0x7b,0x8f,0xe8,0x42,0x2a,0x16,0xb6,0x3f,0xf2,0x4f,0x14,0x8e,0x8e,0x29,0x88,0x68,0x1b,0x10,0x80,0x80,0x47,0x36,0xaa,0x82,0xf5,0xa8,0x97,0xc4,0xcb,0xc2,0xef,0xaa,0x9f,0xdc,0x96,0x4f,0x1f,0xaf,0x39,0x71,0x55,0x8f,0x3c,0xbf,0x26,0x91,0x46 +.byte 0x38,0x59,0xa7,0xd1,0xb5,0x87,0xd6,0x81,0x71,0x17,0x83,0x05,0x40,0x9c,0xf3,0x33,0x4b,0x09,0x06,0xb1,0x69,0xfb,0x43,0x1f,0xef,0x9a,0xfe,0xc3,0x4e,0x4e,0x25,0xe1,0x3a,0xfb,0xf9,0xc9,0x97,0xe2,0x1c,0xa1,0x9a,0x06,0x6e,0xbb,0x16,0x4a,0x9f,0xf4,0x87,0x31,0x38,0x78,0xae,0x77,0x4c,0x42,0x28,0xc4,0x63,0xc0,0x49,0x37,0x4f,0xf9 +.byte 0xeb,0x31,0x0d,0x3e,0x0c,0x8a,0xb7,0x17,0xa7,0x90,0x26,0xc2,0xea,0xa5,0x9d,0xe4,0x4d,0xc6,0x3a,0x33,0x2d,0x47,0x42,0x8c,0xeb,0x50,0xea,0xfe,0x74,0x43,0x06,0xcd,0xa5,0xb1,0x49,0xf0,0x98,0x91,0x25,0xf4,0x8d,0x06,0xd1,0xeb,0x56,0x2c,0xf9,0xc4,0x84,0x02,0x9e,0xf2,0x3a,0xfe,0xb4,0x39,0xce,0xee,0x85,0xb6,0x64,0x6c,0xbc,0x1f +.byte 0xe6,0x86,0x00,0xc3,0xa9,0xb4,0x53,0xdf,0x2d,0x7c,0xc6,0xde,0x2e,0x79,0x25,0x5c,0xbb,0xe5,0xbe,0x33,0xe9,0x58,0x49,0x35,0xbe,0xae,0xbc,0x06,0xdc,0x48,0x9d,0xc3,0x08,0x6f,0xe8,0xb8,0x48,0x67,0xea,0x1c,0x05,0xb4,0xf7,0xe3,0xcc,0xc1,0xb3,0xa8,0x61,0xcb,0xa8,0xf6,0x12,0x52,0x68,0x06,0x36,0x2b,0x15,0x43,0xc9,0x98,0xfe,0xe5 +.byte 0x43,0x11,0x0d,0xc3,0x37,0x38,0x7a,0xcb,0x98,0x14,0xc1,0xaf,0x29,0x36,0x35,0x63,0x74,0x98,0xcf,0x0f,0x44,0xe4,0x6e,0xf7,0x3f,0x6e,0x15,0xe8,0xe9,0x93,0x7b,0x96,0x1b,0x84,0xe7,0x8b,0x83,0x30,0xa1,0xdc,0xc3,0xb8,0x18,0x2f,0xc5,0x34,0xd1,0xa5,0xb9,0xee,0x4a,0x04,0xbf,0x26,0x63,0x29,0xba,0x90,0xb5,0x7c,0x83,0x2b,0x1f,0xe8 +.byte 0x5c,0x9f,0x23,0x40,0x7f,0x9c,0x2f,0x76,0x96,0xd6,0xd5,0x13,0xda,0x5c,0x81,0xa4,0x60,0x60,0xbd,0x5e,0xb3,0xd2,0x2c,0xaa,0x48,0x04,0x74,0x31,0x5d,0xbd,0x46,0xd8,0x8d,0x3f,0x62,0x2d,0x1e,0x17,0x97,0x08,0x71,0x06,0x1b,0x96,0x1b,0xd5,0x80,0xa6,0x41,0x06,0x10,0x6e,0x36,0xd4,0xfb,0x36,0x6d,0x96,0xb8,0x86,0x22,0x34,0xda,0x7e +.byte 0x6c,0x5f,0x3b,0x95,0x35,0x1b,0x42,0x3c,0xf2,0x9d,0xe3,0xe9,0x3f,0x44,0xd5,0x4c,0x60,0x55,0xae,0xbe,0x4f,0xf2,0xb3,0x84,0xa1,0x79,0xdf,0x86,0xf0,0x8f,0xad,0xa5,0xa3,0x4a,0xea,0x5d,0x68,0x34,0x17,0x4c,0xb7,0xd8,0x6f,0x67,0x22,0x85,0xe2,0x16,0xcf,0xba,0xee,0x92,0xeb,0x95,0x8e,0x67,0xb1,0xf0,0xbb,0xb0,0x34,0x2f,0x58,0x49 +.byte 0x56,0x3e,0x81,0x31,0xb6,0xc3,0x2c,0xee,0x2b,0x85,0x72,0xbc,0xe9,0x20,0xaa,0x4e,0x34,0xb9,0x8b,0x32,0x2f,0x9e,0xd7,0x98,0x63,0x9d,0xfd,0x3a,0xe9,0x30,0x49,0x23,0x4a,0xb4,0xcb,0xc5,0xe5,0x78,0xcd,0x22,0x90,0xce,0x9f,0x35,0x13,0xda,0x8f,0x14,0xdb,0x36,0x0f,0x66,0x87,0x62,0x50,0xde,0x52,0x15,0x10,0x67,0x8a,0x5c,0xdb,0x76 +.byte 0x51,0x7f,0x72,0x9b,0x8e,0x91,0x39,0xc8,0x3c,0x34,0x0f,0x3d,0x92,0x07,0xb8,0xef,0x2a,0x8b,0x59,0xbd,0x82,0xc1,0x5c,0x95,0x93,0x0d,0x3d,0x9b,0x51,0x53,0x38,0x6b,0xd0,0xe3,0x5b,0xbb,0xe5,0x6c,0xc0,0xb5,0x71,0xa8,0xd8,0x7d,0x5d,0xbd,0xfc,0x69,0xcf,0xcc,0xa1,0xcd,0x83,0x9d,0x8f,0x46,0x47,0xe7,0x36,0x19,0x9f,0x4d,0xda,0x9c +.byte 0xcb,0x2a,0x47,0x58,0x93,0xbb,0x64,0xa3,0x89,0x53,0xbf,0xc7,0xc2,0xe2,0x65,0x0f,0x4f,0x17,0xc6,0x4c,0x15,0xfe,0x4b,0x95,0xb2,0x79,0x4a,0xb8,0xf6,0xae,0xcc,0xba,0xc3,0x5d,0x18,0xb2,0x8e,0xd8,0x6b,0x43,0x1b,0x2f,0xe1,0x36,0xb2,0xa5,0x22,0xa0,0xc7,0xc0,0x26,0x8e,0x48,0x77,0x0c,0x14,0xdd,0xdc,0xde,0x71,0x98,0xce,0xdd,0x61 +.byte 0x85,0xd9,0x23,0x42,0x7f,0x85,0xc8,0x06,0x81,0x3e,0xa2,0x0f,0x1e,0x3e,0xcf,0x33,0xef,0x43,0x6a,0xc7,0xee,0x3f,0x91,0x68,0x32,0x89,0xd9,0xed,0xdf,0x45,0x33,0x10,0xbb,0xd5,0xef,0x1d,0x3c,0x1e,0x26,0x21,0x4d,0x1a,0x06,0x98,0x60,0x71,0x7f,0xce,0x45,0x4e,0xe3,0x3f,0xfa,0xff,0xcd,0xe2,0x92,0x82,0x2e,0x83,0x69,0x9c,0xc6,0x5c +.byte 0x6e,0xb6,0xec,0x28,0xdc,0x7b,0xdb,0xf3,0x02,0x3a,0xf7,0xad,0x9b,0x7a,0x73,0xb2,0x07,0x70,0x76,0x9d,0xa2,0x11,0xcf,0x89,0xea,0xaf,0x6a,0xd2,0x15,0xeb,0x5a,0x99,0x1a,0x17,0x1d,0xce,0xc0,0x7f,0x50,0x26,0x84,0x07,0xd7,0x7e,0x33,0x27,0x74,0x84,0x18,0x32,0x86,0x32,0x34,0x28,0xe8,0x45,0x21,0xb7,0x26,0x3b,0x11,0xbb,0x9a,0x8b +.byte 0x46,0x8e,0x27,0xf8,0x62,0xb5,0x98,0x6e,0x03,0xee,0x9e,0xcb,0xbc,0x74,0xbe,0x63,0x7a,0x86,0xe5,0x75,0xeb,0x7f,0x14,0xa6,0x96,0x76,0x5a,0x46,0xa9,0xda,0xf1,0x4e,0x0e,0x90,0x59,0x56,0x4a,0x48,0x2d,0x91,0xbe,0x78,0x5b,0xfb,0xf7,0xea,0xab,0x1c,0xc0,0x0c,0x5d,0xba,0xb4,0x7b,0xc7,0x21,0xb1,0xc9,0xa3,0x20,0xe6,0xae,0xee,0x0e +.byte 0xf0,0x3b,0x44,0xd6,0xaa,0x57,0x88,0x1f,0x76,0xc8,0x43,0x07,0x91,0x71,0xa5,0xcc,0x04,0x38,0x01,0x13,0xa6,0xea,0x18,0x48,0x8f,0x09,0x8d,0x37,0x8b,0x6f,0x35,0x36,0x51,0xc6,0x30,0xca,0x9e,0xe2,0xaf,0x0c,0x26,0x14,0xe3,0xbf,0xea,0x0e,0x14,0x88,0x97,0xcc,0xf6,0xc1,0x8f,0xad,0xef,0x2d,0xc1,0x0f,0xad,0x45,0x12,0x7a,0xe6,0x37 +.byte 0x97,0xcb,0x34,0x83,0xd8,0xef,0x34,0x2a,0xce,0xd0,0x21,0x8a,0x7d,0x87,0x7a,0x66,0xf7,0x1c,0xdf,0xa0,0x3f,0xa0,0xf6,0xb3,0x24,0xee,0x6e,0x21,0xe9,0xc3,0x73,0xe4,0xd9,0xc6,0xf6,0xf6,0xac,0x25,0xb7,0xb5,0x64,0x7f,0xcc,0x88,0x3e,0x98,0xe1,0xef,0xa9,0xd2,0x03,0x10,0x4b,0xa3,0xbc,0x3c,0x24,0xfc,0x41,0x36,0x30,0x2d,0xca,0x17 +.byte 0x35,0xd6,0x17,0xa2,0x2b,0x48,0xed,0xd3,0xd7,0x18,0x4f,0x45,0xe9,0x59,0x03,0x35,0xa0,0x80,0x75,0x17,0x48,0xd5,0xea,0x07,0x7a,0x6c,0x3f,0x7a,0x2c,0x02,0x0a,0x7f,0xb5,0x17,0xea,0xf4,0xf6,0xb5,0xf4,0x81,0xba,0x69,0x44,0x81,0x6b,0xff,0xb2,0x43,0xae,0x3d,0x37,0x81,0x91,0x3f,0x6a,0x70,0x35,0x2d,0x06,0x9d,0xa8,0xb5,0xb8,0xc7 +.byte 0x19,0x3a,0x5f,0x59,0x79,0x0b,0x62,0x23,0xa4,0x5b,0x46,0x7b,0x17,0x82,0x19,0x87,0xe8,0xdf,0x09,0xb7,0x50,0x7e,0x40,0xe3,0x71,0x2d,0x09,0xde,0x69,0x2e,0x6c,0x35,0x5c,0x44,0xae,0xb7,0x05,0xb8,0x7e,0xb4,0xe4,0x34,0x05,0x1f,0xd2,0x1f,0xe5,0x79,0x2a,0x15,0xf8,0x8f,0x02,0xc7,0xc8,0x1e,0xe6,0x12,0x83,0x08,0x9c,0x7a,0x2f,0xc6 +.byte 0xc9,0x15,0x0f,0x0f,0x0f,0xa9,0x53,0x16,0x19,0x5b,0x74,0x58,0x6c,0xac,0x21,0x72,0x7f,0xa1,0xae,0xbc,0x34,0x76,0xa6,0x9b,0xbe,0x0f,0x13,0x55,0x50,0x5a,0x8b,0x9e,0xb3,0xf3,0x9e,0x8b,0x61,0xbe,0xb4,0x09,0x71,0x61,0xf0,0xd6,0xaa,0x8c,0x0d,0x0c,0x66,0x31,0x88,0xe3,0x71,0x6a,0xb5,0xaa,0xc0,0x9b,0xce,0x0d,0x79,0x90,0xc1,0x0a +.byte 0xf9,0xfe,0x4d,0x49,0xd0,0x5a,0x63,0xf1,0xfc,0x47,0x71,0x9e,0xbb,0xd1,0x2c,0xef,0xfe,0x90,0x28,0x75,0x82,0xf6,0xa5,0x95,0xea,0x65,0xfa,0xe8,0x04,0xcd,0xb4,0xe1,0x0d,0xb2,0xac,0xd5,0x12,0xf5,0x17,0xbb,0x3b,0x2e,0x52,0x9e,0x7b,0xe7,0x8e,0x86,0x03,0xce,0x77,0x01,0xf0,0x4f,0xb5,0xf7,0xef,0x8b,0x37,0x5e,0x97,0x80,0xbb,0x2b +.byte 0xcf,0x9a,0x63,0x18,0xc5,0x0c,0xfb,0x3c,0x91,0x9c,0x37,0x90,0x76,0x71,0x62,0xbc,0x80,0x40,0x1a,0x74,0xb8,0x1b,0x61,0xb1,0x89,0x4d,0xf7,0x8d,0xd4,0x46,0xef,0x1f,0x3b,0xac,0xe8,0x41,0x62,0x8e,0xea,0x2b,0x56,0x22,0x25,0x37,0x70,0x53,0xcd,0x8f,0x57,0xfa,0xad,0x00,0xc5,0x0c,0x9e,0x57,0xde,0x50,0x07,0x8d,0x80,0xbf,0x22,0x5d +.byte 0x4a,0xbd,0x6a,0xcb,0xfc,0x6f,0xd1,0x56,0x8f,0xd5,0x34,0x8a,0xe6,0xe9,0xa0,0x00,0x06,0x12,0xd8,0xb1,0x49,0x0a,0xbb,0x87,0xe5,0xca,0x75,0x11,0x4c,0x85,0x60,0x77,0xc0,0x90,0x1c,0x14,0x38,0x38,0x3e,0x4f,0xff,0xbf,0xfc,0xa1,0xa1,0xe7,0xb0,0x5d,0xd8,0x1f,0x33,0x07,0x5f,0x04,0x4f,0xc7,0x93,0xc6,0xcc,0xe3,0x01,0xd0,0x43,0xe1 +.byte 0xd9,0x00,0xc5,0x9f,0x79,0xab,0xfc,0xe9,0x55,0x51,0x03,0x0c,0xe1,0x73,0xd6,0x09,0xe3,0xb9,0x76,0x72,0x77,0x4c,0x1b,0x7c,0x57,0x1e,0x7f,0x5f,0x02,0x83,0xa3,0xc6,0xde,0x23,0x85,0x76,0x1a,0xbf,0x48,0xc8,0x02,0xdb,0x31,0x30,0x95,0x85,0x68,0x8a,0xf6,0xe9,0x48,0x7f,0xc9,0x26,0xab,0x68,0x36,0x9f,0x1c,0xf0,0x90,0xbc,0x4a,0x68 +.byte 0x94,0xf8,0x7f,0xae,0xa9,0x3b,0x5b,0x63,0x9a,0xcd,0xe3,0xf0,0xac,0x9f,0x6f,0x78,0xa0,0x67,0x58,0xd8,0x2c,0x71,0x8a,0x14,0x31,0x07,0x95,0x0c,0x38,0xa4,0x53,0x33,0x60,0x23,0x21,0x87,0x6b,0x4f,0xf9,0xa8,0xb8,0xfc,0x8e,0xf1,0x3a,0x03,0x0b,0x03,0x02,0x33,0xbc,0x6a,0xb9,0x8e,0x41,0xc8,0x38,0xd8,0x83,0x30,0x6a,0x61,0x5c,0xcf +.byte 0x49,0xdd,0xd7,0xda,0x2c,0xaf,0xc4,0x68,0xad,0x07,0x9c,0xd4,0xaf,0x94,0x64,0xcf,0xe1,0x9b,0x37,0x50,0x65,0x03,0x20,0x3c,0x34,0x43,0xe9,0xb0,0x9b,0xba,0xb1,0x9a,0x3e,0x10,0x99,0x8f,0x93,0xb7,0x3d,0xac,0xbd,0xab,0xa8,0xfa,0x74,0x90,0xe1,0x38,0xe4,0xf3,0x47,0xfc,0xad,0x8b,0xb4,0x98,0xe4,0x65,0xe9,0xd9,0x8a,0x21,0x81,0x4f +.byte 0x0c,0xd7,0xb1,0x84,0xb9,0x69,0x68,0x64,0xa3,0x1f,0x25,0x84,0x5f,0xf7,0x3f,0xca,0x52,0xff,0xda,0xc9,0x3d,0x5e,0x8b,0x57,0xd3,0x9a,0x1d,0xb7,0xae,0x90,0xa4,0xc3,0x78,0x68,0xfd,0x80,0x3f,0xfd,0x5c,0x09,0x83,0x5d,0xc2,0x48,0xd8,0x84,0xeb,0x8a,0xfe,0xbe,0x30,0x12,0x79,0x54,0x5f,0x7f,0x6e,0x4b,0x8a,0x1e,0xcb,0xcd,0xed,0xb6 +.byte 0xe9,0x6d,0x8a,0x1f,0xdc,0xb1,0x46,0xab,0xdc,0x0d,0xbf,0xda,0xd9,0x39,0x3b,0xd2,0x81,0x00,0x83,0x77,0x32,0xf7,0xdf,0x0e,0x31,0x5d,0x1d,0x6c,0xa7,0x4e,0x54,0xa8,0xac,0x81,0x8c,0xb6,0xa5,0x89,0x02,0xd7,0x2e,0xfd,0x26,0xa3,0x9e,0xcf,0xdb,0x1f,0x5a,0xf3,0x54,0xac,0xe5,0xd0,0x1f,0x9b,0xa7,0xab,0x28,0xcc,0x66,0xd3,0xbc,0x4c +.byte 0x54,0x1a,0x54,0x73,0x78,0xde,0x08,0xd5,0xa5,0x08,0xdc,0x00,0x09,0xc5,0x37,0x61,0x1a,0x98,0x12,0x84,0x2d,0xff,0xc3,0x25,0x62,0x93,0x83,0x05,0x66,0x3d,0xfb,0x1d,0x54,0x08,0x8a,0x50,0x03,0xc4,0xc4,0x6e,0xfa,0x16,0x83,0xbb,0x27,0xf1,0xb7,0x31,0x92,0x64,0x76,0xbc,0xf0,0x44,0x62,0xe9,0x5e,0x15,0x94,0xdc,0xe9,0xf3,0xf8,0x20 +.byte 0x93,0x4d,0x11,0xa2,0xc8,0xde,0x83,0xe6,0x75,0x63,0xfe,0x13,0x75,0x0f,0x79,0xd1,0x3d,0x75,0xb7,0x43,0x62,0x57,0x8d,0x96,0x9c,0xa3,0xc4,0xb2,0x84,0x6a,0x14,0x6e,0x17,0x32,0x09,0x76,0x95,0xbb,0xd6,0xc1,0x2e,0xdc,0x8c,0x73,0xd7,0xad,0x5a,0x41,0x8b,0xb3,0x7e,0x8d,0x90,0xec,0xf5,0xa0,0x46,0x90,0x4c,0x52,0xec,0x97,0xc6,0x98 +.byte 0x7d,0x19,0x77,0xa0,0x99,0x85,0x11,0x26,0x77,0x26,0xf9,0xac,0xe3,0x81,0xcf,0x7d,0x22,0xc8,0x00,0x3d,0x5b,0xee,0xa5,0xf8,0x6d,0xfe,0x47,0xe4,0xef,0x60,0xcc,0xd0,0x33,0xf7,0x5b,0xed,0xbd,0x82,0xc9,0xa8,0x41,0xb8,0x47,0x34,0x9f,0x62,0xb2,0x67,0x62,0xb0,0x3a,0x27,0x95,0xe1,0x22,0x76,0x98,0x0f,0x35,0xaf,0xfc,0x4d,0xc7,0x92 +.byte 0x92,0x7e,0xaf,0x3b,0x3a,0x36,0x5e,0x5c,0xbf,0x43,0x02,0x66,0x5a,0x30,0x78,0x82,0x52,0x20,0x98,0xd6,0xa1,0xe9,0x9a,0x61,0x54,0x0b,0x74,0x85,0xb5,0x99,0x69,0x9f,0x9b,0x3b,0x2f,0x49,0xec,0xb3,0x18,0x0c,0x4a,0x53,0x20,0xd7,0x80,0x7b,0xd4,0x20,0x21,0x32,0x89,0x08,0x81,0x50,0x2b,0x16,0x8d,0xbb,0xe6,0xbb,0xc7,0x74,0x80,0x67 +.byte 0x47,0xf1,0x06,0x68,0x02,0x37,0x31,0x00,0x50,0x8b,0xe2,0x44,0x85,0x2e,0x39,0x54,0xda,0x26,0x7b,0xe1,0xb0,0x23,0xd7,0x0c,0x3c,0x3b,0x81,0x9b,0xa6,0xbe,0x24,0xfd,0x09,0x73,0xbe,0xc3,0x2f,0xa0,0x7b,0x85,0x5b,0x1b,0x55,0x4e,0x9e,0x38,0x80,0x61,0xd7,0xe8,0x9b,0xec,0x88,0x00,0x6a,0x64,0x1b,0xd5,0x65,0x20,0x2a,0x62,0x64,0xbc +.byte 0x21,0xca,0xce,0xc3,0xeb,0x2d,0x2b,0x5c,0x4d,0xb8,0x7c,0xb5,0xbe,0x98,0x0d,0x5b,0x88,0x23,0x60,0xff,0xbe,0x0a,0xb6,0xdd,0xdf,0x28,0xd5,0x2c,0xe5,0x9d,0xb5,0x29,0xea,0x6c,0x3a,0xf4,0x78,0x91,0xa3,0xb2,0xab,0x12,0xf9,0x90,0x96,0xc9,0xa4,0xfc,0x4d,0x28,0x2b,0x0c,0x28,0x8b,0xb7,0x8b,0x36,0xd6,0x80,0xbf,0x07,0x09,0xf9,0x62 +.byte 0x32,0xc0,0x50,0x60,0xd9,0x73,0xe3,0xbe,0xfa,0xa6,0x78,0x48,0x47,0xd7,0xb5,0x39,0xd8,0x04,0x6d,0x79,0x98,0x2e,0xd6,0x3a,0xe5,0xc9,0x01,0xd0,0x00,0x2e,0xd2,0x8b,0xd7,0x1f,0xf1,0xba,0xd4,0x0e,0x9f,0x9d,0xab,0xbf,0x2c,0xe1,0x75,0xf6,0x9c,0xc0,0xae,0x73,0x2b,0x58,0xcb,0x6d,0x46,0x6d,0x11,0xb7,0xce,0xc7,0xef,0x34,0x2c,0x11 +.byte 0x93,0x3c,0x17,0xd9,0x3e,0xad,0xc9,0x4c,0xb3,0xd0,0x0a,0xd0,0xfe,0xf3,0x9d,0xc5,0x43,0x03,0xa9,0x78,0x4a,0x42,0x7f,0xfb,0x75,0xd2,0x85,0xfb,0xe7,0xe6,0xa9,0x48,0x2f,0xa6,0xc3,0x16,0xe2,0x2a,0x9d,0x0d,0xcb,0x2e,0x8b,0x75,0xa8,0x14,0x3a,0x2e,0xb1,0xff,0x58,0x1d,0xa8,0xa6,0xc0,0xf6,0x17,0xda,0xc1,0xce,0xaf,0x08,0xa9,0xc2 +.byte 0xa3,0xc1,0xab,0xb6,0xe8,0x10,0x57,0x8a,0xce,0xc0,0x03,0x5c,0x53,0x5c,0x02,0x5d,0xcf,0x5c,0x65,0xc6,0x47,0x3c,0x62,0x0e,0xa3,0xfc,0xe2,0xae,0x10,0x55,0x4a,0xb4,0x27,0xe8,0x59,0x5e,0x45,0xa9,0xbb,0x21,0x10,0x91,0x46,0x1f,0x50,0x3b,0xc6,0x8c,0xa1,0x8a,0xee,0x5e,0x6e,0x32,0xe6,0x42,0x40,0x79,0x7f,0xbb,0xb3,0x5b,0x05,0xde +.byte 0xe0,0xf6,0x7f,0x3d,0x37,0xe6,0xc3,0x3b,0x40,0xc9,0xe0,0x42,0x36,0xd0,0x0e,0x13,0x32,0x3e,0x48,0xce,0xd8,0xa2,0xef,0xae,0x93,0x66,0x7d,0xde,0xb9,0xdd,0x60,0x15,0x53,0xf2,0xd9,0x90,0x3d,0x38,0x8c,0xa6,0x34,0x44,0xb5,0x6c,0x74,0x7d,0x9d,0xe7,0xd0,0xef,0x6c,0xd6,0xfe,0x9b,0x79,0x4e,0x79,0x5e,0x48,0xef,0x93,0xb2,0x81,0x0b +.byte 0x2b,0xee,0x83,0x69,0x3d,0x15,0x8c,0x27,0x69,0x6f,0xca,0xbf,0x75,0x29,0x37,0xc6,0xe6,0xca,0xb2,0x70,0xd0,0xaf,0xc8,0x5e,0x69,0xf1,0x6b,0x2d,0x0d,0xe7,0xe9,0xbf,0x07,0x52,0xe5,0xac,0x98,0xcf,0xcf,0xd6,0xdd,0x7c,0x2b,0xfc,0x8f,0xd2,0x5f,0x81,0x4b,0x1b,0x7b,0x2d,0x84,0xe2,0x69,0x96,0xcb,0xa2,0x59,0x10,0xba,0xda,0x51,0x11 +.byte 0xeb,0xc3,0x4f,0x10,0xbf,0x8e,0x5b,0xbb,0xa3,0x29,0xe9,0xd8,0x0e,0x71,0xa0,0x1b,0xff,0xee,0x36,0x8c,0x00,0x83,0x6b,0x32,0xfe,0x05,0xeb,0x89,0x8f,0xed,0x48,0x22,0xe1,0x76,0x0a,0xac,0xae,0x3c,0x24,0x54,0x84,0xc2,0x0f,0x79,0x33,0x2b,0x49,0x35,0x1c,0x84,0x5a,0xca,0x92,0x6c,0x1f,0x78,0x15,0x5a,0x36,0xad,0xd5,0x1d,0x9d,0x10 +.byte 0xc1,0x5f,0x7c,0x61,0x60,0xba,0x2e,0xe6,0x9b,0x34,0x02,0xe9,0x68,0x1c,0xfb,0xbf,0x02,0xdc,0x79,0x57,0x1c,0x0f,0xc8,0x8c,0x2a,0x66,0x2a,0x50,0xaa,0x81,0x4e,0x1f,0xa8,0x2d,0xe4,0x61,0xe8,0x43,0x84,0xcb,0xda,0x96,0xf9,0x4a,0xd0,0x8f,0xe1,0xd7,0xc4,0x05,0xf5,0x76,0xfa,0x47,0x7a,0x07,0x1a,0x77,0xbb,0x63,0xb3,0x3a,0x85,0x3b +.byte 0x0d,0x32,0x4f,0x14,0x15,0x02,0x5b,0x9c,0xbc,0xc2,0x12,0x90,0x0f,0x7b,0x94,0x27,0x5f,0x70,0x23,0xd8,0x5d,0x54,0xc4,0xca,0x6a,0x69,0x9e,0xd1,0xb3,0x2a,0x75,0x1a,0x07,0x9c,0x20,0xf6,0x76,0x22,0x4d,0x09,0x30,0x24,0x3f,0x3b,0xe5,0xcb,0x4b,0x5a,0x03,0x2d,0xe8,0xbe,0xed,0xf0,0xe3,0x91,0xf2,0x6c,0xb8,0x02,0x2d,0x6c,0x7a,0xa6 +.byte 0xc1,0x8e,0xa7,0xbb,0x73,0xdf,0x40,0xa5,0x60,0x91,0xbf,0xbe,0x28,0x0b,0x37,0x2e,0x5f,0x4b,0xcd,0x14,0x4d,0x2d,0xfc,0x5e,0x43,0xb5,0x78,0x8d,0xea,0xa0,0x86,0x54,0x4f,0xb6,0x25,0x40,0x39,0x3f,0x9c,0x7a,0x26,0x74,0x88,0x42,0x53,0xb0,0x3b,0x81,0x75,0x04,0x67,0x41,0x65,0x66,0x2c,0xdc,0xe9,0xf0,0xb3,0xab,0x2a,0xa5,0xf3,0xef +.byte 0xfa,0xc5,0x10,0x63,0xe2,0x70,0xb5,0x29,0x60,0x86,0x9e,0xb9,0x0b,0xe2,0xc4,0x05,0xa9,0x3c,0x1b,0x60,0x15,0x6b,0x2f,0x74,0x93,0x5e,0x70,0x9a,0x56,0x6a,0xc4,0x92,0x49,0xaa,0x95,0x51,0xc4,0xba,0xfd,0xf6,0x2d,0x36,0x3e,0x66,0xbd,0x74,0xbc,0x2e,0xb3,0xad,0xa1,0x41,0x50,0x33,0x79,0x84,0xac,0x21,0x7a,0xfc,0x3a,0x8e,0xdb,0xcc +.byte 0x27,0xf6,0x2c,0x5c,0x23,0x38,0x73,0xd5,0xaf,0xc9,0x2d,0x9c,0x18,0x58,0xdf,0x8f,0x89,0x9d,0xdd,0x00,0x3c,0x5f,0x23,0x00,0x6e,0x66,0x1d,0xf3,0x1c,0x40,0x9d,0x43,0xb0,0x74,0xf1,0x41,0xa5,0x77,0xcb,0x8d,0x5b,0x94,0x68,0x95,0xb6,0x0e,0xd4,0x4d,0x47,0x9b,0xd2,0xcd,0x9b,0x94,0xa4,0x28,0xf9,0xf0,0x3d,0xcf,0x89,0xb1,0xc3,0x73 +.byte 0x84,0x15,0xb6,0xc8,0x6b,0xf1,0xb1,0xdc,0x1b,0x1a,0x6f,0xb5,0x73,0x87,0x8b,0x63,0xbf,0x4b,0x25,0x9b,0xe4,0xdd,0x44,0xed,0xe7,0x0e,0x6f,0x03,0xae,0xa1,0x5e,0x1f,0x5f,0xa7,0xa4,0xed,0x69,0x7a,0x91,0x6d,0x55,0xac,0xce,0x18,0x32,0x17,0x78,0x49,0x9f,0x1e,0x9c,0xd2,0x7b,0x1f,0x74,0x60,0xa5,0x64,0xb1,0x99,0xe6,0xc5,0x0d,0x69 +.byte 0xfa,0xb2,0xd9,0x05,0x61,0x71,0xa4,0x6f,0xc2,0xb6,0x91,0x0e,0x6c,0xf2,0xa6,0x6c,0xea,0x8e,0x94,0x8b,0xac,0xa7,0xfe,0x70,0x8e,0x8d,0xc2,0x85,0xa6,0xa7,0x8e,0xe8,0xfa,0xbc,0xa1,0xaf,0x0e,0xa9,0x06,0xa4,0x9a,0xb0,0x23,0x93,0xbc,0x93,0x2d,0x97,0x42,0xe2,0x0d,0x3a,0x65,0xb4,0x60,0x5b,0xeb,0xa1,0x20,0x8a,0xdc,0x17,0x6b,0xc5 +.byte 0x19,0xc3,0x67,0xbf,0xae,0xf7,0xb9,0xb1,0x88,0x7f,0xe5,0x1b,0xc2,0x61,0x97,0xa0,0xd3,0x64,0x74,0x6b,0x7a,0x46,0x39,0x3f,0xc8,0xd3,0x53,0x79,0x74,0x4e,0x1e,0x63,0x91,0xc5,0x4a,0x70,0xb0,0x05,0x35,0x19,0xc2,0x26,0x54,0x44,0x3b,0xa9,0x12,0x40,0xd0,0x21,0x19,0xf3,0x8d,0xc7,0x2b,0x88,0x9a,0xec,0x41,0x8f,0x4f,0x23,0x19,0x1a +.byte 0xf3,0x1d,0x0a,0x88,0x0f,0xa7,0x02,0xd4,0x78,0x88,0xe6,0x43,0xb6,0x9e,0x07,0xdf,0x6a,0x1f,0x41,0xbb,0x3e,0xea,0x15,0xff,0x66,0x4c,0x7a,0x8b,0xee,0x27,0x47,0x81,0x81,0x95,0xa2,0x22,0xb4,0x9f,0x1c,0x09,0x1c,0xfc,0x0a,0xef,0x88,0x7f,0x59,0x60,0x91,0x6a,0xe4,0x92,0x8c,0x02,0x54,0xc9,0xee,0xc7,0x5e,0xd1,0xbf,0xc9,0x41,0xde +.byte 0x2f,0xa3,0x22,0x07,0x1d,0x8c,0xe1,0x04,0x59,0x94,0x75,0x3e,0xee,0x56,0x62,0x07,0x80,0x18,0x60,0x78,0x0e,0x55,0x06,0xec,0xe1,0xa5,0xf6,0x21,0x7e,0xf9,0x37,0xab,0x6a,0xed,0x07,0xcb,0xbf,0xa2,0xab,0x50,0xee,0x1f,0x2f,0x54,0x2b,0x82,0x93,0x59,0x03,0x35,0xd9,0xe8,0x2b,0xa6,0x03,0xc2,0xef,0x37,0x85,0xfc,0x89,0x06,0x30,0xe0 +.byte 0xc2,0x00,0xc4,0xaf,0x59,0xb6,0x31,0x52,0x37,0xa4,0x6c,0xdb,0x1b,0x20,0x87,0xf0,0xa4,0x15,0x4b,0xa8,0xd9,0x7e,0x1b,0x96,0x00,0x07,0xf4,0x86,0x07,0x14,0x55,0x70,0x37,0xe3,0xe3,0xf0,0xeb,0xd6,0xf1,0xe0,0xe9,0x6c,0xdf,0x3d,0xaf,0x86,0xb8,0x00,0x9b,0xdf,0xc6,0x5c,0xd2,0x53,0xcb,0xcf,0x63,0xcc,0x3e,0x6d,0x62,0xeb,0xe6,0x97 +.byte 0xd8,0x54,0xed,0x36,0xe4,0xed,0x69,0xaa,0x10,0x83,0xde,0x16,0xfd,0xcc,0xd6,0x24,0xb9,0x3c,0x4f,0x99,0x81,0xc2,0x23,0x16,0x91,0x5d,0x9f,0x46,0xa5,0xdd,0xb4,0x8a,0xe1,0x07,0x89,0x84,0x2e,0x62,0x48,0xf6,0x1a,0x17,0x7b,0xc8,0xf7,0xb4,0x3d,0x9e,0x82,0xe3,0xe3,0xcf,0x0b,0xd9,0x52,0x90,0x61,0xd8,0xdf,0x9e,0xc4,0xc7,0x7c,0xfa +.byte 0xcf,0x09,0xd2,0x94,0x86,0x37,0x94,0xaf,0x7e,0x0a,0x9d,0x16,0xee,0xad,0xfb,0xa2,0x9e,0x2d,0x2f,0xad,0xd5,0xc2,0xf9,0x91,0xf8,0x7e,0x2b,0xb8,0xb2,0x60,0x3c,0x0a,0x89,0x53,0x07,0x87,0x3b,0x83,0x70,0xee,0x71,0xa3,0x94,0x0b,0x77,0x50,0xeb,0xcc,0x23,0xf0,0xbe,0x95,0x51,0x54,0xd2,0xd6,0xd2,0x09,0xa5,0x19,0x3d,0x4e,0xec,0xe3 +.byte 0x88,0x71,0xa7,0xb1,0x10,0x03,0x7e,0xc4,0x92,0x2a,0xe7,0x99,0x75,0xff,0xae,0x10,0x3d,0xbb,0x33,0xc9,0x7f,0xc2,0xe6,0x3c,0xc4,0xe7,0xba,0x37,0xba,0x68,0x69,0x92,0x4a,0xfb,0x32,0x3b,0xb5,0xde,0xdb,0x91,0xd0,0x8e,0x77,0xf2,0x1e,0x2d,0x25,0xb4,0xa0,0x42,0xef,0x78,0x6c,0x75,0xcb,0xa0,0x73,0xdf,0xde,0xd8,0x26,0xfe,0xe3,0xf9 +.byte 0x74,0xe7,0xa0,0xd2,0xbd,0x6c,0x99,0x8d,0x07,0xf2,0xf8,0xff,0x36,0x2d,0x8e,0xda,0x5e,0x5c,0x47,0x06,0xf8,0x08,0x33,0x1d,0x93,0xcf,0xc3,0x1a,0x20,0x86,0xb6,0x8e,0x44,0x10,0xbc,0xba,0x89,0xfc,0xa3,0x57,0x92,0x2c,0x28,0xa1,0xd0,0xab,0xdc,0xba,0x0a,0x7e,0x9d,0xd2,0xfd,0x09,0xd3,0x87,0x6c,0x06,0x44,0x17,0x73,0xfe,0xc9,0x8b +.byte 0x52,0xd3,0x09,0x60,0x14,0x03,0xb1,0x79,0x4c,0x9c,0xc4,0xec,0x42,0x4c,0xd3,0x21,0xe5,0x34,0x21,0x38,0xdd,0x12,0x95,0xd4,0x20,0x50,0xef,0x5f,0x46,0x4f,0x37,0x65,0xd5,0xf1,0xb2,0x2c,0x6c,0x9a,0x06,0x28,0x77,0xbf,0xe3,0xec,0xec,0x2b,0xcb,0x2c,0x8b,0x62,0x2e,0x39,0xaa,0x28,0x0b,0x51,0x01,0xa5,0x02,0x06,0x66,0x4a,0x67,0x0c +.byte 0x96,0xa3,0x12,0x74,0x94,0x2c,0x0f,0x23,0xa3,0xea,0xda,0x1a,0x6d,0x54,0x30,0x33,0xc8,0x33,0x0a,0xfb,0x25,0x2a,0x8b,0x9a,0x87,0xd9,0x9d,0x37,0x4c,0x41,0x3b,0xe5,0x4a,0x81,0x92,0x40,0x38,0x18,0x82,0x13,0x54,0xde,0x56,0x11,0x63,0xf3,0x09,0x61,0x3b,0xdd,0x0c,0x71,0xe8,0x4f,0xc2,0x9a,0x77,0x2f,0xeb,0xf1,0x39,0x1c,0x10,0x0e +.byte 0x01,0xaf,0x92,0x34,0x9a,0xb6,0x7b,0x79,0x86,0x0c,0xf1,0x53,0xb6,0x59,0xbd,0x6d,0x79,0x6e,0x37,0x11,0x25,0x67,0x95,0x31,0x4f,0x43,0xdf,0xb7,0x4b,0x80,0x8d,0x07,0x3c,0x49,0x73,0x8a,0x72,0x61,0x02,0x0f,0x2f,0x13,0xed,0x91,0x10,0xf6,0x08,0xf3,0x50,0x4a,0xd4,0x36,0xcb,0x52,0xb3,0x3b,0xe6,0xef,0x85,0xe9,0xe0,0xad,0x0d,0x3d +.byte 0x84,0x07,0x70,0xdf,0x16,0x47,0xeb,0x26,0x19,0x27,0xaf,0x7a,0x9f,0x2f,0x2b,0x6d,0xbb,0x37,0x68,0x8e,0x19,0x46,0x5a,0x65,0x0d,0x0a,0x67,0xd8,0xe2,0xc2,0xcd,0x49,0xf6,0xc2,0x27,0xac,0x12,0xea,0x1f,0x81,0x60,0xac,0x8b,0x5d,0xcc,0x9a,0x5b,0xec,0xc3,0xcb,0x85,0x0d,0xef,0xa6,0xd5,0x33,0xb3,0x67,0x73,0x3f,0xc9,0x90,0x25,0x3e +.byte 0xe6,0x7c,0x41,0x59,0x83,0xf7,0x90,0x4a,0xbf,0x14,0x72,0x11,0xf2,0x3a,0x38,0x58,0x17,0xd8,0x3d,0x00,0xc6,0x42,0xf2,0xbc,0xfd,0x05,0x37,0x6d,0x11,0xb0,0xd7,0xb2,0xb7,0x73,0x69,0x80,0x47,0x30,0x64,0x13,0x8c,0x24,0xb2,0x42,0x12,0x8c,0xc0,0x8a,0x45,0x0b,0x71,0x23,0xeb,0xac,0x65,0xda,0x44,0x13,0x85,0x77,0xdf,0xb8,0x4b,0x69 +.byte 0xd4,0x8e,0x40,0x54,0x24,0xac,0xc8,0x62,0x36,0x51,0x20,0xaa,0xcd,0x5d,0xa5,0x73,0x2c,0x81,0x92,0x99,0x44,0x6b,0x04,0xac,0x8e,0xee,0x96,0x29,0xca,0xdc,0x2f,0xd1,0x13,0x5c,0x9e,0xc2,0x67,0x6a,0xaf,0xf6,0x3e,0xe2,0xa1,0x6d,0xda,0xbe,0x8a,0x55,0x50,0x27,0xee,0x6d,0xb8,0x35,0x5f,0xb4,0xa8,0x76,0xa1,0xe2,0x52,0x87,0xf6,0xfb +.byte 0xe2,0x16,0x1c,0x90,0x78,0xe4,0x17,0xb0,0xd9,0x56,0xf5,0xd3,0xa4,0xb0,0x3f,0xe9,0x01,0xf9,0xd0,0x67,0x2b,0xeb,0x1d,0x73,0x24,0x90,0x36,0x36,0x0d,0xcf,0xfb,0x3f,0xa1,0xa0,0x25,0x3b,0xf1,0x7f,0x9e,0x90,0xcf,0xb6,0xd0,0x83,0x90,0xcd,0x3f,0xff,0x5f,0xa3,0x33,0x95,0xd7,0xbe,0x78,0xfe,0xcc,0x9a,0xb9,0x64,0x88,0xb7,0xd9,0x5e +.byte 0x46,0x2d,0xf0,0xb1,0xa1,0x81,0x2b,0xab,0x80,0xf5,0x4d,0x3b,0xd8,0x53,0x64,0x8f,0xac,0x7a,0x03,0xb3,0x39,0x7a,0x85,0xef,0x61,0xb5,0x2c,0x8e,0xf4,0x27,0x07,0x9b,0x7b,0xc9,0x8b,0x1a,0xe4,0x4f,0xce,0x8b,0x35,0x32,0xac,0xcf,0x47,0xb8,0x2f,0x9e,0xe5,0x11,0x48,0xc1,0x07,0xea,0x0c,0xee,0x06,0xc6,0xa3,0x48,0xb6,0x1a,0xd8,0xb4 +.byte 0xa7,0xae,0x59,0x7d,0x9e,0x4e,0x66,0x7f,0xe9,0x02,0x40,0xdc,0x21,0x5e,0x74,0x2c,0x1d,0x29,0x22,0xca,0x97,0x4f,0xc8,0xc7,0xea,0x69,0x02,0x89,0xd1,0x43,0xff,0x83,0x89,0x58,0x66,0x92,0xbc,0x11,0xf6,0x02,0x8b,0xa8,0x34,0x8d,0xbe,0x3a,0x70,0xc3,0x10,0xe7,0xb5,0xc4,0xda,0xdb,0xc6,0x87,0xee,0xee,0xe0,0x48,0x62,0x80,0x8d,0xfc +.byte 0xaa,0xc7,0xce,0x1a,0xea,0xb9,0x1b,0x30,0x4a,0x48,0x9b,0xf4,0x58,0xff,0x5d,0x15,0xc8,0xf2,0x84,0x44,0xae,0x63,0xe8,0xb1,0xe0,0x2e,0x38,0x8e,0x47,0xf9,0x09,0xec,0xb9,0x94,0x18,0x37,0x68,0xef,0xbd,0xd5,0x67,0x72,0x01,0x9a,0x15,0xb9,0x7c,0x36,0xc0,0x22,0x80,0x12,0xb1,0x4e,0xab,0x3c,0xea,0x81,0xcf,0x70,0xf3,0xde,0x1f,0xd4 +.byte 0x67,0x94,0xfa,0xe1,0xf0,0xb6,0xd6,0x6b,0xc3,0xa2,0xbb,0x59,0x6b,0x9f,0x58,0x26,0x99,0x0c,0xdc,0xcd,0xb8,0xae,0x49,0xf0,0x8f,0xd3,0x0d,0xb7,0x4c,0x22,0xcf,0xb6,0x6c,0xa3,0x19,0x09,0x42,0x59,0x25,0xf8,0xdc,0xf3,0xc2,0x00,0xc3,0xc3,0xd3,0x9e,0x98,0xd3,0xa3,0xd0,0x96,0xfd,0x4f,0x15,0x57,0x5b,0xa7,0x08,0x3a,0x0e,0x3d,0xd2 +.byte 0x7d,0xa1,0xa0,0x94,0xc0,0x76,0x83,0xf6,0xc1,0xe8,0x7e,0xd3,0x97,0xc1,0xbf,0x38,0x74,0x9b,0xfb,0x35,0xeb,0xf7,0x34,0x20,0xea,0xda,0xd3,0xb1,0x2e,0x10,0x16,0x9c,0x09,0x1c,0x67,0x46,0xa2,0x05,0xf9,0x47,0xde,0x35,0x53,0x18,0x58,0xb0,0xbb,0x7a,0x88,0x58,0xc5,0x3e,0x98,0x29,0x43,0x98,0x07,0x76,0xa3,0xe1,0x95,0x92,0x21,0xe9 +.byte 0x06,0x17,0x15,0xe0,0x6b,0xd5,0x5a,0x6d,0x10,0xa6,0x08,0x92,0xa9,0xf5,0xcf,0x57,0x1a,0x28,0x5d,0x14,0x33,0x99,0xf9,0xa0,0xb3,0xeb,0xee,0xd4,0x6e,0x0b,0x5e,0xf7,0xe9,0xe3,0xc6,0x71,0x34,0x55,0xf3,0xde,0xd5,0xc2,0x52,0xc3,0x7b,0x06,0x87,0xef,0x26,0x81,0xc9,0xbd,0xaf,0x12,0x61,0x95,0x2b,0xa4,0x8e,0xe8,0x08,0x9a,0x13,0x48 +.byte 0x2e,0x84,0x98,0xf6,0x95,0x21,0x22,0xe5,0xcf,0x30,0x8d,0xaf,0x70,0x16,0x27,0x0c,0xcd,0x26,0x7f,0xe8,0xa0,0x35,0x0c,0x01,0x0e,0xdd,0x9d,0x2c,0x89,0x41,0x34,0xc4,0xa2,0xaa,0xf6,0x3f,0xca,0x3b,0x86,0xce,0xd7,0x4c,0xe3,0xb5,0x69,0xe9,0x41,0xbe,0x3c,0x9a,0x4c,0x1a,0xb3,0x88,0xea,0x78,0x12,0x4c,0x1b,0x79,0xc7,0xcd,0x32,0x72 +.byte 0xfa,0x3f,0x0b,0x73,0x1b,0xd9,0xec,0x85,0xd4,0x52,0x6c,0x91,0x2d,0xbe,0x76,0x8b,0xfd,0xb6,0x49,0xcf,0x67,0xd1,0x18,0x7b,0xae,0x86,0x47,0x47,0xfd,0xff,0x63,0xf2,0x88,0x1b,0x58,0xd5,0x30,0x69,0xf9,0x9a,0x03,0x52,0xae,0xe5,0xe2,0x55,0xbf,0x35,0x12,0xb0,0x84,0xa9,0xed,0xb6,0x8d,0x5f,0x6c,0xed,0x1a,0x00,0x7a,0xdc,0xf2,0x03 +.byte 0x9e,0xef,0x59,0x27,0x4c,0xf4,0x83,0xa2,0x36,0x3d,0x3d,0x8c,0x75,0x8c,0x37,0x68,0x93,0x0b,0x30,0x48,0xea,0x91,0x14,0x37,0x88,0x87,0x7f,0xe6,0xd8,0xbd,0x04,0x34,0x1e,0xe8,0x2a,0x41,0x48,0x5c,0x66,0xf9,0xc2,0xd1,0x56,0x25,0x29,0x45,0xfa,0x71,0xe1,0x59,0xa8,0x52,0x99,0x0b,0x92,0xe0,0x33,0x52,0x91,0xd6,0x5f,0x0a,0x70,0x83 +.byte 0x4f,0xa3,0x47,0x6e,0xfa,0x85,0x5e,0xb1,0x0a,0x1d,0xe7,0x35,0xc9,0x88,0x27,0xc9,0x8c,0x3e,0x7f,0x6d,0x34,0x1e,0x11,0x7b,0xcd,0xe7,0x09,0x82,0x3a,0xa1,0x46,0xc6,0x15,0xde,0x0b,0xde,0x35,0x71,0x92,0x5c,0x72,0x50,0x08,0x6b,0x62,0xa7,0xec,0xa2,0xca,0x53,0x6e,0x47,0x7d,0x50,0x32,0xa7,0x32,0x7b,0x49,0x0c,0x97,0xcc,0x98,0x8d +.byte 0xc3,0x29,0x72,0x1e,0x85,0x47,0x1b,0xa7,0x89,0x19,0x85,0xaa,0x3f,0x11,0x6a,0xea,0x61,0x84,0x07,0x9a,0xc8,0xb3,0x25,0xfe,0x72,0xca,0x83,0xa9,0xf0,0x9e,0x01,0xe4,0x9a,0xd6,0x1b,0x87,0xfc,0xd4,0x3a,0x04,0x34,0x8c,0x0b,0x46,0xbc,0xe9,0x3c,0x3f,0xd9,0x93,0xf1,0xca,0x41,0x0b,0xdb,0x28,0xe8,0x28,0x1b,0x84,0x36,0x16,0x84,0x22 +.byte 0x1e,0x1e,0x2b,0xb0,0xfb,0xa6,0xcc,0x95,0x31,0x46,0xd7,0xca,0xc2,0x8b,0xa3,0x3a,0xa5,0xb0,0xaf,0x52,0x66,0x53,0x39,0x5f,0x58,0xb5,0xdf,0x01,0x52,0x07,0xb4,0x82,0xdc,0xb7,0xf9,0x88,0xd8,0x77,0xf8,0x12,0x9d,0xe8,0x21,0xd7,0x0b,0x0f,0x57,0x90,0x40,0xb2,0x64,0x3f,0xce,0xa0,0xa3,0xfa,0x12,0x16,0xec,0x6d,0xcc,0xc7,0x2a,0x43 +.byte 0xc9,0xe7,0xb7,0x90,0x52,0x35,0x22,0x6d,0x46,0x99,0x1e,0x44,0x12,0xd6,0x0f,0xaf,0x5c,0x16,0xd3,0x7a,0xd6,0xb4,0xfe,0x20,0x26,0x11,0xe1,0xc6,0xa5,0x10,0xfd,0x9f,0x0c,0x47,0xae,0x32,0x08,0x15,0x8f,0xef,0xef,0x4c,0x83,0xbc,0xbf,0x6a,0xe5,0xf5,0x69,0x11,0x4d,0x7d,0x47,0x1f,0x10,0x58,0x61,0xb0,0x0d,0x98,0x67,0xc0,0x99,0x3a +.byte 0x2d,0x9a,0x5b,0xd5,0x37,0xe7,0xe5,0xd4,0x56,0x96,0x69,0xf8,0x53,0x7e,0x24,0x70,0x51,0x01,0x83,0x8d,0x49,0x01,0x32,0x7d,0x4f,0x41,0x92,0x54,0x9c,0x15,0xf1,0x3c,0x05,0x32,0x28,0x0d,0x0f,0x67,0xbe,0x65,0xfa,0x1b,0xa3,0xd0,0x28,0x18,0xb8,0x84,0xfe,0x6a,0x30,0xea,0xb9,0x00,0xb1,0x10,0x7c,0xa2,0x94,0x4f,0x86,0x18,0xdd,0xb4 +.byte 0x80,0x18,0x48,0x18,0xe1,0x56,0x70,0x7d,0x5c,0x3b,0xe5,0xd7,0x88,0x66,0x57,0xe3,0xe1,0x04,0x4c,0x68,0x5b,0x64,0x4d,0x0d,0x30,0x76,0x26,0xaa,0x84,0x0e,0xe0,0xed,0x53,0x62,0x20,0x33,0xaf,0x45,0x42,0x40,0x47,0x01,0x15,0xc9,0x0b,0x27,0x7c,0x68,0x4d,0x55,0xc4,0x6a,0x5f,0x96,0x9f,0x96,0x67,0xae,0x13,0x1c,0x84,0x52,0x33,0x41 +.byte 0x80,0xfc,0xae,0xb6,0xb1,0x8c,0xc3,0x19,0x80,0xa8,0x5f,0xe5,0x8c,0xd0,0xa8,0xb4,0x58,0xc9,0x48,0x29,0xab,0x11,0xd1,0x09,0xc6,0x20,0x98,0x4c,0xdb,0xa4,0x83,0x5c,0x26,0x51,0xce,0x80,0xe5,0xc4,0x9b,0xae,0xba,0x8e,0x99,0x4e,0xa4,0xff,0xdc,0x99,0x4c,0x02,0xa0,0x42,0x80,0xca,0xd7,0xea,0x6a,0x58,0x31,0xdb,0x16,0xd8,0x4d,0xab +.byte 0x03,0x2e,0x3a,0xdc,0xe9,0x07,0xfb,0xfb,0x5b,0x57,0x67,0x2a,0x7b,0xdc,0xc1,0x66,0xd1,0x31,0x3a,0x03,0x87,0xd8,0x66,0xda,0xa1,0x24,0x00,0x26,0xc0,0x26,0x78,0xf8,0x59,0x13,0x3f,0x34,0x08,0x35,0x45,0xbd,0x45,0x4f,0x89,0x65,0x97,0xdb,0xe6,0x1e,0x09,0x6e,0x23,0x2a,0xc4,0xf5,0x6a,0x74,0x28,0xb0,0xae,0x8c,0xfb,0x49,0x35,0x99 +.byte 0x06,0x30,0xc6,0xb2,0x8c,0xcd,0x8b,0x41,0xea,0xf2,0x04,0x18,0x29,0x25,0x1b,0x32,0x42,0x45,0xb5,0x92,0x42,0xb4,0x33,0xd2,0x90,0x31,0x08,0xcd,0x35,0x5d,0x50,0x64,0xa8,0x93,0xfd,0xa5,0xfd,0x32,0xbd,0xe8,0x13,0x1c,0x48,0x5c,0x14,0x70,0x03,0x92,0x0f,0x12,0x86,0xf6,0x6c,0xcd,0xc6,0xec,0xbf,0x8e,0x85,0x28,0x1d,0x1c,0x63,0x3f +.byte 0x81,0x93,0xd4,0x80,0x3c,0x29,0x0b,0x63,0xfe,0x87,0xa6,0x24,0xd6,0x3e,0x62,0xb6,0xd9,0xb0,0x58,0xf1,0x41,0x36,0xc7,0x47,0x8b,0xfd,0x4b,0x91,0x4e,0x5d,0x41,0x44,0xb0,0x65,0x3d,0x9e,0x3b,0x70,0x01,0xcc,0x7d,0x77,0xf0,0x23,0xd9,0xca,0x5f,0xda,0xa1,0x8c,0x71,0x11,0x91,0x7d,0x36,0xf5,0xc9,0xcd,0xf4,0x34,0x5f,0x69,0x57,0xd6 +.byte 0x33,0x4c,0xb2,0xe1,0x38,0x5f,0x86,0x3c,0x57,0x7b,0x2e,0x99,0x05,0x80,0x63,0xc4,0x77,0x69,0x06,0xc2,0x47,0x44,0xca,0x17,0x27,0x1d,0x55,0x34,0x02,0xd0,0x89,0x3a,0x3b,0x79,0xf0,0x86,0xd7,0x6b,0x01,0x9c,0xc7,0xa8,0xde,0xdb,0xdf,0x49,0xd1,0xb9,0x11,0xaf,0x7e,0x22,0x8b,0x5d,0xb5,0x0b,0xdc,0xd0,0x36,0xe6,0x9d,0x85,0x41,0x4a +.byte 0x35,0xf0,0xe1,0xcd,0xce,0x7b,0xd1,0xd6,0x00,0xdd,0xb6,0xe4,0x06,0x3e,0x66,0xe9,0x2b,0xa8,0x44,0x0d,0x18,0xd4,0xbc,0xfb,0x3c,0x58,0x6c,0x11,0xe9,0xdc,0x19,0x14,0x08,0x27,0x23,0x0c,0xd0,0xf9,0x97,0xaf,0x97,0x07,0x02,0x1a,0x5e,0xcd,0xae,0xd2,0x80,0x96,0x16,0x49,0xc3,0xfc,0xda,0x25,0x12,0x20,0xe1,0xc0,0x68,0x90,0x4b,0x30 +.byte 0x2d,0x06,0x53,0x2c,0x57,0x63,0x4a,0x7a,0xf6,0xc8,0x5a,0xb7,0x58,0x8c,0x13,0xfe,0x43,0xb3,0xf8,0x25,0x3e,0x7a,0x25,0x3e,0x1d,0x7f,0x8f,0x5e,0xdb,0xad,0x99,0x83,0xfc,0xd9,0x0a,0xdf,0xb5,0x19,0x1c,0x2c,0xf6,0xe8,0x06,0xbe,0xc0,0x9f,0x7e,0x0f,0x95,0xaa,0xac,0x09,0xdc,0x8c,0x37,0xcf,0x35,0x35,0x95,0x62,0xf1,0xff,0x96,0x1c +.byte 0x77,0xe9,0x53,0x7e,0x12,0x56,0x2d,0x4e,0x3e,0x1f,0xdb,0x1d,0x71,0x0e,0xdc,0xf7,0x65,0xb1,0x78,0x7f,0xe4,0xba,0xbf,0x7f,0x6c,0xcb,0x73,0xd3,0xe8,0xd9,0xce,0xfb,0xdb,0x48,0x87,0xe0,0x10,0x00,0x74,0xcb,0xdf,0x32,0xa8,0xdd,0x83,0x24,0x49,0xda,0x86,0x38,0x1c,0x2c,0x93,0x09,0x8a,0x26,0xbb,0x34,0x21,0x1d,0xac,0xb5,0x16,0xae +.byte 0xd8,0xcb,0x94,0x04,0xd6,0xbc,0xde,0x9c,0x70,0x28,0xa5,0x1a,0x15,0x5e,0x35,0xe4,0xe6,0x53,0xea,0x9c,0x3b,0x0c,0x36,0x3b,0x80,0x13,0x28,0x1d,0xc7,0x1a,0xa8,0x8e,0x9e,0x09,0xce,0x5d,0x50,0xd3,0xc7,0x6f,0x3a,0x75,0xa5,0x84,0x1c,0x08,0x66,0xe6,0x05,0xda,0x8b,0xf1,0x4b,0x5c,0xe2,0xc7,0x0f,0xa1,0xf1,0x47,0x02,0xf4,0xa7,0x24 +.byte 0xf3,0x0e,0x2c,0xa9,0xae,0x67,0xdf,0xce,0x30,0x88,0x4a,0x9a,0x39,0x4a,0x97,0x64,0xa8,0x30,0x53,0xf9,0x47,0x66,0x5c,0x19,0x1c,0xfb,0x2f,0x05,0x89,0x4f,0xfe,0x25,0xe7,0xed,0xed,0x17,0x5a,0x86,0xeb,0x25,0xee,0xe4,0x09,0x88,0x05,0x49,0x20,0x54,0x4b,0x7f,0x3e,0xb5,0x23,0x85,0xa9,0x66,0x61,0x73,0xe0,0x61,0x94,0xc6,0xe5,0x29 +.byte 0xb4,0xe1,0x6f,0xa4,0x4d,0x50,0x56,0x2e,0x30,0x75,0x51,0x5d,0xdd,0xa2,0x68,0x56,0x67,0xd8,0xec,0x2d,0x2a,0xfd,0x49,0xc5,0xbc,0xae,0x2f,0x6b,0xc7,0x8d,0x2e,0xca,0x91,0x35,0xe8,0xea,0x65,0xe9,0x9c,0x65,0xaf,0x8e,0xd5,0x16,0xdf,0xac,0x44,0x1e,0xb6,0x16,0xf0,0xb6,0x33,0x6a,0xe6,0x96,0x0f,0x85,0x2e,0xa1,0xaa,0x6a,0xe0,0x12 +.byte 0x0c,0xaa,0x7d,0xae,0xf7,0xe3,0xb2,0x4c,0x3c,0x10,0xc6,0x87,0x8e,0x87,0xfb,0xac,0xf7,0xd7,0x7a,0x2e,0x9a,0x7a,0xa7,0x4f,0xf0,0x75,0xce,0xbd,0xc3,0xe6,0x79,0x1d,0x56,0xab,0xff,0x56,0xfe,0x69,0xbd,0xcf,0x15,0x27,0x64,0x3c,0x83,0x1c,0x08,0xb0,0x91,0x60,0x67,0xe7,0x27,0x44,0x49,0x22,0x78,0xd5,0x1a,0xc8,0x3b,0x35,0x9b,0xa5 +.byte 0x53,0xce,0xde,0x04,0xd2,0x3e,0x67,0x48,0xaf,0x54,0xdf,0x9c,0xf7,0xb9,0xd4,0xe3,0xb6,0x85,0x02,0x68,0x21,0x10,0xdb,0xb5,0xca,0x11,0xa2,0x7c,0xcf,0x13,0x41,0x7a,0xfd,0xe9,0x0a,0x3c,0x53,0xd6,0x07,0xf2,0xdd,0xe2,0x7c,0x16,0xf0,0x44,0x3f,0x5d,0x34,0x09,0x7c,0x7b,0x21,0x8c,0x8e,0xdb,0x0d,0xc5,0x73,0xce,0x61,0xce,0x17,0x46 +.byte 0x6c,0x14,0x07,0xb5,0x70,0x80,0xf0,0x29,0x7c,0x13,0x41,0x2d,0x8e,0xdc,0x53,0xc2,0xbf,0xf0,0xc2,0xfb,0x59,0xa0,0x66,0x5f,0x25,0xda,0x17,0x5f,0xac,0xab,0x75,0x1b,0xc7,0x61,0x87,0x53,0x80,0x2e,0x11,0x4e,0x04,0x48,0xf9,0xee,0x54,0xe6,0x69,0x69,0x57,0xc2,0x46,0xd8,0xb3,0x2e,0x7b,0xc8,0xa5,0xd0,0xb2,0x5e,0xd4,0x6b,0x9b,0x1a +.byte 0xd6,0x79,0x9d,0x99,0xa6,0xbb,0x4d,0xca,0x74,0x2c,0x3d,0xd4,0x86,0xd0,0x64,0xd4,0x81,0x49,0x76,0x42,0xb8,0xf9,0x2c,0x52,0xe7,0x77,0x37,0x31,0xbb,0x2e,0x5b,0x38,0x81,0x01,0x2c,0x27,0x28,0xcb,0x0c,0xba,0xfa,0x8a,0x9a,0x45,0x51,0xa2,0xde,0xf2,0x7b,0xe6,0x65,0xec,0x5b,0x2d,0xe8,0x55,0x8e,0xb4,0x7f,0xf8,0x1a,0x66,0x3a,0x5f +.byte 0x06,0x10,0x15,0xb2,0x3d,0xb2,0x36,0x6e,0x9f,0x8e,0xe2,0x4c,0x78,0xe5,0x3a,0xac,0x21,0x16,0x20,0x30,0x0f,0x51,0x56,0xcb,0x53,0xca,0x70,0x3c,0xa2,0x3f,0x37,0x06,0x6c,0x70,0xec,0xf4,0x3d,0x7c,0x77,0xa0,0x61,0xc7,0x0e,0x26,0x9f,0x25,0xc0,0xf2,0x28,0xdb,0x57,0xbe,0xe6,0x4e,0x9c,0x4d,0x2e,0x48,0x50,0xc2,0xd4,0xfd,0x5e,0x52 +.byte 0x3f,0xd0,0x82,0xd1,0xd4,0x53,0xad,0x42,0x38,0xb1,0x02,0xd6,0xa0,0x34,0x7a,0xb4,0xb3,0xdd,0x91,0x12,0xf4,0x91,0xc9,0xa2,0x35,0x2d,0xdc,0x97,0xa1,0xdb,0x82,0xe7,0x92,0x99,0x66,0x13,0x99,0x20,0x95,0x1f,0x47,0x64,0x80,0x5e,0x5f,0x74,0x6b,0xa6,0xca,0x47,0x0b,0x24,0x72,0xa6,0x27,0xe7,0x56,0x61,0xa7,0x8e,0x62,0xa4,0xff,0x8e +.byte 0x29,0xf8,0x09,0xa4,0xbb,0x70,0x97,0x8a,0x39,0xe8,0x65,0xc8,0x52,0x23,0x9d,0xbf,0x10,0xe8,0x7d,0xbc,0x3c,0xc4,0x8b,0x1e,0x5c,0x75,0x94,0x24,0x62,0x3f,0x5b,0x2b,0x9a,0x08,0x00,0x78,0xfd,0x28,0x44,0x12,0x62,0x2a,0x6f,0x47,0x9d,0x57,0xb0,0x4e,0x3b,0xcd,0x01,0x7d,0x6e,0x62,0xe3,0x99,0x9c,0xae,0x6e,0xe2,0x70,0x7a,0x32,0xb4 +.byte 0xc1,0x19,0xb1,0x03,0x6b,0x92,0x89,0x4f,0x37,0xaf,0x36,0xee,0x5e,0x03,0x31,0x8c,0x41,0x27,0x17,0x21,0xdf,0xe4,0x34,0x97,0x8d,0xe7,0x41,0x47,0xf2,0x80,0x51,0x41,0x01,0xe4,0x0c,0x1a,0x09,0xfc,0x07,0xc3,0x94,0x07,0x6f,0xa7,0x6c,0xff,0x32,0x21,0xa5,0x01,0x8c,0xa2,0x88,0x3c,0xc8,0x57,0xe8,0x68,0x19,0x4a,0x46,0x7a,0x36,0xd2 +.byte 0x75,0x8e,0xc5,0xa4,0x84,0x91,0x13,0x7f,0xdd,0x2b,0x3c,0x2e,0xc4,0x92,0x29,0xb3,0x60,0x74,0xc8,0x81,0x58,0x0e,0xad,0x6a,0x9d,0xaa,0x81,0x49,0x26,0x0f,0xd4,0x2a,0x39,0xdd,0x4d,0x2b,0x13,0xdb,0x2e,0x72,0xe6,0x45,0x99,0xeb,0xe6,0xe5,0xd5,0x76,0xd4,0x19,0xd8,0xd7,0xa9,0x1f,0xce,0x7f,0xc4,0x1c,0x9e,0x6f,0x68,0x32,0xb1,0x26 +.byte 0xc4,0xb6,0x4e,0x9f,0xbf,0xdc,0xe0,0xde,0x54,0x9b,0xe0,0x04,0x03,0xae,0xc9,0xce,0x3a,0xcb,0x93,0xad,0xcc,0x1f,0x46,0xf6,0xbb,0xff,0x40,0x52,0x9c,0x64,0x97,0x5a,0x6f,0x8d,0x28,0x45,0x1c,0xf6,0x8b,0xcb,0xb9,0x38,0xb8,0x00,0xee,0xec,0xac,0x68,0x3f,0x50,0xcb,0x36,0x6e,0x97,0xfd,0xa5,0x1d,0x29,0x6e,0xfa,0x9f,0x4b,0x83,0xcd +.byte 0x0d,0x34,0xf3,0x1e,0x3f,0x0f,0x2e,0x89,0xeb,0xf7,0x8e,0x5f,0xe0,0x3b,0x39,0xd2,0xe8,0x87,0xe3,0xe7,0xe9,0xd0,0x1b,0x32,0x03,0x6b,0x3c,0x75,0x7d,0xe2,0x5c,0x3c,0x42,0xb4,0x46,0x69,0x0b,0xaf,0x0a,0x5d,0x1a,0x83,0x0b,0x0e,0x3c,0x5a,0x36,0xbd,0x5d,0xb6,0xad,0x4c,0xdd,0xf1,0x8d,0xbf,0x2b,0x70,0x8e,0xbc,0x92,0x95,0x1b,0x0f +.byte 0xed,0x3f,0xae,0x9e,0xa2,0x5a,0x50,0xe4,0xda,0xde,0x04,0x51,0x31,0xac,0xa4,0x0b,0x94,0xcc,0x14,0x87,0x59,0xa8,0x30,0x09,0xe6,0x46,0xb9,0x07,0x3e,0x1a,0xbf,0x5a,0x23,0x32,0xfb,0x60,0x63,0x24,0x25,0x12,0xf6,0x3e,0x2d,0xd0,0x8b,0x88,0x9b,0xe9,0x2d,0xab,0xf5,0xaf,0xba,0xbc,0xfe,0xab,0xb2,0x61,0x7a,0x7c,0xbb,0x28,0x6b,0x86 +.byte 0xe5,0xa2,0x9c,0x2c,0x5a,0x23,0x12,0x11,0xe5,0x72,0xe8,0x7b,0x6b,0x40,0xf1,0x91,0x37,0x3b,0x47,0x75,0x65,0xac,0x4d,0x22,0x59,0x75,0x13,0xb0,0x73,0xff,0x59,0xd1,0x1b,0xcc,0x05,0x1f,0xf2,0xc8,0x50,0x83,0xf1,0x28,0x38,0x0b,0xc3,0xa0,0x3b,0xe3,0x86,0xbb,0x9c,0x7e,0xc1,0xe9,0xcc,0xd9,0xb8,0x2b,0x05,0xf3,0x6f,0xc7,0x9d,0xaf +.byte 0x7b,0xb7,0x38,0x41,0xa3,0x50,0x8f,0x92,0xe0,0x63,0x35,0xb3,0x95,0x9f,0x80,0xf8,0x75,0xbb,0xf3,0x2b,0x0e,0xaf,0x32,0x6e,0xff,0xeb,0x79,0xca,0xbf,0x1c,0x4f,0x6c,0x9c,0x06,0xb2,0xeb,0x99,0x57,0x1f,0xf6,0x64,0x0b,0x81,0x57,0xba,0xf4,0x32,0x1e,0x77,0x37,0x55,0xb7,0xbc,0xba,0x70,0x0b,0x0d,0xdd,0x95,0x41,0xb5,0x17,0x5b,0x14 +.byte 0x10,0x9d,0x14,0x52,0x83,0x65,0x0a,0xf4,0x55,0xca,0xf8,0xbe,0xa6,0x3a,0xa0,0x6e,0xcc,0x83,0x84,0x65,0xb4,0x1c,0x7e,0x40,0xdd,0x32,0x36,0x5a,0x23,0x17,0x7d,0xb5,0xb9,0x38,0x48,0x5c,0x6f,0x23,0x54,0x0e,0x93,0x74,0x27,0x0f,0xfd,0x58,0xc1,0x97,0x26,0x78,0x9a,0xd3,0x85,0xc5,0xb2,0xb3,0x44,0xb7,0x36,0x85,0x69,0xde,0x3b,0xa1 +.byte 0x2b,0x11,0xef,0x75,0xfc,0xaa,0x92,0xf1,0xf1,0x72,0xa0,0x5f,0x33,0xf6,0x0b,0x72,0xdb,0xce,0x6c,0x2a,0x15,0x76,0x40,0xd4,0x85,0xff,0x96,0xe1,0x48,0xe1,0x27,0x8f,0x74,0xf3,0xfa,0xa1,0xb7,0x2a,0xb6,0x41,0x90,0x92,0x7e,0xfa,0xfc,0xad,0xa3,0x94,0x91,0x77,0xf1,0x8f,0xee,0xa2,0x64,0x47,0x01,0xb3,0x01,0x99,0x05,0xe7,0x31,0x4a +.byte 0xe8,0xd2,0x65,0x40,0x21,0xc4,0x83,0x8e,0xc9,0x89,0xda,0x16,0x7b,0xe0,0xcb,0xc0,0xc0,0x3d,0x37,0x18,0x66,0xe9,0x70,0x86,0x0b,0x6c,0xe8,0x65,0x44,0xce,0x3a,0xcd,0x84,0x1e,0xce,0x0e,0xe3,0xf9,0x77,0x12,0xfb,0xe6,0x92,0x8b,0x0d,0x7e,0x15,0x7a,0x34,0x94,0x2a,0xa7,0xc5,0x35,0xa4,0xfc,0xbe,0xa3,0x13,0x70,0xe4,0x6b,0x2f,0x71 +.byte 0x31,0xef,0xdb,0x79,0x44,0xf2,0x77,0xc7,0xc9,0x0d,0x1a,0x7b,0xff,0x34,0xf8,0xc9,0xe8,0xc9,0xc2,0xe0,0x0c,0x9e,0xd6,0xb4,0x7a,0xdb,0x1f,0x65,0xb8,0xd4,0x92,0xbf,0x7f,0x06,0x44,0xe3,0xb4,0xd8,0x14,0xe3,0x9b,0x49,0x81,0x12,0xec,0x7d,0x01,0xe2,0x50,0x2c,0x0e,0xfd,0x4b,0x84,0x3b,0x4d,0x89,0x1d,0x2e,0x4b,0xe9,0xda,0xa5,0x3f +.byte 0x19,0xc2,0x53,0x36,0x5d,0xd8,0xdc,0x6e,0xc3,0x48,0x8f,0x09,0xd5,0x95,0x4b,0x0c,0x7c,0x00,0x15,0x33,0x8e,0x1d,0x0c,0xdf,0x32,0x3b,0x93,0x1f,0xf5,0x49,0x4f,0xfd,0x8b,0x64,0xe7,0x96,0xaf,0x2f,0xc8,0xea,0xab,0x91,0x53,0x29,0xe3,0x31,0x0a,0x1c,0x6e,0xe0,0xbb,0x81,0x11,0x83,0xe0,0x07,0xfb,0x29,0x11,0x0f,0x0d,0x85,0xd4,0x61 +.byte 0x3c,0x75,0xbb,0x8a,0x23,0xb6,0xa0,0x7f,0xa4,0xbb,0x11,0xd4,0x75,0xde,0x27,0xe5,0xeb,0x11,0x5d,0x02,0xfe,0x5c,0x62,0x60,0x0f,0x6f,0x45,0x9b,0xfb,0xb7,0x32,0xa8,0x1c,0xd6,0xff,0x43,0x7b,0x53,0xee,0xa4,0x1f,0xf2,0xba,0xb6,0xb7,0xb7,0x39,0x18,0x85,0x79,0x77,0x27,0x30,0x26,0xe4,0xef,0xd1,0x39,0xc9,0xa2,0x0d,0x50,0xd7,0xef +.byte 0x9e,0xd8,0x8e,0xd2,0x74,0x1a,0x3f,0x99,0x24,0xf4,0x8b,0x4d,0x02,0x63,0x18,0x3a,0xaf,0x26,0xef,0xfc,0x1d,0xfe,0x46,0xc1,0x55,0xd7,0x92,0x65,0x2f,0xe7,0x4f,0x47,0xa8,0x2f,0x5d,0x47,0x67,0xeb,0x62,0x1d,0x69,0xa6,0x0e,0x51,0x1d,0x2c,0xed,0x6e,0x94,0xe9,0x48,0x4c,0x22,0xc2,0x93,0x79,0x6f,0x1b,0xc2,0x93,0x61,0x3d,0x8b,0xba +.byte 0xcb,0xe9,0x4a,0x88,0x5e,0x19,0x50,0x14,0xfe,0xda,0x3f,0x4d,0x47,0x54,0xfc,0x1c,0x09,0x77,0x37,0x30,0xfe,0x75,0x9f,0xdd,0xa4,0x74,0x04,0x04,0x88,0xe0,0xac,0x93,0x64,0x6f,0xbf,0x50,0xd8,0xf0,0xf7,0xa0,0xfa,0x98,0x49,0xfa,0xf7,0x6e,0xcf,0xa2,0xbf,0xb6,0x07,0x15,0x0e,0x4e,0x21,0x74,0x0a,0xa6,0xa3,0x67,0xce,0xf9,0x3b,0xd6 +.byte 0x4c,0xc8,0x43,0xe3,0x3b,0x3b,0x6a,0x86,0x62,0x3f,0x5a,0xf3,0x3f,0xf9,0xeb,0xbf,0xa3,0x2a,0x83,0x8a,0x70,0x8f,0x01,0x65,0x17,0x9a,0xa6,0x26,0x3b,0x09,0x06,0x22,0x19,0xed,0xd7,0x25,0x4b,0xd2,0x9a,0x30,0xfe,0x1c,0x82,0x68,0x16,0x04,0x0e,0x04,0x8f,0xc6,0x92,0xbe,0xe4,0x43,0x98,0x1d,0x3b,0x10,0x15,0x5b,0xef,0x4e,0x60,0x5e +.byte 0x6b,0xc9,0xde,0xb8,0x47,0x02,0x86,0x45,0x39,0x7a,0x1a,0xef,0x67,0x28,0xc5,0x40,0x73,0x2a,0xa7,0x12,0x9d,0x58,0x3a,0x34,0xc2,0xda,0x34,0xb0,0x48,0xd9,0x34,0xcd,0x18,0xe9,0x76,0x41,0x78,0x8f,0xe5,0xe8,0x3d,0xb2,0x01,0x3b,0x84,0xd1,0xca,0x5e,0x26,0x1d,0x8c,0xea,0xe1,0x46,0xa3,0xf9,0x11,0xac,0x0d,0x98,0x9f,0xd3,0x46,0x79 +.byte 0xff,0xad,0x99,0x32,0x63,0x96,0xbc,0x57,0x39,0x16,0xce,0x06,0x7e,0x63,0x78,0x7b,0x86,0x92,0x1a,0xe1,0x45,0xc0,0x73,0xe1,0xec,0xfc,0x88,0x8f,0xf8,0x36,0x0f,0x54,0x76,0x02,0x98,0x49,0x40,0xb9,0xef,0xd8,0x13,0x68,0xf5,0x1d,0x0a,0x98,0x65,0x21,0xc5,0x1a,0x22,0x4e,0x8e,0xad,0xa9,0x52,0x57,0xc4,0xc6,0xa8,0x48,0x01,0x7a,0x78 +.byte 0xc9,0xfc,0xdd,0xf3,0xc3,0x83,0xc0,0x06,0xb5,0x56,0x84,0xe2,0x0c,0x6b,0x80,0xd9,0x59,0xa1,0x3d,0xe3,0x56,0xf0,0xe3,0x3f,0x93,0x61,0xf7,0x8c,0x6b,0x40,0x65,0x6e,0x01,0xc2,0xa1,0xc1,0xb8,0x9b,0x15,0x6c,0xa1,0x18,0x4a,0x6c,0x8b,0x18,0x2d,0x8e,0x71,0x7a,0xa1,0x26,0xc1,0x4b,0xac,0x0c,0xca,0x08,0x33,0xef,0x35,0x33,0x63,0xeb +.byte 0x57,0x6e,0x7e,0x36,0xe0,0x31,0xad,0x10,0x76,0xb7,0x45,0xd9,0x3a,0x92,0x66,0x69,0x13,0x61,0x59,0x87,0xfd,0x6b,0xf1,0x46,0x0a,0x7a,0x3f,0x29,0x88,0x5b,0x7d,0xef,0x07,0x02,0xa8,0xa1,0xdc,0xd4,0x0e,0x77,0x8f,0x68,0x32,0xbd,0x8e,0xd6,0x0b,0xe4,0xd1,0x75,0xc1,0xb0,0x74,0x6c,0x0e,0xc3,0x46,0x79,0x36,0x3b,0x5f,0x0e,0xa0,0xad +.byte 0x28,0x8c,0xcb,0x01,0x8e,0x58,0x14,0x09,0xf1,0xd4,0x3b,0x2e,0xdc,0xbf,0x37,0x95,0x26,0xda,0xb6,0xcf,0xc8,0xa1,0xd4,0xec,0x72,0xf3,0x44,0xf5,0x4e,0x27,0x9b,0x2e,0x7c,0xfa,0x37,0x16,0x1d,0x7f,0x90,0x86,0xae,0x96,0x3b,0xe1,0xda,0xf7,0xc4,0x54,0x0b,0x51,0x7e,0x83,0xbe,0xed,0xd6,0x5f,0xd2,0x6d,0xbb,0xd3,0xc6,0x53,0x95,0x65 +.byte 0x3d,0x19,0xc2,0xc5,0xdf,0x47,0x00,0x2c,0x4b,0x2d,0xec,0x32,0xd5,0x28,0xb5,0x30,0xe0,0x79,0x15,0x2e,0xab,0x97,0xa8,0xcf,0xc5,0x40,0x98,0x30,0x22,0x9f,0xbc,0xdb,0x65,0x06,0xfc,0x58,0xe5,0x55,0x5b,0xe2,0xf8,0x6e,0xc6,0xfc,0xec,0x6c,0x14,0xd2,0xe3,0x9a,0x71,0x8a,0x61,0xea,0x39,0xc6,0x77,0x94,0xdf,0x7b,0x99,0x71,0xdd,0x18 +.byte 0xc6,0x03,0x2d,0x49,0xf6,0xc3,0xe8,0x2b,0x7e,0x3f,0x28,0xfc,0xc8,0xa1,0xb0,0x15,0x31,0x7e,0x83,0xb8,0x14,0x34,0x0e,0x7f,0xde,0x74,0x7b,0xbf,0xb7,0x8e,0xd9,0x31,0x90,0x16,0xb6,0x57,0x14,0x4a,0xc6,0x67,0x3d,0xb9,0x46,0x92,0xf2,0xf9,0x94,0x36,0x2b,0xd6,0x1f,0x84,0xa5,0x8c,0x0f,0xd9,0x8c,0x5f,0x97,0x7a,0x7b,0xff,0xc9,0xf5 +.byte 0x5e,0x13,0x5f,0x19,0x58,0xba,0xa6,0xe8,0x29,0xf4,0xb8,0x7e,0x98,0xb7,0xef,0x1b,0x00,0xe8,0x90,0x8f,0x86,0x4c,0xe0,0x51,0x13,0x8b,0xa1,0x37,0x40,0x38,0x51,0x2f,0x5a,0x9b,0x63,0x8f,0xce,0x9a,0x97,0x07,0x0d,0x8e,0xce,0xb1,0x66,0x89,0x78,0xca,0xa6,0x0c,0x20,0xc4,0xf1,0xe3,0xab,0xe2,0x1c,0x83,0x2b,0x46,0x97,0xe8,0x8f,0x94 +.byte 0xb4,0x71,0x40,0xde,0xa1,0x05,0x4b,0xed,0xbf,0x0c,0x46,0xe1,0x25,0xf1,0xd0,0x5a,0xdb,0x9c,0x2a,0x09,0x03,0x80,0x24,0xc1,0x22,0x02,0xa5,0xde,0xf6,0x4c,0xbc,0x93,0x37,0xa9,0x28,0xb3,0x92,0x19,0xa8,0x3f,0x71,0x90,0x62,0x78,0xaa,0x9a,0x0c,0xab,0x50,0xaf,0x89,0x2b,0xf1,0xf4,0x12,0xbd,0xc9,0xd5,0xee,0x64,0x8b,0x48,0x21,0xd6 +.byte 0xa1,0xa1,0xf2,0x68,0x4a,0xf8,0x06,0x3e,0x20,0x31,0x66,0xb7,0x2f,0x64,0x01,0x5a,0x46,0x14,0x85,0xfb,0xde,0x04,0xc3,0xe4,0xd6,0x25,0x14,0xa0,0xbe,0x4d,0x39,0xd8,0xe0,0x9b,0xb7,0x6b,0x00,0xe6,0x46,0xfb,0xcc,0xa8,0xad,0x67,0x12,0x2c,0x53,0x2c,0xb6,0x9f,0x6e,0xfe,0xbc,0xcc,0x2c,0xa8,0x09,0x17,0x00,0x8e,0xf1,0xf4,0x3e,0xa9 +.byte 0x92,0x4d,0x83,0xe6,0x3c,0xf0,0xd3,0x1c,0xaf,0x84,0x2c,0x59,0x7e,0xda,0x1e,0xfd,0x7d,0xf3,0xef,0x93,0x05,0x03,0xb0,0x76,0x69,0xb5,0x51,0xa8,0x65,0x8f,0x8a,0xf8,0x55,0x92,0x08,0xfe,0xbf,0xc1,0x95,0x98,0x58,0xb1,0xd3,0xb6,0x78,0x4f,0x2f,0x25,0xcb,0x9d,0x32,0x4f,0xa6,0xcc,0xf8,0x36,0xff,0x72,0xb3,0x93,0x3d,0xd8,0x0b,0xe6 +.byte 0xc6,0xf6,0xed,0xcc,0x2a,0xa5,0x44,0x6e,0xe2,0x2d,0x6e,0x02,0xb4,0x7c,0x24,0x7f,0x57,0x02,0x84,0x61,0x8e,0xbd,0x32,0x4e,0x41,0x92,0x01,0x1b,0x8b,0x1d,0xd1,0x1e,0x31,0xc1,0x4c,0x5b,0x0c,0xa7,0x48,0x52,0x67,0xc2,0xd9,0xdc,0x86,0x9d,0xbd,0x6c,0x19,0x95,0x00,0xf0,0xd4,0x47,0xaf,0xfe,0x5d,0xa5,0x81,0xbd,0x1b,0x42,0x62,0xce +.byte 0x18,0x1b,0xa3,0x6f,0xf5,0x0b,0xb7,0x6a,0x3d,0xe3,0xcc,0x41,0x27,0xcd,0x49,0x4b,0xe5,0x2b,0xc4,0x28,0xfa,0xbe,0xd5,0x7e,0xb7,0xac,0xab,0x64,0x3b,0xe3,0x87,0xb1,0x33,0x8b,0xa8,0xe5,0x75,0xce,0x61,0x57,0x89,0xad,0x5f,0x61,0xdd,0x7c,0x06,0x2a,0x3f,0x50,0xb8,0x7e,0xd2,0xfb,0x32,0x83,0x07,0xd4,0xc5,0x3f,0xad,0x64,0x59,0x1f +.byte 0x21,0x59,0x6f,0x1b,0xd7,0x40,0x89,0x28,0x18,0xac,0xca,0xee,0x92,0x1c,0x0d,0x88,0x98,0x7a,0x75,0x68,0xe0,0xe2,0x96,0xda,0x88,0xb3,0xc6,0x21,0x02,0x34,0xfa,0xae,0x0b,0x38,0xcf,0x1c,0x6c,0x7a,0xc9,0xd9,0x5f,0xf0,0x4c,0x73,0xfd,0xe6,0x14,0xf3,0x39,0xed,0xbc,0x28,0x2f,0xf8,0x79,0x02,0x39,0x05,0xf3,0x6a,0x88,0xd9,0x03,0xe2 +.byte 0xb9,0x65,0x81,0x3a,0x34,0x80,0x3f,0x17,0x37,0x1e,0xe8,0x7d,0x41,0x49,0xfb,0x70,0x5d,0x58,0x3a,0x71,0x7b,0x3e,0xd3,0x83,0x0b,0x1b,0x11,0xfc,0x53,0xce,0xc6,0xc4,0x39,0x55,0xbe,0xbe,0x32,0xa5,0x88,0xab,0xcd,0x38,0x78,0x3e,0x52,0xaf,0x64,0x42,0x10,0xc3,0x70,0x81,0x76,0xe9,0x7d,0x8e,0x46,0x41,0xca,0x2c,0x0c,0x4c,0x30,0xd3 +.byte 0xca,0x38,0xa3,0x97,0x2e,0x0f,0xa5,0x18,0x3b,0xaa,0x0f,0x00,0x75,0x35,0x9c,0xcd,0x28,0x83,0xd4,0xa7,0x7c,0xb9,0xcd,0xb5,0x55,0x29,0x4c,0x14,0xcd,0xfc,0x8f,0xaf,0x7d,0x69,0x4f,0xf7,0x0f,0xed,0x7c,0xa5,0x79,0x9d,0x36,0xbb,0x72,0xbc,0xf2,0x14,0xfd,0xf0,0x04,0x2a,0x89,0x1e,0xf7,0x80,0x4c,0x5e,0xb8,0xc1,0xdb,0xfa,0x3c,0x27 +.byte 0xbb,0x30,0x08,0x2b,0xd2,0xf8,0xdb,0xe0,0x8c,0x00,0xe4,0xca,0xa9,0xde,0xb0,0x14,0x5b,0xec,0x6b,0xe6,0x5c,0x90,0x17,0x02,0x59,0x5f,0x5f,0x51,0xf8,0x30,0x10,0x11,0xc4,0xdf,0x37,0x30,0x32,0xb1,0x4d,0x49,0xfe,0x82,0x87,0xd2,0x42,0xf5,0x38,0x76,0xf9,0xa5,0x28,0xfc,0x14,0xb2,0xe0,0x72,0x82,0xde,0xc8,0x47,0x9e,0x8f,0x8a,0xb5 +.byte 0x85,0x44,0x42,0x12,0xc6,0xc0,0xa5,0x60,0x5a,0x27,0xd0,0x36,0x14,0x7b,0x2a,0x83,0x98,0x92,0x08,0xe9,0x03,0xc9,0xc3,0xd3,0x36,0x97,0xba,0x5e,0xd5,0x51,0xcc,0x44,0xeb,0x81,0x76,0xae,0x28,0x94,0x0b,0xf6,0xc7,0xeb,0xae,0x61,0x6f,0x7b,0x34,0xb5,0x8c,0x5f,0x31,0xb6,0x23,0xe3,0xe7,0x4b,0x60,0xe6,0xba,0x8d,0x0e,0xd1,0xb2,0x37 +.byte 0x72,0x3d,0xc1,0x75,0x9b,0x5e,0xcb,0x0f,0xf9,0xe4,0xdb,0x82,0x4c,0xc4,0x37,0xef,0x9d,0xde,0x16,0x85,0xe9,0xc2,0x03,0xd8,0x5b,0xa1,0xff,0xfa,0xd4,0xd7,0x5c,0x34,0xb6,0x1e,0x25,0x96,0xf5,0x8b,0xc3,0xee,0x16,0x1f,0xf8,0x55,0x4e,0x1c,0x83,0x80,0x77,0x1d,0x4f,0xb6,0x95,0x1c,0x91,0x7d,0x50,0x25,0xf4,0x2a,0x5d,0x2e,0xc7,0x8a +.byte 0x14,0xf8,0xb9,0xbc,0xab,0x5b,0xcd,0x47,0xb5,0xaf,0x85,0xc0,0x34,0x27,0x7d,0x6a,0x8c,0x84,0x8a,0xae,0x68,0x60,0x0e,0xa1,0x45,0xf7,0x83,0x66,0x91,0x69,0x30,0xed,0x26,0x5e,0xf5,0x48,0x6b,0x20,0xb3,0x11,0x50,0xf7,0x70,0x9d,0x10,0x50,0x44,0x87,0xfe,0x96,0x5c,0xc6,0xa4,0xa4,0xed,0x5e,0x7f,0x3d,0x90,0x19,0xbe,0x31,0xa3,0xdd +.byte 0x44,0xbb,0x9b,0x51,0x5a,0x06,0x1d,0x2e,0xd7,0xef,0xd1,0x81,0xb6,0xec,0xc6,0x89,0xfb,0x13,0xc5,0x21,0xef,0x9a,0x1a,0x48,0xf2,0xf8,0xb3,0xa3,0xec,0x7f,0x85,0xc1,0xc6,0x8c,0x5f,0xa9,0x30,0x38,0x25,0x1e,0x8d,0xcf,0x18,0x24,0xef,0x5a,0x9a,0x14,0x31,0xc0,0x2c,0x88,0xa5,0x3f,0x50,0x8b,0xb1,0xda,0x5d,0x26,0xd9,0xd3,0x81,0xb1 +.byte 0xec,0xf0,0x42,0x88,0xd0,0x81,0x51,0xf9,0x1b,0xbc,0x43,0xa4,0x37,0xf1,0xd7,0x90,0x21,0x7e,0xa0,0x3e,0x63,0xfb,0x21,0xfa,0x12,0xfb,0xde,0xc7,0xbf,0xb3,0x58,0xe7,0x76,0x42,0x20,0x01,0x3d,0x66,0x80,0xf1,0xb8,0xaf,0xfa,0x7d,0x96,0x89,0x36,0x48,0x95,0xd9,0x6e,0x6d,0xe6,0x4f,0xff,0x2a,0x47,0x61,0xf2,0x04,0xb7,0x83,0x14,0xce +.byte 0x0a,0x3c,0x73,0x17,0x50,0x88,0x03,0x25,0x4a,0xe3,0x13,0x55,0x8b,0x7e,0x50,0x38,0xfc,0x14,0x0b,0x04,0x8e,0xa8,0x5b,0xd6,0x72,0x20,0x60,0xe9,0xaa,0x22,0x82,0x11,0xc6,0xc4,0xd7,0xb9,0xc8,0x0c,0x7e,0x05,0xfb,0x90,0xe4,0x9c,0x28,0x89,0x29,0x99,0x63,0x4d,0xec,0x7b,0x50,0xbd,0xd8,0xa3,0x5b,0x50,0x77,0x19,0x81,0x92,0xce,0x82 + +.align 5 +Lpoly: +.quad 0xffffffffffffffff,0x00000000ffffffff,0x0000000000000000,0xffffffff00000001 +LRR: // 2^512 mod P precomputed for NIST P256 polynomial +.quad 0x0000000000000003,0xfffffffbffffffff,0xfffffffffffffffe,0x00000004fffffffd +Lone_mont: +.quad 0x0000000000000001,0xffffffff00000000,0xffffffffffffffff,0x00000000fffffffe +Lone: +.quad 1,0,0,0 +Lord: +.quad 0xf3b9cac2fc632551,0xbce6faada7179e84,0xffffffffffffffff,0xffffffff00000000 +LordK: +.quad 0xccd1c8aaee00bc4f +.byte 69,67,80,95,78,73,83,84,90,50,53,54,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 + +// void ecp_nistz256_to_mont(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_to_mont + +.align 6 +_ecp_nistz256_to_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-32]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + + ldr x3,LRR // bp[0] + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + adr x2,LRR // &bp[0] + + bl __ecp_nistz256_mul_mont + + ldp x19,x20,[sp,#16] + ldp x29,x30,[sp],#32 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_from_mont(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_from_mont + +.align 4 +_ecp_nistz256_from_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-32]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + + mov x3,#1 // bp[0] + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + adr x2,Lone // &bp[0] + + bl __ecp_nistz256_mul_mont + + ldp x19,x20,[sp,#16] + ldp x29,x30,[sp],#32 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_mul_mont(BN_ULONG x0[4],const BN_ULONG x1[4], +// const BN_ULONG x2[4]); +.globl _ecp_nistz256_mul_mont + +.align 4 +_ecp_nistz256_mul_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-32]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + + ldr x3,[x2] // bp[0] + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_mul_mont + + ldp x19,x20,[sp,#16] + ldp x29,x30,[sp],#32 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_sqr_mont(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_sqr_mont + +.align 4 +_ecp_nistz256_sqr_mont: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-32]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_sqr_mont + + ldp x19,x20,[sp,#16] + ldp x29,x30,[sp],#32 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_add(BN_ULONG x0[4],const BN_ULONG x1[4], +// const BN_ULONG x2[4]); +.globl _ecp_nistz256_add + +.align 4 +_ecp_nistz256_add: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x8,x9,[x2] + ldp x16,x17,[x1,#16] + ldp x10,x11,[x2,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_add + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_div_by_2(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_div_by_2 + +.align 4 +_ecp_nistz256_div_by_2: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x16,x17,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_div_by_2 + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_mul_by_2(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_mul_by_2 + +.align 4 +_ecp_nistz256_mul_by_2: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x16,x17,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + mov x8,x14 + mov x9,x15 + mov x10,x16 + mov x11,x17 + + bl __ecp_nistz256_add // ret = a+a // 2*a + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_mul_by_3(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_mul_by_3 + +.align 4 +_ecp_nistz256_mul_by_3: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x16,x17,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + mov x8,x14 + mov x9,x15 + mov x10,x16 + mov x11,x17 + mov x4,x14 + mov x5,x15 + mov x6,x16 + mov x7,x17 + + bl __ecp_nistz256_add // ret = a+a // 2*a + + mov x8,x4 + mov x9,x5 + mov x10,x6 + mov x11,x7 + + bl __ecp_nistz256_add // ret += a // 2*a+a=3*a + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_sub(BN_ULONG x0[4],const BN_ULONG x1[4], +// const BN_ULONG x2[4]); +.globl _ecp_nistz256_sub + +.align 4 +_ecp_nistz256_sub: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ldp x14,x15,[x1] + ldp x16,x17,[x1,#16] + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_sub_from + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// void ecp_nistz256_neg(BN_ULONG x0[4],const BN_ULONG x1[4]); +.globl _ecp_nistz256_neg + +.align 4 +_ecp_nistz256_neg: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + mov x2,x1 + mov x14,xzr // a = 0 + mov x15,xzr + mov x16,xzr + mov x17,xzr + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + bl __ecp_nistz256_sub_from + + ldp x29,x30,[sp],#16 +.long 0xd50323bf // autiasp + ret + + +// note that __ecp_nistz256_mul_mont expects a[0-3] input pre-loaded +// to x4-x7 and b[0] - to x3 + +.align 4 +__ecp_nistz256_mul_mont: + mul x14,x4,x3 // a[0]*b[0] + umulh x8,x4,x3 + + mul x15,x5,x3 // a[1]*b[0] + umulh x9,x5,x3 + + mul x16,x6,x3 // a[2]*b[0] + umulh x10,x6,x3 + + mul x17,x7,x3 // a[3]*b[0] + umulh x11,x7,x3 + ldr x3,[x2,#8] // b[1] + + adds x15,x15,x8 // accumulate high parts of multiplication + lsl x8,x14,#32 + adcs x16,x16,x9 + lsr x9,x14,#32 + adcs x17,x17,x10 + adc x19,xzr,x11 + mov x20,xzr + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + mul x8,x4,x3 // lo(a[0]*b[i]) + adcs x15,x16,x9 + mul x9,x5,x3 // lo(a[1]*b[i]) + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + mul x10,x6,x3 // lo(a[2]*b[i]) + adcs x17,x19,x11 + mul x11,x7,x3 // lo(a[3]*b[i]) + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts of multiplication + umulh x8,x4,x3 // hi(a[0]*b[i]) + adcs x15,x15,x9 + umulh x9,x5,x3 // hi(a[1]*b[i]) + adcs x16,x16,x10 + umulh x10,x6,x3 // hi(a[2]*b[i]) + adcs x17,x17,x11 + umulh x11,x7,x3 // hi(a[3]*b[i]) + adc x19,x19,xzr + ldr x3,[x2,#8*(1+1)] // b[1+1] + adds x15,x15,x8 // accumulate high parts of multiplication + lsl x8,x14,#32 + adcs x16,x16,x9 + lsr x9,x14,#32 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + mul x8,x4,x3 // lo(a[0]*b[i]) + adcs x15,x16,x9 + mul x9,x5,x3 // lo(a[1]*b[i]) + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + mul x10,x6,x3 // lo(a[2]*b[i]) + adcs x17,x19,x11 + mul x11,x7,x3 // lo(a[3]*b[i]) + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts of multiplication + umulh x8,x4,x3 // hi(a[0]*b[i]) + adcs x15,x15,x9 + umulh x9,x5,x3 // hi(a[1]*b[i]) + adcs x16,x16,x10 + umulh x10,x6,x3 // hi(a[2]*b[i]) + adcs x17,x17,x11 + umulh x11,x7,x3 // hi(a[3]*b[i]) + adc x19,x19,xzr + ldr x3,[x2,#8*(2+1)] // b[2+1] + adds x15,x15,x8 // accumulate high parts of multiplication + lsl x8,x14,#32 + adcs x16,x16,x9 + lsr x9,x14,#32 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + mul x8,x4,x3 // lo(a[0]*b[i]) + adcs x15,x16,x9 + mul x9,x5,x3 // lo(a[1]*b[i]) + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + mul x10,x6,x3 // lo(a[2]*b[i]) + adcs x17,x19,x11 + mul x11,x7,x3 // lo(a[3]*b[i]) + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts of multiplication + umulh x8,x4,x3 // hi(a[0]*b[i]) + adcs x15,x15,x9 + umulh x9,x5,x3 // hi(a[1]*b[i]) + adcs x16,x16,x10 + umulh x10,x6,x3 // hi(a[2]*b[i]) + adcs x17,x17,x11 + umulh x11,x7,x3 // hi(a[3]*b[i]) + adc x19,x19,xzr + adds x15,x15,x8 // accumulate high parts of multiplication + lsl x8,x14,#32 + adcs x16,x16,x9 + lsr x9,x14,#32 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + // last reduction + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + adcs x17,x19,x11 + adc x19,x20,xzr + + adds x8,x14,#1 // subs x8,x14,#-1 // tmp = ret-modulus + sbcs x9,x15,x12 + sbcs x10,x16,xzr + sbcs x11,x17,x13 + sbcs xzr,x19,xzr // did it borrow? + + csel x14,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x15,x15,x9,lo + csel x16,x16,x10,lo + stp x14,x15,[x0] + csel x17,x17,x11,lo + stp x16,x17,[x0,#16] + + ret + + +// note that __ecp_nistz256_sqr_mont expects a[0-3] input pre-loaded +// to x4-x7 + +.align 4 +__ecp_nistz256_sqr_mont: + // | | | | | |a1*a0| | + // | | | | |a2*a0| | | + // | |a3*a2|a3*a0| | | | + // | | | |a2*a1| | | | + // | | |a3*a1| | | | | + // *| | | | | | | | 2| + // +|a3*a3|a2*a2|a1*a1|a0*a0| + // |--+--+--+--+--+--+--+--| + // |A7|A6|A5|A4|A3|A2|A1|A0|, where Ax is , i.e. follow + // + // "can't overflow" below mark carrying into high part of + // multiplication result, which can't overflow, because it + // can never be all ones. + + mul x15,x5,x4 // a[1]*a[0] + umulh x9,x5,x4 + mul x16,x6,x4 // a[2]*a[0] + umulh x10,x6,x4 + mul x17,x7,x4 // a[3]*a[0] + umulh x19,x7,x4 + + adds x16,x16,x9 // accumulate high parts of multiplication + mul x8,x6,x5 // a[2]*a[1] + umulh x9,x6,x5 + adcs x17,x17,x10 + mul x10,x7,x5 // a[3]*a[1] + umulh x11,x7,x5 + adc x19,x19,xzr // can't overflow + + mul x20,x7,x6 // a[3]*a[2] + umulh x1,x7,x6 + + adds x9,x9,x10 // accumulate high parts of multiplication + mul x14,x4,x4 // a[0]*a[0] + adc x10,x11,xzr // can't overflow + + adds x17,x17,x8 // accumulate low parts of multiplication + umulh x4,x4,x4 + adcs x19,x19,x9 + mul x9,x5,x5 // a[1]*a[1] + adcs x20,x20,x10 + umulh x5,x5,x5 + adc x1,x1,xzr // can't overflow + + adds x15,x15,x15 // acc[1-6]*=2 + mul x10,x6,x6 // a[2]*a[2] + adcs x16,x16,x16 + umulh x6,x6,x6 + adcs x17,x17,x17 + mul x11,x7,x7 // a[3]*a[3] + adcs x19,x19,x19 + umulh x7,x7,x7 + adcs x20,x20,x20 + adcs x1,x1,x1 + adc x2,xzr,xzr + + adds x15,x15,x4 // +a[i]*a[i] + adcs x16,x16,x9 + adcs x17,x17,x5 + adcs x19,x19,x10 + adcs x20,x20,x6 + lsl x8,x14,#32 + adcs x1,x1,x11 + lsr x9,x14,#32 + adc x2,x2,x7 + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + lsl x8,x14,#32 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + lsr x9,x14,#32 + adc x17,x11,xzr // can't overflow + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + lsl x8,x14,#32 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + lsr x9,x14,#32 + adc x17,x11,xzr // can't overflow + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + lsl x8,x14,#32 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + lsr x9,x14,#32 + adc x17,x11,xzr // can't overflow + subs x10,x14,x8 // "*0xffff0001" + sbc x11,x14,x9 + adds x14,x15,x8 // +=acc[0]<<96 and omit acc[0] + adcs x15,x16,x9 + adcs x16,x17,x10 // +=acc[0]*0xffff0001 + adc x17,x11,xzr // can't overflow + + adds x14,x14,x19 // accumulate upper half + adcs x15,x15,x20 + adcs x16,x16,x1 + adcs x17,x17,x2 + adc x19,xzr,xzr + + adds x8,x14,#1 // subs x8,x14,#-1 // tmp = ret-modulus + sbcs x9,x15,x12 + sbcs x10,x16,xzr + sbcs x11,x17,x13 + sbcs xzr,x19,xzr // did it borrow? + + csel x14,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x15,x15,x9,lo + csel x16,x16,x10,lo + stp x14,x15,[x0] + csel x17,x17,x11,lo + stp x16,x17,[x0,#16] + + ret + + +// Note that __ecp_nistz256_add expects both input vectors pre-loaded to +// x4-x7 and x8-x11. This is done because it's used in multiple +// contexts, e.g. in multiplication by 2 and 3... + +.align 4 +__ecp_nistz256_add: + adds x14,x14,x8 // ret = a+b + adcs x15,x15,x9 + adcs x16,x16,x10 + adcs x17,x17,x11 + adc x1,xzr,xzr // zap x1 + + adds x8,x14,#1 // subs x8,x4,#-1 // tmp = ret-modulus + sbcs x9,x15,x12 + sbcs x10,x16,xzr + sbcs x11,x17,x13 + sbcs xzr,x1,xzr // did subtraction borrow? + + csel x14,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x15,x15,x9,lo + csel x16,x16,x10,lo + stp x14,x15,[x0] + csel x17,x17,x11,lo + stp x16,x17,[x0,#16] + + ret + + + +.align 4 +__ecp_nistz256_sub_from: + ldp x8,x9,[x2] + ldp x10,x11,[x2,#16] + subs x14,x14,x8 // ret = a-b + sbcs x15,x15,x9 + sbcs x16,x16,x10 + sbcs x17,x17,x11 + sbc x1,xzr,xzr // zap x1 + + subs x8,x14,#1 // adds x8,x4,#-1 // tmp = ret+modulus + adcs x9,x15,x12 + adcs x10,x16,xzr + adc x11,x17,x13 + cmp x1,xzr // did subtraction borrow? + + csel x14,x14,x8,eq // ret = borrow ? ret+modulus : ret + csel x15,x15,x9,eq + csel x16,x16,x10,eq + stp x14,x15,[x0] + csel x17,x17,x11,eq + stp x16,x17,[x0,#16] + + ret + + + +.align 4 +__ecp_nistz256_sub_morf: + ldp x8,x9,[x2] + ldp x10,x11,[x2,#16] + subs x14,x8,x14 // ret = b-a + sbcs x15,x9,x15 + sbcs x16,x10,x16 + sbcs x17,x11,x17 + sbc x1,xzr,xzr // zap x1 + + subs x8,x14,#1 // adds x8,x4,#-1 // tmp = ret+modulus + adcs x9,x15,x12 + adcs x10,x16,xzr + adc x11,x17,x13 + cmp x1,xzr // did subtraction borrow? + + csel x14,x14,x8,eq // ret = borrow ? ret+modulus : ret + csel x15,x15,x9,eq + csel x16,x16,x10,eq + stp x14,x15,[x0] + csel x17,x17,x11,eq + stp x16,x17,[x0,#16] + + ret + + + +.align 4 +__ecp_nistz256_div_by_2: + subs x8,x14,#1 // adds x8,x4,#-1 // tmp = a+modulus + adcs x9,x15,x12 + adcs x10,x16,xzr + adcs x11,x17,x13 + adc x1,xzr,xzr // zap x1 + tst x14,#1 // is a even? + + csel x14,x14,x8,eq // ret = even ? a : a+modulus + csel x15,x15,x9,eq + csel x16,x16,x10,eq + csel x17,x17,x11,eq + csel x1,xzr,x1,eq + + lsr x14,x14,#1 // ret >>= 1 + orr x14,x14,x15,lsl#63 + lsr x15,x15,#1 + orr x15,x15,x16,lsl#63 + lsr x16,x16,#1 + orr x16,x16,x17,lsl#63 + lsr x17,x17,#1 + stp x14,x15,[x0] + orr x17,x17,x1,lsl#63 + stp x16,x17,[x0,#16] + + ret + +.globl _ecp_nistz256_point_double + +.align 5 +_ecp_nistz256_point_double: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + sub sp,sp,#32*4 + +Ldouble_shortcut: + ldp x14,x15,[x1,#32] + mov x21,x0 + ldp x16,x17,[x1,#48] + mov x22,x1 + ldr x12,Lpoly+8 + mov x8,x14 + ldr x13,Lpoly+24 + mov x9,x15 + ldp x4,x5,[x22,#64] // forward load for p256_sqr_mont + mov x10,x16 + mov x11,x17 + ldp x6,x7,[x22,#64+16] + add x0,sp,#0 + bl __ecp_nistz256_add // p256_mul_by_2(S, in_y); + + add x0,sp,#64 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Zsqr, in_z); + + ldp x8,x9,[x22] + ldp x10,x11,[x22,#16] + mov x4,x14 // put Zsqr aside for p256_sub + mov x5,x15 + mov x6,x16 + mov x7,x17 + add x0,sp,#32 + bl __ecp_nistz256_add // p256_add(M, Zsqr, in_x); + + add x2,x22,#0 + mov x14,x4 // restore Zsqr + mov x15,x5 + ldp x4,x5,[sp,#0] // forward load for p256_sqr_mont + mov x16,x6 + mov x17,x7 + ldp x6,x7,[sp,#0+16] + add x0,sp,#64 + bl __ecp_nistz256_sub_morf // p256_sub(Zsqr, in_x, Zsqr); + + add x0,sp,#0 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(S, S); + + ldr x3,[x22,#32] + ldp x4,x5,[x22,#64] + ldp x6,x7,[x22,#64+16] + add x2,x22,#32 + add x0,sp,#96 + bl __ecp_nistz256_mul_mont // p256_mul_mont(tmp0, in_z, in_y); + + mov x8,x14 + mov x9,x15 + ldp x4,x5,[sp,#0] // forward load for p256_sqr_mont + mov x10,x16 + mov x11,x17 + ldp x6,x7,[sp,#0+16] + add x0,x21,#64 + bl __ecp_nistz256_add // p256_mul_by_2(res_z, tmp0); + + add x0,sp,#96 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(tmp0, S); + + ldr x3,[sp,#64] // forward load for p256_mul_mont + ldp x4,x5,[sp,#32] + ldp x6,x7,[sp,#32+16] + add x0,x21,#32 + bl __ecp_nistz256_div_by_2 // p256_div_by_2(res_y, tmp0); + + add x2,sp,#64 + add x0,sp,#32 + bl __ecp_nistz256_mul_mont // p256_mul_mont(M, M, Zsqr); + + mov x8,x14 // duplicate M + mov x9,x15 + mov x10,x16 + mov x11,x17 + mov x4,x14 // put M aside + mov x5,x15 + mov x6,x16 + mov x7,x17 + add x0,sp,#32 + bl __ecp_nistz256_add + mov x8,x4 // restore M + mov x9,x5 + ldr x3,[x22] // forward load for p256_mul_mont + mov x10,x6 + ldp x4,x5,[sp,#0] + mov x11,x7 + ldp x6,x7,[sp,#0+16] + bl __ecp_nistz256_add // p256_mul_by_3(M, M); + + add x2,x22,#0 + add x0,sp,#0 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S, S, in_x); + + mov x8,x14 + mov x9,x15 + ldp x4,x5,[sp,#32] // forward load for p256_sqr_mont + mov x10,x16 + mov x11,x17 + ldp x6,x7,[sp,#32+16] + add x0,sp,#96 + bl __ecp_nistz256_add // p256_mul_by_2(tmp0, S); + + add x0,x21,#0 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(res_x, M); + + add x2,sp,#96 + bl __ecp_nistz256_sub_from // p256_sub(res_x, res_x, tmp0); + + add x2,sp,#0 + add x0,sp,#0 + bl __ecp_nistz256_sub_morf // p256_sub(S, S, res_x); + + ldr x3,[sp,#32] + mov x4,x14 // copy S + mov x5,x15 + mov x6,x16 + mov x7,x17 + add x2,sp,#32 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S, S, M); + + add x2,x21,#32 + add x0,x21,#32 + bl __ecp_nistz256_sub_from // p256_sub(res_y, S, res_y); + + add sp,x29,#0 // destroy frame + ldp x19,x20,[x29,#16] + ldp x21,x22,[x29,#32] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + +.globl _ecp_nistz256_point_add + +.align 5 +_ecp_nistz256_point_add: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#32*12 + + ldp x4,x5,[x2,#64] // in2_z + ldp x6,x7,[x2,#64+16] + mov x21,x0 + mov x22,x1 + mov x23,x2 + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + orr x8,x4,x5 + orr x10,x6,x7 + orr x25,x8,x10 + cmp x25,#0 + csetm x25,ne // ~in2infty + add x0,sp,#192 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Z2sqr, in2_z); + + ldp x4,x5,[x22,#64] // in1_z + ldp x6,x7,[x22,#64+16] + orr x8,x4,x5 + orr x10,x6,x7 + orr x24,x8,x10 + cmp x24,#0 + csetm x24,ne // ~in1infty + add x0,sp,#128 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Z1sqr, in1_z); + + ldr x3,[x23,#64] + ldp x4,x5,[sp,#192] + ldp x6,x7,[sp,#192+16] + add x2,x23,#64 + add x0,sp,#320 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S1, Z2sqr, in2_z); + + ldr x3,[x22,#64] + ldp x4,x5,[sp,#128] + ldp x6,x7,[sp,#128+16] + add x2,x22,#64 + add x0,sp,#352 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, Z1sqr, in1_z); + + ldr x3,[x22,#32] + ldp x4,x5,[sp,#320] + ldp x6,x7,[sp,#320+16] + add x2,x22,#32 + add x0,sp,#320 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S1, S1, in1_y); + + ldr x3,[x23,#32] + ldp x4,x5,[sp,#352] + ldp x6,x7,[sp,#352+16] + add x2,x23,#32 + add x0,sp,#352 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, S2, in2_y); + + add x2,sp,#320 + ldr x3,[sp,#192] // forward load for p256_mul_mont + ldp x4,x5,[x22] + ldp x6,x7,[x22,#16] + add x0,sp,#160 + bl __ecp_nistz256_sub_from // p256_sub(R, S2, S1); + + orr x14,x14,x15 // see if result is zero + orr x16,x16,x17 + orr x26,x14,x16 // ~is_equal(S1,S2) + + add x2,sp,#192 + add x0,sp,#256 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U1, in1_x, Z2sqr); + + ldr x3,[sp,#128] + ldp x4,x5,[x23] + ldp x6,x7,[x23,#16] + add x2,sp,#128 + add x0,sp,#288 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, in2_x, Z1sqr); + + add x2,sp,#256 + ldp x4,x5,[sp,#160] // forward load for p256_sqr_mont + ldp x6,x7,[sp,#160+16] + add x0,sp,#96 + bl __ecp_nistz256_sub_from // p256_sub(H, U2, U1); + + orr x14,x14,x15 // see if result is zero + orr x16,x16,x17 + orr x14,x14,x16 // ~is_equal(U1,U2) + + mvn x27,x24 // -1/0 -> 0/-1 + mvn x28,x25 // -1/0 -> 0/-1 + orr x14,x14,x27 + orr x14,x14,x28 + orr x14,x14,x26 + cbnz x14,Ladd_proceed // if(~is_equal(U1,U2) | in1infty | in2infty | ~is_equal(S1,S2)) + +Ladd_double: + mov x1,x22 + mov x0,x21 + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + add sp,sp,#32*(12-4) // difference in stack frames + b Ldouble_shortcut + +.align 4 +Ladd_proceed: + add x0,sp,#192 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Rsqr, R); + + ldr x3,[x22,#64] + ldp x4,x5,[sp,#96] + ldp x6,x7,[sp,#96+16] + add x2,x22,#64 + add x0,sp,#64 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_z, H, in1_z); + + ldp x4,x5,[sp,#96] + ldp x6,x7,[sp,#96+16] + add x0,sp,#128 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Hsqr, H); + + ldr x3,[x23,#64] + ldp x4,x5,[sp,#64] + ldp x6,x7,[sp,#64+16] + add x2,x23,#64 + add x0,sp,#64 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_z, res_z, in2_z); + + ldr x3,[sp,#96] + ldp x4,x5,[sp,#128] + ldp x6,x7,[sp,#128+16] + add x2,sp,#96 + add x0,sp,#224 + bl __ecp_nistz256_mul_mont // p256_mul_mont(Hcub, Hsqr, H); + + ldr x3,[sp,#128] + ldp x4,x5,[sp,#256] + ldp x6,x7,[sp,#256+16] + add x2,sp,#128 + add x0,sp,#288 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, U1, Hsqr); + + mov x8,x14 + mov x9,x15 + mov x10,x16 + mov x11,x17 + add x0,sp,#128 + bl __ecp_nistz256_add // p256_mul_by_2(Hsqr, U2); + + add x2,sp,#192 + add x0,sp,#0 + bl __ecp_nistz256_sub_morf // p256_sub(res_x, Rsqr, Hsqr); + + add x2,sp,#224 + bl __ecp_nistz256_sub_from // p256_sub(res_x, res_x, Hcub); + + add x2,sp,#288 + ldr x3,[sp,#224] // forward load for p256_mul_mont + ldp x4,x5,[sp,#320] + ldp x6,x7,[sp,#320+16] + add x0,sp,#32 + bl __ecp_nistz256_sub_morf // p256_sub(res_y, U2, res_x); + + add x2,sp,#224 + add x0,sp,#352 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, S1, Hcub); + + ldr x3,[sp,#160] + ldp x4,x5,[sp,#32] + ldp x6,x7,[sp,#32+16] + add x2,sp,#160 + add x0,sp,#32 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_y, res_y, R); + + add x2,sp,#352 + bl __ecp_nistz256_sub_from // p256_sub(res_y, res_y, S2); + + ldp x4,x5,[sp,#0] // res + ldp x6,x7,[sp,#0+16] + ldp x8,x9,[x23] // in2 + ldp x10,x11,[x23,#16] + ldp x14,x15,[x22,#0] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#0+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + ldp x4,x5,[sp,#0+0+32] // res + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + ldp x6,x7,[sp,#0+0+48] + csel x14,x8,x14,ne + csel x15,x9,x15,ne + ldp x8,x9,[x23,#0+32] // in2 + csel x16,x10,x16,ne + csel x17,x11,x17,ne + ldp x10,x11,[x23,#0+48] + stp x14,x15,[x21,#0] + stp x16,x17,[x21,#0+16] + ldp x14,x15,[x22,#32] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#32+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + ldp x4,x5,[sp,#0+32+32] // res + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + ldp x6,x7,[sp,#0+32+48] + csel x14,x8,x14,ne + csel x15,x9,x15,ne + ldp x8,x9,[x23,#32+32] // in2 + csel x16,x10,x16,ne + csel x17,x11,x17,ne + ldp x10,x11,[x23,#32+48] + stp x14,x15,[x21,#32] + stp x16,x17,[x21,#32+16] + ldp x14,x15,[x22,#64] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#64+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + csel x14,x8,x14,ne + csel x15,x9,x15,ne + csel x16,x10,x16,ne + csel x17,x11,x17,ne + stp x14,x15,[x21,#64] + stp x16,x17,[x21,#64+16] + +Ladd_done: + add sp,x29,#0 // destroy frame + ldp x19,x20,[x29,#16] + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#96 +.long 0xd50323bf // autiasp + ret + +.globl _ecp_nistz256_point_add_affine + +.align 5 +_ecp_nistz256_point_add_affine: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + sub sp,sp,#32*10 + + mov x21,x0 + mov x22,x1 + mov x23,x2 + ldr x12,Lpoly+8 + ldr x13,Lpoly+24 + + ldp x4,x5,[x1,#64] // in1_z + ldp x6,x7,[x1,#64+16] + orr x8,x4,x5 + orr x10,x6,x7 + orr x24,x8,x10 + cmp x24,#0 + csetm x24,ne // ~in1infty + + ldp x14,x15,[x2] // in2_x + ldp x16,x17,[x2,#16] + ldp x8,x9,[x2,#32] // in2_y + ldp x10,x11,[x2,#48] + orr x14,x14,x15 + orr x16,x16,x17 + orr x8,x8,x9 + orr x10,x10,x11 + orr x14,x14,x16 + orr x8,x8,x10 + orr x25,x14,x8 + cmp x25,#0 + csetm x25,ne // ~in2infty + + add x0,sp,#128 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Z1sqr, in1_z); + + mov x4,x14 + mov x5,x15 + mov x6,x16 + mov x7,x17 + ldr x3,[x23] + add x2,x23,#0 + add x0,sp,#96 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, Z1sqr, in2_x); + + add x2,x22,#0 + ldr x3,[x22,#64] // forward load for p256_mul_mont + ldp x4,x5,[sp,#128] + ldp x6,x7,[sp,#128+16] + add x0,sp,#160 + bl __ecp_nistz256_sub_from // p256_sub(H, U2, in1_x); + + add x2,x22,#64 + add x0,sp,#128 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, Z1sqr, in1_z); + + ldr x3,[x22,#64] + ldp x4,x5,[sp,#160] + ldp x6,x7,[sp,#160+16] + add x2,x22,#64 + add x0,sp,#64 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_z, H, in1_z); + + ldr x3,[x23,#32] + ldp x4,x5,[sp,#128] + ldp x6,x7,[sp,#128+16] + add x2,x23,#32 + add x0,sp,#128 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, S2, in2_y); + + add x2,x22,#32 + ldp x4,x5,[sp,#160] // forward load for p256_sqr_mont + ldp x6,x7,[sp,#160+16] + add x0,sp,#192 + bl __ecp_nistz256_sub_from // p256_sub(R, S2, in1_y); + + add x0,sp,#224 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Hsqr, H); + + ldp x4,x5,[sp,#192] + ldp x6,x7,[sp,#192+16] + add x0,sp,#288 + bl __ecp_nistz256_sqr_mont // p256_sqr_mont(Rsqr, R); + + ldr x3,[sp,#160] + ldp x4,x5,[sp,#224] + ldp x6,x7,[sp,#224+16] + add x2,sp,#160 + add x0,sp,#256 + bl __ecp_nistz256_mul_mont // p256_mul_mont(Hcub, Hsqr, H); + + ldr x3,[x22] + ldp x4,x5,[sp,#224] + ldp x6,x7,[sp,#224+16] + add x2,x22,#0 + add x0,sp,#96 + bl __ecp_nistz256_mul_mont // p256_mul_mont(U2, in1_x, Hsqr); + + mov x8,x14 + mov x9,x15 + mov x10,x16 + mov x11,x17 + add x0,sp,#224 + bl __ecp_nistz256_add // p256_mul_by_2(Hsqr, U2); + + add x2,sp,#288 + add x0,sp,#0 + bl __ecp_nistz256_sub_morf // p256_sub(res_x, Rsqr, Hsqr); + + add x2,sp,#256 + bl __ecp_nistz256_sub_from // p256_sub(res_x, res_x, Hcub); + + add x2,sp,#96 + ldr x3,[x22,#32] // forward load for p256_mul_mont + ldp x4,x5,[sp,#256] + ldp x6,x7,[sp,#256+16] + add x0,sp,#32 + bl __ecp_nistz256_sub_morf // p256_sub(res_y, U2, res_x); + + add x2,x22,#32 + add x0,sp,#128 + bl __ecp_nistz256_mul_mont // p256_mul_mont(S2, in1_y, Hcub); + + ldr x3,[sp,#192] + ldp x4,x5,[sp,#32] + ldp x6,x7,[sp,#32+16] + add x2,sp,#192 + add x0,sp,#32 + bl __ecp_nistz256_mul_mont // p256_mul_mont(res_y, res_y, R); + + add x2,sp,#128 + bl __ecp_nistz256_sub_from // p256_sub(res_y, res_y, S2); + + ldp x4,x5,[sp,#0] // res + ldp x6,x7,[sp,#0+16] + ldp x8,x9,[x23] // in2 + ldp x10,x11,[x23,#16] + ldp x14,x15,[x22,#0] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#0+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + ldp x4,x5,[sp,#0+0+32] // res + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + ldp x6,x7,[sp,#0+0+48] + csel x14,x8,x14,ne + csel x15,x9,x15,ne + ldp x8,x9,[x23,#0+32] // in2 + csel x16,x10,x16,ne + csel x17,x11,x17,ne + ldp x10,x11,[x23,#0+48] + stp x14,x15,[x21,#0] + stp x16,x17,[x21,#0+16] + adr x23,Lone_mont-64 + ldp x14,x15,[x22,#32] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#32+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + ldp x4,x5,[sp,#0+32+32] // res + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + ldp x6,x7,[sp,#0+32+48] + csel x14,x8,x14,ne + csel x15,x9,x15,ne + ldp x8,x9,[x23,#32+32] // in2 + csel x16,x10,x16,ne + csel x17,x11,x17,ne + ldp x10,x11,[x23,#32+48] + stp x14,x15,[x21,#32] + stp x16,x17,[x21,#32+16] + ldp x14,x15,[x22,#64] // in1 + cmp x24,#0 // ~, remember? + ldp x16,x17,[x22,#64+16] + csel x8,x4,x8,ne + csel x9,x5,x9,ne + csel x10,x6,x10,ne + csel x11,x7,x11,ne + cmp x25,#0 // ~, remember? + csel x14,x8,x14,ne + csel x15,x9,x15,ne + csel x16,x10,x16,ne + csel x17,x11,x17,ne + stp x14,x15,[x21,#64] + stp x16,x17,[x21,#64+16] + + add sp,x29,#0 // destroy frame + ldp x19,x20,[x29,#16] + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x29,x30,[sp],#80 +.long 0xd50323bf // autiasp + ret + +//////////////////////////////////////////////////////////////////////// +// void ecp_nistz256_ord_mul_mont(uint64_t res[4], uint64_t a[4], +// uint64_t b[4]); +.globl _ecp_nistz256_ord_mul_mont + +.align 4 +_ecp_nistz256_ord_mul_mont: + stp x29,x30,[sp,#-64]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + + adr x23,Lord + ldr x3,[x2] // bp[0] + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + + ldp x12,x13,[x23,#0] + ldp x21,x22,[x23,#16] + ldr x23,[x23,#32] + + mul x14,x4,x3 // a[0]*b[0] + umulh x8,x4,x3 + + mul x15,x5,x3 // a[1]*b[0] + umulh x9,x5,x3 + + mul x16,x6,x3 // a[2]*b[0] + umulh x10,x6,x3 + + mul x17,x7,x3 // a[3]*b[0] + umulh x19,x7,x3 + + mul x24,x14,x23 + + adds x15,x15,x8 // accumulate high parts of multiplication + adcs x16,x16,x9 + adcs x17,x17,x10 + adc x19,x19,xzr + mov x20,xzr + ldr x3,[x2,#8*1] // b[i] + + lsl x8,x24,#32 + subs x16,x16,x24 + lsr x9,x24,#32 + sbcs x17,x17,x8 + sbcs x19,x19,x9 + sbc x20,x20,xzr + + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + mul x8,x4,x3 + adc x11,x11,xzr + mul x9,x5,x3 + + adds x14,x15,x10 + mul x10,x6,x3 + adcs x15,x16,x11 + mul x11,x7,x3 + adcs x16,x17,x24 + adcs x17,x19,x24 + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts + umulh x8,x4,x3 + adcs x15,x15,x9 + umulh x9,x5,x3 + adcs x16,x16,x10 + umulh x10,x6,x3 + adcs x17,x17,x11 + umulh x11,x7,x3 + adc x19,x19,xzr + mul x24,x14,x23 + adds x15,x15,x8 // accumulate high parts + adcs x16,x16,x9 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + ldr x3,[x2,#8*2] // b[i] + + lsl x8,x24,#32 + subs x16,x16,x24 + lsr x9,x24,#32 + sbcs x17,x17,x8 + sbcs x19,x19,x9 + sbc x20,x20,xzr + + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + mul x8,x4,x3 + adc x11,x11,xzr + mul x9,x5,x3 + + adds x14,x15,x10 + mul x10,x6,x3 + adcs x15,x16,x11 + mul x11,x7,x3 + adcs x16,x17,x24 + adcs x17,x19,x24 + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts + umulh x8,x4,x3 + adcs x15,x15,x9 + umulh x9,x5,x3 + adcs x16,x16,x10 + umulh x10,x6,x3 + adcs x17,x17,x11 + umulh x11,x7,x3 + adc x19,x19,xzr + mul x24,x14,x23 + adds x15,x15,x8 // accumulate high parts + adcs x16,x16,x9 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + ldr x3,[x2,#8*3] // b[i] + + lsl x8,x24,#32 + subs x16,x16,x24 + lsr x9,x24,#32 + sbcs x17,x17,x8 + sbcs x19,x19,x9 + sbc x20,x20,xzr + + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + mul x8,x4,x3 + adc x11,x11,xzr + mul x9,x5,x3 + + adds x14,x15,x10 + mul x10,x6,x3 + adcs x15,x16,x11 + mul x11,x7,x3 + adcs x16,x17,x24 + adcs x17,x19,x24 + adc x19,x20,xzr + + adds x14,x14,x8 // accumulate low parts + umulh x8,x4,x3 + adcs x15,x15,x9 + umulh x9,x5,x3 + adcs x16,x16,x10 + umulh x10,x6,x3 + adcs x17,x17,x11 + umulh x11,x7,x3 + adc x19,x19,xzr + mul x24,x14,x23 + adds x15,x15,x8 // accumulate high parts + adcs x16,x16,x9 + adcs x17,x17,x10 + adcs x19,x19,x11 + adc x20,xzr,xzr + lsl x8,x24,#32 // last reduction + subs x16,x16,x24 + lsr x9,x24,#32 + sbcs x17,x17,x8 + sbcs x19,x19,x9 + sbc x20,x20,xzr + + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + adc x11,x11,xzr + + adds x14,x15,x10 + adcs x15,x16,x11 + adcs x16,x17,x24 + adcs x17,x19,x24 + adc x19,x20,xzr + + subs x8,x14,x12 // ret -= modulus + sbcs x9,x15,x13 + sbcs x10,x16,x21 + sbcs x11,x17,x22 + sbcs xzr,x19,xzr + + csel x14,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x15,x15,x9,lo + csel x16,x16,x10,lo + stp x14,x15,[x0] + csel x17,x17,x11,lo + stp x16,x17,[x0,#16] + + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x23,x24,[sp,#48] + ldr x29,[sp],#64 + ret + + +//////////////////////////////////////////////////////////////////////// +// void ecp_nistz256_ord_sqr_mont(uint64_t res[4], uint64_t a[4], +// int rep); +.globl _ecp_nistz256_ord_sqr_mont + +.align 4 +_ecp_nistz256_ord_sqr_mont: + stp x29,x30,[sp,#-64]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + + adr x23,Lord + ldp x4,x5,[x1] + ldp x6,x7,[x1,#16] + + ldp x12,x13,[x23,#0] + ldp x21,x22,[x23,#16] + ldr x23,[x23,#32] + b Loop_ord_sqr + +.align 4 +Loop_ord_sqr: + sub x2,x2,#1 + //////////////////////////////////////////////////////////////// + // | | | | | |a1*a0| | + // | | | | |a2*a0| | | + // | |a3*a2|a3*a0| | | | + // | | | |a2*a1| | | | + // | | |a3*a1| | | | | + // *| | | | | | | | 2| + // +|a3*a3|a2*a2|a1*a1|a0*a0| + // |--+--+--+--+--+--+--+--| + // |A7|A6|A5|A4|A3|A2|A1|A0|, where Ax is , i.e. follow + // + // "can't overflow" below mark carrying into high part of + // multiplication result, which can't overflow, because it + // can never be all ones. + + mul x15,x5,x4 // a[1]*a[0] + umulh x9,x5,x4 + mul x16,x6,x4 // a[2]*a[0] + umulh x10,x6,x4 + mul x17,x7,x4 // a[3]*a[0] + umulh x19,x7,x4 + + adds x16,x16,x9 // accumulate high parts of multiplication + mul x8,x6,x5 // a[2]*a[1] + umulh x9,x6,x5 + adcs x17,x17,x10 + mul x10,x7,x5 // a[3]*a[1] + umulh x11,x7,x5 + adc x19,x19,xzr // can't overflow + + mul x20,x7,x6 // a[3]*a[2] + umulh x1,x7,x6 + + adds x9,x9,x10 // accumulate high parts of multiplication + mul x14,x4,x4 // a[0]*a[0] + adc x10,x11,xzr // can't overflow + + adds x17,x17,x8 // accumulate low parts of multiplication + umulh x4,x4,x4 + adcs x19,x19,x9 + mul x9,x5,x5 // a[1]*a[1] + adcs x20,x20,x10 + umulh x5,x5,x5 + adc x1,x1,xzr // can't overflow + + adds x15,x15,x15 // acc[1-6]*=2 + mul x10,x6,x6 // a[2]*a[2] + adcs x16,x16,x16 + umulh x6,x6,x6 + adcs x17,x17,x17 + mul x11,x7,x7 // a[3]*a[3] + adcs x19,x19,x19 + umulh x7,x7,x7 + adcs x20,x20,x20 + adcs x1,x1,x1 + adc x3,xzr,xzr + + adds x15,x15,x4 // +a[i]*a[i] + mul x24,x14,x23 + adcs x16,x16,x9 + adcs x17,x17,x5 + adcs x19,x19,x10 + adcs x20,x20,x6 + adcs x1,x1,x11 + adc x3,x3,x7 + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + adc x11,x11,xzr + + adds x14,x15,x10 + adcs x15,x16,x11 + adcs x16,x17,x24 + adc x17,xzr,x24 // can't overflow + mul x11,x14,x23 + lsl x8,x24,#32 + subs x15,x15,x24 + lsr x9,x24,#32 + sbcs x16,x16,x8 + sbc x17,x17,x9 // can't borrow + subs xzr,x14,#1 + umulh x9,x12,x11 + mul x10,x13,x11 + umulh x24,x13,x11 + + adcs x10,x10,x9 + adc x24,x24,xzr + + adds x14,x15,x10 + adcs x15,x16,x24 + adcs x16,x17,x11 + adc x17,xzr,x11 // can't overflow + mul x24,x14,x23 + lsl x8,x11,#32 + subs x15,x15,x11 + lsr x9,x11,#32 + sbcs x16,x16,x8 + sbc x17,x17,x9 // can't borrow + subs xzr,x14,#1 + umulh x9,x12,x24 + mul x10,x13,x24 + umulh x11,x13,x24 + + adcs x10,x10,x9 + adc x11,x11,xzr + + adds x14,x15,x10 + adcs x15,x16,x11 + adcs x16,x17,x24 + adc x17,xzr,x24 // can't overflow + mul x11,x14,x23 + lsl x8,x24,#32 + subs x15,x15,x24 + lsr x9,x24,#32 + sbcs x16,x16,x8 + sbc x17,x17,x9 // can't borrow + subs xzr,x14,#1 + umulh x9,x12,x11 + mul x10,x13,x11 + umulh x24,x13,x11 + + adcs x10,x10,x9 + adc x24,x24,xzr + + adds x14,x15,x10 + adcs x15,x16,x24 + adcs x16,x17,x11 + adc x17,xzr,x11 // can't overflow + lsl x8,x11,#32 + subs x15,x15,x11 + lsr x9,x11,#32 + sbcs x16,x16,x8 + sbc x17,x17,x9 // can't borrow + adds x14,x14,x19 // accumulate upper half + adcs x15,x15,x20 + adcs x16,x16,x1 + adcs x17,x17,x3 + adc x19,xzr,xzr + + subs x8,x14,x12 // ret -= modulus + sbcs x9,x15,x13 + sbcs x10,x16,x21 + sbcs x11,x17,x22 + sbcs xzr,x19,xzr + + csel x4,x14,x8,lo // ret = borrow ? ret : ret-modulus + csel x5,x15,x9,lo + csel x6,x16,x10,lo + csel x7,x17,x11,lo + + cbnz x2,Loop_ord_sqr + + stp x4,x5,[x0] + stp x6,x7,[x0,#16] + + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x23,x24,[sp,#48] + ldr x29,[sp],#64 + ret + +// void ecp_nistz256_scatter_w5(void *x0,const P256_POINT *x1, +// int x2); +.globl _ecp_nistz256_scatter_w5 + +.align 4 +_ecp_nistz256_scatter_w5: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + add x0,x0,x2,lsl#2 + + ldp x4,x5,[x1] // X + ldp x6,x7,[x1,#16] + str w4,[x0,#64*0-4] + lsr x4,x4,#32 + str w5,[x0,#64*1-4] + lsr x5,x5,#32 + str w6,[x0,#64*2-4] + lsr x6,x6,#32 + str w7,[x0,#64*3-4] + lsr x7,x7,#32 + str w4,[x0,#64*4-4] + str w5,[x0,#64*5-4] + str w6,[x0,#64*6-4] + str w7,[x0,#64*7-4] + add x0,x0,#64*8 + + ldp x4,x5,[x1,#32] // Y + ldp x6,x7,[x1,#48] + str w4,[x0,#64*0-4] + lsr x4,x4,#32 + str w5,[x0,#64*1-4] + lsr x5,x5,#32 + str w6,[x0,#64*2-4] + lsr x6,x6,#32 + str w7,[x0,#64*3-4] + lsr x7,x7,#32 + str w4,[x0,#64*4-4] + str w5,[x0,#64*5-4] + str w6,[x0,#64*6-4] + str w7,[x0,#64*7-4] + add x0,x0,#64*8 + + ldp x4,x5,[x1,#64] // Z + ldp x6,x7,[x1,#80] + str w4,[x0,#64*0-4] + lsr x4,x4,#32 + str w5,[x0,#64*1-4] + lsr x5,x5,#32 + str w6,[x0,#64*2-4] + lsr x6,x6,#32 + str w7,[x0,#64*3-4] + lsr x7,x7,#32 + str w4,[x0,#64*4-4] + str w5,[x0,#64*5-4] + str w6,[x0,#64*6-4] + str w7,[x0,#64*7-4] + + ldr x29,[sp],#16 + ret + + +// void ecp_nistz256_gather_w5(P256_POINT *x0,const void *x1, +// int x2); +.globl _ecp_nistz256_gather_w5 + +.align 4 +_ecp_nistz256_gather_w5: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + cmp x2,xzr + csetm x3,ne + add x2,x2,x3 + add x1,x1,x2,lsl#2 + + ldr w4,[x1,#64*0] + ldr w5,[x1,#64*1] + ldr w6,[x1,#64*2] + ldr w7,[x1,#64*3] + ldr w8,[x1,#64*4] + ldr w9,[x1,#64*5] + ldr w10,[x1,#64*6] + ldr w11,[x1,#64*7] + add x1,x1,#64*8 + orr x4,x4,x8,lsl#32 + orr x5,x5,x9,lsl#32 + orr x6,x6,x10,lsl#32 + orr x7,x7,x11,lsl#32 + csel x4,x4,xzr,ne + csel x5,x5,xzr,ne + csel x6,x6,xzr,ne + csel x7,x7,xzr,ne + stp x4,x5,[x0] // X + stp x6,x7,[x0,#16] + + ldr w4,[x1,#64*0] + ldr w5,[x1,#64*1] + ldr w6,[x1,#64*2] + ldr w7,[x1,#64*3] + ldr w8,[x1,#64*4] + ldr w9,[x1,#64*5] + ldr w10,[x1,#64*6] + ldr w11,[x1,#64*7] + add x1,x1,#64*8 + orr x4,x4,x8,lsl#32 + orr x5,x5,x9,lsl#32 + orr x6,x6,x10,lsl#32 + orr x7,x7,x11,lsl#32 + csel x4,x4,xzr,ne + csel x5,x5,xzr,ne + csel x6,x6,xzr,ne + csel x7,x7,xzr,ne + stp x4,x5,[x0,#32] // Y + stp x6,x7,[x0,#48] + + ldr w4,[x1,#64*0] + ldr w5,[x1,#64*1] + ldr w6,[x1,#64*2] + ldr w7,[x1,#64*3] + ldr w8,[x1,#64*4] + ldr w9,[x1,#64*5] + ldr w10,[x1,#64*6] + ldr w11,[x1,#64*7] + orr x4,x4,x8,lsl#32 + orr x5,x5,x9,lsl#32 + orr x6,x6,x10,lsl#32 + orr x7,x7,x11,lsl#32 + csel x4,x4,xzr,ne + csel x5,x5,xzr,ne + csel x6,x6,xzr,ne + csel x7,x7,xzr,ne + stp x4,x5,[x0,#64] // Z + stp x6,x7,[x0,#80] + + ldr x29,[sp],#16 + ret + + +// void ecp_nistz256_scatter_w7(void *x0,const P256_POINT_AFFINE *x1, +// int x2); +.globl _ecp_nistz256_scatter_w7 + +.align 4 +_ecp_nistz256_scatter_w7: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + add x0,x0,x2 + mov x2,#64/8 +Loop_scatter_w7: + ldr x3,[x1],#8 + subs x2,x2,#1 + prfm pstl1strm,[x0,#4096+64*0] + prfm pstl1strm,[x0,#4096+64*1] + prfm pstl1strm,[x0,#4096+64*2] + prfm pstl1strm,[x0,#4096+64*3] + prfm pstl1strm,[x0,#4096+64*4] + prfm pstl1strm,[x0,#4096+64*5] + prfm pstl1strm,[x0,#4096+64*6] + prfm pstl1strm,[x0,#4096+64*7] + strb w3,[x0,#64*0] + lsr x3,x3,#8 + strb w3,[x0,#64*1] + lsr x3,x3,#8 + strb w3,[x0,#64*2] + lsr x3,x3,#8 + strb w3,[x0,#64*3] + lsr x3,x3,#8 + strb w3,[x0,#64*4] + lsr x3,x3,#8 + strb w3,[x0,#64*5] + lsr x3,x3,#8 + strb w3,[x0,#64*6] + lsr x3,x3,#8 + strb w3,[x0,#64*7] + add x0,x0,#64*8 + b.ne Loop_scatter_w7 + + ldr x29,[sp],#16 + ret + + +// void ecp_nistz256_gather_w7(P256_POINT_AFFINE *x0,const void *x1, +// int x2); +.globl _ecp_nistz256_gather_w7 + +.align 4 +_ecp_nistz256_gather_w7: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + cmp x2,xzr + csetm x3,ne + add x2,x2,x3 + add x1,x1,x2 + mov x2,#64/8 + nop +Loop_gather_w7: + ldrb w4,[x1,#64*0] + prfm pldl1strm,[x1,#4096+64*0] + subs x2,x2,#1 + ldrb w5,[x1,#64*1] + prfm pldl1strm,[x1,#4096+64*1] + ldrb w6,[x1,#64*2] + prfm pldl1strm,[x1,#4096+64*2] + ldrb w7,[x1,#64*3] + prfm pldl1strm,[x1,#4096+64*3] + ldrb w8,[x1,#64*4] + prfm pldl1strm,[x1,#4096+64*4] + ldrb w9,[x1,#64*5] + prfm pldl1strm,[x1,#4096+64*5] + ldrb w10,[x1,#64*6] + prfm pldl1strm,[x1,#4096+64*6] + ldrb w11,[x1,#64*7] + prfm pldl1strm,[x1,#4096+64*7] + add x1,x1,#64*8 + orr x4,x4,x5,lsl#8 + orr x6,x6,x7,lsl#8 + orr x8,x8,x9,lsl#8 + orr x4,x4,x6,lsl#16 + orr x10,x10,x11,lsl#8 + orr x4,x4,x8,lsl#32 + orr x4,x4,x10,lsl#48 + and x4,x4,x3 + str x4,[x0],#8 + b.ne Loop_gather_w7 + + ldr x29,[sp],#16 + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/bn_conf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/bn_conf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/bn_conf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/bn_conf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,28 @@ +/* WARNING: do not edit! */ +/* Generated by Makefile from include/crypto/bn_conf.h.in */ +/* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BN_CONF_H +# define OSSL_CRYPTO_BN_CONF_H + +/* + * The contents of this file are not used in the UEFI build, as + * both 32-bit and 64-bit builds are supported from a single run + * of the Configure script. + */ + +/* Should we define BN_DIV2W here? */ + +/* Only one for the following should be defined */ +#define SIXTY_FOUR_BIT_LONG +#undef SIXTY_FOUR_BIT +#undef THIRTY_TWO_BIT + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/dso_conf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/dso_conf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/dso_conf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/include/internal/dso_conf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,17 @@ +/* WARNING: do not edit! */ +/* Generated by Makefile from include/crypto/dso_conf.h.in */ +/* + * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSO_CONF_H +# define OSSL_CRYPTO_DSO_CONF_H +# define DSO_DLFCN +# define HAVE_DLFCN_H +# define DSO_EXTENSION ".dylib" +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/modes/ghashv8-armx.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/modes/ghashv8-armx.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/modes/ghashv8-armx.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/modes/ghashv8-armx.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,552 @@ +#include "arm_arch.h" + +#if __ARM_MAX_ARCH__>=7 +.text + +.globl _gcm_init_v8 + +.align 4 +_gcm_init_v8: + ld1 {v17.2d},[x1] //load input H + movi v19.16b,#0xe1 + shl v19.2d,v19.2d,#57 //0xc2.0 + ext v3.16b,v17.16b,v17.16b,#8 + ushr v18.2d,v19.2d,#63 + dup v17.4s,v17.s[1] + ext v16.16b,v18.16b,v19.16b,#8 //t0=0xc2....01 + ushr v18.2d,v3.2d,#63 + sshr v17.4s,v17.4s,#31 //broadcast carry bit + and v18.16b,v18.16b,v16.16b + shl v3.2d,v3.2d,#1 + ext v18.16b,v18.16b,v18.16b,#8 + and v16.16b,v16.16b,v17.16b + orr v3.16b,v3.16b,v18.16b //H<<<=1 + eor v20.16b,v3.16b,v16.16b //twisted H + st1 {v20.2d},[x0],#16 //store Htable[0] + + //calculate H^2 + ext v16.16b,v20.16b,v20.16b,#8 //Karatsuba pre-processing + pmull v0.1q,v20.1d,v20.1d + eor v16.16b,v16.16b,v20.16b + pmull2 v2.1q,v20.2d,v20.2d + pmull v1.1q,v16.1d,v16.1d + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v22.16b,v0.16b,v18.16b + + ext v17.16b,v22.16b,v22.16b,#8 //Karatsuba pre-processing + eor v17.16b,v17.16b,v22.16b + ext v21.16b,v16.16b,v17.16b,#8 //pack Karatsuba pre-processed + st1 {v21.2d,v22.2d},[x0],#32 //store Htable[1..2] + //calculate H^3 and H^4 + pmull v0.1q,v20.1d, v22.1d + pmull v5.1q,v22.1d,v22.1d + pmull2 v2.1q,v20.2d, v22.2d + pmull2 v7.1q,v22.2d,v22.2d + pmull v1.1q,v16.1d,v17.1d + pmull v6.1q,v17.1d,v17.1d + + ext v16.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + ext v17.16b,v5.16b,v7.16b,#8 + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v16.16b + eor v4.16b,v5.16b,v7.16b + eor v6.16b,v6.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase + eor v6.16b,v6.16b,v4.16b + pmull v4.1q,v5.1d,v19.1d + + ins v2.d[0],v1.d[1] + ins v7.d[0],v6.d[1] + ins v1.d[1],v0.d[0] + ins v6.d[1],v5.d[0] + eor v0.16b,v1.16b,v18.16b + eor v5.16b,v6.16b,v4.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase + ext v4.16b,v5.16b,v5.16b,#8 + pmull v0.1q,v0.1d,v19.1d + pmull v5.1q,v5.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v4.16b,v4.16b,v7.16b + eor v20.16b, v0.16b,v18.16b //H^3 + eor v22.16b,v5.16b,v4.16b //H^4 + + ext v16.16b,v20.16b, v20.16b,#8 //Karatsuba pre-processing + ext v17.16b,v22.16b,v22.16b,#8 + eor v16.16b,v16.16b,v20.16b + eor v17.16b,v17.16b,v22.16b + ext v21.16b,v16.16b,v17.16b,#8 //pack Karatsuba pre-processed + st1 {v20.2d,v21.2d,v22.2d},[x0] //store Htable[3..5] + ret + +.globl _gcm_gmult_v8 + +.align 4 +_gcm_gmult_v8: + ld1 {v17.2d},[x0] //load Xi + movi v19.16b,#0xe1 + ld1 {v20.2d,v21.2d},[x1] //load twisted H, ... + shl v19.2d,v19.2d,#57 +#ifndef __ARMEB__ + rev64 v17.16b,v17.16b +#endif + ext v3.16b,v17.16b,v17.16b,#8 + + pmull v0.1q,v20.1d,v3.1d //H.lo·Xi.lo + eor v17.16b,v17.16b,v3.16b //Karatsuba pre-processing + pmull2 v2.1q,v20.2d,v3.2d //H.hi·Xi.hi + pmull v1.1q,v21.1d,v17.1d //(H.lo+H.hi)·(Xi.lo+Xi.hi) + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + +#ifndef __ARMEB__ + rev64 v0.16b,v0.16b +#endif + ext v0.16b,v0.16b,v0.16b,#8 + st1 {v0.2d},[x0] //write out Xi + + ret + +.globl _gcm_ghash_v8 + +.align 4 +_gcm_ghash_v8: + cmp x3,#64 + b.hs Lgcm_ghash_v8_4x + ld1 {v0.2d},[x0] //load [rotated] Xi + //"[rotated]" means that + //loaded value would have + //to be rotated in order to + //make it appear as in + //algorithm specification + subs x3,x3,#32 //see if x3 is 32 or larger + mov x12,#16 //x12 is used as post- + //increment for input pointer; + //as loop is modulo-scheduled + //x12 is zeroed just in time + //to preclude overstepping + //inp[len], which means that + //last block[s] are actually + //loaded twice, but last + //copy is not processed + ld1 {v20.2d,v21.2d},[x1],#32 //load twisted H, ..., H^2 + movi v19.16b,#0xe1 + ld1 {v22.2d},[x1] + csel x12,xzr,x12,eq //is it time to zero x12? + ext v0.16b,v0.16b,v0.16b,#8 //rotate Xi + ld1 {v16.2d},[x2],#16 //load [rotated] I[0] + shl v19.2d,v19.2d,#57 //compose 0xc2.0 constant +#ifndef __ARMEB__ + rev64 v16.16b,v16.16b + rev64 v0.16b,v0.16b +#endif + ext v3.16b,v16.16b,v16.16b,#8 //rotate I[0] + b.lo Lodd_tail_v8 //x3 was less than 32 + ld1 {v17.2d},[x2],x12 //load [rotated] I[1] +#ifndef __ARMEB__ + rev64 v17.16b,v17.16b +#endif + ext v7.16b,v17.16b,v17.16b,#8 + eor v3.16b,v3.16b,v0.16b //I[i]^=Xi + pmull v4.1q,v20.1d,v7.1d //H·Ii+1 + eor v17.16b,v17.16b,v7.16b //Karatsuba pre-processing + pmull2 v6.1q,v20.2d,v7.2d + b Loop_mod2x_v8 + +.align 4 +Loop_mod2x_v8: + ext v18.16b,v3.16b,v3.16b,#8 + subs x3,x3,#32 //is there more data? + pmull v0.1q,v22.1d,v3.1d //H^2.lo·Xi.lo + csel x12,xzr,x12,lo //is it time to zero x12? + + pmull v5.1q,v21.1d,v17.1d + eor v18.16b,v18.16b,v3.16b //Karatsuba pre-processing + pmull2 v2.1q,v22.2d,v3.2d //H^2.hi·Xi.hi + eor v0.16b,v0.16b,v4.16b //accumulate + pmull2 v1.1q,v21.2d,v18.2d //(H^2.lo+H^2.hi)·(Xi.lo+Xi.hi) + ld1 {v16.2d},[x2],x12 //load [rotated] I[i+2] + + eor v2.16b,v2.16b,v6.16b + csel x12,xzr,x12,eq //is it time to zero x12? + eor v1.16b,v1.16b,v5.16b + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v17.2d},[x2],x12 //load [rotated] I[i+3] +#ifndef __ARMEB__ + rev64 v16.16b,v16.16b +#endif + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + +#ifndef __ARMEB__ + rev64 v17.16b,v17.16b +#endif + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v7.16b,v17.16b,v17.16b,#8 + ext v3.16b,v16.16b,v16.16b,#8 + eor v0.16b,v1.16b,v18.16b + pmull v4.1q,v20.1d,v7.1d //H·Ii+1 + eor v3.16b,v3.16b,v2.16b //accumulate v3.16b early + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v3.16b,v3.16b,v18.16b + eor v17.16b,v17.16b,v7.16b //Karatsuba pre-processing + eor v3.16b,v3.16b,v0.16b + pmull2 v6.1q,v20.2d,v7.2d + b.hs Loop_mod2x_v8 //there was at least 32 more bytes + + eor v2.16b,v2.16b,v18.16b + ext v3.16b,v16.16b,v16.16b,#8 //re-construct v3.16b + adds x3,x3,#32 //re-construct x3 + eor v0.16b,v0.16b,v2.16b //re-construct v0.16b + b.eq Ldone_v8 //is x3 zero? +Lodd_tail_v8: + ext v18.16b,v0.16b,v0.16b,#8 + eor v3.16b,v3.16b,v0.16b //inp^=Xi + eor v17.16b,v16.16b,v18.16b //v17.16b is rotated inp^Xi + + pmull v0.1q,v20.1d,v3.1d //H.lo·Xi.lo + eor v17.16b,v17.16b,v3.16b //Karatsuba pre-processing + pmull2 v2.1q,v20.2d,v3.2d //H.hi·Xi.hi + pmull v1.1q,v21.1d,v17.1d //(H.lo+H.hi)·(Xi.lo+Xi.hi) + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + +Ldone_v8: +#ifndef __ARMEB__ + rev64 v0.16b,v0.16b +#endif + ext v0.16b,v0.16b,v0.16b,#8 + st1 {v0.2d},[x0] //write out Xi + + ret + + +.align 4 +gcm_ghash_v8_4x: +Lgcm_ghash_v8_4x: + ld1 {v0.2d},[x0] //load [rotated] Xi + ld1 {v20.2d,v21.2d,v22.2d},[x1],#48 //load twisted H, ..., H^2 + movi v19.16b,#0xe1 + ld1 {v26.2d,v27.2d,v28.2d},[x1] //load twisted H^3, ..., H^4 + shl v19.2d,v19.2d,#57 //compose 0xc2.0 constant + + ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64 +#ifndef __ARMEB__ + rev64 v0.16b,v0.16b + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v7.16b,v7.16b + rev64 v4.16b,v4.16b +#endif + ext v25.16b,v7.16b,v7.16b,#8 + ext v24.16b,v6.16b,v6.16b,#8 + ext v23.16b,v5.16b,v5.16b,#8 + + pmull v29.1q,v20.1d,v25.1d //H·Ii+3 + eor v7.16b,v7.16b,v25.16b + pmull2 v31.1q,v20.2d,v25.2d + pmull v30.1q,v21.1d,v7.1d + + pmull v16.1q,v22.1d,v24.1d //H^2·Ii+2 + eor v6.16b,v6.16b,v24.16b + pmull2 v24.1q,v22.2d,v24.2d + pmull2 v6.1q,v21.2d,v6.2d + + eor v29.16b,v29.16b,v16.16b + eor v31.16b,v31.16b,v24.16b + eor v30.16b,v30.16b,v6.16b + + pmull v7.1q,v26.1d,v23.1d //H^3·Ii+1 + eor v5.16b,v5.16b,v23.16b + pmull2 v23.1q,v26.2d,v23.2d + pmull v5.1q,v27.1d,v5.1d + + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + eor v30.16b,v30.16b,v5.16b + + subs x3,x3,#128 + b.lo Ltail4x + + b Loop4x + +.align 4 +Loop4x: + eor v16.16b,v4.16b,v0.16b + ld1 {v4.2d,v5.2d,v6.2d,v7.2d},[x2],#64 + ext v3.16b,v16.16b,v16.16b,#8 +#ifndef __ARMEB__ + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v7.16b,v7.16b + rev64 v4.16b,v4.16b +#endif + + pmull v0.1q,v28.1d,v3.1d //H^4·(Xi+Ii) + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v28.2d,v3.2d + ext v25.16b,v7.16b,v7.16b,#8 + pmull2 v1.1q,v27.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + ext v24.16b,v6.16b,v6.16b,#8 + eor v1.16b,v1.16b,v30.16b + ext v23.16b,v5.16b,v5.16b,#8 + + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + pmull v29.1q,v20.1d,v25.1d //H·Ii+3 + eor v7.16b,v7.16b,v25.16b + eor v1.16b,v1.16b,v17.16b + pmull2 v31.1q,v20.2d,v25.2d + eor v1.16b,v1.16b,v18.16b + pmull v30.1q,v21.1d,v7.1d + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + pmull v16.1q,v22.1d,v24.1d //H^2·Ii+2 + eor v6.16b,v6.16b,v24.16b + pmull2 v24.1q,v22.2d,v24.2d + eor v0.16b,v1.16b,v18.16b + pmull2 v6.1q,v21.2d,v6.2d + + eor v29.16b,v29.16b,v16.16b + eor v31.16b,v31.16b,v24.16b + eor v30.16b,v30.16b,v6.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + pmull v7.1q,v26.1d,v23.1d //H^3·Ii+1 + eor v5.16b,v5.16b,v23.16b + eor v18.16b,v18.16b,v2.16b + pmull2 v23.1q,v26.2d,v23.2d + pmull v5.1q,v27.1d,v5.1d + + eor v0.16b,v0.16b,v18.16b + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + ext v0.16b,v0.16b,v0.16b,#8 + eor v30.16b,v30.16b,v5.16b + + subs x3,x3,#64 + b.hs Loop4x + +Ltail4x: + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull v0.1q,v28.1d,v3.1d //H^4·(Xi+Ii) + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v28.2d,v3.2d + pmull2 v1.1q,v27.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + + adds x3,x3,#64 + b.eq Ldone4x + + cmp x3,#32 + b.lo Lone + b.eq Ltwo +Lthree: + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d,v5.2d,v6.2d},[x2] + eor v1.16b,v1.16b,v18.16b +#ifndef __ARMEB__ + rev64 v5.16b,v5.16b + rev64 v6.16b,v6.16b + rev64 v4.16b,v4.16b +#endif + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v24.16b,v6.16b,v6.16b,#8 + ext v23.16b,v5.16b,v5.16b,#8 + eor v0.16b,v1.16b,v18.16b + + pmull v29.1q,v20.1d,v24.1d //H·Ii+2 + eor v6.16b,v6.16b,v24.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + pmull2 v31.1q,v20.2d,v24.2d + pmull v30.1q,v21.1d,v6.1d + eor v0.16b,v0.16b,v18.16b + pmull v7.1q,v22.1d,v23.1d //H^2·Ii+1 + eor v5.16b,v5.16b,v23.16b + ext v0.16b,v0.16b,v0.16b,#8 + + pmull2 v23.1q,v22.2d,v23.2d + eor v16.16b,v4.16b,v0.16b + pmull2 v5.1q,v21.2d,v5.2d + ext v3.16b,v16.16b,v16.16b,#8 + + eor v29.16b,v29.16b,v7.16b + eor v31.16b,v31.16b,v23.16b + eor v30.16b,v30.16b,v5.16b + + pmull v0.1q,v26.1d,v3.1d //H^3·(Xi+Ii) + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v26.2d,v3.2d + pmull v1.1q,v27.1d,v16.1d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + b Ldone4x + +.align 4 +Ltwo: + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d,v5.2d},[x2] + eor v1.16b,v1.16b,v18.16b +#ifndef __ARMEB__ + rev64 v5.16b,v5.16b + rev64 v4.16b,v4.16b +#endif + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + ext v23.16b,v5.16b,v5.16b,#8 + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + pmull v29.1q,v20.1d,v23.1d //H·Ii+1 + eor v5.16b,v5.16b,v23.16b + + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull2 v31.1q,v20.2d,v23.2d + pmull v30.1q,v21.1d,v5.1d + + pmull v0.1q,v22.1d,v3.1d //H^2·(Xi+Ii) + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v22.2d,v3.2d + pmull2 v1.1q,v21.2d,v16.2d + + eor v0.16b,v0.16b,v29.16b + eor v2.16b,v2.16b,v31.16b + eor v1.16b,v1.16b,v30.16b + b Ldone4x + +.align 4 +Lone: + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + ld1 {v4.2d},[x2] + eor v1.16b,v1.16b,v18.16b +#ifndef __ARMEB__ + rev64 v4.16b,v4.16b +#endif + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + + eor v16.16b,v4.16b,v0.16b + ext v3.16b,v16.16b,v16.16b,#8 + + pmull v0.1q,v20.1d,v3.1d + eor v16.16b,v16.16b,v3.16b + pmull2 v2.1q,v20.2d,v3.2d + pmull v1.1q,v21.1d,v16.1d + +Ldone4x: + ext v17.16b,v0.16b,v2.16b,#8 //Karatsuba post-processing + eor v18.16b,v0.16b,v2.16b + eor v1.16b,v1.16b,v17.16b + eor v1.16b,v1.16b,v18.16b + + pmull v18.1q,v0.1d,v19.1d //1st phase of reduction + ins v2.d[0],v1.d[1] + ins v1.d[1],v0.d[0] + eor v0.16b,v1.16b,v18.16b + + ext v18.16b,v0.16b,v0.16b,#8 //2nd phase of reduction + pmull v0.1q,v0.1d,v19.1d + eor v18.16b,v18.16b,v2.16b + eor v0.16b,v0.16b,v18.16b + ext v0.16b,v0.16b,v0.16b,#8 + +#ifndef __ARMEB__ + rev64 v0.16b,v0.16b +#endif + st1 {v0.2d},[x0] //write out Xi + + ret + +.byte 71,72,65,83,72,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/poly1305/poly1305-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/poly1305/poly1305-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/poly1305/poly1305-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/poly1305/poly1305-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,870 @@ +#include "arm_arch.h" + +.text + +// forward "declarations" are required for Apple + +.private_extern _OPENSSL_armcap_P +.globl _poly1305_init +.private_extern _poly1305_init +.globl _poly1305_blocks +.private_extern _poly1305_blocks +.globl _poly1305_emit +.private_extern _poly1305_emit + + +.align 5 +_poly1305_init: + cmp x1,xzr + stp xzr,xzr,[x0] // zero hash value + stp xzr,xzr,[x0,#16] // [along with is_base2_26] + + csel x0,xzr,x0,eq + b.eq Lno_key + +#ifdef __ILP32__ + ldrsw x11,LOPENSSL_armcap_P +#else + ldr x11,LOPENSSL_armcap_P +#endif + adr x10,LOPENSSL_armcap_P + + ldp x7,x8,[x1] // load key + mov x9,#0xfffffffc0fffffff + movk x9,#0x0fff,lsl#48 + ldr w17,[x10,x11] +#ifdef __ARMEB__ + rev x7,x7 // flip bytes + rev x8,x8 +#endif + and x7,x7,x9 // &=0ffffffc0fffffff + and x9,x9,#-4 + and x8,x8,x9 // &=0ffffffc0ffffffc + stp x7,x8,[x0,#32] // save key value + + tst w17,#ARMV7_NEON + + adr x12,_poly1305_blocks + adr x7,poly1305_blocks_neon + adr x13,_poly1305_emit + adr x8,poly1305_emit_neon + + csel x12,x12,x7,eq + csel x13,x13,x8,eq + +#ifdef __ILP32__ + stp w12,w13,[x2] +#else + stp x12,x13,[x2] +#endif + + mov x0,#1 +Lno_key: + ret + + + +.align 5 +_poly1305_blocks: + ands x2,x2,#-16 + b.eq Lno_data + + ldp x4,x5,[x0] // load hash value + ldp x7,x8,[x0,#32] // load key value + ldr x6,[x0,#16] + add x9,x8,x8,lsr#2 // s1 = r1 + (r1 >> 2) + b Loop + +.align 5 +Loop: + ldp x10,x11,[x1],#16 // load input + sub x2,x2,#16 +#ifdef __ARMEB__ + rev x10,x10 + rev x11,x11 +#endif + adds x4,x4,x10 // accumulate input + adcs x5,x5,x11 + + mul x12,x4,x7 // h0*r0 + adc x6,x6,x3 + umulh x13,x4,x7 + + mul x10,x5,x9 // h1*5*r1 + umulh x11,x5,x9 + + adds x12,x12,x10 + mul x10,x4,x8 // h0*r1 + adc x13,x13,x11 + umulh x14,x4,x8 + + adds x13,x13,x10 + mul x10,x5,x7 // h1*r0 + adc x14,x14,xzr + umulh x11,x5,x7 + + adds x13,x13,x10 + mul x10,x6,x9 // h2*5*r1 + adc x14,x14,x11 + mul x11,x6,x7 // h2*r0 + + adds x13,x13,x10 + adc x14,x14,x11 + + and x10,x14,#-4 // final reduction + and x6,x14,#3 + add x10,x10,x14,lsr#2 + adds x4,x12,x10 + adcs x5,x13,xzr + adc x6,x6,xzr + + cbnz x2,Loop + + stp x4,x5,[x0] // store hash value + str x6,[x0,#16] + +Lno_data: + ret + + + +.align 5 +_poly1305_emit: + ldp x4,x5,[x0] // load hash base 2^64 + ldr x6,[x0,#16] + ldp x10,x11,[x2] // load nonce + + adds x12,x4,#5 // compare to modulus + adcs x13,x5,xzr + adc x14,x6,xzr + + tst x14,#-4 // see if it's carried/borrowed + + csel x4,x4,x12,eq + csel x5,x5,x13,eq + +#ifdef __ARMEB__ + ror x10,x10,#32 // flip nonce words + ror x11,x11,#32 +#endif + adds x4,x4,x10 // accumulate nonce + adc x5,x5,x11 +#ifdef __ARMEB__ + rev x4,x4 // flip output bytes + rev x5,x5 +#endif + stp x4,x5,[x1] // write result + + ret + + +.align 5 +poly1305_mult: + mul x12,x4,x7 // h0*r0 + umulh x13,x4,x7 + + mul x10,x5,x9 // h1*5*r1 + umulh x11,x5,x9 + + adds x12,x12,x10 + mul x10,x4,x8 // h0*r1 + adc x13,x13,x11 + umulh x14,x4,x8 + + adds x13,x13,x10 + mul x10,x5,x7 // h1*r0 + adc x14,x14,xzr + umulh x11,x5,x7 + + adds x13,x13,x10 + mul x10,x6,x9 // h2*5*r1 + adc x14,x14,x11 + mul x11,x6,x7 // h2*r0 + + adds x13,x13,x10 + adc x14,x14,x11 + + and x10,x14,#-4 // final reduction + and x6,x14,#3 + add x10,x10,x14,lsr#2 + adds x4,x12,x10 + adcs x5,x13,xzr + adc x6,x6,xzr + + ret + + + +.align 5 +poly1305_splat: + and x12,x4,#0x03ffffff // base 2^64 -> base 2^26 + ubfx x13,x4,#26,#26 + extr x14,x5,x4,#52 + and x14,x14,#0x03ffffff + ubfx x15,x5,#14,#26 + extr x16,x6,x5,#40 + + str w12,[x0,#16*0] // r0 + add w12,w13,w13,lsl#2 // r1*5 + str w13,[x0,#16*1] // r1 + add w13,w14,w14,lsl#2 // r2*5 + str w12,[x0,#16*2] // s1 + str w14,[x0,#16*3] // r2 + add w14,w15,w15,lsl#2 // r3*5 + str w13,[x0,#16*4] // s2 + str w15,[x0,#16*5] // r3 + add w15,w16,w16,lsl#2 // r4*5 + str w14,[x0,#16*6] // s3 + str w16,[x0,#16*7] // r4 + str w15,[x0,#16*8] // s4 + + ret + + + +.align 5 +poly1305_blocks_neon: + ldr x17,[x0,#24] + cmp x2,#128 + b.hs Lblocks_neon + cbz x17,_poly1305_blocks + +Lblocks_neon: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + + ands x2,x2,#-16 + b.eq Lno_data_neon + + cbz x17,Lbase2_64_neon + + ldp w10,w11,[x0] // load hash value base 2^26 + ldp w12,w13,[x0,#8] + ldr w14,[x0,#16] + + tst x2,#31 + b.eq Leven_neon + + ldp x7,x8,[x0,#32] // load key value + + add x4,x10,x11,lsl#26 // base 2^26 -> base 2^64 + lsr x5,x12,#12 + adds x4,x4,x12,lsl#52 + add x5,x5,x13,lsl#14 + adc x5,x5,xzr + lsr x6,x14,#24 + adds x5,x5,x14,lsl#40 + adc x14,x6,xzr // can be partially reduced... + + ldp x12,x13,[x1],#16 // load input + sub x2,x2,#16 + add x9,x8,x8,lsr#2 // s1 = r1 + (r1 >> 2) + + and x10,x14,#-4 // ... so reduce + and x6,x14,#3 + add x10,x10,x14,lsr#2 + adds x4,x4,x10 + adcs x5,x5,xzr + adc x6,x6,xzr + +#ifdef __ARMEB__ + rev x12,x12 + rev x13,x13 +#endif + adds x4,x4,x12 // accumulate input + adcs x5,x5,x13 + adc x6,x6,x3 + + bl poly1305_mult + ldr x30,[sp,#8] + + cbz x3,Lstore_base2_64_neon + + and x10,x4,#0x03ffffff // base 2^64 -> base 2^26 + ubfx x11,x4,#26,#26 + extr x12,x5,x4,#52 + and x12,x12,#0x03ffffff + ubfx x13,x5,#14,#26 + extr x14,x6,x5,#40 + + cbnz x2,Leven_neon + + stp w10,w11,[x0] // store hash value base 2^26 + stp w12,w13,[x0,#8] + str w14,[x0,#16] + b Lno_data_neon + +.align 4 +Lstore_base2_64_neon: + stp x4,x5,[x0] // store hash value base 2^64 + stp x6,xzr,[x0,#16] // note that is_base2_26 is zeroed + b Lno_data_neon + +.align 4 +Lbase2_64_neon: + ldp x7,x8,[x0,#32] // load key value + + ldp x4,x5,[x0] // load hash value base 2^64 + ldr x6,[x0,#16] + + tst x2,#31 + b.eq Linit_neon + + ldp x12,x13,[x1],#16 // load input + sub x2,x2,#16 + add x9,x8,x8,lsr#2 // s1 = r1 + (r1 >> 2) +#ifdef __ARMEB__ + rev x12,x12 + rev x13,x13 +#endif + adds x4,x4,x12 // accumulate input + adcs x5,x5,x13 + adc x6,x6,x3 + + bl poly1305_mult + +Linit_neon: + and x10,x4,#0x03ffffff // base 2^64 -> base 2^26 + ubfx x11,x4,#26,#26 + extr x12,x5,x4,#52 + and x12,x12,#0x03ffffff + ubfx x13,x5,#14,#26 + extr x14,x6,x5,#40 + + stp d8,d9,[sp,#16] // meet ABI requirements + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] + + fmov d24,x10 + fmov d25,x11 + fmov d26,x12 + fmov d27,x13 + fmov d28,x14 + + ////////////////////////////////// initialize r^n table + mov x4,x7 // r^1 + add x9,x8,x8,lsr#2 // s1 = r1 + (r1 >> 2) + mov x5,x8 + mov x6,xzr + add x0,x0,#48+12 + bl poly1305_splat + + bl poly1305_mult // r^2 + sub x0,x0,#4 + bl poly1305_splat + + bl poly1305_mult // r^3 + sub x0,x0,#4 + bl poly1305_splat + + bl poly1305_mult // r^4 + sub x0,x0,#4 + bl poly1305_splat + ldr x30,[sp,#8] + + add x16,x1,#32 + adr x17,Lzeros + subs x2,x2,#64 + csel x16,x17,x16,lo + + mov x4,#1 + str x4,[x0,#-24] // set is_base2_26 + sub x0,x0,#48 // restore original x0 + b Ldo_neon + +.align 4 +Leven_neon: + add x16,x1,#32 + adr x17,Lzeros + subs x2,x2,#64 + csel x16,x17,x16,lo + + stp d8,d9,[sp,#16] // meet ABI requirements + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] + + fmov d24,x10 + fmov d25,x11 + fmov d26,x12 + fmov d27,x13 + fmov d28,x14 + +Ldo_neon: + ldp x8,x12,[x16],#16 // inp[2:3] (or zero) + ldp x9,x13,[x16],#48 + + lsl x3,x3,#24 + add x15,x0,#48 + +#ifdef __ARMEB__ + rev x8,x8 + rev x12,x12 + rev x9,x9 + rev x13,x13 +#endif + and x4,x8,#0x03ffffff // base 2^64 -> base 2^26 + and x5,x9,#0x03ffffff + ubfx x6,x8,#26,#26 + ubfx x7,x9,#26,#26 + add x4,x4,x5,lsl#32 // bfi x4,x5,#32,#32 + extr x8,x12,x8,#52 + extr x9,x13,x9,#52 + add x6,x6,x7,lsl#32 // bfi x6,x7,#32,#32 + fmov d14,x4 + and x8,x8,#0x03ffffff + and x9,x9,#0x03ffffff + ubfx x10,x12,#14,#26 + ubfx x11,x13,#14,#26 + add x12,x3,x12,lsr#40 + add x13,x3,x13,lsr#40 + add x8,x8,x9,lsl#32 // bfi x8,x9,#32,#32 + fmov d15,x6 + add x10,x10,x11,lsl#32 // bfi x10,x11,#32,#32 + add x12,x12,x13,lsl#32 // bfi x12,x13,#32,#32 + fmov d16,x8 + fmov d17,x10 + fmov d18,x12 + + ldp x8,x12,[x1],#16 // inp[0:1] + ldp x9,x13,[x1],#48 + + ld1 {v0.4s,v1.4s,v2.4s,v3.4s},[x15],#64 + ld1 {v4.4s,v5.4s,v6.4s,v7.4s},[x15],#64 + ld1 {v8.4s},[x15] + +#ifdef __ARMEB__ + rev x8,x8 + rev x12,x12 + rev x9,x9 + rev x13,x13 +#endif + and x4,x8,#0x03ffffff // base 2^64 -> base 2^26 + and x5,x9,#0x03ffffff + ubfx x6,x8,#26,#26 + ubfx x7,x9,#26,#26 + add x4,x4,x5,lsl#32 // bfi x4,x5,#32,#32 + extr x8,x12,x8,#52 + extr x9,x13,x9,#52 + add x6,x6,x7,lsl#32 // bfi x6,x7,#32,#32 + fmov d9,x4 + and x8,x8,#0x03ffffff + and x9,x9,#0x03ffffff + ubfx x10,x12,#14,#26 + ubfx x11,x13,#14,#26 + add x12,x3,x12,lsr#40 + add x13,x3,x13,lsr#40 + add x8,x8,x9,lsl#32 // bfi x8,x9,#32,#32 + fmov d10,x6 + add x10,x10,x11,lsl#32 // bfi x10,x11,#32,#32 + add x12,x12,x13,lsl#32 // bfi x12,x13,#32,#32 + movi v31.2d,#-1 + fmov d11,x8 + fmov d12,x10 + fmov d13,x12 + ushr v31.2d,v31.2d,#38 + + b.ls Lskip_loop + +.align 4 +Loop_neon: + //////////////////////////////////////////////////////////////// + // ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2 + // ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r + // ___________________/ + // ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2 + // ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r + // ___________________/ ____________________/ + // + // Note that we start with inp[2:3]*r^2. This is because it + // doesn't depend on reduction in previous iteration. + //////////////////////////////////////////////////////////////// + // d4 = h0*r4 + h1*r3 + h2*r2 + h3*r1 + h4*r0 + // d3 = h0*r3 + h1*r2 + h2*r1 + h3*r0 + h4*5*r4 + // d2 = h0*r2 + h1*r1 + h2*r0 + h3*5*r4 + h4*5*r3 + // d1 = h0*r1 + h1*r0 + h2*5*r4 + h3*5*r3 + h4*5*r2 + // d0 = h0*r0 + h1*5*r4 + h2*5*r3 + h3*5*r2 + h4*5*r1 + + subs x2,x2,#64 + umull v23.2d,v14.2s,v7.s[2] + csel x16,x17,x16,lo + umull v22.2d,v14.2s,v5.s[2] + umull v21.2d,v14.2s,v3.s[2] + ldp x8,x12,[x16],#16 // inp[2:3] (or zero) + umull v20.2d,v14.2s,v1.s[2] + ldp x9,x13,[x16],#48 + umull v19.2d,v14.2s,v0.s[2] +#ifdef __ARMEB__ + rev x8,x8 + rev x12,x12 + rev x9,x9 + rev x13,x13 +#endif + + umlal v23.2d,v15.2s,v5.s[2] + and x4,x8,#0x03ffffff // base 2^64 -> base 2^26 + umlal v22.2d,v15.2s,v3.s[2] + and x5,x9,#0x03ffffff + umlal v21.2d,v15.2s,v1.s[2] + ubfx x6,x8,#26,#26 + umlal v20.2d,v15.2s,v0.s[2] + ubfx x7,x9,#26,#26 + umlal v19.2d,v15.2s,v8.s[2] + add x4,x4,x5,lsl#32 // bfi x4,x5,#32,#32 + + umlal v23.2d,v16.2s,v3.s[2] + extr x8,x12,x8,#52 + umlal v22.2d,v16.2s,v1.s[2] + extr x9,x13,x9,#52 + umlal v21.2d,v16.2s,v0.s[2] + add x6,x6,x7,lsl#32 // bfi x6,x7,#32,#32 + umlal v20.2d,v16.2s,v8.s[2] + fmov d14,x4 + umlal v19.2d,v16.2s,v6.s[2] + and x8,x8,#0x03ffffff + + umlal v23.2d,v17.2s,v1.s[2] + and x9,x9,#0x03ffffff + umlal v22.2d,v17.2s,v0.s[2] + ubfx x10,x12,#14,#26 + umlal v21.2d,v17.2s,v8.s[2] + ubfx x11,x13,#14,#26 + umlal v20.2d,v17.2s,v6.s[2] + add x8,x8,x9,lsl#32 // bfi x8,x9,#32,#32 + umlal v19.2d,v17.2s,v4.s[2] + fmov d15,x6 + + add v11.2s,v11.2s,v26.2s + add x12,x3,x12,lsr#40 + umlal v23.2d,v18.2s,v0.s[2] + add x13,x3,x13,lsr#40 + umlal v22.2d,v18.2s,v8.s[2] + add x10,x10,x11,lsl#32 // bfi x10,x11,#32,#32 + umlal v21.2d,v18.2s,v6.s[2] + add x12,x12,x13,lsl#32 // bfi x12,x13,#32,#32 + umlal v20.2d,v18.2s,v4.s[2] + fmov d16,x8 + umlal v19.2d,v18.2s,v2.s[2] + fmov d17,x10 + + //////////////////////////////////////////////////////////////// + // (hash+inp[0:1])*r^4 and accumulate + + add v9.2s,v9.2s,v24.2s + fmov d18,x12 + umlal v22.2d,v11.2s,v1.s[0] + ldp x8,x12,[x1],#16 // inp[0:1] + umlal v19.2d,v11.2s,v6.s[0] + ldp x9,x13,[x1],#48 + umlal v23.2d,v11.2s,v3.s[0] + umlal v20.2d,v11.2s,v8.s[0] + umlal v21.2d,v11.2s,v0.s[0] +#ifdef __ARMEB__ + rev x8,x8 + rev x12,x12 + rev x9,x9 + rev x13,x13 +#endif + + add v10.2s,v10.2s,v25.2s + umlal v22.2d,v9.2s,v5.s[0] + umlal v23.2d,v9.2s,v7.s[0] + and x4,x8,#0x03ffffff // base 2^64 -> base 2^26 + umlal v21.2d,v9.2s,v3.s[0] + and x5,x9,#0x03ffffff + umlal v19.2d,v9.2s,v0.s[0] + ubfx x6,x8,#26,#26 + umlal v20.2d,v9.2s,v1.s[0] + ubfx x7,x9,#26,#26 + + add v12.2s,v12.2s,v27.2s + add x4,x4,x5,lsl#32 // bfi x4,x5,#32,#32 + umlal v22.2d,v10.2s,v3.s[0] + extr x8,x12,x8,#52 + umlal v23.2d,v10.2s,v5.s[0] + extr x9,x13,x9,#52 + umlal v19.2d,v10.2s,v8.s[0] + add x6,x6,x7,lsl#32 // bfi x6,x7,#32,#32 + umlal v21.2d,v10.2s,v1.s[0] + fmov d9,x4 + umlal v20.2d,v10.2s,v0.s[0] + and x8,x8,#0x03ffffff + + add v13.2s,v13.2s,v28.2s + and x9,x9,#0x03ffffff + umlal v22.2d,v12.2s,v0.s[0] + ubfx x10,x12,#14,#26 + umlal v19.2d,v12.2s,v4.s[0] + ubfx x11,x13,#14,#26 + umlal v23.2d,v12.2s,v1.s[0] + add x8,x8,x9,lsl#32 // bfi x8,x9,#32,#32 + umlal v20.2d,v12.2s,v6.s[0] + fmov d10,x6 + umlal v21.2d,v12.2s,v8.s[0] + add x12,x3,x12,lsr#40 + + umlal v22.2d,v13.2s,v8.s[0] + add x13,x3,x13,lsr#40 + umlal v19.2d,v13.2s,v2.s[0] + add x10,x10,x11,lsl#32 // bfi x10,x11,#32,#32 + umlal v23.2d,v13.2s,v0.s[0] + add x12,x12,x13,lsl#32 // bfi x12,x13,#32,#32 + umlal v20.2d,v13.2s,v4.s[0] + fmov d11,x8 + umlal v21.2d,v13.2s,v6.s[0] + fmov d12,x10 + fmov d13,x12 + + ///////////////////////////////////////////////////////////////// + // lazy reduction as discussed in "NEON crypto" by D.J. Bernstein + // and P. Schwabe + // + // [see discussion in poly1305-armv4 module] + + ushr v29.2d,v22.2d,#26 + xtn v27.2s,v22.2d + ushr v30.2d,v19.2d,#26 + and v19.16b,v19.16b,v31.16b + add v23.2d,v23.2d,v29.2d // h3 -> h4 + bic v27.2s,#0xfc,lsl#24 // &=0x03ffffff + add v20.2d,v20.2d,v30.2d // h0 -> h1 + + ushr v29.2d,v23.2d,#26 + xtn v28.2s,v23.2d + ushr v30.2d,v20.2d,#26 + xtn v25.2s,v20.2d + bic v28.2s,#0xfc,lsl#24 + add v21.2d,v21.2d,v30.2d // h1 -> h2 + + add v19.2d,v19.2d,v29.2d + shl v29.2d,v29.2d,#2 + shrn v30.2s,v21.2d,#26 + xtn v26.2s,v21.2d + add v19.2d,v19.2d,v29.2d // h4 -> h0 + bic v25.2s,#0xfc,lsl#24 + add v27.2s,v27.2s,v30.2s // h2 -> h3 + bic v26.2s,#0xfc,lsl#24 + + shrn v29.2s,v19.2d,#26 + xtn v24.2s,v19.2d + ushr v30.2s,v27.2s,#26 + bic v27.2s,#0xfc,lsl#24 + bic v24.2s,#0xfc,lsl#24 + add v25.2s,v25.2s,v29.2s // h0 -> h1 + add v28.2s,v28.2s,v30.2s // h3 -> h4 + + b.hi Loop_neon + +Lskip_loop: + dup v16.2d,v16.d[0] + add v11.2s,v11.2s,v26.2s + + //////////////////////////////////////////////////////////////// + // multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1 + + adds x2,x2,#32 + b.ne Long_tail + + dup v16.2d,v11.d[0] + add v14.2s,v9.2s,v24.2s + add v17.2s,v12.2s,v27.2s + add v15.2s,v10.2s,v25.2s + add v18.2s,v13.2s,v28.2s + +Long_tail: + dup v14.2d,v14.d[0] + umull2 v19.2d,v16.4s,v6.4s + umull2 v22.2d,v16.4s,v1.4s + umull2 v23.2d,v16.4s,v3.4s + umull2 v21.2d,v16.4s,v0.4s + umull2 v20.2d,v16.4s,v8.4s + + dup v15.2d,v15.d[0] + umlal2 v19.2d,v14.4s,v0.4s + umlal2 v21.2d,v14.4s,v3.4s + umlal2 v22.2d,v14.4s,v5.4s + umlal2 v23.2d,v14.4s,v7.4s + umlal2 v20.2d,v14.4s,v1.4s + + dup v17.2d,v17.d[0] + umlal2 v19.2d,v15.4s,v8.4s + umlal2 v22.2d,v15.4s,v3.4s + umlal2 v21.2d,v15.4s,v1.4s + umlal2 v23.2d,v15.4s,v5.4s + umlal2 v20.2d,v15.4s,v0.4s + + dup v18.2d,v18.d[0] + umlal2 v22.2d,v17.4s,v0.4s + umlal2 v23.2d,v17.4s,v1.4s + umlal2 v19.2d,v17.4s,v4.4s + umlal2 v20.2d,v17.4s,v6.4s + umlal2 v21.2d,v17.4s,v8.4s + + umlal2 v22.2d,v18.4s,v8.4s + umlal2 v19.2d,v18.4s,v2.4s + umlal2 v23.2d,v18.4s,v0.4s + umlal2 v20.2d,v18.4s,v4.4s + umlal2 v21.2d,v18.4s,v6.4s + + b.eq Lshort_tail + + //////////////////////////////////////////////////////////////// + // (hash+inp[0:1])*r^4:r^3 and accumulate + + add v9.2s,v9.2s,v24.2s + umlal v22.2d,v11.2s,v1.2s + umlal v19.2d,v11.2s,v6.2s + umlal v23.2d,v11.2s,v3.2s + umlal v20.2d,v11.2s,v8.2s + umlal v21.2d,v11.2s,v0.2s + + add v10.2s,v10.2s,v25.2s + umlal v22.2d,v9.2s,v5.2s + umlal v19.2d,v9.2s,v0.2s + umlal v23.2d,v9.2s,v7.2s + umlal v20.2d,v9.2s,v1.2s + umlal v21.2d,v9.2s,v3.2s + + add v12.2s,v12.2s,v27.2s + umlal v22.2d,v10.2s,v3.2s + umlal v19.2d,v10.2s,v8.2s + umlal v23.2d,v10.2s,v5.2s + umlal v20.2d,v10.2s,v0.2s + umlal v21.2d,v10.2s,v1.2s + + add v13.2s,v13.2s,v28.2s + umlal v22.2d,v12.2s,v0.2s + umlal v19.2d,v12.2s,v4.2s + umlal v23.2d,v12.2s,v1.2s + umlal v20.2d,v12.2s,v6.2s + umlal v21.2d,v12.2s,v8.2s + + umlal v22.2d,v13.2s,v8.2s + umlal v19.2d,v13.2s,v2.2s + umlal v23.2d,v13.2s,v0.2s + umlal v20.2d,v13.2s,v4.2s + umlal v21.2d,v13.2s,v6.2s + +Lshort_tail: + //////////////////////////////////////////////////////////////// + // horizontal add + + addp v22.2d,v22.2d,v22.2d + ldp d8,d9,[sp,#16] // meet ABI requirements + addp v19.2d,v19.2d,v19.2d + ldp d10,d11,[sp,#32] + addp v23.2d,v23.2d,v23.2d + ldp d12,d13,[sp,#48] + addp v20.2d,v20.2d,v20.2d + ldp d14,d15,[sp,#64] + addp v21.2d,v21.2d,v21.2d + + //////////////////////////////////////////////////////////////// + // lazy reduction, but without narrowing + + ushr v29.2d,v22.2d,#26 + and v22.16b,v22.16b,v31.16b + ushr v30.2d,v19.2d,#26 + and v19.16b,v19.16b,v31.16b + + add v23.2d,v23.2d,v29.2d // h3 -> h4 + add v20.2d,v20.2d,v30.2d // h0 -> h1 + + ushr v29.2d,v23.2d,#26 + and v23.16b,v23.16b,v31.16b + ushr v30.2d,v20.2d,#26 + and v20.16b,v20.16b,v31.16b + add v21.2d,v21.2d,v30.2d // h1 -> h2 + + add v19.2d,v19.2d,v29.2d + shl v29.2d,v29.2d,#2 + ushr v30.2d,v21.2d,#26 + and v21.16b,v21.16b,v31.16b + add v19.2d,v19.2d,v29.2d // h4 -> h0 + add v22.2d,v22.2d,v30.2d // h2 -> h3 + + ushr v29.2d,v19.2d,#26 + and v19.16b,v19.16b,v31.16b + ushr v30.2d,v22.2d,#26 + and v22.16b,v22.16b,v31.16b + add v20.2d,v20.2d,v29.2d // h0 -> h1 + add v23.2d,v23.2d,v30.2d // h3 -> h4 + + //////////////////////////////////////////////////////////////// + // write the result, can be partially reduced + + st4 {v19.s,v20.s,v21.s,v22.s}[0],[x0],#16 + st1 {v23.s}[0],[x0] + +Lno_data_neon: + ldr x29,[sp],#80 +.long 0xd50323bf // autiasp + ret + + + +.align 5 +poly1305_emit_neon: + ldr x17,[x0,#24] + cbz x17,_poly1305_emit + + ldp w10,w11,[x0] // load hash value base 2^26 + ldp w12,w13,[x0,#8] + ldr w14,[x0,#16] + + add x4,x10,x11,lsl#26 // base 2^26 -> base 2^64 + lsr x5,x12,#12 + adds x4,x4,x12,lsl#52 + add x5,x5,x13,lsl#14 + adc x5,x5,xzr + lsr x6,x14,#24 + adds x5,x5,x14,lsl#40 + adc x6,x6,xzr // can be partially reduced... + + ldp x10,x11,[x2] // load nonce + + and x12,x6,#-4 // ... so reduce + add x12,x12,x6,lsr#2 + and x6,x6,#3 + adds x4,x4,x12 + adcs x5,x5,xzr + adc x6,x6,xzr + + adds x12,x4,#5 // compare to modulus + adcs x13,x5,xzr + adc x14,x6,xzr + + tst x14,#-4 // see if it's carried/borrowed + + csel x4,x4,x12,eq + csel x5,x5,x13,eq + +#ifdef __ARMEB__ + ror x10,x10,#32 // flip nonce words + ror x11,x11,#32 +#endif + adds x4,x4,x10 // accumulate nonce + adc x5,x5,x11 +#ifdef __ARMEB__ + rev x4,x4 // flip output bytes + rev x5,x5 +#endif + stp x4,x5,[x1] // write result + + ret + + +.align 5 +Lzeros: +.long 0,0,0,0,0,0,0,0 +LOPENSSL_armcap_P: +#ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +#else +.quad _OPENSSL_armcap_P-. +#endif +.byte 80,111,108,121,49,51,48,53,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/keccak1600-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/keccak1600-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/keccak1600-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/keccak1600-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1095 @@ +.text + +.align 8 // strategic alignment and padding that allows to use + // address value as loop termination condition... +.quad 0,0,0,0,0,0,0,0 + +iotas: +.quad 0x0000000000000001 +.quad 0x0000000000008082 +.quad 0x800000000000808a +.quad 0x8000000080008000 +.quad 0x000000000000808b +.quad 0x0000000080000001 +.quad 0x8000000080008081 +.quad 0x8000000000008009 +.quad 0x000000000000008a +.quad 0x0000000000000088 +.quad 0x0000000080008009 +.quad 0x000000008000000a +.quad 0x000000008000808b +.quad 0x800000000000008b +.quad 0x8000000000008089 +.quad 0x8000000000008003 +.quad 0x8000000000008002 +.quad 0x8000000000000080 +.quad 0x000000000000800a +.quad 0x800000008000000a +.quad 0x8000000080008081 +.quad 0x8000000000008080 +.quad 0x0000000080000001 +.quad 0x8000000080008008 + + +.align 5 +KeccakF1600_int: + adr x28,iotas +.long 0xd503233f // paciasp + stp x28,x30,[sp,#16] // 32 bytes on top are mine + b Loop +.align 4 +Loop: + ////////////////////////////////////////// Theta + eor x26,x0,x5 + stp x4,x9,[sp,#0] // offload pair... + eor x27,x1,x6 + eor x28,x2,x7 + eor x30,x3,x8 + eor x4,x4,x9 + eor x26,x26,x10 + eor x27,x27,x11 + eor x28,x28,x12 + eor x30,x30,x13 + eor x4,x4,x14 + eor x26,x26,x15 + eor x27,x27,x16 + eor x28,x28,x17 + eor x30,x30,x25 + eor x4,x4,x19 + eor x26,x26,x20 + eor x28,x28,x22 + eor x27,x27,x21 + eor x30,x30,x23 + eor x4,x4,x24 + + eor x9,x26,x28,ror#63 + + eor x1,x1,x9 + eor x6,x6,x9 + eor x11,x11,x9 + eor x16,x16,x9 + eor x21,x21,x9 + + eor x9,x27,x30,ror#63 + eor x28,x28,x4,ror#63 + eor x30,x30,x26,ror#63 + eor x4,x4,x27,ror#63 + + eor x27, x2,x9 // mov x27,x2 + eor x7,x7,x9 + eor x12,x12,x9 + eor x17,x17,x9 + eor x22,x22,x9 + + eor x0,x0,x4 + eor x5,x5,x4 + eor x10,x10,x4 + eor x15,x15,x4 + eor x20,x20,x4 + ldp x4,x9,[sp,#0] // re-load offloaded data + eor x26, x3,x28 // mov x26,x3 + eor x8,x8,x28 + eor x13,x13,x28 + eor x25,x25,x28 + eor x23,x23,x28 + + eor x28, x4,x30 // mov x28,x4 + eor x9,x9,x30 + eor x14,x14,x30 + eor x19,x19,x30 + eor x24,x24,x30 + + ////////////////////////////////////////// Rho+Pi + mov x30,x1 + ror x1,x6,#64-44 + //mov x27,x2 + ror x2,x12,#64-43 + //mov x26,x3 + ror x3,x25,#64-21 + //mov x28,x4 + ror x4,x24,#64-14 + + ror x6,x9,#64-20 + ror x12,x13,#64-25 + ror x25,x17,#64-15 + ror x24,x21,#64-2 + + ror x9,x22,#64-61 + ror x13,x19,#64-8 + ror x17,x11,#64-10 + ror x21,x8,#64-55 + + ror x22,x14,#64-39 + ror x19,x23,#64-56 + ror x11,x7,#64-6 + ror x8,x16,#64-45 + + ror x14,x20,#64-18 + ror x23,x15,#64-41 + ror x7,x10,#64-3 + ror x16,x5,#64-36 + + ror x5,x26,#64-28 + ror x10,x30,#64-1 + ror x15,x28,#64-27 + ror x20,x27,#64-62 + + ////////////////////////////////////////// Chi+Iota + bic x26,x2,x1 + bic x27,x3,x2 + bic x28,x0,x4 + bic x30,x1,x0 + eor x0,x0,x26 + bic x26,x4,x3 + eor x1,x1,x27 + ldr x27,[sp,#16] + eor x3,x3,x28 + eor x4,x4,x30 + eor x2,x2,x26 + ldr x30,[x27],#8 // Iota[i++] + + bic x26,x7,x6 + tst x27,#255 // are we done? + str x27,[sp,#16] + bic x27,x8,x7 + bic x28,x5,x9 + eor x0,x0,x30 // A[0][0] ^= Iota + bic x30,x6,x5 + eor x5,x5,x26 + bic x26,x9,x8 + eor x6,x6,x27 + eor x8,x8,x28 + eor x9,x9,x30 + eor x7,x7,x26 + + bic x26,x12,x11 + bic x27,x13,x12 + bic x28,x10,x14 + bic x30,x11,x10 + eor x10,x10,x26 + bic x26,x14,x13 + eor x11,x11,x27 + eor x13,x13,x28 + eor x14,x14,x30 + eor x12,x12,x26 + + bic x26,x17,x16 + bic x27,x25,x17 + bic x28,x15,x19 + bic x30,x16,x15 + eor x15,x15,x26 + bic x26,x19,x25 + eor x16,x16,x27 + eor x25,x25,x28 + eor x19,x19,x30 + eor x17,x17,x26 + + bic x26,x22,x21 + bic x27,x23,x22 + bic x28,x20,x24 + bic x30,x21,x20 + eor x20,x20,x26 + bic x26,x24,x23 + eor x21,x21,x27 + eor x23,x23,x28 + eor x24,x24,x30 + eor x22,x22,x26 + + bne Loop + + ldr x30,[sp,#24] +.long 0xd50323bf // autiasp + ret + + + +.align 5 +KeccakF1600: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#48 + + str x0,[sp,#32] // offload argument + mov x26,x0 + ldp x0,x1,[x0,#16*0] + ldp x2,x3,[x26,#16*1] + ldp x4,x5,[x26,#16*2] + ldp x6,x7,[x26,#16*3] + ldp x8,x9,[x26,#16*4] + ldp x10,x11,[x26,#16*5] + ldp x12,x13,[x26,#16*6] + ldp x14,x15,[x26,#16*7] + ldp x16,x17,[x26,#16*8] + ldp x25,x19,[x26,#16*9] + ldp x20,x21,[x26,#16*10] + ldp x22,x23,[x26,#16*11] + ldr x24,[x26,#16*12] + + bl KeccakF1600_int + + ldr x26,[sp,#32] + stp x0,x1,[x26,#16*0] + stp x2,x3,[x26,#16*1] + stp x4,x5,[x26,#16*2] + stp x6,x7,[x26,#16*3] + stp x8,x9,[x26,#16*4] + stp x10,x11,[x26,#16*5] + stp x12,x13,[x26,#16*6] + stp x14,x15,[x26,#16*7] + stp x16,x17,[x26,#16*8] + stp x25,x19,[x26,#16*9] + stp x20,x21,[x26,#16*10] + stp x22,x23,[x26,#16*11] + str x24,[x26,#16*12] + + ldp x19,x20,[x29,#16] + add sp,sp,#48 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 +.long 0xd50323bf // autiasp + ret + + +.globl _SHA3_absorb + +.align 5 +_SHA3_absorb: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#64 + + stp x0,x1,[sp,#32] // offload arguments + stp x2,x3,[sp,#48] + + mov x26,x0 // uint64_t A[5][5] + mov x27,x1 // const void *inp + mov x28,x2 // size_t len + mov x30,x3 // size_t bsz + ldp x0,x1,[x26,#16*0] + ldp x2,x3,[x26,#16*1] + ldp x4,x5,[x26,#16*2] + ldp x6,x7,[x26,#16*3] + ldp x8,x9,[x26,#16*4] + ldp x10,x11,[x26,#16*5] + ldp x12,x13,[x26,#16*6] + ldp x14,x15,[x26,#16*7] + ldp x16,x17,[x26,#16*8] + ldp x25,x19,[x26,#16*9] + ldp x20,x21,[x26,#16*10] + ldp x22,x23,[x26,#16*11] + ldr x24,[x26,#16*12] + b Loop_absorb + +.align 4 +Loop_absorb: + subs x26,x28,x30 // len - bsz + blo Labsorbed + + str x26,[sp,#48] // save len - bsz + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x0,x0,x26 + cmp x30,#8*(0+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x1,x1,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x2,x2,x26 + cmp x30,#8*(2+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x3,x3,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x4,x4,x26 + cmp x30,#8*(4+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x5,x5,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x6,x6,x26 + cmp x30,#8*(6+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x7,x7,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x8,x8,x26 + cmp x30,#8*(8+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x9,x9,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x10,x10,x26 + cmp x30,#8*(10+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x11,x11,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x12,x12,x26 + cmp x30,#8*(12+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x13,x13,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x14,x14,x26 + cmp x30,#8*(14+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x15,x15,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x16,x16,x26 + cmp x30,#8*(16+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x17,x17,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x25,x25,x26 + cmp x30,#8*(18+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x19,x19,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x20,x20,x26 + cmp x30,#8*(20+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x21,x21,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x22,x22,x26 + cmp x30,#8*(22+2) + blo Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x23,x23,x26 + beq Lprocess_block + ldr x26,[x27],#8 // *inp++ +#ifdef __AARCH64EB__ + rev x26,x26 +#endif + eor x24,x24,x26 + +Lprocess_block: + str x27,[sp,#40] // save inp + + bl KeccakF1600_int + + ldr x27,[sp,#40] // restore arguments + ldp x28,x30,[sp,#48] + b Loop_absorb + +.align 4 +Labsorbed: + ldr x27,[sp,#32] + stp x0,x1,[x27,#16*0] + stp x2,x3,[x27,#16*1] + stp x4,x5,[x27,#16*2] + stp x6,x7,[x27,#16*3] + stp x8,x9,[x27,#16*4] + stp x10,x11,[x27,#16*5] + stp x12,x13,[x27,#16*6] + stp x14,x15,[x27,#16*7] + stp x16,x17,[x27,#16*8] + stp x25,x19,[x27,#16*9] + stp x20,x21,[x27,#16*10] + stp x22,x23,[x27,#16*11] + str x24,[x27,#16*12] + + mov x0,x28 // return value + ldp x19,x20,[x29,#16] + add sp,sp,#64 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 +.long 0xd50323bf // autiasp + ret + +.globl _SHA3_squeeze + +.align 5 +_SHA3_squeeze: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-48]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + + mov x19,x0 // put aside arguments + mov x20,x1 + mov x21,x2 + mov x22,x3 + +Loop_squeeze: + ldr x4,[x0],#8 + cmp x21,#8 + blo Lsqueeze_tail +#ifdef __AARCH64EB__ + rev x4,x4 +#endif + str x4,[x20],#8 + subs x21,x21,#8 + beq Lsqueeze_done + + subs x3,x3,#8 + bhi Loop_squeeze + + mov x0,x19 + bl KeccakF1600 + mov x0,x19 + mov x3,x22 + b Loop_squeeze + +.align 4 +Lsqueeze_tail: + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + lsr x4,x4,#8 + subs x21,x21,#1 + beq Lsqueeze_done + strb w4,[x20],#1 + +Lsqueeze_done: + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x29,x30,[sp],#48 +.long 0xd50323bf // autiasp + ret + + +.align 5 +KeccakF1600_ce: + mov x9,#12 + adr x10,iotas + b Loop_ce +.align 4 +Loop_ce: + ////////////////////////////////////////////////// Theta +.long 0xce052819 //eor3 v25.16b,v0.16b,v5.16b,v10.16b +.long 0xce062c3a //eor3 v26.16b,v1.16b,v6.16b,v11.16b +.long 0xce07305b //eor3 v27.16b,v2.16b,v7.16b,v12.16b +.long 0xce08347c //eor3 v28.16b,v3.16b,v8.16b,v13.16b +.long 0xce09389d //eor3 v29.16b,v4.16b,v9.16b,v14.16b +.long 0xce0f5339 //eor3 v25.16b,v25.16b, v15.16b,v20.16b +.long 0xce10575a //eor3 v26.16b,v26.16b, v16.16b,v21.16b +.long 0xce115b7b //eor3 v27.16b,v27.16b, v17.16b,v22.16b +.long 0xce125f9c //eor3 v28.16b,v28.16b, v18.16b,v23.16b +.long 0xce1363bd //eor3 v29.16b,v29.16b, v19.16b,v24.16b + +.long 0xce7b8f3e //rax1 v30.16b,v25.16b,v27.16b // D[1] +.long 0xce7c8f5f //rax1 v31.16b,v26.16b,v28.16b // D[2] +.long 0xce7d8f7b //rax1 v27.16b,v27.16b,v29.16b // D[3] +.long 0xce798f9c //rax1 v28.16b,v28.16b,v25.16b // D[4] +.long 0xce7a8fbd //rax1 v29.16b,v29.16b,v26.16b // D[0] + + ////////////////////////////////////////////////// Theta+Rho+Pi +.long 0xce9e50d9 //xar v25.16b, v6.16b,v30.16b,#64-44 // C[0]=A[0][1] +.long 0xce9cb126 //xar v6.16b,v9.16b,v28.16b,#64-20 +.long 0xce9f0ec9 //xar v9.16b,v22.16b,v31.16b,#64-61 +.long 0xce9c65d6 //xar v22.16b,v14.16b,v28.16b,#64-39 +.long 0xce9dba8e //xar v14.16b,v20.16b,v29.16b,#64-18 + +.long 0xce9f0854 //xar v20.16b,v2.16b,v31.16b,#64-62 + +.long 0xce9f5582 //xar v2.16b,v12.16b,v31.16b,#64-43 +.long 0xce9b9dac //xar v12.16b,v13.16b,v27.16b,#64-25 +.long 0xce9ce26d //xar v13.16b,v19.16b,v28.16b,#64-8 +.long 0xce9b22f3 //xar v19.16b,v23.16b,v27.16b,#64-56 +.long 0xce9d5df7 //xar v23.16b,v15.16b,v29.16b,#64-41 + +.long 0xce9c948f //xar v15.16b,v4.16b,v28.16b,#64-27 + + eor v0.16b,v0.16b,v29.16b + ldr x11,[x10],#8 + +.long 0xce9bae5a //xar v26.16b, v18.16b,v27.16b,#64-21 // C[1]=A[0][3] +.long 0xce9fc632 //xar v18.16b,v17.16b,v31.16b,#64-15 +.long 0xce9ed971 //xar v17.16b,v11.16b,v30.16b,#64-10 +.long 0xce9fe8eb //xar v11.16b,v7.16b,v31.16b,#64-6 +.long 0xce9df547 //xar v7.16b,v10.16b,v29.16b,#64-3 + +.long 0xce9efc2a //xar v10.16b,v1.16b,v30.16b,#64-1 // * + +.long 0xce9ccb04 //xar v4.16b,v24.16b,v28.16b,#64-14 +.long 0xce9efab8 //xar v24.16b,v21.16b,v30.16b,#64-2 +.long 0xce9b2515 //xar v21.16b,v8.16b,v27.16b,#64-55 +.long 0xce9e4e08 //xar v8.16b,v16.16b,v30.16b,#64-45 +.long 0xce9d70b0 //xar v16.16b,v5.16b,v29.16b,#64-36 + +.long 0xce9b907b //xar v27.16b, v3.16b,v27.16b,#64-28 // C[2]=A[1][0] + + ////////////////////////////////////////////////// Chi+Iota + dup v31.2d,x11 // borrow C[6] +.long 0xce22641c //bcax v28.16b, v0.16b,v2.16b,v25.16b // * +.long 0xce3a0b21 //bcax v1.16b,v25.16b, v26.16b, v2.16b // * +.long 0xce246842 //bcax v2.16b,v2.16b,v4.16b,v26.16b +.long 0xce201343 //bcax v3.16b,v26.16b, v0.16b,v4.16b +.long 0xce390084 //bcax v4.16b,v4.16b,v25.16b, v0.16b + +.long 0xce271b65 //bcax v5.16b,v27.16b, v7.16b,v6.16b // * +.long 0xce281cd9 //bcax v25.16b, v6.16b,v8.16b,v7.16b // * +.long 0xce2920e7 //bcax v7.16b,v7.16b,v9.16b,v8.16b +.long 0xce3b2508 //bcax v8.16b,v8.16b,v27.16b, v9.16b +.long 0xce266d29 //bcax v9.16b,v9.16b,v6.16b,v27.16b + + eor v0.16b,v28.16b,v31.16b // Iota + +.long 0xce2c2d5a //bcax v26.16b, v10.16b,v12.16b,v11.16b // * +.long 0xce2d317b //bcax v27.16b, v11.16b,v13.16b,v12.16b // * +.long 0xce2e358c //bcax v12.16b,v12.16b,v14.16b,v13.16b +.long 0xce2a39ad //bcax v13.16b,v13.16b,v10.16b,v14.16b +.long 0xce2b29ce //bcax v14.16b,v14.16b,v11.16b,v10.16b + +.long 0xce3141fc //bcax v28.16b, v15.16b,v17.16b,v16.16b // * +.long 0xce32461d //bcax v29.16b, v16.16b,v18.16b,v17.16b // * +.long 0xce334a31 //bcax v17.16b,v17.16b,v19.16b,v18.16b +.long 0xce2f4e52 //bcax v18.16b,v18.16b,v15.16b,v19.16b +.long 0xce303e73 //bcax v19.16b,v19.16b,v16.16b,v15.16b + +.long 0xce36569e //bcax v30.16b, v20.16b,v22.16b,v21.16b // * +.long 0xce375abf //bcax v31.16b, v21.16b,v23.16b,v22.16b // * +.long 0xce385ed6 //bcax v22.16b,v22.16b,v24.16b,v23.16b +.long 0xce3462f7 //bcax v23.16b,v23.16b,v20.16b,v24.16b +.long 0xce355318 //bcax v24.16b,v24.16b,v21.16b,v20.16b + ////////////////////////////////////////////////// Theta +.long 0xce056806 //eor3 v6.16b,v0.16b,v5.16b,v26.16b +.long 0xce196c2a //eor3 v10.16b,v1.16b,v25.16b,v27.16b +.long 0xce07304b //eor3 v11.16b,v2.16b,v7.16b,v12.16b +.long 0xce08346f //eor3 v15.16b,v3.16b,v8.16b,v13.16b +.long 0xce093890 //eor3 v16.16b,v4.16b,v9.16b,v14.16b +.long 0xce1c78c6 //eor3 v6.16b,v6.16b, v28.16b,v30.16b +.long 0xce1d7d4a //eor3 v10.16b,v10.16b, v29.16b,v31.16b +.long 0xce11596b //eor3 v11.16b,v11.16b, v17.16b,v22.16b +.long 0xce125def //eor3 v15.16b,v15.16b, v18.16b,v23.16b +.long 0xce136210 //eor3 v16.16b,v16.16b, v19.16b,v24.16b + +.long 0xce6b8cd4 //rax1 v20.16b,v6.16b,v11.16b // D[1] +.long 0xce6f8d55 //rax1 v21.16b,v10.16b,v15.16b // D[2] +.long 0xce708d6b //rax1 v11.16b,v11.16b,v16.16b // D[3] +.long 0xce668def //rax1 v15.16b,v15.16b,v6.16b // D[4] +.long 0xce6a8e10 //rax1 v16.16b,v16.16b,v10.16b // D[0] + + ////////////////////////////////////////////////// Theta+Rho+Pi +.long 0xce945326 //xar v6.16b, v25.16b,v20.16b,#64-44 // C[0]=A[0][1] +.long 0xce8fb139 //xar v25.16b,v9.16b,v15.16b,#64-20 +.long 0xce950ec9 //xar v9.16b,v22.16b,v21.16b,#64-61 +.long 0xce8f65d6 //xar v22.16b,v14.16b,v15.16b,#64-39 +.long 0xce90bbce //xar v14.16b,v30.16b,v16.16b,#64-18 + +.long 0xce95085e //xar v30.16b,v2.16b,v21.16b,#64-62 + +.long 0xce955582 //xar v2.16b,v12.16b,v21.16b,#64-43 +.long 0xce8b9dac //xar v12.16b,v13.16b,v11.16b,#64-25 +.long 0xce8fe26d //xar v13.16b,v19.16b,v15.16b,#64-8 +.long 0xce8b22f3 //xar v19.16b,v23.16b,v11.16b,#64-56 +.long 0xce905f97 //xar v23.16b,v28.16b,v16.16b,#64-41 + +.long 0xce8f949c //xar v28.16b,v4.16b,v15.16b,#64-27 + + eor v0.16b,v0.16b,v16.16b + ldr x11,[x10],#8 + +.long 0xce8bae4a //xar v10.16b, v18.16b,v11.16b,#64-21 // C[1]=A[0][3] +.long 0xce95c632 //xar v18.16b,v17.16b,v21.16b,#64-15 +.long 0xce94db71 //xar v17.16b,v27.16b,v20.16b,#64-10 +.long 0xce95e8fb //xar v27.16b,v7.16b,v21.16b,#64-6 +.long 0xce90f747 //xar v7.16b,v26.16b,v16.16b,#64-3 + +.long 0xce94fc3a //xar v26.16b,v1.16b,v20.16b,#64-1 // * + +.long 0xce8fcb04 //xar v4.16b,v24.16b,v15.16b,#64-14 +.long 0xce94fbf8 //xar v24.16b,v31.16b,v20.16b,#64-2 +.long 0xce8b251f //xar v31.16b,v8.16b,v11.16b,#64-55 +.long 0xce944fa8 //xar v8.16b,v29.16b,v20.16b,#64-45 +.long 0xce9070bd //xar v29.16b,v5.16b,v16.16b,#64-36 + +.long 0xce8b906b //xar v11.16b, v3.16b,v11.16b,#64-28 // C[2]=A[1][0] + + ////////////////////////////////////////////////// Chi+Iota + dup v21.2d,x11 // borrow C[6] +.long 0xce22180f //bcax v15.16b, v0.16b,v2.16b,v6.16b // * +.long 0xce2a08c1 //bcax v1.16b,v6.16b, v10.16b, v2.16b // * +.long 0xce242842 //bcax v2.16b,v2.16b,v4.16b,v10.16b +.long 0xce201143 //bcax v3.16b,v10.16b, v0.16b,v4.16b +.long 0xce260084 //bcax v4.16b,v4.16b,v6.16b, v0.16b + +.long 0xce276565 //bcax v5.16b,v11.16b, v7.16b,v25.16b // * +.long 0xce281f26 //bcax v6.16b, v25.16b,v8.16b,v7.16b // * +.long 0xce2920e7 //bcax v7.16b,v7.16b,v9.16b,v8.16b +.long 0xce2b2508 //bcax v8.16b,v8.16b,v11.16b, v9.16b +.long 0xce392d29 //bcax v9.16b,v9.16b,v25.16b,v11.16b + + eor v0.16b,v15.16b,v21.16b // Iota + +.long 0xce2c6f4a //bcax v10.16b, v26.16b,v12.16b,v27.16b // * +.long 0xce2d336b //bcax v11.16b, v27.16b,v13.16b,v12.16b // * +.long 0xce2e358c //bcax v12.16b,v12.16b,v14.16b,v13.16b +.long 0xce3a39ad //bcax v13.16b,v13.16b,v26.16b,v14.16b +.long 0xce3b69ce //bcax v14.16b,v14.16b,v27.16b,v26.16b + +.long 0xce31778f //bcax v15.16b, v28.16b,v17.16b,v29.16b // * +.long 0xce3247b0 //bcax v16.16b, v29.16b,v18.16b,v17.16b // * +.long 0xce334a31 //bcax v17.16b,v17.16b,v19.16b,v18.16b +.long 0xce3c4e52 //bcax v18.16b,v18.16b,v28.16b,v19.16b +.long 0xce3d7273 //bcax v19.16b,v19.16b,v29.16b,v28.16b + +.long 0xce367fd4 //bcax v20.16b, v30.16b,v22.16b,v31.16b // * +.long 0xce375bf5 //bcax v21.16b, v31.16b,v23.16b,v22.16b // * +.long 0xce385ed6 //bcax v22.16b,v22.16b,v24.16b,v23.16b +.long 0xce3e62f7 //bcax v23.16b,v23.16b,v30.16b,v24.16b +.long 0xce3f7b18 //bcax v24.16b,v24.16b,v31.16b,v30.16b + subs x9,x9,#1 + bne Loop_ce + + ret + + + +.align 5 +KeccakF1600_cext: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + stp d8,d9,[sp,#16] // per ABI requirement + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] + ldp d0,d1,[x0,#8*0] + ldp d2,d3,[x0,#8*2] + ldp d4,d5,[x0,#8*4] + ldp d6,d7,[x0,#8*6] + ldp d8,d9,[x0,#8*8] + ldp d10,d11,[x0,#8*10] + ldp d12,d13,[x0,#8*12] + ldp d14,d15,[x0,#8*14] + ldp d16,d17,[x0,#8*16] + ldp d18,d19,[x0,#8*18] + ldp d20,d21,[x0,#8*20] + ldp d22,d23,[x0,#8*22] + ldr d24,[x0,#8*24] + bl KeccakF1600_ce + ldr x30,[sp,#8] + stp d0,d1,[x0,#8*0] + stp d2,d3,[x0,#8*2] + stp d4,d5,[x0,#8*4] + stp d6,d7,[x0,#8*6] + stp d8,d9,[x0,#8*8] + stp d10,d11,[x0,#8*10] + stp d12,d13,[x0,#8*12] + stp d14,d15,[x0,#8*14] + stp d16,d17,[x0,#8*16] + stp d18,d19,[x0,#8*18] + stp d20,d21,[x0,#8*20] + stp d22,d23,[x0,#8*22] + str d24,[x0,#8*24] + + ldp d8,d9,[sp,#16] + ldp d10,d11,[sp,#32] + ldp d12,d13,[sp,#48] + ldp d14,d15,[sp,#64] + ldr x29,[sp],#80 +.long 0xd50323bf // autiasp + ret + +.globl _SHA3_absorb_cext + +.align 5 +_SHA3_absorb_cext: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-80]! + add x29,sp,#0 + stp d8,d9,[sp,#16] // per ABI requirement + stp d10,d11,[sp,#32] + stp d12,d13,[sp,#48] + stp d14,d15,[sp,#64] + ldp d0,d1,[x0,#8*0] + ldp d2,d3,[x0,#8*2] + ldp d4,d5,[x0,#8*4] + ldp d6,d7,[x0,#8*6] + ldp d8,d9,[x0,#8*8] + ldp d10,d11,[x0,#8*10] + ldp d12,d13,[x0,#8*12] + ldp d14,d15,[x0,#8*14] + ldp d16,d17,[x0,#8*16] + ldp d18,d19,[x0,#8*18] + ldp d20,d21,[x0,#8*20] + ldp d22,d23,[x0,#8*22] + ldr d24,[x0,#8*24] + b Loop_absorb_ce + +.align 4 +Loop_absorb_ce: + subs x2,x2,x3 // len - bsz + blo Labsorbed_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v0.16b,v0.16b,v31.16b + cmp x3,#8*(0+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v1.16b,v1.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v2.16b,v2.16b,v31.16b + cmp x3,#8*(2+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v3.16b,v3.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v4.16b,v4.16b,v31.16b + cmp x3,#8*(4+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v5.16b,v5.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v6.16b,v6.16b,v31.16b + cmp x3,#8*(6+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v7.16b,v7.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v8.16b,v8.16b,v31.16b + cmp x3,#8*(8+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v9.16b,v9.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v10.16b,v10.16b,v31.16b + cmp x3,#8*(10+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v11.16b,v11.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v12.16b,v12.16b,v31.16b + cmp x3,#8*(12+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v13.16b,v13.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v14.16b,v14.16b,v31.16b + cmp x3,#8*(14+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v15.16b,v15.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v16.16b,v16.16b,v31.16b + cmp x3,#8*(16+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v17.16b,v17.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v18.16b,v18.16b,v31.16b + cmp x3,#8*(18+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v19.16b,v19.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v20.16b,v20.16b,v31.16b + cmp x3,#8*(20+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v21.16b,v21.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v22.16b,v22.16b,v31.16b + cmp x3,#8*(22+2) + blo Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v23.16b,v23.16b,v31.16b + beq Lprocess_block_ce + ldr d31,[x1],#8 // *inp++ +#ifdef __AARCH64EB__ + rev64 v31.16b,v31.16b +#endif + eor v24.16b,v24.16b,v31.16b + +Lprocess_block_ce: + + bl KeccakF1600_ce + + b Loop_absorb_ce + +.align 4 +Labsorbed_ce: + stp d0,d1,[x0,#8*0] + stp d2,d3,[x0,#8*2] + stp d4,d5,[x0,#8*4] + stp d6,d7,[x0,#8*6] + stp d8,d9,[x0,#8*8] + stp d10,d11,[x0,#8*10] + stp d12,d13,[x0,#8*12] + stp d14,d15,[x0,#8*14] + stp d16,d17,[x0,#8*16] + stp d18,d19,[x0,#8*18] + stp d20,d21,[x0,#8*20] + stp d22,d23,[x0,#8*22] + str d24,[x0,#8*24] + add x0,x2,x3 // return value + + ldp d8,d9,[sp,#16] + ldp d10,d11,[sp,#32] + ldp d12,d13,[sp,#48] + ldp d14,d15,[sp,#64] + ldp x29,x30,[sp],#80 +.long 0xd50323bf // autiasp + ret + +.globl _SHA3_squeeze_cext + +.align 5 +_SHA3_squeeze_cext: +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + mov x9,x0 + mov x10,x3 + +Loop_squeeze_ce: + ldr x4,[x9],#8 + cmp x2,#8 + blo Lsqueeze_tail_ce +#ifdef __AARCH64EB__ + rev x4,x4 +#endif + str x4,[x1],#8 + beq Lsqueeze_done_ce + + sub x2,x2,#8 + subs x10,x10,#8 + bhi Loop_squeeze_ce + + bl KeccakF1600_cext + ldr x30,[sp,#8] + mov x9,x0 + mov x10,x3 + b Loop_squeeze_ce + +.align 4 +Lsqueeze_tail_ce: + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + lsr x4,x4,#8 + subs x2,x2,#1 + beq Lsqueeze_done_ce + strb w4,[x1],#1 + +Lsqueeze_done_ce: + ldr x29,[sp],#16 +.long 0xd50323bf // autiasp + ret + +.byte 75,101,99,99,97,107,45,49,54,48,48,32,97,98,115,111,114,98,32,97,110,100,32,115,113,117,101,101,122,101,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha1-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha1-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha1-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha1-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1221 @@ +#include "arm_arch.h" + +.text + + +.private_extern _OPENSSL_armcap_P +.globl _sha1_block_data_order + +.align 6 +_sha1_block_data_order: +#ifdef __ILP32__ + ldrsw x16,LOPENSSL_armcap_P +#else + ldr x16,LOPENSSL_armcap_P +#endif + adr x17,LOPENSSL_armcap_P + add x16,x16,x17 + ldr w16,[x16] + tst w16,#ARMV8_SHA1 + b.ne Lv8_entry + + stp x29,x30,[sp,#-96]! + add x29,sp,#0 + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + + ldp w20,w21,[x0] + ldp w22,w23,[x0,#8] + ldr w24,[x0,#16] + +Loop: + ldr x3,[x1],#64 + movz w28,#0x7999 + sub x2,x2,#1 + movk w28,#0x5a82,lsl#16 +#ifdef __ARMEB__ + ror x3,x3,#32 +#else + rev32 x3,x3 +#endif + add w24,w24,w28 // warm it up + add w24,w24,w3 + lsr x4,x3,#32 + ldr x5,[x1,#-56] + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + orr w25,w25,w26 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + add w23,w23,w4 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x5,x5,#32 +#else + rev32 x5,x5 +#endif + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + orr w25,w25,w26 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + add w22,w22,w5 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + lsr x6,x5,#32 + ldr x7,[x1,#-48] + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + orr w25,w25,w26 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + add w21,w21,w6 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x7,x7,#32 +#else + rev32 x7,x7 +#endif + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + orr w25,w25,w26 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + add w20,w20,w7 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + lsr x8,x7,#32 + ldr x9,[x1,#-40] + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + orr w25,w25,w26 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + add w24,w24,w8 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x9,x9,#32 +#else + rev32 x9,x9 +#endif + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + orr w25,w25,w26 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + add w23,w23,w9 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + lsr x10,x9,#32 + ldr x11,[x1,#-32] + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + orr w25,w25,w26 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + add w22,w22,w10 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x11,x11,#32 +#else + rev32 x11,x11 +#endif + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + orr w25,w25,w26 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + add w21,w21,w11 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + lsr x12,x11,#32 + ldr x13,[x1,#-24] + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + orr w25,w25,w26 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + add w20,w20,w12 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x13,x13,#32 +#else + rev32 x13,x13 +#endif + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + orr w25,w25,w26 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + add w24,w24,w13 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + lsr x14,x13,#32 + ldr x15,[x1,#-16] + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + orr w25,w25,w26 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + add w23,w23,w14 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x15,x15,#32 +#else + rev32 x15,x15 +#endif + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + orr w25,w25,w26 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + add w22,w22,w15 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + lsr x16,x15,#32 + ldr x17,[x1,#-8] + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + orr w25,w25,w26 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + add w21,w21,w16 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) +#ifdef __ARMEB__ + ror x17,x17,#32 +#else + rev32 x17,x17 +#endif + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + orr w25,w25,w26 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + add w20,w20,w17 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + lsr x19,x17,#32 + eor w3,w3,w5 + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + eor w3,w3,w11 + add w24,w24,w28 // future e+=K + orr w25,w25,w26 + add w20,w20,w27 // e+=rot(a,5) + eor w3,w3,w16 + ror w22,w22,#2 + add w24,w24,w19 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w3,w3,#31 + eor w4,w4,w6 + bic w25,w23,w21 + and w26,w22,w21 + ror w27,w20,#27 + eor w4,w4,w12 + add w23,w23,w28 // future e+=K + orr w25,w25,w26 + add w24,w24,w27 // e+=rot(a,5) + eor w4,w4,w17 + ror w21,w21,#2 + add w23,w23,w3 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w4,w4,#31 + eor w5,w5,w7 + bic w25,w22,w20 + and w26,w21,w20 + ror w27,w24,#27 + eor w5,w5,w13 + add w22,w22,w28 // future e+=K + orr w25,w25,w26 + add w23,w23,w27 // e+=rot(a,5) + eor w5,w5,w19 + ror w20,w20,#2 + add w22,w22,w4 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w5,w5,#31 + eor w6,w6,w8 + bic w25,w21,w24 + and w26,w20,w24 + ror w27,w23,#27 + eor w6,w6,w14 + add w21,w21,w28 // future e+=K + orr w25,w25,w26 + add w22,w22,w27 // e+=rot(a,5) + eor w6,w6,w3 + ror w24,w24,#2 + add w21,w21,w5 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w6,w6,#31 + eor w7,w7,w9 + bic w25,w20,w23 + and w26,w24,w23 + ror w27,w22,#27 + eor w7,w7,w15 + add w20,w20,w28 // future e+=K + orr w25,w25,w26 + add w21,w21,w27 // e+=rot(a,5) + eor w7,w7,w4 + ror w23,w23,#2 + add w20,w20,w6 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w7,w7,#31 + movz w28,#0xeba1 + movk w28,#0x6ed9,lsl#16 + eor w8,w8,w10 + bic w25,w24,w22 + and w26,w23,w22 + ror w27,w21,#27 + eor w8,w8,w16 + add w24,w24,w28 // future e+=K + orr w25,w25,w26 + add w20,w20,w27 // e+=rot(a,5) + eor w8,w8,w5 + ror w22,w22,#2 + add w24,w24,w7 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w9,w9,w17 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w9,w9,w6 + add w23,w23,w8 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w10,w10,w19 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w10,w10,w7 + add w22,w22,w9 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w11,w11,w3 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w11,w11,w8 + add w21,w21,w10 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w11,w11,#31 + eor w12,w12,w14 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w12,w12,w4 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w12,w12,w9 + add w20,w20,w11 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w12,w12,#31 + eor w13,w13,w15 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w13,w13,w5 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w13,w13,w10 + add w24,w24,w12 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w13,w13,#31 + eor w14,w14,w16 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w14,w14,w6 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w14,w14,w11 + add w23,w23,w13 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w14,w14,#31 + eor w15,w15,w17 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w15,w15,w7 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w15,w15,w12 + add w22,w22,w14 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w15,w15,#31 + eor w16,w16,w19 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w16,w16,w8 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w16,w16,w13 + add w21,w21,w15 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w17,w17,w9 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w17,w17,w14 + add w20,w20,w16 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w19,w19,w10 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w19,w19,w15 + add w24,w24,w17 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w19,w19,#31 + eor w3,w3,w5 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w3,w3,w11 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w3,w3,w16 + add w23,w23,w19 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w3,w3,#31 + eor w4,w4,w6 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w4,w4,w12 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w4,w4,w17 + add w22,w22,w3 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w4,w4,#31 + eor w5,w5,w7 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w5,w5,w13 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w5,w5,w19 + add w21,w21,w4 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w5,w5,#31 + eor w6,w6,w8 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w6,w6,w14 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w6,w6,w3 + add w20,w20,w5 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w6,w6,#31 + eor w7,w7,w9 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w7,w7,w15 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w7,w7,w4 + add w24,w24,w6 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w7,w7,#31 + eor w8,w8,w10 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w8,w8,w16 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w8,w8,w5 + add w23,w23,w7 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w9,w9,w17 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w9,w9,w6 + add w22,w22,w8 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w10,w10,w19 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w10,w10,w7 + add w21,w21,w9 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w11,w11,w3 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w11,w11,w8 + add w20,w20,w10 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w11,w11,#31 + movz w28,#0xbcdc + movk w28,#0x8f1b,lsl#16 + eor w12,w12,w14 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w12,w12,w4 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w12,w12,w9 + add w24,w24,w11 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w12,w12,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w13,w13,w15 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 // future e+=K + eor w13,w13,w5 + add w24,w24,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w21,w21,#2 + eor w13,w13,w10 + add w23,w23,w12 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w13,w13,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w14,w14,w16 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 // future e+=K + eor w14,w14,w6 + add w23,w23,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w20,w20,#2 + eor w14,w14,w11 + add w22,w22,w13 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w14,w14,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w15,w15,w17 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 // future e+=K + eor w15,w15,w7 + add w22,w22,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w24,w24,#2 + eor w15,w15,w12 + add w21,w21,w14 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w15,w15,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w16,w16,w19 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 // future e+=K + eor w16,w16,w8 + add w21,w21,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w23,w23,#2 + eor w16,w16,w13 + add w20,w20,w15 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w16,w16,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w17,w17,w3 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 // future e+=K + eor w17,w17,w9 + add w20,w20,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w22,w22,#2 + eor w17,w17,w14 + add w24,w24,w16 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w17,w17,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w19,w19,w4 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 // future e+=K + eor w19,w19,w10 + add w24,w24,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w21,w21,#2 + eor w19,w19,w15 + add w23,w23,w17 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w19,w19,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w3,w3,w5 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 // future e+=K + eor w3,w3,w11 + add w23,w23,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w20,w20,#2 + eor w3,w3,w16 + add w22,w22,w19 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w3,w3,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w4,w4,w6 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 // future e+=K + eor w4,w4,w12 + add w22,w22,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w24,w24,#2 + eor w4,w4,w17 + add w21,w21,w3 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w4,w4,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w5,w5,w7 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 // future e+=K + eor w5,w5,w13 + add w21,w21,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w23,w23,#2 + eor w5,w5,w19 + add w20,w20,w4 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w5,w5,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w6,w6,w8 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 // future e+=K + eor w6,w6,w14 + add w20,w20,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w22,w22,#2 + eor w6,w6,w3 + add w24,w24,w5 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w6,w6,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w7,w7,w9 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 // future e+=K + eor w7,w7,w15 + add w24,w24,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w21,w21,#2 + eor w7,w7,w4 + add w23,w23,w6 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w7,w7,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w8,w8,w10 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 // future e+=K + eor w8,w8,w16 + add w23,w23,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w20,w20,#2 + eor w8,w8,w5 + add w22,w22,w7 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w8,w8,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w9,w9,w11 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 // future e+=K + eor w9,w9,w17 + add w22,w22,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w24,w24,#2 + eor w9,w9,w6 + add w21,w21,w8 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w9,w9,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w10,w10,w12 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 // future e+=K + eor w10,w10,w19 + add w21,w21,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w23,w23,#2 + eor w10,w10,w7 + add w20,w20,w9 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w10,w10,#31 + orr w25,w22,w23 + and w26,w22,w23 + eor w11,w11,w13 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 // future e+=K + eor w11,w11,w3 + add w20,w20,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w22,w22,#2 + eor w11,w11,w8 + add w24,w24,w10 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w11,w11,#31 + orr w25,w21,w22 + and w26,w21,w22 + eor w12,w12,w14 + ror w27,w20,#27 + and w25,w25,w23 + add w23,w23,w28 // future e+=K + eor w12,w12,w4 + add w24,w24,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w21,w21,#2 + eor w12,w12,w9 + add w23,w23,w11 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w12,w12,#31 + orr w25,w20,w21 + and w26,w20,w21 + eor w13,w13,w15 + ror w27,w24,#27 + and w25,w25,w22 + add w22,w22,w28 // future e+=K + eor w13,w13,w5 + add w23,w23,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w20,w20,#2 + eor w13,w13,w10 + add w22,w22,w12 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w13,w13,#31 + orr w25,w24,w20 + and w26,w24,w20 + eor w14,w14,w16 + ror w27,w23,#27 + and w25,w25,w21 + add w21,w21,w28 // future e+=K + eor w14,w14,w6 + add w22,w22,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w24,w24,#2 + eor w14,w14,w11 + add w21,w21,w13 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w14,w14,#31 + orr w25,w23,w24 + and w26,w23,w24 + eor w15,w15,w17 + ror w27,w22,#27 + and w25,w25,w20 + add w20,w20,w28 // future e+=K + eor w15,w15,w7 + add w21,w21,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w23,w23,#2 + eor w15,w15,w12 + add w20,w20,w14 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w15,w15,#31 + movz w28,#0xc1d6 + movk w28,#0xca62,lsl#16 + orr w25,w22,w23 + and w26,w22,w23 + eor w16,w16,w19 + ror w27,w21,#27 + and w25,w25,w24 + add w24,w24,w28 // future e+=K + eor w16,w16,w8 + add w20,w20,w27 // e+=rot(a,5) + orr w25,w25,w26 + ror w22,w22,#2 + eor w16,w16,w13 + add w24,w24,w15 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w17,w17,w9 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w17,w17,w14 + add w23,w23,w16 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w19,w19,w10 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w19,w19,w15 + add w22,w22,w17 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w19,w19,#31 + eor w3,w3,w5 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w3,w3,w11 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w3,w3,w16 + add w21,w21,w19 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w3,w3,#31 + eor w4,w4,w6 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w4,w4,w12 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w4,w4,w17 + add w20,w20,w3 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w4,w4,#31 + eor w5,w5,w7 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w5,w5,w13 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w5,w5,w19 + add w24,w24,w4 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w5,w5,#31 + eor w6,w6,w8 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w6,w6,w14 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w6,w6,w3 + add w23,w23,w5 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w6,w6,#31 + eor w7,w7,w9 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w7,w7,w15 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w7,w7,w4 + add w22,w22,w6 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w7,w7,#31 + eor w8,w8,w10 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w8,w8,w16 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w8,w8,w5 + add w21,w21,w7 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w8,w8,#31 + eor w9,w9,w11 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w9,w9,w17 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w9,w9,w6 + add w20,w20,w8 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w9,w9,#31 + eor w10,w10,w12 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w10,w10,w19 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w10,w10,w7 + add w24,w24,w9 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w10,w10,#31 + eor w11,w11,w13 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w11,w11,w3 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w11,w11,w8 + add w23,w23,w10 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w11,w11,#31 + eor w12,w12,w14 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w12,w12,w4 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w12,w12,w9 + add w22,w22,w11 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w12,w12,#31 + eor w13,w13,w15 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w13,w13,w5 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w13,w13,w10 + add w21,w21,w12 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w13,w13,#31 + eor w14,w14,w16 + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w14,w14,w6 + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + eor w14,w14,w11 + add w20,w20,w13 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ror w14,w14,#31 + eor w15,w15,w17 + eor w25,w24,w22 + ror w27,w21,#27 + add w24,w24,w28 // future e+=K + eor w15,w15,w7 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + eor w15,w15,w12 + add w24,w24,w14 // future e+=X[i] + add w20,w20,w25 // e+=F(b,c,d) + ror w15,w15,#31 + eor w16,w16,w19 + eor w25,w23,w21 + ror w27,w20,#27 + add w23,w23,w28 // future e+=K + eor w16,w16,w8 + eor w25,w25,w22 + add w24,w24,w27 // e+=rot(a,5) + ror w21,w21,#2 + eor w16,w16,w13 + add w23,w23,w15 // future e+=X[i] + add w24,w24,w25 // e+=F(b,c,d) + ror w16,w16,#31 + eor w17,w17,w3 + eor w25,w22,w20 + ror w27,w24,#27 + add w22,w22,w28 // future e+=K + eor w17,w17,w9 + eor w25,w25,w21 + add w23,w23,w27 // e+=rot(a,5) + ror w20,w20,#2 + eor w17,w17,w14 + add w22,w22,w16 // future e+=X[i] + add w23,w23,w25 // e+=F(b,c,d) + ror w17,w17,#31 + eor w19,w19,w4 + eor w25,w21,w24 + ror w27,w23,#27 + add w21,w21,w28 // future e+=K + eor w19,w19,w10 + eor w25,w25,w20 + add w22,w22,w27 // e+=rot(a,5) + ror w24,w24,#2 + eor w19,w19,w15 + add w21,w21,w17 // future e+=X[i] + add w22,w22,w25 // e+=F(b,c,d) + ror w19,w19,#31 + ldp w4,w5,[x0] + eor w25,w20,w23 + ror w27,w22,#27 + add w20,w20,w28 // future e+=K + eor w25,w25,w24 + add w21,w21,w27 // e+=rot(a,5) + ror w23,w23,#2 + add w20,w20,w19 // future e+=X[i] + add w21,w21,w25 // e+=F(b,c,d) + ldp w6,w7,[x0,#8] + eor w25,w24,w22 + ror w27,w21,#27 + eor w25,w25,w23 + add w20,w20,w27 // e+=rot(a,5) + ror w22,w22,#2 + ldr w8,[x0,#16] + add w20,w20,w25 // e+=F(b,c,d) + add w21,w21,w5 + add w22,w22,w6 + add w20,w20,w4 + add w23,w23,w7 + add w24,w24,w8 + stp w20,w21,[x0] + stp w22,w23,[x0,#8] + str w24,[x0,#16] + cbnz x2,Loop + + ldp x19,x20,[sp,#16] + ldp x21,x22,[sp,#32] + ldp x23,x24,[sp,#48] + ldp x25,x26,[sp,#64] + ldp x27,x28,[sp,#80] + ldr x29,[sp],#96 + ret + + +.align 6 +sha1_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + adr x4,Lconst + eor v1.16b,v1.16b,v1.16b + ld1 {v0.4s},[x0],#16 + ld1 {v1.s}[0],[x0] + sub x0,x0,#16 + ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4] + +Loop_hw: + ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 + sub x2,x2,#1 + rev32 v4.16b,v4.16b + rev32 v5.16b,v5.16b + + add v20.4s,v16.4s,v4.4s + rev32 v6.16b,v6.16b + orr v22.16b,v0.16b,v0.16b // offload + + add v21.4s,v16.4s,v5.4s + rev32 v7.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b +.long 0x5e140020 //sha1c v0.16b,v1.16b,v20.4s // 0 + add v20.4s,v16.4s,v6.4s +.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 1 +.long 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s + add v21.4s,v16.4s,v7.4s +.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b +.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 2 +.long 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s + add v20.4s,v16.4s,v4.4s +.long 0x5e281885 //sha1su1 v5.16b,v4.16b +.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 3 +.long 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s + add v21.4s,v17.4s,v5.4s +.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b +.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 4 +.long 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s + add v20.4s,v17.4s,v6.4s +.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b +.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 5 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v17.4s,v7.4s +.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b +.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 6 +.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s + add v20.4s,v17.4s,v4.4s +.long 0x5e281885 //sha1su1 v5.16b,v4.16b +.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 7 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v17.4s,v5.4s +.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b +.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 8 +.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s + add v20.4s,v18.4s,v6.4s +.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b +.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 9 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v18.4s,v7.4s +.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b +.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 10 +.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s + add v20.4s,v18.4s,v4.4s +.long 0x5e281885 //sha1su1 v5.16b,v4.16b +.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 11 +.long 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s + add v21.4s,v18.4s,v5.4s +.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b +.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 12 +.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s + add v20.4s,v18.4s,v6.4s +.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b +.long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 13 +.long 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s + add v21.4s,v19.4s,v7.4s +.long 0x5e2818e4 //sha1su1 v4.16b,v7.16b +.long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 14 +.long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s + add v20.4s,v19.4s,v4.4s +.long 0x5e281885 //sha1su1 v5.16b,v4.16b +.long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 15 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v19.4s,v5.4s +.long 0x5e2818a6 //sha1su1 v6.16b,v5.16b +.long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b +.long 0x5e280803 //sha1h v3.16b,v0.16b // 16 +.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s + add v20.4s,v19.4s,v6.4s +.long 0x5e2818c7 //sha1su1 v7.16b,v6.16b +.long 0x5e280802 //sha1h v2.16b,v0.16b // 17 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + add v21.4s,v19.4s,v7.4s + +.long 0x5e280803 //sha1h v3.16b,v0.16b // 18 +.long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s + +.long 0x5e280802 //sha1h v2.16b,v0.16b // 19 +.long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s + + add v1.4s,v1.4s,v2.4s + add v0.4s,v0.4s,v22.4s + + cbnz x2,Loop_hw + + st1 {v0.4s},[x0],#16 + st1 {v1.s}[0],[x0] + + ldr x29,[sp],#16 + ret + +.align 6 +Lconst: +.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19 +.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39 +.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59 +.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79 +LOPENSSL_armcap_P: +#ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +#else +.quad _OPENSSL_armcap_P-. +#endif +.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha256-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha256-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha256-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha256-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,2063 @@ +// Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the OpenSSL license (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// ==================================================================== +// Written by Andy Polyakov for the OpenSSL +// project. The module is, however, dual licensed under OpenSSL and +// CRYPTOGAMS licenses depending on where you obtain it. For further +// details see http://www.openssl.org/~appro/cryptogams/. +// +// Permission to use under GPLv2 terms is granted. +// ==================================================================== +// +// SHA256/512 for ARMv8. +// +// Performance in cycles per processed byte and improvement coefficient +// over code generated with "default" compiler: +// +// SHA256-hw SHA256(*) SHA512 +// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +// Denver 2.01 10.5 (+26%) 6.70 (+8%) +// X-Gene 20.0 (+100%) 12.8 (+300%(***)) +// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +// Kryo 1.92 17.4 (+30%) 11.2 (+8%) +// +// (*) Software SHA256 results are of lesser relevance, presented +// mostly for informational purposes. +// (**) The result is a trade-off: it's possible to improve it by +// 10% (or by 1 cycle per round), but at the cost of 20% loss +// on Cortex-A53 (or by 4 cycles per round). +// (***) Super-impressive coefficients over gcc-generated code are +// indication of some compiler "pathology", most notably code +// generated with -mgeneral-regs-only is significantly faster +// and the gap is only 40-90%. +// +// October 2016. +// +// Originally it was reckoned that it makes no sense to implement NEON +// version of SHA256 for 64-bit processors. This is because performance +// improvement on most wide-spread Cortex-A5x processors was observed +// to be marginal, same on Cortex-A53 and ~10% on A57. But then it was +// observed that 32-bit NEON SHA256 performs significantly better than +// 64-bit scalar version on *some* of the more recent processors. As +// result 64-bit NEON version of SHA256 was added to provide best +// all-round performance. For example it executes ~30% faster on X-Gene +// and Mongoose. [For reference, NEON version of SHA512 is bound to +// deliver much less improvement, likely *negative* on Cortex-A5x. +// Which is why NEON support is limited to SHA256.] + +#ifndef __KERNEL__ +# include "arm_arch.h" +#endif + +.text + + +.private_extern _OPENSSL_armcap_P +.globl _sha256_block_data_order + +.align 6 +_sha256_block_data_order: +#ifndef __KERNEL__ +# ifdef __ILP32__ + ldrsw x16,LOPENSSL_armcap_P +# else + ldr x16,LOPENSSL_armcap_P +# endif + adr x17,LOPENSSL_armcap_P + add x16,x16,x17 + ldr w16,[x16] + tst w16,#ARMV8_SHA256 + b.ne Lv8_entry + tst w16,#ARMV7_NEON + b.ne Lneon_entry +#endif +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#4*4 + + ldp w20,w21,[x0] // load context + ldp w22,w23,[x0,#2*4] + ldp w24,w25,[x0,#4*4] + add x2,x1,x2,lsl#6 // end of input + ldp w26,w27,[x0,#6*4] + adr x30,LK256 + stp x0,x2,[x29,#96] + +Loop: + ldp w3,w4,[x1],#2*4 + ldr w19,[x30],#4 // *K++ + eor w28,w21,w22 // magic seed + str x1,[x29,#112] +#ifndef __AARCH64EB__ + rev w3,w3 // 0 +#endif + ror w16,w24,#6 + add w27,w27,w19 // h+=K[i] + eor w6,w24,w24,ror#14 + and w17,w25,w24 + bic w19,w26,w24 + add w27,w27,w3 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w20,w21 // a^b, b^c in next round + eor w16,w16,w6,ror#11 // Sigma1(e) + ror w6,w20,#2 + add w27,w27,w17 // h+=Ch(e,f,g) + eor w17,w20,w20,ror#9 + add w27,w27,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w23,w23,w27 // d+=h + eor w28,w28,w21 // Maj(a,b,c) + eor w17,w6,w17,ror#13 // Sigma0(a) + add w27,w27,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w27,w27,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w4,w4 // 1 +#endif + ldp w5,w6,[x1],#2*4 + add w27,w27,w17 // h+=Sigma0(a) + ror w16,w23,#6 + add w26,w26,w28 // h+=K[i] + eor w7,w23,w23,ror#14 + and w17,w24,w23 + bic w28,w25,w23 + add w26,w26,w4 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w27,w20 // a^b, b^c in next round + eor w16,w16,w7,ror#11 // Sigma1(e) + ror w7,w27,#2 + add w26,w26,w17 // h+=Ch(e,f,g) + eor w17,w27,w27,ror#9 + add w26,w26,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w22,w22,w26 // d+=h + eor w19,w19,w20 // Maj(a,b,c) + eor w17,w7,w17,ror#13 // Sigma0(a) + add w26,w26,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w26,w26,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w5,w5 // 2 +#endif + add w26,w26,w17 // h+=Sigma0(a) + ror w16,w22,#6 + add w25,w25,w19 // h+=K[i] + eor w8,w22,w22,ror#14 + and w17,w23,w22 + bic w19,w24,w22 + add w25,w25,w5 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w26,w27 // a^b, b^c in next round + eor w16,w16,w8,ror#11 // Sigma1(e) + ror w8,w26,#2 + add w25,w25,w17 // h+=Ch(e,f,g) + eor w17,w26,w26,ror#9 + add w25,w25,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w21,w21,w25 // d+=h + eor w28,w28,w27 // Maj(a,b,c) + eor w17,w8,w17,ror#13 // Sigma0(a) + add w25,w25,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w25,w25,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w6,w6 // 3 +#endif + ldp w7,w8,[x1],#2*4 + add w25,w25,w17 // h+=Sigma0(a) + ror w16,w21,#6 + add w24,w24,w28 // h+=K[i] + eor w9,w21,w21,ror#14 + and w17,w22,w21 + bic w28,w23,w21 + add w24,w24,w6 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w25,w26 // a^b, b^c in next round + eor w16,w16,w9,ror#11 // Sigma1(e) + ror w9,w25,#2 + add w24,w24,w17 // h+=Ch(e,f,g) + eor w17,w25,w25,ror#9 + add w24,w24,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w20,w20,w24 // d+=h + eor w19,w19,w26 // Maj(a,b,c) + eor w17,w9,w17,ror#13 // Sigma0(a) + add w24,w24,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w24,w24,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w7,w7 // 4 +#endif + add w24,w24,w17 // h+=Sigma0(a) + ror w16,w20,#6 + add w23,w23,w19 // h+=K[i] + eor w10,w20,w20,ror#14 + and w17,w21,w20 + bic w19,w22,w20 + add w23,w23,w7 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w24,w25 // a^b, b^c in next round + eor w16,w16,w10,ror#11 // Sigma1(e) + ror w10,w24,#2 + add w23,w23,w17 // h+=Ch(e,f,g) + eor w17,w24,w24,ror#9 + add w23,w23,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w27,w27,w23 // d+=h + eor w28,w28,w25 // Maj(a,b,c) + eor w17,w10,w17,ror#13 // Sigma0(a) + add w23,w23,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w23,w23,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w8,w8 // 5 +#endif + ldp w9,w10,[x1],#2*4 + add w23,w23,w17 // h+=Sigma0(a) + ror w16,w27,#6 + add w22,w22,w28 // h+=K[i] + eor w11,w27,w27,ror#14 + and w17,w20,w27 + bic w28,w21,w27 + add w22,w22,w8 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w23,w24 // a^b, b^c in next round + eor w16,w16,w11,ror#11 // Sigma1(e) + ror w11,w23,#2 + add w22,w22,w17 // h+=Ch(e,f,g) + eor w17,w23,w23,ror#9 + add w22,w22,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w26,w26,w22 // d+=h + eor w19,w19,w24 // Maj(a,b,c) + eor w17,w11,w17,ror#13 // Sigma0(a) + add w22,w22,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w22,w22,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w9,w9 // 6 +#endif + add w22,w22,w17 // h+=Sigma0(a) + ror w16,w26,#6 + add w21,w21,w19 // h+=K[i] + eor w12,w26,w26,ror#14 + and w17,w27,w26 + bic w19,w20,w26 + add w21,w21,w9 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w22,w23 // a^b, b^c in next round + eor w16,w16,w12,ror#11 // Sigma1(e) + ror w12,w22,#2 + add w21,w21,w17 // h+=Ch(e,f,g) + eor w17,w22,w22,ror#9 + add w21,w21,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w25,w25,w21 // d+=h + eor w28,w28,w23 // Maj(a,b,c) + eor w17,w12,w17,ror#13 // Sigma0(a) + add w21,w21,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w21,w21,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w10,w10 // 7 +#endif + ldp w11,w12,[x1],#2*4 + add w21,w21,w17 // h+=Sigma0(a) + ror w16,w25,#6 + add w20,w20,w28 // h+=K[i] + eor w13,w25,w25,ror#14 + and w17,w26,w25 + bic w28,w27,w25 + add w20,w20,w10 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w21,w22 // a^b, b^c in next round + eor w16,w16,w13,ror#11 // Sigma1(e) + ror w13,w21,#2 + add w20,w20,w17 // h+=Ch(e,f,g) + eor w17,w21,w21,ror#9 + add w20,w20,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w24,w24,w20 // d+=h + eor w19,w19,w22 // Maj(a,b,c) + eor w17,w13,w17,ror#13 // Sigma0(a) + add w20,w20,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w20,w20,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w11,w11 // 8 +#endif + add w20,w20,w17 // h+=Sigma0(a) + ror w16,w24,#6 + add w27,w27,w19 // h+=K[i] + eor w14,w24,w24,ror#14 + and w17,w25,w24 + bic w19,w26,w24 + add w27,w27,w11 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w20,w21 // a^b, b^c in next round + eor w16,w16,w14,ror#11 // Sigma1(e) + ror w14,w20,#2 + add w27,w27,w17 // h+=Ch(e,f,g) + eor w17,w20,w20,ror#9 + add w27,w27,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w23,w23,w27 // d+=h + eor w28,w28,w21 // Maj(a,b,c) + eor w17,w14,w17,ror#13 // Sigma0(a) + add w27,w27,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w27,w27,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w12,w12 // 9 +#endif + ldp w13,w14,[x1],#2*4 + add w27,w27,w17 // h+=Sigma0(a) + ror w16,w23,#6 + add w26,w26,w28 // h+=K[i] + eor w15,w23,w23,ror#14 + and w17,w24,w23 + bic w28,w25,w23 + add w26,w26,w12 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w27,w20 // a^b, b^c in next round + eor w16,w16,w15,ror#11 // Sigma1(e) + ror w15,w27,#2 + add w26,w26,w17 // h+=Ch(e,f,g) + eor w17,w27,w27,ror#9 + add w26,w26,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w22,w22,w26 // d+=h + eor w19,w19,w20 // Maj(a,b,c) + eor w17,w15,w17,ror#13 // Sigma0(a) + add w26,w26,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w26,w26,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w13,w13 // 10 +#endif + add w26,w26,w17 // h+=Sigma0(a) + ror w16,w22,#6 + add w25,w25,w19 // h+=K[i] + eor w0,w22,w22,ror#14 + and w17,w23,w22 + bic w19,w24,w22 + add w25,w25,w13 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w26,w27 // a^b, b^c in next round + eor w16,w16,w0,ror#11 // Sigma1(e) + ror w0,w26,#2 + add w25,w25,w17 // h+=Ch(e,f,g) + eor w17,w26,w26,ror#9 + add w25,w25,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w21,w21,w25 // d+=h + eor w28,w28,w27 // Maj(a,b,c) + eor w17,w0,w17,ror#13 // Sigma0(a) + add w25,w25,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w25,w25,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w14,w14 // 11 +#endif + ldp w15,w0,[x1],#2*4 + add w25,w25,w17 // h+=Sigma0(a) + str w6,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 // h+=K[i] + eor w6,w21,w21,ror#14 + and w17,w22,w21 + bic w28,w23,w21 + add w24,w24,w14 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w25,w26 // a^b, b^c in next round + eor w16,w16,w6,ror#11 // Sigma1(e) + ror w6,w25,#2 + add w24,w24,w17 // h+=Ch(e,f,g) + eor w17,w25,w25,ror#9 + add w24,w24,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w20,w20,w24 // d+=h + eor w19,w19,w26 // Maj(a,b,c) + eor w17,w6,w17,ror#13 // Sigma0(a) + add w24,w24,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w24,w24,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w15,w15 // 12 +#endif + add w24,w24,w17 // h+=Sigma0(a) + str w7,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 // h+=K[i] + eor w7,w20,w20,ror#14 + and w17,w21,w20 + bic w19,w22,w20 + add w23,w23,w15 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w24,w25 // a^b, b^c in next round + eor w16,w16,w7,ror#11 // Sigma1(e) + ror w7,w24,#2 + add w23,w23,w17 // h+=Ch(e,f,g) + eor w17,w24,w24,ror#9 + add w23,w23,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w27,w27,w23 // d+=h + eor w28,w28,w25 // Maj(a,b,c) + eor w17,w7,w17,ror#13 // Sigma0(a) + add w23,w23,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w23,w23,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w0,w0 // 13 +#endif + ldp w1,w2,[x1] + add w23,w23,w17 // h+=Sigma0(a) + str w8,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 // h+=K[i] + eor w8,w27,w27,ror#14 + and w17,w20,w27 + bic w28,w21,w27 + add w22,w22,w0 // h+=X[i] + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w23,w24 // a^b, b^c in next round + eor w16,w16,w8,ror#11 // Sigma1(e) + ror w8,w23,#2 + add w22,w22,w17 // h+=Ch(e,f,g) + eor w17,w23,w23,ror#9 + add w22,w22,w16 // h+=Sigma1(e) + and w19,w19,w28 // (b^c)&=(a^b) + add w26,w26,w22 // d+=h + eor w19,w19,w24 // Maj(a,b,c) + eor w17,w8,w17,ror#13 // Sigma0(a) + add w22,w22,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + //add w22,w22,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w1,w1 // 14 +#endif + ldr w6,[sp,#12] + add w22,w22,w17 // h+=Sigma0(a) + str w9,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 // h+=K[i] + eor w9,w26,w26,ror#14 + and w17,w27,w26 + bic w19,w20,w26 + add w21,w21,w1 // h+=X[i] + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w22,w23 // a^b, b^c in next round + eor w16,w16,w9,ror#11 // Sigma1(e) + ror w9,w22,#2 + add w21,w21,w17 // h+=Ch(e,f,g) + eor w17,w22,w22,ror#9 + add w21,w21,w16 // h+=Sigma1(e) + and w28,w28,w19 // (b^c)&=(a^b) + add w25,w25,w21 // d+=h + eor w28,w28,w23 // Maj(a,b,c) + eor w17,w9,w17,ror#13 // Sigma0(a) + add w21,w21,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + //add w21,w21,w17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev w2,w2 // 15 +#endif + ldr w7,[sp,#0] + add w21,w21,w17 // h+=Sigma0(a) + str w10,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 // h+=K[i] + ror w9,w4,#7 + and w17,w26,w25 + ror w8,w1,#17 + bic w28,w27,w25 + ror w10,w21,#2 + add w20,w20,w2 // h+=X[i] + eor w16,w16,w25,ror#11 + eor w9,w9,w4,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w21,w22 // a^b, b^c in next round + eor w16,w16,w25,ror#25 // Sigma1(e) + eor w10,w10,w21,ror#13 + add w20,w20,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w8,w8,w1,ror#19 + eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) + add w20,w20,w16 // h+=Sigma1(e) + eor w19,w19,w22 // Maj(a,b,c) + eor w17,w10,w21,ror#22 // Sigma0(a) + eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) + add w3,w3,w12 + add w24,w24,w20 // d+=h + add w20,w20,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w3,w3,w9 + add w20,w20,w17 // h+=Sigma0(a) + add w3,w3,w8 +Loop_16_xx: + ldr w8,[sp,#4] + str w11,[sp,#0] + ror w16,w24,#6 + add w27,w27,w19 // h+=K[i] + ror w10,w5,#7 + and w17,w25,w24 + ror w9,w2,#17 + bic w19,w26,w24 + ror w11,w20,#2 + add w27,w27,w3 // h+=X[i] + eor w16,w16,w24,ror#11 + eor w10,w10,w5,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w20,w21 // a^b, b^c in next round + eor w16,w16,w24,ror#25 // Sigma1(e) + eor w11,w11,w20,ror#13 + add w27,w27,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w9,w9,w2,ror#19 + eor w10,w10,w5,lsr#3 // sigma0(X[i+1]) + add w27,w27,w16 // h+=Sigma1(e) + eor w28,w28,w21 // Maj(a,b,c) + eor w17,w11,w20,ror#22 // Sigma0(a) + eor w9,w9,w2,lsr#10 // sigma1(X[i+14]) + add w4,w4,w13 + add w23,w23,w27 // d+=h + add w27,w27,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w4,w4,w10 + add w27,w27,w17 // h+=Sigma0(a) + add w4,w4,w9 + ldr w9,[sp,#8] + str w12,[sp,#4] + ror w16,w23,#6 + add w26,w26,w28 // h+=K[i] + ror w11,w6,#7 + and w17,w24,w23 + ror w10,w3,#17 + bic w28,w25,w23 + ror w12,w27,#2 + add w26,w26,w4 // h+=X[i] + eor w16,w16,w23,ror#11 + eor w11,w11,w6,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w27,w20 // a^b, b^c in next round + eor w16,w16,w23,ror#25 // Sigma1(e) + eor w12,w12,w27,ror#13 + add w26,w26,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w10,w10,w3,ror#19 + eor w11,w11,w6,lsr#3 // sigma0(X[i+1]) + add w26,w26,w16 // h+=Sigma1(e) + eor w19,w19,w20 // Maj(a,b,c) + eor w17,w12,w27,ror#22 // Sigma0(a) + eor w10,w10,w3,lsr#10 // sigma1(X[i+14]) + add w5,w5,w14 + add w22,w22,w26 // d+=h + add w26,w26,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w5,w5,w11 + add w26,w26,w17 // h+=Sigma0(a) + add w5,w5,w10 + ldr w10,[sp,#12] + str w13,[sp,#8] + ror w16,w22,#6 + add w25,w25,w19 // h+=K[i] + ror w12,w7,#7 + and w17,w23,w22 + ror w11,w4,#17 + bic w19,w24,w22 + ror w13,w26,#2 + add w25,w25,w5 // h+=X[i] + eor w16,w16,w22,ror#11 + eor w12,w12,w7,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w26,w27 // a^b, b^c in next round + eor w16,w16,w22,ror#25 // Sigma1(e) + eor w13,w13,w26,ror#13 + add w25,w25,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w11,w11,w4,ror#19 + eor w12,w12,w7,lsr#3 // sigma0(X[i+1]) + add w25,w25,w16 // h+=Sigma1(e) + eor w28,w28,w27 // Maj(a,b,c) + eor w17,w13,w26,ror#22 // Sigma0(a) + eor w11,w11,w4,lsr#10 // sigma1(X[i+14]) + add w6,w6,w15 + add w21,w21,w25 // d+=h + add w25,w25,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w6,w6,w12 + add w25,w25,w17 // h+=Sigma0(a) + add w6,w6,w11 + ldr w11,[sp,#0] + str w14,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 // h+=K[i] + ror w13,w8,#7 + and w17,w22,w21 + ror w12,w5,#17 + bic w28,w23,w21 + ror w14,w25,#2 + add w24,w24,w6 // h+=X[i] + eor w16,w16,w21,ror#11 + eor w13,w13,w8,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w25,w26 // a^b, b^c in next round + eor w16,w16,w21,ror#25 // Sigma1(e) + eor w14,w14,w25,ror#13 + add w24,w24,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w12,w12,w5,ror#19 + eor w13,w13,w8,lsr#3 // sigma0(X[i+1]) + add w24,w24,w16 // h+=Sigma1(e) + eor w19,w19,w26 // Maj(a,b,c) + eor w17,w14,w25,ror#22 // Sigma0(a) + eor w12,w12,w5,lsr#10 // sigma1(X[i+14]) + add w7,w7,w0 + add w20,w20,w24 // d+=h + add w24,w24,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w7,w7,w13 + add w24,w24,w17 // h+=Sigma0(a) + add w7,w7,w12 + ldr w12,[sp,#4] + str w15,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 // h+=K[i] + ror w14,w9,#7 + and w17,w21,w20 + ror w13,w6,#17 + bic w19,w22,w20 + ror w15,w24,#2 + add w23,w23,w7 // h+=X[i] + eor w16,w16,w20,ror#11 + eor w14,w14,w9,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w24,w25 // a^b, b^c in next round + eor w16,w16,w20,ror#25 // Sigma1(e) + eor w15,w15,w24,ror#13 + add w23,w23,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w13,w13,w6,ror#19 + eor w14,w14,w9,lsr#3 // sigma0(X[i+1]) + add w23,w23,w16 // h+=Sigma1(e) + eor w28,w28,w25 // Maj(a,b,c) + eor w17,w15,w24,ror#22 // Sigma0(a) + eor w13,w13,w6,lsr#10 // sigma1(X[i+14]) + add w8,w8,w1 + add w27,w27,w23 // d+=h + add w23,w23,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w8,w8,w14 + add w23,w23,w17 // h+=Sigma0(a) + add w8,w8,w13 + ldr w13,[sp,#8] + str w0,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 // h+=K[i] + ror w15,w10,#7 + and w17,w20,w27 + ror w14,w7,#17 + bic w28,w21,w27 + ror w0,w23,#2 + add w22,w22,w8 // h+=X[i] + eor w16,w16,w27,ror#11 + eor w15,w15,w10,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w23,w24 // a^b, b^c in next round + eor w16,w16,w27,ror#25 // Sigma1(e) + eor w0,w0,w23,ror#13 + add w22,w22,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w14,w14,w7,ror#19 + eor w15,w15,w10,lsr#3 // sigma0(X[i+1]) + add w22,w22,w16 // h+=Sigma1(e) + eor w19,w19,w24 // Maj(a,b,c) + eor w17,w0,w23,ror#22 // Sigma0(a) + eor w14,w14,w7,lsr#10 // sigma1(X[i+14]) + add w9,w9,w2 + add w26,w26,w22 // d+=h + add w22,w22,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w9,w9,w15 + add w22,w22,w17 // h+=Sigma0(a) + add w9,w9,w14 + ldr w14,[sp,#12] + str w1,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 // h+=K[i] + ror w0,w11,#7 + and w17,w27,w26 + ror w15,w8,#17 + bic w19,w20,w26 + ror w1,w22,#2 + add w21,w21,w9 // h+=X[i] + eor w16,w16,w26,ror#11 + eor w0,w0,w11,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w22,w23 // a^b, b^c in next round + eor w16,w16,w26,ror#25 // Sigma1(e) + eor w1,w1,w22,ror#13 + add w21,w21,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w15,w15,w8,ror#19 + eor w0,w0,w11,lsr#3 // sigma0(X[i+1]) + add w21,w21,w16 // h+=Sigma1(e) + eor w28,w28,w23 // Maj(a,b,c) + eor w17,w1,w22,ror#22 // Sigma0(a) + eor w15,w15,w8,lsr#10 // sigma1(X[i+14]) + add w10,w10,w3 + add w25,w25,w21 // d+=h + add w21,w21,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w10,w10,w0 + add w21,w21,w17 // h+=Sigma0(a) + add w10,w10,w15 + ldr w15,[sp,#0] + str w2,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 // h+=K[i] + ror w1,w12,#7 + and w17,w26,w25 + ror w0,w9,#17 + bic w28,w27,w25 + ror w2,w21,#2 + add w20,w20,w10 // h+=X[i] + eor w16,w16,w25,ror#11 + eor w1,w1,w12,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w21,w22 // a^b, b^c in next round + eor w16,w16,w25,ror#25 // Sigma1(e) + eor w2,w2,w21,ror#13 + add w20,w20,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w0,w0,w9,ror#19 + eor w1,w1,w12,lsr#3 // sigma0(X[i+1]) + add w20,w20,w16 // h+=Sigma1(e) + eor w19,w19,w22 // Maj(a,b,c) + eor w17,w2,w21,ror#22 // Sigma0(a) + eor w0,w0,w9,lsr#10 // sigma1(X[i+14]) + add w11,w11,w4 + add w24,w24,w20 // d+=h + add w20,w20,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w11,w11,w1 + add w20,w20,w17 // h+=Sigma0(a) + add w11,w11,w0 + ldr w0,[sp,#4] + str w3,[sp,#0] + ror w16,w24,#6 + add w27,w27,w19 // h+=K[i] + ror w2,w13,#7 + and w17,w25,w24 + ror w1,w10,#17 + bic w19,w26,w24 + ror w3,w20,#2 + add w27,w27,w11 // h+=X[i] + eor w16,w16,w24,ror#11 + eor w2,w2,w13,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w20,w21 // a^b, b^c in next round + eor w16,w16,w24,ror#25 // Sigma1(e) + eor w3,w3,w20,ror#13 + add w27,w27,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w1,w1,w10,ror#19 + eor w2,w2,w13,lsr#3 // sigma0(X[i+1]) + add w27,w27,w16 // h+=Sigma1(e) + eor w28,w28,w21 // Maj(a,b,c) + eor w17,w3,w20,ror#22 // Sigma0(a) + eor w1,w1,w10,lsr#10 // sigma1(X[i+14]) + add w12,w12,w5 + add w23,w23,w27 // d+=h + add w27,w27,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w12,w12,w2 + add w27,w27,w17 // h+=Sigma0(a) + add w12,w12,w1 + ldr w1,[sp,#8] + str w4,[sp,#4] + ror w16,w23,#6 + add w26,w26,w28 // h+=K[i] + ror w3,w14,#7 + and w17,w24,w23 + ror w2,w11,#17 + bic w28,w25,w23 + ror w4,w27,#2 + add w26,w26,w12 // h+=X[i] + eor w16,w16,w23,ror#11 + eor w3,w3,w14,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w27,w20 // a^b, b^c in next round + eor w16,w16,w23,ror#25 // Sigma1(e) + eor w4,w4,w27,ror#13 + add w26,w26,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w2,w2,w11,ror#19 + eor w3,w3,w14,lsr#3 // sigma0(X[i+1]) + add w26,w26,w16 // h+=Sigma1(e) + eor w19,w19,w20 // Maj(a,b,c) + eor w17,w4,w27,ror#22 // Sigma0(a) + eor w2,w2,w11,lsr#10 // sigma1(X[i+14]) + add w13,w13,w6 + add w22,w22,w26 // d+=h + add w26,w26,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w13,w13,w3 + add w26,w26,w17 // h+=Sigma0(a) + add w13,w13,w2 + ldr w2,[sp,#12] + str w5,[sp,#8] + ror w16,w22,#6 + add w25,w25,w19 // h+=K[i] + ror w4,w15,#7 + and w17,w23,w22 + ror w3,w12,#17 + bic w19,w24,w22 + ror w5,w26,#2 + add w25,w25,w13 // h+=X[i] + eor w16,w16,w22,ror#11 + eor w4,w4,w15,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w26,w27 // a^b, b^c in next round + eor w16,w16,w22,ror#25 // Sigma1(e) + eor w5,w5,w26,ror#13 + add w25,w25,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w3,w3,w12,ror#19 + eor w4,w4,w15,lsr#3 // sigma0(X[i+1]) + add w25,w25,w16 // h+=Sigma1(e) + eor w28,w28,w27 // Maj(a,b,c) + eor w17,w5,w26,ror#22 // Sigma0(a) + eor w3,w3,w12,lsr#10 // sigma1(X[i+14]) + add w14,w14,w7 + add w21,w21,w25 // d+=h + add w25,w25,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w14,w14,w4 + add w25,w25,w17 // h+=Sigma0(a) + add w14,w14,w3 + ldr w3,[sp,#0] + str w6,[sp,#12] + ror w16,w21,#6 + add w24,w24,w28 // h+=K[i] + ror w5,w0,#7 + and w17,w22,w21 + ror w4,w13,#17 + bic w28,w23,w21 + ror w6,w25,#2 + add w24,w24,w14 // h+=X[i] + eor w16,w16,w21,ror#11 + eor w5,w5,w0,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w25,w26 // a^b, b^c in next round + eor w16,w16,w21,ror#25 // Sigma1(e) + eor w6,w6,w25,ror#13 + add w24,w24,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w4,w4,w13,ror#19 + eor w5,w5,w0,lsr#3 // sigma0(X[i+1]) + add w24,w24,w16 // h+=Sigma1(e) + eor w19,w19,w26 // Maj(a,b,c) + eor w17,w6,w25,ror#22 // Sigma0(a) + eor w4,w4,w13,lsr#10 // sigma1(X[i+14]) + add w15,w15,w8 + add w20,w20,w24 // d+=h + add w24,w24,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w15,w15,w5 + add w24,w24,w17 // h+=Sigma0(a) + add w15,w15,w4 + ldr w4,[sp,#4] + str w7,[sp,#0] + ror w16,w20,#6 + add w23,w23,w19 // h+=K[i] + ror w6,w1,#7 + and w17,w21,w20 + ror w5,w14,#17 + bic w19,w22,w20 + ror w7,w24,#2 + add w23,w23,w15 // h+=X[i] + eor w16,w16,w20,ror#11 + eor w6,w6,w1,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w24,w25 // a^b, b^c in next round + eor w16,w16,w20,ror#25 // Sigma1(e) + eor w7,w7,w24,ror#13 + add w23,w23,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w5,w5,w14,ror#19 + eor w6,w6,w1,lsr#3 // sigma0(X[i+1]) + add w23,w23,w16 // h+=Sigma1(e) + eor w28,w28,w25 // Maj(a,b,c) + eor w17,w7,w24,ror#22 // Sigma0(a) + eor w5,w5,w14,lsr#10 // sigma1(X[i+14]) + add w0,w0,w9 + add w27,w27,w23 // d+=h + add w23,w23,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w0,w0,w6 + add w23,w23,w17 // h+=Sigma0(a) + add w0,w0,w5 + ldr w5,[sp,#8] + str w8,[sp,#4] + ror w16,w27,#6 + add w22,w22,w28 // h+=K[i] + ror w7,w2,#7 + and w17,w20,w27 + ror w6,w15,#17 + bic w28,w21,w27 + ror w8,w23,#2 + add w22,w22,w0 // h+=X[i] + eor w16,w16,w27,ror#11 + eor w7,w7,w2,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w23,w24 // a^b, b^c in next round + eor w16,w16,w27,ror#25 // Sigma1(e) + eor w8,w8,w23,ror#13 + add w22,w22,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w6,w6,w15,ror#19 + eor w7,w7,w2,lsr#3 // sigma0(X[i+1]) + add w22,w22,w16 // h+=Sigma1(e) + eor w19,w19,w24 // Maj(a,b,c) + eor w17,w8,w23,ror#22 // Sigma0(a) + eor w6,w6,w15,lsr#10 // sigma1(X[i+14]) + add w1,w1,w10 + add w26,w26,w22 // d+=h + add w22,w22,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w1,w1,w7 + add w22,w22,w17 // h+=Sigma0(a) + add w1,w1,w6 + ldr w6,[sp,#12] + str w9,[sp,#8] + ror w16,w26,#6 + add w21,w21,w19 // h+=K[i] + ror w8,w3,#7 + and w17,w27,w26 + ror w7,w0,#17 + bic w19,w20,w26 + ror w9,w22,#2 + add w21,w21,w1 // h+=X[i] + eor w16,w16,w26,ror#11 + eor w8,w8,w3,ror#18 + orr w17,w17,w19 // Ch(e,f,g) + eor w19,w22,w23 // a^b, b^c in next round + eor w16,w16,w26,ror#25 // Sigma1(e) + eor w9,w9,w22,ror#13 + add w21,w21,w17 // h+=Ch(e,f,g) + and w28,w28,w19 // (b^c)&=(a^b) + eor w7,w7,w0,ror#19 + eor w8,w8,w3,lsr#3 // sigma0(X[i+1]) + add w21,w21,w16 // h+=Sigma1(e) + eor w28,w28,w23 // Maj(a,b,c) + eor w17,w9,w22,ror#22 // Sigma0(a) + eor w7,w7,w0,lsr#10 // sigma1(X[i+14]) + add w2,w2,w11 + add w25,w25,w21 // d+=h + add w21,w21,w28 // h+=Maj(a,b,c) + ldr w28,[x30],#4 // *K++, w19 in next round + add w2,w2,w8 + add w21,w21,w17 // h+=Sigma0(a) + add w2,w2,w7 + ldr w7,[sp,#0] + str w10,[sp,#12] + ror w16,w25,#6 + add w20,w20,w28 // h+=K[i] + ror w9,w4,#7 + and w17,w26,w25 + ror w8,w1,#17 + bic w28,w27,w25 + ror w10,w21,#2 + add w20,w20,w2 // h+=X[i] + eor w16,w16,w25,ror#11 + eor w9,w9,w4,ror#18 + orr w17,w17,w28 // Ch(e,f,g) + eor w28,w21,w22 // a^b, b^c in next round + eor w16,w16,w25,ror#25 // Sigma1(e) + eor w10,w10,w21,ror#13 + add w20,w20,w17 // h+=Ch(e,f,g) + and w19,w19,w28 // (b^c)&=(a^b) + eor w8,w8,w1,ror#19 + eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) + add w20,w20,w16 // h+=Sigma1(e) + eor w19,w19,w22 // Maj(a,b,c) + eor w17,w10,w21,ror#22 // Sigma0(a) + eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) + add w3,w3,w12 + add w24,w24,w20 // d+=h + add w20,w20,w19 // h+=Maj(a,b,c) + ldr w19,[x30],#4 // *K++, w28 in next round + add w3,w3,w9 + add w20,w20,w17 // h+=Sigma0(a) + add w3,w3,w8 + cbnz w19,Loop_16_xx + + ldp x0,x2,[x29,#96] + ldr x1,[x29,#112] + sub x30,x30,#260 // rewind + + ldp w3,w4,[x0] + ldp w5,w6,[x0,#2*4] + add x1,x1,#14*4 // advance input pointer + ldp w7,w8,[x0,#4*4] + add w20,w20,w3 + ldp w9,w10,[x0,#6*4] + add w21,w21,w4 + add w22,w22,w5 + add w23,w23,w6 + stp w20,w21,[x0] + add w24,w24,w7 + add w25,w25,w8 + stp w22,w23,[x0,#2*4] + add w26,w26,w9 + add w27,w27,w10 + cmp x1,x2 + stp w24,w25,[x0,#4*4] + stp w26,w27,[x0,#6*4] + b.ne Loop + + ldp x19,x20,[x29,#16] + add sp,sp,#4*4 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 +.long 0xd50323bf // autiasp + ret + + +.align 6 + +LK256: +.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 +.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 +.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 +.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 +.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc +.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da +.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 +.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 +.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 +.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 +.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 +.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 +.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 +.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 +.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 +.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 +.long 0 //terminator + +#ifndef __KERNEL__ +.align 3 +LOPENSSL_armcap_P: +# ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +# else +.quad _OPENSSL_armcap_P-. +# endif +#endif +.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 +#ifndef __KERNEL__ + +.align 6 +sha256_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v0.4s,v1.4s},[x0] + adr x3,LK256 + +Loop_hw: + ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 + sub x2,x2,#1 + ld1 {v16.4s},[x3],#16 + rev32 v4.16b,v4.16b + rev32 v5.16b,v5.16b + rev32 v6.16b,v6.16b + rev32 v7.16b,v7.16b + orr v18.16b,v0.16b,v0.16b // offload + orr v19.16b,v1.16b,v1.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 //sha256su0 v4.16b,v5.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 //sha256su0 v5.16b,v6.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 //sha256su0 v6.16b,v7.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 //sha256su0 v7.16b,v4.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 //sha256su0 v4.16b,v5.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 //sha256su0 v5.16b,v6.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 //sha256su0 v6.16b,v7.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 //sha256su0 v7.16b,v4.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s +.long 0x5e2828a4 //sha256su0 v4.16b,v5.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s +.long 0x5e2828c5 //sha256su0 v5.16b,v6.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v6.4s +.long 0x5e2828e6 //sha256su0 v6.16b,v7.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s +.long 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v7.4s +.long 0x5e282887 //sha256su0 v7.16b,v4.16b + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s +.long 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b + ld1 {v17.4s},[x3],#16 + add v16.4s,v16.4s,v4.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s + + ld1 {v16.4s},[x3],#16 + add v17.4s,v17.4s,v5.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s + + ld1 {v17.4s},[x3] + add v16.4s,v16.4s,v6.4s + sub x3,x3,#64*4-16 // rewind + orr v2.16b,v0.16b,v0.16b +.long 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s +.long 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s + + add v17.4s,v17.4s,v7.4s + orr v2.16b,v0.16b,v0.16b +.long 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s +.long 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s + + add v0.4s,v0.4s,v18.4s + add v1.4s,v1.4s,v19.4s + + cbnz x2,Loop_hw + + st1 {v0.4s,v1.4s},[x0] + + ldr x29,[sp],#16 + ret + +#endif +#ifdef __KERNEL__ +.globl _sha256_block_neon +#endif + +.align 4 +_sha256_block_neon: +Lneon_entry: + stp x29, x30, [sp, #-16]! + mov x29, sp + sub sp,sp,#16*4 + + adr x16,LK256 + add x2,x1,x2,lsl#6 // len to point at the end of inp + + ld1 {v0.16b},[x1], #16 + ld1 {v1.16b},[x1], #16 + ld1 {v2.16b},[x1], #16 + ld1 {v3.16b},[x1], #16 + ld1 {v4.4s},[x16], #16 + ld1 {v5.4s},[x16], #16 + ld1 {v6.4s},[x16], #16 + ld1 {v7.4s},[x16], #16 + rev32 v0.16b,v0.16b // yes, even on + rev32 v1.16b,v1.16b // big-endian + rev32 v2.16b,v2.16b + rev32 v3.16b,v3.16b + mov x17,sp + add v4.4s,v4.4s,v0.4s + add v5.4s,v5.4s,v1.4s + add v6.4s,v6.4s,v2.4s + st1 {v4.4s,v5.4s},[x17], #32 + add v7.4s,v7.4s,v3.4s + st1 {v6.4s,v7.4s},[x17] + sub x17,x17,#32 + + ldp w3,w4,[x0] + ldp w5,w6,[x0,#8] + ldp w7,w8,[x0,#16] + ldp w9,w10,[x0,#24] + ldr w12,[sp,#0] + mov w13,wzr + eor w14,w4,w5 + mov w15,wzr + b L_00_48 + +.align 4 +L_00_48: + ext v4.16b,v0.16b,v1.16b,#4 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + bic w15,w9,w7 + ext v7.16b,v2.16b,v3.16b,#4 + eor w11,w7,w7,ror#5 + add w3,w3,w13 + mov d19,v3.d[1] + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w3,w3,ror#11 + ushr v5.4s,v4.4s,#3 + add w10,w10,w12 + add v0.4s,v0.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + ushr v7.4s,v4.4s,#18 + add w10,w10,w11 + ldr w12,[sp,#4] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w6,w6,w10 + sli v7.4s,v4.4s,#14 + eor w14,w14,w4 + ushr v16.4s,v19.4s,#17 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + eor v5.16b,v5.16b,v7.16b + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + sli v16.4s,v19.4s,#15 + add w10,w10,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + ushr v7.4s,v19.4s,#19 + add w9,w9,w12 + ror w11,w11,#6 + add v0.4s,v0.4s,v5.4s + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + sli v7.4s,v19.4s,#13 + add w9,w9,w11 + ldr w12,[sp,#8] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + eor v17.16b,v17.16b,v7.16b + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + add v0.4s,v0.4s,v17.4s + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + ushr v18.4s,v0.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v0.4s,#10 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + sli v18.4s,v0.4s,#15 + add w8,w8,w12 + ushr v17.4s,v0.4s,#19 + ror w11,w11,#6 + eor w13,w9,w10 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w9,ror#20 + add w8,w8,w11 + sli v17.4s,v0.4s,#13 + ldr w12,[sp,#12] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w4,w4,w8 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w10 + eor v17.16b,v17.16b,v17.16b + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + mov v17.d[1],v19.d[0] + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + add v0.4s,v0.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add v4.4s,v4.4s,v0.4s + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#16] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + ext v4.16b,v1.16b,v2.16b,#4 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + bic w15,w5,w3 + ext v7.16b,v3.16b,v0.16b,#4 + eor w11,w3,w3,ror#5 + add w7,w7,w13 + mov d19,v0.d[1] + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w7,w7,ror#11 + ushr v5.4s,v4.4s,#3 + add w6,w6,w12 + add v1.4s,v1.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + ushr v7.4s,v4.4s,#18 + add w6,w6,w11 + ldr w12,[sp,#20] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w10,w10,w6 + sli v7.4s,v4.4s,#14 + eor w14,w14,w8 + ushr v16.4s,v19.4s,#17 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + eor v5.16b,v5.16b,v7.16b + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + sli v16.4s,v19.4s,#15 + add w6,w6,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + ushr v7.4s,v19.4s,#19 + add w5,w5,w12 + ror w11,w11,#6 + add v1.4s,v1.4s,v5.4s + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + sli v7.4s,v19.4s,#13 + add w5,w5,w11 + ldr w12,[sp,#24] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + eor v17.16b,v17.16b,v7.16b + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + add v1.4s,v1.4s,v17.4s + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + ushr v18.4s,v1.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v1.4s,#10 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + sli v18.4s,v1.4s,#15 + add w4,w4,w12 + ushr v17.4s,v1.4s,#19 + ror w11,w11,#6 + eor w13,w5,w6 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w5,ror#20 + add w4,w4,w11 + sli v17.4s,v1.4s,#13 + ldr w12,[sp,#28] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w8,w8,w4 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w6 + eor v17.16b,v17.16b,v17.16b + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + mov v17.d[1],v19.d[0] + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + add v1.4s,v1.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add v4.4s,v4.4s,v1.4s + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[sp,#32] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + ext v4.16b,v2.16b,v3.16b,#4 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + bic w15,w9,w7 + ext v7.16b,v0.16b,v1.16b,#4 + eor w11,w7,w7,ror#5 + add w3,w3,w13 + mov d19,v1.d[1] + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w3,w3,ror#11 + ushr v5.4s,v4.4s,#3 + add w10,w10,w12 + add v2.4s,v2.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + ushr v7.4s,v4.4s,#18 + add w10,w10,w11 + ldr w12,[sp,#36] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w6,w6,w10 + sli v7.4s,v4.4s,#14 + eor w14,w14,w4 + ushr v16.4s,v19.4s,#17 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + eor v5.16b,v5.16b,v7.16b + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + sli v16.4s,v19.4s,#15 + add w10,w10,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + ushr v7.4s,v19.4s,#19 + add w9,w9,w12 + ror w11,w11,#6 + add v2.4s,v2.4s,v5.4s + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + sli v7.4s,v19.4s,#13 + add w9,w9,w11 + ldr w12,[sp,#40] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + eor v17.16b,v17.16b,v7.16b + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + add v2.4s,v2.4s,v17.4s + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + ushr v18.4s,v2.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v2.4s,#10 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + sli v18.4s,v2.4s,#15 + add w8,w8,w12 + ushr v17.4s,v2.4s,#19 + ror w11,w11,#6 + eor w13,w9,w10 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w9,ror#20 + add w8,w8,w11 + sli v17.4s,v2.4s,#13 + ldr w12,[sp,#44] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w4,w4,w8 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w10 + eor v17.16b,v17.16b,v17.16b + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + mov v17.d[1],v19.d[0] + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + add v2.4s,v2.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add v4.4s,v4.4s,v2.4s + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#48] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + ext v4.16b,v3.16b,v0.16b,#4 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + bic w15,w5,w3 + ext v7.16b,v1.16b,v2.16b,#4 + eor w11,w3,w3,ror#5 + add w7,w7,w13 + mov d19,v2.d[1] + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + ushr v6.4s,v4.4s,#7 + eor w15,w7,w7,ror#11 + ushr v5.4s,v4.4s,#3 + add w6,w6,w12 + add v3.4s,v3.4s,v7.4s + ror w11,w11,#6 + sli v6.4s,v4.4s,#25 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + ushr v7.4s,v4.4s,#18 + add w6,w6,w11 + ldr w12,[sp,#52] + and w14,w14,w13 + eor v5.16b,v5.16b,v6.16b + ror w15,w15,#2 + add w10,w10,w6 + sli v7.4s,v4.4s,#14 + eor w14,w14,w8 + ushr v16.4s,v19.4s,#17 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + eor v5.16b,v5.16b,v7.16b + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + sli v16.4s,v19.4s,#15 + add w6,w6,w14 + orr w12,w12,w15 + ushr v17.4s,v19.4s,#10 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + ushr v7.4s,v19.4s,#19 + add w5,w5,w12 + ror w11,w11,#6 + add v3.4s,v3.4s,v5.4s + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + sli v7.4s,v19.4s,#13 + add w5,w5,w11 + ldr w12,[sp,#56] + and w13,w13,w14 + eor v17.16b,v17.16b,v16.16b + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + eor v17.16b,v17.16b,v7.16b + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + add v3.4s,v3.4s,v17.4s + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + ushr v18.4s,v3.4s,#17 + orr w12,w12,w15 + ushr v19.4s,v3.4s,#10 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + sli v18.4s,v3.4s,#15 + add w4,w4,w12 + ushr v17.4s,v3.4s,#19 + ror w11,w11,#6 + eor w13,w5,w6 + eor v19.16b,v19.16b,v18.16b + eor w15,w15,w5,ror#20 + add w4,w4,w11 + sli v17.4s,v3.4s,#13 + ldr w12,[sp,#60] + and w14,w14,w13 + ror w15,w15,#2 + ld1 {v4.4s},[x16], #16 + add w8,w8,w4 + eor v19.16b,v19.16b,v17.16b + eor w14,w14,w6 + eor v17.16b,v17.16b,v17.16b + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + mov v17.d[1],v19.d[0] + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + add v3.4s,v3.4s,v17.4s + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add v4.4s,v4.4s,v3.4s + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[x16] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + cmp w12,#0 // check for K256 terminator + ldr w12,[sp,#0] + sub x17,x17,#64 + bne L_00_48 + + sub x16,x16,#256 // rewind x16 + cmp x1,x2 + mov x17, #64 + csel x17, x17, xzr, eq + sub x1,x1,x17 // avoid SEGV + mov x17,sp + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + ld1 {v0.16b},[x1],#16 + bic w15,w9,w7 + eor w11,w7,w7,ror#5 + ld1 {v4.4s},[x16],#16 + add w3,w3,w13 + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + eor w15,w3,w3,ror#11 + rev32 v0.16b,v0.16b + add w10,w10,w12 + ror w11,w11,#6 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + add v4.4s,v4.4s,v0.4s + add w10,w10,w11 + ldr w12,[sp,#4] + and w14,w14,w13 + ror w15,w15,#2 + add w6,w6,w10 + eor w14,w14,w4 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + add w10,w10,w14 + orr w12,w12,w15 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + add w9,w9,w12 + ror w11,w11,#6 + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + add w9,w9,w11 + ldr w12,[sp,#8] + and w13,w13,w14 + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + orr w12,w12,w15 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + add w8,w8,w12 + ror w11,w11,#6 + eor w13,w9,w10 + eor w15,w15,w9,ror#20 + add w8,w8,w11 + ldr w12,[sp,#12] + and w14,w14,w13 + ror w15,w15,#2 + add w4,w4,w8 + eor w14,w14,w10 + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#16] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + ld1 {v1.16b},[x1],#16 + bic w15,w5,w3 + eor w11,w3,w3,ror#5 + ld1 {v4.4s},[x16],#16 + add w7,w7,w13 + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + eor w15,w7,w7,ror#11 + rev32 v1.16b,v1.16b + add w6,w6,w12 + ror w11,w11,#6 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + add v4.4s,v4.4s,v1.4s + add w6,w6,w11 + ldr w12,[sp,#20] + and w14,w14,w13 + ror w15,w15,#2 + add w10,w10,w6 + eor w14,w14,w8 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + add w6,w6,w14 + orr w12,w12,w15 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + add w5,w5,w12 + ror w11,w11,#6 + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + add w5,w5,w11 + ldr w12,[sp,#24] + and w13,w13,w14 + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + orr w12,w12,w15 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + add w4,w4,w12 + ror w11,w11,#6 + eor w13,w5,w6 + eor w15,w15,w5,ror#20 + add w4,w4,w11 + ldr w12,[sp,#28] + and w14,w14,w13 + ror w15,w15,#2 + add w8,w8,w4 + eor w14,w14,w6 + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + ldr w12,[sp,#32] + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + add w10,w10,w12 + add w3,w3,w15 + and w12,w8,w7 + ld1 {v2.16b},[x1],#16 + bic w15,w9,w7 + eor w11,w7,w7,ror#5 + ld1 {v4.4s},[x16],#16 + add w3,w3,w13 + orr w12,w12,w15 + eor w11,w11,w7,ror#19 + eor w15,w3,w3,ror#11 + rev32 v2.16b,v2.16b + add w10,w10,w12 + ror w11,w11,#6 + eor w13,w3,w4 + eor w15,w15,w3,ror#20 + add v4.4s,v4.4s,v2.4s + add w10,w10,w11 + ldr w12,[sp,#36] + and w14,w14,w13 + ror w15,w15,#2 + add w6,w6,w10 + eor w14,w14,w4 + add w9,w9,w12 + add w10,w10,w15 + and w12,w7,w6 + bic w15,w8,w6 + eor w11,w6,w6,ror#5 + add w10,w10,w14 + orr w12,w12,w15 + eor w11,w11,w6,ror#19 + eor w15,w10,w10,ror#11 + add w9,w9,w12 + ror w11,w11,#6 + eor w14,w10,w3 + eor w15,w15,w10,ror#20 + add w9,w9,w11 + ldr w12,[sp,#40] + and w13,w13,w14 + ror w15,w15,#2 + add w5,w5,w9 + eor w13,w13,w3 + add w8,w8,w12 + add w9,w9,w15 + and w12,w6,w5 + bic w15,w7,w5 + eor w11,w5,w5,ror#5 + add w9,w9,w13 + orr w12,w12,w15 + eor w11,w11,w5,ror#19 + eor w15,w9,w9,ror#11 + add w8,w8,w12 + ror w11,w11,#6 + eor w13,w9,w10 + eor w15,w15,w9,ror#20 + add w8,w8,w11 + ldr w12,[sp,#44] + and w14,w14,w13 + ror w15,w15,#2 + add w4,w4,w8 + eor w14,w14,w10 + add w7,w7,w12 + add w8,w8,w15 + and w12,w5,w4 + bic w15,w6,w4 + eor w11,w4,w4,ror#5 + add w8,w8,w14 + orr w12,w12,w15 + eor w11,w11,w4,ror#19 + eor w15,w8,w8,ror#11 + add w7,w7,w12 + ror w11,w11,#6 + eor w14,w8,w9 + eor w15,w15,w8,ror#20 + add w7,w7,w11 + ldr w12,[sp,#48] + and w13,w13,w14 + ror w15,w15,#2 + add w3,w3,w7 + eor w13,w13,w9 + st1 {v4.4s},[x17], #16 + add w6,w6,w12 + add w7,w7,w15 + and w12,w4,w3 + ld1 {v3.16b},[x1],#16 + bic w15,w5,w3 + eor w11,w3,w3,ror#5 + ld1 {v4.4s},[x16],#16 + add w7,w7,w13 + orr w12,w12,w15 + eor w11,w11,w3,ror#19 + eor w15,w7,w7,ror#11 + rev32 v3.16b,v3.16b + add w6,w6,w12 + ror w11,w11,#6 + eor w13,w7,w8 + eor w15,w15,w7,ror#20 + add v4.4s,v4.4s,v3.4s + add w6,w6,w11 + ldr w12,[sp,#52] + and w14,w14,w13 + ror w15,w15,#2 + add w10,w10,w6 + eor w14,w14,w8 + add w5,w5,w12 + add w6,w6,w15 + and w12,w3,w10 + bic w15,w4,w10 + eor w11,w10,w10,ror#5 + add w6,w6,w14 + orr w12,w12,w15 + eor w11,w11,w10,ror#19 + eor w15,w6,w6,ror#11 + add w5,w5,w12 + ror w11,w11,#6 + eor w14,w6,w7 + eor w15,w15,w6,ror#20 + add w5,w5,w11 + ldr w12,[sp,#56] + and w13,w13,w14 + ror w15,w15,#2 + add w9,w9,w5 + eor w13,w13,w7 + add w4,w4,w12 + add w5,w5,w15 + and w12,w10,w9 + bic w15,w3,w9 + eor w11,w9,w9,ror#5 + add w5,w5,w13 + orr w12,w12,w15 + eor w11,w11,w9,ror#19 + eor w15,w5,w5,ror#11 + add w4,w4,w12 + ror w11,w11,#6 + eor w13,w5,w6 + eor w15,w15,w5,ror#20 + add w4,w4,w11 + ldr w12,[sp,#60] + and w14,w14,w13 + ror w15,w15,#2 + add w8,w8,w4 + eor w14,w14,w6 + add w3,w3,w12 + add w4,w4,w15 + and w12,w9,w8 + bic w15,w10,w8 + eor w11,w8,w8,ror#5 + add w4,w4,w14 + orr w12,w12,w15 + eor w11,w11,w8,ror#19 + eor w15,w4,w4,ror#11 + add w3,w3,w12 + ror w11,w11,#6 + eor w14,w4,w5 + eor w15,w15,w4,ror#20 + add w3,w3,w11 + and w13,w13,w14 + ror w15,w15,#2 + add w7,w7,w3 + eor w13,w13,w5 + st1 {v4.4s},[x17], #16 + add w3,w3,w15 // h+=Sigma0(a) from the past + ldp w11,w12,[x0,#0] + add w3,w3,w13 // h+=Maj(a,b,c) from the past + ldp w13,w14,[x0,#8] + add w3,w3,w11 // accumulate + add w4,w4,w12 + ldp w11,w12,[x0,#16] + add w5,w5,w13 + add w6,w6,w14 + ldp w13,w14,[x0,#24] + add w7,w7,w11 + add w8,w8,w12 + ldr w12,[sp,#0] + stp w3,w4,[x0,#0] + add w9,w9,w13 + mov w13,wzr + stp w5,w6,[x0,#8] + add w10,w10,w14 + stp w7,w8,[x0,#16] + eor w14,w4,w5 + stp w9,w10,[x0,#24] + mov w15,wzr + mov x17,sp + b.ne L_00_48 + + ldr x29,[x29] + add sp,sp,#16*4+16 + ret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha512-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha512-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha512-armv8.S 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha512-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,1618 @@ +// Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. +// +// Licensed under the OpenSSL license (the "License"). You may not use +// this file except in compliance with the License. You can obtain a copy +// in the file LICENSE in the source distribution or at +// https://www.openssl.org/source/license.html + +// ==================================================================== +// Written by Andy Polyakov for the OpenSSL +// project. The module is, however, dual licensed under OpenSSL and +// CRYPTOGAMS licenses depending on where you obtain it. For further +// details see http://www.openssl.org/~appro/cryptogams/. +// +// Permission to use under GPLv2 terms is granted. +// ==================================================================== +// +// SHA256/512 for ARMv8. +// +// Performance in cycles per processed byte and improvement coefficient +// over code generated with "default" compiler: +// +// SHA256-hw SHA256(*) SHA512 +// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) +// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) +// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) +// Denver 2.01 10.5 (+26%) 6.70 (+8%) +// X-Gene 20.0 (+100%) 12.8 (+300%(***)) +// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) +// Kryo 1.92 17.4 (+30%) 11.2 (+8%) +// +// (*) Software SHA256 results are of lesser relevance, presented +// mostly for informational purposes. +// (**) The result is a trade-off: it's possible to improve it by +// 10% (or by 1 cycle per round), but at the cost of 20% loss +// on Cortex-A53 (or by 4 cycles per round). +// (***) Super-impressive coefficients over gcc-generated code are +// indication of some compiler "pathology", most notably code +// generated with -mgeneral-regs-only is significantly faster +// and the gap is only 40-90%. +// +// October 2016. +// +// Originally it was reckoned that it makes no sense to implement NEON +// version of SHA256 for 64-bit processors. This is because performance +// improvement on most wide-spread Cortex-A5x processors was observed +// to be marginal, same on Cortex-A53 and ~10% on A57. But then it was +// observed that 32-bit NEON SHA256 performs significantly better than +// 64-bit scalar version on *some* of the more recent processors. As +// result 64-bit NEON version of SHA256 was added to provide best +// all-round performance. For example it executes ~30% faster on X-Gene +// and Mongoose. [For reference, NEON version of SHA512 is bound to +// deliver much less improvement, likely *negative* on Cortex-A5x. +// Which is why NEON support is limited to SHA256.] + +#ifndef __KERNEL__ +# include "arm_arch.h" +#endif + +.text + + +.private_extern _OPENSSL_armcap_P +.globl _sha512_block_data_order + +.align 6 +_sha512_block_data_order: +#ifndef __KERNEL__ +# ifdef __ILP32__ + ldrsw x16,LOPENSSL_armcap_P +# else + ldr x16,LOPENSSL_armcap_P +# endif + adr x17,LOPENSSL_armcap_P + add x16,x16,x17 + ldr w16,[x16] + tst w16,#ARMV8_SHA512 + b.ne Lv8_entry +#endif +.long 0xd503233f // paciasp + stp x29,x30,[sp,#-128]! + add x29,sp,#0 + + stp x19,x20,[sp,#16] + stp x21,x22,[sp,#32] + stp x23,x24,[sp,#48] + stp x25,x26,[sp,#64] + stp x27,x28,[sp,#80] + sub sp,sp,#4*8 + + ldp x20,x21,[x0] // load context + ldp x22,x23,[x0,#2*8] + ldp x24,x25,[x0,#4*8] + add x2,x1,x2,lsl#7 // end of input + ldp x26,x27,[x0,#6*8] + adr x30,LK512 + stp x0,x2,[x29,#96] + +Loop: + ldp x3,x4,[x1],#2*8 + ldr x19,[x30],#8 // *K++ + eor x28,x21,x22 // magic seed + str x1,[x29,#112] +#ifndef __AARCH64EB__ + rev x3,x3 // 0 +#endif + ror x16,x24,#14 + add x27,x27,x19 // h+=K[i] + eor x6,x24,x24,ror#23 + and x17,x25,x24 + bic x19,x26,x24 + add x27,x27,x3 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x20,x21 // a^b, b^c in next round + eor x16,x16,x6,ror#18 // Sigma1(e) + ror x6,x20,#28 + add x27,x27,x17 // h+=Ch(e,f,g) + eor x17,x20,x20,ror#5 + add x27,x27,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x23,x23,x27 // d+=h + eor x28,x28,x21 // Maj(a,b,c) + eor x17,x6,x17,ror#34 // Sigma0(a) + add x27,x27,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x27,x27,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x4,x4 // 1 +#endif + ldp x5,x6,[x1],#2*8 + add x27,x27,x17 // h+=Sigma0(a) + ror x16,x23,#14 + add x26,x26,x28 // h+=K[i] + eor x7,x23,x23,ror#23 + and x17,x24,x23 + bic x28,x25,x23 + add x26,x26,x4 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x27,x20 // a^b, b^c in next round + eor x16,x16,x7,ror#18 // Sigma1(e) + ror x7,x27,#28 + add x26,x26,x17 // h+=Ch(e,f,g) + eor x17,x27,x27,ror#5 + add x26,x26,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x22,x22,x26 // d+=h + eor x19,x19,x20 // Maj(a,b,c) + eor x17,x7,x17,ror#34 // Sigma0(a) + add x26,x26,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x26,x26,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x5,x5 // 2 +#endif + add x26,x26,x17 // h+=Sigma0(a) + ror x16,x22,#14 + add x25,x25,x19 // h+=K[i] + eor x8,x22,x22,ror#23 + and x17,x23,x22 + bic x19,x24,x22 + add x25,x25,x5 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x26,x27 // a^b, b^c in next round + eor x16,x16,x8,ror#18 // Sigma1(e) + ror x8,x26,#28 + add x25,x25,x17 // h+=Ch(e,f,g) + eor x17,x26,x26,ror#5 + add x25,x25,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x21,x21,x25 // d+=h + eor x28,x28,x27 // Maj(a,b,c) + eor x17,x8,x17,ror#34 // Sigma0(a) + add x25,x25,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x25,x25,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x6,x6 // 3 +#endif + ldp x7,x8,[x1],#2*8 + add x25,x25,x17 // h+=Sigma0(a) + ror x16,x21,#14 + add x24,x24,x28 // h+=K[i] + eor x9,x21,x21,ror#23 + and x17,x22,x21 + bic x28,x23,x21 + add x24,x24,x6 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x25,x26 // a^b, b^c in next round + eor x16,x16,x9,ror#18 // Sigma1(e) + ror x9,x25,#28 + add x24,x24,x17 // h+=Ch(e,f,g) + eor x17,x25,x25,ror#5 + add x24,x24,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x20,x20,x24 // d+=h + eor x19,x19,x26 // Maj(a,b,c) + eor x17,x9,x17,ror#34 // Sigma0(a) + add x24,x24,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x24,x24,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x7,x7 // 4 +#endif + add x24,x24,x17 // h+=Sigma0(a) + ror x16,x20,#14 + add x23,x23,x19 // h+=K[i] + eor x10,x20,x20,ror#23 + and x17,x21,x20 + bic x19,x22,x20 + add x23,x23,x7 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x24,x25 // a^b, b^c in next round + eor x16,x16,x10,ror#18 // Sigma1(e) + ror x10,x24,#28 + add x23,x23,x17 // h+=Ch(e,f,g) + eor x17,x24,x24,ror#5 + add x23,x23,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x27,x27,x23 // d+=h + eor x28,x28,x25 // Maj(a,b,c) + eor x17,x10,x17,ror#34 // Sigma0(a) + add x23,x23,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x23,x23,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x8,x8 // 5 +#endif + ldp x9,x10,[x1],#2*8 + add x23,x23,x17 // h+=Sigma0(a) + ror x16,x27,#14 + add x22,x22,x28 // h+=K[i] + eor x11,x27,x27,ror#23 + and x17,x20,x27 + bic x28,x21,x27 + add x22,x22,x8 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x23,x24 // a^b, b^c in next round + eor x16,x16,x11,ror#18 // Sigma1(e) + ror x11,x23,#28 + add x22,x22,x17 // h+=Ch(e,f,g) + eor x17,x23,x23,ror#5 + add x22,x22,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x26,x26,x22 // d+=h + eor x19,x19,x24 // Maj(a,b,c) + eor x17,x11,x17,ror#34 // Sigma0(a) + add x22,x22,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x22,x22,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x9,x9 // 6 +#endif + add x22,x22,x17 // h+=Sigma0(a) + ror x16,x26,#14 + add x21,x21,x19 // h+=K[i] + eor x12,x26,x26,ror#23 + and x17,x27,x26 + bic x19,x20,x26 + add x21,x21,x9 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x22,x23 // a^b, b^c in next round + eor x16,x16,x12,ror#18 // Sigma1(e) + ror x12,x22,#28 + add x21,x21,x17 // h+=Ch(e,f,g) + eor x17,x22,x22,ror#5 + add x21,x21,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x25,x25,x21 // d+=h + eor x28,x28,x23 // Maj(a,b,c) + eor x17,x12,x17,ror#34 // Sigma0(a) + add x21,x21,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x21,x21,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x10,x10 // 7 +#endif + ldp x11,x12,[x1],#2*8 + add x21,x21,x17 // h+=Sigma0(a) + ror x16,x25,#14 + add x20,x20,x28 // h+=K[i] + eor x13,x25,x25,ror#23 + and x17,x26,x25 + bic x28,x27,x25 + add x20,x20,x10 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x21,x22 // a^b, b^c in next round + eor x16,x16,x13,ror#18 // Sigma1(e) + ror x13,x21,#28 + add x20,x20,x17 // h+=Ch(e,f,g) + eor x17,x21,x21,ror#5 + add x20,x20,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x24,x24,x20 // d+=h + eor x19,x19,x22 // Maj(a,b,c) + eor x17,x13,x17,ror#34 // Sigma0(a) + add x20,x20,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x20,x20,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x11,x11 // 8 +#endif + add x20,x20,x17 // h+=Sigma0(a) + ror x16,x24,#14 + add x27,x27,x19 // h+=K[i] + eor x14,x24,x24,ror#23 + and x17,x25,x24 + bic x19,x26,x24 + add x27,x27,x11 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x20,x21 // a^b, b^c in next round + eor x16,x16,x14,ror#18 // Sigma1(e) + ror x14,x20,#28 + add x27,x27,x17 // h+=Ch(e,f,g) + eor x17,x20,x20,ror#5 + add x27,x27,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x23,x23,x27 // d+=h + eor x28,x28,x21 // Maj(a,b,c) + eor x17,x14,x17,ror#34 // Sigma0(a) + add x27,x27,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x27,x27,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x12,x12 // 9 +#endif + ldp x13,x14,[x1],#2*8 + add x27,x27,x17 // h+=Sigma0(a) + ror x16,x23,#14 + add x26,x26,x28 // h+=K[i] + eor x15,x23,x23,ror#23 + and x17,x24,x23 + bic x28,x25,x23 + add x26,x26,x12 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x27,x20 // a^b, b^c in next round + eor x16,x16,x15,ror#18 // Sigma1(e) + ror x15,x27,#28 + add x26,x26,x17 // h+=Ch(e,f,g) + eor x17,x27,x27,ror#5 + add x26,x26,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x22,x22,x26 // d+=h + eor x19,x19,x20 // Maj(a,b,c) + eor x17,x15,x17,ror#34 // Sigma0(a) + add x26,x26,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x26,x26,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x13,x13 // 10 +#endif + add x26,x26,x17 // h+=Sigma0(a) + ror x16,x22,#14 + add x25,x25,x19 // h+=K[i] + eor x0,x22,x22,ror#23 + and x17,x23,x22 + bic x19,x24,x22 + add x25,x25,x13 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x26,x27 // a^b, b^c in next round + eor x16,x16,x0,ror#18 // Sigma1(e) + ror x0,x26,#28 + add x25,x25,x17 // h+=Ch(e,f,g) + eor x17,x26,x26,ror#5 + add x25,x25,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x21,x21,x25 // d+=h + eor x28,x28,x27 // Maj(a,b,c) + eor x17,x0,x17,ror#34 // Sigma0(a) + add x25,x25,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x25,x25,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x14,x14 // 11 +#endif + ldp x15,x0,[x1],#2*8 + add x25,x25,x17 // h+=Sigma0(a) + str x6,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 // h+=K[i] + eor x6,x21,x21,ror#23 + and x17,x22,x21 + bic x28,x23,x21 + add x24,x24,x14 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x25,x26 // a^b, b^c in next round + eor x16,x16,x6,ror#18 // Sigma1(e) + ror x6,x25,#28 + add x24,x24,x17 // h+=Ch(e,f,g) + eor x17,x25,x25,ror#5 + add x24,x24,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x20,x20,x24 // d+=h + eor x19,x19,x26 // Maj(a,b,c) + eor x17,x6,x17,ror#34 // Sigma0(a) + add x24,x24,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x24,x24,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x15,x15 // 12 +#endif + add x24,x24,x17 // h+=Sigma0(a) + str x7,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 // h+=K[i] + eor x7,x20,x20,ror#23 + and x17,x21,x20 + bic x19,x22,x20 + add x23,x23,x15 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x24,x25 // a^b, b^c in next round + eor x16,x16,x7,ror#18 // Sigma1(e) + ror x7,x24,#28 + add x23,x23,x17 // h+=Ch(e,f,g) + eor x17,x24,x24,ror#5 + add x23,x23,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x27,x27,x23 // d+=h + eor x28,x28,x25 // Maj(a,b,c) + eor x17,x7,x17,ror#34 // Sigma0(a) + add x23,x23,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x23,x23,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x0,x0 // 13 +#endif + ldp x1,x2,[x1] + add x23,x23,x17 // h+=Sigma0(a) + str x8,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 // h+=K[i] + eor x8,x27,x27,ror#23 + and x17,x20,x27 + bic x28,x21,x27 + add x22,x22,x0 // h+=X[i] + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x23,x24 // a^b, b^c in next round + eor x16,x16,x8,ror#18 // Sigma1(e) + ror x8,x23,#28 + add x22,x22,x17 // h+=Ch(e,f,g) + eor x17,x23,x23,ror#5 + add x22,x22,x16 // h+=Sigma1(e) + and x19,x19,x28 // (b^c)&=(a^b) + add x26,x26,x22 // d+=h + eor x19,x19,x24 // Maj(a,b,c) + eor x17,x8,x17,ror#34 // Sigma0(a) + add x22,x22,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + //add x22,x22,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x1,x1 // 14 +#endif + ldr x6,[sp,#24] + add x22,x22,x17 // h+=Sigma0(a) + str x9,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 // h+=K[i] + eor x9,x26,x26,ror#23 + and x17,x27,x26 + bic x19,x20,x26 + add x21,x21,x1 // h+=X[i] + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x22,x23 // a^b, b^c in next round + eor x16,x16,x9,ror#18 // Sigma1(e) + ror x9,x22,#28 + add x21,x21,x17 // h+=Ch(e,f,g) + eor x17,x22,x22,ror#5 + add x21,x21,x16 // h+=Sigma1(e) + and x28,x28,x19 // (b^c)&=(a^b) + add x25,x25,x21 // d+=h + eor x28,x28,x23 // Maj(a,b,c) + eor x17,x9,x17,ror#34 // Sigma0(a) + add x21,x21,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + //add x21,x21,x17 // h+=Sigma0(a) +#ifndef __AARCH64EB__ + rev x2,x2 // 15 +#endif + ldr x7,[sp,#0] + add x21,x21,x17 // h+=Sigma0(a) + str x10,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 // h+=K[i] + ror x9,x4,#1 + and x17,x26,x25 + ror x8,x1,#19 + bic x28,x27,x25 + ror x10,x21,#28 + add x20,x20,x2 // h+=X[i] + eor x16,x16,x25,ror#18 + eor x9,x9,x4,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x21,x22 // a^b, b^c in next round + eor x16,x16,x25,ror#41 // Sigma1(e) + eor x10,x10,x21,ror#34 + add x20,x20,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x8,x8,x1,ror#61 + eor x9,x9,x4,lsr#7 // sigma0(X[i+1]) + add x20,x20,x16 // h+=Sigma1(e) + eor x19,x19,x22 // Maj(a,b,c) + eor x17,x10,x21,ror#39 // Sigma0(a) + eor x8,x8,x1,lsr#6 // sigma1(X[i+14]) + add x3,x3,x12 + add x24,x24,x20 // d+=h + add x20,x20,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x3,x3,x9 + add x20,x20,x17 // h+=Sigma0(a) + add x3,x3,x8 +Loop_16_xx: + ldr x8,[sp,#8] + str x11,[sp,#0] + ror x16,x24,#14 + add x27,x27,x19 // h+=K[i] + ror x10,x5,#1 + and x17,x25,x24 + ror x9,x2,#19 + bic x19,x26,x24 + ror x11,x20,#28 + add x27,x27,x3 // h+=X[i] + eor x16,x16,x24,ror#18 + eor x10,x10,x5,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x20,x21 // a^b, b^c in next round + eor x16,x16,x24,ror#41 // Sigma1(e) + eor x11,x11,x20,ror#34 + add x27,x27,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x9,x9,x2,ror#61 + eor x10,x10,x5,lsr#7 // sigma0(X[i+1]) + add x27,x27,x16 // h+=Sigma1(e) + eor x28,x28,x21 // Maj(a,b,c) + eor x17,x11,x20,ror#39 // Sigma0(a) + eor x9,x9,x2,lsr#6 // sigma1(X[i+14]) + add x4,x4,x13 + add x23,x23,x27 // d+=h + add x27,x27,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x4,x4,x10 + add x27,x27,x17 // h+=Sigma0(a) + add x4,x4,x9 + ldr x9,[sp,#16] + str x12,[sp,#8] + ror x16,x23,#14 + add x26,x26,x28 // h+=K[i] + ror x11,x6,#1 + and x17,x24,x23 + ror x10,x3,#19 + bic x28,x25,x23 + ror x12,x27,#28 + add x26,x26,x4 // h+=X[i] + eor x16,x16,x23,ror#18 + eor x11,x11,x6,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x27,x20 // a^b, b^c in next round + eor x16,x16,x23,ror#41 // Sigma1(e) + eor x12,x12,x27,ror#34 + add x26,x26,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x10,x10,x3,ror#61 + eor x11,x11,x6,lsr#7 // sigma0(X[i+1]) + add x26,x26,x16 // h+=Sigma1(e) + eor x19,x19,x20 // Maj(a,b,c) + eor x17,x12,x27,ror#39 // Sigma0(a) + eor x10,x10,x3,lsr#6 // sigma1(X[i+14]) + add x5,x5,x14 + add x22,x22,x26 // d+=h + add x26,x26,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x5,x5,x11 + add x26,x26,x17 // h+=Sigma0(a) + add x5,x5,x10 + ldr x10,[sp,#24] + str x13,[sp,#16] + ror x16,x22,#14 + add x25,x25,x19 // h+=K[i] + ror x12,x7,#1 + and x17,x23,x22 + ror x11,x4,#19 + bic x19,x24,x22 + ror x13,x26,#28 + add x25,x25,x5 // h+=X[i] + eor x16,x16,x22,ror#18 + eor x12,x12,x7,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x26,x27 // a^b, b^c in next round + eor x16,x16,x22,ror#41 // Sigma1(e) + eor x13,x13,x26,ror#34 + add x25,x25,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x11,x11,x4,ror#61 + eor x12,x12,x7,lsr#7 // sigma0(X[i+1]) + add x25,x25,x16 // h+=Sigma1(e) + eor x28,x28,x27 // Maj(a,b,c) + eor x17,x13,x26,ror#39 // Sigma0(a) + eor x11,x11,x4,lsr#6 // sigma1(X[i+14]) + add x6,x6,x15 + add x21,x21,x25 // d+=h + add x25,x25,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x6,x6,x12 + add x25,x25,x17 // h+=Sigma0(a) + add x6,x6,x11 + ldr x11,[sp,#0] + str x14,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 // h+=K[i] + ror x13,x8,#1 + and x17,x22,x21 + ror x12,x5,#19 + bic x28,x23,x21 + ror x14,x25,#28 + add x24,x24,x6 // h+=X[i] + eor x16,x16,x21,ror#18 + eor x13,x13,x8,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x25,x26 // a^b, b^c in next round + eor x16,x16,x21,ror#41 // Sigma1(e) + eor x14,x14,x25,ror#34 + add x24,x24,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x12,x12,x5,ror#61 + eor x13,x13,x8,lsr#7 // sigma0(X[i+1]) + add x24,x24,x16 // h+=Sigma1(e) + eor x19,x19,x26 // Maj(a,b,c) + eor x17,x14,x25,ror#39 // Sigma0(a) + eor x12,x12,x5,lsr#6 // sigma1(X[i+14]) + add x7,x7,x0 + add x20,x20,x24 // d+=h + add x24,x24,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x7,x7,x13 + add x24,x24,x17 // h+=Sigma0(a) + add x7,x7,x12 + ldr x12,[sp,#8] + str x15,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 // h+=K[i] + ror x14,x9,#1 + and x17,x21,x20 + ror x13,x6,#19 + bic x19,x22,x20 + ror x15,x24,#28 + add x23,x23,x7 // h+=X[i] + eor x16,x16,x20,ror#18 + eor x14,x14,x9,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x24,x25 // a^b, b^c in next round + eor x16,x16,x20,ror#41 // Sigma1(e) + eor x15,x15,x24,ror#34 + add x23,x23,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x13,x13,x6,ror#61 + eor x14,x14,x9,lsr#7 // sigma0(X[i+1]) + add x23,x23,x16 // h+=Sigma1(e) + eor x28,x28,x25 // Maj(a,b,c) + eor x17,x15,x24,ror#39 // Sigma0(a) + eor x13,x13,x6,lsr#6 // sigma1(X[i+14]) + add x8,x8,x1 + add x27,x27,x23 // d+=h + add x23,x23,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x8,x8,x14 + add x23,x23,x17 // h+=Sigma0(a) + add x8,x8,x13 + ldr x13,[sp,#16] + str x0,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 // h+=K[i] + ror x15,x10,#1 + and x17,x20,x27 + ror x14,x7,#19 + bic x28,x21,x27 + ror x0,x23,#28 + add x22,x22,x8 // h+=X[i] + eor x16,x16,x27,ror#18 + eor x15,x15,x10,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x23,x24 // a^b, b^c in next round + eor x16,x16,x27,ror#41 // Sigma1(e) + eor x0,x0,x23,ror#34 + add x22,x22,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x14,x14,x7,ror#61 + eor x15,x15,x10,lsr#7 // sigma0(X[i+1]) + add x22,x22,x16 // h+=Sigma1(e) + eor x19,x19,x24 // Maj(a,b,c) + eor x17,x0,x23,ror#39 // Sigma0(a) + eor x14,x14,x7,lsr#6 // sigma1(X[i+14]) + add x9,x9,x2 + add x26,x26,x22 // d+=h + add x22,x22,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x9,x9,x15 + add x22,x22,x17 // h+=Sigma0(a) + add x9,x9,x14 + ldr x14,[sp,#24] + str x1,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 // h+=K[i] + ror x0,x11,#1 + and x17,x27,x26 + ror x15,x8,#19 + bic x19,x20,x26 + ror x1,x22,#28 + add x21,x21,x9 // h+=X[i] + eor x16,x16,x26,ror#18 + eor x0,x0,x11,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x22,x23 // a^b, b^c in next round + eor x16,x16,x26,ror#41 // Sigma1(e) + eor x1,x1,x22,ror#34 + add x21,x21,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x15,x15,x8,ror#61 + eor x0,x0,x11,lsr#7 // sigma0(X[i+1]) + add x21,x21,x16 // h+=Sigma1(e) + eor x28,x28,x23 // Maj(a,b,c) + eor x17,x1,x22,ror#39 // Sigma0(a) + eor x15,x15,x8,lsr#6 // sigma1(X[i+14]) + add x10,x10,x3 + add x25,x25,x21 // d+=h + add x21,x21,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x10,x10,x0 + add x21,x21,x17 // h+=Sigma0(a) + add x10,x10,x15 + ldr x15,[sp,#0] + str x2,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 // h+=K[i] + ror x1,x12,#1 + and x17,x26,x25 + ror x0,x9,#19 + bic x28,x27,x25 + ror x2,x21,#28 + add x20,x20,x10 // h+=X[i] + eor x16,x16,x25,ror#18 + eor x1,x1,x12,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x21,x22 // a^b, b^c in next round + eor x16,x16,x25,ror#41 // Sigma1(e) + eor x2,x2,x21,ror#34 + add x20,x20,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x0,x0,x9,ror#61 + eor x1,x1,x12,lsr#7 // sigma0(X[i+1]) + add x20,x20,x16 // h+=Sigma1(e) + eor x19,x19,x22 // Maj(a,b,c) + eor x17,x2,x21,ror#39 // Sigma0(a) + eor x0,x0,x9,lsr#6 // sigma1(X[i+14]) + add x11,x11,x4 + add x24,x24,x20 // d+=h + add x20,x20,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x11,x11,x1 + add x20,x20,x17 // h+=Sigma0(a) + add x11,x11,x0 + ldr x0,[sp,#8] + str x3,[sp,#0] + ror x16,x24,#14 + add x27,x27,x19 // h+=K[i] + ror x2,x13,#1 + and x17,x25,x24 + ror x1,x10,#19 + bic x19,x26,x24 + ror x3,x20,#28 + add x27,x27,x11 // h+=X[i] + eor x16,x16,x24,ror#18 + eor x2,x2,x13,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x20,x21 // a^b, b^c in next round + eor x16,x16,x24,ror#41 // Sigma1(e) + eor x3,x3,x20,ror#34 + add x27,x27,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x1,x1,x10,ror#61 + eor x2,x2,x13,lsr#7 // sigma0(X[i+1]) + add x27,x27,x16 // h+=Sigma1(e) + eor x28,x28,x21 // Maj(a,b,c) + eor x17,x3,x20,ror#39 // Sigma0(a) + eor x1,x1,x10,lsr#6 // sigma1(X[i+14]) + add x12,x12,x5 + add x23,x23,x27 // d+=h + add x27,x27,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x12,x12,x2 + add x27,x27,x17 // h+=Sigma0(a) + add x12,x12,x1 + ldr x1,[sp,#16] + str x4,[sp,#8] + ror x16,x23,#14 + add x26,x26,x28 // h+=K[i] + ror x3,x14,#1 + and x17,x24,x23 + ror x2,x11,#19 + bic x28,x25,x23 + ror x4,x27,#28 + add x26,x26,x12 // h+=X[i] + eor x16,x16,x23,ror#18 + eor x3,x3,x14,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x27,x20 // a^b, b^c in next round + eor x16,x16,x23,ror#41 // Sigma1(e) + eor x4,x4,x27,ror#34 + add x26,x26,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x2,x2,x11,ror#61 + eor x3,x3,x14,lsr#7 // sigma0(X[i+1]) + add x26,x26,x16 // h+=Sigma1(e) + eor x19,x19,x20 // Maj(a,b,c) + eor x17,x4,x27,ror#39 // Sigma0(a) + eor x2,x2,x11,lsr#6 // sigma1(X[i+14]) + add x13,x13,x6 + add x22,x22,x26 // d+=h + add x26,x26,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x13,x13,x3 + add x26,x26,x17 // h+=Sigma0(a) + add x13,x13,x2 + ldr x2,[sp,#24] + str x5,[sp,#16] + ror x16,x22,#14 + add x25,x25,x19 // h+=K[i] + ror x4,x15,#1 + and x17,x23,x22 + ror x3,x12,#19 + bic x19,x24,x22 + ror x5,x26,#28 + add x25,x25,x13 // h+=X[i] + eor x16,x16,x22,ror#18 + eor x4,x4,x15,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x26,x27 // a^b, b^c in next round + eor x16,x16,x22,ror#41 // Sigma1(e) + eor x5,x5,x26,ror#34 + add x25,x25,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x3,x3,x12,ror#61 + eor x4,x4,x15,lsr#7 // sigma0(X[i+1]) + add x25,x25,x16 // h+=Sigma1(e) + eor x28,x28,x27 // Maj(a,b,c) + eor x17,x5,x26,ror#39 // Sigma0(a) + eor x3,x3,x12,lsr#6 // sigma1(X[i+14]) + add x14,x14,x7 + add x21,x21,x25 // d+=h + add x25,x25,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x14,x14,x4 + add x25,x25,x17 // h+=Sigma0(a) + add x14,x14,x3 + ldr x3,[sp,#0] + str x6,[sp,#24] + ror x16,x21,#14 + add x24,x24,x28 // h+=K[i] + ror x5,x0,#1 + and x17,x22,x21 + ror x4,x13,#19 + bic x28,x23,x21 + ror x6,x25,#28 + add x24,x24,x14 // h+=X[i] + eor x16,x16,x21,ror#18 + eor x5,x5,x0,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x25,x26 // a^b, b^c in next round + eor x16,x16,x21,ror#41 // Sigma1(e) + eor x6,x6,x25,ror#34 + add x24,x24,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x4,x4,x13,ror#61 + eor x5,x5,x0,lsr#7 // sigma0(X[i+1]) + add x24,x24,x16 // h+=Sigma1(e) + eor x19,x19,x26 // Maj(a,b,c) + eor x17,x6,x25,ror#39 // Sigma0(a) + eor x4,x4,x13,lsr#6 // sigma1(X[i+14]) + add x15,x15,x8 + add x20,x20,x24 // d+=h + add x24,x24,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x15,x15,x5 + add x24,x24,x17 // h+=Sigma0(a) + add x15,x15,x4 + ldr x4,[sp,#8] + str x7,[sp,#0] + ror x16,x20,#14 + add x23,x23,x19 // h+=K[i] + ror x6,x1,#1 + and x17,x21,x20 + ror x5,x14,#19 + bic x19,x22,x20 + ror x7,x24,#28 + add x23,x23,x15 // h+=X[i] + eor x16,x16,x20,ror#18 + eor x6,x6,x1,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x24,x25 // a^b, b^c in next round + eor x16,x16,x20,ror#41 // Sigma1(e) + eor x7,x7,x24,ror#34 + add x23,x23,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x5,x5,x14,ror#61 + eor x6,x6,x1,lsr#7 // sigma0(X[i+1]) + add x23,x23,x16 // h+=Sigma1(e) + eor x28,x28,x25 // Maj(a,b,c) + eor x17,x7,x24,ror#39 // Sigma0(a) + eor x5,x5,x14,lsr#6 // sigma1(X[i+14]) + add x0,x0,x9 + add x27,x27,x23 // d+=h + add x23,x23,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x0,x0,x6 + add x23,x23,x17 // h+=Sigma0(a) + add x0,x0,x5 + ldr x5,[sp,#16] + str x8,[sp,#8] + ror x16,x27,#14 + add x22,x22,x28 // h+=K[i] + ror x7,x2,#1 + and x17,x20,x27 + ror x6,x15,#19 + bic x28,x21,x27 + ror x8,x23,#28 + add x22,x22,x0 // h+=X[i] + eor x16,x16,x27,ror#18 + eor x7,x7,x2,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x23,x24 // a^b, b^c in next round + eor x16,x16,x27,ror#41 // Sigma1(e) + eor x8,x8,x23,ror#34 + add x22,x22,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x6,x6,x15,ror#61 + eor x7,x7,x2,lsr#7 // sigma0(X[i+1]) + add x22,x22,x16 // h+=Sigma1(e) + eor x19,x19,x24 // Maj(a,b,c) + eor x17,x8,x23,ror#39 // Sigma0(a) + eor x6,x6,x15,lsr#6 // sigma1(X[i+14]) + add x1,x1,x10 + add x26,x26,x22 // d+=h + add x22,x22,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x1,x1,x7 + add x22,x22,x17 // h+=Sigma0(a) + add x1,x1,x6 + ldr x6,[sp,#24] + str x9,[sp,#16] + ror x16,x26,#14 + add x21,x21,x19 // h+=K[i] + ror x8,x3,#1 + and x17,x27,x26 + ror x7,x0,#19 + bic x19,x20,x26 + ror x9,x22,#28 + add x21,x21,x1 // h+=X[i] + eor x16,x16,x26,ror#18 + eor x8,x8,x3,ror#8 + orr x17,x17,x19 // Ch(e,f,g) + eor x19,x22,x23 // a^b, b^c in next round + eor x16,x16,x26,ror#41 // Sigma1(e) + eor x9,x9,x22,ror#34 + add x21,x21,x17 // h+=Ch(e,f,g) + and x28,x28,x19 // (b^c)&=(a^b) + eor x7,x7,x0,ror#61 + eor x8,x8,x3,lsr#7 // sigma0(X[i+1]) + add x21,x21,x16 // h+=Sigma1(e) + eor x28,x28,x23 // Maj(a,b,c) + eor x17,x9,x22,ror#39 // Sigma0(a) + eor x7,x7,x0,lsr#6 // sigma1(X[i+14]) + add x2,x2,x11 + add x25,x25,x21 // d+=h + add x21,x21,x28 // h+=Maj(a,b,c) + ldr x28,[x30],#8 // *K++, x19 in next round + add x2,x2,x8 + add x21,x21,x17 // h+=Sigma0(a) + add x2,x2,x7 + ldr x7,[sp,#0] + str x10,[sp,#24] + ror x16,x25,#14 + add x20,x20,x28 // h+=K[i] + ror x9,x4,#1 + and x17,x26,x25 + ror x8,x1,#19 + bic x28,x27,x25 + ror x10,x21,#28 + add x20,x20,x2 // h+=X[i] + eor x16,x16,x25,ror#18 + eor x9,x9,x4,ror#8 + orr x17,x17,x28 // Ch(e,f,g) + eor x28,x21,x22 // a^b, b^c in next round + eor x16,x16,x25,ror#41 // Sigma1(e) + eor x10,x10,x21,ror#34 + add x20,x20,x17 // h+=Ch(e,f,g) + and x19,x19,x28 // (b^c)&=(a^b) + eor x8,x8,x1,ror#61 + eor x9,x9,x4,lsr#7 // sigma0(X[i+1]) + add x20,x20,x16 // h+=Sigma1(e) + eor x19,x19,x22 // Maj(a,b,c) + eor x17,x10,x21,ror#39 // Sigma0(a) + eor x8,x8,x1,lsr#6 // sigma1(X[i+14]) + add x3,x3,x12 + add x24,x24,x20 // d+=h + add x20,x20,x19 // h+=Maj(a,b,c) + ldr x19,[x30],#8 // *K++, x28 in next round + add x3,x3,x9 + add x20,x20,x17 // h+=Sigma0(a) + add x3,x3,x8 + cbnz x19,Loop_16_xx + + ldp x0,x2,[x29,#96] + ldr x1,[x29,#112] + sub x30,x30,#648 // rewind + + ldp x3,x4,[x0] + ldp x5,x6,[x0,#2*8] + add x1,x1,#14*8 // advance input pointer + ldp x7,x8,[x0,#4*8] + add x20,x20,x3 + ldp x9,x10,[x0,#6*8] + add x21,x21,x4 + add x22,x22,x5 + add x23,x23,x6 + stp x20,x21,[x0] + add x24,x24,x7 + add x25,x25,x8 + stp x22,x23,[x0,#2*8] + add x26,x26,x9 + add x27,x27,x10 + cmp x1,x2 + stp x24,x25,[x0,#4*8] + stp x26,x27,[x0,#6*8] + b.ne Loop + + ldp x19,x20,[x29,#16] + add sp,sp,#4*8 + ldp x21,x22,[x29,#32] + ldp x23,x24,[x29,#48] + ldp x25,x26,[x29,#64] + ldp x27,x28,[x29,#80] + ldp x29,x30,[sp],#128 +.long 0xd50323bf // autiasp + ret + + +.align 6 + +LK512: +.quad 0x428a2f98d728ae22,0x7137449123ef65cd +.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc +.quad 0x3956c25bf348b538,0x59f111f1b605d019 +.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 +.quad 0xd807aa98a3030242,0x12835b0145706fbe +.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 +.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 +.quad 0x9bdc06a725c71235,0xc19bf174cf692694 +.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 +.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 +.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 +.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 +.quad 0x983e5152ee66dfab,0xa831c66d2db43210 +.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 +.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 +.quad 0x06ca6351e003826f,0x142929670a0e6e70 +.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 +.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df +.quad 0x650a73548baf63de,0x766a0abb3c77b2a8 +.quad 0x81c2c92e47edaee6,0x92722c851482353b +.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 +.quad 0xc24b8b70d0f89791,0xc76c51a30654be30 +.quad 0xd192e819d6ef5218,0xd69906245565a910 +.quad 0xf40e35855771202a,0x106aa07032bbd1b8 +.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 +.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 +.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb +.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 +.quad 0x748f82ee5defb2fc,0x78a5636f43172f60 +.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec +.quad 0x90befffa23631e28,0xa4506cebde82bde9 +.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b +.quad 0xca273eceea26619c,0xd186b8c721c0c207 +.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 +.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 +.quad 0x113f9804bef90dae,0x1b710b35131c471b +.quad 0x28db77f523047d84,0x32caab7b40c72493 +.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c +.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a +.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 +.quad 0 // terminator + +#ifndef __KERNEL__ +.align 3 +LOPENSSL_armcap_P: +# ifdef __ILP32__ +.long _OPENSSL_armcap_P-. +# else +.quad _OPENSSL_armcap_P-. +# endif +#endif +.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 +.align 2 +.align 2 +#ifndef __KERNEL__ + +.align 6 +sha512_block_armv8: +Lv8_entry: + stp x29,x30,[sp,#-16]! + add x29,sp,#0 + + ld1 {v16.16b,v17.16b,v18.16b,v19.16b},[x1],#64 // load input + ld1 {v20.16b,v21.16b,v22.16b,v23.16b},[x1],#64 + + ld1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0] // load context + adr x3,LK512 + + rev64 v16.16b,v16.16b + rev64 v17.16b,v17.16b + rev64 v18.16b,v18.16b + rev64 v19.16b,v19.16b + rev64 v20.16b,v20.16b + rev64 v21.16b,v21.16b + rev64 v22.16b,v22.16b + rev64 v23.16b,v23.16b + b Loop_hw + +.align 4 +Loop_hw: + ld1 {v24.2d},[x3],#16 + subs x2,x2,#1 + sub x4,x1,#128 + orr v26.16b,v0.16b,v0.16b // offload + orr v27.16b,v1.16b,v1.16b + orr v28.16b,v2.16b,v2.16b + orr v29.16b,v3.16b,v3.16b + csel x1,x1,x4,ne // conditional rewind + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08230 //sha512su0 v16.16b,v17.16b + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08251 //sha512su0 v17.16b,v18.16b + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08272 //sha512su0 v18.16b,v19.16b + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08293 //sha512su0 v19.16b,v20.16b + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082b4 //sha512su0 v20.16b,v21.16b + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec082d5 //sha512su0 v21.16b,v22.16b + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082f6 //sha512su0 v22.16b,v23.16b + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08217 //sha512su0 v23.16b,v16.16b + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08230 //sha512su0 v16.16b,v17.16b + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08251 //sha512su0 v17.16b,v18.16b + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08272 //sha512su0 v18.16b,v19.16b + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08293 //sha512su0 v19.16b,v20.16b + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082b4 //sha512su0 v20.16b,v21.16b + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec082d5 //sha512su0 v21.16b,v22.16b + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082f6 //sha512su0 v22.16b,v23.16b + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08217 //sha512su0 v23.16b,v16.16b + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08230 //sha512su0 v16.16b,v17.16b + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08251 //sha512su0 v17.16b,v18.16b + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08272 //sha512su0 v18.16b,v19.16b + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08293 //sha512su0 v19.16b,v20.16b + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082b4 //sha512su0 v20.16b,v21.16b + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec082d5 //sha512su0 v21.16b,v22.16b + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082f6 //sha512su0 v22.16b,v23.16b + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08217 //sha512su0 v23.16b,v16.16b + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v24.2d,v24.2d,v16.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08230 //sha512su0 v16.16b,v17.16b + ext v7.16b,v20.16b,v21.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v25.2d,v25.2d,v17.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08251 //sha512su0 v17.16b,v18.16b + ext v7.16b,v21.16b,v22.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v24.2d,v24.2d,v18.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec08272 //sha512su0 v18.16b,v19.16b + ext v7.16b,v22.16b,v23.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + add v25.2d,v25.2d,v19.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08293 //sha512su0 v19.16b,v20.16b + ext v7.16b,v23.16b,v16.16b,#8 +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b +.long 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + add v24.2d,v24.2d,v20.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082b4 //sha512su0 v20.16b,v21.16b + ext v7.16b,v16.16b,v17.16b,#8 +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b +.long 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + add v25.2d,v25.2d,v21.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec082d5 //sha512su0 v21.16b,v22.16b + ext v7.16b,v17.16b,v18.16b,#8 +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b +.long 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v24.2d,v24.2d,v22.2d + ld1 {v25.2d},[x3],#16 + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]" +.long 0xcec082f6 //sha512su0 v22.16b,v23.16b + ext v7.16b,v18.16b,v19.16b,#8 +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b +.long 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + add v25.2d,v25.2d,v23.2d + ld1 {v24.2d},[x3],#16 + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]" +.long 0xcec08217 //sha512su0 v23.16b,v16.16b + ext v7.16b,v19.16b,v20.16b,#8 +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b +.long 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v16.2d + ld1 {v16.16b},[x1],#16 // load next input + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]" +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b + rev64 v16.16b,v16.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v17.2d + ld1 {v17.16b},[x1],#16 // load next input + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]" +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b + rev64 v17.16b,v17.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v18.2d + ld1 {v18.16b},[x1],#16 // load next input + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]" +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b + rev64 v18.16b,v18.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v19.2d + ld1 {v19.16b},[x1],#16 // load next input + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v2.16b,v3.16b,#8 + ext v6.16b,v1.16b,v2.16b,#8 + add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]" +.long 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b + rev64 v19.16b,v19.16b + add v4.2d,v1.2d,v3.2d // "D + T1" +.long 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v20.2d + ld1 {v20.16b},[x1],#16 // load next input + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v4.16b,v2.16b,#8 + ext v6.16b,v0.16b,v4.16b,#8 + add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]" +.long 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b + rev64 v20.16b,v20.16b + add v1.2d,v0.2d,v2.2d // "D + T1" +.long 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b + ld1 {v24.2d},[x3],#16 + add v25.2d,v25.2d,v21.2d + ld1 {v21.16b},[x1],#16 // load next input + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v1.16b,v4.16b,#8 + ext v6.16b,v3.16b,v1.16b,#8 + add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]" +.long 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b + rev64 v21.16b,v21.16b + add v0.2d,v3.2d,v4.2d // "D + T1" +.long 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b + ld1 {v25.2d},[x3],#16 + add v24.2d,v24.2d,v22.2d + ld1 {v22.16b},[x1],#16 // load next input + ext v24.16b,v24.16b,v24.16b,#8 + ext v5.16b,v0.16b,v1.16b,#8 + ext v6.16b,v2.16b,v0.16b,#8 + add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]" +.long 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b + rev64 v22.16b,v22.16b + add v3.2d,v2.2d,v1.2d // "D + T1" +.long 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b + sub x3,x3,#80*8 // rewind + add v25.2d,v25.2d,v23.2d + ld1 {v23.16b},[x1],#16 // load next input + ext v25.16b,v25.16b,v25.16b,#8 + ext v5.16b,v3.16b,v0.16b,#8 + ext v6.16b,v4.16b,v3.16b,#8 + add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]" +.long 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b + rev64 v23.16b,v23.16b + add v2.2d,v4.2d,v0.2d // "D + T1" +.long 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b + add v0.2d,v0.2d,v26.2d // accumulate + add v1.2d,v1.2d,v27.2d + add v2.2d,v2.2d,v28.2d + add v3.2d,v3.2d,v29.2d + + cbnz x2,Loop_hw + + st1 {v0.2d,v1.2d,v2.2d,v3.2d},[x0] // store context + + ldr x29,[sp],#16 + ret + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/include/openssl/opensslconf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,203 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_SYS_MACOSX +# define OPENSSL_SYS_MACOSX 1 +#endif +#ifndef OPENSSL_NO_COMP +# define OPENSSL_NO_COMP +#endif +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#ifndef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f; +# ifdef __GNUC__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# endif +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +/* + * Do not deprecate things to be deprecated in version 1.2.0 before the + * OpenSSL version number matches. + */ +#if OPENSSL_VERSION_NUMBER < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) f; +#elif OPENSSL_API_COMPAT < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_2_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# define SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned int + +#ifdef __cplusplus +} +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/include/progs.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,507 @@ +/* + * WARNING: do not edit! + * Generated by apps/progs.pl + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +typedef enum FUNC_TYPE { + FT_none, FT_general, FT_md, FT_cipher, FT_pkey, + FT_md_alg, FT_cipher_alg +} FUNC_TYPE; + +typedef struct function_st { + FUNC_TYPE type; + const char *name; + int (*func)(int argc, char *argv[]); + const OPTIONS *help; +} FUNCTION; + +DEFINE_LHASH_OF(FUNCTION); + +extern int asn1parse_main(int argc, char *argv[]); +extern int ca_main(int argc, char *argv[]); +extern int ciphers_main(int argc, char *argv[]); +extern int cms_main(int argc, char *argv[]); +extern int crl_main(int argc, char *argv[]); +extern int crl2pkcs7_main(int argc, char *argv[]); +extern int dgst_main(int argc, char *argv[]); +extern int dhparam_main(int argc, char *argv[]); +extern int dsa_main(int argc, char *argv[]); +extern int dsaparam_main(int argc, char *argv[]); +extern int ec_main(int argc, char *argv[]); +extern int ecparam_main(int argc, char *argv[]); +extern int enc_main(int argc, char *argv[]); +extern int engine_main(int argc, char *argv[]); +extern int errstr_main(int argc, char *argv[]); +extern int gendsa_main(int argc, char *argv[]); +extern int genpkey_main(int argc, char *argv[]); +extern int genrsa_main(int argc, char *argv[]); +extern int help_main(int argc, char *argv[]); +extern int list_main(int argc, char *argv[]); +extern int nseq_main(int argc, char *argv[]); +extern int ocsp_main(int argc, char *argv[]); +extern int passwd_main(int argc, char *argv[]); +extern int pkcs12_main(int argc, char *argv[]); +extern int pkcs7_main(int argc, char *argv[]); +extern int pkcs8_main(int argc, char *argv[]); +extern int pkey_main(int argc, char *argv[]); +extern int pkeyparam_main(int argc, char *argv[]); +extern int pkeyutl_main(int argc, char *argv[]); +extern int prime_main(int argc, char *argv[]); +extern int rand_main(int argc, char *argv[]); +extern int rehash_main(int argc, char *argv[]); +extern int req_main(int argc, char *argv[]); +extern int rsa_main(int argc, char *argv[]); +extern int rsautl_main(int argc, char *argv[]); +extern int s_client_main(int argc, char *argv[]); +extern int s_server_main(int argc, char *argv[]); +extern int s_time_main(int argc, char *argv[]); +extern int sess_id_main(int argc, char *argv[]); +extern int smime_main(int argc, char *argv[]); +extern int speed_main(int argc, char *argv[]); +extern int spkac_main(int argc, char *argv[]); +extern int srp_main(int argc, char *argv[]); +extern int storeutl_main(int argc, char *argv[]); +extern int ts_main(int argc, char *argv[]); +extern int verify_main(int argc, char *argv[]); +extern int version_main(int argc, char *argv[]); +extern int x509_main(int argc, char *argv[]); + +extern const OPTIONS asn1parse_options[]; +extern const OPTIONS ca_options[]; +extern const OPTIONS ciphers_options[]; +extern const OPTIONS cms_options[]; +extern const OPTIONS crl_options[]; +extern const OPTIONS crl2pkcs7_options[]; +extern const OPTIONS dgst_options[]; +extern const OPTIONS dhparam_options[]; +extern const OPTIONS dsa_options[]; +extern const OPTIONS dsaparam_options[]; +extern const OPTIONS ec_options[]; +extern const OPTIONS ecparam_options[]; +extern const OPTIONS enc_options[]; +extern const OPTIONS engine_options[]; +extern const OPTIONS errstr_options[]; +extern const OPTIONS gendsa_options[]; +extern const OPTIONS genpkey_options[]; +extern const OPTIONS genrsa_options[]; +extern const OPTIONS help_options[]; +extern const OPTIONS list_options[]; +extern const OPTIONS nseq_options[]; +extern const OPTIONS ocsp_options[]; +extern const OPTIONS passwd_options[]; +extern const OPTIONS pkcs12_options[]; +extern const OPTIONS pkcs7_options[]; +extern const OPTIONS pkcs8_options[]; +extern const OPTIONS pkey_options[]; +extern const OPTIONS pkeyparam_options[]; +extern const OPTIONS pkeyutl_options[]; +extern const OPTIONS prime_options[]; +extern const OPTIONS rand_options[]; +extern const OPTIONS rehash_options[]; +extern const OPTIONS req_options[]; +extern const OPTIONS rsa_options[]; +extern const OPTIONS rsautl_options[]; +extern const OPTIONS s_client_options[]; +extern const OPTIONS s_server_options[]; +extern const OPTIONS s_time_options[]; +extern const OPTIONS sess_id_options[]; +extern const OPTIONS smime_options[]; +extern const OPTIONS speed_options[]; +extern const OPTIONS spkac_options[]; +extern const OPTIONS srp_options[]; +extern const OPTIONS storeutl_options[]; +extern const OPTIONS ts_options[]; +extern const OPTIONS verify_options[]; +extern const OPTIONS version_options[]; +extern const OPTIONS x509_options[]; + +#ifdef INCLUDE_FUNCTION_TABLE +static FUNCTION functions[] = { + {FT_general, "asn1parse", asn1parse_main, asn1parse_options}, + {FT_general, "ca", ca_main, ca_options}, +#ifndef OPENSSL_NO_SOCK + {FT_general, "ciphers", ciphers_main, ciphers_options}, +#endif +#ifndef OPENSSL_NO_CMS + {FT_general, "cms", cms_main, cms_options}, +#endif + {FT_general, "crl", crl_main, crl_options}, + {FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options}, + {FT_general, "dgst", dgst_main, dgst_options}, +#ifndef OPENSSL_NO_DH + {FT_general, "dhparam", dhparam_main, dhparam_options}, +#endif +#ifndef OPENSSL_NO_DSA + {FT_general, "dsa", dsa_main, dsa_options}, +#endif +#ifndef OPENSSL_NO_DSA + {FT_general, "dsaparam", dsaparam_main, dsaparam_options}, +#endif +#ifndef OPENSSL_NO_EC + {FT_general, "ec", ec_main, ec_options}, +#endif +#ifndef OPENSSL_NO_EC + {FT_general, "ecparam", ecparam_main, ecparam_options}, +#endif + {FT_general, "enc", enc_main, enc_options}, +#ifndef OPENSSL_NO_ENGINE + {FT_general, "engine", engine_main, engine_options}, +#endif + {FT_general, "errstr", errstr_main, errstr_options}, +#ifndef OPENSSL_NO_DSA + {FT_general, "gendsa", gendsa_main, gendsa_options}, +#endif + {FT_general, "genpkey", genpkey_main, genpkey_options}, +#ifndef OPENSSL_NO_RSA + {FT_general, "genrsa", genrsa_main, genrsa_options}, +#endif + {FT_general, "help", help_main, help_options}, + {FT_general, "list", list_main, list_options}, + {FT_general, "nseq", nseq_main, nseq_options}, +#ifndef OPENSSL_NO_OCSP + {FT_general, "ocsp", ocsp_main, ocsp_options}, +#endif + {FT_general, "passwd", passwd_main, passwd_options}, +#ifndef OPENSSL_NO_DES + {FT_general, "pkcs12", pkcs12_main, pkcs12_options}, +#endif + {FT_general, "pkcs7", pkcs7_main, pkcs7_options}, + {FT_general, "pkcs8", pkcs8_main, pkcs8_options}, + {FT_general, "pkey", pkey_main, pkey_options}, + {FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options}, + {FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options}, + {FT_general, "prime", prime_main, prime_options}, + {FT_general, "rand", rand_main, rand_options}, + {FT_general, "rehash", rehash_main, rehash_options}, + {FT_general, "req", req_main, req_options}, + {FT_general, "rsa", rsa_main, rsa_options}, +#ifndef OPENSSL_NO_RSA + {FT_general, "rsautl", rsautl_main, rsautl_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_client", s_client_main, s_client_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_server", s_server_main, s_server_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_time", s_time_main, s_time_options}, +#endif + {FT_general, "sess_id", sess_id_main, sess_id_options}, + {FT_general, "smime", smime_main, smime_options}, + {FT_general, "speed", speed_main, speed_options}, + {FT_general, "spkac", spkac_main, spkac_options}, +#ifndef OPENSSL_NO_SRP + {FT_general, "srp", srp_main, srp_options}, +#endif + {FT_general, "storeutl", storeutl_main, storeutl_options}, +#ifndef OPENSSL_NO_TS + {FT_general, "ts", ts_main, ts_options}, +#endif + {FT_general, "verify", verify_main, verify_options}, + {FT_general, "version", version_main, version_options}, + {FT_general, "x509", x509_main, x509_options}, +#ifndef OPENSSL_NO_MD2 + {FT_md, "md2", dgst_main}, +#endif +#ifndef OPENSSL_NO_MD4 + {FT_md, "md4", dgst_main}, +#endif + {FT_md, "md5", dgst_main}, +#ifndef OPENSSL_NO_GOST + {FT_md, "gost", dgst_main}, +#endif + {FT_md, "sha1", dgst_main}, + {FT_md, "sha224", dgst_main}, + {FT_md, "sha256", dgst_main}, + {FT_md, "sha384", dgst_main}, + {FT_md, "sha512", dgst_main}, + {FT_md, "sha512-224", dgst_main}, + {FT_md, "sha512-256", dgst_main}, + {FT_md, "sha3-224", dgst_main}, + {FT_md, "sha3-256", dgst_main}, + {FT_md, "sha3-384", dgst_main}, + {FT_md, "sha3-512", dgst_main}, + {FT_md, "shake128", dgst_main}, + {FT_md, "shake256", dgst_main}, +#ifndef OPENSSL_NO_MDC2 + {FT_md, "mdc2", dgst_main}, +#endif +#ifndef OPENSSL_NO_RMD160 + {FT_md, "rmd160", dgst_main}, +#endif +#ifndef OPENSSL_NO_BLAKE2 + {FT_md, "blake2b512", dgst_main}, +#endif +#ifndef OPENSSL_NO_BLAKE2 + {FT_md, "blake2s256", dgst_main}, +#endif +#ifndef OPENSSL_NO_SM3 + {FT_md, "sm3", dgst_main}, +#endif + {FT_cipher, "aes-128-cbc", enc_main, enc_options}, + {FT_cipher, "aes-128-ecb", enc_main, enc_options}, + {FT_cipher, "aes-192-cbc", enc_main, enc_options}, + {FT_cipher, "aes-192-ecb", enc_main, enc_options}, + {FT_cipher, "aes-256-cbc", enc_main, enc_options}, + {FT_cipher, "aes-256-ecb", enc_main, enc_options}, +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-128-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-128-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-192-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-192-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-256-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-256-ecb", enc_main, enc_options}, +#endif + {FT_cipher, "base64", enc_main, enc_options}, +#ifdef ZLIB + {FT_cipher, "zlib", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des3", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "desx", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC4 + {FT_cipher, "rc4", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC4 + {FT_cipher, "rc4-40", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-64-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-40-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ctr", enc_main, enc_options}, +#endif + {0, NULL, NULL} +}; +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/openssl-cl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/openssl-cl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/openssl-cl.gypi 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/openssl-cl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,89 @@ +{ + 'variables': { + 'openssl_defines_darwin64-arm64-cc': [ + 'NDEBUG', + 'L_ENDIAN', + 'OPENSSL_PIC', + 'OPENSSL_CPUID_OBJ', + 'OPENSSL_BN_ASM_MONT', + 'SHA1_ASM', + 'SHA256_ASM', + 'SHA512_ASM', + 'KECCAK1600_ASM', + 'VPAES_ASM', + 'ECP_NISTZ256_ASM', + 'POLY1305_ASM', + ], + 'openssl_cflags_darwin64-arm64-cc': [ + '-Wa,--noexecstack', + '-O3 -Wall', + '-arch arm64', + '-O3 -Wall', + ], + 'openssl_ex_libs_darwin64-arm64-cc': [ + '', + ], + 'openssl_cli_srcs_darwin64-arm64-cc': [ + 'openssl/apps/asn1pars.c', + 'openssl/apps/ca.c', + 'openssl/apps/ciphers.c', + 'openssl/apps/cms.c', + 'openssl/apps/crl.c', + 'openssl/apps/crl2p7.c', + 'openssl/apps/dgst.c', + 'openssl/apps/dhparam.c', + 'openssl/apps/dsa.c', + 'openssl/apps/dsaparam.c', + 'openssl/apps/ec.c', + 'openssl/apps/ecparam.c', + 'openssl/apps/enc.c', + 'openssl/apps/engine.c', + 'openssl/apps/errstr.c', + 'openssl/apps/gendsa.c', + 'openssl/apps/genpkey.c', + 'openssl/apps/genrsa.c', + 'openssl/apps/nseq.c', + 'openssl/apps/ocsp.c', + 'openssl/apps/openssl.c', + 'openssl/apps/passwd.c', + 'openssl/apps/pkcs12.c', + 'openssl/apps/pkcs7.c', + 'openssl/apps/pkcs8.c', + 'openssl/apps/pkey.c', + 'openssl/apps/pkeyparam.c', + 'openssl/apps/pkeyutl.c', + 'openssl/apps/prime.c', + 'openssl/apps/rand.c', + 'openssl/apps/rehash.c', + 'openssl/apps/req.c', + 'openssl/apps/rsa.c', + 'openssl/apps/rsautl.c', + 'openssl/apps/s_client.c', + 'openssl/apps/s_server.c', + 'openssl/apps/s_time.c', + 'openssl/apps/sess_id.c', + 'openssl/apps/smime.c', + 'openssl/apps/speed.c', + 'openssl/apps/spkac.c', + 'openssl/apps/srp.c', + 'openssl/apps/storeutl.c', + 'openssl/apps/ts.c', + 'openssl/apps/verify.c', + 'openssl/apps/version.c', + 'openssl/apps/x509.c', + 'openssl/apps/app_rand.c', + 'openssl/apps/apps.c', + 'openssl/apps/bf_prefix.c', + 'openssl/apps/opt.c', + 'openssl/apps/s_cb.c', + 'openssl/apps/s_socket.c', + ], + }, + 'defines': ['<@(openssl_defines_darwin64-arm64-cc)'], + 'include_dirs': [ + './include', + ], + 'cflags' : ['<@(openssl_cflags_darwin64-arm64-cc)'], + 'libraries': ['<@(openssl_ex_libs_darwin64-arm64-cc)'], + 'sources': ['<@(openssl_cli_srcs_darwin64-arm64-cc)'], +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/openssl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/openssl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/openssl.gypi 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/asm_avx2/openssl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,732 @@ +{ + 'variables': { + 'openssl_sources': [ + 'openssl/ssl/bio_ssl.c', + 'openssl/ssl/d1_lib.c', + 'openssl/ssl/d1_msg.c', + 'openssl/ssl/d1_srtp.c', + 'openssl/ssl/methods.c', + 'openssl/ssl/packet.c', + 'openssl/ssl/pqueue.c', + 'openssl/ssl/record/dtls1_bitmap.c', + 'openssl/ssl/record/rec_layer_d1.c', + 'openssl/ssl/record/rec_layer_s3.c', + 'openssl/ssl/record/ssl3_buffer.c', + 'openssl/ssl/record/ssl3_record.c', + 'openssl/ssl/record/ssl3_record_tls13.c', + 'openssl/ssl/s3_cbc.c', + 'openssl/ssl/s3_enc.c', + 'openssl/ssl/s3_lib.c', + 'openssl/ssl/s3_msg.c', + 'openssl/ssl/ssl_asn1.c', + 'openssl/ssl/ssl_cert.c', + 'openssl/ssl/ssl_ciph.c', + 'openssl/ssl/ssl_conf.c', + 'openssl/ssl/ssl_err.c', + 'openssl/ssl/ssl_init.c', + 'openssl/ssl/ssl_lib.c', + 'openssl/ssl/ssl_mcnf.c', + 'openssl/ssl/ssl_rsa.c', + 'openssl/ssl/ssl_sess.c', + 'openssl/ssl/ssl_stat.c', + 'openssl/ssl/ssl_txt.c', + 'openssl/ssl/ssl_utst.c', + 'openssl/ssl/statem/extensions.c', + 'openssl/ssl/statem/extensions_clnt.c', + 'openssl/ssl/statem/extensions_cust.c', + 'openssl/ssl/statem/extensions_srvr.c', + 'openssl/ssl/statem/statem.c', + 'openssl/ssl/statem/statem_clnt.c', + 'openssl/ssl/statem/statem_dtls.c', + 'openssl/ssl/statem/statem_lib.c', + 'openssl/ssl/statem/statem_srvr.c', + 'openssl/ssl/t1_enc.c', + 'openssl/ssl/t1_lib.c', + 'openssl/ssl/t1_trce.c', + 'openssl/ssl/tls13_enc.c', + 'openssl/ssl/tls_srp.c', + 'openssl/crypto/aes/aes_cbc.c', + 'openssl/crypto/aes/aes_cfb.c', + 'openssl/crypto/aes/aes_core.c', + 'openssl/crypto/aes/aes_ecb.c', + 'openssl/crypto/aes/aes_ige.c', + 'openssl/crypto/aes/aes_misc.c', + 'openssl/crypto/aes/aes_ofb.c', + 'openssl/crypto/aes/aes_wrap.c', + 'openssl/crypto/aria/aria.c', + 'openssl/crypto/armcap.c', + 'openssl/crypto/asn1/a_bitstr.c', + 'openssl/crypto/asn1/a_d2i_fp.c', + 'openssl/crypto/asn1/a_digest.c', + 'openssl/crypto/asn1/a_dup.c', + 'openssl/crypto/asn1/a_gentm.c', + 'openssl/crypto/asn1/a_i2d_fp.c', + 'openssl/crypto/asn1/a_int.c', + 'openssl/crypto/asn1/a_mbstr.c', + 'openssl/crypto/asn1/a_object.c', + 'openssl/crypto/asn1/a_octet.c', + 'openssl/crypto/asn1/a_print.c', + 'openssl/crypto/asn1/a_sign.c', + 'openssl/crypto/asn1/a_strex.c', + 'openssl/crypto/asn1/a_strnid.c', + 'openssl/crypto/asn1/a_time.c', + 'openssl/crypto/asn1/a_type.c', + 'openssl/crypto/asn1/a_utctm.c', + 'openssl/crypto/asn1/a_utf8.c', + 'openssl/crypto/asn1/a_verify.c', + 'openssl/crypto/asn1/ameth_lib.c', + 'openssl/crypto/asn1/asn1_err.c', + 'openssl/crypto/asn1/asn1_gen.c', + 'openssl/crypto/asn1/asn1_item_list.c', + 'openssl/crypto/asn1/asn1_lib.c', + 'openssl/crypto/asn1/asn1_par.c', + 'openssl/crypto/asn1/asn_mime.c', + 'openssl/crypto/asn1/asn_moid.c', + 'openssl/crypto/asn1/asn_mstbl.c', + 'openssl/crypto/asn1/asn_pack.c', + 'openssl/crypto/asn1/bio_asn1.c', + 'openssl/crypto/asn1/bio_ndef.c', + 'openssl/crypto/asn1/d2i_pr.c', + 'openssl/crypto/asn1/d2i_pu.c', + 'openssl/crypto/asn1/evp_asn1.c', + 'openssl/crypto/asn1/f_int.c', + 'openssl/crypto/asn1/f_string.c', + 'openssl/crypto/asn1/i2d_pr.c', + 'openssl/crypto/asn1/i2d_pu.c', + 'openssl/crypto/asn1/n_pkey.c', + 'openssl/crypto/asn1/nsseq.c', + 'openssl/crypto/asn1/p5_pbe.c', + 'openssl/crypto/asn1/p5_pbev2.c', + 'openssl/crypto/asn1/p5_scrypt.c', + 'openssl/crypto/asn1/p8_pkey.c', + 'openssl/crypto/asn1/t_bitst.c', + 'openssl/crypto/asn1/t_pkey.c', + 'openssl/crypto/asn1/t_spki.c', + 'openssl/crypto/asn1/tasn_dec.c', + 'openssl/crypto/asn1/tasn_enc.c', + 'openssl/crypto/asn1/tasn_fre.c', + 'openssl/crypto/asn1/tasn_new.c', + 'openssl/crypto/asn1/tasn_prn.c', + 'openssl/crypto/asn1/tasn_scn.c', + 'openssl/crypto/asn1/tasn_typ.c', + 'openssl/crypto/asn1/tasn_utl.c', + 'openssl/crypto/asn1/x_algor.c', + 'openssl/crypto/asn1/x_bignum.c', + 'openssl/crypto/asn1/x_info.c', + 'openssl/crypto/asn1/x_int64.c', + 'openssl/crypto/asn1/x_long.c', + 'openssl/crypto/asn1/x_pkey.c', + 'openssl/crypto/asn1/x_sig.c', + 'openssl/crypto/asn1/x_spki.c', + 'openssl/crypto/asn1/x_val.c', + 'openssl/crypto/async/arch/async_null.c', + 'openssl/crypto/async/arch/async_posix.c', + 'openssl/crypto/async/arch/async_win.c', + 'openssl/crypto/async/async.c', + 'openssl/crypto/async/async_err.c', + 'openssl/crypto/async/async_wait.c', + 'openssl/crypto/bf/bf_cfb64.c', + 'openssl/crypto/bf/bf_ecb.c', + 'openssl/crypto/bf/bf_enc.c', + 'openssl/crypto/bf/bf_ofb64.c', + 'openssl/crypto/bf/bf_skey.c', + 'openssl/crypto/bio/b_addr.c', + 'openssl/crypto/bio/b_dump.c', + 'openssl/crypto/bio/b_print.c', + 'openssl/crypto/bio/b_sock.c', + 'openssl/crypto/bio/b_sock2.c', + 'openssl/crypto/bio/bf_buff.c', + 'openssl/crypto/bio/bf_lbuf.c', + 'openssl/crypto/bio/bf_nbio.c', + 'openssl/crypto/bio/bf_null.c', + 'openssl/crypto/bio/bio_cb.c', + 'openssl/crypto/bio/bio_err.c', + 'openssl/crypto/bio/bio_lib.c', + 'openssl/crypto/bio/bio_meth.c', + 'openssl/crypto/bio/bss_acpt.c', + 'openssl/crypto/bio/bss_bio.c', + 'openssl/crypto/bio/bss_conn.c', + 'openssl/crypto/bio/bss_dgram.c', + 'openssl/crypto/bio/bss_fd.c', + 'openssl/crypto/bio/bss_file.c', + 'openssl/crypto/bio/bss_log.c', + 'openssl/crypto/bio/bss_mem.c', + 'openssl/crypto/bio/bss_null.c', + 'openssl/crypto/bio/bss_sock.c', + 'openssl/crypto/blake2/blake2b.c', + 'openssl/crypto/blake2/blake2s.c', + 'openssl/crypto/blake2/m_blake2b.c', + 'openssl/crypto/blake2/m_blake2s.c', + 'openssl/crypto/bn/bn_add.c', + 'openssl/crypto/bn/bn_asm.c', + 'openssl/crypto/bn/bn_blind.c', + 'openssl/crypto/bn/bn_const.c', + 'openssl/crypto/bn/bn_ctx.c', + 'openssl/crypto/bn/bn_depr.c', + 'openssl/crypto/bn/bn_dh.c', + 'openssl/crypto/bn/bn_div.c', + 'openssl/crypto/bn/bn_err.c', + 'openssl/crypto/bn/bn_exp.c', + 'openssl/crypto/bn/bn_exp2.c', + 'openssl/crypto/bn/bn_gcd.c', + 'openssl/crypto/bn/bn_gf2m.c', + 'openssl/crypto/bn/bn_intern.c', + 'openssl/crypto/bn/bn_kron.c', + 'openssl/crypto/bn/bn_lib.c', + 'openssl/crypto/bn/bn_mod.c', + 'openssl/crypto/bn/bn_mont.c', + 'openssl/crypto/bn/bn_mpi.c', + 'openssl/crypto/bn/bn_mul.c', + 'openssl/crypto/bn/bn_nist.c', + 'openssl/crypto/bn/bn_prime.c', + 'openssl/crypto/bn/bn_print.c', + 'openssl/crypto/bn/bn_rand.c', + 'openssl/crypto/bn/bn_recp.c', + 'openssl/crypto/bn/bn_shift.c', + 'openssl/crypto/bn/bn_sqr.c', + 'openssl/crypto/bn/bn_sqrt.c', + 'openssl/crypto/bn/bn_srp.c', + 'openssl/crypto/bn/bn_word.c', + 'openssl/crypto/bn/bn_x931p.c', + 'openssl/crypto/buffer/buf_err.c', + 'openssl/crypto/buffer/buffer.c', + 'openssl/crypto/camellia/camellia.c', + 'openssl/crypto/camellia/cmll_cbc.c', + 'openssl/crypto/camellia/cmll_cfb.c', + 'openssl/crypto/camellia/cmll_ctr.c', + 'openssl/crypto/camellia/cmll_ecb.c', + 'openssl/crypto/camellia/cmll_misc.c', + 'openssl/crypto/camellia/cmll_ofb.c', + 'openssl/crypto/cast/c_cfb64.c', + 'openssl/crypto/cast/c_ecb.c', + 'openssl/crypto/cast/c_enc.c', + 'openssl/crypto/cast/c_ofb64.c', + 'openssl/crypto/cast/c_skey.c', + 'openssl/crypto/cmac/cm_ameth.c', + 'openssl/crypto/cmac/cm_pmeth.c', + 'openssl/crypto/cmac/cmac.c', + 'openssl/crypto/cms/cms_asn1.c', + 'openssl/crypto/cms/cms_att.c', + 'openssl/crypto/cms/cms_cd.c', + 'openssl/crypto/cms/cms_dd.c', + 'openssl/crypto/cms/cms_enc.c', + 'openssl/crypto/cms/cms_env.c', + 'openssl/crypto/cms/cms_err.c', + 'openssl/crypto/cms/cms_ess.c', + 'openssl/crypto/cms/cms_io.c', + 'openssl/crypto/cms/cms_kari.c', + 'openssl/crypto/cms/cms_lib.c', + 'openssl/crypto/cms/cms_pwri.c', + 'openssl/crypto/cms/cms_sd.c', + 'openssl/crypto/cms/cms_smime.c', + 'openssl/crypto/conf/conf_api.c', + 'openssl/crypto/conf/conf_def.c', + 'openssl/crypto/conf/conf_err.c', + 'openssl/crypto/conf/conf_lib.c', + 'openssl/crypto/conf/conf_mall.c', + 'openssl/crypto/conf/conf_mod.c', + 'openssl/crypto/conf/conf_sap.c', + 'openssl/crypto/conf/conf_ssl.c', + 'openssl/crypto/cpt_err.c', + 'openssl/crypto/cryptlib.c', + 'openssl/crypto/ct/ct_b64.c', + 'openssl/crypto/ct/ct_err.c', + 'openssl/crypto/ct/ct_log.c', + 'openssl/crypto/ct/ct_oct.c', + 'openssl/crypto/ct/ct_policy.c', + 'openssl/crypto/ct/ct_prn.c', + 'openssl/crypto/ct/ct_sct.c', + 'openssl/crypto/ct/ct_sct_ctx.c', + 'openssl/crypto/ct/ct_vfy.c', + 'openssl/crypto/ct/ct_x509v3.c', + 'openssl/crypto/ctype.c', + 'openssl/crypto/cversion.c', + 'openssl/crypto/des/cbc_cksm.c', + 'openssl/crypto/des/cbc_enc.c', + 'openssl/crypto/des/cfb64ede.c', + 'openssl/crypto/des/cfb64enc.c', + 'openssl/crypto/des/cfb_enc.c', + 'openssl/crypto/des/des_enc.c', + 'openssl/crypto/des/ecb3_enc.c', + 'openssl/crypto/des/ecb_enc.c', + 'openssl/crypto/des/fcrypt.c', + 'openssl/crypto/des/fcrypt_b.c', + 'openssl/crypto/des/ofb64ede.c', + 'openssl/crypto/des/ofb64enc.c', + 'openssl/crypto/des/ofb_enc.c', + 'openssl/crypto/des/pcbc_enc.c', + 'openssl/crypto/des/qud_cksm.c', + 'openssl/crypto/des/rand_key.c', + 'openssl/crypto/des/set_key.c', + 'openssl/crypto/des/str2key.c', + 'openssl/crypto/des/xcbc_enc.c', + 'openssl/crypto/dh/dh_ameth.c', + 'openssl/crypto/dh/dh_asn1.c', + 'openssl/crypto/dh/dh_check.c', + 'openssl/crypto/dh/dh_depr.c', + 'openssl/crypto/dh/dh_err.c', + 'openssl/crypto/dh/dh_gen.c', + 'openssl/crypto/dh/dh_kdf.c', + 'openssl/crypto/dh/dh_key.c', + 'openssl/crypto/dh/dh_lib.c', + 'openssl/crypto/dh/dh_meth.c', + 'openssl/crypto/dh/dh_pmeth.c', + 'openssl/crypto/dh/dh_prn.c', + 'openssl/crypto/dh/dh_rfc5114.c', + 'openssl/crypto/dh/dh_rfc7919.c', + 'openssl/crypto/dsa/dsa_ameth.c', + 'openssl/crypto/dsa/dsa_asn1.c', + 'openssl/crypto/dsa/dsa_depr.c', + 'openssl/crypto/dsa/dsa_err.c', + 'openssl/crypto/dsa/dsa_gen.c', + 'openssl/crypto/dsa/dsa_key.c', + 'openssl/crypto/dsa/dsa_lib.c', + 'openssl/crypto/dsa/dsa_meth.c', + 'openssl/crypto/dsa/dsa_ossl.c', + 'openssl/crypto/dsa/dsa_pmeth.c', + 'openssl/crypto/dsa/dsa_prn.c', + 'openssl/crypto/dsa/dsa_sign.c', + 'openssl/crypto/dsa/dsa_vrf.c', + 'openssl/crypto/dso/dso_dl.c', + 'openssl/crypto/dso/dso_dlfcn.c', + 'openssl/crypto/dso/dso_err.c', + 'openssl/crypto/dso/dso_lib.c', + 'openssl/crypto/dso/dso_openssl.c', + 'openssl/crypto/dso/dso_vms.c', + 'openssl/crypto/dso/dso_win32.c', + 'openssl/crypto/ebcdic.c', + 'openssl/crypto/ec/curve25519.c', + 'openssl/crypto/ec/curve448/arch_32/f_impl.c', + 'openssl/crypto/ec/curve448/curve448.c', + 'openssl/crypto/ec/curve448/curve448_tables.c', + 'openssl/crypto/ec/curve448/eddsa.c', + 'openssl/crypto/ec/curve448/f_generic.c', + 'openssl/crypto/ec/curve448/scalar.c', + 'openssl/crypto/ec/ec2_oct.c', + 'openssl/crypto/ec/ec2_smpl.c', + 'openssl/crypto/ec/ec_ameth.c', + 'openssl/crypto/ec/ec_asn1.c', + 'openssl/crypto/ec/ec_check.c', + 'openssl/crypto/ec/ec_curve.c', + 'openssl/crypto/ec/ec_cvt.c', + 'openssl/crypto/ec/ec_err.c', + 'openssl/crypto/ec/ec_key.c', + 'openssl/crypto/ec/ec_kmeth.c', + 'openssl/crypto/ec/ec_lib.c', + 'openssl/crypto/ec/ec_mult.c', + 'openssl/crypto/ec/ec_oct.c', + 'openssl/crypto/ec/ec_pmeth.c', + 'openssl/crypto/ec/ec_print.c', + 'openssl/crypto/ec/ecdh_kdf.c', + 'openssl/crypto/ec/ecdh_ossl.c', + 'openssl/crypto/ec/ecdsa_ossl.c', + 'openssl/crypto/ec/ecdsa_sign.c', + 'openssl/crypto/ec/ecdsa_vrf.c', + 'openssl/crypto/ec/eck_prn.c', + 'openssl/crypto/ec/ecp_mont.c', + 'openssl/crypto/ec/ecp_nist.c', + 'openssl/crypto/ec/ecp_nistp224.c', + 'openssl/crypto/ec/ecp_nistp256.c', + 'openssl/crypto/ec/ecp_nistp521.c', + 'openssl/crypto/ec/ecp_nistputil.c', + 'openssl/crypto/ec/ecp_nistz256.c', + 'openssl/crypto/ec/ecp_oct.c', + 'openssl/crypto/ec/ecp_smpl.c', + 'openssl/crypto/ec/ecx_meth.c', + 'openssl/crypto/engine/eng_all.c', + 'openssl/crypto/engine/eng_cnf.c', + 'openssl/crypto/engine/eng_ctrl.c', + 'openssl/crypto/engine/eng_dyn.c', + 'openssl/crypto/engine/eng_err.c', + 'openssl/crypto/engine/eng_fat.c', + 'openssl/crypto/engine/eng_init.c', + 'openssl/crypto/engine/eng_lib.c', + 'openssl/crypto/engine/eng_list.c', + 'openssl/crypto/engine/eng_openssl.c', + 'openssl/crypto/engine/eng_pkey.c', + 'openssl/crypto/engine/eng_rdrand.c', + 'openssl/crypto/engine/eng_table.c', + 'openssl/crypto/engine/tb_asnmth.c', + 'openssl/crypto/engine/tb_cipher.c', + 'openssl/crypto/engine/tb_dh.c', + 'openssl/crypto/engine/tb_digest.c', + 'openssl/crypto/engine/tb_dsa.c', + 'openssl/crypto/engine/tb_eckey.c', + 'openssl/crypto/engine/tb_pkmeth.c', + 'openssl/crypto/engine/tb_rand.c', + 'openssl/crypto/engine/tb_rsa.c', + 'openssl/crypto/err/err.c', + 'openssl/crypto/err/err_all.c', + 'openssl/crypto/err/err_prn.c', + 'openssl/crypto/evp/bio_b64.c', + 'openssl/crypto/evp/bio_enc.c', + 'openssl/crypto/evp/bio_md.c', + 'openssl/crypto/evp/bio_ok.c', + 'openssl/crypto/evp/c_allc.c', + 'openssl/crypto/evp/c_alld.c', + 'openssl/crypto/evp/cmeth_lib.c', + 'openssl/crypto/evp/digest.c', + 'openssl/crypto/evp/e_aes.c', + 'openssl/crypto/evp/e_aes_cbc_hmac_sha1.c', + 'openssl/crypto/evp/e_aes_cbc_hmac_sha256.c', + 'openssl/crypto/evp/e_aria.c', + 'openssl/crypto/evp/e_bf.c', + 'openssl/crypto/evp/e_camellia.c', + 'openssl/crypto/evp/e_cast.c', + 'openssl/crypto/evp/e_chacha20_poly1305.c', + 'openssl/crypto/evp/e_des.c', + 'openssl/crypto/evp/e_des3.c', + 'openssl/crypto/evp/e_idea.c', + 'openssl/crypto/evp/e_null.c', + 'openssl/crypto/evp/e_old.c', + 'openssl/crypto/evp/e_rc2.c', + 'openssl/crypto/evp/e_rc4.c', + 'openssl/crypto/evp/e_rc4_hmac_md5.c', + 'openssl/crypto/evp/e_rc5.c', + 'openssl/crypto/evp/e_seed.c', + 'openssl/crypto/evp/e_sm4.c', + 'openssl/crypto/evp/e_xcbc_d.c', + 'openssl/crypto/evp/encode.c', + 'openssl/crypto/evp/evp_cnf.c', + 'openssl/crypto/evp/evp_enc.c', + 'openssl/crypto/evp/evp_err.c', + 'openssl/crypto/evp/evp_key.c', + 'openssl/crypto/evp/evp_lib.c', + 'openssl/crypto/evp/evp_pbe.c', + 'openssl/crypto/evp/evp_pkey.c', + 'openssl/crypto/evp/m_md2.c', + 'openssl/crypto/evp/m_md4.c', + 'openssl/crypto/evp/m_md5.c', + 'openssl/crypto/evp/m_md5_sha1.c', + 'openssl/crypto/evp/m_mdc2.c', + 'openssl/crypto/evp/m_null.c', + 'openssl/crypto/evp/m_ripemd.c', + 'openssl/crypto/evp/m_sha1.c', + 'openssl/crypto/evp/m_sha3.c', + 'openssl/crypto/evp/m_sigver.c', + 'openssl/crypto/evp/m_wp.c', + 'openssl/crypto/evp/names.c', + 'openssl/crypto/evp/p5_crpt.c', + 'openssl/crypto/evp/p5_crpt2.c', + 'openssl/crypto/evp/p_dec.c', + 'openssl/crypto/evp/p_enc.c', + 'openssl/crypto/evp/p_lib.c', + 'openssl/crypto/evp/p_open.c', + 'openssl/crypto/evp/p_seal.c', + 'openssl/crypto/evp/p_sign.c', + 'openssl/crypto/evp/p_verify.c', + 'openssl/crypto/evp/pbe_scrypt.c', + 'openssl/crypto/evp/pmeth_fn.c', + 'openssl/crypto/evp/pmeth_gn.c', + 'openssl/crypto/evp/pmeth_lib.c', + 'openssl/crypto/ex_data.c', + 'openssl/crypto/getenv.c', + 'openssl/crypto/hmac/hm_ameth.c', + 'openssl/crypto/hmac/hm_pmeth.c', + 'openssl/crypto/hmac/hmac.c', + 'openssl/crypto/idea/i_cbc.c', + 'openssl/crypto/idea/i_cfb64.c', + 'openssl/crypto/idea/i_ecb.c', + 'openssl/crypto/idea/i_ofb64.c', + 'openssl/crypto/idea/i_skey.c', + 'openssl/crypto/init.c', + 'openssl/crypto/kdf/hkdf.c', + 'openssl/crypto/kdf/kdf_err.c', + 'openssl/crypto/kdf/scrypt.c', + 'openssl/crypto/kdf/tls1_prf.c', + 'openssl/crypto/lhash/lh_stats.c', + 'openssl/crypto/lhash/lhash.c', + 'openssl/crypto/md4/md4_dgst.c', + 'openssl/crypto/md4/md4_one.c', + 'openssl/crypto/md5/md5_dgst.c', + 'openssl/crypto/md5/md5_one.c', + 'openssl/crypto/mdc2/mdc2_one.c', + 'openssl/crypto/mdc2/mdc2dgst.c', + 'openssl/crypto/mem.c', + 'openssl/crypto/mem_dbg.c', + 'openssl/crypto/mem_sec.c', + 'openssl/crypto/modes/cbc128.c', + 'openssl/crypto/modes/ccm128.c', + 'openssl/crypto/modes/cfb128.c', + 'openssl/crypto/modes/ctr128.c', + 'openssl/crypto/modes/cts128.c', + 'openssl/crypto/modes/gcm128.c', + 'openssl/crypto/modes/ocb128.c', + 'openssl/crypto/modes/ofb128.c', + 'openssl/crypto/modes/wrap128.c', + 'openssl/crypto/modes/xts128.c', + 'openssl/crypto/o_dir.c', + 'openssl/crypto/o_fips.c', + 'openssl/crypto/o_fopen.c', + 'openssl/crypto/o_init.c', + 'openssl/crypto/o_str.c', + 'openssl/crypto/o_time.c', + 'openssl/crypto/objects/o_names.c', + 'openssl/crypto/objects/obj_dat.c', + 'openssl/crypto/objects/obj_err.c', + 'openssl/crypto/objects/obj_lib.c', + 'openssl/crypto/objects/obj_xref.c', + 'openssl/crypto/ocsp/ocsp_asn.c', + 'openssl/crypto/ocsp/ocsp_cl.c', + 'openssl/crypto/ocsp/ocsp_err.c', + 'openssl/crypto/ocsp/ocsp_ext.c', + 'openssl/crypto/ocsp/ocsp_ht.c', + 'openssl/crypto/ocsp/ocsp_lib.c', + 'openssl/crypto/ocsp/ocsp_prn.c', + 'openssl/crypto/ocsp/ocsp_srv.c', + 'openssl/crypto/ocsp/ocsp_vfy.c', + 'openssl/crypto/ocsp/v3_ocsp.c', + 'openssl/crypto/pem/pem_all.c', + 'openssl/crypto/pem/pem_err.c', + 'openssl/crypto/pem/pem_info.c', + 'openssl/crypto/pem/pem_lib.c', + 'openssl/crypto/pem/pem_oth.c', + 'openssl/crypto/pem/pem_pk8.c', + 'openssl/crypto/pem/pem_pkey.c', + 'openssl/crypto/pem/pem_sign.c', + 'openssl/crypto/pem/pem_x509.c', + 'openssl/crypto/pem/pem_xaux.c', + 'openssl/crypto/pem/pvkfmt.c', + 'openssl/crypto/pkcs12/p12_add.c', + 'openssl/crypto/pkcs12/p12_asn.c', + 'openssl/crypto/pkcs12/p12_attr.c', + 'openssl/crypto/pkcs12/p12_crpt.c', + 'openssl/crypto/pkcs12/p12_crt.c', + 'openssl/crypto/pkcs12/p12_decr.c', + 'openssl/crypto/pkcs12/p12_init.c', + 'openssl/crypto/pkcs12/p12_key.c', + 'openssl/crypto/pkcs12/p12_kiss.c', + 'openssl/crypto/pkcs12/p12_mutl.c', + 'openssl/crypto/pkcs12/p12_npas.c', + 'openssl/crypto/pkcs12/p12_p8d.c', + 'openssl/crypto/pkcs12/p12_p8e.c', + 'openssl/crypto/pkcs12/p12_sbag.c', + 'openssl/crypto/pkcs12/p12_utl.c', + 'openssl/crypto/pkcs12/pk12err.c', + 'openssl/crypto/pkcs7/bio_pk7.c', + 'openssl/crypto/pkcs7/pk7_asn1.c', + 'openssl/crypto/pkcs7/pk7_attr.c', + 'openssl/crypto/pkcs7/pk7_doit.c', + 'openssl/crypto/pkcs7/pk7_lib.c', + 'openssl/crypto/pkcs7/pk7_mime.c', + 'openssl/crypto/pkcs7/pk7_smime.c', + 'openssl/crypto/pkcs7/pkcs7err.c', + 'openssl/crypto/poly1305/poly1305.c', + 'openssl/crypto/poly1305/poly1305_ameth.c', + 'openssl/crypto/poly1305/poly1305_pmeth.c', + 'openssl/crypto/rand/drbg_ctr.c', + 'openssl/crypto/rand/drbg_lib.c', + 'openssl/crypto/rand/rand_egd.c', + 'openssl/crypto/rand/rand_err.c', + 'openssl/crypto/rand/rand_lib.c', + 'openssl/crypto/rand/rand_unix.c', + 'openssl/crypto/rand/rand_vms.c', + 'openssl/crypto/rand/rand_win.c', + 'openssl/crypto/rand/randfile.c', + 'openssl/crypto/rc2/rc2_cbc.c', + 'openssl/crypto/rc2/rc2_ecb.c', + 'openssl/crypto/rc2/rc2_skey.c', + 'openssl/crypto/rc2/rc2cfb64.c', + 'openssl/crypto/rc2/rc2ofb64.c', + 'openssl/crypto/rc4/rc4_enc.c', + 'openssl/crypto/rc4/rc4_skey.c', + 'openssl/crypto/ripemd/rmd_dgst.c', + 'openssl/crypto/ripemd/rmd_one.c', + 'openssl/crypto/rsa/rsa_ameth.c', + 'openssl/crypto/rsa/rsa_asn1.c', + 'openssl/crypto/rsa/rsa_chk.c', + 'openssl/crypto/rsa/rsa_crpt.c', + 'openssl/crypto/rsa/rsa_depr.c', + 'openssl/crypto/rsa/rsa_err.c', + 'openssl/crypto/rsa/rsa_gen.c', + 'openssl/crypto/rsa/rsa_lib.c', + 'openssl/crypto/rsa/rsa_meth.c', + 'openssl/crypto/rsa/rsa_mp.c', + 'openssl/crypto/rsa/rsa_none.c', + 'openssl/crypto/rsa/rsa_oaep.c', + 'openssl/crypto/rsa/rsa_ossl.c', + 'openssl/crypto/rsa/rsa_pk1.c', + 'openssl/crypto/rsa/rsa_pmeth.c', + 'openssl/crypto/rsa/rsa_prn.c', + 'openssl/crypto/rsa/rsa_pss.c', + 'openssl/crypto/rsa/rsa_saos.c', + 'openssl/crypto/rsa/rsa_sign.c', + 'openssl/crypto/rsa/rsa_ssl.c', + 'openssl/crypto/rsa/rsa_x931.c', + 'openssl/crypto/rsa/rsa_x931g.c', + 'openssl/crypto/seed/seed.c', + 'openssl/crypto/seed/seed_cbc.c', + 'openssl/crypto/seed/seed_cfb.c', + 'openssl/crypto/seed/seed_ecb.c', + 'openssl/crypto/seed/seed_ofb.c', + 'openssl/crypto/sha/sha1_one.c', + 'openssl/crypto/sha/sha1dgst.c', + 'openssl/crypto/sha/sha256.c', + 'openssl/crypto/sha/sha512.c', + 'openssl/crypto/siphash/siphash.c', + 'openssl/crypto/siphash/siphash_ameth.c', + 'openssl/crypto/siphash/siphash_pmeth.c', + 'openssl/crypto/sm2/sm2_crypt.c', + 'openssl/crypto/sm2/sm2_err.c', + 'openssl/crypto/sm2/sm2_pmeth.c', + 'openssl/crypto/sm2/sm2_sign.c', + 'openssl/crypto/sm3/m_sm3.c', + 'openssl/crypto/sm3/sm3.c', + 'openssl/crypto/sm4/sm4.c', + 'openssl/crypto/srp/srp_lib.c', + 'openssl/crypto/srp/srp_vfy.c', + 'openssl/crypto/stack/stack.c', + 'openssl/crypto/store/loader_file.c', + 'openssl/crypto/store/store_err.c', + 'openssl/crypto/store/store_init.c', + 'openssl/crypto/store/store_lib.c', + 'openssl/crypto/store/store_register.c', + 'openssl/crypto/store/store_strings.c', + 'openssl/crypto/threads_none.c', + 'openssl/crypto/threads_pthread.c', + 'openssl/crypto/threads_win.c', + 'openssl/crypto/ts/ts_asn1.c', + 'openssl/crypto/ts/ts_conf.c', + 'openssl/crypto/ts/ts_err.c', + 'openssl/crypto/ts/ts_lib.c', + 'openssl/crypto/ts/ts_req_print.c', + 'openssl/crypto/ts/ts_req_utils.c', + 'openssl/crypto/ts/ts_rsp_print.c', + 'openssl/crypto/ts/ts_rsp_sign.c', + 'openssl/crypto/ts/ts_rsp_utils.c', + 'openssl/crypto/ts/ts_rsp_verify.c', + 'openssl/crypto/ts/ts_verify_ctx.c', + 'openssl/crypto/txt_db/txt_db.c', + 'openssl/crypto/ui/ui_err.c', + 'openssl/crypto/ui/ui_lib.c', + 'openssl/crypto/ui/ui_null.c', + 'openssl/crypto/ui/ui_openssl.c', + 'openssl/crypto/ui/ui_util.c', + 'openssl/crypto/uid.c', + 'openssl/crypto/whrlpool/wp_block.c', + 'openssl/crypto/whrlpool/wp_dgst.c', + 'openssl/crypto/x509/by_dir.c', + 'openssl/crypto/x509/by_file.c', + 'openssl/crypto/x509/t_crl.c', + 'openssl/crypto/x509/t_req.c', + 'openssl/crypto/x509/t_x509.c', + 'openssl/crypto/x509/x509_att.c', + 'openssl/crypto/x509/x509_cmp.c', + 'openssl/crypto/x509/x509_d2.c', + 'openssl/crypto/x509/x509_def.c', + 'openssl/crypto/x509/x509_err.c', + 'openssl/crypto/x509/x509_ext.c', + 'openssl/crypto/x509/x509_lu.c', + 'openssl/crypto/x509/x509_meth.c', + 'openssl/crypto/x509/x509_obj.c', + 'openssl/crypto/x509/x509_r2x.c', + 'openssl/crypto/x509/x509_req.c', + 'openssl/crypto/x509/x509_set.c', + 'openssl/crypto/x509/x509_trs.c', + 'openssl/crypto/x509/x509_txt.c', + 'openssl/crypto/x509/x509_v3.c', + 'openssl/crypto/x509/x509_vfy.c', + 'openssl/crypto/x509/x509_vpm.c', + 'openssl/crypto/x509/x509cset.c', + 'openssl/crypto/x509/x509name.c', + 'openssl/crypto/x509/x509rset.c', + 'openssl/crypto/x509/x509spki.c', + 'openssl/crypto/x509/x509type.c', + 'openssl/crypto/x509/x_all.c', + 'openssl/crypto/x509/x_attrib.c', + 'openssl/crypto/x509/x_crl.c', + 'openssl/crypto/x509/x_exten.c', + 'openssl/crypto/x509/x_name.c', + 'openssl/crypto/x509/x_pubkey.c', + 'openssl/crypto/x509/x_req.c', + 'openssl/crypto/x509/x_x509.c', + 'openssl/crypto/x509/x_x509a.c', + 'openssl/crypto/x509v3/pcy_cache.c', + 'openssl/crypto/x509v3/pcy_data.c', + 'openssl/crypto/x509v3/pcy_lib.c', + 'openssl/crypto/x509v3/pcy_map.c', + 'openssl/crypto/x509v3/pcy_node.c', + 'openssl/crypto/x509v3/pcy_tree.c', + 'openssl/crypto/x509v3/v3_addr.c', + 'openssl/crypto/x509v3/v3_admis.c', + 'openssl/crypto/x509v3/v3_akey.c', + 'openssl/crypto/x509v3/v3_akeya.c', + 'openssl/crypto/x509v3/v3_alt.c', + 'openssl/crypto/x509v3/v3_asid.c', + 'openssl/crypto/x509v3/v3_bcons.c', + 'openssl/crypto/x509v3/v3_bitst.c', + 'openssl/crypto/x509v3/v3_conf.c', + 'openssl/crypto/x509v3/v3_cpols.c', + 'openssl/crypto/x509v3/v3_crld.c', + 'openssl/crypto/x509v3/v3_enum.c', + 'openssl/crypto/x509v3/v3_extku.c', + 'openssl/crypto/x509v3/v3_genn.c', + 'openssl/crypto/x509v3/v3_ia5.c', + 'openssl/crypto/x509v3/v3_info.c', + 'openssl/crypto/x509v3/v3_int.c', + 'openssl/crypto/x509v3/v3_lib.c', + 'openssl/crypto/x509v3/v3_ncons.c', + 'openssl/crypto/x509v3/v3_pci.c', + 'openssl/crypto/x509v3/v3_pcia.c', + 'openssl/crypto/x509v3/v3_pcons.c', + 'openssl/crypto/x509v3/v3_pku.c', + 'openssl/crypto/x509v3/v3_pmaps.c', + 'openssl/crypto/x509v3/v3_prn.c', + 'openssl/crypto/x509v3/v3_purp.c', + 'openssl/crypto/x509v3/v3_skey.c', + 'openssl/crypto/x509v3/v3_sxnet.c', + 'openssl/crypto/x509v3/v3_tlsf.c', + 'openssl/crypto/x509v3/v3_utl.c', + 'openssl/crypto/x509v3/v3err.c', + 'openssl/engines/e_capi.c', + 'openssl/engines/e_padlock.c', + ], + 'openssl_sources_darwin64-arm64-cc': [ + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/aesv8-armx.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/aes/vpaes-armv8.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/arm64cpuid.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/bn/armv8-mont.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/chacha/chacha-armv8.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/ec/ecp_nistz256-armv8.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/modes/ghashv8-armx.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/poly1305/poly1305-armv8.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/keccak1600-armv8.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha1-armv8.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha256-armv8.S', + './config/archs/darwin64-arm64-cc/asm_avx2/crypto/sha/sha512-armv8.S', + ], + 'openssl_defines_darwin64-arm64-cc': [ + 'NDEBUG', + 'L_ENDIAN', + 'OPENSSL_PIC', + 'OPENSSL_CPUID_OBJ', + 'OPENSSL_BN_ASM_MONT', + 'SHA1_ASM', + 'SHA256_ASM', + 'SHA512_ASM', + 'KECCAK1600_ASM', + 'VPAES_ASM', + 'ECP_NISTZ256_ASM', + 'POLY1305_ASM', + ], + 'openssl_cflags_darwin64-arm64-cc': [ + '-Wa,--noexecstack', + '-O3 -Wall', + '-arch arm64', + '-O3 -Wall', + ], + 'openssl_ex_libs_darwin64-arm64-cc': [ + '', + ], + }, + 'include_dirs': [ + '.', + './include', + './crypto', + './crypto/include/internal', + ], + 'defines': ['<@(openssl_defines_darwin64-arm64-cc)'], + 'cflags' : ['<@(openssl_cflags_darwin64-arm64-cc)'], + 'libraries': ['<@(openssl_ex_libs_darwin64-arm64-cc)'], + 'sources': ['<@(openssl_sources)', '<@(openssl_sources_darwin64-arm64-cc)'], +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/configdata.pm 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,15323 @@ +#! /usr/bin/env perl + +package configdata; + +use strict; +use warnings; + +use Exporter; +#use vars qw(@ISA @EXPORT); +our @ISA = qw(Exporter); +our @EXPORT = qw(%config %target %disabled %withargs %unified_info @disablables); + +our %config = ( + AR => "ar", + ARFLAGS => [ "r" ], + CC => "cc", + CFLAGS => [ "-O3 -Wall" ], + CPPDEFINES => [ ], + CPPFLAGS => [ ], + CPPINCLUDES => [ ], + CXXFLAGS => [ ], + HASHBANGPERL => "/usr/bin/env perl", + LDFLAGS => [ ], + LDLIBS => [ ], + PERL => "/usr/bin/perl", + RANLIB => "ranlib -c", + RC => "windres", + RCFLAGS => [ ], + b32 => "0", + b64 => "0", + b64l => "1", + bn_ll => "0", + build_file => "Makefile", + build_file_templates => [ "Configurations/common0.tmpl", "Configurations/unix-Makefile.tmpl", "Configurations/common.tmpl" ], + build_infos => [ "./build.info", "crypto/build.info", "ssl/build.info", "engines/build.info", "apps/build.info", "test/build.info", "util/build.info", "tools/build.info", "fuzz/build.info", "crypto/objects/build.info", "crypto/md4/build.info", "crypto/md5/build.info", "crypto/sha/build.info", "crypto/mdc2/build.info", "crypto/hmac/build.info", "crypto/ripemd/build.info", "crypto/whrlpool/build.info", "crypto/poly1305/build.info", "crypto/blake2/build.info", "crypto/siphash/build.info", "crypto/sm3/build.info", "crypto/des/build.info", "crypto/aes/build.info", "crypto/rc2/build.info", "crypto/rc4/build.info", "crypto/idea/build.info", "crypto/aria/build.info", "crypto/bf/build.info", "crypto/cast/build.info", "crypto/camellia/build.info", "crypto/seed/build.info", "crypto/sm4/build.info", "crypto/chacha/build.info", "crypto/modes/build.info", "crypto/bn/build.info", "crypto/ec/build.info", "crypto/rsa/build.info", "crypto/dsa/build.info", "crypto/dh/build.info", "crypto/sm2/build.info", "crypto/dso/build.info", "crypto/engine/build.info", "crypto/buffer/build.info", "crypto/bio/build.info", "crypto/stack/build.info", "crypto/lhash/build.info", "crypto/rand/build.info", "crypto/err/build.info", "crypto/evp/build.info", "crypto/asn1/build.info", "crypto/pem/build.info", "crypto/x509/build.info", "crypto/x509v3/build.info", "crypto/conf/build.info", "crypto/txt_db/build.info", "crypto/pkcs7/build.info", "crypto/pkcs12/build.info", "crypto/ocsp/build.info", "crypto/ui/build.info", "crypto/cms/build.info", "crypto/ts/build.info", "crypto/srp/build.info", "crypto/cmac/build.info", "crypto/ct/build.info", "crypto/async/build.info", "crypto/kdf/build.info", "crypto/store/build.info", "test/ossl_shim/build.info" ], + build_type => "release", + builddir => ".", + cflags => [ ], + conf_files => [ "Configurations/00-base-templates.conf", "Configurations/10-main.conf" ], + cppflags => [ ], + cxxflags => [ ], + defines => [ "NDEBUG" ], + dirs => [ "crypto", "ssl", "engines", "apps", "test", "util", "tools", "fuzz" ], + dynamic_engines => "0", + engdirs => [ ], + ex_libs => [ ], + export_var_as_fn => "0", + includes => [ ], + lflags => [ ], + lib_defines => [ "OPENSSL_PIC" ], + libdir => "", + major => "1", + makedepprog => "\$(CROSS_COMPILE)cc", + minor => "1.1", + openssl_algorithm_defines => [ "OPENSSL_NO_COMP", "OPENSSL_NO_MD2", "OPENSSL_NO_RC5" ], + openssl_api_defines => [ ], + openssl_other_defines => [ "OPENSSL_RAND_SEED_OS", "OPENSSL_NO_AFALGENG", "OPENSSL_NO_ASAN", "OPENSSL_NO_ASM", "OPENSSL_NO_CRYPTO_MDEBUG", "OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE", "OPENSSL_NO_DEVCRYPTOENG", "OPENSSL_NO_EC_NISTP_64_GCC_128", "OPENSSL_NO_EGD", "OPENSSL_NO_EXTERNAL_TESTS", "OPENSSL_NO_FUZZ_AFL", "OPENSSL_NO_FUZZ_LIBFUZZER", "OPENSSL_NO_HEARTBEATS", "OPENSSL_NO_MSAN", "OPENSSL_NO_SCTP", "OPENSSL_NO_SSL3", "OPENSSL_NO_SSL3_METHOD", "OPENSSL_NO_UBSAN", "OPENSSL_NO_UNIT_TEST", "OPENSSL_NO_WEAK_SSL_CIPHERS", "OPENSSL_NO_DYNAMIC_ENGINE" ], + openssl_sys_defines => [ "OPENSSL_SYS_MACOSX" ], + openssl_thread_defines => [ "OPENSSL_THREADS" ], + openssldir => "", + options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", + perl_archname => "x86_64-linux-gnu-thread-multi", + perl_cmd => "/usr/bin/perl", + perl_version => "5.30.0", + perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "darwin64-arm64-cc" ], + perlenv => { + "AR" => undef, + "ARFLAGS" => undef, + "AS" => undef, + "ASFLAGS" => undef, + "BUILDFILE" => undef, + "CC" => undef, + "CFLAGS" => undef, + "CPP" => undef, + "CPPDEFINES" => undef, + "CPPFLAGS" => undef, + "CPPINCLUDES" => undef, + "CROSS_COMPILE" => undef, + "CXX" => undef, + "CXXFLAGS" => undef, + "HASHBANGPERL" => undef, + "LD" => undef, + "LDFLAGS" => undef, + "LDLIBS" => undef, + "MT" => undef, + "MTFLAGS" => undef, + "OPENSSL_LOCAL_CONFIG_DIR" => undef, + "PERL" => undef, + "RANLIB" => undef, + "RC" => undef, + "RCFLAGS" => undef, + "RM" => undef, + "WINDRES" => undef, + "__CNF_CFLAGS" => undef, + "__CNF_CPPDEFINES" => undef, + "__CNF_CPPFLAGS" => undef, + "__CNF_CPPINCLUDES" => undef, + "__CNF_CXXFLAGS" => undef, + "__CNF_LDFLAGS" => undef, + "__CNF_LDLIBS" => undef, + }, + prefix => "", + processor => "", + rc4_int => "unsigned int", + sdirs => [ "objects", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305", "blake2", "siphash", "sm3", "des", "aes", "rc2", "rc4", "idea", "aria", "bf", "cast", "camellia", "seed", "sm4", "chacha", "modes", "bn", "ec", "rsa", "dsa", "dh", "sm2", "dso", "engine", "buffer", "bio", "stack", "lhash", "rand", "err", "evp", "asn1", "pem", "x509", "x509v3", "conf", "txt_db", "pkcs7", "pkcs12", "ocsp", "ui", "cms", "ts", "srp", "cmac", "ct", "async", "kdf", "store" ], + shlib_major => "1", + shlib_minor => "1", + shlib_version_history => "", + shlib_version_number => "1.1", + sourcedir => ".", + target => "darwin64-arm64-cc", + tdirs => [ "ossl_shim" ], + version => "1.1.1n", + version_num => "0x101010efL", +); + +our %target = ( + AR => "ar", + ARFLAGS => "r", + CC => "cc", + CFLAGS => "-O3 -Wall", + HASHBANGPERL => "/usr/bin/env perl", + RANLIB => "ranlib -c", + RC => "windres", + _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], + aes_asm_src => "aes_core.c aes_cbc.c", + aes_obj => "aes_core.o aes_cbc.o", + apps_aux_src => "", + apps_init_src => "", + apps_obj => "", + bf_asm_src => "bf_enc.c", + bf_obj => "bf_enc.o", + bn_asm_src => "bn_asm.c", + bn_obj => "bn_asm.o", + bn_ops => "SIXTY_FOUR_BIT_LONG", + build_file => "Makefile", + build_scheme => [ "unified", "unix" ], + cast_asm_src => "c_enc.c", + cast_obj => "c_enc.o", + cflags => "-arch arm64", + chacha_asm_src => "chacha_enc.c", + chacha_obj => "chacha_enc.o", + cmll_asm_src => "camellia.c cmll_misc.c cmll_cbc.c", + cmll_obj => "camellia.o cmll_misc.o cmll_cbc.o", + cppflags => "-D_REENTRANT", + cpuid_asm_src => "mem_clr.c", + cpuid_obj => "mem_clr.o", + defines => [ ], + des_asm_src => "des_enc.c fcrypt_b.c", + des_obj => "des_enc.o fcrypt_b.o", + disable => [ ], + dso_extension => ".dylib", + dso_scheme => "dlfcn", + ec_asm_src => "", + ec_obj => "", + enable => [ ], + exe_extension => "", + includes => [ ], + keccak1600_asm_src => "keccak1600.c", + keccak1600_obj => "keccak1600.o", + lflags => "-Wl,-search_paths_first", + lib_cflags => "", + lib_cppflags => "-DL_ENDIAN", + lib_defines => [ ], + md5_asm_src => "", + md5_obj => "", + modes_asm_src => "", + modes_obj => "", + module_cflags => "-fPIC", + module_cxxflags => "", + module_ldflags => "-bundle", + padlock_asm_src => "", + padlock_obj => "", + perlasm_scheme => "ios64", + poly1305_asm_src => "", + poly1305_obj => "", + rc4_asm_src => "rc4_enc.c rc4_skey.c", + rc4_obj => "rc4_enc.o rc4_skey.o", + rc5_asm_src => "rc5_enc.c", + rc5_obj => "rc5_enc.o", + rmd160_asm_src => "", + rmd160_obj => "", + shared_cflag => "-fPIC", + shared_defines => [ ], + shared_extension => ".\$(SHLIB_VERSION_NUMBER).dylib", + shared_extension_simple => ".dylib", + shared_ldflag => "-dynamiclib -current_version \$(SHLIB_VERSION_NUMBER) -compatibility_version \$(SHLIB_VERSION_NUMBER)", + shared_rcflag => "", + shared_sonameflag => "-install_name \$(INSTALLTOP)/\$(LIBDIR)/", + shared_target => "darwin-shared", + sys_id => "MACOSX", + template => "1", + thread_defines => [ ], + thread_scheme => "pthreads", + unistd => "", + uplink_aux_src => "", + uplink_obj => "", + wp_asm_src => "wp_block.c", + wp_obj => "wp_block.o", +); + +our %available_protocols = ( + tls => [ "ssl3", "tls1", "tls1_1", "tls1_2", "tls1_3" ], + dtls => [ "dtls1", "dtls1_2" ], +); + +our @disablables = ( + "afalgeng", + "aria", + "asan", + "asm", + "async", + "autoalginit", + "autoerrinit", + "autoload-config", + "bf", + "blake2", + "buildtest-c\\+\\+", + "camellia", + "capieng", + "cast", + "chacha", + "cmac", + "cms", + "comp", + "crypto-mdebug", + "crypto-mdebug-backtrace", + "ct", + "deprecated", + "des", + "devcryptoeng", + "dgram", + "dh", + "dsa", + "dso", + "dtls", + "dynamic-engine", + "ec", + "ec2m", + "ecdh", + "ecdsa", + "ec_nistp_64_gcc_128", + "egd", + "engine", + "err", + "external-tests", + "filenames", + "fuzz-libfuzzer", + "fuzz-afl", + "gost", + "heartbeats", + "hw(-.+)?", + "idea", + "makedepend", + "md2", + "md4", + "mdc2", + "msan", + "multiblock", + "nextprotoneg", + "pinshared", + "ocb", + "ocsp", + "pic", + "poly1305", + "posix-io", + "psk", + "rc2", + "rc4", + "rc5", + "rdrand", + "rfc3779", + "rmd160", + "scrypt", + "sctp", + "seed", + "shared", + "siphash", + "sm2", + "sm3", + "sm4", + "sock", + "srp", + "srtp", + "sse2", + "ssl", + "ssl-trace", + "static-engine", + "stdio", + "tests", + "threads", + "tls", + "ts", + "ubsan", + "ui-console", + "unit-test", + "whirlpool", + "weak-ssl-ciphers", + "zlib", + "zlib-dynamic", + "ssl3", + "ssl3-method", + "tls1", + "tls1-method", + "tls1_1", + "tls1_1-method", + "tls1_2", + "tls1_2-method", + "tls1_3", + "dtls1", + "dtls1-method", + "dtls1_2", + "dtls1_2-method", +); + +our %disabled = ( + "afalgeng" => "option", + "asan" => "default", + "asm" => "option", + "buildtest-c++" => "default", + "comp" => "option", + "crypto-mdebug" => "default", + "crypto-mdebug-backtrace" => "default", + "devcryptoeng" => "default", + "dynamic-engine" => "cascade", + "ec_nistp_64_gcc_128" => "default", + "egd" => "default", + "external-tests" => "default", + "fuzz-afl" => "default", + "fuzz-libfuzzer" => "default", + "heartbeats" => "default", + "md2" => "default", + "msan" => "default", + "rc5" => "default", + "sctp" => "default", + "shared" => "option", + "ssl3" => "default", + "ssl3-method" => "default", + "ubsan" => "default", + "unit-test" => "default", + "weak-ssl-ciphers" => "default", + "zlib" => "default", + "zlib-dynamic" => "default", +); + +our %withargs = ( +); + +our %unified_info = ( + "depends" => + { + "" => + [ + "include/crypto/bn_conf.h", + "include/crypto/dso_conf.h", + "include/openssl/opensslconf.h", + ], + "apps/asn1pars.o" => + [ + "apps/progs.h", + ], + "apps/ca.o" => + [ + "apps/progs.h", + ], + "apps/ciphers.o" => + [ + "apps/progs.h", + ], + "apps/cms.o" => + [ + "apps/progs.h", + ], + "apps/crl.o" => + [ + "apps/progs.h", + ], + "apps/crl2p7.o" => + [ + "apps/progs.h", + ], + "apps/dgst.o" => + [ + "apps/progs.h", + ], + "apps/dhparam.o" => + [ + "apps/progs.h", + ], + "apps/dsa.o" => + [ + "apps/progs.h", + ], + "apps/dsaparam.o" => + [ + "apps/progs.h", + ], + "apps/ec.o" => + [ + "apps/progs.h", + ], + "apps/ecparam.o" => + [ + "apps/progs.h", + ], + "apps/enc.o" => + [ + "apps/progs.h", + ], + "apps/engine.o" => + [ + "apps/progs.h", + ], + "apps/errstr.o" => + [ + "apps/progs.h", + ], + "apps/gendsa.o" => + [ + "apps/progs.h", + ], + "apps/genpkey.o" => + [ + "apps/progs.h", + ], + "apps/genrsa.o" => + [ + "apps/progs.h", + ], + "apps/nseq.o" => + [ + "apps/progs.h", + ], + "apps/ocsp.o" => + [ + "apps/progs.h", + ], + "apps/openssl" => + [ + "apps/libapps.a", + "libssl", + ], + "apps/openssl.o" => + [ + "apps/progs.h", + ], + "apps/passwd.o" => + [ + "apps/progs.h", + ], + "apps/pkcs12.o" => + [ + "apps/progs.h", + ], + "apps/pkcs7.o" => + [ + "apps/progs.h", + ], + "apps/pkcs8.o" => + [ + "apps/progs.h", + ], + "apps/pkey.o" => + [ + "apps/progs.h", + ], + "apps/pkeyparam.o" => + [ + "apps/progs.h", + ], + "apps/pkeyutl.o" => + [ + "apps/progs.h", + ], + "apps/prime.o" => + [ + "apps/progs.h", + ], + "apps/progs.h" => + [ + "configdata.pm", + ], + "apps/rand.o" => + [ + "apps/progs.h", + ], + "apps/rehash.o" => + [ + "apps/progs.h", + ], + "apps/req.o" => + [ + "apps/progs.h", + ], + "apps/rsa.o" => + [ + "apps/progs.h", + ], + "apps/rsautl.o" => + [ + "apps/progs.h", + ], + "apps/s_client.o" => + [ + "apps/progs.h", + ], + "apps/s_server.o" => + [ + "apps/progs.h", + ], + "apps/s_time.o" => + [ + "apps/progs.h", + ], + "apps/sess_id.o" => + [ + "apps/progs.h", + ], + "apps/smime.o" => + [ + "apps/progs.h", + ], + "apps/speed.o" => + [ + "apps/progs.h", + ], + "apps/spkac.o" => + [ + "apps/progs.h", + ], + "apps/srp.o" => + [ + "apps/progs.h", + ], + "apps/storeutl.o" => + [ + "apps/progs.h", + ], + "apps/ts.o" => + [ + "apps/progs.h", + ], + "apps/verify.o" => + [ + "apps/progs.h", + ], + "apps/version.o" => + [ + "apps/progs.h", + ], + "apps/x509.o" => + [ + "apps/progs.h", + ], + "crypto/aes/aes-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/aes/aesni-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/aes/aest4-sparcv9.S" => + [ + "crypto/perlasm/sparcv9_modes.pl", + ], + "crypto/aes/vpaes-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bf/bf-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/bn-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/co-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/x86-gf2m.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/bn/x86-mont.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/buildinf.h" => + [ + "configdata.pm", + ], + "crypto/camellia/cmll-x86.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/camellia/cmllt4-sparcv9.S" => + [ + "crypto/perlasm/sparcv9_modes.pl", + ], + "crypto/cast/cast-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/cversion.o" => + [ + "crypto/buildinf.h", + ], + "crypto/des/crypt586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/des/des-586.s" => + [ + "crypto/perlasm/cbc.pl", + "crypto/perlasm/x86asm.pl", + ], + "crypto/rc4/rc4-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/ripemd/rmd-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha1-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha256-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/sha/sha512-586.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/whrlpool/wp-mmx.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "crypto/x86cpuid.s" => + [ + "crypto/perlasm/x86asm.pl", + ], + "fuzz/asn1-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/asn1parse-test" => + [ + "libcrypto", + ], + "fuzz/bignum-test" => + [ + "libcrypto", + ], + "fuzz/bndiv-test" => + [ + "libcrypto", + ], + "fuzz/client-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/cms-test" => + [ + "libcrypto", + ], + "fuzz/conf-test" => + [ + "libcrypto", + ], + "fuzz/crl-test" => + [ + "libcrypto", + ], + "fuzz/ct-test" => + [ + "libcrypto", + ], + "fuzz/server-test" => + [ + "libcrypto", + "libssl", + ], + "fuzz/x509-test" => + [ + "libcrypto", + ], + "include/crypto/bn_conf.h" => + [ + "configdata.pm", + ], + "include/crypto/dso_conf.h" => + [ + "configdata.pm", + ], + "include/openssl/opensslconf.h" => + [ + "configdata.pm", + ], + "libssl" => + [ + "libcrypto", + ], + "test/aborttest" => + [ + "libcrypto", + ], + "test/afalgtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_decode_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_encode_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/asn1_string_table_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asn1_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/asynciotest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/asynctest" => + [ + "libcrypto", + ], + "test/bad_dtls_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/bftest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_callback_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_enc_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bio_memleak_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bioprinttest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/bntest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/buildtest_c_aes" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_asn1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_asn1t" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_async" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_bio" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_blowfish" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_bn" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_buffer" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_camellia" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cast" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cmac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_cms" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_conf" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_conf_api" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_crypto" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ct" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_des" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dh" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_dtls1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_e_os2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ebcdic" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ec" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ecdh" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ecdsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_engine" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_evp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_hmac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_idea" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_kdf" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_lhash" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_md4" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_md5" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_mdc2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_modes" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_obj_mac" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_objects" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ocsp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_opensslv" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ossl_typ" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pem" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pem2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pkcs12" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_pkcs7" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rand" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rand_drbg" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rc2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rc4" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ripemd" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_rsa" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_safestack" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_seed" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_sha" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_srp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_srtp" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ssl" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ssl2" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_stack" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_store" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_symhacks" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_tls1" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ts" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_txt_db" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_ui" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_whrlpool" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509_vfy" => + [ + "libcrypto", + "libssl", + ], + "test/buildtest_c_x509v3" => + [ + "libcrypto", + "libssl", + ], + "test/casttest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/chacha_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/cipher_overhead_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cipherbytes_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cipherlist_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ciphername_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/clienthellotest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/cmsapitest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/conf_include_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/constant_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/crltest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ct_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ctype_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/curve448_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/d2i_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/danetest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/destest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dhtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/drbg_cavs_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/drbgtest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/dsa_no_digest_size_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dsatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/dtls_mtu_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/dtlstest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/dtlsv1listentest" => + [ + "libssl", + "test/libtestutil.a", + ], + "test/ec_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/ecdsatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ecstresstest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ectest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/enginetest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/errtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/evp_extra_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/evp_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/exdatatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/exptest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/fatalerrtest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/gmdifftest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/gosttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/hmactest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ideatest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/igetest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/lhash_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/libtestutil.a" => + [ + "libcrypto", + ], + "test/md2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/mdc2_internal_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/mdc2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/memleaktest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/modes_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/ocspapitest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/packettest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pbelutest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pemtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pkey_meth_kdf_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/pkey_meth_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/poly1305_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/rc2test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rc4test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rc5test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rdrand_sanitytest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/recordlentest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/rsa_mp_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/rsa_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/sanitytest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/secmemtest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/servername_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/siphash_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/sm2_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/sm4_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/srptest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ssl_cert_table_internal_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/ssl_ctx_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssl_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssl_test_ctx_test" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslapitest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslbuffertest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/sslcorrupttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/ssltest_old" => + [ + "libcrypto", + "libssl", + ], + "test/stack_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/sysdefaulttest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/test_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/threadstest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/time_offset_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/tls13ccstest" => + [ + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/tls13encryptiontest" => + [ + "libcrypto", + "libssl.a", + "test/libtestutil.a", + ], + "test/uitest" => + [ + "apps/libapps.a", + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "test/v3ext" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/v3nametest" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/verify_extra_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/versions" => + [ + "libcrypto", + ], + "test/wpackettest" => + [ + "libcrypto", + "libssl.a", + "test/libtestutil.a", + ], + "test/x509_check_cert_pkey_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509_dup_cert_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509_internal_test" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], + "test/x509_time_test" => + [ + "libcrypto", + "test/libtestutil.a", + ], + "test/x509aux" => + [ + "libcrypto", + "test/libtestutil.a", + ], + }, + "dirinfo" => + { + "apps" => + { + "products" => + { + "bin" => + [ + "apps/openssl", + ], + "lib" => + [ + "apps/libapps.a", + ], + "script" => + [ + "apps/CA.pl", + "apps/tsget.pl", + ], + }, + }, + "crypto" => + { + "deps" => + [ + "crypto/cpt_err.o", + "crypto/cryptlib.o", + "crypto/ctype.o", + "crypto/cversion.o", + "crypto/ebcdic.o", + "crypto/ex_data.o", + "crypto/getenv.o", + "crypto/init.o", + "crypto/mem.o", + "crypto/mem_clr.o", + "crypto/mem_dbg.o", + "crypto/mem_sec.o", + "crypto/o_dir.o", + "crypto/o_fips.o", + "crypto/o_fopen.o", + "crypto/o_init.o", + "crypto/o_str.o", + "crypto/o_time.o", + "crypto/threads_none.o", + "crypto/threads_pthread.o", + "crypto/threads_win.o", + "crypto/uid.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/aes" => + { + "deps" => + [ + "crypto/aes/aes_cbc.o", + "crypto/aes/aes_cfb.o", + "crypto/aes/aes_core.o", + "crypto/aes/aes_ecb.o", + "crypto/aes/aes_ige.o", + "crypto/aes/aes_misc.o", + "crypto/aes/aes_ofb.o", + "crypto/aes/aes_wrap.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/aria" => + { + "deps" => + [ + "crypto/aria/aria.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/asn1" => + { + "deps" => + [ + "crypto/asn1/a_bitstr.o", + "crypto/asn1/a_d2i_fp.o", + "crypto/asn1/a_digest.o", + "crypto/asn1/a_dup.o", + "crypto/asn1/a_gentm.o", + "crypto/asn1/a_i2d_fp.o", + "crypto/asn1/a_int.o", + "crypto/asn1/a_mbstr.o", + "crypto/asn1/a_object.o", + "crypto/asn1/a_octet.o", + "crypto/asn1/a_print.o", + "crypto/asn1/a_sign.o", + "crypto/asn1/a_strex.o", + "crypto/asn1/a_strnid.o", + "crypto/asn1/a_time.o", + "crypto/asn1/a_type.o", + "crypto/asn1/a_utctm.o", + "crypto/asn1/a_utf8.o", + "crypto/asn1/a_verify.o", + "crypto/asn1/ameth_lib.o", + "crypto/asn1/asn1_err.o", + "crypto/asn1/asn1_gen.o", + "crypto/asn1/asn1_item_list.o", + "crypto/asn1/asn1_lib.o", + "crypto/asn1/asn1_par.o", + "crypto/asn1/asn_mime.o", + "crypto/asn1/asn_moid.o", + "crypto/asn1/asn_mstbl.o", + "crypto/asn1/asn_pack.o", + "crypto/asn1/bio_asn1.o", + "crypto/asn1/bio_ndef.o", + "crypto/asn1/d2i_pr.o", + "crypto/asn1/d2i_pu.o", + "crypto/asn1/evp_asn1.o", + "crypto/asn1/f_int.o", + "crypto/asn1/f_string.o", + "crypto/asn1/i2d_pr.o", + "crypto/asn1/i2d_pu.o", + "crypto/asn1/n_pkey.o", + "crypto/asn1/nsseq.o", + "crypto/asn1/p5_pbe.o", + "crypto/asn1/p5_pbev2.o", + "crypto/asn1/p5_scrypt.o", + "crypto/asn1/p8_pkey.o", + "crypto/asn1/t_bitst.o", + "crypto/asn1/t_pkey.o", + "crypto/asn1/t_spki.o", + "crypto/asn1/tasn_dec.o", + "crypto/asn1/tasn_enc.o", + "crypto/asn1/tasn_fre.o", + "crypto/asn1/tasn_new.o", + "crypto/asn1/tasn_prn.o", + "crypto/asn1/tasn_scn.o", + "crypto/asn1/tasn_typ.o", + "crypto/asn1/tasn_utl.o", + "crypto/asn1/x_algor.o", + "crypto/asn1/x_bignum.o", + "crypto/asn1/x_info.o", + "crypto/asn1/x_int64.o", + "crypto/asn1/x_long.o", + "crypto/asn1/x_pkey.o", + "crypto/asn1/x_sig.o", + "crypto/asn1/x_spki.o", + "crypto/asn1/x_val.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/async" => + { + "deps" => + [ + "crypto/async/async.o", + "crypto/async/async_err.o", + "crypto/async/async_wait.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/async/arch" => + { + "deps" => + [ + "crypto/async/arch/async_null.o", + "crypto/async/arch/async_posix.o", + "crypto/async/arch/async_win.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bf" => + { + "deps" => + [ + "crypto/bf/bf_cfb64.o", + "crypto/bf/bf_ecb.o", + "crypto/bf/bf_enc.o", + "crypto/bf/bf_ofb64.o", + "crypto/bf/bf_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bio" => + { + "deps" => + [ + "crypto/bio/b_addr.o", + "crypto/bio/b_dump.o", + "crypto/bio/b_print.o", + "crypto/bio/b_sock.o", + "crypto/bio/b_sock2.o", + "crypto/bio/bf_buff.o", + "crypto/bio/bf_lbuf.o", + "crypto/bio/bf_nbio.o", + "crypto/bio/bf_null.o", + "crypto/bio/bio_cb.o", + "crypto/bio/bio_err.o", + "crypto/bio/bio_lib.o", + "crypto/bio/bio_meth.o", + "crypto/bio/bss_acpt.o", + "crypto/bio/bss_bio.o", + "crypto/bio/bss_conn.o", + "crypto/bio/bss_dgram.o", + "crypto/bio/bss_fd.o", + "crypto/bio/bss_file.o", + "crypto/bio/bss_log.o", + "crypto/bio/bss_mem.o", + "crypto/bio/bss_null.o", + "crypto/bio/bss_sock.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/blake2" => + { + "deps" => + [ + "crypto/blake2/blake2b.o", + "crypto/blake2/blake2s.o", + "crypto/blake2/m_blake2b.o", + "crypto/blake2/m_blake2s.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/bn" => + { + "deps" => + [ + "crypto/bn/bn_add.o", + "crypto/bn/bn_asm.o", + "crypto/bn/bn_blind.o", + "crypto/bn/bn_const.o", + "crypto/bn/bn_ctx.o", + "crypto/bn/bn_depr.o", + "crypto/bn/bn_dh.o", + "crypto/bn/bn_div.o", + "crypto/bn/bn_err.o", + "crypto/bn/bn_exp.o", + "crypto/bn/bn_exp2.o", + "crypto/bn/bn_gcd.o", + "crypto/bn/bn_gf2m.o", + "crypto/bn/bn_intern.o", + "crypto/bn/bn_kron.o", + "crypto/bn/bn_lib.o", + "crypto/bn/bn_mod.o", + "crypto/bn/bn_mont.o", + "crypto/bn/bn_mpi.o", + "crypto/bn/bn_mul.o", + "crypto/bn/bn_nist.o", + "crypto/bn/bn_prime.o", + "crypto/bn/bn_print.o", + "crypto/bn/bn_rand.o", + "crypto/bn/bn_recp.o", + "crypto/bn/bn_shift.o", + "crypto/bn/bn_sqr.o", + "crypto/bn/bn_sqrt.o", + "crypto/bn/bn_srp.o", + "crypto/bn/bn_word.o", + "crypto/bn/bn_x931p.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/buffer" => + { + "deps" => + [ + "crypto/buffer/buf_err.o", + "crypto/buffer/buffer.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/camellia" => + { + "deps" => + [ + "crypto/camellia/camellia.o", + "crypto/camellia/cmll_cbc.o", + "crypto/camellia/cmll_cfb.o", + "crypto/camellia/cmll_ctr.o", + "crypto/camellia/cmll_ecb.o", + "crypto/camellia/cmll_misc.o", + "crypto/camellia/cmll_ofb.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cast" => + { + "deps" => + [ + "crypto/cast/c_cfb64.o", + "crypto/cast/c_ecb.o", + "crypto/cast/c_enc.o", + "crypto/cast/c_ofb64.o", + "crypto/cast/c_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/chacha" => + { + "deps" => + [ + "crypto/chacha/chacha_enc.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cmac" => + { + "deps" => + [ + "crypto/cmac/cm_ameth.o", + "crypto/cmac/cm_pmeth.o", + "crypto/cmac/cmac.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/cms" => + { + "deps" => + [ + "crypto/cms/cms_asn1.o", + "crypto/cms/cms_att.o", + "crypto/cms/cms_cd.o", + "crypto/cms/cms_dd.o", + "crypto/cms/cms_enc.o", + "crypto/cms/cms_env.o", + "crypto/cms/cms_err.o", + "crypto/cms/cms_ess.o", + "crypto/cms/cms_io.o", + "crypto/cms/cms_kari.o", + "crypto/cms/cms_lib.o", + "crypto/cms/cms_pwri.o", + "crypto/cms/cms_sd.o", + "crypto/cms/cms_smime.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/conf" => + { + "deps" => + [ + "crypto/conf/conf_api.o", + "crypto/conf/conf_def.o", + "crypto/conf/conf_err.o", + "crypto/conf/conf_lib.o", + "crypto/conf/conf_mall.o", + "crypto/conf/conf_mod.o", + "crypto/conf/conf_sap.o", + "crypto/conf/conf_ssl.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ct" => + { + "deps" => + [ + "crypto/ct/ct_b64.o", + "crypto/ct/ct_err.o", + "crypto/ct/ct_log.o", + "crypto/ct/ct_oct.o", + "crypto/ct/ct_policy.o", + "crypto/ct/ct_prn.o", + "crypto/ct/ct_sct.o", + "crypto/ct/ct_sct_ctx.o", + "crypto/ct/ct_vfy.o", + "crypto/ct/ct_x509v3.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/des" => + { + "deps" => + [ + "crypto/des/cbc_cksm.o", + "crypto/des/cbc_enc.o", + "crypto/des/cfb64ede.o", + "crypto/des/cfb64enc.o", + "crypto/des/cfb_enc.o", + "crypto/des/des_enc.o", + "crypto/des/ecb3_enc.o", + "crypto/des/ecb_enc.o", + "crypto/des/fcrypt.o", + "crypto/des/fcrypt_b.o", + "crypto/des/ofb64ede.o", + "crypto/des/ofb64enc.o", + "crypto/des/ofb_enc.o", + "crypto/des/pcbc_enc.o", + "crypto/des/qud_cksm.o", + "crypto/des/rand_key.o", + "crypto/des/set_key.o", + "crypto/des/str2key.o", + "crypto/des/xcbc_enc.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dh" => + { + "deps" => + [ + "crypto/dh/dh_ameth.o", + "crypto/dh/dh_asn1.o", + "crypto/dh/dh_check.o", + "crypto/dh/dh_depr.o", + "crypto/dh/dh_err.o", + "crypto/dh/dh_gen.o", + "crypto/dh/dh_kdf.o", + "crypto/dh/dh_key.o", + "crypto/dh/dh_lib.o", + "crypto/dh/dh_meth.o", + "crypto/dh/dh_pmeth.o", + "crypto/dh/dh_prn.o", + "crypto/dh/dh_rfc5114.o", + "crypto/dh/dh_rfc7919.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dsa" => + { + "deps" => + [ + "crypto/dsa/dsa_ameth.o", + "crypto/dsa/dsa_asn1.o", + "crypto/dsa/dsa_depr.o", + "crypto/dsa/dsa_err.o", + "crypto/dsa/dsa_gen.o", + "crypto/dsa/dsa_key.o", + "crypto/dsa/dsa_lib.o", + "crypto/dsa/dsa_meth.o", + "crypto/dsa/dsa_ossl.o", + "crypto/dsa/dsa_pmeth.o", + "crypto/dsa/dsa_prn.o", + "crypto/dsa/dsa_sign.o", + "crypto/dsa/dsa_vrf.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/dso" => + { + "deps" => + [ + "crypto/dso/dso_dl.o", + "crypto/dso/dso_dlfcn.o", + "crypto/dso/dso_err.o", + "crypto/dso/dso_lib.o", + "crypto/dso/dso_openssl.o", + "crypto/dso/dso_vms.o", + "crypto/dso/dso_win32.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec" => + { + "deps" => + [ + "crypto/ec/curve25519.o", + "crypto/ec/ec2_oct.o", + "crypto/ec/ec2_smpl.o", + "crypto/ec/ec_ameth.o", + "crypto/ec/ec_asn1.o", + "crypto/ec/ec_check.o", + "crypto/ec/ec_curve.o", + "crypto/ec/ec_cvt.o", + "crypto/ec/ec_err.o", + "crypto/ec/ec_key.o", + "crypto/ec/ec_kmeth.o", + "crypto/ec/ec_lib.o", + "crypto/ec/ec_mult.o", + "crypto/ec/ec_oct.o", + "crypto/ec/ec_pmeth.o", + "crypto/ec/ec_print.o", + "crypto/ec/ecdh_kdf.o", + "crypto/ec/ecdh_ossl.o", + "crypto/ec/ecdsa_ossl.o", + "crypto/ec/ecdsa_sign.o", + "crypto/ec/ecdsa_vrf.o", + "crypto/ec/eck_prn.o", + "crypto/ec/ecp_mont.o", + "crypto/ec/ecp_nist.o", + "crypto/ec/ecp_nistp224.o", + "crypto/ec/ecp_nistp256.o", + "crypto/ec/ecp_nistp521.o", + "crypto/ec/ecp_nistputil.o", + "crypto/ec/ecp_oct.o", + "crypto/ec/ecp_smpl.o", + "crypto/ec/ecx_meth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec/curve448" => + { + "deps" => + [ + "crypto/ec/curve448/curve448.o", + "crypto/ec/curve448/curve448_tables.o", + "crypto/ec/curve448/eddsa.o", + "crypto/ec/curve448/f_generic.o", + "crypto/ec/curve448/scalar.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ec/curve448/arch_32" => + { + "deps" => + [ + "crypto/ec/curve448/arch_32/f_impl.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/engine" => + { + "deps" => + [ + "crypto/engine/eng_all.o", + "crypto/engine/eng_cnf.o", + "crypto/engine/eng_ctrl.o", + "crypto/engine/eng_dyn.o", + "crypto/engine/eng_err.o", + "crypto/engine/eng_fat.o", + "crypto/engine/eng_init.o", + "crypto/engine/eng_lib.o", + "crypto/engine/eng_list.o", + "crypto/engine/eng_openssl.o", + "crypto/engine/eng_pkey.o", + "crypto/engine/eng_rdrand.o", + "crypto/engine/eng_table.o", + "crypto/engine/tb_asnmth.o", + "crypto/engine/tb_cipher.o", + "crypto/engine/tb_dh.o", + "crypto/engine/tb_digest.o", + "crypto/engine/tb_dsa.o", + "crypto/engine/tb_eckey.o", + "crypto/engine/tb_pkmeth.o", + "crypto/engine/tb_rand.o", + "crypto/engine/tb_rsa.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/err" => + { + "deps" => + [ + "crypto/err/err.o", + "crypto/err/err_all.o", + "crypto/err/err_prn.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/evp" => + { + "deps" => + [ + "crypto/evp/bio_b64.o", + "crypto/evp/bio_enc.o", + "crypto/evp/bio_md.o", + "crypto/evp/bio_ok.o", + "crypto/evp/c_allc.o", + "crypto/evp/c_alld.o", + "crypto/evp/cmeth_lib.o", + "crypto/evp/digest.o", + "crypto/evp/e_aes.o", + "crypto/evp/e_aes_cbc_hmac_sha1.o", + "crypto/evp/e_aes_cbc_hmac_sha256.o", + "crypto/evp/e_aria.o", + "crypto/evp/e_bf.o", + "crypto/evp/e_camellia.o", + "crypto/evp/e_cast.o", + "crypto/evp/e_chacha20_poly1305.o", + "crypto/evp/e_des.o", + "crypto/evp/e_des3.o", + "crypto/evp/e_idea.o", + "crypto/evp/e_null.o", + "crypto/evp/e_old.o", + "crypto/evp/e_rc2.o", + "crypto/evp/e_rc4.o", + "crypto/evp/e_rc4_hmac_md5.o", + "crypto/evp/e_rc5.o", + "crypto/evp/e_seed.o", + "crypto/evp/e_sm4.o", + "crypto/evp/e_xcbc_d.o", + "crypto/evp/encode.o", + "crypto/evp/evp_cnf.o", + "crypto/evp/evp_enc.o", + "crypto/evp/evp_err.o", + "crypto/evp/evp_key.o", + "crypto/evp/evp_lib.o", + "crypto/evp/evp_pbe.o", + "crypto/evp/evp_pkey.o", + "crypto/evp/m_md2.o", + "crypto/evp/m_md4.o", + "crypto/evp/m_md5.o", + "crypto/evp/m_md5_sha1.o", + "crypto/evp/m_mdc2.o", + "crypto/evp/m_null.o", + "crypto/evp/m_ripemd.o", + "crypto/evp/m_sha1.o", + "crypto/evp/m_sha3.o", + "crypto/evp/m_sigver.o", + "crypto/evp/m_wp.o", + "crypto/evp/names.o", + "crypto/evp/p5_crpt.o", + "crypto/evp/p5_crpt2.o", + "crypto/evp/p_dec.o", + "crypto/evp/p_enc.o", + "crypto/evp/p_lib.o", + "crypto/evp/p_open.o", + "crypto/evp/p_seal.o", + "crypto/evp/p_sign.o", + "crypto/evp/p_verify.o", + "crypto/evp/pbe_scrypt.o", + "crypto/evp/pmeth_fn.o", + "crypto/evp/pmeth_gn.o", + "crypto/evp/pmeth_lib.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/hmac" => + { + "deps" => + [ + "crypto/hmac/hm_ameth.o", + "crypto/hmac/hm_pmeth.o", + "crypto/hmac/hmac.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/idea" => + { + "deps" => + [ + "crypto/idea/i_cbc.o", + "crypto/idea/i_cfb64.o", + "crypto/idea/i_ecb.o", + "crypto/idea/i_ofb64.o", + "crypto/idea/i_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/kdf" => + { + "deps" => + [ + "crypto/kdf/hkdf.o", + "crypto/kdf/kdf_err.o", + "crypto/kdf/scrypt.o", + "crypto/kdf/tls1_prf.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/lhash" => + { + "deps" => + [ + "crypto/lhash/lh_stats.o", + "crypto/lhash/lhash.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/md4" => + { + "deps" => + [ + "crypto/md4/md4_dgst.o", + "crypto/md4/md4_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/md5" => + { + "deps" => + [ + "crypto/md5/md5_dgst.o", + "crypto/md5/md5_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/mdc2" => + { + "deps" => + [ + "crypto/mdc2/mdc2_one.o", + "crypto/mdc2/mdc2dgst.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/modes" => + { + "deps" => + [ + "crypto/modes/cbc128.o", + "crypto/modes/ccm128.o", + "crypto/modes/cfb128.o", + "crypto/modes/ctr128.o", + "crypto/modes/cts128.o", + "crypto/modes/gcm128.o", + "crypto/modes/ocb128.o", + "crypto/modes/ofb128.o", + "crypto/modes/wrap128.o", + "crypto/modes/xts128.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/objects" => + { + "deps" => + [ + "crypto/objects/o_names.o", + "crypto/objects/obj_dat.o", + "crypto/objects/obj_err.o", + "crypto/objects/obj_lib.o", + "crypto/objects/obj_xref.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ocsp" => + { + "deps" => + [ + "crypto/ocsp/ocsp_asn.o", + "crypto/ocsp/ocsp_cl.o", + "crypto/ocsp/ocsp_err.o", + "crypto/ocsp/ocsp_ext.o", + "crypto/ocsp/ocsp_ht.o", + "crypto/ocsp/ocsp_lib.o", + "crypto/ocsp/ocsp_prn.o", + "crypto/ocsp/ocsp_srv.o", + "crypto/ocsp/ocsp_vfy.o", + "crypto/ocsp/v3_ocsp.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pem" => + { + "deps" => + [ + "crypto/pem/pem_all.o", + "crypto/pem/pem_err.o", + "crypto/pem/pem_info.o", + "crypto/pem/pem_lib.o", + "crypto/pem/pem_oth.o", + "crypto/pem/pem_pk8.o", + "crypto/pem/pem_pkey.o", + "crypto/pem/pem_sign.o", + "crypto/pem/pem_x509.o", + "crypto/pem/pem_xaux.o", + "crypto/pem/pvkfmt.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pkcs12" => + { + "deps" => + [ + "crypto/pkcs12/p12_add.o", + "crypto/pkcs12/p12_asn.o", + "crypto/pkcs12/p12_attr.o", + "crypto/pkcs12/p12_crpt.o", + "crypto/pkcs12/p12_crt.o", + "crypto/pkcs12/p12_decr.o", + "crypto/pkcs12/p12_init.o", + "crypto/pkcs12/p12_key.o", + "crypto/pkcs12/p12_kiss.o", + "crypto/pkcs12/p12_mutl.o", + "crypto/pkcs12/p12_npas.o", + "crypto/pkcs12/p12_p8d.o", + "crypto/pkcs12/p12_p8e.o", + "crypto/pkcs12/p12_sbag.o", + "crypto/pkcs12/p12_utl.o", + "crypto/pkcs12/pk12err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/pkcs7" => + { + "deps" => + [ + "crypto/pkcs7/bio_pk7.o", + "crypto/pkcs7/pk7_asn1.o", + "crypto/pkcs7/pk7_attr.o", + "crypto/pkcs7/pk7_doit.o", + "crypto/pkcs7/pk7_lib.o", + "crypto/pkcs7/pk7_mime.o", + "crypto/pkcs7/pk7_smime.o", + "crypto/pkcs7/pkcs7err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/poly1305" => + { + "deps" => + [ + "crypto/poly1305/poly1305.o", + "crypto/poly1305/poly1305_ameth.o", + "crypto/poly1305/poly1305_pmeth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rand" => + { + "deps" => + [ + "crypto/rand/drbg_ctr.o", + "crypto/rand/drbg_lib.o", + "crypto/rand/rand_egd.o", + "crypto/rand/rand_err.o", + "crypto/rand/rand_lib.o", + "crypto/rand/rand_unix.o", + "crypto/rand/rand_vms.o", + "crypto/rand/rand_win.o", + "crypto/rand/randfile.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rc2" => + { + "deps" => + [ + "crypto/rc2/rc2_cbc.o", + "crypto/rc2/rc2_ecb.o", + "crypto/rc2/rc2_skey.o", + "crypto/rc2/rc2cfb64.o", + "crypto/rc2/rc2ofb64.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rc4" => + { + "deps" => + [ + "crypto/rc4/rc4_enc.o", + "crypto/rc4/rc4_skey.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ripemd" => + { + "deps" => + [ + "crypto/ripemd/rmd_dgst.o", + "crypto/ripemd/rmd_one.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/rsa" => + { + "deps" => + [ + "crypto/rsa/rsa_ameth.o", + "crypto/rsa/rsa_asn1.o", + "crypto/rsa/rsa_chk.o", + "crypto/rsa/rsa_crpt.o", + "crypto/rsa/rsa_depr.o", + "crypto/rsa/rsa_err.o", + "crypto/rsa/rsa_gen.o", + "crypto/rsa/rsa_lib.o", + "crypto/rsa/rsa_meth.o", + "crypto/rsa/rsa_mp.o", + "crypto/rsa/rsa_none.o", + "crypto/rsa/rsa_oaep.o", + "crypto/rsa/rsa_ossl.o", + "crypto/rsa/rsa_pk1.o", + "crypto/rsa/rsa_pmeth.o", + "crypto/rsa/rsa_prn.o", + "crypto/rsa/rsa_pss.o", + "crypto/rsa/rsa_saos.o", + "crypto/rsa/rsa_sign.o", + "crypto/rsa/rsa_ssl.o", + "crypto/rsa/rsa_x931.o", + "crypto/rsa/rsa_x931g.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/seed" => + { + "deps" => + [ + "crypto/seed/seed.o", + "crypto/seed/seed_cbc.o", + "crypto/seed/seed_cfb.o", + "crypto/seed/seed_ecb.o", + "crypto/seed/seed_ofb.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sha" => + { + "deps" => + [ + "crypto/sha/keccak1600.o", + "crypto/sha/sha1_one.o", + "crypto/sha/sha1dgst.o", + "crypto/sha/sha256.o", + "crypto/sha/sha512.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/siphash" => + { + "deps" => + [ + "crypto/siphash/siphash.o", + "crypto/siphash/siphash_ameth.o", + "crypto/siphash/siphash_pmeth.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm2" => + { + "deps" => + [ + "crypto/sm2/sm2_crypt.o", + "crypto/sm2/sm2_err.o", + "crypto/sm2/sm2_pmeth.o", + "crypto/sm2/sm2_sign.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm3" => + { + "deps" => + [ + "crypto/sm3/m_sm3.o", + "crypto/sm3/sm3.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/sm4" => + { + "deps" => + [ + "crypto/sm4/sm4.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/srp" => + { + "deps" => + [ + "crypto/srp/srp_lib.o", + "crypto/srp/srp_vfy.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/stack" => + { + "deps" => + [ + "crypto/stack/stack.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/store" => + { + "deps" => + [ + "crypto/store/loader_file.o", + "crypto/store/store_err.o", + "crypto/store/store_init.o", + "crypto/store/store_lib.o", + "crypto/store/store_register.o", + "crypto/store/store_strings.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ts" => + { + "deps" => + [ + "crypto/ts/ts_asn1.o", + "crypto/ts/ts_conf.o", + "crypto/ts/ts_err.o", + "crypto/ts/ts_lib.o", + "crypto/ts/ts_req_print.o", + "crypto/ts/ts_req_utils.o", + "crypto/ts/ts_rsp_print.o", + "crypto/ts/ts_rsp_sign.o", + "crypto/ts/ts_rsp_utils.o", + "crypto/ts/ts_rsp_verify.o", + "crypto/ts/ts_verify_ctx.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/txt_db" => + { + "deps" => + [ + "crypto/txt_db/txt_db.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/ui" => + { + "deps" => + [ + "crypto/ui/ui_err.o", + "crypto/ui/ui_lib.o", + "crypto/ui/ui_null.o", + "crypto/ui/ui_openssl.o", + "crypto/ui/ui_util.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/whrlpool" => + { + "deps" => + [ + "crypto/whrlpool/wp_block.o", + "crypto/whrlpool/wp_dgst.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/x509" => + { + "deps" => + [ + "crypto/x509/by_dir.o", + "crypto/x509/by_file.o", + "crypto/x509/t_crl.o", + "crypto/x509/t_req.o", + "crypto/x509/t_x509.o", + "crypto/x509/x509_att.o", + "crypto/x509/x509_cmp.o", + "crypto/x509/x509_d2.o", + "crypto/x509/x509_def.o", + "crypto/x509/x509_err.o", + "crypto/x509/x509_ext.o", + "crypto/x509/x509_lu.o", + "crypto/x509/x509_meth.o", + "crypto/x509/x509_obj.o", + "crypto/x509/x509_r2x.o", + "crypto/x509/x509_req.o", + "crypto/x509/x509_set.o", + "crypto/x509/x509_trs.o", + "crypto/x509/x509_txt.o", + "crypto/x509/x509_v3.o", + "crypto/x509/x509_vfy.o", + "crypto/x509/x509_vpm.o", + "crypto/x509/x509cset.o", + "crypto/x509/x509name.o", + "crypto/x509/x509rset.o", + "crypto/x509/x509spki.o", + "crypto/x509/x509type.o", + "crypto/x509/x_all.o", + "crypto/x509/x_attrib.o", + "crypto/x509/x_crl.o", + "crypto/x509/x_exten.o", + "crypto/x509/x_name.o", + "crypto/x509/x_pubkey.o", + "crypto/x509/x_req.o", + "crypto/x509/x_x509.o", + "crypto/x509/x_x509a.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "crypto/x509v3" => + { + "deps" => + [ + "crypto/x509v3/pcy_cache.o", + "crypto/x509v3/pcy_data.o", + "crypto/x509v3/pcy_lib.o", + "crypto/x509v3/pcy_map.o", + "crypto/x509v3/pcy_node.o", + "crypto/x509v3/pcy_tree.o", + "crypto/x509v3/v3_addr.o", + "crypto/x509v3/v3_admis.o", + "crypto/x509v3/v3_akey.o", + "crypto/x509v3/v3_akeya.o", + "crypto/x509v3/v3_alt.o", + "crypto/x509v3/v3_asid.o", + "crypto/x509v3/v3_bcons.o", + "crypto/x509v3/v3_bitst.o", + "crypto/x509v3/v3_conf.o", + "crypto/x509v3/v3_cpols.o", + "crypto/x509v3/v3_crld.o", + "crypto/x509v3/v3_enum.o", + "crypto/x509v3/v3_extku.o", + "crypto/x509v3/v3_genn.o", + "crypto/x509v3/v3_ia5.o", + "crypto/x509v3/v3_info.o", + "crypto/x509v3/v3_int.o", + "crypto/x509v3/v3_lib.o", + "crypto/x509v3/v3_ncons.o", + "crypto/x509v3/v3_pci.o", + "crypto/x509v3/v3_pcia.o", + "crypto/x509v3/v3_pcons.o", + "crypto/x509v3/v3_pku.o", + "crypto/x509v3/v3_pmaps.o", + "crypto/x509v3/v3_prn.o", + "crypto/x509v3/v3_purp.o", + "crypto/x509v3/v3_skey.o", + "crypto/x509v3/v3_sxnet.o", + "crypto/x509v3/v3_tlsf.o", + "crypto/x509v3/v3_utl.o", + "crypto/x509v3/v3err.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "engines" => + { + "deps" => + [ + "engines/e_capi.o", + "engines/e_padlock.o", + ], + "products" => + { + "lib" => + [ + "libcrypto", + ], + }, + }, + "fuzz" => + { + "products" => + { + "bin" => + [ + "fuzz/asn1-test", + "fuzz/asn1parse-test", + "fuzz/bignum-test", + "fuzz/bndiv-test", + "fuzz/client-test", + "fuzz/cms-test", + "fuzz/conf-test", + "fuzz/crl-test", + "fuzz/ct-test", + "fuzz/server-test", + "fuzz/x509-test", + ], + }, + }, + "ssl" => + { + "deps" => + [ + "ssl/bio_ssl.o", + "ssl/d1_lib.o", + "ssl/d1_msg.o", + "ssl/d1_srtp.o", + "ssl/methods.o", + "ssl/packet.o", + "ssl/pqueue.o", + "ssl/s3_cbc.o", + "ssl/s3_enc.o", + "ssl/s3_lib.o", + "ssl/s3_msg.o", + "ssl/ssl_asn1.o", + "ssl/ssl_cert.o", + "ssl/ssl_ciph.o", + "ssl/ssl_conf.o", + "ssl/ssl_err.o", + "ssl/ssl_init.o", + "ssl/ssl_lib.o", + "ssl/ssl_mcnf.o", + "ssl/ssl_rsa.o", + "ssl/ssl_sess.o", + "ssl/ssl_stat.o", + "ssl/ssl_txt.o", + "ssl/ssl_utst.o", + "ssl/t1_enc.o", + "ssl/t1_lib.o", + "ssl/t1_trce.o", + "ssl/tls13_enc.o", + "ssl/tls_srp.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "ssl/record" => + { + "deps" => + [ + "ssl/record/dtls1_bitmap.o", + "ssl/record/rec_layer_d1.o", + "ssl/record/rec_layer_s3.o", + "ssl/record/ssl3_buffer.o", + "ssl/record/ssl3_record.o", + "ssl/record/ssl3_record_tls13.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "ssl/statem" => + { + "deps" => + [ + "ssl/statem/extensions.o", + "ssl/statem/extensions_clnt.o", + "ssl/statem/extensions_cust.o", + "ssl/statem/extensions_srvr.o", + "ssl/statem/statem.o", + "ssl/statem/statem_clnt.o", + "ssl/statem/statem_dtls.o", + "ssl/statem/statem_lib.o", + "ssl/statem/statem_srvr.o", + ], + "products" => + { + "lib" => + [ + "libssl", + ], + }, + }, + "test/testutil" => + { + "deps" => + [ + "test/testutil/basic_output.o", + "test/testutil/cb.o", + "test/testutil/driver.o", + "test/testutil/format_output.o", + "test/testutil/main.o", + "test/testutil/output_helpers.o", + "test/testutil/random.o", + "test/testutil/stanza.o", + "test/testutil/tap_bio.o", + "test/testutil/test_cleanup.o", + "test/testutil/tests.o", + "test/testutil/testutil_init.o", + ], + "products" => + { + "lib" => + [ + "test/libtestutil.a", + ], + }, + }, + "tools" => + { + "products" => + { + "script" => + [ + "tools/c_rehash", + ], + }, + }, + "util" => + { + "products" => + { + "script" => + [ + "util/shlib_wrap.sh", + ], + }, + }, + }, + "engines" => + [ + ], + "extra" => + [ + "crypto/alphacpuid.pl", + "crypto/arm64cpuid.pl", + "crypto/armv4cpuid.pl", + "crypto/ia64cpuid.S", + "crypto/pariscid.pl", + "crypto/ppccpuid.pl", + "crypto/x86_64cpuid.pl", + "crypto/x86cpuid.pl", + "ms/applink.c", + "ms/uplink-x86.pl", + "ms/uplink.c", + ], + "generate" => + { + "apps/progs.h" => + [ + "apps/progs.pl", + "\$(APPS_OPENSSL)", + ], + "crypto/aes/aes-586.s" => + [ + "crypto/aes/asm/aes-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/aes-armv4.S" => + [ + "crypto/aes/asm/aes-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-ia64.s" => + [ + "crypto/aes/asm/aes-ia64.S", + ], + "crypto/aes/aes-mips.S" => + [ + "crypto/aes/asm/aes-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-parisc.s" => + [ + "crypto/aes/asm/aes-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-ppc.s" => + [ + "crypto/aes/asm/aes-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-s390x.S" => + [ + "crypto/aes/asm/aes-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-sparcv9.S" => + [ + "crypto/aes/asm/aes-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aes-x86_64.s" => + [ + "crypto/aes/asm/aes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesfx-sparcv9.S" => + [ + "crypto/aes/asm/aesfx-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-mb-x86_64.s" => + [ + "crypto/aes/asm/aesni-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-sha1-x86_64.s" => + [ + "crypto/aes/asm/aesni-sha1-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-sha256-x86_64.s" => + [ + "crypto/aes/asm/aesni-sha256-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesni-x86.s" => + [ + "crypto/aes/asm/aesni-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/aesni-x86_64.s" => + [ + "crypto/aes/asm/aesni-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesp8-ppc.s" => + [ + "crypto/aes/asm/aesp8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aest4-sparcv9.S" => + [ + "crypto/aes/asm/aest4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/aesv8-armx.S" => + [ + "crypto/aes/asm/aesv8-armx.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/bsaes-armv7.S" => + [ + "crypto/aes/asm/bsaes-armv7.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/bsaes-x86_64.s" => + [ + "crypto/aes/asm/bsaes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-armv8.S" => + [ + "crypto/aes/asm/vpaes-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-ppc.s" => + [ + "crypto/aes/asm/vpaes-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/aes/vpaes-x86.s" => + [ + "crypto/aes/asm/vpaes-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/aes/vpaes-x86_64.s" => + [ + "crypto/aes/asm/vpaes-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/alphacpuid.s" => + [ + "crypto/alphacpuid.pl", + ], + "crypto/arm64cpuid.S" => + [ + "crypto/arm64cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/armv4cpuid.S" => + [ + "crypto/armv4cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bf/bf-586.s" => + [ + "crypto/bf/asm/bf-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/alpha-mont.S" => + [ + "crypto/bn/asm/alpha-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv4-gf2m.S" => + [ + "crypto/bn/asm/armv4-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv4-mont.S" => + [ + "crypto/bn/asm/armv4-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/armv8-mont.S" => + [ + "crypto/bn/asm/armv8-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/bn-586.s" => + [ + "crypto/bn/asm/bn-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/bn-ia64.s" => + [ + "crypto/bn/asm/ia64.S", + ], + "crypto/bn/bn-mips.S" => + [ + "crypto/bn/asm/mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/bn-ppc.s" => + [ + "crypto/bn/asm/ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/co-586.s" => + [ + "crypto/bn/asm/co-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/ia64-mont.s" => + [ + "crypto/bn/asm/ia64-mont.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/bn/mips-mont.S" => + [ + "crypto/bn/asm/mips-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/parisc-mont.s" => + [ + "crypto/bn/asm/parisc-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/ppc-mont.s" => + [ + "crypto/bn/asm/ppc-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/ppc64-mont.s" => + [ + "crypto/bn/asm/ppc64-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/rsaz-avx2.s" => + [ + "crypto/bn/asm/rsaz-avx2.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/rsaz-x86_64.s" => + [ + "crypto/bn/asm/rsaz-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/s390x-gf2m.s" => + [ + "crypto/bn/asm/s390x-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/s390x-mont.S" => + [ + "crypto/bn/asm/s390x-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparct4-mont.S" => + [ + "crypto/bn/asm/sparct4-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9-gf2m.S" => + [ + "crypto/bn/asm/sparcv9-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9-mont.S" => + [ + "crypto/bn/asm/sparcv9-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/sparcv9a-mont.S" => + [ + "crypto/bn/asm/sparcv9a-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/vis3-mont.S" => + [ + "crypto/bn/asm/vis3-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86-gf2m.s" => + [ + "crypto/bn/asm/x86-gf2m.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/x86-mont.s" => + [ + "crypto/bn/asm/x86-mont.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/bn/x86_64-gf2m.s" => + [ + "crypto/bn/asm/x86_64-gf2m.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86_64-mont.s" => + [ + "crypto/bn/asm/x86_64-mont.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/bn/x86_64-mont5.s" => + [ + "crypto/bn/asm/x86_64-mont5.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/buildinf.h" => + [ + "util/mkbuildinf.pl", + "\"\$(CC)", + "\$(LIB_CFLAGS)", + "\$(CPPFLAGS_Q)\"", + "\"\$(PLATFORM)\"", + ], + "crypto/camellia/cmll-x86.s" => + [ + "crypto/camellia/asm/cmll-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/camellia/cmll-x86_64.s" => + [ + "crypto/camellia/asm/cmll-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/camellia/cmllt4-sparcv9.S" => + [ + "crypto/camellia/asm/cmllt4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/cast/cast-586.s" => + [ + "crypto/cast/asm/cast-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/chacha/chacha-armv4.S" => + [ + "crypto/chacha/asm/chacha-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-armv8.S" => + [ + "crypto/chacha/asm/chacha-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-ppc.s" => + [ + "crypto/chacha/asm/chacha-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-s390x.S" => + [ + "crypto/chacha/asm/chacha-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/chacha/chacha-x86.s" => + [ + "crypto/chacha/asm/chacha-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/chacha/chacha-x86_64.s" => + [ + "crypto/chacha/asm/chacha-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/des/crypt586.s" => + [ + "crypto/des/asm/crypt586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/des/des-586.s" => + [ + "crypto/des/asm/des-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/des/des_enc-sparc.S" => + [ + "crypto/des/asm/des_enc.m4", + ], + "crypto/des/dest4-sparcv9.S" => + [ + "crypto/des/asm/dest4-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-armv4.S" => + [ + "crypto/ec/asm/ecp_nistz256-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-armv8.S" => + [ + "crypto/ec/asm/ecp_nistz256-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-avx2.s" => + [ + "crypto/ec/asm/ecp_nistz256-avx2.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-ppc64.s" => + [ + "crypto/ec/asm/ecp_nistz256-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-sparcv9.S" => + [ + "crypto/ec/asm/ecp_nistz256-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/ecp_nistz256-x86.s" => + [ + "crypto/ec/asm/ecp_nistz256-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/ec/ecp_nistz256-x86_64.s" => + [ + "crypto/ec/asm/ecp_nistz256-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/x25519-ppc64.s" => + [ + "crypto/ec/asm/x25519-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ec/x25519-x86_64.s" => + [ + "crypto/ec/asm/x25519-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ia64cpuid.s" => + [ + "crypto/ia64cpuid.S", + ], + "crypto/md5/md5-586.s" => + [ + "crypto/md5/asm/md5-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/md5/md5-sparcv9.S" => + [ + "crypto/md5/asm/md5-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/md5/md5-x86_64.s" => + [ + "crypto/md5/asm/md5-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/aesni-gcm-x86_64.s" => + [ + "crypto/modes/asm/aesni-gcm-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-alpha.S" => + [ + "crypto/modes/asm/ghash-alpha.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-armv4.S" => + [ + "crypto/modes/asm/ghash-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-ia64.s" => + [ + "crypto/modes/asm/ghash-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/modes/ghash-parisc.s" => + [ + "crypto/modes/asm/ghash-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-s390x.S" => + [ + "crypto/modes/asm/ghash-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-sparcv9.S" => + [ + "crypto/modes/asm/ghash-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghash-x86.s" => + [ + "crypto/modes/asm/ghash-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/modes/ghash-x86_64.s" => + [ + "crypto/modes/asm/ghash-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghashp8-ppc.s" => + [ + "crypto/modes/asm/ghashp8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/modes/ghashv8-armx.S" => + [ + "crypto/modes/asm/ghashv8-armx.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/pariscid.s" => + [ + "crypto/pariscid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-armv4.S" => + [ + "crypto/poly1305/asm/poly1305-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-armv8.S" => + [ + "crypto/poly1305/asm/poly1305-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-mips.S" => + [ + "crypto/poly1305/asm/poly1305-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-ppc.s" => + [ + "crypto/poly1305/asm/poly1305-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-ppcfp.s" => + [ + "crypto/poly1305/asm/poly1305-ppcfp.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-s390x.S" => + [ + "crypto/poly1305/asm/poly1305-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-sparcv9.S" => + [ + "crypto/poly1305/asm/poly1305-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/poly1305/poly1305-x86.s" => + [ + "crypto/poly1305/asm/poly1305-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/poly1305/poly1305-x86_64.s" => + [ + "crypto/poly1305/asm/poly1305-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ppccpuid.s" => + [ + "crypto/ppccpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-586.s" => + [ + "crypto/rc4/asm/rc4-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/rc4/rc4-md5-x86_64.s" => + [ + "crypto/rc4/asm/rc4-md5-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-parisc.s" => + [ + "crypto/rc4/asm/rc4-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-s390x.s" => + [ + "crypto/rc4/asm/rc4-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/rc4/rc4-x86_64.s" => + [ + "crypto/rc4/asm/rc4-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/ripemd/rmd-586.s" => + [ + "crypto/ripemd/asm/rmd-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/s390xcpuid.S" => + [ + "crypto/s390xcpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-armv4.S" => + [ + "crypto/sha/asm/keccak1600-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-armv8.S" => + [ + "crypto/sha/asm/keccak1600-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-ppc64.s" => + [ + "crypto/sha/asm/keccak1600-ppc64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-s390x.S" => + [ + "crypto/sha/asm/keccak1600-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/keccak1600-x86_64.s" => + [ + "crypto/sha/asm/keccak1600-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-586.s" => + [ + "crypto/sha/asm/sha1-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha1-alpha.S" => + [ + "crypto/sha/asm/sha1-alpha.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-armv4-large.S" => + [ + "crypto/sha/asm/sha1-armv4-large.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-armv8.S" => + [ + "crypto/sha/asm/sha1-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-ia64.s" => + [ + "crypto/sha/asm/sha1-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha1-mb-x86_64.s" => + [ + "crypto/sha/asm/sha1-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-mips.S" => + [ + "crypto/sha/asm/sha1-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-parisc.s" => + [ + "crypto/sha/asm/sha1-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-ppc.s" => + [ + "crypto/sha/asm/sha1-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-s390x.S" => + [ + "crypto/sha/asm/sha1-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-sparcv9.S" => + [ + "crypto/sha/asm/sha1-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha1-x86_64.s" => + [ + "crypto/sha/asm/sha1-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-586.s" => + [ + "crypto/sha/asm/sha256-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha256-armv4.S" => + [ + "crypto/sha/asm/sha256-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-armv8.S" => + [ + "crypto/sha/asm/sha512-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-ia64.s" => + [ + "crypto/sha/asm/sha512-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha256-mb-x86_64.s" => + [ + "crypto/sha/asm/sha256-mb-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-mips.S" => + [ + "crypto/sha/asm/sha512-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-parisc.s" => + [ + "crypto/sha/asm/sha512-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-ppc.s" => + [ + "crypto/sha/asm/sha512-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-s390x.S" => + [ + "crypto/sha/asm/sha512-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-sparcv9.S" => + [ + "crypto/sha/asm/sha512-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256-x86_64.s" => + [ + "crypto/sha/asm/sha512-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha256p8-ppc.s" => + [ + "crypto/sha/asm/sha512p8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-586.s" => + [ + "crypto/sha/asm/sha512-586.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/sha/sha512-armv4.S" => + [ + "crypto/sha/asm/sha512-armv4.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-armv8.S" => + [ + "crypto/sha/asm/sha512-armv8.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-ia64.s" => + [ + "crypto/sha/asm/sha512-ia64.pl", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + ], + "crypto/sha/sha512-mips.S" => + [ + "crypto/sha/asm/sha512-mips.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-parisc.s" => + [ + "crypto/sha/asm/sha512-parisc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-ppc.s" => + [ + "crypto/sha/asm/sha512-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-s390x.S" => + [ + "crypto/sha/asm/sha512-s390x.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-sparcv9.S" => + [ + "crypto/sha/asm/sha512-sparcv9.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512-x86_64.s" => + [ + "crypto/sha/asm/sha512-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/sha/sha512p8-ppc.s" => + [ + "crypto/sha/asm/sha512p8-ppc.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-ia64.s" => + [ + "ms/uplink-ia64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-x86.s" => + [ + "ms/uplink-x86.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/uplink-x86_64.s" => + [ + "ms/uplink-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/whrlpool/wp-mmx.s" => + [ + "crypto/whrlpool/asm/wp-mmx.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "crypto/whrlpool/wp-x86_64.s" => + [ + "crypto/whrlpool/asm/wp-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/x86_64cpuid.s" => + [ + "crypto/x86_64cpuid.pl", + "\$(PERLASM_SCHEME)", + ], + "crypto/x86cpuid.s" => + [ + "crypto/x86cpuid.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "engines/e_padlock-x86.s" => + [ + "engines/asm/e_padlock-x86.pl", + "\$(PERLASM_SCHEME)", + "\$(LIB_CFLAGS)", + "\$(LIB_CPPFLAGS)", + "\$(PROCESSOR)", + ], + "engines/e_padlock-x86_64.s" => + [ + "engines/asm/e_padlock-x86_64.pl", + "\$(PERLASM_SCHEME)", + ], + "include/crypto/bn_conf.h" => + [ + "include/crypto/bn_conf.h.in", + ], + "include/crypto/dso_conf.h" => + [ + "include/crypto/dso_conf.h.in", + ], + "include/openssl/opensslconf.h" => + [ + "include/openssl/opensslconf.h.in", + ], + "test/buildtest_aes.c" => + [ + "test/generate_buildtest.pl", + "aes", + ], + "test/buildtest_asn1.c" => + [ + "test/generate_buildtest.pl", + "asn1", + ], + "test/buildtest_asn1t.c" => + [ + "test/generate_buildtest.pl", + "asn1t", + ], + "test/buildtest_async.c" => + [ + "test/generate_buildtest.pl", + "async", + ], + "test/buildtest_bio.c" => + [ + "test/generate_buildtest.pl", + "bio", + ], + "test/buildtest_blowfish.c" => + [ + "test/generate_buildtest.pl", + "blowfish", + ], + "test/buildtest_bn.c" => + [ + "test/generate_buildtest.pl", + "bn", + ], + "test/buildtest_buffer.c" => + [ + "test/generate_buildtest.pl", + "buffer", + ], + "test/buildtest_camellia.c" => + [ + "test/generate_buildtest.pl", + "camellia", + ], + "test/buildtest_cast.c" => + [ + "test/generate_buildtest.pl", + "cast", + ], + "test/buildtest_cmac.c" => + [ + "test/generate_buildtest.pl", + "cmac", + ], + "test/buildtest_cms.c" => + [ + "test/generate_buildtest.pl", + "cms", + ], + "test/buildtest_conf.c" => + [ + "test/generate_buildtest.pl", + "conf", + ], + "test/buildtest_conf_api.c" => + [ + "test/generate_buildtest.pl", + "conf_api", + ], + "test/buildtest_crypto.c" => + [ + "test/generate_buildtest.pl", + "crypto", + ], + "test/buildtest_ct.c" => + [ + "test/generate_buildtest.pl", + "ct", + ], + "test/buildtest_des.c" => + [ + "test/generate_buildtest.pl", + "des", + ], + "test/buildtest_dh.c" => + [ + "test/generate_buildtest.pl", + "dh", + ], + "test/buildtest_dsa.c" => + [ + "test/generate_buildtest.pl", + "dsa", + ], + "test/buildtest_dtls1.c" => + [ + "test/generate_buildtest.pl", + "dtls1", + ], + "test/buildtest_e_os2.c" => + [ + "test/generate_buildtest.pl", + "e_os2", + ], + "test/buildtest_ebcdic.c" => + [ + "test/generate_buildtest.pl", + "ebcdic", + ], + "test/buildtest_ec.c" => + [ + "test/generate_buildtest.pl", + "ec", + ], + "test/buildtest_ecdh.c" => + [ + "test/generate_buildtest.pl", + "ecdh", + ], + "test/buildtest_ecdsa.c" => + [ + "test/generate_buildtest.pl", + "ecdsa", + ], + "test/buildtest_engine.c" => + [ + "test/generate_buildtest.pl", + "engine", + ], + "test/buildtest_evp.c" => + [ + "test/generate_buildtest.pl", + "evp", + ], + "test/buildtest_hmac.c" => + [ + "test/generate_buildtest.pl", + "hmac", + ], + "test/buildtest_idea.c" => + [ + "test/generate_buildtest.pl", + "idea", + ], + "test/buildtest_kdf.c" => + [ + "test/generate_buildtest.pl", + "kdf", + ], + "test/buildtest_lhash.c" => + [ + "test/generate_buildtest.pl", + "lhash", + ], + "test/buildtest_md4.c" => + [ + "test/generate_buildtest.pl", + "md4", + ], + "test/buildtest_md5.c" => + [ + "test/generate_buildtest.pl", + "md5", + ], + "test/buildtest_mdc2.c" => + [ + "test/generate_buildtest.pl", + "mdc2", + ], + "test/buildtest_modes.c" => + [ + "test/generate_buildtest.pl", + "modes", + ], + "test/buildtest_obj_mac.c" => + [ + "test/generate_buildtest.pl", + "obj_mac", + ], + "test/buildtest_objects.c" => + [ + "test/generate_buildtest.pl", + "objects", + ], + "test/buildtest_ocsp.c" => + [ + "test/generate_buildtest.pl", + "ocsp", + ], + "test/buildtest_opensslv.c" => + [ + "test/generate_buildtest.pl", + "opensslv", + ], + "test/buildtest_ossl_typ.c" => + [ + "test/generate_buildtest.pl", + "ossl_typ", + ], + "test/buildtest_pem.c" => + [ + "test/generate_buildtest.pl", + "pem", + ], + "test/buildtest_pem2.c" => + [ + "test/generate_buildtest.pl", + "pem2", + ], + "test/buildtest_pkcs12.c" => + [ + "test/generate_buildtest.pl", + "pkcs12", + ], + "test/buildtest_pkcs7.c" => + [ + "test/generate_buildtest.pl", + "pkcs7", + ], + "test/buildtest_rand.c" => + [ + "test/generate_buildtest.pl", + "rand", + ], + "test/buildtest_rand_drbg.c" => + [ + "test/generate_buildtest.pl", + "rand_drbg", + ], + "test/buildtest_rc2.c" => + [ + "test/generate_buildtest.pl", + "rc2", + ], + "test/buildtest_rc4.c" => + [ + "test/generate_buildtest.pl", + "rc4", + ], + "test/buildtest_ripemd.c" => + [ + "test/generate_buildtest.pl", + "ripemd", + ], + "test/buildtest_rsa.c" => + [ + "test/generate_buildtest.pl", + "rsa", + ], + "test/buildtest_safestack.c" => + [ + "test/generate_buildtest.pl", + "safestack", + ], + "test/buildtest_seed.c" => + [ + "test/generate_buildtest.pl", + "seed", + ], + "test/buildtest_sha.c" => + [ + "test/generate_buildtest.pl", + "sha", + ], + "test/buildtest_srp.c" => + [ + "test/generate_buildtest.pl", + "srp", + ], + "test/buildtest_srtp.c" => + [ + "test/generate_buildtest.pl", + "srtp", + ], + "test/buildtest_ssl.c" => + [ + "test/generate_buildtest.pl", + "ssl", + ], + "test/buildtest_ssl2.c" => + [ + "test/generate_buildtest.pl", + "ssl2", + ], + "test/buildtest_stack.c" => + [ + "test/generate_buildtest.pl", + "stack", + ], + "test/buildtest_store.c" => + [ + "test/generate_buildtest.pl", + "store", + ], + "test/buildtest_symhacks.c" => + [ + "test/generate_buildtest.pl", + "symhacks", + ], + "test/buildtest_tls1.c" => + [ + "test/generate_buildtest.pl", + "tls1", + ], + "test/buildtest_ts.c" => + [ + "test/generate_buildtest.pl", + "ts", + ], + "test/buildtest_txt_db.c" => + [ + "test/generate_buildtest.pl", + "txt_db", + ], + "test/buildtest_ui.c" => + [ + "test/generate_buildtest.pl", + "ui", + ], + "test/buildtest_whrlpool.c" => + [ + "test/generate_buildtest.pl", + "whrlpool", + ], + "test/buildtest_x509.c" => + [ + "test/generate_buildtest.pl", + "x509", + ], + "test/buildtest_x509_vfy.c" => + [ + "test/generate_buildtest.pl", + "x509_vfy", + ], + "test/buildtest_x509v3.c" => + [ + "test/generate_buildtest.pl", + "x509v3", + ], + }, + "includes" => + { + "apps/app_rand.o" => + [ + ".", + "include", + ], + "apps/apps.o" => + [ + ".", + "include", + ], + "apps/asn1pars.o" => + [ + ".", + "include", + "apps", + ], + "apps/bf_prefix.o" => + [ + ".", + "include", + ], + "apps/ca.o" => + [ + ".", + "include", + "apps", + ], + "apps/ciphers.o" => + [ + ".", + "include", + "apps", + ], + "apps/cms.o" => + [ + ".", + "include", + "apps", + ], + "apps/crl.o" => + [ + ".", + "include", + "apps", + ], + "apps/crl2p7.o" => + [ + ".", + "include", + "apps", + ], + "apps/dgst.o" => + [ + ".", + "include", + "apps", + ], + "apps/dhparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/dsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/dsaparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/ec.o" => + [ + ".", + "include", + "apps", + ], + "apps/ecparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/enc.o" => + [ + ".", + "include", + "apps", + ], + "apps/engine.o" => + [ + ".", + "include", + "apps", + ], + "apps/errstr.o" => + [ + ".", + "include", + "apps", + ], + "apps/gendsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/genpkey.o" => + [ + ".", + "include", + "apps", + ], + "apps/genrsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/nseq.o" => + [ + ".", + "include", + "apps", + ], + "apps/ocsp.o" => + [ + ".", + "include", + "apps", + ], + "apps/openssl.o" => + [ + ".", + "include", + "apps", + ], + "apps/opt.o" => + [ + ".", + "include", + ], + "apps/passwd.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs12.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs7.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkcs8.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkey.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkeyparam.o" => + [ + ".", + "include", + "apps", + ], + "apps/pkeyutl.o" => + [ + ".", + "include", + "apps", + ], + "apps/prime.o" => + [ + ".", + "include", + "apps", + ], + "apps/progs.h" => + [ + ".", + ], + "apps/rand.o" => + [ + ".", + "include", + "apps", + ], + "apps/rehash.o" => + [ + ".", + "include", + "apps", + ], + "apps/req.o" => + [ + ".", + "include", + "apps", + ], + "apps/rsa.o" => + [ + ".", + "include", + "apps", + ], + "apps/rsautl.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_cb.o" => + [ + ".", + "include", + ], + "apps/s_client.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_server.o" => + [ + ".", + "include", + "apps", + ], + "apps/s_socket.o" => + [ + ".", + "include", + ], + "apps/s_time.o" => + [ + ".", + "include", + "apps", + ], + "apps/sess_id.o" => + [ + ".", + "include", + "apps", + ], + "apps/smime.o" => + [ + ".", + "include", + "apps", + ], + "apps/speed.o" => + [ + ".", + "include", + "apps", + ], + "apps/spkac.o" => + [ + ".", + "include", + "apps", + ], + "apps/srp.o" => + [ + ".", + "include", + "apps", + ], + "apps/storeutl.o" => + [ + ".", + "include", + "apps", + ], + "apps/ts.o" => + [ + ".", + "include", + "apps", + ], + "apps/verify.o" => + [ + ".", + "include", + "apps", + ], + "apps/version.o" => + [ + ".", + "include", + "apps", + ], + "apps/x509.o" => + [ + ".", + "include", + "apps", + ], + "crypto/aes/aes-armv4.o" => + [ + "crypto", + ], + "crypto/aes/aes-mips.o" => + [ + "crypto", + ], + "crypto/aes/aes-s390x.o" => + [ + "crypto", + ], + "crypto/aes/aes-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aes_cbc.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_cfb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_core.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ecb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ige.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_misc.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_ofb.o" => + [ + ".", + "include", + ], + "crypto/aes/aes_wrap.o" => + [ + ".", + "include", + ], + "crypto/aes/aesfx-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aest4-sparcv9.o" => + [ + "crypto", + ], + "crypto/aes/aesv8-armx.o" => + [ + "crypto", + ], + "crypto/aes/bsaes-armv7.o" => + [ + "crypto", + ], + "crypto/aria/aria.o" => + [ + ".", + "include", + ], + "crypto/arm64cpuid.o" => + [ + "crypto", + ], + "crypto/armv4cpuid.o" => + [ + "crypto", + ], + "crypto/asn1/a_bitstr.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_d2i_fp.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_digest.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_dup.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_gentm.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_i2d_fp.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_int.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_mbstr.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_object.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_octet.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_print.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_sign.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_strex.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_strnid.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_time.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_type.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_utctm.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_utf8.o" => + [ + ".", + "include", + ], + "crypto/asn1/a_verify.o" => + [ + ".", + "include", + ], + "crypto/asn1/ameth_lib.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_err.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_gen.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_item_list.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_lib.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn1_par.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_mime.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_moid.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_mstbl.o" => + [ + ".", + "include", + ], + "crypto/asn1/asn_pack.o" => + [ + ".", + "include", + ], + "crypto/asn1/bio_asn1.o" => + [ + ".", + "include", + ], + "crypto/asn1/bio_ndef.o" => + [ + ".", + "include", + ], + "crypto/asn1/d2i_pr.o" => + [ + ".", + "include", + ], + "crypto/asn1/d2i_pu.o" => + [ + ".", + "include", + ], + "crypto/asn1/evp_asn1.o" => + [ + ".", + "include", + ], + "crypto/asn1/f_int.o" => + [ + ".", + "include", + ], + "crypto/asn1/f_string.o" => + [ + ".", + "include", + ], + "crypto/asn1/i2d_pr.o" => + [ + ".", + "include", + ], + "crypto/asn1/i2d_pu.o" => + [ + ".", + "include", + ], + "crypto/asn1/n_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/nsseq.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_pbe.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_pbev2.o" => + [ + ".", + "include", + ], + "crypto/asn1/p5_scrypt.o" => + [ + ".", + "include", + ], + "crypto/asn1/p8_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_bitst.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/t_spki.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_dec.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_enc.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_fre.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_new.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_prn.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_scn.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_typ.o" => + [ + ".", + "include", + ], + "crypto/asn1/tasn_utl.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_algor.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_bignum.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_info.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_int64.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_long.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_pkey.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_sig.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_spki.o" => + [ + ".", + "include", + ], + "crypto/asn1/x_val.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_null.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_posix.o" => + [ + ".", + "include", + ], + "crypto/async/arch/async_win.o" => + [ + ".", + "include", + ], + "crypto/async/async.o" => + [ + ".", + "include", + ], + "crypto/async/async_err.o" => + [ + ".", + "include", + ], + "crypto/async/async_wait.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_cfb64.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_ecb.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_enc.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_ofb64.o" => + [ + ".", + "include", + ], + "crypto/bf/bf_skey.o" => + [ + ".", + "include", + ], + "crypto/bio/b_addr.o" => + [ + ".", + "include", + ], + "crypto/bio/b_dump.o" => + [ + ".", + "include", + ], + "crypto/bio/b_print.o" => + [ + ".", + "include", + ], + "crypto/bio/b_sock.o" => + [ + ".", + "include", + ], + "crypto/bio/b_sock2.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_buff.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_lbuf.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_nbio.o" => + [ + ".", + "include", + ], + "crypto/bio/bf_null.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_cb.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_err.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_lib.o" => + [ + ".", + "include", + ], + "crypto/bio/bio_meth.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_acpt.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_bio.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_conn.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_dgram.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_fd.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_file.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_log.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_mem.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_null.o" => + [ + ".", + "include", + ], + "crypto/bio/bss_sock.o" => + [ + ".", + "include", + ], + "crypto/blake2/blake2b.o" => + [ + ".", + "include", + ], + "crypto/blake2/blake2s.o" => + [ + ".", + "include", + ], + "crypto/blake2/m_blake2b.o" => + [ + ".", + "include", + ], + "crypto/blake2/m_blake2s.o" => + [ + ".", + "include", + ], + "crypto/bn/armv4-gf2m.o" => + [ + "crypto", + ], + "crypto/bn/armv4-mont.o" => + [ + "crypto", + ], + "crypto/bn/bn-mips.o" => + [ + "crypto", + ], + "crypto/bn/bn_add.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_asm.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_blind.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_const.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_ctx.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_depr.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_dh.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_div.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_err.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_exp.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/bn/bn_exp2.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_gcd.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_gf2m.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_intern.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_kron.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_lib.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mod.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mont.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mpi.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_mul.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_nist.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_prime.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_print.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_rand.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_recp.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_shift.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_sqr.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_sqrt.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_srp.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_word.o" => + [ + ".", + "include", + ], + "crypto/bn/bn_x931p.o" => + [ + ".", + "include", + ], + "crypto/bn/mips-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparct4-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9-gf2m.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9-mont.o" => + [ + "crypto", + ], + "crypto/bn/sparcv9a-mont.o" => + [ + "crypto", + ], + "crypto/bn/vis3-mont.o" => + [ + "crypto", + ], + "crypto/buffer/buf_err.o" => + [ + ".", + "include", + ], + "crypto/buffer/buffer.o" => + [ + ".", + "include", + ], + "crypto/buildinf.h" => + [ + ".", + ], + "crypto/camellia/camellia.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_cbc.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_cfb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ctr.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ecb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_misc.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmll_ofb.o" => + [ + ".", + "include", + ], + "crypto/camellia/cmllt4-sparcv9.o" => + [ + "crypto", + ], + "crypto/cast/c_cfb64.o" => + [ + ".", + "include", + ], + "crypto/cast/c_ecb.o" => + [ + ".", + "include", + ], + "crypto/cast/c_enc.o" => + [ + ".", + "include", + ], + "crypto/cast/c_ofb64.o" => + [ + ".", + "include", + ], + "crypto/cast/c_skey.o" => + [ + ".", + "include", + ], + "crypto/chacha/chacha-armv4.o" => + [ + "crypto", + ], + "crypto/chacha/chacha-armv8.o" => + [ + "crypto", + ], + "crypto/chacha/chacha-s390x.o" => + [ + "crypto", + ], + "crypto/chacha/chacha_enc.o" => + [ + ".", + "include", + ], + "crypto/cmac/cm_ameth.o" => + [ + ".", + "include", + ], + "crypto/cmac/cm_pmeth.o" => + [ + ".", + "include", + ], + "crypto/cmac/cmac.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_asn1.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_att.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_cd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_dd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_enc.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_env.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_err.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_ess.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_io.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_kari.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_lib.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_pwri.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_sd.o" => + [ + ".", + "include", + ], + "crypto/cms/cms_smime.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_api.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_def.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_err.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_lib.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_mall.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_mod.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_sap.o" => + [ + ".", + "include", + ], + "crypto/conf/conf_ssl.o" => + [ + ".", + "include", + ], + "crypto/cpt_err.o" => + [ + ".", + "include", + ], + "crypto/cryptlib.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_b64.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_err.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_log.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_oct.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_policy.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_prn.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_sct.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_sct_ctx.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_vfy.o" => + [ + ".", + "include", + ], + "crypto/ct/ct_x509v3.o" => + [ + ".", + "include", + ], + "crypto/ctype.o" => + [ + ".", + "include", + ], + "crypto/cversion.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/des/cbc_cksm.o" => + [ + ".", + "include", + ], + "crypto/des/cbc_enc.o" => + [ + ".", + "include", + ], + "crypto/des/cfb64ede.o" => + [ + ".", + "include", + ], + "crypto/des/cfb64enc.o" => + [ + ".", + "include", + ], + "crypto/des/cfb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/des_enc.o" => + [ + ".", + "include", + ], + "crypto/des/dest4-sparcv9.o" => + [ + "crypto", + ], + "crypto/des/ecb3_enc.o" => + [ + ".", + "include", + ], + "crypto/des/ecb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/fcrypt.o" => + [ + ".", + "include", + ], + "crypto/des/fcrypt_b.o" => + [ + ".", + "include", + ], + "crypto/des/ofb64ede.o" => + [ + ".", + "include", + ], + "crypto/des/ofb64enc.o" => + [ + ".", + "include", + ], + "crypto/des/ofb_enc.o" => + [ + ".", + "include", + ], + "crypto/des/pcbc_enc.o" => + [ + ".", + "include", + ], + "crypto/des/qud_cksm.o" => + [ + ".", + "include", + ], + "crypto/des/rand_key.o" => + [ + ".", + "include", + ], + "crypto/des/set_key.o" => + [ + ".", + "include", + ], + "crypto/des/str2key.o" => + [ + ".", + "include", + ], + "crypto/des/xcbc_enc.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_ameth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_asn1.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_check.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_depr.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_err.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_gen.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_kdf.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_key.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_lib.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_meth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_pmeth.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_prn.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_rfc5114.o" => + [ + ".", + "include", + ], + "crypto/dh/dh_rfc7919.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_ameth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_asn1.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_depr.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_err.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_gen.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_key.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_lib.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_meth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_pmeth.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_prn.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_sign.o" => + [ + ".", + "include", + ], + "crypto/dsa/dsa_vrf.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_dl.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_dlfcn.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_err.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_lib.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_openssl.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_vms.o" => + [ + ".", + "include", + ], + "crypto/dso/dso_win32.o" => + [ + ".", + "include", + ], + "crypto/ebcdic.o" => + [ + ".", + "include", + ], + "crypto/ec/curve25519.o" => + [ + ".", + "include", + ], + "crypto/ec/curve448/arch_32/f_impl.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/curve448.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/curve448_tables.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/eddsa.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/f_generic.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/curve448/scalar.o" => + [ + ".", + "include", + "crypto/ec/curve448/arch_32", + "crypto/ec/curve448", + ], + "crypto/ec/ec2_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ec2_smpl.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_ameth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_asn1.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_check.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_curve.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_cvt.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_err.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_key.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_kmeth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_lib.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_mult.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_pmeth.o" => + [ + ".", + "include", + ], + "crypto/ec/ec_print.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdh_kdf.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdh_ossl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_sign.o" => + [ + ".", + "include", + ], + "crypto/ec/ecdsa_vrf.o" => + [ + ".", + "include", + ], + "crypto/ec/eck_prn.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_mont.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nist.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp224.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp256.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistp521.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistputil.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_nistz256-armv4.o" => + [ + "crypto", + ], + "crypto/ec/ecp_nistz256-armv8.o" => + [ + "crypto", + ], + "crypto/ec/ecp_nistz256-sparcv9.o" => + [ + "crypto", + ], + "crypto/ec/ecp_oct.o" => + [ + ".", + "include", + ], + "crypto/ec/ecp_smpl.o" => + [ + ".", + "include", + ], + "crypto/ec/ecx_meth.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_all.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_cnf.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_ctrl.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_dyn.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_err.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_fat.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_init.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_lib.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_list.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_openssl.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_pkey.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_rdrand.o" => + [ + ".", + "include", + ], + "crypto/engine/eng_table.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_asnmth.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_cipher.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_dh.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_digest.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_dsa.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_eckey.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_pkmeth.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_rand.o" => + [ + ".", + "include", + ], + "crypto/engine/tb_rsa.o" => + [ + ".", + "include", + ], + "crypto/err/err.o" => + [ + ".", + "include", + ], + "crypto/err/err_all.o" => + [ + ".", + "include", + ], + "crypto/err/err_prn.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_b64.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_md.o" => + [ + ".", + "include", + ], + "crypto/evp/bio_ok.o" => + [ + ".", + "include", + ], + "crypto/evp/c_allc.o" => + [ + ".", + "include", + ], + "crypto/evp/c_alld.o" => + [ + ".", + "include", + ], + "crypto/evp/cmeth_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/digest.o" => + [ + ".", + "include", + ], + "crypto/evp/e_aes.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_aes_cbc_hmac_sha1.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/evp/e_aes_cbc_hmac_sha256.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/evp/e_aria.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_bf.o" => + [ + ".", + "include", + ], + "crypto/evp/e_camellia.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_cast.o" => + [ + ".", + "include", + ], + "crypto/evp/e_chacha20_poly1305.o" => + [ + ".", + "include", + ], + "crypto/evp/e_des.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/e_des3.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/e_idea.o" => + [ + ".", + "include", + ], + "crypto/evp/e_null.o" => + [ + ".", + "include", + ], + "crypto/evp/e_old.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc2.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc4.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc4_hmac_md5.o" => + [ + ".", + "include", + ], + "crypto/evp/e_rc5.o" => + [ + ".", + "include", + ], + "crypto/evp/e_seed.o" => + [ + ".", + "include", + ], + "crypto/evp/e_sm4.o" => + [ + ".", + "include", + "crypto", + "crypto/modes", + ], + "crypto/evp/e_xcbc_d.o" => + [ + ".", + "include", + ], + "crypto/evp/encode.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_cnf.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_err.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_key.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_pbe.o" => + [ + ".", + "include", + ], + "crypto/evp/evp_pkey.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md2.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md4.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md5.o" => + [ + ".", + "include", + ], + "crypto/evp/m_md5_sha1.o" => + [ + ".", + "include", + ], + "crypto/evp/m_mdc2.o" => + [ + ".", + "include", + ], + "crypto/evp/m_null.o" => + [ + ".", + "include", + ], + "crypto/evp/m_ripemd.o" => + [ + ".", + "include", + ], + "crypto/evp/m_sha1.o" => + [ + ".", + "include", + ], + "crypto/evp/m_sha3.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/evp/m_sigver.o" => + [ + ".", + "include", + ], + "crypto/evp/m_wp.o" => + [ + ".", + "include", + ], + "crypto/evp/names.o" => + [ + ".", + "include", + ], + "crypto/evp/p5_crpt.o" => + [ + ".", + "include", + ], + "crypto/evp/p5_crpt2.o" => + [ + ".", + "include", + ], + "crypto/evp/p_dec.o" => + [ + ".", + "include", + ], + "crypto/evp/p_enc.o" => + [ + ".", + "include", + ], + "crypto/evp/p_lib.o" => + [ + ".", + "include", + ], + "crypto/evp/p_open.o" => + [ + ".", + "include", + ], + "crypto/evp/p_seal.o" => + [ + ".", + "include", + ], + "crypto/evp/p_sign.o" => + [ + ".", + "include", + ], + "crypto/evp/p_verify.o" => + [ + ".", + "include", + ], + "crypto/evp/pbe_scrypt.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_fn.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_gn.o" => + [ + ".", + "include", + ], + "crypto/evp/pmeth_lib.o" => + [ + ".", + "include", + ], + "crypto/ex_data.o" => + [ + ".", + "include", + ], + "crypto/getenv.o" => + [ + ".", + "include", + ], + "crypto/hmac/hm_ameth.o" => + [ + ".", + "include", + ], + "crypto/hmac/hm_pmeth.o" => + [ + ".", + "include", + ], + "crypto/hmac/hmac.o" => + [ + ".", + "include", + ], + "crypto/idea/i_cbc.o" => + [ + ".", + "include", + ], + "crypto/idea/i_cfb64.o" => + [ + ".", + "include", + ], + "crypto/idea/i_ecb.o" => + [ + ".", + "include", + ], + "crypto/idea/i_ofb64.o" => + [ + ".", + "include", + ], + "crypto/idea/i_skey.o" => + [ + ".", + "include", + ], + "crypto/init.o" => + [ + ".", + "include", + ], + "crypto/kdf/hkdf.o" => + [ + ".", + "include", + ], + "crypto/kdf/kdf_err.o" => + [ + ".", + "include", + ], + "crypto/kdf/scrypt.o" => + [ + ".", + "include", + ], + "crypto/kdf/tls1_prf.o" => + [ + ".", + "include", + ], + "crypto/lhash/lh_stats.o" => + [ + ".", + "include", + ], + "crypto/lhash/lhash.o" => + [ + ".", + "include", + ], + "crypto/md4/md4_dgst.o" => + [ + ".", + "include", + ], + "crypto/md4/md4_one.o" => + [ + ".", + "include", + ], + "crypto/md5/md5-sparcv9.o" => + [ + "crypto", + ], + "crypto/md5/md5_dgst.o" => + [ + ".", + "include", + ], + "crypto/md5/md5_one.o" => + [ + ".", + "include", + ], + "crypto/mdc2/mdc2_one.o" => + [ + ".", + "include", + ], + "crypto/mdc2/mdc2dgst.o" => + [ + ".", + "include", + ], + "crypto/mem.o" => + [ + ".", + "include", + ], + "crypto/mem_clr.o" => + [ + ".", + "include", + ], + "crypto/mem_dbg.o" => + [ + ".", + "include", + ], + "crypto/mem_sec.o" => + [ + ".", + "include", + ], + "crypto/modes/cbc128.o" => + [ + ".", + "include", + ], + "crypto/modes/ccm128.o" => + [ + ".", + "include", + ], + "crypto/modes/cfb128.o" => + [ + ".", + "include", + ], + "crypto/modes/ctr128.o" => + [ + ".", + "include", + ], + "crypto/modes/cts128.o" => + [ + ".", + "include", + ], + "crypto/modes/gcm128.o" => + [ + ".", + "include", + "crypto", + ], + "crypto/modes/ghash-armv4.o" => + [ + "crypto", + ], + "crypto/modes/ghash-s390x.o" => + [ + "crypto", + ], + "crypto/modes/ghash-sparcv9.o" => + [ + "crypto", + ], + "crypto/modes/ghashv8-armx.o" => + [ + "crypto", + ], + "crypto/modes/ocb128.o" => + [ + ".", + "include", + ], + "crypto/modes/ofb128.o" => + [ + ".", + "include", + ], + "crypto/modes/wrap128.o" => + [ + ".", + "include", + ], + "crypto/modes/xts128.o" => + [ + ".", + "include", + ], + "crypto/o_dir.o" => + [ + ".", + "include", + ], + "crypto/o_fips.o" => + [ + ".", + "include", + ], + "crypto/o_fopen.o" => + [ + ".", + "include", + ], + "crypto/o_init.o" => + [ + ".", + "include", + ], + "crypto/o_str.o" => + [ + ".", + "include", + ], + "crypto/o_time.o" => + [ + ".", + "include", + ], + "crypto/objects/o_names.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_dat.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_err.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_lib.o" => + [ + ".", + "include", + ], + "crypto/objects/obj_xref.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_asn.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_cl.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_err.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_ext.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_ht.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_lib.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_prn.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_srv.o" => + [ + ".", + "include", + ], + "crypto/ocsp/ocsp_vfy.o" => + [ + ".", + "include", + ], + "crypto/ocsp/v3_ocsp.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_all.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_err.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_info.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_lib.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_oth.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_pk8.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_pkey.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_sign.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_x509.o" => + [ + ".", + "include", + ], + "crypto/pem/pem_xaux.o" => + [ + ".", + "include", + ], + "crypto/pem/pvkfmt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_add.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_asn.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_attr.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_crpt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_crt.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_decr.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_init.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_key.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_kiss.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_mutl.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_npas.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_p8d.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_p8e.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_sbag.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/p12_utl.o" => + [ + ".", + "include", + ], + "crypto/pkcs12/pk12err.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/bio_pk7.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_asn1.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_attr.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_doit.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_lib.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_mime.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pk7_smime.o" => + [ + ".", + "include", + ], + "crypto/pkcs7/pkcs7err.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305-armv4.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305-armv8.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305-mips.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305-sparcv9.o" => + [ + "crypto", + ], + "crypto/poly1305/poly1305.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305_ameth.o" => + [ + ".", + "include", + ], + "crypto/poly1305/poly1305_pmeth.o" => + [ + ".", + "include", + ], + "crypto/rand/drbg_ctr.o" => + [ + ".", + "include", + "crypto/modes", + ], + "crypto/rand/drbg_lib.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_egd.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_err.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_lib.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_unix.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_vms.o" => + [ + ".", + "include", + ], + "crypto/rand/rand_win.o" => + [ + ".", + "include", + ], + "crypto/rand/randfile.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_cbc.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_ecb.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2_skey.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2cfb64.o" => + [ + ".", + "include", + ], + "crypto/rc2/rc2ofb64.o" => + [ + ".", + "include", + ], + "crypto/rc4/rc4_enc.o" => + [ + ".", + "include", + ], + "crypto/rc4/rc4_skey.o" => + [ + ".", + "include", + ], + "crypto/ripemd/rmd_dgst.o" => + [ + ".", + "include", + ], + "crypto/ripemd/rmd_one.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ameth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_asn1.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_chk.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_crpt.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_depr.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_err.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_gen.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_lib.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_meth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_mp.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_none.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_oaep.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ossl.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pk1.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pmeth.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_prn.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_pss.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_saos.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_sign.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_ssl.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_x931.o" => + [ + ".", + "include", + ], + "crypto/rsa/rsa_x931g.o" => + [ + ".", + "include", + ], + "crypto/s390xcpuid.o" => + [ + "crypto", + ], + "crypto/seed/seed.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_cbc.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_cfb.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_ecb.o" => + [ + ".", + "include", + ], + "crypto/seed/seed_ofb.o" => + [ + ".", + "include", + ], + "crypto/sha/keccak1600-armv4.o" => + [ + "crypto", + ], + "crypto/sha/keccak1600.o" => + [ + ".", + "include", + ], + "crypto/sha/sha1-armv4-large.o" => + [ + "crypto", + ], + "crypto/sha/sha1-armv8.o" => + [ + "crypto", + ], + "crypto/sha/sha1-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha1-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha1-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha1_one.o" => + [ + ".", + "include", + ], + "crypto/sha/sha1dgst.o" => + [ + ".", + "include", + ], + "crypto/sha/sha256-armv4.o" => + [ + "crypto", + ], + "crypto/sha/sha256-armv8.o" => + [ + "crypto", + ], + "crypto/sha/sha256-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha256-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha256-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha256.o" => + [ + ".", + "include", + ], + "crypto/sha/sha512-armv4.o" => + [ + "crypto", + ], + "crypto/sha/sha512-armv8.o" => + [ + "crypto", + ], + "crypto/sha/sha512-mips.o" => + [ + "crypto", + ], + "crypto/sha/sha512-s390x.o" => + [ + "crypto", + ], + "crypto/sha/sha512-sparcv9.o" => + [ + "crypto", + ], + "crypto/sha/sha512.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash_ameth.o" => + [ + ".", + "include", + ], + "crypto/siphash/siphash_pmeth.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_crypt.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_err.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_pmeth.o" => + [ + ".", + "include", + ], + "crypto/sm2/sm2_sign.o" => + [ + ".", + "include", + ], + "crypto/sm3/m_sm3.o" => + [ + ".", + "include", + ], + "crypto/sm3/sm3.o" => + [ + ".", + "include", + ], + "crypto/sm4/sm4.o" => + [ + ".", + "include", + ], + "crypto/srp/srp_lib.o" => + [ + ".", + "include", + ], + "crypto/srp/srp_vfy.o" => + [ + ".", + "include", + ], + "crypto/stack/stack.o" => + [ + ".", + "include", + ], + "crypto/store/loader_file.o" => + [ + ".", + "include", + ], + "crypto/store/store_err.o" => + [ + ".", + "include", + ], + "crypto/store/store_init.o" => + [ + ".", + "include", + ], + "crypto/store/store_lib.o" => + [ + ".", + "include", + ], + "crypto/store/store_register.o" => + [ + ".", + "include", + ], + "crypto/store/store_strings.o" => + [ + ".", + "include", + ], + "crypto/threads_none.o" => + [ + ".", + "include", + ], + "crypto/threads_pthread.o" => + [ + ".", + "include", + ], + "crypto/threads_win.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_asn1.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_conf.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_err.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_lib.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_req_print.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_req_utils.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_print.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_sign.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_utils.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_rsp_verify.o" => + [ + ".", + "include", + ], + "crypto/ts/ts_verify_ctx.o" => + [ + ".", + "include", + ], + "crypto/txt_db/txt_db.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_err.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_lib.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_null.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_openssl.o" => + [ + ".", + "include", + ], + "crypto/ui/ui_util.o" => + [ + ".", + "include", + ], + "crypto/uid.o" => + [ + ".", + "include", + ], + "crypto/whrlpool/wp_block.o" => + [ + ".", + "include", + ], + "crypto/whrlpool/wp_dgst.o" => + [ + ".", + "include", + ], + "crypto/x509/by_dir.o" => + [ + ".", + "include", + ], + "crypto/x509/by_file.o" => + [ + ".", + "include", + ], + "crypto/x509/t_crl.o" => + [ + ".", + "include", + ], + "crypto/x509/t_req.o" => + [ + ".", + "include", + ], + "crypto/x509/t_x509.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_att.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_cmp.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_d2.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_def.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_err.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_ext.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_lu.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_meth.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_obj.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_r2x.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_req.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_set.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_trs.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_txt.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_v3.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_vfy.o" => + [ + ".", + "include", + ], + "crypto/x509/x509_vpm.o" => + [ + ".", + "include", + ], + "crypto/x509/x509cset.o" => + [ + ".", + "include", + ], + "crypto/x509/x509name.o" => + [ + ".", + "include", + ], + "crypto/x509/x509rset.o" => + [ + ".", + "include", + ], + "crypto/x509/x509spki.o" => + [ + ".", + "include", + ], + "crypto/x509/x509type.o" => + [ + ".", + "include", + ], + "crypto/x509/x_all.o" => + [ + ".", + "include", + ], + "crypto/x509/x_attrib.o" => + [ + ".", + "include", + ], + "crypto/x509/x_crl.o" => + [ + ".", + "include", + ], + "crypto/x509/x_exten.o" => + [ + ".", + "include", + ], + "crypto/x509/x_name.o" => + [ + ".", + "include", + ], + "crypto/x509/x_pubkey.o" => + [ + ".", + "include", + ], + "crypto/x509/x_req.o" => + [ + ".", + "include", + ], + "crypto/x509/x_x509.o" => + [ + ".", + "include", + ], + "crypto/x509/x_x509a.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_cache.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_data.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_lib.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_map.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_node.o" => + [ + ".", + "include", + ], + "crypto/x509v3/pcy_tree.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_addr.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_admis.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_akey.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_akeya.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_alt.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_asid.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_bcons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_bitst.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_conf.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_cpols.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_crld.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_enum.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_extku.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_genn.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_ia5.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_info.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_int.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_lib.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_ncons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pci.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pcia.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pcons.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pku.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_pmaps.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_prn.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_purp.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_skey.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_sxnet.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_tlsf.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3_utl.o" => + [ + ".", + "include", + ], + "crypto/x509v3/v3err.o" => + [ + ".", + "include", + ], + "engines/e_capi.o" => + [ + ".", + "include", + ], + "engines/e_padlock.o" => + [ + ".", + "include", + ], + "fuzz/asn1.o" => + [ + "include", + ], + "fuzz/asn1parse.o" => + [ + "include", + ], + "fuzz/bignum.o" => + [ + "include", + ], + "fuzz/bndiv.o" => + [ + "include", + ], + "fuzz/client.o" => + [ + "include", + ], + "fuzz/cms.o" => + [ + "include", + ], + "fuzz/conf.o" => + [ + "include", + ], + "fuzz/crl.o" => + [ + "include", + ], + "fuzz/ct.o" => + [ + "include", + ], + "fuzz/server.o" => + [ + "include", + ], + "fuzz/test-corpus.o" => + [ + "include", + ], + "fuzz/x509.o" => + [ + "include", + ], + "include/crypto/bn_conf.h" => + [ + ".", + ], + "include/crypto/dso_conf.h" => + [ + ".", + ], + "include/openssl/opensslconf.h" => + [ + ".", + ], + "ssl/bio_ssl.o" => + [ + ".", + "include", + ], + "ssl/d1_lib.o" => + [ + ".", + "include", + ], + "ssl/d1_msg.o" => + [ + ".", + "include", + ], + "ssl/d1_srtp.o" => + [ + ".", + "include", + ], + "ssl/methods.o" => + [ + ".", + "include", + ], + "ssl/packet.o" => + [ + ".", + "include", + ], + "ssl/pqueue.o" => + [ + ".", + "include", + ], + "ssl/record/dtls1_bitmap.o" => + [ + ".", + "include", + ], + "ssl/record/rec_layer_d1.o" => + [ + ".", + "include", + ], + "ssl/record/rec_layer_s3.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_buffer.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_record.o" => + [ + ".", + "include", + ], + "ssl/record/ssl3_record_tls13.o" => + [ + ".", + "include", + ], + "ssl/s3_cbc.o" => + [ + ".", + "include", + ], + "ssl/s3_enc.o" => + [ + ".", + "include", + ], + "ssl/s3_lib.o" => + [ + ".", + "include", + ], + "ssl/s3_msg.o" => + [ + ".", + "include", + ], + "ssl/ssl_asn1.o" => + [ + ".", + "include", + ], + "ssl/ssl_cert.o" => + [ + ".", + "include", + ], + "ssl/ssl_ciph.o" => + [ + ".", + "include", + ], + "ssl/ssl_conf.o" => + [ + ".", + "include", + ], + "ssl/ssl_err.o" => + [ + ".", + "include", + ], + "ssl/ssl_init.o" => + [ + ".", + "include", + ], + "ssl/ssl_lib.o" => + [ + ".", + "include", + ], + "ssl/ssl_mcnf.o" => + [ + ".", + "include", + ], + "ssl/ssl_rsa.o" => + [ + ".", + "include", + ], + "ssl/ssl_sess.o" => + [ + ".", + "include", + ], + "ssl/ssl_stat.o" => + [ + ".", + "include", + ], + "ssl/ssl_txt.o" => + [ + ".", + "include", + ], + "ssl/ssl_utst.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_clnt.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_cust.o" => + [ + ".", + "include", + ], + "ssl/statem/extensions_srvr.o" => + [ + ".", + "include", + ], + "ssl/statem/statem.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_clnt.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_dtls.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_lib.o" => + [ + ".", + "include", + ], + "ssl/statem/statem_srvr.o" => + [ + ".", + "include", + ], + "ssl/t1_enc.o" => + [ + ".", + "include", + ], + "ssl/t1_lib.o" => + [ + ".", + "include", + ], + "ssl/t1_trce.o" => + [ + ".", + "include", + ], + "ssl/tls13_enc.o" => + [ + ".", + "include", + ], + "ssl/tls_srp.o" => + [ + ".", + "include", + ], + "test/aborttest.o" => + [ + "include", + ], + "test/afalgtest.o" => + [ + "include", + ], + "test/asn1_decode_test.o" => + [ + "include", + ], + "test/asn1_encode_test.o" => + [ + "include", + ], + "test/asn1_internal_test.o" => + [ + ".", + "include", + ], + "test/asn1_string_table_test.o" => + [ + "include", + ], + "test/asn1_time_test.o" => + [ + "include", + ], + "test/asynciotest.o" => + [ + "include", + ], + "test/asynctest.o" => + [ + "include", + ], + "test/bad_dtls_test.o" => + [ + "include", + ], + "test/bftest.o" => + [ + "include", + ], + "test/bio_callback_test.o" => + [ + "include", + ], + "test/bio_enc_test.o" => + [ + "include", + ], + "test/bio_memleak_test.o" => + [ + "include", + ], + "test/bioprinttest.o" => + [ + "include", + ], + "test/bntest.o" => + [ + "include", + ], + "test/buildtest_aes.o" => + [ + "include", + ], + "test/buildtest_asn1.o" => + [ + "include", + ], + "test/buildtest_asn1t.o" => + [ + "include", + ], + "test/buildtest_async.o" => + [ + "include", + ], + "test/buildtest_bio.o" => + [ + "include", + ], + "test/buildtest_blowfish.o" => + [ + "include", + ], + "test/buildtest_bn.o" => + [ + "include", + ], + "test/buildtest_buffer.o" => + [ + "include", + ], + "test/buildtest_camellia.o" => + [ + "include", + ], + "test/buildtest_cast.o" => + [ + "include", + ], + "test/buildtest_cmac.o" => + [ + "include", + ], + "test/buildtest_cms.o" => + [ + "include", + ], + "test/buildtest_conf.o" => + [ + "include", + ], + "test/buildtest_conf_api.o" => + [ + "include", + ], + "test/buildtest_crypto.o" => + [ + "include", + ], + "test/buildtest_ct.o" => + [ + "include", + ], + "test/buildtest_des.o" => + [ + "include", + ], + "test/buildtest_dh.o" => + [ + "include", + ], + "test/buildtest_dsa.o" => + [ + "include", + ], + "test/buildtest_dtls1.o" => + [ + "include", + ], + "test/buildtest_e_os2.o" => + [ + "include", + ], + "test/buildtest_ebcdic.o" => + [ + "include", + ], + "test/buildtest_ec.o" => + [ + "include", + ], + "test/buildtest_ecdh.o" => + [ + "include", + ], + "test/buildtest_ecdsa.o" => + [ + "include", + ], + "test/buildtest_engine.o" => + [ + "include", + ], + "test/buildtest_evp.o" => + [ + "include", + ], + "test/buildtest_hmac.o" => + [ + "include", + ], + "test/buildtest_idea.o" => + [ + "include", + ], + "test/buildtest_kdf.o" => + [ + "include", + ], + "test/buildtest_lhash.o" => + [ + "include", + ], + "test/buildtest_md4.o" => + [ + "include", + ], + "test/buildtest_md5.o" => + [ + "include", + ], + "test/buildtest_mdc2.o" => + [ + "include", + ], + "test/buildtest_modes.o" => + [ + "include", + ], + "test/buildtest_obj_mac.o" => + [ + "include", + ], + "test/buildtest_objects.o" => + [ + "include", + ], + "test/buildtest_ocsp.o" => + [ + "include", + ], + "test/buildtest_opensslv.o" => + [ + "include", + ], + "test/buildtest_ossl_typ.o" => + [ + "include", + ], + "test/buildtest_pem.o" => + [ + "include", + ], + "test/buildtest_pem2.o" => + [ + "include", + ], + "test/buildtest_pkcs12.o" => + [ + "include", + ], + "test/buildtest_pkcs7.o" => + [ + "include", + ], + "test/buildtest_rand.o" => + [ + "include", + ], + "test/buildtest_rand_drbg.o" => + [ + "include", + ], + "test/buildtest_rc2.o" => + [ + "include", + ], + "test/buildtest_rc4.o" => + [ + "include", + ], + "test/buildtest_ripemd.o" => + [ + "include", + ], + "test/buildtest_rsa.o" => + [ + "include", + ], + "test/buildtest_safestack.o" => + [ + "include", + ], + "test/buildtest_seed.o" => + [ + "include", + ], + "test/buildtest_sha.o" => + [ + "include", + ], + "test/buildtest_srp.o" => + [ + "include", + ], + "test/buildtest_srtp.o" => + [ + "include", + ], + "test/buildtest_ssl.o" => + [ + "include", + ], + "test/buildtest_ssl2.o" => + [ + "include", + ], + "test/buildtest_stack.o" => + [ + "include", + ], + "test/buildtest_store.o" => + [ + "include", + ], + "test/buildtest_symhacks.o" => + [ + "include", + ], + "test/buildtest_tls1.o" => + [ + "include", + ], + "test/buildtest_ts.o" => + [ + "include", + ], + "test/buildtest_txt_db.o" => + [ + "include", + ], + "test/buildtest_ui.o" => + [ + "include", + ], + "test/buildtest_whrlpool.o" => + [ + "include", + ], + "test/buildtest_x509.o" => + [ + "include", + ], + "test/buildtest_x509_vfy.o" => + [ + "include", + ], + "test/buildtest_x509v3.o" => + [ + "include", + ], + "test/casttest.o" => + [ + "include", + ], + "test/chacha_internal_test.o" => + [ + ".", + "include", + ], + "test/cipher_overhead_test.o" => + [ + ".", + "include", + ], + "test/cipherbytes_test.o" => + [ + "include", + ], + "test/cipherlist_test.o" => + [ + "include", + ], + "test/ciphername_test.o" => + [ + "include", + ], + "test/clienthellotest.o" => + [ + "include", + ], + "test/cmactest.o" => + [ + "include", + ], + "test/cmsapitest.o" => + [ + "include", + ], + "test/conf_include_test.o" => + [ + "include", + ], + "test/constant_time_test.o" => + [ + "include", + ], + "test/crltest.o" => + [ + "include", + ], + "test/ct_test.o" => + [ + "include", + ], + "test/ctype_internal_test.o" => + [ + ".", + "include", + ], + "test/curve448_internal_test.o" => + [ + ".", + "include", + "crypto/ec/curve448", + ], + "test/d2i_test.o" => + [ + "include", + ], + "test/danetest.o" => + [ + "include", + ], + "test/destest.o" => + [ + "include", + ], + "test/dhtest.o" => + [ + "include", + ], + "test/drbg_cavs_data.o" => + [ + "include", + "test", + ".", + ], + "test/drbg_cavs_test.o" => + [ + "include", + "test", + ".", + ], + "test/drbgtest.o" => + [ + "include", + ], + "test/dsa_no_digest_size_test.o" => + [ + "include", + ], + "test/dsatest.o" => + [ + "include", + ], + "test/dtls_mtu_test.o" => + [ + ".", + "include", + ], + "test/dtlstest.o" => + [ + "include", + ], + "test/dtlsv1listentest.o" => + [ + "include", + ], + "test/ec_internal_test.o" => + [ + "include", + "crypto/ec", + ], + "test/ecdsatest.o" => + [ + "include", + ], + "test/ecstresstest.o" => + [ + "include", + ], + "test/ectest.o" => + [ + "include", + ], + "test/enginetest.o" => + [ + "include", + ], + "test/errtest.o" => + [ + "include", + ], + "test/evp_extra_test.o" => + [ + "include", + ], + "test/evp_test.o" => + [ + "include", + ], + "test/exdatatest.o" => + [ + "include", + ], + "test/exptest.o" => + [ + "include", + ], + "test/fatalerrtest.o" => + [ + "include", + ], + "test/gmdifftest.o" => + [ + "include", + ], + "test/gosttest.o" => + [ + "include", + ".", + ], + "test/handshake_helper.o" => + [ + ".", + "include", + ], + "test/hmactest.o" => + [ + "include", + ], + "test/ideatest.o" => + [ + "include", + ], + "test/igetest.o" => + [ + "include", + ], + "test/lhash_test.o" => + [ + "include", + ], + "test/md2test.o" => + [ + "include", + ], + "test/mdc2_internal_test.o" => + [ + ".", + "include", + ], + "test/mdc2test.o" => + [ + "include", + ], + "test/memleaktest.o" => + [ + "include", + ], + "test/modes_internal_test.o" => + [ + ".", + "include", + ], + "test/ocspapitest.o" => + [ + "include", + ], + "test/packettest.o" => + [ + "include", + ], + "test/pbelutest.o" => + [ + "include", + ], + "test/pemtest.o" => + [ + "include", + ], + "test/pkey_meth_kdf_test.o" => + [ + "include", + ], + "test/pkey_meth_test.o" => + [ + "include", + ], + "test/poly1305_internal_test.o" => + [ + ".", + "include", + ], + "test/rc2test.o" => + [ + "include", + ], + "test/rc4test.o" => + [ + "include", + ], + "test/rc5test.o" => + [ + "include", + ], + "test/rdrand_sanitytest.o" => + [ + "include", + ], + "test/recordlentest.o" => + [ + "include", + ], + "test/rsa_complex.o" => + [ + "include", + ], + "test/rsa_mp_test.o" => + [ + "include", + ], + "test/rsa_test.o" => + [ + "include", + ], + "test/sanitytest.o" => + [ + "include", + ], + "test/secmemtest.o" => + [ + "include", + ], + "test/servername_test.o" => + [ + "include", + ], + "test/siphash_internal_test.o" => + [ + ".", + "include", + ], + "test/sm2_internal_test.o" => + [ + "include", + ], + "test/sm4_internal_test.o" => + [ + ".", + "include", + ], + "test/srptest.o" => + [ + "include", + ], + "test/ssl_cert_table_internal_test.o" => + [ + ".", + "include", + ], + "test/ssl_ctx_test.o" => + [ + "include", + ], + "test/ssl_test.o" => + [ + "include", + ], + "test/ssl_test_ctx.o" => + [ + "include", + ], + "test/ssl_test_ctx_test.o" => + [ + "include", + ], + "test/sslapitest.o" => + [ + "include", + ".", + ], + "test/sslbuffertest.o" => + [ + "include", + ], + "test/sslcorrupttest.o" => + [ + "include", + ], + "test/ssltest_old.o" => + [ + ".", + "include", + ], + "test/ssltestlib.o" => + [ + ".", + "include", + ], + "test/stack_test.o" => + [ + "include", + ], + "test/sysdefaulttest.o" => + [ + "include", + ], + "test/test_test.o" => + [ + "include", + ], + "test/testutil/basic_output.o" => + [ + "include", + ], + "test/testutil/cb.o" => + [ + "include", + ], + "test/testutil/driver.o" => + [ + "include", + ], + "test/testutil/format_output.o" => + [ + "include", + ], + "test/testutil/main.o" => + [ + "include", + ], + "test/testutil/output_helpers.o" => + [ + "include", + ], + "test/testutil/random.o" => + [ + "include", + ], + "test/testutil/stanza.o" => + [ + "include", + ], + "test/testutil/tap_bio.o" => + [ + "include", + ], + "test/testutil/test_cleanup.o" => + [ + "include", + ], + "test/testutil/tests.o" => + [ + "include", + ], + "test/testutil/testutil_init.o" => + [ + "include", + ], + "test/threadstest.o" => + [ + "include", + ], + "test/time_offset_test.o" => + [ + "include", + ], + "test/tls13ccstest.o" => + [ + "include", + ], + "test/tls13encryptiontest.o" => + [ + ".", + "include", + ], + "test/uitest.o" => + [ + ".", + "include", + "apps", + ], + "test/v3ext.o" => + [ + "include", + ], + "test/v3nametest.o" => + [ + "include", + ], + "test/verify_extra_test.o" => + [ + "include", + ], + "test/versions.o" => + [ + "include", + ], + "test/wpackettest.o" => + [ + "include", + ], + "test/x509_check_cert_pkey_test.o" => + [ + "include", + ], + "test/x509_dup_cert_test.o" => + [ + "include", + ], + "test/x509_internal_test.o" => + [ + ".", + "include", + ], + "test/x509_time_test.o" => + [ + "include", + ], + "test/x509aux.o" => + [ + "include", + ], + }, + "install" => + { + "libraries" => + [ + "libcrypto", + "libssl", + ], + "programs" => + [ + "apps/openssl", + ], + "scripts" => + [ + "apps/CA.pl", + "apps/tsget.pl", + "tools/c_rehash", + ], + }, + "ldadd" => + { + }, + "libraries" => + [ + "apps/libapps.a", + "libcrypto", + "libssl", + "test/libtestutil.a", + ], + "overrides" => + [ + ], + "programs" => + [ + "apps/openssl", + "fuzz/asn1-test", + "fuzz/asn1parse-test", + "fuzz/bignum-test", + "fuzz/bndiv-test", + "fuzz/client-test", + "fuzz/cms-test", + "fuzz/conf-test", + "fuzz/crl-test", + "fuzz/ct-test", + "fuzz/server-test", + "fuzz/x509-test", + "test/aborttest", + "test/afalgtest", + "test/asn1_decode_test", + "test/asn1_encode_test", + "test/asn1_internal_test", + "test/asn1_string_table_test", + "test/asn1_time_test", + "test/asynciotest", + "test/asynctest", + "test/bad_dtls_test", + "test/bftest", + "test/bio_callback_test", + "test/bio_enc_test", + "test/bio_memleak_test", + "test/bioprinttest", + "test/bntest", + "test/buildtest_c_aes", + "test/buildtest_c_asn1", + "test/buildtest_c_asn1t", + "test/buildtest_c_async", + "test/buildtest_c_bio", + "test/buildtest_c_blowfish", + "test/buildtest_c_bn", + "test/buildtest_c_buffer", + "test/buildtest_c_camellia", + "test/buildtest_c_cast", + "test/buildtest_c_cmac", + "test/buildtest_c_cms", + "test/buildtest_c_conf", + "test/buildtest_c_conf_api", + "test/buildtest_c_crypto", + "test/buildtest_c_ct", + "test/buildtest_c_des", + "test/buildtest_c_dh", + "test/buildtest_c_dsa", + "test/buildtest_c_dtls1", + "test/buildtest_c_e_os2", + "test/buildtest_c_ebcdic", + "test/buildtest_c_ec", + "test/buildtest_c_ecdh", + "test/buildtest_c_ecdsa", + "test/buildtest_c_engine", + "test/buildtest_c_evp", + "test/buildtest_c_hmac", + "test/buildtest_c_idea", + "test/buildtest_c_kdf", + "test/buildtest_c_lhash", + "test/buildtest_c_md4", + "test/buildtest_c_md5", + "test/buildtest_c_mdc2", + "test/buildtest_c_modes", + "test/buildtest_c_obj_mac", + "test/buildtest_c_objects", + "test/buildtest_c_ocsp", + "test/buildtest_c_opensslv", + "test/buildtest_c_ossl_typ", + "test/buildtest_c_pem", + "test/buildtest_c_pem2", + "test/buildtest_c_pkcs12", + "test/buildtest_c_pkcs7", + "test/buildtest_c_rand", + "test/buildtest_c_rand_drbg", + "test/buildtest_c_rc2", + "test/buildtest_c_rc4", + "test/buildtest_c_ripemd", + "test/buildtest_c_rsa", + "test/buildtest_c_safestack", + "test/buildtest_c_seed", + "test/buildtest_c_sha", + "test/buildtest_c_srp", + "test/buildtest_c_srtp", + "test/buildtest_c_ssl", + "test/buildtest_c_ssl2", + "test/buildtest_c_stack", + "test/buildtest_c_store", + "test/buildtest_c_symhacks", + "test/buildtest_c_tls1", + "test/buildtest_c_ts", + "test/buildtest_c_txt_db", + "test/buildtest_c_ui", + "test/buildtest_c_whrlpool", + "test/buildtest_c_x509", + "test/buildtest_c_x509_vfy", + "test/buildtest_c_x509v3", + "test/casttest", + "test/chacha_internal_test", + "test/cipher_overhead_test", + "test/cipherbytes_test", + "test/cipherlist_test", + "test/ciphername_test", + "test/clienthellotest", + "test/cmactest", + "test/cmsapitest", + "test/conf_include_test", + "test/constant_time_test", + "test/crltest", + "test/ct_test", + "test/ctype_internal_test", + "test/curve448_internal_test", + "test/d2i_test", + "test/danetest", + "test/destest", + "test/dhtest", + "test/drbg_cavs_test", + "test/drbgtest", + "test/dsa_no_digest_size_test", + "test/dsatest", + "test/dtls_mtu_test", + "test/dtlstest", + "test/dtlsv1listentest", + "test/ec_internal_test", + "test/ecdsatest", + "test/ecstresstest", + "test/ectest", + "test/enginetest", + "test/errtest", + "test/evp_extra_test", + "test/evp_test", + "test/exdatatest", + "test/exptest", + "test/fatalerrtest", + "test/gmdifftest", + "test/gosttest", + "test/hmactest", + "test/ideatest", + "test/igetest", + "test/lhash_test", + "test/md2test", + "test/mdc2_internal_test", + "test/mdc2test", + "test/memleaktest", + "test/modes_internal_test", + "test/ocspapitest", + "test/packettest", + "test/pbelutest", + "test/pemtest", + "test/pkey_meth_kdf_test", + "test/pkey_meth_test", + "test/poly1305_internal_test", + "test/rc2test", + "test/rc4test", + "test/rc5test", + "test/rdrand_sanitytest", + "test/recordlentest", + "test/rsa_complex", + "test/rsa_mp_test", + "test/rsa_test", + "test/sanitytest", + "test/secmemtest", + "test/servername_test", + "test/siphash_internal_test", + "test/sm2_internal_test", + "test/sm4_internal_test", + "test/srptest", + "test/ssl_cert_table_internal_test", + "test/ssl_ctx_test", + "test/ssl_test", + "test/ssl_test_ctx_test", + "test/sslapitest", + "test/sslbuffertest", + "test/sslcorrupttest", + "test/ssltest_old", + "test/stack_test", + "test/sysdefaulttest", + "test/test_test", + "test/threadstest", + "test/time_offset_test", + "test/tls13ccstest", + "test/tls13encryptiontest", + "test/uitest", + "test/v3ext", + "test/v3nametest", + "test/verify_extra_test", + "test/versions", + "test/wpackettest", + "test/x509_check_cert_pkey_test", + "test/x509_dup_cert_test", + "test/x509_internal_test", + "test/x509_time_test", + "test/x509aux", + ], + "rawlines" => + [ + "##### SHA assembler implementations", + "", + "# GNU make \"catch all\"", + "crypto/sha/sha1-%.S: crypto/sha/asm/sha1-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/sha/sha256-%.S: crypto/sha/asm/sha512-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/sha/sha512-%.S: crypto/sha/asm/sha512-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/poly1305/poly1305-%.S: crypto/poly1305/asm/poly1305-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "##### AES assembler implementations", + "", + "# GNU make \"catch all\"", + "crypto/aes/aes-%.S: crypto/aes/asm/aes-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/aes/bsaes-%.S: crypto/aes/asm/bsaes-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "", + "# GNU make \"catch all\"", + "crypto/rc4/rc4-%.s: crypto/rc4/asm/rc4-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "##### CHACHA assembler implementations", + "", + "crypto/chacha/chacha-%.S: crypto/chacha/asm/chacha-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "# GNU make \"catch all\"", + "crypto/modes/ghash-%.S: crypto/modes/asm/ghash-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + "crypto/ec/ecp_nistz256-%.S: crypto/ec/asm/ecp_nistz256-%.pl", + " CC=\"\$(CC)\" \$(PERL) \$< \$(PERLASM_SCHEME) \$\@", + ], + "rename" => + { + }, + "scripts" => + [ + "apps/CA.pl", + "apps/tsget.pl", + "tools/c_rehash", + "util/shlib_wrap.sh", + ], + "shared_sources" => + { + }, + "sources" => + { + "apps/CA.pl" => + [ + "apps/CA.pl.in", + ], + "apps/app_rand.o" => + [ + "apps/app_rand.c", + ], + "apps/apps.o" => + [ + "apps/apps.c", + ], + "apps/asn1pars.o" => + [ + "apps/asn1pars.c", + ], + "apps/bf_prefix.o" => + [ + "apps/bf_prefix.c", + ], + "apps/ca.o" => + [ + "apps/ca.c", + ], + "apps/ciphers.o" => + [ + "apps/ciphers.c", + ], + "apps/cms.o" => + [ + "apps/cms.c", + ], + "apps/crl.o" => + [ + "apps/crl.c", + ], + "apps/crl2p7.o" => + [ + "apps/crl2p7.c", + ], + "apps/dgst.o" => + [ + "apps/dgst.c", + ], + "apps/dhparam.o" => + [ + "apps/dhparam.c", + ], + "apps/dsa.o" => + [ + "apps/dsa.c", + ], + "apps/dsaparam.o" => + [ + "apps/dsaparam.c", + ], + "apps/ec.o" => + [ + "apps/ec.c", + ], + "apps/ecparam.o" => + [ + "apps/ecparam.c", + ], + "apps/enc.o" => + [ + "apps/enc.c", + ], + "apps/engine.o" => + [ + "apps/engine.c", + ], + "apps/errstr.o" => + [ + "apps/errstr.c", + ], + "apps/gendsa.o" => + [ + "apps/gendsa.c", + ], + "apps/genpkey.o" => + [ + "apps/genpkey.c", + ], + "apps/genrsa.o" => + [ + "apps/genrsa.c", + ], + "apps/libapps.a" => + [ + "apps/app_rand.o", + "apps/apps.o", + "apps/bf_prefix.o", + "apps/opt.o", + "apps/s_cb.o", + "apps/s_socket.o", + ], + "apps/nseq.o" => + [ + "apps/nseq.c", + ], + "apps/ocsp.o" => + [ + "apps/ocsp.c", + ], + "apps/openssl" => + [ + "apps/asn1pars.o", + "apps/ca.o", + "apps/ciphers.o", + "apps/cms.o", + "apps/crl.o", + "apps/crl2p7.o", + "apps/dgst.o", + "apps/dhparam.o", + "apps/dsa.o", + "apps/dsaparam.o", + "apps/ec.o", + "apps/ecparam.o", + "apps/enc.o", + "apps/engine.o", + "apps/errstr.o", + "apps/gendsa.o", + "apps/genpkey.o", + "apps/genrsa.o", + "apps/nseq.o", + "apps/ocsp.o", + "apps/openssl.o", + "apps/passwd.o", + "apps/pkcs12.o", + "apps/pkcs7.o", + "apps/pkcs8.o", + "apps/pkey.o", + "apps/pkeyparam.o", + "apps/pkeyutl.o", + "apps/prime.o", + "apps/rand.o", + "apps/rehash.o", + "apps/req.o", + "apps/rsa.o", + "apps/rsautl.o", + "apps/s_client.o", + "apps/s_server.o", + "apps/s_time.o", + "apps/sess_id.o", + "apps/smime.o", + "apps/speed.o", + "apps/spkac.o", + "apps/srp.o", + "apps/storeutl.o", + "apps/ts.o", + "apps/verify.o", + "apps/version.o", + "apps/x509.o", + ], + "apps/openssl.o" => + [ + "apps/openssl.c", + ], + "apps/opt.o" => + [ + "apps/opt.c", + ], + "apps/passwd.o" => + [ + "apps/passwd.c", + ], + "apps/pkcs12.o" => + [ + "apps/pkcs12.c", + ], + "apps/pkcs7.o" => + [ + "apps/pkcs7.c", + ], + "apps/pkcs8.o" => + [ + "apps/pkcs8.c", + ], + "apps/pkey.o" => + [ + "apps/pkey.c", + ], + "apps/pkeyparam.o" => + [ + "apps/pkeyparam.c", + ], + "apps/pkeyutl.o" => + [ + "apps/pkeyutl.c", + ], + "apps/prime.o" => + [ + "apps/prime.c", + ], + "apps/rand.o" => + [ + "apps/rand.c", + ], + "apps/rehash.o" => + [ + "apps/rehash.c", + ], + "apps/req.o" => + [ + "apps/req.c", + ], + "apps/rsa.o" => + [ + "apps/rsa.c", + ], + "apps/rsautl.o" => + [ + "apps/rsautl.c", + ], + "apps/s_cb.o" => + [ + "apps/s_cb.c", + ], + "apps/s_client.o" => + [ + "apps/s_client.c", + ], + "apps/s_server.o" => + [ + "apps/s_server.c", + ], + "apps/s_socket.o" => + [ + "apps/s_socket.c", + ], + "apps/s_time.o" => + [ + "apps/s_time.c", + ], + "apps/sess_id.o" => + [ + "apps/sess_id.c", + ], + "apps/smime.o" => + [ + "apps/smime.c", + ], + "apps/speed.o" => + [ + "apps/speed.c", + ], + "apps/spkac.o" => + [ + "apps/spkac.c", + ], + "apps/srp.o" => + [ + "apps/srp.c", + ], + "apps/storeutl.o" => + [ + "apps/storeutl.c", + ], + "apps/ts.o" => + [ + "apps/ts.c", + ], + "apps/tsget.pl" => + [ + "apps/tsget.in", + ], + "apps/verify.o" => + [ + "apps/verify.c", + ], + "apps/version.o" => + [ + "apps/version.c", + ], + "apps/x509.o" => + [ + "apps/x509.c", + ], + "crypto/aes/aes_cbc.o" => + [ + "crypto/aes/aes_cbc.c", + ], + "crypto/aes/aes_cfb.o" => + [ + "crypto/aes/aes_cfb.c", + ], + "crypto/aes/aes_core.o" => + [ + "crypto/aes/aes_core.c", + ], + "crypto/aes/aes_ecb.o" => + [ + "crypto/aes/aes_ecb.c", + ], + "crypto/aes/aes_ige.o" => + [ + "crypto/aes/aes_ige.c", + ], + "crypto/aes/aes_misc.o" => + [ + "crypto/aes/aes_misc.c", + ], + "crypto/aes/aes_ofb.o" => + [ + "crypto/aes/aes_ofb.c", + ], + "crypto/aes/aes_wrap.o" => + [ + "crypto/aes/aes_wrap.c", + ], + "crypto/aria/aria.o" => + [ + "crypto/aria/aria.c", + ], + "crypto/asn1/a_bitstr.o" => + [ + "crypto/asn1/a_bitstr.c", + ], + "crypto/asn1/a_d2i_fp.o" => + [ + "crypto/asn1/a_d2i_fp.c", + ], + "crypto/asn1/a_digest.o" => + [ + "crypto/asn1/a_digest.c", + ], + "crypto/asn1/a_dup.o" => + [ + "crypto/asn1/a_dup.c", + ], + "crypto/asn1/a_gentm.o" => + [ + "crypto/asn1/a_gentm.c", + ], + "crypto/asn1/a_i2d_fp.o" => + [ + "crypto/asn1/a_i2d_fp.c", + ], + "crypto/asn1/a_int.o" => + [ + "crypto/asn1/a_int.c", + ], + "crypto/asn1/a_mbstr.o" => + [ + "crypto/asn1/a_mbstr.c", + ], + "crypto/asn1/a_object.o" => + [ + "crypto/asn1/a_object.c", + ], + "crypto/asn1/a_octet.o" => + [ + "crypto/asn1/a_octet.c", + ], + "crypto/asn1/a_print.o" => + [ + "crypto/asn1/a_print.c", + ], + "crypto/asn1/a_sign.o" => + [ + "crypto/asn1/a_sign.c", + ], + "crypto/asn1/a_strex.o" => + [ + "crypto/asn1/a_strex.c", + ], + "crypto/asn1/a_strnid.o" => + [ + "crypto/asn1/a_strnid.c", + ], + "crypto/asn1/a_time.o" => + [ + "crypto/asn1/a_time.c", + ], + "crypto/asn1/a_type.o" => + [ + "crypto/asn1/a_type.c", + ], + "crypto/asn1/a_utctm.o" => + [ + "crypto/asn1/a_utctm.c", + ], + "crypto/asn1/a_utf8.o" => + [ + "crypto/asn1/a_utf8.c", + ], + "crypto/asn1/a_verify.o" => + [ + "crypto/asn1/a_verify.c", + ], + "crypto/asn1/ameth_lib.o" => + [ + "crypto/asn1/ameth_lib.c", + ], + "crypto/asn1/asn1_err.o" => + [ + "crypto/asn1/asn1_err.c", + ], + "crypto/asn1/asn1_gen.o" => + [ + "crypto/asn1/asn1_gen.c", + ], + "crypto/asn1/asn1_item_list.o" => + [ + "crypto/asn1/asn1_item_list.c", + ], + "crypto/asn1/asn1_lib.o" => + [ + "crypto/asn1/asn1_lib.c", + ], + "crypto/asn1/asn1_par.o" => + [ + "crypto/asn1/asn1_par.c", + ], + "crypto/asn1/asn_mime.o" => + [ + "crypto/asn1/asn_mime.c", + ], + "crypto/asn1/asn_moid.o" => + [ + "crypto/asn1/asn_moid.c", + ], + "crypto/asn1/asn_mstbl.o" => + [ + "crypto/asn1/asn_mstbl.c", + ], + "crypto/asn1/asn_pack.o" => + [ + "crypto/asn1/asn_pack.c", + ], + "crypto/asn1/bio_asn1.o" => + [ + "crypto/asn1/bio_asn1.c", + ], + "crypto/asn1/bio_ndef.o" => + [ + "crypto/asn1/bio_ndef.c", + ], + "crypto/asn1/d2i_pr.o" => + [ + "crypto/asn1/d2i_pr.c", + ], + "crypto/asn1/d2i_pu.o" => + [ + "crypto/asn1/d2i_pu.c", + ], + "crypto/asn1/evp_asn1.o" => + [ + "crypto/asn1/evp_asn1.c", + ], + "crypto/asn1/f_int.o" => + [ + "crypto/asn1/f_int.c", + ], + "crypto/asn1/f_string.o" => + [ + "crypto/asn1/f_string.c", + ], + "crypto/asn1/i2d_pr.o" => + [ + "crypto/asn1/i2d_pr.c", + ], + "crypto/asn1/i2d_pu.o" => + [ + "crypto/asn1/i2d_pu.c", + ], + "crypto/asn1/n_pkey.o" => + [ + "crypto/asn1/n_pkey.c", + ], + "crypto/asn1/nsseq.o" => + [ + "crypto/asn1/nsseq.c", + ], + "crypto/asn1/p5_pbe.o" => + [ + "crypto/asn1/p5_pbe.c", + ], + "crypto/asn1/p5_pbev2.o" => + [ + "crypto/asn1/p5_pbev2.c", + ], + "crypto/asn1/p5_scrypt.o" => + [ + "crypto/asn1/p5_scrypt.c", + ], + "crypto/asn1/p8_pkey.o" => + [ + "crypto/asn1/p8_pkey.c", + ], + "crypto/asn1/t_bitst.o" => + [ + "crypto/asn1/t_bitst.c", + ], + "crypto/asn1/t_pkey.o" => + [ + "crypto/asn1/t_pkey.c", + ], + "crypto/asn1/t_spki.o" => + [ + "crypto/asn1/t_spki.c", + ], + "crypto/asn1/tasn_dec.o" => + [ + "crypto/asn1/tasn_dec.c", + ], + "crypto/asn1/tasn_enc.o" => + [ + "crypto/asn1/tasn_enc.c", + ], + "crypto/asn1/tasn_fre.o" => + [ + "crypto/asn1/tasn_fre.c", + ], + "crypto/asn1/tasn_new.o" => + [ + "crypto/asn1/tasn_new.c", + ], + "crypto/asn1/tasn_prn.o" => + [ + "crypto/asn1/tasn_prn.c", + ], + "crypto/asn1/tasn_scn.o" => + [ + "crypto/asn1/tasn_scn.c", + ], + "crypto/asn1/tasn_typ.o" => + [ + "crypto/asn1/tasn_typ.c", + ], + "crypto/asn1/tasn_utl.o" => + [ + "crypto/asn1/tasn_utl.c", + ], + "crypto/asn1/x_algor.o" => + [ + "crypto/asn1/x_algor.c", + ], + "crypto/asn1/x_bignum.o" => + [ + "crypto/asn1/x_bignum.c", + ], + "crypto/asn1/x_info.o" => + [ + "crypto/asn1/x_info.c", + ], + "crypto/asn1/x_int64.o" => + [ + "crypto/asn1/x_int64.c", + ], + "crypto/asn1/x_long.o" => + [ + "crypto/asn1/x_long.c", + ], + "crypto/asn1/x_pkey.o" => + [ + "crypto/asn1/x_pkey.c", + ], + "crypto/asn1/x_sig.o" => + [ + "crypto/asn1/x_sig.c", + ], + "crypto/asn1/x_spki.o" => + [ + "crypto/asn1/x_spki.c", + ], + "crypto/asn1/x_val.o" => + [ + "crypto/asn1/x_val.c", + ], + "crypto/async/arch/async_null.o" => + [ + "crypto/async/arch/async_null.c", + ], + "crypto/async/arch/async_posix.o" => + [ + "crypto/async/arch/async_posix.c", + ], + "crypto/async/arch/async_win.o" => + [ + "crypto/async/arch/async_win.c", + ], + "crypto/async/async.o" => + [ + "crypto/async/async.c", + ], + "crypto/async/async_err.o" => + [ + "crypto/async/async_err.c", + ], + "crypto/async/async_wait.o" => + [ + "crypto/async/async_wait.c", + ], + "crypto/bf/bf_cfb64.o" => + [ + "crypto/bf/bf_cfb64.c", + ], + "crypto/bf/bf_ecb.o" => + [ + "crypto/bf/bf_ecb.c", + ], + "crypto/bf/bf_enc.o" => + [ + "crypto/bf/bf_enc.c", + ], + "crypto/bf/bf_ofb64.o" => + [ + "crypto/bf/bf_ofb64.c", + ], + "crypto/bf/bf_skey.o" => + [ + "crypto/bf/bf_skey.c", + ], + "crypto/bio/b_addr.o" => + [ + "crypto/bio/b_addr.c", + ], + "crypto/bio/b_dump.o" => + [ + "crypto/bio/b_dump.c", + ], + "crypto/bio/b_print.o" => + [ + "crypto/bio/b_print.c", + ], + "crypto/bio/b_sock.o" => + [ + "crypto/bio/b_sock.c", + ], + "crypto/bio/b_sock2.o" => + [ + "crypto/bio/b_sock2.c", + ], + "crypto/bio/bf_buff.o" => + [ + "crypto/bio/bf_buff.c", + ], + "crypto/bio/bf_lbuf.o" => + [ + "crypto/bio/bf_lbuf.c", + ], + "crypto/bio/bf_nbio.o" => + [ + "crypto/bio/bf_nbio.c", + ], + "crypto/bio/bf_null.o" => + [ + "crypto/bio/bf_null.c", + ], + "crypto/bio/bio_cb.o" => + [ + "crypto/bio/bio_cb.c", + ], + "crypto/bio/bio_err.o" => + [ + "crypto/bio/bio_err.c", + ], + "crypto/bio/bio_lib.o" => + [ + "crypto/bio/bio_lib.c", + ], + "crypto/bio/bio_meth.o" => + [ + "crypto/bio/bio_meth.c", + ], + "crypto/bio/bss_acpt.o" => + [ + "crypto/bio/bss_acpt.c", + ], + "crypto/bio/bss_bio.o" => + [ + "crypto/bio/bss_bio.c", + ], + "crypto/bio/bss_conn.o" => + [ + "crypto/bio/bss_conn.c", + ], + "crypto/bio/bss_dgram.o" => + [ + "crypto/bio/bss_dgram.c", + ], + "crypto/bio/bss_fd.o" => + [ + "crypto/bio/bss_fd.c", + ], + "crypto/bio/bss_file.o" => + [ + "crypto/bio/bss_file.c", + ], + "crypto/bio/bss_log.o" => + [ + "crypto/bio/bss_log.c", + ], + "crypto/bio/bss_mem.o" => + [ + "crypto/bio/bss_mem.c", + ], + "crypto/bio/bss_null.o" => + [ + "crypto/bio/bss_null.c", + ], + "crypto/bio/bss_sock.o" => + [ + "crypto/bio/bss_sock.c", + ], + "crypto/blake2/blake2b.o" => + [ + "crypto/blake2/blake2b.c", + ], + "crypto/blake2/blake2s.o" => + [ + "crypto/blake2/blake2s.c", + ], + "crypto/blake2/m_blake2b.o" => + [ + "crypto/blake2/m_blake2b.c", + ], + "crypto/blake2/m_blake2s.o" => + [ + "crypto/blake2/m_blake2s.c", + ], + "crypto/bn/bn_add.o" => + [ + "crypto/bn/bn_add.c", + ], + "crypto/bn/bn_asm.o" => + [ + "crypto/bn/bn_asm.c", + ], + "crypto/bn/bn_blind.o" => + [ + "crypto/bn/bn_blind.c", + ], + "crypto/bn/bn_const.o" => + [ + "crypto/bn/bn_const.c", + ], + "crypto/bn/bn_ctx.o" => + [ + "crypto/bn/bn_ctx.c", + ], + "crypto/bn/bn_depr.o" => + [ + "crypto/bn/bn_depr.c", + ], + "crypto/bn/bn_dh.o" => + [ + "crypto/bn/bn_dh.c", + ], + "crypto/bn/bn_div.o" => + [ + "crypto/bn/bn_div.c", + ], + "crypto/bn/bn_err.o" => + [ + "crypto/bn/bn_err.c", + ], + "crypto/bn/bn_exp.o" => + [ + "crypto/bn/bn_exp.c", + ], + "crypto/bn/bn_exp2.o" => + [ + "crypto/bn/bn_exp2.c", + ], + "crypto/bn/bn_gcd.o" => + [ + "crypto/bn/bn_gcd.c", + ], + "crypto/bn/bn_gf2m.o" => + [ + "crypto/bn/bn_gf2m.c", + ], + "crypto/bn/bn_intern.o" => + [ + "crypto/bn/bn_intern.c", + ], + "crypto/bn/bn_kron.o" => + [ + "crypto/bn/bn_kron.c", + ], + "crypto/bn/bn_lib.o" => + [ + "crypto/bn/bn_lib.c", + ], + "crypto/bn/bn_mod.o" => + [ + "crypto/bn/bn_mod.c", + ], + "crypto/bn/bn_mont.o" => + [ + "crypto/bn/bn_mont.c", + ], + "crypto/bn/bn_mpi.o" => + [ + "crypto/bn/bn_mpi.c", + ], + "crypto/bn/bn_mul.o" => + [ + "crypto/bn/bn_mul.c", + ], + "crypto/bn/bn_nist.o" => + [ + "crypto/bn/bn_nist.c", + ], + "crypto/bn/bn_prime.o" => + [ + "crypto/bn/bn_prime.c", + ], + "crypto/bn/bn_print.o" => + [ + "crypto/bn/bn_print.c", + ], + "crypto/bn/bn_rand.o" => + [ + "crypto/bn/bn_rand.c", + ], + "crypto/bn/bn_recp.o" => + [ + "crypto/bn/bn_recp.c", + ], + "crypto/bn/bn_shift.o" => + [ + "crypto/bn/bn_shift.c", + ], + "crypto/bn/bn_sqr.o" => + [ + "crypto/bn/bn_sqr.c", + ], + "crypto/bn/bn_sqrt.o" => + [ + "crypto/bn/bn_sqrt.c", + ], + "crypto/bn/bn_srp.o" => + [ + "crypto/bn/bn_srp.c", + ], + "crypto/bn/bn_word.o" => + [ + "crypto/bn/bn_word.c", + ], + "crypto/bn/bn_x931p.o" => + [ + "crypto/bn/bn_x931p.c", + ], + "crypto/buffer/buf_err.o" => + [ + "crypto/buffer/buf_err.c", + ], + "crypto/buffer/buffer.o" => + [ + "crypto/buffer/buffer.c", + ], + "crypto/camellia/camellia.o" => + [ + "crypto/camellia/camellia.c", + ], + "crypto/camellia/cmll_cbc.o" => + [ + "crypto/camellia/cmll_cbc.c", + ], + "crypto/camellia/cmll_cfb.o" => + [ + "crypto/camellia/cmll_cfb.c", + ], + "crypto/camellia/cmll_ctr.o" => + [ + "crypto/camellia/cmll_ctr.c", + ], + "crypto/camellia/cmll_ecb.o" => + [ + "crypto/camellia/cmll_ecb.c", + ], + "crypto/camellia/cmll_misc.o" => + [ + "crypto/camellia/cmll_misc.c", + ], + "crypto/camellia/cmll_ofb.o" => + [ + "crypto/camellia/cmll_ofb.c", + ], + "crypto/cast/c_cfb64.o" => + [ + "crypto/cast/c_cfb64.c", + ], + "crypto/cast/c_ecb.o" => + [ + "crypto/cast/c_ecb.c", + ], + "crypto/cast/c_enc.o" => + [ + "crypto/cast/c_enc.c", + ], + "crypto/cast/c_ofb64.o" => + [ + "crypto/cast/c_ofb64.c", + ], + "crypto/cast/c_skey.o" => + [ + "crypto/cast/c_skey.c", + ], + "crypto/chacha/chacha_enc.o" => + [ + "crypto/chacha/chacha_enc.c", + ], + "crypto/cmac/cm_ameth.o" => + [ + "crypto/cmac/cm_ameth.c", + ], + "crypto/cmac/cm_pmeth.o" => + [ + "crypto/cmac/cm_pmeth.c", + ], + "crypto/cmac/cmac.o" => + [ + "crypto/cmac/cmac.c", + ], + "crypto/cms/cms_asn1.o" => + [ + "crypto/cms/cms_asn1.c", + ], + "crypto/cms/cms_att.o" => + [ + "crypto/cms/cms_att.c", + ], + "crypto/cms/cms_cd.o" => + [ + "crypto/cms/cms_cd.c", + ], + "crypto/cms/cms_dd.o" => + [ + "crypto/cms/cms_dd.c", + ], + "crypto/cms/cms_enc.o" => + [ + "crypto/cms/cms_enc.c", + ], + "crypto/cms/cms_env.o" => + [ + "crypto/cms/cms_env.c", + ], + "crypto/cms/cms_err.o" => + [ + "crypto/cms/cms_err.c", + ], + "crypto/cms/cms_ess.o" => + [ + "crypto/cms/cms_ess.c", + ], + "crypto/cms/cms_io.o" => + [ + "crypto/cms/cms_io.c", + ], + "crypto/cms/cms_kari.o" => + [ + "crypto/cms/cms_kari.c", + ], + "crypto/cms/cms_lib.o" => + [ + "crypto/cms/cms_lib.c", + ], + "crypto/cms/cms_pwri.o" => + [ + "crypto/cms/cms_pwri.c", + ], + "crypto/cms/cms_sd.o" => + [ + "crypto/cms/cms_sd.c", + ], + "crypto/cms/cms_smime.o" => + [ + "crypto/cms/cms_smime.c", + ], + "crypto/conf/conf_api.o" => + [ + "crypto/conf/conf_api.c", + ], + "crypto/conf/conf_def.o" => + [ + "crypto/conf/conf_def.c", + ], + "crypto/conf/conf_err.o" => + [ + "crypto/conf/conf_err.c", + ], + "crypto/conf/conf_lib.o" => + [ + "crypto/conf/conf_lib.c", + ], + "crypto/conf/conf_mall.o" => + [ + "crypto/conf/conf_mall.c", + ], + "crypto/conf/conf_mod.o" => + [ + "crypto/conf/conf_mod.c", + ], + "crypto/conf/conf_sap.o" => + [ + "crypto/conf/conf_sap.c", + ], + "crypto/conf/conf_ssl.o" => + [ + "crypto/conf/conf_ssl.c", + ], + "crypto/cpt_err.o" => + [ + "crypto/cpt_err.c", + ], + "crypto/cryptlib.o" => + [ + "crypto/cryptlib.c", + ], + "crypto/ct/ct_b64.o" => + [ + "crypto/ct/ct_b64.c", + ], + "crypto/ct/ct_err.o" => + [ + "crypto/ct/ct_err.c", + ], + "crypto/ct/ct_log.o" => + [ + "crypto/ct/ct_log.c", + ], + "crypto/ct/ct_oct.o" => + [ + "crypto/ct/ct_oct.c", + ], + "crypto/ct/ct_policy.o" => + [ + "crypto/ct/ct_policy.c", + ], + "crypto/ct/ct_prn.o" => + [ + "crypto/ct/ct_prn.c", + ], + "crypto/ct/ct_sct.o" => + [ + "crypto/ct/ct_sct.c", + ], + "crypto/ct/ct_sct_ctx.o" => + [ + "crypto/ct/ct_sct_ctx.c", + ], + "crypto/ct/ct_vfy.o" => + [ + "crypto/ct/ct_vfy.c", + ], + "crypto/ct/ct_x509v3.o" => + [ + "crypto/ct/ct_x509v3.c", + ], + "crypto/ctype.o" => + [ + "crypto/ctype.c", + ], + "crypto/cversion.o" => + [ + "crypto/cversion.c", + ], + "crypto/des/cbc_cksm.o" => + [ + "crypto/des/cbc_cksm.c", + ], + "crypto/des/cbc_enc.o" => + [ + "crypto/des/cbc_enc.c", + ], + "crypto/des/cfb64ede.o" => + [ + "crypto/des/cfb64ede.c", + ], + "crypto/des/cfb64enc.o" => + [ + "crypto/des/cfb64enc.c", + ], + "crypto/des/cfb_enc.o" => + [ + "crypto/des/cfb_enc.c", + ], + "crypto/des/des_enc.o" => + [ + "crypto/des/des_enc.c", + ], + "crypto/des/ecb3_enc.o" => + [ + "crypto/des/ecb3_enc.c", + ], + "crypto/des/ecb_enc.o" => + [ + "crypto/des/ecb_enc.c", + ], + "crypto/des/fcrypt.o" => + [ + "crypto/des/fcrypt.c", + ], + "crypto/des/fcrypt_b.o" => + [ + "crypto/des/fcrypt_b.c", + ], + "crypto/des/ofb64ede.o" => + [ + "crypto/des/ofb64ede.c", + ], + "crypto/des/ofb64enc.o" => + [ + "crypto/des/ofb64enc.c", + ], + "crypto/des/ofb_enc.o" => + [ + "crypto/des/ofb_enc.c", + ], + "crypto/des/pcbc_enc.o" => + [ + "crypto/des/pcbc_enc.c", + ], + "crypto/des/qud_cksm.o" => + [ + "crypto/des/qud_cksm.c", + ], + "crypto/des/rand_key.o" => + [ + "crypto/des/rand_key.c", + ], + "crypto/des/set_key.o" => + [ + "crypto/des/set_key.c", + ], + "crypto/des/str2key.o" => + [ + "crypto/des/str2key.c", + ], + "crypto/des/xcbc_enc.o" => + [ + "crypto/des/xcbc_enc.c", + ], + "crypto/dh/dh_ameth.o" => + [ + "crypto/dh/dh_ameth.c", + ], + "crypto/dh/dh_asn1.o" => + [ + "crypto/dh/dh_asn1.c", + ], + "crypto/dh/dh_check.o" => + [ + "crypto/dh/dh_check.c", + ], + "crypto/dh/dh_depr.o" => + [ + "crypto/dh/dh_depr.c", + ], + "crypto/dh/dh_err.o" => + [ + "crypto/dh/dh_err.c", + ], + "crypto/dh/dh_gen.o" => + [ + "crypto/dh/dh_gen.c", + ], + "crypto/dh/dh_kdf.o" => + [ + "crypto/dh/dh_kdf.c", + ], + "crypto/dh/dh_key.o" => + [ + "crypto/dh/dh_key.c", + ], + "crypto/dh/dh_lib.o" => + [ + "crypto/dh/dh_lib.c", + ], + "crypto/dh/dh_meth.o" => + [ + "crypto/dh/dh_meth.c", + ], + "crypto/dh/dh_pmeth.o" => + [ + "crypto/dh/dh_pmeth.c", + ], + "crypto/dh/dh_prn.o" => + [ + "crypto/dh/dh_prn.c", + ], + "crypto/dh/dh_rfc5114.o" => + [ + "crypto/dh/dh_rfc5114.c", + ], + "crypto/dh/dh_rfc7919.o" => + [ + "crypto/dh/dh_rfc7919.c", + ], + "crypto/dsa/dsa_ameth.o" => + [ + "crypto/dsa/dsa_ameth.c", + ], + "crypto/dsa/dsa_asn1.o" => + [ + "crypto/dsa/dsa_asn1.c", + ], + "crypto/dsa/dsa_depr.o" => + [ + "crypto/dsa/dsa_depr.c", + ], + "crypto/dsa/dsa_err.o" => + [ + "crypto/dsa/dsa_err.c", + ], + "crypto/dsa/dsa_gen.o" => + [ + "crypto/dsa/dsa_gen.c", + ], + "crypto/dsa/dsa_key.o" => + [ + "crypto/dsa/dsa_key.c", + ], + "crypto/dsa/dsa_lib.o" => + [ + "crypto/dsa/dsa_lib.c", + ], + "crypto/dsa/dsa_meth.o" => + [ + "crypto/dsa/dsa_meth.c", + ], + "crypto/dsa/dsa_ossl.o" => + [ + "crypto/dsa/dsa_ossl.c", + ], + "crypto/dsa/dsa_pmeth.o" => + [ + "crypto/dsa/dsa_pmeth.c", + ], + "crypto/dsa/dsa_prn.o" => + [ + "crypto/dsa/dsa_prn.c", + ], + "crypto/dsa/dsa_sign.o" => + [ + "crypto/dsa/dsa_sign.c", + ], + "crypto/dsa/dsa_vrf.o" => + [ + "crypto/dsa/dsa_vrf.c", + ], + "crypto/dso/dso_dl.o" => + [ + "crypto/dso/dso_dl.c", + ], + "crypto/dso/dso_dlfcn.o" => + [ + "crypto/dso/dso_dlfcn.c", + ], + "crypto/dso/dso_err.o" => + [ + "crypto/dso/dso_err.c", + ], + "crypto/dso/dso_lib.o" => + [ + "crypto/dso/dso_lib.c", + ], + "crypto/dso/dso_openssl.o" => + [ + "crypto/dso/dso_openssl.c", + ], + "crypto/dso/dso_vms.o" => + [ + "crypto/dso/dso_vms.c", + ], + "crypto/dso/dso_win32.o" => + [ + "crypto/dso/dso_win32.c", + ], + "crypto/ebcdic.o" => + [ + "crypto/ebcdic.c", + ], + "crypto/ec/curve25519.o" => + [ + "crypto/ec/curve25519.c", + ], + "crypto/ec/curve448/arch_32/f_impl.o" => + [ + "crypto/ec/curve448/arch_32/f_impl.c", + ], + "crypto/ec/curve448/curve448.o" => + [ + "crypto/ec/curve448/curve448.c", + ], + "crypto/ec/curve448/curve448_tables.o" => + [ + "crypto/ec/curve448/curve448_tables.c", + ], + "crypto/ec/curve448/eddsa.o" => + [ + "crypto/ec/curve448/eddsa.c", + ], + "crypto/ec/curve448/f_generic.o" => + [ + "crypto/ec/curve448/f_generic.c", + ], + "crypto/ec/curve448/scalar.o" => + [ + "crypto/ec/curve448/scalar.c", + ], + "crypto/ec/ec2_oct.o" => + [ + "crypto/ec/ec2_oct.c", + ], + "crypto/ec/ec2_smpl.o" => + [ + "crypto/ec/ec2_smpl.c", + ], + "crypto/ec/ec_ameth.o" => + [ + "crypto/ec/ec_ameth.c", + ], + "crypto/ec/ec_asn1.o" => + [ + "crypto/ec/ec_asn1.c", + ], + "crypto/ec/ec_check.o" => + [ + "crypto/ec/ec_check.c", + ], + "crypto/ec/ec_curve.o" => + [ + "crypto/ec/ec_curve.c", + ], + "crypto/ec/ec_cvt.o" => + [ + "crypto/ec/ec_cvt.c", + ], + "crypto/ec/ec_err.o" => + [ + "crypto/ec/ec_err.c", + ], + "crypto/ec/ec_key.o" => + [ + "crypto/ec/ec_key.c", + ], + "crypto/ec/ec_kmeth.o" => + [ + "crypto/ec/ec_kmeth.c", + ], + "crypto/ec/ec_lib.o" => + [ + "crypto/ec/ec_lib.c", + ], + "crypto/ec/ec_mult.o" => + [ + "crypto/ec/ec_mult.c", + ], + "crypto/ec/ec_oct.o" => + [ + "crypto/ec/ec_oct.c", + ], + "crypto/ec/ec_pmeth.o" => + [ + "crypto/ec/ec_pmeth.c", + ], + "crypto/ec/ec_print.o" => + [ + "crypto/ec/ec_print.c", + ], + "crypto/ec/ecdh_kdf.o" => + [ + "crypto/ec/ecdh_kdf.c", + ], + "crypto/ec/ecdh_ossl.o" => + [ + "crypto/ec/ecdh_ossl.c", + ], + "crypto/ec/ecdsa_ossl.o" => + [ + "crypto/ec/ecdsa_ossl.c", + ], + "crypto/ec/ecdsa_sign.o" => + [ + "crypto/ec/ecdsa_sign.c", + ], + "crypto/ec/ecdsa_vrf.o" => + [ + "crypto/ec/ecdsa_vrf.c", + ], + "crypto/ec/eck_prn.o" => + [ + "crypto/ec/eck_prn.c", + ], + "crypto/ec/ecp_mont.o" => + [ + "crypto/ec/ecp_mont.c", + ], + "crypto/ec/ecp_nist.o" => + [ + "crypto/ec/ecp_nist.c", + ], + "crypto/ec/ecp_nistp224.o" => + [ + "crypto/ec/ecp_nistp224.c", + ], + "crypto/ec/ecp_nistp256.o" => + [ + "crypto/ec/ecp_nistp256.c", + ], + "crypto/ec/ecp_nistp521.o" => + [ + "crypto/ec/ecp_nistp521.c", + ], + "crypto/ec/ecp_nistputil.o" => + [ + "crypto/ec/ecp_nistputil.c", + ], + "crypto/ec/ecp_oct.o" => + [ + "crypto/ec/ecp_oct.c", + ], + "crypto/ec/ecp_smpl.o" => + [ + "crypto/ec/ecp_smpl.c", + ], + "crypto/ec/ecx_meth.o" => + [ + "crypto/ec/ecx_meth.c", + ], + "crypto/engine/eng_all.o" => + [ + "crypto/engine/eng_all.c", + ], + "crypto/engine/eng_cnf.o" => + [ + "crypto/engine/eng_cnf.c", + ], + "crypto/engine/eng_ctrl.o" => + [ + "crypto/engine/eng_ctrl.c", + ], + "crypto/engine/eng_dyn.o" => + [ + "crypto/engine/eng_dyn.c", + ], + "crypto/engine/eng_err.o" => + [ + "crypto/engine/eng_err.c", + ], + "crypto/engine/eng_fat.o" => + [ + "crypto/engine/eng_fat.c", + ], + "crypto/engine/eng_init.o" => + [ + "crypto/engine/eng_init.c", + ], + "crypto/engine/eng_lib.o" => + [ + "crypto/engine/eng_lib.c", + ], + "crypto/engine/eng_list.o" => + [ + "crypto/engine/eng_list.c", + ], + "crypto/engine/eng_openssl.o" => + [ + "crypto/engine/eng_openssl.c", + ], + "crypto/engine/eng_pkey.o" => + [ + "crypto/engine/eng_pkey.c", + ], + "crypto/engine/eng_rdrand.o" => + [ + "crypto/engine/eng_rdrand.c", + ], + "crypto/engine/eng_table.o" => + [ + "crypto/engine/eng_table.c", + ], + "crypto/engine/tb_asnmth.o" => + [ + "crypto/engine/tb_asnmth.c", + ], + "crypto/engine/tb_cipher.o" => + [ + "crypto/engine/tb_cipher.c", + ], + "crypto/engine/tb_dh.o" => + [ + "crypto/engine/tb_dh.c", + ], + "crypto/engine/tb_digest.o" => + [ + "crypto/engine/tb_digest.c", + ], + "crypto/engine/tb_dsa.o" => + [ + "crypto/engine/tb_dsa.c", + ], + "crypto/engine/tb_eckey.o" => + [ + "crypto/engine/tb_eckey.c", + ], + "crypto/engine/tb_pkmeth.o" => + [ + "crypto/engine/tb_pkmeth.c", + ], + "crypto/engine/tb_rand.o" => + [ + "crypto/engine/tb_rand.c", + ], + "crypto/engine/tb_rsa.o" => + [ + "crypto/engine/tb_rsa.c", + ], + "crypto/err/err.o" => + [ + "crypto/err/err.c", + ], + "crypto/err/err_all.o" => + [ + "crypto/err/err_all.c", + ], + "crypto/err/err_prn.o" => + [ + "crypto/err/err_prn.c", + ], + "crypto/evp/bio_b64.o" => + [ + "crypto/evp/bio_b64.c", + ], + "crypto/evp/bio_enc.o" => + [ + "crypto/evp/bio_enc.c", + ], + "crypto/evp/bio_md.o" => + [ + "crypto/evp/bio_md.c", + ], + "crypto/evp/bio_ok.o" => + [ + "crypto/evp/bio_ok.c", + ], + "crypto/evp/c_allc.o" => + [ + "crypto/evp/c_allc.c", + ], + "crypto/evp/c_alld.o" => + [ + "crypto/evp/c_alld.c", + ], + "crypto/evp/cmeth_lib.o" => + [ + "crypto/evp/cmeth_lib.c", + ], + "crypto/evp/digest.o" => + [ + "crypto/evp/digest.c", + ], + "crypto/evp/e_aes.o" => + [ + "crypto/evp/e_aes.c", + ], + "crypto/evp/e_aes_cbc_hmac_sha1.o" => + [ + "crypto/evp/e_aes_cbc_hmac_sha1.c", + ], + "crypto/evp/e_aes_cbc_hmac_sha256.o" => + [ + "crypto/evp/e_aes_cbc_hmac_sha256.c", + ], + "crypto/evp/e_aria.o" => + [ + "crypto/evp/e_aria.c", + ], + "crypto/evp/e_bf.o" => + [ + "crypto/evp/e_bf.c", + ], + "crypto/evp/e_camellia.o" => + [ + "crypto/evp/e_camellia.c", + ], + "crypto/evp/e_cast.o" => + [ + "crypto/evp/e_cast.c", + ], + "crypto/evp/e_chacha20_poly1305.o" => + [ + "crypto/evp/e_chacha20_poly1305.c", + ], + "crypto/evp/e_des.o" => + [ + "crypto/evp/e_des.c", + ], + "crypto/evp/e_des3.o" => + [ + "crypto/evp/e_des3.c", + ], + "crypto/evp/e_idea.o" => + [ + "crypto/evp/e_idea.c", + ], + "crypto/evp/e_null.o" => + [ + "crypto/evp/e_null.c", + ], + "crypto/evp/e_old.o" => + [ + "crypto/evp/e_old.c", + ], + "crypto/evp/e_rc2.o" => + [ + "crypto/evp/e_rc2.c", + ], + "crypto/evp/e_rc4.o" => + [ + "crypto/evp/e_rc4.c", + ], + "crypto/evp/e_rc4_hmac_md5.o" => + [ + "crypto/evp/e_rc4_hmac_md5.c", + ], + "crypto/evp/e_rc5.o" => + [ + "crypto/evp/e_rc5.c", + ], + "crypto/evp/e_seed.o" => + [ + "crypto/evp/e_seed.c", + ], + "crypto/evp/e_sm4.o" => + [ + "crypto/evp/e_sm4.c", + ], + "crypto/evp/e_xcbc_d.o" => + [ + "crypto/evp/e_xcbc_d.c", + ], + "crypto/evp/encode.o" => + [ + "crypto/evp/encode.c", + ], + "crypto/evp/evp_cnf.o" => + [ + "crypto/evp/evp_cnf.c", + ], + "crypto/evp/evp_enc.o" => + [ + "crypto/evp/evp_enc.c", + ], + "crypto/evp/evp_err.o" => + [ + "crypto/evp/evp_err.c", + ], + "crypto/evp/evp_key.o" => + [ + "crypto/evp/evp_key.c", + ], + "crypto/evp/evp_lib.o" => + [ + "crypto/evp/evp_lib.c", + ], + "crypto/evp/evp_pbe.o" => + [ + "crypto/evp/evp_pbe.c", + ], + "crypto/evp/evp_pkey.o" => + [ + "crypto/evp/evp_pkey.c", + ], + "crypto/evp/m_md2.o" => + [ + "crypto/evp/m_md2.c", + ], + "crypto/evp/m_md4.o" => + [ + "crypto/evp/m_md4.c", + ], + "crypto/evp/m_md5.o" => + [ + "crypto/evp/m_md5.c", + ], + "crypto/evp/m_md5_sha1.o" => + [ + "crypto/evp/m_md5_sha1.c", + ], + "crypto/evp/m_mdc2.o" => + [ + "crypto/evp/m_mdc2.c", + ], + "crypto/evp/m_null.o" => + [ + "crypto/evp/m_null.c", + ], + "crypto/evp/m_ripemd.o" => + [ + "crypto/evp/m_ripemd.c", + ], + "crypto/evp/m_sha1.o" => + [ + "crypto/evp/m_sha1.c", + ], + "crypto/evp/m_sha3.o" => + [ + "crypto/evp/m_sha3.c", + ], + "crypto/evp/m_sigver.o" => + [ + "crypto/evp/m_sigver.c", + ], + "crypto/evp/m_wp.o" => + [ + "crypto/evp/m_wp.c", + ], + "crypto/evp/names.o" => + [ + "crypto/evp/names.c", + ], + "crypto/evp/p5_crpt.o" => + [ + "crypto/evp/p5_crpt.c", + ], + "crypto/evp/p5_crpt2.o" => + [ + "crypto/evp/p5_crpt2.c", + ], + "crypto/evp/p_dec.o" => + [ + "crypto/evp/p_dec.c", + ], + "crypto/evp/p_enc.o" => + [ + "crypto/evp/p_enc.c", + ], + "crypto/evp/p_lib.o" => + [ + "crypto/evp/p_lib.c", + ], + "crypto/evp/p_open.o" => + [ + "crypto/evp/p_open.c", + ], + "crypto/evp/p_seal.o" => + [ + "crypto/evp/p_seal.c", + ], + "crypto/evp/p_sign.o" => + [ + "crypto/evp/p_sign.c", + ], + "crypto/evp/p_verify.o" => + [ + "crypto/evp/p_verify.c", + ], + "crypto/evp/pbe_scrypt.o" => + [ + "crypto/evp/pbe_scrypt.c", + ], + "crypto/evp/pmeth_fn.o" => + [ + "crypto/evp/pmeth_fn.c", + ], + "crypto/evp/pmeth_gn.o" => + [ + "crypto/evp/pmeth_gn.c", + ], + "crypto/evp/pmeth_lib.o" => + [ + "crypto/evp/pmeth_lib.c", + ], + "crypto/ex_data.o" => + [ + "crypto/ex_data.c", + ], + "crypto/getenv.o" => + [ + "crypto/getenv.c", + ], + "crypto/hmac/hm_ameth.o" => + [ + "crypto/hmac/hm_ameth.c", + ], + "crypto/hmac/hm_pmeth.o" => + [ + "crypto/hmac/hm_pmeth.c", + ], + "crypto/hmac/hmac.o" => + [ + "crypto/hmac/hmac.c", + ], + "crypto/idea/i_cbc.o" => + [ + "crypto/idea/i_cbc.c", + ], + "crypto/idea/i_cfb64.o" => + [ + "crypto/idea/i_cfb64.c", + ], + "crypto/idea/i_ecb.o" => + [ + "crypto/idea/i_ecb.c", + ], + "crypto/idea/i_ofb64.o" => + [ + "crypto/idea/i_ofb64.c", + ], + "crypto/idea/i_skey.o" => + [ + "crypto/idea/i_skey.c", + ], + "crypto/init.o" => + [ + "crypto/init.c", + ], + "crypto/kdf/hkdf.o" => + [ + "crypto/kdf/hkdf.c", + ], + "crypto/kdf/kdf_err.o" => + [ + "crypto/kdf/kdf_err.c", + ], + "crypto/kdf/scrypt.o" => + [ + "crypto/kdf/scrypt.c", + ], + "crypto/kdf/tls1_prf.o" => + [ + "crypto/kdf/tls1_prf.c", + ], + "crypto/lhash/lh_stats.o" => + [ + "crypto/lhash/lh_stats.c", + ], + "crypto/lhash/lhash.o" => + [ + "crypto/lhash/lhash.c", + ], + "crypto/md4/md4_dgst.o" => + [ + "crypto/md4/md4_dgst.c", + ], + "crypto/md4/md4_one.o" => + [ + "crypto/md4/md4_one.c", + ], + "crypto/md5/md5_dgst.o" => + [ + "crypto/md5/md5_dgst.c", + ], + "crypto/md5/md5_one.o" => + [ + "crypto/md5/md5_one.c", + ], + "crypto/mdc2/mdc2_one.o" => + [ + "crypto/mdc2/mdc2_one.c", + ], + "crypto/mdc2/mdc2dgst.o" => + [ + "crypto/mdc2/mdc2dgst.c", + ], + "crypto/mem.o" => + [ + "crypto/mem.c", + ], + "crypto/mem_clr.o" => + [ + "crypto/mem_clr.c", + ], + "crypto/mem_dbg.o" => + [ + "crypto/mem_dbg.c", + ], + "crypto/mem_sec.o" => + [ + "crypto/mem_sec.c", + ], + "crypto/modes/cbc128.o" => + [ + "crypto/modes/cbc128.c", + ], + "crypto/modes/ccm128.o" => + [ + "crypto/modes/ccm128.c", + ], + "crypto/modes/cfb128.o" => + [ + "crypto/modes/cfb128.c", + ], + "crypto/modes/ctr128.o" => + [ + "crypto/modes/ctr128.c", + ], + "crypto/modes/cts128.o" => + [ + "crypto/modes/cts128.c", + ], + "crypto/modes/gcm128.o" => + [ + "crypto/modes/gcm128.c", + ], + "crypto/modes/ocb128.o" => + [ + "crypto/modes/ocb128.c", + ], + "crypto/modes/ofb128.o" => + [ + "crypto/modes/ofb128.c", + ], + "crypto/modes/wrap128.o" => + [ + "crypto/modes/wrap128.c", + ], + "crypto/modes/xts128.o" => + [ + "crypto/modes/xts128.c", + ], + "crypto/o_dir.o" => + [ + "crypto/o_dir.c", + ], + "crypto/o_fips.o" => + [ + "crypto/o_fips.c", + ], + "crypto/o_fopen.o" => + [ + "crypto/o_fopen.c", + ], + "crypto/o_init.o" => + [ + "crypto/o_init.c", + ], + "crypto/o_str.o" => + [ + "crypto/o_str.c", + ], + "crypto/o_time.o" => + [ + "crypto/o_time.c", + ], + "crypto/objects/o_names.o" => + [ + "crypto/objects/o_names.c", + ], + "crypto/objects/obj_dat.o" => + [ + "crypto/objects/obj_dat.c", + ], + "crypto/objects/obj_err.o" => + [ + "crypto/objects/obj_err.c", + ], + "crypto/objects/obj_lib.o" => + [ + "crypto/objects/obj_lib.c", + ], + "crypto/objects/obj_xref.o" => + [ + "crypto/objects/obj_xref.c", + ], + "crypto/ocsp/ocsp_asn.o" => + [ + "crypto/ocsp/ocsp_asn.c", + ], + "crypto/ocsp/ocsp_cl.o" => + [ + "crypto/ocsp/ocsp_cl.c", + ], + "crypto/ocsp/ocsp_err.o" => + [ + "crypto/ocsp/ocsp_err.c", + ], + "crypto/ocsp/ocsp_ext.o" => + [ + "crypto/ocsp/ocsp_ext.c", + ], + "crypto/ocsp/ocsp_ht.o" => + [ + "crypto/ocsp/ocsp_ht.c", + ], + "crypto/ocsp/ocsp_lib.o" => + [ + "crypto/ocsp/ocsp_lib.c", + ], + "crypto/ocsp/ocsp_prn.o" => + [ + "crypto/ocsp/ocsp_prn.c", + ], + "crypto/ocsp/ocsp_srv.o" => + [ + "crypto/ocsp/ocsp_srv.c", + ], + "crypto/ocsp/ocsp_vfy.o" => + [ + "crypto/ocsp/ocsp_vfy.c", + ], + "crypto/ocsp/v3_ocsp.o" => + [ + "crypto/ocsp/v3_ocsp.c", + ], + "crypto/pem/pem_all.o" => + [ + "crypto/pem/pem_all.c", + ], + "crypto/pem/pem_err.o" => + [ + "crypto/pem/pem_err.c", + ], + "crypto/pem/pem_info.o" => + [ + "crypto/pem/pem_info.c", + ], + "crypto/pem/pem_lib.o" => + [ + "crypto/pem/pem_lib.c", + ], + "crypto/pem/pem_oth.o" => + [ + "crypto/pem/pem_oth.c", + ], + "crypto/pem/pem_pk8.o" => + [ + "crypto/pem/pem_pk8.c", + ], + "crypto/pem/pem_pkey.o" => + [ + "crypto/pem/pem_pkey.c", + ], + "crypto/pem/pem_sign.o" => + [ + "crypto/pem/pem_sign.c", + ], + "crypto/pem/pem_x509.o" => + [ + "crypto/pem/pem_x509.c", + ], + "crypto/pem/pem_xaux.o" => + [ + "crypto/pem/pem_xaux.c", + ], + "crypto/pem/pvkfmt.o" => + [ + "crypto/pem/pvkfmt.c", + ], + "crypto/pkcs12/p12_add.o" => + [ + "crypto/pkcs12/p12_add.c", + ], + "crypto/pkcs12/p12_asn.o" => + [ + "crypto/pkcs12/p12_asn.c", + ], + "crypto/pkcs12/p12_attr.o" => + [ + "crypto/pkcs12/p12_attr.c", + ], + "crypto/pkcs12/p12_crpt.o" => + [ + "crypto/pkcs12/p12_crpt.c", + ], + "crypto/pkcs12/p12_crt.o" => + [ + "crypto/pkcs12/p12_crt.c", + ], + "crypto/pkcs12/p12_decr.o" => + [ + "crypto/pkcs12/p12_decr.c", + ], + "crypto/pkcs12/p12_init.o" => + [ + "crypto/pkcs12/p12_init.c", + ], + "crypto/pkcs12/p12_key.o" => + [ + "crypto/pkcs12/p12_key.c", + ], + "crypto/pkcs12/p12_kiss.o" => + [ + "crypto/pkcs12/p12_kiss.c", + ], + "crypto/pkcs12/p12_mutl.o" => + [ + "crypto/pkcs12/p12_mutl.c", + ], + "crypto/pkcs12/p12_npas.o" => + [ + "crypto/pkcs12/p12_npas.c", + ], + "crypto/pkcs12/p12_p8d.o" => + [ + "crypto/pkcs12/p12_p8d.c", + ], + "crypto/pkcs12/p12_p8e.o" => + [ + "crypto/pkcs12/p12_p8e.c", + ], + "crypto/pkcs12/p12_sbag.o" => + [ + "crypto/pkcs12/p12_sbag.c", + ], + "crypto/pkcs12/p12_utl.o" => + [ + "crypto/pkcs12/p12_utl.c", + ], + "crypto/pkcs12/pk12err.o" => + [ + "crypto/pkcs12/pk12err.c", + ], + "crypto/pkcs7/bio_pk7.o" => + [ + "crypto/pkcs7/bio_pk7.c", + ], + "crypto/pkcs7/pk7_asn1.o" => + [ + "crypto/pkcs7/pk7_asn1.c", + ], + "crypto/pkcs7/pk7_attr.o" => + [ + "crypto/pkcs7/pk7_attr.c", + ], + "crypto/pkcs7/pk7_doit.o" => + [ + "crypto/pkcs7/pk7_doit.c", + ], + "crypto/pkcs7/pk7_lib.o" => + [ + "crypto/pkcs7/pk7_lib.c", + ], + "crypto/pkcs7/pk7_mime.o" => + [ + "crypto/pkcs7/pk7_mime.c", + ], + "crypto/pkcs7/pk7_smime.o" => + [ + "crypto/pkcs7/pk7_smime.c", + ], + "crypto/pkcs7/pkcs7err.o" => + [ + "crypto/pkcs7/pkcs7err.c", + ], + "crypto/poly1305/poly1305.o" => + [ + "crypto/poly1305/poly1305.c", + ], + "crypto/poly1305/poly1305_ameth.o" => + [ + "crypto/poly1305/poly1305_ameth.c", + ], + "crypto/poly1305/poly1305_pmeth.o" => + [ + "crypto/poly1305/poly1305_pmeth.c", + ], + "crypto/rand/drbg_ctr.o" => + [ + "crypto/rand/drbg_ctr.c", + ], + "crypto/rand/drbg_lib.o" => + [ + "crypto/rand/drbg_lib.c", + ], + "crypto/rand/rand_egd.o" => + [ + "crypto/rand/rand_egd.c", + ], + "crypto/rand/rand_err.o" => + [ + "crypto/rand/rand_err.c", + ], + "crypto/rand/rand_lib.o" => + [ + "crypto/rand/rand_lib.c", + ], + "crypto/rand/rand_unix.o" => + [ + "crypto/rand/rand_unix.c", + ], + "crypto/rand/rand_vms.o" => + [ + "crypto/rand/rand_vms.c", + ], + "crypto/rand/rand_win.o" => + [ + "crypto/rand/rand_win.c", + ], + "crypto/rand/randfile.o" => + [ + "crypto/rand/randfile.c", + ], + "crypto/rc2/rc2_cbc.o" => + [ + "crypto/rc2/rc2_cbc.c", + ], + "crypto/rc2/rc2_ecb.o" => + [ + "crypto/rc2/rc2_ecb.c", + ], + "crypto/rc2/rc2_skey.o" => + [ + "crypto/rc2/rc2_skey.c", + ], + "crypto/rc2/rc2cfb64.o" => + [ + "crypto/rc2/rc2cfb64.c", + ], + "crypto/rc2/rc2ofb64.o" => + [ + "crypto/rc2/rc2ofb64.c", + ], + "crypto/rc4/rc4_enc.o" => + [ + "crypto/rc4/rc4_enc.c", + ], + "crypto/rc4/rc4_skey.o" => + [ + "crypto/rc4/rc4_skey.c", + ], + "crypto/ripemd/rmd_dgst.o" => + [ + "crypto/ripemd/rmd_dgst.c", + ], + "crypto/ripemd/rmd_one.o" => + [ + "crypto/ripemd/rmd_one.c", + ], + "crypto/rsa/rsa_ameth.o" => + [ + "crypto/rsa/rsa_ameth.c", + ], + "crypto/rsa/rsa_asn1.o" => + [ + "crypto/rsa/rsa_asn1.c", + ], + "crypto/rsa/rsa_chk.o" => + [ + "crypto/rsa/rsa_chk.c", + ], + "crypto/rsa/rsa_crpt.o" => + [ + "crypto/rsa/rsa_crpt.c", + ], + "crypto/rsa/rsa_depr.o" => + [ + "crypto/rsa/rsa_depr.c", + ], + "crypto/rsa/rsa_err.o" => + [ + "crypto/rsa/rsa_err.c", + ], + "crypto/rsa/rsa_gen.o" => + [ + "crypto/rsa/rsa_gen.c", + ], + "crypto/rsa/rsa_lib.o" => + [ + "crypto/rsa/rsa_lib.c", + ], + "crypto/rsa/rsa_meth.o" => + [ + "crypto/rsa/rsa_meth.c", + ], + "crypto/rsa/rsa_mp.o" => + [ + "crypto/rsa/rsa_mp.c", + ], + "crypto/rsa/rsa_none.o" => + [ + "crypto/rsa/rsa_none.c", + ], + "crypto/rsa/rsa_oaep.o" => + [ + "crypto/rsa/rsa_oaep.c", + ], + "crypto/rsa/rsa_ossl.o" => + [ + "crypto/rsa/rsa_ossl.c", + ], + "crypto/rsa/rsa_pk1.o" => + [ + "crypto/rsa/rsa_pk1.c", + ], + "crypto/rsa/rsa_pmeth.o" => + [ + "crypto/rsa/rsa_pmeth.c", + ], + "crypto/rsa/rsa_prn.o" => + [ + "crypto/rsa/rsa_prn.c", + ], + "crypto/rsa/rsa_pss.o" => + [ + "crypto/rsa/rsa_pss.c", + ], + "crypto/rsa/rsa_saos.o" => + [ + "crypto/rsa/rsa_saos.c", + ], + "crypto/rsa/rsa_sign.o" => + [ + "crypto/rsa/rsa_sign.c", + ], + "crypto/rsa/rsa_ssl.o" => + [ + "crypto/rsa/rsa_ssl.c", + ], + "crypto/rsa/rsa_x931.o" => + [ + "crypto/rsa/rsa_x931.c", + ], + "crypto/rsa/rsa_x931g.o" => + [ + "crypto/rsa/rsa_x931g.c", + ], + "crypto/seed/seed.o" => + [ + "crypto/seed/seed.c", + ], + "crypto/seed/seed_cbc.o" => + [ + "crypto/seed/seed_cbc.c", + ], + "crypto/seed/seed_cfb.o" => + [ + "crypto/seed/seed_cfb.c", + ], + "crypto/seed/seed_ecb.o" => + [ + "crypto/seed/seed_ecb.c", + ], + "crypto/seed/seed_ofb.o" => + [ + "crypto/seed/seed_ofb.c", + ], + "crypto/sha/keccak1600.o" => + [ + "crypto/sha/keccak1600.c", + ], + "crypto/sha/sha1_one.o" => + [ + "crypto/sha/sha1_one.c", + ], + "crypto/sha/sha1dgst.o" => + [ + "crypto/sha/sha1dgst.c", + ], + "crypto/sha/sha256.o" => + [ + "crypto/sha/sha256.c", + ], + "crypto/sha/sha512.o" => + [ + "crypto/sha/sha512.c", + ], + "crypto/siphash/siphash.o" => + [ + "crypto/siphash/siphash.c", + ], + "crypto/siphash/siphash_ameth.o" => + [ + "crypto/siphash/siphash_ameth.c", + ], + "crypto/siphash/siphash_pmeth.o" => + [ + "crypto/siphash/siphash_pmeth.c", + ], + "crypto/sm2/sm2_crypt.o" => + [ + "crypto/sm2/sm2_crypt.c", + ], + "crypto/sm2/sm2_err.o" => + [ + "crypto/sm2/sm2_err.c", + ], + "crypto/sm2/sm2_pmeth.o" => + [ + "crypto/sm2/sm2_pmeth.c", + ], + "crypto/sm2/sm2_sign.o" => + [ + "crypto/sm2/sm2_sign.c", + ], + "crypto/sm3/m_sm3.o" => + [ + "crypto/sm3/m_sm3.c", + ], + "crypto/sm3/sm3.o" => + [ + "crypto/sm3/sm3.c", + ], + "crypto/sm4/sm4.o" => + [ + "crypto/sm4/sm4.c", + ], + "crypto/srp/srp_lib.o" => + [ + "crypto/srp/srp_lib.c", + ], + "crypto/srp/srp_vfy.o" => + [ + "crypto/srp/srp_vfy.c", + ], + "crypto/stack/stack.o" => + [ + "crypto/stack/stack.c", + ], + "crypto/store/loader_file.o" => + [ + "crypto/store/loader_file.c", + ], + "crypto/store/store_err.o" => + [ + "crypto/store/store_err.c", + ], + "crypto/store/store_init.o" => + [ + "crypto/store/store_init.c", + ], + "crypto/store/store_lib.o" => + [ + "crypto/store/store_lib.c", + ], + "crypto/store/store_register.o" => + [ + "crypto/store/store_register.c", + ], + "crypto/store/store_strings.o" => + [ + "crypto/store/store_strings.c", + ], + "crypto/threads_none.o" => + [ + "crypto/threads_none.c", + ], + "crypto/threads_pthread.o" => + [ + "crypto/threads_pthread.c", + ], + "crypto/threads_win.o" => + [ + "crypto/threads_win.c", + ], + "crypto/ts/ts_asn1.o" => + [ + "crypto/ts/ts_asn1.c", + ], + "crypto/ts/ts_conf.o" => + [ + "crypto/ts/ts_conf.c", + ], + "crypto/ts/ts_err.o" => + [ + "crypto/ts/ts_err.c", + ], + "crypto/ts/ts_lib.o" => + [ + "crypto/ts/ts_lib.c", + ], + "crypto/ts/ts_req_print.o" => + [ + "crypto/ts/ts_req_print.c", + ], + "crypto/ts/ts_req_utils.o" => + [ + "crypto/ts/ts_req_utils.c", + ], + "crypto/ts/ts_rsp_print.o" => + [ + "crypto/ts/ts_rsp_print.c", + ], + "crypto/ts/ts_rsp_sign.o" => + [ + "crypto/ts/ts_rsp_sign.c", + ], + "crypto/ts/ts_rsp_utils.o" => + [ + "crypto/ts/ts_rsp_utils.c", + ], + "crypto/ts/ts_rsp_verify.o" => + [ + "crypto/ts/ts_rsp_verify.c", + ], + "crypto/ts/ts_verify_ctx.o" => + [ + "crypto/ts/ts_verify_ctx.c", + ], + "crypto/txt_db/txt_db.o" => + [ + "crypto/txt_db/txt_db.c", + ], + "crypto/ui/ui_err.o" => + [ + "crypto/ui/ui_err.c", + ], + "crypto/ui/ui_lib.o" => + [ + "crypto/ui/ui_lib.c", + ], + "crypto/ui/ui_null.o" => + [ + "crypto/ui/ui_null.c", + ], + "crypto/ui/ui_openssl.o" => + [ + "crypto/ui/ui_openssl.c", + ], + "crypto/ui/ui_util.o" => + [ + "crypto/ui/ui_util.c", + ], + "crypto/uid.o" => + [ + "crypto/uid.c", + ], + "crypto/whrlpool/wp_block.o" => + [ + "crypto/whrlpool/wp_block.c", + ], + "crypto/whrlpool/wp_dgst.o" => + [ + "crypto/whrlpool/wp_dgst.c", + ], + "crypto/x509/by_dir.o" => + [ + "crypto/x509/by_dir.c", + ], + "crypto/x509/by_file.o" => + [ + "crypto/x509/by_file.c", + ], + "crypto/x509/t_crl.o" => + [ + "crypto/x509/t_crl.c", + ], + "crypto/x509/t_req.o" => + [ + "crypto/x509/t_req.c", + ], + "crypto/x509/t_x509.o" => + [ + "crypto/x509/t_x509.c", + ], + "crypto/x509/x509_att.o" => + [ + "crypto/x509/x509_att.c", + ], + "crypto/x509/x509_cmp.o" => + [ + "crypto/x509/x509_cmp.c", + ], + "crypto/x509/x509_d2.o" => + [ + "crypto/x509/x509_d2.c", + ], + "crypto/x509/x509_def.o" => + [ + "crypto/x509/x509_def.c", + ], + "crypto/x509/x509_err.o" => + [ + "crypto/x509/x509_err.c", + ], + "crypto/x509/x509_ext.o" => + [ + "crypto/x509/x509_ext.c", + ], + "crypto/x509/x509_lu.o" => + [ + "crypto/x509/x509_lu.c", + ], + "crypto/x509/x509_meth.o" => + [ + "crypto/x509/x509_meth.c", + ], + "crypto/x509/x509_obj.o" => + [ + "crypto/x509/x509_obj.c", + ], + "crypto/x509/x509_r2x.o" => + [ + "crypto/x509/x509_r2x.c", + ], + "crypto/x509/x509_req.o" => + [ + "crypto/x509/x509_req.c", + ], + "crypto/x509/x509_set.o" => + [ + "crypto/x509/x509_set.c", + ], + "crypto/x509/x509_trs.o" => + [ + "crypto/x509/x509_trs.c", + ], + "crypto/x509/x509_txt.o" => + [ + "crypto/x509/x509_txt.c", + ], + "crypto/x509/x509_v3.o" => + [ + "crypto/x509/x509_v3.c", + ], + "crypto/x509/x509_vfy.o" => + [ + "crypto/x509/x509_vfy.c", + ], + "crypto/x509/x509_vpm.o" => + [ + "crypto/x509/x509_vpm.c", + ], + "crypto/x509/x509cset.o" => + [ + "crypto/x509/x509cset.c", + ], + "crypto/x509/x509name.o" => + [ + "crypto/x509/x509name.c", + ], + "crypto/x509/x509rset.o" => + [ + "crypto/x509/x509rset.c", + ], + "crypto/x509/x509spki.o" => + [ + "crypto/x509/x509spki.c", + ], + "crypto/x509/x509type.o" => + [ + "crypto/x509/x509type.c", + ], + "crypto/x509/x_all.o" => + [ + "crypto/x509/x_all.c", + ], + "crypto/x509/x_attrib.o" => + [ + "crypto/x509/x_attrib.c", + ], + "crypto/x509/x_crl.o" => + [ + "crypto/x509/x_crl.c", + ], + "crypto/x509/x_exten.o" => + [ + "crypto/x509/x_exten.c", + ], + "crypto/x509/x_name.o" => + [ + "crypto/x509/x_name.c", + ], + "crypto/x509/x_pubkey.o" => + [ + "crypto/x509/x_pubkey.c", + ], + "crypto/x509/x_req.o" => + [ + "crypto/x509/x_req.c", + ], + "crypto/x509/x_x509.o" => + [ + "crypto/x509/x_x509.c", + ], + "crypto/x509/x_x509a.o" => + [ + "crypto/x509/x_x509a.c", + ], + "crypto/x509v3/pcy_cache.o" => + [ + "crypto/x509v3/pcy_cache.c", + ], + "crypto/x509v3/pcy_data.o" => + [ + "crypto/x509v3/pcy_data.c", + ], + "crypto/x509v3/pcy_lib.o" => + [ + "crypto/x509v3/pcy_lib.c", + ], + "crypto/x509v3/pcy_map.o" => + [ + "crypto/x509v3/pcy_map.c", + ], + "crypto/x509v3/pcy_node.o" => + [ + "crypto/x509v3/pcy_node.c", + ], + "crypto/x509v3/pcy_tree.o" => + [ + "crypto/x509v3/pcy_tree.c", + ], + "crypto/x509v3/v3_addr.o" => + [ + "crypto/x509v3/v3_addr.c", + ], + "crypto/x509v3/v3_admis.o" => + [ + "crypto/x509v3/v3_admis.c", + ], + "crypto/x509v3/v3_akey.o" => + [ + "crypto/x509v3/v3_akey.c", + ], + "crypto/x509v3/v3_akeya.o" => + [ + "crypto/x509v3/v3_akeya.c", + ], + "crypto/x509v3/v3_alt.o" => + [ + "crypto/x509v3/v3_alt.c", + ], + "crypto/x509v3/v3_asid.o" => + [ + "crypto/x509v3/v3_asid.c", + ], + "crypto/x509v3/v3_bcons.o" => + [ + "crypto/x509v3/v3_bcons.c", + ], + "crypto/x509v3/v3_bitst.o" => + [ + "crypto/x509v3/v3_bitst.c", + ], + "crypto/x509v3/v3_conf.o" => + [ + "crypto/x509v3/v3_conf.c", + ], + "crypto/x509v3/v3_cpols.o" => + [ + "crypto/x509v3/v3_cpols.c", + ], + "crypto/x509v3/v3_crld.o" => + [ + "crypto/x509v3/v3_crld.c", + ], + "crypto/x509v3/v3_enum.o" => + [ + "crypto/x509v3/v3_enum.c", + ], + "crypto/x509v3/v3_extku.o" => + [ + "crypto/x509v3/v3_extku.c", + ], + "crypto/x509v3/v3_genn.o" => + [ + "crypto/x509v3/v3_genn.c", + ], + "crypto/x509v3/v3_ia5.o" => + [ + "crypto/x509v3/v3_ia5.c", + ], + "crypto/x509v3/v3_info.o" => + [ + "crypto/x509v3/v3_info.c", + ], + "crypto/x509v3/v3_int.o" => + [ + "crypto/x509v3/v3_int.c", + ], + "crypto/x509v3/v3_lib.o" => + [ + "crypto/x509v3/v3_lib.c", + ], + "crypto/x509v3/v3_ncons.o" => + [ + "crypto/x509v3/v3_ncons.c", + ], + "crypto/x509v3/v3_pci.o" => + [ + "crypto/x509v3/v3_pci.c", + ], + "crypto/x509v3/v3_pcia.o" => + [ + "crypto/x509v3/v3_pcia.c", + ], + "crypto/x509v3/v3_pcons.o" => + [ + "crypto/x509v3/v3_pcons.c", + ], + "crypto/x509v3/v3_pku.o" => + [ + "crypto/x509v3/v3_pku.c", + ], + "crypto/x509v3/v3_pmaps.o" => + [ + "crypto/x509v3/v3_pmaps.c", + ], + "crypto/x509v3/v3_prn.o" => + [ + "crypto/x509v3/v3_prn.c", + ], + "crypto/x509v3/v3_purp.o" => + [ + "crypto/x509v3/v3_purp.c", + ], + "crypto/x509v3/v3_skey.o" => + [ + "crypto/x509v3/v3_skey.c", + ], + "crypto/x509v3/v3_sxnet.o" => + [ + "crypto/x509v3/v3_sxnet.c", + ], + "crypto/x509v3/v3_tlsf.o" => + [ + "crypto/x509v3/v3_tlsf.c", + ], + "crypto/x509v3/v3_utl.o" => + [ + "crypto/x509v3/v3_utl.c", + ], + "crypto/x509v3/v3err.o" => + [ + "crypto/x509v3/v3err.c", + ], + "engines/e_capi.o" => + [ + "engines/e_capi.c", + ], + "engines/e_padlock.o" => + [ + "engines/e_padlock.c", + ], + "fuzz/asn1-test" => + [ + "fuzz/asn1.o", + "fuzz/test-corpus.o", + ], + "fuzz/asn1.o" => + [ + "fuzz/asn1.c", + ], + "fuzz/asn1parse-test" => + [ + "fuzz/asn1parse.o", + "fuzz/test-corpus.o", + ], + "fuzz/asn1parse.o" => + [ + "fuzz/asn1parse.c", + ], + "fuzz/bignum-test" => + [ + "fuzz/bignum.o", + "fuzz/test-corpus.o", + ], + "fuzz/bignum.o" => + [ + "fuzz/bignum.c", + ], + "fuzz/bndiv-test" => + [ + "fuzz/bndiv.o", + "fuzz/test-corpus.o", + ], + "fuzz/bndiv.o" => + [ + "fuzz/bndiv.c", + ], + "fuzz/client-test" => + [ + "fuzz/client.o", + "fuzz/test-corpus.o", + ], + "fuzz/client.o" => + [ + "fuzz/client.c", + ], + "fuzz/cms-test" => + [ + "fuzz/cms.o", + "fuzz/test-corpus.o", + ], + "fuzz/cms.o" => + [ + "fuzz/cms.c", + ], + "fuzz/conf-test" => + [ + "fuzz/conf.o", + "fuzz/test-corpus.o", + ], + "fuzz/conf.o" => + [ + "fuzz/conf.c", + ], + "fuzz/crl-test" => + [ + "fuzz/crl.o", + "fuzz/test-corpus.o", + ], + "fuzz/crl.o" => + [ + "fuzz/crl.c", + ], + "fuzz/ct-test" => + [ + "fuzz/ct.o", + "fuzz/test-corpus.o", + ], + "fuzz/ct.o" => + [ + "fuzz/ct.c", + ], + "fuzz/server-test" => + [ + "fuzz/server.o", + "fuzz/test-corpus.o", + ], + "fuzz/server.o" => + [ + "fuzz/server.c", + ], + "fuzz/test-corpus.o" => + [ + "fuzz/test-corpus.c", + ], + "fuzz/x509-test" => + [ + "fuzz/test-corpus.o", + "fuzz/x509.o", + ], + "fuzz/x509.o" => + [ + "fuzz/x509.c", + ], + "libcrypto" => + [ + "crypto/aes/aes_cbc.o", + "crypto/aes/aes_cfb.o", + "crypto/aes/aes_core.o", + "crypto/aes/aes_ecb.o", + "crypto/aes/aes_ige.o", + "crypto/aes/aes_misc.o", + "crypto/aes/aes_ofb.o", + "crypto/aes/aes_wrap.o", + "crypto/aria/aria.o", + "crypto/asn1/a_bitstr.o", + "crypto/asn1/a_d2i_fp.o", + "crypto/asn1/a_digest.o", + "crypto/asn1/a_dup.o", + "crypto/asn1/a_gentm.o", + "crypto/asn1/a_i2d_fp.o", + "crypto/asn1/a_int.o", + "crypto/asn1/a_mbstr.o", + "crypto/asn1/a_object.o", + "crypto/asn1/a_octet.o", + "crypto/asn1/a_print.o", + "crypto/asn1/a_sign.o", + "crypto/asn1/a_strex.o", + "crypto/asn1/a_strnid.o", + "crypto/asn1/a_time.o", + "crypto/asn1/a_type.o", + "crypto/asn1/a_utctm.o", + "crypto/asn1/a_utf8.o", + "crypto/asn1/a_verify.o", + "crypto/asn1/ameth_lib.o", + "crypto/asn1/asn1_err.o", + "crypto/asn1/asn1_gen.o", + "crypto/asn1/asn1_item_list.o", + "crypto/asn1/asn1_lib.o", + "crypto/asn1/asn1_par.o", + "crypto/asn1/asn_mime.o", + "crypto/asn1/asn_moid.o", + "crypto/asn1/asn_mstbl.o", + "crypto/asn1/asn_pack.o", + "crypto/asn1/bio_asn1.o", + "crypto/asn1/bio_ndef.o", + "crypto/asn1/d2i_pr.o", + "crypto/asn1/d2i_pu.o", + "crypto/asn1/evp_asn1.o", + "crypto/asn1/f_int.o", + "crypto/asn1/f_string.o", + "crypto/asn1/i2d_pr.o", + "crypto/asn1/i2d_pu.o", + "crypto/asn1/n_pkey.o", + "crypto/asn1/nsseq.o", + "crypto/asn1/p5_pbe.o", + "crypto/asn1/p5_pbev2.o", + "crypto/asn1/p5_scrypt.o", + "crypto/asn1/p8_pkey.o", + "crypto/asn1/t_bitst.o", + "crypto/asn1/t_pkey.o", + "crypto/asn1/t_spki.o", + "crypto/asn1/tasn_dec.o", + "crypto/asn1/tasn_enc.o", + "crypto/asn1/tasn_fre.o", + "crypto/asn1/tasn_new.o", + "crypto/asn1/tasn_prn.o", + "crypto/asn1/tasn_scn.o", + "crypto/asn1/tasn_typ.o", + "crypto/asn1/tasn_utl.o", + "crypto/asn1/x_algor.o", + "crypto/asn1/x_bignum.o", + "crypto/asn1/x_info.o", + "crypto/asn1/x_int64.o", + "crypto/asn1/x_long.o", + "crypto/asn1/x_pkey.o", + "crypto/asn1/x_sig.o", + "crypto/asn1/x_spki.o", + "crypto/asn1/x_val.o", + "crypto/async/arch/async_null.o", + "crypto/async/arch/async_posix.o", + "crypto/async/arch/async_win.o", + "crypto/async/async.o", + "crypto/async/async_err.o", + "crypto/async/async_wait.o", + "crypto/bf/bf_cfb64.o", + "crypto/bf/bf_ecb.o", + "crypto/bf/bf_enc.o", + "crypto/bf/bf_ofb64.o", + "crypto/bf/bf_skey.o", + "crypto/bio/b_addr.o", + "crypto/bio/b_dump.o", + "crypto/bio/b_print.o", + "crypto/bio/b_sock.o", + "crypto/bio/b_sock2.o", + "crypto/bio/bf_buff.o", + "crypto/bio/bf_lbuf.o", + "crypto/bio/bf_nbio.o", + "crypto/bio/bf_null.o", + "crypto/bio/bio_cb.o", + "crypto/bio/bio_err.o", + "crypto/bio/bio_lib.o", + "crypto/bio/bio_meth.o", + "crypto/bio/bss_acpt.o", + "crypto/bio/bss_bio.o", + "crypto/bio/bss_conn.o", + "crypto/bio/bss_dgram.o", + "crypto/bio/bss_fd.o", + "crypto/bio/bss_file.o", + "crypto/bio/bss_log.o", + "crypto/bio/bss_mem.o", + "crypto/bio/bss_null.o", + "crypto/bio/bss_sock.o", + "crypto/blake2/blake2b.o", + "crypto/blake2/blake2s.o", + "crypto/blake2/m_blake2b.o", + "crypto/blake2/m_blake2s.o", + "crypto/bn/bn_add.o", + "crypto/bn/bn_asm.o", + "crypto/bn/bn_blind.o", + "crypto/bn/bn_const.o", + "crypto/bn/bn_ctx.o", + "crypto/bn/bn_depr.o", + "crypto/bn/bn_dh.o", + "crypto/bn/bn_div.o", + "crypto/bn/bn_err.o", + "crypto/bn/bn_exp.o", + "crypto/bn/bn_exp2.o", + "crypto/bn/bn_gcd.o", + "crypto/bn/bn_gf2m.o", + "crypto/bn/bn_intern.o", + "crypto/bn/bn_kron.o", + "crypto/bn/bn_lib.o", + "crypto/bn/bn_mod.o", + "crypto/bn/bn_mont.o", + "crypto/bn/bn_mpi.o", + "crypto/bn/bn_mul.o", + "crypto/bn/bn_nist.o", + "crypto/bn/bn_prime.o", + "crypto/bn/bn_print.o", + "crypto/bn/bn_rand.o", + "crypto/bn/bn_recp.o", + "crypto/bn/bn_shift.o", + "crypto/bn/bn_sqr.o", + "crypto/bn/bn_sqrt.o", + "crypto/bn/bn_srp.o", + "crypto/bn/bn_word.o", + "crypto/bn/bn_x931p.o", + "crypto/buffer/buf_err.o", + "crypto/buffer/buffer.o", + "crypto/camellia/camellia.o", + "crypto/camellia/cmll_cbc.o", + "crypto/camellia/cmll_cfb.o", + "crypto/camellia/cmll_ctr.o", + "crypto/camellia/cmll_ecb.o", + "crypto/camellia/cmll_misc.o", + "crypto/camellia/cmll_ofb.o", + "crypto/cast/c_cfb64.o", + "crypto/cast/c_ecb.o", + "crypto/cast/c_enc.o", + "crypto/cast/c_ofb64.o", + "crypto/cast/c_skey.o", + "crypto/chacha/chacha_enc.o", + "crypto/cmac/cm_ameth.o", + "crypto/cmac/cm_pmeth.o", + "crypto/cmac/cmac.o", + "crypto/cms/cms_asn1.o", + "crypto/cms/cms_att.o", + "crypto/cms/cms_cd.o", + "crypto/cms/cms_dd.o", + "crypto/cms/cms_enc.o", + "crypto/cms/cms_env.o", + "crypto/cms/cms_err.o", + "crypto/cms/cms_ess.o", + "crypto/cms/cms_io.o", + "crypto/cms/cms_kari.o", + "crypto/cms/cms_lib.o", + "crypto/cms/cms_pwri.o", + "crypto/cms/cms_sd.o", + "crypto/cms/cms_smime.o", + "crypto/conf/conf_api.o", + "crypto/conf/conf_def.o", + "crypto/conf/conf_err.o", + "crypto/conf/conf_lib.o", + "crypto/conf/conf_mall.o", + "crypto/conf/conf_mod.o", + "crypto/conf/conf_sap.o", + "crypto/conf/conf_ssl.o", + "crypto/cpt_err.o", + "crypto/cryptlib.o", + "crypto/ct/ct_b64.o", + "crypto/ct/ct_err.o", + "crypto/ct/ct_log.o", + "crypto/ct/ct_oct.o", + "crypto/ct/ct_policy.o", + "crypto/ct/ct_prn.o", + "crypto/ct/ct_sct.o", + "crypto/ct/ct_sct_ctx.o", + "crypto/ct/ct_vfy.o", + "crypto/ct/ct_x509v3.o", + "crypto/ctype.o", + "crypto/cversion.o", + "crypto/des/cbc_cksm.o", + "crypto/des/cbc_enc.o", + "crypto/des/cfb64ede.o", + "crypto/des/cfb64enc.o", + "crypto/des/cfb_enc.o", + "crypto/des/des_enc.o", + "crypto/des/ecb3_enc.o", + "crypto/des/ecb_enc.o", + "crypto/des/fcrypt.o", + "crypto/des/fcrypt_b.o", + "crypto/des/ofb64ede.o", + "crypto/des/ofb64enc.o", + "crypto/des/ofb_enc.o", + "crypto/des/pcbc_enc.o", + "crypto/des/qud_cksm.o", + "crypto/des/rand_key.o", + "crypto/des/set_key.o", + "crypto/des/str2key.o", + "crypto/des/xcbc_enc.o", + "crypto/dh/dh_ameth.o", + "crypto/dh/dh_asn1.o", + "crypto/dh/dh_check.o", + "crypto/dh/dh_depr.o", + "crypto/dh/dh_err.o", + "crypto/dh/dh_gen.o", + "crypto/dh/dh_kdf.o", + "crypto/dh/dh_key.o", + "crypto/dh/dh_lib.o", + "crypto/dh/dh_meth.o", + "crypto/dh/dh_pmeth.o", + "crypto/dh/dh_prn.o", + "crypto/dh/dh_rfc5114.o", + "crypto/dh/dh_rfc7919.o", + "crypto/dsa/dsa_ameth.o", + "crypto/dsa/dsa_asn1.o", + "crypto/dsa/dsa_depr.o", + "crypto/dsa/dsa_err.o", + "crypto/dsa/dsa_gen.o", + "crypto/dsa/dsa_key.o", + "crypto/dsa/dsa_lib.o", + "crypto/dsa/dsa_meth.o", + "crypto/dsa/dsa_ossl.o", + "crypto/dsa/dsa_pmeth.o", + "crypto/dsa/dsa_prn.o", + "crypto/dsa/dsa_sign.o", + "crypto/dsa/dsa_vrf.o", + "crypto/dso/dso_dl.o", + "crypto/dso/dso_dlfcn.o", + "crypto/dso/dso_err.o", + "crypto/dso/dso_lib.o", + "crypto/dso/dso_openssl.o", + "crypto/dso/dso_vms.o", + "crypto/dso/dso_win32.o", + "crypto/ebcdic.o", + "crypto/ec/curve25519.o", + "crypto/ec/curve448/arch_32/f_impl.o", + "crypto/ec/curve448/curve448.o", + "crypto/ec/curve448/curve448_tables.o", + "crypto/ec/curve448/eddsa.o", + "crypto/ec/curve448/f_generic.o", + "crypto/ec/curve448/scalar.o", + "crypto/ec/ec2_oct.o", + "crypto/ec/ec2_smpl.o", + "crypto/ec/ec_ameth.o", + "crypto/ec/ec_asn1.o", + "crypto/ec/ec_check.o", + "crypto/ec/ec_curve.o", + "crypto/ec/ec_cvt.o", + "crypto/ec/ec_err.o", + "crypto/ec/ec_key.o", + "crypto/ec/ec_kmeth.o", + "crypto/ec/ec_lib.o", + "crypto/ec/ec_mult.o", + "crypto/ec/ec_oct.o", + "crypto/ec/ec_pmeth.o", + "crypto/ec/ec_print.o", + "crypto/ec/ecdh_kdf.o", + "crypto/ec/ecdh_ossl.o", + "crypto/ec/ecdsa_ossl.o", + "crypto/ec/ecdsa_sign.o", + "crypto/ec/ecdsa_vrf.o", + "crypto/ec/eck_prn.o", + "crypto/ec/ecp_mont.o", + "crypto/ec/ecp_nist.o", + "crypto/ec/ecp_nistp224.o", + "crypto/ec/ecp_nistp256.o", + "crypto/ec/ecp_nistp521.o", + "crypto/ec/ecp_nistputil.o", + "crypto/ec/ecp_oct.o", + "crypto/ec/ecp_smpl.o", + "crypto/ec/ecx_meth.o", + "crypto/engine/eng_all.o", + "crypto/engine/eng_cnf.o", + "crypto/engine/eng_ctrl.o", + "crypto/engine/eng_dyn.o", + "crypto/engine/eng_err.o", + "crypto/engine/eng_fat.o", + "crypto/engine/eng_init.o", + "crypto/engine/eng_lib.o", + "crypto/engine/eng_list.o", + "crypto/engine/eng_openssl.o", + "crypto/engine/eng_pkey.o", + "crypto/engine/eng_rdrand.o", + "crypto/engine/eng_table.o", + "crypto/engine/tb_asnmth.o", + "crypto/engine/tb_cipher.o", + "crypto/engine/tb_dh.o", + "crypto/engine/tb_digest.o", + "crypto/engine/tb_dsa.o", + "crypto/engine/tb_eckey.o", + "crypto/engine/tb_pkmeth.o", + "crypto/engine/tb_rand.o", + "crypto/engine/tb_rsa.o", + "crypto/err/err.o", + "crypto/err/err_all.o", + "crypto/err/err_prn.o", + "crypto/evp/bio_b64.o", + "crypto/evp/bio_enc.o", + "crypto/evp/bio_md.o", + "crypto/evp/bio_ok.o", + "crypto/evp/c_allc.o", + "crypto/evp/c_alld.o", + "crypto/evp/cmeth_lib.o", + "crypto/evp/digest.o", + "crypto/evp/e_aes.o", + "crypto/evp/e_aes_cbc_hmac_sha1.o", + "crypto/evp/e_aes_cbc_hmac_sha256.o", + "crypto/evp/e_aria.o", + "crypto/evp/e_bf.o", + "crypto/evp/e_camellia.o", + "crypto/evp/e_cast.o", + "crypto/evp/e_chacha20_poly1305.o", + "crypto/evp/e_des.o", + "crypto/evp/e_des3.o", + "crypto/evp/e_idea.o", + "crypto/evp/e_null.o", + "crypto/evp/e_old.o", + "crypto/evp/e_rc2.o", + "crypto/evp/e_rc4.o", + "crypto/evp/e_rc4_hmac_md5.o", + "crypto/evp/e_rc5.o", + "crypto/evp/e_seed.o", + "crypto/evp/e_sm4.o", + "crypto/evp/e_xcbc_d.o", + "crypto/evp/encode.o", + "crypto/evp/evp_cnf.o", + "crypto/evp/evp_enc.o", + "crypto/evp/evp_err.o", + "crypto/evp/evp_key.o", + "crypto/evp/evp_lib.o", + "crypto/evp/evp_pbe.o", + "crypto/evp/evp_pkey.o", + "crypto/evp/m_md2.o", + "crypto/evp/m_md4.o", + "crypto/evp/m_md5.o", + "crypto/evp/m_md5_sha1.o", + "crypto/evp/m_mdc2.o", + "crypto/evp/m_null.o", + "crypto/evp/m_ripemd.o", + "crypto/evp/m_sha1.o", + "crypto/evp/m_sha3.o", + "crypto/evp/m_sigver.o", + "crypto/evp/m_wp.o", + "crypto/evp/names.o", + "crypto/evp/p5_crpt.o", + "crypto/evp/p5_crpt2.o", + "crypto/evp/p_dec.o", + "crypto/evp/p_enc.o", + "crypto/evp/p_lib.o", + "crypto/evp/p_open.o", + "crypto/evp/p_seal.o", + "crypto/evp/p_sign.o", + "crypto/evp/p_verify.o", + "crypto/evp/pbe_scrypt.o", + "crypto/evp/pmeth_fn.o", + "crypto/evp/pmeth_gn.o", + "crypto/evp/pmeth_lib.o", + "crypto/ex_data.o", + "crypto/getenv.o", + "crypto/hmac/hm_ameth.o", + "crypto/hmac/hm_pmeth.o", + "crypto/hmac/hmac.o", + "crypto/idea/i_cbc.o", + "crypto/idea/i_cfb64.o", + "crypto/idea/i_ecb.o", + "crypto/idea/i_ofb64.o", + "crypto/idea/i_skey.o", + "crypto/init.o", + "crypto/kdf/hkdf.o", + "crypto/kdf/kdf_err.o", + "crypto/kdf/scrypt.o", + "crypto/kdf/tls1_prf.o", + "crypto/lhash/lh_stats.o", + "crypto/lhash/lhash.o", + "crypto/md4/md4_dgst.o", + "crypto/md4/md4_one.o", + "crypto/md5/md5_dgst.o", + "crypto/md5/md5_one.o", + "crypto/mdc2/mdc2_one.o", + "crypto/mdc2/mdc2dgst.o", + "crypto/mem.o", + "crypto/mem_clr.o", + "crypto/mem_dbg.o", + "crypto/mem_sec.o", + "crypto/modes/cbc128.o", + "crypto/modes/ccm128.o", + "crypto/modes/cfb128.o", + "crypto/modes/ctr128.o", + "crypto/modes/cts128.o", + "crypto/modes/gcm128.o", + "crypto/modes/ocb128.o", + "crypto/modes/ofb128.o", + "crypto/modes/wrap128.o", + "crypto/modes/xts128.o", + "crypto/o_dir.o", + "crypto/o_fips.o", + "crypto/o_fopen.o", + "crypto/o_init.o", + "crypto/o_str.o", + "crypto/o_time.o", + "crypto/objects/o_names.o", + "crypto/objects/obj_dat.o", + "crypto/objects/obj_err.o", + "crypto/objects/obj_lib.o", + "crypto/objects/obj_xref.o", + "crypto/ocsp/ocsp_asn.o", + "crypto/ocsp/ocsp_cl.o", + "crypto/ocsp/ocsp_err.o", + "crypto/ocsp/ocsp_ext.o", + "crypto/ocsp/ocsp_ht.o", + "crypto/ocsp/ocsp_lib.o", + "crypto/ocsp/ocsp_prn.o", + "crypto/ocsp/ocsp_srv.o", + "crypto/ocsp/ocsp_vfy.o", + "crypto/ocsp/v3_ocsp.o", + "crypto/pem/pem_all.o", + "crypto/pem/pem_err.o", + "crypto/pem/pem_info.o", + "crypto/pem/pem_lib.o", + "crypto/pem/pem_oth.o", + "crypto/pem/pem_pk8.o", + "crypto/pem/pem_pkey.o", + "crypto/pem/pem_sign.o", + "crypto/pem/pem_x509.o", + "crypto/pem/pem_xaux.o", + "crypto/pem/pvkfmt.o", + "crypto/pkcs12/p12_add.o", + "crypto/pkcs12/p12_asn.o", + "crypto/pkcs12/p12_attr.o", + "crypto/pkcs12/p12_crpt.o", + "crypto/pkcs12/p12_crt.o", + "crypto/pkcs12/p12_decr.o", + "crypto/pkcs12/p12_init.o", + "crypto/pkcs12/p12_key.o", + "crypto/pkcs12/p12_kiss.o", + "crypto/pkcs12/p12_mutl.o", + "crypto/pkcs12/p12_npas.o", + "crypto/pkcs12/p12_p8d.o", + "crypto/pkcs12/p12_p8e.o", + "crypto/pkcs12/p12_sbag.o", + "crypto/pkcs12/p12_utl.o", + "crypto/pkcs12/pk12err.o", + "crypto/pkcs7/bio_pk7.o", + "crypto/pkcs7/pk7_asn1.o", + "crypto/pkcs7/pk7_attr.o", + "crypto/pkcs7/pk7_doit.o", + "crypto/pkcs7/pk7_lib.o", + "crypto/pkcs7/pk7_mime.o", + "crypto/pkcs7/pk7_smime.o", + "crypto/pkcs7/pkcs7err.o", + "crypto/poly1305/poly1305.o", + "crypto/poly1305/poly1305_ameth.o", + "crypto/poly1305/poly1305_pmeth.o", + "crypto/rand/drbg_ctr.o", + "crypto/rand/drbg_lib.o", + "crypto/rand/rand_egd.o", + "crypto/rand/rand_err.o", + "crypto/rand/rand_lib.o", + "crypto/rand/rand_unix.o", + "crypto/rand/rand_vms.o", + "crypto/rand/rand_win.o", + "crypto/rand/randfile.o", + "crypto/rc2/rc2_cbc.o", + "crypto/rc2/rc2_ecb.o", + "crypto/rc2/rc2_skey.o", + "crypto/rc2/rc2cfb64.o", + "crypto/rc2/rc2ofb64.o", + "crypto/rc4/rc4_enc.o", + "crypto/rc4/rc4_skey.o", + "crypto/ripemd/rmd_dgst.o", + "crypto/ripemd/rmd_one.o", + "crypto/rsa/rsa_ameth.o", + "crypto/rsa/rsa_asn1.o", + "crypto/rsa/rsa_chk.o", + "crypto/rsa/rsa_crpt.o", + "crypto/rsa/rsa_depr.o", + "crypto/rsa/rsa_err.o", + "crypto/rsa/rsa_gen.o", + "crypto/rsa/rsa_lib.o", + "crypto/rsa/rsa_meth.o", + "crypto/rsa/rsa_mp.o", + "crypto/rsa/rsa_none.o", + "crypto/rsa/rsa_oaep.o", + "crypto/rsa/rsa_ossl.o", + "crypto/rsa/rsa_pk1.o", + "crypto/rsa/rsa_pmeth.o", + "crypto/rsa/rsa_prn.o", + "crypto/rsa/rsa_pss.o", + "crypto/rsa/rsa_saos.o", + "crypto/rsa/rsa_sign.o", + "crypto/rsa/rsa_ssl.o", + "crypto/rsa/rsa_x931.o", + "crypto/rsa/rsa_x931g.o", + "crypto/seed/seed.o", + "crypto/seed/seed_cbc.o", + "crypto/seed/seed_cfb.o", + "crypto/seed/seed_ecb.o", + "crypto/seed/seed_ofb.o", + "crypto/sha/keccak1600.o", + "crypto/sha/sha1_one.o", + "crypto/sha/sha1dgst.o", + "crypto/sha/sha256.o", + "crypto/sha/sha512.o", + "crypto/siphash/siphash.o", + "crypto/siphash/siphash_ameth.o", + "crypto/siphash/siphash_pmeth.o", + "crypto/sm2/sm2_crypt.o", + "crypto/sm2/sm2_err.o", + "crypto/sm2/sm2_pmeth.o", + "crypto/sm2/sm2_sign.o", + "crypto/sm3/m_sm3.o", + "crypto/sm3/sm3.o", + "crypto/sm4/sm4.o", + "crypto/srp/srp_lib.o", + "crypto/srp/srp_vfy.o", + "crypto/stack/stack.o", + "crypto/store/loader_file.o", + "crypto/store/store_err.o", + "crypto/store/store_init.o", + "crypto/store/store_lib.o", + "crypto/store/store_register.o", + "crypto/store/store_strings.o", + "crypto/threads_none.o", + "crypto/threads_pthread.o", + "crypto/threads_win.o", + "crypto/ts/ts_asn1.o", + "crypto/ts/ts_conf.o", + "crypto/ts/ts_err.o", + "crypto/ts/ts_lib.o", + "crypto/ts/ts_req_print.o", + "crypto/ts/ts_req_utils.o", + "crypto/ts/ts_rsp_print.o", + "crypto/ts/ts_rsp_sign.o", + "crypto/ts/ts_rsp_utils.o", + "crypto/ts/ts_rsp_verify.o", + "crypto/ts/ts_verify_ctx.o", + "crypto/txt_db/txt_db.o", + "crypto/ui/ui_err.o", + "crypto/ui/ui_lib.o", + "crypto/ui/ui_null.o", + "crypto/ui/ui_openssl.o", + "crypto/ui/ui_util.o", + "crypto/uid.o", + "crypto/whrlpool/wp_block.o", + "crypto/whrlpool/wp_dgst.o", + "crypto/x509/by_dir.o", + "crypto/x509/by_file.o", + "crypto/x509/t_crl.o", + "crypto/x509/t_req.o", + "crypto/x509/t_x509.o", + "crypto/x509/x509_att.o", + "crypto/x509/x509_cmp.o", + "crypto/x509/x509_d2.o", + "crypto/x509/x509_def.o", + "crypto/x509/x509_err.o", + "crypto/x509/x509_ext.o", + "crypto/x509/x509_lu.o", + "crypto/x509/x509_meth.o", + "crypto/x509/x509_obj.o", + "crypto/x509/x509_r2x.o", + "crypto/x509/x509_req.o", + "crypto/x509/x509_set.o", + "crypto/x509/x509_trs.o", + "crypto/x509/x509_txt.o", + "crypto/x509/x509_v3.o", + "crypto/x509/x509_vfy.o", + "crypto/x509/x509_vpm.o", + "crypto/x509/x509cset.o", + "crypto/x509/x509name.o", + "crypto/x509/x509rset.o", + "crypto/x509/x509spki.o", + "crypto/x509/x509type.o", + "crypto/x509/x_all.o", + "crypto/x509/x_attrib.o", + "crypto/x509/x_crl.o", + "crypto/x509/x_exten.o", + "crypto/x509/x_name.o", + "crypto/x509/x_pubkey.o", + "crypto/x509/x_req.o", + "crypto/x509/x_x509.o", + "crypto/x509/x_x509a.o", + "crypto/x509v3/pcy_cache.o", + "crypto/x509v3/pcy_data.o", + "crypto/x509v3/pcy_lib.o", + "crypto/x509v3/pcy_map.o", + "crypto/x509v3/pcy_node.o", + "crypto/x509v3/pcy_tree.o", + "crypto/x509v3/v3_addr.o", + "crypto/x509v3/v3_admis.o", + "crypto/x509v3/v3_akey.o", + "crypto/x509v3/v3_akeya.o", + "crypto/x509v3/v3_alt.o", + "crypto/x509v3/v3_asid.o", + "crypto/x509v3/v3_bcons.o", + "crypto/x509v3/v3_bitst.o", + "crypto/x509v3/v3_conf.o", + "crypto/x509v3/v3_cpols.o", + "crypto/x509v3/v3_crld.o", + "crypto/x509v3/v3_enum.o", + "crypto/x509v3/v3_extku.o", + "crypto/x509v3/v3_genn.o", + "crypto/x509v3/v3_ia5.o", + "crypto/x509v3/v3_info.o", + "crypto/x509v3/v3_int.o", + "crypto/x509v3/v3_lib.o", + "crypto/x509v3/v3_ncons.o", + "crypto/x509v3/v3_pci.o", + "crypto/x509v3/v3_pcia.o", + "crypto/x509v3/v3_pcons.o", + "crypto/x509v3/v3_pku.o", + "crypto/x509v3/v3_pmaps.o", + "crypto/x509v3/v3_prn.o", + "crypto/x509v3/v3_purp.o", + "crypto/x509v3/v3_skey.o", + "crypto/x509v3/v3_sxnet.o", + "crypto/x509v3/v3_tlsf.o", + "crypto/x509v3/v3_utl.o", + "crypto/x509v3/v3err.o", + "engines/e_capi.o", + "engines/e_padlock.o", + ], + "libssl" => + [ + "ssl/bio_ssl.o", + "ssl/d1_lib.o", + "ssl/d1_msg.o", + "ssl/d1_srtp.o", + "ssl/methods.o", + "ssl/packet.o", + "ssl/pqueue.o", + "ssl/record/dtls1_bitmap.o", + "ssl/record/rec_layer_d1.o", + "ssl/record/rec_layer_s3.o", + "ssl/record/ssl3_buffer.o", + "ssl/record/ssl3_record.o", + "ssl/record/ssl3_record_tls13.o", + "ssl/s3_cbc.o", + "ssl/s3_enc.o", + "ssl/s3_lib.o", + "ssl/s3_msg.o", + "ssl/ssl_asn1.o", + "ssl/ssl_cert.o", + "ssl/ssl_ciph.o", + "ssl/ssl_conf.o", + "ssl/ssl_err.o", + "ssl/ssl_init.o", + "ssl/ssl_lib.o", + "ssl/ssl_mcnf.o", + "ssl/ssl_rsa.o", + "ssl/ssl_sess.o", + "ssl/ssl_stat.o", + "ssl/ssl_txt.o", + "ssl/ssl_utst.o", + "ssl/statem/extensions.o", + "ssl/statem/extensions_clnt.o", + "ssl/statem/extensions_cust.o", + "ssl/statem/extensions_srvr.o", + "ssl/statem/statem.o", + "ssl/statem/statem_clnt.o", + "ssl/statem/statem_dtls.o", + "ssl/statem/statem_lib.o", + "ssl/statem/statem_srvr.o", + "ssl/t1_enc.o", + "ssl/t1_lib.o", + "ssl/t1_trce.o", + "ssl/tls13_enc.o", + "ssl/tls_srp.o", + ], + "ssl/bio_ssl.o" => + [ + "ssl/bio_ssl.c", + ], + "ssl/d1_lib.o" => + [ + "ssl/d1_lib.c", + ], + "ssl/d1_msg.o" => + [ + "ssl/d1_msg.c", + ], + "ssl/d1_srtp.o" => + [ + "ssl/d1_srtp.c", + ], + "ssl/methods.o" => + [ + "ssl/methods.c", + ], + "ssl/packet.o" => + [ + "ssl/packet.c", + ], + "ssl/pqueue.o" => + [ + "ssl/pqueue.c", + ], + "ssl/record/dtls1_bitmap.o" => + [ + "ssl/record/dtls1_bitmap.c", + ], + "ssl/record/rec_layer_d1.o" => + [ + "ssl/record/rec_layer_d1.c", + ], + "ssl/record/rec_layer_s3.o" => + [ + "ssl/record/rec_layer_s3.c", + ], + "ssl/record/ssl3_buffer.o" => + [ + "ssl/record/ssl3_buffer.c", + ], + "ssl/record/ssl3_record.o" => + [ + "ssl/record/ssl3_record.c", + ], + "ssl/record/ssl3_record_tls13.o" => + [ + "ssl/record/ssl3_record_tls13.c", + ], + "ssl/s3_cbc.o" => + [ + "ssl/s3_cbc.c", + ], + "ssl/s3_enc.o" => + [ + "ssl/s3_enc.c", + ], + "ssl/s3_lib.o" => + [ + "ssl/s3_lib.c", + ], + "ssl/s3_msg.o" => + [ + "ssl/s3_msg.c", + ], + "ssl/ssl_asn1.o" => + [ + "ssl/ssl_asn1.c", + ], + "ssl/ssl_cert.o" => + [ + "ssl/ssl_cert.c", + ], + "ssl/ssl_ciph.o" => + [ + "ssl/ssl_ciph.c", + ], + "ssl/ssl_conf.o" => + [ + "ssl/ssl_conf.c", + ], + "ssl/ssl_err.o" => + [ + "ssl/ssl_err.c", + ], + "ssl/ssl_init.o" => + [ + "ssl/ssl_init.c", + ], + "ssl/ssl_lib.o" => + [ + "ssl/ssl_lib.c", + ], + "ssl/ssl_mcnf.o" => + [ + "ssl/ssl_mcnf.c", + ], + "ssl/ssl_rsa.o" => + [ + "ssl/ssl_rsa.c", + ], + "ssl/ssl_sess.o" => + [ + "ssl/ssl_sess.c", + ], + "ssl/ssl_stat.o" => + [ + "ssl/ssl_stat.c", + ], + "ssl/ssl_txt.o" => + [ + "ssl/ssl_txt.c", + ], + "ssl/ssl_utst.o" => + [ + "ssl/ssl_utst.c", + ], + "ssl/statem/extensions.o" => + [ + "ssl/statem/extensions.c", + ], + "ssl/statem/extensions_clnt.o" => + [ + "ssl/statem/extensions_clnt.c", + ], + "ssl/statem/extensions_cust.o" => + [ + "ssl/statem/extensions_cust.c", + ], + "ssl/statem/extensions_srvr.o" => + [ + "ssl/statem/extensions_srvr.c", + ], + "ssl/statem/statem.o" => + [ + "ssl/statem/statem.c", + ], + "ssl/statem/statem_clnt.o" => + [ + "ssl/statem/statem_clnt.c", + ], + "ssl/statem/statem_dtls.o" => + [ + "ssl/statem/statem_dtls.c", + ], + "ssl/statem/statem_lib.o" => + [ + "ssl/statem/statem_lib.c", + ], + "ssl/statem/statem_srvr.o" => + [ + "ssl/statem/statem_srvr.c", + ], + "ssl/t1_enc.o" => + [ + "ssl/t1_enc.c", + ], + "ssl/t1_lib.o" => + [ + "ssl/t1_lib.c", + ], + "ssl/t1_trce.o" => + [ + "ssl/t1_trce.c", + ], + "ssl/tls13_enc.o" => + [ + "ssl/tls13_enc.c", + ], + "ssl/tls_srp.o" => + [ + "ssl/tls_srp.c", + ], + "test/aborttest" => + [ + "test/aborttest.o", + ], + "test/aborttest.o" => + [ + "test/aborttest.c", + ], + "test/afalgtest" => + [ + "test/afalgtest.o", + ], + "test/afalgtest.o" => + [ + "test/afalgtest.c", + ], + "test/asn1_decode_test" => + [ + "test/asn1_decode_test.o", + ], + "test/asn1_decode_test.o" => + [ + "test/asn1_decode_test.c", + ], + "test/asn1_encode_test" => + [ + "test/asn1_encode_test.o", + ], + "test/asn1_encode_test.o" => + [ + "test/asn1_encode_test.c", + ], + "test/asn1_internal_test" => + [ + "test/asn1_internal_test.o", + ], + "test/asn1_internal_test.o" => + [ + "test/asn1_internal_test.c", + ], + "test/asn1_string_table_test" => + [ + "test/asn1_string_table_test.o", + ], + "test/asn1_string_table_test.o" => + [ + "test/asn1_string_table_test.c", + ], + "test/asn1_time_test" => + [ + "test/asn1_time_test.o", + ], + "test/asn1_time_test.o" => + [ + "test/asn1_time_test.c", + ], + "test/asynciotest" => + [ + "test/asynciotest.o", + "test/ssltestlib.o", + ], + "test/asynciotest.o" => + [ + "test/asynciotest.c", + ], + "test/asynctest" => + [ + "test/asynctest.o", + ], + "test/asynctest.o" => + [ + "test/asynctest.c", + ], + "test/bad_dtls_test" => + [ + "test/bad_dtls_test.o", + ], + "test/bad_dtls_test.o" => + [ + "test/bad_dtls_test.c", + ], + "test/bftest" => + [ + "test/bftest.o", + ], + "test/bftest.o" => + [ + "test/bftest.c", + ], + "test/bio_callback_test" => + [ + "test/bio_callback_test.o", + ], + "test/bio_callback_test.o" => + [ + "test/bio_callback_test.c", + ], + "test/bio_enc_test" => + [ + "test/bio_enc_test.o", + ], + "test/bio_enc_test.o" => + [ + "test/bio_enc_test.c", + ], + "test/bio_memleak_test" => + [ + "test/bio_memleak_test.o", + ], + "test/bio_memleak_test.o" => + [ + "test/bio_memleak_test.c", + ], + "test/bioprinttest" => + [ + "test/bioprinttest.o", + ], + "test/bioprinttest.o" => + [ + "test/bioprinttest.c", + ], + "test/bntest" => + [ + "test/bntest.o", + ], + "test/bntest.o" => + [ + "test/bntest.c", + ], + "test/buildtest_aes.o" => + [ + "test/buildtest_aes.c", + ], + "test/buildtest_asn1.o" => + [ + "test/buildtest_asn1.c", + ], + "test/buildtest_asn1t.o" => + [ + "test/buildtest_asn1t.c", + ], + "test/buildtest_async.o" => + [ + "test/buildtest_async.c", + ], + "test/buildtest_bio.o" => + [ + "test/buildtest_bio.c", + ], + "test/buildtest_blowfish.o" => + [ + "test/buildtest_blowfish.c", + ], + "test/buildtest_bn.o" => + [ + "test/buildtest_bn.c", + ], + "test/buildtest_buffer.o" => + [ + "test/buildtest_buffer.c", + ], + "test/buildtest_c_aes" => + [ + "test/buildtest_aes.o", + ], + "test/buildtest_c_asn1" => + [ + "test/buildtest_asn1.o", + ], + "test/buildtest_c_asn1t" => + [ + "test/buildtest_asn1t.o", + ], + "test/buildtest_c_async" => + [ + "test/buildtest_async.o", + ], + "test/buildtest_c_bio" => + [ + "test/buildtest_bio.o", + ], + "test/buildtest_c_blowfish" => + [ + "test/buildtest_blowfish.o", + ], + "test/buildtest_c_bn" => + [ + "test/buildtest_bn.o", + ], + "test/buildtest_c_buffer" => + [ + "test/buildtest_buffer.o", + ], + "test/buildtest_c_camellia" => + [ + "test/buildtest_camellia.o", + ], + "test/buildtest_c_cast" => + [ + "test/buildtest_cast.o", + ], + "test/buildtest_c_cmac" => + [ + "test/buildtest_cmac.o", + ], + "test/buildtest_c_cms" => + [ + "test/buildtest_cms.o", + ], + "test/buildtest_c_conf" => + [ + "test/buildtest_conf.o", + ], + "test/buildtest_c_conf_api" => + [ + "test/buildtest_conf_api.o", + ], + "test/buildtest_c_crypto" => + [ + "test/buildtest_crypto.o", + ], + "test/buildtest_c_ct" => + [ + "test/buildtest_ct.o", + ], + "test/buildtest_c_des" => + [ + "test/buildtest_des.o", + ], + "test/buildtest_c_dh" => + [ + "test/buildtest_dh.o", + ], + "test/buildtest_c_dsa" => + [ + "test/buildtest_dsa.o", + ], + "test/buildtest_c_dtls1" => + [ + "test/buildtest_dtls1.o", + ], + "test/buildtest_c_e_os2" => + [ + "test/buildtest_e_os2.o", + ], + "test/buildtest_c_ebcdic" => + [ + "test/buildtest_ebcdic.o", + ], + "test/buildtest_c_ec" => + [ + "test/buildtest_ec.o", + ], + "test/buildtest_c_ecdh" => + [ + "test/buildtest_ecdh.o", + ], + "test/buildtest_c_ecdsa" => + [ + "test/buildtest_ecdsa.o", + ], + "test/buildtest_c_engine" => + [ + "test/buildtest_engine.o", + ], + "test/buildtest_c_evp" => + [ + "test/buildtest_evp.o", + ], + "test/buildtest_c_hmac" => + [ + "test/buildtest_hmac.o", + ], + "test/buildtest_c_idea" => + [ + "test/buildtest_idea.o", + ], + "test/buildtest_c_kdf" => + [ + "test/buildtest_kdf.o", + ], + "test/buildtest_c_lhash" => + [ + "test/buildtest_lhash.o", + ], + "test/buildtest_c_md4" => + [ + "test/buildtest_md4.o", + ], + "test/buildtest_c_md5" => + [ + "test/buildtest_md5.o", + ], + "test/buildtest_c_mdc2" => + [ + "test/buildtest_mdc2.o", + ], + "test/buildtest_c_modes" => + [ + "test/buildtest_modes.o", + ], + "test/buildtest_c_obj_mac" => + [ + "test/buildtest_obj_mac.o", + ], + "test/buildtest_c_objects" => + [ + "test/buildtest_objects.o", + ], + "test/buildtest_c_ocsp" => + [ + "test/buildtest_ocsp.o", + ], + "test/buildtest_c_opensslv" => + [ + "test/buildtest_opensslv.o", + ], + "test/buildtest_c_ossl_typ" => + [ + "test/buildtest_ossl_typ.o", + ], + "test/buildtest_c_pem" => + [ + "test/buildtest_pem.o", + ], + "test/buildtest_c_pem2" => + [ + "test/buildtest_pem2.o", + ], + "test/buildtest_c_pkcs12" => + [ + "test/buildtest_pkcs12.o", + ], + "test/buildtest_c_pkcs7" => + [ + "test/buildtest_pkcs7.o", + ], + "test/buildtest_c_rand" => + [ + "test/buildtest_rand.o", + ], + "test/buildtest_c_rand_drbg" => + [ + "test/buildtest_rand_drbg.o", + ], + "test/buildtest_c_rc2" => + [ + "test/buildtest_rc2.o", + ], + "test/buildtest_c_rc4" => + [ + "test/buildtest_rc4.o", + ], + "test/buildtest_c_ripemd" => + [ + "test/buildtest_ripemd.o", + ], + "test/buildtest_c_rsa" => + [ + "test/buildtest_rsa.o", + ], + "test/buildtest_c_safestack" => + [ + "test/buildtest_safestack.o", + ], + "test/buildtest_c_seed" => + [ + "test/buildtest_seed.o", + ], + "test/buildtest_c_sha" => + [ + "test/buildtest_sha.o", + ], + "test/buildtest_c_srp" => + [ + "test/buildtest_srp.o", + ], + "test/buildtest_c_srtp" => + [ + "test/buildtest_srtp.o", + ], + "test/buildtest_c_ssl" => + [ + "test/buildtest_ssl.o", + ], + "test/buildtest_c_ssl2" => + [ + "test/buildtest_ssl2.o", + ], + "test/buildtest_c_stack" => + [ + "test/buildtest_stack.o", + ], + "test/buildtest_c_store" => + [ + "test/buildtest_store.o", + ], + "test/buildtest_c_symhacks" => + [ + "test/buildtest_symhacks.o", + ], + "test/buildtest_c_tls1" => + [ + "test/buildtest_tls1.o", + ], + "test/buildtest_c_ts" => + [ + "test/buildtest_ts.o", + ], + "test/buildtest_c_txt_db" => + [ + "test/buildtest_txt_db.o", + ], + "test/buildtest_c_ui" => + [ + "test/buildtest_ui.o", + ], + "test/buildtest_c_whrlpool" => + [ + "test/buildtest_whrlpool.o", + ], + "test/buildtest_c_x509" => + [ + "test/buildtest_x509.o", + ], + "test/buildtest_c_x509_vfy" => + [ + "test/buildtest_x509_vfy.o", + ], + "test/buildtest_c_x509v3" => + [ + "test/buildtest_x509v3.o", + ], + "test/buildtest_camellia.o" => + [ + "test/buildtest_camellia.c", + ], + "test/buildtest_cast.o" => + [ + "test/buildtest_cast.c", + ], + "test/buildtest_cmac.o" => + [ + "test/buildtest_cmac.c", + ], + "test/buildtest_cms.o" => + [ + "test/buildtest_cms.c", + ], + "test/buildtest_conf.o" => + [ + "test/buildtest_conf.c", + ], + "test/buildtest_conf_api.o" => + [ + "test/buildtest_conf_api.c", + ], + "test/buildtest_crypto.o" => + [ + "test/buildtest_crypto.c", + ], + "test/buildtest_ct.o" => + [ + "test/buildtest_ct.c", + ], + "test/buildtest_des.o" => + [ + "test/buildtest_des.c", + ], + "test/buildtest_dh.o" => + [ + "test/buildtest_dh.c", + ], + "test/buildtest_dsa.o" => + [ + "test/buildtest_dsa.c", + ], + "test/buildtest_dtls1.o" => + [ + "test/buildtest_dtls1.c", + ], + "test/buildtest_e_os2.o" => + [ + "test/buildtest_e_os2.c", + ], + "test/buildtest_ebcdic.o" => + [ + "test/buildtest_ebcdic.c", + ], + "test/buildtest_ec.o" => + [ + "test/buildtest_ec.c", + ], + "test/buildtest_ecdh.o" => + [ + "test/buildtest_ecdh.c", + ], + "test/buildtest_ecdsa.o" => + [ + "test/buildtest_ecdsa.c", + ], + "test/buildtest_engine.o" => + [ + "test/buildtest_engine.c", + ], + "test/buildtest_evp.o" => + [ + "test/buildtest_evp.c", + ], + "test/buildtest_hmac.o" => + [ + "test/buildtest_hmac.c", + ], + "test/buildtest_idea.o" => + [ + "test/buildtest_idea.c", + ], + "test/buildtest_kdf.o" => + [ + "test/buildtest_kdf.c", + ], + "test/buildtest_lhash.o" => + [ + "test/buildtest_lhash.c", + ], + "test/buildtest_md4.o" => + [ + "test/buildtest_md4.c", + ], + "test/buildtest_md5.o" => + [ + "test/buildtest_md5.c", + ], + "test/buildtest_mdc2.o" => + [ + "test/buildtest_mdc2.c", + ], + "test/buildtest_modes.o" => + [ + "test/buildtest_modes.c", + ], + "test/buildtest_obj_mac.o" => + [ + "test/buildtest_obj_mac.c", + ], + "test/buildtest_objects.o" => + [ + "test/buildtest_objects.c", + ], + "test/buildtest_ocsp.o" => + [ + "test/buildtest_ocsp.c", + ], + "test/buildtest_opensslv.o" => + [ + "test/buildtest_opensslv.c", + ], + "test/buildtest_ossl_typ.o" => + [ + "test/buildtest_ossl_typ.c", + ], + "test/buildtest_pem.o" => + [ + "test/buildtest_pem.c", + ], + "test/buildtest_pem2.o" => + [ + "test/buildtest_pem2.c", + ], + "test/buildtest_pkcs12.o" => + [ + "test/buildtest_pkcs12.c", + ], + "test/buildtest_pkcs7.o" => + [ + "test/buildtest_pkcs7.c", + ], + "test/buildtest_rand.o" => + [ + "test/buildtest_rand.c", + ], + "test/buildtest_rand_drbg.o" => + [ + "test/buildtest_rand_drbg.c", + ], + "test/buildtest_rc2.o" => + [ + "test/buildtest_rc2.c", + ], + "test/buildtest_rc4.o" => + [ + "test/buildtest_rc4.c", + ], + "test/buildtest_ripemd.o" => + [ + "test/buildtest_ripemd.c", + ], + "test/buildtest_rsa.o" => + [ + "test/buildtest_rsa.c", + ], + "test/buildtest_safestack.o" => + [ + "test/buildtest_safestack.c", + ], + "test/buildtest_seed.o" => + [ + "test/buildtest_seed.c", + ], + "test/buildtest_sha.o" => + [ + "test/buildtest_sha.c", + ], + "test/buildtest_srp.o" => + [ + "test/buildtest_srp.c", + ], + "test/buildtest_srtp.o" => + [ + "test/buildtest_srtp.c", + ], + "test/buildtest_ssl.o" => + [ + "test/buildtest_ssl.c", + ], + "test/buildtest_ssl2.o" => + [ + "test/buildtest_ssl2.c", + ], + "test/buildtest_stack.o" => + [ + "test/buildtest_stack.c", + ], + "test/buildtest_store.o" => + [ + "test/buildtest_store.c", + ], + "test/buildtest_symhacks.o" => + [ + "test/buildtest_symhacks.c", + ], + "test/buildtest_tls1.o" => + [ + "test/buildtest_tls1.c", + ], + "test/buildtest_ts.o" => + [ + "test/buildtest_ts.c", + ], + "test/buildtest_txt_db.o" => + [ + "test/buildtest_txt_db.c", + ], + "test/buildtest_ui.o" => + [ + "test/buildtest_ui.c", + ], + "test/buildtest_whrlpool.o" => + [ + "test/buildtest_whrlpool.c", + ], + "test/buildtest_x509.o" => + [ + "test/buildtest_x509.c", + ], + "test/buildtest_x509_vfy.o" => + [ + "test/buildtest_x509_vfy.c", + ], + "test/buildtest_x509v3.o" => + [ + "test/buildtest_x509v3.c", + ], + "test/casttest" => + [ + "test/casttest.o", + ], + "test/casttest.o" => + [ + "test/casttest.c", + ], + "test/chacha_internal_test" => + [ + "test/chacha_internal_test.o", + ], + "test/chacha_internal_test.o" => + [ + "test/chacha_internal_test.c", + ], + "test/cipher_overhead_test" => + [ + "test/cipher_overhead_test.o", + ], + "test/cipher_overhead_test.o" => + [ + "test/cipher_overhead_test.c", + ], + "test/cipherbytes_test" => + [ + "test/cipherbytes_test.o", + ], + "test/cipherbytes_test.o" => + [ + "test/cipherbytes_test.c", + ], + "test/cipherlist_test" => + [ + "test/cipherlist_test.o", + ], + "test/cipherlist_test.o" => + [ + "test/cipherlist_test.c", + ], + "test/ciphername_test" => + [ + "test/ciphername_test.o", + ], + "test/ciphername_test.o" => + [ + "test/ciphername_test.c", + ], + "test/clienthellotest" => + [ + "test/clienthellotest.o", + ], + "test/clienthellotest.o" => + [ + "test/clienthellotest.c", + ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], + "test/cmsapitest" => + [ + "test/cmsapitest.o", + ], + "test/cmsapitest.o" => + [ + "test/cmsapitest.c", + ], + "test/conf_include_test" => + [ + "test/conf_include_test.o", + ], + "test/conf_include_test.o" => + [ + "test/conf_include_test.c", + ], + "test/constant_time_test" => + [ + "test/constant_time_test.o", + ], + "test/constant_time_test.o" => + [ + "test/constant_time_test.c", + ], + "test/crltest" => + [ + "test/crltest.o", + ], + "test/crltest.o" => + [ + "test/crltest.c", + ], + "test/ct_test" => + [ + "test/ct_test.o", + ], + "test/ct_test.o" => + [ + "test/ct_test.c", + ], + "test/ctype_internal_test" => + [ + "test/ctype_internal_test.o", + ], + "test/ctype_internal_test.o" => + [ + "test/ctype_internal_test.c", + ], + "test/curve448_internal_test" => + [ + "test/curve448_internal_test.o", + ], + "test/curve448_internal_test.o" => + [ + "test/curve448_internal_test.c", + ], + "test/d2i_test" => + [ + "test/d2i_test.o", + ], + "test/d2i_test.o" => + [ + "test/d2i_test.c", + ], + "test/danetest" => + [ + "test/danetest.o", + ], + "test/danetest.o" => + [ + "test/danetest.c", + ], + "test/destest" => + [ + "test/destest.o", + ], + "test/destest.o" => + [ + "test/destest.c", + ], + "test/dhtest" => + [ + "test/dhtest.o", + ], + "test/dhtest.o" => + [ + "test/dhtest.c", + ], + "test/drbg_cavs_data.o" => + [ + "test/drbg_cavs_data.c", + ], + "test/drbg_cavs_test" => + [ + "test/drbg_cavs_data.o", + "test/drbg_cavs_test.o", + ], + "test/drbg_cavs_test.o" => + [ + "test/drbg_cavs_test.c", + ], + "test/drbgtest" => + [ + "test/drbgtest.o", + ], + "test/drbgtest.o" => + [ + "test/drbgtest.c", + ], + "test/dsa_no_digest_size_test" => + [ + "test/dsa_no_digest_size_test.o", + ], + "test/dsa_no_digest_size_test.o" => + [ + "test/dsa_no_digest_size_test.c", + ], + "test/dsatest" => + [ + "test/dsatest.o", + ], + "test/dsatest.o" => + [ + "test/dsatest.c", + ], + "test/dtls_mtu_test" => + [ + "test/dtls_mtu_test.o", + "test/ssltestlib.o", + ], + "test/dtls_mtu_test.o" => + [ + "test/dtls_mtu_test.c", + ], + "test/dtlstest" => + [ + "test/dtlstest.o", + "test/ssltestlib.o", + ], + "test/dtlstest.o" => + [ + "test/dtlstest.c", + ], + "test/dtlsv1listentest" => + [ + "test/dtlsv1listentest.o", + ], + "test/dtlsv1listentest.o" => + [ + "test/dtlsv1listentest.c", + ], + "test/ec_internal_test" => + [ + "test/ec_internal_test.o", + ], + "test/ec_internal_test.o" => + [ + "test/ec_internal_test.c", + ], + "test/ecdsatest" => + [ + "test/ecdsatest.o", + ], + "test/ecdsatest.o" => + [ + "test/ecdsatest.c", + ], + "test/ecstresstest" => + [ + "test/ecstresstest.o", + ], + "test/ecstresstest.o" => + [ + "test/ecstresstest.c", + ], + "test/ectest" => + [ + "test/ectest.o", + ], + "test/ectest.o" => + [ + "test/ectest.c", + ], + "test/enginetest" => + [ + "test/enginetest.o", + ], + "test/enginetest.o" => + [ + "test/enginetest.c", + ], + "test/errtest" => + [ + "test/errtest.o", + ], + "test/errtest.o" => + [ + "test/errtest.c", + ], + "test/evp_extra_test" => + [ + "test/evp_extra_test.o", + ], + "test/evp_extra_test.o" => + [ + "test/evp_extra_test.c", + ], + "test/evp_test" => + [ + "test/evp_test.o", + ], + "test/evp_test.o" => + [ + "test/evp_test.c", + ], + "test/exdatatest" => + [ + "test/exdatatest.o", + ], + "test/exdatatest.o" => + [ + "test/exdatatest.c", + ], + "test/exptest" => + [ + "test/exptest.o", + ], + "test/exptest.o" => + [ + "test/exptest.c", + ], + "test/fatalerrtest" => + [ + "test/fatalerrtest.o", + "test/ssltestlib.o", + ], + "test/fatalerrtest.o" => + [ + "test/fatalerrtest.c", + ], + "test/gmdifftest" => + [ + "test/gmdifftest.o", + ], + "test/gmdifftest.o" => + [ + "test/gmdifftest.c", + ], + "test/gosttest" => + [ + "test/gosttest.o", + "test/ssltestlib.o", + ], + "test/gosttest.o" => + [ + "test/gosttest.c", + ], + "test/handshake_helper.o" => + [ + "test/handshake_helper.c", + ], + "test/hmactest" => + [ + "test/hmactest.o", + ], + "test/hmactest.o" => + [ + "test/hmactest.c", + ], + "test/ideatest" => + [ + "test/ideatest.o", + ], + "test/ideatest.o" => + [ + "test/ideatest.c", + ], + "test/igetest" => + [ + "test/igetest.o", + ], + "test/igetest.o" => + [ + "test/igetest.c", + ], + "test/lhash_test" => + [ + "test/lhash_test.o", + ], + "test/lhash_test.o" => + [ + "test/lhash_test.c", + ], + "test/libtestutil.a" => + [ + "test/testutil/basic_output.o", + "test/testutil/cb.o", + "test/testutil/driver.o", + "test/testutil/format_output.o", + "test/testutil/main.o", + "test/testutil/output_helpers.o", + "test/testutil/random.o", + "test/testutil/stanza.o", + "test/testutil/tap_bio.o", + "test/testutil/test_cleanup.o", + "test/testutil/tests.o", + "test/testutil/testutil_init.o", + ], + "test/md2test" => + [ + "test/md2test.o", + ], + "test/md2test.o" => + [ + "test/md2test.c", + ], + "test/mdc2_internal_test" => + [ + "test/mdc2_internal_test.o", + ], + "test/mdc2_internal_test.o" => + [ + "test/mdc2_internal_test.c", + ], + "test/mdc2test" => + [ + "test/mdc2test.o", + ], + "test/mdc2test.o" => + [ + "test/mdc2test.c", + ], + "test/memleaktest" => + [ + "test/memleaktest.o", + ], + "test/memleaktest.o" => + [ + "test/memleaktest.c", + ], + "test/modes_internal_test" => + [ + "test/modes_internal_test.o", + ], + "test/modes_internal_test.o" => + [ + "test/modes_internal_test.c", + ], + "test/ocspapitest" => + [ + "test/ocspapitest.o", + ], + "test/ocspapitest.o" => + [ + "test/ocspapitest.c", + ], + "test/packettest" => + [ + "test/packettest.o", + ], + "test/packettest.o" => + [ + "test/packettest.c", + ], + "test/pbelutest" => + [ + "test/pbelutest.o", + ], + "test/pbelutest.o" => + [ + "test/pbelutest.c", + ], + "test/pemtest" => + [ + "test/pemtest.o", + ], + "test/pemtest.o" => + [ + "test/pemtest.c", + ], + "test/pkey_meth_kdf_test" => + [ + "test/pkey_meth_kdf_test.o", + ], + "test/pkey_meth_kdf_test.o" => + [ + "test/pkey_meth_kdf_test.c", + ], + "test/pkey_meth_test" => + [ + "test/pkey_meth_test.o", + ], + "test/pkey_meth_test.o" => + [ + "test/pkey_meth_test.c", + ], + "test/poly1305_internal_test" => + [ + "test/poly1305_internal_test.o", + ], + "test/poly1305_internal_test.o" => + [ + "test/poly1305_internal_test.c", + ], + "test/rc2test" => + [ + "test/rc2test.o", + ], + "test/rc2test.o" => + [ + "test/rc2test.c", + ], + "test/rc4test" => + [ + "test/rc4test.o", + ], + "test/rc4test.o" => + [ + "test/rc4test.c", + ], + "test/rc5test" => + [ + "test/rc5test.o", + ], + "test/rc5test.o" => + [ + "test/rc5test.c", + ], + "test/rdrand_sanitytest" => + [ + "test/rdrand_sanitytest.o", + ], + "test/rdrand_sanitytest.o" => + [ + "test/rdrand_sanitytest.c", + ], + "test/recordlentest" => + [ + "test/recordlentest.o", + "test/ssltestlib.o", + ], + "test/recordlentest.o" => + [ + "test/recordlentest.c", + ], + "test/rsa_complex" => + [ + "test/rsa_complex.o", + ], + "test/rsa_complex.o" => + [ + "test/rsa_complex.c", + ], + "test/rsa_mp_test" => + [ + "test/rsa_mp_test.o", + ], + "test/rsa_mp_test.o" => + [ + "test/rsa_mp_test.c", + ], + "test/rsa_test" => + [ + "test/rsa_test.o", + ], + "test/rsa_test.o" => + [ + "test/rsa_test.c", + ], + "test/sanitytest" => + [ + "test/sanitytest.o", + ], + "test/sanitytest.o" => + [ + "test/sanitytest.c", + ], + "test/secmemtest" => + [ + "test/secmemtest.o", + ], + "test/secmemtest.o" => + [ + "test/secmemtest.c", + ], + "test/servername_test" => + [ + "test/servername_test.o", + "test/ssltestlib.o", + ], + "test/servername_test.o" => + [ + "test/servername_test.c", + ], + "test/siphash_internal_test" => + [ + "test/siphash_internal_test.o", + ], + "test/siphash_internal_test.o" => + [ + "test/siphash_internal_test.c", + ], + "test/sm2_internal_test" => + [ + "test/sm2_internal_test.o", + ], + "test/sm2_internal_test.o" => + [ + "test/sm2_internal_test.c", + ], + "test/sm4_internal_test" => + [ + "test/sm4_internal_test.o", + ], + "test/sm4_internal_test.o" => + [ + "test/sm4_internal_test.c", + ], + "test/srptest" => + [ + "test/srptest.o", + ], + "test/srptest.o" => + [ + "test/srptest.c", + ], + "test/ssl_cert_table_internal_test" => + [ + "test/ssl_cert_table_internal_test.o", + ], + "test/ssl_cert_table_internal_test.o" => + [ + "test/ssl_cert_table_internal_test.c", + ], + "test/ssl_ctx_test" => + [ + "test/ssl_ctx_test.o", + ], + "test/ssl_ctx_test.o" => + [ + "test/ssl_ctx_test.c", + ], + "test/ssl_test" => + [ + "test/handshake_helper.o", + "test/ssl_test.o", + "test/ssl_test_ctx.o", + ], + "test/ssl_test.o" => + [ + "test/ssl_test.c", + ], + "test/ssl_test_ctx.o" => + [ + "test/ssl_test_ctx.c", + ], + "test/ssl_test_ctx_test" => + [ + "test/ssl_test_ctx.o", + "test/ssl_test_ctx_test.o", + ], + "test/ssl_test_ctx_test.o" => + [ + "test/ssl_test_ctx_test.c", + ], + "test/sslapitest" => + [ + "test/sslapitest.o", + "test/ssltestlib.o", + ], + "test/sslapitest.o" => + [ + "test/sslapitest.c", + ], + "test/sslbuffertest" => + [ + "test/sslbuffertest.o", + "test/ssltestlib.o", + ], + "test/sslbuffertest.o" => + [ + "test/sslbuffertest.c", + ], + "test/sslcorrupttest" => + [ + "test/sslcorrupttest.o", + "test/ssltestlib.o", + ], + "test/sslcorrupttest.o" => + [ + "test/sslcorrupttest.c", + ], + "test/ssltest_old" => + [ + "test/ssltest_old.o", + ], + "test/ssltest_old.o" => + [ + "test/ssltest_old.c", + ], + "test/ssltestlib.o" => + [ + "test/ssltestlib.c", + ], + "test/stack_test" => + [ + "test/stack_test.o", + ], + "test/stack_test.o" => + [ + "test/stack_test.c", + ], + "test/sysdefaulttest" => + [ + "test/sysdefaulttest.o", + ], + "test/sysdefaulttest.o" => + [ + "test/sysdefaulttest.c", + ], + "test/test_test" => + [ + "test/test_test.o", + ], + "test/test_test.o" => + [ + "test/test_test.c", + ], + "test/testutil/basic_output.o" => + [ + "test/testutil/basic_output.c", + ], + "test/testutil/cb.o" => + [ + "test/testutil/cb.c", + ], + "test/testutil/driver.o" => + [ + "test/testutil/driver.c", + ], + "test/testutil/format_output.o" => + [ + "test/testutil/format_output.c", + ], + "test/testutil/main.o" => + [ + "test/testutil/main.c", + ], + "test/testutil/output_helpers.o" => + [ + "test/testutil/output_helpers.c", + ], + "test/testutil/random.o" => + [ + "test/testutil/random.c", + ], + "test/testutil/stanza.o" => + [ + "test/testutil/stanza.c", + ], + "test/testutil/tap_bio.o" => + [ + "test/testutil/tap_bio.c", + ], + "test/testutil/test_cleanup.o" => + [ + "test/testutil/test_cleanup.c", + ], + "test/testutil/tests.o" => + [ + "test/testutil/tests.c", + ], + "test/testutil/testutil_init.o" => + [ + "test/testutil/testutil_init.c", + ], + "test/threadstest" => + [ + "test/threadstest.o", + ], + "test/threadstest.o" => + [ + "test/threadstest.c", + ], + "test/time_offset_test" => + [ + "test/time_offset_test.o", + ], + "test/time_offset_test.o" => + [ + "test/time_offset_test.c", + ], + "test/tls13ccstest" => + [ + "test/ssltestlib.o", + "test/tls13ccstest.o", + ], + "test/tls13ccstest.o" => + [ + "test/tls13ccstest.c", + ], + "test/tls13encryptiontest" => + [ + "test/tls13encryptiontest.o", + ], + "test/tls13encryptiontest.o" => + [ + "test/tls13encryptiontest.c", + ], + "test/uitest" => + [ + "test/uitest.o", + ], + "test/uitest.o" => + [ + "test/uitest.c", + ], + "test/v3ext" => + [ + "test/v3ext.o", + ], + "test/v3ext.o" => + [ + "test/v3ext.c", + ], + "test/v3nametest" => + [ + "test/v3nametest.o", + ], + "test/v3nametest.o" => + [ + "test/v3nametest.c", + ], + "test/verify_extra_test" => + [ + "test/verify_extra_test.o", + ], + "test/verify_extra_test.o" => + [ + "test/verify_extra_test.c", + ], + "test/versions" => + [ + "test/versions.o", + ], + "test/versions.o" => + [ + "test/versions.c", + ], + "test/wpackettest" => + [ + "test/wpackettest.o", + ], + "test/wpackettest.o" => + [ + "test/wpackettest.c", + ], + "test/x509_check_cert_pkey_test" => + [ + "test/x509_check_cert_pkey_test.o", + ], + "test/x509_check_cert_pkey_test.o" => + [ + "test/x509_check_cert_pkey_test.c", + ], + "test/x509_dup_cert_test" => + [ + "test/x509_dup_cert_test.o", + ], + "test/x509_dup_cert_test.o" => + [ + "test/x509_dup_cert_test.c", + ], + "test/x509_internal_test" => + [ + "test/x509_internal_test.o", + ], + "test/x509_internal_test.o" => + [ + "test/x509_internal_test.c", + ], + "test/x509_time_test" => + [ + "test/x509_time_test.o", + ], + "test/x509_time_test.o" => + [ + "test/x509_time_test.c", + ], + "test/x509aux" => + [ + "test/x509aux.o", + ], + "test/x509aux.o" => + [ + "test/x509aux.c", + ], + "tools/c_rehash" => + [ + "tools/c_rehash.in", + ], + "util/shlib_wrap.sh" => + [ + "util/shlib_wrap.sh.in", + ], + }, +); + +# The following data is only used when this files is use as a script +my @makevars = ( + 'AR', + 'ARFLAGS', + 'AS', + 'ASFLAGS', + 'CC', + 'CFLAGS', + 'CPP', + 'CPPDEFINES', + 'CPPFLAGS', + 'CPPINCLUDES', + 'CROSS_COMPILE', + 'CXX', + 'CXXFLAGS', + 'HASHBANGPERL', + 'LD', + 'LDFLAGS', + 'LDLIBS', + 'MT', + 'MTFLAGS', + 'PERL', + 'RANLIB', + 'RC', + 'RCFLAGS', + 'RM', +); +my %disabled_info = ( + 'afalgeng' => { + macro => 'OPENSSL_NO_AFALGENG', + }, + 'asan' => { + macro => 'OPENSSL_NO_ASAN', + }, + 'asm' => { + macro => 'OPENSSL_NO_ASM', + }, + 'comp' => { + macro => 'OPENSSL_NO_COMP', + skipped => [ 'crypto/comp' ], + }, + 'crypto-mdebug' => { + macro => 'OPENSSL_NO_CRYPTO_MDEBUG', + }, + 'crypto-mdebug-backtrace' => { + macro => 'OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE', + }, + 'devcryptoeng' => { + macro => 'OPENSSL_NO_DEVCRYPTOENG', + }, + 'ec_nistp_64_gcc_128' => { + macro => 'OPENSSL_NO_EC_NISTP_64_GCC_128', + }, + 'egd' => { + macro => 'OPENSSL_NO_EGD', + }, + 'external-tests' => { + macro => 'OPENSSL_NO_EXTERNAL_TESTS', + }, + 'fuzz-afl' => { + macro => 'OPENSSL_NO_FUZZ_AFL', + }, + 'fuzz-libfuzzer' => { + macro => 'OPENSSL_NO_FUZZ_LIBFUZZER', + }, + 'heartbeats' => { + macro => 'OPENSSL_NO_HEARTBEATS', + }, + 'md2' => { + macro => 'OPENSSL_NO_MD2', + skipped => [ 'crypto/md2' ], + }, + 'msan' => { + macro => 'OPENSSL_NO_MSAN', + }, + 'rc5' => { + macro => 'OPENSSL_NO_RC5', + skipped => [ 'crypto/rc5' ], + }, + 'sctp' => { + macro => 'OPENSSL_NO_SCTP', + }, + 'ssl3' => { + macro => 'OPENSSL_NO_SSL3', + }, + 'ssl3-method' => { + macro => 'OPENSSL_NO_SSL3_METHOD', + }, + 'ubsan' => { + macro => 'OPENSSL_NO_UBSAN', + }, + 'unit-test' => { + macro => 'OPENSSL_NO_UNIT_TEST', + }, + 'weak-ssl-ciphers' => { + macro => 'OPENSSL_NO_WEAK_SSL_CIPHERS', + }, +); +my @user_crossable = qw( AR AS CC CXX CPP LD MT RANLIB RC ); +# If run directly, we can give some answers, and even reconfigure +unless (caller) { + use Getopt::Long; + use File::Spec::Functions; + use File::Basename; + use Pod::Usage; + + my $here = dirname($0); + + my $dump = undef; + my $cmdline = undef; + my $options = undef; + my $target = undef; + my $envvars = undef; + my $makevars = undef; + my $buildparams = undef; + my $reconf = undef; + my $verbose = undef; + my $help = undef; + my $man = undef; + GetOptions('dump|d' => \$dump, + 'command-line|c' => \$cmdline, + 'options|o' => \$options, + 'target|t' => \$target, + 'environment|e' => \$envvars, + 'make-variables|m' => \$makevars, + 'build-parameters|b' => \$buildparams, + 'reconfigure|reconf|r' => \$reconf, + 'verbose|v' => \$verbose, + 'help' => \$help, + 'man' => \$man) + or die "Errors in command line arguments\n"; + + unless ($dump || $cmdline || $options || $target || $envvars || $makevars + || $buildparams || $reconf || $verbose || $help || $man) { + print STDERR <<"_____"; +You must give at least one option. +For more information, do '$0 --help' +_____ + exit(2); + } + + if ($help) { + pod2usage(-exitval => 0, + -verbose => 1); + } + if ($man) { + pod2usage(-exitval => 0, + -verbose => 2); + } + if ($dump || $cmdline) { + print "\nCommand line (with current working directory = $here):\n\n"; + print ' ',join(' ', + $config{PERL}, + catfile($config{sourcedir}, 'Configure'), + @{$config{perlargv}}), "\n"; + print "\nPerl information:\n\n"; + print ' ',$config{perl_cmd},"\n"; + print ' ',$config{perl_version},' for ',$config{perl_archname},"\n"; + } + if ($dump || $options) { + my $longest = 0; + my $longest2 = 0; + foreach my $what (@disablables) { + $longest = length($what) if $longest < length($what); + $longest2 = length($disabled{$what}) + if $disabled{$what} && $longest2 < length($disabled{$what}); + } + print "\nEnabled features:\n\n"; + foreach my $what (@disablables) { + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; + } + print "\nDisabled features:\n\n"; + foreach my $what (@disablables) { + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; + print ' (skip ', + join(', ', @{$disabled_info{$what3}->{skipped}}), + ')' + if $disabled_info{$what3}->{skipped}; + print "\n"; + } + } + } + if ($dump || $target) { + print "\nConfig target attributes:\n\n"; + foreach (sort keys %target) { + next if $_ =~ m|^_| || $_ eq 'template'; + my $quotify = sub { + map { (my $x = $_) =~ s|([\\\$\@"])|\\$1|g; "\"$x\""} @_; + }; + print ' ', $_, ' => '; + if (ref($target{$_}) eq "ARRAY") { + print '[ ', join(', ', $quotify->(@{$target{$_}})), " ],\n"; + } else { + print $quotify->($target{$_}), ",\n" + } + } + } + if ($dump || $envvars) { + print "\nRecorded environment:\n\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ''),"\n"; + } + } + if ($dump || $makevars) { + print "\nMakevars:\n\n"; + foreach my $var (@makevars) { + my $prefix = ''; + $prefix = $config{CROSS_COMPILE} + if grep { $var eq $_ } @user_crossable; + $prefix //= ''; + print ' ',$var,' ' x (16 - length $var),'= ', + (ref $config{$var} eq 'ARRAY' + ? join(' ', @{$config{$var}}) + : $prefix.$config{$var}), + "\n" + if defined $config{$var}; + } + + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + my $buildfile = canonpath(catdir(@buildfile)); + print <<"_____"; + +NOTE: These variables only represent the configuration view. The build file +template may have processed these variables further, please have a look at the +build file for more exact data: + $buildfile +_____ + } + if ($dump || $buildparams) { + my @buildfile = ($config{builddir}, $config{build_file}); + unshift @buildfile, $here + unless file_name_is_absolute($config{builddir}); + print "\nbuild file:\n\n"; + print " ", canonpath(catfile(@buildfile)),"\n"; + + print "\nbuild file templates:\n\n"; + foreach (@{$config{build_file_templates}}) { + my @tmpl = ($_); + unshift @tmpl, $here + unless file_name_is_absolute($config{sourcedir}); + print ' ',canonpath(catfile(@tmpl)),"\n"; + } + } + if ($reconf) { + if ($verbose) { + print 'Reconfiguring with: ', join(' ',@{$config{perlargv}}), "\n"; + foreach (sort keys %{$config{perlenv}}) { + print ' ',$_,' = ',($config{perlenv}->{$_} || ""),"\n"; + } + } + + chdir $here; + exec $^X,catfile($config{sourcedir}, 'Configure'),'reconf'; + } +} + +1; + +__END__ + +=head1 NAME + +configdata.pm - configuration data for OpenSSL builds + +=head1 SYNOPSIS + +Interactive: + + perl configdata.pm [options] + +As data bank module: + + use configdata; + +=head1 DESCRIPTION + +This module can be used in two modes, interactively and as a module containing +all the data recorded by OpenSSL's Configure script. + +When used interactively, simply run it as any perl script, with at least one +option, and you will get the information you ask for. See L below. + +When loaded as a module, you get a few databanks with useful information to +perform build related tasks. The databanks are: + + %config Configured things. + %target The OpenSSL config target with all inheritances + resolved. + %disabled The features that are disabled. + @disablables The list of features that can be disabled. + %withargs All data given through --with-THING options. + %unified_info All information that was computed from the build.info + files. + +=head1 OPTIONS + +=over 4 + +=item B<--help> + +Print a brief help message and exit. + +=item B<--man> + +Print the manual page and exit. + +=item B<--dump> | B<-d> + +Print all relevant configuration data. This is equivalent to B<--command-line> +B<--options> B<--target> B<--environment> B<--make-variables> +B<--build-parameters>. + +=item B<--command-line> | B<-c> + +Print the current configuration command line. + +=item B<--options> | B<-o> + +Print the features, both enabled and disabled, and display defined macro and +skipped directories where applicable. + +=item B<--target> | B<-t> + +Print the config attributes for this config target. + +=item B<--environment> | B<-e> + +Print the environment variables and their values at the time of configuration. + +=item B<--make-variables> | B<-m> + +Print the main make variables generated in the current configuration + +=item B<--build-parameters> | B<-b> + +Print the build parameters, i.e. build file and build file templates. + +=item B<--reconfigure> | B<--reconf> | B<-r> + +Redo the configuration. + +=item B<--verbose> | B<-v> + +Verbose output. + +=back + +=cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,28 @@ +/* + * WARNING: do not edit! + * Generated by util/mkbuildinf.pl + * + * Copyright 2014-2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#define PLATFORM "platform: darwin64-arm64-cc" +#define DATE "built on: Tue Mar 15 17:24:55 2022 UTC" + +/* + * Generate compiler_flags as an array of individual characters. This is a + * workaround for the situation where CFLAGS gets too long for a C90 string + * literal + */ +static const char compiler_flags[] = { + 'c','o','m','p','i','l','e','r',':',' ','c','c',' ','-','f','P', + 'I','C',' ','-','a','r','c','h',' ','a','r','m','6','4',' ','-', + 'O','3',' ','-','W','a','l','l',' ','-','D','L','_','E','N','D', + 'I','A','N',' ','-','D','O','P','E','N','S','S','L','_','P','I', + 'C',' ','-','D','_','R','E','E','N','T','R','A','N','T',' ','-', + 'D','N','D','E','B','U','G','\0' +}; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/bn_conf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/bn_conf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/bn_conf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/bn_conf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,28 @@ +/* WARNING: do not edit! */ +/* Generated by Makefile from include/crypto/bn_conf.h.in */ +/* + * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_BN_CONF_H +# define OSSL_CRYPTO_BN_CONF_H + +/* + * The contents of this file are not used in the UEFI build, as + * both 32-bit and 64-bit builds are supported from a single run + * of the Configure script. + */ + +/* Should we define BN_DIV2W here? */ + +/* Only one for the following should be defined */ +#define SIXTY_FOUR_BIT_LONG +#undef SIXTY_FOUR_BIT +#undef THIRTY_TWO_BIT + +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/dso_conf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/dso_conf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/dso_conf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/crypto/include/internal/dso_conf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,17 @@ +/* WARNING: do not edit! */ +/* Generated by Makefile from include/crypto/dso_conf.h.in */ +/* + * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_CRYPTO_DSO_CONF_H +# define OSSL_CRYPTO_DSO_CONF_H +# define DSO_DLFCN +# define HAVE_DLFCN_H +# define DSO_EXTENSION ".dylib" +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/include/openssl/opensslconf.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,206 @@ +/* + * WARNING: do not edit! + * Generated by Makefile from include/openssl/opensslconf.h.in + * + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef OPENSSL_ALGORITHM_DEFINES +# error OPENSSL_ALGORITHM_DEFINES no longer supported +#endif + +/* + * OpenSSL was configured with the following options: + */ + +#ifndef OPENSSL_SYS_MACOSX +# define OPENSSL_SYS_MACOSX 1 +#endif +#ifndef OPENSSL_NO_COMP +# define OPENSSL_NO_COMP +#endif +#ifndef OPENSSL_NO_MD2 +# define OPENSSL_NO_MD2 +#endif +#ifndef OPENSSL_NO_RC5 +# define OPENSSL_NO_RC5 +#endif +#ifndef OPENSSL_THREADS +# define OPENSSL_THREADS +#endif +#ifndef OPENSSL_RAND_SEED_OS +# define OPENSSL_RAND_SEED_OS +#endif +#ifndef OPENSSL_NO_AFALGENG +# define OPENSSL_NO_AFALGENG +#endif +#ifndef OPENSSL_NO_ASAN +# define OPENSSL_NO_ASAN +#endif +#ifndef OPENSSL_NO_ASM +# define OPENSSL_NO_ASM +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG +# define OPENSSL_NO_CRYPTO_MDEBUG +#endif +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +# define OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE +#endif +#ifndef OPENSSL_NO_DEVCRYPTOENG +# define OPENSSL_NO_DEVCRYPTOENG +#endif +#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 +# define OPENSSL_NO_EC_NISTP_64_GCC_128 +#endif +#ifndef OPENSSL_NO_EGD +# define OPENSSL_NO_EGD +#endif +#ifndef OPENSSL_NO_EXTERNAL_TESTS +# define OPENSSL_NO_EXTERNAL_TESTS +#endif +#ifndef OPENSSL_NO_FUZZ_AFL +# define OPENSSL_NO_FUZZ_AFL +#endif +#ifndef OPENSSL_NO_FUZZ_LIBFUZZER +# define OPENSSL_NO_FUZZ_LIBFUZZER +#endif +#ifndef OPENSSL_NO_HEARTBEATS +# define OPENSSL_NO_HEARTBEATS +#endif +#ifndef OPENSSL_NO_MSAN +# define OPENSSL_NO_MSAN +#endif +#ifndef OPENSSL_NO_SCTP +# define OPENSSL_NO_SCTP +#endif +#ifndef OPENSSL_NO_SSL3 +# define OPENSSL_NO_SSL3 +#endif +#ifndef OPENSSL_NO_SSL3_METHOD +# define OPENSSL_NO_SSL3_METHOD +#endif +#ifndef OPENSSL_NO_UBSAN +# define OPENSSL_NO_UBSAN +#endif +#ifndef OPENSSL_NO_UNIT_TEST +# define OPENSSL_NO_UNIT_TEST +#endif +#ifndef OPENSSL_NO_WEAK_SSL_CIPHERS +# define OPENSSL_NO_WEAK_SSL_CIPHERS +#endif +#ifndef OPENSSL_NO_DYNAMIC_ENGINE +# define OPENSSL_NO_DYNAMIC_ENGINE +#endif + + +/* + * Sometimes OPENSSSL_NO_xxx ends up with an empty file and some compilers + * don't like that. This will hopefully silence them. + */ +#define NON_EMPTY_TRANSLATION_UNIT static void *dummy = &dummy; + +/* + * Applications should use -DOPENSSL_API_COMPAT= to suppress the + * declarations of functions deprecated in or before . Otherwise, they + * still won't see them if the library has been built to disable deprecated + * functions. + */ +#ifndef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f; +# ifdef __GNUC__ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif +# endif +#endif + +#ifndef OPENSSL_FILE +# ifdef OPENSSL_NO_FILENAMES +# define OPENSSL_FILE "" +# define OPENSSL_LINE 0 +# else +# define OPENSSL_FILE __FILE__ +# define OPENSSL_LINE __LINE__ +# endif +#endif + +#ifndef OPENSSL_MIN_API +# define OPENSSL_MIN_API 0 +#endif + +#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API +# undef OPENSSL_API_COMPAT +# define OPENSSL_API_COMPAT OPENSSL_MIN_API +#endif + +/* + * Do not deprecate things to be deprecated in version 1.2.0 before the + * OpenSSL version number matches. + */ +#if OPENSSL_VERSION_NUMBER < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) f; +#elif OPENSSL_API_COMPAT < 0x10200000L +# define DEPRECATEDIN_1_2_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_2_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10100000L +# define DEPRECATEDIN_1_1_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_1_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x10000000L +# define DEPRECATEDIN_1_0_0(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_1_0_0(f) +#endif + +#if OPENSSL_API_COMPAT < 0x00908000L +# define DEPRECATEDIN_0_9_8(f) DECLARE_DEPRECATED(f) +#else +# define DEPRECATEDIN_0_9_8(f) +#endif + +/* Generate 80386 code? */ +#undef I386_ONLY + +#undef OPENSSL_UNISTD +#define OPENSSL_UNISTD + +#undef OPENSSL_EXPORT_VAR_AS_FUNCTION + +/* + * The following are cipher-specific, but are part of the public API. + */ +#if !defined(OPENSSL_SYS_UEFI) +# undef BN_LLONG +/* Only one for the following should be defined */ +# define SIXTY_FOUR_BIT_LONG +# undef SIXTY_FOUR_BIT +# undef THIRTY_TWO_BIT +#endif + +#define RC4_INT unsigned int + +#ifdef __cplusplus +} +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/include/progs.h 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,507 @@ +/* + * WARNING: do not edit! + * Generated by apps/progs.pl + * + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +typedef enum FUNC_TYPE { + FT_none, FT_general, FT_md, FT_cipher, FT_pkey, + FT_md_alg, FT_cipher_alg +} FUNC_TYPE; + +typedef struct function_st { + FUNC_TYPE type; + const char *name; + int (*func)(int argc, char *argv[]); + const OPTIONS *help; +} FUNCTION; + +DEFINE_LHASH_OF(FUNCTION); + +extern int asn1parse_main(int argc, char *argv[]); +extern int ca_main(int argc, char *argv[]); +extern int ciphers_main(int argc, char *argv[]); +extern int cms_main(int argc, char *argv[]); +extern int crl_main(int argc, char *argv[]); +extern int crl2pkcs7_main(int argc, char *argv[]); +extern int dgst_main(int argc, char *argv[]); +extern int dhparam_main(int argc, char *argv[]); +extern int dsa_main(int argc, char *argv[]); +extern int dsaparam_main(int argc, char *argv[]); +extern int ec_main(int argc, char *argv[]); +extern int ecparam_main(int argc, char *argv[]); +extern int enc_main(int argc, char *argv[]); +extern int engine_main(int argc, char *argv[]); +extern int errstr_main(int argc, char *argv[]); +extern int gendsa_main(int argc, char *argv[]); +extern int genpkey_main(int argc, char *argv[]); +extern int genrsa_main(int argc, char *argv[]); +extern int help_main(int argc, char *argv[]); +extern int list_main(int argc, char *argv[]); +extern int nseq_main(int argc, char *argv[]); +extern int ocsp_main(int argc, char *argv[]); +extern int passwd_main(int argc, char *argv[]); +extern int pkcs12_main(int argc, char *argv[]); +extern int pkcs7_main(int argc, char *argv[]); +extern int pkcs8_main(int argc, char *argv[]); +extern int pkey_main(int argc, char *argv[]); +extern int pkeyparam_main(int argc, char *argv[]); +extern int pkeyutl_main(int argc, char *argv[]); +extern int prime_main(int argc, char *argv[]); +extern int rand_main(int argc, char *argv[]); +extern int rehash_main(int argc, char *argv[]); +extern int req_main(int argc, char *argv[]); +extern int rsa_main(int argc, char *argv[]); +extern int rsautl_main(int argc, char *argv[]); +extern int s_client_main(int argc, char *argv[]); +extern int s_server_main(int argc, char *argv[]); +extern int s_time_main(int argc, char *argv[]); +extern int sess_id_main(int argc, char *argv[]); +extern int smime_main(int argc, char *argv[]); +extern int speed_main(int argc, char *argv[]); +extern int spkac_main(int argc, char *argv[]); +extern int srp_main(int argc, char *argv[]); +extern int storeutl_main(int argc, char *argv[]); +extern int ts_main(int argc, char *argv[]); +extern int verify_main(int argc, char *argv[]); +extern int version_main(int argc, char *argv[]); +extern int x509_main(int argc, char *argv[]); + +extern const OPTIONS asn1parse_options[]; +extern const OPTIONS ca_options[]; +extern const OPTIONS ciphers_options[]; +extern const OPTIONS cms_options[]; +extern const OPTIONS crl_options[]; +extern const OPTIONS crl2pkcs7_options[]; +extern const OPTIONS dgst_options[]; +extern const OPTIONS dhparam_options[]; +extern const OPTIONS dsa_options[]; +extern const OPTIONS dsaparam_options[]; +extern const OPTIONS ec_options[]; +extern const OPTIONS ecparam_options[]; +extern const OPTIONS enc_options[]; +extern const OPTIONS engine_options[]; +extern const OPTIONS errstr_options[]; +extern const OPTIONS gendsa_options[]; +extern const OPTIONS genpkey_options[]; +extern const OPTIONS genrsa_options[]; +extern const OPTIONS help_options[]; +extern const OPTIONS list_options[]; +extern const OPTIONS nseq_options[]; +extern const OPTIONS ocsp_options[]; +extern const OPTIONS passwd_options[]; +extern const OPTIONS pkcs12_options[]; +extern const OPTIONS pkcs7_options[]; +extern const OPTIONS pkcs8_options[]; +extern const OPTIONS pkey_options[]; +extern const OPTIONS pkeyparam_options[]; +extern const OPTIONS pkeyutl_options[]; +extern const OPTIONS prime_options[]; +extern const OPTIONS rand_options[]; +extern const OPTIONS rehash_options[]; +extern const OPTIONS req_options[]; +extern const OPTIONS rsa_options[]; +extern const OPTIONS rsautl_options[]; +extern const OPTIONS s_client_options[]; +extern const OPTIONS s_server_options[]; +extern const OPTIONS s_time_options[]; +extern const OPTIONS sess_id_options[]; +extern const OPTIONS smime_options[]; +extern const OPTIONS speed_options[]; +extern const OPTIONS spkac_options[]; +extern const OPTIONS srp_options[]; +extern const OPTIONS storeutl_options[]; +extern const OPTIONS ts_options[]; +extern const OPTIONS verify_options[]; +extern const OPTIONS version_options[]; +extern const OPTIONS x509_options[]; + +#ifdef INCLUDE_FUNCTION_TABLE +static FUNCTION functions[] = { + {FT_general, "asn1parse", asn1parse_main, asn1parse_options}, + {FT_general, "ca", ca_main, ca_options}, +#ifndef OPENSSL_NO_SOCK + {FT_general, "ciphers", ciphers_main, ciphers_options}, +#endif +#ifndef OPENSSL_NO_CMS + {FT_general, "cms", cms_main, cms_options}, +#endif + {FT_general, "crl", crl_main, crl_options}, + {FT_general, "crl2pkcs7", crl2pkcs7_main, crl2pkcs7_options}, + {FT_general, "dgst", dgst_main, dgst_options}, +#ifndef OPENSSL_NO_DH + {FT_general, "dhparam", dhparam_main, dhparam_options}, +#endif +#ifndef OPENSSL_NO_DSA + {FT_general, "dsa", dsa_main, dsa_options}, +#endif +#ifndef OPENSSL_NO_DSA + {FT_general, "dsaparam", dsaparam_main, dsaparam_options}, +#endif +#ifndef OPENSSL_NO_EC + {FT_general, "ec", ec_main, ec_options}, +#endif +#ifndef OPENSSL_NO_EC + {FT_general, "ecparam", ecparam_main, ecparam_options}, +#endif + {FT_general, "enc", enc_main, enc_options}, +#ifndef OPENSSL_NO_ENGINE + {FT_general, "engine", engine_main, engine_options}, +#endif + {FT_general, "errstr", errstr_main, errstr_options}, +#ifndef OPENSSL_NO_DSA + {FT_general, "gendsa", gendsa_main, gendsa_options}, +#endif + {FT_general, "genpkey", genpkey_main, genpkey_options}, +#ifndef OPENSSL_NO_RSA + {FT_general, "genrsa", genrsa_main, genrsa_options}, +#endif + {FT_general, "help", help_main, help_options}, + {FT_general, "list", list_main, list_options}, + {FT_general, "nseq", nseq_main, nseq_options}, +#ifndef OPENSSL_NO_OCSP + {FT_general, "ocsp", ocsp_main, ocsp_options}, +#endif + {FT_general, "passwd", passwd_main, passwd_options}, +#ifndef OPENSSL_NO_DES + {FT_general, "pkcs12", pkcs12_main, pkcs12_options}, +#endif + {FT_general, "pkcs7", pkcs7_main, pkcs7_options}, + {FT_general, "pkcs8", pkcs8_main, pkcs8_options}, + {FT_general, "pkey", pkey_main, pkey_options}, + {FT_general, "pkeyparam", pkeyparam_main, pkeyparam_options}, + {FT_general, "pkeyutl", pkeyutl_main, pkeyutl_options}, + {FT_general, "prime", prime_main, prime_options}, + {FT_general, "rand", rand_main, rand_options}, + {FT_general, "rehash", rehash_main, rehash_options}, + {FT_general, "req", req_main, req_options}, + {FT_general, "rsa", rsa_main, rsa_options}, +#ifndef OPENSSL_NO_RSA + {FT_general, "rsautl", rsautl_main, rsautl_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_client", s_client_main, s_client_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_server", s_server_main, s_server_options}, +#endif +#ifndef OPENSSL_NO_SOCK + {FT_general, "s_time", s_time_main, s_time_options}, +#endif + {FT_general, "sess_id", sess_id_main, sess_id_options}, + {FT_general, "smime", smime_main, smime_options}, + {FT_general, "speed", speed_main, speed_options}, + {FT_general, "spkac", spkac_main, spkac_options}, +#ifndef OPENSSL_NO_SRP + {FT_general, "srp", srp_main, srp_options}, +#endif + {FT_general, "storeutl", storeutl_main, storeutl_options}, +#ifndef OPENSSL_NO_TS + {FT_general, "ts", ts_main, ts_options}, +#endif + {FT_general, "verify", verify_main, verify_options}, + {FT_general, "version", version_main, version_options}, + {FT_general, "x509", x509_main, x509_options}, +#ifndef OPENSSL_NO_MD2 + {FT_md, "md2", dgst_main}, +#endif +#ifndef OPENSSL_NO_MD4 + {FT_md, "md4", dgst_main}, +#endif + {FT_md, "md5", dgst_main}, +#ifndef OPENSSL_NO_GOST + {FT_md, "gost", dgst_main}, +#endif + {FT_md, "sha1", dgst_main}, + {FT_md, "sha224", dgst_main}, + {FT_md, "sha256", dgst_main}, + {FT_md, "sha384", dgst_main}, + {FT_md, "sha512", dgst_main}, + {FT_md, "sha512-224", dgst_main}, + {FT_md, "sha512-256", dgst_main}, + {FT_md, "sha3-224", dgst_main}, + {FT_md, "sha3-256", dgst_main}, + {FT_md, "sha3-384", dgst_main}, + {FT_md, "sha3-512", dgst_main}, + {FT_md, "shake128", dgst_main}, + {FT_md, "shake256", dgst_main}, +#ifndef OPENSSL_NO_MDC2 + {FT_md, "mdc2", dgst_main}, +#endif +#ifndef OPENSSL_NO_RMD160 + {FT_md, "rmd160", dgst_main}, +#endif +#ifndef OPENSSL_NO_BLAKE2 + {FT_md, "blake2b512", dgst_main}, +#endif +#ifndef OPENSSL_NO_BLAKE2 + {FT_md, "blake2s256", dgst_main}, +#endif +#ifndef OPENSSL_NO_SM3 + {FT_md, "sm3", dgst_main}, +#endif + {FT_cipher, "aes-128-cbc", enc_main, enc_options}, + {FT_cipher, "aes-128-ecb", enc_main, enc_options}, + {FT_cipher, "aes-192-cbc", enc_main, enc_options}, + {FT_cipher, "aes-192-ecb", enc_main, enc_options}, + {FT_cipher, "aes-256-cbc", enc_main, enc_options}, + {FT_cipher, "aes-256-ecb", enc_main, enc_options}, +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-128-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-192-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ctr", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb1", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_ARIA + {FT_cipher, "aria-256-cfb8", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-128-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-128-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-192-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-192-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-256-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAMELLIA + {FT_cipher, "camellia-256-ecb", enc_main, enc_options}, +#endif + {FT_cipher, "base64", enc_main, enc_options}, +#ifdef ZLIB + {FT_cipher, "zlib", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des3", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "desx", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC4 + {FT_cipher, "rc4", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC4 + {FT_cipher, "rc4-40", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_DES + {FT_cipher, "des-ede3-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_IDEA + {FT_cipher, "idea-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SEED + {FT_cipher, "seed-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-64-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC2 + {FT_cipher, "rc2-40-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_BF + {FT_cipher, "bf-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast5-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_CAST + {FT_cipher, "cast-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_RC5 + {FT_cipher, "rc5-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-cbc", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ecb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-cfb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ofb", enc_main, enc_options}, +#endif +#ifndef OPENSSL_NO_SM4 + {FT_cipher, "sm4-ctr", enc_main, enc_options}, +#endif + {0, NULL, NULL} +}; +#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/openssl-cl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/openssl-cl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/openssl-cl.gypi 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/openssl-cl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,79 @@ +{ + 'variables': { + 'openssl_defines_darwin64-arm64-cc': [ + 'NDEBUG', + 'L_ENDIAN', + 'OPENSSL_PIC', + ], + 'openssl_cflags_darwin64-arm64-cc': [ + '-O3 -Wall', + '-arch arm64', + '-O3 -Wall', + ], + 'openssl_ex_libs_darwin64-arm64-cc': [ + '', + ], + 'openssl_cli_srcs_darwin64-arm64-cc': [ + 'openssl/apps/asn1pars.c', + 'openssl/apps/ca.c', + 'openssl/apps/ciphers.c', + 'openssl/apps/cms.c', + 'openssl/apps/crl.c', + 'openssl/apps/crl2p7.c', + 'openssl/apps/dgst.c', + 'openssl/apps/dhparam.c', + 'openssl/apps/dsa.c', + 'openssl/apps/dsaparam.c', + 'openssl/apps/ec.c', + 'openssl/apps/ecparam.c', + 'openssl/apps/enc.c', + 'openssl/apps/engine.c', + 'openssl/apps/errstr.c', + 'openssl/apps/gendsa.c', + 'openssl/apps/genpkey.c', + 'openssl/apps/genrsa.c', + 'openssl/apps/nseq.c', + 'openssl/apps/ocsp.c', + 'openssl/apps/openssl.c', + 'openssl/apps/passwd.c', + 'openssl/apps/pkcs12.c', + 'openssl/apps/pkcs7.c', + 'openssl/apps/pkcs8.c', + 'openssl/apps/pkey.c', + 'openssl/apps/pkeyparam.c', + 'openssl/apps/pkeyutl.c', + 'openssl/apps/prime.c', + 'openssl/apps/rand.c', + 'openssl/apps/rehash.c', + 'openssl/apps/req.c', + 'openssl/apps/rsa.c', + 'openssl/apps/rsautl.c', + 'openssl/apps/s_client.c', + 'openssl/apps/s_server.c', + 'openssl/apps/s_time.c', + 'openssl/apps/sess_id.c', + 'openssl/apps/smime.c', + 'openssl/apps/speed.c', + 'openssl/apps/spkac.c', + 'openssl/apps/srp.c', + 'openssl/apps/storeutl.c', + 'openssl/apps/ts.c', + 'openssl/apps/verify.c', + 'openssl/apps/version.c', + 'openssl/apps/x509.c', + 'openssl/apps/app_rand.c', + 'openssl/apps/apps.c', + 'openssl/apps/bf_prefix.c', + 'openssl/apps/opt.c', + 'openssl/apps/s_cb.c', + 'openssl/apps/s_socket.c', + ], + }, + 'defines': ['<@(openssl_defines_darwin64-arm64-cc)'], + 'include_dirs': [ + './include', + ], + 'cflags' : ['<@(openssl_cflags_darwin64-arm64-cc)'], + 'libraries': ['<@(openssl_ex_libs_darwin64-arm64-cc)'], + 'sources': ['<@(openssl_cli_srcs_darwin64-arm64-cc)'], +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/openssl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/openssl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/openssl.gypi 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-arm64-cc/no-asm/openssl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,711 @@ +{ + 'variables': { + 'openssl_sources': [ + 'openssl/ssl/bio_ssl.c', + 'openssl/ssl/d1_lib.c', + 'openssl/ssl/d1_msg.c', + 'openssl/ssl/d1_srtp.c', + 'openssl/ssl/methods.c', + 'openssl/ssl/packet.c', + 'openssl/ssl/pqueue.c', + 'openssl/ssl/record/dtls1_bitmap.c', + 'openssl/ssl/record/rec_layer_d1.c', + 'openssl/ssl/record/rec_layer_s3.c', + 'openssl/ssl/record/ssl3_buffer.c', + 'openssl/ssl/record/ssl3_record.c', + 'openssl/ssl/record/ssl3_record_tls13.c', + 'openssl/ssl/s3_cbc.c', + 'openssl/ssl/s3_enc.c', + 'openssl/ssl/s3_lib.c', + 'openssl/ssl/s3_msg.c', + 'openssl/ssl/ssl_asn1.c', + 'openssl/ssl/ssl_cert.c', + 'openssl/ssl/ssl_ciph.c', + 'openssl/ssl/ssl_conf.c', + 'openssl/ssl/ssl_err.c', + 'openssl/ssl/ssl_init.c', + 'openssl/ssl/ssl_lib.c', + 'openssl/ssl/ssl_mcnf.c', + 'openssl/ssl/ssl_rsa.c', + 'openssl/ssl/ssl_sess.c', + 'openssl/ssl/ssl_stat.c', + 'openssl/ssl/ssl_txt.c', + 'openssl/ssl/ssl_utst.c', + 'openssl/ssl/statem/extensions.c', + 'openssl/ssl/statem/extensions_clnt.c', + 'openssl/ssl/statem/extensions_cust.c', + 'openssl/ssl/statem/extensions_srvr.c', + 'openssl/ssl/statem/statem.c', + 'openssl/ssl/statem/statem_clnt.c', + 'openssl/ssl/statem/statem_dtls.c', + 'openssl/ssl/statem/statem_lib.c', + 'openssl/ssl/statem/statem_srvr.c', + 'openssl/ssl/t1_enc.c', + 'openssl/ssl/t1_lib.c', + 'openssl/ssl/t1_trce.c', + 'openssl/ssl/tls13_enc.c', + 'openssl/ssl/tls_srp.c', + 'openssl/crypto/aes/aes_cbc.c', + 'openssl/crypto/aes/aes_cfb.c', + 'openssl/crypto/aes/aes_core.c', + 'openssl/crypto/aes/aes_ecb.c', + 'openssl/crypto/aes/aes_ige.c', + 'openssl/crypto/aes/aes_misc.c', + 'openssl/crypto/aes/aes_ofb.c', + 'openssl/crypto/aes/aes_wrap.c', + 'openssl/crypto/aria/aria.c', + 'openssl/crypto/asn1/a_bitstr.c', + 'openssl/crypto/asn1/a_d2i_fp.c', + 'openssl/crypto/asn1/a_digest.c', + 'openssl/crypto/asn1/a_dup.c', + 'openssl/crypto/asn1/a_gentm.c', + 'openssl/crypto/asn1/a_i2d_fp.c', + 'openssl/crypto/asn1/a_int.c', + 'openssl/crypto/asn1/a_mbstr.c', + 'openssl/crypto/asn1/a_object.c', + 'openssl/crypto/asn1/a_octet.c', + 'openssl/crypto/asn1/a_print.c', + 'openssl/crypto/asn1/a_sign.c', + 'openssl/crypto/asn1/a_strex.c', + 'openssl/crypto/asn1/a_strnid.c', + 'openssl/crypto/asn1/a_time.c', + 'openssl/crypto/asn1/a_type.c', + 'openssl/crypto/asn1/a_utctm.c', + 'openssl/crypto/asn1/a_utf8.c', + 'openssl/crypto/asn1/a_verify.c', + 'openssl/crypto/asn1/ameth_lib.c', + 'openssl/crypto/asn1/asn1_err.c', + 'openssl/crypto/asn1/asn1_gen.c', + 'openssl/crypto/asn1/asn1_item_list.c', + 'openssl/crypto/asn1/asn1_lib.c', + 'openssl/crypto/asn1/asn1_par.c', + 'openssl/crypto/asn1/asn_mime.c', + 'openssl/crypto/asn1/asn_moid.c', + 'openssl/crypto/asn1/asn_mstbl.c', + 'openssl/crypto/asn1/asn_pack.c', + 'openssl/crypto/asn1/bio_asn1.c', + 'openssl/crypto/asn1/bio_ndef.c', + 'openssl/crypto/asn1/d2i_pr.c', + 'openssl/crypto/asn1/d2i_pu.c', + 'openssl/crypto/asn1/evp_asn1.c', + 'openssl/crypto/asn1/f_int.c', + 'openssl/crypto/asn1/f_string.c', + 'openssl/crypto/asn1/i2d_pr.c', + 'openssl/crypto/asn1/i2d_pu.c', + 'openssl/crypto/asn1/n_pkey.c', + 'openssl/crypto/asn1/nsseq.c', + 'openssl/crypto/asn1/p5_pbe.c', + 'openssl/crypto/asn1/p5_pbev2.c', + 'openssl/crypto/asn1/p5_scrypt.c', + 'openssl/crypto/asn1/p8_pkey.c', + 'openssl/crypto/asn1/t_bitst.c', + 'openssl/crypto/asn1/t_pkey.c', + 'openssl/crypto/asn1/t_spki.c', + 'openssl/crypto/asn1/tasn_dec.c', + 'openssl/crypto/asn1/tasn_enc.c', + 'openssl/crypto/asn1/tasn_fre.c', + 'openssl/crypto/asn1/tasn_new.c', + 'openssl/crypto/asn1/tasn_prn.c', + 'openssl/crypto/asn1/tasn_scn.c', + 'openssl/crypto/asn1/tasn_typ.c', + 'openssl/crypto/asn1/tasn_utl.c', + 'openssl/crypto/asn1/x_algor.c', + 'openssl/crypto/asn1/x_bignum.c', + 'openssl/crypto/asn1/x_info.c', + 'openssl/crypto/asn1/x_int64.c', + 'openssl/crypto/asn1/x_long.c', + 'openssl/crypto/asn1/x_pkey.c', + 'openssl/crypto/asn1/x_sig.c', + 'openssl/crypto/asn1/x_spki.c', + 'openssl/crypto/asn1/x_val.c', + 'openssl/crypto/async/arch/async_null.c', + 'openssl/crypto/async/arch/async_posix.c', + 'openssl/crypto/async/arch/async_win.c', + 'openssl/crypto/async/async.c', + 'openssl/crypto/async/async_err.c', + 'openssl/crypto/async/async_wait.c', + 'openssl/crypto/bf/bf_cfb64.c', + 'openssl/crypto/bf/bf_ecb.c', + 'openssl/crypto/bf/bf_enc.c', + 'openssl/crypto/bf/bf_ofb64.c', + 'openssl/crypto/bf/bf_skey.c', + 'openssl/crypto/bio/b_addr.c', + 'openssl/crypto/bio/b_dump.c', + 'openssl/crypto/bio/b_print.c', + 'openssl/crypto/bio/b_sock.c', + 'openssl/crypto/bio/b_sock2.c', + 'openssl/crypto/bio/bf_buff.c', + 'openssl/crypto/bio/bf_lbuf.c', + 'openssl/crypto/bio/bf_nbio.c', + 'openssl/crypto/bio/bf_null.c', + 'openssl/crypto/bio/bio_cb.c', + 'openssl/crypto/bio/bio_err.c', + 'openssl/crypto/bio/bio_lib.c', + 'openssl/crypto/bio/bio_meth.c', + 'openssl/crypto/bio/bss_acpt.c', + 'openssl/crypto/bio/bss_bio.c', + 'openssl/crypto/bio/bss_conn.c', + 'openssl/crypto/bio/bss_dgram.c', + 'openssl/crypto/bio/bss_fd.c', + 'openssl/crypto/bio/bss_file.c', + 'openssl/crypto/bio/bss_log.c', + 'openssl/crypto/bio/bss_mem.c', + 'openssl/crypto/bio/bss_null.c', + 'openssl/crypto/bio/bss_sock.c', + 'openssl/crypto/blake2/blake2b.c', + 'openssl/crypto/blake2/blake2s.c', + 'openssl/crypto/blake2/m_blake2b.c', + 'openssl/crypto/blake2/m_blake2s.c', + 'openssl/crypto/bn/bn_add.c', + 'openssl/crypto/bn/bn_asm.c', + 'openssl/crypto/bn/bn_blind.c', + 'openssl/crypto/bn/bn_const.c', + 'openssl/crypto/bn/bn_ctx.c', + 'openssl/crypto/bn/bn_depr.c', + 'openssl/crypto/bn/bn_dh.c', + 'openssl/crypto/bn/bn_div.c', + 'openssl/crypto/bn/bn_err.c', + 'openssl/crypto/bn/bn_exp.c', + 'openssl/crypto/bn/bn_exp2.c', + 'openssl/crypto/bn/bn_gcd.c', + 'openssl/crypto/bn/bn_gf2m.c', + 'openssl/crypto/bn/bn_intern.c', + 'openssl/crypto/bn/bn_kron.c', + 'openssl/crypto/bn/bn_lib.c', + 'openssl/crypto/bn/bn_mod.c', + 'openssl/crypto/bn/bn_mont.c', + 'openssl/crypto/bn/bn_mpi.c', + 'openssl/crypto/bn/bn_mul.c', + 'openssl/crypto/bn/bn_nist.c', + 'openssl/crypto/bn/bn_prime.c', + 'openssl/crypto/bn/bn_print.c', + 'openssl/crypto/bn/bn_rand.c', + 'openssl/crypto/bn/bn_recp.c', + 'openssl/crypto/bn/bn_shift.c', + 'openssl/crypto/bn/bn_sqr.c', + 'openssl/crypto/bn/bn_sqrt.c', + 'openssl/crypto/bn/bn_srp.c', + 'openssl/crypto/bn/bn_word.c', + 'openssl/crypto/bn/bn_x931p.c', + 'openssl/crypto/buffer/buf_err.c', + 'openssl/crypto/buffer/buffer.c', + 'openssl/crypto/camellia/camellia.c', + 'openssl/crypto/camellia/cmll_cbc.c', + 'openssl/crypto/camellia/cmll_cfb.c', + 'openssl/crypto/camellia/cmll_ctr.c', + 'openssl/crypto/camellia/cmll_ecb.c', + 'openssl/crypto/camellia/cmll_misc.c', + 'openssl/crypto/camellia/cmll_ofb.c', + 'openssl/crypto/cast/c_cfb64.c', + 'openssl/crypto/cast/c_ecb.c', + 'openssl/crypto/cast/c_enc.c', + 'openssl/crypto/cast/c_ofb64.c', + 'openssl/crypto/cast/c_skey.c', + 'openssl/crypto/chacha/chacha_enc.c', + 'openssl/crypto/cmac/cm_ameth.c', + 'openssl/crypto/cmac/cm_pmeth.c', + 'openssl/crypto/cmac/cmac.c', + 'openssl/crypto/cms/cms_asn1.c', + 'openssl/crypto/cms/cms_att.c', + 'openssl/crypto/cms/cms_cd.c', + 'openssl/crypto/cms/cms_dd.c', + 'openssl/crypto/cms/cms_enc.c', + 'openssl/crypto/cms/cms_env.c', + 'openssl/crypto/cms/cms_err.c', + 'openssl/crypto/cms/cms_ess.c', + 'openssl/crypto/cms/cms_io.c', + 'openssl/crypto/cms/cms_kari.c', + 'openssl/crypto/cms/cms_lib.c', + 'openssl/crypto/cms/cms_pwri.c', + 'openssl/crypto/cms/cms_sd.c', + 'openssl/crypto/cms/cms_smime.c', + 'openssl/crypto/conf/conf_api.c', + 'openssl/crypto/conf/conf_def.c', + 'openssl/crypto/conf/conf_err.c', + 'openssl/crypto/conf/conf_lib.c', + 'openssl/crypto/conf/conf_mall.c', + 'openssl/crypto/conf/conf_mod.c', + 'openssl/crypto/conf/conf_sap.c', + 'openssl/crypto/conf/conf_ssl.c', + 'openssl/crypto/cpt_err.c', + 'openssl/crypto/cryptlib.c', + 'openssl/crypto/ct/ct_b64.c', + 'openssl/crypto/ct/ct_err.c', + 'openssl/crypto/ct/ct_log.c', + 'openssl/crypto/ct/ct_oct.c', + 'openssl/crypto/ct/ct_policy.c', + 'openssl/crypto/ct/ct_prn.c', + 'openssl/crypto/ct/ct_sct.c', + 'openssl/crypto/ct/ct_sct_ctx.c', + 'openssl/crypto/ct/ct_vfy.c', + 'openssl/crypto/ct/ct_x509v3.c', + 'openssl/crypto/ctype.c', + 'openssl/crypto/cversion.c', + 'openssl/crypto/des/cbc_cksm.c', + 'openssl/crypto/des/cbc_enc.c', + 'openssl/crypto/des/cfb64ede.c', + 'openssl/crypto/des/cfb64enc.c', + 'openssl/crypto/des/cfb_enc.c', + 'openssl/crypto/des/des_enc.c', + 'openssl/crypto/des/ecb3_enc.c', + 'openssl/crypto/des/ecb_enc.c', + 'openssl/crypto/des/fcrypt.c', + 'openssl/crypto/des/fcrypt_b.c', + 'openssl/crypto/des/ofb64ede.c', + 'openssl/crypto/des/ofb64enc.c', + 'openssl/crypto/des/ofb_enc.c', + 'openssl/crypto/des/pcbc_enc.c', + 'openssl/crypto/des/qud_cksm.c', + 'openssl/crypto/des/rand_key.c', + 'openssl/crypto/des/set_key.c', + 'openssl/crypto/des/str2key.c', + 'openssl/crypto/des/xcbc_enc.c', + 'openssl/crypto/dh/dh_ameth.c', + 'openssl/crypto/dh/dh_asn1.c', + 'openssl/crypto/dh/dh_check.c', + 'openssl/crypto/dh/dh_depr.c', + 'openssl/crypto/dh/dh_err.c', + 'openssl/crypto/dh/dh_gen.c', + 'openssl/crypto/dh/dh_kdf.c', + 'openssl/crypto/dh/dh_key.c', + 'openssl/crypto/dh/dh_lib.c', + 'openssl/crypto/dh/dh_meth.c', + 'openssl/crypto/dh/dh_pmeth.c', + 'openssl/crypto/dh/dh_prn.c', + 'openssl/crypto/dh/dh_rfc5114.c', + 'openssl/crypto/dh/dh_rfc7919.c', + 'openssl/crypto/dsa/dsa_ameth.c', + 'openssl/crypto/dsa/dsa_asn1.c', + 'openssl/crypto/dsa/dsa_depr.c', + 'openssl/crypto/dsa/dsa_err.c', + 'openssl/crypto/dsa/dsa_gen.c', + 'openssl/crypto/dsa/dsa_key.c', + 'openssl/crypto/dsa/dsa_lib.c', + 'openssl/crypto/dsa/dsa_meth.c', + 'openssl/crypto/dsa/dsa_ossl.c', + 'openssl/crypto/dsa/dsa_pmeth.c', + 'openssl/crypto/dsa/dsa_prn.c', + 'openssl/crypto/dsa/dsa_sign.c', + 'openssl/crypto/dsa/dsa_vrf.c', + 'openssl/crypto/dso/dso_dl.c', + 'openssl/crypto/dso/dso_dlfcn.c', + 'openssl/crypto/dso/dso_err.c', + 'openssl/crypto/dso/dso_lib.c', + 'openssl/crypto/dso/dso_openssl.c', + 'openssl/crypto/dso/dso_vms.c', + 'openssl/crypto/dso/dso_win32.c', + 'openssl/crypto/ebcdic.c', + 'openssl/crypto/ec/curve25519.c', + 'openssl/crypto/ec/curve448/arch_32/f_impl.c', + 'openssl/crypto/ec/curve448/curve448.c', + 'openssl/crypto/ec/curve448/curve448_tables.c', + 'openssl/crypto/ec/curve448/eddsa.c', + 'openssl/crypto/ec/curve448/f_generic.c', + 'openssl/crypto/ec/curve448/scalar.c', + 'openssl/crypto/ec/ec2_oct.c', + 'openssl/crypto/ec/ec2_smpl.c', + 'openssl/crypto/ec/ec_ameth.c', + 'openssl/crypto/ec/ec_asn1.c', + 'openssl/crypto/ec/ec_check.c', + 'openssl/crypto/ec/ec_curve.c', + 'openssl/crypto/ec/ec_cvt.c', + 'openssl/crypto/ec/ec_err.c', + 'openssl/crypto/ec/ec_key.c', + 'openssl/crypto/ec/ec_kmeth.c', + 'openssl/crypto/ec/ec_lib.c', + 'openssl/crypto/ec/ec_mult.c', + 'openssl/crypto/ec/ec_oct.c', + 'openssl/crypto/ec/ec_pmeth.c', + 'openssl/crypto/ec/ec_print.c', + 'openssl/crypto/ec/ecdh_kdf.c', + 'openssl/crypto/ec/ecdh_ossl.c', + 'openssl/crypto/ec/ecdsa_ossl.c', + 'openssl/crypto/ec/ecdsa_sign.c', + 'openssl/crypto/ec/ecdsa_vrf.c', + 'openssl/crypto/ec/eck_prn.c', + 'openssl/crypto/ec/ecp_mont.c', + 'openssl/crypto/ec/ecp_nist.c', + 'openssl/crypto/ec/ecp_nistp224.c', + 'openssl/crypto/ec/ecp_nistp256.c', + 'openssl/crypto/ec/ecp_nistp521.c', + 'openssl/crypto/ec/ecp_nistputil.c', + 'openssl/crypto/ec/ecp_oct.c', + 'openssl/crypto/ec/ecp_smpl.c', + 'openssl/crypto/ec/ecx_meth.c', + 'openssl/crypto/engine/eng_all.c', + 'openssl/crypto/engine/eng_cnf.c', + 'openssl/crypto/engine/eng_ctrl.c', + 'openssl/crypto/engine/eng_dyn.c', + 'openssl/crypto/engine/eng_err.c', + 'openssl/crypto/engine/eng_fat.c', + 'openssl/crypto/engine/eng_init.c', + 'openssl/crypto/engine/eng_lib.c', + 'openssl/crypto/engine/eng_list.c', + 'openssl/crypto/engine/eng_openssl.c', + 'openssl/crypto/engine/eng_pkey.c', + 'openssl/crypto/engine/eng_rdrand.c', + 'openssl/crypto/engine/eng_table.c', + 'openssl/crypto/engine/tb_asnmth.c', + 'openssl/crypto/engine/tb_cipher.c', + 'openssl/crypto/engine/tb_dh.c', + 'openssl/crypto/engine/tb_digest.c', + 'openssl/crypto/engine/tb_dsa.c', + 'openssl/crypto/engine/tb_eckey.c', + 'openssl/crypto/engine/tb_pkmeth.c', + 'openssl/crypto/engine/tb_rand.c', + 'openssl/crypto/engine/tb_rsa.c', + 'openssl/crypto/err/err.c', + 'openssl/crypto/err/err_all.c', + 'openssl/crypto/err/err_prn.c', + 'openssl/crypto/evp/bio_b64.c', + 'openssl/crypto/evp/bio_enc.c', + 'openssl/crypto/evp/bio_md.c', + 'openssl/crypto/evp/bio_ok.c', + 'openssl/crypto/evp/c_allc.c', + 'openssl/crypto/evp/c_alld.c', + 'openssl/crypto/evp/cmeth_lib.c', + 'openssl/crypto/evp/digest.c', + 'openssl/crypto/evp/e_aes.c', + 'openssl/crypto/evp/e_aes_cbc_hmac_sha1.c', + 'openssl/crypto/evp/e_aes_cbc_hmac_sha256.c', + 'openssl/crypto/evp/e_aria.c', + 'openssl/crypto/evp/e_bf.c', + 'openssl/crypto/evp/e_camellia.c', + 'openssl/crypto/evp/e_cast.c', + 'openssl/crypto/evp/e_chacha20_poly1305.c', + 'openssl/crypto/evp/e_des.c', + 'openssl/crypto/evp/e_des3.c', + 'openssl/crypto/evp/e_idea.c', + 'openssl/crypto/evp/e_null.c', + 'openssl/crypto/evp/e_old.c', + 'openssl/crypto/evp/e_rc2.c', + 'openssl/crypto/evp/e_rc4.c', + 'openssl/crypto/evp/e_rc4_hmac_md5.c', + 'openssl/crypto/evp/e_rc5.c', + 'openssl/crypto/evp/e_seed.c', + 'openssl/crypto/evp/e_sm4.c', + 'openssl/crypto/evp/e_xcbc_d.c', + 'openssl/crypto/evp/encode.c', + 'openssl/crypto/evp/evp_cnf.c', + 'openssl/crypto/evp/evp_enc.c', + 'openssl/crypto/evp/evp_err.c', + 'openssl/crypto/evp/evp_key.c', + 'openssl/crypto/evp/evp_lib.c', + 'openssl/crypto/evp/evp_pbe.c', + 'openssl/crypto/evp/evp_pkey.c', + 'openssl/crypto/evp/m_md2.c', + 'openssl/crypto/evp/m_md4.c', + 'openssl/crypto/evp/m_md5.c', + 'openssl/crypto/evp/m_md5_sha1.c', + 'openssl/crypto/evp/m_mdc2.c', + 'openssl/crypto/evp/m_null.c', + 'openssl/crypto/evp/m_ripemd.c', + 'openssl/crypto/evp/m_sha1.c', + 'openssl/crypto/evp/m_sha3.c', + 'openssl/crypto/evp/m_sigver.c', + 'openssl/crypto/evp/m_wp.c', + 'openssl/crypto/evp/names.c', + 'openssl/crypto/evp/p5_crpt.c', + 'openssl/crypto/evp/p5_crpt2.c', + 'openssl/crypto/evp/p_dec.c', + 'openssl/crypto/evp/p_enc.c', + 'openssl/crypto/evp/p_lib.c', + 'openssl/crypto/evp/p_open.c', + 'openssl/crypto/evp/p_seal.c', + 'openssl/crypto/evp/p_sign.c', + 'openssl/crypto/evp/p_verify.c', + 'openssl/crypto/evp/pbe_scrypt.c', + 'openssl/crypto/evp/pmeth_fn.c', + 'openssl/crypto/evp/pmeth_gn.c', + 'openssl/crypto/evp/pmeth_lib.c', + 'openssl/crypto/ex_data.c', + 'openssl/crypto/getenv.c', + 'openssl/crypto/hmac/hm_ameth.c', + 'openssl/crypto/hmac/hm_pmeth.c', + 'openssl/crypto/hmac/hmac.c', + 'openssl/crypto/idea/i_cbc.c', + 'openssl/crypto/idea/i_cfb64.c', + 'openssl/crypto/idea/i_ecb.c', + 'openssl/crypto/idea/i_ofb64.c', + 'openssl/crypto/idea/i_skey.c', + 'openssl/crypto/init.c', + 'openssl/crypto/kdf/hkdf.c', + 'openssl/crypto/kdf/kdf_err.c', + 'openssl/crypto/kdf/scrypt.c', + 'openssl/crypto/kdf/tls1_prf.c', + 'openssl/crypto/lhash/lh_stats.c', + 'openssl/crypto/lhash/lhash.c', + 'openssl/crypto/md4/md4_dgst.c', + 'openssl/crypto/md4/md4_one.c', + 'openssl/crypto/md5/md5_dgst.c', + 'openssl/crypto/md5/md5_one.c', + 'openssl/crypto/mdc2/mdc2_one.c', + 'openssl/crypto/mdc2/mdc2dgst.c', + 'openssl/crypto/mem.c', + 'openssl/crypto/mem_clr.c', + 'openssl/crypto/mem_dbg.c', + 'openssl/crypto/mem_sec.c', + 'openssl/crypto/modes/cbc128.c', + 'openssl/crypto/modes/ccm128.c', + 'openssl/crypto/modes/cfb128.c', + 'openssl/crypto/modes/ctr128.c', + 'openssl/crypto/modes/cts128.c', + 'openssl/crypto/modes/gcm128.c', + 'openssl/crypto/modes/ocb128.c', + 'openssl/crypto/modes/ofb128.c', + 'openssl/crypto/modes/wrap128.c', + 'openssl/crypto/modes/xts128.c', + 'openssl/crypto/o_dir.c', + 'openssl/crypto/o_fips.c', + 'openssl/crypto/o_fopen.c', + 'openssl/crypto/o_init.c', + 'openssl/crypto/o_str.c', + 'openssl/crypto/o_time.c', + 'openssl/crypto/objects/o_names.c', + 'openssl/crypto/objects/obj_dat.c', + 'openssl/crypto/objects/obj_err.c', + 'openssl/crypto/objects/obj_lib.c', + 'openssl/crypto/objects/obj_xref.c', + 'openssl/crypto/ocsp/ocsp_asn.c', + 'openssl/crypto/ocsp/ocsp_cl.c', + 'openssl/crypto/ocsp/ocsp_err.c', + 'openssl/crypto/ocsp/ocsp_ext.c', + 'openssl/crypto/ocsp/ocsp_ht.c', + 'openssl/crypto/ocsp/ocsp_lib.c', + 'openssl/crypto/ocsp/ocsp_prn.c', + 'openssl/crypto/ocsp/ocsp_srv.c', + 'openssl/crypto/ocsp/ocsp_vfy.c', + 'openssl/crypto/ocsp/v3_ocsp.c', + 'openssl/crypto/pem/pem_all.c', + 'openssl/crypto/pem/pem_err.c', + 'openssl/crypto/pem/pem_info.c', + 'openssl/crypto/pem/pem_lib.c', + 'openssl/crypto/pem/pem_oth.c', + 'openssl/crypto/pem/pem_pk8.c', + 'openssl/crypto/pem/pem_pkey.c', + 'openssl/crypto/pem/pem_sign.c', + 'openssl/crypto/pem/pem_x509.c', + 'openssl/crypto/pem/pem_xaux.c', + 'openssl/crypto/pem/pvkfmt.c', + 'openssl/crypto/pkcs12/p12_add.c', + 'openssl/crypto/pkcs12/p12_asn.c', + 'openssl/crypto/pkcs12/p12_attr.c', + 'openssl/crypto/pkcs12/p12_crpt.c', + 'openssl/crypto/pkcs12/p12_crt.c', + 'openssl/crypto/pkcs12/p12_decr.c', + 'openssl/crypto/pkcs12/p12_init.c', + 'openssl/crypto/pkcs12/p12_key.c', + 'openssl/crypto/pkcs12/p12_kiss.c', + 'openssl/crypto/pkcs12/p12_mutl.c', + 'openssl/crypto/pkcs12/p12_npas.c', + 'openssl/crypto/pkcs12/p12_p8d.c', + 'openssl/crypto/pkcs12/p12_p8e.c', + 'openssl/crypto/pkcs12/p12_sbag.c', + 'openssl/crypto/pkcs12/p12_utl.c', + 'openssl/crypto/pkcs12/pk12err.c', + 'openssl/crypto/pkcs7/bio_pk7.c', + 'openssl/crypto/pkcs7/pk7_asn1.c', + 'openssl/crypto/pkcs7/pk7_attr.c', + 'openssl/crypto/pkcs7/pk7_doit.c', + 'openssl/crypto/pkcs7/pk7_lib.c', + 'openssl/crypto/pkcs7/pk7_mime.c', + 'openssl/crypto/pkcs7/pk7_smime.c', + 'openssl/crypto/pkcs7/pkcs7err.c', + 'openssl/crypto/poly1305/poly1305.c', + 'openssl/crypto/poly1305/poly1305_ameth.c', + 'openssl/crypto/poly1305/poly1305_pmeth.c', + 'openssl/crypto/rand/drbg_ctr.c', + 'openssl/crypto/rand/drbg_lib.c', + 'openssl/crypto/rand/rand_egd.c', + 'openssl/crypto/rand/rand_err.c', + 'openssl/crypto/rand/rand_lib.c', + 'openssl/crypto/rand/rand_unix.c', + 'openssl/crypto/rand/rand_vms.c', + 'openssl/crypto/rand/rand_win.c', + 'openssl/crypto/rand/randfile.c', + 'openssl/crypto/rc2/rc2_cbc.c', + 'openssl/crypto/rc2/rc2_ecb.c', + 'openssl/crypto/rc2/rc2_skey.c', + 'openssl/crypto/rc2/rc2cfb64.c', + 'openssl/crypto/rc2/rc2ofb64.c', + 'openssl/crypto/rc4/rc4_enc.c', + 'openssl/crypto/rc4/rc4_skey.c', + 'openssl/crypto/ripemd/rmd_dgst.c', + 'openssl/crypto/ripemd/rmd_one.c', + 'openssl/crypto/rsa/rsa_ameth.c', + 'openssl/crypto/rsa/rsa_asn1.c', + 'openssl/crypto/rsa/rsa_chk.c', + 'openssl/crypto/rsa/rsa_crpt.c', + 'openssl/crypto/rsa/rsa_depr.c', + 'openssl/crypto/rsa/rsa_err.c', + 'openssl/crypto/rsa/rsa_gen.c', + 'openssl/crypto/rsa/rsa_lib.c', + 'openssl/crypto/rsa/rsa_meth.c', + 'openssl/crypto/rsa/rsa_mp.c', + 'openssl/crypto/rsa/rsa_none.c', + 'openssl/crypto/rsa/rsa_oaep.c', + 'openssl/crypto/rsa/rsa_ossl.c', + 'openssl/crypto/rsa/rsa_pk1.c', + 'openssl/crypto/rsa/rsa_pmeth.c', + 'openssl/crypto/rsa/rsa_prn.c', + 'openssl/crypto/rsa/rsa_pss.c', + 'openssl/crypto/rsa/rsa_saos.c', + 'openssl/crypto/rsa/rsa_sign.c', + 'openssl/crypto/rsa/rsa_ssl.c', + 'openssl/crypto/rsa/rsa_x931.c', + 'openssl/crypto/rsa/rsa_x931g.c', + 'openssl/crypto/seed/seed.c', + 'openssl/crypto/seed/seed_cbc.c', + 'openssl/crypto/seed/seed_cfb.c', + 'openssl/crypto/seed/seed_ecb.c', + 'openssl/crypto/seed/seed_ofb.c', + 'openssl/crypto/sha/keccak1600.c', + 'openssl/crypto/sha/sha1_one.c', + 'openssl/crypto/sha/sha1dgst.c', + 'openssl/crypto/sha/sha256.c', + 'openssl/crypto/sha/sha512.c', + 'openssl/crypto/siphash/siphash.c', + 'openssl/crypto/siphash/siphash_ameth.c', + 'openssl/crypto/siphash/siphash_pmeth.c', + 'openssl/crypto/sm2/sm2_crypt.c', + 'openssl/crypto/sm2/sm2_err.c', + 'openssl/crypto/sm2/sm2_pmeth.c', + 'openssl/crypto/sm2/sm2_sign.c', + 'openssl/crypto/sm3/m_sm3.c', + 'openssl/crypto/sm3/sm3.c', + 'openssl/crypto/sm4/sm4.c', + 'openssl/crypto/srp/srp_lib.c', + 'openssl/crypto/srp/srp_vfy.c', + 'openssl/crypto/stack/stack.c', + 'openssl/crypto/store/loader_file.c', + 'openssl/crypto/store/store_err.c', + 'openssl/crypto/store/store_init.c', + 'openssl/crypto/store/store_lib.c', + 'openssl/crypto/store/store_register.c', + 'openssl/crypto/store/store_strings.c', + 'openssl/crypto/threads_none.c', + 'openssl/crypto/threads_pthread.c', + 'openssl/crypto/threads_win.c', + 'openssl/crypto/ts/ts_asn1.c', + 'openssl/crypto/ts/ts_conf.c', + 'openssl/crypto/ts/ts_err.c', + 'openssl/crypto/ts/ts_lib.c', + 'openssl/crypto/ts/ts_req_print.c', + 'openssl/crypto/ts/ts_req_utils.c', + 'openssl/crypto/ts/ts_rsp_print.c', + 'openssl/crypto/ts/ts_rsp_sign.c', + 'openssl/crypto/ts/ts_rsp_utils.c', + 'openssl/crypto/ts/ts_rsp_verify.c', + 'openssl/crypto/ts/ts_verify_ctx.c', + 'openssl/crypto/txt_db/txt_db.c', + 'openssl/crypto/ui/ui_err.c', + 'openssl/crypto/ui/ui_lib.c', + 'openssl/crypto/ui/ui_null.c', + 'openssl/crypto/ui/ui_openssl.c', + 'openssl/crypto/ui/ui_util.c', + 'openssl/crypto/uid.c', + 'openssl/crypto/whrlpool/wp_block.c', + 'openssl/crypto/whrlpool/wp_dgst.c', + 'openssl/crypto/x509/by_dir.c', + 'openssl/crypto/x509/by_file.c', + 'openssl/crypto/x509/t_crl.c', + 'openssl/crypto/x509/t_req.c', + 'openssl/crypto/x509/t_x509.c', + 'openssl/crypto/x509/x509_att.c', + 'openssl/crypto/x509/x509_cmp.c', + 'openssl/crypto/x509/x509_d2.c', + 'openssl/crypto/x509/x509_def.c', + 'openssl/crypto/x509/x509_err.c', + 'openssl/crypto/x509/x509_ext.c', + 'openssl/crypto/x509/x509_lu.c', + 'openssl/crypto/x509/x509_meth.c', + 'openssl/crypto/x509/x509_obj.c', + 'openssl/crypto/x509/x509_r2x.c', + 'openssl/crypto/x509/x509_req.c', + 'openssl/crypto/x509/x509_set.c', + 'openssl/crypto/x509/x509_trs.c', + 'openssl/crypto/x509/x509_txt.c', + 'openssl/crypto/x509/x509_v3.c', + 'openssl/crypto/x509/x509_vfy.c', + 'openssl/crypto/x509/x509_vpm.c', + 'openssl/crypto/x509/x509cset.c', + 'openssl/crypto/x509/x509name.c', + 'openssl/crypto/x509/x509rset.c', + 'openssl/crypto/x509/x509spki.c', + 'openssl/crypto/x509/x509type.c', + 'openssl/crypto/x509/x_all.c', + 'openssl/crypto/x509/x_attrib.c', + 'openssl/crypto/x509/x_crl.c', + 'openssl/crypto/x509/x_exten.c', + 'openssl/crypto/x509/x_name.c', + 'openssl/crypto/x509/x_pubkey.c', + 'openssl/crypto/x509/x_req.c', + 'openssl/crypto/x509/x_x509.c', + 'openssl/crypto/x509/x_x509a.c', + 'openssl/crypto/x509v3/pcy_cache.c', + 'openssl/crypto/x509v3/pcy_data.c', + 'openssl/crypto/x509v3/pcy_lib.c', + 'openssl/crypto/x509v3/pcy_map.c', + 'openssl/crypto/x509v3/pcy_node.c', + 'openssl/crypto/x509v3/pcy_tree.c', + 'openssl/crypto/x509v3/v3_addr.c', + 'openssl/crypto/x509v3/v3_admis.c', + 'openssl/crypto/x509v3/v3_akey.c', + 'openssl/crypto/x509v3/v3_akeya.c', + 'openssl/crypto/x509v3/v3_alt.c', + 'openssl/crypto/x509v3/v3_asid.c', + 'openssl/crypto/x509v3/v3_bcons.c', + 'openssl/crypto/x509v3/v3_bitst.c', + 'openssl/crypto/x509v3/v3_conf.c', + 'openssl/crypto/x509v3/v3_cpols.c', + 'openssl/crypto/x509v3/v3_crld.c', + 'openssl/crypto/x509v3/v3_enum.c', + 'openssl/crypto/x509v3/v3_extku.c', + 'openssl/crypto/x509v3/v3_genn.c', + 'openssl/crypto/x509v3/v3_ia5.c', + 'openssl/crypto/x509v3/v3_info.c', + 'openssl/crypto/x509v3/v3_int.c', + 'openssl/crypto/x509v3/v3_lib.c', + 'openssl/crypto/x509v3/v3_ncons.c', + 'openssl/crypto/x509v3/v3_pci.c', + 'openssl/crypto/x509v3/v3_pcia.c', + 'openssl/crypto/x509v3/v3_pcons.c', + 'openssl/crypto/x509v3/v3_pku.c', + 'openssl/crypto/x509v3/v3_pmaps.c', + 'openssl/crypto/x509v3/v3_prn.c', + 'openssl/crypto/x509v3/v3_purp.c', + 'openssl/crypto/x509v3/v3_skey.c', + 'openssl/crypto/x509v3/v3_sxnet.c', + 'openssl/crypto/x509v3/v3_tlsf.c', + 'openssl/crypto/x509v3/v3_utl.c', + 'openssl/crypto/x509v3/v3err.c', + 'openssl/engines/e_capi.c', + 'openssl/engines/e_padlock.c', + ], + 'openssl_sources_darwin64-arm64-cc': [ + ], + 'openssl_defines_darwin64-arm64-cc': [ + 'NDEBUG', + 'L_ENDIAN', + 'OPENSSL_PIC', + ], + 'openssl_cflags_darwin64-arm64-cc': [ + '-O3 -Wall', + '-arch arm64', + '-O3 -Wall', + ], + 'openssl_ex_libs_darwin64-arm64-cc': [ + '', + ], + }, + 'include_dirs': [ + '.', + './include', + './crypto', + './crypto/include/internal', + ], + 'defines': ['<@(openssl_defines_darwin64-arm64-cc)'], + 'cflags' : ['<@(openssl_cflags_darwin64-arm64-cc)'], + 'libraries': ['<@(openssl_ex_libs_darwin64-arm64-cc)'], + 'sources': ['<@(openssl_sources)', '<@(openssl_sources_darwin64-arm64-cc)'], +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "darwin64-x86_64-cc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "darwin64-x86_64-cc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1173,6 +1173,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9058,6 +9063,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9635,6 +9644,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14405,6 +14415,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15379,19 +15397,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3020,3 +3020,4 @@ movd %xmm9,16(%r9) .byte 0xf3,0xc3 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -4432,3 +4432,4 @@ movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: darwin64-x86_64-cc" -#define DATE "built on: Tue Apr 21 13:28:47 2020 UTC" +#define DATE "built on: Tue Mar 15 17:24:11 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3551,3 +3551,4 @@ movq %rdx,%rax .byte 0xf3,0xc3 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -479,3 +479,4 @@ xorq %r10,%r10 .byte 0xf3,0xc3 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "darwin64-x86_64-cc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "darwin64-x86_64-cc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1173,6 +1173,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9058,6 +9063,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9635,6 +9644,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14405,6 +14415,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15379,19 +15397,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3020,3 +3020,4 @@ movd %xmm9,16(%r9) .byte 0xf3,0xc3 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -4432,3 +4432,4 @@ movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: darwin64-x86_64-cc" -#define DATE "built on: Tue Apr 21 13:28:51 2020 UTC" +#define DATE "built on: Tue Mar 15 17:24:22 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -2035,3 +2035,4 @@ movq %rdx,%rax .byte 0xf3,0xc3 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -479,3 +479,4 @@ xorq %r10,%r10 .byte 0xf3,0xc3 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "darwin64-x86_64-cc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "darwin64-x86_64-cc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1171,6 +1171,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8905,6 +8910,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9482,6 +9491,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14137,6 +14147,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15114,19 +15132,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: darwin64-x86_64-cc" -#define DATE "built on: Tue Apr 21 13:28:56 2020 UTC" +#define DATE "built on: Tue Mar 15 17:24:33 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -123,6 +123,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin64-x86_64-cc/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "darwin-i386-cc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "darwin-i386-cc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1173,6 +1173,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8985,6 +8990,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9562,6 +9571,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14282,6 +14292,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15256,19 +15274,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: darwin-i386-cc" -#define DATE "built on: Tue Apr 21 13:28:57 2020 UTC" +#define DATE "built on: Tue Mar 15 17:24:35 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "darwin-i386-cc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "darwin-i386-cc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1173,6 +1173,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8985,6 +8990,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9562,6 +9571,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14282,6 +14292,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15256,19 +15274,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: darwin-i386-cc" -#define DATE "built on: Tue Apr 21 13:28:59 2020 UTC" +#define DATE "built on: Tue Mar 15 17:24:40 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "darwin-i386-cc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "darwin-i386-cc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1171,6 +1171,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8905,6 +8910,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9482,6 +9491,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14137,6 +14147,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15114,19 +15132,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: darwin-i386-cc" -#define DATE "built on: Tue Apr 21 13:29:02 2020 UTC" +#define DATE "built on: Tue Mar 15 17:24:44 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -123,6 +123,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/darwin-i386-cc/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/darwin-i386-cc/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux32-s390x" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux32-s390x", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8947,6 +8952,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9524,6 +9533,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14209,6 +14219,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15183,19 +15201,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux32-s390x" -#define DATE "built on: Tue Apr 21 13:29:56 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:49 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux32-s390x" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux32-s390x", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8947,6 +8952,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9524,6 +9533,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14209,6 +14219,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15183,19 +15201,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux32-s390x" -#define DATE "built on: Tue Apr 21 13:29:57 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:52 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux32-s390x" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux32-s390x", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8925,6 +8930,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9502,6 +9511,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14152,6 +14162,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15129,19 +15147,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux32-s390x" -#define DATE "built on: Tue Apr 21 13:29:58 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:55 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux32-s390x/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux32-s390x/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux64-mips64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux64-mips64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8941,6 +8946,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9518,6 +9527,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14198,6 +14208,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15172,19 +15190,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } @@ -15357,3 +15378,4 @@ =back =cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/crypto/bn/bn-mips.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/crypto/bn/bn-mips.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/crypto/bn/bn-mips.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/crypto/bn/bn-mips.S 2022-04-05 07:17:00.000000000 +0000 @@ -1570,6 +1570,8 @@ sltu $1,$3,$24 daddu $7,$25,$1 sd $3,8($4) + sltu $1,$7,$25 + daddu $2,$1 mflo ($24,$14,$12) mfhi ($25,$14,$12) daddu $7,$24 @@ -2071,6 +2073,8 @@ sltu $1,$3,$24 daddu $7,$25,$1 sd $3,8($4) + sltu $1,$7,$25 + daddu $2,$1 mflo ($24,$14,$12) mfhi ($25,$14,$12) daddu $7,$24 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux64-mips64" -#define DATE "built on: Tue Apr 21 13:30:04 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:05 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha256-mips.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha256-mips.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha256-mips.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha256-mips.S 2022-04-05 07:17:00.000000000 +0000 @@ -3034,3 +3034,4 @@ .word 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 .asciiz "SHA256 for MIPS, CRYPTOGAMS by " .align 5 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/crypto/sha/sha512-mips.S 2022-04-05 07:17:00.000000000 +0000 @@ -3202,3 +3202,4 @@ .dword 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 .asciiz "SHA512 for MIPS, CRYPTOGAMS by " .align 5 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux64-mips64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux64-mips64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8941,6 +8946,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9518,6 +9527,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14198,6 +14208,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15172,19 +15190,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } @@ -15357,3 +15378,4 @@ =back =cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/bn/bn-mips.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/bn/bn-mips.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/bn/bn-mips.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/bn/bn-mips.S 2022-04-05 07:17:00.000000000 +0000 @@ -1570,6 +1570,8 @@ sltu $1,$3,$24 daddu $7,$25,$1 sd $3,8($4) + sltu $1,$7,$25 + daddu $2,$1 mflo ($24,$14,$12) mfhi ($25,$14,$12) daddu $7,$24 @@ -2071,6 +2073,8 @@ sltu $1,$3,$24 daddu $7,$25,$1 sd $3,8($4) + sltu $1,$7,$25 + daddu $2,$1 mflo ($24,$14,$12) mfhi ($25,$14,$12) daddu $7,$24 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux64-mips64" -#define DATE "built on: Tue Apr 21 13:30:05 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:08 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/sha/sha256-mips.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/sha/sha256-mips.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/sha/sha256-mips.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/sha/sha256-mips.S 2022-04-05 07:17:00.000000000 +0000 @@ -3034,3 +3034,4 @@ .word 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 .asciiz "SHA256 for MIPS, CRYPTOGAMS by " .align 5 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/sha/sha512-mips.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/sha/sha512-mips.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/sha/sha512-mips.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/crypto/sha/sha512-mips.S 2022-04-05 07:17:00.000000000 +0000 @@ -3202,3 +3202,4 @@ .dword 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 .asciiz "SHA512 for MIPS, CRYPTOGAMS by " .align 5 + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux64-mips64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux64-mips64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8931,6 +8936,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9508,6 +9517,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14163,6 +14173,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15140,19 +15158,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } @@ -15325,3 +15346,4 @@ =back =cut + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux64-mips64" -#define DATE "built on: Tue Apr 21 13:30:07 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:11 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-mips64/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-mips64/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux64-s390x" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux64-s390x", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8960,6 +8965,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9537,6 +9546,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14222,6 +14232,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15196,19 +15214,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux64-s390x" -#define DATE "built on: Tue Apr 21 13:30:00 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:57 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux64-s390x" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux64-s390x", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8960,6 +8965,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9537,6 +9546,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14222,6 +14232,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15196,19 +15214,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux64-s390x" -#define DATE "built on: Tue Apr 21 13:30:01 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:00 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux64-s390x" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux64-s390x", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8931,6 +8936,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9508,6 +9517,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14163,6 +14173,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15140,19 +15158,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux64-s390x" -#define DATE "built on: Tue Apr 21 13:30:03 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:03 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux64-s390x/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux64-s390x/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-aarch64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-aarch64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8970,6 +8975,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9547,6 +9556,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14257,6 +14267,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15231,19 +15249,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/aes/aesv8-armx.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/aes/aesv8-armx.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/aes/aesv8-armx.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/aes/aesv8-armx.S 2022-04-05 07:17:00.000000000 +0000 @@ -103,7 +103,12 @@ .Loop192: tbl v6.16b,{v4.16b},v2.16b ext v5.16b,v0.16b,v3.16b,#12 +#ifdef __ARMEB__ + st1 {v4.4s},[x2],#16 + sub x2,x2,#8 +#else st1 {v4.8b},[x2],#8 +#endif aese v6.16b,v0.16b subs w1,w1,#1 @@ -574,8 +579,11 @@ ldr w5,[x3,#240] ldr w8, [x4, #12] +#ifdef __ARMEB__ + ld1 {v0.16b},[x4] +#else ld1 {v0.4s},[x4] - +#endif ld1 {v16.4s,v17.4s},[x3] // load key schedule... sub w5,w5,#4 mov x12,#16 @@ -591,17 +599,17 @@ #ifndef __ARMEB__ rev w8, w8 #endif - orr v1.16b,v0.16b,v0.16b add w10, w8, #1 - orr v18.16b,v0.16b,v0.16b - add w8, w8, #2 orr v6.16b,v0.16b,v0.16b rev w10, w10 - mov v1.s[3],w10 + mov v6.s[3],w10 + add w8, w8, #2 + orr v1.16b,v6.16b,v6.16b b.ls .Lctr32_tail rev w12, w8 + mov v6.s[3],w12 sub x2,x2,#3 // bias - mov v18.s[3],w12 + orr v18.16b,v6.16b,v6.16b b .Loop3x_ctr32 .align 4 @@ -628,11 +636,11 @@ aese v1.16b,v16.16b aesmc v5.16b,v1.16b ld1 {v2.16b},[x0],#16 - orr v0.16b,v6.16b,v6.16b + add w9,w8,#1 aese v18.16b,v16.16b aesmc v18.16b,v18.16b ld1 {v3.16b},[x0],#16 - orr v1.16b,v6.16b,v6.16b + rev w9,w9 aese v4.16b,v17.16b aesmc v4.16b,v4.16b aese v5.16b,v17.16b @@ -641,8 +649,6 @@ mov x7,x3 aese v18.16b,v17.16b aesmc v17.16b,v18.16b - orr v18.16b,v6.16b,v6.16b - add w9,w8,#1 aese v4.16b,v20.16b aesmc v4.16b,v4.16b aese v5.16b,v20.16b @@ -658,20 +664,22 @@ aese v5.16b,v21.16b aesmc v5.16b,v5.16b eor v19.16b,v19.16b,v7.16b - rev w9,w9 + mov v6.s[3], w9 aese v17.16b,v21.16b aesmc v17.16b,v17.16b - mov v0.s[3], w9 + orr v0.16b,v6.16b,v6.16b rev w10,w10 aese v4.16b,v22.16b aesmc v4.16b,v4.16b + mov v6.s[3], w10 + rev w12,w8 aese v5.16b,v22.16b aesmc v5.16b,v5.16b - mov v1.s[3], w10 - rev w12,w8 + orr v1.16b,v6.16b,v6.16b + mov v6.s[3], w12 aese v17.16b,v22.16b aesmc v17.16b,v17.16b - mov v18.s[3], w12 + orr v18.16b,v6.16b,v6.16b subs x2,x2,#3 aese v4.16b,v23.16b aese v5.16b,v23.16b diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-aarch64" -#define DATE "built on: Tue Apr 21 13:29:03 2020 UTC" +#define DATE "built on: Tue Mar 15 17:24:57 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/chacha/chacha-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/chacha/chacha-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/chacha/chacha-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/chacha/chacha-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -3,6 +3,7 @@ .text +.hidden OPENSSL_armcap_P .align 5 .Lsigma: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/poly1305/poly1305-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/poly1305/poly1305-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/poly1305/poly1305-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/poly1305/poly1305-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -4,10 +4,14 @@ // forward "declarations" are required for Apple +.hidden OPENSSL_armcap_P +.globl poly1305_init +.hidden poly1305_init .globl poly1305_blocks +.hidden poly1305_blocks .globl poly1305_emit +.hidden poly1305_emit -.globl poly1305_init .type poly1305_init,%function .align 5 poly1305_init: @@ -795,8 +799,8 @@ st1 {v23.s}[0],[x0] .Lno_data_neon: -.inst 0xd50323bf // autiasp ldr x29,[sp],#80 +.inst 0xd50323bf // autiasp ret .size poly1305_blocks_neon,.-poly1305_blocks_neon diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha1-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha1-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha1-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha1-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -3,6 +3,7 @@ .text +.hidden OPENSSL_armcap_P .globl sha1_block_data_order .type sha1_block_data_order,%function .align 6 @@ -1218,4 +1219,3 @@ .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 -.comm OPENSSL_armcap_P,4,4 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha256-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha256-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha256-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha256-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -59,6 +59,7 @@ .text +.hidden OPENSSL_armcap_P .globl sha256_block_data_order .type sha256_block_data_order,%function .align 6 @@ -2060,6 +2061,3 @@ add sp,sp,#16*4+16 ret .size sha256_block_neon,.-sha256_block_neon -#ifndef __KERNEL__ -.comm OPENSSL_armcap_P,4,4 -#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha512-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha512-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha512-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/crypto/sha/sha512-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -59,6 +59,7 @@ .text +.hidden OPENSSL_armcap_P .globl sha512_block_data_order .type sha512_block_data_order,%function .align 6 @@ -1615,6 +1616,3 @@ ret .size sha512_block_armv8,.-sha512_block_armv8 #endif -#ifndef __KERNEL__ -.comm OPENSSL_armcap_P,4,4 -#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-aarch64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-aarch64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8970,6 +8975,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9547,6 +9556,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14257,6 +14267,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15231,19 +15249,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/aes/aesv8-armx.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/aes/aesv8-armx.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/aes/aesv8-armx.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/aes/aesv8-armx.S 2022-04-05 07:17:00.000000000 +0000 @@ -103,7 +103,12 @@ .Loop192: tbl v6.16b,{v4.16b},v2.16b ext v5.16b,v0.16b,v3.16b,#12 +#ifdef __ARMEB__ + st1 {v4.4s},[x2],#16 + sub x2,x2,#8 +#else st1 {v4.8b},[x2],#8 +#endif aese v6.16b,v0.16b subs w1,w1,#1 @@ -574,8 +579,11 @@ ldr w5,[x3,#240] ldr w8, [x4, #12] +#ifdef __ARMEB__ + ld1 {v0.16b},[x4] +#else ld1 {v0.4s},[x4] - +#endif ld1 {v16.4s,v17.4s},[x3] // load key schedule... sub w5,w5,#4 mov x12,#16 @@ -591,17 +599,17 @@ #ifndef __ARMEB__ rev w8, w8 #endif - orr v1.16b,v0.16b,v0.16b add w10, w8, #1 - orr v18.16b,v0.16b,v0.16b - add w8, w8, #2 orr v6.16b,v0.16b,v0.16b rev w10, w10 - mov v1.s[3],w10 + mov v6.s[3],w10 + add w8, w8, #2 + orr v1.16b,v6.16b,v6.16b b.ls .Lctr32_tail rev w12, w8 + mov v6.s[3],w12 sub x2,x2,#3 // bias - mov v18.s[3],w12 + orr v18.16b,v6.16b,v6.16b b .Loop3x_ctr32 .align 4 @@ -628,11 +636,11 @@ aese v1.16b,v16.16b aesmc v5.16b,v1.16b ld1 {v2.16b},[x0],#16 - orr v0.16b,v6.16b,v6.16b + add w9,w8,#1 aese v18.16b,v16.16b aesmc v18.16b,v18.16b ld1 {v3.16b},[x0],#16 - orr v1.16b,v6.16b,v6.16b + rev w9,w9 aese v4.16b,v17.16b aesmc v4.16b,v4.16b aese v5.16b,v17.16b @@ -641,8 +649,6 @@ mov x7,x3 aese v18.16b,v17.16b aesmc v17.16b,v18.16b - orr v18.16b,v6.16b,v6.16b - add w9,w8,#1 aese v4.16b,v20.16b aesmc v4.16b,v4.16b aese v5.16b,v20.16b @@ -658,20 +664,22 @@ aese v5.16b,v21.16b aesmc v5.16b,v5.16b eor v19.16b,v19.16b,v7.16b - rev w9,w9 + mov v6.s[3], w9 aese v17.16b,v21.16b aesmc v17.16b,v17.16b - mov v0.s[3], w9 + orr v0.16b,v6.16b,v6.16b rev w10,w10 aese v4.16b,v22.16b aesmc v4.16b,v4.16b + mov v6.s[3], w10 + rev w12,w8 aese v5.16b,v22.16b aesmc v5.16b,v5.16b - mov v1.s[3], w10 - rev w12,w8 + orr v1.16b,v6.16b,v6.16b + mov v6.s[3], w12 aese v17.16b,v22.16b aesmc v17.16b,v17.16b - mov v18.s[3], w12 + orr v18.16b,v6.16b,v6.16b subs x2,x2,#3 aese v4.16b,v23.16b aese v5.16b,v23.16b diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-aarch64" -#define DATE "built on: Tue Apr 21 13:29:05 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:01 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/chacha/chacha-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/chacha/chacha-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/chacha/chacha-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/chacha/chacha-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -3,6 +3,7 @@ .text +.hidden OPENSSL_armcap_P .align 5 .Lsigma: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/poly1305/poly1305-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/poly1305/poly1305-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/poly1305/poly1305-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/poly1305/poly1305-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -4,10 +4,14 @@ // forward "declarations" are required for Apple +.hidden OPENSSL_armcap_P +.globl poly1305_init +.hidden poly1305_init .globl poly1305_blocks +.hidden poly1305_blocks .globl poly1305_emit +.hidden poly1305_emit -.globl poly1305_init .type poly1305_init,%function .align 5 poly1305_init: @@ -795,8 +799,8 @@ st1 {v23.s}[0],[x0] .Lno_data_neon: -.inst 0xd50323bf // autiasp ldr x29,[sp],#80 +.inst 0xd50323bf // autiasp ret .size poly1305_blocks_neon,.-poly1305_blocks_neon diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha1-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha1-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha1-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha1-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -3,6 +3,7 @@ .text +.hidden OPENSSL_armcap_P .globl sha1_block_data_order .type sha1_block_data_order,%function .align 6 @@ -1218,4 +1219,3 @@ .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 .align 2 .align 2 -.comm OPENSSL_armcap_P,4,4 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha256-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha256-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha256-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha256-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -59,6 +59,7 @@ .text +.hidden OPENSSL_armcap_P .globl sha256_block_data_order .type sha256_block_data_order,%function .align 6 @@ -2060,6 +2061,3 @@ add sp,sp,#16*4+16 ret .size sha256_block_neon,.-sha256_block_neon -#ifndef __KERNEL__ -.comm OPENSSL_armcap_P,4,4 -#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha512-armv8.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha512-armv8.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha512-armv8.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/crypto/sha/sha512-armv8.S 2022-04-05 07:17:00.000000000 +0000 @@ -59,6 +59,7 @@ .text +.hidden OPENSSL_armcap_P .globl sha512_block_data_order .type sha512_block_data_order,%function .align 6 @@ -1615,6 +1616,3 @@ ret .size sha512_block_armv8,.-sha512_block_armv8 #endif -#ifndef __KERNEL__ -.comm OPENSSL_armcap_P,4,4 -#endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux-aarch64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-aarch64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1184,6 +1184,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8930,6 +8935,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9507,6 +9516,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14162,6 +14172,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15139,19 +15157,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-aarch64" -#define DATE "built on: Tue Apr 21 13:29:07 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:05 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-aarch64/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-aarch64/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-armv4" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-armv4", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8964,6 +8969,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9541,6 +9550,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14261,6 +14271,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15235,19 +15253,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/crypto/aes/aesv8-armx.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/crypto/aes/aesv8-armx.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/crypto/aes/aesv8-armx.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/crypto/aes/aesv8-armx.S 2022-04-05 07:17:00.000000000 +0000 @@ -108,7 +108,12 @@ vtbl.8 d20,{q8},d4 vtbl.8 d21,{q8},d5 vext.8 q9,q0,q3,#12 +#ifdef __ARMEB__ + vst1.32 {q8},[r2]! + sub r2,r2,#8 +#else vst1.32 {d16},[r2]! +#endif .byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0 subs r1,r1,#1 @@ -580,8 +585,11 @@ ldr r5,[r3,#240] ldr r8, [r4, #12] +#ifdef __ARMEB__ + vld1.8 {q0},[r4] +#else vld1.32 {q0},[r4] - +#endif vld1.32 {q8,q9},[r3] @ load key schedule... sub r5,r5,#4 mov r12,#16 @@ -597,17 +605,17 @@ #ifndef __ARMEB__ rev r8, r8 #endif - vorr q1,q0,q0 add r10, r8, #1 - vorr q10,q0,q0 - add r8, r8, #2 vorr q6,q0,q0 rev r10, r10 - vmov.32 d3[1],r10 + vmov.32 d13[1],r10 + add r8, r8, #2 + vorr q1,q6,q6 bls .Lctr32_tail rev r12, r8 + vmov.32 d13[1],r12 sub r2,r2,#3 @ bias - vmov.32 d21[1],r12 + vorr q10,q6,q6 b .Loop3x_ctr32 .align 4 @@ -634,11 +642,11 @@ .byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8 .byte 0x82,0xa3,0xb0,0xf3 @ aesmc q5,q1 vld1.8 {q2},[r0]! - vorr q0,q6,q6 + add r9,r8,#1 .byte 0x20,0x43,0xf0,0xf3 @ aese q10,q8 .byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10 vld1.8 {q3},[r0]! - vorr q1,q6,q6 + rev r9,r9 .byte 0x22,0x83,0xb0,0xf3 @ aese q4,q9 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x22,0xa3,0xb0,0xf3 @ aese q5,q9 @@ -647,8 +655,6 @@ mov r7,r3 .byte 0x22,0x43,0xf0,0xf3 @ aese q10,q9 .byte 0xa4,0x23,0xf0,0xf3 @ aesmc q9,q10 - vorr q10,q6,q6 - add r9,r8,#1 .byte 0x28,0x83,0xb0,0xf3 @ aese q4,q12 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x28,0xa3,0xb0,0xf3 @ aese q5,q12 @@ -664,20 +670,22 @@ .byte 0x2a,0xa3,0xb0,0xf3 @ aese q5,q13 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 veor q11,q11,q7 - rev r9,r9 + vmov.32 d13[1], r9 .byte 0x2a,0x23,0xf0,0xf3 @ aese q9,q13 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 - vmov.32 d1[1], r9 + vorr q0,q6,q6 rev r10,r10 .byte 0x2c,0x83,0xb0,0xf3 @ aese q4,q14 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 + vmov.32 d13[1], r10 + rev r12,r8 .byte 0x2c,0xa3,0xb0,0xf3 @ aese q5,q14 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 - vmov.32 d3[1], r10 - rev r12,r8 + vorr q1,q6,q6 + vmov.32 d13[1], r12 .byte 0x2c,0x23,0xf0,0xf3 @ aese q9,q14 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 - vmov.32 d21[1], r12 + vorr q10,q6,q6 subs r2,r2,#3 .byte 0x2e,0x83,0xb0,0xf3 @ aese q4,q15 .byte 0x2e,0xa3,0xb0,0xf3 @ aese q5,q15 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-armv4" -#define DATE "built on: Tue Apr 21 13:29:08 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:08 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/crypto/ec/ecp_nistz256-armv4.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/crypto/ec/ecp_nistz256-armv4.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/crypto/ec/ecp_nistz256-armv4.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/crypto/ec/ecp_nistz256-armv4.S 2022-04-05 07:17:00.000000000 +0000 @@ -3850,9 +3850,9 @@ ldr r14,[sp,#32*18+12] @ ~is_equal(S1,S2) mvn r10,r10 @ -1/0 -> 0/-1 mvn r12,r12 @ -1/0 -> 0/-1 - orr r11,r10 - orr r11,r12 - orrs r11,r14 @ set flags + orr r11,r11,r10 + orr r11,r11,r12 + orrs r11,r11,r14 @ set flags @ if(~is_equal(U1,U2) | in1infty | in2infty | ~is_equal(S1,S2)) bne .Ladd_proceed diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/crypto/poly1305/poly1305-armv4.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/crypto/poly1305/poly1305-armv4.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/crypto/poly1305/poly1305-armv4.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/crypto/poly1305/poly1305-armv4.S 2022-04-05 07:17:00.000000000 +0000 @@ -85,10 +85,10 @@ # ifdef __thumb2__ itete eq # endif - addeq r12,r11,#(poly1305_emit-.Lpoly1305_init) - addne r12,r11,#(poly1305_emit_neon-.Lpoly1305_init) - addeq r11,r11,#(poly1305_blocks-.Lpoly1305_init) - addne r11,r11,#(poly1305_blocks_neon-.Lpoly1305_init) + addeq r12,r11,#(.Lpoly1305_emit-.Lpoly1305_init) + addne r12,r11,#(.Lpoly1305_emit_neon-.Lpoly1305_init) + addeq r11,r11,#(.Lpoly1305_blocks-.Lpoly1305_init) + addne r11,r11,#(.Lpoly1305_blocks_neon-.Lpoly1305_init) # endif # ifdef __thumb2__ orr r12,r12,#1 @ thumb-ify address @@ -290,6 +290,7 @@ .type poly1305_emit,%function .align 5 poly1305_emit: +.Lpoly1305_emit: stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} .Lpoly1305_emit_enter: @@ -600,6 +601,7 @@ .type poly1305_blocks_neon,%function .align 5 poly1305_blocks_neon: +.Lpoly1305_blocks_neon: ldr ip,[r0,#36] @ is_base2_26 ands r2,r2,#-16 beq .Lno_data_neon @@ -1086,6 +1088,7 @@ .type poly1305_emit_neon,%function .align 5 poly1305_emit_neon: +.Lpoly1305_emit_neon: ldr ip,[r0,#36] @ is_base2_26 stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-armv4" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-armv4", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8964,6 +8969,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9541,6 +9550,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14261,6 +14271,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15235,19 +15253,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/aes/aesv8-armx.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/aes/aesv8-armx.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/aes/aesv8-armx.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/aes/aesv8-armx.S 2022-04-05 07:17:00.000000000 +0000 @@ -108,7 +108,12 @@ vtbl.8 d20,{q8},d4 vtbl.8 d21,{q8},d5 vext.8 q9,q0,q3,#12 +#ifdef __ARMEB__ + vst1.32 {q8},[r2]! + sub r2,r2,#8 +#else vst1.32 {d16},[r2]! +#endif .byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0 subs r1,r1,#1 @@ -580,8 +585,11 @@ ldr r5,[r3,#240] ldr r8, [r4, #12] +#ifdef __ARMEB__ + vld1.8 {q0},[r4] +#else vld1.32 {q0},[r4] - +#endif vld1.32 {q8,q9},[r3] @ load key schedule... sub r5,r5,#4 mov r12,#16 @@ -597,17 +605,17 @@ #ifndef __ARMEB__ rev r8, r8 #endif - vorr q1,q0,q0 add r10, r8, #1 - vorr q10,q0,q0 - add r8, r8, #2 vorr q6,q0,q0 rev r10, r10 - vmov.32 d3[1],r10 + vmov.32 d13[1],r10 + add r8, r8, #2 + vorr q1,q6,q6 bls .Lctr32_tail rev r12, r8 + vmov.32 d13[1],r12 sub r2,r2,#3 @ bias - vmov.32 d21[1],r12 + vorr q10,q6,q6 b .Loop3x_ctr32 .align 4 @@ -634,11 +642,11 @@ .byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8 .byte 0x82,0xa3,0xb0,0xf3 @ aesmc q5,q1 vld1.8 {q2},[r0]! - vorr q0,q6,q6 + add r9,r8,#1 .byte 0x20,0x43,0xf0,0xf3 @ aese q10,q8 .byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10 vld1.8 {q3},[r0]! - vorr q1,q6,q6 + rev r9,r9 .byte 0x22,0x83,0xb0,0xf3 @ aese q4,q9 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x22,0xa3,0xb0,0xf3 @ aese q5,q9 @@ -647,8 +655,6 @@ mov r7,r3 .byte 0x22,0x43,0xf0,0xf3 @ aese q10,q9 .byte 0xa4,0x23,0xf0,0xf3 @ aesmc q9,q10 - vorr q10,q6,q6 - add r9,r8,#1 .byte 0x28,0x83,0xb0,0xf3 @ aese q4,q12 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 .byte 0x28,0xa3,0xb0,0xf3 @ aese q5,q12 @@ -664,20 +670,22 @@ .byte 0x2a,0xa3,0xb0,0xf3 @ aese q5,q13 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 veor q11,q11,q7 - rev r9,r9 + vmov.32 d13[1], r9 .byte 0x2a,0x23,0xf0,0xf3 @ aese q9,q13 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 - vmov.32 d1[1], r9 + vorr q0,q6,q6 rev r10,r10 .byte 0x2c,0x83,0xb0,0xf3 @ aese q4,q14 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4 + vmov.32 d13[1], r10 + rev r12,r8 .byte 0x2c,0xa3,0xb0,0xf3 @ aese q5,q14 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5 - vmov.32 d3[1], r10 - rev r12,r8 + vorr q1,q6,q6 + vmov.32 d13[1], r12 .byte 0x2c,0x23,0xf0,0xf3 @ aese q9,q14 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9 - vmov.32 d21[1], r12 + vorr q10,q6,q6 subs r2,r2,#3 .byte 0x2e,0x83,0xb0,0xf3 @ aese q4,q15 .byte 0x2e,0xa3,0xb0,0xf3 @ aese q5,q15 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-armv4" -#define DATE "built on: Tue Apr 21 13:29:10 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:12 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/ec/ecp_nistz256-armv4.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/ec/ecp_nistz256-armv4.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/ec/ecp_nistz256-armv4.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/ec/ecp_nistz256-armv4.S 2022-04-05 07:17:00.000000000 +0000 @@ -3850,9 +3850,9 @@ ldr r14,[sp,#32*18+12] @ ~is_equal(S1,S2) mvn r10,r10 @ -1/0 -> 0/-1 mvn r12,r12 @ -1/0 -> 0/-1 - orr r11,r10 - orr r11,r12 - orrs r11,r14 @ set flags + orr r11,r11,r10 + orr r11,r11,r12 + orrs r11,r11,r14 @ set flags @ if(~is_equal(U1,U2) | in1infty | in2infty | ~is_equal(S1,S2)) bne .Ladd_proceed diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/poly1305/poly1305-armv4.S nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/poly1305/poly1305-armv4.S --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/poly1305/poly1305-armv4.S 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/crypto/poly1305/poly1305-armv4.S 2022-04-05 07:17:00.000000000 +0000 @@ -85,10 +85,10 @@ # ifdef __thumb2__ itete eq # endif - addeq r12,r11,#(poly1305_emit-.Lpoly1305_init) - addne r12,r11,#(poly1305_emit_neon-.Lpoly1305_init) - addeq r11,r11,#(poly1305_blocks-.Lpoly1305_init) - addne r11,r11,#(poly1305_blocks_neon-.Lpoly1305_init) + addeq r12,r11,#(.Lpoly1305_emit-.Lpoly1305_init) + addne r12,r11,#(.Lpoly1305_emit_neon-.Lpoly1305_init) + addeq r11,r11,#(.Lpoly1305_blocks-.Lpoly1305_init) + addne r11,r11,#(.Lpoly1305_blocks_neon-.Lpoly1305_init) # endif # ifdef __thumb2__ orr r12,r12,#1 @ thumb-ify address @@ -290,6 +290,7 @@ .type poly1305_emit,%function .align 5 poly1305_emit: +.Lpoly1305_emit: stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} .Lpoly1305_emit_enter: @@ -600,6 +601,7 @@ .type poly1305_blocks_neon,%function .align 5 poly1305_blocks_neon: +.Lpoly1305_blocks_neon: ldr ip,[r0,#36] @ is_base2_26 ands r2,r2,#-16 beq .Lno_data_neon @@ -1086,6 +1088,7 @@ .type poly1305_emit_neon,%function .align 5 poly1305_emit_neon: +.Lpoly1305_emit_neon: ldr ip,[r0,#36] @ is_base2_26 stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux-armv4" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-armv4", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1184,6 +1184,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8930,6 +8935,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9507,6 +9516,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14162,6 +14172,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15139,19 +15157,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-armv4" -#define DATE "built on: Tue Apr 21 13:29:12 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:16 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-armv4/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-armv4/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -63,7 +63,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-elf" ], perlenv => { "AR" => undef, @@ -112,8 +112,8 @@ sourcedir => ".", target => "linux-elf", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9010,6 +9015,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9587,6 +9596,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14307,6 +14317,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15281,19 +15299,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-elf" -#define DATE "built on: Tue Apr 21 13:29:13 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:18 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -63,7 +63,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-elf" ], perlenv => { "AR" => undef, @@ -112,8 +112,8 @@ sourcedir => ".", target => "linux-elf", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9010,6 +9015,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9587,6 +9596,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14307,6 +14317,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15281,19 +15299,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-elf" -#define DATE "built on: Tue Apr 21 13:29:15 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:23 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux-elf" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-elf", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1183,6 +1183,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8929,6 +8934,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9506,6 +9515,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14161,6 +14171,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15138,19 +15156,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-elf" -#define DATE "built on: Tue Apr 21 13:29:17 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:27 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-elf/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-elf/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-ppc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -165,7 +165,7 @@ keccak1600_obj => "keccak1600.o", lflags => "", lib_cflags => "", - lib_cppflags => "-DOPENSSL_USE_NODELETE", + lib_cppflags => "-DOPENSSL_USE_NODELETE -DB_ENDIAN", lib_defines => [ ], md5_asm_src => "", md5_obj => "", @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9009,6 +9014,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9586,6 +9595,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14306,6 +14316,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15280,19 +15298,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc" -#define DATE "built on: Tue Apr 21 13:29:40 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:18 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a @@ -24,13 +24,14 @@ ',','-','-','n','o','e','x','e','c','s','t','a','c','k',' ','-', 'W','a','l','l',' ','-','O','3',' ','-','D','O','P','E','N','S', 'S','L','_','U','S','E','_','N','O','D','E','L','E','T','E',' ', - '-','D','O','P','E','N','S','S','L','_','P','I','C',' ','-','D', - 'O','P','E','N','S','S','L','_','C','P','U','I','D','_','O','B', - 'J',' ','-','D','O','P','E','N','S','S','L','_','B','N','_','A', - 'S','M','_','M','O','N','T',' ','-','D','S','H','A','1','_','A', - 'S','M',' ','-','D','S','H','A','2','5','6','_','A','S','M',' ', - '-','D','S','H','A','5','1','2','_','A','S','M',' ','-','D','A', - 'E','S','_','A','S','M',' ','-','D','V','P','A','E','S','_','A', - 'S','M',' ','-','D','P','O','L','Y','1','3','0','5','_','A','S', - 'M',' ','-','D','N','D','E','B','U','G','\0' + '-','D','B','_','E','N','D','I','A','N',' ','-','D','O','P','E', + 'N','S','S','L','_','P','I','C',' ','-','D','O','P','E','N','S', + 'S','L','_','C','P','U','I','D','_','O','B','J',' ','-','D','O', + 'P','E','N','S','S','L','_','B','N','_','A','S','M','_','M','O', + 'N','T',' ','-','D','S','H','A','1','_','A','S','M',' ','-','D', + 'S','H','A','2','5','6','_','A','S','M',' ','-','D','S','H','A', + '5','1','2','_','A','S','M',' ','-','D','A','E','S','_','A','S', + 'M',' ','-','D','V','P','A','E','S','_','A','S','M',' ','-','D', + 'P','O','L','Y','1','3','0','5','_','A','S','M',' ','-','D','N', + 'D','E','B','U','G','\0' }; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/openssl-cl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/openssl-cl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/openssl-cl.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/openssl-cl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -3,6 +3,7 @@ 'openssl_defines_linux-ppc': [ 'NDEBUG', 'OPENSSL_USE_NODELETE', + 'B_ENDIAN', 'OPENSSL_PIC', 'OPENSSL_CPUID_OBJ', 'OPENSSL_BN_ASM_MONT', diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/openssl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/openssl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm/openssl.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm/openssl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -700,6 +700,7 @@ 'openssl_defines_linux-ppc': [ 'NDEBUG', 'OPENSSL_USE_NODELETE', + 'B_ENDIAN', 'OPENSSL_PIC', 'OPENSSL_CPUID_OBJ', 'OPENSSL_BN_ASM_MONT', diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-ppc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -165,7 +165,7 @@ keccak1600_obj => "keccak1600.o", lflags => "", lib_cflags => "", - lib_cppflags => "-DOPENSSL_USE_NODELETE", + lib_cppflags => "-DOPENSSL_USE_NODELETE -DB_ENDIAN", lib_defines => [ ], md5_asm_src => "", md5_obj => "", @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9009,6 +9014,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9586,6 +9595,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14306,6 +14316,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15280,19 +15298,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc" -#define DATE "built on: Tue Apr 21 13:29:42 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:22 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a @@ -25,13 +25,14 @@ 'W','a',',','-','-','n','o','e','x','e','c','s','t','a','c','k', ' ','-','W','a','l','l',' ','-','O','3',' ','-','D','O','P','E', 'N','S','S','L','_','U','S','E','_','N','O','D','E','L','E','T', - 'E',' ','-','D','O','P','E','N','S','S','L','_','P','I','C',' ', - '-','D','O','P','E','N','S','S','L','_','C','P','U','I','D','_', - 'O','B','J',' ','-','D','O','P','E','N','S','S','L','_','B','N', - '_','A','S','M','_','M','O','N','T',' ','-','D','S','H','A','1', - '_','A','S','M',' ','-','D','S','H','A','2','5','6','_','A','S', - 'M',' ','-','D','S','H','A','5','1','2','_','A','S','M',' ','-', - 'D','A','E','S','_','A','S','M',' ','-','D','V','P','A','E','S', - '_','A','S','M',' ','-','D','P','O','L','Y','1','3','0','5','_', - 'A','S','M',' ','-','D','N','D','E','B','U','G','\0' + 'E',' ','-','D','B','_','E','N','D','I','A','N',' ','-','D','O', + 'P','E','N','S','S','L','_','P','I','C',' ','-','D','O','P','E', + 'N','S','S','L','_','C','P','U','I','D','_','O','B','J',' ','-', + 'D','O','P','E','N','S','S','L','_','B','N','_','A','S','M','_', + 'M','O','N','T',' ','-','D','S','H','A','1','_','A','S','M',' ', + '-','D','S','H','A','2','5','6','_','A','S','M',' ','-','D','S', + 'H','A','5','1','2','_','A','S','M',' ','-','D','A','E','S','_', + 'A','S','M',' ','-','D','V','P','A','E','S','_','A','S','M',' ', + '-','D','P','O','L','Y','1','3','0','5','_','A','S','M',' ','-', + 'D','N','D','E','B','U','G','\0' }; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/openssl-cl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/openssl-cl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/openssl-cl.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/openssl-cl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -3,6 +3,7 @@ 'openssl_defines_linux-ppc': [ 'NDEBUG', 'OPENSSL_USE_NODELETE', + 'B_ENDIAN', 'OPENSSL_PIC', 'OPENSSL_CPUID_OBJ', 'OPENSSL_BN_ASM_MONT', diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/openssl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/openssl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/asm_avx2/openssl.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/asm_avx2/openssl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -700,6 +700,7 @@ 'openssl_defines_linux-ppc': [ 'NDEBUG', 'OPENSSL_USE_NODELETE', + 'B_ENDIAN', 'OPENSSL_PIC', 'OPENSSL_CPUID_OBJ', 'OPENSSL_BN_ASM_MONT', diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux-ppc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -165,7 +165,7 @@ keccak1600_obj => "keccak1600.o", lflags => "", lib_cflags => "", - lib_cppflags => "-DOPENSSL_USE_NODELETE", + lib_cppflags => "-DOPENSSL_USE_NODELETE -DB_ENDIAN", lib_defines => [ ], md5_asm_src => "", md5_obj => "", @@ -1184,6 +1184,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8930,6 +8935,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9507,6 +9516,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14162,6 +14172,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15139,19 +15157,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc" -#define DATE "built on: Tue Apr 21 13:29:44 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:25 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a @@ -23,6 +23,6 @@ 'P','I','C',' ','-','p','t','h','r','e','a','d',' ','-','W','a', 'l','l',' ','-','O','3',' ','-','D','O','P','E','N','S','S','L', '_','U','S','E','_','N','O','D','E','L','E','T','E',' ','-','D', - 'O','P','E','N','S','S','L','_','P','I','C',' ','-','D','N','D', - 'E','B','U','G','\0' + 'B','_','E','N','D','I','A','N',' ','-','D','O','P','E','N','S', + 'S','L','_','P','I','C',' ','-','D','N','D','E','B','U','G','\0' }; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/openssl-cl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/openssl-cl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/openssl-cl.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/openssl-cl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -3,6 +3,7 @@ 'openssl_defines_linux-ppc': [ 'NDEBUG', 'OPENSSL_USE_NODELETE', + 'B_ENDIAN', 'OPENSSL_PIC', ], 'openssl_cflags_linux-ppc': [ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/openssl.gypi nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/openssl.gypi --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc/no-asm/openssl.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc/no-asm/openssl.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -687,6 +687,7 @@ 'openssl_defines_linux-ppc': [ 'NDEBUG', 'OPENSSL_USE_NODELETE', + 'B_ENDIAN', 'OPENSSL_PIC', ], 'openssl_cflags_linux-ppc': [ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-ppc64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9028,6 +9033,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9605,6 +9614,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14340,6 +14350,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15314,19 +15332,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc64" -#define DATE "built on: Tue Apr 21 13:29:45 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:28 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-ppc64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1186,6 +1186,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9028,6 +9033,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9605,6 +9614,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14340,6 +14350,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15314,19 +15332,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc64" -#define DATE "built on: Tue Apr 21 13:29:47 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:32 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux-ppc64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8931,6 +8936,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9508,6 +9517,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14163,6 +14173,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15140,19 +15158,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc64" -#define DATE "built on: Tue Apr 21 13:29:49 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:36 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-ppc64le" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc64le", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9027,6 +9032,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9604,6 +9613,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14339,6 +14349,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15313,19 +15331,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc64le" -#define DATE "built on: Tue Apr 21 13:29:50 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:38 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-ppc64le" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc64le", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9027,6 +9032,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9604,6 +9613,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14339,6 +14349,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15313,19 +15331,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc64le" -#define DATE "built on: Tue Apr 21 13:29:52 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:43 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux-ppc64le" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-ppc64le", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1184,6 +1184,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8930,6 +8935,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9507,6 +9516,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14162,6 +14172,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15139,19 +15157,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-ppc64le" -#define DATE "built on: Tue Apr 21 13:29:54 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:47 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-ppc64le/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-ppc64le/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -63,7 +63,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-x32" ], perlenv => { "AR" => undef, @@ -112,8 +112,8 @@ sourcedir => ".", target => "linux-x32", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1187,6 +1187,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9084,6 +9089,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9661,6 +9670,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14431,6 +14441,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15405,19 +15423,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha1_enc,@function .align 32 aesni_cbc_sha1_enc: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+0(%rip),%r10d movq OPENSSL_ia32cap_P+4(%rip),%r11 @@ -18,7 +18,7 @@ je aesni_cbc_sha1_enc_avx jmp aesni_cbc_sha1_enc_ssse3 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc .type aesni_cbc_sha1_enc_ssse3,@function .align 32 @@ -2732,7 +2732,7 @@ .type aesni_cbc_sha1_enc_shaext,@function .align 32 aesni_cbc_sha1_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 movdqu (%r9),%xmm8 movd 16(%r9),%xmm9 @@ -3031,5 +3031,5 @@ movdqu %xmm8,(%r9) movd %xmm9,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha256_enc,@function .align 16 aesni_cbc_sha256_enc: -.cfi_startproc +.cfi_startproc leaq OPENSSL_ia32cap_P(%rip),%r11 movl $1,%eax cmpq $0,%rdi @@ -31,7 +31,7 @@ ud2 .Lprobe: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc .align 64 @@ -4081,7 +4081,7 @@ .type aesni_cbc_sha256_enc_shaext,@function .align 32 aesni_cbc_sha256_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 leaq K256+128(%rip),%rax movdqu (%r9),%xmm1 @@ -4431,5 +4431,5 @@ movdqu %xmm1,(%r9) movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/aes/aesni-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -861,7 +861,7 @@ .type aesni_ccm64_encrypt_blocks,@function .align 16 aesni_ccm64_encrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -920,13 +920,13 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -1019,7 +1019,7 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks .type aesni_ctr32_encrypt_blocks,@function @@ -2794,7 +2794,7 @@ .type __ocb_encrypt6,@function .align 32 __ocb_encrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2892,13 +2892,13 @@ .byte 102,65,15,56,221,246 .byte 102,65,15,56,221,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt6,.-__ocb_encrypt6 .type __ocb_encrypt4,@function .align 32 __ocb_encrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2963,13 +2963,13 @@ .byte 102,65,15,56,221,228 .byte 102,65,15,56,221,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt4,.-__ocb_encrypt4 .type __ocb_encrypt1,@function .align 32 __ocb_encrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm2,%xmm8 @@ -3000,7 +3000,7 @@ .byte 102,15,56,221,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt1,.-__ocb_encrypt1 .globl aesni_ocb_decrypt @@ -3243,7 +3243,7 @@ .type __ocb_decrypt6,@function .align 32 __ocb_decrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3335,13 +3335,13 @@ .byte 102,65,15,56,223,246 .byte 102,65,15,56,223,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt6,.-__ocb_decrypt6 .type __ocb_decrypt4,@function .align 32 __ocb_decrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3402,13 +3402,13 @@ .byte 102,65,15,56,223,228 .byte 102,65,15,56,223,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt4,.-__ocb_decrypt4 .type __ocb_decrypt1,@function .align 32 __ocb_decrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm7,%xmm2 @@ -3438,7 +3438,7 @@ .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt1,.-__ocb_decrypt1 .globl aesni_cbc_encrypt .type aesni_cbc_encrypt,@function @@ -4447,7 +4447,7 @@ shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_set_encrypt_key,.-aesni_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/bn/rsaz-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/bn/rsaz-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/bn/rsaz-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/bn/rsaz-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1453,7 +1453,7 @@ .type __rsaz_512_reduce,@function .align 32 __rsaz_512_reduce: -.cfi_startproc +.cfi_startproc movq %r8,%rbx imulq 128+8(%rsp),%rbx movq 0(%rbp),%rax @@ -1533,12 +1533,12 @@ jne .Lreduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reduce,.-__rsaz_512_reduce .type __rsaz_512_reducex,@function .align 32 __rsaz_512_reducex: -.cfi_startproc +.cfi_startproc imulq %r8,%rdx xorq %rsi,%rsi @@ -1591,12 +1591,12 @@ jne .Lreduction_loopx .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reducex,.-__rsaz_512_reducex .type __rsaz_512_subtract,@function .align 32 __rsaz_512_subtract: -.cfi_startproc +.cfi_startproc movq %r8,(%rdi) movq %r9,8(%rdi) movq %r10,16(%rdi) @@ -1650,12 +1650,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_subtract,.-__rsaz_512_subtract .type __rsaz_512_mul,@function .align 32 __rsaz_512_mul: -.cfi_startproc +.cfi_startproc leaq 8(%rsp),%rdi movq (%rsi),%rax @@ -1794,12 +1794,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mul,.-__rsaz_512_mul .type __rsaz_512_mulx,@function .align 32 __rsaz_512_mulx: -.cfi_startproc +.cfi_startproc mulxq (%rsi),%rbx,%r8 movq $-6,%rcx @@ -1916,13 +1916,13 @@ movq %r15,8+64+56(%rsp) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mulx,.-__rsaz_512_mulx .globl rsaz_512_scatter4 .type rsaz_512_scatter4,@function .align 16 rsaz_512_scatter4: -.cfi_startproc +.cfi_startproc leaq (%rdi,%rdx,8),%rdi movl $8,%r9d jmp .Loop_scatter @@ -1935,14 +1935,14 @@ decl %r9d jnz .Loop_scatter .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size rsaz_512_scatter4,.-rsaz_512_scatter4 .globl rsaz_512_gather4 .type rsaz_512_gather4,@function .align 16 rsaz_512_gather4: -.cfi_startproc +.cfi_startproc movd %edx,%xmm8 movdqa .Linc+16(%rip),%xmm1 movdqa .Linc(%rip),%xmm0 @@ -2006,7 +2006,7 @@ jnz .Loop_gather .byte 0xf3,0xc3 .LSEH_end_rsaz_512_gather4: -.cfi_endproc +.cfi_endproc .size rsaz_512_gather4,.-rsaz_512_gather4 .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/bn/x86_64-mont5.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/bn/x86_64-mont5.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/bn/x86_64-mont5.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/bn/x86_64-mont5.s 2022-04-05 07:17:00.000000000 +0000 @@ -550,7 +550,7 @@ .type mul4x_internal,@function .align 32 mul4x_internal: -.cfi_startproc +.cfi_startproc shlq $5,%r9 movd 8(%rax),%xmm5 leaq .Linc(%rip),%rax @@ -1072,7 +1072,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqr4x_sub_entry -.cfi_endproc +.cfi_endproc .size mul4x_internal,.-mul4x_internal .globl bn_power5 .type bn_power5,@function @@ -1215,7 +1215,7 @@ .align 32 bn_sqr8x_internal: __bn_sqr8x_internal: -.cfi_startproc +.cfi_startproc @@ -1990,12 +1990,12 @@ cmpq %rdx,%rdi jb .L8x_reduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_sqr8x_internal,.-bn_sqr8x_internal .type __bn_post4x_internal,@function .align 32 __bn_post4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 leaq (%rdi,%r9,1),%rbx movq %r9,%rcx @@ -2046,18 +2046,18 @@ movq %r9,%r10 negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_post4x_internal,.-__bn_post4x_internal .globl bn_from_montgomery .type bn_from_montgomery,@function .align 32 bn_from_montgomery: -.cfi_startproc +.cfi_startproc testl $7,%r9d jz bn_from_mont8x xorl %eax,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_from_montgomery,.-bn_from_montgomery .type bn_from_mont8x,@function @@ -2341,7 +2341,7 @@ .type mulx4x_internal,@function .align 32 mulx4x_internal: -.cfi_startproc +.cfi_startproc movq %r9,8(%rsp) movq %r9,%r10 negq %r9 @@ -2760,7 +2760,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqrx4x_sub_entry -.cfi_endproc +.cfi_endproc .size mulx4x_internal,.-mulx4x_internal .type bn_powerx5,@function .align 32 @@ -3519,7 +3519,7 @@ .size bn_sqrx8x_internal,.-bn_sqrx8x_internal .align 32 __bn_postx4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 movq %rcx,%r10 movq %rcx,%r9 @@ -3567,13 +3567,13 @@ negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_get_bits5 .type bn_get_bits5,@function .align 16 bn_get_bits5: -.cfi_startproc +.cfi_startproc leaq 0(%rdi),%r10 leaq 1(%rdi),%r11 movl %esi,%ecx @@ -3587,14 +3587,14 @@ shrl %cl,%eax andl $31,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_get_bits5,.-bn_get_bits5 .globl bn_scatter5 .type bn_scatter5,@function .align 16 bn_scatter5: -.cfi_startproc +.cfi_startproc cmpl $0,%esi jz .Lscatter_epilogue leaq (%rdx,%rcx,8),%rdx @@ -3607,7 +3607,7 @@ jnz .Lscatter .Lscatter_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_scatter5,.-bn_scatter5 .globl bn_gather5 @@ -3615,7 +3615,7 @@ .align 32 bn_gather5: .LSEH_begin_bn_gather5: -.cfi_startproc +.cfi_startproc .byte 0x4c,0x8d,0x14,0x24 .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 @@ -3773,7 +3773,7 @@ leaq (%r10),%rsp .byte 0xf3,0xc3 .LSEH_end_bn_gather5: -.cfi_endproc +.cfi_endproc .size bn_gather5,.-bn_gather5 .align 64 .Linc: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-x32" -#define DATE "built on: Tue Apr 21 13:29:19 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:30 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/camellia/cmll-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/camellia/cmll-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/camellia/cmll-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/camellia/cmll-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,13 +5,13 @@ .type Camellia_EncryptBlock,@function .align 16 Camellia_EncryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Lenc_rounds -.cfi_endproc +.cfi_endproc .size Camellia_EncryptBlock,.-Camellia_EncryptBlock .globl Camellia_EncryptBlock_Rounds @@ -85,7 +85,7 @@ .type _x86_64_Camellia_encrypt,@function .align 16 _x86_64_Camellia_encrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -288,7 +288,7 @@ movl %edx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt @@ -296,13 +296,13 @@ .type Camellia_DecryptBlock,@function .align 16 Camellia_DecryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Ldec_rounds -.cfi_endproc +.cfi_endproc .size Camellia_DecryptBlock,.-Camellia_DecryptBlock .globl Camellia_DecryptBlock_Rounds @@ -376,7 +376,7 @@ .type _x86_64_Camellia_decrypt,@function .align 16 _x86_64_Camellia_decrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -580,7 +580,7 @@ movl %ebx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt .globl Camellia_Ekeygen .type Camellia_Ekeygen,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/ec/ecp_nistz256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/ec/ecp_nistz256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/ec/ecp_nistz256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/ec/ecp_nistz256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3874,12 +3874,12 @@ .type ecp_nistz256_to_mont,@function .align 32 ecp_nistz256_to_mont: -.cfi_startproc +.cfi_startproc movl $0x80100,%ecx andl OPENSSL_ia32cap_P+8(%rip),%ecx leaq .LRR(%rip),%rdx jmp .Lmul_mont -.cfi_endproc +.cfi_endproc .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont @@ -4823,7 +4823,7 @@ .type ecp_nistz256_scatter_w5,@function .align 32 ecp_nistz256_scatter_w5: -.cfi_startproc +.cfi_startproc leal -3(%rdx,%rdx,2),%edx movdqa 0(%rsi),%xmm0 shll $5,%edx @@ -4840,7 +4840,7 @@ movdqa %xmm5,80(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 @@ -4914,7 +4914,7 @@ .type ecp_nistz256_scatter_w7,@function .align 32 ecp_nistz256_scatter_w7: -.cfi_startproc +.cfi_startproc movdqu 0(%rsi),%xmm0 shll $6,%edx movdqu 16(%rsi),%xmm1 @@ -4926,7 +4926,7 @@ movdqa %xmm3,48(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/ec/x25519-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/ec/x25519-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/ec/x25519-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/ec/x25519-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -400,14 +400,14 @@ .type x25519_fe64_eligible,@function .align 32 x25519_fe64_eligible: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+8(%rip),%ecx xorl %eax,%eax andl $0x80100,%ecx cmpl $0x80100,%ecx cmovel %ecx,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_eligible,.-x25519_fe64_eligible .globl x25519_fe64_mul @@ -650,7 +650,7 @@ .align 32 x25519_fe64_mul121666: .Lfe64_mul121666_body: -.cfi_startproc +.cfi_startproc movl $121666,%edx mulxq 0(%rsi),%r8,%rcx mulxq 8(%rsi),%r9,%rax @@ -679,7 +679,7 @@ .Lfe64_mul121666_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_mul121666,.-x25519_fe64_mul121666 .globl x25519_fe64_add @@ -687,7 +687,7 @@ .align 32 x25519_fe64_add: .Lfe64_add_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -716,7 +716,7 @@ .Lfe64_add_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_add,.-x25519_fe64_add .globl x25519_fe64_sub @@ -724,7 +724,7 @@ .align 32 x25519_fe64_sub: .Lfe64_sub_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -753,7 +753,7 @@ .Lfe64_sub_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_sub,.-x25519_fe64_sub .globl x25519_fe64_tobytes @@ -761,7 +761,7 @@ .align 32 x25519_fe64_tobytes: .Lfe64_to_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -797,6 +797,6 @@ .Lfe64_to_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes .byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/modes/aesni-gcm-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/modes/aesni-gcm-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/modes/aesni-gcm-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/modes/aesni-gcm-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type _aesni_ctr32_ghash_6x,@function .align 32 _aesni_ctr32_ghash_6x: -.cfi_startproc +.cfi_startproc vmovdqu 32(%r11),%xmm2 subq $6,%rdx vpxor %xmm4,%xmm4,%xmm4 @@ -311,7 +311,7 @@ vpxor %xmm4,%xmm8,%xmm8 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x .globl aesni_gcm_decrypt .type aesni_gcm_decrypt,@function @@ -418,7 +418,7 @@ .type _aesni_ctr32_6x,@function .align 32 _aesni_ctr32_6x: -.cfi_startproc +.cfi_startproc vmovdqu 0-128(%rcx),%xmm4 vmovdqu 32(%r11),%xmm2 leaq -1(%rbp),%r13 @@ -505,7 +505,7 @@ vpshufb %xmm0,%xmm1,%xmm1 vpxor %xmm4,%xmm14,%xmm14 jmp .Loop_ctr32 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_6x,.-_aesni_ctr32_6x .globl aesni_gcm_encrypt diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type poly1305_init,@function .align 32 poly1305_init: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -48,7 +48,7 @@ movl $1,%eax .Lno_key: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init,.-poly1305_init .type poly1305_blocks,@function @@ -169,7 +169,7 @@ .type poly1305_emit,@function .align 32 poly1305_emit: -.cfi_startproc +.cfi_startproc .Lemit: movq 0(%rdi),%r8 movq 8(%rdi),%r9 @@ -190,12 +190,12 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit,.-poly1305_emit .type __poly1305_block,@function .align 32 __poly1305_block: -.cfi_startproc +.cfi_startproc mulq %r14 movq %rax,%r9 movq %r11,%rax @@ -235,13 +235,13 @@ adcq $0,%rbx adcq $0,%rbp .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,@function .align 32 __poly1305_init_avx: -.cfi_startproc +.cfi_startproc movq %r11,%r14 movq %r12,%rbx xorq %rbp,%rbp @@ -399,7 +399,7 @@ leaq -48-64(%rdi),%rdi .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_init_avx,.-__poly1305_init_avx .type poly1305_blocks_avx,@function @@ -1240,7 +1240,7 @@ .type poly1305_emit_avx,@function .align 32 poly1305_emit_avx: -.cfi_startproc +.cfi_startproc cmpl $0,20(%rdi) je .Lemit @@ -1291,7 +1291,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_avx,.-poly1305_emit_avx .type poly1305_blocks_avx2,@function .align 32 @@ -2488,7 +2488,7 @@ .type poly1305_init_base2_44,@function .align 32 poly1305_init_base2_44: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -2522,12 +2522,12 @@ movl %r11d,4(%rdx) movl $1,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init_base2_44,.-poly1305_init_base2_44 .type poly1305_blocks_vpmadd52,@function .align 32 poly1305_blocks_vpmadd52: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52 @@ -2634,12 +2634,12 @@ .Lno_data_vpmadd52: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52 .type poly1305_blocks_vpmadd52_4x,@function .align 32 poly1305_blocks_vpmadd52_4x: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52_4x @@ -3064,12 +3064,12 @@ .Lno_data_vpmadd52_4x: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x .type poly1305_blocks_vpmadd52_8x,@function .align 32 poly1305_blocks_vpmadd52_8x: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52_8x @@ -3410,12 +3410,12 @@ .Lno_data_vpmadd52_8x: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x .type poly1305_emit_base2_44,@function .align 32 poly1305_emit_base2_44: -.cfi_startproc +.cfi_startproc movq 0(%rdi),%r8 movq 8(%rdi),%r9 movq 16(%rdi),%r10 @@ -3446,7 +3446,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_base2_44,.-poly1305_emit_base2_44 .align 64 .Lconst: @@ -3485,7 +3485,7 @@ .type xor128_encrypt_n_pad,@function .align 16 xor128_encrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -3527,14 +3527,14 @@ .Ldone_enc: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad .type xor128_decrypt_n_pad,@function .align 16 xor128_decrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -3580,5 +3580,5 @@ .Ldone_dec: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/rc4/rc4-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/rc4/rc4-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/rc4/rc4-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/rc4/rc4-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type RC4,@function .align 16 RC4: -.cfi_startproc +.cfi_startproc orq %rsi,%rsi jne .Lentry .byte 0xf3,0xc3 @@ -534,7 +534,7 @@ .type RC4_set_key,@function .align 16 RC4_set_key: -.cfi_startproc +.cfi_startproc leaq 8(%rdi),%rdi leaq (%rdx,%rsi,1),%rdx negq %rsi @@ -601,14 +601,14 @@ movl %eax,-8(%rdi) movl %eax,-4(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size RC4_set_key,.-RC4_set_key .globl RC4_options .type RC4_options,@function .align 16 RC4_options: -.cfi_startproc +.cfi_startproc leaq .Lopts(%rip),%rax movl OPENSSL_ia32cap_P(%rip),%edx btl $20,%edx @@ -621,7 +621,7 @@ addq $12,%rax .Ldone: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .align 64 .Lopts: .byte 114,99,52,40,56,120,44,105,110,116,41,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/sha/keccak1600-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/sha/keccak1600-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/sha/keccak1600-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/sha/keccak1600-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type __KeccakF1600,@function .align 32 __KeccakF1600: -.cfi_startproc +.cfi_startproc movq 60(%rdi),%rax movq 68(%rdi),%rbx movq 76(%rdi),%rcx @@ -256,7 +256,7 @@ leaq -192(%r15),%r15 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __KeccakF1600,.-__KeccakF1600 .type KeccakF1600,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/sha/sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/sha/sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/sha/sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/sha/sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1422,7 +1422,7 @@ movdqu %xmm0,(%rdi) movd %xmm1,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/sha/sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/sha/sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/sha/sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/sha/sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1775,7 +1775,7 @@ .align 64 sha256_block_data_order_shaext: _shaext_shortcut: -.cfi_startproc +.cfi_startproc leaq K256+128(%rip),%rcx movdqu (%rdi),%xmm1 movdqu 16(%rdi),%xmm2 @@ -1978,7 +1978,7 @@ movdqu %xmm1,(%rdi) movdqu %xmm2,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext .type sha256_block_data_order_ssse3,@function .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: -.cfi_startproc +.cfi_startproc movl (%rdi),%eax .Lspin: leaq (%rsi,%rax,1),%r8 .byte 0xf0 @@ -21,19 +21,19 @@ movl %r8d,%eax .byte 0x48,0x98 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_atomic_add,.-OPENSSL_atomic_add .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: -.cfi_startproc +.cfi_startproc rdtsc shlq $32,%rdx orq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_rdtsc,.-OPENSSL_rdtsc .globl OPENSSL_ia32_cpuid @@ -209,7 +209,7 @@ .type OPENSSL_cleanse,@function .align 16 OPENSSL_cleanse: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $15,%rsi jae .Lot @@ -239,14 +239,14 @@ cmpq $0,%rsi jne .Little .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,@function .align 16 CRYPTO_memcmp: -.cfi_startproc +.cfi_startproc xorq %rax,%rax xorq %r10,%r10 cmpq $0,%rdx @@ -275,13 +275,13 @@ shrq $63,%rax .Lno_data: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: -.cfi_startproc +.cfi_startproc pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -308,13 +308,13 @@ xorq %r11,%r11 leaq 8(%rsp),%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 OPENSSL_instrument_bus: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rsi,%r11 @@ -341,14 +341,14 @@ movq %r11,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus .globl OPENSSL_instrument_bus2 .type OPENSSL_instrument_bus2,@function .align 16 OPENSSL_instrument_bus2: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rdx,%r11 @@ -391,13 +391,13 @@ movq 8(%rsp),%rax subq %rcx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 .globl OPENSSL_ia32_rdrand_bytes .type OPENSSL_ia32_rdrand_bytes,@function .align 16 OPENSSL_ia32_rdrand_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdrand_bytes @@ -434,13 +434,13 @@ .Ldone_rdrand_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes .globl OPENSSL_ia32_rdseed_bytes .type OPENSSL_ia32_rdseed_bytes,@function .align 16 OPENSSL_ia32_rdseed_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdseed_bytes @@ -477,5 +477,5 @@ .Ldone_rdseed_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -63,7 +63,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-x32" ], perlenv => { "AR" => undef, @@ -112,8 +112,8 @@ sourcedir => ".", target => "linux-x32", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1187,6 +1187,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9084,6 +9089,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9661,6 +9670,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14431,6 +14441,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15405,19 +15423,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha1_enc,@function .align 32 aesni_cbc_sha1_enc: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+0(%rip),%r10d movq OPENSSL_ia32cap_P+4(%rip),%r11 @@ -18,7 +18,7 @@ je aesni_cbc_sha1_enc_avx jmp aesni_cbc_sha1_enc_ssse3 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc .type aesni_cbc_sha1_enc_ssse3,@function .align 32 @@ -2732,7 +2732,7 @@ .type aesni_cbc_sha1_enc_shaext,@function .align 32 aesni_cbc_sha1_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 movdqu (%r9),%xmm8 movd 16(%r9),%xmm9 @@ -3031,5 +3031,5 @@ movdqu %xmm8,(%r9) movd %xmm9,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha256_enc,@function .align 16 aesni_cbc_sha256_enc: -.cfi_startproc +.cfi_startproc leaq OPENSSL_ia32cap_P(%rip),%r11 movl $1,%eax cmpq $0,%rdi @@ -31,7 +31,7 @@ ud2 .Lprobe: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc .align 64 @@ -4081,7 +4081,7 @@ .type aesni_cbc_sha256_enc_shaext,@function .align 32 aesni_cbc_sha256_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 leaq K256+128(%rip),%rax movdqu (%r9),%xmm1 @@ -4431,5 +4431,5 @@ movdqu %xmm1,(%r9) movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/aes/aesni-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -861,7 +861,7 @@ .type aesni_ccm64_encrypt_blocks,@function .align 16 aesni_ccm64_encrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -920,13 +920,13 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -1019,7 +1019,7 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks .type aesni_ctr32_encrypt_blocks,@function @@ -2794,7 +2794,7 @@ .type __ocb_encrypt6,@function .align 32 __ocb_encrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2892,13 +2892,13 @@ .byte 102,65,15,56,221,246 .byte 102,65,15,56,221,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt6,.-__ocb_encrypt6 .type __ocb_encrypt4,@function .align 32 __ocb_encrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2963,13 +2963,13 @@ .byte 102,65,15,56,221,228 .byte 102,65,15,56,221,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt4,.-__ocb_encrypt4 .type __ocb_encrypt1,@function .align 32 __ocb_encrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm2,%xmm8 @@ -3000,7 +3000,7 @@ .byte 102,15,56,221,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt1,.-__ocb_encrypt1 .globl aesni_ocb_decrypt @@ -3243,7 +3243,7 @@ .type __ocb_decrypt6,@function .align 32 __ocb_decrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3335,13 +3335,13 @@ .byte 102,65,15,56,223,246 .byte 102,65,15,56,223,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt6,.-__ocb_decrypt6 .type __ocb_decrypt4,@function .align 32 __ocb_decrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3402,13 +3402,13 @@ .byte 102,65,15,56,223,228 .byte 102,65,15,56,223,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt4,.-__ocb_decrypt4 .type __ocb_decrypt1,@function .align 32 __ocb_decrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm7,%xmm2 @@ -3438,7 +3438,7 @@ .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt1,.-__ocb_decrypt1 .globl aesni_cbc_encrypt .type aesni_cbc_encrypt,@function @@ -4447,7 +4447,7 @@ shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_set_encrypt_key,.-aesni_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/bn/rsaz-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/bn/rsaz-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/bn/rsaz-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/bn/rsaz-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1453,7 +1453,7 @@ .type __rsaz_512_reduce,@function .align 32 __rsaz_512_reduce: -.cfi_startproc +.cfi_startproc movq %r8,%rbx imulq 128+8(%rsp),%rbx movq 0(%rbp),%rax @@ -1533,12 +1533,12 @@ jne .Lreduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reduce,.-__rsaz_512_reduce .type __rsaz_512_reducex,@function .align 32 __rsaz_512_reducex: -.cfi_startproc +.cfi_startproc imulq %r8,%rdx xorq %rsi,%rsi @@ -1591,12 +1591,12 @@ jne .Lreduction_loopx .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reducex,.-__rsaz_512_reducex .type __rsaz_512_subtract,@function .align 32 __rsaz_512_subtract: -.cfi_startproc +.cfi_startproc movq %r8,(%rdi) movq %r9,8(%rdi) movq %r10,16(%rdi) @@ -1650,12 +1650,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_subtract,.-__rsaz_512_subtract .type __rsaz_512_mul,@function .align 32 __rsaz_512_mul: -.cfi_startproc +.cfi_startproc leaq 8(%rsp),%rdi movq (%rsi),%rax @@ -1794,12 +1794,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mul,.-__rsaz_512_mul .type __rsaz_512_mulx,@function .align 32 __rsaz_512_mulx: -.cfi_startproc +.cfi_startproc mulxq (%rsi),%rbx,%r8 movq $-6,%rcx @@ -1916,13 +1916,13 @@ movq %r15,8+64+56(%rsp) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mulx,.-__rsaz_512_mulx .globl rsaz_512_scatter4 .type rsaz_512_scatter4,@function .align 16 rsaz_512_scatter4: -.cfi_startproc +.cfi_startproc leaq (%rdi,%rdx,8),%rdi movl $8,%r9d jmp .Loop_scatter @@ -1935,14 +1935,14 @@ decl %r9d jnz .Loop_scatter .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size rsaz_512_scatter4,.-rsaz_512_scatter4 .globl rsaz_512_gather4 .type rsaz_512_gather4,@function .align 16 rsaz_512_gather4: -.cfi_startproc +.cfi_startproc movd %edx,%xmm8 movdqa .Linc+16(%rip),%xmm1 movdqa .Linc(%rip),%xmm0 @@ -2006,7 +2006,7 @@ jnz .Loop_gather .byte 0xf3,0xc3 .LSEH_end_rsaz_512_gather4: -.cfi_endproc +.cfi_endproc .size rsaz_512_gather4,.-rsaz_512_gather4 .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/bn/x86_64-mont5.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/bn/x86_64-mont5.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/bn/x86_64-mont5.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/bn/x86_64-mont5.s 2022-04-05 07:17:00.000000000 +0000 @@ -550,7 +550,7 @@ .type mul4x_internal,@function .align 32 mul4x_internal: -.cfi_startproc +.cfi_startproc shlq $5,%r9 movd 8(%rax),%xmm5 leaq .Linc(%rip),%rax @@ -1072,7 +1072,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqr4x_sub_entry -.cfi_endproc +.cfi_endproc .size mul4x_internal,.-mul4x_internal .globl bn_power5 .type bn_power5,@function @@ -1215,7 +1215,7 @@ .align 32 bn_sqr8x_internal: __bn_sqr8x_internal: -.cfi_startproc +.cfi_startproc @@ -1990,12 +1990,12 @@ cmpq %rdx,%rdi jb .L8x_reduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_sqr8x_internal,.-bn_sqr8x_internal .type __bn_post4x_internal,@function .align 32 __bn_post4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 leaq (%rdi,%r9,1),%rbx movq %r9,%rcx @@ -2046,18 +2046,18 @@ movq %r9,%r10 negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_post4x_internal,.-__bn_post4x_internal .globl bn_from_montgomery .type bn_from_montgomery,@function .align 32 bn_from_montgomery: -.cfi_startproc +.cfi_startproc testl $7,%r9d jz bn_from_mont8x xorl %eax,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_from_montgomery,.-bn_from_montgomery .type bn_from_mont8x,@function @@ -2341,7 +2341,7 @@ .type mulx4x_internal,@function .align 32 mulx4x_internal: -.cfi_startproc +.cfi_startproc movq %r9,8(%rsp) movq %r9,%r10 negq %r9 @@ -2760,7 +2760,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqrx4x_sub_entry -.cfi_endproc +.cfi_endproc .size mulx4x_internal,.-mulx4x_internal .type bn_powerx5,@function .align 32 @@ -3519,7 +3519,7 @@ .size bn_sqrx8x_internal,.-bn_sqrx8x_internal .align 32 __bn_postx4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 movq %rcx,%r10 movq %rcx,%r9 @@ -3567,13 +3567,13 @@ negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_get_bits5 .type bn_get_bits5,@function .align 16 bn_get_bits5: -.cfi_startproc +.cfi_startproc leaq 0(%rdi),%r10 leaq 1(%rdi),%r11 movl %esi,%ecx @@ -3587,14 +3587,14 @@ shrl %cl,%eax andl $31,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_get_bits5,.-bn_get_bits5 .globl bn_scatter5 .type bn_scatter5,@function .align 16 bn_scatter5: -.cfi_startproc +.cfi_startproc cmpl $0,%esi jz .Lscatter_epilogue leaq (%rdx,%rcx,8),%rdx @@ -3607,7 +3607,7 @@ jnz .Lscatter .Lscatter_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_scatter5,.-bn_scatter5 .globl bn_gather5 @@ -3615,7 +3615,7 @@ .align 32 bn_gather5: .LSEH_begin_bn_gather5: -.cfi_startproc +.cfi_startproc .byte 0x4c,0x8d,0x14,0x24 .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 @@ -3773,7 +3773,7 @@ leaq (%r10),%rsp .byte 0xf3,0xc3 .LSEH_end_bn_gather5: -.cfi_endproc +.cfi_endproc .size bn_gather5,.-bn_gather5 .align 64 .Linc: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-x32" -#define DATE "built on: Tue Apr 21 13:29:24 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:41 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/camellia/cmll-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/camellia/cmll-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/camellia/cmll-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/camellia/cmll-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,13 +5,13 @@ .type Camellia_EncryptBlock,@function .align 16 Camellia_EncryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Lenc_rounds -.cfi_endproc +.cfi_endproc .size Camellia_EncryptBlock,.-Camellia_EncryptBlock .globl Camellia_EncryptBlock_Rounds @@ -85,7 +85,7 @@ .type _x86_64_Camellia_encrypt,@function .align 16 _x86_64_Camellia_encrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -288,7 +288,7 @@ movl %edx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt @@ -296,13 +296,13 @@ .type Camellia_DecryptBlock,@function .align 16 Camellia_DecryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Ldec_rounds -.cfi_endproc +.cfi_endproc .size Camellia_DecryptBlock,.-Camellia_DecryptBlock .globl Camellia_DecryptBlock_Rounds @@ -376,7 +376,7 @@ .type _x86_64_Camellia_decrypt,@function .align 16 _x86_64_Camellia_decrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -580,7 +580,7 @@ movl %ebx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt .globl Camellia_Ekeygen .type Camellia_Ekeygen,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3874,12 +3874,12 @@ .type ecp_nistz256_to_mont,@function .align 32 ecp_nistz256_to_mont: -.cfi_startproc +.cfi_startproc movl $0x80100,%ecx andl OPENSSL_ia32cap_P+8(%rip),%ecx leaq .LRR(%rip),%rdx jmp .Lmul_mont -.cfi_endproc +.cfi_endproc .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont @@ -4823,7 +4823,7 @@ .type ecp_nistz256_scatter_w5,@function .align 32 ecp_nistz256_scatter_w5: -.cfi_startproc +.cfi_startproc leal -3(%rdx,%rdx,2),%edx movdqa 0(%rsi),%xmm0 shll $5,%edx @@ -4840,7 +4840,7 @@ movdqa %xmm5,80(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 @@ -4914,7 +4914,7 @@ .type ecp_nistz256_scatter_w7,@function .align 32 ecp_nistz256_scatter_w7: -.cfi_startproc +.cfi_startproc movdqu 0(%rsi),%xmm0 shll $6,%edx movdqu 16(%rsi),%xmm1 @@ -4926,7 +4926,7 @@ movdqa %xmm3,48(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/ec/x25519-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/ec/x25519-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/ec/x25519-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/ec/x25519-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -400,14 +400,14 @@ .type x25519_fe64_eligible,@function .align 32 x25519_fe64_eligible: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+8(%rip),%ecx xorl %eax,%eax andl $0x80100,%ecx cmpl $0x80100,%ecx cmovel %ecx,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_eligible,.-x25519_fe64_eligible .globl x25519_fe64_mul @@ -650,7 +650,7 @@ .align 32 x25519_fe64_mul121666: .Lfe64_mul121666_body: -.cfi_startproc +.cfi_startproc movl $121666,%edx mulxq 0(%rsi),%r8,%rcx mulxq 8(%rsi),%r9,%rax @@ -679,7 +679,7 @@ .Lfe64_mul121666_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_mul121666,.-x25519_fe64_mul121666 .globl x25519_fe64_add @@ -687,7 +687,7 @@ .align 32 x25519_fe64_add: .Lfe64_add_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -716,7 +716,7 @@ .Lfe64_add_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_add,.-x25519_fe64_add .globl x25519_fe64_sub @@ -724,7 +724,7 @@ .align 32 x25519_fe64_sub: .Lfe64_sub_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -753,7 +753,7 @@ .Lfe64_sub_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_sub,.-x25519_fe64_sub .globl x25519_fe64_tobytes @@ -761,7 +761,7 @@ .align 32 x25519_fe64_tobytes: .Lfe64_to_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -797,6 +797,6 @@ .Lfe64_to_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes .byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/modes/aesni-gcm-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/modes/aesni-gcm-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/modes/aesni-gcm-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/modes/aesni-gcm-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type _aesni_ctr32_ghash_6x,@function .align 32 _aesni_ctr32_ghash_6x: -.cfi_startproc +.cfi_startproc vmovdqu 32(%r11),%xmm2 subq $6,%rdx vpxor %xmm4,%xmm4,%xmm4 @@ -311,7 +311,7 @@ vpxor %xmm4,%xmm8,%xmm8 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x .globl aesni_gcm_decrypt .type aesni_gcm_decrypt,@function @@ -418,7 +418,7 @@ .type _aesni_ctr32_6x,@function .align 32 _aesni_ctr32_6x: -.cfi_startproc +.cfi_startproc vmovdqu 0-128(%rcx),%xmm4 vmovdqu 32(%r11),%xmm2 leaq -1(%rbp),%r13 @@ -505,7 +505,7 @@ vpshufb %xmm0,%xmm1,%xmm1 vpxor %xmm4,%xmm14,%xmm14 jmp .Loop_ctr32 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_6x,.-_aesni_ctr32_6x .globl aesni_gcm_encrypt diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type poly1305_init,@function .align 32 poly1305_init: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -43,7 +43,7 @@ movl $1,%eax .Lno_key: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init,.-poly1305_init .type poly1305_blocks,@function @@ -164,7 +164,7 @@ .type poly1305_emit,@function .align 32 poly1305_emit: -.cfi_startproc +.cfi_startproc .Lemit: movq 0(%rdi),%r8 movq 8(%rdi),%r9 @@ -185,12 +185,12 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit,.-poly1305_emit .type __poly1305_block,@function .align 32 __poly1305_block: -.cfi_startproc +.cfi_startproc mulq %r14 movq %rax,%r9 movq %r11,%rax @@ -230,13 +230,13 @@ adcq $0,%rbx adcq $0,%rbp .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,@function .align 32 __poly1305_init_avx: -.cfi_startproc +.cfi_startproc movq %r11,%r14 movq %r12,%rbx xorq %rbp,%rbp @@ -394,7 +394,7 @@ leaq -48-64(%rdi),%rdi .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_init_avx,.-__poly1305_init_avx .type poly1305_blocks_avx,@function @@ -1235,7 +1235,7 @@ .type poly1305_emit_avx,@function .align 32 poly1305_emit_avx: -.cfi_startproc +.cfi_startproc cmpl $0,20(%rdi) je .Lemit @@ -1286,7 +1286,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_avx,.-poly1305_emit_avx .type poly1305_blocks_avx2,@function .align 32 @@ -1969,7 +1969,7 @@ .type xor128_encrypt_n_pad,@function .align 16 xor128_encrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -2011,14 +2011,14 @@ .Ldone_enc: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad .type xor128_decrypt_n_pad,@function .align 16 xor128_decrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -2064,5 +2064,5 @@ .Ldone_dec: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/rc4/rc4-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/rc4/rc4-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/rc4/rc4-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/rc4/rc4-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type RC4,@function .align 16 RC4: -.cfi_startproc +.cfi_startproc orq %rsi,%rsi jne .Lentry .byte 0xf3,0xc3 @@ -534,7 +534,7 @@ .type RC4_set_key,@function .align 16 RC4_set_key: -.cfi_startproc +.cfi_startproc leaq 8(%rdi),%rdi leaq (%rdx,%rsi,1),%rdx negq %rsi @@ -601,14 +601,14 @@ movl %eax,-8(%rdi) movl %eax,-4(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size RC4_set_key,.-RC4_set_key .globl RC4_options .type RC4_options,@function .align 16 RC4_options: -.cfi_startproc +.cfi_startproc leaq .Lopts(%rip),%rax movl OPENSSL_ia32cap_P(%rip),%edx btl $20,%edx @@ -621,7 +621,7 @@ addq $12,%rax .Ldone: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .align 64 .Lopts: .byte 114,99,52,40,56,120,44,105,110,116,41,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/keccak1600-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/keccak1600-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/keccak1600-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/keccak1600-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type __KeccakF1600,@function .align 32 __KeccakF1600: -.cfi_startproc +.cfi_startproc movq 60(%rdi),%rax movq 68(%rdi),%rbx movq 76(%rdi),%rcx @@ -256,7 +256,7 @@ leaq -192(%r15),%r15 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __KeccakF1600,.-__KeccakF1600 .type KeccakF1600,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1422,7 +1422,7 @@ movdqu %xmm0,(%rdi) movd %xmm1,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/sha/sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1775,7 +1775,7 @@ .align 64 sha256_block_data_order_shaext: _shaext_shortcut: -.cfi_startproc +.cfi_startproc leaq K256+128(%rip),%rcx movdqu (%rdi),%xmm1 movdqu 16(%rdi),%xmm2 @@ -1978,7 +1978,7 @@ movdqu %xmm1,(%rdi) movdqu %xmm2,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext .type sha256_block_data_order_ssse3,@function .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: -.cfi_startproc +.cfi_startproc movl (%rdi),%eax .Lspin: leaq (%rsi,%rax,1),%r8 .byte 0xf0 @@ -21,19 +21,19 @@ movl %r8d,%eax .byte 0x48,0x98 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_atomic_add,.-OPENSSL_atomic_add .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: -.cfi_startproc +.cfi_startproc rdtsc shlq $32,%rdx orq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_rdtsc,.-OPENSSL_rdtsc .globl OPENSSL_ia32_cpuid @@ -209,7 +209,7 @@ .type OPENSSL_cleanse,@function .align 16 OPENSSL_cleanse: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $15,%rsi jae .Lot @@ -239,14 +239,14 @@ cmpq $0,%rsi jne .Little .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,@function .align 16 CRYPTO_memcmp: -.cfi_startproc +.cfi_startproc xorq %rax,%rax xorq %r10,%r10 cmpq $0,%rdx @@ -275,13 +275,13 @@ shrq $63,%rax .Lno_data: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: -.cfi_startproc +.cfi_startproc pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -308,13 +308,13 @@ xorq %r11,%r11 leaq 8(%rsp),%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 OPENSSL_instrument_bus: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rsi,%r11 @@ -341,14 +341,14 @@ movq %r11,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus .globl OPENSSL_instrument_bus2 .type OPENSSL_instrument_bus2,@function .align 16 OPENSSL_instrument_bus2: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rdx,%r11 @@ -391,13 +391,13 @@ movq 8(%rsp),%rax subq %rcx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 .globl OPENSSL_ia32_rdrand_bytes .type OPENSSL_ia32_rdrand_bytes,@function .align 16 OPENSSL_ia32_rdrand_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdrand_bytes @@ -434,13 +434,13 @@ .Ldone_rdrand_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes .globl OPENSSL_ia32_rdseed_bytes .type OPENSSL_ia32_rdseed_bytes,@function .align 16 OPENSSL_ia32_rdseed_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdseed_bytes @@ -477,5 +477,5 @@ .Ldone_rdseed_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux-x32" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-x32", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8931,6 +8936,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9508,6 +9517,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14163,6 +14173,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15140,19 +15158,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-x32" -#define DATE "built on: Tue Apr 21 13:29:28 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:51 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x32/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x32/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -63,7 +63,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-x86_64" ], perlenv => { "AR" => undef, @@ -112,8 +112,8 @@ sourcedir => ".", target => "linux-x86_64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1187,6 +1187,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9084,6 +9089,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9661,6 +9670,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14431,6 +14441,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15405,19 +15423,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha1_enc,@function .align 32 aesni_cbc_sha1_enc: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+0(%rip),%r10d movq OPENSSL_ia32cap_P+4(%rip),%r11 @@ -18,7 +18,7 @@ je aesni_cbc_sha1_enc_avx jmp aesni_cbc_sha1_enc_ssse3 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc .type aesni_cbc_sha1_enc_ssse3,@function .align 32 @@ -2732,7 +2732,7 @@ .type aesni_cbc_sha1_enc_shaext,@function .align 32 aesni_cbc_sha1_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 movdqu (%r9),%xmm8 movd 16(%r9),%xmm9 @@ -3031,5 +3031,5 @@ movdqu %xmm8,(%r9) movd %xmm9,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha256_enc,@function .align 16 aesni_cbc_sha256_enc: -.cfi_startproc +.cfi_startproc leaq OPENSSL_ia32cap_P(%rip),%r11 movl $1,%eax cmpq $0,%rdi @@ -31,7 +31,7 @@ ud2 .Lprobe: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc .align 64 @@ -4081,7 +4081,7 @@ .type aesni_cbc_sha256_enc_shaext,@function .align 32 aesni_cbc_sha256_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 leaq K256+128(%rip),%rax movdqu (%r9),%xmm1 @@ -4431,5 +4431,5 @@ movdqu %xmm1,(%r9) movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/aes/aesni-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -861,7 +861,7 @@ .type aesni_ccm64_encrypt_blocks,@function .align 16 aesni_ccm64_encrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -920,13 +920,13 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -1019,7 +1019,7 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks .type aesni_ctr32_encrypt_blocks,@function @@ -2794,7 +2794,7 @@ .type __ocb_encrypt6,@function .align 32 __ocb_encrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2892,13 +2892,13 @@ .byte 102,65,15,56,221,246 .byte 102,65,15,56,221,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt6,.-__ocb_encrypt6 .type __ocb_encrypt4,@function .align 32 __ocb_encrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2963,13 +2963,13 @@ .byte 102,65,15,56,221,228 .byte 102,65,15,56,221,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt4,.-__ocb_encrypt4 .type __ocb_encrypt1,@function .align 32 __ocb_encrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm2,%xmm8 @@ -3000,7 +3000,7 @@ .byte 102,15,56,221,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt1,.-__ocb_encrypt1 .globl aesni_ocb_decrypt @@ -3243,7 +3243,7 @@ .type __ocb_decrypt6,@function .align 32 __ocb_decrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3335,13 +3335,13 @@ .byte 102,65,15,56,223,246 .byte 102,65,15,56,223,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt6,.-__ocb_decrypt6 .type __ocb_decrypt4,@function .align 32 __ocb_decrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3402,13 +3402,13 @@ .byte 102,65,15,56,223,228 .byte 102,65,15,56,223,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt4,.-__ocb_decrypt4 .type __ocb_decrypt1,@function .align 32 __ocb_decrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm7,%xmm2 @@ -3438,7 +3438,7 @@ .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt1,.-__ocb_decrypt1 .globl aesni_cbc_encrypt .type aesni_cbc_encrypt,@function @@ -4447,7 +4447,7 @@ shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_set_encrypt_key,.-aesni_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/bn/rsaz-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/bn/rsaz-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/bn/rsaz-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/bn/rsaz-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1453,7 +1453,7 @@ .type __rsaz_512_reduce,@function .align 32 __rsaz_512_reduce: -.cfi_startproc +.cfi_startproc movq %r8,%rbx imulq 128+8(%rsp),%rbx movq 0(%rbp),%rax @@ -1533,12 +1533,12 @@ jne .Lreduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reduce,.-__rsaz_512_reduce .type __rsaz_512_reducex,@function .align 32 __rsaz_512_reducex: -.cfi_startproc +.cfi_startproc imulq %r8,%rdx xorq %rsi,%rsi @@ -1591,12 +1591,12 @@ jne .Lreduction_loopx .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reducex,.-__rsaz_512_reducex .type __rsaz_512_subtract,@function .align 32 __rsaz_512_subtract: -.cfi_startproc +.cfi_startproc movq %r8,(%rdi) movq %r9,8(%rdi) movq %r10,16(%rdi) @@ -1650,12 +1650,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_subtract,.-__rsaz_512_subtract .type __rsaz_512_mul,@function .align 32 __rsaz_512_mul: -.cfi_startproc +.cfi_startproc leaq 8(%rsp),%rdi movq (%rsi),%rax @@ -1794,12 +1794,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mul,.-__rsaz_512_mul .type __rsaz_512_mulx,@function .align 32 __rsaz_512_mulx: -.cfi_startproc +.cfi_startproc mulxq (%rsi),%rbx,%r8 movq $-6,%rcx @@ -1916,13 +1916,13 @@ movq %r15,8+64+56(%rsp) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mulx,.-__rsaz_512_mulx .globl rsaz_512_scatter4 .type rsaz_512_scatter4,@function .align 16 rsaz_512_scatter4: -.cfi_startproc +.cfi_startproc leaq (%rdi,%rdx,8),%rdi movl $8,%r9d jmp .Loop_scatter @@ -1935,14 +1935,14 @@ decl %r9d jnz .Loop_scatter .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size rsaz_512_scatter4,.-rsaz_512_scatter4 .globl rsaz_512_gather4 .type rsaz_512_gather4,@function .align 16 rsaz_512_gather4: -.cfi_startproc +.cfi_startproc movd %edx,%xmm8 movdqa .Linc+16(%rip),%xmm1 movdqa .Linc(%rip),%xmm0 @@ -2006,7 +2006,7 @@ jnz .Loop_gather .byte 0xf3,0xc3 .LSEH_end_rsaz_512_gather4: -.cfi_endproc +.cfi_endproc .size rsaz_512_gather4,.-rsaz_512_gather4 .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/bn/x86_64-mont5.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/bn/x86_64-mont5.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/bn/x86_64-mont5.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/bn/x86_64-mont5.s 2022-04-05 07:17:00.000000000 +0000 @@ -550,7 +550,7 @@ .type mul4x_internal,@function .align 32 mul4x_internal: -.cfi_startproc +.cfi_startproc shlq $5,%r9 movd 8(%rax),%xmm5 leaq .Linc(%rip),%rax @@ -1072,7 +1072,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqr4x_sub_entry -.cfi_endproc +.cfi_endproc .size mul4x_internal,.-mul4x_internal .globl bn_power5 .type bn_power5,@function @@ -1215,7 +1215,7 @@ .align 32 bn_sqr8x_internal: __bn_sqr8x_internal: -.cfi_startproc +.cfi_startproc @@ -1990,12 +1990,12 @@ cmpq %rdx,%rdi jb .L8x_reduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_sqr8x_internal,.-bn_sqr8x_internal .type __bn_post4x_internal,@function .align 32 __bn_post4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 leaq (%rdi,%r9,1),%rbx movq %r9,%rcx @@ -2046,18 +2046,18 @@ movq %r9,%r10 negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_post4x_internal,.-__bn_post4x_internal .globl bn_from_montgomery .type bn_from_montgomery,@function .align 32 bn_from_montgomery: -.cfi_startproc +.cfi_startproc testl $7,%r9d jz bn_from_mont8x xorl %eax,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_from_montgomery,.-bn_from_montgomery .type bn_from_mont8x,@function @@ -2341,7 +2341,7 @@ .type mulx4x_internal,@function .align 32 mulx4x_internal: -.cfi_startproc +.cfi_startproc movq %r9,8(%rsp) movq %r9,%r10 negq %r9 @@ -2760,7 +2760,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqrx4x_sub_entry -.cfi_endproc +.cfi_endproc .size mulx4x_internal,.-mulx4x_internal .type bn_powerx5,@function .align 32 @@ -3519,7 +3519,7 @@ .size bn_sqrx8x_internal,.-bn_sqrx8x_internal .align 32 __bn_postx4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 movq %rcx,%r10 movq %rcx,%r9 @@ -3567,13 +3567,13 @@ negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_get_bits5 .type bn_get_bits5,@function .align 16 bn_get_bits5: -.cfi_startproc +.cfi_startproc leaq 0(%rdi),%r10 leaq 1(%rdi),%r11 movl %esi,%ecx @@ -3587,14 +3587,14 @@ shrl %cl,%eax andl $31,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_get_bits5,.-bn_get_bits5 .globl bn_scatter5 .type bn_scatter5,@function .align 16 bn_scatter5: -.cfi_startproc +.cfi_startproc cmpl $0,%esi jz .Lscatter_epilogue leaq (%rdx,%rcx,8),%rdx @@ -3607,7 +3607,7 @@ jnz .Lscatter .Lscatter_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_scatter5,.-bn_scatter5 .globl bn_gather5 @@ -3615,7 +3615,7 @@ .align 32 bn_gather5: .LSEH_begin_bn_gather5: -.cfi_startproc +.cfi_startproc .byte 0x4c,0x8d,0x14,0x24 .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 @@ -3773,7 +3773,7 @@ leaq (%r10),%rsp .byte 0xf3,0xc3 .LSEH_end_bn_gather5: -.cfi_endproc +.cfi_endproc .size bn_gather5,.-bn_gather5 .align 64 .Linc: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-x86_64" -#define DATE "built on: Tue Apr 21 13:29:29 2020 UTC" +#define DATE "built on: Tue Mar 15 17:25:54 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/camellia/cmll-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/camellia/cmll-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/camellia/cmll-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/camellia/cmll-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,13 +5,13 @@ .type Camellia_EncryptBlock,@function .align 16 Camellia_EncryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Lenc_rounds -.cfi_endproc +.cfi_endproc .size Camellia_EncryptBlock,.-Camellia_EncryptBlock .globl Camellia_EncryptBlock_Rounds @@ -85,7 +85,7 @@ .type _x86_64_Camellia_encrypt,@function .align 16 _x86_64_Camellia_encrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -288,7 +288,7 @@ movl %edx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt @@ -296,13 +296,13 @@ .type Camellia_DecryptBlock,@function .align 16 Camellia_DecryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Ldec_rounds -.cfi_endproc +.cfi_endproc .size Camellia_DecryptBlock,.-Camellia_DecryptBlock .globl Camellia_DecryptBlock_Rounds @@ -376,7 +376,7 @@ .type _x86_64_Camellia_decrypt,@function .align 16 _x86_64_Camellia_decrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -580,7 +580,7 @@ movl %ebx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt .globl Camellia_Ekeygen .type Camellia_Ekeygen,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/ec/ecp_nistz256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/ec/ecp_nistz256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/ec/ecp_nistz256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/ec/ecp_nistz256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3874,12 +3874,12 @@ .type ecp_nistz256_to_mont,@function .align 32 ecp_nistz256_to_mont: -.cfi_startproc +.cfi_startproc movl $0x80100,%ecx andl OPENSSL_ia32cap_P+8(%rip),%ecx leaq .LRR(%rip),%rdx jmp .Lmul_mont -.cfi_endproc +.cfi_endproc .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont @@ -4823,7 +4823,7 @@ .type ecp_nistz256_scatter_w5,@function .align 32 ecp_nistz256_scatter_w5: -.cfi_startproc +.cfi_startproc leal -3(%rdx,%rdx,2),%edx movdqa 0(%rsi),%xmm0 shll $5,%edx @@ -4840,7 +4840,7 @@ movdqa %xmm5,80(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 @@ -4914,7 +4914,7 @@ .type ecp_nistz256_scatter_w7,@function .align 32 ecp_nistz256_scatter_w7: -.cfi_startproc +.cfi_startproc movdqu 0(%rsi),%xmm0 shll $6,%edx movdqu 16(%rsi),%xmm1 @@ -4926,7 +4926,7 @@ movdqa %xmm3,48(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/ec/x25519-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/ec/x25519-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/ec/x25519-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/ec/x25519-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -400,14 +400,14 @@ .type x25519_fe64_eligible,@function .align 32 x25519_fe64_eligible: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+8(%rip),%ecx xorl %eax,%eax andl $0x80100,%ecx cmpl $0x80100,%ecx cmovel %ecx,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_eligible,.-x25519_fe64_eligible .globl x25519_fe64_mul @@ -650,7 +650,7 @@ .align 32 x25519_fe64_mul121666: .Lfe64_mul121666_body: -.cfi_startproc +.cfi_startproc movl $121666,%edx mulxq 0(%rsi),%r8,%rcx mulxq 8(%rsi),%r9,%rax @@ -679,7 +679,7 @@ .Lfe64_mul121666_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_mul121666,.-x25519_fe64_mul121666 .globl x25519_fe64_add @@ -687,7 +687,7 @@ .align 32 x25519_fe64_add: .Lfe64_add_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -716,7 +716,7 @@ .Lfe64_add_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_add,.-x25519_fe64_add .globl x25519_fe64_sub @@ -724,7 +724,7 @@ .align 32 x25519_fe64_sub: .Lfe64_sub_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -753,7 +753,7 @@ .Lfe64_sub_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_sub,.-x25519_fe64_sub .globl x25519_fe64_tobytes @@ -761,7 +761,7 @@ .align 32 x25519_fe64_tobytes: .Lfe64_to_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -797,6 +797,6 @@ .Lfe64_to_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes .byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/modes/aesni-gcm-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/modes/aesni-gcm-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/modes/aesni-gcm-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/modes/aesni-gcm-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type _aesni_ctr32_ghash_6x,@function .align 32 _aesni_ctr32_ghash_6x: -.cfi_startproc +.cfi_startproc vmovdqu 32(%r11),%xmm2 subq $6,%rdx vpxor %xmm4,%xmm4,%xmm4 @@ -311,7 +311,7 @@ vpxor %xmm4,%xmm8,%xmm8 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x .globl aesni_gcm_decrypt .type aesni_gcm_decrypt,@function @@ -418,7 +418,7 @@ .type _aesni_ctr32_6x,@function .align 32 _aesni_ctr32_6x: -.cfi_startproc +.cfi_startproc vmovdqu 0-128(%rcx),%xmm4 vmovdqu 32(%r11),%xmm2 leaq -1(%rbp),%r13 @@ -505,7 +505,7 @@ vpshufb %xmm0,%xmm1,%xmm1 vpxor %xmm4,%xmm14,%xmm14 jmp .Loop_ctr32 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_6x,.-_aesni_ctr32_6x .globl aesni_gcm_encrypt diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type poly1305_init,@function .align 32 poly1305_init: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -48,7 +48,7 @@ movl $1,%eax .Lno_key: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init,.-poly1305_init .type poly1305_blocks,@function @@ -169,7 +169,7 @@ .type poly1305_emit,@function .align 32 poly1305_emit: -.cfi_startproc +.cfi_startproc .Lemit: movq 0(%rdi),%r8 movq 8(%rdi),%r9 @@ -190,12 +190,12 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit,.-poly1305_emit .type __poly1305_block,@function .align 32 __poly1305_block: -.cfi_startproc +.cfi_startproc mulq %r14 movq %rax,%r9 movq %r11,%rax @@ -235,13 +235,13 @@ adcq $0,%rbx adcq $0,%rbp .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,@function .align 32 __poly1305_init_avx: -.cfi_startproc +.cfi_startproc movq %r11,%r14 movq %r12,%rbx xorq %rbp,%rbp @@ -399,7 +399,7 @@ leaq -48-64(%rdi),%rdi .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_init_avx,.-__poly1305_init_avx .type poly1305_blocks_avx,@function @@ -1240,7 +1240,7 @@ .type poly1305_emit_avx,@function .align 32 poly1305_emit_avx: -.cfi_startproc +.cfi_startproc cmpl $0,20(%rdi) je .Lemit @@ -1291,7 +1291,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_avx,.-poly1305_emit_avx .type poly1305_blocks_avx2,@function .align 32 @@ -2488,7 +2488,7 @@ .type poly1305_init_base2_44,@function .align 32 poly1305_init_base2_44: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -2522,12 +2522,12 @@ movq %r11,8(%rdx) movl $1,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init_base2_44,.-poly1305_init_base2_44 .type poly1305_blocks_vpmadd52,@function .align 32 poly1305_blocks_vpmadd52: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52 @@ -2634,12 +2634,12 @@ .Lno_data_vpmadd52: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52 .type poly1305_blocks_vpmadd52_4x,@function .align 32 poly1305_blocks_vpmadd52_4x: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52_4x @@ -3064,12 +3064,12 @@ .Lno_data_vpmadd52_4x: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x .type poly1305_blocks_vpmadd52_8x,@function .align 32 poly1305_blocks_vpmadd52_8x: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52_8x @@ -3410,12 +3410,12 @@ .Lno_data_vpmadd52_8x: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x .type poly1305_emit_base2_44,@function .align 32 poly1305_emit_base2_44: -.cfi_startproc +.cfi_startproc movq 0(%rdi),%r8 movq 8(%rdi),%r9 movq 16(%rdi),%r10 @@ -3446,7 +3446,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_base2_44,.-poly1305_emit_base2_44 .align 64 .Lconst: @@ -3485,7 +3485,7 @@ .type xor128_encrypt_n_pad,@function .align 16 xor128_encrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -3527,14 +3527,14 @@ .Ldone_enc: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad .type xor128_decrypt_n_pad,@function .align 16 xor128_decrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -3580,5 +3580,5 @@ .Ldone_dec: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/rc4/rc4-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/rc4/rc4-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/rc4/rc4-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/rc4/rc4-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type RC4,@function .align 16 RC4: -.cfi_startproc +.cfi_startproc orq %rsi,%rsi jne .Lentry .byte 0xf3,0xc3 @@ -534,7 +534,7 @@ .type RC4_set_key,@function .align 16 RC4_set_key: -.cfi_startproc +.cfi_startproc leaq 8(%rdi),%rdi leaq (%rdx,%rsi,1),%rdx negq %rsi @@ -601,14 +601,14 @@ movl %eax,-8(%rdi) movl %eax,-4(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size RC4_set_key,.-RC4_set_key .globl RC4_options .type RC4_options,@function .align 16 RC4_options: -.cfi_startproc +.cfi_startproc leaq .Lopts(%rip),%rax movl OPENSSL_ia32cap_P(%rip),%edx btl $20,%edx @@ -621,7 +621,7 @@ addq $12,%rax .Ldone: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .align 64 .Lopts: .byte 114,99,52,40,56,120,44,105,110,116,41,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/keccak1600-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/keccak1600-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/keccak1600-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/keccak1600-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type __KeccakF1600,@function .align 32 __KeccakF1600: -.cfi_startproc +.cfi_startproc movq 60(%rdi),%rax movq 68(%rdi),%rbx movq 76(%rdi),%rcx @@ -256,7 +256,7 @@ leaq -192(%r15),%r15 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __KeccakF1600,.-__KeccakF1600 .type KeccakF1600,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1422,7 +1422,7 @@ movdqu %xmm0,(%rdi) movd %xmm1,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/sha/sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1775,7 +1775,7 @@ .align 64 sha256_block_data_order_shaext: _shaext_shortcut: -.cfi_startproc +.cfi_startproc leaq K256+128(%rip),%rcx movdqu (%rdi),%xmm1 movdqu 16(%rdi),%xmm2 @@ -1978,7 +1978,7 @@ movdqu %xmm1,(%rdi) movdqu %xmm2,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext .type sha256_block_data_order_ssse3,@function .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: -.cfi_startproc +.cfi_startproc movl (%rdi),%eax .Lspin: leaq (%rsi,%rax,1),%r8 .byte 0xf0 @@ -21,19 +21,19 @@ movl %r8d,%eax .byte 0x48,0x98 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_atomic_add,.-OPENSSL_atomic_add .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: -.cfi_startproc +.cfi_startproc rdtsc shlq $32,%rdx orq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_rdtsc,.-OPENSSL_rdtsc .globl OPENSSL_ia32_cpuid @@ -209,7 +209,7 @@ .type OPENSSL_cleanse,@function .align 16 OPENSSL_cleanse: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $15,%rsi jae .Lot @@ -239,14 +239,14 @@ cmpq $0,%rsi jne .Little .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,@function .align 16 CRYPTO_memcmp: -.cfi_startproc +.cfi_startproc xorq %rax,%rax xorq %r10,%r10 cmpq $0,%rdx @@ -275,13 +275,13 @@ shrq $63,%rax .Lno_data: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: -.cfi_startproc +.cfi_startproc pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -308,13 +308,13 @@ xorq %r11,%r11 leaq 8(%rsp),%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 OPENSSL_instrument_bus: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rsi,%r11 @@ -341,14 +341,14 @@ movq %r11,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus .globl OPENSSL_instrument_bus2 .type OPENSSL_instrument_bus2,@function .align 16 OPENSSL_instrument_bus2: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rdx,%r11 @@ -391,13 +391,13 @@ movq 8(%rsp),%rax subq %rcx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 .globl OPENSSL_ia32_rdrand_bytes .type OPENSSL_ia32_rdrand_bytes,@function .align 16 OPENSSL_ia32_rdrand_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdrand_bytes @@ -434,13 +434,13 @@ .Ldone_rdrand_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes .globl OPENSSL_ia32_rdseed_bytes .type OPENSSL_ia32_rdseed_bytes,@function .align 16 OPENSSL_ia32_rdseed_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdseed_bytes @@ -477,5 +477,5 @@ .Ldone_rdseed_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -63,7 +63,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "linux-x86_64" ], perlenv => { "AR" => undef, @@ -112,8 +112,8 @@ sourcedir => ".", target => "linux-x86_64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1187,6 +1187,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9084,6 +9089,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9661,6 +9670,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14431,6 +14441,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15405,19 +15423,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha1_enc,@function .align 32 aesni_cbc_sha1_enc: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+0(%rip),%r10d movq OPENSSL_ia32cap_P+4(%rip),%r11 @@ -18,7 +18,7 @@ je aesni_cbc_sha1_enc_avx jmp aesni_cbc_sha1_enc_ssse3 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc .type aesni_cbc_sha1_enc_ssse3,@function .align 32 @@ -2732,7 +2732,7 @@ .type aesni_cbc_sha1_enc_shaext,@function .align 32 aesni_cbc_sha1_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 movdqu (%r9),%xmm8 movd 16(%r9),%xmm9 @@ -3031,5 +3031,5 @@ movdqu %xmm8,(%r9) movd %xmm9,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha256_enc,@function .align 16 aesni_cbc_sha256_enc: -.cfi_startproc +.cfi_startproc leaq OPENSSL_ia32cap_P(%rip),%r11 movl $1,%eax cmpq $0,%rdi @@ -31,7 +31,7 @@ ud2 .Lprobe: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc .align 64 @@ -4081,7 +4081,7 @@ .type aesni_cbc_sha256_enc_shaext,@function .align 32 aesni_cbc_sha256_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 leaq K256+128(%rip),%rax movdqu (%r9),%xmm1 @@ -4431,5 +4431,5 @@ movdqu %xmm1,(%r9) movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/aes/aesni-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -861,7 +861,7 @@ .type aesni_ccm64_encrypt_blocks,@function .align 16 aesni_ccm64_encrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -920,13 +920,13 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -1019,7 +1019,7 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks .type aesni_ctr32_encrypt_blocks,@function @@ -2794,7 +2794,7 @@ .type __ocb_encrypt6,@function .align 32 __ocb_encrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2892,13 +2892,13 @@ .byte 102,65,15,56,221,246 .byte 102,65,15,56,221,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt6,.-__ocb_encrypt6 .type __ocb_encrypt4,@function .align 32 __ocb_encrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2963,13 +2963,13 @@ .byte 102,65,15,56,221,228 .byte 102,65,15,56,221,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt4,.-__ocb_encrypt4 .type __ocb_encrypt1,@function .align 32 __ocb_encrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm2,%xmm8 @@ -3000,7 +3000,7 @@ .byte 102,15,56,221,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt1,.-__ocb_encrypt1 .globl aesni_ocb_decrypt @@ -3243,7 +3243,7 @@ .type __ocb_decrypt6,@function .align 32 __ocb_decrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3335,13 +3335,13 @@ .byte 102,65,15,56,223,246 .byte 102,65,15,56,223,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt6,.-__ocb_decrypt6 .type __ocb_decrypt4,@function .align 32 __ocb_decrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3402,13 +3402,13 @@ .byte 102,65,15,56,223,228 .byte 102,65,15,56,223,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt4,.-__ocb_decrypt4 .type __ocb_decrypt1,@function .align 32 __ocb_decrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm7,%xmm2 @@ -3438,7 +3438,7 @@ .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt1,.-__ocb_decrypt1 .globl aesni_cbc_encrypt .type aesni_cbc_encrypt,@function @@ -4447,7 +4447,7 @@ shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_set_encrypt_key,.-aesni_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/bn/rsaz-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/bn/rsaz-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/bn/rsaz-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/bn/rsaz-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1453,7 +1453,7 @@ .type __rsaz_512_reduce,@function .align 32 __rsaz_512_reduce: -.cfi_startproc +.cfi_startproc movq %r8,%rbx imulq 128+8(%rsp),%rbx movq 0(%rbp),%rax @@ -1533,12 +1533,12 @@ jne .Lreduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reduce,.-__rsaz_512_reduce .type __rsaz_512_reducex,@function .align 32 __rsaz_512_reducex: -.cfi_startproc +.cfi_startproc imulq %r8,%rdx xorq %rsi,%rsi @@ -1591,12 +1591,12 @@ jne .Lreduction_loopx .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reducex,.-__rsaz_512_reducex .type __rsaz_512_subtract,@function .align 32 __rsaz_512_subtract: -.cfi_startproc +.cfi_startproc movq %r8,(%rdi) movq %r9,8(%rdi) movq %r10,16(%rdi) @@ -1650,12 +1650,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_subtract,.-__rsaz_512_subtract .type __rsaz_512_mul,@function .align 32 __rsaz_512_mul: -.cfi_startproc +.cfi_startproc leaq 8(%rsp),%rdi movq (%rsi),%rax @@ -1794,12 +1794,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mul,.-__rsaz_512_mul .type __rsaz_512_mulx,@function .align 32 __rsaz_512_mulx: -.cfi_startproc +.cfi_startproc mulxq (%rsi),%rbx,%r8 movq $-6,%rcx @@ -1916,13 +1916,13 @@ movq %r15,8+64+56(%rsp) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mulx,.-__rsaz_512_mulx .globl rsaz_512_scatter4 .type rsaz_512_scatter4,@function .align 16 rsaz_512_scatter4: -.cfi_startproc +.cfi_startproc leaq (%rdi,%rdx,8),%rdi movl $8,%r9d jmp .Loop_scatter @@ -1935,14 +1935,14 @@ decl %r9d jnz .Loop_scatter .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size rsaz_512_scatter4,.-rsaz_512_scatter4 .globl rsaz_512_gather4 .type rsaz_512_gather4,@function .align 16 rsaz_512_gather4: -.cfi_startproc +.cfi_startproc movd %edx,%xmm8 movdqa .Linc+16(%rip),%xmm1 movdqa .Linc(%rip),%xmm0 @@ -2006,7 +2006,7 @@ jnz .Loop_gather .byte 0xf3,0xc3 .LSEH_end_rsaz_512_gather4: -.cfi_endproc +.cfi_endproc .size rsaz_512_gather4,.-rsaz_512_gather4 .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/bn/x86_64-mont5.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/bn/x86_64-mont5.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/bn/x86_64-mont5.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/bn/x86_64-mont5.s 2022-04-05 07:17:00.000000000 +0000 @@ -550,7 +550,7 @@ .type mul4x_internal,@function .align 32 mul4x_internal: -.cfi_startproc +.cfi_startproc shlq $5,%r9 movd 8(%rax),%xmm5 leaq .Linc(%rip),%rax @@ -1072,7 +1072,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqr4x_sub_entry -.cfi_endproc +.cfi_endproc .size mul4x_internal,.-mul4x_internal .globl bn_power5 .type bn_power5,@function @@ -1215,7 +1215,7 @@ .align 32 bn_sqr8x_internal: __bn_sqr8x_internal: -.cfi_startproc +.cfi_startproc @@ -1990,12 +1990,12 @@ cmpq %rdx,%rdi jb .L8x_reduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_sqr8x_internal,.-bn_sqr8x_internal .type __bn_post4x_internal,@function .align 32 __bn_post4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 leaq (%rdi,%r9,1),%rbx movq %r9,%rcx @@ -2046,18 +2046,18 @@ movq %r9,%r10 negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_post4x_internal,.-__bn_post4x_internal .globl bn_from_montgomery .type bn_from_montgomery,@function .align 32 bn_from_montgomery: -.cfi_startproc +.cfi_startproc testl $7,%r9d jz bn_from_mont8x xorl %eax,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_from_montgomery,.-bn_from_montgomery .type bn_from_mont8x,@function @@ -2341,7 +2341,7 @@ .type mulx4x_internal,@function .align 32 mulx4x_internal: -.cfi_startproc +.cfi_startproc movq %r9,8(%rsp) movq %r9,%r10 negq %r9 @@ -2760,7 +2760,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqrx4x_sub_entry -.cfi_endproc +.cfi_endproc .size mulx4x_internal,.-mulx4x_internal .type bn_powerx5,@function .align 32 @@ -3519,7 +3519,7 @@ .size bn_sqrx8x_internal,.-bn_sqrx8x_internal .align 32 __bn_postx4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 movq %rcx,%r10 movq %rcx,%r9 @@ -3567,13 +3567,13 @@ negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_get_bits5 .type bn_get_bits5,@function .align 16 bn_get_bits5: -.cfi_startproc +.cfi_startproc leaq 0(%rdi),%r10 leaq 1(%rdi),%r11 movl %esi,%ecx @@ -3587,14 +3587,14 @@ shrl %cl,%eax andl $31,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_get_bits5,.-bn_get_bits5 .globl bn_scatter5 .type bn_scatter5,@function .align 16 bn_scatter5: -.cfi_startproc +.cfi_startproc cmpl $0,%esi jz .Lscatter_epilogue leaq (%rdx,%rcx,8),%rdx @@ -3607,7 +3607,7 @@ jnz .Lscatter .Lscatter_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_scatter5,.-bn_scatter5 .globl bn_gather5 @@ -3615,7 +3615,7 @@ .align 32 bn_gather5: .LSEH_begin_bn_gather5: -.cfi_startproc +.cfi_startproc .byte 0x4c,0x8d,0x14,0x24 .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 @@ -3773,7 +3773,7 @@ leaq (%r10),%rsp .byte 0xf3,0xc3 .LSEH_end_bn_gather5: -.cfi_endproc +.cfi_endproc .size bn_gather5,.-bn_gather5 .align 64 .Linc: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-x86_64" -#define DATE "built on: Tue Apr 21 13:29:34 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:05 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/camellia/cmll-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/camellia/cmll-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/camellia/cmll-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/camellia/cmll-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,13 +5,13 @@ .type Camellia_EncryptBlock,@function .align 16 Camellia_EncryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Lenc_rounds -.cfi_endproc +.cfi_endproc .size Camellia_EncryptBlock,.-Camellia_EncryptBlock .globl Camellia_EncryptBlock_Rounds @@ -85,7 +85,7 @@ .type _x86_64_Camellia_encrypt,@function .align 16 _x86_64_Camellia_encrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -288,7 +288,7 @@ movl %edx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt @@ -296,13 +296,13 @@ .type Camellia_DecryptBlock,@function .align 16 Camellia_DecryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Ldec_rounds -.cfi_endproc +.cfi_endproc .size Camellia_DecryptBlock,.-Camellia_DecryptBlock .globl Camellia_DecryptBlock_Rounds @@ -376,7 +376,7 @@ .type _x86_64_Camellia_decrypt,@function .align 16 _x86_64_Camellia_decrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -580,7 +580,7 @@ movl %ebx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt .globl Camellia_Ekeygen .type Camellia_Ekeygen,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3874,12 +3874,12 @@ .type ecp_nistz256_to_mont,@function .align 32 ecp_nistz256_to_mont: -.cfi_startproc +.cfi_startproc movl $0x80100,%ecx andl OPENSSL_ia32cap_P+8(%rip),%ecx leaq .LRR(%rip),%rdx jmp .Lmul_mont -.cfi_endproc +.cfi_endproc .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont @@ -4823,7 +4823,7 @@ .type ecp_nistz256_scatter_w5,@function .align 32 ecp_nistz256_scatter_w5: -.cfi_startproc +.cfi_startproc leal -3(%rdx,%rdx,2),%edx movdqa 0(%rsi),%xmm0 shll $5,%edx @@ -4840,7 +4840,7 @@ movdqa %xmm5,80(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 @@ -4914,7 +4914,7 @@ .type ecp_nistz256_scatter_w7,@function .align 32 ecp_nistz256_scatter_w7: -.cfi_startproc +.cfi_startproc movdqu 0(%rsi),%xmm0 shll $6,%edx movdqu 16(%rsi),%xmm1 @@ -4926,7 +4926,7 @@ movdqa %xmm3,48(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/ec/x25519-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/ec/x25519-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/ec/x25519-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/ec/x25519-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -400,14 +400,14 @@ .type x25519_fe64_eligible,@function .align 32 x25519_fe64_eligible: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+8(%rip),%ecx xorl %eax,%eax andl $0x80100,%ecx cmpl $0x80100,%ecx cmovel %ecx,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_eligible,.-x25519_fe64_eligible .globl x25519_fe64_mul @@ -650,7 +650,7 @@ .align 32 x25519_fe64_mul121666: .Lfe64_mul121666_body: -.cfi_startproc +.cfi_startproc movl $121666,%edx mulxq 0(%rsi),%r8,%rcx mulxq 8(%rsi),%r9,%rax @@ -679,7 +679,7 @@ .Lfe64_mul121666_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_mul121666,.-x25519_fe64_mul121666 .globl x25519_fe64_add @@ -687,7 +687,7 @@ .align 32 x25519_fe64_add: .Lfe64_add_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -716,7 +716,7 @@ .Lfe64_add_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_add,.-x25519_fe64_add .globl x25519_fe64_sub @@ -724,7 +724,7 @@ .align 32 x25519_fe64_sub: .Lfe64_sub_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -753,7 +753,7 @@ .Lfe64_sub_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_sub,.-x25519_fe64_sub .globl x25519_fe64_tobytes @@ -761,7 +761,7 @@ .align 32 x25519_fe64_tobytes: .Lfe64_to_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -797,6 +797,6 @@ .Lfe64_to_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes .byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/modes/aesni-gcm-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/modes/aesni-gcm-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/modes/aesni-gcm-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/modes/aesni-gcm-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type _aesni_ctr32_ghash_6x,@function .align 32 _aesni_ctr32_ghash_6x: -.cfi_startproc +.cfi_startproc vmovdqu 32(%r11),%xmm2 subq $6,%rdx vpxor %xmm4,%xmm4,%xmm4 @@ -311,7 +311,7 @@ vpxor %xmm4,%xmm8,%xmm8 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x .globl aesni_gcm_decrypt .type aesni_gcm_decrypt,@function @@ -418,7 +418,7 @@ .type _aesni_ctr32_6x,@function .align 32 _aesni_ctr32_6x: -.cfi_startproc +.cfi_startproc vmovdqu 0-128(%rcx),%xmm4 vmovdqu 32(%r11),%xmm2 leaq -1(%rbp),%r13 @@ -505,7 +505,7 @@ vpshufb %xmm0,%xmm1,%xmm1 vpxor %xmm4,%xmm14,%xmm14 jmp .Loop_ctr32 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_6x,.-_aesni_ctr32_6x .globl aesni_gcm_encrypt diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type poly1305_init,@function .align 32 poly1305_init: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -43,7 +43,7 @@ movl $1,%eax .Lno_key: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init,.-poly1305_init .type poly1305_blocks,@function @@ -164,7 +164,7 @@ .type poly1305_emit,@function .align 32 poly1305_emit: -.cfi_startproc +.cfi_startproc .Lemit: movq 0(%rdi),%r8 movq 8(%rdi),%r9 @@ -185,12 +185,12 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit,.-poly1305_emit .type __poly1305_block,@function .align 32 __poly1305_block: -.cfi_startproc +.cfi_startproc mulq %r14 movq %rax,%r9 movq %r11,%rax @@ -230,13 +230,13 @@ adcq $0,%rbx adcq $0,%rbp .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,@function .align 32 __poly1305_init_avx: -.cfi_startproc +.cfi_startproc movq %r11,%r14 movq %r12,%rbx xorq %rbp,%rbp @@ -394,7 +394,7 @@ leaq -48-64(%rdi),%rdi .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_init_avx,.-__poly1305_init_avx .type poly1305_blocks_avx,@function @@ -1235,7 +1235,7 @@ .type poly1305_emit_avx,@function .align 32 poly1305_emit_avx: -.cfi_startproc +.cfi_startproc cmpl $0,20(%rdi) je .Lemit @@ -1286,7 +1286,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_avx,.-poly1305_emit_avx .type poly1305_blocks_avx2,@function .align 32 @@ -1969,7 +1969,7 @@ .type xor128_encrypt_n_pad,@function .align 16 xor128_encrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -2011,14 +2011,14 @@ .Ldone_enc: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad .type xor128_decrypt_n_pad,@function .align 16 xor128_decrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -2064,5 +2064,5 @@ .Ldone_dec: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/rc4/rc4-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/rc4/rc4-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/rc4/rc4-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/rc4/rc4-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type RC4,@function .align 16 RC4: -.cfi_startproc +.cfi_startproc orq %rsi,%rsi jne .Lentry .byte 0xf3,0xc3 @@ -534,7 +534,7 @@ .type RC4_set_key,@function .align 16 RC4_set_key: -.cfi_startproc +.cfi_startproc leaq 8(%rdi),%rdi leaq (%rdx,%rsi,1),%rdx negq %rsi @@ -601,14 +601,14 @@ movl %eax,-8(%rdi) movl %eax,-4(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size RC4_set_key,.-RC4_set_key .globl RC4_options .type RC4_options,@function .align 16 RC4_options: -.cfi_startproc +.cfi_startproc leaq .Lopts(%rip),%rax movl OPENSSL_ia32cap_P(%rip),%edx btl $20,%edx @@ -621,7 +621,7 @@ addq $12,%rax .Ldone: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .align 64 .Lopts: .byte 114,99,52,40,56,120,44,105,110,116,41,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/keccak1600-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/keccak1600-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/keccak1600-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/keccak1600-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type __KeccakF1600,@function .align 32 __KeccakF1600: -.cfi_startproc +.cfi_startproc movq 60(%rdi),%rax movq 68(%rdi),%rbx movq 76(%rdi),%rcx @@ -256,7 +256,7 @@ leaq -192(%r15),%r15 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __KeccakF1600,.-__KeccakF1600 .type KeccakF1600,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1422,7 +1422,7 @@ movdqu %xmm0,(%rdi) movd %xmm1,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/sha/sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1775,7 +1775,7 @@ .align 64 sha256_block_data_order_shaext: _shaext_shortcut: -.cfi_startproc +.cfi_startproc leaq K256+128(%rip),%rcx movdqu (%rdi),%xmm1 movdqu 16(%rdi),%xmm2 @@ -1978,7 +1978,7 @@ movdqu %xmm1,(%rdi) movdqu %xmm2,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext .type sha256_block_data_order_ssse3,@function .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: -.cfi_startproc +.cfi_startproc movl (%rdi),%eax .Lspin: leaq (%rsi,%rax,1),%r8 .byte 0xf0 @@ -21,19 +21,19 @@ movl %r8d,%eax .byte 0x48,0x98 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_atomic_add,.-OPENSSL_atomic_add .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: -.cfi_startproc +.cfi_startproc rdtsc shlq $32,%rdx orq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_rdtsc,.-OPENSSL_rdtsc .globl OPENSSL_ia32_cpuid @@ -209,7 +209,7 @@ .type OPENSSL_cleanse,@function .align 16 OPENSSL_cleanse: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $15,%rsi jae .Lot @@ -239,14 +239,14 @@ cmpq $0,%rsi jne .Little .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,@function .align 16 CRYPTO_memcmp: -.cfi_startproc +.cfi_startproc xorq %rax,%rax xorq %r10,%r10 cmpq $0,%rdx @@ -275,13 +275,13 @@ shrq $63,%rax .Lno_data: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: -.cfi_startproc +.cfi_startproc pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -308,13 +308,13 @@ xorq %r11,%r11 leaq 8(%rsp),%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 OPENSSL_instrument_bus: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rsi,%r11 @@ -341,14 +341,14 @@ movq %r11,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus .globl OPENSSL_instrument_bus2 .type OPENSSL_instrument_bus2,@function .align 16 OPENSSL_instrument_bus2: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rdx,%r11 @@ -391,13 +391,13 @@ movq 8(%rsp),%rax subq %rcx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 .globl OPENSSL_ia32_rdrand_bytes .type OPENSSL_ia32_rdrand_bytes,@function .align 16 OPENSSL_ia32_rdrand_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdrand_bytes @@ -434,13 +434,13 @@ .Ldone_rdrand_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes .globl OPENSSL_ia32_rdseed_bytes .type OPENSSL_ia32_rdseed_bytes,@function .align 16 OPENSSL_ia32_rdseed_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdseed_bytes @@ -477,5 +477,5 @@ .Ldone_rdseed_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "linux-x86_64" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "linux-x86_64", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1185,6 +1185,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8931,6 +8936,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9508,6 +9517,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14163,6 +14173,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15140,19 +15158,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: linux-x86_64" -#define DATE "built on: Tue Apr 21 13:29:39 2020 UTC" +#define DATE "built on: Tue Mar 15 17:26:15 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/linux-x86_64/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/linux-x86_64/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "solaris64-x86_64-gcc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "solaris64-x86_64-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1183,6 +1183,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9080,6 +9085,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9657,6 +9666,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14427,6 +14437,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15401,19 +15419,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha1_enc,@function .align 32 aesni_cbc_sha1_enc: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+0(%rip),%r10d movq OPENSSL_ia32cap_P+4(%rip),%r11 @@ -18,7 +18,7 @@ je aesni_cbc_sha1_enc_avx jmp aesni_cbc_sha1_enc_ssse3 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc .type aesni_cbc_sha1_enc_ssse3,@function .align 32 @@ -2732,7 +2732,7 @@ .type aesni_cbc_sha1_enc_shaext,@function .align 32 aesni_cbc_sha1_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 movdqu (%r9),%xmm8 movd 16(%r9),%xmm9 @@ -3031,5 +3031,5 @@ movdqu %xmm8,(%r9) movd %xmm9,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha256_enc,@function .align 16 aesni_cbc_sha256_enc: -.cfi_startproc +.cfi_startproc leaq OPENSSL_ia32cap_P(%rip),%r11 movl $1,%eax cmpq $0,%rdi @@ -31,7 +31,7 @@ ud2 .Lprobe: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc .align 64 @@ -4081,7 +4081,7 @@ .type aesni_cbc_sha256_enc_shaext,@function .align 32 aesni_cbc_sha256_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 leaq K256+128(%rip),%rax movdqu (%r9),%xmm1 @@ -4431,5 +4431,5 @@ movdqu %xmm1,(%r9) movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/aes/aesni-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -861,7 +861,7 @@ .type aesni_ccm64_encrypt_blocks,@function .align 16 aesni_ccm64_encrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -920,13 +920,13 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -1019,7 +1019,7 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks .type aesni_ctr32_encrypt_blocks,@function @@ -2794,7 +2794,7 @@ .type __ocb_encrypt6,@function .align 32 __ocb_encrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2892,13 +2892,13 @@ .byte 102,65,15,56,221,246 .byte 102,65,15,56,221,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt6,.-__ocb_encrypt6 .type __ocb_encrypt4,@function .align 32 __ocb_encrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2963,13 +2963,13 @@ .byte 102,65,15,56,221,228 .byte 102,65,15,56,221,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt4,.-__ocb_encrypt4 .type __ocb_encrypt1,@function .align 32 __ocb_encrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm2,%xmm8 @@ -3000,7 +3000,7 @@ .byte 102,15,56,221,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt1,.-__ocb_encrypt1 .globl aesni_ocb_decrypt @@ -3243,7 +3243,7 @@ .type __ocb_decrypt6,@function .align 32 __ocb_decrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3335,13 +3335,13 @@ .byte 102,65,15,56,223,246 .byte 102,65,15,56,223,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt6,.-__ocb_decrypt6 .type __ocb_decrypt4,@function .align 32 __ocb_decrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3402,13 +3402,13 @@ .byte 102,65,15,56,223,228 .byte 102,65,15,56,223,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt4,.-__ocb_decrypt4 .type __ocb_decrypt1,@function .align 32 __ocb_decrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm7,%xmm2 @@ -3438,7 +3438,7 @@ .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt1,.-__ocb_decrypt1 .globl aesni_cbc_encrypt .type aesni_cbc_encrypt,@function @@ -4447,7 +4447,7 @@ shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_set_encrypt_key,.-aesni_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/bn/rsaz-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/bn/rsaz-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/bn/rsaz-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/bn/rsaz-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1453,7 +1453,7 @@ .type __rsaz_512_reduce,@function .align 32 __rsaz_512_reduce: -.cfi_startproc +.cfi_startproc movq %r8,%rbx imulq 128+8(%rsp),%rbx movq 0(%rbp),%rax @@ -1533,12 +1533,12 @@ jne .Lreduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reduce,.-__rsaz_512_reduce .type __rsaz_512_reducex,@function .align 32 __rsaz_512_reducex: -.cfi_startproc +.cfi_startproc imulq %r8,%rdx xorq %rsi,%rsi @@ -1591,12 +1591,12 @@ jne .Lreduction_loopx .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reducex,.-__rsaz_512_reducex .type __rsaz_512_subtract,@function .align 32 __rsaz_512_subtract: -.cfi_startproc +.cfi_startproc movq %r8,(%rdi) movq %r9,8(%rdi) movq %r10,16(%rdi) @@ -1650,12 +1650,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_subtract,.-__rsaz_512_subtract .type __rsaz_512_mul,@function .align 32 __rsaz_512_mul: -.cfi_startproc +.cfi_startproc leaq 8(%rsp),%rdi movq (%rsi),%rax @@ -1794,12 +1794,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mul,.-__rsaz_512_mul .type __rsaz_512_mulx,@function .align 32 __rsaz_512_mulx: -.cfi_startproc +.cfi_startproc mulxq (%rsi),%rbx,%r8 movq $-6,%rcx @@ -1916,13 +1916,13 @@ movq %r15,8+64+56(%rsp) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mulx,.-__rsaz_512_mulx .globl rsaz_512_scatter4 .type rsaz_512_scatter4,@function .align 16 rsaz_512_scatter4: -.cfi_startproc +.cfi_startproc leaq (%rdi,%rdx,8),%rdi movl $8,%r9d jmp .Loop_scatter @@ -1935,14 +1935,14 @@ decl %r9d jnz .Loop_scatter .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size rsaz_512_scatter4,.-rsaz_512_scatter4 .globl rsaz_512_gather4 .type rsaz_512_gather4,@function .align 16 rsaz_512_gather4: -.cfi_startproc +.cfi_startproc movd %edx,%xmm8 movdqa .Linc+16(%rip),%xmm1 movdqa .Linc(%rip),%xmm0 @@ -2006,7 +2006,7 @@ jnz .Loop_gather .byte 0xf3,0xc3 .LSEH_end_rsaz_512_gather4: -.cfi_endproc +.cfi_endproc .size rsaz_512_gather4,.-rsaz_512_gather4 .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/bn/x86_64-mont5.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/bn/x86_64-mont5.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/bn/x86_64-mont5.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/bn/x86_64-mont5.s 2022-04-05 07:17:00.000000000 +0000 @@ -550,7 +550,7 @@ .type mul4x_internal,@function .align 32 mul4x_internal: -.cfi_startproc +.cfi_startproc shlq $5,%r9 movd 8(%rax),%xmm5 leaq .Linc(%rip),%rax @@ -1072,7 +1072,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqr4x_sub_entry -.cfi_endproc +.cfi_endproc .size mul4x_internal,.-mul4x_internal .globl bn_power5 .type bn_power5,@function @@ -1215,7 +1215,7 @@ .align 32 bn_sqr8x_internal: __bn_sqr8x_internal: -.cfi_startproc +.cfi_startproc @@ -1990,12 +1990,12 @@ cmpq %rdx,%rdi jb .L8x_reduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_sqr8x_internal,.-bn_sqr8x_internal .type __bn_post4x_internal,@function .align 32 __bn_post4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 leaq (%rdi,%r9,1),%rbx movq %r9,%rcx @@ -2046,18 +2046,18 @@ movq %r9,%r10 negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_post4x_internal,.-__bn_post4x_internal .globl bn_from_montgomery .type bn_from_montgomery,@function .align 32 bn_from_montgomery: -.cfi_startproc +.cfi_startproc testl $7,%r9d jz bn_from_mont8x xorl %eax,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_from_montgomery,.-bn_from_montgomery .type bn_from_mont8x,@function @@ -2341,7 +2341,7 @@ .type mulx4x_internal,@function .align 32 mulx4x_internal: -.cfi_startproc +.cfi_startproc movq %r9,8(%rsp) movq %r9,%r10 negq %r9 @@ -2760,7 +2760,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqrx4x_sub_entry -.cfi_endproc +.cfi_endproc .size mulx4x_internal,.-mulx4x_internal .type bn_powerx5,@function .align 32 @@ -3519,7 +3519,7 @@ .size bn_sqrx8x_internal,.-bn_sqrx8x_internal .align 32 __bn_postx4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 movq %rcx,%r10 movq %rcx,%r9 @@ -3567,13 +3567,13 @@ negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_get_bits5 .type bn_get_bits5,@function .align 16 bn_get_bits5: -.cfi_startproc +.cfi_startproc leaq 0(%rdi),%r10 leaq 1(%rdi),%r11 movl %esi,%ecx @@ -3587,14 +3587,14 @@ shrl %cl,%eax andl $31,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_get_bits5,.-bn_get_bits5 .globl bn_scatter5 .type bn_scatter5,@function .align 16 bn_scatter5: -.cfi_startproc +.cfi_startproc cmpl $0,%esi jz .Lscatter_epilogue leaq (%rdx,%rcx,8),%rdx @@ -3607,7 +3607,7 @@ jnz .Lscatter .Lscatter_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_scatter5,.-bn_scatter5 .globl bn_gather5 @@ -3615,7 +3615,7 @@ .align 32 bn_gather5: .LSEH_begin_bn_gather5: -.cfi_startproc +.cfi_startproc .byte 0x4c,0x8d,0x14,0x24 .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 @@ -3773,7 +3773,7 @@ leaq (%r10),%rsp .byte 0xf3,0xc3 .LSEH_end_bn_gather5: -.cfi_endproc +.cfi_endproc .size bn_gather5,.-bn_gather5 .align 64 .Linc: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: solaris64-x86_64-gcc" -#define DATE "built on: Tue Apr 21 13:30:14 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:25 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/camellia/cmll-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/camellia/cmll-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/camellia/cmll-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/camellia/cmll-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,13 +5,13 @@ .type Camellia_EncryptBlock,@function .align 16 Camellia_EncryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Lenc_rounds -.cfi_endproc +.cfi_endproc .size Camellia_EncryptBlock,.-Camellia_EncryptBlock .globl Camellia_EncryptBlock_Rounds @@ -85,7 +85,7 @@ .type _x86_64_Camellia_encrypt,@function .align 16 _x86_64_Camellia_encrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -288,7 +288,7 @@ movl %edx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt @@ -296,13 +296,13 @@ .type Camellia_DecryptBlock,@function .align 16 Camellia_DecryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Ldec_rounds -.cfi_endproc +.cfi_endproc .size Camellia_DecryptBlock,.-Camellia_DecryptBlock .globl Camellia_DecryptBlock_Rounds @@ -376,7 +376,7 @@ .type _x86_64_Camellia_decrypt,@function .align 16 _x86_64_Camellia_decrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -580,7 +580,7 @@ movl %ebx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt .globl Camellia_Ekeygen .type Camellia_Ekeygen,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/ec/ecp_nistz256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/ec/ecp_nistz256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/ec/ecp_nistz256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/ec/ecp_nistz256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3874,12 +3874,12 @@ .type ecp_nistz256_to_mont,@function .align 32 ecp_nistz256_to_mont: -.cfi_startproc +.cfi_startproc movl $0x80100,%ecx andl OPENSSL_ia32cap_P+8(%rip),%ecx leaq .LRR(%rip),%rdx jmp .Lmul_mont -.cfi_endproc +.cfi_endproc .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont @@ -4823,7 +4823,7 @@ .type ecp_nistz256_scatter_w5,@function .align 32 ecp_nistz256_scatter_w5: -.cfi_startproc +.cfi_startproc leal -3(%rdx,%rdx,2),%edx movdqa 0(%rsi),%xmm0 shll $5,%edx @@ -4840,7 +4840,7 @@ movdqa %xmm5,80(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 @@ -4914,7 +4914,7 @@ .type ecp_nistz256_scatter_w7,@function .align 32 ecp_nistz256_scatter_w7: -.cfi_startproc +.cfi_startproc movdqu 0(%rsi),%xmm0 shll $6,%edx movdqu 16(%rsi),%xmm1 @@ -4926,7 +4926,7 @@ movdqa %xmm3,48(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/ec/x25519-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/ec/x25519-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/ec/x25519-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/ec/x25519-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -400,14 +400,14 @@ .type x25519_fe64_eligible,@function .align 32 x25519_fe64_eligible: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+8(%rip),%ecx xorl %eax,%eax andl $0x80100,%ecx cmpl $0x80100,%ecx cmovel %ecx,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_eligible,.-x25519_fe64_eligible .globl x25519_fe64_mul @@ -650,7 +650,7 @@ .align 32 x25519_fe64_mul121666: .Lfe64_mul121666_body: -.cfi_startproc +.cfi_startproc movl $121666,%edx mulxq 0(%rsi),%r8,%rcx mulxq 8(%rsi),%r9,%rax @@ -679,7 +679,7 @@ .Lfe64_mul121666_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_mul121666,.-x25519_fe64_mul121666 .globl x25519_fe64_add @@ -687,7 +687,7 @@ .align 32 x25519_fe64_add: .Lfe64_add_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -716,7 +716,7 @@ .Lfe64_add_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_add,.-x25519_fe64_add .globl x25519_fe64_sub @@ -724,7 +724,7 @@ .align 32 x25519_fe64_sub: .Lfe64_sub_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -753,7 +753,7 @@ .Lfe64_sub_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_sub,.-x25519_fe64_sub .globl x25519_fe64_tobytes @@ -761,7 +761,7 @@ .align 32 x25519_fe64_tobytes: .Lfe64_to_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -797,6 +797,6 @@ .Lfe64_to_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes .byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/modes/aesni-gcm-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/modes/aesni-gcm-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/modes/aesni-gcm-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/modes/aesni-gcm-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type _aesni_ctr32_ghash_6x,@function .align 32 _aesni_ctr32_ghash_6x: -.cfi_startproc +.cfi_startproc vmovdqu 32(%r11),%xmm2 subq $6,%rdx vpxor %xmm4,%xmm4,%xmm4 @@ -311,7 +311,7 @@ vpxor %xmm4,%xmm8,%xmm8 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x .globl aesni_gcm_decrypt .type aesni_gcm_decrypt,@function @@ -418,7 +418,7 @@ .type _aesni_ctr32_6x,@function .align 32 _aesni_ctr32_6x: -.cfi_startproc +.cfi_startproc vmovdqu 0-128(%rcx),%xmm4 vmovdqu 32(%r11),%xmm2 leaq -1(%rbp),%r13 @@ -505,7 +505,7 @@ vpshufb %xmm0,%xmm1,%xmm1 vpxor %xmm4,%xmm14,%xmm14 jmp .Loop_ctr32 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_6x,.-_aesni_ctr32_6x .globl aesni_gcm_encrypt diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type poly1305_init,@function .align 32 poly1305_init: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -48,7 +48,7 @@ movl $1,%eax .Lno_key: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init,.-poly1305_init .type poly1305_blocks,@function @@ -169,7 +169,7 @@ .type poly1305_emit,@function .align 32 poly1305_emit: -.cfi_startproc +.cfi_startproc .Lemit: movq 0(%rdi),%r8 movq 8(%rdi),%r9 @@ -190,12 +190,12 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit,.-poly1305_emit .type __poly1305_block,@function .align 32 __poly1305_block: -.cfi_startproc +.cfi_startproc mulq %r14 movq %rax,%r9 movq %r11,%rax @@ -235,13 +235,13 @@ adcq $0,%rbx adcq $0,%rbp .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,@function .align 32 __poly1305_init_avx: -.cfi_startproc +.cfi_startproc movq %r11,%r14 movq %r12,%rbx xorq %rbp,%rbp @@ -399,7 +399,7 @@ leaq -48-64(%rdi),%rdi .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_init_avx,.-__poly1305_init_avx .type poly1305_blocks_avx,@function @@ -1240,7 +1240,7 @@ .type poly1305_emit_avx,@function .align 32 poly1305_emit_avx: -.cfi_startproc +.cfi_startproc cmpl $0,20(%rdi) je .Lemit @@ -1291,7 +1291,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_avx,.-poly1305_emit_avx .type poly1305_blocks_avx2,@function .align 32 @@ -2488,7 +2488,7 @@ .type poly1305_init_base2_44,@function .align 32 poly1305_init_base2_44: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -2522,12 +2522,12 @@ movq %r11,8(%rdx) movl $1,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init_base2_44,.-poly1305_init_base2_44 .type poly1305_blocks_vpmadd52,@function .align 32 poly1305_blocks_vpmadd52: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52 @@ -2634,12 +2634,12 @@ .Lno_data_vpmadd52: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52 .type poly1305_blocks_vpmadd52_4x,@function .align 32 poly1305_blocks_vpmadd52_4x: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52_4x @@ -3064,12 +3064,12 @@ .Lno_data_vpmadd52_4x: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x .type poly1305_blocks_vpmadd52_8x,@function .align 32 poly1305_blocks_vpmadd52_8x: -.cfi_startproc +.cfi_startproc shrq $4,%rdx jz .Lno_data_vpmadd52_8x @@ -3410,12 +3410,12 @@ .Lno_data_vpmadd52_8x: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x .type poly1305_emit_base2_44,@function .align 32 poly1305_emit_base2_44: -.cfi_startproc +.cfi_startproc movq 0(%rdi),%r8 movq 8(%rdi),%r9 movq 16(%rdi),%r10 @@ -3446,7 +3446,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_base2_44,.-poly1305_emit_base2_44 .align 64 .Lconst: @@ -3485,7 +3485,7 @@ .type xor128_encrypt_n_pad,@function .align 16 xor128_encrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -3527,14 +3527,14 @@ .Ldone_enc: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad .type xor128_decrypt_n_pad,@function .align 16 xor128_decrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -3580,5 +3580,5 @@ .Ldone_dec: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/rc4/rc4-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/rc4/rc4-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/rc4/rc4-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/rc4/rc4-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type RC4,@function .align 16 RC4: -.cfi_startproc +.cfi_startproc orq %rsi,%rsi jne .Lentry .byte 0xf3,0xc3 @@ -534,7 +534,7 @@ .type RC4_set_key,@function .align 16 RC4_set_key: -.cfi_startproc +.cfi_startproc leaq 8(%rdi),%rdi leaq (%rdx,%rsi,1),%rdx negq %rsi @@ -601,14 +601,14 @@ movl %eax,-8(%rdi) movl %eax,-4(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size RC4_set_key,.-RC4_set_key .globl RC4_options .type RC4_options,@function .align 16 RC4_options: -.cfi_startproc +.cfi_startproc leaq .Lopts(%rip),%rax movl OPENSSL_ia32cap_P(%rip),%edx btl $20,%edx @@ -621,7 +621,7 @@ addq $12,%rax .Ldone: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .align 64 .Lopts: .byte 114,99,52,40,56,120,44,105,110,116,41,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/keccak1600-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/keccak1600-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/keccak1600-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/keccak1600-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type __KeccakF1600,@function .align 32 __KeccakF1600: -.cfi_startproc +.cfi_startproc movq 60(%rdi),%rax movq 68(%rdi),%rbx movq 76(%rdi),%rcx @@ -256,7 +256,7 @@ leaq -192(%r15),%r15 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __KeccakF1600,.-__KeccakF1600 .type KeccakF1600,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1422,7 +1422,7 @@ movdqu %xmm0,(%rdi) movd %xmm1,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/sha/sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1775,7 +1775,7 @@ .align 64 sha256_block_data_order_shaext: _shaext_shortcut: -.cfi_startproc +.cfi_startproc leaq K256+128(%rip),%rcx movdqu (%rdi),%xmm1 movdqu 16(%rdi),%xmm2 @@ -1978,7 +1978,7 @@ movdqu %xmm1,(%rdi) movdqu %xmm2,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext .type sha256_block_data_order_ssse3,@function .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: -.cfi_startproc +.cfi_startproc movl (%rdi),%eax .Lspin: leaq (%rsi,%rax,1),%r8 .byte 0xf0 @@ -21,19 +21,19 @@ movl %r8d,%eax .byte 0x48,0x98 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_atomic_add,.-OPENSSL_atomic_add .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: -.cfi_startproc +.cfi_startproc rdtsc shlq $32,%rdx orq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_rdtsc,.-OPENSSL_rdtsc .globl OPENSSL_ia32_cpuid @@ -209,7 +209,7 @@ .type OPENSSL_cleanse,@function .align 16 OPENSSL_cleanse: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $15,%rsi jae .Lot @@ -239,14 +239,14 @@ cmpq $0,%rsi jne .Little .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,@function .align 16 CRYPTO_memcmp: -.cfi_startproc +.cfi_startproc xorq %rax,%rax xorq %r10,%r10 cmpq $0,%rdx @@ -275,13 +275,13 @@ shrq $63,%rax .Lno_data: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: -.cfi_startproc +.cfi_startproc pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -308,13 +308,13 @@ xorq %r11,%r11 leaq 8(%rsp),%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 OPENSSL_instrument_bus: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rsi,%r11 @@ -341,14 +341,14 @@ movq %r11,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus .globl OPENSSL_instrument_bus2 .type OPENSSL_instrument_bus2,@function .align 16 OPENSSL_instrument_bus2: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rdx,%r11 @@ -391,13 +391,13 @@ movq 8(%rsp),%rax subq %rcx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 .globl OPENSSL_ia32_rdrand_bytes .type OPENSSL_ia32_rdrand_bytes,@function .align 16 OPENSSL_ia32_rdrand_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdrand_bytes @@ -434,13 +434,13 @@ .Ldone_rdrand_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes .globl OPENSSL_ia32_rdseed_bytes .type OPENSSL_ia32_rdseed_bytes,@function .align 16 OPENSSL_ia32_rdseed_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdseed_bytes @@ -477,5 +477,5 @@ .Ldone_rdseed_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "solaris64-x86_64-gcc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "solaris64-x86_64-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1183,6 +1183,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9080,6 +9085,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9657,6 +9666,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14427,6 +14437,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15401,19 +15419,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha1_enc,@function .align 32 aesni_cbc_sha1_enc: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+0(%rip),%r10d movq OPENSSL_ia32cap_P+4(%rip),%r11 @@ -18,7 +18,7 @@ je aesni_cbc_sha1_enc_avx jmp aesni_cbc_sha1_enc_ssse3 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc .type aesni_cbc_sha1_enc_ssse3,@function .align 32 @@ -2732,7 +2732,7 @@ .type aesni_cbc_sha1_enc_shaext,@function .align 32 aesni_cbc_sha1_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 movdqu (%r9),%xmm8 movd 16(%r9),%xmm9 @@ -3031,5 +3031,5 @@ movdqu %xmm8,(%r9) movd %xmm9,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type aesni_cbc_sha256_enc,@function .align 16 aesni_cbc_sha256_enc: -.cfi_startproc +.cfi_startproc leaq OPENSSL_ia32cap_P(%rip),%r11 movl $1,%eax cmpq $0,%rdi @@ -31,7 +31,7 @@ ud2 .Lprobe: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc .align 64 @@ -4081,7 +4081,7 @@ .type aesni_cbc_sha256_enc_shaext,@function .align 32 aesni_cbc_sha256_enc_shaext: -.cfi_startproc +.cfi_startproc movq 8(%rsp),%r10 leaq K256+128(%rip),%rax movdqu (%r9),%xmm1 @@ -4431,5 +4431,5 @@ movdqu %xmm1,(%r9) movdqu %xmm2,16(%r9) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_cbc_sha256_enc_shaext,.-aesni_cbc_sha256_enc_shaext diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/aes/aesni-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -861,7 +861,7 @@ .type aesni_ccm64_encrypt_blocks,@function .align 16 aesni_ccm64_encrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movdqu (%r8),%xmm6 movdqa .Lincrement64(%rip),%xmm9 @@ -920,13 +920,13 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks .globl aesni_ccm64_decrypt_blocks .type aesni_ccm64_decrypt_blocks,@function .align 16 aesni_ccm64_decrypt_blocks: -.cfi_startproc +.cfi_startproc movl 240(%rcx),%eax movups (%r8),%xmm6 movdqu (%r9),%xmm3 @@ -1019,7 +1019,7 @@ pxor %xmm8,%xmm8 pxor %xmm6,%xmm6 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks .globl aesni_ctr32_encrypt_blocks .type aesni_ctr32_encrypt_blocks,@function @@ -2794,7 +2794,7 @@ .type __ocb_encrypt6,@function .align 32 __ocb_encrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2892,13 +2892,13 @@ .byte 102,65,15,56,221,246 .byte 102,65,15,56,221,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt6,.-__ocb_encrypt6 .type __ocb_encrypt4,@function .align 32 __ocb_encrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -2963,13 +2963,13 @@ .byte 102,65,15,56,221,228 .byte 102,65,15,56,221,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt4,.-__ocb_encrypt4 .type __ocb_encrypt1,@function .align 32 __ocb_encrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm2,%xmm8 @@ -3000,7 +3000,7 @@ .byte 102,15,56,221,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_encrypt1,.-__ocb_encrypt1 .globl aesni_ocb_decrypt @@ -3243,7 +3243,7 @@ .type __ocb_decrypt6,@function .align 32 __ocb_decrypt6: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3335,13 +3335,13 @@ .byte 102,65,15,56,223,246 .byte 102,65,15,56,223,255 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt6,.-__ocb_decrypt6 .type __ocb_decrypt4,@function .align 32 __ocb_decrypt4: -.cfi_startproc +.cfi_startproc pxor %xmm9,%xmm15 movdqu (%rbx,%r12,1),%xmm11 movdqa %xmm10,%xmm12 @@ -3402,13 +3402,13 @@ .byte 102,65,15,56,223,228 .byte 102,65,15,56,223,237 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt4,.-__ocb_decrypt4 .type __ocb_decrypt1,@function .align 32 __ocb_decrypt1: -.cfi_startproc +.cfi_startproc pxor %xmm15,%xmm7 pxor %xmm9,%xmm7 pxor %xmm7,%xmm2 @@ -3438,7 +3438,7 @@ .byte 102,15,56,223,215 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __ocb_decrypt1,.-__ocb_decrypt1 .globl aesni_cbc_encrypt .type aesni_cbc_encrypt,@function @@ -4447,7 +4447,7 @@ shufps $170,%xmm1,%xmm1 xorps %xmm1,%xmm2 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size aesni_set_encrypt_key,.-aesni_set_encrypt_key .size __aesni_set_encrypt_key,.-__aesni_set_encrypt_key .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/bn/rsaz-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/bn/rsaz-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/bn/rsaz-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/bn/rsaz-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1453,7 +1453,7 @@ .type __rsaz_512_reduce,@function .align 32 __rsaz_512_reduce: -.cfi_startproc +.cfi_startproc movq %r8,%rbx imulq 128+8(%rsp),%rbx movq 0(%rbp),%rax @@ -1533,12 +1533,12 @@ jne .Lreduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reduce,.-__rsaz_512_reduce .type __rsaz_512_reducex,@function .align 32 __rsaz_512_reducex: -.cfi_startproc +.cfi_startproc imulq %r8,%rdx xorq %rsi,%rsi @@ -1591,12 +1591,12 @@ jne .Lreduction_loopx .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_reducex,.-__rsaz_512_reducex .type __rsaz_512_subtract,@function .align 32 __rsaz_512_subtract: -.cfi_startproc +.cfi_startproc movq %r8,(%rdi) movq %r9,8(%rdi) movq %r10,16(%rdi) @@ -1650,12 +1650,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_subtract,.-__rsaz_512_subtract .type __rsaz_512_mul,@function .align 32 __rsaz_512_mul: -.cfi_startproc +.cfi_startproc leaq 8(%rsp),%rdi movq (%rsi),%rax @@ -1794,12 +1794,12 @@ movq %r15,56(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mul,.-__rsaz_512_mul .type __rsaz_512_mulx,@function .align 32 __rsaz_512_mulx: -.cfi_startproc +.cfi_startproc mulxq (%rsi),%rbx,%r8 movq $-6,%rcx @@ -1916,13 +1916,13 @@ movq %r15,8+64+56(%rsp) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __rsaz_512_mulx,.-__rsaz_512_mulx .globl rsaz_512_scatter4 .type rsaz_512_scatter4,@function .align 16 rsaz_512_scatter4: -.cfi_startproc +.cfi_startproc leaq (%rdi,%rdx,8),%rdi movl $8,%r9d jmp .Loop_scatter @@ -1935,14 +1935,14 @@ decl %r9d jnz .Loop_scatter .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size rsaz_512_scatter4,.-rsaz_512_scatter4 .globl rsaz_512_gather4 .type rsaz_512_gather4,@function .align 16 rsaz_512_gather4: -.cfi_startproc +.cfi_startproc movd %edx,%xmm8 movdqa .Linc+16(%rip),%xmm1 movdqa .Linc(%rip),%xmm0 @@ -2006,7 +2006,7 @@ jnz .Loop_gather .byte 0xf3,0xc3 .LSEH_end_rsaz_512_gather4: -.cfi_endproc +.cfi_endproc .size rsaz_512_gather4,.-rsaz_512_gather4 .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/bn/x86_64-mont5.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/bn/x86_64-mont5.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/bn/x86_64-mont5.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/bn/x86_64-mont5.s 2022-04-05 07:17:00.000000000 +0000 @@ -550,7 +550,7 @@ .type mul4x_internal,@function .align 32 mul4x_internal: -.cfi_startproc +.cfi_startproc shlq $5,%r9 movd 8(%rax),%xmm5 leaq .Linc(%rip),%rax @@ -1072,7 +1072,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqr4x_sub_entry -.cfi_endproc +.cfi_endproc .size mul4x_internal,.-mul4x_internal .globl bn_power5 .type bn_power5,@function @@ -1215,7 +1215,7 @@ .align 32 bn_sqr8x_internal: __bn_sqr8x_internal: -.cfi_startproc +.cfi_startproc @@ -1990,12 +1990,12 @@ cmpq %rdx,%rdi jb .L8x_reduction_loop .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_sqr8x_internal,.-bn_sqr8x_internal .type __bn_post4x_internal,@function .align 32 __bn_post4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 leaq (%rdi,%r9,1),%rbx movq %r9,%rcx @@ -2046,18 +2046,18 @@ movq %r9,%r10 negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_post4x_internal,.-__bn_post4x_internal .globl bn_from_montgomery .type bn_from_montgomery,@function .align 32 bn_from_montgomery: -.cfi_startproc +.cfi_startproc testl $7,%r9d jz bn_from_mont8x xorl %eax,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_from_montgomery,.-bn_from_montgomery .type bn_from_mont8x,@function @@ -2341,7 +2341,7 @@ .type mulx4x_internal,@function .align 32 mulx4x_internal: -.cfi_startproc +.cfi_startproc movq %r9,8(%rsp) movq %r9,%r10 negq %r9 @@ -2760,7 +2760,7 @@ movq 16(%rbp),%r14 movq 24(%rbp),%r15 jmp .Lsqrx4x_sub_entry -.cfi_endproc +.cfi_endproc .size mulx4x_internal,.-mulx4x_internal .type bn_powerx5,@function .align 32 @@ -3519,7 +3519,7 @@ .size bn_sqrx8x_internal,.-bn_sqrx8x_internal .align 32 __bn_postx4x_internal: -.cfi_startproc +.cfi_startproc movq 0(%rbp),%r12 movq %rcx,%r10 movq %rcx,%r9 @@ -3567,13 +3567,13 @@ negq %r9 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __bn_postx4x_internal,.-__bn_postx4x_internal .globl bn_get_bits5 .type bn_get_bits5,@function .align 16 bn_get_bits5: -.cfi_startproc +.cfi_startproc leaq 0(%rdi),%r10 leaq 1(%rdi),%r11 movl %esi,%ecx @@ -3587,14 +3587,14 @@ shrl %cl,%eax andl $31,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_get_bits5,.-bn_get_bits5 .globl bn_scatter5 .type bn_scatter5,@function .align 16 bn_scatter5: -.cfi_startproc +.cfi_startproc cmpl $0,%esi jz .Lscatter_epilogue leaq (%rdx,%rcx,8),%rdx @@ -3607,7 +3607,7 @@ jnz .Lscatter .Lscatter_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size bn_scatter5,.-bn_scatter5 .globl bn_gather5 @@ -3615,7 +3615,7 @@ .align 32 bn_gather5: .LSEH_begin_bn_gather5: -.cfi_startproc +.cfi_startproc .byte 0x4c,0x8d,0x14,0x24 .byte 0x48,0x81,0xec,0x08,0x01,0x00,0x00 @@ -3773,7 +3773,7 @@ leaq (%r10),%rsp .byte 0xf3,0xc3 .LSEH_end_bn_gather5: -.cfi_endproc +.cfi_endproc .size bn_gather5,.-bn_gather5 .align 64 .Linc: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: solaris64-x86_64-gcc" -#define DATE "built on: Tue Apr 21 13:30:19 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:35 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/camellia/cmll-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/camellia/cmll-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/camellia/cmll-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/camellia/cmll-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,13 +5,13 @@ .type Camellia_EncryptBlock,@function .align 16 Camellia_EncryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Lenc_rounds -.cfi_endproc +.cfi_endproc .size Camellia_EncryptBlock,.-Camellia_EncryptBlock .globl Camellia_EncryptBlock_Rounds @@ -85,7 +85,7 @@ .type _x86_64_Camellia_encrypt,@function .align 16 _x86_64_Camellia_encrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -288,7 +288,7 @@ movl %edx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt @@ -296,13 +296,13 @@ .type Camellia_DecryptBlock,@function .align 16 Camellia_DecryptBlock: -.cfi_startproc +.cfi_startproc movl $128,%eax subl %edi,%eax movl $3,%edi adcl $0,%edi jmp .Ldec_rounds -.cfi_endproc +.cfi_endproc .size Camellia_DecryptBlock,.-Camellia_DecryptBlock .globl Camellia_DecryptBlock_Rounds @@ -376,7 +376,7 @@ .type _x86_64_Camellia_decrypt,@function .align 16 _x86_64_Camellia_decrypt: -.cfi_startproc +.cfi_startproc xorl 0(%r14),%r9d xorl 4(%r14),%r8d xorl 8(%r14),%r11d @@ -580,7 +580,7 @@ movl %ebx,%r11d .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt .globl Camellia_Ekeygen .type Camellia_Ekeygen,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/ec/ecp_nistz256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3874,12 +3874,12 @@ .type ecp_nistz256_to_mont,@function .align 32 ecp_nistz256_to_mont: -.cfi_startproc +.cfi_startproc movl $0x80100,%ecx andl OPENSSL_ia32cap_P+8(%rip),%ecx leaq .LRR(%rip),%rdx jmp .Lmul_mont -.cfi_endproc +.cfi_endproc .size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont @@ -4823,7 +4823,7 @@ .type ecp_nistz256_scatter_w5,@function .align 32 ecp_nistz256_scatter_w5: -.cfi_startproc +.cfi_startproc leal -3(%rdx,%rdx,2),%edx movdqa 0(%rsi),%xmm0 shll $5,%edx @@ -4840,7 +4840,7 @@ movdqa %xmm5,80(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w5,.-ecp_nistz256_scatter_w5 @@ -4914,7 +4914,7 @@ .type ecp_nistz256_scatter_w7,@function .align 32 ecp_nistz256_scatter_w7: -.cfi_startproc +.cfi_startproc movdqu 0(%rsi),%xmm0 shll $6,%edx movdqu 16(%rsi),%xmm1 @@ -4926,7 +4926,7 @@ movdqa %xmm3,48(%rdi,%rdx,1) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size ecp_nistz256_scatter_w7,.-ecp_nistz256_scatter_w7 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/ec/x25519-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/ec/x25519-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/ec/x25519-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/ec/x25519-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -400,14 +400,14 @@ .type x25519_fe64_eligible,@function .align 32 x25519_fe64_eligible: -.cfi_startproc +.cfi_startproc movl OPENSSL_ia32cap_P+8(%rip),%ecx xorl %eax,%eax andl $0x80100,%ecx cmpl $0x80100,%ecx cmovel %ecx,%eax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_eligible,.-x25519_fe64_eligible .globl x25519_fe64_mul @@ -650,7 +650,7 @@ .align 32 x25519_fe64_mul121666: .Lfe64_mul121666_body: -.cfi_startproc +.cfi_startproc movl $121666,%edx mulxq 0(%rsi),%r8,%rcx mulxq 8(%rsi),%r9,%rax @@ -679,7 +679,7 @@ .Lfe64_mul121666_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_mul121666,.-x25519_fe64_mul121666 .globl x25519_fe64_add @@ -687,7 +687,7 @@ .align 32 x25519_fe64_add: .Lfe64_add_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -716,7 +716,7 @@ .Lfe64_add_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_add,.-x25519_fe64_add .globl x25519_fe64_sub @@ -724,7 +724,7 @@ .align 32 x25519_fe64_sub: .Lfe64_sub_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -753,7 +753,7 @@ .Lfe64_sub_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_sub,.-x25519_fe64_sub .globl x25519_fe64_tobytes @@ -761,7 +761,7 @@ .align 32 x25519_fe64_tobytes: .Lfe64_to_body: -.cfi_startproc +.cfi_startproc movq 0(%rsi),%r8 movq 8(%rsi),%r9 movq 16(%rsi),%r10 @@ -797,6 +797,6 @@ .Lfe64_to_epilogue: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size x25519_fe64_tobytes,.-x25519_fe64_tobytes .byte 88,50,53,53,49,57,32,112,114,105,109,105,116,105,118,101,115,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/modes/aesni-gcm-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/modes/aesni-gcm-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/modes/aesni-gcm-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/modes/aesni-gcm-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type _aesni_ctr32_ghash_6x,@function .align 32 _aesni_ctr32_ghash_6x: -.cfi_startproc +.cfi_startproc vmovdqu 32(%r11),%xmm2 subq $6,%rdx vpxor %xmm4,%xmm4,%xmm4 @@ -311,7 +311,7 @@ vpxor %xmm4,%xmm8,%xmm8 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x .globl aesni_gcm_decrypt .type aesni_gcm_decrypt,@function @@ -418,7 +418,7 @@ .type _aesni_ctr32_6x,@function .align 32 _aesni_ctr32_6x: -.cfi_startproc +.cfi_startproc vmovdqu 0-128(%rcx),%xmm4 vmovdqu 32(%r11),%xmm2 leaq -1(%rbp),%r13 @@ -505,7 +505,7 @@ vpshufb %xmm0,%xmm1,%xmm1 vpxor %xmm4,%xmm14,%xmm14 jmp .Loop_ctr32 -.cfi_endproc +.cfi_endproc .size _aesni_ctr32_6x,.-_aesni_ctr32_6x .globl aesni_gcm_encrypt diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/poly1305/poly1305-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/poly1305/poly1305-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/poly1305/poly1305-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type poly1305_init,@function .align 32 poly1305_init: -.cfi_startproc +.cfi_startproc xorq %rax,%rax movq %rax,0(%rdi) movq %rax,8(%rdi) @@ -43,7 +43,7 @@ movl $1,%eax .Lno_key: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_init,.-poly1305_init .type poly1305_blocks,@function @@ -164,7 +164,7 @@ .type poly1305_emit,@function .align 32 poly1305_emit: -.cfi_startproc +.cfi_startproc .Lemit: movq 0(%rdi),%r8 movq 8(%rdi),%r9 @@ -185,12 +185,12 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit,.-poly1305_emit .type __poly1305_block,@function .align 32 __poly1305_block: -.cfi_startproc +.cfi_startproc mulq %r14 movq %rax,%r9 movq %r11,%rax @@ -230,13 +230,13 @@ adcq $0,%rbx adcq $0,%rbp .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_block,.-__poly1305_block .type __poly1305_init_avx,@function .align 32 __poly1305_init_avx: -.cfi_startproc +.cfi_startproc movq %r11,%r14 movq %r12,%rbx xorq %rbp,%rbp @@ -394,7 +394,7 @@ leaq -48-64(%rdi),%rdi .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __poly1305_init_avx,.-__poly1305_init_avx .type poly1305_blocks_avx,@function @@ -1235,7 +1235,7 @@ .type poly1305_emit_avx,@function .align 32 poly1305_emit_avx: -.cfi_startproc +.cfi_startproc cmpl $0,20(%rdi) je .Lemit @@ -1286,7 +1286,7 @@ movq %rcx,8(%rsi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size poly1305_emit_avx,.-poly1305_emit_avx .type poly1305_blocks_avx2,@function .align 32 @@ -1969,7 +1969,7 @@ .type xor128_encrypt_n_pad,@function .align 16 xor128_encrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -2011,14 +2011,14 @@ .Ldone_enc: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad .globl xor128_decrypt_n_pad .type xor128_decrypt_n_pad,@function .align 16 xor128_decrypt_n_pad: -.cfi_startproc +.cfi_startproc subq %rdx,%rsi subq %rdx,%rdi movq %rcx,%r10 @@ -2064,5 +2064,5 @@ .Ldone_dec: movq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/rc4/rc4-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/rc4/rc4-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/rc4/rc4-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/rc4/rc4-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -5,7 +5,7 @@ .type RC4,@function .align 16 RC4: -.cfi_startproc +.cfi_startproc orq %rsi,%rsi jne .Lentry .byte 0xf3,0xc3 @@ -534,7 +534,7 @@ .type RC4_set_key,@function .align 16 RC4_set_key: -.cfi_startproc +.cfi_startproc leaq 8(%rdi),%rdi leaq (%rdx,%rsi,1),%rdx negq %rsi @@ -601,14 +601,14 @@ movl %eax,-8(%rdi) movl %eax,-4(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size RC4_set_key,.-RC4_set_key .globl RC4_options .type RC4_options,@function .align 16 RC4_options: -.cfi_startproc +.cfi_startproc leaq .Lopts(%rip),%rax movl OPENSSL_ia32cap_P(%rip),%edx btl $20,%edx @@ -621,7 +621,7 @@ addq $12,%rax .Ldone: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .align 64 .Lopts: .byte 114,99,52,40,56,120,44,105,110,116,41,0 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/keccak1600-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/keccak1600-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/keccak1600-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/keccak1600-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -3,7 +3,7 @@ .type __KeccakF1600,@function .align 32 __KeccakF1600: -.cfi_startproc +.cfi_startproc movq 60(%rdi),%rax movq 68(%rdi),%rbx movq 76(%rdi),%rcx @@ -256,7 +256,7 @@ leaq -192(%r15),%r15 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size __KeccakF1600,.-__KeccakF1600 .type KeccakF1600,@function diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/sha1-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/sha1-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/sha1-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/sha1-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1422,7 +1422,7 @@ movdqu %xmm0,(%rdi) movd %xmm1,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext .type sha1_block_data_order_ssse3,@function .align 16 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/sha256-x86_64.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/sha256-x86_64.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/sha256-x86_64.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/sha/sha256-x86_64.s 2022-04-05 07:17:00.000000000 +0000 @@ -1775,7 +1775,7 @@ .align 64 sha256_block_data_order_shaext: _shaext_shortcut: -.cfi_startproc +.cfi_startproc leaq K256+128(%rip),%rcx movdqu (%rdi),%xmm1 movdqu 16(%rdi),%xmm2 @@ -1978,7 +1978,7 @@ movdqu %xmm1,(%rdi) movdqu %xmm2,16(%rdi) .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext .type sha256_block_data_order_ssse3,@function .align 64 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/x86_64cpuid.s nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/x86_64cpuid.s --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/x86_64cpuid.s 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/crypto/x86_64cpuid.s 2022-04-05 07:17:00.000000000 +0000 @@ -12,7 +12,7 @@ .type OPENSSL_atomic_add,@function .align 16 OPENSSL_atomic_add: -.cfi_startproc +.cfi_startproc movl (%rdi),%eax .Lspin: leaq (%rsi,%rax,1),%r8 .byte 0xf0 @@ -21,19 +21,19 @@ movl %r8d,%eax .byte 0x48,0x98 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_atomic_add,.-OPENSSL_atomic_add .globl OPENSSL_rdtsc .type OPENSSL_rdtsc,@function .align 16 OPENSSL_rdtsc: -.cfi_startproc +.cfi_startproc rdtsc shlq $32,%rdx orq %rdx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_rdtsc,.-OPENSSL_rdtsc .globl OPENSSL_ia32_cpuid @@ -209,7 +209,7 @@ .type OPENSSL_cleanse,@function .align 16 OPENSSL_cleanse: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $15,%rsi jae .Lot @@ -239,14 +239,14 @@ cmpq $0,%rsi jne .Little .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_cleanse,.-OPENSSL_cleanse .globl CRYPTO_memcmp .type CRYPTO_memcmp,@function .align 16 CRYPTO_memcmp: -.cfi_startproc +.cfi_startproc xorq %rax,%rax xorq %r10,%r10 cmpq $0,%rdx @@ -275,13 +275,13 @@ shrq $63,%rax .Lno_data: .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size CRYPTO_memcmp,.-CRYPTO_memcmp .globl OPENSSL_wipe_cpu .type OPENSSL_wipe_cpu,@function .align 16 OPENSSL_wipe_cpu: -.cfi_startproc +.cfi_startproc pxor %xmm0,%xmm0 pxor %xmm1,%xmm1 pxor %xmm2,%xmm2 @@ -308,13 +308,13 @@ xorq %r11,%r11 leaq 8(%rsp),%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu .globl OPENSSL_instrument_bus .type OPENSSL_instrument_bus,@function .align 16 OPENSSL_instrument_bus: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rsi,%r11 @@ -341,14 +341,14 @@ movq %r11,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus .globl OPENSSL_instrument_bus2 .type OPENSSL_instrument_bus2,@function .align 16 OPENSSL_instrument_bus2: -.cfi_startproc +.cfi_startproc movq %rdi,%r10 movq %rsi,%rcx movq %rdx,%r11 @@ -391,13 +391,13 @@ movq 8(%rsp),%rax subq %rcx,%rax .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2 .globl OPENSSL_ia32_rdrand_bytes .type OPENSSL_ia32_rdrand_bytes,@function .align 16 OPENSSL_ia32_rdrand_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdrand_bytes @@ -434,13 +434,13 @@ .Ldone_rdrand_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes .globl OPENSSL_ia32_rdseed_bytes .type OPENSSL_ia32_rdseed_bytes,@function .align 16 OPENSSL_ia32_rdseed_bytes: -.cfi_startproc +.cfi_startproc xorq %rax,%rax cmpq $0,%rsi je .Ldone_rdseed_bytes @@ -477,5 +477,5 @@ .Ldone_rdseed_bytes: xorq %r10,%r10 .byte 0xf3,0xc3 -.cfi_endproc +.cfi_endproc .size OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "solaris64-x86_64-gcc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "solaris64-x86_64-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1181,6 +1181,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8927,6 +8932,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9504,6 +9513,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14159,6 +14169,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15136,19 +15154,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: solaris64-x86_64-gcc" -#define DATE "built on: Tue Apr 21 13:30:24 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:46 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris64-x86_64-gcc/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "solaris-x86-gcc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "solaris-x86-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1182,6 +1182,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9006,6 +9011,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9583,6 +9592,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14303,6 +14313,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15277,19 +15295,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: solaris-x86-gcc" -#define DATE "built on: Tue Apr 21 13:30:08 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:13 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "solaris-x86-gcc" ], perlenv => { "AR" => undef, @@ -111,8 +111,8 @@ sourcedir => ".", target => "solaris-x86-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1182,6 +1182,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9006,6 +9011,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9583,6 +9592,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14303,6 +14313,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15277,19 +15295,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: solaris-x86-gcc" -#define DATE "built on: Tue Apr 21 13:30:10 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:18 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -117,6 +117,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -61,7 +61,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "solaris-x86-gcc" ], perlenv => { "AR" => undef, @@ -110,8 +110,8 @@ sourcedir => ".", target => "solaris-x86-gcc", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -1179,6 +1179,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8925,6 +8930,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9502,6 +9511,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14157,6 +14167,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15134,19 +15152,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: solaris-x86-gcc" -#define DATE "built on: Tue Apr 21 13:30:13 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:22 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/solaris-x86-gcc/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/solaris-x86-gcc/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -66,7 +66,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "VC-WIN32" ], perlenv => { "AR" => undef, @@ -115,8 +115,8 @@ sourcedir => ".", target => "VC-WIN32", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -132,7 +132,7 @@ LDFLAGS => "/nologo /debug", MT => "mt", MTFLAGS => "-nologo", - RANLIB => "CODE(0x555663f9f6e8)", + RANLIB => "CODE(0x555555be37f0)", RC => "rc", _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], aes_asm_src => "aes_core.c aes_cbc.c vpaes-x86.s aesni-x86.s", @@ -1203,6 +1203,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9037,6 +9042,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9614,6 +9623,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14312,6 +14322,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15282,19 +15300,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: " -#define DATE "built on: Tue Apr 21 13:30:38 2020 UTC" +#define DATE "built on: Tue Mar 15 17:28:15 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -66,7 +66,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "VC-WIN32" ], perlenv => { "AR" => undef, @@ -115,8 +115,8 @@ sourcedir => ".", target => "VC-WIN32", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -132,7 +132,7 @@ LDFLAGS => "/nologo /debug", MT => "mt", MTFLAGS => "-nologo", - RANLIB => "CODE(0x557555fd4548)", + RANLIB => "CODE(0x555555be2da0)", RC => "rc", _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], aes_asm_src => "aes_core.c aes_cbc.c vpaes-x86.s aesni-x86.s", @@ -1203,6 +1203,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9037,6 +9042,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9614,6 +9623,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14312,6 +14322,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15282,19 +15300,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: " -#define DATE "built on: Tue Apr 21 13:30:40 2020 UTC" +#define DATE "built on: Tue Mar 15 17:28:19 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -65,7 +65,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "VC-WIN32" ], perlenv => { "AR" => undef, @@ -114,8 +114,8 @@ sourcedir => ".", target => "VC-WIN32", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -131,7 +131,7 @@ LDFLAGS => "/nologo /debug", MT => "mt", MTFLAGS => "-nologo", - RANLIB => "CODE(0x55b7cbf3ba68)", + RANLIB => "CODE(0x555555be4400)", RC => "rc", _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], aes_asm_src => "aes_core.c aes_cbc.c", @@ -1201,6 +1201,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8957,6 +8962,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9534,6 +9543,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14167,6 +14177,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15140,19 +15158,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: " -#define DATE "built on: Tue Apr 21 13:30:42 2020 UTC" +#define DATE "built on: Tue Mar 15 17:28:23 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -123,6 +123,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN32/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN32/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -67,7 +67,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "VC-WIN64A" ], perlenv => { "AR" => undef, @@ -116,8 +116,8 @@ sourcedir => ".", target => "VC-WIN64A", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -133,7 +133,7 @@ LDFLAGS => "/nologo /debug", MT => "mt", MTFLAGS => "-nologo", - RANLIB => "CODE(0x5647ca1193c8)", + RANLIB => "CODE(0x555555be3b80)", RC => "rc", _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], aes_asm_src => "aes_core.c aes_cbc.c vpaes-x86_64.s aesni-x86_64.s aesni-sha1-x86_64.s aesni-sha256-x86_64.s aesni-mb-x86_64.s", @@ -1205,6 +1205,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9099,6 +9104,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9676,6 +9685,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14424,6 +14434,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15394,19 +15412,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: " -#define DATE "built on: Tue Apr 21 13:30:25 2020 UTC" +#define DATE "built on: Tue Mar 15 17:27:49 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/crypto/chacha/chacha-x86_64.asm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/crypto/chacha/chacha-x86_64.asm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/crypto/chacha/chacha-x86_64.asm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/crypto/chacha/chacha-x86_64.asm 2022-04-05 07:17:00.000000000 +0000 @@ -367,7 +367,7 @@ ja NEAR $L$ChaCha20_4x $L$do_sse3_after_all: - sub rsp,64+40 + sub rsp,64+168 movaps XMMWORD[(-40)+r9],xmm6 movaps XMMWORD[(-24)+r9],xmm7 $L$ssse3_body: @@ -2378,9 +2378,17 @@ cmp rdx,512 ja NEAR $L$ChaCha20_16x - sub rsp,64+40 - movaps XMMWORD[(-40)+r9],xmm6 - movaps XMMWORD[(-24)+r9],xmm7 + sub rsp,64+168 + movaps XMMWORD[(-168)+r9],xmm6 + movaps XMMWORD[(-152)+r9],xmm7 + movaps XMMWORD[(-136)+r9],xmm8 + movaps XMMWORD[(-120)+r9],xmm9 + movaps XMMWORD[(-104)+r9],xmm10 + movaps XMMWORD[(-88)+r9],xmm11 + movaps XMMWORD[(-72)+r9],xmm12 + movaps XMMWORD[(-56)+r9],xmm13 + movaps XMMWORD[(-40)+r9],xmm14 + movaps XMMWORD[(-24)+r9],xmm15 $L$avx512_body: vbroadcasti32x4 zmm0,ZMMWORD[$L$sigma] vbroadcasti32x4 zmm1,ZMMWORD[rcx] @@ -2560,8 +2568,16 @@ $L$done_avx512: vzeroall - movaps xmm6,XMMWORD[((-40))+r9] - movaps xmm7,XMMWORD[((-24))+r9] + movaps xmm6,XMMWORD[((-168))+r9] + movaps xmm7,XMMWORD[((-152))+r9] + movaps xmm8,XMMWORD[((-136))+r9] + movaps xmm9,XMMWORD[((-120))+r9] + movaps xmm10,XMMWORD[((-104))+r9] + movaps xmm11,XMMWORD[((-88))+r9] + movaps xmm12,XMMWORD[((-72))+r9] + movaps xmm13,XMMWORD[((-56))+r9] + movaps xmm14,XMMWORD[((-40))+r9] + movaps xmm15,XMMWORD[((-24))+r9] lea rsp,[r9] $L$avx512_epilogue: @@ -2591,9 +2607,17 @@ cmp rdx,128 ja NEAR $L$ChaCha20_8xvl - sub rsp,64+40 - movaps XMMWORD[(-40)+r9],xmm6 - movaps XMMWORD[(-24)+r9],xmm7 + sub rsp,64+168 + movaps XMMWORD[(-168)+r9],xmm6 + movaps XMMWORD[(-152)+r9],xmm7 + movaps XMMWORD[(-136)+r9],xmm8 + movaps XMMWORD[(-120)+r9],xmm9 + movaps XMMWORD[(-104)+r9],xmm10 + movaps XMMWORD[(-88)+r9],xmm11 + movaps XMMWORD[(-72)+r9],xmm12 + movaps XMMWORD[(-56)+r9],xmm13 + movaps XMMWORD[(-40)+r9],xmm14 + movaps XMMWORD[(-24)+r9],xmm15 $L$avx512vl_body: vbroadcasti128 ymm0,XMMWORD[$L$sigma] vbroadcasti128 ymm1,XMMWORD[rcx] @@ -2730,8 +2754,16 @@ $L$done_avx512vl: vzeroall - movaps xmm6,XMMWORD[((-40))+r9] - movaps xmm7,XMMWORD[((-24))+r9] + movaps xmm6,XMMWORD[((-168))+r9] + movaps xmm7,XMMWORD[((-152))+r9] + movaps xmm8,XMMWORD[((-136))+r9] + movaps xmm9,XMMWORD[((-120))+r9] + movaps xmm10,XMMWORD[((-104))+r9] + movaps xmm11,XMMWORD[((-88))+r9] + movaps xmm12,XMMWORD[((-72))+r9] + movaps xmm13,XMMWORD[((-56))+r9] + movaps xmm14,XMMWORD[((-40))+r9] + movaps xmm15,XMMWORD[((-24))+r9] lea rsp,[r9] $L$avx512vl_epilogue: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/crypto/x86_64cpuid.asm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/crypto/x86_64cpuid.asm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/crypto/x86_64cpuid.asm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/crypto/x86_64cpuid.asm 2022-04-05 07:17:00.000000000 +0000 @@ -478,3 +478,4 @@ xor r10,r10 DB 0F3h,0C3h ;repret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -67,7 +67,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "VC-WIN64A" ], perlenv => { "AR" => undef, @@ -116,8 +116,8 @@ sourcedir => ".", target => "VC-WIN64A", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -133,7 +133,7 @@ LDFLAGS => "/nologo /debug", MT => "mt", MTFLAGS => "-nologo", - RANLIB => "CODE(0x55fd09262448)", + RANLIB => "CODE(0x555555be44b0)", RC => "rc", _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], aes_asm_src => "aes_core.c aes_cbc.c vpaes-x86_64.s aesni-x86_64.s aesni-sha1-x86_64.s aesni-sha256-x86_64.s aesni-mb-x86_64.s", @@ -1205,6 +1205,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -9099,6 +9104,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9676,6 +9685,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14424,6 +14434,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15394,19 +15412,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: " -#define DATE "built on: Tue Apr 21 13:30:31 2020 UTC" +#define DATE "built on: Tue Mar 15 17:28:00 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/chacha/chacha-x86_64.asm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/chacha/chacha-x86_64.asm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/chacha/chacha-x86_64.asm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/chacha/chacha-x86_64.asm 2022-04-05 07:17:00.000000000 +0000 @@ -367,7 +367,7 @@ ja NEAR $L$ChaCha20_4x $L$do_sse3_after_all: - sub rsp,64+40 + sub rsp,64+168 movaps XMMWORD[(-40)+r9],xmm6 movaps XMMWORD[(-24)+r9],xmm7 $L$ssse3_body: @@ -2378,9 +2378,17 @@ cmp rdx,512 ja NEAR $L$ChaCha20_16x - sub rsp,64+40 - movaps XMMWORD[(-40)+r9],xmm6 - movaps XMMWORD[(-24)+r9],xmm7 + sub rsp,64+168 + movaps XMMWORD[(-168)+r9],xmm6 + movaps XMMWORD[(-152)+r9],xmm7 + movaps XMMWORD[(-136)+r9],xmm8 + movaps XMMWORD[(-120)+r9],xmm9 + movaps XMMWORD[(-104)+r9],xmm10 + movaps XMMWORD[(-88)+r9],xmm11 + movaps XMMWORD[(-72)+r9],xmm12 + movaps XMMWORD[(-56)+r9],xmm13 + movaps XMMWORD[(-40)+r9],xmm14 + movaps XMMWORD[(-24)+r9],xmm15 $L$avx512_body: vbroadcasti32x4 zmm0,ZMMWORD[$L$sigma] vbroadcasti32x4 zmm1,ZMMWORD[rcx] @@ -2560,8 +2568,16 @@ $L$done_avx512: vzeroall - movaps xmm6,XMMWORD[((-40))+r9] - movaps xmm7,XMMWORD[((-24))+r9] + movaps xmm6,XMMWORD[((-168))+r9] + movaps xmm7,XMMWORD[((-152))+r9] + movaps xmm8,XMMWORD[((-136))+r9] + movaps xmm9,XMMWORD[((-120))+r9] + movaps xmm10,XMMWORD[((-104))+r9] + movaps xmm11,XMMWORD[((-88))+r9] + movaps xmm12,XMMWORD[((-72))+r9] + movaps xmm13,XMMWORD[((-56))+r9] + movaps xmm14,XMMWORD[((-40))+r9] + movaps xmm15,XMMWORD[((-24))+r9] lea rsp,[r9] $L$avx512_epilogue: @@ -2591,9 +2607,17 @@ cmp rdx,128 ja NEAR $L$ChaCha20_8xvl - sub rsp,64+40 - movaps XMMWORD[(-40)+r9],xmm6 - movaps XMMWORD[(-24)+r9],xmm7 + sub rsp,64+168 + movaps XMMWORD[(-168)+r9],xmm6 + movaps XMMWORD[(-152)+r9],xmm7 + movaps XMMWORD[(-136)+r9],xmm8 + movaps XMMWORD[(-120)+r9],xmm9 + movaps XMMWORD[(-104)+r9],xmm10 + movaps XMMWORD[(-88)+r9],xmm11 + movaps XMMWORD[(-72)+r9],xmm12 + movaps XMMWORD[(-56)+r9],xmm13 + movaps XMMWORD[(-40)+r9],xmm14 + movaps XMMWORD[(-24)+r9],xmm15 $L$avx512vl_body: vbroadcasti128 ymm0,XMMWORD[$L$sigma] vbroadcasti128 ymm1,XMMWORD[rcx] @@ -2730,8 +2754,16 @@ $L$done_avx512vl: vzeroall - movaps xmm6,XMMWORD[((-40))+r9] - movaps xmm7,XMMWORD[((-24))+r9] + movaps xmm6,XMMWORD[((-168))+r9] + movaps xmm7,XMMWORD[((-152))+r9] + movaps xmm8,XMMWORD[((-136))+r9] + movaps xmm9,XMMWORD[((-120))+r9] + movaps xmm10,XMMWORD[((-104))+r9] + movaps xmm11,XMMWORD[((-88))+r9] + movaps xmm12,XMMWORD[((-72))+r9] + movaps xmm13,XMMWORD[((-56))+r9] + movaps xmm14,XMMWORD[((-40))+r9] + movaps xmm15,XMMWORD[((-24))+r9] lea rsp,[r9] $L$avx512vl_epilogue: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/x86_64cpuid.asm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/x86_64cpuid.asm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/x86_64cpuid.asm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/crypto/x86_64cpuid.asm 2022-04-05 07:17:00.000000000 +0000 @@ -478,3 +478,4 @@ xor r10,r10 DB 0F3h,0C3h ;repret + diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/asm_avx2/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/asm_avx2/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -66,7 +66,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "VC-WIN64A" ], perlenv => { "AR" => undef, @@ -115,8 +115,8 @@ sourcedir => ".", target => "VC-WIN64A", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -132,7 +132,7 @@ LDFLAGS => "/nologo /debug", MT => "mt", MTFLAGS => "-nologo", - RANLIB => "CODE(0x55d89d717d18)", + RANLIB => "CODE(0x555555be42e0)", RC => "rc", _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/shared-info.pl" ], aes_asm_src => "aes_core.c aes_cbc.c", @@ -1203,6 +1203,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8959,6 +8964,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9536,6 +9545,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14169,6 +14179,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15142,19 +15160,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: " -#define DATE "built on: Tue Apr 21 13:30:37 2020 UTC" +#define DATE "built on: Tue Mar 15 17:28:12 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -123,6 +123,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64A/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64A/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/configdata.pm nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/configdata.pm --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/configdata.pm 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/configdata.pm 2022-04-05 07:17:00.000000000 +0000 @@ -64,7 +64,7 @@ options => "enable-ssl-trace no-afalgeng no-asan no-asm no-buildtest-c++ no-comp no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-dynamic-engine no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer no-heartbeats no-md2 no-msan no-rc5 no-sctp no-shared no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib no-zlib-dynamic", perl_archname => "x86_64-linux-gnu-thread-multi", perl_cmd => "/usr/bin/perl", - perl_version => "5.26.1", + perl_version => "5.30.0", perlargv => [ "no-comp", "no-shared", "no-afalgeng", "enable-ssl-trace", "no-asm", "VC-WIN64-ARM" ], perlenv => { "AR" => undef, @@ -113,8 +113,8 @@ sourcedir => ".", target => "VC-WIN64-ARM", tdirs => [ "ossl_shim" ], - version => "1.1.1g", - version_num => "0x1010107fL", + version => "1.1.1n", + version_num => "0x101010efL", ); our %target = ( @@ -128,7 +128,7 @@ LDFLAGS => "/nologo /debug", MT => "mt", MTFLAGS => "-nologo", - RANLIB => "CODE(0x561bd9d97ee8)", + RANLIB => "CODE(0x555555be41b0)", RC => "rc", _conf_fname_int => [ "Configurations/00-base-templates.conf", "Configurations/00-base-templates.conf", "Configurations/10-main.conf", "Configurations/10-main.conf", "Configurations/50-win-onecore.conf", "Configurations/shared-info.pl" ], aes_asm_src => "aes_core.c aes_cbc.c", @@ -1195,6 +1195,11 @@ "libssl", "test/libtestutil.a", ], + "test/cmactest" => + [ + "libcrypto.a", + "test/libtestutil.a", + ], "test/cmsapitest" => [ "libcrypto", @@ -8951,6 +8956,10 @@ [ "include", ], + "test/cmactest.o" => + [ + "include", + ], "test/cmsapitest.o" => [ "include", @@ -9528,6 +9537,7 @@ "test/cipherlist_test", "test/ciphername_test", "test/clienthellotest", + "test/cmactest", "test/cmsapitest", "test/conf_include_test", "test/constant_time_test", @@ -14161,6 +14171,14 @@ [ "test/clienthellotest.c", ], + "test/cmactest" => + [ + "test/cmactest.o", + ], + "test/cmactest.o" => + [ + "test/cmactest.c", + ], "test/cmsapitest" => [ "test/cmsapitest.o", @@ -15134,19 +15152,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/crypto/buildinf.h 2022-04-05 07:17:00.000000000 +0000 @@ -11,7 +11,7 @@ */ #define PLATFORM "platform: VC-WIN64-ARM" -#define DATE "built on: Tue Apr 21 13:30:43 2020 UTC" +#define DATE "built on: Tue Mar 15 17:28:25 2022 UTC" /* * Generate compiler_flags as an array of individual characters. This is a diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/include/openssl/opensslconf.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/include/openssl/opensslconf.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/include/openssl/opensslconf.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/include/openssl/opensslconf.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by makefile from include/openssl/opensslconf.h.in * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,6 +120,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/include/progs.h nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/include/progs.h --- nodejs-mozilla-12.18.1/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/include/progs.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/archs/VC-WIN64-ARM/no-asm/include/progs.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by apps/progs.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/bn_conf_asm.h nodejs-mozilla-12.22.12/deps/openssl/config/bn_conf_asm.h --- nodejs-mozilla-12.18.1/deps/openssl/config/bn_conf_asm.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/bn_conf_asm.h 2022-04-05 07:17:00.000000000 +0000 @@ -17,6 +17,8 @@ # include "./archs/darwin-i386-cc/asm/crypto/include/internal/bn_conf.h" #elif defined(__APPLE__) && defined(__MACH__) && defined(__x86_64__) # include "./archs/darwin64-x86_64-cc/asm/crypto/include/internal/bn_conf.h" +#elif defined(__APPLE__) && defined(__MACH__) && defined(__arm64__) +# include "./archs/darwin64-arm64-cc/asm/crypto/include/internal/bn_conf.h" #elif defined(_WIN32) && defined(_M_IX86) # include "./archs/VC-WIN32/asm/crypto/include/internal/bn_conf.h" #elif defined(_WIN32) && defined(_M_X64) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/bn_conf_no-asm.h nodejs-mozilla-12.22.12/deps/openssl/config/bn_conf_no-asm.h --- nodejs-mozilla-12.18.1/deps/openssl/config/bn_conf_no-asm.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/bn_conf_no-asm.h 2022-04-05 07:17:00.000000000 +0000 @@ -17,6 +17,8 @@ # include "./archs/darwin-i386-cc/no-asm/crypto/include/internal/bn_conf.h" #elif defined(__APPLE__) && defined(__MACH__) && defined(__x86_64__) # include "./archs/darwin64-x86_64-cc/no-asm/crypto/include/internal/bn_conf.h" +#elif defined(__APPLE__) && defined(__MACH__) && defined(__arm64__) +# include "./archs/darwin64-arm64-cc/no-asm/crypto/include/internal/bn_conf.h" #elif defined(_WIN32) && defined(_M_IX86) # include "./archs/VC-WIN32/no-asm/crypto/include/internal/bn_conf.h" #elif defined(_WIN32) && defined(_M_X64) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/Dockerfile nodejs-mozilla-12.22.12/deps/openssl/config/Dockerfile --- nodejs-mozilla-12.18.1/deps/openssl/config/Dockerfile 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/Dockerfile 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,12 @@ +FROM ubuntu:20.04 + +VOLUME /node + +RUN buildDeps='binutils build-essential vim nasm git' \ + && apt-get update \ + && apt-get install -y --no-install-recommends --force-yes $buildDeps \ + && apt-get clean \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +WORKDIR /node diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/dso_conf_asm.h nodejs-mozilla-12.22.12/deps/openssl/config/dso_conf_asm.h --- nodejs-mozilla-12.18.1/deps/openssl/config/dso_conf_asm.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/dso_conf_asm.h 2022-04-05 07:17:00.000000000 +0000 @@ -17,6 +17,8 @@ # include "./archs/darwin-i386-cc/asm/crypto/include/internal/dso_conf.h" #elif defined(__APPLE__) && defined(__MACH__) && defined(__x86_64__) # include "./archs/darwin64-x86_64-cc/asm/crypto/include/internal/dso_conf.h" +#elif defined(__APPLE__) && defined(__MACH__) && defined(__arm64__) +# include "./archs/darwin64-arm64-cc/asm/crypto/include/internal/dso_conf.h" #elif defined(_WIN32) && defined(_M_IX86) # include "./archs/VC-WIN32/asm/crypto/include/internal/dso_conf.h" #elif defined(_WIN32) && defined(_M_X64) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/dso_conf_no-asm.h nodejs-mozilla-12.22.12/deps/openssl/config/dso_conf_no-asm.h --- nodejs-mozilla-12.18.1/deps/openssl/config/dso_conf_no-asm.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/dso_conf_no-asm.h 2022-04-05 07:17:00.000000000 +0000 @@ -17,6 +17,8 @@ # include "./archs/darwin-i386-cc/no-asm/crypto/include/internal/dso_conf.h" #elif defined(__APPLE__) && defined(__MACH__) && defined(__x86_64__) # include "./archs/darwin64-x86_64-cc/no-asm/crypto/include/internal/dso_conf.h" +#elif defined(__APPLE__) && defined(__MACH__) && defined(__arm64__) +# include "./archs/darwin64-arm64-cc/no-asm/crypto/include/internal/dso_conf.h" #elif defined(_WIN32) && defined(_M_IX86) # include "./archs/VC-WIN32/no-asm/crypto/include/internal/dso_conf.h" #elif defined(_WIN32) && defined(_M_X64) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/Makefile nodejs-mozilla-12.22.12/deps/openssl/config/Makefile --- nodejs-mozilla-12.18.1/deps/openssl/config/Makefile 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/Makefile 2022-04-05 07:17:00.000000000 +0000 @@ -10,7 +10,7 @@ # Supported architecture list ASM_ARCHS = aix-gcc aix64-gcc BSD-x86 BSD-x86_64 \ -darwin64-x86_64-cc darwin-i386-cc linux-aarch64 \ +darwin64-x86_64-cc darwin-i386-cc darwin64-arm64-cc linux-aarch64 \ linux-armv4 linux-elf linux-x32 linux-x86_64 linux-ppc \ linux-ppc64 linux-ppc64le linux32-s390x linux64-s390x linux64-mips64\ solaris-x86-gcc solaris64-x86_64-gcc VC-WIN64A VC-WIN32 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/opensslconf_asm.h nodejs-mozilla-12.22.12/deps/openssl/config/opensslconf_asm.h --- nodejs-mozilla-12.18.1/deps/openssl/config/opensslconf_asm.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/opensslconf_asm.h 2022-04-05 07:17:00.000000000 +0000 @@ -32,6 +32,7 @@ | linux | s390x | linux64-s390x | o | | mac | ia32 | darwin-i386-cc | - | | mac | x64 | darwin64-x86-cc | o | + | mac | arm64 | darwin64-arm64-cc | - | | win | ia32 | VC-WIN32 | - | | win | x64 | VC-WIN64A | o | | solaris | ia32 | solaris-x86-gcc | o | @@ -104,6 +105,8 @@ # include "./archs/darwin-i386-cc/asm/include/openssl/opensslconf.h" #elif defined(__APPLE__) && defined(__MACH__) && defined(__x86_64__) # include "./archs/darwin64-x86_64-cc/asm/include/openssl/opensslconf.h" +#elif defined(__APPLE__) && defined(__MACH__) && defined(__arm64__) +# include "./archs/darwin64-arm64-cc/asm/include/openssl/opensslconf.h" #elif defined(_WIN32) && defined(_M_IX86) # include "./archs/VC-WIN32/asm/include/openssl/opensslconf.h" #elif defined(_WIN32) && defined(_M_X64) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/config/opensslconf_no-asm.h nodejs-mozilla-12.22.12/deps/openssl/config/opensslconf_no-asm.h --- nodejs-mozilla-12.18.1/deps/openssl/config/opensslconf_no-asm.h 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/config/opensslconf_no-asm.h 2022-04-05 07:17:00.000000000 +0000 @@ -12,6 +12,8 @@ # include "./archs/darwin-i386-cc/no-asm/include/openssl/opensslconf.h" #elif defined(__APPLE__) && defined(__MACH__) && defined(__x86_64__) # include "./archs/darwin64-x86_64-cc/no-asm/include/openssl/opensslconf.h" +#elif defined(__APPLE__) && defined(__MACH__) && defined(__arm64__) +# include "./archs/darwin64-arm64-cc/no-asm/include/openssl/opensslconf.h" #elif defined(_WIN32) && defined(_M_IX86) # include "./archs/VC-WIN32/no-asm/include/openssl/opensslconf.h" #elif defined(_WIN32) && defined(_M_X64) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/apps.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/apps.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/apps.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/apps.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -300,9 +300,13 @@ int ui_flags = 0; const char *prompt_info = NULL; char *prompt; + int pw_min_len = PW_MIN_LENGTH; if (cb_data != NULL && cb_data->prompt_info != NULL) prompt_info = cb_data->prompt_info; + if (cb_data != NULL && cb_data->password != NULL + && *(const char*)cb_data->password != '\0') + pw_min_len = 1; prompt = UI_construct_prompt(ui, "pass phrase", prompt_info); if (!prompt) { BIO_printf(bio_err, "Out of memory\n"); @@ -317,12 +321,12 @@ (void)UI_add_user_data(ui, cb_data); ok = UI_add_input_string(ui, prompt, ui_flags, buf, - PW_MIN_LENGTH, bufsiz - 1); + pw_min_len, bufsiz - 1); if (ok >= 0 && verify) { buff = app_malloc(bufsiz, "password buffer"); ok = UI_add_verify_string(ui, prompt, ui_flags, buff, - PW_MIN_LENGTH, bufsiz - 1, buf); + pw_min_len, bufsiz - 1, buf); } if (ok >= 0) do { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/ca.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/ca.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/ca.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/ca.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -1862,8 +1862,8 @@ row[DB_exp_date][tm->length] = '\0'; row[DB_rev_date] = NULL; row[DB_file] = OPENSSL_strdup("unknown"); - if ((row[DB_type] == NULL) || (row[DB_exp_date] == NULL) || - (row[DB_file] == NULL) || (row[DB_name] == NULL)) { + if ((row[DB_type] == NULL) || (row[DB_file] == NULL) + || (row[DB_name] == NULL)) { BIO_printf(bio_err, "Memory allocation failure\n"); goto end; } @@ -2223,62 +2223,51 @@ static int do_updatedb(CA_DB *db) { - ASN1_UTCTIME *a_tm = NULL; + ASN1_TIME *a_tm = NULL; int i, cnt = 0; - int db_y2k, a_y2k; /* flags = 1 if y >= 2000 */ - char **rrow, *a_tm_s; + char **rrow; - a_tm = ASN1_UTCTIME_new(); + a_tm = ASN1_TIME_new(); if (a_tm == NULL) return -1; - /* get actual time and make a string */ + /* get actual time */ if (X509_gmtime_adj(a_tm, 0) == NULL) { - ASN1_UTCTIME_free(a_tm); + ASN1_TIME_free(a_tm); return -1; } - a_tm_s = app_malloc(a_tm->length + 1, "time string"); - - memcpy(a_tm_s, a_tm->data, a_tm->length); - a_tm_s[a_tm->length] = '\0'; - - if (strncmp(a_tm_s, "49", 2) <= 0) - a_y2k = 1; - else - a_y2k = 0; for (i = 0; i < sk_OPENSSL_PSTRING_num(db->db->data); i++) { rrow = sk_OPENSSL_PSTRING_value(db->db->data, i); if (rrow[DB_type][0] == DB_TYPE_VAL) { /* ignore entries that are not valid */ - if (strncmp(rrow[DB_exp_date], "49", 2) <= 0) - db_y2k = 1; - else - db_y2k = 0; - - if (db_y2k == a_y2k) { - /* all on the same y2k side */ - if (strcmp(rrow[DB_exp_date], a_tm_s) <= 0) { - rrow[DB_type][0] = DB_TYPE_EXP; - rrow[DB_type][1] = '\0'; - cnt++; + ASN1_TIME *exp_date = NULL; - BIO_printf(bio_err, "%s=Expired\n", rrow[DB_serial]); - } - } else if (db_y2k < a_y2k) { + exp_date = ASN1_TIME_new(); + if (exp_date == NULL) { + ASN1_TIME_free(a_tm); + return -1; + } + + if (!ASN1_TIME_set_string(exp_date, rrow[DB_exp_date])) { + ASN1_TIME_free(a_tm); + ASN1_TIME_free(exp_date); + return -1; + } + + if (ASN1_TIME_compare(exp_date, a_tm) <= 0) { rrow[DB_type][0] = DB_TYPE_EXP; rrow[DB_type][1] = '\0'; cnt++; BIO_printf(bio_err, "%s=Expired\n", rrow[DB_serial]); } - + ASN1_TIME_free(exp_date); } } - ASN1_UTCTIME_free(a_tm); - OPENSSL_free(a_tm_s); + ASN1_TIME_free(a_tm); return cnt; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/ciphers.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/ciphers.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/ciphers.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/ciphers.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -172,6 +172,7 @@ if (convert != NULL) { BIO_printf(bio_out, "OpenSSL cipher name: %s\n", OPENSSL_cipher_name(convert)); + ret = 0; goto end; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/cms.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/cms.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/cms.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/cms.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -545,9 +545,11 @@ if (key_param == NULL || key_param->idx != keyidx) { cms_key_param *nparam; nparam = app_malloc(sizeof(*nparam), "key param buffer"); - nparam->idx = keyidx; - if ((nparam->param = sk_OPENSSL_STRING_new_null()) == NULL) + if ((nparam->param = sk_OPENSSL_STRING_new_null()) == NULL) { + OPENSSL_free(nparam); goto end; + } + nparam->idx = keyidx; nparam->next = NULL; if (key_first == NULL) key_first = nparam; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/crl2p7.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/crl2p7.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/crl2p7.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/crl2p7.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,19 +120,20 @@ if (!ASN1_INTEGER_set(p7s->version, 1)) goto end; - if ((crl_stack = sk_X509_CRL_new_null()) == NULL) - goto end; - p7s->crl = crl_stack; + if (crl != NULL) { + if ((crl_stack = sk_X509_CRL_new_null()) == NULL) + goto end; + p7s->crl = crl_stack; sk_X509_CRL_push(crl_stack, crl); crl = NULL; /* now part of p7 for OPENSSL_freeing */ } - if ((cert_stack = sk_X509_new_null()) == NULL) - goto end; - p7s->cert = cert_stack; + if (certflst != NULL) { + if ((cert_stack = sk_X509_new_null()) == NULL) + goto end; + p7s->cert = cert_stack; - if (certflst != NULL) for (i = 0; i < sk_OPENSSL_STRING_num(certflst); i++) { certfile = sk_OPENSSL_STRING_value(certflst, i); if (add_certs_from_file(cert_stack, certfile) < 0) { @@ -141,6 +142,7 @@ goto end; } } + } out = bio_open_default(outfile, 'w', outformat); if (out == NULL) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/dgst.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/dgst.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/dgst.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/dgst.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -316,7 +316,7 @@ EVP_MD_CTX *mctx = NULL; EVP_PKEY_CTX *pctx = NULL; int r; - if (!BIO_get_md_ctx(bmd, &mctx)) { + if (BIO_get_md_ctx(bmd, &mctx) <= 0) { BIO_printf(bio_err, "Error getting context\n"); ERR_print_errors(bio_err); goto end; @@ -345,7 +345,7 @@ /* we use md as a filter, reading from 'in' */ else { EVP_MD_CTX *mctx = NULL; - if (!BIO_get_md_ctx(bmd, &mctx)) { + if (BIO_get_md_ctx(bmd, &mctx) <= 0) { BIO_printf(bio_err, "Error getting context\n"); ERR_print_errors(bio_err); goto end; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/enc.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/enc.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/enc.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/enc.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -81,7 +81,7 @@ {"", OPT_CIPHER, '-', "Any supported cipher"}, OPT_R_OPTIONS, #ifdef ZLIB - {"z", OPT_Z, '-', "Use zlib as the 'encryption'"}, + {"z", OPT_Z, '-', "Compress or decompress encrypted data using zlib"}, #endif #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/genpkey.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/genpkey.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/genpkey.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/genpkey.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -177,9 +177,12 @@ goto end; } + ret = 0; + if (rv <= 0) { BIO_puts(bio_err, "Error writing key\n"); ERR_print_errors(bio_err); + ret = 1; } if (text) { @@ -191,11 +194,10 @@ if (rv <= 0) { BIO_puts(bio_err, "Error printing key\n"); ERR_print_errors(bio_err); + ret = 1; } } - ret = 0; - end: EVP_PKEY_free(pkey); EVP_PKEY_CTX_free(ctx); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/openssl.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/openssl.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/openssl.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/openssl.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -120,7 +120,6 @@ { FUNCTION f, *fp; LHASH_OF(FUNCTION) *prog = NULL; - char **copied_argv = NULL; char *p, *pname; char buf[1024]; const char *prompt; @@ -137,7 +136,7 @@ bio_err = dup_bio_err(FORMAT_TEXT); #if defined(OPENSSL_SYS_VMS) && defined(__DECC) - copied_argv = argv = copy_argv(&argc, argv); + argv = copy_argv(&argc, argv); #elif defined(_WIN32) /* * Replace argv[] with UTF-8 encoded strings. @@ -258,7 +257,6 @@ } ret = 1; end: - OPENSSL_free(copied_argv); OPENSSL_free(default_config_file); lh_FUNCTION_free(prog); OPENSSL_free(arg.argv); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/passwd.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/passwd.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/passwd.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/passwd.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -407,7 +407,7 @@ n >>= 1; } if (!EVP_DigestFinal_ex(md, buf, NULL)) - return NULL; + goto err; for (i = 0; i < 1000; i++) { if (!EVP_DigestInit_ex(md2, EVP_md5(), NULL)) @@ -633,7 +633,7 @@ n >>= 1; } if (!EVP_DigestFinal_ex(md, buf, NULL)) - return NULL; + goto err; /* P sequence */ if (!EVP_DigestInit_ex(md2, sha, NULL)) @@ -644,7 +644,7 @@ goto err; if (!EVP_DigestFinal_ex(md2, temp_buf, NULL)) - return NULL; + goto err; if ((p_bytes = OPENSSL_zalloc(passwd_len)) == NULL) goto err; @@ -661,7 +661,7 @@ goto err; if (!EVP_DigestFinal_ex(md2, temp_buf, NULL)) - return NULL; + goto err; if ((s_bytes = OPENSSL_zalloc(salt_len)) == NULL) goto err; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/rsa8192.pem nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/rsa8192.pem --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/rsa8192.pem 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/rsa8192.pem 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,4 @@ -----BEGIN RSA PRIVATE KEY----- - MIISKAIBAAKCBAEAiQ2f1X6Bte1DKD0OoCBKEikzPW+5w3oXk3WwnE97Wxzy6wJZ ebbZC3CZKKBnJeBMrysPf+lK+9+fP6Vm8bp1wvbcSIA59BDrX6irFSuM/bdnkbuF MFlDjt+uVrxwoyqfPi2IPot1HQg3l5mdyBqcTWvbOnU2L9HZxJfPUCjfzdTMPrMY @@ -62,7 +61,7 @@ yO7iBUNJzv6Qh22malLp4P8gzACkD7DGlSTnoB5cLwcjmDGg+i9WrUBbOiVTeQfZ kOj1o+Tz35ndpq/DDUVlqliB9krcxva+QHeJPH53EGI+YVg1nD+s/vUDZ3mQMGX9 DQou2L8uU6RnWNv/BihGcL8QvS4Ty6QyPOUPpD3zc70JQAEcQk9BxQNaELgJX0IN -22cYn22tYvElew9G41OpDqzBRcfbdJmKXQ2HcroShutYJQRGUpAXHk24fy6JVkIU +2cYUn22tYvElew9G41OpDqzBRcfbdJmKXQ2HcroShutYJQRGUpAXHk24fy6JVkIU ojF5U6cwextMja1ZIIZgh9eugIRUeIE7319nQNDzuXWjRCcoBLA25P7wnpHWDRpz D9ovXCIvdja74lL5psqobV6L5+fbLPkSgXoImKR0LQKCAgAIC9Jk8kxumCyIVGCP PeM5Uby9M3GMuKrfYsn0Y5e97+kSJF1dpojTodBgR2KQar6eVrvXt+8uZCcIjfx8 @@ -98,4 +97,3 @@ rMlMLtKfp2w8HlMZpsUlToNCx6CI+tJrohzcs3BAVAbjFAXRKWGijB1rxwyDdHPv I+/wJTNaRNPQ1M0SwtEL/zJd21y3KSPn4eL+GP3efhlDSjtlDvZqkdAUsU8= -----END RSA PRIVATE KEY----- - diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_cb.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_cb.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_cb.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_cb.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -819,7 +819,9 @@ { unsigned int temp; int res = generate_cookie_callback(ssl, cookie, &temp); - *cookie_len = temp; + + if (res != 0) + *cookie_len = temp; return res; } @@ -934,7 +936,8 @@ if (!SSL_build_cert_chain(ssl, 0)) return 0; } else if (exc->chain != NULL) { - SSL_set1_chain(ssl, exc->chain); + if (!SSL_set1_chain(ssl, exc->chain)) + return 0; } } exc = exc->prev; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_client.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_client.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_client.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_client.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2005 Nokia. All rights reserved. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -938,6 +938,7 @@ struct timeval tv; #endif const char *servername = NULL; + char *sname_alloc = NULL; int noservername = 0; const char *alpn_in = NULL; tlsextctx tlsextcbp = { NULL, 0 }; @@ -1283,22 +1284,42 @@ case OPT_SSL3: min_version = SSL3_VERSION; max_version = SSL3_VERSION; + socket_type = SOCK_STREAM; +#ifndef OPENSSL_NO_DTLS + isdtls = 0; +#endif break; case OPT_TLS1_3: min_version = TLS1_3_VERSION; max_version = TLS1_3_VERSION; + socket_type = SOCK_STREAM; +#ifndef OPENSSL_NO_DTLS + isdtls = 0; +#endif break; case OPT_TLS1_2: min_version = TLS1_2_VERSION; max_version = TLS1_2_VERSION; + socket_type = SOCK_STREAM; +#ifndef OPENSSL_NO_DTLS + isdtls = 0; +#endif break; case OPT_TLS1_1: min_version = TLS1_1_VERSION; max_version = TLS1_1_VERSION; + socket_type = SOCK_STREAM; +#ifndef OPENSSL_NO_DTLS + isdtls = 0; +#endif break; case OPT_TLS1: min_version = TLS1_VERSION; max_version = TLS1_VERSION; + socket_type = SOCK_STREAM; +#ifndef OPENSSL_NO_DTLS + isdtls = 0; +#endif break; case OPT_DTLS: #ifndef OPENSSL_NO_DTLS @@ -1568,6 +1589,15 @@ "%s: -proxy argument malformed or ambiguous\n", prog); goto end; } + if (servername == NULL && !noservername) { + res = BIO_parse_hostserv(connectstr, &sname_alloc, NULL, BIO_PARSE_PRIO_HOST); + if (!res) { + BIO_printf(bio_err, + "%s: -connect argument malformed or ambiguous\n", prog); + goto end; + } + servername = sname_alloc; + } } else { int res = 1; char *tmp_host = host, *tmp_port = port; @@ -1993,7 +2023,7 @@ if (!noservername && (servername != NULL || dane_tlsa_domain == NULL)) { if (servername == NULL) { - if(host == NULL || is_dNS_name(host)) + if(host == NULL || is_dNS_name(host)) servername = (host == NULL) ? "localhost" : host; } if (servername != NULL && !SSL_set_tlsext_host_name(con, servername)) { @@ -3129,8 +3159,11 @@ #ifndef OPENSSL_NO_SRP OPENSSL_free(srp_arg.srppassin); #endif + OPENSSL_free(sname_alloc); OPENSSL_free(connectstr); OPENSSL_free(bindstr); + OPENSSL_free(bindhost); + OPENSSL_free(bindport); OPENSSL_free(host); OPENSSL_free(port); X509_VERIFY_PARAM_free(vpm); @@ -3477,7 +3510,7 @@ } /* - * Host dNS Name verifier: used for checking that the hostname is in dNS format + * Host dNS Name verifier: used for checking that the hostname is in dNS format * before setting it as SNI */ static int is_dNS_name(const char *host) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/speed.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/speed.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/speed.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/speed.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -1590,6 +1590,10 @@ case OPT_MULTI: #ifndef NO_FORK multi = atoi(opt_arg()); + if (multi >= INT_MAX / (int)sizeof(int)) { + BIO_printf(bio_err, "%s: multi argument too large\n", prog); + return 0; + } #endif break; case OPT_ASYNCJOBS: @@ -3490,7 +3494,7 @@ close(fd[1]); mr = 1; usertime = 0; - free(fds); + OPENSSL_free(fds); return 0; } printf("Forked child %d\n", n); @@ -3603,7 +3607,7 @@ fclose(f); } - free(fds); + OPENSSL_free(fds); return 1; } #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_server.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_server.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_server.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_server.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -133,6 +133,17 @@ if (s_debug) BIO_printf(bio_s_out, "psk_server_cb\n"); + + if (!SSL_is_dtls(ssl) && SSL_version(ssl) >= TLS1_3_VERSION) { + /* + * This callback is designed for use in (D)TLSv1.2 (or below). It is + * possible to use a single callback for all protocol versions - but it + * is preferred to use a dedicated callback for TLSv1.3. For TLSv1.3 we + * have psk_find_session_cb. + */ + return 0; + } + if (identity == NULL) { BIO_printf(bio_err, "Error: client did not send PSK identity\n"); goto out_err; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_socket.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_socket.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_socket.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_socket.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -147,7 +147,7 @@ #endif if (!BIO_connect(*sock, BIO_ADDRINFO_address(ai), - protocol == IPPROTO_TCP ? BIO_SOCK_NODELAY : 0)) { + BIO_ADDRINFO_protocol(ai) == IPPROTO_TCP ? BIO_SOCK_NODELAY : 0)) { BIO_closesocket(*sock); *sock = INVALID_SOCKET; continue; @@ -214,6 +214,8 @@ const BIO_ADDRINFO *next; int sock_family, sock_type, sock_protocol, sock_port; const BIO_ADDR *sock_address; + int sock_family_fallback = AF_UNSPEC; + const BIO_ADDR *sock_address_fallback = NULL; int sock_options = BIO_SOCK_REUSEADDR; int ret = 0; @@ -244,6 +246,10 @@ && BIO_ADDRINFO_protocol(next) == sock_protocol) { if (sock_family == AF_INET && BIO_ADDRINFO_family(next) == AF_INET6) { + /* In case AF_INET6 is returned but not supported by the + * kernel, retry with the first detected address family */ + sock_family_fallback = sock_family; + sock_address_fallback = sock_address; sock_family = AF_INET6; sock_address = BIO_ADDRINFO_address(next); } else if (sock_family == AF_INET6 @@ -253,6 +259,10 @@ } asock = BIO_socket(sock_family, sock_type, sock_protocol, 0); + if (asock == INVALID_SOCKET && sock_family_fallback != AF_UNSPEC) { + asock = BIO_socket(sock_family_fallback, sock_type, sock_protocol, 0); + sock_address = sock_address_fallback; + } if (asock == INVALID_SOCKET || !BIO_listen(asock, sock_address, sock_options)) { BIO_ADDRINFO_free(res); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_time.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_time.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/s_time.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/s_time.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -263,7 +263,8 @@ nConn, totalTime, ((double)nConn / totalTime), bytes_read); printf ("%d connections in %ld real seconds, %ld bytes read per connection\n", - nConn, (long)time(NULL) - finishtime + maxtime, bytes_read / nConn); + nConn, (long)time(NULL) - finishtime + maxtime, + nConn > 0 ? bytes_read / nConn : 0l); /* * Now loop and time connections using the same session id over and over diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/vms_decc_argv.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/vms_decc_argv.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/vms_decc_argv.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/vms_decc_argv.c 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,66 @@ +/* + * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#include +#include +#include "apps.h" /* for app_malloc() and copy_argv() */ + +char **newargv = NULL; + +static void cleanup_argv(void) +{ + OPENSSL_free(newargv); + newargv = NULL; +} + +char **copy_argv(int *argc, char *argv[]) +{ + /*- + * The note below is for historical purpose. On VMS now we always + * copy argv "safely." + * + * 2011-03-22 SMS. + * If we have 32-bit pointers everywhere, then we're safe, and + * we bypass this mess, as on non-VMS systems. + * Problem 1: Compaq/HP C before V7.3 always used 32-bit + * pointers for argv[]. + * Fix 1: For a 32-bit argv[], when we're using 64-bit pointers + * everywhere else, we always allocate and use a 64-bit + * duplicate of argv[]. + * Problem 2: Compaq/HP C V7.3 (Alpha, IA64) before ECO1 failed + * to NULL-terminate a 64-bit argv[]. (As this was written, the + * compiler ECO was available only on IA64.) + * Fix 2: Unless advised not to (VMS_TRUST_ARGV), we test a + * 64-bit argv[argc] for NULL, and, if necessary, use a + * (properly) NULL-terminated (64-bit) duplicate of argv[]. + * The same code is used in either case to duplicate argv[]. + * Some of these decisions could be handled in preprocessing, + * but the code tends to get even uglier, and the penalty for + * deciding at compile- or run-time is tiny. + */ + + int i, count = *argc; + char **p = newargv; + + cleanup_argv(); + + newargv = app_malloc(sizeof(*newargv) * (count + 1), "argv copy"); + if (newargv == NULL) + return NULL; + + /* Register automatic cleanup on first use */ + if (p == NULL) + OPENSSL_atexit(cleanup_argv); + + for (i = 0; i < count; i++) + newargv[i] = argv[i]; + newargv[i] = NULL; + *argc = i; + return newargv; +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/vms_decc_init.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/vms_decc_init.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/vms_decc_init.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/vms_decc_init.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -25,8 +25,6 @@ # include # include -# include "apps.h" - /* Global storage. */ /* Flag to sense if decc_init() was called. */ @@ -63,42 +61,6 @@ }; -char **copy_argv(int *argc, char *argv[]) -{ - /*- - * The note below is for historical purpose. On VMS now we always - * copy argv "safely." - * - * 2011-03-22 SMS. - * If we have 32-bit pointers everywhere, then we're safe, and - * we bypass this mess, as on non-VMS systems. - * Problem 1: Compaq/HP C before V7.3 always used 32-bit - * pointers for argv[]. - * Fix 1: For a 32-bit argv[], when we're using 64-bit pointers - * everywhere else, we always allocate and use a 64-bit - * duplicate of argv[]. - * Problem 2: Compaq/HP C V7.3 (Alpha, IA64) before ECO1 failed - * to NULL-terminate a 64-bit argv[]. (As this was written, the - * compiler ECO was available only on IA64.) - * Fix 2: Unless advised not to (VMS_TRUST_ARGV), we test a - * 64-bit argv[argc] for NULL, and, if necessary, use a - * (properly) NULL-terminated (64-bit) duplicate of argv[]. - * The same code is used in either case to duplicate argv[]. - * Some of these decisions could be handled in preprocessing, - * but the code tends to get even uglier, and the penalty for - * deciding at compile- or run-time is tiny. - */ - - int i, count = *argc; - char **newargv = app_malloc(sizeof(*newargv) * (count + 1), "argv copy"); - - for (i = 0; i < count; i++) - newargv[i] = argv[i]; - newargv[i] = NULL; - *argc = i; - return newargv; -} - /* LIB$INITIALIZE initialization function. */ static void decc_init(void) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/x509.c nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/x509.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/apps/x509.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/apps/x509.c 2022-04-05 07:17:00.000000000 +0000 @@ -140,9 +140,9 @@ {"", OPT_MD, '-', "Any supported digest"}, #ifndef OPENSSL_NO_MD5 {"subject_hash_old", OPT_SUBJECT_HASH_OLD, '-', - "Print old-style (MD5) issuer hash value"}, - {"issuer_hash_old", OPT_ISSUER_HASH_OLD, '-', "Print old-style (MD5) subject hash value"}, + {"issuer_hash_old", OPT_ISSUER_HASH_OLD, '-', + "Print old-style (MD5) issuer hash value"}, #endif #ifndef OPENSSL_NO_ENGINE {"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"}, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/appveyor.yml nodejs-mozilla-12.22.12/deps/openssl/openssl/appveyor.yml --- nodejs-mozilla-12.18.1/deps/openssl/openssl/appveyor.yml 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/appveyor.yml 2022-04-05 07:17:00.000000000 +0000 @@ -46,7 +46,8 @@ - cd .. - ps: >- if (-not $env:APPVEYOR_PULL_REQUEST_NUMBER` - -or (&git log -2 | Select-String "\[extended tests\]") ) { + -or (&git log -1 $env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT | + Select-String "\[extended tests\]") ) { $env:EXTENDED_TESTS="yes" } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/AUTHORS nodejs-mozilla-12.22.12/deps/openssl/openssl/AUTHORS --- nodejs-mozilla-12.18.1/deps/openssl/openssl/AUTHORS 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/AUTHORS 2022-04-05 07:17:00.000000000 +0000 @@ -13,6 +13,8 @@ Bernd Edlinger Bodo Möller David Benjamin +David von Oheimb +Dmitry Belyavskiy (Дмитрий Белявский) Emilia Käsper Eric Young Geoff Thorpe @@ -22,14 +24,19 @@ Mark J. Cox Matt Caswell Matthias St. Pierre +Nicola Tuveri Nils Larsch +Patrick Steuer Paul Dale Paul C. Sutton +Paul Yang Ralf S. Engelschall Rich Salz Richard Levitte +Shane Lontis Stephen Henson Steve Marquess Tim Hudson +Tomáš Mráz Ulf Möller Viktor Dukhovni diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/CHANGES nodejs-mozilla-12.22.12/deps/openssl/openssl/CHANGES --- nodejs-mozilla-12.18.1/deps/openssl/openssl/CHANGES 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/CHANGES 2022-04-05 07:17:00.000000000 +0000 @@ -7,6 +7,272 @@ https://github.com/openssl/openssl/commits/ and pick the appropriate release branch. + Changes between 1.1.1m and 1.1.1n [15 Mar 2022] + + *) Fixed a bug in the BN_mod_sqrt() function that can cause it to loop forever + for non-prime moduli. + + Internally this function is used when parsing certificates that contain + elliptic curve public keys in compressed form or explicit elliptic curve + parameters with a base point encoded in compressed form. + + It is possible to trigger the infinite loop by crafting a certificate that + has invalid explicit curve parameters. + + Since certificate parsing happens prior to verification of the certificate + signature, any process that parses an externally supplied certificate may + thus be subject to a denial of service attack. The infinite loop can also + be reached when parsing crafted private keys as they can contain explicit + elliptic curve parameters. + + Thus vulnerable situations include: + + - TLS clients consuming server certificates + - TLS servers consuming client certificates + - Hosting providers taking certificates or private keys from customers + - Certificate authorities parsing certification requests from subscribers + - Anything else which parses ASN.1 elliptic curve parameters + + Also any other applications that use the BN_mod_sqrt() where the attacker + can control the parameter values are vulnerable to this DoS issue. + (CVE-2022-0778) + [Tomáš Mráz] + + *) Add ciphersuites based on DHE_PSK (RFC 4279) and ECDHE_PSK (RFC 5489) + to the list of ciphersuites providing Perfect Forward Secrecy as + required by SECLEVEL >= 3. + + [Dmitry Belyavskiy, Nicola Tuveri] + + Changes between 1.1.1l and 1.1.1m [14 Dec 2021] + + *) Avoid loading of a dynamic engine twice. + + [Bernd Edlinger] + + *) Fixed building on Debian with kfreebsd kernels + + [Mattias Ellert] + + *) Prioritise DANE TLSA issuer certs over peer certs + + [Viktor Dukhovni] + + *) Fixed random API for MacOS prior to 10.12 + + These MacOS versions don't support the CommonCrypto APIs + + [Lenny Primak] + + Changes between 1.1.1k and 1.1.1l [24 Aug 2021] + + *) Fixed an SM2 Decryption Buffer Overflow. + + In order to decrypt SM2 encrypted data an application is expected to call the + API function EVP_PKEY_decrypt(). Typically an application will call this + function twice. The first time, on entry, the "out" parameter can be NULL and, + on exit, the "outlen" parameter is populated with the buffer size required to + hold the decrypted plaintext. The application can then allocate a sufficiently + sized buffer and call EVP_PKEY_decrypt() again, but this time passing a non-NULL + value for the "out" parameter. + + A bug in the implementation of the SM2 decryption code means that the + calculation of the buffer size required to hold the plaintext returned by the + first call to EVP_PKEY_decrypt() can be smaller than the actual size required by + the second call. This can lead to a buffer overflow when EVP_PKEY_decrypt() is + called by the application a second time with a buffer that is too small. + + A malicious attacker who is able present SM2 content for decryption to an + application could cause attacker chosen data to overflow the buffer by up to a + maximum of 62 bytes altering the contents of other data held after the + buffer, possibly changing application behaviour or causing the application to + crash. The location of the buffer is application dependent but is typically + heap allocated. + (CVE-2021-3711) + [Matt Caswell] + + *) Fixed various read buffer overruns processing ASN.1 strings + + ASN.1 strings are represented internally within OpenSSL as an ASN1_STRING + structure which contains a buffer holding the string data and a field holding + the buffer length. This contrasts with normal C strings which are repesented as + a buffer for the string data which is terminated with a NUL (0) byte. + + Although not a strict requirement, ASN.1 strings that are parsed using OpenSSL's + own "d2i" functions (and other similar parsing functions) as well as any string + whose value has been set with the ASN1_STRING_set() function will additionally + NUL terminate the byte array in the ASN1_STRING structure. + + However, it is possible for applications to directly construct valid ASN1_STRING + structures which do not NUL terminate the byte array by directly setting the + "data" and "length" fields in the ASN1_STRING array. This can also happen by + using the ASN1_STRING_set0() function. + + Numerous OpenSSL functions that print ASN.1 data have been found to assume that + the ASN1_STRING byte array will be NUL terminated, even though this is not + guaranteed for strings that have been directly constructed. Where an application + requests an ASN.1 structure to be printed, and where that ASN.1 structure + contains ASN1_STRINGs that have been directly constructed by the application + without NUL terminating the "data" field, then a read buffer overrun can occur. + + The same thing can also occur during name constraints processing of certificates + (for example if a certificate has been directly constructed by the application + instead of loading it via the OpenSSL parsing functions, and the certificate + contains non NUL terminated ASN1_STRING structures). It can also occur in the + X509_get1_email(), X509_REQ_get1_email() and X509_get1_ocsp() functions. + + If a malicious actor can cause an application to directly construct an + ASN1_STRING and then process it through one of the affected OpenSSL functions + then this issue could be hit. This might result in a crash (causing a Denial of + Service attack). It could also result in the disclosure of private memory + contents (such as private keys, or sensitive plaintext). + (CVE-2021-3712) + [Matt Caswell] + + Changes between 1.1.1j and 1.1.1k [25 Mar 2021] + + *) Fixed a problem with verifying a certificate chain when using the + X509_V_FLAG_X509_STRICT flag. This flag enables additional security checks + of the certificates present in a certificate chain. It is not set by + default. + + Starting from OpenSSL version 1.1.1h a check to disallow certificates in + the chain that have explicitly encoded elliptic curve parameters was added + as an additional strict check. + + An error in the implementation of this check meant that the result of a + previous check to confirm that certificates in the chain are valid CA + certificates was overwritten. This effectively bypasses the check + that non-CA certificates must not be able to issue other certificates. + + If a "purpose" has been configured then there is a subsequent opportunity + for checks that the certificate is a valid CA. All of the named "purpose" + values implemented in libcrypto perform this check. Therefore, where + a purpose is set the certificate chain will still be rejected even when the + strict flag has been used. A purpose is set by default in libssl client and + server certificate verification routines, but it can be overridden or + removed by an application. + + In order to be affected, an application must explicitly set the + X509_V_FLAG_X509_STRICT verification flag and either not set a purpose + for the certificate verification or, in the case of TLS client or server + applications, override the default purpose. + (CVE-2021-3450) + [Tomáš Mráz] + + *) Fixed an issue where an OpenSSL TLS server may crash if sent a maliciously + crafted renegotiation ClientHello message from a client. If a TLSv1.2 + renegotiation ClientHello omits the signature_algorithms extension (where + it was present in the initial ClientHello), but includes a + signature_algorithms_cert extension then a NULL pointer dereference will + result, leading to a crash and a denial of service attack. + + A server is only vulnerable if it has TLSv1.2 and renegotiation enabled + (which is the default configuration). OpenSSL TLS clients are not impacted + by this issue. + (CVE-2021-3449) + [Peter Kästle and Samuel Sapalski] + + Changes between 1.1.1i and 1.1.1j [16 Feb 2021] + + *) Fixed the X509_issuer_and_serial_hash() function. It attempts to + create a unique hash value based on the issuer and serial number data + contained within an X509 certificate. However it was failing to correctly + handle any errors that may occur while parsing the issuer field (which might + occur if the issuer field is maliciously constructed). This may subsequently + result in a NULL pointer deref and a crash leading to a potential denial of + service attack. + (CVE-2021-23841) + [Matt Caswell] + + *) Fixed the RSA_padding_check_SSLv23() function and the RSA_SSLV23_PADDING + padding mode to correctly check for rollback attacks. This is considered a + bug in OpenSSL 1.1.1 because it does not support SSLv2. In 1.0.2 this is + CVE-2021-23839. + [Matt Caswell] + + *) Fixed the EVP_CipherUpdate, EVP_EncryptUpdate and EVP_DecryptUpdate + functions. Previously they could overflow the output length argument in some + cases where the input length is close to the maximum permissable length for + an integer on the platform. In such cases the return value from the function + call would be 1 (indicating success), but the output length value would be + negative. This could cause applications to behave incorrectly or crash. + (CVE-2021-23840) + [Matt Caswell] + + *) Fixed SRP_Calc_client_key so that it runs in constant time. The previous + implementation called BN_mod_exp without setting BN_FLG_CONSTTIME. This + could be exploited in a side channel attack to recover the password. Since + the attack is local host only this is outside of the current OpenSSL + threat model and therefore no CVE is assigned. + + Thanks to Mohammed Sabt and Daniel De Almeida Braga for reporting this + issue. + [Matt Caswell] + + Changes between 1.1.1h and 1.1.1i [8 Dec 2020] + + *) Fixed NULL pointer deref in the GENERAL_NAME_cmp function + This function could crash if both GENERAL_NAMEs contain an EDIPARTYNAME. + If an attacker can control both items being compared then this could lead + to a possible denial of service attack. OpenSSL itself uses the + GENERAL_NAME_cmp function for two purposes: + 1) Comparing CRL distribution point names between an available CRL and a + CRL distribution point embedded in an X509 certificate + 2) When verifying that a timestamp response token signer matches the + timestamp authority name (exposed via the API functions + TS_RESP_verify_response and TS_RESP_verify_token) + (CVE-2020-1971) + [Matt Caswell] + + *) Add support for Apple Silicon M1 Macs with the darwin64-arm64-cc target. + [Stuart Carnie] + + *) The security callback, which can be customised by application code, supports + the security operation SSL_SECOP_TMP_DH. This is defined to take an EVP_PKEY + in the "other" parameter. In most places this is what is passed. All these + places occur server side. However there was one client side call of this + security operation and it passed a DH object instead. This is incorrect + according to the definition of SSL_SECOP_TMP_DH, and is inconsistent with all + of the other locations. Therefore this client side call has been changed to + pass an EVP_PKEY instead. + [Matt Caswell] + + *) In 1.1.1h, an expired trusted (root) certificate was not anymore rejected + when validating a certificate path. This check is restored in 1.1.1i. + [David von Oheimb] + + Changes between 1.1.1g and 1.1.1h [22 Sep 2020] + + *) Certificates with explicit curve parameters are now disallowed in + verification chains if the X509_V_FLAG_X509_STRICT flag is used. + [Tomas Mraz] + + *) The 'MinProtocol' and 'MaxProtocol' configuration commands now silently + ignore TLS protocol version bounds when configuring DTLS-based contexts, and + conversely, silently ignore DTLS protocol version bounds when configuring + TLS-based contexts. The commands can be repeated to set bounds of both + types. The same applies with the corresponding "min_protocol" and + "max_protocol" command-line switches, in case some application uses both TLS + and DTLS. + + SSL_CTX instances that are created for a fixed protocol version (e.g. + TLSv1_server_method()) also silently ignore version bounds. Previously + attempts to apply bounds to these protocol versions would result in an + error. Now only the "version-flexible" SSL_CTX instances are subject to + limits in configuration files in command-line options. + [Viktor Dukhovni] + + *) Handshake now fails if Extended Master Secret extension is dropped + on renegotiation. + [Tomas Mraz] + + *) Accidentally, an expired trusted (root) certificate is not anymore rejected + when validating a certificate path. + [David von Oheimb] + + *) The Oracle Developer Studio compiler will start reporting deprecated APIs + Changes between 1.1.1f and 1.1.1g [21 Apr 2020] *) Fixed segmentation fault in SSL_check_chain() diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/config nodejs-mozilla-12.22.12/deps/openssl/openssl/config --- nodejs-mozilla-12.18.1/deps/openssl/openssl/config 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/config 2022-04-05 07:17:00.000000000 +0000 @@ -253,11 +253,8 @@ Power*) echo "ppc-apple-darwin${VERSION}" ;; - x86_64) - echo "x86_64-apple-darwin${VERSION}" - ;; *) - echo "i686-apple-darwin${VERSION}" + echo "${MACHINE}-apple-darwin${VERSION}" ;; esac exit 0 @@ -497,6 +494,9 @@ else OUT="darwin64-x86_64-cc" fi ;; + $MACHINE-apple-darwin*) + OUT="darwin64-$MACHINE-cc" + ;; armv6+7-*-iphoneos) __CNF_CFLAGS="$__CNF_CFLAGS -arch armv6 -arch armv7" __CNF_CXXFLAGS="$__CNF_CXXFLAGS -arch armv6 -arch armv7" @@ -704,6 +704,7 @@ __CNF_CPPFLAGS="$__CNF_CPPFLAGS -DL_ENDIAN" ;; powerpc64-*-*bsd*) OUT="BSD-generic64"; __CNF_CPPFLAGS="$__CNF_CPPFLAGS -DB_ENDIAN" ;; + riscv64-*-*bsd*) OUT="BSD-riscv64" ;; sparc64-*-*bsd*) OUT="BSD-sparc64" ;; ia64-*-*bsd*) OUT="BSD-ia64" ;; x86_64-*-dragonfly*) OUT="BSD-x86_64" ;; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/10-main.conf nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/10-main.conf --- nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/10-main.conf 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/10-main.conf 2022-04-05 07:17:00.000000000 +0000 @@ -663,6 +663,7 @@ "linux-ppc" => { inherit_from => [ "linux-generic32", asm("ppc32_asm") ], perlasm_scheme => "linux32", + lib_cppflags => add("-DB_ENDIAN"), }, "linux-ppc64" => { inherit_from => [ "linux-generic64", asm("ppc64_asm") ], @@ -741,7 +742,7 @@ inherit_from => [ "linux-generic32", asm("mips64_asm") ], cflags => add("-mabi=n32"), cxxflags => add("-mabi=n32"), - bn_ops => "SIXTY_FOUR_BIT RC4_CHAR", + bn_ops => "RC4_CHAR", perlasm_scheme => "n32", multilib => "32", }, @@ -753,6 +754,13 @@ multilib => "64", }, + # riscv64 below refers to contemporary RISCV Architecture + # specifications, + "linux64-riscv64" => { + inherit_from => [ "linux-generic64"], + perlasm_scheme => "linux64", + }, + #### IA-32 targets... #### These two targets are a bit aged and are to be used on older Linux #### machines where gcc doesn't understand -m32 and -m64 @@ -980,6 +988,13 @@ perlasm_scheme => "elf", }, + # riscv64 below refers to contemporary RISCV Architecture + # specifications, + "BSD-riscv64" => { + inherit_from => [ "BSD-generic64"], + perlasm_scheme => "linux64", + }, + "bsdi-elf-gcc" => { inherit_from => [ "BASE_unix", asm("x86_elf_asm") ], CC => "gcc", @@ -1125,7 +1140,7 @@ CFLAGS => picker(debug => "-O0 -g", release => "-O"), cflags => add(threads("-pthread")), - ex_libs => threads("-pthread"), + ex_libs => add(threads("-pthread")), bn_ops => "BN_LLONG RC4_CHAR", perlasm_scheme => "aix32", shared_ldflag => add_before("-shared -static-libgcc"), @@ -1138,7 +1153,7 @@ CFLAGS => picker(debug => "-O0 -g", release => "-O"), cflags => combine("-maix64", threads("-pthread")), - ex_libs => threads("-pthread"), + ex_libs => add(threads("-pthread")), bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", perlasm_scheme => "aix64", shared_ldflag => add_before("-shared -static-libgcc"), @@ -1154,7 +1169,7 @@ cflags => combine("-q32 -qmaxmem=16384 -qro -qroconst", threads("-qthreaded")), cppflags => threads("-D_THREAD_SAFE"), - ex_libs => threads("-lpthreads"), + ex_libs => add(threads("-lpthreads")), bn_ops => "BN_LLONG RC4_CHAR", perlasm_scheme => "aix32", shared_cflag => "-qpic", @@ -1169,7 +1184,7 @@ cflags => combine("-q64 -qmaxmem=16384 -qro -qroconst", threads("-qthreaded")), cppflags => threads("-D_THREAD_SAFE"), - ex_libs => threads("-lpthreads"), + ex_libs => add(threads("-lpthreads")), bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR", perlasm_scheme => "aix64", dso_scheme => "dlfcn", @@ -1365,9 +1380,9 @@ } push @ex_libs, '$(PORTSDK_LIBPATH)/portlib.lib' if (defined(env('PORTSDK_LIBPATH'))); - push @ex_libs, ' /nodefaultlib coredll.lib corelibc.lib' - if (env('TARGETCPU') eq "X86"); - return @ex_libs; + push @ex_libs, '/nodefaultlib coredll.lib corelibc.lib' + if (env('TARGETCPU') =~ /^X86|^ARMV4[IT]/); + return join(" ", @ex_libs); }), }, @@ -1557,6 +1572,14 @@ bn_ops => "SIXTY_FOUR_BIT_LONG", perlasm_scheme => "macosx", }, + "darwin64-arm64-cc" => { + inherit_from => [ "darwin-common", asm("aarch64_asm") ], + CFLAGS => add("-Wall"), + cflags => add("-arch arm64"), + lib_cppflags => add("-DL_ENDIAN"), + bn_ops => "SIXTY_FOUR_BIT_LONG", + perlasm_scheme => "ios64", + }, ##### GNU Hurd "hurd-x86" => { @@ -1749,7 +1772,7 @@ disable => add('pinshared'), - apps_aux_src => "vms_term_sock.c", + apps_aux_src => "vms_term_sock.c vms_decc_argv.c", apps_init_src => "vms_decc_init.c", }, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/15-android.conf nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/15-android.conf --- nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/15-android.conf 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/15-android.conf 2022-04-05 07:17:00.000000000 +0000 @@ -29,18 +29,18 @@ $ndk = $ENV{$ndk_var}; last if defined $ndk; } - die "\$ANDROID_NDK_HOME is not defined" if (!$ndk); - if (!-d "$ndk/platforms" && !-f "$ndk/AndroidVersion.txt") { - # $ndk/platforms is traditional "all-inclusive" NDK, while - # $ndk/AndroidVersion.txt is so-called standalone toolchain - # tailored for specific target down to API level. + die "\$ANDROID_NDK_HOME is not defined" if (!$ndk); + my $is_standalone_toolchain = -f "$ndk/AndroidVersion.txt"; + my $ndk_src_props = "$ndk/source.properties"; + my $is_ndk = -f $ndk_src_props; + if ($is_ndk == $is_standalone_toolchain) { die "\$ANDROID_NDK_HOME=$ndk is invalid"; } $ndk = canonpath($ndk); my $ndkver = undef; - if (open my $fh, "<$ndk/source.properties") { + if (open my $fh, "<$ndk_src_props") { local $_; while(<$fh>) { if (m|Pkg\.Revision\s*=\s*([0-9]+)|) { @@ -59,7 +59,7 @@ if ($sysroot = $ENV{CROSS_SYSROOT}) { $sysroot =~ m|/android-([0-9]+)/arch-(\w+)/?$|; ($api, $arch) = ($1, $2); - } elsif (-f "$ndk/AndroidVersion.txt") { + } elsif ($is_standalone_toolchain) { $sysroot = "$ndk/sysroot"; } else { $api = "*"; @@ -72,17 +72,31 @@ } } - # list available platforms (numerically) - my @platforms = sort { $a =~ m/-([0-9]+)$/; my $aa = $1; - $b =~ m/-([0-9]+)$/; $aa <=> $1; - } glob("$ndk/platforms/android-$api"); - die "no $ndk/platforms/android-$api" if ($#platforms < 0); - - $sysroot = "@platforms[$#platforms]/arch-$arch"; - $sysroot =~ m|/android-([0-9]+)/arch-$arch|; - $api = $1; + if (-d "$ndk/platforms") { + # list available platforms (numerically) + my @platforms = sort { $a =~ m/-([0-9]+)$/; my $aa = $1; + $b =~ m/-([0-9]+)$/; $aa <=> $1; + } glob("$ndk/platforms/android-$api"); + die "no $ndk/platforms/android-$api" if ($#platforms < 0); + + $sysroot = "@platforms[$#platforms]/arch-$arch"; + $sysroot =~ m|/android-([0-9]+)/arch-$arch|; + $api = $1; + } elsif ($api eq "*") { + # r22 Removed platforms dir, use this JSON file + my $path = "$ndk/meta/platforms.json"; + open my $fh, $path or die "Could not open '$path' $!"; + while (<$fh>) { + if (/"max": (\d+),/) { + $api = $1; + last; + } + } + close $fh; + } + die "Could not get default API Level" if ($api eq "*"); } - die "no sysroot=$sysroot" if (!-d $sysroot); + die "no sysroot=$sysroot" if (length $sysroot && !-d $sysroot); my $triarch = $triplet{$arch}; my $cflags; @@ -95,17 +109,21 @@ my $arm = $ndkver > 16 ? "armv7a" : "armv5te"; (my $tridefault = $triarch) =~ s/^arm-/$arm-/; (my $tritools = $triarch) =~ s/(?:x|i6)86(_64)?-.*/x86$1/; - $cflags .= " -target $tridefault " - . "-gcc-toolchain \$($ndk_var)/toolchains" - . "/$tritools-4.9/prebuilt/$host"; - $user{CC} = "clang" if ($user{CC} !~ m|clang|); + if (length $sysroot) { + $cflags .= " -target $tridefault " + . "-gcc-toolchain \$($ndk_var)/toolchains" + . "/$tritools-4.9/prebuilt/$host"; + $user{CC} = "clang" if ($user{CC} !~ m|clang|); + } else { + $user{CC} = "$tridefault$api-clang"; + } $user{CROSS_COMPILE} = undef; if (which("llvm-ar") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) { $user{AR} = "llvm-ar"; $user{ARFLAGS} = [ "rs" ]; $user{RANLIB} = ":"; } - } elsif (-f "$ndk/AndroidVersion.txt") { #"standalone toolchain" + } elsif ($is_standalone_toolchain) { my $cc = $user{CC} // "clang"; # One can probably argue that both clang and gcc should be # probed, but support for "standalone toolchain" was added @@ -127,19 +145,21 @@ $user{CROSS_COMPILE} = "$triarch-"; } - if (!-d "$sysroot/usr/include") { - my $incroot = "$ndk/sysroot/usr/include"; - die "no $incroot" if (!-d $incroot); - die "no $incroot/$triarch" if (!-d "$incroot/$triarch"); - $incroot =~ s|^$ndk/||; - $cppflags = "-D__ANDROID_API__=$api"; - $cppflags .= " -isystem \$($ndk_var)/$incroot/$triarch"; - $cppflags .= " -isystem \$($ndk_var)/$incroot"; + if (length $sysroot) { + if (!-d "$sysroot/usr/include") { + my $incroot = "$ndk/sysroot/usr/include"; + die "no $incroot" if (!-d $incroot); + die "no $incroot/$triarch" if (!-d "$incroot/$triarch"); + $incroot =~ s|^$ndk/||; + $cppflags = "-D__ANDROID_API__=$api"; + $cppflags .= " -isystem \$($ndk_var)/$incroot/$triarch"; + $cppflags .= " -isystem \$($ndk_var)/$incroot"; + } + $sysroot =~ s|^$ndk/||; + $sysroot = " --sysroot=\$($ndk_var)/$sysroot"; } - - $sysroot =~ s|^$ndk/||; $android_ndk = { - cflags => "$cflags --sysroot=\$($ndk_var)/$sysroot", + cflags => $cflags . $sysroot, cppflags => $cppflags, bn_ops => $arch =~ m/64$/ ? "SIXTY_FOUR_BIT_LONG" : "BN_LLONG", diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/descrip.mms.tmpl nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/descrip.mms.tmpl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/descrip.mms.tmpl 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/descrip.mms.tmpl 2022-04-05 07:17:00.000000000 +0000 @@ -377,8 +377,13 @@ $(NODEBUG) ! $(NODEBUG) ! Installation logical names $(NODEBUG) ! - $(NODEBUG) installtop = F$PARSE(staging_instdir,"$(INSTALLTOP)","[]A.;",,"SYNTAX_ONLY,NO_CONCEAL") - ".][000000" - "[000000." - "][" - "]A.;" + ".]" - $(NODEBUG) datatop = F$PARSE(staging_datadir,"$(OPENSSLDIR)","[]A.;",,"SYNTAX_ONLY,NO_CONCEAL") - ".][000000" - "[000000." - "][" - "]A.;" + ".]" + $(NODEBUG) ! This also creates a few DCL variables that are used for + $(NODEBUG) ! the "install_msg" target. + $(NODEBUG) ! + $(NODEBUG) installroot = F$PARSE(staging_instdir,"$(INSTALLTOP)","[]A.;",,"SYNTAX_ONLY,NO_CONCEAL") - ".][000000" - "[000000." - "][" - "]A.;" + $(NODEBUG) installtop = installroot + ".]" + $(NODEBUG) dataroot = F$PARSE(staging_datadir,"$(OPENSSLDIR)","[]A.;",,"SYNTAX_ONLY,NO_CONCEAL") - ".][000000" - "[000000." - "][" - "]A.;" + $(NODEBUG) datatop = dataroot + ".]" $(NODEBUG) DEFINE ossl_installroot 'installtop' $(NODEBUG) DEFINE ossl_dataroot 'datatop' $(NODEBUG) ! @@ -433,7 +438,8 @@ DEFINE SRCTOP {- sourcedir() -} DEFINE BLDTOP {- builddir() -} DEFINE RESULT_D {- builddir(qw(test test-runs)) -} - DEFINE OPENSSL_ENGINES {- builddir("engines") -} + engines = F$PARSE("{- builddir("engines") -}","A.;",,,"syntax_only") - "A.;" + DEFINE OPENSSL_ENGINES 'engines' DEFINE OPENSSL_DEBUG_MEMORY "on" IF "$(VERBOSE)" .NES. "" THEN DEFINE VERBOSE "$(VERBOSE)" $(PERL) {- sourcefile("test", "run_tests.pl") -} $(TESTS) @@ -455,30 +461,19 @@ @ WRITE SYS$OUTPUT "Tests are not supported with your chosen Configure options" @ ! {- output_on() if !$disabled{tests}; "" -} -install : install_sw install_ssldirs install_docs +install : install_sw install_ssldirs install_docs install_msg + @ ! + +install_msg : @ WRITE SYS$OUTPUT "" @ WRITE SYS$OUTPUT "######################################################################" @ WRITE SYS$OUTPUT "" @ IF "$(DESTDIR)" .EQS. "" THEN - - PIPE ( WRITE SYS$OUTPUT "Installation complete" ; - - WRITE SYS$OUTPUT "" ; - - WRITE SYS$OUTPUT "Run @$(SYSTARTUP)openssl_startup{- $osslver -} to set up logical names" ; - - WRITE SYS$OUTPUT "then run @$(SYSTARTUP)openssl_utils{- $osslver -} to define commands" ; - - WRITE SYS$OUTPUT "" ) + @{- sourcefile("VMS", "msg_install.com") -} "$(SYSTARTUP)" "{- $osslver -}" @ IF "$(DESTDIR)" .NES. "" THEN - - PIPE ( WRITE SYS$OUTPUT "Staging installation complete" ; - - WRITE SYS$OUTPUT "" ; - - WRITE SYS$OUTPUT "Finish or package in such a way that the contents of the directory tree" ; - - WRITE SYS$OUTPUT staging_instdir ; - - WRITE SYS$OUTPUT "ends up in $(INSTALLTOP)," ; - - WRITE SYS$OUTPUT "and that the contents of the contents of the directory tree" ; - - WRITE SYS$OUTPUT staging_datadir ; - - WRITE SYS$OUTPUT "ends up in $(OPENSSLDIR)" ; - - WRITE SYS$OUTPUT "" ; - - WRITE SYS$OUTPUT "When in its final destination," ; - - WRITE SYS$OUTPUT "Run @$(SYSTARTUP)openssl_startup{- $osslver -} to set up logical names" ; - - WRITE SYS$OUTPUT "then run @$(SYSTARTUP)openssl_utils{- $osslver -} to define commands" ; - - WRITE SYS$OUTPUT "" ) + @{- sourcefile("VMS", "msg_staging.com") -} - + "''installroot']" "''dataroot']" "$(INSTALLTOP)" "$(OPENSSLDIR)" - + "$(SYSTARTUP)" "{- $osslver -}" check_install : spawn/nolog @ossl_installroot:[SYSTEST]openssl_ivp{- $osslver -}.com diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/unix-Makefile.tmpl nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/unix-Makefile.tmpl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/unix-Makefile.tmpl 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/unix-Makefile.tmpl 2022-04-05 07:17:00.000000000 +0000 @@ -523,7 +523,6 @@ $(RM) -r test/test-runs $(RM) openssl.pc libcrypto.pc libssl.pc -$(RM) `find . -type l \! -name '.*' -print` - $(RM) $(TARFILE) distclean: clean $(RM) configdata.pm @@ -917,8 +916,8 @@ done ) ordinals: - ( b=`pwd`; cd $(SRCDIR); $(PERL) -I$$b util/mkdef.pl crypto update ) - ( b=`pwd`; cd $(SRCDIR); $(PERL) -I$$b util/mkdef.pl ssl update ) + $(PERL) $(SRCDIR)/util/mkdef.pl crypto update + $(PERL) $(SRCDIR)/util/mkdef.pl ssl update test_ordinals: ( cd test; \ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/windows-makefile.tmpl nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/windows-makefile.tmpl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/Configurations/windows-makefile.tmpl 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/Configurations/windows-makefile.tmpl 2022-04-05 07:17:00.000000000 +0000 @@ -211,8 +211,8 @@ join(' ', $target{cppflags} || (), (map { '-D'.quotify1($_) } @{$target{defines}}, @{$config{defines}}), - (map { '-I'.quotify1($_) } @{$target{includes}}, - @{$config{includes}}), + (map { '-I'.'"'.$_.'"' } @{$target{includes}}, + @{$config{includes}}), @{$config{cppflags}}) -} CNF_CFLAGS={- join(' ', $target{cflags} || (), @{$config{cflags}}) -} @@ -324,15 +324,15 @@ # Convenience target to prebuild all generated files, not just the mandatory # ones build_all_generated: $(GENERATED_MANDATORY) $(GENERATED) - @{- output_off() if $disabled{makedepend}; "" -} + @{- output_off() if $disabled{makedepend}; "\@rem" -} @$(ECHO) "Warning: consider configuring with no-makedepend, because if" @$(ECHO) " target system doesn't have $(PERL)," @$(ECHO) " then make will fail..." - @{- output_on() if $disabled{makedepend}; "" -} + @{- output_on() if $disabled{makedepend}; "\@rem" -} test: tests {- dependmagic('tests'); -}: build_programs_nodep build_engines_nodep - @{- output_off() if $disabled{tests}; "" -} + @{- output_off() if $disabled{tests}; "\@rem" -} -mkdir $(BLDDIR)\test\test-runs set SRCTOP=$(SRCDIR) set BLDTOP=$(BLDDIR) @@ -341,17 +341,17 @@ set OPENSSL_ENGINES=$(MAKEDIR)\engines set OPENSSL_DEBUG_MEMORY=on "$(PERL)" "$(SRCDIR)\test\run_tests.pl" $(TESTS) - @{- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -} + @{- if ($disabled{tests}) { output_on(); } else { output_off(); } "\@rem" -} @$(ECHO) "Tests are not supported with your chosen Configure options" - @{- output_on() if !$disabled{tests}; "" -} + @{- output_on() if !$disabled{tests}; "\@rem" -} list-tests: - @{- output_off() if $disabled{tests}; "" -} + @{- output_off() if $disabled{tests}; "\@rem" -} @set SRCTOP=$(SRCDIR) @"$(PERL)" "$(SRCDIR)\test\run_tests.pl" list - @{- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -} + @{- if ($disabled{tests}) { output_on(); } else { output_off(); } "\@rem" -} @$(ECHO) "Tests are not supported with your chosen Configure options" - @{- output_on() if !$disabled{tests}; "" -} + @{- output_on() if !$disabled{tests}; "\@rem" -} install: install_sw install_ssldirs install_docs @@ -362,7 +362,7 @@ -del /Q /F $(LIBS) libcrypto.* libssl.* ossl_static.pdb clean: libclean - {- join("\n\t", map { "-del /Q /F $_" } @PROGRAMS) -} + {- join("\n\t", map { "-del /Q /F $_" } @PROGRAMS) || "\@rem" -} -del /Q /F $(ENGINES) -del /Q /F $(SCRIPTS) -del /Q /F $(GENERATED_MANDATORY) @@ -378,9 +378,9 @@ -del /Q /F makefile depend: - @ {- output_off() if $disabled{makedepend}; "" -} + @ {- output_off() if $disabled{makedepend}; "\@rem" -} @ "$(PERL)" "$(SRCDIR)\util\add-depends.pl" "VC" - @ {- output_on() if $disabled{makedepend}; "" -} + @ {- output_on() if $disabled{makedepend}; "\@rem" -} # Install helper targets ############################################# @@ -413,10 +413,10 @@ @if "$(INSTALLTOP)"=="" ( $(ECHO) "INSTALLTOP should not be empty" & exit 1 ) @$(ECHO) "*** Installing development files" @"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\include\openssl" - @{- output_off() unless grep { $_ eq "OPENSSL_USE_APPLINK" } (@{$target{defines}}, @{$config{defines}}); "" -} + @{- output_off() unless grep { $_ eq "OPENSSL_USE_APPLINK" } (@{$target{defines}}, @{$config{defines}}); "\@rem" -} @"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\ms\applink.c" \ "$(INSTALLTOP)\include\openssl" - @{- output_on() unless grep { $_ eq "OPENSSL_USE_APPLINK" } (@{$target{defines}}, @{$config{defines}}); "" -} + @{- output_on() unless grep { $_ eq "OPENSSL_USE_APPLINK" } (@{$target{defines}}, @{$config{defines}}); "\@rem" -} @"$(PERL)" "$(SRCDIR)\util\copy.pl" "-exclude_re=/__DECC_" \ "$(SRCDIR)\include\openssl\*.h" \ "$(INSTALLTOP)\include\openssl" diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/Configure nodejs-mozilla-12.22.12/deps/openssl/openssl/Configure --- nodejs-mozilla-12.18.1/deps/openssl/openssl/Configure 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/Configure 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,6 @@ #! /usr/bin/env perl # -*- mode: perl; -*- -# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -217,12 +217,22 @@ # Unified build supports separate build dir my $srcdir = catdir(absolutedir(dirname($0))); # catdir ensures local syntax my $blddir = catdir(absolutedir(".")); # catdir ensures local syntax + +# File::Spec::Unix doesn't detect case insensitivity, so we make sure to +# check if the source and build directory are really the same, and make +# them so. This avoids all kinds of confusion later on. +# We must check @File::Spec::ISA rather than using File::Spec->isa() to +# know if File::Spec ended up loading File::Spec::Unix. +$srcdir = $blddir + if (grep(/::Unix$/, @File::Spec::ISA) + && samedir($srcdir, $blddir)); + my $dofile = abs2rel(catfile($srcdir, "util/dofile.pl")); my $local_config_envname = 'OPENSSL_LOCAL_CONFIG_DIR'; -$config{sourcedir} = abs2rel($srcdir); -$config{builddir} = abs2rel($blddir); +$config{sourcedir} = abs2rel($srcdir, $blddir); +$config{builddir} = abs2rel($blddir, $blddir); # Collect reconfiguration information if needed my @argvcopy=@ARGV; @@ -1049,6 +1059,9 @@ print "Using os-specific seed configuration\n"; push @seed_sources, 'os'; } +if (scalar(grep { $_ eq 'egd' } @seed_sources) > 0) { + delete $disabled{'egd'}; +} if (scalar(grep { $_ eq 'none' } @seed_sources) > 0) { die "Cannot seed with none and anything else" if scalar(@seed_sources) > 1; warn <<_____ if scalar(@seed_sources) == 1; @@ -1188,6 +1201,10 @@ # At this point, we can forget everything about %user and %useradd, # because it's now all been merged into the corresponding $config entry +if (grep { $_ eq '-static' } @{$config{LDFLAGS}}) { + disable('static', 'pic', 'threads'); +} + # Allow overriding the build file name $config{build_file} = env('BUILDFILE') || $target{build_file} || "Makefile"; @@ -1287,16 +1304,19 @@ unless ($disabled{asan}) { push @{$config{cflags}}, "-fsanitize=address"; + push @{$config{cxxflags}}, "-fsanitize=address" if $config{CXX}; } unless ($disabled{ubsan}) { # -DPEDANTIC or -fnosanitize=alignment may also be required on some # platforms. push @{$config{cflags}}, "-fsanitize=undefined", "-fno-sanitize-recover=all"; + push @{$config{cxxflags}}, "-fsanitize=undefined", "-fno-sanitize-recover=all" if $config{CXX}; } unless ($disabled{msan}) { push @{$config{cflags}}, "-fsanitize=memory"; + push @{$config{cxxflags}}, "-fsanitize=memory" if $config{CXX}; } unless ($disabled{"fuzz-libfuzzer"} && $disabled{"fuzz-afl"} @@ -1508,10 +1528,6 @@ } } -if (grep { $_ eq '-static' } @{$config{LDFLAGS}}) { - disable('static', 'pic', 'threads'); -} - $config{CFLAGS} = [ map { $_ eq '--ossl-strict-warnings' ? @strict_warnings_collection : ( $_ ) } @@ -2598,19 +2614,22 @@ } print "\nEnabled features:\n\n"; foreach my $what (@disablables) { - print " $what\n" unless $disabled{$what}; + print " $what\n" + unless grep { $_ =~ /^${what}$/ } keys %disabled; } print "\nDisabled features:\n\n"; foreach my $what (@disablables) { - if ($disabled{$what}) { - print " $what", ' ' x ($longest - length($what) + 1), - "[$disabled{$what}]", ' ' x ($longest2 - length($disabled{$what}) + 1); - print $disabled_info{$what}->{macro} - if $disabled_info{$what}->{macro}; + my @what2 = grep { $_ =~ /^${what}$/ } keys %disabled; + my $what3 = $what2[0]; + if ($what3) { + print " $what3", ' ' x ($longest - length($what3) + 1), + "[$disabled{$what3}]", ' ' x ($longest2 - length($disabled{$what3}) + 1); + print $disabled_info{$what3}->{macro} + if $disabled_info{$what3}->{macro}; print ' (skip ', - join(', ', @{$disabled_info{$what}->{skipped}}), + join(', ', @{$disabled_info{$what3}->{skipped}}), ')' - if $disabled_info{$what}->{skipped}; + if $disabled_info{$what3}->{skipped}; print "\n"; } } @@ -3142,25 +3161,25 @@ } } - foreach (sort keys %all_keys) { - my $previous = $combined_inheritance{$_}; + foreach my $key (sort keys %all_keys) { + my $previous = $combined_inheritance{$key}; # Current target doesn't have a value for the current key? # Assign it the default combiner, the rest of this loop body # will handle it just like any other coderef. - if (!exists $table{$target}->{$_}) { - $table{$target}->{$_} = $default_combiner; + if (!exists $table{$target}->{$key}) { + $table{$target}->{$key} = $default_combiner; } - $table{$target}->{$_} = process_values($table{$target}->{$_}, - $combined_inheritance{$_}, - $target, $_); - unless(defined($table{$target}->{$_})) { - delete $table{$target}->{$_}; + $table{$target}->{$key} = process_values($table{$target}->{$key}, + $combined_inheritance{$key}, + $target, $key); + unless(defined($table{$target}->{$key})) { + delete $table{$target}->{$key}; } # if ($extra_checks && -# $previous && !($add_called || $previous ~~ $table{$target}->{$_})) { -# warn "$_ got replaced in $target\n"; +# $previous && !($add_called || $previous ~~ $table{$target}->{$key})) { +# warn "$key got replaced in $target\n"; # } } @@ -3424,6 +3443,27 @@ return realpath($dir); } +# Check if all paths are one and the same, using stat. They must both exist +# We need this for the cases when File::Spec doesn't detect case insensitivity +# (File::Spec::Unix assumes case sensitivity) +sub samedir { + die "samedir expects two arguments\n" unless scalar @_ == 2; + + my @stat0 = stat($_[0]); # First argument + my @stat1 = stat($_[1]); # Second argument + + die "Couldn't stat $_[0]" unless @stat0; + die "Couldn't stat $_[1]" unless @stat1; + + # Compare device number + return 0 unless ($stat0[0] == $stat1[0]); + # Compare "inode". The perl manual recommends comparing as + # string rather than as number. + return 0 unless ($stat0[1] eq $stat1[1]); + + return 1; # All the same +} + sub quotify { my %processors = ( perl => sub { my $x = shift; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/CONTRIBUTING nodejs-mozilla-12.22.12/deps/openssl/openssl/CONTRIBUTING --- nodejs-mozilla-12.18.1/deps/openssl/openssl/CONTRIBUTING 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/CONTRIBUTING 2022-04-05 07:17:00.000000000 +0000 @@ -41,8 +41,8 @@ https://www.openssl.org/policies/codingstyle.html) and compile without warnings. Where gcc or clang is available you should use the --strict-warnings Configure option. OpenSSL compiles on many varied - platforms: try to ensure you only use portable features. Clean builds - via Travis and AppVeyor are required, and they are started automatically + platforms: try to ensure you only use portable features. Clean builds via + GitHub Actions and AppVeyor are required, and they are started automatically whenever a PR is created or updated. 5. When at all possible, patches should include tests. These can diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/aes_core.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/aes_core.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/aes_core.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/aes_core.c 2022-04-05 07:17:00.000000000 +0000 @@ -673,357 +673,6 @@ InvCipher(in, out, rk, key->rounds); } - -# ifndef OPENSSL_SMALL_FOOTPRINT -void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, - size_t blocks, const AES_KEY *key, - const unsigned char *ivec); - -static void RawToBits(const u8 raw[64], u64 bits[8]) -{ - int i, j; - u64 in, out; - - memset(bits, 0, 64); - for (i = 0; i < 8; i++) { - in = 0; - for (j = 0; j < 8; j++) - in |= ((u64)raw[i * 8 + j]) << (8 * j); - out = in & 0xF0F0F0F00F0F0F0FuLL; - out |= (in & 0x0F0F0F0F00000000uLL) >> 28; - out |= (in & 0x00000000F0F0F0F0uLL) << 28; - in = out & 0xCCCC3333CCCC3333uLL; - in |= (out & 0x3333000033330000uLL) >> 14; - in |= (out & 0x0000CCCC0000CCCCuLL) << 14; - out = in & 0xAA55AA55AA55AA55uLL; - out |= (in & 0x5500550055005500uLL) >> 7; - out |= (in & 0x00AA00AA00AA00AAuLL) << 7; - for (j = 0; j < 8; j++) { - bits[j] |= (out & 0xFFuLL) << (8 * i); - out = out >> 8; - } - } -} - -static void BitsToRaw(const u64 bits[8], u8 raw[64]) -{ - int i, j; - u64 in, out; - - for (i = 0; i < 8; i++) { - in = 0; - for (j = 0; j < 8; j++) - in |= ((bits[j] >> (8 * i)) & 0xFFuLL) << (8 * j); - out = in & 0xF0F0F0F00F0F0F0FuLL; - out |= (in & 0x0F0F0F0F00000000uLL) >> 28; - out |= (in & 0x00000000F0F0F0F0uLL) << 28; - in = out & 0xCCCC3333CCCC3333uLL; - in |= (out & 0x3333000033330000uLL) >> 14; - in |= (out & 0x0000CCCC0000CCCCuLL) << 14; - out = in & 0xAA55AA55AA55AA55uLL; - out |= (in & 0x5500550055005500uLL) >> 7; - out |= (in & 0x00AA00AA00AA00AAuLL) << 7; - for (j = 0; j < 8; j++) { - raw[i * 8 + j] = (u8)out; - out = out >> 8; - } - } -} - -static void BitsXtime(u64 state[8]) -{ - u64 b; - - b = state[7]; - state[7] = state[6]; - state[6] = state[5]; - state[5] = state[4]; - state[4] = state[3] ^ b; - state[3] = state[2] ^ b; - state[2] = state[1]; - state[1] = state[0] ^ b; - state[0] = b; -} - -/* - * This S-box implementation follows a circuit described in - * Boyar and Peralta: "A new combinational logic minimization - * technique with applications to cryptology." - * https://eprint.iacr.org/2009/191.pdf - * - * The math is similar to above, in that it uses - * a tower field of GF(2^2^2^2) but with a different - * basis representation, that is better suited to - * logic designs. - */ -static void BitsSub(u64 state[8]) -{ - u64 x0, x1, x2, x3, x4, x5, x6, x7; - u64 y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11; - u64 y12, y13, y14, y15, y16, y17, y18, y19, y20, y21; - u64 t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11; - u64 t12, t13, t14, t15, t16, t17, t18, t19, t20, t21; - u64 t22, t23, t24, t25, t26, t27, t28, t29, t30, t31; - u64 t32, t33, t34, t35, t36, t37, t38, t39, t40, t41; - u64 t42, t43, t44, t45, t46, t47, t48, t49, t50, t51; - u64 t52, t53, t54, t55, t56, t57, t58, t59, t60, t61; - u64 t62, t63, t64, t65, t66, t67; - u64 z0, z1, z2, z3, z4, z5, z6, z7, z8, z9, z10, z11; - u64 z12, z13, z14, z15, z16, z17; - u64 s0, s1, s2, s3, s4, s5, s6, s7; - - x7 = state[0]; - x6 = state[1]; - x5 = state[2]; - x4 = state[3]; - x3 = state[4]; - x2 = state[5]; - x1 = state[6]; - x0 = state[7]; - y14 = x3 ^ x5; - y13 = x0 ^ x6; - y9 = x0 ^ x3; - y8 = x0 ^ x5; - t0 = x1 ^ x2; - y1 = t0 ^ x7; - y4 = y1 ^ x3; - y12 = y13 ^ y14; - y2 = y1 ^ x0; - y5 = y1 ^ x6; - y3 = y5 ^ y8; - t1 = x4 ^ y12; - y15 = t1 ^ x5; - y20 = t1 ^ x1; - y6 = y15 ^ x7; - y10 = y15 ^ t0; - y11 = y20 ^ y9; - y7 = x7 ^ y11; - y17 = y10 ^ y11; - y19 = y10 ^ y8; - y16 = t0 ^ y11; - y21 = y13 ^ y16; - y18 = x0 ^ y16; - t2 = y12 & y15; - t3 = y3 & y6; - t4 = t3 ^ t2; - t5 = y4 & x7; - t6 = t5 ^ t2; - t7 = y13 & y16; - t8 = y5 & y1; - t9 = t8 ^ t7; - t10 = y2 & y7; - t11 = t10 ^ t7; - t12 = y9 & y11; - t13 = y14 & y17; - t14 = t13 ^ t12; - t15 = y8 & y10; - t16 = t15 ^ t12; - t17 = t4 ^ t14; - t18 = t6 ^ t16; - t19 = t9 ^ t14; - t20 = t11 ^ t16; - t21 = t17 ^ y20; - t22 = t18 ^ y19; - t23 = t19 ^ y21; - t24 = t20 ^ y18; - t25 = t21 ^ t22; - t26 = t21 & t23; - t27 = t24 ^ t26; - t28 = t25 & t27; - t29 = t28 ^ t22; - t30 = t23 ^ t24; - t31 = t22 ^ t26; - t32 = t31 & t30; - t33 = t32 ^ t24; - t34 = t23 ^ t33; - t35 = t27 ^ t33; - t36 = t24 & t35; - t37 = t36 ^ t34; - t38 = t27 ^ t36; - t39 = t29 & t38; - t40 = t25 ^ t39; - t41 = t40 ^ t37; - t42 = t29 ^ t33; - t43 = t29 ^ t40; - t44 = t33 ^ t37; - t45 = t42 ^ t41; - z0 = t44 & y15; - z1 = t37 & y6; - z2 = t33 & x7; - z3 = t43 & y16; - z4 = t40 & y1; - z5 = t29 & y7; - z6 = t42 & y11; - z7 = t45 & y17; - z8 = t41 & y10; - z9 = t44 & y12; - z10 = t37 & y3; - z11 = t33 & y4; - z12 = t43 & y13; - z13 = t40 & y5; - z14 = t29 & y2; - z15 = t42 & y9; - z16 = t45 & y14; - z17 = t41 & y8; - t46 = z15 ^ z16; - t47 = z10 ^ z11; - t48 = z5 ^ z13; - t49 = z9 ^ z10; - t50 = z2 ^ z12; - t51 = z2 ^ z5; - t52 = z7 ^ z8; - t53 = z0 ^ z3; - t54 = z6 ^ z7; - t55 = z16 ^ z17; - t56 = z12 ^ t48; - t57 = t50 ^ t53; - t58 = z4 ^ t46; - t59 = z3 ^ t54; - t60 = t46 ^ t57; - t61 = z14 ^ t57; - t62 = t52 ^ t58; - t63 = t49 ^ t58; - t64 = z4 ^ t59; - t65 = t61 ^ t62; - t66 = z1 ^ t63; - s0 = t59 ^ t63; - s6 = ~(t56 ^ t62); - s7 = ~(t48 ^ t60); - t67 = t64 ^ t65; - s3 = t53 ^ t66; - s4 = t51 ^ t66; - s5 = t47 ^ t65; - s1 = ~(t64 ^ s3); - s2 = ~(t55 ^ t67); - state[0] = s7; - state[1] = s6; - state[2] = s5; - state[3] = s4; - state[4] = s3; - state[5] = s2; - state[6] = s1; - state[7] = s0; -} - -static void BitsShiftRows(u64 state[8]) -{ - u64 s, s0; - int i; - - for (i = 0; i < 8; i++) { - s = state[i]; - s0 = s & 0x1111111111111111uLL; - s0 |= ((s & 0x2220222022202220uLL) >> 4) | ((s & 0x0002000200020002uLL) << 12); - s0 |= ((s & 0x4400440044004400uLL) >> 8) | ((s & 0x0044004400440044uLL) << 8); - s0 |= ((s & 0x8000800080008000uLL) >> 12) | ((s & 0x0888088808880888uLL) << 4); - state[i] = s0; - } -} - -static void BitsMixColumns(u64 state[8]) -{ - u64 s1, s; - u64 s0[8]; - int i; - - for (i = 0; i < 8; i++) { - s1 = state[i]; - s = s1; - s ^= ((s & 0xCCCCCCCCCCCCCCCCuLL) >> 2) | ((s & 0x3333333333333333uLL) << 2); - s ^= ((s & 0xAAAAAAAAAAAAAAAAuLL) >> 1) | ((s & 0x5555555555555555uLL) << 1); - s ^= s1; - s0[i] = s; - } - BitsXtime(state); - for (i = 0; i < 8; i++) { - s1 = state[i]; - s = s0[i]; - s ^= s1; - s ^= ((s1 & 0xEEEEEEEEEEEEEEEEuLL) >> 1) | ((s1 & 0x1111111111111111uLL) << 3); - state[i] = s; - } -} - -static void BitsAddRoundKey(u64 state[8], const u64 key[8]) -{ - int i; - - for (i = 0; i < 8; i++) - state[i] ^= key[i]; -} - -void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, - size_t blocks, const AES_KEY *key, - const unsigned char *ivec) -{ - struct { - u8 cipher[64]; - u64 state[8]; - u64 rd_key[AES_MAXNR + 1][8]; - } *bs; - u32 ctr32; - int i; - - ctr32 = GETU32(ivec + 12); - if (blocks >= 4 - && (bs = OPENSSL_malloc(sizeof(*bs)))) { - for (i = 0; i < key->rounds + 1; i++) { - memcpy(bs->cipher + 0, &key->rd_key[4 * i], 16); - memcpy(bs->cipher + 16, bs->cipher, 16); - memcpy(bs->cipher + 32, bs->cipher, 32); - RawToBits(bs->cipher, bs->rd_key[i]); - } - while (blocks) { - memcpy(bs->cipher, ivec, 12); - PUTU32(bs->cipher + 12, ctr32); - ctr32++; - memcpy(bs->cipher + 16, ivec, 12); - PUTU32(bs->cipher + 28, ctr32); - ctr32++; - memcpy(bs->cipher + 32, ivec, 12); - PUTU32(bs->cipher + 44, ctr32); - ctr32++; - memcpy(bs->cipher + 48, ivec, 12); - PUTU32(bs->cipher + 60, ctr32); - ctr32++; - RawToBits(bs->cipher, bs->state); - BitsAddRoundKey(bs->state, bs->rd_key[0]); - for (i = 1; i < key->rounds; i++) { - BitsSub(bs->state); - BitsShiftRows(bs->state); - BitsMixColumns(bs->state); - BitsAddRoundKey(bs->state, bs->rd_key[i]); - } - BitsSub(bs->state); - BitsShiftRows(bs->state); - BitsAddRoundKey(bs->state, bs->rd_key[key->rounds]); - BitsToRaw(bs->state, bs->cipher); - for (i = 0; i < 64 && blocks; i++) { - out[i] = in[i] ^ bs->cipher[i]; - if ((i & 15) == 15) - blocks--; - } - in += i; - out += i; - } - OPENSSL_clear_free(bs, sizeof(*bs)); - } else { - unsigned char cipher[16]; - - while (blocks) { - memcpy(cipher, ivec, 12); - PUTU32(cipher + 12, ctr32); - AES_encrypt(cipher, cipher, key); - for (i = 0; i < 16; i++) - out[i] = in[i] ^ cipher[i]; - in += 16; - out += 16; - ctr32++; - blocks--; - } - } -} -# endif #elif !defined(AES_ASM) /*- Te0[x] = S [x].[02, 01, 01, 03]; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/aes_ige.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/aes_ige.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/aes_ige.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/aes_ige.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -12,11 +12,6 @@ #include #include "aes_local.h" -#define N_WORDS (AES_BLOCK_SIZE / sizeof(unsigned long)) -typedef struct { - unsigned long data[N_WORDS]; -} aes_block_t; - /* XXX: probably some better way to do this */ #if defined(__i386__) || defined(__x86_64__) # define UNALIGNED_MEMOPS_ARE_FAST 1 @@ -24,6 +19,15 @@ # define UNALIGNED_MEMOPS_ARE_FAST 0 #endif +#define N_WORDS (AES_BLOCK_SIZE / sizeof(unsigned long)) +typedef struct { + unsigned long data[N_WORDS]; +#if defined(__GNUC__) && UNALIGNED_MEMOPS_ARE_FAST +} aes_block_t __attribute((__aligned__(1))); +#else +} aes_block_t; +#endif + #if UNALIGNED_MEMOPS_ARE_FAST # define load_block(d, s) (d) = *(const aes_block_t *)(s) # define store_block(d, s) *(aes_block_t *)(d) = (s) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/asm/aesni-mb-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/asm/aesni-mb-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/asm/aesni-mb-x86_64.pl 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/asm/aesni-mb-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -70,7 +70,7 @@ $avx = ($1>=10) + ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -108,7 +108,7 @@ $avx=1 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) && `ml64 2>&1` =~ /Version ([0-9]+)\./ && $1>=10); -$avx=1 if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/ && $2>=3.0); +$avx=1 if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/ && $2>=3.0); $shaext=1; ### set to zero if compiling for 1.0.1 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -70,7 +70,7 @@ $avx = ($1>=10) + ($1>=12); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/asm/aesv8-armx.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/asm/aesv8-armx.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/aes/asm/aesv8-armx.pl 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/aes/asm/aesv8-armx.pl 2022-04-05 07:17:00.000000000 +0000 @@ -183,7 +183,12 @@ .Loop192: vtbl.8 $key,{$in1},$mask vext.8 $tmp,$zero,$in0,#12 +#ifdef __ARMEB__ + vst1.32 {$in1},[$out],#16 + sub $out,$out,#8 +#else vst1.32 {$in1},[$out],#8 +#endif aese $key,$zero subs $bits,$bits,#1 @@ -715,8 +720,11 @@ ldr $rounds,[$key,#240] ldr $ctr, [$ivp, #12] +#ifdef __ARMEB__ + vld1.8 {$dat0},[$ivp] +#else vld1.32 {$dat0},[$ivp] - +#endif vld1.32 {q8-q9},[$key] // load key schedule... sub $rounds,$rounds,#4 mov $step,#16 @@ -732,17 +740,17 @@ #ifndef __ARMEB__ rev $ctr, $ctr #endif - vorr $dat1,$dat0,$dat0 add $tctr1, $ctr, #1 - vorr $dat2,$dat0,$dat0 - add $ctr, $ctr, #2 vorr $ivec,$dat0,$dat0 rev $tctr1, $tctr1 - vmov.32 ${dat1}[3],$tctr1 + vmov.32 ${ivec}[3],$tctr1 + add $ctr, $ctr, #2 + vorr $dat1,$ivec,$ivec b.ls .Lctr32_tail rev $tctr2, $ctr + vmov.32 ${ivec}[3],$tctr2 sub $len,$len,#3 // bias - vmov.32 ${dat2}[3],$tctr2 + vorr $dat2,$ivec,$ivec b .Loop3x_ctr32 .align 4 @@ -769,11 +777,11 @@ aese $dat1,q8 aesmc $tmp1,$dat1 vld1.8 {$in0},[$inp],#16 - vorr $dat0,$ivec,$ivec + add $tctr0,$ctr,#1 aese $dat2,q8 aesmc $dat2,$dat2 vld1.8 {$in1},[$inp],#16 - vorr $dat1,$ivec,$ivec + rev $tctr0,$tctr0 aese $tmp0,q9 aesmc $tmp0,$tmp0 aese $tmp1,q9 @@ -782,8 +790,6 @@ mov $key_,$key aese $dat2,q9 aesmc $tmp2,$dat2 - vorr $dat2,$ivec,$ivec - add $tctr0,$ctr,#1 aese $tmp0,q12 aesmc $tmp0,$tmp0 aese $tmp1,q12 @@ -799,20 +805,22 @@ aese $tmp1,q13 aesmc $tmp1,$tmp1 veor $in2,$in2,$rndlast - rev $tctr0,$tctr0 + vmov.32 ${ivec}[3], $tctr0 aese $tmp2,q13 aesmc $tmp2,$tmp2 - vmov.32 ${dat0}[3], $tctr0 + vorr $dat0,$ivec,$ivec rev $tctr1,$tctr1 aese $tmp0,q14 aesmc $tmp0,$tmp0 + vmov.32 ${ivec}[3], $tctr1 + rev $tctr2,$ctr aese $tmp1,q14 aesmc $tmp1,$tmp1 - vmov.32 ${dat1}[3], $tctr1 - rev $tctr2,$ctr + vorr $dat1,$ivec,$ivec + vmov.32 ${ivec}[3], $tctr2 aese $tmp2,q14 aesmc $tmp2,$tmp2 - vmov.32 ${dat2}[3], $tctr2 + vorr $dat2,$ivec,$ivec subs $len,$len,#3 aese $tmp0,q15 aese $tmp1,q15 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/armcap.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/armcap.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/armcap.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/armcap.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2011-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2011-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -68,26 +68,61 @@ # include # define OSSL_IMPLEMENT_GETAUXVAL # endif +# elif defined(__ANDROID_API__) +/* see https://developer.android.google.cn/ndk/guides/cpu-features */ +# if __ANDROID_API__ >= 18 +# include +# define OSSL_IMPLEMENT_GETAUXVAL +# endif +# endif +# if defined(__FreeBSD__) +# include +# if __FreeBSD_version >= 1200000 +# include +# define OSSL_IMPLEMENT_GETAUXVAL + +static unsigned long getauxval(unsigned long key) +{ + unsigned long val = 0ul; + + if (elf_aux_info((int)key, &val, sizeof(val)) != 0) + return 0ul; + + return val; +} +# endif # endif /* + * Android: according to https://developer.android.com/ndk/guides/cpu-features, + * getauxval is supported starting with API level 18 + */ +# if defined(__ANDROID__) && defined(__ANDROID_API__) && __ANDROID_API__ >= 18 +# include +# define OSSL_IMPLEMENT_GETAUXVAL +# endif + +/* * ARM puts the feature bits for Crypto Extensions in AT_HWCAP2, whereas * AArch64 used AT_HWCAP. */ +# ifndef AT_HWCAP +# define AT_HWCAP 16 +# endif +# ifndef AT_HWCAP2 +# define AT_HWCAP2 26 +# endif # if defined(__arm__) || defined (__arm) -# define HWCAP 16 - /* AT_HWCAP */ +# define HWCAP AT_HWCAP # define HWCAP_NEON (1 << 12) -# define HWCAP_CE 26 - /* AT_HWCAP2 */ +# define HWCAP_CE AT_HWCAP2 # define HWCAP_CE_AES (1 << 0) # define HWCAP_CE_PMULL (1 << 1) # define HWCAP_CE_SHA1 (1 << 2) # define HWCAP_CE_SHA256 (1 << 3) # elif defined(__aarch64__) -# define HWCAP 16 - /* AT_HWCAP */ +# define HWCAP AT_HWCAP # define HWCAP_NEON (1 << 1) # define HWCAP_CE HWCAP diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/a_object.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/a_object.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/a_object.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/a_object.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -286,16 +286,13 @@ } } - /* - * only the ASN1_OBJECTs from the 'table' will have values for ->sn or - * ->ln - */ if ((a == NULL) || ((*a) == NULL) || !((*a)->flags & ASN1_OBJECT_FLAG_DYNAMIC)) { if ((ret = ASN1_OBJECT_new()) == NULL) return NULL; - } else + } else { ret = (*a); + } p = *pp; /* detach data from object */ @@ -313,6 +310,12 @@ ret->flags |= ASN1_OBJECT_FLAG_DYNAMIC_DATA; } memcpy(data, p, length); + /* If there are dynamic strings, free them here, and clear the flag */ + if ((ret->flags & ASN1_OBJECT_FLAG_DYNAMIC_STRINGS) != 0) { + OPENSSL_free((char *)ret->sn); + OPENSSL_free((char *)ret->ln); + ret->flags &= ~ASN1_OBJECT_FLAG_DYNAMIC_STRINGS; + } /* reattach data to object, after which it remains const */ ret->data = data; ret->length = length; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/a_print.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/a_print.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/a_print.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/a_print.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -18,12 +18,13 @@ int ia5 = 0; int t61 = 0; - if (len <= 0) - len = -1; if (s == NULL) return V_ASN1_PRINTABLESTRING; - while ((*s) && (len-- != 0)) { + if (len < 0) + len = strlen((const char *)s); + + while (len-- > 0) { c = *(s++); if (!ossl_isasn1print(c)) ia5 = 1; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/asn1_err.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/asn1_err.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/asn1_err.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/asn1_err.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -49,6 +49,7 @@ "asn1_item_embed_d2i"}, {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_EMBED_NEW, 0), "asn1_item_embed_new"}, + {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_EX_I2D, 0), "ASN1_item_ex_i2d"}, {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_FLAGS_I2D, 0), "asn1_item_flags_i2d"}, {ERR_PACK(ERR_LIB_ASN1, ASN1_F_ASN1_ITEM_I2D_BIO, 0), "ASN1_item_i2d_bio"}, @@ -160,6 +161,7 @@ "asn1 sig parse error"}, {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_AUX_ERROR), "aux error"}, {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_OBJECT_HEADER), "bad object header"}, + {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BAD_TEMPLATE), "bad template"}, {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BMPSTRING_IS_WRONG_LENGTH), "bmpstring is wrong length"}, {ERR_PACK(ERR_LIB_ASN1, 0, ASN1_R_BN_LIB), "bn lib"}, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/asn1_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/asn1_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/asn1_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/asn1_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -292,7 +292,12 @@ } if ((size_t)str->length <= len || str->data == NULL) { c = str->data; +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + /* No NUL terminator in fuzzing builds */ + str->data = OPENSSL_realloc(c, len != 0 ? len : 1); +#else str->data = OPENSSL_realloc(c, len + 1); +#endif if (str->data == NULL) { ASN1err(ASN1_F_ASN1_STRING_SET, ERR_R_MALLOC_FAILURE); str->data = c; @@ -302,8 +307,17 @@ str->length = len; if (data != NULL) { memcpy(str->data, data, len); - /* an allowance for strings :-) */ +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + /* Set the unused byte to something non NUL and printable. */ + if (len == 0) + str->data[len] = '~'; +#else + /* + * Add a NUL terminator. This should not be necessary - but we add it as + * a safety precaution + */ str->data[len] = '\0'; +#endif } return 1; } @@ -365,7 +379,8 @@ i = (a->length - b->length); if (i == 0) { - i = memcmp(a->data, b->data, a->length); + if (a->length != 0) + i = memcmp(a->data, b->data, a->length); if (i == 0) return a->type - b->type; else diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/asn1_par.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/asn1_par.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/asn1_par.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/asn1_par.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -325,6 +325,7 @@ } if (BIO_puts(bp, "]") <= 0) goto end; + dump_cont = 0; } if (!nl) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/a_strex.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/a_strex.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/a_strex.c 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/a_strex.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -280,6 +280,8 @@ t.type = str->type; t.value.ptr = (char *)str; der_len = i2d_ASN1_TYPE(&t, NULL); + if (der_len <= 0) + return -1; if ((der_buf = OPENSSL_malloc(der_len)) == NULL) { ASN1err(ASN1_F_DO_DUMP, ERR_R_MALLOC_FAILURE); return -1; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/bio_asn1.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/bio_asn1.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/bio_asn1.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/bio_asn1.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -138,6 +138,11 @@ if (ctx == NULL) return 0; + if (ctx->prefix_free != NULL) + ctx->prefix_free(b, &ctx->ex_buf, &ctx->ex_len, &ctx->ex_arg); + if (ctx->suffix_free != NULL) + ctx->suffix_free(b, &ctx->ex_buf, &ctx->ex_len, &ctx->ex_arg); + OPENSSL_free(ctx->buf); OPENSSL_free(ctx); BIO_set_data(b, NULL); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/bio_ndef.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/bio_ndef.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/bio_ndef.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/bio_ndef.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -113,6 +113,8 @@ ndef_aux = *(NDEF_SUPPORT **)parg; derlen = ASN1_item_ndef_i2d(ndef_aux->val, NULL, ndef_aux->it); + if (derlen < 0) + return 0; if ((p = OPENSSL_malloc(derlen)) == NULL) { ASN1err(ASN1_F_NDEF_PREFIX, ERR_R_MALLOC_FAILURE); return 0; @@ -140,6 +142,9 @@ ndef_aux = *(NDEF_SUPPORT **)parg; + if (ndef_aux == NULL) + return 0; + OPENSSL_free(ndef_aux->derbuf); ndef_aux->derbuf = NULL; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/charmap.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/charmap.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/charmap.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/charmap.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/asn1/charmap.pl * - * Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/d2i_pr.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/d2i_pr.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/d2i_pr.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/d2i_pr.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -56,6 +56,8 @@ goto err; EVP_PKEY_free(ret); ret = tmp; + if (EVP_PKEY_type(type) != EVP_PKEY_base_id(ret)) + goto err; } else { ASN1err(ASN1_F_D2I_PRIVATEKEY, ERR_R_ASN1_LIB); goto err; @@ -76,13 +78,53 @@ * type */ +static EVP_PKEY *key_as_pkcs8(const unsigned char **pp, long length, int *carry_on) +{ + const unsigned char *p = *pp; + PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, length); + EVP_PKEY *ret; + + if (p8 == NULL) + return NULL; + + ret = EVP_PKCS82PKEY(p8); + if (ret == NULL) + *carry_on = 0; + + PKCS8_PRIV_KEY_INFO_free(p8); + + if (ret != NULL) + *pp = p; + + return ret; +} + EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, long length) { STACK_OF(ASN1_TYPE) *inkey; const unsigned char *p; int keytype; + EVP_PKEY *ret = NULL; + int carry_on = 1; + + ERR_set_mark(); + ret = key_as_pkcs8(pp, length, &carry_on); + if (ret != NULL) { + ERR_clear_last_mark(); + if (a != NULL) + *a = ret; + return ret; + } + + if (carry_on == 0) { + ERR_clear_last_mark(); + ASN1err(ASN1_F_D2I_AUTOPRIVATEKEY, + ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE); + return NULL; + } p = *pp; + /* * Dirty trick: read in the ASN1 data into a STACK_OF(ASN1_TYPE): by * analyzing it we can determine the passed structure: this assumes the @@ -98,28 +140,15 @@ keytype = EVP_PKEY_DSA; else if (sk_ASN1_TYPE_num(inkey) == 4) keytype = EVP_PKEY_EC; - else if (sk_ASN1_TYPE_num(inkey) == 3) { /* This seems to be PKCS8, not - * traditional format */ - PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, length); - EVP_PKEY *ret; - - sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free); - if (!p8) { - ASN1err(ASN1_F_D2I_AUTOPRIVATEKEY, - ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE); - return NULL; - } - ret = EVP_PKCS82PKEY(p8); - PKCS8_PRIV_KEY_INFO_free(p8); - if (ret == NULL) - return NULL; - *pp = p; - if (a) { - *a = ret; - } - return ret; - } else + else keytype = EVP_PKEY_RSA; sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free); - return d2i_PrivateKey(keytype, a, pp, length); + + ret = d2i_PrivateKey(keytype, a, pp, length); + if (ret != NULL) + ERR_pop_to_mark(); + else + ERR_clear_last_mark(); + + return ret; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/tasn_dec.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/tasn_dec.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/tasn_dec.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/tasn_dec.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -182,6 +182,15 @@ tag, aclass, opt, ctx); case ASN1_ITYPE_MSTRING: + /* + * It never makes sense for multi-strings to have implicit tagging, so + * if tag != -1, then this looks like an error in the template. + */ + if (tag != -1) { + ASN1err(ASN1_F_ASN1_ITEM_EMBED_D2I, ASN1_R_BAD_TEMPLATE); + goto err; + } + p = *in; /* Just read in tag and class */ ret = asn1_check_tlen(NULL, &otag, &oclass, NULL, NULL, @@ -199,6 +208,7 @@ ASN1err(ASN1_F_ASN1_ITEM_EMBED_D2I, ASN1_R_MSTRING_NOT_UNIVERSAL); goto err; } + /* Check tag matches bit map */ if (!(ASN1_tag2bit(otag) & it->utype)) { /* If OPTIONAL, assume this is OK */ @@ -215,6 +225,15 @@ return ef->asn1_ex_d2i(pval, in, len, it, tag, aclass, opt, ctx); case ASN1_ITYPE_CHOICE: + /* + * It never makes sense for CHOICE types to have implicit tagging, so + * if tag != -1, then this looks like an error in the template. + */ + if (tag != -1) { + ASN1err(ASN1_F_ASN1_ITEM_EMBED_D2I, ASN1_R_BAD_TEMPLATE); + goto err; + } + if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL)) goto auxerr; if (*pval) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/tasn_enc.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/tasn_enc.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/tasn_enc.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/tasn_enc.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -103,9 +103,25 @@ return asn1_i2d_ex_primitive(pval, out, it, tag, aclass); case ASN1_ITYPE_MSTRING: + /* + * It never makes sense for multi-strings to have implicit tagging, so + * if tag != -1, then this looks like an error in the template. + */ + if (tag != -1) { + ASN1err(ASN1_F_ASN1_ITEM_EX_I2D, ASN1_R_BAD_TEMPLATE); + return -1; + } return asn1_i2d_ex_primitive(pval, out, it, -1, aclass); case ASN1_ITYPE_CHOICE: + /* + * It never makes sense for CHOICE types to have implicit tagging, so + * if tag != -1, then this looks like an error in the template. + */ + if (tag != -1) { + ASN1err(ASN1_F_ASN1_ITEM_EX_I2D, ASN1_R_BAD_TEMPLATE); + return -1; + } if (asn1_cb && !asn1_cb(ASN1_OP_I2D_PRE, pval, it, NULL)) return 0; i = asn1_get_choice_selector(pval, it); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/t_spki.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/t_spki.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/t_spki.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/t_spki.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -38,7 +38,7 @@ } chal = spki->spkac->challenge; if (chal->length) - BIO_printf(out, " Challenge String: %s\n", chal->data); + BIO_printf(out, " Challenge String: %.*s\n", chal->length, chal->data); i = OBJ_obj2nid(spki->sig_algor.algorithm); BIO_printf(out, " Signature Algorithm: %s", (i == NID_undef) ? "UNKNOWN" : OBJ_nid2ln(i)); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/x_algor.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/x_algor.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/asn1/x_algor.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/asn1/x_algor.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -92,3 +92,35 @@ return 0; return ASN1_TYPE_cmp(a->parameter, b->parameter); } + +int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src) +{ + if (src == NULL || dest == NULL) + return 0; + + if (dest->algorithm) + ASN1_OBJECT_free(dest->algorithm); + dest->algorithm = NULL; + + if (dest->parameter) + ASN1_TYPE_free(dest->parameter); + dest->parameter = NULL; + + if (src->algorithm) + if ((dest->algorithm = OBJ_dup(src->algorithm)) == NULL) + return 0; + + if (src->parameter) { + dest->parameter = ASN1_TYPE_new(); + if (dest->parameter == NULL) + return 0; + + /* Assuming this is also correct for a BOOL. + * set does copy as a side effect. + */ + if (ASN1_TYPE_set1(dest->parameter, + src->parameter->type, src->parameter->value.ptr) == 0) + return 0; + } + return 1; +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/b_addr.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/b_addr.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/b_addr.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/b_addr.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,6 +7,10 @@ * https://www.openssl.org/source/license.html */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + #include #include @@ -685,7 +689,7 @@ hints.ai_protocol = protocol; # ifdef AI_ADDRCONFIG # ifdef AF_UNSPEC - if (family == AF_UNSPEC) + if (host != NULL && family == AF_UNSPEC) # endif hints.ai_flags |= AI_ADDRCONFIG; # endif @@ -740,7 +744,7 @@ # pragma pointer_size 32 #endif /* Windows doesn't seem to have in_addr_t */ -#ifdef OPENSSL_SYS_WINDOWS +#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) static uint32_t he_fallback_address; static const char *he_fallback_addresses[] = { (char *)&he_fallback_address, NULL }; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/b_print.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/b_print.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/b_print.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/b_print.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -635,7 +635,11 @@ fvalue = tmpvalue; } ufvalue = abs_val(fvalue); - if (ufvalue > ULONG_MAX) { + /* + * By subtracting 65535 (2^16-1) we cancel the low order 15 bits + * of ULONG_MAX to avoid using imprecise floating point values. + */ + if (ufvalue >= (double)(ULONG_MAX - 65535) + 65536.0) { /* Number too big */ return 0; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/b_sock2.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/b_sock2.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/b_sock2.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/b_sock2.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -243,7 +243,8 @@ } } -# ifdef IPV6_V6ONLY + /* On OpenBSD it is always ipv6 only with ipv6 sockets thus read-only */ +# if defined(IPV6_V6ONLY) && !defined(__OpenBSD__) if (BIO_ADDR_family(addr) == AF_INET6) { /* * Note: Windows default of IPV6_V6ONLY is ON, and Linux is OFF. diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/bss_acpt.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/bss_acpt.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/bss_acpt.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/bss_acpt.c 2022-04-05 07:17:00.000000000 +0000 @@ -434,8 +434,10 @@ b->init = 1; } else if (num == 1) { OPENSSL_free(data->param_serv); - data->param_serv = BUF_strdup(ptr); - b->init = 1; + if ((data->param_serv = OPENSSL_strdup(ptr)) == NULL) + ret = 0; + else + b->init = 1; } else if (num == 2) { data->bind_mode |= BIO_SOCK_NONBLOCK; } else if (num == 3) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/bss_conn.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/bss_conn.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/bss_conn.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/bss_conn.c 2022-04-05 07:17:00.000000000 +0000 @@ -186,8 +186,17 @@ case BIO_CONN_S_BLOCKED_CONNECT: i = BIO_sock_error(b->num); - if (i) { + if (i != 0) { BIO_clear_retry_flags(b); + if ((c->addr_iter = BIO_ADDRINFO_next(c->addr_iter)) != NULL) { + /* + * if there are more addresses to try, do that first + */ + BIO_closesocket(b->num); + c->state = BIO_CONN_S_CREATE_SOCKET; + ERR_clear_error(); + break; + } SYSerr(SYS_F_CONNECT, i); ERR_add_error_data(4, "hostname=", c->param_hostname, @@ -407,12 +416,13 @@ case BIO_C_SET_CONNECT: if (ptr != NULL) { b->init = 1; - if (num == 0) { + if (num == 0) { /* BIO_set_conn_hostname */ char *hold_service = data->param_service; /* We affect the hostname regardless. However, the input * string might contain a host:service spec, so we must * parse it, which might or might not affect the service */ + OPENSSL_free(data->param_hostname); data->param_hostname = NULL; ret = BIO_parse_hostserv(ptr, @@ -421,19 +431,29 @@ BIO_PARSE_PRIO_HOST); if (hold_service != data->param_service) OPENSSL_free(hold_service); - } else if (num == 1) { + } else if (num == 1) { /* BIO_set_conn_port */ OPENSSL_free(data->param_service); - data->param_service = BUF_strdup(ptr); - } else if (num == 2) { + if ((data->param_service = OPENSSL_strdup(ptr)) == NULL) + ret = 0; + } else if (num == 2) { /* BIO_set_conn_address */ const BIO_ADDR *addr = (const BIO_ADDR *)ptr; + char *host = BIO_ADDR_hostname_string(addr, 1); + char *service = BIO_ADDR_service_string(addr, 1); + + ret = host != NULL && service != NULL; if (ret) { - data->param_hostname = BIO_ADDR_hostname_string(addr, 1); - data->param_service = BIO_ADDR_service_string(addr, 1); + OPENSSL_free(data->param_hostname); + data->param_hostname = host; + OPENSSL_free(data->param_service); + data->param_service = service; BIO_ADDRINFO_free(data->addr_first); data->addr_first = NULL; data->addr_iter = NULL; + } else { + OPENSSL_free(host); + OPENSSL_free(service); } - } else if (num == 3) { + } else if (num == 3) { /* BIO_set_conn_ip_family */ data->connect_family = *(int *)ptr; } else { ret = 0; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/bss_dgram.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/bss_dgram.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/bss_dgram.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/bss_dgram.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -7,6 +7,10 @@ * https://www.openssl.org/source/license.html */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + #include #include diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/bss_mem.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/bss_mem.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bio/bss_mem.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bio/bss_mem.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -280,7 +280,7 @@ ret = (long)bm->length; if (ptr != NULL) { pptr = (char **)ptr; - *pptr = (char *)&(bm->data[0]); + *pptr = (char *)bm->data; } break; case BIO_C_SET_BUF_MEM: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/mips.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/mips.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/mips.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/mips.pl 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2010-2021 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -1984,6 +1984,8 @@ sltu $at,$c_2,$t_1 $ADDU $c_3,$t_2,$at $ST $c_2,$BNSZ($a0) + sltu $at,$c_3,$t_2 + $ADDU $c_1,$at mflo ($t_1,$a_2,$a_0) mfhi ($t_2,$a_2,$a_0) ___ @@ -2194,6 +2196,8 @@ sltu $at,$c_2,$t_1 $ADDU $c_3,$t_2,$at $ST $c_2,$BNSZ($a0) + sltu $at,$c_3,$t_2 + $ADDU $c_1,$at mflo ($t_1,$a_2,$a_0) mfhi ($t_2,$a_2,$a_0) ___ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/rsaz-avx2.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/rsaz-avx2.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/rsaz-avx2.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/rsaz-avx2.pl 2022-04-05 07:17:00.000000000 +0000 @@ -66,7 +66,7 @@ $addx = ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([0-9]+)\.([0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|based on LLVM) ([0-9]+)\.([0-9]+)/) { my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10 $avx = ($ver>=3.0) + ($ver>=3.01); $addx = ($ver>=3.03); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/rsaz-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/rsaz-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/rsaz-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/rsaz-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -81,7 +81,7 @@ $addx = ($1>=12); } -if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { +if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10 $addx = ($ver>=3.03); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/x86_64-mont5.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/x86_64-mont5.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/x86_64-mont5.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/x86_64-mont5.pl 2022-04-05 07:17:00.000000000 +0000 @@ -60,7 +60,7 @@ $addx = ($1>=12); } -if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { +if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10 $addx = ($ver>=3.03); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/x86_64-mont.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/x86_64-mont.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/asm/x86_64-mont.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/asm/x86_64-mont.pl 2022-04-05 07:17:00.000000000 +0000 @@ -75,7 +75,7 @@ $addx = ($1>=12); } -if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { +if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10 $addx = ($ver>=3.03); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_div.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_div.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_div.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_div.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -268,7 +268,7 @@ BIGNUM *tmp, *snum, *sdiv, *res; BN_ULONG *resp, *wnum, *wnumtop; BN_ULONG d0, d1; - int num_n, div_n; + int num_n, div_n, num_neg; assert(divisor->top > 0 && divisor->d[divisor->top - 1] != 0); @@ -326,7 +326,8 @@ /* Setup quotient */ if (!bn_wexpand(res, loop)) goto err; - res->neg = (num->neg ^ divisor->neg); + num_neg = num->neg; + res->neg = (num_neg ^ divisor->neg); res->top = loop; res->flags |= BN_FLG_FIXED_TOP; resp = &(res->d[loop]); @@ -442,7 +443,7 @@ *--resp = q; } /* snum holds remainder, it's as wide as divisor */ - snum->neg = num->neg; + snum->neg = num_neg; snum->top = div_n; snum->flags |= BN_FLG_FIXED_TOP; if (rm != NULL) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_exp2.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_exp2.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_exp2.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_exp2.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -32,7 +32,7 @@ bn_check_top(p2); bn_check_top(m); - if (!(m->d[0] & 1)) { + if (!BN_is_odd(m)) { BNerr(BN_F_BN_MOD_EXP2_MONT, BN_R_CALLED_WITH_EVEN_MODULUS); return 0; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_gcd.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_gcd.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_gcd.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_gcd.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -10,22 +10,189 @@ #include "internal/cryptlib.h" #include "bn_local.h" -/* solves ax == 1 (mod n) */ -static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in, - const BIGNUM *a, const BIGNUM *n, - BN_CTX *ctx); - -BIGNUM *BN_mod_inverse(BIGNUM *in, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx) +/* + * bn_mod_inverse_no_branch is a special version of BN_mod_inverse. It does + * not contain branches that may leak sensitive information. + * + * This is a static function, we ensure all callers in this file pass valid + * arguments: all passed pointers here are non-NULL. + */ +static ossl_inline +BIGNUM *bn_mod_inverse_no_branch(BIGNUM *in, + const BIGNUM *a, const BIGNUM *n, + BN_CTX *ctx, int *pnoinv) { - BIGNUM *rv; - int noinv; - rv = int_bn_mod_inverse(in, a, n, ctx, &noinv); - if (noinv) - BNerr(BN_F_BN_MOD_INVERSE, BN_R_NO_INVERSE); - return rv; + BIGNUM *A, *B, *X, *Y, *M, *D, *T, *R = NULL; + BIGNUM *ret = NULL; + int sign; + + bn_check_top(a); + bn_check_top(n); + + BN_CTX_start(ctx); + A = BN_CTX_get(ctx); + B = BN_CTX_get(ctx); + X = BN_CTX_get(ctx); + D = BN_CTX_get(ctx); + M = BN_CTX_get(ctx); + Y = BN_CTX_get(ctx); + T = BN_CTX_get(ctx); + if (T == NULL) + goto err; + + if (in == NULL) + R = BN_new(); + else + R = in; + if (R == NULL) + goto err; + + BN_one(X); + BN_zero(Y); + if (BN_copy(B, a) == NULL) + goto err; + if (BN_copy(A, n) == NULL) + goto err; + A->neg = 0; + + if (B->neg || (BN_ucmp(B, A) >= 0)) { + /* + * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, + * BN_div_no_branch will be called eventually. + */ + { + BIGNUM local_B; + bn_init(&local_B); + BN_with_flags(&local_B, B, BN_FLG_CONSTTIME); + if (!BN_nnmod(B, &local_B, A, ctx)) + goto err; + /* Ensure local_B goes out of scope before any further use of B */ + } + } + sign = -1; + /*- + * From B = a mod |n|, A = |n| it follows that + * + * 0 <= B < A, + * -sign*X*a == B (mod |n|), + * sign*Y*a == A (mod |n|). + */ + + while (!BN_is_zero(B)) { + BIGNUM *tmp; + + /*- + * 0 < B < A, + * (*) -sign*X*a == B (mod |n|), + * sign*Y*a == A (mod |n|) + */ + + /* + * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, + * BN_div_no_branch will be called eventually. + */ + { + BIGNUM local_A; + bn_init(&local_A); + BN_with_flags(&local_A, A, BN_FLG_CONSTTIME); + + /* (D, M) := (A/B, A%B) ... */ + if (!BN_div(D, M, &local_A, B, ctx)) + goto err; + /* Ensure local_A goes out of scope before any further use of A */ + } + + /*- + * Now + * A = D*B + M; + * thus we have + * (**) sign*Y*a == D*B + M (mod |n|). + */ + + tmp = A; /* keep the BIGNUM object, the value does not + * matter */ + + /* (A, B) := (B, A mod B) ... */ + A = B; + B = M; + /* ... so we have 0 <= B < A again */ + + /*- + * Since the former M is now B and the former B is now A, + * (**) translates into + * sign*Y*a == D*A + B (mod |n|), + * i.e. + * sign*Y*a - D*A == B (mod |n|). + * Similarly, (*) translates into + * -sign*X*a == A (mod |n|). + * + * Thus, + * sign*Y*a + D*sign*X*a == B (mod |n|), + * i.e. + * sign*(Y + D*X)*a == B (mod |n|). + * + * So if we set (X, Y, sign) := (Y + D*X, X, -sign), we arrive back at + * -sign*X*a == B (mod |n|), + * sign*Y*a == A (mod |n|). + * Note that X and Y stay non-negative all the time. + */ + + if (!BN_mul(tmp, D, X, ctx)) + goto err; + if (!BN_add(tmp, tmp, Y)) + goto err; + + M = Y; /* keep the BIGNUM object, the value does not + * matter */ + Y = X; + X = tmp; + sign = -sign; + } + + /*- + * The while loop (Euclid's algorithm) ends when + * A == gcd(a,n); + * we have + * sign*Y*a == A (mod |n|), + * where Y is non-negative. + */ + + if (sign < 0) { + if (!BN_sub(Y, n, Y)) + goto err; + } + /* Now Y*a == A (mod |n|). */ + + if (BN_is_one(A)) { + /* Y*a == 1 (mod |n|) */ + if (!Y->neg && BN_ucmp(Y, n) < 0) { + if (!BN_copy(R, Y)) + goto err; + } else { + if (!BN_nnmod(R, Y, n, ctx)) + goto err; + } + } else { + *pnoinv = 1; + /* caller sets the BN_R_NO_INVERSE error */ + goto err; + } + + ret = R; + *pnoinv = 0; + + err: + if ((ret == NULL) && (in == NULL)) + BN_free(R); + BN_CTX_end(ctx); + bn_check_top(ret); + return ret; } +/* + * This is an internal function, we assume all callers pass valid arguments: + * all pointers passed here are assumed non-NULL. + */ BIGNUM *int_bn_mod_inverse(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx, int *pnoinv) @@ -36,17 +203,15 @@ /* This is invalid input so we don't worry about constant time here */ if (BN_abs_is_word(n, 1) || BN_is_zero(n)) { - if (pnoinv != NULL) - *pnoinv = 1; + *pnoinv = 1; return NULL; } - if (pnoinv != NULL) - *pnoinv = 0; + *pnoinv = 0; if ((BN_get_flags(a, BN_FLG_CONSTTIME) != 0) || (BN_get_flags(n, BN_FLG_CONSTTIME) != 0)) { - return BN_mod_inverse_no_branch(in, a, n, ctx); + return bn_mod_inverse_no_branch(in, a, n, ctx, pnoinv); } bn_check_top(a); @@ -332,8 +497,7 @@ goto err; } } else { - if (pnoinv) - *pnoinv = 1; + *pnoinv = 1; goto err; } ret = R; @@ -345,175 +509,27 @@ return ret; } -/* - * BN_mod_inverse_no_branch is a special version of BN_mod_inverse. It does - * not contain branches that may leak sensitive information. - */ -static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in, - const BIGNUM *a, const BIGNUM *n, - BN_CTX *ctx) +/* solves ax == 1 (mod n) */ +BIGNUM *BN_mod_inverse(BIGNUM *in, + const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx) { - BIGNUM *A, *B, *X, *Y, *M, *D, *T, *R = NULL; - BIGNUM *ret = NULL; - int sign; - - bn_check_top(a); - bn_check_top(n); - - BN_CTX_start(ctx); - A = BN_CTX_get(ctx); - B = BN_CTX_get(ctx); - X = BN_CTX_get(ctx); - D = BN_CTX_get(ctx); - M = BN_CTX_get(ctx); - Y = BN_CTX_get(ctx); - T = BN_CTX_get(ctx); - if (T == NULL) - goto err; - - if (in == NULL) - R = BN_new(); - else - R = in; - if (R == NULL) - goto err; - - BN_one(X); - BN_zero(Y); - if (BN_copy(B, a) == NULL) - goto err; - if (BN_copy(A, n) == NULL) - goto err; - A->neg = 0; - - if (B->neg || (BN_ucmp(B, A) >= 0)) { - /* - * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, - * BN_div_no_branch will be called eventually. - */ - { - BIGNUM local_B; - bn_init(&local_B); - BN_with_flags(&local_B, B, BN_FLG_CONSTTIME); - if (!BN_nnmod(B, &local_B, A, ctx)) - goto err; - /* Ensure local_B goes out of scope before any further use of B */ - } - } - sign = -1; - /*- - * From B = a mod |n|, A = |n| it follows that - * - * 0 <= B < A, - * -sign*X*a == B (mod |n|), - * sign*Y*a == A (mod |n|). - */ - - while (!BN_is_zero(B)) { - BIGNUM *tmp; - - /*- - * 0 < B < A, - * (*) -sign*X*a == B (mod |n|), - * sign*Y*a == A (mod |n|) - */ - - /* - * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked, - * BN_div_no_branch will be called eventually. - */ - { - BIGNUM local_A; - bn_init(&local_A); - BN_with_flags(&local_A, A, BN_FLG_CONSTTIME); + BN_CTX *new_ctx = NULL; + BIGNUM *rv; + int noinv = 0; - /* (D, M) := (A/B, A%B) ... */ - if (!BN_div(D, M, &local_A, B, ctx)) - goto err; - /* Ensure local_A goes out of scope before any further use of A */ + if (ctx == NULL) { + ctx = new_ctx = BN_CTX_new(); + if (ctx == NULL) { + BNerr(BN_F_BN_MOD_INVERSE, ERR_R_MALLOC_FAILURE); + return NULL; } - - /*- - * Now - * A = D*B + M; - * thus we have - * (**) sign*Y*a == D*B + M (mod |n|). - */ - - tmp = A; /* keep the BIGNUM object, the value does not - * matter */ - - /* (A, B) := (B, A mod B) ... */ - A = B; - B = M; - /* ... so we have 0 <= B < A again */ - - /*- - * Since the former M is now B and the former B is now A, - * (**) translates into - * sign*Y*a == D*A + B (mod |n|), - * i.e. - * sign*Y*a - D*A == B (mod |n|). - * Similarly, (*) translates into - * -sign*X*a == A (mod |n|). - * - * Thus, - * sign*Y*a + D*sign*X*a == B (mod |n|), - * i.e. - * sign*(Y + D*X)*a == B (mod |n|). - * - * So if we set (X, Y, sign) := (Y + D*X, X, -sign), we arrive back at - * -sign*X*a == B (mod |n|), - * sign*Y*a == A (mod |n|). - * Note that X and Y stay non-negative all the time. - */ - - if (!BN_mul(tmp, D, X, ctx)) - goto err; - if (!BN_add(tmp, tmp, Y)) - goto err; - - M = Y; /* keep the BIGNUM object, the value does not - * matter */ - Y = X; - X = tmp; - sign = -sign; - } - - /*- - * The while loop (Euclid's algorithm) ends when - * A == gcd(a,n); - * we have - * sign*Y*a == A (mod |n|), - * where Y is non-negative. - */ - - if (sign < 0) { - if (!BN_sub(Y, n, Y)) - goto err; } - /* Now Y*a == A (mod |n|). */ - if (BN_is_one(A)) { - /* Y*a == 1 (mod |n|) */ - if (!Y->neg && BN_ucmp(Y, n) < 0) { - if (!BN_copy(R, Y)) - goto err; - } else { - if (!BN_nnmod(R, Y, n, ctx)) - goto err; - } - } else { - BNerr(BN_F_BN_MOD_INVERSE_NO_BRANCH, BN_R_NO_INVERSE); - goto err; - } - ret = R; - err: - if ((ret == NULL) && (in == NULL)) - BN_free(R); - BN_CTX_end(ctx); - bn_check_top(ret); - return ret; + rv = int_bn_mod_inverse(in, a, n, ctx, &noinv); + if (noinv) + BNerr(BN_F_BN_MOD_INVERSE, BN_R_NO_INVERSE); + BN_CTX_free(new_ctx); + return rv; } /*- diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -87,6 +87,15 @@ return &const_one; } +/* + * Old Visual Studio ARM compiler miscompiles BN_num_bits_word() + * https://mta.openssl.org/pipermail/openssl-users/2018-August/008465.html + */ +#if defined(_MSC_VER) && defined(_ARM_) && defined(_WIN32_WCE) \ + && _MSC_VER>=1400 && _MSC_VER<1501 +# define MS_BROKEN_BN_num_bits_word +# pragma optimize("", off) +#endif int BN_num_bits_word(BN_ULONG l) { BN_ULONG x, mask; @@ -131,6 +140,9 @@ return bits; } +#ifdef MS_BROKEN_BN_num_bits_word +# pragma optimize("", on) +#endif /* * This function still leaks `a->dmax`: it's caller's responsibility to @@ -322,15 +334,19 @@ BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b) { + int bn_words; + bn_check_top(b); + bn_words = BN_get_flags(b, BN_FLG_CONSTTIME) ? b->dmax : b->top; + if (a == b) return a; - if (bn_wexpand(a, b->top) == NULL) + if (bn_wexpand(a, bn_words) == NULL) return NULL; if (b->top > 0) - memcpy(a->d, b->d, sizeof(b->d[0]) * b->top); + memcpy(a->d, b->d, sizeof(b->d[0]) * bn_words); a->neg = b->neg; a->top = b->top; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_mpi.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_mpi.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_mpi.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_mpi.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -45,7 +45,7 @@ int neg = 0; BIGNUM *a = NULL; - if (n < 4) { + if (n < 4 || (d[0] & 0x80) != 0) { BNerr(BN_F_BN_MPI2BN, BN_R_INVALID_LENGTH); return NULL; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_prime.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_prime.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_prime.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_prime.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/bn/bn_prime.pl * - * Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1998-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_print.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_print.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_print.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_print.c 2022-04-05 07:17:00.000000000 +0000 @@ -142,7 +142,7 @@ continue; if (i == 0 || i > INT_MAX / 4) - goto err; + return 0; num = i + neg; if (bn == NULL) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_sqrt.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_sqrt.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/bn/bn_sqrt.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/bn/bn_sqrt.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -14,7 +14,8 @@ /* * Returns 'ret' such that ret^2 == a (mod p), using the Tonelli/Shanks * algorithm (cf. Henri Cohen, "A Course in Algebraic Computational Number - * Theory", algorithm 1.5.1). 'p' must be prime! + * Theory", algorithm 1.5.1). 'p' must be prime, otherwise an error or + * an incorrect "result" will be returned. */ { BIGNUM *ret = in; @@ -301,18 +302,23 @@ goto vrfy; } - /* find smallest i such that b^(2^i) = 1 */ - i = 1; - if (!BN_mod_sqr(t, b, p, ctx)) - goto end; - while (!BN_is_one(t)) { - i++; - if (i == e) { - BNerr(BN_F_BN_MOD_SQRT, BN_R_NOT_A_SQUARE); - goto end; + /* Find the smallest i, 0 < i < e, such that b^(2^i) = 1. */ + for (i = 1; i < e; i++) { + if (i == 1) { + if (!BN_mod_sqr(t, b, p, ctx)) + goto end; + + } else { + if (!BN_mod_mul(t, t, t, p, ctx)) + goto end; } - if (!BN_mod_mul(t, t, t, p, ctx)) - goto end; + if (BN_is_one(t)) + break; + } + /* If not found, a is not a square or p is not prime. */ + if (i >= e) { + BNerr(BN_F_BN_MOD_SQRT, BN_R_NOT_A_SQUARE); + goto end; } /* t := y^2^(e - i - 1) */ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/chacha/asm/chacha-armv8.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/chacha/asm/chacha-armv8.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/chacha/asm/chacha-armv8.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/chacha/asm/chacha-armv8.pl 2022-04-05 07:17:00.000000000 +0000 @@ -125,6 +125,7 @@ .text .extern OPENSSL_armcap_P +.hidden OPENSSL_armcap_P .align 5 .Lsigma: diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/chacha/asm/chacha-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/chacha/asm/chacha-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/chacha/asm/chacha-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/chacha/asm/chacha-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -85,7 +85,7 @@ $avx = ($1>=10) + ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } @@ -471,7 +471,7 @@ &por ($b,$t); } -my $xframe = $win64 ? 32+8 : 8; +my $xframe = $win64 ? 160+8 : 8; $code.=<<___; .type ChaCha20_ssse3,\@function,5 @@ -2499,7 +2499,7 @@ &vprold ($b,$b,7); } -my $xframe = $win64 ? 32+8 : 8; +my $xframe = $win64 ? 160+8 : 8; $code.=<<___; .type ChaCha20_avx512,\@function,5 @@ -2515,8 +2515,16 @@ sub \$64+$xframe,%rsp ___ $code.=<<___ if ($win64); - movaps %xmm6,-0x28(%r9) - movaps %xmm7,-0x18(%r9) + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) .Lavx512_body: ___ $code.=<<___; @@ -2683,8 +2691,16 @@ vzeroall ___ $code.=<<___ if ($win64); - movaps -0x28(%r9),%xmm6 - movaps -0x18(%r9),%xmm7 + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 ___ $code.=<<___; lea (%r9),%rsp @@ -2711,8 +2727,16 @@ sub \$64+$xframe,%rsp ___ $code.=<<___ if ($win64); - movaps %xmm6,-0x28(%r9) - movaps %xmm7,-0x18(%r9) + movaps %xmm6,-0xa8(%r9) + movaps %xmm7,-0x98(%r9) + movaps %xmm8,-0x88(%r9) + movaps %xmm9,-0x78(%r9) + movaps %xmm10,-0x68(%r9) + movaps %xmm11,-0x58(%r9) + movaps %xmm12,-0x48(%r9) + movaps %xmm13,-0x38(%r9) + movaps %xmm14,-0x28(%r9) + movaps %xmm15,-0x18(%r9) .Lavx512vl_body: ___ $code.=<<___; @@ -2836,8 +2860,16 @@ vzeroall ___ $code.=<<___ if ($win64); - movaps -0x28(%r9),%xmm6 - movaps -0x18(%r9),%xmm7 + movaps -0xa8(%r9),%xmm6 + movaps -0x98(%r9),%xmm7 + movaps -0x88(%r9),%xmm8 + movaps -0x78(%r9),%xmm9 + movaps -0x68(%r9),%xmm10 + movaps -0x58(%r9),%xmm11 + movaps -0x48(%r9),%xmm12 + movaps -0x38(%r9),%xmm13 + movaps -0x28(%r9),%xmm14 + movaps -0x18(%r9),%xmm15 ___ $code.=<<___; lea (%r9),%rsp diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/chacha/asm/chacha-x86.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/chacha/asm/chacha-x86.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/chacha/asm/chacha-x86.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/chacha/asm/chacha-x86.pl 2022-04-05 07:17:00.000000000 +0000 @@ -62,7 +62,7 @@ $1>=10); # first version supporting AVX $ymm=1 if ($xmm && !$ymm && - `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([0-9]+\.[0-9]+)/ && + `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|based on LLVM) ([0-9]+\.[0-9]+)/ && $2>=3.0); # first version supporting AVX $a="eax"; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cmac/cmac.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cmac/cmac.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cmac/cmac.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cmac/cmac.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -116,11 +116,18 @@ return 1; } /* Initialise context */ - if (cipher && !EVP_EncryptInit_ex(ctx->cctx, cipher, impl, NULL, NULL)) - return 0; + if (cipher != NULL) { + /* Ensure we can't use this ctx until we also have a key */ + ctx->nlast_block = -1; + if (!EVP_EncryptInit_ex(ctx->cctx, cipher, impl, NULL, NULL)) + return 0; + } /* Non-NULL key means initialisation complete */ - if (key) { + if (key != NULL) { int bl; + + /* If anything fails then ensure we can't use this ctx */ + ctx->nlast_block = -1; if (!EVP_CIPHER_CTX_cipher(ctx->cctx)) return 0; if (!EVP_CIPHER_CTX_set_key_length(ctx->cctx, keylen)) @@ -128,7 +135,7 @@ if (!EVP_EncryptInit_ex(ctx->cctx, NULL, NULL, key, zero_iv)) return 0; bl = EVP_CIPHER_CTX_block_size(ctx->cctx); - if (!EVP_Cipher(ctx->cctx, ctx->tbl, zero_iv, bl)) + if (EVP_Cipher(ctx->cctx, ctx->tbl, zero_iv, bl) <= 0) return 0; make_kn(ctx->k1, ctx->tbl, bl); make_kn(ctx->k2, ctx->k1, bl); @@ -166,12 +173,12 @@ return 1; data += nleft; /* Else not final block so encrypt it */ - if (!EVP_Cipher(ctx->cctx, ctx->tbl, ctx->last_block, bl)) + if (EVP_Cipher(ctx->cctx, ctx->tbl, ctx->last_block, bl) <= 0) return 0; } /* Encrypt all but one of the complete blocks left */ while (dlen > bl) { - if (!EVP_Cipher(ctx->cctx, ctx->tbl, data, bl)) + if (EVP_Cipher(ctx->cctx, ctx->tbl, data, bl) <= 0) return 0; dlen -= bl; data += bl; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cms/cms_env.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cms/cms_env.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cms/cms_env.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cms/cms_env.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -737,6 +737,7 @@ goto err; } + OPENSSL_clear_free(ec->key, ec->keylen); ec->key = ukey; ec->keylen = ukeylen; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cms/cms_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cms/cms_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cms/cms_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cms/cms_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -92,12 +92,13 @@ default: CMSerr(CMS_F_CMS_DATAINIT, CMS_R_UNSUPPORTED_TYPE); - return NULL; + goto err; } if (cmsbio) return BIO_push(cmsbio, cont); +err: if (!icont) BIO_free(cont); return NULL; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cms/cms_sd.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cms/cms_sd.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cms/cms_sd.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cms/cms_sd.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -897,8 +897,10 @@ ASN1_INTEGER *key = NULL; if (keysize > 0) { key = ASN1_INTEGER_new(); - if (key == NULL || !ASN1_INTEGER_set(key, keysize)) + if (key == NULL || !ASN1_INTEGER_set(key, keysize)) { + ASN1_INTEGER_free(key); return 0; + } } alg = X509_ALGOR_new(); if (alg == NULL) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cms/cms_smime.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cms/cms_smime.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/cms/cms_smime.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/cms/cms_smime.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -341,7 +341,7 @@ char *ptr; long len; len = BIO_get_mem_data(dcont, &ptr); - tmpin = BIO_new_mem_buf(ptr, len); + tmpin = (len == 0) ? dcont : BIO_new_mem_buf(ptr, len); if (tmpin == NULL) { CMSerr(CMS_F_CMS_VERIFY, ERR_R_MALLOC_FAILURE); goto err2; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/conf/conf_def.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/conf/conf_def.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/conf/conf_def.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/conf/conf_def.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -185,6 +185,7 @@ BUF_MEM *buff = NULL; char *s, *p, *end; int again; + int first_call = 1; long eline = 0; char btmp[DECIMAL_SIZE(eline) + 1]; CONF_VALUE *v = NULL, *tv; @@ -233,6 +234,19 @@ BIO_gets(in, p, CONFBUFSIZE - 1); p[CONFBUFSIZE - 1] = '\0'; ii = i = strlen(p); + if (first_call) { + /* Other BOMs imply unsupported multibyte encoding, + * so don't strip them and let the error raise */ + const unsigned char utf8_bom[3] = {0xEF, 0xBB, 0xBF}; + + if (i >= 3 && memcmp(p, utf8_bom, 3) == 0) { + memmove(p, p + 3, i - 3); + p[i - 3] = 0; + i -= 3; + ii -= 3; + } + first_call = 0; + } if (i == 0 && !again) { /* the currently processed BIO is at EOF */ BIO *parent; @@ -376,11 +390,13 @@ if (biosk == NULL) { if ((biosk = sk_BIO_new_null()) == NULL) { CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE); + BIO_free(next); goto err; } } if (!sk_BIO_push(biosk, in)) { CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE); + BIO_free(next); goto err; } /* continue with reading from the included BIO */ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/conf/conf_def.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/conf/conf_def.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/conf/conf_def.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/conf/conf_def.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/conf/keysets.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/dh/dh_ameth.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/dh/dh_ameth.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/dh/dh_ameth.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/dh/dh_ameth.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -629,16 +629,18 @@ goto err; pk = EVP_PKEY_CTX_get0_pkey(pctx); - if (!pk) - goto err; - if (pk->type != EVP_PKEY_DHX) + if (pk == NULL || pk->type != EVP_PKEY_DHX) goto err; + /* Get parameters from parent key */ dhpeer = DHparams_dup(pk->pkey.dh); + if (dhpeer == NULL) + goto err; + /* We have parameters now set public key */ plen = ASN1_STRING_length(pubkey); p = ASN1_STRING_get0_data(pubkey); - if (!p || !plen) + if (p == NULL || plen == 0) goto err; if ((public_key = d2i_ASN1_INTEGER(NULL, &p, plen)) == NULL) { @@ -655,6 +657,7 @@ pkpeer = EVP_PKEY_new(); if (pkpeer == NULL) goto err; + EVP_PKEY_assign(pkpeer, pk->ameth->pkey_id, dhpeer); dhpeer = NULL; if (EVP_PKEY_derive_set_peer(pctx, pkpeer) > 0) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/dh/dh_key.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/dh/dh_key.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/dh/dh_key.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/dh/dh_key.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -25,18 +25,45 @@ return dh->meth->generate_key(dh); } +/*- + * NB: This function is inherently not constant time due to the + * RFC 5246 (8.1.2) padding style that strips leading zero bytes. + */ int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh) { - return dh->meth->compute_key(key, pub_key, dh); + int ret = 0, i; + volatile size_t npad = 0, mask = 1; + + /* compute the key; ret is constant unless compute_key is external */ + if ((ret = dh->meth->compute_key(key, pub_key, dh)) <= 0) + return ret; + + /* count leading zero bytes, yet still touch all bytes */ + for (i = 0; i < ret; i++) { + mask &= !key[i]; + npad += mask; + } + + /* unpad key */ + ret -= npad; + /* key-dependent memory access, potentially leaking npad / ret */ + memmove(key, key + npad, ret); + /* key-dependent memory access, potentially leaking npad / ret */ + memset(key + ret, 0, npad); + + return ret; } int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh) { int rv, pad; + + /* rv is constant unless compute_key is external */ rv = dh->meth->compute_key(key, pub_key, dh); if (rv <= 0) return rv; pad = BN_num_bytes(dh->p) - rv; + /* pad is constant (zero) unless compute_key is external */ if (pad > 0) { memmove(key + pad, key, rv); memset(key, 0, pad); @@ -212,7 +239,7 @@ goto err; } - ret = BN_bn2bin(tmp, key); + ret = BN_bn2binpad(tmp, key, BN_num_bytes(dh->p)); err: BN_CTX_end(ctx); BN_CTX_free(ctx); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/dsa/dsa_prn.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/dsa/dsa_prn.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/dsa/dsa_prn.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/dsa/dsa_prn.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -49,9 +49,11 @@ EVP_PKEY *pk; int ret; pk = EVP_PKEY_new(); - if (pk == NULL || !EVP_PKEY_set1_DSA(pk, (DSA *)x)) + if (pk == NULL) return 0; - ret = EVP_PKEY_print_private(bp, pk, off, NULL); + ret = EVP_PKEY_set1_DSA(pk, (DSA *)x); + if (ret) + ret = EVP_PKEY_print_private(bp, pk, off, NULL); EVP_PKEY_free(pk); return ret; } @@ -61,9 +63,11 @@ EVP_PKEY *pk; int ret; pk = EVP_PKEY_new(); - if (pk == NULL || !EVP_PKEY_set1_DSA(pk, (DSA *)x)) + if (pk == NULL) return 0; - ret = EVP_PKEY_print_params(bp, pk, 4, NULL); + ret = EVP_PKEY_set1_DSA(pk, (DSA *)x); + if (ret) + ret = EVP_PKEY_print_params(bp, pk, 4, NULL); EVP_PKEY_free(pk); return ret; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/dso/dso_win32.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/dso/dso_win32.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/dso/dso_win32.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/dso/dso_win32.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -565,8 +565,8 @@ /* Enumerate the modules to find one which includes me. */ do { - if ((uintptr_t) addr >= (uintptr_t) me32.modBaseAddr && - (uintptr_t) addr < (uintptr_t) (me32.modBaseAddr + me32.modBaseSize)) { + if ((size_t) addr >= (size_t) me32.modBaseAddr && + (size_t) addr < (size_t) (me32.modBaseAddr + me32.modBaseSize)) { (*close_snap) (hModuleSnap); FreeLibrary(dll); # ifdef _WIN32_WCE diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl 2022-04-05 07:17:00.000000000 +0000 @@ -1517,9 +1517,9 @@ ldr $t2,[sp,#32*18+12] @ ~is_equal(S1,S2) mvn $t0,$t0 @ -1/0 -> 0/-1 mvn $t1,$t1 @ -1/0 -> 0/-1 - orr $a0,$t0 - orr $a0,$t1 - orrs $a0,$t2 @ set flags + orr $a0,$a0,$t0 + orr $a0,$a0,$t1 + orrs $a0,$a0,$t2 @ set flags @ if(~is_equal(U1,U2) | in1infty | in2infty | ~is_equal(S1,S2)) bne .Ladd_proceed diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl 1970-01-01 00:00:00.000000000 +0000 @@ -1,2080 +0,0 @@ -#! /usr/bin/env perl -# Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. -# Copyright (c) 2014, Intel Corporation. All Rights Reserved. -# -# Licensed under the OpenSSL license (the "License"). You may not use -# this file except in compliance with the License. You can obtain a copy -# in the file LICENSE in the source distribution or at -# https://www.openssl.org/source/license.html -# -# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1) -# (1) Intel Corporation, Israel Development Center, Haifa, Israel -# (2) University of Haifa, Israel -# -# Reference: -# S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with -# 256 Bit Primes" - -$flavour = shift; -$output = shift; -if ($flavour =~ /\./) { $output = $flavour; undef $flavour; } - -$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); - -$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; -( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or -( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or -die "can't locate x86_64-xlate.pl"; - -open OUT,"| \"$^X\" $xlate $flavour $output"; -*STDOUT=*OUT; - -if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1` - =~ /GNU assembler version ([2-9]\.[0-9]+)/) { - $avx = ($1>=2.19) + ($1>=2.22); - $addx = ($1>=2.23); -} - -if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) && - `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) { - $avx = ($1>=2.09) + ($1>=2.10); - $addx = ($1>=2.10); -} - -if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) && - `ml64 2>&1` =~ /Version ([0-9]+)\./) { - $avx = ($1>=10) + ($1>=11); - $addx = ($1>=12); -} - -if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([0-9]+)\.([0-9]+)/) { - my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10 - $avx = ($ver>=3.0) + ($ver>=3.01); - $addx = ($ver>=3.03); -} - -if ($avx>=2) {{ -$digit_size = "\$29"; -$n_digits = "\$9"; - -$code.=<<___; -.text - -.align 64 -.LAVX2_AND_MASK: -.LAVX2_POLY: -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x000001ff, 0x000001ff, 0x000001ff, 0x000001ff -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.quad 0x00040000, 0x00040000, 0x00040000, 0x00040000 -.quad 0x1fe00000, 0x1fe00000, 0x1fe00000, 0x1fe00000 -.quad 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff - -.LAVX2_POLY_x2: -.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC -.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC -.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC -.quad 0x400007FC, 0x400007FC, 0x400007FC, 0x400007FC -.quad 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE -.quad 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE -.quad 0x400FFFFE, 0x400FFFFE, 0x400FFFFE, 0x400FFFFE -.quad 0x7F7FFFFE, 0x7F7FFFFE, 0x7F7FFFFE, 0x7F7FFFFE -.quad 0x03FFFFFC, 0x03FFFFFC, 0x03FFFFFC, 0x03FFFFFC - -.LAVX2_POLY_x8: -.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8 -.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8 -.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8 -.quad 0x80000FF8, 0x80000FF8, 0x80000FF8, 0x80000FF8 -.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC -.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC -.quad 0x801FFFFC, 0x801FFFFC, 0x801FFFFC, 0x801FFFFC -.quad 0xFEFFFFFC, 0xFEFFFFFC, 0xFEFFFFFC, 0xFEFFFFFC -.quad 0x07FFFFF8, 0x07FFFFF8, 0x07FFFFF8, 0x07FFFFF8 - -.LONE: -.quad 0x00000020, 0x00000020, 0x00000020, 0x00000020 -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.quad 0x1fffc000, 0x1fffc000, 0x1fffc000, 0x1fffc000 -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x1f7fffff, 0x1f7fffff, 0x1f7fffff, 0x1f7fffff -.quad 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -# RR = 2^266 mod p in AVX2 format, to transform from the native OpenSSL -# Montgomery form (*2^256) to our format (*2^261) - -.LTO_MONT_AVX2: -.quad 0x00000400, 0x00000400, 0x00000400, 0x00000400 -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.quad 0x1ff80000, 0x1ff80000, 0x1ff80000, 0x1ff80000 -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x0fffffff, 0x0fffffff, 0x0fffffff, 0x0fffffff -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x00000003, 0x00000003, 0x00000003, 0x00000003 - -.LFROM_MONT_AVX2: -.quad 0x00000001, 0x00000001, 0x00000001, 0x00000001 -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 -.quad 0x1ffffe00, 0x1ffffe00, 0x1ffffe00, 0x1ffffe00 -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff -.quad 0x1ffbffff, 0x1ffbffff, 0x1ffbffff, 0x1ffbffff -.quad 0x001fffff, 0x001fffff, 0x001fffff, 0x001fffff -.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000 - -.LIntOne: -.long 1,1,1,1,1,1,1,1 -___ - -{ -# This function receives a pointer to an array of four affine points -# (X, Y, <1>) and rearranges the data for AVX2 execution, while -# converting it to 2^29 radix redundant form - -my ($X0,$X1,$X2,$X3, $Y0,$Y1,$Y2,$Y3, - $T0,$T1,$T2,$T3, $T4,$T5,$T6,$T7)=map("%ymm$_",(0..15)); - -$code.=<<___; -.globl ecp_nistz256_avx2_transpose_convert -.type ecp_nistz256_avx2_transpose_convert,\@function,2 -.align 64 -ecp_nistz256_avx2_transpose_convert: - vzeroupper -___ -$code.=<<___ if ($win64); - lea -8-16*10(%rsp), %rsp - vmovaps %xmm6, -8-16*10(%rax) - vmovaps %xmm7, -8-16*9(%rax) - vmovaps %xmm8, -8-16*8(%rax) - vmovaps %xmm9, -8-16*7(%rax) - vmovaps %xmm10, -8-16*6(%rax) - vmovaps %xmm11, -8-16*5(%rax) - vmovaps %xmm12, -8-16*4(%rax) - vmovaps %xmm13, -8-16*3(%rax) - vmovaps %xmm14, -8-16*2(%rax) - vmovaps %xmm15, -8-16*1(%rax) -___ -$code.=<<___; - # Load the data - vmovdqa 32*0(%rsi), $X0 - lea 112(%rsi), %rax # size optimization - vmovdqa 32*1(%rsi), $Y0 - lea .LAVX2_AND_MASK(%rip), %rdx - vmovdqa 32*2(%rsi), $X1 - vmovdqa 32*3(%rsi), $Y1 - vmovdqa 32*4-112(%rax), $X2 - vmovdqa 32*5-112(%rax), $Y2 - vmovdqa 32*6-112(%rax), $X3 - vmovdqa 32*7-112(%rax), $Y3 - - # Transpose X and Y independently - vpunpcklqdq $X1, $X0, $T0 # T0 = [B2 A2 B0 A0] - vpunpcklqdq $X3, $X2, $T1 # T1 = [D2 C2 D0 C0] - vpunpckhqdq $X1, $X0, $T2 # T2 = [B3 A3 B1 A1] - vpunpckhqdq $X3, $X2, $T3 # T3 = [D3 C3 D1 C1] - - vpunpcklqdq $Y1, $Y0, $T4 - vpunpcklqdq $Y3, $Y2, $T5 - vpunpckhqdq $Y1, $Y0, $T6 - vpunpckhqdq $Y3, $Y2, $T7 - - vperm2i128 \$0x20, $T1, $T0, $X0 # X0 = [D0 C0 B0 A0] - vperm2i128 \$0x20, $T3, $T2, $X1 # X1 = [D1 C1 B1 A1] - vperm2i128 \$0x31, $T1, $T0, $X2 # X2 = [D2 C2 B2 A2] - vperm2i128 \$0x31, $T3, $T2, $X3 # X3 = [D3 C3 B3 A3] - - vperm2i128 \$0x20, $T5, $T4, $Y0 - vperm2i128 \$0x20, $T7, $T6, $Y1 - vperm2i128 \$0x31, $T5, $T4, $Y2 - vperm2i128 \$0x31, $T7, $T6, $Y3 - vmovdqa (%rdx), $T7 - - vpand (%rdx), $X0, $T0 # out[0] = in[0] & mask; - vpsrlq \$29, $X0, $X0 - vpand $T7, $X0, $T1 # out[1] = (in[0] >> shift) & mask; - vpsrlq \$29, $X0, $X0 - vpsllq \$6, $X1, $T2 - vpxor $X0, $T2, $T2 - vpand $T7, $T2, $T2 # out[2] = ((in[0] >> (shift*2)) ^ (in[1] << (64-shift*2))) & mask; - vpsrlq \$23, $X1, $X1 - vpand $T7, $X1, $T3 # out[3] = (in[1] >> ((shift*3)%64)) & mask; - vpsrlq \$29, $X1, $X1 - vpsllq \$12, $X2, $T4 - vpxor $X1, $T4, $T4 - vpand $T7, $T4, $T4 # out[4] = ((in[1] >> ((shift*4)%64)) ^ (in[2] << (64*2-shift*4))) & mask; - vpsrlq \$17, $X2, $X2 - vpand $T7, $X2, $T5 # out[5] = (in[2] >> ((shift*5)%64)) & mask; - vpsrlq \$29, $X2, $X2 - vpsllq \$18, $X3, $T6 - vpxor $X2, $T6, $T6 - vpand $T7, $T6, $T6 # out[6] = ((in[2] >> ((shift*6)%64)) ^ (in[3] << (64*3-shift*6))) & mask; - vpsrlq \$11, $X3, $X3 - vmovdqa $T0, 32*0(%rdi) - lea 112(%rdi), %rax # size optimization - vpand $T7, $X3, $T0 # out[7] = (in[3] >> ((shift*7)%64)) & mask; - vpsrlq \$29, $X3, $X3 # out[8] = (in[3] >> ((shift*8)%64)) & mask; - - vmovdqa $T1, 32*1(%rdi) - vmovdqa $T2, 32*2(%rdi) - vmovdqa $T3, 32*3(%rdi) - vmovdqa $T4, 32*4-112(%rax) - vmovdqa $T5, 32*5-112(%rax) - vmovdqa $T6, 32*6-112(%rax) - vmovdqa $T0, 32*7-112(%rax) - vmovdqa $X3, 32*8-112(%rax) - lea 448(%rdi), %rax # size optimization - - vpand $T7, $Y0, $T0 # out[0] = in[0] & mask; - vpsrlq \$29, $Y0, $Y0 - vpand $T7, $Y0, $T1 # out[1] = (in[0] >> shift) & mask; - vpsrlq \$29, $Y0, $Y0 - vpsllq \$6, $Y1, $T2 - vpxor $Y0, $T2, $T2 - vpand $T7, $T2, $T2 # out[2] = ((in[0] >> (shift*2)) ^ (in[1] << (64-shift*2))) & mask; - vpsrlq \$23, $Y1, $Y1 - vpand $T7, $Y1, $T3 # out[3] = (in[1] >> ((shift*3)%64)) & mask; - vpsrlq \$29, $Y1, $Y1 - vpsllq \$12, $Y2, $T4 - vpxor $Y1, $T4, $T4 - vpand $T7, $T4, $T4 # out[4] = ((in[1] >> ((shift*4)%64)) ^ (in[2] << (64*2-shift*4))) & mask; - vpsrlq \$17, $Y2, $Y2 - vpand $T7, $Y2, $T5 # out[5] = (in[2] >> ((shift*5)%64)) & mask; - vpsrlq \$29, $Y2, $Y2 - vpsllq \$18, $Y3, $T6 - vpxor $Y2, $T6, $T6 - vpand $T7, $T6, $T6 # out[6] = ((in[2] >> ((shift*6)%64)) ^ (in[3] << (64*3-shift*6))) & mask; - vpsrlq \$11, $Y3, $Y3 - vmovdqa $T0, 32*9-448(%rax) - vpand $T7, $Y3, $T0 # out[7] = (in[3] >> ((shift*7)%64)) & mask; - vpsrlq \$29, $Y3, $Y3 # out[8] = (in[3] >> ((shift*8)%64)) & mask; - - vmovdqa $T1, 32*10-448(%rax) - vmovdqa $T2, 32*11-448(%rax) - vmovdqa $T3, 32*12-448(%rax) - vmovdqa $T4, 32*13-448(%rax) - vmovdqa $T5, 32*14-448(%rax) - vmovdqa $T6, 32*15-448(%rax) - vmovdqa $T0, 32*16-448(%rax) - vmovdqa $Y3, 32*17-448(%rax) - - vzeroupper -___ -$code.=<<___ if ($win64); - movaps 16*0(%rsp), %xmm6 - movaps 16*1(%rsp), %xmm7 - movaps 16*2(%rsp), %xmm8 - movaps 16*3(%rsp), %xmm9 - movaps 16*4(%rsp), %xmm10 - movaps 16*5(%rsp), %xmm11 - movaps 16*6(%rsp), %xmm12 - movaps 16*7(%rsp), %xmm13 - movaps 16*8(%rsp), %xmm14 - movaps 16*9(%rsp), %xmm15 - lea 8+16*10(%rsp), %rsp -___ -$code.=<<___; - ret -.size ecp_nistz256_avx2_transpose_convert,.-ecp_nistz256_avx2_transpose_convert -___ -} -{ -################################################################################ -# This function receives a pointer to an array of four AVX2 formatted points -# (X, Y, Z) convert the data to normal representation, and rearranges the data - -my ($D0,$D1,$D2,$D3, $D4,$D5,$D6,$D7, $D8)=map("%ymm$_",(0..8)); -my ($T0,$T1,$T2,$T3, $T4,$T5,$T6)=map("%ymm$_",(9..15)); - -$code.=<<___; - -.globl ecp_nistz256_avx2_convert_transpose_back -.type ecp_nistz256_avx2_convert_transpose_back,\@function,2 -.align 32 -ecp_nistz256_avx2_convert_transpose_back: - vzeroupper -___ -$code.=<<___ if ($win64); - lea -8-16*10(%rsp), %rsp - vmovaps %xmm6, -8-16*10(%rax) - vmovaps %xmm7, -8-16*9(%rax) - vmovaps %xmm8, -8-16*8(%rax) - vmovaps %xmm9, -8-16*7(%rax) - vmovaps %xmm10, -8-16*6(%rax) - vmovaps %xmm11, -8-16*5(%rax) - vmovaps %xmm12, -8-16*4(%rax) - vmovaps %xmm13, -8-16*3(%rax) - vmovaps %xmm14, -8-16*2(%rax) - vmovaps %xmm15, -8-16*1(%rax) -___ -$code.=<<___; - mov \$3, %ecx - -.Lconv_loop: - vmovdqa 32*0(%rsi), $D0 - lea 160(%rsi), %rax # size optimization - vmovdqa 32*1(%rsi), $D1 - vmovdqa 32*2(%rsi), $D2 - vmovdqa 32*3(%rsi), $D3 - vmovdqa 32*4-160(%rax), $D4 - vmovdqa 32*5-160(%rax), $D5 - vmovdqa 32*6-160(%rax), $D6 - vmovdqa 32*7-160(%rax), $D7 - vmovdqa 32*8-160(%rax), $D8 - - vpsllq \$29, $D1, $D1 - vpsllq \$58, $D2, $T0 - vpaddq $D1, $D0, $D0 - vpaddq $T0, $D0, $D0 # out[0] = (in[0]) ^ (in[1] << shift*1) ^ (in[2] << shift*2); - - vpsrlq \$6, $D2, $D2 - vpsllq \$23, $D3, $D3 - vpsllq \$52, $D4, $T1 - vpaddq $D2, $D3, $D3 - vpaddq $D3, $T1, $D1 # out[1] = (in[2] >> (64*1-shift*2)) ^ (in[3] << shift*3%64) ^ (in[4] << shift*4%64); - - vpsrlq \$12, $D4, $D4 - vpsllq \$17, $D5, $D5 - vpsllq \$46, $D6, $T2 - vpaddq $D4, $D5, $D5 - vpaddq $D5, $T2, $D2 # out[2] = (in[4] >> (64*2-shift*4)) ^ (in[5] << shift*5%64) ^ (in[6] << shift*6%64); - - vpsrlq \$18, $D6, $D6 - vpsllq \$11, $D7, $D7 - vpsllq \$40, $D8, $T3 - vpaddq $D6, $D7, $D7 - vpaddq $D7, $T3, $D3 # out[3] = (in[6] >> (64*3-shift*6)) ^ (in[7] << shift*7%64) ^ (in[8] << shift*8%64); - - vpunpcklqdq $D1, $D0, $T0 # T0 = [B2 A2 B0 A0] - vpunpcklqdq $D3, $D2, $T1 # T1 = [D2 C2 D0 C0] - vpunpckhqdq $D1, $D0, $T2 # T2 = [B3 A3 B1 A1] - vpunpckhqdq $D3, $D2, $T3 # T3 = [D3 C3 D1 C1] - - vperm2i128 \$0x20, $T1, $T0, $D0 # X0 = [D0 C0 B0 A0] - vperm2i128 \$0x20, $T3, $T2, $D1 # X1 = [D1 C1 B1 A1] - vperm2i128 \$0x31, $T1, $T0, $D2 # X2 = [D2 C2 B2 A2] - vperm2i128 \$0x31, $T3, $T2, $D3 # X3 = [D3 C3 B3 A3] - - vmovdqa $D0, 32*0(%rdi) - vmovdqa $D1, 32*3(%rdi) - vmovdqa $D2, 32*6(%rdi) - vmovdqa $D3, 32*9(%rdi) - - lea 32*9(%rsi), %rsi - lea 32*1(%rdi), %rdi - - dec %ecx - jnz .Lconv_loop - - vzeroupper -___ -$code.=<<___ if ($win64); - movaps 16*0(%rsp), %xmm6 - movaps 16*1(%rsp), %xmm7 - movaps 16*2(%rsp), %xmm8 - movaps 16*3(%rsp), %xmm9 - movaps 16*4(%rsp), %xmm10 - movaps 16*5(%rsp), %xmm11 - movaps 16*6(%rsp), %xmm12 - movaps 16*7(%rsp), %xmm13 - movaps 16*8(%rsp), %xmm14 - movaps 16*9(%rsp), %xmm15 - lea 8+16*10(%rsp), %rsp -___ -$code.=<<___; - ret -.size ecp_nistz256_avx2_convert_transpose_back,.-ecp_nistz256_avx2_convert_transpose_back -___ -} -{ -my ($r_ptr,$a_ptr,$b_ptr,$itr)=("%rdi","%rsi","%rdx","%ecx"); -my ($ACC0,$ACC1,$ACC2,$ACC3,$ACC4,$ACC5,$ACC6,$ACC7,$ACC8)=map("%ymm$_",(0..8)); -my ($B,$Y,$T0,$AND_MASK,$OVERFLOW)=map("%ymm$_",(9..13)); - -sub NORMALIZE { -my $ret=<<___; - vpsrlq $digit_size, $ACC0, $T0 - vpand $AND_MASK, $ACC0, $ACC0 - vpaddq $T0, $ACC1, $ACC1 - - vpsrlq $digit_size, $ACC1, $T0 - vpand $AND_MASK, $ACC1, $ACC1 - vpaddq $T0, $ACC2, $ACC2 - - vpsrlq $digit_size, $ACC2, $T0 - vpand $AND_MASK, $ACC2, $ACC2 - vpaddq $T0, $ACC3, $ACC3 - - vpsrlq $digit_size, $ACC3, $T0 - vpand $AND_MASK, $ACC3, $ACC3 - vpaddq $T0, $ACC4, $ACC4 - - vpsrlq $digit_size, $ACC4, $T0 - vpand $AND_MASK, $ACC4, $ACC4 - vpaddq $T0, $ACC5, $ACC5 - - vpsrlq $digit_size, $ACC5, $T0 - vpand $AND_MASK, $ACC5, $ACC5 - vpaddq $T0, $ACC6, $ACC6 - - vpsrlq $digit_size, $ACC6, $T0 - vpand $AND_MASK, $ACC6, $ACC6 - vpaddq $T0, $ACC7, $ACC7 - - vpsrlq $digit_size, $ACC7, $T0 - vpand $AND_MASK, $ACC7, $ACC7 - vpaddq $T0, $ACC8, $ACC8 - #vpand $AND_MASK, $ACC8, $ACC8 -___ - $ret; -} - -sub STORE { -my $ret=<<___; - vmovdqa $ACC0, 32*0(%rdi) - lea 160(%rdi), %rax # size optimization - vmovdqa $ACC1, 32*1(%rdi) - vmovdqa $ACC2, 32*2(%rdi) - vmovdqa $ACC3, 32*3(%rdi) - vmovdqa $ACC4, 32*4-160(%rax) - vmovdqa $ACC5, 32*5-160(%rax) - vmovdqa $ACC6, 32*6-160(%rax) - vmovdqa $ACC7, 32*7-160(%rax) - vmovdqa $ACC8, 32*8-160(%rax) -___ - $ret; -} - -$code.=<<___; -.type avx2_normalize,\@abi-omnipotent -.align 32 -avx2_normalize: - vpsrlq $digit_size, $ACC0, $T0 - vpand $AND_MASK, $ACC0, $ACC0 - vpaddq $T0, $ACC1, $ACC1 - - vpsrlq $digit_size, $ACC1, $T0 - vpand $AND_MASK, $ACC1, $ACC1 - vpaddq $T0, $ACC2, $ACC2 - - vpsrlq $digit_size, $ACC2, $T0 - vpand $AND_MASK, $ACC2, $ACC2 - vpaddq $T0, $ACC3, $ACC3 - - vpsrlq $digit_size, $ACC3, $T0 - vpand $AND_MASK, $ACC3, $ACC3 - vpaddq $T0, $ACC4, $ACC4 - - vpsrlq $digit_size, $ACC4, $T0 - vpand $AND_MASK, $ACC4, $ACC4 - vpaddq $T0, $ACC5, $ACC5 - - vpsrlq $digit_size, $ACC5, $T0 - vpand $AND_MASK, $ACC5, $ACC5 - vpaddq $T0, $ACC6, $ACC6 - - vpsrlq $digit_size, $ACC6, $T0 - vpand $AND_MASK, $ACC6, $ACC6 - vpaddq $T0, $ACC7, $ACC7 - - vpsrlq $digit_size, $ACC7, $T0 - vpand $AND_MASK, $ACC7, $ACC7 - vpaddq $T0, $ACC8, $ACC8 - #vpand $AND_MASK, $ACC8, $ACC8 - - ret -.size avx2_normalize,.-avx2_normalize - -.type avx2_normalize_n_store,\@abi-omnipotent -.align 32 -avx2_normalize_n_store: - vpsrlq $digit_size, $ACC0, $T0 - vpand $AND_MASK, $ACC0, $ACC0 - vpaddq $T0, $ACC1, $ACC1 - - vpsrlq $digit_size, $ACC1, $T0 - vpand $AND_MASK, $ACC1, $ACC1 - vmovdqa $ACC0, 32*0(%rdi) - lea 160(%rdi), %rax # size optimization - vpaddq $T0, $ACC2, $ACC2 - - vpsrlq $digit_size, $ACC2, $T0 - vpand $AND_MASK, $ACC2, $ACC2 - vmovdqa $ACC1, 32*1(%rdi) - vpaddq $T0, $ACC3, $ACC3 - - vpsrlq $digit_size, $ACC3, $T0 - vpand $AND_MASK, $ACC3, $ACC3 - vmovdqa $ACC2, 32*2(%rdi) - vpaddq $T0, $ACC4, $ACC4 - - vpsrlq $digit_size, $ACC4, $T0 - vpand $AND_MASK, $ACC4, $ACC4 - vmovdqa $ACC3, 32*3(%rdi) - vpaddq $T0, $ACC5, $ACC5 - - vpsrlq $digit_size, $ACC5, $T0 - vpand $AND_MASK, $ACC5, $ACC5 - vmovdqa $ACC4, 32*4-160(%rax) - vpaddq $T0, $ACC6, $ACC6 - - vpsrlq $digit_size, $ACC6, $T0 - vpand $AND_MASK, $ACC6, $ACC6 - vmovdqa $ACC5, 32*5-160(%rax) - vpaddq $T0, $ACC7, $ACC7 - - vpsrlq $digit_size, $ACC7, $T0 - vpand $AND_MASK, $ACC7, $ACC7 - vmovdqa $ACC6, 32*6-160(%rax) - vpaddq $T0, $ACC8, $ACC8 - #vpand $AND_MASK, $ACC8, $ACC8 - vmovdqa $ACC7, 32*7-160(%rax) - vmovdqa $ACC8, 32*8-160(%rax) - - ret -.size avx2_normalize_n_store,.-avx2_normalize_n_store - -################################################################################ -# void avx2_mul_x4(void* RESULTx4, void *Ax4, void *Bx4); -.type avx2_mul_x4,\@abi-omnipotent -.align 32 -avx2_mul_x4: - lea .LAVX2_POLY(%rip), %rax - - vpxor $ACC0, $ACC0, $ACC0 - vpxor $ACC1, $ACC1, $ACC1 - vpxor $ACC2, $ACC2, $ACC2 - vpxor $ACC3, $ACC3, $ACC3 - vpxor $ACC4, $ACC4, $ACC4 - vpxor $ACC5, $ACC5, $ACC5 - vpxor $ACC6, $ACC6, $ACC6 - vpxor $ACC7, $ACC7, $ACC7 - - vmovdqa 32*7(%rax), %ymm14 - vmovdqa 32*8(%rax), %ymm15 - - mov $n_digits, $itr - lea -512($a_ptr), $a_ptr # strategic bias to control u-op density - jmp .Lavx2_mul_x4_loop - -.align 32 -.Lavx2_mul_x4_loop: - vmovdqa 32*0($b_ptr), $B - lea 32*1($b_ptr), $b_ptr - - vpmuludq 32*0+512($a_ptr), $B, $T0 - vpmuludq 32*1+512($a_ptr), $B, $OVERFLOW # borrow $OVERFLOW - vpaddq $T0, $ACC0, $ACC0 - vpmuludq 32*2+512($a_ptr), $B, $T0 - vpaddq $OVERFLOW, $ACC1, $ACC1 - vpand $AND_MASK, $ACC0, $Y - vpmuludq 32*3+512($a_ptr), $B, $OVERFLOW - vpaddq $T0, $ACC2, $ACC2 - vpmuludq 32*4+512($a_ptr), $B, $T0 - vpaddq $OVERFLOW, $ACC3, $ACC3 - vpmuludq 32*5+512($a_ptr), $B, $OVERFLOW - vpaddq $T0, $ACC4, $ACC4 - vpmuludq 32*6+512($a_ptr), $B, $T0 - vpaddq $OVERFLOW, $ACC5, $ACC5 - vpmuludq 32*7+512($a_ptr), $B, $OVERFLOW - vpaddq $T0, $ACC6, $ACC6 - - # Skip some multiplications, optimizing for the constant poly - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpmuludq 32*8+512($a_ptr), $B, $ACC8 - vpaddq $T0, $ACC0, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - .byte 0x67 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $OVERFLOW - .byte 0x67 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $T0 - vpaddq $OVERFLOW, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $OVERFLOW - vpaddq $T0, $ACC7, $ACC6 - vpaddq $OVERFLOW, $ACC8, $ACC7 - - dec $itr - jnz .Lavx2_mul_x4_loop - - vpxor $ACC8, $ACC8, $ACC8 - - ret -.size avx2_mul_x4,.-avx2_mul_x4 - -# Function optimized for the constant 1 -################################################################################ -# void avx2_mul_by1_x4(void* RESULTx4, void *Ax4); -.type avx2_mul_by1_x4,\@abi-omnipotent -.align 32 -avx2_mul_by1_x4: - lea .LAVX2_POLY(%rip), %rax - - vpxor $ACC0, $ACC0, $ACC0 - vpxor $ACC1, $ACC1, $ACC1 - vpxor $ACC2, $ACC2, $ACC2 - vpxor $ACC3, $ACC3, $ACC3 - vpxor $ACC4, $ACC4, $ACC4 - vpxor $ACC5, $ACC5, $ACC5 - vpxor $ACC6, $ACC6, $ACC6 - vpxor $ACC7, $ACC7, $ACC7 - vpxor $ACC8, $ACC8, $ACC8 - - vmovdqa 32*3+.LONE(%rip), %ymm14 - vmovdqa 32*7+.LONE(%rip), %ymm15 - - mov $n_digits, $itr - jmp .Lavx2_mul_by1_x4_loop - -.align 32 -.Lavx2_mul_by1_x4_loop: - vmovdqa 32*0($a_ptr), $B - .byte 0x48,0x8d,0xb6,0x20,0,0,0 # lea 32*1($a_ptr), $a_ptr - - vpsllq \$5, $B, $OVERFLOW - vpmuludq %ymm14, $B, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC3 - .byte 0x67 - vpmuludq $AND_MASK, $B, $T0 - vpand $AND_MASK, $ACC0, $Y - vpaddq $T0, $ACC4, $ACC4 - vpaddq $T0, $ACC5, $ACC5 - vpaddq $T0, $ACC6, $ACC6 - vpsllq \$23, $B, $T0 - - .byte 0x67,0x67 - vpmuludq %ymm15, $B, $OVERFLOW - vpsubq $T0, $ACC6, $ACC6 - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpaddq $T0, $ACC0, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - .byte 0x67,0x67 - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $OVERFLOW - vmovdqa $ACC5, $ACC4 - vpmuludq 32*7(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC6, $ACC5 - vpaddq $T0, $ACC7, $ACC6 - vpmuludq 32*8(%rax), $Y, $ACC7 - - dec $itr - jnz .Lavx2_mul_by1_x4_loop - - ret -.size avx2_mul_by1_x4,.-avx2_mul_by1_x4 - -################################################################################ -# void avx2_sqr_x4(void* RESULTx4, void *Ax4, void *Bx4); -.type avx2_sqr_x4,\@abi-omnipotent -.align 32 -avx2_sqr_x4: - lea .LAVX2_POLY(%rip), %rax - - vmovdqa 32*7(%rax), %ymm14 - vmovdqa 32*8(%rax), %ymm15 - - vmovdqa 32*0($a_ptr), $B - vmovdqa 32*1($a_ptr), $ACC1 - vmovdqa 32*2($a_ptr), $ACC2 - vmovdqa 32*3($a_ptr), $ACC3 - vmovdqa 32*4($a_ptr), $ACC4 - vmovdqa 32*5($a_ptr), $ACC5 - vmovdqa 32*6($a_ptr), $ACC6 - vmovdqa 32*7($a_ptr), $ACC7 - vpaddq $ACC1, $ACC1, $ACC1 # 2*$ACC0..7 - vmovdqa 32*8($a_ptr), $ACC8 - vpaddq $ACC2, $ACC2, $ACC2 - vmovdqa $ACC1, 32*0(%rcx) - vpaddq $ACC3, $ACC3, $ACC3 - vmovdqa $ACC2, 32*1(%rcx) - vpaddq $ACC4, $ACC4, $ACC4 - vmovdqa $ACC3, 32*2(%rcx) - vpaddq $ACC5, $ACC5, $ACC5 - vmovdqa $ACC4, 32*3(%rcx) - vpaddq $ACC6, $ACC6, $ACC6 - vmovdqa $ACC5, 32*4(%rcx) - vpaddq $ACC7, $ACC7, $ACC7 - vmovdqa $ACC6, 32*5(%rcx) - vpaddq $ACC8, $ACC8, $ACC8 - vmovdqa $ACC7, 32*6(%rcx) - vmovdqa $ACC8, 32*7(%rcx) - - #itr 1 - vpmuludq $B, $B, $ACC0 - vpmuludq $B, $ACC1, $ACC1 - vpand $AND_MASK, $ACC0, $Y - vpmuludq $B, $ACC2, $ACC2 - vpmuludq $B, $ACC3, $ACC3 - vpmuludq $B, $ACC4, $ACC4 - vpmuludq $B, $ACC5, $ACC5 - vpmuludq $B, $ACC6, $ACC6 - vpmuludq $AND_MASK, $Y, $T0 - vpmuludq $B, $ACC7, $ACC7 - vpmuludq $B, $ACC8, $ACC8 - vmovdqa 32*1($a_ptr), $B - - vpaddq $T0, $ACC0, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - #itr 2 - vpmuludq $B, $B, $OVERFLOW - vpand $AND_MASK, $ACC0, $Y - vpmuludq 32*1(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC1, $ACC1 - vpmuludq 32*2(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC2, $ACC2 - vpmuludq 32*3(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC3, $ACC3 - vpmuludq 32*4(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC4, $ACC4 - vpmuludq 32*5(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC5, $ACC5 - vpmuludq 32*6(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC6, $ACC6 - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpmuludq 32*7(%rcx), $B, $ACC8 - vmovdqa 32*2($a_ptr), $B - vpaddq $T0, $ACC0, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - #itr 3 - vpmuludq $B, $B, $T0 - vpand $AND_MASK, $ACC0, $Y - vpmuludq 32*2(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC2, $ACC2 - vpmuludq 32*3(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC3, $ACC3 - vpmuludq 32*4(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC4, $ACC4 - vpmuludq 32*5(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC5, $ACC5 - vpmuludq 32*6(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC6, $ACC6 - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpmuludq 32*7(%rcx), $B, $ACC8 - vmovdqa 32*3($a_ptr), $B - vpaddq $T0, $ACC0, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpand $AND_MASK, $ACC0, $Y - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - #itr 4 - vpmuludq $B, $B, $OVERFLOW - vpmuludq 32*3(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC3, $ACC3 - vpmuludq 32*4(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC4, $ACC4 - vpmuludq 32*5(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC5, $ACC5 - vpmuludq 32*6(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC6, $ACC6 - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpmuludq 32*7(%rcx), $B, $ACC8 - vmovdqa 32*4($a_ptr), $B - vpaddq $T0, $ACC0, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpand $AND_MASK, $ACC0, $Y - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - #itr 5 - vpmuludq $B, $B, $T0 - vpmuludq 32*4(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC4, $ACC4 - vpmuludq 32*5(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC5, $ACC5 - vpmuludq 32*6(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC6, $ACC6 - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpmuludq 32*7(%rcx), $B, $ACC8 - vmovdqa 32*5($a_ptr), $B - vpaddq $T0, $ACC0, $OVERFLOW - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3+.LAVX2_POLY(%rip), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpand $AND_MASK, $ACC0, $Y - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - #itr 6 - vpmuludq $B, $B, $OVERFLOW - vpmuludq 32*5(%rcx), $B, $T0 - vpaddq $OVERFLOW, $ACC5, $ACC5 - vpmuludq 32*6(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC6, $ACC6 - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpmuludq 32*7(%rcx), $B, $ACC8 - vmovdqa 32*6($a_ptr), $B - vpaddq $T0, $ACC0, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpand $AND_MASK, $ACC0, $Y - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - #itr 7 - vpmuludq $B, $B, $T0 - vpmuludq 32*6(%rcx), $B, $OVERFLOW - vpaddq $T0, $ACC6, $ACC6 - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpmuludq 32*7(%rcx), $B, $ACC8 - vmovdqa 32*7($a_ptr), $B - vpaddq $T0, $ACC0, $OVERFLOW - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpand $AND_MASK, $ACC0, $Y - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - #itr 8 - vpmuludq $B, $B, $OVERFLOW - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC7 - vpmuludq 32*7(%rcx), $B, $ACC8 - vmovdqa 32*8($a_ptr), $B - vpaddq $T0, $ACC0, $OVERFLOW - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpand $AND_MASK, $ACC0, $Y - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - #itr 9 - vpmuludq $B, $B, $ACC8 - - vpmuludq $AND_MASK, $Y, $T0 - vpaddq $T0, $ACC0, $OVERFLOW - vpsrlq $digit_size, $OVERFLOW, $OVERFLOW - vpaddq $T0, $ACC1, $ACC0 - vpaddq $T0, $ACC2, $ACC1 - vpmuludq 32*3(%rax), $Y, $T0 - vpaddq $OVERFLOW, $ACC0, $ACC0 - vpaddq $T0, $ACC3, $ACC2 - vmovdqa $ACC4, $ACC3 - vpsllq \$18, $Y, $T0 - vmovdqa $ACC5, $ACC4 - vpmuludq %ymm14, $Y, $OVERFLOW - vpaddq $T0, $ACC6, $ACC5 - vpmuludq %ymm15, $Y, $T0 - vpaddq $OVERFLOW, $ACC7, $ACC6 - vpaddq $T0, $ACC8, $ACC7 - - vpxor $ACC8, $ACC8, $ACC8 - - ret -.size avx2_sqr_x4,.-avx2_sqr_x4 - -################################################################################ -# void avx2_sub_x4(void* RESULTx4, void *Ax4, void *Bx4); -.type avx2_sub_x4,\@abi-omnipotent -.align 32 -avx2_sub_x4: - vmovdqa 32*0($a_ptr), $ACC0 - lea 160($a_ptr), $a_ptr - lea .LAVX2_POLY_x8+128(%rip), %rax - lea 128($b_ptr), $b_ptr - vmovdqa 32*1-160($a_ptr), $ACC1 - vmovdqa 32*2-160($a_ptr), $ACC2 - vmovdqa 32*3-160($a_ptr), $ACC3 - vmovdqa 32*4-160($a_ptr), $ACC4 - vmovdqa 32*5-160($a_ptr), $ACC5 - vmovdqa 32*6-160($a_ptr), $ACC6 - vmovdqa 32*7-160($a_ptr), $ACC7 - vmovdqa 32*8-160($a_ptr), $ACC8 - - vpaddq 32*0-128(%rax), $ACC0, $ACC0 - vpaddq 32*1-128(%rax), $ACC1, $ACC1 - vpaddq 32*2-128(%rax), $ACC2, $ACC2 - vpaddq 32*3-128(%rax), $ACC3, $ACC3 - vpaddq 32*4-128(%rax), $ACC4, $ACC4 - vpaddq 32*5-128(%rax), $ACC5, $ACC5 - vpaddq 32*6-128(%rax), $ACC6, $ACC6 - vpaddq 32*7-128(%rax), $ACC7, $ACC7 - vpaddq 32*8-128(%rax), $ACC8, $ACC8 - - vpsubq 32*0-128($b_ptr), $ACC0, $ACC0 - vpsubq 32*1-128($b_ptr), $ACC1, $ACC1 - vpsubq 32*2-128($b_ptr), $ACC2, $ACC2 - vpsubq 32*3-128($b_ptr), $ACC3, $ACC3 - vpsubq 32*4-128($b_ptr), $ACC4, $ACC4 - vpsubq 32*5-128($b_ptr), $ACC5, $ACC5 - vpsubq 32*6-128($b_ptr), $ACC6, $ACC6 - vpsubq 32*7-128($b_ptr), $ACC7, $ACC7 - vpsubq 32*8-128($b_ptr), $ACC8, $ACC8 - - ret -.size avx2_sub_x4,.-avx2_sub_x4 - -.type avx2_select_n_store,\@abi-omnipotent -.align 32 -avx2_select_n_store: - vmovdqa `8+32*9*8`(%rsp), $Y - vpor `8+32*9*8+32`(%rsp), $Y, $Y - - vpandn $ACC0, $Y, $ACC0 - vpandn $ACC1, $Y, $ACC1 - vpandn $ACC2, $Y, $ACC2 - vpandn $ACC3, $Y, $ACC3 - vpandn $ACC4, $Y, $ACC4 - vpandn $ACC5, $Y, $ACC5 - vpandn $ACC6, $Y, $ACC6 - vmovdqa `8+32*9*8+32`(%rsp), $B - vpandn $ACC7, $Y, $ACC7 - vpandn `8+32*9*8`(%rsp), $B, $B - vpandn $ACC8, $Y, $ACC8 - - vpand 32*0(%rsi), $B, $T0 - lea 160(%rsi), %rax - vpand 32*1(%rsi), $B, $Y - vpxor $T0, $ACC0, $ACC0 - vpand 32*2(%rsi), $B, $T0 - vpxor $Y, $ACC1, $ACC1 - vpand 32*3(%rsi), $B, $Y - vpxor $T0, $ACC2, $ACC2 - vpand 32*4-160(%rax), $B, $T0 - vpxor $Y, $ACC3, $ACC3 - vpand 32*5-160(%rax), $B, $Y - vpxor $T0, $ACC4, $ACC4 - vpand 32*6-160(%rax), $B, $T0 - vpxor $Y, $ACC5, $ACC5 - vpand 32*7-160(%rax), $B, $Y - vpxor $T0, $ACC6, $ACC6 - vpand 32*8-160(%rax), $B, $T0 - vmovdqa `8+32*9*8+32`(%rsp), $B - vpxor $Y, $ACC7, $ACC7 - - vpand 32*0(%rdx), $B, $Y - lea 160(%rdx), %rax - vpxor $T0, $ACC8, $ACC8 - vpand 32*1(%rdx), $B, $T0 - vpxor $Y, $ACC0, $ACC0 - vpand 32*2(%rdx), $B, $Y - vpxor $T0, $ACC1, $ACC1 - vpand 32*3(%rdx), $B, $T0 - vpxor $Y, $ACC2, $ACC2 - vpand 32*4-160(%rax), $B, $Y - vpxor $T0, $ACC3, $ACC3 - vpand 32*5-160(%rax), $B, $T0 - vpxor $Y, $ACC4, $ACC4 - vpand 32*6-160(%rax), $B, $Y - vpxor $T0, $ACC5, $ACC5 - vpand 32*7-160(%rax), $B, $T0 - vpxor $Y, $ACC6, $ACC6 - vpand 32*8-160(%rax), $B, $Y - vpxor $T0, $ACC7, $ACC7 - vpxor $Y, $ACC8, $ACC8 - `&STORE` - - ret -.size avx2_select_n_store,.-avx2_select_n_store -___ -$code.=<<___ if (0); # inlined -################################################################################ -# void avx2_mul_by2_x4(void* RESULTx4, void *Ax4); -.type avx2_mul_by2_x4,\@abi-omnipotent -.align 32 -avx2_mul_by2_x4: - vmovdqa 32*0($a_ptr), $ACC0 - lea 160($a_ptr), %rax - vmovdqa 32*1($a_ptr), $ACC1 - vmovdqa 32*2($a_ptr), $ACC2 - vmovdqa 32*3($a_ptr), $ACC3 - vmovdqa 32*4-160(%rax), $ACC4 - vmovdqa 32*5-160(%rax), $ACC5 - vmovdqa 32*6-160(%rax), $ACC6 - vmovdqa 32*7-160(%rax), $ACC7 - vmovdqa 32*8-160(%rax), $ACC8 - - vpaddq $ACC0, $ACC0, $ACC0 - vpaddq $ACC1, $ACC1, $ACC1 - vpaddq $ACC2, $ACC2, $ACC2 - vpaddq $ACC3, $ACC3, $ACC3 - vpaddq $ACC4, $ACC4, $ACC4 - vpaddq $ACC5, $ACC5, $ACC5 - vpaddq $ACC6, $ACC6, $ACC6 - vpaddq $ACC7, $ACC7, $ACC7 - vpaddq $ACC8, $ACC8, $ACC8 - - ret -.size avx2_mul_by2_x4,.-avx2_mul_by2_x4 -___ -my ($r_ptr_in,$a_ptr_in,$b_ptr_in)=("%rdi","%rsi","%rdx"); -my ($r_ptr,$a_ptr,$b_ptr)=("%r8","%r9","%r10"); - -$code.=<<___; -################################################################################ -# void ecp_nistz256_avx2_point_add_affine_x4(void* RESULTx4, void *Ax4, void *Bx4); -.globl ecp_nistz256_avx2_point_add_affine_x4 -.type ecp_nistz256_avx2_point_add_affine_x4,\@function,3 -.align 32 -ecp_nistz256_avx2_point_add_affine_x4: - mov %rsp, %rax - push %rbp - vzeroupper -___ -$code.=<<___ if ($win64); - lea -16*10(%rsp), %rsp - vmovaps %xmm6, -8-16*10(%rax) - vmovaps %xmm7, -8-16*9(%rax) - vmovaps %xmm8, -8-16*8(%rax) - vmovaps %xmm9, -8-16*7(%rax) - vmovaps %xmm10, -8-16*6(%rax) - vmovaps %xmm11, -8-16*5(%rax) - vmovaps %xmm12, -8-16*4(%rax) - vmovaps %xmm13, -8-16*3(%rax) - vmovaps %xmm14, -8-16*2(%rax) - vmovaps %xmm15, -8-16*1(%rax) -___ -$code.=<<___; - lea -8(%rax), %rbp - -# Result + 32*0 = Result.X -# Result + 32*9 = Result.Y -# Result + 32*18 = Result.Z - -# A + 32*0 = A.X -# A + 32*9 = A.Y -# A + 32*18 = A.Z - -# B + 32*0 = B.X -# B + 32*9 = B.Y - - sub \$`32*9*8+32*2+32*8`, %rsp - and \$-64, %rsp - - mov $r_ptr_in, $r_ptr - mov $a_ptr_in, $a_ptr - mov $b_ptr_in, $b_ptr - - vmovdqa 32*0($a_ptr_in), %ymm0 - vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK - vpxor %ymm1, %ymm1, %ymm1 - lea 256($a_ptr_in), %rax # size optimization - vpor 32*1($a_ptr_in), %ymm0, %ymm0 - vpor 32*2($a_ptr_in), %ymm0, %ymm0 - vpor 32*3($a_ptr_in), %ymm0, %ymm0 - vpor 32*4-256(%rax), %ymm0, %ymm0 - lea 256(%rax), %rcx # size optimization - vpor 32*5-256(%rax), %ymm0, %ymm0 - vpor 32*6-256(%rax), %ymm0, %ymm0 - vpor 32*7-256(%rax), %ymm0, %ymm0 - vpor 32*8-256(%rax), %ymm0, %ymm0 - vpor 32*9-256(%rax), %ymm0, %ymm0 - vpor 32*10-256(%rax), %ymm0, %ymm0 - vpor 32*11-256(%rax), %ymm0, %ymm0 - vpor 32*12-512(%rcx), %ymm0, %ymm0 - vpor 32*13-512(%rcx), %ymm0, %ymm0 - vpor 32*14-512(%rcx), %ymm0, %ymm0 - vpor 32*15-512(%rcx), %ymm0, %ymm0 - vpor 32*16-512(%rcx), %ymm0, %ymm0 - vpor 32*17-512(%rcx), %ymm0, %ymm0 - vpcmpeqq %ymm1, %ymm0, %ymm0 - vmovdqa %ymm0, `32*9*8`(%rsp) - - vpxor %ymm1, %ymm1, %ymm1 - vmovdqa 32*0($b_ptr), %ymm0 - lea 256($b_ptr), %rax # size optimization - vpor 32*1($b_ptr), %ymm0, %ymm0 - vpor 32*2($b_ptr), %ymm0, %ymm0 - vpor 32*3($b_ptr), %ymm0, %ymm0 - vpor 32*4-256(%rax), %ymm0, %ymm0 - lea 256(%rax), %rcx # size optimization - vpor 32*5-256(%rax), %ymm0, %ymm0 - vpor 32*6-256(%rax), %ymm0, %ymm0 - vpor 32*7-256(%rax), %ymm0, %ymm0 - vpor 32*8-256(%rax), %ymm0, %ymm0 - vpor 32*9-256(%rax), %ymm0, %ymm0 - vpor 32*10-256(%rax), %ymm0, %ymm0 - vpor 32*11-256(%rax), %ymm0, %ymm0 - vpor 32*12-512(%rcx), %ymm0, %ymm0 - vpor 32*13-512(%rcx), %ymm0, %ymm0 - vpor 32*14-512(%rcx), %ymm0, %ymm0 - vpor 32*15-512(%rcx), %ymm0, %ymm0 - vpor 32*16-512(%rcx), %ymm0, %ymm0 - vpor 32*17-512(%rcx), %ymm0, %ymm0 - vpcmpeqq %ymm1, %ymm0, %ymm0 - vmovdqa %ymm0, `32*9*8+32`(%rsp) - - # Z1^2 = Z1*Z1 - lea `32*9*2`($a_ptr), %rsi - lea `32*9*2`(%rsp), %rdi - lea `32*9*8+32*2`(%rsp), %rcx # temporary vector - call avx2_sqr_x4 - call avx2_normalize_n_store - - # U2 = X2*Z1^2 - lea `32*9*0`($b_ptr), %rsi - lea `32*9*2`(%rsp), %rdx - lea `32*9*0`(%rsp), %rdi - call avx2_mul_x4 - #call avx2_normalize - `&STORE` - - # S2 = Z1*Z1^2 = Z1^3 - lea `32*9*2`($a_ptr), %rsi - lea `32*9*2`(%rsp), %rdx - lea `32*9*1`(%rsp), %rdi - call avx2_mul_x4 - call avx2_normalize_n_store - - # S2 = S2*Y2 = Y2*Z1^3 - lea `32*9*1`($b_ptr), %rsi - lea `32*9*1`(%rsp), %rdx - lea `32*9*1`(%rsp), %rdi - call avx2_mul_x4 - call avx2_normalize_n_store - - # H = U2 - U1 = U2 - X1 - lea `32*9*0`(%rsp), %rsi - lea `32*9*0`($a_ptr), %rdx - lea `32*9*3`(%rsp), %rdi - call avx2_sub_x4 - call avx2_normalize_n_store - - # R = S2 - S1 = S2 - Y1 - lea `32*9*1`(%rsp), %rsi - lea `32*9*1`($a_ptr), %rdx - lea `32*9*4`(%rsp), %rdi - call avx2_sub_x4 - call avx2_normalize_n_store - - # Z3 = H*Z1*Z2 - lea `32*9*3`(%rsp), %rsi - lea `32*9*2`($a_ptr), %rdx - lea `32*9*2`($r_ptr), %rdi - call avx2_mul_x4 - call avx2_normalize - - lea .LONE(%rip), %rsi - lea `32*9*2`($a_ptr), %rdx - call avx2_select_n_store - - # R^2 = R^2 - lea `32*9*4`(%rsp), %rsi - lea `32*9*6`(%rsp), %rdi - lea `32*9*8+32*2`(%rsp), %rcx # temporary vector - call avx2_sqr_x4 - call avx2_normalize_n_store - - # H^2 = H^2 - lea `32*9*3`(%rsp), %rsi - lea `32*9*5`(%rsp), %rdi - call avx2_sqr_x4 - call avx2_normalize_n_store - - # H^3 = H^2*H - lea `32*9*3`(%rsp), %rsi - lea `32*9*5`(%rsp), %rdx - lea `32*9*7`(%rsp), %rdi - call avx2_mul_x4 - call avx2_normalize_n_store - - # U2 = U1*H^2 - lea `32*9*0`($a_ptr), %rsi - lea `32*9*5`(%rsp), %rdx - lea `32*9*0`(%rsp), %rdi - call avx2_mul_x4 - #call avx2_normalize - `&STORE` - - # Hsqr = U2*2 - #lea 32*9*0(%rsp), %rsi - #lea 32*9*5(%rsp), %rdi - #call avx2_mul_by2_x4 - - vpaddq $ACC0, $ACC0, $ACC0 # inlined avx2_mul_by2_x4 - lea `32*9*5`(%rsp), %rdi - vpaddq $ACC1, $ACC1, $ACC1 - vpaddq $ACC2, $ACC2, $ACC2 - vpaddq $ACC3, $ACC3, $ACC3 - vpaddq $ACC4, $ACC4, $ACC4 - vpaddq $ACC5, $ACC5, $ACC5 - vpaddq $ACC6, $ACC6, $ACC6 - vpaddq $ACC7, $ACC7, $ACC7 - vpaddq $ACC8, $ACC8, $ACC8 - call avx2_normalize_n_store - - # X3 = R^2 - H^3 - #lea 32*9*6(%rsp), %rsi - #lea 32*9*7(%rsp), %rdx - #lea 32*9*5(%rsp), %rcx - #lea 32*9*0($r_ptr), %rdi - #call avx2_sub_x4 - #NORMALIZE - #STORE - - # X3 = X3 - U2*2 - #lea 32*9*0($r_ptr), %rsi - #lea 32*9*0($r_ptr), %rdi - #call avx2_sub_x4 - #NORMALIZE - #STORE - - lea `32*9*6+128`(%rsp), %rsi - lea .LAVX2_POLY_x2+128(%rip), %rax - lea `32*9*7+128`(%rsp), %rdx - lea `32*9*5+128`(%rsp), %rcx - lea `32*9*0`($r_ptr), %rdi - - vmovdqa 32*0-128(%rsi), $ACC0 - vmovdqa 32*1-128(%rsi), $ACC1 - vmovdqa 32*2-128(%rsi), $ACC2 - vmovdqa 32*3-128(%rsi), $ACC3 - vmovdqa 32*4-128(%rsi), $ACC4 - vmovdqa 32*5-128(%rsi), $ACC5 - vmovdqa 32*6-128(%rsi), $ACC6 - vmovdqa 32*7-128(%rsi), $ACC7 - vmovdqa 32*8-128(%rsi), $ACC8 - - vpaddq 32*0-128(%rax), $ACC0, $ACC0 - vpaddq 32*1-128(%rax), $ACC1, $ACC1 - vpaddq 32*2-128(%rax), $ACC2, $ACC2 - vpaddq 32*3-128(%rax), $ACC3, $ACC3 - vpaddq 32*4-128(%rax), $ACC4, $ACC4 - vpaddq 32*5-128(%rax), $ACC5, $ACC5 - vpaddq 32*6-128(%rax), $ACC6, $ACC6 - vpaddq 32*7-128(%rax), $ACC7, $ACC7 - vpaddq 32*8-128(%rax), $ACC8, $ACC8 - - vpsubq 32*0-128(%rdx), $ACC0, $ACC0 - vpsubq 32*1-128(%rdx), $ACC1, $ACC1 - vpsubq 32*2-128(%rdx), $ACC2, $ACC2 - vpsubq 32*3-128(%rdx), $ACC3, $ACC3 - vpsubq 32*4-128(%rdx), $ACC4, $ACC4 - vpsubq 32*5-128(%rdx), $ACC5, $ACC5 - vpsubq 32*6-128(%rdx), $ACC6, $ACC6 - vpsubq 32*7-128(%rdx), $ACC7, $ACC7 - vpsubq 32*8-128(%rdx), $ACC8, $ACC8 - - vpsubq 32*0-128(%rcx), $ACC0, $ACC0 - vpsubq 32*1-128(%rcx), $ACC1, $ACC1 - vpsubq 32*2-128(%rcx), $ACC2, $ACC2 - vpsubq 32*3-128(%rcx), $ACC3, $ACC3 - vpsubq 32*4-128(%rcx), $ACC4, $ACC4 - vpsubq 32*5-128(%rcx), $ACC5, $ACC5 - vpsubq 32*6-128(%rcx), $ACC6, $ACC6 - vpsubq 32*7-128(%rcx), $ACC7, $ACC7 - vpsubq 32*8-128(%rcx), $ACC8, $ACC8 - call avx2_normalize - - lea 32*0($b_ptr), %rsi - lea 32*0($a_ptr), %rdx - call avx2_select_n_store - - # H = U2 - X3 - lea `32*9*0`(%rsp), %rsi - lea `32*9*0`($r_ptr), %rdx - lea `32*9*3`(%rsp), %rdi - call avx2_sub_x4 - call avx2_normalize_n_store - - # - lea `32*9*3`(%rsp), %rsi - lea `32*9*4`(%rsp), %rdx - lea `32*9*3`(%rsp), %rdi - call avx2_mul_x4 - call avx2_normalize_n_store - - # - lea `32*9*7`(%rsp), %rsi - lea `32*9*1`($a_ptr), %rdx - lea `32*9*1`(%rsp), %rdi - call avx2_mul_x4 - call avx2_normalize_n_store - - # - lea `32*9*3`(%rsp), %rsi - lea `32*9*1`(%rsp), %rdx - lea `32*9*1`($r_ptr), %rdi - call avx2_sub_x4 - call avx2_normalize - - lea 32*9($b_ptr), %rsi - lea 32*9($a_ptr), %rdx - call avx2_select_n_store - - #lea 32*9*0($r_ptr), %rsi - #lea 32*9*0($r_ptr), %rdi - #call avx2_mul_by1_x4 - #NORMALIZE - #STORE - - lea `32*9*1`($r_ptr), %rsi - lea `32*9*1`($r_ptr), %rdi - call avx2_mul_by1_x4 - call avx2_normalize_n_store - - vzeroupper -___ -$code.=<<___ if ($win64); - movaps %xmm6, -16*10(%rbp) - movaps %xmm7, -16*9(%rbp) - movaps %xmm8, -16*8(%rbp) - movaps %xmm9, -16*7(%rbp) - movaps %xmm10, -16*6(%rbp) - movaps %xmm11, -16*5(%rbp) - movaps %xmm12, -16*4(%rbp) - movaps %xmm13, -16*3(%rbp) - movaps %xmm14, -16*2(%rbp) - movaps %xmm15, -16*1(%rbp) -___ -$code.=<<___; - mov %rbp, %rsp - pop %rbp - ret -.size ecp_nistz256_avx2_point_add_affine_x4,.-ecp_nistz256_avx2_point_add_affine_x4 - -################################################################################ -# void ecp_nistz256_avx2_point_add_affines_x4(void* RESULTx4, void *Ax4, void *Bx4); -.globl ecp_nistz256_avx2_point_add_affines_x4 -.type ecp_nistz256_avx2_point_add_affines_x4,\@function,3 -.align 32 -ecp_nistz256_avx2_point_add_affines_x4: - mov %rsp, %rax - push %rbp - vzeroupper -___ -$code.=<<___ if ($win64); - lea -16*10(%rsp), %rsp - vmovaps %xmm6, -8-16*10(%rax) - vmovaps %xmm7, -8-16*9(%rax) - vmovaps %xmm8, -8-16*8(%rax) - vmovaps %xmm9, -8-16*7(%rax) - vmovaps %xmm10, -8-16*6(%rax) - vmovaps %xmm11, -8-16*5(%rax) - vmovaps %xmm12, -8-16*4(%rax) - vmovaps %xmm13, -8-16*3(%rax) - vmovaps %xmm14, -8-16*2(%rax) - vmovaps %xmm15, -8-16*1(%rax) -___ -$code.=<<___; - lea -8(%rax), %rbp - -# Result + 32*0 = Result.X -# Result + 32*9 = Result.Y -# Result + 32*18 = Result.Z - -# A + 32*0 = A.X -# A + 32*9 = A.Y - -# B + 32*0 = B.X -# B + 32*9 = B.Y - - sub \$`32*9*8+32*2+32*8`, %rsp - and \$-64, %rsp - - mov $r_ptr_in, $r_ptr - mov $a_ptr_in, $a_ptr - mov $b_ptr_in, $b_ptr - - vmovdqa 32*0($a_ptr_in), %ymm0 - vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK - vpxor %ymm1, %ymm1, %ymm1 - lea 256($a_ptr_in), %rax # size optimization - vpor 32*1($a_ptr_in), %ymm0, %ymm0 - vpor 32*2($a_ptr_in), %ymm0, %ymm0 - vpor 32*3($a_ptr_in), %ymm0, %ymm0 - vpor 32*4-256(%rax), %ymm0, %ymm0 - lea 256(%rax), %rcx # size optimization - vpor 32*5-256(%rax), %ymm0, %ymm0 - vpor 32*6-256(%rax), %ymm0, %ymm0 - vpor 32*7-256(%rax), %ymm0, %ymm0 - vpor 32*8-256(%rax), %ymm0, %ymm0 - vpor 32*9-256(%rax), %ymm0, %ymm0 - vpor 32*10-256(%rax), %ymm0, %ymm0 - vpor 32*11-256(%rax), %ymm0, %ymm0 - vpor 32*12-512(%rcx), %ymm0, %ymm0 - vpor 32*13-512(%rcx), %ymm0, %ymm0 - vpor 32*14-512(%rcx), %ymm0, %ymm0 - vpor 32*15-512(%rcx), %ymm0, %ymm0 - vpor 32*16-512(%rcx), %ymm0, %ymm0 - vpor 32*17-512(%rcx), %ymm0, %ymm0 - vpcmpeqq %ymm1, %ymm0, %ymm0 - vmovdqa %ymm0, `32*9*8`(%rsp) - - vpxor %ymm1, %ymm1, %ymm1 - vmovdqa 32*0($b_ptr), %ymm0 - lea 256($b_ptr), %rax # size optimization - vpor 32*1($b_ptr), %ymm0, %ymm0 - vpor 32*2($b_ptr), %ymm0, %ymm0 - vpor 32*3($b_ptr), %ymm0, %ymm0 - vpor 32*4-256(%rax), %ymm0, %ymm0 - lea 256(%rax), %rcx # size optimization - vpor 32*5-256(%rax), %ymm0, %ymm0 - vpor 32*6-256(%rax), %ymm0, %ymm0 - vpor 32*7-256(%rax), %ymm0, %ymm0 - vpor 32*8-256(%rax), %ymm0, %ymm0 - vpor 32*9-256(%rax), %ymm0, %ymm0 - vpor 32*10-256(%rax), %ymm0, %ymm0 - vpor 32*11-256(%rax), %ymm0, %ymm0 - vpor 32*12-512(%rcx), %ymm0, %ymm0 - vpor 32*13-512(%rcx), %ymm0, %ymm0 - vpor 32*14-512(%rcx), %ymm0, %ymm0 - vpor 32*15-512(%rcx), %ymm0, %ymm0 - vpor 32*16-512(%rcx), %ymm0, %ymm0 - vpor 32*17-512(%rcx), %ymm0, %ymm0 - vpcmpeqq %ymm1, %ymm0, %ymm0 - vmovdqa %ymm0, `32*9*8+32`(%rsp) - - # H = U2 - U1 = X2 - X1 - lea `32*9*0`($b_ptr), %rsi - lea `32*9*0`($a_ptr), %rdx - lea `32*9*3`(%rsp), %rdi - call avx2_sub_x4 - call avx2_normalize_n_store - - # R = S2 - S1 = Y2 - Y1 - lea `32*9*1`($b_ptr), %rsi - lea `32*9*1`($a_ptr), %rdx - lea `32*9*4`(%rsp), %rdi - call avx2_sub_x4 - call avx2_normalize_n_store - - # Z3 = H*Z1*Z2 = H - lea `32*9*3`(%rsp), %rsi - lea `32*9*2`($r_ptr), %rdi - call avx2_mul_by1_x4 - call avx2_normalize - - vmovdqa `32*9*8`(%rsp), $B - vpor `32*9*8+32`(%rsp), $B, $B - - vpandn $ACC0, $B, $ACC0 - lea .LONE+128(%rip), %rax - vpandn $ACC1, $B, $ACC1 - vpandn $ACC2, $B, $ACC2 - vpandn $ACC3, $B, $ACC3 - vpandn $ACC4, $B, $ACC4 - vpandn $ACC5, $B, $ACC5 - vpandn $ACC6, $B, $ACC6 - vpandn $ACC7, $B, $ACC7 - - vpand 32*0-128(%rax), $B, $T0 - vpandn $ACC8, $B, $ACC8 - vpand 32*1-128(%rax), $B, $Y - vpxor $T0, $ACC0, $ACC0 - vpand 32*2-128(%rax), $B, $T0 - vpxor $Y, $ACC1, $ACC1 - vpand 32*3-128(%rax), $B, $Y - vpxor $T0, $ACC2, $ACC2 - vpand 32*4-128(%rax), $B, $T0 - vpxor $Y, $ACC3, $ACC3 - vpand 32*5-128(%rax), $B, $Y - vpxor $T0, $ACC4, $ACC4 - vpand 32*6-128(%rax), $B, $T0 - vpxor $Y, $ACC5, $ACC5 - vpand 32*7-128(%rax), $B, $Y - vpxor $T0, $ACC6, $ACC6 - vpand 32*8-128(%rax), $B, $T0 - vpxor $Y, $ACC7, $ACC7 - vpxor $T0, $ACC8, $ACC8 - `&STORE` - - # R^2 = R^2 - lea `32*9*4`(%rsp), %rsi - lea `32*9*6`(%rsp), %rdi - lea `32*9*8+32*2`(%rsp), %rcx # temporary vector - call avx2_sqr_x4 - call avx2_normalize_n_store - - # H^2 = H^2 - lea `32*9*3`(%rsp), %rsi - lea `32*9*5`(%rsp), %rdi - call avx2_sqr_x4 - call avx2_normalize_n_store - - # H^3 = H^2*H - lea `32*9*3`(%rsp), %rsi - lea `32*9*5`(%rsp), %rdx - lea `32*9*7`(%rsp), %rdi - call avx2_mul_x4 - call avx2_normalize_n_store - - # U2 = U1*H^2 - lea `32*9*0`($a_ptr), %rsi - lea `32*9*5`(%rsp), %rdx - lea `32*9*0`(%rsp), %rdi - call avx2_mul_x4 - #call avx2_normalize - `&STORE` - - # Hsqr = U2*2 - #lea 32*9*0(%rsp), %rsi - #lea 32*9*5(%rsp), %rdi - #call avx2_mul_by2_x4 - - vpaddq $ACC0, $ACC0, $ACC0 # inlined avx2_mul_by2_x4 - lea `32*9*5`(%rsp), %rdi - vpaddq $ACC1, $ACC1, $ACC1 - vpaddq $ACC2, $ACC2, $ACC2 - vpaddq $ACC3, $ACC3, $ACC3 - vpaddq $ACC4, $ACC4, $ACC4 - vpaddq $ACC5, $ACC5, $ACC5 - vpaddq $ACC6, $ACC6, $ACC6 - vpaddq $ACC7, $ACC7, $ACC7 - vpaddq $ACC8, $ACC8, $ACC8 - call avx2_normalize_n_store - - # X3 = R^2 - H^3 - #lea 32*9*6(%rsp), %rsi - #lea 32*9*7(%rsp), %rdx - #lea 32*9*5(%rsp), %rcx - #lea 32*9*0($r_ptr), %rdi - #call avx2_sub_x4 - #NORMALIZE - #STORE - - # X3 = X3 - U2*2 - #lea 32*9*0($r_ptr), %rsi - #lea 32*9*0($r_ptr), %rdi - #call avx2_sub_x4 - #NORMALIZE - #STORE - - lea `32*9*6+128`(%rsp), %rsi - lea .LAVX2_POLY_x2+128(%rip), %rax - lea `32*9*7+128`(%rsp), %rdx - lea `32*9*5+128`(%rsp), %rcx - lea `32*9*0`($r_ptr), %rdi - - vmovdqa 32*0-128(%rsi), $ACC0 - vmovdqa 32*1-128(%rsi), $ACC1 - vmovdqa 32*2-128(%rsi), $ACC2 - vmovdqa 32*3-128(%rsi), $ACC3 - vmovdqa 32*4-128(%rsi), $ACC4 - vmovdqa 32*5-128(%rsi), $ACC5 - vmovdqa 32*6-128(%rsi), $ACC6 - vmovdqa 32*7-128(%rsi), $ACC7 - vmovdqa 32*8-128(%rsi), $ACC8 - - vpaddq 32*0-128(%rax), $ACC0, $ACC0 - vpaddq 32*1-128(%rax), $ACC1, $ACC1 - vpaddq 32*2-128(%rax), $ACC2, $ACC2 - vpaddq 32*3-128(%rax), $ACC3, $ACC3 - vpaddq 32*4-128(%rax), $ACC4, $ACC4 - vpaddq 32*5-128(%rax), $ACC5, $ACC5 - vpaddq 32*6-128(%rax), $ACC6, $ACC6 - vpaddq 32*7-128(%rax), $ACC7, $ACC7 - vpaddq 32*8-128(%rax), $ACC8, $ACC8 - - vpsubq 32*0-128(%rdx), $ACC0, $ACC0 - vpsubq 32*1-128(%rdx), $ACC1, $ACC1 - vpsubq 32*2-128(%rdx), $ACC2, $ACC2 - vpsubq 32*3-128(%rdx), $ACC3, $ACC3 - vpsubq 32*4-128(%rdx), $ACC4, $ACC4 - vpsubq 32*5-128(%rdx), $ACC5, $ACC5 - vpsubq 32*6-128(%rdx), $ACC6, $ACC6 - vpsubq 32*7-128(%rdx), $ACC7, $ACC7 - vpsubq 32*8-128(%rdx), $ACC8, $ACC8 - - vpsubq 32*0-128(%rcx), $ACC0, $ACC0 - vpsubq 32*1-128(%rcx), $ACC1, $ACC1 - vpsubq 32*2-128(%rcx), $ACC2, $ACC2 - vpsubq 32*3-128(%rcx), $ACC3, $ACC3 - vpsubq 32*4-128(%rcx), $ACC4, $ACC4 - vpsubq 32*5-128(%rcx), $ACC5, $ACC5 - vpsubq 32*6-128(%rcx), $ACC6, $ACC6 - vpsubq 32*7-128(%rcx), $ACC7, $ACC7 - vpsubq 32*8-128(%rcx), $ACC8, $ACC8 - call avx2_normalize - - lea 32*0($b_ptr), %rsi - lea 32*0($a_ptr), %rdx - call avx2_select_n_store - - # H = U2 - X3 - lea `32*9*0`(%rsp), %rsi - lea `32*9*0`($r_ptr), %rdx - lea `32*9*3`(%rsp), %rdi - call avx2_sub_x4 - call avx2_normalize_n_store - - # H = H*R - lea `32*9*3`(%rsp), %rsi - lea `32*9*4`(%rsp), %rdx - lea `32*9*3`(%rsp), %rdi - call avx2_mul_x4 - call avx2_normalize_n_store - - # S2 = S1 * H^3 - lea `32*9*7`(%rsp), %rsi - lea `32*9*1`($a_ptr), %rdx - lea `32*9*1`(%rsp), %rdi - call avx2_mul_x4 - call avx2_normalize_n_store - - # - lea `32*9*3`(%rsp), %rsi - lea `32*9*1`(%rsp), %rdx - lea `32*9*1`($r_ptr), %rdi - call avx2_sub_x4 - call avx2_normalize - - lea 32*9($b_ptr), %rsi - lea 32*9($a_ptr), %rdx - call avx2_select_n_store - - #lea 32*9*0($r_ptr), %rsi - #lea 32*9*0($r_ptr), %rdi - #call avx2_mul_by1_x4 - #NORMALIZE - #STORE - - lea `32*9*1`($r_ptr), %rsi - lea `32*9*1`($r_ptr), %rdi - call avx2_mul_by1_x4 - call avx2_normalize_n_store - - vzeroupper -___ -$code.=<<___ if ($win64); - movaps %xmm6, -16*10(%rbp) - movaps %xmm7, -16*9(%rbp) - movaps %xmm8, -16*8(%rbp) - movaps %xmm9, -16*7(%rbp) - movaps %xmm10, -16*6(%rbp) - movaps %xmm11, -16*5(%rbp) - movaps %xmm12, -16*4(%rbp) - movaps %xmm13, -16*3(%rbp) - movaps %xmm14, -16*2(%rbp) - movaps %xmm15, -16*1(%rbp) -___ -$code.=<<___; - mov %rbp, %rsp - pop %rbp - ret -.size ecp_nistz256_avx2_point_add_affines_x4,.-ecp_nistz256_avx2_point_add_affines_x4 - -################################################################################ -# void ecp_nistz256_avx2_to_mont(void* RESULTx4, void *Ax4); -.globl ecp_nistz256_avx2_to_mont -.type ecp_nistz256_avx2_to_mont,\@function,2 -.align 32 -ecp_nistz256_avx2_to_mont: - vzeroupper -___ -$code.=<<___ if ($win64); - lea -8-16*10(%rsp), %rsp - vmovaps %xmm6, -8-16*10(%rax) - vmovaps %xmm7, -8-16*9(%rax) - vmovaps %xmm8, -8-16*8(%rax) - vmovaps %xmm9, -8-16*7(%rax) - vmovaps %xmm10, -8-16*6(%rax) - vmovaps %xmm11, -8-16*5(%rax) - vmovaps %xmm12, -8-16*4(%rax) - vmovaps %xmm13, -8-16*3(%rax) - vmovaps %xmm14, -8-16*2(%rax) - vmovaps %xmm15, -8-16*1(%rax) -___ -$code.=<<___; - vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK - lea .LTO_MONT_AVX2(%rip), %rdx - call avx2_mul_x4 - call avx2_normalize_n_store - - vzeroupper -___ -$code.=<<___ if ($win64); - movaps 16*0(%rsp), %xmm6 - movaps 16*1(%rsp), %xmm7 - movaps 16*2(%rsp), %xmm8 - movaps 16*3(%rsp), %xmm9 - movaps 16*4(%rsp), %xmm10 - movaps 16*5(%rsp), %xmm11 - movaps 16*6(%rsp), %xmm12 - movaps 16*7(%rsp), %xmm13 - movaps 16*8(%rsp), %xmm14 - movaps 16*9(%rsp), %xmm15 - lea 8+16*10(%rsp), %rsp -___ -$code.=<<___; - ret -.size ecp_nistz256_avx2_to_mont,.-ecp_nistz256_avx2_to_mont - -################################################################################ -# void ecp_nistz256_avx2_from_mont(void* RESULTx4, void *Ax4); -.globl ecp_nistz256_avx2_from_mont -.type ecp_nistz256_avx2_from_mont,\@function,2 -.align 32 -ecp_nistz256_avx2_from_mont: - vzeroupper -___ -$code.=<<___ if ($win64); - lea -8-16*10(%rsp), %rsp - vmovaps %xmm6, -8-16*10(%rax) - vmovaps %xmm7, -8-16*9(%rax) - vmovaps %xmm8, -8-16*8(%rax) - vmovaps %xmm9, -8-16*7(%rax) - vmovaps %xmm10, -8-16*6(%rax) - vmovaps %xmm11, -8-16*5(%rax) - vmovaps %xmm12, -8-16*4(%rax) - vmovaps %xmm13, -8-16*3(%rax) - vmovaps %xmm14, -8-16*2(%rax) - vmovaps %xmm15, -8-16*1(%rax) -___ -$code.=<<___; - vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK - lea .LFROM_MONT_AVX2(%rip), %rdx - call avx2_mul_x4 - call avx2_normalize_n_store - - vzeroupper -___ -$code.=<<___ if ($win64); - movaps 16*0(%rsp), %xmm6 - movaps 16*1(%rsp), %xmm7 - movaps 16*2(%rsp), %xmm8 - movaps 16*3(%rsp), %xmm9 - movaps 16*4(%rsp), %xmm10 - movaps 16*5(%rsp), %xmm11 - movaps 16*6(%rsp), %xmm12 - movaps 16*7(%rsp), %xmm13 - movaps 16*8(%rsp), %xmm14 - movaps 16*9(%rsp), %xmm15 - lea 8+16*10(%rsp), %rsp -___ -$code.=<<___; - ret -.size ecp_nistz256_avx2_from_mont,.-ecp_nistz256_avx2_from_mont - -################################################################################ -# void ecp_nistz256_avx2_set1(void* RESULTx4); -.globl ecp_nistz256_avx2_set1 -.type ecp_nistz256_avx2_set1,\@function,1 -.align 32 -ecp_nistz256_avx2_set1: - lea .LONE+128(%rip), %rax - lea 128(%rdi), %rdi - vzeroupper - vmovdqa 32*0-128(%rax), %ymm0 - vmovdqa 32*1-128(%rax), %ymm1 - vmovdqa 32*2-128(%rax), %ymm2 - vmovdqa 32*3-128(%rax), %ymm3 - vmovdqa 32*4-128(%rax), %ymm4 - vmovdqa 32*5-128(%rax), %ymm5 - vmovdqa %ymm0, 32*0-128(%rdi) - vmovdqa 32*6-128(%rax), %ymm0 - vmovdqa %ymm1, 32*1-128(%rdi) - vmovdqa 32*7-128(%rax), %ymm1 - vmovdqa %ymm2, 32*2-128(%rdi) - vmovdqa 32*8-128(%rax), %ymm2 - vmovdqa %ymm3, 32*3-128(%rdi) - vmovdqa %ymm4, 32*4-128(%rdi) - vmovdqa %ymm5, 32*5-128(%rdi) - vmovdqa %ymm0, 32*6-128(%rdi) - vmovdqa %ymm1, 32*7-128(%rdi) - vmovdqa %ymm2, 32*8-128(%rdi) - - vzeroupper - ret -.size ecp_nistz256_avx2_set1,.-ecp_nistz256_avx2_set1 -___ -} -{ -################################################################################ -# void ecp_nistz256_avx2_multi_gather_w7(void* RESULT, void *in, -# int index0, int index1, int index2, int index3); -################################################################################ - -my ($val,$in_t,$index0,$index1,$index2,$index3)=("%rdi","%rsi","%edx","%ecx","%r8d","%r9d"); -my ($INDEX0,$INDEX1,$INDEX2,$INDEX3)=map("%ymm$_",(0..3)); -my ($R0a,$R0b,$R1a,$R1b,$R2a,$R2b,$R3a,$R3b)=map("%ymm$_",(4..11)); -my ($M0,$T0,$T1,$TMP0)=map("%ymm$_",(12..15)); - -$code.=<<___; -.globl ecp_nistz256_avx2_multi_gather_w7 -.type ecp_nistz256_avx2_multi_gather_w7,\@function,6 -.align 32 -ecp_nistz256_avx2_multi_gather_w7: - vzeroupper -___ -$code.=<<___ if ($win64); - lea -8-16*10(%rsp), %rsp - vmovaps %xmm6, -8-16*10(%rax) - vmovaps %xmm7, -8-16*9(%rax) - vmovaps %xmm8, -8-16*8(%rax) - vmovaps %xmm9, -8-16*7(%rax) - vmovaps %xmm10, -8-16*6(%rax) - vmovaps %xmm11, -8-16*5(%rax) - vmovaps %xmm12, -8-16*4(%rax) - vmovaps %xmm13, -8-16*3(%rax) - vmovaps %xmm14, -8-16*2(%rax) - vmovaps %xmm15, -8-16*1(%rax) -___ -$code.=<<___; - lea .LIntOne(%rip), %rax - - vmovd $index0, %xmm0 - vmovd $index1, %xmm1 - vmovd $index2, %xmm2 - vmovd $index3, %xmm3 - - vpxor $R0a, $R0a, $R0a - vpxor $R0b, $R0b, $R0b - vpxor $R1a, $R1a, $R1a - vpxor $R1b, $R1b, $R1b - vpxor $R2a, $R2a, $R2a - vpxor $R2b, $R2b, $R2b - vpxor $R3a, $R3a, $R3a - vpxor $R3b, $R3b, $R3b - vmovdqa (%rax), $M0 - - vpermd $INDEX0, $R0a, $INDEX0 - vpermd $INDEX1, $R0a, $INDEX1 - vpermd $INDEX2, $R0a, $INDEX2 - vpermd $INDEX3, $R0a, $INDEX3 - - mov \$64, %ecx - lea 112($val), $val # size optimization - jmp .Lmulti_select_loop_avx2 - -# INDEX=0, corresponds to the point at infty (0,0) -.align 32 -.Lmulti_select_loop_avx2: - vpcmpeqd $INDEX0, $M0, $TMP0 - - vmovdqa `32*0+32*64*2*0`($in_t), $T0 - vmovdqa `32*1+32*64*2*0`($in_t), $T1 - vpand $TMP0, $T0, $T0 - vpand $TMP0, $T1, $T1 - vpxor $T0, $R0a, $R0a - vpxor $T1, $R0b, $R0b - - vpcmpeqd $INDEX1, $M0, $TMP0 - - vmovdqa `32*0+32*64*2*1`($in_t), $T0 - vmovdqa `32*1+32*64*2*1`($in_t), $T1 - vpand $TMP0, $T0, $T0 - vpand $TMP0, $T1, $T1 - vpxor $T0, $R1a, $R1a - vpxor $T1, $R1b, $R1b - - vpcmpeqd $INDEX2, $M0, $TMP0 - - vmovdqa `32*0+32*64*2*2`($in_t), $T0 - vmovdqa `32*1+32*64*2*2`($in_t), $T1 - vpand $TMP0, $T0, $T0 - vpand $TMP0, $T1, $T1 - vpxor $T0, $R2a, $R2a - vpxor $T1, $R2b, $R2b - - vpcmpeqd $INDEX3, $M0, $TMP0 - - vmovdqa `32*0+32*64*2*3`($in_t), $T0 - vmovdqa `32*1+32*64*2*3`($in_t), $T1 - vpand $TMP0, $T0, $T0 - vpand $TMP0, $T1, $T1 - vpxor $T0, $R3a, $R3a - vpxor $T1, $R3b, $R3b - - vpaddd (%rax), $M0, $M0 # increment - lea 32*2($in_t), $in_t - - dec %ecx - jnz .Lmulti_select_loop_avx2 - - vmovdqu $R0a, 32*0-112($val) - vmovdqu $R0b, 32*1-112($val) - vmovdqu $R1a, 32*2-112($val) - vmovdqu $R1b, 32*3-112($val) - vmovdqu $R2a, 32*4-112($val) - vmovdqu $R2b, 32*5-112($val) - vmovdqu $R3a, 32*6-112($val) - vmovdqu $R3b, 32*7-112($val) - - vzeroupper -___ -$code.=<<___ if ($win64); - movaps 16*0(%rsp), %xmm6 - movaps 16*1(%rsp), %xmm7 - movaps 16*2(%rsp), %xmm8 - movaps 16*3(%rsp), %xmm9 - movaps 16*4(%rsp), %xmm10 - movaps 16*5(%rsp), %xmm11 - movaps 16*6(%rsp), %xmm12 - movaps 16*7(%rsp), %xmm13 - movaps 16*8(%rsp), %xmm14 - movaps 16*9(%rsp), %xmm15 - lea 8+16*10(%rsp), %rsp -___ -$code.=<<___; - ret -.size ecp_nistz256_avx2_multi_gather_w7,.-ecp_nistz256_avx2_multi_gather_w7 - -.extern OPENSSL_ia32cap_P -.globl ecp_nistz_avx2_eligible -.type ecp_nistz_avx2_eligible,\@abi-omnipotent -.align 32 -ecp_nistz_avx2_eligible: - mov OPENSSL_ia32cap_P+8(%rip),%eax - shr \$5,%eax - and \$1,%eax - ret -.size ecp_nistz_avx2_eligible,.-ecp_nistz_avx2_eligible -___ -} -}} else {{ # assembler is too old -$code.=<<___; -.text - -.globl ecp_nistz256_avx2_transpose_convert -.globl ecp_nistz256_avx2_convert_transpose_back -.globl ecp_nistz256_avx2_point_add_affine_x4 -.globl ecp_nistz256_avx2_point_add_affines_x4 -.globl ecp_nistz256_avx2_to_mont -.globl ecp_nistz256_avx2_from_mont -.globl ecp_nistz256_avx2_set1 -.globl ecp_nistz256_avx2_multi_gather_w7 -.type ecp_nistz256_avx2_multi_gather_w7,\@abi-omnipotent -ecp_nistz256_avx2_transpose_convert: -ecp_nistz256_avx2_convert_transpose_back: -ecp_nistz256_avx2_point_add_affine_x4: -ecp_nistz256_avx2_point_add_affines_x4: -ecp_nistz256_avx2_to_mont: -ecp_nistz256_avx2_from_mont: -ecp_nistz256_avx2_set1: -ecp_nistz256_avx2_multi_gather_w7: - .byte 0x0f,0x0b # ud2 - ret -.size ecp_nistz256_avx2_multi_gather_w7,.-ecp_nistz256_avx2_multi_gather_w7 - -.globl ecp_nistz_avx2_eligible -.type ecp_nistz_avx2_eligible,\@abi-omnipotent -ecp_nistz_avx2_eligible: - xor %eax,%eax - ret -.size ecp_nistz_avx2_eligible,.-ecp_nistz_avx2_eligible -___ -}} - -foreach (split("\n",$code)) { - s/\`([^\`]*)\`/eval($1)/geo; - - print $_,"\n"; -} - -close STDOUT or die "error closing STDOUT: $!"; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -72,7 +72,7 @@ $addx = ($1>=12); } -if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { +if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10 $avx = ($ver>=3.0) + ($ver>=3.01); $addx = ($ver>=3.03); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/asm/x25519-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/asm/x25519-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/asm/x25519-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/asm/x25519-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -90,7 +90,7 @@ $addx = ($1>=12); } -if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { +if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+)\.([0-9]+)/) { my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10 $addx = ($ver>=3.03); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/curve448/field.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/curve448/field.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/curve448/field.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/curve448/field.h 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2014 Cryptography Research, Inc. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -62,7 +62,7 @@ mask_t gf_lobit(const gf x); mask_t gf_hibit(const gf x); -void gf_serialize(uint8_t *serial, const gf x, int with_highbit); +void gf_serialize(uint8_t serial[SER_BYTES], const gf x, int with_highbit); mask_t gf_deserialize(gf x, const uint8_t serial[SER_BYTES], int with_hibit, uint8_t hi_nmask); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec2_oct.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec2_oct.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec2_oct.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec2_oct.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2011-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2011-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -247,9 +247,21 @@ ECerr(EC_F_EC_GF2M_SIMPLE_OCT2POINT, EC_R_BUFFER_TOO_SMALL); return 0; } - form = buf[0]; - y_bit = form & 1; - form = form & ~1U; + + /* + * The first octet is the point converison octet PC, see X9.62, page 4 + * and section 4.4.2. It must be: + * 0x00 for the point at infinity + * 0x02 or 0x03 for compressed form + * 0x04 for uncompressed form + * 0x06 or 0x07 for hybrid form. + * For compressed or hybrid forms, we store the last bit of buf[0] as + * y_bit and clear it from buf[0] so as to obtain a POINT_CONVERSION_*. + * We error if buf[0] contains any but the above values. + */ + y_bit = buf[0] & 1; + form = buf[0] & ~1U; + if ((form != 0) && (form != POINT_CONVERSION_COMPRESSED) && (form != POINT_CONVERSION_UNCOMPRESSED) && (form != POINT_CONVERSION_HYBRID)) { @@ -261,6 +273,7 @@ return 0; } + /* The point at infinity is represented by a single zero octet. */ if (form == 0) { if (len != 1) { ECerr(EC_F_EC_GF2M_SIMPLE_OCT2POINT, EC_R_INVALID_ENCODING); @@ -312,11 +325,23 @@ goto err; } if (form == POINT_CONVERSION_HYBRID) { - if (!group->meth->field_div(group, yxi, y, x, ctx)) - goto err; - if (y_bit != BN_is_odd(yxi)) { - ECerr(EC_F_EC_GF2M_SIMPLE_OCT2POINT, EC_R_INVALID_ENCODING); - goto err; + /* + * Check that the form in the encoding was set correctly + * according to X9.62 4.4.2.a, 4(c), see also first paragraph + * of X9.62, 4.4.1.b. + */ + if (BN_is_zero(x)) { + if (y_bit != 0) { + ECerr(ERR_LIB_EC, EC_R_INVALID_ENCODING); + goto err; + } + } else { + if (!group->meth->field_div(group, yxi, y, x, ctx)) + goto err; + if (y_bit != BN_is_odd(yxi)) { + ECerr(ERR_LIB_EC, EC_R_INVALID_ENCODING); + goto err; + } } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_ameth.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_ameth.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_ameth.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_ameth.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -23,7 +23,7 @@ static int ecdh_cms_encrypt(CMS_RecipientInfo *ri); #endif -static int eckey_param2type(int *pptype, void **ppval, EC_KEY *ec_key) +static int eckey_param2type(int *pptype, void **ppval, const EC_KEY *ec_key) { const EC_GROUP *group; int nid; @@ -35,7 +35,14 @@ && (nid = EC_GROUP_get_curve_name(group))) /* we have a 'named curve' => just set the OID */ { - *ppval = OBJ_nid2obj(nid); + ASN1_OBJECT *asn1obj = OBJ_nid2obj(nid); + + if (asn1obj == NULL || OBJ_length(asn1obj) == 0) { + ASN1_OBJECT_free(asn1obj); + ECerr(EC_F_ECKEY_PARAM2TYPE, EC_R_MISSING_OID); + return 0; + } + *ppval = asn1obj; *pptype = V_ASN1_OBJECT; } else { /* explicit parameters */ @@ -43,7 +50,17 @@ pstr = ASN1_STRING_new(); if (pstr == NULL) return 0; - pstr->length = i2d_ECParameters(ec_key, &pstr->data); + + /* + * The cast in the following line is intentional as the + * `i2d_ECParameters` signature can't be constified (see discussion at + * https://github.com/openssl/openssl/pull/9347 where related and + * required constification backports were rejected). + * + * This cast should be safe anyway, because we can expect + * `i2d_ECParameters()` to treat the first argument as if it was const. + */ + pstr->length = i2d_ECParameters((EC_KEY *)ec_key, &pstr->data); if (pstr->length <= 0) { ASN1_STRING_free(pstr); ECerr(EC_F_ECKEY_PARAM2TYPE, ERR_R_EC_LIB); @@ -57,7 +74,7 @@ static int eckey_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) { - EC_KEY *ec_key = pkey->pkey.ec; + const EC_KEY *ec_key = pkey->pkey.ec; void *pval = NULL; int ptype; unsigned char *penc = NULL, *p; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_asn1.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_asn1.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_asn1.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_asn1.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -137,6 +137,12 @@ ASN1_INTEGER *cofactor; } /* ECPARAMETERS */ ; +typedef enum { + ECPKPARAMETERS_TYPE_NAMED = 0, + ECPKPARAMETERS_TYPE_EXPLICIT, + ECPKPARAMETERS_TYPE_IMPLICIT +} ecpk_parameters_type_t; + struct ecpk_parameters_st { int type; union { @@ -535,27 +541,35 @@ return NULL; } } else { - if (ret->type == 0) + if (ret->type == ECPKPARAMETERS_TYPE_NAMED) ASN1_OBJECT_free(ret->value.named_curve); - else if (ret->type == 1 && ret->value.parameters) + else if (ret->type == ECPKPARAMETERS_TYPE_EXPLICIT + && ret->value.parameters != NULL) ECPARAMETERS_free(ret->value.parameters); } - if (EC_GROUP_get_asn1_flag(group)) { + if (EC_GROUP_get_asn1_flag(group) == OPENSSL_EC_NAMED_CURVE) { /* * use the asn1 OID to describe the elliptic curve parameters */ tmp = EC_GROUP_get_curve_name(group); if (tmp) { - ret->type = 0; - if ((ret->value.named_curve = OBJ_nid2obj(tmp)) == NULL) + ASN1_OBJECT *asn1obj = OBJ_nid2obj(tmp); + + if (asn1obj == NULL || OBJ_length(asn1obj) == 0) { + ASN1_OBJECT_free(asn1obj); + ECerr(EC_F_EC_GROUP_GET_ECPKPARAMETERS, EC_R_MISSING_OID); ok = 0; + } else { + ret->type = ECPKPARAMETERS_TYPE_NAMED; + ret->value.named_curve = asn1obj; + } } else /* we don't know the nid => ERROR */ ok = 0; } else { /* use the ECPARAMETERS structure */ - ret->type = 1; + ret->type = ECPKPARAMETERS_TYPE_EXPLICIT; if ((ret->value.parameters = EC_GROUP_get_ecparameters(group, NULL)) == NULL) ok = 0; @@ -747,7 +761,10 @@ ret->seed_len = params->curve->seed->length; } - if (!params->order || !params->base || !params->base->data) { + if (params->order == NULL + || params->base == NULL + || params->base->data == NULL + || params->base->length == 0) { ECerr(EC_F_EC_GROUP_NEW_FROM_ECPARAMETERS, EC_R_ASN1_ERROR); goto err; } @@ -894,7 +911,8 @@ return NULL; } - if (params->type == 0) { /* the curve is given by an OID */ + if (params->type == ECPKPARAMETERS_TYPE_NAMED) { + /* the curve is given by an OID */ tmp = OBJ_obj2nid(params->value.named_curve); if ((ret = EC_GROUP_new_by_curve_name(tmp)) == NULL) { ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, @@ -902,15 +920,16 @@ return NULL; } EC_GROUP_set_asn1_flag(ret, OPENSSL_EC_NAMED_CURVE); - } else if (params->type == 1) { /* the parameters are given by a - * ECPARAMETERS structure */ + } else if (params->type == ECPKPARAMETERS_TYPE_EXPLICIT) { + /* the parameters are given by an ECPARAMETERS structure */ ret = EC_GROUP_new_from_ecparameters(params->value.parameters); if (!ret) { ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, ERR_R_EC_LIB); return NULL; } EC_GROUP_set_asn1_flag(ret, OPENSSL_EC_EXPLICIT_CURVE); - } else if (params->type == 2) { /* implicitlyCA */ + } else if (params->type == ECPKPARAMETERS_TYPE_IMPLICIT) { + /* implicit parameters inherited from CA - unsupported */ return NULL; } else { ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, EC_R_ASN1_ERROR); @@ -940,6 +959,9 @@ return NULL; } + if (params->type == ECPKPARAMETERS_TYPE_EXPLICIT) + group->decoded_from_explicit_params = 1; + if (a) { EC_GROUP_free(*a); *a = group; @@ -991,6 +1013,9 @@ if (priv_key->parameters) { EC_GROUP_free(ret->group); ret->group = EC_GROUP_new_from_ecpkparameters(priv_key->parameters); + if (ret->group != NULL + && priv_key->parameters->type == ECPKPARAMETERS_TYPE_EXPLICIT) + ret->group->decoded_from_explicit_params = 1; } if (ret->group == NULL) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_curve.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_curve.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_curve.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_curve.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -12,6 +12,7 @@ #include "ec_local.h" #include #include +#include #include #include "internal/nelem.h" @@ -3097,6 +3098,32 @@ goto err; } } + + if (EC_GROUP_get_asn1_flag(group) == OPENSSL_EC_NAMED_CURVE) { + /* + * Some curves don't have an associated OID: for those we should not + * default to `OPENSSL_EC_NAMED_CURVE` encoding of parameters and + * instead set the ASN1 flag to `OPENSSL_EC_EXPLICIT_CURVE`. + * + * Note that `OPENSSL_EC_NAMED_CURVE` is set as the default ASN1 flag on + * `EC_GROUP_new()`, when we don't have enough elements to determine if + * an OID for the curve name actually exists. + * We could implement this check on `EC_GROUP_set_curve_name()` but + * overloading the simple setter with this lookup could have a negative + * performance impact and unexpected consequences. + */ + ASN1_OBJECT *asn1obj = OBJ_nid2obj(curve.nid); + + if (asn1obj == NULL) { + ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_OBJ_LIB); + goto err; + } + if (OBJ_length(asn1obj) == 0) + EC_GROUP_set_asn1_flag(group, OPENSSL_EC_EXPLICIT_CURVE); + + ASN1_OBJECT_free(asn1obj); + } + ok = 1; err: if (!ok) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_err.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_err.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_err.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_err.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -341,6 +341,7 @@ {ERR_PACK(ERR_LIB_EC, 0, EC_R_LADDER_POST_FAILURE), "ladder post failure"}, {ERR_PACK(ERR_LIB_EC, 0, EC_R_LADDER_PRE_FAILURE), "ladder pre failure"}, {ERR_PACK(ERR_LIB_EC, 0, EC_R_LADDER_STEP_FAILURE), "ladder step failure"}, + {ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_OID), "missing OID"}, {ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_PARAMETERS), "missing parameters"}, {ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_PRIVATE_KEY), "missing private key"}, {ERR_PACK(ERR_LIB_EC, 0, EC_R_NEED_NEW_SETUP_VALUES), diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_key.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_key.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_key.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_key.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -14,6 +14,7 @@ #include "internal/refcount.h" #include #include +#include "crypto/bn.h" EC_KEY *EC_KEY_new(void) { @@ -416,17 +417,86 @@ int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *priv_key) { + int fixed_top; + const BIGNUM *order = NULL; + BIGNUM *tmp_key = NULL; + if (key->group == NULL || key->group->meth == NULL) return 0; + + /* + * Not only should key->group be set, but it should also be in a valid + * fully initialized state. + * + * Specifically, to operate in constant time, we need that the group order + * is set, as we use its length as the fixed public size of any scalar used + * as an EC private key. + */ + order = EC_GROUP_get0_order(key->group); + if (order == NULL || BN_is_zero(order)) + return 0; /* This should never happen */ + if (key->group->meth->set_private != NULL && key->group->meth->set_private(key, priv_key) == 0) return 0; if (key->meth->set_private != NULL && key->meth->set_private(key, priv_key) == 0) return 0; + + /* + * We should never leak the bit length of the secret scalar in the key, + * so we always set the `BN_FLG_CONSTTIME` flag on the internal `BIGNUM` + * holding the secret scalar. + * + * This is important also because `BN_dup()` (and `BN_copy()`) do not + * propagate the `BN_FLG_CONSTTIME` flag from the source `BIGNUM`, and + * this brings an extra risk of inadvertently losing the flag, even when + * the caller specifically set it. + * + * The propagation has been turned on and off a few times in the past + * years because in some conditions has shown unintended consequences in + * some code paths, so at the moment we can't fix this in the BN layer. + * + * In `EC_KEY_set_private_key()` we can work around the propagation by + * manually setting the flag after `BN_dup()` as we know for sure that + * inside the EC module the `BN_FLG_CONSTTIME` is always treated + * correctly and should not generate unintended consequences. + * + * Setting the BN_FLG_CONSTTIME flag alone is never enough, we also have + * to preallocate the BIGNUM internal buffer to a fixed public size big + * enough that operations performed during the processing never trigger + * a realloc which would leak the size of the scalar through memory + * accesses. + * + * Fixed Length + * ------------ + * + * The order of the large prime subgroup of the curve is our choice for + * a fixed public size, as that is generally the upper bound for + * generating a private key in EC cryptosystems and should fit all valid + * secret scalars. + * + * For preallocating the BIGNUM storage we look at the number of "words" + * required for the internal representation of the order, and we + * preallocate 2 extra "words" in case any of the subsequent processing + * might temporarily overflow the order length. + */ + tmp_key = BN_dup(priv_key); + if (tmp_key == NULL) + return 0; + + BN_set_flags(tmp_key, BN_FLG_CONSTTIME); + + fixed_top = bn_get_top(order) + 2; + if (bn_wexpand(tmp_key, fixed_top) == NULL) { + BN_clear_free(tmp_key); + return 0; + } + BN_clear_free(key->priv_key); - key->priv_key = BN_dup(priv_key); - return (key->priv_key == NULL) ? 0 : 1; + key->priv_key = tmp_key; + + return 1; } const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key) @@ -494,6 +564,13 @@ key->flags &= ~flags; } +int EC_KEY_decoded_from_explicit_params(const EC_KEY *key) +{ + if (key == NULL || key->group == NULL) + return -1; + return key->group->decoded_from_explicit_params; +} + size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form, unsigned char **pbuf, BN_CTX *ctx) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -211,6 +211,7 @@ dest->asn1_flag = src->asn1_flag; dest->asn1_form = src->asn1_form; + dest->decoded_from_explicit_params = src->decoded_from_explicit_params; if (src->seed) { OPENSSL_free(dest->seed); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_local.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_local.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ec_local.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ec_local.h 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -209,6 +209,8 @@ BIGNUM *order, *cofactor; int curve_name; /* optional NID for named curve */ int asn1_flag; /* flag to control the asn1 encoding */ + int decoded_from_explicit_params; /* set if decoded from explicit + * curve parameters encoding */ point_conversion_form_t asn1_form; unsigned char *seed; /* optional seed for parameters (appears in * ASN1) */ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ecp_nistp224.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ecp_nistp224.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ecp_nistp224.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ecp_nistp224.c 2022-04-05 07:17:00.000000000 +0000 @@ -72,6 +72,7 @@ */ typedef uint64_t limb; +typedef uint64_t limb_aX __attribute((__aligned__(1))); typedef uint128_t widelimb; typedef limb felem[4]; @@ -307,10 +308,10 @@ */ static void bin28_to_felem(felem out, const u8 in[28]) { - out[0] = *((const uint64_t *)(in)) & 0x00ffffffffffffff; - out[1] = (*((const uint64_t *)(in + 7))) & 0x00ffffffffffffff; - out[2] = (*((const uint64_t *)(in + 14))) & 0x00ffffffffffffff; - out[3] = (*((const uint64_t *)(in+20))) >> 8; + out[0] = *((const limb *)(in)) & 0x00ffffffffffffff; + out[1] = (*((const limb_aX *)(in + 7))) & 0x00ffffffffffffff; + out[2] = (*((const limb_aX *)(in + 14))) & 0x00ffffffffffffff; + out[3] = (*((const limb_aX *)(in + 20))) >> 8; } static void felem_to_bin28(u8 out[28], const felem in) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ecp_nistp521.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ecp_nistp521.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ecp_nistp521.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ecp_nistp521.c 2022-04-05 07:17:00.000000000 +0000 @@ -128,6 +128,7 @@ # define NLIMBS 9 typedef uint64_t limb; +typedef limb limb_aX __attribute((__aligned__(1))); typedef limb felem[NLIMBS]; typedef uint128_t largefelem[NLIMBS]; @@ -141,14 +142,14 @@ static void bin66_to_felem(felem out, const u8 in[66]) { out[0] = (*((limb *) & in[0])) & bottom58bits; - out[1] = (*((limb *) & in[7]) >> 2) & bottom58bits; - out[2] = (*((limb *) & in[14]) >> 4) & bottom58bits; - out[3] = (*((limb *) & in[21]) >> 6) & bottom58bits; - out[4] = (*((limb *) & in[29])) & bottom58bits; - out[5] = (*((limb *) & in[36]) >> 2) & bottom58bits; - out[6] = (*((limb *) & in[43]) >> 4) & bottom58bits; - out[7] = (*((limb *) & in[50]) >> 6) & bottom58bits; - out[8] = (*((limb *) & in[58])) & bottom57bits; + out[1] = (*((limb_aX *) & in[7]) >> 2) & bottom58bits; + out[2] = (*((limb_aX *) & in[14]) >> 4) & bottom58bits; + out[3] = (*((limb_aX *) & in[21]) >> 6) & bottom58bits; + out[4] = (*((limb_aX *) & in[29])) & bottom58bits; + out[5] = (*((limb_aX *) & in[36]) >> 2) & bottom58bits; + out[6] = (*((limb_aX *) & in[43]) >> 4) & bottom58bits; + out[7] = (*((limb_aX *) & in[50]) >> 6) & bottom58bits; + out[8] = (*((limb_aX *) & in[58])) & bottom57bits; } /* @@ -159,14 +160,14 @@ { memset(out, 0, 66); (*((limb *) & out[0])) = in[0]; - (*((limb *) & out[7])) |= in[1] << 2; - (*((limb *) & out[14])) |= in[2] << 4; - (*((limb *) & out[21])) |= in[3] << 6; - (*((limb *) & out[29])) = in[4]; - (*((limb *) & out[36])) |= in[5] << 2; - (*((limb *) & out[43])) |= in[6] << 4; - (*((limb *) & out[50])) |= in[7] << 6; - (*((limb *) & out[58])) = in[8]; + (*((limb_aX *) & out[7])) |= in[1] << 2; + (*((limb_aX *) & out[14])) |= in[2] << 4; + (*((limb_aX *) & out[21])) |= in[3] << 6; + (*((limb_aX *) & out[29])) = in[4]; + (*((limb_aX *) & out[36])) |= in[5] << 2; + (*((limb_aX *) & out[43])) |= in[6] << 4; + (*((limb_aX *) & out[50])) |= in[7] << 6; + (*((limb_aX *) & out[58])) = in[8]; } /* BN_to_felem converts an OpenSSL BIGNUM into an felem */ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ecp_nistz256.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ecp_nistz256.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ec/ecp_nistz256.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ec/ecp_nistz256.c 2022-04-05 07:17:00.000000000 +0000 @@ -929,207 +929,6 @@ return ret; } -/* - * Note that by default ECP_NISTZ256_AVX2 is undefined. While it's great - * code processing 4 points in parallel, corresponding serial operation - * is several times slower, because it uses 29x29=58-bit multiplication - * as opposite to 64x64=128-bit in integer-only scalar case. As result - * it doesn't provide *significant* performance improvement. Note that - * just defining ECP_NISTZ256_AVX2 is not sufficient to make it work, - * you'd need to compile even asm/ecp_nistz256-avx.pl module. - */ -#if defined(ECP_NISTZ256_AVX2) -# if !(defined(__x86_64) || defined(__x86_64__) || \ - defined(_M_AMD64) || defined(_M_X64)) || \ - !(defined(__GNUC__) || defined(_MSC_VER)) /* this is for ALIGN32 */ -# undef ECP_NISTZ256_AVX2 -# else -/* Constant time access, loading four values, from four consecutive tables */ -void ecp_nistz256_avx2_multi_gather_w7(void *result, const void *in, - int index0, int index1, int index2, - int index3); -void ecp_nistz256_avx2_transpose_convert(void *RESULTx4, const void *in); -void ecp_nistz256_avx2_convert_transpose_back(void *result, const void *Ax4); -void ecp_nistz256_avx2_point_add_affine_x4(void *RESULTx4, const void *Ax4, - const void *Bx4); -void ecp_nistz256_avx2_point_add_affines_x4(void *RESULTx4, const void *Ax4, - const void *Bx4); -void ecp_nistz256_avx2_to_mont(void *RESULTx4, const void *Ax4); -void ecp_nistz256_avx2_from_mont(void *RESULTx4, const void *Ax4); -void ecp_nistz256_avx2_set1(void *RESULTx4); -int ecp_nistz_avx2_eligible(void); - -static void booth_recode_w7(unsigned char *sign, - unsigned char *digit, unsigned char in) -{ - unsigned char s, d; - - s = ~((in >> 7) - 1); - d = (1 << 8) - in - 1; - d = (d & s) | (in & ~s); - d = (d >> 1) + (d & 1); - - *sign = s & 1; - *digit = d; -} - -/* - * ecp_nistz256_avx2_mul_g performs multiplication by G, using only the - * precomputed table. It does 4 affine point additions in parallel, - * significantly speeding up point multiplication for a fixed value. - */ -static void ecp_nistz256_avx2_mul_g(P256_POINT *r, - unsigned char p_str[33], - const P256_POINT_AFFINE(*preComputedTable)[64]) -{ - const unsigned int window_size = 7; - const unsigned int mask = (1 << (window_size + 1)) - 1; - unsigned int wvalue; - /* Using 4 windows at a time */ - unsigned char sign0, digit0; - unsigned char sign1, digit1; - unsigned char sign2, digit2; - unsigned char sign3, digit3; - unsigned int idx = 0; - BN_ULONG tmp[P256_LIMBS]; - int i; - - ALIGN32 BN_ULONG aX4[4 * 9 * 3] = { 0 }; - ALIGN32 BN_ULONG bX4[4 * 9 * 2] = { 0 }; - ALIGN32 P256_POINT_AFFINE point_arr[4]; - ALIGN32 P256_POINT res_point_arr[4]; - - /* Initial four windows */ - wvalue = *((u16 *) & p_str[0]); - wvalue = (wvalue << 1) & mask; - idx += window_size; - booth_recode_w7(&sign0, &digit0, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign1, &digit1, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign2, &digit2, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign3, &digit3, wvalue); - - ecp_nistz256_avx2_multi_gather_w7(point_arr, preComputedTable[0], - digit0, digit1, digit2, digit3); - - ecp_nistz256_neg(tmp, point_arr[0].Y); - copy_conditional(point_arr[0].Y, tmp, sign0); - ecp_nistz256_neg(tmp, point_arr[1].Y); - copy_conditional(point_arr[1].Y, tmp, sign1); - ecp_nistz256_neg(tmp, point_arr[2].Y); - copy_conditional(point_arr[2].Y, tmp, sign2); - ecp_nistz256_neg(tmp, point_arr[3].Y); - copy_conditional(point_arr[3].Y, tmp, sign3); - - ecp_nistz256_avx2_transpose_convert(aX4, point_arr); - ecp_nistz256_avx2_to_mont(aX4, aX4); - ecp_nistz256_avx2_to_mont(&aX4[4 * 9], &aX4[4 * 9]); - ecp_nistz256_avx2_set1(&aX4[4 * 9 * 2]); - - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign0, &digit0, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign1, &digit1, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign2, &digit2, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign3, &digit3, wvalue); - - ecp_nistz256_avx2_multi_gather_w7(point_arr, preComputedTable[4 * 1], - digit0, digit1, digit2, digit3); - - ecp_nistz256_neg(tmp, point_arr[0].Y); - copy_conditional(point_arr[0].Y, tmp, sign0); - ecp_nistz256_neg(tmp, point_arr[1].Y); - copy_conditional(point_arr[1].Y, tmp, sign1); - ecp_nistz256_neg(tmp, point_arr[2].Y); - copy_conditional(point_arr[2].Y, tmp, sign2); - ecp_nistz256_neg(tmp, point_arr[3].Y); - copy_conditional(point_arr[3].Y, tmp, sign3); - - ecp_nistz256_avx2_transpose_convert(bX4, point_arr); - ecp_nistz256_avx2_to_mont(bX4, bX4); - ecp_nistz256_avx2_to_mont(&bX4[4 * 9], &bX4[4 * 9]); - /* Optimized when both inputs are affine */ - ecp_nistz256_avx2_point_add_affines_x4(aX4, aX4, bX4); - - for (i = 2; i < 9; i++) { - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign0, &digit0, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign1, &digit1, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign2, &digit2, wvalue); - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; - booth_recode_w7(&sign3, &digit3, wvalue); - - ecp_nistz256_avx2_multi_gather_w7(point_arr, - preComputedTable[4 * i], - digit0, digit1, digit2, digit3); - - ecp_nistz256_neg(tmp, point_arr[0].Y); - copy_conditional(point_arr[0].Y, tmp, sign0); - ecp_nistz256_neg(tmp, point_arr[1].Y); - copy_conditional(point_arr[1].Y, tmp, sign1); - ecp_nistz256_neg(tmp, point_arr[2].Y); - copy_conditional(point_arr[2].Y, tmp, sign2); - ecp_nistz256_neg(tmp, point_arr[3].Y); - copy_conditional(point_arr[3].Y, tmp, sign3); - - ecp_nistz256_avx2_transpose_convert(bX4, point_arr); - ecp_nistz256_avx2_to_mont(bX4, bX4); - ecp_nistz256_avx2_to_mont(&bX4[4 * 9], &bX4[4 * 9]); - - ecp_nistz256_avx2_point_add_affine_x4(aX4, aX4, bX4); - } - - ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 0], &aX4[4 * 9 * 0]); - ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 1], &aX4[4 * 9 * 1]); - ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 2], &aX4[4 * 9 * 2]); - - ecp_nistz256_avx2_convert_transpose_back(res_point_arr, aX4); - /* Last window is performed serially */ - wvalue = *((u16 *) & p_str[(idx - 1) / 8]); - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - booth_recode_w7(&sign0, &digit0, wvalue); - ecp_nistz256_gather_w7((P256_POINT_AFFINE *)r, - preComputedTable[36], digit0); - ecp_nistz256_neg(tmp, r->Y); - copy_conditional(r->Y, tmp, sign0); - memcpy(r->Z, ONE, sizeof(ONE)); - /* Sum the four windows */ - ecp_nistz256_point_add(r, r, &res_point_arr[0]); - ecp_nistz256_point_add(r, r, &res_point_arr[1]); - ecp_nistz256_point_add(r, r, &res_point_arr[2]); - ecp_nistz256_point_add(r, r, &res_point_arr[3]); -} -# endif -#endif - __owur static int ecp_nistz256_set_from_affine(EC_POINT *out, const EC_GROUP *group, const P256_POINT_AFFINE *in, BN_CTX *ctx) @@ -1219,6 +1018,8 @@ } if (preComputedTable) { + BN_ULONG infty; + if ((BN_num_bits(scalar) > 256) || BN_is_negative(scalar)) { if ((tmp_scalar = BN_CTX_get(ctx)) == NULL) @@ -1250,67 +1051,58 @@ for (; i < 33; i++) p_str[i] = 0; -#if defined(ECP_NISTZ256_AVX2) - if (ecp_nistz_avx2_eligible()) { - ecp_nistz256_avx2_mul_g(&p.p, p_str, preComputedTable); - } else -#endif - { - BN_ULONG infty; + /* First window */ + wvalue = (p_str[0] << 1) & mask; + idx += window_size; - /* First window */ - wvalue = (p_str[0] << 1) & mask; - idx += window_size; - - wvalue = _booth_recode_w7(wvalue); + wvalue = _booth_recode_w7(wvalue); - ecp_nistz256_gather_w7(&p.a, preComputedTable[0], - wvalue >> 1); + ecp_nistz256_gather_w7(&p.a, preComputedTable[0], + wvalue >> 1); - ecp_nistz256_neg(p.p.Z, p.p.Y); - copy_conditional(p.p.Y, p.p.Z, wvalue & 1); + ecp_nistz256_neg(p.p.Z, p.p.Y); + copy_conditional(p.p.Y, p.p.Z, wvalue & 1); - /* - * Since affine infinity is encoded as (0,0) and - * Jacobian ias (,,0), we need to harmonize them - * by assigning "one" or zero to Z. - */ - infty = (p.p.X[0] | p.p.X[1] | p.p.X[2] | p.p.X[3] | - p.p.Y[0] | p.p.Y[1] | p.p.Y[2] | p.p.Y[3]); - if (P256_LIMBS == 8) - infty |= (p.p.X[4] | p.p.X[5] | p.p.X[6] | p.p.X[7] | - p.p.Y[4] | p.p.Y[5] | p.p.Y[6] | p.p.Y[7]); - - infty = 0 - is_zero(infty); - infty = ~infty; - - p.p.Z[0] = ONE[0] & infty; - p.p.Z[1] = ONE[1] & infty; - p.p.Z[2] = ONE[2] & infty; - p.p.Z[3] = ONE[3] & infty; - if (P256_LIMBS == 8) { - p.p.Z[4] = ONE[4] & infty; - p.p.Z[5] = ONE[5] & infty; - p.p.Z[6] = ONE[6] & infty; - p.p.Z[7] = ONE[7] & infty; - } + /* + * Since affine infinity is encoded as (0,0) and + * Jacobian is (,,0), we need to harmonize them + * by assigning "one" or zero to Z. + */ + infty = (p.p.X[0] | p.p.X[1] | p.p.X[2] | p.p.X[3] | + p.p.Y[0] | p.p.Y[1] | p.p.Y[2] | p.p.Y[3]); + if (P256_LIMBS == 8) + infty |= (p.p.X[4] | p.p.X[5] | p.p.X[6] | p.p.X[7] | + p.p.Y[4] | p.p.Y[5] | p.p.Y[6] | p.p.Y[7]); + + infty = 0 - is_zero(infty); + infty = ~infty; + + p.p.Z[0] = ONE[0] & infty; + p.p.Z[1] = ONE[1] & infty; + p.p.Z[2] = ONE[2] & infty; + p.p.Z[3] = ONE[3] & infty; + if (P256_LIMBS == 8) { + p.p.Z[4] = ONE[4] & infty; + p.p.Z[5] = ONE[5] & infty; + p.p.Z[6] = ONE[6] & infty; + p.p.Z[7] = ONE[7] & infty; + } - for (i = 1; i < 37; i++) { - unsigned int off = (idx - 1) / 8; - wvalue = p_str[off] | p_str[off + 1] << 8; - wvalue = (wvalue >> ((idx - 1) % 8)) & mask; - idx += window_size; + for (i = 1; i < 37; i++) { + unsigned int off = (idx - 1) / 8; + wvalue = p_str[off] | p_str[off + 1] << 8; + wvalue = (wvalue >> ((idx - 1) % 8)) & mask; + idx += window_size; - wvalue = _booth_recode_w7(wvalue); + wvalue = _booth_recode_w7(wvalue); - ecp_nistz256_gather_w7(&t.a, - preComputedTable[i], wvalue >> 1); + ecp_nistz256_gather_w7(&t.a, + preComputedTable[i], wvalue >> 1); - ecp_nistz256_neg(t.p.Z, t.a.Y); - copy_conditional(t.a.Y, t.p.Z, wvalue & 1); + ecp_nistz256_neg(t.p.Z, t.a.Y); + copy_conditional(t.a.Y, t.p.Z, wvalue & 1); - ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a); - } + ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a); } } else { p_is_infinity = 1; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_all.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_all.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_all.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_all.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -12,9 +12,6 @@ void ENGINE_load_builtin_engines(void) { - /* Some ENGINEs need this */ - OPENSSL_cpuid_setup(); - OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_ALL_BUILTIN, NULL); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_devcrypto.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_devcrypto.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_devcrypto.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_devcrypto.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -758,8 +758,9 @@ void engine_load_devcrypto_int() { ENGINE *e = NULL; + int fd; - if ((cfd = open("/dev/crypto", O_RDWR, 0)) < 0) { + if ((fd = open("/dev/crypto", O_RDWR, 0)) < 0) { #ifndef ENGINE_DEVCRYPTO_DEBUG if (errno != ENOENT) #endif @@ -767,6 +768,18 @@ return; } +#ifdef CRIOGET + if (ioctl(fd, CRIOGET, &cfd) < 0) { + fprintf(stderr, "Could not create crypto fd: %s\n", strerror(errno)); + close(fd); + cfd = -1; + return; + } + close(fd); +#else + cfd = fd; +#endif + if ((e = ENGINE_new()) == NULL || !ENGINE_set_destroy_function(e, devcrypto_unload)) { ENGINE_free(e); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_dyn.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_dyn.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_dyn.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_dyn.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -443,8 +443,17 @@ * We fail if the version checker veto'd the load *or* if it is * deferring to us (by returning its version) and we think it is too * old. + * Unfortunately the version checker does not distinguish between + * engines built for openssl 1.1.x and openssl 3.x, but loading + * an engine that is built for openssl 3.x will cause a fatal + * error. Detect such engines, since EVP_PKEY_get_base_id is exported + * as a function in openssl 3.x, while it is named EVP_PKEY_base_id + * in openssl 1.1.x. Therefore we take the presence of that symbol + * as an indication that the engine will be incompatible. */ - if (vcheck_res < OSSL_DYNAMIC_OLDEST) { + if (vcheck_res < OSSL_DYNAMIC_OLDEST + || DSO_bind_func(ctx->dynamic_dso, + "EVP_PKEY_get_base_id") != NULL) { /* Fail */ ctx->bind_engine = NULL; ctx->v_check = NULL; @@ -477,7 +486,9 @@ engine_set_all_null(e); /* Try to bind the ENGINE onto our own ENGINE structure */ - if (!ctx->bind_engine(e, ctx->engine_id, &fns)) { + if (!engine_add_dynamic_id(e, (ENGINE_DYNAMIC_ID)ctx->bind_engine, 1) + || !ctx->bind_engine(e, ctx->engine_id, &fns)) { + engine_remove_dynamic_id(e, 1); ctx->bind_engine = NULL; ctx->v_check = NULL; DSO_free(ctx->dynamic_dso); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -67,6 +67,7 @@ e->load_pubkey = NULL; e->cmd_defns = NULL; e->flags = 0; + e->dynamic_id = NULL; } int engine_free_util(ENGINE *e, int not_locked) @@ -92,6 +93,7 @@ */ if (e->destroy) e->destroy(e); + engine_remove_dynamic_id(e, not_locked); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ENGINE, e, &e->ex_data); OPENSSL_free(e); return 1; @@ -171,6 +173,7 @@ cleanup_stack = NULL; } CRYPTO_THREAD_lock_free(global_engine_lock); + global_engine_lock = NULL; } /* Now the "ex_data" support */ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_list.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_list.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_list.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_list.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -25,6 +25,12 @@ static ENGINE *engine_list_tail = NULL; /* + * The linked list of currently loaded dynamic engines. + */ +static ENGINE *engine_dyn_list_head = NULL; +static ENGINE *engine_dyn_list_tail = NULL; + +/* * This cleanup function is only needed internally. If it should be called, * we register it with the "engine_cleanup_int()" stack to be called during * cleanup. @@ -126,6 +132,85 @@ return 1; } +/* Add engine to dynamic engine list. */ +int engine_add_dynamic_id(ENGINE *e, ENGINE_DYNAMIC_ID dynamic_id, + int not_locked) +{ + int result = 0; + ENGINE *iterator = NULL; + + if (e == NULL) + return 0; + + if (e->dynamic_id == NULL && dynamic_id == NULL) + return 0; + + if (not_locked && !CRYPTO_THREAD_write_lock(global_engine_lock)) + return 0; + + if (dynamic_id != NULL) { + iterator = engine_dyn_list_head; + while (iterator != NULL) { + if (iterator->dynamic_id == dynamic_id) + goto err; + iterator = iterator->next; + } + if (e->dynamic_id != NULL) + goto err; + e->dynamic_id = dynamic_id; + } + + if (engine_dyn_list_head == NULL) { + /* We are adding to an empty list. */ + if (engine_dyn_list_tail != NULL) + goto err; + engine_dyn_list_head = e; + e->prev_dyn = NULL; + } else { + /* We are adding to the tail of an existing list. */ + if (engine_dyn_list_tail == NULL + || engine_dyn_list_tail->next_dyn != NULL) + goto err; + engine_dyn_list_tail->next_dyn = e; + e->prev_dyn = engine_dyn_list_tail; + } + + engine_dyn_list_tail = e; + e->next_dyn = NULL; + result = 1; + + err: + if (not_locked) + CRYPTO_THREAD_unlock(global_engine_lock); + return result; +} + +/* Remove engine from dynamic engine list. */ +void engine_remove_dynamic_id(ENGINE *e, int not_locked) +{ + if (e == NULL || e->dynamic_id == NULL) + return; + + if (not_locked && !CRYPTO_THREAD_write_lock(global_engine_lock)) + return; + + e->dynamic_id = NULL; + + /* un-link e from the chain. */ + if (e->next_dyn != NULL) + e->next_dyn->prev_dyn = e->prev_dyn; + if (e->prev_dyn != NULL) + e->prev_dyn->next_dyn = e->next_dyn; + /* Correct our head/tail if necessary. */ + if (engine_dyn_list_head == e) + engine_dyn_list_head = e->next_dyn; + if (engine_dyn_list_tail == e) + engine_dyn_list_tail = e->prev_dyn; + + if (not_locked) + CRYPTO_THREAD_unlock(global_engine_lock); +} + /* Get the first/last "ENGINE" type available. */ ENGINE *ENGINE_get_first(void) { @@ -272,6 +357,8 @@ dest->load_pubkey = src->load_pubkey; dest->cmd_defns = src->cmd_defns; dest->flags = src->flags; + dest->dynamic_id = src->dynamic_id; + engine_add_dynamic_id(dest, NULL, 0); } ENGINE *ENGINE_by_id(const char *id) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_local.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_local.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/engine/eng_local.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/engine/eng_local.h 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -118,6 +118,11 @@ extern CRYPTO_ONCE engine_lock_init; DECLARE_RUN_ONCE(do_engine_lock_init) +typedef void (*ENGINE_DYNAMIC_ID)(void); +int engine_add_dynamic_id(ENGINE *e, ENGINE_DYNAMIC_ID dynamic_id, + int not_locked); +void engine_remove_dynamic_id(ENGINE *e, int not_locked); + /* * This is a structure for storing implementations of various crypto * algorithms and functions. @@ -162,6 +167,10 @@ /* Used to maintain the linked-list of engines. */ struct engine_st *prev; struct engine_st *next; + /* Used to maintain the linked-list of dynamic engines. */ + struct engine_st *prev_dyn; + struct engine_st *next_dyn; + ENGINE_DYNAMIC_ID dynamic_id; }; typedef struct st_engine_pile ENGINE_PILE; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/err/err.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/err/err.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/err/err.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/err/err.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -129,6 +129,7 @@ {ERR_R_INTERNAL_ERROR, "internal error"}, {ERR_R_DISABLED, "called a function that was disabled at compile-time"}, {ERR_R_INIT_FAIL, "init fail"}, + {ERR_R_PASSED_INVALID_ARGUMENT, "passed invalid argument"}, {ERR_R_OPERATION_FAIL, "operation fail"}, {0, NULL}, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/err/openssl.txt nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/err/openssl.txt --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/err/openssl.txt 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/err/openssl.txt 2022-04-05 07:17:00.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -36,6 +36,7 @@ ASN1_F_ASN1_ITEM_DUP:191:ASN1_item_dup ASN1_F_ASN1_ITEM_EMBED_D2I:120:asn1_item_embed_d2i ASN1_F_ASN1_ITEM_EMBED_NEW:121:asn1_item_embed_new +ASN1_F_ASN1_ITEM_EX_I2D:144:ASN1_item_ex_i2d ASN1_F_ASN1_ITEM_FLAGS_I2D:118:asn1_item_flags_i2d ASN1_F_ASN1_ITEM_I2D_BIO:192:ASN1_item_i2d_bio ASN1_F_ASN1_ITEM_I2D_FP:193:ASN1_item_i2d_fp @@ -934,6 +935,8 @@ PEM_F_PEM_SIGNFINAL:112:PEM_SignFinal PEM_F_PEM_WRITE:113:PEM_write PEM_F_PEM_WRITE_BIO:114:PEM_write_bio +PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL:147:\ + PEM_write_bio_PrivateKey_traditional PEM_F_PEM_WRITE_PRIVATEKEY:139:PEM_write_PrivateKey PEM_F_PEM_X509_INFO_READ:115:PEM_X509_INFO_read PEM_F_PEM_X509_INFO_READ_BIO:116:PEM_X509_INFO_read_bio @@ -1157,6 +1160,7 @@ SSL_F_FINAL_EMS:486:final_ems SSL_F_FINAL_KEY_SHARE:503:final_key_share SSL_F_FINAL_MAXFRAGMENTLEN:557:final_maxfragmentlen +SSL_F_FINAL_PSK:639:final_psk SSL_F_FINAL_RENEGOTIATE:483:final_renegotiate SSL_F_FINAL_SERVER_NAME:558:final_server_name SSL_F_FINAL_SIG_ALGS:497:final_sig_algs @@ -1649,6 +1653,7 @@ X509V3_F_I2S_ASN1_IA5STRING:149:i2s_ASN1_IA5STRING X509V3_F_I2S_ASN1_INTEGER:120:i2s_ASN1_INTEGER X509V3_F_I2V_AUTHORITY_INFO_ACCESS:138:i2v_AUTHORITY_INFO_ACCESS +X509V3_F_I2V_AUTHORITY_KEYID:173:i2v_AUTHORITY_KEYID X509V3_F_LEVEL_ADD_NODE:168:level_add_node X509V3_F_NOTICE_SECTION:132:notice_section X509V3_F_NREF_NOS:133:nref_nos @@ -1689,6 +1694,7 @@ X509V3_F_V2I_TLS_FEATURE:165:v2i_TLS_FEATURE X509V3_F_V3_GENERIC_EXTENSION:116:v3_generic_extension X509V3_F_X509V3_ADD1_I2D:140:X509V3_add1_i2d +X509V3_F_X509V3_ADD_LEN_VALUE:174:x509v3_add_len_value X509V3_F_X509V3_ADD_VALUE:105:X509V3_add_value X509V3_F_X509V3_EXT_ADD:104:X509V3_EXT_add X509V3_F_X509V3_EXT_ADD_ALIAS:106:X509V3_EXT_add_alias @@ -1742,6 +1748,7 @@ X509_F_X509_OBJECT_NEW:150:X509_OBJECT_new X509_F_X509_PRINT_EX_FP:118:X509_print_ex_fp X509_F_X509_PUBKEY_DECODE:148:x509_pubkey_decode +X509_F_X509_PUBKEY_GET:161:X509_PUBKEY_get X509_F_X509_PUBKEY_GET0:119:X509_PUBKEY_get0 X509_F_X509_PUBKEY_SET:120:X509_PUBKEY_set X509_F_X509_REQ_CHECK_PRIVATE_KEY:144:X509_REQ_check_private_key @@ -1768,6 +1775,7 @@ ASN1_R_ASN1_SIG_PARSE_ERROR:204:asn1 sig parse error ASN1_R_AUX_ERROR:100:aux error ASN1_R_BAD_OBJECT_HEADER:102:bad object header +ASN1_R_BAD_TEMPLATE:230:bad template ASN1_R_BMPSTRING_IS_WRONG_LENGTH:214:bmpstring is wrong length ASN1_R_BN_LIB:105:bn lib ASN1_R_BOOLEAN_IS_WRONG_LENGTH:106:boolean is wrong length @@ -2164,6 +2172,7 @@ EC_R_LADDER_POST_FAILURE:136:ladder post failure EC_R_LADDER_PRE_FAILURE:153:ladder pre failure EC_R_LADDER_STEP_FAILURE:162:ladder step failure +EC_R_MISSING_OID:167:missing OID EC_R_MISSING_PARAMETERS:124:missing parameters EC_R_MISSING_PRIVATE_KEY:125:missing private key EC_R_NEED_NEW_SETUP_VALUES:157:need new setup values @@ -2277,6 +2286,7 @@ EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE:150:\ operation not supported for this keytype EVP_R_OPERATON_NOT_INITIALIZED:151:operaton not initialized +EVP_R_OUTPUT_WOULD_OVERFLOW:184:output would overflow EVP_R_PARTIALLY_OVERLAPPING:162:partially overlapping buffers EVP_R_PBKDF2_ERROR:181:pbkdf2 error EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED:179:\ @@ -2398,6 +2408,7 @@ PEM_R_UNSUPPORTED_CIPHER:113:unsupported cipher PEM_R_UNSUPPORTED_ENCRYPTION:114:unsupported encryption PEM_R_UNSUPPORTED_KEY_COMPONENTS:126:unsupported key components +PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE:110:unsupported public key type PKCS12_R_CANT_PACK_STRUCTURE:100:cant pack structure PKCS12_R_CONTENT_TYPE_NOT_DATA:121:content type not data PKCS12_R_DECODE_ERROR:101:decode error @@ -2733,6 +2744,7 @@ SSL_R_MISSING_ECDSA_SIGNING_CERT:381:missing ecdsa signing cert SSL_R_MISSING_FATAL:256:missing fatal SSL_R_MISSING_PARAMETERS:290:missing parameters +SSL_R_MISSING_PSK_KEX_MODES_EXTENSION:310:missing psk kex modes extension SSL_R_MISSING_RSA_CERTIFICATE:168:missing rsa certificate SSL_R_MISSING_RSA_ENCRYPTING_CERT:169:missing rsa encrypting cert SSL_R_MISSING_RSA_SIGNING_CERT:170:missing rsa signing cert @@ -2776,6 +2788,7 @@ SSL_R_NO_VERIFY_COOKIE_CALLBACK:403:no verify cookie callback SSL_R_NULL_SSL_CTX:195:null ssl ctx SSL_R_NULL_SSL_METHOD_PASSED:196:null ssl method passed +SSL_R_OCSP_CALLBACK_FAILURE:294:ocsp callback failure SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED:197:old session cipher not returned SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED:344:\ old session compression algorithm not returned diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/bio_ok.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/bio_ok.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/bio_ok.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/bio_ok.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -203,7 +203,7 @@ /* * copy start of the next block into proper place */ - if (ctx->buf_len_save - ctx->buf_off_save > 0) { + if (ctx->buf_len_save > ctx->buf_off_save) { ctx->buf_len = ctx->buf_len_save - ctx->buf_off_save; memmove(ctx->buf, &(ctx->buf[ctx->buf_off_save]), ctx->buf_len); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/digest.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/digest.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/digest.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/digest.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -15,6 +15,22 @@ #include "crypto/evp.h" #include "evp_local.h" + +static void cleanup_old_md_data(EVP_MD_CTX *ctx, int force) +{ + if (ctx->digest != NULL) { + if (ctx->digest->cleanup != NULL + && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED)) + ctx->digest->cleanup(ctx); + if (ctx->md_data != NULL && ctx->digest->ctx_size > 0 + && (!EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE) + || force)) { + OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); + ctx->md_data = NULL; + } + } +} + /* This call frees resources associated with the context */ int EVP_MD_CTX_reset(EVP_MD_CTX *ctx) { @@ -25,13 +41,8 @@ * Don't assume ctx->md_data was cleaned in EVP_Digest_Final, because * sometimes only copies of the context are ever finalised. */ - if (ctx->digest && ctx->digest->cleanup - && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_CLEANED)) - ctx->digest->cleanup(ctx); - if (ctx->digest && ctx->digest->ctx_size && ctx->md_data - && !EVP_MD_CTX_test_flags(ctx, EVP_MD_CTX_FLAG_REUSE)) { - OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); - } + cleanup_old_md_data(ctx, 0); + /* * pctx should be freed by the user of EVP_MD_CTX * if EVP_MD_CTX_FLAG_KEEP_PKEY_CTX is set @@ -76,6 +87,7 @@ if (ctx->engine && ctx->digest && (type == NULL || (type->type == ctx->digest->type))) goto skip_to_init; + if (type) { /* * Ensure an ENGINE left lying around from last time is cleared (the @@ -119,10 +131,8 @@ } #endif if (ctx->digest != type) { - if (ctx->digest && ctx->digest->ctx_size) { - OPENSSL_clear_free(ctx->md_data, ctx->digest->ctx_size); - ctx->md_data = NULL; - } + cleanup_old_md_data(ctx, 1); + ctx->digest = type; if (!(ctx->flags & EVP_MD_CTX_FLAG_NO_INIT) && type->ctx_size) { ctx->update = type->update; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/e_aes.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/e_aes.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/e_aes.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/e_aes.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -130,11 +130,6 @@ size_t len, const AES_KEY *key1, const AES_KEY *key2, const unsigned char iv[16]); #endif -#if !defined(AES_ASM) && !defined(AES_CTR_ASM) \ - && defined(OPENSSL_AES_CONST_TIME) \ - && !defined(OPENSSL_SMALL_FOOTPRINT) -# define AES_CTR_ASM -#endif #ifdef AES_CTR_ASM void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out, size_t blocks, const AES_KEY *key, @@ -398,7 +393,7 @@ /* * Verify that the two keys are different. - * + * * This addresses Rogaway's vulnerability. * See comment in aes_xts_init_key() below. */ @@ -616,22 +611,22 @@ */ void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const AES_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, size_t len, const AES_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const AES_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, size_t len, const AES_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const AES_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, size_t len, const AES_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, size_t blocks, const AES_KEY *key, unsigned char *ivec); @@ -818,7 +813,7 @@ /* * Verify that the two keys are different. - * + * * This addresses Rogaway's vulnerability. * See comment in aes_xts_init_key() below. */ @@ -1173,9 +1168,9 @@ static int s390x_aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); -# define S390X_aes_128_cbc_CAPABLE 1 /* checked by callee */ -# define S390X_aes_192_cbc_CAPABLE 1 -# define S390X_aes_256_cbc_CAPABLE 1 +# define S390X_aes_128_cbc_CAPABLE 0 /* checked by callee */ +# define S390X_aes_192_cbc_CAPABLE 0 +# define S390X_aes_256_cbc_CAPABLE 0 # define S390X_AES_CBC_CTX EVP_AES_KEY # define s390x_aes_cbc_init_key aes_init_key @@ -1195,11 +1190,11 @@ S390X_AES_ECB_CTX *cctx = EVP_C_DATA(S390X_AES_ECB_CTX, ctx); const int keylen = EVP_CIPHER_CTX_key_length(ctx); - cctx->fc = S390X_AES_FC(keylen); - if (!enc) - cctx->fc |= S390X_DECRYPT; + cctx->fc = S390X_AES_FC(keylen) | (enc ? 0 : S390X_DECRYPT); + + if (key != NULL) + memcpy(cctx->km.param.k, key, keylen); - memcpy(cctx->km.param.k, key, keylen); return 1; } @@ -1227,14 +1222,17 @@ const unsigned char *ivec, int enc) { S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx); - const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx); + const unsigned char *oiv = EVP_CIPHER_CTX_original_iv(ctx); const int keylen = EVP_CIPHER_CTX_key_length(ctx); const int ivlen = EVP_CIPHER_CTX_iv_length(ctx); - memcpy(cctx->kmo.param.cv, iv, ivlen); - memcpy(cctx->kmo.param.k, key, keylen); cctx->fc = S390X_AES_FC(keylen); + + if (key != NULL) + memcpy(cctx->kmo.param.k, key, keylen); + cctx->res = 0; + memcpy(cctx->kmo.param.cv, oiv, ivlen); return 1; } @@ -1242,9 +1240,12 @@ const unsigned char *in, size_t len) { S390X_AES_OFB_CTX *cctx = EVP_C_DATA(S390X_AES_OFB_CTX, ctx); + const int ivlen = EVP_CIPHER_CTX_iv_length(ctx); + unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); int n = cctx->res; int rem; + memcpy(cctx->kmo.param.cv, iv, ivlen); while (n && len) { *out = *in ^ cctx->kmo.param.cv[n]; n = (n + 1) & 0xf; @@ -1273,6 +1274,7 @@ } } + memcpy(iv, cctx->kmo.param.cv, ivlen); cctx->res = n; return 1; } @@ -1292,18 +1294,18 @@ const unsigned char *ivec, int enc) { S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx); - const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx); + const unsigned char *oiv = EVP_CIPHER_CTX_original_iv(ctx); const int keylen = EVP_CIPHER_CTX_key_length(ctx); const int ivlen = EVP_CIPHER_CTX_iv_length(ctx); - cctx->fc = S390X_AES_FC(keylen); - cctx->fc |= 16 << 24; /* 16 bytes cipher feedback */ - if (!enc) - cctx->fc |= S390X_DECRYPT; + cctx->fc = S390X_AES_FC(keylen) | (enc ? 0 : S390X_DECRYPT) + | (16 << 24); /* 16 bytes cipher feedback */ + + if (key != NULL) + memcpy(cctx->kmf.param.k, key, keylen); cctx->res = 0; - memcpy(cctx->kmf.param.cv, iv, ivlen); - memcpy(cctx->kmf.param.k, key, keylen); + memcpy(cctx->kmf.param.cv, oiv, ivlen); return 1; } @@ -1313,10 +1315,13 @@ S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx); const int keylen = EVP_CIPHER_CTX_key_length(ctx); const int enc = EVP_CIPHER_CTX_encrypting(ctx); + const int ivlen = EVP_CIPHER_CTX_iv_length(ctx); + unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); int n = cctx->res; int rem; unsigned char tmp; + memcpy(cctx->kmf.param.cv, iv, ivlen); while (n && len) { tmp = *in; *out = cctx->kmf.param.cv[n] ^ tmp; @@ -1349,6 +1354,7 @@ } } + memcpy(iv, cctx->kmf.param.cv, ivlen); cctx->res = n; return 1; } @@ -1365,17 +1371,18 @@ const unsigned char *ivec, int enc) { S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx); - const unsigned char *iv = EVP_CIPHER_CTX_original_iv(ctx); + const unsigned char *oiv = EVP_CIPHER_CTX_original_iv(ctx); const int keylen = EVP_CIPHER_CTX_key_length(ctx); const int ivlen = EVP_CIPHER_CTX_iv_length(ctx); - cctx->fc = S390X_AES_FC(keylen); - cctx->fc |= 1 << 24; /* 1 byte cipher feedback */ - if (!enc) - cctx->fc |= S390X_DECRYPT; + cctx->fc = S390X_AES_FC(keylen) | (enc ? 0 : S390X_DECRYPT) + | (1 << 24); /* 1 byte cipher feedback flag */ - memcpy(cctx->kmf.param.cv, iv, ivlen); - memcpy(cctx->kmf.param.k, key, keylen); + if (key != NULL) + memcpy(cctx->kmf.param.k, key, keylen); + + cctx->res = 0; + memcpy(cctx->kmf.param.cv, oiv, ivlen); return 1; } @@ -1383,8 +1390,12 @@ const unsigned char *in, size_t len) { S390X_AES_CFB_CTX *cctx = EVP_C_DATA(S390X_AES_CFB_CTX, ctx); + const int ivlen = EVP_CIPHER_CTX_iv_length(ctx); + unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); + memcpy(cctx->kmf.param.cv, iv, ivlen); s390x_kmf(in, len, out, cctx->fc, &cctx->kmf.param); + memcpy(iv, cctx->kmf.param.cv, ivlen); return 1; } @@ -1398,9 +1409,9 @@ static int s390x_aes_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t len); -# define S390X_aes_128_ctr_CAPABLE 1 /* checked by callee */ -# define S390X_aes_192_ctr_CAPABLE 1 -# define S390X_aes_256_ctr_CAPABLE 1 +# define S390X_aes_128_ctr_CAPABLE 0 /* checked by callee */ +# define S390X_aes_192_ctr_CAPABLE 0 +# define S390X_aes_256_ctr_CAPABLE 0 # define S390X_AES_CTR_CTX EVP_AES_KEY # define s390x_aes_ctr_init_key aes_init_key @@ -1568,8 +1579,7 @@ /*- * Initialize context structure. Code is big-endian. */ -static void s390x_aes_gcm_setiv(S390X_AES_GCM_CTX *ctx, - const unsigned char *iv) +static void s390x_aes_gcm_setiv(S390X_AES_GCM_CTX *ctx) { ctx->kma.param.t.g[0] = 0; ctx->kma.param.t.g[1] = 0; @@ -1580,12 +1590,11 @@ ctx->kreslen = 0; if (ctx->ivlen == 12) { - memcpy(&ctx->kma.param.j0, iv, ctx->ivlen); + memcpy(&ctx->kma.param.j0, ctx->iv, ctx->ivlen); ctx->kma.param.j0.w[3] = 1; ctx->kma.param.cv.w = 1; } else { /* ctx->iv has the right size and is already padded. */ - memcpy(ctx->iv, iv, ctx->ivlen); s390x_kma(ctx->iv, S390X_gcm_ivpadlen(ctx->ivlen), NULL, 0, NULL, ctx->fc, &ctx->kma.param); ctx->fc |= S390X_KMA_HS; @@ -1699,7 +1708,7 @@ if (gctx->iv_gen == 0 || gctx->key_set == 0) return 0; - s390x_aes_gcm_setiv(gctx, gctx->iv); + s390x_aes_gcm_setiv(gctx); if (arg <= 0 || arg > gctx->ivlen) arg = gctx->ivlen; @@ -1719,7 +1728,7 @@ return 0; memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg); - s390x_aes_gcm_setiv(gctx, gctx->iv); + s390x_aes_gcm_setiv(gctx); gctx->iv_set = 1; return 1; @@ -1775,43 +1784,36 @@ } /*- - * Set key and/or iv. Returns 1 on success. Otherwise 0 is returned. + * Set key or iv or enc/dec. Returns 1 on success. Otherwise 0 is returned. */ static int s390x_aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { S390X_AES_GCM_CTX *gctx = EVP_C_DATA(S390X_AES_GCM_CTX, ctx); - int keylen; + const int keylen = EVP_CIPHER_CTX_key_length(ctx); - if (iv == NULL && key == NULL) - return 1; + gctx->fc = S390X_AES_FC(keylen) | (enc ? 0 : S390X_DECRYPT); if (key != NULL) { - keylen = EVP_CIPHER_CTX_key_length(ctx); + gctx->fc &= ~S390X_KMA_HS; memcpy(&gctx->kma.param.k, key, keylen); - - gctx->fc = S390X_AES_FC(keylen); - if (!enc) - gctx->fc |= S390X_DECRYPT; - - if (iv == NULL && gctx->iv_set) - iv = gctx->iv; - - if (iv != NULL) { - s390x_aes_gcm_setiv(gctx, iv); - gctx->iv_set = 1; - } gctx->key_set = 1; - } else { - if (gctx->key_set) - s390x_aes_gcm_setiv(gctx, iv); - else - memcpy(gctx->iv, iv, gctx->ivlen); + } - gctx->iv_set = 1; + if (iv != NULL) { + memcpy(gctx->iv, iv, gctx->ivlen); gctx->iv_gen = 0; + gctx->iv_set = 1; } + + if (gctx->key_set && gctx->iv_set) + s390x_aes_gcm_setiv(gctx); + + gctx->fc &= ~(S390X_KMA_LPC | S390X_KMA_LAAD); + gctx->areslen = 0; + gctx->mreslen = 0; + gctx->kreslen = 0; return 1; } @@ -1900,7 +1902,6 @@ /* recall that we already did en-/decrypt gctx->mres * and returned it to caller... */ OPENSSL_cleanse(tmp, gctx->mreslen); - gctx->iv_set = 0; enc = EVP_CIPHER_CTX_encrypting(ctx); if (enc) { @@ -1934,8 +1935,8 @@ } # define S390X_AES_XTS_CTX EVP_AES_XTS_CTX -# define S390X_aes_128_xts_CAPABLE 1 /* checked by callee */ -# define S390X_aes_256_xts_CAPABLE 1 +# define S390X_aes_128_xts_CAPABLE 0 /* checked by callee */ +# define S390X_aes_256_xts_CAPABLE 0 # define s390x_aes_xts_init_key aes_xts_init_key static int s390x_aes_xts_init_key(EVP_CIPHER_CTX *ctx, @@ -2139,9 +2140,10 @@ const unsigned char *in, size_t len) { S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); - unsigned char *ivec = EVP_CIPHER_CTX_iv_noconst(ctx); + const unsigned char *ivec = EVP_CIPHER_CTX_iv(ctx); unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); const int enc = EVP_CIPHER_CTX_encrypting(ctx); + unsigned char iv[EVP_MAX_IV_LENGTH]; if (out != in || len < (EVP_CCM_TLS_EXPLICIT_IV_LEN + (size_t)cctx->aes.ccm.m)) @@ -2157,8 +2159,9 @@ * Get explicit iv (sequence number). We already have fixed iv * (server/client_write_iv) here. */ - memcpy(ivec + EVP_CCM_TLS_FIXED_IV_LEN, in, EVP_CCM_TLS_EXPLICIT_IV_LEN); - s390x_aes_ccm_setiv(cctx, ivec, len); + memcpy(iv, ivec, sizeof(iv)); + memcpy(iv + EVP_CCM_TLS_FIXED_IV_LEN, in, EVP_CCM_TLS_EXPLICIT_IV_LEN); + s390x_aes_ccm_setiv(cctx, iv, len); /* Process aad (sequence number|type|version|length) */ s390x_aes_ccm_aad(cctx, buf, cctx->aes.ccm.tls_aad_len); @@ -2185,42 +2188,35 @@ } /*- - * Set key and flag field and/or iv. Returns 1 if successful. Otherwise 0 is - * returned. + * Set key or iv or enc/dec. Returns 1 if successful. + * Otherwise 0 is returned. */ static int s390x_aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); - unsigned char *ivec; - int keylen; + const int keylen = EVP_CIPHER_CTX_key_length(ctx); + unsigned char *ivec = EVP_CIPHER_CTX_iv_noconst(ctx); - if (iv == NULL && key == NULL) - return 1; + cctx->aes.ccm.fc = S390X_AES_FC(keylen); if (key != NULL) { - keylen = EVP_CIPHER_CTX_key_length(ctx); - cctx->aes.ccm.fc = S390X_AES_FC(keylen); memcpy(cctx->aes.ccm.kmac_param.k, key, keylen); - - /* Store encoded m and l. */ - cctx->aes.ccm.nonce.b[0] = ((cctx->aes.ccm.l - 1) & 0x7) - | (((cctx->aes.ccm.m - 2) >> 1) & 0x7) << 3; - memset(cctx->aes.ccm.nonce.b + 1, 0, - sizeof(cctx->aes.ccm.nonce.b)); - cctx->aes.ccm.blocks = 0; - cctx->aes.ccm.key_set = 1; } - if (iv != NULL) { - ivec = EVP_CIPHER_CTX_iv_noconst(ctx); memcpy(ivec, iv, 15 - cctx->aes.ccm.l); - cctx->aes.ccm.iv_set = 1; } + /* Store encoded m and l. */ + cctx->aes.ccm.nonce.b[0] = ((cctx->aes.ccm.l - 1) & 0x7) + | (((cctx->aes.ccm.m - 2) >> 1) & 0x7) << 3; + memset(cctx->aes.ccm.nonce.b + 1, 0, sizeof(cctx->aes.ccm.nonce.b) - 1); + + cctx->aes.ccm.blocks = 0; + cctx->aes.ccm.len_set = 0; return 1; } @@ -2235,8 +2231,9 @@ { S390X_AES_CCM_CTX *cctx = EVP_C_DATA(S390X_AES_CCM_CTX, ctx); const int enc = EVP_CIPHER_CTX_encrypting(ctx); + const unsigned char *ivec = EVP_CIPHER_CTX_iv(ctx); + unsigned char *buf; int rv; - unsigned char *buf, *ivec; if (!cctx->aes.ccm.key_set) return -1; @@ -2258,7 +2255,6 @@ if (out == NULL) { /* Update(): Pass message length. */ if (in == NULL) { - ivec = EVP_CIPHER_CTX_iv_noconst(ctx); s390x_aes_ccm_setiv(cctx, ivec, len); cctx->aes.ccm.len_set = 1; @@ -2284,7 +2280,6 @@ * In case message length was not previously set explicitly via * Update(), set it now. */ - ivec = EVP_CIPHER_CTX_iv_noconst(ctx); s390x_aes_ccm_setiv(cctx, ivec, len); cctx->aes.ccm.len_set = 1; @@ -2309,9 +2304,6 @@ if (rv == -1) OPENSSL_cleanse(out, len); - cctx->aes.ccm.iv_set = 0; - cctx->aes.ccm.tag_set = 0; - cctx->aes.ccm.len_set = 0; return rv; } } @@ -2419,9 +2411,6 @@ return 0; memcpy(ptr, cctx->aes.ccm.kmac_param.icv.b, cctx->aes.ccm.m); - cctx->aes.ccm.tag_set = 0; - cctx->aes.ccm.iv_set = 0; - cctx->aes.ccm.len_set = 0; return 1; case EVP_CTRL_COPY: @@ -2458,7 +2447,7 @@ nid##_##keylen##_##nmode,blocksize, \ keylen / 8, \ ivlen, \ - flags | EVP_CIPH_##MODE##_MODE, \ + flags | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_##MODE##_MODE, \ s390x_aes_##mode##_init_key, \ s390x_aes_##mode##_cipher, \ NULL, \ @@ -2495,7 +2484,7 @@ blocksize, \ (EVP_CIPH_##MODE##_MODE == EVP_CIPH_XTS_MODE ? 2 : 1) * keylen / 8, \ ivlen, \ - flags | EVP_CIPH_##MODE##_MODE, \ + flags | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_##MODE##_MODE, \ s390x_aes_##mode##_init_key, \ s390x_aes_##mode##_cipher, \ s390x_aes_##mode##_cleanup, \ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/e_camellia.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/e_camellia.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/e_camellia.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/e_camellia.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -55,16 +55,16 @@ void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const CAMELLIA_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, size_t len, const CAMELLIA_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len, const CAMELLIA_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out, size_t len, const CAMELLIA_KEY *key, - unsigned char *ivec); + unsigned char *ivec, int /*unused*/); void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out, size_t blocks, const CAMELLIA_KEY *key, unsigned char *ivec); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/encode.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/encode.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/encode.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/encode.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -423,7 +423,7 @@ table = data_ascii2bin; /* trim white space from the start of the line. */ - while ((conv_ascii2bin(*f, table) == B64_WS) && (n > 0)) { + while ((n > 0) && (conv_ascii2bin(*f, table) == B64_WS)) { f++; n--; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/evp_enc.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/evp_enc.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/evp_enc.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/evp_enc.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -8,6 +8,7 @@ */ #include +#include #include #include "internal/cryptlib.h" #include @@ -84,7 +85,11 @@ * previous check attempted to avoid this if the same ENGINE and * EVP_CIPHER could be used). */ - if (ctx->cipher) { + if (ctx->cipher +#ifndef OPENSSL_NO_ENGINE + || ctx->engine +#endif + || ctx->cipher_data) { unsigned long flags = ctx->flags; EVP_CIPHER_CTX_reset(ctx); /* Restore encrypt and flags */ @@ -104,11 +109,7 @@ /* There's an ENGINE for this job ... (apparently) */ const EVP_CIPHER *c = ENGINE_get_cipher(impl, cipher->nid); if (!c) { - /* - * One positive side-effect of US's export control history, - * is that we should at least be able to avoid using US - * misspellings of "initialisation"? - */ + ENGINE_finish(impl); EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_INITIALIZATION_ERROR); return 0; } @@ -355,6 +356,19 @@ return 1; } else { j = bl - i; + + /* + * Once we've processed the first j bytes from in, the amount of + * data left that is a multiple of the block length is: + * (inl - j) & ~(bl - 1) + * We must ensure that this amount of data, plus the one block that + * we process from ctx->buf does not exceed INT_MAX + */ + if (((inl - j) & ~(bl - 1)) > INT_MAX - bl) { + EVPerr(EVP_F_EVP_ENCRYPTDECRYPTUPDATE, + EVP_R_OUTPUT_WOULD_OVERFLOW); + return 0; + } memcpy(&(ctx->buf[i]), in, j); inl -= j; in += j; @@ -502,6 +516,19 @@ EVPerr(EVP_F_EVP_DECRYPTUPDATE, EVP_R_PARTIALLY_OVERLAPPING); return 0; } + /* + * final_used is only ever set if buf_len is 0. Therefore the maximum + * length output we will ever see from evp_EncryptDecryptUpdate is + * the maximum multiple of the block length that is <= inl, or just: + * inl & ~(b - 1) + * Since final_used has been set then the final output length is: + * (inl & ~(b - 1)) + b + * This must never exceed INT_MAX + */ + if ((inl & ~(b - 1)) > INT_MAX - b) { + EVPerr(EVP_F_EVP_DECRYPTUPDATE, EVP_R_OUTPUT_WOULD_OVERFLOW); + return 0; + } memcpy(out, ctx->final, b); out += b; fix_len = 1; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/evp_err.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/evp_err.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/evp_err.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/evp_err.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -239,6 +239,8 @@ "operation not supported for this keytype"}, {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_OPERATON_NOT_INITIALIZED), "operaton not initialized"}, + {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_OUTPUT_WOULD_OVERFLOW), + "output would overflow"}, {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_PARTIALLY_OVERLAPPING), "partially overlapping buffers"}, {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_PBKDF2_ERROR), "pbkdf2 error"}, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/p_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/p_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/evp/p_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/evp/p_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -212,10 +212,15 @@ } if (pkey) { pkey->ameth = ameth; - pkey->engine = e; - pkey->type = pkey->ameth->pkey_id; pkey->save_type = type; +# ifndef OPENSSL_NO_ENGINE + if (eptr == NULL && e != NULL && !ENGINE_init(e)) { + EVPerr(EVP_F_PKEY_SET_TYPE, EVP_R_INITIALIZATION_ERROR); + return 0; + } +# endif + pkey->engine = e; } return 1; } @@ -520,7 +525,7 @@ EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey) { - if (pkey->type != EVP_PKEY_EC) { + if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC) { EVPerr(EVP_F_EVP_PKEY_GET0_EC_KEY, EVP_R_EXPECTING_A_EC_KEY); return NULL; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/hmac/hm_ameth.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/hmac/hm_ameth.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/hmac/hm_ameth.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/hmac/hm_ameth.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2007-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -47,7 +47,8 @@ static int hmac_pkey_public_cmp(const EVP_PKEY *a, const EVP_PKEY *b) { - return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)); + /* the ameth pub_cmp must return 1 on match, 0 on mismatch */ + return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)) == 0; } static int hmac_set_priv_key(EVP_PKEY *pkey, const unsigned char *priv, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/lhash/lhash.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/lhash/lhash.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/lhash/lhash.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/lhash/lhash.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -343,7 +343,8 @@ v = n | (*c); n += 0x100; r = (int)((v >> 2) ^ v) & 0x0f; - ret = (ret << r) | (ret >> (32 - r)); + /* cast to uint64_t to avoid 32 bit shift of 32 bit value */ + ret = (ret << r) | (unsigned long)((uint64_t)ret >> (32 - r)); ret &= 0xFFFFFFFFL; ret ^= v * v; c++; @@ -364,7 +365,8 @@ for (n = 0x100; *c != '\0'; n += 0x100) { v = n | ossl_tolower(*c); r = (int)((v >> 2) ^ v) & 0x0f; - ret = (ret << r) | (ret >> (32 - r)); + /* cast to uint64_t to avoid 32 bit shift of 32 bit value */ + ret = (ret << r) | (unsigned long)((uint64_t)ret >> (32 - r)); ret &= 0xFFFFFFFFL; ret ^= v * v; c++; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/mem_sec.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/mem_sec.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/mem_sec.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/mem_sec.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2004-2014, Akamai Technologies. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -34,6 +34,12 @@ # include # endif # endif +# if defined(__FreeBSD__) +# define MADV_DONTDUMP MADV_NOCORE +# endif +# if !defined(MAP_CONCEAL) +# define MAP_CONCEAL 0 +# endif # include # include # include @@ -442,7 +448,7 @@ if (1) { #ifdef MAP_ANON sh.map_result = mmap(NULL, sh.map_size, - PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0); + PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE|MAP_CONCEAL, -1, 0); } else { #endif int fd; @@ -502,7 +508,7 @@ OPENSSL_free(sh.freelist); OPENSSL_free(sh.bittable); OPENSSL_free(sh.bitmalloc); - if (sh.map_result != NULL && sh.map_size) + if (sh.map_result != MAP_FAILED && sh.map_size) munmap(sh.map_result, sh.map_size); memset(&sh, 0, sizeof(sh)); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/asm/aesni-gcm-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/asm/aesni-gcm-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/asm/aesni-gcm-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/asm/aesni-gcm-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -66,7 +66,7 @@ $avx = ($1>=10) + ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/asm/ghash-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/asm/ghash-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/asm/ghash-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/asm/ghash-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -116,7 +116,7 @@ $avx = ($1>=10) + ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/cbc128.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/cbc128.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/cbc128.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/cbc128.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -15,6 +15,12 @@ # define STRICT_ALIGNMENT 0 #endif +#if defined(__GNUC__) && !STRICT_ALIGNMENT +typedef size_t size_t_aX __attribute((__aligned__(1))); +#else +typedef size_t size_t_aX; +#endif + void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, size_t len, const void *key, unsigned char ivec[16], block128_f block) @@ -40,8 +46,8 @@ } else { while (len >= 16) { for (n = 0; n < 16; n += sizeof(size_t)) - *(size_t *)(out + n) = - *(size_t *)(in + n) ^ *(size_t *)(iv + n); + *(size_t_aX *)(out + n) = + *(size_t_aX *)(in + n) ^ *(size_t_aX *)(iv + n); (*block) (out, out, key); iv = out; len -= 16; @@ -63,7 +69,8 @@ in += 16; out += 16; } - memcpy(ivec, iv, 16); + if (ivec != iv) + memcpy(ivec, iv, 16); } void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, @@ -96,7 +103,8 @@ } } else if (16 % sizeof(size_t) == 0) { /* always true */ while (len >= 16) { - size_t *out_t = (size_t *)out, *iv_t = (size_t *)iv; + size_t_aX *out_t = (size_t_aX *)out; + size_t_aX *iv_t = (size_t_aX *)iv; (*block) (in, out, key); for (n = 0; n < 16 / sizeof(size_t); n++) @@ -107,7 +115,8 @@ out += 16; } } - memcpy(ivec, iv, 16); + if (ivec != iv) + memcpy(ivec, iv, 16); } else { if (STRICT_ALIGNMENT && ((size_t)in | (size_t)out | (size_t)ivec) % sizeof(size_t) != 0) { @@ -125,8 +134,10 @@ } } else if (16 % sizeof(size_t) == 0) { /* always true */ while (len >= 16) { - size_t c, *out_t = (size_t *)out, *ivec_t = (size_t *)ivec; - const size_t *in_t = (const size_t *)in; + size_t c; + size_t_aX *out_t = (size_t_aX *)out; + size_t_aX *ivec_t = (size_t_aX *)ivec; + const size_t_aX *in_t = (const size_t_aX *)in; (*block) (in, tmp.c, key); for (n = 0; n < 16 / sizeof(size_t); n++) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/ccm128.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/ccm128.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/ccm128.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/ccm128.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2011-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2011-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,6 +11,14 @@ #include "modes_local.h" #include +#ifndef STRICT_ALIGNMENT +# ifdef __GNUC__ +typedef u64 u64_a1 __attribute((__aligned__(1))); +# else +typedef u64 u64_a1; +# endif +#endif + /* * First you setup M and L parameters and pass the key schedule. This is * called once per session setup... @@ -170,8 +178,8 @@ ctx->cmac.u[0] ^= temp.u[0]; ctx->cmac.u[1] ^= temp.u[1]; #else - ctx->cmac.u[0] ^= ((u64 *)inp)[0]; - ctx->cmac.u[1] ^= ((u64 *)inp)[1]; + ctx->cmac.u[0] ^= ((u64_a1 *)inp)[0]; + ctx->cmac.u[1] ^= ((u64_a1 *)inp)[1]; #endif (*block) (ctx->cmac.c, ctx->cmac.c, key); (*block) (ctx->nonce.c, scratch.c, key); @@ -181,8 +189,8 @@ temp.u[1] ^= scratch.u[1]; memcpy(out, temp.c, 16); #else - ((u64 *)out)[0] = scratch.u[0] ^ ((u64 *)inp)[0]; - ((u64 *)out)[1] = scratch.u[1] ^ ((u64 *)inp)[1]; + ((u64_a1 *)out)[0] = scratch.u[0] ^ ((u64_a1 *)inp)[0]; + ((u64_a1 *)out)[1] = scratch.u[1] ^ ((u64_a1 *)inp)[1]; #endif inp += 16; out += 16; @@ -254,8 +262,10 @@ ctx->cmac.u[1] ^= (scratch.u[1] ^= temp.u[1]); memcpy(out, scratch.c, 16); #else - ctx->cmac.u[0] ^= (((u64 *)out)[0] = scratch.u[0] ^ ((u64 *)inp)[0]); - ctx->cmac.u[1] ^= (((u64 *)out)[1] = scratch.u[1] ^ ((u64 *)inp)[1]); + ctx->cmac.u[0] ^= (((u64_a1 *)out)[0] + = scratch.u[0] ^ ((u64_a1 *)inp)[0]); + ctx->cmac.u[1] ^= (((u64_a1 *)out)[1] + = scratch.u[1] ^ ((u64_a1 *)inp)[1]); #endif (*block) (ctx->cmac.c, ctx->cmac.c, key); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/cfb128.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/cfb128.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/cfb128.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/cfb128.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,6 +11,12 @@ #include "modes_local.h" #include +#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT) +typedef size_t size_t_aX __attribute((__aligned__(1))); +#else +typedef size_t size_t_aX; +#endif + /* * The input and output encrypted as though 128bit cfb mode is being used. * The extra state information to record how much of the 128bit block we have @@ -43,8 +49,9 @@ while (len >= 16) { (*block) (ivec, ivec, key); for (; n < 16; n += sizeof(size_t)) { - *(size_t *)(out + n) = - *(size_t *)(ivec + n) ^= *(size_t *)(in + n); + *(size_t_aX *)(out + n) = + *(size_t_aX *)(ivec + n) + ^= *(size_t_aX *)(in + n); } len -= 16; out += 16; @@ -92,9 +99,10 @@ while (len >= 16) { (*block) (ivec, ivec, key); for (; n < 16; n += sizeof(size_t)) { - size_t t = *(size_t *)(in + n); - *(size_t *)(out + n) = *(size_t *)(ivec + n) ^ t; - *(size_t *)(ivec + n) = t; + size_t t = *(size_t_aX *)(in + n); + *(size_t_aX *)(out + n) + = *(size_t_aX *)(ivec + n) ^ t; + *(size_t_aX *)(ivec + n) = t; } len -= 16; out += 16; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/ctr128.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/ctr128.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/ctr128.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/ctr128.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,6 +11,12 @@ #include "modes_local.h" #include +#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT) +typedef size_t size_t_aX __attribute((__aligned__(1))); +#else +typedef size_t size_t_aX; +#endif + /* * NOTE: the IV/counter CTR mode is big-endian. The code itself is * endian-neutral. @@ -97,8 +103,9 @@ (*block) (ivec, ecount_buf, key); ctr128_inc_aligned(ivec); for (n = 0; n < 16; n += sizeof(size_t)) - *(size_t *)(out + n) = - *(size_t *)(in + n) ^ *(size_t *)(ecount_buf + n); + *(size_t_aX *)(out + n) = + *(size_t_aX *)(in + n) + ^ *(size_t_aX *)(ecount_buf + n); len -= 16; out += 16; in += 16; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/gcm128.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/gcm128.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/gcm128.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/gcm128.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,6 +11,12 @@ #include "modes_local.h" #include +#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT) +typedef size_t size_t_aX __attribute((__aligned__(1))); +#else +typedef size_t size_t_aX; +#endif + #if defined(BSWAP4) && defined(STRICT_ALIGNMENT) /* redefine, because alignment is ensured */ # undef GETU32 @@ -1080,8 +1086,8 @@ size_t j = GHASH_CHUNK; while (j) { - size_t *out_t = (size_t *)out; - const size_t *in_t = (const size_t *)in; + size_t_aX *out_t = (size_t_aX *)out; + const size_t_aX *in_t = (const size_t_aX *)in; (*block) (ctx->Yi.c, ctx->EKi.c, key); ++ctr; @@ -1107,8 +1113,8 @@ size_t j = i; while (len >= 16) { - size_t *out_t = (size_t *)out; - const size_t *in_t = (const size_t *)in; + size_t_aX *out_t = (size_t_aX *)out; + const size_t_aX *in_t = (const size_t_aX *)in; (*block) (ctx->Yi.c, ctx->EKi.c, key); ++ctr; @@ -1318,8 +1324,8 @@ GHASH(ctx, in, GHASH_CHUNK); while (j) { - size_t *out_t = (size_t *)out; - const size_t *in_t = (const size_t *)in; + size_t_aX *out_t = (size_t_aX *)out; + const size_t_aX *in_t = (const size_t_aX *)in; (*block) (ctx->Yi.c, ctx->EKi.c, key); ++ctr; @@ -1343,8 +1349,8 @@ if ((i = (len & (size_t)-16))) { GHASH(ctx, in, i); while (len >= 16) { - size_t *out_t = (size_t *)out; - const size_t *in_t = (const size_t *)in; + size_t_aX *out_t = (size_t_aX *)out; + const size_t_aX *in_t = (const size_t_aX *)in; (*block) (ctx->Yi.c, ctx->EKi.c, key); ++ctr; @@ -1379,8 +1385,8 @@ else ctx->Yi.d[3] = ctr; for (i = 0; i < 16 / sizeof(size_t); ++i) { - size_t c = in[i]; - out[i] = c ^ ctx->EKi.t[i]; + size_t c = in_t[i]; + out_t[i] = c ^ ctx->EKi.t[i]; ctx->Xi.t[i] ^= c; } GCM_MUL(ctx); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/modes_local.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/modes_local.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/modes_local.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/modes_local.h 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -37,6 +37,14 @@ # endif #endif +#ifndef STRICT_ALIGNMENT +# ifdef __GNUC__ +typedef u32 u32_a1 __attribute((__aligned__(1))); +# else +typedef u32 u32_a1; +# endif +#endif + #if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) # if defined(__GNUC__) && __GNUC__>=2 # if defined(__x86_64) || defined(__x86_64__) @@ -55,12 +63,15 @@ asm ("bswapl %0" \ : "+r"(ret_)); ret_; }) # elif defined(__aarch64__) -# define BSWAP8(x) ({ u64 ret_; \ +# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \ + __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__ +# define BSWAP8(x) ({ u64 ret_; \ asm ("rev %0,%1" \ : "=r"(ret_) : "r"(x)); ret_; }) -# define BSWAP4(x) ({ u32 ret_; \ +# define BSWAP4(x) ({ u32 ret_; \ asm ("rev %w0,%w1" \ : "=r"(ret_) : "r"(x)); ret_; }) +# endif # elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT) # define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \ asm ("rev %0,%0; rev %1,%1" \ @@ -86,8 +97,8 @@ # endif #endif #if defined(BSWAP4) && !defined(STRICT_ALIGNMENT) -# define GETU32(p) BSWAP4(*(const u32 *)(p)) -# define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v) +# define GETU32(p) BSWAP4(*(const u32_a1 *)(p)) +# define PUTU32(p,v) *(u32_a1 *)(p) = BSWAP4(v) #else # define GETU32(p) ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3]) # define PUTU32(p,v) ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v)) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/ofb128.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/ofb128.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/ofb128.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/ofb128.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,6 +11,12 @@ #include "modes_local.h" #include +#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT) +typedef size_t size_t_aX __attribute((__aligned__(1))); +#else +typedef size_t size_t_aX; +#endif + /* * The input and output encrypted as though 128bit ofb mode is being used. * The extra state information to record how much of the 128bit block we have @@ -41,8 +47,9 @@ while (len >= 16) { (*block) (ivec, ivec, key); for (; n < 16; n += sizeof(size_t)) - *(size_t *)(out + n) = - *(size_t *)(in + n) ^ *(size_t *)(ivec + n); + *(size_t_aX *)(out + n) = + *(size_t_aX *)(in + n) + ^ *(size_t_aX *)(ivec + n); len -= 16; out += 16; in += 16; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/xts128.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/xts128.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/modes/xts128.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/modes/xts128.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2011-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,6 +11,14 @@ #include "modes_local.h" #include +#ifndef STRICT_ALIGNMENT +# ifdef __GNUC__ +typedef u64 u64_a1 __attribute((__aligned__(1))); +# else +typedef u64 u64_a1; +# endif +#endif + int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, const unsigned char iv[16], const unsigned char *inp, unsigned char *out, @@ -45,8 +53,8 @@ scratch.u[0] ^= tweak.u[0]; scratch.u[1] ^= tweak.u[1]; #else - scratch.u[0] = ((u64 *)inp)[0] ^ tweak.u[0]; - scratch.u[1] = ((u64 *)inp)[1] ^ tweak.u[1]; + scratch.u[0] = ((u64_a1 *)inp)[0] ^ tweak.u[0]; + scratch.u[1] = ((u64_a1 *)inp)[1] ^ tweak.u[1]; #endif (*ctx->block1) (scratch.c, scratch.c, ctx->key1); #if defined(STRICT_ALIGNMENT) @@ -54,8 +62,8 @@ scratch.u[1] ^= tweak.u[1]; memcpy(out, scratch.c, 16); #else - ((u64 *)out)[0] = scratch.u[0] ^= tweak.u[0]; - ((u64 *)out)[1] = scratch.u[1] ^= tweak.u[1]; + ((u64_a1 *)out)[0] = scratch.u[0] ^= tweak.u[0]; + ((u64_a1 *)out)[1] = scratch.u[1] ^= tweak.u[1]; #endif inp += 16; out += 16; @@ -128,8 +136,8 @@ scratch.u[0] ^= tweak1.u[0]; scratch.u[1] ^= tweak1.u[1]; #else - scratch.u[0] = ((u64 *)inp)[0] ^ tweak1.u[0]; - scratch.u[1] = ((u64 *)inp)[1] ^ tweak1.u[1]; + scratch.u[0] = ((u64_a1 *)inp)[0] ^ tweak1.u[0]; + scratch.u[1] = ((u64_a1 *)inp)[1] ^ tweak1.u[1]; #endif (*ctx->block1) (scratch.c, scratch.c, ctx->key1); scratch.u[0] ^= tweak1.u[0]; @@ -148,8 +156,8 @@ scratch.u[1] ^= tweak.u[1]; memcpy(out, scratch.c, 16); #else - ((u64 *)out)[0] = scratch.u[0] ^ tweak.u[0]; - ((u64 *)out)[1] = scratch.u[1] ^ tweak.u[1]; + ((u64_a1 *)out)[0] = scratch.u[0] ^ tweak.u[0]; + ((u64_a1 *)out)[1] = scratch.u[1] ^ tweak.u[1]; #endif } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/objects/obj_dat.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/objects/obj_dat.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/objects/obj_dat.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/objects/obj_dat.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -228,9 +228,10 @@ return NULL; } return (ASN1_OBJECT *)&(nid_objs[n]); - } else if (added == NULL) + } else if (added == NULL) { + OBJerr(OBJ_F_OBJ_NID2OBJ, OBJ_R_UNKNOWN_NID); return NULL; - else { + } else { ad.type = ADDED_NID; ad.obj = &ob; ob.nid = n; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/objects/obj_dat.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/objects/obj_dat.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/objects/obj_dat.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/objects/obj_dat.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/objects/obj_dat.pl * - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/objects/obj_xref.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/objects/obj_xref.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/objects/obj_xref.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/objects/obj_xref.h 2022-04-05 07:17:00.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by objxref.pl * - * Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1998-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/objects/o_names.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/objects/o_names.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/objects/o_names.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/objects/o_names.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1998-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1998-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -67,8 +67,14 @@ DEFINE_RUN_ONCE_STATIC(o_names_init) { CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_DISABLE); - names_lh = lh_OBJ_NAME_new(obj_name_hash, obj_name_cmp); + names_lh = NULL; obj_lock = CRYPTO_THREAD_lock_new(); + if (obj_lock != NULL) + names_lh = lh_OBJ_NAME_new(obj_name_hash, obj_name_cmp); + if (names_lh == NULL) { + CRYPTO_THREAD_lock_free(obj_lock); + obj_lock = NULL; + } CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ENABLE); return names_lh != NULL && obj_lock != NULL; } @@ -217,10 +223,8 @@ type &= ~OBJ_NAME_ALIAS; onp = OPENSSL_malloc(sizeof(*onp)); - if (onp == NULL) { - /* ERROR */ - goto unlock; - } + if (onp == NULL) + return 0; onp->name = name; onp->alias = alias; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/o_str.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/o_str.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/o_str.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/o_str.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2003-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2003-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -220,7 +220,7 @@ int openssl_strerror_r(int errnum, char *buf, size_t buflen) { -#if defined(_MSC_VER) && _MSC_VER>=1400 +#if defined(_MSC_VER) && _MSC_VER>=1400 && !defined(_WIN32_WCE) return !strerror_s(buf, buflen, errnum); #elif defined(_GNU_SOURCE) char *err; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/o_time.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/o_time.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/o_time.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/o_time.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -41,7 +41,7 @@ if (gmtime_r(timer, result) == NULL) return NULL; ts = result; -#elif defined (OPENSSL_SYS_WINDOWS) && defined(_MSC_VER) && _MSC_VER >= 1400 +#elif defined (OPENSSL_SYS_WINDOWS) && defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(_WIN32_WCE) if (gmtime_s(result, timer)) return NULL; ts = result; @@ -133,8 +133,8 @@ static int julian_adj(const struct tm *tm, int off_day, long offset_sec, long *pday, int *psec) { - int offset_hms, offset_day; - long time_jd; + int offset_hms; + long offset_day, time_jd; int time_year, time_month, time_day; /* split offset into days and day seconds */ offset_day = offset_sec / SECS_PER_DAY; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pem/pem_err.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pem/pem_err.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pem/pem_err.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pem/pem_err.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -60,6 +60,8 @@ {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_SIGNFINAL, 0), "PEM_SignFinal"}, {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE, 0), "PEM_write"}, {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE_BIO, 0), "PEM_write_bio"}, + {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL, 0), + "PEM_write_bio_PrivateKey_traditional"}, {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE_PRIVATEKEY, 0), "PEM_write_PrivateKey"}, {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_X509_INFO_READ, 0), "PEM_X509_INFO_read"}, @@ -109,6 +111,8 @@ "unsupported encryption"}, {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_KEY_COMPONENTS), "unsupported key components"}, + {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE), + "unsupported public key type"}, {0, NULL} }; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pem/pem_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pem/pem_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pem/pem_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pem/pem_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -332,7 +332,7 @@ } } - if ((dsize = i2d(x, NULL)) < 0) { + if ((dsize = i2d(x, NULL)) <= 0) { PEMerr(PEM_F_PEM_ASN1_WRITE_BIO, ERR_R_ASN1_LIB); dsize = 0; goto err; @@ -791,7 +791,7 @@ { BIO *tmp = *header; char *linebuf, *p; - int len, line, ret = 0, end = 0; + int len, line, ret = 0, end = 0, prev_partial_line_read = 0, partial_line_read = 0; /* 0 if not seen (yet), 1 if reading header, 2 if finished header */ enum header_status got_header = MAYBE_HEADER; unsigned int flags_mask; @@ -809,10 +809,18 @@ flags_mask = ~0u; len = BIO_gets(bp, linebuf, LINESIZE); if (len <= 0) { - PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_SHORT_HEADER); + PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE); goto err; } + /* + * Check if line has been read completely or if only part of the line + * has been read. Keep the previous value to ignore newlines that + * appear due to reading a line up until the char before the newline. + */ + prev_partial_line_read = partial_line_read; + partial_line_read = len == LINESIZE-1 && linebuf[LINESIZE-2] != '\n'; + if (got_header == MAYBE_HEADER) { if (memchr(linebuf, ':', len) != NULL) got_header = IN_HEADER; @@ -823,13 +831,19 @@ /* Check for end of header. */ if (linebuf[0] == '\n') { - if (got_header == POST_HEADER) { - /* Another blank line is an error. */ - PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE); - goto err; + /* + * If previous line has been read only partially this newline is a + * regular newline at the end of a line and not an empty line. + */ + if (!prev_partial_line_read) { + if (got_header == POST_HEADER) { + /* Another blank line is an error. */ + PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE); + goto err; + } + got_header = POST_HEADER; + tmp = *data; } - got_header = POST_HEADER; - tmp = *data; continue; } @@ -885,18 +899,13 @@ int PEM_read_bio_ex(BIO *bp, char **name_out, char **header, unsigned char **data, long *len_out, unsigned int flags) { - EVP_ENCODE_CTX *ctx = EVP_ENCODE_CTX_new(); + EVP_ENCODE_CTX *ctx = NULL; const BIO_METHOD *bmeth; BIO *headerB = NULL, *dataB = NULL; char *name = NULL; int len, taillen, headerlen, ret = 0; BUF_MEM * buf_mem; - if (ctx == NULL) { - PEMerr(PEM_F_PEM_READ_BIO_EX, ERR_R_MALLOC_FAILURE); - return 0; - } - *len_out = 0; *name_out = *header = NULL; *data = NULL; @@ -919,9 +928,20 @@ if (!get_header_and_data(bp, &headerB, &dataB, name, flags)) goto end; - EVP_DecodeInit(ctx); BIO_get_mem_ptr(dataB, &buf_mem); len = buf_mem->length; + + /* There was no data in the PEM file */ + if (len == 0) + goto end; + + ctx = EVP_ENCODE_CTX_new(); + if (ctx == NULL) { + PEMerr(PEM_F_PEM_READ_BIO_EX, ERR_R_MALLOC_FAILURE); + goto end; + } + + EVP_DecodeInit(ctx); if (EVP_DecodeUpdate(ctx, (unsigned char*)buf_mem->data, &len, (unsigned char*)buf_mem->data, len) < 0 || EVP_DecodeFinal(ctx, (unsigned char*)&(buf_mem->data[len]), @@ -932,9 +952,6 @@ len += taillen; buf_mem->length = len; - /* There was no data in the PEM file; avoid malloc(0). */ - if (len == 0) - goto end; headerlen = BIO_get_mem_data(headerB, NULL); *header = pem_malloc(headerlen + 1, flags); *data = pem_malloc(len, flags); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pem/pem_pkey.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pem/pem_pkey.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pem/pem_pkey.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pem/pem_pkey.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -108,6 +108,12 @@ pem_password_cb *cb, void *u) { char pem_str[80]; + + if (x->ameth == NULL || x->ameth->old_priv_encode == NULL) { + PEMerr(PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL, + PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE); + return 0; + } BIO_snprintf(pem_str, 80, "%s PRIVATE KEY", x->ameth->pem_str); return PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey, pem_str, bp, x, enc, kstr, klen, cb, u); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pem/pvkfmt.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pem/pvkfmt.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pem/pvkfmt.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pem/pvkfmt.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -29,10 +29,10 @@ { const unsigned char *p = *in; unsigned int ret; - ret = *p++; - ret |= (*p++ << 8); - ret |= (*p++ << 16); - ret |= (*p++ << 24); + ret = (unsigned int)*p++; + ret |= (unsigned int)*p++ << 8; + ret |= (unsigned int)*p++ << 16; + ret |= (unsigned int)*p++ << 24; *in = p; return ret; } @@ -875,9 +875,9 @@ wrlen = BIO_write(out, tmp, outlen); OPENSSL_free(tmp); if (wrlen == outlen) { - PEMerr(PEM_F_I2B_PVK_BIO, PEM_R_BIO_WRITE_FAILURE); return outlen; } + PEMerr(PEM_F_I2B_PVK_BIO, PEM_R_BIO_WRITE_FAILURE); return -1; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pkcs12/p12_key.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pkcs12/p12_key.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pkcs12/p12_key.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pkcs12/p12_key.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -101,7 +101,7 @@ #endif v = EVP_MD_block_size(md_type); u = EVP_MD_size(md_type); - if (u < 0 || v <= 0) + if (u <= 0 || v <= 0) goto err; D = OPENSSL_malloc(v); Ai = OPENSSL_malloc(u); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pkcs7/pk7_smime.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pkcs7/pk7_smime.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/pkcs7/pk7_smime.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/pkcs7/pk7_smime.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -301,7 +301,7 @@ char *ptr; long len; len = BIO_get_mem_data(indata, &ptr); - tmpin = BIO_new_mem_buf(ptr, len); + tmpin = (len == 0) ? indata : BIO_new_mem_buf(ptr, len); if (tmpin == NULL) { PKCS7err(PKCS7_F_PKCS7_VERIFY, ERR_R_MALLOC_FAILURE); goto err; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/asm/poly1305-armv4.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/asm/poly1305-armv4.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/asm/poly1305-armv4.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/asm/poly1305-armv4.pl 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -133,10 +133,10 @@ # ifdef __thumb2__ itete eq # endif - addeq r12,r11,#(poly1305_emit-.Lpoly1305_init) - addne r12,r11,#(poly1305_emit_neon-.Lpoly1305_init) - addeq r11,r11,#(poly1305_blocks-.Lpoly1305_init) - addne r11,r11,#(poly1305_blocks_neon-.Lpoly1305_init) + addeq r12,r11,#(.Lpoly1305_emit-.Lpoly1305_init) + addne r12,r11,#(.Lpoly1305_emit_neon-.Lpoly1305_init) + addeq r11,r11,#(.Lpoly1305_blocks-.Lpoly1305_init) + addne r11,r11,#(.Lpoly1305_blocks_neon-.Lpoly1305_init) # endif # ifdef __thumb2__ orr r12,r12,#1 @ thumb-ify address @@ -352,6 +352,7 @@ .type poly1305_emit,%function .align 5 poly1305_emit: +.Lpoly1305_emit: stmdb sp!,{r4-r11} .Lpoly1305_emit_enter: @@ -671,6 +672,7 @@ .type poly1305_blocks_neon,%function .align 5 poly1305_blocks_neon: +.Lpoly1305_blocks_neon: ldr ip,[$ctx,#36] @ is_base2_26 ands $len,$len,#-16 beq .Lno_data_neon @@ -1157,6 +1159,7 @@ .type poly1305_emit_neon,%function .align 5 poly1305_emit_neon: +.Lpoly1305_emit_neon: ldr ip,[$ctx,#36] @ is_base2_26 stmdb sp!,{r4-r11} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/asm/poly1305-armv8.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/asm/poly1305-armv8.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/asm/poly1305-armv8.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/asm/poly1305-armv8.pl 2022-04-05 07:17:00.000000000 +0000 @@ -57,10 +57,14 @@ // forward "declarations" are required for Apple .extern OPENSSL_armcap_P +.hidden OPENSSL_armcap_P +.globl poly1305_init +.hidden poly1305_init .globl poly1305_blocks +.hidden poly1305_blocks .globl poly1305_emit +.hidden poly1305_emit -.globl poly1305_init .type poly1305_init,%function .align 5 poly1305_init: @@ -860,8 +864,8 @@ st1 {$ACC4}[0],[$ctx] .Lno_data_neon: - .inst 0xd50323bf // autiasp ldr x29,[sp],#80 + .inst 0xd50323bf // autiasp ret .size poly1305_blocks_neon,.-poly1305_blocks_neon diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/asm/poly1305-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/asm/poly1305-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/asm/poly1305-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/asm/poly1305-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -90,7 +90,7 @@ $avx = ($1>=10) + ($1>=12); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/asm/poly1305-x86.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/asm/poly1305-x86.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/asm/poly1305-x86.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/asm/poly1305-x86.pl 2022-04-05 07:17:00.000000000 +0000 @@ -71,7 +71,7 @@ $avx = ($1>=2.09) + ($1>=2.10); } - if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([0-9]+\.[0-9]+)/) { + if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/poly1305_ameth.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/poly1305_ameth.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/poly1305/poly1305_ameth.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/poly1305/poly1305_ameth.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2007-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -43,7 +43,7 @@ static int poly1305_pkey_public_cmp(const EVP_PKEY *a, const EVP_PKEY *b) { - return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)); + return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)) == 0; } static int poly1305_set_priv_key(EVP_PKEY *pkey, const unsigned char *priv, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ppccap.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ppccap.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ppccap.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ppccap.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2009-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2009-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -211,6 +211,30 @@ # if __GLIBC_PREREQ(2, 16) # include # define OSSL_IMPLEMENT_GETAUXVAL +# elif defined(__ANDROID_API__) +/* see https://developer.android.google.cn/ndk/guides/cpu-features */ +# if __ANDROID_API__ >= 18 +# include +# define OSSL_IMPLEMENT_GETAUXVAL +# endif +# endif +#endif + +#if defined(__FreeBSD__) +# include +# if __FreeBSD_version >= 1200000 +# include +# define OSSL_IMPLEMENT_GETAUXVAL + +static unsigned long getauxval(unsigned long key) +{ + unsigned long val = 0ul; + + if (elf_aux_info((int)key, &val, sizeof(val)) != 0) + return 0ul; + + return val; +} # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/drbg_ctr.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/drbg_ctr.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/drbg_ctr.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/drbg_ctr.c 2022-04-05 07:17:00.000000000 +0000 @@ -63,15 +63,15 @@ * Process a complete block using BCC algorithm of SP 800-90A 10.3.3 */ __owur static int ctr_BCC_block(RAND_DRBG_CTR *ctr, unsigned char *out, - const unsigned char *in) + const unsigned char *in, int len) { int i, outlen = AES_BLOCK_SIZE; - for (i = 0; i < 16; i++) + for (i = 0; i < len; i++) out[i] ^= in[i]; - if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, AES_BLOCK_SIZE) - || outlen != AES_BLOCK_SIZE) + if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, len) + || outlen != len) return 0; return 1; } @@ -82,12 +82,16 @@ */ __owur static int ctr_BCC_blocks(RAND_DRBG_CTR *ctr, const unsigned char *in) { - if (!ctr_BCC_block(ctr, ctr->KX, in) - || !ctr_BCC_block(ctr, ctr->KX + 16, in)) - return 0; - if (ctr->keylen != 16 && !ctr_BCC_block(ctr, ctr->KX + 32, in)) - return 0; - return 1; + unsigned char in_tmp[48]; + unsigned char num_of_blk = 2; + + memcpy(in_tmp, in, 16); + memcpy(in_tmp + 16, in, 16); + if (ctr->keylen != 16) { + memcpy(in_tmp + 32, in, 16); + num_of_blk = 3; + } + return ctr_BCC_block(ctr, ctr->KX, in_tmp, AES_BLOCK_SIZE * num_of_blk); } /* @@ -96,19 +100,14 @@ */ __owur static int ctr_BCC_init(RAND_DRBG_CTR *ctr) { + unsigned char bltmp[48] = {0}; + unsigned char num_of_blk; + memset(ctr->KX, 0, 48); - memset(ctr->bltmp, 0, 16); - if (!ctr_BCC_block(ctr, ctr->KX, ctr->bltmp)) - return 0; - ctr->bltmp[3] = 1; - if (!ctr_BCC_block(ctr, ctr->KX + 16, ctr->bltmp)) - return 0; - if (ctr->keylen != 16) { - ctr->bltmp[3] = 2; - if (!ctr_BCC_block(ctr, ctr->KX + 32, ctr->bltmp)) - return 0; - } - return 1; + num_of_blk = ctr->keylen == 16 ? 2 : 3; + bltmp[(AES_BLOCK_SIZE * 1) + 3] = 1; + bltmp[(AES_BLOCK_SIZE * 2) + 3] = 2; + return ctr_BCC_block(ctr, ctr->KX, bltmp, num_of_blk * AES_BLOCK_SIZE); } /* @@ -197,20 +196,20 @@ || !ctr_BCC_final(ctr)) return 0; /* Set up key K */ - if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->KX, NULL, 1)) + if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->KX, NULL, -1)) return 0; /* X follows key K */ - if (!EVP_CipherUpdate(ctr->ctx, ctr->KX, &outlen, ctr->KX + ctr->keylen, + if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX, &outlen, ctr->KX + ctr->keylen, AES_BLOCK_SIZE) || outlen != AES_BLOCK_SIZE) return 0; - if (!EVP_CipherUpdate(ctr->ctx, ctr->KX + 16, &outlen, ctr->KX, + if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 16, &outlen, ctr->KX, AES_BLOCK_SIZE) || outlen != AES_BLOCK_SIZE) return 0; if (ctr->keylen != 16) - if (!EVP_CipherUpdate(ctr->ctx, ctr->KX + 32, &outlen, ctr->KX + 16, - AES_BLOCK_SIZE) + if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 32, &outlen, + ctr->KX + 16, AES_BLOCK_SIZE) || outlen != AES_BLOCK_SIZE) return 0; return 1; @@ -229,31 +228,25 @@ { RAND_DRBG_CTR *ctr = &drbg->data.ctr; int outlen = AES_BLOCK_SIZE; + unsigned char V_tmp[48], out[48]; + unsigned char len; /* correct key is already set up. */ + memcpy(V_tmp, ctr->V, 16); inc_128(ctr); - if (!EVP_CipherUpdate(ctr->ctx, ctr->K, &outlen, ctr->V, AES_BLOCK_SIZE) - || outlen != AES_BLOCK_SIZE) - return 0; - - /* If keylen longer than 128 bits need extra encrypt */ - if (ctr->keylen != 16) { + memcpy(V_tmp + 16, ctr->V, 16); + if (ctr->keylen == 16) { + len = 32; + } else { inc_128(ctr); - if (!EVP_CipherUpdate(ctr->ctx, ctr->K+16, &outlen, ctr->V, - AES_BLOCK_SIZE) - || outlen != AES_BLOCK_SIZE) - return 0; + memcpy(V_tmp + 32, ctr->V, 16); + len = 48; } - inc_128(ctr); - if (!EVP_CipherUpdate(ctr->ctx, ctr->V, &outlen, ctr->V, AES_BLOCK_SIZE) - || outlen != AES_BLOCK_SIZE) + if (!EVP_CipherUpdate(ctr->ctx_ecb, out, &outlen, V_tmp, len) + || outlen != len) return 0; - - /* If 192 bit key part of V is on end of K */ - if (ctr->keylen == 24) { - memcpy(ctr->V + 8, ctr->V, 8); - memcpy(ctr->V, ctr->K + 24, 8); - } + memcpy(ctr->K, out, ctr->keylen); + memcpy(ctr->V, out + ctr->keylen, 16); if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) { /* If no input reuse existing derived value */ @@ -268,7 +261,8 @@ ctr_XOR(ctr, in2, in2len); } - if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->K, NULL, 1)) + if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1) + || !EVP_CipherInit_ex(ctr->ctx_ctr, NULL, NULL, ctr->K, NULL, -1)) return 0; return 1; } @@ -285,8 +279,10 @@ memset(ctr->K, 0, sizeof(ctr->K)); memset(ctr->V, 0, sizeof(ctr->V)); - if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->K, NULL, 1)) + if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1)) return 0; + + inc_128(ctr); if (!ctr_update(drbg, entropy, entropylen, pers, perslen, nonce, noncelen)) return 0; return 1; @@ -296,20 +292,40 @@ const unsigned char *entropy, size_t entropylen, const unsigned char *adin, size_t adinlen) { + RAND_DRBG_CTR *ctr = &drbg->data.ctr; + if (entropy == NULL) return 0; + + inc_128(ctr); if (!ctr_update(drbg, entropy, entropylen, adin, adinlen, NULL, 0)) return 0; return 1; } +static void ctr96_inc(unsigned char *counter) +{ + u32 n = 12, c = 1; + + do { + --n; + c += counter[n]; + counter[n] = (u8)c; + c >>= 8; + } while (n); +} + __owur static int drbg_ctr_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen, const unsigned char *adin, size_t adinlen) { RAND_DRBG_CTR *ctr = &drbg->data.ctr; + unsigned int ctr32, blocks; + int outl, buflen; if (adin != NULL && adinlen != 0) { + inc_128(ctr); + if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0)) return 0; /* This means we reuse derived value */ @@ -321,28 +337,53 @@ adinlen = 0; } - for ( ; ; ) { - int outl = AES_BLOCK_SIZE; + inc_128(ctr); + if (outlen == 0) { inc_128(ctr); - if (outlen < 16) { - /* Use K as temp space as it will be updated */ - if (!EVP_CipherUpdate(ctr->ctx, ctr->K, &outl, ctr->V, - AES_BLOCK_SIZE) - || outl != AES_BLOCK_SIZE) - return 0; - memcpy(out, ctr->K, outlen); - break; - } - if (!EVP_CipherUpdate(ctr->ctx, out, &outl, ctr->V, AES_BLOCK_SIZE) - || outl != AES_BLOCK_SIZE) + + if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0)) return 0; - out += 16; - outlen -= 16; - if (outlen == 0) - break; + return 1; } + memset(out, 0, outlen); + + do { + if (!EVP_CipherInit_ex(ctr->ctx_ctr, + NULL, NULL, NULL, ctr->V, -1)) + return 0; + + /*- + * outlen has type size_t while EVP_CipherUpdate takes an + * int argument and thus cannot be guaranteed to process more + * than 2^31-1 bytes at a time. We process such huge generate + * requests in 2^30 byte chunks, which is the greatest multiple + * of AES block size lower than or equal to 2^31-1. + */ + buflen = outlen > (1U << 30) ? (1U << 30) : outlen; + blocks = (buflen + 15) / 16; + + ctr32 = GETU32(ctr->V + 12) + blocks; + if (ctr32 < blocks) { + /* 32-bit counter overflow into V. */ + if (ctr32 != 0) { + blocks -= ctr32; + buflen = blocks * 16; + ctr32 = 0; + } + ctr96_inc(ctr->V); + } + PUTU32(ctr->V + 12, ctr32); + + if (!EVP_CipherUpdate(ctr->ctx_ctr, out, &outl, out, buflen) + || outl != buflen) + return 0; + + out += buflen; + outlen -= buflen; + } while (outlen); + if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0)) return 0; return 1; @@ -350,7 +391,8 @@ static int drbg_ctr_uninstantiate(RAND_DRBG *drbg) { - EVP_CIPHER_CTX_free(drbg->data.ctr.ctx); + EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_ecb); + EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_ctr); EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_df); OPENSSL_cleanse(&drbg->data.ctr, sizeof(drbg->data.ctr)); return 1; @@ -374,25 +416,36 @@ return 0; case NID_aes_128_ctr: keylen = 16; - ctr->cipher = EVP_aes_128_ecb(); + ctr->cipher_ecb = EVP_aes_128_ecb(); + ctr->cipher_ctr = EVP_aes_128_ctr(); break; case NID_aes_192_ctr: keylen = 24; - ctr->cipher = EVP_aes_192_ecb(); + ctr->cipher_ecb = EVP_aes_192_ecb(); + ctr->cipher_ctr = EVP_aes_192_ctr(); break; case NID_aes_256_ctr: keylen = 32; - ctr->cipher = EVP_aes_256_ecb(); + ctr->cipher_ecb = EVP_aes_256_ecb(); + ctr->cipher_ctr = EVP_aes_256_ctr(); break; } drbg->meth = &drbg_ctr_meth; ctr->keylen = keylen; - if (ctr->ctx == NULL) - ctr->ctx = EVP_CIPHER_CTX_new(); - if (ctr->ctx == NULL) + if (ctr->ctx_ecb == NULL) + ctr->ctx_ecb = EVP_CIPHER_CTX_new(); + if (ctr->ctx_ctr == NULL) + ctr->ctx_ctr = EVP_CIPHER_CTX_new(); + if (ctr->ctx_ecb == NULL || ctr->ctx_ctr == NULL + || !EVP_CipherInit_ex(ctr->ctx_ecb, + ctr->cipher_ecb, NULL, NULL, NULL, 1) + || !EVP_CipherInit_ex(ctr->ctx_ctr, + ctr->cipher_ctr, NULL, NULL, NULL, 1)) return 0; + + drbg->meth = &drbg_ctr_meth; drbg->strength = keylen * 8; drbg->seedlen = keylen + 16; @@ -410,7 +463,8 @@ if (ctr->ctx_df == NULL) return 0; /* Set key schedule for df_key */ - if (!EVP_CipherInit_ex(ctr->ctx_df, ctr->cipher, NULL, df_key, NULL, 1)) + if (!EVP_CipherInit_ex(ctr->ctx_df, + ctr->cipher_ecb, NULL, df_key, NULL, 1)) return 0; drbg->min_entropylen = ctr->keylen; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/drbg_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/drbg_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/drbg_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/drbg_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -327,13 +327,6 @@ max_entropylen += drbg->max_noncelen; } - drbg->reseed_next_counter = tsan_load(&drbg->reseed_prop_counter); - if (drbg->reseed_next_counter) { - drbg->reseed_next_counter++; - if(!drbg->reseed_next_counter) - drbg->reseed_next_counter = 1; - } - if (drbg->get_entropy != NULL) entropylen = drbg->get_entropy(drbg, &entropy, min_entropy, min_entropylen, max_entropylen, 0); @@ -359,9 +352,15 @@ } drbg->state = DRBG_READY; - drbg->reseed_gen_counter = 1; + drbg->generate_counter = 1; drbg->reseed_time = time(NULL); - tsan_store(&drbg->reseed_prop_counter, drbg->reseed_next_counter); + if (drbg->enable_reseed_propagation) { + if (drbg->parent == NULL) + tsan_counter(&drbg->reseed_counter); + else + tsan_store(&drbg->reseed_counter, + tsan_load(&drbg->parent->reseed_counter)); + } end: if (entropy != NULL && drbg->cleanup_entropy != NULL) @@ -428,14 +427,6 @@ } drbg->state = DRBG_ERROR; - - drbg->reseed_next_counter = tsan_load(&drbg->reseed_prop_counter); - if (drbg->reseed_next_counter) { - drbg->reseed_next_counter++; - if(!drbg->reseed_next_counter) - drbg->reseed_next_counter = 1; - } - if (drbg->get_entropy != NULL) entropylen = drbg->get_entropy(drbg, &entropy, drbg->strength, drbg->min_entropylen, @@ -451,9 +442,15 @@ goto end; drbg->state = DRBG_READY; - drbg->reseed_gen_counter = 1; + drbg->generate_counter = 1; drbg->reseed_time = time(NULL); - tsan_store(&drbg->reseed_prop_counter, drbg->reseed_next_counter); + if (drbg->enable_reseed_propagation) { + if (drbg->parent == NULL) + tsan_counter(&drbg->reseed_counter); + else + tsan_store(&drbg->reseed_counter, + tsan_load(&drbg->parent->reseed_counter)); + } end: if (entropy != NULL && drbg->cleanup_entropy != NULL) @@ -554,7 +551,9 @@ drbg->meth->reseed(drbg, adin, adinlen, NULL, 0); } else if (reseeded == 0) { /* do a full reseeding if it has not been done yet above */ - RAND_DRBG_reseed(drbg, NULL, 0, 0); + if (!RAND_DRBG_reseed(drbg, NULL, 0, 0)) { + RANDerr(RAND_F_RAND_DRBG_RESTART, RAND_R_RESEED_ERROR); + } } } @@ -612,7 +611,7 @@ } if (drbg->reseed_interval > 0) { - if (drbg->reseed_gen_counter >= drbg->reseed_interval) + if (drbg->generate_counter >= drbg->reseed_interval) reseed_required = 1; } if (drbg->reseed_time_interval > 0) { @@ -621,11 +620,8 @@ || now - drbg->reseed_time >= drbg->reseed_time_interval) reseed_required = 1; } - if (drbg->parent != NULL) { - unsigned int reseed_counter = tsan_load(&drbg->reseed_prop_counter); - if (reseed_counter > 0 - && tsan_load(&drbg->parent->reseed_prop_counter) - != reseed_counter) + if (drbg->enable_reseed_propagation && drbg->parent != NULL) { + if (drbg->reseed_counter != tsan_load(&drbg->parent->reseed_counter)) reseed_required = 1; } @@ -644,7 +640,7 @@ return 0; } - drbg->reseed_gen_counter++; + drbg->generate_counter++; return 1; } @@ -706,8 +702,7 @@ RAND_DRBG_get_nonce_fn get_nonce, RAND_DRBG_cleanup_nonce_fn cleanup_nonce) { - if (drbg->state != DRBG_UNINITIALISED - || drbg->parent != NULL) + if (drbg->state != DRBG_UNINITIALISED) return 0; drbg->get_entropy = get_entropy; drbg->cleanup_entropy = cleanup_entropy; @@ -883,8 +878,9 @@ if (parent == NULL && rand_drbg_enable_locking(drbg) == 0) goto err; - /* enable seed propagation */ - tsan_store(&drbg->reseed_prop_counter, 1); + /* enable reseed propagation */ + drbg->enable_reseed_propagation = 1; + drbg->reseed_counter = 1; /* * Ignore instantiation error to support just-in-time instantiation. diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/randfile.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/randfile.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/randfile.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/randfile.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -26,7 +26,7 @@ #ifndef OPENSSL_NO_POSIX_IO # include # include -# ifdef _WIN32 +# if defined(_WIN32) && !defined(_WIN32_WCE) # include # include # define stat _stat diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/rand_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/rand_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/rand_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/rand_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -174,8 +174,6 @@ prediction_resistance, (unsigned char *)&drbg, sizeof(drbg)) != 0) bytes = bytes_needed; - drbg->reseed_next_counter - = tsan_load(&drbg->parent->reseed_prop_counter); rand_drbg_unlock(drbg->parent); rand_pool_add_end(pool, bytes, 8 * bytes); @@ -434,9 +432,13 @@ RAND_POOL *rand_pool_new(int entropy_requested, int secure, size_t min_len, size_t max_len) { - RAND_POOL *pool = OPENSSL_zalloc(sizeof(*pool)); + RAND_POOL *pool; size_t min_alloc_size = RAND_POOL_MIN_ALLOCATION(secure); + if (!RUN_ONCE(&rand_init, do_rand_init)) + return NULL; + + pool = OPENSSL_zalloc(sizeof(*pool)); if (pool == NULL) { RANDerr(RAND_F_RAND_POOL_NEW, ERR_R_MALLOC_FAILURE); return NULL; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/rand_local.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/rand_local.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/rand_local.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/rand_local.h 2022-04-05 07:17:00.000000000 +0000 @@ -138,9 +138,11 @@ * The state of a DRBG AES-CTR. */ typedef struct rand_drbg_ctr_st { - EVP_CIPHER_CTX *ctx; + EVP_CIPHER_CTX *ctx_ecb; + EVP_CIPHER_CTX *ctx_ctr; EVP_CIPHER_CTX *ctx_df; - const EVP_CIPHER *cipher; + const EVP_CIPHER *cipher_ecb; + const EVP_CIPHER *cipher_ctr; size_t keylen; unsigned char K[32]; unsigned char V[16]; @@ -233,7 +235,7 @@ size_t max_perslen, max_adinlen; /* Counts the number of generate requests since the last reseed. */ - unsigned int reseed_gen_counter; + unsigned int generate_counter; /* * Maximum number of generate requests until a reseed is required. * This value is ignored if it is zero. @@ -246,9 +248,15 @@ * This value is ignored if it is zero. */ time_t reseed_time_interval; + + /* + * Enables reseed propagation (see following comment) + */ + unsigned int enable_reseed_propagation; + /* * Counts the number of reseeds since instantiation. - * This value is ignored if it is zero. + * This value is ignored if enable_reseed_propagation is zero. * * This counter is used only for seed propagation from the DRBG * to its two children, the and DRBG. This feature is @@ -256,8 +264,7 @@ * is added by RAND_add() or RAND_seed() will have an immediate effect on * the output of RAND_bytes() resp. RAND_priv_bytes(). */ - TSAN_QUALIFIER unsigned int reseed_prop_counter; - unsigned int reseed_next_counter; + TSAN_QUALIFIER unsigned int reseed_counter; size_t seedlen; DRBG_STATUS state; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/rand_unix.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/rand_unix.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/rand_unix.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/rand_unix.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -26,12 +26,12 @@ # include # endif #endif -#if defined(__FreeBSD__) && !defined(OPENSSL_SYS_UEFI) +#if (defined(__FreeBSD__) || defined(__NetBSD__)) && !defined(OPENSSL_SYS_UEFI) # include # include # include #endif -#if defined(__OpenBSD__) || defined(__NetBSD__) +#if defined(__OpenBSD__) # include #endif @@ -247,10 +247,12 @@ * when the sysctl returns long and we want to request something not a * multiple of longs, which should never be the case. */ +#if defined(__FreeBSD__) if (!ossl_assert(buflen % sizeof(long) == 0)) { errno = EINVAL; return -1; } +#endif /* * On NetBSD before 4.0 KERN_ARND was an alias for KERN_URND, and only @@ -268,7 +270,7 @@ mib[1] = KERN_ARND; do { - len = buflen; + len = buflen > 256 ? 256 : buflen; if (sysctl(mib, 2, buf, &len, NULL, 0) == -1) return done > 0 ? done : -1; done += len; @@ -363,12 +365,24 @@ * - OpenBSD since 5.6 * - Linux since 3.17 with glibc 2.25 * - FreeBSD since 12.0 (1200061) + * + * Note: Sometimes getentropy() can be provided but not implemented + * internally. So we need to check errno for ENOSYS */ # if defined(__GNUC__) && __GNUC__>=2 && defined(__ELF__) && !defined(__hpux) extern int getentropy(void *buffer, size_t length) __attribute__((weak)); - if (getentropy != NULL) - return getentropy(buf, buflen) == 0 ? (ssize_t)buflen : -1; + if (getentropy != NULL) { + if (getentropy(buf, buflen) == 0) + return (ssize_t)buflen; + if (errno != ENOSYS) + return -1; + } +# elif defined(OPENSSL_APPLE_CRYPTO_RANDOM) + if (CCRandomGenerateBytes(buf, buflen) == kCCSuccess) + return (ssize_t)buflen; + + return -1; # else union { void *p; @@ -409,7 +423,8 @@ } random_devices[OSSL_NELEM(random_device_paths)]; static int keep_random_devices_open = 1; -# if defined(__linux) && defined(DEVRANDOM_WAIT) +# if defined(__linux) && defined(DEVRANDOM_WAIT) \ + && defined(OPENSSL_RAND_SEED_GETRANDOM) static void *shm_addr; static void cleanup_shm(void) @@ -487,7 +502,7 @@ } return seeded; } -# else /* defined __linux */ +# else /* defined __linux && DEVRANDOM_WAIT && OPENSSL_RAND_SEED_GETRANDOM */ static int wait_random_seeded(void) { return 1; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/rand_vms.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/rand_vms.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rand/rand_vms.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rand/rand_vms.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -484,7 +484,7 @@ struct { pid_t pid; CRYPTO_THREAD_ID tid; - uint64_t time; + unsigned __int64 time; } data = { 0 }; /* @@ -582,7 +582,7 @@ { struct { CRYPTO_THREAD_ID tid; - uint64_t time; + unsigned __int64 time; } data = { 0 }; /* diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rsa/rsa_ameth.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rsa/rsa_ameth.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rsa/rsa_ameth.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rsa/rsa_ameth.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -118,6 +118,15 @@ static int rsa_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) { + /* + * Don't check the public/private key, this is mostly for smart + * cards. + */ + if (((RSA_flags(a->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) + || (RSA_flags(b->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) { + return 1; + } + if (BN_cmp(b->pkey.rsa->n, a->pkey.rsa->n) != 0 || BN_cmp(b->pkey.rsa->e, a->pkey.rsa->e) != 0) return 0; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rsa/rsa_prn.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rsa/rsa_prn.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rsa/rsa_prn.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rsa/rsa_prn.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -34,9 +34,11 @@ EVP_PKEY *pk; int ret; pk = EVP_PKEY_new(); - if (pk == NULL || !EVP_PKEY_set1_RSA(pk, (RSA *)x)) + if (pk == NULL) return 0; - ret = EVP_PKEY_print_private(bp, pk, off, NULL); + ret = EVP_PKEY_set1_RSA(pk, (RSA *)x); + if (ret) + ret = EVP_PKEY_print_private(bp, pk, off, NULL); EVP_PKEY_free(pk); return ret; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rsa/rsa_ssl.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rsa/rsa_ssl.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/rsa/rsa_ssl.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/rsa/rsa_ssl.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -55,7 +55,7 @@ /* * Copy of RSA_padding_check_PKCS1_type_2 with a twist that rejects padding - * if nul delimiter is not preceded by 8 consecutive 0x03 bytes. It also + * if nul delimiter is preceded by 8 consecutive 0x03 bytes. It also * preserves error code reporting for backward compatibility. */ int RSA_padding_check_SSLv23(unsigned char *to, int tlen, @@ -122,7 +122,13 @@ RSA_R_NULL_BEFORE_BLOCK_MISSING); mask = ~good; - good &= constant_time_ge(threes_in_row, 8); + /* + * Reject if nul delimiter is preceded by 8 consecutive 0x03 bytes. Note + * that RFC5246 incorrectly states this the other way around, i.e. reject + * if it is not preceded by 8 consecutive 0x03 bytes. However this is + * corrected in subsequent errata for that RFC. + */ + good &= constant_time_lt(threes_in_row, 8); err = constant_time_select_int(mask | good, err, RSA_R_SSLV3_ROLLBACK_ATTACK); mask = ~good; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha1-586.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha1-586.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha1-586.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha1-586.pl 2022-04-05 07:17:00.000000000 +0000 @@ -144,7 +144,7 @@ `ml 2>&1` =~ /Version ([0-9]+)\./ && $1>=10); # first version supporting AVX -$ymm=1 if ($xmm && !$ymm && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([0-9]+\.[0-9]+)/ && +$ymm=1 if ($xmm && !$ymm && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|based on LLVM) ([0-9]+\.[0-9]+)/ && $2>=3.0); # first version supporting AVX $shaext=$xmm; ### set to zero if compiling for 1.0.1 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha1-armv8.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha1-armv8.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha1-armv8.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha1-armv8.pl 2022-04-05 07:17:00.000000000 +0000 @@ -176,6 +176,7 @@ .text .extern OPENSSL_armcap_P +.hidden OPENSSL_armcap_P .globl sha1_block_data_order .type sha1_block_data_order,%function .align 6 @@ -329,7 +330,6 @@ #endif .asciz "SHA1 block transform for ARMv8, CRYPTOGAMS by " .align 2 -.comm OPENSSL_armcap_P,4,4 ___ }}} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha1-mb-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha1-mb-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha1-mb-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha1-mb-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -66,7 +66,7 @@ $avx = ($1>=10) + ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha1-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha1-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha1-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha1-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -119,7 +119,7 @@ $avx = ($1>=10) + ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha256-586.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha256-586.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha256-586.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha256-586.pl 2022-04-05 07:17:00.000000000 +0000 @@ -96,7 +96,7 @@ $avx = ($1>=10) + ($1>=11); } -if ($xmm && !$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|based on LLVM) ([0-9]+\.[0-9]+)/) { +if ($xmm && !$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha256-mb-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha256-mb-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha256-mb-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha256-mb-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -67,7 +67,7 @@ $avx = ($1>=10) + ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha512-armv8.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha512-armv8.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha512-armv8.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha512-armv8.pl 2022-04-05 07:17:00.000000000 +0000 @@ -193,6 +193,7 @@ .text .extern OPENSSL_armcap_P +.hidden OPENSSL_armcap_P .globl $func .type $func,%function .align 6 @@ -840,12 +841,6 @@ ___ } -$code.=<<___; -#ifndef __KERNEL__ -.comm OPENSSL_armcap_P,4,4 -#endif -___ - { my %opcode = ( "sha256h" => 0x5e004000, "sha256h2" => 0x5e005000, "sha256su0" => 0x5e282800, "sha256su1" => 0x5e006000 ); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha512-x86_64.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha512-x86_64.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sha/asm/sha512-x86_64.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sha/asm/sha512-x86_64.pl 2022-04-05 07:17:00.000000000 +0000 @@ -135,7 +135,7 @@ $avx = ($1>=10) + ($1>=11); } -if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { +if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|.*based on LLVM) ([0-9]+\.[0-9]+)/) { $avx = ($2>=3.0) + ($2>3.0); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/siphash/siphash_ameth.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/siphash/siphash_ameth.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/siphash/siphash_ameth.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/siphash/siphash_ameth.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2007-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -44,7 +44,7 @@ static int siphash_pkey_public_cmp(const EVP_PKEY *a, const EVP_PKEY *b) { - return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)); + return ASN1_OCTET_STRING_cmp(EVP_PKEY_get0(a), EVP_PKEY_get0(b)) == 0; } static int siphash_set_priv_key(EVP_PKEY *pkey, const unsigned char *priv, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sm2/sm2_crypt.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sm2/sm2_crypt.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sm2/sm2_crypt.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sm2/sm2_crypt.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * Ported from Ribose contributions from Botan. * @@ -61,29 +61,20 @@ return field_size; } -int sm2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, - size_t *pt_size) +int sm2_plaintext_size(const unsigned char *ct, size_t ct_size, size_t *pt_size) { - const size_t field_size = ec_field_size(EC_KEY_get0_group(key)); - const int md_size = EVP_MD_size(digest); - size_t overhead; + struct SM2_Ciphertext_st *sm2_ctext = NULL; - if (md_size < 0) { - SM2err(SM2_F_SM2_PLAINTEXT_SIZE, SM2_R_INVALID_DIGEST); - return 0; - } - if (field_size == 0) { - SM2err(SM2_F_SM2_PLAINTEXT_SIZE, SM2_R_INVALID_FIELD); - return 0; - } + sm2_ctext = d2i_SM2_Ciphertext(NULL, &ct, ct_size); - overhead = 10 + 2 * field_size + (size_t)md_size; - if (msg_len <= overhead) { + if (sm2_ctext == NULL) { SM2err(SM2_F_SM2_PLAINTEXT_SIZE, SM2_R_INVALID_ENCODING); return 0; } - *pt_size = msg_len - overhead; + *pt_size = sm2_ctext->C2->length; + SM2_Ciphertext_free(sm2_ctext); + return 1; } @@ -303,6 +294,10 @@ C2 = sm2_ctext->C2->data; C3 = sm2_ctext->C3->data; msg_len = sm2_ctext->C2->length; + if (*ptext_len < (size_t)msg_len) { + SM2err(SM2_F_SM2_DECRYPT, SM2_R_BUFFER_TOO_SMALL); + goto done; + } ctx = BN_CTX_new(); if (ctx == NULL) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sm2/sm2_pmeth.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sm2/sm2_pmeth.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sm2/sm2_pmeth.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sm2/sm2_pmeth.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -151,7 +151,7 @@ const EVP_MD *md = (dctx->md == NULL) ? EVP_sm3() : dctx->md; if (out == NULL) { - if (!sm2_plaintext_size(ec, md, inlen, outlen)) + if (!sm2_plaintext_size(in, inlen, outlen)) return -1; else return 1; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sparcv9cap.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sparcv9cap.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/sparcv9cap.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/sparcv9cap.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -16,6 +16,7 @@ #include #include #include "internal/cryptlib.h" +#include "bn/bn_local.h" /* for definition of bn_mul_mont */ #include "sparc_arch.h" diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/srp/srp_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/srp/srp_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/srp/srp_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/srp/srp_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2004, EdelKey Project. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -177,6 +177,7 @@ const BIGNUM *x, const BIGNUM *a, const BIGNUM *u) { BIGNUM *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL, *k = NULL, *K = NULL; + BIGNUM *xtmp = NULL; BN_CTX *bn_ctx; if (u == NULL || B == NULL || N == NULL || g == NULL || x == NULL @@ -185,10 +186,13 @@ if ((tmp = BN_new()) == NULL || (tmp2 = BN_new()) == NULL || - (tmp3 = BN_new()) == NULL) + (tmp3 = BN_new()) == NULL || + (xtmp = BN_new()) == NULL) goto err; - if (!BN_mod_exp(tmp, g, x, N, bn_ctx)) + BN_with_flags(xtmp, x, BN_FLG_CONSTTIME); + BN_set_flags(tmp, BN_FLG_CONSTTIME); + if (!BN_mod_exp(tmp, g, xtmp, N, bn_ctx)) goto err; if ((k = srp_Calc_k(N, g)) == NULL) goto err; @@ -196,7 +200,7 @@ goto err; if (!BN_mod_sub(tmp, B, tmp2, N, bn_ctx)) goto err; - if (!BN_mul(tmp3, u, x, bn_ctx)) + if (!BN_mul(tmp3, u, xtmp, bn_ctx)) goto err; if (!BN_add(tmp2, a, tmp3)) goto err; @@ -208,6 +212,7 @@ err: BN_CTX_free(bn_ctx); + BN_free(xtmp); BN_clear_free(tmp); BN_clear_free(tmp2); BN_clear_free(tmp3); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/srp/srp_vfy.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/srp/srp_vfy.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/srp/srp_vfy.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/srp/srp_vfy.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2004, EdelKey Project. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -684,7 +684,7 @@ BIGNUM *x = NULL; BN_CTX *bn_ctx = BN_CTX_new(); unsigned char tmp2[MAX_LEN]; - BIGNUM *salttmp = NULL; + BIGNUM *salttmp = NULL, *verif; if ((user == NULL) || (pass == NULL) || @@ -707,17 +707,18 @@ if (x == NULL) goto err; - *verifier = BN_new(); - if (*verifier == NULL) + verif = BN_new(); + if (verif == NULL) goto err; - if (!BN_mod_exp(*verifier, g, x, N, bn_ctx)) { - BN_clear_free(*verifier); + if (!BN_mod_exp(verif, g, x, N, bn_ctx)) { + BN_clear_free(verif); goto err; } result = 1; *salt = salttmp; + *verifier = verif; err: if (salt != NULL && *salt != salttmp) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/store/loader_file.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/store/loader_file.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/store/loader_file.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/store/loader_file.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -370,6 +370,7 @@ mem->data = (char *)new_data; mem->max = mem->length = (size_t)new_data_len; X509_SIG_free(p8); + p8 = NULL; store_info = ossl_store_info_new_EMBEDDED(PEM_STRING_PKCS8INF, mem); if (store_info == NULL) { @@ -429,6 +430,42 @@ } } else { int i; +#ifndef OPENSSL_NO_ENGINE + ENGINE *curengine = ENGINE_get_first(); + + while (curengine != NULL) { + ENGINE_PKEY_ASN1_METHS_PTR asn1meths = + ENGINE_get_pkey_asn1_meths(curengine); + + if (asn1meths != NULL) { + const int *nids = NULL; + int nids_n = asn1meths(curengine, NULL, &nids, 0); + + for (i = 0; i < nids_n; i++) { + EVP_PKEY_ASN1_METHOD *ameth2 = NULL; + EVP_PKEY *tmp_pkey = NULL; + const unsigned char *tmp_blob = blob; + + if (!asn1meths(curengine, &ameth2, NULL, nids[i])) + continue; + if (ameth2 == NULL + || ameth2->pkey_flags & ASN1_PKEY_ALIAS) + continue; + + tmp_pkey = d2i_PrivateKey(ameth2->pkey_id, NULL, + &tmp_blob, len); + if (tmp_pkey != NULL) { + if (pkey != NULL) + EVP_PKEY_free(tmp_pkey); + else + pkey = tmp_pkey; + (*matchcount)++; + } + } + } + curengine = ENGINE_get_next(curengine); + } +#endif for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { EVP_PKEY *tmp_pkey = NULL; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/store/store_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/store/store_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/store/store_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/store/store_lib.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -218,7 +218,11 @@ int OSSL_STORE_close(OSSL_STORE_CTX *ctx) { - int loader_ret = ctx->loader->close(ctx->loader_ctx); + int loader_ret; + + if (ctx == NULL) + return 1; + loader_ret = ctx->loader->close(ctx->loader_ctx); OPENSSL_free(ctx); return loader_ret; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ts/ts_rsp_sign.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ts/ts_rsp_sign.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ts/ts_rsp_sign.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ts/ts_rsp_sign.c 2022-04-05 07:17:00.000000000 +0000 @@ -57,12 +57,14 @@ goto err; if (!ASN1_INTEGER_set(serial, 1)) goto err; + return serial; err: TSerr(TS_F_DEF_SERIAL_CB, ERR_R_MALLOC_FAILURE); TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, "Error during serial number generation."); + ASN1_INTEGER_free(serial); return NULL; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ts/ts_rsp_verify.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ts/ts_rsp_verify.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ts/ts_rsp_verify.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ts/ts_rsp_verify.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -612,6 +612,7 @@ err: EVP_MD_CTX_free(md_ctx); X509_ALGOR_free(*md_alg); + *md_alg = NULL; OPENSSL_free(*imprint); *imprint_len = 0; *imprint = 0; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ts/ts_verify_ctx.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ts/ts_verify_ctx.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ts/ts_verify_ctx.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ts/ts_verify_ctx.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -70,6 +70,7 @@ unsigned char *TS_VERIFY_CTX_set_imprint(TS_VERIFY_CTX *ctx, unsigned char *hexstr, long len) { + OPENSSL_free(ctx->imprint); ctx->imprint = hexstr; ctx->imprint_len = len; return ctx->imprint; @@ -126,6 +127,8 @@ goto err; msg = imprint->hashed_msg; ret->imprint_len = ASN1_STRING_length(msg); + if (ret->imprint_len <= 0) + goto err; if ((ret->imprint = OPENSSL_malloc(ret->imprint_len)) == NULL) goto err; memcpy(ret->imprint, ASN1_STRING_get0_data(msg), ret->imprint_len); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ui/ui_openssl.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ui/ui_openssl.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/ui/ui_openssl.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/ui/ui_openssl.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -439,6 +439,16 @@ is_a_tty = 0; else # endif +# ifdef EPERM + /* + * Linux can return EPERM (Operation not permitted), + * e.g. if a daemon executes openssl via fork()+execve() + * This should be ok + */ + if (errno == EPERM) + is_a_tty = 0; + else +# endif # ifdef ENODEV /* * MacOS X returns ENODEV (Operation not supported by device), @@ -562,6 +572,8 @@ static int close_console(UI *ui) { + int ret = 1; + if (tty_in != stdin) fclose(tty_in); if (tty_out != stderr) @@ -574,12 +586,12 @@ BIO_snprintf(tmp_num, sizeof(tmp_num) - 1, "%%X%08X", status); UIerr(UI_F_CLOSE_CONSOLE, UI_R_SYSDASSGN_ERROR); ERR_add_error_data(2, "status=", tmp_num); - return 0; + ret = 0; } # endif CRYPTO_THREAD_unlock(ui->lock); - return 1; + return ret; } # if !defined(OPENSSL_SYS_WINCE) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/uid.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/uid.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/uid.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/uid.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -17,7 +17,7 @@ return 0; } -#elif defined(__OpenBSD__) || (defined(__FreeBSD__) && __FreeBSD__ > 2) || defined(__DragonFly__) +#elif defined(__OpenBSD__) || (defined(__FreeBSD__) && __FreeBSD__ > 2) || defined(__DragonFly__) || (defined(__GLIBC__) && defined(__FreeBSD_kernel__)) # include OPENSSL_UNISTD @@ -36,6 +36,12 @@ # include # define OSSL_IMPLEMENT_GETAUXVAL # endif +# elif defined(__ANDROID_API__) +/* see https://developer.android.google.cn/ndk/guides/cpu-features */ +# if __ANDROID_API__ >= 18 +# include +# define OSSL_IMPLEMENT_GETAUXVAL +# endif # endif int OPENSSL_issetugid(void) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/whrlpool/wp_block.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/whrlpool/wp_block.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/whrlpool/wp_block.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/whrlpool/wp_block.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -63,6 +63,20 @@ # undef STRICT_ALIGNMENT #endif +#ifndef STRICT_ALIGNMENT +# ifdef __GNUC__ +typedef u64 u64_a1 __attribute((__aligned__(1))); +# else +typedef u64 u64_a1; +# endif +#endif + +#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT) +typedef u64 u64_aX __attribute((__aligned__(1))); +#else +typedef u64 u64_aX; +#endif + #undef SMALL_REGISTER_BANK #if defined(__i386) || defined(__i386__) || defined(_M_IX86) # define SMALL_REGISTER_BANK @@ -191,13 +205,13 @@ # define LL(c0,c1,c2,c3,c4,c5,c6,c7) c0,c1,c2,c3,c4,c5,c6,c7, \ c0,c1,c2,c3,c4,c5,c6,c7 # define C0(K,i) (((u64*)(Cx.c+0))[2*K.c[(i)*8+0]]) -# define C1(K,i) (((u64*)(Cx.c+7))[2*K.c[(i)*8+1]]) -# define C2(K,i) (((u64*)(Cx.c+6))[2*K.c[(i)*8+2]]) -# define C3(K,i) (((u64*)(Cx.c+5))[2*K.c[(i)*8+3]]) -# define C4(K,i) (((u64*)(Cx.c+4))[2*K.c[(i)*8+4]]) -# define C5(K,i) (((u64*)(Cx.c+3))[2*K.c[(i)*8+5]]) -# define C6(K,i) (((u64*)(Cx.c+2))[2*K.c[(i)*8+6]]) -# define C7(K,i) (((u64*)(Cx.c+1))[2*K.c[(i)*8+7]]) +# define C1(K,i) (((u64_a1*)(Cx.c+7))[2*K.c[(i)*8+1]]) +# define C2(K,i) (((u64_a1*)(Cx.c+6))[2*K.c[(i)*8+2]]) +# define C3(K,i) (((u64_a1*)(Cx.c+5))[2*K.c[(i)*8+3]]) +# define C4(K,i) (((u64_a1*)(Cx.c+4))[2*K.c[(i)*8+4]]) +# define C5(K,i) (((u64_a1*)(Cx.c+3))[2*K.c[(i)*8+5]]) +# define C6(K,i) (((u64_a1*)(Cx.c+2))[2*K.c[(i)*8+6]]) +# define C7(K,i) (((u64_a1*)(Cx.c+1))[2*K.c[(i)*8+7]]) #endif static const @@ -531,7 +545,7 @@ } else # endif { - const u64 *pa = (const u64 *)p; + const u64_aX *pa = (const u64_aX *)p; S.q[0] = (K.q[0] = H->q[0]) ^ pa[0]; S.q[1] = (K.q[1] = H->q[1]) ^ pa[1]; S.q[2] = (K.q[2] = H->q[2]) ^ pa[2]; @@ -769,7 +783,7 @@ } else # endif { - const u64 *pa = (const u64 *)p; + const u64_aX *pa = (const u64_aX *)p; H->q[0] ^= S.q[0] ^ pa[0]; H->q[1] ^= S.q[1] ^ pa[1]; H->q[2] ^= S.q[2] ^ pa[2]; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/t_x509.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/t_x509.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/t_x509.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/t_x509.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -365,9 +365,9 @@ BIO_puts(out, "\n"); } else BIO_printf(out, "%*sNo Rejected Uses.\n", indent, ""); - alias = X509_alias_get0(x, NULL); + alias = X509_alias_get0(x, &i); if (alias) - BIO_printf(out, "%*sAlias: %s\n", indent, "", alias); + BIO_printf(out, "%*sAlias: %.*s\n", indent, "", i, alias); keyid = X509_keyid_get0(x, &keyidlen); if (keyid) { BIO_printf(out, "%*sKey Id: ", indent, ""); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_att.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_att.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_att.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_att.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -149,7 +149,7 @@ return ret; } -void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, +void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, const ASN1_OBJECT *obj, int lastpos, int type) { int i; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_cmp.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_cmp.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_cmp.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_cmp.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -39,6 +39,8 @@ if (ctx == NULL) goto err; f = X509_NAME_oneline(a->cert_info.issuer, NULL, 0); + if (f == NULL) + goto err; if (!EVP_DigestInit_ex(ctx, EVP_md5(), NULL)) goto err; if (!EVP_DigestUpdate(ctx, (unsigned char *)f, strlen(f))) @@ -133,17 +135,21 @@ */ int X509_cmp(const X509 *a, const X509 *b) { - int rv; + int rv = 0; - /* ensure hash is valid */ - if (X509_check_purpose((X509 *)a, -1, 0) != 1) - return -2; - if (X509_check_purpose((X509 *)b, -1, 0) != 1) - return -2; + if (a == b) /* for efficiency */ + return 0; - rv = memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH); - if (rv) + /* try to make sure hash is valid */ + (void)X509_check_purpose((X509 *)a, -1, 0); + (void)X509_check_purpose((X509 *)b, -1, 0); + + if ((a->ex_flags & EXFLAG_NO_FINGERPRINT) == 0 + && (b->ex_flags & EXFLAG_NO_FINGERPRINT) == 0) + rv = memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH); + if (rv != 0) return rv; + /* Check for match against stored encoding too */ if (!a->cert_info.enc.modified && !b->cert_info.enc.modified) { if (a->cert_info.enc.len < b->cert_info.enc.len) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_err.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_err.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_err.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_err.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -79,6 +79,7 @@ {ERR_PACK(ERR_LIB_X509, X509_F_X509_PRINT_EX_FP, 0), "X509_print_ex_fp"}, {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_DECODE, 0), "x509_pubkey_decode"}, + {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_GET, 0), "X509_PUBKEY_get"}, {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_GET0, 0), "X509_PUBKEY_get0"}, {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_SET, 0), "X509_PUBKEY_set"}, {ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_CHECK_PRIVATE_KEY, 0), diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_local.h nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_local.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_local.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_local.h 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2014-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -145,3 +145,5 @@ void x509_set_signature_info(X509_SIG_INFO *siginf, const X509_ALGOR *alg, const ASN1_STRING *sig); +int x509_likely_issued(X509 *issuer, X509 *subject); +int x509_signing_allowed(const X509 *issuer, const X509 *subject); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_req.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_req.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_req.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_req.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -286,6 +286,18 @@ *palg = &req->sig_alg; } +void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig) +{ + if (req->signature) + ASN1_BIT_STRING_free(req->signature); + req->signature = psig; +} + +int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg) +{ + return X509_ALGOR_copy(&req->sig_alg, palg); +} + int X509_REQ_get_signature_nid(const X509_REQ *req) { return OBJ_obj2nid(req->sig_alg.algorithm); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_txt.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_txt.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_txt.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_txt.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -174,6 +174,8 @@ return "OCSP verification failed"; case X509_V_ERR_OCSP_CERT_UNKNOWN: return "OCSP unknown cert"; + case X509_V_ERR_EC_KEY_EXPLICIT_PARAMS: + return "Certificate public key has explicit ECC parameters"; default: /* Printing an error number into a static buffer is not thread-safe */ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_vfy.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_vfy.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_vfy.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_vfy.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -80,6 +80,7 @@ static int check_dane_issuer(X509_STORE_CTX *ctx, int depth); static int check_key_level(X509_STORE_CTX *ctx, X509 *cert); static int check_sig_level(X509_STORE_CTX *ctx, X509 *cert); +static int check_curve(X509 *cert); static int get_crl_score(X509_STORE_CTX *ctx, X509 **pissuer, unsigned int *preasons, X509_CRL *crl, X509 *x); @@ -104,7 +105,12 @@ return ok; } -/* Return 1 is a certificate is self signed */ +/* + * Return 1 if given cert is considered self-signed, 0 if not or on error. + * This does not verify self-signedness but relies on x509v3_cache_extensions() + * matching issuer and subject names (i.e., the cert being self-issued) and any + * present authority key identifier matching the subject key identifier, etc. + */ static int cert_self_signed(X509 *x) { if (X509_check_purpose(x, -1, 0) != 1) @@ -131,10 +137,9 @@ xtmp = sk_X509_value(certs, i); if (!X509_cmp(xtmp, x)) break; + xtmp = NULL; } - if (i < sk_X509_num(certs)) - X509_up_ref(xtmp); - else + if (xtmp != NULL && !X509_up_ref(xtmp)) xtmp = NULL; sk_X509_pop_free(certs, X509_free); return xtmp; @@ -267,17 +272,24 @@ return -1; } + if (!X509_up_ref(ctx->cert)) { + X509err(X509_F_X509_VERIFY_CERT, ERR_R_INTERNAL_ERROR); + ctx->error = X509_V_ERR_UNSPECIFIED; + return -1; + } + /* * first we make sure the chain we are going to build is present and that * the first entry is in place */ - if (((ctx->chain = sk_X509_new_null()) == NULL) || - (!sk_X509_push(ctx->chain, ctx->cert))) { + if ((ctx->chain = sk_X509_new_null()) == NULL + || !sk_X509_push(ctx->chain, ctx->cert)) { + X509_free(ctx->cert); X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE); ctx->error = X509_V_ERR_OUT_OF_MEM; return -1; } - X509_up_ref(ctx->cert); + ctx->num_untrusted = 1; /* If the peer's public key is too weak, we can stop early. */ @@ -300,8 +312,21 @@ return ret; } +static int sk_X509_contains(STACK_OF(X509) *sk, X509 *cert) +{ + int i, n = sk_X509_num(sk); + + for (i = 0; i < n; i++) + if (X509_cmp(sk_X509_value(sk, i), cert) == 0) + return 1; + return 0; +} + /* - * Given a STACK_OF(X509) find the issuer of cert (if any) + * Find in given STACK_OF(X509) sk an issuer cert of given cert x. + * The issuer must not yet be in ctx->chain, where the exceptional case + * that x is self-issued and ctx->chain has just one element is allowed. + * Prefer the first one that is not expired, else take the last expired one. */ static X509 *find_issuer(X509_STORE_CTX *ctx, STACK_OF(X509) *sk, X509 *x) { @@ -310,7 +335,9 @@ for (i = 0; i < sk_X509_num(sk); i++) { issuer = sk_X509_value(sk, i); - if (ctx->check_issued(ctx, x, issuer)) { + if (ctx->check_issued(ctx, x, issuer) + && (((x->ex_flags & EXFLAG_SI) != 0 && sk_X509_num(ctx->chain) == 1) + || !sk_X509_contains(ctx->chain, issuer))) { rv = issuer; if (x509_check_cert_time(ctx, rv, -1)) break; @@ -319,42 +346,25 @@ return rv; } -/* Given a possible certificate and issuer check them */ - +/* Check that the given certificate 'x' is issued by the certificate 'issuer' */ static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer) { - int ret; - if (x == issuer) - return cert_self_signed(x); - ret = X509_check_issued(issuer, x); - if (ret == X509_V_OK) { - int i; - X509 *ch; - /* Special case: single self signed certificate */ - if (cert_self_signed(x) && sk_X509_num(ctx->chain) == 1) - return 1; - for (i = 0; i < sk_X509_num(ctx->chain); i++) { - ch = sk_X509_value(ctx->chain, i); - if (ch == issuer || !X509_cmp(ch, issuer)) { - ret = X509_V_ERR_PATH_LOOP; - break; - } - } - } - - return (ret == X509_V_OK); + return x509_likely_issued(issuer, x) == X509_V_OK; } /* Alternative lookup method: look from a STACK stored in other_ctx */ - static int get_issuer_sk(X509 **issuer, X509_STORE_CTX *ctx, X509 *x) { *issuer = find_issuer(ctx, ctx->other_ctx, x); - if (*issuer) { - X509_up_ref(*issuer); - return 1; - } else - return 0; + + if (*issuer == NULL || !X509_up_ref(*issuer)) + goto err; + + return 1; + + err: + *issuer = NULL; + return 0; } static STACK_OF(X509) *lookup_certs_sk(X509_STORE_CTX *ctx, X509_NAME *nm) @@ -366,15 +376,21 @@ for (i = 0; i < sk_X509_num(ctx->other_ctx); i++) { x = sk_X509_value(ctx->other_ctx, i); if (X509_NAME_cmp(nm, X509_get_subject_name(x)) == 0) { + if (!X509_up_ref(x)) { + sk_X509_pop_free(sk, X509_free); + X509err(X509_F_LOOKUP_CERTS_SK, ERR_R_INTERNAL_ERROR); + ctx->error = X509_V_ERR_UNSPECIFIED; + return NULL; + } if (sk == NULL) sk = sk_X509_new_null(); - if (sk == NULL || sk_X509_push(sk, x) == 0) { + if (sk == NULL || !sk_X509_push(sk, x)) { + X509_free(x); sk_X509_pop_free(sk, X509_free); X509err(X509_F_LOOKUP_CERTS_SK, ERR_R_MALLOC_FAILURE); ctx->error = X509_V_ERR_OUT_OF_MEM; return NULL; } - X509_up_ref(x); } } return sk; @@ -508,7 +524,19 @@ ret = 1; break; } - if ((x->ex_flags & EXFLAG_CA) == 0 + if (ret > 0 + && (ctx->param->flags & X509_V_FLAG_X509_STRICT) && num > 1) { + /* Check for presence of explicit elliptic curve parameters */ + ret = check_curve(x); + if (ret < 0) { + ctx->error = X509_V_ERR_UNSPECIFIED; + ret = 0; + } else if (ret == 0) { + ctx->error = X509_V_ERR_EC_KEY_EXPLICIT_PARAMS; + } + } + if (ret > 0 + && (x->ex_flags & EXFLAG_CA) == 0 && x->ex_pathlen != -1 && (ctx->param->flags & X509_V_FLAG_X509_STRICT)) { ctx->error = X509_V_ERR_INVALID_EXTENSION; @@ -1699,6 +1727,7 @@ return 1; } +/* verify the issuer signatures and cert times of ctx->chain */ static int internal_verify(X509_STORE_CTX *ctx) { int n = sk_X509_num(ctx->chain) - 1; @@ -1713,19 +1742,25 @@ if (ctx->bare_ta_signed) { xs = xi; xi = NULL; - goto check_cert; + goto check_cert_time; } if (ctx->check_issued(ctx, xi, xi)) - xs = xi; + xs = xi; /* the typical case: last cert in the chain is self-issued */ else { if (ctx->param->flags & X509_V_FLAG_PARTIAL_CHAIN) { xs = xi; - goto check_cert; + goto check_cert_time; + } + if (n <= 0) { + if (!verify_cb_cert(ctx, xi, 0, + X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE)) + return 0; + + xs = xi; + goto check_cert_time; } - if (n <= 0) - return verify_cb_cert(ctx, xi, 0, - X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE); + n--; ctx->error_depth = n; xs = sk_X509_value(ctx->chain, n); @@ -1736,27 +1771,55 @@ * is allowed to reset errors (at its own peril). */ while (n >= 0) { - EVP_PKEY *pkey; - /* - * Skip signature check for self signed certificates unless explicitly - * asked for. It doesn't add any security and just wastes time. If - * the issuer's public key is unusable, report the issuer certificate - * and its depth (rather than the depth of the subject). + * For each iteration of this loop: + * n is the subject depth + * xs is the subject cert, for which the signature is to be checked + * xi is the supposed issuer cert containing the public key to use + * Initially xs == xi if the last cert in the chain is self-issued. + * + * Skip signature check for self-signed certificates unless explicitly + * asked for because it does not add any security and just wastes time. */ - if (xs != xi || (ctx->param->flags & X509_V_FLAG_CHECK_SS_SIGNATURE)) { + if (xs != xi || ((ctx->param->flags & X509_V_FLAG_CHECK_SS_SIGNATURE) + && (xi->ex_flags & EXFLAG_SS) != 0)) { + EVP_PKEY *pkey; + /* + * If the issuer's public key is not available or its key usage + * does not support issuing the subject cert, report the issuer + * cert and its depth (rather than n, the depth of the subject). + */ + int issuer_depth = n + (xs == xi ? 0 : 1); + /* + * According to https://tools.ietf.org/html/rfc5280#section-6.1.4 + * step (n) we must check any given key usage extension in a CA cert + * when preparing the verification of a certificate issued by it. + * According to https://tools.ietf.org/html/rfc5280#section-4.2.1.3 + * we must not verify a certifiate signature if the key usage of the + * CA certificate that issued the certificate prohibits signing. + * In case the 'issuing' certificate is the last in the chain and is + * not a CA certificate but a 'self-issued' end-entity cert (i.e., + * xs == xi && !(xi->ex_flags & EXFLAG_CA)) RFC 5280 does not apply + * (see https://tools.ietf.org/html/rfc6818#section-2) and thus + * we are free to ignore any key usage restrictions on such certs. + */ + int ret = xs == xi && (xi->ex_flags & EXFLAG_CA) == 0 + ? X509_V_OK : x509_signing_allowed(xi, xs); + + if (ret != X509_V_OK && !verify_cb_cert(ctx, xi, issuer_depth, ret)) + return 0; if ((pkey = X509_get0_pubkey(xi)) == NULL) { - if (!verify_cb_cert(ctx, xi, xi != xs ? n+1 : n, - X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY)) + ret = X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY; + if (!verify_cb_cert(ctx, xi, issuer_depth, ret)) return 0; } else if (X509_verify(xs, pkey) <= 0) { - if (!verify_cb_cert(ctx, xs, n, - X509_V_ERR_CERT_SIGNATURE_FAILURE)) + ret = X509_V_ERR_CERT_SIGNATURE_FAILURE; + if (!verify_cb_cert(ctx, xs, n, ret)) return 0; } } - check_cert: + check_cert_time: /* in addition to RFC 5280, do also for trusted (root) cert */ /* Calls verify callback as needed */ if (!x509_check_cert_time(ctx, xs, n)) return 0; @@ -2138,6 +2201,12 @@ /* If purpose not set use default */ if (!purpose) purpose = def_purpose; + /* + * If purpose is set but we don't have a default then set the default to + * the current purpose + */ + else if (def_purpose == 0) + def_purpose = purpose; /* If we have a purpose then check it is valid */ if (purpose) { X509_PURPOSE *ptmp; @@ -2150,11 +2219,6 @@ ptmp = X509_PURPOSE_get0(idx); if (ptmp->trust == X509_TRUST_DEFAULT) { idx = X509_PURPOSE_get_by_id(def_purpose); - /* - * XXX: In the two callers above def_purpose is always 0, which is - * not a known value, so idx will always be -1. How is the - * X509_TRUST_DEFAULT case actually supposed to be handled? - */ if (idx == -1) { X509err(X509_F_X509_STORE_CTX_PURPOSE_INHERIT, X509_R_UNKNOWN_PURPOSE_ID); @@ -2861,6 +2925,26 @@ return ok; } +static int augment_stack(STACK_OF(X509) *src, STACK_OF(X509) **dstPtr) +{ + if (src) { + STACK_OF(X509) *dst; + int i; + + if (*dstPtr == NULL) + return ((*dstPtr = sk_X509_dup(src)) != NULL); + + for (dst = *dstPtr, i = 0; i < sk_X509_num(src); ++i) { + if (!sk_X509_push(dst, sk_X509_value(src, i))) { + sk_X509_free(dst); + *dstPtr = NULL; + return 0; + } + } + } + return 1; +} + static int build_chain(X509_STORE_CTX *ctx) { SSL_DANE *dane = ctx->dane; @@ -2904,18 +2988,7 @@ } /* - * Shallow-copy the stack of untrusted certificates (with TLS, this is - * typically the content of the peer's certificate message) so can make - * multiple passes over it, while free to remove elements as we go. - */ - if (ctx->untrusted && (sktmp = sk_X509_dup(ctx->untrusted)) == NULL) { - X509err(X509_F_BUILD_CHAIN, ERR_R_MALLOC_FAILURE); - ctx->error = X509_V_ERR_OUT_OF_MEM; - return 0; - } - - /* - * If we got any "DANE-TA(2) Cert(0) Full(0)" trust-anchors from DNS, add + * If we got any "Cert(0) Full(0)" issuer certificates from DNS, *prepend* * them to our working copy of the untrusted certificate stack. Since the * caller of X509_STORE_CTX_init() may have provided only a leaf cert with * no corresponding stack of untrusted certificates, we may need to create @@ -2924,20 +2997,21 @@ * containing at least the leaf certificate, but we must be prepared for * this to change. ] */ - if (DANETLS_ENABLED(dane) && dane->certs != NULL) { - if (sktmp == NULL && (sktmp = sk_X509_new_null()) == NULL) { - X509err(X509_F_BUILD_CHAIN, ERR_R_MALLOC_FAILURE); - ctx->error = X509_V_ERR_OUT_OF_MEM; - return 0; - } - for (i = 0; i < sk_X509_num(dane->certs); ++i) { - if (!sk_X509_push(sktmp, sk_X509_value(dane->certs, i))) { - sk_X509_free(sktmp); - X509err(X509_F_BUILD_CHAIN, ERR_R_MALLOC_FAILURE); - ctx->error = X509_V_ERR_OUT_OF_MEM; - return 0; - } - } + if (DANETLS_ENABLED(dane) && !augment_stack(dane->certs, &sktmp)) { + X509err(X509_F_BUILD_CHAIN, ERR_R_MALLOC_FAILURE); + ctx->error = X509_V_ERR_OUT_OF_MEM; + return 0; + } + + /* + * Shallow-copy the stack of untrusted certificates (with TLS, this is + * typically the content of the peer's certificate message) so can make + * multiple passes over it, while free to remove elements as we go. + */ + if (!augment_stack(ctx->untrusted, &sktmp)) { + X509err(X509_F_BUILD_CHAIN, ERR_R_MALLOC_FAILURE); + ctx->error = X509_V_ERR_OUT_OF_MEM; + return 0; } /* @@ -3158,7 +3232,16 @@ /* Drop this issuer from future consideration */ (void) sk_X509_delete_ptr(sktmp, xtmp); + if (!X509_up_ref(xtmp)) { + X509err(X509_F_BUILD_CHAIN, ERR_R_INTERNAL_ERROR); + trust = X509_TRUST_REJECTED; + ctx->error = X509_V_ERR_UNSPECIFIED; + search = 0; + continue; + } + if (!sk_X509_push(ctx->chain, xtmp)) { + X509_free(xtmp); X509err(X509_F_BUILD_CHAIN, ERR_R_MALLOC_FAILURE); trust = X509_TRUST_REJECTED; ctx->error = X509_V_ERR_OUT_OF_MEM; @@ -3166,7 +3249,7 @@ continue; } - X509_up_ref(x = xtmp); + x = xtmp; ++ctx->num_untrusted; ss = cert_self_signed(xtmp); @@ -3258,6 +3341,32 @@ } /* + * Check whether the public key of ``cert`` does not use explicit params + * for an elliptic curve. + * + * Returns 1 on success, 0 if check fails, -1 for other errors. + */ +static int check_curve(X509 *cert) +{ +#ifndef OPENSSL_NO_EC + EVP_PKEY *pkey = X509_get0_pubkey(cert); + + /* Unsupported or malformed key */ + if (pkey == NULL) + return -1; + + if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) { + int ret; + + ret = EC_KEY_decoded_from_explicit_params(EVP_PKEY_get0_EC_KEY(pkey)); + return ret < 0 ? ret : !ret; + } +#endif + + return 1; +} + +/* * Check whether the signature digest algorithm of ``cert`` meets the security * level of ``ctx``. Should not be checked for trust anchors (whether * self-signed or otherwise). diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_vpm.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_vpm.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x509_vpm.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x509_vpm.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -199,7 +199,8 @@ return 0; } - /* Copy the host flags if and only if we're copying the host list */ + x509_verify_param_copy(hostflags, 0); + if (test_x509_verify_param_copy(hosts, NULL)) { sk_OPENSSL_STRING_pop_free(dest->hosts, str_free); dest->hosts = NULL; @@ -208,7 +209,6 @@ sk_OPENSSL_STRING_deep_copy(src->hosts, str_copy, str_free); if (dest->hosts == NULL) return 0; - dest->hostflags = src->hostflags; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x_all.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x_all.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x_all.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x_all.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -363,7 +363,7 @@ unsigned int *len) { if (type == EVP_sha1() && (data->ex_flags & EXFLAG_SET) != 0 - && (data->ex_flags & EXFLAG_INVALID) == 0) { + && (data->ex_flags & EXFLAG_NO_FINGERPRINT) == 0) { /* Asking for SHA1 and we already computed it. */ if (len != NULL) *len = sizeof(data->sha1_hash); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x_attrib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x_attrib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x_attrib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x_attrib.c 2022-04-05 07:17:00.000000000 +0000 @@ -37,10 +37,13 @@ { X509_ATTRIBUTE *ret = NULL; ASN1_TYPE *val = NULL; + ASN1_OBJECT *oid; + if ((oid = OBJ_nid2obj(nid)) == NULL) + return NULL; if ((ret = X509_ATTRIBUTE_new()) == NULL) return NULL; - ret->object = OBJ_nid2obj(nid); + ret->object = oid; if ((val = ASN1_TYPE_new()) == NULL) goto err; if (!sk_ASN1_TYPE_push(ret->set, val)) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x_name.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x_name.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x_name.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x_name.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -217,8 +217,8 @@ if (ret < 0) return ret; ret = x509_name_canon(a); - if (ret < 0) - return ret; + if (!ret) + return -1; } ret = a->bytes->length; if (out != NULL) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x_pubkey.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x_pubkey.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509/x_pubkey.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509/x_pubkey.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -169,8 +169,11 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) { EVP_PKEY *ret = X509_PUBKEY_get0(key); - if (ret != NULL) - EVP_PKEY_up_ref(ret); + + if (ret != NULL && !EVP_PKEY_up_ref(ret)) { + X509err(X509_F_X509_PUBKEY_GET, ERR_R_INTERNAL_ERROR); + ret = NULL; + } return ret; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/pcy_data.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/pcy_data.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/pcy_data.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/pcy_data.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -52,6 +52,7 @@ ret = OPENSSL_zalloc(sizeof(*ret)); if (ret == NULL) { X509V3err(X509V3_F_POLICY_DATA_NEW, ERR_R_MALLOC_FAILURE); + ASN1_OBJECT_free(id); return NULL; } ret->expected_policy_set = sk_ASN1_OBJECT_new_null(); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_akey.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_akey.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_akey.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_akey.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -39,20 +39,48 @@ STACK_OF(CONF_VALUE) *extlist) { - char *tmp; + char *tmp = NULL; + STACK_OF(CONF_VALUE) *origextlist = extlist, *tmpextlist; + if (akeyid->keyid) { tmp = OPENSSL_buf2hexstr(akeyid->keyid->data, akeyid->keyid->length); - X509V3_add_value("keyid", tmp, &extlist); + if (tmp == NULL) { + X509V3err(X509V3_F_I2V_AUTHORITY_KEYID, ERR_R_MALLOC_FAILURE); + return NULL; + } + if (!X509V3_add_value("keyid", tmp, &extlist)) { + OPENSSL_free(tmp); + X509V3err(X509V3_F_I2V_AUTHORITY_KEYID, ERR_R_X509_LIB); + goto err; + } OPENSSL_free(tmp); } - if (akeyid->issuer) - extlist = i2v_GENERAL_NAMES(NULL, akeyid->issuer, extlist); + if (akeyid->issuer) { + tmpextlist = i2v_GENERAL_NAMES(NULL, akeyid->issuer, extlist); + if (tmpextlist == NULL) { + X509V3err(X509V3_F_I2V_AUTHORITY_KEYID, ERR_R_X509_LIB); + goto err; + } + extlist = tmpextlist; + } if (akeyid->serial) { tmp = OPENSSL_buf2hexstr(akeyid->serial->data, akeyid->serial->length); - X509V3_add_value("serial", tmp, &extlist); + if (tmp == NULL) { + X509V3err(X509V3_F_I2V_AUTHORITY_KEYID, ERR_R_MALLOC_FAILURE); + goto err; + } + if (!X509V3_add_value("serial", tmp, &extlist)) { + OPENSSL_free(tmp); + X509V3err(X509V3_F_I2V_AUTHORITY_KEYID, ERR_R_X509_LIB); + goto err; + } OPENSSL_free(tmp); } return extlist; + err: + if (origextlist == NULL) + sk_CONF_VALUE_pop_free(extlist, X509V3_conf_free); + return NULL; } /*- diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_alt.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_alt.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_alt.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_alt.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -9,6 +9,7 @@ #include #include "internal/cryptlib.h" +#include "crypto/x509.h" #include #include #include "ext_dat.h" @@ -99,17 +100,20 @@ break; case GEN_EMAIL: - if (!X509V3_add_value_uchar("email", gen->d.ia5->data, &ret)) + if (!x509v3_add_len_value_uchar("email", gen->d.ia5->data, + gen->d.ia5->length, &ret)) return NULL; break; case GEN_DNS: - if (!X509V3_add_value_uchar("DNS", gen->d.ia5->data, &ret)) + if (!x509v3_add_len_value_uchar("DNS", gen->d.ia5->data, + gen->d.ia5->length, &ret)) return NULL; break; case GEN_URI: - if (!X509V3_add_value_uchar("URI", gen->d.ia5->data, &ret)) + if (!x509v3_add_len_value_uchar("URI", gen->d.ia5->data, + gen->d.ia5->length, &ret)) return NULL; break; @@ -275,6 +279,7 @@ num = sk_GENERAL_NAME_num(ialt); if (!sk_GENERAL_NAME_reserve(gens, num)) { X509V3err(X509V3_F_COPY_ISSUER, ERR_R_MALLOC_FAILURE); + sk_GENERAL_NAME_free(ialt); goto err; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_cpols.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_cpols.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_cpols.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_cpols.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -422,7 +422,8 @@ qualinfo = sk_POLICYQUALINFO_value(quals, i); switch (OBJ_obj2nid(qualinfo->pqualid)) { case NID_id_qt_cps: - BIO_printf(out, "%*sCPS: %s\n", indent, "", + BIO_printf(out, "%*sCPS: %.*s\n", indent, "", + qualinfo->d.cpsuri->length, qualinfo->d.cpsuri->data); break; @@ -447,7 +448,8 @@ if (notice->noticeref) { NOTICEREF *ref; ref = notice->noticeref; - BIO_printf(out, "%*sOrganization: %s\n", indent, "", + BIO_printf(out, "%*sOrganization: %.*s\n", indent, "", + ref->organization->length, ref->organization->data); BIO_printf(out, "%*sNumber%s: ", indent, "", sk_ASN1_INTEGER_num(ref->noticenos) > 1 ? "s" : ""); @@ -470,7 +472,8 @@ BIO_puts(out, "\n"); } if (notice->exptext) - BIO_printf(out, "%*sExplicit Text: %s\n", indent, "", + BIO_printf(out, "%*sExplicit Text: %.*s\n", indent, "", + notice->exptext->length, notice->exptext->data); } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3err.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3err.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3err.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3err.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -39,6 +39,8 @@ "i2s_ASN1_INTEGER"}, {ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2V_AUTHORITY_INFO_ACCESS, 0), "i2v_AUTHORITY_INFO_ACCESS"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_I2V_AUTHORITY_KEYID, 0), + "i2v_AUTHORITY_KEYID"}, {ERR_PACK(ERR_LIB_X509V3, X509V3_F_LEVEL_ADD_NODE, 0), "level_add_node"}, {ERR_PACK(ERR_LIB_X509V3, X509V3_F_NOTICE_SECTION, 0), "notice_section"}, {ERR_PACK(ERR_LIB_X509V3, X509V3_F_NREF_NOS, 0), "nref_nos"}, @@ -104,6 +106,8 @@ {ERR_PACK(ERR_LIB_X509V3, X509V3_F_V3_GENERIC_EXTENSION, 0), "v3_generic_extension"}, {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_ADD1_I2D, 0), "X509V3_add1_i2d"}, + {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_ADD_LEN_VALUE, 0), + "x509v3_add_len_value"}, {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_ADD_VALUE, 0), "X509V3_add_value"}, {ERR_PACK(ERR_LIB_X509V3, X509V3_F_X509V3_EXT_ADD, 0), "X509V3_EXT_add"}, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_genn.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_genn.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_genn.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_genn.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -22,8 +22,9 @@ IMPLEMENT_ASN1_FUNCTIONS(OTHERNAME) ASN1_SEQUENCE(EDIPARTYNAME) = { - ASN1_IMP_OPT(EDIPARTYNAME, nameAssigner, DIRECTORYSTRING, 0), - ASN1_IMP_OPT(EDIPARTYNAME, partyName, DIRECTORYSTRING, 1) + /* DirectoryString is a CHOICE type so use explicit tagging */ + ASN1_EXP_OPT(EDIPARTYNAME, nameAssigner, DIRECTORYSTRING, 0), + ASN1_EXP(EDIPARTYNAME, partyName, DIRECTORYSTRING, 1) } ASN1_SEQUENCE_END(EDIPARTYNAME) IMPLEMENT_ASN1_FUNCTIONS(EDIPARTYNAME) @@ -57,6 +58,37 @@ (char *)a); } +static int edipartyname_cmp(const EDIPARTYNAME *a, const EDIPARTYNAME *b) +{ + int res; + + if (a == NULL || b == NULL) { + /* + * Shouldn't be possible in a valid GENERAL_NAME, but we handle it + * anyway. OTHERNAME_cmp treats NULL != NULL so we do the same here + */ + return -1; + } + if (a->nameAssigner == NULL && b->nameAssigner != NULL) + return -1; + if (a->nameAssigner != NULL && b->nameAssigner == NULL) + return 1; + /* If we get here then both have nameAssigner set, or both unset */ + if (a->nameAssigner != NULL) { + res = ASN1_STRING_cmp(a->nameAssigner, b->nameAssigner); + if (res != 0) + return res; + } + /* + * partyName is required, so these should never be NULL. We treat it in + * the same way as the a == NULL || b == NULL case above + */ + if (a->partyName == NULL || b->partyName == NULL) + return -1; + + return ASN1_STRING_cmp(a->partyName, b->partyName); +} + /* Returns 0 if they are equal, != 0 otherwise. */ int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b) { @@ -66,8 +98,11 @@ return -1; switch (a->type) { case GEN_X400: + result = ASN1_TYPE_cmp(a->d.x400Address, b->d.x400Address); + break; + case GEN_EDIPARTY: - result = ASN1_TYPE_cmp(a->d.other, b->d.other); + result = edipartyname_cmp(a->d.ediPartyName, b->d.ediPartyName); break; case GEN_OTHERNAME: @@ -114,8 +149,11 @@ { switch (type) { case GEN_X400: + a->d.x400Address = value; + break; + case GEN_EDIPARTY: - a->d.other = value; + a->d.ediPartyName = value; break; case GEN_OTHERNAME: @@ -149,8 +187,10 @@ *ptype = a->type; switch (a->type) { case GEN_X400: + return a->d.x400Address; + case GEN_EDIPARTY: - return a->d.other; + return a->d.ediPartyName; case GEN_OTHERNAME: return a->d.otherName; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_ncons.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_ncons.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_ncons.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_ncons.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2003-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2003-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -63,8 +63,31 @@ IMPLEMENT_ASN1_ALLOC_FUNCTIONS(GENERAL_SUBTREE) IMPLEMENT_ASN1_ALLOC_FUNCTIONS(NAME_CONSTRAINTS) + +#define IA5_OFFSET_LEN(ia5base, offset) \ + ((ia5base)->length - ((unsigned char *)(offset) - (ia5base)->data)) + +/* Like memchr but for ASN1_IA5STRING. Additionally you can specify the + * starting point to search from + */ +# define ia5memchr(str, start, c) memchr(start, c, IA5_OFFSET_LEN(str, start)) + +/* Like memrrchr but for ASN1_IA5STRING */ +static char *ia5memrchr(ASN1_IA5STRING *str, int c) +{ + int i; + + for (i = str->length; i > 0 && str->data[i - 1] != c; i--); + + if (i == 0) + return NULL; + + return (char *)&str->data[i - 1]; +} + /* - * We cannot use strncasecmp here because that applies locale specific rules. + * We cannot use strncasecmp here because that applies locale specific rules. It + * also doesn't work with ASN1_STRINGs that may have embedded NUL characters. * For example in Turkish 'I' is not the uppercase character for 'i'. We need to * do a simple ASCII case comparison ignoring the locale (that is why we use * numeric constants below). @@ -89,20 +112,12 @@ /* c1 > c2 */ return 1; - } else if (*s1 == 0) { - /* If we get here we know that *s2 == 0 too */ - return 0; } } return 0; } -static int ia5casecmp(const char *s1, const char *s2) -{ - return ia5ncasecmp(s1, s2, SIZE_MAX); -} - static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval) { @@ -337,7 +352,7 @@ --utf8_length; /* Reject *embedded* NULs */ - if ((size_t)utf8_length != strlen((char *)utf8_value)) { + if (memchr(utf8_value, 0, utf8_length) != NULL) { OPENSSL_free(utf8_value); return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX; } @@ -536,9 +551,14 @@ { char *baseptr = (char *)base->data; char *dnsptr = (char *)dns->data; + /* Empty matches everything */ - if (!*baseptr) + if (base->length == 0) return X509_V_OK; + + if (dns->length < base->length) + return X509_V_ERR_PERMITTED_VIOLATION; + /* * Otherwise can add zero or more components on the left so compare RHS * and if dns is longer and expect '.' as preceding character. @@ -549,7 +569,7 @@ return X509_V_ERR_PERMITTED_VIOLATION; } - if (ia5casecmp(baseptr, dnsptr)) + if (ia5ncasecmp(baseptr, dnsptr, base->length)) return X509_V_ERR_PERMITTED_VIOLATION; return X509_V_OK; @@ -560,16 +580,17 @@ { const char *baseptr = (char *)base->data; const char *emlptr = (char *)eml->data; + const char *baseat = ia5memrchr(base, '@'); + const char *emlat = ia5memrchr(eml, '@'); + size_t basehostlen, emlhostlen; - const char *baseat = strchr(baseptr, '@'); - const char *emlat = strchr(emlptr, '@'); if (!emlat) return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX; /* Special case: initial '.' is RHS match */ - if (!baseat && (*baseptr == '.')) { + if (!baseat && base->length > 0 && (*baseptr == '.')) { if (eml->length > base->length) { emlptr += eml->length - base->length; - if (ia5casecmp(baseptr, emlptr) == 0) + if (ia5ncasecmp(baseptr, emlptr, base->length) == 0) return X509_V_OK; } return X509_V_ERR_PERMITTED_VIOLATION; @@ -581,6 +602,9 @@ if (baseat != baseptr) { if ((baseat - baseptr) != (emlat - emlptr)) return X509_V_ERR_PERMITTED_VIOLATION; + if (memchr(baseptr, 0, baseat - baseptr) || + memchr(emlptr, 0, emlat - emlptr)) + return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX; /* Case sensitive match of local part */ if (strncmp(baseptr, emlptr, emlat - emlptr)) return X509_V_ERR_PERMITTED_VIOLATION; @@ -589,8 +613,10 @@ baseptr = baseat + 1; } emlptr = emlat + 1; + basehostlen = IA5_OFFSET_LEN(base, baseptr); + emlhostlen = IA5_OFFSET_LEN(eml, emlptr); /* Just have hostname left to match: case insensitive */ - if (ia5casecmp(baseptr, emlptr)) + if (basehostlen != emlhostlen || ia5ncasecmp(baseptr, emlptr, emlhostlen)) return X509_V_ERR_PERMITTED_VIOLATION; return X509_V_OK; @@ -601,10 +627,14 @@ { const char *baseptr = (char *)base->data; const char *hostptr = (char *)uri->data; - const char *p = strchr(hostptr, ':'); + const char *p = ia5memchr(uri, (char *)uri->data, ':'); int hostlen; + /* Check for foo:// and skip past it */ - if (!p || (p[1] != '/') || (p[2] != '/')) + if (p == NULL + || IA5_OFFSET_LEN(uri, p) < 3 + || p[1] != '/' + || p[2] != '/') return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX; hostptr = p + 3; @@ -612,13 +642,13 @@ /* Look for a port indicator as end of hostname first */ - p = strchr(hostptr, ':'); + p = ia5memchr(uri, hostptr, ':'); /* Otherwise look for trailing slash */ - if (!p) - p = strchr(hostptr, '/'); + if (p == NULL) + p = ia5memchr(uri, hostptr, '/'); - if (!p) - hostlen = strlen(hostptr); + if (p == NULL) + hostlen = IA5_OFFSET_LEN(uri, hostptr); else hostlen = p - hostptr; @@ -626,7 +656,7 @@ return X509_V_ERR_UNSUPPORTED_NAME_SYNTAX; /* Special case: initial '.' is RHS match */ - if (*baseptr == '.') { + if (base->length > 0 && *baseptr == '.') { if (hostlen > base->length) { p = hostptr + hostlen - base->length; if (ia5ncasecmp(p, baseptr, base->length) == 0) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_pci.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_pci.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_pci.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_pci.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -77,7 +77,8 @@ i2a_ASN1_OBJECT(out, pci->proxyPolicy->policyLanguage); BIO_puts(out, "\n"); if (pci->proxyPolicy->policy && pci->proxyPolicy->policy->data) - BIO_printf(out, "%*sPolicy Text: %s\n", indent, "", + BIO_printf(out, "%*sPolicy Text: %.*s\n", indent, "", + pci->proxyPolicy->policy->length, pci->proxyPolicy->policy->data); return 1; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_purp.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_purp.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_purp.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_purp.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -13,6 +13,7 @@ #include #include #include "crypto/x509.h" +#include "../x509/x509_local.h" /* for x509_signing_allowed() */ #include "internal/tsan_assist.h" static void x509v3_cache_extensions(X509 *x); @@ -344,6 +345,24 @@ return 1; } +/* Check that issuer public key algorithm matches subject signature algorithm */ +static int check_sig_alg_match(const EVP_PKEY *pkey, const X509 *subject) +{ + int pkey_sig_nid, subj_sig_nid; + + if (pkey == NULL) + return X509_V_ERR_NO_ISSUER_PUBLIC_KEY; + if (OBJ_find_sigid_algs(EVP_PKEY_base_id(pkey), + NULL, &pkey_sig_nid) == 0) + pkey_sig_nid = EVP_PKEY_base_id(pkey); + if (OBJ_find_sigid_algs(OBJ_obj2nid(subject->cert_info.signature.algorithm), + NULL, &subj_sig_nid) == 0) + return X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM; + if (pkey_sig_nid != EVP_PKEY_type(subj_sig_nid)) + return X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH; + return X509_V_OK; +} + #define V1_ROOT (EXFLAG_V1|EXFLAG_SS) #define ku_reject(x, usage) \ (((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage))) @@ -375,7 +394,8 @@ } if (!X509_digest(x, EVP_sha1(), x->sha1_hash, NULL)) - x->ex_flags |= EXFLAG_INVALID; + x->ex_flags |= (EXFLAG_NO_FINGERPRINT | EXFLAG_INVALID); + /* V1 should mean no extensions ... */ if (!X509_get_version(x)) x->ex_flags |= EXFLAG_V1; @@ -496,11 +516,11 @@ x->ex_flags |= EXFLAG_INVALID; /* Does subject name match issuer ? */ if (!X509_NAME_cmp(X509_get_subject_name(x), X509_get_issuer_name(x))) { - x->ex_flags |= EXFLAG_SI; - /* If SKID matches AKID also indicate self signed */ - if (X509_check_akid(x, x->akid) == X509_V_OK && - !ku_reject(x, KU_KEY_CERT_SIGN)) - x->ex_flags |= EXFLAG_SS; + x->ex_flags |= EXFLAG_SI; /* cert is self-issued */ + if (X509_check_akid(x, x->akid) == X509_V_OK /* SKID matches AKID */ + /* .. and the signature alg matches the PUBKEY alg: */ + && check_sig_alg_match(X509_get0_pubkey(x), x) == X509_V_OK) + x->ex_flags |= EXFLAG_SS; /* indicate self-signed */ } x->altname = X509_get_ext_d2i(x, NID_subject_alt_name, &i, NULL); if (x->altname == NULL && i != -1) @@ -793,6 +813,23 @@ } /*- + * Check if certificate I is allowed to issue certificate I + * according to the B field of I if present + * depending on any proxyCertInfo extension of I. + * Returns 0 for OK, or positive for reason for rejection + * where reason codes match those for X509_verify_cert(). + */ +int x509_signing_allowed(const X509 *issuer, const X509 *subject) +{ + if (subject->ex_flags & EXFLAG_PROXY) { + if (ku_reject(issuer, KU_DIGITAL_SIGNATURE)) + return X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE; + } else if (ku_reject(issuer, KU_KEY_CERT_SIGN)) + return X509_V_ERR_KEYUSAGE_NO_CERTSIGN; + return X509_V_OK; +} + +/*- * Various checks to see if one certificate issued the second. * This can be used to prune a set of possible issuer certificates * which have been looked up using some simple method such as by @@ -800,13 +837,24 @@ * These are: * 1. Check issuer_name(subject) == subject_name(issuer) * 2. If akid(subject) exists check it matches issuer - * 3. If key_usage(issuer) exists check it supports certificate signing + * 3. Check that issuer public key algorithm matches subject signature algorithm + * 4. If key_usage(issuer) exists check it supports certificate signing * returns 0 for OK, positive for reason for mismatch, reasons match * codes for X509_verify_cert() */ int X509_check_issued(X509 *issuer, X509 *subject) { + int ret; + + if ((ret = x509_likely_issued(issuer, subject)) != X509_V_OK) + return ret; + return x509_signing_allowed(issuer, subject); +} + +/* do the checks 1., 2., and 3. as described above for X509_check_issued() */ +int x509_likely_issued(X509 *issuer, X509 *subject) +{ if (X509_NAME_cmp(X509_get_subject_name(issuer), X509_get_issuer_name(subject))) return X509_V_ERR_SUBJECT_ISSUER_MISMATCH; @@ -824,12 +872,8 @@ return ret; } - if (subject->ex_flags & EXFLAG_PROXY) { - if (ku_reject(issuer, KU_DIGITAL_SIGNATURE)) - return X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE; - } else if (ku_reject(issuer, KU_KEY_CERT_SIGN)) - return X509_V_ERR_KEYUSAGE_NO_CERTSIGN; - return X509_V_OK; + /* check if the subject signature alg matches the issuer's PUBKEY alg */ + return check_sig_alg_match(X509_get0_pubkey(issuer), subject); } int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_utl.c nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_utl.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/crypto/x509v3/v3_utl.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/crypto/x509v3/v3_utl.c 2022-04-05 07:17:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -12,6 +12,7 @@ #include "e_os.h" #include "internal/cryptlib.h" #include +#include #include "crypto/ctype.h" #include #include @@ -34,17 +35,26 @@ /* Add a CONF_VALUE name value pair to stack */ -int X509V3_add_value(const char *name, const char *value, - STACK_OF(CONF_VALUE) **extlist) +static int x509v3_add_len_value(const char *name, const char *value, + size_t vallen, STACK_OF(CONF_VALUE) **extlist) { CONF_VALUE *vtmp = NULL; char *tname = NULL, *tvalue = NULL; int sk_allocated = (*extlist == NULL); - if (name && (tname = OPENSSL_strdup(name)) == NULL) - goto err; - if (value && (tvalue = OPENSSL_strdup(value)) == NULL) + if (name != NULL && (tname = OPENSSL_strdup(name)) == NULL) goto err; + if (value != NULL && vallen > 0) { + /* + * We tolerate a single trailing NUL character, but otherwise no + * embedded NULs + */ + if (memchr(value, 0, vallen - 1) != NULL) + goto err; + tvalue = OPENSSL_strndup(value, vallen); + if (tvalue == NULL) + goto err; + } if ((vtmp = OPENSSL_malloc(sizeof(*vtmp))) == NULL) goto err; if (sk_allocated && (*extlist = sk_CONF_VALUE_new_null()) == NULL) @@ -56,7 +66,7 @@ goto err; return 1; err: - X509V3err(X509V3_F_X509V3_ADD_VALUE, ERR_R_MALLOC_FAILURE); + X509V3err(X509V3_F_X509V3_ADD_LEN_VALUE, ERR_R_MALLOC_FAILURE); if (sk_allocated) { sk_CONF_VALUE_free(*extlist); *extlist = NULL; @@ -67,10 +77,26 @@ return 0; } +int X509V3_add_value(const char *name, const char *value, + STACK_OF(CONF_VALUE) **extlist) +{ + return x509v3_add_len_value(name, value, + value != NULL ? strlen((const char *)value) : 0, + extlist); +} + int X509V3_add_value_uchar(const char *name, const unsigned char *value, STACK_OF(CONF_VALUE) **extlist) { - return X509V3_add_value(name, (const char *)value, extlist); + return x509v3_add_len_value(name, (const char *)value, + value != NULL ? strlen((const char *)value) : 0, + extlist); +} + +int x509v3_add_len_value_uchar(const char *name, const unsigned char *value, + size_t vallen, STACK_OF(CONF_VALUE) **extlist) +{ + return x509v3_add_len_value(name, (const char *)value, vallen, extlist); } /* Free function for STACK_OF(CONF_VALUE) */ @@ -502,18 +528,29 @@ /* First some sanity checks */ if (email->type != V_ASN1_IA5STRING) return 1; - if (!email->data || !email->length) + if (email->data == NULL || email->length == 0) + return 1; + if (memchr(email->data, 0, email->length) != NULL) return 1; if (*sk == NULL) *sk = sk_OPENSSL_STRING_new(sk_strcmp); if (*sk == NULL) return 0; + + emtmp = OPENSSL_strndup((char *)email->data, email->length); + if (emtmp == NULL) { + X509_email_free(*sk); + *sk = NULL; + return 0; + } + /* Don't add duplicates */ - if (sk_OPENSSL_STRING_find(*sk, (char *)email->data) != -1) + if (sk_OPENSSL_STRING_find(*sk, emtmp) != -1) { + OPENSSL_free(emtmp); return 1; - emtmp = OPENSSL_strdup((char *)email->data); - if (emtmp == NULL || !sk_OPENSSL_STRING_push(*sk, emtmp)) { - OPENSSL_free(emtmp); /* free on push failure */ + } + if (!sk_OPENSSL_STRING_push(*sk, emtmp)) { + OPENSSL_free(emtmp); /* free on push failure */ X509_email_free(*sk); *sk = NULL; return 0; @@ -794,8 +831,11 @@ rv = equal(a->data, a->length, (unsigned char *)b, blen, flags); else if (a->length == (int)blen && !memcmp(a->data, b, blen)) rv = 1; - if (rv > 0 && peername) + if (rv > 0 && peername != NULL) { *peername = OPENSSL_strndup((char *)a->data, a->length); + if (*peername == NULL) + return -1; + } } else { int astrlen; unsigned char *astr; @@ -808,8 +848,13 @@ return -1; } rv = equal(astr, astrlen, (unsigned char *)b, blen, flags); - if (rv > 0 && peername) + if (rv > 0 && peername != NULL) { *peername = OPENSSL_strndup((char *)astr, astrlen); + if (*peername == NULL) { + OPENSSL_free(astr); + return -1; + } + } OPENSSL_free(astr); } return rv; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/engines/e_afalg.c nodejs-mozilla-12.22.12/deps/openssl/openssl/engines/e_afalg.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/engines/e_afalg.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/engines/e_afalg.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -624,11 +624,8 @@ } actx = (afalg_ctx *) EVP_CIPHER_CTX_get_cipher_data(ctx); - if (actx == NULL || actx->init_done != MAGIC_INIT_NUM) { - ALG_WARN("%s afalg ctx passed\n", - ctx == NULL ? "NULL" : "Uninitialised"); - return 0; - } + if (actx == NULL || actx->init_done != MAGIC_INIT_NUM) + return 1; close(actx->sfd); close(actx->bfd); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/engines/e_dasync.c nodejs-mozilla-12.22.12/deps/openssl/openssl/engines/e_dasync.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/engines/e_dasync.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/engines/e_dasync.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2015-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -182,8 +182,8 @@ const int **nids, int nid); static int dasync_cipher_nids[] = { - NID_aes_128_cbc, NID_aes_128_cbc_hmac_sha1, + NID_aes_128_cbc, 0 }; @@ -244,7 +244,8 @@ || !EVP_CIPHER_meth_set_flags(_hidden_aes_128_cbc, EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CBC_MODE - | EVP_CIPH_FLAG_PIPELINE) + | EVP_CIPH_FLAG_PIPELINE + | EVP_CIPH_CUSTOM_COPY) || !EVP_CIPHER_meth_set_init(_hidden_aes_128_cbc, dasync_aes128_init_key) || !EVP_CIPHER_meth_set_do_cipher(_hidden_aes_128_cbc, @@ -264,12 +265,14 @@ 16 /* block size */, 16 /* key len */); if (_hidden_aes_128_cbc_hmac_sha1 == NULL + || EVP_aes_128_cbc_hmac_sha1() == NULL || !EVP_CIPHER_meth_set_iv_length(_hidden_aes_128_cbc_hmac_sha1,16) || !EVP_CIPHER_meth_set_flags(_hidden_aes_128_cbc_hmac_sha1, EVP_CIPH_CBC_MODE | EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_FLAG_AEAD_CIPHER - | EVP_CIPH_FLAG_PIPELINE) + | EVP_CIPH_FLAG_PIPELINE + | EVP_CIPH_CUSTOM_COPY) || !EVP_CIPHER_meth_set_init(_hidden_aes_128_cbc_hmac_sha1, dasync_aes128_cbc_hmac_sha1_init_key) || !EVP_CIPHER_meth_set_do_cipher(_hidden_aes_128_cbc_hmac_sha1, @@ -371,6 +374,10 @@ int ok = 1; if (cipher == NULL) { /* We are returning a list of supported nids */ + if (dasync_aes_128_cbc_hmac_sha1() == NULL) { + *nids = dasync_cipher_nids + 1; + return 1; + } *nids = dasync_cipher_nids; return (sizeof(dasync_cipher_nids) - 1) / sizeof(dasync_cipher_nids[0]); @@ -624,6 +631,21 @@ } } + case EVP_CTRL_COPY: + { + const EVP_CIPHER *cipher = aeadcapable + ? EVP_aes_128_cbc_hmac_sha1() + : EVP_aes_128_cbc(); + size_t data_size = EVP_CIPHER_impl_ctx_size(cipher); + void *cipher_data = OPENSSL_malloc(data_size); + + if (cipher_data == NULL) + return 0; + memcpy(cipher_data, pipe_ctx->inner_cipher_data, data_size); + pipe_ctx->inner_cipher_data = cipher_data; + return 1; + } + default: return 0; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/e_os.h nodejs-mozilla-12.22.12/deps/openssl/openssl/e_os.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/e_os.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/e_os.h 2022-04-05 07:17:01.000000000 +0000 @@ -308,7 +308,7 @@ # if defined(OPENSSL_SYS_WINDOWS) # define strcasecmp _stricmp # define strncasecmp _strnicmp -# if (_MSC_VER >= 1310) +# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) # define open _open # define fdopen _fdopen # define close _close diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/fuzz/asn1.c nodejs-mozilla-12.22.12/deps/openssl/openssl/fuzz/asn1.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/fuzz/asn1.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/fuzz/asn1.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL licenses, (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/fuzz/x509.c nodejs-mozilla-12.22.12/deps/openssl/openssl/fuzz/x509.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/fuzz/x509.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/fuzz/x509.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL licenses, (the "License"); * you may not use this file except in compliance with the License. @@ -37,6 +37,8 @@ X509_print(bio, x509); BIO_free(bio); + X509_issuer_and_serial_hash(x509); + i2d_X509(x509, &der); OPENSSL_free(der); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/crypto/rand.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/crypto/rand.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/crypto/rand.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/crypto/rand.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -20,6 +20,16 @@ # include +# if defined(__APPLE__) && !defined(OPENSSL_NO_APPLE_CRYPTO_RANDOM) +# include +# if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) || \ + (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) +# define OPENSSL_APPLE_CRYPTO_RANDOM 1 +# include +# include +# endif +# endif + /* forward declaration */ typedef struct rand_pool_st RAND_POOL; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/crypto/sm2.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/crypto/sm2.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/crypto/sm2.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/crypto/sm2.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2017 Ribose Inc. All Rights Reserved. * Ported from Ribose contributions from Botan. * @@ -60,8 +60,7 @@ int sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, size_t *ct_size); -int sm2_plaintext_size(const EC_KEY *key, const EVP_MD *digest, size_t msg_len, - size_t *pt_size); +int sm2_plaintext_size(const unsigned char *ct, size_t ct_size, size_t *pt_size); int sm2_encrypt(const EC_KEY *key, const EVP_MD *digest, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/crypto/x509.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/crypto/x509.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/crypto/x509.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/crypto/x509.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -8,6 +8,8 @@ */ #include "internal/refcount.h" +#include +#include /* Internal X509 structures and functions: not for application use */ @@ -284,3 +286,6 @@ int x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); void x509_init_sig_info(X509 *x); + +int x509v3_add_len_value_uchar(const char *name, const unsigned char *value, + size_t vallen, STACK_OF(CONF_VALUE) **extlist); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/internal/sockets.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/internal/sockets.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/internal/sockets.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/internal/sockets.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -30,6 +30,8 @@ # include # include # include +# include +# include # elif defined(_WIN32_WCE) && _WIN32_WCE<410 # define getservbyname _masked_declaration_getservbyname # endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/asn1err.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/asn1err.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/asn1err.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/asn1err.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,9 +11,7 @@ #ifndef HEADER_ASN1ERR_H # define HEADER_ASN1ERR_H -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include # ifdef __cplusplus extern "C" @@ -53,6 +51,7 @@ # define ASN1_F_ASN1_ITEM_DUP 191 # define ASN1_F_ASN1_ITEM_EMBED_D2I 120 # define ASN1_F_ASN1_ITEM_EMBED_NEW 121 +# define ASN1_F_ASN1_ITEM_EX_I2D 144 # define ASN1_F_ASN1_ITEM_FLAGS_I2D 118 # define ASN1_F_ASN1_ITEM_I2D_BIO 192 # define ASN1_F_ASN1_ITEM_I2D_FP 193 @@ -145,6 +144,7 @@ # define ASN1_R_ASN1_SIG_PARSE_ERROR 204 # define ASN1_R_AUX_ERROR 100 # define ASN1_R_BAD_OBJECT_HEADER 102 +# define ASN1_R_BAD_TEMPLATE 230 # define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 # define ASN1_R_BN_LIB 105 # define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/bn.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/bn.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/bn.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/bn.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -56,7 +56,7 @@ * avoid leaking exponent information through timing, * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, * BN_div() will call BN_div_no_branch, - * BN_mod_inverse() will call BN_mod_inverse_no_branch. + * BN_mod_inverse() will call bn_mod_inverse_no_branch. */ # define BN_FLG_CONSTTIME 0x04 # define BN_FLG_SECURE 0x08 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/ecerr.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/ecerr.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/ecerr.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/ecerr.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -243,6 +243,7 @@ # define EC_R_LADDER_POST_FAILURE 136 # define EC_R_LADDER_PRE_FAILURE 153 # define EC_R_LADDER_STEP_FAILURE 162 +# define EC_R_MISSING_OID 167 # define EC_R_MISSING_PARAMETERS 124 # define EC_R_MISSING_PRIVATE_KEY 125 # define EC_R_NEED_NEW_SETUP_VALUES 157 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/ec.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/ec.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/ec.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/ec.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -793,12 +793,15 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len); int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out); -# define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x) -# define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x) -# define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \ - (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x)) -# define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \ - (unsigned char *)(x)) +# define d2i_ECPKParameters_bio(bp,x) \ + ASN1_d2i_bio_of(EC_GROUP, NULL, d2i_ECPKParameters, bp, x) +# define i2d_ECPKParameters_bio(bp,x) \ + ASN1_i2d_bio_of_const(EC_GROUP, i2d_ECPKParameters, bp, x) +# define d2i_ECPKParameters_fp(fp,x) \ + (EC_GROUP *)ASN1_d2i_fp(NULL, (d2i_of_void *)d2i_ECPKParameters, (fp), \ + (void **)(x)) +# define i2d_ECPKParameters_fp(fp,x) \ + ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off); # ifndef OPENSSL_NO_STDIO @@ -829,6 +832,8 @@ void EC_KEY_clear_flags(EC_KEY *key, int flags); +int EC_KEY_decoded_from_explicit_params(const EC_KEY *key); + /** Creates a new EC_KEY object using a named curve as underlying * EC_GROUP object. * \param nid NID of the named curve. diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/engine.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/engine.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/engine.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/engine.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -722,6 +722,7 @@ CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ fns->mem_fns.realloc_fn, \ fns->mem_fns.free_fn); \ + OPENSSL_init_crypto(OPENSSL_INIT_NO_ATEXIT, NULL); \ skip_cbs: \ if (!fn(e, id)) return 0; \ return 1; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/e_os2.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/e_os2.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/e_os2.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/e_os2.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -241,7 +241,7 @@ defined(__osf__) || defined(__sgi) || defined(__hpux) || \ defined(OPENSSL_SYS_VMS) || defined (__OpenBSD__) # include -# elif defined(_MSC_VER) && _MSC_VER<=1500 +# elif defined(_MSC_VER) && _MSC_VER<1600 /* * minimally required typdefs for systems not supporting inttypes.h or * stdint.h: currently just older VC++ @@ -279,7 +279,8 @@ # define ossl_inline inline # endif -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L +# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && \ + !defined(__cplusplus) # define ossl_noreturn _Noreturn # elif defined(__GNUC__) && __GNUC__ >= 2 # define ossl_noreturn __attribute__((noreturn)) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/evperr.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/evperr.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/evperr.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/evperr.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,9 +11,7 @@ #ifndef HEADER_EVPERR_H # define HEADER_EVPERR_H -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include # ifdef __cplusplus extern "C" @@ -179,6 +177,7 @@ # define EVP_R_ONLY_ONESHOT_SUPPORTED 177 # define EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE 150 # define EVP_R_OPERATON_NOT_INITIALIZED 151 +# define EVP_R_OUTPUT_WOULD_OVERFLOW 184 # define EVP_R_PARTIALLY_OVERLAPPING 162 # define EVP_R_PBKDF2_ERROR 181 # define EVP_R_PKEY_APPLICATION_ASN1_METHOD_ALREADY_REGISTERED 179 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/obj_mac.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/obj_mac.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/obj_mac.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/obj_mac.h 2022-04-05 07:17:01.000000000 +0000 @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/opensslconf.h.in nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/opensslconf.h.in --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/opensslconf.h.in 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/opensslconf.h.in 2022-04-05 07:17:01.000000000 +0000 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -77,6 +77,11 @@ # undef DECLARE_DEPRECATED # define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); # endif +# elif defined(__SUNPRO_C) +# if (__SUNPRO_C >= 0x5130) +# undef DECLARE_DEPRECATED +# define DECLARE_DEPRECATED(f) f __attribute__ ((deprecated)); +# endif # endif #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/opensslv.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/opensslv.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/opensslv.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/opensslv.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -39,8 +39,8 @@ * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for * major minor fix final patch/beta) */ -# define OPENSSL_VERSION_NUMBER 0x1010107fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1g 21 Apr 2020" +# define OPENSSL_VERSION_NUMBER 0x101010efL +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1n 15 Mar 2022" /*- * The macros below are to be used for shared library (.so, .dll, ...) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/pemerr.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/pemerr.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/pemerr.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/pemerr.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -61,6 +61,7 @@ # define PEM_F_PEM_SIGNFINAL 112 # define PEM_F_PEM_WRITE 113 # define PEM_F_PEM_WRITE_BIO 114 +# define PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL 147 # define PEM_F_PEM_WRITE_PRIVATEKEY 139 # define PEM_F_PEM_X509_INFO_READ 115 # define PEM_F_PEM_X509_INFO_READ_BIO 116 @@ -99,5 +100,6 @@ # define PEM_R_UNSUPPORTED_CIPHER 113 # define PEM_R_UNSUPPORTED_ENCRYPTION 114 # define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 +# define PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE 110 #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/ssl3.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/ssl3.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/ssl3.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/ssl3.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -292,6 +292,9 @@ # define TLS1_FLAGS_STATELESS 0x0800 +/* Set if extended master secret extension required on renegotiation */ +# define TLS1_FLAGS_REQUIRED_EXTMS 0x1000 + # define SSL3_MT_HELLO_REQUEST 0 # define SSL3_MT_CLIENT_HELLO 1 # define SSL3_MT_SERVER_HELLO 2 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/sslerr.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/sslerr.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/sslerr.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/sslerr.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -70,6 +70,7 @@ # define SSL_F_FINAL_EMS 486 # define SSL_F_FINAL_KEY_SHARE 503 # define SSL_F_FINAL_MAXFRAGMENTLEN 557 +# define SSL_F_FINAL_PSK 639 # define SSL_F_FINAL_RENEGOTIATE 483 # define SSL_F_FINAL_SERVER_NAME 558 # define SSL_F_FINAL_SIG_ALGS 497 @@ -592,6 +593,7 @@ # define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 # define SSL_R_MISSING_FATAL 256 # define SSL_R_MISSING_PARAMETERS 290 +# define SSL_R_MISSING_PSK_KEX_MODES_EXTENSION 310 # define SSL_R_MISSING_RSA_CERTIFICATE 168 # define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 # define SSL_R_MISSING_RSA_SIGNING_CERT 170 @@ -633,6 +635,7 @@ # define SSL_R_NO_VERIFY_COOKIE_CALLBACK 403 # define SSL_R_NULL_SSL_CTX 195 # define SSL_R_NULL_SSL_METHOD_PASSED 196 +# define SSL_R_OCSP_CALLBACK_FAILURE 294 # define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197 # define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344 # define SSL_R_OVERFLOW_ERROR 237 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/ssl.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/ssl.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/ssl.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/ssl.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -1393,7 +1393,7 @@ # define SSL_get1_groups(s, glist) \ SSL_ctrl(s,SSL_CTRL_GET_GROUPS,0,(int*)(glist)) # define SSL_CTX_set1_groups(ctx, glist, glistlen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(char *)(glist)) + SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS,glistlen,(int *)(glist)) # define SSL_CTX_set1_groups_list(ctx, s) \ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_GROUPS_LIST,0,(char *)(s)) # define SSL_set1_groups(s, glist, glistlen) \ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509err.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509err.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509err.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509err.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -11,9 +11,7 @@ #ifndef HEADER_X509ERR_H # define HEADER_X509ERR_H -# ifndef HEADER_SYMHACKS_H -# include -# endif +# include # ifdef __cplusplus extern "C" @@ -65,6 +63,7 @@ # define X509_F_X509_OBJECT_NEW 150 # define X509_F_X509_PRINT_EX_FP 118 # define X509_F_X509_PUBKEY_DECODE 148 +# define X509_F_X509_PUBKEY_GET 161 # define X509_F_X509_PUBKEY_GET0 119 # define X509_F_X509_PUBKEY_SET 120 # define X509_F_X509_REQ_CHECK_PRIVATE_KEY 144 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -478,6 +478,7 @@ const void **ppval, const X509_ALGOR *algor); void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md); int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b); +int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src); X509_NAME *X509_NAME_dup(X509_NAME *xn); X509_NAME_ENTRY *X509_NAME_ENTRY_dup(X509_NAME_ENTRY *ne); @@ -679,6 +680,8 @@ int X509_REQ_set_subject_name(X509_REQ *req, X509_NAME *name); void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig, const X509_ALGOR **palg); +void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig); +int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg); int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); @@ -930,7 +933,7 @@ int type, const unsigned char *bytes, int len); -void *X509at_get0_data_by_OBJ(STACK_OF(X509_ATTRIBUTE) *x, +void *X509at_get0_data_by_OBJ(const STACK_OF(X509_ATTRIBUTE) *x, const ASN1_OBJECT *obj, int lastpos, int type); X509_ATTRIBUTE *X509_ATTRIBUTE_create_by_NID(X509_ATTRIBUTE **attr, int nid, int atrtype, const void *data, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509v3err.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509v3err.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509v3err.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509v3err.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -38,6 +38,7 @@ # define X509V3_F_I2S_ASN1_IA5STRING 149 # define X509V3_F_I2S_ASN1_INTEGER 120 # define X509V3_F_I2V_AUTHORITY_INFO_ACCESS 138 +# define X509V3_F_I2V_AUTHORITY_KEYID 173 # define X509V3_F_LEVEL_ADD_NODE 168 # define X509V3_F_NOTICE_SECTION 132 # define X509V3_F_NREF_NOS 133 @@ -78,6 +79,7 @@ # define X509V3_F_V2I_TLS_FEATURE 165 # define X509V3_F_V3_GENERIC_EXTENSION 116 # define X509V3_F_X509V3_ADD1_I2D 140 +# define X509V3_F_X509V3_ADD_LEN_VALUE 174 # define X509V3_F_X509V3_ADD_VALUE 105 # define X509V3_F_X509V3_EXT_ADD 104 # define X509V3_F_X509V3_EXT_ADD_ALIAS 106 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509v3.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509v3.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509v3.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509v3.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -364,8 +364,9 @@ # define EXFLAG_INVALID_POLICY 0x800 # define EXFLAG_FRESHEST 0x1000 -/* Self signed */ -# define EXFLAG_SS 0x2000 +# define EXFLAG_SS 0x2000 /* cert is apparently self-signed */ + +# define EXFLAG_NO_FINGERPRINT 0x100000 # define KU_DIGITAL_SIGNATURE 0x0080 # define KU_NON_REPUDIATION 0x0040 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509_vfy.h nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509_vfy.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/include/openssl/x509_vfy.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/include/openssl/x509_vfy.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -184,6 +184,10 @@ # define X509_V_ERR_OCSP_VERIFY_NEEDED 73 /* Need OCSP verification */ # define X509_V_ERR_OCSP_VERIFY_FAILED 74 /* Couldn't verify cert through OCSP */ # define X509_V_ERR_OCSP_CERT_UNKNOWN 75 /* Certificate wasn't recognized by the OCSP responder */ +# define X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH 76 +# define X509_V_ERR_NO_ISSUER_PUBLIC_KEY 77 +# define X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM 78 +# define X509_V_ERR_EC_KEY_EXPLICIT_PARAMS 79 /* Certificate verify flags */ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/INSTALL nodejs-mozilla-12.22.12/deps/openssl/openssl/INSTALL --- nodejs-mozilla-12.18.1/deps/openssl/openssl/INSTALL 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/INSTALL 2022-04-05 07:17:00.000000000 +0000 @@ -106,8 +106,7 @@ This will build and install OpenSSL in the default location, which is: Unix: normal installation directories under /usr/local - OpenVMS: SYS$COMMON:[OPENSSL-'version'...], where 'version' is the - OpenSSL version number with underscores instead of periods. + OpenVMS: SYS$COMMON:[OPENSSL] Windows: C:\Program Files\OpenSSL or C:\Program Files (x86)\OpenSSL The installation directory should be appropriately protected to ensure @@ -116,7 +115,9 @@ your Operating System it is recommended that you do not overwrite the system version and instead install to somewhere else. - If you want to install it anywhere else, run config like this: + If you want to install it anywhere else, run config like this (the options + --prefix and --openssldir are explained further down, and the values shown + here are mere examples): On Unix: @@ -198,7 +199,7 @@ Unix: /usr/local Windows: C:\Program Files\OpenSSL or C:\Program Files (x86)\OpenSSL - OpenVMS: SYS$COMMON:[OPENSSL-'version'] + OpenVMS: SYS$COMMON:[OPENSSL] --release Build OpenSSL without debugging symbols. This is the default. @@ -961,9 +962,9 @@ share/doc/openssl/html/man7 Contains the HTML rendition of the man-pages. - OpenVMS ('arch' is replaced with the architecture name, "Alpha" - or "ia64", 'sover' is replaced with the shared library version - (0101 for 1.1), and 'pz' is replaced with the pointer size + OpenVMS ('arch' is replaced with the architecture name, "ALPHA" + or "IA64", 'sover' is replaced with the shared library version + (0101 for 1.1.x), and 'pz' is replaced with the pointer size OpenSSL was built with): [.EXE.'arch'] Contains the openssl binary. diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/NEWS nodejs-mozilla-12.22.12/deps/openssl/openssl/NEWS --- nodejs-mozilla-12.18.1/deps/openssl/openssl/NEWS 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/NEWS 2022-04-05 07:17:00.000000000 +0000 @@ -5,6 +5,50 @@ This file gives a brief overview of the major changes between each OpenSSL release. For more details please read the CHANGES file. + Major changes between OpenSSL 1.1.1m and OpenSSL 1.1.1n [15 Mar 2022] + + o Fixed a bug in the BN_mod_sqrt() function that can cause it to loop + forever for non-prime moduli ([CVE-2022-0778]) + + Major changes between OpenSSL 1.1.1l and OpenSSL 1.1.1m [14 Dec 2021] + + o None + + Major changes between OpenSSL 1.1.1k and OpenSSL 1.1.1l [24 Aug 2021] + + o Fixed an SM2 Decryption Buffer Overflow (CVE-2021-3711) + o Fixed various read buffer overruns processing ASN.1 strings (CVE-2021-3712) + + Major changes between OpenSSL 1.1.1j and OpenSSL 1.1.1k [25 Mar 2021] + + o Fixed a problem with verifying a certificate chain when using the + X509_V_FLAG_X509_STRICT flag (CVE-2021-3450) + o Fixed an issue where an OpenSSL TLS server may crash if sent a + maliciously crafted renegotiation ClientHello message from a client + (CVE-2021-3449) + + Major changes between OpenSSL 1.1.1i and OpenSSL 1.1.1j [16 Feb 2021] + + o Fixed a NULL pointer deref in the X509_issuer_and_serial_hash() + function (CVE-2021-23841) + o Fixed the RSA_padding_check_SSLv23() function and the RSA_SSLV23_PADDING + padding mode to correctly check for rollback attacks + o Fixed an overflow in the EVP_CipherUpdate, EVP_EncryptUpdate and + EVP_DecryptUpdate functions (CVE-2021-23840) + o Fixed SRP_Calc_client_key so that it runs in constant time + + Major changes between OpenSSL 1.1.1h and OpenSSL 1.1.1i [8 Dec 2020] + + o Fixed NULL pointer deref in GENERAL_NAME_cmp (CVE-2020-1971) + + Major changes between OpenSSL 1.1.1g and OpenSSL 1.1.1h [22 Sep 2020] + + o Disallow explicit curve parameters in verifications chains when + X509_V_FLAG_X509_STRICT is used + o Enable 'MinProtocol' and 'MaxProtocol' to configure both TLS and DTLS + contexts + o Oracle Developer Studio will start reporting deprecation warnings + Major changes between OpenSSL 1.1.1f and OpenSSL 1.1.1g [21 Apr 2020] o Fixed segmentation fault in SSL_check_chain() (CVE-2020-1967) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/NOTES.ANDROID nodejs-mozilla-12.22.12/deps/openssl/openssl/NOTES.ANDROID --- nodejs-mozilla-12.18.1/deps/openssl/openssl/NOTES.ANDROID 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/NOTES.ANDROID 2022-04-05 07:17:00.000000000 +0000 @@ -6,8 +6,8 @@ ------------------- Beside basic tools like perl and make you'll need to download the Android - NDK. It's available for Linux, Mac OS X and Windows, but only Linux - version was actually tested. There is no reason to believe that Mac OS X + NDK. It's available for Linux, macOS and Windows, but only Linux + version was actually tested. There is no reason to believe that macOS wouldn't work. And as for Windows, it's unclear which "shell" would be suitable, MSYS2 might have best chances. NDK version should play lesser role, the goal is to support a range of most recent versions. diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/NOTES.PERL nodejs-mozilla-12.22.12/deps/openssl/openssl/NOTES.PERL --- nodejs-mozilla-12.18.1/deps/openssl/openssl/NOTES.PERL 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/NOTES.PERL 2022-04-05 07:17:00.000000000 +0000 @@ -109,7 +109,7 @@ $ cpan -f -i Text::Template - Note: on VMS, you must quote any argument that contains upper case + Note: on VMS, you must quote any argument that contains uppercase characters, so the lines above would be: $ cpan -i "Text::Template" diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/NOTES.VMS nodejs-mozilla-12.22.12/deps/openssl/openssl/NOTES.VMS --- nodejs-mozilla-12.18.1/deps/openssl/openssl/NOTES.VMS 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/NOTES.VMS 2022-04-05 07:17:00.000000000 +0000 @@ -18,7 +18,7 @@ An ANSI C compiled is needed among other things. This means that VAX C is not and will not be supported. - We have only tested with DEC C (a.k.a HP VMS C / VSI C) and require + We have only tested with DEC C (aka HP VMS C / VSI C) and require version 7.1 or later. Compiling with a different ANSI C compiler may require some work. @@ -90,9 +90,9 @@ Unix mount point. The easiest way to check if everything got through as it should is to - check for one of the following files: + check that this file exists: - [.crypto]opensslconf^.h.in + [.include.openssl]opensslconf^.h.in The best way to get a correct distribution is to download the gzipped tar file from ftp://ftp.openssl.org/source/, use GZIP -d to uncompress @@ -105,3 +105,11 @@ Should you need it, you can find UnZip for VMS here: http://www.info-zip.org/UnZip.html + + + How the value of 'arch' is determined + ------------------------------------- + + 'arch' is mentioned in INSTALL. It's value is determined like this: + + arch = f$edit( f$getsyi( "arch_name"), "upcase") diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/NOTES.WIN nodejs-mozilla-12.22.12/deps/openssl/openssl/NOTES.WIN --- nodejs-mozilla-12.18.1/deps/openssl/openssl/NOTES.WIN 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/NOTES.WIN 2022-04-05 07:17:00.000000000 +0000 @@ -12,11 +12,11 @@ and require --cross-compile-prefix option. While on MSYS[2] it's solved rather by placing gcc that produces "MinGW binary" code 1st on $PATH. This is customarily source of confusion. "Hosted" applications "live" in - emulated file system name space with POSIX-y root, mount points, /dev + emulated filesystem name space with POSIX-y root, mount points, /dev and even /proc. Confusion is intensified by the fact that MSYS2 shell (or rather emulated execve(2) call) examines the binary it's about to start, and if it's found *not* to be linked with MSYS2 POSIX-y thing, - command line arguments that look like file names get translated from + command line arguments that look like filenames get translated from emulated name space to "native". For example '/c/some/where' becomes 'c:\some\where', '/dev/null' - 'nul'. This creates an illusion that there is no difference between MSYS2 shell and "MinGW binary", but @@ -26,7 +26,7 @@ it's referred to in quotes here, as "MinGW binary", it's just as "native" as it can get.) - Visual C++ builds, a.k.a. VC-* + Visual C++ builds, aka VC-* ============================== Requirement details @@ -47,7 +47,7 @@ the other hand oldest one is known not to work. Everything between falls into best-effort category. - - Netwide Assembler, a.k.a. NASM, available from https://www.nasm.us, + - Netwide Assembler, aka NASM, available from https://www.nasm.us, is required. Note that NASM is the only supported assembler. Even though Microsoft provided assembler is NOT supported, contemporary 64-bit version is exercised through continuous integration of @@ -62,8 +62,8 @@ For VC-WIN32, the following defaults are use: - PREFIX: %ProgramFiles(86)%\OpenSSL - OPENSSLDIR: %CommonProgramFiles(86)%\SSL + PREFIX: %ProgramFiles(x86)%\OpenSSL + OPENSSLDIR: %CommonProgramFiles(x86)%\SSL For VC-WIN64, the following defaults are use: @@ -132,7 +132,7 @@ If you link with static OpenSSL libraries then you're expected to additionally link your application with WS2_32.LIB, GDI32.LIB, ADVAPI32.LIB, CRYPT32.LIB and USER32.LIB. Those developing - non-interactive service applications might feel concerned about + noninteractive service applications might feel concerned about linking with GDI32.LIB and USER32.LIB, as they are justly associated with interactive desktop, which is not available to service processes. The toolkit is designed to detect in which context it's diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/README nodejs-mozilla-12.22.12/deps/openssl/openssl/README --- nodejs-mozilla-12.18.1/deps/openssl/openssl/README 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/README 2022-04-05 07:17:00.000000000 +0000 @@ -1,7 +1,7 @@ - OpenSSL 1.1.1g 21 Apr 2020 + OpenSSL 1.1.1n 15 Mar 2022 - Copyright (c) 1998-2020 The OpenSSL Project + Copyright (c) 1998-2021 The OpenSSL Project Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson All rights reserved. diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/bio_ssl.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/bio_ssl.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/bio_ssl.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/bio_ssl.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -76,13 +76,12 @@ if (a == NULL) return 0; bs = BIO_get_data(a); - if (bs->ssl != NULL) - SSL_shutdown(bs->ssl); if (BIO_get_shutdown(a)) { + if (bs->ssl != NULL) + SSL_shutdown(bs->ssl); if (BIO_get_init(a)) SSL_free(bs->ssl); - /* Clear all flags */ - BIO_clear_flags(a, ~0); + BIO_clear_flags(a, ~0); /* Clear all flags */ BIO_set_init(a, 0); } OPENSSL_free(bs); @@ -284,6 +283,7 @@ ssl_free(b); if (!ssl_new(b)) return 0; + bs = BIO_get_data(b); } BIO_set_shutdown(b, num); ssl = (SSL *)ptr; @@ -450,6 +450,7 @@ goto err; return ret; err: + BIO_free(ssl); BIO_free(con); #endif return NULL; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/d1_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/d1_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/d1_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/d1_lib.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -142,10 +142,11 @@ ssl3_free(s); - dtls1_clear_queues(s); - - pqueue_free(s->d1->buffered_messages); - pqueue_free(s->d1->sent_messages); + if (s->d1 != NULL) { + dtls1_clear_queues(s); + pqueue_free(s->d1->buffered_messages); + pqueue_free(s->d1->sent_messages); + } OPENSSL_free(s->d1); s->d1 = NULL; @@ -341,12 +342,11 @@ return 1; } -void dtls1_double_timeout(SSL *s) +static void dtls1_double_timeout(SSL *s) { s->d1->timeout_duration_us *= 2; if (s->d1->timeout_duration_us > 60000000) s->d1->timeout_duration_us = 60000000; - dtls1_start_timer(s); } void dtls1_stop_timer(SSL *s) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/record/rec_layer_d1.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/record/rec_layer_d1.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/record/rec_layer_d1.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/record/rec_layer_d1.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -46,6 +46,9 @@ void DTLS_RECORD_LAYER_free(RECORD_LAYER *rl) { + if (rl->d == NULL) + return; + DTLS_RECORD_LAYER_clear(rl); pqueue_free(rl->d->unprocessed_rcds.q); pqueue_free(rl->d->processed_rcds.q); @@ -808,8 +811,8 @@ wb = &s->rlayer.wbuf[0]; /* - * first check if there is a SSL3_BUFFER still being written out. This - * will happen with non blocking IO + * DTLS writes whole datagrams, so there can't be anything left in + * the buffer. */ if (!ossl_assert(SSL3_BUFFER_get_left(wb) == 0)) { SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DO_DTLS1_WRITE, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/record/rec_layer_s3.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/record/rec_layer_s3.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/record/rec_layer_s3.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/record/rec_layer_s3.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -172,9 +172,9 @@ /* * If extend == 0, obtain new n-byte packet; if extend == 1, increase * packet by another n bytes. The packet will be in the sub-array of - * s->s3->rbuf.buf specified by s->packet and s->packet_length. (If - * s->rlayer.read_ahead is set, 'max' bytes may be stored in rbuf [plus - * s->packet_length bytes if extend == 1].) + * s->rlayer.rbuf.buf specified by s->rlayer.packet and + * s->rlayer.packet_length. (If s->rlayer.read_ahead is set, 'max' bytes may + * be stored in rbuf [plus s->rlayer.packet_length bytes if extend == 1].) * if clearold == 1, move the packet to the start of the buffer; if * clearold == 0 then leave any old packets where they were */ diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/record/ssl3_buffer.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/record/ssl3_buffer.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/record/ssl3_buffer.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/record/ssl3_buffer.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -74,7 +74,6 @@ b->len = len; } - RECORD_LAYER_set_packet(&s->rlayer, &(b->buf[0])); return 1; } @@ -94,7 +93,7 @@ headerlen = SSL3_RT_HEADER_LENGTH; #if defined(SSL3_ALIGN_PAYLOAD) && SSL3_ALIGN_PAYLOAD!=0 - align = (-SSL3_RT_HEADER_LENGTH) & (SSL3_ALIGN_PAYLOAD - 1); + align = SSL3_ALIGN_PAYLOAD - 1; #endif len = ssl_get_max_send_fragment(s) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/record/ssl3_record.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/record/ssl3_record.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/record/ssl3_record.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/record/ssl3_record.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -405,7 +405,7 @@ more = thisrr->length; } if (more > 0) { - /* now s->packet_length == SSL3_RT_HEADER_LENGTH */ + /* now s->rlayer.packet_length == SSL3_RT_HEADER_LENGTH */ rret = ssl3_read_n(s, more, more, 1, 0, &n); if (rret <= 0) @@ -416,9 +416,9 @@ RECORD_LAYER_set_rstate(&s->rlayer, SSL_ST_READ_HEADER); /* - * At this point, s->packet_length == SSL3_RT_HEADER_LENGTH - * + thisrr->length, or s->packet_length == SSL2_RT_HEADER_LENGTH - * + thisrr->length and we have that many bytes in s->packet + * At this point, s->rlayer.packet_length == SSL3_RT_HEADER_LENGTH + * + thisrr->length, or s->rlayer.packet_length == SSL2_RT_HEADER_LENGTH + * + thisrr->length and we have that many bytes in s->rlayer.packet */ if (thisrr->rec_version == SSL2_VERSION) { thisrr->input = @@ -429,11 +429,11 @@ } /* - * ok, we can now read from 's->packet' data into 'thisrr' thisrr->input - * points at thisrr->length bytes, which need to be copied into - * thisrr->data by either the decryption or by the decompression When - * the data is 'copied' into the thisrr->data buffer, thisrr->input will - * be pointed at the new buffer + * ok, we can now read from 's->rlayer.packet' data into 'thisrr'. + * thisrr->input points at thisrr->length bytes, which need to be copied + * into thisrr->data by either the decryption or by the decompression. + * When the data is 'copied' into the thisrr->data buffer, + * thisrr->input will be updated to point at the new buffer */ /* @@ -1039,7 +1039,7 @@ if (SSL_IS_DTLS(s)) { /* DTLS does not support pipelining */ - unsigned char dtlsseq[9], *p = dtlsseq; + unsigned char dtlsseq[8], *p = dtlsseq; s2n(sending ? DTLS_RECORD_LAYER_get_w_epoch(&s->rlayer) : DTLS_RECORD_LAYER_get_r_epoch(&s->rlayer), p); @@ -1616,16 +1616,16 @@ sess = s->session; /* - * At this point, s->packet_length == SSL3_RT_HEADER_LNGTH + rr->length, - * and we have that many bytes in s->packet + * At this point, s->rlayer.packet_length == SSL3_RT_HEADER_LNGTH + rr->length, + * and we have that many bytes in s->rlayer.packet */ rr->input = &(RECORD_LAYER_get_packet(&s->rlayer)[DTLS1_RT_HEADER_LENGTH]); /* - * ok, we can now read from 's->packet' data into 'rr' rr->input points - * at rr->length bytes, which need to be copied into rr->data by either - * the decryption or by the decompression When the data is 'copied' into - * the rr->data buffer, rr->input will be pointed at the new buffer + * ok, we can now read from 's->rlayer.packet' data into 'rr'. rr->input + * points at rr->length bytes, which need to be copied into rr->data by + * either the decryption or by the decompression. When the data is 'copied' + * into the rr->data buffer, rr->input will be pointed at the new buffer */ /* @@ -1947,7 +1947,7 @@ if (rr->length > RECORD_LAYER_get_packet_length(&s->rlayer) - DTLS1_RT_HEADER_LENGTH) { - /* now s->packet_length == DTLS1_RT_HEADER_LENGTH */ + /* now s->rlayer.packet_length == DTLS1_RT_HEADER_LENGTH */ more = rr->length; rret = ssl3_read_n(s, more, more, 1, 1, &n); /* this packet contained a partial record, dump it */ @@ -1963,7 +1963,7 @@ } /* - * now n == rr->length, and s->packet_length == + * now n == rr->length, and s->rlayer.packet_length == * DTLS1_RT_HEADER_LENGTH + rr->length */ } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/s3_cbc.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/s3_cbc.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/s3_cbc.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/s3_cbc.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2012-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -128,7 +128,7 @@ int ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned char *md_out, size_t *md_out_size, - const unsigned char header[13], + const unsigned char *header, const unsigned char *data, size_t data_plus_mac_size, size_t data_plus_mac_plus_padding_size, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/s3_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/s3_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/s3_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/s3_lib.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -2171,7 +2171,7 @@ TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256, TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256, TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256, - SSL_kEDH, + SSL_kDHE, SSL_aDSS, SSL_CAMELLIA128, SSL_SHA256, @@ -2187,7 +2187,7 @@ TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, - SSL_kEDH, + SSL_kDHE, SSL_aRSA, SSL_CAMELLIA128, SSL_SHA256, @@ -2203,7 +2203,7 @@ TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256, TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256, TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256, - SSL_kEDH, + SSL_kDHE, SSL_aNULL, SSL_CAMELLIA128, SSL_SHA256, @@ -2235,7 +2235,7 @@ TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256, TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256, TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256, - SSL_kEDH, + SSL_kDHE, SSL_aDSS, SSL_CAMELLIA256, SSL_SHA256, @@ -2251,7 +2251,7 @@ TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, - SSL_kEDH, + SSL_kDHE, SSL_aRSA, SSL_CAMELLIA256, SSL_SHA256, @@ -2267,7 +2267,7 @@ TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256, TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256, TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256, - SSL_kEDH, + SSL_kDHE, SSL_aNULL, SSL_CAMELLIA256, SSL_SHA256, @@ -4072,9 +4072,10 @@ const SSL_CIPHER *ssl3_get_cipher_by_std_name(const char *stdname) { - SSL_CIPHER *c = NULL, *tbl; - SSL_CIPHER *alltabs[] = {tls13_ciphers, ssl3_ciphers}; - size_t i, j, tblsize[] = {TLS13_NUM_CIPHERS, SSL3_NUM_CIPHERS}; + SSL_CIPHER *tbl; + SSL_CIPHER *alltabs[] = {tls13_ciphers, ssl3_ciphers, ssl3_scsvs}; + size_t i, j, tblsize[] = {TLS13_NUM_CIPHERS, SSL3_NUM_CIPHERS, + SSL3_NUM_SCSVS}; /* this is not efficient, necessary to optimize this? */ for (j = 0; j < OSSL_NELEM(alltabs); j++) { @@ -4082,21 +4083,11 @@ if (tbl->stdname == NULL) continue; if (strcmp(stdname, tbl->stdname) == 0) { - c = tbl; - break; + return tbl; } } } - if (c == NULL) { - tbl = ssl3_scsvs; - for (i = 0; i < SSL3_NUM_SCSVS; i++, tbl++) { - if (strcmp(stdname, tbl->stdname) == 0) { - c = tbl; - break; - } - } - } - return c; + return NULL; } /* @@ -4638,6 +4629,7 @@ OPENSSL_clear_free(s->s3->tmp.psk, psklen); s->s3->tmp.psk = NULL; + s->s3->tmp.psklen = 0; if (!s->method->ssl3_enc->generate_master_secret(s, s->session->master_key, pskpms, pskpmslen, &s->session->master_key_length)) { @@ -4667,8 +4659,10 @@ else OPENSSL_cleanse(pms, pmslen); } - if (s->server == 0) + if (s->server == 0) { s->s3->tmp.pms = NULL; + s->s3->tmp.pmslen = 0; + } return ret; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/s3_msg.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/s3_msg.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/s3_msg.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/s3_msg.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -48,6 +48,8 @@ * protocol_version alerts */ if (desc < 0) return -1; + if (s->shutdown & SSL_SENT_SHUTDOWN && desc != SSL_AD_CLOSE_NOTIFY) + return -1; /* If a fatal one, remove from cache */ if ((level == SSL3_AL_FATAL) && (s->session != NULL)) SSL_CTX_remove_session(s->session_ctx, s->session); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_asn1.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_asn1.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_asn1.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_asn1.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2005 Nokia. All rights reserved. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -225,7 +225,7 @@ static int ssl_session_memcpy(unsigned char *dst, size_t *pdstlen, ASN1_OCTET_STRING *src, size_t maxlen) { - if (src == NULL) { + if (src == NULL || src->length == 0) { *pdstlen = 0; return 1; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_cert.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_cert.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_cert.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_cert.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -876,18 +876,36 @@ return 1; } -static int ssl_security_default_callback(const SSL *s, const SSL_CTX *ctx, - int op, int bits, int nid, void *other, - void *ex) +int ssl_get_security_level_bits(const SSL *s, const SSL_CTX *ctx, int *levelp) { - int level, minbits; - static const int minbits_table[5] = { 80, 112, 128, 192, 256 }; - if (ctx) + int level; + static const int minbits_table[5 + 1] = { 0, 80, 112, 128, 192, 256 }; + + if (ctx != NULL) level = SSL_CTX_get_security_level(ctx); else level = SSL_get_security_level(s); - if (level <= 0) { + if (level > 5) + level = 5; + else if (level < 0) + level = 0; + + if (levelp != NULL) + *levelp = level; + + return minbits_table[level]; +} + +static int ssl_security_default_callback(const SSL *s, const SSL_CTX *ctx, + int op, int bits, int nid, void *other, + void *ex) +{ + int level, minbits, pfs_mask; + + minbits = ssl_get_security_level_bits(s, ctx, &level); + + if (level == 0) { /* * No EDH keys weaker than 1024-bits even at level 0, otherwise, * anything goes. @@ -896,9 +914,6 @@ return 0; return 1; } - if (level > 5) - level = 5; - minbits = minbits_table[level - 1]; switch (op) { case SSL_SECOP_CIPHER_SUPPORTED: case SSL_SECOP_CIPHER_SHARED: @@ -921,8 +936,9 @@ if (level >= 2 && c->algorithm_enc == SSL_RC4) return 0; /* Level 3: forward secure ciphersuites only */ + pfs_mask = SSL_kDHE | SSL_kECDHE | SSL_kDHEPSK | SSL_kECDHEPSK; if (level >= 3 && c->min_tls != TLS1_3_VERSION && - !(c->algorithm_mkey & (SSL_kEDH | SSL_kEECDH))) + !(c->algorithm_mkey & pfs_mask)) return 0; break; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_ciph.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_ciph.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_ciph.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_ciph.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -1601,6 +1601,7 @@ for (i = 0; i < sk_SSL_CIPHER_num(tls13_ciphersuites); i++) { if (!sk_SSL_CIPHER_push(cipherstack, sk_SSL_CIPHER_value(tls13_ciphersuites, i))) { + OPENSSL_free(co_list); sk_SSL_CIPHER_free(cipherstack); return NULL; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_conf.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_conf.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_conf.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_conf.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -305,6 +305,13 @@ const char *name; int version; }; + /* + * Note: To avoid breaking previously valid configurations, we must retain + * legacy entries in this table even if the underlying protocol is no + * longer supported. This also means that the constants SSL3_VERSION, ... + * need to be retained indefinitely. This table can only grow, never + * shrink. + */ static const struct protocol_versions versions[] = { {"None", 0}, {"SSLv3", SSL3_VERSION}, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_err.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_err.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_err.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_err.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -85,6 +85,7 @@ {ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_KEY_SHARE, 0), "final_key_share"}, {ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_MAXFRAGMENTLEN, 0), "final_maxfragmentlen"}, + {ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_PSK, 0), "final_psk"}, {ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_RENEGOTIATE, 0), "final_renegotiate"}, {ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_SERVER_NAME, 0), "final_server_name"}, {ERR_PACK(ERR_LIB_SSL, SSL_F_FINAL_SIG_ALGS, 0), "final_sig_algs"}, @@ -948,6 +949,8 @@ "missing ecdsa signing cert"}, {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_FATAL), "missing fatal"}, {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_PARAMETERS), "missing parameters"}, + {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_PSK_KEX_MODES_EXTENSION), + "missing psk kex modes extension"}, {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_CERTIFICATE), "missing rsa certificate"}, {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_MISSING_RSA_ENCRYPTING_CERT), @@ -1018,6 +1021,8 @@ {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NULL_SSL_CTX), "null ssl ctx"}, {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_NULL_SSL_METHOD_PASSED), "null ssl method passed"}, + {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OCSP_CALLBACK_FAILURE), + "ocsp callback failure"}, {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED), "old session cipher not returned"}, {ERR_PACK(ERR_LIB_SSL, 0, SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED), diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_lib.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -779,8 +779,10 @@ s->ext.ecpointformats = OPENSSL_memdup(ctx->ext.ecpointformats, ctx->ext.ecpointformats_len); - if (!s->ext.ecpointformats) + if (!s->ext.ecpointformats) { + s->ext.ecpointformats_len = 0; goto err; + } s->ext.ecpointformats_len = ctx->ext.ecpointformats_len; } @@ -789,8 +791,10 @@ OPENSSL_memdup(ctx->ext.supportedgroups, ctx->ext.supportedgroups_len * sizeof(*ctx->ext.supportedgroups)); - if (!s->ext.supportedgroups) + if (!s->ext.supportedgroups) { + s->ext.supportedgroups_len = 0; goto err; + } s->ext.supportedgroups_len = ctx->ext.supportedgroups_len; } #endif @@ -800,8 +804,10 @@ if (s->ctx->ext.alpn) { s->ext.alpn = OPENSSL_malloc(s->ctx->ext.alpn_len); - if (s->ext.alpn == NULL) + if (s->ext.alpn == NULL) { + s->ext.alpn_len = 0; goto err; + } memcpy(s->ext.alpn, s->ctx->ext.alpn, s->ctx->ext.alpn_len); s->ext.alpn_len = s->ctx->ext.alpn_len; } @@ -1200,6 +1206,8 @@ OPENSSL_free(s->ext.ocsp.resp); OPENSSL_free(s->ext.alpn); OPENSSL_free(s->ext.tls13_cookie); + if (s->clienthello != NULL) + OPENSSL_free(s->clienthello->pre_proc_exts); OPENSSL_free(s->clienthello); OPENSSL_free(s->pha_context); EVP_MD_CTX_free(s->pha_dgst); @@ -1676,6 +1684,8 @@ if (s->waitctx == NULL) return -1; } + + s->rwstate = SSL_NOTHING; switch (ASYNC_start_job(&s->job, s->waitctx, &ret, func, args, sizeof(struct ssl_async_args))) { case ASYNC_ERR: @@ -2111,6 +2121,11 @@ return 0; } + if (RECORD_LAYER_write_pending(&s->rlayer)) { + SSLerr(SSL_F_SSL_KEY_UPDATE, SSL_R_BAD_WRITE_RETRY); + return 0; + } + ossl_statem_set_in_init(s, 1); s->key_update = updatetype; return 1; @@ -2630,7 +2645,7 @@ * - if we are before or during/after the handshake, * - if a resumption or normal handshake is being attempted/has occurred * - whether we have negotiated TLSv1.2 (or below) or TLSv1.3 - * + * * Note that only the host_name type is defined (RFC 3546). */ const char *SSL_get_servername(const SSL *s, const int type) @@ -2676,7 +2691,7 @@ * - Otherwise it returns NULL * * During/after the handshake (TLSv1.2 or below resumption occurred): - * - If the session from the orignal handshake had a servername accepted + * - If the session from the original handshake had a servername accepted * by the server then it will return that servername. * - Otherwise it returns the servername set via * SSL_set_tlsext_host_name() (or NULL if it was not called). @@ -2821,6 +2836,19 @@ } #endif +static int alpn_value_ok(const unsigned char *protos, unsigned int protos_len) +{ + unsigned int idx; + + if (protos_len < 2 || protos == NULL) + return 0; + + for (idx = 0; idx < protos_len; idx += protos[idx] + 1) { + if (protos[idx] == 0) + return 0; + } + return idx == protos_len; +} /* * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|. * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit @@ -2829,12 +2857,25 @@ int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos, unsigned int protos_len) { - OPENSSL_free(ctx->ext.alpn); - ctx->ext.alpn = OPENSSL_memdup(protos, protos_len); - if (ctx->ext.alpn == NULL) { + unsigned char *alpn; + + if (protos_len == 0 || protos == NULL) { + OPENSSL_free(ctx->ext.alpn); + ctx->ext.alpn = NULL; + ctx->ext.alpn_len = 0; + return 0; + } + /* Not valid per RFC */ + if (!alpn_value_ok(protos, protos_len)) + return 1; + + alpn = OPENSSL_memdup(protos, protos_len); + if (alpn == NULL) { SSLerr(SSL_F_SSL_CTX_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE); return 1; } + OPENSSL_free(ctx->ext.alpn); + ctx->ext.alpn = alpn; ctx->ext.alpn_len = protos_len; return 0; @@ -2848,12 +2889,25 @@ int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos, unsigned int protos_len) { - OPENSSL_free(ssl->ext.alpn); - ssl->ext.alpn = OPENSSL_memdup(protos, protos_len); - if (ssl->ext.alpn == NULL) { + unsigned char *alpn; + + if (protos_len == 0 || protos == NULL) { + OPENSSL_free(ssl->ext.alpn); + ssl->ext.alpn = NULL; + ssl->ext.alpn_len = 0; + return 0; + } + /* Not valid per RFC */ + if (!alpn_value_ok(protos, protos_len)) + return 1; + + alpn = OPENSSL_memdup(protos, protos_len); + if (alpn == NULL) { SSLerr(SSL_F_SSL_SET_ALPN_PROTOS, ERR_R_MALLOC_FAILURE); return 1; } + OPENSSL_free(ssl->ext.alpn); + ssl->ext.alpn = alpn; ssl->ext.alpn_len = protos_len; return 0; @@ -2895,7 +2949,8 @@ const unsigned char *context, size_t contextlen, int use_context) { - if (s->version < TLS1_VERSION && s->version != DTLS1_BAD_VER) + if (s->session == NULL + || (s->version < TLS1_VERSION && s->version != DTLS1_BAD_VER)) return -1; return s->method->ssl3_enc->export_keying_material(s, out, olen, label, @@ -3824,6 +3879,8 @@ goto err; ret->version = s->version; ret->options = s->options; + ret->min_proto_version = s->min_proto_version; + ret->max_proto_version = s->max_proto_version; ret->mode = s->mode; SSL_set_max_cert_list(ret, SSL_get_max_cert_list(s)); SSL_set_read_ahead(ret, SSL_get_read_ahead(s)); @@ -3839,21 +3896,6 @@ if (!CRYPTO_dup_ex_data(CRYPTO_EX_INDEX_SSL, &ret->ex_data, &s->ex_data)) goto err; - /* setup rbio, and wbio */ - if (s->rbio != NULL) { - if (!BIO_dup_state(s->rbio, (char *)&ret->rbio)) - goto err; - } - if (s->wbio != NULL) { - if (s->wbio != s->rbio) { - if (!BIO_dup_state(s->wbio, (char *)&ret->wbio)) - goto err; - } else { - BIO_up_ref(ret->rbio); - ret->wbio = ret->rbio; - } - } - ret->server = s->server; if (s->handshake_func) { if (s->server) @@ -4522,8 +4564,11 @@ } ctx = EVP_MD_CTX_new(); - if (ctx == NULL) + if (ctx == NULL) { + SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_SSL_HANDSHAKE_HASH, + ERR_R_INTERNAL_ERROR); goto err; + } if (!EVP_MD_CTX_copy_ex(ctx, hdgst) || EVP_DigestFinal_ex(ctx, out, NULL) <= 0) { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_local.h nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_local.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_local.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_local.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -537,7 +537,6 @@ int not_resumable; /* This is the cert and type for the other end. */ X509 *peer; - int peer_type; /* Certificate chain peer sent. */ STACK_OF(X509) *peer_chain; /* @@ -2306,6 +2305,7 @@ __owur int ssl_security(const SSL *s, int op, int bits, int nid, void *other); __owur int ssl_ctx_security(const SSL_CTX *ctx, int op, int bits, int nid, void *other); +int ssl_get_security_level_bits(const SSL *s, const SSL_CTX *ctx, int *levelp); __owur int ssl_cert_lookup_by_nid(int nid, size_t *pidx); __owur const SSL_CERT_LOOKUP *ssl_cert_lookup_by_pkey(const EVP_PKEY *pk, @@ -2427,7 +2427,6 @@ void dtls1_start_timer(SSL *s); void dtls1_stop_timer(SSL *s); __owur int dtls1_is_timer_expired(SSL *s); -void dtls1_double_timeout(SSL *s); __owur int dtls_raw_hello_verify_request(WPACKET *pkt, unsigned char *cookie, size_t cookie_len); __owur size_t dtls1_min_mtu(SSL *s); @@ -2623,7 +2622,7 @@ __owur int ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned char *md_out, size_t *md_out_size, - const unsigned char header[13], + const unsigned char *header, const unsigned char *data, size_t data_plus_mac_size, size_t data_plus_mac_plus_padding_size, diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_rsa.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_rsa.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_rsa.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_rsa.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -148,15 +148,6 @@ EVP_PKEY_copy_parameters(pktmp, pkey); ERR_clear_error(); -#ifndef OPENSSL_NO_RSA - /* - * Don't check the public/private key, this is mostly for smart - * cards. - */ - if (EVP_PKEY_id(pkey) == EVP_PKEY_RSA - && RSA_flags(EVP_PKEY_get0_RSA(pkey)) & RSA_METHOD_FLAG_NO_CHECK) ; - else -#endif if (!X509_check_private_key(c->pkeys[i].x509, pkey)) { X509_free(c->pkeys[i].x509); c->pkeys[i].x509 = NULL; @@ -342,16 +333,6 @@ EVP_PKEY_copy_parameters(pkey, c->pkeys[i].privatekey); ERR_clear_error(); -#ifndef OPENSSL_NO_RSA - /* - * Don't check the public/private key, this is mostly for smart - * cards. - */ - if (EVP_PKEY_id(c->pkeys[i].privatekey) == EVP_PKEY_RSA - && RSA_flags(EVP_PKEY_get0_RSA(c->pkeys[i].privatekey)) & - RSA_METHOD_FLAG_NO_CHECK) ; - else -#endif /* OPENSSL_NO_RSA */ if (!X509_check_private_key(x, c->pkeys[i].privatekey)) { /* * don't fail for a cert/key mismatch, just free current private @@ -1082,13 +1063,6 @@ EVP_PKEY_copy_parameters(pubkey, privatekey); } /* else both have parameters */ - /* Copied from ssl_set_cert/pkey */ -#ifndef OPENSSL_NO_RSA - if ((EVP_PKEY_id(privatekey) == EVP_PKEY_RSA) && - ((RSA_flags(EVP_PKEY_get0_RSA(privatekey)) & RSA_METHOD_FLAG_NO_CHECK))) - /* no-op */ ; - else -#endif /* check that key <-> cert match */ if (EVP_PKEY_cmp(pubkey, privatekey) != 1) { SSLerr(SSL_F_SSL_SET_CERT_AND_KEY, SSL_R_PRIVATE_KEY_MISMATCH); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_sess.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_sess.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/ssl_sess.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/ssl_sess.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2005 Nokia. All rights reserved. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -107,7 +107,7 @@ { SSL_SESSION *dest; - dest = OPENSSL_malloc(sizeof(*src)); + dest = OPENSSL_malloc(sizeof(*dest)); if (dest == NULL) { goto err; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/extensions.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/extensions.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/extensions.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/extensions.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -18,6 +18,7 @@ static int init_server_name(SSL *s, unsigned int context); static int final_server_name(SSL *s, unsigned int context, int sent); #ifndef OPENSSL_NO_EC +static int init_ec_point_formats(SSL *s, unsigned int context); static int final_ec_pt_formats(SSL *s, unsigned int context, int sent); #endif static int init_session_ticket(SSL *s, unsigned int context); @@ -56,6 +57,7 @@ static int final_early_data(SSL *s, unsigned int context, int sent); static int final_maxfragmentlen(SSL *s, unsigned int context, int sent); static int init_post_handshake_auth(SSL *s, unsigned int context); +static int final_psk(SSL *s, unsigned int context, int sent); /* Structure to define a built-in extension */ typedef struct extensions_definition_st { @@ -158,7 +160,7 @@ TLSEXT_TYPE_ec_point_formats, SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_2_SERVER_HELLO | SSL_EXT_TLS1_2_AND_BELOW_ONLY, - NULL, tls_parse_ctos_ec_pt_formats, tls_parse_stoc_ec_pt_formats, + init_ec_point_formats, tls_parse_ctos_ec_pt_formats, tls_parse_stoc_ec_pt_formats, tls_construct_stoc_ec_pt_formats, tls_construct_ctos_ec_pt_formats, final_ec_pt_formats }, @@ -336,6 +338,8 @@ tls_construct_stoc_key_share, tls_construct_ctos_key_share, final_key_share }, +#else + INVALID_EXTENSION, #endif { /* Must be after key_share */ @@ -387,7 +391,7 @@ SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_SERVER_HELLO | SSL_EXT_TLS_IMPLEMENTATION_ONLY | SSL_EXT_TLS1_3_ONLY, NULL, tls_parse_ctos_psk, tls_parse_stoc_psk, tls_construct_stoc_psk, - tls_construct_ctos_psk, NULL + tls_construct_ctos_psk, final_psk } }; @@ -966,7 +970,8 @@ * context, to avoid the confusing situation of having sess_accept_good * exceed sess_accept (zero) for the new context. */ - if (SSL_IS_FIRST_HANDSHAKE(s) && s->ctx != s->session_ctx) { + if (SSL_IS_FIRST_HANDSHAKE(s) && s->ctx != s->session_ctx + && s->hello_retry_request == SSL_HRR_NONE) { tsan_counter(&s->ctx->stats.sess_accept); tsan_decr(&s->session_ctx->stats.sess_accept); } @@ -1023,6 +1028,15 @@ } #ifndef OPENSSL_NO_EC +static int init_ec_point_formats(SSL *s, unsigned int context) +{ + OPENSSL_free(s->ext.peer_ecpointformats); + s->ext.peer_ecpointformats = NULL; + s->ext.peer_ecpointformats_len = 0; + + return 1; +} + static int final_ec_pt_formats(SSL *s, unsigned int context, int sent) { unsigned long alg_k, alg_a; @@ -1136,6 +1150,7 @@ /* Clear any signature algorithms extension received */ OPENSSL_free(s->s3->tmp.peer_sigalgs); s->s3->tmp.peer_sigalgs = NULL; + s->s3->tmp.peer_sigalgslen = 0; return 1; } @@ -1145,6 +1160,7 @@ /* Clear any signature algorithms extension received */ OPENSSL_free(s->s3->tmp.peer_cert_sigalgs); s->s3->tmp.peer_cert_sigalgs = NULL; + s->s3->tmp.peer_cert_sigalgslen = 0; return 1; } @@ -1168,14 +1184,26 @@ static int init_ems(SSL *s, unsigned int context) { - if (!s->server) + if (s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) { s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS; + s->s3->flags |= TLS1_FLAGS_REQUIRED_EXTMS; + } return 1; } static int final_ems(SSL *s, unsigned int context, int sent) { + /* + * Check extended master secret extension is not dropped on + * renegotiation. + */ + if (!(s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) + && (s->s3->flags & TLS1_FLAGS_REQUIRED_EXTMS)) { + SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_EMS, + SSL_R_INCONSISTENT_EXTMS); + return 0; + } if (!s->server && s->hit) { /* * Check extended master secret extension is consistent with @@ -1701,3 +1729,19 @@ return 1; } + +/* + * If clients offer "pre_shared_key" without a "psk_key_exchange_modes" + * extension, servers MUST abort the handshake. + */ +static int final_psk(SSL *s, unsigned int context, int sent) +{ + if (s->server && sent && s->clienthello != NULL + && !s->clienthello->pre_proc_exts[TLSEXT_IDX_psk_kex_modes].present) { + SSLfatal(s, TLS13_AD_MISSING_EXTENSION, SSL_F_FINAL_PSK, + SSL_R_MISSING_PSK_KEX_MODES_EXTENSION); + return 0; + } + + return 1; +} diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/extensions_clnt.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/extensions_clnt.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/extensions_clnt.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/extensions_clnt.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -816,6 +816,7 @@ OPENSSL_free(s->psksession_id); s->psksession_id = OPENSSL_memdup(id, idlen); if (s->psksession_id == NULL) { + s->psksession_id_len = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CTOS_EARLY_DATA, ERR_R_INTERNAL_ERROR); return EXT_RETURN_FAIL; @@ -1375,6 +1376,7 @@ OPENSSL_free(s->ext.peer_ecpointformats); s->ext.peer_ecpointformats = OPENSSL_malloc(ecpointformats_len); if (s->ext.peer_ecpointformats == NULL) { + s->ext.peer_ecpointformats_len = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_STOC_EC_PT_FORMATS, ERR_R_INTERNAL_ERROR); return 0; @@ -1492,8 +1494,13 @@ s->ext.scts_len = (uint16_t)size; if (size > 0) { s->ext.scts = OPENSSL_malloc(size); - if (s->ext.scts == NULL - || !PACKET_copy_bytes(pkt, s->ext.scts, size)) { + if (s->ext.scts == NULL) { + s->ext.scts_len = 0; + SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_STOC_SCT, + ERR_R_MALLOC_FAILURE); + return 0; + } + if (!PACKET_copy_bytes(pkt, s->ext.scts, size)) { SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_STOC_SCT, ERR_R_INTERNAL_ERROR); return 0; @@ -1592,6 +1599,7 @@ OPENSSL_free(s->ext.npn); s->ext.npn = OPENSSL_malloc(selected_len); if (s->ext.npn == NULL) { + s->ext.npn_len = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_STOC_NPN, ERR_R_INTERNAL_ERROR); return 0; @@ -1632,6 +1640,7 @@ OPENSSL_free(s->s3->alpn_selected); s->s3->alpn_selected = OPENSSL_malloc(len); if (s->s3->alpn_selected == NULL) { + s->s3->alpn_selected_len = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_STOC_ALPN, ERR_R_INTERNAL_ERROR); return 0; @@ -1663,6 +1672,7 @@ s->session->ext.alpn_selected = OPENSSL_memdup(s->s3->alpn_selected, s->s3->alpn_selected_len); if (s->session->ext.alpn_selected == NULL) { + s->session->ext.alpn_selected_len = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_STOC_ALPN, ERR_R_INTERNAL_ERROR); return 0; @@ -1731,7 +1741,9 @@ /* Ignore if inappropriate ciphersuite */ if (!(s->options & SSL_OP_NO_ENCRYPT_THEN_MAC) && s->s3->tmp.new_cipher->algorithm_mac != SSL_AEAD - && s->s3->tmp.new_cipher->algorithm_enc != SSL_RC4) + && s->s3->tmp.new_cipher->algorithm_enc != SSL_RC4 + && s->s3->tmp.new_cipher->algorithm_enc != SSL_eGOST2814789CNT + && s->s3->tmp.new_cipher->algorithm_enc != SSL_eGOST2814789CNT12) s->ext.use_etm = 1; return 1; @@ -1862,6 +1874,7 @@ if (skey == NULL || EVP_PKEY_copy_parameters(skey, ckey) <= 0) { SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_STOC_KEY_SHARE, ERR_R_MALLOC_FAILURE); + EVP_PKEY_free(skey); return 0; } if (!EVP_PKEY_set1_tls_encodedpoint(skey, PACKET_data(&encoded_pt), diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/extensions_cust.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/extensions_cust.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/extensions_cust.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/extensions_cust.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2014-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -146,11 +146,12 @@ } /* - * Extensions received in the ClientHello are marked with the - * SSL_EXT_FLAG_RECEIVED. This is so we know to add the equivalent - * extensions in the ServerHello/EncryptedExtensions message + * Extensions received in the ClientHello or CertificateRequest are marked + * with the SSL_EXT_FLAG_RECEIVED. This is so we know to add the equivalent + * extensions in the response messages */ - if ((context & SSL_EXT_CLIENT_HELLO) != 0) + if ((context & (SSL_EXT_CLIENT_HELLO | SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)) + != 0) meth->ext_flags |= SSL_EXT_FLAG_RECEIVED; /* If no parse function set return success */ @@ -192,7 +193,7 @@ | SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS | SSL_EXT_TLS1_3_CERTIFICATE | SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST)) != 0) { - /* Only send extensions present in ClientHello. */ + /* Only send extensions present in ClientHello/CertificateRequest */ if (!(meth->ext_flags & SSL_EXT_FLAG_RECEIVED)) continue; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/extensions_srvr.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/extensions_srvr.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/extensions_srvr.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/extensions_srvr.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -1151,7 +1151,7 @@ if (sesstmp == NULL) { SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_CTOS_PSK, ERR_R_INTERNAL_ERROR); - return 0; + goto err; } SSL_SESSION_free(sess); sess = sesstmp; @@ -1714,6 +1714,13 @@ } return EXT_RETURN_NOT_SENT; } + if (s->hit && (s->ext.psk_kex_mode & TLSEXT_KEX_MODE_FLAG_KE_DHE) == 0) { + /* + * PSK ('hit') and explicitly not doing DHE (if the client sent the + * DHE option we always take it); don't send key share. + */ + return EXT_RETURN_NOT_SENT; + } if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_key_share) || !WPACKET_start_sub_packet_u16(pkt) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/README nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/README --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/README 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/README 2022-04-05 07:17:01.000000000 +0000 @@ -55,7 +55,7 @@ | | | | ____________V_______V________ ________V______V_______________ | | | | - | statem_both.c | | statem_dtls.c | + | statem_lib.c | | statem_dtls.c | | | | | | Non core functions common | | Non core functions common to | | to both servers and clients | | both DTLS servers and clients | diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/statem_clnt.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/statem_clnt.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/statem_clnt.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/statem_clnt.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -1001,7 +1001,8 @@ return CCS_MAX_LENGTH; case TLS_ST_CR_SESSION_TICKET: - return SSL3_RT_MAX_PLAIN_LENGTH; + return (SSL_IS_TLS13(s)) ? SESSION_TICKET_MAX_LENGTH_TLS13 + : SESSION_TICKET_MAX_LENGTH_TLS12; case TLS_ST_CR_FINISHED: return FINISHED_MAX_LENGTH; @@ -1960,7 +1961,6 @@ goto err; } } - s->session->peer_type = certidx; X509_free(s->session->peer); X509_up_ref(x); @@ -2145,17 +2145,19 @@ } bnpub_key = NULL; - if (!ssl_security(s, SSL_SECOP_TMP_DH, DH_security_bits(dh), 0, dh)) { - SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_PROCESS_SKE_DHE, - SSL_R_DH_KEY_TOO_SMALL); - goto err; - } - if (EVP_PKEY_assign_DH(peer_tmp, dh) == 0) { SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_SKE_DHE, ERR_R_EVP_LIB); goto err; } + dh = NULL; + + if (!ssl_security(s, SSL_SECOP_TMP_DH, EVP_PKEY_security_bits(peer_tmp), + 0, peer_tmp)) { + SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_PROCESS_SKE_DHE, + SSL_R_DH_KEY_TOO_SMALL); + goto err; + } s->s3->peer_tmp = peer_tmp; @@ -2461,6 +2463,7 @@ s->s3->tmp.ctype_len = 0; OPENSSL_free(s->pha_context); s->pha_context = NULL; + s->pha_context_len = 0; if (!PACKET_get_length_prefixed_1(pkt, &reqctx) || !PACKET_memdup(&reqctx, &s->pha_context, &s->pha_context_len)) { @@ -2770,16 +2773,17 @@ } s->ext.ocsp.resp = OPENSSL_malloc(resplen); if (s->ext.ocsp.resp == NULL) { + s->ext.ocsp.resp_len = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CERT_STATUS_BODY, ERR_R_MALLOC_FAILURE); return 0; } + s->ext.ocsp.resp_len = resplen; if (!PACKET_copy_bytes(pkt, s->ext.ocsp.resp, resplen)) { SSLfatal(s, SSL_AD_DECODE_ERROR, SSL_F_TLS_PROCESS_CERT_STATUS_BODY, SSL_R_LENGTH_MISMATCH); return 0; } - s->ext.ocsp.resp_len = resplen; return 1; } @@ -2830,7 +2834,7 @@ if (ret < 0) { SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_INITIAL_SERVER_FLIGHT, - ERR_R_MALLOC_FAILURE); + SSL_R_OCSP_CALLBACK_FAILURE); return 0; } } @@ -2904,6 +2908,7 @@ if (psklen > PSK_MAX_PSK_LEN) { SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_TLS_CONSTRUCT_CKE_PSK_PREAMBLE, ERR_R_INTERNAL_ERROR); + psklen = PSK_MAX_PSK_LEN; /* Avoid overrunning the array on cleanse */ goto err; } else if (psklen == 0) { SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, @@ -3349,9 +3354,11 @@ err: OPENSSL_clear_free(s->s3->tmp.pms, s->s3->tmp.pmslen); s->s3->tmp.pms = NULL; + s->s3->tmp.pmslen = 0; #ifndef OPENSSL_NO_PSK OPENSSL_clear_free(s->s3->tmp.psk, s->s3->tmp.psklen); s->s3->tmp.psk = NULL; + s->s3->tmp.psklen = 0; #endif return 0; } @@ -3426,6 +3433,7 @@ err: OPENSSL_clear_free(pms, pmslen); s->s3->tmp.pms = NULL; + s->s3->tmp.pmslen = 0; return 0; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/statem_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/statem_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/statem_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/statem_lib.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * * Licensed under the OpenSSL license (the "License"). You may not use @@ -1341,6 +1341,7 @@ static const X509ERR2ALERT x509table[] = { {X509_V_ERR_APPLICATION_VERIFICATION, SSL_AD_HANDSHAKE_FAILURE}, {X509_V_ERR_CA_KEY_TOO_SMALL, SSL_AD_BAD_CERTIFICATE}, + {X509_V_ERR_EC_KEY_EXPLICIT_PARAMS, SSL_AD_BAD_CERTIFICATE}, {X509_V_ERR_CA_MD_TOO_WEAK, SSL_AD_BAD_CERTIFICATE}, {X509_V_ERR_CERT_CHAIN_TOO_LONG, SSL_AD_UNKNOWN_CA}, {X509_V_ERR_CERT_HAS_EXPIRED, SSL_AD_CERTIFICATE_EXPIRED}, @@ -1503,8 +1504,8 @@ /* * Only called by servers. Returns 1 if the server has a TLSv1.3 capable - * certificate type, or has PSK or a certificate callback configured. Otherwise - * returns 0. + * certificate type, or has PSK or a certificate callback configured, or has + * a servername callback configured. Otherwise returns 0. */ static int is_tls13_capable(const SSL *s) { @@ -1514,6 +1515,17 @@ EC_KEY *eckey; #endif + if (!ossl_assert(s->ctx != NULL) || !ossl_assert(s->session_ctx != NULL)) + return 0; + + /* + * A servername callback can change the available certs, so if a servername + * cb is set then we just assume TLSv1.3 will be ok + */ + if (s->ctx->ext.servername_cb != NULL + || s->session_ctx->ext.servername_cb != NULL) + return 1; + #ifndef OPENSSL_NO_PSK if (s->psk_server_callback != NULL) return 1; @@ -1656,11 +1668,22 @@ */ int ssl_set_version_bound(int method_version, int version, int *bound) { + int valid_tls; + int valid_dtls; + if (version == 0) { *bound = version; return 1; } + valid_tls = version >= SSL3_VERSION && version <= TLS_MAX_VERSION; + valid_dtls = + DTLS_VERSION_LE(version, DTLS_MAX_VERSION) && + DTLS_VERSION_GE(version, DTLS1_BAD_VER); + + if (!valid_tls && !valid_dtls) + return 0; + /*- * Restrict TLS methods to TLS protocol versions. * Restrict DTLS methods to DTLS protocol versions. @@ -1671,31 +1694,24 @@ * configurations. If the MIN (supported) version ever rises, the user's * "floor" remains valid even if no longer available. We don't expect the * MAX ceiling to ever get lower, so making that variable makes sense. + * + * We ignore attempts to set bounds on version-inflexible methods, + * returning success. */ switch (method_version) { default: - /* - * XXX For fixed version methods, should we always fail and not set any - * bounds, always succeed and not set any bounds, or set the bounds and - * arrange to fail later if they are not met? At present fixed-version - * methods are not subject to controls that disable individual protocol - * versions. - */ - return 0; + break; case TLS_ANY_VERSION: - if (version < SSL3_VERSION || version > TLS_MAX_VERSION) - return 0; + if (valid_tls) + *bound = version; break; case DTLS_ANY_VERSION: - if (DTLS_VERSION_GT(version, DTLS_MAX_VERSION) || - DTLS_VERSION_LT(version, DTLS1_BAD_VER)) - return 0; + if (valid_dtls) + *bound = version; break; } - - *bound = version; return 1; } @@ -2394,6 +2410,8 @@ SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS13_SAVE_HANDSHAKE_DIGEST_FOR_PHA, ERR_R_INTERNAL_ERROR); + EVP_MD_CTX_free(s->pha_dgst); + s->pha_dgst = NULL; return 0; } } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/statem_local.h nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/statem_local.h --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/statem_local.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/statem_local.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2015-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -22,6 +22,8 @@ #define SERVER_HELLO_MAX_LENGTH 20000 #define HELLO_RETRY_REQUEST_MAX_LENGTH 20000 #define ENCRYPTED_EXTENSIONS_MAX_LENGTH 20000 +#define SESSION_TICKET_MAX_LENGTH_TLS13 131338 +#define SESSION_TICKET_MAX_LENGTH_TLS12 65541 #define SERVER_KEY_EXCH_MAX_LENGTH 102400 #define SERVER_HELLO_DONE_MAX_LENGTH 0 #define KEY_UPDATE_MAX_LENGTH 1 diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/statem_srvr.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/statem_srvr.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/statem/statem_srvr.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/statem/statem_srvr.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved * Copyright 2005 Nokia. All rights reserved. * @@ -2178,6 +2178,7 @@ OPENSSL_free(s->s3->alpn_selected); s->s3->alpn_selected = OPENSSL_memdup(selected, selected_len); if (s->s3->alpn_selected == NULL) { + s->s3->alpn_selected_len = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_HANDLE_ALPN, ERR_R_INTERNAL_ERROR); return 0; @@ -2577,7 +2578,7 @@ s->s3->tmp.pkey = ssl_generate_pkey(pkdhp); if (s->s3->tmp.pkey == NULL) { - /* SSLfatal() already called */ + SSLfatal(s, SSL_AD_INTERNAL_ERROR, 0, ERR_R_INTERNAL_ERROR); goto err; } @@ -2853,9 +2854,16 @@ if (s->post_handshake_auth == SSL_PHA_REQUEST_PENDING) { OPENSSL_free(s->pha_context); s->pha_context_len = 32; - if ((s->pha_context = OPENSSL_malloc(s->pha_context_len)) == NULL - || RAND_bytes(s->pha_context, s->pha_context_len) <= 0 - || !WPACKET_sub_memcpy_u8(pkt, s->pha_context, s->pha_context_len)) { + if ((s->pha_context = OPENSSL_malloc(s->pha_context_len)) == NULL) { + s->pha_context_len = 0; + SSLfatal(s, SSL_AD_INTERNAL_ERROR, + SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, + ERR_R_INTERNAL_ERROR); + return 0; + } + if (RAND_bytes(s->pha_context, s->pha_context_len) <= 0 + || !WPACKET_sub_memcpy_u8(pkt, s->pha_context, + s->pha_context_len)) { SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_CERTIFICATE_REQUEST, ERR_R_INTERNAL_ERROR); @@ -2969,6 +2977,7 @@ OPENSSL_cleanse(psk, psklen); if (s->s3->tmp.psk == NULL) { + s->s3->tmp.psklen = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PROCESS_CKE_PSK_PREAMBLE, ERR_R_MALLOC_FAILURE); return 0; @@ -3508,6 +3517,7 @@ #ifndef OPENSSL_NO_PSK OPENSSL_clear_free(s->s3->tmp.psk, s->s3->tmp.psklen); s->s3->tmp.psk = NULL; + s->s3->tmp.psklen = 0; #endif return MSG_PROCESS_ERROR; } @@ -3743,6 +3753,7 @@ sk_X509_pop_free(s->session->peer_chain, X509_free); s->session->peer_chain = sk; + sk = NULL; /* * Freeze the handshake buffer. For session->ext.alpn_selected = OPENSSL_memdup(s->s3->alpn_selected, s->s3->alpn_selected_len); if (s->session->ext.alpn_selected == NULL) { + s->session->ext.alpn_selected_len = 0; SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET, ERR_R_MALLOC_FAILURE); @@ -4128,9 +4139,12 @@ } if (tctx->generate_ticket_cb != NULL && - tctx->generate_ticket_cb(s, tctx->ticket_cb_data) == 0) + tctx->generate_ticket_cb(s, tctx->ticket_cb_data) == 0) { + SSLfatal(s, SSL_AD_INTERNAL_ERROR, + SSL_F_TLS_CONSTRUCT_NEW_SESSION_TICKET, + ERR_R_INTERNAL_ERROR); goto err; - + } /* * If we are using anti-replay protection then we behave as if * SSL_OP_NO_TICKET is set - we are caching tickets anyway so there diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/t1_lib.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/t1_lib.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/t1_lib.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/t1_lib.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -2439,46 +2439,55 @@ #ifndef OPENSSL_NO_DH DH *ssl_get_auto_dh(SSL *s) { - int dh_secbits = 80; - if (s->cert->dh_tmp_auto == 2) - return DH_get_1024_160(); - if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aPSK)) { - if (s->s3->tmp.new_cipher->strength_bits == 256) - dh_secbits = 128; - else - dh_secbits = 80; - } else { - if (s->s3->tmp.cert == NULL) - return NULL; - dh_secbits = EVP_PKEY_security_bits(s->s3->tmp.cert->privatekey); + DH *dhp = NULL; + BIGNUM *p = NULL, *g = NULL; + int dh_secbits = 80, sec_level_bits; + + if (s->cert->dh_tmp_auto != 2) { + if (s->s3->tmp.new_cipher->algorithm_auth & (SSL_aNULL | SSL_aPSK)) { + if (s->s3->tmp.new_cipher->strength_bits == 256) + dh_secbits = 128; + else + dh_secbits = 80; + } else { + if (s->s3->tmp.cert == NULL) + return NULL; + dh_secbits = EVP_PKEY_security_bits(s->s3->tmp.cert->privatekey); + } } - if (dh_secbits >= 128) { - DH *dhp = DH_new(); - BIGNUM *p, *g; - if (dhp == NULL) - return NULL; - g = BN_new(); - if (g == NULL || !BN_set_word(g, 2)) { - DH_free(dhp); - BN_free(g); - return NULL; - } - if (dh_secbits >= 192) - p = BN_get_rfc3526_prime_8192(NULL); - else - p = BN_get_rfc3526_prime_3072(NULL); - if (p == NULL || !DH_set0_pqg(dhp, p, NULL, g)) { - DH_free(dhp); - BN_free(p); - BN_free(g); - return NULL; - } - return dhp; + dhp = DH_new(); + if (dhp == NULL) + return NULL; + g = BN_new(); + if (g == NULL || !BN_set_word(g, 2)) { + DH_free(dhp); + BN_free(g); + return NULL; + } + + /* Do not pick a prime that is too weak for the current security level */ + sec_level_bits = ssl_get_security_level_bits(s, NULL, NULL); + if (dh_secbits < sec_level_bits) + dh_secbits = sec_level_bits; + + if (dh_secbits >= 192) + p = BN_get_rfc3526_prime_8192(NULL); + else if (dh_secbits >= 152) + p = BN_get_rfc3526_prime_4096(NULL); + else if (dh_secbits >= 128) + p = BN_get_rfc3526_prime_3072(NULL); + else if (dh_secbits >= 112) + p = BN_get_rfc3526_prime_2048(NULL); + else + p = BN_get_rfc2409_prime_1024(NULL); + if (p == NULL || !DH_set0_pqg(dhp, p, NULL, g)) { + DH_free(dhp); + BN_free(p); + BN_free(g); + return NULL; } - if (dh_secbits >= 112) - return DH_get_2048_224(); - return DH_get_1024_160(); + return dhp; } #endif diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/t1_trce.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/t1_trce.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/t1_trce.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/t1_trce.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright 2012-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -656,7 +656,10 @@ if (*pmsglen < 32) return 0; - tm = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; + tm = ((unsigned int)p[0] << 24) + | ((unsigned int)p[1] << 16) + | ((unsigned int)p[2] << 8) + | (unsigned int)p[3]; p += 4; BIO_indent(bio, indent, 80); BIO_puts(bio, "Random:\n"); @@ -864,8 +867,10 @@ break; if (extlen != 4) return 0; - max_early_data = (ext[0] << 24) | (ext[1] << 16) | (ext[2] << 8) - | ext[3]; + max_early_data = ((unsigned int)ext[0] << 24) + | ((unsigned int)ext[1] << 16) + | ((unsigned int)ext[2] << 8) + | (unsigned int)ext[3]; BIO_indent(bio, indent + 2, 80); BIO_printf(bio, "max_early_data=%u\n", max_early_data); break; @@ -1356,7 +1361,10 @@ } if (msglen < 4) return 0; - tick_life = (msg[0] << 24) | (msg[1] << 16) | (msg[2] << 8) | msg[3]; + tick_life = ((unsigned int)msg[0] << 24) + | ((unsigned int)msg[1] << 16) + | ((unsigned int)msg[2] << 8) + | (unsigned int)msg[3]; msglen -= 4; msg += 4; BIO_indent(bio, indent + 2, 80); @@ -1367,7 +1375,10 @@ if (msglen < 4) return 0; ticket_age_add = - (msg[0] << 24) | (msg[1] << 16) | (msg[2] << 8) | msg[3]; + ((unsigned int)msg[0] << 24) + | ((unsigned int)msg[1] << 16) + | ((unsigned int)msg[2] << 8) + | (unsigned int)msg[3]; msglen -= 4; msg += 4; BIO_indent(bio, indent + 2, 80); diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/tls13_enc.c nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/tls13_enc.c --- nodejs-mozilla-12.18.1/deps/openssl/openssl/ssl/tls13_enc.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/ssl/tls13_enc.c 2022-04-05 07:17:01.000000000 +0000 @@ -390,11 +390,18 @@ uint32_t algenc; ivlen = EVP_CCM_TLS_IV_LEN; - if (s->s3->tmp.new_cipher == NULL) { + if (s->s3->tmp.new_cipher != NULL) { + algenc = s->s3->tmp.new_cipher->algorithm_enc; + } else if (s->session->cipher != NULL) { /* We've not selected a cipher yet - we must be doing early data */ algenc = s->session->cipher->algorithm_enc; + } else if (s->psksession != NULL && s->psksession->cipher != NULL) { + /* We must be doing early data with out-of-band PSK */ + algenc = s->psksession->cipher->algorithm_enc; } else { - algenc = s->s3->tmp.new_cipher->algorithm_enc; + SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_DERIVE_SECRET_KEY_AND_IV, + ERR_R_EVP_LIB); + goto err; } if (algenc & (SSL_AES128CCM8 | SSL_AES256CCM8)) taglen = EVP_CCM8_TLS_TAG_LEN; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/tools/c_rehash.in nodejs-mozilla-12.22.12/deps/openssl/openssl/tools/c_rehash.in --- nodejs-mozilla-12.18.1/deps/openssl/openssl/tools/c_rehash.in 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/tools/c_rehash.in 2022-04-05 07:17:01.000000000 +0000 @@ -1,7 +1,7 @@ #!{- $config{HASHBANGPERL} -} # {- join("\n# ", @autowarntext) -} -# Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -161,7 +161,7 @@ sub link_hash_cert { my $fname = $_[0]; - $fname =~ s/'/'\\''/g; + $fname =~ s/\"/\\\"/g; my ($hash, $fprint) = `"$openssl" x509 $x509hash -fingerprint -noout -in "$fname"`; chomp $hash; chomp $fprint; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/util/libcrypto.num nodejs-mozilla-12.22.12/deps/openssl/openssl/util/libcrypto.num --- nodejs-mozilla-12.18.1/deps/openssl/openssl/util/libcrypto.num 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/util/libcrypto.num 2022-04-05 07:17:01.000000000 +0000 @@ -4587,3 +4587,7 @@ EVP_PKEY_meth_get_digestverify 4541 1_1_1e EXIST::FUNCTION: EVP_PKEY_meth_get_digestsign 4542 1_1_1e EXIST::FUNCTION: RSA_get0_pss_params 4543 1_1_1e EXIST::FUNCTION:RSA +X509_ALGOR_copy 4544 1_1_1h EXIST::FUNCTION: +X509_REQ_set0_signature 4545 1_1_1h EXIST::FUNCTION: +X509_REQ_set1_signature_algo 4546 1_1_1h EXIST::FUNCTION: +EC_KEY_decoded_from_explicit_params 4547 1_1_1h EXIST::FUNCTION:EC diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/util/mkdir-p.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/util/mkdir-p.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/util/mkdir-p.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/util/mkdir-p.pl 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 1999-2021 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -34,11 +34,12 @@ } unless (mkdir($dir, 0777)) { + local($err) = $!; if (-d $dir) { # We raced against another instance doing the same thing. return; } - die "Cannot create directory $dir: $!\n"; + die "Cannot create directory $dir: $err\n"; } print "created directory `$dir'\n"; } diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/util/mkrc.pl nodejs-mozilla-12.22.12/deps/openssl/openssl/util/mkrc.pl --- nodejs-mozilla-12.18.1/deps/openssl/openssl/util/mkrc.pl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/util/mkrc.pl 2022-04-05 07:17:01.000000000 +0000 @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -46,7 +46,7 @@ $vft = "VFT_APP"; } -my $YEAR = [localtime()]->[5] + 1900; +my $YEAR = [gmtime($ENV{SOURCE_DATE_EPOCH} || time())]->[5] + 1900; print <<___; #include diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/util/openssl-format-source nodejs-mozilla-12.22.12/deps/openssl/openssl/util/openssl-format-source --- nodejs-mozilla-12.18.1/deps/openssl/openssl/util/openssl-format-source 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/util/openssl-format-source 2022-04-05 07:17:01.000000000 +0000 @@ -65,7 +65,7 @@ echo "INDENT_PROFILE=$INDENT_PROFILE"; continue;; -c) COMMENTS="true"; - INDENT_ARGS="-fc1 -fca -cdb -sc"; + INDENT_ARGS="-fc1 -fca -cdb -sc"; continue;; -nc) COMMENTS="true"; continue;; diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/util/perl/TLSProxy/Message.pm nodejs-mozilla-12.22.12/deps/openssl/openssl/util/perl/TLSProxy/Message.pm --- nodejs-mozilla-12.18.1/deps/openssl/openssl/util/perl/TLSProxy/Message.pm 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/util/perl/TLSProxy/Message.pm 2022-04-05 07:17:01.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -448,7 +448,7 @@ } #Update all the underlying records with the modified data from this message -#Note: Only supports re-encrypting for TLSv1.3 +#Note: Only supports TLSv1.3 and ETM encryption sub repack { my $self = shift; @@ -490,15 +490,38 @@ # (If a length override is ever needed to construct invalid packets, # use an explicit override field instead.) $rec->decrypt_len(length($rec->decrypt_data)); - $rec->len($rec->len + length($msgdata) - $old_length); - # Only support re-encryption for TLSv1.3. - if (TLSProxy::Proxy->is_tls13() && $rec->encrypted()) { - #Add content type (1 byte) and 16 tag bytes - $rec->data($rec->decrypt_data - .pack("C", TLSProxy::Record::RT_HANDSHAKE).("\0"x16)); + # Only support re-encryption for TLSv1.3 and ETM. + if ($rec->encrypted()) { + if (TLSProxy::Proxy->is_tls13()) { + #Add content type (1 byte) and 16 tag bytes + $rec->data($rec->decrypt_data + .pack("C", TLSProxy::Record::RT_HANDSHAKE).("\0"x16)); + } elsif ($rec->etm()) { + my $data = $rec->decrypt_data; + #Add padding + my $padval = length($data) % 16; + $padval = 15 - $padval; + for (0..$padval) { + $data .= pack("C", $padval); + } + + #Add MAC. Assumed to be 20 bytes + foreach my $macval (0..19) { + $data .= pack("C", $macval); + } + + if ($rec->version() >= TLSProxy::Record::VERS_TLS_1_1) { + #Explicit IV + $data = ("\0"x16).$data; + } + $rec->data($data); + } else { + die "Unsupported encryption: No ETM"; + } } else { $rec->data($rec->decrypt_data); } + $rec->len(length($rec->data)); #Update the fragment len in case we changed it above ${$self->message_frag_lens}[0] = length($msgdata) diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/VMS/msg_install.com nodejs-mozilla-12.22.12/deps/openssl/openssl/VMS/msg_install.com --- nodejs-mozilla-12.18.1/deps/openssl/openssl/VMS/msg_install.com 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/VMS/msg_install.com 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,19 @@ +$ ! Used by the main descrip.mms to print the installation complete +$ ! message. +$ ! Arguments: +$ ! P1 startup / setup / shutdown scripts directory +$ ! P2 distinguishing version number ("major version") +$ +$ systartup = p1 +$ osslver = p2 +$ +$ WRITE SYS$OUTPUT "Installation complete" +$ WRITE SYS$OUTPUT "" +$ WRITE SYS$OUTPUT "The following commands need to be executed to enable you to use OpenSSL:" +$ WRITE SYS$OUTPUT "" +$ WRITE SYS$OUTPUT "- to set up OpenSSL logical names:" +$ WRITE SYS$OUTPUT " @''systartup'openssl_startup''osslver'" +$ WRITE SYS$OUTPUT "" +$ WRITE SYS$OUTPUT "- to define the OpenSSL command" +$ WRITE SYS$OUTPUT " @''systartup'openssl_utils''osslver'" +$ WRITE SYS$OUTPUT "" diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl/VMS/msg_staging.com nodejs-mozilla-12.22.12/deps/openssl/openssl/VMS/msg_staging.com --- nodejs-mozilla-12.18.1/deps/openssl/openssl/VMS/msg_staging.com 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl/VMS/msg_staging.com 2022-04-05 07:17:00.000000000 +0000 @@ -0,0 +1,37 @@ +$ ! Used by the main descrip.mms to print the statging installation +$ ! complete +$ ! message. +$ ! Arguments: +$ ! P1 staging software installation directory +$ ! P2 staging data installation directory +$ ! P3 final software installation directory +$ ! P4 final data installation directory +$ ! P5 startup / setup / shutdown scripts directory +$ ! P6 distinguishing version number ("major version") +$ +$ staging_instdir = p1 +$ staging_datadir = p2 +$ final_instdir = p3 +$ final_datadir = p4 +$ systartup = p5 +$ osslver = p6 +$ +$ WRITE SYS$OUTPUT "Staging installation complete" +$ WRITE SYS$OUTPUT "" +$ WRITE SYS$OUTPUT "Finish or package in such a way that the contents of the following directory" +$ WRITE SYS$OUTPUT "trees end up being copied:" +$ WRITE SYS$OUTPUT "" +$ WRITE SYS$OUTPUT "- from ", staging_instdir +$ WRITE SYS$OUTPUT " to ", final_instdir +$ WRITE SYS$OUTPUT "- from ", staging_datadir +$ WRITE SYS$OUTPUT " to ", final_datadir +$ WRITE SYS$OUTPUT "" +$ WRITE SYS$OUTPUT "When in its final destination, the following commands need to be executed" +$ WRITE SYS$OUTPUT "to use OpenSSL:" +$ WRITE SYS$OUTPUT "" +$ WRITE SYS$OUTPUT "- to set up OpenSSL logical names:" +$ WRITE SYS$OUTPUT " @''systartup'openssl_startup''osslver'" +$ WRITE SYS$OUTPUT "" +$ WRITE SYS$OUTPUT "- to define the OpenSSL command" +$ WRITE SYS$OUTPUT " @''systartup'openssl_utils''osslver'" +$ WRITE SYS$OUTPUT "" diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl_asm_avx2.gypi nodejs-mozilla-12.22.12/deps/openssl/openssl_asm_avx2.gypi --- nodejs-mozilla-12.18.1/deps/openssl/openssl_asm_avx2.gypi 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl_asm_avx2.gypi 2022-04-05 07:17:01.000000000 +0000 @@ -48,6 +48,8 @@ 'includes': ['config/archs/BSD-x86_64/asm_avx2/openssl.gypi'], }, 'target_arch=="x64" and OS=="mac"', { 'includes': ['config/archs/darwin64-x86_64-cc/asm_avx2/openssl.gypi'], + }, 'target_arch=="arm64" and OS=="mac"', { + 'includes': ['config/archs/darwin64-arm64-cc/asm_avx2/openssl.gypi'], }, 'target_arch=="x64" and OS=="solaris"', { 'includes': ['config/archs/solaris64-x86_64-gcc/asm_avx2/openssl.gypi'], }, 'target_arch=="x64" and OS=="win"', { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl_asm.gypi nodejs-mozilla-12.22.12/deps/openssl/openssl_asm.gypi --- nodejs-mozilla-12.18.1/deps/openssl/openssl_asm.gypi 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl_asm.gypi 2022-04-05 07:17:01.000000000 +0000 @@ -16,6 +16,8 @@ 'includes': ['config/archs/linux-armv4/asm/openssl.gypi'], }, 'target_arch=="arm64" and OS=="linux"', { 'includes': ['config/archs/linux-aarch64/asm/openssl.gypi'], + }, 'target_arch=="arm64" and OS=="mac"', { + 'includes': ['config/archs/darwin64-arm64-cc/asm/openssl.gypi'], }, 'target_arch=="ia32" and OS=="freebsd"', { 'includes': ['config/archs/BSD-x86/asm/openssl.gypi'], }, 'target_arch=="ia32" and OS=="linux"', { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl-cl_asm_avx2.gypi nodejs-mozilla-12.22.12/deps/openssl/openssl-cl_asm_avx2.gypi --- nodejs-mozilla-12.18.1/deps/openssl/openssl-cl_asm_avx2.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl-cl_asm_avx2.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -33,6 +33,8 @@ 'includes': ['config/archs/BSD-x86_64/asm_avx2/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="mac"', { 'includes': ['config/archs/darwin64-x86_64-cc/asm_avx2/openssl-cl.gypi'], + }, 'target_arch=="arm64" and OS=="mac"', { + 'includes': ['config/archs/darwin64-arm64-cc/asm_avx2/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="solaris"', { 'includes': ['config/archs/solaris64-x86_64-gcc/asm_avx2/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="win"', { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl-cl_asm.gypi nodejs-mozilla-12.22.12/deps/openssl/openssl-cl_asm.gypi --- nodejs-mozilla-12.18.1/deps/openssl/openssl-cl_asm.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl-cl_asm.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -33,6 +33,8 @@ 'includes': ['config/archs/BSD-x86_64/asm/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="mac"', { 'includes': ['config/archs/darwin64-x86_64-cc/asm/openssl-cl.gypi'], + }, 'target_arch=="arm64" and OS=="mac"', { + 'includes': ['config/archs/darwin64-arm64-cc/asm/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="solaris"', { 'includes': ['config/archs/solaris64-x86_64-gcc/asm/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="win"', { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl-cl_no_asm.gypi nodejs-mozilla-12.22.12/deps/openssl/openssl-cl_no_asm.gypi --- nodejs-mozilla-12.18.1/deps/openssl/openssl-cl_no_asm.gypi 2020-06-17 01:25:36.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl-cl_no_asm.gypi 2022-04-05 07:17:00.000000000 +0000 @@ -35,6 +35,8 @@ 'includes': ['config/archs/BSD-x86_64/no-asm/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="mac"', { 'includes': ['config/archs/darwin64-x86_64-cc/no-asm/openssl-cl.gypi'], + }, 'target_arch=="arm64" and OS=="mac"', { + 'includes': ['config/archs/darwin64-arm64-cc/no-asm/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="solaris"', { 'includes': ['config/archs/solaris64-x86_64-gcc/no-asm/openssl-cl.gypi'], }, 'target_arch=="x64" and OS=="win"', { diff -Nru nodejs-mozilla-12.18.1/deps/openssl/openssl_no_asm.gypi nodejs-mozilla-12.22.12/deps/openssl/openssl_no_asm.gypi --- nodejs-mozilla-12.18.1/deps/openssl/openssl_no_asm.gypi 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/openssl/openssl_no_asm.gypi 2022-04-05 07:17:01.000000000 +0000 @@ -34,6 +34,8 @@ 'includes': ['config/archs/BSD-x86_64/no-asm/openssl.gypi'], }, 'target_arch=="x64" and OS=="mac"', { 'includes': ['config/archs/darwin64-x86_64-cc/no-asm/openssl.gypi'], + }, 'target_arch=="arm64" and OS=="mac"', { + 'includes': ['config/archs/darwin64-arm64-cc/no-asm/openssl.gypi'], }, 'target_arch=="x64" and OS=="solaris"', { 'includes': ['config/archs/solaris64-x86_64-gcc/no-asm/openssl.gypi'], }, 'target_arch=="x64" and OS=="win"', { diff -Nru nodejs-mozilla-12.18.1/deps/uv/AUTHORS nodejs-mozilla-12.22.12/deps/uv/AUTHORS --- nodejs-mozilla-12.18.1/deps/uv/AUTHORS 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/AUTHORS 2022-04-05 07:17:01.000000000 +0000 @@ -432,3 +432,19 @@ Michal Artazov Jeroen Roovers MasterDuke17 +Alexander Tokmakov +Arenoros +lander0s +Turbinya +OleksandrKvl +Carter Li +Juan Sebastian velez Posada +escherstair +Evan Lucas +tjarlama <59913901+tjarlama@users.noreply.github.com> +司徒玟琅 +YuMeiJie +Aleksej Lebedev +Nikolay Mitev +Ulrik Strid +Elad Lahav diff -Nru nodejs-mozilla-12.18.1/deps/uv/ChangeLog nodejs-mozilla-12.22.12/deps/uv/ChangeLog --- nodejs-mozilla-12.18.1/deps/uv/ChangeLog 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/ChangeLog 2022-04-05 07:17:01.000000000 +0000 @@ -1,3 +1,153 @@ +2020.09.26, Version 1.40.0 (Stable), 4e69e333252693bd82d6338d6124f0416538dbfc + +Changes since version 1.39.0: + +* udp: add UV_UDP_MMSG_FREE recv_cb flag (Ryan Liptak) + +* include: re-map UV__EPROTO from 4046 to -4046 (YuMeiJie) + +* doc: correct UV_UDP_MMSG_FREE version added (cjihrig) + +* doc: add uv_metrics_idle_time() version metadata (Ryan Liptak) + +* win,tty: pass through utf-16 surrogate pairs (Mustafa M) + +* unix: fix DragonFly BSD build (Aleksej Lebedev) + +* win,udp: fix error code returned by connect() (Santiago Gimeno) + +* src: suppress user_timeout maybe-uninitialized (Daniel Bevenius) + +* test: fix compiler warning (Vladimír Čunát) + +* build: fix the Haiku cmake build (David Carlier) + +* linux: fix i386 sendmmsg/recvmmsg support (Ben Noordhuis) + +* build: add libuv-static pkg-config file (Nikolay Mitev) + +* unix,win: add uv_timer_get_due_in() (Ulrik Strid) + +* build,unix: add QNX support (Elad Lahav) + +* include: remove incorrect UV__ERR() for EPROTO (cjihrig) + + +2020.08.26, Version 1.39.0 (Stable), 25f4b8b8a3c0f934158cd37a37b0525d75ca488e + +Changes since version 1.38.1: + +* unix: use relaxed loads/stores for clock id (Ben Noordhuis) + +* build,win: link to user32.lib and advapi32.lib (George Zhao) + +* unix: squelch harmless valgrind warning (ssrlive) + +* include: fx c++ style comments warnings (Turbinya) + +* build,cmake: Change installation location on MinGW (erw7) + +* linux: use copy_file_range for uv_fs_copyfile when possible (Carter Li) + +* win,tcp: avoid reinserting a pending request ( + +* docs: improve the descriptions for get memory info (Juan Sebastian velez + Posada) + +* test: add udp-mmsg test (Ryan Liptak) + +* udp: add uv_udp_using_recvmmsg query (Ryan Liptak) + +* doc: add more error constants (TK-one) + +* zos: fix potential event loop stall (Trevor Norris) + +* include: add internal fields struct to uv_loop_t (Trevor Norris) + +* core: add API to measure event loop idle time (Trevor Norris) + +* win,fs: use CreateDirectoryW instead of _wmkdir (Mustafa M) + +* win,nfc: fix integer comparison signedness (escherstair) + +* win,nfc: use + +* win,nfc: removed some unused variables (escherstair) + +* win,nfc: add missing return statement (escherstair) + +* win,nfc: disable clang-format for + +* darwin: use IOKit for uv_cpu_info (Evan Lucas) + +* test: fix thread race in process_title_threadsafe (Ben Noordhuis) + +* win,fs: avoid implicit access to _doserrno (Jameson Nash) + +* test: give hrtime test a custom 20s timeout (Jameson Nash) + +* build: add more failed test, for qemu version bump (gengjiawen) + +* unix: handle src, dest same in uv_fs_copyfile() (cjihrig) + +* unix: error when uv_setup_args() is not called (Ryan Liptak) + +* aix: protect uv_exepath() from uv_set_process_title() (Richard Lau) + +* fs: clobber req->path on uv_fs_mkstemp() error (tjarlama) + +* cmake: fix compile error C2001 on Chinese Windows (司徒玟琅) + +* test: avoid double evaluation in ASSERT_BASE macro (tjarlama) + +* tcp: fail instantly if local port is unbound (Bartosz Sosnowski) + +* doc: fix most sphinx warnings (Jameson Nash) + +* nfci: address some style nits (Jameson Nash) + +* unix: don't use _POSIX_PATH_MAX (Ben Noordhuis) + + +2020.07.04, Version 1.38.1 (Stable), e8b989ea1f7f9d4083511a2caec7791e9abd1871 + +Changes since version 1.38.0: + +* test: use last matching qemu version (cjihrig) + +* win, util: rearrange uv_hrtime (Bartosz Sosnowski) + +* test: skip signal_multiple_loops test on QEMU (gengjiawen) + +* build: add android build to CI (gengjiawen) + +* test: extend fs_event_error_reporting timeout (cjihrig) + +* build: link libkvm on netbsd only (Alexander Tokmakov) + +* linux: refactor /proc file reader logic (Ben Noordhuis) + +* linux: read load average from /proc/loadavg (Ben Noordhuis) + +* android: remove patch code for below 21 (gengjiawen) + +* win: fix visual studio 2008 build (Arenoros) + +* win,tty: fix deadlock caused by inconsistent state (lander0s) + +* unix: use relaxed loads/stores for feature checks (Ben Noordhuis) + +* build: don't .gitignore m4/ax_pthread.m4 (Ben Noordhuis) + +* unix: fix gcc atomics feature check (Ben Noordhuis) + +* darwin: work around clock jumping back in time (Ben Noordhuis) + +* udp: fix write_queue cleanup on sendmmsg error (Santiago Gimeno) + +* src: build fix for Android (David Carlier) + + 2020.05.18, Version 1.38.0 (Stable), 1ab9ea3790378f9f25c4e78e9e2b511c75f9c9ed Changes since version 1.37.0: diff -Nru nodejs-mozilla-12.18.1/deps/uv/CMakeLists.txt nodejs-mozilla-12.22.12/deps/uv/CMakeLists.txt --- nodejs-mozilla-12.18.1/deps/uv/CMakeLists.txt 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/CMakeLists.txt 2022-04-05 07:17:01.000000000 +0000 @@ -56,6 +56,8 @@ check_c_compiler_flag(-Wstrict-prototypes UV_LINT_STRICT_PROTOTYPES) check_c_compiler_flag(-Wextra UV_LINT_EXTRA) +check_c_compiler_flag(/utf-8 UV_LINT_UTF8_MSVC) + set(lint-no-unused-parameter $<$:-Wno-unused-parameter>) set(lint-strict-prototypes $<$:-Wstrict-prototypes>) set(lint-extra $<$:-Wextra>) @@ -76,6 +78,7 @@ string(CONCAT lint-default $< $,$>:-Wall >) +set(lint-utf8-msvc $<$:/utf-8>) list(APPEND uv_cflags ${lint-strict-prototypes} ${lint-extra} ${lint-default} ${lint-w4}) list(APPEND uv_cflags ${lint-no-unused-parameter}) @@ -90,6 +93,7 @@ list(APPEND uv_cflags ${lint-no-hides-global-msvc}) list(APPEND uv_cflags ${lint-no-conditional-assignment-msvc}) list(APPEND uv_cflags ${lint-no-unsafe-msvc}) +list(APPEND uv_cflags ${lint-utf8-msvc} ) set(uv_sources src/fs-poll.c @@ -107,6 +111,8 @@ list(APPEND uv_defines WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0600) list(APPEND uv_libraries psapi + user32 + advapi32 iphlpapi userenv ws2_32) @@ -140,7 +146,7 @@ list(APPEND uv_test_sources src/win/snprintf.c test/runner-win.c) else() list(APPEND uv_defines _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE) - if(NOT CMAKE_SYSTEM_NAME MATCHES "Android|OS390") + if(NOT CMAKE_SYSTEM_NAME MATCHES "Android|OS390|QNX") # TODO: This should be replaced with find_package(Threads) if possible # Android has pthread as part of its c library, not as a separate # libpthread.so. @@ -182,6 +188,7 @@ endif() if(CMAKE_SYSTEM_NAME STREQUAL "Android") + list(APPEND uv_defines _GNU_SOURCE) list(APPEND uv_libraries dl) list(APPEND uv_sources src/unix/android-ifaddrs.c @@ -192,8 +199,7 @@ src/unix/pthread-fixes.c src/unix/random-getentropy.c src/unix/random-getrandom.c - src/unix/random-sysctl-linux.c - src/unix/sysinfo-loadavg.c) + src/unix/random-sysctl-linux.c) endif() if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "Android|Linux|OS390") @@ -206,7 +212,6 @@ if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD") list(APPEND uv_sources src/unix/posix-hrtime.c src/unix/bsd-proctitle.c) - list(APPEND uv_libraries kvm) endif() if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD") @@ -238,12 +243,12 @@ src/unix/linux-syscalls.c src/unix/procfs-exepath.c src/unix/random-getrandom.c - src/unix/random-sysctl-linux.c - src/unix/sysinfo-loadavg.c) + src/unix/random-sysctl-linux.c) endif() if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD") list(APPEND uv_sources src/unix/netbsd.c) + list(APPEND uv_libraries kvm) endif() if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") @@ -284,7 +289,6 @@ src/unix/aix-common.c src/unix/ibmi.c src/unix/no-fsevents.c - src/unix/no-proctitle.c src/unix/posix-poll.c) endif() @@ -294,6 +298,30 @@ list(APPEND uv_sources src/unix/no-proctitle.c src/unix/sunos.c) endif() +if(CMAKE_SYSTEM_NAME STREQUAL "Haiku") + list(APPEND uv_defines _BSD_SOURCE) + list(APPEND uv_libraries bsd network) + list(APPEND uv_sources + src/unix/haiku.c + src/unix/bsd-ifaddrs.c + src/unix/no-fsevents.c + src/unix/no-proctitle.c + src/unix/posix-hrtime.c + src/unix/posix-poll.c) +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "QNX") + list(APPEND uv_sources + src/unix/posix-hrtime.c + src/unix/posix-poll.c + src/unix/qnx.c + src/unix/bsd-ifaddrs.c + src/unix/no-proctitle.c + src/unix/no-fsevents.c) + list(APPEND uv_cflags -fno-strict-aliasing) + list(APPEND uv_libraries socket) +endif() + if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|Linux|NetBSD|OpenBSD") list(APPEND uv_test_libraries util) endif() @@ -417,6 +445,7 @@ test/test-loop-handles.c test/test-loop-stop.c test/test-loop-time.c + test/test-metrics.c test/test-multiple-listen.c test/test-mutexes.c test/test-osx-select.c @@ -474,6 +503,7 @@ test/test-tcp-oob.c test/test-tcp-open.c test/test-tcp-read-stop.c + test/test-tcp-read-stop-start.c test/test-tcp-shutdown-after-write.c test/test-tcp-try-write.c test/test-tcp-try-write-error.c @@ -483,6 +513,7 @@ test/test-tcp-write-queue-order.c test/test-tcp-write-to-half-open-connection.c test/test-tcp-writealot.c + test/test-test-macros.c test/test-thread-equal.c test/test-thread.c test/test-threadpool-cancel.c @@ -500,6 +531,7 @@ test/test-udp-create-socket-early.c test/test-udp-dgram-too-big.c test/test-udp-ipv6.c + test/test-udp-mmsg.c test/test-udp-multicast-interface.c test/test-udp-multicast-interface6.c test/test-udp-multicast-join.c @@ -510,6 +542,7 @@ test/test-udp-send-and-recv.c test/test-udp-send-hang-loop.c test/test-udp-send-immediate.c + test/test-udp-sendmmsg-error.c test/test-udp-send-unreachable.c test/test-udp-try-send.c test/test-uname.c @@ -541,7 +574,7 @@ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) endif() -if(UNIX) +if(UNIX OR MINGW) # Now for some gibbering horrors from beyond the stars... foreach(lib IN LISTS uv_libraries) list(APPEND LIBS "-l${lib}") @@ -559,16 +592,17 @@ set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) set(prefix ${CMAKE_INSTALL_PREFIX}) configure_file(libuv.pc.in libuv.pc @ONLY) + configure_file(libuv-static.pc.in libuv-static.pc @ONLY) install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) - install(FILES ${PROJECT_BINARY_DIR}/libuv.pc + install(FILES ${PROJECT_BINARY_DIR}/libuv.pc ${PROJECT_BINARY_DIR}/libuv-static.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) install(TARGETS uv LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(TARGETS uv_a ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() -if(WIN32) +if(MSVC) install(DIRECTORY include/ DESTINATION include) install(FILES LICENSE DESTINATION .) install(TARGETS uv uv_a diff -Nru nodejs-mozilla-12.18.1/deps/uv/configure.ac nodejs-mozilla-12.22.12/deps/uv/configure.ac --- nodejs-mozilla-12.18.1/deps/uv/configure.ac 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/configure.ac 2022-04-05 07:17:01.000000000 +0000 @@ -13,7 +13,7 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. AC_PREREQ(2.57) -AC_INIT([libuv], [1.38.0], [https://github.com/libuv/libuv/issues]) +AC_INIT([libuv], [1.40.0], [https://github.com/libuv/libuv/issues]) AC_CONFIG_MACRO_DIR([m4]) m4_include([m4/libuv-extra-automake-flags.m4]) m4_include([m4/as_case.m4]) diff -Nru nodejs-mozilla-12.18.1/deps/uv/include/uv/errno.h nodejs-mozilla-12.22.12/deps/uv/include/uv/errno.h --- nodejs-mozilla-12.18.1/deps/uv/include/uv/errno.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/include/uv/errno.h 2022-04-05 07:17:01.000000000 +0000 @@ -317,7 +317,7 @@ #if defined(EPROTO) && !defined(_WIN32) # define UV__EPROTO UV__ERR(EPROTO) #else -# define UV__EPROTO UV__ERR(4046) +# define UV__EPROTO (-4046) #endif #if defined(EPROTONOSUPPORT) && !defined(_WIN32) diff -Nru nodejs-mozilla-12.18.1/deps/uv/include/uv/unix.h nodejs-mozilla-12.22.12/deps/uv/include/uv/unix.h --- nodejs-mozilla-12.18.1/deps/uv/include/uv/unix.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/include/uv/unix.h 2022-04-05 07:17:01.000000000 +0000 @@ -69,6 +69,8 @@ # include "uv/posix.h" #elif defined(__HAIKU__) # include "uv/posix.h" +#elif defined(__QNX__) +# include "uv/posix.h" #endif #ifndef NI_MAXHOST diff -Nru nodejs-mozilla-12.18.1/deps/uv/include/uv/version.h nodejs-mozilla-12.22.12/deps/uv/include/uv/version.h --- nodejs-mozilla-12.18.1/deps/uv/include/uv/version.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/include/uv/version.h 2022-04-05 07:17:01.000000000 +0000 @@ -31,7 +31,7 @@ */ #define UV_VERSION_MAJOR 1 -#define UV_VERSION_MINOR 38 +#define UV_VERSION_MINOR 40 #define UV_VERSION_PATCH 0 #define UV_VERSION_IS_RELEASE 1 #define UV_VERSION_SUFFIX "" diff -Nru nodejs-mozilla-12.18.1/deps/uv/include/uv.h nodejs-mozilla-12.22.12/deps/uv/include/uv.h --- nodejs-mozilla-12.18.1/deps/uv/include/uv.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/include/uv.h 2022-04-05 07:17:01.000000000 +0000 @@ -247,7 +247,8 @@ typedef struct uv_statfs_s uv_statfs_t; typedef enum { - UV_LOOP_BLOCK_SIGNAL + UV_LOOP_BLOCK_SIGNAL = 0, + UV_METRICS_IDLE_TIME } uv_loop_option; typedef enum { @@ -613,6 +614,12 @@ * must not be freed by the recv_cb callback. */ UV_UDP_MMSG_CHUNK = 8, + /* + * Indicates that the buffer provided has been fully utilized by recvmmsg and + * that it should now be freed by the recv_cb callback. When this flag is set + * in uv_udp_recv_cb, nread will always be 0 and addr will always be NULL. + */ + UV_UDP_MMSG_FREE = 16, /* * Indicates that recvmmsg should be used, if available. @@ -693,6 +700,7 @@ UV_EXTERN int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb, uv_udp_recv_cb recv_cb); +UV_EXTERN int uv_udp_using_recvmmsg(const uv_udp_t* handle); UV_EXTERN int uv_udp_recv_stop(uv_udp_t* handle); UV_EXTERN size_t uv_udp_get_send_queue_size(const uv_udp_t* handle); UV_EXTERN size_t uv_udp_get_send_queue_count(const uv_udp_t* handle); @@ -863,6 +871,7 @@ UV_EXTERN int uv_timer_again(uv_timer_t* handle); UV_EXTERN void uv_timer_set_repeat(uv_timer_t* handle, uint64_t repeat); UV_EXTERN uint64_t uv_timer_get_repeat(const uv_timer_t* handle); +UV_EXTERN uint64_t uv_timer_get_due_in(const uv_timer_t* handle); /* @@ -1191,12 +1200,12 @@ #if defined(__PASE__) /* On IBM i PASE, the highest process priority is -10 */ -# define UV_PRIORITY_LOW 39 // RUNPTY(99) -# define UV_PRIORITY_BELOW_NORMAL 15 // RUNPTY(50) -# define UV_PRIORITY_NORMAL 0 // RUNPTY(20) -# define UV_PRIORITY_ABOVE_NORMAL -4 // RUNTY(12) -# define UV_PRIORITY_HIGH -7 // RUNPTY(6) -# define UV_PRIORITY_HIGHEST -10 // RUNPTY(1) +# define UV_PRIORITY_LOW 39 /* RUNPTY(99) */ +# define UV_PRIORITY_BELOW_NORMAL 15 /* RUNPTY(50) */ +# define UV_PRIORITY_NORMAL 0 /* RUNPTY(20) */ +# define UV_PRIORITY_ABOVE_NORMAL -4 /* RUNTY(12) */ +# define UV_PRIORITY_HIGH -7 /* RUNPTY(6) */ +# define UV_PRIORITY_HIGHEST -10 /* RUNPTY(1) */ #else # define UV_PRIORITY_LOW 19 # define UV_PRIORITY_BELOW_NORMAL 10 @@ -1243,6 +1252,7 @@ UV_EXTERN int uv_os_uname(uv_utsname_t* buffer); +UV_EXTERN uint64_t uv_metrics_idle_time(uv_loop_t* loop); typedef enum { UV_FS_UNKNOWN = -1, @@ -1774,9 +1784,11 @@ unsigned int active_handles; void* handle_queue[2]; union { - void* unused[2]; + void* unused; unsigned int count; } active_reqs; + /* Internal storage for future extensions. */ + void* internal_fields; /* Internal flag to signal loop stop. */ unsigned int stop_flag; UV_LOOP_PRIVATE_FIELDS diff -Nru nodejs-mozilla-12.18.1/deps/uv/libuv-static.pc.in nodejs-mozilla-12.22.12/deps/uv/libuv-static.pc.in --- nodejs-mozilla-12.18.1/deps/uv/libuv-static.pc.in 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/libuv-static.pc.in 2022-04-05 07:17:01.000000000 +0000 @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=${prefix} +libdir=@libdir@ +includedir=@includedir@ + +Name: libuv-static +Version: @PACKAGE_VERSION@ +Description: multi-platform support library with a focus on asynchronous I/O. +URL: http://libuv.org/ + +Libs: -L${libdir} -luv_a @LIBS@ +Cflags: -I${includedir} diff -Nru nodejs-mozilla-12.18.1/deps/uv/m4/ax_pthread.m4 nodejs-mozilla-12.22.12/deps/uv/m4/ax_pthread.m4 --- nodejs-mozilla-12.18.1/deps/uv/m4/ax_pthread.m4 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/m4/ax_pthread.m4 2022-04-05 07:17:01.000000000 +0000 @@ -0,0 +1,485 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC to any special C compiler that is needed for +# multi-threaded programs (defaults to the value of CC otherwise). (This +# is necessary on AIX to use the special cc_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also to link with them as well. For example, you might link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threaded programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to +# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it +# is not found. If ACTION-IF-FOUND is not specified, the default action +# will define HAVE_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 24 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_CC]) +AC_REQUIRE([AC_PROG_SED]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on Tru64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then + ax_pthread_save_CC="$CC" + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) + AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) + if test "x$ax_pthread_ok" = "xno"; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + CC="$ax_pthread_save_CC" + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items starting with a "-" are +# C compiler flags, and other items are library names, except for "none" +# which indicates that we try without any flags at all, and "pthread-config" +# which is a program returning the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 +# (Note: HP C rejects this with "bad form for `-t' option") +# -pthreads: Solaris/gcc (Note: HP C also rejects) +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads and +# -D_REENTRANT too), HP C (must be checked before -lpthread, which +# is present but should not be used directly; and before -mthreads, +# because the compiler interprets this as "-mt" + "-hreads") +# -mthreads: Mingw32/gcc, Lynx/gcc +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case $host_os in + + freebsd*) + + # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) + # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) + + ax_pthread_flags="-kthread lthread $ax_pthread_flags" + ;; + + hpux*) + + # From the cc(1) man page: "[-mt] Sets various -D flags to enable + # multi-threading and also sets -lpthread." + + ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" + ;; + + openedition*) + + # IBM z/OS requires a feature-test macro to be defined in order to + # enable POSIX threads at all, so give the user a hint if this is + # not set. (We don't define these ourselves, as they can affect + # other portions of the system API in unpredictable ways.) + + AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING], + [ +# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) + AX_PTHREAD_ZOS_MISSING +# endif + ], + [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])]) + ;; + + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (N.B.: The stubs are missing + # pthread_cleanup_push, or rather a function called by this macro, + # so we could check for that, but who knows whether they'll stub + # that too in a future libc.) So we'll check first for the + # standard Solaris way of linking pthreads (-mt -lpthread). + + ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" + ;; +esac + +# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) + +AS_IF([test "x$GCC" = "xyes"], + [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"]) + +# The presence of a feature test macro requesting re-entrant function +# definitions is, on some systems, a strong hint that pthreads support is +# correctly enabled + +case $host_os in + darwin* | hpux* | linux* | osf* | solaris*) + ax_pthread_check_macro="_REENTRANT" + ;; + + aix*) + ax_pthread_check_macro="_THREAD_SAFE" + ;; + + *) + ax_pthread_check_macro="--" + ;; +esac +AS_IF([test "x$ax_pthread_check_macro" = "x--"], + [ax_pthread_check_cond=0], + [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) + +# Are we compiling with Clang? + +AC_CACHE_CHECK([whether $CC is Clang], + [ax_cv_PTHREAD_CLANG], + [ax_cv_PTHREAD_CLANG=no + # Note that Autoconf sets GCC=yes for Clang as well as GCC + if test "x$GCC" = "xyes"; then + AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], + [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ +# if defined(__clang__) && defined(__llvm__) + AX_PTHREAD_CC_IS_CLANG +# endif + ], + [ax_cv_PTHREAD_CLANG=yes]) + fi + ]) +ax_pthread_clang="$ax_cv_PTHREAD_CLANG" + +ax_pthread_clang_warning=no + +# Clang needs special handling, because older versions handle the -pthread +# option in a rather... idiosyncratic way + +if test "x$ax_pthread_clang" = "xyes"; then + + # Clang takes -pthread; it has never supported any other flag + + # (Note 1: This will need to be revisited if a system that Clang + # supports has POSIX threads in a separate library. This tends not + # to be the way of modern systems, but it's conceivable.) + + # (Note 2: On some systems, notably Darwin, -pthread is not needed + # to get POSIX threads support; the API is always present and + # active. We could reasonably leave PTHREAD_CFLAGS empty. But + # -pthread does define _REENTRANT, and while the Darwin headers + # ignore this macro, third-party headers might not.) + + PTHREAD_CFLAGS="-pthread" + PTHREAD_LIBS= + + ax_pthread_ok=yes + + # However, older versions of Clang make a point of warning the user + # that, in an invocation where only linking and no compilation is + # taking place, the -pthread option has no effect ("argument unused + # during compilation"). They expect -pthread to be passed in only + # when source code is being compiled. + # + # Problem is, this is at odds with the way Automake and most other + # C build frameworks function, which is that the same flags used in + # compilation (CFLAGS) are also used in linking. Many systems + # supported by AX_PTHREAD require exactly this for POSIX threads + # support, and in fact it is often not straightforward to specify a + # flag that is used only in the compilation phase and not in + # linking. Such a scenario is extremely rare in practice. + # + # Even though use of the -pthread flag in linking would only print + # a warning, this can be a nuisance for well-run software projects + # that build with -Werror. So if the active version of Clang has + # this misfeature, we search for an option to squash it. + + AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread], + [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG], + [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown + # Create an alternate version of $ac_link that compiles and + # links in two steps (.c -> .o, .o -> exe) instead of one + # (.c -> exe), because the warning occurs only in the second + # step + ax_pthread_save_ac_link="$ac_link" + ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' + ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" + ax_pthread_save_CFLAGS="$CFLAGS" + for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do + AS_IF([test "x$ax_pthread_try" = "xunknown"], [break]) + CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" + ac_link="$ax_pthread_save_ac_link" + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], + [ac_link="$ax_pthread_2step_ac_link" + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], + [break]) + ]) + done + ac_link="$ax_pthread_save_ac_link" + CFLAGS="$ax_pthread_save_CFLAGS" + AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no]) + ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" + ]) + + case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in + no | unknown) ;; + *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; + esac + +fi # $ax_pthread_clang = yes + +if test "x$ax_pthread_ok" = "xno"; then +for ax_pthread_try_flag in $ax_pthread_flags; do + + case $ax_pthread_try_flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + -mt,pthread) + AC_MSG_CHECKING([whether pthreads work with -mt -lpthread]) + PTHREAD_CFLAGS="-mt" + PTHREAD_LIBS="-lpthread" + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) + PTHREAD_CFLAGS="$ax_pthread_try_flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) + PTHREAD_LIBS="-l$ax_pthread_try_flag" + ;; + esac + + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include +# if $ax_pthread_check_cond +# error "$ax_pthread_check_macro must be defined" +# endif + static void routine(void *a) { a = 0; } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + AC_MSG_RESULT([$ax_pthread_ok]) + AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + +# Various other checks: +if test "x$ax_pthread_ok" = "xyes"; then + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_CACHE_CHECK([for joinable pthread attribute], + [ax_cv_PTHREAD_JOINABLE_ATTR], + [ax_cv_PTHREAD_JOINABLE_ATTR=unknown + for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $ax_pthread_attr; return attr /* ; */])], + [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break], + []) + done + ]) + AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ + test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ + test "x$ax_pthread_joinable_attr_defined" != "xyes"], + [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], + [$ax_cv_PTHREAD_JOINABLE_ATTR], + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + ax_pthread_joinable_attr_defined=yes + ]) + + AC_CACHE_CHECK([whether more special flags are required for pthreads], + [ax_cv_PTHREAD_SPECIAL_FLAGS], + [ax_cv_PTHREAD_SPECIAL_FLAGS=no + case $host_os in + solaris*) + ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" + ;; + esac + ]) + AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ + test "x$ax_pthread_special_flags_added" != "xyes"], + [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" + ax_pthread_special_flags_added=yes]) + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ + test "x$ax_pthread_prio_inherit_defined" != "xyes"], + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.]) + ax_pthread_prio_inherit_defined=yes + ]) + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != "xyes"; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], + [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test "x$ax_pthread_ok" = "xyes"; then + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff -Nru nodejs-mozilla-12.18.1/deps/uv/m4/.gitignore nodejs-mozilla-12.22.12/deps/uv/m4/.gitignore --- nodejs-mozilla-12.18.1/deps/uv/m4/.gitignore 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/m4/.gitignore 2022-04-05 07:17:01.000000000 +0000 @@ -1,4 +1,5 @@ # Ignore libtoolize-generated files. *.m4 !as_case.m4 +!ax_pthread.m4 !libuv-check-flags.m4 diff -Nru nodejs-mozilla-12.18.1/deps/uv/.mailmap nodejs-mozilla-12.22.12/deps/uv/.mailmap --- nodejs-mozilla-12.18.1/deps/uv/.mailmap 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/.mailmap 2022-04-05 07:17:01.000000000 +0000 @@ -27,6 +27,7 @@ Marc Schlaich Michael Michael Neumann +Michael Penick Nicholas Vavilov Nick Logan Rasmus Christian Pedersen @@ -41,10 +42,12 @@ Saúl Ibarra Corretgé Saúl Ibarra Corretgé Shigeki Ohtsu +TK-one Timothy J. Fontaine Yasuhiro Matsumoto Yazhong Liu Yuki Okumura +gengjiawen jBarz jBarz ptlomholt diff -Nru nodejs-mozilla-12.18.1/deps/uv/Makefile.am nodejs-mozilla-12.22.12/deps/uv/Makefile.am --- nodejs-mozilla-12.18.1/deps/uv/Makefile.am 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/Makefile.am 2022-04-05 07:17:01.000000000 +0000 @@ -203,6 +203,7 @@ test/test-loop-stop.c \ test/test-loop-time.c \ test/test-loop-configure.c \ + test/test-metrics.c \ test/test-multiple-listen.c \ test/test-mutexes.c \ test/test-osx-select.c \ @@ -259,6 +260,7 @@ test/test-tcp-flags.c \ test/test-tcp-open.c \ test/test-tcp-read-stop.c \ + test/test-tcp-read-stop-start.c \ test/test-tcp-shutdown-after-write.c \ test/test-tcp-unexpected-read.c \ test/test-tcp-oob.c \ @@ -269,6 +271,7 @@ test/test-tcp-try-write.c \ test/test-tcp-try-write-error.c \ test/test-tcp-write-queue-order.c \ + test/test-test-macros.c \ test/test-thread-equal.c \ test/test-thread.c \ test/test-threadpool-cancel.c \ @@ -286,6 +289,7 @@ test/test-udp-create-socket-early.c \ test/test-udp-dgram-too-big.c \ test/test-udp-ipv6.c \ + test/test-udp-mmsg.c \ test/test-udp-multicast-interface.c \ test/test-udp-multicast-interface6.c \ test/test-udp-multicast-join.c \ @@ -296,6 +300,7 @@ test/test-udp-send-and-recv.c \ test/test-udp-send-hang-loop.c \ test/test-udp-send-immediate.c \ + test/test-udp-sendmmsg-error.c \ test/test-udp-send-unreachable.c \ test/test-udp-try-send.c \ test/test-uname.c \ @@ -373,12 +378,12 @@ libuv_la_SOURCES += src/unix/aix-common.c \ src/unix/ibmi.c \ src/unix/posix-poll.c \ - src/unix/no-fsevents.c \ - src/unix/no-proctitle.c + src/unix/no-fsevents.c endif if ANDROID uvinclude_HEADERS += include/uv/android-ifaddrs.h +libuv_la_CFLAGS += -D_GNU_SOURCE libuv_la_SOURCES += src/unix/android-ifaddrs.c \ src/unix/linux-core.c \ src/unix/linux-inotify.c \ @@ -386,8 +391,7 @@ src/unix/procfs-exepath.c \ src/unix/pthread-fixes.c \ src/unix/random-getrandom.c \ - src/unix/random-sysctl-linux.c \ - src/unix/sysinfo-loadavg.c + src/unix/random-sysctl-linux.c endif if CYGWIN @@ -468,8 +472,7 @@ src/unix/procfs-exepath.c \ src/unix/proctitle.c \ src/unix/random-getrandom.c \ - src/unix/random-sysctl-linux.c \ - src/unix/sysinfo-loadavg.c + src/unix/random-sysctl-linux.c test_run_tests_LDFLAGS += -lutil endif diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/idna.c nodejs-mozilla-12.22.12/deps/uv/src/idna.c --- nodejs-mozilla-12.18.1/deps/uv/src/idna.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/idna.c 2022-04-05 07:17:01.000000000 +0000 @@ -19,6 +19,7 @@ #include "uv.h" #include "idna.h" +#include #include static unsigned uv__utf8_decode1_slow(const char** p, @@ -32,7 +33,7 @@ if (a > 0xF7) return -1; - switch (*p - pe) { + switch (pe - *p) { default: if (a > 0xEF) { min = 0x10000; @@ -62,6 +63,8 @@ a = 0; break; } + /* Fall through. */ + case 0: return -1; /* Invalid continuation byte. */ } @@ -88,6 +91,8 @@ unsigned uv__utf8_decode1(const char** p, const char* pe) { unsigned a; + assert(*p < pe); + a = (unsigned char) *(*p)++; if (a < 128) @@ -96,9 +101,6 @@ return uv__utf8_decode1_slow(p, pe, a); } -#define foreach_codepoint(c, p, pe) \ - for (; (void) (*p <= pe && (c = uv__utf8_decode1(p, pe))), *p <= pe;) - static int uv__idna_toascii_label(const char* s, const char* se, char** d, char* de) { static const char alphabet[] = "abcdefghijklmnopqrstuvwxyz0123456789"; @@ -121,15 +123,22 @@ ss = s; todo = 0; - foreach_codepoint(c, &s, se) { + /* Note: after this loop we've visited all UTF-8 characters and know + * they're legal so we no longer need to check for decode errors. + */ + while (s < se) { + c = uv__utf8_decode1(&s, se); + + if (c == -1u) + return UV_EINVAL; + if (c < 128) h++; - else if (c == (unsigned) -1) - return UV_EINVAL; else todo++; } + /* Only write "xn--" when there are non-ASCII characters. */ if (todo > 0) { if (*d < de) *(*d)++ = 'x'; if (*d < de) *(*d)++ = 'n'; @@ -137,9 +146,13 @@ if (*d < de) *(*d)++ = '-'; } + /* Write ASCII characters. */ x = 0; s = ss; - foreach_codepoint(c, &s, se) { + while (s < se) { + c = uv__utf8_decode1(&s, se); + assert(c != -1u); + if (c > 127) continue; @@ -166,10 +179,15 @@ while (todo > 0) { m = -1; s = ss; - foreach_codepoint(c, &s, se) + + while (s < se) { + c = uv__utf8_decode1(&s, se); + assert(c != -1u); + if (c >= n) if (c < m) m = c; + } x = m - n; y = h + 1; @@ -181,7 +199,10 @@ n = m; s = ss; - foreach_codepoint(c, &s, se) { + while (s < se) { + c = uv__utf8_decode1(&s, se); + assert(c != -1u); + if (c < n) if (++delta == 0) return UV_E2BIG; /* Overflow. */ @@ -245,8 +266,6 @@ return 0; } -#undef foreach_codepoint - long uv__idna_toascii(const char* s, const char* se, char* d, char* de) { const char* si; const char* st; @@ -256,10 +275,14 @@ ds = d; - for (si = s; si < se; /* empty */) { + si = s; + while (si < se) { st = si; c = uv__utf8_decode1(&si, se); + if (c == -1u) + return UV_EINVAL; + if (c != '.') if (c != 0x3002) /* 。 */ if (c != 0xFF0E) /* . */ diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/random.c nodejs-mozilla-12.22.12/deps/uv/src/random.c --- nodejs-mozilla-12.18.1/deps/uv/src/random.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/random.c 2022-04-05 07:17:01.000000000 +0000 @@ -33,7 +33,7 @@ #if defined(__PASE__) rc = uv__random_readpath("/dev/urandom", buf, buflen); -#elif defined(_AIX) +#elif defined(_AIX) || defined(__QNX__) rc = uv__random_readpath("/dev/random", buf, buflen); #elif defined(__APPLE__) || defined(__OpenBSD__) || \ (defined(__ANDROID_API__) && __ANDROID_API__ >= 28) diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/strscpy.c nodejs-mozilla-12.22.12/deps/uv/src/strscpy.c --- nodejs-mozilla-12.18.1/deps/uv/src/strscpy.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/strscpy.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,3 +1,24 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + #include "strscpy.h" #include /* SSIZE_MAX */ diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/strscpy.h nodejs-mozilla-12.22.12/deps/uv/src/strscpy.h --- nodejs-mozilla-12.18.1/deps/uv/src/strscpy.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/strscpy.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,3 +1,24 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + #ifndef UV_STRSCPY_H_ #define UV_STRSCPY_H_ diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/timer.c nodejs-mozilla-12.22.12/deps/uv/src/timer.c --- nodejs-mozilla-12.18.1/deps/uv/src/timer.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/timer.c 2022-04-05 07:17:01.000000000 +0000 @@ -130,6 +130,14 @@ } +uint64_t uv_timer_get_due_in(const uv_timer_t* handle) { + if (handle->loop->time >= handle->timeout) + return 0; + + return handle->timeout - handle->loop->time; +} + + int uv__next_timeout(const uv_loop_t* loop) { const struct heap_node* heap_node; const uv_timer_t* handle; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/aix.c nodejs-mozilla-12.22.12/deps/uv/src/unix/aix.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/aix.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/aix.c 2022-04-05 07:17:01.000000000 +0000 @@ -65,14 +65,15 @@ #define RDWR_BUF_SIZE 4096 #define EQ(a,b) (strcmp(a,b) == 0) -static uv_mutex_t process_title_mutex; -static uv_once_t process_title_mutex_once = UV_ONCE_INIT; +char* original_exepath = NULL; +uv_mutex_t process_title_mutex; +uv_once_t process_title_mutex_once = UV_ONCE_INIT; static void* args_mem = NULL; static char** process_argv = NULL; static int process_argc = 0; static char* process_title_ptr = NULL; -static void init_process_title_mutex_once(void) { +void init_process_title_mutex_once(void) { uv_mutex_init(&process_title_mutex); } @@ -145,6 +146,8 @@ int i; int rc; int add_failed; + int user_timeout; + int reset_timeout; if (loop->nfds == 0) { assert(QUEUE_EMPTY(&loop->watcher_queue)); @@ -214,7 +217,21 @@ base = loop->time; count = 48; /* Benchmarks suggest this gives the best throughput. */ + if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { + reset_timeout = 1; + user_timeout = timeout; + timeout = 0; + } else { + reset_timeout = 0; + } + for (;;) { + /* Only need to set the provider_entry_time if timeout != 0. The function + * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. + */ + if (timeout != 0) + uv__metrics_set_provider_entry_time(loop); + nfds = pollset_poll(loop->backend_fd, events, ARRAY_SIZE(events), @@ -227,6 +244,15 @@ SAVE_ERRNO(uv__update_time(loop)); if (nfds == 0) { + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + if (timeout == -1) + continue; + if (timeout > 0) + goto update_timeout; + } + assert(timeout != -1); return; } @@ -236,6 +262,11 @@ abort(); } + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + if (timeout == -1) continue; @@ -280,16 +311,25 @@ /* Run signal watchers last. This also affects child process watchers * because those are implemented in terms of signal watchers. */ - if (w == &loop->signal_io_watcher) + if (w == &loop->signal_io_watcher) { have_signals = 1; - else + } else { + uv__metrics_update_idle_time(loop); w->cb(loop, w, pe->revents); + } nevents++; } - if (have_signals != 0) + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + + if (have_signals != 0) { + uv__metrics_update_idle_time(loop); loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + } loop->watchers[loop->nwatchers] = NULL; loop->watchers[loop->nwatchers + 1] = NULL; @@ -830,6 +870,7 @@ char** uv_setup_args(int argc, char** argv) { + char exepath[UV__PATH_MAX]; char** new_argv; size_t size; char* s; @@ -845,6 +886,15 @@ process_argv = argv; process_argc = argc; + /* Use argv[0] to determine value for uv_exepath(). */ + size = sizeof(exepath); + if (uv__search_path(argv[0], exepath, &size) == 0) { + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + original_exepath = uv__strdup(exepath); + uv_mutex_unlock(&process_title_mutex); + } + /* Calculate how much memory we need for the argv strings. */ size = 0; for (i = 0; i < argc; i++) @@ -875,6 +925,10 @@ int uv_set_process_title(const char* title) { char* new_title; + /* If uv_setup_args wasn't called or failed, we can't continue. */ + if (process_argv == NULL || args_mem == NULL) + return UV_ENOBUFS; + /* We cannot free this pointer when libuv shuts down, * the process may still be using it. */ @@ -908,6 +962,10 @@ if (buffer == NULL || size == 0) return UV_EINVAL; + /* If uv_setup_args wasn't called, we can't continue. */ + if (process_argv == NULL) + return UV_ENOBUFS; + uv_once(&process_title_mutex_once, init_process_title_mutex_once); uv_mutex_lock(&process_title_mutex); diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/aix-common.c nodejs-mozilla-12.22.12/deps/uv/src/unix/aix-common.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/aix-common.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/aix-common.c 2022-04-05 07:17:01.000000000 +0000 @@ -22,42 +22,23 @@ #include "uv.h" #include "internal.h" -#include #include #include #include -#include -#include #include -#include -#include -#include -#include -#include -#include #include #include -#include -#include -#include -#include #include -#include -#include -#include - -#include #include -#include -#include -#include -#include -#include +extern char* original_exepath; +extern uv_mutex_t process_title_mutex; +extern uv_once_t process_title_mutex_once; +extern void init_process_title_mutex_once(void); uint64_t uv__hrtime(uv_clocktype_t type) { uint64_t G = 1000000000; @@ -78,80 +59,31 @@ */ int uv_exepath(char* buffer, size_t* size) { int res; - char args[PATH_MAX]; - char abspath[PATH_MAX]; - size_t abspath_size; + char args[UV__PATH_MAX]; + size_t cached_len; struct procsinfo pi; if (buffer == NULL || size == NULL || *size == 0) return UV_EINVAL; - pi.pi_pid = getpid(); - res = getargs(&pi, sizeof(pi), args, sizeof(args)); - if (res < 0) - return UV_EINVAL; - - /* - * Possibilities for args: - * i) an absolute path such as: /home/user/myprojects/nodejs/node - * ii) a relative path such as: ./node or ../myprojects/nodejs/node - * iii) a bare filename such as "node", after exporting PATH variable - * to its location. - */ - - /* Case i) and ii) absolute or relative paths */ - if (strchr(args, '/') != NULL) { - if (realpath(args, abspath) != abspath) - return UV__ERR(errno); - - abspath_size = strlen(abspath); - + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + if (original_exepath != NULL) { + cached_len = strlen(original_exepath); *size -= 1; - if (*size > abspath_size) - *size = abspath_size; - - memcpy(buffer, abspath, *size); + if (*size > cached_len) + *size = cached_len; + memcpy(buffer, original_exepath, *size); buffer[*size] = '\0'; - + uv_mutex_unlock(&process_title_mutex); return 0; - } else { - /* Case iii). Search PATH environment variable */ - char trypath[PATH_MAX]; - char *clonedpath = NULL; - char *token = NULL; - char *path = getenv("PATH"); - - if (path == NULL) - return UV_EINVAL; - - clonedpath = uv__strdup(path); - if (clonedpath == NULL) - return UV_ENOMEM; - - token = strtok(clonedpath, ":"); - while (token != NULL) { - snprintf(trypath, sizeof(trypath) - 1, "%s/%s", token, args); - if (realpath(trypath, abspath) == abspath) { - /* Check the match is executable */ - if (access(abspath, X_OK) == 0) { - abspath_size = strlen(abspath); - - *size -= 1; - if (*size > abspath_size) - *size = abspath_size; - - memcpy(buffer, abspath, *size); - buffer[*size] = '\0'; - - uv__free(clonedpath); - return 0; - } - } - token = strtok(NULL, ":"); - } - uv__free(clonedpath); + } + uv_mutex_unlock(&process_title_mutex); + pi.pi_pid = getpid(); + res = getargs(&pi, sizeof(pi), args, sizeof(args)); - /* Out of tokens (path entries), and no match found */ + if (res < 0) return UV_EINVAL; - } + + return uv__search_path(args, buffer, size); } diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/bsd-ifaddrs.c nodejs-mozilla-12.22.12/deps/uv/src/unix/bsd-ifaddrs.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/bsd-ifaddrs.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/bsd-ifaddrs.c 2022-04-05 07:17:01.000000000 +0000 @@ -113,7 +113,9 @@ address->address.address4 = *((struct sockaddr_in*) ent->ifa_addr); } - if (ent->ifa_netmask->sa_family == AF_INET6) { + if (ent->ifa_netmask == NULL) { + memset(&address->netmask, 0, sizeof(address->netmask)); + } else if (ent->ifa_netmask->sa_family == AF_INET6) { address->netmask.netmask6 = *((struct sockaddr_in6*) ent->ifa_netmask); } else { address->netmask.netmask4 = *((struct sockaddr_in*) ent->ifa_netmask); diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/core.c nodejs-mozilla-12.22.12/deps/uv/src/unix/core.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/core.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/core.c 2022-04-05 07:17:01.000000000 +0000 @@ -79,10 +79,6 @@ # endif #endif -#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 -# include /* for dlsym */ -#endif - #if defined(__MVS__) #include #endif @@ -220,15 +216,23 @@ #if defined(IOV_MAX) return IOV_MAX; #elif defined(_SC_IOV_MAX) - static int iovmax = -1; - if (iovmax == -1) { - iovmax = sysconf(_SC_IOV_MAX); - /* On some embedded devices (arm-linux-uclibc based ip camera), - * sysconf(_SC_IOV_MAX) can not get the correct value. The return - * value is -1 and the errno is EINPROGRESS. Degrade the value to 1. - */ - if (iovmax == -1) iovmax = 1; - } + static int iovmax_cached = -1; + int iovmax; + + iovmax = uv__load_relaxed(&iovmax_cached); + if (iovmax != -1) + return iovmax; + + /* On some embedded devices (arm-linux-uclibc based ip camera), + * sysconf(_SC_IOV_MAX) can not get the correct value. The return + * value is -1 and the errno is EINPROGRESS. Degrade the value to 1. + */ + iovmax = sysconf(_SC_IOV_MAX); + if (iovmax == -1) + iovmax = 1; + + uv__store_relaxed(&iovmax_cached, iovmax); + return iovmax; #else return 1024; @@ -379,6 +383,14 @@ timeout = uv_backend_timeout(loop); uv__io_poll(loop, timeout); + + /* Run one final update on the provider_idle_time in case uv__io_poll + * returned because the timeout expired, but no events were received. This + * call will be ignored if the provider_entry_time was either never set (if + * the timeout == 0) or was already updated b/c an event was received. + */ + uv__metrics_update_idle_time(loop); + uv__run_check(loop); uv__run_closing_handles(loop); @@ -662,7 +674,7 @@ int* end; #if defined(__linux__) static int no_msg_cmsg_cloexec; - if (no_msg_cmsg_cloexec == 0) { + if (0 == uv__load_relaxed(&no_msg_cmsg_cloexec)) { rc = recvmsg(fd, msg, flags | 0x40000000); /* MSG_CMSG_CLOEXEC */ if (rc != -1) return rc; @@ -671,7 +683,7 @@ rc = recvmsg(fd, msg, flags); if (rc == -1) return UV__ERR(errno); - no_msg_cmsg_cloexec = 1; + uv__store_relaxed(&no_msg_cmsg_cloexec, 1); } else { rc = recvmsg(fd, msg, flags); } @@ -1142,13 +1154,6 @@ size_t shell_size; long initsize; int r; -#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 - int (*getpwuid_r)(uid_t, struct passwd*, char*, size_t, struct passwd**); - - getpwuid_r = dlsym(RTLD_DEFAULT, "getpwuid_r"); - if (getpwuid_r == NULL) - return UV_ENOSYS; -#endif if (pwd == NULL) return UV_EINVAL; @@ -1531,3 +1536,78 @@ assert(rc == 0); } + +int uv__search_path(const char* prog, char* buf, size_t* buflen) { + char abspath[UV__PATH_MAX]; + size_t abspath_size; + char trypath[UV__PATH_MAX]; + char* cloned_path; + char* path_env; + char* token; + + if (buf == NULL || buflen == NULL || *buflen == 0) + return UV_EINVAL; + + /* + * Possibilities for prog: + * i) an absolute path such as: /home/user/myprojects/nodejs/node + * ii) a relative path such as: ./node or ../myprojects/nodejs/node + * iii) a bare filename such as "node", after exporting PATH variable + * to its location. + */ + + /* Case i) and ii) absolute or relative paths */ + if (strchr(prog, '/') != NULL) { + if (realpath(prog, abspath) != abspath) + return UV__ERR(errno); + + abspath_size = strlen(abspath); + + *buflen -= 1; + if (*buflen > abspath_size) + *buflen = abspath_size; + + memcpy(buf, abspath, *buflen); + buf[*buflen] = '\0'; + + return 0; + } + + /* Case iii). Search PATH environment variable */ + cloned_path = NULL; + token = NULL; + path_env = getenv("PATH"); + + if (path_env == NULL) + return UV_EINVAL; + + cloned_path = uv__strdup(path_env); + if (cloned_path == NULL) + return UV_ENOMEM; + + token = strtok(cloned_path, ":"); + while (token != NULL) { + snprintf(trypath, sizeof(trypath) - 1, "%s/%s", token, prog); + if (realpath(trypath, abspath) == abspath) { + /* Check the match is executable */ + if (access(abspath, X_OK) == 0) { + abspath_size = strlen(abspath); + + *buflen -= 1; + if (*buflen > abspath_size) + *buflen = abspath_size; + + memcpy(buf, abspath, *buflen); + buf[*buflen] = '\0'; + + uv__free(cloned_path); + return 0; + } + } + token = strtok(NULL, ":"); + } + uv__free(cloned_path); + + /* Out of tokens (path entries), and no match found */ + return UV_EINVAL; +} diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/darwin.c nodejs-mozilla-12.22.12/deps/uv/src/unix/darwin.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/darwin.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/darwin.c 2022-04-05 07:17:01.000000000 +0000 @@ -25,6 +25,7 @@ #include #include +#include #include #include #include /* _NSGetExecutablePath */ @@ -32,6 +33,15 @@ #include #include /* sysconf */ +#if !TARGET_OS_IPHONE +#include "darwin-stub.h" +#endif + +static uv_once_t once = UV_ONCE_INIT; +static uint64_t (*time_func)(void); +static mach_timebase_info_data_t timebase; + +typedef unsigned char UInt8; int uv__platform_loop_init(uv_loop_t* loop) { loop->cf_state = NULL; @@ -48,15 +58,19 @@ } -uint64_t uv__hrtime(uv_clocktype_t type) { - static mach_timebase_info_data_t info; - - if ((ACCESS_ONCE(uint32_t, info.numer) == 0 || - ACCESS_ONCE(uint32_t, info.denom) == 0) && - mach_timebase_info(&info) != KERN_SUCCESS) +static void uv__hrtime_init_once(void) { + if (KERN_SUCCESS != mach_timebase_info(&timebase)) abort(); - return mach_absolute_time() * info.numer / info.denom; + time_func = (uint64_t (*)(void)) dlsym(RTLD_DEFAULT, "mach_continuous_time"); + if (time_func == NULL) + time_func = mach_absolute_time; +} + + +uint64_t uv__hrtime(uv_clocktype_t type) { + uv_once(&once, uv__hrtime_init_once); + return time_func() * timebase.numer / timebase.denom; } @@ -171,17 +185,149 @@ return 0; } +static int uv__get_cpu_speed(uint64_t* speed) { + /* IOKit */ + void (*pIOObjectRelease)(io_object_t); + kern_return_t (*pIOMasterPort)(mach_port_t, mach_port_t*); + CFMutableDictionaryRef (*pIOServiceMatching)(const char*); + kern_return_t (*pIOServiceGetMatchingServices)(mach_port_t, + CFMutableDictionaryRef, + io_iterator_t*); + io_service_t (*pIOIteratorNext)(io_iterator_t); + CFTypeRef (*pIORegistryEntryCreateCFProperty)(io_registry_entry_t, + CFStringRef, + CFAllocatorRef, + IOOptionBits); + + /* CoreFoundation */ + CFStringRef (*pCFStringCreateWithCString)(CFAllocatorRef, + const char*, + CFStringEncoding); + CFStringEncoding (*pCFStringGetSystemEncoding)(void); + UInt8 *(*pCFDataGetBytePtr)(CFDataRef); + CFIndex (*pCFDataGetLength)(CFDataRef); + void (*pCFDataGetBytes)(CFDataRef, CFRange, UInt8*); + void (*pCFRelease)(CFTypeRef); + + void* core_foundation_handle; + void* iokit_handle; + int err; + + kern_return_t kr; + mach_port_t mach_port; + io_iterator_t it; + io_object_t service; + + mach_port = 0; + + err = UV_ENOENT; + core_foundation_handle = dlopen("/System/Library/Frameworks/" + "CoreFoundation.framework/" + "Versions/A/CoreFoundation", + RTLD_LAZY | RTLD_LOCAL); + iokit_handle = dlopen("/System/Library/Frameworks/IOKit.framework/" + "Versions/A/IOKit", + RTLD_LAZY | RTLD_LOCAL); + + if (core_foundation_handle == NULL || iokit_handle == NULL) + goto out; + +#define V(handle, symbol) \ + do { \ + *(void **)(&p ## symbol) = dlsym((handle), #symbol); \ + if (p ## symbol == NULL) \ + goto out; \ + } \ + while (0) + V(iokit_handle, IOMasterPort); + V(iokit_handle, IOServiceMatching); + V(iokit_handle, IOServiceGetMatchingServices); + V(iokit_handle, IOIteratorNext); + V(iokit_handle, IOObjectRelease); + V(iokit_handle, IORegistryEntryCreateCFProperty); + V(core_foundation_handle, CFStringCreateWithCString); + V(core_foundation_handle, CFStringGetSystemEncoding); + V(core_foundation_handle, CFDataGetBytePtr); + V(core_foundation_handle, CFDataGetLength); + V(core_foundation_handle, CFDataGetBytes); + V(core_foundation_handle, CFRelease); +#undef V + +#define S(s) pCFStringCreateWithCString(NULL, (s), kCFStringEncodingUTF8) + + kr = pIOMasterPort(MACH_PORT_NULL, &mach_port); + assert(kr == KERN_SUCCESS); + CFMutableDictionaryRef classes_to_match + = pIOServiceMatching("IOPlatformDevice"); + kr = pIOServiceGetMatchingServices(mach_port, classes_to_match, &it); + assert(kr == KERN_SUCCESS); + service = pIOIteratorNext(it); + + CFStringRef device_type_str = S("device_type"); + CFStringRef clock_frequency_str = S("clock-frequency"); + + while (service != 0) { + CFDataRef data; + data = pIORegistryEntryCreateCFProperty(service, + device_type_str, + NULL, + 0); + if (data) { + const UInt8* raw = pCFDataGetBytePtr(data); + if (strncmp((char*)raw, "cpu", 3) == 0 || + strncmp((char*)raw, "processor", 9) == 0) { + CFDataRef freq_ref; + freq_ref = pIORegistryEntryCreateCFProperty(service, + clock_frequency_str, + NULL, + 0); + if (freq_ref) { + uint32_t freq; + CFIndex len = pCFDataGetLength(freq_ref); + CFRange range; + range.location = 0; + range.length = len; + + pCFDataGetBytes(freq_ref, range, (UInt8*)&freq); + *speed = freq; + pCFRelease(freq_ref); + pCFRelease(data); + break; + } + } + pCFRelease(data); + } + + service = pIOIteratorNext(it); + } + + pIOObjectRelease(it); + + err = 0; +out: + if (core_foundation_handle != NULL) + dlclose(core_foundation_handle); + + if (iokit_handle != NULL) + dlclose(iokit_handle); + + mach_port_deallocate(mach_task_self(), mach_port); + + return err; +} + int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { unsigned int ticks = (unsigned int)sysconf(_SC_CLK_TCK), multiplier = ((uint64_t)1000L / ticks); char model[512]; - uint64_t cpuspeed; size_t size; unsigned int i; natural_t numcpus; mach_msg_type_number_t msg_type; processor_cpu_load_info_data_t *info; uv_cpu_info_t* cpu_info; + uint64_t cpuspeed; + int err; size = sizeof(model); if (sysctlbyname("machdep.cpu.brand_string", &model, &size, NULL, 0) && @@ -189,9 +335,9 @@ return UV__ERR(errno); } - size = sizeof(cpuspeed); - if (sysctlbyname("hw.cpufrequency", &cpuspeed, &size, NULL, 0)) - return UV__ERR(errno); + err = uv__get_cpu_speed(&cpuspeed); + if (err < 0) + return err; if (host_processor_info(mach_host_self(), PROCESSOR_CPU_LOAD_INFO, &numcpus, (processor_info_array_t*)&info, diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/darwin-stub.h nodejs-mozilla-12.22.12/deps/uv/src/unix/darwin-stub.h --- nodejs-mozilla-12.18.1/deps/uv/src/unix/darwin-stub.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/darwin-stub.h 2022-04-05 07:17:01.000000000 +0000 @@ -27,6 +27,7 @@ struct CFArrayCallBacks; struct CFRunLoopSourceContext; struct FSEventStreamContext; +struct CFRange; typedef double CFAbsoluteTime; typedef double CFTimeInterval; @@ -42,13 +43,23 @@ typedef void* CFAllocatorRef; typedef void* CFArrayRef; typedef void* CFBundleRef; +typedef void* CFDataRef; typedef void* CFDictionaryRef; +typedef void* CFMutableDictionaryRef; +typedef struct CFRange CFRange; typedef void* CFRunLoopRef; typedef void* CFRunLoopSourceRef; typedef void* CFStringRef; typedef void* CFTypeRef; typedef void* FSEventStreamRef; +typedef uint32_t IOOptionBits; +typedef unsigned int io_iterator_t; +typedef unsigned int io_object_t; +typedef unsigned int io_service_t; +typedef unsigned int io_registry_entry_t; + + typedef void (*FSEventStreamCallback)(const FSEventStreamRef, void*, size_t, @@ -69,6 +80,11 @@ void* pad[3]; }; +struct CFRange { + CFIndex location; + CFIndex length; +}; + static const CFStringEncoding kCFStringEncodingUTF8 = 0x8000100; static const OSStatus noErr = 0; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/freebsd.c nodejs-mozilla-12.22.12/deps/uv/src/unix/freebsd.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/freebsd.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/freebsd.c 2022-04-05 07:17:01.000000000 +0000 @@ -56,31 +56,6 @@ void uv__platform_loop_delete(uv_loop_t* loop) { } - -#ifdef __DragonFly__ -int uv_exepath(char* buffer, size_t* size) { - char abspath[PATH_MAX * 2 + 1]; - ssize_t abspath_size; - - if (buffer == NULL || size == NULL || *size == 0) - return UV_EINVAL; - - abspath_size = readlink("/proc/curproc/file", abspath, sizeof(abspath)); - if (abspath_size < 0) - return UV__ERR(errno); - - assert(abspath_size > 0); - *size -= 1; - - if (*size > abspath_size) - *size = abspath_size; - - memcpy(buffer, abspath, *size); - buffer[*size] = '\0'; - - return 0; -} -#else int uv_exepath(char* buffer, size_t* size) { char abspath[PATH_MAX * 2 + 1]; int mib[4]; @@ -110,7 +85,6 @@ return 0; } -#endif uint64_t uv_get_free_memory(void) { int freecount; @@ -290,25 +264,18 @@ } -int uv__sendmmsg(int fd, - struct uv__mmsghdr* mmsg, - unsigned int vlen, - unsigned int flags) { +int uv__sendmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) { #if __FreeBSD__ >= 11 - return sendmmsg(fd, mmsg, vlen, flags); + return sendmmsg(fd, mmsg, vlen, /* flags */ 0); #else return errno = ENOSYS, -1; #endif } -int uv__recvmmsg(int fd, - struct uv__mmsghdr* mmsg, - unsigned int vlen, - unsigned int flags, - struct timespec* timeout) { +int uv__recvmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) { #if __FreeBSD__ >= 11 - return recvmmsg(fd, mmsg, vlen, flags, timeout); + return recvmmsg(fd, mmsg, vlen, 0 /* flags */, NULL /* timeout */); #else return errno = ENOSYS, -1; #endif diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/fs.c nodejs-mozilla-12.22.12/deps/uv/src/unix/fs.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/fs.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/fs.c 2022-04-05 07:17:01.000000000 +0000 @@ -79,7 +79,11 @@ defined(__NetBSD__) # include # include -#elif defined(__sun) || defined(__MVS__) || defined(__NetBSD__) || defined(__HAIKU__) +#elif defined(__sun) || \ + defined(__MVS__) || \ + defined(__NetBSD__) || \ + defined(__HAIKU__) || \ + defined(__QNX__) # include #else # include @@ -229,11 +233,7 @@ struct timespec ts[2]; ts[0] = uv__fs_to_timespec(req->atime); ts[1] = uv__fs_to_timespec(req->mtime); -#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 - return utimensat(req->file, NULL, ts, 0); -#else return futimens(req->file, ts); -#endif #elif defined(__APPLE__) \ || defined(__DragonFly__) \ || defined(__FreeBSD__) \ @@ -310,13 +310,14 @@ if (path_length < pattern_size || strcmp(path + path_length - pattern_size, pattern)) { errno = EINVAL; - return -1; + r = -1; + goto clobber; } uv_once(&once, uv__mkostemp_initonce); #ifdef O_CLOEXEC - if (no_cloexec_support == 0 && uv__mkostemp != NULL) { + if (uv__load_relaxed(&no_cloexec_support) == 0 && uv__mkostemp != NULL) { r = uv__mkostemp(path, O_CLOEXEC); if (r >= 0) @@ -325,11 +326,11 @@ /* If mkostemp() returns EINVAL, it means the kernel doesn't support O_CLOEXEC, so we just fallback to mkstemp() below. */ if (errno != EINVAL) - return r; + goto clobber; /* We set the static variable so that next calls don't even try to use mkostemp. */ - no_cloexec_support = 1; + uv__store_relaxed(&no_cloexec_support, 1); } #endif /* O_CLOEXEC */ @@ -351,6 +352,9 @@ if (req->cb != NULL) uv_rwlock_rdunlock(&req->loop->cloexec_lock); +clobber: + if (r < 0) + path[0] = '\0'; return r; } @@ -460,7 +464,7 @@ result = preadv(req->file, (struct iovec*) req->bufs, req->nbufs, req->off); #else # if defined(__linux__) - if (no_preadv) retry: + if (uv__load_relaxed(&no_preadv)) retry: # endif { result = uv__fs_preadv(req->file, req->bufs, req->nbufs, req->off); @@ -472,7 +476,7 @@ req->nbufs, req->off); if (result == -1 && errno == ENOSYS) { - no_preadv = 1; + uv__store_relaxed(&no_preadv, 1); goto retry; } } @@ -629,7 +633,11 @@ static int uv__fs_statfs(uv_fs_t* req) { uv_statfs_t* stat_fs; -#if defined(__sun) || defined(__MVS__) || defined(__NetBSD__) || defined(__HAIKU__) +#if defined(__sun) || \ + defined(__MVS__) || \ + defined(__NetBSD__) || \ + defined(__HAIKU__) || \ + defined(__QNX__) struct statvfs buf; if (0 != statvfs(req->path, &buf)) @@ -646,7 +654,12 @@ return -1; } -#if defined(__sun) || defined(__MVS__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__) +#if defined(__sun) || \ + defined(__MVS__) || \ + defined(__OpenBSD__) || \ + defined(__NetBSD__) || \ + defined(__HAIKU__) || \ + defined(__QNX__) stat_fs->f_type = 0; /* f_type is not supported. */ #else stat_fs->f_type = buf.f_type; @@ -887,8 +900,27 @@ ssize_t r; off = req->off; + +#ifdef __linux__ + { + static int copy_file_range_support = 1; + + if (copy_file_range_support) { + r = uv__fs_copy_file_range(in_fd, NULL, out_fd, &off, req->bufsml[0].len, 0); + + if (r == -1 && errno == ENOSYS) { + errno = 0; + copy_file_range_support = 0; + } else { + goto ok; + } + } + } +#endif + r = sendfile(out_fd, in_fd, &off, req->bufsml[0].len); +ok: /* sendfile() on SunOS returns EINVAL if the target fd is not a socket but * it still writes out data. Fortunately, we can detect it by checking if * the offset has been updated. @@ -1131,7 +1163,7 @@ goto out; } - dst_flags = O_WRONLY | O_CREAT | O_TRUNC; + dst_flags = O_WRONLY | O_CREAT; if (req->flags & UV_FS_COPYFILE_EXCL) dst_flags |= O_EXCL; @@ -1150,16 +1182,26 @@ goto out; } - /* Get the destination file's mode. */ - if (fstat(dstfd, &dst_statsbuf)) { - err = UV__ERR(errno); - goto out; - } + /* If the file is not being opened exclusively, verify that the source and + destination are not the same file. If they are the same, bail out early. */ + if ((req->flags & UV_FS_COPYFILE_EXCL) == 0) { + /* Get the destination file's mode. */ + if (fstat(dstfd, &dst_statsbuf)) { + err = UV__ERR(errno); + goto out; + } - /* Check if srcfd and dstfd refer to the same file */ - if (src_statsbuf.st_dev == dst_statsbuf.st_dev && - src_statsbuf.st_ino == dst_statsbuf.st_ino) { - goto out; + /* Check if srcfd and dstfd refer to the same file */ + if (src_statsbuf.st_dev == dst_statsbuf.st_dev && + src_statsbuf.st_ino == dst_statsbuf.st_ino) { + goto out; + } + + /* Truncate the file in case the destination already existed. */ + if (ftruncate(dstfd, 0) != 0) { + err = UV__ERR(errno); + goto out; + } } if (fchmod(dstfd, src_statsbuf.st_mode) == -1) { @@ -1355,7 +1397,7 @@ int mode; int rc; - if (no_statx) + if (uv__load_relaxed(&no_statx)) return UV_ENOSYS; dirfd = AT_FDCWD; @@ -1388,7 +1430,7 @@ * implemented, rc might return 1 with 0 set as the error code in which * case we return ENOSYS. */ - no_statx = 1; + uv__store_relaxed(&no_statx, 1); return UV_ENOSYS; } diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/ibmi.c nodejs-mozilla-12.22.12/deps/uv/src/unix/ibmi.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/ibmi.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/ibmi.c 2022-04-05 07:17:01.000000000 +0000 @@ -58,6 +58,9 @@ #include #include +char* original_exepath = NULL; +uv_mutex_t process_title_mutex; +uv_once_t process_title_mutex_once = UV_ONCE_INIT; typedef struct { int bytes_available; @@ -171,6 +174,9 @@ dst[i] = a2e[' ']; } +void init_process_title_mutex_once(void) { + uv_mutex_init(&process_title_mutex); +} static int get_ibmi_system_status(SSTS0200* rcvr) { /* rcvrlen is input parameter 2 to QWCRSSTS */ @@ -459,3 +465,37 @@ uv__free(addresses); } + +char** uv_setup_args(int argc, char** argv) { + char exepath[UV__PATH_MAX]; + char* s; + size_t size; + + if (argc > 0) { + /* Use argv[0] to determine value for uv_exepath(). */ + size = sizeof(exepath); + if (uv__search_path(argv[0], exepath, &size) == 0) { + uv_once(&process_title_mutex_once, init_process_title_mutex_once); + uv_mutex_lock(&process_title_mutex); + original_exepath = uv__strdup(exepath); + uv_mutex_unlock(&process_title_mutex); + } + } + + return argv; +} + +int uv_set_process_title(const char* title) { + return 0; +} + +int uv_get_process_title(char* buffer, size_t size) { + if (buffer == NULL || size == 0) + return UV_EINVAL; + + buffer[0] = '\0'; + return 0; +} + +void uv__process_title_cleanup(void) { +} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/internal.h nodejs-mozilla-12.22.12/deps/uv/src/unix/internal.h --- nodejs-mozilla-12.18.1/deps/uv/src/unix/internal.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/internal.h 2022-04-05 07:17:01.000000000 +0000 @@ -62,9 +62,7 @@ # include #endif -#if defined(_POSIX_PATH_MAX) -# define UV__PATH_MAX _POSIX_PATH_MAX -#elif defined(PATH_MAX) +#if defined(PATH_MAX) # define UV__PATH_MAX PATH_MAX #else # define UV__PATH_MAX 8192 @@ -268,6 +266,7 @@ uv_handle_type uv__handle_type(int fd); FILE* uv__open_file(const char* path); int uv__getpwuid_r(uv_passwd_t* pwd); +int uv__search_path(const char* prog, char* buf, size_t* buflen); /* random */ int uv__random_devurandom(void* buf, size_t buflen); @@ -335,15 +334,8 @@ unsigned int msg_len; }; -int uv__recvmmsg(int fd, - struct uv__mmsghdr* mmsg, - unsigned int vlen, - unsigned int flags, - struct timespec* timeout); -int uv__sendmmsg(int fd, - struct uv__mmsghdr* mmsg, - unsigned int vlen, - unsigned int flags); +int uv__recvmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen); +int uv__sendmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen); #else #define HAVE_MMSG 0 #endif diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/kqueue.c nodejs-mozilla-12.22.12/deps/uv/src/unix/kqueue.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/kqueue.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/kqueue.c 2022-04-05 07:17:01.000000000 +0000 @@ -82,7 +82,7 @@ process. So we sidestep the issue by pretending like we never started it in the first place. */ - uv__has_forked_with_cfrunloop = 1; + uv__store_relaxed(&uv__has_forked_with_cfrunloop, 1); uv__free(loop->cf_state); loop->cf_state = NULL; } @@ -129,6 +129,8 @@ int fd; int op; int i; + int user_timeout; + int reset_timeout; if (loop->nfds == 0) { assert(QUEUE_EMPTY(&loop->watcher_queue)); @@ -202,7 +204,21 @@ base = loop->time; count = 48; /* Benchmarks suggest this gives the best throughput. */ + if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { + reset_timeout = 1; + user_timeout = timeout; + timeout = 0; + } else { + reset_timeout = 0; + } + for (;; nevents = 0) { + /* Only need to set the provider_entry_time if timeout != 0. The function + * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. + */ + if (timeout != 0) + uv__metrics_set_provider_entry_time(loop); + if (timeout != -1) { spec.tv_sec = timeout / 1000; spec.tv_nsec = (timeout % 1000) * 1000000; @@ -228,6 +244,15 @@ SAVE_ERRNO(uv__update_time(loop)); if (nfds == 0) { + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + if (timeout == -1) + continue; + if (timeout > 0) + goto update_timeout; + } + assert(timeout != -1); return; } @@ -236,6 +261,11 @@ if (errno != EINTR) abort(); + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + if (timeout == 0) return; @@ -276,6 +306,7 @@ if (ev->filter == EVFILT_VNODE) { assert(w->events == POLLIN); assert(w->pevents == POLLIN); + uv__metrics_update_idle_time(loop); w->cb(loop, w, ev->fflags); /* XXX always uv__fs_event() */ nevents++; continue; @@ -337,16 +368,25 @@ /* Run signal watchers last. This also affects child process watchers * because those are implemented in terms of signal watchers. */ - if (w == &loop->signal_io_watcher) + if (w == &loop->signal_io_watcher) { have_signals = 1; - else + } else { + uv__metrics_update_idle_time(loop); w->cb(loop, w, revents); + } nevents++; } - if (have_signals != 0) + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + + if (have_signals != 0) { + uv__metrics_update_idle_time(loop); loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + } loop->watchers[loop->nwatchers] = NULL; loop->watchers[loop->nwatchers + 1] = NULL; @@ -487,7 +527,7 @@ if (!(statbuf.st_mode & S_IFDIR)) goto fallback; - if (!uv__has_forked_with_cfrunloop) { + if (0 == uv__load_relaxed(&uv__has_forked_with_cfrunloop)) { int r; /* The fallback fd is no longer needed */ uv__close_nocheckstdio(fd); @@ -522,8 +562,9 @@ uv__handle_stop(handle); #if defined(__APPLE__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 - if (!uv__has_forked_with_cfrunloop && handle->cf_cb != NULL) - r = uv__fsevents_close(handle); + if (0 == uv__load_relaxed(&uv__has_forked_with_cfrunloop)) + if (handle->cf_cb != NULL) + r = uv__fsevents_close(handle); #endif if (handle->event_watcher.fd != -1) { diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/linux-core.c nodejs-mozilla-12.22.12/deps/uv/src/unix/linux-core.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/linux-core.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/linux-core.c 2022-04-05 07:17:01.000000000 +0000 @@ -85,17 +85,7 @@ int uv__platform_loop_init(uv_loop_t* loop) { int fd; - - /* It was reported that EPOLL_CLOEXEC is not defined on Android API < 21, - * a.k.a. Lollipop. Since EPOLL_CLOEXEC is an alias for O_CLOEXEC on all - * architectures, we just use that instead. - */ -#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 - fd = -1; - errno = ENOSYS; -#else fd = epoll_create1(O_CLOEXEC); -#endif /* epoll_create1() can fail either because it's not implemented (old kernel) * or because it doesn't understand the O_CLOEXEC flag. @@ -208,8 +198,10 @@ * that being the largest value I have seen in the wild (and only once.) */ static const int max_safe_timeout = 1789569; - static int no_epoll_pwait; - static int no_epoll_wait; + static int no_epoll_pwait_cached; + static int no_epoll_wait_cached; + int no_epoll_pwait; + int no_epoll_wait; struct epoll_event events[1024]; struct epoll_event* pe; struct epoll_event e; @@ -226,6 +218,8 @@ int fd; int op; int i; + int user_timeout; + int reset_timeout; if (loop->nfds == 0) { assert(QUEUE_EMPTY(&loop->watcher_queue)); @@ -281,7 +275,31 @@ count = 48; /* Benchmarks suggest this gives the best throughput. */ real_timeout = timeout; + if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { + reset_timeout = 1; + user_timeout = timeout; + timeout = 0; + } else { + reset_timeout = 0; + user_timeout = 0; + } + + /* You could argue there is a dependency between these two but + * ultimately we don't care about their ordering with respect + * to one another. Worst case, we make a few system calls that + * could have been avoided because another thread already knows + * they fail with ENOSYS. Hardly the end of the world. + */ + no_epoll_pwait = uv__load_relaxed(&no_epoll_pwait_cached); + no_epoll_wait = uv__load_relaxed(&no_epoll_wait_cached); + for (;;) { + /* Only need to set the provider_entry_time if timeout != 0. The function + * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. + */ + if (timeout != 0) + uv__metrics_set_provider_entry_time(loop); + /* See the comment for max_safe_timeout for an explanation of why * this is necessary. Executive summary: kernel bug workaround. */ @@ -293,25 +311,24 @@ abort(); if (no_epoll_wait != 0 || (sigmask != 0 && no_epoll_pwait == 0)) { -#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 - nfds = -1; - errno = ENOSYS; -#else nfds = epoll_pwait(loop->backend_fd, events, ARRAY_SIZE(events), timeout, &sigset); -#endif - if (nfds == -1 && errno == ENOSYS) + if (nfds == -1 && errno == ENOSYS) { + uv__store_relaxed(&no_epoll_pwait_cached, 1); no_epoll_pwait = 1; + } } else { nfds = epoll_wait(loop->backend_fd, events, ARRAY_SIZE(events), timeout); - if (nfds == -1 && errno == ENOSYS) + if (nfds == -1 && errno == ENOSYS) { + uv__store_relaxed(&no_epoll_wait_cached, 1); no_epoll_wait = 1; + } } if (sigmask != 0 && no_epoll_pwait != 0) @@ -327,6 +344,14 @@ if (nfds == 0) { assert(timeout != -1); + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + + if (timeout == -1) + continue; + if (timeout == 0) return; @@ -346,6 +371,11 @@ if (errno != EINTR) abort(); + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + if (timeout == -1) continue; @@ -425,17 +455,26 @@ /* Run signal watchers last. This also affects child process watchers * because those are implemented in terms of signal watchers. */ - if (w == &loop->signal_io_watcher) + if (w == &loop->signal_io_watcher) { have_signals = 1; - else + } else { + uv__metrics_update_idle_time(loop); w->cb(loop, w, pe->events); + } nevents++; } } - if (have_signals != 0) + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + + if (have_signals != 0) { + uv__metrics_update_idle_time(loop); loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + } loop->watchers[loop->nwatchers] = NULL; loop->watchers[loop->nwatchers + 1] = NULL; @@ -483,18 +522,22 @@ /* TODO(bnoordhuis) Use CLOCK_MONOTONIC_COARSE for UV_CLOCK_PRECISE * when it has microsecond granularity or better (unlikely). */ - if (type == UV_CLOCK_FAST && fast_clock_id == -1) { - if (clock_getres(CLOCK_MONOTONIC_COARSE, &t) == 0 && - t.tv_nsec <= 1 * 1000 * 1000) { - fast_clock_id = CLOCK_MONOTONIC_COARSE; - } else { - fast_clock_id = CLOCK_MONOTONIC; - } - } + clock_id = CLOCK_MONOTONIC; + if (type != UV_CLOCK_FAST) + goto done; + + clock_id = uv__load_relaxed(&fast_clock_id); + if (clock_id != -1) + goto done; clock_id = CLOCK_MONOTONIC; - if (type == UV_CLOCK_FAST) - clock_id = fast_clock_id; + if (0 == clock_getres(CLOCK_MONOTONIC_COARSE, &t)) + if (t.tv_nsec <= 1 * 1000 * 1000) + clock_id = CLOCK_MONOTONIC_COARSE; + + uv__store_relaxed(&fast_clock_id, clock_id); + +done: if (clock_gettime(clock_id, &t)) return 0; /* Not really possible. */ @@ -982,43 +1025,51 @@ } -static uint64_t uv__read_proc_meminfo(const char* what) { - uint64_t rc; +static int uv__slurp(const char* filename, char* buf, size_t len) { ssize_t n; - char* p; int fd; - char buf[4096]; /* Large enough to hold all of /proc/meminfo. */ - rc = 0; - fd = uv__open_cloexec("/proc/meminfo", O_RDONLY); + assert(len > 0); + fd = uv__open_cloexec(filename, O_RDONLY); if (fd < 0) - return 0; + return fd; - n = read(fd, buf, sizeof(buf) - 1); + do + n = read(fd, buf, len - 1); + while (n == -1 && errno == EINTR); - if (n <= 0) - goto out; + if (uv__close_nocheckstdio(fd)) + abort(); + + if (n < 0) + return UV__ERR(errno); buf[n] = '\0'; - p = strstr(buf, what); - if (p == NULL) - goto out; + return 0; +} - p += strlen(what); - if (1 != sscanf(p, "%" PRIu64 " kB", &rc)) - goto out; +static uint64_t uv__read_proc_meminfo(const char* what) { + uint64_t rc; + char* p; + char buf[4096]; /* Large enough to hold all of /proc/meminfo. */ - rc *= 1024; + if (uv__slurp("/proc/meminfo", buf, sizeof(buf))) + return 0; -out: + p = strstr(buf, what); - if (uv__close_nocheckstdio(fd)) - abort(); + if (p == NULL) + return 0; - return rc; + p += strlen(what); + + rc = 0; + sscanf(p, "%" PRIu64 " kB", &rc); + + return rc * 1024; } @@ -1056,28 +1107,13 @@ static uint64_t uv__read_cgroups_uint64(const char* cgroup, const char* param) { char filename[256]; - uint64_t rc; - int fd; - ssize_t n; char buf[32]; /* Large enough to hold an encoded uint64_t. */ - - snprintf(filename, 256, "/sys/fs/cgroup/%s/%s", cgroup, param); + uint64_t rc; rc = 0; - fd = uv__open_cloexec(filename, O_RDONLY); - - if (fd < 0) - return 0; - - n = read(fd, buf, sizeof(buf) - 1); - - if (n > 0) { - buf[n] = '\0'; + snprintf(filename, sizeof(filename), "/sys/fs/cgroup/%s/%s", cgroup, param); + if (0 == uv__slurp(filename, buf, sizeof(buf))) sscanf(buf, "%" PRIu64, &rc); - } - - if (uv__close_nocheckstdio(fd)) - abort(); return rc; } @@ -1091,3 +1127,20 @@ */ return uv__read_cgroups_uint64("memory", "memory.limit_in_bytes"); } + + +void uv_loadavg(double avg[3]) { + struct sysinfo info; + char buf[128]; /* Large enough to hold all of /proc/loadavg. */ + + if (0 == uv__slurp("/proc/loadavg", buf, sizeof(buf))) + if (3 == sscanf(buf, "%lf %lf %lf", &avg[0], &avg[1], &avg[2])) + return; + + if (sysinfo(&info) < 0) + return; + + avg[0] = (double) info.loads[0] / 65536.0; + avg[1] = (double) info.loads[1] / 65536.0; + avg[2] = (double) info.loads[2] / 65536.0; +} diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/linux-syscalls.c nodejs-mozilla-12.22.12/deps/uv/src/unix/linux-syscalls.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/linux-syscalls.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/linux-syscalls.c 2022-04-05 07:17:01.000000000 +0000 @@ -37,8 +37,6 @@ #ifndef __NR_recvmmsg # if defined(__x86_64__) # define __NR_recvmmsg 299 -# elif defined(__i386__) -# define __NR_recvmmsg 337 # elif defined(__arm__) # define __NR_recvmmsg (UV_SYSCALL_BASE + 365) # endif @@ -47,8 +45,6 @@ #ifndef __NR_sendmmsg # if defined(__x86_64__) # define __NR_sendmmsg 307 -# elif defined(__i386__) -# define __NR_sendmmsg 345 # elif defined(__arm__) # define __NR_sendmmsg (UV_SYSCALL_BASE + 374) # endif @@ -94,6 +90,24 @@ # endif #endif /* __NR_pwritev */ +#ifndef __NR_copy_file_range +# if defined(__x86_64__) +# define __NR_copy_file_range 326 +# elif defined(__i386__) +# define __NR_copy_file_range 377 +# elif defined(__s390__) +# define __NR_copy_file_range 375 +# elif defined(__arm__) +# define __NR_copy_file_range (UV_SYSCALL_BASE + 391) +# elif defined(__aarch64__) +# define __NR_copy_file_range 285 +# elif defined(__powerpc__) +# define __NR_copy_file_range 379 +# elif defined(__arc__) +# define __NR_copy_file_range 285 +# endif +#endif /* __NR_copy_file_range */ + #ifndef __NR_statx # if defined(__x86_64__) # define __NR_statx 332 @@ -128,25 +142,51 @@ struct uv__mmsghdr; -int uv__sendmmsg(int fd, - struct uv__mmsghdr* mmsg, - unsigned int vlen, - unsigned int flags) { -#if defined(__NR_sendmmsg) - return syscall(__NR_sendmmsg, fd, mmsg, vlen, flags); +int uv__sendmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) { +#if defined(__i386__) + unsigned long args[4]; + int rc; + + args[0] = (unsigned long) fd; + args[1] = (unsigned long) mmsg; + args[2] = (unsigned long) vlen; + args[3] = /* flags */ 0; + + /* socketcall() raises EINVAL when SYS_SENDMMSG is not supported. */ + rc = syscall(/* __NR_socketcall */ 102, 20 /* SYS_SENDMMSG */, args); + if (rc == -1) + if (errno == EINVAL) + errno = ENOSYS; + + return rc; +#elif defined(__NR_sendmmsg) + return syscall(__NR_sendmmsg, fd, mmsg, vlen, /* flags */ 0); #else return errno = ENOSYS, -1; #endif } -int uv__recvmmsg(int fd, - struct uv__mmsghdr* mmsg, - unsigned int vlen, - unsigned int flags, - struct timespec* timeout) { -#if defined(__NR_recvmmsg) - return syscall(__NR_recvmmsg, fd, mmsg, vlen, flags, timeout); +int uv__recvmmsg(int fd, struct uv__mmsghdr* mmsg, unsigned int vlen) { +#if defined(__i386__) + unsigned long args[5]; + int rc; + + args[0] = (unsigned long) fd; + args[1] = (unsigned long) mmsg; + args[2] = (unsigned long) vlen; + args[3] = /* flags */ 0; + args[4] = /* timeout */ 0; + + /* socketcall() raises EINVAL when SYS_RECVMMSG is not supported. */ + rc = syscall(/* __NR_socketcall */ 102, 19 /* SYS_RECVMMSG */, args); + if (rc == -1) + if (errno == EINVAL) + errno = ENOSYS; + + return rc; +#elif defined(__NR_recvmmsg) + return syscall(__NR_recvmmsg, fd, mmsg, vlen, /* flags */ 0, /* timeout */ 0); #else return errno = ENOSYS, -1; #endif @@ -177,6 +217,28 @@ #else return errno = ENOSYS, -1; #endif +} + + +ssize_t +uv__fs_copy_file_range(int fd_in, + ssize_t* off_in, + int fd_out, + ssize_t* off_out, + size_t len, + unsigned int flags) +{ +#ifdef __NR_copy_file_range + return syscall(__NR_copy_file_range, + fd_in, + off_in, + fd_out, + off_out, + len, + flags); +#else + return errno = ENOSYS, -1; +#endif } diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/linux-syscalls.h nodejs-mozilla-12.22.12/deps/uv/src/unix/linux-syscalls.h --- nodejs-mozilla-12.18.1/deps/uv/src/unix/linux-syscalls.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/linux-syscalls.h 2022-04-05 07:17:01.000000000 +0000 @@ -64,6 +64,13 @@ ssize_t uv__preadv(int fd, const struct iovec *iov, int iovcnt, int64_t offset); ssize_t uv__pwritev(int fd, const struct iovec *iov, int iovcnt, int64_t offset); int uv__dup3(int oldfd, int newfd, int flags); +ssize_t +uv__fs_copy_file_range(int fd_in, + ssize_t* off_in, + int fd_out, + ssize_t* off_out, + size_t len, + unsigned int flags); int uv__statx(int dirfd, const char* path, int flags, diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/loop.c nodejs-mozilla-12.22.12/deps/uv/src/unix/loop.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/loop.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/loop.c 2022-04-05 07:17:01.000000000 +0000 @@ -28,6 +28,7 @@ #include int uv_loop_init(uv_loop_t* loop) { + uv__loop_internal_fields_t* lfields; void* saved_data; int err; @@ -36,6 +37,15 @@ memset(loop, 0, sizeof(*loop)); loop->data = saved_data; + lfields = (uv__loop_internal_fields_t*) uv__calloc(1, sizeof(*lfields)); + if (lfields == NULL) + return UV_ENOMEM; + loop->internal_fields = lfields; + + err = uv_mutex_init(&lfields->loop_metrics.lock); + if (err) + goto fail_metrics_mutex_init; + heap_init((struct heap*) &loop->timer_heap); QUEUE_INIT(&loop->wq); QUEUE_INIT(&loop->idle_handles); @@ -66,7 +76,7 @@ err = uv__platform_loop_init(loop); if (err) - return err; + goto fail_platform_init; uv__signal_global_once_init(); err = uv_signal_init(loop, &loop->child_watcher); @@ -106,6 +116,13 @@ fail_signal_init: uv__platform_loop_delete(loop); +fail_platform_init: + uv_mutex_destroy(&lfields->loop_metrics.lock); + +fail_metrics_mutex_init: + uv__free(lfields); + loop->internal_fields = NULL; + uv__free(loop->watchers); loop->nwatchers = 0; return err; @@ -146,6 +163,8 @@ void uv__loop_close(uv_loop_t* loop) { + uv__loop_internal_fields_t* lfields; + uv__signal_loop_cleanup(loop); uv__platform_loop_delete(loop); uv__async_stop(loop); @@ -181,10 +200,23 @@ uv__free(loop->watchers); loop->watchers = NULL; loop->nwatchers = 0; + + lfields = uv__get_internal_fields(loop); + uv_mutex_destroy(&lfields->loop_metrics.lock); + uv__free(lfields); + loop->internal_fields = NULL; } int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) { + uv__loop_internal_fields_t* lfields; + + lfields = uv__get_internal_fields(loop); + if (option == UV_METRICS_IDLE_TIME) { + lfields->flags |= UV_METRICS_IDLE_TIME; + return 0; + } + if (option != UV_LOOP_BLOCK_SIGNAL) return UV_ENOSYS; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/os390.c nodejs-mozilla-12.22.12/deps/uv/src/unix/os390.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/os390.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/os390.c 2022-04-05 07:17:01.000000000 +0000 @@ -254,8 +254,6 @@ int uv_exepath(char* buffer, size_t* size) { int res; char args[PATH_MAX]; - char abspath[PATH_MAX]; - size_t abspath_size; int pid; if (buffer == NULL || size == NULL || *size == 0) @@ -266,69 +264,7 @@ if (res < 0) return UV_EINVAL; - /* - * Possibilities for args: - * i) an absolute path such as: /home/user/myprojects/nodejs/node - * ii) a relative path such as: ./node or ../myprojects/nodejs/node - * iii) a bare filename such as "node", after exporting PATH variable - * to its location. - */ - - /* Case i) and ii) absolute or relative paths */ - if (strchr(args, '/') != NULL) { - if (realpath(args, abspath) != abspath) - return UV__ERR(errno); - - abspath_size = strlen(abspath); - - *size -= 1; - if (*size > abspath_size) - *size = abspath_size; - - memcpy(buffer, abspath, *size); - buffer[*size] = '\0'; - - return 0; - } else { - /* Case iii). Search PATH environment variable */ - char trypath[PATH_MAX]; - char* clonedpath = NULL; - char* token = NULL; - char* path = getenv("PATH"); - - if (path == NULL) - return UV_EINVAL; - - clonedpath = uv__strdup(path); - if (clonedpath == NULL) - return UV_ENOMEM; - - token = strtok(clonedpath, ":"); - while (token != NULL) { - snprintf(trypath, sizeof(trypath) - 1, "%s/%s", token, args); - if (realpath(trypath, abspath) == abspath) { - /* Check the match is executable */ - if (access(abspath, X_OK) == 0) { - abspath_size = strlen(abspath); - - *size -= 1; - if (*size > abspath_size) - *size = abspath_size; - - memcpy(buffer, abspath, *size); - buffer[*size] = '\0'; - - uv__free(clonedpath); - return 0; - } - } - token = strtok(NULL, ":"); - } - uv__free(clonedpath); - - /* Out of tokens (path entries), and no match found */ - return UV_EINVAL; - } + return uv__search_path(args, buffer, size); } @@ -818,6 +754,8 @@ int fd; int op; int i; + int user_timeout; + int reset_timeout; if (loop->nfds == 0) { assert(QUEUE_EMPTY(&loop->watcher_queue)); @@ -870,8 +808,22 @@ real_timeout = timeout; int nevents = 0; + if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { + reset_timeout = 1; + user_timeout = timeout; + timeout = 0; + } else { + reset_timeout = 0; + } + nfds = 0; for (;;) { + /* Only need to set the provider_entry_time if timeout != 0. The function + * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. + */ + if (timeout != 0) + uv__metrics_set_provider_entry_time(loop); + if (sizeof(int32_t) == sizeof(long) && timeout >= max_safe_timeout) timeout = max_safe_timeout; @@ -887,12 +839,21 @@ if (nfds == 0) { assert(timeout != -1); - if (timeout > 0) { - timeout = real_timeout - timeout; - continue; + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; } - return; + if (timeout == -1) + continue; + + if (timeout == 0) + return; + + /* We may have been inside the system call for longer than |timeout| + * milliseconds so we need to update the timestamp to avoid drift. + */ + goto update_timeout; } if (nfds == -1) { @@ -900,6 +861,11 @@ if (errno != EINTR) abort(); + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + if (timeout == -1) continue; @@ -954,6 +920,7 @@ pe->events |= w->pevents & (POLLIN | POLLOUT); if (pe->events != 0) { + uv__metrics_update_idle_time(loop); w->cb(loop, w, pe->events); nevents++; } @@ -961,6 +928,11 @@ loop->watchers[loop->nwatchers] = NULL; loop->watchers[loop->nwatchers + 1] = NULL; + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + if (nevents != 0) { if (nfds == ARRAY_SIZE(events) && --count != 0) { /* Poll for more events but don't block this time. */ diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/os390-syscalls.c nodejs-mozilla-12.22.12/deps/uv/src/unix/os390-syscalls.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/os390-syscalls.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/os390-syscalls.c 2022-04-05 07:17:01.000000000 +0000 @@ -33,7 +33,6 @@ #pragma linkage(BPX4CTW, OS) #pragma linkage(BPX1CTW, OS) -static int number_of_epolls; static QUEUE global_epoll_queue; static uv_mutex_t global_epoll_lock; static uv_once_t once = UV_ONCE_INIT; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/posix-poll.c nodejs-mozilla-12.22.12/deps/uv/src/unix/posix-poll.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/posix-poll.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/posix-poll.c 2022-04-05 07:17:01.000000000 +0000 @@ -144,6 +144,8 @@ int have_signals; struct pollfd* pe; int fd; + int user_timeout; + int reset_timeout; if (loop->nfds == 0) { assert(QUEUE_EMPTY(&loop->watcher_queue)); @@ -177,11 +179,25 @@ assert(timeout >= -1); time_base = loop->time; + if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { + reset_timeout = 1; + user_timeout = timeout; + timeout = 0; + } else { + reset_timeout = 0; + } + /* Loop calls to poll() and processing of results. If we get some * results from poll() but they turn out not to be interesting to * our caller then we need to loop around and poll() again. */ for (;;) { + /* Only need to set the provider_entry_time if timeout != 0. The function + * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. + */ + if (timeout != 0) + uv__metrics_set_provider_entry_time(loop); + if (pset != NULL) if (pthread_sigmask(SIG_BLOCK, pset, NULL)) abort(); @@ -197,6 +213,15 @@ SAVE_ERRNO(uv__update_time(loop)); if (nfds == 0) { + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + if (timeout == -1) + continue; + if (timeout > 0) + goto update_timeout; + } + assert(timeout != -1); return; } @@ -205,6 +230,11 @@ if (errno != EINTR) abort(); + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + if (timeout == -1) continue; @@ -254,6 +284,7 @@ if (w == &loop->signal_io_watcher) { have_signals = 1; } else { + uv__metrics_update_idle_time(loop); w->cb(loop, w, pe->revents); } @@ -261,8 +292,15 @@ } } - if (have_signals != 0) + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + + if (have_signals != 0) { + uv__metrics_update_idle_time(loop); loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + } loop->poll_fds_iterating = 0; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/proctitle.c nodejs-mozilla-12.22.12/deps/uv/src/unix/proctitle.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/proctitle.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/proctitle.c 2022-04-05 07:17:01.000000000 +0000 @@ -100,6 +100,10 @@ struct uv__process_title* pt; size_t len; + /* If uv_setup_args wasn't called or failed, we can't continue. */ + if (args_mem == NULL) + return UV_ENOBUFS; + pt = &process_title; len = strlen(title); @@ -126,6 +130,10 @@ if (buffer == NULL || size == 0) return UV_EINVAL; + /* If uv_setup_args wasn't called or failed, we can't continue. */ + if (args_mem == NULL) + return UV_ENOBUFS; + uv_once(&process_title_mutex_once, init_process_title_mutex_once); uv_mutex_lock(&process_title_mutex); diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/pthread-fixes.c nodejs-mozilla-12.22.12/deps/uv/src/unix/pthread-fixes.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/pthread-fixes.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/pthread-fixes.c 2022-04-05 07:17:01.000000000 +0000 @@ -30,6 +30,8 @@ */ /* Android versions < 4.1 have a broken pthread_sigmask. */ +#include "uv-common.h" + #include #include #include @@ -38,13 +40,13 @@ static int workaround; int err; - if (workaround) { + if (uv__load_relaxed(&workaround)) { return sigprocmask(how, set, oset); } else { err = pthread_sigmask(how, set, oset); if (err) { if (err == EINVAL && sigprocmask(how, set, oset) == 0) { - workaround = 1; + uv__store_relaxed(&workaround, 1); return 0; } else { return -1; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/qnx.c nodejs-mozilla-12.22.12/deps/uv/src/unix/qnx.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/qnx.c 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/qnx.c 2022-04-05 07:17:01.000000000 +0000 @@ -0,0 +1,137 @@ +/* Copyright libuv contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#include "uv.h" +#include "internal.h" + +#include +#include +#include +#include +#include +#include + +static void +get_mem_info(uint64_t* totalmem, uint64_t* freemem) { + mem_info_t msg; + + memset(&msg, 0, sizeof(msg)); + msg.i.type = _MEM_INFO; + msg.i.fd = -1; + + if (MsgSend(MEMMGR_COID, &msg.i, sizeof(msg.i), &msg.o, sizeof(msg.o)) + != -1) { + *totalmem = msg.o.info.__posix_tmi_total; + *freemem = msg.o.info.posix_tmi_length; + } else { + *totalmem = 0; + *freemem = 0; + } +} + + +void uv_loadavg(double avg[3]) { + avg[0] = 0.0; + avg[1] = 0.0; + avg[2] = 0.0; +} + + +int uv_exepath(char* buffer, size_t* size) { + char path[PATH_MAX]; + if (buffer == NULL || size == NULL || *size == 0) + return UV_EINVAL; + + realpath(_cmdname(NULL), path); + strlcpy(buffer, path, *size); + *size = strlen(buffer); + return 0; +} + + +uint64_t uv_get_free_memory(void) { + uint64_t totalmem; + uint64_t freemem; + get_mem_info(&totalmem, &freemem); + return freemem; +} + + +uint64_t uv_get_total_memory(void) { + uint64_t totalmem; + uint64_t freemem; + get_mem_info(&totalmem, &freemem); + return totalmem; +} + + +uint64_t uv_get_constrained_memory(void) { + return 0; +} + + +int uv_resident_set_memory(size_t* rss) { + int fd; + procfs_asinfo asinfo; + + fd = uv__open_cloexec("/proc/self/ctl", O_RDONLY); + if (fd == -1) + return UV__ERR(errno); + + if (devctl(fd, DCMD_PROC_ASINFO, &asinfo, sizeof(asinfo), 0) == -1) { + uv__close(fd); + return UV__ERR(errno); + } + + uv__close(fd); + *rss = asinfo.rss; + return 0; +} + + +int uv_uptime(double* uptime) { + struct qtime_entry* qtime = _SYSPAGE_ENTRY(_syspage_ptr, qtime); + *uptime = (qtime->nsec / 1000000000.0); + return 0; +} + + +int uv_cpu_info(uv_cpu_info_t** cpu_infos, int* count) { + struct cpuinfo_entry* cpuinfo = + (struct cpuinfo_entry*)_SYSPAGE_ENTRY(_syspage_ptr, new_cpuinfo); + size_t cpuinfo_size = _SYSPAGE_ELEMENT_SIZE(_syspage_ptr, cpuinfo); + struct strings_entry* strings = _SYSPAGE_ENTRY(_syspage_ptr, strings); + int num_cpus = _syspage_ptr->num_cpu; + int i; + + *count = num_cpus; + *cpu_infos = uv__malloc(num_cpus * sizeof(**cpu_infos)); + if (*cpu_infos == NULL) + return UV_ENOMEM; + + for (i = 0; i < num_cpus; i++) { + (*cpu_infos)[i].model = strdup(&strings->data[cpuinfo->name]); + (*cpu_infos)[i].speed = cpuinfo->speed; + SYSPAGE_ARRAY_ADJ_OFFSET(cpuinfo, cpuinfo, cpuinfo_size); + } + + return 0; +} diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/signal.c nodejs-mozilla-12.22.12/deps/uv/src/unix/signal.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/signal.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/signal.c 2022-04-05 07:17:01.000000000 +0000 @@ -143,6 +143,8 @@ if (sigfillset(&new_mask)) abort(); + /* to shut up valgrind */ + sigemptyset(saved_sigmask); if (pthread_sigmask(SIG_SETMASK, &new_mask, saved_sigmask)) abort(); diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/sunos.c nodejs-mozilla-12.22.12/deps/uv/src/unix/sunos.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/sunos.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/sunos.c 2022-04-05 07:17:01.000000000 +0000 @@ -154,6 +154,7 @@ sigset_t set; uint64_t base; uint64_t diff; + uint64_t idle_poll; unsigned int nfds; unsigned int i; int saved_errno; @@ -162,6 +163,8 @@ int count; int err; int fd; + int user_timeout; + int reset_timeout; if (loop->nfds == 0) { assert(QUEUE_EMPTY(&loop->watcher_queue)); @@ -199,7 +202,21 @@ base = loop->time; count = 48; /* Benchmarks suggest this gives the best throughput. */ + if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { + reset_timeout = 1; + user_timeout = timeout; + timeout = 0; + } else { + reset_timeout = 0; + } + for (;;) { + /* Only need to set the provider_entry_time if timeout != 0. The function + * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. + */ + if (timeout != 0) + uv__metrics_set_provider_entry_time(loop); + if (timeout != -1) { spec.tv_sec = timeout / 1000; spec.tv_nsec = (timeout % 1000) * 1000000; @@ -242,6 +259,11 @@ SAVE_ERRNO(uv__update_time(loop)); if (events[0].portev_source == 0) { + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + if (timeout == 0) return; @@ -282,10 +304,12 @@ /* Run signal watchers last. This also affects child process watchers * because those are implemented in terms of signal watchers. */ - if (w == &loop->signal_io_watcher) + if (w == &loop->signal_io_watcher) { have_signals = 1; - else + } else { + uv__metrics_update_idle_time(loop); w->cb(loop, w, pe->portev_events); + } nevents++; @@ -297,8 +321,15 @@ QUEUE_INSERT_TAIL(&loop->watcher_queue, &w->watcher_queue); } - if (have_signals != 0) + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + + if (have_signals != 0) { + uv__metrics_update_idle_time(loop); loop->signal_io_watcher.cb(loop, &loop->signal_io_watcher, POLLIN); + } loop->watchers[loop->nwatchers] = NULL; loop->watchers[loop->nwatchers + 1] = NULL; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/tcp.c nodejs-mozilla-12.22.12/deps/uv/src/unix/tcp.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/tcp.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/tcp.c 2022-04-05 07:17:01.000000000 +0000 @@ -326,16 +326,19 @@ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) { - static int single_accept = -1; + static int single_accept_cached = -1; unsigned long flags; + int single_accept; int err; if (tcp->delayed_error) return tcp->delayed_error; + single_accept = uv__load_relaxed(&single_accept_cached); if (single_accept == -1) { const char* val = getenv("UV_TCP_SINGLE_ACCEPT"); single_accept = (val != NULL && atoi(val) != 0); /* Off by default. */ + uv__store_relaxed(&single_accept_cached, single_accept); } if (single_accept) diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/thread.c nodejs-mozilla-12.22.12/deps/uv/src/unix/thread.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/thread.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/thread.c 2022-04-05 07:17:01.000000000 +0000 @@ -709,11 +709,9 @@ if (err) return UV__ERR(err); -#if !(defined(__ANDROID_API__) && __ANDROID_API__ < 21) err = pthread_condattr_setclock(&attr, CLOCK_MONOTONIC); if (err) goto error2; -#endif err = pthread_cond_init(cond, &attr); if (err) @@ -805,16 +803,7 @@ #endif ts.tv_sec = timeout / NANOSEC; ts.tv_nsec = timeout % NANOSEC; -#if defined(__ANDROID_API__) && __ANDROID_API__ < 21 - - /* - * The bionic pthread implementation doesn't support CLOCK_MONOTONIC, - * but has this alternative function instead. - */ - r = pthread_cond_timedwait_monotonic_np(cond, mutex, &ts); -#else r = pthread_cond_timedwait(cond, mutex, &ts); -#endif /* __ANDROID_API__ */ #endif diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/unix/udp.c nodejs-mozilla-12.22.12/deps/uv/src/unix/udp.c --- nodejs-mozilla-12.18.1/deps/uv/src/unix/udp.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/unix/udp.c 2022-04-05 07:17:01.000000000 +0000 @@ -73,12 +73,12 @@ s = uv__socket(AF_INET, SOCK_DGRAM, 0); if (s < 0) return; - ret = uv__sendmmsg(s, NULL, 0, 0); + ret = uv__sendmmsg(s, NULL, 0); if (ret == 0 || errno != ENOSYS) { uv__sendmmsg_avail = 1; uv__recvmmsg_avail = 1; } else { - ret = uv__recvmmsg(s, NULL, 0, 0, NULL); + ret = uv__recvmmsg(s, NULL, 0); if (ret == 0 || errno != ENOSYS) uv__recvmmsg_avail = 1; } @@ -213,7 +213,7 @@ } do - nread = uv__recvmmsg(handle->io_watcher.fd, msgs, chunks, 0, NULL); + nread = uv__recvmmsg(handle->io_watcher.fd, msgs, chunks); while (nread == -1 && errno == EINTR); if (nread < 1) { @@ -238,7 +238,7 @@ /* one last callback so the original buffer is freed */ if (handle->recv_cb != NULL) - handle->recv_cb(handle, 0, buf, NULL, 0); + handle->recv_cb(handle, 0, buf, NULL, UV_UDP_MMSG_FREE); } return nread; } @@ -270,14 +270,11 @@ assert(buf.base != NULL); #if HAVE_MMSG - if (handle->flags & UV_HANDLE_UDP_RECVMMSG) { - uv_once(&once, uv__udp_mmsg_init); - if (uv__recvmmsg_avail) { - nread = uv__udp_recvmmsg(handle, &buf); - if (nread > 0) - count -= nread; - continue; - } + if (uv_udp_using_recvmmsg(handle)) { + nread = uv__udp_recvmmsg(handle, &buf); + if (nread > 0) + count -= nread; + continue; } #endif @@ -359,7 +356,7 @@ } do - npkts = uv__sendmmsg(handle->io_watcher.fd, h, pkts, 0); + npkts = uv__sendmmsg(handle->io_watcher.fd, h, pkts); while (npkts == -1 && errno == EINTR); if (npkts < 1) { @@ -367,7 +364,7 @@ return; for (i = 0, q = QUEUE_HEAD(&handle->write_queue); i < pkts && q != &handle->write_queue; - ++i, q = QUEUE_HEAD(q)) { + ++i, q = QUEUE_HEAD(&handle->write_queue)) { assert(q != NULL); req = QUEUE_DATA(q, uv_udp_send_t, queue); assert(req != NULL); @@ -854,7 +851,11 @@ } -#if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__ANDROID__) +#if !defined(__OpenBSD__) && \ + !defined(__NetBSD__) && \ + !defined(__ANDROID__) && \ + !defined(__DragonFly__) & \ + !defined(__QNX__) static int uv__udp_set_source_membership4(uv_udp_t* handle, const struct sockaddr_in* multicast_addr, const char* interface_addr, @@ -976,6 +977,17 @@ } +int uv_udp_using_recvmmsg(const uv_udp_t* handle) { +#if HAVE_MMSG + if (handle->flags & UV_HANDLE_UDP_RECVMMSG) { + uv_once(&once, uv__udp_mmsg_init); + return uv__recvmmsg_avail; + } +#endif + return 0; +} + + int uv_udp_open(uv_udp_t* handle, uv_os_sock_t sock) { int err; @@ -1031,7 +1043,11 @@ const char* interface_addr, const char* source_addr, uv_membership membership) { -#if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__ANDROID__) +#if !defined(__OpenBSD__) && \ + !defined(__NetBSD__) && \ + !defined(__ANDROID__) && \ + !defined(__DragonFly__) && \ + !defined(__QNX__) int err; union uv__sockaddr mcast_addr; union uv__sockaddr src_addr; @@ -1138,7 +1154,7 @@ * and use the general uv__setsockopt_maybe_char call on other platforms. */ #if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ - defined(__MVS__) + defined(__MVS__) || defined(__QNX__) return uv__setsockopt(handle, IP_TTL, @@ -1147,7 +1163,7 @@ sizeof(ttl)); #else /* !(defined(__sun) || defined(_AIX) || defined (__OpenBSD__) || - defined(__MVS__)) */ + defined(__MVS__) || defined(__QNX__)) */ return uv__setsockopt_maybe_char(handle, IP_TTL, @@ -1155,7 +1171,7 @@ ttl); #endif /* defined(__sun) || defined(_AIX) || defined (__OpenBSD__) || - defined(__MVS__) */ + defined(__MVS__) || defined(__QNX__) */ } @@ -1167,7 +1183,7 @@ * and use the general uv__setsockopt_maybe_char call otherwise. */ #if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ - defined(__MVS__) + defined(__MVS__) || defined(__QNX__) if (handle->flags & UV_HANDLE_IPV6) return uv__setsockopt(handle, IP_MULTICAST_TTL, @@ -1175,7 +1191,7 @@ &ttl, sizeof(ttl)); #endif /* defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ - defined(__MVS__) */ + defined(__MVS__) || defined(__QNX__) */ return uv__setsockopt_maybe_char(handle, IP_MULTICAST_TTL, @@ -1192,7 +1208,7 @@ * and use the general uv__setsockopt_maybe_char call otherwise. */ #if defined(__sun) || defined(_AIX) || defined(__OpenBSD__) || \ - defined(__MVS__) + defined(__MVS__) || defined(__QNX__) if (handle->flags & UV_HANDLE_IPV6) return uv__setsockopt(handle, IP_MULTICAST_LOOP, @@ -1200,7 +1216,7 @@ &on, sizeof(on)); #endif /* defined(__sun) || defined(_AIX) ||defined(__OpenBSD__) || - defined(__MVS__) */ + defined(__MVS__) || defined(__QNX__) */ return uv__setsockopt_maybe_char(handle, IP_MULTICAST_LOOP, diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/uv-common.c nodejs-mozilla-12.22.12/deps/uv/src/uv-common.c --- nodejs-mozilla-12.18.1/deps/uv/src/uv-common.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/uv-common.c 2022-04-05 07:17:01.000000000 +0000 @@ -859,11 +859,70 @@ void uv_library_shutdown(void) { static int was_shutdown; - if (was_shutdown) + if (uv__load_relaxed(&was_shutdown)) return; uv__process_title_cleanup(); uv__signal_cleanup(); uv__threadpool_cleanup(); - was_shutdown = 1; + uv__store_relaxed(&was_shutdown, 1); +} + + +void uv__metrics_update_idle_time(uv_loop_t* loop) { + uv__loop_metrics_t* loop_metrics; + uint64_t entry_time; + uint64_t exit_time; + + if (!(uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME)) + return; + + loop_metrics = uv__get_loop_metrics(loop); + + /* The thread running uv__metrics_update_idle_time() is always the same + * thread that sets provider_entry_time. So it's unnecessary to lock before + * retrieving this value. + */ + if (loop_metrics->provider_entry_time == 0) + return; + + exit_time = uv_hrtime(); + + uv_mutex_lock(&loop_metrics->lock); + entry_time = loop_metrics->provider_entry_time; + loop_metrics->provider_entry_time = 0; + loop_metrics->provider_idle_time += exit_time - entry_time; + uv_mutex_unlock(&loop_metrics->lock); +} + + +void uv__metrics_set_provider_entry_time(uv_loop_t* loop) { + uv__loop_metrics_t* loop_metrics; + uint64_t now; + + if (!(uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME)) + return; + + now = uv_hrtime(); + loop_metrics = uv__get_loop_metrics(loop); + uv_mutex_lock(&loop_metrics->lock); + loop_metrics->provider_entry_time = now; + uv_mutex_unlock(&loop_metrics->lock); +} + + +uint64_t uv_metrics_idle_time(uv_loop_t* loop) { + uv__loop_metrics_t* loop_metrics; + uint64_t entry_time; + uint64_t idle_time; + + loop_metrics = uv__get_loop_metrics(loop); + uv_mutex_lock(&loop_metrics->lock); + idle_time = loop_metrics->provider_idle_time; + entry_time = loop_metrics->provider_entry_time; + uv_mutex_unlock(&loop_metrics->lock); + + if (entry_time > 0) + idle_time += uv_hrtime() - entry_time; + return idle_time; } diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/uv-common.h nodejs-mozilla-12.22.12/deps/uv/src/uv-common.h --- nodejs-mozilla-12.18.1/deps/uv/src/uv-common.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/uv-common.h 2022-04-05 07:17:01.000000000 +0000 @@ -60,6 +60,14 @@ #define STATIC_ASSERT(expr) \ void uv__static_assert(int static_assert_failed[1 - 2 * !(expr)]) +#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 7) +#define uv__load_relaxed(p) __atomic_load_n(p, __ATOMIC_RELAXED) +#define uv__store_relaxed(p, v) __atomic_store_n(p, v, __ATOMIC_RELAXED) +#else +#define uv__load_relaxed(p) (*p) +#define uv__store_relaxed(p, v) do *p = v; while (0) +#endif + /* Handle flags. Some flags are specific to Windows or UNIX. */ enum { /* Used by all handles. */ @@ -325,6 +333,12 @@ } \ while (0) +#define uv__get_internal_fields(loop) \ + ((uv__loop_internal_fields_t*) loop->internal_fields) + +#define uv__get_loop_metrics(loop) \ + (&uv__get_internal_fields(loop)->loop_metrics) + /* Allocator prototypes */ void *uv__calloc(size_t count, size_t size); char *uv__strdup(const char* s); @@ -334,4 +348,21 @@ void* uv__realloc(void* ptr, size_t size); void* uv__reallocf(void* ptr, size_t size); +typedef struct uv__loop_metrics_s uv__loop_metrics_t; +typedef struct uv__loop_internal_fields_s uv__loop_internal_fields_t; + +struct uv__loop_metrics_s { + uint64_t provider_entry_time; + uint64_t provider_idle_time; + uv_mutex_t lock; +}; + +void uv__metrics_update_idle_time(uv_loop_t* loop); +void uv__metrics_set_provider_entry_time(uv_loop_t* loop); + +struct uv__loop_internal_fields_s { + unsigned int flags; + uv__loop_metrics_t loop_metrics; +}; + #endif /* UV_COMMON_H_ */ diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/uv-data-getter-setters.c nodejs-mozilla-12.22.12/deps/uv/src/uv-data-getter-setters.c --- nodejs-mozilla-12.18.1/deps/uv/src/uv-data-getter-setters.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/uv-data-getter-setters.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,3 +1,24 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + #include "uv.h" const char* uv_handle_type_name(uv_handle_type type) { diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/core.c nodejs-mozilla-12.22.12/deps/uv/src/win/core.c --- nodejs-mozilla-12.18.1/deps/uv/src/win/core.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/core.c 2022-04-05 07:17:01.000000000 +0000 @@ -222,6 +222,7 @@ int uv_loop_init(uv_loop_t* loop) { + uv__loop_internal_fields_t* lfields; struct heap* timer_heap; int err; @@ -233,6 +234,15 @@ if (loop->iocp == NULL) return uv_translate_sys_error(GetLastError()); + lfields = (uv__loop_internal_fields_t*) uv__calloc(1, sizeof(*lfields)); + if (lfields == NULL) + return UV_ENOMEM; + loop->internal_fields = lfields; + + err = uv_mutex_init(&lfields->loop_metrics.lock); + if (err) + goto fail_metrics_mutex_init; + /* To prevent uninitialized memory access, loop->time must be initialized * to zero before calling uv_update_time for the first time. */ @@ -297,6 +307,11 @@ loop->timer_heap = NULL; fail_timers_alloc: + uv_mutex_destroy(&lfields->loop_metrics.lock); + +fail_metrics_mutex_init: + uv__free(lfields); + loop->internal_fields = NULL; CloseHandle(loop->iocp); loop->iocp = INVALID_HANDLE_VALUE; @@ -317,6 +332,7 @@ void uv__loop_close(uv_loop_t* loop) { + uv__loop_internal_fields_t* lfields; size_t i; uv__loops_remove(loop); @@ -347,11 +363,24 @@ uv__free(loop->timer_heap); loop->timer_heap = NULL; + lfields = uv__get_internal_fields(loop); + uv_mutex_destroy(&lfields->loop_metrics.lock); + uv__free(lfields); + loop->internal_fields = NULL; + CloseHandle(loop->iocp); } int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) { + uv__loop_internal_fields_t* lfields; + + lfields = uv__get_internal_fields(loop); + if (option == UV_METRICS_IDLE_TIME) { + lfields->flags |= UV_METRICS_IDLE_TIME; + return 0; + } + return UV_ENOSYS; } @@ -393,16 +422,44 @@ uv_req_t* req; int repeat; uint64_t timeout_time; + uint64_t user_timeout; + int reset_timeout; timeout_time = loop->time + timeout; + if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { + reset_timeout = 1; + user_timeout = timeout; + timeout = 0; + } else { + reset_timeout = 0; + } + for (repeat = 0; ; repeat++) { + /* Only need to set the provider_entry_time if timeout != 0. The function + * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. + */ + if (timeout != 0) + uv__metrics_set_provider_entry_time(loop); + GetQueuedCompletionStatus(loop->iocp, &bytes, &key, &overlapped, timeout); + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + + /* Placed here because on success the loop will break whether there is an + * empty package or not, or if GetQueuedCompletionStatus returned early then + * the timeout will be updated and the loop will run again. In either case + * the idle time will need to be updated. + */ + uv__metrics_update_idle_time(loop); + if (overlapped) { /* Package was dequeued */ req = uv_overlapped_to_req(overlapped); @@ -445,10 +502,26 @@ ULONG i; int repeat; uint64_t timeout_time; + uint64_t user_timeout; + int reset_timeout; timeout_time = loop->time + timeout; + if (uv__get_internal_fields(loop)->flags & UV_METRICS_IDLE_TIME) { + reset_timeout = 1; + user_timeout = timeout; + timeout = 0; + } else { + reset_timeout = 0; + } + for (repeat = 0; ; repeat++) { + /* Only need to set the provider_entry_time if timeout != 0. The function + * will return early if the loop isn't configured with UV_METRICS_IDLE_TIME. + */ + if (timeout != 0) + uv__metrics_set_provider_entry_time(loop); + success = pGetQueuedCompletionStatusEx(loop->iocp, overlappeds, ARRAY_SIZE(overlappeds), @@ -456,6 +529,18 @@ timeout, FALSE); + if (reset_timeout != 0) { + timeout = user_timeout; + reset_timeout = 0; + } + + /* Placed here because on success the loop will break whether there is an + * empty package or not, or if GetQueuedCompletionStatus returned early then + * the timeout will be updated and the loop will run again. In either case + * the idle time will need to be updated. + */ + uv__metrics_update_idle_time(loop); + if (success) { for (i = 0; i < count; i++) { /* Package was dequeued, but see if it is not a empty package @@ -534,6 +619,12 @@ else uv__poll_wine(loop, timeout); + /* Run one final update on the provider_idle_time in case uv__poll* + * returned because the timeout expired, but no events were received. This + * call will be ignored if the provider_entry_time was either never set (if + * the timeout == 0) or was already updated b/c an event was received. + */ + uv__metrics_update_idle_time(loop); uv_check_invoke(loop); uv_process_endgames(loop); diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/detect-wakeup.c nodejs-mozilla-12.22.12/deps/uv/src/win/detect-wakeup.c --- nodejs-mozilla-12.18.1/deps/uv/src/win/detect-wakeup.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/detect-wakeup.c 2022-04-05 07:17:01.000000000 +0000 @@ -1,3 +1,24 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + #include "uv.h" #include "internal.h" #include "winapi.h" diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/fs.c nodejs-mozilla-12.22.12/deps/uv/src/win/fs.c --- nodejs-mozilla-12.18.1/deps/uv/src/win/fs.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/fs.c 2022-04-05 07:17:01.000000000 +0000 @@ -70,10 +70,7 @@ #define SET_REQ_RESULT(req, result_value) \ do { \ req->result = (result_value); \ - if (req->result == -1) { \ - req->sys_errno_ = _doserrno; \ - req->result = uv_translate_sys_error(req->sys_errno_); \ - } \ + assert(req->result != -1); \ } while (0) #define SET_REQ_WIN32_ERROR(req, sys_errno) \ @@ -730,14 +727,14 @@ assert(errno == EBADF); SET_REQ_UV_ERROR(req, UV_EBADF, ERROR_INVALID_HANDLE); } else { - req->result = 0; + SET_REQ_RESULT(req, 0); } } LONG fs__filemap_ex_filter(LONG excode, PEXCEPTION_POINTERS pep, int* perror) { - if (excode != EXCEPTION_IN_PAGE_ERROR) { + if (excode != (LONG)EXCEPTION_IN_PAGE_ERROR) { return EXCEPTION_CONTINUE_SEARCH; } @@ -816,10 +813,10 @@ for (index = 0; index < req->fs.info.nbufs && done_read < read_size; ++index) { - int err = 0; size_t this_read_size = MIN(req->fs.info.bufs[index].len, read_size - done_read); #ifdef _MSC_VER + int err = 0; __try { #endif memcpy(req->fs.info.bufs[index].base, @@ -938,7 +935,7 @@ (UV_FS_O_RDONLY | UV_FS_O_WRONLY | UV_FS_O_RDWR); size_t write_size, done_write; unsigned int index; - LARGE_INTEGER zero, pos, end_pos; + LARGE_INTEGER pos, end_pos; size_t view_offset; LARGE_INTEGER view_base; void* view; @@ -963,7 +960,6 @@ return; } - zero.QuadPart = 0; if (force_append) { pos = fd_info->size; } else if (req->fs.info.offset == -1) { @@ -1014,8 +1010,8 @@ done_write = 0; for (index = 0; index < req->fs.info.nbufs; ++index) { - int err = 0; #ifdef _MSC_VER + int err = 0; __try { #endif memcpy((char*)view + view_offset + done_write, @@ -1128,7 +1124,10 @@ void fs__rmdir(uv_fs_t* req) { int result = _wrmdir(req->file.pathw); - SET_REQ_RESULT(req, result); + if (result == -1) + SET_REQ_WIN32_ERROR(req, _doserrno); + else + SET_REQ_RESULT(req, 0); } @@ -1221,12 +1220,12 @@ void fs__mkdir(uv_fs_t* req) { /* TODO: use req->mode. */ - req->result = _wmkdir(req->file.pathw); - if (req->result == -1) { - req->sys_errno_ = _doserrno; - req->result = req->sys_errno_ == ERROR_INVALID_NAME - ? UV_EINVAL - : uv_translate_sys_error(req->sys_errno_); + if (CreateDirectoryW(req->file.pathw, NULL)) { + SET_REQ_RESULT(req, 0); + } else { + SET_REQ_WIN32_ERROR(req, GetLastError()); + if (req->sys_errno_ == ERROR_INVALID_NAME) + req->result = UV_EINVAL; } } @@ -1242,19 +1241,21 @@ unsigned int tries, i; size_t len; uint64_t v; - + char* path; + + path = req->path; len = wcslen(req->file.pathw); ep = req->file.pathw + len; if (len < num_x || wcsncmp(ep - num_x, L"XXXXXX", num_x)) { SET_REQ_UV_ERROR(req, UV_EINVAL, ERROR_INVALID_PARAMETER); - return; + goto clobber; } tries = TMP_MAX; do { if (uv__random_rtlgenrandom((void *)&v, sizeof(v)) < 0) { SET_REQ_UV_ERROR(req, UV_EIO, ERROR_IO_DEVICE); - break; + goto clobber; } cp = ep - num_x; @@ -1265,25 +1266,29 @@ if (func(req)) { if (req->result >= 0) { - len = strlen(req->path); - wcstombs((char*) req->path + len - num_x, ep - num_x, num_x); + len = strlen(path); + wcstombs(path + len - num_x, ep - num_x, num_x); } - break; + return; } } while (--tries); - if (tries == 0) { - SET_REQ_RESULT(req, -1); - } + SET_REQ_WIN32_ERROR(req, GetLastError()); + +clobber: + path[0] = '\0'; } static int fs__mkdtemp_func(uv_fs_t* req) { - if (_wmkdir(req->file.pathw) == 0) { + DWORD error; + if (CreateDirectoryW(req->file.pathw, NULL)) { SET_REQ_RESULT(req, 0); return 1; - } else if (errno != EEXIST) { - SET_REQ_RESULT(req, -1); + } + error = GetLastError(); + if (error != ERROR_ALREADY_EXISTS) { + SET_REQ_WIN32_ERROR(req, error); return 1; } @@ -1404,7 +1409,7 @@ /* If the handle is not a directory, we'll get STATUS_INVALID_PARAMETER. * This should be reported back as UV_ENOTDIR. */ - if (status == STATUS_INVALID_PARAMETER) + if (status == (NTSTATUS)STATUS_INVALID_PARAMETER) goto not_a_directory_error; while (NT_SUCCESS(status)) { @@ -1895,7 +1900,7 @@ } req->ptr = &req->statbuf; - req->result = 0; + SET_REQ_RESULT(req, 0); } @@ -1930,7 +1935,7 @@ } req->ptr = &req->statbuf; - req->result = 0; + SET_REQ_RESULT(req, 0); } @@ -2157,7 +2162,10 @@ static void fs__chmod(uv_fs_t* req) { int result = _wchmod(req->file.pathw, req->fs.info.mode); - SET_REQ_RESULT(req, result); + if (result == -1) + SET_REQ_WIN32_ERROR(req, _doserrno); + else + SET_REQ_RESULT(req, 0); } @@ -2315,7 +2323,7 @@ return; } - req->result = 0; + SET_REQ_RESULT(req, 0); } static void fs__utime(uv_fs_t* req) { @@ -2340,7 +2348,7 @@ return; } - req->result = 0; + SET_REQ_RESULT(req, 0); } static void fs__lutime(uv_fs_t* req) { @@ -2350,11 +2358,10 @@ static void fs__link(uv_fs_t* req) { DWORD r = CreateHardLinkW(req->fs.info.new_pathw, req->file.pathw, NULL); - if (r == 0) { + if (r == 0) SET_REQ_WIN32_ERROR(req, GetLastError()); - } else { - req->result = 0; - } + else + SET_REQ_RESULT(req, 0); } @@ -2674,17 +2681,17 @@ static void fs__chown(uv_fs_t* req) { - req->result = 0; + SET_REQ_RESULT(req, 0); } static void fs__fchown(uv_fs_t* req) { - req->result = 0; + SET_REQ_RESULT(req, 0); } static void fs__lchown(uv_fs_t* req) { - req->result = 0; + SET_REQ_RESULT(req, 0); } @@ -2829,7 +2836,7 @@ if (status == UV_ECANCELED) { assert(req->result == 0); - req->result = UV_ECANCELED; + SET_REQ_UV_ERROR(req, UV_ECANCELED, 0); } req->cb(req); diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/fs-fd-hash-inl.h nodejs-mozilla-12.22.12/deps/uv/src/win/fs-fd-hash-inl.h --- nodejs-mozilla-12.18.1/deps/uv/src/win/fs-fd-hash-inl.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/fs-fd-hash-inl.h 2022-04-05 07:17:01.000000000 +0000 @@ -1,3 +1,24 @@ +/* Copyright libuv project contributors. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + #ifndef UV_WIN_FS_FD_HASH_INL_H_ #define UV_WIN_FS_FD_HASH_INL_H_ @@ -53,7 +74,8 @@ INLINE static void uv__fd_hash_init(void) { - int i, err; + size_t i; + int err; err = uv_mutex_init(&uv__fd_hash_mutex); if (err) { diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/internal.h nodejs-mozilla-12.22.12/deps/uv/src/win/internal.h --- nodejs-mozilla-12.18.1/deps/uv/src/win/internal.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/internal.h 2022-04-05 07:17:01.000000000 +0000 @@ -266,7 +266,7 @@ */ void uv__util_init(void); -uint64_t uv__hrtime(double scale); +uint64_t uv__hrtime(unsigned int scale); __declspec(noreturn) void uv_fatal_error(const int errorno, const char* syscall); int uv__getpwuid_r(uv_passwd_t* pwd); int uv__convert_utf16_to_utf8(const WCHAR* utf16, int utf16len, char** utf8); diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/pipe.c nodejs-mozilla-12.22.12/deps/uv/src/win/pipe.c --- nodejs-mozilla-12.18.1/deps/uv/src/win/pipe.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/pipe.c 2022-04-05 07:17:01.000000000 +0000 @@ -244,9 +244,8 @@ return 0; error: - if (pipeHandle != INVALID_HANDLE_VALUE) { + if (pipeHandle != INVALID_HANDLE_VALUE) CloseHandle(pipeHandle); - } return err; } @@ -554,7 +553,7 @@ /* Convert name to UTF16. */ nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0) * sizeof(WCHAR); - handle->name = (WCHAR*)uv__malloc(nameSize); + handle->name = uv__malloc(nameSize); if (!handle->name) { uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); } @@ -621,9 +620,8 @@ while (WaitNamedPipeW(handle->name, 30000)) { /* The pipe is now available, try to connect. */ pipeHandle = open_named_pipe(handle->name, &duplex_flags); - if (pipeHandle != INVALID_HANDLE_VALUE) { + if (pipeHandle != INVALID_HANDLE_VALUE) break; - } SwitchToThread(); } @@ -655,7 +653,7 @@ /* Convert name to UTF16. */ nameSize = MultiByteToWideChar(CP_UTF8, 0, name, -1, NULL, 0) * sizeof(WCHAR); - handle->name = (WCHAR*)uv__malloc(nameSize); + handle->name = uv__malloc(nameSize); if (!handle->name) { uv_fatal_error(ERROR_OUTOFMEMORY, "uv__malloc"); } @@ -2147,7 +2145,7 @@ if (pipe->ipc) { assert(!(pipe->flags & UV_HANDLE_NON_OVERLAPPED_PIPE)); pipe->pipe.conn.ipc_remote_pid = uv_os_getppid(); - assert(pipe->pipe.conn.ipc_remote_pid != (DWORD) -1); + assert(pipe->pipe.conn.ipc_remote_pid != (DWORD)(uv_pid_t) -1); } return 0; } diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/tcp.c nodejs-mozilla-12.22.12/deps/uv/src/win/tcp.c --- nodejs-mozilla-12.18.1/deps/uv/src/win/tcp.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/tcp.c 2022-04-05 07:17:01.000000000 +0000 @@ -523,16 +523,15 @@ &req->u.io.overlapped, NULL); + handle->flags |= UV_HANDLE_READ_PENDING; + handle->reqs_pending++; + if (UV_SUCCEEDED_WITHOUT_IOCP(result == 0)) { /* Process the req without IOCP. */ - handle->flags |= UV_HANDLE_READ_PENDING; req->u.io.overlapped.InternalHigh = bytes; - handle->reqs_pending++; uv_insert_pending_req(loop, (uv_req_t*)req); } else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) { /* The req will be processed with IOCP. */ - handle->flags |= UV_HANDLE_READ_PENDING; - handle->reqs_pending++; if (handle->flags & UV_HANDLE_EMULATE_IOCP && req->wait_handle == INVALID_HANDLE_VALUE && !RegisterWaitForSingleObject(&req->wait_handle, @@ -545,7 +544,6 @@ /* Make this req pending reporting an error. */ SET_REQ_ERROR(req, WSAGetLastError()); uv_insert_pending_req(loop, (uv_req_t*)req); - handle->reqs_pending++; } } @@ -750,6 +748,40 @@ return 0; } +static int uv__is_loopback(const struct sockaddr_storage* storage) { + const struct sockaddr_in* in4; + const struct sockaddr_in6* in6; + int i; + + if (storage->ss_family == AF_INET) { + in4 = (const struct sockaddr_in*) storage; + return in4->sin_addr.S_un.S_un_b.s_b1 == 127; + } + if (storage->ss_family == AF_INET6) { + in6 = (const struct sockaddr_in6*) storage; + for (i = 0; i < 7; ++i) { + if (in6->sin6_addr.u.Word[i] != 0) + return 0; + } + return in6->sin6_addr.u.Word[7] == htons(1); + } + return 0; +} + +// Check if Windows version is 10.0.16299 or later +static int uv__is_fast_loopback_fail_supported() { + OSVERSIONINFOW os_info; + if (!pRtlGetVersion) + return 0; + pRtlGetVersion(&os_info); + if (os_info.dwMajorVersion < 10) + return 0; + if (os_info.dwMajorVersion > 10) + return 1; + if (os_info.dwMinorVersion > 0) + return 1; + return os_info.dwBuildNumber >= 16299; +} static int uv_tcp_try_connect(uv_connect_t* req, uv_tcp_t* handle, @@ -757,6 +789,7 @@ unsigned int addrlen, uv_connect_cb cb) { uv_loop_t* loop = handle->loop; + TCP_INITIAL_RTO_PARAMETERS retransmit_ioctl; const struct sockaddr* bind_addr; struct sockaddr_storage converted; BOOL success; @@ -792,6 +825,25 @@ } } + /* This makes connect() fail instantly if the target port on the localhost + * is not reachable, instead of waiting for 2s. We do not care if this fails. + * This only works on Windows version 10.0.16299 and later. + */ + if (uv__is_fast_loopback_fail_supported() && uv__is_loopback(&converted)) { + memset(&retransmit_ioctl, 0, sizeof(retransmit_ioctl)); + retransmit_ioctl.Rtt = TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS; + retransmit_ioctl.MaxSynRetransmissions = TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS; + WSAIoctl(handle->socket, + SIO_TCP_INITIAL_RTO, + &retransmit_ioctl, + sizeof(retransmit_ioctl), + NULL, + 0, + &bytes, + NULL, + NULL); + } + UV_REQ_INIT(req, UV_CONNECT); req->handle = (uv_stream_t*) handle; req->cb = cb; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/tty.c nodejs-mozilla-12.22.12/deps/uv/src/win/tty.c --- nodejs-mozilla-12.18.1/deps/uv/src/win/tty.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/tty.c 2022-04-05 07:17:01.000000000 +0000 @@ -517,6 +517,7 @@ status = InterlockedExchange(&uv__read_console_status, IN_PROGRESS); if (status == TRAP_REQUESTED) { SET_REQ_SUCCESS(req); + InterlockedExchange(&uv__read_console_status, COMPLETED); req->u.io.overlapped.InternalHigh = 0; POST_COMPLETION_FOR_REQ(loop, req); return 0; @@ -2121,13 +2122,6 @@ abort(); } - /* We wouldn't mind emitting utf-16 surrogate pairs. Too bad, the windows - * console doesn't really support UTF-16, so just emit the replacement - * character. */ - if (utf8_codepoint > 0xffff) { - utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER; - } - if (utf8_codepoint == 0x0a || utf8_codepoint == 0x0d) { /* EOL conversion - emit \r\n when we see \n. */ @@ -2154,6 +2148,12 @@ ENSURE_BUFFER_SPACE(1); utf16_buf[utf16_buf_used++] = (WCHAR) utf8_codepoint; previous_eol = 0; + } else { + ENSURE_BUFFER_SPACE(2); + utf8_codepoint -= 0x10000; + utf16_buf[utf16_buf_used++] = (WCHAR) (utf8_codepoint / 0x400 + 0xD800); + utf16_buf[utf16_buf_used++] = (WCHAR) (utf8_codepoint % 0x400 + 0xDC00); + previous_eol = 0; } } } @@ -2412,6 +2412,7 @@ uv__tty_console_signal_resize(); ResetEvent(uv__tty_console_resized); } + return 0; } static void uv__tty_console_signal_resize(void) { diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/udp.c nodejs-mozilla-12.22.12/deps/uv/src/win/udp.c --- nodejs-mozilla-12.18.1/deps/uv/src/win/udp.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/udp.c 2022-04-05 07:17:01.000000000 +0000 @@ -189,6 +189,11 @@ } +int uv_udp_using_recvmmsg(const uv_udp_t* handle) { + return 0; +} + + static int uv_udp_maybe_bind(uv_udp_t* handle, const struct sockaddr* addr, unsigned int addrlen, @@ -752,6 +757,9 @@ int optname; int err; + STATIC_ASSERT(sizeof(mreq.gsr_group) >= sizeof(*multicast_addr)); + STATIC_ASSERT(sizeof(mreq.gsr_source) >= sizeof(*source_addr)); + if ((handle->flags & UV_HANDLE_BOUND) && !(handle->flags & UV_HANDLE_IPV6)) return UV_EINVAL; @@ -774,8 +782,6 @@ mreq.gsr_interface = 0; } - STATIC_ASSERT(sizeof(mreq.gsr_group) >= sizeof(*multicast_addr)); - STATIC_ASSERT(sizeof(mreq.gsr_source) >= sizeof(*source_addr)); memcpy(&mreq.gsr_group, multicast_addr, sizeof(*multicast_addr)); memcpy(&mreq.gsr_source, source_addr, sizeof(*source_addr)); @@ -1067,7 +1073,7 @@ err = connect(handle->socket, addr, addrlen); if (err) - return uv_translate_sys_error(err); + return uv_translate_sys_error(WSAGetLastError()); handle->flags |= UV_HANDLE_UDP_CONNECTED; @@ -1083,7 +1089,7 @@ err = connect(handle->socket, &addr, sizeof(addr)); if (err) - return uv_translate_sys_error(err); + return uv_translate_sys_error(WSAGetLastError()); handle->flags &= ~UV_HANDLE_UDP_CONNECTED; return 0; diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/util.c nodejs-mozilla-12.22.12/deps/uv/src/win/util.c --- nodejs-mozilla-12.18.1/deps/uv/src/win/util.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/util.c 2022-04-05 07:17:01.000000000 +0000 @@ -30,12 +30,14 @@ #include "uv.h" #include "internal.h" +/* clang-format off */ #include #include #include #include #include #include +/* clang-format on */ #include #include @@ -67,8 +69,8 @@ static char *process_title; static CRITICAL_SECTION process_title_lock; -/* Interval (in seconds) of the high-resolution clock. */ -static double hrtime_interval_ = 0; +/* Frequency of the high-resolution clock. */ +static uint64_t hrtime_frequency_ = 0; /* @@ -84,9 +86,9 @@ * and precompute its reciprocal. */ if (QueryPerformanceFrequency(&perf_frequency)) { - hrtime_interval_ = 1.0 / perf_frequency.QuadPart; + hrtime_frequency_ = perf_frequency.QuadPart; } else { - hrtime_interval_= 0; + uv_fatal_error(GetLastError(), "QueryPerformanceFrequency"); } } @@ -490,23 +492,25 @@ return uv__hrtime(UV__NANOSEC); } -uint64_t uv__hrtime(double scale) { +uint64_t uv__hrtime(unsigned int scale) { LARGE_INTEGER counter; + double scaled_freq; + double result; - /* If the performance interval is zero, there's no support. */ - if (hrtime_interval_ == 0) { - return 0; - } - + assert(hrtime_frequency_ != 0); + assert(scale != 0); if (!QueryPerformanceCounter(&counter)) { - return 0; + uv_fatal_error(GetLastError(), "QueryPerformanceCounter"); } + assert(counter.QuadPart != 0); /* Because we have no guarantee about the order of magnitude of the * performance counter interval, integer math could cause this computation * to overflow. Therefore we resort to floating point math. */ - return (uint64_t) ((double) counter.QuadPart * hrtime_interval_ * scale); + scaled_freq = (double) hrtime_frequency_ / scale; + result = (double) counter.QuadPart / scaled_freq; + return (uint64_t) result; } @@ -1804,7 +1808,9 @@ pRtlGetVersion(&os_info); } else { /* Silence GetVersionEx() deprecation warning. */ + #ifdef _MSC_VER #pragma warning(suppress : 4996) + #endif if (GetVersionExW(&os_info) == 0) { r = uv_translate_sys_error(GetLastError()); goto error; @@ -1871,7 +1877,7 @@ "MINGW32_NT-%u.%u", (unsigned int) os_info.dwMajorVersion, (unsigned int) os_info.dwMinorVersion); - assert(r < sizeof(buffer->sysname)); + assert((size_t)r < sizeof(buffer->sysname)); #else uv__strscpy(buffer->sysname, "Windows_NT", sizeof(buffer->sysname)); #endif @@ -1883,7 +1889,7 @@ (unsigned int) os_info.dwMajorVersion, (unsigned int) os_info.dwMinorVersion, (unsigned int) os_info.dwBuildNumber); - assert(r < sizeof(buffer->release)); + assert((size_t)r < sizeof(buffer->release)); /* Populate the machine field. */ GetSystemInfo(&system_info); diff -Nru nodejs-mozilla-12.18.1/deps/uv/src/win/winapi.h nodejs-mozilla-12.22.12/deps/uv/src/win/winapi.h --- nodejs-mozilla-12.18.1/deps/uv/src/win/winapi.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/src/win/winapi.h 2022-04-05 07:17:01.000000000 +0000 @@ -4726,6 +4726,18 @@ DWORD idThread, UINT dwflags); +/* From mstcpip.h */ +typedef struct _TCP_INITIAL_RTO_PARAMETERS { + USHORT Rtt; + UCHAR MaxSynRetransmissions; +} TCP_INITIAL_RTO_PARAMETERS, *PTCP_INITIAL_RTO_PARAMETERS; + +#ifndef TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS +# define TCP_INITIAL_RTO_NO_SYN_RETRANSMISSIONS ((UCHAR) -2) +#endif +#ifndef SIO_TCP_INITIAL_RTO +# define SIO_TCP_INITIAL_RTO _WSAIOW(IOC_VENDOR,17) +#endif /* Ntdll function pointers */ extern sRtlGetVersion pRtlGetVersion; diff -Nru nodejs-mozilla-12.18.1/deps/uv/uv.gyp nodejs-mozilla-12.22.12/deps/uv/uv.gyp --- nodejs-mozilla-12.18.1/deps/uv/uv.gyp 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uv/uv.gyp 2022-04-05 07:17:01.000000000 +0000 @@ -221,6 +221,7 @@ '-Wextra', '-Wno-unused-parameter', '-Wstrict-prototypes', + '-fno-strict-aliasing', ], }], [ 'OS in "mac ios"', { @@ -245,7 +246,6 @@ 'src/unix/procfs-exepath.c', 'src/unix/random-getrandom.c', 'src/unix/random-sysctl-linux.c', - 'src/unix/sysinfo-loadavg.c', ], 'link_settings': { 'libraries': [ '-ldl', '-lrt' ], @@ -262,7 +262,6 @@ 'src/unix/procfs-exepath.c', 'src/unix/random-getrandom.c', 'src/unix/random-sysctl-linux.c', - 'src/unix/sysinfo-loadavg.c', ], 'link_settings': { 'libraries': [ '-ldl' ], diff -Nru nodejs-mozilla-12.18.1/deps/uvwasi/include/uvwasi.h nodejs-mozilla-12.22.12/deps/uvwasi/include/uvwasi.h --- nodejs-mozilla-12.18.1/deps/uvwasi/include/uvwasi.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uvwasi/include/uvwasi.h 2022-04-05 07:17:01.000000000 +0000 @@ -10,7 +10,7 @@ #define UVWASI_VERSION_MAJOR 0 #define UVWASI_VERSION_MINOR 0 -#define UVWASI_VERSION_PATCH 9 +#define UVWASI_VERSION_PATCH 11 #define UVWASI_VERSION_HEX ((UVWASI_VERSION_MAJOR << 16) | \ (UVWASI_VERSION_MINOR << 8) | \ (UVWASI_VERSION_PATCH)) @@ -50,8 +50,8 @@ } uvwasi_t; typedef struct uvwasi_preopen_s { - char* mapped_path; - char* real_path; + const char* mapped_path; + const char* real_path; } uvwasi_preopen_t; typedef struct uvwasi_options_s { @@ -70,6 +70,7 @@ /* Embedder API. */ uvwasi_errno_t uvwasi_init(uvwasi_t* uvwasi, uvwasi_options_t* options); void uvwasi_destroy(uvwasi_t* uvwasi); +void uvwasi_options_init(uvwasi_options_t* options); /* Use int instead of uv_file to avoid needing uv.h */ uvwasi_errno_t uvwasi_embedder_remap_fd(uvwasi_t* uvwasi, const uvwasi_fd_t fd, diff -Nru nodejs-mozilla-12.18.1/deps/uvwasi/include/wasi_serdes.h nodejs-mozilla-12.22.12/deps/uvwasi/include/wasi_serdes.h --- nodejs-mozilla-12.18.1/deps/uvwasi/include/wasi_serdes.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uvwasi/include/wasi_serdes.h 2022-04-05 07:17:01.000000000 +0000 @@ -5,21 +5,20 @@ /* Basic uint{8,16,32,64}_t read/write functions. */ -#define BASIC_TYPE_(name, type) \ +#define BASIC_TYPE(name, type) \ void uvwasi_serdes_write_##name(void* ptr, size_t offset, type value); \ type uvwasi_serdes_read_##name(const void* ptr, size_t offset); \ -#define BASIC_TYPE(type) BASIC_TYPE_(type, type) -#define BASIC_TYPE_UVWASI(type) BASIC_TYPE_(type, uvwasi_##type) +#define BASIC_TYPE_UVWASI(type) BASIC_TYPE(type, uvwasi_##type) #define UVWASI_SERDES_SIZE_uint8_t sizeof(uint8_t) -BASIC_TYPE(uint8_t) +BASIC_TYPE(uint8_t, uint8_t) #define UVWASI_SERDES_SIZE_uint16_t sizeof(uint16_t) -BASIC_TYPE(uint16_t) +BASIC_TYPE(uint16_t, uint16_t) #define UVWASI_SERDES_SIZE_uint32_t sizeof(uint32_t) -BASIC_TYPE(uint32_t) +BASIC_TYPE(uint32_t, uint32_t) #define UVWASI_SERDES_SIZE_uint64_t sizeof(uint64_t) -BASIC_TYPE(uint64_t) +BASIC_TYPE(uint64_t, uint64_t) #define UVWASI_SERDES_SIZE_advice_t sizeof(uvwasi_advice_t) BASIC_TYPE_UVWASI(advice_t) @@ -80,7 +79,6 @@ #undef BASIC_TYPE_UVWASI #undef BASIC_TYPE -#undef BASIC_TYPE_ /* WASI structure read/write functions. */ @@ -105,6 +103,9 @@ #define UVWASI_SERDES_SIZE_iovec_t 8 IOVS_STRUCT(iovec_t) +#define UVWASI_SERDES_SIZE_dirent_t 24 +STRUCT(dirent_t) + #define UVWASI_SERDES_SIZE_fdstat_t 24 STRUCT(fdstat_t) diff -Nru nodejs-mozilla-12.18.1/deps/uvwasi/src/debug.h nodejs-mozilla-12.22.12/deps/uvwasi/src/debug.h --- nodejs-mozilla-12.18.1/deps/uvwasi/src/debug.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uvwasi/src/debug.h 2022-04-05 07:17:01.000000000 +0000 @@ -2,12 +2,14 @@ #define __UVWASI_DEBUG_H__ #ifdef UVWASI_DEBUG_LOG +#ifndef __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS +#endif # include -# define DEBUG(fmt, ...) \ +# define UVWASI_DEBUG(fmt, ...) \ do { fprintf(stderr, fmt, __VA_ARGS__); } while (0) #else -# define DEBUG(fmt, ...) +# define UVWASI_DEBUG(fmt, ...) #endif #endif /* __UVWASI_DEBUG_H__ */ diff -Nru nodejs-mozilla-12.18.1/deps/uvwasi/src/poll_oneoff.c nodejs-mozilla-12.22.12/deps/uvwasi/src/poll_oneoff.c --- nodejs-mozilla-12.18.1/deps/uvwasi/src/poll_oneoff.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uvwasi/src/poll_oneoff.c 2022-04-05 07:17:01.000000000 +0000 @@ -114,6 +114,8 @@ for (i = 0; i < state->handle_cnt; i++) uv_close((uv_handle_t*) &state->poll_handles[i], NULL); + uv_run(&state->loop, UV_RUN_NOWAIT); + state->max_fds = 0; state->fdevent_cnt = 0; state->handle_cnt = 0; diff -Nru nodejs-mozilla-12.18.1/deps/uvwasi/src/uvwasi.c nodejs-mozilla-12.22.12/deps/uvwasi/src/uvwasi.c --- nodejs-mozilla-12.18.1/deps/uvwasi/src/uvwasi.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uvwasi/src/uvwasi.c 2022-04-05 07:17:01.000000000 +0000 @@ -13,6 +13,10 @@ #define UVWASI__READDIR_NUM_ENTRIES 1 +#if !defined(_WIN32) && !defined(__ANDROID__) +# define UVWASI_FD_READDIR_SUPPORTED 1 +#endif + #include "uvwasi.h" #include "uvwasi_alloc.h" #include "uv.h" @@ -22,6 +26,7 @@ #include "path_resolver.h" #include "poll_oneoff.h" #include "wasi_rights.h" +#include "wasi_serdes.h" #include "debug.h" /* IBMi PASE does not support posix_fadvise() */ @@ -29,6 +34,78 @@ # undef POSIX_FADV_NORMAL #endif +#define VALIDATE_FSTFLAGS_OR_RETURN(flags) \ + do { \ + if ((flags) & ~(UVWASI_FILESTAT_SET_ATIM | \ + UVWASI_FILESTAT_SET_ATIM_NOW | \ + UVWASI_FILESTAT_SET_MTIM | \ + UVWASI_FILESTAT_SET_MTIM_NOW)) { \ + return UVWASI_EINVAL; \ + } \ + } while (0) + +static uvwasi_errno_t uvwasi__get_filestat_set_times( + uvwasi_timestamp_t* st_atim, + uvwasi_timestamp_t* st_mtim, + uvwasi_fstflags_t fst_flags, + uv_file* fd, + char* path + ) { + uvwasi_filestat_t stat; + uvwasi_timestamp_t now; + uvwasi_errno_t err; + uv_fs_t req; + int r; + + /* Check if either value requires the current time. */ + if ((fst_flags & + (UVWASI_FILESTAT_SET_ATIM_NOW | UVWASI_FILESTAT_SET_MTIM_NOW)) != 0) { + err = uvwasi__clock_gettime_realtime(&now); + if (err != UVWASI_ESUCCESS) + return err; + } + + /* Check if either value is omitted. libuv doesn't have an 'omitted' option, + so get the current stats for the file. This approach isn't perfect, but it + will do until libuv can get better support here. */ + if ((fst_flags & + (UVWASI_FILESTAT_SET_ATIM | UVWASI_FILESTAT_SET_ATIM_NOW)) == 0 || + (fst_flags & + (UVWASI_FILESTAT_SET_MTIM | UVWASI_FILESTAT_SET_MTIM_NOW)) == 0) { + + if (fd != NULL) + r = uv_fs_fstat(NULL, &req, *fd, NULL); + else + r = uv_fs_lstat(NULL, &req, path, NULL); + + if (r != 0) { + uv_fs_req_cleanup(&req); + return uvwasi__translate_uv_error(r); + } + + uvwasi__stat_to_filestat(&req.statbuf, &stat); + uv_fs_req_cleanup(&req); + } + + /* Choose the provided time or 'now' and convert WASI timestamps from + nanoseconds to seconds due to libuv. */ + if ((fst_flags & UVWASI_FILESTAT_SET_ATIM_NOW) != 0) + *st_atim = now / NANOS_PER_SEC; + else if ((fst_flags & UVWASI_FILESTAT_SET_ATIM) != 0) + *st_atim = *st_atim / NANOS_PER_SEC; + else + *st_atim = stat.st_atim / NANOS_PER_SEC; + + if ((fst_flags & UVWASI_FILESTAT_SET_MTIM_NOW) != 0) + *st_mtim = now / NANOS_PER_SEC; + else if ((fst_flags & UVWASI_FILESTAT_SET_MTIM) != 0) + *st_mtim = *st_mtim / NANOS_PER_SEC; + else + *st_mtim = stat.st_mtim / NANOS_PER_SEC; + + return UVWASI_ESUCCESS; +} + static void* default_malloc(size_t size, void* mem_user_data) { return malloc(size); } @@ -308,6 +385,23 @@ } +void uvwasi_options_init(uvwasi_options_t* options) { + if (options == NULL) + return; + + options->in = 0; + options->out = 1; + options->err = 2; + options->fd_table_size = 3; + options->argc = 0; + options->argv = NULL; + options->envp = NULL; + options->preopenc = 0; + options->preopens = NULL; + options->allocator = NULL; +} + + uvwasi_errno_t uvwasi_embedder_remap_fd(uvwasi_t* uvwasi, const uvwasi_fd_t fd, uv_file new_host_fd) { @@ -330,10 +424,10 @@ uvwasi_errno_t uvwasi_args_get(uvwasi_t* uvwasi, char** argv, char* argv_buf) { uvwasi_size_t i; - DEBUG("uvwasi_args_get(uvwasi=%p, argv=%p, argv_buf=%p)\n", - uvwasi, - argv, - argv_buf); + UVWASI_DEBUG("uvwasi_args_get(uvwasi=%p, argv=%p, argv_buf=%p)\n", + uvwasi, + argv, + argv_buf); if (uvwasi == NULL || argv == NULL || argv_buf == NULL) return UVWASI_EINVAL; @@ -350,10 +444,10 @@ uvwasi_errno_t uvwasi_args_sizes_get(uvwasi_t* uvwasi, uvwasi_size_t* argc, uvwasi_size_t* argv_buf_size) { - DEBUG("uvwasi_args_sizes_get(uvwasi=%p, argc=%p, argv_buf_size=%p)\n", - uvwasi, - argc, - argv_buf_size); + UVWASI_DEBUG("uvwasi_args_sizes_get(uvwasi=%p, argc=%p, argv_buf_size=%p)\n", + uvwasi, + argc, + argv_buf_size); if (uvwasi == NULL || argc == NULL || argv_buf_size == NULL) return UVWASI_EINVAL; @@ -367,10 +461,10 @@ uvwasi_errno_t uvwasi_clock_res_get(uvwasi_t* uvwasi, uvwasi_clockid_t clock_id, uvwasi_timestamp_t* resolution) { - DEBUG("uvwasi_clock_res_get(uvwasi=%p, clock_id=%d, resolution=%p)\n", - uvwasi, - clock_id, - resolution); + UVWASI_DEBUG("uvwasi_clock_res_get(uvwasi=%p, clock_id=%d, resolution=%p)\n", + uvwasi, + clock_id, + resolution); if (uvwasi == NULL || resolution == NULL) return UVWASI_EINVAL; @@ -394,12 +488,12 @@ uvwasi_clockid_t clock_id, uvwasi_timestamp_t precision, uvwasi_timestamp_t* time) { - DEBUG("uvwasi_clock_time_get(uvwasi=%p, clock_id=%d, " - "precision=%"PRIu64", time=%p)\n", - uvwasi, - clock_id, - precision, - time); + UVWASI_DEBUG("uvwasi_clock_time_get(uvwasi=%p, clock_id=%d, " + "precision=%"PRIu64", time=%p)\n", + uvwasi, + clock_id, + precision, + time); if (uvwasi == NULL || time == NULL) return UVWASI_EINVAL; @@ -425,10 +519,11 @@ char* environ_buf) { uvwasi_size_t i; - DEBUG("uvwasi_environ_get(uvwasi=%p, environment=%p, environ_buf=%p)\n", - uvwasi, - environment, - environ_buf); + UVWASI_DEBUG("uvwasi_environ_get(uvwasi=%p, environment=%p, " + "environ_buf=%p)\n", + uvwasi, + environment, + environ_buf); if (uvwasi == NULL || environment == NULL || environ_buf == NULL) return UVWASI_EINVAL; @@ -445,11 +540,11 @@ uvwasi_errno_t uvwasi_environ_sizes_get(uvwasi_t* uvwasi, uvwasi_size_t* environ_count, uvwasi_size_t* environ_buf_size) { - DEBUG("uvwasi_environ_sizes_get(uvwasi=%p, environ_count=%p, " - "environ_buf_size=%p)\n", - uvwasi, - environ_count, - environ_buf_size); + UVWASI_DEBUG("uvwasi_environ_sizes_get(uvwasi=%p, environ_count=%p, " + "environ_buf_size=%p)\n", + uvwasi, + environ_count, + environ_buf_size); if (uvwasi == NULL || environ_count == NULL || environ_buf_size == NULL) return UVWASI_EINVAL; @@ -472,13 +567,13 @@ int r; #endif /* POSIX_FADV_NORMAL */ - DEBUG("uvwasi_fd_advise(uvwasi=%p, fd=%d, offset=%"PRIu64", len=%"PRIu64", " - "advice=%d)\n", - uvwasi, - fd, - offset, - len, - advice); + UVWASI_DEBUG("uvwasi_fd_advise(uvwasi=%p, fd=%d, offset=%"PRIu64", " + "len=%"PRIu64", advice=%d)\n", + uvwasi, + fd, + offset, + len, + advice); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -546,12 +641,12 @@ uvwasi_errno_t err; int r; - DEBUG("uvwasi_fd_allocate(uvwasi=%p, fd=%d, offset=%"PRIu64", " - "len=%"PRIu64")\n", - uvwasi, - fd, - offset, - len); + UVWASI_DEBUG("uvwasi_fd_allocate(uvwasi=%p, fd=%d, offset=%"PRIu64", " + "len=%"PRIu64")\n", + uvwasi, + fd, + offset, + len); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -603,7 +698,7 @@ uv_fs_t req; int r; - DEBUG("uvwasi_fd_close(uvwasi=%p, fd=%d)\n", uvwasi, fd); + UVWASI_DEBUG("uvwasi_fd_close(uvwasi=%p, fd=%d)\n", uvwasi, fd); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -637,7 +732,7 @@ uv_fs_t req; int r; - DEBUG("uvwasi_fd_datasync(uvwasi=%p, fd=%d)\n", uvwasi, fd); + UVWASI_DEBUG("uvwasi_fd_datasync(uvwasi=%p, fd=%d)\n", uvwasi, fd); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -670,7 +765,10 @@ int r; #endif - DEBUG("uvwasi_fd_fdstat_get(uvwasi=%p, fd=%d, buf=%p)\n", uvwasi, fd, buf); + UVWASI_DEBUG("uvwasi_fd_fdstat_get(uvwasi=%p, fd=%d, buf=%p)\n", + uvwasi, + fd, + buf); if (uvwasi == NULL || buf == NULL) return UVWASI_EINVAL; @@ -703,10 +801,10 @@ uvwasi_fd_t fd, uvwasi_fdflags_t flags) { #ifdef _WIN32 - DEBUG("uvwasi_fd_fdstat_set_flags(uvwasi=%p, fd=%d, flags=%d)\n", - uvwasi, - fd, - flags); + UVWASI_DEBUG("uvwasi_fd_fdstat_set_flags(uvwasi=%p, fd=%d, flags=%d)\n", + uvwasi, + fd, + flags); /* TODO(cjihrig): Windows is not supported. */ return UVWASI_ENOSYS; @@ -716,10 +814,10 @@ int mapped_flags; int r; - DEBUG("uvwasi_fd_fdstat_set_flags(uvwasi=%p, fd=%d, flags=%d)\n", - uvwasi, - fd, - flags); + UVWASI_DEBUG("uvwasi_fd_fdstat_set_flags(uvwasi=%p, fd=%d, flags=%d)\n", + uvwasi, + fd, + flags); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -777,12 +875,12 @@ struct uvwasi_fd_wrap_t* wrap; uvwasi_errno_t err; - DEBUG("uvwasi_fd_fdstat_set_rights(uvwasi=%p, fd=%d, " - "fs_rights_base=%"PRIu64", fs_rights_inheriting=%"PRIu64")\n", - uvwasi, - fd, - fs_rights_base, - fs_rights_inheriting); + UVWASI_DEBUG("uvwasi_fd_fdstat_set_rights(uvwasi=%p, fd=%d, " + "fs_rights_base=%"PRIu64", fs_rights_inheriting=%"PRIu64")\n", + uvwasi, + fd, + fs_rights_base, + fs_rights_inheriting); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -820,7 +918,10 @@ uvwasi_errno_t err; int r; - DEBUG("uvwasi_fd_filestat_get(uvwasi=%p, fd=%d, buf=%p)\n", uvwasi, fd, buf); + UVWASI_DEBUG("uvwasi_fd_filestat_get(uvwasi=%p, fd=%d, buf=%p)\n", + uvwasi, + fd, + buf); if (uvwasi == NULL || buf == NULL) return UVWASI_EINVAL; @@ -857,10 +958,11 @@ uvwasi_errno_t err; int r; - DEBUG("uvwasi_fd_filestat_set_size(uvwasi=%p, fd=%d, st_size=%"PRIu64")\n", - uvwasi, - fd, - st_size); + UVWASI_DEBUG("uvwasi_fd_filestat_set_size(uvwasi=%p, fd=%d, " + "st_size=%"PRIu64")\n", + uvwasi, + fd, + st_size); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -889,27 +991,25 @@ uvwasi_timestamp_t st_atim, uvwasi_timestamp_t st_mtim, uvwasi_fstflags_t fst_flags) { - /* TODO(cjihrig): libuv does not currently support nanosecond precision. */ struct uvwasi_fd_wrap_t* wrap; + uvwasi_timestamp_t atim; + uvwasi_timestamp_t mtim; uv_fs_t req; uvwasi_errno_t err; int r; - DEBUG("uvwasi_fd_filestat_set_times(uvwasi=%p, fd=%d, st_atim=%"PRIu64", " - "st_mtim=%"PRIu64", fst_flags=%d)\n", - uvwasi, - fd, - st_atim, - st_mtim, - fst_flags); + UVWASI_DEBUG("uvwasi_fd_filestat_set_times(uvwasi=%p, fd=%d, " + "st_atim=%"PRIu64", st_mtim=%"PRIu64", fst_flags=%d)\n", + uvwasi, + fd, + st_atim, + st_mtim, + fst_flags); if (uvwasi == NULL) return UVWASI_EINVAL; - if (fst_flags & ~(UVWASI_FILESTAT_SET_ATIM | UVWASI_FILESTAT_SET_ATIM_NOW | - UVWASI_FILESTAT_SET_MTIM | UVWASI_FILESTAT_SET_MTIM_NOW)) { - return UVWASI_EINVAL; - } + VALIDATE_FSTFLAGS_OR_RETURN(fst_flags); err = uvwasi_fd_table_get(uvwasi->fds, fd, @@ -919,8 +1019,20 @@ if (err != UVWASI_ESUCCESS) return err; - /* TODO(cjihrig): st_atim and st_mtim should not be unconditionally passed. */ - r = uv_fs_futime(NULL, &req, wrap->fd, st_atim, st_mtim, NULL); + atim = st_atim; + mtim = st_mtim; + err = uvwasi__get_filestat_set_times(&atim, + &mtim, + fst_flags, + &wrap->fd, + NULL); + if (err != UVWASI_ESUCCESS) { + uv_mutex_unlock(&wrap->mutex); + return err; + } + + /* libuv does not currently support nanosecond precision. */ + r = uv_fs_futime(NULL, &req, wrap->fd, atim, mtim, NULL); uv_mutex_unlock(&wrap->mutex); uv_fs_req_cleanup(&req); @@ -944,14 +1056,14 @@ size_t uvread; int r; - DEBUG("uvwasi_fd_pread(uvwasi=%p, fd=%d, iovs=%p, iovs_len=%zu, " - "offset=%"PRIu64", nread=%p)\n", - uvwasi, - fd, - iovs, - iovs_len, - offset, - nread); + UVWASI_DEBUG("uvwasi_fd_pread(uvwasi=%p, fd=%d, iovs=%p, iovs_len=%d, " + "offset=%"PRIu64", nread=%p)\n", + uvwasi, + fd, + iovs, + iovs_len, + offset, + nread); if (uvwasi == NULL || iovs == NULL || nread == NULL) return UVWASI_EINVAL; @@ -990,10 +1102,10 @@ struct uvwasi_fd_wrap_t* wrap; uvwasi_errno_t err; - DEBUG("uvwasi_fd_prestat_get(uvwasi=%p, fd=%d, buf=%p)\n", - uvwasi, - fd, - buf); + UVWASI_DEBUG("uvwasi_fd_prestat_get(uvwasi=%p, fd=%d, buf=%p)\n", + uvwasi, + fd, + buf); if (uvwasi == NULL || buf == NULL) return UVWASI_EINVAL; @@ -1023,11 +1135,12 @@ uvwasi_errno_t err; size_t size; - DEBUG("uvwasi_fd_prestat_dir_name(uvwasi=%p, fd=%d, path=%p, path_len=%zu)\n", - uvwasi, - fd, - path, - path_len); + UVWASI_DEBUG("uvwasi_fd_prestat_dir_name(uvwasi=%p, fd=%d, path=%p, " + "path_len=%d)\n", + uvwasi, + fd, + path, + path_len); if (uvwasi == NULL || path == NULL) return UVWASI_EINVAL; @@ -1067,14 +1180,14 @@ size_t uvwritten; int r; - DEBUG("uvwasi_fd_pwrite(uvwasi=%p, fd=%d, iovs=%p, iovs_len=%zu, " - "offset=%"PRIu64", nwritten=%p)\n", - uvwasi, - fd, - iovs, - iovs_len, - offset, - nwritten); + UVWASI_DEBUG("uvwasi_fd_pwrite(uvwasi=%p, fd=%d, iovs=%p, iovs_len=%d, " + "offset=%"PRIu64", nwritten=%p)\n", + uvwasi, + fd, + iovs, + iovs_len, + offset, + nwritten); if (uvwasi == NULL || iovs == NULL || nwritten == NULL) return UVWASI_EINVAL; @@ -1119,12 +1232,13 @@ size_t uvread; int r; - DEBUG("uvwasi_fd_read(uvwasi=%p, fd=%d, iovs=%p, iovs_len=%zu, nread=%p)\n", - uvwasi, - fd, - iovs, - iovs_len, - nread); + UVWASI_DEBUG("uvwasi_fd_read(uvwasi=%p, fd=%d, iovs=%p, iovs_len=%d, " + "nread=%p)\n", + uvwasi, + fd, + iovs, + iovs_len, + nread); if (uvwasi == NULL || iovs == NULL || nread == NULL) return UVWASI_EINVAL; @@ -1159,7 +1273,7 @@ uvwasi_size_t buf_len, uvwasi_dircookie_t cookie, uvwasi_size_t* bufused) { - /* TODO(cjihrig): Support Windows where seekdir() and telldir() are used. */ +#if defined(UVWASI_FD_READDIR_SUPPORTED) /* TODO(cjihrig): Avoid opening and closing the directory on each call. */ struct uvwasi_fd_wrap_t* wrap; uvwasi_dirent_t dirent; @@ -1173,19 +1287,21 @@ long tell; int i; int r; +#endif /* defined(UVWASI_FD_READDIR_SUPPORTED) */ - DEBUG("uvwasi_fd_readdir(uvwasi=%p, fd=%d, buf=%p, buf_len=%zu, " - "cookie=%"PRIu64", bufused=%p)\n", - uvwasi, - fd, - buf, - buf_len, - cookie, - bufused); + UVWASI_DEBUG("uvwasi_fd_readdir(uvwasi=%p, fd=%d, buf=%p, buf_len=%d, " + "cookie=%"PRIu64", bufused=%p)\n", + uvwasi, + fd, + buf, + buf_len, + cookie, + bufused); if (uvwasi == NULL || buf == NULL || bufused == NULL) return UVWASI_EINVAL; +#if defined(UVWASI_FD_READDIR_SUPPORTED) err = uvwasi_fd_table_get(uvwasi->fds, fd, &wrap, @@ -1207,12 +1323,9 @@ dir->nentries = UVWASI__READDIR_NUM_ENTRIES; uv_fs_req_cleanup(&req); -#ifndef _WIN32 - /* TODO(cjihrig): Need a Windows equivalent of this logic. */ /* Seek to the proper location in the directory. */ if (cookie != UVWASI_DIRCOOKIE_START) seekdir(dir->dir, cookie); -#endif /* Read the directory entries into the provided buffer. */ err = UVWASI_ESUCCESS; @@ -1224,25 +1337,20 @@ goto exit; } + available = 0; + for (i = 0; i < r; i++) { - /* TODO(cjihrig): This should probably be serialized to the buffer - consistently across platforms. In other words, d_next should always - be 8 bytes, d_ino should always be 8 bytes, d_namlen should always be - 4 bytes, and d_type should always be 1 byte. */ -#ifndef _WIN32 tell = telldir(dir->dir); if (tell < 0) { err = uvwasi__translate_uv_error(uv_translate_sys_error(errno)); uv_fs_req_cleanup(&req); goto exit; } -#else - tell = 0; /* TODO(cjihrig): Need to support Windows. */ -#endif /* _WIN32 */ name_len = strlen(dirents[i].name); dirent.d_next = (uvwasi_dircookie_t) tell; - /* TODO(cjihrig): Missing ino libuv (and Windows) support. fstat()? */ + /* TODO(cjihrig): libuv doesn't provide d_ino, and d_type is not + supported on all platforms. Use stat()? */ dirent.d_ino = 0; dirent.d_namlen = name_len; @@ -1272,21 +1380,24 @@ break; } - /* Write dirent to the buffer. */ - available = buf_len - *bufused; - size_to_cp = sizeof(dirent) > available ? available : sizeof(dirent); - memcpy((char*)buf + *bufused, &dirent, size_to_cp); - *bufused += size_to_cp; - /* Write the entry name to the buffer. */ + /* Write dirent to the buffer if it will fit. */ + if (UVWASI_SERDES_SIZE_dirent_t + *bufused > buf_len) + break; + + uvwasi_serdes_write_dirent_t(buf, *bufused, &dirent); + *bufused += UVWASI_SERDES_SIZE_dirent_t; available = buf_len - *bufused; + + /* Write as much of the entry name to the buffer as possible. */ size_to_cp = name_len > available ? available : name_len; - memcpy((char*)buf + *bufused, &dirents[i].name, size_to_cp); + memcpy((char*)buf + *bufused, dirents[i].name, size_to_cp); *bufused += size_to_cp; + available = buf_len - *bufused; } uv_fs_req_cleanup(&req); - if (*bufused >= buf_len) + if (available == 0) break; } @@ -1299,13 +1410,20 @@ return uvwasi__translate_uv_error(r); return err; +#else + /* TODO(cjihrig): Need a solution for Windows and Android. */ + return UVWASI_ENOSYS; +#endif /* defined(UVWASI_FD_READDIR_SUPPORTED) */ } uvwasi_errno_t uvwasi_fd_renumber(uvwasi_t* uvwasi, uvwasi_fd_t from, uvwasi_fd_t to) { - DEBUG("uvwasi_fd_renumber(uvwasi=%p, from=%d, to=%d)\n", uvwasi, from, to); + UVWASI_DEBUG("uvwasi_fd_renumber(uvwasi=%p, from=%d, to=%d)\n", + uvwasi, + from, + to); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -1322,13 +1440,13 @@ struct uvwasi_fd_wrap_t* wrap; uvwasi_errno_t err; - DEBUG("uvwasi_fd_seek(uvwasi=%p, fd=%d, offset=%"PRId64", " - "whence=%d, newoffset=%p)\n", - uvwasi, - fd, - offset, - whence, - newoffset); + UVWASI_DEBUG("uvwasi_fd_seek(uvwasi=%p, fd=%d, offset=%"PRId64", " + "whence=%d, newoffset=%p)\n", + uvwasi, + fd, + offset, + whence, + newoffset); if (uvwasi == NULL || newoffset == NULL) return UVWASI_EINVAL; @@ -1349,7 +1467,7 @@ uvwasi_errno_t err; int r; - DEBUG("uvwasi_fd_sync(uvwasi=%p, fd=%d)\n", uvwasi, fd); + UVWASI_DEBUG("uvwasi_fd_sync(uvwasi=%p, fd=%d)\n", uvwasi, fd); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -1379,7 +1497,10 @@ struct uvwasi_fd_wrap_t* wrap; uvwasi_errno_t err; - DEBUG("uvwasi_fd_tell(uvwasi=%p, fd=%d, offset=%p)\n", uvwasi, fd, offset); + UVWASI_DEBUG("uvwasi_fd_tell(uvwasi=%p, fd=%d, offset=%p)\n", + uvwasi, + fd, + offset); if (uvwasi == NULL || offset == NULL) return UVWASI_EINVAL; @@ -1406,13 +1527,13 @@ size_t uvwritten; int r; - DEBUG("uvwasi_fd_write(uvwasi=%p, fd=%d, iovs=%p, iovs_len=%zu, " - "nwritten=%p)\n", - uvwasi, - fd, - iovs, - iovs_len, - nwritten); + UVWASI_DEBUG("uvwasi_fd_write(uvwasi=%p, fd=%d, iovs=%p, iovs_len=%d, " + "nwritten=%p)\n", + uvwasi, + fd, + iovs, + iovs_len, + nwritten); if (uvwasi == NULL || iovs == NULL || nwritten == NULL) return UVWASI_EINVAL; @@ -1451,12 +1572,12 @@ uvwasi_errno_t err; int r; - DEBUG("uvwasi_path_create_directory(uvwasi=%p, fd=%d, path='%s', " - "path_len=%zu)\n", - uvwasi, - fd, - path, - path_len); + UVWASI_DEBUG("uvwasi_path_create_directory(uvwasi=%p, fd=%d, path='%s', " + "path_len=%d)\n", + uvwasi, + fd, + path, + path_len); if (uvwasi == NULL || path == NULL) return UVWASI_EINVAL; @@ -1501,14 +1622,14 @@ uvwasi_errno_t err; int r; - DEBUG("uvwasi_path_filestat_get(uvwasi=%p, fd=%d, flags=%d, path='%s', " - "path_len=%zu, buf=%p)\n", - uvwasi, - fd, - flags, - path, - path_len, - buf); + UVWASI_DEBUG("uvwasi_path_filestat_get(uvwasi=%p, fd=%d, flags=%d, " + "path='%s', path_len=%d, buf=%p)\n", + uvwasi, + fd, + flags, + path, + path_len, + buf); if (uvwasi == NULL || path == NULL || buf == NULL) return UVWASI_EINVAL; @@ -1530,7 +1651,7 @@ if (err != UVWASI_ESUCCESS) goto exit; - r = uv_fs_stat(NULL, &req, resolved_path, NULL); + r = uv_fs_lstat(NULL, &req, resolved_path, NULL); uvwasi__free(uvwasi, resolved_path); if (r != 0) { uv_fs_req_cleanup(&req); @@ -1555,31 +1676,30 @@ uvwasi_timestamp_t st_atim, uvwasi_timestamp_t st_mtim, uvwasi_fstflags_t fst_flags) { - /* TODO(cjihrig): libuv does not currently support nanosecond precision. */ char* resolved_path; struct uvwasi_fd_wrap_t* wrap; + uvwasi_timestamp_t atim; + uvwasi_timestamp_t mtim; uv_fs_t req; uvwasi_errno_t err; int r; - DEBUG("uvwasi_path_filestat_set_times(uvwasi=%p, fd=%d, flags=%d, path='%s', " - "path_len=%zu, st_atim=%"PRIu64", st_mtim=%"PRIu64", fst_flags=%d)\n", - uvwasi, - fd, - flags, - path, - path_len, - st_atim, - st_mtim, - fst_flags); + UVWASI_DEBUG("uvwasi_path_filestat_set_times(uvwasi=%p, fd=%d, " + "flags=%d, path='%s', path_len=%d, " + "st_atim=%"PRIu64", st_mtim=%"PRIu64", fst_flags=%d)\n", + uvwasi, + fd, + flags, + path, + path_len, + st_atim, + st_mtim, + fst_flags); if (uvwasi == NULL || path == NULL) return UVWASI_EINVAL; - if (fst_flags & ~(UVWASI_FILESTAT_SET_ATIM | UVWASI_FILESTAT_SET_ATIM_NOW | - UVWASI_FILESTAT_SET_MTIM | UVWASI_FILESTAT_SET_MTIM_NOW)) { - return UVWASI_EINVAL; - } + VALIDATE_FSTFLAGS_OR_RETURN(fst_flags); err = uvwasi_fd_table_get(uvwasi->fds, fd, @@ -1598,8 +1718,20 @@ if (err != UVWASI_ESUCCESS) goto exit; - /* TODO(cjihrig): st_atim and st_mtim should not be unconditionally passed. */ - r = uv_fs_utime(NULL, &req, resolved_path, st_atim, st_mtim, NULL); + atim = st_atim; + mtim = st_mtim; + err = uvwasi__get_filestat_set_times(&atim, + &mtim, + fst_flags, + NULL, + resolved_path); + if (err != UVWASI_ESUCCESS) { + uvwasi__free(uvwasi, resolved_path); + goto exit; + } + + /* libuv does not currently support nanosecond precision. */ + r = uv_fs_lutime(NULL, &req, resolved_path, atim, mtim, NULL); uvwasi__free(uvwasi, resolved_path); uv_fs_req_cleanup(&req); @@ -1631,16 +1763,17 @@ uv_fs_t req; int r; - DEBUG("uvwasi_path_link(uvwasi=%p, old_fd=%d, old_flags=%d, old_path='%s', " - "old_path_len=%zu, new_fd=%d, new_path='%s', new_path_len=%zu)\n", - uvwasi, - old_fd, - old_flags, - old_path, - old_path_len, - new_fd, - new_path, - new_path_len); + UVWASI_DEBUG("uvwasi_path_link(uvwasi=%p, old_fd=%d, old_flags=%d, " + "old_path='%s', old_path_len=%d, new_fd=%d, new_path='%s', " + "new_path_len=%d)\n", + uvwasi, + old_fd, + old_flags, + old_path, + old_path_len, + new_fd, + new_path, + new_path_len); if (uvwasi == NULL || old_path == NULL || new_path == NULL) return UVWASI_EINVAL; @@ -1745,19 +1878,19 @@ int write; int r; - DEBUG("uvwasi_path_open(uvwasi=%p, dirfd=%d, dirflags=%d, path='%s', " - "path_len=%zu, o_flags=%d, fs_rights_base=%"PRIu64", " - "fs_rights_inheriting=%"PRIu64", fs_flags=%d, fd=%p)\n", - uvwasi, - dirfd, - dirflags, - path, - path_len, - o_flags, - fs_rights_base, - fs_rights_inheriting, - fs_flags, - fd); + UVWASI_DEBUG("uvwasi_path_open(uvwasi=%p, dirfd=%d, dirflags=%d, path='%s', " + "path_len=%d, o_flags=%d, fs_rights_base=%"PRIu64", " + "fs_rights_inheriting=%"PRIu64", fs_flags=%d, fd=%p)\n", + uvwasi, + dirfd, + dirflags, + path, + path_len, + o_flags, + fs_rights_base, + fs_rights_inheriting, + fs_flags, + fd); if (uvwasi == NULL || path == NULL || fd == NULL) return UVWASI_EINVAL; @@ -1892,15 +2025,15 @@ size_t len; int r; - DEBUG("uvwasi_path_readlink(uvwasi=%p, fd=%d, path='%s', path_len=%zu, " - "buf=%p, buf_len=%zu, bufused=%p)\n", - uvwasi, - fd, - path, - path_len, - buf, - buf_len, - bufused); + UVWASI_DEBUG("uvwasi_path_readlink(uvwasi=%p, fd=%d, path='%s', path_len=%d, " + "buf=%p, buf_len=%d, bufused=%p)\n", + uvwasi, + fd, + path, + path_len, + buf, + buf_len, + bufused); if (uvwasi == NULL || path == NULL || buf == NULL || bufused == NULL) return UVWASI_EINVAL; @@ -1951,12 +2084,12 @@ uvwasi_errno_t err; int r; - DEBUG("uvwasi_path_remove_directory(uvwasi=%p, fd=%d, path='%s', " - "path_len=%zu)\n", - uvwasi, - fd, - path, - path_len); + UVWASI_DEBUG("uvwasi_path_remove_directory(uvwasi=%p, fd=%d, path='%s', " + "path_len=%d)\n", + uvwasi, + fd, + path, + path_len); if (uvwasi == NULL || path == NULL) return UVWASI_EINVAL; @@ -2002,15 +2135,15 @@ uv_fs_t req; int r; - DEBUG("uvwasi_path_rename(uvwasi=%p, old_fd=%d, old_path='%s', " - "old_path_len=%zu, new_fd=%d, new_path='%s', new_path_len=%zu)\n", - uvwasi, - old_fd, - old_path, - old_path_len, - new_fd, - new_path, - new_path_len); + UVWASI_DEBUG("uvwasi_path_rename(uvwasi=%p, old_fd=%d, old_path='%s', " + "old_path_len=%d, new_fd=%d, new_path='%s', new_path_len=%d)\n", + uvwasi, + old_fd, + old_path, + old_path_len, + new_fd, + new_path, + new_path_len); if (uvwasi == NULL || old_path == NULL || new_path == NULL) return UVWASI_EINVAL; @@ -2102,14 +2235,14 @@ uv_fs_t req; int r; - DEBUG("uvwasi_path_symlink(uvwasi=%p, old_path='%s', old_path_len=%zu, " - "fd=%d, new_path='%s', new_path_len=%zu)\n", - uvwasi, - old_path, - old_path_len, - fd, - new_path, - new_path_len); + UVWASI_DEBUG("uvwasi_path_symlink(uvwasi=%p, old_path='%s', old_path_len=%d, " + "fd=%d, new_path='%s', new_path_len=%d)\n", + uvwasi, + old_path, + old_path_len, + fd, + new_path, + new_path_len); if (uvwasi == NULL || old_path == NULL || new_path == NULL) return UVWASI_EINVAL; @@ -2155,11 +2288,12 @@ uvwasi_errno_t err; int r; - DEBUG("uvwasi_path_unlink_file(uvwasi=%p, fd=%d, path='%s', path_len=%zu)\n", - uvwasi, - fd, - path, - path_len); + UVWASI_DEBUG("uvwasi_path_unlink_file(uvwasi=%p, fd=%d, path='%s', " + "path_len=%d)\n", + uvwasi, + fd, + path, + path_len); if (uvwasi == NULL || path == NULL) return UVWASI_EINVAL; @@ -2207,13 +2341,13 @@ int has_timeout; uvwasi_size_t i; - DEBUG("uvwasi_poll_oneoff(uvwasi=%p, in=%p, out=%p, nsubscriptions=%zu, " - "nevents=%p)\n", - uvwasi, - in, - out, - nsubscriptions, - nevents); + UVWASI_DEBUG("uvwasi_poll_oneoff(uvwasi=%p, in=%p, out=%p, " + "nsubscriptions=%d, nevents=%p)\n", + uvwasi, + in, + out, + nsubscriptions, + nevents); if (uvwasi == NULL || in == NULL || out == NULL || nsubscriptions == 0 || nevents == NULL) { @@ -2225,6 +2359,7 @@ if (err != UVWASI_ESUCCESS) return err; + timer_userdata = 0; has_timeout = 0; min_timeout = 0; @@ -2313,7 +2448,7 @@ uvwasi_errno_t uvwasi_proc_exit(uvwasi_t* uvwasi, uvwasi_exitcode_t rval) { - DEBUG("uvwasi_proc_exit(uvwasi=%p, rval=%d)\n", uvwasi, rval); + UVWASI_DEBUG("uvwasi_proc_exit(uvwasi=%p, rval=%d)\n", uvwasi, rval); exit(rval); return UVWASI_ESUCCESS; /* This doesn't happen. */ } @@ -2322,7 +2457,7 @@ uvwasi_errno_t uvwasi_proc_raise(uvwasi_t* uvwasi, uvwasi_signal_t sig) { int r; - DEBUG("uvwasi_proc_raise(uvwasi=%p, sig=%d)\n", uvwasi, sig); + UVWASI_DEBUG("uvwasi_proc_raise(uvwasi=%p, sig=%d)\n", uvwasi, sig); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -2344,10 +2479,10 @@ uvwasi_size_t buf_len) { int r; - DEBUG("uvwasi_random_get(uvwasi=%p, buf=%p, buf_len=%zu)\n", - uvwasi, - buf, - buf_len); + UVWASI_DEBUG("uvwasi_random_get(uvwasi=%p, buf=%p, buf_len=%d)\n", + uvwasi, + buf, + buf_len); if (uvwasi == NULL || buf == NULL) return UVWASI_EINVAL; @@ -2361,7 +2496,7 @@ uvwasi_errno_t uvwasi_sched_yield(uvwasi_t* uvwasi) { - DEBUG("uvwasi_sched_yield(uvwasi=%p)\n", uvwasi); + UVWASI_DEBUG("uvwasi_sched_yield(uvwasi=%p)\n", uvwasi); if (uvwasi == NULL) return UVWASI_EINVAL; @@ -2386,7 +2521,7 @@ uvwasi_roflags_t* ro_flags) { /* TODO(cjihrig): Waiting to implement, pending https://github.com/WebAssembly/WASI/issues/4 */ - DEBUG("uvwasi_sock_recv(uvwasi=%p, unimplemented)\n", uvwasi); + UVWASI_DEBUG("uvwasi_sock_recv(uvwasi=%p, unimplemented)\n", uvwasi); return UVWASI_ENOTSUP; } @@ -2399,7 +2534,7 @@ uvwasi_size_t* so_datalen) { /* TODO(cjihrig): Waiting to implement, pending https://github.com/WebAssembly/WASI/issues/4 */ - DEBUG("uvwasi_sock_send(uvwasi=%p, unimplemented)\n", uvwasi); + UVWASI_DEBUG("uvwasi_sock_send(uvwasi=%p, unimplemented)\n", uvwasi); return UVWASI_ENOTSUP; } @@ -2409,7 +2544,7 @@ uvwasi_sdflags_t how) { /* TODO(cjihrig): Waiting to implement, pending https://github.com/WebAssembly/WASI/issues/4 */ - DEBUG("uvwasi_sock_shutdown(uvwasi=%p, unimplemented)\n", uvwasi); + UVWASI_DEBUG("uvwasi_sock_shutdown(uvwasi=%p, unimplemented)\n", uvwasi); return UVWASI_ENOTSUP; } diff -Nru nodejs-mozilla-12.18.1/deps/uvwasi/src/wasi_serdes.c nodejs-mozilla-12.22.12/deps/uvwasi/src/wasi_serdes.c --- nodejs-mozilla-12.18.1/deps/uvwasi/src/wasi_serdes.c 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/uvwasi/src/wasi_serdes.c 2022-04-05 07:17:01.000000000 +0000 @@ -84,6 +84,13 @@ ALIAS(userdata_t, uint64_t) \ ALIAS(whence_t, uint8_t) \ \ + STRUCT(dirent_t) { \ + FIELD( 0, dircookie_t, d_next); \ + FIELD( 8, inode_t, d_ino); \ + FIELD(16, uint32_t, d_namlen); \ + FIELD(20, filetype_t, d_type); \ + } \ + \ STRUCT(fdstat_t) { \ FIELD( 0, filetype_t, fs_filetype); \ FIELD( 2, fdflags_t, fs_flags); \ diff -Nru nodejs-mozilla-12.18.1/deps/v8/BUILD.gn nodejs-mozilla-12.22.12/deps/v8/BUILD.gn --- nodejs-mozilla-12.18.1/deps/v8/BUILD.gn 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/BUILD.gn 2022-04-05 07:17:01.000000000 +0000 @@ -6,7 +6,6 @@ import("//build/config/arm.gni") import("//build/config/dcheck_always_on.gni") import("//build/config/host_byteorder.gni") -import("//build/config/jumbo.gni") import("//build/config/mips.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build_overrides/build.gni") @@ -266,7 +265,8 @@ # config("internal_config_base") { - visibility = [ ":*" ] # Only targets in this file can depend on this. + # Only targets in this file and its subdirs can depend on this. + visibility = [ "./*" ] include_dirs = [ ".", @@ -276,7 +276,8 @@ config("internal_config") { defines = [] - visibility = [ ":*" ] # Only targets in this file can depend on this. + # Only targets in this file and its subdirs can depend on this. + visibility = [ "./*" ] configs = [ "//build/config/compiler:wexit_time_destructors", @@ -362,7 +363,8 @@ # Put defines here that are only used in our internal files and NEVER in # external headers that embedders (such as chromium and node) might include. config("features") { - visibility = [ ":*" ] # Only targets in this file can depend on this. + # Only targets in this file and its subdirs can depend on this. + visibility = [ "./*" ] defines = [] @@ -479,7 +481,8 @@ } config("toolchain") { - visibility = [ ":*" ] # Only targets in this file can depend on this. + # Only targets in this file and its subdirs can depend on this. + visibility = [ "./*" ] defines = [] cflags = [] @@ -1470,17 +1473,12 @@ if (v8_use_multi_snapshots) { deps += [ ":asm_to_inline_asm_trusted" ] sources += [ "$target_gen_dir/embedded_trusted.cc" ] - jumbo_excluded_sources = [ "$target_gen_dir/embedded_trusted.cc" ] } } else if (v8_enable_embedded_builtins) { sources += [ "$target_gen_dir/embedded.S" ] if (v8_use_multi_snapshots) { sources += [ "$target_gen_dir/embedded_trusted.S" ] - jumbo_excluded_sources = [ - # Duplicated symbols with embedded.S - "$target_gen_dir/embedded_trusted.S", - ] } } else { sources += [ "src/snapshot/embedded/embedded-empty.cc" ] @@ -1577,17 +1575,6 @@ "src/interpreter/interpreter-intrinsics-generator.h", ] - jumbo_excluded_sources = [ - # TODO(mostynb@vewd.com): don't exclude these http://crbug.com/752428 - "src/builtins/builtins-async-iterator-gen.cc", - "src/builtins/builtins-async-generator-gen.cc", - - # These source files take an unusually large amount of time to - # compile. Build them separately to avoid bottlenecks. - "src/builtins/builtins-regexp-gen.cc", - "src/codegen/code-stub-assembler.cc", - ] - if (v8_current_cpu == "x86") { sources += [ ### gcmole(arch:ia32) ### @@ -2996,19 +2983,6 @@ sources += check_header_includes_sources } - jumbo_excluded_sources = [ - # TODO(mostynb@vewd.com): don't exclude these http://crbug.com/752428 - "src/profiler/heap-snapshot-generator.cc", # Macro clash in mman-linux.h - - # These source files take an unusually large amount of time to - # compile. Build them separately to avoid bottlenecks. - "src/api/api.cc", - "src/heap/heap.cc", - "src/objects/elements.cc", - "src/objects/objects.cc", - "src/parsing/parser.cc", - ] - if (v8_current_cpu == "x86") { sources += [ ### gcmole(arch:ia32) ### "src/codegen/ia32/assembler-ia32-inl.h", @@ -3162,11 +3136,6 @@ "src/diagnostics/unwinding-info-win64.h", ] } - jumbo_excluded_sources += [ - # TODO(mostynb@vewd.com): fix this code so it doesn't need - # to be excluded, see the comments inside. - "src/codegen/arm64/instructions-arm64-constants.cc", - ] } else if (v8_current_cpu == "mips" || v8_current_cpu == "mipsel") { sources += [ ### gcmole(arch:mipsel) ### "src/codegen/mips/assembler-mips-inl.h", diff -Nru nodejs-mozilla-12.18.1/deps/v8/DEPS nodejs-mozilla-12.22.12/deps/v8/DEPS --- nodejs-mozilla-12.18.1/deps/v8/DEPS 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/DEPS 2022-04-05 07:17:01.000000000 +0000 @@ -2,7 +2,15 @@ # directory and assume that the root of the checkout is in ./v8/, so # all paths in here must match this assumption. +gclient_gn_args_file = 'v8/build/config/gclient_args.gni' +gclient_gn_args = [ + 'checkout_aemu' +] + vars = { + # By Default, do not checkout AEMU, as it is too big, as is done in Chromium. + 'checkout_aemu': False, + # Fetches only the SDK boot images which match at least one of the whitelist # entries in a comma-separated list. # @@ -72,15 +80,15 @@ deps = { 'v8/build': - Var('chromium_url') + '/chromium/src/build.git' + '@' + '693faeda4ee025796c7e473d953a5a7b6ad64c93', + Var('chromium_url') + '/chromium/src/build.git' + '@' + 'c854b8178a7e0a20b168ffded4f2d2cb1e136e42', 'v8/third_party/depot_tools': - Var('chromium_url') + '/chromium/tools/depot_tools.git' + '@' + 'f38bc1796282c61087dcf15abc61b8fd18a68402', + Var('chromium_url') + '/chromium/tools/depot_tools.git' + '@' + 'd4e6fb6573e0955110a2c69be29557f6626d9ae6', 'v8/third_party/icu': Var('chromium_url') + '/chromium/deps/icu.git' + '@' + '53f6b233a41ec982d8445996247093f7aaf41639', 'v8/third_party/instrumented_libraries': Var('chromium_url') + '/chromium/src/third_party/instrumented_libraries.git' + '@' + 'b1c3ca20848c117eb935b02c25d441f03e6fbc5e', 'v8/buildtools': - Var('chromium_url') + '/chromium/src/buildtools.git' + '@' + '74cfb57006f83cfe050817526db359d5c8a11628', + Var('chromium_url') + '/chromium/src/buildtools.git' + '@' + '6302c1175607a436e18947a5abe9df2209e845fc', 'v8/buildtools/clang_format/script': Var('chromium_url') + '/chromium/llvm-project/cfe/tools/clang-format.git' + '@' + '96636aa0e9f047f17447f2d45a094d0b59ed7917', 'v8/buildtools/linux64': { @@ -104,11 +112,11 @@ 'condition': 'host_os == "mac"', }, 'v8/buildtools/third_party/libc++/trunk': - Var('chromium_url') + '/chromium/llvm-project/libcxx.git' + '@' + '5938e0582bac570a41edb3d6a2217c299adc1bc6', + Var('chromium_url') + '/chromium/llvm-project/libcxx.git' + '@' + '78d6a7767ed57b50122a161b91f59f19c9bd0d19', 'v8/buildtools/third_party/libc++abi/trunk': - Var('chromium_url') + '/chromium/llvm-project/libcxxabi.git' + '@' + '0d529660e32d77d9111912d73f2c74fc5fa2a858', + Var('chromium_url') + '/chromium/llvm-project/libcxxabi.git' + '@' + 'ce3db128f9e4d6d19d1cdbe39bb45fcc64a5adb0', 'v8/buildtools/third_party/libunwind/trunk': - Var('chromium_url') + '/external/llvm.org/libunwind.git' + '@' + '69d9b84cca8354117b9fe9705a4430d789ee599b', + Var('chromium_url') + '/external/llvm.org/libunwind.git' + '@' + '3e6ec2ae9afaa3683269b690612f84d907943ea2', 'v8/buildtools/win': { 'packages': [ { @@ -168,7 +176,7 @@ 'dep_type': 'cipd', }, 'v8/third_party/catapult': { - 'url': Var('chromium_url') + '/catapult.git' + '@' + 'e7c719c3e85f76938bf4fef0ba37c27f89246f71', + 'url': Var('chromium_url') + '/catapult.git' + '@' + 'f92a7636da65f28dad15bc524e6b681d1c311de0', 'condition': 'checkout_android', }, 'v8/third_party/colorama/src': { @@ -216,7 +224,7 @@ 'dep_type': 'cipd', }, 'v8/tools/clang': - Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + '2fef805e5b05b26a8c87c47865590b5f43218611', + Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + 'c72342ce992ebd9cc02c0d65f0af5941d29eb217', 'v8/tools/luci-go': { 'packages': [ { @@ -246,7 +254,7 @@ 'dep_type': 'cipd', }, 'v8/third_party/perfetto': - Var('android_url') + '/platform/external/perfetto.git' + '@' + '01615892494a9a8dc84414962d0a817bf97de2c2', + Var('android_url') + '/platform/external/perfetto.git' + '@' + '7cdc44f903d3bcfd1d0f67188bfa797a24756868', 'v8/third_party/protobuf': Var('chromium_url') + '/external/github.com/google/protobuf'+ '@' + 'b68a347f56137b4b1a746e8c7438495a6ac1bd91', } diff -Nru nodejs-mozilla-12.18.1/deps/v8/gni/proto_library.gni nodejs-mozilla-12.22.12/deps/v8/gni/proto_library.gni --- nodejs-mozilla-12.18.1/deps/v8/gni/proto_library.gni 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/gni/proto_library.gni 2022-04-05 07:17:01.000000000 +0000 @@ -11,8 +11,6 @@ assert(defined(invoker.sources)) proto_sources = invoker.sources - set_sources_assignment_filter([]) - if (host_os == "win") { host_executable_suffix = ".exe" } else { @@ -137,6 +135,12 @@ ] } + if (defined(invoker.import_dirs)) { + foreach(path, invoker.import_dirs) { + args += [ "--import-dir=" + rebase_path(path, root_build_dir) ] + } + } + if (generate_with_plugin) { plugin_path_rebased = rebase_path(plugin_path, root_build_dir) plugin_out_args = "" @@ -187,10 +191,7 @@ "visibility", ]) - # Exclude the config.descriptor file which is an output for some reason. - set_sources_assignment_filter([ "*.descriptor" ]) sources = get_target_outputs(":$action_name") - set_sources_assignment_filter(sources_assignment_filter) # configs -= [ "//gn/standalone:extra_warnings" ] if (defined(invoker.extra_configs)) { diff -Nru nodejs-mozilla-12.18.1/deps/v8/gni/split_static_library.gni nodejs-mozilla-12.22.12/deps/v8/gni/split_static_library.gni --- nodejs-mozilla-12.18.1/deps/v8/gni/split_static_library.gni 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/gni/split_static_library.gni 2022-04-05 07:17:01.000000000 +0000 @@ -0,0 +1,78 @@ +# Copyright 2019 the V8 project authors. All rights reserved. +# Copyright 2016 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/compiler/compiler.gni") + +template("split_static_library") { + assert(defined(invoker.split_count), + "Must define split_count for split_static_library") + + # In many conditions the number of inputs will be 1 (because the + # count will be conditional on platform or configuration) and for + # some build configurations it's unnecessary to split libraries + # since the tooling will never create files of a problematic size. + if (invoker.split_count == 1 || use_lld) { + static_library(target_name) { + forward_variables_from(invoker, "*") + } + } else { + group_name = target_name + + generated_static_libraries = [] + current_library_index = 0 + foreach(current_sources, split_list(invoker.sources, invoker.split_count)) { + current_name = "${target_name}_$current_library_index" + assert( + current_sources != [], + "Your values for splitting a static library generate one that has no sources.") + generated_static_libraries += [ ":$current_name" ] + + static_library(current_name) { + # Generated static library shard gets everything but sources (which + # we're redefining) and visibility (which is set to be the group + # below). + forward_variables_from(invoker, + "*", + [ + "check_includes", + "sources", + "visibility", + ]) + sources = current_sources + visibility = [ ":$group_name" ] + + # When splitting a target's sources up into a series of static + # libraries, those targets will naturally include headers from each + # other arbitrarily. We could theoretically generate a web of + # dependencies and allow_circular_includes_from between all pairs of + # targets, but that's very cumbersome. Typical usage in Chrome is that + # only official Windows builds use split static libraries due to the + # Visual Studio size limits, and this means we'll still get header + # checking coverage for the other configurations. + check_includes = false + + # Uniquify the output name if one is specified. + if (defined(invoker.output_name)) { + output_name = "${invoker.output_name}_$current_library_index" + } + } + + current_library_index = current_library_index + 1 + } + + group(group_name) { + public_deps = generated_static_libraries + forward_variables_from(invoker, + [ + "testonly", + "visibility", + ]) + } + } +} + +set_defaults("split_static_library") { + configs = default_compiler_configs +} diff -Nru nodejs-mozilla-12.18.1/deps/v8/gni/v8.gni nodejs-mozilla-12.22.12/deps/v8/gni/v8.gni --- nodejs-mozilla-12.18.1/deps/v8/gni/v8.gni 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/gni/v8.gni 2022-04-05 07:17:01.000000000 +0000 @@ -2,10 +2,9 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/jumbo.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/v8_target_cpu.gni") -import("//build/split_static_library.gni") +import("split_static_library.gni") declare_args() { # Set flags for tracking code coverage. Uses gcov with gcc and sanitizer @@ -80,7 +79,7 @@ # build configuration. This allows us to set v8_use_multi_snapshots=true on # all bots, and e.g. no-snapshot bots will automatically do the right thing. v8_use_multi_snapshots = - v8_use_external_startup_data && !build_with_chromium && !use_jumbo_build + v8_use_external_startup_data && !build_with_chromium } if (v8_enable_backtrace == "") { @@ -149,9 +148,9 @@ defined(v8_static_library) && v8_static_library && is_win) { link_target_type = "jumbo_split_static_library" } else if (defined(v8_static_library) && v8_static_library) { - link_target_type = "jumbo_static_library" + link_target_type = "static_library" } else { - link_target_type = "jumbo_source_set" + link_target_type = "source_set" } target(link_target_type, target_name) { forward_variables_from(invoker, @@ -170,7 +169,7 @@ } template("v8_header_set") { - jumbo_source_set(target_name) { + source_set(target_name) { forward_variables_from(invoker, "*", [ "configs" ]) configs -= v8_remove_configs configs += v8_add_configs diff -Nru nodejs-mozilla-12.18.1/deps/v8/infra/mb/mb_config.pyl nodejs-mozilla-12.22.12/deps/v8/infra/mb/mb_config.pyl --- nodejs-mozilla-12.18.1/deps/v8/infra/mb/mb_config.pyl 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/infra/mb/mb_config.pyl 2022-04-05 07:17:01.000000000 +0000 @@ -64,11 +64,6 @@ 'V8 Linux64 - debug - header includes': 'debug_x64_header_includes', 'V8 Linux64 - shared': 'release_x64_shared_verify_heap', 'V8 Linux64 - verify csa': 'release_x64_verify_csa', - # Jumbo. - 'V8 Linux64 Jumbo': 'release_x64_jumbo', - 'V8 Linux64 Jumbo - debug': 'debug_x64_jumbo', - 'V8 Linux64 Jumbo - limited': 'release_x64_jumbo_limited', - 'V8 Linux64 Jumbo - limited - debug': 'debug_x64_jumbo_limited', # Windows. 'V8 Win32 - builder': 'release_x86_minimal_symbols', 'V8 Win32 - debug builder': 'debug_x86_minimal_symbols', @@ -230,8 +225,6 @@ 'v8_linux64_msan_rel': 'release_simulate_arm64_msan_minimal_symbols', 'v8_linux64_sanitizer_coverage_rel': 'release_x64_asan_minimal_symbols_coverage', - 'v8_linux64_jumbo_compile_rel': 'release_x64_jumbo_trybot', - 'v8_linux64_jumbo_limited_compile_rel': 'release_x64_jumbo_limited_trybot', 'v8_linux64_tsan_rel': 'release_x64_tsan_minimal_symbols', 'v8_linux64_tsan_isolates_rel_ng': 'release_x64_tsan_minimal_symbols', @@ -448,14 +441,6 @@ 'release_bot', 'x64', 'ios_simulator'], 'release_x64_internal': [ 'release_bot', 'x64', 'v8_snapshot_internal'], - 'release_x64_jumbo': [ - 'release_bot', 'x64', 'jumbo'], - 'release_x64_jumbo_trybot': [ - 'release_trybot', 'x64', 'jumbo'], - 'release_x64_jumbo_limited': [ - 'release_bot', 'x64', 'jumbo_limited'], - 'release_x64_jumbo_limited_trybot': [ - 'release_trybot', 'x64', 'jumbo_limited'], 'release_x64_minimal_symbols': [ 'release_bot', 'x64', 'minimal_symbols'], 'release_x64_pointer_compression': [ @@ -499,10 +484,6 @@ 'debug_bot', 'x64', 'gcc', 'v8_check_header_includes'], 'debug_x64_header_includes': [ 'debug_bot', 'x64', 'v8_check_header_includes'], - 'debug_x64_jumbo': [ - 'debug_bot', 'x64', 'jumbo'], - 'debug_x64_jumbo_limited': [ - 'debug_bot', 'x64', 'jumbo_limited'], 'debug_x64_minimal_symbols': [ 'debug_bot', 'x64', 'minimal_symbols'], 'debug_x64_perfetto': [ @@ -668,14 +649,6 @@ 'gn_args': 'target_cpu="x64" target_os="ios"', }, - 'jumbo': { - 'gn_args': 'use_jumbo_build=true', - }, - - 'jumbo_limited': { - 'gn_args': 'use_jumbo_build=true jumbo_file_merge_limit=50', - }, - 'lsan': { 'mixins': ['v8_enable_test_features'], 'gn_args': 'is_lsan=true', diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/api/api.cc nodejs-mozilla-12.22.12/deps/v8/src/api/api.cc --- nodejs-mozilla-12.18.1/deps/v8/src/api/api.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/api/api.cc 2022-04-05 07:17:01.000000000 +0000 @@ -4701,9 +4701,9 @@ v8::Object::GetRealNamedPropertyAttributesInPrototypeChain( Local context, Local key) { auto isolate = reinterpret_cast(context->GetIsolate()); - ENTER_V8_NO_SCRIPT(isolate, context, Object, - GetRealNamedPropertyAttributesInPrototypeChain, - Nothing(), i::HandleScope); + ENTER_V8(isolate, context, Object, + GetRealNamedPropertyAttributesInPrototypeChain, + Nothing(), i::HandleScope); i::Handle self = Utils::OpenHandle(this); if (!self->IsJSObject()) return Nothing(); i::Handle key_obj = Utils::OpenHandle(*key); @@ -4716,6 +4716,7 @@ i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); Maybe result = i::JSReceiver::GetPropertyAttributes(&it); + has_pending_exception = result.IsNothing(); RETURN_ON_FAILED_EXECUTION_PRIMITIVE(PropertyAttribute); if (!it.IsFound()) return Nothing(); if (result.FromJust() == i::ABSENT) return Just(None); @@ -4740,14 +4741,15 @@ Maybe v8::Object::GetRealNamedPropertyAttributes( Local context, Local key) { auto isolate = reinterpret_cast(context->GetIsolate()); - ENTER_V8_NO_SCRIPT(isolate, context, Object, GetRealNamedPropertyAttributes, - Nothing(), i::HandleScope); + ENTER_V8(isolate, context, Object, GetRealNamedPropertyAttributes, + Nothing(), i::HandleScope); auto self = Utils::OpenHandle(this); auto key_obj = Utils::OpenHandle(*key); i::LookupIterator it = i::LookupIterator::PropertyOrElement( isolate, self, key_obj, self, i::LookupIterator::PROTOTYPE_CHAIN_SKIP_INTERCEPTOR); auto result = i::JSReceiver::GetPropertyAttributes(&it); + has_pending_exception = result.IsNothing(); RETURN_ON_FAILED_EXECUTION_PRIMITIVE(PropertyAttribute); if (!it.IsFound()) return Nothing(); if (result.FromJust() == i::ABSENT) { diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/base/cpu.cc nodejs-mozilla-12.22.12/deps/v8/src/base/cpu.cc --- nodejs-mozilla-12.18.1/deps/v8/src/base/cpu.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/base/cpu.cc 2022-04-05 07:17:01.000000000 +0000 @@ -27,6 +27,9 @@ #ifndef POWER_9 #define POWER_9 0x20000 #endif +#ifndef POWER_10 +#define POWER_10 0x40000 +#endif #endif #if V8_OS_POSIX #include // sysconf() @@ -639,7 +642,10 @@ part_ = -1; if (auxv_cpu_type) { - if (strcmp(auxv_cpu_type, "power9") == 0) { + if (strcmp(auxv_cpu_type, "power10") == 0) { + part_ = PPC_POWER10; + } + else if (strcmp(auxv_cpu_type, "power9") == 0) { part_ = PPC_POWER9; } else if (strcmp(auxv_cpu_type, "power8") == 0) { part_ = PPC_POWER8; @@ -660,6 +666,9 @@ #elif V8_OS_AIX switch (_system_configuration.implementation) { + case POWER_10: + part_ = PPC_POWER10; + break; case POWER_9: part_ = PPC_POWER9; break; diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/base/cpu.h nodejs-mozilla-12.22.12/deps/v8/src/base/cpu.h --- nodejs-mozilla-12.18.1/deps/v8/src/base/cpu.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/base/cpu.h 2022-04-05 07:17:01.000000000 +0000 @@ -70,6 +70,7 @@ PPC_POWER7, PPC_POWER8, PPC_POWER9, + PPC_POWER10, PPC_G4, PPC_G5, PPC_PA6T diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/base/macros.h nodejs-mozilla-12.22.12/deps/v8/src/base/macros.h --- nodejs-mozilla-12.18.1/deps/v8/src/base/macros.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/base/macros.h 2022-04-05 07:17:01.000000000 +0000 @@ -357,14 +357,14 @@ STATIC_ASSERT(std::is_integral::value); // m must be a power of two. DCHECK(m != 0 && ((m & (m - 1)) == 0)); - return x & -m; + return x & static_cast(-m); } template constexpr inline T RoundDown(T x) { STATIC_ASSERT(std::is_integral::value); // m must be a power of two. STATIC_ASSERT(m != 0 && ((m & (m - 1)) == 0)); - return x & -m; + return x & static_cast(-m); } // Return the smallest multiple of m which is >= x. diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/builtins/builtins-microtask-queue-gen.cc nodejs-mozilla-12.22.12/deps/v8/src/builtins/builtins-microtask-queue-gen.cc --- nodejs-mozilla-12.18.1/deps/v8/src/builtins/builtins-microtask-queue-gen.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/builtins/builtins-microtask-queue-gen.cc 2022-04-05 07:17:01.000000000 +0000 @@ -202,10 +202,17 @@ TNode const thenable = LoadObjectField( microtask, PromiseResolveThenableJobTask::kThenableOffset); + RunPromiseHook(Runtime::kPromiseHookBefore, microtask_context, + CAST(promise_to_resolve)); + TNode const result = CallBuiltin(Builtins::kPromiseResolveThenableJob, native_context, promise_to_resolve, thenable, then); GotoIfException(result, &if_exception, &var_exception); + + RunPromiseHook(Runtime::kPromiseHookAfter, microtask_context, + CAST(promise_to_resolve)); + RewindEnteredContext(saved_entered_context_count); SetCurrentContext(current_context); Goto(&done); diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/codegen/mips/macro-assembler-mips.cc nodejs-mozilla-12.22.12/deps/v8/src/codegen/mips/macro-assembler-mips.cc --- nodejs-mozilla-12.18.1/deps/v8/src/codegen/mips/macro-assembler-mips.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/codegen/mips/macro-assembler-mips.cc 2022-04-05 07:17:01.000000000 +0000 @@ -3853,10 +3853,8 @@ } void TurboAssembler::Jump(const ExternalReference& reference) { - UseScratchRegisterScope temps(this); - Register scratch = temps.Acquire(); - li(scratch, reference); - Jump(scratch); + li(t9, reference); + Jump(t9); } void MacroAssembler::JumpIfIsInRange(Register value, unsigned lower_limit, diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/codegen/mips64/macro-assembler-mips64.cc nodejs-mozilla-12.22.12/deps/v8/src/codegen/mips64/macro-assembler-mips64.cc --- nodejs-mozilla-12.18.1/deps/v8/src/codegen/mips64/macro-assembler-mips64.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/codegen/mips64/macro-assembler-mips64.cc 2022-04-05 07:17:01.000000000 +0000 @@ -4202,10 +4202,8 @@ } void TurboAssembler::Jump(const ExternalReference& reference) { - UseScratchRegisterScope temps(this); - Register scratch = temps.Acquire(); - li(scratch, reference); - Jump(scratch); + li(t9, reference); + Jump(t9); } // Note: To call gcc-compiled C code on mips, you must call through t9. diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/codegen/ppc/assembler-ppc.cc nodejs-mozilla-12.22.12/deps/v8/src/codegen/ppc/assembler-ppc.cc --- nodejs-mozilla-12.18.1/deps/v8/src/codegen/ppc/assembler-ppc.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/codegen/ppc/assembler-ppc.cc 2022-04-05 07:17:01.000000000 +0000 @@ -67,21 +67,28 @@ #ifndef USE_SIMULATOR // Probe for additional features at runtime. base::CPU cpu; - if (cpu.part() == base::CPU::PPC_POWER9) { + if (cpu.part() == base::CPU::PPC_POWER9 || + cpu.part() == base::CPU::PPC_POWER10) { supported_ |= (1u << MODULO); } #if V8_TARGET_ARCH_PPC64 - if (cpu.part() == base::CPU::PPC_POWER8) { + if (cpu.part() == base::CPU::PPC_POWER8 || + cpu.part() == base::CPU::PPC_POWER9 || + cpu.part() == base::CPU::PPC_POWER10) { supported_ |= (1u << FPR_GPR_MOV); } #endif if (cpu.part() == base::CPU::PPC_POWER6 || cpu.part() == base::CPU::PPC_POWER7 || - cpu.part() == base::CPU::PPC_POWER8) { + cpu.part() == base::CPU::PPC_POWER8 || + cpu.part() == base::CPU::PPC_POWER9 || + cpu.part() == base::CPU::PPC_POWER10) { supported_ |= (1u << LWSYNC); } if (cpu.part() == base::CPU::PPC_POWER7 || - cpu.part() == base::CPU::PPC_POWER8) { + cpu.part() == base::CPU::PPC_POWER8 || + cpu.part() == base::CPU::PPC_POWER9 || + cpu.part() == base::CPU::PPC_POWER10) { supported_ |= (1u << ISELECT); supported_ |= (1u << VSX); } diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc nodejs-mozilla-12.22.12/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc --- nodejs-mozilla-12.18.1/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/compiler/backend/ppc/code-generator-ppc.cc 2022-04-05 07:17:01.000000000 +0000 @@ -1480,12 +1480,14 @@ } break; case kPPC_MulHigh32: - __ mulhw(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1), - i.OutputRCBit()); + __ mulhw(r0, i.InputRegister(0), i.InputRegister(1), i.OutputRCBit()); + // High 32 bits are undefined and need to be cleared. + __ clrldi(i.OutputRegister(), r0, Operand(32)); break; case kPPC_MulHighU32: - __ mulhwu(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1), - i.OutputRCBit()); + __ mulhwu(r0, i.InputRegister(0), i.InputRegister(1), i.OutputRCBit()); + // High 32 bits are undefined and need to be cleared. + __ clrldi(i.OutputRegister(), r0, Operand(32)); break; case kPPC_MulDouble: ASSEMBLE_FLOAT_BINOP_RC(fmul, MiscField::decode(instr->opcode())); diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/debug/debug-evaluate.cc nodejs-mozilla-12.22.12/deps/v8/src/debug/debug-evaluate.cc --- nodejs-mozilla-12.18.1/deps/v8/src/debug/debug-evaluate.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/debug/debug-evaluate.cc 2022-04-05 07:17:01.000000000 +0000 @@ -457,6 +457,7 @@ case Bytecode::kToNumeric: case Bytecode::kToString: // Misc. + case Bytecode::kIncBlockCounter: // Coverage counters. case Bytecode::kForInEnumerate: case Bytecode::kForInPrepare: case Bytecode::kForInContinue: diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/execution/messages.cc nodejs-mozilla-12.22.12/deps/v8/src/execution/messages.cc --- nodejs-mozilla-12.18.1/deps/v8/src/execution/messages.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/execution/messages.cc 2022-04-05 07:17:01.000000000 +0000 @@ -823,7 +823,8 @@ Handle elems = Handle::cast(raw_stack); const bool in_recursion = isolate->formatting_stack_trace(); - if (!in_recursion) { + const bool has_overflowed = i::StackLimitCheck{isolate}.HasOverflowed(); + if (!in_recursion && !has_overflowed) { Handle error_context = error->GetCreationContext(); DCHECK(error_context->IsNativeContext()); diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/heap/factory.cc nodejs-mozilla-12.22.12/deps/v8/src/heap/factory.cc --- nodejs-mozilla-12.18.1/deps/v8/src/heap/factory.cc 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/heap/factory.cc 2022-04-05 07:17:01.000000000 +0000 @@ -1677,8 +1677,8 @@ script->set_flags(0); script->set_host_defined_options(*empty_fixed_array()); Handle scripts = script_list(); - scripts = WeakArrayList::AddToEnd(isolate(), scripts, - MaybeObjectHandle::Weak(script)); + scripts = WeakArrayList::Append(isolate(), scripts, + MaybeObjectHandle::Weak(script)); heap->set_script_list(*scripts); LOG(isolate(), ScriptEvent(Logger::ScriptEventType::kCreate, script_id)); TRACE_EVENT_OBJECT_CREATED_WITH_ID( @@ -2112,6 +2112,29 @@ return CopyArrayAndGrow(array, grow_by, allocation); } +Handle Factory::NewUninitializedWeakArrayList( + int capacity, AllocationType allocation) { + DCHECK_LE(0, capacity); + if (capacity == 0) return empty_weak_array_list(); + + HeapObject obj = AllocateRawWeakArrayList(capacity, allocation); + obj.set_map_after_allocation(*weak_array_list_map(), SKIP_WRITE_BARRIER); + + Handle result(WeakArrayList::cast(obj), isolate()); + result->set_length(0); + result->set_capacity(capacity); + return result; +} + +Handle Factory::NewWeakArrayList(int capacity, + AllocationType allocation) { + Handle result = + NewUninitializedWeakArrayList(capacity, allocation); + MemsetTagged(ObjectSlot(result->data_start()), + ReadOnlyRoots(isolate()).undefined_value(), capacity); + return result; +} + Handle Factory::CopyWeakFixedArrayAndGrow( Handle src, int grow_by, AllocationType allocation) { DCHECK(!src->IsTransitionArray()); // Compacted by GC, this code doesn't work @@ -2123,22 +2146,42 @@ int old_capacity = src->capacity(); int new_capacity = old_capacity + grow_by; DCHECK_GE(new_capacity, old_capacity); - HeapObject obj = AllocateRawWeakArrayList(new_capacity, allocation); - obj.set_map_after_allocation(src->map(), SKIP_WRITE_BARRIER); - - WeakArrayList result = WeakArrayList::cast(obj); + Handle result = + NewUninitializedWeakArrayList(new_capacity, allocation); int old_len = src->length(); - result.set_length(old_len); - result.set_capacity(new_capacity); + result->set_length(old_len); // Copy the content. DisallowHeapAllocation no_gc; - WriteBarrierMode mode = obj.GetWriteBarrierMode(no_gc); - result.CopyElements(isolate(), 0, *src, 0, old_len, mode); - MemsetTagged(ObjectSlot(result.data_start() + old_len), + WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); + result->CopyElements(isolate(), 0, *src, 0, old_len, mode); + MemsetTagged(ObjectSlot(result->data_start() + old_len), ReadOnlyRoots(isolate()).undefined_value(), new_capacity - old_len); - return Handle(result, isolate()); + return result; +} + +Handle Factory::CompactWeakArrayList(Handle src, + int new_capacity, + AllocationType allocation) { + Handle result = + NewUninitializedWeakArrayList(new_capacity, allocation); + + // Copy the content. + DisallowHeapAllocation no_gc; + WriteBarrierMode mode = result->GetWriteBarrierMode(no_gc); + int copy_to = 0, length = src->length(); + for (int i = 0; i < length; i++) { + MaybeObject element = src->Get(i); + if (element->IsCleared()) continue; + result->Set(copy_to++, element, mode); + } + result->set_length(copy_to); + + MemsetTagged(ObjectSlot(result->data_start() + copy_to), + ReadOnlyRoots(isolate()).undefined_value(), + new_capacity - copy_to); + return result; } Handle Factory::CopyPropertyArrayAndGrow( diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/heap/factory.h nodejs-mozilla-12.22.12/deps/v8/src/heap/factory.h --- nodejs-mozilla-12.18.1/deps/v8/src/heap/factory.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/heap/factory.h 2022-04-05 07:17:01.000000000 +0000 @@ -524,6 +524,9 @@ Handle NewFunctionPrototype(Handle function); + Handle NewWeakArrayList( + int capacity, AllocationType allocation = AllocationType::kYoung); + Handle NewWeakCell(); // Returns a deep copy of the JavaScript object. @@ -549,6 +552,10 @@ Handle array, int grow_by, AllocationType allocation = AllocationType::kYoung); + Handle CompactWeakArrayList( + Handle array, int new_capacity, + AllocationType allocation = AllocationType::kYoung); + Handle CopyPropertyArrayAndGrow( Handle array, int grow_by, AllocationType allocation = AllocationType::kYoung); @@ -1111,6 +1118,10 @@ // Initializes JSObject body starting at given offset. void InitializeJSObjectBody(Handle obj, Handle map, int start_offset); + + private: + Handle NewUninitializedWeakArrayList( + int capacity, AllocationType allocation = AllocationType::kYoung); }; // Utility class to simplify argument handling around JSFunction creation. diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/heap/heap.h nodejs-mozilla-12.22.12/deps/v8/src/heap/heap.h --- nodejs-mozilla-12.18.1/deps/v8/src/heap/heap.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/heap/heap.h 2022-04-05 07:17:01.000000000 +0000 @@ -1262,8 +1262,10 @@ // Heap object allocation tracking. ========================================== // =========================================================================== - void AddHeapObjectAllocationTracker(HeapObjectAllocationTracker* tracker); - void RemoveHeapObjectAllocationTracker(HeapObjectAllocationTracker* tracker); + V8_EXPORT_PRIVATE void AddHeapObjectAllocationTracker( + HeapObjectAllocationTracker* tracker); + V8_EXPORT_PRIVATE void RemoveHeapObjectAllocationTracker( + HeapObjectAllocationTracker* tracker); bool has_heap_object_allocation_tracker() const { return !allocation_trackers_.empty(); } diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/heap/heap-inl.h nodejs-mozilla-12.22.12/deps/v8/src/heap/heap-inl.h --- nodejs-mozilla-12.18.1/deps/v8/src/heap/heap-inl.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/heap/heap-inl.h 2022-04-05 07:17:01.000000000 +0000 @@ -171,7 +171,13 @@ IncrementObjectCounters(); #endif - bool large_object = size_in_bytes > kMaxRegularHeapObjectSize; + size_t large_object_threshold = + AllocationType::kCode == type + ? std::min(kMaxRegularHeapObjectSize, code_space()->AreaSize()) + : kMaxRegularHeapObjectSize; + bool large_object = + static_cast(size_in_bytes) > large_object_threshold; + HeapObject object; AllocationResult allocation; @@ -200,10 +206,10 @@ allocation = old_space_->AllocateRaw(size_in_bytes, alignment, origin); } } else if (AllocationType::kCode == type) { - if (size_in_bytes <= code_space()->AreaSize() && !large_object) { - allocation = code_space_->AllocateRawUnaligned(size_in_bytes); - } else { + if (large_object) { allocation = code_lo_space_->AllocateRaw(size_in_bytes); + } else { + allocation = code_space_->AllocateRawUnaligned(size_in_bytes); } } else if (AllocationType::kMap == type) { allocation = map_space_->AllocateRawUnaligned(size_in_bytes); diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/objects/fixed-array.h nodejs-mozilla-12.22.12/deps/v8/src/objects/fixed-array.h --- nodejs-mozilla-12.18.1/deps/v8/src/objects/fixed-array.h 2020-06-17 01:25:37.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/objects/fixed-array.h 2022-04-05 07:17:01.000000000 +0000 @@ -339,6 +339,17 @@ Isolate* isolate, Handle array, const MaybeObjectHandle& value); + // Appends an element to the array and possibly compacts and shrinks live weak + // references to the start of the collection. Only use this method when + // indices to elements can change. + static Handle Append( + Isolate* isolate, Handle array, + const MaybeObjectHandle& value, + AllocationType allocation = AllocationType::kYoung); + + // Compact weak references to the beginning of the array. + V8_EXPORT_PRIVATE void Compact(Isolate* isolate); + inline MaybeObject Get(int index) const; inline MaybeObject Get(Isolate* isolate, int index) const; @@ -352,6 +363,10 @@ return kHeaderSize + capacity * kTaggedSize; } + static constexpr int CapacityForLength(int length) { + return length + Max(length / 2, 2); + } + // Gives access to raw memory which stores the array's data. inline MaybeObjectSlot data_start(); @@ -383,6 +398,9 @@ // Returns the number of non-cleaned weak references in the array. int CountLiveWeakReferences() const; + // Returns the number of non-cleaned elements in the array. + int CountLiveElements() const; + // Returns whether an entry was found and removed. Will move the elements // around in the array - this method can only be used in cases where the user // doesn't care about the indices! Users should make sure there are no diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/objects/js-list-format.cc nodejs-mozilla-12.22.12/deps/v8/src/objects/js-list-format.cc --- nodejs-mozilla-12.18.1/deps/v8/src/objects/js-list-format.cc 2020-06-17 01:25:38.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/objects/js-list-format.cc 2022-04-05 07:17:01.000000000 +0000 @@ -24,11 +24,14 @@ #include "unicode/fpositer.h" #include "unicode/listformatter.h" #include "unicode/ulistformatter.h" +#include "unicode/uvernum.h" namespace v8 { namespace internal { namespace { + +#if U_ICU_VERSION_MAJOR_NUM < 67 const char* kStandard = "standard"; const char* kOr = "or"; const char* kUnit = "unit"; @@ -72,6 +75,31 @@ } UNREACHABLE(); } +#else +UListFormatterWidth GetIcuWidth(JSListFormat::Style style) { + switch (style) { + case JSListFormat::Style::LONG: + return ULISTFMT_WIDTH_WIDE; + case JSListFormat::Style::SHORT: + return ULISTFMT_WIDTH_SHORT; + case JSListFormat::Style::NARROW: + return ULISTFMT_WIDTH_NARROW; + } + UNREACHABLE(); +} + +UListFormatterType GetIcuType(JSListFormat::Type type) { + switch (type) { + case JSListFormat::Type::CONJUNCTION: + return ULISTFMT_TYPE_AND; + case JSListFormat::Type::DISJUNCTION: + return ULISTFMT_TYPE_OR; + case JSListFormat::Type::UNIT: + return ULISTFMT_TYPE_UNITS; + } + UNREACHABLE(); +} +#endif } // namespace @@ -170,7 +198,11 @@ icu::Locale icu_locale = r.icu_locale; UErrorCode status = U_ZERO_ERROR; icu::ListFormatter* formatter = icu::ListFormatter::createInstance( +#if U_ICU_VERSION_MAJOR_NUM < 67 icu_locale, GetIcuStyleString(style_enum, type_enum), status); +#else + icu_locale, GetIcuType(type_enum), GetIcuWidth(style_enum), status); +#endif if (U_FAILURE(status)) { delete formatter; FATAL("Failed to create ICU list formatter, are ICU data files missing?"); diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/objects/objects.cc nodejs-mozilla-12.22.12/deps/v8/src/objects/objects.cc --- nodejs-mozilla-12.18.1/deps/v8/src/objects/objects.cc 2020-06-17 01:25:38.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/objects/objects.cc 2022-04-05 07:17:01.000000000 +0000 @@ -3952,6 +3952,65 @@ return array; } +// static +Handle WeakArrayList::Append(Isolate* isolate, + Handle array, + const MaybeObjectHandle& value, + AllocationType allocation) { + int length = array->length(); + + if (length < array->capacity()) { + array->Set(length, *value); + array->set_length(length + 1); + return array; + } + + // Not enough space in the array left, either grow, shrink or + // compact the array. + int new_length = array->CountLiveElements() + 1; + + bool shrink = new_length < length / 4; + bool grow = 3 * (length / 4) < new_length; + + if (shrink || grow) { + // Grow or shrink array and compact out-of-place. + int new_capacity = CapacityForLength(new_length); + array = isolate->factory()->CompactWeakArrayList(array, new_capacity, + allocation); + + } else { + // Perform compaction in the current array. + array->Compact(isolate); + } + + // Now append value to the array, there should always be enough space now. + DCHECK_LT(array->length(), array->capacity()); + + // Reload length, allocation might have killed some weak refs. + int index = array->length(); + array->Set(index, *value); + array->set_length(index + 1); + return array; +} + +void WeakArrayList::Compact(Isolate* isolate) { + int length = this->length(); + int new_length = 0; + + for (int i = 0; i < length; i++) { + MaybeObject value = Get(isolate, i); + + if (!value->IsCleared()) { + if (new_length != i) { + Set(new_length, value); + } + ++new_length; + } + } + + set_length(new_length); +} + bool WeakArrayList::IsFull() { return length() == capacity(); } // static @@ -3961,9 +4020,7 @@ AllocationType allocation) { int capacity = array->capacity(); if (capacity < length) { - int new_capacity = length; - new_capacity = new_capacity + Max(new_capacity / 2, 2); - int grow_by = new_capacity - capacity; + int grow_by = CapacityForLength(length) - capacity; array = isolate->factory()->CopyWeakArrayListAndGrow(array, grow_by, allocation); } @@ -3980,6 +4037,16 @@ return live_weak_references; } +int WeakArrayList::CountLiveElements() const { + int non_cleared_objects = 0; + for (int i = 0; i < length(); i++) { + if (!Get(i)->IsCleared()) { + ++non_cleared_objects; + } + } + return non_cleared_objects; +} + bool WeakArrayList::RemoveOne(const MaybeObjectHandle& value) { if (length() == 0) return false; // Optimize for the most recently added element to be removed again. diff -Nru nodejs-mozilla-12.18.1/deps/v8/src/profiler/profiler-listener.cc nodejs-mozilla-12.22.12/deps/v8/src/profiler/profiler-listener.cc --- nodejs-mozilla-12.18.1/deps/v8/src/profiler/profiler-listener.cc 2020-06-17 01:25:38.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/src/profiler/profiler-listener.cc 2022-04-05 07:17:01.000000000 +0000 @@ -120,7 +120,8 @@ // profiler as is stored on the code object, except that we transform source // positions to line numbers here, because we only care about attributing // ticks to a given line. - for (SourcePositionTableIterator it(abstract_code.source_position_table()); + for (SourcePositionTableIterator it( + handle(abstract_code.source_position_table(), isolate_)); !it.done(); it.Advance()) { int position = it.source_position().ScriptOffset(); int inlining_id = it.source_position().InliningId(); diff -Nru nodejs-mozilla-12.18.1/deps/v8/testing/gtest/BUILD.gn nodejs-mozilla-12.22.12/deps/v8/testing/gtest/BUILD.gn --- nodejs-mozilla-12.18.1/deps/v8/testing/gtest/BUILD.gn 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/deps/v8/testing/gtest/BUILD.gn 2022-04-05 07:17:03.000000000 +0000 @@ -4,9 +4,9 @@ import("//build_overrides/gtest.gni") if (is_ios) { + import("//build/buildflag_header.gni") import("//build/config/coverage/coverage.gni") import("//build/config/ios/ios_sdk.gni") - import("//build/buildflag_header.gni") } config("gtest_direct_config") { @@ -40,9 +40,7 @@ # Android. https://codereview.chromium.org/2852613002/#ps20001 "empty.cc", ] - public_deps = [ - "//third_party/googletest:gtest", - ] + public_deps = [ "//third_party/googletest:gtest" ] public_configs = [ ":gtest_direct_config" ] @@ -58,9 +56,6 @@ } if ((is_mac || is_ios) && gtest_include_objc_support) { - if (is_ios) { - set_sources_assignment_filter([]) - } sources += [ "../gtest_mac.h", "../gtest_mac.mm", @@ -68,7 +63,6 @@ if (gtest_include_platform_test) { sources += [ "../platform_test_mac.mm" ] } - set_sources_assignment_filter(sources_assignment_filter) } if (is_ios && gtest_include_ios_coverage) { @@ -76,9 +70,7 @@ "../coverage_util_ios.h", "../coverage_util_ios.mm", ] - deps = [ - ":ios_enable_coverage", - ] + deps = [ ":ios_enable_coverage" ] } } @@ -87,9 +79,7 @@ # into //third_party/googletest. source_set("gtest_main") { testonly = true - deps = [ - "//third_party/googletest:gtest_main", - ] + deps = [ "//third_party/googletest:gtest_main" ] } if (is_ios) { diff -Nru nodejs-mozilla-12.18.1/doc/api/addons.html nodejs-mozilla-12.22.12/doc/api/addons.html --- nodejs-mozilla-12.18.1/doc/api/addons.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/addons.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - C++ Addons | Node.js v12.18.1 Documentation + + C++ addons | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
+
-
+
-

Node.js v12.18.1 Documentation

+

Node.js v12.22.12 Documentation

  • - Index + Index
  • View on single page @@ -97,11 +101,14 @@
  • View another version -
    1. 14.x
    2. +
      1. 17.x
      2. +
      3. 16.x LTS
      4. +
      5. 15.x
      6. +
      7. 14.x LTS
      8. 13.x
      9. 12.x LTS
      10. 11.x
      11. -
      12. 10.x LTS
      13. +
      14. 10.x
      15. 9.x
      16. 8.x
      17. 7.x
      18. @@ -121,27 +128,23 @@
        -

        C++ Addons#

        +

        C++ addons#

        -

        Addons are dynamically-linked shared objects written in C++. The -require() function can load Addons as ordinary Node.js modules. +

        Addons are dynamically-linked shared objects written in C++. The +require() function can load addons as ordinary Node.js modules. Addons provide an interface between JavaScript and C/C++ libraries.

        -

        There are three options for implementing Addons: N-API, nan, or direct +

        There are three options for implementing addons: N-API, nan, or direct use of internal V8, libuv and Node.js libraries. Unless there is a need for direct access to functionality which is not exposed by N-API, use N-API. -Refer to C/C++ Addons with N-API for more information on N-API.

        -

        When not using N-API, implementing Addons is complicated, +Refer to C/C++ addons with N-API for more information on N-API.

        +

        When not using N-API, implementing addons is complicated, involving knowledge of several components and APIs:

        • -

          V8: the C++ library Node.js currently uses to provide the +

          V8: the C++ library Node.js uses to provide the JavaScript implementation. V8 provides the mechanisms for creating objects, calling functions, etc. V8's API is documented mostly in the v8.h header file (deps/v8/include/v8.h in the Node.js source @@ -185,64 +188,61 @@ access across all major operating systems to many common system tasks, such as interacting with the filesystem, sockets, timers, and system events. libuv also provides a pthreads-like threading abstraction that may be used to -power more sophisticated asynchronous Addons that need to move beyond the +power more sophisticated asynchronous addons that need to move beyond the standard event loop. Addon authors are encouraged to think about how to avoid blocking the event loop with I/O or other time-intensive tasks by off-loading work via libuv to non-blocking system operations, worker threads or a custom use of libuv's threads.

        • -

          Internal Node.js libraries. Node.js itself exports C++ APIs that Addons can +

          Internal Node.js libraries. Node.js itself exports C++ APIs that addons can use, the most important of which is the node::ObjectWrap class.

        • Node.js includes other statically linked libraries including OpenSSL. These other libraries are located in the deps/ directory in the Node.js source tree. Only the libuv, OpenSSL, V8 and zlib symbols are purposefully -re-exported by Node.js and may be used to various extents by Addons. See +re-exported by Node.js and may be used to various extents by addons. See Linking to libraries included with Node.js for additional information.

        All of the following examples are available for download and may -be used as the starting-point for an Addon.

        +be used as the starting-point for an addon.

        Hello world#

        -

        This "Hello world" example is a simple Addon, written in C++, that is the +

        This "Hello world" example is a simple addon, written in C++, that is the equivalent of the following JavaScript code:

        -
        module.exports.hello = () => 'world';
        -
        +
        module.exports.hello = () => 'world';

        First, create the file hello.cc:

        -
        // hello.cc
        -#include <node.h>
        +
        // hello.cc
        +#include <node.h>
         
        -namespace demo {
        +namespace demo {
         
        -using v8::FunctionCallbackInfo;
        -using v8::Isolate;
        -using v8::Local;
        -using v8::NewStringType;
        -using v8::Object;
        -using v8::String;
        -using v8::Value;
        +using v8::FunctionCallbackInfo;
        +using v8::Isolate;
        +using v8::Local;
        +using v8::NewStringType;
        +using v8::Object;
        +using v8::String;
        +using v8::Value;
         
        -void Method(const FunctionCallbackInfo<Value>& args) {
        +void Method(const FunctionCallbackInfo<Value>& args) {
           Isolate* isolate = args.GetIsolate();
           args.GetReturnValue().Set(String::NewFromUtf8(
        -      isolate, "world", NewStringType::kNormal).ToLocalChecked());
        +      isolate, "world", NewStringType::kNormal).ToLocalChecked());
         }
         
        -void Initialize(Local<Object> exports) {
        -  NODE_SET_METHOD(exports, "hello", Method);
        +void Initialize(Local<Object> exports) {
        +  NODE_SET_METHOD(exports, "hello", Method);
         }
         
         NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
         
        -}  // namespace demo
        -
        -

        All Node.js Addons must export an initialization function following +} // namespace demo

        +

        All Node.js addons must export an initialization function following the pattern:

        -
        void Initialize(Local<Object> exports);
        -NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
        -
        +
        void Initialize(Local<Object> exports);
        +NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)

        There is no semi-colon after NODE_MODULE as it's not a function (see node.h).

        The module_name must match the filename of the final binary (excluding @@ -263,15 +263,14 @@ NODE_MODULE_INITIALIZER, which expands to the name of a function which Node.js will expect to find when it loads an addon. An addon can thus be initialized as in the following example:

        -
        using namespace v8;
        +
        using namespace v8;
         
        -extern "C" NODE_MODULE_EXPORT void
        -NODE_MODULE_INITIALIZER(Local<Object> exports,
        -                        Local<Value> module,
        -                        Local<Context> context) {
        -  /* Perform addon initialization steps here. */
        -}
        -
        +extern "C" NODE_MODULE_EXPORT void +NODE_MODULE_INITIALIZER(Local<Object> exports, + Local<Value> module, + Local<Context> context) { + /* Perform addon initialization steps here. */ +}

        Another option is to use the macro NODE_MODULE_INIT(), which will also construct a context-aware addon. Unlike NODE_MODULE(), which is used to construct an addon around a given addon initializer function, @@ -295,15 +294,11 @@

        The context-aware addon can be structured to avoid global static data by performing the following steps:

          -
        • -

          Define a class which will hold per-addon-instance data and which has a static -member of the form

          -
          ```C++
          -static void DeleteInstance(void* data) {
          -  // Cast `data` to an instance of the class and delete it.
          -}
          -```
          -
          +
        • Define a class which will hold per-addon-instance data and which has a static +member of the form +
          static void DeleteInstance(void* data) {
          +  // Cast `data` to an instance of the class and delete it.
          +}
        • Heap-allocate an instance of this class in the addon initializer. This can be accomplished using the new keyword.
        • @@ -322,57 +317,65 @@ be called from JavaScript. The per-addon-instance data must also be passed into any asynchronous callbacks the addon may create.

          The following example illustrates the implementation of a context-aware addon:

          -
          #include <node.h>
          +
          #include <node.h>
           
          -using namespace v8;
          +using namespace v8;
           
          -class AddonData {
          - public:
          -  explicit AddonData(Isolate* isolate):
          -      call_count(0) {
          -    // Ensure this per-addon-instance data is deleted at environment cleanup.
          -    node::AddEnvironmentCleanupHook(isolate, DeleteInstance, this);
          +class AddonData {
          + public:
          +  explicit AddonData(Isolate* isolate):
          +      call_count(0) {
          +    // Ensure this per-addon-instance data is deleted at environment cleanup.
          +    node::AddEnvironmentCleanupHook(isolate, DeleteInstance, this);
             }
           
          -  // Per-addon data.
          -  int call_count;
          +  // Per-addon data.
          +  int call_count;
           
          -  static void DeleteInstance(void* data) {
          -    delete static_cast<AddonData*>(data);
          +  static void DeleteInstance(void* data) {
          +    delete static_cast<AddonData*>(data);
             }
           };
           
          -static void Method(const v8::FunctionCallbackInfo<v8::Value>& info) {
          -  // Retrieve the per-addon-instance data.
          +static void Method(const v8::FunctionCallbackInfo<v8::Value>& info) {
          +  // Retrieve the per-addon-instance data.
             AddonData* data =
          -      reinterpret_cast<AddonData*>(info.Data().As<External>()->Value());
          +      reinterpret_cast<AddonData*>(info.Data().As<External>()->Value());
             data->call_count++;
          -  info.GetReturnValue().Set((double)data->call_count);
          +  info.GetReturnValue().Set((double)data->call_count);
           }
           
          -// Initialize this addon to be context-aware.
          -NODE_MODULE_INIT(/* exports, module, context */) {
          +// Initialize this addon to be context-aware.
          +NODE_MODULE_INIT(/* exports, module, context */) {
             Isolate* isolate = context->GetIsolate();
           
          -  // Create a new instance of `AddonData` for this instance of the addon and
          -  // tie its life cycle to that of the Node.js environment.
          -  AddonData* data = new AddonData(isolate);
          +  // Create a new instance of `AddonData` for this instance of the addon and
          +  // tie its life cycle to that of the Node.js environment.
          +  AddonData* data = new AddonData(isolate);
           
          -  // Wrap the data in a `v8::External` so we can pass it to the method we
          -  // expose.
          +  // Wrap the data in a `v8::External` so we can pass it to the method we
          +  // expose.
             Local<External> external = External::New(isolate, data);
           
          -  // Expose the method `Method` to JavaScript, and make sure it receives the
          -  // per-addon-instance data we created above by passing `external` as the
          -  // third parameter to the `FunctionTemplate` constructor.
          +  // Expose the method `Method` to JavaScript, and make sure it receives the
          +  // per-addon-instance data we created above by passing `external` as the
          +  // third parameter to the `FunctionTemplate` constructor.
             exports->Set(context,
          -               String::NewFromUtf8(isolate, "method", NewStringType::kNormal)
          +               String::NewFromUtf8(isolate, "method", NewStringType::kNormal)
                             .ToLocalChecked(),
                          FunctionTemplate::New(isolate, Method, external)
                             ->GetFunction(context).ToLocalChecked()).FromJust();
          -}
          -
          +}

          Worker support#

          +

          In order to be loaded from multiple Node.js environments, such as a main thread and a Worker thread, an add-on needs to either:

            @@ -382,82 +385,82 @@

            In order to support Worker threads, addons need to clean up any resources they may have allocated when such a thread exists. This can be achieved through the usage of the AddEnvironmentCleanupHook() function:

            -
            void AddEnvironmentCleanupHook(v8::Isolate* isolate,
            -                               void (*fun)(void* arg),
            -                               void* arg);
            -
            +
            void AddEnvironmentCleanupHook(v8::Isolate* isolate,
            +                               void (*fun)(void* arg),
            +                               void* arg);

            This function adds a hook that will run before a given Node.js instance shuts -down. If necessary, such hooks can be removed using -RemoveEnvironmentCleanupHook() before they are run, which has the same -signature. Callbacks are run in last-in first-out order.

            +down. If necessary, such hooks can be removed before they are run using +RemoveEnvironmentCleanupHook(), which has the same signature. Callbacks are +run in last-in first-out order.

            +

            If necessary, there is an additional pair of AddEnvironmentCleanupHook() +and RemoveEnvironmentCleanupHook() overloads, where the cleanup hook takes a +callback function. This can be used for shutting down asynchronous resources, +such as any libuv handles registered by the addon.

            The following addon.cc uses AddEnvironmentCleanupHook:

            -
            // addon.cc
            -#include <assert.h>
            -#include <stdlib.h>
            -#include <node.h>
            -
            -using node::AddEnvironmentCleanupHook;
            -using v8::HandleScope;
            -using v8::Isolate;
            -using v8::Local;
            -using v8::Object;
            -
            -// Note: In a real-world application, do not rely on static/global data.
            -static char cookie[] = "yum yum";
            -static int cleanup_cb1_called = 0;
            -static int cleanup_cb2_called = 0;
            -
            -static void cleanup_cb1(void* arg) {
            -  Isolate* isolate = static_cast<Isolate*>(arg);
            -  HandleScope scope(isolate);
            +
            // addon.cc
            +#include <assert.h>
            +#include <stdlib.h>
            +#include <node.h>
            +
            +using node::AddEnvironmentCleanupHook;
            +using v8::HandleScope;
            +using v8::Isolate;
            +using v8::Local;
            +using v8::Object;
            +
            +// Note: In a real-world application, do not rely on static/global data.
            +static char cookie[] = "yum yum";
            +static int cleanup_cb1_called = 0;
            +static int cleanup_cb2_called = 0;
            +
            +static void cleanup_cb1(void* arg) {
            +  Isolate* isolate = static_cast<Isolate*>(arg);
            +  HandleScope scope(isolate);
               Local<Object> obj = Object::New(isolate);
            -  assert(!obj.IsEmpty());  // assert VM is still alive
            +  assert(!obj.IsEmpty());  // assert VM is still alive
               assert(obj->IsObject());
               cleanup_cb1_called++;
             }
             
            -static void cleanup_cb2(void* arg) {
            -  assert(arg == static_cast<void*>(cookie));
            +static void cleanup_cb2(void* arg) {
            +  assert(arg == static_cast<void*>(cookie));
               cleanup_cb2_called++;
             }
             
            -static void sanity_check(void*) {
            -  assert(cleanup_cb1_called == 1);
            -  assert(cleanup_cb2_called == 1);
            +static void sanity_check(void*) {
            +  assert(cleanup_cb1_called == 1);
            +  assert(cleanup_cb2_called == 1);
             }
             
            -// Initialize this addon to be context-aware.
            -NODE_MODULE_INIT(/* exports, module, context */) {
            +// Initialize this addon to be context-aware.
            +NODE_MODULE_INIT(/* exports, module, context */) {
               Isolate* isolate = context->GetIsolate();
             
            -  AddEnvironmentCleanupHook(isolate, sanity_check, nullptr);
            +  AddEnvironmentCleanupHook(isolate, sanity_check, nullptr);
               AddEnvironmentCleanupHook(isolate, cleanup_cb2, cookie);
               AddEnvironmentCleanupHook(isolate, cleanup_cb1, isolate);
            -}
            -
            +}

            Test in JavaScript by running:

            -
            // test.js
            -require('./build/Release/addon');
            -
            +
            // test.js
            +require('./build/Release/addon');

            Building#

            Once the source code has been written, it must be compiled into the binary addon.node file. To do so, create a file called binding.gyp in the top-level of the project describing the build configuration of the module using a JSON-like format. This file is used by node-gyp, a tool written -specifically to compile Node.js Addons.

            +specifically to compile Node.js addons.

            {
            -  "targets": [
            +  "targets": [
                 {
            -      "target_name": "addon",
            -      "sources": [ "hello.cc" ]
            +      "target_name": "addon",
            +      "sources": [ "hello.cc" ]
                 }
               ]
            -}
            -
            +}

            A version of the node-gyp utility is bundled and distributed with Node.js as part of npm. This version is not made directly available for developers to use and is intended only to support the ability to use the -npm install command to compile and install Addons. Developers who wish to +npm install command to compile and install addons. Developers who wish to use node-gyp directly can install it using the command npm install -g node-gyp. See the node-gyp installation instructions for more information, including platform-specific requirements.

            @@ -467,31 +470,29 @@ (on Windows) in the build/ directory.

            Next, invoke the node-gyp build command to generate the compiled addon.node file. This will be put into the build/Release/ directory.

            -

            When using npm install to install a Node.js Addon, npm uses its own bundled +

            When using npm install to install a Node.js addon, npm uses its own bundled version of node-gyp to perform this same set of actions, generating a -compiled version of the Addon for the user's platform on demand.

            -

            Once built, the binary Addon can be used from within Node.js by pointing +compiled version of the addon for the user's platform on demand.

            +

            Once built, the binary addon can be used from within Node.js by pointing require() to the built addon.node module:

            -
            // hello.js
            -const addon = require('./build/Release/addon');
            +
            // hello.js
            +const addon = require('./build/Release/addon');
             
            -console.log(addon.hello());
            -// Prints: 'world'
            -
            -

            Because the exact path to the compiled Addon binary can vary depending on how -it is compiled (i.e. sometimes it may be in ./build/Debug/), Addons can use +console.log(addon.hello()); +// Prints: 'world'

            +

            Because the exact path to the compiled addon binary can vary depending on how +it is compiled (i.e. sometimes it may be in ./build/Debug/), addons can use the bindings package to load the compiled module.

            While the bindings package implementation is more sophisticated in how it -locates Addon modules, it is essentially using a try…catch pattern similar to:

            -
            try {
            -  return require('./build/Release/addon.node');
            -} catch (err) {
            -  return require('./build/Debug/addon.node');
            -}
            -
            +locates addon modules, it is essentially using a try…catch pattern similar to:

            +
            try {
            +  return require('./build/Release/addon.node');
            +} catch (err) {
            +  return require('./build/Debug/addon.node');
            +}

            Linking to libraries included with Node.js#

            Node.js uses statically linked libraries such as V8, libuv and OpenSSL. All -Addons are required to link to V8 and may link to any of the other dependencies +addons are required to link to V8 and may link to any of the other dependencies as well. Typically, this is as simple as including the appropriate #include <...> statements (e.g. #include <v8.h>) and node-gyp will locate the appropriate headers automatically. However, there are a few caveats to be @@ -500,46 +501,46 @@

          • When node-gyp runs, it will detect the specific release version of Node.js and download either the full source tarball or just the headers. If the full -source is downloaded, Addons will have complete access to the full set of +source is downloaded, addons will have complete access to the full set of Node.js dependencies. However, if only the Node.js headers are downloaded, then only the symbols exported by Node.js will be available.

          • node-gyp can be run using the --nodedir flag pointing at a local Node.js -source image. Using this option, the Addon will have access to the full set of +source image. Using this option, the addon will have access to the full set of dependencies.

          -

          Loading Addons using require()#

          -

          The filename extension of the compiled Addon binary is .node (as opposed +

          Loading addons using require()#

          +

          The filename extension of the compiled addon binary is .node (as opposed to .dll or .so). The require() function is written to look for files with the .node file extension and initialize those as dynamically-linked libraries.

          When calling require(), the .node extension can usually be -omitted and Node.js will still find and initialize the Addon. One caveat, +omitted and Node.js will still find and initialize the addon. One caveat, however, is that Node.js will first attempt to locate and load modules or JavaScript files that happen to share the same base name. For instance, if there is a file addon.js in the same directory as the binary addon.node, then require('addon') will give precedence to the addon.js file and load it instead.

          -

          Native Abstractions for Node.js#

          -

          Each of the examples illustrated in this document make direct use of the -Node.js and V8 APIs for implementing Addons. The V8 API can, and has, changed +

          Native abstractions for Node.js#

          +

          Each of the examples illustrated in this document directly use the +Node.js and V8 APIs for implementing addons. The V8 API can, and has, changed dramatically from one V8 release to the next (and one major Node.js release to -the next). With each change, Addons may need to be updated and recompiled in +the next). With each change, addons may need to be updated and recompiled in order to continue functioning. The Node.js release schedule is designed to minimize the frequency and impact of such changes but there is little that -Node.js can do currently to ensure stability of the V8 APIs.

          +Node.js can do to ensure stability of the V8 APIs.

          The Native Abstractions for Node.js (or nan) provide a set of tools that -Addon developers are recommended to use to keep compatibility between past and +addon developers are recommended to use to keep compatibility between past and future releases of V8 and Node.js. See the nan examples for an illustration of how it can be used.

          N-API#

          Stability: 2 - Stable

          -

          N-API is an API for building native Addons. It is independent from +

          N-API is an API for building native addons. It is independent from the underlying JavaScript runtime (e.g. V8) and is maintained as part of Node.js itself. This API will be Application Binary Interface (ABI) stable -across versions of Node.js. It is intended to insulate Addons from +across versions of Node.js. It is intended to insulate addons from changes in the underlying JavaScript engine and allow modules compiled for one version to run on later versions of Node.js without recompilation. Addons are built/packaged with the same approach/tools @@ -552,62 +553,58 @@ implementation considerations.

          To use N-API in the above "Hello world" example, replace the content of hello.cc with the following. All other instructions remain the same.

          -
          // hello.cc using N-API
          -#include <node_api.h>
          +
          // hello.cc using N-API
          +#include <node_api.h>
           
          -namespace demo {
          +namespace demo {
           
          -napi_value Method(napi_env env, napi_callback_info args) {
          +napi_value Method(napi_env env, napi_callback_info args) {
             napi_value greeting;
             napi_status status;
           
          -  status = napi_create_string_utf8(env, "world", NAPI_AUTO_LENGTH, &greeting);
          -  if (status != napi_ok) return nullptr;
          -  return greeting;
          +  status = napi_create_string_utf8(env, "world", NAPI_AUTO_LENGTH, &greeting);
          +  if (status != napi_ok) return nullptr;
          +  return greeting;
           }
           
          -napi_value init(napi_env env, napi_value exports) {
          +napi_value init(napi_env env, napi_value exports) {
             napi_status status;
             napi_value fn;
           
          -  status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn);
          -  if (status != napi_ok) return nullptr;
          +  status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn);
          +  if (status != napi_ok) return nullptr;
           
          -  status = napi_set_named_property(env, exports, "hello", fn);
          -  if (status != napi_ok) return nullptr;
          -  return exports;
          +  status = napi_set_named_property(env, exports, "hello", fn);
          +  if (status != napi_ok) return nullptr;
          +  return exports;
           }
           
           NAPI_MODULE(NODE_GYP_MODULE_NAME, init)
           
          -}  // namespace demo
          -
          +} // namespace demo

          The functions available and how to use them are documented in -C/C++ Addons with N-API.

          +C/C++ addons with N-API.

          Addon examples#

          -

          Following are some example Addons intended to help developers get started. The -examples make use of the V8 APIs. Refer to the online V8 reference +

          Following are some example addons intended to help developers get started. The +examples use the V8 APIs. Refer to the online V8 reference for help with the various V8 calls, and V8's Embedder's Guide for an explanation of several concepts used such as handles, scopes, function templates, etc.

          Each of these examples using the following binding.gyp file:

          {
          -  "targets": [
          +  "targets": [
               {
          -      "target_name": "addon",
          -      "sources": [ "addon.cc" ]
          +      "target_name": "addon",
          +      "sources": [ "addon.cc" ]
               }
             ]
          -}
          -
          +}

          In cases where there is more than one .cc file, simply add the additional filename to the sources array:

          -
          "sources": ["addon.cc", "myexample.cc"]
          -
          -

          Once the binding.gyp file is ready, the example Addons can be configured and +

          "sources": ["addon.cc", "myexample.cc"]
          +

          Once the binding.gyp file is ready, the example addons can be configured and built using node-gyp:

          -
          $ node-gyp configure build
          -
          +
          $ node-gyp configure build

          Function arguments#

          Addons will typically expose objects and functions that can be accessed from JavaScript running within Node.js. When functions are invoked from JavaScript, @@ -615,389 +612,376 @@ code.

          The following example illustrates how to read function arguments passed from JavaScript and how to return a result:

          -
          // addon.cc
          -#include <node.h>
          +
          // addon.cc
          +#include <node.h>
           
          -namespace demo {
          +namespace demo {
           
          -using v8::Exception;
          -using v8::FunctionCallbackInfo;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::NewStringType;
          -using v8::Number;
          -using v8::Object;
          -using v8::String;
          -using v8::Value;
          -
          -// This is the implementation of the "add" method
          -// Input arguments are passed using the
          -// const FunctionCallbackInfo<Value>& args struct
          -void Add(const FunctionCallbackInfo<Value>& args) {
          +using v8::Exception;
          +using v8::FunctionCallbackInfo;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::NewStringType;
          +using v8::Number;
          +using v8::Object;
          +using v8::String;
          +using v8::Value;
          +
          +// This is the implementation of the "add" method
          +// Input arguments are passed using the
          +// const FunctionCallbackInfo<Value>& args struct
          +void Add(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
           
          -  // Check the number of arguments passed.
          -  if (args.Length() < 2) {
          -    // Throw an Error that is passed back to JavaScript
          +  // Check the number of arguments passed.
          +  if (args.Length() < 2) {
          +    // Throw an Error that is passed back to JavaScript
               isolate->ThrowException(Exception::TypeError(
                   String::NewFromUtf8(isolate,
          -                            "Wrong number of arguments",
          +                            "Wrong number of arguments",
                                       NewStringType::kNormal).ToLocalChecked()));
          -    return;
          +    return;
             }
           
          -  // Check the argument types
          -  if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
          +  // Check the argument types
          +  if (!args[0]->IsNumber() || !args[1]->IsNumber()) {
               isolate->ThrowException(Exception::TypeError(
                   String::NewFromUtf8(isolate,
          -                            "Wrong arguments",
          +                            "Wrong arguments",
                                       NewStringType::kNormal).ToLocalChecked()));
          -    return;
          +    return;
             }
           
          -  // Perform the operation
          -  double value =
          -      args[0].As<Number>()->Value() + args[1].As<Number>()->Value();
          +  // Perform the operation
          +  double value =
          +      args[0].As<Number>()->Value() + args[1].As<Number>()->Value();
             Local<Number> num = Number::New(isolate, value);
           
          -  // Set the return value (using the passed in
          -  // FunctionCallbackInfo<Value>&)
          +  // Set the return value (using the passed in
          +  // FunctionCallbackInfo<Value>&)
             args.GetReturnValue().Set(num);
           }
           
          -void Init(Local<Object> exports) {
          -  NODE_SET_METHOD(exports, "add", Add);
          +void Init(Local<Object> exports) {
          +  NODE_SET_METHOD(exports, "add", Add);
           }
           
           NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
           
          -}  // namespace demo
          -
          -

          Once compiled, the example Addon can be required and used from within Node.js:

          -
          // test.js
          -const addon = require('./build/Release/addon');
          +}  // namespace demo
          +

          Once compiled, the example addon can be required and used from within Node.js:

          +
          // test.js
          +const addon = require('./build/Release/addon');
           
          -console.log('This should be eight:', addon.add(3, 5));
          -
          +console.log('This should be eight:', addon.add(3, 5));

          Callbacks#

          -

          It is common practice within Addons to pass JavaScript functions to a C++ +

          It is common practice within addons to pass JavaScript functions to a C++ function and execute them from there. The following example illustrates how to invoke such callbacks:

          -
          // addon.cc
          -#include <node.h>
          +
          // addon.cc
          +#include <node.h>
           
          -namespace demo {
          +namespace demo {
           
          -using v8::Context;
          -using v8::Function;
          -using v8::FunctionCallbackInfo;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::NewStringType;
          -using v8::Null;
          -using v8::Object;
          -using v8::String;
          -using v8::Value;
          +using v8::Context;
          +using v8::Function;
          +using v8::FunctionCallbackInfo;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::NewStringType;
          +using v8::Null;
          +using v8::Object;
          +using v8::String;
          +using v8::Value;
           
          -void RunCallback(const FunctionCallbackInfo<Value>& args) {
          +void RunCallback(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
             Local<Context> context = isolate->GetCurrentContext();
          -  Local<Function> cb = Local<Function>::Cast(args[0]);
          -  const unsigned argc = 1;
          +  Local<Function> cb = Local<Function>::Cast(args[0]);
          +  const unsigned argc = 1;
             Local<Value> argv[argc] = {
                 String::NewFromUtf8(isolate,
          -                          "hello world",
          +                          "hello world",
                                     NewStringType::kNormal).ToLocalChecked() };
             cb->Call(context, Null(isolate), argc, argv).ToLocalChecked();
           }
           
          -void Init(Local<Object> exports, Local<Object> module) {
          -  NODE_SET_METHOD(module, "exports", RunCallback);
          +void Init(Local<Object> exports, Local<Object> module) {
          +  NODE_SET_METHOD(module, "exports", RunCallback);
           }
           
           NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
           
          -}  // namespace demo
          -
          +} // namespace demo

          This example uses a two-argument form of Init() that receives the full -module object as the second argument. This allows the Addon to completely +module object as the second argument. This allows the addon to completely overwrite exports with a single function instead of adding the function as a property of exports.

          To test it, run the following JavaScript:

          -
          // test.js
          -const addon = require('./build/Release/addon');
          +
          // test.js
          +const addon = require('./build/Release/addon');
           
          -addon((msg) => {
          -  console.log(msg);
          -// Prints: 'hello world'
          -});
          -
          +addon((msg) => { + console.log(msg); +// Prints: 'hello world' +});

          In this example, the callback function is invoked synchronously.

          Object factory#

          Addons can create and return new objects from within a C++ function as illustrated in the following example. An object is created and returned with a property msg that echoes the string passed to createObject():

          -
          // addon.cc
          -#include <node.h>
          +
          // addon.cc
          +#include <node.h>
           
          -namespace demo {
          +namespace demo {
           
          -using v8::Context;
          -using v8::FunctionCallbackInfo;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::NewStringType;
          -using v8::Object;
          -using v8::String;
          -using v8::Value;
          +using v8::Context;
          +using v8::FunctionCallbackInfo;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::NewStringType;
          +using v8::Object;
          +using v8::String;
          +using v8::Value;
           
          -void CreateObject(const FunctionCallbackInfo<Value>& args) {
          +void CreateObject(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
             Local<Context> context = isolate->GetCurrentContext();
           
             Local<Object> obj = Object::New(isolate);
             obj->Set(context,
                      String::NewFromUtf8(isolate,
          -                               "msg",
          +                               "msg",
                                          NewStringType::kNormal).ToLocalChecked(),
          -                               args[0]->ToString(context).ToLocalChecked())
          +                               args[0]->ToString(context).ToLocalChecked())
                      .FromJust();
           
             args.GetReturnValue().Set(obj);
           }
           
          -void Init(Local<Object> exports, Local<Object> module) {
          -  NODE_SET_METHOD(module, "exports", CreateObject);
          +void Init(Local<Object> exports, Local<Object> module) {
          +  NODE_SET_METHOD(module, "exports", CreateObject);
           }
           
           NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
           
          -}  // namespace demo
          -
          +} // namespace demo

          To test it in JavaScript:

          -
          // test.js
          -const addon = require('./build/Release/addon');
          +
          // test.js
          +const addon = require('./build/Release/addon');
           
          -const obj1 = addon('hello');
          -const obj2 = addon('world');
          -console.log(obj1.msg, obj2.msg);
          -// Prints: 'hello world'
          -
          +const obj1 = addon('hello'); +const obj2 = addon('world'); +console.log(obj1.msg, obj2.msg); +// Prints: 'hello world'

          Function factory#

          Another common scenario is creating JavaScript functions that wrap C++ functions and returning those back to JavaScript:

          -
          // addon.cc
          -#include <node.h>
          +
          // addon.cc
          +#include <node.h>
           
          -namespace demo {
          +namespace demo {
           
          -using v8::Context;
          -using v8::Function;
          -using v8::FunctionCallbackInfo;
          -using v8::FunctionTemplate;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::NewStringType;
          -using v8::Object;
          -using v8::String;
          -using v8::Value;
          +using v8::Context;
          +using v8::Function;
          +using v8::FunctionCallbackInfo;
          +using v8::FunctionTemplate;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::NewStringType;
          +using v8::Object;
          +using v8::String;
          +using v8::Value;
           
          -void MyFunction(const FunctionCallbackInfo<Value>& args) {
          +void MyFunction(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
             args.GetReturnValue().Set(String::NewFromUtf8(
          -      isolate, "hello world", NewStringType::kNormal).ToLocalChecked());
          +      isolate, "hello world", NewStringType::kNormal).ToLocalChecked());
           }
           
          -void CreateFunction(const FunctionCallbackInfo<Value>& args) {
          +void CreateFunction(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
           
             Local<Context> context = isolate->GetCurrentContext();
             Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, MyFunction);
             Local<Function> fn = tpl->GetFunction(context).ToLocalChecked();
           
          -  // omit this to make it anonymous
          +  // omit this to make it anonymous
             fn->SetName(String::NewFromUtf8(
          -      isolate, "theFunction", NewStringType::kNormal).ToLocalChecked());
          +      isolate, "theFunction", NewStringType::kNormal).ToLocalChecked());
           
             args.GetReturnValue().Set(fn);
           }
           
          -void Init(Local<Object> exports, Local<Object> module) {
          -  NODE_SET_METHOD(module, "exports", CreateFunction);
          +void Init(Local<Object> exports, Local<Object> module) {
          +  NODE_SET_METHOD(module, "exports", CreateFunction);
           }
           
           NODE_MODULE(NODE_GYP_MODULE_NAME, Init)
           
          -}  // namespace demo
          -
          +} // namespace demo

          To test:

          -
          // test.js
          -const addon = require('./build/Release/addon');
          +
          // test.js
          +const addon = require('./build/Release/addon');
           
          -const fn = addon();
          -console.log(fn());
          -// Prints: 'hello world'
          -
          +const fn = addon(); +console.log(fn()); +// Prints: 'hello world'

          Wrapping C++ objects#

          It is also possible to wrap C++ objects/classes in a way that allows new instances to be created using the JavaScript new operator:

          -
          // addon.cc
          -#include <node.h>
          -#include "myobject.h"
          +
          // addon.cc
          +#include <node.h>
          +#include "myobject.h"
           
          -namespace demo {
          +namespace demo {
           
          -using v8::Local;
          -using v8::Object;
          +using v8::Local;
          +using v8::Object;
           
          -void InitAll(Local<Object> exports) {
          +void InitAll(Local<Object> exports) {
             MyObject::Init(exports);
           }
           
           NODE_MODULE(NODE_GYP_MODULE_NAME, InitAll)
           
          -}  // namespace demo
          -
          +} // namespace demo

          Then, in myobject.h, the wrapper class inherits from node::ObjectWrap:

          -
          // myobject.h
          -#ifndef MYOBJECT_H
          -#define MYOBJECT_H
          +
          // myobject.h
          +#ifndef MYOBJECT_H
          +#define MYOBJECT_H
           
          -#include <node.h>
          -#include <node_object_wrap.h>
          +#include <node.h>
          +#include <node_object_wrap.h>
           
          -namespace demo {
          +namespace demo {
           
          -class MyObject : public node::ObjectWrap {
          - public:
          -  static void Init(v8::Local<v8::Object> exports);
          +class MyObject : public node::ObjectWrap {
          + public:
          +  static void Init(v8::Local<v8::Object> exports);
           
          - private:
          -  explicit MyObject(double value = 0);
          + private:
          +  explicit MyObject(double value = 0);
             ~MyObject();
           
          -  static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
          -  static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);
          +  static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
          +  static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);
           
          -  double value_;
          +  double value_;
           };
           
          -}  // namespace demo
          +}  // namespace demo
           
          -#endif
          -
          +#endif

          In myobject.cc, implement the various methods that are to be exposed. Below, the method plusOne() is exposed by adding it to the constructor's prototype:

          -
          // myobject.cc
          -#include "myobject.h"
          +
          // myobject.cc
          +#include "myobject.h"
           
          -namespace demo {
          +namespace demo {
           
          -using v8::Context;
          -using v8::Function;
          -using v8::FunctionCallbackInfo;
          -using v8::FunctionTemplate;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::NewStringType;
          -using v8::Number;
          -using v8::Object;
          -using v8::ObjectTemplate;
          -using v8::String;
          -using v8::Value;
          +using v8::Context;
          +using v8::Function;
          +using v8::FunctionCallbackInfo;
          +using v8::FunctionTemplate;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::NewStringType;
          +using v8::Number;
          +using v8::Object;
          +using v8::ObjectTemplate;
          +using v8::String;
          +using v8::Value;
           
          -MyObject::MyObject(double value) : value_(value) {
          +MyObject::MyObject(double value) : value_(value) {
           }
           
           MyObject::~MyObject() {
           }
           
          -void MyObject::Init(Local<Object> exports) {
          +void MyObject::Init(Local<Object> exports) {
             Isolate* isolate = exports->GetIsolate();
             Local<Context> context = isolate->GetCurrentContext();
           
             Local<ObjectTemplate> addon_data_tpl = ObjectTemplate::New(isolate);
          -  addon_data_tpl->SetInternalFieldCount(1);  // 1 field for the MyObject::New()
          +  addon_data_tpl->SetInternalFieldCount(1);  // 1 field for the MyObject::New()
             Local<Object> addon_data =
                 addon_data_tpl->NewInstance(context).ToLocalChecked();
           
          -  // Prepare constructor template
          +  // Prepare constructor template
             Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New, addon_data);
             tpl->SetClassName(String::NewFromUtf8(
          -      isolate, "MyObject", NewStringType::kNormal).ToLocalChecked());
          -  tpl->InstanceTemplate()->SetInternalFieldCount(1);
          +      isolate, "MyObject", NewStringType::kNormal).ToLocalChecked());
          +  tpl->InstanceTemplate()->SetInternalFieldCount(1);
           
          -  // Prototype
          -  NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);
          +  // Prototype
          +  NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);
           
             Local<Function> constructor = tpl->GetFunction(context).ToLocalChecked();
          -  addon_data->SetInternalField(0, constructor);
          +  addon_data->SetInternalField(0, constructor);
             exports->Set(context, String::NewFromUtf8(
          -      isolate, "MyObject", NewStringType::kNormal).ToLocalChecked(),
          +      isolate, "MyObject", NewStringType::kNormal).ToLocalChecked(),
                          constructor).FromJust();
           }
           
          -void MyObject::New(const FunctionCallbackInfo<Value>& args) {
          +void MyObject::New(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
             Local<Context> context = isolate->GetCurrentContext();
           
          -  if (args.IsConstructCall()) {
          -    // Invoked as constructor: `new MyObject(...)`
          -    double value = args[0]->IsUndefined() ?
          -        0 : args[0]->NumberValue(context).FromMaybe(0);
          -    MyObject* obj = new MyObject(value);
          +  if (args.IsConstructCall()) {
          +    // Invoked as constructor: `new MyObject(...)`
          +    double value = args[0]->IsUndefined() ?
          +        0 : args[0]->NumberValue(context).FromMaybe(0);
          +    MyObject* obj = new MyObject(value);
               obj->Wrap(args.This());
               args.GetReturnValue().Set(args.This());
          -  } else {
          -    // Invoked as plain function `MyObject(...)`, turn into construct call.
          -    const int argc = 1;
          -    Local<Value> argv[argc] = { args[0] };
          +  } else {
          +    // Invoked as plain function `MyObject(...)`, turn into construct call.
          +    const int argc = 1;
          +    Local<Value> argv[argc] = { args[0] };
               Local<Function> cons =
          -        args.Data().As<Object>()->GetInternalField(0).As<Function>();
          +        args.Data().As<Object>()->GetInternalField(0).As<Function>();
               Local<Object> result =
                   cons->NewInstance(context, argc, argv).ToLocalChecked();
               args.GetReturnValue().Set(result);
             }
           }
           
          -void MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {
          +void MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
           
             MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.Holder());
          -  obj->value_ += 1;
          +  obj->value_ += 1;
           
             args.GetReturnValue().Set(Number::New(isolate, obj->value_));
           }
           
          -}  // namespace demo
          -
          +} // namespace demo

          To build this example, the myobject.cc file must be added to the binding.gyp:

          {
          -  "targets": [
          +  "targets": [
               {
          -      "target_name": "addon",
          -      "sources": [
          -        "addon.cc",
          -        "myobject.cc"
          +      "target_name": "addon",
          +      "sources": [
          +        "addon.cc",
          +        "myobject.cc"
                 ]
               }
             ]
          -}
          -
          +}

          Test it with:

          -
          // test.js
          -const addon = require('./build/Release/addon');
          +
          // test.js
          +const addon = require('./build/Release/addon');
           
          -const obj = new addon.MyObject(10);
          -console.log(obj.plusOne());
          -// Prints: 11
          -console.log(obj.plusOne());
          -// Prints: 12
          -console.log(obj.plusOne());
          -// Prints: 13
          -
          +const obj = new addon.MyObject(10); +console.log(obj.plusOne()); +// Prints: 11 +console.log(obj.plusOne()); +// Prints: 12 +console.log(obj.plusOne()); +// Prints: 13

          The destructor for a wrapper object will run when the object is garbage-collected. For destructor testing, there are command-line flags that can be used to make it possible to force garbage collection. These flags are @@ -1007,133 +991,130 @@

          Factory of wrapped objects#

          Alternatively, it is possible to use a factory pattern to avoid explicitly creating object instances using the JavaScript new operator:

          -
          const obj = addon.createObject();
          -// instead of:
          -// const obj = new addon.Object();
          -
          +
          const obj = addon.createObject();
          +// instead of:
          +// const obj = new addon.Object();

          First, the createObject() method is implemented in addon.cc:

          -
          // addon.cc
          -#include <node.h>
          -#include "myobject.h"
          -
          -namespace demo {
          -
          -using v8::FunctionCallbackInfo;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::Object;
          -using v8::String;
          -using v8::Value;
          +
          // addon.cc
          +#include <node.h>
          +#include "myobject.h"
          +
          +namespace demo {
          +
          +using v8::FunctionCallbackInfo;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::Object;
          +using v8::String;
          +using v8::Value;
           
          -void CreateObject(const FunctionCallbackInfo<Value>& args) {
          +void CreateObject(const FunctionCallbackInfo<Value>& args) {
             MyObject::NewInstance(args);
           }
           
          -void InitAll(Local<Object> exports, Local<Object> module) {
          +void InitAll(Local<Object> exports, Local<Object> module) {
             MyObject::Init(exports->GetIsolate());
           
          -  NODE_SET_METHOD(module, "exports", CreateObject);
          +  NODE_SET_METHOD(module, "exports", CreateObject);
           }
           
           NODE_MODULE(NODE_GYP_MODULE_NAME, InitAll)
           
          -}  // namespace demo
          -
          +} // namespace demo

          In myobject.h, the static method NewInstance() is added to handle instantiating the object. This method takes the place of using new in JavaScript:

          -
          // myobject.h
          -#ifndef MYOBJECT_H
          -#define MYOBJECT_H
          -
          -#include <node.h>
          -#include <node_object_wrap.h>
          -
          -namespace demo {
          -
          -class MyObject : public node::ObjectWrap {
          - public:
          -  static void Init(v8::Isolate* isolate);
          -  static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);
          +
          // myobject.h
          +#ifndef MYOBJECT_H
          +#define MYOBJECT_H
          +
          +#include <node.h>
          +#include <node_object_wrap.h>
          +
          +namespace demo {
          +
          +class MyObject : public node::ObjectWrap {
          + public:
          +  static void Init(v8::Isolate* isolate);
          +  static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);
           
          - private:
          -  explicit MyObject(double value = 0);
          + private:
          +  explicit MyObject(double value = 0);
             ~MyObject();
           
          -  static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
          -  static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);
          -  static v8::Global<v8::Function> constructor;
          -  double value_;
          +  static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
          +  static void PlusOne(const v8::FunctionCallbackInfo<v8::Value>& args);
          +  static v8::Global<v8::Function> constructor;
          +  double value_;
           };
           
          -}  // namespace demo
          +}  // namespace demo
           
          -#endif
          -
          +#endif

          The implementation in myobject.cc is similar to the previous example:

          -
          // myobject.cc
          -#include <node.h>
          -#include "myobject.h"
          -
          -namespace demo {
          -
          -using node::AddEnvironmentCleanupHook;
          -using v8::Context;
          -using v8::Function;
          -using v8::FunctionCallbackInfo;
          -using v8::FunctionTemplate;
          -using v8::Global;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::NewStringType;
          -using v8::Number;
          -using v8::Object;
          -using v8::String;
          -using v8::Value;
          +
          // myobject.cc
          +#include <node.h>
          +#include "myobject.h"
          +
          +namespace demo {
          +
          +using node::AddEnvironmentCleanupHook;
          +using v8::Context;
          +using v8::Function;
          +using v8::FunctionCallbackInfo;
          +using v8::FunctionTemplate;
          +using v8::Global;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::NewStringType;
          +using v8::Number;
          +using v8::Object;
          +using v8::String;
          +using v8::Value;
           
          -// Warning! This is not thread-safe, this addon cannot be used for worker
          -// threads.
          +// Warning! This is not thread-safe, this addon cannot be used for worker
          +// threads.
           Global<Function> MyObject::constructor;
           
          -MyObject::MyObject(double value) : value_(value) {
          +MyObject::MyObject(double value) : value_(value) {
           }
           
           MyObject::~MyObject() {
           }
           
          -void MyObject::Init(Isolate* isolate) {
          -  // Prepare constructor template
          +void MyObject::Init(Isolate* isolate) {
          +  // Prepare constructor template
             Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New);
             tpl->SetClassName(String::NewFromUtf8(
          -      isolate, "MyObject", NewStringType::kNormal).ToLocalChecked());
          -  tpl->InstanceTemplate()->SetInternalFieldCount(1);
          +      isolate, "MyObject", NewStringType::kNormal).ToLocalChecked());
          +  tpl->InstanceTemplate()->SetInternalFieldCount(1);
           
          -  // Prototype
          -  NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);
          +  // Prototype
          +  NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);
           
             Local<Context> context = isolate->GetCurrentContext();
             constructor.Reset(isolate, tpl->GetFunction(context).ToLocalChecked());
           
          -  AddEnvironmentCleanupHook(isolate, [](void*) {
          +  AddEnvironmentCleanupHook(isolate, [](void*) {
               constructor.Reset();
          -  }, nullptr);
          +  }, nullptr);
           }
           
          -void MyObject::New(const FunctionCallbackInfo<Value>& args) {
          +void MyObject::New(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
             Local<Context> context = isolate->GetCurrentContext();
           
          -  if (args.IsConstructCall()) {
          -    // Invoked as constructor: `new MyObject(...)`
          -    double value = args[0]->IsUndefined() ?
          -        0 : args[0]->NumberValue(context).FromMaybe(0);
          -    MyObject* obj = new MyObject(value);
          +  if (args.IsConstructCall()) {
          +    // Invoked as constructor: `new MyObject(...)`
          +    double value = args[0]->IsUndefined() ?
          +        0 : args[0]->NumberValue(context).FromMaybe(0);
          +    MyObject* obj = new MyObject(value);
               obj->Wrap(args.This());
               args.GetReturnValue().Set(args.This());
          -  } else {
          -    // Invoked as plain function `MyObject(...)`, turn into construct call.
          -    const int argc = 1;
          -    Local<Value> argv[argc] = { args[0] };
          +  } else {
          +    // Invoked as plain function `MyObject(...)`, turn into construct call.
          +    const int argc = 1;
          +    Local<Value> argv[argc] = { args[0] };
               Local<Function> cons = Local<Function>::New(isolate, constructor);
               Local<Object> instance =
                   cons->NewInstance(context, argc, argv).ToLocalChecked();
          @@ -1141,11 +1122,11 @@
             }
           }
           
          -void MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {
          +void MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
           
          -  const unsigned argc = 1;
          -  Local<Value> argv[argc] = { args[0] };
          +  const unsigned argc = 1;
          +  Local<Value> argv[argc] = { args[0] };
             Local<Function> cons = Local<Function>::New(isolate, constructor);
             Local<Context> context = isolate->GetCurrentContext();
             Local<Object> instance =
          @@ -1154,190 +1135,185 @@
             args.GetReturnValue().Set(instance);
           }
           
          -void MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {
          +void MyObject::PlusOne(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
           
             MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.Holder());
          -  obj->value_ += 1;
          +  obj->value_ += 1;
           
             args.GetReturnValue().Set(Number::New(isolate, obj->value_));
           }
           
          -}  // namespace demo
          -
          +} // namespace demo

          Once again, to build this example, the myobject.cc file must be added to the binding.gyp:

          {
          -  "targets": [
          +  "targets": [
               {
          -      "target_name": "addon",
          -      "sources": [
          -        "addon.cc",
          -        "myobject.cc"
          +      "target_name": "addon",
          +      "sources": [
          +        "addon.cc",
          +        "myobject.cc"
                 ]
               }
             ]
          -}
          -
          +}

          Test it with:

          -
          // test.js
          -const createObject = require('./build/Release/addon');
          +
          // test.js
          +const createObject = require('./build/Release/addon');
           
          -const obj = createObject(10);
          -console.log(obj.plusOne());
          -// Prints: 11
          -console.log(obj.plusOne());
          -// Prints: 12
          -console.log(obj.plusOne());
          -// Prints: 13
          -
          -const obj2 = createObject(20);
          -console.log(obj2.plusOne());
          -// Prints: 21
          -console.log(obj2.plusOne());
          -// Prints: 22
          -console.log(obj2.plusOne());
          -// Prints: 23
          -
          +const obj = createObject(10); +console.log(obj.plusOne()); +// Prints: 11 +console.log(obj.plusOne()); +// Prints: 12 +console.log(obj.plusOne()); +// Prints: 13 + +const obj2 = createObject(20); +console.log(obj2.plusOne()); +// Prints: 21 +console.log(obj2.plusOne()); +// Prints: 22 +console.log(obj2.plusOne()); +// Prints: 23

          Passing wrapped objects around#

          In addition to wrapping and returning C++ objects, it is possible to pass wrapped objects around by unwrapping them with the Node.js helper function node::ObjectWrap::Unwrap. The following examples shows a function add() that can take two MyObject objects as input arguments:

          -
          // addon.cc
          -#include <node.h>
          -#include <node_object_wrap.h>
          -#include "myobject.h"
          -
          -namespace demo {
          -
          -using v8::Context;
          -using v8::FunctionCallbackInfo;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::Number;
          -using v8::Object;
          -using v8::String;
          -using v8::Value;
          +
          // addon.cc
          +#include <node.h>
          +#include <node_object_wrap.h>
          +#include "myobject.h"
          +
          +namespace demo {
          +
          +using v8::Context;
          +using v8::FunctionCallbackInfo;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::Number;
          +using v8::Object;
          +using v8::String;
          +using v8::Value;
           
          -void CreateObject(const FunctionCallbackInfo<Value>& args) {
          +void CreateObject(const FunctionCallbackInfo<Value>& args) {
             MyObject::NewInstance(args);
           }
           
          -void Add(const FunctionCallbackInfo<Value>& args) {
          +void Add(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
             Local<Context> context = isolate->GetCurrentContext();
           
             MyObject* obj1 = node::ObjectWrap::Unwrap<MyObject>(
          -      args[0]->ToObject(context).ToLocalChecked());
          +      args[0]->ToObject(context).ToLocalChecked());
             MyObject* obj2 = node::ObjectWrap::Unwrap<MyObject>(
          -      args[1]->ToObject(context).ToLocalChecked());
          +      args[1]->ToObject(context).ToLocalChecked());
           
          -  double sum = obj1->value() + obj2->value();
          +  double sum = obj1->value() + obj2->value();
             args.GetReturnValue().Set(Number::New(isolate, sum));
           }
           
          -void InitAll(Local<Object> exports) {
          +void InitAll(Local<Object> exports) {
             MyObject::Init(exports->GetIsolate());
           
          -  NODE_SET_METHOD(exports, "createObject", CreateObject);
          -  NODE_SET_METHOD(exports, "add", Add);
          +  NODE_SET_METHOD(exports, "createObject", CreateObject);
          +  NODE_SET_METHOD(exports, "add", Add);
           }
           
           NODE_MODULE(NODE_GYP_MODULE_NAME, InitAll)
           
          -}  // namespace demo
          -
          +} // namespace demo

          In myobject.h, a new public method is added to allow access to private values after unwrapping the object.

          -
          // myobject.h
          -#ifndef MYOBJECT_H
          -#define MYOBJECT_H
          -
          -#include <node.h>
          -#include <node_object_wrap.h>
          -
          -namespace demo {
          -
          -class MyObject : public node::ObjectWrap {
          - public:
          -  static void Init(v8::Isolate* isolate);
          -  static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);
          -  inline double value() const { return value_; }
          +
          // myobject.h
          +#ifndef MYOBJECT_H
          +#define MYOBJECT_H
          +
          +#include <node.h>
          +#include <node_object_wrap.h>
          +
          +namespace demo {
          +
          +class MyObject : public node::ObjectWrap {
          + public:
          +  static void Init(v8::Isolate* isolate);
          +  static void NewInstance(const v8::FunctionCallbackInfo<v8::Value>& args);
          +  inline double value() const { return value_; }
           
          - private:
          -  explicit MyObject(double value = 0);
          + private:
          +  explicit MyObject(double value = 0);
             ~MyObject();
           
          -  static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
          -  static v8::Global<v8::Function> constructor;
          -  double value_;
          +  static void New(const v8::FunctionCallbackInfo<v8::Value>& args);
          +  static v8::Global<v8::Function> constructor;
          +  double value_;
           };
           
          -}  // namespace demo
          +}  // namespace demo
           
          -#endif
          -
          +#endif

          The implementation of myobject.cc is similar to before:

          -
          // myobject.cc
          -#include <node.h>
          -#include "myobject.h"
          -
          -namespace demo {
          -
          -using node::AddEnvironmentCleanupHook;
          -using v8::Context;
          -using v8::Function;
          -using v8::FunctionCallbackInfo;
          -using v8::FunctionTemplate;
          -using v8::Global;
          -using v8::Isolate;
          -using v8::Local;
          -using v8::NewStringType;
          -using v8::Object;
          -using v8::String;
          -using v8::Value;
          +
          // myobject.cc
          +#include <node.h>
          +#include "myobject.h"
          +
          +namespace demo {
          +
          +using node::AddEnvironmentCleanupHook;
          +using v8::Context;
          +using v8::Function;
          +using v8::FunctionCallbackInfo;
          +using v8::FunctionTemplate;
          +using v8::Global;
          +using v8::Isolate;
          +using v8::Local;
          +using v8::NewStringType;
          +using v8::Object;
          +using v8::String;
          +using v8::Value;
           
          -// Warning! This is not thread-safe, this addon cannot be used for worker
          -// threads.
          +// Warning! This is not thread-safe, this addon cannot be used for worker
          +// threads.
           Global<Function> MyObject::constructor;
           
          -MyObject::MyObject(double value) : value_(value) {
          +MyObject::MyObject(double value) : value_(value) {
           }
           
           MyObject::~MyObject() {
           }
           
          -void MyObject::Init(Isolate* isolate) {
          -  // Prepare constructor template
          +void MyObject::Init(Isolate* isolate) {
          +  // Prepare constructor template
             Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New);
             tpl->SetClassName(String::NewFromUtf8(
          -      isolate, "MyObject", NewStringType::kNormal).ToLocalChecked());
          -  tpl->InstanceTemplate()->SetInternalFieldCount(1);
          +      isolate, "MyObject", NewStringType::kNormal).ToLocalChecked());
          +  tpl->InstanceTemplate()->SetInternalFieldCount(1);
           
             Local<Context> context = isolate->GetCurrentContext();
             constructor.Reset(isolate, tpl->GetFunction(context).ToLocalChecked());
           
          -  AddEnvironmentCleanupHook(isolate, [](void*) {
          +  AddEnvironmentCleanupHook(isolate, [](void*) {
               constructor.Reset();
          -  }, nullptr);
          +  }, nullptr);
           }
           
          -void MyObject::New(const FunctionCallbackInfo<Value>& args) {
          +void MyObject::New(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
             Local<Context> context = isolate->GetCurrentContext();
           
          -  if (args.IsConstructCall()) {
          -    // Invoked as constructor: `new MyObject(...)`
          -    double value = args[0]->IsUndefined() ?
          -        0 : args[0]->NumberValue(context).FromMaybe(0);
          -    MyObject* obj = new MyObject(value);
          +  if (args.IsConstructCall()) {
          +    // Invoked as constructor: `new MyObject(...)`
          +    double value = args[0]->IsUndefined() ?
          +        0 : args[0]->NumberValue(context).FromMaybe(0);
          +    MyObject* obj = new MyObject(value);
               obj->Wrap(args.This());
               args.GetReturnValue().Set(args.This());
          -  } else {
          -    // Invoked as plain function `MyObject(...)`, turn into construct call.
          -    const int argc = 1;
          -    Local<Value> argv[argc] = { args[0] };
          +  } else {
          +    // Invoked as plain function `MyObject(...)`, turn into construct call.
          +    const int argc = 1;
          +    Local<Value> argv[argc] = { args[0] };
               Local<Function> cons = Local<Function>::New(isolate, constructor);
               Local<Object> instance =
                   cons->NewInstance(context, argc, argv).ToLocalChecked();
          @@ -1345,11 +1321,11 @@
             }
           }
           
          -void MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {
          +void MyObject::NewInstance(const FunctionCallbackInfo<Value>& args) {
             Isolate* isolate = args.GetIsolate();
           
          -  const unsigned argc = 1;
          -  Local<Value> argv[argc] = { args[0] };
          +  const unsigned argc = 1;
          +  Local<Value> argv[argc] = { args[0] };
             Local<Function> cons = Local<Function>::New(isolate, constructor);
             Local<Context> context = isolate->GetCurrentContext();
             Local<Object> instance =
          @@ -1358,24 +1334,20 @@
             args.GetReturnValue().Set(instance);
           }
           
          -}  // namespace demo
          -
          +} // namespace demo

          Test it with:

          -
          // test.js
          -const addon = require('./build/Release/addon');
          +
          // test.js
          +const addon = require('./build/Release/addon');
           
          -const obj1 = addon.createObject(10);
          -const obj2 = addon.createObject(20);
          -const result = addon.add(obj1, obj2);
          -
          -console.log(result);
          -// Prints: 30
          -
          +const obj1 = addon.createObject(10); +const obj2 = addon.createObject(20); +const result = addon.add(obj1, obj2); + +console.log(result); +// Prints: 30
          +
- - - diff -Nru nodejs-mozilla-12.18.1/doc/api/addons.json nodejs-mozilla-12.22.12/doc/api/addons.json --- nodejs-mozilla-12.18.1/doc/api/addons.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/addons.json 2022-04-05 07:17:04.000000000 +0000 @@ -4,26 +4,35 @@ "introduced_in": "v0.10.0", "miscs": [ { - "textRaw": "C++ Addons", - "name": "C++ Addons", + "textRaw": "C++ addons", + "name": "C++ addons", "introduced_in": "v0.10.0", "type": "misc", - "desc": "

Addons are dynamically-linked shared objects written in C++. The\nrequire() function can load Addons as ordinary Node.js modules.\nAddons provide an interface between JavaScript and C/C++ libraries.

\n

There are three options for implementing Addons: N-API, nan, or direct\nuse of internal V8, libuv and Node.js libraries. Unless there is a need for\ndirect access to functionality which is not exposed by N-API, use N-API.\nRefer to C/C++ Addons with N-API for more information on N-API.

\n

When not using N-API, implementing Addons is complicated,\ninvolving knowledge of several components and APIs:

\n
    \n
  • \n

    V8: the C++ library Node.js currently uses to provide the\nJavaScript implementation. V8 provides the mechanisms for creating objects,\ncalling functions, etc. V8's API is documented mostly in the\nv8.h header file (deps/v8/include/v8.h in the Node.js source\ntree), which is also available online.

    \n
  • \n
  • \n

    libuv: The C library that implements the Node.js event loop, its worker\nthreads and all of the asynchronous behaviors of the platform. It also\nserves as a cross-platform abstraction library, giving easy, POSIX-like\naccess across all major operating systems to many common system tasks, such\nas interacting with the filesystem, sockets, timers, and system events. libuv\nalso provides a pthreads-like threading abstraction that may be used to\npower more sophisticated asynchronous Addons that need to move beyond the\nstandard event loop. Addon authors are encouraged to think about how to\navoid blocking the event loop with I/O or other time-intensive tasks by\noff-loading work via libuv to non-blocking system operations, worker threads\nor a custom use of libuv's threads.

    \n
  • \n
  • \n

    Internal Node.js libraries. Node.js itself exports C++ APIs that Addons can\nuse, the most important of which is the node::ObjectWrap class.

    \n
  • \n
  • \n

    Node.js includes other statically linked libraries including OpenSSL. These\nother libraries are located in the deps/ directory in the Node.js source\ntree. Only the libuv, OpenSSL, V8 and zlib symbols are purposefully\nre-exported by Node.js and may be used to various extents by Addons. See\nLinking to libraries included with Node.js for additional information.

    \n
  • \n
\n

All of the following examples are available for download and may\nbe used as the starting-point for an Addon.

", + "desc": "

Addons are dynamically-linked shared objects written in C++. The\nrequire() function can load addons as ordinary Node.js modules.\nAddons provide an interface between JavaScript and C/C++ libraries.

\n

There are three options for implementing addons: N-API, nan, or direct\nuse of internal V8, libuv and Node.js libraries. Unless there is a need for\ndirect access to functionality which is not exposed by N-API, use N-API.\nRefer to C/C++ addons with N-API for more information on N-API.

\n

When not using N-API, implementing addons is complicated,\ninvolving knowledge of several components and APIs:

\n
    \n
  • \n

    V8: the C++ library Node.js uses to provide the\nJavaScript implementation. V8 provides the mechanisms for creating objects,\ncalling functions, etc. V8's API is documented mostly in the\nv8.h header file (deps/v8/include/v8.h in the Node.js source\ntree), which is also available online.

    \n
  • \n
  • \n

    libuv: The C library that implements the Node.js event loop, its worker\nthreads and all of the asynchronous behaviors of the platform. It also\nserves as a cross-platform abstraction library, giving easy, POSIX-like\naccess across all major operating systems to many common system tasks, such\nas interacting with the filesystem, sockets, timers, and system events. libuv\nalso provides a pthreads-like threading abstraction that may be used to\npower more sophisticated asynchronous addons that need to move beyond the\nstandard event loop. Addon authors are encouraged to think about how to\navoid blocking the event loop with I/O or other time-intensive tasks by\noff-loading work via libuv to non-blocking system operations, worker threads\nor a custom use of libuv's threads.

    \n
  • \n
  • \n

    Internal Node.js libraries. Node.js itself exports C++ APIs that addons can\nuse, the most important of which is the node::ObjectWrap class.

    \n
  • \n
  • \n

    Node.js includes other statically linked libraries including OpenSSL. These\nother libraries are located in the deps/ directory in the Node.js source\ntree. Only the libuv, OpenSSL, V8 and zlib symbols are purposefully\nre-exported by Node.js and may be used to various extents by addons. See\nLinking to libraries included with Node.js for additional information.

    \n
  • \n
\n

All of the following examples are available for download and may\nbe used as the starting-point for an addon.

", "miscs": [ { "textRaw": "Hello world", "name": "hello_world", - "desc": "

This \"Hello world\" example is a simple Addon, written in C++, that is the\nequivalent of the following JavaScript code:

\n
module.exports.hello = () => 'world';\n
\n

First, create the file hello.cc:

\n
// hello.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\nvoid Method(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n  args.GetReturnValue().Set(String::NewFromUtf8(\n      isolate, \"world\", NewStringType::kNormal).ToLocalChecked());\n}\n\nvoid Initialize(Local<Object> exports) {\n  NODE_SET_METHOD(exports, \"hello\", Method);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)\n\n}  // namespace demo\n
\n

All Node.js Addons must export an initialization function following\nthe pattern:

\n
void Initialize(Local<Object> exports);\nNODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)\n
\n

There is no semi-colon after NODE_MODULE as it's not a function (see\nnode.h).

\n

The module_name must match the filename of the final binary (excluding\nthe .node suffix).

\n

In the hello.cc example, then, the initialization function is Initialize\nand the addon module name is addon.

\n

When building addons with node-gyp, using the macro NODE_GYP_MODULE_NAME as\nthe first parameter of NODE_MODULE() will ensure that the name of the final\nbinary will be passed to NODE_MODULE().

", + "desc": "

This \"Hello world\" example is a simple addon, written in C++, that is the\nequivalent of the following JavaScript code:

\n
module.exports.hello = () => 'world';\n
\n

First, create the file hello.cc:

\n
// hello.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\nvoid Method(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n  args.GetReturnValue().Set(String::NewFromUtf8(\n      isolate, \"world\", NewStringType::kNormal).ToLocalChecked());\n}\n\nvoid Initialize(Local<Object> exports) {\n  NODE_SET_METHOD(exports, \"hello\", Method);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)\n\n}  // namespace demo\n
\n

All Node.js addons must export an initialization function following\nthe pattern:

\n
void Initialize(Local<Object> exports);\nNODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)\n
\n

There is no semi-colon after NODE_MODULE as it's not a function (see\nnode.h).

\n

The module_name must match the filename of the final binary (excluding\nthe .node suffix).

\n

In the hello.cc example, then, the initialization function is Initialize\nand the addon module name is addon.

\n

When building addons with node-gyp, using the macro NODE_GYP_MODULE_NAME as\nthe first parameter of NODE_MODULE() will ensure that the name of the final\nbinary will be passed to NODE_MODULE().

", "modules": [ { "textRaw": "Context-aware addons", "name": "context-aware_addons", - "desc": "

There are environments in which Node.js addons may need to be loaded multiple\ntimes in multiple contexts. For example, the Electron runtime runs multiple\ninstances of Node.js in a single process. Each instance will have its own\nrequire() cache, and thus each instance will need a native addon to behave\ncorrectly when loaded via require(). From the addon's perspective, this means\nthat it must support multiple initializations.

\n

A context-aware addon can be constructed by using the macro\nNODE_MODULE_INITIALIZER, which expands to the name of a function which Node.js\nwill expect to find when it loads an addon. An addon can thus be initialized as\nin the following example:

\n
using namespace v8;\n\nextern \"C\" NODE_MODULE_EXPORT void\nNODE_MODULE_INITIALIZER(Local<Object> exports,\n                        Local<Value> module,\n                        Local<Context> context) {\n  /* Perform addon initialization steps here. */\n}\n
\n

Another option is to use the macro NODE_MODULE_INIT(), which will also\nconstruct a context-aware addon. Unlike NODE_MODULE(), which is used to\nconstruct an addon around a given addon initializer function,\nNODE_MODULE_INIT() serves as the declaration of such an initializer to be\nfollowed by a function body.

\n

The following three variables may be used inside the function body following an\ninvocation of NODE_MODULE_INIT():

\n
    \n
  • Local<Object> exports,
  • \n
  • Local<Value> module, and
  • \n
  • Local<Context> context
  • \n
\n

The choice to build a context-aware addon carries with it the responsibility of\ncarefully managing global static data. Since the addon may be loaded multiple\ntimes, potentially even from different threads, any global static data stored\nin the addon must be properly protected, and must not contain any persistent\nreferences to JavaScript objects. The reason for this is that JavaScript\nobjects are only valid in one context, and will likely cause a crash when\naccessed from the wrong context or from a different thread than the one on which\nthey were created.

\n

The context-aware addon can be structured to avoid global static data by\nperforming the following steps:

\n
    \n
  • \n

    Define a class which will hold per-addon-instance data and which has a static\nmember of the form

    \n
    ```C++\nstatic void DeleteInstance(void* data) {\n  // Cast `data` to an instance of the class and delete it.\n}\n```\n
    \n
  • \n
  • Heap-allocate an instance of this class in the addon initializer. This can be\naccomplished using the new keyword.
  • \n
  • Call node::AddEnvironmentCleanupHook(), passing it the above-created\ninstance and a pointer to DeleteInstance(). This will ensure the instance is\ndeleted when the environment is torn down.
  • \n
  • Store the instance of the class in a v8::External, and
  • \n
  • Pass the v8::External to all methods exposed to JavaScript by passing it\nto v8::FunctionTemplate::New() or v8::Function::New() which creates the\nnative-backed JavaScript functions. The third parameter of\nv8::FunctionTemplate::New() or v8::Function::New() accepts the\nv8::External and makes it available in the native callback using the\nv8::FunctionCallbackInfo::Data() method.
  • \n
\n

This will ensure that the per-addon-instance data reaches each binding that can\nbe called from JavaScript. The per-addon-instance data must also be passed into\nany asynchronous callbacks the addon may create.

\n

The following example illustrates the implementation of a context-aware addon:

\n
#include <node.h>\n\nusing namespace v8;\n\nclass AddonData {\n public:\n  explicit AddonData(Isolate* isolate):\n      call_count(0) {\n    // Ensure this per-addon-instance data is deleted at environment cleanup.\n    node::AddEnvironmentCleanupHook(isolate, DeleteInstance, this);\n  }\n\n  // Per-addon data.\n  int call_count;\n\n  static void DeleteInstance(void* data) {\n    delete static_cast<AddonData*>(data);\n  }\n};\n\nstatic void Method(const v8::FunctionCallbackInfo<v8::Value>& info) {\n  // Retrieve the per-addon-instance data.\n  AddonData* data =\n      reinterpret_cast<AddonData*>(info.Data().As<External>()->Value());\n  data->call_count++;\n  info.GetReturnValue().Set((double)data->call_count);\n}\n\n// Initialize this addon to be context-aware.\nNODE_MODULE_INIT(/* exports, module, context */) {\n  Isolate* isolate = context->GetIsolate();\n\n  // Create a new instance of `AddonData` for this instance of the addon and\n  // tie its life cycle to that of the Node.js environment.\n  AddonData* data = new AddonData(isolate);\n\n  // Wrap the data in a `v8::External` so we can pass it to the method we\n  // expose.\n  Local<External> external = External::New(isolate, data);\n\n  // Expose the method `Method` to JavaScript, and make sure it receives the\n  // per-addon-instance data we created above by passing `external` as the\n  // third parameter to the `FunctionTemplate` constructor.\n  exports->Set(context,\n               String::NewFromUtf8(isolate, \"method\", NewStringType::kNormal)\n                  .ToLocalChecked(),\n               FunctionTemplate::New(isolate, Method, external)\n                  ->GetFunction(context).ToLocalChecked()).FromJust();\n}\n
", + "desc": "

There are environments in which Node.js addons may need to be loaded multiple\ntimes in multiple contexts. For example, the Electron runtime runs multiple\ninstances of Node.js in a single process. Each instance will have its own\nrequire() cache, and thus each instance will need a native addon to behave\ncorrectly when loaded via require(). From the addon's perspective, this means\nthat it must support multiple initializations.

\n

A context-aware addon can be constructed by using the macro\nNODE_MODULE_INITIALIZER, which expands to the name of a function which Node.js\nwill expect to find when it loads an addon. An addon can thus be initialized as\nin the following example:

\n
using namespace v8;\n\nextern \"C\" NODE_MODULE_EXPORT void\nNODE_MODULE_INITIALIZER(Local<Object> exports,\n                        Local<Value> module,\n                        Local<Context> context) {\n  /* Perform addon initialization steps here. */\n}\n
\n

Another option is to use the macro NODE_MODULE_INIT(), which will also\nconstruct a context-aware addon. Unlike NODE_MODULE(), which is used to\nconstruct an addon around a given addon initializer function,\nNODE_MODULE_INIT() serves as the declaration of such an initializer to be\nfollowed by a function body.

\n

The following three variables may be used inside the function body following an\ninvocation of NODE_MODULE_INIT():

\n
    \n
  • Local<Object> exports,
  • \n
  • Local<Value> module, and
  • \n
  • Local<Context> context
  • \n
\n

The choice to build a context-aware addon carries with it the responsibility of\ncarefully managing global static data. Since the addon may be loaded multiple\ntimes, potentially even from different threads, any global static data stored\nin the addon must be properly protected, and must not contain any persistent\nreferences to JavaScript objects. The reason for this is that JavaScript\nobjects are only valid in one context, and will likely cause a crash when\naccessed from the wrong context or from a different thread than the one on which\nthey were created.

\n

The context-aware addon can be structured to avoid global static data by\nperforming the following steps:

\n
    \n
  • Define a class which will hold per-addon-instance data and which has a static\nmember of the form\n
    static void DeleteInstance(void* data) {\n  // Cast `data` to an instance of the class and delete it.\n}\n
    \n
  • \n
  • Heap-allocate an instance of this class in the addon initializer. This can be\naccomplished using the new keyword.
  • \n
  • Call node::AddEnvironmentCleanupHook(), passing it the above-created\ninstance and a pointer to DeleteInstance(). This will ensure the instance is\ndeleted when the environment is torn down.
  • \n
  • Store the instance of the class in a v8::External, and
  • \n
  • Pass the v8::External to all methods exposed to JavaScript by passing it\nto v8::FunctionTemplate::New() or v8::Function::New() which creates the\nnative-backed JavaScript functions. The third parameter of\nv8::FunctionTemplate::New() or v8::Function::New() accepts the\nv8::External and makes it available in the native callback using the\nv8::FunctionCallbackInfo::Data() method.
  • \n
\n

This will ensure that the per-addon-instance data reaches each binding that can\nbe called from JavaScript. The per-addon-instance data must also be passed into\nany asynchronous callbacks the addon may create.

\n

The following example illustrates the implementation of a context-aware addon:

\n
#include <node.h>\n\nusing namespace v8;\n\nclass AddonData {\n public:\n  explicit AddonData(Isolate* isolate):\n      call_count(0) {\n    // Ensure this per-addon-instance data is deleted at environment cleanup.\n    node::AddEnvironmentCleanupHook(isolate, DeleteInstance, this);\n  }\n\n  // Per-addon data.\n  int call_count;\n\n  static void DeleteInstance(void* data) {\n    delete static_cast<AddonData*>(data);\n  }\n};\n\nstatic void Method(const v8::FunctionCallbackInfo<v8::Value>& info) {\n  // Retrieve the per-addon-instance data.\n  AddonData* data =\n      reinterpret_cast<AddonData*>(info.Data().As<External>()->Value());\n  data->call_count++;\n  info.GetReturnValue().Set((double)data->call_count);\n}\n\n// Initialize this addon to be context-aware.\nNODE_MODULE_INIT(/* exports, module, context */) {\n  Isolate* isolate = context->GetIsolate();\n\n  // Create a new instance of `AddonData` for this instance of the addon and\n  // tie its life cycle to that of the Node.js environment.\n  AddonData* data = new AddonData(isolate);\n\n  // Wrap the data in a `v8::External` so we can pass it to the method we\n  // expose.\n  Local<External> external = External::New(isolate, data);\n\n  // Expose the method `Method` to JavaScript, and make sure it receives the\n  // per-addon-instance data we created above by passing `external` as the\n  // third parameter to the `FunctionTemplate` constructor.\n  exports->Set(context,\n               String::NewFromUtf8(isolate, \"method\", NewStringType::kNormal)\n                  .ToLocalChecked(),\n               FunctionTemplate::New(isolate, Method, external)\n                  ->GetFunction(context).ToLocalChecked()).FromJust();\n}\n
", "modules": [ { "textRaw": "Worker support", "name": "worker_support", - "desc": "

In order to be loaded from multiple Node.js environments,\nsuch as a main thread and a Worker thread, an add-on needs to either:

\n
    \n
  • Be an N-API addon, or
  • \n
  • Be declared as context-aware using NODE_MODULE_INIT() as described above
  • \n
\n

In order to support Worker threads, addons need to clean up any resources\nthey may have allocated when such a thread exists. This can be achieved through\nthe usage of the AddEnvironmentCleanupHook() function:

\n
void AddEnvironmentCleanupHook(v8::Isolate* isolate,\n                               void (*fun)(void* arg),\n                               void* arg);\n
\n

This function adds a hook that will run before a given Node.js instance shuts\ndown. If necessary, such hooks can be removed using\nRemoveEnvironmentCleanupHook() before they are run, which has the same\nsignature. Callbacks are run in last-in first-out order.

\n

The following addon.cc uses AddEnvironmentCleanupHook:

\n
// addon.cc\n#include <assert.h>\n#include <stdlib.h>\n#include <node.h>\n\nusing node::AddEnvironmentCleanupHook;\nusing v8::HandleScope;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::Object;\n\n// Note: In a real-world application, do not rely on static/global data.\nstatic char cookie[] = \"yum yum\";\nstatic int cleanup_cb1_called = 0;\nstatic int cleanup_cb2_called = 0;\n\nstatic void cleanup_cb1(void* arg) {\n  Isolate* isolate = static_cast<Isolate*>(arg);\n  HandleScope scope(isolate);\n  Local<Object> obj = Object::New(isolate);\n  assert(!obj.IsEmpty());  // assert VM is still alive\n  assert(obj->IsObject());\n  cleanup_cb1_called++;\n}\n\nstatic void cleanup_cb2(void* arg) {\n  assert(arg == static_cast<void*>(cookie));\n  cleanup_cb2_called++;\n}\n\nstatic void sanity_check(void*) {\n  assert(cleanup_cb1_called == 1);\n  assert(cleanup_cb2_called == 1);\n}\n\n// Initialize this addon to be context-aware.\nNODE_MODULE_INIT(/* exports, module, context */) {\n  Isolate* isolate = context->GetIsolate();\n\n  AddEnvironmentCleanupHook(isolate, sanity_check, nullptr);\n  AddEnvironmentCleanupHook(isolate, cleanup_cb2, cookie);\n  AddEnvironmentCleanupHook(isolate, cleanup_cb1, isolate);\n}\n
\n

Test in JavaScript by running:

\n
// test.js\nrequire('./build/Release/addon');\n
", + "meta": { + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34572", + "description": "Cleanup hooks may now be asynchronous." + } + ] + }, + "desc": "

In order to be loaded from multiple Node.js environments,\nsuch as a main thread and a Worker thread, an add-on needs to either:

\n
    \n
  • Be an N-API addon, or
  • \n
  • Be declared as context-aware using NODE_MODULE_INIT() as described above
  • \n
\n

In order to support Worker threads, addons need to clean up any resources\nthey may have allocated when such a thread exists. This can be achieved through\nthe usage of the AddEnvironmentCleanupHook() function:

\n
void AddEnvironmentCleanupHook(v8::Isolate* isolate,\n                               void (*fun)(void* arg),\n                               void* arg);\n
\n

This function adds a hook that will run before a given Node.js instance shuts\ndown. If necessary, such hooks can be removed before they are run using\nRemoveEnvironmentCleanupHook(), which has the same signature. Callbacks are\nrun in last-in first-out order.

\n

If necessary, there is an additional pair of AddEnvironmentCleanupHook()\nand RemoveEnvironmentCleanupHook() overloads, where the cleanup hook takes a\ncallback function. This can be used for shutting down asynchronous resources,\nsuch as any libuv handles registered by the addon.

\n

The following addon.cc uses AddEnvironmentCleanupHook:

\n
// addon.cc\n#include <assert.h>\n#include <stdlib.h>\n#include <node.h>\n\nusing node::AddEnvironmentCleanupHook;\nusing v8::HandleScope;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::Object;\n\n// Note: In a real-world application, do not rely on static/global data.\nstatic char cookie[] = \"yum yum\";\nstatic int cleanup_cb1_called = 0;\nstatic int cleanup_cb2_called = 0;\n\nstatic void cleanup_cb1(void* arg) {\n  Isolate* isolate = static_cast<Isolate*>(arg);\n  HandleScope scope(isolate);\n  Local<Object> obj = Object::New(isolate);\n  assert(!obj.IsEmpty());  // assert VM is still alive\n  assert(obj->IsObject());\n  cleanup_cb1_called++;\n}\n\nstatic void cleanup_cb2(void* arg) {\n  assert(arg == static_cast<void*>(cookie));\n  cleanup_cb2_called++;\n}\n\nstatic void sanity_check(void*) {\n  assert(cleanup_cb1_called == 1);\n  assert(cleanup_cb2_called == 1);\n}\n\n// Initialize this addon to be context-aware.\nNODE_MODULE_INIT(/* exports, module, context */) {\n  Isolate* isolate = context->GetIsolate();\n\n  AddEnvironmentCleanupHook(isolate, sanity_check, nullptr);\n  AddEnvironmentCleanupHook(isolate, cleanup_cb2, cookie);\n  AddEnvironmentCleanupHook(isolate, cleanup_cb1, isolate);\n}\n
\n

Test in JavaScript by running:

\n
// test.js\nrequire('./build/Release/addon');\n
", "type": "module", "displayName": "Worker support" } @@ -34,60 +43,60 @@ { "textRaw": "Building", "name": "building", - "desc": "

Once the source code has been written, it must be compiled into the binary\naddon.node file. To do so, create a file called binding.gyp in the\ntop-level of the project describing the build configuration of the module\nusing a JSON-like format. This file is used by node-gyp, a tool written\nspecifically to compile Node.js Addons.

\n
{\n  \"targets\": [\n    {\n      \"target_name\": \"addon\",\n      \"sources\": [ \"hello.cc\" ]\n    }\n  ]\n}\n
\n

A version of the node-gyp utility is bundled and distributed with\nNode.js as part of npm. This version is not made directly available for\ndevelopers to use and is intended only to support the ability to use the\nnpm install command to compile and install Addons. Developers who wish to\nuse node-gyp directly can install it using the command\nnpm install -g node-gyp. See the node-gyp installation instructions for\nmore information, including platform-specific requirements.

\n

Once the binding.gyp file has been created, use node-gyp configure to\ngenerate the appropriate project build files for the current platform. This\nwill generate either a Makefile (on Unix platforms) or a vcxproj file\n(on Windows) in the build/ directory.

\n

Next, invoke the node-gyp build command to generate the compiled addon.node\nfile. This will be put into the build/Release/ directory.

\n

When using npm install to install a Node.js Addon, npm uses its own bundled\nversion of node-gyp to perform this same set of actions, generating a\ncompiled version of the Addon for the user's platform on demand.

\n

Once built, the binary Addon can be used from within Node.js by pointing\nrequire() to the built addon.node module:

\n
// hello.js\nconst addon = require('./build/Release/addon');\n\nconsole.log(addon.hello());\n// Prints: 'world'\n
\n

Because the exact path to the compiled Addon binary can vary depending on how\nit is compiled (i.e. sometimes it may be in ./build/Debug/), Addons can use\nthe bindings package to load the compiled module.

\n

While the bindings package implementation is more sophisticated in how it\nlocates Addon modules, it is essentially using a try…catch pattern similar to:

\n
try {\n  return require('./build/Release/addon.node');\n} catch (err) {\n  return require('./build/Debug/addon.node');\n}\n
", + "desc": "

Once the source code has been written, it must be compiled into the binary\naddon.node file. To do so, create a file called binding.gyp in the\ntop-level of the project describing the build configuration of the module\nusing a JSON-like format. This file is used by node-gyp, a tool written\nspecifically to compile Node.js addons.

\n
{\n  \"targets\": [\n    {\n      \"target_name\": \"addon\",\n      \"sources\": [ \"hello.cc\" ]\n    }\n  ]\n}\n
\n

A version of the node-gyp utility is bundled and distributed with\nNode.js as part of npm. This version is not made directly available for\ndevelopers to use and is intended only to support the ability to use the\nnpm install command to compile and install addons. Developers who wish to\nuse node-gyp directly can install it using the command\nnpm install -g node-gyp. See the node-gyp installation instructions for\nmore information, including platform-specific requirements.

\n

Once the binding.gyp file has been created, use node-gyp configure to\ngenerate the appropriate project build files for the current platform. This\nwill generate either a Makefile (on Unix platforms) or a vcxproj file\n(on Windows) in the build/ directory.

\n

Next, invoke the node-gyp build command to generate the compiled addon.node\nfile. This will be put into the build/Release/ directory.

\n

When using npm install to install a Node.js addon, npm uses its own bundled\nversion of node-gyp to perform this same set of actions, generating a\ncompiled version of the addon for the user's platform on demand.

\n

Once built, the binary addon can be used from within Node.js by pointing\nrequire() to the built addon.node module:

\n
// hello.js\nconst addon = require('./build/Release/addon');\n\nconsole.log(addon.hello());\n// Prints: 'world'\n
\n

Because the exact path to the compiled addon binary can vary depending on how\nit is compiled (i.e. sometimes it may be in ./build/Debug/), addons can use\nthe bindings package to load the compiled module.

\n

While the bindings package implementation is more sophisticated in how it\nlocates addon modules, it is essentially using a try…catch pattern similar to:

\n
try {\n  return require('./build/Release/addon.node');\n} catch (err) {\n  return require('./build/Debug/addon.node');\n}\n
", "type": "module", "displayName": "Building" }, { "textRaw": "Linking to libraries included with Node.js", "name": "linking_to_libraries_included_with_node.js", - "desc": "

Node.js uses statically linked libraries such as V8, libuv and OpenSSL. All\nAddons are required to link to V8 and may link to any of the other dependencies\nas well. Typically, this is as simple as including the appropriate\n#include <...> statements (e.g. #include <v8.h>) and node-gyp will locate\nthe appropriate headers automatically. However, there are a few caveats to be\naware of:

\n
    \n
  • \n

    When node-gyp runs, it will detect the specific release version of Node.js\nand download either the full source tarball or just the headers. If the full\nsource is downloaded, Addons will have complete access to the full set of\nNode.js dependencies. However, if only the Node.js headers are downloaded, then\nonly the symbols exported by Node.js will be available.

    \n
  • \n
  • \n

    node-gyp can be run using the --nodedir flag pointing at a local Node.js\nsource image. Using this option, the Addon will have access to the full set of\ndependencies.

    \n
  • \n
", + "desc": "

Node.js uses statically linked libraries such as V8, libuv and OpenSSL. All\naddons are required to link to V8 and may link to any of the other dependencies\nas well. Typically, this is as simple as including the appropriate\n#include <...> statements (e.g. #include <v8.h>) and node-gyp will locate\nthe appropriate headers automatically. However, there are a few caveats to be\naware of:

\n
    \n
  • \n

    When node-gyp runs, it will detect the specific release version of Node.js\nand download either the full source tarball or just the headers. If the full\nsource is downloaded, addons will have complete access to the full set of\nNode.js dependencies. However, if only the Node.js headers are downloaded, then\nonly the symbols exported by Node.js will be available.

    \n
  • \n
  • \n

    node-gyp can be run using the --nodedir flag pointing at a local Node.js\nsource image. Using this option, the addon will have access to the full set of\ndependencies.

    \n
  • \n
", "type": "module", "displayName": "Linking to libraries included with Node.js" }, { - "textRaw": "Loading Addons using `require()`", + "textRaw": "Loading addons using `require()`", "name": "loading_addons_using_`require()`", - "desc": "

The filename extension of the compiled Addon binary is .node (as opposed\nto .dll or .so). The require() function is written to look for\nfiles with the .node file extension and initialize those as dynamically-linked\nlibraries.

\n

When calling require(), the .node extension can usually be\nomitted and Node.js will still find and initialize the Addon. One caveat,\nhowever, is that Node.js will first attempt to locate and load modules or\nJavaScript files that happen to share the same base name. For instance, if\nthere is a file addon.js in the same directory as the binary addon.node,\nthen require('addon') will give precedence to the addon.js file\nand load it instead.

", + "desc": "

The filename extension of the compiled addon binary is .node (as opposed\nto .dll or .so). The require() function is written to look for\nfiles with the .node file extension and initialize those as dynamically-linked\nlibraries.

\n

When calling require(), the .node extension can usually be\nomitted and Node.js will still find and initialize the addon. One caveat,\nhowever, is that Node.js will first attempt to locate and load modules or\nJavaScript files that happen to share the same base name. For instance, if\nthere is a file addon.js in the same directory as the binary addon.node,\nthen require('addon') will give precedence to the addon.js file\nand load it instead.

", "type": "module", - "displayName": "Loading Addons using `require()`" + "displayName": "Loading addons using `require()`" } ], "type": "misc", "displayName": "Hello world" }, { - "textRaw": "Native Abstractions for Node.js", + "textRaw": "Native abstractions for Node.js", "name": "native_abstractions_for_node.js", - "desc": "

Each of the examples illustrated in this document make direct use of the\nNode.js and V8 APIs for implementing Addons. The V8 API can, and has, changed\ndramatically from one V8 release to the next (and one major Node.js release to\nthe next). With each change, Addons may need to be updated and recompiled in\norder to continue functioning. The Node.js release schedule is designed to\nminimize the frequency and impact of such changes but there is little that\nNode.js can do currently to ensure stability of the V8 APIs.

\n

The Native Abstractions for Node.js (or nan) provide a set of tools that\nAddon developers are recommended to use to keep compatibility between past and\nfuture releases of V8 and Node.js. See the nan examples for an\nillustration of how it can be used.

", + "desc": "

Each of the examples illustrated in this document directly use the\nNode.js and V8 APIs for implementing addons. The V8 API can, and has, changed\ndramatically from one V8 release to the next (and one major Node.js release to\nthe next). With each change, addons may need to be updated and recompiled in\norder to continue functioning. The Node.js release schedule is designed to\nminimize the frequency and impact of such changes but there is little that\nNode.js can do to ensure stability of the V8 APIs.

\n

The Native Abstractions for Node.js (or nan) provide a set of tools that\naddon developers are recommended to use to keep compatibility between past and\nfuture releases of V8 and Node.js. See the nan examples for an\nillustration of how it can be used.

", "type": "misc", - "displayName": "Native Abstractions for Node.js" + "displayName": "Native abstractions for Node.js" }, { "textRaw": "N-API", "name": "n-api", "stability": 2, "stabilityText": "Stable", - "desc": "

N-API is an API for building native Addons. It is independent from\nthe underlying JavaScript runtime (e.g. V8) and is maintained as part of\nNode.js itself. This API will be Application Binary Interface (ABI) stable\nacross versions of Node.js. It is intended to insulate Addons from\nchanges in the underlying JavaScript engine and allow modules\ncompiled for one version to run on later versions of Node.js without\nrecompilation. Addons are built/packaged with the same approach/tools\noutlined in this document (node-gyp, etc.). The only difference is the\nset of APIs that are used by the native code. Instead of using the V8\nor Native Abstractions for Node.js APIs, the functions available\nin the N-API are used.

\n

Creating and maintaining an addon that benefits from the ABI stability\nprovided by N-API carries with it certain\nimplementation considerations.

\n

To use N-API in the above \"Hello world\" example, replace the content of\nhello.cc with the following. All other instructions remain the same.

\n
// hello.cc using N-API\n#include <node_api.h>\n\nnamespace demo {\n\nnapi_value Method(napi_env env, napi_callback_info args) {\n  napi_value greeting;\n  napi_status status;\n\n  status = napi_create_string_utf8(env, \"world\", NAPI_AUTO_LENGTH, &greeting);\n  if (status != napi_ok) return nullptr;\n  return greeting;\n}\n\nnapi_value init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_value fn;\n\n  status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn);\n  if (status != napi_ok) return nullptr;\n\n  status = napi_set_named_property(env, exports, \"hello\", fn);\n  if (status != napi_ok) return nullptr;\n  return exports;\n}\n\nNAPI_MODULE(NODE_GYP_MODULE_NAME, init)\n\n}  // namespace demo\n
\n

The functions available and how to use them are documented in\nC/C++ Addons with N-API.

", + "desc": "

N-API is an API for building native addons. It is independent from\nthe underlying JavaScript runtime (e.g. V8) and is maintained as part of\nNode.js itself. This API will be Application Binary Interface (ABI) stable\nacross versions of Node.js. It is intended to insulate addons from\nchanges in the underlying JavaScript engine and allow modules\ncompiled for one version to run on later versions of Node.js without\nrecompilation. Addons are built/packaged with the same approach/tools\noutlined in this document (node-gyp, etc.). The only difference is the\nset of APIs that are used by the native code. Instead of using the V8\nor Native Abstractions for Node.js APIs, the functions available\nin the N-API are used.

\n

Creating and maintaining an addon that benefits from the ABI stability\nprovided by N-API carries with it certain\nimplementation considerations.

\n

To use N-API in the above \"Hello world\" example, replace the content of\nhello.cc with the following. All other instructions remain the same.

\n
// hello.cc using N-API\n#include <node_api.h>\n\nnamespace demo {\n\nnapi_value Method(napi_env env, napi_callback_info args) {\n  napi_value greeting;\n  napi_status status;\n\n  status = napi_create_string_utf8(env, \"world\", NAPI_AUTO_LENGTH, &greeting);\n  if (status != napi_ok) return nullptr;\n  return greeting;\n}\n\nnapi_value init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_value fn;\n\n  status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn);\n  if (status != napi_ok) return nullptr;\n\n  status = napi_set_named_property(env, exports, \"hello\", fn);\n  if (status != napi_ok) return nullptr;\n  return exports;\n}\n\nNAPI_MODULE(NODE_GYP_MODULE_NAME, init)\n\n}  // namespace demo\n
\n

The functions available and how to use them are documented in\nC/C++ addons with N-API.

", "type": "misc", "displayName": "N-API" }, { "textRaw": "Addon examples", "name": "addon_examples", - "desc": "

Following are some example Addons intended to help developers get started. The\nexamples make use of the V8 APIs. Refer to the online V8 reference\nfor help with the various V8 calls, and V8's Embedder's Guide for an\nexplanation of several concepts used such as handles, scopes, function\ntemplates, etc.

\n

Each of these examples using the following binding.gyp file:

\n
{\n  \"targets\": [\n    {\n      \"target_name\": \"addon\",\n      \"sources\": [ \"addon.cc\" ]\n    }\n  ]\n}\n
\n

In cases where there is more than one .cc file, simply add the additional\nfilename to the sources array:

\n
\"sources\": [\"addon.cc\", \"myexample.cc\"]\n
\n

Once the binding.gyp file is ready, the example Addons can be configured and\nbuilt using node-gyp:

\n
$ node-gyp configure build\n
", + "desc": "

Following are some example addons intended to help developers get started. The\nexamples use the V8 APIs. Refer to the online V8 reference\nfor help with the various V8 calls, and V8's Embedder's Guide for an\nexplanation of several concepts used such as handles, scopes, function\ntemplates, etc.

\n

Each of these examples using the following binding.gyp file:

\n
{\n  \"targets\": [\n    {\n      \"target_name\": \"addon\",\n      \"sources\": [ \"addon.cc\" ]\n    }\n  ]\n}\n
\n

In cases where there is more than one .cc file, simply add the additional\nfilename to the sources array:

\n
\"sources\": [\"addon.cc\", \"myexample.cc\"]\n
\n

Once the binding.gyp file is ready, the example addons can be configured and\nbuilt using node-gyp:

\n
$ node-gyp configure build\n
", "modules": [ { "textRaw": "Function arguments", "name": "function_arguments", - "desc": "

Addons will typically expose objects and functions that can be accessed from\nJavaScript running within Node.js. When functions are invoked from JavaScript,\nthe input arguments and return value must be mapped to and from the C/C++\ncode.

\n

The following example illustrates how to read function arguments passed from\nJavaScript and how to return a result:

\n
// addon.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::Exception;\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Number;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\n// This is the implementation of the \"add\" method\n// Input arguments are passed using the\n// const FunctionCallbackInfo<Value>& args struct\nvoid Add(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n\n  // Check the number of arguments passed.\n  if (args.Length() < 2) {\n    // Throw an Error that is passed back to JavaScript\n    isolate->ThrowException(Exception::TypeError(\n        String::NewFromUtf8(isolate,\n                            \"Wrong number of arguments\",\n                            NewStringType::kNormal).ToLocalChecked()));\n    return;\n  }\n\n  // Check the argument types\n  if (!args[0]->IsNumber() || !args[1]->IsNumber()) {\n    isolate->ThrowException(Exception::TypeError(\n        String::NewFromUtf8(isolate,\n                            \"Wrong arguments\",\n                            NewStringType::kNormal).ToLocalChecked()));\n    return;\n  }\n\n  // Perform the operation\n  double value =\n      args[0].As<Number>()->Value() + args[1].As<Number>()->Value();\n  Local<Number> num = Number::New(isolate, value);\n\n  // Set the return value (using the passed in\n  // FunctionCallbackInfo<Value>&)\n  args.GetReturnValue().Set(num);\n}\n\nvoid Init(Local<Object> exports) {\n  NODE_SET_METHOD(exports, \"add\", Add);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Init)\n\n}  // namespace demo\n
\n

Once compiled, the example Addon can be required and used from within Node.js:

\n
// test.js\nconst addon = require('./build/Release/addon');\n\nconsole.log('This should be eight:', addon.add(3, 5));\n
", + "desc": "

Addons will typically expose objects and functions that can be accessed from\nJavaScript running within Node.js. When functions are invoked from JavaScript,\nthe input arguments and return value must be mapped to and from the C/C++\ncode.

\n

The following example illustrates how to read function arguments passed from\nJavaScript and how to return a result:

\n
// addon.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::Exception;\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Number;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\n// This is the implementation of the \"add\" method\n// Input arguments are passed using the\n// const FunctionCallbackInfo<Value>& args struct\nvoid Add(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n\n  // Check the number of arguments passed.\n  if (args.Length() < 2) {\n    // Throw an Error that is passed back to JavaScript\n    isolate->ThrowException(Exception::TypeError(\n        String::NewFromUtf8(isolate,\n                            \"Wrong number of arguments\",\n                            NewStringType::kNormal).ToLocalChecked()));\n    return;\n  }\n\n  // Check the argument types\n  if (!args[0]->IsNumber() || !args[1]->IsNumber()) {\n    isolate->ThrowException(Exception::TypeError(\n        String::NewFromUtf8(isolate,\n                            \"Wrong arguments\",\n                            NewStringType::kNormal).ToLocalChecked()));\n    return;\n  }\n\n  // Perform the operation\n  double value =\n      args[0].As<Number>()->Value() + args[1].As<Number>()->Value();\n  Local<Number> num = Number::New(isolate, value);\n\n  // Set the return value (using the passed in\n  // FunctionCallbackInfo<Value>&)\n  args.GetReturnValue().Set(num);\n}\n\nvoid Init(Local<Object> exports) {\n  NODE_SET_METHOD(exports, \"add\", Add);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Init)\n\n}  // namespace demo\n
\n

Once compiled, the example addon can be required and used from within Node.js:

\n
// test.js\nconst addon = require('./build/Release/addon');\n\nconsole.log('This should be eight:', addon.add(3, 5));\n
", "type": "module", "displayName": "Function arguments" }, { "textRaw": "Callbacks", "name": "callbacks", - "desc": "

It is common practice within Addons to pass JavaScript functions to a C++\nfunction and execute them from there. The following example illustrates how\nto invoke such callbacks:

\n
// addon.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::Context;\nusing v8::Function;\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Null;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\nvoid RunCallback(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n  Local<Context> context = isolate->GetCurrentContext();\n  Local<Function> cb = Local<Function>::Cast(args[0]);\n  const unsigned argc = 1;\n  Local<Value> argv[argc] = {\n      String::NewFromUtf8(isolate,\n                          \"hello world\",\n                          NewStringType::kNormal).ToLocalChecked() };\n  cb->Call(context, Null(isolate), argc, argv).ToLocalChecked();\n}\n\nvoid Init(Local<Object> exports, Local<Object> module) {\n  NODE_SET_METHOD(module, \"exports\", RunCallback);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Init)\n\n}  // namespace demo\n
\n

This example uses a two-argument form of Init() that receives the full\nmodule object as the second argument. This allows the Addon to completely\noverwrite exports with a single function instead of adding the function as a\nproperty of exports.

\n

To test it, run the following JavaScript:

\n
// test.js\nconst addon = require('./build/Release/addon');\n\naddon((msg) => {\n  console.log(msg);\n// Prints: 'hello world'\n});\n
\n

In this example, the callback function is invoked synchronously.

", + "desc": "

It is common practice within addons to pass JavaScript functions to a C++\nfunction and execute them from there. The following example illustrates how\nto invoke such callbacks:

\n
// addon.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::Context;\nusing v8::Function;\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Null;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\nvoid RunCallback(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n  Local<Context> context = isolate->GetCurrentContext();\n  Local<Function> cb = Local<Function>::Cast(args[0]);\n  const unsigned argc = 1;\n  Local<Value> argv[argc] = {\n      String::NewFromUtf8(isolate,\n                          \"hello world\",\n                          NewStringType::kNormal).ToLocalChecked() };\n  cb->Call(context, Null(isolate), argc, argv).ToLocalChecked();\n}\n\nvoid Init(Local<Object> exports, Local<Object> module) {\n  NODE_SET_METHOD(module, \"exports\", RunCallback);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Init)\n\n}  // namespace demo\n
\n

This example uses a two-argument form of Init() that receives the full\nmodule object as the second argument. This allows the addon to completely\noverwrite exports with a single function instead of adding the function as a\nproperty of exports.

\n

To test it, run the following JavaScript:

\n
// test.js\nconst addon = require('./build/Release/addon');\n\naddon((msg) => {\n  console.log(msg);\n// Prints: 'hello world'\n});\n
\n

In this example, the callback function is invoked synchronously.

", "type": "module", "displayName": "Callbacks" }, diff -Nru nodejs-mozilla-12.18.1/doc/api/addons.md nodejs-mozilla-12.22.12/doc/api/addons.md --- nodejs-mozilla-12.18.1/doc/api/addons.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/addons.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,21 +1,21 @@ -# C++ Addons +# C++ addons -Addons are dynamically-linked shared objects written in C++. The -[`require()`][require] function can load Addons as ordinary Node.js modules. +_Addons_ are dynamically-linked shared objects written in C++. The +[`require()`][require] function can load addons as ordinary Node.js modules. Addons provide an interface between JavaScript and C/C++ libraries. -There are three options for implementing Addons: N-API, nan, or direct +There are three options for implementing addons: N-API, nan, or direct use of internal V8, libuv and Node.js libraries. Unless there is a need for direct access to functionality which is not exposed by N-API, use N-API. -Refer to [C/C++ Addons with N-API](n-api.html) for more information on N-API. +Refer to [C/C++ addons with N-API](n-api.html) for more information on N-API. -When not using N-API, implementing Addons is complicated, +When not using N-API, implementing addons is complicated, involving knowledge of several components and APIs: -* V8: the C++ library Node.js currently uses to provide the +* V8: the C++ library Node.js uses to provide the JavaScript implementation. V8 provides the mechanisms for creating objects, calling functions, etc. V8's API is documented mostly in the `v8.h` header file (`deps/v8/include/v8.h` in the Node.js source @@ -27,27 +27,27 @@ access across all major operating systems to many common system tasks, such as interacting with the filesystem, sockets, timers, and system events. libuv also provides a pthreads-like threading abstraction that may be used to - power more sophisticated asynchronous Addons that need to move beyond the + power more sophisticated asynchronous addons that need to move beyond the standard event loop. Addon authors are encouraged to think about how to avoid blocking the event loop with I/O or other time-intensive tasks by off-loading work via libuv to non-blocking system operations, worker threads or a custom use of libuv's threads. -* Internal Node.js libraries. Node.js itself exports C++ APIs that Addons can +* Internal Node.js libraries. Node.js itself exports C++ APIs that addons can use, the most important of which is the `node::ObjectWrap` class. * Node.js includes other statically linked libraries including OpenSSL. These other libraries are located in the `deps/` directory in the Node.js source tree. Only the libuv, OpenSSL, V8 and zlib symbols are purposefully - re-exported by Node.js and may be used to various extents by Addons. See + re-exported by Node.js and may be used to various extents by addons. See [Linking to libraries included with Node.js][] for additional information. All of the following examples are available for [download][] and may -be used as the starting-point for an Addon. +be used as the starting-point for an addon. ## Hello world -This "Hello world" example is a simple Addon, written in C++, that is the +This "Hello world" example is a simple addon, written in C++, that is the equivalent of the following JavaScript code: ```js @@ -85,7 +85,7 @@ } // namespace demo ``` -All Node.js Addons must export an initialization function following +All Node.js addons must export an initialization function following the pattern: ```cpp @@ -157,11 +157,11 @@ performing the following steps: * Define a class which will hold per-addon-instance data and which has a static member of the form - ```C++ - static void DeleteInstance(void* data) { - // Cast `data` to an instance of the class and delete it. - } - ``` + ```cpp + static void DeleteInstance(void* data) { + // Cast `data` to an instance of the class and delete it. + } + ``` * Heap-allocate an instance of this class in the addon initializer. This can be accomplished using the `new` keyword. * Call `node::AddEnvironmentCleanupHook()`, passing it the above-created @@ -234,6 +234,12 @@ ``` #### Worker support + In order to be loaded from multiple Node.js environments, such as a main thread and a Worker thread, an add-on needs to either: @@ -245,16 +251,21 @@ they may have allocated when such a thread exists. This can be achieved through the usage of the `AddEnvironmentCleanupHook()` function: -```c++ +```cpp void AddEnvironmentCleanupHook(v8::Isolate* isolate, void (*fun)(void* arg), void* arg); ``` This function adds a hook that will run before a given Node.js instance shuts -down. If necessary, such hooks can be removed using -`RemoveEnvironmentCleanupHook()` before they are run, which has the same -signature. Callbacks are run in last-in first-out order. +down. If necessary, such hooks can be removed before they are run using +`RemoveEnvironmentCleanupHook()`, which has the same signature. Callbacks are +run in last-in first-out order. + +If necessary, there is an additional pair of `AddEnvironmentCleanupHook()` +and `RemoveEnvironmentCleanupHook()` overloads, where the cleanup hook takes a +callback function. This can be used for shutting down asynchronous resources, +such as any libuv handles registered by the addon. The following `addon.cc` uses `AddEnvironmentCleanupHook`: @@ -317,7 +328,7 @@ `addon.node` file. To do so, create a file called `binding.gyp` in the top-level of the project describing the build configuration of the module using a JSON-like format. This file is used by [node-gyp][], a tool written -specifically to compile Node.js Addons. +specifically to compile Node.js addons. ```json { @@ -333,7 +344,7 @@ A version of the `node-gyp` utility is bundled and distributed with Node.js as part of `npm`. This version is not made directly available for developers to use and is intended only to support the ability to use the -`npm install` command to compile and install Addons. Developers who wish to +`npm install` command to compile and install addons. Developers who wish to use `node-gyp` directly can install it using the command `npm install -g node-gyp`. See the `node-gyp` [installation instructions][] for more information, including platform-specific requirements. @@ -346,11 +357,11 @@ Next, invoke the `node-gyp build` command to generate the compiled `addon.node` file. This will be put into the `build/Release/` directory. -When using `npm install` to install a Node.js Addon, npm uses its own bundled +When using `npm install` to install a Node.js addon, npm uses its own bundled version of `node-gyp` to perform this same set of actions, generating a -compiled version of the Addon for the user's platform on demand. +compiled version of the addon for the user's platform on demand. -Once built, the binary Addon can be used from within Node.js by pointing +Once built, the binary addon can be used from within Node.js by pointing [`require()`][require] to the built `addon.node` module: ```js @@ -361,12 +372,12 @@ // Prints: 'world' ``` -Because the exact path to the compiled Addon binary can vary depending on how -it is compiled (i.e. sometimes it may be in `./build/Debug/`), Addons can use +Because the exact path to the compiled addon binary can vary depending on how +it is compiled (i.e. sometimes it may be in `./build/Debug/`), addons can use the [bindings][] package to load the compiled module. While the `bindings` package implementation is more sophisticated in how it -locates Addon modules, it is essentially using a `try…catch` pattern similar to: +locates addon modules, it is essentially using a `try…catch` pattern similar to: ```js try { @@ -379,7 +390,7 @@ ### Linking to libraries included with Node.js Node.js uses statically linked libraries such as V8, libuv and OpenSSL. All -Addons are required to link to V8 and may link to any of the other dependencies +addons are required to link to V8 and may link to any of the other dependencies as well. Typically, this is as simple as including the appropriate `#include <...>` statements (e.g. `#include `) and `node-gyp` will locate the appropriate headers automatically. However, there are a few caveats to be @@ -387,41 +398,41 @@ * When `node-gyp` runs, it will detect the specific release version of Node.js and download either the full source tarball or just the headers. If the full -source is downloaded, Addons will have complete access to the full set of +source is downloaded, addons will have complete access to the full set of Node.js dependencies. However, if only the Node.js headers are downloaded, then only the symbols exported by Node.js will be available. * `node-gyp` can be run using the `--nodedir` flag pointing at a local Node.js -source image. Using this option, the Addon will have access to the full set of +source image. Using this option, the addon will have access to the full set of dependencies. -### Loading Addons using `require()` +### Loading addons using `require()` -The filename extension of the compiled Addon binary is `.node` (as opposed +The filename extension of the compiled addon binary is `.node` (as opposed to `.dll` or `.so`). The [`require()`][require] function is written to look for files with the `.node` file extension and initialize those as dynamically-linked libraries. When calling [`require()`][require], the `.node` extension can usually be -omitted and Node.js will still find and initialize the Addon. One caveat, +omitted and Node.js will still find and initialize the addon. One caveat, however, is that Node.js will first attempt to locate and load modules or JavaScript files that happen to share the same base name. For instance, if there is a file `addon.js` in the same directory as the binary `addon.node`, then [`require('addon')`][require] will give precedence to the `addon.js` file and load it instead. -## Native Abstractions for Node.js +## Native abstractions for Node.js -Each of the examples illustrated in this document make direct use of the -Node.js and V8 APIs for implementing Addons. The V8 API can, and has, changed +Each of the examples illustrated in this document directly use the +Node.js and V8 APIs for implementing addons. The V8 API can, and has, changed dramatically from one V8 release to the next (and one major Node.js release to -the next). With each change, Addons may need to be updated and recompiled in +the next). With each change, addons may need to be updated and recompiled in order to continue functioning. The Node.js release schedule is designed to minimize the frequency and impact of such changes but there is little that -Node.js can do currently to ensure stability of the V8 APIs. +Node.js can do to ensure stability of the V8 APIs. The [Native Abstractions for Node.js][] (or `nan`) provide a set of tools that -Addon developers are recommended to use to keep compatibility between past and +addon developers are recommended to use to keep compatibility between past and future releases of V8 and Node.js. See the `nan` [examples][] for an illustration of how it can be used. @@ -429,10 +440,10 @@ > Stability: 2 - Stable -N-API is an API for building native Addons. It is independent from +N-API is an API for building native addons. It is independent from the underlying JavaScript runtime (e.g. V8) and is maintained as part of Node.js itself. This API will be Application Binary Interface (ABI) stable -across versions of Node.js. It is intended to insulate Addons from +across versions of Node.js. It is intended to insulate addons from changes in the underlying JavaScript engine and allow modules compiled for one version to run on later versions of Node.js without recompilation. Addons are built/packaged with the same approach/tools @@ -481,12 +492,12 @@ ``` The functions available and how to use them are documented in -[C/C++ Addons with N-API](n-api.html). +[C/C++ addons with N-API](n-api.html). ## Addon examples -Following are some example Addons intended to help developers get started. The -examples make use of the V8 APIs. Refer to the online [V8 reference][v8-docs] +Following are some example addons intended to help developers get started. The +examples use the V8 APIs. Refer to the online [V8 reference][v8-docs] for help with the various V8 calls, and V8's [Embedder's Guide][] for an explanation of several concepts used such as handles, scopes, function templates, etc. @@ -511,7 +522,7 @@ "sources": ["addon.cc", "myexample.cc"] ``` -Once the `binding.gyp` file is ready, the example Addons can be configured and +Once the `binding.gyp` file is ready, the example addons can be configured and built using `node-gyp`: ```console @@ -588,7 +599,7 @@ } // namespace demo ``` -Once compiled, the example Addon can be required and used from within Node.js: +Once compiled, the example addon can be required and used from within Node.js: ```js // test.js @@ -599,7 +610,7 @@ ### Callbacks -It is common practice within Addons to pass JavaScript functions to a C++ +It is common practice within addons to pass JavaScript functions to a C++ function and execute them from there. The following example illustrates how to invoke such callbacks: @@ -642,7 +653,7 @@ ``` This example uses a two-argument form of `Init()` that receives the full -`module` object as the second argument. This allows the Addon to completely +`module` object as the second argument. This allows the addon to completely overwrite `exports` with a single function instead of adding the function as a property of `exports`. diff -Nru nodejs-mozilla-12.18.1/doc/api/all.html nodejs-mozilla-12.22.12/doc/api/all.html --- nodejs-mozilla-12.18.1/doc/api/all.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/all.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Node.js v12.18.1 Documentation + + Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
+
-
+
-

Node.js v12.18.1 Documentation

+

Node.js v12.22.12 Documentation

-

About this Documentation#

+

About this documentation#

Welcome to the official API reference documentation for Node.js!

@@ -4278,28 +4079,28 @@

Contributing#

Report errors in this documentation in the issue tracker. See the contributing guide for directions on how to submit pull requests.

-

Stability Index#

+

Stability index#

Throughout the documentation are indications of a section's stability. Some APIs are so proven and so relied upon that they are unlikely to ever change at all. Others are brand new and experimental, or known to be hazardous.

The stability indices are as follows:

-

Stability: 0 - Deprecated. The feature may emit warnings. Backward +

Stability: 0 - Deprecated. The feature may emit warnings. Backward compatibility is not guaranteed.

-

Stability: 1 - Experimental. The feature is not subject to +

Stability: 1 - Experimental. The feature is not subject to Semantic Versioning rules. Non-backward compatible changes or removal may occur in any future release. Use of the feature is not recommended in production environments.

-

Stability: 2 - Stable. Compatibility with the npm ecosystem is a high +

Stability: 2 - Stable. Compatibility with the npm ecosystem is a high priority.

Use caution when making use of Experimental features, particularly within -modules. End users may not be aware that experimental features are being used. -Bugs or behavior changes may surprise end users when Experimental API +modules. Users may not be aware that experimental features are being used. +Bugs or behavior changes may surprise users when Experimental API modifications occur. To avoid surprises, use of an Experimental feature may need a command-line flag. Experimental features may also emit a warning.

-

JSON Output#

+

JSON output#

@@ -4310,7 +4111,7 @@ to the corresponding man pages which describe how the system call works.

Most Unix system calls have Windows analogues. Still, behavior differences may be unavoidable.

-

Usage & Example#

+

Usage and example#

Usage#

@@ -4328,48 +4129,43 @@ for further install information.

Now, create an empty project folder called projects, then navigate into it.

Linux and Mac:

-
$ mkdir ~/projects
-$ cd ~/projects
-
+
$ mkdir ~/projects
+$ cd ~/projects

Windows CMD:

-
> mkdir %USERPROFILE%\projects
-> cd %USERPROFILE%\projects
-
+
> mkdir %USERPROFILE%\projects
+> cd %USERPROFILE%\projects

Windows PowerShell:

-
> mkdir $env:USERPROFILE\projects
-> cd $env:USERPROFILE\projects
-
+
> mkdir $env:USERPROFILE\projects
+> cd $env:USERPROFILE\projects

Next, create a new source file in the projects folder and call it hello-world.js.

Open hello-world.js in any preferred text editor and paste in the following content:

-
const http = require('http');
+
const http = require('http');
 
-const hostname = '127.0.0.1';
-const port = 3000;
+const hostname = '127.0.0.1';
+const port = 3000;
 
-const server = http.createServer((req, res) => {
-  res.statusCode = 200;
-  res.setHeader('Content-Type', 'text/plain');
-  res.end('Hello, World!\n');
+const server = http.createServer((req, res) => {
+  res.statusCode = 200;
+  res.setHeader('Content-Type', 'text/plain');
+  res.end('Hello, World!\n');
 });
 
-server.listen(port, hostname, () => {
-  console.log(`Server running at http://${hostname}:${port}/`);
-});
-
+server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +});

Save the file, go back to the terminal window, and enter the following command:

-
$ node hello-world.js
-
+
$ node hello-world.js

Output like this should appear in the terminal:

-
Server running at http://127.0.0.1:3000/
-
+
Server running at http://127.0.0.1:3000/

Now, open any preferred web browser and visit http://127.0.0.1:3000.

If the browser displays the string Hello, World!, that indicates the server is working.

Assert#

Stability: 2 - Stable

+

Source Code: lib/assert.js

The assert module provides a set of assertion functions for verifying invariants.

Strict assertion mode#

@@ -4378,7 +4174,7 @@ - + @@ -4394,26 +4190,24 @@

In strict assertion mode, error messages for objects display a diff. In legacy assertion mode, error messages for objects display the objects, often truncated.

To use strict assertion mode:

-
const assert = require('assert').strict;
-
+
const assert = require('assert').strict;

Example error diff:

-
const assert = require('assert').strict;
+
const assert = require('assert').strict;
 
-assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]);
-// AssertionError: Expected inputs to be strictly deep-equal:
-// + actual - expected ... Lines skipped
-//
-//   [
-//     [
-// ...
-//       2,
-// +     3
-// -     '3'
-//     ],
-// ...
-//     5
-//   ]
-
+assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]); +// AssertionError: Expected inputs to be strictly deep-equal: +// + actual - expected ... Lines skipped +// +// [ +// [ +// ... +// 2, +// + 3 +// - '3' +// ], +// ... +// 5 +// ]

To deactivate the colors, use the NO_COLOR or NODE_DISABLE_COLORS environment variables. This will also deactivate the colors in the REPL. For more on color support in terminal environments, read the tty @@ -4427,16 +4221,14 @@

  • assert.notEqual()
  • To use legacy assertion mode:

    -
    const assert = require('assert');
    -
    +
    const assert = require('assert');

    Whenever possible, use the strict assertion mode instead. Otherwise, the Abstract Equality Comparison may cause surprising results. This is especially true for assert.deepEqual(), where the comparison rules are lax:

    -
    // WARNING: This does not throw an AssertionError!
    -assert.deepEqual(/a/gi, new Date());
    -
    -

    Class: assert.AssertionError[src]#

    +
    // WARNING: This does not throw an AssertionError!
    +assert.deepEqual(/a/gi, new Date());
    +

    Class: assert.AssertionError[src]#

    @@ -4447,8 +4239,7 @@ Added in: v0.1.21
      -
    • -

      options <Object>

      +
    • options <Object>
      • message <string> If provided, the error message is set to this value.
      • actual <any> The actual property on the error instance.
      • @@ -4473,29 +4264,148 @@ assertion error.
      • operator <string> Set to the passed in operator value.
      -
      const assert = require('assert');
      +
      const assert = require('assert');
       
      -// Generate an AssertionError to compare the error message later:
      -const { message } = new assert.AssertionError({
      -  actual: 1,
      -  expected: 2,
      -  operator: 'strictEqual'
      +// Generate an AssertionError to compare the error message later:
      +const { message } = new assert.AssertionError({
      +  actual: 1,
      +  expected: 2,
      +  operator: 'strictEqual'
       });
       
      -// Verify error output:
      -try {
      -  assert.strictEqual(1, 2);
      -} catch (err) {
      -  assert(err instanceof assert.AssertionError);
      +// Verify error output:
      +try {
      +  assert.strictEqual(1, 2);
      +} catch (err) {
      +  assert(err instanceof assert.AssertionError);
         assert.strictEqual(err.message, message);
      -  assert.strictEqual(err.name, 'AssertionError');
      -  assert.strictEqual(err.actual, 1);
      -  assert.strictEqual(err.expected, 2);
      -  assert.strictEqual(err.code, 'ERR_ASSERTION');
      -  assert.strictEqual(err.operator, 'strictEqual');
      -  assert.strictEqual(err.generatedMessage, true);
      -}
      -
      + assert.strictEqual(err.name, 'AssertionError'); + assert.strictEqual(err.actual, 1); + assert.strictEqual(err.expected, 2); + assert.strictEqual(err.code, 'ERR_ASSERTION'); + assert.strictEqual(err.operator, 'strictEqual'); + assert.strictEqual(err.generatedMessage, true); +}
      +

      Class: assert.CallTracker#

      + +

      Stability: 1 - Experimental

      +

      This feature is currently experimental and behavior might still change.

      +

      ### new assert.CallTracker()

      + +

      Creates a new CallTracker object which can be used to track if functions +were called a specific number of times. The tracker.verify() must be called +for the verification to take place. The usual pattern would be to call it in a +process.on('exit') handler.

      +
      const assert = require('assert');
      +
      +const tracker = new assert.CallTracker();
      +
      +function func() {}
      +
      +// callsfunc() must be called exactly 1 time before tracker.verify().
      +const callsfunc = tracker.calls(func, 1);
      +
      +callsfunc();
      +
      +// Calls tracker.verify() and verifies if all tracker.calls() functions have
      +// been called exact times.
      +process.on('exit', () => {
      +  tracker.verify();
      +});
      +

      tracker.calls([fn][, exact])#

      + + +

      The wrapper function is expected to be called exactly exact times. If the +function has not been called exactly exact times when +tracker.verify() is called, then tracker.verify() will throw an +error.

      +
      const assert = require('assert');
      +
      +// Creates call tracker.
      +const tracker = new assert.CallTracker();
      +
      +function func() {}
      +
      +// Returns a function that wraps func() that must be called exact times
      +// before tracker.verify().
      +const callsfunc = tracker.calls(func);
      +

      tracker.report()#

      + +
        +
      • Returns: <Array> of objects containing information about the wrapper functions +returned by tracker.calls().
      • +
      • Object <Object> +
          +
        • message <string>
        • +
        • actual <number> The actual number of times the function was called.
        • +
        • expected <number> The number of times the function was expected to be +called.
        • +
        • operator <string> The name of the function that is wrapped.
        • +
        • stack <Object> A stack trace of the function.
        • +
        +
      • +
      +

      The arrays contains information about the expected and actual number of calls of +the functions that have not been called the expected number of times.

      +
      const assert = require('assert');
      +
      +// Creates call tracker.
      +const tracker = new assert.CallTracker();
      +
      +function func() {}
      +
      +function foo() {}
      +
      +// Returns a function that wraps func() that must be called exact times
      +// before tracker.verify().
      +const callsfunc = tracker.calls(func, 2);
      +
      +// Returns an array containing information on callsfunc()
      +tracker.report();
      +// [
      +//  {
      +//    message: 'Expected the func function to be executed 2 time(s) but was
      +//    executed 0 time(s).',
      +//    actual: 0,
      +//    expected: 2,
      +//    operator: 'func',
      +//    stack: stack trace
      +//  }
      +// ]
      +

      tracker.verify()#

      + +

      Iterates through the list of functions passed to +tracker.calls() and will throw an error for functions that +have not been called the expected number of times.

      +
      const assert = require('assert');
      +
      +// Creates call tracker.
      +const tracker = new assert.CallTracker();
      +
      +function func() {}
      +
      +// Returns a function that wraps func() that must be called exact times
      +// before tracker.verify().
      +const callsfunc = tracker.calls(func, 2);
      +
      +callsfunc();
      +
      +// Will throw an error since callsfunc() was only called once.
      +tracker.verify();

      assert(value[, message])#

    • WeakMap and WeakSet comparison does not rely on their values. See below for further details.
    -
    const assert = require('assert').strict;
    +
    const assert = require('assert').strict;
     
    -// This fails because 1 !== '1'.
    -assert.deepStrictEqual({ a: 1 }, { a: '1' });
    -// AssertionError: Expected inputs to be strictly deep-equal:
    -// + actual - expected
    -//
    -//   {
    -// +   a: 1
    -// -   a: '1'
    -//   }
    -
    -// The following objects don't have own properties
    -const date = new Date();
    -const object = {};
    -const fakeDate = {};
    -Object.setPrototypeOf(fakeDate, Date.prototype);
    +// This fails because 1 !== '1'.
    +assert.deepStrictEqual({ a: 1 }, { a: '1' });
    +// AssertionError: Expected inputs to be strictly deep-equal:
    +// + actual - expected
    +//
    +//   {
    +// +   a: 1
    +// -   a: '1'
    +//   }
    +
    +// The following objects don't have own properties
    +const date = new Date();
    +const object = {};
    +const fakeDate = {};
    +Object.setPrototypeOf(fakeDate, Date.prototype);
     
    -// Different [[Prototype]]:
    +// Different [[Prototype]]:
     assert.deepStrictEqual(object, fakeDate);
    -// AssertionError: Expected inputs to be strictly deep-equal:
    -// + actual - expected
    -//
    -// + {}
    -// - Date {}
    +// AssertionError: Expected inputs to be strictly deep-equal:
    +// + actual - expected
    +//
    +// + {}
    +// - Date {}
     
    -// Different type tags:
    +// Different type tags:
     assert.deepStrictEqual(date, fakeDate);
    -// AssertionError: Expected inputs to be strictly deep-equal:
    -// + actual - expected
    -//
    -// + 2018-04-26T00:49:08.604Z
    -// - Date {}
    -
    -assert.deepStrictEqual(NaN, NaN);
    -// OK, because of the SameValue comparison
    -
    -// Different unwrapped numbers:
    -assert.deepStrictEqual(new Number(1), new Number(2));
    -// AssertionError: Expected inputs to be strictly deep-equal:
    -// + actual - expected
    -//
    -// + [Number: 1]
    -// - [Number: 2]
    -
    -assert.deepStrictEqual(new String('foo'), Object('foo'));
    -// OK because the object and the string are identical when unwrapped.
    -
    -assert.deepStrictEqual(-0, -0);
    -// OK
    -
    -// Different zeros using the SameValue Comparison:
    -assert.deepStrictEqual(0, -0);
    -// AssertionError: Expected inputs to be strictly deep-equal:
    -// + actual - expected
    -//
    -// + 0
    -// - -0
    -
    -const symbol1 = Symbol();
    -const symbol2 = Symbol();
    -assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol1]: 1 });
    -// OK, because it is the same symbol on both objects.
    -
    -assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });
    -// AssertionError [ERR_ASSERTION]: Inputs identical but not reference equal:
    -//
    -// {
    -//   [Symbol()]: 1
    -// }
    -
    -const weakMap1 = new WeakMap();
    -const weakMap2 = new WeakMap([[{}, {}]]);
    -const weakMap3 = new WeakMap();
    -weakMap3.unequal = true;
    +// AssertionError: Expected inputs to be strictly deep-equal:
    +// + actual - expected
    +//
    +// + 2018-04-26T00:49:08.604Z
    +// - Date {}
    +
    +assert.deepStrictEqual(NaN, NaN);
    +// OK, because of the SameValue comparison
    +
    +// Different unwrapped numbers:
    +assert.deepStrictEqual(new Number(1), new Number(2));
    +// AssertionError: Expected inputs to be strictly deep-equal:
    +// + actual - expected
    +//
    +// + [Number: 1]
    +// - [Number: 2]
    +
    +assert.deepStrictEqual(new String('foo'), Object('foo'));
    +// OK because the object and the string are identical when unwrapped.
    +
    +assert.deepStrictEqual(-0, -0);
    +// OK
    +
    +// Different zeros using the SameValue Comparison:
    +assert.deepStrictEqual(0, -0);
    +// AssertionError: Expected inputs to be strictly deep-equal:
    +// + actual - expected
    +//
    +// + 0
    +// - -0
    +
    +const symbol1 = Symbol();
    +const symbol2 = Symbol();
    +assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol1]: 1 });
    +// OK, because it is the same symbol on both objects.
    +
    +assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });
    +// AssertionError [ERR_ASSERTION]: Inputs identical but not reference equal:
    +//
    +// {
    +//   [Symbol()]: 1
    +// }
    +
    +const weakMap1 = new WeakMap();
    +const weakMap2 = new WeakMap([[{}, {}]]);
    +const weakMap3 = new WeakMap();
    +weakMap3.unequal = true;
     
     assert.deepStrictEqual(weakMap1, weakMap2);
    -// OK, because it is impossible to compare the entries
    +// OK, because it is impossible to compare the entries
     
    -// Fails because weakMap3 has a property that weakMap1 does not contain:
    +// Fails because weakMap3 has a property that weakMap1 does not contain:
     assert.deepStrictEqual(weakMap1, weakMap3);
    -// AssertionError: Expected inputs to be strictly deep-equal:
    -// + actual - expected
    -//
    -//   WeakMap {
    -// +   [items unknown]
    -// -   [items unknown],
    -// -   unequal: true
    -//   }
    -
    +// AssertionError: Expected inputs to be strictly deep-equal: +// + actual - expected +// +// WeakMap { +// + [items unknown] +// - [items unknown], +// - unequal: true +// }

    If the values are not equal, an AssertionError is thrown with a message property set equal to the value of the message parameter. If the message parameter is undefined, a default error message is assigned. If the message @@ -4764,17 +4671,16 @@

    Expects the string input not to match the regular expression.

    This feature is currently experimental and the name might change or it might be completely removed again.

    -
    const assert = require('assert').strict;
    +
    const assert = require('assert').strict;
     
    -assert.doesNotMatch('I will fail', /fail/);
    -// AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
    +assert.doesNotMatch('I will fail', /fail/);
    +// AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
     
    -assert.doesNotMatch(123, /pass/);
    -// AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
    +assert.doesNotMatch(123, /pass/);
    +// AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
     
    -assert.doesNotMatch('I will pass', /different/);
    -// OK
    -
    +assert.doesNotMatch('I will pass', /different/); +// OK

    If the values do match, or if the string argument is of another type than string, an AssertionError is thrown with a message property set equal to the value of the message parameter. If the message parameter is @@ -4807,21 +4713,19 @@

    Besides the async nature to await the completion behaves identically to assert.doesNotThrow().

    -
    (async () => {
    -  await assert.doesNotReject(
    -    async () => {
    -      throw new TypeError('Wrong value');
    +
    (async () => {
    +  await assert.doesNotReject(
    +    async () => {
    +      throw new TypeError('Wrong value');
         },
    -    SyntaxError
    +    SyntaxError
       );
    -})();
    -
    +})();
    -
    assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
    -  .then(() => {
    -    // ...
    -  });
    -
    +
    assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
    +  .then(() => {
    +    // ...
    +  });

    assert.doesNotThrow(fn[, error][, message])#

    VersionChanges
    v12.16.2

    Changed "strict mode" to "strict assertion mode" and "legacy mode" to "legacy assertion mode" to avoid confusion with the more usual meaining of "strict mode".

    Changed "strict mode" to "strict assertion mode" and "legacy mode" to "legacy assertion mode" to avoid confusion with the more usual meaning of "strict mode".

    v9.9.0

    Added error diffs to the strict assertion mode.

    v9.9.0
    @@ -6587,18 +6485,17 @@

    When converting between Buffers and strings, a character encoding may be specified. If no character encoding is specified, UTF-8 will be used as the default.

    -
    const buf = Buffer.from('hello world', 'utf8');
    +
    const buf = Buffer.from('hello world', 'utf8');
     
    -console.log(buf.toString('hex'));
    -// Prints: 68656c6c6f20776f726c64
    -console.log(buf.toString('base64'));
    -// Prints: aGVsbG8gd29ybGQ=
    -
    -console.log(Buffer.from('fhqwhgads', 'utf8'));
    -// Prints: <Buffer 66 68 71 77 68 67 61 64 73>
    -console.log(Buffer.from('fhqwhgads', 'utf16le'));
    -// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>
    -
    +console.log(buf.toString('hex')); +// Prints: 68656c6c6f20776f726c64 +console.log(buf.toString('base64')); +// Prints: aGVsbG8gd29ybGQ= + +console.log(Buffer.from('fhqwhgads', 'utf8')); +// Prints: <Buffer 66 68 71 77 68 67 61 64 73> +console.log(Buffer.from('fhqwhgads', 'utf16le')); +// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>

    The character encodings currently supported by Node.js are the following:

    • @@ -6630,11 +6527,12 @@
    • 'base64': Base64 encoding. When creating a Buffer from a string, this encoding will also correctly accept "URL and Filename Safe Alphabet" as -specified in RFC 4648, Section 5.

      +specified in RFC 4648, Section 5. Whitespace characters such as spaces, +tabs, and new lines contained within the base64-encoded string are ignored.

    • 'hex': Encode each byte as two hexadecimal characters. Data truncation -may occur when decoding string that do exclusively contain valid hexadecimal +may occur when decoding strings that do exclusively contain valid hexadecimal characters. See below for an example.

    @@ -6643,7 +6541,7 @@
  • 'ascii': For 7-bit ASCII data only. When encoding a string into a Buffer, this is equivalent to using 'latin1'. When decoding a Buffer -into a string, using encoding this will additionally unset the highest bit of +into a string, using this encoding will additionally unset the highest bit of each byte before decoding as 'latin1'. Generally, there should be no reason to use this encoding, as 'utf8' (or, if the data is known to always be ASCII-only, 'latin1') will be a @@ -6662,16 +6560,15 @@ In Node.js, these code points are always supported.

  • -
    Buffer.from('1ag', 'hex');
    -// Prints <Buffer 1a>, data truncated when first non-hexadecimal value
    -// ('g') encountered.
    +
    Buffer.from('1ag', 'hex');
    +// Prints <Buffer 1a>, data truncated when first non-hexadecimal value
    +// ('g') encountered.
     
    -Buffer.from('1a7g', 'hex');
    -// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').
    +Buffer.from('1a7g', 'hex');
    +// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').
     
    -Buffer.from('1634', 'hex');
    -// Prints <Buffer 16 34>, all data represented.
    -
    +Buffer.from('1634', 'hex'); +// Prints <Buffer 16 34>, all data represented.

    Modern Web browsers follow the WHATWG Encoding Standard which aliases both 'latin1' and 'ISO-8859-1' to 'win-1252'. This means that while doing something like http.get(), if the returned charset is one of those listed in @@ -6688,11 +6585,10 @@

    -

    Buffer instances are also Uint8Array instances, which is the language’s -built-in class for working with binary data. Uint8Array in turn is a -subclass of TypedArray. Therefore, all TypedArray methods are also -available on Buffers. However, there are subtle incompatibilities between -the Buffer API and the TypedArray API.

    +

    Buffer instances are also JavaScript Uint8Array and TypedArray +instances. All TypedArray methods are available on Buffers. There are, +however, subtle incompatibilities between the Buffer API and the +TypedArray API.

    In particular:

    • While TypedArray#slice() creates a copy of part of the TypedArray, @@ -6704,55 +6600,65 @@
    • buf.toString() is incompatible with its TypedArray equivalent.
    • A number of methods, e.g. buf.indexOf(), support additional arguments.
    -

    There are two ways to create new TypedArray instances from a Buffer.

    -

    When passing a Buffer to a TypedArray constructor, the Buffer’s -elements will be copied, interpreted as an array of integers, and not as a byte -array of the target type. For example, -new Uint32Array(Buffer.from([1, 2, 3, 4])) creates a 4-element -Uint32Array with elements [1, 2, 3, 4], rather than a -Uint32Array with a single element [0x1020304] or [0x4030201].

    -

    In order to create a TypedArray that shares its memory with the Buffer, -the underlying ArrayBuffer can be passed to the TypedArray -constructor instead:

    -
    const buf = Buffer.from('hello', 'utf16le');
    -const uint16arr = new Uint16Array(
    -  buf.buffer, buf.byteOffset, buf.length / Uint16Array.BYTES_PER_ELEMENT);
    -
    -

    It is also possible to create a new Buffer that shares the same allocated +

    There are two ways to create new TypedArray instances from a Buffer:

    +
      +
    • Passing a Buffer to a TypedArray constructor will copy the Buffers +contents, interpreted as an array of integers, and not as a byte sequence +of the target type.
    • +
    +
    const buf = Buffer.from([1, 2, 3, 4]);
    +const uint32array = new Uint32Array(buf);
    +
    +console.log(uint32array);
    +
    +// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]
    +
      +
    • Passing the Buffers underlying ArrayBuffer will create a +TypedArray that shares its memory with the Buffer.
    • +
    +
    const buf = Buffer.from('hello', 'utf16le');
    +const uint16arr = new Uint16Array(
    +  buf.buffer,
    +  buf.byteOffset,
    +  buf.length / Uint16Array.BYTES_PER_ELEMENT);
    +
    +console.log(uint16array);
    +
    +// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]
    +

    It is possible to create a new Buffer that shares the same allocated memory as a TypedArray instance by using the TypedArray object’s -.buffer property in the same way. Buffer.from() +.buffer property in the same way. Buffer.from() behaves like new Uint8Array() in this context.

    -
    const arr = new Uint16Array(2);
    +
    const arr = new Uint16Array(2);
     
    -arr[0] = 5000;
    -arr[1] = 4000;
    +arr[0] = 5000;
    +arr[1] = 4000;
     
    -// Copies the contents of `arr`.
    -const buf1 = Buffer.from(arr);
    -// Shares memory with `arr`.
    -const buf2 = Buffer.from(arr.buffer);
    -
    -console.log(buf1);
    -// Prints: <Buffer 88 a0>
    -console.log(buf2);
    -// Prints: <Buffer 88 13 a0 0f>
    -
    -arr[1] = 6000;
    -
    -console.log(buf1);
    -// Prints: <Buffer 88 a0>
    -console.log(buf2);
    -// Prints: <Buffer 88 13 70 17>
    -
    +// Copies the contents of `arr`. +const buf1 = Buffer.from(arr); + +// Shares memory with `arr`. +const buf2 = Buffer.from(arr.buffer); + +console.log(buf1); +// Prints: <Buffer 88 a0> +console.log(buf2); +// Prints: <Buffer 88 13 a0 0f> + +arr[1] = 6000; + +console.log(buf1); +// Prints: <Buffer 88 a0> +console.log(buf2); +// Prints: <Buffer 88 13 70 17>

    When creating a Buffer using a TypedArray's .buffer, it is possible to use only a portion of the underlying ArrayBuffer by passing in byteOffset and length parameters.

    -
    const arr = new Uint16Array(20);
    -const buf = Buffer.from(arr.buffer, 0, 16);
    +
    const arr = new Uint16Array(20);
    +const buf = Buffer.from(arr.buffer, 0, 16);
     
    -console.log(buf.length);
    -// Prints: 16
    -
    +console.log(buf.length); +// Prints: 16

    The Buffer.from() and TypedArray.from() have different signatures and implementations. Specifically, the TypedArray variants accept a second argument that is a mapping function that is invoked on every element of the @@ -6763,29 +6669,28 @@

    The Buffer.from() method, however, does not support the use of a mapping function:

    Buffers and iteration#

    Buffer instances can be iterated over using for..of syntax:

    -
    const buf = Buffer.from([1, 2, 3]);
    +
    const buf = Buffer.from([1, 2, 3]);
     
    -for (const b of buf) {
    -  console.log(b);
    +for (const b of buf) {
    +  console.log(b);
     }
    -// Prints:
    -//   1
    -//   2
    -//   3
    -
    +// Prints: +// 1 +// 2 +// 3

    Additionally, the buf.values(), buf.keys(), and buf.entries() methods can be used to create iterators.

    Class: Buffer#

    The Buffer class is a global type for dealing with binary data directly. It can be constructed in a variety of ways.

    -

    Class Method: Buffer.alloc(size[, fill[, encoding]])#

    +

    Static method: Buffer.alloc(size[, fill[, encoding]])#

    • offset <integer> Number of bytes to skip before starting to read. Must satisfy: 0 <= offset <= buf.length - 8. Default: 0.
    • Returns: <bigint>
    -

    Reads an unsigned 64-bit integer from buf at the specified offset with -the specified endianness (readBigUInt64BE() reads as big endian, -readBigUInt64LE() reads as little endian).

    -
    const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
    +

    Reads an unsigned, big-endian 64-bit integer from buf at the specified +offset.

    +
    const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
     
    -console.log(buf.readBigUInt64BE(0));
    -// Prints: 4294967295n
    +console.log(buf.readBigUInt64BE(0));
    +// Prints: 4294967295n
    +

    buf.readBigUInt64LE([offset])#

    + +
      +
    • offset <integer> Number of bytes to skip before starting to read. Must +satisfy: 0 <= offset <= buf.length - 8. Default: 0.
    • +
    • Returns: <bigint>
    • +
    +

    Reads an unsigned, little-endian 64-bit integer from buf at the specified +offset.

    +
    const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);
     
    -console.log(buf.readBigUInt64LE(0));
    -// Prints: 18446744069414584320n
    -
    +console.log(buf.readBigUInt64LE(0)); +// Prints: 18446744069414584320n

    buf.readDoubleBE([offset])#

    + +
      +
    • offset <integer> Number of bytes to skip before starting to read. Must +satisfy 0 <= offset <= buf.length - 8. Default: 0.
    • +
    • Returns: <number>
    • +
    +

    Reads a 64-bit, big-endian double from buf at the specified offset.

    +
    const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);
    +
    +console.log(buf.readDoubleBE(0));
    +// Prints: 8.20788039913184e-304

    buf.readDoubleLE([offset])#

    -
    NAPI_EXTERN napi_status napi_is_error(napi_env env,
    +
    NAPI_EXTERN napi_status napi_is_error(napi_env env,
                                           napi_value value,
    -                                      bool* result);
    -
    + bool* result);
    • [in] env: The environment that the API is invoked under.
    • [in] value: The napi_value to be checked.
    • @@ -11150,11 +11418,10 @@ Added in: v8.0.0 N-API version: 1
    -
    NAPI_EXTERN napi_status napi_create_error(napi_env env,
    +
    NAPI_EXTERN napi_status napi_create_error(napi_env env,
                                               napi_value code,
                                               napi_value msg,
    -                                          napi_value* result);
    -
    + napi_value* result);
    • [in] env: The environment that the API is invoked under.
    • [in] code: Optional napi_value with the string for the error code to be @@ -11170,11 +11437,10 @@ Added in: v8.0.0 N-API version: 1
    -
    NAPI_EXTERN napi_status napi_create_type_error(napi_env env,
    +
    NAPI_EXTERN napi_status napi_create_type_error(napi_env env,
                                                    napi_value code,
                                                    napi_value msg,
    -                                               napi_value* result);
    -
    + napi_value* result);
    • [in] env: The environment that the API is invoked under.
    • [in] code: Optional napi_value with the string for the error code to be @@ -11190,11 +11456,10 @@ Added in: v8.0.0 N-API version: 1
    -
    NAPI_EXTERN napi_status napi_create_range_error(napi_env env,
    +
    NAPI_EXTERN napi_status napi_create_range_error(napi_env env,
                                                     napi_value code,
                                                     napi_value msg,
    -                                                napi_value* result);
    -
    + napi_value* result);
    • [in] env: The environment that the API is invoked under.
    • [in] code: Optional napi_value with the string for the error code to be @@ -11210,9 +11475,8 @@ Added in: v8.0.0 N-API version: 1
    -
    napi_status napi_get_and_clear_last_exception(napi_env env,
    -                                              napi_value* result);
    -
    +
    napi_status napi_get_and_clear_last_exception(napi_env env,
    +                                              napi_value* result);
    • [in] env: The environment that the API is invoked under.
    • [out] result: The exception if one is pending, NULL otherwise.
    • @@ -11224,8 +11488,7 @@ Added in: v8.0.0 N-API version: 1 -
      napi_status napi_is_exception_pending(napi_env env, bool* result);
      -
      +
      napi_status napi_is_exception_pending(napi_env env, bool* result);
      • [in] env: The environment that the API is invoked under.
      • [out] result: Boolean value that is set to true if an exception is pending.
      • @@ -11237,15 +11500,14 @@ Added in: v9.10.0 N-API version: 3 -
        napi_status napi_fatal_exception(napi_env env, napi_value err);
        -
        +
        napi_status napi_fatal_exception(napi_env env, napi_value err);
        • [in] env: The environment that the API is invoked under.
        • [in] err: The error that is passed to 'uncaughtException'.

        Trigger an 'uncaughtException' in JavaScript. Useful if an async callback throws an exception with no way to recover.

        -

        Fatal Errors#

        +

        Fatal errors#

        In the event of an unrecoverable error in a native module, a fatal error can be thrown to immediately terminate the process.

        napi_fatal_error#

        @@ -11253,11 +11515,10 @@ Added in: v8.2.0 N-API version: 1 -
        NAPI_NO_RETURN void napi_fatal_error(const char* location,
        -                                                 size_t location_len,
        -                                                 const char* message,
        -                                                 size_t message_len);
        -
        +
        NAPI_NO_RETURN void napi_fatal_error(const char* location,
        +                                                 size_t location_len,
        +                                                 const char* message,
        +                                                 size_t message_len);
        • [in] location: Optional location at which the error occurred.
        • [in] location_len: The length of the location in bytes, or @@ -11268,7 +11529,7 @@

        The function call does not return, the process will be terminated.

        This API can be called even if there is a pending JavaScript exception.

        -

        Object Lifetime management#

        +

        Object lifetime management#

        As N-API calls are made, handles to objects in the heap for the underlying VM may be returned as napi_values. These handles must hold the objects 'live' until they are no longer required by the native code, @@ -11287,15 +11548,14 @@

        It is often necessary to make the lifespan of handles shorter than the lifespan of a native method. For example, consider a native method that has a loop which iterates through the elements in a large array:

        -
        for (int i = 0; i < 1000000; i++) {
        +
        for (int i = 0; i < 1000000; i++) {
           napi_value result;
           napi_status status = napi_get_element(env, object, i, &result);
        -  if (status != napi_ok) {
        -    break;
        +  if (status != napi_ok) {
        +    break;
           }
        -  // do something with element
        -}
        -
        + // do something with element +}

        This would result in a large number of handles being created, consuming substantial resources. In addition, even though the native code could only use the most recent handle, all of the associated objects would also be @@ -11313,24 +11573,23 @@

        Taking the earlier example, adding calls to napi_open_handle_scope and napi_close_handle_scope would ensure that at most a single handle is valid throughout the execution of the loop:

        -
        for (int i = 0; i < 1000000; i++) {
        +
        for (int i = 0; i < 1000000; i++) {
           napi_handle_scope scope;
           napi_status status = napi_open_handle_scope(env, &scope);
        -  if (status != napi_ok) {
        -    break;
        +  if (status != napi_ok) {
        +    break;
           }
           napi_value result;
           status = napi_get_element(env, object, i, &result);
        -  if (status != napi_ok) {
        -    break;
        +  if (status != napi_ok) {
        +    break;
           }
        -  // do something with element
        +  // do something with element
           status = napi_close_handle_scope(env, scope);
        -  if (status != napi_ok) {
        -    break;
        +  if (status != napi_ok) {
        +    break;
           }
        -}
        -
        +}

        When nesting scopes, there are cases where a handle from an inner scope needs to live beyond the lifespan of that scope. N-API supports an 'escapable scope' in order to support this case. An escapable scope @@ -11347,9 +11606,8 @@ Added in: v8.0.0 N-API version: 1 -

        NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env,
        -                                               napi_handle_scope* result);
        -
        +
        NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env,
        +                                               napi_handle_scope* result);
        • [in] env: The environment that the API is invoked under.
        • [out] result: napi_value representing the new scope.
        • @@ -11361,9 +11619,8 @@ Added in: v8.0.0 N-API version: 1 -
          NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env,
          -                                                napi_handle_scope scope);
          -
          +
          NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env,
          +                                                napi_handle_scope scope);
          • [in] env: The environment that the API is invoked under.
          • [in] scope: napi_value representing the scope to be closed.
          • @@ -11377,10 +11634,9 @@ Added in: v8.0.0 N-API version: 1 -
            NAPI_EXTERN napi_status
            -    napi_open_escapable_handle_scope(napi_env env,
            -                                     napi_handle_scope* result);
            -
            +
            NAPI_EXTERN napi_status
            +    napi_open_escapable_handle_scope(napi_env env,
            +                                     napi_handle_scope* result);
            • [in] env: The environment that the API is invoked under.
            • [out] result: napi_value representing the new scope.
            • @@ -11393,10 +11649,9 @@ Added in: v8.0.0 N-API version: 1 -
              NAPI_EXTERN napi_status
              -    napi_close_escapable_handle_scope(napi_env env,
              -                                      napi_handle_scope scope);
              -
              +
              NAPI_EXTERN napi_status
              +    napi_close_escapable_handle_scope(napi_env env,
              +                                      napi_handle_scope scope);
              • [in] env: The environment that the API is invoked under.
              • [in] scope: napi_value representing the scope to be closed.
              • @@ -11410,11 +11665,10 @@ Added in: v8.0.0 N-API version: 1 -
                napi_status napi_escape_handle(napi_env env,
                +
                napi_status napi_escape_handle(napi_env env,
                                                napi_escapable_handle_scope scope,
                                                napi_value escapee,
                -                               napi_value* result);
                -
                + napi_value* result);
                • [in] env: The environment that the API is invoked under.
                • [in] scope: napi_value representing the current scope.
                • @@ -11466,11 +11720,10 @@ Added in: v8.0.0 N-API version: 1 -
                  NAPI_EXTERN napi_status napi_create_reference(napi_env env,
                  +
                  NAPI_EXTERN napi_status napi_create_reference(napi_env env,
                                                                 napi_value value,
                  -                                              uint32_t initial_refcount,
                  -                                              napi_ref* result);
                  -
                  + uint32_t initial_refcount, + napi_ref* result);
                  • [in] env: The environment that the API is invoked under.
                  • [in] value: napi_value representing the Object to which we want a @@ -11486,8 +11739,7 @@ Added in: v8.0.0 N-API version: 1 -
                    NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref);
                    -
                    +
                    NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref);
                    • [in] env: The environment that the API is invoked under.
                    • [in] ref: napi_ref to be deleted.
                    • @@ -11500,10 +11752,9 @@ Added in: v8.0.0 N-API version: 1 -
                      NAPI_EXTERN napi_status napi_reference_ref(napi_env env,
                      +
                      NAPI_EXTERN napi_status napi_reference_ref(napi_env env,
                                                                  napi_ref ref,
                      -                                           uint32_t* result);
                      -
                      + uint32_t* result);
                      • [in] env: The environment that the API is invoked under.
                      • [in] ref: napi_ref for which the reference count will be incremented.
                      • @@ -11517,10 +11768,9 @@ Added in: v8.0.0 N-API version: 1 -
                        NAPI_EXTERN napi_status napi_reference_unref(napi_env env,
                        +
                        NAPI_EXTERN napi_status napi_reference_unref(napi_env env,
                                                                      napi_ref ref,
                        -                                             uint32_t* result);
                        -
                        + uint32_t* result);
                        • [in] env: The environment that the API is invoked under.
                        • [in] ref: napi_ref for which the reference count will be decremented.
                        • @@ -11534,10 +11784,9 @@ Added in: v8.0.0 N-API version: 1 -
                          NAPI_EXTERN napi_status napi_get_reference_value(napi_env env,
                          +
                          NAPI_EXTERN napi_status napi_get_reference_value(napi_env env,
                                                                            napi_ref ref,
                          -                                                 napi_value* result);
                          -
                          + napi_value* result);

                          the napi_value passed in or out of these methods is a handle to the object to which the reference is related.

                            @@ -11562,10 +11811,9 @@ Added in: v10.2.0 N-API version: 3 -
                            NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env,
                            -                                                  void (*fun)(void* arg),
                            -                                                  void* arg);
                            -
                            +
                            NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env,
                            +                                                  void (*fun)(void* arg),
                            +                                                  void* arg);

                            Registers fun as a function to be run with the arg parameter once the current Node.js environment exits.

                            A function can safely be specified multiple times with different @@ -11574,33 +11822,88 @@ and will lead the process to abort.

                            The hooks will be called in reverse order, i.e. the most recently added one will be called first.

                            -

                            Removing this hook can be done by using napi_remove_env_cleanup_hook. +

                            Removing this hook can be done by using napi_remove_env_cleanup_hook. Typically, that happens when the resource for which this hook was added is being torn down anyway.

                            +

                            For asynchronous cleanup, napi_add_async_cleanup_hook is available.

                            napi_remove_env_cleanup_hook#

                            -
                            NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,
                            -                                                     void (*fun)(void* arg),
                            -                                                     void* arg);
                            -
                            +
                            NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,
                            +                                                     void (*fun)(void* arg),
                            +                                                     void* arg);

                            Unregisters fun as a function to be run with the arg parameter once the current Node.js environment exits. Both the argument and the function value need to be exact matches.

                            The function must have originally been registered with napi_add_env_cleanup_hook, otherwise the process will abort.

                            +

                            napi_add_async_cleanup_hook#

                            + +
                            NAPI_EXTERN napi_status napi_add_async_cleanup_hook(
                            +    napi_env env,
                            +    napi_async_cleanup_hook hook,
                            +    void* arg,
                            +    napi_async_cleanup_hook_handle* remove_handle);
                            +
                              +
                            • [in] env: The environment that the API is invoked under.
                            • +
                            • [in] hook: The function pointer to call at environment teardown.
                            • +
                            • [in] arg: The pointer to pass to hook when it gets called.
                            • +
                            • [out] remove_handle: Optional handle that refers to the asynchronous cleanup +hook.
                            • +
                            +

                            Registers hook, which is a function of type napi_async_cleanup_hook, as +a function to be run with the remove_handle and arg parameters once the +current Node.js environment exits.

                            +

                            Unlike napi_add_env_cleanup_hook, the hook is allowed to be asynchronous.

                            +

                            Otherwise, behavior generally matches that of napi_add_env_cleanup_hook.

                            +

                            If remove_handle is not NULL, an opaque value will be stored in it +that must later be passed to napi_remove_async_cleanup_hook, +regardless of whether the hook has already been invoked. +Typically, that happens when the resource for which this hook was added +is being torn down anyway.

                            +

                            napi_remove_async_cleanup_hook#

                            + +
                            NAPI_EXTERN napi_status napi_remove_async_cleanup_hook(
                            +    napi_async_cleanup_hook_handle remove_handle);
                            + +

                            Unregisters the cleanup hook corresponding to remove_handle. This will prevent +the hook from being executed, unless it has already started executing. +This must be called on any napi_async_cleanup_hook_handle value obtained +from napi_add_async_cleanup_hook.

                            Module registration#

                            N-API modules are registered in a manner similar to other modules except that instead of using the NODE_MODULE macro the following is used:

                            -
                            NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
                            -
                            +
                            NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

                            The next difference is the signature for the Init method. For a N-API module it is as follows:

                            -
                            napi_value Init(napi_env env, napi_value exports);
                            -
                            +
                            napi_value Init(napi_env env, napi_value exports);

                            The return value from Init is treated as the exports object for the module. The Init method is passed an empty object via the exports parameter as a convenience. If Init returns NULL, the parameter passed as exports is @@ -11608,64 +11911,68 @@ specify anything as the exports property of the module.

                            To add the method hello as a function so that it can be called as a method provided by the addon:

                            -
                            napi_value Init(napi_env env, napi_value exports) {
                            +
                            napi_value Init(napi_env env, napi_value exports) {
                               napi_status status;
                            -  napi_property_descriptor desc =
                            -    {"hello", NULL, Method, NULL, NULL, NULL, napi_default, NULL};
                            -  status = napi_define_properties(env, exports, 1, &desc);
                            -  if (status != napi_ok) return NULL;
                            -  return exports;
                            -}
                            -
                            + napi_property_descriptor desc = { + "hello", + NULL, + Method, + NULL, + NULL, + NULL, + napi_writable | napi_enumerable | napi_configurable, + NULL + }; + status = napi_define_properties(env, exports, 1, &desc); + if (status != napi_ok) return NULL; + return exports; +}

                            To set a function to be returned by the require() for the addon:

                            -
                            napi_value Init(napi_env env, napi_value exports) {
                            +
                            napi_value Init(napi_env env, napi_value exports) {
                               napi_value method;
                               napi_status status;
                            -  status = napi_create_function(env, "exports", NAPI_AUTO_LENGTH, Method, NULL, &method);
                            -  if (status != napi_ok) return NULL;
                            -  return method;
                            -}
                            -
                            + status = napi_create_function(env, "exports", NAPI_AUTO_LENGTH, Method, NULL, &method); + if (status != napi_ok) return NULL; + return method; +}

                            To define a class so that new instances can be created (often used with -Object Wrap):

                            -
                            // NOTE: partial example, not all referenced code is included
                            -napi_value Init(napi_env env, napi_value exports) {
                            +Object wrap):

                            +
                            // NOTE: partial example, not all referenced code is included
                            +napi_value Init(napi_env env, napi_value exports) {
                               napi_status status;
                               napi_property_descriptor properties[] = {
                            -    { "value", NULL, NULL, GetValue, SetValue, NULL, napi_default, NULL },
                            -    DECLARE_NAPI_METHOD("plusOne", PlusOne),
                            -    DECLARE_NAPI_METHOD("multiply", Multiply),
                            +    { "value", NULL, NULL, GetValue, SetValue, NULL, napi_writable | napi_configurable, NULL },
                            +    DECLARE_NAPI_METHOD("plusOne", PlusOne),
                            +    DECLARE_NAPI_METHOD("multiply", Multiply),
                               };
                             
                               napi_value cons;
                               status =
                            -      napi_define_class(env, "MyObject", New, NULL, 3, properties, &cons);
                            -  if (status != napi_ok) return NULL;
                            +      napi_define_class(env, "MyObject", New, NULL, 3, properties, &cons);
                            +  if (status != napi_ok) return NULL;
                             
                            -  status = napi_create_reference(env, cons, 1, &constructor);
                            -  if (status != napi_ok) return NULL;
                            +  status = napi_create_reference(env, cons, 1, &constructor);
                            +  if (status != napi_ok) return NULL;
                             
                            -  status = napi_set_named_property(env, exports, "MyObject", cons);
                            -  if (status != napi_ok) return NULL;
                            +  status = napi_set_named_property(env, exports, "MyObject", cons);
                            +  if (status != napi_ok) return NULL;
                             
                            -  return exports;
                            -}
                            -
                            + return exports; +}

                            If the module will be loaded multiple times during the lifetime of the Node.js process, use the NAPI_MODULE_INIT macro to initialize the module:

                            -
                            NAPI_MODULE_INIT() {
                            +
                            NAPI_MODULE_INIT() {
                               napi_value answer;
                               napi_status result;
                             
                            -  status = napi_create_int64(env, 42, &answer);
                            -  if (status != napi_ok) return NULL;
                            +  status = napi_create_int64(env, 42, &answer);
                            +  if (status != napi_ok) return NULL;
                             
                            -  status = napi_set_named_property(env, exports, "answer", answer);
                            -  if (status != napi_ok) return NULL;
                            +  status = napi_set_named_property(env, exports, "answer", answer);
                            +  if (status != napi_ok) return NULL;
                             
                            -  return exports;
                            -}
                            -
                            + return exports; +}

                            This macro includes NAPI_MODULE, and declares an Init function with a special name and with visibility beyond the addon. This will allow Node.js to initialize the module even if it is loaded multiple times.

                            @@ -11675,10 +11982,10 @@

                            The variables env and exports will be available inside the function body following the macro invocation.

                            For more details on setting properties on objects, see the section on -Working with JavaScript Properties.

                            +Working with JavaScript properties.

                            For more details on building addon modules in general, refer to the existing API.

                            -

                            Working with JavaScript Values#

                            +

                            Working with JavaScript values#

                            N-API exposes a set of APIs to create all types of JavaScript values. Some of these types are documented under Section 6 of the ECMAScript Language Specification.

                            @@ -11700,11 +12007,10 @@ Added in: v12.17.0 N-API version: 6 -
                            typedef enum {
                            +
                            typedef enum {
                               napi_key_include_prototypes,
                               napi_key_own_only
                            -} napi_key_collection_mode;
                            -
                            +} napi_key_collection_mode;

                            Describes the Keys/Properties filter enums:

                            napi_key_collection_mode limits the range of collected properties.

                            napi_key_own_only limits the collected properties to the given @@ -11715,32 +12021,30 @@ Added in: v12.17.0 N-API version: 6 -

                            typedef enum {
                            -  napi_key_all_properties = 0,
                            -  napi_key_writable = 1,
                            -  napi_key_enumerable = 1 << 1,
                            -  napi_key_configurable = 1 << 2,
                            -  napi_key_skip_strings = 1 << 3,
                            -  napi_key_skip_symbols = 1 << 4
                            -} napi_key_filter;
                            -
                            +
                            typedef enum {
                            +  napi_key_all_properties = 0,
                            +  napi_key_writable = 1,
                            +  napi_key_enumerable = 1 << 1,
                            +  napi_key_configurable = 1 << 2,
                            +  napi_key_skip_strings = 1 << 3,
                            +  napi_key_skip_symbols = 1 << 4
                            +} napi_key_filter;

                            Property filter bits. They can be or'ed to build a composite filter.

                            napi_key_conversion#

                            -
                            typedef enum {
                            +
                            typedef enum {
                               napi_key_keep_numbers,
                               napi_key_numbers_to_strings
                            -} napi_key_conversion;
                            -
                            +} napi_key_conversion;

                            napi_key_numbers_to_strings will convert integer indices to strings. napi_key_keep_numbers will return numbers for integer indices.

                            napi_valuetype#

                            -
                            typedef enum {
                            -  // ES6 types (corresponds to typeof)
                            +
                            typedef enum {
                            +  // ES6 types (corresponds to typeof)
                               napi_undefined,
                               napi_null,
                               napi_boolean,
                            @@ -11751,8 +12055,7 @@
                               napi_function,
                               napi_external,
                               napi_bigint,
                            -} napi_valuetype;
                            -
                            +} napi_valuetype;

                            Describes the type of a napi_value. This generally corresponds to the types described in Section 6.1 of the ECMAScript Language Specification. In addition to types in that section, napi_valuetype can also represent @@ -11760,7 +12063,7 @@

                            A JavaScript value of type napi_external appears in JavaScript as a plain object such that no properties can be set on it, and no prototype.

                            napi_typedarray_type#

                            -
                            typedef enum {
                            +
                            typedef enum {
                               napi_int8_array,
                               napi_uint8_array,
                               napi_uint8_clamped_array,
                            @@ -11772,19 +12075,17 @@
                               napi_float64_array,
                               napi_bigint64_array,
                               napi_biguint64_array,
                            -} napi_typedarray_type;
                            -
                            +} napi_typedarray_type;

                            This represents the underlying binary scalar datatype of the TypedArray. Elements of this enum correspond to Section 22.2 of the ECMAScript Language Specification.

                            -

                            Object Creation Functions#

                            +

                            Object creation functions#

                            napi_create_array#

                            -
                            napi_status napi_create_array(napi_env env, napi_value* result)
                            -
                            +
                            napi_status napi_create_array(napi_env env, napi_value* result)
                            • [in] env: The environment that the N-API call is invoked under.
                            • [out] result: A napi_value representing a JavaScript Array.
                            • @@ -11798,10 +12099,9 @@ Added in: v8.0.0 N-API version: 1 -
                              napi_status napi_create_array_with_length(napi_env env,
                              -                                          size_t length,
                              -                                          napi_value* result)
                              -
                              +
                              napi_status napi_create_array_with_length(napi_env env,
                              +                                          size_t length,
                              +                                          napi_value* result)
                              • [in] env: The environment that the API is invoked under.
                              • [in] length: The initial length of the Array.
                              • @@ -11822,11 +12122,10 @@ Added in: v8.0.0 N-API version: 1 -
                                napi_status napi_create_arraybuffer(napi_env env,
                                -                                    size_t byte_length,
                                -                                    void** data,
                                -                                    napi_value* result)
                                -
                                +
                                napi_status napi_create_arraybuffer(napi_env env,
                                +                                    size_t byte_length,
                                +                                    void** data,
                                +                                    napi_value* result)
                                • [in] env: The environment that the API is invoked under.
                                • [in] length: The length in bytes of the array buffer to create.
                                • @@ -11850,11 +12149,10 @@ Added in: v8.0.0 N-API version: 1 -
                                  napi_status napi_create_buffer(napi_env env,
                                  -                               size_t size,
                                  -                               void** data,
                                  -                               napi_value* result)
                                  -
                                  +
                                  napi_status napi_create_buffer(napi_env env,
                                  +                               size_t size,
                                  +                               void** data,
                                  +                               napi_value* result)
                                  • [in] env: The environment that the API is invoked under.
                                  • [in] size: Size in bytes of the underlying buffer.
                                  • @@ -11869,12 +12167,11 @@ Added in: v8.0.0 N-API version: 1 -
                                    napi_status napi_create_buffer_copy(napi_env env,
                                    -                                    size_t length,
                                    -                                    const void* data,
                                    -                                    void** result_data,
                                    -                                    napi_value* result)
                                    -
                                    +
                                    napi_status napi_create_buffer_copy(napi_env env,
                                    +                                    size_t length,
                                    +                                    const void* data,
                                    +                                    void** result_data,
                                    +                                    napi_value* result)
                                    • [in] env: The environment that the API is invoked under.
                                    • [in] size: Size in bytes of the input buffer (should be the same as the size @@ -11892,10 +12189,9 @@ Added in: v11.11.0 N-API version: 5 -
                                      napi_status napi_create_date(napi_env env,
                                      -                             double time,
                                      -                             napi_value* result);
                                      -
                                      +
                                      napi_status napi_create_date(napi_env env,
                                      +                             double time,
                                      +                             napi_value* result);
                                      • [in] env: The environment that the API is invoked under.
                                      • [in] time: ECMAScript time value in milliseconds since 01 January, 1970 UTC.
                                      • @@ -11912,17 +12208,16 @@ Added in: v8.0.0 N-API version: 1 -
                                        napi_status napi_create_external(napi_env env,
                                        -                                 void* data,
                                        +
                                        napi_status napi_create_external(napi_env env,
                                        +                                 void* data,
                                                                          napi_finalize finalize_cb,
                                        -                                 void* finalize_hint,
                                        -                                 napi_value* result)
                                        -
                                        + void* finalize_hint, + napi_value* result)
                                        • [in] env: The environment that the API is invoked under.
                                        • [in] data: Raw pointer to the external data.
                                        • [in] finalize_cb: Optional callback to call when the external value is being -collected.
                                        • +collected. napi_finalize provides more details.
                                        • [in] finalize_hint: Optional hint to pass to the finalize callback during collection.
                                        • [out] result: A napi_value representing an external value.
                                        • @@ -11947,21 +12242,20 @@ Added in: v8.0.0 N-API version: 1 -
                                          napi_status
                                          -napi_create_external_arraybuffer(napi_env env,
                                          -                                 void* external_data,
                                          -                                 size_t byte_length,
                                          +
                                          napi_status
                                          +napi_create_external_arraybuffer(napi_env env,
                                          +                                 void* external_data,
                                          +                                 size_t byte_length,
                                                                            napi_finalize finalize_cb,
                                          -                                 void* finalize_hint,
                                          -                                 napi_value* result)
                                          -
                                          + void* finalize_hint, + napi_value* result)
                                          • [in] env: The environment that the API is invoked under.
                                          • [in] external_data: Pointer to the underlying byte buffer of the ArrayBuffer.
                                          • [in] byte_length: The length in bytes of the underlying buffer.
                                          • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being -collected.
                                          • +collected. napi_finalize provides more details.
                                          • [in] finalize_hint: Optional hint to pass to the finalize callback during collection.
                                          • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                          • @@ -11986,20 +12280,19 @@ Added in: v8.0.0 N-API version: 1 -
                                            napi_status napi_create_external_buffer(napi_env env,
                                            -                                        size_t length,
                                            -                                        void* data,
                                            +
                                            napi_status napi_create_external_buffer(napi_env env,
                                            +                                        size_t length,
                                            +                                        void* data,
                                                                                     napi_finalize finalize_cb,
                                            -                                        void* finalize_hint,
                                            -                                        napi_value* result)
                                            -
                                            + void* finalize_hint, + napi_value* result)
                                            • [in] env: The environment that the API is invoked under.
                                            • [in] length: Size in bytes of the input buffer (should be the same as the size of the new buffer).
                                            • -
                                            • [in] data: Raw pointer to the underlying buffer to copy from.
                                            • +
                                            • [in] data: Raw pointer to the underlying buffer to expose to JavaScript.
                                            • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being -collected.
                                            • +collected. napi_finalize provides more details.
                                            • [in] finalize_hint: Optional hint to pass to the finalize callback during collection.
                                            • [out] result: A napi_value representing a node::Buffer.
                                            • @@ -12022,8 +12315,7 @@ Added in: v8.0.0 N-API version: 1 -
                                              napi_status napi_create_object(napi_env env, napi_value* result)
                                              -
                                              +
                                              napi_status napi_create_object(napi_env env, napi_value* result)
                                              • [in] env: The environment that the API is invoked under.
                                              • [out] result: A napi_value representing a JavaScript Object.
                                              • @@ -12038,10 +12330,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                napi_status napi_create_symbol(napi_env env,
                                                +
                                                napi_status napi_create_symbol(napi_env env,
                                                                                napi_value description,
                                                -                               napi_value* result)
                                                -
                                                + napi_value* result)
                                                • [in] env: The environment that the API is invoked under.
                                                • [in] description: Optional napi_value which refers to a JavaScript @@ -12057,13 +12348,12 @@ Added in: v8.0.0 N-API version: 1 -
                                                  napi_status napi_create_typedarray(napi_env env,
                                                  +
                                                  napi_status napi_create_typedarray(napi_env env,
                                                                                      napi_typedarray_type type,
                                                  -                                   size_t length,
                                                  +                                   size_t length,
                                                                                      napi_value arraybuffer,
                                                  -                                   size_t byte_offset,
                                                  -                                   napi_value* result)
                                                  -
                                                  + size_t byte_offset, + napi_value* result)
                                                  • [in] env: The environment that the API is invoked under.
                                                  • [in] type: Scalar datatype of the elements within the TypedArray.
                                                  • @@ -12088,12 +12378,11 @@ Added in: v8.3.0 N-API version: 1 -
                                                    napi_status napi_create_dataview(napi_env env,
                                                    -                                 size_t byte_length,
                                                    +
                                                    napi_status napi_create_dataview(napi_env env,
                                                    +                                 size_t byte_length,
                                                                                      napi_value arraybuffer,
                                                    -                                 size_t byte_offset,
                                                    -                                 napi_value* result)
                                                    -
                                                    + size_t byte_offset, + napi_value* result)
                                                    • [in] env: The environment that the API is invoked under.
                                                    • [in] length: Number of elements in the DataView.
                                                    • @@ -12117,8 +12406,7 @@ Added in: v8.4.0 N-API version: 1 -
                                                      napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result)
                                                      -
                                                      +
                                                      napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result)
                                                      • [in] env: The environment that the API is invoked under.
                                                      • [in] value: Integer value to be represented in JavaScript.
                                                      • @@ -12134,8 +12422,7 @@ Added in: v8.4.0 N-API version: 1 -
                                                        napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result)
                                                        -
                                                        +
                                                        napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result)
                                                        • [in] env: The environment that the API is invoked under.
                                                        • [in] value: Unsigned integer value to be represented in JavaScript.
                                                        • @@ -12151,8 +12438,7 @@ Added in: v8.4.0 N-API version: 1 -
                                                          napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result)
                                                          -
                                                          +
                                                          napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result)
                                                          • [in] env: The environment that the API is invoked under.
                                                          • [in] value: Integer value to be represented in JavaScript.
                                                          • @@ -12164,15 +12450,14 @@

                                                            The JavaScript Number type is described in Section 6.1.6 of the ECMAScript Language Specification. Note the complete range of int64_t cannot be represented with full precision in JavaScript. Integer values -outside the range of Number.MIN_SAFE_INTEGER -(2^53 - 1) - -Number.MAX_SAFE_INTEGER (2^53 - 1) will lose precision.

                                                            +outside the range of Number.MIN_SAFE_INTEGER -(2**53 - 1) - +Number.MAX_SAFE_INTEGER (2**53 - 1) will lose precision.

                                                            napi_create_double#

                                                            -
                                                            napi_status napi_create_double(napi_env env, double value, napi_value* result)
                                                            -
                                                            +
                                                            napi_status napi_create_double(napi_env env, double value, napi_value* result)
                                                            • [in] env: The environment that the API is invoked under.
                                                            • [in] value: Double-precision value to be represented in JavaScript.
                                                            • @@ -12188,10 +12473,9 @@ Added in: v10.7.0 N-API version: 6 -
                                                              napi_status napi_create_bigint_int64(napi_env env,
                                                              -                                     int64_t value,
                                                              -                                     napi_value* result);
                                                              -
                                                              +
                                                              napi_status napi_create_bigint_int64(napi_env env,
                                                              +                                     int64_t value,
                                                              +                                     napi_value* result);
                                                              • [in] env: The environment that the API is invoked under.
                                                              • [in] value: Integer value to be represented in JavaScript.
                                                              • @@ -12204,10 +12488,9 @@ Added in: v10.7.0 N-API version: 6 -
                                                                napi_status napi_create_bigint_uint64(napi_env env,
                                                                -                                      uint64_t value,
                                                                -                                      napi_value* result);
                                                                -
                                                                +
                                                                napi_status napi_create_bigint_uint64(napi_env env,
                                                                +                                      uint64_t value,
                                                                +                                      napi_value* result);
                                                                • [in] env: The environment that the API is invoked under.
                                                                • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                • @@ -12220,12 +12503,11 @@ Added in: v10.7.0 N-API version: 6 -
                                                                  napi_status napi_create_bigint_words(napi_env env,
                                                                  -                                     int sign_bit,
                                                                  -                                     size_t word_count,
                                                                  -                                     const uint64_t* words,
                                                                  -                                     napi_value* result);
                                                                  -
                                                                  +
                                                                  napi_status napi_create_bigint_words(napi_env env,
                                                                  +                                     int sign_bit,
                                                                  +                                     size_t word_count,
                                                                  +                                     const uint64_t* words,
                                                                  +                                     napi_value* result);
                                                                  • [in] env: The environment that the API is invoked under.
                                                                  • [in] sign_bit: Determines if the resulting BigInt will be positive or @@ -12244,11 +12526,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                    napi_status napi_create_string_latin1(napi_env env,
                                                                    -                                      const char* str,
                                                                    -                                      size_t length,
                                                                    -                                      napi_value* result);
                                                                    -
                                                                    +
                                                                    napi_status napi_create_string_latin1(napi_env env,
                                                                    +                                      const char* str,
                                                                    +                                      size_t length,
                                                                    +                                      napi_value* result);
                                                                    • [in] env: The environment that the API is invoked under.
                                                                    • [in] str: Character buffer representing an ISO-8859-1-encoded string.
                                                                    • @@ -12266,11 +12547,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                      napi_status napi_create_string_utf16(napi_env env,
                                                                      -                                     const char16_t* str,
                                                                      -                                     size_t length,
                                                                      -                                     napi_value* result)
                                                                      -
                                                                      +
                                                                      napi_status napi_create_string_utf16(napi_env env,
                                                                      +                                     const char16_t* str,
                                                                      +                                     size_t length,
                                                                      +                                     napi_value* result)
                                                                      • [in] env: The environment that the API is invoked under.
                                                                      • [in] str: Character buffer representing a UTF16-LE-encoded string.
                                                                      • @@ -12288,11 +12568,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                        napi_status napi_create_string_utf8(napi_env env,
                                                                        -                                    const char* str,
                                                                        -                                    size_t length,
                                                                        -                                    napi_value* result)
                                                                        -
                                                                        +
                                                                        napi_status napi_create_string_utf8(napi_env env,
                                                                        +                                    const char* str,
                                                                        +                                    size_t length,
                                                                        +                                    napi_value* result)
                                                                        • [in] env: The environment that the API is invoked under.
                                                                        • [in] str: Character buffer representing a UTF8-encoded string.
                                                                        • @@ -12311,10 +12590,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                          napi_status napi_get_array_length(napi_env env,
                                                                          +
                                                                          napi_status napi_get_array_length(napi_env env,
                                                                                                             napi_value value,
                                                                          -                                  uint32_t* result)
                                                                          -
                                                                          + uint32_t* result)
                                                                          • [in] env: The environment that the API is invoked under.
                                                                          • [in] value: napi_value representing the JavaScript Array whose length is @@ -12330,11 +12608,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                            napi_status napi_get_arraybuffer_info(napi_env env,
                                                                            +
                                                                            napi_status napi_get_arraybuffer_info(napi_env env,
                                                                                                                   napi_value arraybuffer,
                                                                            -                                      void** data,
                                                                            -                                      size_t* byte_length)
                                                                            -
                                                                            + void** data, + size_t* byte_length)
                                                                            • [in] env: The environment that the API is invoked under.
                                                                            • [in] arraybuffer: napi_value representing the ArrayBuffer being queried.
                                                                            • @@ -12357,11 +12634,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                              napi_status napi_get_buffer_info(napi_env env,
                                                                              +
                                                                              napi_status napi_get_buffer_info(napi_env env,
                                                                                                                napi_value value,
                                                                              -                                 void** data,
                                                                              -                                 size_t* length)
                                                                              -
                                                                              + void** data, + size_t* length)
                                                                              • [in] env: The environment that the API is invoked under.
                                                                              • [in] value: napi_value representing the node::Buffer being queried.
                                                                              • @@ -12379,10 +12655,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                napi_status napi_get_prototype(napi_env env,
                                                                                +
                                                                                napi_status napi_get_prototype(napi_env env,
                                                                                                                napi_value object,
                                                                                -                               napi_value* result)
                                                                                -
                                                                                + napi_value* result)
                                                                                • [in] env: The environment that the API is invoked under.
                                                                                • [in] object: napi_value representing JavaScript Object whose prototype @@ -12396,14 +12671,13 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                  napi_status napi_get_typedarray_info(napi_env env,
                                                                                  +
                                                                                  napi_status napi_get_typedarray_info(napi_env env,
                                                                                                                        napi_value typedarray,
                                                                                                                        napi_typedarray_type* type,
                                                                                  -                                     size_t* length,
                                                                                  -                                     void** data,
                                                                                  +                                     size_t* length,
                                                                                  +                                     void** data,
                                                                                                                        napi_value* arraybuffer,
                                                                                  -                                     size_t* byte_offset)
                                                                                  -
                                                                                  + size_t* byte_offset)
                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                  • [in] typedarray: napi_value representing the TypedArray whose @@ -12430,13 +12704,12 @@ Added in: v8.3.0 N-API version: 1 -
                                                                                    napi_status napi_get_dataview_info(napi_env env,
                                                                                    +
                                                                                    napi_status napi_get_dataview_info(napi_env env,
                                                                                                                        napi_value dataview,
                                                                                    -                                   size_t* byte_length,
                                                                                    -                                   void** data,
                                                                                    +                                   size_t* byte_length,
                                                                                    +                                   void** data,
                                                                                                                        napi_value* arraybuffer,
                                                                                    -                                   size_t* byte_offset)
                                                                                    -
                                                                                    + size_t* byte_offset)
                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                    • [in] dataview: napi_value representing the DataView whose @@ -12455,10 +12728,9 @@ Added in: v11.11.0 N-API version: 5 -
                                                                                      napi_status napi_get_date_value(napi_env env,
                                                                                      +
                                                                                      napi_status napi_get_date_value(napi_env env,
                                                                                                                       napi_value value,
                                                                                      -                                double* result)
                                                                                      -
                                                                                      + double* result)
                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                      • [in] value: napi_value representing a JavaScript Date.
                                                                                      • @@ -12476,8 +12748,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                        napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result)
                                                                                        -
                                                                                        +
                                                                                        napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result)
                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                        • [in] value: napi_value representing JavaScript Boolean.
                                                                                        • @@ -12493,10 +12764,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                          napi_status napi_get_value_double(napi_env env,
                                                                                          +
                                                                                          napi_status napi_get_value_double(napi_env env,
                                                                                                                             napi_value value,
                                                                                          -                                  double* result)
                                                                                          -
                                                                                          + double* result)
                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                          • [in] value: napi_value representing JavaScript Number.
                                                                                          • @@ -12512,11 +12782,10 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                            napi_status napi_get_value_bigint_int64(napi_env env,
                                                                                            +
                                                                                            napi_status napi_get_value_bigint_int64(napi_env env,
                                                                                                                                     napi_value value,
                                                                                            -                                        int64_t* result,
                                                                                            -                                        bool* lossless);
                                                                                            -
                                                                                            + int64_t* result, + bool* lossless);
                                                                                            • [in] env: The environment that the API is invoked under
                                                                                            • [in] value: napi_value representing JavaScript BigInt.
                                                                                            • @@ -12534,11 +12803,10 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                              napi_status napi_get_value_bigint_uint64(napi_env env,
                                                                                              +
                                                                                              napi_status napi_get_value_bigint_uint64(napi_env env,
                                                                                                                                       napi_value value,
                                                                                              -                                        uint64_t* result,
                                                                                              -                                        bool* lossless);
                                                                                              -
                                                                                              + uint64_t* result, + bool* lossless);
                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                              • [in] value: napi_value representing JavaScript BigInt.
                                                                                              • @@ -12556,12 +12824,11 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                                napi_status napi_get_value_bigint_words(napi_env env,
                                                                                                +
                                                                                                napi_status napi_get_value_bigint_words(napi_env env,
                                                                                                                                         napi_value value,
                                                                                                -                                        int* sign_bit,
                                                                                                -                                        size_t* word_count,
                                                                                                -                                        uint64_t* words);
                                                                                                -
                                                                                                + int* sign_bit, + size_t* word_count, + uint64_t* words);
                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                • [in] value: napi_value representing JavaScript BigInt.
                                                                                                • @@ -12581,10 +12848,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                  napi_status napi_get_value_external(napi_env env,
                                                                                                  +
                                                                                                  napi_status napi_get_value_external(napi_env env,
                                                                                                                                       napi_value value,
                                                                                                  -                                    void** result)
                                                                                                  -
                                                                                                  + void** result)
                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                  • [in] value: napi_value representing JavaScript external value.
                                                                                                  • @@ -12599,10 +12865,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                    napi_status napi_get_value_int32(napi_env env,
                                                                                                    +
                                                                                                    napi_status napi_get_value_int32(napi_env env,
                                                                                                                                      napi_value value,
                                                                                                    -                                 int32_t* result)
                                                                                                    -
                                                                                                    + int32_t* result)
                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                    • [in] value: napi_value representing JavaScript Number.
                                                                                                    • @@ -12615,7 +12880,7 @@ of the given JavaScript Number.

                                                                                                      If the number exceeds the range of the 32 bit integer, then the result is truncated to the equivalent of the bottom 32 bits. This can result in a large -positive number becoming a negative number if the value is > 2^31 -1.

                                                                                                      +positive number becoming a negative number if the value is > 231 - 1.

                                                                                                      Non-finite number values (NaN, +Infinity, or -Infinity) set the result to zero.

                                                                                                      napi_get_value_int64#

                                                                                                      @@ -12623,10 +12888,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                      napi_status napi_get_value_int64(napi_env env,
                                                                                                      +
                                                                                                      napi_status napi_get_value_int64(napi_env env,
                                                                                                                                        napi_value value,
                                                                                                      -                                 int64_t* result)
                                                                                                      -
                                                                                                      + int64_t* result)
                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                      • @@ -12638,7 +12902,8 @@

                                                                                                        This API returns the C int64 primitive equivalent of the given JavaScript Number.

                                                                                                        Number values outside the range of Number.MIN_SAFE_INTEGER --(2^53 - 1) - Number.MAX_SAFE_INTEGER (2^53 - 1) will lose precision.

                                                                                                        +-(2**53 - 1) - Number.MAX_SAFE_INTEGER (2**53 - 1) will lose +precision.

                                                                                                        Non-finite number values (NaN, +Infinity, or -Infinity) set the result to zero.

                                                                                                        napi_get_value_string_latin1#

                                                                                                        @@ -12646,12 +12911,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                        napi_status napi_get_value_string_latin1(napi_env env,
                                                                                                        +
                                                                                                        napi_status napi_get_value_string_latin1(napi_env env,
                                                                                                                                                  napi_value value,
                                                                                                        -                                         char* buf,
                                                                                                        -                                         size_t bufsize,
                                                                                                        -                                         size_t* result)
                                                                                                        -
                                                                                                        + char* buf, + size_t bufsize, + size_t* result)
                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                        • [in] value: napi_value representing JavaScript string.
                                                                                                        • @@ -12671,12 +12935,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                          napi_status napi_get_value_string_utf8(napi_env env,
                                                                                                          +
                                                                                                          napi_status napi_get_value_string_utf8(napi_env env,
                                                                                                                                                  napi_value value,
                                                                                                          -                                       char* buf,
                                                                                                          -                                       size_t bufsize,
                                                                                                          -                                       size_t* result)
                                                                                                          -
                                                                                                          + char* buf, + size_t bufsize, + size_t* result)
                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                          • [in] value: napi_value representing JavaScript string.
                                                                                                          • @@ -12695,12 +12958,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                            napi_status napi_get_value_string_utf16(napi_env env,
                                                                                                            +
                                                                                                            napi_status napi_get_value_string_utf16(napi_env env,
                                                                                                                                                     napi_value value,
                                                                                                            -                                        char16_t* buf,
                                                                                                            -                                        size_t bufsize,
                                                                                                            -                                        size_t* result)
                                                                                                            -
                                                                                                            + char16_t* buf, + size_t bufsize, + size_t* result)
                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                            • [in] value: napi_value representing JavaScript string.
                                                                                                            • @@ -12719,10 +12981,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                              napi_status napi_get_value_uint32(napi_env env,
                                                                                                              +
                                                                                                              napi_status napi_get_value_uint32(napi_env env,
                                                                                                                                                 napi_value value,
                                                                                                              -                                  uint32_t* result)
                                                                                                              -
                                                                                                              + uint32_t* result)
                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                              • [in] value: napi_value representing JavaScript Number.
                                                                                                              • @@ -12739,8 +13000,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)
                                                                                                                -
                                                                                                                +
                                                                                                                napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)
                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                • [in] value: The value of the boolean to retrieve.
                                                                                                                • @@ -12755,8 +13015,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                  napi_status napi_get_global(napi_env env, napi_value* result)
                                                                                                                  -
                                                                                                                  +
                                                                                                                  napi_status napi_get_global(napi_env env, napi_value* result)
                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                  • [out] result: napi_value representing JavaScript global object.
                                                                                                                  • @@ -12768,8 +13027,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                    napi_status napi_get_null(napi_env env, napi_value* result)
                                                                                                                    -
                                                                                                                    +
                                                                                                                    napi_status napi_get_null(napi_env env, napi_value* result)
                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                    • [out] result: napi_value representing JavaScript null object.
                                                                                                                    • @@ -12781,15 +13039,14 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                      napi_status napi_get_undefined(napi_env env, napi_value* result)
                                                                                                                      -
                                                                                                                      +
                                                                                                                      napi_status napi_get_undefined(napi_env env, napi_value* result)
                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                      • [out] result: napi_value representing JavaScript Undefined value.

                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                      This API returns the Undefined object.

                                                                                                                      -

                                                                                                                      Working with JavaScript Values and Abstract Operations#

                                                                                                                      +

                                                                                                                      Working with JavaScript values and abstract operations#

                                                                                                                      N-API exposes a set of APIs to perform some abstract operations on JavaScript values. Some of these operations are documented under Section 7 of the ECMAScript Language Specification.

                                                                                                                      @@ -12805,10 +13062,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                      napi_status napi_coerce_to_bool(napi_env env,
                                                                                                                      +
                                                                                                                      napi_status napi_coerce_to_bool(napi_env env,
                                                                                                                                                       napi_value value,
                                                                                                                      -                                napi_value* result)
                                                                                                                      -
                                                                                                                      + napi_value* result)
                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                      • @@ -12823,10 +13079,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                        napi_status napi_coerce_to_number(napi_env env,
                                                                                                                        +
                                                                                                                        napi_status napi_coerce_to_number(napi_env env,
                                                                                                                                                           napi_value value,
                                                                                                                        -                                  napi_value* result)
                                                                                                                        -
                                                                                                                        + napi_value* result)
                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                        • [in] value: The JavaScript value to coerce.
                                                                                                                        • @@ -12841,10 +13096,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                          napi_status napi_coerce_to_object(napi_env env,
                                                                                                                          +
                                                                                                                          napi_status napi_coerce_to_object(napi_env env,
                                                                                                                                                             napi_value value,
                                                                                                                          -                                  napi_value* result)
                                                                                                                          -
                                                                                                                          + napi_value* result)
                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                          • [in] value: The JavaScript value to coerce.
                                                                                                                          • @@ -12859,10 +13113,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                            napi_status napi_coerce_to_string(napi_env env,
                                                                                                                            +
                                                                                                                            napi_status napi_coerce_to_string(napi_env env,
                                                                                                                                                               napi_value value,
                                                                                                                            -                                  napi_value* result)
                                                                                                                            -
                                                                                                                            + napi_value* result)
                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                            • [in] value: The JavaScript value to coerce.
                                                                                                                            • @@ -12877,8 +13130,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                              napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result)
                                                                                                                              -
                                                                                                                              +
                                                                                                                              napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result)
                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                              • [in] value: The JavaScript value whose type to query.
                                                                                                                              • @@ -12891,18 +13143,22 @@

                                                                                                                              This API represents behavior similar to invoking the typeof Operator on the object as defined in Section 12.5.5 of the ECMAScript Language -Specification. However, it has support for detecting an External value. -If value has a type that is invalid, an error is returned.

                                                                                                                              +Specification. However, there are some differences:

                                                                                                                              +
                                                                                                                                +
                                                                                                                              1. It has support for detecting an External value.
                                                                                                                              2. +
                                                                                                                              3. It detects null as a separate type, while ECMAScript typeof would detect +object.
                                                                                                                              4. +
                                                                                                                              +

                                                                                                                              If value has a type that is invalid, an error is returned.

                                                                                                                              napi_instanceof#

                                                                                                                              -
                                                                                                                              napi_status napi_instanceof(napi_env env,
                                                                                                                              +
                                                                                                                              napi_status napi_instanceof(napi_env env,
                                                                                                                                                           napi_value object,
                                                                                                                                                           napi_value constructor,
                                                                                                                              -                            bool* result)
                                                                                                                              -
                                                                                                                              + bool* result)
                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                              • [in] object: The JavaScript value to check.
                                                                                                                              • @@ -12919,8 +13175,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                napi_status napi_is_array(napi_env env, napi_value value, bool* result)
                                                                                                                                -
                                                                                                                                +
                                                                                                                                napi_status napi_is_array(napi_env env, napi_value value, bool* result)
                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                • @@ -12934,8 +13189,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                  napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result)
                                                                                                                                  -
                                                                                                                                  +
                                                                                                                                  napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result)
                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                  • [in] value: The JavaScript value to check.
                                                                                                                                  • @@ -12948,8 +13202,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                    napi_status napi_is_buffer(napi_env env, napi_value value, bool* result)
                                                                                                                                    -
                                                                                                                                    +
                                                                                                                                    napi_status napi_is_buffer(napi_env env, napi_value value, bool* result)
                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                    • [in] value: The JavaScript value to check.
                                                                                                                                    • @@ -12963,8 +13216,7 @@ Added in: v11.11.0 N-API version: 5 -
                                                                                                                                      napi_status napi_is_date(napi_env env, napi_value value, bool* result)
                                                                                                                                      -
                                                                                                                                      +
                                                                                                                                      napi_status napi_is_date(napi_env env, napi_value value, bool* result)
                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                      • @@ -12978,8 +13230,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                        napi_status napi_is_error(napi_env env, napi_value value, bool* result)
                                                                                                                                        -
                                                                                                                                        +
                                                                                                                                        napi_status napi_is_error(napi_env env, napi_value value, bool* result)
                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                        • [in] value: The JavaScript value to check.
                                                                                                                                        • @@ -12992,8 +13243,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                          napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result)
                                                                                                                                          -
                                                                                                                                          +
                                                                                                                                          napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result)
                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                          • [in] value: The JavaScript value to check.
                                                                                                                                          • @@ -13006,8 +13256,7 @@ Added in: v8.3.0 N-API version: 1 -
                                                                                                                                            napi_status napi_is_dataview(napi_env env, napi_value value, bool* result)
                                                                                                                                            -
                                                                                                                                            +
                                                                                                                                            napi_status napi_is_dataview(napi_env env, napi_value value, bool* result)
                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                            • [in] value: The JavaScript value to check.
                                                                                                                                            • @@ -13020,11 +13269,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                              napi_status napi_strict_equals(napi_env env,
                                                                                                                                              +
                                                                                                                                              napi_status napi_strict_equals(napi_env env,
                                                                                                                                                                              napi_value lhs,
                                                                                                                                                                              napi_value rhs,
                                                                                                                                              -                               bool* result)
                                                                                                                                              -
                                                                                                                                              + bool* result)
                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                              • [in] lhs: The JavaScript value to check.
                                                                                                                                              • @@ -13037,11 +13285,10 @@

                                                                                                                                                napi_detach_arraybuffer#

                                                                                                                                                -

                                                                                                                                                Stability: 1 - Experimental

                                                                                                                                                -
                                                                                                                                                napi_status napi_detach_arraybuffer(napi_env env,
                                                                                                                                                -                                    napi_value arraybuffer)
                                                                                                                                                -
                                                                                                                                                +
                                                                                                                                                napi_status napi_detach_arraybuffer(napi_env env,
                                                                                                                                                +                                    napi_value arraybuffer)
                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                • [in] arraybuffer: The JavaScript ArrayBuffer to be detached.
                                                                                                                                                • @@ -13057,12 +13304,11 @@

                                                                                                                                                  napi_is_detached_arraybuffer#

                                                                                                                                                  -

                                                                                                                                                  Stability: 1 - Experimental

                                                                                                                                                  -
                                                                                                                                                  napi_status napi_is_detached_arraybuffer(napi_env env,
                                                                                                                                                  +
                                                                                                                                                  napi_status napi_is_detached_arraybuffer(napi_env env,
                                                                                                                                                                                            napi_value arraybuffer,
                                                                                                                                                  -                                         bool* result)
                                                                                                                                                  -
                                                                                                                                                  + bool* result)
                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                  • [in] arraybuffer: The JavaScript ArrayBuffer to be checked.
                                                                                                                                                  • @@ -13073,7 +13319,7 @@

                                                                                                                                                    This API represents the invocation of the ArrayBuffer IsDetachedBuffer operation as defined in Section 24.1.1.2 of the ECMAScript Language Specification.

                                                                                                                                                    -

                                                                                                                                                    Working with JavaScript Properties#

                                                                                                                                                    +

                                                                                                                                                    Working with JavaScript properties#

                                                                                                                                                    N-API exposes a set of APIs to get and set properties on JavaScript objects. Some of these types are documented under Section 7 of the ECMAScript Language Specification.

                                                                                                                                                    @@ -13094,110 +13340,118 @@ get and set properties on arbitrary JavaScript objects represented by napi_value.

                                                                                                                                                    For instance, consider the following JavaScript code snippet:

                                                                                                                                                    -
                                                                                                                                                    const obj = {};
                                                                                                                                                    -obj.myProp = 123;
                                                                                                                                                    -
                                                                                                                                                    +
                                                                                                                                                    const obj = {};
                                                                                                                                                    +obj.myProp = 123;

                                                                                                                                                    The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                    -
                                                                                                                                                    napi_status status = napi_generic_failure;
                                                                                                                                                    +
                                                                                                                                                    napi_status status = napi_generic_failure;
                                                                                                                                                     
                                                                                                                                                    -// const obj = {}
                                                                                                                                                    +// const obj = {}
                                                                                                                                                     napi_value obj, value;
                                                                                                                                                     status = napi_create_object(env, &obj);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    +if (status != napi_ok) return status;
                                                                                                                                                     
                                                                                                                                                    -// Create a napi_value for 123
                                                                                                                                                    -status = napi_create_int32(env, 123, &value);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    -
                                                                                                                                                    -// obj.myProp = 123
                                                                                                                                                    -status = napi_set_named_property(env, obj, "myProp", value);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    -
                                                                                                                                                    +// Create a napi_value for 123 +status = napi_create_int32(env, 123, &value); +if (status != napi_ok) return status; + +// obj.myProp = 123 +status = napi_set_named_property(env, obj, "myProp", value); +if (status != napi_ok) return status;

                                                                                                                                                    Indexed properties can be set in a similar manner. Consider the following JavaScript snippet:

                                                                                                                                                    -
                                                                                                                                                    const arr = [];
                                                                                                                                                    -arr[123] = 'hello';
                                                                                                                                                    -
                                                                                                                                                    +
                                                                                                                                                    const arr = [];
                                                                                                                                                    +arr[123] = 'hello';

                                                                                                                                                    The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                    -
                                                                                                                                                    napi_status status = napi_generic_failure;
                                                                                                                                                    +
                                                                                                                                                    napi_status status = napi_generic_failure;
                                                                                                                                                     
                                                                                                                                                    -// const arr = [];
                                                                                                                                                    +// const arr = [];
                                                                                                                                                     napi_value arr, value;
                                                                                                                                                     status = napi_create_array(env, &arr);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    +if (status != napi_ok) return status;
                                                                                                                                                     
                                                                                                                                                    -// Create a napi_value for 'hello'
                                                                                                                                                    -status = napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &value);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    -
                                                                                                                                                    -// arr[123] = 'hello';
                                                                                                                                                    -status = napi_set_element(env, arr, 123, value);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    -
                                                                                                                                                    +// Create a napi_value for 'hello' +status = napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &value); +if (status != napi_ok) return status; + +// arr[123] = 'hello'; +status = napi_set_element(env, arr, 123, value); +if (status != napi_ok) return status;

                                                                                                                                                    Properties can be retrieved using the APIs described in this section. Consider the following JavaScript snippet:

                                                                                                                                                    -
                                                                                                                                                    const arr = [];
                                                                                                                                                    -const value = arr[123];
                                                                                                                                                    -
                                                                                                                                                    +
                                                                                                                                                    const arr = [];
                                                                                                                                                    +const value = arr[123];

                                                                                                                                                    The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                    -
                                                                                                                                                    napi_status status = napi_generic_failure;
                                                                                                                                                    +
                                                                                                                                                    napi_status status = napi_generic_failure;
                                                                                                                                                     
                                                                                                                                                    -// const arr = []
                                                                                                                                                    +// const arr = []
                                                                                                                                                     napi_value arr, value;
                                                                                                                                                     status = napi_create_array(env, &arr);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    +if (status != napi_ok) return status;
                                                                                                                                                     
                                                                                                                                                    -// const value = arr[123]
                                                                                                                                                    -status = napi_get_element(env, arr, 123, &value);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    -
                                                                                                                                                    +// const value = arr[123] +status = napi_get_element(env, arr, 123, &value); +if (status != napi_ok) return status;

                                                                                                                                                    Finally, multiple properties can also be defined on an object for performance reasons. Consider the following JavaScript:

                                                                                                                                                    -
                                                                                                                                                    const obj = {};
                                                                                                                                                    -Object.defineProperties(obj, {
                                                                                                                                                    -  'foo': { value: 123, writable: true, configurable: true, enumerable: true },
                                                                                                                                                    -  'bar': { value: 456, writable: true, configurable: true, enumerable: true }
                                                                                                                                                    -});
                                                                                                                                                    -
                                                                                                                                                    +
                                                                                                                                                    const obj = {};
                                                                                                                                                    +Object.defineProperties(obj, {
                                                                                                                                                    +  'foo': { value: 123, writable: true, configurable: true, enumerable: true },
                                                                                                                                                    +  'bar': { value: 456, writable: true, configurable: true, enumerable: true }
                                                                                                                                                    +});

                                                                                                                                                    The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                    -
                                                                                                                                                    napi_status status = napi_status_generic_failure;
                                                                                                                                                    +
                                                                                                                                                    napi_status status = napi_status_generic_failure;
                                                                                                                                                     
                                                                                                                                                    -// const obj = {};
                                                                                                                                                    +// const obj = {};
                                                                                                                                                     napi_value obj;
                                                                                                                                                     status = napi_create_object(env, &obj);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    +if (status != napi_ok) return status;
                                                                                                                                                     
                                                                                                                                                    -// Create napi_values for 123 and 456
                                                                                                                                                    +// Create napi_values for 123 and 456
                                                                                                                                                     napi_value fooValue, barValue;
                                                                                                                                                    -status = napi_create_int32(env, 123, &fooValue);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    -status = napi_create_int32(env, 456, &barValue);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    +status = napi_create_int32(env, 123, &fooValue);
                                                                                                                                                    +if (status != napi_ok) return status;
                                                                                                                                                    +status = napi_create_int32(env, 456, &barValue);
                                                                                                                                                    +if (status != napi_ok) return status;
                                                                                                                                                     
                                                                                                                                                    -// Set the properties
                                                                                                                                                    +// Set the properties
                                                                                                                                                     napi_property_descriptor descriptors[] = {
                                                                                                                                                    -  { "foo", NULL, NULL, NULL, NULL, fooValue, napi_default, NULL },
                                                                                                                                                    -  { "bar", NULL, NULL, NULL, NULL, barValue, napi_default, NULL }
                                                                                                                                                    +  { "foo", NULL, NULL, NULL, NULL, fooValue, napi_writable | napi_configurable, NULL },
                                                                                                                                                    +  { "bar", NULL, NULL, NULL, NULL, barValue, napi_writable | napi_configurable, NULL }
                                                                                                                                                     }
                                                                                                                                                     status = napi_define_properties(env,
                                                                                                                                                                                     obj,
                                                                                                                                                    -                                sizeof(descriptors) / sizeof(descriptors[0]),
                                                                                                                                                    +                                sizeof(descriptors) / sizeof(descriptors[0]),
                                                                                                                                                                                     descriptors);
                                                                                                                                                    -if (status != napi_ok) return status;
                                                                                                                                                    -
                                                                                                                                                    +if (status != napi_ok) return status;

                                                                                                                                                    Structures#

                                                                                                                                                    napi_property_attributes#

                                                                                                                                                    -
                                                                                                                                                    typedef enum {
                                                                                                                                                    -  napi_default = 0,
                                                                                                                                                    -  napi_writable = 1 << 0,
                                                                                                                                                    -  napi_enumerable = 1 << 1,
                                                                                                                                                    -  napi_configurable = 1 << 2,
                                                                                                                                                    -
                                                                                                                                                    -  // Used with napi_define_class to distinguish static properties
                                                                                                                                                    -  // from instance properties. Ignored by napi_define_properties.
                                                                                                                                                    -  napi_static = 1 << 10,
                                                                                                                                                    -} napi_property_attributes;
                                                                                                                                                    -
                                                                                                                                                    + +
                                                                                                                                                    typedef enum {
                                                                                                                                                    +  napi_default = 0,
                                                                                                                                                    +  napi_writable = 1 << 0,
                                                                                                                                                    +  napi_enumerable = 1 << 1,
                                                                                                                                                    +  napi_configurable = 1 << 2,
                                                                                                                                                    +
                                                                                                                                                    +  // Used with napi_define_class to distinguish static properties
                                                                                                                                                    +  // from instance properties. Ignored by napi_define_properties.
                                                                                                                                                    +  napi_static = 1 << 10,
                                                                                                                                                    +
                                                                                                                                                    +  // Default for class methods.
                                                                                                                                                    +  napi_default_method = napi_writable | napi_configurable,
                                                                                                                                                    +
                                                                                                                                                    +  // Default for object properties, like in JS obj[prop].
                                                                                                                                                    +  napi_default_property = napi_writable |
                                                                                                                                                    +                          napi_enumerable |
                                                                                                                                                    +                          napi_configurable,
                                                                                                                                                    +} napi_property_attributes;

                                                                                                                                                    napi_property_attributes are flags used to control the behavior of properties set on a JavaScript object. Other than napi_static they correspond to the attributes listed in Section 6.1.7.1 @@ -13213,11 +13467,15 @@

                                                                                                                                                  • napi_static: The property will be defined as a static property on a class as opposed to an instance property, which is the default. This is used only by napi_define_class. It is ignored by napi_define_properties.
                                                                                                                                                  • +
                                                                                                                                                  • napi_default_method: The property is configureable, writeable but not +enumerable like a method in a JS class.
                                                                                                                                                  • +
                                                                                                                                                  • napi_default_property: The property is writable, enumerable and configurable +like a property set via JS code obj.key = value.

                                                                                                                                                  napi_property_descriptor#

                                                                                                                                                  -
                                                                                                                                                  typedef struct {
                                                                                                                                                  -  // One of utf8name or name should be NULL.
                                                                                                                                                  -  const char* utf8name;
                                                                                                                                                  +
                                                                                                                                                  typedef struct {
                                                                                                                                                  +  // One of utf8name or name should be NULL.
                                                                                                                                                  +  const char* utf8name;
                                                                                                                                                     napi_value name;
                                                                                                                                                   
                                                                                                                                                     napi_callback method;
                                                                                                                                                  @@ -13226,9 +13484,8 @@
                                                                                                                                                     napi_value value;
                                                                                                                                                   
                                                                                                                                                     napi_property_attributes attributes;
                                                                                                                                                  -  void* data;
                                                                                                                                                  -} napi_property_descriptor;
                                                                                                                                                  -
                                                                                                                                                  + void* data; +} napi_property_descriptor;
                                                                                                                                                  • utf8name: Optional String describing the key for the property, encoded as UTF8. One of utf8name or name must be provided for the @@ -13243,16 +13500,16 @@ If this is passed in, set value and method to NULL (since these members won't be used). The given function is called implicitly by the runtime when the property is accessed from JavaScript code (or if a get on the property is -performed using a N-API call).
                                                                                                                                                  • +performed using a N-API call). napi_callback provides more details.
                                                                                                                                                  • setter: A function to call when a set access of the property is performed. If this is passed in, set value and method to NULL (since these members won't be used). The given function is called implicitly by the runtime when the property is set from JavaScript code (or if a set on the property is -performed using a N-API call).
                                                                                                                                                  • +performed using a N-API call). napi_callback provides more details.
                                                                                                                                                  • method: Set this to make the property descriptor object's value property to be a JavaScript function represented by method. If this is passed in, set value, getter and setter to NULL (since these members -won't be used).
                                                                                                                                                  • +won't be used). napi_callback provides more details.
                                                                                                                                                  • attributes: The attributes associated with the particular property. See napi_property_attributes.
                                                                                                                                                  • data: The callback data passed into method, getter and setter if this @@ -13264,10 +13521,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                    napi_status napi_get_property_names(napi_env env,
                                                                                                                                                    +
                                                                                                                                                    napi_status napi_get_property_names(napi_env env,
                                                                                                                                                                                         napi_value object,
                                                                                                                                                    -                                    napi_value* result);
                                                                                                                                                    -
                                                                                                                                                    + napi_value* result);
                                                                                                                                                    • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                    • [in] object: The object from which to retrieve the properties.
                                                                                                                                                    • @@ -13285,13 +13541,12 @@ Added in: v12.17.0 N-API version: 6 -
                                                                                                                                                      napi_get_all_property_names(napi_env env,
                                                                                                                                                      +
                                                                                                                                                      napi_get_all_property_names(napi_env env,
                                                                                                                                                                                   napi_value object,
                                                                                                                                                                                   napi_key_collection_mode key_mode,
                                                                                                                                                                                   napi_key_filter key_filter,
                                                                                                                                                                                   napi_key_conversion key_conversion,
                                                                                                                                                      -                            napi_value* result);
                                                                                                                                                      -
                                                                                                                                                      + napi_value* result);
                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                      • [in] object: The object from which to retrieve the properties.
                                                                                                                                                      • @@ -13311,11 +13566,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                        napi_status napi_set_property(napi_env env,
                                                                                                                                                        +
                                                                                                                                                        napi_status napi_set_property(napi_env env,
                                                                                                                                                                                       napi_value object,
                                                                                                                                                                                       napi_value key,
                                                                                                                                                        -                              napi_value value);
                                                                                                                                                        -
                                                                                                                                                        + napi_value value);
                                                                                                                                                        • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                        • [in] object: The object on which to set the property.
                                                                                                                                                        • @@ -13329,11 +13583,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                          napi_status napi_get_property(napi_env env,
                                                                                                                                                          +
                                                                                                                                                          napi_status napi_get_property(napi_env env,
                                                                                                                                                                                         napi_value object,
                                                                                                                                                                                         napi_value key,
                                                                                                                                                          -                              napi_value* result);
                                                                                                                                                          -
                                                                                                                                                          + napi_value* result);
                                                                                                                                                          • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                          • [in] object: The object from which to retrieve the property.
                                                                                                                                                          • @@ -13347,11 +13600,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                            napi_status napi_has_property(napi_env env,
                                                                                                                                                            +
                                                                                                                                                            napi_status napi_has_property(napi_env env,
                                                                                                                                                                                           napi_value object,
                                                                                                                                                                                           napi_value key,
                                                                                                                                                            -                              bool* result);
                                                                                                                                                            -
                                                                                                                                                            + bool* result);
                                                                                                                                                            • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                            • [in] object: The object to query.
                                                                                                                                                            • @@ -13365,11 +13617,10 @@ Added in: v8.2.0 N-API version: 1 -
                                                                                                                                                              napi_status napi_delete_property(napi_env env,
                                                                                                                                                              +
                                                                                                                                                              napi_status napi_delete_property(napi_env env,
                                                                                                                                                                                                napi_value object,
                                                                                                                                                                                                napi_value key,
                                                                                                                                                              -                                 bool* result);
                                                                                                                                                              -
                                                                                                                                                              + bool* result);
                                                                                                                                                              • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                              • [in] object: The object to query.
                                                                                                                                                              • @@ -13384,11 +13635,10 @@ Added in: v8.2.0 N-API version: 1 -
                                                                                                                                                                napi_status napi_has_own_property(napi_env env,
                                                                                                                                                                +
                                                                                                                                                                napi_status napi_has_own_property(napi_env env,
                                                                                                                                                                                                   napi_value object,
                                                                                                                                                                                                   napi_value key,
                                                                                                                                                                -                                  bool* result);
                                                                                                                                                                -
                                                                                                                                                                + bool* result);
                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                • @@ -13404,11 +13654,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                  napi_status napi_set_named_property(napi_env env,
                                                                                                                                                                  +
                                                                                                                                                                  napi_status napi_set_named_property(napi_env env,
                                                                                                                                                                                                       napi_value object,
                                                                                                                                                                  -                                    const char* utf8Name,
                                                                                                                                                                  -                                    napi_value value);
                                                                                                                                                                  -
                                                                                                                                                                  + const char* utf8Name, + napi_value value);
                                                                                                                                                                  • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                  • [in] object: The object on which to set the property.
                                                                                                                                                                  • @@ -13423,11 +13672,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                    napi_status napi_get_named_property(napi_env env,
                                                                                                                                                                    +
                                                                                                                                                                    napi_status napi_get_named_property(napi_env env,
                                                                                                                                                                                                         napi_value object,
                                                                                                                                                                    -                                    const char* utf8Name,
                                                                                                                                                                    -                                    napi_value* result);
                                                                                                                                                                    -
                                                                                                                                                                    + const char* utf8Name, + napi_value* result);
                                                                                                                                                                    • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                    • [in] object: The object from which to retrieve the property.
                                                                                                                                                                    • @@ -13442,11 +13690,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                      napi_status napi_has_named_property(napi_env env,
                                                                                                                                                                      +
                                                                                                                                                                      napi_status napi_has_named_property(napi_env env,
                                                                                                                                                                                                           napi_value object,
                                                                                                                                                                      -                                    const char* utf8Name,
                                                                                                                                                                      -                                    bool* result);
                                                                                                                                                                      -
                                                                                                                                                                      + const char* utf8Name, + bool* result);
                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                      • @@ -13461,11 +13708,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                        napi_status napi_set_element(napi_env env,
                                                                                                                                                                        +
                                                                                                                                                                        napi_status napi_set_element(napi_env env,
                                                                                                                                                                                                      napi_value object,
                                                                                                                                                                        -                             uint32_t index,
                                                                                                                                                                        -                             napi_value value);
                                                                                                                                                                        -
                                                                                                                                                                        + uint32_t index, + napi_value value);
                                                                                                                                                                        • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                        • [in] object: The object from which to set the properties.
                                                                                                                                                                        • @@ -13479,11 +13725,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                          napi_status napi_get_element(napi_env env,
                                                                                                                                                                          +
                                                                                                                                                                          napi_status napi_get_element(napi_env env,
                                                                                                                                                                                                        napi_value object,
                                                                                                                                                                          -                             uint32_t index,
                                                                                                                                                                          -                             napi_value* result);
                                                                                                                                                                          -
                                                                                                                                                                          + uint32_t index, + napi_value* result);
                                                                                                                                                                          • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                          • [in] object: The object from which to retrieve the property.
                                                                                                                                                                          • @@ -13497,11 +13742,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                            napi_status napi_has_element(napi_env env,
                                                                                                                                                                            +
                                                                                                                                                                            napi_status napi_has_element(napi_env env,
                                                                                                                                                                                                          napi_value object,
                                                                                                                                                                            -                             uint32_t index,
                                                                                                                                                                            -                             bool* result);
                                                                                                                                                                            -
                                                                                                                                                                            + uint32_t index, + bool* result);
                                                                                                                                                                            • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                            • [in] object: The object to query.
                                                                                                                                                                            • @@ -13516,11 +13760,10 @@ Added in: v8.2.0 N-API version: 1 -
                                                                                                                                                                              napi_status napi_delete_element(napi_env env,
                                                                                                                                                                              +
                                                                                                                                                                              napi_status napi_delete_element(napi_env env,
                                                                                                                                                                                                               napi_value object,
                                                                                                                                                                              -                                uint32_t index,
                                                                                                                                                                              -                                bool* result);
                                                                                                                                                                              -
                                                                                                                                                                              + uint32_t index, + bool* result);
                                                                                                                                                                              • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                              • [in] object: The object to query.
                                                                                                                                                                              • @@ -13535,11 +13778,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                napi_status napi_define_properties(napi_env env,
                                                                                                                                                                                +
                                                                                                                                                                                napi_status napi_define_properties(napi_env env,
                                                                                                                                                                                                                    napi_value object,
                                                                                                                                                                                -                                   size_t property_count,
                                                                                                                                                                                -                                   const napi_property_descriptor* properties);
                                                                                                                                                                                -
                                                                                                                                                                                + size_t property_count, + const napi_property_descriptor* properties);
                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                • @@ -13553,7 +13795,42 @@ this API will set the properties on the object one at a time, as defined by DefineOwnProperty() (described in Section 9.1.6 of the ECMA-262 specification).

                                                                                                                                                                                  -

                                                                                                                                                                                  Working with JavaScript Functions#

                                                                                                                                                                                  +

                                                                                                                                                                                  napi_object_freeze#

                                                                                                                                                                                  + +
                                                                                                                                                                                  napi_status napi_object_freeze(napi_env env,
                                                                                                                                                                                  +                               napi_value object);
                                                                                                                                                                                  +
                                                                                                                                                                                    +
                                                                                                                                                                                  • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                  • +
                                                                                                                                                                                  • [in] object: The object to freeze.
                                                                                                                                                                                  • +
                                                                                                                                                                                  +

                                                                                                                                                                                  Returns napi_ok if the API succeeded.

                                                                                                                                                                                  +

                                                                                                                                                                                  This method freezes a given object. This prevents new properties from +being added to it, existing properties from being removed, prevents +changing the enumerability, configurability, or writability of existing +properties, and prevents the values of existing properties from being changed. +It also prevents the object's prototype from being changed. This is described +in Section 19.1.2.6 of the +ECMA-262 specification.

                                                                                                                                                                                  +

                                                                                                                                                                                  napi_object_seal#

                                                                                                                                                                                  + +
                                                                                                                                                                                  napi_status napi_object_seal(napi_env env,
                                                                                                                                                                                  +                             napi_value object);
                                                                                                                                                                                  +
                                                                                                                                                                                    +
                                                                                                                                                                                  • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                  • +
                                                                                                                                                                                  • [in] object: The object to seal.
                                                                                                                                                                                  • +
                                                                                                                                                                                  +

                                                                                                                                                                                  Returns napi_ok if the API succeeded.

                                                                                                                                                                                  +

                                                                                                                                                                                  This method seals a given object. This prevents new properties from being +added to it, as well as marking all existing properties as non-configurable. +This is described in Section 19.1.2.20 +of the ECMA-262 specification.

                                                                                                                                                                                  +

                                                                                                                                                                                  Working with JavaScript functions#

                                                                                                                                                                                  N-API provides a set of APIs that allow JavaScript code to call back into native code. N-API APIs that support calling back into native code take in a callback functions represented by @@ -13579,13 +13856,12 @@ Added in: v8.0.0 N-API version: 1 -

                                                                                                                                                                                  NAPI_EXTERN napi_status napi_call_function(napi_env env,
                                                                                                                                                                                  +
                                                                                                                                                                                  NAPI_EXTERN napi_status napi_call_function(napi_env env,
                                                                                                                                                                                                                              napi_value recv,
                                                                                                                                                                                                                              napi_value func,
                                                                                                                                                                                  -                                           size_t argc,
                                                                                                                                                                                  -                                           const napi_value* argv,
                                                                                                                                                                                  -                                           napi_value* result);
                                                                                                                                                                                  -
                                                                                                                                                                                  + size_t argc, + const napi_value* argv, + napi_value* result);
                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                  • [in] recv: The this object passed to the called function.
                                                                                                                                                                                  • @@ -13602,49 +13878,46 @@ after an async operation, see napi_make_callback.

                                                                                                                                                                                    A sample use case might look as follows. Consider the following JavaScript snippet:

                                                                                                                                                                                    -
                                                                                                                                                                                    function AddTwo(num) {
                                                                                                                                                                                    -  return num + 2;
                                                                                                                                                                                    -}
                                                                                                                                                                                    -
                                                                                                                                                                                    +
                                                                                                                                                                                    function AddTwo(num) {
                                                                                                                                                                                    +  return num + 2;
                                                                                                                                                                                    +}

                                                                                                                                                                                    Then, the above function can be invoked from a native add-on using the following code:

                                                                                                                                                                                    -
                                                                                                                                                                                    // Get the function named "AddTwo" on the global object
                                                                                                                                                                                    +
                                                                                                                                                                                    // Get the function named "AddTwo" on the global object
                                                                                                                                                                                     napi_value global, add_two, arg;
                                                                                                                                                                                     napi_status status = napi_get_global(env, &global);
                                                                                                                                                                                    -if (status != napi_ok) return;
                                                                                                                                                                                    +if (status != napi_ok) return;
                                                                                                                                                                                     
                                                                                                                                                                                    -status = napi_get_named_property(env, global, "AddTwo", &add_two);
                                                                                                                                                                                    -if (status != napi_ok) return;
                                                                                                                                                                                    +status = napi_get_named_property(env, global, "AddTwo", &add_two);
                                                                                                                                                                                    +if (status != napi_ok) return;
                                                                                                                                                                                     
                                                                                                                                                                                    -// const arg = 1337
                                                                                                                                                                                    -status = napi_create_int32(env, 1337, &arg);
                                                                                                                                                                                    -if (status != napi_ok) return;
                                                                                                                                                                                    +// const arg = 1337
                                                                                                                                                                                    +status = napi_create_int32(env, 1337, &arg);
                                                                                                                                                                                    +if (status != napi_ok) return;
                                                                                                                                                                                     
                                                                                                                                                                                     napi_value* argv = &arg;
                                                                                                                                                                                    -size_t argc = 1;
                                                                                                                                                                                    +size_t argc = 1;
                                                                                                                                                                                     
                                                                                                                                                                                    -// AddTwo(arg);
                                                                                                                                                                                    +// AddTwo(arg);
                                                                                                                                                                                     napi_value return_val;
                                                                                                                                                                                     status = napi_call_function(env, global, add_two, argc, argv, &return_val);
                                                                                                                                                                                    -if (status != napi_ok) return;
                                                                                                                                                                                    +if (status != napi_ok) return;
                                                                                                                                                                                     
                                                                                                                                                                                    -// Convert the result back to a native type
                                                                                                                                                                                    -int32_t result;
                                                                                                                                                                                    +// Convert the result back to a native type
                                                                                                                                                                                    +int32_t result;
                                                                                                                                                                                     status = napi_get_value_int32(env, return_val, &result);
                                                                                                                                                                                    -if (status != napi_ok) return;
                                                                                                                                                                                    -
                                                                                                                                                                                    +if (status != napi_ok) return;

                                                                                                                                                                                    napi_create_function#

                                                                                                                                                                                    -
                                                                                                                                                                                    napi_status napi_create_function(napi_env env,
                                                                                                                                                                                    -                                 const char* utf8name,
                                                                                                                                                                                    -                                 size_t length,
                                                                                                                                                                                    +
                                                                                                                                                                                    napi_status napi_create_function(napi_env env,
                                                                                                                                                                                    +                                 const char* utf8name,
                                                                                                                                                                                    +                                 size_t length,
                                                                                                                                                                                                                      napi_callback cb,
                                                                                                                                                                                    -                                 void* data,
                                                                                                                                                                                    -                                 napi_value* result);
                                                                                                                                                                                    -
                                                                                                                                                                                    + void* data, + napi_value* result);
                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                    • [in] utf8Name: The name of the function encoded as UTF8. This is visible @@ -13652,7 +13925,7 @@
                                                                                                                                                                                    • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                    • [in] cb: The native function which should be called when this function -object is invoked.
                                                                                                                                                                                    • +object is invoked. napi_callback provides more details.
                                                                                                                                                                                    • [in] data: User-provided data context. This will be passed back into the function when invoked later.
                                                                                                                                                                                    • [out] result: napi_value representing the JavaScript function object for @@ -13668,30 +13941,28 @@

                                                                                                                                                                                      In order to expose a function as part of the add-on's module exports, set the newly created function on the exports object. A sample module might look as follows:

                                                                                                                                                                                      -
                                                                                                                                                                                      napi_value SayHello(napi_env env, napi_callback_info info) {
                                                                                                                                                                                      -  printf("Hello\n");
                                                                                                                                                                                      -  return NULL;
                                                                                                                                                                                      +
                                                                                                                                                                                      napi_value SayHello(napi_env env, napi_callback_info info) {
                                                                                                                                                                                      +  printf("Hello\n");
                                                                                                                                                                                      +  return NULL;
                                                                                                                                                                                       }
                                                                                                                                                                                       
                                                                                                                                                                                      -napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                      +napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                         napi_status status;
                                                                                                                                                                                       
                                                                                                                                                                                         napi_value fn;
                                                                                                                                                                                      -  status = napi_create_function(env, NULL, 0, SayHello, NULL, &fn);
                                                                                                                                                                                      -  if (status != napi_ok) return NULL;
                                                                                                                                                                                      +  status = napi_create_function(env, NULL, 0, SayHello, NULL, &fn);
                                                                                                                                                                                      +  if (status != napi_ok) return NULL;
                                                                                                                                                                                       
                                                                                                                                                                                      -  status = napi_set_named_property(env, exports, "sayHello", fn);
                                                                                                                                                                                      -  if (status != napi_ok) return NULL;
                                                                                                                                                                                      +  status = napi_set_named_property(env, exports, "sayHello", fn);
                                                                                                                                                                                      +  if (status != napi_ok) return NULL;
                                                                                                                                                                                       
                                                                                                                                                                                      -  return exports;
                                                                                                                                                                                      +  return exports;
                                                                                                                                                                                       }
                                                                                                                                                                                       
                                                                                                                                                                                      -NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
                                                                                                                                                                                      -
                                                                                                                                                                                      +NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

                                                                                                                                                                                      Given the above code, the add-on can be used from JavaScript as follows:

                                                                                                                                                                                      -
                                                                                                                                                                                      const myaddon = require('./addon');
                                                                                                                                                                                      -myaddon.sayHello();
                                                                                                                                                                                      -
                                                                                                                                                                                      +
                                                                                                                                                                                      const myaddon = require('./addon');
                                                                                                                                                                                      +myaddon.sayHello();

                                                                                                                                                                                      The string passed to require() is the name of the target in binding.gyp responsible for creating the .node file.

                                                                                                                                                                                      Any non-NULL data which is passed to this API via the data parameter can @@ -13705,13 +13976,12 @@ Added in: v8.0.0 N-API version: 1 -

                                                                                                                                                                                      napi_status napi_get_cb_info(napi_env env,
                                                                                                                                                                                      +
                                                                                                                                                                                      napi_status napi_get_cb_info(napi_env env,
                                                                                                                                                                                                                    napi_callback_info cbinfo,
                                                                                                                                                                                      -                             size_t* argc,
                                                                                                                                                                                      +                             size_t* argc,
                                                                                                                                                                                                                    napi_value* argv,
                                                                                                                                                                                                                    napi_value* thisArg,
                                                                                                                                                                                      -                             void** data)
                                                                                                                                                                                      -
                                                                                                                                                                                      + void** data)
                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                      • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                      • @@ -13733,10 +14003,9 @@ Added in: v8.6.0 N-API version: 1 -
                                                                                                                                                                                        napi_status napi_get_new_target(napi_env env,
                                                                                                                                                                                        +
                                                                                                                                                                                        napi_status napi_get_new_target(napi_env env,
                                                                                                                                                                                                                         napi_callback_info cbinfo,
                                                                                                                                                                                        -                                napi_value* result)
                                                                                                                                                                                        -
                                                                                                                                                                                        + napi_value* result)
                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                        • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                        • @@ -13750,12 +14019,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                          napi_status napi_new_instance(napi_env env,
                                                                                                                                                                                          +
                                                                                                                                                                                          napi_status napi_new_instance(napi_env env,
                                                                                                                                                                                                                         napi_value cons,
                                                                                                                                                                                          -                              size_t argc,
                                                                                                                                                                                          +                              size_t argc,
                                                                                                                                                                                                                         napi_value* argv,
                                                                                                                                                                                          -                              napi_value* result)
                                                                                                                                                                                          -
                                                                                                                                                                                          + napi_value* result)
                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                          • [in] cons: napi_value representing the JavaScript function to be invoked @@ -13769,34 +14037,32 @@

                                                                                                                                                                                            This method is used to instantiate a new JavaScript value using a given napi_value that represents the constructor for the object. For example, consider the following snippet:

                                                                                                                                                                                            -
                                                                                                                                                                                            function MyObject(param) {
                                                                                                                                                                                            -  this.param = param;
                                                                                                                                                                                            +
                                                                                                                                                                                            function MyObject(param) {
                                                                                                                                                                                            +  this.param = param;
                                                                                                                                                                                             }
                                                                                                                                                                                             
                                                                                                                                                                                            -const arg = 'hello';
                                                                                                                                                                                            -const value = new MyObject(arg);
                                                                                                                                                                                            -
                                                                                                                                                                                            +const arg = 'hello'; +const value = new MyObject(arg);

                                                                                                                                                                                            The following can be approximated in N-API using the following snippet:

                                                                                                                                                                                            -
                                                                                                                                                                                            // Get the constructor function MyObject
                                                                                                                                                                                            +
                                                                                                                                                                                            // Get the constructor function MyObject
                                                                                                                                                                                             napi_value global, constructor, arg, value;
                                                                                                                                                                                             napi_status status = napi_get_global(env, &global);
                                                                                                                                                                                            -if (status != napi_ok) return;
                                                                                                                                                                                            +if (status != napi_ok) return;
                                                                                                                                                                                             
                                                                                                                                                                                            -status = napi_get_named_property(env, global, "MyObject", &constructor);
                                                                                                                                                                                            -if (status != napi_ok) return;
                                                                                                                                                                                            +status = napi_get_named_property(env, global, "MyObject", &constructor);
                                                                                                                                                                                            +if (status != napi_ok) return;
                                                                                                                                                                                             
                                                                                                                                                                                            -// const arg = "hello"
                                                                                                                                                                                            -status = napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &arg);
                                                                                                                                                                                            -if (status != napi_ok) return;
                                                                                                                                                                                            +// const arg = "hello"
                                                                                                                                                                                            +status = napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &arg);
                                                                                                                                                                                            +if (status != napi_ok) return;
                                                                                                                                                                                             
                                                                                                                                                                                             napi_value* argv = &arg;
                                                                                                                                                                                            -size_t argc = 1;
                                                                                                                                                                                            +size_t argc = 1;
                                                                                                                                                                                             
                                                                                                                                                                                            -// const value = new MyObject(arg)
                                                                                                                                                                                            -status = napi_new_instance(env, constructor, argc, argv, &value);
                                                                                                                                                                                            -
                                                                                                                                                                                            +// const value = new MyObject(arg) +status = napi_new_instance(env, constructor, argc, argv, &value);

                                                                                                                                                                                            Returns napi_ok if the API succeeded.

                                                                                                                                                                                            -

                                                                                                                                                                                            Object Wrap#

                                                                                                                                                                                            +

                                                                                                                                                                                            Object wrap#

                                                                                                                                                                                            N-API offers a way to "wrap" C++ classes and instances so that the class constructor and methods can be called from JavaScript.

                                                                                                                                                                                              @@ -13815,33 +14081,155 @@ called on a class prototype and a function called on an instance of a class. A common pattern used to address this problem is to save a persistent reference to the class constructor for later instanceof checks.

                                                                                                                                                                                              -
                                                                                                                                                                                              napi_value MyClass_constructor = NULL;
                                                                                                                                                                                              +
                                                                                                                                                                                              napi_value MyClass_constructor = NULL;
                                                                                                                                                                                               status = napi_get_reference_value(env, MyClass::es_constructor, &MyClass_constructor);
                                                                                                                                                                                               assert(napi_ok == status);
                                                                                                                                                                                              -bool is_instance = false;
                                                                                                                                                                                              +bool is_instance = false;
                                                                                                                                                                                               status = napi_instanceof(env, es_this, MyClass_constructor, &is_instance);
                                                                                                                                                                                               assert(napi_ok == status);
                                                                                                                                                                                              -if (is_instance) {
                                                                                                                                                                                              -  // napi_unwrap() ...
                                                                                                                                                                                              -} else {
                                                                                                                                                                                              -  // otherwise...
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              +if (is_instance) { + // napi_unwrap() ... +} else { + // otherwise... +}

                                                                                                                                                                                              The reference must be freed once it is no longer needed.

                                                                                                                                                                                              -

                                                                                                                                                                                              napi_define_class#

                                                                                                                                                                                              - -
                                                                                                                                                                                              napi_status napi_define_class(napi_env env,
                                                                                                                                                                                              -                              const char* utf8name,
                                                                                                                                                                                              -                              size_t length,
                                                                                                                                                                                              -                              napi_callback constructor,
                                                                                                                                                                                              -                              void* data,
                                                                                                                                                                                              -                              size_t property_count,
                                                                                                                                                                                              -                              const napi_property_descriptor* properties,
                                                                                                                                                                                              -                              napi_value* result);
                                                                                                                                                                                              -
                                                                                                                                                                                              +

                                                                                                                                                                                              There are occasions where napi_instanceof() is insufficient for ensuring that +a JavaScript object is a wrapper for a certain native type. This is the case +especially when wrapped JavaScript objects are passed back into the addon via +static methods rather than as the this value of prototype methods. In such +cases there is a chance that they may be unwrapped incorrectly.

                                                                                                                                                                                              +
                                                                                                                                                                                              const myAddon = require('./build/Release/my_addon.node');
                                                                                                                                                                                              +
                                                                                                                                                                                              +// `openDatabase()` returns a JavaScript object that wraps a native database
                                                                                                                                                                                              +// handle.
                                                                                                                                                                                              +const dbHandle = myAddon.openDatabase();
                                                                                                                                                                                              +
                                                                                                                                                                                              +// `query()` returns a JavaScript object that wraps a native query handle.
                                                                                                                                                                                              +const queryHandle = myAddon.query(dbHandle, 'Gimme ALL the things!');
                                                                                                                                                                                              +
                                                                                                                                                                                              +// There is an accidental error in the line below. The first parameter to
                                                                                                                                                                                              +// `myAddon.queryHasRecords()` should be the database handle (`dbHandle`), not
                                                                                                                                                                                              +// the query handle (`query`), so the correct condition for the while-loop
                                                                                                                                                                                              +// should be
                                                                                                                                                                                              +//
                                                                                                                                                                                              +// myAddon.queryHasRecords(dbHandle, queryHandle)
                                                                                                                                                                                              +//
                                                                                                                                                                                              +while (myAddon.queryHasRecords(queryHandle, dbHandle)) {
                                                                                                                                                                                              +  // retrieve records
                                                                                                                                                                                              +}
                                                                                                                                                                                              +

                                                                                                                                                                                              In the above example myAddon.queryHasRecords() is a method that accepts two +arguments. The first is a database handle and the second is a query handle. +Internally, it unwraps the first argument and casts the resulting pointer to a +native database handle. It then unwraps the second argument and casts the +resulting pointer to a query handle. If the arguments are passed in the wrong +order, the casts will work, however, there is a good chance that the underlying +database operation will fail, or will even cause an invalid memory access.

                                                                                                                                                                                              +

                                                                                                                                                                                              To ensure that the pointer retrieved from the first argument is indeed a pointer +to a database handle and, similarly, that the pointer retrieved from the second +argument is indeed a pointer to a query handle, the implementation of +queryHasRecords() has to perform a type validation. Retaining the JavaScript +class constructor from which the database handle was instantiated and the +constructor from which the query handle was instantiated in napi_refs can +help, because napi_instanceof() can then be used to ensure that the instances +passed into queryHashRecords() are indeed of the correct type.

                                                                                                                                                                                              +

                                                                                                                                                                                              Unfortunately, napi_instanceof() does not protect against prototype +manipulation. For example, the prototype of the database handle instance can be +set to the prototype of the constructor for query handle instances. In this +case, the database handle instance can appear as a query handle instance, and it +will pass the napi_instanceof() test for a query handle instance, while still +containing a pointer to a database handle.

                                                                                                                                                                                              +

                                                                                                                                                                                              To this end, N-API provides type-tagging capabilities.

                                                                                                                                                                                              +

                                                                                                                                                                                              A type tag is a 128-bit integer unique to the addon. N-API provides the +napi_type_tag structure for storing a type tag. When such a value is passed +along with a JavaScript object stored in a napi_value to +napi_type_tag_object(), the JavaScript object will be "marked" with the +type tag. The "mark" is invisible on the JavaScript side. When a JavaScript +object arrives into a native binding, napi_check_object_type_tag() can be used +along with the original type tag to determine whether the JavaScript object was +previously "marked" with the type tag. This creates a type-checking capability +of a higher fidelity than napi_instanceof() can provide, because such type- +tagging survives prototype manipulation and addon unloading/reloading.

                                                                                                                                                                                              +

                                                                                                                                                                                              Continuing the above example, the following skeleton addon implementation +illustrates the use of napi_type_tag_object() and +napi_check_object_type_tag().

                                                                                                                                                                                              +
                                                                                                                                                                                              // This value is the type tag for a database handle. The command
                                                                                                                                                                                              +//
                                                                                                                                                                                              +//   uuidgen | sed -r -e 's/-//g' -e 's/(.{16})(.*)/0x\1, 0x\2/'
                                                                                                                                                                                              +//
                                                                                                                                                                                              +// can be used to obtain the two values with which to initialize the structure.
                                                                                                                                                                                              +static const napi_type_tag DatabaseHandleTypeTag = {
                                                                                                                                                                                              +  0x1edf75a38336451d, 0xa5ed9ce2e4c00c38
                                                                                                                                                                                              +};
                                                                                                                                                                                              +
                                                                                                                                                                                              +// This value is the type tag for a query handle.
                                                                                                                                                                                              +static const napi_type_tag QueryHandleTypeTag = {
                                                                                                                                                                                              +  0x9c73317f9fad44a3, 0x93c3920bf3b0ad6a
                                                                                                                                                                                              +};
                                                                                                                                                                                              +
                                                                                                                                                                                              +static napi_value
                                                                                                                                                                                              +openDatabase(napi_env env, napi_callback_info info) {
                                                                                                                                                                                              +  napi_status status;
                                                                                                                                                                                              +  napi_value result;
                                                                                                                                                                                              +
                                                                                                                                                                                              +  // Perform the underlying action which results in a database handle.
                                                                                                                                                                                              +  DatabaseHandle* dbHandle = open_database();
                                                                                                                                                                                              +
                                                                                                                                                                                              +  // Create a new, empty JS object.
                                                                                                                                                                                              +  status = napi_create_object(env, &result);
                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                              +
                                                                                                                                                                                              +  // Tag the object to indicate that it holds a pointer to a `DatabaseHandle`.
                                                                                                                                                                                              +  status = napi_type_tag_object(env, result, &DatabaseHandleTypeTag);
                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                              +
                                                                                                                                                                                              +  // Store the pointer to the `DatabaseHandle` structure inside the JS object.
                                                                                                                                                                                              +  status = napi_wrap(env, result, dbHandle, NULL, NULL, NULL);
                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                              +
                                                                                                                                                                                              +  return result;
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +// Later when we receive a JavaScript object purporting to be a database handle
                                                                                                                                                                                              +// we can use `napi_check_object_type_tag()` to ensure that it is indeed such a
                                                                                                                                                                                              +// handle.
                                                                                                                                                                                              +
                                                                                                                                                                                              +static napi_value
                                                                                                                                                                                              +query(napi_env env, napi_callback_info info) {
                                                                                                                                                                                              +  napi_status status;
                                                                                                                                                                                              +  size_t argc = 2;
                                                                                                                                                                                              +  napi_value argv[2];
                                                                                                                                                                                              +  bool is_db_handle;
                                                                                                                                                                                              +
                                                                                                                                                                                              +  status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL);
                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                              +
                                                                                                                                                                                              +  // Check that the object passed as the first parameter has the previously
                                                                                                                                                                                              +  // applied tag.
                                                                                                                                                                                              +  status = napi_check_object_type_tag(env,
                                                                                                                                                                                              +                                      argv[0],
                                                                                                                                                                                              +                                      &DatabaseHandleTypeTag,
                                                                                                                                                                                              +                                      &is_db_handle);
                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                              +
                                                                                                                                                                                              +  // Throw a `TypeError` if it doesn't.
                                                                                                                                                                                              +  if (!is_db_handle) {
                                                                                                                                                                                              +    // Throw a TypeError.
                                                                                                                                                                                              +    return NULL;
                                                                                                                                                                                              +  }
                                                                                                                                                                                              +}
                                                                                                                                                                                              +

                                                                                                                                                                                              napi_define_class#

                                                                                                                                                                                              + +
                                                                                                                                                                                              napi_status napi_define_class(napi_env env,
                                                                                                                                                                                              +                              const char* utf8name,
                                                                                                                                                                                              +                              size_t length,
                                                                                                                                                                                              +                              napi_callback constructor,
                                                                                                                                                                                              +                              void* data,
                                                                                                                                                                                              +                              size_t property_count,
                                                                                                                                                                                              +                              const napi_property_descriptor* properties,
                                                                                                                                                                                              +                              napi_value* result);
                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                              • [in] utf8name: Name of the JavaScript constructor function; this is @@ -13850,8 +14238,8 @@
                                                                                                                                                                                              • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                              • [in] constructor: Callback function that handles constructing instances -of the class. (This should be a static method on the class, not an actual -C++ constructor function.)
                                                                                                                                                                                              • +of the class. This should be a static method on the class, not an actual +C++ constructor function. napi_callback provides more details.
                                                                                                                                                                                              • [in] data: Optional data to be passed to the constructor callback as the data property of the callback info.
                                                                                                                                                                                              • [in] property_count: Number of items in the properties array argument.
                                                                                                                                                                                              • @@ -13892,13 +14280,12 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                napi_status napi_wrap(napi_env env,
                                                                                                                                                                                                +
                                                                                                                                                                                                napi_status napi_wrap(napi_env env,
                                                                                                                                                                                                                       napi_value js_object,
                                                                                                                                                                                                -                      void* native_object,
                                                                                                                                                                                                +                      void* native_object,
                                                                                                                                                                                                                       napi_finalize finalize_cb,
                                                                                                                                                                                                -                      void* finalize_hint,
                                                                                                                                                                                                -                      napi_ref* result);
                                                                                                                                                                                                -
                                                                                                                                                                                                + void* finalize_hint, + napi_ref* result);
                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                • [in] js_object: The JavaScript object that will be the wrapper for the @@ -13906,7 +14293,8 @@
                                                                                                                                                                                                • [in] native_object: The native instance that will be wrapped in the JavaScript object.
                                                                                                                                                                                                • [in] finalize_cb: Optional native callback that can be used to free the -native instance when the JavaScript object is ready for garbage-collection.
                                                                                                                                                                                                • +native instance when the JavaScript object is ready for garbage-collection. +napi_finalize provides more details.
                                                                                                                                                                                                • [in] finalize_hint: Optional contextual hint that is passed to the finalize callback.
                                                                                                                                                                                                • [out] result: Optional reference to the wrapped object.
                                                                                                                                                                                                • @@ -13940,10 +14328,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                  napi_status napi_unwrap(napi_env env,
                                                                                                                                                                                                  +
                                                                                                                                                                                                  napi_status napi_unwrap(napi_env env,
                                                                                                                                                                                                                           napi_value js_object,
                                                                                                                                                                                                  -                        void** result);
                                                                                                                                                                                                  -
                                                                                                                                                                                                  + void** result);
                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                  • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                  • @@ -13962,10 +14349,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                    napi_status napi_remove_wrap(napi_env env,
                                                                                                                                                                                                    +
                                                                                                                                                                                                    napi_status napi_remove_wrap(napi_env env,
                                                                                                                                                                                                                                  napi_value js_object,
                                                                                                                                                                                                    -                             void** result);
                                                                                                                                                                                                    -
                                                                                                                                                                                                    + void** result);
                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                    • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                    • @@ -13976,18 +14362,58 @@ object js_object using napi_wrap() and removes the wrapping. If a finalize callback was associated with the wrapping, it will no longer be called when the JavaScript object becomes garbage-collected.

                                                                                                                                                                                                      +

                                                                                                                                                                                                      napi_type_tag_object#

                                                                                                                                                                                                      + +
                                                                                                                                                                                                      napi_status napi_type_tag_object(napi_env env,
                                                                                                                                                                                                      +                                 napi_value js_object,
                                                                                                                                                                                                      +                                 const napi_type_tag* type_tag);
                                                                                                                                                                                                      +
                                                                                                                                                                                                        +
                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      • [in] js_object: The JavaScript object to be marked.
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      • [in] type_tag: The tag with which the object is to be marked.
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      +

                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                      +

                                                                                                                                                                                                      Associates the value of the type_tag pointer with the JavaScript object. +napi_check_object_type_tag() can then be used to compare the tag that was +attached to the object with one owned by the addon to ensure that the object +has the right type.

                                                                                                                                                                                                      +

                                                                                                                                                                                                      If the object already has an associated type tag, this API will return +napi_invalid_arg.

                                                                                                                                                                                                      +

                                                                                                                                                                                                      napi_check_object_type_tag#

                                                                                                                                                                                                      + +
                                                                                                                                                                                                      napi_status napi_check_object_type_tag(napi_env env,
                                                                                                                                                                                                      +                                       napi_value js_object,
                                                                                                                                                                                                      +                                       const napi_type_tag* type_tag,
                                                                                                                                                                                                      +                                       bool* result);
                                                                                                                                                                                                      +
                                                                                                                                                                                                        +
                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      • [in] js_object: The JavaScript object whose type tag to examine.
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      • [in] type_tag: The tag with which to compare any tag found on the object.
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      • [out] result: Whether the type tag given matched the type tag on the +object. false is also returned if no type tag was found on the object.
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      +

                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                      +

                                                                                                                                                                                                      Compares the pointer given as type_tag with any that can be found on +js_object. If no tag is found on js_object or, if a tag is found but it does +not match type_tag, then result is set to false. If a tag is found and it +matches type_tag, then result is set to true.

                                                                                                                                                                                                      napi_add_finalizer#

                                                                                                                                                                                                      -
                                                                                                                                                                                                      napi_status napi_add_finalizer(napi_env env,
                                                                                                                                                                                                      +
                                                                                                                                                                                                      napi_status napi_add_finalizer(napi_env env,
                                                                                                                                                                                                                                      napi_value js_object,
                                                                                                                                                                                                      -                               void* native_object,
                                                                                                                                                                                                      +                               void* native_object,
                                                                                                                                                                                                                                      napi_finalize finalize_cb,
                                                                                                                                                                                                      -                               void* finalize_hint,
                                                                                                                                                                                                      -                               napi_ref* result);
                                                                                                                                                                                                      -
                                                                                                                                                                                                      + void* finalize_hint, + napi_ref* result);
                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                      • [in] js_object: The JavaScript object to which the native data will be @@ -13995,7 +14421,8 @@
                                                                                                                                                                                                      • [in] native_object: The native data that will be attached to the JavaScript object.
                                                                                                                                                                                                      • [in] finalize_cb: Native callback that will be used to free the -native data when the JavaScript object is ready for garbage-collection.
                                                                                                                                                                                                      • +native data when the JavaScript object is ready for garbage-collection. +napi_finalize provides more details.
                                                                                                                                                                                                      • [in] finalize_hint: Optional contextual hint that is passed to the finalize callback.
                                                                                                                                                                                                      • [out] result: Optional reference to the JavaScript object.
                                                                                                                                                                                                      • @@ -14016,7 +14443,7 @@ invocation. If it is deleted before then, then the finalize callback may never be invoked. Therefore, when obtaining a reference a finalize callback is also required in order to enable correct disposal of the reference.

                                                                                                                                                                                                        -

                                                                                                                                                                                                        Simple Asynchronous Operations#

                                                                                                                                                                                                        +

                                                                                                                                                                                                        Simple asynchronous operations#

                                                                                                                                                                                                        Addon modules often need to leverage async helpers from libuv as part of their implementation. This allows them to schedule work to be executed asynchronously so that their methods can return in advance of the work being completed. This @@ -14036,20 +14463,18 @@ Avoid using the napi_env parameter in the execute callback as it will likely execute JavaScript.

                                                                                                                                                                                                        These functions implement the following interfaces:

                                                                                                                                                                                                        -
                                                                                                                                                                                                        typedef void (*napi_async_execute_callback)(napi_env env,
                                                                                                                                                                                                        -                                            void* data);
                                                                                                                                                                                                        -typedef void (*napi_async_complete_callback)(napi_env env,
                                                                                                                                                                                                        +
                                                                                                                                                                                                        typedef void (*napi_async_execute_callback)(napi_env env,
                                                                                                                                                                                                        +                                            void* data);
                                                                                                                                                                                                        +typedef void (*napi_async_complete_callback)(napi_env env,
                                                                                                                                                                                                                                                      napi_status status,
                                                                                                                                                                                                        -                                             void* data);
                                                                                                                                                                                                        -
                                                                                                                                                                                                        + void* data);

                                                                                                                                                                                                        When these methods are invoked, the data parameter passed will be the addon-provided void* data that was passed into the napi_create_async_work call.

                                                                                                                                                                                                        Once created the async worker can be queued for execution using the napi_queue_async_work function:

                                                                                                                                                                                                        -
                                                                                                                                                                                                        napi_status napi_queue_async_work(napi_env env,
                                                                                                                                                                                                        -                                  napi_async_work work);
                                                                                                                                                                                                        -
                                                                                                                                                                                                        +
                                                                                                                                                                                                        napi_status napi_queue_async_work(napi_env env,
                                                                                                                                                                                                        +                                  napi_async_work work);

                                                                                                                                                                                                        napi_cancel_async_work can be used if the work needs to be cancelled before the work has started execution.

                                                                                                                                                                                                        After calling napi_cancel_async_work, the complete callback @@ -14069,14 +14494,13 @@ N-API version: 1 -

                                                                                                                                                                                                        napi_status napi_create_async_work(napi_env env,
                                                                                                                                                                                                        +
                                                                                                                                                                                                        napi_status napi_create_async_work(napi_env env,
                                                                                                                                                                                                                                            napi_value async_resource,
                                                                                                                                                                                                                                            napi_value async_resource_name,
                                                                                                                                                                                                                                            napi_async_execute_callback execute,
                                                                                                                                                                                                                                            napi_async_complete_callback complete,
                                                                                                                                                                                                        -                                   void* data,
                                                                                                                                                                                                        -                                   napi_async_work* result);
                                                                                                                                                                                                        -
                                                                                                                                                                                                        + void* data, + napi_async_work* result);
                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                        • [in] async_resource: An optional object associated with the async work @@ -14088,7 +14512,8 @@ and can execute in parallel with the main event loop thread.
                                                                                                                                                                                                        • [in] complete: The native function which will be called when the asynchronous logic is completed or is cancelled. The given function is called -from the main event loop thread.
                                                                                                                                                                                                        • +from the main event loop thread. napi_async_complete_callback provides +more details.
                                                                                                                                                                                                        • [in] data: User-provided data context. This will be passed back into the execute and complete functions.
                                                                                                                                                                                                        • [out] result: napi_async_work* which is the handle to the newly created @@ -14108,9 +14533,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                          napi_status napi_delete_async_work(napi_env env,
                                                                                                                                                                                                          -                                   napi_async_work work);
                                                                                                                                                                                                          -
                                                                                                                                                                                                          +
                                                                                                                                                                                                          napi_status napi_delete_async_work(napi_env env,
                                                                                                                                                                                                          +                                   napi_async_work work);
                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                          • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                          • @@ -14123,9 +14547,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                            napi_status napi_queue_async_work(napi_env env,
                                                                                                                                                                                                            -                                  napi_async_work work);
                                                                                                                                                                                                            -
                                                                                                                                                                                                            +
                                                                                                                                                                                                            napi_status napi_queue_async_work(napi_env env,
                                                                                                                                                                                                            +                                  napi_async_work work);
                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                            • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                            • @@ -14139,9 +14562,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                              napi_status napi_cancel_async_work(napi_env env,
                                                                                                                                                                                                              -                                   napi_async_work work);
                                                                                                                                                                                                              -
                                                                                                                                                                                                              +
                                                                                                                                                                                                              napi_status napi_cancel_async_work(napi_env env,
                                                                                                                                                                                                              +                                   napi_async_work work);
                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                              • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                              • @@ -14154,7 +14576,7 @@ napi_cancelled. The work should not be deleted before the complete callback invocation, even if it has been successfully cancelled.

                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                -

                                                                                                                                                                                                                Custom Asynchronous Operations#

                                                                                                                                                                                                                +

                                                                                                                                                                                                                Custom asynchronous operations#

                                                                                                                                                                                                                The simple asynchronous work APIs above may not be appropriate for every scenario. When using any other asynchronous mechanism, the following APIs are necessary to ensure an asynchronous operation is properly tracked by @@ -14164,11 +14586,10 @@ Added in: v8.6.0 N-API version: 1 -

                                                                                                                                                                                                                napi_status napi_async_init(napi_env env,
                                                                                                                                                                                                                +
                                                                                                                                                                                                                napi_status napi_async_init(napi_env env,
                                                                                                                                                                                                                                             napi_value async_resource,
                                                                                                                                                                                                                                             napi_value async_resource_name,
                                                                                                                                                                                                                -                            napi_async_context* result)
                                                                                                                                                                                                                -
                                                                                                                                                                                                                + napi_async_context* result)
                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                • [in] async_resource: Object associated with the async work @@ -14189,9 +14610,8 @@ Added in: v8.6.0 N-API version: 1 -
                                                                                                                                                                                                                  napi_status napi_async_destroy(napi_env env,
                                                                                                                                                                                                                  -                               napi_async_context async_context);
                                                                                                                                                                                                                  -
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  napi_status napi_async_destroy(napi_env env,
                                                                                                                                                                                                                  +                               napi_async_context async_context);
                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                  • [in] async_context: The async context to be destroyed.
                                                                                                                                                                                                                  • @@ -14211,14 +14631,13 @@ N-API version: 1 -
                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_make_callback(napi_env env,
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_make_callback(napi_env env,
                                                                                                                                                                                                                                                                napi_async_context async_context,
                                                                                                                                                                                                                                                                napi_value recv,
                                                                                                                                                                                                                                                                napi_value func,
                                                                                                                                                                                                                    -                                           size_t argc,
                                                                                                                                                                                                                    -                                           const napi_value* argv,
                                                                                                                                                                                                                    -                                           napi_value* result);
                                                                                                                                                                                                                    -
                                                                                                                                                                                                                    + size_t argc, + const napi_value* argv, + napi_value* result);
                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                    • [in] async_context: Context for the async operation that is @@ -14245,16 +14664,17 @@ is sufficient and appropriate. Use of the napi_make_callback function may be required when implementing custom async behavior that does not use napi_create_async_work.

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      Any process.nextTicks or Promises scheduled on the microtask queue by +JavaScript during the callback are ran before returning back to C/C++.

                                                                                                                                                                                                                      napi_open_callback_scope#

                                                                                                                                                                                                                      -
                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env,
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env,
                                                                                                                                                                                                                                                                        napi_value resource_object,
                                                                                                                                                                                                                                                                        napi_async_context context,
                                                                                                                                                                                                                      -                                                 napi_callback_scope* result)
                                                                                                                                                                                                                      -
                                                                                                                                                                                                                      + napi_callback_scope* result)
                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                      • [in] resource_object: An object associated with the async work @@ -14274,30 +14694,28 @@ Added in: v9.6.0 N-API version: 3 -
                                                                                                                                                                                                                        NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env,
                                                                                                                                                                                                                        -                                                  napi_callback_scope scope)
                                                                                                                                                                                                                        -
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env,
                                                                                                                                                                                                                        +                                                  napi_callback_scope scope)
                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                        • [in] scope: The scope to be closed.

                                                                                                                                                                                                                        This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                        -

                                                                                                                                                                                                                        Version Management#

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Version management#

                                                                                                                                                                                                                        napi_get_node_version#

                                                                                                                                                                                                                        -
                                                                                                                                                                                                                        typedef struct {
                                                                                                                                                                                                                        -  uint32_t major;
                                                                                                                                                                                                                        -  uint32_t minor;
                                                                                                                                                                                                                        -  uint32_t patch;
                                                                                                                                                                                                                        -  const char* release;
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        typedef struct {
                                                                                                                                                                                                                        +  uint32_t major;
                                                                                                                                                                                                                        +  uint32_t minor;
                                                                                                                                                                                                                        +  uint32_t patch;
                                                                                                                                                                                                                        +  const char* release;
                                                                                                                                                                                                                         } napi_node_version;
                                                                                                                                                                                                                         
                                                                                                                                                                                                                        -napi_status napi_get_node_version(napi_env env,
                                                                                                                                                                                                                        -                                  const napi_node_version** version);
                                                                                                                                                                                                                        -
                                                                                                                                                                                                                        +napi_status napi_get_node_version(napi_env env, + const napi_node_version** version);
                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                        • [out] version: A pointer to version information for Node.js itself.
                                                                                                                                                                                                                        • @@ -14312,9 +14730,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                          napi_status napi_get_version(napi_env env,
                                                                                                                                                                                                                          -                             uint32_t* result);
                                                                                                                                                                                                                          -
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          napi_status napi_get_version(napi_env env,
                                                                                                                                                                                                                          +                             uint32_t* result);
                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                          • [out] result: The highest version of N-API supported.
                                                                                                                                                                                                                          • @@ -14334,16 +14751,15 @@
                                                                                                                                                                                                                          • If the function is not available, provide an alternate implementation that does not use the function.
                                                                                                                                                                                                                          -

                                                                                                                                                                                                                          Memory Management#

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          Memory management#

                                                                                                                                                                                                                          napi_adjust_external_memory#

                                                                                                                                                                                                                          -
                                                                                                                                                                                                                          NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env,
                                                                                                                                                                                                                          -                                                    int64_t change_in_bytes,
                                                                                                                                                                                                                          -                                                    int64_t* result);
                                                                                                                                                                                                                          -
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env,
                                                                                                                                                                                                                          +                                                    int64_t change_in_bytes,
                                                                                                                                                                                                                          +                                                    int64_t* result);
                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                          • [in] change_in_bytes: The change in externally allocated memory that is kept @@ -14371,16 +14787,15 @@ napi_value promise; napi_status status; -// Create the promise. +// Create the promise. status = napi_create_promise(env, &deferred, &promise); -if (status != napi_ok) return NULL; +if (status != napi_ok) return NULL; -// Pass the deferred to a function that performs an asynchronous action. +// Pass the deferred to a function that performs an asynchronous action. do_something_asynchronous(deferred); -// Return the promise to JS -return promise; - +// Return the promise to JS +return promise;

                                                                                                                                                                                                                            The above function do_something_asynchronous() would perform its asynchronous action and then it would resolve or reject the deferred, thereby concluding the promise and freeing the deferred:

                                                                                                                                                                                                                            @@ -14388,31 +14803,29 @@ napi_value undefined; napi_status status; -// Create a value with which to conclude the deferred. +// Create a value with which to conclude the deferred. status = napi_get_undefined(env, &undefined); -if (status != napi_ok) return NULL; +if (status != napi_ok) return NULL; -// Resolve or reject the promise associated with the deferred depending on -// whether the asynchronous action succeeded. -if (asynchronous_action_succeeded) { +// Resolve or reject the promise associated with the deferred depending on +// whether the asynchronous action succeeded. +if (asynchronous_action_succeeded) { status = napi_resolve_deferred(env, deferred, undefined); -} else { +} else { status = napi_reject_deferred(env, deferred, undefined); } -if (status != napi_ok) return NULL; +if (status != napi_ok) return NULL; -// At this point the deferred has been freed, so we should assign NULL to it. -deferred = NULL; - +// At this point the deferred has been freed, so we should assign NULL to it. +deferred = NULL;

                                                                                                                                                                                                                            napi_create_promise#

                                                                                                                                                                                                                            -
                                                                                                                                                                                                                            napi_status napi_create_promise(napi_env env,
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            napi_status napi_create_promise(napi_env env,
                                                                                                                                                                                                                                                             napi_deferred* deferred,
                                                                                                                                                                                                                            -                                napi_value* promise);
                                                                                                                                                                                                                            -
                                                                                                                                                                                                                            + napi_value* promise);
                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                            • [out] deferred: A newly created deferred object which can later be passed to @@ -14427,10 +14840,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                              napi_status napi_resolve_deferred(napi_env env,
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              napi_status napi_resolve_deferred(napi_env env,
                                                                                                                                                                                                                                                                 napi_deferred deferred,
                                                                                                                                                                                                                              -                                  napi_value resolution);
                                                                                                                                                                                                                              -
                                                                                                                                                                                                                              + napi_value resolution);
                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                              • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                              • @@ -14448,10 +14860,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                                napi_status napi_reject_deferred(napi_env env,
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                napi_status napi_reject_deferred(napi_env env,
                                                                                                                                                                                                                                                                  napi_deferred deferred,
                                                                                                                                                                                                                                -                                 napi_value rejection);
                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                + napi_value rejection);
                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                • @@ -14469,10 +14880,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                                  napi_status napi_is_promise(napi_env env,
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  napi_status napi_is_promise(napi_env env,
                                                                                                                                                                                                                                                               napi_value value,
                                                                                                                                                                                                                                  -                            bool* is_promise);
                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                  + bool* is_promise);
                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                  • [in] value: The value to examine
                                                                                                                                                                                                                                  • @@ -14487,10 +14897,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_run_script(napi_env env,
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_run_script(napi_env env,
                                                                                                                                                                                                                                                                             napi_value script,
                                                                                                                                                                                                                                    -                                        napi_value* result);
                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                    + napi_value* result);
                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                    • [in] script: A JavaScript string containing the script to execute.
                                                                                                                                                                                                                                    • @@ -14517,14 +14926,13 @@ Added in: v8.10.0, v9.3.0 N-API version: 2 -
                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env,
                                                                                                                                                                                                                                      -                                               struct uv_loop_s** loop);
                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env,
                                                                                                                                                                                                                                      +                                               struct uv_loop_s** loop);
                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                      • [out] loop: The current libuv loop instance.
                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                      Asynchronous Thread-safe Function Calls#

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Asynchronous thread-safe function calls#

                                                                                                                                                                                                                                      JavaScript functions can normally only be called from a native addon's main thread. If an addon creates additional threads, then N-API functions that require a napi_env, napi_value, or napi_ref must not be called from those @@ -14551,7 +14959,8 @@

                                                                                                                                                                                                                                      The context given during the call to napi_create_threadsafe_function() can be retrieved from any thread with a call to napi_get_threadsafe_function_context().

                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                      napi_call_threadsafe_function() can then be used for initiating a call into +

                                                                                                                                                                                                                                      Calling a thread-safe function#

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      napi_call_threadsafe_function() can be used for initiating a call into JavaScript. napi_call_threadsafe_function() accepts a parameter which controls whether the API behaves blockingly. If set to napi_tsfn_nonblocking, the API behaves non-blockingly, returning napi_queue_full if the queue was full, @@ -14575,6 +14984,7 @@ Node.js process exits while there is a thread-safe function still active.

                                                                                                                                                                                                                                      It is not necessary to call into JavaScript via napi_make_callback() because N-API runs call_js_cb in a context appropriate for callbacks.

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Reference counting of thread-safe functions#

                                                                                                                                                                                                                                      Threads can be added to and removed from a napi_threadsafe_function object during its existence. Thus, in addition to specifying an initial number of threads upon creation, napi_acquire_threadsafe_function can be called to @@ -14589,11 +14999,14 @@ should be the last API call made in conjunction with a given napi_threadsafe_function, because after the call completes, there is no guarantee that the napi_threadsafe_function is still allocated. For the same -reason, do not make use of a thread-safe function +reason, do not use a thread-safe function after receiving a return value of napi_closing in response to a call to napi_call_threadsafe_function. Data associated with the napi_threadsafe_function can be freed in its napi_finalize callback which -was passed to napi_create_threadsafe_function().

                                                                                                                                                                                                                                      +was passed to napi_create_threadsafe_function(). The parameter +initial_thread_count of napi_create_threadsafe_function marks the initial +number of aquisitions of the thread-safe functions, instead of calling +napi_acquire_threadsafe_function multiple times at creation.

                                                                                                                                                                                                                                      Once the number of threads making use of a napi_threadsafe_function reaches zero, no further threads can start making use of it by calling napi_acquire_threadsafe_function(). In fact, all subsequent API calls @@ -14607,15 +15020,19 @@ will return napi_closing, thus informing the threads that it is no longer possible to make asynchronous calls to the thread-safe function. This can be used as a criterion for terminating the thread. Upon receiving a return value -of napi_closing from napi_call_threadsafe_function() a thread must make no -further use of the thread-safe function because it is no longer guaranteed to +of napi_closing from napi_call_threadsafe_function() a thread must not use +the thread-safe function anymore because it is no longer guaranteed to be allocated.

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Deciding whether to keep the process running#

                                                                                                                                                                                                                                      Similarly to libuv handles, thread-safe functions can be "referenced" and "unreferenced". A "referenced" thread-safe function will cause the event loop on the thread on which it is created to remain alive until the thread-safe function is destroyed. In contrast, an "unreferenced" thread-safe function will not prevent the event loop from exiting. The APIs napi_ref_threadsafe_function and napi_unref_threadsafe_function exist for this purpose.

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Neither does napi_unref_threadsafe_function mark the thread-safe functions as +able to be destroyed nor does napi_ref_threadsafe_function prevent it from +being destroyed.

                                                                                                                                                                                                                                      napi_create_threadsafe_function#

                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                      NAPI_EXTERN napi_status
                                                                                                                                                                                                                                      -napi_create_threadsafe_function(napi_env env,
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      NAPI_EXTERN napi_status
                                                                                                                                                                                                                                      +napi_create_threadsafe_function(napi_env env,
                                                                                                                                                                                                                                                                       napi_value func,
                                                                                                                                                                                                                                                                       napi_value async_resource,
                                                                                                                                                                                                                                                                       napi_value async_resource_name,
                                                                                                                                                                                                                                      -                                size_t max_queue_size,
                                                                                                                                                                                                                                      -                                size_t initial_thread_count,
                                                                                                                                                                                                                                      -                                void* thread_finalize_data,
                                                                                                                                                                                                                                      +                                size_t max_queue_size,
                                                                                                                                                                                                                                      +                                size_t initial_thread_count,
                                                                                                                                                                                                                                      +                                void* thread_finalize_data,
                                                                                                                                                                                                                                                                       napi_finalize thread_finalize_cb,
                                                                                                                                                                                                                                      -                                void* context,
                                                                                                                                                                                                                                      +                                void* context,
                                                                                                                                                                                                                                                                       napi_threadsafe_function_call_js call_js_cb,
                                                                                                                                                                                                                                      -                                napi_threadsafe_function* result);
                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                      + napi_threadsafe_function* result);
                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                      • [in] func: An optional JavaScript function to call from another thread. It @@ -14652,8 +15068,9 @@ the kind of resource that is being provided for diagnostic information exposed by the async_hooks API.
                                                                                                                                                                                                                                      • [in] max_queue_size: Maximum size of the queue. 0 for no limit.
                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                      • [in] initial_thread_count: The initial number of threads, including the main -thread, which will be making use of this function.
                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                      • [in] initial_thread_count: The initial number of acquisitions, i.e. the +initial number of threads, including the main thread, which will be making use +of this function.
                                                                                                                                                                                                                                      • [in] thread_finalize_data: Optional data to be passed to thread_finalize_cb.
                                                                                                                                                                                                                                      • [in] thread_finalize_cb: Optional function to call when the napi_threadsafe_function is being destroyed.
                                                                                                                                                                                                                                      • @@ -14662,7 +15079,8 @@
                                                                                                                                                                                                                                      • [in] call_js_cb: Optional callback which calls the JavaScript function in response to a call on a different thread. This callback will be called on the main thread. If not given, the JavaScript function will be called with no -parameters and with undefined as its this value.
                                                                                                                                                                                                                                      • +parameters and with undefined as its this value. +napi_threadsafe_function_call_js provides more details.
                                                                                                                                                                                                                                      • [out] result: The asynchronous thread-safe JavaScript function.

                                                                                                                                                                                                                                      napi_get_threadsafe_function_context#

                                                                                                                                                                                                                                      @@ -14670,10 +15088,9 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                      NAPI_EXTERN napi_status
                                                                                                                                                                                                                                      -napi_get_threadsafe_function_context(napi_threadsafe_function func,
                                                                                                                                                                                                                                      -                                     void** result);
                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      NAPI_EXTERN napi_status
                                                                                                                                                                                                                                      +napi_get_threadsafe_function_context(napi_threadsafe_function func,
                                                                                                                                                                                                                                      +                                     void** result);
                                                                                                                                                                                                                                      • [in] func: The thread-safe function for which to retrieve the context.
                                                                                                                                                                                                                                      • [out] result: The location where to store the context.
                                                                                                                                                                                                                                      • @@ -14684,11 +15101,10 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                        NAPI_EXTERN napi_status
                                                                                                                                                                                                                                        -napi_call_threadsafe_function(napi_threadsafe_function func,
                                                                                                                                                                                                                                        -                              void* data,
                                                                                                                                                                                                                                        -                              napi_threadsafe_function_call_mode is_blocking);
                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        NAPI_EXTERN napi_status
                                                                                                                                                                                                                                        +napi_call_threadsafe_function(napi_threadsafe_function func,
                                                                                                                                                                                                                                        +                              void* data,
                                                                                                                                                                                                                                        +                              napi_threadsafe_function_call_mode is_blocking);
                                                                                                                                                                                                                                        • [in] func: The asynchronous thread-safe JavaScript function to invoke.
                                                                                                                                                                                                                                        • [in] data: Data to send into JavaScript via the callback call_js_cb @@ -14707,9 +15123,8 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                          NAPI_EXTERN napi_status
                                                                                                                                                                                                                                          -napi_acquire_threadsafe_function(napi_threadsafe_function func);
                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          NAPI_EXTERN napi_status
                                                                                                                                                                                                                                          +napi_acquire_threadsafe_function(napi_threadsafe_function func);
                                                                                                                                                                                                                                          • [in] func: The asynchronous thread-safe JavaScript function to start making use of.
                                                                                                                                                                                                                                          • @@ -14724,10 +15139,9 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                            NAPI_EXTERN napi_status
                                                                                                                                                                                                                                            -napi_release_threadsafe_function(napi_threadsafe_function func,
                                                                                                                                                                                                                                            -                                 napi_threadsafe_function_release_mode mode);
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            NAPI_EXTERN napi_status
                                                                                                                                                                                                                                            +napi_release_threadsafe_function(napi_threadsafe_function func,
                                                                                                                                                                                                                                            +                                 napi_threadsafe_function_release_mode mode);
                                                                                                                                                                                                                                            • [in] func: The asynchronous thread-safe JavaScript function whose reference count to decrement.
                                                                                                                                                                                                                                            • @@ -14748,54 +15162,276 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                              -napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                              +napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);
                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                              • [in] func: The thread-safe function to reference.

                                                                                                                                                                                                                                              This API is used to indicate that the event loop running on the main thread -should not exit until func has been destroyed. Similar to uv_ref it is +should not exit until func has been destroyed. Similar to uv_ref it is also idempotent.

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Neither does napi_unref_threadsafe_function mark the thread-safe functions as +able to be destroyed nor does napi_ref_threadsafe_function prevent it from +being destroyed. napi_acquire_threadsafe_function and +napi_release_threadsafe_function are available for that purpose.

                                                                                                                                                                                                                                              This API may only be called from the main thread.

                                                                                                                                                                                                                                              napi_unref_threadsafe_function#

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                              -napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                              +napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);
                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                              • [in] func: The thread-safe function to unreference.

                                                                                                                                                                                                                                              This API is used to indicate that the event loop running on the main thread -may exit before func is destroyed. Similar to uv_unref it is also +may exit before func is destroyed. Similar to uv_unref it is also idempotent.

                                                                                                                                                                                                                                              This API may only be called from the main thread.

                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                              Child Process#

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Miscellaneous utilities#

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              node_api_get_module_file_name#

                                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                                              Stability: 1 - Experimental

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                              +node_api_get_module_file_name(napi_env env, const char** result);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                              • [out] result: A URL containing the absolute path of the +location from which the add-on was loaded. For a file on the local +file system it will start with file://. The string is null-terminated and +owned by env and must thus not be modified or freed.
                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              result may be an empty string if the add-on loading process fails to establish +the add-on's file name during loading.

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              C++ Embedder API#

                                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                                              Node.js provides a number of C++ APIs that can be used to execute JavaScript +in a Node.js environment from other C++ software.

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              The documentation for these APIs can be found in src/node.h in the Node.js +source tree. In addition to the APIs exposed by Node.js, some required concepts +are provided by the V8 embedder API.

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Because using Node.js as an embedded library is different from writing code +that is executed by Node.js, breaking changes do not follow typical Node.js +deprecation policy and may occur on each semver-major release without prior +warning.

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Example embedding application#

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              The following sections will provide an overview over how to use these APIs +to create an application from scratch that will perform the equivalent of +node -e <code>, i.e. that will take a piece of JavaScript and run it in +a Node.js-specific environment.

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              The full code can be found in the Node.js source tree.

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Setting up per-process state#

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Node.js requires some per-process state management in order to run:

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                              • Arguments parsing for Node.js CLI options,
                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                              • V8 per-process requirements, such as a v8::Platform instance.
                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              The following example shows how these can be set up. Some class names are from +the node and v8 C++ namespaces, respectively.

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              int main(int argc, char** argv) {
                                                                                                                                                                                                                                              +  argv = uv_setup_args(argc, argv);
                                                                                                                                                                                                                                              +  std::vector<std::string> args(argv, argv + argc);
                                                                                                                                                                                                                                              +  std::vector<std::string> exec_args;
                                                                                                                                                                                                                                              +  std::vector<std::string> errors;
                                                                                                                                                                                                                                              +  // Parse Node.js CLI options, and print any errors that have occurred while
                                                                                                                                                                                                                                              +  // trying to parse them.
                                                                                                                                                                                                                                              +  int exit_code = node::InitializeNodeWithArgs(&args, &exec_args, &errors);
                                                                                                                                                                                                                                              +  for (const std::string& error : errors)
                                                                                                                                                                                                                                              +    fprintf(stderr, "%s: %s\n", args[0].c_str(), error.c_str());
                                                                                                                                                                                                                                              +  if (exit_code != 0) {
                                                                                                                                                                                                                                              +    return exit_code;
                                                                                                                                                                                                                                              +  }
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  // Create a v8::Platform instance. `MultiIsolatePlatform::Create()` is a way
                                                                                                                                                                                                                                              +  // to create a v8::Platform instance that Node.js can use when creating
                                                                                                                                                                                                                                              +  // Worker threads. When no `MultiIsolatePlatform` instance is present,
                                                                                                                                                                                                                                              +  // Worker threads are disabled.
                                                                                                                                                                                                                                              +  std::unique_ptr<MultiIsolatePlatform> platform =
                                                                                                                                                                                                                                              +      MultiIsolatePlatform::Create(4);
                                                                                                                                                                                                                                              +  V8::InitializePlatform(platform.get());
                                                                                                                                                                                                                                              +  V8::Initialize();
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  // See below for the contents of this function.
                                                                                                                                                                                                                                              +  int ret = RunNodeInstance(platform.get(), args, exec_args);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  V8::Dispose();
                                                                                                                                                                                                                                              +  V8::ShutdownPlatform();
                                                                                                                                                                                                                                              +  return ret;
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Per-instance state#

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Node.js has a concept of a “Node.js instance”, that is commonly being referred +to as node::Environment. Each node::Environment is associated with:

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                              • Exactly one v8::Isolate, i.e. one JS Engine instance,
                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                              • Exactly one uv_loop_t, i.e. one event loop, and
                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                              • A number of v8::Contexts, but exactly one main v8::Context.
                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                              • One node::IsolateData instance that contains information that could be +shared by multiple node::Environments that use the same v8::Isolate. +Currently, no testing if performed for this scenario.
                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              In order to set up a v8::Isolate, an v8::ArrayBuffer::Allocator needs +to be provided. One possible choice is the default Node.js allocator, which +can be created through node::ArrayBufferAllocator::Create(). Using the Node.js +allocator allows minor performance optimizations when addons use the Node.js +C++ Buffer API, and is required in order to track ArrayBuffer memory in +process.memoryUsage().

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Additionally, each v8::Isolate that is used for a Node.js instance needs to +be registered and unregistered with the MultiIsolatePlatform instance, if one +is being used, in order for the platform to know which event loop to use +for tasks scheduled by the v8::Isolate.

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              The node::NewIsolate() helper function creates a v8::Isolate, +sets it up with some Node.js-specific hooks (e.g. the Node.js error handler), +and registers it with the platform automatically.

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              int RunNodeInstance(MultiIsolatePlatform* platform,
                                                                                                                                                                                                                                              +                    const std::vector<std::string>& args,
                                                                                                                                                                                                                                              +                    const std::vector<std::string>& exec_args) {
                                                                                                                                                                                                                                              +  int exit_code = 0;
                                                                                                                                                                                                                                              +  // Set up a libuv event loop.
                                                                                                                                                                                                                                              +  uv_loop_t loop;
                                                                                                                                                                                                                                              +  int ret = uv_loop_init(&loop);
                                                                                                                                                                                                                                              +  if (ret != 0) {
                                                                                                                                                                                                                                              +    fprintf(stderr, "%s: Failed to initialize loop: %s\n",
                                                                                                                                                                                                                                              +            args[0].c_str(),
                                                                                                                                                                                                                                              +            uv_err_name(ret));
                                                                                                                                                                                                                                              +    return 1;
                                                                                                                                                                                                                                              +  }
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  std::shared_ptr<ArrayBufferAllocator> allocator =
                                                                                                                                                                                                                                              +      ArrayBufferAllocator::Create();
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  Isolate* isolate = NewIsolate(allocator, &loop, platform);
                                                                                                                                                                                                                                              +  if (isolate == nullptr) {
                                                                                                                                                                                                                                              +    fprintf(stderr, "%s: Failed to initialize V8 Isolate\n", args[0].c_str());
                                                                                                                                                                                                                                              +    return 1;
                                                                                                                                                                                                                                              +  }
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  {
                                                                                                                                                                                                                                              +    Locker locker(isolate);
                                                                                                                                                                                                                                              +    Isolate::Scope isolate_scope(isolate);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Create a node::IsolateData instance that will later be released using
                                                                                                                                                                                                                                              +    // node::FreeIsolateData().
                                                                                                                                                                                                                                              +    std::unique_ptr<IsolateData, decltype(&node::FreeIsolateData)> isolate_data(
                                                                                                                                                                                                                                              +        node::CreateIsolateData(isolate, &loop, platform, allocator.get()),
                                                                                                                                                                                                                                              +        node::FreeIsolateData);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Set up a new v8::Context.
                                                                                                                                                                                                                                              +    HandleScope handle_scope(isolate);
                                                                                                                                                                                                                                              +    Local<Context> context = node::NewContext(isolate);
                                                                                                                                                                                                                                              +    if (context.IsEmpty()) {
                                                                                                                                                                                                                                              +      fprintf(stderr, "%s: Failed to initialize V8 Context\n", args[0].c_str());
                                                                                                                                                                                                                                              +      return 1;
                                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // The v8::Context needs to be entered when node::CreateEnvironment() and
                                                                                                                                                                                                                                              +    // node::LoadEnvironment() are being called.
                                                                                                                                                                                                                                              +    Context::Scope context_scope(context);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Create a node::Environment instance that will later be released using
                                                                                                                                                                                                                                              +    // node::FreeEnvironment().
                                                                                                                                                                                                                                              +    std::unique_ptr<Environment, decltype(&node::FreeEnvironment)> env(
                                                                                                                                                                                                                                              +        node::CreateEnvironment(isolate_data.get(), context, args, exec_args),
                                                                                                                                                                                                                                              +        node::FreeEnvironment);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Set up the Node.js instance for execution, and run code inside of it.
                                                                                                                                                                                                                                              +    // There is also a variant that takes a callback and provides it with
                                                                                                                                                                                                                                              +    // the `require` and `process` objects, so that it can manually compile
                                                                                                                                                                                                                                              +    // and run scripts as needed.
                                                                                                                                                                                                                                              +    // The `require` function inside this script does *not* access the file
                                                                                                                                                                                                                                              +    // system, and can only load built-in Node.js modules.
                                                                                                                                                                                                                                              +    // `module.createRequire()` is being used to create one that is able to
                                                                                                                                                                                                                                              +    // load files from the disk, and uses the standard CommonJS file loader
                                                                                                                                                                                                                                              +    // instead of the internal-only `require` function.
                                                                                                                                                                                                                                              +    MaybeLocal<Value> loadenv_ret = node::LoadEnvironment(
                                                                                                                                                                                                                                              +        env.get(),
                                                                                                                                                                                                                                              +        "const publicRequire ="
                                                                                                                                                                                                                                              +        "  require('module').createRequire(process.cwd() + '/');"
                                                                                                                                                                                                                                              +        "globalThis.require = publicRequire;"
                                                                                                                                                                                                                                              +        "require('vm').runInThisContext(process.argv[1]);");
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    if (loadenv_ret.IsEmpty())  // There has been a JS exception.
                                                                                                                                                                                                                                              +      return 1;
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    {
                                                                                                                                                                                                                                              +      // SealHandleScope protects against handle leaks from callbacks.
                                                                                                                                                                                                                                              +      SealHandleScope seal(isolate);
                                                                                                                                                                                                                                              +      bool more;
                                                                                                                                                                                                                                              +      do {
                                                                                                                                                                                                                                              +        uv_run(&loop, UV_RUN_DEFAULT);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +        // V8 tasks on background threads may end up scheduling new tasks in the
                                                                                                                                                                                                                                              +        // foreground, which in turn can keep the event loop going. For example,
                                                                                                                                                                                                                                              +        // WebAssembly.compile() may do so.
                                                                                                                                                                                                                                              +        platform->DrainTasks(isolate);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +        // If there are new tasks, continue.
                                                                                                                                                                                                                                              +        more = uv_loop_alive(&loop);
                                                                                                                                                                                                                                              +        if (more) continue;
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +        // node::EmitBeforeExit() is used to emit the 'beforeExit' event on
                                                                                                                                                                                                                                              +        // the `process` object.
                                                                                                                                                                                                                                              +        node::EmitBeforeExit(env.get());
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +        // 'beforeExit' can also schedule new work that keeps the event loop
                                                                                                                                                                                                                                              +        // running.
                                                                                                                                                                                                                                              +        more = uv_loop_alive(&loop);
                                                                                                                                                                                                                                              +      } while (more == true);
                                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // node::EmitExit() returns the current exit code.
                                                                                                                                                                                                                                              +    exit_code = node::EmitExit(env.get());
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // node::Stop() can be used to explicitly stop the event loop and keep
                                                                                                                                                                                                                                              +    // further JavaScript from running. It can be called from any thread,
                                                                                                                                                                                                                                              +    // and will act like worker.terminate() if called from another thread.
                                                                                                                                                                                                                                              +    node::Stop(env.get());
                                                                                                                                                                                                                                              +  }
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  // Unregister the Isolate with the platform and add a listener that is called
                                                                                                                                                                                                                                              +  // when the Platform is done cleaning up any state it had associated with
                                                                                                                                                                                                                                              +  // the Isolate.
                                                                                                                                                                                                                                              +  bool platform_finished = false;
                                                                                                                                                                                                                                              +  platform->AddIsolateFinishedCallback(isolate, [](void* data) {
                                                                                                                                                                                                                                              +    *static_cast<bool*>(data) = true;
                                                                                                                                                                                                                                              +  }, &platform_finished);
                                                                                                                                                                                                                                              +  platform->UnregisterIsolate(isolate);
                                                                                                                                                                                                                                              +  isolate->Dispose();
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  // Wait until the platform has cleaned up all relevant resources.
                                                                                                                                                                                                                                              +  while (!platform_finished)
                                                                                                                                                                                                                                              +    uv_run(&loop, UV_RUN_ONCE);
                                                                                                                                                                                                                                              +  int err = uv_loop_close(&loop);
                                                                                                                                                                                                                                              +  assert(err == 0);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +  return exit_code;
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Child process#

                                                                                                                                                                                                                                              Stability: 2 - Stable

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Source Code: lib/child_process.js

                                                                                                                                                                                                                                              The child_process module provides the ability to spawn child processes in a manner that is similar, but not identical, to popen(3). This capability is primarily provided by the child_process.spawn() function:

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              const { spawn } = require('child_process');
                                                                                                                                                                                                                                              -const ls = spawn('ls', ['-lh', '/usr']);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              const { spawn } = require('child_process');
                                                                                                                                                                                                                                              +const ls = spawn('ls', ['-lh', '/usr']);
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -ls.stdout.on('data', (data) => {
                                                                                                                                                                                                                                              -  console.log(`stdout: ${data}`);
                                                                                                                                                                                                                                              +ls.stdout.on('data', (data) => {
                                                                                                                                                                                                                                              +  console.log(`stdout: ${data}`);
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -ls.stderr.on('data', (data) => {
                                                                                                                                                                                                                                              -  console.error(`stderr: ${data}`);
                                                                                                                                                                                                                                              +ls.stderr.on('data', (data) => {
                                                                                                                                                                                                                                              +  console.error(`stderr: ${data}`);
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -ls.on('close', (code) => {
                                                                                                                                                                                                                                              -  console.log(`child process exited with code ${code}`);
                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +ls.on('close', (code) => { + console.log(`child process exited with code ${code}`); +});

                                                                                                                                                                                                                                              By default, pipes for stdin, stdout, and stderr are established between the parent Node.js process and the spawned child. These pipes have limited (and platform-specific) capacity. If the child process writes to @@ -14837,7 +15473,7 @@ synchronous counterparts may be more convenient. In many cases, however, the synchronous methods can have significant impact on performance due to stalling the event loop while spawned processes complete.

                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                              Asynchronous Process Creation#

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Asynchronous process creation#

                                                                                                                                                                                                                                              The child_process.spawn(), child_process.fork(), child_process.exec(), and child_process.execFile() methods all follow the idiomatic asynchronous programming pattern typical of other Node.js APIs.

                                                                                                                                                                                                                                              @@ -14861,39 +15497,37 @@ .cmd file as an argument (which is what the shell option and child_process.exec() do). In any case, if the script filename contains spaces it needs to be quoted.

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              // On Windows Only...
                                                                                                                                                                                                                                              -const { spawn } = require('child_process');
                                                                                                                                                                                                                                              -const bat = spawn('cmd.exe', ['/c', 'my.bat']);
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              // On Windows Only...
                                                                                                                                                                                                                                              +const { spawn } = require('child_process');
                                                                                                                                                                                                                                              +const bat = spawn('cmd.exe', ['/c', 'my.bat']);
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -bat.stdout.on('data', (data) => {
                                                                                                                                                                                                                                              -  console.log(data.toString());
                                                                                                                                                                                                                                              +bat.stdout.on('data', (data) => {
                                                                                                                                                                                                                                              +  console.log(data.toString());
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -bat.stderr.on('data', (data) => {
                                                                                                                                                                                                                                              -  console.error(data.toString());
                                                                                                                                                                                                                                              +bat.stderr.on('data', (data) => {
                                                                                                                                                                                                                                              +  console.error(data.toString());
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -bat.on('exit', (code) => {
                                                                                                                                                                                                                                              -  console.log(`Child exited with code ${code}`);
                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              // OR...
                                                                                                                                                                                                                                              -const { exec, spawn } = require('child_process');
                                                                                                                                                                                                                                              -exec('my.bat', (err, stdout, stderr) => {
                                                                                                                                                                                                                                              -  if (err) {
                                                                                                                                                                                                                                              -    console.error(err);
                                                                                                                                                                                                                                              -    return;
                                                                                                                                                                                                                                              -  }
                                                                                                                                                                                                                                              -  console.log(stdout);
                                                                                                                                                                                                                                              +bat.on('exit', (code) => {
                                                                                                                                                                                                                                              +  console.log(`Child exited with code ${code}`);
                                                                                                                                                                                                                                              +});
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              // OR...
                                                                                                                                                                                                                                              +const { exec, spawn } = require('child_process');
                                                                                                                                                                                                                                              +exec('my.bat', (err, stdout, stderr) => {
                                                                                                                                                                                                                                              +  if (err) {
                                                                                                                                                                                                                                              +    console.error(err);
                                                                                                                                                                                                                                              +    return;
                                                                                                                                                                                                                                              +  }
                                                                                                                                                                                                                                              +  console.log(stdout);
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -// Script with spaces in the filename:
                                                                                                                                                                                                                                              -const bat = spawn('"my script.cmd"', ['a', 'b'], { shell: true });
                                                                                                                                                                                                                                              -// or:
                                                                                                                                                                                                                                              -exec('"my script.cmd" a b', (err, stdout, stderr) => {
                                                                                                                                                                                                                                              -  // ...
                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +// Script with spaces in the filename: +const bat = spawn('"my script.cmd"', ['a', 'b'], { shell: true }); +// or: +exec('"my script.cmd" a b', (err, stdout, stderr) => { + // ... +});

                                                                                                                                                                                                                                              child_process.exec(command[, options][, callback])#

                                                                                                                                                                                                                                              • command <string> The command to run, with space-separated arguments.
                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                options <Object>

                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                              • options <Object>
                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                callback <Function> called with the output when process terminates.

                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                              • callback <Function> called with the output when process terminates.
                                                                                                                                                                                                                                                • error <Error>
                                                                                                                                                                                                                                                • stdout <string> | <Buffer>
                                                                                                                                                                                                                                                • @@ -14945,37 +15577,35 @@ directly by the shell and special characters (vary based on shell) need to be dealt with accordingly:

                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                  exec('"/path/to/test file/test.sh" arg1 arg2');
                                                                                                                                                                                                                                                  -// Double quotes are used so that the space in the path is not interpreted as
                                                                                                                                                                                                                                                  -// a delimiter of multiple arguments.
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  exec('"/path/to/test file/test.sh" arg1 arg2');
                                                                                                                                                                                                                                                  +// Double quotes are used so that the space in the path is not interpreted as
                                                                                                                                                                                                                                                  +// a delimiter of multiple arguments.
                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                  -exec('echo "The \\$HOME variable is $HOME"');
                                                                                                                                                                                                                                                  -// The $HOME variable is escaped in the first instance, but not in the second.
                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                  +exec('echo "The \\$HOME variable is $HOME"'); +// The $HOME variable is escaped in the first instance, but not in the second.

                                                                                                                                                                                                                                                  Never pass unsanitized user input to this function. Any input containing shell metacharacters may be used to trigger arbitrary command execution.

                                                                                                                                                                                                                                                  If a callback function is provided, it is called with the arguments (error, stdout, stderr). On success, error will be null. On error, error will be an instance of Error. The error.code property will be -the exit code of the child process while error.signal will be set to the -signal that terminated the process. Any exit code other than 0 is considered -to be an error.

                                                                                                                                                                                                                                                  +the exit code of the process. By convention, any exit code other than 0 +indicates an error. error.signal will be the signal that terminated the +process.

                                                                                                                                                                                                                                                  The stdout and stderr arguments passed to the callback will contain the stdout and stderr output of the child process. By default, Node.js will decode the output as UTF-8 and pass strings to the callback. The encoding option can be used to specify the character encoding used to decode the stdout and stderr output. If encoding is 'buffer', or an unrecognized character encoding, Buffer objects will be passed to the callback instead.

                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                  const { exec } = require('child_process');
                                                                                                                                                                                                                                                  -exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {
                                                                                                                                                                                                                                                  -  if (error) {
                                                                                                                                                                                                                                                  -    console.error(`exec error: ${error}`);
                                                                                                                                                                                                                                                  -    return;
                                                                                                                                                                                                                                                  -  }
                                                                                                                                                                                                                                                  -  console.log(`stdout: ${stdout}`);
                                                                                                                                                                                                                                                  -  console.error(`stderr: ${stderr}`);
                                                                                                                                                                                                                                                  -});
                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  const { exec } = require('child_process');
                                                                                                                                                                                                                                                  +exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {
                                                                                                                                                                                                                                                  +  if (error) {
                                                                                                                                                                                                                                                  +    console.error(`exec error: ${error}`);
                                                                                                                                                                                                                                                  +    return;
                                                                                                                                                                                                                                                  +  }
                                                                                                                                                                                                                                                  +  console.log(`stdout: ${stdout}`);
                                                                                                                                                                                                                                                  +  console.error(`stderr: ${stderr}`);
                                                                                                                                                                                                                                                  +});

                                                                                                                                                                                                                                                  If timeout is greater than 0, the parent will send the signal identified by the killSignal property (the default is 'SIGTERM') if the child runs longer than timeout milliseconds.

                                                                                                                                                                                                                                                  @@ -14987,16 +15617,15 @@ case of an error (including any error resulting in an exit code other than 0), a rejected promise is returned, with the same error object given in the callback, but with two additional properties stdout and stderr.

                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                  -const exec = util.promisify(require('child_process').exec);
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                  +const exec = util.promisify(require('child_process').exec);
                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                  -async function lsExample() {
                                                                                                                                                                                                                                                  -  const { stdout, stderr } = await exec('ls');
                                                                                                                                                                                                                                                  -  console.log('stdout:', stdout);
                                                                                                                                                                                                                                                  -  console.error('stderr:', stderr);
                                                                                                                                                                                                                                                  +async function lsExample() {
                                                                                                                                                                                                                                                  +  const { stdout, stderr } = await exec('ls');
                                                                                                                                                                                                                                                  +  console.log('stdout:', stdout);
                                                                                                                                                                                                                                                  +  console.error('stderr:', stderr);
                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                  -lsExample();
                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                  +lsExample();

                                                                                                                                                                                                                                                  child_process.execFile(file[, args][, options][, callback])#

                                                                                                                                                                                            -
                                                                                                                                                                                            const { spawn } = require('child_process');
                                                                                                                                                                                            +
                                                                                                                                                                                            const { spawn } = require('child_process');
                                                                                                                                                                                             
                                                                                                                                                                                            -// Child will use parent's stdios.
                                                                                                                                                                                            -spawn('prg', [], { stdio: 'inherit' });
                                                                                                                                                                                            +// Child will use parent's stdios.
                                                                                                                                                                                            +spawn('prg', [], { stdio: 'inherit' });
                                                                                                                                                                                             
                                                                                                                                                                                            -// Spawn child sharing only stderr.
                                                                                                                                                                                            -spawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });
                                                                                                                                                                                            +// Spawn child sharing only stderr.
                                                                                                                                                                                            +spawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });
                                                                                                                                                                                             
                                                                                                                                                                                            -// Open an extra fd=4, to interact with programs presenting a
                                                                                                                                                                                            -// startd-style interface.
                                                                                                                                                                                            -spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
                                                                                                                                                                                            -
                                                                                                                                                                                            +// Open an extra fd=4, to interact with programs presenting a +// startd-style interface. +spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });

                                                                                                                                                                                            It is worth noting that when an IPC channel is established between the parent and child processes, and the child is a Node.js process, the child is launched with the IPC channel unreferenced (using unref()) until the @@ -15439,7 +16055,7 @@ child_process.spawn() calls to be a bottleneck. For more information, see V8 issue 7381.

                                                                                                                                                                                            See also: child_process.exec() and child_process.fork().

                                                                                                                                                                                            -

                                                                                                                                                                                            Synchronous Process Creation#

                                                                                                                                                                                            +

                                                                                                                                                                                            Synchronous process creation#

                                                                                                                                                                                            The child_process.spawnSync(), child_process.execSync(), and child_process.execFileSync() methods are synchronous and will block the Node.js event loop, pausing execution of any additional code until the spawned @@ -15468,8 +16084,7 @@

                                                                                                                                                                                            • file <string> The name or path of the executable file to run.
                                                                                                                                                                                            • args <string[]> List of string arguments.
                                                                                                                                                                                            • -
                                                                                                                                                                                            • -

                                                                                                                                                                                              options <Object>

                                                                                                                                                                                              +
                                                                                                                                                                                            • options <Object>
                                                                                                                                                                                              • cwd <string> Current working directory of the child process.
                                                                                                                                                                                              • input <string> | <Buffer> | <TypedArray> | <DataView> The value which will be passed @@ -15478,7 +16093,7 @@
                                                                                                                                                                                              • stdio <string> | <Array> Child's stdio configuration. stderr by default will be output to the parent process' stderr unless stdio is specified. Default: 'pipe'.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                              • +
                                                                                                                                                                                              • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                              • uid <number> Sets the user identity of the process (see setuid(2)).
                                                                                                                                                                                              • gid <number> Sets the group identity of the process (see setgid(2)).
                                                                                                                                                                                              • timeout <number> In milliseconds the maximum amount of time the process @@ -15494,8 +16109,8 @@ normally be created on Windows systems. Default: false.
                                                                                                                                                                                              • shell <boolean> | <string> If true, runs command inside of a shell. Uses '/bin/sh' on Unix, and process.env.ComSpec on Windows. A different -shell can be specified as a string. See Shell Requirements and -Default Windows Shell. Default: false (no shell).
                                                                                                                                                                                              • +shell can be specified as a string. See Shell requirements and +Default Windows shell. Default: false (no shell).
                                                                                                                                                                                            • Returns: <Buffer> | <string> The stdout from the command.
                                                                                                                                                                                            • @@ -15532,8 +16147,7 @@
                                                                                                                                                                                              • command <string> The command to run.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                options <Object>

                                                                                                                                                                                                +
                                                                                                                                                                                              • options <Object>
                                                                                                                                                                                                • cwd <string> Current working directory of the child process.
                                                                                                                                                                                                • input <string> | <Buffer> | <TypedArray> | <DataView> The value which will be passed @@ -15544,7 +16158,7 @@ Default: 'pipe'.
                                                                                                                                                                                                • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                                • shell <string> Shell to execute the command with. See -Shell Requirements and Default Windows Shell. Default: +Shell requirements and Default Windows shell. Default: '/bin/sh' on Unix, process.env.ComSpec on Windows.
                                                                                                                                                                                                • uid <number> Sets the user identity of the process. (See setuid(2)).
                                                                                                                                                                                                • gid <number> Sets the group identity of the process. (See setgid(2)).
                                                                                                                                                                                                • @@ -15599,8 +16213,7 @@
                                                                                                                                                                                                  • command <string> The command to run.
                                                                                                                                                                                                  • args <string[]> List of string arguments.
                                                                                                                                                                                                  • -
                                                                                                                                                                                                  • -

                                                                                                                                                                                                    options <Object>

                                                                                                                                                                                                    +
                                                                                                                                                                                                  • options <Object>
                                                                                                                                                                                                    • cwd <string> Current working directory of the child process.
                                                                                                                                                                                                    • input <string> | <Buffer> | <TypedArray> | <DataView> The value which will be passed @@ -15609,7 +16222,7 @@
                                                                                                                                                                                                    • argv0 <string> Explicitly set the value of argv[0] sent to the child process. This will be set to command if not specified.
                                                                                                                                                                                                    • stdio <string> | <Array> Child's stdio configuration.
                                                                                                                                                                                                    • -
                                                                                                                                                                                                    • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                                    • +
                                                                                                                                                                                                    • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                                    • uid <number> Sets the user identity of the process (see setuid(2)).
                                                                                                                                                                                                    • gid <number> Sets the group identity of the process (see setgid(2)).
                                                                                                                                                                                                    • timeout <number> In milliseconds the maximum amount of time the process @@ -15624,8 +16237,8 @@ Default: 'buffer'.
                                                                                                                                                                                                    • shell <boolean> | <string> If true, runs command inside of a shell. Uses '/bin/sh' on Unix, and process.env.ComSpec on Windows. A different -shell can be specified as a string. See Shell Requirements and -Default Windows Shell. Default: false (no shell).
                                                                                                                                                                                                    • +shell can be specified as a string. See Shell requirements and +Default Windows shell. Default: false (no shell).
                                                                                                                                                                                                    • windowsVerbatimArguments <boolean> No quoting or escaping of arguments is done on Windows. Ignored on Unix. This is set to true automatically when shell is specified and is CMD. Default: false.
                                                                                                                                                                                                    • @@ -15633,8 +16246,7 @@ normally be created on Windows systems. Default: false.
                                                                                                                                                                                                  • -
                                                                                                                                                                                                  • -

                                                                                                                                                                                                    Returns: <Object>

                                                                                                                                                                                                    +
                                                                                                                                                                                                  • Returns: <Object>
                                                                                                                                                                                                    • pid <number> Pid of the child process.
                                                                                                                                                                                                    • output <Array> Array of results from stdio output.
                                                                                                                                                                                                    • @@ -15681,21 +16293,20 @@

                                                                                                                                                                                                      The 'close' event is emitted when the stdio streams of a child process have been closed. This is distinct from the 'exit' event, since multiple processes might share the same stdio streams.

                                                                                                                                                                                                      -
                                                                                                                                                                                                      const { spawn } = require('child_process');
                                                                                                                                                                                                      -const ls = spawn('ls', ['-lh', '/usr']);
                                                                                                                                                                                                      +
                                                                                                                                                                                                      const { spawn } = require('child_process');
                                                                                                                                                                                                      +const ls = spawn('ls', ['-lh', '/usr']);
                                                                                                                                                                                                       
                                                                                                                                                                                                      -ls.stdout.on('data', (data) => {
                                                                                                                                                                                                      -  console.log(`stdout: ${data}`);
                                                                                                                                                                                                      +ls.stdout.on('data', (data) => {
                                                                                                                                                                                                      +  console.log(`stdout: ${data}`);
                                                                                                                                                                                                       });
                                                                                                                                                                                                       
                                                                                                                                                                                                      -ls.on('close', (code) => {
                                                                                                                                                                                                      -  console.log(`child process close all stdio with code ${code}`);
                                                                                                                                                                                                      +ls.on('close', (code) => {
                                                                                                                                                                                                      +  console.log(`child process close all stdio with code ${code}`);
                                                                                                                                                                                                       });
                                                                                                                                                                                                       
                                                                                                                                                                                                      -ls.on('exit', (code) => {
                                                                                                                                                                                                      -  console.log(`child process exited with code ${code}`);
                                                                                                                                                                                                      -});
                                                                                                                                                                                                      -
                                                                                                                                                                                                      +ls.on('exit', (code) => { + console.log(`child process exited with code ${code}`); +});

                                                                                                                                                                                                      Event: 'disconnect'#

                                                                                                                                                                                                    Returns the process identifier (PID) of the child process.

                                                                                                                                                                                                    -
                                                                                                                                                                                                    const { spawn } = require('child_process');
                                                                                                                                                                                                    -const grep = spawn('grep', ['ssh']);
                                                                                                                                                                                                    +
                                                                                                                                                                                                    const { spawn } = require('child_process');
                                                                                                                                                                                                    +const grep = spawn('grep', ['ssh']);
                                                                                                                                                                                                     
                                                                                                                                                                                                    -console.log(`Spawned child pid: ${grep.pid}`);
                                                                                                                                                                                                    -grep.stdin.end();
                                                                                                                                                                                                    -
                                                                                                                                                                                                    +console.log(`Spawned child pid: ${grep.pid}`); +grep.stdin.end();

                                                                                                                                                                                                    subprocess.ref()#

                                                                                                                                                                                                  Prints to stderr the string 'Trace: ', followed by the util.format() formatted message and stack trace to the current position in the code.

                                                                                                                                                                                                  -
                                                                                                                                                                                                  console.trace('Show me');
                                                                                                                                                                                                  -// Prints: (stack trace will vary based on where trace is called)
                                                                                                                                                                                                  -//  Trace: Show me
                                                                                                                                                                                                  -//    at repl:2:9
                                                                                                                                                                                                  -//    at REPLServer.defaultEval (repl.js:248:27)
                                                                                                                                                                                                  -//    at bound (domain.js:287:14)
                                                                                                                                                                                                  -//    at REPLServer.runBound [as eval] (domain.js:300:12)
                                                                                                                                                                                                  -//    at REPLServer.<anonymous> (repl.js:412:12)
                                                                                                                                                                                                  -//    at emitOne (events.js:82:20)
                                                                                                                                                                                                  -//    at REPLServer.emit (events.js:169:7)
                                                                                                                                                                                                  -//    at REPLServer.Interface._onLine (readline.js:210:10)
                                                                                                                                                                                                  -//    at REPLServer.Interface._line (readline.js:549:8)
                                                                                                                                                                                                  -//    at REPLServer.Interface._ttyWrite (readline.js:826:14)
                                                                                                                                                                                                  -
                                                                                                                                                                                                  +
                                                                                                                                                                                                  console.trace('Show me');
                                                                                                                                                                                                  +// Prints: (stack trace will vary based on where trace is called)
                                                                                                                                                                                                  +//  Trace: Show me
                                                                                                                                                                                                  +//    at repl:2:9
                                                                                                                                                                                                  +//    at REPLServer.defaultEval (repl.js:248:27)
                                                                                                                                                                                                  +//    at bound (domain.js:287:14)
                                                                                                                                                                                                  +//    at REPLServer.runBound [as eval] (domain.js:300:12)
                                                                                                                                                                                                  +//    at REPLServer.<anonymous> (repl.js:412:12)
                                                                                                                                                                                                  +//    at emitOne (events.js:82:20)
                                                                                                                                                                                                  +//    at REPLServer.emit (events.js:169:7)
                                                                                                                                                                                                  +//    at REPLServer.Interface._onLine (readline.js:210:10)
                                                                                                                                                                                                  +//    at REPLServer.Interface._line (readline.js:549:8)
                                                                                                                                                                                                  +//    at REPLServer.Interface._ttyWrite (readline.js:826:14)

                                                                                                                                                                                                  console.warn([data][, ...args])#

                                                                                                                                                                                                -
                                                                                                                                                                                                const { Certificate } = require('crypto');
                                                                                                                                                                                                -const spkac = getSpkacSomehow();
                                                                                                                                                                                                -const challenge = Certificate.exportChallenge(spkac);
                                                                                                                                                                                                -console.log(challenge.toString('utf8'));
                                                                                                                                                                                                -// Prints: the challenge as a UTF8 string
                                                                                                                                                                                                -
                                                                                                                                                                                                +
                                                                                                                                                                                                const { Certificate } = require('crypto');
                                                                                                                                                                                                +const spkac = getSpkacSomehow();
                                                                                                                                                                                                +const challenge = Certificate.exportChallenge(spkac);
                                                                                                                                                                                                +console.log(challenge.toString('utf8'));
                                                                                                                                                                                                +// Prints: the challenge as a UTF8 string

                                                                                                                                                                                                Certificate.exportPublicKey(spkac[, encoding])#

                                                                                                                                                                                              • Returns: <Buffer> The public key component of the spkac data structure, which includes a public key and a challenge.
                                                                                                                                                                                              -
                                                                                                                                                                                              const { Certificate } = require('crypto');
                                                                                                                                                                                              -const spkac = getSpkacSomehow();
                                                                                                                                                                                              -const publicKey = Certificate.exportPublicKey(spkac);
                                                                                                                                                                                              -console.log(publicKey);
                                                                                                                                                                                              -// Prints: the public key as <Buffer ...>
                                                                                                                                                                                              -
                                                                                                                                                                                              +
                                                                                                                                                                                              const { Certificate } = require('crypto');
                                                                                                                                                                                              +const spkac = getSpkacSomehow();
                                                                                                                                                                                              +const publicKey = Certificate.exportPublicKey(spkac);
                                                                                                                                                                                              +console.log(publicKey);
                                                                                                                                                                                              +// Prints: the public key as <Buffer ...>

                                                                                                                                                                                              Certificate.verifySpkac(spkac)#

                                                                                                                                                                                            -
                                                                                                                                                                                            const { Certificate } = require('crypto');
                                                                                                                                                                                            -const spkac = getSpkacSomehow();
                                                                                                                                                                                            -console.log(Certificate.verifySpkac(Buffer.from(spkac)));
                                                                                                                                                                                            -// Prints: true or false
                                                                                                                                                                                            -
                                                                                                                                                                                            +
                                                                                                                                                                                            const { Certificate } = require('crypto');
                                                                                                                                                                                            +const spkac = getSpkacSomehow();
                                                                                                                                                                                            +console.log(Certificate.verifySpkac(Buffer.from(spkac)));
                                                                                                                                                                                            +// Prints: true or false

                                                                                                                                                                                            Legacy API#

                                                                                                                                                                                            -

                                                                                                                                                                                            As a still supported legacy interface, it is possible (but not recommended) to -create new instances of the crypto.Certificate class as illustrated in the -examples below.

                                                                                                                                                                                            +

                                                                                                                                                                                            As a still supported legacy interface, it is possible to create new instances of +the crypto.Certificate class as illustrated in the examples below.

                                                                                                                                                                                            new crypto.Certificate()#

                                                                                                                                                                                            Instances of the Certificate class can be created using the new keyword or by calling crypto.Certificate() as a function:

                                                                                                                                                                                            -
                                                                                                                                                                                            const crypto = require('crypto');
                                                                                                                                                                                            +
                                                                                                                                                                                            const crypto = require('crypto');
                                                                                                                                                                                             
                                                                                                                                                                                            -const cert1 = new crypto.Certificate();
                                                                                                                                                                                            -const cert2 = crypto.Certificate();
                                                                                                                                                                                            -
                                                                                                                                                                                            +const cert1 = new crypto.Certificate(); +const cert2 = crypto.Certificate();

                                                                                                                                                                                            certificate.exportChallenge(spkac)#

                                                                                                                                                                                          • Returns: <Buffer> The challenge component of the spkac data structure, which includes a public key and a challenge.
                                                                                                                                                                                          -
                                                                                                                                                                                          const cert = require('crypto').Certificate();
                                                                                                                                                                                          -const spkac = getSpkacSomehow();
                                                                                                                                                                                          -const challenge = cert.exportChallenge(spkac);
                                                                                                                                                                                          -console.log(challenge.toString('utf8'));
                                                                                                                                                                                          -// Prints: the challenge as a UTF8 string
                                                                                                                                                                                          -
                                                                                                                                                                                          +
                                                                                                                                                                                          const cert = require('crypto').Certificate();
                                                                                                                                                                                          +const spkac = getSpkacSomehow();
                                                                                                                                                                                          +const challenge = cert.exportChallenge(spkac);
                                                                                                                                                                                          +console.log(challenge.toString('utf8'));
                                                                                                                                                                                          +// Prints: the challenge as a UTF8 string

                                                                                                                                                                                          certificate.exportPublicKey(spkac)#

                                                                                                                                                                                        -
                                                                                                                                                                                        const cert = require('crypto').Certificate();
                                                                                                                                                                                        -const spkac = getSpkacSomehow();
                                                                                                                                                                                        -const publicKey = cert.exportPublicKey(spkac);
                                                                                                                                                                                        -console.log(publicKey);
                                                                                                                                                                                        -// Prints: the public key as <Buffer ...>
                                                                                                                                                                                        -
                                                                                                                                                                                        +
                                                                                                                                                                                        const cert = require('crypto').Certificate();
                                                                                                                                                                                        +const spkac = getSpkacSomehow();
                                                                                                                                                                                        +const publicKey = cert.exportPublicKey(spkac);
                                                                                                                                                                                        +console.log(publicKey);
                                                                                                                                                                                        +// Prints: the public key as <Buffer ...>

                                                                                                                                                                                        certificate.verifySpkac(spkac)#

                                                                                                                                                                                      -
                                                                                                                                                                                      const cert = require('crypto').Certificate();
                                                                                                                                                                                      -const spkac = getSpkacSomehow();
                                                                                                                                                                                      -console.log(cert.verifySpkac(Buffer.from(spkac)));
                                                                                                                                                                                      -// Prints: true or false
                                                                                                                                                                                      -
                                                                                                                                                                                      +
                                                                                                                                                                                      const cert = require('crypto').Certificate();
                                                                                                                                                                                      +const spkac = getSpkacSomehow();
                                                                                                                                                                                      +console.log(cert.verifySpkac(Buffer.from(spkac)));
                                                                                                                                                                                      +// Prints: true or false

                                                                                                                                                                                      Class: Cipher#

                                                                                                                                                                                      • ip <string>
                                                                                                                                                                                      • -
                                                                                                                                                                                      • -

                                                                                                                                                                                        callback <Function>

                                                                                                                                                                                        +
                                                                                                                                                                                      • callback <Function>
                                                                                                                                                                                        • err <Error>
                                                                                                                                                                                        • hostnames <string[]>
                                                                                                                                                                                        • @@ -25024,12 +25623,11 @@ resolution. The servers argument is an array of RFC 5952 formatted addresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                          dns.setServers([
                                                                                                                                                                                          -  '4.4.4.4',
                                                                                                                                                                                          -  '[2001:4860:4860::8888]',
                                                                                                                                                                                          -  '4.4.4.4:1053',
                                                                                                                                                                                          -  '[2001:4860:4860::8888]:1053'
                                                                                                                                                                                          -]);
                                                                                                                                                                                          -
                                                                                                                                                                                          + '4.4.4.4', + '[2001:4860:4860::8888]', + '4.4.4.4:1053', + '[2001:4860:4860::8888]:1053' +]);

                                                                                                                                                                                          An error will be thrown if an invalid address is provided.

                                                                                                                                                                                          The dns.setServers() method must not be called while a DNS query is in progress.

                                                                                                                                                                                          @@ -25037,12 +25635,12 @@ dns.resolve*() and dns.reverse() (and specifically not dns.lookup()).

                                                                                                                                                                                          This method works much like -resolve.conf. +resolve.conf. That is, if attempting to resolve with the first server provided results in a NOTFOUND error, the resolve() method will not attempt to resolve with subsequent servers provided. Fallback DNS servers will only be used if the earlier ones time out or result in some other error.

                                                                                                                                                                                          -

                                                                                                                                                                                          DNS Promises API#

                                                                                                                                                                                          +

                                                                                                                                                                                          DNS promises API#

                                                                                                                                                                                          The dns.promises API provides an alternative set of asynchronous DNS methods that return Promise objects rather than using callbacks. The API is accessible via require('dns').promises.

                                                                                                                                                                                          @@ -25055,20 +25653,19 @@ the servers used for a resolver using resolver.setServers() does not affect other resolvers:

                                                                                                                                                                                          -
                                                                                                                                                                                          const { Resolver } = require('dns').promises;
                                                                                                                                                                                          -const resolver = new Resolver();
                                                                                                                                                                                          -resolver.setServers(['4.4.4.4']);
                                                                                                                                                                                          -
                                                                                                                                                                                          -// This request will use the server at 4.4.4.4, independent of global settings.
                                                                                                                                                                                          -resolver.resolve4('example.org').then((addresses) => {
                                                                                                                                                                                          -  // ...
                                                                                                                                                                                          +
                                                                                                                                                                                          const { Resolver } = require('dns').promises;
                                                                                                                                                                                          +const resolver = new Resolver();
                                                                                                                                                                                          +resolver.setServers(['4.4.4.4']);
                                                                                                                                                                                          +
                                                                                                                                                                                          +// This request will use the server at 4.4.4.4, independent of global settings.
                                                                                                                                                                                          +resolver.resolve4('example.org').then((addresses) => {
                                                                                                                                                                                          +  // ...
                                                                                                                                                                                           });
                                                                                                                                                                                           
                                                                                                                                                                                          -// Alternatively, the same code can be written using async-await style.
                                                                                                                                                                                          -(async function() {
                                                                                                                                                                                          -  const addresses = await resolver.resolve4('example.org');
                                                                                                                                                                                          -})();
                                                                                                                                                                                          -
                                                                                                                                                                                          +// Alternatively, the same code can be written using async-await style. +(async function() { + const addresses = await resolver.resolve4('example.org'); +})();

                                                                                                                                                                                          The following methods from the dnsPromises API are available:

                                                                                                                                                                                          • resolver.getServers()
                                                                                                                                                                                          • @@ -25099,20 +25696,18 @@ section if a custom port is used.

                                                                                                                                                                                            [
                                                                                                                                                                                            -  '4.4.4.4',
                                                                                                                                                                                            -  '2001:4860:4860::8888',
                                                                                                                                                                                            -  '4.4.4.4:1053',
                                                                                                                                                                                            -  '[2001:4860:4860::8888]:1053'
                                                                                                                                                                                            -]
                                                                                                                                                                                            -
                                                                                                                                                                                            + '4.4.4.4', + '2001:4860:4860::8888', + '4.4.4.4:1053', + '[2001:4860:4860::8888]:1053' +]

                                                                                                                                                                                            dnsPromises.lookup(hostname[, options])#

                                                                                                                                                                                            • hostname <string>
                                                                                                                                                                                            • -
                                                                                                                                                                                            • -

                                                                                                                                                                                              options <integer> | <Object>

                                                                                                                                                                                              +
                                                                                                                                                                                            • options <integer> | <Object>
                                                                                                                                                                                              • family <integer> The record family. Must be 4, 6, or 0. The value 0 indicates that IPv4 and IPv6 addresses are both returned. Default: @@ -25148,25 +25743,24 @@ take some time to consult the Implementation considerations section before using dnsPromises.lookup().

                                                                                                                                                                                                Example usage:

                                                                                                                                                                                                -
                                                                                                                                                                                                const dns = require('dns');
                                                                                                                                                                                                -const dnsPromises = dns.promises;
                                                                                                                                                                                                -const options = {
                                                                                                                                                                                                -  family: 6,
                                                                                                                                                                                                -  hints: dns.ADDRCONFIG | dns.V4MAPPED,
                                                                                                                                                                                                +
                                                                                                                                                                                                const dns = require('dns');
                                                                                                                                                                                                +const dnsPromises = dns.promises;
                                                                                                                                                                                                +const options = {
                                                                                                                                                                                                +  family: 6,
                                                                                                                                                                                                +  hints: dns.ADDRCONFIG | dns.V4MAPPED,
                                                                                                                                                                                                 };
                                                                                                                                                                                                 
                                                                                                                                                                                                -dnsPromises.lookup('example.com', options).then((result) => {
                                                                                                                                                                                                -  console.log('address: %j family: IPv%s', result.address, result.family);
                                                                                                                                                                                                -  // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
                                                                                                                                                                                                +dnsPromises.lookup('example.com', options).then((result) => {
                                                                                                                                                                                                +  console.log('address: %j family: IPv%s', result.address, result.family);
                                                                                                                                                                                                +  // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
                                                                                                                                                                                                 });
                                                                                                                                                                                                 
                                                                                                                                                                                                -// When options.all is true, the result will be an Array.
                                                                                                                                                                                                -options.all = true;
                                                                                                                                                                                                -dnsPromises.lookup('example.com', options).then((result) => {
                                                                                                                                                                                                -  console.log('addresses: %j', result);
                                                                                                                                                                                                -  // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}]
                                                                                                                                                                                                -});
                                                                                                                                                                                                -
                                                                                                                                                                                                +// When options.all is true, the result will be an Array. +options.all = true; +dnsPromises.lookup('example.com', options).then((result) => { + console.log('addresses: %j', result); + // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] +});

                                                                                                                                                                                                dnsPromises.lookupService(address, port)#

                                                                                                                                                                                                • hostname <string> Host name to resolve.
                                                                                                                                                                                                • -
                                                                                                                                                                                                • -

                                                                                                                                                                                                  options <Object>

                                                                                                                                                                                                  +
                                                                                                                                                                                                • options <Object>
                                                                                                                                                                                                  • ttl <boolean> Retrieve the Time-To-Live value (TTL) of each record. When true, the Promise is resolved with an array of @@ -25382,20 +25973,19 @@
                                                                                                                                                                                                    TypeProperties
                                                                                                                                                                                                    'A'address/ttl
                                                                                                                                                                                                    'AAAA'address/ttl
                                                                                                                                                                                                    'CNAME'value
                                                                                                                                                                                                    'MX'Refer to dnsPromises.resolveMx()
                                                                                                                                                                                                    'NAPTR'Refer to dnsPromises.resolveNaptr()
                                                                                                                                                                                                    'NS'value
                                                                                                                                                                                                    'PTR'value
                                                                                                                                                                                                    'SOA'Refer to dnsPromises.resolveSoa()
                                                                                                                                                                                                    'SRV'Refer to dnsPromises.resolveSrv()
                                                                                                                                                                                                    'TXT'This type of record contains an array property called entries which refers to dnsPromises.resolveTxt(), e.g. { entries: ['...'], type: 'TXT' }

                                                                                                                                                                                                    Here is an example of the result object:

                                                                                                                                                                                                    -
                                                                                                                                                                                                    [ { type: 'A', address: '127.0.0.1', ttl: 299 },
                                                                                                                                                                                                    -  { type: 'CNAME', value: 'example.com' },
                                                                                                                                                                                                    -  { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
                                                                                                                                                                                                    -  { type: 'NS', value: 'ns1.example.com' },
                                                                                                                                                                                                    -  { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
                                                                                                                                                                                                    -  { type: 'SOA',
                                                                                                                                                                                                    -    nsname: 'ns1.example.com',
                                                                                                                                                                                                    -    hostmaster: 'admin.example.com',
                                                                                                                                                                                                    -    serial: 156696742,
                                                                                                                                                                                                    -    refresh: 900,
                                                                                                                                                                                                    -    retry: 900,
                                                                                                                                                                                                    -    expire: 1800,
                                                                                                                                                                                                    -    minttl: 60 } ]
                                                                                                                                                                                                    -
                                                                                                                                                                                                    +
                                                                                                                                                                                                    [ { type: 'A', address: '127.0.0.1', ttl: 299 },
                                                                                                                                                                                                    +  { type: 'CNAME', value: 'example.com' },
                                                                                                                                                                                                    +  { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
                                                                                                                                                                                                    +  { type: 'NS', value: 'ns1.example.com' },
                                                                                                                                                                                                    +  { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
                                                                                                                                                                                                    +  { type: 'SOA',
                                                                                                                                                                                                    +    nsname: 'ns1.example.com',
                                                                                                                                                                                                    +    hostmaster: 'admin.example.com',
                                                                                                                                                                                                    +    serial: 156696742,
                                                                                                                                                                                                    +    refresh: 900,
                                                                                                                                                                                                    +    retry: 900,
                                                                                                                                                                                                    +    expire: 1800,
                                                                                                                                                                                                    +    minttl: 60 } ]

                                                                                                                                                                                                    dnsPromises.resolveCname(hostname)#

                                                                                                                                                                                                  {
                                                                                                                                                                                                  -  flags: 's',
                                                                                                                                                                                                  -  service: 'SIP+D2U',
                                                                                                                                                                                                  -  regexp: '',
                                                                                                                                                                                                  -  replacement: '_sip._udp.example.com',
                                                                                                                                                                                                  -  order: 30,
                                                                                                                                                                                                  -  preference: 100
                                                                                                                                                                                                  -}
                                                                                                                                                                                                  -
                                                                                                                                                                                                  + flags: 's', + service: 'SIP+D2U', + regexp: '', + replacement: '_sip._udp.example.com', + order: 30, + preference: 100 +}

                                                                                                                                                                                                  dnsPromises.resolveNs(hostname)#

                                                                                                                                                                                                {
                                                                                                                                                                                                -  nsname: 'ns.example.com',
                                                                                                                                                                                                -  hostmaster: 'root.example.com',
                                                                                                                                                                                                -  serial: 2013101809,
                                                                                                                                                                                                -  refresh: 10000,
                                                                                                                                                                                                -  retry: 2400,
                                                                                                                                                                                                -  expire: 604800,
                                                                                                                                                                                                -  minttl: 3600
                                                                                                                                                                                                -}
                                                                                                                                                                                                -
                                                                                                                                                                                                + nsname: 'ns.example.com', + hostmaster: 'root.example.com', + serial: 2013101809, + refresh: 10000, + retry: 2400, + expire: 604800, + minttl: 3600 +}

                                                                                                                                                                                                dnsPromises.resolveSrv(hostname)#

                                                                                                                                                                                              {
                                                                                                                                                                                              -  priority: 10,
                                                                                                                                                                                              -  weight: 5,
                                                                                                                                                                                              -  port: 21223,
                                                                                                                                                                                              -  name: 'service.example.com'
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              + priority: 10, + weight: 5, + port: 21223, + name: 'service.example.com' +}

                                                                                                                                                                                              dnsPromises.resolveTxt(hostname)#

                                                                                                                                                                                              Stability: 0 - Deprecated

                                                                                                                                                                                              +

                                                                                                                                                                                              Source Code: lib/domain.js

                                                                                                                                                                                              This module is pending deprecation. Once a replacement API has been -finalized, this module will be fully deprecated. Most end users should +finalized, this module will be fully deprecated. Most developers should not have cause to use this module. Users who absolutely must have the functionality that domains provide may rely on it for the time being but should expect to have to migrate to a different solution @@ -25657,7 +26246,7 @@ will be notified, rather than losing the context of the error in the process.on('uncaughtException') handler, or causing the program to exit immediately with an error code.

                                                                                                                                                                                              -

                                                                                                                                                                                              Warning: Don't Ignore Errors!#

                                                                                                                                                                                              +

                                                                                                                                                                                              Warning: Don't ignore errors!#

                                                                                                                                                                                              Domain error handlers are not a substitute for closing down a process when an error occurs.

                                                                                                                                                                                              @@ -25677,127 +26266,125 @@ machines, the terminating proxy or service registry can take note of the failure, and react accordingly.

                                                                                                                                                                                              For example, this is not a good idea:

                                                                                                                                                                                              -
                                                                                                                                                                                              // XXX WARNING! BAD IDEA!
                                                                                                                                                                                              +
                                                                                                                                                                                              // XXX WARNING! BAD IDEA!
                                                                                                                                                                                               
                                                                                                                                                                                              -const d = require('domain').create();
                                                                                                                                                                                              -d.on('error', (er) => {
                                                                                                                                                                                              -  // The error won't crash the process, but what it does is worse!
                                                                                                                                                                                              -  // Though we've prevented abrupt process restarting, we are leaking
                                                                                                                                                                                              -  // resources like crazy if this ever happens.
                                                                                                                                                                                              -  // This is no better than process.on('uncaughtException')!
                                                                                                                                                                                              -  console.log(`error, but oh well ${er.message}`);
                                                                                                                                                                                              +const d = require('domain').create();
                                                                                                                                                                                              +d.on('error', (er) => {
                                                                                                                                                                                              +  // The error won't crash the process, but what it does is worse!
                                                                                                                                                                                              +  // Though we've prevented abrupt process restarting, we are leaking
                                                                                                                                                                                              +  // resources like crazy if this ever happens.
                                                                                                                                                                                              +  // This is no better than process.on('uncaughtException')!
                                                                                                                                                                                              +  console.log(`error, but oh well ${er.message}`);
                                                                                                                                                                                               });
                                                                                                                                                                                              -d.run(() => {
                                                                                                                                                                                              -  require('http').createServer((req, res) => {
                                                                                                                                                                                              +d.run(() => {
                                                                                                                                                                                              +  require('http').createServer((req, res) => {
                                                                                                                                                                                                   handleRequest(req, res);
                                                                                                                                                                                                 }).listen(PORT);
                                                                                                                                                                                              -});
                                                                                                                                                                                              -
                                                                                                                                                                                              +});

                                                                                                                                                                                              By using the context of a domain, and the resilience of separating our program into multiple worker processes, we can react more appropriately, and handle errors with much greater safety.

                                                                                                                                                                                              -
                                                                                                                                                                                              // Much better!
                                                                                                                                                                                              +
                                                                                                                                                                                              // Much better!
                                                                                                                                                                                               
                                                                                                                                                                                              -const cluster = require('cluster');
                                                                                                                                                                                              -const PORT = +process.env.PORT || 1337;
                                                                                                                                                                                              +const cluster = require('cluster');
                                                                                                                                                                                              +const PORT = +process.env.PORT || 1337;
                                                                                                                                                                                               
                                                                                                                                                                                              -if (cluster.isMaster) {
                                                                                                                                                                                              -  // A more realistic scenario would have more than 2 workers,
                                                                                                                                                                                              -  // and perhaps not put the master and worker in the same file.
                                                                                                                                                                                              -  //
                                                                                                                                                                                              -  // It is also possible to get a bit fancier about logging, and
                                                                                                                                                                                              -  // implement whatever custom logic is needed to prevent DoS
                                                                                                                                                                                              -  // attacks and other bad behavior.
                                                                                                                                                                                              -  //
                                                                                                                                                                                              -  // See the options in the cluster documentation.
                                                                                                                                                                                              -  //
                                                                                                                                                                                              -  // The important thing is that the master does very little,
                                                                                                                                                                                              -  // increasing our resilience to unexpected errors.
                                                                                                                                                                                              +if (cluster.isMaster) {
                                                                                                                                                                                              +  // A more realistic scenario would have more than 2 workers,
                                                                                                                                                                                              +  // and perhaps not put the master and worker in the same file.
                                                                                                                                                                                              +  //
                                                                                                                                                                                              +  // It is also possible to get a bit fancier about logging, and
                                                                                                                                                                                              +  // implement whatever custom logic is needed to prevent DoS
                                                                                                                                                                                              +  // attacks and other bad behavior.
                                                                                                                                                                                              +  //
                                                                                                                                                                                              +  // See the options in the cluster documentation.
                                                                                                                                                                                              +  //
                                                                                                                                                                                              +  // The important thing is that the master does very little,
                                                                                                                                                                                              +  // increasing our resilience to unexpected errors.
                                                                                                                                                                                               
                                                                                                                                                                                                 cluster.fork();
                                                                                                                                                                                                 cluster.fork();
                                                                                                                                                                                               
                                                                                                                                                                                              -  cluster.on('disconnect', (worker) => {
                                                                                                                                                                                              -    console.error('disconnect!');
                                                                                                                                                                                              +  cluster.on('disconnect', (worker) => {
                                                                                                                                                                                              +    console.error('disconnect!');
                                                                                                                                                                                                   cluster.fork();
                                                                                                                                                                                                 });
                                                                                                                                                                                               
                                                                                                                                                                                              -} else {
                                                                                                                                                                                              -  // the worker
                                                                                                                                                                                              -  //
                                                                                                                                                                                              -  // This is where we put our bugs!
                                                                                                                                                                                              -
                                                                                                                                                                                              -  const domain = require('domain');
                                                                                                                                                                                              -
                                                                                                                                                                                              -  // See the cluster documentation for more details about using
                                                                                                                                                                                              -  // worker processes to serve requests. How it works, caveats, etc.
                                                                                                                                                                                              -
                                                                                                                                                                                              -  const server = require('http').createServer((req, res) => {
                                                                                                                                                                                              -    const d = domain.create();
                                                                                                                                                                                              -    d.on('error', (er) => {
                                                                                                                                                                                              -      console.error(`error ${er.stack}`);
                                                                                                                                                                                              -
                                                                                                                                                                                              -      // We're in dangerous territory!
                                                                                                                                                                                              -      // By definition, something unexpected occurred,
                                                                                                                                                                                              -      // which we probably didn't want.
                                                                                                                                                                                              -      // Anything can happen now! Be very careful!
                                                                                                                                                                                              -
                                                                                                                                                                                              -      try {
                                                                                                                                                                                              -        // Make sure we close down within 30 seconds
                                                                                                                                                                                              -        const killtimer = setTimeout(() => {
                                                                                                                                                                                              -          process.exit(1);
                                                                                                                                                                                              -        }, 30000);
                                                                                                                                                                                              -        // But don't keep the process open just for that!
                                                                                                                                                                                              +} else {
                                                                                                                                                                                              +  // the worker
                                                                                                                                                                                              +  //
                                                                                                                                                                                              +  // This is where we put our bugs!
                                                                                                                                                                                              +
                                                                                                                                                                                              +  const domain = require('domain');
                                                                                                                                                                                              +
                                                                                                                                                                                              +  // See the cluster documentation for more details about using
                                                                                                                                                                                              +  // worker processes to serve requests. How it works, caveats, etc.
                                                                                                                                                                                              +
                                                                                                                                                                                              +  const server = require('http').createServer((req, res) => {
                                                                                                                                                                                              +    const d = domain.create();
                                                                                                                                                                                              +    d.on('error', (er) => {
                                                                                                                                                                                              +      console.error(`error ${er.stack}`);
                                                                                                                                                                                              +
                                                                                                                                                                                              +      // We're in dangerous territory!
                                                                                                                                                                                              +      // By definition, something unexpected occurred,
                                                                                                                                                                                              +      // which we probably didn't want.
                                                                                                                                                                                              +      // Anything can happen now! Be very careful!
                                                                                                                                                                                              +
                                                                                                                                                                                              +      try {
                                                                                                                                                                                              +        // Make sure we close down within 30 seconds
                                                                                                                                                                                              +        const killtimer = setTimeout(() => {
                                                                                                                                                                                              +          process.exit(1);
                                                                                                                                                                                              +        }, 30000);
                                                                                                                                                                                              +        // But don't keep the process open just for that!
                                                                                                                                                                                                       killtimer.unref();
                                                                                                                                                                                               
                                                                                                                                                                                              -        // Stop taking new requests.
                                                                                                                                                                                              +        // Stop taking new requests.
                                                                                                                                                                                                       server.close();
                                                                                                                                                                                               
                                                                                                                                                                                              -        // Let the master know we're dead. This will trigger a
                                                                                                                                                                                              -        // 'disconnect' in the cluster master, and then it will fork
                                                                                                                                                                                              -        // a new worker.
                                                                                                                                                                                              +        // Let the master know we're dead. This will trigger a
                                                                                                                                                                                              +        // 'disconnect' in the cluster master, and then it will fork
                                                                                                                                                                                              +        // a new worker.
                                                                                                                                                                                                       cluster.worker.disconnect();
                                                                                                                                                                                               
                                                                                                                                                                                              -        // Try to send an error to the request that triggered the problem
                                                                                                                                                                                              -        res.statusCode = 500;
                                                                                                                                                                                              -        res.setHeader('content-type', 'text/plain');
                                                                                                                                                                                              -        res.end('Oops, there was a problem!\n');
                                                                                                                                                                                              -      } catch (er2) {
                                                                                                                                                                                              -        // Oh well, not much we can do at this point.
                                                                                                                                                                                              -        console.error(`Error sending 500! ${er2.stack}`);
                                                                                                                                                                                              +        // Try to send an error to the request that triggered the problem
                                                                                                                                                                                              +        res.statusCode = 500;
                                                                                                                                                                                              +        res.setHeader('content-type', 'text/plain');
                                                                                                                                                                                              +        res.end('Oops, there was a problem!\n');
                                                                                                                                                                                              +      } catch (er2) {
                                                                                                                                                                                              +        // Oh well, not much we can do at this point.
                                                                                                                                                                                              +        console.error(`Error sending 500! ${er2.stack}`);
                                                                                                                                                                                                     }
                                                                                                                                                                                                   });
                                                                                                                                                                                               
                                                                                                                                                                                              -    // Because req and res were created before this domain existed,
                                                                                                                                                                                              -    // we need to explicitly add them.
                                                                                                                                                                                              -    // See the explanation of implicit vs explicit binding below.
                                                                                                                                                                                              +    // Because req and res were created before this domain existed,
                                                                                                                                                                                              +    // we need to explicitly add them.
                                                                                                                                                                                              +    // See the explanation of implicit vs explicit binding below.
                                                                                                                                                                                                   d.add(req);
                                                                                                                                                                                                   d.add(res);
                                                                                                                                                                                               
                                                                                                                                                                                              -    // Now run the handler function in the domain.
                                                                                                                                                                                              -    d.run(() => {
                                                                                                                                                                                              +    // Now run the handler function in the domain.
                                                                                                                                                                                              +    d.run(() => {
                                                                                                                                                                                                     handleRequest(req, res);
                                                                                                                                                                                                   });
                                                                                                                                                                                                 });
                                                                                                                                                                                                 server.listen(PORT);
                                                                                                                                                                                               }
                                                                                                                                                                                               
                                                                                                                                                                                              -// This part is not important. Just an example routing thing.
                                                                                                                                                                                              -// Put fancy application logic here.
                                                                                                                                                                                              -function handleRequest(req, res) {
                                                                                                                                                                                              -  switch (req.url) {
                                                                                                                                                                                              -    case '/error':
                                                                                                                                                                                              -      // We do some async stuff, and then...
                                                                                                                                                                                              -      setTimeout(() => {
                                                                                                                                                                                              -        // Whoops!
                                                                                                                                                                                              +// This part is not important. Just an example routing thing.
                                                                                                                                                                                              +// Put fancy application logic here.
                                                                                                                                                                                              +function handleRequest(req, res) {
                                                                                                                                                                                              +  switch (req.url) {
                                                                                                                                                                                              +    case '/error':
                                                                                                                                                                                              +      // We do some async stuff, and then...
                                                                                                                                                                                              +      setTimeout(() => {
                                                                                                                                                                                              +        // Whoops!
                                                                                                                                                                                                       flerb.bark();
                                                                                                                                                                                                     }, timeout);
                                                                                                                                                                                              -      break;
                                                                                                                                                                                              -    default:
                                                                                                                                                                                              -      res.end('ok');
                                                                                                                                                                                              +      break;
                                                                                                                                                                                              +    default:
                                                                                                                                                                                              +      res.end('ok');
                                                                                                                                                                                                 }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              +}

                                                                                                                                                                                              Additions to Error objects#

                                                                                                                                                                                              Any time an Error object is routed through a domain, a few extra fields @@ -25811,7 +26398,7 @@

                                                                                                                                                                                            • error.domainThrown A boolean indicating whether the error was thrown, emitted, or passed to a bound callback function.
                                                                                                                                                                                            -

                                                                                                                                                                                            Implicit Binding#

                                                                                                                                                                                            +

                                                                                                                                                                                            Implicit binding#

                                                                                                                                                                                            If domains are in use, then all new EventEmitter objects (including Stream objects, requests, responses, etc.) will be implicitly bound to @@ -25830,7 +26417,7 @@ Domain's 'error' event, but does not register the EventEmitter on the Domain. Implicit binding only takes care of thrown errors and 'error' events.

                                                                                                                                                                                            -

                                                                                                                                                                                            Explicit Binding#

                                                                                                                                                                                            +

                                                                                                                                                                                            Explicit binding#

                                                                                                                                                                                            Sometimes, the domain in use is not the one that ought to be used for a specific event emitter. Or, the event emitter could have been created @@ -25839,32 +26426,31 @@

                                                                                                                                                                                            For example, there could be one domain in use for an HTTP server, but perhaps we would like to have a separate domain to use for each request.

                                                                                                                                                                                            That is possible via explicit binding.

                                                                                                                                                                                            -
                                                                                                                                                                                            // Create a top-level domain for the server
                                                                                                                                                                                            -const domain = require('domain');
                                                                                                                                                                                            -const http = require('http');
                                                                                                                                                                                            -const serverDomain = domain.create();
                                                                                                                                                                                            -
                                                                                                                                                                                            -serverDomain.run(() => {
                                                                                                                                                                                            -  // Server is created in the scope of serverDomain
                                                                                                                                                                                            -  http.createServer((req, res) => {
                                                                                                                                                                                            -    // Req and res are also created in the scope of serverDomain
                                                                                                                                                                                            -    // however, we'd prefer to have a separate domain for each request.
                                                                                                                                                                                            -    // create it first thing, and add req and res to it.
                                                                                                                                                                                            -    const reqd = domain.create();
                                                                                                                                                                                            +
                                                                                                                                                                                            // Create a top-level domain for the server
                                                                                                                                                                                            +const domain = require('domain');
                                                                                                                                                                                            +const http = require('http');
                                                                                                                                                                                            +const serverDomain = domain.create();
                                                                                                                                                                                            +
                                                                                                                                                                                            +serverDomain.run(() => {
                                                                                                                                                                                            +  // Server is created in the scope of serverDomain
                                                                                                                                                                                            +  http.createServer((req, res) => {
                                                                                                                                                                                            +    // Req and res are also created in the scope of serverDomain
                                                                                                                                                                                            +    // however, we'd prefer to have a separate domain for each request.
                                                                                                                                                                                            +    // create it first thing, and add req and res to it.
                                                                                                                                                                                            +    const reqd = domain.create();
                                                                                                                                                                                                 reqd.add(req);
                                                                                                                                                                                                 reqd.add(res);
                                                                                                                                                                                            -    reqd.on('error', (er) => {
                                                                                                                                                                                            -      console.error('Error', er, req.url);
                                                                                                                                                                                            -      try {
                                                                                                                                                                                            -        res.writeHead(500);
                                                                                                                                                                                            -        res.end('Error occurred, sorry.');
                                                                                                                                                                                            -      } catch (er2) {
                                                                                                                                                                                            -        console.error('Error sending 500', er2, req.url);
                                                                                                                                                                                            +    reqd.on('error', (er) => {
                                                                                                                                                                                            +      console.error('Error', er, req.url);
                                                                                                                                                                                            +      try {
                                                                                                                                                                                            +        res.writeHead(500);
                                                                                                                                                                                            +        res.end('Error occurred, sorry.');
                                                                                                                                                                                            +      } catch (er2) {
                                                                                                                                                                                            +        console.error('Error sending 500', er2, req.url);
                                                                                                                                                                                                   }
                                                                                                                                                                                                 });
                                                                                                                                                                                            -  }).listen(1337);
                                                                                                                                                                                            -});
                                                                                                                                                                                            -
                                                                                                                                                                                            + }).listen(1337); +});

                                                                                                                                                                                            domain.create()#

                                                                                                                                                                                            • Returns: <Domain>
                                                                                                                                                                                            • @@ -25903,20 +26489,19 @@

                                                                                                                                                                                              The returned function will be a wrapper around the supplied callback function. When the returned function is called, any errors that are thrown will be routed to the domain's 'error' event.

                                                                                                                                                                                              -
                                                                                                                                                                                              const d = domain.create();
                                                                                                                                                                                              +
                                                                                                                                                                                              const d = domain.create();
                                                                                                                                                                                               
                                                                                                                                                                                              -function readSomeFile(filename, cb) {
                                                                                                                                                                                              -  fs.readFile(filename, 'utf8', d.bind((er, data) => {
                                                                                                                                                                                              -    // If this throws, it will also be passed to the domain.
                                                                                                                                                                                              -    return cb(er, data ? JSON.parse(data) : null);
                                                                                                                                                                                              +function readSomeFile(filename, cb) {
                                                                                                                                                                                              +  fs.readFile(filename, 'utf8', d.bind((er, data) => {
                                                                                                                                                                                              +    // If this throws, it will also be passed to the domain.
                                                                                                                                                                                              +    return cb(er, data ? JSON.parse(data) : null);
                                                                                                                                                                                                 }));
                                                                                                                                                                                               }
                                                                                                                                                                                               
                                                                                                                                                                                              -d.on('error', (er) => {
                                                                                                                                                                                              -  // An error occurred somewhere. If we throw it now, it will crash the program
                                                                                                                                                                                              -  // with the normal line number and stack message.
                                                                                                                                                                                              -});
                                                                                                                                                                                              -
                                                                                                                                                                                              +d.on('error', (er) => { + // An error occurred somewhere. If we throw it now, it will crash the program + // with the normal line number and stack message. +});

                                                                                                                                                                                              domain.enter()#

                                                                                                                                                                                              The enter() method is plumbing used by the run(), bind(), and intercept() methods to set the active domain. It sets domain.active and @@ -25948,27 +26533,26 @@ objects sent as the first argument to the function.

                                                                                                                                                                                              In this way, the common if (err) return callback(err); pattern can be replaced with a single error handler in a single place.

                                                                                                                                                                                              -
                                                                                                                                                                                              const d = domain.create();
                                                                                                                                                                                              +
                                                                                                                                                                                              const d = domain.create();
                                                                                                                                                                                               
                                                                                                                                                                                              -function readSomeFile(filename, cb) {
                                                                                                                                                                                              -  fs.readFile(filename, 'utf8', d.intercept((data) => {
                                                                                                                                                                                              -    // Note, the first argument is never passed to the
                                                                                                                                                                                              -    // callback since it is assumed to be the 'Error' argument
                                                                                                                                                                                              -    // and thus intercepted by the domain.
                                                                                                                                                                                              -
                                                                                                                                                                                              -    // If this throws, it will also be passed to the domain
                                                                                                                                                                                              -    // so the error-handling logic can be moved to the 'error'
                                                                                                                                                                                              -    // event on the domain instead of being repeated throughout
                                                                                                                                                                                              -    // the program.
                                                                                                                                                                                              -    return cb(null, JSON.parse(data));
                                                                                                                                                                                              +function readSomeFile(filename, cb) {
                                                                                                                                                                                              +  fs.readFile(filename, 'utf8', d.intercept((data) => {
                                                                                                                                                                                              +    // Note, the first argument is never passed to the
                                                                                                                                                                                              +    // callback since it is assumed to be the 'Error' argument
                                                                                                                                                                                              +    // and thus intercepted by the domain.
                                                                                                                                                                                              +
                                                                                                                                                                                              +    // If this throws, it will also be passed to the domain
                                                                                                                                                                                              +    // so the error-handling logic can be moved to the 'error'
                                                                                                                                                                                              +    // event on the domain instead of being repeated throughout
                                                                                                                                                                                              +    // the program.
                                                                                                                                                                                              +    return cb(null, JSON.parse(data));
                                                                                                                                                                                                 }));
                                                                                                                                                                                               }
                                                                                                                                                                                               
                                                                                                                                                                                              -d.on('error', (er) => {
                                                                                                                                                                                              -  // An error occurred somewhere. If we throw it now, it will crash the program
                                                                                                                                                                                              -  // with the normal line number and stack message.
                                                                                                                                                                                              -});
                                                                                                                                                                                              -
                                                                                                                                                                                              +d.on('error', (er) => { + // An error occurred somewhere. If we throw it now, it will crash the program + // with the normal line number and stack message. +});

                                                                                                                                                                                              domain.remove(emitter)#

                                                                                                                                                                                              • emitter <EventEmitter> | <Timer> emitter or timer to be removed from the domain
                                                                                                                                                                                              • @@ -25985,2276 +26569,510 @@ created in that context. Optionally, arguments can be passed to the function.

                                                                                                                                                                                                This is the most basic way to use a domain.

                                                                                                                                                                                                -
                                                                                                                                                                                                const domain = require('domain');
                                                                                                                                                                                                -const fs = require('fs');
                                                                                                                                                                                                -const d = domain.create();
                                                                                                                                                                                                -d.on('error', (er) => {
                                                                                                                                                                                                -  console.error('Caught error!', er);
                                                                                                                                                                                                -});
                                                                                                                                                                                                -d.run(() => {
                                                                                                                                                                                                -  process.nextTick(() => {
                                                                                                                                                                                                -    setTimeout(() => { // Simulating some various async stuff
                                                                                                                                                                                                -      fs.open('non-existent file', 'r', (er, fd) => {
                                                                                                                                                                                                -        if (er) throw er;
                                                                                                                                                                                                -        // proceed...
                                                                                                                                                                                                +
                                                                                                                                                                                                const domain = require('domain');
                                                                                                                                                                                                +const fs = require('fs');
                                                                                                                                                                                                +const d = domain.create();
                                                                                                                                                                                                +d.on('error', (er) => {
                                                                                                                                                                                                +  console.error('Caught error!', er);
                                                                                                                                                                                                +});
                                                                                                                                                                                                +d.run(() => {
                                                                                                                                                                                                +  process.nextTick(() => {
                                                                                                                                                                                                +    setTimeout(() => { // Simulating some various async stuff
                                                                                                                                                                                                +      fs.open('non-existent file', 'r', (er, fd) => {
                                                                                                                                                                                                +        if (er) throw er;
                                                                                                                                                                                                +        // proceed...
                                                                                                                                                                                                       });
                                                                                                                                                                                                -    }, 100);
                                                                                                                                                                                                +    }, 100);
                                                                                                                                                                                                   });
                                                                                                                                                                                                -});
                                                                                                                                                                                                -
                                                                                                                                                                                                +});

                                                                                                                                                                                                In this example, the d.on('error') handler will be triggered, rather than crashing the program.

                                                                                                                                                                                                -

                                                                                                                                                                                                Domains and Promises#

                                                                                                                                                                                                -

                                                                                                                                                                                                As of Node.js 8.0.0, the handlers of Promises are run inside the domain in +

                                                                                                                                                                                                Domains and promises#

                                                                                                                                                                                                +

                                                                                                                                                                                                As of Node.js 8.0.0, the handlers of promises are run inside the domain in which the call to .then() or .catch() itself was made:

                                                                                                                                                                                                -
                                                                                                                                                                                                const d1 = domain.create();
                                                                                                                                                                                                -const d2 = domain.create();
                                                                                                                                                                                                +
                                                                                                                                                                                                const d1 = domain.create();
                                                                                                                                                                                                +const d2 = domain.create();
                                                                                                                                                                                                 
                                                                                                                                                                                                -let p;
                                                                                                                                                                                                -d1.run(() => {
                                                                                                                                                                                                -  p = Promise.resolve(42);
                                                                                                                                                                                                +let p;
                                                                                                                                                                                                +d1.run(() => {
                                                                                                                                                                                                +  p = Promise.resolve(42);
                                                                                                                                                                                                 });
                                                                                                                                                                                                 
                                                                                                                                                                                                -d2.run(() => {
                                                                                                                                                                                                -  p.then((v) => {
                                                                                                                                                                                                -    // running in d2
                                                                                                                                                                                                +d2.run(() => {
                                                                                                                                                                                                +  p.then((v) => {
                                                                                                                                                                                                +    // running in d2
                                                                                                                                                                                                   });
                                                                                                                                                                                                -});
                                                                                                                                                                                                -
                                                                                                                                                                                                +});

                                                                                                                                                                                                A callback may be bound to a specific domain using domain.bind(callback):

                                                                                                                                                                                                -
                                                                                                                                                                                                const d1 = domain.create();
                                                                                                                                                                                                -const d2 = domain.create();
                                                                                                                                                                                                +
                                                                                                                                                                                                const d1 = domain.create();
                                                                                                                                                                                                +const d2 = domain.create();
                                                                                                                                                                                                 
                                                                                                                                                                                                -let p;
                                                                                                                                                                                                -d1.run(() => {
                                                                                                                                                                                                -  p = Promise.resolve(42);
                                                                                                                                                                                                +let p;
                                                                                                                                                                                                +d1.run(() => {
                                                                                                                                                                                                +  p = Promise.resolve(42);
                                                                                                                                                                                                 });
                                                                                                                                                                                                 
                                                                                                                                                                                                -d2.run(() => {
                                                                                                                                                                                                -  p.then(p.domain.bind((v) => {
                                                                                                                                                                                                -    // running in d1
                                                                                                                                                                                                +d2.run(() => {
                                                                                                                                                                                                +  p.then(p.domain.bind((v) => {
                                                                                                                                                                                                +    // running in d1
                                                                                                                                                                                                   }));
                                                                                                                                                                                                -});
                                                                                                                                                                                                -
                                                                                                                                                                                                +});

                                                                                                                                                                                                Domains will not interfere with the error handling mechanisms for -Promises. In other words, no 'error' event will be emitted for unhandled +promises. In other words, no 'error' event will be emitted for unhandled Promise rejections.

                                                                                                                                                                                                -

                                                                                                                                                                                                ECMAScript Modules#

                                                                                                                                                                                                +

                                                                                                                                                                                                Errors#

                                                                                                                                                                                                -

                                                                                                                                                                                                Stability: 1 - Experimental

                                                                                                                                                                                                -

                                                                                                                                                                                                Introduction#

                                                                                                                                                                                                - -

                                                                                                                                                                                                ECMAScript modules are the official standard format to package JavaScript -code for reuse. Modules are defined using a variety of import and -export statements.

                                                                                                                                                                                                -

                                                                                                                                                                                                The following example of an ES module exports a function:

                                                                                                                                                                                                -
                                                                                                                                                                                                // addTwo.mjs
                                                                                                                                                                                                -function addTwo(num) {
                                                                                                                                                                                                -  return num + 2;
                                                                                                                                                                                                -}
                                                                                                                                                                                                -
                                                                                                                                                                                                -export { addTwo };
                                                                                                                                                                                                -
                                                                                                                                                                                                -

                                                                                                                                                                                                The following example of an ES module imports the function from addTwo.mjs:

                                                                                                                                                                                                -
                                                                                                                                                                                                // app.mjs
                                                                                                                                                                                                -import { addTwo } from './addTwo.mjs';
                                                                                                                                                                                                -
                                                                                                                                                                                                -// Prints: 6
                                                                                                                                                                                                -console.log(addTwo(4));
                                                                                                                                                                                                -
                                                                                                                                                                                                -

                                                                                                                                                                                                Node.js fully supports ECMAScript modules as they are currently specified and -provides limited interoperability between them and the existing module format, -CommonJS.

                                                                                                                                                                                                -

                                                                                                                                                                                                Node.js contains support for ES Modules based upon the -Node.js EP for ES Modules and the ECMAScript-modules implementation.

                                                                                                                                                                                                -

                                                                                                                                                                                                Expect major changes in the implementation including interoperability support, -specifier resolution, and default behavior.

                                                                                                                                                                                                -

                                                                                                                                                                                                Enabling#

                                                                                                                                                                                                +

                                                                                                                                                                                                Applications running in Node.js will generally experience four categories of +errors:

                                                                                                                                                                                                +
                                                                                                                                                                                                  +
                                                                                                                                                                                                • Standard JavaScript errors such as <EvalError>, <SyntaxError>, <RangeError>, +<ReferenceError>, <TypeError>, and <URIError>.
                                                                                                                                                                                                • +
                                                                                                                                                                                                • System errors triggered by underlying operating system constraints such +as attempting to open a file that does not exist or attempting to send data +over a closed socket.
                                                                                                                                                                                                • +
                                                                                                                                                                                                • User-specified errors triggered by application code.
                                                                                                                                                                                                • +
                                                                                                                                                                                                • AssertionErrors are a special class of error that can be triggered when +Node.js detects an exceptional logic violation that should never occur. These +are raised typically by the assert module.
                                                                                                                                                                                                • +
                                                                                                                                                                                                +

                                                                                                                                                                                                All JavaScript and system errors raised by Node.js inherit from, or are +instances of, the standard JavaScript <Error> class and are guaranteed +to provide at least the properties available on that class.

                                                                                                                                                                                                +

                                                                                                                                                                                                Error propagation and interception#

                                                                                                                                                                                                -

                                                                                                                                                                                                Experimental support for ECMAScript modules is enabled by default. -Node.js will treat the following as ES modules when passed to node as the -initial input, or when referenced by import statements within ES module code:

                                                                                                                                                                                                +

                                                                                                                                                                                                Node.js supports several mechanisms for propagating and handling errors that +occur while an application is running. How these errors are reported and +handled depends entirely on the type of Error and the style of the API that is +called.

                                                                                                                                                                                                +

                                                                                                                                                                                                All JavaScript errors are handled as exceptions that immediately generate +and throw an error using the standard JavaScript throw mechanism. These +are handled using the try…catch construct provided by the +JavaScript language.

                                                                                                                                                                                                +
                                                                                                                                                                                                // Throws with a ReferenceError because z is not defined.
                                                                                                                                                                                                +try {
                                                                                                                                                                                                +  const m = 1;
                                                                                                                                                                                                +  const n = m + z;
                                                                                                                                                                                                +} catch (err) {
                                                                                                                                                                                                +  // Handle the error here.
                                                                                                                                                                                                +}
                                                                                                                                                                                                +

                                                                                                                                                                                                Any use of the JavaScript throw mechanism will raise an exception that +must be handled using try…catch or the Node.js process will exit +immediately.

                                                                                                                                                                                                +

                                                                                                                                                                                                With few exceptions, Synchronous APIs (any blocking method that does not +accept a callback function, such as fs.readFileSync), will use throw +to report errors.

                                                                                                                                                                                                +

                                                                                                                                                                                                Errors that occur within Asynchronous APIs may be reported in multiple ways:

                                                                                                                                                                                                  -
                                                                                                                                                                                                • -

                                                                                                                                                                                                  Files ending in .mjs.

                                                                                                                                                                                                  -
                                                                                                                                                                                                • -
                                                                                                                                                                                                • -

                                                                                                                                                                                                  Files ending in .js when the nearest parent package.json file contains a -top-level field "type" with a value of "module".

                                                                                                                                                                                                  -
                                                                                                                                                                                                • -
                                                                                                                                                                                                • -

                                                                                                                                                                                                  Strings passed in as an argument to --eval or --print, or piped to -node via STDIN, with the flag --input-type=module.

                                                                                                                                                                                                  -
                                                                                                                                                                                                • +
                                                                                                                                                                                                • Most asynchronous methods that accept a callback function will accept an +Error object passed as the first argument to that function. If that first +argument is not null and is an instance of Error, then an error occurred +that should be handled.
                                                                                                                                                                                                -

                                                                                                                                                                                                Node.js will treat as CommonJS all other forms of input, such as .js files -where the nearest parent package.json file contains no top-level "type" -field, or string input without the flag --input-type. This behavior is to -preserve backward compatibility. However, now that Node.js supports both -CommonJS and ES modules, it is best to be explicit whenever possible. Node.js -will treat the following as CommonJS when passed to node as the initial input, -or when referenced by import statements within ES module code:

                                                                                                                                                                                                + +
                                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                                +fs.readFile('a file that does not exist', (err, data) => {
                                                                                                                                                                                                +  if (err) {
                                                                                                                                                                                                +    console.error('There was an error reading the file!', err);
                                                                                                                                                                                                +    return;
                                                                                                                                                                                                +  }
                                                                                                                                                                                                +  // Otherwise handle the data
                                                                                                                                                                                                +});
                                                                                                                                                                                                • -

                                                                                                                                                                                                  Files ending in .cjs.

                                                                                                                                                                                                  -
                                                                                                                                                                                                • -
                                                                                                                                                                                                • -

                                                                                                                                                                                                  Files ending in .js when the nearest parent package.json file contains a -top-level field "type" with a value of "commonjs".

                                                                                                                                                                                                  -
                                                                                                                                                                                                • -
                                                                                                                                                                                                • -

                                                                                                                                                                                                  Strings passed in as an argument to --eval or --print, or piped to -node via STDIN, with the flag --input-type=commonjs.

                                                                                                                                                                                                  -
                                                                                                                                                                                                • -
                                                                                                                                                                                                -

                                                                                                                                                                                                package.json "type" field#

                                                                                                                                                                                                -

                                                                                                                                                                                                Files ending with .js will be loaded as ES modules when the nearest parent -package.json file contains a top-level field "type" with a value of -"module".

                                                                                                                                                                                                -

                                                                                                                                                                                                The nearest parent package.json is defined as the first package.json found -when searching in the current folder, that folder’s parent, and so on up -until the root of the volume is reached.

                                                                                                                                                                                                - -
                                                                                                                                                                                                // package.json
                                                                                                                                                                                                -{
                                                                                                                                                                                                -  "type": "module"
                                                                                                                                                                                                -}
                                                                                                                                                                                                -
                                                                                                                                                                                                -
                                                                                                                                                                                                # In same folder as above package.json
                                                                                                                                                                                                -node my-app.js # Runs as ES module
                                                                                                                                                                                                -
                                                                                                                                                                                                -

                                                                                                                                                                                                If the nearest parent package.json lacks a "type" field, or contains -"type": "commonjs", .js files are treated as CommonJS. If the volume root is -reached and no package.json is found, Node.js defers to the default, a -package.json with no "type" field.

                                                                                                                                                                                                -

                                                                                                                                                                                                import statements of .js files are treated as ES modules if the nearest -parent package.json contains "type": "module".

                                                                                                                                                                                                -
                                                                                                                                                                                                // my-app.js, part of the same example as above
                                                                                                                                                                                                -import './startup.js'; // Loaded as ES module because of package.json
                                                                                                                                                                                                -
                                                                                                                                                                                                -

                                                                                                                                                                                                Package authors should include the "type" field, even in packages where all -sources are CommonJS. Being explicit about the type of the package will -future-proof the package in case the default type of Node.js ever changes, and -it will also make things easier for build tools and loaders to determine how the -files in the package should be interpreted.

                                                                                                                                                                                                -

                                                                                                                                                                                                Regardless of the value of the "type" field, .mjs files are always treated -as ES modules and .cjs files are always treated as CommonJS.

                                                                                                                                                                                                -

                                                                                                                                                                                                Package Scope and File Extensions#

                                                                                                                                                                                                -

                                                                                                                                                                                                A folder containing a package.json file, and all subfolders below that folder -down until the next folder containing another package.json, is considered a -package scope. The "type" field defines how .js files should be treated -within a particular package.json file’s package scope. Every package in a -project’s node_modules folder contains its own package.json file, so each -project’s dependencies have their own package scopes. A package.json lacking a -"type" field is treated as if it contained "type": "commonjs".

                                                                                                                                                                                                -

                                                                                                                                                                                                The package scope applies not only to initial entry points (node my-app.js) -but also to files referenced by import statements and import() expressions.

                                                                                                                                                                                                -
                                                                                                                                                                                                // my-app.js, in an ES module package scope because there is a package.json
                                                                                                                                                                                                -// file in the same folder with "type": "module".
                                                                                                                                                                                                +

                                                                                                                                                                                                When an asynchronous method is called on an object that is an +EventEmitter, errors can be routed to that object's 'error' event.

                                                                                                                                                                                                +
                                                                                                                                                                                                const net = require('net');
                                                                                                                                                                                                +const connection = net.connect('localhost');
                                                                                                                                                                                                 
                                                                                                                                                                                                -import './startup/init.js';
                                                                                                                                                                                                -// Loaded as ES module since ./startup contains no package.json file,
                                                                                                                                                                                                -// and therefore inherits the ES module package scope from one level up.
                                                                                                                                                                                                -
                                                                                                                                                                                                -import 'commonjs-package';
                                                                                                                                                                                                -// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
                                                                                                                                                                                                -// lacks a "type" field or contains "type": "commonjs".
                                                                                                                                                                                                -
                                                                                                                                                                                                -import './node_modules/commonjs-package/index.js';
                                                                                                                                                                                                -// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
                                                                                                                                                                                                -// lacks a "type" field or contains "type": "commonjs".
                                                                                                                                                                                                -
                                                                                                                                                                                                -

                                                                                                                                                                                                Files ending with .mjs are always loaded as ES modules regardless of package -scope.

                                                                                                                                                                                                -

                                                                                                                                                                                                Files ending with .cjs are always loaded as CommonJS regardless of package -scope.

                                                                                                                                                                                                -
                                                                                                                                                                                                import './legacy-file.cjs';
                                                                                                                                                                                                -// Loaded as CommonJS since .cjs is always loaded as CommonJS.
                                                                                                                                                                                                +// Adding an 'error' event handler to a stream:
                                                                                                                                                                                                +connection.on('error', (err) => {
                                                                                                                                                                                                +  // If the connection is reset by the server, or if it can't
                                                                                                                                                                                                +  // connect at all, or on any sort of error encountered by
                                                                                                                                                                                                +  // the connection, the error will be sent here.
                                                                                                                                                                                                +  console.error(err);
                                                                                                                                                                                                +});
                                                                                                                                                                                                 
                                                                                                                                                                                                -import 'commonjs-package/src/index.mjs';
                                                                                                                                                                                                -// Loaded as ES module since .mjs is always loaded as ES module.
                                                                                                                                                                                                -
                                                                                                                                                                                                -

                                                                                                                                                                                                The .mjs and .cjs extensions may be used to mix types within the same -package scope:

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                • -

                                                                                                                                                                                                  Within a "type": "module" package scope, Node.js can be instructed to -interpret a particular file as CommonJS by naming it with a .cjs extension -(since both .js and .mjs files are treated as ES modules within a -"module" package scope).

                                                                                                                                                                                                  +connection.pipe(process.stdout);
                                                                                                                                                                                              • -

                                                                                                                                                                                                Within a "type": "commonjs" package scope, Node.js can be instructed to -interpret a particular file as an ES module by naming it with an .mjs -extension (since both .js and .cjs files are treated as CommonJS within a -"commonjs" package scope).

                                                                                                                                                                                                +

                                                                                                                                                                                                A handful of typically asynchronous methods in the Node.js API may still +use the throw mechanism to raise exceptions that must be handled using +try…catch. There is no comprehensive list of such methods; please +refer to the documentation of each method to determine the appropriate +error handling mechanism required.

                                                                                                                                                                                              -

                                                                                                                                                                                              --input-type flag#

                                                                                                                                                                                              -

                                                                                                                                                                                              Strings passed in as an argument to --eval or --print (or -e or -p), or -piped to node via STDIN, will be treated as ES modules when the ---input-type=module flag is set.

                                                                                                                                                                                              -
                                                                                                                                                                                              node --input-type=module --eval "import { sep } from 'path'; console.log(sep);"
                                                                                                                                                                                              +

                                                                                                                                                                                              The use of the 'error' event mechanism is most common for stream-based +and event emitter-based APIs, which themselves represent a series of +asynchronous operations over time (as opposed to a single operation that may +pass or fail).

                                                                                                                                                                                              +

                                                                                                                                                                                              For all EventEmitter objects, if an 'error' event handler is not +provided, the error will be thrown, causing the Node.js process to report an +uncaught exception and crash unless either: The domain module is +used appropriately or a handler has been registered for the +'uncaughtException' event.

                                                                                                                                                                                              +
                                                                                                                                                                                              const EventEmitter = require('events');
                                                                                                                                                                                              +const ee = new EventEmitter();
                                                                                                                                                                                               
                                                                                                                                                                                              -echo "import { sep } from 'path'; console.log(sep);" | node --input-type=module
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              For completeness there is also --input-type=commonjs, for explicitly running -string input as CommonJS. This is the default behavior if --input-type is -unspecified.

                                                                                                                                                                                              -

                                                                                                                                                                                              Packages#

                                                                                                                                                                                              -

                                                                                                                                                                                              Package Entry Points#

                                                                                                                                                                                              -

                                                                                                                                                                                              In a package’s package.json file, two fields can define entry points for a -package: "main" and "exports". The "main" field is supported in all -versions of Node.js, but its capabilities are limited: it only defines the main -entry point of the package.

                                                                                                                                                                                              -

                                                                                                                                                                                              The "exports" field provides an alternative to "main" where the package -main entry point can be defined while also encapsulating the package, -preventing any other entry points besides those defined in "exports". -This encapsulation allows module authors to define a public interface for -their package.

                                                                                                                                                                                              -

                                                                                                                                                                                              If both "exports" and "main" are defined, the "exports" field takes -precedence over "main". "exports" are not specific to ES modules or -CommonJS; "main" will be overridden by "exports" if it exists. As such -"main" cannot be used as a fallback for CommonJS but it can be used as a -fallback for legacy versions of Node.js that do not support the "exports" -field.

                                                                                                                                                                                              -

                                                                                                                                                                                              Conditional Exports can be used within "exports" to define different -package entry points per environment, including whether the package is -referenced via require or via import. For more information about supporting -both CommonJS and ES Modules in a single package please consult -the dual CommonJS/ES module packages section.

                                                                                                                                                                                              -

                                                                                                                                                                                              Warning: Introducing the "exports" field prevents consumers of a package -from using any entry points that are not defined, including the package.json -(e.g. require('your-package/package.json'). This will likely be a breaking -change.

                                                                                                                                                                                              -

                                                                                                                                                                                              To make the introduction of "exports" non-breaking, ensure that every -previously supported entry point is exported. It is best to explicitly specify -entry points so that the package’s public API is well-defined. For example, -a project that previous exported main, lib, -feature, and the package.json could use the following package.exports:

                                                                                                                                                                                              -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "name": "my-mod",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    ".": "./lib/index.js",
                                                                                                                                                                                              -    "./lib": "./lib/index.js",
                                                                                                                                                                                              -    "./lib/index": "./lib/index.js",
                                                                                                                                                                                              -    "./lib/index.js": "./lib/index.js",
                                                                                                                                                                                              -    "./feature": "./feature/index.js",
                                                                                                                                                                                              -    "./feature/index.js": "./feature/index.js",
                                                                                                                                                                                              -    "./package.json": "./package.json"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Alternatively a project could choose to export entire folders:

                                                                                                                                                                                              -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "name": "my-mod",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    ".": "./lib/index.js",
                                                                                                                                                                                              -    "./lib": "./lib/index.js",
                                                                                                                                                                                              -    "./lib/": "./lib/",
                                                                                                                                                                                              -    "./feature": "./feature/index.js",
                                                                                                                                                                                              -    "./feature/": "./feature/",
                                                                                                                                                                                              -    "./package.json": "./package.json"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              As a last resort, package encapsulation can be disabled entirely by creating an -export for the root of the package "./": "./". This will expose every file in -the package at the cost of disabling the encapsulation and potential tooling -benefits this provides. As the ES Module loader in Node.js enforces the use of -the full specifier path, exporting the root rather than being explicit -about entry is less expressive than either of the prior examples. Not only -will encapsulation be lost but module consumers will be unable to -import feature from 'my-mod/feature' as they will need to provide the full -path import feature from 'my-mod/feature/index.js.

                                                                                                                                                                                              -

                                                                                                                                                                                              Main Entry Point Export#

                                                                                                                                                                                              -

                                                                                                                                                                                              To set the main entry point for a package, it is advisable to define both -"exports" and "main" in the package’s package.json file:

                                                                                                                                                                                              - -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "main": "./main.js",
                                                                                                                                                                                              -  "exports": "./main.js"
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The benefit of doing this is that when using the "exports" field all -subpaths of the package will no longer be available to importers under -require('pkg/subpath.js'), and instead they will get a new error, -ERR_PACKAGE_PATH_NOT_EXPORTED.

                                                                                                                                                                                              -

                                                                                                                                                                                              This encapsulation of exports provides more reliable guarantees -about package interfaces for tools and when handling semver upgrades for a -package. It is not a strong encapsulation since a direct require of any -absolute subpath of the package such as -require('/path/to/node_modules/pkg/subpath.js') will still load subpath.js.

                                                                                                                                                                                              -

                                                                                                                                                                                              Subpath Exports#

                                                                                                                                                                                              -

                                                                                                                                                                                              When using the "exports" field, custom subpaths can be defined along -with the main entry point by treating the main entry point as the -"." subpath:

                                                                                                                                                                                              - -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "main": "./main.js",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    ".": "./main.js",
                                                                                                                                                                                              -    "./submodule": "./src/submodule.js"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Now only the defined subpath in "exports" can be imported by a -consumer:

                                                                                                                                                                                              -
                                                                                                                                                                                              import submodule from 'es-module-package/submodule';
                                                                                                                                                                                              -// Loads ./node_modules/es-module-package/src/submodule.js
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              While other subpaths will error:

                                                                                                                                                                                              -
                                                                                                                                                                                              import submodule from 'es-module-package/private-module.js';
                                                                                                                                                                                              -// Throws ERR_PACKAGE_PATH_NOT_EXPORTED
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Entire folders can also be mapped with package exports:

                                                                                                                                                                                              - -
                                                                                                                                                                                              // ./node_modules/es-module-package/package.json
                                                                                                                                                                                              -{
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    "./features/": "./src/features/"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              With the above, all modules within the ./src/features/ folder -are exposed deeply to import and require:

                                                                                                                                                                                              -
                                                                                                                                                                                              import feature from 'es-module-package/features/x.js';
                                                                                                                                                                                              -// Loads ./node_modules/es-module-package/src/features/x.js
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              When using folder mappings, ensure that you do want to expose every -module inside the subfolder. Any modules which are not public -should be moved to another folder to retain the encapsulation -benefits of exports.

                                                                                                                                                                                              -

                                                                                                                                                                                              Package Exports Fallbacks#

                                                                                                                                                                                              -

                                                                                                                                                                                              For possible new specifier support in future, array fallbacks are -supported for all invalid specifiers:

                                                                                                                                                                                              - -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    "./submodule": ["not:valid", "./submodule.js"]
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Since "not:valid" is not a valid specifier, "./submodule.js" is used -instead as the fallback, as if it were the only target.

                                                                                                                                                                                              -

                                                                                                                                                                                              Exports Sugar#

                                                                                                                                                                                              -

                                                                                                                                                                                              If the "." export is the only export, the "exports" field provides sugar -for this case being the direct "exports" field value.

                                                                                                                                                                                              -

                                                                                                                                                                                              If the "." export has a fallback array or string value, then the "exports" -field can be set to this value directly.

                                                                                                                                                                                              - -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    ".": "./main.js"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              can be written:

                                                                                                                                                                                              - -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "exports": "./main.js"
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Conditional Exports#

                                                                                                                                                                                              -

                                                                                                                                                                                              Conditional exports provide a way to map to different paths depending on -certain conditions. They are supported for both CommonJS and ES module imports.

                                                                                                                                                                                              -

                                                                                                                                                                                              For example, a package that wants to provide different ES module exports for -require() and import can be written:

                                                                                                                                                                                              - -
                                                                                                                                                                                              // package.json
                                                                                                                                                                                              -{
                                                                                                                                                                                              -  "main": "./main-require.cjs",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    "import": "./main-module.js",
                                                                                                                                                                                              -    "require": "./main-require.cjs"
                                                                                                                                                                                              -  },
                                                                                                                                                                                              -  "type": "module"
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Node.js supports the following conditions:

                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              • "import" - matched when the package is loaded via import or -import(). Can reference either an ES module or CommonJS file, as both -import and import() can load either ES module or CommonJS sources.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • "require" - matched when the package is loaded via require(). -As require() only supports CommonJS, the referenced file must be CommonJS.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • "node" - matched for any Node.js environment. Can be a CommonJS or ES -module file. This condition should always come after "import" or -"require".
                                                                                                                                                                                              • -
                                                                                                                                                                                              • "default" - the generic fallback that will always match. Can be a CommonJS -or ES module file. This condition should always come last.
                                                                                                                                                                                              • -
                                                                                                                                                                                              -

                                                                                                                                                                                              Condition matching is applied in object order from first to last within the -"exports" object. The general rule is that conditions should be used -from most specific to least specific in object order.

                                                                                                                                                                                              -

                                                                                                                                                                                              Other conditions such as "browser", "electron", "deno", "react-native", -etc. are ignored by Node.js but may be used by other runtimes or tools. -Further restrictions, definitions or guidance on condition names may be -provided in the future.

                                                                                                                                                                                              -

                                                                                                                                                                                              Using the "import" and "require" conditions can lead to some hazards, -which are explained further in -the dual CommonJS/ES module packages section.

                                                                                                                                                                                              -

                                                                                                                                                                                              Conditional exports can also be extended to exports subpaths, for example:

                                                                                                                                                                                              - -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "main": "./main.js",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    ".": "./main.js",
                                                                                                                                                                                              -    "./feature": {
                                                                                                                                                                                              -      "browser": "./feature-browser.js",
                                                                                                                                                                                              -      "default": "./feature.js"
                                                                                                                                                                                              -    }
                                                                                                                                                                                              +setImmediate(() => {
                                                                                                                                                                                              +  // This will crash the process because no 'error' event
                                                                                                                                                                                              +  // handler has been added.
                                                                                                                                                                                              +  ee.emit('error', new Error('This will crash'));
                                                                                                                                                                                              +});
                                                                                                                                                                                              +

                                                                                                                                                                                              Errors generated in this way cannot be intercepted using try…catch as +they are thrown after the calling code has already exited.

                                                                                                                                                                                              +

                                                                                                                                                                                              Developers must refer to the documentation for each method to determine +exactly how errors raised by those methods are propagated.

                                                                                                                                                                                              +

                                                                                                                                                                                              Error-first callbacks#

                                                                                                                                                                                              + +

                                                                                                                                                                                              Most asynchronous methods exposed by the Node.js core API follow an idiomatic +pattern referred to as an error-first callback. With this pattern, a callback +function is passed to the method as an argument. When the operation either +completes or an error is raised, the callback function is called with the +Error object (if any) passed as the first argument. If no error was raised, +the first argument will be passed as null.

                                                                                                                                                                                              +
                                                                                                                                                                                              const fs = require('fs');
                                                                                                                                                                                              +
                                                                                                                                                                                              +function errorFirstCallback(err, data) {
                                                                                                                                                                                              +  if (err) {
                                                                                                                                                                                              +    console.error('There was an error', err);
                                                                                                                                                                                              +    return;
                                                                                                                                                                                                 }
                                                                                                                                                                                              +  console.log(data);
                                                                                                                                                                                               }
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Defines a package where require('pkg/feature') and import 'pkg/feature' -could provide different implementations between the browser and Node.js, -given third-party tool support for a "browser" condition.

                                                                                                                                                                                              -

                                                                                                                                                                                              Nested conditions#

                                                                                                                                                                                              -

                                                                                                                                                                                              In addition to direct mappings, Node.js also supports nested condition objects.

                                                                                                                                                                                              -

                                                                                                                                                                                              For example, to define a package that only has dual mode entry points for -use in Node.js but not the browser:

                                                                                                                                                                                              - -
                                                                                                                                                                                              {
                                                                                                                                                                                              -  "main": "./main.js",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    "browser": "./feature-browser.mjs",
                                                                                                                                                                                              -    "node": {
                                                                                                                                                                                              -      "import": "./feature-node.mjs",
                                                                                                                                                                                              -      "require": "./feature-node.cjs"
                                                                                                                                                                                              +
                                                                                                                                                                                              +fs.readFile('/some/file/that/does-not-exist', errorFirstCallback);
                                                                                                                                                                                              +fs.readFile('/some/file/that/does-exist', errorFirstCallback);
                                                                                                                                                                                              +

                                                                                                                                                                                              The JavaScript try…catch mechanism cannot be used to intercept errors +generated by asynchronous APIs. A common mistake for beginners is to try to +use throw inside an error-first callback:

                                                                                                                                                                                              +
                                                                                                                                                                                              // THIS WILL NOT WORK:
                                                                                                                                                                                              +const fs = require('fs');
                                                                                                                                                                                              +
                                                                                                                                                                                              +try {
                                                                                                                                                                                              +  fs.readFile('/some/file/that/does-not-exist', (err, data) => {
                                                                                                                                                                                              +    // Mistaken assumption: throwing here...
                                                                                                                                                                                              +    if (err) {
                                                                                                                                                                                              +      throw err;
                                                                                                                                                                                                   }
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Conditions continue to be matched in order as with flat conditions. If -a nested conditional does not have any mapping it will continue checking -the remaining conditions of the parent condition. In this way nested -conditions behave analogously to nested JavaScript if statements.

                                                                                                                                                                                              -

                                                                                                                                                                                              Self-referencing a package using its name#

                                                                                                                                                                                              -

                                                                                                                                                                                              Within a package, the values defined in the package’s -package.json "exports" field can be referenced via the package’s name. -For example, assuming the package.json is:

                                                                                                                                                                                              -
                                                                                                                                                                                              // package.json
                                                                                                                                                                                              -{
                                                                                                                                                                                              -  "name": "a-package",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    ".": "./main.mjs",
                                                                                                                                                                                              -    "./foo": "./foo.js"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Then any module in that package can reference an export in the package itself:

                                                                                                                                                                                              -
                                                                                                                                                                                              // ./a-module.mjs
                                                                                                                                                                                              -import { something } from 'a-package'; // Imports "something" from ./main.mjs.
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Self-referencing is available only if package.json has exports, and will -allow importing only what that exports (in the package.json) allows. -So the code below, given the package above, will generate a runtime error:

                                                                                                                                                                                              -
                                                                                                                                                                                              // ./another-module.mjs
                                                                                                                                                                                              -
                                                                                                                                                                                              -// Imports "another" from ./m.mjs. Fails because
                                                                                                                                                                                              -// the "package.json" "exports" field
                                                                                                                                                                                              -// does not provide an export named "./m.mjs".
                                                                                                                                                                                              -import { another } from 'a-package/m.mjs';
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Self-referencing is also available when using require, both in an ES module, -and in a CommonJS one. For example, this code will also work:

                                                                                                                                                                                              -
                                                                                                                                                                                              // ./a-module.js
                                                                                                                                                                                              -const { something } = require('a-package/foo'); // Loads from ./foo.js.
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Dual CommonJS/ES Module Packages#

                                                                                                                                                                                              -

                                                                                                                                                                                              Prior to the introduction of support for ES modules in Node.js, it was a common -pattern for package authors to include both CommonJS and ES module JavaScript -sources in their package, with package.json "main" specifying the CommonJS -entry point and package.json "module" specifying the ES module entry point. -This enabled Node.js to run the CommonJS entry point while build tools such as -bundlers used the ES module entry point, since Node.js ignored (and still -ignores) the top-level "module" field.

                                                                                                                                                                                              -

                                                                                                                                                                                              Node.js can now run ES module entry points, and a package can contain both -CommonJS and ES module entry points (either via separate specifiers such as -'pkg' and 'pkg/es-module', or both at the same specifier via Conditional -Exports). Unlike in the scenario where "module" is only used by bundlers, -or ES module files are transpiled into CommonJS on the fly before evaluation by -Node.js, the files referenced by the ES module entry point are evaluated as ES -modules.

                                                                                                                                                                                              -

                                                                                                                                                                                              Dual Package Hazard#

                                                                                                                                                                                              -

                                                                                                                                                                                              When an application is using a package that provides both CommonJS and ES module -sources, there is a risk of certain bugs if both versions of the package get -loaded. This potential comes from the fact that the pkgInstance created by -const pkgInstance = require('pkg') is not the same as the pkgInstance -created by import pkgInstance from 'pkg' (or an alternative main path like -'pkg/module'). This is the “dual package hazard,” where two versions of the -same package can be loaded within the same runtime environment. While it is -unlikely that an application or package would intentionally load both versions -directly, it is common for an application to load one version while a dependency -of the application loads the other version. This hazard can happen because -Node.js supports intermixing CommonJS and ES modules, and can lead to unexpected -behavior.

                                                                                                                                                                                              -

                                                                                                                                                                                              If the package main export is a constructor, an instanceof comparison of -instances created by the two versions returns false, and if the export is an -object, properties added to one (like pkgInstance.foo = 3) are not present on -the other. This differs from how import and require statements work in -all-CommonJS or all-ES module environments, respectively, and therefore is -surprising to users. It also differs from the behavior users are familiar with -when using transpilation via tools like Babel or esm.

                                                                                                                                                                                              -

                                                                                                                                                                                              Writing Dual Packages While Avoiding or Minimizing Hazards#

                                                                                                                                                                                              -

                                                                                                                                                                                              First, the hazard described in the previous section occurs when a package -contains both CommonJS and ES module sources and both sources are provided for -use in Node.js, either via separate main entry points or exported paths. A -package could instead be written where any version of Node.js receives only -CommonJS sources, and any separate ES module sources the package may contain -could be intended only for other environments such as browsers. Such a package -would be usable by any version of Node.js, since import can refer to CommonJS -files; but it would not provide any of the advantages of using ES module syntax.

                                                                                                                                                                                              -

                                                                                                                                                                                              A package could also switch from CommonJS to ES module syntax in a breaking -change version bump. This has the disadvantage that the newest version -of the package would only be usable in ES module-supporting versions of Node.js.

                                                                                                                                                                                              -

                                                                                                                                                                                              Every pattern has tradeoffs, but there are two broad approaches that satisfy the -following conditions:

                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. The package is usable via both require and import.
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. The package is usable in both current Node.js and older versions of Node.js -that lack support for ES modules.
                                                                                                                                                                                              4. -
                                                                                                                                                                                              5. The package main entry point, e.g. 'pkg' can be used by both require to -resolve to a CommonJS file and by import to resolve to an ES module file. -(And likewise for exported paths, e.g. 'pkg/feature'.)
                                                                                                                                                                                              6. -
                                                                                                                                                                                              7. The package provides named exports, e.g. import { name } from 'pkg' rather -than import pkg from 'pkg'; pkg.name.
                                                                                                                                                                                              8. -
                                                                                                                                                                                              9. The package is potentially usable in other ES module environments such as -browsers.
                                                                                                                                                                                              10. -
                                                                                                                                                                                              11. The hazards described in the previous section are avoided or minimized.
                                                                                                                                                                                              12. -
                                                                                                                                                                                              -
                                                                                                                                                                                              Approach #1: Use an ES Module Wrapper#
                                                                                                                                                                                              -

                                                                                                                                                                                              Write the package in CommonJS or transpile ES module sources into CommonJS, and -create an ES module wrapper file that defines the named exports. Using -Conditional Exports, the ES module wrapper is used for import and the -CommonJS entry point for require.

                                                                                                                                                                                              - -
                                                                                                                                                                                              // ./node_modules/pkg/package.json
                                                                                                                                                                                              -{
                                                                                                                                                                                              -  "type": "module",
                                                                                                                                                                                              -  "main": "./index.cjs",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    "import": "./wrapper.mjs",
                                                                                                                                                                                              -    "require": "./index.cjs"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              // ./node_modules/pkg/index.cjs
                                                                                                                                                                                              -exports.name = 'value';
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              // ./node_modules/pkg/wrapper.mjs
                                                                                                                                                                                              -import cjsModule from './index.cjs';
                                                                                                                                                                                              -export const name = cjsModule.name;
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              In this example, the name from import { name } from 'pkg' is the same -singleton as the name from const { name } = require('pkg'). Therefore === -returns true when comparing the two names and the divergent specifier hazard -is avoided.

                                                                                                                                                                                              -

                                                                                                                                                                                              If the module is not simply a list of named exports, but rather contains a -unique function or object export like module.exports = function () { ... }, -or if support in the wrapper for the import pkg from 'pkg' pattern is desired, -then the wrapper would instead be written to export the default optionally -along with any named exports as well:

                                                                                                                                                                                              -
                                                                                                                                                                                              import cjsModule from './index.cjs';
                                                                                                                                                                                              -export const name = cjsModule.name;
                                                                                                                                                                                              -export default cjsModule;
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              This approach is appropriate for any of the following use cases:

                                                                                                                                                                                              + }); +} catch (err) { + // This will not catch the throw! + console.error(err); +}
                                                                                                                                                                                              +

                                                                                                                                                                                              This will not work because the callback function passed to fs.readFile() is +called asynchronously. By the time the callback has been called, the +surrounding code, including the try…catch block, will have already exited. +Throwing an error inside the callback can crash the Node.js process in most +cases. If domains are enabled, or a handler has been registered with +process.on('uncaughtException'), such errors can be intercepted.

                                                                                                                                                                                              +

                                                                                                                                                                                              Class: Error#

                                                                                                                                                                                              + +

                                                                                                                                                                                              A generic JavaScript <Error> object that does not denote any specific +circumstance of why the error occurred. Error objects capture a "stack trace" +detailing the point in the code at which the Error was instantiated, and may +provide a text description of the error.

                                                                                                                                                                                              +

                                                                                                                                                                                              All errors generated by Node.js, including all system and JavaScript errors, +will either be instances of, or inherit from, the Error class.

                                                                                                                                                                                              +

                                                                                                                                                                                              new Error(message)#

                                                                                                                                                                                                -
                                                                                                                                                                                              • The package is currently written in CommonJS and the author would prefer not -to refactor it into ES module syntax, but wishes to provide named exports for -ES module consumers.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • The package has other packages that depend on it, and the end user might -install both this package and those other packages. For example a utilities -package is used directly in an application, and a utilities-plus package -adds a few more functions to utilities. Because the wrapper exports -underlying CommonJS files, it doesn’t matter if utilities-plus is written in -CommonJS or ES module syntax; it will work either way.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • The package stores internal state, and the package author would prefer not to -refactor the package to isolate its state management. See the next section.
                                                                                                                                                                                              • +
                                                                                                                                                                                              • message <string>
                                                                                                                                                                                              -

                                                                                                                                                                                              A variant of this approach not requiring conditional exports for consumers could -be to add an export, e.g. "./module", to point to an all-ES module-syntax -version of the package. This could be used via import 'pkg/module' by users -who are certain that the CommonJS version will not be loaded anywhere in the -application, such as by dependencies; or if the CommonJS version can be loaded -but doesn’t affect the ES module version (for example, because the package is -stateless):

                                                                                                                                                                                              - -
                                                                                                                                                                                              // ./node_modules/pkg/package.json
                                                                                                                                                                                              -{
                                                                                                                                                                                              -  "type": "module",
                                                                                                                                                                                              -  "main": "./index.cjs",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    ".": "./index.cjs",
                                                                                                                                                                                              -    "./module": "./wrapper.mjs"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              Approach #2: Isolate State#
                                                                                                                                                                                              -

                                                                                                                                                                                              A package.json file can define the separate CommonJS and ES module entry -points directly:

                                                                                                                                                                                              - -
                                                                                                                                                                                              // ./node_modules/pkg/package.json
                                                                                                                                                                                              -{
                                                                                                                                                                                              -  "type": "module",
                                                                                                                                                                                              -  "main": "./index.cjs",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    "import": "./index.mjs",
                                                                                                                                                                                              -    "require": "./index.cjs"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              This can be done if both the CommonJS and ES module versions of the package are -equivalent, for example because one is the transpiled output of the other; and -the package’s management of state is carefully isolated (or the package is -stateless).

                                                                                                                                                                                              -

                                                                                                                                                                                              The reason that state is an issue is because both the CommonJS and ES module -versions of the package may get used within an application; for example, the -user’s application code could import the ES module version while a dependency -requires the CommonJS version. If that were to occur, two copies of the -package would be loaded in memory and therefore two separate states would be -present. This would likely cause hard-to-troubleshoot bugs.

                                                                                                                                                                                              -

                                                                                                                                                                                              Aside from writing a stateless package (if JavaScript’s Math were a package, -for example, it would be stateless as all of its methods are static), there are -some ways to isolate state so that it’s shared between the potentially loaded -CommonJS and ES module instances of the package:

                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. -

                                                                                                                                                                                                If possible, contain all state within an instantiated object. JavaScript’s -Date, for example, needs to be instantiated to contain state; if it were a -package, it would be used like this:

                                                                                                                                                                                                -
                                                                                                                                                                                                import Date from 'date';
                                                                                                                                                                                                -const someDate = new Date();
                                                                                                                                                                                                -// someDate contains state; Date does not
                                                                                                                                                                                                -
                                                                                                                                                                                                -

                                                                                                                                                                                                The new keyword isn’t required; a package’s function can return a new -object, or modify a passed-in object, to keep the state external to the -package.

                                                                                                                                                                                                -
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. -

                                                                                                                                                                                                Isolate the state in one or more CommonJS files that are shared between the -CommonJS and ES module versions of the package. For example, if the CommonJS -and ES module entry points are index.cjs and index.mjs, respectively:

                                                                                                                                                                                                -
                                                                                                                                                                                                // ./node_modules/pkg/index.cjs
                                                                                                                                                                                                -const state = require('./state.cjs');
                                                                                                                                                                                                -module.exports.state = state;
                                                                                                                                                                                                -
                                                                                                                                                                                                -
                                                                                                                                                                                                // ./node_modules/pkg/index.mjs
                                                                                                                                                                                                -import state from './state.cjs';
                                                                                                                                                                                                -export {
                                                                                                                                                                                                -  state
                                                                                                                                                                                                -};
                                                                                                                                                                                                -
                                                                                                                                                                                                -

                                                                                                                                                                                                Even if pkg is used via both require and import in an application (for -example, via import in application code and via require by a dependency) -each reference of pkg will contain the same state; and modifying that -state from either module system will apply to both.

                                                                                                                                                                                                -
                                                                                                                                                                                              4. -
                                                                                                                                                                                              -

                                                                                                                                                                                              Any plugins that attach to the package’s singleton would need to separately -attach to both the CommonJS and ES module singletons.

                                                                                                                                                                                              -

                                                                                                                                                                                              This approach is appropriate for any of the following use cases:

                                                                                                                                                                                              +

                                                                                                                                                                                              Creates a new Error object and sets the error.message property to the +provided text message. If an object is passed as message, the text message +is generated by calling message.toString(). The error.stack property will +represent the point in the code at which new Error() was called. Stack traces +are dependent on V8's stack trace API. Stack traces extend only to either +(a) the beginning of synchronous code execution, or (b) the number of frames +given by the property Error.stackTraceLimit, whichever is smaller.

                                                                                                                                                                                              +

                                                                                                                                                                                              Error.captureStackTrace(targetObject[, constructorOpt])#

                                                                                                                                                                                                -
                                                                                                                                                                                              • The package is currently written in ES module syntax and the package author -wants that version to be used wherever such syntax is supported.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • The package is stateless or its state can be isolated without too much -difficulty.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • The package is unlikely to have other public packages that depend on it, or if -it does, the package is stateless or has state that need not be shared between -dependencies or with the overall application.
                                                                                                                                                                                              • +
                                                                                                                                                                                              • targetObject <Object>
                                                                                                                                                                                              • +
                                                                                                                                                                                              • constructorOpt <Function>
                                                                                                                                                                                              -

                                                                                                                                                                                              Even with isolated state, there is still the cost of possible extra code -execution between the CommonJS and ES module versions of a package.

                                                                                                                                                                                              -

                                                                                                                                                                                              As with the previous approach, a variant of this approach not requiring -conditional exports for consumers could be to add an export, e.g. -"./module", to point to an all-ES module-syntax version of the package:

                                                                                                                                                                                              - -
                                                                                                                                                                                              // ./node_modules/pkg/package.json
                                                                                                                                                                                              -{
                                                                                                                                                                                              -  "type": "module",
                                                                                                                                                                                              -  "main": "./index.cjs",
                                                                                                                                                                                              -  "exports": {
                                                                                                                                                                                              -    ".": "./index.cjs",
                                                                                                                                                                                              -    "./module": "./index.mjs"
                                                                                                                                                                                              -  }
                                                                                                                                                                                              +

                                                                                                                                                                                              Creates a .stack property on targetObject, which when accessed returns +a string representing the location in the code at which +Error.captureStackTrace() was called.

                                                                                                                                                                                              +
                                                                                                                                                                                              const myObject = {};
                                                                                                                                                                                              +Error.captureStackTrace(myObject);
                                                                                                                                                                                              +myObject.stack;  // Similar to `new Error().stack`
                                                                                                                                                                                              +

                                                                                                                                                                                              The first line of the trace will be prefixed with +${myObject.name}: ${myObject.message}.

                                                                                                                                                                                              +

                                                                                                                                                                                              The optional constructorOpt argument accepts a function. If given, all frames +above constructorOpt, including constructorOpt, will be omitted from the +generated stack trace.

                                                                                                                                                                                              +

                                                                                                                                                                                              The constructorOpt argument is useful for hiding implementation +details of error generation from the user. For instance:

                                                                                                                                                                                              +
                                                                                                                                                                                              function MyError() {
                                                                                                                                                                                              +  Error.captureStackTrace(this, MyError);
                                                                                                                                                                                               }
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              import Specifiers#

                                                                                                                                                                                              -

                                                                                                                                                                                              Terminology#

                                                                                                                                                                                              -

                                                                                                                                                                                              The specifier of an import statement is the string after the from keyword, -e.g. 'path' in import { sep } from 'path'. Specifiers are also used in -export from statements, and as the argument to an import() expression.

                                                                                                                                                                                              -

                                                                                                                                                                                              There are four types of specifiers:

                                                                                                                                                                                              + +// Without passing MyError to captureStackTrace, the MyError +// frame would show up in the .stack property. By passing +// the constructor, we omit that frame, and retain all frames below it. +new MyError().stack;
                                                                                                                                                                                              +

                                                                                                                                                                                              Error.stackTraceLimit#

                                                                                                                                                                                                -
                                                                                                                                                                                              • -

                                                                                                                                                                                                Bare specifiers like 'some-package'. They refer to an entry point of a -package by the package name.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                Deep import specifiers like 'some-package/lib/shuffle.mjs'. They refer to -a path within a package prefixed by the package name.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                Relative specifiers like './startup.js' or '../config.mjs'. They refer -to a path relative to the location of the importing file.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                Absolute specifiers like 'file:///opt/nodejs/config.js'. They refer -directly and explicitly to a full path.

                                                                                                                                                                                                -
                                                                                                                                                                                              • +
                                                                                                                                                                                              • <number>
                                                                                                                                                                                              -

                                                                                                                                                                                              Bare specifiers, and the bare specifier portion of deep import specifiers, are -strings; but everything else in a specifier is a URL.

                                                                                                                                                                                              -

                                                                                                                                                                                              Only file: and data: URLs are supported. A specifier like -'https://example.com/app.js' may be supported by browsers but it is not -supported in Node.js.

                                                                                                                                                                                              -

                                                                                                                                                                                              Specifiers may not begin with / or //. These are reserved for potential -future use. The root of the current volume may be referenced via file:///.

                                                                                                                                                                                              -

                                                                                                                                                                                              data: Imports#

                                                                                                                                                                                              - -

                                                                                                                                                                                              data: URLs are supported for importing with the following MIME types:

                                                                                                                                                                                              +

                                                                                                                                                                                              The Error.stackTraceLimit property specifies the number of stack frames +collected by a stack trace (whether generated by new Error().stack or +Error.captureStackTrace(obj)).

                                                                                                                                                                                              +

                                                                                                                                                                                              The default value is 10 but may be set to any valid JavaScript number. Changes +will affect any stack trace captured after the value has been changed.

                                                                                                                                                                                              +

                                                                                                                                                                                              If set to a non-number value, or set to a negative number, stack traces will +not capture any frames.

                                                                                                                                                                                              +

                                                                                                                                                                                              error.code#

                                                                                                                                                                                                -
                                                                                                                                                                                              • text/javascript for ES Modules
                                                                                                                                                                                              • -
                                                                                                                                                                                              • application/json for JSON
                                                                                                                                                                                              • -
                                                                                                                                                                                              • application/wasm for WASM.
                                                                                                                                                                                              • +
                                                                                                                                                                                              • <string>
                                                                                                                                                                                              -

                                                                                                                                                                                              data: URLs only resolve Bare specifiers for builtin modules -and Absolute specifiers. Resolving -Relative specifiers will not work because data: is not a -special scheme. For example, attempting to load ./foo -from data:text/javascript,import "./foo"; will fail to resolve since there -is no concept of relative resolution for data: URLs. An example of a data: -URLs being used is:

                                                                                                                                                                                              -
                                                                                                                                                                                              import 'data:text/javascript,console.log("hello!");';
                                                                                                                                                                                              -import _ from 'data:application/json,"world!"';
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              import.meta#

                                                                                                                                                                                              +

                                                                                                                                                                                              The error.code property is a string label that identifies the kind of error. +error.code is the most stable way to identify an error. It will only change +between major versions of Node.js. In contrast, error.message strings may +change between any versions of Node.js. See Node.js error codes for details +about specific codes.

                                                                                                                                                                                              +

                                                                                                                                                                                              error.message#

                                                                                                                                                                                              -

                                                                                                                                                                                              The import.meta metaproperty is an Object that contains the following -property:

                                                                                                                                                                                              +

                                                                                                                                                                                              The error.message property is the string description of the error as set by +calling new Error(message). The message passed to the constructor will also +appear in the first line of the stack trace of the Error, however changing +this property after the Error object is created may not change the first +line of the stack trace (for example, when error.stack is read before this +property is changed).

                                                                                                                                                                                              +
                                                                                                                                                                                              const err = new Error('The message');
                                                                                                                                                                                              +console.error(err.message);
                                                                                                                                                                                              +// Prints: The message
                                                                                                                                                                                              +

                                                                                                                                                                                              error.stack#

                                                                                                                                                                                              -

                                                                                                                                                                                              Differences Between ES Modules and CommonJS#

                                                                                                                                                                                              -

                                                                                                                                                                                              Mandatory file extensions#

                                                                                                                                                                                              -

                                                                                                                                                                                              A file extension must be provided when using the import keyword. Directory -indexes (e.g. './startup/index.js') must also be fully specified.

                                                                                                                                                                                              -

                                                                                                                                                                                              This behavior matches how import behaves in browser environments, assuming a -typically configured server.

                                                                                                                                                                                              -

                                                                                                                                                                                              No NODE_PATH#

                                                                                                                                                                                              -

                                                                                                                                                                                              NODE_PATH is not part of resolving import specifiers. Please use symlinks -if this behavior is desired.

                                                                                                                                                                                              -

                                                                                                                                                                                              No require, exports, module.exports, __filename, __dirname#

                                                                                                                                                                                              -

                                                                                                                                                                                              These CommonJS variables are not available in ES modules.

                                                                                                                                                                                              -

                                                                                                                                                                                              require can be imported into an ES module using module.createRequire().

                                                                                                                                                                                              -

                                                                                                                                                                                              Equivalents of __filename and __dirname can be created inside of each file -via import.meta.url.

                                                                                                                                                                                              -
                                                                                                                                                                                              import { fileURLToPath } from 'url';
                                                                                                                                                                                              -import { dirname } from 'path';
                                                                                                                                                                                              -
                                                                                                                                                                                              -const __filename = fileURLToPath(import.meta.url);
                                                                                                                                                                                              -const __dirname = dirname(__filename);
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              No require.resolve#

                                                                                                                                                                                              -

                                                                                                                                                                                              Former use cases relying on require.resolve to determine the resolved path -of a module can be supported via import.meta.resolve, which is experimental -and supported via the --experimental-import-meta-resolve flag:

                                                                                                                                                                                              -
                                                                                                                                                                                              (async () => {
                                                                                                                                                                                              -  const dependencyAsset = await import.meta.resolve('component-lib/asset.css');
                                                                                                                                                                                              -})();
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              import.meta.resolve also accepts a second argument which is the parent module -from which to resolve from:

                                                                                                                                                                                              -
                                                                                                                                                                                              (async () => {
                                                                                                                                                                                              -  // Equivalent to import.meta.resolve('./dep')
                                                                                                                                                                                              -  await import.meta.resolve('./dep', import.meta.url);
                                                                                                                                                                                              -})();
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              This function is asynchronous since the ES module resolver in Node.js is -asynchronous. With the introduction of Top-Level Await, these use cases -will be easier as they won't require an async function wrapper.

                                                                                                                                                                                              -

                                                                                                                                                                                              No require.extensions#

                                                                                                                                                                                              -

                                                                                                                                                                                              require.extensions is not used by import. The expectation is that loader -hooks can provide this workflow in the future.

                                                                                                                                                                                              -

                                                                                                                                                                                              No require.cache#

                                                                                                                                                                                              -

                                                                                                                                                                                              require.cache is not used by import. It has a separate cache.

                                                                                                                                                                                              -

                                                                                                                                                                                              URL-based paths#

                                                                                                                                                                                              -

                                                                                                                                                                                              ES modules are resolved and cached based upon -URL semantics. This means that files containing -special characters such as # and ? need to be escaped.

                                                                                                                                                                                              -

                                                                                                                                                                                              Modules will be loaded multiple times if the import specifier used to resolve -them have a different query or fragment.

                                                                                                                                                                                              -
                                                                                                                                                                                              import './foo.mjs?query=1'; // loads ./foo.mjs with query of "?query=1"
                                                                                                                                                                                              -import './foo.mjs?query=2'; // loads ./foo.mjs with query of "?query=2"
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              For now, only modules using the file: protocol can be loaded.

                                                                                                                                                                                              -

                                                                                                                                                                                              Interoperability with CommonJS#

                                                                                                                                                                                              -

                                                                                                                                                                                              require#

                                                                                                                                                                                              -

                                                                                                                                                                                              require always treats the files it references as CommonJS. This applies -whether require is used the traditional way within a CommonJS environment, or -in an ES module environment using module.createRequire().

                                                                                                                                                                                              -

                                                                                                                                                                                              To include an ES module into CommonJS, use import().

                                                                                                                                                                                              -

                                                                                                                                                                                              import statements#

                                                                                                                                                                                              -

                                                                                                                                                                                              An import statement can reference an ES module or a CommonJS module. Other -file types such as JSON or Native modules are not supported. For those, use -module.createRequire().

                                                                                                                                                                                              -

                                                                                                                                                                                              import statements are permitted only in ES modules. For similar functionality -in CommonJS, see import().

                                                                                                                                                                                              -

                                                                                                                                                                                              The specifier of an import statement (the string after the from keyword) -can either be an URL-style relative path like './file.mjs' or a package name -like 'fs'.

                                                                                                                                                                                              -

                                                                                                                                                                                              Like in CommonJS, files within packages can be accessed by appending a path to -the package name; unless the package’s package.json contains an "exports" -field, in which case files within packages need to be accessed via the path -defined in "exports".

                                                                                                                                                                                              -
                                                                                                                                                                                              import { sin, cos } from 'geometry/trigonometry-functions.mjs';
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Only the “default export” is supported for CommonJS files or packages:

                                                                                                                                                                                              - -
                                                                                                                                                                                              import packageMain from 'commonjs-package'; // Works
                                                                                                                                                                                              -
                                                                                                                                                                                              -import { method } from 'commonjs-package'; // Errors
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              It is also possible to -import an ES or CommonJS module for its side effects only.

                                                                                                                                                                                              -

                                                                                                                                                                                              import() expressions#

                                                                                                                                                                                              -

                                                                                                                                                                                              Dynamic import() is supported in both CommonJS and ES modules. It can be -used to include ES module files from CommonJS code.

                                                                                                                                                                                              -

                                                                                                                                                                                              CommonJS, JSON, and Native Modules#

                                                                                                                                                                                              -

                                                                                                                                                                                              CommonJS, JSON, and Native modules can be used with -module.createRequire().

                                                                                                                                                                                              -
                                                                                                                                                                                              // cjs.cjs
                                                                                                                                                                                              -module.exports = 'cjs';
                                                                                                                                                                                              -
                                                                                                                                                                                              -// esm.mjs
                                                                                                                                                                                              -import { createRequire } from 'module';
                                                                                                                                                                                              -
                                                                                                                                                                                              -const require = createRequire(import.meta.url);
                                                                                                                                                                                              -
                                                                                                                                                                                              -const cjs = require('./cjs.cjs');
                                                                                                                                                                                              -cjs === 'cjs'; // true
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Builtin modules#

                                                                                                                                                                                              -

                                                                                                                                                                                              Builtin modules will provide named exports of their public API. A -default export is also provided which is the value of the CommonJS exports. -The default export can be used for, among other things, modifying the named -exports. Named exports of builtin modules are updated only by calling -module.syncBuiltinESMExports().

                                                                                                                                                                                              -
                                                                                                                                                                                              import EventEmitter from 'events';
                                                                                                                                                                                              -const e = new EventEmitter();
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              import { readFile } from 'fs';
                                                                                                                                                                                              -readFile('./foo.txt', (err, source) => {
                                                                                                                                                                                              -  if (err) {
                                                                                                                                                                                              -    console.error(err);
                                                                                                                                                                                              -  } else {
                                                                                                                                                                                              -    console.log(source);
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -});
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              import fs, { readFileSync } from 'fs';
                                                                                                                                                                                              -import { syncBuiltinESMExports } from 'module';
                                                                                                                                                                                              -
                                                                                                                                                                                              -fs.readFileSync = () => Buffer.from('Hello, ESM');
                                                                                                                                                                                              -syncBuiltinESMExports();
                                                                                                                                                                                              -
                                                                                                                                                                                              -fs.readFileSync === readFileSync;
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Experimental JSON Modules#

                                                                                                                                                                                              -

                                                                                                                                                                                              Currently importing JSON modules are only supported in the commonjs mode -and are loaded using the CJS loader. WHATWG JSON modules specification are -still being standardized, and are experimentally supported by including the -additional flag --experimental-json-modules when running Node.js.

                                                                                                                                                                                              -

                                                                                                                                                                                              When the --experimental-json-modules flag is included both the -commonjs and module mode will use the new experimental JSON -loader. The imported JSON only exposes a default, there is no -support for named exports. A cache entry is created in the CommonJS -cache, to avoid duplication. The same object will be returned in -CommonJS if the JSON module has already been imported from the -same path.

                                                                                                                                                                                              -

                                                                                                                                                                                              Assuming an index.mjs with

                                                                                                                                                                                              - -
                                                                                                                                                                                              import packageConfig from './package.json';
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The --experimental-json-modules flag is needed for the module -to work.

                                                                                                                                                                                              -
                                                                                                                                                                                              node index.mjs # fails
                                                                                                                                                                                              -node --experimental-json-modules index.mjs # works
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Experimental Wasm Modules#

                                                                                                                                                                                              -

                                                                                                                                                                                              Importing Web Assembly modules is supported under the ---experimental-wasm-modules flag, allowing any .wasm files to be -imported as normal modules while also supporting their module imports.

                                                                                                                                                                                              -

                                                                                                                                                                                              This integration is in line with the -ES Module Integration Proposal for Web Assembly.

                                                                                                                                                                                              -

                                                                                                                                                                                              For example, an index.mjs containing:

                                                                                                                                                                                              -
                                                                                                                                                                                              import * as M from './module.wasm';
                                                                                                                                                                                              -console.log(M);
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              executed under:

                                                                                                                                                                                              -
                                                                                                                                                                                              node --experimental-wasm-modules index.mjs
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              would provide the exports interface for the instantiation of module.wasm.

                                                                                                                                                                                              -

                                                                                                                                                                                              Experimental Loaders#

                                                                                                                                                                                              -

                                                                                                                                                                                              Note: This API is currently being redesigned and will still change.

                                                                                                                                                                                              - -

                                                                                                                                                                                              To customize the default module resolution, loader hooks can optionally be -provided via a --experimental-loader ./loader-name.mjs argument to Node.js.

                                                                                                                                                                                              -

                                                                                                                                                                                              When hooks are used they only apply to ES module loading and not to any -CommonJS modules loaded.

                                                                                                                                                                                              -

                                                                                                                                                                                              Hooks#

                                                                                                                                                                                              -

                                                                                                                                                                                              resolve hook#

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Note: The loaders API is being redesigned. This hook may disappear or its -signature may change. Do not rely on the API described below.

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The resolve hook returns the resolved file URL for a given module specifier -and parent URL. The module specifier is the string in an import statement or -import() expression, and the parent URL is the URL of the module that imported -this one, or undefined if this is the main entry point for the application.

                                                                                                                                                                                              -

                                                                                                                                                                                              The conditions property on the context is an array of conditions for -Conditional Exports that apply to this resolution request. They can be used -for looking up conditional mappings elsewhere or to modify the list when calling -the default resolution logic.

                                                                                                                                                                                              -

                                                                                                                                                                                              The current set of Node.js default conditions will always -be in the context.conditions list passed to the hook. If the hook wants to -ensure Node.js-compatible resolution logic, all items from this default -condition list must be passed through to the defaultResolve function.

                                                                                                                                                                                              -
                                                                                                                                                                                              /**
                                                                                                                                                                                              - * @param {string} specifier
                                                                                                                                                                                              - * @param {object} context
                                                                                                                                                                                              - * @param {string} context.parentURL
                                                                                                                                                                                              - * @param {string[]} context.conditions
                                                                                                                                                                                              - * @param {function} defaultResolve
                                                                                                                                                                                              - * @returns {object} response
                                                                                                                                                                                              - * @returns {string} response.url
                                                                                                                                                                                              - */
                                                                                                                                                                                              -export async function resolve(specifier, context, defaultResolve) {
                                                                                                                                                                                              -  const { parentURL = null } = context;
                                                                                                                                                                                              -  if (someCondition) {
                                                                                                                                                                                              -    // For some or all specifiers, do some custom logic for resolving.
                                                                                                                                                                                              -    // Always return an object of the form {url: <string>}
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      url: (parentURL) ?
                                                                                                                                                                                              -        new URL(specifier, parentURL).href : new URL(specifier).href
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -  if (anotherCondition) {
                                                                                                                                                                                              -    // When calling the defaultResolve, the arguments can be modified. In this
                                                                                                                                                                                              -    // case it's adding another value for matching conditional exports.
                                                                                                                                                                                              -    return defaultResolve(specifier, {
                                                                                                                                                                                              -      ...context,
                                                                                                                                                                                              -      conditions: [...context.conditions, 'another-condition'],
                                                                                                                                                                                              -    });
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -  // Defer to Node.js for all other specifiers.
                                                                                                                                                                                              -  return defaultResolve(specifier, context, defaultResolve);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              getFormat hook#

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Note: The loaders API is being redesigned. This hook may disappear or its -signature may change. Do not rely on the API described below.

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The getFormat hook provides a way to define a custom method of determining how -a URL should be interpreted. This can be one of the following:

                                                                                                                                                                                              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                                                                                                                                                                              formatDescription
                                                                                                                                                                                              'builtin'Load a Node.js builtin module
                                                                                                                                                                                              'commonjs'Load a Node.js CommonJS module
                                                                                                                                                                                              'dynamic'Use a dynamic instantiate hook
                                                                                                                                                                                              'json'Load a JSON file
                                                                                                                                                                                              'module'Load a standard JavaScript module (ES module)
                                                                                                                                                                                              'wasm'Load a WebAssembly module
                                                                                                                                                                                              -
                                                                                                                                                                                              /**
                                                                                                                                                                                              - * @param {string} url
                                                                                                                                                                                              - * @param {object} context (currently empty)
                                                                                                                                                                                              - * @param {function} defaultGetFormat
                                                                                                                                                                                              - * @returns {object} response
                                                                                                                                                                                              - * @returns {string} response.format
                                                                                                                                                                                              - */
                                                                                                                                                                                              -export async function getFormat(url, context, defaultGetFormat) {
                                                                                                                                                                                              -  if (someCondition) {
                                                                                                                                                                                              -    // For some or all URLs, do some custom logic for determining format.
                                                                                                                                                                                              -    // Always return an object of the form {format: <string>}, where the
                                                                                                                                                                                              -    // format is one of the strings in the table above.
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      format: 'module'
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -  // Defer to Node.js for all other URLs.
                                                                                                                                                                                              -  return defaultGetFormat(url, context, defaultGetFormat);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              getSource hook#

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Note: The loaders API is being redesigned. This hook may disappear or its -signature may change. Do not rely on the API described below.

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The getSource hook provides a way to define a custom method for retrieving -the source code of an ES module specifier. This would allow a loader to -potentially avoid reading files from disk.

                                                                                                                                                                                              -
                                                                                                                                                                                              /**
                                                                                                                                                                                              - * @param {string} url
                                                                                                                                                                                              - * @param {object} context
                                                                                                                                                                                              - * @param {string} context.format
                                                                                                                                                                                              - * @param {function} defaultGetSource
                                                                                                                                                                                              - * @returns {object} response
                                                                                                                                                                                              - * @returns {string|buffer} response.source
                                                                                                                                                                                              - */
                                                                                                                                                                                              -export async function getSource(url, context, defaultGetSource) {
                                                                                                                                                                                              -  const { format } = context;
                                                                                                                                                                                              -  if (someCondition) {
                                                                                                                                                                                              -    // For some or all URLs, do some custom logic for retrieving the source.
                                                                                                                                                                                              -    // Always return an object of the form {source: <string|buffer>}.
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      source: '...'
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -  // Defer to Node.js for all other URLs.
                                                                                                                                                                                              -  return defaultGetSource(url, context, defaultGetSource);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              transformSource hook#

                                                                                                                                                                                              -
                                                                                                                                                                                              NODE_OPTIONS='--experimental-loader ./custom-loader.mjs' node x.js
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Note: The loaders API is being redesigned. This hook may disappear or its -signature may change. Do not rely on the API described below.

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The transformSource hook provides a way to modify the source code of a loaded -ES module file after the source string has been loaded but before Node.js has -done anything with it.

                                                                                                                                                                                              -

                                                                                                                                                                                              If this hook is used to convert unknown-to-Node.js file types into executable -JavaScript, a resolve hook is also necessary in order to register any -unknown-to-Node.js file extensions. See the transpiler loader example below.

                                                                                                                                                                                              -
                                                                                                                                                                                              /**
                                                                                                                                                                                              - * @param {string|buffer} source
                                                                                                                                                                                              - * @param {object} context
                                                                                                                                                                                              - * @param {string} context.url
                                                                                                                                                                                              - * @param {string} context.format
                                                                                                                                                                                              - * @param {function} defaultTransformSource
                                                                                                                                                                                              - * @returns {object} response
                                                                                                                                                                                              - * @returns {string|buffer} response.source
                                                                                                                                                                                              - */
                                                                                                                                                                                              -export async function transformSource(source,
                                                                                                                                                                                              -                                      context,
                                                                                                                                                                                              -                                      defaultTransformSource) {
                                                                                                                                                                                              -  const { url, format } = context;
                                                                                                                                                                                              -  if (someCondition) {
                                                                                                                                                                                              -    // For some or all URLs, do some custom logic for modifying the source.
                                                                                                                                                                                              -    // Always return an object of the form {source: <string|buffer>}.
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      source: '...'
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -  // Defer to Node.js for all other sources.
                                                                                                                                                                                              -  return defaultTransformSource(
                                                                                                                                                                                              -    source, context, defaultTransformSource);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              getGlobalPreloadCode hook#

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Note: The loaders API is being redesigned. This hook may disappear or its -signature may change. Do not rely on the API described below.

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Sometimes it can be necessary to run some code inside of the same global scope -that the application will run in. This hook allows to return a string that will -be ran as sloppy-mode script on startup.

                                                                                                                                                                                              -

                                                                                                                                                                                              Similar to how CommonJS wrappers work, the code runs in an implicit function -scope. The only argument is a require-like function that can be used to load -builtins like "fs": getBuiltin(request: string).

                                                                                                                                                                                              -

                                                                                                                                                                                              If the code needs more advanced require features, it will have to construct -its own require using module.createRequire().

                                                                                                                                                                                              -
                                                                                                                                                                                              /**
                                                                                                                                                                                              - * @returns {string} Code to run before application startup
                                                                                                                                                                                              - */
                                                                                                                                                                                              -export function getGlobalPreloadCode() {
                                                                                                                                                                                              -  return `\
                                                                                                                                                                                              -globalThis.someInjectedProperty = 42;
                                                                                                                                                                                              -console.log('I just set some globals!');
                                                                                                                                                                                              -
                                                                                                                                                                                              -const { createRequire } = getBuiltin('module');
                                                                                                                                                                                              -
                                                                                                                                                                                              -const require = createRequire(process.cwd() + '/<preload>');
                                                                                                                                                                                              -// [...]
                                                                                                                                                                                              -`;
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              dynamicInstantiate hook#

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Note: The loaders API is being redesigned. This hook may disappear or its -signature may change. Do not rely on the API described below.

                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              To create a custom dynamic module that doesn't correspond to one of the -existing format interpretations, the dynamicInstantiate hook can be used. -This hook is called only for modules that return format: 'dynamic' from -the getFormat hook.

                                                                                                                                                                                              -
                                                                                                                                                                                              /**
                                                                                                                                                                                              - * @param {string} url
                                                                                                                                                                                              - * @returns {object} response
                                                                                                                                                                                              - * @returns {array} response.exports
                                                                                                                                                                                              - * @returns {function} response.execute
                                                                                                                                                                                              - */
                                                                                                                                                                                              -export async function dynamicInstantiate(url) {
                                                                                                                                                                                              -  return {
                                                                                                                                                                                              -    exports: ['customExportName'],
                                                                                                                                                                                              -    execute: (exports) => {
                                                                                                                                                                                              -      // Get and set functions provided for pre-allocated export names
                                                                                                                                                                                              -      exports.customExportName.set('value');
                                                                                                                                                                                              -    }
                                                                                                                                                                                              -  };
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              With the list of module exports provided upfront, the execute function will -then be called at the exact point of module evaluation order for that module -in the import tree.

                                                                                                                                                                                              -

                                                                                                                                                                                              Examples#

                                                                                                                                                                                              -

                                                                                                                                                                                              The various loader hooks can be used together to accomplish wide-ranging -customizations of Node.js’ code loading and evaluation behaviors.

                                                                                                                                                                                              -

                                                                                                                                                                                              HTTPS loader#

                                                                                                                                                                                              -

                                                                                                                                                                                              In current Node.js, specifiers starting with https:// are unsupported. The -loader below registers hooks to enable rudimentary support for such specifiers. -While this may seem like a significant improvement to Node.js core -functionality, there are substantial downsides to actually using this loader: -performance is much slower than loading files from disk, there is no caching, -and there is no security.

                                                                                                                                                                                              -
                                                                                                                                                                                              // https-loader.mjs
                                                                                                                                                                                              -import { get } from 'https';
                                                                                                                                                                                              -
                                                                                                                                                                                              -export function resolve(specifier, context, defaultResolve) {
                                                                                                                                                                                              -  const { parentURL = null } = context;
                                                                                                                                                                                              -
                                                                                                                                                                                              -  // Normally Node.js would error on specifiers starting with 'https://', so
                                                                                                                                                                                              -  // this hook intercepts them and converts them into absolute URLs to be
                                                                                                                                                                                              -  // passed along to the later hooks below.
                                                                                                                                                                                              -  if (specifier.startsWith('https://')) {
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      url: specifier
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  } else if (parentURL && parentURL.startsWith('https://')) {
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      url: new URL(specifier, parentURL).href
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -
                                                                                                                                                                                              -  // Let Node.js handle all other specifiers.
                                                                                                                                                                                              -  return defaultResolve(specifier, context, defaultResolve);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -export function getFormat(url, context, defaultGetFormat) {
                                                                                                                                                                                              -  // This loader assumes all network-provided JavaScript is ES module code.
                                                                                                                                                                                              -  if (url.startsWith('https://')) {
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      format: 'module'
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -
                                                                                                                                                                                              -  // Let Node.js handle all other URLs.
                                                                                                                                                                                              -  return defaultGetFormat(url, context, defaultGetFormat);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -export function getSource(url, context, defaultGetSource) {
                                                                                                                                                                                              -  // For JavaScript to be loaded over the network, we need to fetch and
                                                                                                                                                                                              -  // return it.
                                                                                                                                                                                              -  if (url.startsWith('https://')) {
                                                                                                                                                                                              -    return new Promise((resolve, reject) => {
                                                                                                                                                                                              -      get(url, (res) => {
                                                                                                                                                                                              -        let data = '';
                                                                                                                                                                                              -        res.on('data', (chunk) => data += chunk);
                                                                                                                                                                                              -        res.on('end', () => resolve({ source: data }));
                                                                                                                                                                                              -      }).on('error', (err) => reject(err));
                                                                                                                                                                                              -    });
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -
                                                                                                                                                                                              -  // Let Node.js handle all other URLs.
                                                                                                                                                                                              -  return defaultGetSource(url, context, defaultGetSource);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              // main.mjs
                                                                                                                                                                                              -import { VERSION } from 'https://coffeescript.org/browser-compiler-modern/coffeescript.js';
                                                                                                                                                                                              -
                                                                                                                                                                                              -console.log(VERSION);
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              With this loader, running:

                                                                                                                                                                                              -
                                                                                                                                                                                              node --experimental-loader ./https-loader.mjs ./main.js
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Will print the current version of CoffeeScript per the module at the URL in -main.mjs.

                                                                                                                                                                                              -

                                                                                                                                                                                              Transpiler loader#

                                                                                                                                                                                              -

                                                                                                                                                                                              Sources that are in formats Node.js doesn’t understand can be converted into -JavaScript using the transformSource hook. Before that hook gets called, -however, other hooks need to tell Node.js not to throw an error on unknown file -types; and to tell Node.js how to load this new file type.

                                                                                                                                                                                              -

                                                                                                                                                                                              This is less performant than transpiling source files before running -Node.js; a transpiler loader should only be used for development and testing -purposes.

                                                                                                                                                                                              -
                                                                                                                                                                                              // coffeescript-loader.mjs
                                                                                                                                                                                              -import { URL, pathToFileURL } from 'url';
                                                                                                                                                                                              -import CoffeeScript from 'coffeescript';
                                                                                                                                                                                              -
                                                                                                                                                                                              -const baseURL = pathToFileURL(`${process.cwd()}/`).href;
                                                                                                                                                                                              -
                                                                                                                                                                                              -// CoffeeScript files end in .coffee, .litcoffee or .coffee.md.
                                                                                                                                                                                              -const extensionsRegex = /\.coffee$|\.litcoffee$|\.coffee\.md$/;
                                                                                                                                                                                              -
                                                                                                                                                                                              -export function resolve(specifier, context, defaultResolve) {
                                                                                                                                                                                              -  const { parentURL = baseURL } = context;
                                                                                                                                                                                              -
                                                                                                                                                                                              -  // Node.js normally errors on unknown file extensions, so return a URL for
                                                                                                                                                                                              -  // specifiers ending in the CoffeeScript file extensions.
                                                                                                                                                                                              -  if (extensionsRegex.test(specifier)) {
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      url: new URL(specifier, parentURL).href
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -
                                                                                                                                                                                              -  // Let Node.js handle all other specifiers.
                                                                                                                                                                                              -  return defaultResolve(specifier, context, defaultResolve);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -export function getFormat(url, context, defaultGetFormat) {
                                                                                                                                                                                              -  // Now that we patched resolve to let CoffeeScript URLs through, we need to
                                                                                                                                                                                              -  // tell Node.js what format such URLs should be interpreted as. For the
                                                                                                                                                                                              -  // purposes of this loader, all CoffeeScript URLs are ES modules.
                                                                                                                                                                                              -  if (extensionsRegex.test(url)) {
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      format: 'module'
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -
                                                                                                                                                                                              -  // Let Node.js handle all other URLs.
                                                                                                                                                                                              -  return defaultGetFormat(url, context, defaultGetFormat);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -export function transformSource(source, context, defaultTransformSource) {
                                                                                                                                                                                              -  const { url, format } = context;
                                                                                                                                                                                              -
                                                                                                                                                                                              -  if (extensionsRegex.test(url)) {
                                                                                                                                                                                              -    return {
                                                                                                                                                                                              -      source: CoffeeScript.compile(source, { bare: true })
                                                                                                                                                                                              -    };
                                                                                                                                                                                              -  }
                                                                                                                                                                                              +

                                                                                                                                                                                              The error.stack property is a string describing the point in the code at which +the Error was instantiated.

                                                                                                                                                                                              +
                                                                                                                                                                                              Error: Things keep happening!
                                                                                                                                                                                              +   at /home/gbusey/file.js:525:2
                                                                                                                                                                                              +   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)
                                                                                                                                                                                              +   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)
                                                                                                                                                                                              +   at increaseSynergy (/home/gbusey/actors.js:701:6)
                                                                                                                                                                                              +

                                                                                                                                                                                              The first line is formatted as <error class name>: <error message>, and +is followed by a series of stack frames (each line beginning with "at "). +Each frame describes a call site within the code that lead to the error being +generated. V8 attempts to display a name for each function (by variable name, +function name, or object method name), but occasionally it will not be able to +find a suitable name. If V8 cannot determine a name for the function, only +location information will be displayed for that frame. Otherwise, the +determined function name will be displayed with location information appended +in parentheses.

                                                                                                                                                                                              +

                                                                                                                                                                                              Frames are only generated for JavaScript functions. If, for example, execution +synchronously passes through a C++ addon function called cheetahify which +itself calls a JavaScript function, the frame representing the cheetahify call +will not be present in the stack traces:

                                                                                                                                                                                              +
                                                                                                                                                                                              const cheetahify = require('./native-binding.node');
                                                                                                                                                                                               
                                                                                                                                                                                              -  // Let Node.js handle all other sources.
                                                                                                                                                                                              -  return defaultTransformSource(source, context, defaultTransformSource);
                                                                                                                                                                                              +function makeFaster() {
                                                                                                                                                                                              +  // `cheetahify()` *synchronously* calls speedy.
                                                                                                                                                                                              +  cheetahify(function speedy() {
                                                                                                                                                                                              +    throw new Error('oh no!');
                                                                                                                                                                                              +  });
                                                                                                                                                                                               }
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              # main.coffee
                                                                                                                                                                                              -import { scream } from './scream.coffee'
                                                                                                                                                                                              -console.log scream 'hello, world'
                                                                                                                                                                                               
                                                                                                                                                                                              -import { version } from 'process'
                                                                                                                                                                                              -console.log "Brought to you by Node.js version #{version}"
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              # scream.coffee
                                                                                                                                                                                              -export scream = (str) -> str.toUpperCase()
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              With this loader, running:

                                                                                                                                                                                              -
                                                                                                                                                                                              node --experimental-loader ./coffeescript-loader.mjs main.coffee
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Will cause main.coffee to be turned into JavaScript after its source code is -loaded from disk but before Node.js executes it; and so on for any .coffee, -.litcoffee or .coffee.md files referenced via import statements of any -loaded file.

                                                                                                                                                                                              -

                                                                                                                                                                                              Resolution Algorithm#

                                                                                                                                                                                              -

                                                                                                                                                                                              Features#

                                                                                                                                                                                              -

                                                                                                                                                                                              The resolver has the following properties:

                                                                                                                                                                                              +makeFaster(); +// will throw: +// /home/gbusey/file.js:6 +// throw new Error('oh no!'); +// ^ +// Error: oh no! +// at speedy (/home/gbusey/file.js:6:11) +// at makeFaster (/home/gbusey/file.js:5:3) +// at Object.<anonymous> (/home/gbusey/file.js:10:1) +// at Module._compile (module.js:456:26) +// at Object.Module._extensions..js (module.js:474:10) +// at Module.load (module.js:356:32) +// at Function.Module._load (module.js:312:12) +// at Function.Module.runMain (module.js:497:10) +// at startup (node.js:119:16) +// at node.js:906:3
                                                                                                                                                                                              +

                                                                                                                                                                                              The location information will be one of:

                                                                                                                                                                                                -
                                                                                                                                                                                              • FileURL-based resolution as is used by ES modules
                                                                                                                                                                                              • -
                                                                                                                                                                                              • Support for builtin module loading
                                                                                                                                                                                              • -
                                                                                                                                                                                              • Relative and absolute URL resolution
                                                                                                                                                                                              • -
                                                                                                                                                                                              • No default extensions
                                                                                                                                                                                              • -
                                                                                                                                                                                              • No folder mains
                                                                                                                                                                                              • -
                                                                                                                                                                                              • Bare specifier package resolution lookup through node_modules
                                                                                                                                                                                              • +
                                                                                                                                                                                              • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                              • +
                                                                                                                                                                                              • plain-filename.js:line:column, if the frame represents a call internal +to Node.js.
                                                                                                                                                                                              • +
                                                                                                                                                                                              • /absolute/path/to/file.js:line:column, if the frame represents a call in +a user program, or its dependencies.
                                                                                                                                                                                              -

                                                                                                                                                                                              Resolver Algorithm#

                                                                                                                                                                                              -

                                                                                                                                                                                              The algorithm to load an ES module specifier is given through the -ESM_RESOLVE method below. It returns the resolved URL for a -module specifier relative to a parentURL.

                                                                                                                                                                                              -

                                                                                                                                                                                              The algorithm to determine the module format of a resolved URL is -provided by ESM_FORMAT, which returns the unique module -format for any file. The "module" format is returned for an ECMAScript -Module, while the "commonjs" format is used to indicate loading through the -legacy CommonJS loader. Additional formats such as "addon" can be extended in -future updates.

                                                                                                                                                                                              -

                                                                                                                                                                                              In the following algorithms, all subroutine errors are propagated as errors -of these top-level routines unless stated otherwise.

                                                                                                                                                                                              -

                                                                                                                                                                                              defaultEnv is the conditional environment name priority array, -["node", "import"].

                                                                                                                                                                                              -

                                                                                                                                                                                              The resolver can throw the following errors:

                                                                                                                                                                                              +

                                                                                                                                                                                              The string representing the stack trace is lazily generated when the +error.stack property is accessed.

                                                                                                                                                                                              +

                                                                                                                                                                                              The number of frames captured by the stack trace is bounded by the smaller of +Error.stackTraceLimit or the number of available frames on the current event +loop tick.

                                                                                                                                                                                              +

                                                                                                                                                                                              Class: AssertionError#

                                                                                                                                                                                                -
                                                                                                                                                                                              • Invalid Module Specifier: Module specifier is an invalid URL, package name -or package subpath specifier.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • Invalid Package Configuration: package.json configuration is invalid or -contains an invalid configuration.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • Invalid Package Target: Package exports define a target module within the -package that is an invalid type or string target.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • Package Path Not Exported: Package exports do not define or permit a target -subpath in the package for the given module.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • Module Not Found: The package or module requested does not exist.
                                                                                                                                                                                              • +
                                                                                                                                                                                              • Extends: <errors.Error>
                                                                                                                                                                                              -
                                                                                                                                                                                              -Resolver algorithm specification -

                                                                                                                                                                                              ESM_RESOLVE(specifier, parentURL)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. Let resolvedURL be undefined.
                                                                                                                                                                                              2. +

                                                                                                                                                                                                Indicates the failure of an assertion. For details, see +Class: assert.AssertionError.

                                                                                                                                                                                                +

                                                                                                                                                                                                Class: RangeError#

                                                                                                                                                                                                + +

                                                                                                                                                                                                Indicates that a provided argument was not within the set or range of +acceptable values for a function; whether that is a numeric range, or +outside the set of options for a given function parameter.

                                                                                                                                                                                                +
                                                                                                                                                                                                require('net').connect(-1);
                                                                                                                                                                                                +// Throws "RangeError: "port" option should be >= 0 and < 65536: -1"
                                                                                                                                                                                                +

                                                                                                                                                                                                Node.js will generate and throw RangeError instances immediately as a form +of argument validation.

                                                                                                                                                                                                +

                                                                                                                                                                                                Class: ReferenceError#

                                                                                                                                                                                                + +

                                                                                                                                                                                                Indicates that an attempt is being made to access a variable that is not +defined. Such errors commonly indicate typos in code, or an otherwise broken +program.

                                                                                                                                                                                                +

                                                                                                                                                                                                While client code may generate and propagate these errors, in practice, only V8 +will do so.

                                                                                                                                                                                                +
                                                                                                                                                                                                doesNotExist;
                                                                                                                                                                                                +// Throws ReferenceError, doesNotExist is not a variable in this program.
                                                                                                                                                                                                +

                                                                                                                                                                                                Unless an application is dynamically generating and running code, +ReferenceError instances indicate a bug in the code or its dependencies.

                                                                                                                                                                                                +

                                                                                                                                                                                                Class: SyntaxError#

                                                                                                                                                                                                + +

                                                                                                                                                                                                Indicates that a program is not valid JavaScript. These errors may only be +generated and propagated as a result of code evaluation. Code evaluation may +happen as a result of eval, Function, require, or vm. These errors +are almost always indicative of a broken program.

                                                                                                                                                                                                +
                                                                                                                                                                                                try {
                                                                                                                                                                                                +  require('vm').runInThisContext('binary ! isNotOk');
                                                                                                                                                                                                +} catch (err) {
                                                                                                                                                                                                +  // 'err' will be a SyntaxError.
                                                                                                                                                                                                +}
                                                                                                                                                                                                +

                                                                                                                                                                                                SyntaxError instances are unrecoverable in the context that created them – +they may only be caught by other contexts.

                                                                                                                                                                                                +

                                                                                                                                                                                                Class: SystemError#

                                                                                                                                                                                                + +

                                                                                                                                                                                                Node.js generates system errors when exceptions occur within its runtime +environment. These usually occur when an application violates an operating +system constraint. For example, a system error will occur if an application +attempts to read a file that does not exist.

                                                                                                                                                                                                +
                                                                                                                                                                                                  +
                                                                                                                                                                                                • address <string> If present, the address to which a network connection +failed
                                                                                                                                                                                                • +
                                                                                                                                                                                                • code <string> The string error code
                                                                                                                                                                                                • +
                                                                                                                                                                                                • dest <string> If present, the file path destination when reporting a file +system error
                                                                                                                                                                                                • +
                                                                                                                                                                                                • errno <number> | <string> The system-provided error number
                                                                                                                                                                                                • +
                                                                                                                                                                                                • info <Object> If present, extra details about the error condition
                                                                                                                                                                                                • +
                                                                                                                                                                                                • message <string> A system-provided human-readable description of the error
                                                                                                                                                                                                • +
                                                                                                                                                                                                • path <string> If present, the file path when reporting a file system error
                                                                                                                                                                                                • +
                                                                                                                                                                                                • port <number> If present, the network connection port that is not available
                                                                                                                                                                                                • +
                                                                                                                                                                                                • syscall <string> The name of the system call that triggered the error
                                                                                                                                                                                                • +
                                                                                                                                                                                                +

                                                                                                                                                                                                error.address#

                                                                                                                                                                                                + +

                                                                                                                                                                                                If present, error.address is a string describing the address to which a +network connection failed.

                                                                                                                                                                                                +

                                                                                                                                                                                                error.code#

                                                                                                                                                                                                + +

                                                                                                                                                                                                The error.code property is a string representing the error code.

                                                                                                                                                                                                +

                                                                                                                                                                                                error.dest#

                                                                                                                                                                                                + +

                                                                                                                                                                                                If present, error.dest is the file path destination when reporting a file +system error.

                                                                                                                                                                                                +

                                                                                                                                                                                                error.errno#

                                                                                                                                                                                                + +

                                                                                                                                                                                                The error.errno property is a number or a string. If it is a number, it is a +negative value which corresponds to the error code defined in +libuv Error handling. See the libuv errno.h header file +(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case +of a string, it is the same as error.code.

                                                                                                                                                                                                +

                                                                                                                                                                                                error.info#

                                                                                                                                                                                                + +

                                                                                                                                                                                                If present, error.info is an object with details about the error condition.

                                                                                                                                                                                                +

                                                                                                                                                                                                error.message#

                                                                                                                                                                                                + +

                                                                                                                                                                                                error.message is a system-provided human-readable description of the error.

                                                                                                                                                                                                +

                                                                                                                                                                                                error.path#

                                                                                                                                                                                                + +

                                                                                                                                                                                                If present, error.path is a string containing a relevant invalid pathname.

                                                                                                                                                                                                +

                                                                                                                                                                                                error.port#

                                                                                                                                                                                                + +

                                                                                                                                                                                                If present, error.port is the network connection port that is not available.

                                                                                                                                                                                                +

                                                                                                                                                                                                error.syscall#

                                                                                                                                                                                                + +

                                                                                                                                                                                                The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                +

                                                                                                                                                                                                Common system errors#

                                                                                                                                                                                                +

                                                                                                                                                                                                This is a list of system errors commonly-encountered when writing a Node.js +program. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                +
                                                                                                                                                                                                • -

                                                                                                                                                                                                  If specifier is a valid URL, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Set resolvedURL to the result of parsing and reserializing -specifier as a URL.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  +

                                                                                                                                                                                                  EACCES (Permission denied): An attempt was made to access a file in a way +forbidden by its file access permissions.

                                                                                                                                                                                                • -

                                                                                                                                                                                                  Otherwise, if specifier starts with "/", then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  +

                                                                                                                                                                                                  EADDRINUSE (Address already in use): An attempt to bind a server +(net, http, or https) to a local address failed due to +another server on the local system already occupying that address.

                                                                                                                                                                                                • -

                                                                                                                                                                                                  Otherwise, if specifier starts with "./" or "../", then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Set resolvedURL to the URL resolution of specifier relative to -parentURL.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  +

                                                                                                                                                                                                  ECONNREFUSED (Connection refused): No connection could be made because the +target machine actively refused it. This usually results from trying to +connect to a service that is inactive on the foreign host.

                                                                                                                                                                                                • -

                                                                                                                                                                                                  Otherwise,

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Note: specifier is now a bare specifier.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  3. Set resolvedURL the result of -PACKAGE_RESOLVE(specifier, parentURL).
                                                                                                                                                                                                  4. -
                                                                                                                                                                                                  +

                                                                                                                                                                                                  ECONNRESET (Connection reset by peer): A connection was forcibly closed by +a peer. This normally results from a loss of the connection on the remote +socket due to a timeout or reboot. Commonly encountered via the http +and net modules.

                                                                                                                                                                                                • -

                                                                                                                                                                                                  If resolvedURL contains any percent encodings of "/" or "\" ("%2f" -and "%5C" respectively), then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  +

                                                                                                                                                                                                  EEXIST (File exists): An existing file was the target of an operation that +required that the target not exist.

                                                                                                                                                                                                • -

                                                                                                                                                                                                  If the file at resolvedURL is a directory, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Throw an Unsupported Directory Import error.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  +

                                                                                                                                                                                                  EISDIR (Is a directory): An operation expected a file, but the given +pathname was a directory.

                                                                                                                                                                                                • -

                                                                                                                                                                                                  If the file at resolvedURL does not exist, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Throw a Module Not Found error.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  +

                                                                                                                                                                                                  EMFILE (Too many open files in system): Maximum number of +file descriptors allowable on the system has been reached, and +requests for another descriptor cannot be fulfilled until at least one +has been closed. This is encountered when opening many files at once in +parallel, especially on systems (in particular, macOS) where there is a low +file descriptor limit for processes. To remedy a low limit, run +ulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                • -
                                                                                                                                                                                                • Set resolvedURL to the real path of resolvedURL.
                                                                                                                                                                                                • -
                                                                                                                                                                                                • Let format be the result of ESM_FORMAT(resolvedURL).
                                                                                                                                                                                                • -
                                                                                                                                                                                                • Load resolvedURL as module format, format.
                                                                                                                                                                                                • -
                                                                                                                                                                                                • Return resolvedURL.
                                                                                                                                                                                                • -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              PACKAGE_RESOLVE(packageSpecifier, parentURL)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. Let packageName be undefined.
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. Let packageSubpath be undefined.
                                                                                                                                                                                              4. -

                                                                                                                                                                                                If packageSpecifier is an empty string, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                +

                                                                                                                                                                                                ENOENT (No such file or directory): Commonly raised by fs operations +to indicate that a component of the specified pathname does not exist. No +entity (file or directory) could be found by the given path.

                                                                                                                                                                                              5. -

                                                                                                                                                                                                Otherwise,

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. -

                                                                                                                                                                                                  If packageSpecifier does not contain a "/" separator, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. Set packageName to the substring of packageSpecifier -until the second "/" separator or the end of the string.
                                                                                                                                                                                                4. -
                                                                                                                                                                                                -
                                                                                                                                                                                              6. -
                                                                                                                                                                                              7. -

                                                                                                                                                                                                If packageName starts with "." or contains "\" or "%", then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              8. -
                                                                                                                                                                                              9. Let packageSubpath be undefined.
                                                                                                                                                                                              10. -
                                                                                                                                                                                              11. -

                                                                                                                                                                                                If the length of packageSpecifier is greater than the length of -packageName, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Set packageSubpath to "." concatenated with the substring of -packageSpecifier from the position at the length of packageName.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              12. -
                                                                                                                                                                                              13. -

                                                                                                                                                                                                If packageSubpath contains any "." or ".." segments or percent -encoded strings for "/" or "\", then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              14. -
                                                                                                                                                                                              15. Set selfUrl to the result of -SELF_REFERENCE_RESOLVE(packageName, packageSubpath, parentURL).
                                                                                                                                                                                              16. -
                                                                                                                                                                                              17. If selfUrl isn't empty, return selfUrl.
                                                                                                                                                                                              18. -
                                                                                                                                                                                              19. -

                                                                                                                                                                                                If packageSubpath is undefined and packageName is a Node.js builtin -module, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Return the string "nodejs:" concatenated with packageSpecifier.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              20. -
                                                                                                                                                                                              21. -

                                                                                                                                                                                                While parentURL is not the file system root,

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Let packageURL be the URL resolution of "node_modules/" -concatenated with packageSpecifier, relative to parentURL.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. Set parentURL to the parent folder URL of parentURL.
                                                                                                                                                                                                4. -
                                                                                                                                                                                                5. -

                                                                                                                                                                                                  If the folder at packageURL does not exist, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Set parentURL to the parent URL path of parentURL.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  3. Continue the next loop iteration.
                                                                                                                                                                                                  4. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                6. -
                                                                                                                                                                                                7. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                8. -
                                                                                                                                                                                                9. -

                                                                                                                                                                                                  If packageSubpath is equal to "./", then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Return packageURL + "/".
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                10. -
                                                                                                                                                                                                11. -

                                                                                                                                                                                                  If packageSubpath is _undefined__, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Return the result of PACKAGE_MAIN_RESOLVE(packageURL, -pjson).
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                12. -
                                                                                                                                                                                                13. -

                                                                                                                                                                                                  Otherwise,

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. -

                                                                                                                                                                                                    If pjson is not null and pjson has an "exports" key, then

                                                                                                                                                                                                    -
                                                                                                                                                                                                      -
                                                                                                                                                                                                    1. Let exports be pjson.exports.
                                                                                                                                                                                                    2. -
                                                                                                                                                                                                    3. -

                                                                                                                                                                                                      If exports is not null or undefined, then

                                                                                                                                                                                                      -
                                                                                                                                                                                                        -
                                                                                                                                                                                                      1. Return PACKAGE_EXPORTS_RESOLVE(packageURL, -packageSubpath, pjson.exports).
                                                                                                                                                                                                      2. -
                                                                                                                                                                                                      -
                                                                                                                                                                                                    4. -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  3. Return the URL resolution of packageSubpath in packageURL.
                                                                                                                                                                                                  4. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                14. -
                                                                                                                                                                                                -
                                                                                                                                                                                              22. -
                                                                                                                                                                                              23. Throw a Module Not Found error.
                                                                                                                                                                                              24. -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              SELF_REFERENCE_RESOLVE(packageName, packageSubpath, parentURL)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. Let packageURL be the result of READ_PACKAGE_SCOPE(parentURL).
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. -

                                                                                                                                                                                                If packageURL is null, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Return undefined.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              4. -
                                                                                                                                                                                              5. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                              6. -
                                                                                                                                                                                              7. -

                                                                                                                                                                                                If pjson does not include an "exports" property, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Return undefined.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              8. -
                                                                                                                                                                                              9. -

                                                                                                                                                                                                If pjson.name is equal to packageName, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. -

                                                                                                                                                                                                  If packageSubpath is equal to "./", then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Return packageURL + "/".
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. -

                                                                                                                                                                                                  If packageSubpath is undefined, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Return the result of PACKAGE_MAIN_RESOLVE(packageURL, pjson).
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                4. -
                                                                                                                                                                                                5. -

                                                                                                                                                                                                  Otherwise,

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. -

                                                                                                                                                                                                    If pjson is not null and pjson has an "exports" key, then

                                                                                                                                                                                                    -
                                                                                                                                                                                                      -
                                                                                                                                                                                                    1. Let exports be pjson.exports.
                                                                                                                                                                                                    2. -
                                                                                                                                                                                                    3. -

                                                                                                                                                                                                      If exports is not null or undefined, then

                                                                                                                                                                                                      -
                                                                                                                                                                                                        -
                                                                                                                                                                                                      1. Return PACKAGE_EXPORTS_RESOLVE(packageURL, subpath, -pjson.exports).
                                                                                                                                                                                                      2. -
                                                                                                                                                                                                      -
                                                                                                                                                                                                    4. -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  3. Return the URL resolution of subpath in packageURL.
                                                                                                                                                                                                  4. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                6. -
                                                                                                                                                                                                -
                                                                                                                                                                                              10. -
                                                                                                                                                                                              11. Otherwise, return undefined.
                                                                                                                                                                                              12. -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              PACKAGE_MAIN_RESOLVE(packageURL, pjson)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. -

                                                                                                                                                                                                If pjson is null, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Throw a Module Not Found error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. -

                                                                                                                                                                                                If pjson.exports is not null or undefined, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. If exports is an Object with both a key starting with "." and a key -not starting with ".", throw an Invalid Package Configuration error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. -

                                                                                                                                                                                                  If pjson.exports is a String or Array, or an Object containing no -keys starting with ".", then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, -pjson.exports, "").
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                4. -
                                                                                                                                                                                                5. -

                                                                                                                                                                                                  If pjson.exports is an Object containing a "." property, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Let mainExport be the "." property in pjson.exports.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  3. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, -mainExport, "").
                                                                                                                                                                                                  4. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                6. -
                                                                                                                                                                                                7. Throw a Package Path Not Exported error.
                                                                                                                                                                                                8. -
                                                                                                                                                                                                -
                                                                                                                                                                                              4. -
                                                                                                                                                                                              5. Let legacyMainURL be the result applying the legacy -LOAD_AS_DIRECTORY CommonJS resolver to packageURL, throwing a -Module Not Found error for no resolution.
                                                                                                                                                                                              6. -
                                                                                                                                                                                              7. Return legacyMainURL.
                                                                                                                                                                                              8. -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              PACKAGE_EXPORTS_RESOLVE(packageURL, packagePath, exports)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. If exports is an Object with both a key starting with "." and a key not -starting with ".", throw an Invalid Package Configuration error.
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. -

                                                                                                                                                                                                If exports is an Object and all keys of exports start with ".", then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Set packagePath to "./" concatenated with packagePath.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. -

                                                                                                                                                                                                  If packagePath is a key of exports, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Let target be the value of exports[packagePath].
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  3. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target, -"", defaultEnv).
                                                                                                                                                                                                  4. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                4. -
                                                                                                                                                                                                5. Let directoryKeys be the list of keys of exports ending in -"/", sorted by length descending.
                                                                                                                                                                                                6. -
                                                                                                                                                                                                7. -

                                                                                                                                                                                                  For each key directory in directoryKeys, do

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. -

                                                                                                                                                                                                    If packagePath starts with directory, then

                                                                                                                                                                                                    -
                                                                                                                                                                                                      -
                                                                                                                                                                                                    1. Let target be the value of exports[directory].
                                                                                                                                                                                                    2. -
                                                                                                                                                                                                    3. Let subpath be the substring of target starting at the index -of the length of directory.
                                                                                                                                                                                                    4. -
                                                                                                                                                                                                    5. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target, -subpath, defaultEnv).
                                                                                                                                                                                                    6. -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                8. -
                                                                                                                                                                                                -
                                                                                                                                                                                              4. -
                                                                                                                                                                                              5. Throw a Package Path Not Exported error.
                                                                                                                                                                                              6. -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target, subpath, env)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. -

                                                                                                                                                                                                If target is a String, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. If target does not start with "./" or contains any "node_modules" -segments including "node_modules" percent-encoding, throw an -Invalid Package Target error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. Let resolvedTarget be the URL resolution of the concatenation of -packageURL and target.
                                                                                                                                                                                                4. -
                                                                                                                                                                                                5. If resolvedTarget is not contained in packageURL, throw an -Invalid Package Target error.
                                                                                                                                                                                                6. -
                                                                                                                                                                                                7. If subpath has non-zero length and target does not end with "/", -throw an Invalid Module Specifier error.
                                                                                                                                                                                                8. -
                                                                                                                                                                                                9. Let resolved be the URL resolution of the concatenation of -subpath and resolvedTarget.
                                                                                                                                                                                                10. -
                                                                                                                                                                                                11. If resolved is not contained in resolvedTarget, throw an -Invalid Module Specifier error.
                                                                                                                                                                                                12. -
                                                                                                                                                                                                13. Return resolved.
                                                                                                                                                                                                14. -
                                                                                                                                                                                                -
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. -

                                                                                                                                                                                                Otherwise, if target is a non-null Object, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. If exports contains any index property keys, as defined in ECMA-262 -6.1.7 Array Index, throw an Invalid Package Configuration error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. -

                                                                                                                                                                                                  For each property p of target, in object insertion order as,

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. -

                                                                                                                                                                                                    If p equals "default" or env contains an entry for p, then

                                                                                                                                                                                                    -
                                                                                                                                                                                                      -
                                                                                                                                                                                                    1. Let targetValue be the value of the p property in target.
                                                                                                                                                                                                    2. -
                                                                                                                                                                                                    3. Return the result of PACKAGE_EXPORTS_TARGET_RESOLVE( -packageURL, targetValue, subpath, env), continuing the -loop on any Package Path Not Exported error.
                                                                                                                                                                                                    4. -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                4. -
                                                                                                                                                                                                5. Throw a Package Path Not Exported error.
                                                                                                                                                                                                6. -
                                                                                                                                                                                                -
                                                                                                                                                                                              4. -
                                                                                                                                                                                              5. -

                                                                                                                                                                                                Otherwise, if target is an Array, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. If target.length is zero, throw a _Package Path Not Exported error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. -

                                                                                                                                                                                                  For each item targetValue in target, do

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. If targetValue is an Array, continue the loop.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  3. Return the result of PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, -targetValue, subpath, env), continuing the loop on any -Package Path Not Exported or Invalid Package Target error.
                                                                                                                                                                                                  4. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                4. -
                                                                                                                                                                                                5. Throw the last fallback resolution error.
                                                                                                                                                                                                6. -
                                                                                                                                                                                                -
                                                                                                                                                                                              6. -
                                                                                                                                                                                              7. Otherwise, if target is null, throw a Package Path Not Exported -error.
                                                                                                                                                                                              8. -
                                                                                                                                                                                              9. Otherwise throw an Invalid Package Target error.
                                                                                                                                                                                              10. -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              ESM_FORMAT(url)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. Assert: url corresponds to an existing file.
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. Let pjson be the result of READ_PACKAGE_SCOPE(url).
                                                                                                                                                                                              4. -
                                                                                                                                                                                              5. -

                                                                                                                                                                                                If url ends in ".mjs", then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Return "module".
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              6. -
                                                                                                                                                                                              7. -

                                                                                                                                                                                                If url ends in ".cjs", then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Return "commonjs".
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              8. -
                                                                                                                                                                                              9. -

                                                                                                                                                                                                If pjson?.type exists and is "module", then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. -

                                                                                                                                                                                                  If url ends in ".js", then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Return "module".
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. Throw an Unsupported File Extension error.
                                                                                                                                                                                                4. -
                                                                                                                                                                                                -
                                                                                                                                                                                              10. -
                                                                                                                                                                                              11. -

                                                                                                                                                                                                Otherwise,

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Throw an Unsupported File Extension error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              12. -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              READ_PACKAGE_SCOPE(url)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. Let scopeURL be url.
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. -

                                                                                                                                                                                                While scopeURL is not the file system root,

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. If scopeURL ends in a "node_modules" path segment, return null.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                3. Let pjson be the result of READ_PACKAGE_JSON(scopeURL).
                                                                                                                                                                                                4. -
                                                                                                                                                                                                5. -

                                                                                                                                                                                                  If pjson is not null, then

                                                                                                                                                                                                  -
                                                                                                                                                                                                    -
                                                                                                                                                                                                  1. Return pjson.
                                                                                                                                                                                                  2. -
                                                                                                                                                                                                  -
                                                                                                                                                                                                6. -
                                                                                                                                                                                                7. Set scopeURL to the parent URL of scopeURL.
                                                                                                                                                                                                8. -
                                                                                                                                                                                                -
                                                                                                                                                                                              4. -
                                                                                                                                                                                              5. Return null.
                                                                                                                                                                                              6. -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              READ_PACKAGE_JSON(packageURL)

                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              1. Let pjsonURL be the resolution of "package.json" within packageURL.
                                                                                                                                                                                              2. -
                                                                                                                                                                                              3. -

                                                                                                                                                                                                If the file at pjsonURL does not exist, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Return null.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              4. -
                                                                                                                                                                                              5. -

                                                                                                                                                                                                If the file at packageURL does not parse as valid JSON, then

                                                                                                                                                                                                -
                                                                                                                                                                                                  -
                                                                                                                                                                                                1. Throw an Invalid Package Configuration error.
                                                                                                                                                                                                2. -
                                                                                                                                                                                                -
                                                                                                                                                                                              6. -
                                                                                                                                                                                              7. Return the parsed JSON source of the file at pjsonURL.
                                                                                                                                                                                              8. -
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Customizing ESM specifier resolution algorithm#

                                                                                                                                                                                              -

                                                                                                                                                                                              The current specifier resolution does not support all default behavior of -the CommonJS loader. One of the behavior differences is automatic resolution -of file extensions and the ability to import directories that have an index -file.

                                                                                                                                                                                              -

                                                                                                                                                                                              The --experimental-specifier-resolution=[mode] flag can be used to customize -the extension resolution algorithm. The default mode is explicit, which -requires the full path to a module be provided to the loader. To enable the -automatic extension resolution and importing from directories that include an -index file use the node mode.

                                                                                                                                                                                              -
                                                                                                                                                                                              $ node index.mjs
                                                                                                                                                                                              -success!
                                                                                                                                                                                              -$ node index # Failure!
                                                                                                                                                                                              -Error: Cannot find module
                                                                                                                                                                                              -$ node --experimental-specifier-resolution=node index
                                                                                                                                                                                              -success!
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Errors#

                                                                                                                                                                                              - - -

                                                                                                                                                                                              Applications running in Node.js will generally experience four categories of -errors:

                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              • Standard JavaScript errors such as <EvalError>, <SyntaxError>, <RangeError>, -<ReferenceError>, <TypeError>, and <URIError>.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • System errors triggered by underlying operating system constraints such -as attempting to open a file that does not exist or attempting to send data -over a closed socket.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • User-specified errors triggered by application code.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • AssertionErrors are a special class of error that can be triggered when -Node.js detects an exceptional logic violation that should never occur. These -are raised typically by the assert module.
                                                                                                                                                                                              • -
                                                                                                                                                                                              -

                                                                                                                                                                                              All JavaScript and System errors raised by Node.js inherit from, or are -instances of, the standard JavaScript <Error> class and are guaranteed -to provide at least the properties available on that class.

                                                                                                                                                                                              -

                                                                                                                                                                                              Error Propagation and Interception#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Node.js supports several mechanisms for propagating and handling errors that -occur while an application is running. How these errors are reported and -handled depends entirely on the type of Error and the style of the API that is -called.

                                                                                                                                                                                              -

                                                                                                                                                                                              All JavaScript errors are handled as exceptions that immediately generate -and throw an error using the standard JavaScript throw mechanism. These -are handled using the try…catch construct provided by the -JavaScript language.

                                                                                                                                                                                              -
                                                                                                                                                                                              // Throws with a ReferenceError because z is not defined.
                                                                                                                                                                                              -try {
                                                                                                                                                                                              -  const m = 1;
                                                                                                                                                                                              -  const n = m + z;
                                                                                                                                                                                              -} catch (err) {
                                                                                                                                                                                              -  // Handle the error here.
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Any use of the JavaScript throw mechanism will raise an exception that -must be handled using try…catch or the Node.js process will exit -immediately.

                                                                                                                                                                                              -

                                                                                                                                                                                              With few exceptions, Synchronous APIs (any blocking method that does not -accept a callback function, such as fs.readFileSync), will use throw -to report errors.

                                                                                                                                                                                              -

                                                                                                                                                                                              Errors that occur within Asynchronous APIs may be reported in multiple ways:

                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              • Most asynchronous methods that accept a callback function will accept an -Error object passed as the first argument to that function. If that first -argument is not null and is an instance of Error, then an error occurred -that should be handled.
                                                                                                                                                                                              • -
                                                                                                                                                                                              - -
                                                                                                                                                                                              const fs = require('fs');
                                                                                                                                                                                              -fs.readFile('a file that does not exist', (err, data) => {
                                                                                                                                                                                              -  if (err) {
                                                                                                                                                                                              -    console.error('There was an error reading the file!', err);
                                                                                                                                                                                              -    return;
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -  // Otherwise handle the data
                                                                                                                                                                                              -});
                                                                                                                                                                                              -
                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              • -

                                                                                                                                                                                                When an asynchronous method is called on an object that is an -EventEmitter, errors can be routed to that object's 'error' event.

                                                                                                                                                                                                -
                                                                                                                                                                                                const net = require('net');
                                                                                                                                                                                                -const connection = net.connect('localhost');
                                                                                                                                                                                                -
                                                                                                                                                                                                -// Adding an 'error' event handler to a stream:
                                                                                                                                                                                                -connection.on('error', (err) => {
                                                                                                                                                                                                -  // If the connection is reset by the server, or if it can't
                                                                                                                                                                                                -  // connect at all, or on any sort of error encountered by
                                                                                                                                                                                                -  // the connection, the error will be sent here.
                                                                                                                                                                                                -  console.error(err);
                                                                                                                                                                                                -});
                                                                                                                                                                                                -
                                                                                                                                                                                                -connection.pipe(process.stdout);
                                                                                                                                                                                                -
                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                A handful of typically asynchronous methods in the Node.js API may still -use the throw mechanism to raise exceptions that must be handled using -try…catch. There is no comprehensive list of such methods; please -refer to the documentation of each method to determine the appropriate -error handling mechanism required.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              -

                                                                                                                                                                                              The use of the 'error' event mechanism is most common for stream-based -and event emitter-based APIs, which themselves represent a series of -asynchronous operations over time (as opposed to a single operation that may -pass or fail).

                                                                                                                                                                                              -

                                                                                                                                                                                              For all EventEmitter objects, if an 'error' event handler is not -provided, the error will be thrown, causing the Node.js process to report an -uncaught exception and crash unless either: The domain module is -used appropriately or a handler has been registered for the -'uncaughtException' event.

                                                                                                                                                                                              -
                                                                                                                                                                                              const EventEmitter = require('events');
                                                                                                                                                                                              -const ee = new EventEmitter();
                                                                                                                                                                                              -
                                                                                                                                                                                              -setImmediate(() => {
                                                                                                                                                                                              -  // This will crash the process because no 'error' event
                                                                                                                                                                                              -  // handler has been added.
                                                                                                                                                                                              -  ee.emit('error', new Error('This will crash'));
                                                                                                                                                                                              -});
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Errors generated in this way cannot be intercepted using try…catch as -they are thrown after the calling code has already exited.

                                                                                                                                                                                              -

                                                                                                                                                                                              Developers must refer to the documentation for each method to determine -exactly how errors raised by those methods are propagated.

                                                                                                                                                                                              -

                                                                                                                                                                                              Error-first callbacks#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Most asynchronous methods exposed by the Node.js core API follow an idiomatic -pattern referred to as an error-first callback. With this pattern, a callback -function is passed to the method as an argument. When the operation either -completes or an error is raised, the callback function is called with the -Error object (if any) passed as the first argument. If no error was raised, -the first argument will be passed as null.

                                                                                                                                                                                              -
                                                                                                                                                                                              const fs = require('fs');
                                                                                                                                                                                              -
                                                                                                                                                                                              -function errorFirstCallback(err, data) {
                                                                                                                                                                                              -  if (err) {
                                                                                                                                                                                              -    console.error('There was an error', err);
                                                                                                                                                                                              -    return;
                                                                                                                                                                                              -  }
                                                                                                                                                                                              -  console.log(data);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -fs.readFile('/some/file/that/does-not-exist', errorFirstCallback);
                                                                                                                                                                                              -fs.readFile('/some/file/that/does-exist', errorFirstCallback);
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The JavaScript try…catch mechanism cannot be used to intercept errors -generated by asynchronous APIs. A common mistake for beginners is to try to -use throw inside an error-first callback:

                                                                                                                                                                                              -
                                                                                                                                                                                              // THIS WILL NOT WORK:
                                                                                                                                                                                              -const fs = require('fs');
                                                                                                                                                                                              -
                                                                                                                                                                                              -try {
                                                                                                                                                                                              -  fs.readFile('/some/file/that/does-not-exist', (err, data) => {
                                                                                                                                                                                              -    // Mistaken assumption: throwing here...
                                                                                                                                                                                              -    if (err) {
                                                                                                                                                                                              -      throw err;
                                                                                                                                                                                              -    }
                                                                                                                                                                                              -  });
                                                                                                                                                                                              -} catch (err) {
                                                                                                                                                                                              -  // This will not catch the throw!
                                                                                                                                                                                              -  console.error(err);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              This will not work because the callback function passed to fs.readFile() is -called asynchronously. By the time the callback has been called, the -surrounding code, including the try…catch block, will have already exited. -Throwing an error inside the callback can crash the Node.js process in most -cases. If domains are enabled, or a handler has been registered with -process.on('uncaughtException'), such errors can be intercepted.

                                                                                                                                                                                              -

                                                                                                                                                                                              Class: Error#

                                                                                                                                                                                              - -

                                                                                                                                                                                              A generic JavaScript <Error> object that does not denote any specific -circumstance of why the error occurred. Error objects capture a "stack trace" -detailing the point in the code at which the Error was instantiated, and may -provide a text description of the error.

                                                                                                                                                                                              -

                                                                                                                                                                                              All errors generated by Node.js, including all System and JavaScript errors, -will either be instances of, or inherit from, the Error class.

                                                                                                                                                                                              -

                                                                                                                                                                                              new Error(message)#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Creates a new Error object and sets the error.message property to the -provided text message. If an object is passed as message, the text message -is generated by calling message.toString(). The error.stack property will -represent the point in the code at which new Error() was called. Stack traces -are dependent on V8's stack trace API. Stack traces extend only to either -(a) the beginning of synchronous code execution, or (b) the number of frames -given by the property Error.stackTraceLimit, whichever is smaller.

                                                                                                                                                                                              -

                                                                                                                                                                                              Error.captureStackTrace(targetObject[, constructorOpt])#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Creates a .stack property on targetObject, which when accessed returns -a string representing the location in the code at which -Error.captureStackTrace() was called.

                                                                                                                                                                                              -
                                                                                                                                                                                              const myObject = {};
                                                                                                                                                                                              -Error.captureStackTrace(myObject);
                                                                                                                                                                                              -myObject.stack;  // Similar to `new Error().stack`
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The first line of the trace will be prefixed with -${myObject.name}: ${myObject.message}.

                                                                                                                                                                                              -

                                                                                                                                                                                              The optional constructorOpt argument accepts a function. If given, all frames -above constructorOpt, including constructorOpt, will be omitted from the -generated stack trace.

                                                                                                                                                                                              -

                                                                                                                                                                                              The constructorOpt argument is useful for hiding implementation -details of error generation from an end user. For instance:

                                                                                                                                                                                              -
                                                                                                                                                                                              function MyError() {
                                                                                                                                                                                              -  Error.captureStackTrace(this, MyError);
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -// Without passing MyError to captureStackTrace, the MyError
                                                                                                                                                                                              -// frame would show up in the .stack property. By passing
                                                                                                                                                                                              -// the constructor, we omit that frame, and retain all frames below it.
                                                                                                                                                                                              -new MyError().stack;
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Error.stackTraceLimit#

                                                                                                                                                                                              - -

                                                                                                                                                                                              The Error.stackTraceLimit property specifies the number of stack frames -collected by a stack trace (whether generated by new Error().stack or -Error.captureStackTrace(obj)).

                                                                                                                                                                                              -

                                                                                                                                                                                              The default value is 10 but may be set to any valid JavaScript number. Changes -will affect any stack trace captured after the value has been changed.

                                                                                                                                                                                              -

                                                                                                                                                                                              If set to a non-number value, or set to a negative number, stack traces will -not capture any frames.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.code#

                                                                                                                                                                                              - -

                                                                                                                                                                                              The error.code property is a string label that identifies the kind of error. -error.code is the most stable way to identify an error. It will only change -between major versions of Node.js. In contrast, error.message strings may -change between any versions of Node.js. See Node.js Error Codes for details -about specific codes.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.message#

                                                                                                                                                                                              - -

                                                                                                                                                                                              The error.message property is the string description of the error as set by -calling new Error(message). The message passed to the constructor will also -appear in the first line of the stack trace of the Error, however changing -this property after the Error object is created may not change the first -line of the stack trace (for example, when error.stack is read before this -property is changed).

                                                                                                                                                                                              -
                                                                                                                                                                                              const err = new Error('The message');
                                                                                                                                                                                              -console.error(err.message);
                                                                                                                                                                                              -// Prints: The message
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              error.stack#

                                                                                                                                                                                              - -

                                                                                                                                                                                              The error.stack property is a string describing the point in the code at which -the Error was instantiated.

                                                                                                                                                                                              -
                                                                                                                                                                                              Error: Things keep happening!
                                                                                                                                                                                              -   at /home/gbusey/file.js:525:2
                                                                                                                                                                                              -   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)
                                                                                                                                                                                              -   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)
                                                                                                                                                                                              -   at increaseSynergy (/home/gbusey/actors.js:701:6)
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The first line is formatted as <error class name>: <error message>, and -is followed by a series of stack frames (each line beginning with "at "). -Each frame describes a call site within the code that lead to the error being -generated. V8 attempts to display a name for each function (by variable name, -function name, or object method name), but occasionally it will not be able to -find a suitable name. If V8 cannot determine a name for the function, only -location information will be displayed for that frame. Otherwise, the -determined function name will be displayed with location information appended -in parentheses.

                                                                                                                                                                                              -

                                                                                                                                                                                              Frames are only generated for JavaScript functions. If, for example, execution -synchronously passes through a C++ addon function called cheetahify which -itself calls a JavaScript function, the frame representing the cheetahify call -will not be present in the stack traces:

                                                                                                                                                                                              -
                                                                                                                                                                                              const cheetahify = require('./native-binding.node');
                                                                                                                                                                                              -
                                                                                                                                                                                              -function makeFaster() {
                                                                                                                                                                                              -  // `cheetahify()` *synchronously* calls speedy.
                                                                                                                                                                                              -  cheetahify(function speedy() {
                                                                                                                                                                                              -    throw new Error('oh no!');
                                                                                                                                                                                              -  });
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -makeFaster();
                                                                                                                                                                                              -// will throw:
                                                                                                                                                                                              -//   /home/gbusey/file.js:6
                                                                                                                                                                                              -//       throw new Error('oh no!');
                                                                                                                                                                                              -//           ^
                                                                                                                                                                                              -//   Error: oh no!
                                                                                                                                                                                              -//       at speedy (/home/gbusey/file.js:6:11)
                                                                                                                                                                                              -//       at makeFaster (/home/gbusey/file.js:5:3)
                                                                                                                                                                                              -//       at Object.<anonymous> (/home/gbusey/file.js:10:1)
                                                                                                                                                                                              -//       at Module._compile (module.js:456:26)
                                                                                                                                                                                              -//       at Object.Module._extensions..js (module.js:474:10)
                                                                                                                                                                                              -//       at Module.load (module.js:356:32)
                                                                                                                                                                                              -//       at Function.Module._load (module.js:312:12)
                                                                                                                                                                                              -//       at Function.Module.runMain (module.js:497:10)
                                                                                                                                                                                              -//       at startup (node.js:119:16)
                                                                                                                                                                                              -//       at node.js:906:3
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              The location information will be one of:

                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                              • -
                                                                                                                                                                                              • plain-filename.js:line:column, if the frame represents a call internal -to Node.js.
                                                                                                                                                                                              • -
                                                                                                                                                                                              • /absolute/path/to/file.js:line:column, if the frame represents a call in -a user program, or its dependencies.
                                                                                                                                                                                              • -
                                                                                                                                                                                              -

                                                                                                                                                                                              The string representing the stack trace is lazily generated when the -error.stack property is accessed.

                                                                                                                                                                                              -

                                                                                                                                                                                              The number of frames captured by the stack trace is bounded by the smaller of -Error.stackTraceLimit or the number of available frames on the current event -loop tick.

                                                                                                                                                                                              -

                                                                                                                                                                                              Class: AssertionError#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Indicates the failure of an assertion. For details, see -Class: assert.AssertionError.

                                                                                                                                                                                              -

                                                                                                                                                                                              Class: RangeError#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Indicates that a provided argument was not within the set or range of -acceptable values for a function; whether that is a numeric range, or -outside the set of options for a given function parameter.

                                                                                                                                                                                              -
                                                                                                                                                                                              require('net').connect(-1);
                                                                                                                                                                                              -// Throws "RangeError: "port" option should be >= 0 and < 65536: -1"
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Node.js will generate and throw RangeError instances immediately as a form -of argument validation.

                                                                                                                                                                                              -

                                                                                                                                                                                              Class: ReferenceError#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Indicates that an attempt is being made to access a variable that is not -defined. Such errors commonly indicate typos in code, or an otherwise broken -program.

                                                                                                                                                                                              -

                                                                                                                                                                                              While client code may generate and propagate these errors, in practice, only V8 -will do so.

                                                                                                                                                                                              -
                                                                                                                                                                                              doesNotExist;
                                                                                                                                                                                              -// Throws ReferenceError, doesNotExist is not a variable in this program.
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Unless an application is dynamically generating and running code, -ReferenceError instances should always be considered a bug in the code -or its dependencies.

                                                                                                                                                                                              -

                                                                                                                                                                                              Class: SyntaxError#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Indicates that a program is not valid JavaScript. These errors may only be -generated and propagated as a result of code evaluation. Code evaluation may -happen as a result of eval, Function, require, or vm. These errors -are almost always indicative of a broken program.

                                                                                                                                                                                              -
                                                                                                                                                                                              try {
                                                                                                                                                                                              -  require('vm').runInThisContext('binary ! isNotOk');
                                                                                                                                                                                              -} catch (err) {
                                                                                                                                                                                              -  // 'err' will be a SyntaxError.
                                                                                                                                                                                              -}
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              SyntaxError instances are unrecoverable in the context that created them – -they may only be caught by other contexts.

                                                                                                                                                                                              -

                                                                                                                                                                                              Class: SystemError#

                                                                                                                                                                                              - -

                                                                                                                                                                                              Node.js generates system errors when exceptions occur within its runtime -environment. These usually occur when an application violates an operating -system constraint. For example, a system error will occur if an application -attempts to read a file that does not exist.

                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              • address <string> If present, the address to which a network connection -failed
                                                                                                                                                                                              • -
                                                                                                                                                                                              • code <string> The string error code
                                                                                                                                                                                              • -
                                                                                                                                                                                              • dest <string> If present, the file path destination when reporting a file -system error
                                                                                                                                                                                              • -
                                                                                                                                                                                              • errno <number> | <string> The system-provided error number
                                                                                                                                                                                              • -
                                                                                                                                                                                              • info <Object> If present, extra details about the error condition
                                                                                                                                                                                              • -
                                                                                                                                                                                              • message <string> A system-provided human-readable description of the error
                                                                                                                                                                                              • -
                                                                                                                                                                                              • path <string> If present, the file path when reporting a file system error
                                                                                                                                                                                              • -
                                                                                                                                                                                              • port <number> If present, the network connection port that is not available
                                                                                                                                                                                              • -
                                                                                                                                                                                              • syscall <string> The name of the system call that triggered the error
                                                                                                                                                                                              • -
                                                                                                                                                                                              -

                                                                                                                                                                                              error.address#

                                                                                                                                                                                              - -

                                                                                                                                                                                              If present, error.address is a string describing the address to which a -network connection failed.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.code#

                                                                                                                                                                                              - -

                                                                                                                                                                                              The error.code property is a string representing the error code.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.dest#

                                                                                                                                                                                              - -

                                                                                                                                                                                              If present, error.dest is the file path destination when reporting a file -system error.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.errno#

                                                                                                                                                                                              - -

                                                                                                                                                                                              The error.errno property is a number or a string. If it is a number, it is a -negative value which corresponds to the error code defined in -libuv Error handling. See the libuv errno.h header file -(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case -of a string, it is the same as error.code.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.info#

                                                                                                                                                                                              - -

                                                                                                                                                                                              If present, error.info is an object with details about the error condition.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.message#

                                                                                                                                                                                              - -

                                                                                                                                                                                              error.message is a system-provided human-readable description of the error.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.path#

                                                                                                                                                                                              - -

                                                                                                                                                                                              If present, error.path is a string containing a relevant invalid pathname.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.port#

                                                                                                                                                                                              - -

                                                                                                                                                                                              If present, error.port is the network connection port that is not available.

                                                                                                                                                                                              -

                                                                                                                                                                                              error.syscall#

                                                                                                                                                                                              - -

                                                                                                                                                                                              The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                              -

                                                                                                                                                                                              Common System Errors#

                                                                                                                                                                                              -

                                                                                                                                                                                              This is a list of system errors commonly-encountered when writing a Node.js -program. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                              -
                                                                                                                                                                                                -
                                                                                                                                                                                              • -

                                                                                                                                                                                                EACCES (Permission denied): An attempt was made to access a file in a way -forbidden by its file access permissions.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                EADDRINUSE (Address already in use): An attempt to bind a server -(net, http, or https) to a local address failed due to -another server on the local system already occupying that address.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                ECONNREFUSED (Connection refused): No connection could be made because the -target machine actively refused it. This usually results from trying to -connect to a service that is inactive on the foreign host.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                ECONNRESET (Connection reset by peer): A connection was forcibly closed by -a peer. This normally results from a loss of the connection on the remote -socket due to a timeout or reboot. Commonly encountered via the http -and net modules.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                EEXIST (File exists): An existing file was the target of an operation that -required that the target not exist.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                EISDIR (Is a directory): An operation expected a file, but the given -pathname was a directory.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                EMFILE (Too many open files in system): Maximum number of -file descriptors allowable on the system has been reached, and -requests for another descriptor cannot be fulfilled until at least one -has been closed. This is encountered when opening many files at once in -parallel, especially on systems (in particular, macOS) where there is a low -file descriptor limit for processes. To remedy a low limit, run -ulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                ENOENT (No such file or directory): Commonly raised by fs operations -to indicate that a component of the specified pathname does not exist. No -entity (file or directory) could be found by the given path.

                                                                                                                                                                                                -
                                                                                                                                                                                              • -
                                                                                                                                                                                              • -

                                                                                                                                                                                                ENOTDIR (Not a directory): A component of the given pathname existed, but -was not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                +

                                                                                                                                                                                                ENOTDIR (Not a directory): A component of the given pathname existed, but +was not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                              • ENOTEMPTY (Directory not empty): A directory with entries was the target @@ -28286,14 +27104,12 @@

                                                                                                                                                                                              • Extends <errors.Error>

                                                                                                                                                                                              Indicates that a provided argument is not an allowable type. For example, -passing a function to a parameter which expects a string would be considered -a TypeError.

                                                                                                                                                                                              -
                                                                                                                                                                                              require('url').parse(() => { });
                                                                                                                                                                                              -// Throws TypeError, since it expected a string.
                                                                                                                                                                                              -
                                                                                                                                                                                              +passing a function to a parameter which expects a string would be a TypeError.

                                                                                                                                                                                              +
                                                                                                                                                                                              require('url').parse(() => { });
                                                                                                                                                                                              +// Throws TypeError, since it expected a string.

                                                                                                                                                                                              Node.js will generate and throw TypeError instances immediately as a form of argument validation.

                                                                                                                                                                                              -

                                                                                                                                                                                              Exceptions vs. Errors#

                                                                                                                                                                                              +

                                                                                                                                                                                              Exceptions vs. errors#

                                                                                                                                                                                              A JavaScript exception is a value that is thrown as a result of an invalid operation or as the target of a throw statement. While it is not required @@ -28303,7 +27119,7 @@

                                                                                                                                                                                              Some exceptions are unrecoverable at the JavaScript layer. Such exceptions will always cause the Node.js process to crash. Examples include assert() checks or abort() calls in the C++ layer.

                                                                                                                                                                                              -

                                                                                                                                                                                              OpenSSL Errors#

                                                                                                                                                                                              +

                                                                                                                                                                                              OpenSSL errors#

                                                                                                                                                                                              Errors originating in crypto or tls are of class Error, and in addition to the standard .code and .message properties, may have some additional OpenSSL-specific properties.

                                                                                                                                                                                              @@ -28317,7 +27133,7 @@

                                                                                                                                                                                              error.reason#

                                                                                                                                                                                              A human-readable string describing the reason for the error.

                                                                                                                                                                                              -

                                                                                                                                                                                              Node.js Error Codes#

                                                                                                                                                                                              +

                                                                                                                                                                                              Node.js error codes#

                                                                                                                                                                                              ERR_AMBIGUOUS_ARGUMENT#

                                                                                                                                                                                              A function argument is being used in a way that suggests that the function @@ -28712,6 +27528,11 @@

                                                                                                                                                                                              Stability: 1 - Experimental

                                                                                                                                                                                              The --input-type flag was used to attempt to execute a file. This flag can only be used with input via --eval, --print or STDIN.

                                                                                                                                                                                              +

                                                                                                                                                                                              +

                                                                                                                                                                                              ERR_INSPECTOR_ALREADY_ACTIVATED#

                                                                                                                                                                                              +

                                                                                                                                                                                              While using the inspector module, an attempt was made to activate the +inspector when it already started to listen on a port. Use inspector.close() +before activating it on a different address.

                                                                                                                                                                                              ERR_INSPECTOR_ALREADY_CONNECTED#

                                                                                                                                                                                              While using the inspector module, an attempt was made to connect when the @@ -28804,11 +27625,11 @@

                                                                                                                                                                                              An invalid or unknown file encoding was passed.

                                                                                                                                                                                              ERR_INVALID_PACKAGE_CONFIG#

                                                                                                                                                                                              -

                                                                                                                                                                                              An invalid package.json file was found which failed parsing.

                                                                                                                                                                                              +

                                                                                                                                                                                              An invalid package.json file was found which failed parsing.

                                                                                                                                                                                              ERR_INVALID_PACKAGE_TARGET#

                                                                                                                                                                                              -

                                                                                                                                                                                              The package.json exports field contains an invalid target mapping value -for the attempted module resolution.

                                                                                                                                                                                              +

                                                                                                                                                                                              The package.json "exports" field contains an invalid target mapping +value for the attempted module resolution.

                                                                                                                                                                                              ERR_INVALID_PERFORMANCE_MARK#

                                                                                                                                                                                              While using the Performance Timing API (perf_hooks), a performance mark is @@ -28844,19 +27665,18 @@

                                                                                                                                                                                              ERR_INVALID_THIS#

                                                                                                                                                                                              A Node.js API function was called with an incompatible this value.

                                                                                                                                                                                              -
                                                                                                                                                                                              const urlSearchParams = new URLSearchParams('foo=bar&baz=new');
                                                                                                                                                                                              +
                                                                                                                                                                                              const urlSearchParams = new URLSearchParams('foo=bar&baz=new');
                                                                                                                                                                                               
                                                                                                                                                                                              -const buf = Buffer.alloc(1);
                                                                                                                                                                                              -urlSearchParams.has.call(buf, 'foo');
                                                                                                                                                                                              -// Throws a TypeError with code 'ERR_INVALID_THIS'
                                                                                                                                                                                              -
                                                                                                                                                                                              +const buf = Buffer.alloc(1); +urlSearchParams.has.call(buf, 'foo'); +// Throws a TypeError with code 'ERR_INVALID_THIS'

                                                                                                                                                                                              ERR_INVALID_TRANSFER_OBJECT#

                                                                                                                                                                                              An invalid transfer object was passed to postMessage().

                                                                                                                                                                                              ERR_INVALID_TUPLE#

                                                                                                                                                                                              An element in the iterable provided to the WHATWG -URLSearchParams constructor did not +URLSearchParams constructor did not represent a [name, value] tuple – that is, if an element is not iterable, or does not consist of exactly two elements.

                                                                                                                                                                                              @@ -28865,7 +27685,7 @@

                                                                                                                                                                                              ERR_INVALID_URL#

                                                                                                                                                                                              An invalid URL was passed to the WHATWG -URL constructor to be parsed. The thrown error object +URL constructor to be parsed. The thrown error object typically has an additional property 'input' that contains the URL that failed to parse.

                                                                                                                                                                                              @@ -28929,6 +27749,15 @@

                                                                                                                                                                                              ERR_MEMORY_ALLOCATION_FAILED#

                                                                                                                                                                                              An attempt was made to allocate memory (usually in the C++ layer) but it failed.

                                                                                                                                                                                              +

                                                                                                                                                                                              +

                                                                                                                                                                                              ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE#

                                                                                                                                                                                              + +

                                                                                                                                                                                              A message posted to a MessagePort could not be deserialized in the target +vm Context. Not all Node.js objects can be successfully instantiated in +any context at this time, and attempting to transfer them using postMessage() +can fail on the receiving side in that case.

                                                                                                                                                                                              ERR_METHOD_NOT_IMPLEMENTED#

                                                                                                                                                                                              A method is required but not implemented.

                                                                                                                                                                                              @@ -28950,8 +27779,9 @@ is thrown if a required option is missing.

                                                                                                                                                                                              ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST#

                                                                                                                                                                                              -

                                                                                                                                                                                              A MessagePort was found in the object passed to a postMessage() call, -but not provided in the transferList for that call.

                                                                                                                                                                                              +

                                                                                                                                                                                              An object that needs to be explicitly listed in the transferList argument +was found in the object passed to a postMessage() call, but not provided in +the transferList for that call. Usually, this is a MessagePort.

                                                                                                                                                                                              ERR_MISSING_PASSPHRASE#

                                                                                                                                                                                              An attempt was made to read an encrypted key without specifying a passphrase.

                                                                                                                                                                                              @@ -29015,9 +27845,13 @@

                                                                                                                                                                                              ERR_OUT_OF_RANGE#

                                                                                                                                                                                              A given value is out of the accepted range.

                                                                                                                                                                                              +

                                                                                                                                                                                              +

                                                                                                                                                                                              ERR_PACKAGE_IMPORT_NOT_DEFINED#

                                                                                                                                                                                              +

                                                                                                                                                                                              The package.json "imports" field does not define the given internal +package specifier mapping.

                                                                                                                                                                                              ERR_PACKAGE_PATH_NOT_EXPORTED#

                                                                                                                                                                                              -

                                                                                                                                                                                              The package.json exports field does not export the requested subpath. +

                                                                                                                                                                                              The package.json "exports" field does not export the requested subpath. Because exports are encapsulated, private internal modules that are not exported cannot be imported through the package resolution, unless using an absolute URL.

                                                                                                                                                                                              @@ -29032,8 +27866,8 @@

                                                                                                                                                                                              An attempt was made to require() an ES Module.

                                                                                                                                                                                              ERR_SCRIPT_EXECUTION_INTERRUPTED#

                                                                                                                                                                                              -

                                                                                                                                                                                              Script execution was interrupted by SIGINT (For example, when Ctrl+C was -pressed).

                                                                                                                                                                                              +

                                                                                                                                                                                              Script execution was interrupted by SIGINT (For example, +Ctrl+C was pressed.)

                                                                                                                                                                                              ERR_SCRIPT_EXECUTION_TIMEOUT#

                                                                                                                                                                                              Script execution timed out, possibly due to bugs in the script being executed.

                                                                                                                                                                                              @@ -29112,11 +27946,10 @@

                                                                                                                                                                                              ERR_STREAM_WRAP#

                                                                                                                                                                                              Prevents an abort if a string decoder was set on the Socket or if the decoder is in objectMode.

                                                                                                                                                                                              -
                                                                                                                                                                                              const Socket = require('net').Socket;
                                                                                                                                                                                              -const instance = new Socket();
                                                                                                                                                                                              +
                                                                                                                                                                                              const Socket = require('net').Socket;
                                                                                                                                                                                              +const instance = new Socket();
                                                                                                                                                                                               
                                                                                                                                                                                              -instance.setEncoding('utf8');
                                                                                                                                                                                              -
                                                                                                                                                                                              +instance.setEncoding('utf8');

                                                                                                                                                                                              ERR_STREAM_WRITE_AFTER_END#

                                                                                                                                                                                              An attempt was made to call stream.write() after stream.end() has been @@ -29134,6 +27967,12 @@

                                                                                                                                                                                              An unspecified or non-specific system error has occurred within the Node.js process. The error object will have an err.info object property with additional details.

                                                                                                                                                                                              +

                                                                                                                                                                                              +

                                                                                                                                                                                              ERR_TLS_CERT_ALTNAME_FORMAT#

                                                                                                                                                                                              +

                                                                                                                                                                                              This error is thrown by checkServerIdentity if a user-supplied +subjectaltname property violates encoding rules. Certificate objects produced +by Node.js itself always comply with encoding rules and will never cause +this error.

                                                                                                                                                                                              ERR_TLS_CERT_ALTNAME_INVALID#

                                                                                                                                                                                              While using TLS, the host name/IP of the peer did not match any of the @@ -29188,7 +28027,7 @@

                                                                                                                                                                                              An attempt was made to issue Server Name Indication from a TLS server-side socket, which is only valid from a client.

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED##

                                                                                                                                                                                              +

                                                                                                                                                                                              ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED#

                                                                                                                                                                                              Failed to set PSK identity hint. Hint may be too long.

                                                                                                                                                                                              ERR_TRACE_EVENTS_CATEGORY_REQUIRED#

                                                                                                                                                                                              @@ -29214,6 +28053,10 @@

                                                                                                                                                                                              ERR_TTY_INIT_FAILED#

                                                                                                                                                                                              The initialization of a TTY failed due to a system error.

                                                                                                                                                                                              +

                                                                                                                                                                                              +

                                                                                                                                                                                              ERR_UNAVAILABLE_DURING_EXIT#

                                                                                                                                                                                              +

                                                                                                                                                                                              Function was called within a process.on('exit') handler that shouldn't be +called within process.on('exit') handler.

                                                                                                                                                                                              ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET#

                                                                                                                                                                                              process.setUncaughtExceptionCaptureCallback() was called twice, @@ -29253,20 +28096,16 @@ signal (such as subprocess.kill()).

                                                                                                                                                                                              ERR_UNSUPPORTED_DIR_IMPORT#

                                                                                                                                                                                              -

                                                                                                                                                                                              import a directory URL is unsupported. Instead, you can -self-reference a package using its name and define a custom subpath in -the "exports" field of the package.json file.

                                                                                                                                                                                              +

                                                                                                                                                                                              import a directory URL is unsupported. Instead, +self-reference a package using its name and define a custom subpath in +the "exports" field of the package.json file.

                                                                                                                                                                                              -
                                                                                                                                                                                              import './'; // unsupported
                                                                                                                                                                                              -import './index.js'; // supported
                                                                                                                                                                                              -import 'package-name'; // supported
                                                                                                                                                                                              -
                                                                                                                                                                                              +
                                                                                                                                                                                              import './'; // unsupported
                                                                                                                                                                                              +import './index.js'; // supported
                                                                                                                                                                                              +import 'package-name'; // supported

                                                                                                                                                                                              ERR_UNSUPPORTED_ESM_URL_SCHEME#

                                                                                                                                                                                              import with URL schemes other than file and data is unsupported.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_V8BREAKITERATOR#

                                                                                                                                                                                              -

                                                                                                                                                                                              The V8 BreakIterator API was used but the full ICU data set is not installed.

                                                                                                                                                                                              ERR_VALID_PERFORMANCE_ENTRY_TYPE#

                                                                                                                                                                                              While using the Performance Timing API (perf_hooks), no valid performance @@ -29354,6 +28193,13 @@ malconfigured clients, if more than 8KB of HTTP header data is received then HTTP parsing will abort without a request or response object being created, and an Error with this code will be emitted.

                                                                                                                                                                                              +

                                                                                                                                                                                              +

                                                                                                                                                                                              HPE_UNEXPECTED_CONTENT_LENGTH#

                                                                                                                                                                                              +

                                                                                                                                                                                              Server is sending both a Content-Length header and Transfer-Encoding: chunked.

                                                                                                                                                                                              +

                                                                                                                                                                                              Transfer-Encoding: chunked allows the server to maintain an HTTP persistent +connection for dynamically generated content. +In this case, the Content-Length HTTP header cannot be used.

                                                                                                                                                                                              +

                                                                                                                                                                                              Use Content-Length or Transfer-Encoding: chunked.

                                                                                                                                                                                              MODULE_NOT_FOUND#

                                                                                                                                                                                              A module file could not be resolved while attempting a require() or import operation.

                                                                                                                                                                                              -

                                                                                                                                                                                              Legacy Node.js Error Codes#

                                                                                                                                                                                              +

                                                                                                                                                                                              Legacy Node.js error codes#

                                                                                                                                                                                              Stability: 0 - Deprecated. These error codes are either inconsistent, or have been removed.

                                                                                                                                                                                              @@ -29531,6 +28377,9 @@

                                                                                                                                                                                              An attempt was made to launch a Node.js process with an unknown stdout or stderr file type. This error is usually an indication of a bug within Node.js itself, although it is possible for user code to trigger it.

                                                                                                                                                                                              +

                                                                                                                                                                                              +

                                                                                                                                                                                              ERR_V8BREAKITERATOR#

                                                                                                                                                                                              +

                                                                                                                                                                                              The V8 BreakIterator API was used but the full ICU data set is not installed.

                                                                                                                                                                                              ERR_VALUE_OUT_OF_RANGE#

                                                                                                                                                                                              Used when an attempt is made to use a zlib object after it has already been closed.

                                                                                                                                                                                              -

                                                                                                                                                                                              Other error codes#

                                                                                                                                                                                              -

                                                                                                                                                                                              These errors have never been released, but had been present on master between -releases.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_ENTRY_TYPE_MISMATCH#

                                                                                                                                                                                              -

                                                                                                                                                                                              Stability: 1 - Experimental

                                                                                                                                                                                              -

                                                                                                                                                                                              The --entry-type=commonjs flag was used to attempt to execute an .mjs file -or a .js file where the nearest parent package.json contains -"type": "module"; or -the --entry-type=module flag was used to attempt to execute a .cjs file or -a .js file where the nearest parent package.json either lacks a "type" -field or contains "type": "commonjs".

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_FS_WATCHER_ALREADY_STARTED#

                                                                                                                                                                                              -

                                                                                                                                                                                              An attempt was made to start a watcher returned by fs.watch() that has -already been started.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_FS_WATCHER_NOT_STARTED#

                                                                                                                                                                                              -

                                                                                                                                                                                              An attempt was made to initiate operations on a watcher returned by -fs.watch() that has not yet been started.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_HTTP2_ALREADY_SHUTDOWN#

                                                                                                                                                                                              -

                                                                                                                                                                                              Occurs with multiple attempts to shutdown an HTTP/2 session.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_HTTP2_ERROR#

                                                                                                                                                                                              -

                                                                                                                                                                                              A non-specific HTTP/2 error has occurred.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_INVALID_REPL_HISTORY#

                                                                                                                                                                                              -

                                                                                                                                                                                              Used in the repl in case the old history file is used and an error occurred -while trying to read and parse it.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_INVALID_REPL_TYPE#

                                                                                                                                                                                              -

                                                                                                                                                                                              Stability: 1 - Experimental

                                                                                                                                                                                              -

                                                                                                                                                                                              The --entry-type=... flag is not compatible with the Node.js REPL.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK#

                                                                                                                                                                                              -

                                                                                                                                                                                              Used when an ES Module loader hook specifies format: 'dynamic' but does -not provide a dynamicInstantiate hook.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_STREAM_HAS_STRINGDECODER#

                                                                                                                                                                                              -

                                                                                                                                                                                              Used to prevent an abort if a string decoder was set on the Socket.

                                                                                                                                                                                              -
                                                                                                                                                                                              const Socket = require('net').Socket;
                                                                                                                                                                                              -const instance = new Socket();
                                                                                                                                                                                              -
                                                                                                                                                                                              -instance.setEncoding('utf8');
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_STRING_TOO_LARGE#

                                                                                                                                                                                              -

                                                                                                                                                                                              An attempt has been made to create a string larger than the maximum allowed -size.

                                                                                                                                                                                              -

                                                                                                                                                                                              -

                                                                                                                                                                                              ERR_TTY_WRITABLE_NOT_READABLE#

                                                                                                                                                                                              -

                                                                                                                                                                                              This Error is thrown when a read is attempted on a TTY WriteStream, -such as process.stdout.on('data').

                                                                                                                                                                                              Events#

                                                                                                                                                                                              Stability: 2 - Stable

                                                                                                                                                                                              +

                                                                                                                                                                                              Source Code: lib/events.js

                                                                                                                                                                                              Much of the Node.js core API is built around an idiomatic asynchronous event-driven architecture in which certain kinds of objects (called "emitters") emit named events that cause Function objects ("listeners") to be called.

                                                                                                                                                                                              @@ -29622,83 +28418,77 @@

                                                                                                                                                                                              The following example shows a simple EventEmitter instance with a single listener. The eventEmitter.on() method is used to register listeners, while the eventEmitter.emit() method is used to trigger the event.

                                                                                                                                                                                              -
                                                                                                                                                                                              const EventEmitter = require('events');
                                                                                                                                                                                              +
                                                                                                                                                                                              const EventEmitter = require('events');
                                                                                                                                                                                               
                                                                                                                                                                                              -class MyEmitter extends EventEmitter {}
                                                                                                                                                                                              +class MyEmitter extends EventEmitter {}
                                                                                                                                                                                               
                                                                                                                                                                                              -const myEmitter = new MyEmitter();
                                                                                                                                                                                              -myEmitter.on('event', () => {
                                                                                                                                                                                              -  console.log('an event occurred!');
                                                                                                                                                                                              +const myEmitter = new MyEmitter();
                                                                                                                                                                                              +myEmitter.on('event', () => {
                                                                                                                                                                                              +  console.log('an event occurred!');
                                                                                                                                                                                               });
                                                                                                                                                                                              -myEmitter.emit('event');
                                                                                                                                                                                              -
                                                                                                                                                                                              +myEmitter.emit('event');

                                                                                                                                                                                              Passing arguments and this to listeners#

                                                                                                                                                                                              The eventEmitter.emit() method allows an arbitrary set of arguments to be passed to the listener functions. Keep in mind that when an ordinary listener function is called, the standard this keyword is intentionally set to reference the EventEmitter instance to which the listener is attached.

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -myEmitter.on('event', function(a, b) {
                                                                                                                                                                                              -  console.log(a, b, this, this === myEmitter);
                                                                                                                                                                                              -  // Prints:
                                                                                                                                                                                              -  //   a b MyEmitter {
                                                                                                                                                                                              -  //     domain: null,
                                                                                                                                                                                              -  //     _events: { event: [Function] },
                                                                                                                                                                                              -  //     _eventsCount: 1,
                                                                                                                                                                                              -  //     _maxListeners: undefined } true
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +myEmitter.on('event', function(a, b) {
                                                                                                                                                                                              +  console.log(a, b, this, this === myEmitter);
                                                                                                                                                                                              +  // Prints:
                                                                                                                                                                                              +  //   a b MyEmitter {
                                                                                                                                                                                              +  //     domain: null,
                                                                                                                                                                                              +  //     _events: { event: [Function] },
                                                                                                                                                                                              +  //     _eventsCount: 1,
                                                                                                                                                                                              +  //     _maxListeners: undefined } true
                                                                                                                                                                                               });
                                                                                                                                                                                              -myEmitter.emit('event', 'a', 'b');
                                                                                                                                                                                              -
                                                                                                                                                                                              +myEmitter.emit('event', 'a', 'b');

                                                                                                                                                                                              It is possible to use ES6 Arrow Functions as listeners, however, when doing so, the this keyword will no longer reference the EventEmitter instance:

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -myEmitter.on('event', (a, b) => {
                                                                                                                                                                                              -  console.log(a, b, this);
                                                                                                                                                                                              -  // Prints: a b {}
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +myEmitter.on('event', (a, b) => {
                                                                                                                                                                                              +  console.log(a, b, this);
                                                                                                                                                                                              +  // Prints: a b {}
                                                                                                                                                                                               });
                                                                                                                                                                                              -myEmitter.emit('event', 'a', 'b');
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Asynchronous vs. Synchronous#

                                                                                                                                                                                              +myEmitter.emit('event', 'a', 'b');
                                                                                                                                                                                              +

                                                                                                                                                                                              Asynchronous vs. synchronous#

                                                                                                                                                                                              The EventEmitter calls all listeners synchronously in the order in which they were registered. This ensures the proper sequencing of events and helps avoid race conditions and logic errors. When appropriate, listener functions can switch to an asynchronous mode of operation using the setImmediate() or process.nextTick() methods:

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -myEmitter.on('event', (a, b) => {
                                                                                                                                                                                              -  setImmediate(() => {
                                                                                                                                                                                              -    console.log('this happens asynchronously');
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +myEmitter.on('event', (a, b) => {
                                                                                                                                                                                              +  setImmediate(() => {
                                                                                                                                                                                              +    console.log('this happens asynchronously');
                                                                                                                                                                                                 });
                                                                                                                                                                                               });
                                                                                                                                                                                              -myEmitter.emit('event', 'a', 'b');
                                                                                                                                                                                              -
                                                                                                                                                                                              +myEmitter.emit('event', 'a', 'b');

                                                                                                                                                                                              Handling events only once#

                                                                                                                                                                                              When a listener is registered using the eventEmitter.on() method, that listener will be invoked every time the named event is emitted.

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -let m = 0;
                                                                                                                                                                                              -myEmitter.on('event', () => {
                                                                                                                                                                                              -  console.log(++m);
                                                                                                                                                                                              -});
                                                                                                                                                                                              -myEmitter.emit('event');
                                                                                                                                                                                              -// Prints: 1
                                                                                                                                                                                              -myEmitter.emit('event');
                                                                                                                                                                                              -// Prints: 2
                                                                                                                                                                                              -
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +let m = 0;
                                                                                                                                                                                              +myEmitter.on('event', () => {
                                                                                                                                                                                              +  console.log(++m);
                                                                                                                                                                                              +});
                                                                                                                                                                                              +myEmitter.emit('event');
                                                                                                                                                                                              +// Prints: 1
                                                                                                                                                                                              +myEmitter.emit('event');
                                                                                                                                                                                              +// Prints: 2

                                                                                                                                                                                              Using the eventEmitter.once() method, it is possible to register a listener that is called at most once for a particular event. Once the event is emitted, the listener is unregistered and then called.

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -let m = 0;
                                                                                                                                                                                              -myEmitter.once('event', () => {
                                                                                                                                                                                              -  console.log(++m);
                                                                                                                                                                                              -});
                                                                                                                                                                                              -myEmitter.emit('event');
                                                                                                                                                                                              -// Prints: 1
                                                                                                                                                                                              -myEmitter.emit('event');
                                                                                                                                                                                              -// Ignored
                                                                                                                                                                                              -
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +let m = 0;
                                                                                                                                                                                              +myEmitter.once('event', () => {
                                                                                                                                                                                              +  console.log(++m);
                                                                                                                                                                                              +});
                                                                                                                                                                                              +myEmitter.emit('event');
                                                                                                                                                                                              +// Prints: 1
                                                                                                                                                                                              +myEmitter.emit('event');
                                                                                                                                                                                              +// Ignored

                                                                                                                                                                                              Error events#

                                                                                                                                                                                              When an error occurs within an EventEmitter instance, the typical action is for an 'error' event to be emitted. These are treated as special cases @@ -29706,67 +28496,61 @@

                                                                                                                                                                                              If an EventEmitter does not have at least one listener registered for the 'error' event, and an 'error' event is emitted, the error is thrown, a stack trace is printed, and the Node.js process exits.

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                              -// Throws and crashes Node.js
                                                                                                                                                                                              -
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                              +// Throws and crashes Node.js

                                                                                                                                                                                              To guard against crashing the Node.js process the domain module can be used. (Note, however, that the domain module is deprecated.)

                                                                                                                                                                                              As a best practice, listeners should always be added for the 'error' events.

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -myEmitter.on('error', (err) => {
                                                                                                                                                                                              -  console.error('whoops! there was an error');
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +myEmitter.on('error', (err) => {
                                                                                                                                                                                              +  console.error('whoops! there was an error');
                                                                                                                                                                                               });
                                                                                                                                                                                              -myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                              -// Prints: whoops! there was an error
                                                                                                                                                                                              -
                                                                                                                                                                                              +myEmitter.emit('error', new Error('whoops!')); +// Prints: whoops! there was an error

                                                                                                                                                                                              It is possible to monitor 'error' events without consuming the emitted error by installing a listener using the symbol errorMonitor.

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -myEmitter.on(EventEmitter.errorMonitor, (err) => {
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +myEmitter.on(EventEmitter.errorMonitor, (err) => {
                                                                                                                                                                                                 MyMonitoringTool.log(err);
                                                                                                                                                                                               });
                                                                                                                                                                                              -myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                              -// Still throws and crashes Node.js
                                                                                                                                                                                              -
                                                                                                                                                                                              -

                                                                                                                                                                                              Capture Rejections of Promises#

                                                                                                                                                                                              +myEmitter.emit('error', new Error('whoops!')); +// Still throws and crashes Node.js
                                                                                                                                                                                              +

                                                                                                                                                                                              Capture rejections of promises#

                                                                                                                                                                                              Stability: 1 - captureRejections is experimental.

                                                                                                                                                                                              Using async functions with event handlers is problematic, because it can lead to an unhandled rejection in case of a thrown exception:

                                                                                                                                                                                              -
                                                                                                                                                                                              const ee = new EventEmitter();
                                                                                                                                                                                              -ee.on('something', async (value) => {
                                                                                                                                                                                              -  throw new Error('kaboom');
                                                                                                                                                                                              -});
                                                                                                                                                                                              -
                                                                                                                                                                                              +
                                                                                                                                                                                              const ee = new EventEmitter();
                                                                                                                                                                                              +ee.on('something', async (value) => {
                                                                                                                                                                                              +  throw new Error('kaboom');
                                                                                                                                                                                              +});

                                                                                                                                                                                              The captureRejections option in the EventEmitter constructor or the global setting change this behavior, installing a .then(undefined, handler) handler on the Promise. This handler routes the exception asynchronously to the Symbol.for('nodejs.rejection') method if there is one, or to 'error' event handler if there is none.

                                                                                                                                                                                              -
                                                                                                                                                                                              const ee1 = new EventEmitter({ captureRejections: true });
                                                                                                                                                                                              -ee1.on('something', async (value) => {
                                                                                                                                                                                              -  throw new Error('kaboom');
                                                                                                                                                                                              +
                                                                                                                                                                                              const ee1 = new EventEmitter({ captureRejections: true });
                                                                                                                                                                                              +ee1.on('something', async (value) => {
                                                                                                                                                                                              +  throw new Error('kaboom');
                                                                                                                                                                                               });
                                                                                                                                                                                               
                                                                                                                                                                                              -ee1.on('error', console.log);
                                                                                                                                                                                              +ee1.on('error', console.log);
                                                                                                                                                                                               
                                                                                                                                                                                              -const ee2 = new EventEmitter({ captureRejections: true });
                                                                                                                                                                                              -ee2.on('something', async (value) => {
                                                                                                                                                                                              -  throw new Error('kaboom');
                                                                                                                                                                                              +const ee2 = new EventEmitter({ captureRejections: true });
                                                                                                                                                                                              +ee2.on('something', async (value) => {
                                                                                                                                                                                              +  throw new Error('kaboom');
                                                                                                                                                                                               });
                                                                                                                                                                                               
                                                                                                                                                                                              -ee2[Symbol.for('nodejs.rejection')] = console.log;
                                                                                                                                                                                              -
                                                                                                                                                                                              +ee2[Symbol.for('nodejs.rejection')] = console.log;

                                                                                                                                                                                              Setting EventEmitter.captureRejections = true will change the default for all new instances of EventEmitter.

                                                                                                                                                                                              -
                                                                                                                                                                                              EventEmitter.captureRejections = true;
                                                                                                                                                                                              -const ee1 = new EventEmitter();
                                                                                                                                                                                              -ee1.on('something', async (value) => {
                                                                                                                                                                                              -  throw new Error('kaboom');
                                                                                                                                                                                              +
                                                                                                                                                                                              EventEmitter.captureRejections = true;
                                                                                                                                                                                              +const ee1 = new EventEmitter();
                                                                                                                                                                                              +ee1.on('something', async (value) => {
                                                                                                                                                                                              +  throw new Error('kaboom');
                                                                                                                                                                                               });
                                                                                                                                                                                               
                                                                                                                                                                                              -ee1.on('error', console.log);
                                                                                                                                                                                              -
                                                                                                                                                                                              +ee1.on('error', console.log);

                                                                                                                                                                                              The 'error' events that are generated by the captureRejections behavior do not have a catch handler to avoid infinite error loops: the recommendation is to not use async functions as 'error' event handlers.

                                                                                                                                                                                              @@ -29783,8 +28567,7 @@

                                                                                                                                                                                              The EventEmitter class is defined and exposed by the events module:

                                                                                                                                                                                              -
                                                                                                                                                                                              const EventEmitter = require('events');
                                                                                                                                                                                              -
                                                                                                                                                                                              +
                                                                                                                                                                                              const EventEmitter = require('events');

                                                                                                                                                                                              All EventEmitters emit the event 'newListener' when new listeners are added and 'removeListener' when existing listeners are removed.

                                                                                                                                                                                              It supports the following option:

                                                                                                                                                                                              @@ -29809,24 +28592,23 @@ but important side effect: any additional listeners registered to the same name within the 'newListener' callback will be inserted before the listener that is in the process of being added.

                                                                                                                                                                                              -
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              -// Only do this once so we don't loop forever
                                                                                                                                                                                              -myEmitter.once('newListener', (event, listener) => {
                                                                                                                                                                                              -  if (event === 'event') {
                                                                                                                                                                                              -    // Insert a new listener in front
                                                                                                                                                                                              -    myEmitter.on('event', () => {
                                                                                                                                                                                              -      console.log('B');
                                                                                                                                                                                              +
                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                              +// Only do this once so we don't loop forever
                                                                                                                                                                                              +myEmitter.once('newListener', (event, listener) => {
                                                                                                                                                                                              +  if (event === 'event') {
                                                                                                                                                                                              +    // Insert a new listener in front
                                                                                                                                                                                              +    myEmitter.on('event', () => {
                                                                                                                                                                                              +      console.log('B');
                                                                                                                                                                                                   });
                                                                                                                                                                                                 }
                                                                                                                                                                                               });
                                                                                                                                                                                              -myEmitter.on('event', () => {
                                                                                                                                                                                              -  console.log('A');
                                                                                                                                                                                              +myEmitter.on('event', () => {
                                                                                                                                                                                              +  console.log('A');
                                                                                                                                                                                               });
                                                                                                                                                                                              -myEmitter.emit('event');
                                                                                                                                                                                              -// Prints:
                                                                                                                                                                                              -//   B
                                                                                                                                                                                              -//   A
                                                                                                                                                                                              -
                                                                                                                                                                                              +myEmitter.emit('event'); +// Prints: +// B +// A

                                                                                                                                                                                              Event: 'removeListener'#

                                                                                                                                                                                            Returns an array listing the events for which the emitter has registered listeners. The values in the array will be strings or Symbols.

                                                                                                                                                                                            -
                                                                                                                                                                                            const EventEmitter = require('events');
                                                                                                                                                                                            -const myEE = new EventEmitter();
                                                                                                                                                                                            -myEE.on('foo', () => {});
                                                                                                                                                                                            -myEE.on('bar', () => {});
                                                                                                                                                                                            +
                                                                                                                                                                                            const EventEmitter = require('events');
                                                                                                                                                                                            +const myEE = new EventEmitter();
                                                                                                                                                                                            +myEE.on('foo', () => {});
                                                                                                                                                                                            +myEE.on('bar', () => {});
                                                                                                                                                                                             
                                                                                                                                                                                            -const sym = Symbol('symbol');
                                                                                                                                                                                            -myEE.on(sym, () => {});
                                                                                                                                                                                            +const sym = Symbol('symbol');
                                                                                                                                                                                            +myEE.on(sym, () => {});
                                                                                                                                                                                             
                                                                                                                                                                                            -console.log(myEE.eventNames());
                                                                                                                                                                                            -// Prints: [ 'foo', 'bar', Symbol(symbol) ]
                                                                                                                                                                                            -
                                                                                                                                                                                            +console.log(myEE.eventNames()); +// Prints: [ 'foo', 'bar', Symbol(symbol) ]

                                                                                                                                                                                            emitter.getMaxListeners()#

                                                                                                                                                                                          Returns a copy of the array of listeners for the event named eventName.

                                                                                                                                                                                          -
                                                                                                                                                                                          server.on('connection', (stream) => {
                                                                                                                                                                                          -  console.log('someone connected!');
                                                                                                                                                                                          +
                                                                                                                                                                                          server.on('connection', (stream) => {
                                                                                                                                                                                          +  console.log('someone connected!');
                                                                                                                                                                                           });
                                                                                                                                                                                          -console.log(util.inspect(server.listeners('connection')));
                                                                                                                                                                                          -// Prints: [ [Function] ]
                                                                                                                                                                                          -
                                                                                                                                                                                          +console.log(util.inspect(server.listeners('connection'))); +// Prints: [ [Function] ]

                                                                                                                                                                                          emitter.off(eventName, listener)#

                                                                                                                                                                                        Adds a one-time listener function for the event named eventName. The next time eventName is triggered, this listener is removed and then invoked.

                                                                                                                                                                                        -
                                                                                                                                                                                        server.once('connection', (stream) => {
                                                                                                                                                                                        -  console.log('Ah, we have our first user!');
                                                                                                                                                                                        -});
                                                                                                                                                                                        -
                                                                                                                                                                                        +
                                                                                                                                                                                        server.once('connection', (stream) => {
                                                                                                                                                                                        +  console.log('Ah, we have our first user!');
                                                                                                                                                                                        +});

                                                                                                                                                                                        Returns a reference to the EventEmitter, so that calls can be chained.

                                                                                                                                                                                        By default, event listeners are invoked in the order they are added. The emitter.prependOnceListener() method can be used as an alternative to add the event listener to the beginning of the listeners array.

                                                                                                                                                                                        -
                                                                                                                                                                                        const myEE = new EventEmitter();
                                                                                                                                                                                        -myEE.once('foo', () => console.log('a'));
                                                                                                                                                                                        -myEE.prependOnceListener('foo', () => console.log('b'));
                                                                                                                                                                                        -myEE.emit('foo');
                                                                                                                                                                                        -// Prints:
                                                                                                                                                                                        -//   b
                                                                                                                                                                                        -//   a
                                                                                                                                                                                        -
                                                                                                                                                                                        +
                                                                                                                                                                                        const myEE = new EventEmitter();
                                                                                                                                                                                        +myEE.once('foo', () => console.log('a'));
                                                                                                                                                                                        +myEE.prependOnceListener('foo', () => console.log('b'));
                                                                                                                                                                                        +myEE.emit('foo');
                                                                                                                                                                                        +// Prints:
                                                                                                                                                                                        +//   b
                                                                                                                                                                                        +//   a

                                                                                                                                                                                        emitter.prependListener(eventName, listener)#

                                                                                                                                                                                      Removes the specified listener from the listener array for the event named eventName.

                                                                                                                                                                                      -
                                                                                                                                                                                      const callback = (stream) => {
                                                                                                                                                                                      -  console.log('someone connected!');
                                                                                                                                                                                      +
                                                                                                                                                                                      const callback = (stream) => {
                                                                                                                                                                                      +  console.log('someone connected!');
                                                                                                                                                                                       };
                                                                                                                                                                                      -server.on('connection', callback);
                                                                                                                                                                                      -// ...
                                                                                                                                                                                      -server.removeListener('connection', callback);
                                                                                                                                                                                      -
                                                                                                                                                                                      +server.on('connection', callback); +// ... +server.removeListener('connection', callback);

                                                                                                                                                                                      removeListener() will remove, at most, one instance of a listener from the listener array. If any single listener has been added multiple times to the listener array for the specified eventName, then removeListener() must be @@ -30161,34 +28931,33 @@ removeListener() or removeAllListeners() calls after emitting and before the last listener finishes execution will not remove them from emit() in progress. Subsequent events will behave as expected.

                                                                                                                                                                                      -
                                                                                                                                                                                      const myEmitter = new MyEmitter();
                                                                                                                                                                                      +
                                                                                                                                                                                      const myEmitter = new MyEmitter();
                                                                                                                                                                                       
                                                                                                                                                                                      -const callbackA = () => {
                                                                                                                                                                                      -  console.log('A');
                                                                                                                                                                                      -  myEmitter.removeListener('event', callbackB);
                                                                                                                                                                                      +const callbackA = () => {
                                                                                                                                                                                      +  console.log('A');
                                                                                                                                                                                      +  myEmitter.removeListener('event', callbackB);
                                                                                                                                                                                       };
                                                                                                                                                                                       
                                                                                                                                                                                      -const callbackB = () => {
                                                                                                                                                                                      -  console.log('B');
                                                                                                                                                                                      +const callbackB = () => {
                                                                                                                                                                                      +  console.log('B');
                                                                                                                                                                                       };
                                                                                                                                                                                       
                                                                                                                                                                                      -myEmitter.on('event', callbackA);
                                                                                                                                                                                      +myEmitter.on('event', callbackA);
                                                                                                                                                                                       
                                                                                                                                                                                      -myEmitter.on('event', callbackB);
                                                                                                                                                                                      +myEmitter.on('event', callbackB);
                                                                                                                                                                                       
                                                                                                                                                                                      -// callbackA removes listener callbackB but it will still be called.
                                                                                                                                                                                      -// Internal listener array at time of emit [callbackA, callbackB]
                                                                                                                                                                                      -myEmitter.emit('event');
                                                                                                                                                                                      -// Prints:
                                                                                                                                                                                      -//   A
                                                                                                                                                                                      -//   B
                                                                                                                                                                                      -
                                                                                                                                                                                      -// callbackB is now removed.
                                                                                                                                                                                      -// Internal listener array [callbackA]
                                                                                                                                                                                      -myEmitter.emit('event');
                                                                                                                                                                                      -// Prints:
                                                                                                                                                                                      -//   A
                                                                                                                                                                                      -
                                                                                                                                                                                      +// callbackA removes listener callbackB but it will still be called. +// Internal listener array at time of emit [callbackA, callbackB] +myEmitter.emit('event'); +// Prints: +// A +// B + +// callbackB is now removed. +// Internal listener array [callbackA] +myEmitter.emit('event'); +// Prints: +// A

                                                                                                                                                                                      Because listeners are managed using an internal array, calling this will change the position indices of any listener registered after the listener being removed. This will not impact the order in which listeners are called, @@ -30198,19 +28967,18 @@ event (as in the example below), removeListener() will remove the most recently added instance. In the example the once('ping') listener is removed:

                                                                                                                                                                                      -
                                                                                                                                                                                      const ee = new EventEmitter();
                                                                                                                                                                                      +
                                                                                                                                                                                      const ee = new EventEmitter();
                                                                                                                                                                                       
                                                                                                                                                                                      -function pong() {
                                                                                                                                                                                      -  console.log('pong');
                                                                                                                                                                                      +function pong() {
                                                                                                                                                                                      +  console.log('pong');
                                                                                                                                                                                       }
                                                                                                                                                                                       
                                                                                                                                                                                      -ee.on('ping', pong);
                                                                                                                                                                                      -ee.once('ping', pong);
                                                                                                                                                                                      -ee.removeListener('ping', pong);
                                                                                                                                                                                      +ee.on('ping', pong);
                                                                                                                                                                                      +ee.once('ping', pong);
                                                                                                                                                                                      +ee.removeListener('ping', pong);
                                                                                                                                                                                       
                                                                                                                                                                                      -ee.emit('ping');
                                                                                                                                                                                      -ee.emit('ping');
                                                                                                                                                                                      -
                                                                                                                                                                                      +ee.emit('ping'); +ee.emit('ping');

                                                                                                                                                                                      Returns a reference to the EventEmitter, so that calls can be chained.

                                                                                                                                                                                      emitter.setMaxListeners(n)#

                                                                                                                                                                                    Returns a copy of the array of listeners for the event named eventName, including any wrappers (such as those created by .once()).

                                                                                                                                                                                    -
                                                                                                                                                                                    const emitter = new EventEmitter();
                                                                                                                                                                                    -emitter.once('log', () => console.log('log once'));
                                                                                                                                                                                    +
                                                                                                                                                                                    const emitter = new EventEmitter();
                                                                                                                                                                                    +emitter.once('log', () => console.log('log once'));
                                                                                                                                                                                     
                                                                                                                                                                                    -// Returns a new Array with a function `onceWrapper` which has a property
                                                                                                                                                                                    -// `listener` which contains the original listener bound above
                                                                                                                                                                                    -const listeners = emitter.rawListeners('log');
                                                                                                                                                                                    -const logFnWrapper = listeners[0];
                                                                                                                                                                                    +// Returns a new Array with a function `onceWrapper` which has a property
                                                                                                                                                                                    +// `listener` which contains the original listener bound above
                                                                                                                                                                                    +const listeners = emitter.rawListeners('log');
                                                                                                                                                                                    +const logFnWrapper = listeners[0];
                                                                                                                                                                                     
                                                                                                                                                                                    -// Logs "log once" to the console and does not unbind the `once` event
                                                                                                                                                                                    +// Logs "log once" to the console and does not unbind the `once` event
                                                                                                                                                                                     logFnWrapper.listener();
                                                                                                                                                                                     
                                                                                                                                                                                    -// Logs "log once" to the console and removes the listener
                                                                                                                                                                                    +// Logs "log once" to the console and removes the listener
                                                                                                                                                                                     logFnWrapper();
                                                                                                                                                                                     
                                                                                                                                                                                    -emitter.on('log', () => console.log('log persistently'));
                                                                                                                                                                                    -// Will return a new Array with a single function bound by `.on()` above
                                                                                                                                                                                    -const newListeners = emitter.rawListeners('log');
                                                                                                                                                                                    -
                                                                                                                                                                                    -// Logs "log persistently" twice
                                                                                                                                                                                    -newListeners[0]();
                                                                                                                                                                                    -emitter.emit('log');
                                                                                                                                                                                    -
                                                                                                                                                                                    +emitter.on('log', () => console.log('log persistently')); +// Will return a new Array with a single function bound by `.on()` above +const newListeners = emitter.rawListeners('log'); + +// Logs "log persistently" twice +newListeners[0](); +emitter.emit('log');

                                                                                                                                                                                    emitter[Symbol.for('nodejs.rejection')](err, eventName[, ...args])#

                                                                                                                                                                                  Creates a Promise that is fulfilled when the EventEmitter emits the given -event or that is rejected when the EventEmitter emits 'error'. +event or that is rejected if the EventEmitter emits 'error' while waiting. The Promise will resolve with an array of all the arguments emitted to the given event.

                                                                                                                                                                                  This method is intentionally generic and works with the web platform EventTarget interface, which has no special 'error' event semantics and does not listen to the 'error' event.

                                                                                                                                                                                  -
                                                                                                                                                                                  const { once, EventEmitter } = require('events');
                                                                                                                                                                                  +
                                                                                                                                                                                  const { once, EventEmitter } = require('events');
                                                                                                                                                                                   
                                                                                                                                                                                  -async function run() {
                                                                                                                                                                                  -  const ee = new EventEmitter();
                                                                                                                                                                                  +async function run() {
                                                                                                                                                                                  +  const ee = new EventEmitter();
                                                                                                                                                                                   
                                                                                                                                                                                  -  process.nextTick(() => {
                                                                                                                                                                                  -    ee.emit('myevent', 42);
                                                                                                                                                                                  +  process.nextTick(() => {
                                                                                                                                                                                  +    ee.emit('myevent', 42);
                                                                                                                                                                                     });
                                                                                                                                                                                   
                                                                                                                                                                                  -  const [value] = await once(ee, 'myevent');
                                                                                                                                                                                  -  console.log(value);
                                                                                                                                                                                  +  const [value] = await once(ee, 'myevent');
                                                                                                                                                                                  +  console.log(value);
                                                                                                                                                                                   
                                                                                                                                                                                  -  const err = new Error('kaboom');
                                                                                                                                                                                  -  process.nextTick(() => {
                                                                                                                                                                                  -    ee.emit('error', err);
                                                                                                                                                                                  +  const err = new Error('kaboom');
                                                                                                                                                                                  +  process.nextTick(() => {
                                                                                                                                                                                  +    ee.emit('error', err);
                                                                                                                                                                                     });
                                                                                                                                                                                   
                                                                                                                                                                                  -  try {
                                                                                                                                                                                  -    await once(ee, 'myevent');
                                                                                                                                                                                  -  } catch (err) {
                                                                                                                                                                                  -    console.log('error happened', err);
                                                                                                                                                                                  +  try {
                                                                                                                                                                                  +    await once(ee, 'myevent');
                                                                                                                                                                                  +  } catch (err) {
                                                                                                                                                                                  +    console.log('error happened', err);
                                                                                                                                                                                     }
                                                                                                                                                                                   }
                                                                                                                                                                                   
                                                                                                                                                                                  -run();
                                                                                                                                                                                  -
                                                                                                                                                                                  -

                                                                                                                                                                                  events.captureRejections#

                                                                                                                                                                                  +run();
                                                                                                                                                                                  +

                                                                                                                                                                                  The special handling of the 'error' event is only used when events.once() +is used to wait for another event. If events.once() is used to wait for the +'error' event itself, then it is treated as any other kind of event without +special handling:

                                                                                                                                                                                  +
                                                                                                                                                                                  const { EventEmitter, once } = require('events');
                                                                                                                                                                                  +
                                                                                                                                                                                  +const ee = new EventEmitter();
                                                                                                                                                                                  +
                                                                                                                                                                                  +once(ee, 'error')
                                                                                                                                                                                  +  .then(([err]) => console.log('ok', err.message))
                                                                                                                                                                                  +  .catch((err) => console.log('error', err.message));
                                                                                                                                                                                  +
                                                                                                                                                                                  +ee.emit('error', new Error('boom'));
                                                                                                                                                                                  +
                                                                                                                                                                                  +// Prints: ok boom
                                                                                                                                                                                  +

                                                                                                                                                                                  Awaiting multiple events emitted on process.nextTick()#

                                                                                                                                                                                  +

                                                                                                                                                                                  There is an edge case worth noting when using the events.once() function +to await multiple events emitted on in the same batch of process.nextTick() +operations, or whenever multiple events are emitted synchronously. Specifically, +because the process.nextTick() queue is drained before the Promise microtask +queue, and because EventEmitter emits all events synchronously, it is possible +for events.once() to miss an event.

                                                                                                                                                                                  +
                                                                                                                                                                                  const { EventEmitter, once } = require('events');
                                                                                                                                                                                  +
                                                                                                                                                                                  +const myEE = new EventEmitter();
                                                                                                                                                                                  +
                                                                                                                                                                                  +async function foo() {
                                                                                                                                                                                  +  await once(myEE, 'bar');
                                                                                                                                                                                  +  console.log('bar');
                                                                                                                                                                                  +
                                                                                                                                                                                  +  // This Promise will never resolve because the 'foo' event will
                                                                                                                                                                                  +  // have already been emitted before the Promise is created.
                                                                                                                                                                                  +  await once(myEE, 'foo');
                                                                                                                                                                                  +  console.log('foo');
                                                                                                                                                                                  +}
                                                                                                                                                                                  +
                                                                                                                                                                                  +process.nextTick(() => {
                                                                                                                                                                                  +  myEE.emit('bar');
                                                                                                                                                                                  +  myEE.emit('foo');
                                                                                                                                                                                  +});
                                                                                                                                                                                  +
                                                                                                                                                                                  +foo().then(() => console.log('done'));
                                                                                                                                                                                  +

                                                                                                                                                                                  To catch both events, create each of the Promises before awaiting either +of them, then it becomes possible to use Promise.all(), Promise.race(), +or Promise.allSettled():

                                                                                                                                                                                  +
                                                                                                                                                                                  const { EventEmitter, once } = require('events');
                                                                                                                                                                                  +
                                                                                                                                                                                  +const myEE = new EventEmitter();
                                                                                                                                                                                  +
                                                                                                                                                                                  +async function foo() {
                                                                                                                                                                                  +  await Promise.all([once(myEE, 'bar'), once(myEE, 'foo')]);
                                                                                                                                                                                  +  console.log('foo', 'bar');
                                                                                                                                                                                  +}
                                                                                                                                                                                  +
                                                                                                                                                                                  +process.nextTick(() => {
                                                                                                                                                                                  +  myEE.emit('bar');
                                                                                                                                                                                  +  myEE.emit('foo');
                                                                                                                                                                                  +});
                                                                                                                                                                                  +
                                                                                                                                                                                  +foo().then(() => console.log('done'));
                                                                                                                                                                                  +

                                                                                                                                                                                  events.captureRejections#

                                                                                                                                                                                  @@ -30346,7 +29171,7 @@

                                                                                                                                                                                  Stability: 1 - captureRejections is experimental.

                                                                                                                                                                                  Value: Symbol.for('nodejs.rejection')

                                                                                                                                                                                  See how to write a custom rejection handler.

                                                                                                                                                                                  -

                                                                                                                                                                                  events.on(emitter, eventName)[src]#

                                                                                                                                                                                  +

                                                                                                                                                                                  events.on(emitter, eventName)[src]#

                                                                                                                                                                                  @@ -30355,143 +29180,145 @@
                                                                                                                                                                                • eventName <string> | <symbol> The name of the event being listened for
                                                                                                                                                                                • Returns: <AsyncIterator> that iterates eventName events emitted by the emitter
                                                                                                                                                                                -
                                                                                                                                                                                const { on, EventEmitter } = require('events');
                                                                                                                                                                                +
                                                                                                                                                                                const { on, EventEmitter } = require('events');
                                                                                                                                                                                 
                                                                                                                                                                                -(async () => {
                                                                                                                                                                                -  const ee = new EventEmitter();
                                                                                                                                                                                +(async () => {
                                                                                                                                                                                +  const ee = new EventEmitter();
                                                                                                                                                                                 
                                                                                                                                                                                -  // Emit later on
                                                                                                                                                                                -  process.nextTick(() => {
                                                                                                                                                                                -    ee.emit('foo', 'bar');
                                                                                                                                                                                -    ee.emit('foo', 42);
                                                                                                                                                                                +  // Emit later on
                                                                                                                                                                                +  process.nextTick(() => {
                                                                                                                                                                                +    ee.emit('foo', 'bar');
                                                                                                                                                                                +    ee.emit('foo', 42);
                                                                                                                                                                                   });
                                                                                                                                                                                 
                                                                                                                                                                                -  for await (const event of on(ee, 'foo')) {
                                                                                                                                                                                -    // The execution of this inner block is synchronous and it
                                                                                                                                                                                -    // processes one event at a time (even with await). Do not use
                                                                                                                                                                                -    // if concurrent execution is required.
                                                                                                                                                                                -    console.log(event); // prints ['bar'] [42]
                                                                                                                                                                                +  for await (const event of on(ee, 'foo')) {
                                                                                                                                                                                +    // The execution of this inner block is synchronous and it
                                                                                                                                                                                +    // processes one event at a time (even with await). Do not use
                                                                                                                                                                                +    // if concurrent execution is required.
                                                                                                                                                                                +    console.log(event); // prints ['bar'] [42]
                                                                                                                                                                                   }
                                                                                                                                                                                -  // Unreachable here
                                                                                                                                                                                -})();
                                                                                                                                                                                -
                                                                                                                                                                                + // Unreachable here +})();

                                                                                                                                                                                Returns an AsyncIterator that iterates eventName events. It will throw if the EventEmitter emits 'error'. It removes all listeners when exiting the loop. The value returned by each iteration is an array composed of the emitted event arguments.

                                                                                                                                                                                -

                                                                                                                                                                                File System#

                                                                                                                                                                                +

                                                                                                                                                                                File system#

                                                                                                                                                                                Stability: 2 - Stable

                                                                                                                                                                                -

                                                                                                                                                                                The fs module provides an API for interacting with the file system in a -manner closely modeled around standard POSIX functions.

                                                                                                                                                                                +

                                                                                                                                                                                Source Code: lib/fs.js

                                                                                                                                                                                +

                                                                                                                                                                                The fs module enables interacting with the file system in a +way modeled on standard POSIX functions.

                                                                                                                                                                                To use this module:

                                                                                                                                                                                -
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                -
                                                                                                                                                                                -

                                                                                                                                                                                All file system operations have synchronous and asynchronous forms.

                                                                                                                                                                                -

                                                                                                                                                                                The asynchronous form always takes a completion callback as its last argument. -The arguments passed to the completion callback depend on the method, but the -first argument is always reserved for an exception. If the operation was -completed successfully, then the first argument will be null or undefined.

                                                                                                                                                                                -
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                -
                                                                                                                                                                                -fs.unlink('/tmp/hello', (err) => {
                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                -  console.log('successfully deleted /tmp/hello');
                                                                                                                                                                                -});
                                                                                                                                                                                -
                                                                                                                                                                                -

                                                                                                                                                                                Exceptions that occur using synchronous operations are thrown immediately and -may be handled using try…catch, or may be allowed to bubble up.

                                                                                                                                                                                -
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                -
                                                                                                                                                                                -try {
                                                                                                                                                                                -  fs.unlinkSync('/tmp/hello');
                                                                                                                                                                                -  console.log('successfully deleted /tmp/hello');
                                                                                                                                                                                -} catch (err) {
                                                                                                                                                                                -  // handle the error
                                                                                                                                                                                -}
                                                                                                                                                                                -
                                                                                                                                                                                -

                                                                                                                                                                                There is no guaranteed ordering when using asynchronous methods. So the -following is prone to error because the fs.stat() operation may complete -before the fs.rename() operation:

                                                                                                                                                                                -
                                                                                                                                                                                fs.rename('/tmp/hello', '/tmp/world', (err) => {
                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                -  console.log('renamed complete');
                                                                                                                                                                                -});
                                                                                                                                                                                -fs.stat('/tmp/world', (err, stats) => {
                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                -  console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                -});
                                                                                                                                                                                -
                                                                                                                                                                                +
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                +

                                                                                                                                                                                All file system operations have synchronous, callback, and promise-based +forms.

                                                                                                                                                                                +

                                                                                                                                                                                Synchronous example#

                                                                                                                                                                                +

                                                                                                                                                                                The synchronous form blocks the Node.js event loop and further JavaScript +execution until the operation is complete. Exceptions are thrown immediately +and can be handled using try…catch, or can be allowed to bubble up.

                                                                                                                                                                                +
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                +
                                                                                                                                                                                +try {
                                                                                                                                                                                +  fs.unlinkSync('/tmp/hello');
                                                                                                                                                                                +  console.log('successfully deleted /tmp/hello');
                                                                                                                                                                                +} catch (err) {
                                                                                                                                                                                +  // handle the error
                                                                                                                                                                                +}
                                                                                                                                                                                +

                                                                                                                                                                                Callback example#

                                                                                                                                                                                +

                                                                                                                                                                                The callback form takes a completion callback function as its last +argument and invokes the operation asynchronously. The arguments passed to +the completion callback depend on the method, but the first argument is always +reserved for an exception. If the operation is completed successfully, then +the first argument is null or undefined.

                                                                                                                                                                                +
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                +
                                                                                                                                                                                +fs.unlink('/tmp/hello', (err) => {
                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                +  console.log('successfully deleted /tmp/hello');
                                                                                                                                                                                +});
                                                                                                                                                                                +

                                                                                                                                                                                Promise example#

                                                                                                                                                                                +

                                                                                                                                                                                Promise-based operations return a Promise that is resolved when the +asynchronous operation is complete.

                                                                                                                                                                                +
                                                                                                                                                                                const fs = require('fs').promises;
                                                                                                                                                                                +
                                                                                                                                                                                +(async function(path) {
                                                                                                                                                                                +  try {
                                                                                                                                                                                +    await fs.unlink(path);
                                                                                                                                                                                +    console.log(`successfully deleted ${path}`);
                                                                                                                                                                                +  } catch (error) {
                                                                                                                                                                                +    console.error('there was an error:', error.message);
                                                                                                                                                                                +  }
                                                                                                                                                                                +})('/tmp/hello');
                                                                                                                                                                                +

                                                                                                                                                                                Ordering of callback and promise-based operations#

                                                                                                                                                                                +

                                                                                                                                                                                There is no guaranteed ordering when using either the callback or +promise-based methods. For example, the following is prone to error +because the fs.stat() operation might complete before the fs.rename() +operation:

                                                                                                                                                                                +
                                                                                                                                                                                fs.rename('/tmp/hello', '/tmp/world', (err) => {
                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                +  console.log('renamed complete');
                                                                                                                                                                                +});
                                                                                                                                                                                +fs.stat('/tmp/world', (err, stats) => {
                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                +  console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                +});

                                                                                                                                                                                To correctly order the operations, move the fs.stat() call into the callback -of the fs.rename() operation:

                                                                                                                                                                                -
                                                                                                                                                                                fs.rename('/tmp/hello', '/tmp/world', (err) => {
                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                -  fs.stat('/tmp/world', (err, stats) => {
                                                                                                                                                                                -    if (err) throw err;
                                                                                                                                                                                -    console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                -  });
                                                                                                                                                                                -});
                                                                                                                                                                                -
                                                                                                                                                                                -

                                                                                                                                                                                In busy processes, use the asynchronous versions of these calls. The synchronous -versions will block the entire process until they complete, halting all -connections.

                                                                                                                                                                                -

                                                                                                                                                                                While it is not recommended, most fs functions allow the callback argument to -be omitted, in which case a default callback is used that rethrows errors. To -get a trace to the original call site, set the NODE_DEBUG environment -variable:

                                                                                                                                                                                -

                                                                                                                                                                                Omitting the callback function on asynchronous fs functions is deprecated and -may result in an error being thrown in the future.

                                                                                                                                                                                -
                                                                                                                                                                                $ cat script.js
                                                                                                                                                                                -function bad() {
                                                                                                                                                                                -  require('fs').readFile('/');
                                                                                                                                                                                -}
                                                                                                                                                                                -bad();
                                                                                                                                                                                -
                                                                                                                                                                                -$ env NODE_DEBUG=fs node script.js
                                                                                                                                                                                -fs.js:88
                                                                                                                                                                                -        throw backtrace;
                                                                                                                                                                                -        ^
                                                                                                                                                                                -Error: EISDIR: illegal operation on a directory, read
                                                                                                                                                                                -    <stack trace.>
                                                                                                                                                                                -
                                                                                                                                                                                +of the fs.rename() operation:

                                                                                                                                                                                +
                                                                                                                                                                                fs.rename('/tmp/hello', '/tmp/world', (err) => {
                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                +  fs.stat('/tmp/world', (err, stats) => {
                                                                                                                                                                                +    if (err) throw err;
                                                                                                                                                                                +    console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                +  });
                                                                                                                                                                                +});
                                                                                                                                                                                +

                                                                                                                                                                                Or, use the promise-based API:

                                                                                                                                                                                +
                                                                                                                                                                                const fs = require('fs').promises;
                                                                                                                                                                                +
                                                                                                                                                                                +(async function(from, to) {
                                                                                                                                                                                +  try {
                                                                                                                                                                                +    await fs.rename(from, to);
                                                                                                                                                                                +    const stats = await fs.stat(to);
                                                                                                                                                                                +    console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                +  } catch (error) {
                                                                                                                                                                                +    console.error('there was an error:', error.message);
                                                                                                                                                                                +  }
                                                                                                                                                                                +})('/tmp/hello', '/tmp/world');

                                                                                                                                                                                File paths#

                                                                                                                                                                                Most fs operations accept filepaths that may be specified in the form of a string, a Buffer, or a URL object using the file: protocol.

                                                                                                                                                                                String form paths are interpreted as UTF-8 character sequences identifying the absolute or relative filename. Relative paths will be resolved relative -to the current working directory as specified by process.cwd().

                                                                                                                                                                                +to the current working directory as determined by calling process.cwd().

                                                                                                                                                                                Example using an absolute path on POSIX:

                                                                                                                                                                                -
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                +
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                 
                                                                                                                                                                                -fs.open('/open/some/file.txt', 'r', (err, fd) => {
                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                -  fs.close(fd, (err) => {
                                                                                                                                                                                -    if (err) throw err;
                                                                                                                                                                                +fs.open('/open/some/file.txt', 'r', (err, fd) => {
                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                +  fs.close(fd, (err) => {
                                                                                                                                                                                +    if (err) throw err;
                                                                                                                                                                                   });
                                                                                                                                                                                -});
                                                                                                                                                                                -
                                                                                                                                                                                +});

                                                                                                                                                                                Example using a relative path on POSIX (relative to process.cwd()):

                                                                                                                                                                                -
                                                                                                                                                                                fs.open('file.txt', 'r', (err, fd) => {
                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                -  fs.close(fd, (err) => {
                                                                                                                                                                                -    if (err) throw err;
                                                                                                                                                                                +
                                                                                                                                                                                fs.open('file.txt', 'r', (err, fd) => {
                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                +  fs.close(fd, (err) => {
                                                                                                                                                                                +    if (err) throw err;
                                                                                                                                                                                   });
                                                                                                                                                                                -});
                                                                                                                                                                                -
                                                                                                                                                                                +});

                                                                                                                                                                                Paths specified using a Buffer are useful primarily on certain POSIX operating systems that treat file paths as opaque byte sequences. On such systems, it is possible for a single file path to contain sub-sequences that use multiple character encodings. As with string paths, Buffer paths may be relative or absolute:

                                                                                                                                                                                Example using an absolute path on POSIX:

                                                                                                                                                                                -
                                                                                                                                                                                fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {
                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                -  fs.close(fd, (err) => {
                                                                                                                                                                                -    if (err) throw err;
                                                                                                                                                                                +
                                                                                                                                                                                fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {
                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                +  fs.close(fd, (err) => {
                                                                                                                                                                                +    if (err) throw err;
                                                                                                                                                                                   });
                                                                                                                                                                                -});
                                                                                                                                                                                -
                                                                                                                                                                                +});

                                                                                                                                                                                On Windows, Node.js follows the concept of per-drive working directory. This behavior can be observed when using a drive path without a backslash. For example fs.readdirSync('C:\\') can potentially return a different result than @@ -30504,68 +29331,63 @@

                                                                                                                                                                                For most fs module functions, the path or filename argument may be passed as a WHATWG URL object. Only URL objects using the file: protocol are supported.

                                                                                                                                                                                -
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                -const fileUrl = new URL('file:///tmp/hello');
                                                                                                                                                                                +
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                +const fileUrl = new URL('file:///tmp/hello');
                                                                                                                                                                                 
                                                                                                                                                                                -fs.readFileSync(fileUrl);
                                                                                                                                                                                -
                                                                                                                                                                                +fs.readFileSync(fileUrl);

                                                                                                                                                                                file: URLs are always absolute paths.

                                                                                                                                                                                Using WHATWG URL objects might introduce platform-specific behaviors.

                                                                                                                                                                                On Windows, file: URLs with a host name convert to UNC paths, while file: URLs with drive letters convert to local absolute paths. file: URLs without a host name nor a drive letter will result in a throw:

                                                                                                                                                                                -
                                                                                                                                                                                // On Windows :
                                                                                                                                                                                +
                                                                                                                                                                                // On Windows :
                                                                                                                                                                                 
                                                                                                                                                                                -// - WHATWG file URLs with hostname convert to UNC path
                                                                                                                                                                                -// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file
                                                                                                                                                                                -fs.readFileSync(new URL('file://hostname/p/a/t/h/file'));
                                                                                                                                                                                -
                                                                                                                                                                                -// - WHATWG file URLs with drive letters convert to absolute path
                                                                                                                                                                                -// file:///C:/tmp/hello => C:\tmp\hello
                                                                                                                                                                                -fs.readFileSync(new URL('file:///C:/tmp/hello'));
                                                                                                                                                                                -
                                                                                                                                                                                -// - WHATWG file URLs without hostname must have a drive letters
                                                                                                                                                                                -fs.readFileSync(new URL('file:///notdriveletter/p/a/t/h/file'));
                                                                                                                                                                                -fs.readFileSync(new URL('file:///c/p/a/t/h/file'));
                                                                                                                                                                                -// TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute
                                                                                                                                                                                -
                                                                                                                                                                                +// - WHATWG file URLs with hostname convert to UNC path +// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file +fs.readFileSync(new URL('file://hostname/p/a/t/h/file')); + +// - WHATWG file URLs with drive letters convert to absolute path +// file:///C:/tmp/hello => C:\tmp\hello +fs.readFileSync(new URL('file:///C:/tmp/hello')); + +// - WHATWG file URLs without hostname must have a drive letters +fs.readFileSync(new URL('file:///notdriveletter/p/a/t/h/file')); +fs.readFileSync(new URL('file:///c/p/a/t/h/file')); +// TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute

                                                                                                                                                                                file: URLs with drive letters must use : as a separator just after the drive letter. Using another separator will result in a throw.

                                                                                                                                                                                On all other platforms, file: URLs with a host name are unsupported and will result in a throw:

                                                                                                                                                                                -
                                                                                                                                                                                // On other platforms:
                                                                                                                                                                                +
                                                                                                                                                                                // On other platforms:
                                                                                                                                                                                 
                                                                                                                                                                                -// - WHATWG file URLs with hostname are unsupported
                                                                                                                                                                                -// file://hostname/p/a/t/h/file => throw!
                                                                                                                                                                                -fs.readFileSync(new URL('file://hostname/p/a/t/h/file'));
                                                                                                                                                                                -// TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute
                                                                                                                                                                                -
                                                                                                                                                                                -// - WHATWG file URLs convert to absolute path
                                                                                                                                                                                -// file:///tmp/hello => /tmp/hello
                                                                                                                                                                                -fs.readFileSync(new URL('file:///tmp/hello'));
                                                                                                                                                                                -
                                                                                                                                                                                +// - WHATWG file URLs with hostname are unsupported +// file://hostname/p/a/t/h/file => throw! +fs.readFileSync(new URL('file://hostname/p/a/t/h/file')); +// TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute + +// - WHATWG file URLs convert to absolute path +// file:///tmp/hello => /tmp/hello +fs.readFileSync(new URL('file:///tmp/hello'));

                                                                                                                                                                                A file: URL having encoded slash characters will result in a throw on all platforms:

                                                                                                                                                                                -
                                                                                                                                                                                // On Windows
                                                                                                                                                                                -fs.readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
                                                                                                                                                                                -fs.readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
                                                                                                                                                                                -/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                -\ or / characters */
                                                                                                                                                                                -
                                                                                                                                                                                -// On POSIX
                                                                                                                                                                                -fs.readFileSync(new URL('file:///p/a/t/h/%2F'));
                                                                                                                                                                                -fs.readFileSync(new URL('file:///p/a/t/h/%2f'));
                                                                                                                                                                                -/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                -/ characters */
                                                                                                                                                                                -
                                                                                                                                                                                +
                                                                                                                                                                                // On Windows
                                                                                                                                                                                +fs.readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
                                                                                                                                                                                +fs.readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
                                                                                                                                                                                +/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                +\ or / characters */
                                                                                                                                                                                +
                                                                                                                                                                                +// On POSIX
                                                                                                                                                                                +fs.readFileSync(new URL('file:///p/a/t/h/%2F'));
                                                                                                                                                                                +fs.readFileSync(new URL('file:///p/a/t/h/%2f'));
                                                                                                                                                                                +/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                +/ characters */

                                                                                                                                                                                On Windows, file: URLs having encoded backslash will result in a throw:

                                                                                                                                                                                -
                                                                                                                                                                                // On Windows
                                                                                                                                                                                -fs.readFileSync(new URL('file:///C:/path/%5C'));
                                                                                                                                                                                -fs.readFileSync(new URL('file:///C:/path/%5c'));
                                                                                                                                                                                -/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                -\ or / characters */
                                                                                                                                                                                -
                                                                                                                                                                                -

                                                                                                                                                                                File Descriptors#

                                                                                                                                                                                +
                                                                                                                                                                                // On Windows
                                                                                                                                                                                +fs.readFileSync(new URL('file:///C:/path/%5C'));
                                                                                                                                                                                +fs.readFileSync(new URL('file:///C:/path/%5c'));
                                                                                                                                                                                +/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                +\ or / characters */
                                                                                                                                                                                +

                                                                                                                                                                                File descriptors#

                                                                                                                                                                                On POSIX systems, for every process, the kernel maintains a table of currently open files and resources. Each open file is assigned a simple numeric identifier called a file descriptor. At the system-level, all file system @@ -30577,45 +29399,43 @@

                                                                                                                                                                                The fs.open() method is used to allocate a new file descriptor. Once allocated, the file descriptor may be used to read data from, write data to, or request information about the file.

                                                                                                                                                                                -
                                                                                                                                                                                fs.open('/open/some/file.txt', 'r', (err, fd) => {
                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                -  fs.fstat(fd, (err, stat) => {
                                                                                                                                                                                -    if (err) throw err;
                                                                                                                                                                                -    // use stat
                                                                                                                                                                                -
                                                                                                                                                                                -    // always close the file descriptor!
                                                                                                                                                                                -    fs.close(fd, (err) => {
                                                                                                                                                                                -      if (err) throw err;
                                                                                                                                                                                +
                                                                                                                                                                                fs.open('/open/some/file.txt', 'r', (err, fd) => {
                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                +  fs.fstat(fd, (err, stat) => {
                                                                                                                                                                                +    if (err) throw err;
                                                                                                                                                                                +    // use stat
                                                                                                                                                                                +
                                                                                                                                                                                +    // always close the file descriptor!
                                                                                                                                                                                +    fs.close(fd, (err) => {
                                                                                                                                                                                +      if (err) throw err;
                                                                                                                                                                                     });
                                                                                                                                                                                   });
                                                                                                                                                                                -});
                                                                                                                                                                                -
                                                                                                                                                                                +});

                                                                                                                                                                                Most operating systems limit the number of file descriptors that may be open at any given time so it is critical to close the descriptor when operations are completed. Failure to do so will result in a memory leak that will eventually cause an application to crash.

                                                                                                                                                                                -

                                                                                                                                                                                Threadpool Usage#

                                                                                                                                                                                +

                                                                                                                                                                                Threadpool usage#

                                                                                                                                                                                All file system APIs except fs.FSWatcher() and those that are explicitly synchronous use libuv's threadpool, which can have surprising and negative performance implications for some applications. See the UV_THREADPOOL_SIZE documentation for more information.

                                                                                                                                                                                -

                                                                                                                                                                                Class fs.Dir#

                                                                                                                                                                                +

                                                                                                                                                                                Class: fs.Dir#

                                                                                                                                                                                A class representing a directory stream.

                                                                                                                                                                                Created by fs.opendir(), fs.opendirSync(), or fsPromises.opendir().

                                                                                                                                                                                -
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                +
                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                 
                                                                                                                                                                                -async function print(path) {
                                                                                                                                                                                -  const dir = await fs.promises.opendir(path);
                                                                                                                                                                                -  for await (const dirent of dir) {
                                                                                                                                                                                -    console.log(dirent.name);
                                                                                                                                                                                +async function print(path) {
                                                                                                                                                                                +  const dir = await fs.promises.opendir(path);
                                                                                                                                                                                +  for await (const dirent of dir) {
                                                                                                                                                                                +    console.log(dirent.name);
                                                                                                                                                                                   }
                                                                                                                                                                                 }
                                                                                                                                                                                -print('./').catch(console.error);
                                                                                                                                                                                -
                                                                                                                                                                                +print('./').catch(console.error);

                                                                                                                                                                                dir.close()#

                                                                                                                                                                                  -
                                                                                                                                                                                • -

                                                                                                                                                                                  callback <Function>

                                                                                                                                                                                  +
                                                                                                                                                                                • callback <Function> @@ -30677,8 +29496,7 @@ Added in: v12.12.0
                                                                                                                                                                                    -
                                                                                                                                                                                  • -

                                                                                                                                                                                    callback <Function>

                                                                                                                                                                                    +
                                                                                                                                                                                  • callback <Function>
                                                                                                                                                                                    • err <Error>
                                                                                                                                                                                    • dirent <fs.Dirent> | <null>
                                                                                                                                                                                    • @@ -30826,14 +29644,13 @@ support. If filename is provided, it will be provided as a Buffer if fs.watch() is called with its encoding option set to 'buffer', otherwise filename will be a UTF-8 string.

                                                                                                                                                                                      -
                                                                                                                                                                                      // Example when handled through fs.watch() listener
                                                                                                                                                                                      -fs.watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
                                                                                                                                                                                      -  if (filename) {
                                                                                                                                                                                      -    console.log(filename);
                                                                                                                                                                                      -    // Prints: <Buffer ...>
                                                                                                                                                                                      +
                                                                                                                                                                                      // Example when handled through fs.watch() listener
                                                                                                                                                                                      +fs.watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
                                                                                                                                                                                      +  if (filename) {
                                                                                                                                                                                      +    console.log(filename);
                                                                                                                                                                                      +    // Prints: <Buffer ...>
                                                                                                                                                                                         }
                                                                                                                                                                                      -});
                                                                                                                                                                                      -
                                                                                                                                                                                      +});

                                                                                                                                                                                      Event: 'close'#

                                                                                                                                                                                      Stop watching for changes on the given fs.FSWatcher. Once stopped, the fs.FSWatcher object is no longer usable.

                                                                                                                                                                                      +

                                                                                                                                                                                      watcher.ref()#

                                                                                                                                                                                      + + +

                                                                                                                                                                                      When called, requests that the Node.js event loop not exit so long as the +FSWatcher is active. Calling watcher.ref() multiple times will have +no effect.

                                                                                                                                                                                      +

                                                                                                                                                                                      By default, all FSWatcher objects are "ref'ed", making it normally +unnecessary to call watcher.ref() unless watcher.unref() had been +called previously.

                                                                                                                                                                                      +

                                                                                                                                                                                      watcher.unref()#

                                                                                                                                                                                      + + +

                                                                                                                                                                                      When called, the active FSWatcher object will not require the Node.js +event loop to remain active. If there is no other activity keeping the +event loop running, the process may exit before the FSWatcher object's +callback is invoked. Calling watcher.unref() multiple times will have +no effect.

                                                                                                                                                                                      +

                                                                                                                                                                                      Class: fs.StatWatcher#

                                                                                                                                                                                      + + +

                                                                                                                                                                                      A successful call to fs.watchFile() method will return a new fs.StatWatcher +object.

                                                                                                                                                                                      +

                                                                                                                                                                                      watcher.ref()#

                                                                                                                                                                                      + + +

                                                                                                                                                                                      When called, requests that the Node.js event loop not exit so long as the +StatWatcher is active. Calling watcher.ref() multiple times will have +no effect.

                                                                                                                                                                                      +

                                                                                                                                                                                      By default, all StatWatcher objects are "ref'ed", making it normally +unnecessary to call watcher.ref() unless watcher.unref() had been +called previously.

                                                                                                                                                                                      +

                                                                                                                                                                                      watcher.unref()#

                                                                                                                                                                                      + + +

                                                                                                                                                                                      When called, the active StatWatcher object will not require the Node.js +event loop to remain active. If there is no other activity keeping the +event loop running, the process may exit before the StatWatcher object's +callback is invoked. Calling watcher.unref() multiple times will have +no effect.

                                                                                                                                                                                      Class: fs.ReadStream#

                                                                                                                                                                                    Synchronously tests a user's permissions for the file or directory specified by path. The mode argument is an optional integer that specifies the -accessibility checks to be performed. Check File Access Constants for +accessibility checks to be performed. Check File access constants for possible values of mode. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                    If any of the accessibility checks fail, an Error will be thrown. Otherwise, the method will return undefined.

                                                                                                                                                                                    -
                                                                                                                                                                                    try {
                                                                                                                                                                                    -  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
                                                                                                                                                                                    -  console.log('can read/write');
                                                                                                                                                                                    -} catch (err) {
                                                                                                                                                                                    -  console.error('no access!');
                                                                                                                                                                                    -}
                                                                                                                                                                                    -
                                                                                                                                                                                    +
                                                                                                                                                                                    try {
                                                                                                                                                                                    +  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
                                                                                                                                                                                    +  console.log('can read/write');
                                                                                                                                                                                    +} catch (err) {
                                                                                                                                                                                    +  console.error('no access!');
                                                                                                                                                                                    +}

                                                                                                                                                                                    fs.appendFile(path, data[, options], callback)#

                                                                                                                                                                                    • fd <integer>
                                                                                                                                                                                    • -
                                                                                                                                                                                    • -

                                                                                                                                                                                      options <Object>

                                                                                                                                                                                      +
                                                                                                                                                                                    • options <Object>
                                                                                                                                                                                      • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                      • @@ -32364,8 +31215,7 @@
                                                                                                                                                                                        • fd <integer>
                                                                                                                                                                                        • -
                                                                                                                                                                                        • -

                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                          +
                                                                                                                                                                                        • callback <Function> @@ -32398,8 +31248,7 @@
                                                                                                                                                                                          • fd <integer>
                                                                                                                                                                                          • len <integer> Default: 0
                                                                                                                                                                                          • -
                                                                                                                                                                                          • -

                                                                                                                                                                                            callback <Function>

                                                                                                                                                                                            +
                                                                                                                                                                                          • callback <Function> @@ -32411,35 +31260,33 @@ the first len bytes will be retained in the file.

                                                                                                                                                                                            For example, the following program retains only the first four bytes of the file:

                                                                                                                                                                                            -
                                                                                                                                                                                            console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                            -// Prints: Node.js
                                                                                                                                                                                            +
                                                                                                                                                                                            console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                            +// Prints: Node.js
                                                                                                                                                                                             
                                                                                                                                                                                            -// get the file descriptor of the file to be truncated
                                                                                                                                                                                            -const fd = fs.openSync('temp.txt', 'r+');
                                                                                                                                                                                            +// get the file descriptor of the file to be truncated
                                                                                                                                                                                            +const fd = fs.openSync('temp.txt', 'r+');
                                                                                                                                                                                             
                                                                                                                                                                                            -// Truncate the file to first four bytes
                                                                                                                                                                                            -fs.ftruncate(fd, 4, (err) => {
                                                                                                                                                                                            +// Truncate the file to first four bytes
                                                                                                                                                                                            +fs.ftruncate(fd, 4, (err) => {
                                                                                                                                                                                               assert.ifError(err);
                                                                                                                                                                                            -  console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                            +  console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                             });
                                                                                                                                                                                            -// Prints: Node
                                                                                                                                                                                            -
                                                                                                                                                                                            +// Prints: Node

                                                                                                                                                                                            If the file previously was shorter than len bytes, it is extended, and the extended part is filled with null bytes ('\0'):

                                                                                                                                                                                            -
                                                                                                                                                                                            console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                            -// Prints: Node.js
                                                                                                                                                                                            +
                                                                                                                                                                                            console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                            +// Prints: Node.js
                                                                                                                                                                                             
                                                                                                                                                                                            -// get the file descriptor of the file to be truncated
                                                                                                                                                                                            -const fd = fs.openSync('temp.txt', 'r+');
                                                                                                                                                                                            +// get the file descriptor of the file to be truncated
                                                                                                                                                                                            +const fd = fs.openSync('temp.txt', 'r+');
                                                                                                                                                                                             
                                                                                                                                                                                            -// Truncate the file to 10 bytes, whereas the actual size is 7 bytes
                                                                                                                                                                                            -fs.ftruncate(fd, 10, (err) => {
                                                                                                                                                                                            +// Truncate the file to 10 bytes, whereas the actual size is 7 bytes
                                                                                                                                                                                            +fs.ftruncate(fd, 10, (err) => {
                                                                                                                                                                                               assert.ifError(err);
                                                                                                                                                                                            -  console.log(fs.readFileSync('temp.txt'));
                                                                                                                                                                                            +  console.log(fs.readFileSync('temp.txt'));
                                                                                                                                                                                             });
                                                                                                                                                                                            -// Prints: <Buffer 4e 6f 64 65 2e 6a 73 00 00 00>
                                                                                                                                                                                            -// ('Node.js\0\0\0' in UTF8)
                                                                                                                                                                                            -
                                                                                                                                                                                            +// Prints: <Buffer 4e 6f 64 65 2e 6a 73 00 00 00> +// ('Node.js\0\0\0' in UTF8)

                                                                                                                                                                                            The last three bytes are null bytes ('\0'), to compensate the over-truncation.

                                                                                                                                                                                            fs.ftruncateSync(fd[, len])#

                                                                                                                                                                                          • fd <integer>
                                                                                                                                                                                          • atime <number> | <string> | <Date>
                                                                                                                                                                                          • mtime <number> | <string> | <Date>
                                                                                                                                                                                          • -
                                                                                                                                                                                          • -

                                                                                                                                                                                            callback <Function>

                                                                                                                                                                                            +
                                                                                                                                                                                          • callback <Function> @@ -32518,8 +31364,7 @@
                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                            • mode <integer>
                                                                                                                                                                                            • -
                                                                                                                                                                                            • -

                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                              +
                                                                                                                                                                                            • callback <Function> @@ -32548,6 +31393,8 @@

                                                                                                                                                                                              The callback parameter is no longer optional. Not passing it will throw a TypeError at runtime.

                                                                                                                                                                                              v7.0.0

                                                                                                                                                                                              The callback parameter is no longer optional. Not passing it will emit a deprecation warning with id DEP0013.

                                                                                                                                                                                              +v0.4.7 +

                                                                                                                                                                                              Documentation-only deprecation.

                                                                                                                                                                                              @@ -32555,8 +31402,7 @@
                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                            • uid <integer>
                                                                                                                                                                                            • gid <integer>
                                                                                                                                                                                            • -
                                                                                                                                                                                            • -

                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                              +
                                                                                                                                                                                            • callback <Function> @@ -32571,6 +31417,8 @@ VersionChanges v10.6.0

                                                                                                                                                                                              This API is no longer deprecated.

                                                                                                                                                                                              +v0.4.7 +

                                                                                                                                                                                              Documentation-only deprecation.

                                                                                                                                                                                              @@ -32580,6 +31428,38 @@
                                                                                                                                                                                            • gid <integer>

                                                                                                                                                                                            Synchronous lchown(2). Returns undefined.

                                                                                                                                                                                            +

                                                                                                                                                                                            fs.lutimes(path, atime, mtime, callback)#

                                                                                                                                                                                            + + +

                                                                                                                                                                                            Changes the access and modification times of a file in the same way as +fs.utimes(), with the difference that if the path refers to a symbolic +link, then the link is not dereferenced: instead, the timestamps of the +symbolic link itself are changed.

                                                                                                                                                                                            +

                                                                                                                                                                                            No arguments other than a possible exception are given to the completion +callback.

                                                                                                                                                                                            +

                                                                                                                                                                                            fs.lutimesSync(path, atime, mtime)#

                                                                                                                                                                                            + + +

                                                                                                                                                                                            Change the file system timestamps of the symbolic link referenced by path. +Returns undefined, or throws an exception when parameters are incorrect or +the operation fails. This is the synchronous version of fs.lutimes().

                                                                                                                                                                                            fs.link(existingPath, newPath, callback)#

                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                            • -
                                                                                                                                                                                            • -

                                                                                                                                                                                              options <Object>

                                                                                                                                                                                              +
                                                                                                                                                                                            • options <Object>
                                                                                                                                                                                              • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                            • -
                                                                                                                                                                                            • -

                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                              +
                                                                                                                                                                                            • callback <Function>
                                                                                                                                                                                              • err <Error>
                                                                                                                                                                                              • stats <fs.Stats>
                                                                                                                                                                                              • @@ -32680,8 +31557,7 @@
                                                                                                                                                                                                • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                • -
                                                                                                                                                                                                • -

                                                                                                                                                                                                  options <Object>

                                                                                                                                                                                                  +
                                                                                                                                                                                                • options <Object>
                                                                                                                                                                                                  • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                  • @@ -32712,15 +31588,13 @@
                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                    • -
                                                                                                                                                                                                    • -

                                                                                                                                                                                                      options <Object> | <integer>

                                                                                                                                                                                                      +
                                                                                                                                                                                                    • options <Object> | <integer>
                                                                                                                                                                                                    • -
                                                                                                                                                                                                    • -

                                                                                                                                                                                                      callback <Function>

                                                                                                                                                                                                      +
                                                                                                                                                                                                    • callback <Function> @@ -32734,17 +31608,15 @@ property indicating whether parent directories should be created. Calling fs.mkdir() when path is a directory that exists results in an error only when recursive is false.

                                                                                                                                                                                                      -
                                                                                                                                                                                                      // Creates /tmp/a/apple, regardless of whether `/tmp` and /tmp/a exist.
                                                                                                                                                                                                      -fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
                                                                                                                                                                                                      -  if (err) throw err;
                                                                                                                                                                                                      -});
                                                                                                                                                                                                      -
                                                                                                                                                                                                      +
                                                                                                                                                                                                      // Creates /tmp/a/apple, regardless of whether `/tmp` and /tmp/a exist.
                                                                                                                                                                                                      +fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
                                                                                                                                                                                                      +  if (err) throw err;
                                                                                                                                                                                                      +});

                                                                                                                                                                                                      On Windows, using fs.mkdir() on the root directory even with recursion will result in an error:

                                                                                                                                                                                                      -
                                                                                                                                                                                                      fs.mkdir('/', { recursive: true }, (err) => {
                                                                                                                                                                                                      -  // => [Error: EPERM: operation not permitted, mkdir 'C:\']
                                                                                                                                                                                                      -});
                                                                                                                                                                                                      -
                                                                                                                                                                                                      +
                                                                                                                                                                                                      fs.mkdir('/', { recursive: true }, (err) => {
                                                                                                                                                                                                      +  // => [Error: EPERM: operation not permitted, mkdir 'C:\']
                                                                                                                                                                                                      +});

                                                                                                                                                                                                      See also: mkdir(2).

                                                                                                                                                                                                      fs.mkdirSync(path[, options])#

                                                                                                                                                                                                      • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                      • -
                                                                                                                                                                                                      • -

                                                                                                                                                                                                        options <Object> | <integer>

                                                                                                                                                                                                        +
                                                                                                                                                                                                      • options <Object> | <integer>
                                                                                                                                                                                                        • recursive <boolean> Default: false
                                                                                                                                                                                                        • mode <string> | <integer> Not supported on Windows. Default: 0o777.
                                                                                                                                                                                                        • @@ -32795,14 +31666,12 @@
                                                                                                                                                                                                          • prefix <string>
                                                                                                                                                                                                          • -
                                                                                                                                                                                                          • -

                                                                                                                                                                                                            options <string> | <Object>

                                                                                                                                                                                                            +
                                                                                                                                                                                                          • options <string> | <Object>
                                                                                                                                                                                                          • -
                                                                                                                                                                                                          • -

                                                                                                                                                                                                            callback <Function>

                                                                                                                                                                                                            +
                                                                                                                                                                                                          • callback <Function>
                                                                                                                                                                                                            • err <Error>
                                                                                                                                                                                                            • directory <string>
                                                                                                                                                                                                            • @@ -32819,47 +31688,44 @@ parameter.

                                                                                                                                                                                                              The optional options argument can be a string specifying an encoding, or an object with an encoding property specifying the character encoding to use.

                                                                                                                                                                                                              -
                                                                                                                                                                                                              fs.mkdtemp(path.join(os.tmpdir(), 'foo-'), (err, directory) => {
                                                                                                                                                                                                              -  if (err) throw err;
                                                                                                                                                                                                              -  console.log(directory);
                                                                                                                                                                                                              -  // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2
                                                                                                                                                                                                              -});
                                                                                                                                                                                                              -
                                                                                                                                                                                                              +
                                                                                                                                                                                                              fs.mkdtemp(path.join(os.tmpdir(), 'foo-'), (err, directory) => {
                                                                                                                                                                                                              +  if (err) throw err;
                                                                                                                                                                                                              +  console.log(directory);
                                                                                                                                                                                                              +  // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2
                                                                                                                                                                                                              +});

                                                                                                                                                                                                              The fs.mkdtemp() method will append the six randomly selected characters directly to the prefix string. For instance, given a directory /tmp, if the intention is to create a temporary directory within /tmp, the prefix must end with a trailing platform-specific path separator (require('path').sep).

                                                                                                                                                                                                              -
                                                                                                                                                                                                              // The parent directory for the new temporary directory
                                                                                                                                                                                                              -const tmpDir = os.tmpdir();
                                                                                                                                                                                                              +
                                                                                                                                                                                                              // The parent directory for the new temporary directory
                                                                                                                                                                                                              +const tmpDir = os.tmpdir();
                                                                                                                                                                                                               
                                                                                                                                                                                                              -// This method is *INCORRECT*:
                                                                                                                                                                                                              -fs.mkdtemp(tmpDir, (err, directory) => {
                                                                                                                                                                                                              -  if (err) throw err;
                                                                                                                                                                                                              -  console.log(directory);
                                                                                                                                                                                                              -  // Will print something similar to `/tmpabc123`.
                                                                                                                                                                                                              -  // A new temporary directory is created at the file system root
                                                                                                                                                                                                              -  // rather than *within* the /tmp directory.
                                                                                                                                                                                                              -});
                                                                                                                                                                                                              -
                                                                                                                                                                                                              -// This method is *CORRECT*:
                                                                                                                                                                                                              -const { sep } = require('path');
                                                                                                                                                                                                              -fs.mkdtemp(`${tmpDir}${sep}`, (err, directory) => {
                                                                                                                                                                                                              -  if (err) throw err;
                                                                                                                                                                                                              -  console.log(directory);
                                                                                                                                                                                                              -  // Will print something similar to `/tmp/abc123`.
                                                                                                                                                                                                              -  // A new temporary directory is created within
                                                                                                                                                                                                              -  // the /tmp directory.
                                                                                                                                                                                                              -});
                                                                                                                                                                                                              -
                                                                                                                                                                                                              +// This method is *INCORRECT*: +fs.mkdtemp(tmpDir, (err, directory) => { + if (err) throw err; + console.log(directory); + // Will print something similar to `/tmpabc123`. + // A new temporary directory is created at the file system root + // rather than *within* the /tmp directory. +}); + +// This method is *CORRECT*: +const { sep } = require('path'); +fs.mkdtemp(`${tmpDir}${sep}`, (err, directory) => { + if (err) throw err; + console.log(directory); + // Will print something similar to `/tmp/abc123`. + // A new temporary directory is created within + // the /tmp directory. +});

                                                                                                                                                                                                              fs.mkdtempSync(prefix[, options])#

                                                                                                                                                                                                              • prefix <string>
                                                                                                                                                                                                              • -
                                                                                                                                                                                                              • -

                                                                                                                                                                                                                options <string> | <Object>

                                                                                                                                                                                                                +
                                                                                                                                                                                                              • options <string> | <Object> @@ -32892,8 +31758,7 @@
                                                                                                                                                                                                              • flags <string> | <number> See support of file system flags. Default: 'r'.
                                                                                                                                                                                                              • mode <string> | <integer> Default: 0o666 (readable and writable)
                                                                                                                                                                                                              • -
                                                                                                                                                                                                              • -

                                                                                                                                                                                                                callback <Function>

                                                                                                                                                                                                                +
                                                                                                                                                                                                              • callback <Function>
                                                                                                                                                                                                                • err <Error>
                                                                                                                                                                                                                • fd <integer>
                                                                                                                                                                                                                • @@ -32925,8 +31790,7 @@
                                                                                                                                                                                                                  • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                    options <Object>

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                  • options <Object>
                                                                                                                                                                                                                    • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                    • bufferSize <number> Number of directory entries that are buffered @@ -32934,8 +31798,7 @@ performance but higher memory usage. Default: 32
                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                    callback <Function>

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                  • callback <Function>
                                                                                                                                                                                                                    • err <Error>
                                                                                                                                                                                                                    • dir <fs.Dir>
                                                                                                                                                                                                                    • @@ -32961,8 +31824,7 @@
                                                                                                                                                                                                                      • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                        options <Object>

                                                                                                                                                                                                                        +
                                                                                                                                                                                                                      • options <Object>
                                                                                                                                                                                                                        • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                        • bufferSize <number> Number of directory entries that are buffered @@ -33025,8 +31887,7 @@
                                                                                                                                                                                                                        • offset <integer>
                                                                                                                                                                                                                        • length <integer>
                                                                                                                                                                                                                        • position <integer>
                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                          +
                                                                                                                                                                                                                        • callback <Function>
                                                                                                                                                                                                                          • err <Error>
                                                                                                                                                                                                                          • bytesRead <integer>
                                                                                                                                                                                                                          • @@ -33059,8 +31920,7 @@
                                                                                                                                                                                                                            • fd <integer>
                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                              options <Object>

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                            • options <Object>
                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                            • callback <Function>
                                                                                                                                                                                                                              • err <Error>
                                                                                                                                                                                                                              • bytesRead <integer>
                                                                                                                                                                                                                              • @@ -33101,15 +31960,13 @@
                                                                                                                                                                                                                                • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                  options <string> | <Object>

                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                • options <string> | <Object>
                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                  callback <Function>

                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                • callback <Function>
                                                                                                                                                                                                                                  • err <Error>
                                                                                                                                                                                                                                  • files <string[]> | <Buffer[]> | <fs.Dirent[]>
                                                                                                                                                                                                                                  • @@ -33141,8 +31998,7 @@
                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                      options <string> | <Object>

                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                    • options <string> | <Object>
                                                                                                                                                                                                                                      • encoding <string> Default: 'utf8'
                                                                                                                                                                                                                                      • withFileTypes <boolean> Default: false
                                                                                                                                                                                                                                      • @@ -33179,15 +32035,13 @@
                                                                                                                                                                                                                                        • path <string> | <Buffer> | <URL> | <integer> filename or file descriptor
                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                          options <Object> | <string>

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                        • options <Object> | <string>
                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                        • callback <Function>

                                                                                                                                                                                                                                          Asynchronously reads the entire contents of a file.

                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          fs.readFile('/etc/passwd', (err, data) => {
                                                                                                                                                                                                                                          -  if (err) throw err;
                                                                                                                                                                                                                                          -  console.log(data);
                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          fs.readFile('/etc/passwd', (err, data) => {
                                                                                                                                                                                                                                          +  if (err) throw err;
                                                                                                                                                                                                                                          +  console.log(data);
                                                                                                                                                                                                                                          +});

                                                                                                                                                                                                                                          The callback is passed two arguments (err, data), where data is the contents of the file.

                                                                                                                                                                                                                                          If no encoding is specified, then the raw buffer is returned.

                                                                                                                                                                                                                                          If options is a string, then it specifies the encoding:

                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          fs.readFile('/etc/passwd', 'utf8', callback);
                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          fs.readFile('/etc/passwd', 'utf8', callback);

                                                                                                                                                                                                                                          When the path is a directory, the behavior of fs.readFile() and fs.readFileSync() is platform-specific. On macOS, Linux, and Windows, an error will be returned. On FreeBSD, a representation of the directory's contents will be returned.

                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          // macOS, Linux, and Windows
                                                                                                                                                                                                                                          -fs.readFile('<directory>', (err, data) => {
                                                                                                                                                                                                                                          -  // => [Error: EISDIR: illegal operation on a directory, read <directory>]
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          // macOS, Linux, and Windows
                                                                                                                                                                                                                                          +fs.readFile('<directory>', (err, data) => {
                                                                                                                                                                                                                                          +  // => [Error: EISDIR: illegal operation on a directory, read <directory>]
                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                          -//  FreeBSD
                                                                                                                                                                                                                                          -fs.readFile('<directory>', (err, data) => {
                                                                                                                                                                                                                                          -  // => null, <data>
                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          +// FreeBSD +fs.readFile('<directory>', (err, data) => { + // => null, <data> +});

                                                                                                                                                                                                                                          The fs.readFile() function buffers the entire file. To minimize memory costs, when possible prefer streaming via fs.createReadStream().

                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                          File Descriptors#

                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          File descriptors#

                                                                                                                                                                                                                                          1. Any specified file descriptor has to support reading.
                                                                                                                                                                                                                                          2. If a file descriptor is specified as the path, it will not be closed @@ -33248,8 +32099,7 @@
                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL> | <integer> filename or file descriptor
                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                              options <Object> | <string>

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                            • options <Object> | <string>
                                                                                                                                                                                                                                              • encoding <string> | <null> Default: null
                                                                                                                                                                                                                                              • flag <string> See support of file system flags. Default: 'r'.
                                                                                                                                                                                                                                              • @@ -33264,13 +32114,12 @@ string. Otherwise it returns a buffer.

                                                                                                                                                                                                                                                Similar to fs.readFile(), when the path is a directory, the behavior of fs.readFileSync() is platform-specific.

                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                // macOS, Linux, and Windows
                                                                                                                                                                                                                                                -fs.readFileSync('<directory>');
                                                                                                                                                                                                                                                -// => [Error: EISDIR: illegal operation on a directory, read <directory>]
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                // macOS, Linux, and Windows
                                                                                                                                                                                                                                                +fs.readFileSync('<directory>');
                                                                                                                                                                                                                                                +// => [Error: EISDIR: illegal operation on a directory, read <directory>]
                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                -//  FreeBSD
                                                                                                                                                                                                                                                -fs.readFileSync('<directory>'); // => <data>
                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                +// FreeBSD +fs.readFileSync('<directory>'); // => <data>

                                                                                                                                                                                                                                                fs.readlink(path[, options], callback)#

                                                                                                                                                                                                                                                • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                  options <string> | <Object>

                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                • options <string> | <Object>
                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                  callback <Function>

                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                • callback <Function>
                                                                                                                                                                                                                                                  • err <Error>
                                                                                                                                                                                                                                                  • linkString <string> | <Buffer>
                                                                                                                                                                                                                                                  • @@ -33322,8 +32169,7 @@
                                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                      options <string> | <Object>

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                    • options <string> | <Object> @@ -33375,8 +32221,7 @@
                                                                                                                                                                                                                                                      • fd <integer>
                                                                                                                                                                                                                                                      • buffer <Buffer> | <TypedArray> | <DataView>
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        options <Object>

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      • options <Object>
                                                                                                                                                                                                                                                        • offset <integer> Default: 0
                                                                                                                                                                                                                                                        • length <integer> Default: buffer.length
                                                                                                                                                                                                                                                        • @@ -33398,8 +32243,7 @@
                                                                                                                                                                                                                                                        • fd <integer>
                                                                                                                                                                                                                                                        • buffers <ArrayBufferView[]>
                                                                                                                                                                                                                                                        • position <integer>
                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                        • callback <Function>
                                                                                                                                                                                                                                                          • err <Error>
                                                                                                                                                                                                                                                          • bytesRead <integer>
                                                                                                                                                                                                                                                          • @@ -33414,6 +32258,8 @@ from the current position.

                                                                                                                                                                                                                                                            The callback will be given three arguments: err, bytesRead, and buffers. bytesRead is how many bytes were read from the file.

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            If this method is invoked as its util.promisify()ed version, it returns +a Promise for an Object with bytesRead and buffers properties.

                                                                                                                                                                                                                                                            fs.readvSync(fd, buffers[, position])#

                                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                              options <string> | <Object>

                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                            • options <string> | <Object>
                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                            • callback <Function>
                                                                                                                                                                                                                                                              • err <Error>
                                                                                                                                                                                                                                                              • resolvedPath <string> | <Buffer>
                                                                                                                                                                                                                                                              • @@ -33493,14 +32337,12 @@
                                                                                                                                                                                                                                                                • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                  options <string> | <Object>

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                • options <string> | <Object>
                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                  callback <Function>

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                • callback <Function>
                                                                                                                                                                                                                                                                  • err <Error>
                                                                                                                                                                                                                                                                  • resolvedPath <string> | <Buffer>
                                                                                                                                                                                                                                                                  • @@ -33537,8 +32379,7 @@
                                                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                      options <string> | <Object>

                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                    • options <string> | <Object> @@ -33554,8 +32395,7 @@
                                                                                                                                                                                                                                                                      • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                        options <string> | <Object>

                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                      • options <string> | <Object> @@ -33590,8 +32430,7 @@
                                                                                                                                                                                                                                                                        • oldPath <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                        • newPath <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                        • callback <Function> @@ -33603,11 +32442,10 @@ be raised instead. No arguments other than a possible exception are given to the completion callback.

                                                                                                                                                                                                                                                                          See also: rename(2).

                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          fs.rename('oldFile.txt', 'newFile.txt', (err) => {
                                                                                                                                                                                                                                                                          -  if (err) throw err;
                                                                                                                                                                                                                                                                          -  console.log('Rename complete!');
                                                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          fs.rename('oldFile.txt', 'newFile.txt', (err) => {
                                                                                                                                                                                                                                                                          +  if (err) throw err;
                                                                                                                                                                                                                                                                          +  console.log('Rename complete!');
                                                                                                                                                                                                                                                                          +});

                                                                                                                                                                                                                                                                          fs.renameSync(oldPath, newPath)#

                                                                                                                                                                                                                                                                          • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                            options <Object>

                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                          • options <Object>
                                                                                                                                                                                                                                                                            • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                            callback <Function>

                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                          • callback <Function>
                                                                                                                                                                                                                                                                            • err <Error>
                                                                                                                                                                                                                                                                            • stats <fs.Stats>
                                                                                                                                                                                                                                                                            • @@ -33759,22 +32592,20 @@

                                                                                                                                                                                                                                                                              To check if a file exists without manipulating it afterwards, fs.access() is recommended.

                                                                                                                                                                                                                                                                              For example, given the following directory structure:

                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                              - txtDir
                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                              - txtDir
                                                                                                                                                                                                                                                                               -- file.txt
                                                                                                                                                                                                                                                                              -- app.js
                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                              +- app.js

                                                                                                                                                                                                                                                                              The next program will check for the stats of the given paths:

                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                              const fs = require('fs');
                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                              const fs = require('fs');
                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                              -const pathsToCheck = ['./txtDir', './txtDir/file.txt'];
                                                                                                                                                                                                                                                                              +const pathsToCheck = ['./txtDir', './txtDir/file.txt'];
                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                              -for (let i = 0; i < pathsToCheck.length; i++) {
                                                                                                                                                                                                                                                                              -  fs.stat(pathsToCheck[i], function(err, stats) {
                                                                                                                                                                                                                                                                              -    console.log(stats.isDirectory());
                                                                                                                                                                                                                                                                              -    console.log(stats);
                                                                                                                                                                                                                                                                              +for (let i = 0; i < pathsToCheck.length; i++) {
                                                                                                                                                                                                                                                                              +  fs.stat(pathsToCheck[i], function(err, stats) {
                                                                                                                                                                                                                                                                              +    console.log(stats.isDirectory());
                                                                                                                                                                                                                                                                              +    console.log(stats);
                                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                              -}
                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                              +}

                                                                                                                                                                                                                                                                              The resulting output will resemble:

                                                                                                                                                                                                                                                                              true
                                                                                                                                                                                                                                                                               Stats {
                                                                                                                                                                                                                                                                              @@ -33817,8 +32648,7 @@
                                                                                                                                                                                                                                                                                 mtime: 2019-06-22T03:36:54.584Z,
                                                                                                                                                                                                                                                                                 ctime: 2019-06-22T03:36:54.584Z,
                                                                                                                                                                                                                                                                                 birthtime: 2019-06-22T03:26:47.711Z
                                                                                                                                                                                                                                                                              -}
                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                              +}

                                                                                                                                                                                                                                                                              fs.statSync(path[, options])#

                                                                                                                                                                                                                                                                              • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                options <Object>

                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                              • options <Object>

                                                                                                                                                                                                                                                                                Asynchronous symlink(2) which creates the link called path pointing to -target. No arguments other than a possible exception are given to the +target. No arguments other than a possible exception are given to the completion callback.

                                                                                                                                                                                                                                                                                The type argument is only available on Windows and ignored on other platforms. It can be set to 'dir', 'file', or 'junction'. If the type argument is not set, Node.js will autodetect target type and use 'file' or 'dir'. If the target does not exist, 'file' will be used. Windows junction points -require the destination path to be absolute. When using 'junction', the +require the destination path to be absolute. When using 'junction', the target argument will automatically be normalized to absolute path.

                                                                                                                                                                                                                                                                                Relative targets are relative to the link’s parent directory.

                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                fs.symlink('./mew', './example/mewtwo', callback);
                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                fs.symlink('./mew', './example/mewtwo', callback);

                                                                                                                                                                                                                                                                                The above example creates a symbolic link mewtwo in the example which points to mew in the same directory:

                                                                                                                                                                                                                                                                                $ tree example/
                                                                                                                                                                                                                                                                                 example/
                                                                                                                                                                                                                                                                                 ├── mew
                                                                                                                                                                                                                                                                                -└── mewtwo -> ./mew
                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                +└── mewtwo -> ./mew

                                                                                                                                                                                                                                                                                fs.symlinkSync(target, path[, type])#

                                                                                                                                                                                                                                                                                Asynchronously removes a file or symbolic link. No arguments other than a possible exception are given to the completion callback.

                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                // Assuming that 'path/file.txt' is a regular file.
                                                                                                                                                                                                                                                                                -fs.unlink('path/file.txt', (err) => {
                                                                                                                                                                                                                                                                                -  if (err) throw err;
                                                                                                                                                                                                                                                                                -  console.log('path/file.txt was deleted');
                                                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                // Assuming that 'path/file.txt' is a regular file.
                                                                                                                                                                                                                                                                                +fs.unlink('path/file.txt', (err) => {
                                                                                                                                                                                                                                                                                +  if (err) throw err;
                                                                                                                                                                                                                                                                                +  console.log('path/file.txt was deleted');
                                                                                                                                                                                                                                                                                +});

                                                                                                                                                                                                                                                                                fs.unlink() will not work on a directory, empty or otherwise. To remove a directory, use fs.rmdir().

                                                                                                                                                                                                                                                                                See also: unlink(2).

                                                                                                                                                                                                                                                                                @@ -34045,8 +32868,7 @@
                                                                                                                                                                                                                                                                              • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                              • atime <number> | <string> | <Date>
                                                                                                                                                                                                                                                                              • mtime <number> | <string> | <Date>
                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                callback <Function>

                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                              • callback <Function> @@ -34100,8 +32922,7 @@
                                                                                                                                                                                                                                                                                • filename <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                  options <string> | <Object>

                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                • options <string> | <Object>
                                                                                                                                                                                                                                                                                  • persistent <boolean> Indicates whether the process should continue to run as long as files are being watched. Default: true.
                                                                                                                                                                                                                                                                                  • @@ -34113,8 +32934,7 @@ filename passed to the listener. Default: 'utf8'.
                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                  listener <Function> | <undefined> Default: undefined

                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                • listener <Function> | <undefined> Default: undefined
                                                                                                                                                                                                                                                                                  • eventType <string>
                                                                                                                                                                                                                                                                                  • filename <string> | <Buffer>
                                                                                                                                                                                                                                                                                  • @@ -34146,13 +32966,14 @@

                                                                                                                                                                                                                                                                                    This feature depends on the underlying operating system providing a way to be notified of filesystem changes.

                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                    • On Linux systems, this uses inotify(7).
                                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                                    • On Linux systems, this uses inotify(7).
                                                                                                                                                                                                                                                                                    • On BSD systems, this uses kqueue(2).
                                                                                                                                                                                                                                                                                    • On macOS, this uses kqueue(2) for files and FSEvents for directories.
                                                                                                                                                                                                                                                                                    • On SunOS systems (including Solaris and SmartOS), this uses event ports.
                                                                                                                                                                                                                                                                                    • On Windows systems, this feature depends on ReadDirectoryChangesW.
                                                                                                                                                                                                                                                                                    • On Aix systems, this feature depends on AHAFS, which must be enabled.
                                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                                    • On IBM i systems, this feature is not supported.

                                                                                                                                                                                                                                                                                    If the underlying functionality is not available for some reason, then fs.watch() will not be able to function and may thrown an exception. @@ -34171,21 +32992,20 @@

                                                                                                                                                                                                                                                                                    AIX files retain the same inode for the lifetime of a file. Saving and closing a watched file on AIX will result in two notifications (one for adding new content, and one for truncation).

                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                    Filename Argument#

                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                    Filename argument#

                                                                                                                                                                                                                                                                                    Providing filename argument in the callback is only supported on Linux, macOS, Windows, and AIX. Even on supported platforms, filename is not always guaranteed to be provided. Therefore, don't assume that filename argument is always provided in the callback, and have some fallback logic if it is null.

                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                    fs.watch('somedir', (eventType, filename) => {
                                                                                                                                                                                                                                                                                    -  console.log(`event type is: ${eventType}`);
                                                                                                                                                                                                                                                                                    -  if (filename) {
                                                                                                                                                                                                                                                                                    -    console.log(`filename provided: ${filename}`);
                                                                                                                                                                                                                                                                                    -  } else {
                                                                                                                                                                                                                                                                                    -    console.log('filename not provided');
                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                    fs.watch('somedir', (eventType, filename) => {
                                                                                                                                                                                                                                                                                    +  console.log(`event type is: ${eventType}`);
                                                                                                                                                                                                                                                                                    +  if (filename) {
                                                                                                                                                                                                                                                                                    +    console.log(`filename provided: ${filename}`);
                                                                                                                                                                                                                                                                                    +  } else {
                                                                                                                                                                                                                                                                                    +    console.log('filename not provided');
                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                    -});
                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                    +});

                                                                                                                                                                                                                                                                                    fs.watchFile(filename[, options], listener)#

                                                                                                                                                                                                                                                                                    Watch for changes on filename. The callback listener will be called each time the file is accessed.

                                                                                                                                                                                                                                                                                    @@ -34227,11 +33046,10 @@ target should be polled in milliseconds.

                                                                                                                                                                                                                                                                                    The listener gets two arguments the current stat object and the previous stat object:

                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                    fs.watchFile('message.text', (curr, prev) => {
                                                                                                                                                                                                                                                                                    -  console.log(`the current mtime is: ${curr.mtime}`);
                                                                                                                                                                                                                                                                                    -  console.log(`the previous mtime was: ${prev.mtime}`);
                                                                                                                                                                                                                                                                                    -});
                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                    fs.watchFile('message.text', (curr, prev) => {
                                                                                                                                                                                                                                                                                    +  console.log(`the current mtime is: ${curr.mtime}`);
                                                                                                                                                                                                                                                                                    +  console.log(`the previous mtime was: ${prev.mtime}`);
                                                                                                                                                                                                                                                                                    +});

                                                                                                                                                                                                                                                                                    These stat objects are instances of fs.Stat. If the bigint option is true, the numeric values in these objects are specified as BigInts.

                                                                                                                                                                                                                                                                                    To be notified when the file was modified, not just accessed, it is necessary @@ -34245,9 +33063,9 @@ fs.unwatchFile. fs.watch should be used instead of fs.watchFile and fs.unwatchFile when possible.

                                                                                                                                                                                                                                                                                    When a file being watched by fs.watchFile() disappears and reappears, -then the previousStat reported in the second callback event (the file's -reappearance) will be the same as the previousStat of the first callback -event (its disappearance).

                                                                                                                                                                                                                                                                                    +then the contents of previous in the second callback event (the file's +reappearance) will be the same as the contents of previous in the first +callback event (its disappearance).

                                                                                                                                                                                                                                                                                    This happens when:

                                                                                                                                                                                                                                                                                    • the file is deleted, followed by a restore
                                                                                                                                                                                                                                                                                    • @@ -34279,8 +33097,7 @@
                                                                                                                                                                                                                                                                                    • offset <integer>
                                                                                                                                                                                                                                                                                    • length <integer>
                                                                                                                                                                                                                                                                                    • position <integer>
                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                      callback <Function>

                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                    • callback <Function>
                                                                                                                                                                                                                                                                                      • err <Error>
                                                                                                                                                                                                                                                                                      • bytesWritten <integer>
                                                                                                                                                                                                                                                                                      • @@ -34325,8 +33142,7 @@
                                                                                                                                                                                                                                                                                      • string <string>
                                                                                                                                                                                                                                                                                      • position <integer>
                                                                                                                                                                                                                                                                                      • encoding <string> Default: 'utf8'
                                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                        callback <Function>

                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                      • callback <Function>
                                                                                                                                                                                                                                                                                        • err <Error>
                                                                                                                                                                                                                                                                                        • written <integer>
                                                                                                                                                                                                                                                                                        • @@ -34343,7 +33159,7 @@

                                                                                                                                                                                                                                                                                          The callback will receive the arguments (err, written, string) where written specifies how many bytes the passed string required to be written. Bytes written is not necessarily the same as string characters written. See -Buffer.byteLength.

                                                                                                                                                                                                                                                                                          +Buffer.byteLength.

                                                                                                                                                                                                                                                                                          It is unsafe to use fs.write() multiple times on the same file without waiting for the callback. For this scenario, fs.createWriteStream() is recommended.

                                                                                                                                                                                                                                                                                          @@ -34379,16 +33195,14 @@
                                                                                                                                                                                                                                                                                          • file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
                                                                                                                                                                                                                                                                                          • data <string> | <Buffer> | <TypedArray> | <DataView>
                                                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                            options <Object> | <string>

                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                          • options <Object> | <string>
                                                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                            callback <Function>

                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                          • callback <Function> @@ -34400,23 +33214,20 @@ fs.write() directly (which is recommended). See the notes below on using a file descriptor.

                                                                                                                                                                                                                                                                                            The encoding option is ignored if data is a buffer.

                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                            const data = new Uint8Array(Buffer.from('Hello Node.js'));
                                                                                                                                                                                                                                                                                            -fs.writeFile('message.txt', data, (err) => {
                                                                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                                                                            -  console.log('The file has been saved!');
                                                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                            const data = new Uint8Array(Buffer.from('Hello Node.js'));
                                                                                                                                                                                                                                                                                            +fs.writeFile('message.txt', data, (err) => {
                                                                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                                                                            +  console.log('The file has been saved!');
                                                                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                                                                            If options is a string, then it specifies the encoding:

                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                            fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);
                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                            fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);

                                                                                                                                                                                                                                                                                            It is unsafe to use fs.writeFile() multiple times on the same file without waiting for the callback. For this scenario, fs.createWriteStream() is recommended.

                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                            Using fs.writeFile() with File Descriptors#

                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                            Using fs.writeFile() with file descriptors#

                                                                                                                                                                                                                                                                                            When file is a file descriptor, the behavior is almost identical to directly calling fs.write() like:

                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                            fs.write(fd, Buffer.from(data, options.encoding), callback);
                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                            fs.write(fd, Buffer.from(data, options.encoding), callback);

                                                                                                                                                                                                                                                                                            The difference from directly calling fs.write() is that under some unusual conditions, fs.write() may write only part of the buffer and will need to be retried to write the remaining data, whereas fs.writeFile() will retry until @@ -34428,7 +33239,7 @@

                                                                                                                                                                                                                                                                                            For example, if fs.writeFile() is called twice in a row, first to write the string 'Hello', then to write the string ', World', the file would contain 'Hello, World', and might contain some of the file's original data (depending -on the size of the original file, and the position of the file descriptor). If +on the size of the original file, and the position of the file descriptor). If a file name had been used instead of a descriptor, the file would be guaranteed to contain only ', World'.

                                                                                                                                                                                                                                                                                            fs.writeFileSync(file, data[, options])#

                                                                                                                                                                                                                                                                                            @@ -34450,8 +33261,7 @@
                                                                                                                                                                                                                                                                                            • file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
                                                                                                                                                                                                                                                                                            • data <string> | <Buffer> | <TypedArray> | <DataView>
                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                              options <Object> | <string>

                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                            • options <Object> | <string>
                                                                                                                                                                                                                                                                                              • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                                              • mode <integer> Default: 0o666
                                                                                                                                                                                                                                                                                              • @@ -34517,8 +33327,7 @@
                                                                                                                                                                                                                                                                                              • fd <integer>
                                                                                                                                                                                                                                                                                              • buffers <ArrayBufferView[]>
                                                                                                                                                                                                                                                                                              • position <integer>
                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                callback <Function>

                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                              • callback <Function>
                                                                                                                                                                                                                                                                                                • err <Error>
                                                                                                                                                                                                                                                                                                • bytesWritten <integer>
                                                                                                                                                                                                                                                                                                • @@ -34556,7 +33365,7 @@

                                                                                                                                                                                                                                                                                                  The fs.promises API provides an alternative set of asynchronous file system methods that return Promise objects rather than using callbacks. The API is accessible via require('fs').promises.

                                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                                  class: FileHandle#

                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                  Class: FileHandle#

                                                                                                                                                                                                                                                                                                  @@ -34582,8 +33391,7 @@

                                                                                                                                                                                                                                                                                                  Closes the file descriptor.

                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                  const fsPromises = require('fs').promises;
                                                                                                                                                                                                                                                                                                  -async function openAndClose() {
                                                                                                                                                                                                                                                                                                  -  let filehandle;
                                                                                                                                                                                                                                                                                                  -  try {
                                                                                                                                                                                                                                                                                                  -    filehandle = await fsPromises.open('thefile.txt', 'r');
                                                                                                                                                                                                                                                                                                  -  } finally {
                                                                                                                                                                                                                                                                                                  -    if (filehandle !== undefined)
                                                                                                                                                                                                                                                                                                  -      await filehandle.close();
                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                  const fsPromises = require('fs').promises;
                                                                                                                                                                                                                                                                                                  +async function openAndClose() {
                                                                                                                                                                                                                                                                                                  +  let filehandle;
                                                                                                                                                                                                                                                                                                  +  try {
                                                                                                                                                                                                                                                                                                  +    filehandle = await fsPromises.open('thefile.txt', 'r');
                                                                                                                                                                                                                                                                                                  +  } finally {
                                                                                                                                                                                                                                                                                                  +    if (filehandle !== undefined)
                                                                                                                                                                                                                                                                                                  +      await filehandle.close();
                                                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                                                  -}
                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                  +}

                                                                                                                                                                                                                                                                                                  filehandle.datasync()#

                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                                                    options <Object>

                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                  • options <Object>
                                                                                                                                                                                                                                                                                                    • buffer <Buffer> | <Uint8Array> Default: Buffer.alloc(16384)
                                                                                                                                                                                                                                                                                                    • offset <integer> Default: 0
                                                                                                                                                                                                                                                                                                    • @@ -34695,8 +33501,7 @@ Added in: v10.0.0
                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                        options <Object> | <string>

                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                      • options <Object> | <string> @@ -34742,8 +33547,7 @@
                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                          options <Object>

                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                        • options <Object>
                                                                                                                                                                                                                                                                                                          • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                                                                                          • @@ -34774,52 +33578,50 @@ retained in the file.

                                                                                                                                                                                                                                                                                                            For example, the following program retains only the first four bytes of the file:

                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                            -const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                            +const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                            -console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                                                                                            -// Prints: Node.js
                                                                                                                                                                                                                                                                                                            +console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                                                                                            +// Prints: Node.js
                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                            -async function doTruncate() {
                                                                                                                                                                                                                                                                                                            -  let filehandle = null;
                                                                                                                                                                                                                                                                                                            -  try {
                                                                                                                                                                                                                                                                                                            -    filehandle = await fsPromises.open('temp.txt', 'r+');
                                                                                                                                                                                                                                                                                                            -    await filehandle.truncate(4);
                                                                                                                                                                                                                                                                                                            -  } finally {
                                                                                                                                                                                                                                                                                                            -    if (filehandle) {
                                                                                                                                                                                                                                                                                                            -      // Close the file if it is opened.
                                                                                                                                                                                                                                                                                                            -      await filehandle.close();
                                                                                                                                                                                                                                                                                                            +async function doTruncate() {
                                                                                                                                                                                                                                                                                                            +  let filehandle = null;
                                                                                                                                                                                                                                                                                                            +  try {
                                                                                                                                                                                                                                                                                                            +    filehandle = await fsPromises.open('temp.txt', 'r+');
                                                                                                                                                                                                                                                                                                            +    await filehandle.truncate(4);
                                                                                                                                                                                                                                                                                                            +  } finally {
                                                                                                                                                                                                                                                                                                            +    if (filehandle) {
                                                                                                                                                                                                                                                                                                            +      // Close the file if it is opened.
                                                                                                                                                                                                                                                                                                            +      await filehandle.close();
                                                                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                            -  console.log(fs.readFileSync('temp.txt', 'utf8'));  // Prints: Node
                                                                                                                                                                                                                                                                                                            +  console.log(fs.readFileSync('temp.txt', 'utf8'));  // Prints: Node
                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                            -doTruncate().catch(console.error);
                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                            +doTruncate().catch(console.error);

                                                                                                                                                                                                                                                                                                            If the file previously was shorter than len bytes, it is extended, and the extended part is filled with null bytes ('\0'):

                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                            -const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                            +const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                            -console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                                                                                            -// Prints: Node.js
                                                                                                                                                                                                                                                                                                            +console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                                                                                            +// Prints: Node.js
                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                            -async function doTruncate() {
                                                                                                                                                                                                                                                                                                            -  let filehandle = null;
                                                                                                                                                                                                                                                                                                            -  try {
                                                                                                                                                                                                                                                                                                            -    filehandle = await fsPromises.open('temp.txt', 'r+');
                                                                                                                                                                                                                                                                                                            -    await filehandle.truncate(10);
                                                                                                                                                                                                                                                                                                            -  } finally {
                                                                                                                                                                                                                                                                                                            -    if (filehandle) {
                                                                                                                                                                                                                                                                                                            -      // Close the file if it is opened.
                                                                                                                                                                                                                                                                                                            -      await filehandle.close();
                                                                                                                                                                                                                                                                                                            +async function doTruncate() {
                                                                                                                                                                                                                                                                                                            +  let filehandle = null;
                                                                                                                                                                                                                                                                                                            +  try {
                                                                                                                                                                                                                                                                                                            +    filehandle = await fsPromises.open('temp.txt', 'r+');
                                                                                                                                                                                                                                                                                                            +    await filehandle.truncate(10);
                                                                                                                                                                                                                                                                                                            +  } finally {
                                                                                                                                                                                                                                                                                                            +    if (filehandle) {
                                                                                                                                                                                                                                                                                                            +      // Close the file if it is opened.
                                                                                                                                                                                                                                                                                                            +      await filehandle.close();
                                                                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                            -  console.log(fs.readFileSync('temp.txt', 'utf8'));  // Prints Node.js\0\0\0
                                                                                                                                                                                                                                                                                                            +  console.log(fs.readFileSync('temp.txt', 'utf8'));  // Prints Node.js\0\0\0
                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                            -doTruncate().catch(console.error);
                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                            +doTruncate().catch(console.error);

                                                                                                                                                                                                                                                                                                            The last three bytes are null bytes ('\0'), to compensate the over-truncation.

                                                                                                                                                                                                                                                                                                            filehandle.utimes(atime, mtime)#

                                                                                                                                                                                                                                                                                                            Tests a user's permissions for the file or directory specified by path. The mode argument is an optional integer that specifies the accessibility -checks to be performed. Check File Access Constants for possible values +checks to be performed. Check File access constants for possible values of mode. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                                                                            If the accessibility check is successful, the Promise is resolved with no value. If any of the accessibility checks fail, the Promise is rejected with an Error object. The following example checks if the file /etc/passwd can be read and written by the current process.

                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                            -const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                            +const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                            -fsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK)
                                                                                                                                                                                                                                                                                                            -  .then(() => console.log('can access'))
                                                                                                                                                                                                                                                                                                            -  .catch(() => console.error('cannot access'));
                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                            +fsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK) + .then(() => console.log('can access')) + .catch(() => console.error('cannot access'));

                                                                                                                                                                                                                                                                                                            Using fsPromises.access() to check for the accessibility of a file before calling fsPromises.open() is not recommended. Doing so introduces a race condition, since other processes may change the file's state between the two @@ -34969,8 +33769,7 @@

                                                                                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL> | <FileHandle> filename or FileHandle
                                                                                                                                                                                                                                                                                                            • data <string> | <Buffer>
                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                              options <Object> | <string>

                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                            • options <Object> | <string>
                                                                                                                                                                                                                                                                                                              • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                                                              • mode <integer> Default: 0o666
                                                                                                                                                                                                                                                                                                              • @@ -35010,7 +33809,15 @@ upon success.

                                                                                                                                                                                                                                                                                                                fsPromises.copyFile(src, dest[, flags])#

                                                                                                                                                                                                                                                                                                                • src <string> | <Buffer> | <URL> source filename to copy
                                                                                                                                                                                                                                                                                                                • @@ -35037,23 +33844,21 @@ create a copy-on-write reflink. If the platform does not support copy-on-write, then the operation will fail.
                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                const fsPromises = require('fs').promises;
                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                const fsPromises = require('fs').promises;
                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                -// destination.txt will be created or overwritten by default.
                                                                                                                                                                                                                                                                                                                -fsPromises.copyFile('source.txt', 'destination.txt')
                                                                                                                                                                                                                                                                                                                -  .then(() => console.log('source.txt was copied to destination.txt'))
                                                                                                                                                                                                                                                                                                                -  .catch(() => console.log('The file could not be copied'));
                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                +// destination.txt will be created or overwritten by default. +fsPromises.copyFile('source.txt', 'destination.txt') + .then(() => console.log('source.txt was copied to destination.txt')) + .catch(() => console.log('The file could not be copied'));

                                                                                                                                                                                                                                                                                                                If the third argument is a number, then it specifies flags:

                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                                                                                                                                                -const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                -const { COPYFILE_EXCL } = fs.constants;
                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                -// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
                                                                                                                                                                                                                                                                                                                -fsPromises.copyFile('source.txt', 'destination.txt', COPYFILE_EXCL)
                                                                                                                                                                                                                                                                                                                -  .then(() => console.log('source.txt was copied to destination.txt'))
                                                                                                                                                                                                                                                                                                                -  .catch(() => console.log('The file could not be copied'));
                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                                                                                                                                                +const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                +const { COPYFILE_EXCL } = fs.constants;
                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                +// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
                                                                                                                                                                                                                                                                                                                +fsPromises.copyFile('source.txt', 'destination.txt', COPYFILE_EXCL)
                                                                                                                                                                                                                                                                                                                +  .then(() => console.log('source.txt was copied to destination.txt'))
                                                                                                                                                                                                                                                                                                                +  .catch(() => console.log('The file could not be copied'));

                                                                                                                                                                                                                                                                                                                fsPromises.lchmod(path, mode)#

                                                                                                                                                                                                                                                                                                              Changes the ownership on a symbolic link then resolves the Promise with no arguments upon success.

                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                              fsPromises.lutimes(path, atime, mtime)#

                                                                                                                                                                                                                                                                                                              + + +

                                                                                                                                                                                                                                                                                                              Changes the access and modification times of a file in the same way as +fsPromises.utimes(), with the difference that if the path refers to a +symbolic link, then the link is not dereferenced: instead, the timestamps of +the symbolic link itself are changed.

                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                              Upon success, the Promise is resolved without arguments.

                                                                                                                                                                                                                                                                                                              fsPromises.link(existingPath, newPath)#

                                                                                                                                                                                                                                                                                                              • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                options <Object>

                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                              • options <Object>
                                                                                                                                                                                                                                                                                                                • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                                                                                                • @@ -35126,8 +33945,7 @@
                                                                                                                                                                                                                                                                                                                  • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                                                                    options <Object> | <integer>

                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                  • options <Object> | <integer>
                                                                                                                                                                                                                                                                                                                    • recursive <boolean> Default: false
                                                                                                                                                                                                                                                                                                                    • mode <string> | <integer> Not supported on Windows. Default: 0o777.
                                                                                                                                                                                                                                                                                                                    • @@ -35148,8 +33966,7 @@
                                                                                                                                                                                                                                                                                                                      • prefix <string>
                                                                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                        options <string> | <Object>

                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                      • options <string> | <Object> @@ -35164,9 +33981,8 @@ trailing X characters in prefix with random characters.

                                                                                                                                                                                                                                                                                                                        The optional options argument can be a string specifying an encoding, or an object with an encoding property specifying the character encoding to use.

                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        fsPromises.mkdtemp(path.join(os.tmpdir(), 'foo-'))
                                                                                                                                                                                                                                                                                                                        -  .catch(console.error);
                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                        fsPromises.mkdtemp(path.join(os.tmpdir(), 'foo-'))
                                                                                                                                                                                                                                                                                                                        +  .catch(console.error);

                                                                                                                                                                                                                                                                                                                        The fsPromises.mkdtemp() method will append the six randomly selected characters directly to the prefix string. For instance, given a directory /tmp, if the intention is to create a temporary directory within /tmp, the @@ -35213,8 +34029,7 @@

                                                                                                                                                                                                                                                                                                                        • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                          options <Object>

                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                        • options <Object>
                                                                                                                                                                                                                                                                                                                          • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                          • bufferSize <number> Number of directory entries that are buffered @@ -35230,16 +34045,15 @@

                                                                                                                                                                                                                                                                                                                            The encoding option sets the encoding for the path while opening the directory and subsequent read operations.

                                                                                                                                                                                                                                                                                                                            Example using async iteration:

                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                            -async function print(path) {
                                                                                                                                                                                                                                                                                                                            -  const dir = await fs.promises.opendir(path);
                                                                                                                                                                                                                                                                                                                            -  for await (const dirent of dir) {
                                                                                                                                                                                                                                                                                                                            -    console.log(dirent.name);
                                                                                                                                                                                                                                                                                                                            +async function print(path) {
                                                                                                                                                                                                                                                                                                                            +  const dir = await fs.promises.opendir(path);
                                                                                                                                                                                                                                                                                                                            +  for await (const dirent of dir) {
                                                                                                                                                                                                                                                                                                                            +    console.log(dirent.name);
                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                            -print('./').catch(console.error);
                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                            +print('./').catch(console.error);

                                                                                                                                                                                                                                                                                                                            fsPromises.readdir(path[, options])#

                                                                                                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                              options <string> | <Object>

                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                            • options <string> | <Object>
                                                                                                                                                                                                                                                                                                                              • encoding <string> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                              • withFileTypes <boolean> Default: false
                                                                                                                                                                                                                                                                                                                              • @@ -35271,24 +34084,22 @@ will be passed as Buffer objects.

                                                                                                                                                                                                                                                                                                                                If options.withFileTypes is set to true, the resolved array will contain fs.Dirent objects.

                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                -async function print(path) {
                                                                                                                                                                                                                                                                                                                                -  const files = await fs.promises.readdir(path);
                                                                                                                                                                                                                                                                                                                                -  for (const file of files) {
                                                                                                                                                                                                                                                                                                                                -    console.log(file);
                                                                                                                                                                                                                                                                                                                                +async function print(path) {
                                                                                                                                                                                                                                                                                                                                +  const files = await fs.promises.readdir(path);
                                                                                                                                                                                                                                                                                                                                +  for (const file of files) {
                                                                                                                                                                                                                                                                                                                                +    console.log(file);
                                                                                                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                                                                                -print('./').catch(console.error);
                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                +print('./').catch(console.error);

                                                                                                                                                                                                                                                                                                                                fsPromises.readFile(path[, options])#

                                                                                                                                                                                                                                                                                                                                • path <string> | <Buffer> | <URL> | <FileHandle> filename or FileHandle
                                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                  options <Object> | <string>

                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                • options <Object> | <string>
                                                                                                                                                                                                                                                                                                                                  • encoding <string> | <null> Default: null
                                                                                                                                                                                                                                                                                                                                  • flag <string> See support of file system flags. Default: 'r'.
                                                                                                                                                                                                                                                                                                                                  • @@ -35312,8 +34123,7 @@
                                                                                                                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                      options <string> | <Object>

                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                    • options <string> | <Object> @@ -35332,8 +34142,7 @@
                                                                                                                                                                                                                                                                                                                                      • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                                        options <string> | <Object>

                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                      • options <string> | <Object> @@ -35379,8 +34188,7 @@

                                                                                                                                                                                                                                                                                                                                        Stability: 1 - Recursive removal is experimental.

                                                                                                                                                                                                                                                                                                                                        • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                          options <Object>

                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                        • options <Object>
                                                                                                                                                                                                                                                                                                                                          • maxRetries <integer> If an EBUSY, EMFILE, ENFILE, ENOTEMPTY, or EPERM error is encountered, Node.js will retry the operation with a linear @@ -35416,8 +34224,7 @@
                                                                                                                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                              options <Object>

                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                            • options <Object>
                                                                                                                                                                                                                                                                                                                                              • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                                                                                                                              • @@ -35489,8 +34296,7 @@
                                                                                                                                                                                                                                                                                                                                                • file <string> | <Buffer> | <URL> | <FileHandle> filename or FileHandle
                                                                                                                                                                                                                                                                                                                                                • data <string> | <Buffer> | <Uint8Array>
                                                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                  options <Object> | <string>

                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                • options <Object> | <string>
                                                                                                                                                                                                                                                                                                                                                  • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                                                  • mode <integer> Default: 0o666
                                                                                                                                                                                                                                                                                                                                                  • @@ -35507,24 +34313,23 @@

                                                                                                                                                                                                                                                                                                                                                    Any specified FileHandle has to support writing.

                                                                                                                                                                                                                                                                                                                                                    It is unsafe to use fsPromises.writeFile() multiple times on the same file without waiting for the Promise to be resolved (or rejected).

                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                    FS Constants#

                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                    FS constants#

                                                                                                                                                                                                                                                                                                                                                    The following constants are exported by fs.constants.

                                                                                                                                                                                                                                                                                                                                                    Not every constant will be available on every operating system.

                                                                                                                                                                                                                                                                                                                                                    To use more than one constant, use the bitwise OR | operator.

                                                                                                                                                                                                                                                                                                                                                    Example:

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -const {
                                                                                                                                                                                                                                                                                                                                                    +const {
                                                                                                                                                                                                                                                                                                                                                       O_RDWR,
                                                                                                                                                                                                                                                                                                                                                       O_CREAT,
                                                                                                                                                                                                                                                                                                                                                       O_EXCL
                                                                                                                                                                                                                                                                                                                                                     } = fs.constants;
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -fs.open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {
                                                                                                                                                                                                                                                                                                                                                    -  // ...
                                                                                                                                                                                                                                                                                                                                                    -});
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                    File Access Constants#

                                                                                                                                                                                                                                                                                                                                                    +fs.open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => { + // ... +});
                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                    File access constants#

                                                                                                                                                                                                                                                                                                                                                    The following constants are meant for use with fs.access().

                                                                                                                                                                                                                                                                                                                                                    @@ -35553,7 +34358,7 @@ (will behave like fs.constants.F_OK).
                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                    File Copy Constants#

                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                    File copy constants#

                                                                                                                                                                                                                                                                                                                                                    The following constants are meant for use with fs.copyFile().

                                                                                                                                                                                                                                                                                                                                                    @@ -35578,7 +34383,7 @@ copy-on-write, then the operation will fail with an error.
                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                    File Open Constants#

                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                    File open constants#

                                                                                                                                                                                                                                                                                                                                                    The following constants are meant for use with fs.open().

                                                                                                                                                                                                                                                                                                                                                    @@ -35669,7 +34474,7 @@ this flag is ignored.
                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                    File Type Constants#

                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                    File type constants#

                                                                                                                                                                                                                                                                                                                                                    The following constants are meant for use with the fs.Stats object's mode property for determining a file's type.

                                                                                                                                                                                                                                                                                                                                                    @@ -35710,7 +34515,7 @@
                                                                                                                                                                                                                                                                                                                                                    File type constant for a socket.
                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                    File Mode Constants#

                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                    File mode constants#

                                                                                                                                                                                                                                                                                                                                                    The following constants are meant for use with the fs.Stats object's mode property for determining the access permissions for a file.

                                                                                                                                                                                                                                                                                                                                                    @@ -35767,7 +34572,7 @@
                                                                                                                                                                                                                                                                                                                                                    File mode indicating executable by others.
                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                    File System Flags#

                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                    File system flags#

                                                                                                                                                                                                                                                                                                                                                    The following flags are available wherever the flag option takes a string.

                                                                                                                                                                                                                                                                                                                                                      @@ -35830,10 +34635,10 @@ are available from fs.constants. On Windows, flags are translated to their equivalent ones where applicable, e.g. O_WRONLY to FILE_GENERIC_WRITE, or O_EXCL|O_CREAT to CREATE_NEW, as accepted by CreateFileW.

                                                                                                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                                                                                                      The exclusive flag 'x' (O_EXCL flag in open(2)) ensures that path is newly -created. On POSIX systems, path is considered to exist even if it is a symlink -to a non-existent file. The exclusive flag may or may not work with network -file systems.

                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                      The exclusive flag 'x' (O_EXCL flag in open(2)) causes the operation to +return an error if the path already exists. On POSIX, if the path is a symbolic +link, using O_EXCL returns an error even if the link is to a path that does +not exist. The exclusive flag may or may not work with network file systems.

                                                                                                                                                                                                                                                                                                                                                      On Linux, positional writes don't work when the file is opened in append mode. The kernel ignores the position argument and always appends the data to the end of the file.

                                                                                                                                                                                                                                                                                                                                                      @@ -35843,22 +34648,21 @@ on macOS and Linux with the 'a+' flag, as in the example below, will return an error. In contrast, on Windows and FreeBSD, a file descriptor or a FileHandle will be returned.

                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      // macOS and Linux
                                                                                                                                                                                                                                                                                                                                                      -fs.open('<directory>', 'a+', (err, fd) => {
                                                                                                                                                                                                                                                                                                                                                      -  // => [Error: EISDIR: illegal operation on a directory, open <directory>]
                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                      // macOS and Linux
                                                                                                                                                                                                                                                                                                                                                      +fs.open('<directory>', 'a+', (err, fd) => {
                                                                                                                                                                                                                                                                                                                                                      +  // => [Error: EISDIR: illegal operation on a directory, open <directory>]
                                                                                                                                                                                                                                                                                                                                                       });
                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                      -// Windows and FreeBSD
                                                                                                                                                                                                                                                                                                                                                      -fs.open('<directory>', 'a+', (err, fd) => {
                                                                                                                                                                                                                                                                                                                                                      -  // => null, <fd>
                                                                                                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      +// Windows and FreeBSD +fs.open('<directory>', 'a+', (err, fd) => { + // => null, <fd> +});

                                                                                                                                                                                                                                                                                                                                                      On Windows, opening an existing hidden file using the 'w' flag (either through fs.open() or fs.writeFile() or fsPromises.open()) will fail with EPERM. Existing hidden files can be opened for writing with the 'r+' flag.

                                                                                                                                                                                                                                                                                                                                                      A call to fs.ftruncate() or filehandle.truncate() can be used to reset the file contents.

                                                                                                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                                                                                                      Global Objects#

                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                      Global objects#

                                                                                                                                                                                                                                                                                                                                                      These objects are available in all modules. The following variables may appear @@ -35954,25 +34758,24 @@ the process.nextTick() queue, which is managed by Node.js. The process.nextTick() queue is always processed before the microtask queue within each turn of the Node.js event loop.

                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      // Here, `queueMicrotask()` is used to ensure the 'load' event is always
                                                                                                                                                                                                                                                                                                                                                      -// emitted asynchronously, and therefore consistently. Using
                                                                                                                                                                                                                                                                                                                                                      -// `process.nextTick()` here would result in the 'load' event always emitting
                                                                                                                                                                                                                                                                                                                                                      -// before any other promise jobs.
                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      -DataHandler.prototype.load = async function load(key) {
                                                                                                                                                                                                                                                                                                                                                      -  const hit = this._cache.get(url);
                                                                                                                                                                                                                                                                                                                                                      -  if (hit !== undefined) {
                                                                                                                                                                                                                                                                                                                                                      -    queueMicrotask(() => {
                                                                                                                                                                                                                                                                                                                                                      -      this.emit('load', hit);
                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                      // Here, `queueMicrotask()` is used to ensure the 'load' event is always
                                                                                                                                                                                                                                                                                                                                                      +// emitted asynchronously, and therefore consistently. Using
                                                                                                                                                                                                                                                                                                                                                      +// `process.nextTick()` here would result in the 'load' event always emitting
                                                                                                                                                                                                                                                                                                                                                      +// before any other promise jobs.
                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                      +DataHandler.prototype.load = async function load(key) {
                                                                                                                                                                                                                                                                                                                                                      +  const hit = this._cache.get(url);
                                                                                                                                                                                                                                                                                                                                                      +  if (hit !== undefined) {
                                                                                                                                                                                                                                                                                                                                                      +    queueMicrotask(() => {
                                                                                                                                                                                                                                                                                                                                                      +      this.emit('load', hit);
                                                                                                                                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                                                                                                                                      -    return;
                                                                                                                                                                                                                                                                                                                                                      +    return;
                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                      -  const data = await fetchData(key);
                                                                                                                                                                                                                                                                                                                                                      -  this._cache.set(url, data);
                                                                                                                                                                                                                                                                                                                                                      -  this.emit('load', data);
                                                                                                                                                                                                                                                                                                                                                      -};
                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      + const data = await fetchData(key); + this._cache.set(url, data); + this.emit('load', data); +};

                                                                                                                                                                                                                                                                                                                                                      require()#

                                                                                                                                                                                                                                                                                                                                                      This variable may appear to be global but is not. See require().

                                                                                                                                                                                                                                                                                                                                                      setImmediate(callback[, ...args])#

                                                                                                                                                                                                                                                                                                                                                      @@ -36031,6 +34834,7 @@

                                                                                                                                                                                                                                                                                                                                                      HTTP#

                                                                                                                                                                                                                                                                                                                                                      Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                      Source Code: lib/http.js

                                                                                                                                                                                                                                                                                                                                                      To use the HTTP server and client one must require('http').

                                                                                                                                                                                                                                                                                                                                                      The HTTP interfaces in Node.js are designed to support many features of the protocol which have been traditionally difficult to use. @@ -36039,12 +34843,11 @@ user is able to stream data.

                                                                                                                                                                                                                                                                                                                                                      HTTP message headers are represented by an object like this:

                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      { 'content-length': '123',
                                                                                                                                                                                                                                                                                                                                                      -  'content-type': 'text/plain',
                                                                                                                                                                                                                                                                                                                                                      -  'connection': 'keep-alive',
                                                                                                                                                                                                                                                                                                                                                      -  'host': 'mysite.com',
                                                                                                                                                                                                                                                                                                                                                      -  'accept': '*/*' }
                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                      { 'content-length': '123',
                                                                                                                                                                                                                                                                                                                                                      +  'content-type': 'text/plain',
                                                                                                                                                                                                                                                                                                                                                      +  'connection': 'keep-alive',
                                                                                                                                                                                                                                                                                                                                                      +  'host': 'mysite.com',
                                                                                                                                                                                                                                                                                                                                                      +  'accept': '*/*' }

                                                                                                                                                                                                                                                                                                                                                      Keys are lowercased. Values are not modified.

                                                                                                                                                                                                                                                                                                                                                      In order to support the full spectrum of possible HTTP applications, the Node.js HTTP API is very low-level. It deals with stream handling and message @@ -36056,13 +34859,12 @@ example, the previous message header object might have a rawHeaders list like the following:

                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      [ 'ConTent-Length', '123456',
                                                                                                                                                                                                                                                                                                                                                      -  'content-LENGTH', '123',
                                                                                                                                                                                                                                                                                                                                                      -  'content-type', 'text/plain',
                                                                                                                                                                                                                                                                                                                                                      -  'CONNECTION', 'keep-alive',
                                                                                                                                                                                                                                                                                                                                                      -  'Host', 'mysite.com',
                                                                                                                                                                                                                                                                                                                                                      -  'accepT', '*/*' ]
                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                      [ 'ConTent-Length', '123456',
                                                                                                                                                                                                                                                                                                                                                      +  'content-LENGTH', '123',
                                                                                                                                                                                                                                                                                                                                                      +  'content-type', 'text/plain',
                                                                                                                                                                                                                                                                                                                                                      +  'CONNECTION', 'keep-alive',
                                                                                                                                                                                                                                                                                                                                                      +  'Host', 'mysite.com',
                                                                                                                                                                                                                                                                                                                                                      +  'accepT', '*/*' ]

                                                                                                                                                                                                                                                                                                                                                      Class: http.Agent#

                                                                                                                                                                                                                                                                                                                                                    Called when socket is attached to request after being persisted because of the keep-alive options. Default behavior is to:

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    socket.ref();
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    socket.ref();

                                                                                                                                                                                                                                                                                                                                                    This method can be overridden by a particular Agent subclass.

                                                                                                                                                                                                                                                                                                                                                    The socket argument can be an instance of <net.Socket>, a subclass of <stream.Duplex>.

                                                                                                                                                                                                                                                                                                                                                    @@ -36230,8 +35052,7 @@ Added in: v0.11.4
                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                                      options <Object> A set of options providing information for name generation

                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                    • options <Object> A set of options providing information for name generation
                                                                                                                                                                                                                                                                                                                                                      • host <string> A domain name or IP address of the server to issue the request to
                                                                                                                                                                                                                                                                                                                                                      • @@ -36267,6 +35088,15 @@

                                                                                                                                                                                                                                                                                                                                                      By default set to Infinity. Determines how many concurrent sockets the agent can have open per origin. Origin is the returned value of agent.getName().

                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                      agent.maxTotalSockets#

                                                                                                                                                                                                                                                                                                                                                      + + +

                                                                                                                                                                                                                                                                                                                                                      By default set to Infinity. Determines how many concurrent sockets the agent +can have open. Unlike maxSockets, this parameter applies across all origins.

                                                                                                                                                                                                                                                                                                                                                      agent.requests#

                                                                                                                                                                                                                                                                                                                                                    • name <string>

                                                                                                                                                                                                                                                                                                                                                    Removes a header that's queued for implicit sending.

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    response.removeHeader('Content-Encoding');
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    response.removeHeader('Content-Encoding');

                                                                                                                                                                                                                                                                                                                                                    response.sendDate#

                                                                                                                                                                                                                                                                                                                                                  The request/response headers object.

                                                                                                                                                                                                                                                                                                                                                  Key-value pairs of header names and values. Header names are lower-cased.

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  // Prints something like:
                                                                                                                                                                                                                                                                                                                                                  -//
                                                                                                                                                                                                                                                                                                                                                  -// { 'user-agent': 'curl/7.22.0',
                                                                                                                                                                                                                                                                                                                                                  -//   host: '127.0.0.1:8000',
                                                                                                                                                                                                                                                                                                                                                  -//   accept: '*/*' }
                                                                                                                                                                                                                                                                                                                                                  -console.log(request.headers);
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  // Prints something like:
                                                                                                                                                                                                                                                                                                                                                  +//
                                                                                                                                                                                                                                                                                                                                                  +// { 'user-agent': 'curl/7.22.0',
                                                                                                                                                                                                                                                                                                                                                  +//   host: '127.0.0.1:8000',
                                                                                                                                                                                                                                                                                                                                                  +//   accept: '*/*' }
                                                                                                                                                                                                                                                                                                                                                  +console.log(request.headers);

                                                                                                                                                                                                                                                                                                                                                  Duplicates in raw headers are handled in the following ways, depending on the header name:

                                                                                                                                                                                                                                                                                                                                                    @@ -37657,18 +36489,17 @@ list of tuples. So, the even-numbered offsets are key values, and the odd-numbered offsets are the associated values.

                                                                                                                                                                                                                                                                                                                                                    Header names are not lowercased, and duplicates are not merged.

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    // Prints something like:
                                                                                                                                                                                                                                                                                                                                                    -//
                                                                                                                                                                                                                                                                                                                                                    -// [ 'user-agent',
                                                                                                                                                                                                                                                                                                                                                    -//   'this is invalid because there can be only one',
                                                                                                                                                                                                                                                                                                                                                    -//   'User-Agent',
                                                                                                                                                                                                                                                                                                                                                    -//   'curl/7.22.0',
                                                                                                                                                                                                                                                                                                                                                    -//   'Host',
                                                                                                                                                                                                                                                                                                                                                    -//   '127.0.0.1:8000',
                                                                                                                                                                                                                                                                                                                                                    -//   'ACCEPT',
                                                                                                                                                                                                                                                                                                                                                    -//   '*/*' ]
                                                                                                                                                                                                                                                                                                                                                    -console.log(request.rawHeaders);
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    // Prints something like:
                                                                                                                                                                                                                                                                                                                                                    +//
                                                                                                                                                                                                                                                                                                                                                    +// [ 'user-agent',
                                                                                                                                                                                                                                                                                                                                                    +//   'this is invalid because there can be only one',
                                                                                                                                                                                                                                                                                                                                                    +//   'User-Agent',
                                                                                                                                                                                                                                                                                                                                                    +//   'curl/7.22.0',
                                                                                                                                                                                                                                                                                                                                                    +//   'Host',
                                                                                                                                                                                                                                                                                                                                                    +//   '127.0.0.1:8000',
                                                                                                                                                                                                                                                                                                                                                    +//   'ACCEPT',
                                                                                                                                                                                                                                                                                                                                                    +//   '*/*' ]
                                                                                                                                                                                                                                                                                                                                                    +console.log(request.rawHeaders);

                                                                                                                                                                                                                                                                                                                                                    message.rawTrailers#

                                                                                                                                                                                                                                                                                                                                                  Only valid for request obtained from http.Server.

                                                                                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                                                                                  Request URL string. This contains only the URL that is -present in the actual HTTP request. If the request is:

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  GET /status?name=ryan HTTP/1.1\r\n
                                                                                                                                                                                                                                                                                                                                                  -Accept: text/plain\r\n
                                                                                                                                                                                                                                                                                                                                                  -\r\n
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                                                                  Request URL string. This contains only the URL that is present in the actual +HTTP request. Take the following request:

                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  GET /status?name=ryan HTTP/1.1
                                                                                                                                                                                                                                                                                                                                                  +Accept: text/plain

                                                                                                                                                                                                                                                                                                                                                  To parse the URL into its parts:

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  new URL(request.url, `http://${request.headers.host}`);
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  new URL(request.url, `http://${request.headers.host}`);

                                                                                                                                                                                                                                                                                                                                                  When request.url is '/status?name=ryan' and request.headers.host is 'localhost:3000':

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  $ node
                                                                                                                                                                                                                                                                                                                                                  -> new URL(request.url, `http://${request.headers.host}`)
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  $ node
                                                                                                                                                                                                                                                                                                                                                  +> new URL(request.url, `http://${request.headers.host}`)
                                                                                                                                                                                                                                                                                                                                                   URL {
                                                                                                                                                                                                                                                                                                                                                     href: 'http://localhost:3000/status?name=ryan',
                                                                                                                                                                                                                                                                                                                                                     origin: 'http://localhost:3000',
                                                                                                                                                                                                                                                                                                                                                  @@ -37761,8 +36589,7 @@
                                                                                                                                                                                                                                                                                                                                                     search: '?name=ryan',
                                                                                                                                                                                                                                                                                                                                                     searchParams: URLSearchParams { 'name' => 'ryan' },
                                                                                                                                                                                                                                                                                                                                                     hash: ''
                                                                                                                                                                                                                                                                                                                                                  -}
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +}

                                                                                                                                                                                                                                                                                                                                                  http.METHODS#

                                                                                                                                                                                                                                                                                                                                                  Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                                                                  Source Code: lib/http2.js

                                                                                                                                                                                                                                                                                                                                                  The http2 module provides an implementation of the HTTP/2 protocol. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  const http2 = require('http2');

                                                                                                                                                                                                                                                                                                                                                  Core API#

                                                                                                                                                                                                                                                                                                                                                  The Core API provides a low-level interface designed specifically around support for HTTP/2 protocol features. It is specifically not designed for @@ -38140,56 +36962,53 @@ unencrypted HTTP/2, the use of http2.createSecureServer() is necessary when communicating with browser clients.

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                  -const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                  +const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                  -const server = http2.createSecureServer({
                                                                                                                                                                                                                                                                                                                                                  -  key: fs.readFileSync('localhost-privkey.pem'),
                                                                                                                                                                                                                                                                                                                                                  -  cert: fs.readFileSync('localhost-cert.pem')
                                                                                                                                                                                                                                                                                                                                                  +const server = http2.createSecureServer({
                                                                                                                                                                                                                                                                                                                                                  +  key: fs.readFileSync('localhost-privkey.pem'),
                                                                                                                                                                                                                                                                                                                                                  +  cert: fs.readFileSync('localhost-cert.pem')
                                                                                                                                                                                                                                                                                                                                                   });
                                                                                                                                                                                                                                                                                                                                                  -server.on('error', (err) => console.error(err));
                                                                                                                                                                                                                                                                                                                                                  +server.on('error', (err) => console.error(err));
                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                  -server.on('stream', (stream, headers) => {
                                                                                                                                                                                                                                                                                                                                                  -  // stream is a Duplex
                                                                                                                                                                                                                                                                                                                                                  +server.on('stream', (stream, headers) => {
                                                                                                                                                                                                                                                                                                                                                  +  // stream is a Duplex
                                                                                                                                                                                                                                                                                                                                                     stream.respond({
                                                                                                                                                                                                                                                                                                                                                  -    'content-type': 'text/html',
                                                                                                                                                                                                                                                                                                                                                  -    ':status': 200
                                                                                                                                                                                                                                                                                                                                                  +    'content-type': 'text/html; charset=utf-8',
                                                                                                                                                                                                                                                                                                                                                  +    ':status': 200
                                                                                                                                                                                                                                                                                                                                                     });
                                                                                                                                                                                                                                                                                                                                                  -  stream.end('<h1>Hello World</h1>');
                                                                                                                                                                                                                                                                                                                                                  +  stream.end('<h1>Hello World</h1>');
                                                                                                                                                                                                                                                                                                                                                   });
                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                  -server.listen(8443);
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +server.listen(8443);

                                                                                                                                                                                                                                                                                                                                                  To generate the certificate and key for this example, run:

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \
                                                                                                                                                                                                                                                                                                                                                  -  -keyout localhost-privkey.pem -out localhost-cert.pem
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \
                                                                                                                                                                                                                                                                                                                                                  +  -keyout localhost-privkey.pem -out localhost-cert.pem

                                                                                                                                                                                                                                                                                                                                                  Client-side example#

                                                                                                                                                                                                                                                                                                                                                  The following illustrates an HTTP/2 client:

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                  -const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                  -const client = http2.connect('https://localhost:8443', {
                                                                                                                                                                                                                                                                                                                                                  -  ca: fs.readFileSync('localhost-cert.pem')
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                  +const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                  +const client = http2.connect('https://localhost:8443', {
                                                                                                                                                                                                                                                                                                                                                  +  ca: fs.readFileSync('localhost-cert.pem')
                                                                                                                                                                                                                                                                                                                                                   });
                                                                                                                                                                                                                                                                                                                                                  -client.on('error', (err) => console.error(err));
                                                                                                                                                                                                                                                                                                                                                  +client.on('error', (err) => console.error(err));
                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                  -const req = client.request({ ':path': '/' });
                                                                                                                                                                                                                                                                                                                                                  +const req = client.request({ ':path': '/' });
                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                  -req.on('response', (headers, flags) => {
                                                                                                                                                                                                                                                                                                                                                  -  for (const name in headers) {
                                                                                                                                                                                                                                                                                                                                                  -    console.log(`${name}: ${headers[name]}`);
                                                                                                                                                                                                                                                                                                                                                  +req.on('response', (headers, flags) => {
                                                                                                                                                                                                                                                                                                                                                  +  for (const name in headers) {
                                                                                                                                                                                                                                                                                                                                                  +    console.log(`${name}: ${headers[name]}`);
                                                                                                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                                                                                                   });
                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                  -req.setEncoding('utf8');
                                                                                                                                                                                                                                                                                                                                                  -let data = '';
                                                                                                                                                                                                                                                                                                                                                  -req.on('data', (chunk) => { data += chunk; });
                                                                                                                                                                                                                                                                                                                                                  -req.on('end', () => {
                                                                                                                                                                                                                                                                                                                                                  -  console.log(`\n${data}`);
                                                                                                                                                                                                                                                                                                                                                  +req.setEncoding('utf8');
                                                                                                                                                                                                                                                                                                                                                  +let data = '';
                                                                                                                                                                                                                                                                                                                                                  +req.on('data', (chunk) => { data += chunk; });
                                                                                                                                                                                                                                                                                                                                                  +req.on('end', () => {
                                                                                                                                                                                                                                                                                                                                                  +  console.log(`\n${data}`);
                                                                                                                                                                                                                                                                                                                                                     client.close();
                                                                                                                                                                                                                                                                                                                                                   });
                                                                                                                                                                                                                                                                                                                                                  -req.end();
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +req.end();

                                                                                                                                                                                                                                                                                                                                                  Class: Http2Session#

                                                                                                                                                                                                                                                                                                                                                The 'remoteSettings' event is emitted when a new SETTINGS frame is received from the connected peer.

                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                session.on('remoteSettings', (settings) => {
                                                                                                                                                                                                                                                                                                                                                -  /* Use the new settings */
                                                                                                                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                session.on('remoteSettings', (settings) => {
                                                                                                                                                                                                                                                                                                                                                +  /* Use the new settings */
                                                                                                                                                                                                                                                                                                                                                +});

                                                                                                                                                                                                                                                                                                                                                Event: 'stream'#

                                                                                                                                                                                                                                                                                                                                              The 'stream' event is emitted when a new Http2Stream is created.

                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                              -session.on('stream', (stream, headers, flags) => {
                                                                                                                                                                                                                                                                                                                                              -  const method = headers[':method'];
                                                                                                                                                                                                                                                                                                                                              -  const path = headers[':path'];
                                                                                                                                                                                                                                                                                                                                              -  // ...
                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                              +session.on('stream', (stream, headers, flags) => {
                                                                                                                                                                                                                                                                                                                                              +  const method = headers[':method'];
                                                                                                                                                                                                                                                                                                                                              +  const path = headers[':path'];
                                                                                                                                                                                                                                                                                                                                              +  // ...
                                                                                                                                                                                                                                                                                                                                                 stream.respond({
                                                                                                                                                                                                                                                                                                                                              -    ':status': 200,
                                                                                                                                                                                                                                                                                                                                              -    'content-type': 'text/plain'
                                                                                                                                                                                                                                                                                                                                              +    ':status': 200,
                                                                                                                                                                                                                                                                                                                                              +    'content-type': 'text/plain; charset=utf-8'
                                                                                                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                                                                                              -  stream.write('hello ');
                                                                                                                                                                                                                                                                                                                                              -  stream.end('world');
                                                                                                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                              + stream.write('hello '); + stream.end('world'); +});

                                                                                                                                                                                                                                                                                                                                              On the server side, user code will typically not listen for this event directly, and would instead register a handler for the 'stream' event emitted by the net.Server or tls.Server instances returned by http2.createServer() and http2.createSecureServer(), respectively, as in the example below:

                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                              -// Create an unencrypted HTTP/2 server
                                                                                                                                                                                                                                                                                                                                              -const server = http2.createServer();
                                                                                                                                                                                                                                                                                                                                              +// Create an unencrypted HTTP/2 server
                                                                                                                                                                                                                                                                                                                                              +const server = http2.createServer();
                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                              -server.on('stream', (stream, headers) => {
                                                                                                                                                                                                                                                                                                                                              +server.on('stream', (stream, headers) => {
                                                                                                                                                                                                                                                                                                                                                 stream.respond({
                                                                                                                                                                                                                                                                                                                                              -    'content-type': 'text/html',
                                                                                                                                                                                                                                                                                                                                              -    ':status': 200
                                                                                                                                                                                                                                                                                                                                              +    'content-type': 'text/html; charset=utf-8',
                                                                                                                                                                                                                                                                                                                                              +    ':status': 200
                                                                                                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                                                                                              -  stream.on('error', (error) => console.error(error));
                                                                                                                                                                                                                                                                                                                                              -  stream.end('<h1>Hello World</h1>');
                                                                                                                                                                                                                                                                                                                                              +  stream.on('error', (error) => console.error(error));
                                                                                                                                                                                                                                                                                                                                              +  stream.end('<h1>Hello World</h1>');
                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                              -server.listen(80);
                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                              +server.listen(80);

                                                                                                                                                                                                                                                                                                                                              Even though HTTP/2 streams and network sockets are not in a 1:1 correspondence, a network error will destroy each individual stream and must be handled on the stream level, as shown above.

                                                                                                                                                                                                                                                                                                                                              @@ -38375,9 +37190,8 @@ for this Http2Session, the 'timeout' event is emitted if there is no activity on the Http2Session after the configured number of milliseconds. Its listener does not expect any arguments.

                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                              session.setTimeout(2000);
                                                                                                                                                                                                                                                                                                                                              -session.on('timeout', () => { /* .. */ });
                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                              session.setTimeout(2000);
                                                                                                                                                                                                                                                                                                                                              +session.on('timeout', () => { /* .. */ });

                                                                                                                                                                                                                                                                                                                                              http2session.alpnProtocol#

                                                                                                                                                                                                                                                                                                                                              • settings <HTTP/2 Settings Object>
                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                callback <Function> Callback that is called once the session is connected or -right away if the session is already connected.

                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                              • callback <Function> Callback that is called once the session is connected or +right away if the session is already connected.

                                                                                                                                                                                                                                                                                                                                                Submits an ALTSVC frame (as defined by RFC 7838) to the connected client.

                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                -const server = http2.createServer();
                                                                                                                                                                                                                                                                                                                                                -server.on('session', (session) => {
                                                                                                                                                                                                                                                                                                                                                -  // Set altsvc for origin https://example.org:80
                                                                                                                                                                                                                                                                                                                                                -  session.altsvc('h2=":8000"', 'https://example.org:80');
                                                                                                                                                                                                                                                                                                                                                +const server = http2.createServer();
                                                                                                                                                                                                                                                                                                                                                +server.on('session', (session) => {
                                                                                                                                                                                                                                                                                                                                                +  // Set altsvc for origin https://example.org:80
                                                                                                                                                                                                                                                                                                                                                +  session.altsvc('h2=":8000"', 'https://example.org:80');
                                                                                                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                -server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                -  // Set altsvc for a specific stream
                                                                                                                                                                                                                                                                                                                                                -  stream.session.altsvc('h2=":8000"', stream.id);
                                                                                                                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                +server.on('stream', (stream) => { + // Set altsvc for a specific stream + stream.session.altsvc('h2=":8000"', stream.id); +});

                                                                                                                                                                                                                                                                                                                                                Sending an ALTSVC frame with a specific stream ID indicates that the alternate service is associated with the origin of the given Http2Stream.

                                                                                                                                                                                                                                                                                                                                                The alt and origin string must contain only ASCII bytes and are @@ -38717,17 +37527,16 @@

                                                                                                                                                                                                                                                                                                                                                Submits an ORIGIN frame (as defined by RFC 8336) to the connected client to advertise the set of origins for which the server is capable of providing authoritative responses.

                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                -const options = getSecureOptionsSomehow();
                                                                                                                                                                                                                                                                                                                                                -const server = http2.createSecureServer(options);
                                                                                                                                                                                                                                                                                                                                                -server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                +const options = getSecureOptionsSomehow();
                                                                                                                                                                                                                                                                                                                                                +const server = http2.createSecureServer(options);
                                                                                                                                                                                                                                                                                                                                                +server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                   stream.respond();
                                                                                                                                                                                                                                                                                                                                                -  stream.end('ok');
                                                                                                                                                                                                                                                                                                                                                +  stream.end('ok');
                                                                                                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                                                                                                -server.on('session', (session) => {
                                                                                                                                                                                                                                                                                                                                                -  session.origin('https://example.com', 'https://example.org');
                                                                                                                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                +server.on('session', (session) => { + session.origin('https://example.com', 'https://example.org'); +});

                                                                                                                                                                                                                                                                                                                                                When a string is passed as an origin, it will be parsed as a URL and the origin will be derived. For instance, the origin for the HTTP URL 'https://example.org/foo/bar' is the ASCII string @@ -38739,15 +37548,14 @@ ASCII origin.

                                                                                                                                                                                                                                                                                                                                                Alternatively, the origins option may be used when creating a new HTTP/2 server using the http2.createSecureServer() method:

                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                -const options = getSecureOptionsSomehow();
                                                                                                                                                                                                                                                                                                                                                -options.origins = ['https://example.com', 'https://example.org'];
                                                                                                                                                                                                                                                                                                                                                -const server = http2.createSecureServer(options);
                                                                                                                                                                                                                                                                                                                                                -server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                +const options = getSecureOptionsSomehow();
                                                                                                                                                                                                                                                                                                                                                +options.origins = ['https://example.com', 'https://example.org'];
                                                                                                                                                                                                                                                                                                                                                +const server = http2.createSecureServer(options);
                                                                                                                                                                                                                                                                                                                                                +server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                   stream.respond();
                                                                                                                                                                                                                                                                                                                                                -  stream.end('ok');
                                                                                                                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                + stream.end('ok'); +});

                                                                                                                                                                                                                                                                                                                                                Class: ClientHttp2Session#

                                                                                                                                                                                                                                                                                                                                              • eq <string>. The substring used to delimit keys and values in the query string. Default: '='.
                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                options <Object>

                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                              • options <Object>
                                                                                                                                                                                                                                                                                                                                                • decodeURIComponent <Function> The function to use when decoding percent-encoded characters in the query string. Default: @@ -48980,10 +49819,9 @@

                                                                                                                                                                                                                                                                                                                                                  For example, the query string 'foo=bar&abc=xyz&abc=123' is parsed into:

                                                                                                                                                                                                                                                                                                                                                  {
                                                                                                                                                                                                                                                                                                                                                  -  foo: 'bar',
                                                                                                                                                                                                                                                                                                                                                  -  abc: ['xyz', '123']
                                                                                                                                                                                                                                                                                                                                                  -}
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  + foo: 'bar', + abc: ['xyz', '123'] +}

                                                                                                                                                                                                                                                                                                                                                  The object returned by the querystring.parse() method does not prototypically inherit from the JavaScript Object. This means that typical Object methods such as obj.toString(), obj.hasOwnProperty(), and others @@ -48991,11 +49829,10 @@

                                                                                                                                                                                                                                                                                                                                                  By default, percent-encoded characters within the query string will be assumed to use UTF-8 encoding. If an alternative character encoding is used, then an alternative decodeURIComponent option will need to be specified:

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  // Assuming gbkDecodeURIComponent function already exists...
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  // Assuming gbkDecodeURIComponent function already exists...
                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                  -querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null,
                                                                                                                                                                                                                                                                                                                                                  -                  { decodeURIComponent: gbkDecodeURIComponent });
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +querystring.parse('w=%D6%D0%CE%C4&foo=bar', null, null, + { decodeURIComponent: gbkDecodeURIComponent });

                                                                                                                                                                                                                                                                                                                                                  querystring.stringify(obj[, sep[, eq[, options]]])#

                                                                                                                                                                                                                                                                                                                                                • eq <string>. The substring used to delimit keys and values in the query string. Default: '='.
                                                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                  options

                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                • options
                                                                                                                                                                                                                                                                                                                                                  • encodeURIComponent <Function> The function to use when converting URL-unsafe characters to percent-encoding in the query string. Default: @@ -49020,20 +49856,18 @@

                                                                                                                                                                                                                                                                                                                                                    It serializes the following types of values passed in obj: <string> | <number> | <boolean> | <string[]> | <number[]> | <boolean[]> Any other input values will be coerced to empty strings.

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
                                                                                                                                                                                                                                                                                                                                                    -// Returns 'foo=bar&baz=qux&baz=quux&corge='
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
                                                                                                                                                                                                                                                                                                                                                    +// Returns 'foo=bar&baz=qux&baz=quux&corge='
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':');
                                                                                                                                                                                                                                                                                                                                                    -// Returns 'foo:bar;baz:qux'
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    +querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':'); +// Returns 'foo:bar;baz:qux'

                                                                                                                                                                                                                                                                                                                                                    By default, characters requiring percent-encoding within the query string will be encoded as UTF-8. If an alternative encoding is required, then an alternative encodeURIComponent option will need to be specified:

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    // Assuming gbkEncodeURIComponent function already exists,
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    // Assuming gbkEncodeURIComponent function already exists,
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -querystring.stringify({ w: '中文', foo: 'bar' }, null, null,
                                                                                                                                                                                                                                                                                                                                                    -                      { encodeURIComponent: gbkEncodeURIComponent });
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    +querystring.stringify({ w: '中文', foo: 'bar' }, null, null, + { encodeURIComponent: gbkEncodeURIComponent });

                                                                                                                                                                                                                                                                                                                                                    querystring.unescape(str)#

                                                                                                                                                                                                                                                                                                                                                  The listener function is called without passing any arguments.

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  rl.on('pause', () => {
                                                                                                                                                                                                                                                                                                                                                  -  console.log('Readline paused.');
                                                                                                                                                                                                                                                                                                                                                  -});
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  rl.on('pause', () => {
                                                                                                                                                                                                                                                                                                                                                  +  console.log('Readline paused.');
                                                                                                                                                                                                                                                                                                                                                  +});

                                                                                                                                                                                                                                                                                                                                                  Event: 'resume'#

                                                                                                                                                                                                                                                                                                                                                  The 'resume' event is emitted whenever the input stream is resumed.

                                                                                                                                                                                                                                                                                                                                                  The listener function is called without passing any arguments.

                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  rl.on('resume', () => {
                                                                                                                                                                                                                                                                                                                                                  -  console.log('Readline resumed.');
                                                                                                                                                                                                                                                                                                                                                  -});
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                  rl.on('resume', () => {
                                                                                                                                                                                                                                                                                                                                                  +  console.log('Readline resumed.');
                                                                                                                                                                                                                                                                                                                                                  +});

                                                                                                                                                                                                                                                                                                                                                  Event: 'SIGCONT'#

                                                                                                                                                                                                                                                                                                                                                • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                Returns true if the value is a built-in Date instance.

                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                util.types.isDate(new Date());  // Returns true
                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                util.types.isDate(new Date());  // Returns true

                                                                                                                                                                                                                                                                                                                                                util.types.isExternal(value)#

                                                                                                                                                                                                                                                                                                                                              • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                              Returns true if the value is a built-in Float32Array instance.

                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                              util.types.isFloat32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                              -util.types.isFloat32Array(new Float32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                              -util.types.isFloat32Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                              util.types.isFloat32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                              +util.types.isFloat32Array(new Float32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                              +util.types.isFloat32Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                              util.types.isFloat64Array(value)#

                                                                                                                                                                                                                                                                                                                                            • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                            Returns true if the value is a built-in Float64Array instance.

                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                            util.types.isFloat64Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                            -util.types.isFloat64Array(new Uint8Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                            -util.types.isFloat64Array(new Float64Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                            util.types.isFloat64Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                            +util.types.isFloat64Array(new Uint8Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                            +util.types.isFloat64Array(new Float64Array());  // Returns true

                                                                                                                                                                                                                                                                                                                                            util.types.isGeneratorFunction(value)#

                                                                                                                                                                                                                                                                                                                                          • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                          Returns true if the value is a built-in Int8Array instance.

                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                          util.types.isInt8Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                          -util.types.isInt8Array(new Int8Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                          -util.types.isInt8Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                          util.types.isInt8Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                          +util.types.isInt8Array(new Int8Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                          +util.types.isInt8Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                          util.types.isInt16Array(value)#

                                                                                                                                                                                                                                                                                                                                        • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                        Returns true if the value is a built-in Int16Array instance.

                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                        util.types.isInt16Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                        -util.types.isInt16Array(new Int16Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                        -util.types.isInt16Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                        util.types.isInt16Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                        +util.types.isInt16Array(new Int16Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                        +util.types.isInt16Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                        util.types.isInt32Array(value)#

                                                                                                                                                                                                                                                                                                                                      • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                      Returns true if the value is a built-in Int32Array instance.

                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                      util.types.isInt32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                      -util.types.isInt32Array(new Int32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                      -util.types.isInt32Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                      util.types.isInt32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                      +util.types.isInt32Array(new Int32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                      +util.types.isInt32Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                      util.types.isMap(value)#

                                                                                                                                                                                                                                                                                                                                    • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                    Returns true if the value is a built-in Map instance.

                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                    util.types.isMap(new Map());  // Returns true
                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                    util.types.isMap(new Map());  // Returns true

                                                                                                                                                                                                                                                                                                                                    util.types.isMapIterator(value)#

                                                                                                                                                                                                                                                                                                                                  Returns true if the value is an iterator returned for a built-in Map instance.

                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                  const map = new Map();
                                                                                                                                                                                                                                                                                                                                  -util.types.isMapIterator(map.keys());  // Returns true
                                                                                                                                                                                                                                                                                                                                  -util.types.isMapIterator(map.values());  // Returns true
                                                                                                                                                                                                                                                                                                                                  -util.types.isMapIterator(map.entries());  // Returns true
                                                                                                                                                                                                                                                                                                                                  -util.types.isMapIterator(map[Symbol.iterator]());  // Returns true
                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                  const map = new Map();
                                                                                                                                                                                                                                                                                                                                  +util.types.isMapIterator(map.keys());  // Returns true
                                                                                                                                                                                                                                                                                                                                  +util.types.isMapIterator(map.values());  // Returns true
                                                                                                                                                                                                                                                                                                                                  +util.types.isMapIterator(map.entries());  // Returns true
                                                                                                                                                                                                                                                                                                                                  +util.types.isMapIterator(map[Symbol.iterator]());  // Returns true

                                                                                                                                                                                                                                                                                                                                  util.types.isModuleNamespaceObject(value)#

                                                                                                                                                                                                                                                                                                                                Returns true if the value is an instance of a Module Namespace Object.

                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                import * as ns from './a.js';
                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                import * as ns from './a.js';
                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                -util.types.isModuleNamespaceObject(ns);  // Returns true
                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                +util.types.isModuleNamespaceObject(ns); // Returns true

                                                                                                                                                                                                                                                                                                                                util.types.isNativeError(value)#

                                                                                                                                                                                                                                                                                                                              Returns true if the value is an instance of a built-in Error type.

                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                              util.types.isNativeError(new Error());  // Returns true
                                                                                                                                                                                                                                                                                                                              -util.types.isNativeError(new TypeError());  // Returns true
                                                                                                                                                                                                                                                                                                                              -util.types.isNativeError(new RangeError());  // Returns true
                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                              util.types.isNativeError(new Error());  // Returns true
                                                                                                                                                                                                                                                                                                                              +util.types.isNativeError(new TypeError());  // Returns true
                                                                                                                                                                                                                                                                                                                              +util.types.isNativeError(new RangeError());  // Returns true

                                                                                                                                                                                                                                                                                                                              util.types.isNumberObject(value)#

                                                                                                                                                                                                                                                                                                                            Returns true if the value is a number object, e.g. created by new Number().

                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                            util.types.isNumberObject(0);  // Returns false
                                                                                                                                                                                                                                                                                                                            -util.types.isNumberObject(new Number(0));   // Returns true
                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                            util.types.isNumberObject(0);  // Returns false
                                                                                                                                                                                                                                                                                                                            +util.types.isNumberObject(new Number(0));   // Returns true

                                                                                                                                                                                                                                                                                                                            util.types.isPromise(value)#

                                                                                                                                                                                                                                                                                                                          • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                          Returns true if the value is a built-in Promise.

                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                          util.types.isPromise(Promise.resolve(42));  // Returns true
                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                          util.types.isPromise(Promise.resolve(42));  // Returns true

                                                                                                                                                                                                                                                                                                                          util.types.isProxy(value)#

                                                                                                                                                                                                                                                                                                                        • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                        Returns true if the value is a Proxy instance.

                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        const target = {};
                                                                                                                                                                                                                                                                                                                        -const proxy = new Proxy(target, {});
                                                                                                                                                                                                                                                                                                                        -util.types.isProxy(target);  // Returns false
                                                                                                                                                                                                                                                                                                                        -util.types.isProxy(proxy);  // Returns true
                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                        const target = {};
                                                                                                                                                                                                                                                                                                                        +const proxy = new Proxy(target, {});
                                                                                                                                                                                                                                                                                                                        +util.types.isProxy(target);  // Returns false
                                                                                                                                                                                                                                                                                                                        +util.types.isProxy(proxy);  // Returns true

                                                                                                                                                                                                                                                                                                                        util.types.isRegExp(value)#

                                                                                                                                                                                                                                                                                                                      • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                      Returns true if the value is a regular expression object.

                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                      util.types.isRegExp(/abc/);  // Returns true
                                                                                                                                                                                                                                                                                                                      -util.types.isRegExp(new RegExp('abc'));  // Returns true
                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                      util.types.isRegExp(/abc/);  // Returns true
                                                                                                                                                                                                                                                                                                                      +util.types.isRegExp(new RegExp('abc'));  // Returns true

                                                                                                                                                                                                                                                                                                                      util.types.isSet(value)#

                                                                                                                                                                                                                                                                                                                    Returns true if the value is a built-in Set instance.

                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                    util.types.isSet(new Set());  // Returns true
                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                    util.types.isSet(new Set());  // Returns true

                                                                                                                                                                                                                                                                                                                    util.types.isSetIterator(value)#

                                                                                                                                                                                                                                                                                                                  Returns true if the value is an iterator returned for a built-in Set instance.

                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                  const set = new Set();
                                                                                                                                                                                                                                                                                                                  -util.types.isSetIterator(set.keys());  // Returns true
                                                                                                                                                                                                                                                                                                                  -util.types.isSetIterator(set.values());  // Returns true
                                                                                                                                                                                                                                                                                                                  -util.types.isSetIterator(set.entries());  // Returns true
                                                                                                                                                                                                                                                                                                                  -util.types.isSetIterator(set[Symbol.iterator]());  // Returns true
                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                  const set = new Set();
                                                                                                                                                                                                                                                                                                                  +util.types.isSetIterator(set.keys());  // Returns true
                                                                                                                                                                                                                                                                                                                  +util.types.isSetIterator(set.values());  // Returns true
                                                                                                                                                                                                                                                                                                                  +util.types.isSetIterator(set.entries());  // Returns true
                                                                                                                                                                                                                                                                                                                  +util.types.isSetIterator(set[Symbol.iterator]());  // Returns true

                                                                                                                                                                                                                                                                                                                  util.types.isSharedArrayBuffer(value)#

                                                                                                                                                                                                                                                                                                                Returns true if the value is a string object, e.g. created by new String().

                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                util.types.isStringObject('foo');  // Returns false
                                                                                                                                                                                                                                                                                                                -util.types.isStringObject(new String('foo'));   // Returns true
                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                util.types.isStringObject('foo');  // Returns false
                                                                                                                                                                                                                                                                                                                +util.types.isStringObject(new String('foo'));   // Returns true

                                                                                                                                                                                                                                                                                                                util.types.isSymbolObject(value)#

                                                                                                                                                                                                                                                                                                              Returns true if the value is a symbol object, created by calling Object() on a Symbol primitive.

                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                              const symbol = Symbol('foo');
                                                                                                                                                                                                                                                                                                              -util.types.isSymbolObject(symbol);  // Returns false
                                                                                                                                                                                                                                                                                                              -util.types.isSymbolObject(Object(symbol));   // Returns true
                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                              const symbol = Symbol('foo');
                                                                                                                                                                                                                                                                                                              +util.types.isSymbolObject(symbol);  // Returns false
                                                                                                                                                                                                                                                                                                              +util.types.isSymbolObject(Object(symbol));   // Returns true

                                                                                                                                                                                                                                                                                                              util.types.isTypedArray(value)#

                                                                                                                                                                                                                                                                                                            • Returns: <boolean>

                                                                                                                                                                                                                                                                                                            Returns true if the value is a built-in TypedArray instance.

                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                            util.types.isTypedArray(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                            -util.types.isTypedArray(new Uint8Array());  // Returns true
                                                                                                                                                                                                                                                                                                            -util.types.isTypedArray(new Float64Array());  // Returns true
                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                            util.types.isTypedArray(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                            +util.types.isTypedArray(new Uint8Array());  // Returns true
                                                                                                                                                                                                                                                                                                            +util.types.isTypedArray(new Float64Array());  // Returns true

                                                                                                                                                                                                                                                                                                            See also ArrayBuffer.isView().

                                                                                                                                                                                                                                                                                                            util.types.isUint8Array(value)#

                                                                                                                                                                                                                                                                                                          Returns true if the value is a built-in Uint8Array instance.

                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                          util.types.isUint8Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                          -util.types.isUint8Array(new Uint8Array());  // Returns true
                                                                                                                                                                                                                                                                                                          -util.types.isUint8Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                          util.types.isUint8Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                          +util.types.isUint8Array(new Uint8Array());  // Returns true
                                                                                                                                                                                                                                                                                                          +util.types.isUint8Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                          util.types.isUint8ClampedArray(value)#

                                                                                                                                                                                                                                                                                                        • Returns: <boolean>

                                                                                                                                                                                                                                                                                                        Returns true if the value is a built-in Uint8ClampedArray instance.

                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                        util.types.isUint8ClampedArray(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                        -util.types.isUint8ClampedArray(new Uint8ClampedArray());  // Returns true
                                                                                                                                                                                                                                                                                                        -util.types.isUint8ClampedArray(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                        util.types.isUint8ClampedArray(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                        +util.types.isUint8ClampedArray(new Uint8ClampedArray());  // Returns true
                                                                                                                                                                                                                                                                                                        +util.types.isUint8ClampedArray(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                        util.types.isUint16Array(value)#

                                                                                                                                                                                                                                                                                                      • Returns: <boolean>

                                                                                                                                                                                                                                                                                                      Returns true if the value is a built-in Uint16Array instance.

                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                      util.types.isUint16Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                      -util.types.isUint16Array(new Uint16Array());  // Returns true
                                                                                                                                                                                                                                                                                                      -util.types.isUint16Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                      util.types.isUint16Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                      +util.types.isUint16Array(new Uint16Array());  // Returns true
                                                                                                                                                                                                                                                                                                      +util.types.isUint16Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                      util.types.isUint32Array(value)#

                                                                                                                                                                                                                                                                                                    Returns true if the value is a built-in Uint32Array instance.

                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                    util.types.isUint32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                    -util.types.isUint32Array(new Uint32Array());  // Returns true
                                                                                                                                                                                                                                                                                                    -util.types.isUint32Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                    util.types.isUint32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                    +util.types.isUint32Array(new Uint32Array());  // Returns true
                                                                                                                                                                                                                                                                                                    +util.types.isUint32Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                    util.types.isWeakMap(value)#

                                                                                                                                                                                                                                                                                                  • Returns: <boolean>

                                                                                                                                                                                                                                                                                                  Returns true if the value is a built-in WeakMap instance.

                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                  util.types.isWeakMap(new WeakMap());  // Returns true
                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                  util.types.isWeakMap(new WeakMap());  // Returns true

                                                                                                                                                                                                                                                                                                  util.types.isWeakSet(value)#

                                                                                                                                                                                                                                                                                                Returns true if the value is a built-in WeakSet instance.

                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                util.types.isWeakSet(new WeakSet());  // Returns true
                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                util.types.isWeakSet(new WeakSet());  // Returns true

                                                                                                                                                                                                                                                                                                util.types.isWebAssemblyCompiledModule(value)#

                                                                                                                                                                                                                                                                                              • Returns: <boolean>

                                                                                                                                                                                                                                                                                              Returns true if the value is a built-in WebAssembly.Module instance.

                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                              const module = new WebAssembly.Module(wasmBuffer);
                                                                                                                                                                                                                                                                                              -util.types.isWebAssemblyCompiledModule(module);  // Returns true
                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                              const module = new WebAssembly.Module(wasmBuffer);
                                                                                                                                                                                                                                                                                              +util.types.isWebAssemblyCompiledModule(module);  // Returns true

                                                                                                                                                                                                                                                                                              Deprecated APIs#

                                                                                                                                                                                                                                                                                              The following APIs are deprecated and should no longer be used. Existing applications and modules should be updated to find alternative approaches.

                                                                                                                                                                                                                                                                                              @@ -59529,15 +60187,14 @@

                                                                                                                                                                                                                                                                                            Alias for Array.isArray().

                                                                                                                                                                                                                                                                                            Returns true if the given object is an Array. Otherwise, returns false.

                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                            const util = require('util');
                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                            const util = require('util');
                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                             util.isArray([]);
                                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                                            -util.isArray(new Array());
                                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                                            +// Returns: true
                                                                                                                                                                                                                                                                                            +util.isArray(new Array());
                                                                                                                                                                                                                                                                                            +// Returns: true
                                                                                                                                                                                                                                                                                             util.isArray({});
                                                                                                                                                                                                                                                                                            -// Returns: false
                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                            +// Returns: false

                                                                                                                                                                                                                                                                                            util.isBoolean(object)#

                                                                                                                                                                                                                                                                                          • Returns: <boolean>

                                                                                                                                                                                                                                                                                          Returns true if the given object is a Boolean. Otherwise, returns false.

                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                          -util.isBoolean(1);
                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                          -util.isBoolean(0);
                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                          -util.isBoolean(false);
                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                          +util.isBoolean(1); +// Returns: false +util.isBoolean(0); +// Returns: false +util.isBoolean(false); +// Returns: true

                                                                                                                                                                                                                                                                                          util.isBuffer(object)#

                                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                                          Stability: 0 - Deprecated: Use Buffer.isBuffer() instead.

                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                          Stability: 0 - Deprecated: Use Buffer.isBuffer() instead.

                                                                                                                                                                                                                                                                                          Returns true if the given object is a Buffer. Otherwise, returns false.

                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                          -util.isBuffer({ length: 0 });
                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                          +util.isBuffer({ length: 0 });
                                                                                                                                                                                                                                                                                          +// Returns: false
                                                                                                                                                                                                                                                                                           util.isBuffer([]);
                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                          -util.isBuffer(Buffer.from('hello world'));
                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                          +// Returns: false +util.isBuffer(Buffer.from('hello world')); +// Returns: true

                                                                                                                                                                                                                                                                                          util.isDate(object)#

                                                                                                                                                                                                                                                                                        Returns true if the given object is a Date. Otherwise, returns false.

                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                        -util.isDate(new Date());
                                                                                                                                                                                                                                                                                        -// Returns: true
                                                                                                                                                                                                                                                                                        -util.isDate(Date());
                                                                                                                                                                                                                                                                                        -// false (without 'new' returns a String)
                                                                                                                                                                                                                                                                                        +util.isDate(new Date());
                                                                                                                                                                                                                                                                                        +// Returns: true
                                                                                                                                                                                                                                                                                        +util.isDate(Date());
                                                                                                                                                                                                                                                                                        +// false (without 'new' returns a String)
                                                                                                                                                                                                                                                                                         util.isDate({});
                                                                                                                                                                                                                                                                                        -// Returns: false
                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                        +// Returns: false

                                                                                                                                                                                                                                                                                        util.isError(object)#

                                                                                                                                                                                                                                                                                      Returns true if the given object is an Error. Otherwise, returns false.

                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                      -util.isError(new Error());
                                                                                                                                                                                                                                                                                      -// Returns: true
                                                                                                                                                                                                                                                                                      -util.isError(new TypeError());
                                                                                                                                                                                                                                                                                      -// Returns: true
                                                                                                                                                                                                                                                                                      -util.isError({ name: 'Error', message: 'an error occurred' });
                                                                                                                                                                                                                                                                                      -// Returns: false
                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                      +util.isError(new Error()); +// Returns: true +util.isError(new TypeError()); +// Returns: true +util.isError({ name: 'Error', message: 'an error occurred' }); +// Returns: false

                                                                                                                                                                                                                                                                                      This method relies on Object.prototype.toString() behavior. It is possible to obtain an incorrect result when the object argument manipulates @@toStringTag.

                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                                      -const obj = { name: 'Error', message: 'an error occurred' };
                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                                      +const obj = { name: 'Error', message: 'an error occurred' };
                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                       util.isError(obj);
                                                                                                                                                                                                                                                                                      -// Returns: false
                                                                                                                                                                                                                                                                                      -obj[Symbol.toStringTag] = 'Error';
                                                                                                                                                                                                                                                                                      +// Returns: false
                                                                                                                                                                                                                                                                                      +obj[Symbol.toStringTag] = 'Error';
                                                                                                                                                                                                                                                                                       util.isError(obj);
                                                                                                                                                                                                                                                                                      -// Returns: true
                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                      +// Returns: true

                                                                                                                                                                                                                                                                                      util.isFunction(object)#

                                                                                                                                                                                                                                                                                    Returns true if the given object is a Function. Otherwise, returns false.

                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                    -function Foo() {}
                                                                                                                                                                                                                                                                                    -const Bar = () => {};
                                                                                                                                                                                                                                                                                    +function Foo() {}
                                                                                                                                                                                                                                                                                    +const Bar = () => {};
                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                     util.isFunction({});
                                                                                                                                                                                                                                                                                    -// Returns: false
                                                                                                                                                                                                                                                                                    +// Returns: false
                                                                                                                                                                                                                                                                                     util.isFunction(Foo);
                                                                                                                                                                                                                                                                                    -// Returns: true
                                                                                                                                                                                                                                                                                    +// Returns: true
                                                                                                                                                                                                                                                                                     util.isFunction(Bar);
                                                                                                                                                                                                                                                                                    -// Returns: true
                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                    +// Returns: true

                                                                                                                                                                                                                                                                                    util.isNull(object)#

                                                                                                                                                                                                                                                                                  Returns true if the given object is strictly null. Otherwise, returns false.

                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                  -util.isNull(0);
                                                                                                                                                                                                                                                                                  -// Returns: false
                                                                                                                                                                                                                                                                                  -util.isNull(undefined);
                                                                                                                                                                                                                                                                                  -// Returns: false
                                                                                                                                                                                                                                                                                  -util.isNull(null);
                                                                                                                                                                                                                                                                                  -// Returns: true
                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                  +util.isNull(0); +// Returns: false +util.isNull(undefined); +// Returns: false +util.isNull(null); +// Returns: true

                                                                                                                                                                                                                                                                                  util.isNullOrUndefined(object)#

                                                                                                                                                                                                                                                                                Returns true if the given object is null or undefined. Otherwise, returns false.

                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                -util.isNullOrUndefined(0);
                                                                                                                                                                                                                                                                                -// Returns: false
                                                                                                                                                                                                                                                                                -util.isNullOrUndefined(undefined);
                                                                                                                                                                                                                                                                                -// Returns: true
                                                                                                                                                                                                                                                                                -util.isNullOrUndefined(null);
                                                                                                                                                                                                                                                                                -// Returns: true
                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                +util.isNullOrUndefined(0); +// Returns: false +util.isNullOrUndefined(undefined); +// Returns: true +util.isNullOrUndefined(null); +// Returns: true

                                                                                                                                                                                                                                                                                util.isNumber(object)#

                                                                                                                                                                                                                                                                              • Returns: <boolean>

                                                                                                                                                                                                                                                                              Returns true if the given object is a Number. Otherwise, returns false.

                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                              const util = require('util');
                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                              const util = require('util');
                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                              -util.isNumber(false);
                                                                                                                                                                                                                                                                              -// Returns: false
                                                                                                                                                                                                                                                                              -util.isNumber(Infinity);
                                                                                                                                                                                                                                                                              -// Returns: true
                                                                                                                                                                                                                                                                              -util.isNumber(0);
                                                                                                                                                                                                                                                                              -// Returns: true
                                                                                                                                                                                                                                                                              -util.isNumber(NaN);
                                                                                                                                                                                                                                                                              -// Returns: true
                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                              +util.isNumber(false); +// Returns: false +util.isNumber(Infinity); +// Returns: true +util.isNumber(0); +// Returns: true +util.isNumber(NaN); +// Returns: true

                                                                                                                                                                                                                                                                              util.isObject(object)#

                                                                                                                                                                                                                                                                            Returns true if the given object is a primitive type. Otherwise, returns false.

                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                            const util = require('util');
                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                            const util = require('util');
                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                            -util.isPrimitive(5);
                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                            -util.isPrimitive('foo');
                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                            -util.isPrimitive(false);
                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                            -util.isPrimitive(null);
                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                            -util.isPrimitive(undefined);
                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                            +util.isPrimitive(5);
                                                                                                                                                                                                                                                                            +// Returns: true
                                                                                                                                                                                                                                                                            +util.isPrimitive('foo');
                                                                                                                                                                                                                                                                            +// Returns: true
                                                                                                                                                                                                                                                                            +util.isPrimitive(false);
                                                                                                                                                                                                                                                                            +// Returns: true
                                                                                                                                                                                                                                                                            +util.isPrimitive(null);
                                                                                                                                                                                                                                                                            +// Returns: true
                                                                                                                                                                                                                                                                            +util.isPrimitive(undefined);
                                                                                                                                                                                                                                                                            +// Returns: true
                                                                                                                                                                                                                                                                             util.isPrimitive({});
                                                                                                                                                                                                                                                                            -// Returns: false
                                                                                                                                                                                                                                                                            -util.isPrimitive(() => {});
                                                                                                                                                                                                                                                                            -// Returns: false
                                                                                                                                                                                                                                                                            -util.isPrimitive(/^$/);
                                                                                                                                                                                                                                                                            -// Returns: false
                                                                                                                                                                                                                                                                            -util.isPrimitive(new Date());
                                                                                                                                                                                                                                                                            -// Returns: false
                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                            +// Returns: false +util.isPrimitive(() => {}); +// Returns: false +util.isPrimitive(/^$/); +// Returns: false +util.isPrimitive(new Date()); +// Returns: false

                                                                                                                                                                                                                                                                            util.isRegExp(object)#

                                                                                                                                                                                                                                                                          • Returns: <boolean>

                                                                                                                                                                                                                                                                          Returns true if the given object is a RegExp. Otherwise, returns false.

                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                          -util.isRegExp(/some regexp/);
                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                          -util.isRegExp(new RegExp('another regexp'));
                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                          +util.isRegExp(/some regexp/);
                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                          +util.isRegExp(new RegExp('another regexp'));
                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                           util.isRegExp({});
                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          +// Returns: false

                                                                                                                                                                                                                                                                          util.isString(object)#

                                                                                                                                                                                                                                                                        • Returns: <boolean>

                                                                                                                                                                                                                                                                        Returns true if the given object is a string. Otherwise, returns false.

                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                        -util.isString('');
                                                                                                                                                                                                                                                                        -// Returns: true
                                                                                                                                                                                                                                                                        -util.isString('foo');
                                                                                                                                                                                                                                                                        -// Returns: true
                                                                                                                                                                                                                                                                        -util.isString(String('foo'));
                                                                                                                                                                                                                                                                        -// Returns: true
                                                                                                                                                                                                                                                                        -util.isString(5);
                                                                                                                                                                                                                                                                        -// Returns: false
                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                        +util.isString(''); +// Returns: true +util.isString('foo'); +// Returns: true +util.isString(String('foo')); +// Returns: true +util.isString(5); +// Returns: false

                                                                                                                                                                                                                                                                        util.isSymbol(object)#

                                                                                                                                                                                                                                                                      • Returns: <boolean>

                                                                                                                                                                                                                                                                      Returns true if the given object is a Symbol. Otherwise, returns false.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -util.isSymbol(5);
                                                                                                                                                                                                                                                                      -// Returns: false
                                                                                                                                                                                                                                                                      -util.isSymbol('foo');
                                                                                                                                                                                                                                                                      -// Returns: false
                                                                                                                                                                                                                                                                      -util.isSymbol(Symbol('foo'));
                                                                                                                                                                                                                                                                      -// Returns: true
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +util.isSymbol(5); +// Returns: false +util.isSymbol('foo'); +// Returns: false +util.isSymbol(Symbol('foo')); +// Returns: true

                                                                                                                                                                                                                                                                      util.isUndefined(object)#

                                                                                                                                                                                                                                                                    • Returns: <boolean>

                                                                                                                                                                                                                                                                    Returns true if the given object is undefined. Otherwise, returns false.

                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                    -const foo = undefined;
                                                                                                                                                                                                                                                                    -util.isUndefined(5);
                                                                                                                                                                                                                                                                    -// Returns: false
                                                                                                                                                                                                                                                                    +const foo = undefined;
                                                                                                                                                                                                                                                                    +util.isUndefined(5);
                                                                                                                                                                                                                                                                    +// Returns: false
                                                                                                                                                                                                                                                                     util.isUndefined(foo);
                                                                                                                                                                                                                                                                    -// Returns: true
                                                                                                                                                                                                                                                                    -util.isUndefined(null);
                                                                                                                                                                                                                                                                    -// Returns: false
                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    +// Returns: true +util.isUndefined(null); +// Returns: false

                                                                                                                                                                                                                                                                    util.log(string)#

                                                                                                                                                                                                                                                                  The util.log() method prints the given string to stdout with an included timestamp.

                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                  -util.log('Timestamped message.');
                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                  +util.log('Timestamped message.');

                                                                                                                                                                                                                                                                  V8#

                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                  Source Code: lib/v8.js

                                                                                                                                                                                                                                                                  The v8 module exposes APIs that are specific to the version of V8 built into the Node.js binary. It can be accessed using:

                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                  const v8 = require('v8');
                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  const v8 = require('v8');

                                                                                                                                                                                                                                                                  The APIs and implementation are subject to change at any time.

                                                                                                                                                                                                                                                                  v8.cachedDataVersionTag()#

                                                                                                                                                                                                                                                                Returns an integer representing a "version tag" derived from the V8 version, command line flags and detected CPU features. This is useful for determining -whether a vm.Script cachedData buffer is compatible with this instance +whether a vm.Script cachedData buffer is compatible with this instance of V8.

                                                                                                                                                                                                                                                                v8.getHeapSpaceStatistics()#

                                                                                                                                                                                                                                                              [
                                                                                                                                                                                                                                                                 {
                                                                                                                                                                                                                                                              -    "space_name": "new_space",
                                                                                                                                                                                                                                                              -    "space_size": 2063872,
                                                                                                                                                                                                                                                              -    "space_used_size": 951112,
                                                                                                                                                                                                                                                              -    "space_available_size": 80824,
                                                                                                                                                                                                                                                              -    "physical_space_size": 2063872
                                                                                                                                                                                                                                                              +    "space_name": "new_space",
                                                                                                                                                                                                                                                              +    "space_size": 2063872,
                                                                                                                                                                                                                                                              +    "space_used_size": 951112,
                                                                                                                                                                                                                                                              +    "space_available_size": 80824,
                                                                                                                                                                                                                                                              +    "physical_space_size": 2063872
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                                                 {
                                                                                                                                                                                                                                                              -    "space_name": "old_space",
                                                                                                                                                                                                                                                              -    "space_size": 3090560,
                                                                                                                                                                                                                                                              -    "space_used_size": 2493792,
                                                                                                                                                                                                                                                              -    "space_available_size": 0,
                                                                                                                                                                                                                                                              -    "physical_space_size": 3090560
                                                                                                                                                                                                                                                              +    "space_name": "old_space",
                                                                                                                                                                                                                                                              +    "space_size": 3090560,
                                                                                                                                                                                                                                                              +    "space_used_size": 2493792,
                                                                                                                                                                                                                                                              +    "space_available_size": 0,
                                                                                                                                                                                                                                                              +    "physical_space_size": 3090560
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                                                 {
                                                                                                                                                                                                                                                              -    "space_name": "code_space",
                                                                                                                                                                                                                                                              -    "space_size": 1260160,
                                                                                                                                                                                                                                                              -    "space_used_size": 644256,
                                                                                                                                                                                                                                                              -    "space_available_size": 960,
                                                                                                                                                                                                                                                              -    "physical_space_size": 1260160
                                                                                                                                                                                                                                                              +    "space_name": "code_space",
                                                                                                                                                                                                                                                              +    "space_size": 1260160,
                                                                                                                                                                                                                                                              +    "space_used_size": 644256,
                                                                                                                                                                                                                                                              +    "space_available_size": 960,
                                                                                                                                                                                                                                                              +    "physical_space_size": 1260160
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                                                 {
                                                                                                                                                                                                                                                              -    "space_name": "map_space",
                                                                                                                                                                                                                                                              -    "space_size": 1094160,
                                                                                                                                                                                                                                                              -    "space_used_size": 201608,
                                                                                                                                                                                                                                                              -    "space_available_size": 0,
                                                                                                                                                                                                                                                              -    "physical_space_size": 1094160
                                                                                                                                                                                                                                                              +    "space_name": "map_space",
                                                                                                                                                                                                                                                              +    "space_size": 1094160,
                                                                                                                                                                                                                                                              +    "space_used_size": 201608,
                                                                                                                                                                                                                                                              +    "space_available_size": 0,
                                                                                                                                                                                                                                                              +    "physical_space_size": 1094160
                                                                                                                                                                                                                                                                 },
                                                                                                                                                                                                                                                                 {
                                                                                                                                                                                                                                                              -    "space_name": "large_object_space",
                                                                                                                                                                                                                                                              -    "space_size": 0,
                                                                                                                                                                                                                                                              -    "space_used_size": 0,
                                                                                                                                                                                                                                                              -    "space_available_size": 1490980608,
                                                                                                                                                                                                                                                              -    "physical_space_size": 0
                                                                                                                                                                                                                                                              +    "space_name": "large_object_space",
                                                                                                                                                                                                                                                              +    "space_size": 0,
                                                                                                                                                                                                                                                              +    "space_used_size": 0,
                                                                                                                                                                                                                                                              +    "space_available_size": 1490980608,
                                                                                                                                                                                                                                                              +    "physical_space_size": 0
                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                              -]
                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              +]

                                                                                                                                                                                                                                                              v8.getHeapSnapshot()#

                                                                                                                                                                                                                                                            {
                                                                                                                                                                                                                                                            -  code_and_metadata_size: 212208,
                                                                                                                                                                                                                                                            -  bytecode_and_metadata_size: 161368,
                                                                                                                                                                                                                                                            -  external_script_source_size: 1410794
                                                                                                                                                                                                                                                            -}
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            + code_and_metadata_size: 212208, + bytecode_and_metadata_size: 161368, + external_script_source_size: 1410794 +}

                                                                                                                                                                                                                                                            v8.setFlagsFromString(flags)#

                                                                                                                                                                                                                                                          For example:

                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          const stream = zlib.createBrotliCompress({
                                                                                                                                                                                                                                                          -  chunkSize: 32 * 1024,
                                                                                                                                                                                                                                                          -  params: {
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          const stream = zlib.createBrotliCompress({
                                                                                                                                                                                                                                                          +  chunkSize: 32 * 1024,
                                                                                                                                                                                                                                                          +  params: {
                                                                                                                                                                                                                                                               [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,
                                                                                                                                                                                                                                                          -    [zlib.constants.BROTLI_PARAM_QUALITY]: 4,
                                                                                                                                                                                                                                                          +    [zlib.constants.BROTLI_PARAM_QUALITY]: 4,
                                                                                                                                                                                                                                                               [zlib.constants.BROTLI_PARAM_SIZE_HINT]: fs.statSync(inputFile).size
                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          +});

                                                                                                                                                                                                                                                          Class: zlib.BrotliCompress#

                                                                                                                                                                                                                                                        • options <zlib options>

                                                                                                                                                                                                                                                        Creates and returns a new Unzip object.

                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                        Convenience Methods#

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Convenience methods#

                                                                                                                                                                                                                                                        All of these take a Buffer, TypedArray, DataView, ArrayBuffer or string as the first argument, an optional second argument @@ -63368,12 +64134,9 @@

                                                                                                                                                                                                                                                      • options <zlib options>

                                                                                                                                                                                                                                                      Decompress a chunk of data with Unzip.

                                                                                                                                                                                                                                                      - + - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/all.json nodejs-mozilla-12.22.12/doc/api/all.json --- nodejs-mozilla-12.18.1/doc/api/all.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/all.json 2022-04-05 07:17:04.000000000 +0000 @@ -1,8 +1,8 @@ { "miscs": [ { - "textRaw": "About this Documentation", - "name": "About this Documentation", + "textRaw": "About this documentation", + "name": "About this documentation", "introduced_in": "v0.10.0", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Welcome to the official API reference documentation for Node.js!

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js is a JavaScript runtime built on the V8 JavaScript engine.

                                                                                                                                                                                                                                                      ", @@ -15,13 +15,13 @@ "displayName": "Contributing" }, { - "textRaw": "Stability Index", - "name": "Stability Index", + "textRaw": "Stability index", + "name": "Stability index", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Throughout the documentation are indications of a section's stability. Some APIs\nare so proven and so relied upon that they are unlikely to ever change at all.\nOthers are brand new and experimental, or known to be hazardous.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stability indices are as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 0 - Deprecated. The feature may emit warnings. Backward\ncompatibility is not guaranteed.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 1 - Experimental. The feature is not subject to\nSemantic Versioning rules. Non-backward compatible changes or removal may\noccur in any future release. Use of the feature is not recommended in\nproduction environments.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 2 - Stable. Compatibility with the npm ecosystem is a high\npriority.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use caution when making use of Experimental features, particularly within\nmodules. End users may not be aware that experimental features are being used.\nBugs or behavior changes may surprise end users when Experimental API\nmodifications occur. To avoid surprises, use of an Experimental feature may need\na command-line flag. Experimental features may also emit a warning.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Throughout the documentation are indications of a section's stability. Some APIs\nare so proven and so relied upon that they are unlikely to ever change at all.\nOthers are brand new and experimental, or known to be hazardous.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stability indices are as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 0 - Deprecated. The feature may emit warnings. Backward\ncompatibility is not guaranteed.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 1 - Experimental. The feature is not subject to\nSemantic Versioning rules. Non-backward compatible changes or removal may\noccur in any future release. Use of the feature is not recommended in\nproduction environments.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 2 - Stable. Compatibility with the npm ecosystem is a high\npriority.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use caution when making use of Experimental features, particularly within\nmodules. Users may not be aware that experimental features are being used.\nBugs or behavior changes may surprise users when Experimental API\nmodifications occur. To avoid surprises, use of an Experimental feature may need\na command-line flag. Experimental features may also emit a warning.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "JSON Output", + "textRaw": "JSON output", "name": "json_output", "meta": { "added": [ @@ -31,7 +31,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Every .html document has a corresponding .json document. This is for IDEs\nand other utilities that consume the documentation.

                                                                                                                                                                                                                                                      ", "type": "misc", - "displayName": "JSON Output" + "displayName": "JSON output" }, { "textRaw": "System calls and man pages", @@ -43,26 +43,35 @@ ] }, { - "textRaw": "C++ Addons", - "name": "C++ Addons", + "textRaw": "C++ addons", + "name": "C++ addons", "introduced_in": "v0.10.0", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Addons are dynamically-linked shared objects written in C++. The\nrequire() function can load Addons as ordinary Node.js modules.\nAddons provide an interface between JavaScript and C/C++ libraries.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are three options for implementing Addons: N-API, nan, or direct\nuse of internal V8, libuv and Node.js libraries. Unless there is a need for\ndirect access to functionality which is not exposed by N-API, use N-API.\nRefer to C/C++ Addons with N-API for more information on N-API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When not using N-API, implementing Addons is complicated,\ninvolving knowledge of several components and APIs:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        V8: the C++ library Node.js currently uses to provide the\nJavaScript implementation. V8 provides the mechanisms for creating objects,\ncalling functions, etc. V8's API is documented mostly in the\nv8.h header file (deps/v8/include/v8.h in the Node.js source\ntree), which is also available online.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        libuv: The C library that implements the Node.js event loop, its worker\nthreads and all of the asynchronous behaviors of the platform. It also\nserves as a cross-platform abstraction library, giving easy, POSIX-like\naccess across all major operating systems to many common system tasks, such\nas interacting with the filesystem, sockets, timers, and system events. libuv\nalso provides a pthreads-like threading abstraction that may be used to\npower more sophisticated asynchronous Addons that need to move beyond the\nstandard event loop. Addon authors are encouraged to think about how to\navoid blocking the event loop with I/O or other time-intensive tasks by\noff-loading work via libuv to non-blocking system operations, worker threads\nor a custom use of libuv's threads.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Internal Node.js libraries. Node.js itself exports C++ APIs that Addons can\nuse, the most important of which is the node::ObjectWrap class.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Node.js includes other statically linked libraries including OpenSSL. These\nother libraries are located in the deps/ directory in the Node.js source\ntree. Only the libuv, OpenSSL, V8 and zlib symbols are purposefully\nre-exported by Node.js and may be used to various extents by Addons. See\nLinking to libraries included with Node.js for additional information.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All of the following examples are available for download and may\nbe used as the starting-point for an Addon.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Addons are dynamically-linked shared objects written in C++. The\nrequire() function can load addons as ordinary Node.js modules.\nAddons provide an interface between JavaScript and C/C++ libraries.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are three options for implementing addons: N-API, nan, or direct\nuse of internal V8, libuv and Node.js libraries. Unless there is a need for\ndirect access to functionality which is not exposed by N-API, use N-API.\nRefer to C/C++ addons with N-API for more information on N-API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When not using N-API, implementing addons is complicated,\ninvolving knowledge of several components and APIs:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        V8: the C++ library Node.js uses to provide the\nJavaScript implementation. V8 provides the mechanisms for creating objects,\ncalling functions, etc. V8's API is documented mostly in the\nv8.h header file (deps/v8/include/v8.h in the Node.js source\ntree), which is also available online.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        libuv: The C library that implements the Node.js event loop, its worker\nthreads and all of the asynchronous behaviors of the platform. It also\nserves as a cross-platform abstraction library, giving easy, POSIX-like\naccess across all major operating systems to many common system tasks, such\nas interacting with the filesystem, sockets, timers, and system events. libuv\nalso provides a pthreads-like threading abstraction that may be used to\npower more sophisticated asynchronous addons that need to move beyond the\nstandard event loop. Addon authors are encouraged to think about how to\navoid blocking the event loop with I/O or other time-intensive tasks by\noff-loading work via libuv to non-blocking system operations, worker threads\nor a custom use of libuv's threads.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Internal Node.js libraries. Node.js itself exports C++ APIs that addons can\nuse, the most important of which is the node::ObjectWrap class.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Node.js includes other statically linked libraries including OpenSSL. These\nother libraries are located in the deps/ directory in the Node.js source\ntree. Only the libuv, OpenSSL, V8 and zlib symbols are purposefully\nre-exported by Node.js and may be used to various extents by addons. See\nLinking to libraries included with Node.js for additional information.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All of the following examples are available for download and may\nbe used as the starting-point for an addon.

                                                                                                                                                                                                                                                      ", "miscs": [ { "textRaw": "Hello world", "name": "hello_world", - "desc": "

                                                                                                                                                                                                                                                      This \"Hello world\" example is a simple Addon, written in C++, that is the\nequivalent of the following JavaScript code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      module.exports.hello = () => 'world';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      First, create the file hello.cc:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // hello.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\nvoid Method(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n  args.GetReturnValue().Set(String::NewFromUtf8(\n      isolate, \"world\", NewStringType::kNormal).ToLocalChecked());\n}\n\nvoid Initialize(Local<Object> exports) {\n  NODE_SET_METHOD(exports, \"hello\", Method);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)\n\n}  // namespace demo\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Node.js Addons must export an initialization function following\nthe pattern:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      void Initialize(Local<Object> exports);\nNODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There is no semi-colon after NODE_MODULE as it's not a function (see\nnode.h).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The module_name must match the filename of the final binary (excluding\nthe .node suffix).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the hello.cc example, then, the initialization function is Initialize\nand the addon module name is addon.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When building addons with node-gyp, using the macro NODE_GYP_MODULE_NAME as\nthe first parameter of NODE_MODULE() will ensure that the name of the final\nbinary will be passed to NODE_MODULE().

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      This \"Hello world\" example is a simple addon, written in C++, that is the\nequivalent of the following JavaScript code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      module.exports.hello = () => 'world';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      First, create the file hello.cc:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // hello.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\nvoid Method(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n  args.GetReturnValue().Set(String::NewFromUtf8(\n      isolate, \"world\", NewStringType::kNormal).ToLocalChecked());\n}\n\nvoid Initialize(Local<Object> exports) {\n  NODE_SET_METHOD(exports, \"hello\", Method);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)\n\n}  // namespace demo\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Node.js addons must export an initialization function following\nthe pattern:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      void Initialize(Local<Object> exports);\nNODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There is no semi-colon after NODE_MODULE as it's not a function (see\nnode.h).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The module_name must match the filename of the final binary (excluding\nthe .node suffix).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the hello.cc example, then, the initialization function is Initialize\nand the addon module name is addon.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When building addons with node-gyp, using the macro NODE_GYP_MODULE_NAME as\nthe first parameter of NODE_MODULE() will ensure that the name of the final\nbinary will be passed to NODE_MODULE().

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Context-aware addons", "name": "context-aware_addons", - "desc": "

                                                                                                                                                                                                                                                      There are environments in which Node.js addons may need to be loaded multiple\ntimes in multiple contexts. For example, the Electron runtime runs multiple\ninstances of Node.js in a single process. Each instance will have its own\nrequire() cache, and thus each instance will need a native addon to behave\ncorrectly when loaded via require(). From the addon's perspective, this means\nthat it must support multiple initializations.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A context-aware addon can be constructed by using the macro\nNODE_MODULE_INITIALIZER, which expands to the name of a function which Node.js\nwill expect to find when it loads an addon. An addon can thus be initialized as\nin the following example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      using namespace v8;\n\nextern \"C\" NODE_MODULE_EXPORT void\nNODE_MODULE_INITIALIZER(Local<Object> exports,\n                        Local<Value> module,\n                        Local<Context> context) {\n  /* Perform addon initialization steps here. */\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Another option is to use the macro NODE_MODULE_INIT(), which will also\nconstruct a context-aware addon. Unlike NODE_MODULE(), which is used to\nconstruct an addon around a given addon initializer function,\nNODE_MODULE_INIT() serves as the declaration of such an initializer to be\nfollowed by a function body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following three variables may be used inside the function body following an\ninvocation of NODE_MODULE_INIT():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Local<Object> exports,
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Local<Value> module, and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Local<Context> context
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The choice to build a context-aware addon carries with it the responsibility of\ncarefully managing global static data. Since the addon may be loaded multiple\ntimes, potentially even from different threads, any global static data stored\nin the addon must be properly protected, and must not contain any persistent\nreferences to JavaScript objects. The reason for this is that JavaScript\nobjects are only valid in one context, and will likely cause a crash when\naccessed from the wrong context or from a different thread than the one on which\nthey were created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The context-aware addon can be structured to avoid global static data by\nperforming the following steps:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Define a class which will hold per-addon-instance data and which has a static\nmember of the form

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        ```C++\nstatic void DeleteInstance(void* data) {\n  // Cast `data` to an instance of the class and delete it.\n}\n```\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Heap-allocate an instance of this class in the addon initializer. This can be\naccomplished using the new keyword.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Call node::AddEnvironmentCleanupHook(), passing it the above-created\ninstance and a pointer to DeleteInstance(). This will ensure the instance is\ndeleted when the environment is torn down.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Store the instance of the class in a v8::External, and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Pass the v8::External to all methods exposed to JavaScript by passing it\nto v8::FunctionTemplate::New() or v8::Function::New() which creates the\nnative-backed JavaScript functions. The third parameter of\nv8::FunctionTemplate::New() or v8::Function::New() accepts the\nv8::External and makes it available in the native callback using the\nv8::FunctionCallbackInfo::Data() method.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This will ensure that the per-addon-instance data reaches each binding that can\nbe called from JavaScript. The per-addon-instance data must also be passed into\nany asynchronous callbacks the addon may create.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example illustrates the implementation of a context-aware addon:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #include <node.h>\n\nusing namespace v8;\n\nclass AddonData {\n public:\n  explicit AddonData(Isolate* isolate):\n      call_count(0) {\n    // Ensure this per-addon-instance data is deleted at environment cleanup.\n    node::AddEnvironmentCleanupHook(isolate, DeleteInstance, this);\n  }\n\n  // Per-addon data.\n  int call_count;\n\n  static void DeleteInstance(void* data) {\n    delete static_cast<AddonData*>(data);\n  }\n};\n\nstatic void Method(const v8::FunctionCallbackInfo<v8::Value>& info) {\n  // Retrieve the per-addon-instance data.\n  AddonData* data =\n      reinterpret_cast<AddonData*>(info.Data().As<External>()->Value());\n  data->call_count++;\n  info.GetReturnValue().Set((double)data->call_count);\n}\n\n// Initialize this addon to be context-aware.\nNODE_MODULE_INIT(/* exports, module, context */) {\n  Isolate* isolate = context->GetIsolate();\n\n  // Create a new instance of `AddonData` for this instance of the addon and\n  // tie its life cycle to that of the Node.js environment.\n  AddonData* data = new AddonData(isolate);\n\n  // Wrap the data in a `v8::External` so we can pass it to the method we\n  // expose.\n  Local<External> external = External::New(isolate, data);\n\n  // Expose the method `Method` to JavaScript, and make sure it receives the\n  // per-addon-instance data we created above by passing `external` as the\n  // third parameter to the `FunctionTemplate` constructor.\n  exports->Set(context,\n               String::NewFromUtf8(isolate, \"method\", NewStringType::kNormal)\n                  .ToLocalChecked(),\n               FunctionTemplate::New(isolate, Method, external)\n                  ->GetFunction(context).ToLocalChecked()).FromJust();\n}\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      There are environments in which Node.js addons may need to be loaded multiple\ntimes in multiple contexts. For example, the Electron runtime runs multiple\ninstances of Node.js in a single process. Each instance will have its own\nrequire() cache, and thus each instance will need a native addon to behave\ncorrectly when loaded via require(). From the addon's perspective, this means\nthat it must support multiple initializations.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A context-aware addon can be constructed by using the macro\nNODE_MODULE_INITIALIZER, which expands to the name of a function which Node.js\nwill expect to find when it loads an addon. An addon can thus be initialized as\nin the following example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      using namespace v8;\n\nextern \"C\" NODE_MODULE_EXPORT void\nNODE_MODULE_INITIALIZER(Local<Object> exports,\n                        Local<Value> module,\n                        Local<Context> context) {\n  /* Perform addon initialization steps here. */\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Another option is to use the macro NODE_MODULE_INIT(), which will also\nconstruct a context-aware addon. Unlike NODE_MODULE(), which is used to\nconstruct an addon around a given addon initializer function,\nNODE_MODULE_INIT() serves as the declaration of such an initializer to be\nfollowed by a function body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following three variables may be used inside the function body following an\ninvocation of NODE_MODULE_INIT():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Local<Object> exports,
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Local<Value> module, and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Local<Context> context
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The choice to build a context-aware addon carries with it the responsibility of\ncarefully managing global static data. Since the addon may be loaded multiple\ntimes, potentially even from different threads, any global static data stored\nin the addon must be properly protected, and must not contain any persistent\nreferences to JavaScript objects. The reason for this is that JavaScript\nobjects are only valid in one context, and will likely cause a crash when\naccessed from the wrong context or from a different thread than the one on which\nthey were created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The context-aware addon can be structured to avoid global static data by\nperforming the following steps:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Define a class which will hold per-addon-instance data and which has a static\nmember of the form\n
                                                                                                                                                                                                                                                        static void DeleteInstance(void* data) {\n  // Cast `data` to an instance of the class and delete it.\n}\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Heap-allocate an instance of this class in the addon initializer. This can be\naccomplished using the new keyword.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Call node::AddEnvironmentCleanupHook(), passing it the above-created\ninstance and a pointer to DeleteInstance(). This will ensure the instance is\ndeleted when the environment is torn down.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Store the instance of the class in a v8::External, and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Pass the v8::External to all methods exposed to JavaScript by passing it\nto v8::FunctionTemplate::New() or v8::Function::New() which creates the\nnative-backed JavaScript functions. The third parameter of\nv8::FunctionTemplate::New() or v8::Function::New() accepts the\nv8::External and makes it available in the native callback using the\nv8::FunctionCallbackInfo::Data() method.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This will ensure that the per-addon-instance data reaches each binding that can\nbe called from JavaScript. The per-addon-instance data must also be passed into\nany asynchronous callbacks the addon may create.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example illustrates the implementation of a context-aware addon:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #include <node.h>\n\nusing namespace v8;\n\nclass AddonData {\n public:\n  explicit AddonData(Isolate* isolate):\n      call_count(0) {\n    // Ensure this per-addon-instance data is deleted at environment cleanup.\n    node::AddEnvironmentCleanupHook(isolate, DeleteInstance, this);\n  }\n\n  // Per-addon data.\n  int call_count;\n\n  static void DeleteInstance(void* data) {\n    delete static_cast<AddonData*>(data);\n  }\n};\n\nstatic void Method(const v8::FunctionCallbackInfo<v8::Value>& info) {\n  // Retrieve the per-addon-instance data.\n  AddonData* data =\n      reinterpret_cast<AddonData*>(info.Data().As<External>()->Value());\n  data->call_count++;\n  info.GetReturnValue().Set((double)data->call_count);\n}\n\n// Initialize this addon to be context-aware.\nNODE_MODULE_INIT(/* exports, module, context */) {\n  Isolate* isolate = context->GetIsolate();\n\n  // Create a new instance of `AddonData` for this instance of the addon and\n  // tie its life cycle to that of the Node.js environment.\n  AddonData* data = new AddonData(isolate);\n\n  // Wrap the data in a `v8::External` so we can pass it to the method we\n  // expose.\n  Local<External> external = External::New(isolate, data);\n\n  // Expose the method `Method` to JavaScript, and make sure it receives the\n  // per-addon-instance data we created above by passing `external` as the\n  // third parameter to the `FunctionTemplate` constructor.\n  exports->Set(context,\n               String::NewFromUtf8(isolate, \"method\", NewStringType::kNormal)\n                  .ToLocalChecked(),\n               FunctionTemplate::New(isolate, Method, external)\n                  ->GetFunction(context).ToLocalChecked()).FromJust();\n}\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Worker support", "name": "worker_support", - "desc": "

                                                                                                                                                                                                                                                      In order to be loaded from multiple Node.js environments,\nsuch as a main thread and a Worker thread, an add-on needs to either:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Be an N-API addon, or
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Be declared as context-aware using NODE_MODULE_INIT() as described above
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to support Worker threads, addons need to clean up any resources\nthey may have allocated when such a thread exists. This can be achieved through\nthe usage of the AddEnvironmentCleanupHook() function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      void AddEnvironmentCleanupHook(v8::Isolate* isolate,\n                               void (*fun)(void* arg),\n                               void* arg);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function adds a hook that will run before a given Node.js instance shuts\ndown. If necessary, such hooks can be removed using\nRemoveEnvironmentCleanupHook() before they are run, which has the same\nsignature. Callbacks are run in last-in first-out order.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following addon.cc uses AddEnvironmentCleanupHook:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.cc\n#include <assert.h>\n#include <stdlib.h>\n#include <node.h>\n\nusing node::AddEnvironmentCleanupHook;\nusing v8::HandleScope;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::Object;\n\n// Note: In a real-world application, do not rely on static/global data.\nstatic char cookie[] = \"yum yum\";\nstatic int cleanup_cb1_called = 0;\nstatic int cleanup_cb2_called = 0;\n\nstatic void cleanup_cb1(void* arg) {\n  Isolate* isolate = static_cast<Isolate*>(arg);\n  HandleScope scope(isolate);\n  Local<Object> obj = Object::New(isolate);\n  assert(!obj.IsEmpty());  // assert VM is still alive\n  assert(obj->IsObject());\n  cleanup_cb1_called++;\n}\n\nstatic void cleanup_cb2(void* arg) {\n  assert(arg == static_cast<void*>(cookie));\n  cleanup_cb2_called++;\n}\n\nstatic void sanity_check(void*) {\n  assert(cleanup_cb1_called == 1);\n  assert(cleanup_cb2_called == 1);\n}\n\n// Initialize this addon to be context-aware.\nNODE_MODULE_INIT(/* exports, module, context */) {\n  Isolate* isolate = context->GetIsolate();\n\n  AddEnvironmentCleanupHook(isolate, sanity_check, nullptr);\n  AddEnvironmentCleanupHook(isolate, cleanup_cb2, cookie);\n  AddEnvironmentCleanupHook(isolate, cleanup_cb1, isolate);\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Test in JavaScript by running:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // test.js\nrequire('./build/Release/addon');\n
                                                                                                                                                                                                                                                      ", + "meta": { + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34572", + "description": "Cleanup hooks may now be asynchronous." + } + ] + }, + "desc": "

                                                                                                                                                                                                                                                      In order to be loaded from multiple Node.js environments,\nsuch as a main thread and a Worker thread, an add-on needs to either:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Be an N-API addon, or
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Be declared as context-aware using NODE_MODULE_INIT() as described above
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to support Worker threads, addons need to clean up any resources\nthey may have allocated when such a thread exists. This can be achieved through\nthe usage of the AddEnvironmentCleanupHook() function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      void AddEnvironmentCleanupHook(v8::Isolate* isolate,\n                               void (*fun)(void* arg),\n                               void* arg);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function adds a hook that will run before a given Node.js instance shuts\ndown. If necessary, such hooks can be removed before they are run using\nRemoveEnvironmentCleanupHook(), which has the same signature. Callbacks are\nrun in last-in first-out order.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If necessary, there is an additional pair of AddEnvironmentCleanupHook()\nand RemoveEnvironmentCleanupHook() overloads, where the cleanup hook takes a\ncallback function. This can be used for shutting down asynchronous resources,\nsuch as any libuv handles registered by the addon.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following addon.cc uses AddEnvironmentCleanupHook:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.cc\n#include <assert.h>\n#include <stdlib.h>\n#include <node.h>\n\nusing node::AddEnvironmentCleanupHook;\nusing v8::HandleScope;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::Object;\n\n// Note: In a real-world application, do not rely on static/global data.\nstatic char cookie[] = \"yum yum\";\nstatic int cleanup_cb1_called = 0;\nstatic int cleanup_cb2_called = 0;\n\nstatic void cleanup_cb1(void* arg) {\n  Isolate* isolate = static_cast<Isolate*>(arg);\n  HandleScope scope(isolate);\n  Local<Object> obj = Object::New(isolate);\n  assert(!obj.IsEmpty());  // assert VM is still alive\n  assert(obj->IsObject());\n  cleanup_cb1_called++;\n}\n\nstatic void cleanup_cb2(void* arg) {\n  assert(arg == static_cast<void*>(cookie));\n  cleanup_cb2_called++;\n}\n\nstatic void sanity_check(void*) {\n  assert(cleanup_cb1_called == 1);\n  assert(cleanup_cb2_called == 1);\n}\n\n// Initialize this addon to be context-aware.\nNODE_MODULE_INIT(/* exports, module, context */) {\n  Isolate* isolate = context->GetIsolate();\n\n  AddEnvironmentCleanupHook(isolate, sanity_check, nullptr);\n  AddEnvironmentCleanupHook(isolate, cleanup_cb2, cookie);\n  AddEnvironmentCleanupHook(isolate, cleanup_cb1, isolate);\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Test in JavaScript by running:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // test.js\nrequire('./build/Release/addon');\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Worker support" } @@ -73,60 +82,60 @@ { "textRaw": "Building", "name": "building", - "desc": "

                                                                                                                                                                                                                                                      Once the source code has been written, it must be compiled into the binary\naddon.node file. To do so, create a file called binding.gyp in the\ntop-level of the project describing the build configuration of the module\nusing a JSON-like format. This file is used by node-gyp, a tool written\nspecifically to compile Node.js Addons.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"targets\": [\n    {\n      \"target_name\": \"addon\",\n      \"sources\": [ \"hello.cc\" ]\n    }\n  ]\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A version of the node-gyp utility is bundled and distributed with\nNode.js as part of npm. This version is not made directly available for\ndevelopers to use and is intended only to support the ability to use the\nnpm install command to compile and install Addons. Developers who wish to\nuse node-gyp directly can install it using the command\nnpm install -g node-gyp. See the node-gyp installation instructions for\nmore information, including platform-specific requirements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the binding.gyp file has been created, use node-gyp configure to\ngenerate the appropriate project build files for the current platform. This\nwill generate either a Makefile (on Unix platforms) or a vcxproj file\n(on Windows) in the build/ directory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Next, invoke the node-gyp build command to generate the compiled addon.node\nfile. This will be put into the build/Release/ directory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using npm install to install a Node.js Addon, npm uses its own bundled\nversion of node-gyp to perform this same set of actions, generating a\ncompiled version of the Addon for the user's platform on demand.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once built, the binary Addon can be used from within Node.js by pointing\nrequire() to the built addon.node module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // hello.js\nconst addon = require('./build/Release/addon');\n\nconsole.log(addon.hello());\n// Prints: 'world'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because the exact path to the compiled Addon binary can vary depending on how\nit is compiled (i.e. sometimes it may be in ./build/Debug/), Addons can use\nthe bindings package to load the compiled module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While the bindings package implementation is more sophisticated in how it\nlocates Addon modules, it is essentially using a try…catch pattern similar to:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      try {\n  return require('./build/Release/addon.node');\n} catch (err) {\n  return require('./build/Debug/addon.node');\n}\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Once the source code has been written, it must be compiled into the binary\naddon.node file. To do so, create a file called binding.gyp in the\ntop-level of the project describing the build configuration of the module\nusing a JSON-like format. This file is used by node-gyp, a tool written\nspecifically to compile Node.js addons.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"targets\": [\n    {\n      \"target_name\": \"addon\",\n      \"sources\": [ \"hello.cc\" ]\n    }\n  ]\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A version of the node-gyp utility is bundled and distributed with\nNode.js as part of npm. This version is not made directly available for\ndevelopers to use and is intended only to support the ability to use the\nnpm install command to compile and install addons. Developers who wish to\nuse node-gyp directly can install it using the command\nnpm install -g node-gyp. See the node-gyp installation instructions for\nmore information, including platform-specific requirements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the binding.gyp file has been created, use node-gyp configure to\ngenerate the appropriate project build files for the current platform. This\nwill generate either a Makefile (on Unix platforms) or a vcxproj file\n(on Windows) in the build/ directory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Next, invoke the node-gyp build command to generate the compiled addon.node\nfile. This will be put into the build/Release/ directory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using npm install to install a Node.js addon, npm uses its own bundled\nversion of node-gyp to perform this same set of actions, generating a\ncompiled version of the addon for the user's platform on demand.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once built, the binary addon can be used from within Node.js by pointing\nrequire() to the built addon.node module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // hello.js\nconst addon = require('./build/Release/addon');\n\nconsole.log(addon.hello());\n// Prints: 'world'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because the exact path to the compiled addon binary can vary depending on how\nit is compiled (i.e. sometimes it may be in ./build/Debug/), addons can use\nthe bindings package to load the compiled module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While the bindings package implementation is more sophisticated in how it\nlocates addon modules, it is essentially using a try…catch pattern similar to:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      try {\n  return require('./build/Release/addon.node');\n} catch (err) {\n  return require('./build/Debug/addon.node');\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Building" }, { "textRaw": "Linking to libraries included with Node.js", "name": "linking_to_libraries_included_with_node.js", - "desc": "

                                                                                                                                                                                                                                                      Node.js uses statically linked libraries such as V8, libuv and OpenSSL. All\nAddons are required to link to V8 and may link to any of the other dependencies\nas well. Typically, this is as simple as including the appropriate\n#include <...> statements (e.g. #include <v8.h>) and node-gyp will locate\nthe appropriate headers automatically. However, there are a few caveats to be\naware of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        When node-gyp runs, it will detect the specific release version of Node.js\nand download either the full source tarball or just the headers. If the full\nsource is downloaded, Addons will have complete access to the full set of\nNode.js dependencies. However, if only the Node.js headers are downloaded, then\nonly the symbols exported by Node.js will be available.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        node-gyp can be run using the --nodedir flag pointing at a local Node.js\nsource image. Using this option, the Addon will have access to the full set of\ndependencies.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Node.js uses statically linked libraries such as V8, libuv and OpenSSL. All\naddons are required to link to V8 and may link to any of the other dependencies\nas well. Typically, this is as simple as including the appropriate\n#include <...> statements (e.g. #include <v8.h>) and node-gyp will locate\nthe appropriate headers automatically. However, there are a few caveats to be\naware of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        When node-gyp runs, it will detect the specific release version of Node.js\nand download either the full source tarball or just the headers. If the full\nsource is downloaded, addons will have complete access to the full set of\nNode.js dependencies. However, if only the Node.js headers are downloaded, then\nonly the symbols exported by Node.js will be available.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        node-gyp can be run using the --nodedir flag pointing at a local Node.js\nsource image. Using this option, the addon will have access to the full set of\ndependencies.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Linking to libraries included with Node.js" }, { - "textRaw": "Loading Addons using `require()`", + "textRaw": "Loading addons using `require()`", "name": "loading_addons_using_`require()`", - "desc": "

                                                                                                                                                                                                                                                      The filename extension of the compiled Addon binary is .node (as opposed\nto .dll or .so). The require() function is written to look for\nfiles with the .node file extension and initialize those as dynamically-linked\nlibraries.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When calling require(), the .node extension can usually be\nomitted and Node.js will still find and initialize the Addon. One caveat,\nhowever, is that Node.js will first attempt to locate and load modules or\nJavaScript files that happen to share the same base name. For instance, if\nthere is a file addon.js in the same directory as the binary addon.node,\nthen require('addon') will give precedence to the addon.js file\nand load it instead.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The filename extension of the compiled addon binary is .node (as opposed\nto .dll or .so). The require() function is written to look for\nfiles with the .node file extension and initialize those as dynamically-linked\nlibraries.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When calling require(), the .node extension can usually be\nomitted and Node.js will still find and initialize the addon. One caveat,\nhowever, is that Node.js will first attempt to locate and load modules or\nJavaScript files that happen to share the same base name. For instance, if\nthere is a file addon.js in the same directory as the binary addon.node,\nthen require('addon') will give precedence to the addon.js file\nand load it instead.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Loading Addons using `require()`" + "displayName": "Loading addons using `require()`" } ], "type": "misc", "displayName": "Hello world" }, { - "textRaw": "Native Abstractions for Node.js", + "textRaw": "Native abstractions for Node.js", "name": "native_abstractions_for_node.js", - "desc": "

                                                                                                                                                                                                                                                      Each of the examples illustrated in this document make direct use of the\nNode.js and V8 APIs for implementing Addons. The V8 API can, and has, changed\ndramatically from one V8 release to the next (and one major Node.js release to\nthe next). With each change, Addons may need to be updated and recompiled in\norder to continue functioning. The Node.js release schedule is designed to\nminimize the frequency and impact of such changes but there is little that\nNode.js can do currently to ensure stability of the V8 APIs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Native Abstractions for Node.js (or nan) provide a set of tools that\nAddon developers are recommended to use to keep compatibility between past and\nfuture releases of V8 and Node.js. See the nan examples for an\nillustration of how it can be used.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Each of the examples illustrated in this document directly use the\nNode.js and V8 APIs for implementing addons. The V8 API can, and has, changed\ndramatically from one V8 release to the next (and one major Node.js release to\nthe next). With each change, addons may need to be updated and recompiled in\norder to continue functioning. The Node.js release schedule is designed to\nminimize the frequency and impact of such changes but there is little that\nNode.js can do to ensure stability of the V8 APIs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Native Abstractions for Node.js (or nan) provide a set of tools that\naddon developers are recommended to use to keep compatibility between past and\nfuture releases of V8 and Node.js. See the nan examples for an\nillustration of how it can be used.

                                                                                                                                                                                                                                                      ", "type": "misc", - "displayName": "Native Abstractions for Node.js" + "displayName": "Native abstractions for Node.js" }, { "textRaw": "N-API", "name": "n-api", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      N-API is an API for building native Addons. It is independent from\nthe underlying JavaScript runtime (e.g. V8) and is maintained as part of\nNode.js itself. This API will be Application Binary Interface (ABI) stable\nacross versions of Node.js. It is intended to insulate Addons from\nchanges in the underlying JavaScript engine and allow modules\ncompiled for one version to run on later versions of Node.js without\nrecompilation. Addons are built/packaged with the same approach/tools\noutlined in this document (node-gyp, etc.). The only difference is the\nset of APIs that are used by the native code. Instead of using the V8\nor Native Abstractions for Node.js APIs, the functions available\nin the N-API are used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Creating and maintaining an addon that benefits from the ABI stability\nprovided by N-API carries with it certain\nimplementation considerations.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To use N-API in the above \"Hello world\" example, replace the content of\nhello.cc with the following. All other instructions remain the same.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // hello.cc using N-API\n#include <node_api.h>\n\nnamespace demo {\n\nnapi_value Method(napi_env env, napi_callback_info args) {\n  napi_value greeting;\n  napi_status status;\n\n  status = napi_create_string_utf8(env, \"world\", NAPI_AUTO_LENGTH, &greeting);\n  if (status != napi_ok) return nullptr;\n  return greeting;\n}\n\nnapi_value init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_value fn;\n\n  status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn);\n  if (status != napi_ok) return nullptr;\n\n  status = napi_set_named_property(env, exports, \"hello\", fn);\n  if (status != napi_ok) return nullptr;\n  return exports;\n}\n\nNAPI_MODULE(NODE_GYP_MODULE_NAME, init)\n\n}  // namespace demo\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The functions available and how to use them are documented in\nC/C++ Addons with N-API.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      N-API is an API for building native addons. It is independent from\nthe underlying JavaScript runtime (e.g. V8) and is maintained as part of\nNode.js itself. This API will be Application Binary Interface (ABI) stable\nacross versions of Node.js. It is intended to insulate addons from\nchanges in the underlying JavaScript engine and allow modules\ncompiled for one version to run on later versions of Node.js without\nrecompilation. Addons are built/packaged with the same approach/tools\noutlined in this document (node-gyp, etc.). The only difference is the\nset of APIs that are used by the native code. Instead of using the V8\nor Native Abstractions for Node.js APIs, the functions available\nin the N-API are used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Creating and maintaining an addon that benefits from the ABI stability\nprovided by N-API carries with it certain\nimplementation considerations.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To use N-API in the above \"Hello world\" example, replace the content of\nhello.cc with the following. All other instructions remain the same.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // hello.cc using N-API\n#include <node_api.h>\n\nnamespace demo {\n\nnapi_value Method(napi_env env, napi_callback_info args) {\n  napi_value greeting;\n  napi_status status;\n\n  status = napi_create_string_utf8(env, \"world\", NAPI_AUTO_LENGTH, &greeting);\n  if (status != napi_ok) return nullptr;\n  return greeting;\n}\n\nnapi_value init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_value fn;\n\n  status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn);\n  if (status != napi_ok) return nullptr;\n\n  status = napi_set_named_property(env, exports, \"hello\", fn);\n  if (status != napi_ok) return nullptr;\n  return exports;\n}\n\nNAPI_MODULE(NODE_GYP_MODULE_NAME, init)\n\n}  // namespace demo\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The functions available and how to use them are documented in\nC/C++ addons with N-API.

                                                                                                                                                                                                                                                      ", "type": "misc", "displayName": "N-API" }, { "textRaw": "Addon examples", "name": "addon_examples", - "desc": "

                                                                                                                                                                                                                                                      Following are some example Addons intended to help developers get started. The\nexamples make use of the V8 APIs. Refer to the online V8 reference\nfor help with the various V8 calls, and V8's Embedder's Guide for an\nexplanation of several concepts used such as handles, scopes, function\ntemplates, etc.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Each of these examples using the following binding.gyp file:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"targets\": [\n    {\n      \"target_name\": \"addon\",\n      \"sources\": [ \"addon.cc\" ]\n    }\n  ]\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In cases where there is more than one .cc file, simply add the additional\nfilename to the sources array:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \"sources\": [\"addon.cc\", \"myexample.cc\"]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the binding.gyp file is ready, the example Addons can be configured and\nbuilt using node-gyp:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node-gyp configure build\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Following are some example addons intended to help developers get started. The\nexamples use the V8 APIs. Refer to the online V8 reference\nfor help with the various V8 calls, and V8's Embedder's Guide for an\nexplanation of several concepts used such as handles, scopes, function\ntemplates, etc.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Each of these examples using the following binding.gyp file:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"targets\": [\n    {\n      \"target_name\": \"addon\",\n      \"sources\": [ \"addon.cc\" ]\n    }\n  ]\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In cases where there is more than one .cc file, simply add the additional\nfilename to the sources array:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \"sources\": [\"addon.cc\", \"myexample.cc\"]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the binding.gyp file is ready, the example addons can be configured and\nbuilt using node-gyp:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node-gyp configure build\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Function arguments", "name": "function_arguments", - "desc": "

                                                                                                                                                                                                                                                      Addons will typically expose objects and functions that can be accessed from\nJavaScript running within Node.js. When functions are invoked from JavaScript,\nthe input arguments and return value must be mapped to and from the C/C++\ncode.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example illustrates how to read function arguments passed from\nJavaScript and how to return a result:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::Exception;\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Number;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\n// This is the implementation of the \"add\" method\n// Input arguments are passed using the\n// const FunctionCallbackInfo<Value>& args struct\nvoid Add(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n\n  // Check the number of arguments passed.\n  if (args.Length() < 2) {\n    // Throw an Error that is passed back to JavaScript\n    isolate->ThrowException(Exception::TypeError(\n        String::NewFromUtf8(isolate,\n                            \"Wrong number of arguments\",\n                            NewStringType::kNormal).ToLocalChecked()));\n    return;\n  }\n\n  // Check the argument types\n  if (!args[0]->IsNumber() || !args[1]->IsNumber()) {\n    isolate->ThrowException(Exception::TypeError(\n        String::NewFromUtf8(isolate,\n                            \"Wrong arguments\",\n                            NewStringType::kNormal).ToLocalChecked()));\n    return;\n  }\n\n  // Perform the operation\n  double value =\n      args[0].As<Number>()->Value() + args[1].As<Number>()->Value();\n  Local<Number> num = Number::New(isolate, value);\n\n  // Set the return value (using the passed in\n  // FunctionCallbackInfo<Value>&)\n  args.GetReturnValue().Set(num);\n}\n\nvoid Init(Local<Object> exports) {\n  NODE_SET_METHOD(exports, \"add\", Add);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Init)\n\n}  // namespace demo\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once compiled, the example Addon can be required and used from within Node.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // test.js\nconst addon = require('./build/Release/addon');\n\nconsole.log('This should be eight:', addon.add(3, 5));\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Addons will typically expose objects and functions that can be accessed from\nJavaScript running within Node.js. When functions are invoked from JavaScript,\nthe input arguments and return value must be mapped to and from the C/C++\ncode.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example illustrates how to read function arguments passed from\nJavaScript and how to return a result:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::Exception;\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Number;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\n// This is the implementation of the \"add\" method\n// Input arguments are passed using the\n// const FunctionCallbackInfo<Value>& args struct\nvoid Add(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n\n  // Check the number of arguments passed.\n  if (args.Length() < 2) {\n    // Throw an Error that is passed back to JavaScript\n    isolate->ThrowException(Exception::TypeError(\n        String::NewFromUtf8(isolate,\n                            \"Wrong number of arguments\",\n                            NewStringType::kNormal).ToLocalChecked()));\n    return;\n  }\n\n  // Check the argument types\n  if (!args[0]->IsNumber() || !args[1]->IsNumber()) {\n    isolate->ThrowException(Exception::TypeError(\n        String::NewFromUtf8(isolate,\n                            \"Wrong arguments\",\n                            NewStringType::kNormal).ToLocalChecked()));\n    return;\n  }\n\n  // Perform the operation\n  double value =\n      args[0].As<Number>()->Value() + args[1].As<Number>()->Value();\n  Local<Number> num = Number::New(isolate, value);\n\n  // Set the return value (using the passed in\n  // FunctionCallbackInfo<Value>&)\n  args.GetReturnValue().Set(num);\n}\n\nvoid Init(Local<Object> exports) {\n  NODE_SET_METHOD(exports, \"add\", Add);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Init)\n\n}  // namespace demo\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once compiled, the example addon can be required and used from within Node.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // test.js\nconst addon = require('./build/Release/addon');\n\nconsole.log('This should be eight:', addon.add(3, 5));\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Function arguments" }, { "textRaw": "Callbacks", "name": "callbacks", - "desc": "

                                                                                                                                                                                                                                                      It is common practice within Addons to pass JavaScript functions to a C++\nfunction and execute them from there. The following example illustrates how\nto invoke such callbacks:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::Context;\nusing v8::Function;\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Null;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\nvoid RunCallback(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n  Local<Context> context = isolate->GetCurrentContext();\n  Local<Function> cb = Local<Function>::Cast(args[0]);\n  const unsigned argc = 1;\n  Local<Value> argv[argc] = {\n      String::NewFromUtf8(isolate,\n                          \"hello world\",\n                          NewStringType::kNormal).ToLocalChecked() };\n  cb->Call(context, Null(isolate), argc, argv).ToLocalChecked();\n}\n\nvoid Init(Local<Object> exports, Local<Object> module) {\n  NODE_SET_METHOD(module, \"exports\", RunCallback);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Init)\n\n}  // namespace demo\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This example uses a two-argument form of Init() that receives the full\nmodule object as the second argument. This allows the Addon to completely\noverwrite exports with a single function instead of adding the function as a\nproperty of exports.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To test it, run the following JavaScript:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // test.js\nconst addon = require('./build/Release/addon');\n\naddon((msg) => {\n  console.log(msg);\n// Prints: 'hello world'\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In this example, the callback function is invoked synchronously.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      It is common practice within addons to pass JavaScript functions to a C++\nfunction and execute them from there. The following example illustrates how\nto invoke such callbacks:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.cc\n#include <node.h>\n\nnamespace demo {\n\nusing v8::Context;\nusing v8::Function;\nusing v8::FunctionCallbackInfo;\nusing v8::Isolate;\nusing v8::Local;\nusing v8::NewStringType;\nusing v8::Null;\nusing v8::Object;\nusing v8::String;\nusing v8::Value;\n\nvoid RunCallback(const FunctionCallbackInfo<Value>& args) {\n  Isolate* isolate = args.GetIsolate();\n  Local<Context> context = isolate->GetCurrentContext();\n  Local<Function> cb = Local<Function>::Cast(args[0]);\n  const unsigned argc = 1;\n  Local<Value> argv[argc] = {\n      String::NewFromUtf8(isolate,\n                          \"hello world\",\n                          NewStringType::kNormal).ToLocalChecked() };\n  cb->Call(context, Null(isolate), argc, argv).ToLocalChecked();\n}\n\nvoid Init(Local<Object> exports, Local<Object> module) {\n  NODE_SET_METHOD(module, \"exports\", RunCallback);\n}\n\nNODE_MODULE(NODE_GYP_MODULE_NAME, Init)\n\n}  // namespace demo\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This example uses a two-argument form of Init() that receives the full\nmodule object as the second argument. This allows the addon to completely\noverwrite exports with a single function instead of adding the function as a\nproperty of exports.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To test it, run the following JavaScript:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // test.js\nconst addon = require('./build/Release/addon');\n\naddon((msg) => {\n  console.log(msg);\n// Prints: 'hello world'\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In this example, the callback function is invoked synchronously.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Callbacks" }, @@ -178,19 +187,19 @@ "type": "misc", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      N-API (pronounced N as in the letter, followed by API)\nis an API for building native Addons. It is independent from\nthe underlying JavaScript runtime (for example, V8) and is maintained as part of\nNode.js itself. This API will be Application Binary Interface (ABI) stable\nacross versions of Node.js. It is intended to insulate Addons from\nchanges in the underlying JavaScript engine and allow modules\ncompiled for one major version to run on later major versions of Node.js without\nrecompilation. The ABI Stability guide provides a more in-depth explanation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Addons are built/packaged with the same approach/tools outlined in the section\ntitled C++ Addons. The only difference is the set of APIs that are used by\nthe native code. Instead of using the V8 or Native Abstractions for Node.js\nAPIs, the functions available in the N-API are used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      APIs exposed by N-API are generally used to create and manipulate\nJavaScript values. Concepts and operations generally map to ideas specified\nin the ECMA-262 Language Specification. The APIs have the following\nproperties:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • All N-API calls return a status code of type napi_status. This\nstatus indicates whether the API call succeeded or failed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The API's return value is passed via an out parameter.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • All JavaScript values are abstracted behind an opaque type named\nnapi_value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • In case of an error status code, additional information can be obtained\nusing napi_get_last_error_info. More information can be found in the error\nhandling section Error Handling.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The N-API is a C API that ensures ABI stability across Node.js versions\nand different compiler levels. A C++ API can be easier to use.\nTo support using C++, the project maintains a\nC++ wrapper module called node-addon-api.\nThis wrapper provides an inlineable C++ API. Binaries built\nwith node-addon-api will depend on the symbols for the N-API C-based\nfunctions exported by Node.js. node-addon-api is a more\nefficient way to write code that calls N-API. Take, for example, the\nfollowing node-addon-api code. The first section shows the\nnode-addon-api code and the second section shows what actually gets\nused in the addon.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Object obj = Object::New(env);\nobj[\"foo\"] = String::New(env, \"bar\");\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status;\nnapi_value object, string;\nstatus = napi_create_object(env, &object);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n\nstatus = napi_create_string_utf8(env, \"bar\", NAPI_AUTO_LENGTH, &string);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n\nstatus = napi_set_named_property(env, object, \"foo\", string);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The end result is that the addon only uses the exported C APIs. As a result,\nit still gets the benefits of the ABI stability provided by the C API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using node-addon-api instead of the C APIs, start with the API docs\nfor node-addon-api.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      N-API (pronounced N as in the letter, followed by API)\nis an API for building native Addons. It is independent from\nthe underlying JavaScript runtime (for example, V8) and is maintained as part of\nNode.js itself. This API will be Application Binary Interface (ABI) stable\nacross versions of Node.js. It is intended to insulate Addons from\nchanges in the underlying JavaScript engine and allow modules\ncompiled for one major version to run on later major versions of Node.js without\nrecompilation. The ABI Stability guide provides a more in-depth explanation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Addons are built/packaged with the same approach/tools outlined in the section\ntitled C++ Addons. The only difference is the set of APIs that are used by\nthe native code. Instead of using the V8 or Native Abstractions for Node.js\nAPIs, the functions available in the N-API are used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      APIs exposed by N-API are generally used to create and manipulate\nJavaScript values. Concepts and operations generally map to ideas specified\nin the ECMA-262 Language Specification. The APIs have the following\nproperties:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • All N-API calls return a status code of type napi_status. This\nstatus indicates whether the API call succeeded or failed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The API's return value is passed via an out parameter.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • All JavaScript values are abstracted behind an opaque type named\nnapi_value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • In case of an error status code, additional information can be obtained\nusing napi_get_last_error_info. More information can be found in the error\nhandling section Error handling.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The N-API is a C API that ensures ABI stability across Node.js versions\nand different compiler levels. A C++ API can be easier to use.\nTo support using C++, the project maintains a\nC++ wrapper module called node-addon-api.\nThis wrapper provides an inlineable C++ API. Binaries built\nwith node-addon-api will depend on the symbols for the N-API C-based\nfunctions exported by Node.js. node-addon-api is a more\nefficient way to write code that calls N-API. Take, for example, the\nfollowing node-addon-api code. The first section shows the\nnode-addon-api code and the second section shows what actually gets\nused in the addon.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Object obj = Object::New(env);\nobj[\"foo\"] = String::New(env, \"bar\");\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status;\nnapi_value object, string;\nstatus = napi_create_object(env, &object);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n\nstatus = napi_create_string_utf8(env, \"bar\", NAPI_AUTO_LENGTH, &string);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n\nstatus = napi_set_named_property(env, object, \"foo\", string);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The end result is that the addon only uses the exported C APIs. As a result,\nit still gets the benefits of the ABI stability provided by the C API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using node-addon-api instead of the C APIs, start with the API docs\nfor node-addon-api.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The N-API Resource offers an\nexcellent orientation and tips for developers just getting started with N-API\nand node-addon-api.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Implications of ABI Stability", + "textRaw": "Implications of ABI stability", "name": "implications_of_abi_stability", - "desc": "

                                                                                                                                                                                                                                                      Although N-API provides an ABI stability guarantee, other parts of Node.js do\nnot, and any external libraries used from the addon may not. In particular,\nnone of the following APIs provide an ABI stability guarantee across major\nversions:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        the Node.js C++ APIs available via any of

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        #include <node.h>\n#include <node_buffer.h>\n#include <node_version.h>\n#include <node_object_wrap.h>\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        the libuv APIs which are also included with Node.js and available via

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        #include <uv.h>\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        the V8 API available via

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        #include <v8.h>\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Thus, for an addon to remain ABI-compatible across Node.js major versions, it\nmust make use exclusively of N-API by restricting itself to using

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #include <node_api.h>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      and by checking, for all external libraries that it uses, that the external\nlibrary makes ABI stability guarantees similar to N-API.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Although N-API provides an ABI stability guarantee, other parts of Node.js do\nnot, and any external libraries used from the addon may not. In particular,\nnone of the following APIs provide an ABI stability guarantee across major\nversions:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        the Node.js C++ APIs available via any of

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        #include <node.h>\n#include <node_buffer.h>\n#include <node_version.h>\n#include <node_object_wrap.h>\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        the libuv APIs which are also included with Node.js and available via

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        #include <uv.h>\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        the V8 API available via

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        #include <v8.h>\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Thus, for an addon to remain ABI-compatible across Node.js major versions, it\nmust use N-API exclusively by restricting itself to using

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #include <node_api.h>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      and by checking, for all external libraries that it uses, that the external\nlibrary makes ABI stability guarantees similar to N-API.

                                                                                                                                                                                                                                                      ", "type": "misc", - "displayName": "Implications of ABI Stability" + "displayName": "Implications of ABI stability" }, { "textRaw": "Building", "name": "building", - "desc": "

                                                                                                                                                                                                                                                      Unlike modules written in JavaScript, developing and deploying Node.js\nnative addons using N-API requires an additional set of tools. Besides the\nbasic tools required to develop for Node.js, the native addon developer\nrequires a toolchain that can compile C and C++ code into a binary. In\naddition, depending upon how the native addon is deployed, the user of\nthe native addon will also need to have a C/C++ toolchain installed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Linux developers, the necessary C/C++ toolchain packages are readily\navailable. GCC is widely used in the Node.js community to build and\ntest across a variety of plarforms. For many developers, the LLVM\ncompiler infrastructure is also a good choice.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Mac developers, Xcode offers all the required compiler tools.\nHowever, it is not necessary to install the entire Xcode IDE. The following\ncommand installs the necessary toolchain:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      xcode-select --install\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Windows developers, Visual Studio offers all the required compiler\ntools. However, it is not necessary to install the entire Visual Studio\nIDE. The following command installs the necessary toolchain:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      npm install --global --production windows-build-tools\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The sections below describe the additional tools available for developing\nand deploying Node.js native addons.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Unlike modules written in JavaScript, developing and deploying Node.js\nnative addons using N-API requires an additional set of tools. Besides the\nbasic tools required to develop for Node.js, the native addon developer\nrequires a toolchain that can compile C and C++ code into a binary. In\naddition, depending upon how the native addon is deployed, the user of\nthe native addon will also need to have a C/C++ toolchain installed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Linux developers, the necessary C/C++ toolchain packages are readily\navailable. GCC is widely used in the Node.js community to build and\ntest across a variety of platforms. For many developers, the LLVM\ncompiler infrastructure is also a good choice.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Mac developers, Xcode offers all the required compiler tools.\nHowever, it is not necessary to install the entire Xcode IDE. The following\ncommand installs the necessary toolchain:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      xcode-select --install\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Windows developers, Visual Studio offers all the required compiler\ntools. However, it is not necessary to install the entire Visual Studio\nIDE. The following command installs the necessary toolchain:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      npm install --global windows-build-tools\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The sections below describe the additional tools available for developing\nand deploying Node.js native addons.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Build tools", @@ -237,7 +246,7 @@ { "textRaw": "prebuildify", "name": "prebuildify", - "desc": "

                                                                                                                                                                                                                                                      prebuildify is tool based on node-gyp. The advantage of prebuildify is\nthat the built binaries are bundled with the native module when it's\nuploaded to npm. The binaries are downloaded from npm and are immediately\navailable to the module user when the native module is installed.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      prebuildify is a tool based on node-gyp. The advantage of prebuildify is\nthat the built binaries are bundled with the native module when it's\nuploaded to npm. The binaries are downloaded from npm and are immediately\navailable to the module user when the native module is installed.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "prebuildify" } @@ -252,23 +261,21 @@ { "textRaw": "Usage", "name": "usage", - "desc": "

                                                                                                                                                                                                                                                      In order to use the N-API functions, include the file node_api.h which is\nlocated in the src directory in the node development tree:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #include <node_api.h>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This will opt into the default NAPI_VERSION for the given release of Node.js.\nIn order to ensure compatibility with specific versions of N-API, the version\ncan be specified explicitly when including the header:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #define NAPI_VERSION 3\n#include <node_api.h>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This restricts the N-API surface to just the functionality that was available in\nthe specified (and earlier) versions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some of the N-API surface is considered experimental and requires explicit\nopt-in to access those APIs:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #define NAPI_EXPERIMENTAL\n#include <node_api.h>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In this case the entire API surface, including any experimental APIs, will be\navailable to the module code.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      In order to use the N-API functions, include the file node_api.h which is\nlocated in the src directory in the node development tree:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #include <node_api.h>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This will opt into the default NAPI_VERSION for the given release of Node.js.\nIn order to ensure compatibility with specific versions of N-API, the version\ncan be specified explicitly when including the header:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #define NAPI_VERSION 3\n#include <node_api.h>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This restricts the N-API surface to just the functionality that was available in\nthe specified (and earlier) versions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some of the N-API surface is experimental and requires explicit opt-in:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      #define NAPI_EXPERIMENTAL\n#include <node_api.h>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In this case the entire API surface, including any experimental APIs, will be\navailable to the module code.

                                                                                                                                                                                                                                                      ", "type": "misc", "displayName": "Usage" }, { - "textRaw": "N-API Version Matrix", + "textRaw": "N-API version matrix", "name": "n-api_version_matrix", - "desc": "

                                                                                                                                                                                                                                                      N-API versions are additive and versioned independently from Node.js.\nVersion 4 is an extension to version 3 in that it has all of the APIs\nfrom version 3 with some additions. This means that it is not necessary\nto recompile for new versions of Node.js which are\nlisted as supporting a later version.

                                                                                                                                                                                                                                                      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                      123456
                                                                                                                                                                                                                                                      v6.xv6.14.2*
                                                                                                                                                                                                                                                      v8.xv8.0.0*v8.10.0*v8.11.2v8.16.0
                                                                                                                                                                                                                                                      v9.xv9.0.0*v9.3.0*v9.11.0*
                                                                                                                                                                                                                                                      v10.xv10.0.0v10.0.0v10.0.0v10.16.0v10.17.0v10.20.0
                                                                                                                                                                                                                                                      v11.xv11.0.0v11.0.0v11.0.0v11.8.0
                                                                                                                                                                                                                                                      v12.xv12.0.0v12.0.0v12.0.0v12.0.0v12.11.0v12.17.0
                                                                                                                                                                                                                                                      v13.xv13.0.0v13.0.0v13.0.0v13.0.0v13.0.0
                                                                                                                                                                                                                                                      v14.xv14.0.0v14.0.0v14.0.0v14.0.0v14.0.0v14.0.0
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      * Indicates that the N-API version was released as experimental

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The N-APIs associated strictly with accessing ECMAScript features from native\ncode can be found separately in js_native_api.h and js_native_api_types.h.\nThe APIs defined in these headers are included in node_api.h and\nnode_api_types.h. The headers are structured in this way in order to allow\nimplementations of N-API outside of Node.js. For those implementations the\nNode.js specific APIs may not be applicable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Node.js-specific parts of an addon can be separated from the code that\nexposes the actual functionality to the JavaScript environment so that the\nlatter may be used with multiple implementations of N-API. In the example below,\naddon.c and addon.h refer only to js_native_api.h. This ensures that\naddon.c can be reused to compile against either the Node.js implementation of\nN-API or any implementation of N-API outside of Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      addon_node.c is a separate file that contains the Node.js specific entry point\nto the addon and which instantiates the addon by calling into addon.c when the\naddon is loaded into a Node.js environment.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.h\n#ifndef _ADDON_H_\n#define _ADDON_H_\n#include <js_native_api.h>\nnapi_value create_addon(napi_env env);\n#endif  // _ADDON_H_\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.c\n#include \"addon.h\"\n\n#define NAPI_CALL(env, call)                                      \\\n  do {                                                            \\\n    napi_status status = (call);                                  \\\n    if (status != napi_ok) {                                      \\\n      const napi_extended_error_info* error_info = NULL;          \\\n      napi_get_last_error_info((env), &error_info);               \\\n      bool is_pending;                                            \\\n      napi_is_exception_pending((env), &is_pending);              \\\n      if (!is_pending) {                                          \\\n        const char* message = (error_info->error_message == NULL) \\\n            ? \"empty error message\"                               \\\n            : error_info->error_message;                          \\\n        napi_throw_error((env), NULL, message);                   \\\n        return NULL;                                              \\\n      }                                                           \\\n    }                                                             \\\n  } while(0)\n\nstatic napi_value\nDoSomethingUseful(napi_env env, napi_callback_info info) {\n  // Do something useful.\n  return NULL;\n}\n\nnapi_value create_addon(napi_env env) {\n  napi_value result;\n  NAPI_CALL(env, napi_create_object(env, &result));\n\n  napi_value exported_function;\n  NAPI_CALL(env, napi_create_function(env,\n                                      \"doSomethingUseful\",\n                                      NAPI_AUTO_LENGTH,\n                                      DoSomethingUseful,\n                                      NULL,\n                                      &exported_function));\n\n  NAPI_CALL(env, napi_set_named_property(env,\n                                         result,\n                                         \"doSomethingUseful\",\n                                         exported_function));\n\n  return result;\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon_node.c\n#include <node_api.h>\n#include \"addon.h\"\n\nNAPI_MODULE_INIT() {\n  // This function body is expected to return a `napi_value`.\n  // The variables `napi_env env` and `napi_value exports` may be used within\n  // the body, as they are provided by the definition of `NAPI_MODULE_INIT()`.\n  return create_addon(env);\n}\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      N-API versions are additive and versioned independently from Node.js.\nVersion 4 is an extension to version 3 in that it has all of the APIs\nfrom version 3 with some additions. This means that it is not necessary\nto recompile for new versions of Node.js which are\nlisted as supporting a later version.

                                                                                                                                                                                                                                                      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                      123456
                                                                                                                                                                                                                                                      v6.xv6.14.2*
                                                                                                                                                                                                                                                      v8.xv8.0.0*v8.10.0*v8.11.2v8.16.0
                                                                                                                                                                                                                                                      v9.xv9.0.0*v9.3.0*v9.11.0*
                                                                                                                                                                                                                                                      v10.xv10.0.0v10.0.0v10.0.0v10.16.0v10.17.0v10.20.0
                                                                                                                                                                                                                                                      v11.xv11.0.0v11.0.0v11.0.0v11.8.0
                                                                                                                                                                                                                                                      v12.xv12.0.0v12.0.0v12.0.0v12.0.0v12.11.0v12.17.0
                                                                                                                                                                                                                                                      v13.xv13.0.0v13.0.0v13.0.0v13.0.0v13.0.0
                                                                                                                                                                                                                                                      v14.xv14.0.0v14.0.0v14.0.0v14.0.0v14.0.0v14.0.0
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      * Indicates that the N-API version was released as experimental

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Each API documented for N-API will have a header named added in:, and APIs\nwhich are stable will have the additional header N-API version:.\nAPIs are directly usable when using a Node.js version which supports\nthe N-API version shown in N-API version: or higher.\nWhen using a Node.js version that does not support the\nN-API version: listed or if there is no N-API version: listed,\nthen the API will only be available if\n#define NAPI_EXPERIMENTAL precedes the inclusion of node_api.h\nor js_native_api.h. If an API appears not to be available on\na version of Node.js which is later than the one shown in added in: then\nthis is most likely the reason for the apparent absence.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The N-APIs associated strictly with accessing ECMAScript features from native\ncode can be found separately in js_native_api.h and js_native_api_types.h.\nThe APIs defined in these headers are included in node_api.h and\nnode_api_types.h. The headers are structured in this way in order to allow\nimplementations of N-API outside of Node.js. For those implementations the\nNode.js specific APIs may not be applicable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Node.js-specific parts of an addon can be separated from the code that\nexposes the actual functionality to the JavaScript environment so that the\nlatter may be used with multiple implementations of N-API. In the example below,\naddon.c and addon.h refer only to js_native_api.h. This ensures that\naddon.c can be reused to compile against either the Node.js implementation of\nN-API or any implementation of N-API outside of Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      addon_node.c is a separate file that contains the Node.js specific entry point\nto the addon and which instantiates the addon by calling into addon.c when the\naddon is loaded into a Node.js environment.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.h\n#ifndef _ADDON_H_\n#define _ADDON_H_\n#include <js_native_api.h>\nnapi_value create_addon(napi_env env);\n#endif  // _ADDON_H_\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon.c\n#include \"addon.h\"\n\n#define NAPI_CALL(env, call)                                      \\\n  do {                                                            \\\n    napi_status status = (call);                                  \\\n    if (status != napi_ok) {                                      \\\n      const napi_extended_error_info* error_info = NULL;          \\\n      napi_get_last_error_info((env), &error_info);               \\\n      bool is_pending;                                            \\\n      napi_is_exception_pending((env), &is_pending);              \\\n      if (!is_pending) {                                          \\\n        const char* message = (error_info->error_message == NULL) \\\n            ? \"empty error message\"                               \\\n            : error_info->error_message;                          \\\n        napi_throw_error((env), NULL, message);                   \\\n        return NULL;                                              \\\n      }                                                           \\\n    }                                                             \\\n  } while(0)\n\nstatic napi_value\nDoSomethingUseful(napi_env env, napi_callback_info info) {\n  // Do something useful.\n  return NULL;\n}\n\nnapi_value create_addon(napi_env env) {\n  napi_value result;\n  NAPI_CALL(env, napi_create_object(env, &result));\n\n  napi_value exported_function;\n  NAPI_CALL(env, napi_create_function(env,\n                                      \"doSomethingUseful\",\n                                      NAPI_AUTO_LENGTH,\n                                      DoSomethingUseful,\n                                      NULL,\n                                      &exported_function));\n\n  NAPI_CALL(env, napi_set_named_property(env,\n                                         result,\n                                         \"doSomethingUseful\",\n                                         exported_function));\n\n  return result;\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addon_node.c\n#include <node_api.h>\n#include \"addon.h\"\n\nNAPI_MODULE_INIT() {\n  // This function body is expected to return a `napi_value`.\n  // The variables `napi_env env` and `napi_value exports` may be used within\n  // the body, as they are provided by the definition of `NAPI_MODULE_INIT()`.\n  return create_addon(env);\n}\n
                                                                                                                                                                                                                                                      ", "type": "misc", - "displayName": "N-API Version Matrix" + "displayName": "N-API version matrix" }, { - "textRaw": "Environment Life Cycle APIs", + "textRaw": "Environment life cycle APIs", "name": "environment_life_cycle_apis", - "stability": 1, - "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      Section 8.7 of the ECMAScript Language Specification defines the concept\nof an \"Agent\" as a self-contained environment in which JavaScript code runs.\nMultiple such Agents may be started and terminated either concurrently or in\nsequence by the process.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A Node.js environment corresponds to an ECMAScript Agent. In the main process,\nan environment is created at startup, and additional environments can be created\non separate threads to serve as worker threads. When Node.js is embedded in\nanother application, the main thread of the application may also construct and\ndestroy a Node.js environment multiple times during the life cycle of the\napplication process such that each Node.js environment created by the\napplication may, in turn, during its life cycle create and destroy additional\nenvironments as worker threads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      From the perspective of a native addon this means that the bindings it provides\nmay be called multiple times, from multiple contexts, and even concurrently from\nmultiple threads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Native addons may need to allocate global state of which they make use during\ntheir entire life cycle such that the state must be unique to each instance of\nthe addon.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To this end, N-API provides a way to allocate data such that its life cycle is\ntied to the life cycle of the Agent.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Section 8.7 of the ECMAScript Language Specification defines the concept\nof an \"Agent\" as a self-contained environment in which JavaScript code runs.\nMultiple such Agents may be started and terminated either concurrently or in\nsequence by the process.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A Node.js environment corresponds to an ECMAScript Agent. In the main process,\nan environment is created at startup, and additional environments can be created\non separate threads to serve as worker threads. When Node.js is embedded in\nanother application, the main thread of the application may also construct and\ndestroy a Node.js environment multiple times during the life cycle of the\napplication process such that each Node.js environment created by the\napplication may, in turn, during its life cycle create and destroy additional\nenvironments as worker threads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      From the perspective of a native addon this means that the bindings it provides\nmay be called multiple times, from multiple contexts, and even concurrently from\nmultiple threads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Native addons may need to allocate global state which they use during\ntheir entire life cycle such that the state must be unique to each instance of\nthe addon.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To this end, N-API provides a way to allocate data such that its life cycle is\ntied to the life cycle of the Agent.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "napi_set_instance_data", @@ -282,7 +289,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_set_instance_data(napi_env env,\n                                   void* data,\n                                   napi_finalize finalize_cb,\n                                   void* finalize_hint);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: The data item to make available to bindings of this instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: The function to call when the environment is being torn\ndown. The function receives data so that it might free it.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API associates data with the currently running Agent. data can later\nbe retrieved using napi_get_instance_data(). Any existing data associated with\nthe currently running Agent which was set by means of a previous call to\nnapi_set_instance_data() will be overwritten. If a finalize_cb was provided\nby the previous call, it will not be called.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_set_instance_data(napi_env env,\n                                   void* data,\n                                   napi_finalize finalize_cb,\n                                   void* finalize_hint);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: The data item to make available to bindings of this instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: The function to call when the environment is being torn\ndown. The function receives data so that it might free it.\nnapi_finalize provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API associates data with the currently running Agent. data can later\nbe retrieved using napi_get_instance_data(). Any existing data associated with\nthe currently running Agent which was set by means of a previous call to\nnapi_set_instance_data() will be overwritten. If a finalize_cb was provided\nby the previous call, it will not be called.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_set_instance_data" }, @@ -298,16 +305,16 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_instance_data(napi_env env,\n                                   void** data);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The data item that was previously associated with the currently\nrunning Agent by a call to napi_set_instance_data().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API retrieves data that was previously associated with the currently\nrunning Agent via napi_set_instance_data(). If no data is set, the call will\nsucceed and data will be set to NULL.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_instance_data(napi_env env,\n                                   void** data);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The data item that was previously associated with the currently\nrunning Agent by a call to napi_set_instance_data().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API retrieves data that was previously associated with the currently\nrunning Agent via napi_set_instance_data(). If no data is set, the call will\nsucceed and data will be set to NULL.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_instance_data" } ], "type": "misc", - "displayName": "Environment Life Cycle APIs" + "displayName": "Environment life cycle APIs" }, { - "textRaw": "Basic N-API Data Types", + "textRaw": "Basic N-API data types", "name": "basic_n-api_data_types", "desc": "

                                                                                                                                                                                                                                                      N-API exposes the following fundamental datatypes as abstractions that are\nconsumed by the various APIs. These APIs should be treated as opaque,\nintrospectable only with other N-API calls.

                                                                                                                                                                                                                                                      ", "modules": [ @@ -323,7 +330,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Integral status code indicating the success or failure of a N-API call.\nCurrently, the following status codes are supported.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef enum {\n  napi_ok,\n  napi_invalid_arg,\n  napi_object_expected,\n  napi_string_expected,\n  napi_name_expected,\n  napi_function_expected,\n  napi_number_expected,\n  napi_boolean_expected,\n  napi_array_expected,\n  napi_generic_failure,\n  napi_pending_exception,\n  napi_cancelled,\n  napi_escape_called_twice,\n  napi_handle_scope_mismatch,\n  napi_callback_scope_mismatch,\n  napi_queue_full,\n  napi_closing,\n  napi_bigint_expected,\n  napi_date_expected,\n  napi_arraybuffer_expected,\n  napi_detachable_arraybuffer_expected,\n} napi_status;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If additional information is required upon an API returning a failed status,\nit can be obtained by calling napi_get_last_error_info.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Integral status code indicating the success or failure of a N-API call.\nCurrently, the following status codes are supported.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef enum {\n  napi_ok,\n  napi_invalid_arg,\n  napi_object_expected,\n  napi_string_expected,\n  napi_name_expected,\n  napi_function_expected,\n  napi_number_expected,\n  napi_boolean_expected,\n  napi_array_expected,\n  napi_generic_failure,\n  napi_pending_exception,\n  napi_cancelled,\n  napi_escape_called_twice,\n  napi_handle_scope_mismatch,\n  napi_callback_scope_mismatch,\n  napi_queue_full,\n  napi_closing,\n  napi_bigint_expected,\n  napi_date_expected,\n  napi_arraybuffer_expected,\n  napi_detachable_arraybuffer_expected,\n} napi_status;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If additional information is required upon an API returning a failed status,\nit can be obtained by calling napi_get_last_error_info.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_status" }, @@ -339,7 +346,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      typedef struct {\n  const char* error_message;\n  void* engine_reserved;\n  uint32_t engine_error_code;\n  napi_status error_code;\n} napi_extended_error_info;\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • error_message: UTF8-encoded string containing a VM-neutral description of\nthe error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • engine_reserved: Reserved for VM-specific error details. This is currently\nnot implemented for any VM.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • engine_error_code: VM-specific error code. This is currently\nnot implemented for any VM.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error_code: The N-API status code that originated with the last error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See the Error Handling section for additional information.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      typedef struct {\n  const char* error_message;\n  void* engine_reserved;\n  uint32_t engine_error_code;\n  napi_status error_code;\n} napi_extended_error_info;\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • error_message: UTF8-encoded string containing a VM-neutral description of\nthe error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • engine_reserved: Reserved for VM-specific error details. This is currently\nnot implemented for any VM.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • engine_error_code: VM-specific error code. This is currently\nnot implemented for any VM.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error_code: The N-API status code that originated with the last error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See the Error handling section for additional information.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_extended_error_info" }, @@ -385,7 +392,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      A value to be given to napi_release_threadsafe_function() to indicate whether\nthe thread-safe function is to be closed immediately (napi_tsfn_abort) or\nmerely released (napi_tsfn_release) and thus available for subsequent use via\nnapi_acquire_threadsafe_function() and napi_call_threadsafe_function().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef enum {\n  napi_tsfn_release,\n  napi_tsfn_abort\n} napi_threadsafe_function_release_mode;\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A value to be given to napi_release_threadsafe_function() to indicate whether\nthe thread-safe function is to be closed immediately (napi_tsfn_abort) or\nmerely released (napi_tsfn_release) and thus available for subsequent use via\nnapi_acquire_threadsafe_function() and napi_call_threadsafe_function().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef enum {\n  napi_tsfn_release,\n  napi_tsfn_abort\n} napi_threadsafe_function_release_mode;\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_threadsafe_function_release_mode" }, @@ -401,18 +408,18 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      A value to be given to napi_call_threadsafe_function() to indicate whether\nthe call should block whenever the queue associated with the thread-safe\nfunction is full.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef enum {\n  napi_tsfn_nonblocking,\n  napi_tsfn_blocking\n} napi_threadsafe_function_call_mode;\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A value to be given to napi_call_threadsafe_function() to indicate whether\nthe call should block whenever the queue associated with the thread-safe\nfunction is full.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef enum {\n  napi_tsfn_nonblocking,\n  napi_tsfn_blocking\n} napi_threadsafe_function_call_mode;\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_threadsafe_function_call_mode" }, { - "textRaw": "N-API Memory Management types", + "textRaw": "N-API memory management types", "name": "n-api_memory_management_types", "modules": [ { "textRaw": "napi_handle_scope", "name": "napi_handle_scope", - "desc": "

                                                                                                                                                                                                                                                      This is an abstraction used to control and modify the lifetime of objects\ncreated within a particular scope. In general, N-API values are created within\nthe context of a handle scope. When a native method is called from\nJavaScript, a default handle scope will exist. If the user does not explicitly\ncreate a new handle scope, N-API values will be created in the default handle\nscope. For any invocations of code outside the execution of a native method\n(for instance, during a libuv callback invocation), the module is required to\ncreate a scope before invoking any functions that can result in the creation\nof JavaScript values.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Handle scopes are created using napi_open_handle_scope and are destroyed\nusing napi_close_handle_scope. Closing the scope can indicate to the GC\nthat all napi_values created during the lifetime of the handle scope are no\nlonger referenced from the current stack frame.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more details, review the Object Lifetime Management.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      This is an abstraction used to control and modify the lifetime of objects\ncreated within a particular scope. In general, N-API values are created within\nthe context of a handle scope. When a native method is called from\nJavaScript, a default handle scope will exist. If the user does not explicitly\ncreate a new handle scope, N-API values will be created in the default handle\nscope. For any invocations of code outside the execution of a native method\n(for instance, during a libuv callback invocation), the module is required to\ncreate a scope before invoking any functions that can result in the creation\nof JavaScript values.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Handle scopes are created using napi_open_handle_scope and are destroyed\nusing napi_close_handle_scope. Closing the scope can indicate to the GC\nthat all napi_values created during the lifetime of the handle scope are no\nlonger referenced from the current stack frame.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more details, review the Object lifetime management.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_handle_scope" }, @@ -444,16 +451,45 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      This is the abstraction to use to reference a napi_value. This allows for\nusers to manage the lifetimes of JavaScript values, including defining their\nminimum lifetimes explicitly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more details, review the Object Lifetime Management.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      This is the abstraction to use to reference a napi_value. This allows for\nusers to manage the lifetimes of JavaScript values, including defining their\nminimum lifetimes explicitly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more details, review the Object lifetime management.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_ref" + }, + { + "textRaw": "napi_type_tag", + "name": "napi_type_tag", + "meta": { + "added": [ + "v12.19.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      A 128-bit value stored as two unsigned 64-bit integers. It serves as a UUID\nwith which JavaScript objects can be \"tagged\" in order to ensure that they are\nof a certain type. This is a stronger check than napi_instanceof, because\nthe latter can report a false positive if the object's prototype has been\nmanipulated. Type-tagging is most useful in conjunction with napi_wrap\nbecause it ensures that the pointer retrieved from a wrapped object can be\nsafely cast to the native type corresponding to the type tag that had been\npreviously applied to the JavaScript object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef struct {\n  uint64_t lower;\n  uint64_t upper;\n} napi_type_tag;\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_type_tag" + }, + { + "textRaw": "napi_async_cleanup_hook_handle", + "name": "napi_async_cleanup_hook_handle", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      An opaque value returned by napi_add_async_cleanup_hook. It must be passed\nto napi_remove_async_cleanup_hook when the chain of asynchronous cleanup\nevents completes.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_async_cleanup_hook_handle" } ], "type": "module", - "displayName": "N-API Memory Management types" + "displayName": "N-API memory management types" }, { - "textRaw": "N-API Callback types", + "textRaw": "N-API callback types", "name": "n-api_callback_types", "modules": [ { @@ -484,7 +520,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Function pointer type for user-provided native functions which are to be\nexposed to JavaScript via N-API. Callback functions should satisfy the\nfollowing signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef napi_value (*napi_callback)(napi_env, napi_callback_info);\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Function pointer type for user-provided native functions which are to be\nexposed to JavaScript via N-API. Callback functions should satisfy the\nfollowing signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef napi_value (*napi_callback)(napi_env, napi_callback_info);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless for reasons discussed in Object Lifetime Management, creating a\nhandle and/or callback scope inside a napi_callback is not necessary.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_callback" }, @@ -500,7 +536,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Function pointer type for add-on provided functions that allow the user to be\nnotified when externally-owned data is ready to be cleaned up because the\nobject with which it was associated with, has been garbage-collected. The user\nmust provide a function satisfying the following signature which would get\ncalled upon the object's collection. Currently, napi_finalize can be used for\nfinding out when objects that have external data are collected.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_finalize)(napi_env env,\n                              void* finalize_data,\n                              void* finalize_hint);\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Function pointer type for add-on provided functions that allow the user to be\nnotified when externally-owned data is ready to be cleaned up because the\nobject with which it was associated with, has been garbage-collected. The user\nmust provide a function satisfying the following signature which would get\ncalled upon the object's collection. Currently, napi_finalize can be used for\nfinding out when objects that have external data are collected.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_finalize)(napi_env env,\n                              void* finalize_data,\n                              void* finalize_hint);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless for reasons discussed in Object Lifetime Management, creating a\nhandle and/or callback scope inside the function body is not necessary.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_finalize" }, @@ -516,7 +552,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Function pointer used with functions that support asynchronous\noperations. Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_async_execute_callback)(napi_env env, void* data);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Implementations of this function must avoid making N-API calls\nthat execute JavaScript or interact with\nJavaScript objects. N-API\ncalls should be in the napi_async_complete_callback instead.\nDo not use the napi_env parameter as it will likely\nresult in execution of JavaScript.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Function pointer used with functions that support asynchronous\noperations. Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_async_execute_callback)(napi_env env, void* data);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Implementations of this function must avoid making N-API calls that execute\nJavaScript or interact with JavaScript objects. N-API calls should be in the\nnapi_async_complete_callback instead. Do not use the napi_env parameter as\nit will likely result in execution of JavaScript.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_async_execute_callback" }, @@ -532,7 +568,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Function pointer used with functions that support asynchronous\noperations. Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_async_complete_callback)(napi_env env,\n                                             napi_status status,\n                                             void* data);\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Function pointer used with functions that support asynchronous\noperations. Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_async_complete_callback)(napi_env env,\n                                             napi_status status,\n                                             void* data);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless for reasons discussed in Object Lifetime Management, creating a\nhandle and/or callback scope inside the function body is not necessary.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_async_complete_callback" }, @@ -548,20 +584,33 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Function pointer used with asynchronous thread-safe function calls. The callback\nwill be called on the main thread. Its purpose is to use a data item arriving\nvia the queue from one of the secondary threads to construct the parameters\nnecessary for a call into JavaScript, usually via napi_call_function, and then\nmake the call into JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The data arriving from the secondary thread via the queue is given in the data\nparameter and the JavaScript function to call is given in the js_callback\nparameter.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API sets up the environment prior to calling this callback, so it is\nsufficient to call the JavaScript function via napi_call_function rather than\nvia napi_make_callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_threadsafe_function_call_js)(napi_env env,\n                                                 napi_value js_callback,\n                                                 void* context,\n                                                 void* data);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment to use for API calls, or NULL if the thread-safe\nfunction is being torn down and data may need to be freed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_callback: The JavaScript function to call, or NULL if the\nthread-safe function is being torn down and data may need to be freed. It\nmay also be NULL if the thread-safe function was created without\njs_callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] context: The optional data with which the thread-safe function was\ncreated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Data created by the secondary thread. It is the responsibility of\nthe callback to convert this native data to JavaScript values (with N-API\nfunctions) that can be passed as parameters when js_callback is invoked.\nThis pointer is managed entirely by the threads and this callback. Thus this\ncallback should free the data.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Function pointer used with asynchronous thread-safe function calls. The callback\nwill be called on the main thread. Its purpose is to use a data item arriving\nvia the queue from one of the secondary threads to construct the parameters\nnecessary for a call into JavaScript, usually via napi_call_function, and then\nmake the call into JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The data arriving from the secondary thread via the queue is given in the data\nparameter and the JavaScript function to call is given in the js_callback\nparameter.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API sets up the environment prior to calling this callback, so it is\nsufficient to call the JavaScript function via napi_call_function rather than\nvia napi_make_callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_threadsafe_function_call_js)(napi_env env,\n                                                 napi_value js_callback,\n                                                 void* context,\n                                                 void* data);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment to use for API calls, or NULL if the thread-safe\nfunction is being torn down and data may need to be freed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_callback: The JavaScript function to call, or NULL if the\nthread-safe function is being torn down and data may need to be freed. It\nmay also be NULL if the thread-safe function was created without\njs_callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] context: The optional data with which the thread-safe function was\ncreated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Data created by the secondary thread. It is the responsibility of\nthe callback to convert this native data to JavaScript values (with N-API\nfunctions) that can be passed as parameters when js_callback is invoked.\nThis pointer is managed entirely by the threads and this callback. Thus this\ncallback should free the data.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless for reasons discussed in Object Lifetime Management, creating a\nhandle and/or callback scope inside the function body is not necessary.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_threadsafe_function_call_js" + }, + { + "textRaw": "napi_async_cleanup_hook", + "name": "napi_async_cleanup_hook", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      Function pointer used with napi_add_async_cleanup_hook. It will be called\nwhen the environment is being torn down.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_async_cleanup_hook)(napi_async_cleanup_hook_handle handle,\n                                        void* data);\n
                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The body of the function should initiate the asynchronous cleanup actions at the\nend of which handle must be passed in a call to\nnapi_remove_async_cleanup_hook.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_async_cleanup_hook" } ], "type": "module", - "displayName": "N-API Callback types" + "displayName": "N-API callback types" } ], "type": "misc", - "displayName": "Basic N-API Data Types" + "displayName": "Basic N-API data types" }, { - "textRaw": "Error Handling", + "textRaw": "Error handling", "name": "error_handling", "desc": "

                                                                                                                                                                                                                                                      N-API uses both return values and JavaScript exceptions for error handling.\nThe following sections explain the approach for each case.

                                                                                                                                                                                                                                                      ", "modules": [ @@ -577,7 +626,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      All of the N-API functions share the same error handling pattern. The\nreturn type of all API functions is napi_status.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The return value will be napi_ok if the request was successful and\nno uncaught JavaScript exception was thrown. If an error occurred AND\nan exception was thrown, the napi_status value for the error\nwill be returned. If an exception was thrown, and no error occurred,\nnapi_pending_exception will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In cases where a return value other than napi_ok or\nnapi_pending_exception is returned, napi_is_exception_pending\nmust be called to check if an exception is pending.\nSee the section on exceptions for more details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The full set of possible napi_status values is defined\nin napi_api_types.h.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The napi_status return value provides a VM-independent representation of\nthe error which occurred. In some cases it is useful to be able to get\nmore detailed information, including a string representing the error as well as\nVM (engine)-specific information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to retrieve this information napi_get_last_error_info\nis provided which returns a napi_extended_error_info structure.\nThe format of the napi_extended_error_info structure is as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef struct napi_extended_error_info {\n  const char* error_message;\n  void* engine_reserved;\n  uint32_t engine_error_code;\n  napi_status error_code;\n};\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • error_message: Textual representation of the error that occurred.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • engine_reserved: Opaque handle reserved for engine use only.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • engine_error_code: VM specific error code.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error_code: n-api status code for the last error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_get_last_error_info returns the information for the last\nN-API call that was made.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Do not rely on the content or format of any of the extended information as it\nis not subject to SemVer and may change at any time. It is intended only for\nlogging purposes.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      All of the N-API functions share the same error handling pattern. The\nreturn type of all API functions is napi_status.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The return value will be napi_ok if the request was successful and\nno uncaught JavaScript exception was thrown. If an error occurred AND\nan exception was thrown, the napi_status value for the error\nwill be returned. If an exception was thrown, and no error occurred,\nnapi_pending_exception will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In cases where a return value other than napi_ok or\nnapi_pending_exception is returned, napi_is_exception_pending\nmust be called to check if an exception is pending.\nSee the section on exceptions for more details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The full set of possible napi_status values is defined\nin napi_api_types.h.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The napi_status return value provides a VM-independent representation of\nthe error which occurred. In some cases it is useful to be able to get\nmore detailed information, including a string representing the error as well as\nVM (engine)-specific information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to retrieve this information napi_get_last_error_info\nis provided which returns a napi_extended_error_info structure.\nThe format of the napi_extended_error_info structure is as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef struct napi_extended_error_info {\n  const char* error_message;\n  void* engine_reserved;\n  uint32_t engine_error_code;\n  napi_status error_code;\n};\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • error_message: Textual representation of the error that occurred.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • engine_reserved: Opaque handle reserved for engine use only.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • engine_error_code: VM specific error code.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error_code: n-api status code for the last error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_get_last_error_info returns the information for the last\nN-API call that was made.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Do not rely on the content or format of any of the extended information as it\nis not subject to SemVer and may change at any time. It is intended only for\nlogging purposes.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "napi_get_last_error_info", @@ -591,7 +640,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status\nnapi_get_last_error_info(napi_env env,\n                         const napi_extended_error_info** result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The napi_extended_error_info structure with more\ninformation about the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API retrieves a napi_extended_error_info structure with information\nabout the last error that occurred.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The content of the napi_extended_error_info returned is only valid up until\nan n-api function is called on the same env.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Do not rely on the content or format of any of the extended information as it\nis not subject to SemVer and may change at any time. It is intended only for\nlogging purposes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status\nnapi_get_last_error_info(napi_env env,\n                         const napi_extended_error_info** result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The napi_extended_error_info structure with more\ninformation about the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API retrieves a napi_extended_error_info structure with information\nabout the last error that occurred.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The content of the napi_extended_error_info returned is only valid up until\nan n-api function is called on the same env.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Do not rely on the content or format of any of the extended information as it\nis not subject to SemVer and may change at any time. It is intended only for\nlogging purposes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_last_error_info" } @@ -616,7 +665,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_throw(napi_env env, napi_value error);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] error: The JavaScript value to be thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API throws the JavaScript value provided.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_throw(napi_env env, napi_value error);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] error: The JavaScript value to be thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API throws the JavaScript value provided.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_throw" }, @@ -632,7 +681,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_throw_error(napi_env env,\n                                         const char* code,\n                                         const char* msg);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API throws a JavaScript Error with the text provided.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_throw_error(napi_env env,\n                                         const char* code,\n                                         const char* msg);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API throws a JavaScript Error with the text provided.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_throw_error" }, @@ -648,7 +697,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_throw_type_error(napi_env env,\n                                              const char* code,\n                                              const char* msg);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API throws a JavaScript TypeError with the text provided.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_throw_type_error(napi_env env,\n                                              const char* code,\n                                              const char* msg);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API throws a JavaScript TypeError with the text provided.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_throw_type_error" }, @@ -664,7 +713,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_throw_range_error(napi_env env,\n                                               const char* code,\n                                               const char* msg);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API throws a JavaScript RangeError with the text provided.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_throw_range_error(napi_env env,\n                                               const char* code,\n                                               const char* msg);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API throws a JavaScript RangeError with the text provided.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_throw_range_error" }, @@ -680,7 +729,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_is_error(napi_env env,\n                                      napi_value value,\n                                      bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The napi_value to be checked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Boolean value that is set to true if napi_value represents\nan error, false otherwise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API queries a napi_value to check if it represents an error object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_is_error(napi_env env,\n                                      napi_value value,\n                                      bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The napi_value to be checked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Boolean value that is set to true if napi_value represents\nan error, false otherwise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API queries a napi_value to check if it represents an error object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_error" }, @@ -696,7 +745,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_create_error(napi_env env,\n                                          napi_value code,\n                                          napi_value msg,\n                                          napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns a JavaScript Error with the text provided.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_create_error(napi_env env,\n                                          napi_value code,\n                                          napi_value msg,\n                                          napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns a JavaScript Error with the text provided.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_error" }, @@ -712,7 +761,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_create_type_error(napi_env env,\n                                               napi_value code,\n                                               napi_value msg,\n                                               napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns a JavaScript TypeError with the text provided.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_create_type_error(napi_env env,\n                                               napi_value code,\n                                               napi_value msg,\n                                               napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns a JavaScript TypeError with the text provided.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_type_error" }, @@ -728,7 +777,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_create_range_error(napi_env env,\n                                                napi_value code,\n                                                napi_value msg,\n                                                napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns a JavaScript RangeError with the text provided.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_create_range_error(napi_env env,\n                                                napi_value code,\n                                                napi_value msg,\n                                                napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns a JavaScript RangeError with the text provided.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_range_error" }, @@ -744,7 +793,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_and_clear_last_exception(napi_env env,\n                                              napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The exception if one is pending, NULL otherwise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_and_clear_last_exception(napi_env env,\n                                              napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The exception if one is pending, NULL otherwise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_and_clear_last_exception" }, @@ -760,7 +809,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_exception_pending(napi_env env, bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Boolean value that is set to true if an exception is pending.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_exception_pending(napi_env env, bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Boolean value that is set to true if an exception is pending.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_exception_pending" }, @@ -776,7 +825,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_fatal_exception(napi_env env, napi_value err);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] err: The error that is passed to 'uncaughtException'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Trigger an 'uncaughtException' in JavaScript. Useful if an async\ncallback throws an exception with no way to recover.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_fatal_exception(napi_env env, napi_value err);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] err: The error that is passed to 'uncaughtException'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Trigger an 'uncaughtException' in JavaScript. Useful if an async\ncallback throws an exception with no way to recover.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_fatal_exception" } @@ -785,7 +834,7 @@ "displayName": "Exceptions" }, { - "textRaw": "Fatal Errors", + "textRaw": "Fatal errors", "name": "fatal_errors", "desc": "

                                                                                                                                                                                                                                                      In the event of an unrecoverable error in a native module, a fatal error can be\nthrown to immediately terminate the process.

                                                                                                                                                                                                                                                      ", "modules": [ @@ -801,27 +850,27 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_NO_RETURN void napi_fatal_error(const char* location,\n                                                 size_t location_len,\n                                                 const char* message,\n                                                 size_t message_len);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] location: Optional location at which the error occurred.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] location_len: The length of the location in bytes, or\nNAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] message: The message associated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] message_len: The length of the message in bytes, or NAPI_AUTO_LENGTH\nif it is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The function call does not return, the process will be terminated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_NO_RETURN void napi_fatal_error(const char* location,\n                                                 size_t location_len,\n                                                 const char* message,\n                                                 size_t message_len);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] location: Optional location at which the error occurred.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] location_len: The length of the location in bytes, or\nNAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] message: The message associated with the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] message_len: The length of the message in bytes, or NAPI_AUTO_LENGTH\nif it is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The function call does not return, the process will be terminated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_fatal_error" } ], "type": "module", - "displayName": "Fatal Errors" + "displayName": "Fatal errors" } ], "type": "misc", - "displayName": "Error Handling" + "displayName": "Error handling" }, { - "textRaw": "Object Lifetime management", + "textRaw": "Object lifetime management", "name": "object_lifetime_management", "desc": "

                                                                                                                                                                                                                                                      As N-API calls are made, handles to objects in the heap for the underlying\nVM may be returned as napi_values. These handles must hold the\nobjects 'live' until they are no longer required by the native code,\notherwise the objects could be collected before the native code was\nfinished using them.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As object handles are returned they are associated with a\n'scope'. The lifespan for the default scope is tied to the lifespan\nof the native method call. The result is that, by default, handles\nremain valid and the objects associated with these handles will be\nheld live for the lifespan of the native method call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In many cases, however, it is necessary that the handles remain valid for\neither a shorter or longer lifespan than that of the native method.\nThe sections which follow describe the N-API functions that can be used\nto change the handle lifespan from the default.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Making handle lifespan shorter than that of the native method", "name": "making_handle_lifespan_shorter_than_that_of_the_native_method", - "desc": "

                                                                                                                                                                                                                                                      It is often necessary to make the lifespan of handles shorter than\nthe lifespan of a native method. For example, consider a native method\nthat has a loop which iterates through the elements in a large array:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      for (int i = 0; i < 1000000; i++) {\n  napi_value result;\n  napi_status status = napi_get_element(env, object, i, &result);\n  if (status != napi_ok) {\n    break;\n  }\n  // do something with element\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This would result in a large number of handles being created, consuming\nsubstantial resources. In addition, even though the native code could only\nuse the most recent handle, all of the associated objects would also be\nkept alive since they all share the same scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To handle this case, N-API provides the ability to establish a new 'scope' to\nwhich newly created handles will be associated. Once those handles\nare no longer required, the scope can be 'closed' and any handles associated\nwith the scope are invalidated. The methods available to open/close scopes are\nnapi_open_handle_scope and napi_close_handle_scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API only supports a single nested hierarchy of scopes. There is only one\nactive scope at any time, and all new handles will be associated with that\nscope while it is active. Scopes must be closed in the reverse order from\nwhich they are opened. In addition, all scopes created within a native method\nmust be closed before returning from that method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Taking the earlier example, adding calls to napi_open_handle_scope and\nnapi_close_handle_scope would ensure that at most a single handle\nis valid throughout the execution of the loop:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      for (int i = 0; i < 1000000; i++) {\n  napi_handle_scope scope;\n  napi_status status = napi_open_handle_scope(env, &scope);\n  if (status != napi_ok) {\n    break;\n  }\n  napi_value result;\n  status = napi_get_element(env, object, i, &result);\n  if (status != napi_ok) {\n    break;\n  }\n  // do something with element\n  status = napi_close_handle_scope(env, scope);\n  if (status != napi_ok) {\n    break;\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When nesting scopes, there are cases where a handle from an\ninner scope needs to live beyond the lifespan of that scope. N-API supports an\n'escapable scope' in order to support this case. An escapable scope\nallows one handle to be 'promoted' so that it 'escapes' the\ncurrent scope and the lifespan of the handle changes from the current\nscope to that of the outer scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The methods available to open/close escapable scopes are\nnapi_open_escapable_handle_scope and\nnapi_close_escapable_handle_scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The request to promote a handle is made through napi_escape_handle which\ncan only be called once.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      It is often necessary to make the lifespan of handles shorter than\nthe lifespan of a native method. For example, consider a native method\nthat has a loop which iterates through the elements in a large array:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      for (int i = 0; i < 1000000; i++) {\n  napi_value result;\n  napi_status status = napi_get_element(env, object, i, &result);\n  if (status != napi_ok) {\n    break;\n  }\n  // do something with element\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This would result in a large number of handles being created, consuming\nsubstantial resources. In addition, even though the native code could only\nuse the most recent handle, all of the associated objects would also be\nkept alive since they all share the same scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To handle this case, N-API provides the ability to establish a new 'scope' to\nwhich newly created handles will be associated. Once those handles\nare no longer required, the scope can be 'closed' and any handles associated\nwith the scope are invalidated. The methods available to open/close scopes are\nnapi_open_handle_scope and napi_close_handle_scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API only supports a single nested hierarchy of scopes. There is only one\nactive scope at any time, and all new handles will be associated with that\nscope while it is active. Scopes must be closed in the reverse order from\nwhich they are opened. In addition, all scopes created within a native method\nmust be closed before returning from that method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Taking the earlier example, adding calls to napi_open_handle_scope and\nnapi_close_handle_scope would ensure that at most a single handle\nis valid throughout the execution of the loop:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      for (int i = 0; i < 1000000; i++) {\n  napi_handle_scope scope;\n  napi_status status = napi_open_handle_scope(env, &scope);\n  if (status != napi_ok) {\n    break;\n  }\n  napi_value result;\n  status = napi_get_element(env, object, i, &result);\n  if (status != napi_ok) {\n    break;\n  }\n  // do something with element\n  status = napi_close_handle_scope(env, scope);\n  if (status != napi_ok) {\n    break;\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When nesting scopes, there are cases where a handle from an\ninner scope needs to live beyond the lifespan of that scope. N-API supports an\n'escapable scope' in order to support this case. An escapable scope\nallows one handle to be 'promoted' so that it 'escapes' the\ncurrent scope and the lifespan of the handle changes from the current\nscope to that of the outer scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The methods available to open/close escapable scopes are\nnapi_open_escapable_handle_scope and\nnapi_close_escapable_handle_scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The request to promote a handle is made through napi_escape_handle which\ncan only be called once.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "napi_open_handle_scope", @@ -835,7 +884,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env,\n                                               napi_handle_scope* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API opens a new scope.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env,\n                                               napi_handle_scope* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API opens a new scope.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_open_handle_scope" }, @@ -851,7 +900,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env,\n                                                napi_handle_scope scope);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API closes the scope passed in. Scopes must be closed in the\nreverse order from which they were created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env,\n                                                napi_handle_scope scope);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API closes the scope passed in. Scopes must be closed in the\nreverse order from which they were created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_close_handle_scope" }, @@ -867,7 +916,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\n    napi_open_escapable_handle_scope(napi_env env,\n                                     napi_handle_scope* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API opens a new scope from which one object can be promoted\nto the outer scope.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\n    napi_open_escapable_handle_scope(napi_env env,\n                                     napi_handle_scope* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API opens a new scope from which one object can be promoted\nto the outer scope.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_open_escapable_handle_scope" }, @@ -883,7 +932,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\n    napi_close_escapable_handle_scope(napi_env env,\n                                      napi_handle_scope scope);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API closes the scope passed in. Scopes must be closed in the\nreverse order from which they were created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\n    napi_close_escapable_handle_scope(napi_env env,\n                                      napi_handle_scope scope);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API closes the scope passed in. Scopes must be closed in the\nreverse order from which they were created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_close_escapable_handle_scope" }, @@ -899,7 +948,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_escape_handle(napi_env env,\n                               napi_escapable_handle_scope scope,\n                               napi_value escapee,\n                               napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] scope: napi_value representing the current scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] escapee: napi_value representing the JavaScript Object to be\nescaped.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the handle to the escaped Object\nin the outer scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API promotes the handle to the JavaScript object so that it is valid\nfor the lifetime of the outer scope. It can only be called once per scope.\nIf it is called more than once an error will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_escape_handle(napi_env env,\n                               napi_escapable_handle_scope scope,\n                               napi_value escapee,\n                               napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] scope: napi_value representing the current scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] escapee: napi_value representing the JavaScript Object to be\nescaped.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the handle to the escaped Object\nin the outer scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API promotes the handle to the JavaScript object so that it is valid\nfor the lifetime of the outer scope. It can only be called once per scope.\nIf it is called more than once an error will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_escape_handle" } @@ -924,7 +973,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_create_reference(napi_env env,\n                                              napi_value value,\n                                              uint32_t initial_refcount,\n                                              napi_ref* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing the Object to which we want a\nreference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] initial_refcount: Initial reference count for the new reference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_ref pointing to the new reference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API create a new reference with the specified reference count\nto the Object passed in.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_create_reference(napi_env env,\n                                              napi_value value,\n                                              uint32_t initial_refcount,\n                                              napi_ref* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing the Object to which we want a\nreference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] initial_refcount: Initial reference count for the new reference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_ref pointing to the new reference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API create a new reference with the specified reference count\nto the Object passed in.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_reference" }, @@ -940,7 +989,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] ref: napi_ref to be deleted.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API deletes the reference passed in.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] ref: napi_ref to be deleted.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API deletes the reference passed in.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_delete_reference" }, @@ -956,7 +1005,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_reference_ref(napi_env env,\n                                           napi_ref ref,\n                                           uint32_t* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] ref: napi_ref for which the reference count will be incremented.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The new reference count.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API increments the reference count for the reference\npassed in and returns the resulting reference count.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_reference_ref(napi_env env,\n                                           napi_ref ref,\n                                           uint32_t* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] ref: napi_ref for which the reference count will be incremented.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The new reference count.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API increments the reference count for the reference\npassed in and returns the resulting reference count.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_reference_ref" }, @@ -972,7 +1021,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_reference_unref(napi_env env,\n                                             napi_ref ref,\n                                             uint32_t* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] ref: napi_ref for which the reference count will be decremented.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The new reference count.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API decrements the reference count for the reference\npassed in and returns the resulting reference count.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_reference_unref(napi_env env,\n                                             napi_ref ref,\n                                             uint32_t* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] ref: napi_ref for which the reference count will be decremented.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The new reference count.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API decrements the reference count for the reference\npassed in and returns the resulting reference count.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_reference_unref" }, @@ -988,7 +1037,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_get_reference_value(napi_env env,\n                                                 napi_ref ref,\n                                                 napi_value* result);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      the napi_value passed in or out of these methods is a handle to the\nobject to which the reference is related.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] ref: napi_ref for which we requesting the corresponding Object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The napi_value for the Object referenced by the\nnapi_ref.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If still valid, this API returns the napi_value representing the\nJavaScript Object associated with the napi_ref. Otherwise, result\nwill be NULL.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_get_reference_value(napi_env env,\n                                                 napi_ref ref,\n                                                 napi_value* result);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      the napi_value passed in or out of these methods is a handle to the\nobject to which the reference is related.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] ref: napi_ref for which we requesting the corresponding Object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The napi_value for the Object referenced by the\nnapi_ref.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If still valid, this API returns the napi_value representing the\nJavaScript Object associated with the napi_ref. Otherwise, result\nwill be NULL.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_reference_value" } @@ -1013,7 +1062,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env,\n                                                  void (*fun)(void* arg),\n                                                  void* arg);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Registers fun as a function to be run with the arg parameter once the\ncurrent Node.js environment exits.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A function can safely be specified multiple times with different\narg values. In that case, it will be called multiple times as well.\nProviding the same fun and arg values multiple times is not allowed\nand will lead the process to abort.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The hooks will be called in reverse order, i.e. the most recently added one\nwill be called first.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Removing this hook can be done by using napi_remove_env_cleanup_hook.\nTypically, that happens when the resource for which this hook was added\nis being torn down anyway.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env,\n                                                  void (*fun)(void* arg),\n                                                  void* arg);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Registers fun as a function to be run with the arg parameter once the\ncurrent Node.js environment exits.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A function can safely be specified multiple times with different\narg values. In that case, it will be called multiple times as well.\nProviding the same fun and arg values multiple times is not allowed\nand will lead the process to abort.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The hooks will be called in reverse order, i.e. the most recently added one\nwill be called first.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Removing this hook can be done by using napi_remove_env_cleanup_hook.\nTypically, that happens when the resource for which this hook was added\nis being torn down anyway.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For asynchronous cleanup, napi_add_async_cleanup_hook is available.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_add_env_cleanup_hook" }, @@ -1029,9 +1078,50 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,\n                                                     void (*fun)(void* arg),\n                                                     void* arg);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unregisters fun as a function to be run with the arg parameter once the\ncurrent Node.js environment exits. Both the argument and the function value\nneed to be exact matches.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The function must have originally been registered\nwith napi_add_env_cleanup_hook, otherwise the process will abort.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,\n                                                     void (*fun)(void* arg),\n                                                     void* arg);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unregisters fun as a function to be run with the arg parameter once the\ncurrent Node.js environment exits. Both the argument and the function value\nneed to be exact matches.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The function must have originally been registered\nwith napi_add_env_cleanup_hook, otherwise the process will abort.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_remove_env_cleanup_hook" + }, + { + "textRaw": "napi_add_async_cleanup_hook", + "name": "napi_add_async_cleanup_hook", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34819", + "description": "Changed signature of the `hook` callback." + } + ], + "napiVersion": [ + 8 + ] + }, + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_add_async_cleanup_hook(\n    napi_env env,\n    napi_async_cleanup_hook hook,\n    void* arg,\n    napi_async_cleanup_hook_handle* remove_handle);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] hook: The function pointer to call at environment teardown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arg: The pointer to pass to hook when it gets called.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] remove_handle: Optional handle that refers to the asynchronous cleanup\nhook.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Registers hook, which is a function of type napi_async_cleanup_hook, as\na function to be run with the remove_handle and arg parameters once the\ncurrent Node.js environment exits.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike napi_add_env_cleanup_hook, the hook is allowed to be asynchronous.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Otherwise, behavior generally matches that of napi_add_env_cleanup_hook.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If remove_handle is not NULL, an opaque value will be stored in it\nthat must later be passed to napi_remove_async_cleanup_hook,\nregardless of whether the hook has already been invoked.\nTypically, that happens when the resource for which this hook was added\nis being torn down anyway.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_add_async_cleanup_hook" + }, + { + "textRaw": "napi_remove_async_cleanup_hook", + "name": "napi_remove_async_cleanup_hook", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34819", + "description": "Removed `env` parameter." + } + ] + }, + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_remove_async_cleanup_hook(\n    napi_async_cleanup_hook_handle remove_handle);\n
                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Unregisters the cleanup hook corresponding to remove_handle. This will prevent\nthe hook from being executed, unless it has already started executing.\nThis must be called on any napi_async_cleanup_hook_handle value obtained\nfrom napi_add_async_cleanup_hook.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_remove_async_cleanup_hook" } ], "type": "module", @@ -1039,17 +1129,17 @@ } ], "type": "misc", - "displayName": "Object Lifetime management" + "displayName": "Object lifetime management" }, { "textRaw": "Module registration", "name": "module_registration", - "desc": "

                                                                                                                                                                                                                                                      N-API modules are registered in a manner similar to other modules\nexcept that instead of using the NODE_MODULE macro the following\nis used:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The next difference is the signature for the Init method. For a N-API\nmodule it is as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value Init(napi_env env, napi_value exports);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The return value from Init is treated as the exports object for the module.\nThe Init method is passed an empty object via the exports parameter as a\nconvenience. If Init returns NULL, the parameter passed as exports is\nexported by the module. N-API modules cannot modify the module object but can\nspecify anything as the exports property of the module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To add the method hello as a function so that it can be called as a method\nprovided by the addon:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_property_descriptor desc =\n    {\"hello\", NULL, Method, NULL, NULL, NULL, napi_default, NULL};\n  status = napi_define_properties(env, exports, 1, &desc);\n  if (status != napi_ok) return NULL;\n  return exports;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To set a function to be returned by the require() for the addon:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value Init(napi_env env, napi_value exports) {\n  napi_value method;\n  napi_status status;\n  status = napi_create_function(env, \"exports\", NAPI_AUTO_LENGTH, Method, NULL, &method);\n  if (status != napi_ok) return NULL;\n  return method;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To define a class so that new instances can be created (often used with\nObject Wrap):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // NOTE: partial example, not all referenced code is included\nnapi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_property_descriptor properties[] = {\n    { \"value\", NULL, NULL, GetValue, SetValue, NULL, napi_default, NULL },\n    DECLARE_NAPI_METHOD(\"plusOne\", PlusOne),\n    DECLARE_NAPI_METHOD(\"multiply\", Multiply),\n  };\n\n  napi_value cons;\n  status =\n      napi_define_class(env, \"MyObject\", New, NULL, 3, properties, &cons);\n  if (status != napi_ok) return NULL;\n\n  status = napi_create_reference(env, cons, 1, &constructor);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"MyObject\", cons);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the module will be loaded multiple times during the lifetime of the Node.js\nprocess, use the NAPI_MODULE_INIT macro to initialize the module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      NAPI_MODULE_INIT() {\n  napi_value answer;\n  napi_status result;\n\n  status = napi_create_int64(env, 42, &answer);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"answer\", answer);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This macro includes NAPI_MODULE, and declares an Init function with a\nspecial name and with visibility beyond the addon. This will allow Node.js to\ninitialize the module even if it is loaded multiple times.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are a few design considerations when declaring a module that may be loaded\nmultiple times. The documentation of context-aware addons provides more\ndetails.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The variables env and exports will be available inside the function body\nfollowing the macro invocation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more details on setting properties on objects, see the section on\nWorking with JavaScript Properties.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more details on building addon modules in general, refer to the existing\nAPI.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      N-API modules are registered in a manner similar to other modules\nexcept that instead of using the NODE_MODULE macro the following\nis used:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The next difference is the signature for the Init method. For a N-API\nmodule it is as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value Init(napi_env env, napi_value exports);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The return value from Init is treated as the exports object for the module.\nThe Init method is passed an empty object via the exports parameter as a\nconvenience. If Init returns NULL, the parameter passed as exports is\nexported by the module. N-API modules cannot modify the module object but can\nspecify anything as the exports property of the module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To add the method hello as a function so that it can be called as a method\nprovided by the addon:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_property_descriptor desc = {\n    \"hello\",\n    NULL,\n    Method,\n    NULL,\n    NULL,\n    NULL,\n    napi_writable | napi_enumerable | napi_configurable,\n    NULL\n  };\n  status = napi_define_properties(env, exports, 1, &desc);\n  if (status != napi_ok) return NULL;\n  return exports;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To set a function to be returned by the require() for the addon:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value Init(napi_env env, napi_value exports) {\n  napi_value method;\n  napi_status status;\n  status = napi_create_function(env, \"exports\", NAPI_AUTO_LENGTH, Method, NULL, &method);\n  if (status != napi_ok) return NULL;\n  return method;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To define a class so that new instances can be created (often used with\nObject wrap):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // NOTE: partial example, not all referenced code is included\nnapi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_property_descriptor properties[] = {\n    { \"value\", NULL, NULL, GetValue, SetValue, NULL, napi_writable | napi_configurable, NULL },\n    DECLARE_NAPI_METHOD(\"plusOne\", PlusOne),\n    DECLARE_NAPI_METHOD(\"multiply\", Multiply),\n  };\n\n  napi_value cons;\n  status =\n      napi_define_class(env, \"MyObject\", New, NULL, 3, properties, &cons);\n  if (status != napi_ok) return NULL;\n\n  status = napi_create_reference(env, cons, 1, &constructor);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"MyObject\", cons);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the module will be loaded multiple times during the lifetime of the Node.js\nprocess, use the NAPI_MODULE_INIT macro to initialize the module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      NAPI_MODULE_INIT() {\n  napi_value answer;\n  napi_status result;\n\n  status = napi_create_int64(env, 42, &answer);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"answer\", answer);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This macro includes NAPI_MODULE, and declares an Init function with a\nspecial name and with visibility beyond the addon. This will allow Node.js to\ninitialize the module even if it is loaded multiple times.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are a few design considerations when declaring a module that may be loaded\nmultiple times. The documentation of context-aware addons provides more\ndetails.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The variables env and exports will be available inside the function body\nfollowing the macro invocation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more details on setting properties on objects, see the section on\nWorking with JavaScript properties.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more details on building addon modules in general, refer to the existing\nAPI.

                                                                                                                                                                                                                                                      ", "type": "misc", "displayName": "Module registration" }, { - "textRaw": "Working with JavaScript Values", + "textRaw": "Working with JavaScript values", "name": "working_with_javascript_values", "desc": "

                                                                                                                                                                                                                                                      N-API exposes a set of APIs to create all types of JavaScript values.\nSome of these types are documented under Section 6\nof the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Fundamentally, these APIs are used to do one of the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Create a new JavaScript object
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Convert from a primitive C type to an N-API value
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Convert from N-API value to a primitive C type
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Get global instances including undefined and null
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API values are represented by the type napi_value.\nAny N-API call that requires a JavaScript value takes in a napi_value.\nIn some cases, the API does check the type of the napi_value up-front.\nHowever, for better performance, it's better for the caller to make sure that\nthe napi_value in question is of the JavaScript type expected by the API.

                                                                                                                                                                                                                                                      ", "modules": [ @@ -1069,7 +1159,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_key_include_prototypes,\n  napi_key_own_only\n} napi_key_collection_mode;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Describes the Keys/Properties filter enums:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_key_collection_mode limits the range of collected properties.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_key_own_only limits the collected properties to the given\nobject only. napi_key_include_prototypes will include all keys\nof the objects's prototype chain as well.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_key_include_prototypes,\n  napi_key_own_only\n} napi_key_collection_mode;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Describes the Keys/Properties filter enums:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_key_collection_mode limits the range of collected properties.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_key_own_only limits the collected properties to the given\nobject only. napi_key_include_prototypes will include all keys\nof the objects's prototype chain as well.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_key_collection_mode" }, @@ -1085,7 +1175,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_key_all_properties = 0,\n  napi_key_writable = 1,\n  napi_key_enumerable = 1 << 1,\n  napi_key_configurable = 1 << 2,\n  napi_key_skip_strings = 1 << 3,\n  napi_key_skip_symbols = 1 << 4\n} napi_key_filter;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Property filter bits. They can be or'ed to build a composite filter.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_key_all_properties = 0,\n  napi_key_writable = 1,\n  napi_key_enumerable = 1 << 1,\n  napi_key_configurable = 1 << 2,\n  napi_key_skip_strings = 1 << 3,\n  napi_key_skip_symbols = 1 << 4\n} napi_key_filter;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Property filter bits. They can be or'ed to build a composite filter.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_key_filter" }, @@ -1101,21 +1191,21 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_key_keep_numbers,\n  napi_key_numbers_to_strings\n} napi_key_conversion;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_key_numbers_to_strings will convert integer indices to\nstrings. napi_key_keep_numbers will return numbers for integer\nindices.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_key_keep_numbers,\n  napi_key_numbers_to_strings\n} napi_key_conversion;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_key_numbers_to_strings will convert integer indices to\nstrings. napi_key_keep_numbers will return numbers for integer\nindices.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_key_conversion" }, { "textRaw": "napi_valuetype", "name": "napi_valuetype", - "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  // ES6 types (corresponds to typeof)\n  napi_undefined,\n  napi_null,\n  napi_boolean,\n  napi_number,\n  napi_string,\n  napi_symbol,\n  napi_object,\n  napi_function,\n  napi_external,\n  napi_bigint,\n} napi_valuetype;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Describes the type of a napi_value. This generally corresponds to the types\ndescribed in Section 6.1 of the ECMAScript Language Specification.\nIn addition to types in that section, napi_valuetype can also represent\nFunctions and Objects with external data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A JavaScript value of type napi_external appears in JavaScript as a plain\nobject such that no properties can be set on it, and no prototype.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  // ES6 types (corresponds to typeof)\n  napi_undefined,\n  napi_null,\n  napi_boolean,\n  napi_number,\n  napi_string,\n  napi_symbol,\n  napi_object,\n  napi_function,\n  napi_external,\n  napi_bigint,\n} napi_valuetype;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Describes the type of a napi_value. This generally corresponds to the types\ndescribed in Section 6.1 of the ECMAScript Language Specification.\nIn addition to types in that section, napi_valuetype can also represent\nFunctions and Objects with external data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A JavaScript value of type napi_external appears in JavaScript as a plain\nobject such that no properties can be set on it, and no prototype.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_valuetype" }, { "textRaw": "napi_typedarray_type", "name": "napi_typedarray_type", - "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_int8_array,\n  napi_uint8_array,\n  napi_uint8_clamped_array,\n  napi_int16_array,\n  napi_uint16_array,\n  napi_int32_array,\n  napi_uint32_array,\n  napi_float32_array,\n  napi_float64_array,\n  napi_bigint64_array,\n  napi_biguint64_array,\n} napi_typedarray_type;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This represents the underlying binary scalar datatype of the TypedArray.\nElements of this enum correspond to\nSection 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_int8_array,\n  napi_uint8_array,\n  napi_uint8_clamped_array,\n  napi_int16_array,\n  napi_uint16_array,\n  napi_int32_array,\n  napi_uint32_array,\n  napi_float32_array,\n  napi_float64_array,\n  napi_bigint64_array,\n  napi_biguint64_array,\n} napi_typedarray_type;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This represents the underlying binary scalar datatype of the TypedArray.\nElements of this enum correspond to\nSection 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_typedarray_type" } @@ -1124,7 +1214,7 @@ "displayName": "Enum types" }, { - "textRaw": "Object Creation Functions", + "textRaw": "Object creation functions", "name": "object_creation_functions", "modules": [ { @@ -1139,7 +1229,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_array(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an N-API value corresponding to a JavaScript Array type.\nJavaScript arrays are described in\nSection 22.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_array(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an N-API value corresponding to a JavaScript Array type.\nJavaScript arrays are described in\nSection 22.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_array" }, @@ -1155,7 +1245,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_array_with_length(napi_env env,\n                                          size_t length,\n                                          napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The initial length of the Array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an N-API value corresponding to a JavaScript Array type.\nThe Array's length property is set to the passed-in length parameter.\nHowever, the underlying buffer is not guaranteed to be pre-allocated by the VM\nwhen the array is created. That behavior is left to the underlying VM\nimplementation. If the buffer must be a contiguous block of memory that can be\ndirectly read and/or written via C, consider using\nnapi_create_external_arraybuffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript arrays are described in\nSection 22.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_array_with_length(napi_env env,\n                                          size_t length,\n                                          napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The initial length of the Array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an N-API value corresponding to a JavaScript Array type.\nThe Array's length property is set to the passed-in length parameter.\nHowever, the underlying buffer is not guaranteed to be pre-allocated by the VM\nwhen the array is created. That behavior is left to the underlying VM\nimplementation. If the buffer must be a contiguous block of memory that can be\ndirectly read and/or written via C, consider using\nnapi_create_external_arraybuffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript arrays are described in\nSection 22.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_array_with_length" }, @@ -1171,7 +1261,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_arraybuffer(napi_env env,\n                                    size_t byte_length,\n                                    void** data,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length in bytes of the array buffer to create.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: Pointer to the underlying byte buffer of the ArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an N-API value corresponding to a JavaScript ArrayBuffer.\nArrayBuffers are used to represent fixed-length binary data buffers. They are\nnormally used as a backing-buffer for TypedArray objects.\nThe ArrayBuffer allocated will have an underlying byte buffer whose size is\ndetermined by the length parameter that's passed in.\nThe underlying buffer is optionally returned back to the caller in case the\ncaller wants to directly manipulate the buffer. This buffer can only be\nwritten to directly from native code. To write to this buffer from JavaScript,\na typed array or DataView object would need to be created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript ArrayBuffer objects are described in\nSection 24.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_arraybuffer(napi_env env,\n                                    size_t byte_length,\n                                    void** data,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length in bytes of the array buffer to create.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: Pointer to the underlying byte buffer of the ArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an N-API value corresponding to a JavaScript ArrayBuffer.\nArrayBuffers are used to represent fixed-length binary data buffers. They are\nnormally used as a backing-buffer for TypedArray objects.\nThe ArrayBuffer allocated will have an underlying byte buffer whose size is\ndetermined by the length parameter that's passed in.\nThe underlying buffer is optionally returned back to the caller in case the\ncaller wants to directly manipulate the buffer. This buffer can only be\nwritten to directly from native code. To write to this buffer from JavaScript,\na typed array or DataView object would need to be created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript ArrayBuffer objects are described in\nSection 24.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_arraybuffer" }, @@ -1187,7 +1277,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_buffer(napi_env env,\n                               size_t size,\n                               void** data,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] size: Size in bytes of the underlying buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: Raw pointer to the underlying buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a node::Buffer object. While this is still a\nfully-supported data structure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_buffer(napi_env env,\n                               size_t size,\n                               void** data,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] size: Size in bytes of the underlying buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: Raw pointer to the underlying buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a node::Buffer object. While this is still a\nfully-supported data structure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_buffer" }, @@ -1203,7 +1293,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_buffer_copy(napi_env env,\n                                    size_t length,\n                                    const void* data,\n                                    void** result_data,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] size: Size in bytes of the input buffer (should be the same as the size\nof the new buffer).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Raw pointer to the underlying buffer to copy from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result_data: Pointer to the new Buffer's underlying data buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a node::Buffer object and initializes it with data copied\nfrom the passed-in buffer. While this is still a fully-supported data\nstructure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_buffer_copy(napi_env env,\n                                    size_t length,\n                                    const void* data,\n                                    void** result_data,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] size: Size in bytes of the input buffer (should be the same as the size\nof the new buffer).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Raw pointer to the underlying buffer to copy from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result_data: Pointer to the new Buffer's underlying data buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a node::Buffer object and initializes it with data copied\nfrom the passed-in buffer. While this is still a fully-supported data\nstructure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_buffer_copy" }, @@ -1219,7 +1309,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_date(napi_env env,\n                             double time,\n                             napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] time: ECMAScript time value in milliseconds since 01 January, 1970 UTC.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API does not observe leap seconds; they are ignored, as\nECMAScript aligns with POSIX time specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a JavaScript Date object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript Date objects are described in\nSection 20.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_date(napi_env env,\n                             double time,\n                             napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] time: ECMAScript time value in milliseconds since 01 January, 1970 UTC.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API does not observe leap seconds; they are ignored, as\nECMAScript aligns with POSIX time specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a JavaScript Date object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript Date objects are described in\nSection 20.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_date" }, @@ -1235,7 +1325,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_external(napi_env env,\n                                 void* data,\n                                 napi_finalize finalize_cb,\n                                 void* finalize_hint,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Raw pointer to the external data.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Optional callback to call when the external value is being\ncollected.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing an external value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a JavaScript value with external data attached to it. This\nis used to pass external data through JavaScript code, so it can be retrieved\nlater by native code using napi_get_value_external.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The created value is not an object, and therefore does not support additional\nproperties. It is considered a distinct value type: calling napi_typeof() with\nan external value yields napi_external.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_external(napi_env env,\n                                 void* data,\n                                 napi_finalize finalize_cb,\n                                 void* finalize_hint,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Raw pointer to the external data.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Optional callback to call when the external value is being\ncollected. napi_finalize provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing an external value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a JavaScript value with external data attached to it. This\nis used to pass external data through JavaScript code, so it can be retrieved\nlater by native code using napi_get_value_external.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The created value is not an object, and therefore does not support additional\nproperties. It is considered a distinct value type: calling napi_typeof() with\nan external value yields napi_external.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_external" }, @@ -1251,7 +1341,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status\nnapi_create_external_arraybuffer(napi_env env,\n                                 void* external_data,\n                                 size_t byte_length,\n                                 napi_finalize finalize_cb,\n                                 void* finalize_hint,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] external_data: Pointer to the underlying byte buffer of the\nArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] byte_length: The length in bytes of the underlying buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being\ncollected.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an N-API value corresponding to a JavaScript ArrayBuffer.\nThe underlying byte buffer of the ArrayBuffer is externally allocated and\nmanaged. The caller must ensure that the byte buffer remains valid until the\nfinalize callback is called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript ArrayBuffers are described in\nSection 24.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status\nnapi_create_external_arraybuffer(napi_env env,\n                                 void* external_data,\n                                 size_t byte_length,\n                                 napi_finalize finalize_cb,\n                                 void* finalize_hint,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] external_data: Pointer to the underlying byte buffer of the\nArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] byte_length: The length in bytes of the underlying buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being\ncollected. napi_finalize provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an N-API value corresponding to a JavaScript ArrayBuffer.\nThe underlying byte buffer of the ArrayBuffer is externally allocated and\nmanaged. The caller must ensure that the byte buffer remains valid until the\nfinalize callback is called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript ArrayBuffers are described in\nSection 24.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_external_arraybuffer" }, @@ -1267,7 +1357,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_external_buffer(napi_env env,\n                                        size_t length,\n                                        void* data,\n                                        napi_finalize finalize_cb,\n                                        void* finalize_hint,\n                                        napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: Size in bytes of the input buffer (should be the same as the\nsize of the new buffer).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Raw pointer to the underlying buffer to copy from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being\ncollected.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a node::Buffer object and initializes it with data\nbacked by the passed in buffer. While this is still a fully-supported data\nstructure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Node.js >=4 Buffers are Uint8Arrays.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_external_buffer(napi_env env,\n                                        size_t length,\n                                        void* data,\n                                        napi_finalize finalize_cb,\n                                        void* finalize_hint,\n                                        napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: Size in bytes of the input buffer (should be the same as the\nsize of the new buffer).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Raw pointer to the underlying buffer to expose to JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being\ncollected. napi_finalize provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a node::Buffer object and initializes it with data\nbacked by the passed in buffer. While this is still a fully-supported data\nstructure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Node.js >=4 Buffers are Uint8Arrays.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_external_buffer" }, @@ -1283,7 +1373,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_object(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a default JavaScript Object.\nIt is the equivalent of doing new Object() in JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Object type is described in Section 6.1.7 of the\nECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_object(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a default JavaScript Object.\nIt is the equivalent of doing new Object() in JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Object type is described in Section 6.1.7 of the\nECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_object" }, @@ -1299,7 +1389,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_symbol(napi_env env,\n                               napi_value description,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] description: Optional napi_value which refers to a JavaScript\nString to be set as the description for the symbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Symbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript Symbol object from a UTF8-encoded C string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Symbol type is described in Section 19.4\nof the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_symbol(napi_env env,\n                               napi_value description,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] description: Optional napi_value which refers to a JavaScript\nString to be set as the description for the symbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Symbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript Symbol object from a UTF8-encoded C string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Symbol type is described in Section 19.4\nof the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_symbol" }, @@ -1315,7 +1405,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_typedarray(napi_env env,\n                                   napi_typedarray_type type,\n                                   size_t length,\n                                   napi_value arraybuffer,\n                                   size_t byte_offset,\n                                   napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: Number of elements in the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: ArrayBuffer underlying the typed array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] byte_offset: The byte offset within the ArrayBuffer from which to\nstart projecting the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript TypedArray object over an existing\nArrayBuffer. TypedArray objects provide an array-like view over an\nunderlying data buffer where each element has the same underlying binary scalar\ndatatype.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It's required that (length * size_of_element) + byte_offset should\nbe <= the size in bytes of the array passed in. If not, a RangeError exception\nis raised.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript TypedArray objects are described in\nSection 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_typedarray(napi_env env,\n                                   napi_typedarray_type type,\n                                   size_t length,\n                                   napi_value arraybuffer,\n                                   size_t byte_offset,\n                                   napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: Number of elements in the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: ArrayBuffer underlying the typed array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] byte_offset: The byte offset within the ArrayBuffer from which to\nstart projecting the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript TypedArray object over an existing\nArrayBuffer. TypedArray objects provide an array-like view over an\nunderlying data buffer where each element has the same underlying binary scalar\ndatatype.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It's required that (length * size_of_element) + byte_offset should\nbe <= the size in bytes of the array passed in. If not, a RangeError exception\nis raised.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript TypedArray objects are described in\nSection 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_typedarray" }, @@ -1331,13 +1421,13 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_dataview(napi_env env,\n                                 size_t byte_length,\n                                 napi_value arraybuffer,\n                                 size_t byte_offset,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: Number of elements in the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: ArrayBuffer underlying the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] byte_offset: The byte offset within the ArrayBuffer from which to\nstart projecting the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript DataView object over an existing ArrayBuffer.\nDataView objects provide an array-like view over an underlying data buffer,\nbut one which allows items of different size and type in the ArrayBuffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is required that byte_length + byte_offset is less than or equal to the\nsize in bytes of the array passed in. If not, a RangeError exception is\nraised.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript DataView objects are described in\nSection 24.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_dataview(napi_env env,\n                                 size_t byte_length,\n                                 napi_value arraybuffer,\n                                 size_t byte_offset,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: Number of elements in the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: ArrayBuffer underlying the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] byte_offset: The byte offset within the ArrayBuffer from which to\nstart projecting the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript DataView object over an existing ArrayBuffer.\nDataView objects provide an array-like view over an underlying data buffer,\nbut one which allows items of different size and type in the ArrayBuffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is required that byte_length + byte_offset is less than or equal to the\nsize in bytes of the array passed in. If not, a RangeError exception is\nraised.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript DataView objects are described in\nSection 24.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_dataview" } ], "type": "module", - "displayName": "Object Creation Functions" + "displayName": "Object creation functions" }, { "textRaw": "Functions to convert from C types to N-API", @@ -1355,7 +1445,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to convert from the C int32_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to convert from the C int32_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_int32" }, @@ -1371,7 +1461,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to convert from the C uint32_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to convert from the C uint32_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_uint32" }, @@ -1387,7 +1477,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to convert from the C int64_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Number type is described in Section 6.1.6\nof the ECMAScript Language Specification. Note the complete range of int64_t\ncannot be represented with full precision in JavaScript. Integer values\noutside the range of Number.MIN_SAFE_INTEGER -(2^53 - 1) -\nNumber.MAX_SAFE_INTEGER (2^53 - 1) will lose precision.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to convert from the C int64_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Number type is described in Section 6.1.6\nof the ECMAScript Language Specification. Note the complete range of int64_t\ncannot be represented with full precision in JavaScript. Integer values\noutside the range of Number.MIN_SAFE_INTEGER -(2**53 - 1) -\nNumber.MAX_SAFE_INTEGER (2**53 - 1) will lose precision.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_int64" }, @@ -1403,7 +1493,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_double(napi_env env, double value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Double-precision value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to convert from the C double type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_double(napi_env env, double value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Double-precision value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to convert from the C double type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_double" }, @@ -1419,7 +1509,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_bigint_int64(napi_env env,\n                                     int64_t value,\n                                     napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API converts the C int64_t type to the JavaScript BigInt type.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_bigint_int64(napi_env env,\n                                     int64_t value,\n                                     napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API converts the C int64_t type to the JavaScript BigInt type.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_bigint_int64" }, @@ -1435,7 +1525,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_bigint_uint64(napi_env env,\n                                      uint64_t value,\n                                      napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API converts the C uint64_t type to the JavaScript BigInt type.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_bigint_uint64(napi_env env,\n                                      uint64_t value,\n                                      napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API converts the C uint64_t type to the JavaScript BigInt type.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_bigint_uint64" }, @@ -1451,7 +1541,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_bigint_words(napi_env env,\n                                     int sign_bit,\n                                     size_t word_count,\n                                     const uint64_t* words,\n                                     napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] sign_bit: Determines if the resulting BigInt will be positive or\nnegative.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] word_count: The length of the words array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] words: An array of uint64_t little-endian 64-bit words.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API converts an array of unsigned 64-bit words into a single BigInt\nvalue.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resulting BigInt is calculated as: (–1)sign_bit (words[0]\n× (264)0 + words[1] × (264)1 + …)

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_bigint_words(napi_env env,\n                                     int sign_bit,\n                                     size_t word_count,\n                                     const uint64_t* words,\n                                     napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] sign_bit: Determines if the resulting BigInt will be positive or\nnegative.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] word_count: The length of the words array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] words: An array of uint64_t little-endian 64-bit words.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API converts an array of unsigned 64-bit words into a single BigInt\nvalue.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resulting BigInt is calculated as: (–1)sign_bit (words[0]\n× (264)0 + words[1] × (264)1 + …)

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_bigint_words" }, @@ -1467,7 +1557,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_string_latin1(napi_env env,\n                                      const char* str,\n                                      size_t length,\n                                      napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] str: Character buffer representing an ISO-8859-1-encoded string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the string in bytes, or NAPI_AUTO_LENGTH if it\nis null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript String object from an ISO-8859-1-encoded C\nstring. The native string is copied.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_string_latin1(napi_env env,\n                                      const char* str,\n                                      size_t length,\n                                      napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] str: Character buffer representing an ISO-8859-1-encoded string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the string in bytes, or NAPI_AUTO_LENGTH if it\nis null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript String object from an ISO-8859-1-encoded C\nstring. The native string is copied.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_string_latin1" }, @@ -1483,7 +1573,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_string_utf16(napi_env env,\n                                     const char16_t* str,\n                                     size_t length,\n                                     napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] str: Character buffer representing a UTF16-LE-encoded string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the string in two-byte code units, or\nNAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript String object from a UTF16-LE-encoded C string.\nThe native string is copied.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_string_utf16(napi_env env,\n                                     const char16_t* str,\n                                     size_t length,\n                                     napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] str: Character buffer representing a UTF16-LE-encoded string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the string in two-byte code units, or\nNAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript String object from a UTF16-LE-encoded C string.\nThe native string is copied.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_string_utf16" }, @@ -1499,7 +1589,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_string_utf8(napi_env env,\n                                    const char* str,\n                                    size_t length,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] str: Character buffer representing a UTF8-encoded string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the string in bytes, or NAPI_AUTO_LENGTH if it\nis null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript String object from a UTF8-encoded C string.\nThe native string is copied.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_string_utf8(napi_env env,\n                                    const char* str,\n                                    size_t length,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] str: Character buffer representing a UTF8-encoded string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the string in bytes, or NAPI_AUTO_LENGTH if it\nis null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a JavaScript String object from a UTF8-encoded C string.\nThe native string is copied.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_string_utf8" } @@ -1523,7 +1613,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_array_length(napi_env env,\n                                  napi_value value,\n                                  uint32_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing the JavaScript Array whose length is\nbeing queried.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: uint32 representing length of the array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the length of an array.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Array length is described in Section 22.1.4.1 of the ECMAScript Language\nSpecification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_array_length(napi_env env,\n                                  napi_value value,\n                                  uint32_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing the JavaScript Array whose length is\nbeing queried.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: uint32 representing length of the array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the length of an array.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Array length is described in Section 22.1.4.1 of the ECMAScript Language\nSpecification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_array_length" }, @@ -1539,7 +1629,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_arraybuffer_info(napi_env env,\n                                      napi_value arraybuffer,\n                                      void** data,\n                                      size_t* byte_length)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: napi_value representing the ArrayBuffer being queried.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The underlying data buffer of the ArrayBuffer. If byte_length\nis 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] byte_length: Length in bytes of the underlying data buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to retrieve the underlying data buffer of an ArrayBuffer and\nits length.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      WARNING: Use caution while using this API. The lifetime of the underlying data\nbuffer is managed by the ArrayBuffer even after it's returned. A\npossible safe way to use this API is in conjunction with\nnapi_create_reference, which can be used to guarantee control over the\nlifetime of the ArrayBuffer. It's also safe to use the returned data buffer\nwithin the same callback as long as there are no calls to other APIs that might\ntrigger a GC.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_arraybuffer_info(napi_env env,\n                                      napi_value arraybuffer,\n                                      void** data,\n                                      size_t* byte_length)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: napi_value representing the ArrayBuffer being queried.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The underlying data buffer of the ArrayBuffer. If byte_length\nis 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] byte_length: Length in bytes of the underlying data buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to retrieve the underlying data buffer of an ArrayBuffer and\nits length.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      WARNING: Use caution while using this API. The lifetime of the underlying data\nbuffer is managed by the ArrayBuffer even after it's returned. A\npossible safe way to use this API is in conjunction with\nnapi_create_reference, which can be used to guarantee control over the\nlifetime of the ArrayBuffer. It's also safe to use the returned data buffer\nwithin the same callback as long as there are no calls to other APIs that might\ntrigger a GC.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_arraybuffer_info" }, @@ -1555,7 +1645,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_buffer_info(napi_env env,\n                                 napi_value value,\n                                 void** data,\n                                 size_t* length)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing the node::Buffer being queried.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The underlying data buffer of the node::Buffer.\nIf length is 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] length: Length in bytes of the underlying data buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to retrieve the underlying data buffer of a node::Buffer\nand it's length.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: Use caution while using this API since the underlying data buffer's\nlifetime is not guaranteed if it's managed by the VM.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_buffer_info(napi_env env,\n                                 napi_value value,\n                                 void** data,\n                                 size_t* length)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing the node::Buffer being queried.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The underlying data buffer of the node::Buffer.\nIf length is 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] length: Length in bytes of the underlying data buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to retrieve the underlying data buffer of a node::Buffer\nand it's length.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: Use caution while using this API since the underlying data buffer's\nlifetime is not guaranteed if it's managed by the VM.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_buffer_info" }, @@ -1571,7 +1661,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_prototype(napi_env env,\n                               napi_value object,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: napi_value representing JavaScript Object whose prototype\nto return. This returns the equivalent of Object.getPrototypeOf (which is\nnot the same as the function's prototype property).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing prototype of the given object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_prototype(napi_env env,\n                               napi_value object,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: napi_value representing JavaScript Object whose prototype\nto return. This returns the equivalent of Object.getPrototypeOf (which is\nnot the same as the function's prototype property).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing prototype of the given object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_prototype" }, @@ -1587,7 +1677,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_typedarray_info(napi_env env,\n                                     napi_value typedarray,\n                                     napi_typedarray_type* type,\n                                     size_t* length,\n                                     void** data,\n                                     napi_value* arraybuffer,\n                                     size_t* byte_offset)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] typedarray: napi_value representing the TypedArray whose\nproperties to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] length: The number of elements in the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The data buffer underlying the TypedArray adjusted by\nthe byte_offset value so that it points to the first element in the\nTypedArray. If the length of the array is 0, this may be NULL or\nany other pointer value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] arraybuffer: The ArrayBuffer underlying the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] byte_offset: The byte offset within the underlying native array\nat which the first element of the arrays is located. The value for the data\nparameter has already been adjusted so that data points to the first element\nin the array. Therefore, the first byte of the native array would be at\ndata - byte_offset.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns various properties of a typed array.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: Use caution while using this API since the underlying data buffer\nis managed by the VM.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_typedarray_info(napi_env env,\n                                     napi_value typedarray,\n                                     napi_typedarray_type* type,\n                                     size_t* length,\n                                     void** data,\n                                     napi_value* arraybuffer,\n                                     size_t* byte_offset)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] typedarray: napi_value representing the TypedArray whose\nproperties to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] length: The number of elements in the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The data buffer underlying the TypedArray adjusted by\nthe byte_offset value so that it points to the first element in the\nTypedArray. If the length of the array is 0, this may be NULL or\nany other pointer value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] arraybuffer: The ArrayBuffer underlying the TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] byte_offset: The byte offset within the underlying native array\nat which the first element of the arrays is located. The value for the data\nparameter has already been adjusted so that data points to the first element\nin the array. Therefore, the first byte of the native array would be at\ndata - byte_offset.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns various properties of a typed array.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: Use caution while using this API since the underlying data buffer\nis managed by the VM.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_typedarray_info" }, @@ -1603,7 +1693,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_dataview_info(napi_env env,\n                                   napi_value dataview,\n                                   size_t* byte_length,\n                                   void** data,\n                                   napi_value* arraybuffer,\n                                   size_t* byte_offset)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] dataview: napi_value representing the DataView whose\nproperties to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] byte_length: Number of bytes in the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The data buffer underlying the DataView.\nIf byte_length is 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] arraybuffer: ArrayBuffer underlying the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] byte_offset: The byte offset within the data buffer from which\nto start projecting the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns various properties of a DataView.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_dataview_info(napi_env env,\n                                   napi_value dataview,\n                                   size_t* byte_length,\n                                   void** data,\n                                   napi_value* arraybuffer,\n                                   size_t* byte_offset)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] dataview: napi_value representing the DataView whose\nproperties to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] byte_length: Number of bytes in the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: The data buffer underlying the DataView.\nIf byte_length is 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] arraybuffer: ArrayBuffer underlying the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] byte_offset: The byte offset within the data buffer from which\nto start projecting the DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns various properties of a DataView.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_dataview_info" }, @@ -1619,7 +1709,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_date_value(napi_env env,\n                                napi_value value,\n                                double* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Time value as a double represented as milliseconds since\nmidnight at the beginning of 01 January, 1970 UTC.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API does not observe leap seconds; they are ignored, as\nECMAScript aligns with POSIX time specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-date napi_value is passed\nin it returns napi_date_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C double primitive of time value for the given JavaScript\nDate.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_date_value(napi_env env,\n                                napi_value value,\n                                double* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Time value as a double represented as milliseconds since\nmidnight at the beginning of 01 January, 1970 UTC.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API does not observe leap seconds; they are ignored, as\nECMAScript aligns with POSIX time specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-date napi_value is passed\nin it returns napi_date_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C double primitive of time value for the given JavaScript\nDate.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_date_value" }, @@ -1635,7 +1725,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Boolean.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C boolean primitive equivalent of the given JavaScript\nBoolean.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-boolean napi_value is\npassed in it returns napi_boolean_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C boolean primitive equivalent of the given JavaScript\nBoolean.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Boolean.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C boolean primitive equivalent of the given JavaScript\nBoolean.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-boolean napi_value is\npassed in it returns napi_boolean_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C boolean primitive equivalent of the given JavaScript\nBoolean.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_bool" }, @@ -1651,7 +1741,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_double(napi_env env,\n                                  napi_value value,\n                                  double* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C double primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-number napi_value is passed\nin it returns napi_number_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C double primitive equivalent of the given JavaScript\nNumber.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_double(napi_env env,\n                                  napi_value value,\n                                  double* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C double primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-number napi_value is passed\nin it returns napi_number_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C double primitive equivalent of the given JavaScript\nNumber.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_double" }, @@ -1667,7 +1757,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_bigint_int64(napi_env env,\n                                        napi_value value,\n                                        int64_t* result,\n                                        bool* lossless);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C int64_t primitive equivalent of the given JavaScript\nBigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] lossless: Indicates whether the BigInt value was converted\nlosslessly.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-BigInt is passed in it\nreturns napi_bigint_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C int64_t primitive equivalent of the given JavaScript\nBigInt. If needed it will truncate the value, setting lossless to false.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_bigint_int64(napi_env env,\n                                        napi_value value,\n                                        int64_t* result,\n                                        bool* lossless);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C int64_t primitive equivalent of the given JavaScript\nBigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] lossless: Indicates whether the BigInt value was converted\nlosslessly.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-BigInt is passed in it\nreturns napi_bigint_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C int64_t primitive equivalent of the given JavaScript\nBigInt. If needed it will truncate the value, setting lossless to false.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_bigint_int64" }, @@ -1683,7 +1773,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_bigint_uint64(napi_env env,\n                                        napi_value value,\n                                        uint64_t* result,\n                                        bool* lossless);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C uint64_t primitive equivalent of the given JavaScript\nBigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] lossless: Indicates whether the BigInt value was converted\nlosslessly.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-BigInt is passed in it\nreturns napi_bigint_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C uint64_t primitive equivalent of the given JavaScript\nBigInt. If needed it will truncate the value, setting lossless to false.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_bigint_uint64(napi_env env,\n                                        napi_value value,\n                                        uint64_t* result,\n                                        bool* lossless);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C uint64_t primitive equivalent of the given JavaScript\nBigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] lossless: Indicates whether the BigInt value was converted\nlosslessly.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-BigInt is passed in it\nreturns napi_bigint_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C uint64_t primitive equivalent of the given JavaScript\nBigInt. If needed it will truncate the value, setting lossless to false.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_bigint_uint64" }, @@ -1699,7 +1789,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_bigint_words(napi_env env,\n                                        napi_value value,\n                                        int* sign_bit,\n                                        size_t* word_count,\n                                        uint64_t* words);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] sign_bit: Integer representing if the JavaScript BigInt is positive\nor negative.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in/out] word_count: Must be initialized to the length of the words\narray. Upon return, it will be set to the actual number of words that\nwould be needed to store this BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] words: Pointer to a pre-allocated 64-bit word array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API converts a single BigInt value into a sign bit, 64-bit little-endian\narray, and the number of elements in the array. sign_bit and words may be\nboth set to NULL, in order to get only word_count.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_bigint_words(napi_env env,\n                                        napi_value value,\n                                        int* sign_bit,\n                                        size_t* word_count,\n                                        uint64_t* words);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] sign_bit: Integer representing if the JavaScript BigInt is positive\nor negative.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in/out] word_count: Must be initialized to the length of the words\narray. Upon return, it will be set to the actual number of words that\nwould be needed to store this BigInt.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] words: Pointer to a pre-allocated 64-bit word array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API converts a single BigInt value into a sign bit, 64-bit little-endian\narray, and the number of elements in the array. sign_bit and words may be\nboth set to NULL, in order to get only word_count.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_bigint_words" }, @@ -1715,7 +1805,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_external(napi_env env,\n                                    napi_value value,\n                                    void** result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript external value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Pointer to the data wrapped by the JavaScript external value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-external napi_value is\npassed in it returns napi_invalid_arg.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API retrieves the external data pointer that was previously passed to\nnapi_create_external().

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_external(napi_env env,\n                                    napi_value value,\n                                    void** result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript external value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Pointer to the data wrapped by the JavaScript external value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-external napi_value is\npassed in it returns napi_invalid_arg.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API retrieves the external data pointer that was previously passed to\nnapi_create_external().

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_external" }, @@ -1731,7 +1821,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_int32(napi_env env,\n                                 napi_value value,\n                                 int32_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C int32 primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in napi_number_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C int32 primitive equivalent\nof the given JavaScript Number.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the number exceeds the range of the 32 bit integer, then the result is\ntruncated to the equivalent of the bottom 32 bits. This can result in a large\npositive number becoming a negative number if the value is > 2^31 -1.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Non-finite number values (NaN, +Infinity, or -Infinity) set the\nresult to zero.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_int32(napi_env env,\n                                 napi_value value,\n                                 int32_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C int32 primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in napi_number_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C int32 primitive equivalent\nof the given JavaScript Number.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the number exceeds the range of the 32 bit integer, then the result is\ntruncated to the equivalent of the bottom 32 bits. This can result in a large\npositive number becoming a negative number if the value is > 231 - 1.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Non-finite number values (NaN, +Infinity, or -Infinity) set the\nresult to zero.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_int32" }, @@ -1747,7 +1837,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_int64(napi_env env,\n                                 napi_value value,\n                                 int64_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C int64 primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in it returns napi_number_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C int64 primitive equivalent of the given JavaScript\nNumber.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Number values outside the range of Number.MIN_SAFE_INTEGER\n-(2^53 - 1) - Number.MAX_SAFE_INTEGER (2^53 - 1) will lose precision.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Non-finite number values (NaN, +Infinity, or -Infinity) set the\nresult to zero.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_int64(napi_env env,\n                                 napi_value value,\n                                 int64_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C int64 primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in it returns napi_number_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C int64 primitive equivalent of the given JavaScript\nNumber.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Number values outside the range of Number.MIN_SAFE_INTEGER\n-(2**53 - 1) - Number.MAX_SAFE_INTEGER (2**53 - 1) will lose\nprecision.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Non-finite number values (NaN, +Infinity, or -Infinity) set the\nresult to zero.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_int64" }, @@ -1763,7 +1853,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_string_latin1(napi_env env,\n                                         napi_value value,\n                                         char* buf,\n                                         size_t bufsize,\n                                         size_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] buf: Buffer to write the ISO-8859-1-encoded string into. If NULL is\npassed in, the length of the string (in bytes) is returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Number of bytes copied into the buffer, excluding the null\nterminator.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the ISO-8859-1-encoded string corresponding the value passed\nin.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_string_latin1(napi_env env,\n                                         napi_value value,\n                                         char* buf,\n                                         size_t bufsize,\n                                         size_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] buf: Buffer to write the ISO-8859-1-encoded string into. If NULL is\npassed in, the length of the string (in bytes) is returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Number of bytes copied into the buffer, excluding the null\nterminator.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the ISO-8859-1-encoded string corresponding the value passed\nin.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_string_latin1" }, @@ -1779,7 +1869,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_string_utf8(napi_env env,\n                                       napi_value value,\n                                       char* buf,\n                                       size_t bufsize,\n                                       size_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] buf: Buffer to write the UTF8-encoded string into. If NULL is passed\nin, the length of the string (in bytes) is returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Number of bytes copied into the buffer, excluding the null\nterminator.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the UTF8-encoded string corresponding the value passed in.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_string_utf8(napi_env env,\n                                       napi_value value,\n                                       char* buf,\n                                       size_t bufsize,\n                                       size_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] buf: Buffer to write the UTF8-encoded string into. If NULL is passed\nin, the length of the string (in bytes) is returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Number of bytes copied into the buffer, excluding the null\nterminator.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the UTF8-encoded string corresponding the value passed in.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_string_utf8" }, @@ -1795,7 +1885,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_string_utf16(napi_env env,\n                                        napi_value value,\n                                        char16_t* buf,\n                                        size_t bufsize,\n                                        size_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] buf: Buffer to write the UTF16-LE-encoded string into. If NULL is\npassed in, the length of the string (in 2-byte code units) is returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Number of 2-byte code units copied into the buffer, excluding\nthe null terminator.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the UTF16-encoded string corresponding the value passed in.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_string_utf16(napi_env env,\n                                        napi_value value,\n                                        char16_t* buf,\n                                        size_t bufsize,\n                                        size_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] buf: Buffer to write the UTF16-LE-encoded string into. If NULL is\npassed in, the length of the string (in 2-byte code units) is returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Number of 2-byte code units copied into the buffer, excluding\nthe null terminator.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the UTF16-encoded string corresponding the value passed in.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_string_utf16" }, @@ -1811,7 +1901,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_uint32(napi_env env,\n                                  napi_value value,\n                                  uint32_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C primitive equivalent of the given napi_value as a\nuint32_t.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in it returns napi_number_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C primitive equivalent of the given napi_value as a\nuint32_t.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_value_uint32(napi_env env,\n                                  napi_value value,\n                                  uint32_t* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: C primitive equivalent of the given napi_value as a\nuint32_t.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in it returns napi_number_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the C primitive equivalent of the given napi_value as a\nuint32_t.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_value_uint32" } @@ -1835,7 +1925,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The value of the boolean to retrieve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript Boolean singleton to\nretrieve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to return the JavaScript singleton object that is used to\nrepresent the given boolean value.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The value of the boolean to retrieve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript Boolean singleton to\nretrieve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to return the JavaScript singleton object that is used to\nrepresent the given boolean value.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_boolean" }, @@ -1851,7 +1941,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_global(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript global object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the global object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_global(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript global object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the global object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_global" }, @@ -1867,7 +1957,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_null(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript null object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the null object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_null(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript null object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the null object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_null" }, @@ -1883,7 +1973,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_undefined(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript Undefined value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the Undefined object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_undefined(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript Undefined value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the Undefined object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_undefined" } @@ -1893,10 +1983,10 @@ } ], "type": "misc", - "displayName": "Working with JavaScript Values" + "displayName": "Working with JavaScript values" }, { - "textRaw": "Working with JavaScript Values and Abstract Operations", + "textRaw": "Working with JavaScript values and abstract operations", "name": "working_with_javascript_values_and_abstract_operations", "desc": "

                                                                                                                                                                                                                                                      N-API exposes a set of APIs to perform some abstract operations on JavaScript\nvalues. Some of these operations are documented under Section 7\nof the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These APIs support doing one of the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Coerce JavaScript values to specific JavaScript types (such as Number or\nString).
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Check the type of a JavaScript value.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Check for equality between two JavaScript values.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      ", "modules": [ @@ -1912,7 +2002,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_coerce_to_bool(napi_env env,\n                                napi_value value,\n                                napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the coerced JavaScript Boolean.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API implements the abstract operation ToBoolean() as defined in\nSection 7.1.2 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_coerce_to_bool(napi_env env,\n                                napi_value value,\n                                napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the coerced JavaScript Boolean.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API implements the abstract operation ToBoolean() as defined in\nSection 7.1.2 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_coerce_to_bool" }, @@ -1928,7 +2018,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_coerce_to_number(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the coerced JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API implements the abstract operation ToNumber() as defined in\nSection 7.1.3 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_coerce_to_number(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the coerced JavaScript Number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API implements the abstract operation ToNumber() as defined in\nSection 7.1.3 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_coerce_to_number" }, @@ -1944,7 +2034,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_coerce_to_object(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the coerced JavaScript Object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API implements the abstract operation ToObject() as defined in\nSection 7.1.13 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_coerce_to_object(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the coerced JavaScript Object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API implements the abstract operation ToObject() as defined in\nSection 7.1.13 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_coerce_to_object" }, @@ -1960,7 +2050,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_coerce_to_string(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the coerced JavaScript String.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API implements the abstract operation ToString() as defined in\nSection 7.1.13 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_coerce_to_string(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the coerced JavaScript String.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API implements the abstract operation ToString() as defined in\nSection 7.1.13 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_coerce_to_string" }, @@ -1976,7 +2066,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value whose type to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The type of the JavaScript value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • napi_invalid_arg if the type of value is not a known ECMAScript type and\nvalue is not an External value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents behavior similar to invoking the typeof Operator on\nthe object as defined in Section 12.5.5 of the ECMAScript Language\nSpecification. However, it has support for detecting an External value.\nIf value has a type that is invalid, an error is returned.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value whose type to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The type of the JavaScript value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • napi_invalid_arg if the type of value is not a known ECMAScript type and\nvalue is not an External value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents behavior similar to invoking the typeof Operator on\nthe object as defined in Section 12.5.5 of the ECMAScript Language\nSpecification. However, there are some differences:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. It has support for detecting an External value.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. It detects null as a separate type, while ECMAScript typeof would detect\nobject.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If value has a type that is invalid, an error is returned.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_typeof" }, @@ -1992,7 +2082,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_instanceof(napi_env env,\n                            napi_value object,\n                            napi_value constructor,\n                            bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] constructor: The JavaScript function object of the constructor function\nto check against.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Boolean that is set to true if object instanceof constructor\nis true.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents invoking the instanceof Operator on the object as\ndefined in Section 12.10.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_instanceof(napi_env env,\n                            napi_value object,\n                            napi_value constructor,\n                            bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] constructor: The JavaScript function object of the constructor function\nto check against.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Boolean that is set to true if object instanceof constructor\nis true.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents invoking the instanceof Operator on the object as\ndefined in Section 12.10.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_instanceof" }, @@ -2008,7 +2098,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_array(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given object is an array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents invoking the IsArray operation on the object\nas defined in Section 7.2.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_array(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given object is an array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents invoking the IsArray operation on the object\nas defined in Section 7.2.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_array" }, @@ -2024,7 +2114,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given object is an ArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is an array buffer.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given object is an ArrayBuffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is an array buffer.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_arraybuffer" }, @@ -2040,7 +2130,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_buffer(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents a node::Buffer\nobject.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is a buffer.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_buffer(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents a node::Buffer\nobject.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is a buffer.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_buffer" }, @@ -2056,7 +2146,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_date(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents a JavaScript Date\nobject.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is a date.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_date(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents a JavaScript Date\nobject.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is a date.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_date" }, @@ -2072,7 +2162,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_error(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents an Error object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is an Error.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_error(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents an Error object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is an Error.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_error" }, @@ -2088,7 +2178,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents a TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is a typed array.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents a TypedArray.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is a typed array.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_typedarray" }, @@ -2104,7 +2194,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_dataview(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents a DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is a DataView.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_dataview(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the given napi_value represents a DataView.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in is a DataView.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_dataview" }, @@ -2120,7 +2210,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_strict_equals(napi_env env,\n                               napi_value lhs,\n                               napi_value rhs,\n                               bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] lhs: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] rhs: The JavaScript value to check against.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the two napi_value objects are equal.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents the invocation of the Strict Equality algorithm as\ndefined in Section 7.2.14 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_strict_equals(napi_env env,\n                               napi_value lhs,\n                               napi_value rhs,\n                               bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] lhs: The JavaScript value to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] rhs: The JavaScript value to check against.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the two napi_value objects are equal.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents the invocation of the Strict Equality algorithm as\ndefined in Section 7.2.14 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_strict_equals" }, @@ -2131,11 +2221,12 @@ "added": [ "v12.16.0" ], + "napiVersion": [ + 7 + ], "changes": [] }, - "stability": 1, - "stabilityText": "Experimental", - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_detach_arraybuffer(napi_env env,\n                                    napi_value arraybuffer)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: The JavaScript ArrayBuffer to be detached.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-detachable ArrayBuffer is\npassed in it returns napi_detachable_arraybuffer_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Generally, an ArrayBuffer is non-detachable if it has been detached before.\nThe engine may impose additional conditions on whether an ArrayBuffer is\ndetachable. For example, V8 requires that the ArrayBuffer be external,\nthat is, created with napi_create_external_arraybuffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents the invocation of the ArrayBuffer detach operation as\ndefined in Section 24.1.1.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_detach_arraybuffer(napi_env env,\n                                    napi_value arraybuffer)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: The JavaScript ArrayBuffer to be detached.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded. If a non-detachable ArrayBuffer is\npassed in it returns napi_detachable_arraybuffer_expected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Generally, an ArrayBuffer is non-detachable if it has been detached before.\nThe engine may impose additional conditions on whether an ArrayBuffer is\ndetachable. For example, V8 requires that the ArrayBuffer be external,\nthat is, created with napi_create_external_arraybuffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents the invocation of the ArrayBuffer detach operation as\ndefined in Section 24.1.1.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_detach_arraybuffer" }, @@ -2146,22 +2237,23 @@ "added": [ "v12.16.0" ], + "napiVersion": [ + 7 + ], "changes": [] }, - "stability": 1, - "stabilityText": "Experimental", - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_detached_arraybuffer(napi_env env,\n                                         napi_value arraybuffer,\n                                         bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: The JavaScript ArrayBuffer to be checked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the arraybuffer is detached.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ArrayBuffer is considered detached if its internal data is null.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents the invocation of the ArrayBuffer IsDetachedBuffer\noperation as defined in Section 24.1.1.2 of the ECMAScript Language\nSpecification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_detached_arraybuffer(napi_env env,\n                                         napi_value arraybuffer,\n                                         bool* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] arraybuffer: The JavaScript ArrayBuffer to be checked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the arraybuffer is detached.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ArrayBuffer is considered detached if its internal data is null.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API represents the invocation of the ArrayBuffer IsDetachedBuffer\noperation as defined in Section 24.1.1.2 of the ECMAScript Language\nSpecification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_detached_arraybuffer" } ], "type": "misc", - "displayName": "Working with JavaScript Values and Abstract Operations" + "displayName": "Working with JavaScript values and abstract operations" }, { - "textRaw": "Working with JavaScript Properties", + "textRaw": "Working with JavaScript properties", "name": "working_with_javascript_properties", - "desc": "

                                                                                                                                                                                                                                                      N-API exposes a set of APIs to get and set properties on JavaScript\nobjects. Some of these types are documented under Section 7 of the\nECMAScript Language Specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Properties in JavaScript are represented as a tuple of a key and a value.\nFundamentally, all property keys in N-API can be represented in one of the\nfollowing forms:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Named: a simple UTF8-encoded string
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Integer-Indexed: an index value represented by uint32_t
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • JavaScript value: these are represented in N-API by napi_value. This can\nbe a napi_value representing a String, Number, or Symbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API values are represented by the type napi_value.\nAny N-API call that requires a JavaScript value takes in a napi_value.\nHowever, it's the caller's responsibility to make sure that the\nnapi_value in question is of the JavaScript type expected by the API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The APIs documented in this section provide a simple interface to\nget and set properties on arbitrary JavaScript objects represented by\nnapi_value.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For instance, consider the following JavaScript code snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const obj = {};\nobj.myProp = 123;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;\n\n// const obj = {}\nnapi_value obj, value;\nstatus = napi_create_object(env, &obj);\nif (status != napi_ok) return status;\n\n// Create a napi_value for 123\nstatus = napi_create_int32(env, 123, &value);\nif (status != napi_ok) return status;\n\n// obj.myProp = 123\nstatus = napi_set_named_property(env, obj, \"myProp\", value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Indexed properties can be set in a similar manner. Consider the following\nJavaScript snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = [];\narr[123] = 'hello';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;\n\n// const arr = [];\nnapi_value arr, value;\nstatus = napi_create_array(env, &arr);\nif (status != napi_ok) return status;\n\n// Create a napi_value for 'hello'\nstatus = napi_create_string_utf8(env, \"hello\", NAPI_AUTO_LENGTH, &value);\nif (status != napi_ok) return status;\n\n// arr[123] = 'hello';\nstatus = napi_set_element(env, arr, 123, value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Properties can be retrieved using the APIs described in this section.\nConsider the following JavaScript snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = [];\nconst value = arr[123];\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;\n\n// const arr = []\nnapi_value arr, value;\nstatus = napi_create_array(env, &arr);\nif (status != napi_ok) return status;\n\n// const value = arr[123]\nstatus = napi_get_element(env, arr, 123, &value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Finally, multiple properties can also be defined on an object for performance\nreasons. Consider the following JavaScript:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const obj = {};\nObject.defineProperties(obj, {\n  'foo': { value: 123, writable: true, configurable: true, enumerable: true },\n  'bar': { value: 456, writable: true, configurable: true, enumerable: true }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status = napi_status_generic_failure;\n\n// const obj = {};\nnapi_value obj;\nstatus = napi_create_object(env, &obj);\nif (status != napi_ok) return status;\n\n// Create napi_values for 123 and 456\nnapi_value fooValue, barValue;\nstatus = napi_create_int32(env, 123, &fooValue);\nif (status != napi_ok) return status;\nstatus = napi_create_int32(env, 456, &barValue);\nif (status != napi_ok) return status;\n\n// Set the properties\nnapi_property_descriptor descriptors[] = {\n  { \"foo\", NULL, NULL, NULL, NULL, fooValue, napi_default, NULL },\n  { \"bar\", NULL, NULL, NULL, NULL, barValue, napi_default, NULL }\n}\nstatus = napi_define_properties(env,\n                                obj,\n                                sizeof(descriptors) / sizeof(descriptors[0]),\n                                descriptors);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      N-API exposes a set of APIs to get and set properties on JavaScript\nobjects. Some of these types are documented under Section 7 of the\nECMAScript Language Specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Properties in JavaScript are represented as a tuple of a key and a value.\nFundamentally, all property keys in N-API can be represented in one of the\nfollowing forms:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Named: a simple UTF8-encoded string
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Integer-Indexed: an index value represented by uint32_t
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • JavaScript value: these are represented in N-API by napi_value. This can\nbe a napi_value representing a String, Number, or Symbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API values are represented by the type napi_value.\nAny N-API call that requires a JavaScript value takes in a napi_value.\nHowever, it's the caller's responsibility to make sure that the\nnapi_value in question is of the JavaScript type expected by the API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The APIs documented in this section provide a simple interface to\nget and set properties on arbitrary JavaScript objects represented by\nnapi_value.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For instance, consider the following JavaScript code snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const obj = {};\nobj.myProp = 123;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;\n\n// const obj = {}\nnapi_value obj, value;\nstatus = napi_create_object(env, &obj);\nif (status != napi_ok) return status;\n\n// Create a napi_value for 123\nstatus = napi_create_int32(env, 123, &value);\nif (status != napi_ok) return status;\n\n// obj.myProp = 123\nstatus = napi_set_named_property(env, obj, \"myProp\", value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Indexed properties can be set in a similar manner. Consider the following\nJavaScript snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = [];\narr[123] = 'hello';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;\n\n// const arr = [];\nnapi_value arr, value;\nstatus = napi_create_array(env, &arr);\nif (status != napi_ok) return status;\n\n// Create a napi_value for 'hello'\nstatus = napi_create_string_utf8(env, \"hello\", NAPI_AUTO_LENGTH, &value);\nif (status != napi_ok) return status;\n\n// arr[123] = 'hello';\nstatus = napi_set_element(env, arr, 123, value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Properties can be retrieved using the APIs described in this section.\nConsider the following JavaScript snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = [];\nconst value = arr[123];\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;\n\n// const arr = []\nnapi_value arr, value;\nstatus = napi_create_array(env, &arr);\nif (status != napi_ok) return status;\n\n// const value = arr[123]\nstatus = napi_get_element(env, arr, 123, &value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Finally, multiple properties can also be defined on an object for performance\nreasons. Consider the following JavaScript:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const obj = {};\nObject.defineProperties(obj, {\n  'foo': { value: 123, writable: true, configurable: true, enumerable: true },\n  'bar': { value: 456, writable: true, configurable: true, enumerable: true }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status status = napi_status_generic_failure;\n\n// const obj = {};\nnapi_value obj;\nstatus = napi_create_object(env, &obj);\nif (status != napi_ok) return status;\n\n// Create napi_values for 123 and 456\nnapi_value fooValue, barValue;\nstatus = napi_create_int32(env, 123, &fooValue);\nif (status != napi_ok) return status;\nstatus = napi_create_int32(env, 456, &barValue);\nif (status != napi_ok) return status;\n\n// Set the properties\nnapi_property_descriptor descriptors[] = {\n  { \"foo\", NULL, NULL, NULL, NULL, fooValue, napi_writable | napi_configurable, NULL },\n  { \"bar\", NULL, NULL, NULL, NULL, barValue, napi_writable | napi_configurable, NULL }\n}\nstatus = napi_define_properties(env,\n                                obj,\n                                sizeof(descriptors) / sizeof(descriptors[0]),\n                                descriptors);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Structures", @@ -2170,14 +2262,23 @@ { "textRaw": "napi_property_attributes", "name": "napi_property_attributes", - "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_default = 0,\n  napi_writable = 1 << 0,\n  napi_enumerable = 1 << 1,\n  napi_configurable = 1 << 2,\n\n  // Used with napi_define_class to distinguish static properties\n  // from instance properties. Ignored by napi_define_properties.\n  napi_static = 1 << 10,\n} napi_property_attributes;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_property_attributes are flags used to control the behavior of properties\nset on a JavaScript object. Other than napi_static they correspond to the\nattributes listed in Section 6.1.7.1\nof the ECMAScript Language Specification.\nThey can be one or more of the following bitflags:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • napi_default: No explicit attributes are set on the property. By default, a\nproperty is read only, not enumerable and not configurable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_writable: The property is writable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_enumerable: The property is enumerable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_configurable: The property is configurable as defined in\nSection 6.1.7.1 of the ECMAScript Language Specification.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_static: The property will be defined as a static property on a class as\nopposed to an instance property, which is the default. This is used only by\nnapi_define_class. It is ignored by napi_define_properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "meta": { + "changes": [ + { + "version": "v12.20.0", + "pr-url": "https://github.com/nodejs/node/pull/35214", + "description": "added `napi_default_method` and `napi_default_property`" + } + ] + }, + "desc": "
                                                                                                                                                                                                                                                      typedef enum {\n  napi_default = 0,\n  napi_writable = 1 << 0,\n  napi_enumerable = 1 << 1,\n  napi_configurable = 1 << 2,\n\n  // Used with napi_define_class to distinguish static properties\n  // from instance properties. Ignored by napi_define_properties.\n  napi_static = 1 << 10,\n\n  // Default for class methods.\n  napi_default_method = napi_writable | napi_configurable,\n\n  // Default for object properties, like in JS obj[prop].\n  napi_default_property = napi_writable |\n                          napi_enumerable |\n                          napi_configurable,\n} napi_property_attributes;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_property_attributes are flags used to control the behavior of properties\nset on a JavaScript object. Other than napi_static they correspond to the\nattributes listed in Section 6.1.7.1\nof the ECMAScript Language Specification.\nThey can be one or more of the following bitflags:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • napi_default: No explicit attributes are set on the property. By default, a\nproperty is read only, not enumerable and not configurable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_writable: The property is writable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_enumerable: The property is enumerable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_configurable: The property is configurable as defined in\nSection 6.1.7.1 of the ECMAScript Language Specification.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_static: The property will be defined as a static property on a class as\nopposed to an instance property, which is the default. This is used only by\nnapi_define_class. It is ignored by napi_define_properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_default_method: The property is configureable, writeable but not\nenumerable like a method in a JS class.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • napi_default_property: The property is writable, enumerable and configurable\nlike a property set via JS code obj.key = value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_property_attributes" }, { "textRaw": "napi_property_descriptor", "name": "napi_property_descriptor", - "desc": "
                                                                                                                                                                                                                                                      typedef struct {\n  // One of utf8name or name should be NULL.\n  const char* utf8name;\n  napi_value name;\n\n  napi_callback method;\n  napi_callback getter;\n  napi_callback setter;\n  napi_value value;\n\n  napi_property_attributes attributes;\n  void* data;\n} napi_property_descriptor;\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • utf8name: Optional String describing the key for the property,\nencoded as UTF8. One of utf8name or name must be provided for the\nproperty.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • name: Optional napi_value that points to a JavaScript string or symbol\nto be used as the key for the property. One of utf8name or name must\nbe provided for the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value: The value that's retrieved by a get access of the property if the\nproperty is a data property. If this is passed in, set getter, setter,\nmethod and data to NULL (since these members won't be used).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • getter: A function to call when a get access of the property is performed.\nIf this is passed in, set value and method to NULL (since these members\nwon't be used). The given function is called implicitly by the runtime when\nthe property is accessed from JavaScript code (or if a get on the property is\nperformed using a N-API call).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • setter: A function to call when a set access of the property is performed.\nIf this is passed in, set value and method to NULL (since these members\nwon't be used). The given function is called implicitly by the runtime when\nthe property is set from JavaScript code (or if a set on the property is\nperformed using a N-API call).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • method: Set this to make the property descriptor object's value\nproperty to be a JavaScript function represented by method. If this is\npassed in, set value, getter and setter to NULL (since these members\nwon't be used).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • attributes: The attributes associated with the particular property. See\nnapi_property_attributes.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • data: The callback data passed into method, getter and setter if this\nfunction is invoked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      typedef struct {\n  // One of utf8name or name should be NULL.\n  const char* utf8name;\n  napi_value name;\n\n  napi_callback method;\n  napi_callback getter;\n  napi_callback setter;\n  napi_value value;\n\n  napi_property_attributes attributes;\n  void* data;\n} napi_property_descriptor;\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • utf8name: Optional String describing the key for the property,\nencoded as UTF8. One of utf8name or name must be provided for the\nproperty.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • name: Optional napi_value that points to a JavaScript string or symbol\nto be used as the key for the property. One of utf8name or name must\nbe provided for the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value: The value that's retrieved by a get access of the property if the\nproperty is a data property. If this is passed in, set getter, setter,\nmethod and data to NULL (since these members won't be used).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • getter: A function to call when a get access of the property is performed.\nIf this is passed in, set value and method to NULL (since these members\nwon't be used). The given function is called implicitly by the runtime when\nthe property is accessed from JavaScript code (or if a get on the property is\nperformed using a N-API call). napi_callback provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • setter: A function to call when a set access of the property is performed.\nIf this is passed in, set value and method to NULL (since these members\nwon't be used). The given function is called implicitly by the runtime when\nthe property is set from JavaScript code (or if a set on the property is\nperformed using a N-API call). napi_callback provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • method: Set this to make the property descriptor object's value\nproperty to be a JavaScript function represented by method. If this is\npassed in, set value, getter and setter to NULL (since these members\nwon't be used). napi_callback provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • attributes: The attributes associated with the particular property. See\nnapi_property_attributes.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • data: The callback data passed into method, getter and setter if this\nfunction is invoked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_property_descriptor" } @@ -2201,7 +2302,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_property_names(napi_env env,\n                                    napi_value object,\n                                    napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing an array of JavaScript values\nthat represent the property names of the object. The API can be used to\niterate over result using napi_get_array_length\nand napi_get_element.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the names of the enumerable properties of object as an array\nof strings. The properties of object whose key is a symbol will not be\nincluded.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_property_names(napi_env env,\n                                    napi_value object,\n                                    napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing an array of JavaScript values\nthat represent the property names of the object. The API can be used to\niterate over result using napi_get_array_length\nand napi_get_element.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the names of the enumerable properties of object as an array\nof strings. The properties of object whose key is a symbol will not be\nincluded.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_property_names" }, @@ -2217,7 +2318,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_get_all_property_names(napi_env env,\n                            napi_value object,\n                            napi_key_collection_mode key_mode,\n                            napi_key_filter key_filter,\n                            napi_key_conversion key_conversion,\n                            napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key_mode: Whether to retrieve prototype properties as well.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key_filter: Which properties to retrieve\n(enumerable/readable/writable).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key_conversion: Whether to convert numbered property keys to strings.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing an array of JavaScript values\nthat represent the property names of the object. napi_get_array_length and\nnapi_get_element can be used to iterate over result.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an array containing the names of the available properties\nof this object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_get_all_property_names(napi_env env,\n                            napi_value object,\n                            napi_key_collection_mode key_mode,\n                            napi_key_filter key_filter,\n                            napi_key_conversion key_conversion,\n                            napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key_mode: Whether to retrieve prototype properties as well.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key_filter: Which properties to retrieve\n(enumerable/readable/writable).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key_conversion: Whether to convert numbered property keys to strings.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing an array of JavaScript values\nthat represent the property names of the object. napi_get_array_length and\nnapi_get_element can be used to iterate over result.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns an array containing the names of the available properties\nof this object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_all_property_names" }, @@ -2233,7 +2334,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_set_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              napi_value value);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the property to set.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The property value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API set a property on the Object passed in.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_set_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              napi_value value);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the property to set.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The property value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API set a property on the Object passed in.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_set_property" }, @@ -2249,7 +2350,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the property to retrieve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The value of the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API gets the requested property from the Object passed in.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the property to retrieve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The value of the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API gets the requested property from the Object passed in.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_property" }, @@ -2265,7 +2366,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_has_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the property whose existence to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in has the named property.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_has_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the property whose existence to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in has the named property.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_has_property" }, @@ -2281,7 +2382,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_delete_property(napi_env env,\n                                 napi_value object,\n                                 napi_value key,\n                                 bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the property to delete.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the property deletion succeeded or not. result can\noptionally be ignored by passing NULL.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API attempts to delete the key own property from object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_delete_property(napi_env env,\n                                 napi_value object,\n                                 napi_value key,\n                                 bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the property to delete.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the property deletion succeeded or not. result can\noptionally be ignored by passing NULL.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API attempts to delete the key own property from object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_delete_property" }, @@ -2297,7 +2398,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_has_own_property(napi_env env,\n                                  napi_value object,\n                                  napi_value key,\n                                  bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the own property whose existence to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the own property exists on the object or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in has the named own property. key must\nbe a string or a Symbol, or an error will be thrown. N-API will not perform\nany conversion between data types.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_has_own_property(napi_env env,\n                                  napi_value object,\n                                  napi_value key,\n                                  bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] key: The name of the own property whose existence to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the own property exists on the object or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API checks if the Object passed in has the named own property. key must\nbe a string or a Symbol, or an error will be thrown. N-API will not perform\nany conversion between data types.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_has_own_property" }, @@ -2313,7 +2414,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_set_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    napi_value value);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the property to set.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The property value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is equivalent to calling napi_set_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_set_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    napi_value value);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the property to set.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The property value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is equivalent to calling napi_set_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_set_named_property" }, @@ -2329,7 +2430,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the property to get.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The value of the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is equivalent to calling napi_get_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the property to get.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The value of the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is equivalent to calling napi_get_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_named_property" }, @@ -2345,7 +2446,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_has_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the property whose existence to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is equivalent to calling napi_has_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_has_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the property whose existence to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is equivalent to calling napi_has_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_has_named_property" }, @@ -2361,7 +2462,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_set_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             napi_value value);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to set the properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] index: The index of the property to set.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The property value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API sets and element on the Object passed in.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_set_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             napi_value value);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to set the properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] index: The index of the property to set.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The property value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API sets and element on the Object passed in.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_set_element" }, @@ -2377,7 +2478,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] index: The index of the property to get.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The value of the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API gets the element at the requested index.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] index: The index of the property to get.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The value of the property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API gets the element at the requested index.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_element" }, @@ -2393,7 +2494,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_has_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] index: The index of the property whose existence to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns if the Object passed in has an element at the\nrequested index.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_has_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] index: The index of the property whose existence to check.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns if the Object passed in has an element at the\nrequested index.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_has_element" }, @@ -2409,7 +2510,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_delete_element(napi_env env,\n                                napi_value object,\n                                uint32_t index,\n                                bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] index: The index of the property to delete.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the element deletion succeeded or not. result can\noptionally be ignored by passing NULL.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API attempts to delete the specified index from object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_delete_element(napi_env env,\n                                napi_value object,\n                                uint32_t index,\n                                bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] index: The index of the property to delete.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the element deletion succeeded or not. result can\noptionally be ignored by passing NULL.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API attempts to delete the specified index from object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_delete_element" }, @@ -2425,9 +2526,41 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_define_properties(napi_env env,\n                                   napi_value object,\n                                   size_t property_count,\n                                   const napi_property_descriptor* properties);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] property_count: The number of elements in the properties array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] properties: The array of property descriptors.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method allows the efficient definition of multiple properties on a given\nobject. The properties are defined using property descriptors (see\nnapi_property_descriptor). Given an array of such property descriptors,\nthis API will set the properties on the object one at a time, as defined by\nDefineOwnProperty() (described in Section 9.1.6 of the ECMA-262\nspecification).

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_define_properties(napi_env env,\n                                   napi_value object,\n                                   size_t property_count,\n                                   const napi_property_descriptor* properties);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] property_count: The number of elements in the properties array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] properties: The array of property descriptors.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method allows the efficient definition of multiple properties on a given\nobject. The properties are defined using property descriptors (see\nnapi_property_descriptor). Given an array of such property descriptors,\nthis API will set the properties on the object one at a time, as defined by\nDefineOwnProperty() (described in Section 9.1.6 of the ECMA-262\nspecification).

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_define_properties" + }, + { + "textRaw": "napi_object_freeze", + "name": "napi_object_freeze", + "meta": { + "added": [ + "v12.20.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_object_freeze(napi_env env,\n                               napi_value object);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to freeze.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method freezes a given object. This prevents new properties from\nbeing added to it, existing properties from being removed, prevents\nchanging the enumerability, configurability, or writability of existing\nproperties, and prevents the values of existing properties from being changed.\nIt also prevents the object's prototype from being changed. This is described\nin Section 19.1.2.6 of the\nECMA-262 specification.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_object_freeze" + }, + { + "textRaw": "napi_object_seal", + "name": "napi_object_seal", + "meta": { + "added": [ + "v12.20.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_object_seal(napi_env env,\n                             napi_value object);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] object: The object to seal.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method seals a given object. This prevents new properties from being\nadded to it, as well as marking all existing properties as non-configurable.\nThis is described in Section 19.1.2.20\nof the ECMA-262 specification.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_object_seal" } ], "type": "module", @@ -2435,10 +2568,10 @@ } ], "type": "misc", - "displayName": "Working with JavaScript Properties" + "displayName": "Working with JavaScript properties" }, { - "textRaw": "Working with JavaScript Functions", + "textRaw": "Working with JavaScript functions", "name": "working_with_javascript_functions", "desc": "

                                                                                                                                                                                                                                                      N-API provides a set of APIs that allow JavaScript code to\ncall back into native code. N-API APIs that support calling back\ninto native code take in a callback functions represented by\nthe napi_callback type. When the JavaScript VM calls back to\nnative code, the napi_callback function provided is invoked. The APIs\ndocumented in this section allow the callback function to do the\nfollowing:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Get information about the context in which the callback was invoked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Get the arguments passed into the callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Return a napi_value back from the callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Additionally, N-API provides a set of functions which allow calling\nJavaScript functions from native code. One can either call a function\nlike a regular JavaScript function call, or as a constructor\nfunction.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any non-NULL data which is passed to this API via the data field of the\nnapi_property_descriptor items can be associated with object and freed\nwhenever object is garbage-collected by passing both object and the data to\nnapi_add_finalizer.

                                                                                                                                                                                                                                                      ", "modules": [ @@ -2454,7 +2587,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_call_function(napi_env env,\n                                           napi_value recv,\n                                           napi_value func,\n                                           size_t argc,\n                                           const napi_value* argv,\n                                           napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: napi_value representing the JavaScript function to be invoked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argv: Array of napi_values representing JavaScript values passed in\nas arguments to the function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript object returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method allows a JavaScript function object to be called from a native\nadd-on. This is the primary mechanism of calling back from the add-on's\nnative code into JavaScript. For the special case of calling into JavaScript\nafter an async operation, see napi_make_callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A sample use case might look as follows. Consider the following JavaScript\nsnippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function AddTwo(num) {\n  return num + 2;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Then, the above function can be invoked from a native add-on using the\nfollowing code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Get the function named \"AddTwo\" on the global object\nnapi_value global, add_two, arg;\nnapi_status status = napi_get_global(env, &global);\nif (status != napi_ok) return;\n\nstatus = napi_get_named_property(env, global, \"AddTwo\", &add_two);\nif (status != napi_ok) return;\n\n// const arg = 1337\nstatus = napi_create_int32(env, 1337, &arg);\nif (status != napi_ok) return;\n\nnapi_value* argv = &arg;\nsize_t argc = 1;\n\n// AddTwo(arg);\nnapi_value return_val;\nstatus = napi_call_function(env, global, add_two, argc, argv, &return_val);\nif (status != napi_ok) return;\n\n// Convert the result back to a native type\nint32_t result;\nstatus = napi_get_value_int32(env, return_val, &result);\nif (status != napi_ok) return;\n
                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_call_function(napi_env env,\n                                           napi_value recv,\n                                           napi_value func,\n                                           size_t argc,\n                                           const napi_value* argv,\n                                           napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: napi_value representing the JavaScript function to be invoked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argv: Array of napi_values representing JavaScript values passed in\nas arguments to the function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript object returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method allows a JavaScript function object to be called from a native\nadd-on. This is the primary mechanism of calling back from the add-on's\nnative code into JavaScript. For the special case of calling into JavaScript\nafter an async operation, see napi_make_callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A sample use case might look as follows. Consider the following JavaScript\nsnippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function AddTwo(num) {\n  return num + 2;\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Then, the above function can be invoked from a native add-on using the\nfollowing code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Get the function named \"AddTwo\" on the global object\nnapi_value global, add_two, arg;\nnapi_status status = napi_get_global(env, &global);\nif (status != napi_ok) return;\n\nstatus = napi_get_named_property(env, global, \"AddTwo\", &add_two);\nif (status != napi_ok) return;\n\n// const arg = 1337\nstatus = napi_create_int32(env, 1337, &arg);\nif (status != napi_ok) return;\n\nnapi_value* argv = &arg;\nsize_t argc = 1;\n\n// AddTwo(arg);\nnapi_value return_val;\nstatus = napi_call_function(env, global, add_two, argc, argv, &return_val);\nif (status != napi_ok) return;\n\n// Convert the result back to a native type\nint32_t result;\nstatus = napi_get_value_int32(env, return_val, &result);\nif (status != napi_ok) return;\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_call_function" }, @@ -2470,7 +2603,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_function(napi_env env,\n                                 const char* utf8name,\n                                 size_t length,\n                                 napi_callback cb,\n                                 void* data,\n                                 napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the function encoded as UTF8. This is visible\nwithin JavaScript as the new function object's name property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH if\nit is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] cb: The native function which should be called when this function\nobject is invoked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: User-provided data context. This will be passed back into the\nfunction when invoked later.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript function object for\nthe newly created function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allows an add-on author to create a function object in native code.\nThis is the primary mechanism to allow calling into the add-on's native code\nfrom JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The newly created function is not automatically visible from script after this\ncall. Instead, a property must be explicitly set on any object that is visible\nto JavaScript, in order for the function to be accessible from script.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to expose a function as part of the\nadd-on's module exports, set the newly created function on the exports\nobject. A sample module might look as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value SayHello(napi_env env, napi_callback_info info) {\n  printf(\"Hello\\n\");\n  return NULL;\n}\n\nnapi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n\n  napi_value fn;\n  status = napi_create_function(env, NULL, 0, SayHello, NULL, &fn);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"sayHello\", fn);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n\nNAPI_MODULE(NODE_GYP_MODULE_NAME, Init)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Given the above code, the add-on can be used from JavaScript as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myaddon = require('./addon');\nmyaddon.sayHello();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string passed to require() is the name of the target in binding.gyp\nresponsible for creating the .node file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any non-NULL data which is passed to this API via the data parameter can\nbe associated with the resulting JavaScript function (which is returned in the\nresult parameter) and freed whenever the function is garbage-collected by\npassing both the JavaScript function and the data to napi_add_finalizer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript Functions are described in Section 19.2 of the ECMAScript\nLanguage Specification.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_function(napi_env env,\n                                 const char* utf8name,\n                                 size_t length,\n                                 napi_callback cb,\n                                 void* data,\n                                 napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the function encoded as UTF8. This is visible\nwithin JavaScript as the new function object's name property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH if\nit is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] cb: The native function which should be called when this function\nobject is invoked. napi_callback provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: User-provided data context. This will be passed back into the\nfunction when invoked later.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript function object for\nthe newly created function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allows an add-on author to create a function object in native code.\nThis is the primary mechanism to allow calling into the add-on's native code\nfrom JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The newly created function is not automatically visible from script after this\ncall. Instead, a property must be explicitly set on any object that is visible\nto JavaScript, in order for the function to be accessible from script.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to expose a function as part of the\nadd-on's module exports, set the newly created function on the exports\nobject. A sample module might look as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value SayHello(napi_env env, napi_callback_info info) {\n  printf(\"Hello\\n\");\n  return NULL;\n}\n\nnapi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n\n  napi_value fn;\n  status = napi_create_function(env, NULL, 0, SayHello, NULL, &fn);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"sayHello\", fn);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n\nNAPI_MODULE(NODE_GYP_MODULE_NAME, Init)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Given the above code, the add-on can be used from JavaScript as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myaddon = require('./addon');\nmyaddon.sayHello();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string passed to require() is the name of the target in binding.gyp\nresponsible for creating the .node file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any non-NULL data which is passed to this API via the data parameter can\nbe associated with the resulting JavaScript function (which is returned in the\nresult parameter) and freed whenever the function is garbage-collected by\npassing both the JavaScript function and the data to napi_add_finalizer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript Functions are described in Section 19.2 of the ECMAScript\nLanguage Specification.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_function" }, @@ -2486,7 +2619,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_cb_info(napi_env env,\n                             napi_callback_info cbinfo,\n                             size_t* argc,\n                             napi_value* argv,\n                             napi_value* thisArg,\n                             void** data)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in-out] argc: Specifies the size of the provided argv array and receives\nthe actual count of arguments.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] argv: Buffer to which the napi_value representing the arguments are\ncopied. If there are more arguments than the provided count, only the\nrequested number of arguments are copied. If there are fewer arguments\nprovided than claimed, the rest of argv is filled with napi_value values\nthat represent undefined.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] this: Receives the JavaScript this argument for the call.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: Receives the data pointer for the callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is used within a callback function to retrieve details about the\ncall like the arguments and the this pointer from a given callback info.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_cb_info(napi_env env,\n                             napi_callback_info cbinfo,\n                             size_t* argc,\n                             napi_value* argv,\n                             napi_value* thisArg,\n                             void** data)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in-out] argc: Specifies the size of the provided argv array and receives\nthe actual count of arguments.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] argv: Buffer to which the napi_value representing the arguments are\ncopied. If there are more arguments than the provided count, only the\nrequested number of arguments are copied. If there are fewer arguments\nprovided than claimed, the rest of argv is filled with napi_value values\nthat represent undefined.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] this: Receives the JavaScript this argument for the call.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] data: Receives the data pointer for the callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is used within a callback function to retrieve details about the\ncall like the arguments and the this pointer from a given callback info.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_cb_info" }, @@ -2502,7 +2635,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_new_target(napi_env env,\n                                napi_callback_info cbinfo,\n                                napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The new.target of the constructor call.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the new.target of the constructor call. If the current\ncallback is not a constructor call, the result is NULL.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_new_target(napi_env env,\n                                napi_callback_info cbinfo,\n                                napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The new.target of the constructor call.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the new.target of the constructor call. If the current\ncallback is not a constructor call, the result is NULL.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_new_target" }, @@ -2518,18 +2651,18 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_new_instance(napi_env env,\n                              napi_value cons,\n                              size_t argc,\n                              napi_value* argv,\n                              napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] cons: napi_value representing the JavaScript function to be invoked\nas a constructor.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argv: Array of JavaScript values as napi_value representing the\narguments to the constructor.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript object returned,\nwhich in this case is the constructed object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is used to instantiate a new JavaScript value using a given\nnapi_value that represents the constructor for the object. For example,\nconsider the following snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyObject(param) {\n  this.param = param;\n}\n\nconst arg = 'hello';\nconst value = new MyObject(arg);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following can be approximated in N-API using the following snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Get the constructor function MyObject\nnapi_value global, constructor, arg, value;\nnapi_status status = napi_get_global(env, &global);\nif (status != napi_ok) return;\n\nstatus = napi_get_named_property(env, global, \"MyObject\", &constructor);\nif (status != napi_ok) return;\n\n// const arg = \"hello\"\nstatus = napi_create_string_utf8(env, \"hello\", NAPI_AUTO_LENGTH, &arg);\nif (status != napi_ok) return;\n\nnapi_value* argv = &arg;\nsize_t argc = 1;\n\n// const value = new MyObject(arg)\nstatus = napi_new_instance(env, constructor, argc, argv, &value);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_new_instance(napi_env env,\n                              napi_value cons,\n                              size_t argc,\n                              napi_value* argv,\n                              napi_value* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] cons: napi_value representing the JavaScript function to be invoked\nas a constructor.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argv: Array of JavaScript values as napi_value representing the\narguments to the constructor.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript object returned,\nwhich in this case is the constructed object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is used to instantiate a new JavaScript value using a given\nnapi_value that represents the constructor for the object. For example,\nconsider the following snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyObject(param) {\n  this.param = param;\n}\n\nconst arg = 'hello';\nconst value = new MyObject(arg);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following can be approximated in N-API using the following snippet:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Get the constructor function MyObject\nnapi_value global, constructor, arg, value;\nnapi_status status = napi_get_global(env, &global);\nif (status != napi_ok) return;\n\nstatus = napi_get_named_property(env, global, \"MyObject\", &constructor);\nif (status != napi_ok) return;\n\n// const arg = \"hello\"\nstatus = napi_create_string_utf8(env, \"hello\", NAPI_AUTO_LENGTH, &arg);\nif (status != napi_ok) return;\n\nnapi_value* argv = &arg;\nsize_t argc = 1;\n\n// const value = new MyObject(arg)\nstatus = napi_new_instance(env, constructor, argc, argv, &value);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_new_instance" } ], "type": "misc", - "displayName": "Working with JavaScript Functions" + "displayName": "Working with JavaScript functions" }, { - "textRaw": "Object Wrap", + "textRaw": "Object wrap", "name": "object_wrap", - "desc": "

                                                                                                                                                                                                                                                      N-API offers a way to \"wrap\" C++ classes and instances so that the class\nconstructor and methods can be called from JavaScript.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. The napi_define_class API defines a JavaScript class with constructor,\nstatic properties and methods, and instance properties and methods that\ncorrespond to the C++ class.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. When JavaScript code invokes the constructor, the constructor callback\nuses napi_wrap to wrap a new C++ instance in a JavaScript object,\nthen returns the wrapper object.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. When JavaScript code invokes a method or property accessor on the class,\nthe corresponding napi_callback C++ function is invoked. For an instance\ncallback, napi_unwrap obtains the C++ instance that is the target of\nthe call.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For wrapped objects it may be difficult to distinguish between a function\ncalled on a class prototype and a function called on an instance of a class.\nA common pattern used to address this problem is to save a persistent\nreference to the class constructor for later instanceof checks.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value MyClass_constructor = NULL;\nstatus = napi_get_reference_value(env, MyClass::es_constructor, &MyClass_constructor);\nassert(napi_ok == status);\nbool is_instance = false;\nstatus = napi_instanceof(env, es_this, MyClass_constructor, &is_instance);\nassert(napi_ok == status);\nif (is_instance) {\n  // napi_unwrap() ...\n} else {\n  // otherwise...\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The reference must be freed once it is no longer needed.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      N-API offers a way to \"wrap\" C++ classes and instances so that the class\nconstructor and methods can be called from JavaScript.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. The napi_define_class API defines a JavaScript class with constructor,\nstatic properties and methods, and instance properties and methods that\ncorrespond to the C++ class.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. When JavaScript code invokes the constructor, the constructor callback\nuses napi_wrap to wrap a new C++ instance in a JavaScript object,\nthen returns the wrapper object.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. When JavaScript code invokes a method or property accessor on the class,\nthe corresponding napi_callback C++ function is invoked. For an instance\ncallback, napi_unwrap obtains the C++ instance that is the target of\nthe call.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For wrapped objects it may be difficult to distinguish between a function\ncalled on a class prototype and a function called on an instance of a class.\nA common pattern used to address this problem is to save a persistent\nreference to the class constructor for later instanceof checks.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_value MyClass_constructor = NULL;\nstatus = napi_get_reference_value(env, MyClass::es_constructor, &MyClass_constructor);\nassert(napi_ok == status);\nbool is_instance = false;\nstatus = napi_instanceof(env, es_this, MyClass_constructor, &is_instance);\nassert(napi_ok == status);\nif (is_instance) {\n  // napi_unwrap() ...\n} else {\n  // otherwise...\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The reference must be freed once it is no longer needed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are occasions where napi_instanceof() is insufficient for ensuring that\na JavaScript object is a wrapper for a certain native type. This is the case\nespecially when wrapped JavaScript objects are passed back into the addon via\nstatic methods rather than as the this value of prototype methods. In such\ncases there is a chance that they may be unwrapped incorrectly.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myAddon = require('./build/Release/my_addon.node');\n\n// `openDatabase()` returns a JavaScript object that wraps a native database\n// handle.\nconst dbHandle = myAddon.openDatabase();\n\n// `query()` returns a JavaScript object that wraps a native query handle.\nconst queryHandle = myAddon.query(dbHandle, 'Gimme ALL the things!');\n\n// There is an accidental error in the line below. The first parameter to\n// `myAddon.queryHasRecords()` should be the database handle (`dbHandle`), not\n// the query handle (`query`), so the correct condition for the while-loop\n// should be\n//\n// myAddon.queryHasRecords(dbHandle, queryHandle)\n//\nwhile (myAddon.queryHasRecords(queryHandle, dbHandle)) {\n  // retrieve records\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the above example myAddon.queryHasRecords() is a method that accepts two\narguments. The first is a database handle and the second is a query handle.\nInternally, it unwraps the first argument and casts the resulting pointer to a\nnative database handle. It then unwraps the second argument and casts the\nresulting pointer to a query handle. If the arguments are passed in the wrong\norder, the casts will work, however, there is a good chance that the underlying\ndatabase operation will fail, or will even cause an invalid memory access.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To ensure that the pointer retrieved from the first argument is indeed a pointer\nto a database handle and, similarly, that the pointer retrieved from the second\nargument is indeed a pointer to a query handle, the implementation of\nqueryHasRecords() has to perform a type validation. Retaining the JavaScript\nclass constructor from which the database handle was instantiated and the\nconstructor from which the query handle was instantiated in napi_refs can\nhelp, because napi_instanceof() can then be used to ensure that the instances\npassed into queryHashRecords() are indeed of the correct type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unfortunately, napi_instanceof() does not protect against prototype\nmanipulation. For example, the prototype of the database handle instance can be\nset to the prototype of the constructor for query handle instances. In this\ncase, the database handle instance can appear as a query handle instance, and it\nwill pass the napi_instanceof() test for a query handle instance, while still\ncontaining a pointer to a database handle.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To this end, N-API provides type-tagging capabilities.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A type tag is a 128-bit integer unique to the addon. N-API provides the\nnapi_type_tag structure for storing a type tag. When such a value is passed\nalong with a JavaScript object stored in a napi_value to\nnapi_type_tag_object(), the JavaScript object will be \"marked\" with the\ntype tag. The \"mark\" is invisible on the JavaScript side. When a JavaScript\nobject arrives into a native binding, napi_check_object_type_tag() can be used\nalong with the original type tag to determine whether the JavaScript object was\npreviously \"marked\" with the type tag. This creates a type-checking capability\nof a higher fidelity than napi_instanceof() can provide, because such type-\ntagging survives prototype manipulation and addon unloading/reloading.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Continuing the above example, the following skeleton addon implementation\nillustrates the use of napi_type_tag_object() and\nnapi_check_object_type_tag().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // This value is the type tag for a database handle. The command\n//\n//   uuidgen | sed -r -e 's/-//g' -e 's/(.{16})(.*)/0x\\1, 0x\\2/'\n//\n// can be used to obtain the two values with which to initialize the structure.\nstatic const napi_type_tag DatabaseHandleTypeTag = {\n  0x1edf75a38336451d, 0xa5ed9ce2e4c00c38\n};\n\n// This value is the type tag for a query handle.\nstatic const napi_type_tag QueryHandleTypeTag = {\n  0x9c73317f9fad44a3, 0x93c3920bf3b0ad6a\n};\n\nstatic napi_value\nopenDatabase(napi_env env, napi_callback_info info) {\n  napi_status status;\n  napi_value result;\n\n  // Perform the underlying action which results in a database handle.\n  DatabaseHandle* dbHandle = open_database();\n\n  // Create a new, empty JS object.\n  status = napi_create_object(env, &result);\n  if (status != napi_ok) return NULL;\n\n  // Tag the object to indicate that it holds a pointer to a `DatabaseHandle`.\n  status = napi_type_tag_object(env, result, &DatabaseHandleTypeTag);\n  if (status != napi_ok) return NULL;\n\n  // Store the pointer to the `DatabaseHandle` structure inside the JS object.\n  status = napi_wrap(env, result, dbHandle, NULL, NULL, NULL);\n  if (status != napi_ok) return NULL;\n\n  return result;\n}\n\n// Later when we receive a JavaScript object purporting to be a database handle\n// we can use `napi_check_object_type_tag()` to ensure that it is indeed such a\n// handle.\n\nstatic napi_value\nquery(napi_env env, napi_callback_info info) {\n  napi_status status;\n  size_t argc = 2;\n  napi_value argv[2];\n  bool is_db_handle;\n\n  status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL);\n  if (status != napi_ok) return NULL;\n\n  // Check that the object passed as the first parameter has the previously\n  // applied tag.\n  status = napi_check_object_type_tag(env,\n                                      argv[0],\n                                      &DatabaseHandleTypeTag,\n                                      &is_db_handle);\n  if (status != napi_ok) return NULL;\n\n  // Throw a `TypeError` if it doesn't.\n  if (!is_db_handle) {\n    // Throw a TypeError.\n    return NULL;\n  }\n}\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "napi_define_class", @@ -2543,7 +2676,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_define_class(napi_env env,\n                              const char* utf8name,\n                              size_t length,\n                              napi_callback constructor,\n                              void* data,\n                              size_t property_count,\n                              const napi_property_descriptor* properties,\n                              napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8name: Name of the JavaScript constructor function; this is\nnot required to be the same as the C++ class name, though it is recommended\nfor clarity.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH\nif it is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] constructor: Callback function that handles constructing instances\nof the class. (This should be a static method on the class, not an actual\nC++ constructor function.)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Optional data to be passed to the constructor callback as\nthe data property of the callback info.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] property_count: Number of items in the properties array argument.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] properties: Array of property descriptors describing static and\ninstance data properties, accessors, and methods on the class\nSee napi_property_descriptor.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing the constructor function for\nthe class.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Defines a JavaScript class that corresponds to a C++ class, including:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • A JavaScript constructor function that has the class name and invokes the\nprovided C++ constructor callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Properties on the constructor function corresponding to static data\nproperties, accessors, and methods of the C++ class (defined by\nproperty descriptors with the napi_static attribute).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Properties on the constructor function's prototype object corresponding to\nnon-static data properties, accessors, and methods of the C++ class\n(defined by property descriptors without the napi_static attribute).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The C++ constructor callback should be a static method on the class that calls\nthe actual class constructor, then wraps the new C++ instance in a JavaScript\nobject, and returns the wrapper object. See napi_wrap() for details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript constructor function returned from napi_define_class is\noften saved and used later, to construct new instances of the class from native\ncode, and/or check whether provided values are instances of the class. In that\ncase, to prevent the function value from being garbage-collected, create a\npersistent reference to it using napi_create_reference and ensure the\nreference count is kept >= 1.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any non-NULL data which is passed to this API via the data parameter or via\nthe data field of the napi_property_descriptor array items can be associated\nwith the resulting JavaScript constructor (which is returned in the result\nparameter) and freed whenever the class is garbage-collected by passing both\nthe JavaScript function and the data to napi_add_finalizer.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_define_class(napi_env env,\n                              const char* utf8name,\n                              size_t length,\n                              napi_callback constructor,\n                              void* data,\n                              size_t property_count,\n                              const napi_property_descriptor* properties,\n                              napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] utf8name: Name of the JavaScript constructor function; this is\nnot required to be the same as the C++ class name, though it is recommended\nfor clarity.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH\nif it is null-terminated.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] constructor: Callback function that handles constructing instances\nof the class. This should be a static method on the class, not an actual\nC++ constructor function. napi_callback provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Optional data to be passed to the constructor callback as\nthe data property of the callback info.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] property_count: Number of items in the properties array argument.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] properties: Array of property descriptors describing static and\ninstance data properties, accessors, and methods on the class\nSee napi_property_descriptor.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A napi_value representing the constructor function for\nthe class.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Defines a JavaScript class that corresponds to a C++ class, including:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • A JavaScript constructor function that has the class name and invokes the\nprovided C++ constructor callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Properties on the constructor function corresponding to static data\nproperties, accessors, and methods of the C++ class (defined by\nproperty descriptors with the napi_static attribute).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Properties on the constructor function's prototype object corresponding to\nnon-static data properties, accessors, and methods of the C++ class\n(defined by property descriptors without the napi_static attribute).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The C++ constructor callback should be a static method on the class that calls\nthe actual class constructor, then wraps the new C++ instance in a JavaScript\nobject, and returns the wrapper object. See napi_wrap() for details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The JavaScript constructor function returned from napi_define_class is\noften saved and used later, to construct new instances of the class from native\ncode, and/or check whether provided values are instances of the class. In that\ncase, to prevent the function value from being garbage-collected, create a\npersistent reference to it using napi_create_reference and ensure the\nreference count is kept >= 1.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any non-NULL data which is passed to this API via the data parameter or via\nthe data field of the napi_property_descriptor array items can be associated\nwith the resulting JavaScript constructor (which is returned in the result\nparameter) and freed whenever the class is garbage-collected by passing both\nthe JavaScript function and the data to napi_add_finalizer.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_define_class" }, @@ -2559,7 +2692,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_wrap(napi_env env,\n                      napi_value js_object,\n                      void* native_object,\n                      napi_finalize finalize_cb,\n                      void* finalize_hint,\n                      napi_ref* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The JavaScript object that will be the wrapper for the\nnative object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] native_object: The native instance that will be wrapped in the\nJavaScript object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Optional native callback that can be used to free the\nnative instance when the JavaScript object is ready for garbage-collection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional contextual hint that is passed to the\nfinalize callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Optional reference to the wrapped object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Wraps a native instance in a JavaScript object. The native instance can be\nretrieved later using napi_unwrap().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When JavaScript code invokes a constructor for a class that was defined using\nnapi_define_class(), the napi_callback for the constructor is invoked.\nAfter constructing an instance of the native class, the callback must then call\nnapi_wrap() to wrap the newly constructed instance in the already-created\nJavaScript object that is the this argument to the constructor callback.\n(That this object was created from the constructor function's prototype,\nso it already has definitions of all the instance properties and methods.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Typically when wrapping a class instance, a finalize callback should be\nprovided that simply deletes the native instance that is received as the data\nargument to the finalize callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional returned reference is initially a weak reference, meaning it\nhas a reference count of 0. Typically this reference count would be incremented\ntemporarily during async operations that require the instance to remain valid.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Caution: The optional returned reference (if obtained) should be deleted via\nnapi_delete_reference ONLY in response to the finalize callback\ninvocation. If it is deleted before then, then the finalize callback may never\nbe invoked. Therefore, when obtaining a reference a finalize callback is also\nrequired in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling napi_wrap() a second time on an object will return an error. To\nassociate another native instance with the object, use napi_remove_wrap()\nfirst.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_wrap(napi_env env,\n                      napi_value js_object,\n                      void* native_object,\n                      napi_finalize finalize_cb,\n                      void* finalize_hint,\n                      napi_ref* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The JavaScript object that will be the wrapper for the\nnative object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] native_object: The native instance that will be wrapped in the\nJavaScript object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Optional native callback that can be used to free the\nnative instance when the JavaScript object is ready for garbage-collection.\nnapi_finalize provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional contextual hint that is passed to the\nfinalize callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Optional reference to the wrapped object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Wraps a native instance in a JavaScript object. The native instance can be\nretrieved later using napi_unwrap().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When JavaScript code invokes a constructor for a class that was defined using\nnapi_define_class(), the napi_callback for the constructor is invoked.\nAfter constructing an instance of the native class, the callback must then call\nnapi_wrap() to wrap the newly constructed instance in the already-created\nJavaScript object that is the this argument to the constructor callback.\n(That this object was created from the constructor function's prototype,\nso it already has definitions of all the instance properties and methods.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Typically when wrapping a class instance, a finalize callback should be\nprovided that simply deletes the native instance that is received as the data\nargument to the finalize callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional returned reference is initially a weak reference, meaning it\nhas a reference count of 0. Typically this reference count would be incremented\ntemporarily during async operations that require the instance to remain valid.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Caution: The optional returned reference (if obtained) should be deleted via\nnapi_delete_reference ONLY in response to the finalize callback\ninvocation. If it is deleted before then, then the finalize callback may never\nbe invoked. Therefore, when obtaining a reference a finalize callback is also\nrequired in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling napi_wrap() a second time on an object will return an error. To\nassociate another native instance with the object, use napi_remove_wrap()\nfirst.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_wrap" }, @@ -2575,7 +2708,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_unwrap(napi_env env,\n                        napi_value js_object,\n                        void** result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Pointer to the wrapped native instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Retrieves a native instance that was previously wrapped in a JavaScript\nobject using napi_wrap().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When JavaScript code invokes a method or property accessor on the class, the\ncorresponding napi_callback is invoked. If the callback is for an instance\nmethod or accessor, then the this argument to the callback is the wrapper\nobject; the wrapped C++ instance that is the target of the call can be obtained\nthen by calling napi_unwrap() on the wrapper object.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_unwrap(napi_env env,\n                        napi_value js_object,\n                        void** result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Pointer to the wrapped native instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Retrieves a native instance that was previously wrapped in a JavaScript\nobject using napi_wrap().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When JavaScript code invokes a method or property accessor on the class, the\ncorresponding napi_callback is invoked. If the callback is for an instance\nmethod or accessor, then the this argument to the callback is the wrapper\nobject; the wrapped C++ instance that is the target of the call can be obtained\nthen by calling napi_unwrap() on the wrapper object.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_unwrap" }, @@ -2591,11 +2724,43 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_remove_wrap(napi_env env,\n                             napi_value js_object,\n                             void** result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Pointer to the wrapped native instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Retrieves a native instance that was previously wrapped in the JavaScript\nobject js_object using napi_wrap() and removes the wrapping. If a finalize\ncallback was associated with the wrapping, it will no longer be called when the\nJavaScript object becomes garbage-collected.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_remove_wrap(napi_env env,\n                             napi_value js_object,\n                             void** result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Pointer to the wrapped native instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Retrieves a native instance that was previously wrapped in the JavaScript\nobject js_object using napi_wrap() and removes the wrapping. If a finalize\ncallback was associated with the wrapping, it will no longer be called when the\nJavaScript object becomes garbage-collected.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_remove_wrap" }, { + "textRaw": "napi_type_tag_object", + "name": "napi_type_tag_object", + "meta": { + "added": [ + "v12.19.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_type_tag_object(napi_env env,\n                                 napi_value js_object,\n                                 const napi_type_tag* type_tag);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The JavaScript object to be marked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] type_tag: The tag with which the object is to be marked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Associates the value of the type_tag pointer with the JavaScript object.\nnapi_check_object_type_tag() can then be used to compare the tag that was\nattached to the object with one owned by the addon to ensure that the object\nhas the right type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the object already has an associated type tag, this API will return\nnapi_invalid_arg.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_type_tag_object" + }, + { + "textRaw": "napi_check_object_type_tag", + "name": "napi_check_object_type_tag", + "meta": { + "added": [ + "v12.19.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_check_object_type_tag(napi_env env,\n                                       napi_value js_object,\n                                       const napi_type_tag* type_tag,\n                                       bool* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The JavaScript object whose type tag to examine.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] type_tag: The tag with which to compare any tag found on the object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Whether the type tag given matched the type tag on the\nobject. false is also returned if no type tag was found on the object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Compares the pointer given as type_tag with any that can be found on\njs_object. If no tag is found on js_object or, if a tag is found but it does\nnot match type_tag, then result is set to false. If a tag is found and it\nmatches type_tag, then result is set to true.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "napi_check_object_type_tag" + }, + { "textRaw": "napi_add_finalizer", "name": "napi_add_finalizer", "meta": { @@ -2607,18 +2772,18 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_add_finalizer(napi_env env,\n                               napi_value js_object,\n                               void* native_object,\n                               napi_finalize finalize_cb,\n                               void* finalize_hint,\n                               napi_ref* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The JavaScript object to which the native data will be\nattached.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] native_object: The native data that will be attached to the JavaScript\nobject.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Native callback that will be used to free the\nnative data when the JavaScript object is ready for garbage-collection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional contextual hint that is passed to the\nfinalize callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Optional reference to the JavaScript object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Adds a napi_finalize callback which will be called when the JavaScript object\nin js_object is ready for garbage collection. This API is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the API can be called multiple times with different data items in order to\nattach each of them to the JavaScript object, and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the object manipulated by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Caution: The optional returned reference (if obtained) should be deleted via\nnapi_delete_reference ONLY in response to the finalize callback\ninvocation. If it is deleted before then, then the finalize callback may never\nbe invoked. Therefore, when obtaining a reference a finalize callback is also\nrequired in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_add_finalizer(napi_env env,\n                               napi_value js_object,\n                               void* native_object,\n                               napi_finalize finalize_cb,\n                               void* finalize_hint,\n                               napi_ref* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] js_object: The JavaScript object to which the native data will be\nattached.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] native_object: The native data that will be attached to the JavaScript\nobject.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_cb: Native callback that will be used to free the\nnative data when the JavaScript object is ready for garbage-collection.\nnapi_finalize provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] finalize_hint: Optional contextual hint that is passed to the\nfinalize callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: Optional reference to the JavaScript object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Adds a napi_finalize callback which will be called when the JavaScript object\nin js_object is ready for garbage collection. This API is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the API can be called multiple times with different data items in order to\nattach each of them to the JavaScript object, and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the object manipulated by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Caution: The optional returned reference (if obtained) should be deleted via\nnapi_delete_reference ONLY in response to the finalize callback\ninvocation. If it is deleted before then, then the finalize callback may never\nbe invoked. Therefore, when obtaining a reference a finalize callback is also\nrequired in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_add_finalizer" } ], "type": "misc", - "displayName": "Object Wrap" + "displayName": "Object wrap" }, { - "textRaw": "Simple Asynchronous Operations", + "textRaw": "Simple asynchronous operations", "name": "simple_asynchronous_operations", - "desc": "

                                                                                                                                                                                                                                                      Addon modules often need to leverage async helpers from libuv as part of their\nimplementation. This allows them to schedule work to be executed asynchronously\nso that their methods can return in advance of the work being completed. This\nallows them to avoid blocking overall execution of the Node.js application.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API provides an ABI-stable interface for these\nsupporting functions which covers the most common asynchronous use cases.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API defines the napi_async_work structure which is used to manage\nasynchronous workers. Instances are created/deleted with\nnapi_create_async_work and napi_delete_async_work.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The execute and complete callbacks are functions that will be\ninvoked when the executor is ready to execute and when it completes its\ntask respectively.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The execute function should avoid making any N-API calls\nthat could result in the execution of JavaScript or interaction with\nJavaScript objects. Most often, any code that needs to make N-API\ncalls should be made in complete callback instead.\nAvoid using the napi_env parameter in the execute callback as\nit will likely execute JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These functions implement the following interfaces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_async_execute_callback)(napi_env env,\n                                            void* data);\ntypedef void (*napi_async_complete_callback)(napi_env env,\n                                             napi_status status,\n                                             void* data);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When these methods are invoked, the data parameter passed will be the\naddon-provided void* data that was passed into the\nnapi_create_async_work call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once created the async worker can be queued\nfor execution using the napi_queue_async_work function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status napi_queue_async_work(napi_env env,\n                                  napi_async_work work);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_cancel_async_work can be used if the work needs\nto be cancelled before the work has started execution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      After calling napi_cancel_async_work, the complete callback\nwill be invoked with a status value of napi_cancelled.\nThe work should not be deleted before the complete\ncallback invocation, even when it was cancelled.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Addon modules often need to leverage async helpers from libuv as part of their\nimplementation. This allows them to schedule work to be executed asynchronously\nso that their methods can return in advance of the work being completed. This\nallows them to avoid blocking overall execution of the Node.js application.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API provides an ABI-stable interface for these\nsupporting functions which covers the most common asynchronous use cases.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      N-API defines the napi_async_work structure which is used to manage\nasynchronous workers. Instances are created/deleted with\nnapi_create_async_work and napi_delete_async_work.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The execute and complete callbacks are functions that will be\ninvoked when the executor is ready to execute and when it completes its\ntask respectively.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The execute function should avoid making any N-API calls\nthat could result in the execution of JavaScript or interaction with\nJavaScript objects. Most often, any code that needs to make N-API\ncalls should be made in complete callback instead.\nAvoid using the napi_env parameter in the execute callback as\nit will likely execute JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These functions implement the following interfaces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      typedef void (*napi_async_execute_callback)(napi_env env,\n                                            void* data);\ntypedef void (*napi_async_complete_callback)(napi_env env,\n                                             napi_status status,\n                                             void* data);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When these methods are invoked, the data parameter passed will be the\naddon-provided void* data that was passed into the\nnapi_create_async_work call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once created the async worker can be queued\nfor execution using the napi_queue_async_work function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      napi_status napi_queue_async_work(napi_env env,\n                                  napi_async_work work);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_cancel_async_work can be used if the work needs\nto be cancelled before the work has started execution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      After calling napi_cancel_async_work, the complete callback\nwill be invoked with a status value of napi_cancelled.\nThe work should not be deleted before the complete\ncallback invocation, even when it was cancelled.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "napi_create_async_work", @@ -2638,7 +2803,7 @@ } ] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_async_work(napi_env env,\n                                   napi_value async_resource,\n                                   napi_value async_resource_name,\n                                   napi_async_execute_callback execute,\n                                   napi_async_complete_callback complete,\n                                   void* data,\n                                   napi_async_work* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource: An optional object associated with the async work\nthat will be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource_name: Identifier for the kind of resource that is being\nprovided for diagnostic information exposed by the async_hooks API.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] execute: The native function which should be called to execute the\nlogic asynchronously. The given function is called from a worker pool thread\nand can execute in parallel with the main event loop thread.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] complete: The native function which will be called when the\nasynchronous logic is completed or is cancelled. The given function is called\nfrom the main event loop thread.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: User-provided data context. This will be passed back into the\nexecute and complete functions.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_async_work* which is the handle to the newly created\nasync work.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a work object that is used to execute logic asynchronously.\nIt should be freed using napi_delete_async_work once the work is no longer\nrequired.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      async_resource_name should be a null-terminated, UTF-8-encoded string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The async_resource_name identifier is provided by the user and should be\nrepresentative of the type of async work being performed. It is also recommended\nto apply namespacing to the identifier, e.g. by including the module name. See\nthe async_hooks documentation for more information.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_async_work(napi_env env,\n                                   napi_value async_resource,\n                                   napi_value async_resource_name,\n                                   napi_async_execute_callback execute,\n                                   napi_async_complete_callback complete,\n                                   void* data,\n                                   napi_async_work* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource: An optional object associated with the async work\nthat will be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource_name: Identifier for the kind of resource that is being\nprovided for diagnostic information exposed by the async_hooks API.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] execute: The native function which should be called to execute the\nlogic asynchronously. The given function is called from a worker pool thread\nand can execute in parallel with the main event loop thread.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] complete: The native function which will be called when the\nasynchronous logic is completed or is cancelled. The given function is called\nfrom the main event loop thread. napi_async_complete_callback provides\nmore details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: User-provided data context. This will be passed back into the\nexecute and complete functions.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_async_work* which is the handle to the newly created\nasync work.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API allocates a work object that is used to execute logic asynchronously.\nIt should be freed using napi_delete_async_work once the work is no longer\nrequired.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      async_resource_name should be a null-terminated, UTF-8-encoded string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The async_resource_name identifier is provided by the user and should be\nrepresentative of the type of async work being performed. It is also recommended\nto apply namespacing to the identifier, e.g. by including the module name. See\nthe async_hooks documentation for more information.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_async_work" }, @@ -2654,7 +2819,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_delete_async_work(napi_env env,\n                                   napi_async_work work);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API frees a previously allocated work object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_delete_async_work(napi_env env,\n                                   napi_async_work work);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API frees a previously allocated work object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_delete_async_work" }, @@ -2670,7 +2835,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_queue_async_work(napi_env env,\n                                  napi_async_work work);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API requests that the previously allocated work be scheduled\nfor execution. Once it returns successfully, this API must not be called again\nwith the same napi_async_work item or the result will be undefined.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_queue_async_work(napi_env env,\n                                  napi_async_work work);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API requests that the previously allocated work be scheduled\nfor execution. Once it returns successfully, this API must not be called again\nwith the same napi_async_work item or the result will be undefined.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_queue_async_work" }, @@ -2686,16 +2851,16 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_cancel_async_work(napi_env env,\n                                   napi_async_work work);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API cancels queued work if it has not yet\nbeen started. If it has already started executing, it cannot be\ncancelled and napi_generic_failure will be returned. If successful,\nthe complete callback will be invoked with a status value of\nnapi_cancelled. The work should not be deleted before the complete\ncallback invocation, even if it has been successfully cancelled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_cancel_async_work(napi_env env,\n                                   napi_async_work work);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API cancels queued work if it has not yet\nbeen started. If it has already started executing, it cannot be\ncancelled and napi_generic_failure will be returned. If successful,\nthe complete callback will be invoked with a status value of\nnapi_cancelled. The work should not be deleted before the complete\ncallback invocation, even if it has been successfully cancelled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_cancel_async_work" } ], "type": "misc", - "displayName": "Simple Asynchronous Operations" + "displayName": "Simple asynchronous operations" }, { - "textRaw": "Custom Asynchronous Operations", + "textRaw": "Custom asynchronous operations", "name": "custom_asynchronous_operations", "desc": "

                                                                                                                                                                                                                                                      The simple asynchronous work APIs above may not be appropriate for every\nscenario. When using any other asynchronous mechanism, the following APIs\nare necessary to ensure an asynchronous operation is properly tracked by\nthe runtime.

                                                                                                                                                                                                                                                      ", "modules": [ @@ -2711,7 +2876,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_async_init(napi_env env,\n                            napi_value async_resource,\n                            napi_value async_resource_name,\n                            napi_async_context* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource: Object associated with the async work\nthat will be passed to possible async_hooks init hooks.\nIn order to retain ABI compatibility with previous versions,\npassing NULL for async_resource will not result in an error, however,\nthis will result incorrect operation of async hooks for the\nnapi_async_context created. Potential issues include\nloss of async context when using the AsyncLocalStorage API.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource_name: Identifier for the kind of resource\nthat is being provided for diagnostic information exposed by the\nasync_hooks API.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The initialized async context.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_async_init(napi_env env,\n                            napi_value async_resource,\n                            napi_value async_resource_name,\n                            napi_async_context* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource: Object associated with the async work\nthat will be passed to possible async_hooks init hooks.\nIn order to retain ABI compatibility with previous versions,\npassing NULL for async_resource will not result in an error, however,\nthis will result incorrect operation of async hooks for the\nnapi_async_context created. Potential issues include\nloss of async context when using the AsyncLocalStorage API.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource_name: Identifier for the kind of resource\nthat is being provided for diagnostic information exposed by the\nasync_hooks API.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The initialized async context.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_async_init" }, @@ -2727,7 +2892,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_async_destroy(napi_env env,\n                               napi_async_context async_context);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_context: The async context to be destroyed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_async_destroy(napi_env env,\n                               napi_async_context async_context);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_context: The async context to be destroyed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_async_destroy" }, @@ -2748,7 +2913,7 @@ } ] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_make_callback(napi_env env,\n                                           napi_async_context async_context,\n                                           napi_value recv,\n                                           napi_value func,\n                                           size_t argc,\n                                           const napi_value* argv,\n                                           napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_context: Context for the async operation that is\ninvoking the callback. This should normally be a value previously\nobtained from napi_async_init. However NULL is also allowed,\nwhich indicates the current async context (if any) is to be used\nfor the callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: napi_value representing the JavaScript function to be invoked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argv: Array of JavaScript values as napi_value representing the\narguments to the function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript object returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method allows a JavaScript function object to be called from a native\nadd-on. This API is similar to napi_call_function. However, it is used to call\nfrom native code back into JavaScript after returning from an async\noperation (when there is no other script on the stack). It is a fairly simple\nwrapper around node::MakeCallback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note it is not necessary to use napi_make_callback from within a\nnapi_async_complete_callback; in that situation the callback's async\ncontext has already been set up, so a direct call to napi_call_function\nis sufficient and appropriate. Use of the napi_make_callback function\nmay be required when implementing custom async behavior that does not use\nnapi_create_async_work.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_make_callback(napi_env env,\n                                           napi_async_context async_context,\n                                           napi_value recv,\n                                           napi_value func,\n                                           size_t argc,\n                                           const napi_value* argv,\n                                           napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_context: Context for the async operation that is\ninvoking the callback. This should normally be a value previously\nobtained from napi_async_init. However NULL is also allowed,\nwhich indicates the current async context (if any) is to be used\nfor the callback.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: napi_value representing the JavaScript function to be invoked.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] argv: Array of JavaScript values as napi_value representing the\narguments to the function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript object returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method allows a JavaScript function object to be called from a native\nadd-on. This API is similar to napi_call_function. However, it is used to call\nfrom native code back into JavaScript after returning from an async\noperation (when there is no other script on the stack). It is a fairly simple\nwrapper around node::MakeCallback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note it is not necessary to use napi_make_callback from within a\nnapi_async_complete_callback; in that situation the callback's async\ncontext has already been set up, so a direct call to napi_call_function\nis sufficient and appropriate. Use of the napi_make_callback function\nmay be required when implementing custom async behavior that does not use\nnapi_create_async_work.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any process.nextTicks or Promises scheduled on the microtask queue by\nJavaScript during the callback are ran before returning back to C/C++.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_make_callback" }, @@ -2764,7 +2929,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env,\n                                                 napi_value resource_object,\n                                                 napi_async_context context,\n                                                 napi_callback_scope* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] resource_object: An object associated with the async work\nthat will be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] context: Context for the async operation that is invoking the callback.\nThis should be a value previously obtained from napi_async_init.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The newly created scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are cases (for example, resolving promises) where it is\nnecessary to have the equivalent of the scope associated with a callback\nin place when making certain N-API calls. If there is no other script on\nthe stack the napi_open_callback_scope and\nnapi_close_callback_scope functions can be used to open/close\nthe required scope.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env,\n                                                 napi_value resource_object,\n                                                 napi_async_context context,\n                                                 napi_callback_scope* result)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] resource_object: An object associated with the async work\nthat will be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] context: Context for the async operation that is invoking the callback.\nThis should be a value previously obtained from napi_async_init.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The newly created scope.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are cases (for example, resolving promises) where it is\nnecessary to have the equivalent of the scope associated with a callback\nin place when making certain N-API calls. If there is no other script on\nthe stack the napi_open_callback_scope and\nnapi_close_callback_scope functions can be used to open/close\nthe required scope.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_open_callback_scope" }, @@ -2780,16 +2945,16 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env,\n                                                  napi_callback_scope scope)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] scope: The scope to be closed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env,\n                                                  napi_callback_scope scope)\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] scope: The scope to be closed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_close_callback_scope" } ], "type": "misc", - "displayName": "Custom Asynchronous Operations" + "displayName": "Custom asynchronous operations" }, { - "textRaw": "Version Management", + "textRaw": "Version management", "name": "version_management", "modules": [ { @@ -2804,7 +2969,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      typedef struct {\n  uint32_t major;\n  uint32_t minor;\n  uint32_t patch;\n  const char* release;\n} napi_node_version;\n\nnapi_status napi_get_node_version(napi_env env,\n                                  const napi_node_version** version);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] version: A pointer to version information for Node.js itself.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function fills the version struct with the major, minor, and patch\nversion of Node.js that is currently running, and the release field with the\nvalue of process.release.name.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The returned buffer is statically allocated and does not need to be freed.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      typedef struct {\n  uint32_t major;\n  uint32_t minor;\n  uint32_t patch;\n  const char* release;\n} napi_node_version;\n\nnapi_status napi_get_node_version(napi_env env,\n                                  const napi_node_version** version);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] version: A pointer to version information for Node.js itself.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function fills the version struct with the major, minor, and patch\nversion of Node.js that is currently running, and the release field with the\nvalue of process.release.name.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The returned buffer is statically allocated and does not need to be freed.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_node_version" }, @@ -2820,16 +2985,16 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_version(napi_env env,\n                             uint32_t* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The highest version of N-API supported.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the highest N-API version supported by the\nNode.js runtime. N-API is planned to be additive such that\nnewer releases of Node.js may support additional API functions.\nIn order to allow an addon to use a newer function when running with\nversions of Node.js that support it, while providing\nfallback behavior when running with Node.js versions that don't\nsupport it:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Call napi_get_version() to determine if the API is available.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If available, dynamically load a pointer to the function using uv_dlsym().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Use the dynamically loaded pointer to invoke the function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the function is not available, provide an alternate implementation\nthat does not use the function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_get_version(napi_env env,\n                             uint32_t* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The highest version of N-API supported.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API returns the highest N-API version supported by the\nNode.js runtime. N-API is planned to be additive such that\nnewer releases of Node.js may support additional API functions.\nIn order to allow an addon to use a newer function when running with\nversions of Node.js that support it, while providing\nfallback behavior when running with Node.js versions that don't\nsupport it:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Call napi_get_version() to determine if the API is available.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If available, dynamically load a pointer to the function using uv_dlsym().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Use the dynamically loaded pointer to invoke the function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the function is not available, provide an alternate implementation\nthat does not use the function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_version" } ], "type": "misc", - "displayName": "Version Management" + "displayName": "Version management" }, { - "textRaw": "Memory Management", + "textRaw": "Memory management", "name": "memory_management", "modules": [ { @@ -2844,13 +3009,13 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env,\n                                                    int64_t change_in_bytes,\n                                                    int64_t* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] change_in_bytes: The change in externally allocated memory that is kept\nalive by JavaScript objects.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The adjusted value
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function gives V8 an indication of the amount of externally allocated\nmemory that is kept alive by JavaScript objects (i.e. a JavaScript object\nthat points to its own memory allocated by a native module). Registering\nexternally allocated memory will trigger global garbage collections more\noften than it would otherwise.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env,\n                                                    int64_t change_in_bytes,\n                                                    int64_t* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] change_in_bytes: The change in externally allocated memory that is kept\nalive by JavaScript objects.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The adjusted value
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function gives V8 an indication of the amount of externally allocated\nmemory that is kept alive by JavaScript objects (i.e. a JavaScript object\nthat points to its own memory allocated by a native module). Registering\nexternally allocated memory will trigger global garbage collections more\noften than it would otherwise.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_adjust_external_memory" } ], "type": "misc", - "displayName": "Memory Management" + "displayName": "Memory management" }, { "textRaw": "Promises", @@ -2869,7 +3034,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_promise(napi_env env,\n                                napi_deferred* deferred,\n                                napi_value* promise);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] deferred: A newly created deferred object which can later be passed to\nnapi_resolve_deferred() or napi_reject_deferred() to resolve resp. reject\nthe associated promise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] promise: The JavaScript promise associated with the deferred object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a deferred object and a JavaScript promise.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_create_promise(napi_env env,\n                                napi_deferred* deferred,\n                                napi_value* promise);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] deferred: A newly created deferred object which can later be passed to\nnapi_resolve_deferred() or napi_reject_deferred() to resolve resp. reject\nthe associated promise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] promise: The JavaScript promise associated with the deferred object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API creates a deferred object and a JavaScript promise.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_promise" }, @@ -2885,7 +3050,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_resolve_deferred(napi_env env,\n                                  napi_deferred deferred,\n                                  napi_value resolution);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] resolution: The value with which to resolve the promise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API resolves a JavaScript promise by way of the deferred object\nwith which it is associated. Thus, it can only be used to resolve JavaScript\npromises for which the corresponding deferred object is available. This\neffectively means that the promise must have been created using\nnapi_create_promise() and the deferred object returned from that call must\nhave been retained in order to be passed to this API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The deferred object is freed upon successful completion.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_resolve_deferred(napi_env env,\n                                  napi_deferred deferred,\n                                  napi_value resolution);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] resolution: The value with which to resolve the promise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API resolves a JavaScript promise by way of the deferred object\nwith which it is associated. Thus, it can only be used to resolve JavaScript\npromises for which the corresponding deferred object is available. This\neffectively means that the promise must have been created using\nnapi_create_promise() and the deferred object returned from that call must\nhave been retained in order to be passed to this API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The deferred object is freed upon successful completion.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_resolve_deferred" }, @@ -2901,7 +3066,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_reject_deferred(napi_env env,\n                                 napi_deferred deferred,\n                                 napi_value rejection);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] rejection: The value with which to reject the promise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API rejects a JavaScript promise by way of the deferred object\nwith which it is associated. Thus, it can only be used to reject JavaScript\npromises for which the corresponding deferred object is available. This\neffectively means that the promise must have been created using\nnapi_create_promise() and the deferred object returned from that call must\nhave been retained in order to be passed to this API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The deferred object is freed upon successful completion.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_reject_deferred(napi_env env,\n                                 napi_deferred deferred,\n                                 napi_value rejection);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] rejection: The value with which to reject the promise.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API rejects a JavaScript promise by way of the deferred object\nwith which it is associated. Thus, it can only be used to reject JavaScript\npromises for which the corresponding deferred object is available. This\neffectively means that the promise must have been created using\nnapi_create_promise() and the deferred object returned from that call must\nhave been retained in order to be passed to this API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The deferred object is freed upon successful completion.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_reject_deferred" }, @@ -2917,7 +3082,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_promise(napi_env env,\n                            napi_value value,\n                            bool* is_promise);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The value to examine
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] is_promise: Flag indicating whether promise is a native promise\nobject (that is, a promise object created by the underlying engine).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      napi_status napi_is_promise(napi_env env,\n                            napi_value value,\n                            bool* is_promise);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] value: The value to examine
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] is_promise: Flag indicating whether promise is a native promise\nobject (that is, a promise object created by the underlying engine).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_is_promise" } @@ -2942,7 +3107,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_run_script(napi_env env,\n                                        napi_value script,\n                                        napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] script: A JavaScript string containing the script to execute.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The value resulting from having executed the script.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function executes a string of JavaScript code and returns its result with\nthe following caveats:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Unlike eval, this function does not allow the script to access the current\nlexical scope, and therefore also does not allow to access the\nmodule scope, meaning that pseudo-globals such as require will not be\navailable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The script can access the global scope. Function and var declarations\nin the script will be added to the global object. Variable declarations\nmade using let and const will be visible globally, but will not be added\nto the global object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The value of this is global within the script.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_run_script(napi_env env,\n                                        napi_value script,\n                                        napi_value* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] script: A JavaScript string containing the script to execute.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The value resulting from having executed the script.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function executes a string of JavaScript code and returns its result with\nthe following caveats:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Unlike eval, this function does not allow the script to access the current\nlexical scope, and therefore also does not allow to access the\nmodule scope, meaning that pseudo-globals such as require will not be\navailable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The script can access the global scope. Function and var declarations\nin the script will be added to the global object. Variable declarations\nmade using let and const will be visible globally, but will not be added\nto the global object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The value of this is global within the script.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_run_script" } @@ -2968,7 +3133,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env,\n                                               struct uv_loop_s** loop);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] loop: The current libuv loop instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env,\n                                               struct uv_loop_s** loop);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] loop: The current libuv loop instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_uv_event_loop" } @@ -2977,11 +3142,32 @@ "displayName": "libuv event loop" }, { - "textRaw": "Asynchronous Thread-safe Function Calls", + "textRaw": "Asynchronous thread-safe function calls", "name": "asynchronous_thread-safe_function_calls", - "desc": "

                                                                                                                                                                                                                                                      JavaScript functions can normally only be called from a native addon's main\nthread. If an addon creates additional threads, then N-API functions that\nrequire a napi_env, napi_value, or napi_ref must not be called from those\nthreads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When an addon has additional threads and JavaScript functions need to be invoked\nbased on the processing completed by those threads, those threads must\ncommunicate with the addon's main thread so that the main thread can invoke the\nJavaScript function on their behalf. The thread-safe function APIs provide an\neasy way to do this.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These APIs provide the type napi_threadsafe_function as well as APIs to\ncreate, destroy, and call objects of this type.\nnapi_create_threadsafe_function() creates a persistent reference to a\nnapi_value that holds a JavaScript function which can be called from multiple\nthreads. The calls happen asynchronously. This means that values with which the\nJavaScript callback is to be called will be placed in a queue, and, for each\nvalue in the queue, a call will eventually be made to the JavaScript function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Upon creation of a napi_threadsafe_function a napi_finalize callback can be\nprovided. This callback will be invoked on the main thread when the thread-safe\nfunction is about to be destroyed. It receives the context and the finalize data\ngiven during construction, and provides an opportunity for cleaning up after the\nthreads e.g. by calling uv_thread_join(). Aside from the main loop thread,\nno threads should be using the thread-safe function after the finalize callback\ncompletes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The context given during the call to napi_create_threadsafe_function() can\nbe retrieved from any thread with a call to\nnapi_get_threadsafe_function_context().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_call_threadsafe_function() can then be used for initiating a call into\nJavaScript. napi_call_threadsafe_function() accepts a parameter which controls\nwhether the API behaves blockingly. If set to napi_tsfn_nonblocking, the API\nbehaves non-blockingly, returning napi_queue_full if the queue was full,\npreventing data from being successfully added to the queue. If set to\nnapi_tsfn_blocking, the API blocks until space becomes available in the queue.\nnapi_call_threadsafe_function() never blocks if the thread-safe function was\ncreated with a maximum queue size of 0.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The actual call into JavaScript is controlled by the callback given via the\ncall_js_cb parameter. call_js_cb is invoked on the main thread once for each\nvalue that was placed into the queue by a successful call to\nnapi_call_threadsafe_function(). If such a callback is not given, a default\ncallback will be used, and the resulting JavaScript call will have no arguments.\nThe call_js_cb callback receives the JavaScript function to call as a\nnapi_value in its parameters, as well as the void* context pointer used when\ncreating the napi_threadsafe_function, and the next data pointer that was\ncreated by one of the secondary threads. The callback can then use an API such\nas napi_call_function() to call into JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback may also be invoked with env and call_js_cb both set to NULL\nto indicate that calls into JavaScript are no longer possible, while items\nremain in the queue that may need to be freed. This normally occurs when the\nNode.js process exits while there is a thread-safe function still active.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is not necessary to call into JavaScript via napi_make_callback() because\nN-API runs call_js_cb in a context appropriate for callbacks.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Threads can be added to and removed from a napi_threadsafe_function object\nduring its existence. Thus, in addition to specifying an initial number of\nthreads upon creation, napi_acquire_threadsafe_function can be called to\nindicate that a new thread will start making use of the thread-safe function.\nSimilarly, napi_release_threadsafe_function can be called to indicate that an\nexisting thread will stop making use of the thread-safe function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_threadsafe_function objects are destroyed when every thread which uses\nthe object has called napi_release_threadsafe_function() or has received a\nreturn status of napi_closing in response to a call to\nnapi_call_threadsafe_function. The queue is emptied before the\nnapi_threadsafe_function is destroyed. napi_release_threadsafe_function()\nshould be the last API call made in conjunction with a given\nnapi_threadsafe_function, because after the call completes, there is no\nguarantee that the napi_threadsafe_function is still allocated. For the same\nreason, do not make use of a thread-safe function\nafter receiving a return value of napi_closing in response to a call to\nnapi_call_threadsafe_function. Data associated with the\nnapi_threadsafe_function can be freed in its napi_finalize callback which\nwas passed to napi_create_threadsafe_function().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the number of threads making use of a napi_threadsafe_function reaches\nzero, no further threads can start making use of it by calling\nnapi_acquire_threadsafe_function(). In fact, all subsequent API calls\nassociated with it, except napi_release_threadsafe_function(), will return an\nerror value of napi_closing.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The thread-safe function can be \"aborted\" by giving a value of napi_tsfn_abort\nto napi_release_threadsafe_function(). This will cause all subsequent APIs\nassociated with the thread-safe function except\nnapi_release_threadsafe_function() to return napi_closing even before its\nreference count reaches zero. In particular, napi_call_threadsafe_function()\nwill return napi_closing, thus informing the threads that it is no longer\npossible to make asynchronous calls to the thread-safe function. This can be\nused as a criterion for terminating the thread. Upon receiving a return value\nof napi_closing from napi_call_threadsafe_function() a thread must make no\nfurther use of the thread-safe function because it is no longer guaranteed to\nbe allocated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Similarly to libuv handles, thread-safe functions can be \"referenced\" and\n\"unreferenced\". A \"referenced\" thread-safe function will cause the event loop on\nthe thread on which it is created to remain alive until the thread-safe function\nis destroyed. In contrast, an \"unreferenced\" thread-safe function will not\nprevent the event loop from exiting. The APIs napi_ref_threadsafe_function and\nnapi_unref_threadsafe_function exist for this purpose.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      JavaScript functions can normally only be called from a native addon's main\nthread. If an addon creates additional threads, then N-API functions that\nrequire a napi_env, napi_value, or napi_ref must not be called from those\nthreads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When an addon has additional threads and JavaScript functions need to be invoked\nbased on the processing completed by those threads, those threads must\ncommunicate with the addon's main thread so that the main thread can invoke the\nJavaScript function on their behalf. The thread-safe function APIs provide an\neasy way to do this.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These APIs provide the type napi_threadsafe_function as well as APIs to\ncreate, destroy, and call objects of this type.\nnapi_create_threadsafe_function() creates a persistent reference to a\nnapi_value that holds a JavaScript function which can be called from multiple\nthreads. The calls happen asynchronously. This means that values with which the\nJavaScript callback is to be called will be placed in a queue, and, for each\nvalue in the queue, a call will eventually be made to the JavaScript function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Upon creation of a napi_threadsafe_function a napi_finalize callback can be\nprovided. This callback will be invoked on the main thread when the thread-safe\nfunction is about to be destroyed. It receives the context and the finalize data\ngiven during construction, and provides an opportunity for cleaning up after the\nthreads e.g. by calling uv_thread_join(). Aside from the main loop thread,\nno threads should be using the thread-safe function after the finalize callback\ncompletes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The context given during the call to napi_create_threadsafe_function() can\nbe retrieved from any thread with a call to\nnapi_get_threadsafe_function_context().

                                                                                                                                                                                                                                                      ", "modules": [ { + "textRaw": "Calling a thread-safe function", + "name": "calling_a_thread-safe_function", + "desc": "

                                                                                                                                                                                                                                                      napi_call_threadsafe_function() can be used for initiating a call into\nJavaScript. napi_call_threadsafe_function() accepts a parameter which controls\nwhether the API behaves blockingly. If set to napi_tsfn_nonblocking, the API\nbehaves non-blockingly, returning napi_queue_full if the queue was full,\npreventing data from being successfully added to the queue. If set to\nnapi_tsfn_blocking, the API blocks until space becomes available in the queue.\nnapi_call_threadsafe_function() never blocks if the thread-safe function was\ncreated with a maximum queue size of 0.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The actual call into JavaScript is controlled by the callback given via the\ncall_js_cb parameter. call_js_cb is invoked on the main thread once for each\nvalue that was placed into the queue by a successful call to\nnapi_call_threadsafe_function(). If such a callback is not given, a default\ncallback will be used, and the resulting JavaScript call will have no arguments.\nThe call_js_cb callback receives the JavaScript function to call as a\nnapi_value in its parameters, as well as the void* context pointer used when\ncreating the napi_threadsafe_function, and the next data pointer that was\ncreated by one of the secondary threads. The callback can then use an API such\nas napi_call_function() to call into JavaScript.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback may also be invoked with env and call_js_cb both set to NULL\nto indicate that calls into JavaScript are no longer possible, while items\nremain in the queue that may need to be freed. This normally occurs when the\nNode.js process exits while there is a thread-safe function still active.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is not necessary to call into JavaScript via napi_make_callback() because\nN-API runs call_js_cb in a context appropriate for callbacks.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Calling a thread-safe function" + }, + { + "textRaw": "Reference counting of thread-safe functions", + "name": "reference_counting_of_thread-safe_functions", + "desc": "

                                                                                                                                                                                                                                                      Threads can be added to and removed from a napi_threadsafe_function object\nduring its existence. Thus, in addition to specifying an initial number of\nthreads upon creation, napi_acquire_threadsafe_function can be called to\nindicate that a new thread will start making use of the thread-safe function.\nSimilarly, napi_release_threadsafe_function can be called to indicate that an\nexisting thread will stop making use of the thread-safe function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      napi_threadsafe_function objects are destroyed when every thread which uses\nthe object has called napi_release_threadsafe_function() or has received a\nreturn status of napi_closing in response to a call to\nnapi_call_threadsafe_function. The queue is emptied before the\nnapi_threadsafe_function is destroyed. napi_release_threadsafe_function()\nshould be the last API call made in conjunction with a given\nnapi_threadsafe_function, because after the call completes, there is no\nguarantee that the napi_threadsafe_function is still allocated. For the same\nreason, do not use a thread-safe function\nafter receiving a return value of napi_closing in response to a call to\nnapi_call_threadsafe_function. Data associated with the\nnapi_threadsafe_function can be freed in its napi_finalize callback which\nwas passed to napi_create_threadsafe_function(). The parameter\ninitial_thread_count of napi_create_threadsafe_function marks the initial\nnumber of aquisitions of the thread-safe functions, instead of calling\nnapi_acquire_threadsafe_function multiple times at creation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the number of threads making use of a napi_threadsafe_function reaches\nzero, no further threads can start making use of it by calling\nnapi_acquire_threadsafe_function(). In fact, all subsequent API calls\nassociated with it, except napi_release_threadsafe_function(), will return an\nerror value of napi_closing.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The thread-safe function can be \"aborted\" by giving a value of napi_tsfn_abort\nto napi_release_threadsafe_function(). This will cause all subsequent APIs\nassociated with the thread-safe function except\nnapi_release_threadsafe_function() to return napi_closing even before its\nreference count reaches zero. In particular, napi_call_threadsafe_function()\nwill return napi_closing, thus informing the threads that it is no longer\npossible to make asynchronous calls to the thread-safe function. This can be\nused as a criterion for terminating the thread. Upon receiving a return value\nof napi_closing from napi_call_threadsafe_function() a thread must not use\nthe thread-safe function anymore because it is no longer guaranteed to\nbe allocated.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Reference counting of thread-safe functions" + }, + { + "textRaw": "Deciding whether to keep the process running", + "name": "deciding_whether_to_keep_the_process_running", + "desc": "

                                                                                                                                                                                                                                                      Similarly to libuv handles, thread-safe functions can be \"referenced\" and\n\"unreferenced\". A \"referenced\" thread-safe function will cause the event loop on\nthe thread on which it is created to remain alive until the thread-safe function\nis destroyed. In contrast, an \"unreferenced\" thread-safe function will not\nprevent the event loop from exiting. The APIs napi_ref_threadsafe_function and\nnapi_unref_threadsafe_function exist for this purpose.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Neither does napi_unref_threadsafe_function mark the thread-safe functions as\nable to be destroyed nor does napi_ref_threadsafe_function prevent it from\nbeing destroyed.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Deciding whether to keep the process running" + }, + { "textRaw": "napi_create_threadsafe_function", "name": "napi_create_threadsafe_function", "meta": { @@ -2999,7 +3185,7 @@ } ] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_create_threadsafe_function(napi_env env,\n                                napi_value func,\n                                napi_value async_resource,\n                                napi_value async_resource_name,\n                                size_t max_queue_size,\n                                size_t initial_thread_count,\n                                void* thread_finalize_data,\n                                napi_finalize thread_finalize_cb,\n                                void* context,\n                                napi_threadsafe_function_call_js call_js_cb,\n                                napi_threadsafe_function* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: An optional JavaScript function to call from another thread. It\nmust be provided if NULL is passed to call_js_cb.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource: An optional object associated with the async work that\nwill be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource_name: A JavaScript string to provide an identifier for\nthe kind of resource that is being provided for diagnostic information exposed\nby the async_hooks API.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] max_queue_size: Maximum size of the queue. 0 for no limit.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] initial_thread_count: The initial number of threads, including the main\nthread, which will be making use of this function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] thread_finalize_data: Optional data to be passed to thread_finalize_cb.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] thread_finalize_cb: Optional function to call when the\nnapi_threadsafe_function is being destroyed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] context: Optional data to attach to the resulting\nnapi_threadsafe_function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] call_js_cb: Optional callback which calls the JavaScript function in\nresponse to a call on a different thread. This callback will be called on the\nmain thread. If not given, the JavaScript function will be called with no\nparameters and with undefined as its this value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The asynchronous thread-safe JavaScript function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_create_threadsafe_function(napi_env env,\n                                napi_value func,\n                                napi_value async_resource,\n                                napi_value async_resource_name,\n                                size_t max_queue_size,\n                                size_t initial_thread_count,\n                                void* thread_finalize_data,\n                                napi_finalize thread_finalize_cb,\n                                void* context,\n                                napi_threadsafe_function_call_js call_js_cb,\n                                napi_threadsafe_function* result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: An optional JavaScript function to call from another thread. It\nmust be provided if NULL is passed to call_js_cb.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource: An optional object associated with the async work that\nwill be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] async_resource_name: A JavaScript string to provide an identifier for\nthe kind of resource that is being provided for diagnostic information exposed\nby the async_hooks API.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] max_queue_size: Maximum size of the queue. 0 for no limit.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] initial_thread_count: The initial number of acquisitions, i.e. the\ninitial number of threads, including the main thread, which will be making use\nof this function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] thread_finalize_data: Optional data to be passed to thread_finalize_cb.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] thread_finalize_cb: Optional function to call when the\nnapi_threadsafe_function is being destroyed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] context: Optional data to attach to the resulting\nnapi_threadsafe_function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] call_js_cb: Optional callback which calls the JavaScript function in\nresponse to a call on a different thread. This callback will be called on the\nmain thread. If not given, the JavaScript function will be called with no\nparameters and with undefined as its this value.\nnapi_threadsafe_function_call_js provides more details.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The asynchronous thread-safe JavaScript function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_create_threadsafe_function" }, @@ -3015,7 +3201,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_get_threadsafe_function_context(napi_threadsafe_function func,\n                                     void** result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] func: The thread-safe function for which to retrieve the context.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The location where to store the context.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may be called from any thread which makes use of func.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_get_threadsafe_function_context(napi_threadsafe_function func,\n                                     void** result);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] func: The thread-safe function for which to retrieve the context.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: The location where to store the context.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may be called from any thread which makes use of func.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_get_threadsafe_function_context" }, @@ -3031,7 +3217,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_call_threadsafe_function(napi_threadsafe_function func,\n                              void* data,\n                              napi_threadsafe_function_call_mode is_blocking);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] func: The asynchronous thread-safe JavaScript function to invoke.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Data to send into JavaScript via the callback call_js_cb\nprovided during the creation of the thread-safe JavaScript function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] is_blocking: Flag whose value can be either napi_tsfn_blocking to\nindicate that the call should block if the queue is full or\nnapi_tsfn_nonblocking to indicate that the call should return immediately\nwith a status of napi_queue_full whenever the queue is full.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API will return napi_closing if napi_release_threadsafe_function() was\ncalled with abort set to napi_tsfn_abort from any thread. The value is only\nadded to the queue if the API returns napi_ok.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may be called from any thread which makes use of func.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_call_threadsafe_function(napi_threadsafe_function func,\n                              void* data,\n                              napi_threadsafe_function_call_mode is_blocking);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] func: The asynchronous thread-safe JavaScript function to invoke.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] data: Data to send into JavaScript via the callback call_js_cb\nprovided during the creation of the thread-safe JavaScript function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] is_blocking: Flag whose value can be either napi_tsfn_blocking to\nindicate that the call should block if the queue is full or\nnapi_tsfn_nonblocking to indicate that the call should return immediately\nwith a status of napi_queue_full whenever the queue is full.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API will return napi_closing if napi_release_threadsafe_function() was\ncalled with abort set to napi_tsfn_abort from any thread. The value is only\nadded to the queue if the API returns napi_ok.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may be called from any thread which makes use of func.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_call_threadsafe_function" }, @@ -3047,7 +3233,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_acquire_threadsafe_function(napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] func: The asynchronous thread-safe JavaScript function to start making\nuse of.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A thread should call this API before passing func to any other thread-safe\nfunction APIs to indicate that it will be making use of func. This prevents\nfunc from being destroyed when all other threads have stopped making use of\nit.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may be called from any thread which will start making use of func.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_acquire_threadsafe_function(napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] func: The asynchronous thread-safe JavaScript function to start making\nuse of.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A thread should call this API before passing func to any other thread-safe\nfunction APIs to indicate that it will be making use of func. This prevents\nfunc from being destroyed when all other threads have stopped making use of\nit.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may be called from any thread which will start making use of func.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_acquire_threadsafe_function" }, @@ -3063,7 +3249,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_release_threadsafe_function(napi_threadsafe_function func,\n                                 napi_threadsafe_function_release_mode mode);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] func: The asynchronous thread-safe JavaScript function whose reference\ncount to decrement.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] mode: Flag whose value can be either napi_tsfn_release to indicate\nthat the current thread will make no further calls to the thread-safe\nfunction, or napi_tsfn_abort to indicate that in addition to the current\nthread, no other thread should make any further calls to the thread-safe\nfunction. If set to napi_tsfn_abort, further calls to\nnapi_call_threadsafe_function() will return napi_closing, and no further\nvalues will be placed in the queue.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A thread should call this API when it stops making use of func. Passing func\nto any thread-safe APIs after having called this API has undefined results, as\nfunc may have been destroyed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may be called from any thread which will stop making use of func.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_release_threadsafe_function(napi_threadsafe_function func,\n                                 napi_threadsafe_function_release_mode mode);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] func: The asynchronous thread-safe JavaScript function whose reference\ncount to decrement.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] mode: Flag whose value can be either napi_tsfn_release to indicate\nthat the current thread will make no further calls to the thread-safe\nfunction, or napi_tsfn_abort to indicate that in addition to the current\nthread, no other thread should make any further calls to the thread-safe\nfunction. If set to napi_tsfn_abort, further calls to\nnapi_call_threadsafe_function() will return napi_closing, and no further\nvalues will be placed in the queue.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A thread should call this API when it stops making use of func. Passing func\nto any thread-safe APIs after having called this API has undefined results, as\nfunc may have been destroyed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may be called from any thread which will stop making use of func.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_release_threadsafe_function" }, @@ -3079,7 +3265,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: The thread-safe function to reference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to indicate that the event loop running on the main thread\nshould not exit until func has been destroyed. Similar to uv_ref it is\nalso idempotent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may only be called from the main thread.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: The thread-safe function to reference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to indicate that the event loop running on the main thread\nshould not exit until func has been destroyed. Similar to uv_ref it is\nalso idempotent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Neither does napi_unref_threadsafe_function mark the thread-safe functions as\nable to be destroyed nor does napi_ref_threadsafe_function prevent it from\nbeing destroyed. napi_acquire_threadsafe_function and\nnapi_release_threadsafe_function are available for that purpose.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may only be called from the main thread.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_ref_threadsafe_function" }, @@ -3095,19 +3281,49 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: The thread-safe function to unreference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to indicate that the event loop running on the main thread\nmay exit before func is destroyed. Similar to uv_unref it is also\nidempotent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may only be called from the main thread.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnapi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [in] func: The thread-safe function to unreference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API is used to indicate that the event loop running on the main thread\nmay exit before func is destroyed. Similar to uv_unref it is also\nidempotent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API may only be called from the main thread.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "napi_unref_threadsafe_function" } ], "type": "misc", - "displayName": "Asynchronous Thread-safe Function Calls" + "displayName": "Asynchronous thread-safe function calls" + }, + { + "textRaw": "Miscellaneous utilities", + "name": "miscellaneous_utilities", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnode_api_get_module_file_name(napi_env env, const char** result);\n\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A URL containing the absolute path of the\nlocation from which the add-on was loaded. For a file on the local\nfile system it will start with file://. The string is null-terminated and\nowned by env and must thus not be modified or freed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      result may be an empty string if the add-on loading process fails to establish\nthe add-on's file name during loading.

                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "Miscellaneous utilities" + }, + { + "textRaw": "node_api_get_module_file_name", + "name": "node_api_get_module_file_name", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "
                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status\nnode_api_get_module_file_name(napi_env env, const char** result);\n\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • [out] result: A URL containing the absolute path of the\nlocation from which the add-on was loaded. For a file on the local\nfile system it will start with file://. The string is null-terminated and\nowned by env and must thus not be modified or freed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      result may be an empty string if the add-on loading process fails to establish\nthe add-on's file name during loading.

                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "node_api_get_module_file_name" } ] }, { - "textRaw": "Command Line Options", - "name": "Command Line Options", + "textRaw": "Command line options", + "name": "Command line options", "introduced_in": "v5.9.1", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Node.js comes with a variety of CLI options. These options expose built-in\ndebugging, multiple ways to execute scripts, and other helpful runtime options.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To view this documentation as a manual page in a terminal, run man node.

                                                                                                                                                                                                                                                      ", @@ -3131,7 +3347,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      All options, including V8 options, allow words to be separated by both\ndashes (-) or underscores (_).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, --pending-deprecation is equivalent to --pending_deprecation.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      All options, including V8 options, allow words to be separated by both\ndashes (-) or underscores (_).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, --pending-deprecation is equivalent to --pending_deprecation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If an option that takes a single value, for example --max-http-header-size,\nis passed more than once, then the last passed value will be used. Options\nfrom the command line take precedence over options passed through the\nNODE_OPTIONS environment variable.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "`-`", @@ -3186,6 +3402,21 @@ "displayName": "`--completion-bash`" }, { + "textRaw": "`--conditions=condition`", + "name": "`--conditions=condition`", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                      Enable experimental support for custom conditional exports resolution\nconditions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any number of custom string condition names are permitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default Node.js conditions of \"node\", \"default\", \"import\", and\n\"require\" will always apply as defined.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`--conditions=condition`" + }, + { "textRaw": "`--cpu-prof`", "name": "`--cpu-prof`", "meta": { @@ -3211,7 +3442,7 @@ }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      Specify the directory where the CPU profiles generated by --cpu-prof will\nbe placed.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Specify the directory where the CPU profiles generated by --cpu-prof will\nbe placed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default value is controlled by the\n--diagnostic-dir command line option.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`--cpu-prof-dir`" }, @@ -3246,6 +3477,13 @@ "displayName": "`--cpu-prof-name`" }, { + "textRaw": "`--diagnostic-dir=directory`", + "name": "`--diagnostic-dir=directory`", + "desc": "

                                                                                                                                                                                                                                                      Set the directory to which all diagnostic output files will be written to.\nDefaults to current working directory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Affects the default output directory of:

                                                                                                                                                                                                                                                      \n", + "type": "module", + "displayName": "`--diagnostic-dir=directory`" + }, + { "textRaw": "`--disable-proto=mode`", "name": "`--disable-proto=mode`", "desc": "\n

                                                                                                                                                                                                                                                      Disable the Object.prototype.__proto__ property. If mode is delete, the\nproperty will be removed entirely. If mode is throw, accesses to the\nproperty will throw an exception with the code ERR_PROTO_ACCESS.

                                                                                                                                                                                                                                                      ", @@ -3289,7 +3527,7 @@ }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      Enable experimental Source Map V3 support for stack traces.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Currently, overriding Error.prepareStackTrace is ignored when the\n--enable-source-maps flag is set.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Enable experimental Source Map v3 support for stack traces.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Currently, overriding Error.prepareStackTrace is ignored when the\n--enable-source-maps flag is set.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`--enable-source-maps`" }, @@ -3419,11 +3657,23 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Enable experimental WebAssembly module support.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`--experimental-wasm-modules`" }, { + "textRaw": "`--force-context-aware`", + "name": "`--force-context-aware`", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      Disable loading native addons that are not context-aware.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Enable experimental WebAssembly module support.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`--force-context-aware`" + }, + { "textRaw": "`--force-fips`", "name": "`--force-fips`", "meta": { @@ -3490,7 +3740,7 @@ }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      Specify the directory where the heap profiles generated by --heap-prof will\nbe placed.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Specify the directory where the heap profiles generated by --heap-prof will\nbe placed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default value is controlled by the\n--diagnostic-dir command line option.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`--heap-prof-dir`" }, @@ -3531,9 +3781,15 @@ "added": [ "v11.4.0" ], - "changes": [] + "changes": [ + { + "version": "v12.22.0", + "pr-url": "https://github.com/nodejs/node/pull/37603", + "description": "The legacy HTTP parser will emit a deprecation warning." + } + ] }, - "desc": "

                                                                                                                                                                                                                                                      Chooses an HTTP parser library. Available values are:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The default is llhttp, unless otherwise specified when building Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This flag exists to aid in experimentation with the internal implementation of\nthe Node.js http parser.\nThis flag is likely to become a no-op and removed at some point in the future.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Chooses an HTTP parser library. Available values are:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The default is llhttp, unless otherwise specified when building Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The legacy HTTP parser is deprecated and will emit a deprecation warning.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This flag exists to aid in experimentation with the internal implementation of\nthe Node.js http parser.\nThis flag is likely to become a no-op and removed at some point in the future.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`--http-parser=library`" }, @@ -3723,19 +3979,6 @@ "displayName": "`--no-warnings`" }, { - "textRaw": "`--force-context-aware`", - "name": "`--force-context-aware`", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      Disable loading native addons that are not context-aware.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`--force-context-aware`" - }, - { "textRaw": "`--openssl-config=file`", "name": "`--openssl-config=file`", "meta": { @@ -3837,7 +4080,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Write process warnings to the given file instead of printing to stderr. The\nfile will be created if it does not exist, and will be appended to if it does.\nIf an error occurs while attempting to write the warning to the file, the\nwarning will be written to stderr instead.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Write process warnings to the given file instead of printing to stderr. The\nfile will be created if it does not exist, and will be appended to if it does.\nIf an error occurs while attempting to write the warning to the file, the\nwarning will be written to stderr instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The file name may be an absolute path. If it is not, the default directory it\nwill be written to is controlled by the\n--diagnostic-dir command line option.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`--redirect-warnings=file`" }, @@ -3855,8 +4098,8 @@ "displayName": "`--report-compact`" }, { - "textRaw": "`--report-directory=directory`", - "name": "`--report-directory=directory`", + "textRaw": "`--report-dir=directory`, `report-directory=directory`", + "name": "`--report-dir=directory`,_`report-directory=directory`", "meta": { "added": [ "v11.8.0" @@ -3865,7 +4108,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -3876,7 +4119,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Location at which the report will be generated.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "`--report-directory=directory`" + "displayName": "`--report-dir=directory`, `report-directory=directory`" }, { "textRaw": "`--report-filename=filename`", @@ -3889,7 +4132,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -3913,7 +4156,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32496", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -3937,7 +4180,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -3961,7 +4204,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -3985,7 +4228,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -4464,7 +4707,7 @@ "displayName": "Options" }, { - "textRaw": "Environment Variables", + "textRaw": "Environment variables", "name": "environment_variables", "modules": [ { @@ -4548,7 +4791,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      A space-separated list of command line options. options... are interpreted\nbefore command line options, so command line options will override or\ncompound after anything in options.... Node.js will exit with an error if\nan option that is not allowed in the environment is used, such as -p or a\nscript file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In case an option value happens to contain a space (for example a path listed\nin --require), it must be escaped using double quotes. For example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      NODE_OPTIONS='--require \"./my path/file.js\"'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A singleton flag passed as a command line option will override the same flag\npassed into NODE_OPTIONS:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      # The inspector will be available on port 5555\nNODE_OPTIONS='--inspect=localhost:4444' node --inspect=localhost:5555\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A flag that can be passed multiple times will be treated as if its\nNODE_OPTIONS instances were passed first, and then its command line\ninstances afterwards:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      NODE_OPTIONS='--require \"./a.js\"' node --require \"./b.js\"\n# is equivalent to:\nnode --require \"./a.js\" --require \"./b.js\"\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js options that are allowed are:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • --disable-proto
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --enable-fips
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --enable-source-maps
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-import-meta-resolve
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-json-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-loader
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-policy
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-repl-await
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-specifier-resolution
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-vm-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-wasi-unstable-preview1
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-wasm-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --force-context-aware
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --force-fips
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --frozen-intrinsics
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --heapsnapshot-signal
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --http-parser
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --http-server-default-timeout
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --icu-data-dir
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --input-type
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --insecure-http-parser
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --inspect-brk
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --inspect-port, --debug-port
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --inspect-publish-uid
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --inspect
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --max-http-header-size
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --napi-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --no-deprecation
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --no-force-async-hooks-checks
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --no-warnings
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --openssl-config
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --pending-deprecation
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --policy-integrity
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --preserve-symlinks-main
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --preserve-symlinks
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --prof-process
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --redirect-warnings
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-compact
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-directory
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-filename
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-on-fatalerror
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-on-signal
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-signal
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-uncaught-exception
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --require, -r
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --throw-deprecation
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --title
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-cipher-list
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-keylog
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-max-v1.2
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-max-v1.3
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-min-v1.0
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-min-v1.1
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-min-v1.2
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-min-v1.3
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-deprecation
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-event-categories
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-event-file-pattern
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-events-enabled
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-exit
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-sigint
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-sync-io
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-tls
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-uncaught
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-warnings
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --track-heap-objects
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --unhandled-rejections
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --use-bundled-ca
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --use-largepages
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --use-openssl-ca
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --v8-pool-size
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --zero-fill-buffers

                                                                                                                                                                                                                                                        \n\n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      V8 options that are allowed are:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • --abort-on-uncaught-exception
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --disallow-code-generation-from-strings
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --huge-max-old-generation-size
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --interpreted-frames-native-stack
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --jitless
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --max-old-space-size
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --perf-basic-prof-only-functions
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --perf-basic-prof
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --perf-prof-unwinding-info
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --perf-prof
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --stack-trace-limit

                                                                                                                                                                                                                                                        \n\n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      --perf-basic-prof-only-functions, --perf-basic-prof,\n--perf-prof-unwinding-info, and --perf-prof are only available on Linux.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A space-separated list of command line options. options... are interpreted\nbefore command line options, so command line options will override or\ncompound after anything in options.... Node.js will exit with an error if\nan option that is not allowed in the environment is used, such as -p or a\nscript file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In case an option value happens to contain a space (for example a path listed\nin --require), it must be escaped using double quotes. For example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      NODE_OPTIONS='--require \"./my path/file.js\"'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A singleton flag passed as a command line option will override the same flag\npassed into NODE_OPTIONS:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      # The inspector will be available on port 5555\nNODE_OPTIONS='--inspect=localhost:4444' node --inspect=localhost:5555\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A flag that can be passed multiple times will be treated as if its\nNODE_OPTIONS instances were passed first, and then its command line\ninstances afterwards:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      NODE_OPTIONS='--require \"./a.js\"' node --require \"./b.js\"\n# is equivalent to:\nnode --require \"./a.js\" --require \"./b.js\"\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js options that are allowed are:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • --conditions
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --diagnostic-dir
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --disable-proto
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --enable-fips
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --enable-source-maps
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-import-meta-resolve
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-json-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-loader
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-policy
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-repl-await
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-specifier-resolution
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-vm-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-wasi-unstable-preview1
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --experimental-wasm-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --force-context-aware
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --force-fips
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --frozen-intrinsics
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --heapsnapshot-signal
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --http-parser
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --http-server-default-timeout
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --icu-data-dir
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --input-type
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --insecure-http-parser
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --inspect-brk
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --inspect-port, --debug-port
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --inspect-publish-uid
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --inspect
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --max-http-header-size
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --napi-modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --no-deprecation
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --no-force-async-hooks-checks
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --no-warnings
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --openssl-config
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --pending-deprecation
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --policy-integrity
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --preserve-symlinks-main
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --preserve-symlinks
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --prof-process
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --redirect-warnings
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-compact
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-dir, --report-directory
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-filename
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-on-fatalerror
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-on-signal
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-signal
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --report-uncaught-exception
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --require, -r
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --throw-deprecation
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --title
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-cipher-list
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-keylog
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-max-v1.2
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-max-v1.3
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-min-v1.0
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-min-v1.1
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-min-v1.2
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --tls-min-v1.3
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-deprecation
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-event-categories
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-event-file-pattern
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-events-enabled
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-exit
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-sigint
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-sync-io
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-tls
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-uncaught
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --trace-warnings
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --track-heap-objects
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --unhandled-rejections
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --use-bundled-ca
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --use-largepages
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --use-openssl-ca
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --v8-pool-size
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --zero-fill-buffers\n\n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      V8 options that are allowed are:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • --abort-on-uncaught-exception
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --disallow-code-generation-from-strings
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --huge-max-old-generation-size
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --interpreted-frames-native-stack
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --jitless
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --max-old-space-size
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --perf-basic-prof-only-functions
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --perf-basic-prof
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --perf-prof-unwinding-info
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --perf-prof
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • --stack-trace-limit\n\n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      --perf-basic-prof-only-functions, --perf-basic-prof,\n--perf-prof-unwinding-info, and --perf-prof are only available on Linux.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`NODE_OPTIONS=options...`" }, @@ -4650,20 +4893,20 @@ "desc": "

                                                                                                                                                                                                                                                      When set, Node.js will begin outputting V8 JavaScript code coverage and\nSource Map data to the directory provided as an argument (coverage\ninformation is written as JSON to files with a coverage prefix).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      NODE_V8_COVERAGE will automatically propagate to subprocesses, making it\neasier to instrument applications that call the child_process.spawn() family\nof functions. NODE_V8_COVERAGE can be set to an empty string, to prevent\npropagation.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Coverage Output", + "textRaw": "Coverage output", "name": "coverage_output", "desc": "

                                                                                                                                                                                                                                                      Coverage is output as an array of ScriptCoverage objects on the top-level\nkey result:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"result\": [\n    {\n      \"scriptId\": \"67\",\n      \"url\": \"internal/tty.js\",\n      \"functions\": []\n    }\n  ]\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Coverage Output" + "displayName": "Coverage output" }, { - "textRaw": "Source Map Cache", + "textRaw": "Source map cache", "name": "source_map_cache", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      If found, Source Map data is appended to the top-level key source-map-cache\non the JSON coverage object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      source-map-cache is an object with keys representing the files source maps\nwere extracted from, and values which include the raw source-map URL\n(in the key url), the parsed Source Map V3 information (in the key data),\nand the line lengths of the source file (in the key lineLengths).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"result\": [\n    {\n      \"scriptId\": \"68\",\n      \"url\": \"file:///absolute/path/to/source.js\",\n      \"functions\": []\n    }\n  ],\n  \"source-map-cache\": {\n    \"file:///absolute/path/to/source.js\": {\n      \"url\": \"./path-to-map.json\",\n      \"data\": {\n        \"version\": 3,\n        \"sources\": [\n          \"file:///absolute/path/to/original.js\"\n        ],\n        \"names\": [\n          \"Foo\",\n          \"console\",\n          \"info\"\n        ],\n        \"mappings\": \"MAAMA,IACJC,YAAaC\",\n        \"sourceRoot\": \"./\"\n      },\n      \"lineLengths\": [\n        13,\n        62,\n        38,\n        27\n      ]\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      If found, source map data is appended to the top-level key source-map-cache\non the JSON coverage object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      source-map-cache is an object with keys representing the files source maps\nwere extracted from, and values which include the raw source-map URL\n(in the key url), the parsed Source Map v3 information (in the key data),\nand the line lengths of the source file (in the key lineLengths).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"result\": [\n    {\n      \"scriptId\": \"68\",\n      \"url\": \"file:///absolute/path/to/source.js\",\n      \"functions\": []\n    }\n  ],\n  \"source-map-cache\": {\n    \"file:///absolute/path/to/source.js\": {\n      \"url\": \"./path-to-map.json\",\n      \"data\": {\n        \"version\": 3,\n        \"sources\": [\n          \"file:///absolute/path/to/original.js\"\n        ],\n        \"names\": [\n          \"Foo\",\n          \"console\",\n          \"info\"\n        ],\n        \"mappings\": \"MAAMA,IACJC,YAAaC\",\n        \"sourceRoot\": \"./\"\n      },\n      \"lineLengths\": [\n        13,\n        62,\n        38,\n        27\n      ]\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Source Map Cache" + "displayName": "Source map cache" } ], "type": "module", @@ -4711,13 +4954,13 @@ { "textRaw": "`UV_THREADPOOL_SIZE=size`", "name": "`uv_threadpool_size=size`", - "desc": "

                                                                                                                                                                                                                                                      Set the number of threads used in libuv's threadpool to size threads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Asynchronous system APIs are used by Node.js whenever possible, but where they\ndo not exist, libuv's threadpool is used to create asynchronous node APIs based\non synchronous system APIs. Node.js APIs that use the threadpool are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • all fs APIs, other than the file watcher APIs and those that are explicitly\nsynchronous
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • asynchronous crypto APIs such as crypto.pbkdf2(), crypto.scrypt(),\ncrypto.randomBytes(), crypto.randomFill(), crypto.generateKeyPair()
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.lookup()
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • all zlib APIs, other than those that are explicitly synchronous
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because libuv's threadpool has a fixed size, it means that if for whatever\nreason any of these APIs takes a long time, other (seemingly unrelated) APIs\nthat run in libuv's threadpool will experience degraded performance. In order to\nmitigate this issue, one potential solution is to increase the size of libuv's\nthreadpool by setting the 'UV_THREADPOOL_SIZE' environment variable to a value\ngreater than 4 (its current default value). For more information, see the\nlibuv threadpool documentation.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Set the number of threads used in libuv's threadpool to size threads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Asynchronous system APIs are used by Node.js whenever possible, but where they\ndo not exist, libuv's threadpool is used to create asynchronous node APIs based\non synchronous system APIs. Node.js APIs that use the threadpool are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • all fs APIs, other than the file watcher APIs and those that are explicitly\nsynchronous
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • asynchronous crypto APIs such as crypto.pbkdf2(), crypto.scrypt(),\ncrypto.randomBytes(), crypto.randomFill(), crypto.generateKeyPair()
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.lookup()
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • all zlib APIs, other than those that are explicitly synchronous
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because libuv's threadpool has a fixed size, it means that if for whatever\nreason any of these APIs takes a long time, other (seemingly unrelated) APIs\nthat run in libuv's threadpool will experience degraded performance. In order to\nmitigate this issue, one potential solution is to increase the size of libuv's\nthreadpool by setting the 'UV_THREADPOOL_SIZE' environment variable to a value\ngreater than 4 (its current default value). For more information, see the\nlibuv threadpool documentation.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`UV_THREADPOOL_SIZE=size`" } ], "type": "misc", - "displayName": "Environment Variables" + "displayName": "Environment variables" }, { "textRaw": "Useful V8 options", @@ -4725,11 +4968,11 @@ "desc": "

                                                                                                                                                                                                                                                      V8 has its own set of CLI options. Any V8 CLI option that is provided to node\nwill be passed on to V8 to handle. V8's options have no stability guarantee.\nThe V8 team themselves don't consider them to be part of their formal API,\nand reserve the right to change them at any time. Likewise, they are not\ncovered by the Node.js stability guarantees. Many of the V8\noptions are of interest only to V8 developers. Despite this, there is a small\nset of V8 options that are widely applicable to Node.js, and they are\ndocumented here:

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "`--max-old-space-size=SIZE` (in Mbytes)", - "name": "`--max-old-space-size=size`_(in_mbytes)", + "textRaw": "`--max-old-space-size=SIZE` (in megabytes)", + "name": "`--max-old-space-size=size`_(in_megabytes)", "desc": "

                                                                                                                                                                                                                                                      Sets the max memory size of V8's old memory section. As memory\nconsumption approaches the limit, V8 will spend more time on\ngarbage collection in an effort to free unused memory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On a machine with 2GB of memory, consider setting this to\n1536 (1.5GB) to leave some memory for other uses and avoid swapping.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node --max-old-space-size=1536 index.js\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "`--max-old-space-size=SIZE` (in Mbytes)" + "displayName": "`--max-old-space-size=SIZE` (in megabytes)" } ], "type": "misc", @@ -4797,19 +5040,19 @@ "displayName": "Command reference" }, { - "textRaw": "Advanced Usage", + "textRaw": "Advanced usage", "name": "advanced_usage", "modules": [ { - "textRaw": "V8 Inspector Integration for Node.js", + "textRaw": "V8 inspector integration for Node.js", "name": "v8_inspector_integration_for_node.js", - "desc": "

                                                                                                                                                                                                                                                      V8 Inspector integration allows attaching Chrome DevTools to Node.js\ninstances for debugging and profiling. It uses the\nChrome DevTools Protocol.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      V8 Inspector can be enabled by passing the --inspect flag when starting a\nNode.js application. It is also possible to supply a custom port with that flag,\ne.g. --inspect=9222 will accept DevTools connections on port 9222.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To break on the first line of the application code, pass the --inspect-brk\nflag instead of --inspect.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node --inspect index.js\nDebugger listening on 127.0.0.1:9229.\nTo start debugging, open the following URL in Chrome:\n    chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      (In the example above, the UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29\nat the end of the URL is generated on the fly, it varies in different\ndebugging sessions.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the Chrome browser is older than 66.0.3345.0,\nuse inspector.html instead of js_app.html in the above URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Chrome DevTools doesn't support debugging Worker Threads yet.\nndb can be used to debug them.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      V8 Inspector integration allows attaching Chrome DevTools to Node.js\ninstances for debugging and profiling. It uses the\nChrome DevTools Protocol.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      V8 Inspector can be enabled by passing the --inspect flag when starting a\nNode.js application. It is also possible to supply a custom port with that flag,\ne.g. --inspect=9222 will accept DevTools connections on port 9222.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To break on the first line of the application code, pass the --inspect-brk\nflag instead of --inspect.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node --inspect index.js\nDebugger listening on ws://127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29\nFor help, see: https://nodejs.org/en/docs/inspector\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      (In the example above, the UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29\nat the end of the URL is generated on the fly, it varies in different\ndebugging sessions.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the Chrome browser is older than 66.0.3345.0,\nuse inspector.html instead of js_app.html in the above URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Chrome DevTools doesn't support debugging worker threads yet.\nndb can be used to debug them.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "V8 Inspector Integration for Node.js" + "displayName": "V8 inspector integration for Node.js" } ], "type": "misc", - "displayName": "Advanced Usage" + "displayName": "Advanced usage" } ] }, @@ -4828,7 +5071,7 @@ "displayName": "Revoking deprecations" }, { - "textRaw": "List of Deprecated APIs", + "textRaw": "List of deprecated APIs", "name": "list_of_deprecated_apis", "desc": "

                                                                                                                                                                                                                                                      ", "modules": [ @@ -4957,7 +5200,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Runtime (supports --pending-deprecation)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer() function and new Buffer() constructor are deprecated due to\nAPI usability issues that can lead to accidental security issues.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As an alternative, use one of the following methods of constructing Buffer\nobjects:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Without --pending-deprecation, runtime warnings occur only for code not in\nnode_modules. This means there will not be deprecation warnings for\nBuffer() usage in dependencies. With --pending-deprecation, a runtime\nwarning results no matter where the Buffer() usage occurs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Runtime (supports --pending-deprecation)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer() function and new Buffer() constructor are deprecated due to\nAPI usability issues that can lead to accidental security issues.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As an alternative, use one of the following methods of constructing Buffer\nobjects:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Without --pending-deprecation, runtime warnings occur only for code not in\nnode_modules. This means there will not be deprecation warnings for\nBuffer() usage in dependencies. With --pending-deprecation, a runtime\nwarning results no matter where the Buffer() usage occurs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0005: `Buffer()` constructor" }, @@ -5615,7 +5858,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The SlowBuffer class is deprecated. Please use\nBuffer.allocUnsafeSlow(size) instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The SlowBuffer class is deprecated. Please use\nBuffer.allocUnsafeSlow(size) instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0030: `SlowBuffer`" }, @@ -5908,7 +6151,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.CryptoStream class was removed. Please use\ntls.TLSSocket instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.CryptoStream class was removed. Please use\ntls.TLSSocket instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0042: `tls.CryptoStream`" }, @@ -5947,7 +6190,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.SecurePair class is deprecated. Please use\ntls.TLSSocket instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.SecurePair class is deprecated. Please use\ntls.TLSSocket instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0043: `tls.SecurePair`" }, @@ -6028,7 +6271,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The util.isBuffer() API is deprecated. Please use\nBuffer.isBuffer() instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The util.isBuffer() API is deprecated. Please use\nBuffer.isBuffer() instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0046: `util.isBuffer()`" }, @@ -6733,7 +6976,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Runtime

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.parseCertString() is a trivial parsing helper that was made public by\nmistake. This function can usually be replaced with:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const querystring = require('querystring');\nquerystring.parse(str, '\\n', '=');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is not completely equivalent to querystring.parse(). One\ndifference is that querystring.parse() does url decoding:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > querystring.parse('%E5%A5%BD=1', '\\n', '=');\n{ '好': '1' }\n> tls.parseCertString('%E5%A5%BD=1');\n{ '%E5%A5%BD': '1' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Runtime

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.parseCertString() is a trivial parsing helper that was made public by\nmistake. This function can usually be replaced with:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const querystring = require('querystring');\nquerystring.parse(str, '\\n', '=');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is not completely equivalent to querystring.parse(). One\ndifference is that querystring.parse() does url decoding:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > querystring.parse('%E5%A5%BD=1', '\\n', '=');\n{ '好': '1' }\n> tls.parseCertString('%E5%A5%BD=1');\n{ '%E5%A5%BD': '1' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0076: `tls.parseCertString()`" }, @@ -6770,7 +7013,7 @@ "displayName": "DEP0078: `REPLServer.turnOffEditorMode()`" }, { - "textRaw": "DEP0079: Custom inspection function on Objects via `.inspect()`", + "textRaw": "DEP0079: Custom inspection function on objects via `.inspect()`", "name": "dep0079:_custom_inspection_function_on_objects_via_`.inspect()`", "meta": { "changes": [ @@ -6793,7 +7036,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using a property named inspect on an object to specify a custom inspection\nfunction for util.inspect() is deprecated. Use util.inspect.custom\ninstead. For backward compatibility with Node.js prior to version 6.4.0, both\nmay be specified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0079: Custom inspection function on Objects via `.inspect()`" + "displayName": "DEP0079: Custom inspection function on objects via `.inspect()`" }, { "textRaw": "DEP0080: `path._makeLong()`", @@ -6886,7 +7129,7 @@ "displayName": "DEP0084: requiring bundled internal dependencies" }, { - "textRaw": "DEP0085: AsyncHooks Sensitive API", + "textRaw": "DEP0085: AsyncHooks sensitive API", "name": "dep0085:_asynchooks_sensitive_api", "meta": { "changes": [ @@ -6905,9 +7148,9 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The AsyncHooks Sensitive API was never documented and had various minor issues.\nUse the AsyncResource API instead. See\nhttps://github.com/nodejs/node/issues/15572.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The AsyncHooks sensitive API was never documented and had various minor issues.\nUse the AsyncResource API instead. See\nhttps://github.com/nodejs/node/issues/15572.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0085: AsyncHooks Sensitive API" + "displayName": "DEP0085: AsyncHooks sensitive API" }, { "textRaw": "DEP0086: Remove `runInAsyncIdScope`", @@ -6953,7 +7196,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Deprecation revoked

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Importing assert directly was not recommended as the exposed functions use\nloose equality checks. The deprecation was revoked because use of the assert\nmodule is not discouraged, and the deprecation caused end user confusion.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Deprecation revoked

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Importing assert directly was not recommended as the exposed functions use\nloose equality checks. The deprecation was revoked because use of the assert\nmodule is not discouraged, and the deprecation caused developer confusion.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0089: `require('assert')`" }, @@ -7091,7 +7334,7 @@ "displayName": "DEP0097: `MakeCallback` with `domain` property" }, { - "textRaw": "DEP0098: AsyncHooks Embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs", + "textRaw": "DEP0098: AsyncHooks embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs", "name": "dep0098:_asynchooks_embedder_`asyncresource.emitbefore`_and_`asyncresource.emitafter`_apis", "meta": { "changes": [ @@ -7113,10 +7356,10 @@ }, "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The embedded API provided by AsyncHooks exposes .emitBefore() and\n.emitAfter() methods which are very easy to use incorrectly which can lead\nto unrecoverable errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use asyncResource.runInAsyncScope() API instead which provides a much\nsafer, and more convenient, alternative. See\nhttps://github.com/nodejs/node/pull/18513.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0098: AsyncHooks Embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs" + "displayName": "DEP0098: AsyncHooks embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs" }, { - "textRaw": "DEP0099: async context-unaware `node::MakeCallback` C++ APIs", + "textRaw": "DEP0099: Async context-unaware `node::MakeCallback` C++ APIs", "name": "dep0099:_async_context-unaware_`node::makecallback`_c++_apis", "meta": { "changes": [ @@ -7129,7 +7372,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Type: Compile-time

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Certain versions of node::MakeCallback APIs available to native modules are\ndeprecated. Please use the versions of the API that accept an async_context\nparameter.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0099: async context-unaware `node::MakeCallback` C++ APIs" + "displayName": "DEP0099: Async context-unaware `node::MakeCallback` C++ APIs" }, { "textRaw": "DEP0100: `process.assert()`", @@ -7504,7 +7747,7 @@ "displayName": "DEP0119: `process.binding('uv').errname()` private API" }, { - "textRaw": "DEP0120: Windows Performance Counter Support", + "textRaw": "DEP0120: Windows Performance Counter support", "name": "dep0120:_windows_performance_counter_support", "meta": { "changes": [ @@ -7522,7 +7765,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Windows Performance Counter support has been removed from Node.js. The\nundocumented COUNTER_NET_SERVER_CONNECTION(),\nCOUNTER_NET_SERVER_CONNECTION_CLOSE(), COUNTER_HTTP_SERVER_REQUEST(),\nCOUNTER_HTTP_SERVER_RESPONSE(), COUNTER_HTTP_CLIENT_REQUEST(), and\nCOUNTER_HTTP_CLIENT_RESPONSE() functions have been deprecated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0120: Windows Performance Counter Support" + "displayName": "DEP0120: Windows Performance Counter support" }, { "textRaw": "DEP0121: `net._setSimultaneousAccepts()`", @@ -7680,7 +7923,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Module.createRequireFromPath() is deprecated. Please use module.createRequire() instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Module.createRequireFromPath() is deprecated. Please use module.createRequire() instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0130: `Module.createRequireFromPath()`" }, @@ -7690,13 +7933,18 @@ "meta": { "changes": [ { + "version": "v12.22.0", + "pr-url": "https://github.com/nodejs/node/pull/37603", + "description": "Runtime deprecation." + }, + { "version": "v12.3.0", "pr-url": "https://github.com/nodejs/node/pull/27498", "description": "Documentation-only." } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The legacy HTTP parser, used by default in versions of Node.js prior to 12.0.0,\nis deprecated. This deprecation applies to users of the\n--http-parser=legacy command-line flag.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Runtime

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The legacy HTTP parser, used by default in versions of Node.js prior to 12.0.0,\nis deprecated. This deprecation applies to users of the\n--http-parser=legacy command-line flag.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0131: Legacy HTTP parser" }, @@ -7760,417 +8008,51 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      response.finished indicates whether response.end() has been\ncalled, not whether 'finish' has been emitted and the underlying data\nis flushed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use response.writableFinished or response.writableEnded\naccordingly instead to avoid the ambigiuty.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To maintain existing behaviour response.finished should be replaced with\nresponse.writableEnded.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      response.finished indicates whether response.end() has been\ncalled, not whether 'finish' has been emitted and the underlying data\nis flushed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use response.writableFinished or response.writableEnded\naccordingly instead to avoid the ambigiuty.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To maintain existing behaviour response.finished should be replaced with\nresponse.writableEnded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0136: `http` `finished`" - } - ], - "type": "misc", - "displayName": "List of Deprecated APIs" - } - ] - }, - { - "textRaw": "ECMAScript Modules", - "name": "ECMAScript Modules", - "introduced_in": "v8.5.0", - "type": "misc", - "stability": 1, - "stabilityText": "Experimental", - "miscs": [ - { - "textRaw": "Introduction", - "name": "esm", - "desc": "

                                                                                                                                                                                                                                                      ECMAScript modules are the official standard format to package JavaScript\ncode for reuse. Modules are defined using a variety of import and\nexport statements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example of an ES module exports a function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addTwo.mjs\nfunction addTwo(num) {\n  return num + 2;\n}\n\nexport { addTwo };\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example of an ES module imports the function from addTwo.mjs:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // app.mjs\nimport { addTwo } from './addTwo.mjs';\n\n// Prints: 6\nconsole.log(addTwo(4));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js fully supports ECMAScript modules as they are currently specified and\nprovides limited interoperability between them and the existing module format,\nCommonJS.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js contains support for ES Modules based upon the\nNode.js EP for ES Modules and the ECMAScript-modules implementation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Expect major changes in the implementation including interoperability support,\nspecifier resolution, and default behavior.

                                                                                                                                                                                                                                                      ", - "type": "misc", - "displayName": "esm" - }, - { - "textRaw": "Enabling", - "name": "Enabling", - "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Experimental support for ECMAScript modules is enabled by default.\nNode.js will treat the following as ES modules when passed to node as the\ninitial input, or when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Files ending in .mjs.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Files ending in .js when the nearest parent package.json file contains a\ntop-level field \"type\" with a value of \"module\".

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Strings passed in as an argument to --eval or --print, or piped to\nnode via STDIN, with the flag --input-type=module.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will treat as CommonJS all other forms of input, such as .js files\nwhere the nearest parent package.json file contains no top-level \"type\"\nfield, or string input without the flag --input-type. This behavior is to\npreserve backward compatibility. However, now that Node.js supports both\nCommonJS and ES modules, it is best to be explicit whenever possible. Node.js\nwill treat the following as CommonJS when passed to node as the initial input,\nor when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Files ending in .cjs.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Files ending in .js when the nearest parent package.json file contains a\ntop-level field \"type\" with a value of \"commonjs\".

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Strings passed in as an argument to --eval or --print, or piped to\nnode via STDIN, with the flag --input-type=commonjs.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", - "miscs": [ - { - "textRaw": "`package.json` `\"type\"` field", - "name": "`package.json`_`\"type\"`_field", - "desc": "

                                                                                                                                                                                                                                                      Files ending with .js will be loaded as ES modules when the nearest parent\npackage.json file contains a top-level field \"type\" with a value of\n\"module\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The nearest parent package.json is defined as the first package.json found\nwhen searching in the current folder, that folder’s parent, and so on up\nuntil the root of the volume is reached.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      // package.json\n{\n  \"type\": \"module\"\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      # In same folder as above package.json\nnode my-app.js # Runs as ES module\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the nearest parent package.json lacks a \"type\" field, or contains\n\"type\": \"commonjs\", .js files are treated as CommonJS. If the volume root is\nreached and no package.json is found, Node.js defers to the default, a\npackage.json with no \"type\" field.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      import statements of .js files are treated as ES modules if the nearest\nparent package.json contains \"type\": \"module\".

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // my-app.js, part of the same example as above\nimport './startup.js'; // Loaded as ES module because of package.json\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Package authors should include the \"type\" field, even in packages where all\nsources are CommonJS. Being explicit about the type of the package will\nfuture-proof the package in case the default type of Node.js ever changes, and\nit will also make things easier for build tools and loaders to determine how the\nfiles in the package should be interpreted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Regardless of the value of the \"type\" field, .mjs files are always treated\nas ES modules and .cjs files are always treated as CommonJS.

                                                                                                                                                                                                                                                      ", - "type": "misc", - "displayName": "`package.json` `\"type\"` field" - }, - { - "textRaw": "Package Scope and File Extensions", - "name": "package_scope_and_file_extensions", - "desc": "

                                                                                                                                                                                                                                                      A folder containing a package.json file, and all subfolders below that folder\ndown until the next folder containing another package.json, is considered a\npackage scope. The \"type\" field defines how .js files should be treated\nwithin a particular package.json file’s package scope. Every package in a\nproject’s node_modules folder contains its own package.json file, so each\nproject’s dependencies have their own package scopes. A package.json lacking a\n\"type\" field is treated as if it contained \"type\": \"commonjs\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The package scope applies not only to initial entry points (node my-app.js)\nbut also to files referenced by import statements and import() expressions.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // my-app.js, in an ES module package scope because there is a package.json\n// file in the same folder with \"type\": \"module\".\n\nimport './startup/init.js';\n// Loaded as ES module since ./startup contains no package.json file,\n// and therefore inherits the ES module package scope from one level up.\n\nimport 'commonjs-package';\n// Loaded as CommonJS since ./node_modules/commonjs-package/package.json\n// lacks a \"type\" field or contains \"type\": \"commonjs\".\n\nimport './node_modules/commonjs-package/index.js';\n// Loaded as CommonJS since ./node_modules/commonjs-package/package.json\n// lacks a \"type\" field or contains \"type\": \"commonjs\".\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Files ending with .mjs are always loaded as ES modules regardless of package\nscope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Files ending with .cjs are always loaded as CommonJS regardless of package\nscope.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import './legacy-file.cjs';\n// Loaded as CommonJS since .cjs is always loaded as CommonJS.\n\nimport 'commonjs-package/src/index.mjs';\n// Loaded as ES module since .mjs is always loaded as ES module.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The .mjs and .cjs extensions may be used to mix types within the same\npackage scope:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Within a \"type\": \"module\" package scope, Node.js can be instructed to\ninterpret a particular file as CommonJS by naming it with a .cjs extension\n(since both .js and .mjs files are treated as ES modules within a\n\"module\" package scope).

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Within a \"type\": \"commonjs\" package scope, Node.js can be instructed to\ninterpret a particular file as an ES module by naming it with an .mjs\nextension (since both .js and .cjs files are treated as CommonJS within a\n\"commonjs\" package scope).

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", - "type": "misc", - "displayName": "Package Scope and File Extensions" - }, - { - "textRaw": "`--input-type` flag", - "name": "`--input-type`_flag", - "desc": "

                                                                                                                                                                                                                                                      Strings passed in as an argument to --eval or --print (or -e or -p), or\npiped to node via STDIN, will be treated as ES modules when the\n--input-type=module flag is set.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --input-type=module --eval \"import { sep } from 'path'; console.log(sep);\"\n\necho \"import { sep } from 'path'; console.log(sep);\" | node --input-type=module\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For completeness there is also --input-type=commonjs, for explicitly running\nstring input as CommonJS. This is the default behavior if --input-type is\nunspecified.

                                                                                                                                                                                                                                                      ", - "type": "misc", - "displayName": "`--input-type` flag" - } - ] - }, - { - "textRaw": "Packages", - "name": "packages", - "modules": [ - { - "textRaw": "Package Entry Points", - "name": "package_entry_points", - "desc": "

                                                                                                                                                                                                                                                      In a package’s package.json file, two fields can define entry points for a\npackage: \"main\" and \"exports\". The \"main\" field is supported in all\nversions of Node.js, but its capabilities are limited: it only defines the main\nentry point of the package.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"exports\" field provides an alternative to \"main\" where the package\nmain entry point can be defined while also encapsulating the package,\npreventing any other entry points besides those defined in \"exports\".\nThis encapsulation allows module authors to define a public interface for\ntheir package.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both \"exports\" and \"main\" are defined, the \"exports\" field takes\nprecedence over \"main\". \"exports\" are not specific to ES modules or\nCommonJS; \"main\" will be overridden by \"exports\" if it exists. As such\n\"main\" cannot be used as a fallback for CommonJS but it can be used as a\nfallback for legacy versions of Node.js that do not support the \"exports\"\nfield.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Conditional Exports can be used within \"exports\" to define different\npackage entry points per environment, including whether the package is\nreferenced via require or via import. For more information about supporting\nboth CommonJS and ES Modules in a single package please consult\nthe dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: Introducing the \"exports\" field prevents consumers of a package\nfrom using any entry points that are not defined, including the package.json\n(e.g. require('your-package/package.json'). This will likely be a breaking\nchange.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To make the introduction of \"exports\" non-breaking, ensure that every\npreviously supported entry point is exported. It is best to explicitly specify\nentry points so that the package’s public API is well-defined. For example,\na project that previous exported main, lib,\nfeature, and the package.json could use the following package.exports:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"name\": \"my-mod\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib\": \"./lib/index.js\",\n    \"./lib/index\": \"./lib/index.js\",\n    \"./lib/index.js\": \"./lib/index.js\",\n    \"./feature\": \"./feature/index.js\",\n    \"./feature/index.js\": \"./feature/index.js\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively a project could choose to export entire folders:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"name\": \"my-mod\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib\": \"./lib/index.js\",\n    \"./lib/\": \"./lib/\",\n    \"./feature\": \"./feature/index.js\",\n    \"./feature/\": \"./feature/\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As a last resort, package encapsulation can be disabled entirely by creating an\nexport for the root of the package \"./\": \"./\". This will expose every file in\nthe package at the cost of disabling the encapsulation and potential tooling\nbenefits this provides. As the ES Module loader in Node.js enforces the use of\nthe full specifier path, exporting the root rather than being explicit\nabout entry is less expressive than either of the prior examples. Not only\nwill encapsulation be lost but module consumers will be unable to\nimport feature from 'my-mod/feature' as they will need to provide the full\npath import feature from 'my-mod/feature/index.js.

                                                                                                                                                                                                                                                      ", - "modules": [ - { - "textRaw": "Main Entry Point Export", - "name": "main_entry_point_export", - "desc": "

                                                                                                                                                                                                                                                      To set the main entry point for a package, it is advisable to define both\n\"exports\" and \"main\" in the package’s package.json file:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\",\n  \"exports\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The benefit of doing this is that when using the \"exports\" field all\nsubpaths of the package will no longer be available to importers under\nrequire('pkg/subpath.js'), and instead they will get a new error,\nERR_PACKAGE_PATH_NOT_EXPORTED.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This encapsulation of exports provides more reliable guarantees\nabout package interfaces for tools and when handling semver upgrades for a\npackage. It is not a strong encapsulation since a direct require of any\nabsolute subpath of the package such as\nrequire('/path/to/node_modules/pkg/subpath.js') will still load subpath.js.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Main Entry Point Export" - }, - { - "textRaw": "Subpath Exports", - "name": "subpath_exports", - "desc": "

                                                                                                                                                                                                                                                      When using the \"exports\" field, custom subpaths can be defined along\nwith the main entry point by treating the main entry point as the\n\".\" subpath:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \".\": \"./main.js\",\n    \"./submodule\": \"./src/submodule.js\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Now only the defined subpath in \"exports\" can be imported by a\nconsumer:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import submodule from 'es-module-package/submodule';\n// Loads ./node_modules/es-module-package/src/submodule.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While other subpaths will error:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import submodule from 'es-module-package/private-module.js';\n// Throws ERR_PACKAGE_PATH_NOT_EXPORTED\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Entire folders can also be mapped with package exports:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      // ./node_modules/es-module-package/package.json\n{\n  \"exports\": {\n    \"./features/\": \"./src/features/\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With the above, all modules within the ./src/features/ folder\nare exposed deeply to import and require:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import feature from 'es-module-package/features/x.js';\n// Loads ./node_modules/es-module-package/src/features/x.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using folder mappings, ensure that you do want to expose every\nmodule inside the subfolder. Any modules which are not public\nshould be moved to another folder to retain the encapsulation\nbenefits of exports.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Subpath Exports" - }, - { - "textRaw": "Package Exports Fallbacks", - "name": "package_exports_fallbacks", - "desc": "

                                                                                                                                                                                                                                                      For possible new specifier support in future, array fallbacks are\nsupported for all invalid specifiers:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  \"exports\": {\n    \"./submodule\": [\"not:valid\", \"./submodule.js\"]\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Since \"not:valid\" is not a valid specifier, \"./submodule.js\" is used\ninstead as the fallback, as if it were the only target.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Package Exports Fallbacks" - }, - { - "textRaw": "Exports Sugar", - "name": "exports_sugar", - "desc": "

                                                                                                                                                                                                                                                      If the \".\" export is the only export, the \"exports\" field provides sugar\nfor this case being the direct \"exports\" field value.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the \".\" export has a fallback array or string value, then the \"exports\"\nfield can be set to this value directly.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  \"exports\": {\n    \".\": \"./main.js\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      can be written:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  \"exports\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Exports Sugar" - }, - { - "textRaw": "Conditional Exports", - "name": "conditional_exports", - "desc": "

                                                                                                                                                                                                                                                      Conditional exports provide a way to map to different paths depending on\ncertain conditions. They are supported for both CommonJS and ES module imports.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, a package that wants to provide different ES module exports for\nrequire() and import can be written:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      // package.json\n{\n  \"main\": \"./main-require.cjs\",\n  \"exports\": {\n    \"import\": \"./main-module.js\",\n    \"require\": \"./main-require.cjs\"\n  },\n  \"type\": \"module\"\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js supports the following conditions:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \"import\" - matched when the package is loaded via import or\nimport(). Can reference either an ES module or CommonJS file, as both\nimport and import() can load either ES module or CommonJS sources.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"require\" - matched when the package is loaded via require().\nAs require() only supports CommonJS, the referenced file must be CommonJS.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"node\" - matched for any Node.js environment. Can be a CommonJS or ES\nmodule file. This condition should always come after \"import\" or\n\"require\".
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"default\" - the generic fallback that will always match. Can be a CommonJS\nor ES module file. This condition should always come last.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Condition matching is applied in object order from first to last within the\n\"exports\" object. The general rule is that conditions should be used\nfrom most specific to least specific in object order.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Other conditions such as \"browser\", \"electron\", \"deno\", \"react-native\",\netc. are ignored by Node.js but may be used by other runtimes or tools.\nFurther restrictions, definitions or guidance on condition names may be\nprovided in the future.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using the \"import\" and \"require\" conditions can lead to some hazards,\nwhich are explained further in\nthe dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Conditional exports can also be extended to exports subpaths, for example:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \".\": \"./main.js\",\n    \"./feature\": {\n      \"browser\": \"./feature-browser.js\",\n      \"default\": \"./feature.js\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Defines a package where require('pkg/feature') and import 'pkg/feature'\ncould provide different implementations between the browser and Node.js,\ngiven third-party tool support for a \"browser\" condition.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Conditional Exports" - }, - { - "textRaw": "Nested conditions", - "name": "nested_conditions", - "desc": "

                                                                                                                                                                                                                                                      In addition to direct mappings, Node.js also supports nested condition objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, to define a package that only has dual mode entry points for\nuse in Node.js but not the browser:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \"browser\": \"./feature-browser.mjs\",\n    \"node\": {\n      \"import\": \"./feature-node.mjs\",\n      \"require\": \"./feature-node.cjs\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Conditions continue to be matched in order as with flat conditions. If\na nested conditional does not have any mapping it will continue checking\nthe remaining conditions of the parent condition. In this way nested\nconditions behave analogously to nested JavaScript if statements.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Nested conditions" - }, - { - "textRaw": "Self-referencing a package using its name", - "name": "self-referencing_a_package_using_its_name", - "desc": "

                                                                                                                                                                                                                                                      Within a package, the values defined in the package’s\npackage.json \"exports\" field can be referenced via the package’s name.\nFor example, assuming the package.json is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // package.json\n{\n  \"name\": \"a-package\",\n  \"exports\": {\n    \".\": \"./main.mjs\",\n    \"./foo\": \"./foo.js\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Then any module in that package can reference an export in the package itself:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./a-module.mjs\nimport { something } from 'a-package'; // Imports \"something\" from ./main.mjs.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Self-referencing is available only if package.json has exports, and will\nallow importing only what that exports (in the package.json) allows.\nSo the code below, given the package above, will generate a runtime error:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./another-module.mjs\n\n// Imports \"another\" from ./m.mjs. Fails because\n// the \"package.json\" \"exports\" field\n// does not provide an export named \"./m.mjs\".\nimport { another } from 'a-package/m.mjs';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Self-referencing is also available when using require, both in an ES module,\nand in a CommonJS one. For example, this code will also work:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./a-module.js\nconst { something } = require('a-package/foo'); // Loads from ./foo.js.\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Self-referencing a package using its name" - } - ], - "type": "module", - "displayName": "Package Entry Points" }, { - "textRaw": "Dual CommonJS/ES Module Packages", - "name": "dual_commonjs/es_module_packages", - "desc": "

                                                                                                                                                                                                                                                      Prior to the introduction of support for ES modules in Node.js, it was a common\npattern for package authors to include both CommonJS and ES module JavaScript\nsources in their package, with package.json \"main\" specifying the CommonJS\nentry point and package.json \"module\" specifying the ES module entry point.\nThis enabled Node.js to run the CommonJS entry point while build tools such as\nbundlers used the ES module entry point, since Node.js ignored (and still\nignores) the top-level \"module\" field.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js can now run ES module entry points, and a package can contain both\nCommonJS and ES module entry points (either via separate specifiers such as\n'pkg' and 'pkg/es-module', or both at the same specifier via Conditional\nExports). Unlike in the scenario where \"module\" is only used by bundlers,\nor ES module files are transpiled into CommonJS on the fly before evaluation by\nNode.js, the files referenced by the ES module entry point are evaluated as ES\nmodules.

                                                                                                                                                                                                                                                      ", - "modules": [ - { - "textRaw": "Dual Package Hazard", - "name": "dual_package_hazard", - "desc": "

                                                                                                                                                                                                                                                      When an application is using a package that provides both CommonJS and ES module\nsources, there is a risk of certain bugs if both versions of the package get\nloaded. This potential comes from the fact that the pkgInstance created by\nconst pkgInstance = require('pkg') is not the same as the pkgInstance\ncreated by import pkgInstance from 'pkg' (or an alternative main path like\n'pkg/module'). This is the “dual package hazard,” where two versions of the\nsame package can be loaded within the same runtime environment. While it is\nunlikely that an application or package would intentionally load both versions\ndirectly, it is common for an application to load one version while a dependency\nof the application loads the other version. This hazard can happen because\nNode.js supports intermixing CommonJS and ES modules, and can lead to unexpected\nbehavior.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the package main export is a constructor, an instanceof comparison of\ninstances created by the two versions returns false, and if the export is an\nobject, properties added to one (like pkgInstance.foo = 3) are not present on\nthe other. This differs from how import and require statements work in\nall-CommonJS or all-ES module environments, respectively, and therefore is\nsurprising to users. It also differs from the behavior users are familiar with\nwhen using transpilation via tools like Babel or esm.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Dual Package Hazard" - }, - { - "textRaw": "Writing Dual Packages While Avoiding or Minimizing Hazards", - "name": "writing_dual_packages_while_avoiding_or_minimizing_hazards", - "desc": "

                                                                                                                                                                                                                                                      First, the hazard described in the previous section occurs when a package\ncontains both CommonJS and ES module sources and both sources are provided for\nuse in Node.js, either via separate main entry points or exported paths. A\npackage could instead be written where any version of Node.js receives only\nCommonJS sources, and any separate ES module sources the package may contain\ncould be intended only for other environments such as browsers. Such a package\nwould be usable by any version of Node.js, since import can refer to CommonJS\nfiles; but it would not provide any of the advantages of using ES module syntax.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A package could also switch from CommonJS to ES module syntax in a breaking\nchange version bump. This has the disadvantage that the newest version\nof the package would only be usable in ES module-supporting versions of Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Every pattern has tradeoffs, but there are two broad approaches that satisfy the\nfollowing conditions:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. The package is usable via both require and import.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. The package is usable in both current Node.js and older versions of Node.js\nthat lack support for ES modules.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. The package main entry point, e.g. 'pkg' can be used by both require to\nresolve to a CommonJS file and by import to resolve to an ES module file.\n(And likewise for exported paths, e.g. 'pkg/feature'.)
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. The package provides named exports, e.g. import { name } from 'pkg' rather\nthan import pkg from 'pkg'; pkg.name.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. The package is potentially usable in other ES module environments such as\nbrowsers.
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. The hazards described in the previous section are avoided or minimized.
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      ", - "modules": [ - { - "textRaw": "Approach #1: Use an ES Module Wrapper", - "name": "approach_#1:_use_an_es_module_wrapper", - "desc": "

                                                                                                                                                                                                                                                      Write the package in CommonJS or transpile ES module sources into CommonJS, and\ncreate an ES module wrapper file that defines the named exports. Using\nConditional Exports, the ES module wrapper is used for import and the\nCommonJS entry point for require.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \"import\": \"./wrapper.mjs\",\n    \"require\": \"./index.cjs\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/index.cjs\nexports.name = 'value';\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/wrapper.mjs\nimport cjsModule from './index.cjs';\nexport const name = cjsModule.name;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In this example, the name from import { name } from 'pkg' is the same\nsingleton as the name from const { name } = require('pkg'). Therefore ===\nreturns true when comparing the two names and the divergent specifier hazard\nis avoided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the module is not simply a list of named exports, but rather contains a\nunique function or object export like module.exports = function () { ... },\nor if support in the wrapper for the import pkg from 'pkg' pattern is desired,\nthen the wrapper would instead be written to export the default optionally\nalong with any named exports as well:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import cjsModule from './index.cjs';\nexport const name = cjsModule.name;\nexport default cjsModule;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • The package is currently written in CommonJS and the author would prefer not\nto refactor it into ES module syntax, but wishes to provide named exports for\nES module consumers.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The package has other packages that depend on it, and the end user might\ninstall both this package and those other packages. For example a utilities\npackage is used directly in an application, and a utilities-plus package\nadds a few more functions to utilities. Because the wrapper exports\nunderlying CommonJS files, it doesn’t matter if utilities-plus is written in\nCommonJS or ES module syntax; it will work either way.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The package stores internal state, and the package author would prefer not to\nrefactor the package to isolate its state management. See the next section.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A variant of this approach not requiring conditional exports for consumers could\nbe to add an export, e.g. \"./module\", to point to an all-ES module-syntax\nversion of the package. This could be used via import 'pkg/module' by users\nwho are certain that the CommonJS version will not be loaded anywhere in the\napplication, such as by dependencies; or if the CommonJS version can be loaded\nbut doesn’t affect the ES module version (for example, because the package is\nstateless):

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \".\": \"./index.cjs\",\n    \"./module\": \"./wrapper.mjs\"\n  }\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Approach #1: Use an ES Module Wrapper" - }, - { - "textRaw": "Approach #2: Isolate State", - "name": "approach_#2:_isolate_state", - "desc": "

                                                                                                                                                                                                                                                      A package.json file can define the separate CommonJS and ES module entry\npoints directly:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \"import\": \"./index.mjs\",\n    \"require\": \"./index.cjs\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This can be done if both the CommonJS and ES module versions of the package are\nequivalent, for example because one is the transpiled output of the other; and\nthe package’s management of state is carefully isolated (or the package is\nstateless).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The reason that state is an issue is because both the CommonJS and ES module\nversions of the package may get used within an application; for example, the\nuser’s application code could import the ES module version while a dependency\nrequires the CommonJS version. If that were to occur, two copies of the\npackage would be loaded in memory and therefore two separate states would be\npresent. This would likely cause hard-to-troubleshoot bugs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Aside from writing a stateless package (if JavaScript’s Math were a package,\nfor example, it would be stateless as all of its methods are static), there are\nsome ways to isolate state so that it’s shared between the potentially loaded\nCommonJS and ES module instances of the package:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. \n

                                                                                                                                                                                                                                                        If possible, contain all state within an instantiated object. JavaScript’s\nDate, for example, needs to be instantiated to contain state; if it were a\npackage, it would be used like this:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        import Date from 'date';\nconst someDate = new Date();\n// someDate contains state; Date does not\n
                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        The new keyword isn’t required; a package’s function can return a new\nobject, or modify a passed-in object, to keep the state external to the\npackage.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        Isolate the state in one or more CommonJS files that are shared between the\nCommonJS and ES module versions of the package. For example, if the CommonJS\nand ES module entry points are index.cjs and index.mjs, respectively:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        // ./node_modules/pkg/index.cjs\nconst state = require('./state.cjs');\nmodule.exports.state = state;\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        // ./node_modules/pkg/index.mjs\nimport state from './state.cjs';\nexport {\n  state\n};\n
                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        Even if pkg is used via both require and import in an application (for\nexample, via import in application code and via require by a dependency)\neach reference of pkg will contain the same state; and modifying that\nstate from either module system will apply to both.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any plugins that attach to the package’s singleton would need to separately\nattach to both the CommonJS and ES module singletons.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • The package is currently written in ES module syntax and the package author\nwants that version to be used wherever such syntax is supported.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The package is stateless or its state can be isolated without too much\ndifficulty.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The package is unlikely to have other public packages that depend on it, or if\nit does, the package is stateless or has state that need not be shared between\ndependencies or with the overall application.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Even with isolated state, there is still the cost of possible extra code\nexecution between the CommonJS and ES module versions of a package.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As with the previous approach, a variant of this approach not requiring\nconditional exports for consumers could be to add an export, e.g.\n\"./module\", to point to an all-ES module-syntax version of the package:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \".\": \"./index.cjs\",\n    \"./module\": \"./index.mjs\"\n  }\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Approach #2: Isolate State" - } - ], - "type": "module", - "displayName": "Writing Dual Packages While Avoiding or Minimizing Hazards" - } - ], - "type": "module", - "displayName": "Dual CommonJS/ES Module Packages" - } - ], - "type": "misc", - "displayName": "Packages" - }, - { - "textRaw": "`import` Specifiers", - "name": "`import`_specifiers", - "modules": [ - { - "textRaw": "Terminology", - "name": "terminology", - "desc": "

                                                                                                                                                                                                                                                      The specifier of an import statement is the string after the from keyword,\ne.g. 'path' in import { sep } from 'path'. Specifiers are also used in\nexport from statements, and as the argument to an import() expression.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are four types of specifiers:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Bare specifiers like 'some-package'. They refer to an entry point of a\npackage by the package name.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Deep import specifiers like 'some-package/lib/shuffle.mjs'. They refer to\na path within a package prefixed by the package name.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Relative specifiers like './startup.js' or '../config.mjs'. They refer\nto a path relative to the location of the importing file.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Absolute specifiers like 'file:///opt/nodejs/config.js'. They refer\ndirectly and explicitly to a full path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Bare specifiers, and the bare specifier portion of deep import specifiers, are\nstrings; but everything else in a specifier is a URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Only file: and data: URLs are supported. A specifier like\n'https://example.com/app.js' may be supported by browsers but it is not\nsupported in Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Specifiers may not begin with / or //. These are reserved for potential\nfuture use. The root of the current volume may be referenced via file:///.

                                                                                                                                                                                                                                                      ", - "modules": [ - { - "textRaw": "`data:` Imports", - "name": "`data:`_imports", - "meta": { - "added": [ - "v12.10.0" + "textRaw": "DEP0139: `process.umask()` with no arguments", + "name": "dep0139:_`process.umask()`_with_no_arguments", + "meta": { + "changes": [ + { + "version": [ + "v12.19.0", + "v14.0.0" ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      data: URLs are supported for importing with the following MIME types:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • text/javascript for ES Modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • application/json for JSON
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • application/wasm for WASM.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      data: URLs only resolve Bare specifiers for builtin modules\nand Absolute specifiers. Resolving\nRelative specifiers will not work because data: is not a\nspecial scheme. For example, attempting to load ./foo\nfrom data:text/javascript,import \"./foo\"; will fail to resolve since there\nis no concept of relative resolution for data: URLs. An example of a data:\nURLs being used is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import 'data:text/javascript,console.log(\"hello!\");';\nimport _ from 'data:application/json,\"world!\"';\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`data:` Imports" - } - ], - "type": "module", - "displayName": "Terminology" - } - ], - "type": "misc", - "displayName": "`import` Specifiers" - }, - { - "textRaw": "Differences Between ES Modules and CommonJS", - "name": "differences_between_es_modules_and_commonjs", - "modules": [ - { - "textRaw": "Mandatory file extensions", - "name": "mandatory_file_extensions", - "desc": "

                                                                                                                                                                                                                                                      A file extension must be provided when using the import keyword. Directory\nindexes (e.g. './startup/index.js') must also be fully specified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This behavior matches how import behaves in browser environments, assuming a\ntypically configured server.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Mandatory file extensions" - }, - { - "textRaw": "No `NODE_PATH`", - "name": "no_`node_path`", - "desc": "

                                                                                                                                                                                                                                                      NODE_PATH is not part of resolving import specifiers. Please use symlinks\nif this behavior is desired.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "No `NODE_PATH`" - }, - { - "textRaw": "No `require`, `exports`, `module.exports`, `__filename`, `__dirname`", - "name": "no_`require`,_`exports`,_`module.exports`,_`__filename`,_`__dirname`", - "desc": "

                                                                                                                                                                                                                                                      These CommonJS variables are not available in ES modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      require can be imported into an ES module using module.createRequire().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Equivalents of __filename and __dirname can be created inside of each file\nvia import.meta.url.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import { fileURLToPath } from 'url';\nimport { dirname } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "No `require`, `exports`, `module.exports`, `__filename`, `__dirname`" - }, - { - "textRaw": "No `require.resolve`", - "name": "no_`require.resolve`", - "desc": "

                                                                                                                                                                                                                                                      Former use cases relying on require.resolve to determine the resolved path\nof a module can be supported via import.meta.resolve, which is experimental\nand supported via the --experimental-import-meta-resolve flag:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      (async () => {\n  const dependencyAsset = await import.meta.resolve('component-lib/asset.css');\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      import.meta.resolve also accepts a second argument which is the parent module\nfrom which to resolve from:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      (async () => {\n  // Equivalent to import.meta.resolve('./dep')\n  await import.meta.resolve('./dep', import.meta.url);\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is asynchronous since the ES module resolver in Node.js is\nasynchronous. With the introduction of Top-Level Await, these use cases\nwill be easier as they won't require an async function wrapper.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "No `require.resolve`" - }, - { - "textRaw": "No `require.extensions`", - "name": "no_`require.extensions`", - "desc": "

                                                                                                                                                                                                                                                      require.extensions is not used by import. The expectation is that loader\nhooks can provide this workflow in the future.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "No `require.extensions`" - }, - { - "textRaw": "No `require.cache`", - "name": "no_`require.cache`", - "desc": "

                                                                                                                                                                                                                                                      require.cache is not used by import. It has a separate cache.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "No `require.cache`" - }, - { - "textRaw": "URL-based paths", - "name": "url-based_paths", - "desc": "

                                                                                                                                                                                                                                                      ES modules are resolved and cached based upon\nURL semantics. This means that files containing\nspecial characters such as # and ? need to be escaped.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Modules will be loaded multiple times if the import specifier used to resolve\nthem have a different query or fragment.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import './foo.mjs?query=1'; // loads ./foo.mjs with query of \"?query=1\"\nimport './foo.mjs?query=2'; // loads ./foo.mjs with query of \"?query=2\"\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For now, only modules using the file: protocol can be loaded.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "URL-based paths" - } - ], - "type": "misc", - "displayName": "Differences Between ES Modules and CommonJS" - }, - { - "textRaw": "Interoperability with CommonJS", - "name": "interoperability_with_commonjs", - "modules": [ - { - "textRaw": "`require`", - "name": "`require`", - "desc": "

                                                                                                                                                                                                                                                      require always treats the files it references as CommonJS. This applies\nwhether require is used the traditional way within a CommonJS environment, or\nin an ES module environment using module.createRequire().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To include an ES module into CommonJS, use import().

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`require`" - }, - { - "textRaw": "`import` statements", - "name": "`import`_statements", - "desc": "

                                                                                                                                                                                                                                                      An import statement can reference an ES module or a CommonJS module. Other\nfile types such as JSON or Native modules are not supported. For those, use\nmodule.createRequire().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      import statements are permitted only in ES modules. For similar functionality\nin CommonJS, see import().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The specifier of an import statement (the string after the from keyword)\ncan either be an URL-style relative path like './file.mjs' or a package name\nlike 'fs'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Like in CommonJS, files within packages can be accessed by appending a path to\nthe package name; unless the package’s package.json contains an \"exports\"\nfield, in which case files within packages need to be accessed via the path\ndefined in \"exports\".

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import { sin, cos } from 'geometry/trigonometry-functions.mjs';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Only the “default export” is supported for CommonJS files or packages:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import packageMain from 'commonjs-package'; // Works\n\nimport { method } from 'commonjs-package'; // Errors\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is also possible to\nimport an ES or CommonJS module for its side effects only.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`import` statements" - }, - { - "textRaw": "`import()` expressions", - "name": "`import()`_expressions", - "desc": "

                                                                                                                                                                                                                                                      Dynamic import() is supported in both CommonJS and ES modules. It can be\nused to include ES module files from CommonJS code.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`import()` expressions" - } - ], - "type": "misc", - "displayName": "Interoperability with CommonJS" - }, - { - "textRaw": "CommonJS, JSON, and Native Modules", - "name": "commonjs,_json,_and_native_modules", - "desc": "

                                                                                                                                                                                                                                                      CommonJS, JSON, and Native modules can be used with\nmodule.createRequire().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // cjs.cjs\nmodule.exports = 'cjs';\n\n// esm.mjs\nimport { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\n\nconst cjs = require('./cjs.cjs');\ncjs === 'cjs'; // true\n
                                                                                                                                                                                                                                                      ", - "type": "misc", - "displayName": "CommonJS, JSON, and Native Modules" - }, - { - "textRaw": "Builtin modules", - "name": "builtin_modules", - "desc": "

                                                                                                                                                                                                                                                      Builtin modules will provide named exports of their public API. A\ndefault export is also provided which is the value of the CommonJS exports.\nThe default export can be used for, among other things, modifying the named\nexports. Named exports of builtin modules are updated only by calling\nmodule.syncBuiltinESMExports().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import EventEmitter from 'events';\nconst e = new EventEmitter();\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import { readFile } from 'fs';\nreadFile('./foo.txt', (err, source) => {\n  if (err) {\n    console.error(err);\n  } else {\n    console.log(source);\n  }\n});\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import fs, { readFileSync } from 'fs';\nimport { syncBuiltinESMExports } from 'module';\n\nfs.readFileSync = () => Buffer.from('Hello, ESM');\nsyncBuiltinESMExports();\n\nfs.readFileSync === readFileSync;\n
                                                                                                                                                                                                                                                      ", - "type": "misc", - "displayName": "Builtin modules" - }, - { - "textRaw": "Experimental JSON Modules", - "name": "experimental_json_modules", - "desc": "

                                                                                                                                                                                                                                                      Currently importing JSON modules are only supported in the commonjs mode\nand are loaded using the CJS loader. WHATWG JSON modules specification are\nstill being standardized, and are experimentally supported by including the\nadditional flag --experimental-json-modules when running Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the --experimental-json-modules flag is included both the\ncommonjs and module mode will use the new experimental JSON\nloader. The imported JSON only exposes a default, there is no\nsupport for named exports. A cache entry is created in the CommonJS\ncache, to avoid duplication. The same object will be returned in\nCommonJS if the JSON module has already been imported from the\nsame path.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Assuming an index.mjs with

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import packageConfig from './package.json';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The --experimental-json-modules flag is needed for the module\nto work.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node index.mjs # fails\nnode --experimental-json-modules index.mjs # works\n
                                                                                                                                                                                                                                                      ", - "type": "misc", - "displayName": "Experimental JSON Modules" - }, - { - "textRaw": "Experimental Wasm Modules", - "name": "experimental_wasm_modules", - "desc": "

                                                                                                                                                                                                                                                      Importing Web Assembly modules is supported under the\n--experimental-wasm-modules flag, allowing any .wasm files to be\nimported as normal modules while also supporting their module imports.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This integration is in line with the\nES Module Integration Proposal for Web Assembly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, an index.mjs containing:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import * as M from './module.wasm';\nconsole.log(M);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      executed under:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --experimental-wasm-modules index.mjs\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      would provide the exports interface for the instantiation of module.wasm.

                                                                                                                                                                                                                                                      ", - "type": "misc", - "displayName": "Experimental Wasm Modules" - }, - { - "textRaw": "Experimental Loaders", - "name": "Experimental Loaders", - "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Note: This API is currently being redesigned and will still change.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To customize the default module resolution, loader hooks can optionally be\nprovided via a --experimental-loader ./loader-name.mjs argument to Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When hooks are used they only apply to ES module loading and not to any\nCommonJS modules loaded.

                                                                                                                                                                                                                                                      ", - "miscs": [ - { - "textRaw": "Hooks", - "name": "hooks", - "modules": [ - { - "textRaw": "resolve hook", - "name": "resolve_hook", - "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resolve hook returns the resolved file URL for a given module specifier\nand parent URL. The module specifier is the string in an import statement or\nimport() expression, and the parent URL is the URL of the module that imported\nthis one, or undefined if this is the main entry point for the application.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The conditions property on the context is an array of conditions for\nConditional Exports that apply to this resolution request. They can be used\nfor looking up conditional mappings elsewhere or to modify the list when calling\nthe default resolution logic.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The current set of Node.js default conditions will always\nbe in the context.conditions list passed to the hook. If the hook wants to\nensure Node.js-compatible resolution logic, all items from this default\ncondition list must be passed through to the defaultResolve function.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string} specifier\n * @param {object} context\n * @param {string} context.parentURL\n * @param {string[]} context.conditions\n * @param {function} defaultResolve\n * @returns {object} response\n * @returns {string} response.url\n */\nexport async function resolve(specifier, context, defaultResolve) {\n  const { parentURL = null } = context;\n  if (someCondition) {\n    // For some or all specifiers, do some custom logic for resolving.\n    // Always return an object of the form {url: <string>}\n    return {\n      url: (parentURL) ?\n        new URL(specifier, parentURL).href : new URL(specifier).href\n    };\n  }\n  if (anotherCondition) {\n    // When calling the defaultResolve, the arguments can be modified. In this\n    // case it's adding another value for matching conditional exports.\n    return defaultResolve(specifier, {\n      ...context,\n      conditions: [...context.conditions, 'another-condition'],\n    });\n  }\n  // Defer to Node.js for all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "resolve hook" - }, - { - "textRaw": "getFormat hook", - "name": "getformat_hook", - "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The getFormat hook provides a way to define a custom method of determining how\na URL should be interpreted. This can be one of the following:

                                                                                                                                                                                                                                                      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                      formatDescription
                                                                                                                                                                                                                                                      'builtin'Load a Node.js builtin module
                                                                                                                                                                                                                                                      'commonjs'Load a Node.js CommonJS module
                                                                                                                                                                                                                                                      'dynamic'Use a dynamic instantiate hook
                                                                                                                                                                                                                                                      'json'Load a JSON file
                                                                                                                                                                                                                                                      'module'Load a standard JavaScript module (ES module)
                                                                                                                                                                                                                                                      'wasm'Load a WebAssembly module
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string} url\n * @param {object} context (currently empty)\n * @param {function} defaultGetFormat\n * @returns {object} response\n * @returns {string} response.format\n */\nexport async function getFormat(url, context, defaultGetFormat) {\n  if (someCondition) {\n    // For some or all URLs, do some custom logic for determining format.\n    // Always return an object of the form {format: <string>}, where the\n    // format is one of the strings in the table above.\n    return {\n      format: 'module'\n    };\n  }\n  // Defer to Node.js for all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "getFormat hook" - }, - { - "textRaw": "getSource hook", - "name": "getsource_hook", - "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The getSource hook provides a way to define a custom method for retrieving\nthe source code of an ES module specifier. This would allow a loader to\npotentially avoid reading files from disk.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string} url\n * @param {object} context\n * @param {string} context.format\n * @param {function} defaultGetSource\n * @returns {object} response\n * @returns {string|buffer} response.source\n */\nexport async function getSource(url, context, defaultGetSource) {\n  const { format } = context;\n  if (someCondition) {\n    // For some or all URLs, do some custom logic for retrieving the source.\n    // Always return an object of the form {source: <string|buffer>}.\n    return {\n      source: '...'\n    };\n  }\n  // Defer to Node.js for all other URLs.\n  return defaultGetSource(url, context, defaultGetSource);\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "getSource hook" - }, - { - "textRaw": "transformSource hook", - "name": "transformsource_hook", - "desc": "
                                                                                                                                                                                                                                                      NODE_OPTIONS='--experimental-loader ./custom-loader.mjs' node x.js\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transformSource hook provides a way to modify the source code of a loaded\nES module file after the source string has been loaded but before Node.js has\ndone anything with it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this hook is used to convert unknown-to-Node.js file types into executable\nJavaScript, a resolve hook is also necessary in order to register any\nunknown-to-Node.js file extensions. See the transpiler loader example below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string|buffer} source\n * @param {object} context\n * @param {string} context.url\n * @param {string} context.format\n * @param {function} defaultTransformSource\n * @returns {object} response\n * @returns {string|buffer} response.source\n */\nexport async function transformSource(source,\n                                      context,\n                                      defaultTransformSource) {\n  const { url, format } = context;\n  if (someCondition) {\n    // For some or all URLs, do some custom logic for modifying the source.\n    // Always return an object of the form {source: <string|buffer>}.\n    return {\n      source: '...'\n    };\n  }\n  // Defer to Node.js for all other sources.\n  return defaultTransformSource(\n    source, context, defaultTransformSource);\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "transformSource hook" - }, - { - "textRaw": "getGlobalPreloadCode hook", - "name": "getglobalpreloadcode_hook", - "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Sometimes it can be necessary to run some code inside of the same global scope\nthat the application will run in. This hook allows to return a string that will\nbe ran as sloppy-mode script on startup.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Similar to how CommonJS wrappers work, the code runs in an implicit function\nscope. The only argument is a require-like function that can be used to load\nbuiltins like \"fs\": getBuiltin(request: string).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the code needs more advanced require features, it will have to construct\nits own require using module.createRequire().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @returns {string} Code to run before application startup\n */\nexport function getGlobalPreloadCode() {\n  return `\\\nglobalThis.someInjectedProperty = 42;\nconsole.log('I just set some globals!');\n\nconst { createRequire } = getBuiltin('module');\n\nconst require = createRequire(process.cwd() + '/<preload>');\n// [...]\n`;\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "getGlobalPreloadCode hook" - }, - { - "textRaw": "dynamicInstantiate hook", - "name": "dynamicinstantiate_hook", - "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To create a custom dynamic module that doesn't correspond to one of the\nexisting format interpretations, the dynamicInstantiate hook can be used.\nThis hook is called only for modules that return format: 'dynamic' from\nthe getFormat hook.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string} url\n * @returns {object} response\n * @returns {array} response.exports\n * @returns {function} response.execute\n */\nexport async function dynamicInstantiate(url) {\n  return {\n    exports: ['customExportName'],\n    execute: (exports) => {\n      // Get and set functions provided for pre-allocated export names\n      exports.customExportName.set('value');\n    }\n  };\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With the list of module exports provided upfront, the execute function will\nthen be called at the exact point of module evaluation order for that module\nin the import tree.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Examples

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The various loader hooks can be used together to accomplish wide-ranging\ncustomizations of Node.js’ code loading and evaluation behaviors.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "dynamicInstantiate hook" - }, - { - "textRaw": "HTTPS loader", - "name": "https_loader", - "desc": "

                                                                                                                                                                                                                                                      In current Node.js, specifiers starting with https:// are unsupported. The\nloader below registers hooks to enable rudimentary support for such specifiers.\nWhile this may seem like a significant improvement to Node.js core\nfunctionality, there are substantial downsides to actually using this loader:\nperformance is much slower than loading files from disk, there is no caching,\nand there is no security.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // https-loader.mjs\nimport { get } from 'https';\n\nexport function resolve(specifier, context, defaultResolve) {\n  const { parentURL = null } = context;\n\n  // Normally Node.js would error on specifiers starting with 'https://', so\n  // this hook intercepts them and converts them into absolute URLs to be\n  // passed along to the later hooks below.\n  if (specifier.startsWith('https://')) {\n    return {\n      url: specifier\n    };\n  } else if (parentURL && parentURL.startsWith('https://')) {\n    return {\n      url: new URL(specifier, parentURL).href\n    };\n  }\n\n  // Let Node.js handle all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n\nexport function getFormat(url, context, defaultGetFormat) {\n  // This loader assumes all network-provided JavaScript is ES module code.\n  if (url.startsWith('https://')) {\n    return {\n      format: 'module'\n    };\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n\nexport function getSource(url, context, defaultGetSource) {\n  // For JavaScript to be loaded over the network, we need to fetch and\n  // return it.\n  if (url.startsWith('https://')) {\n    return new Promise((resolve, reject) => {\n      get(url, (res) => {\n        let data = '';\n        res.on('data', (chunk) => data += chunk);\n        res.on('end', () => resolve({ source: data }));\n      }).on('error', (err) => reject(err));\n    });\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetSource(url, context, defaultGetSource);\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // main.mjs\nimport { VERSION } from 'https://coffeescript.org/browser-compiler-modern/coffeescript.js';\n\nconsole.log(VERSION);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With this loader, running:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --experimental-loader ./https-loader.mjs ./main.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Will print the current version of CoffeeScript per the module at the URL in\nmain.mjs.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "HTTPS loader" - }, - { - "textRaw": "Transpiler loader", - "name": "transpiler_loader", - "desc": "

                                                                                                                                                                                                                                                      Sources that are in formats Node.js doesn’t understand can be converted into\nJavaScript using the transformSource hook. Before that hook gets called,\nhowever, other hooks need to tell Node.js not to throw an error on unknown file\ntypes; and to tell Node.js how to load this new file type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This is less performant than transpiling source files before running\nNode.js; a transpiler loader should only be used for development and testing\npurposes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // coffeescript-loader.mjs\nimport { URL, pathToFileURL } from 'url';\nimport CoffeeScript from 'coffeescript';\n\nconst baseURL = pathToFileURL(`${process.cwd()}/`).href;\n\n// CoffeeScript files end in .coffee, .litcoffee or .coffee.md.\nconst extensionsRegex = /\\.coffee$|\\.litcoffee$|\\.coffee\\.md$/;\n\nexport function resolve(specifier, context, defaultResolve) {\n  const { parentURL = baseURL } = context;\n\n  // Node.js normally errors on unknown file extensions, so return a URL for\n  // specifiers ending in the CoffeeScript file extensions.\n  if (extensionsRegex.test(specifier)) {\n    return {\n      url: new URL(specifier, parentURL).href\n    };\n  }\n\n  // Let Node.js handle all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n\nexport function getFormat(url, context, defaultGetFormat) {\n  // Now that we patched resolve to let CoffeeScript URLs through, we need to\n  // tell Node.js what format such URLs should be interpreted as. For the\n  // purposes of this loader, all CoffeeScript URLs are ES modules.\n  if (extensionsRegex.test(url)) {\n    return {\n      format: 'module'\n    };\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n\nexport function transformSource(source, context, defaultTransformSource) {\n  const { url, format } = context;\n\n  if (extensionsRegex.test(url)) {\n    return {\n      source: CoffeeScript.compile(source, { bare: true })\n    };\n  }\n\n  // Let Node.js handle all other sources.\n  return defaultTransformSource(source, context, defaultTransformSource);\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      # main.coffee\nimport { scream } from './scream.coffee'\nconsole.log scream 'hello, world'\n\nimport { version } from 'process'\nconsole.log \"Brought to you by Node.js version #{version}\"\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      # scream.coffee\nexport scream = (str) -> str.toUpperCase()\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With this loader, running:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --experimental-loader ./coffeescript-loader.mjs main.coffee\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Will cause main.coffee to be turned into JavaScript after its source code is\nloaded from disk but before Node.js executes it; and so on for any .coffee,\n.litcoffee or .coffee.md files referenced via import statements of any\nloaded file.

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Transpiler loader" - } - ], - "type": "misc", - "displayName": "Hooks" - } - ] - }, - { - "textRaw": "Resolution Algorithm", - "name": "resolution_algorithm", - "modules": [ - { - "textRaw": "Features", - "name": "features", - "desc": "

                                                                                                                                                                                                                                                      The resolver has the following properties:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • FileURL-based resolution as is used by ES modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Support for builtin module loading
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Relative and absolute URL resolution
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • No default extensions
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • No folder mains
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Bare specifier package resolution lookup through node_modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "Features" - }, - { - "textRaw": "Resolver Algorithm", - "name": "resolver_algorithm", - "desc": "

                                                                                                                                                                                                                                                      The algorithm to load an ES module specifier is given through the\nESM_RESOLVE method below. It returns the resolved URL for a\nmodule specifier relative to a parentURL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The algorithm to determine the module format of a resolved URL is\nprovided by ESM_FORMAT, which returns the unique module\nformat for any file. The \"module\" format is returned for an ECMAScript\nModule, while the \"commonjs\" format is used to indicate loading through the\nlegacy CommonJS loader. Additional formats such as \"addon\" can be extended in\nfuture updates.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the following algorithms, all subroutine errors are propagated as errors\nof these top-level routines unless stated otherwise.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      defaultEnv is the conditional environment name priority array,\n[\"node\", \"import\"].

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resolver can throw the following errors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Invalid Module Specifier: Module specifier is an invalid URL, package name\nor package subpath specifier.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Invalid Package Configuration: package.json configuration is invalid or\ncontains an invalid configuration.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Invalid Package Target: Package exports define a target module within the\npackage that is an invalid type or string target.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Package Path Not Exported: Package exports do not define or permit a target\nsubpath in the package for the given module.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Module Not Found: The package or module requested does not exist.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \nResolver algorithm specification\n

                                                                                                                                                                                                                                                      ESM_RESOLVE(specifier, parentURL)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let resolvedURL be undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        If specifier is a valid URL, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set resolvedURL to the result of parsing and reserializing\nspecifier as a URL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        Otherwise, if specifier starts with \"/\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. \n

                                                                                                                                                                                                                                                        Otherwise, if specifier starts with \"./\" or \"../\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set resolvedURL to the URL resolution of specifier relative to\nparentURL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. \n

                                                                                                                                                                                                                                                        Otherwise,

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Note: specifier is now a bare specifier.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Set resolvedURL the result of\nPACKAGE_RESOLVE(specifier, parentURL).
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. \n

                                                                                                                                                                                                                                                        If resolvedURL contains any percent encodings of \"/\" or \"\\\" (\"%2f\"\nand \"%5C\" respectively), then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      13. \n

                                                                                                                                                                                                                                                        If the file at resolvedURL is a directory, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Unsupported Directory Import error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      14. \n
                                                                                                                                                                                                                                                      15. \n

                                                                                                                                                                                                                                                        If the file at resolvedURL does not exist, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw a Module Not Found error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      16. \n
                                                                                                                                                                                                                                                      17. Set resolvedURL to the real path of resolvedURL.
                                                                                                                                                                                                                                                      18. \n
                                                                                                                                                                                                                                                      19. Let format be the result of ESM_FORMAT(resolvedURL).
                                                                                                                                                                                                                                                      20. \n
                                                                                                                                                                                                                                                      21. Load resolvedURL as module format, format.
                                                                                                                                                                                                                                                      22. \n
                                                                                                                                                                                                                                                      23. Return resolvedURL.
                                                                                                                                                                                                                                                      24. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_RESOLVE(packageSpecifier, parentURL)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let packageName be undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Let packageSubpath be undefined.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        If packageSpecifier is an empty string, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. \n

                                                                                                                                                                                                                                                        Otherwise,

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. \n

                                                                                                                                                                                                                                                          If packageSpecifier does not contain a \"/\" separator, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Set packageName to the substring of packageSpecifier\nuntil the second \"/\" separator or the end of the string.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. \n

                                                                                                                                                                                                                                                        If packageName starts with \".\" or contains \"\\\" or \"%\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. Let packageSubpath be undefined.
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      13. \n

                                                                                                                                                                                                                                                        If the length of packageSpecifier is greater than the length of\npackageName, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set packageSubpath to \".\" concatenated with the substring of\npackageSpecifier from the position at the length of packageName.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      14. \n
                                                                                                                                                                                                                                                      15. \n

                                                                                                                                                                                                                                                        If packageSubpath contains any \".\" or \"..\" segments or percent\nencoded strings for \"/\" or \"\\\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      16. \n
                                                                                                                                                                                                                                                      17. Set selfUrl to the result of\nSELF_REFERENCE_RESOLVE(packageName, packageSubpath, parentURL).
                                                                                                                                                                                                                                                      18. \n
                                                                                                                                                                                                                                                      19. If selfUrl isn't empty, return selfUrl.
                                                                                                                                                                                                                                                      20. \n
                                                                                                                                                                                                                                                      21. \n

                                                                                                                                                                                                                                                        If packageSubpath is undefined and packageName is a Node.js builtin\nmodule, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the string \"nodejs:\" concatenated with packageSpecifier.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      22. \n
                                                                                                                                                                                                                                                      23. \n

                                                                                                                                                                                                                                                        While parentURL is not the file system root,

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let packageURL be the URL resolution of \"node_modules/\"\nconcatenated with packageSpecifier, relative to parentURL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Set parentURL to the parent folder URL of parentURL.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. \n

                                                                                                                                                                                                                                                          If the folder at packageURL does not exist, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Set parentURL to the parent URL path of parentURL.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Continue the next loop iteration.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        9. \n

                                                                                                                                                                                                                                                          If packageSubpath is equal to \"./\", then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return packageURL + \"/\".
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        10. \n
                                                                                                                                                                                                                                                        11. \n

                                                                                                                                                                                                                                                          If packageSubpath is _undefined__, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return the result of PACKAGE_MAIN_RESOLVE(packageURL,\npjson).
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        12. \n
                                                                                                                                                                                                                                                        13. \n

                                                                                                                                                                                                                                                          Otherwise,

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. \n

                                                                                                                                                                                                                                                            If pjson is not null and pjson has an \"exports\" key, then

                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Let exports be pjson.exports.
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            3. \n

                                                                                                                                                                                                                                                              If exports is not null or undefined, then

                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                              1. Return PACKAGE_EXPORTS_RESOLVE(packageURL,\npackageSubpath, pjson.exports).
                                                                                                                                                                                                                                                              2. \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            4. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Return the URL resolution of packageSubpath in packageURL.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        14. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      24. \n
                                                                                                                                                                                                                                                      25. Throw a Module Not Found error.
                                                                                                                                                                                                                                                      26. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      SELF_REFERENCE_RESOLVE(packageName, packageSubpath, parentURL)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let packageURL be the result of READ_PACKAGE_SCOPE(parentURL).
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        If packageURL is null, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return undefined.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. \n

                                                                                                                                                                                                                                                        If pjson does not include an \"exports\" property, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return undefined.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. \n

                                                                                                                                                                                                                                                        If pjson.name is equal to packageName, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. \n

                                                                                                                                                                                                                                                          If packageSubpath is equal to \"./\", then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return packageURL + \"/\".
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. \n

                                                                                                                                                                                                                                                          If packageSubpath is undefined, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return the result of PACKAGE_MAIN_RESOLVE(packageURL, pjson).
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. \n

                                                                                                                                                                                                                                                          Otherwise,

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. \n

                                                                                                                                                                                                                                                            If pjson is not null and pjson has an \"exports\" key, then

                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Let exports be pjson.exports.
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            3. \n

                                                                                                                                                                                                                                                              If exports is not null or undefined, then

                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                              1. Return PACKAGE_EXPORTS_RESOLVE(packageURL, subpath,\npjson.exports).
                                                                                                                                                                                                                                                              2. \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            4. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Return the URL resolution of subpath in packageURL.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. Otherwise, return undefined.
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_MAIN_RESOLVE(packageURL, pjson)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. \n

                                                                                                                                                                                                                                                        If pjson is null, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw a Module Not Found error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        If pjson.exports is not null or undefined, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If exports is an Object with both a key starting with \".\" and a key\nnot starting with \".\", throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. \n

                                                                                                                                                                                                                                                          If pjson.exports is a String or Array, or an Object containing no\nkeys starting with \".\", then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL,\npjson.exports, \"\").
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. \n

                                                                                                                                                                                                                                                          If pjson.exports is an Object containing a \".\" property, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let mainExport be the \".\" property in pjson.exports.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL,\nmainExport, \"\").
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. Throw a Package Path Not Exported error.
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Let legacyMainURL be the result applying the legacy\nLOAD_AS_DIRECTORY CommonJS resolver to packageURL, throwing a\nModule Not Found error for no resolution.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Return legacyMainURL.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_EXPORTS_RESOLVE(packageURL, packagePath, exports)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If exports is an Object with both a key starting with \".\" and a key not\nstarting with \".\", throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        If exports is an Object and all keys of exports start with \".\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set packagePath to \"./\" concatenated with packagePath.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. \n

                                                                                                                                                                                                                                                          If packagePath is a key of exports, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let target be the value of exports[packagePath].
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target,\n\"\", defaultEnv).
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Let directoryKeys be the list of keys of exports ending in\n\"/\", sorted by length descending.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. \n

                                                                                                                                                                                                                                                          For each key directory in directoryKeys, do

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. \n

                                                                                                                                                                                                                                                            If packagePath starts with directory, then

                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Let target be the value of exports[directory].
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            3. Let subpath be the substring of target starting at the index\nof the length of directory.
                                                                                                                                                                                                                                                            4. \n
                                                                                                                                                                                                                                                            5. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target,\nsubpath, defaultEnv).
                                                                                                                                                                                                                                                            6. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Throw a Package Path Not Exported error.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target, subpath, env)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. \n

                                                                                                                                                                                                                                                        If target is a String, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If target does not start with \"./\" or contains any \"node_modules\"\nsegments including \"node_modules\" percent-encoding, throw an\nInvalid Package Target error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Let resolvedTarget be the URL resolution of the concatenation of\npackageURL and target.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. If resolvedTarget is not contained in packageURL, throw an\nInvalid Package Target error.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. If subpath has non-zero length and target does not end with \"/\",\nthrow an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        9. Let resolved be the URL resolution of the concatenation of\nsubpath and resolvedTarget.
                                                                                                                                                                                                                                                        10. \n
                                                                                                                                                                                                                                                        11. If resolved is not contained in resolvedTarget, throw an\nInvalid Module Specifier error.
                                                                                                                                                                                                                                                        12. \n
                                                                                                                                                                                                                                                        13. Return resolved.
                                                                                                                                                                                                                                                        14. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        Otherwise, if target is a non-null Object, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If exports contains any index property keys, as defined in ECMA-262\n6.1.7 Array Index, throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. \n

                                                                                                                                                                                                                                                          For each property p of target, in object insertion order as,

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. \n

                                                                                                                                                                                                                                                            If p equals \"default\" or env contains an entry for p, then

                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Let targetValue be the value of the p property in target.
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            3. Return the result of PACKAGE_EXPORTS_TARGET_RESOLVE(\npackageURL, targetValue, subpath, env), continuing the\nloop on any Package Path Not Exported error.
                                                                                                                                                                                                                                                            4. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Throw a Package Path Not Exported error.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        Otherwise, if target is an Array, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If target.length is zero, throw a _Package Path Not Exported error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. \n

                                                                                                                                                                                                                                                          For each item targetValue in target, do

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. If targetValue is an Array, continue the loop.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Return the result of PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL,\ntargetValue, subpath, env), continuing the loop on any\nPackage Path Not Exported or Invalid Package Target error.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Throw the last fallback resolution error.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Otherwise, if target is null, throw a Package Path Not Exported\nerror.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. Otherwise throw an Invalid Package Target error.
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ESM_FORMAT(url)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Assert: url corresponds to an existing file.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Let pjson be the result of READ_PACKAGE_SCOPE(url).
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        If url ends in \".mjs\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return \"module\".
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. \n

                                                                                                                                                                                                                                                        If url ends in \".cjs\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return \"commonjs\".
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. \n

                                                                                                                                                                                                                                                        If pjson?.type exists and is \"module\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. \n

                                                                                                                                                                                                                                                          If url ends in \".js\", then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return \"module\".
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Throw an Unsupported File Extension error.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. \n

                                                                                                                                                                                                                                                        Otherwise,

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Unsupported File Extension error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      READ_PACKAGE_SCOPE(url)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let scopeURL be url.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        While scopeURL is not the file system root,

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If scopeURL ends in a \"node_modules\" path segment, return null.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Let pjson be the result of READ_PACKAGE_JSON(scopeURL).
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. \n

                                                                                                                                                                                                                                                          If pjson is not null, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return pjson.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. Set scopeURL to the parent URL of scopeURL.
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Return null.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      READ_PACKAGE_JSON(packageURL)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let pjsonURL be the resolution of \"package.json\" within packageURL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        If the file at pjsonURL does not exist, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return null.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        If the file at packageURL does not parse as valid JSON, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Return the parsed JSON source of the file at pjsonURL.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      ", + "pr-url": "https://github.com/nodejs/node/pull/32499", + "description": "Documentation-only deprecation." + } + ] + }, + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling process.umask() with no argument causes the process-wide umask to be\nwritten twice. This introduces a race condition between threads, and is a\npotential security vulnerability. There is no safe, cross-platform alternative\nAPI.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Resolver Algorithm" + "displayName": "DEP0139: `process.umask()` with no arguments" }, { - "textRaw": "Customizing ESM specifier resolution algorithm", - "name": "customizing_esm_specifier_resolution_algorithm", - "desc": "

                                                                                                                                                                                                                                                      The current specifier resolution does not support all default behavior of\nthe CommonJS loader. One of the behavior differences is automatic resolution\nof file extensions and the ability to import directories that have an index\nfile.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The --experimental-specifier-resolution=[mode] flag can be used to customize\nthe extension resolution algorithm. The default mode is explicit, which\nrequires the full path to a module be provided to the loader. To enable the\nautomatic extension resolution and importing from directories that include an\nindex file use the node mode.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node index.mjs\nsuccess!\n$ node index # Failure!\nError: Cannot find module\n$ node --experimental-specifier-resolution=node index\nsuccess!\n
                                                                                                                                                                                                                                                      ", + "textRaw": "DEP0144: `module.parent`", + "name": "dep0144:_`module.parent`", + "meta": { + "changes": [ + { + "version": [ + "v12.19.0", + "v14.6.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/32217", + "description": "Documentation-only deprecation." + } + ] + }, + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A CommonJS module can access the first module that required it using\nmodule.parent. This feature is deprecated because it does not work\nconsistently in the presence of ECMAScript modules and because it gives an\ninaccurate representation of the CommonJS module graph.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some modules use it to check if they are the entry point of the current process.\nInstead, it is recommended to compare require.main and module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      if (require.main === module) {\n  // Code section that will run only if current file is the entry point.\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When looking for the CommonJS modules that have required the current one,\nrequire.cache and module.children can be used:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const moduleParents = Object.values(require.cache)\n  .filter((m) => m.children.includes(module));\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Customizing ESM specifier resolution algorithm" + "displayName": "DEP0144: `module.parent`" } ], "type": "misc", - "displayName": "Resolution Algorithm" - } - ], - "properties": [ - { - "textRaw": "`meta` {Object}", - "type": "Object", - "name": "meta", - "desc": "

                                                                                                                                                                                                                                                      The import.meta metaproperty is an Object that contains the following\nproperty:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • url <string> The absolute file: URL of the module.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + "displayName": "List of deprecated APIs" } ] }, @@ -8179,11 +8061,11 @@ "name": "Errors", "introduced_in": "v4.0.0", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Applications running in Node.js will generally experience four categories of\nerrors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Standard JavaScript errors such as <EvalError>, <SyntaxError>, <RangeError>,\n<ReferenceError>, <TypeError>, and <URIError>.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • System errors triggered by underlying operating system constraints such\nas attempting to open a file that does not exist or attempting to send data\nover a closed socket.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • User-specified errors triggered by application code.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • AssertionErrors are a special class of error that can be triggered when\nNode.js detects an exceptional logic violation that should never occur. These\nare raised typically by the assert module.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All JavaScript and System errors raised by Node.js inherit from, or are\ninstances of, the standard JavaScript <Error> class and are guaranteed\nto provide at least the properties available on that class.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Applications running in Node.js will generally experience four categories of\nerrors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Standard JavaScript errors such as <EvalError>, <SyntaxError>, <RangeError>,\n<ReferenceError>, <TypeError>, and <URIError>.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • System errors triggered by underlying operating system constraints such\nas attempting to open a file that does not exist or attempting to send data\nover a closed socket.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • User-specified errors triggered by application code.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • AssertionErrors are a special class of error that can be triggered when\nNode.js detects an exceptional logic violation that should never occur. These\nare raised typically by the assert module.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All JavaScript and system errors raised by Node.js inherit from, or are\ninstances of, the standard JavaScript <Error> class and are guaranteed\nto provide at least the properties available on that class.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Error Propagation and Interception", - "name": "Error Propagation and Interception", + "textRaw": "Error propagation and interception", + "name": "Error propagation and interception", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Node.js supports several mechanisms for propagating and handling errors that\noccur while an application is running. How these errors are reported and\nhandled depends entirely on the type of Error and the style of the API that is\ncalled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All JavaScript errors are handled as exceptions that immediately generate\nand throw an error using the standard JavaScript throw mechanism. These\nare handled using the try…catch construct provided by the\nJavaScript language.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Throws with a ReferenceError because z is not defined.\ntry {\n  const m = 1;\n  const n = m + z;\n} catch (err) {\n  // Handle the error here.\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any use of the JavaScript throw mechanism will raise an exception that\nmust be handled using try…catch or the Node.js process will exit\nimmediately.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With few exceptions, Synchronous APIs (any blocking method that does not\naccept a callback function, such as fs.readFileSync), will use throw\nto report errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Errors that occur within Asynchronous APIs may be reported in multiple ways:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Most asynchronous methods that accept a callback function will accept an\nError object passed as the first argument to that function. If that first\nargument is not null and is an instance of Error, then an error occurred\nthat should be handled.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      const fs = require('fs');\nfs.readFile('a file that does not exist', (err, data) => {\n  if (err) {\n    console.error('There was an error reading the file!', err);\n    return;\n  }\n  // Otherwise handle the data\n});\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        When an asynchronous method is called on an object that is an\nEventEmitter, errors can be routed to that object's 'error' event.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        const net = require('net');\nconst connection = net.connect('localhost');\n\n// Adding an 'error' event handler to a stream:\nconnection.on('error', (err) => {\n  // If the connection is reset by the server, or if it can't\n  // connect at all, or on any sort of error encountered by\n  // the connection, the error will be sent here.\n  console.error(err);\n});\n\nconnection.pipe(process.stdout);\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        A handful of typically asynchronous methods in the Node.js API may still\nuse the throw mechanism to raise exceptions that must be handled using\ntry…catch. There is no comprehensive list of such methods; please\nrefer to the documentation of each method to determine the appropriate\nerror handling mechanism required.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The use of the 'error' event mechanism is most common for stream-based\nand event emitter-based APIs, which themselves represent a series of\nasynchronous operations over time (as opposed to a single operation that may\npass or fail).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For all EventEmitter objects, if an 'error' event handler is not\nprovided, the error will be thrown, causing the Node.js process to report an\nuncaught exception and crash unless either: The domain module is\nused appropriately or a handler has been registered for the\n'uncaughtException' event.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const EventEmitter = require('events');\nconst ee = new EventEmitter();\n\nsetImmediate(() => {\n  // This will crash the process because no 'error' event\n  // handler has been added.\n  ee.emit('error', new Error('This will crash'));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Errors generated in this way cannot be intercepted using try…catch as\nthey are thrown after the calling code has already exited.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Developers must refer to the documentation for each method to determine\nexactly how errors raised by those methods are propagated.

                                                                                                                                                                                                                                                      ", "miscs": [ @@ -8196,13 +8078,13 @@ ] }, { - "textRaw": "Exceptions vs. Errors", - "name": "Exceptions vs. Errors", + "textRaw": "Exceptions vs. errors", + "name": "Exceptions vs. errors", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      A JavaScript exception is a value that is thrown as a result of an invalid\noperation or as the target of a throw statement. While it is not required\nthat these values are instances of Error or classes which inherit from\nError, all exceptions thrown by Node.js or the JavaScript runtime will be\ninstances of Error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some exceptions are unrecoverable at the JavaScript layer. Such exceptions\nwill always cause the Node.js process to crash. Examples include assert()\nchecks or abort() calls in the C++ layer.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "OpenSSL Errors", + "textRaw": "OpenSSL errors", "name": "openssl_errors", "desc": "

                                                                                                                                                                                                                                                      Errors originating in crypto or tls are of class Error, and in addition to\nthe standard .code and .message properties, may have some additional\nOpenSSL-specific properties.

                                                                                                                                                                                                                                                      ", "properties": [ @@ -8228,10 +8110,10 @@ } ], "type": "misc", - "displayName": "OpenSSL Errors" + "displayName": "OpenSSL errors" }, { - "textRaw": "Node.js Error Codes", + "textRaw": "Node.js error codes", "name": "node.js_error_codes", "desc": "

                                                                                                                                                                                                                                                      ", "modules": [ @@ -8939,11 +8821,18 @@ "name": "`err_input_type_not_allowed`", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The --input-type flag was used to attempt to execute a file. This flag can\nonly be used with input via --eval, --print or STDIN.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The --input-type flag was used to attempt to execute a file. This flag can\nonly be used with input via --eval, --print or STDIN.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INPUT_TYPE_NOT_ALLOWED`" }, { + "textRaw": "`ERR_INSPECTOR_ALREADY_ACTIVATED`", + "name": "`err_inspector_already_activated`", + "desc": "

                                                                                                                                                                                                                                                      While using the inspector module, an attempt was made to activate the\ninspector when it already started to listen on a port. Use inspector.close()\nbefore activating it on a different address.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_INSPECTOR_ALREADY_ACTIVATED`" + }, + { "textRaw": "`ERR_INSPECTOR_ALREADY_CONNECTED`", "name": "`err_inspector_already_connected`", "desc": "

                                                                                                                                                                                                                                                      While using the inspector module, an attempt was made to connect when the\ninspector was already connected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -9121,14 +9010,14 @@ { "textRaw": "`ERR_INVALID_PACKAGE_CONFIG`", "name": "`err_invalid_package_config`", - "desc": "

                                                                                                                                                                                                                                                      An invalid package.json file was found which failed parsing.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An invalid package.json file was found which failed parsing.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INVALID_PACKAGE_CONFIG`" }, { "textRaw": "`ERR_INVALID_PACKAGE_TARGET`", "name": "`err_invalid_package_target`", - "desc": "

                                                                                                                                                                                                                                                      The package.json exports field contains an invalid target mapping value\nfor the attempted module resolution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The package.json \"exports\" field contains an invalid target mapping\nvalue for the attempted module resolution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INVALID_PACKAGE_TARGET`" }, @@ -9205,7 +9094,7 @@ { "textRaw": "`ERR_INVALID_TUPLE`", "name": "`err_invalid_tuple`", - "desc": "

                                                                                                                                                                                                                                                      An element in the iterable provided to the WHATWG\nURLSearchParams constructor did not\nrepresent a [name, value] tuple – that is, if an element is not iterable, or\ndoes not consist of exactly two elements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An element in the iterable provided to the WHATWG\nURLSearchParams constructor did not\nrepresent a [name, value] tuple – that is, if an element is not iterable, or\ndoes not consist of exactly two elements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INVALID_TUPLE`" }, @@ -9219,7 +9108,7 @@ { "textRaw": "`ERR_INVALID_URL`", "name": "`err_invalid_url`", - "desc": "

                                                                                                                                                                                                                                                      An invalid URL was passed to the WHATWG\nURL constructor to be parsed. The thrown error object\ntypically has an additional property 'input' that contains the URL that failed\nto parse.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An invalid URL was passed to the WHATWG\nURL constructor to be parsed. The thrown error object\ntypically has an additional property 'input' that contains the URL that failed\nto parse.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INVALID_URL`" }, @@ -9310,11 +9199,24 @@ { "textRaw": "`ERR_MEMORY_ALLOCATION_FAILED`", "name": "`err_memory_allocation_failed`", - "desc": "

                                                                                                                                                                                                                                                      An attempt was made to allocate memory (usually in the C++ layer) but it\nfailed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An attempt was made to allocate memory (usually in the C++ layer) but it\nfailed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_MEMORY_ALLOCATION_FAILED`" }, { + "textRaw": "`ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE`", + "name": "`err_message_target_context_unavailable`", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      A message posted to a MessagePort could not be deserialized in the target\nvm Context. Not all Node.js objects can be successfully instantiated in\nany context at this time, and attempting to transfer them using postMessage()\ncan fail on the receiving side in that case.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE`" + }, + { "textRaw": "`ERR_METHOD_NOT_IMPLEMENTED`", "name": "`err_method_not_implemented`", "desc": "

                                                                                                                                                                                                                                                      A method is required but not implemented.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -9347,7 +9249,7 @@ { "textRaw": "`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`", "name": "`err_missing_message_port_in_transfer_list`", - "desc": "

                                                                                                                                                                                                                                                      A MessagePort was found in the object passed to a postMessage() call,\nbut not provided in the transferList for that call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An object that needs to be explicitly listed in the transferList argument\nwas found in the object passed to a postMessage() call, but not provided in\nthe transferList for that call. Usually, this is a MessagePort.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`" }, @@ -9461,14 +9363,21 @@ { "textRaw": "`ERR_OUT_OF_RANGE`", "name": "`err_out_of_range`", - "desc": "

                                                                                                                                                                                                                                                      A given value is out of the accepted range.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A given value is out of the accepted range.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_OUT_OF_RANGE`" }, { + "textRaw": "`ERR_PACKAGE_IMPORT_NOT_DEFINED`", + "name": "`err_package_import_not_defined`", + "desc": "

                                                                                                                                                                                                                                                      The package.json \"imports\" field does not define the given internal\npackage specifier mapping.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_PACKAGE_IMPORT_NOT_DEFINED`" + }, + { "textRaw": "`ERR_PACKAGE_PATH_NOT_EXPORTED`", "name": "`err_package_path_not_exported`", - "desc": "

                                                                                                                                                                                                                                                      The package.json exports field does not export the requested subpath.\nBecause exports are encapsulated, private internal modules that are not exported\ncannot be imported through the package resolution, unless using an absolute URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The package.json \"exports\" field does not export the requested subpath.\nBecause exports are encapsulated, private internal modules that are not exported\ncannot be imported through the package resolution, unless using an absolute URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_PACKAGE_PATH_NOT_EXPORTED`" }, @@ -9491,7 +9400,7 @@ { "textRaw": "`ERR_SCRIPT_EXECUTION_INTERRUPTED`", "name": "`err_script_execution_interrupted`", - "desc": "

                                                                                                                                                                                                                                                      Script execution was interrupted by SIGINT (For example, when Ctrl+C was\npressed).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Script execution was interrupted by SIGINT (For example,\nCtrl+C was pressed.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_SCRIPT_EXECUTION_INTERRUPTED`" }, @@ -9666,11 +9575,18 @@ { "textRaw": "`ERR_SYSTEM_ERROR`", "name": "`err_system_error`", - "desc": "

                                                                                                                                                                                                                                                      An unspecified or non-specific system error has occurred within the Node.js\nprocess. The error object will have an err.info object property with\nadditional details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An unspecified or non-specific system error has occurred within the Node.js\nprocess. The error object will have an err.info object property with\nadditional details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_SYSTEM_ERROR`" }, { + "textRaw": "`ERR_TLS_CERT_ALTNAME_FORMAT`", + "name": "`err_tls_cert_altname_format`", + "desc": "

                                                                                                                                                                                                                                                      This error is thrown by checkServerIdentity if a user-supplied\nsubjectaltname property violates encoding rules. Certificate objects produced\nby Node.js itself always comply with encoding rules and will never cause\nthis error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_TLS_CERT_ALTNAME_FORMAT`" + }, + { "textRaw": "`ERR_TLS_CERT_ALTNAME_INVALID`", "name": "`err_tls_cert_altname_invalid`", "desc": "

                                                                                                                                                                                                                                                      While using TLS, the host name/IP of the peer did not match any of the\nsubjectAltNames in its certificate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -9767,11 +9683,11 @@ "displayName": "`ERR_TLS_SNI_FROM_SERVER`" }, { - "textRaw": "ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED", - "name": "err_tls_psk_set_identiy_hint_failed", + "textRaw": "`ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED`", + "name": "`err_tls_psk_set_identiy_hint_failed`", "desc": "

                                                                                                                                                                                                                                                      Failed to set PSK identity hint. Hint may be too long.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED" + "displayName": "`ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED`" }, { "textRaw": "`ERR_TRACE_EVENTS_CATEGORY_REQUIRED`", @@ -9811,11 +9727,18 @@ { "textRaw": "`ERR_TTY_INIT_FAILED`", "name": "`err_tty_init_failed`", - "desc": "

                                                                                                                                                                                                                                                      The initialization of a TTY failed due to a system error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The initialization of a TTY failed due to a system error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_TTY_INIT_FAILED`" }, { + "textRaw": "`ERR_UNAVAILABLE_DURING_EXIT`", + "name": "`err_unavailable_during_exit`", + "desc": "

                                                                                                                                                                                                                                                      Function was called within a process.on('exit') handler that shouldn't be\ncalled within process.on('exit') handler.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_UNAVAILABLE_DURING_EXIT`" + }, + { "textRaw": "`ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET`", "name": "`err_uncaught_exception_capture_already_set`", "desc": "

                                                                                                                                                                                                                                                      process.setUncaughtExceptionCaptureCallback() was called twice,\nwithout first resetting the callback to null.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This error is designed to prevent accidentally overwriting a callback registered\nfrom another module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -9885,25 +9808,18 @@ { "textRaw": "`ERR_UNSUPPORTED_DIR_IMPORT`", "name": "`err_unsupported_dir_import`", - "desc": "

                                                                                                                                                                                                                                                      import a directory URL is unsupported. Instead, you can\nself-reference a package using its name and define a custom subpath in\nthe \"exports\" field of the package.json file.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import './'; // unsupported\nimport './index.js'; // supported\nimport 'package-name'; // supported\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      import a directory URL is unsupported. Instead,\nself-reference a package using its name and define a custom subpath in\nthe \"exports\" field of the package.json file.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import './'; // unsupported\nimport './index.js'; // supported\nimport 'package-name'; // supported\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_UNSUPPORTED_DIR_IMPORT`" }, { "textRaw": "`ERR_UNSUPPORTED_ESM_URL_SCHEME`", "name": "`err_unsupported_esm_url_scheme`", - "desc": "

                                                                                                                                                                                                                                                      import with URL schemes other than file and data is unsupported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      import with URL schemes other than file and data is unsupported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_UNSUPPORTED_ESM_URL_SCHEME`" }, { - "textRaw": "`ERR_V8BREAKITERATOR`", - "name": "`err_v8breakiterator`", - "desc": "

                                                                                                                                                                                                                                                      The V8 BreakIterator API was used but the full ICU data set is not installed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_V8BREAKITERATOR`" - }, - { "textRaw": "`ERR_VALID_PERFORMANCE_ENTRY_TYPE`", "name": "`err_valid_performance_entry_type`", "desc": "

                                                                                                                                                                                                                                                      While using the Performance Timing API (perf_hooks), no valid performance\nentry types were found.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -10055,11 +9971,18 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Too much HTTP header data was received. In order to protect against malicious or\nmalconfigured clients, if more than 8KB of HTTP header data is received then\nHTTP parsing will abort without a request or response object being created, and\nan Error with this code will be emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Too much HTTP header data was received. In order to protect against malicious or\nmalconfigured clients, if more than 8KB of HTTP header data is received then\nHTTP parsing will abort without a request or response object being created, and\nan Error with this code will be emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`HPE_HEADER_OVERFLOW`" }, { + "textRaw": "`HPE_UNEXPECTED_CONTENT_LENGTH`", + "name": "`hpe_unexpected_content_length`", + "desc": "

                                                                                                                                                                                                                                                      Server is sending both a Content-Length header and Transfer-Encoding: chunked.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Transfer-Encoding: chunked allows the server to maintain an HTTP persistent\nconnection for dynamically generated content.\nIn this case, the Content-Length HTTP header cannot be used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use Content-Length or Transfer-Encoding: chunked.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`HPE_UNEXPECTED_CONTENT_LENGTH`" + }, + { "textRaw": "`MODULE_NOT_FOUND`", "name": "`module_not_found`", "meta": { @@ -10077,10 +10000,10 @@ } ], "type": "misc", - "displayName": "Node.js Error Codes" + "displayName": "Node.js error codes" }, { - "textRaw": "Legacy Node.js Error Codes", + "textRaw": "Legacy Node.js error codes", "name": "legacy_node.js_error_codes", "stability": 0, "stabilityText": "Deprecated. These error codes are either inconsistent, or have\nbeen removed.", @@ -10406,11 +10329,18 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      An attempt was made to launch a Node.js process with an unknown stdout or\nstderr file type. This error is usually an indication of a bug within Node.js\nitself, although it is possible for user code to trigger it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An attempt was made to launch a Node.js process with an unknown stdout or\nstderr file type. This error is usually an indication of a bug within Node.js\nitself, although it is possible for user code to trigger it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_UNKNOWN_STREAM_TYPE`" }, { + "textRaw": "`ERR_V8BREAKITERATOR`", + "name": "`err_v8breakiterator`", + "desc": "

                                                                                                                                                                                                                                                      The V8 BreakIterator API was used but the full ICU data set is not installed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_V8BREAKITERATOR`" + }, + { "textRaw": "`ERR_VALUE_OUT_OF_RANGE`", "name": "`err_value_out_of_range`", "meta": { @@ -10448,100 +10378,10 @@ "desc": "

                                                                                                                                                                                                                                                      Used when an attempt is made to use a zlib object after it has already been\nclosed.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_ZLIB_BINDING_CLOSED`" - }, - { - "textRaw": "Other error codes", - "name": "other_error_codes", - "desc": "

                                                                                                                                                                                                                                                      These errors have never been released, but had been present on master between\nreleases.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "modules": [ - { - "textRaw": "`ERR_ENTRY_TYPE_MISMATCH`", - "name": "`err_entry_type_mismatch`", - "stability": 1, - "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The --entry-type=commonjs flag was used to attempt to execute an .mjs file\nor a .js file where the nearest parent package.json contains\n\"type\": \"module\"; or\nthe --entry-type=module flag was used to attempt to execute a .cjs file or\na .js file where the nearest parent package.json either lacks a \"type\"\nfield or contains \"type\": \"commonjs\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_ENTRY_TYPE_MISMATCH`" - }, - { - "textRaw": "`ERR_FS_WATCHER_ALREADY_STARTED`", - "name": "`err_fs_watcher_already_started`", - "desc": "

                                                                                                                                                                                                                                                      An attempt was made to start a watcher returned by fs.watch() that has\nalready been started.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_FS_WATCHER_ALREADY_STARTED`" - }, - { - "textRaw": "`ERR_FS_WATCHER_NOT_STARTED`", - "name": "`err_fs_watcher_not_started`", - "desc": "

                                                                                                                                                                                                                                                      An attempt was made to initiate operations on a watcher returned by\nfs.watch() that has not yet been started.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_FS_WATCHER_NOT_STARTED`" - }, - { - "textRaw": "`ERR_HTTP2_ALREADY_SHUTDOWN`", - "name": "`err_http2_already_shutdown`", - "desc": "

                                                                                                                                                                                                                                                      Occurs with multiple attempts to shutdown an HTTP/2 session.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_HTTP2_ALREADY_SHUTDOWN`" - }, - { - "textRaw": "`ERR_HTTP2_ERROR`", - "name": "`err_http2_error`", - "desc": "

                                                                                                                                                                                                                                                      A non-specific HTTP/2 error has occurred.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_HTTP2_ERROR`" - }, - { - "textRaw": "`ERR_INVALID_REPL_HISTORY`", - "name": "`err_invalid_repl_history`", - "desc": "

                                                                                                                                                                                                                                                      Used in the repl in case the old history file is used and an error occurred\nwhile trying to read and parse it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_INVALID_REPL_HISTORY`" - }, - { - "textRaw": "`ERR_INVALID_REPL_TYPE`", - "name": "`err_invalid_repl_type`", - "stability": 1, - "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The --entry-type=... flag is not compatible with the Node.js REPL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_INVALID_REPL_TYPE`" - }, - { - "textRaw": "`ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK`", - "name": "`err_missing_dynamic_instantiate_hook`", - "desc": "

                                                                                                                                                                                                                                                      Used when an ES Module loader hook specifies format: 'dynamic' but does\nnot provide a dynamicInstantiate hook.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK`" - }, - { - "textRaw": "`ERR_STREAM_HAS_STRINGDECODER`", - "name": "`err_stream_has_stringdecoder`", - "desc": "

                                                                                                                                                                                                                                                      Used to prevent an abort if a string decoder was set on the Socket.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const Socket = require('net').Socket;\nconst instance = new Socket();\n\ninstance.setEncoding('utf8');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_STREAM_HAS_STRINGDECODER`" - }, - { - "textRaw": "`ERR_STRING_TOO_LARGE`", - "name": "`err_string_too_large`", - "desc": "

                                                                                                                                                                                                                                                      An attempt has been made to create a string larger than the maximum allowed\nsize.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_STRING_TOO_LARGE`" - }, - { - "textRaw": "`ERR_TTY_WRITABLE_NOT_READABLE`", - "name": "`err_tty_writable_not_readable`", - "desc": "

                                                                                                                                                                                                                                                      This Error is thrown when a read is attempted on a TTY WriteStream,\nsuch as process.stdout.on('data').

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_TTY_WRITABLE_NOT_READABLE`" - } - ], - "type": "module", - "displayName": "Other error codes" } ], "type": "misc", - "displayName": "Legacy Node.js Error Codes" + "displayName": "Legacy Node.js error codes" } ], "classes": [ @@ -10549,7 +10389,7 @@ "textRaw": "Class: `Error`", "type": "class", "name": "Error", - "desc": "

                                                                                                                                                                                                                                                      A generic JavaScript <Error> object that does not denote any specific\ncircumstance of why the error occurred. Error objects capture a \"stack trace\"\ndetailing the point in the code at which the Error was instantiated, and may\nprovide a text description of the error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All errors generated by Node.js, including all System and JavaScript errors,\nwill either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A generic JavaScript <Error> object that does not denote any specific\ncircumstance of why the error occurred. Error objects capture a \"stack trace\"\ndetailing the point in the code at which the Error was instantiated, and may\nprovide a text description of the error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All errors generated by Node.js, including all system and JavaScript errors,\nwill either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`Error.captureStackTrace(targetObject[, constructorOpt])`", @@ -10571,7 +10411,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Creates a .stack property on targetObject, which when accessed returns\na string representing the location in the code at which\nError.captureStackTrace() was called.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myObject = {};\nError.captureStackTrace(myObject);\nmyObject.stack;  // Similar to `new Error().stack`\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line of the trace will be prefixed with\n${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional constructorOpt argument accepts a function. If given, all frames\nabove constructorOpt, including constructorOpt, will be omitted from the\ngenerated stack trace.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The constructorOpt argument is useful for hiding implementation\ndetails of error generation from an end user. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyError() {\n  Error.captureStackTrace(this, MyError);\n}\n\n// Without passing MyError to captureStackTrace, the MyError\n// frame would show up in the .stack property. By passing\n// the constructor, we omit that frame, and retain all frames below it.\nnew MyError().stack;\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Creates a .stack property on targetObject, which when accessed returns\na string representing the location in the code at which\nError.captureStackTrace() was called.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myObject = {};\nError.captureStackTrace(myObject);\nmyObject.stack;  // Similar to `new Error().stack`\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line of the trace will be prefixed with\n${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional constructorOpt argument accepts a function. If given, all frames\nabove constructorOpt, including constructorOpt, will be omitted from the\ngenerated stack trace.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The constructorOpt argument is useful for hiding implementation\ndetails of error generation from the user. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyError() {\n  Error.captureStackTrace(this, MyError);\n}\n\n// Without passing MyError to captureStackTrace, the MyError\n// frame would show up in the .stack property. By passing\n// the constructor, we omit that frame, and retain all frames below it.\nnew MyError().stack;\n
                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -10585,7 +10425,7 @@ "textRaw": "`code` {string}", "type": "string", "name": "code", - "desc": "

                                                                                                                                                                                                                                                      The error.code property is a string label that identifies the kind of error.\nerror.code is the most stable way to identify an error. It will only change\nbetween major versions of Node.js. In contrast, error.message strings may\nchange between any versions of Node.js. See Node.js Error Codes for details\nabout specific codes.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.code property is a string label that identifies the kind of error.\nerror.code is the most stable way to identify an error. It will only change\nbetween major versions of Node.js. In contrast, error.message strings may\nchange between any versions of Node.js. See Node.js error codes for details\nabout specific codes.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`message` {string}", @@ -10597,7 +10437,7 @@ "textRaw": "`stack` {string}", "type": "string", "name": "stack", - "desc": "

                                                                                                                                                                                                                                                      The error.stack property is a string describing the point in the code at which\nthe Error was instantiated.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Things keep happening!\n   at /home/gbusey/file.js:525:2\n   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)\n   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)\n   at increaseSynergy (/home/gbusey/actors.js:701:6)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line is formatted as <error class name>: <error message>, and\nis followed by a series of stack frames (each line beginning with \"at \").\nEach frame describes a call site within the code that lead to the error being\ngenerated. V8 attempts to display a name for each function (by variable name,\nfunction name, or object method name), but occasionally it will not be able to\nfind a suitable name. If V8 cannot determine a name for the function, only\nlocation information will be displayed for that frame. Otherwise, the\ndetermined function name will be displayed with location information appended\nin parentheses.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Frames are only generated for JavaScript functions. If, for example, execution\nsynchronously passes through a C++ addon function called cheetahify which\nitself calls a JavaScript function, the frame representing the cheetahify call\nwill not be present in the stack traces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cheetahify = require('./native-binding.node');\n\nfunction makeFaster() {\n  // `cheetahify()` *synchronously* calls speedy.\n  cheetahify(function speedy() {\n    throw new Error('oh no!');\n  });\n}\n\nmakeFaster();\n// will throw:\n//   /home/gbusey/file.js:6\n//       throw new Error('oh no!');\n//           ^\n//   Error: oh no!\n//       at speedy (/home/gbusey/file.js:6:11)\n//       at makeFaster (/home/gbusey/file.js:5:3)\n//       at Object.<anonymous> (/home/gbusey/file.js:10:1)\n//       at Module._compile (module.js:456:26)\n//       at Object.Module._extensions..js (module.js:474:10)\n//       at Module.load (module.js:356:32)\n//       at Function.Module._load (module.js:312:12)\n//       at Function.Module.runMain (module.js:497:10)\n//       at startup (node.js:119:16)\n//       at node.js:906:3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The location information will be one of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • plain-filename.js:line:column, if the frame represents a call internal\nto Node.js.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /absolute/path/to/file.js:line:column, if the frame represents a call in\na user program, or its dependencies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string representing the stack trace is lazily generated when the\nerror.stack property is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The number of frames captured by the stack trace is bounded by the smaller of\nError.stackTraceLimit or the number of available frames on the current event\nloop tick.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.stack property is a string describing the point in the code at which\nthe Error was instantiated.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Things keep happening!\n   at /home/gbusey/file.js:525:2\n   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)\n   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)\n   at increaseSynergy (/home/gbusey/actors.js:701:6)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line is formatted as <error class name>: <error message>, and\nis followed by a series of stack frames (each line beginning with \"at \").\nEach frame describes a call site within the code that lead to the error being\ngenerated. V8 attempts to display a name for each function (by variable name,\nfunction name, or object method name), but occasionally it will not be able to\nfind a suitable name. If V8 cannot determine a name for the function, only\nlocation information will be displayed for that frame. Otherwise, the\ndetermined function name will be displayed with location information appended\nin parentheses.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Frames are only generated for JavaScript functions. If, for example, execution\nsynchronously passes through a C++ addon function called cheetahify which\nitself calls a JavaScript function, the frame representing the cheetahify call\nwill not be present in the stack traces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cheetahify = require('./native-binding.node');\n\nfunction makeFaster() {\n  // `cheetahify()` *synchronously* calls speedy.\n  cheetahify(function speedy() {\n    throw new Error('oh no!');\n  });\n}\n\nmakeFaster();\n// will throw:\n//   /home/gbusey/file.js:6\n//       throw new Error('oh no!');\n//           ^\n//   Error: oh no!\n//       at speedy (/home/gbusey/file.js:6:11)\n//       at makeFaster (/home/gbusey/file.js:5:3)\n//       at Object.<anonymous> (/home/gbusey/file.js:10:1)\n//       at Module._compile (module.js:456:26)\n//       at Object.Module._extensions..js (module.js:474:10)\n//       at Module.load (module.js:356:32)\n//       at Function.Module._load (module.js:312:12)\n//       at Function.Module.runMain (module.js:497:10)\n//       at startup (node.js:119:16)\n//       at node.js:906:3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The location information will be one of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • plain-filename.js:line:column, if the frame represents a call internal\nto Node.js.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /absolute/path/to/file.js:line:column, if the frame represents a call in\na user program, or its dependencies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string representing the stack trace is lazily generated when the\nerror.stack property is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The number of frames captured by the stack trace is bounded by the smaller of\nError.stackTraceLimit or the number of available frames on the current event\nloop tick.

                                                                                                                                                                                                                                                      " } ], "signatures": [ @@ -10629,7 +10469,7 @@ "textRaw": "Class: `ReferenceError`", "type": "class", "name": "ReferenceError", - "desc": "\n

                                                                                                                                                                                                                                                      Indicates that an attempt is being made to access a variable that is not\ndefined. Such errors commonly indicate typos in code, or an otherwise broken\nprogram.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8\nwill do so.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      doesNotExist;\n// Throws ReferenceError, doesNotExist is not a variable in this program.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code,\nReferenceError instances should always be considered a bug in the code\nor its dependencies.

                                                                                                                                                                                                                                                      " + "desc": "\n

                                                                                                                                                                                                                                                      Indicates that an attempt is being made to access a variable that is not\ndefined. Such errors commonly indicate typos in code, or an otherwise broken\nprogram.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8\nwill do so.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      doesNotExist;\n// Throws ReferenceError, doesNotExist is not a variable in this program.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code,\nReferenceError instances indicate a bug in the code or its dependencies.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Class: `SyntaxError`", @@ -10665,7 +10505,7 @@ "textRaw": "`errno` {string|number}", "type": "string|number", "name": "errno", - "desc": "

                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a\nnegative value which corresponds to the error code defined in\nlibuv Error handling. See the libuv errno.h header file\n(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case\nof a string, it is the same as error.code.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a\nnegative value which corresponds to the error code defined in\nlibuv Error handling. See the libuv errno.h header file\n(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case\nof a string, it is the same as error.code.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`info` {Object}", @@ -10695,16 +10535,16 @@ "textRaw": "`syscall` {string}", "type": "string", "name": "syscall", - "desc": "

                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "Common System Errors", + "textRaw": "Common system errors", "name": "common_system_errors", - "desc": "

                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js\nprogram. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EACCES (Permission denied): An attempt was made to access a file in a way\nforbidden by its file access permissions.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EADDRINUSE (Address already in use): An attempt to bind a server\n(net, http, or https) to a local address failed due to\nanother server on the local system already occupying that address.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNREFUSED (Connection refused): No connection could be made because the\ntarget machine actively refused it. This usually results from trying to\nconnect to a service that is inactive on the foreign host.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNRESET (Connection reset by peer): A connection was forcibly closed by\na peer. This normally results from a loss of the connection on the remote\nsocket due to a timeout or reboot. Commonly encountered via the http\nand net modules.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EEXIST (File exists): An existing file was the target of an operation that\nrequired that the target not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EISDIR (Is a directory): An operation expected a file, but the given\npathname was a directory.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EMFILE (Too many open files in system): Maximum number of\nfile descriptors allowable on the system has been reached, and\nrequests for another descriptor cannot be fulfilled until at least one\nhas been closed. This is encountered when opening many files at once in\nparallel, especially on systems (in particular, macOS) where there is a low\nfile descriptor limit for processes. To remedy a low limit, run\nulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOENT (No such file or directory): Commonly raised by fs operations\nto indicate that a component of the specified pathname does not exist. No\nentity (file or directory) could be found by the given path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTDIR (Not a directory): A component of the given pathname existed, but\nwas not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTEMPTY (Directory not empty): A directory with entries was the target\nof an operation that requires an empty directory, usually fs.unlink.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTFOUND (DNS lookup failed): Indicates a DNS failure of either\nEAI_NODATA or EAI_NONAME. This is not a standard POSIX error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPERM (Operation not permitted): An attempt was made to perform an\noperation that requires elevated privileges.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPIPE (Broken pipe): A write on a pipe, socket, or FIFO for which there is\nno process to read the data. Commonly encountered at the net and\nhttp layers, indicative that the remote side of the stream being\nwritten to has been closed.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ETIMEDOUT (Operation timed out): A connect or send request failed because\nthe connected party did not properly respond after a period of time. Usually\nencountered by http or net. Often a sign that a socket.end()\nwas not properly called.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js\nprogram. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EACCES (Permission denied): An attempt was made to access a file in a way\nforbidden by its file access permissions.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EADDRINUSE (Address already in use): An attempt to bind a server\n(net, http, or https) to a local address failed due to\nanother server on the local system already occupying that address.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNREFUSED (Connection refused): No connection could be made because the\ntarget machine actively refused it. This usually results from trying to\nconnect to a service that is inactive on the foreign host.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNRESET (Connection reset by peer): A connection was forcibly closed by\na peer. This normally results from a loss of the connection on the remote\nsocket due to a timeout or reboot. Commonly encountered via the http\nand net modules.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EEXIST (File exists): An existing file was the target of an operation that\nrequired that the target not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EISDIR (Is a directory): An operation expected a file, but the given\npathname was a directory.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EMFILE (Too many open files in system): Maximum number of\nfile descriptors allowable on the system has been reached, and\nrequests for another descriptor cannot be fulfilled until at least one\nhas been closed. This is encountered when opening many files at once in\nparallel, especially on systems (in particular, macOS) where there is a low\nfile descriptor limit for processes. To remedy a low limit, run\nulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOENT (No such file or directory): Commonly raised by fs operations\nto indicate that a component of the specified pathname does not exist. No\nentity (file or directory) could be found by the given path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTDIR (Not a directory): A component of the given pathname existed, but\nwas not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTEMPTY (Directory not empty): A directory with entries was the target\nof an operation that requires an empty directory, usually fs.unlink.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTFOUND (DNS lookup failed): Indicates a DNS failure of either\nEAI_NODATA or EAI_NONAME. This is not a standard POSIX error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPERM (Operation not permitted): An attempt was made to perform an\noperation that requires elevated privileges.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPIPE (Broken pipe): A write on a pipe, socket, or FIFO for which there is\nno process to read the data. Commonly encountered at the net and\nhttp layers, indicative that the remote side of the stream being\nwritten to has been closed.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ETIMEDOUT (Operation timed out): A connect or send request failed because\nthe connected party did not properly respond after a period of time. Usually\nencountered by http or net. Often a sign that a socket.end()\nwas not properly called.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Common System Errors" + "displayName": "Common system errors" } ] }, @@ -10712,13 +10552,13 @@ "textRaw": "Class: `TypeError`", "type": "class", "name": "TypeError", - "desc": "\n

                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example,\npassing a function to a parameter which expects a string would be considered\na TypeError.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('url').parse(() => { });\n// Throws TypeError, since it expected a string.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form\nof argument validation.

                                                                                                                                                                                                                                                      " + "desc": "\n

                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example,\npassing a function to a parameter which expects a string would be a TypeError.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('url').parse(() => { });\n// Throws TypeError, since it expected a string.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form\nof argument validation.

                                                                                                                                                                                                                                                      " } ] }, { - "textRaw": "Global Objects", - "name": "Global Objects", + "textRaw": "Global objects", + "name": "Global objects", "introduced_in": "v0.10.0", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      These objects are available in all modules. The following variables may appear\nto be global but are not. They exist only in the scope of modules, see the\nmodule system documentation:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The objects listed here are specific to Node.js. There are built-in objects\nthat are part of the JavaScript language itself, which are also globally\naccessible.

                                                                                                                                                                                                                                                      ", @@ -10961,11 +10801,11 @@ ] }, { - "textRaw": "Internationalization Support", - "name": "Internationalization Support", + "textRaw": "Internationalization support", + "name": "Internationalization support", "introduced_in": "v8.2.0", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Node.js has many features that make it easier to write internationalized\nprograms. Some of them are:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Node.js (and its underlying V8 engine) uses ICU to implement these features\nin native C/C++ code. However, some of them require a very large ICU data file\nin order to support all locales of the world. Because it is expected that most\nNode.js users will make use of only a small portion of ICU functionality, only\na subset of the full ICU data set is provided by Node.js by default. Several\noptions are provided for customizing and expanding the ICU data set either when\nbuilding or running Node.js.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Node.js has many features that make it easier to write internationalized\nprograms. Some of them are:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Node.js (and its underlying V8 engine) uses ICU to implement these features\nin native C/C++ code. However, some of them require a very large ICU data file\nin order to support all locales of the world. Because it is expected that most\nNode.js users will make use of only a small portion of ICU functionality, only\na subset of the full ICU data set is provided by Node.js by default. Several\noptions are provided for customizing and expanding the ICU data set either when\nbuilding or running Node.js.

                                                                                                                                                                                                                                                      ", "miscs": [ { "textRaw": "Options for building Node.js", @@ -10994,7 +10834,7 @@ { "textRaw": "Providing ICU data at runtime", "name": "providing_icu_data_at_runtime", - "desc": "

                                                                                                                                                                                                                                                      If the small-icu option is used, one can still provide additional locale data\nat runtime so that the JS methods would work for all ICU locales. Assuming the\ndata file is stored at /some/directory, it can be made available to ICU\nthrough either:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        The NODE_ICU_DATA environment variable:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        env NODE_ICU_DATA=/some/directory node\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        The --icu-data-dir CLI parameter:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        node --icu-data-dir=/some/directory\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      (If both are specified, the --icu-data-dir CLI parameter takes precedence.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ICU is able to automatically find and load a variety of data formats, but the\ndata must be appropriate for the ICU version, and the file correctly named.\nThe most common name for the data file is icudt6X[bl].dat, where 6X denotes\nthe intended ICU version, and b or l indicates the system's endianness.\nCheck \"ICU Data\" article in the ICU User Guide for other supported formats\nand more details on ICU data in general.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The full-icu npm module can greatly simplify ICU data installation by\ndetecting the ICU version of the running node executable and downloading the\nappropriate data file. After installing the module through npm i full-icu,\nthe data file will be available at ./node_modules/full-icu. This path can be\nthen passed either to NODE_ICU_DATA or --icu-data-dir as shown above to\nenable full Intl support.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      If the small-icu option is used, one can still provide additional locale data\nat runtime so that the JS methods would work for all ICU locales. Assuming the\ndata file is stored at /some/directory, it can be made available to ICU\nthrough either:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        The NODE_ICU_DATA environment variable:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        env NODE_ICU_DATA=/some/directory node\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        The --icu-data-dir CLI parameter:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        node --icu-data-dir=/some/directory\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      (If both are specified, the --icu-data-dir CLI parameter takes precedence.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ICU is able to automatically find and load a variety of data formats, but the\ndata must be appropriate for the ICU version, and the file correctly named.\nThe most common name for the data file is icudt6X[bl].dat, where 6X denotes\nthe intended ICU version, and b or l indicates the system's endianness.\nCheck \"ICU Data\" article in the ICU User Guide for other supported formats\nand more details on ICU data in general.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The full-icu npm module can greatly simplify ICU data installation by\ndetecting the ICU version of the running node executable and downloading the\nappropriate data file. After installing the module through npm i full-icu,\nthe data file will be available at ./node_modules/full-icu. This path can be\nthen passed either to NODE_ICU_DATA or --icu-data-dir as shown above to\nenable full Intl support.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Providing ICU data at runtime" } @@ -11023,6 +10863,696 @@ ] }, { + "textRaw": "Modules: ECMAScript modules", + "name": "Modules: ECMAScript modules", + "introduced_in": "v8.5.0", + "type": "misc", + "meta": { + "added": [ + "v8.5.0" + ], + "changes": [ + { + "version": [ + "v12.22.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/35781", + "description": "Stabilize modules implementation." + }, + { + "version": [ + "v12.20.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/35249", + "description": "Support for detection of CommonJS named exports." + }, + { + "version": "v12.20.0", + "pr-url": "https://github.com/nodejs/node/pull/31974", + "description": "Remove experimental modules warning." + }, + { + "version": [ + "v12.17.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/29866", + "description": "Loading ECMAScript modules no longer requires a command-line flag." + }, + { + "version": "v12.0.0", + "pr-url": "https://github.com/nodejs/node/pull/26745", + "description": "Add support for ES modules using `.js` file extension via `package.json` `\"type\"` field." + } + ] + }, + "stability": 2, + "stabilityText": "Stable", + "miscs": [ + { + "textRaw": "Introduction", + "name": "esm", + "desc": "

                                                                                                                                                                                                                                                      ECMAScript modules are the official standard format to package JavaScript\ncode for reuse. Modules are defined using a variety of import and\nexport statements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example of an ES module exports a function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // addTwo.mjs\nfunction addTwo(num) {\n  return num + 2;\n}\n\nexport { addTwo };\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example of an ES module imports the function from addTwo.mjs:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // app.mjs\nimport { addTwo } from './addTwo.mjs';\n\n// Prints: 6\nconsole.log(addTwo(4));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js fully supports ECMAScript modules as they are currently specified and\nprovides interoperability between them and its original module format,\nCommonJS.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "esm" + }, + { + "textRaw": "Enabling", + "name": "Enabling", + "type": "misc", + "desc": "

                                                                                                                                                                                                                                                      Node.js treats JavaScript code as CommonJS modules by default.\nAuthors can tell Node.js to treat JavaScript code as ECMAScript modules\nvia the .mjs file extension, the package.json \"type\" field, or the\n--input-type flag. See\nModules: Packages for more\ndetails.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      \n\n\n\n\n\n\n\n\n\n\n\n\n

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "Packages", + "name": "packages", + "desc": "

                                                                                                                                                                                                                                                      This section was moved to Modules: Packages.

                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "Packages" + }, + { + "textRaw": "`import` Specifiers", + "name": "`import`_specifiers", + "modules": [ + { + "textRaw": "Terminology", + "name": "terminology", + "desc": "

                                                                                                                                                                                                                                                      The specifier of an import statement is the string after the from keyword,\ne.g. 'path' in import { sep } from 'path'. Specifiers are also used in\nexport from statements, and as the argument to an import() expression.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are four types of specifiers:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Bare specifiers like 'some-package'. They refer to an entry point of a\npackage by the package name.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Deep import specifiers like 'some-package/lib/shuffle.mjs'. They refer to\na path within a package prefixed by the package name.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Relative specifiers like './startup.js' or '../config.mjs'. They refer\nto a path relative to the location of the importing file.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Absolute specifiers like 'file:///opt/nodejs/config.js'. They refer\ndirectly and explicitly to a full path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Bare specifiers, and the bare specifier portion of deep import specifiers, are\nstrings; but everything else in a specifier is a URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      file:, node:, and data: URLs are supported. A specifier like\n'https://example.com/app.js' may be supported by browsers but it is not\nsupported in Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Specifiers may not begin with / or //. These are reserved for potential\nfuture use. The root of the current volume may be referenced via file:///.

                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "`node:` Imports", + "name": "`node:`_imports", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      node: URLs are supported as a means to load Node.js builtin modules. This\nURL scheme allows for builtin modules to be referenced by valid absolute URL\nstrings.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import fs from 'node:fs/promises';\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`node:` Imports" + }, + { + "textRaw": "`data:` Imports", + "name": "`data:`_imports", + "meta": { + "added": [ + "v12.10.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      data: URLs are supported for importing with the following MIME types:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • text/javascript for ES Modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • application/json for JSON
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • application/wasm for Wasm
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      data: URLs only resolve Bare specifiers for builtin modules\nand Absolute specifiers. Resolving\nRelative specifiers does not work because data: is not a\nspecial scheme. For example, attempting to load ./foo\nfrom data:text/javascript,import \"./foo\"; fails to resolve because there\nis no concept of relative resolution for data: URLs. An example of a data:\nURLs being used is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import 'data:text/javascript,console.log(\"hello!\");';\nimport _ from 'data:application/json,\"world!\"';\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`data:` Imports" + } + ], + "type": "module", + "displayName": "Terminology" + } + ], + "type": "misc", + "displayName": "`import` Specifiers" + }, + { + "textRaw": "Differences between ES modules and CommonJS", + "name": "differences_between_es_modules_and_commonjs", + "modules": [ + { + "textRaw": "Mandatory file extensions", + "name": "mandatory_file_extensions", + "desc": "

                                                                                                                                                                                                                                                      A file extension must be provided when using the import keyword. Directory\nindexes (e.g. './startup/index.js') must also be fully specified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This behavior matches how import behaves in browser environments, assuming a\ntypically configured server.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Mandatory file extensions" + }, + { + "textRaw": "No `NODE_PATH`", + "name": "no_`node_path`", + "desc": "

                                                                                                                                                                                                                                                      NODE_PATH is not part of resolving import specifiers. Please use symlinks\nif this behavior is desired.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "No `NODE_PATH`" + }, + { + "textRaw": "No `require`, `exports`, `module.exports`, `__filename`, `__dirname`", + "name": "no_`require`,_`exports`,_`module.exports`,_`__filename`,_`__dirname`", + "desc": "

                                                                                                                                                                                                                                                      These CommonJS variables are not available in ES modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      require can be imported into an ES module using module.createRequire().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Equivalents of __filename and __dirname can be created inside of each file\nvia import.meta.url.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import { fileURLToPath } from 'url';\nimport { dirname } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "No `require`, `exports`, `module.exports`, `__filename`, `__dirname`" + }, + { + "textRaw": "No `require.resolve`", + "name": "no_`require.resolve`", + "desc": "

                                                                                                                                                                                                                                                      Former use cases relying on require.resolve to determine the resolved path\nof a module can be supported via import.meta.resolve, which is experimental\nand supported via the --experimental-import-meta-resolve flag:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      (async () => {\n  const dependencyAsset = await import.meta.resolve('component-lib/asset.css');\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      import.meta.resolve also accepts a second argument which is the parent module\nfrom which to resolve from:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      (async () => {\n  // Equivalent to import.meta.resolve('./dep')\n  await import.meta.resolve('./dep', import.meta.url);\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is asynchronous because the ES module resolver in Node.js is\nasynchronous. With the introduction of Top-Level Await, these use cases\nwill be easier as they won't require an async function wrapper.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "No `require.resolve`" + }, + { + "textRaw": "No `require.extensions`", + "name": "no_`require.extensions`", + "desc": "

                                                                                                                                                                                                                                                      require.extensions is not used by import. The expectation is that loader\nhooks can provide this workflow in the future.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "No `require.extensions`" + }, + { + "textRaw": "No `require.cache`", + "name": "no_`require.cache`", + "desc": "

                                                                                                                                                                                                                                                      require.cache is not used by import. It has a separate cache.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "No `require.cache`" + }, + { + "textRaw": "URL-based paths", + "name": "url-based_paths", + "desc": "

                                                                                                                                                                                                                                                      ES modules are resolved and cached based upon\nURL semantics. This means that files containing\nspecial characters such as # and ? need to be escaped.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Modules are loaded multiple times if the import specifier used to resolve\nthem has a different query or fragment.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import './foo.mjs?query=1'; // loads ./foo.mjs with query of \"?query=1\"\nimport './foo.mjs?query=2'; // loads ./foo.mjs with query of \"?query=2\"\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For now, only modules using the file: protocol can be loaded.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "URL-based paths" + } + ], + "type": "misc", + "displayName": "Differences between ES modules and CommonJS" + }, + { + "textRaw": "Interoperability with CommonJS", + "name": "interoperability_with_commonjs", + "modules": [ + { + "textRaw": "`require`", + "name": "`require`", + "desc": "

                                                                                                                                                                                                                                                      require always treats the files it references as CommonJS. This applies\nwhether require is used the traditional way within a CommonJS environment, or\nin an ES module environment using module.createRequire().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To include an ES module into CommonJS, use import().

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`require`" + }, + { + "textRaw": "`import` statements", + "name": "`import`_statements", + "desc": "

                                                                                                                                                                                                                                                      An import statement can reference an ES module or a CommonJS module.\nimport statements are permitted only in ES modules. For similar functionality\nin CommonJS, see import().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When importing CommonJS modules, the\nmodule.exports object is provided as the default export. Named exports may be\navailable, provided by static analysis as a convenience for better ecosystem\ncompatibility.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Additional experimental flags are available for importing\nWasm modules or\nJSON modules. For importing native modules or\nJSON modules unflagged, see module.createRequire().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The specifier of an import statement (the string after the from keyword)\ncan either be an URL-style relative path like './file.mjs' or a package name\nlike 'fs'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Like in CommonJS, files within packages can be accessed by appending a path to\nthe package name; unless the package’s package.json contains an\n\"exports\" field, in which case files within packages need to be accessed\nvia the path defined in \"exports\".

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import { sin, cos } from 'geometry/trigonometry-functions.mjs';\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`import` statements" + }, + { + "textRaw": "`import()` expressions", + "name": "`import()`_expressions", + "desc": "

                                                                                                                                                                                                                                                      Dynamic import() is supported in both CommonJS and ES modules. It can be\nused to include ES module files from CommonJS code.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`import()` expressions" + } + ], + "type": "misc", + "displayName": "Interoperability with CommonJS" + }, + { + "textRaw": "CommonJS Namespaces", + "name": "commonjs_namespaces", + "desc": "

                                                                                                                                                                                                                                                      CommonJS modules consist of a module.exports object which can be of any type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When importing a CommonJS module, it can be reliably imported using the ES\nmodule default import or its corresponding sugar syntax:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import { default as cjs } from 'cjs';\n\n// The following import statement is \"syntax sugar\" (equivalent but sweeter)\n// for `{ default as cjsSugar }` in the above import statement:\nimport cjsSugar from 'cjs';\n\nconsole.log(cjs);\nconsole.log(cjs === cjsSugar);\n// Prints:\n//   <module.exports>\n//   true\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ECMAScript Module Namespace representation of a CommonJS module is always\na namespace with a default export key pointing to the CommonJS\nmodule.exports value.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This Module Namespace Exotic Object can be directly observed either when using\nimport * as m from 'cjs' or a dynamic import:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import * as m from 'cjs';\nconsole.log(m);\nconsole.log(m === await import('cjs'));\n// Prints:\n//   [Module] { default: <module.exports> }\n//   true\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For better compatibility with existing usage in the JS ecosystem, Node.js\nin addition attempts to determine the CommonJS named exports of every imported\nCommonJS module to provide them as separate ES module exports using a static\nanalysis process.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, consider a CommonJS module written:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // cjs.cjs\nexports.name = 'exported';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The preceding module supports named imports in ES modules:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import { name } from './cjs.cjs';\nconsole.log(name);\n// Prints: 'exported'\n\nimport cjs from './cjs.cjs';\nconsole.log(cjs);\n// Prints: { name: 'exported' }\n\nimport * as m from './cjs.cjs';\nconsole.log(m);\n// Prints: [Module] { default: { name: 'exported' }, name: 'exported' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As can be seen from the last example of the Module Namespace Exotic Object being\nlogged, the name export is copied off of the module.exports object and set\ndirectly on the ES module namespace when the module is imported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Live binding updates or new exports added to module.exports are not detected\nfor these named exports.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The detection of named exports is based on common syntax patterns but does not\nalways correctly detect named exports. In these cases, using the default\nimport form described above can be a better option.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Named exports detection covers many common export patterns, reexport patterns\nand build tool and transpiler outputs. See cjs-module-lexer for the exact\nsemantics implemented.

                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "CommonJS Namespaces" + }, + { + "textRaw": "Builtin modules", + "name": "builtin_modules", + "desc": "

                                                                                                                                                                                                                                                      Core modules provide named exports of their public API. A\ndefault export is also provided which is the value of the CommonJS exports.\nThe default export can be used for, among other things, modifying the named\nexports. Named exports of builtin modules are updated only by calling\nmodule.syncBuiltinESMExports().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import EventEmitter from 'events';\nconst e = new EventEmitter();\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import { readFile } from 'fs';\nreadFile('./foo.txt', (err, source) => {\n  if (err) {\n    console.error(err);\n  } else {\n    console.log(source);\n  }\n});\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import fs, { readFileSync } from 'fs';\nimport { syncBuiltinESMExports } from 'module';\n\nfs.readFileSync = () => Buffer.from('Hello, ESM');\nsyncBuiltinESMExports();\n\nfs.readFileSync === readFileSync;\n
                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "Builtin modules" + }, + { + "textRaw": "CommonJS, JSON, and native modules", + "name": "commonjs,_json,_and_native_modules", + "desc": "

                                                                                                                                                                                                                                                      CommonJS, JSON, and native modules can be used with\nmodule.createRequire().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // cjs.cjs\nmodule.exports = 'cjs';\n\n// esm.mjs\nimport { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\n\nconst cjs = require('./cjs.cjs');\ncjs === 'cjs'; // true\n
                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "CommonJS, JSON, and native modules" + }, + { + "textRaw": "Experimental JSON modules", + "name": "experimental_json_modules", + "desc": "

                                                                                                                                                                                                                                                      Currently importing JSON modules are only supported in the commonjs mode\nand are loaded using the CJS loader. WHATWG JSON modules specification are\nstill being standardized, and are experimentally supported by including the\nadditional flag --experimental-json-modules when running Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the --experimental-json-modules flag is included, both the\ncommonjs and module mode use the new experimental JSON\nloader. The imported JSON only exposes a default. There is no\nsupport for named exports. A cache entry is created in the CommonJS\ncache to avoid duplication. The same object is returned in\nCommonJS if the JSON module has already been imported from the\nsame path.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Assuming an index.mjs with

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import packageConfig from './package.json';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The --experimental-json-modules flag is needed for the module\nto work.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node index.mjs # fails\nnode --experimental-json-modules index.mjs # works\n
                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "Experimental JSON modules" + }, + { + "textRaw": "Experimental Wasm modules", + "name": "experimental_wasm_modules", + "desc": "

                                                                                                                                                                                                                                                      Importing Web Assembly modules is supported under the\n--experimental-wasm-modules flag, allowing any .wasm files to be\nimported as normal modules while also supporting their module imports.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This integration is in line with the\nES Module Integration Proposal for Web Assembly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, an index.mjs containing:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import * as M from './module.wasm';\nconsole.log(M);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      executed under:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --experimental-wasm-modules index.mjs\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      would provide the exports interface for the instantiation of module.wasm.

                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "Experimental Wasm modules" + }, + { + "textRaw": "Experimental loaders", + "name": "Experimental loaders", + "type": "misc", + "desc": "

                                                                                                                                                                                                                                                      Note: This API is currently being redesigned and will still change.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To customize the default module resolution, loader hooks can optionally be\nprovided via a --experimental-loader ./loader-name.mjs argument to Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When hooks are used they only apply to ES module loading and not to any\nCommonJS modules loaded.

                                                                                                                                                                                                                                                      ", + "miscs": [ + { + "textRaw": "Hooks", + "name": "hooks", + "methods": [ + { + "textRaw": "`resolve(specifier, context, defaultResolve)`", + "type": "method", + "name": "resolve", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The resolve hook returns the resolved file URL for a given module specifier\nand parent URL. The module specifier is the string in an import statement or\nimport() expression, and the parent URL is the URL of the module that imported\nthis one, or undefined if this is the main entry point for the application.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The conditions property on the context is an array of conditions for\nConditional exports that apply to this resolution request. They can be used\nfor looking up conditional mappings elsewhere or to modify the list when calling\nthe default resolution logic.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The current package exports conditions are always in\nthe context.conditions array passed into the hook. To guarantee default\nNode.js module specifier resolution behavior when calling defaultResolve, the\ncontext.conditions array passed to it must include all elements of the\ncontext.conditions array originally passed into the resolve hook.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string} specifier\n * @param {{\n *   conditions: !Array<string>,\n *   parentURL: !(string | undefined),\n * }} context\n * @param {Function} defaultResolve\n * @returns {Promise<{ url: string }>}\n */\nexport async function resolve(specifier, context, defaultResolve) {\n  const { parentURL = null } = context;\n  if (Math.random() > 0.5) { // Some condition.\n    // For some or all specifiers, do some custom logic for resolving.\n    // Always return an object of the form {url: <string>}.\n    return {\n      url: parentURL ?\n        new URL(specifier, parentURL).href :\n        new URL(specifier).href,\n    };\n  }\n  if (Math.random() < 0.5) { // Another condition.\n    // When calling `defaultResolve`, the arguments can be modified. In this\n    // case it's adding another value for matching conditional exports.\n    return defaultResolve(specifier, {\n      ...context,\n      conditions: [...context.conditions, 'another-condition'],\n    });\n  }\n  // Defer to Node.js for all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n
                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`getFormat(url, context, defaultGetFormat)`", + "type": "method", + "name": "getFormat", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The getFormat hook provides a way to define a custom method of determining how\na URL should be interpreted. The format returned also affects what the\nacceptable forms of source values are for a module when parsing. This can be one\nof the following:

                                                                                                                                                                                                                                                      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                      formatDescriptionAcceptable Types For source Returned by getSource or transformSource
                                                                                                                                                                                                                                                      'builtin'Load a Node.js builtin moduleNot applicable
                                                                                                                                                                                                                                                      'dynamic'Use a dynamic instantiate hookNot applicable
                                                                                                                                                                                                                                                      'commonjs'Load a Node.js CommonJS moduleNot applicable
                                                                                                                                                                                                                                                      'json'Load a JSON file{ string, ArrayBuffer, TypedArray }
                                                                                                                                                                                                                                                      'module'Load an ES module{ string, ArrayBuffer, TypedArray }
                                                                                                                                                                                                                                                      'wasm'Load a WebAssembly module{ ArrayBuffer, TypedArray }
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: These types all correspond to classes defined in ECMAScript.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Note: If the source value of a text-based format (i.e., 'json', 'module') is\nnot a string, it is converted to a string using util.TextDecoder.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string} url\n * @param {Object} context (currently empty)\n * @param {Function} defaultGetFormat\n * @returns {Promise<{ format: string }>}\n */\nexport async function getFormat(url, context, defaultGetFormat) {\n  if (Math.random() > 0.5) { // Some condition.\n    // For some or all URLs, do some custom logic for determining format.\n    // Always return an object of the form {format: <string>}, where the\n    // format is one of the strings in the preceding table.\n    return {\n      format: 'module',\n    };\n  }\n  // Defer to Node.js for all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n
                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`getSource(url, context, defaultGetSource)`", + "type": "method", + "name": "getSource", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The getSource hook provides a way to define a custom method for retrieving\nthe source code of an ES module specifier. This would allow a loader to\npotentially avoid reading files from disk.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string} url\n * @param {{ format: string }} context\n * @param {Function} defaultGetSource\n * @returns {Promise<{ source: !(string | SharedArrayBuffer | Uint8Array) }>}\n */\nexport async function getSource(url, context, defaultGetSource) {\n  const { format } = context;\n  if (Math.random() > 0.5) { // Some condition.\n    // For some or all URLs, do some custom logic for retrieving the source.\n    // Always return an object of the form {source: <string|buffer>}.\n    return {\n      source: '...',\n    };\n  }\n  // Defer to Node.js for all other URLs.\n  return defaultGetSource(url, context, defaultGetSource);\n}\n
                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`transformSource(source, context, defaultTransformSource)`", + "type": "method", + "name": "transformSource", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                      NODE_OPTIONS='--experimental-loader ./custom-loader.mjs' node x.js\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The transformSource hook provides a way to modify the source code of a loaded\nES module file after the source string has been loaded but before Node.js has\ndone anything with it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this hook is used to convert unknown-to-Node.js file types into executable\nJavaScript, a resolve hook is also necessary in order to register any\nunknown-to-Node.js file extensions. See the transpiler loader example below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {!(string | SharedArrayBuffer | Uint8Array)} source\n * @param {{\n *   format: string,\n *   url: string,\n * }} context\n * @param {Function} defaultTransformSource\n * @returns {Promise<{ source: !(string | SharedArrayBuffer | Uint8Array) }>}\n */\nexport async function transformSource(source, context, defaultTransformSource) {\n  const { url, format } = context;\n  if (Math.random() > 0.5) { // Some condition.\n    // For some or all URLs, do some custom logic for modifying the source.\n    // Always return an object of the form {source: <string|buffer>}.\n    return {\n      source: '...',\n    };\n  }\n  // Defer to Node.js for all other sources.\n  return defaultTransformSource(source, context, defaultTransformSource);\n}\n
                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`getGlobalPreloadCode()`", + "type": "method", + "name": "getGlobalPreloadCode", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Sometimes it might be necessary to run some code inside of the same global scope\nthat the application runs in. This hook allows the return of a string that is\nrun as sloppy-mode script on startup.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Similar to how CommonJS wrappers work, the code runs in an implicit function\nscope. The only argument is a require-like function that can be used to load\nbuiltins like \"fs\": getBuiltin(request: string).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the code needs more advanced require features, it has to construct\nits own require using module.createRequire().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @returns {string} Code to run before application startup\n */\nexport function getGlobalPreloadCode() {\n  return `\\\nglobalThis.someInjectedProperty = 42;\nconsole.log('I just set some globals!');\n\nconst { createRequire } = getBuiltin('module');\n\nconst require = createRequire(process.cwd() + '/<preload>');\n// [...]\n`;\n}\n
                                                                                                                                                                                                                                                      " + } + ], + "modules": [ + { + "textRaw": "dynamicInstantiate hook", + "name": "dynamicinstantiate_hook", + "desc": "
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To create a custom dynamic module that doesn't correspond to one of the\nexisting format interpretations, the dynamicInstantiate hook can be used.\nThis hook is called only for modules that return format: 'dynamic' from\nthe getFormat hook.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      /**\n * @param {string} url\n * @returns {object} response\n * @returns {array} response.exports\n * @returns {function} response.execute\n */\nexport async function dynamicInstantiate(url) {\n  return {\n    exports: ['customExportName'],\n    execute: (exports) => {\n      // Get and set functions provided for pre-allocated export names\n      exports.customExportName.set('value');\n    }\n  };\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With the list of module exports provided upfront, the execute function will\nthen be called at the exact point of module evaluation order for that module\nin the import tree.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Examples

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The various loader hooks can be used together to accomplish wide-ranging\ncustomizations of Node.js’ code loading and evaluation behaviors.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "dynamicInstantiate hook" + }, + { + "textRaw": "HTTPS loader", + "name": "https_loader", + "desc": "

                                                                                                                                                                                                                                                      In current Node.js, specifiers starting with https:// are unsupported. The\nloader below registers hooks to enable rudimentary support for such specifiers.\nWhile this may seem like a significant improvement to Node.js core\nfunctionality, there are substantial downsides to actually using this loader:\nperformance is much slower than loading files from disk, there is no caching,\nand there is no security.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // https-loader.mjs\nimport { get } from 'https';\n\nexport function resolve(specifier, context, defaultResolve) {\n  const { parentURL = null } = context;\n\n  // Normally Node.js would error on specifiers starting with 'https://', so\n  // this hook intercepts them and converts them into absolute URLs to be\n  // passed along to the later hooks below.\n  if (specifier.startsWith('https://')) {\n    return {\n      url: specifier\n    };\n  } else if (parentURL && parentURL.startsWith('https://')) {\n    return {\n      url: new URL(specifier, parentURL).href\n    };\n  }\n\n  // Let Node.js handle all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n\nexport function getFormat(url, context, defaultGetFormat) {\n  // This loader assumes all network-provided JavaScript is ES module code.\n  if (url.startsWith('https://')) {\n    return {\n      format: 'module'\n    };\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n\nexport function getSource(url, context, defaultGetSource) {\n  // For JavaScript to be loaded over the network, we need to fetch and\n  // return it.\n  if (url.startsWith('https://')) {\n    return new Promise((resolve, reject) => {\n      get(url, (res) => {\n        let data = '';\n        res.on('data', (chunk) => data += chunk);\n        res.on('end', () => resolve({ source: data }));\n      }).on('error', (err) => reject(err));\n    });\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetSource(url, context, defaultGetSource);\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // main.mjs\nimport { VERSION } from 'https://coffeescript.org/browser-compiler-modern/coffeescript.js';\n\nconsole.log(VERSION);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With the preceding loader, running\nnode --experimental-loader ./https-loader.mjs ./main.mjs\nprints the current version of CoffeeScript per the module at the URL in\nmain.mjs.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "HTTPS loader" + }, + { + "textRaw": "Transpiler loader", + "name": "transpiler_loader", + "desc": "

                                                                                                                                                                                                                                                      Sources that are in formats Node.js doesn’t understand can be converted into\nJavaScript using the transformSource hook. Before that hook gets called,\nhowever, other hooks need to tell Node.js not to throw an error on unknown file\ntypes; and to tell Node.js how to load this new file type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This is less performant than transpiling source files before running\nNode.js; a transpiler loader should only be used for development and testing\npurposes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // coffeescript-loader.mjs\nimport { URL, pathToFileURL } from 'url';\nimport CoffeeScript from 'coffeescript';\n\nconst baseURL = pathToFileURL(`${process.cwd()}/`).href;\n\n// CoffeeScript files end in .coffee, .litcoffee or .coffee.md.\nconst extensionsRegex = /\\.coffee$|\\.litcoffee$|\\.coffee\\.md$/;\n\nexport function resolve(specifier, context, defaultResolve) {\n  const { parentURL = baseURL } = context;\n\n  // Node.js normally errors on unknown file extensions, so return a URL for\n  // specifiers ending in the CoffeeScript file extensions.\n  if (extensionsRegex.test(specifier)) {\n    return {\n      url: new URL(specifier, parentURL).href\n    };\n  }\n\n  // Let Node.js handle all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n\nexport function getFormat(url, context, defaultGetFormat) {\n  // Now that we patched resolve to let CoffeeScript URLs through, we need to\n  // tell Node.js what format such URLs should be interpreted as. For the\n  // purposes of this loader, all CoffeeScript URLs are ES modules.\n  if (extensionsRegex.test(url)) {\n    return {\n      format: 'module'\n    };\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n\nexport function transformSource(source, context, defaultTransformSource) {\n  const { url, format } = context;\n\n  if (extensionsRegex.test(url)) {\n    return {\n      source: CoffeeScript.compile(source, { bare: true })\n    };\n  }\n\n  // Let Node.js handle all other sources.\n  return defaultTransformSource(source, context, defaultTransformSource);\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      # main.coffee\nimport { scream } from './scream.coffee'\nconsole.log scream 'hello, world'\n\nimport { version } from 'process'\nconsole.log \"Brought to you by Node.js version #{version}\"\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      # scream.coffee\nexport scream = (str) -> str.toUpperCase()\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With the preceding loader, running\nnode --experimental-loader ./coffeescript-loader.mjs main.coffee\ncauses main.coffee to be turned into JavaScript after its source code is\nloaded from disk but before Node.js executes it; and so on for any .coffee,\n.litcoffee or .coffee.md files referenced via import statements of any\nloaded file.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Transpiler loader" + } + ], + "type": "misc", + "displayName": "Hooks" + } + ] + }, + { + "textRaw": "Resolution algorithm", + "name": "resolution_algorithm", + "modules": [ + { + "textRaw": "Features", + "name": "features", + "desc": "

                                                                                                                                                                                                                                                      The resolver has the following properties:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • FileURL-based resolution as is used by ES modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Support for builtin module loading
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Relative and absolute URL resolution
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • No default extensions
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • No folder mains
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Bare specifier package resolution lookup through node_modules
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Features" + }, + { + "textRaw": "Resolver algorithm", + "name": "resolver_algorithm", + "desc": "

                                                                                                                                                                                                                                                      The algorithm to load an ES module specifier is given through the\nESM_RESOLVE method below. It returns the resolved URL for a\nmodule specifier relative to a parentURL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The algorithm to determine the module format of a resolved URL is\nprovided by ESM_FORMAT, which returns the unique module\nformat for any file. The \"module\" format is returned for an ECMAScript\nModule, while the \"commonjs\" format is used to indicate loading through the\nlegacy CommonJS loader. Additional formats such as \"addon\" can be extended in\nfuture updates.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the following algorithms, all subroutine errors are propagated as errors\nof these top-level routines unless stated otherwise.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      defaultConditions is the conditional environment name array,\n[\"node\", \"import\"].

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resolver can throw the following errors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Invalid Module Specifier: Module specifier is an invalid URL, package name\nor package subpath specifier.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Invalid Package Configuration: package.json configuration is invalid or\ncontains an invalid configuration.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Invalid Package Target: Package exports or imports define a target module\nfor the package that is an invalid type or string target.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Package Path Not Exported: Package exports do not define or permit a target\nsubpath in the package for the given module.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Package Import Not Defined: Package imports do not define the specifier.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Module Not Found: The package or module requested does not exist.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Resolver algorithm" + }, + { + "textRaw": "Resolver Algorithm Specification", + "name": "resolver_algorithm_specification", + "desc": "

                                                                                                                                                                                                                                                      ESM_RESOLVE(specifier, parentURL)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let resolved be undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If specifier is a valid URL, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set resolved to the result of parsing and reserializing\nspecifier as a URL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Otherwise, if specifier starts with \"/\", \"./\" or \"../\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set resolved to the URL resolution of specifier relative to\nparentURL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Otherwise, if specifier starts with \"#\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set resolved to the destructured value of the result of\nPACKAGE_IMPORTS_RESOLVE(specifier, parentURL,\ndefaultConditions).
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. Otherwise,\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Note: specifier is now a bare specifier.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Set resolved the result of\nPACKAGE_RESOLVE(specifier, parentURL).
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. If resolved contains any percent encodings of \"/\" or \"\\\" (\"%2f\"\nand \"%5C\" respectively), then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      13. If the file at resolved is a directory, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Unsupported Directory Import error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      14. \n
                                                                                                                                                                                                                                                      15. If the file at resolved does not exist, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw a Module Not Found error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      16. \n
                                                                                                                                                                                                                                                      17. Set resolved to the real path of resolved.
                                                                                                                                                                                                                                                      18. \n
                                                                                                                                                                                                                                                      19. Let format be the result of ESM_FORMAT(resolved).
                                                                                                                                                                                                                                                      20. \n
                                                                                                                                                                                                                                                      21. Load resolved as module format, format.
                                                                                                                                                                                                                                                      22. \n
                                                                                                                                                                                                                                                      23. Return resolved.
                                                                                                                                                                                                                                                      24. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_RESOLVE(packageSpecifier, parentURL)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let packageName be undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If packageSpecifier is an empty string, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. If packageSpecifier does not start with \"@\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set packageName to the substring of packageSpecifier until the first\n\"/\" separator or the end of the string.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Otherwise,\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If packageSpecifier does not contain a \"/\" separator, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Set packageName to the substring of packageSpecifier\nuntil the second \"/\" separator or the end of the string.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. If packageName starts with \".\" or contains \"\\\" or \"%\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. Let packageSubpath be \".\" concatenated with the substring of\npackageSpecifier from the position at the length of packageName.
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      13. Let selfUrl be the result of\nPACKAGE_SELF_RESOLVE(packageName, packageSubpath, parentURL).
                                                                                                                                                                                                                                                      14. \n
                                                                                                                                                                                                                                                      15. If selfUrl is not undefined, return selfUrl.
                                                                                                                                                                                                                                                      16. \n
                                                                                                                                                                                                                                                      17. If packageSubpath is \".\" and packageName is a Node.js builtin\nmodule, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the string \"node:\" concatenated with packageSpecifier.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      18. \n
                                                                                                                                                                                                                                                      19. While parentURL is not the file system root,\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let packageURL be the URL resolution of \"node_modules/\"\nconcatenated with packageSpecifier, relative to parentURL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Set parentURL to the parent folder URL of parentURL.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. If the folder at packageURL does not exist, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Set parentURL to the parent URL path of parentURL.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Continue the next loop iteration.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        9. If pjson is not null and pjson.exports is not null or\nundefined, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let exports be pjson.exports.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Return the resolved destructured value of the result of\nPACKAGE_EXPORTS_RESOLVE(packageURL, packageSubpath,\npjson.exports, defaultConditions).
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        10. \n
                                                                                                                                                                                                                                                        11. Otherwise, if packageSubpath is equal to \".\", then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return the result applying the legacy LOAD_AS_DIRECTORY\nCommonJS resolver to packageURL, throwing a Module Not Found\nerror for no resolution.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        12. \n
                                                                                                                                                                                                                                                        13. Otherwise,\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return the URL resolution of packageSubpath in packageURL.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        14. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      20. \n
                                                                                                                                                                                                                                                      21. Throw a Module Not Found error.
                                                                                                                                                                                                                                                      22. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_SELF_RESOLVE(packageName, packageSubpath, parentURL)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let packageURL be the result of READ_PACKAGE_SCOPE(parentURL).
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If packageURL is null, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return undefined.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. If pjson is null or if pjson.exports is null or\nundefined, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return undefined.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. If pjson.name is equal to packageName, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the resolved destructured value of the result of\nPACKAGE_EXPORTS_RESOLVE(packageURL, subpath, pjson.exports,\ndefaultConditions).
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. Otherwise, return undefined.
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_EXPORTS_RESOLVE(packageURL, subpath, exports, conditions)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If exports is an Object with both a key starting with \".\" and a key not\nstarting with \".\", throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If subpath is equal to \".\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let mainExport be undefined.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. If exports is a String or Array, or an Object containing no keys\nstarting with \".\", then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Set mainExport to exports.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Otherwise if exports is an Object containing a \".\" property, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Set mainExport to exports[\".\"].
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. If mainExport is not undefined, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, mainExport, \"\", false, false,\nconditions).
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. If resolved is not null or undefined, then\n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Return resolved.
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Otherwise, if exports is an Object and all keys of exports start with\n\".\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let matchKey be the string \"./\" concatenated with subpath.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Let resolvedMatch be result of PACKAGE_IMPORTS_EXPORTS_RESOLVE(\nmatchKey, exports, packageURL, false, conditions).
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. If resolvedMatch.resolve is not null or undefined, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return resolvedMatch.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Throw a Package Path Not Exported error.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_IMPORTS_RESOLVE(specifier, parentURL, conditions)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Assert: specifier begins with \"#\".
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If specifier is exactly equal to \"#\" or starts with \"#/\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Let packageURL be the result of READ_PACKAGE_SCOPE(parentURL).
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. If packageURL is not null, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. If pjson.imports is a non-null Object, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let resolvedMatch be the result of\nPACKAGE_IMPORTS_EXPORTS_RESOLVE(specifier, pjson.imports,\npackageURL, true, conditions).
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. If resolvedMatch.resolve is not null or undefined, then\n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Return resolvedMatch.
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. Throw a Package Import Not Defined error.
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_IMPORTS_EXPORTS_RESOLVE(matchKey, matchObj, packageURL,\nisImports, conditions)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If matchKey is a key of matchObj, and does not end in \"*\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let target be the value of matchObj[matchKey].
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, target, \"\", false, isImports, conditions).
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Return the object { resolved, exact: true }.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Let expansionKeys be the list of keys of matchObj ending in \"/\"\nor \"*\", sorted by length descending.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. For each key expansionKey in expansionKeys, do\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If expansionKey ends in \"*\" and matchKey starts with but is\nnot equal to the substring of expansionKey excluding the last \"*\"\ncharacter, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let target be the value of matchObj[expansionKey].
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Let subpath be the substring of matchKey starting at the\nindex of the length of expansionKey minus one.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          5. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, target, subpath, true, isImports,\nconditions).
                                                                                                                                                                                                                                                          6. \n
                                                                                                                                                                                                                                                          7. Return the object { resolved, exact: true }.
                                                                                                                                                                                                                                                          8. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. If matchKey starts with expansionKey, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let target be the value of matchObj[expansionKey].
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Let subpath be the substring of matchKey starting at the\nindex of the length of expansionKey.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          5. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, target, subpath, false, isImports,\nconditions).
                                                                                                                                                                                                                                                          6. \n
                                                                                                                                                                                                                                                          7. Return the object { resolved, exact: false }.
                                                                                                                                                                                                                                                          8. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Return the object { resolved: null, exact: true }.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      PACKAGE_TARGET_RESOLVE(packageURL, target, subpath, pattern,\ninternal, conditions)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If target is a String, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If pattern is false, subpath has non-zero length and target\ndoes not end with \"/\", throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. If target does not start with \"./\", then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. If internal is true and target does not start with \"../\" or\n\"/\" and is not a valid URL, then\n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. If pattern is true, then\n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                              1. Return PACKAGE_RESOLVE(target with every instance of\n\"*\" replaced by subpath, packageURL + \"/\")_.
                                                                                                                                                                                                                                                              2. \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            3. Return PACKAGE_RESOLVE(target + subpath,\npackageURL + \"/\")_.
                                                                                                                                                                                                                                                            4. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Otherwise, throw an Invalid Package Target error.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. If target split on \"/\" or \"\\\" contains any \".\", \"..\" or\n\"node_modules\" segments after the first segment, throw an\nInvalid Package Target error.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. Let resolvedTarget be the URL resolution of the concatenation of\npackageURL and target.
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        9. Assert: resolvedTarget is contained in packageURL.
                                                                                                                                                                                                                                                        10. \n
                                                                                                                                                                                                                                                        11. If subpath split on \"/\" or \"\\\" contains any \".\", \"..\" or\n\"node_modules\" segments, throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        12. \n
                                                                                                                                                                                                                                                        13. If pattern is true, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return the URL resolution of resolvedTarget with every instance of\n\"*\" replaced with subpath.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        14. \n
                                                                                                                                                                                                                                                        15. Otherwise,\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return the URL resolution of the concatenation of subpath and\nresolvedTarget.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        16. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Otherwise, if target is a non-null Object, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If exports contains any index property keys, as defined in ECMA-262\n6.1.7 Array Index, throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. For each property p of target, in object insertion order as,\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. If p equals \"default\" or conditions contains an entry for p,\nthen\n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Let targetValue be the value of the p property in target.
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            3. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, targetValue, subpath, pattern, internal,\nconditions).
                                                                                                                                                                                                                                                            4. \n
                                                                                                                                                                                                                                                            5. If resolved is equal to undefined, continue the loop.
                                                                                                                                                                                                                                                            6. \n
                                                                                                                                                                                                                                                            7. Return resolved.
                                                                                                                                                                                                                                                            8. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Return undefined.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Otherwise, if target is an Array, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If _target.length is zero, return null.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. For each item targetValue in target, do\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, targetValue, subpath, pattern, internal,\nconditions), continuing the loop on any Invalid Package Target\nerror.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. If resolved is undefined, continue the loop.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          5. Return resolved.
                                                                                                                                                                                                                                                          6. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Return or throw the last fallback resolution null return or error.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Otherwise, if target is null, return null.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. Otherwise throw an Invalid Package Target error.
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ESM_FORMAT(url)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Assert: url corresponds to an existing file.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Let pjson be the result of READ_PACKAGE_SCOPE(url).
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. If url ends in \".mjs\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return \"module\".
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. If url ends in \".cjs\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return \"commonjs\".
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. If pjson?.type exists and is \"module\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If url ends in \".js\", then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return \"module\".
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Throw an Unsupported File Extension error.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. Otherwise,\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Unsupported File Extension error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      READ_PACKAGE_SCOPE(url)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let scopeURL be url.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. While scopeURL is not the file system root,\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set scopeURL to the parent URL of scopeURL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. If scopeURL ends in a \"node_modules\" path segment, return null.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Let pjson be the result of READ_PACKAGE_JSON(scopeURL).
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. If pjson is not null, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return pjson.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Return null.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      READ_PACKAGE_JSON(packageURL)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let pjsonURL be the resolution of \"package.json\" within packageURL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If the file at pjsonURL does not exist, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return null.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. If the file at packageURL does not parse as valid JSON, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Return the parsed JSON source of the file at pjsonURL.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Resolver Algorithm Specification" + }, + { + "textRaw": "Customizing ESM specifier resolution algorithm", + "name": "customizing_esm_specifier_resolution_algorithm", + "desc": "

                                                                                                                                                                                                                                                      The current specifier resolution does not support all default behavior of\nthe CommonJS loader. One of the behavior differences is automatic resolution\nof file extensions and the ability to import directories that have an index\nfile.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The --experimental-specifier-resolution=[mode] flag can be used to customize\nthe extension resolution algorithm. The default mode is explicit, which\nrequires the full path to a module be provided to the loader. To enable the\nautomatic extension resolution and importing from directories that include an\nindex file use the node mode.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node index.mjs\nsuccess!\n$ node index # Failure!\nError: Cannot find module\n$ node --experimental-specifier-resolution=node index\nsuccess!\n
                                                                                                                                                                                                                                                      \n", + "type": "module", + "displayName": "Customizing ESM specifier resolution algorithm" + } + ], + "type": "misc", + "displayName": "Resolution algorithm" + } + ], + "properties": [ + { + "textRaw": "`meta` {Object}", + "type": "Object", + "name": "meta", + "desc": "

                                                                                                                                                                                                                                                      The import.meta metaproperty is an Object that contains the following\nproperty:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • url <string> The absolute file: URL of the module.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + } + ] + }, + { + "textRaw": "Modules: Packages", + "name": "Modules: Packages", + "introduced_in": "v12.20.0", + "type": "misc", + "meta": { + "changes": [ + { + "version": "v12.20.0", + "pr-url": "https://github.com/nodejs/node/pull/34718", + "description": "Add support for `\"exports\"` patterns." + }, + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34117", + "description": "Add package `\"imports\"` field." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31001", + "description": "Unflag conditional exports." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31002", + "description": "Unflag self-referencing a package using its name." + }, + { + "version": "v12.7.0", + "pr-url": "https://github.com/nodejs/node/pull/28568", + "description": "Introduce `\"exports\"` `package.json` field as a more powerful alternative to the classic `\"main\"` field." + }, + { + "version": "v12.0.0", + "pr-url": "https://github.com/nodejs/node/pull/26745", + "description": "Add support for ES modules using `.js` file extension via `package.json` `\"type\"` field." + } + ] + }, + "miscs": [ + { + "textRaw": "Introduction", + "name": "introduction", + "desc": "

                                                                                                                                                                                                                                                      A package is a folder tree described by a package.json file. The package\nconsists of the folder containing the package.json file and all subfolders\nuntil the next folder containing another package.json file, or a folder\nnamed node_modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This page provides guidance for package authors writing package.json files\nalong with a reference for the package.json fields defined by Node.js.

                                                                                                                                                                                                                                                      ", + "type": "misc", + "displayName": "Introduction" + }, + { + "textRaw": "Determining module system", + "name": "determining_module_system", + "desc": "

                                                                                                                                                                                                                                                      Node.js will treat the following as ES modules when passed to node as the\ninitial input, or when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Files ending in .mjs.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Files ending in .js when the nearest parent package.json file contains a\ntop-level \"type\" field with a value of \"module\".

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Strings passed in as an argument to --eval, or piped to node via STDIN,\nwith the flag --input-type=module.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will treat as CommonJS all other forms of input, such as .js files\nwhere the nearest parent package.json file contains no top-level \"type\"\nfield, or string input without the flag --input-type. This behavior is to\npreserve backward compatibility. However, now that Node.js supports both\nCommonJS and ES modules, it is best to be explicit whenever possible. Node.js\nwill treat the following as CommonJS when passed to node as the initial input,\nor when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Files ending in .cjs.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Files ending in .js when the nearest parent package.json file contains a\ntop-level field \"type\" with a value of \"commonjs\".

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Strings passed in as an argument to --eval or --print, or piped to node\nvia STDIN, with the flag --input-type=commonjs.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Package authors should include the \"type\" field, even in packages where\nall sources are CommonJS. Being explicit about the type of the package will\nfuture-proof the package in case the default type of Node.js ever changes, and\nit will also make things easier for build tools and loaders to determine how the\nfiles in the package should be interpreted.

                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "`package.json` and file extensions", + "name": "`package.json`_and_file_extensions", + "desc": "

                                                                                                                                                                                                                                                      Within a package, the package.json \"type\" field defines how\nNode.js should interpret .js files. If a package.json file does not have a\n\"type\" field, .js files are treated as CommonJS.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A package.json \"type\" value of \"module\" tells Node.js to interpret .js\nfiles within that package as using ES module syntax.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"type\" field applies not only to initial entry points (node my-app.js)\nbut also to files referenced by import statements and import() expressions.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // my-app.js, treated as an ES module because there is a package.json\n// file in the same folder with \"type\": \"module\".\n\nimport './startup/init.js';\n// Loaded as ES module since ./startup contains no package.json file,\n// and therefore inherits the \"type\" value from one level up.\n\nimport 'commonjs-package';\n// Loaded as CommonJS since ./node_modules/commonjs-package/package.json\n// lacks a \"type\" field or contains \"type\": \"commonjs\".\n\nimport './node_modules/commonjs-package/index.js';\n// Loaded as CommonJS since ./node_modules/commonjs-package/package.json\n// lacks a \"type\" field or contains \"type\": \"commonjs\".\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Files ending with .mjs are always loaded as ES modules regardless of\nthe nearest parent package.json.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Files ending with .cjs are always loaded as CommonJS regardless of the\nnearest parent package.json.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import './legacy-file.cjs';\n// Loaded as CommonJS since .cjs is always loaded as CommonJS.\n\nimport 'commonjs-package/src/index.mjs';\n// Loaded as ES module since .mjs is always loaded as ES module.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The .mjs and .cjs extensions can be used to mix types within the same\npackage:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Within a \"type\": \"module\" package, Node.js can be instructed to\ninterpret a particular file as CommonJS by naming it with a .cjs\nextension (since both .js and .mjs files are treated as ES modules within\na \"module\" package).

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Within a \"type\": \"commonjs\" package, Node.js can be instructed to\ninterpret a particular file as an ES module by naming it with an .mjs\nextension (since both .js and .cjs files are treated as CommonJS within a\n\"commonjs\" package).

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`package.json` and file extensions" + }, + { + "textRaw": "`--input-type` flag", + "name": "`--input-type`_flag", + "desc": "

                                                                                                                                                                                                                                                      Strings passed in as an argument to --eval (or -e), or piped to node via\nSTDIN, are treated as ES modules when the --input-type=module flag\nis set.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --input-type=module --eval \"import { sep } from 'path'; console.log(sep);\"\n\necho \"import { sep } from 'path'; console.log(sep);\" | node --input-type=module\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For completeness there is also --input-type=commonjs, for explicitly running\nstring input as CommonJS. This is the default behavior if --input-type is\nunspecified.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`--input-type` flag" + } + ], + "type": "misc", + "displayName": "Determining module system" + }, + { + "textRaw": "Package entry points", + "name": "package_entry_points", + "desc": "

                                                                                                                                                                                                                                                      In a package’s package.json file, two fields can define entry points for a\npackage: \"main\" and \"exports\". The \"main\" field is supported\nin all versions of Node.js, but its capabilities are limited: it only defines\nthe main entry point of the package.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"exports\" field provides an alternative to \"main\" where the\npackage main entry point can be defined while also encapsulating the package,\npreventing any other entry points besides those defined in \"exports\".\nThis encapsulation allows module authors to define a public interface for\ntheir package.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both \"exports\" and \"main\" are defined, the \"exports\" field\ntakes precedence over \"main\". \"exports\" are not specific to ES\nmodules or CommonJS; \"main\" is overridden by \"exports\" if it\nexists. As such \"main\" cannot be used as a fallback for CommonJS but it\ncan be used as a fallback for legacy versions of Node.js that do not support the\n\"exports\" field.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Conditional exports can be used within \"exports\" to define different\npackage entry points per environment, including whether the package is\nreferenced via require or via import. For more information about supporting\nboth CommonJS and ES Modules in a single package please consult\nthe dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: Introducing the \"exports\" field prevents consumers of a\npackage from using any entry points that are not defined, including the\npackage.json (e.g. require('your-package/package.json'). This will\nlikely be a breaking change.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To make the introduction of \"exports\" non-breaking, ensure that every\npreviously supported entry point is exported. It is best to explicitly specify\nentry points so that the package’s public API is well-defined. For example,\na project that previous exported main, lib,\nfeature, and the package.json could use the following package.exports:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"name\": \"my-mod\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib\": \"./lib/index.js\",\n    \"./lib/index\": \"./lib/index.js\",\n    \"./lib/index.js\": \"./lib/index.js\",\n    \"./feature\": \"./feature/index.js\",\n    \"./feature/index.js\": \"./feature/index.js\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively a project could choose to export entire folders:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"name\": \"my-mod\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib\": \"./lib/index.js\",\n    \"./lib/*\": \"./lib/*.js\",\n    \"./feature\": \"./feature/index.js\",\n    \"./feature/*\": \"./feature/*.js\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As a last resort, package encapsulation can be disabled entirely by creating an\nexport for the root of the package \"./*\": \"./*\". This exposes every file\nin the package at the cost of disabling the encapsulation and potential tooling\nbenefits this provides. As the ES Module loader in Node.js enforces the use of\nthe full specifier path, exporting the root rather than being explicit\nabout entry is less expressive than either of the prior examples. Not only\nis encapsulation lost but module consumers are unable to\nimport feature from 'my-mod/feature' as they need to provide the full\npath import feature from 'my-mod/feature/index.js.

                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "Main entry point export", + "name": "main_entry_point_export", + "desc": "

                                                                                                                                                                                                                                                      To set the main entry point for a package, it is advisable to define both\n\"exports\" and \"main\" in the package’s package.json file:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\",\n  \"exports\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the \"exports\" field is defined, all subpaths of the package are\nencapsulated and no longer available to importers. For example,\nrequire('pkg/subpath.js') throws an ERR_PACKAGE_PATH_NOT_EXPORTED\nerror.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This encapsulation of exports provides more reliable guarantees\nabout package interfaces for tools and when handling semver upgrades for a\npackage. It is not a strong encapsulation since a direct require of any\nabsolute subpath of the package such as\nrequire('/path/to/node_modules/pkg/subpath.js') will still load subpath.js.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Main entry point export" + }, + { + "textRaw": "Subpath exports", + "name": "subpath_exports", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                      When using the \"exports\" field, custom subpaths can be defined along\nwith the main entry point by treating the main entry point as the\n\".\" subpath:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \".\": \"./main.js\",\n    \"./submodule\": \"./src/submodule.js\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Now only the defined subpath in \"exports\" can be imported by a consumer:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import submodule from 'es-module-package/submodule';\n// Loads ./node_modules/es-module-package/src/submodule.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While other subpaths will error:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import submodule from 'es-module-package/private-module.js';\n// Throws ERR_PACKAGE_PATH_NOT_EXPORTED\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Subpath exports" + }, + { + "textRaw": "Subpath imports", + "name": "subpath_imports", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                      In addition to the \"exports\" field, it is possible to define internal\npackage import maps that only apply to import specifiers from within the package\nitself.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Entries in the imports field must always start with # to ensure they are\ndisambiguated from package specifiers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, the imports field can be used to gain the benefits of conditional\nexports for internal modules:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // package.json\n{\n  \"imports\": {\n    \"#dep\": {\n      \"node\": \"dep-node-native\",\n      \"default\": \"./dep-polyfill.js\"\n    }\n  },\n  \"dependencies\": {\n    \"dep-node-native\": \"^1.0.0\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      where import '#dep' does not get the resolution of the external package\ndep-node-native (including its exports in turn), and instead gets the local\nfile ./dep-polyfill.js relative to the package in other environments.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike the \"exports\" field, the \"imports\" field permits mapping to external\npackages.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resolution rules for the imports field are otherwise\nanalogous to the exports field.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Subpath imports" + }, + { + "textRaw": "Subpath patterns", + "name": "subpath_patterns", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                      For packages with a small number of exports or imports, we recommend\nexplicitly listing each exports subpath entry. But for packages that have\nlarge numbers of subpaths, this might cause package.json bloat and\nmaintenance issues.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For these use cases, subpath export patterns can be used instead:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/es-module-package/package.json\n{\n  \"exports\": {\n    \"./features/*\": \"./src/features/*.js\"\n  },\n  \"imports\": {\n    \"#internal/*\": \"./src/internal/*.js\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The left hand matching pattern must always end in *. All instances of * on\nthe right hand side will then be replaced with this value, including if it\ncontains any / separators.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import featureX from 'es-module-package/features/x';\n// Loads ./node_modules/es-module-package/src/features/x.js\n\nimport featureY from 'es-module-package/features/y/y';\n// Loads ./node_modules/es-module-package/src/features/y/y.js\n\nimport internalZ from '#internal/z';\n// Loads ./node_modules/es-module-package/src/internal/z.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This is a direct static replacement without any special handling for file\nextensions. In the previous example, pkg/features/x.json would be resolved to\n./src/features/x.json.js in the mapping.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The property of exports being statically enumerable is maintained with exports\npatterns since the individual exports for a package can be determined by\ntreating the right hand side target pattern as a ** glob against the list of\nfiles within the package. Because node_modules paths are forbidden in exports\ntargets, this expansion is dependent on only the files of the package itself.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Subpath patterns" + }, + { + "textRaw": "Exports sugar", + "name": "exports_sugar", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                      If the \".\" export is the only export, the \"exports\" field provides sugar\nfor this case being the direct \"exports\" field value.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the \".\" export has a fallback array or string value, then the\n\"exports\" field can be set to this value directly.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"exports\": {\n    \".\": \"./main.js\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      can be written:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"exports\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Exports sugar" + }, + { + "textRaw": "Conditional exports", + "name": "conditional_exports", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                      Conditional exports provide a way to map to different paths depending on\ncertain conditions. They are supported for both CommonJS and ES module imports.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, a package that wants to provide different ES module exports for\nrequire() and import can be written:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // package.json\n{\n  \"main\": \"./main-require.cjs\",\n  \"exports\": {\n    \"import\": \"./main-module.js\",\n    \"require\": \"./main-require.cjs\"\n  },\n  \"type\": \"module\"\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js supports the following conditions out of the box:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \"import\" - matches when the package is loaded via import or\nimport(), or via any top-level import or resolve operation by the\nECMAScript module loader. Applies regardless of the module format of the\ntarget file. Always mutually exclusive with \"require\".
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"require\" - matches when the package is loaded via require(). The\nreferenced file should be loadable with require() although the condition\nmatches regardless of the module format of the target file. Expected\nformats include CommonJS, JSON, and native addons but not ES modules as\nrequire() doesn't support them. Always mutually exclusive with\n\"import\".
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"node\" - matches for any Node.js environment. Can be a CommonJS or ES\nmodule file. This condition should always come after \"import\" or\n\"require\".
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"default\" - the generic fallback that always matches. Can be a CommonJS\nor ES module file. This condition should always come last.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Within the \"exports\" object, key order is significant. During condition\nmatching, earlier entries have higher priority and take precedence over later\nentries. The general rule is that conditions should be from most specific to\nleast specific in object order.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Other conditions such as \"browser\", \"electron\", \"deno\", \"react-native\",\netc., are unknown to Node.js, and thus ignored. Runtimes or tools other than\nNode.js can use them at their discretion. Further restrictions, definitions, or\nguidance on condition names might occur in the future.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using the \"import\" and \"require\" conditions can lead to some hazards,\nwhich are further explained in the dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Conditional exports can also be extended to exports subpaths, for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \".\": \"./main.js\",\n    \"./feature\": {\n      \"node\": \"./feature-node.js\",\n      \"default\": \"./feature.js\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Defines a package where require('pkg/feature') and import 'pkg/feature'\ncould provide different implementations between Node.js and other JS\nenvironments.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using environment branches, always include a \"default\" condition where\npossible. Providing a \"default\" condition ensures that any unknown JS\nenvironments are able to use this universal implementation, which helps avoid\nthese JS environments from having to pretend to be existing environments in\norder to support packages with conditional exports. For this reason, using\n\"node\" and \"default\" condition branches is usually preferable to using\n\"node\" and \"browser\" condition branches.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Conditional exports" + }, + { + "textRaw": "Nested conditions", + "name": "nested_conditions", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                      In addition to direct mappings, Node.js also supports nested condition objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, to define a package that only has dual mode entry points for\nuse in Node.js but not the browser:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \"node\": {\n      \"import\": \"./feature-node.mjs\",\n      \"require\": \"./feature-node.cjs\"\n    },\n    \"default\": \"./feature.mjs\",\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Conditions continue to be matched in order as with flat conditions. If\na nested conditional does not have any mapping it will continue checking\nthe remaining conditions of the parent condition. In this way nested\nconditions behave analogously to nested JavaScript if statements.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Nested conditions" + }, + { + "textRaw": "Resolving user conditions", + "name": "resolving_user_conditions", + "desc": "

                                                                                                                                                                                                                                                      When running Node.js, custom user conditions can be added with the\n--conditions flag:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --conditions=development main.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      which would then resolve the \"development\" condition in package imports and\nexports, while resolving the existing \"node\", \"default\", \"import\", and\n\"require\" conditions as appropriate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any number of custom conditions can be set with repeat flags.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Resolving user conditions" + }, + { + "textRaw": "Self-referencing a package using its name", + "name": "self-referencing_a_package_using_its_name", + "desc": "

                                                                                                                                                                                                                                                      Within a package, the values defined in the package’s\npackage.json \"exports\" field can be referenced via the package’s name.\nFor example, assuming the package.json is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // package.json\n{\n  \"name\": \"a-package\",\n  \"exports\": {\n    \".\": \"./main.mjs\",\n    \"./foo\": \"./foo.js\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Then any module in that package can reference an export in the package itself:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./a-module.mjs\nimport { something } from 'a-package'; // Imports \"something\" from ./main.mjs.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Self-referencing is available only if package.json has \"exports\", and\nwill allow importing only what that \"exports\" (in the package.json)\nallows. So the code below, given the previous package, will generate a runtime\nerror:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./another-module.mjs\n\n// Imports \"another\" from ./m.mjs. Fails because\n// the \"package.json\" \"exports\" field\n// does not provide an export named \"./m.mjs\".\nimport { another } from 'a-package/m.mjs';\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Self-referencing is also available when using require, both in an ES module,\nand in a CommonJS one. For example, this code will also work:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./a-module.js\nconst { something } = require('a-package/foo'); // Loads from ./foo.js.\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Self-referencing a package using its name" + } + ], + "type": "misc", + "displayName": "Package entry points" + }, + { + "textRaw": "Dual CommonJS/ES module packages", + "name": "dual_commonjs/es_module_packages", + "desc": "

                                                                                                                                                                                                                                                      Prior to the introduction of support for ES modules in Node.js, it was a common\npattern for package authors to include both CommonJS and ES module JavaScript\nsources in their package, with package.json \"main\" specifying the\nCommonJS entry point and package.json \"module\" specifying the ES module\nentry point.\nThis enabled Node.js to run the CommonJS entry point while build tools such as\nbundlers used the ES module entry point, since Node.js ignored (and still\nignores) the top-level \"module\" field.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js can now run ES module entry points, and a package can contain both\nCommonJS and ES module entry points (either via separate specifiers such as\n'pkg' and 'pkg/es-module', or both at the same specifier via Conditional\nexports). Unlike in the scenario where \"module\" is only used by bundlers,\nor ES module files are transpiled into CommonJS on the fly before evaluation by\nNode.js, the files referenced by the ES module entry point are evaluated as ES\nmodules.

                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "Dual package hazard", + "name": "dual_package_hazard", + "desc": "

                                                                                                                                                                                                                                                      When an application is using a package that provides both CommonJS and ES module\nsources, there is a risk of certain bugs if both versions of the package get\nloaded. This potential comes from the fact that the pkgInstance created by\nconst pkgInstance = require('pkg') is not the same as the pkgInstance\ncreated by import pkgInstance from 'pkg' (or an alternative main path like\n'pkg/module'). This is the “dual package hazard,” where two versions of the\nsame package can be loaded within the same runtime environment. While it is\nunlikely that an application or package would intentionally load both versions\ndirectly, it is common for an application to load one version while a dependency\nof the application loads the other version. This hazard can happen because\nNode.js supports intermixing CommonJS and ES modules, and can lead to unexpected\nbehavior.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the package main export is a constructor, an instanceof comparison of\ninstances created by the two versions returns false, and if the export is an\nobject, properties added to one (like pkgInstance.foo = 3) are not present on\nthe other. This differs from how import and require statements work in\nall-CommonJS or all-ES module environments, respectively, and therefore is\nsurprising to users. It also differs from the behavior users are familiar with\nwhen using transpilation via tools like Babel or esm.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Dual package hazard" + }, + { + "textRaw": "Writing dual packages while avoiding or minimizing hazards", + "name": "writing_dual_packages_while_avoiding_or_minimizing_hazards", + "desc": "

                                                                                                                                                                                                                                                      First, the hazard described in the previous section occurs when a package\ncontains both CommonJS and ES module sources and both sources are provided for\nuse in Node.js, either via separate main entry points or exported paths. A\npackage might instead be written where any version of Node.js receives only\nCommonJS sources, and any separate ES module sources the package might contain\nare intended only for other environments such as browsers. Such a package\nwould be usable by any version of Node.js, since import can refer to CommonJS\nfiles; but it would not provide any of the advantages of using ES module syntax.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A package might also switch from CommonJS to ES module syntax in a breaking\nchange version bump. This has the disadvantage that the\nnewest version of the package would only be usable in ES module-supporting\nversions of Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Every pattern has tradeoffs, but there are two broad approaches that satisfy the\nfollowing conditions:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. The package is usable via both require and import.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. The package is usable in both current Node.js and older versions of Node.js\nthat lack support for ES modules.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. The package main entry point, e.g. 'pkg' can be used by both require to\nresolve to a CommonJS file and by import to resolve to an ES module file.\n(And likewise for exported paths, e.g. 'pkg/feature'.)
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. The package provides named exports, e.g. import { name } from 'pkg' rather\nthan import pkg from 'pkg'; pkg.name.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. The package is potentially usable in other ES module environments such as\nbrowsers.
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. The hazards described in the previous section are avoided or minimized.
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "Approach #1: Use an ES module wrapper", + "name": "approach_#1:_use_an_es_module_wrapper", + "desc": "

                                                                                                                                                                                                                                                      Write the package in CommonJS or transpile ES module sources into CommonJS, and\ncreate an ES module wrapper file that defines the named exports. Using\nConditional exports, the ES module wrapper is used for import and the\nCommonJS entry point for require.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \"import\": \"./wrapper.mjs\",\n    \"require\": \"./index.cjs\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The preceding example uses explicit extensions .mjs and .cjs.\nIf your files use the .js extension, \"type\": \"module\" will cause such files\nto be treated as ES modules, just as \"type\": \"commonjs\" would cause them\nto be treated as CommonJS.\nSee Enabling.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/index.cjs\nexports.name = 'value';\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/wrapper.mjs\nimport cjsModule from './index.cjs';\nexport const name = cjsModule.name;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In this example, the name from import { name } from 'pkg' is the same\nsingleton as the name from const { name } = require('pkg'). Therefore ===\nreturns true when comparing the two names and the divergent specifier hazard\nis avoided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the module is not simply a list of named exports, but rather contains a\nunique function or object export like module.exports = function () { ... },\nor if support in the wrapper for the import pkg from 'pkg' pattern is desired,\nthen the wrapper would instead be written to export the default optionally\nalong with any named exports as well:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import cjsModule from './index.cjs';\nexport const name = cjsModule.name;\nexport default cjsModule;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • The package is currently written in CommonJS and the author would prefer not\nto refactor it into ES module syntax, but wishes to provide named exports for\nES module consumers.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The package has other packages that depend on it, and the end user might\ninstall both this package and those other packages. For example a utilities\npackage is used directly in an application, and a utilities-plus package\nadds a few more functions to utilities. Because the wrapper exports\nunderlying CommonJS files, it doesn’t matter if utilities-plus is written in\nCommonJS or ES module syntax; it will work either way.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The package stores internal state, and the package author would prefer not to\nrefactor the package to isolate its state management. See the next section.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A variant of this approach not requiring conditional exports for consumers could\nbe to add an export, e.g. \"./module\", to point to an all-ES module-syntax\nversion of the package. This could be used via import 'pkg/module' by users\nwho are certain that the CommonJS version will not be loaded anywhere in the\napplication, such as by dependencies; or if the CommonJS version can be loaded\nbut doesn’t affect the ES module version (for example, because the package is\nstateless):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \".\": \"./index.cjs\",\n    \"./module\": \"./wrapper.mjs\"\n  }\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Approach #1: Use an ES module wrapper" + }, + { + "textRaw": "Approach #2: Isolate state", + "name": "approach_#2:_isolate_state", + "desc": "

                                                                                                                                                                                                                                                      A package.json file can define the separate CommonJS and ES module entry\npoints directly:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \"import\": \"./index.mjs\",\n    \"require\": \"./index.cjs\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This can be done if both the CommonJS and ES module versions of the package are\nequivalent, for example because one is the transpiled output of the other; and\nthe package’s management of state is carefully isolated (or the package is\nstateless).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The reason that state is an issue is because both the CommonJS and ES module\nversions of the package might get used within an application; for example, the\nuser’s application code could import the ES module version while a dependency\nrequires the CommonJS version. If that were to occur, two copies of the\npackage would be loaded in memory and therefore two separate states would be\npresent. This would likely cause hard-to-troubleshoot bugs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Aside from writing a stateless package (if JavaScript’s Math were a package,\nfor example, it would be stateless as all of its methods are static), there are\nsome ways to isolate state so that it’s shared between the potentially loaded\nCommonJS and ES module instances of the package:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. \n

                                                                                                                                                                                                                                                        If possible, contain all state within an instantiated object. JavaScript’s\nDate, for example, needs to be instantiated to contain state; if it were a\npackage, it would be used like this:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        import Date from 'date';\nconst someDate = new Date();\n// someDate contains state; Date does not\n
                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        The new keyword isn’t required; a package’s function can return a new\nobject, or modify a passed-in object, to keep the state external to the\npackage.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        Isolate the state in one or more CommonJS files that are shared between the\nCommonJS and ES module versions of the package. For example, if the CommonJS\nand ES module entry points are index.cjs and index.mjs, respectively:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        // ./node_modules/pkg/index.cjs\nconst state = require('./state.cjs');\nmodule.exports.state = state;\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        // ./node_modules/pkg/index.mjs\nimport state from './state.cjs';\nexport {\n  state\n};\n
                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        Even if pkg is used via both require and import in an application (for\nexample, via import in application code and via require by a dependency)\neach reference of pkg will contain the same state; and modifying that\nstate from either module system will apply to both.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any plugins that attach to the package’s singleton would need to separately\nattach to both the CommonJS and ES module singletons.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • The package is currently written in ES module syntax and the package author\nwants that version to be used wherever such syntax is supported.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The package is stateless or its state can be isolated without too much\ndifficulty.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The package is unlikely to have other public packages that depend on it, or if\nit does, the package is stateless or has state that need not be shared between\ndependencies or with the overall application.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Even with isolated state, there is still the cost of possible extra code\nexecution between the CommonJS and ES module versions of a package.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As with the previous approach, a variant of this approach not requiring\nconditional exports for consumers could be to add an export, e.g.\n\"./module\", to point to an all-ES module-syntax version of the package:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \".\": \"./index.cjs\",\n    \"./module\": \"./index.mjs\"\n  }\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Approach #2: Isolate state" + } + ], + "type": "module", + "displayName": "Writing dual packages while avoiding or minimizing hazards" + } + ], + "type": "misc", + "displayName": "Dual CommonJS/ES module packages" + }, + { + "textRaw": "Node.js `package.json` field definitions", + "name": "node.js_`package.json`_field_definitions", + "desc": "

                                                                                                                                                                                                                                                      This section describes the fields used by the Node.js runtime. Other tools (such\nas npm) use\nadditional fields which are ignored by Node.js and not documented here.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following fields in package.json files are used in Node.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \"name\" - Relevant when using named imports within a package. Also used\nby package managers as the name of the package.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"type\" - The package type determining whether to load .js files as\nCommonJS or ES modules.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"exports\" - Package exports and conditional exports. When present,\nlimits which submodules can be loaded from within the package.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"main\" - The default module when loading the package, if exports is not\nspecified, and in versions of Node.js prior to the introduction of exports.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"imports\" - Package imports, for use by modules within the package\nitself.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "`\"name\"`", + "name": "`\"name\"`", + "meta": { + "added": [ + "v12.16.0" + ], + "changes": [ + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31002", + "description": "Remove the `--experimental-resolve-self` option." + } + ] + }, + "desc": "\n
                                                                                                                                                                                                                                                      {\n  \"name\": \"package-name\"\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"name\" field defines your package’s name. Publishing to the\nnpm registry requires a name that satisfies\ncertain requirements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"name\" field can be used in addition to the \"exports\" field to\nself-reference a package using its name.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`\"name\"`" + }, + { + "textRaw": "`\"type\"`", + "name": "`\"type\"`", + "meta": { + "added": [ + "v12.0.0" + ], + "changes": [ + { + "version": [ + "v12.17.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/29866", + "description": "Unflag `--experimental-modules`." + } + ] + }, + "desc": "\n

                                                                                                                                                                                                                                                      The \"type\" field defines the module format that Node.js uses for all\n.js files that have that package.json file as their nearest parent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Files ending with .js are loaded as ES modules when the nearest parent\npackage.json file contains a top-level field \"type\" with a value of\n\"module\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The nearest parent package.json is defined as the first package.json found\nwhen searching in the current folder, that folder’s parent, and so on up\nuntil a node_modules folder or the volume root is reached.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // package.json\n{\n  \"type\": \"module\"\n}\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      # In same folder as preceding package.json\nnode my-app.js # Runs as ES module\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the nearest parent package.json lacks a \"type\" field, or contains\n\"type\": \"commonjs\", .js files are treated as CommonJS. If the volume\nroot is reached and no package.json is found, .js files are treated as\nCommonJS.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      import statements of .js files are treated as ES modules if the nearest\nparent package.json contains \"type\": \"module\".

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // my-app.js, part of the same example as above\nimport './startup.js'; // Loaded as ES module because of package.json\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Regardless of the value of the \"type\" field, .mjs files are always treated\nas ES modules and .cjs files are always treated as CommonJS.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`\"type\"`" + }, + { + "textRaw": "`\"exports\"`", + "name": "`\"exports\"`", + "meta": { + "added": [ + "v12.7.0" + ], + "changes": [ + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/29978", + "description": "Implement conditional exports." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31001", + "description": "Remove the `--experimental-conditional-exports` option." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31008", + "description": "Implement logical conditional exports ordering." + }, + { + "version": [ + "v12.20.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/34718", + "description": "Add support for `\"exports\"` patterns." + } + ] + }, + "desc": "\n
                                                                                                                                                                                                                                                      {\n  \"exports\": \"./index.js\"\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"exports\" field allows defining the entry points of a package when\nimported by name loaded either via a node_modules lookup or a\nself-reference to its own name. It is supported in Node.js 12+ as an\nalternative to the \"main\" that can support defining subpath exports\nand conditional exports while encapsulating internal unexported modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Conditional Exports can also be used within \"exports\" to define different\npackage entry points per environment, including whether the package is\nreferenced via require or via import.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All paths defined in the \"exports\" must be relative file URLs starting with\n./.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`\"exports\"`" + }, + { + "textRaw": "`\"main\"`", + "name": "`\"main\"`", + "meta": { + "added": [ + "v0.4.0" + ], + "changes": [] + }, + "desc": "\n
                                                                                                                                                                                                                                                      {\n  \"main\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"main\" field defines the script that is used when the package directory\nis loaded via require(). Its value\nis interpreted as a path.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('./path/to/directory'); // This resolves to ./path/to/directory/main.js.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a package has an \"exports\" field, this will take precedence over the\n\"main\" field when importing the package by name.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`\"main\"`" + }, + { + "textRaw": "`\"imports\"`", + "name": "`\"imports\"`", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "\n
                                                                                                                                                                                                                                                      // package.json\n{\n  \"imports\": {\n    \"#dep\": {\n      \"node\": \"dep-node-native\",\n      \"default\": \"./dep-polyfill.js\"\n    }\n  },\n  \"dependencies\": {\n    \"dep-node-native\": \"^1.0.0\"\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Entries in the imports field must be strings starting with #.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Import maps permit mapping to external packages.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This field defines subpath imports for the current package.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`\"imports\"`" + } + ], + "type": "misc", + "displayName": "Node.js `package.json` field definitions" + } + ] + }, + { "textRaw": "Policies", "name": "policy", "introduced_in": "v11.8.0", @@ -11035,32 +11565,32 @@ "textRaw": "Enabling", "name": "Enabling", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      The --experimental-policy flag can be used to enable features for policies\nwhen loading modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once this has been set, all modules must conform to a policy manifest file\npassed to the flag:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --experimental-policy=policy.json app.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The policy manifest will be used to enforce constraints on code loaded by\nNode.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To mitigate tampering with policy files on disk, an integrity for\nthe policy file itself may be provided via --policy-integrity.\nThis allows running node and asserting the policy file contents\neven if the file is changed on disk.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --experimental-policy=policy.json --policy-integrity=\"sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0\" app.js\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The --experimental-policy flag can be used to enable features for policies\nwhen loading modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once this has been set, all modules must conform to a policy manifest file\npassed to the flag:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --experimental-policy=policy.json app.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The policy manifest will be used to enforce constraints on code loaded by\nNode.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To mitigate tampering with policy files on disk, an integrity for\nthe policy file itself may be provided via --policy-integrity.\nThis allows running node and asserting the policy file contents\neven if the file is changed on disk.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --experimental-policy=policy.json --policy-integrity=\"sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0\" app.js\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "Features", "name": "features", "modules": [ { - "textRaw": "Error Behavior", + "textRaw": "Error behavior", "name": "error_behavior", "desc": "

                                                                                                                                                                                                                                                      When a policy check fails, Node.js by default will throw an error.\nIt is possible to change the error behavior to one of a few possibilities\nby defining an \"onerror\" field in a policy manifest. The following values are\navailable to change the behavior:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \"exit\": will exit the process immediately.\nNo cleanup code will be allowed to run.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"log\": will log the error at the site of the failure.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \"throw\": will throw a JS error at the site of the failure. This is the\ndefault.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"onerror\": \"log\",\n  \"resources\": {\n    \"./app/checked.js\": {\n      \"integrity\": \"sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Error Behavior" + "displayName": "Error behavior" }, { - "textRaw": "Integrity Checks", + "textRaw": "Integrity checks", "name": "integrity_checks", "desc": "

                                                                                                                                                                                                                                                      Policy files must use integrity checks with Subresource Integrity strings\ncompatible with the browser\nintegrity attribute\nassociated with absolute URLs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using require() all resources involved in loading are checked for\nintegrity if a policy manifest has been specified. If a resource does not match\nthe integrity listed in the manifest, an error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An example policy file that would allow loading a file checked.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"resources\": {\n    \"./app/checked.js\": {\n      \"integrity\": \"sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Each resource listed in the policy manifest can be of one the following\nformats to determine its location:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. A relative url string to a resource from the manifest such as ./resource.js, ../resource.js, or /resource.js.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. A complete url string to a resource such as file:///resource.js.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When loading resources the entire URL must match including search parameters\nand hash fragment. ./a.js?b will not be used when attempting to load\n./a.js and vice versa.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To generate integrity strings, a script such as\nprintf \"sha384-$(cat checked.js | openssl dgst -sha384 -binary | base64)\"\ncan be used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integrity can be specified as the boolean value true to accept any\nbody for the resource which can be useful for local development. It is not\nrecommended in production since it would allow unexpected alteration of\nresources to be considered valid.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Integrity Checks" + "displayName": "Integrity checks" }, { - "textRaw": "Dependency Redirection", + "textRaw": "Dependency redirection", "name": "dependency_redirection", - "desc": "

                                                                                                                                                                                                                                                      An application may need to ship patched versions of modules or to prevent\nmodules from allowing all modules access to all other modules. Redirection\ncan be used by intercepting attempts to load the modules wishing to be\nreplaced.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"builtins\": [],\n  \"resources\": {\n    \"./app/checked.js\": {\n      \"dependencies\": {\n        \"fs\": true,\n        \"os\": \"./app/node_modules/alt-os\"\n      }\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dependencies are keyed by the requested string specifier and have values\nof either true or a string pointing to a module that will be resolved.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The specifier string does not perform any searching and must match exactly\nwhat is provided to the require(). Therefore, multiple specifiers may be\nneeded in the policy if require() uses multiple different strings to point\nto the same module (such as excluding the extension).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the value of the redirection is true the default searching algorithms will\nbe used to find the module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the value of the redirection is a string, it will be resolved relative to\nthe manifest and then immediately be used without searching.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any specifier string that is require()ed and not listed in the dependencies\nwill result in an error according to the policy.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Redirection will not prevent access to APIs through means such as direct access\nto require.cache and/or through module.constructor which allow access to\nloading modules. Policy redirection only affect specifiers to require().\nOther means such as to prevent undesired access to APIs through variables are\nnecessary to lock down that path of loading modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A boolean value of true for the dependencies map can be specified to allow a\nmodule to load any specifier without redirection. This can be useful for local\ndevelopment and may have some valid usage in production, but should be used\nonly with care after auditing a module to ensure its behavior is valid.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: Patched Dependency

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Redirected dependencies can provide attenuated or modified functionality as fits\nthe application. For example, log data about timing of function durations by\nwrapping the original:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const original = require('fn');\nmodule.exports = function fn(...args) {\n  console.time();\n  try {\n    return new.target ?\n      Reflect.construct(original, args) :\n      Reflect.apply(original, this, args);\n  } finally {\n    console.timeEnd();\n  }\n};\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An application may need to ship patched versions of modules or to prevent\nmodules from allowing all modules access to all other modules. Redirection\ncan be used by intercepting attempts to load the modules wishing to be\nreplaced.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      {\n  \"builtins\": [],\n  \"resources\": {\n    \"./app/checked.js\": {\n      \"dependencies\": {\n        \"fs\": true,\n        \"os\": \"./app/node_modules/alt-os\"\n      }\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dependencies are keyed by the requested string specifier and have values\nof either true or a string pointing to a module that will be resolved.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The specifier string does not perform any searching and must match exactly\nwhat is provided to the require(). Therefore, multiple specifiers may be\nneeded in the policy if require() uses multiple different strings to point\nto the same module (such as excluding the extension).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the value of the redirection is true the default searching algorithms will\nbe used to find the module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the value of the redirection is a string, it will be resolved relative to\nthe manifest and then immediately be used without searching.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any specifier string that is require()ed and not listed in the dependencies\nwill result in an error according to the policy.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Redirection will not prevent access to APIs through means such as direct access\nto require.cache and/or through module.constructor which allow access to\nloading modules. Policy redirection only affect specifiers to require().\nOther means such as to prevent undesired access to APIs through variables are\nnecessary to lock down that path of loading modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A boolean value of true for the dependencies map can be specified to allow a\nmodule to load any specifier without redirection. This can be useful for local\ndevelopment and may have some valid usage in production, but should be used\nonly with care after auditing a module to ensure its behavior is valid.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: Patched dependency

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Redirected dependencies can provide attenuated or modified functionality as fits\nthe application. For example, log data about timing of function durations by\nwrapping the original:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const original = require('fn');\nmodule.exports = function fn(...args) {\n  console.time();\n  try {\n    return new.target ?\n      Reflect.construct(original, args) :\n      Reflect.apply(original, this, args);\n  } finally {\n    console.timeEnd();\n  }\n};\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Dependency Redirection" + "displayName": "Dependency redirection" } ], "type": "misc", @@ -11069,7 +11599,7 @@ ] }, { - "textRaw": "Diagnostic Report", + "textRaw": "Diagnostic report", "name": "report", "introduced_in": "v11.8.0", "type": "misc", @@ -11080,7 +11610,7 @@ { "textRaw": "Usage", "name": "usage", - "desc": "
                                                                                                                                                                                                                                                      node --report-uncaught-exception --report-on-signal \\\n--report-on-fatalerror app.js\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-uncaught-exception Enables report to be generated on\nun-caught exceptions. Useful when inspecting JavaScript stack in conjunction\nwith native stack and other runtime environment data.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-on-signal Enables report to be generated upon receiving\nthe specified (or predefined) signal to the running Node.js process. (See below\non how to modify the signal that triggers the report.) Default signal is SIGUSR2.\nUseful when a report needs to be triggered from another program.\nApplication monitors may leverage this feature to collect report at regular\nintervals and plot rich set of internal runtime data to their views.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Signal based report generation is not supported in Windows.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Under normal circumstances, there is no need to modify the report triggering\nsignal. However, if SIGUSR2 is already used for other purposes, then this\nflag helps to change the signal for report generation and preserve the original\nmeaning of SIGUSR2 for the said purposes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-on-fatalerror Enables the report to be triggered on\nfatal errors (internal errors within the Node.js runtime, such as out of memory)\nthat leads to termination of the application. Useful to inspect various\ndiagnostic data elements such as heap, stack, event loop state, resource\nconsumption etc. to reason about the fatal error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-compact Write reports in a compact format, single-line JSON, more\neasily consumable by log processing systems than the default multi-line format\ndesigned for human consumption.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-directory Location at which the report will be\ngenerated.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-filename Name of the file to which the report will be\nwritten.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-signal Sets or resets the signal for report generation\n(not supported on Windows). Default signal is SIGUSR2.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A report can also be triggered via an API call from a JavaScript application:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.report.writeReport();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function takes an optional additional argument filename, which is\nthe name of a file into which the report is written.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.report.writeReport('./foo.json');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function takes an optional additional argument err which is an Error\nobject that will be used as the context for the JavaScript stack printed in the\nreport. When using report to handle errors in a callback or an exception\nhandler, this allows the report to include the location of the original error as\nwell as where it was handled.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      try {\n  process.chdir('/non-existent-path');\n} catch (err) {\n  process.report.writeReport(err);\n}\n// Any other code\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both filename and error object are passed to writeReport() the\nerror object must be the second parameter.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      try {\n  process.chdir('/non-existent-path');\n} catch (err) {\n  process.report.writeReport(filename, err);\n}\n// Any other code\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The content of the diagnostic report can be returned as a JavaScript Object\nvia an API call from a JavaScript application:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const report = process.report.getReport();\nconsole.log(typeof report === 'object'); // true\n\n// Similar to process.report.writeReport() output\nconsole.log(JSON.stringify(report, null, 2));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function takes an optional additional argument err, which is an Error\nobject that will be used as the context for the JavaScript stack printed in the\nreport.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const report = process.report.getReport(new Error('custom error'));\nconsole.log(typeof report === 'object'); // true\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The API versions are useful when inspecting the runtime state from within\nthe application, in expectation of self-adjusting the resource consumption,\nload balancing, monitoring etc.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The content of the report consists of a header section containing the event\ntype, date, time, PID and Node.js version, sections containing JavaScript and\nnative stack traces, a section containing V8 heap information, a section\ncontaining libuv handle information and an OS platform information section\nshowing CPU and memory usage and system limits. An example report can be\ntriggered using the Node.js REPL:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> process.report.writeReport();\nWriting Node.js report to file: report.20181126.091102.8480.0.001.json\nNode.js report completed\n>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a report is written, start and end messages are issued to stderr\nand the filename of the report is returned to the caller. The default filename\nincludes the date, time, PID and a sequence number. The sequence number helps\nin associating the report dump with the runtime state if generated multiple\ntimes for the same Node.js process.

                                                                                                                                                                                                                                                      ", + "desc": "
                                                                                                                                                                                                                                                      node --report-uncaught-exception --report-on-signal \\\n--report-on-fatalerror app.js\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-uncaught-exception Enables report to be generated on\nun-caught exceptions. Useful when inspecting JavaScript stack in conjunction\nwith native stack and other runtime environment data.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-on-signal Enables report to be generated upon receiving\nthe specified (or predefined) signal to the running Node.js process. (See below\non how to modify the signal that triggers the report.) Default signal is SIGUSR2.\nUseful when a report needs to be triggered from another program.\nApplication monitors may leverage this feature to collect report at regular\nintervals and plot rich set of internal runtime data to their views.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Signal based report generation is not supported in Windows.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Under normal circumstances, there is no need to modify the report triggering\nsignal. However, if SIGUSR2 is already used for other purposes, then this\nflag helps to change the signal for report generation and preserve the original\nmeaning of SIGUSR2 for the said purposes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-on-fatalerror Enables the report to be triggered on\nfatal errors (internal errors within the Node.js runtime, such as out of memory)\nthat leads to termination of the application. Useful to inspect various\ndiagnostic data elements such as heap, stack, event loop state, resource\nconsumption etc. to reason about the fatal error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-compact Write reports in a compact format, single-line JSON, more\neasily consumable by log processing systems than the default multi-line format\ndesigned for human consumption.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-directory Location at which the report will be\ngenerated.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-filename Name of the file to which the report will be\nwritten.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        --report-signal Sets or resets the signal for report generation\n(not supported on Windows). Default signal is SIGUSR2.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A report can also be triggered via an API call from a JavaScript application:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.report.writeReport();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function takes an optional additional argument filename, which is\nthe name of a file into which the report is written.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.report.writeReport('./foo.json');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function takes an optional additional argument err which is an Error\nobject that will be used as the context for the JavaScript stack printed in the\nreport. When using report to handle errors in a callback or an exception\nhandler, this allows the report to include the location of the original error as\nwell as where it was handled.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      try {\n  process.chdir('/non-existent-path');\n} catch (err) {\n  process.report.writeReport(err);\n}\n// Any other code\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both filename and error object are passed to writeReport() the\nerror object must be the second parameter.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      try {\n  process.chdir('/non-existent-path');\n} catch (err) {\n  process.report.writeReport(filename, err);\n}\n// Any other code\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The content of the diagnostic report can be returned as a JavaScript Object\nvia an API call from a JavaScript application:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const report = process.report.getReport();\nconsole.log(typeof report === 'object'); // true\n\n// Similar to process.report.writeReport() output\nconsole.log(JSON.stringify(report, null, 2));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function takes an optional additional argument err, which is an Error\nobject that will be used as the context for the JavaScript stack printed in the\nreport.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const report = process.report.getReport(new Error('custom error'));\nconsole.log(typeof report === 'object'); // true\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The API versions are useful when inspecting the runtime state from within\nthe application, in expectation of self-adjusting the resource consumption,\nload balancing, monitoring etc.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The content of the report consists of a header section containing the event\ntype, date, time, PID and Node.js version, sections containing JavaScript and\nnative stack traces, a section containing V8 heap information, a section\ncontaining libuv handle information and an OS platform information section\nshowing CPU and memory usage and system limits. An example report can be\ntriggered using the Node.js REPL:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> process.report.writeReport();\nWriting Node.js report to file: report.20181126.091102.8480.0.001.json\nNode.js report completed\n>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a report is written, start and end messages are issued to stderr\nand the filename of the report is returned to the caller. The default filename\nincludes the date, time, PID and a sequence number. The sequence number helps\nin associating the report dump with the runtime state if generated multiple\ntimes for the same Node.js process.

                                                                                                                                                                                                                                                      ", "type": "misc", "displayName": "Usage" }, @@ -11092,7 +11622,7 @@ "displayName": "Configuration" }, { - "textRaw": "Interaction with Workers", + "textRaw": "Interaction with workers", "name": "interaction_with_workers", "meta": { "changes": [ @@ -11105,15 +11635,15 @@ }, "desc": "

                                                                                                                                                                                                                                                      Worker threads can create reports in the same way that the main thread\ndoes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Reports will include information on any Workers that are children of the current\nthread as part of the workers section, with each Worker generating a report\nin the standard report format.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The thread which is generating the report will wait for the reports from Worker\nthreads to finish. However, the latency for this will usually be low, as both\nrunning JavaScript and the event loop are interrupted to generate the report.

                                                                                                                                                                                                                                                      ", "type": "misc", - "displayName": "Interaction with Workers" + "displayName": "Interaction with workers" } ] } ], "modules": [ { - "textRaw": "Usage & Example", - "name": "usage_&_example", + "textRaw": "Usage and example", + "name": "usage_and_example", "introduced_in": "v0.10.0", "miscs": [ { @@ -11125,7 +11655,7 @@ } ], "type": "module", - "displayName": "Usage & Example" + "displayName": "Usage and example" }, { "textRaw": "Assert", @@ -11133,7 +11663,7 @@ "introduced_in": "v0.1.21", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The assert module provides a set of assertion functions for verifying\ninvariants.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/assert.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The assert module provides a set of assertion functions for verifying\ninvariants.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Strict assertion mode", @@ -11145,7 +11675,7 @@ "changes": [ { "version": "v12.16.2", - "description": "Changed \"strict mode\" to \"strict assertion mode\" and \"legacy mode\" to \"legacy assertion mode\" to avoid confusion with the more usual meaining of \"strict mode\"." + "description": "Changed \"strict mode\" to \"strict assertion mode\" and \"legacy mode\" to \"legacy assertion mode\" to avoid confusion with the more usual meaning of \"strict mode\"." }, { "version": "v9.9.0", @@ -11221,6 +11751,135 @@ "desc": "

                                                                                                                                                                                                                                                      A subclass of Error that indicates the failure of an assertion.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All instances contain the built-in Error properties (message and name)\nand:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • actual <any> Set to the actual argument for methods such as\nassert.strictEqual().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • expected <any> Set to the expected value for methods such as\nassert.strictEqual().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • generatedMessage <boolean> Indicates if the message was auto-generated\n(true) or not.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • code <string> Value is always ERR_ASSERTION to show that the error is an\nassertion error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • operator <string> Set to the passed in operator value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const assert = require('assert');\n\n// Generate an AssertionError to compare the error message later:\nconst { message } = new assert.AssertionError({\n  actual: 1,\n  expected: 2,\n  operator: 'strictEqual'\n});\n\n// Verify error output:\ntry {\n  assert.strictEqual(1, 2);\n} catch (err) {\n  assert(err instanceof assert.AssertionError);\n  assert.strictEqual(err.message, message);\n  assert.strictEqual(err.name, 'AssertionError');\n  assert.strictEqual(err.actual, 1);\n  assert.strictEqual(err.expected, 2);\n  assert.strictEqual(err.code, 'ERR_ASSERTION');\n  assert.strictEqual(err.operator, 'strictEqual');\n  assert.strictEqual(err.generatedMessage, true);\n}\n
                                                                                                                                                                                                                                                      " } ] + }, + { + "textRaw": "Class: `assert.CallTracker`", + "type": "class", + "name": "assert.CallTracker", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                      This feature is currently experimental and behavior might still change.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ### new assert.CallTracker()

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Creates a new CallTracker object which can be used to track if functions\nwere called a specific number of times. The tracker.verify() must be called\nfor the verification to take place. The usual pattern would be to call it in a\nprocess.on('exit') handler.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const assert = require('assert');\n\nconst tracker = new assert.CallTracker();\n\nfunction func() {}\n\n// callsfunc() must be called exactly 1 time before tracker.verify().\nconst callsfunc = tracker.calls(func, 1);\n\ncallsfunc();\n\n// Calls tracker.verify() and verifies if all tracker.calls() functions have\n// been called exact times.\nprocess.on('exit', () => {\n  tracker.verify();\n});\n
                                                                                                                                                                                                                                                      ", + "methods": [ + { + "textRaw": "`tracker.calls([fn][, exact])`", + "type": "method", + "name": "calls", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Function} that wraps `fn`.", + "name": "return", + "type": "Function", + "desc": "that wraps `fn`." + }, + "params": [ + { + "textRaw": "`fn` {Function} **Default** A no-op function.", + "name": "fn", + "type": "Function", + "desc": "**Default** A no-op function." + }, + { + "textRaw": "`exact` {number} **Default** `1`.", + "name": "exact", + "type": "number", + "desc": "**Default** `1`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      The wrapper function is expected to be called exactly exact times. If the\nfunction has not been called exactly exact times when\ntracker.verify() is called, then tracker.verify() will throw an\nerror.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const assert = require('assert');\n\n// Creates call tracker.\nconst tracker = new assert.CallTracker();\n\nfunction func() {}\n\n// Returns a function that wraps func() that must be called exact times\n// before tracker.verify().\nconst callsfunc = tracker.calls(func);\n
                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`tracker.report()`", + "type": "method", + "name": "report", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Array} of objects containing information about the wrapper functions returned by [`tracker.calls()`][].", + "name": "return", + "type": "Array", + "desc": "of objects containing information about the wrapper functions returned by [`tracker.calls()`][]." + }, + "params": [ + { + "textRaw": "Object {Object}", + "name": "Object", + "type": "Object", + "options": [ + { + "textRaw": "`message` {string}", + "name": "message", + "type": "string" + }, + { + "textRaw": "`actual` {number} The actual number of times the function was called.", + "name": "actual", + "type": "number", + "desc": "The actual number of times the function was called." + }, + { + "textRaw": "`expected` {number} The number of times the function was expected to be called.", + "name": "expected", + "type": "number", + "desc": "The number of times the function was expected to be called." + }, + { + "textRaw": "`operator` {string} The name of the function that is wrapped.", + "name": "operator", + "type": "string", + "desc": "The name of the function that is wrapped." + }, + { + "textRaw": "`stack` {Object} A stack trace of the function.", + "name": "stack", + "type": "Object", + "desc": "A stack trace of the function." + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      The arrays contains information about the expected and actual number of calls of\nthe functions that have not been called the expected number of times.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const assert = require('assert');\n\n// Creates call tracker.\nconst tracker = new assert.CallTracker();\n\nfunction func() {}\n\nfunction foo() {}\n\n// Returns a function that wraps func() that must be called exact times\n// before tracker.verify().\nconst callsfunc = tracker.calls(func, 2);\n\n// Returns an array containing information on callsfunc()\ntracker.report();\n// [\n//  {\n//    message: 'Expected the func function to be executed 2 time(s) but was\n//    executed 0 time(s).',\n//    actual: 0,\n//    expected: 2,\n//    operator: 'func',\n//    stack: stack trace\n//  }\n// ]\n
                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`tracker.verify()`", + "type": "method", + "name": "verify", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Iterates through the list of functions passed to\ntracker.calls() and will throw an error for functions that\nhave not been called the expected number of times.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const assert = require('assert');\n\n// Creates call tracker.\nconst tracker = new assert.CallTracker();\n\nfunction func() {}\n\n// Returns a function that wraps func() that must be called exact times\n// before tracker.verify().\nconst callsfunc = tracker.calls(func, 2);\n\ncallsfunc();\n\n// Will throw an error since callsfunc() was only called once.\ntracker.verify();\n
                                                                                                                                                                                                                                                      " + } + ] } ], "methods": [ @@ -12055,12 +12714,12 @@ "displayName": "Assert" }, { - "textRaw": "Async Hooks", + "textRaw": "Async hooks", "name": "async_hooks", "introduced_in": "v8.1.0", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The async_hooks module provides an API to track asynchronous resources. It\ncan be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const async_hooks = require('async_hooks');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/async_hooks.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The async_hooks module provides an API to track asynchronous resources. It\ncan be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const async_hooks = require('async_hooks');\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Terminology", @@ -12141,11 +12800,11 @@ "desc": "

                                                                                                                                                                                                                                                      Registers functions to be called for different lifetime events of each async\noperation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callbacks init()/before()/after()/destroy() are called for the\nrespective asynchronous event during a resource's lifetime.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All callbacks are optional. For example, if only resource cleanup needs to\nbe tracked, then only the destroy callback needs to be passed. The\nspecifics of all functions that can be passed to callbacks is in the\nHook Callbacks section.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const async_hooks = require('async_hooks');\n\nconst asyncHook = async_hooks.createHook({\n  init(asyncId, type, triggerAsyncId, resource) { },\n  destroy(asyncId) { }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callbacks will be inherited via the prototype chain:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      class MyAsyncCallbacks {\n  init(asyncId, type, triggerAsyncId, resource) { }\n  destroy(asyncId) {}\n}\n\nclass MyAddedCallbacks extends MyAsyncCallbacks {\n  before(asyncId) { }\n  after(asyncId) { }\n}\n\nconst asyncHook = async_hooks.createHook(new MyAddedCallbacks());\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Error Handling", + "textRaw": "Error handling", "name": "error_handling", "desc": "

                                                                                                                                                                                                                                                      If any AsyncHook callbacks throw, the application will print the stack trace\nand exit. The exit path does follow that of an uncaught exception, but\nall 'uncaughtException' listeners are removed, thus forcing the process to\nexit. The 'exit' callbacks will still be called unless the application is run\nwith --abort-on-uncaught-exception, in which case a stack trace will be\nprinted and the application exits, leaving a core file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The reason for this error handling behavior is that these callbacks are running\nat potentially volatile points in an object's lifetime, for example during\nclass construction and destruction. Because of this, it is deemed necessary to\nbring down the process quickly in order to prevent an unintentional abort in the\nfuture. This is subject to change in the future if a comprehensive analysis is\nperformed to ensure an exception can follow the normal control flow without\nunintentional side effects.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Error Handling" + "displayName": "Error handling" }, { "textRaw": "Printing in AsyncHooks callbacks", @@ -12223,7 +12882,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Resource objects returned by executionAsyncResource() are most often internal\nNode.js handle objects with undocumented APIs. Using any functions or properties\non the object is likely to crash your application and should be avoided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using executionAsyncResource() in the top-level execution context will\nreturn an empty object as there is no handle or request object to use,\nbut having an object representing the top-level can be helpful.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { open } = require('fs');\nconst { executionAsyncId, executionAsyncResource } = require('async_hooks');\n\nconsole.log(executionAsyncId(), executionAsyncResource());  // 1 {}\nopen(__filename, 'r', (err, fd) => {\n  console.log(executionAsyncId(), executionAsyncResource());  // 7 FSReqWrap\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This can be used to implement continuation local storage without the\nuse of a tracking Map to store the metadata:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { createServer } = require('http');\nconst {\n  executionAsyncId,\n  executionAsyncResource,\n  createHook\n} = require('async_hooks');\nconst sym = Symbol('state'); // Private symbol to avoid pollution\n\ncreateHook({\n  init(asyncId, type, triggerAsyncId, resource) {\n    const cr = executionAsyncResource();\n    if (cr) {\n      resource[sym] = cr[sym];\n    }\n  }\n}).enable();\n\nconst server = createServer(function(req, res) {\n  executionAsyncResource()[sym] = { state: req.url };\n  setTimeout(function() {\n    res.end(JSON.stringify(executionAsyncResource()[sym]));\n  }, 100);\n}).listen(3000);\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Resource objects returned by executionAsyncResource() are most often internal\nNode.js handle objects with undocumented APIs. Using any functions or properties\non the object is likely to crash your application and should be avoided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using executionAsyncResource() in the top-level execution context will\nreturn an empty object as there is no handle or request object to use,\nbut having an object representing the top-level can be helpful.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { open } = require('fs');\nconst { executionAsyncId, executionAsyncResource } = require('async_hooks');\n\nconsole.log(executionAsyncId(), executionAsyncResource());  // 1 {}\nopen(__filename, 'r', (err, fd) => {\n  console.log(executionAsyncId(), executionAsyncResource());  // 7 FSReqWrap\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This can be used to implement continuation local storage without the\nuse of a tracking Map to store the metadata:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { createServer } = require('http');\nconst {\n  executionAsyncId,\n  executionAsyncResource,\n  createHook\n} = require('async_hooks');\nconst sym = Symbol('state'); // Private symbol to avoid pollution\n\ncreateHook({\n  init(asyncId, type, triggerAsyncId, resource) {\n    const cr = executionAsyncResource();\n    if (cr) {\n      resource[sym] = cr[sym];\n    }\n  }\n}).enable();\n\nconst server = createServer((req, res) => {\n  executionAsyncResource()[sym] = { state: req.url };\n  setTimeout(function() {\n    res.end(JSON.stringify(executionAsyncResource()[sym]));\n  }, 100);\n}).listen(3000);\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`async_hooks.executionAsyncId()`", @@ -12274,7 +12933,7 @@ ], "modules": [ { - "textRaw": "Hook Callbacks", + "textRaw": "Hook callbacks", "name": "hook_callbacks", "desc": "

                                                                                                                                                                                                                                                      Key events in the lifetime of asynchronous events have been categorized into\nfour areas: instantiation, before/after the callback is called, and when the\ninstance is destroyed.

                                                                                                                                                                                                                                                      ", "methods": [ @@ -12324,21 +12983,21 @@ { "textRaw": "`triggerAsyncId`", "name": "`triggerasyncid`", - "desc": "

                                                                                                                                                                                                                                                      triggerAsyncId is the asyncId of the resource that caused (or \"triggered\")\nthe new resource to initialize and that caused init to call. This is different\nfrom async_hooks.executionAsyncId() that only shows when a resource was\ncreated, while triggerAsyncId shows why a resource was created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following is a simple demonstration of triggerAsyncId:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      async_hooks.createHook({\n  init(asyncId, type, triggerAsyncId) {\n    const eid = async_hooks.executionAsyncId();\n    fs.writeSync(\n      1, `${type}(${asyncId}): trigger: ${triggerAsyncId} execution: ${eid}\\n`);\n  }\n}).enable();\n\nrequire('net').createServer((conn) => {}).listen(8080);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Output when hitting the server with nc localhost 8080:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      TCPSERVERWRAP(5): trigger: 1 execution: 1\nTCPWRAP(7): trigger: 5 execution: 0\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The TCPSERVERWRAP is the server which receives the connections.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The TCPWRAP is the new connection from the client. When a new\nconnection is made, the TCPWrap instance is immediately constructed. This\nhappens outside of any JavaScript stack. (An executionAsyncId() of 0 means\nthat it is being executed from C++ with no JavaScript stack above it.) With only\nthat information, it would be impossible to link resources together in\nterms of what caused them to be created, so triggerAsyncId is given the task\nof propagating what resource is responsible for the new resource's existence.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      triggerAsyncId is the asyncId of the resource that caused (or \"triggered\")\nthe new resource to initialize and that caused init to call. This is different\nfrom async_hooks.executionAsyncId() that only shows when a resource was\ncreated, while triggerAsyncId shows why a resource was created.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following is a simple demonstration of triggerAsyncId:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      async_hooks.createHook({\n  init(asyncId, type, triggerAsyncId) {\n    const eid = async_hooks.executionAsyncId();\n    fs.writeSync(\n      process.stdout.fd,\n      `${type}(${asyncId}): trigger: ${triggerAsyncId} execution: ${eid}\\n`);\n  }\n}).enable();\n\nrequire('net').createServer((conn) => {}).listen(8080);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Output when hitting the server with nc localhost 8080:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      TCPSERVERWRAP(5): trigger: 1 execution: 1\nTCPWRAP(7): trigger: 5 execution: 0\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The TCPSERVERWRAP is the server which receives the connections.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The TCPWRAP is the new connection from the client. When a new\nconnection is made, the TCPWrap instance is immediately constructed. This\nhappens outside of any JavaScript stack. (An executionAsyncId() of 0 means\nthat it is being executed from C++ with no JavaScript stack above it.) With only\nthat information, it would be impossible to link resources together in\nterms of what caused them to be created, so triggerAsyncId is given the task\nof propagating what resource is responsible for the new resource's existence.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`triggerAsyncId`" }, { "textRaw": "`resource`", "name": "`resource`", - "desc": "

                                                                                                                                                                                                                                                      resource is an object that represents the actual async resource that has\nbeen initialized. This can contain useful information that can vary based on\nthe value of type. For instance, for the GETADDRINFOREQWRAP resource type,\nresource provides the host name used when looking up the IP address for the\nhost in net.Server.listen(). The API for accessing this information is\ncurrently not considered public, but using the Embedder API, users can provide\nand document their own resource objects. For example, such a resource object\ncould contain the SQL query being executed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the case of Promises, the resource object will have an\nisChainedPromise property, set to true if the promise has a parent promise,\nand false otherwise. For example, in the case of b = a.then(handler), a is\nconsidered a parent Promise of b. Here, b is considered a chained promise.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In some cases the resource object is reused for performance reasons, it is\nthus not safe to use it as a key in a WeakMap or add properties to it.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      resource is an object that represents the actual async resource that has\nbeen initialized. This can contain useful information that can vary based on\nthe value of type. For instance, for the GETADDRINFOREQWRAP resource type,\nresource provides the host name used when looking up the IP address for the\nhost in net.Server.listen(). The API for accessing this information is\nnot supported, but using the Embedder API, users can provide\nand document their own resource objects. For example, such a resource object\ncould contain the SQL query being executed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the case of Promises, the resource object will have an\nisChainedPromise property, set to true if the promise has a parent promise,\nand false otherwise. For example, in the case of b = a.then(handler), a is\nconsidered a parent Promise of b. Here, b is considered a chained promise.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In some cases the resource object is reused for performance reasons, it is\nthus not safe to use it as a key in a WeakMap or add properties to it.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`resource`" }, { "textRaw": "Asynchronous context example", "name": "asynchronous_context_example", - "desc": "

                                                                                                                                                                                                                                                      The following is an example with additional information about the calls to\ninit between the before and after calls, specifically what the\ncallback to listen() will look like. The output formatting is slightly more\nelaborate to make calling context easier to see.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      let indent = 0;\nasync_hooks.createHook({\n  init(asyncId, type, triggerAsyncId) {\n    const eid = async_hooks.executionAsyncId();\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(\n      1,\n      `${indentStr}${type}(${asyncId}):` +\n      ` trigger: ${triggerAsyncId} execution: ${eid}\\n`);\n  },\n  before(asyncId) {\n    const indentStr = ' '.repeat(indent);\n    fs.writeFileSync('log.out',\n                     `${indentStr}before:  ${asyncId}\\n`, { flag: 'a' });\n    indent += 2;\n  },\n  after(asyncId) {\n    indent -= 2;\n    const indentStr = ' '.repeat(indent);\n    fs.writeFileSync('log.out',\n                     `${indentStr}after:  ${asyncId}\\n`, { flag: 'a' });\n  },\n  destroy(asyncId) {\n    const indentStr = ' '.repeat(indent);\n    fs.writeFileSync('log.out',\n                     `${indentStr}destroy:  ${asyncId}\\n`, { flag: 'a' });\n  },\n}).enable();\n\nrequire('net').createServer(() => {}).listen(8080, () => {\n  // Let's wait 10ms before logging the server started.\n  setTimeout(() => {\n    console.log('>>>', async_hooks.executionAsyncId());\n  }, 10);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Output from only starting the server:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      TCPSERVERWRAP(5): trigger: 1 execution: 1\nTickObject(6): trigger: 5 execution: 1\nbefore:  6\n  Timeout(7): trigger: 6 execution: 6\nafter:   6\ndestroy: 6\nbefore:  7\n>>> 7\n  TickObject(8): trigger: 7 execution: 7\nafter:   7\nbefore:  8\nafter:   8\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As illustrated in the example, executionAsyncId() and execution each specify\nthe value of the current execution context; which is delineated by calls to\nbefore and after.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Only using execution to graph resource allocation results in the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Timeout(7) -> TickObject(6) -> root(1)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The TCPSERVERWRAP is not part of this graph, even though it was the reason for\nconsole.log() being called. This is because binding to a port without a host\nname is a synchronous operation, but to maintain a completely asynchronous\nAPI the user's callback is placed in a process.nextTick().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The graph only shows when a resource was created, not why, so to track\nthe why use triggerAsyncId.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The following is an example with additional information about the calls to\ninit between the before and after calls, specifically what the\ncallback to listen() will look like. The output formatting is slightly more\nelaborate to make calling context easier to see.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      let indent = 0;\nasync_hooks.createHook({\n  init(asyncId, type, triggerAsyncId) {\n    const eid = async_hooks.executionAsyncId();\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(\n      process.stdout.fd,\n      `${indentStr}${type}(${asyncId}):` +\n      ` trigger: ${triggerAsyncId} execution: ${eid}\\n`);\n  },\n  before(asyncId) {\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(process.stdout.fd, `${indentStr}before:  ${asyncId}\\n`);\n    indent += 2;\n  },\n  after(asyncId) {\n    indent -= 2;\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(process.stdout.fd, `${indentStr}after:  ${asyncId}\\n`);\n  },\n  destroy(asyncId) {\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(process.stdout.fd, `${indentStr}destroy:  ${asyncId}\\n`);\n  },\n}).enable();\n\nrequire('net').createServer(() => {}).listen(8080, () => {\n  // Let's wait 10ms before logging the server started.\n  setTimeout(() => {\n    console.log('>>>', async_hooks.executionAsyncId());\n  }, 10);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Output from only starting the server:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      TCPSERVERWRAP(5): trigger: 1 execution: 1\nTickObject(6): trigger: 5 execution: 1\nbefore:  6\n  Timeout(7): trigger: 6 execution: 6\nafter:   6\ndestroy: 6\nbefore:  7\n>>> 7\n  TickObject(8): trigger: 7 execution: 7\nafter:   7\nbefore:  8\nafter:   8\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As illustrated in the example, executionAsyncId() and execution each specify\nthe value of the current execution context; which is delineated by calls to\nbefore and after.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Only using execution to graph resource allocation results in the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        root(1)\n     ^\n     |\nTickObject(6)\n     ^\n     |\n Timeout(7)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The TCPSERVERWRAP is not part of this graph, even though it was the reason for\nconsole.log() being called. This is because binding to a port without a host\nname is a synchronous operation, but to maintain a completely asynchronous\nAPI the user's callback is placed in a process.nextTick(). Which is why\nTickObject is present in the output and is a 'parent' for .listen()\ncallback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The graph only shows when a resource was created, not why, so to track\nthe why use triggerAsyncId. Which can be represented with the following\ngraph:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                       bootstrap(1)\n     |\n     ˅\nTCPSERVERWRAP(5)\n     |\n     ˅\n TickObject(6)\n     |\n     ˅\n  Timeout(7)\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Asynchronous context example" } @@ -12420,7 +13079,7 @@ } ], "type": "module", - "displayName": "Hook Callbacks" + "displayName": "Hook callbacks" } ] } @@ -12436,7 +13095,7 @@ "displayName": "Promise execution tracking" }, { - "textRaw": "JavaScript Embedder API", + "textRaw": "JavaScript embedder API", "name": "javascript_embedder_api", "desc": "

                                                                                                                                                                                                                                                      Library developers that handle their own asynchronous resources performing tasks\nlike I/O, connection pooling, or managing callback queues may use the\nAsyncResource JavaScript API so that all the appropriate callbacks are called.

                                                                                                                                                                                                                                                      ", "classes": [ @@ -12445,8 +13104,64 @@ "type": "class", "name": "AsyncResource", "desc": "

                                                                                                                                                                                                                                                      The class AsyncResource is designed to be extended by the embedder's async\nresources. Using this, users can easily trigger the lifetime events of their\nown resources.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The init hook will trigger when an AsyncResource is instantiated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following is an overview of the AsyncResource API.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { AsyncResource, executionAsyncId } = require('async_hooks');\n\n// AsyncResource() is meant to be extended. Instantiating a\n// new AsyncResource() also triggers init. If triggerAsyncId is omitted then\n// async_hook.executionAsyncId() is used.\nconst asyncResource = new AsyncResource(\n  type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false }\n);\n\n// Run a function in the execution context of the resource. This will\n// * establish the context of the resource\n// * trigger the AsyncHooks before callbacks\n// * call the provided function `fn` with the supplied arguments\n// * trigger the AsyncHooks after callbacks\n// * restore the original execution context\nasyncResource.runInAsyncScope(fn, thisArg, ...args);\n\n// Call AsyncHooks destroy callbacks.\nasyncResource.emitDestroy();\n\n// Return the unique ID assigned to the AsyncResource instance.\nasyncResource.asyncId();\n\n// Return the trigger ID for the AsyncResource instance.\nasyncResource.triggerAsyncId();\n
                                                                                                                                                                                                                                                      ", + "classMethods": [ + { + "textRaw": "Static method: `AsyncResource.bind(fn[, type])`", + "type": "classMethod", + "name": "bind", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`fn` {Function} The function to bind to the current execution context.", + "name": "fn", + "type": "Function", + "desc": "The function to bind to the current execution context." + }, + { + "textRaw": "`type` {string} An optional name to associate with the underlying `AsyncResource`.", + "name": "type", + "type": "string", + "desc": "An optional name to associate with the underlying `AsyncResource`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Binds the given function to the current execution context.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The returned function will have an asyncResource property referencing\nthe AsyncResource to which the function is bound.

                                                                                                                                                                                                                                                      " + } + ], "methods": [ { + "textRaw": "`asyncResource.bind(fn)`", + "type": "method", + "name": "bind", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`fn` {Function} The function to bind to the current `AsyncResource`.", + "name": "fn", + "type": "Function", + "desc": "The function to bind to the current `AsyncResource`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Binds the given function to execute to this AsyncResource's scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The returned function will have an asyncResource property referencing\nthe AsyncResource to which the function is bound.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`asyncResource.runInAsyncScope(fn[, thisArg, ...args])`", "type": "method", "name": "runInAsyncScope", @@ -12576,10 +13291,17 @@ "desc": "

                                                                                                                                                                                                                                                      The following example shows how to use the AsyncResource class to properly\nprovide async tracking for a Worker pool. Other resource pools, such as\ndatabase connection pools, can follow a similar model.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Assuming that the task is adding two numbers, using a file named\ntask_processor.js with the following content:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { parentPort } = require('worker_threads');\nparentPort.on('message', (task) => {\n  parentPort.postMessage(task.a + task.b);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      a Worker pool around it could use the following structure:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { AsyncResource } = require('async_hooks');\nconst { EventEmitter } = require('events');\nconst path = require('path');\nconst { Worker } = require('worker_threads');\n\nconst kTaskInfo = Symbol('kTaskInfo');\nconst kWorkerFreedEvent = Symbol('kWorkerFreedEvent');\n\nclass WorkerPoolTaskInfo extends AsyncResource {\n  constructor(callback) {\n    super('WorkerPoolTaskInfo');\n    this.callback = callback;\n  }\n\n  done(err, result) {\n    this.runInAsyncScope(this.callback, null, err, result);\n    this.emitDestroy();  // `TaskInfo`s are used only once.\n  }\n}\n\nclass WorkerPool extends EventEmitter {\n  constructor(numThreads) {\n    super();\n    this.numThreads = numThreads;\n    this.workers = [];\n    this.freeWorkers = [];\n\n    for (let i = 0; i < numThreads; i++)\n      this.addNewWorker();\n  }\n\n  addNewWorker() {\n    const worker = new Worker(path.resolve(__dirname, 'task_processor.js'));\n    worker.on('message', (result) => {\n      // In case of success: Call the callback that was passed to `runTask`,\n      // remove the `TaskInfo` associated with the Worker, and mark it as free\n      // again.\n      worker[kTaskInfo].done(null, result);\n      worker[kTaskInfo] = null;\n      this.freeWorkers.push(worker);\n      this.emit(kWorkerFreedEvent);\n    });\n    worker.on('error', (err) => {\n      // In case of an uncaught exception: Call the callback that was passed to\n      // `runTask` with the error.\n      if (worker[kTaskInfo])\n        worker[kTaskInfo].done(err, null);\n      else\n        this.emit('error', err);\n      // Remove the worker from the list and start a new Worker to replace the\n      // current one.\n      this.workers.splice(this.workers.indexOf(worker), 1);\n      this.addNewWorker();\n    });\n    this.workers.push(worker);\n    this.freeWorkers.push(worker);\n    this.emit(kWorkerFreedEvent);\n  }\n\n  runTask(task, callback) {\n    if (this.freeWorkers.length === 0) {\n      // No free threads, wait until a worker thread becomes free.\n      this.once(kWorkerFreedEvent, () => this.runTask(task, callback));\n      return;\n    }\n\n    const worker = this.freeWorkers.pop();\n    worker[kTaskInfo] = new WorkerPoolTaskInfo(callback);\n    worker.postMessage(task);\n  }\n\n  close() {\n    for (const worker of this.workers) worker.terminate();\n  }\n}\n\nmodule.exports = WorkerPool;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Without the explicit tracking added by the WorkerPoolTaskInfo objects,\nit would appear that the callbacks are associated with the individual Worker\nobjects. However, the creation of the Workers is not associated with the\ncreation of the tasks and does not provide information about when tasks\nwere scheduled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This pool could be used as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const WorkerPool = require('./worker_pool.js');\nconst os = require('os');\n\nconst pool = new WorkerPool(os.cpus().length);\n\nlet finished = 0;\nfor (let i = 0; i < 10; i++) {\n  pool.runTask({ a: 42, b: 100 }, (err, result) => {\n    console.log(i, err, result);\n    if (++finished === 10)\n      pool.close();\n  });\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Using `AsyncResource` for a `Worker` thread pool" + }, + { + "textRaw": "Integrating `AsyncResource` with `EventEmitter`", + "name": "integrating_`asyncresource`_with_`eventemitter`", + "desc": "

                                                                                                                                                                                                                                                      Event listeners triggered by an EventEmitter may be run in a different\nexecution context than the one that was active when eventEmitter.on() was\ncalled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example shows how to use the AsyncResource class to properly\nassociate an event listener with the correct execution context. The same\napproach can be applied to a Stream or a similar event-driven class.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { createServer } = require('http');\nconst { AsyncResource, executionAsyncId } = require('async_hooks');\n\nconst server = createServer((req, res) => {\n  req.on('close', AsyncResource.bind(() => {\n    // Execution context is bound to the current outer scope.\n  }));\n  req.on('close', () => {\n    // Execution context is bound to the scope that caused 'close' to emit.\n  });\n  res.end();\n}).listen(3000);\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Integrating `AsyncResource` with `EventEmitter`" } ], "type": "module", - "displayName": "JavaScript Embedder API" + "displayName": "JavaScript embedder API" } ], "classes": [ @@ -12730,7 +13452,7 @@ { "textRaw": "Troubleshooting", "name": "troubleshooting", - "desc": "

                                                                                                                                                                                                                                                      In most cases your application or library code should have no issues with\nAsyncLocalStorage. But in rare cases you may face situations when the\ncurrent store is lost in one of asynchronous operations. Then you should\nconsider the following options.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If your code is callback-based, it is enough to promisify it with\nutil.promisify(), so it starts working with native promises.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If you need to keep using callback-based API, or your code assumes\na custom thenable implementation, you should use AsyncResource class\nto associate the asynchronous operation with the correct execution context.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      In most cases your application or library code should have no issues with\nAsyncLocalStorage. But in rare cases you may face situations when the\ncurrent store is lost in one of asynchronous operations. In those cases,\nconsider the following options.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If your code is callback-based, it is enough to promisify it with\nutil.promisify(), so it starts working with native promises.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If you need to keep using callback-based API, or your code assumes\na custom thenable implementation, use the AsyncResource class\nto associate the asynchronous operation with the correct execution context.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Troubleshooting" } @@ -12744,7 +13466,7 @@ } ], "type": "module", - "displayName": "Async Hooks" + "displayName": "Async hooks" }, { "textRaw": "Buffer", @@ -12752,10 +13474,10 @@ "introduced_in": "v0.1.90", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      In Node.js, Buffer objects are used to represent binary data in the form\nof a sequence of bytes. Many Node.js APIs, for example streams and file system\noperations, support Buffers, as interactions with the operating system or\nother processes generally always happen in terms of binary data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer class is a subclass of the Uint8Array class that is built\ninto the JavaScript language. A number of additional methods are supported\nthat cover additional use cases. Node.js APIs accept plain Uint8Arrays\nwherever Buffers are supported as well.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Instances of the Buffer class, and Uint8Arrays in general,\nare similar to arrays of integers from 0 to 255, but correspond to\nfixed-sized blocks of memory and cannot contain any other values.\nThe size of a Buffer is established when it is created and cannot be changed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer class is within the global scope, making it unlikely that one\nwould need to ever use require('buffer').Buffer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Creates a zero-filled Buffer of length 10.\nconst buf1 = Buffer.alloc(10);\n\n// Creates a Buffer of length 10,\n// filled with bytes which all have the value `1`.\nconst buf2 = Buffer.alloc(10, 1);\n\n// Creates an uninitialized buffer of length 10.\n// This is faster than calling Buffer.alloc() but the returned\n// Buffer instance might contain old data that needs to be\n// overwritten using fill(), write(), or other functions that fill the Buffer's\n// contents.\nconst buf3 = Buffer.allocUnsafe(10);\n\n// Creates a Buffer containing the bytes [1, 2, 3].\nconst buf4 = Buffer.from([1, 2, 3]);\n\n// Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries\n// are all truncated using `(value & 255)` to fit into the range 0–255.\nconst buf5 = Buffer.from([257, 257.5, -255, '1']);\n\n// Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':\n// [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)\n// [116, 195, 169, 115, 116] (in decimal notation)\nconst buf6 = Buffer.from('tést');\n\n// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].\nconst buf7 = Buffer.from('tést', 'latin1');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/buffer.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Buffer objects are used to represent a fixed-length sequence of bytes. Many\nNode.js APIs support Buffers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer class is a subclass of JavaScript's Uint8Array class and\nextends it with methods that cover additional use cases. Node.js APIs accept\nplain Uint8Arrays wherever Buffers are supported as well.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer class is within the global scope, making it unlikely that one\nwould need to ever use require('buffer').Buffer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Creates a zero-filled Buffer of length 10.\nconst buf1 = Buffer.alloc(10);\n\n// Creates a Buffer of length 10,\n// filled with bytes which all have the value `1`.\nconst buf2 = Buffer.alloc(10, 1);\n\n// Creates an uninitialized buffer of length 10.\n// This is faster than calling Buffer.alloc() but the returned\n// Buffer instance might contain old data that needs to be\n// overwritten using fill(), write(), or other functions that fill the Buffer's\n// contents.\nconst buf3 = Buffer.allocUnsafe(10);\n\n// Creates a Buffer containing the bytes [1, 2, 3].\nconst buf4 = Buffer.from([1, 2, 3]);\n\n// Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries\n// are all truncated using `(value & 255)` to fit into the range 0–255.\nconst buf5 = Buffer.from([257, 257.5, -255, '1']);\n\n// Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':\n// [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)\n// [116, 195, 169, 115, 116] (in decimal notation)\nconst buf6 = Buffer.from('tést');\n\n// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].\nconst buf7 = Buffer.from('tést', 'latin1');\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Buffers and Character Encodings", + "textRaw": "Buffers and character encodings", "name": "buffers_and_character_encodings", "meta": { "changes": [ @@ -12771,9 +13493,9 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      When converting between Buffers and strings, a character encoding may be\nspecified. If no character encoding is specified, UTF-8 will be used as the\ndefault.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from('hello world', 'utf8');\n\nconsole.log(buf.toString('hex'));\n// Prints: 68656c6c6f20776f726c64\nconsole.log(buf.toString('base64'));\n// Prints: aGVsbG8gd29ybGQ=\n\nconsole.log(Buffer.from('fhqwhgads', 'utf8'));\n// Prints: <Buffer 66 68 71 77 68 67 61 64 73>\nconsole.log(Buffer.from('fhqwhgads', 'utf16le'));\n// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The character encodings currently supported by Node.js are the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'utf8': Multi-byte encoded Unicode characters. Many web pages and other\ndocument formats use UTF-8. This is the default character encoding.\nWhen decoding a Buffer into a string that does not exclusively contain\nvalid UTF-8 data, the Unicode replacement character U+FFFD � will be used\nto represent those errors.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'utf16le': Multi-byte encoded Unicode characters. Unlike 'utf8', each\ncharacter in the string will be encoded using either 2 or 4 bytes.\nNode.js only supports the little-endian variant of UTF-16.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'latin1': Latin-1 stands for ISO-8859-1. This character encoding only\nsupports the Unicode characters from U+0000 to U+00FF. Each character is\nencoded using a single byte. Characters that do not fit into that range are\ntruncated and will be mapped to characters in that range.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Converting a Buffer into a string using one of the above is referred to as\ndecoding, and converting a string into a Buffer is referred to as encoding.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js also supports the following two binary-to-text encodings. For\nbinary-to-text encodings, the naming convention is reversed: Converting a\nBuffer into a string is typically referred to as encoding, and converting a\nstring into a Buffer as decoding.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'base64': Base64 encoding. When creating a Buffer from a string,\nthis encoding will also correctly accept \"URL and Filename Safe Alphabet\" as\nspecified in RFC 4648, Section 5.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'hex': Encode each byte as two hexadecimal characters. Data truncation\nmay occur when decoding string that do exclusively contain valid hexadecimal\ncharacters. See below for an example.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following legacy character encodings are also supported:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'ascii': For 7-bit ASCII data only. When encoding a string into a\nBuffer, this is equivalent to using 'latin1'. When decoding a Buffer\ninto a string, using encoding this will additionally unset the highest bit of\neach byte before decoding as 'latin1'.\nGenerally, there should be no reason to use this encoding, as 'utf8'\n(or, if the data is known to always be ASCII-only, 'latin1') will be a\nbetter choice when encoding or decoding ASCII-only text. It is only provided\nfor legacy compatibility.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'binary': Alias for 'latin1'. See binary strings for more background\non this topic. The name of this encoding can be very misleading, as all of the\nencodings listed here convert between strings and binary data. For converting\nbetween strings and Buffers, typically 'utf-8' is the right choice.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'ucs2': Alias of 'utf16le'. UCS-2 used to refer to a variant of UTF-16\nthat did not support characters that had code points larger than U+FFFF.\nIn Node.js, these code points are always supported.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Buffer.from('1ag', 'hex');\n// Prints <Buffer 1a>, data truncated when first non-hexadecimal value\n// ('g') encountered.\n\nBuffer.from('1a7g', 'hex');\n// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').\n\nBuffer.from('1634', 'hex');\n// Prints <Buffer 16 34>, all data represented.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Modern Web browsers follow the WHATWG Encoding Standard which aliases\nboth 'latin1' and 'ISO-8859-1' to 'win-1252'. This means that while doing\nsomething like http.get(), if the returned charset is one of those listed in\nthe WHATWG specification it is possible that the server actually returned\n'win-1252'-encoded data, and using 'latin1' encoding may incorrectly decode\nthe characters.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      When converting between Buffers and strings, a character encoding may be\nspecified. If no character encoding is specified, UTF-8 will be used as the\ndefault.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from('hello world', 'utf8');\n\nconsole.log(buf.toString('hex'));\n// Prints: 68656c6c6f20776f726c64\nconsole.log(buf.toString('base64'));\n// Prints: aGVsbG8gd29ybGQ=\n\nconsole.log(Buffer.from('fhqwhgads', 'utf8'));\n// Prints: <Buffer 66 68 71 77 68 67 61 64 73>\nconsole.log(Buffer.from('fhqwhgads', 'utf16le'));\n// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The character encodings currently supported by Node.js are the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'utf8': Multi-byte encoded Unicode characters. Many web pages and other\ndocument formats use UTF-8. This is the default character encoding.\nWhen decoding a Buffer into a string that does not exclusively contain\nvalid UTF-8 data, the Unicode replacement character U+FFFD � will be used\nto represent those errors.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'utf16le': Multi-byte encoded Unicode characters. Unlike 'utf8', each\ncharacter in the string will be encoded using either 2 or 4 bytes.\nNode.js only supports the little-endian variant of UTF-16.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'latin1': Latin-1 stands for ISO-8859-1. This character encoding only\nsupports the Unicode characters from U+0000 to U+00FF. Each character is\nencoded using a single byte. Characters that do not fit into that range are\ntruncated and will be mapped to characters in that range.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Converting a Buffer into a string using one of the above is referred to as\ndecoding, and converting a string into a Buffer is referred to as encoding.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js also supports the following two binary-to-text encodings. For\nbinary-to-text encodings, the naming convention is reversed: Converting a\nBuffer into a string is typically referred to as encoding, and converting a\nstring into a Buffer as decoding.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'base64': Base64 encoding. When creating a Buffer from a string,\nthis encoding will also correctly accept \"URL and Filename Safe Alphabet\" as\nspecified in RFC 4648, Section 5. Whitespace characters such as spaces,\ntabs, and new lines contained within the base64-encoded string are ignored.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'hex': Encode each byte as two hexadecimal characters. Data truncation\nmay occur when decoding strings that do exclusively contain valid hexadecimal\ncharacters. See below for an example.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following legacy character encodings are also supported:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'ascii': For 7-bit ASCII data only. When encoding a string into a\nBuffer, this is equivalent to using 'latin1'. When decoding a Buffer\ninto a string, using this encoding will additionally unset the highest bit of\neach byte before decoding as 'latin1'.\nGenerally, there should be no reason to use this encoding, as 'utf8'\n(or, if the data is known to always be ASCII-only, 'latin1') will be a\nbetter choice when encoding or decoding ASCII-only text. It is only provided\nfor legacy compatibility.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'binary': Alias for 'latin1'. See binary strings for more background\non this topic. The name of this encoding can be very misleading, as all of the\nencodings listed here convert between strings and binary data. For converting\nbetween strings and Buffers, typically 'utf-8' is the right choice.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'ucs2': Alias of 'utf16le'. UCS-2 used to refer to a variant of UTF-16\nthat did not support characters that had code points larger than U+FFFF.\nIn Node.js, these code points are always supported.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Buffer.from('1ag', 'hex');\n// Prints <Buffer 1a>, data truncated when first non-hexadecimal value\n// ('g') encountered.\n\nBuffer.from('1a7g', 'hex');\n// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').\n\nBuffer.from('1634', 'hex');\n// Prints <Buffer 16 34>, all data represented.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Modern Web browsers follow the WHATWG Encoding Standard which aliases\nboth 'latin1' and 'ISO-8859-1' to 'win-1252'. This means that while doing\nsomething like http.get(), if the returned charset is one of those listed in\nthe WHATWG specification it is possible that the server actually returned\n'win-1252'-encoded data, and using 'latin1' encoding may incorrectly decode\nthe characters.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Buffers and Character Encodings" + "displayName": "Buffers and character encodings" }, { "textRaw": "Buffers and TypedArrays", @@ -12787,7 +13509,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Buffer instances are also Uint8Array instances, which is the language’s\nbuilt-in class for working with binary data. Uint8Array in turn is a\nsubclass of TypedArray. Therefore, all TypedArray methods are also\navailable on Buffers. However, there are subtle incompatibilities between\nthe Buffer API and the TypedArray API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In particular:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • While TypedArray#slice() creates a copy of part of the TypedArray,\nBuffer#slice() creates a view over the existing Buffer\nwithout copying. This behavior can be surprising, and only exists for legacy\ncompatibility. TypedArray#subarray() can be used to achieve the behavior\nof Buffer#slice() on both Buffers and other\nTypedArrays.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • buf.toString() is incompatible with its TypedArray equivalent.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • A number of methods, e.g. buf.indexOf(), support additional arguments.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are two ways to create new TypedArray instances from a Buffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When passing a Buffer to a TypedArray constructor, the Buffer’s\nelements will be copied, interpreted as an array of integers, and not as a byte\narray of the target type. For example,\nnew Uint32Array(Buffer.from([1, 2, 3, 4])) creates a 4-element\nUint32Array with elements [1, 2, 3, 4], rather than a\nUint32Array with a single element [0x1020304] or [0x4030201].

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to create a TypedArray that shares its memory with the Buffer,\nthe underlying ArrayBuffer can be passed to the TypedArray\nconstructor instead:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from('hello', 'utf16le');\nconst uint16arr = new Uint16Array(\n  buf.buffer, buf.byteOffset, buf.length / Uint16Array.BYTES_PER_ELEMENT);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is also possible to create a new Buffer that shares the same allocated\nmemory as a TypedArray instance by using the TypedArray object’s\n.buffer property in the same way. Buffer.from()\nbehaves like new Uint8Array() in this context.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = new Uint16Array(2);\n\narr[0] = 5000;\narr[1] = 4000;\n\n// Copies the contents of `arr`.\nconst buf1 = Buffer.from(arr);\n// Shares memory with `arr`.\nconst buf2 = Buffer.from(arr.buffer);\n\nconsole.log(buf1);\n// Prints: <Buffer 88 a0>\nconsole.log(buf2);\n// Prints: <Buffer 88 13 a0 0f>\n\narr[1] = 6000;\n\nconsole.log(buf1);\n// Prints: <Buffer 88 a0>\nconsole.log(buf2);\n// Prints: <Buffer 88 13 70 17>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When creating a Buffer using a TypedArray's .buffer, it is\npossible to use only a portion of the underlying ArrayBuffer by passing in\nbyteOffset and length parameters.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = new Uint16Array(20);\nconst buf = Buffer.from(arr.buffer, 0, 16);\n\nconsole.log(buf.length);\n// Prints: 16\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer.from() and TypedArray.from() have different signatures and\nimplementations. Specifically, the TypedArray variants accept a second\nargument that is a mapping function that is invoked on every element of the\ntyped array:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • TypedArray.from(source[, mapFn[, thisArg]])
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer.from() method, however, does not support the use of a mapping\nfunction:

                                                                                                                                                                                                                                                      \n", + "desc": "

                                                                                                                                                                                                                                                      Buffer instances are also JavaScript Uint8Array and TypedArray\ninstances. All TypedArray methods are available on Buffers. There are,\nhowever, subtle incompatibilities between the Buffer API and the\nTypedArray API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In particular:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • While TypedArray#slice() creates a copy of part of the TypedArray,\nBuffer#slice() creates a view over the existing Buffer\nwithout copying. This behavior can be surprising, and only exists for legacy\ncompatibility. TypedArray#subarray() can be used to achieve the behavior\nof Buffer#slice() on both Buffers and other\nTypedArrays.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • buf.toString() is incompatible with its TypedArray equivalent.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • A number of methods, e.g. buf.indexOf(), support additional arguments.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are two ways to create new TypedArray instances from a Buffer:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Passing a Buffer to a TypedArray constructor will copy the Buffers\ncontents, interpreted as an array of integers, and not as a byte sequence\nof the target type.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4]);\nconst uint32array = new Uint32Array(buf);\n\nconsole.log(uint32array);\n\n// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Passing the Buffers underlying ArrayBuffer will create a\nTypedArray that shares its memory with the Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from('hello', 'utf16le');\nconst uint16arr = new Uint16Array(\n  buf.buffer,\n  buf.byteOffset,\n  buf.length / Uint16Array.BYTES_PER_ELEMENT);\n\nconsole.log(uint16array);\n\n// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is possible to create a new Buffer that shares the same allocated\nmemory as a TypedArray instance by using the TypedArray object’s\n.buffer property in the same way. Buffer.from()\nbehaves like new Uint8Array() in this context.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = new Uint16Array(2);\n\narr[0] = 5000;\narr[1] = 4000;\n\n// Copies the contents of `arr`.\nconst buf1 = Buffer.from(arr);\n\n// Shares memory with `arr`.\nconst buf2 = Buffer.from(arr.buffer);\n\nconsole.log(buf1);\n// Prints: <Buffer 88 a0>\nconsole.log(buf2);\n// Prints: <Buffer 88 13 a0 0f>\n\narr[1] = 6000;\n\nconsole.log(buf1);\n// Prints: <Buffer 88 a0>\nconsole.log(buf2);\n// Prints: <Buffer 88 13 70 17>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When creating a Buffer using a TypedArray's .buffer, it is\npossible to use only a portion of the underlying ArrayBuffer by passing in\nbyteOffset and length parameters.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = new Uint16Array(20);\nconst buf = Buffer.from(arr.buffer, 0, 16);\n\nconsole.log(buf.length);\n// Prints: 16\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer.from() and TypedArray.from() have different signatures and\nimplementations. Specifically, the TypedArray variants accept a second\nargument that is a mapping function that is invoked on every element of the\ntyped array:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • TypedArray.from(source[, mapFn[, thisArg]])
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer.from() method, however, does not support the use of a mapping\nfunction:

                                                                                                                                                                                                                                                      \n", "type": "module", "displayName": "Buffers and TypedArrays" }, @@ -12799,50 +13521,164 @@ "displayName": "Buffers and iteration" }, { - "textRaw": "Buffer Constants", - "name": "buffer_constants", - "meta": { - "added": [ - "v8.2.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      buffer.constants is a property on the buffer module returned by\nrequire('buffer'), not on the Buffer global or a Buffer instance.

                                                                                                                                                                                                                                                      ", + "textRaw": "`buffer` module APIs", + "name": "`buffer`_module_apis", + "desc": "

                                                                                                                                                                                                                                                      While, the Buffer object is available as a global, there are additional\nBuffer-related APIs that are available only via the buffer module\naccessed using require('buffer').

                                                                                                                                                                                                                                                      ", "properties": [ { - "textRaw": "`MAX_LENGTH` {integer} The largest size allowed for a single `Buffer` instance.", + "textRaw": "`INSPECT_MAX_BYTES` {integer} **Default:** `50`", "type": "integer", - "name": "MAX_LENGTH", + "name": "INSPECT_MAX_BYTES", "meta": { "added": [ - "v8.2.0" + "v0.5.4" ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      On 32-bit architectures, this value currently is (2^30)-1 (~1GB).\nOn 64-bit architectures, this value currently is (2^31)-1 (~2GB).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This value is also available as buffer.kMaxLength.

                                                                                                                                                                                                                                                      ", - "shortDesc": "The largest size allowed for a single `Buffer` instance." + "default": "`50`", + "desc": "

                                                                                                                                                                                                                                                      Returns the maximum number of bytes that will be returned when\nbuf.inspect() is called. This can be overridden by user modules. See\nutil.inspect() for more details on buf.inspect() behavior.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "`MAX_STRING_LENGTH` {integer} The largest length allowed for a single `string` instance.", + "textRaw": "`kMaxLength` {integer} The largest size allowed for a single `Buffer` instance.", "type": "integer", - "name": "MAX_STRING_LENGTH", + "name": "kMaxLength", + "meta": { + "added": [ + "v3.0.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      An alias for buffer.constants.MAX_LENGTH.

                                                                                                                                                                                                                                                      ", + "shortDesc": "The largest size allowed for a single `Buffer` instance." + } + ], + "methods": [ + { + "textRaw": "`buffer.transcode(source, fromEnc, toEnc)`", + "type": "method", + "name": "transcode", + "meta": { + "added": [ + "v7.1.0" + ], + "changes": [ + { + "version": "v8.0.0", + "pr-url": "https://github.com/nodejs/node/pull/10236", + "description": "The `source` parameter can now be a `Uint8Array`." + } + ] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Buffer}", + "name": "return", + "type": "Buffer" + }, + "params": [ + { + "textRaw": "`source` {Buffer|Uint8Array} A `Buffer` or `Uint8Array` instance.", + "name": "source", + "type": "Buffer|Uint8Array", + "desc": "A `Buffer` or `Uint8Array` instance." + }, + { + "textRaw": "`fromEnc` {string} The current encoding.", + "name": "fromEnc", + "type": "string", + "desc": "The current encoding." + }, + { + "textRaw": "`toEnc` {string} To target encoding.", + "name": "toEnc", + "type": "string", + "desc": "To target encoding." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Re-encodes the given Buffer or Uint8Array instance from one character\nencoding to another. Returns a new Buffer instance.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Throws if the fromEnc or toEnc specify invalid character encodings or if\nconversion from fromEnc to toEnc is not permitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Encodings supported by buffer.transcode() are: 'ascii', 'utf8',\n'utf16le', 'ucs2', 'latin1', and 'binary'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transcoding process will use substitution characters if a given byte\nsequence cannot be adequately represented in the target encoding. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buffer = require('buffer');\n\nconst newBuf = buffer.transcode(Buffer.from('€'), 'utf8', 'ascii');\nconsole.log(newBuf.toString('ascii'));\n// Prints: '?'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because the Euro () sign is not representable in US-ASCII, it is replaced\nwith ? in the transcoded Buffer.

                                                                                                                                                                                                                                                      " + } + ], + "classes": [ + { + "textRaw": "Class: `SlowBuffer`", + "type": "class", + "name": "SlowBuffer", + "meta": { + "deprecated": [ + "v6.0.0" + ], + "changes": [] + }, + "stability": 0, + "stabilityText": "Deprecated: Use [`Buffer.allocUnsafeSlow()`][] instead.", + "desc": "

                                                                                                                                                                                                                                                      See Buffer.allocUnsafeSlow(). This was never a class in the sense that\nthe constructor always returned a Buffer instance, rather than a SlowBuffer\ninstance.

                                                                                                                                                                                                                                                      ", + "signatures": [ + { + "params": [ + { + "textRaw": "`size` {integer} The desired length of the new `SlowBuffer`.", + "name": "size", + "type": "integer", + "desc": "The desired length of the new `SlowBuffer`." + } + ], + "desc": "

                                                                                                                                                                                                                                                      See Buffer.allocUnsafeSlow().

                                                                                                                                                                                                                                                      " + } + ] + } + ], + "modules": [ + { + "textRaw": "Buffer constants", + "name": "buffer_constants", "meta": { "added": [ "v8.2.0" ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Represents the largest length that a string primitive can have, counted\nin UTF-16 code units.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This value may depend on the JS engine that is being used.

                                                                                                                                                                                                                                                      ", - "shortDesc": "The largest length allowed for a single `string` instance." + "properties": [ + { + "textRaw": "`MAX_LENGTH` {integer} The largest size allowed for a single `Buffer` instance.", + "type": "integer", + "name": "MAX_LENGTH", + "meta": { + "added": [ + "v8.2.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      On 32-bit architectures, this value currently is 230 - 1 (~1GB).\nOn 64-bit architectures, this value currently is 231 - 1 (~2GB).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This value is also available as buffer.kMaxLength.

                                                                                                                                                                                                                                                      ", + "shortDesc": "The largest size allowed for a single `Buffer` instance." + }, + { + "textRaw": "`MAX_STRING_LENGTH` {integer} The largest length allowed for a single `string` instance.", + "type": "integer", + "name": "MAX_STRING_LENGTH", + "meta": { + "added": [ + "v8.2.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      Represents the largest length that a string primitive can have, counted\nin UTF-16 code units.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This value may depend on the JS engine that is being used.

                                                                                                                                                                                                                                                      ", + "shortDesc": "The largest length allowed for a single `string` instance." + } + ], + "type": "module", + "displayName": "Buffer constants" } ], "type": "module", - "displayName": "Buffer Constants" + "displayName": "`buffer` module APIs" }, { "textRaw": "`Buffer.from()`, `Buffer.alloc()`, and `Buffer.allocUnsafe()`", "name": "`buffer.from()`,_`buffer.alloc()`,_and_`buffer.allocunsafe()`", - "desc": "

                                                                                                                                                                                                                                                      In versions of Node.js prior to 6.0.0, Buffer instances were created using the\nBuffer constructor function, which allocates the returned Buffer\ndifferently based on what arguments are provided:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Passing a number as the first argument to Buffer() (e.g. new Buffer(10))\nallocates a new Buffer object of the specified size. Prior to Node.js 8.0.0,\nthe memory allocated for such Buffer instances is not initialized and\ncan contain sensitive data. Such Buffer instances must be subsequently\ninitialized by using either buf.fill(0) or by writing to the\nentire Buffer before reading data from the Buffer.\nWhile this behavior is intentional to improve performance,\ndevelopment experience has demonstrated that a more explicit distinction is\nrequired between creating a fast-but-uninitialized Buffer versus creating a\nslower-but-safer Buffer. Since Node.js 8.0.0, Buffer(num) and new Buffer(num) return a Buffer with initialized memory.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Passing a string, array, or Buffer as the first argument copies the\npassed object's data into the Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Passing an ArrayBuffer or a SharedArrayBuffer returns a Buffer\nthat shares allocated memory with the given array buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because the behavior of new Buffer() is different depending on the type of the\nfirst argument, security and reliability issues can be inadvertently introduced\ninto applications when argument validation or Buffer initialization is not\nperformed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, if an attacker can cause an application to receive a number where\na string is expected, the application may call new Buffer(100)\ninstead of new Buffer(\"100\"), leading it to allocate a 100 byte buffer instead\nof allocating a 3 byte buffer with content \"100\". This is commonly possible\nusing JSON API calls. Since JSON distinguishes between numeric and string types,\nit allows injection of numbers where a naively written application that does not\nvalidate its input sufficiently might expect to always receive a string.\nBefore Node.js 8.0.0, the 100 byte buffer might contain\narbitrary pre-existing in-memory data, so may be used to expose in-memory\nsecrets to a remote attacker. Since Node.js 8.0.0, exposure of memory cannot\noccur because the data is zero-filled. However, other attacks are still\npossible, such as causing very large buffers to be allocated by the server,\nleading to performance degradation or crashing on memory exhaustion.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To make the creation of Buffer instances more reliable and less error-prone,\nthe various forms of the new Buffer() constructor have been deprecated\nand replaced by separate Buffer.from(), Buffer.alloc(), and\nBuffer.allocUnsafe() methods.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Developers should migrate all existing uses of the new Buffer() constructors\nto one of these new APIs.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Buffer instances returned by Buffer.allocUnsafe() and\nBuffer.from(array) may be allocated off a shared internal memory pool\nif size is less than or equal to half Buffer.poolSize. Instances\nreturned by Buffer.allocUnsafeSlow() never use the shared internal\nmemory pool.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      In versions of Node.js prior to 6.0.0, Buffer instances were created using the\nBuffer constructor function, which allocates the returned Buffer\ndifferently based on what arguments are provided:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Passing a number as the first argument to Buffer() (e.g. new Buffer(10))\nallocates a new Buffer object of the specified size. Prior to Node.js 8.0.0,\nthe memory allocated for such Buffer instances is not initialized and\ncan contain sensitive data. Such Buffer instances must be subsequently\ninitialized by using either buf.fill(0) or by writing to the\nentire Buffer before reading data from the Buffer.\nWhile this behavior is intentional to improve performance,\ndevelopment experience has demonstrated that a more explicit distinction is\nrequired between creating a fast-but-uninitialized Buffer versus creating a\nslower-but-safer Buffer. Since Node.js 8.0.0, Buffer(num) and new Buffer(num) return a Buffer with initialized memory.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Passing a string, array, or Buffer as the first argument copies the\npassed object's data into the Buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Passing an ArrayBuffer or a SharedArrayBuffer returns a Buffer\nthat shares allocated memory with the given array buffer.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because the behavior of new Buffer() is different depending on the type of the\nfirst argument, security and reliability issues can be inadvertently introduced\ninto applications when argument validation or Buffer initialization is not\nperformed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, if an attacker can cause an application to receive a number where\na string is expected, the application may call new Buffer(100)\ninstead of new Buffer(\"100\"), leading it to allocate a 100 byte buffer instead\nof allocating a 3 byte buffer with content \"100\". This is commonly possible\nusing JSON API calls. Since JSON distinguishes between numeric and string types,\nit allows injection of numbers where a naively written application that does not\nvalidate its input sufficiently might expect to always receive a string.\nBefore Node.js 8.0.0, the 100 byte buffer might contain\narbitrary pre-existing in-memory data, so may be used to expose in-memory\nsecrets to a remote attacker. Since Node.js 8.0.0, exposure of memory cannot\noccur because the data is zero-filled. However, other attacks are still\npossible, such as causing very large buffers to be allocated by the server,\nleading to performance degradation or crashing on memory exhaustion.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To make the creation of Buffer instances more reliable and less error-prone,\nthe various forms of the new Buffer() constructor have been deprecated\nand replaced by separate Buffer.from(), Buffer.alloc(), and\nBuffer.allocUnsafe() methods.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Developers should migrate all existing uses of the new Buffer() constructors\nto one of these new APIs.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Buffer instances returned by Buffer.allocUnsafe() and\nBuffer.from(array) may be allocated off a shared internal memory pool\nif size is less than or equal to half Buffer.poolSize. Instances\nreturned by Buffer.allocUnsafeSlow() never use the shared internal\nmemory pool.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "The `--zero-fill-buffers` command line option", @@ -12853,14 +13689,14 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Node.js can be started using the --zero-fill-buffers command line option to\ncause all newly-allocated Buffer instances to be zero-filled upon creation by\ndefault. Without the option, buffers created with Buffer.allocUnsafe(),\nBuffer.allocUnsafeSlow(), and new SlowBuffer(size) are not zero-filled.\nUse of this flag can have a measurable negative impact on performance. Use the\n--zero-fill-buffers option only when necessary to enforce that newly allocated\nBuffer instances cannot contain old data that is potentially sensitive.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node --zero-fill-buffers\n> Buffer.allocUnsafe(5);\n<Buffer 00 00 00 00 00>\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Node.js can be started using the --zero-fill-buffers command line option to\ncause all newly-allocated Buffer instances to be zero-filled upon creation by\ndefault. Without the option, buffers created with Buffer.allocUnsafe(),\nBuffer.allocUnsafeSlow(), and new SlowBuffer(size) are not zero-filled.\nUse of this flag can have a measurable negative impact on performance. Use the\n--zero-fill-buffers option only when necessary to enforce that newly allocated\nBuffer instances cannot contain old data that is potentially sensitive.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node --zero-fill-buffers\n> Buffer.allocUnsafe(5);\n<Buffer 00 00 00 00 00>\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "The `--zero-fill-buffers` command line option" }, { "textRaw": "What makes `Buffer.allocUnsafe()` and `Buffer.allocUnsafeSlow()` \"unsafe\"?", "name": "what_makes_`buffer.allocunsafe()`_and_`buffer.allocunsafeslow()`_\"unsafe\"?", - "desc": "

                                                                                                                                                                                                                                                      When calling Buffer.allocUnsafe() and Buffer.allocUnsafeSlow(), the\nsegment of allocated memory is uninitialized (it is not zeroed-out). While\nthis design makes the allocation of memory quite fast, the allocated segment of\nmemory might contain old data that is potentially sensitive. Using a Buffer\ncreated by Buffer.allocUnsafe() without completely overwriting the\nmemory can allow this old data to be leaked when the Buffer memory is read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While there are clear performance advantages to using\nBuffer.allocUnsafe(), extra care must be taken in order to avoid\nintroducing security vulnerabilities into an application.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      When calling Buffer.allocUnsafe() and Buffer.allocUnsafeSlow(), the\nsegment of allocated memory is uninitialized (it is not zeroed-out). While\nthis design makes the allocation of memory quite fast, the allocated segment of\nmemory might contain old data that is potentially sensitive. Using a Buffer\ncreated by Buffer.allocUnsafe() without completely overwriting the\nmemory can allow this old data to be leaked when the Buffer memory is read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While there are clear performance advantages to using\nBuffer.allocUnsafe(), extra care must be taken in order to avoid\nintroducing security vulnerabilities into an application.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "What makes `Buffer.allocUnsafe()` and `Buffer.allocUnsafeSlow()` \"unsafe\"?" } @@ -12877,7 +13713,7 @@ "desc": "

                                                                                                                                                                                                                                                      The Buffer class is a global type for dealing with binary data directly.\nIt can be constructed in a variety of ways.

                                                                                                                                                                                                                                                      ", "classMethods": [ { - "textRaw": "Class Method: `Buffer.alloc(size[, fill[, encoding]])`", + "textRaw": "Static method: `Buffer.alloc(size[, fill[, encoding]])`", "type": "classMethod", "name": "alloc", "meta": { @@ -12928,10 +13764,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Allocates a new Buffer of size bytes. If fill is undefined, the\nBuffer will be zero-filled.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.alloc(5);\n\nconsole.log(buf);\n// Prints: <Buffer 00 00 00 00 00>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If fill is specified, the allocated Buffer will be initialized by calling\nbuf.fill(fill).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.alloc(5, 'a');\n\nconsole.log(buf);\n// Prints: <Buffer 61 61 61 61 61>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both fill and encoding are specified, the allocated Buffer will be\ninitialized by calling buf.fill(fill, encoding).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');\n\nconsole.log(buf);\n// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling Buffer.alloc() can be measurably slower than the alternative\nBuffer.allocUnsafe() but ensures that the newly created Buffer instance\ncontents will never contain sensitive data from previous allocations, including\ndata that might not have been allocated for Buffers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Allocates a new Buffer of size bytes. If fill is undefined, the\nBuffer will be zero-filled.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.alloc(5);\n\nconsole.log(buf);\n// Prints: <Buffer 00 00 00 00 00>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If fill is specified, the allocated Buffer will be initialized by calling\nbuf.fill(fill).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.alloc(5, 'a');\n\nconsole.log(buf);\n// Prints: <Buffer 61 61 61 61 61>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both fill and encoding are specified, the allocated Buffer will be\ninitialized by calling buf.fill(fill, encoding).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');\n\nconsole.log(buf);\n// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling Buffer.alloc() can be measurably slower than the alternative\nBuffer.allocUnsafe() but ensures that the newly created Buffer instance\ncontents will never contain sensitive data from previous allocations, including\ndata that might not have been allocated for Buffers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.allocUnsafe(size)`", + "textRaw": "Static method: `Buffer.allocUnsafe(size)`", "type": "classMethod", "name": "allocUnsafe", "meta": { @@ -12958,10 +13794,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Allocates a new Buffer of size bytes. If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The underlying memory for Buffer instances created in this way is not\ninitialized. The contents of the newly created Buffer are unknown and\nmay contain sensitive data. Use Buffer.alloc() instead to initialize\nBuffer instances with zeroes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(10);\n\nconsole.log(buf);\n// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>\n\nbuf.fill(0);\n\nconsole.log(buf);\n// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer module pre-allocates an internal Buffer instance of\nsize Buffer.poolSize that is used as a pool for the fast allocation of new\nBuffer instances created using Buffer.allocUnsafe(),\nBuffer.from(array), and the deprecated new Buffer(size) constructor only\nwhen size is less than or equal to Buffer.poolSize >> 1 (floor of\nBuffer.poolSize divided by two).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use of this pre-allocated internal memory pool is a key difference between\ncalling Buffer.alloc(size, fill) vs. Buffer.allocUnsafe(size).fill(fill).\nSpecifically, Buffer.alloc(size, fill) will never use the internal Buffer\npool, while Buffer.allocUnsafe(size).fill(fill) will use the internal\nBuffer pool if size is less than or equal to half Buffer.poolSize. The\ndifference is subtle but can be important when an application requires the\nadditional performance that Buffer.allocUnsafe() provides.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Allocates a new Buffer of size bytes. If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The underlying memory for Buffer instances created in this way is not\ninitialized. The contents of the newly created Buffer are unknown and\nmay contain sensitive data. Use Buffer.alloc() instead to initialize\nBuffer instances with zeroes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(10);\n\nconsole.log(buf);\n// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>\n\nbuf.fill(0);\n\nconsole.log(buf);\n// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer module pre-allocates an internal Buffer instance of\nsize Buffer.poolSize that is used as a pool for the fast allocation of new\nBuffer instances created using Buffer.allocUnsafe(),\nBuffer.from(array), Buffer.concat(), and the deprecated\nnew Buffer(size) constructor only when size is less than or equal\nto Buffer.poolSize >> 1 (floor of Buffer.poolSize divided by two).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use of this pre-allocated internal memory pool is a key difference between\ncalling Buffer.alloc(size, fill) vs. Buffer.allocUnsafe(size).fill(fill).\nSpecifically, Buffer.alloc(size, fill) will never use the internal Buffer\npool, while Buffer.allocUnsafe(size).fill(fill) will use the internal\nBuffer pool if size is less than or equal to half Buffer.poolSize. The\ndifference is subtle but can be important when an application requires the\nadditional performance that Buffer.allocUnsafe() provides.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.allocUnsafeSlow(size)`", + "textRaw": "Static method: `Buffer.allocUnsafeSlow(size)`", "type": "classMethod", "name": "allocUnsafeSlow", "meta": { @@ -12982,10 +13818,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Allocates a new Buffer of size bytes. If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown. A zero-length Buffer is created if size is 0.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The underlying memory for Buffer instances created in this way is not\ninitialized. The contents of the newly created Buffer are unknown and\nmay contain sensitive data. Use buf.fill(0) to initialize\nsuch Buffer instances with zeroes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using Buffer.allocUnsafe() to allocate new Buffer instances,\nallocations under 4KB are sliced from a single pre-allocated Buffer. This\nallows applications to avoid the garbage collection overhead of creating many\nindividually allocated Buffer instances. This approach improves both\nperformance and memory usage by eliminating the need to track and clean up as\nmany individual ArrayBuffer objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      However, in the case where a developer may need to retain a small chunk of\nmemory from a pool for an indeterminate amount of time, it may be appropriate\nto create an un-pooled Buffer instance using Buffer.allocUnsafeSlow() and\nthen copying out the relevant bits.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Need to keep around a few small chunks of memory.\nconst store = [];\n\nsocket.on('readable', () => {\n  let data;\n  while (null !== (data = readable.read())) {\n    // Allocate for retained data.\n    const sb = Buffer.allocUnsafeSlow(10);\n\n    // Copy the data into the new allocation.\n    data.copy(sb, 0, 0, 10);\n\n    store.push(sb);\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Allocates a new Buffer of size bytes. If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown. A zero-length Buffer is created if size is 0.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The underlying memory for Buffer instances created in this way is not\ninitialized. The contents of the newly created Buffer are unknown and\nmay contain sensitive data. Use buf.fill(0) to initialize\nsuch Buffer instances with zeroes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using Buffer.allocUnsafe() to allocate new Buffer instances,\nallocations under 4KB are sliced from a single pre-allocated Buffer. This\nallows applications to avoid the garbage collection overhead of creating many\nindividually allocated Buffer instances. This approach improves both\nperformance and memory usage by eliminating the need to track and clean up as\nmany individual ArrayBuffer objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      However, in the case where a developer may need to retain a small chunk of\nmemory from a pool for an indeterminate amount of time, it may be appropriate\nto create an un-pooled Buffer instance using Buffer.allocUnsafeSlow() and\nthen copying out the relevant bits.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Need to keep around a few small chunks of memory.\nconst store = [];\n\nsocket.on('readable', () => {\n  let data;\n  while (null !== (data = readable.read())) {\n    // Allocate for retained data.\n    const sb = Buffer.allocUnsafeSlow(10);\n\n    // Copy the data into the new allocation.\n    data.copy(sb, 0, 0, 10);\n\n    store.push(sb);\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.byteLength(string[, encoding])`", + "textRaw": "Static method: `Buffer.byteLength(string[, encoding])`", "type": "classMethod", "name": "byteLength", "meta": { @@ -13033,7 +13869,7 @@ "desc": "

                                                                                                                                                                                                                                                      Returns the byte length of a string when encoded using encoding.\nThis is not the same as String.prototype.length, which does not account\nfor the encoding that is used to convert the string into bytes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For 'base64' and 'hex', this function assumes valid input. For strings that\ncontain non-base64/hex-encoded data (e.g. whitespace), the return value might be\ngreater than the length of a Buffer created from the string.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const str = '\\u00bd + \\u00bc = \\u00be';\n\nconsole.log(`${str}: ${str.length} characters, ` +\n            `${Buffer.byteLength(str, 'utf8')} bytes`);\n// Prints: ½ + ¼ = ¾: 9 characters, 12 bytes\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When string is a Buffer/DataView/TypedArray/ArrayBuffer/\nSharedArrayBuffer, the byte length as reported by .byteLength\nis returned.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.compare(buf1, buf2)`", + "textRaw": "Static method: `Buffer.compare(buf1, buf2)`", "type": "classMethod", "name": "compare", "meta": { @@ -13073,7 +13909,7 @@ "desc": "

                                                                                                                                                                                                                                                      Compares buf1 to buf2, typically for the purpose of sorting arrays of\nBuffer instances. This is equivalent to calling\nbuf1.compare(buf2).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf1 = Buffer.from('1234');\nconst buf2 = Buffer.from('0123');\nconst arr = [buf1, buf2];\n\nconsole.log(arr.sort(Buffer.compare));\n// Prints: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]\n// (This result is equal to: [buf2, buf1].)\n
                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.concat(list[, totalLength])`", + "textRaw": "Static method: `Buffer.concat(list[, totalLength])`", "type": "classMethod", "name": "concat", "meta": { @@ -13111,10 +13947,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns a new Buffer which is the result of concatenating all the Buffer\ninstances in the list together.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the list has no items, or if the totalLength is 0, then a new zero-length\nBuffer is returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If totalLength is not provided, it is calculated from the Buffer instances\nin list by adding their lengths.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If totalLength is provided, it is coerced to an unsigned integer. If the\ncombined length of the Buffers in list exceeds totalLength, the result is\ntruncated to totalLength.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Create a single `Buffer` from a list of three `Buffer` instances.\n\nconst buf1 = Buffer.alloc(10);\nconst buf2 = Buffer.alloc(14);\nconst buf3 = Buffer.alloc(18);\nconst totalLength = buf1.length + buf2.length + buf3.length;\n\nconsole.log(totalLength);\n// Prints: 42\n\nconst bufA = Buffer.concat([buf1, buf2, buf3], totalLength);\n\nconsole.log(bufA);\n// Prints: <Buffer 00 00 00 00 ...>\nconsole.log(bufA.length);\n// Prints: 42\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns a new Buffer which is the result of concatenating all the Buffer\ninstances in the list together.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the list has no items, or if the totalLength is 0, then a new zero-length\nBuffer is returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If totalLength is not provided, it is calculated from the Buffer instances\nin list by adding their lengths.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If totalLength is provided, it is coerced to an unsigned integer. If the\ncombined length of the Buffers in list exceeds totalLength, the result is\ntruncated to totalLength.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Create a single `Buffer` from a list of three `Buffer` instances.\n\nconst buf1 = Buffer.alloc(10);\nconst buf2 = Buffer.alloc(14);\nconst buf3 = Buffer.alloc(18);\nconst totalLength = buf1.length + buf2.length + buf3.length;\n\nconsole.log(totalLength);\n// Prints: 42\n\nconst bufA = Buffer.concat([buf1, buf2, buf3], totalLength);\n\nconsole.log(bufA);\n// Prints: <Buffer 00 00 00 00 ...>\nconsole.log(bufA.length);\n// Prints: 42\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Buffer.concat() may also use the internal Buffer pool like\nBuffer.allocUnsafe() does.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.from(array)`", + "textRaw": "Static method: `Buffer.from(array)`", "type": "classMethod", "name": "from", "meta": { @@ -13134,10 +13970,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Allocates a new Buffer using an array of bytes in the range 0255.\nArray entries outside that range will be truncated to fit into it.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.\nconst buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if array is not an Array or another type\nappropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Buffer.from(array) and Buffer.from(string) may also use the internal\nBuffer pool like Buffer.allocUnsafe() does.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Allocates a new Buffer using an array of bytes in the range 0255.\nArray entries outside that range will be truncated to fit into it.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.\nconst buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if array is not an Array or another type\nappropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Buffer.from(array) and Buffer.from(string) may also use the internal\nBuffer pool like Buffer.allocUnsafe() does.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.from(arrayBuffer[, byteOffset[, length]])`", + "textRaw": "Static method: `Buffer.from(arrayBuffer[, byteOffset[, length]])`", "type": "classMethod", "name": "from", "meta": { @@ -13175,7 +14011,7 @@ "desc": "

                                                                                                                                                                                                                                                      This creates a view of the ArrayBuffer without copying the underlying\nmemory. For example, when passed a reference to the .buffer property of a\nTypedArray instance, the newly created Buffer will share the same\nallocated memory as the TypedArray.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const arr = new Uint16Array(2);\n\narr[0] = 5000;\narr[1] = 4000;\n\n// Shares memory with `arr`.\nconst buf = Buffer.from(arr.buffer);\n\nconsole.log(buf);\n// Prints: <Buffer 88 13 a0 0f>\n\n// Changing the original Uint16Array changes the Buffer also.\narr[1] = 6000;\n\nconsole.log(buf);\n// Prints: <Buffer 88 13 70 17>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional byteOffset and length arguments specify a memory range within\nthe arrayBuffer that will be shared by the Buffer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const ab = new ArrayBuffer(10);\nconst buf = Buffer.from(ab, 0, 2);\n\nconsole.log(buf.length);\n// Prints: 2\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if arrayBuffer is not an ArrayBuffer or a\nSharedArrayBuffer or another type appropriate for Buffer.from()\nvariants.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.from(buffer)`", + "textRaw": "Static method: `Buffer.from(buffer)`", "type": "classMethod", "name": "from", "meta": { @@ -13199,7 +14035,7 @@ "desc": "

                                                                                                                                                                                                                                                      Copies the passed buffer data onto a new Buffer instance.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf1 = Buffer.from('buffer');\nconst buf2 = Buffer.from(buf1);\n\nbuf1[0] = 0x61;\n\nconsole.log(buf1.toString());\n// Prints: auffer\nconsole.log(buf2.toString());\n// Prints: buffer\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if buffer is not a Buffer or another type\nappropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.from(object[, offsetOrEncoding[, length]])`", + "textRaw": "Static method: `Buffer.from(object[, offsetOrEncoding[, length]])`", "type": "classMethod", "name": "from", "meta": { @@ -13218,24 +14054,24 @@ "desc": "An object supporting `Symbol.toPrimitive` or `valueOf()`." }, { - "textRaw": "`offsetOrEncoding` {integer|string} A byte-offset or encoding, depending on the value returned either by `object.valueOf()` or `object[Symbol.toPrimitive]()`.", + "textRaw": "`offsetOrEncoding` {integer|string} A byte-offset or encoding.", "name": "offsetOrEncoding", "type": "integer|string", - "desc": "A byte-offset or encoding, depending on the value returned either by `object.valueOf()` or `object[Symbol.toPrimitive]()`." + "desc": "A byte-offset or encoding." }, { - "textRaw": "`length` {integer} A length, depending on the value returned either by `object.valueOf()` or `object[Symbol.toPrimitive]()`.", + "textRaw": "`length` {integer} A length.", "name": "length", "type": "integer", - "desc": "A length, depending on the value returned either by `object.valueOf()` or `object[Symbol.toPrimitive]()`." + "desc": "A length." } ] } ], - "desc": "

                                                                                                                                                                                                                                                      For objects whose valueOf() function returns a value not strictly equal to\nobject, returns Buffer.from(object.valueOf(), offsetOrEncoding, length).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from(new String('this is a test'));\n// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For objects that support Symbol.toPrimitive, returns\nBuffer.from(object[Symbol.toPrimitive](), offsetOrEncoding, length).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      class Foo {\n  [Symbol.toPrimitive]() {\n    return 'this is a test';\n  }\n}\n\nconst buf = Buffer.from(new Foo(), 'utf8');\n// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if object does not have the mentioned methods or\nis not of another type appropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      For objects whose valueOf() function returns a value not strictly equal to\nobject, returns Buffer.from(object.valueOf(), offsetOrEncoding, length).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from(new String('this is a test'));\n// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For objects that support Symbol.toPrimitive, returns\nBuffer.from(object[Symbol.toPrimitive]('string'), offsetOrEncoding).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      class Foo {\n  [Symbol.toPrimitive]() {\n    return 'this is a test';\n  }\n}\n\nconst buf = Buffer.from(new Foo(), 'utf8');\n// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if object does not have the mentioned methods or\nis not of another type appropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.from(string[, encoding])`", + "textRaw": "Static method: `Buffer.from(string[, encoding])`", "type": "classMethod", "name": "from", "meta": { @@ -13266,7 +14102,7 @@ "desc": "

                                                                                                                                                                                                                                                      Creates a new Buffer containing string. The encoding parameter identifies\nthe character encoding to be used when converting string into bytes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf1 = Buffer.from('this is a tést');\nconst buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');\n\nconsole.log(buf1.toString());\n// Prints: this is a tést\nconsole.log(buf2.toString());\n// Prints: this is a tést\nconsole.log(buf1.toString('latin1'));\n// Prints: this is a tést\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError will be thrown if string is not a string or another type\nappropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.isBuffer(obj)`", + "textRaw": "Static method: `Buffer.isBuffer(obj)`", "type": "classMethod", "name": "isBuffer", "meta": { @@ -13294,7 +14130,7 @@ "desc": "

                                                                                                                                                                                                                                                      Returns true if obj is a Buffer, false otherwise.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Class Method: `Buffer.isEncoding(encoding)`", + "textRaw": "Static method: `Buffer.isEncoding(encoding)`", "type": "classMethod", "name": "isEncoding", "meta": { @@ -13348,7 +14184,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The index operator [index] can be used to get and set the octet at position\nindex in buf. The values refer to individual bytes, so the legal value\nrange is between 0x00 and 0xFF (hex) or 0 and 255 (decimal).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This operator is inherited from Uint8Array, so its behavior on out-of-bounds\naccess is the same as Uint8Array. In other words, buf[index] returns\nundefined when index is negative or >= buf.length, and\nbuf[index] = value does not modify the buffer if index is negative or\n>= buf.length.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Copy an ASCII string into a `Buffer` one byte at a time.\n// (This only works for ASCII-only strings. In general, one should use\n// `Buffer.from()` to perform this conversion.)\n\nconst str = 'Node.js';\nconst buf = Buffer.allocUnsafe(str.length);\n\nfor (let i = 0; i < str.length; i++) {\n  buf[i] = str.charCodeAt(i);\n}\n\nconsole.log(buf.toString('utf8'));\n// Prints: Node.js\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The index operator [index] can be used to get and set the octet at position\nindex in buf. The values refer to individual bytes, so the legal value\nrange is between 0x00 and 0xFF (hex) or 0 and 255 (decimal).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This operator is inherited from Uint8Array, so its behavior on out-of-bounds\naccess is the same as Uint8Array. In other words, buf[index] returns\nundefined when index is negative or greater or equal to buf.length, and\nbuf[index] = value does not modify the buffer if index is negative or\n>= buf.length.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Copy an ASCII string into a `Buffer` one byte at a time.\n// (This only works for ASCII-only strings. In general, one should use\n// `Buffer.from()` to perform this conversion.)\n\nconst str = 'Node.js';\nconst buf = Buffer.allocUnsafe(str.length);\n\nfor (let i = 0; i < str.length; i++) {\n  buf[i] = str.charCodeAt(i);\n}\n\nconsole.log(buf.toString('utf8'));\n// Prints: Node.js\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buffer` {ArrayBuffer} The underlying `ArrayBuffer` object based on which this `Buffer` object is created.", @@ -13358,11 +14194,11 @@ "shortDesc": "The underlying `ArrayBuffer` object based on which this `Buffer` object is created." }, { - "textRaw": "`byteOffset` {integer} The `byteOffset` on the underlying `ArrayBuffer` object based on which this `Buffer` object is created.", + "textRaw": "`byteOffset` {integer} The `byteOffset` of the `Buffer`s underlying `ArrayBuffer` object.", "type": "integer", "name": "byteOffset", - "desc": "

                                                                                                                                                                                                                                                      When setting byteOffset in Buffer.from(ArrayBuffer, byteOffset, length),\nor sometimes when allocating a buffer smaller than Buffer.poolSize, the\nbuffer doesn't start from a zero offset on the underlying ArrayBuffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This can cause problems when accessing the underlying ArrayBuffer directly\nusing buf.buffer, as other parts of the ArrayBuffer may be unrelated\nto the buf object itself.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A common issue when creating a TypedArray object that shares its memory with\na Buffer is that in this case one needs to specify the byteOffset correctly:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Create a buffer smaller than `Buffer.poolSize`.\nconst nodeBuffer = new Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n\n// When casting the Node.js Buffer to an Int8Array, use the byteOffset\n// to refer only to the part of `nodeBuffer.buffer` that contains the memory\n// for `nodeBuffer`.\nnew Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);\n
                                                                                                                                                                                                                                                      ", - "shortDesc": "The `byteOffset` on the underlying `ArrayBuffer` object based on which this `Buffer` object is created." + "desc": "

                                                                                                                                                                                                                                                      When setting byteOffset in Buffer.from(ArrayBuffer, byteOffset, length),\nor sometimes when allocating a Buffer smaller than Buffer.poolSize, the\nbuffer does not start from a zero offset on the underlying ArrayBuffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This can cause problems when accessing the underlying ArrayBuffer directly\nusing buf.buffer, as other parts of the ArrayBuffer may be unrelated\nto the Buffer object itself.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A common issue when creating a TypedArray object that shares its memory with\na Buffer is that in this case one needs to specify the byteOffset correctly:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Create a buffer smaller than `Buffer.poolSize`.\nconst nodeBuffer = new Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n\n// When casting the Node.js Buffer to an Int8Array, use the byteOffset\n// to refer only to the part of `nodeBuffer.buffer` that contains the memory\n// for `nodeBuffer`.\nnew Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);\n
                                                                                                                                                                                                                                                      ", + "shortDesc": "The `byteOffset` of the `Buffer`s underlying `ArrayBuffer` object." }, { "textRaw": "`length` {integer}", @@ -13821,7 +14657,8 @@ "name": "readBigInt64BE", "meta": { "added": [ - "v12.0.0" + "v12.0.0", + "v10.20.0" ], "changes": [] }, @@ -13843,7 +14680,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a signed 64-bit integer from buf at the specified offset with\nthe specified endianness (readBigInt64BE() reads as big endian,\nreadBigInt64LE() reads as little endian).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a signed, big-endian 64-bit integer from buf at the specified offset.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed\nvalues.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readBigInt64LE([offset])`", @@ -13873,7 +14710,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a signed 64-bit integer from buf at the specified offset with\nthe specified endianness (readBigInt64BE() reads as big endian,\nreadBigInt64LE() reads as little endian).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a signed, little-endian 64-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed\nvalues.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readBigUInt64BE([offset])`", @@ -13883,7 +14720,13 @@ "added": [ "v12.0.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34960", + "description": "This function is also available as `buf.readBigUint64BE()`." + } + ] }, "signatures": [ { @@ -13903,7 +14746,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned 64-bit integer from buf at the specified offset with\nthe specified endianness (readBigUInt64BE() reads as big endian,\nreadBigUInt64LE() reads as little endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);\n\nconsole.log(buf.readBigUInt64BE(0));\n// Prints: 4294967295n\n\nconsole.log(buf.readBigUInt64LE(0));\n// Prints: 18446744069414584320n\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned, big-endian 64-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);\n\nconsole.log(buf.readBigUInt64BE(0));\n// Prints: 4294967295n\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readBigUInt64LE([offset])`", @@ -13911,9 +14754,16 @@ "name": "readBigUInt64LE", "meta": { "added": [ - "v12.0.0" + "v12.0.0", + "v10.20.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34960", + "description": "This function is also available as `buf.readBigUint64LE()`." + } + ] }, "signatures": [ { @@ -13933,7 +14783,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned 64-bit integer from buf at the specified offset with\nthe specified endianness (readBigUInt64BE() reads as big endian,\nreadBigUInt64LE() reads as little endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);\n\nconsole.log(buf.readBigUInt64BE(0));\n// Prints: 4294967295n\n\nconsole.log(buf.readBigUInt64LE(0));\n// Prints: 18446744069414584320n\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned, little-endian 64-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);\n\nconsole.log(buf.readBigUInt64LE(0));\n// Prints: 18446744069414584320n\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readDoubleBE([offset])`", @@ -13969,7 +14819,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a 64-bit double from buf at the specified offset with the specified\nendianness (readDoubleBE() reads as big endian, readDoubleLE() reads as\nlittle endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);\n\nconsole.log(buf.readDoubleBE(0));\n// Prints: 8.20788039913184e-304\nconsole.log(buf.readDoubleLE(0));\n// Prints: 5.447603722011605e-270\nconsole.log(buf.readDoubleLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a 64-bit, big-endian double from buf at the specified offset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);\n\nconsole.log(buf.readDoubleBE(0));\n// Prints: 8.20788039913184e-304\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readDoubleLE([offset])`", @@ -14005,7 +14855,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a 64-bit double from buf at the specified offset with the specified\nendianness (readDoubleBE() reads as big endian, readDoubleLE() reads as\nlittle endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);\n\nconsole.log(buf.readDoubleBE(0));\n// Prints: 8.20788039913184e-304\nconsole.log(buf.readDoubleLE(0));\n// Prints: 5.447603722011605e-270\nconsole.log(buf.readDoubleLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a 64-bit, little-endian double from buf at the specified offset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);\n\nconsole.log(buf.readDoubleLE(0));\n// Prints: 5.447603722011605e-270\nconsole.log(buf.readDoubleLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readFloatBE([offset])`", @@ -14041,7 +14891,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a 32-bit float from buf at the specified offset with the specified\nendianness (readFloatBE() reads as big endian, readFloatLE() reads as\nlittle endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4]);\n\nconsole.log(buf.readFloatBE(0));\n// Prints: 2.387939260590663e-38\nconsole.log(buf.readFloatLE(0));\n// Prints: 1.539989614439558e-36\nconsole.log(buf.readFloatLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a 32-bit, big-endian float from buf at the specified offset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4]);\n\nconsole.log(buf.readFloatBE(0));\n// Prints: 2.387939260590663e-38\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readFloatLE([offset])`", @@ -14077,7 +14927,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a 32-bit float from buf at the specified offset with the specified\nendianness (readFloatBE() reads as big endian, readFloatLE() reads as\nlittle endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4]);\n\nconsole.log(buf.readFloatBE(0));\n// Prints: 2.387939260590663e-38\nconsole.log(buf.readFloatLE(0));\n// Prints: 1.539989614439558e-36\nconsole.log(buf.readFloatLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a 32-bit, little-endian float from buf at the specified offset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([1, 2, 3, 4]);\n\nconsole.log(buf.readFloatLE(0));\n// Prints: 1.539989614439558e-36\nconsole.log(buf.readFloatLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readInt8([offset])`", @@ -14149,7 +14999,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a signed 16-bit integer from buf at the specified offset with\nthe specified endianness (readInt16BE() reads as big endian,\nreadInt16LE() reads as little endian).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0, 5]);\n\nconsole.log(buf.readInt16BE(0));\n// Prints: 5\nconsole.log(buf.readInt16LE(0));\n// Prints: 1280\nconsole.log(buf.readInt16LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a signed, big-endian 16-bit integer from buf at the specified offset.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0, 5]);\n\nconsole.log(buf.readInt16BE(0));\n// Prints: 5\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readInt16LE([offset])`", @@ -14185,7 +15035,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a signed 16-bit integer from buf at the specified offset with\nthe specified endianness (readInt16BE() reads as big endian,\nreadInt16LE() reads as little endian).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0, 5]);\n\nconsole.log(buf.readInt16BE(0));\n// Prints: 5\nconsole.log(buf.readInt16LE(0));\n// Prints: 1280\nconsole.log(buf.readInt16LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a signed, little-endian 16-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0, 5]);\n\nconsole.log(buf.readInt16LE(0));\n// Prints: 1280\nconsole.log(buf.readInt16LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readInt32BE([offset])`", @@ -14221,7 +15071,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a signed 32-bit integer from buf at the specified offset with\nthe specified endianness (readInt32BE() reads as big endian,\nreadInt32LE() reads as little endian).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0, 0, 0, 5]);\n\nconsole.log(buf.readInt32BE(0));\n// Prints: 5\nconsole.log(buf.readInt32LE(0));\n// Prints: 83886080\nconsole.log(buf.readInt32LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a signed, big-endian 32-bit integer from buf at the specified offset.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0, 0, 0, 5]);\n\nconsole.log(buf.readInt32BE(0));\n// Prints: 5\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readInt32LE([offset])`", @@ -14257,7 +15107,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads a signed 32-bit integer from buf at the specified offset with\nthe specified endianness (readInt32BE() reads as big endian,\nreadInt32LE() reads as little endian).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0, 0, 0, 5]);\n\nconsole.log(buf.readInt32BE(0));\n// Prints: 5\nconsole.log(buf.readInt32LE(0));\n// Prints: 83886080\nconsole.log(buf.readInt32LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads a signed, little-endian 32-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0, 0, 0, 5]);\n\nconsole.log(buf.readInt32LE(0));\n// Prints: 83886080\nconsole.log(buf.readInt32LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readIntBE(offset, byteLength)`", @@ -14298,7 +15148,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as a two's complement signed value. Supports up to 48\nbits of accuracy.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readIntLE(0, 6).toString(16));\n// Prints: -546f87a9cbee\nconsole.log(buf.readIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\nconsole.log(buf.readIntBE(1, 0).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as a big-endian, two's complement signed value\nsupporting up to 48 bits of accuracy.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\nconsole.log(buf.readIntBE(1, 0).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readIntLE(offset, byteLength)`", @@ -14339,7 +15189,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as a two's complement signed value. Supports up to 48\nbits of accuracy.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readIntLE(0, 6).toString(16));\n// Prints: -546f87a9cbee\nconsole.log(buf.readIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\nconsole.log(buf.readIntBE(1, 0).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as a little-endian, two's complement signed value\nsupporting up to 48 bits of accuracy.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readIntLE(0, 6).toString(16));\n// Prints: -546f87a9cbee\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readUInt8([offset])`", @@ -14351,6 +15201,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint8()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -14387,6 +15242,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint16BE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -14411,7 +15271,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned 16-bit integer from buf at the specified offset with\nthe specified endianness (readUInt16BE() reads as big endian, readUInt16LE()\nreads as little endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56]);\n\nconsole.log(buf.readUInt16BE(0).toString(16));\n// Prints: 1234\nconsole.log(buf.readUInt16LE(0).toString(16));\n// Prints: 3412\nconsole.log(buf.readUInt16BE(1).toString(16));\n// Prints: 3456\nconsole.log(buf.readUInt16LE(1).toString(16));\n// Prints: 5634\nconsole.log(buf.readUInt16LE(2).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned, big-endian 16-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56]);\n\nconsole.log(buf.readUInt16BE(0).toString(16));\n// Prints: 1234\nconsole.log(buf.readUInt16BE(1).toString(16));\n// Prints: 3456\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readUInt16LE([offset])`", @@ -14423,6 +15283,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint16LE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -14447,7 +15312,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned 16-bit integer from buf at the specified offset with\nthe specified endianness (readUInt16BE() reads as big endian, readUInt16LE()\nreads as little endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56]);\n\nconsole.log(buf.readUInt16BE(0).toString(16));\n// Prints: 1234\nconsole.log(buf.readUInt16LE(0).toString(16));\n// Prints: 3412\nconsole.log(buf.readUInt16BE(1).toString(16));\n// Prints: 3456\nconsole.log(buf.readUInt16LE(1).toString(16));\n// Prints: 5634\nconsole.log(buf.readUInt16LE(2).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned, little-endian 16-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56]);\n\nconsole.log(buf.readUInt16LE(0).toString(16));\n// Prints: 3412\nconsole.log(buf.readUInt16LE(1).toString(16));\n// Prints: 5634\nconsole.log(buf.readUInt16LE(2).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readUInt32BE([offset])`", @@ -14459,6 +15324,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint32BE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -14483,7 +15353,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned 32-bit integer from buf at the specified offset with\nthe specified endianness (readUInt32BE() reads as big endian,\nreadUInt32LE() reads as little endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);\n\nconsole.log(buf.readUInt32BE(0).toString(16));\n// Prints: 12345678\nconsole.log(buf.readUInt32LE(0).toString(16));\n// Prints: 78563412\nconsole.log(buf.readUInt32LE(1).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned, big-endian 32-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);\n\nconsole.log(buf.readUInt32BE(0).toString(16));\n// Prints: 12345678\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readUInt32LE([offset])`", @@ -14495,6 +15365,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint32LE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -14519,7 +15394,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned 32-bit integer from buf at the specified offset with\nthe specified endianness (readUInt32BE() reads as big endian,\nreadUInt32LE() reads as little endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);\n\nconsole.log(buf.readUInt32BE(0).toString(16));\n// Prints: 12345678\nconsole.log(buf.readUInt32LE(0).toString(16));\n// Prints: 78563412\nconsole.log(buf.readUInt32LE(1).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads an unsigned, little-endian 32-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);\n\nconsole.log(buf.readUInt32LE(0).toString(16));\n// Prints: 78563412\nconsole.log(buf.readUInt32LE(1).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readUIntBE(offset, byteLength)`", @@ -14531,6 +15406,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUintBE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset and `byteLength` to `uint32` anymore." @@ -14560,7 +15440,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as an unsigned integer. Supports up to 48\nbits of accuracy.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readUIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readUIntLE(0, 6).toString(16));\n// Prints: ab9078563412\nconsole.log(buf.readUIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as an unsigned big-endian integer supporting\nup to 48 bits of accuracy.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readUIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readUIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.readUIntLE(offset, byteLength)`", @@ -14572,6 +15452,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUintLE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset and `byteLength` to `uint32` anymore." @@ -14601,7 +15486,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as an unsigned integer. Supports up to 48\nbits of accuracy.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readUIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readUIntLE(0, 6).toString(16));\n// Prints: ab9078563412\nconsole.log(buf.readUIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as an unsigned, little-endian integer supporting\nup to 48 bits of accuracy.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readUIntLE(0, 6).toString(16));\n// Prints: ab9078563412\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.subarray([start[, end]])`", @@ -14931,7 +15816,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeBigInt64BE() writes as big endian, writeBigInt64LE()\nwrites as little endian).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigInt64BE(0x0102030405060708n, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 05 06 07 08>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as big-endian.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigInt64BE(0x0102030405060708n, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 05 06 07 08>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeBigInt64LE(value[, offset])`", @@ -14939,7 +15824,8 @@ "name": "writeBigInt64LE", "meta": { "added": [ - "v12.0.0" + "v12.0.0", + "v10.20.0" ], "changes": [] }, @@ -14968,7 +15854,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeBigInt64BE() writes as big endian, writeBigInt64LE()\nwrites as little endian).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigInt64BE(0x0102030405060708n, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 05 06 07 08>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as little-endian.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigInt64LE(0x0102030405060708n, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 08 07 06 05 04 03 02 01>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeBigUInt64BE(value[, offset])`", @@ -14976,9 +15862,16 @@ "name": "writeBigUInt64BE", "meta": { "added": [ - "v12.0.0" + "v12.0.0", + "v10.20.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34960", + "description": "This function is also available as `buf.writeBigUint64BE()`." + } + ] }, "signatures": [ { @@ -15005,7 +15898,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with specified endianness\n(writeBigUInt64BE() writes as big endian, writeBigUInt64LE() writes as\nlittle endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigUInt64LE(0xdecafafecacefaden, 0);\n\nconsole.log(buf);\n// Prints: <Buffer de fa ce ca fe fa ca de>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as big-endian.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigUInt64BE(0xdecafafecacefaden, 0);\n\nconsole.log(buf);\n// Prints: <Buffer de ca fa fe ca ce fa de>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeBigUInt64LE(value[, offset])`", @@ -15015,7 +15908,13 @@ "added": [ "v12.0.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34960", + "description": "This function is also available as `buf.writeBigUint64LE()`." + } + ] }, "signatures": [ { @@ -15042,7 +15941,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with specified endianness\n(writeBigUInt64BE() writes as big endian, writeBigUInt64LE() writes as\nlittle endian).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigUInt64LE(0xdecafafecacefaden, 0);\n\nconsole.log(buf);\n// Prints: <Buffer de fa ce ca fe fa ca de>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as little-endian

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigUInt64LE(0xdecafafecacefaden, 0);\n\nconsole.log(buf);\n// Prints: <Buffer de fa ce ca fe fa ca de>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeDoubleBE(value[, offset])`", @@ -15085,7 +15984,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeDoubleBE() writes as big endian, writeDoubleLE() writes\nas little endian). value must be a JavaScript number. Behavior is undefined\nwhen value is anything other than a JavaScript number.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeDoubleBE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>\n\nbuf.writeDoubleLE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as big-endian. The value\nmust be a JavaScript number. Behavior is undefined when value is anything\nother than a JavaScript number.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeDoubleBE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeDoubleLE(value[, offset])`", @@ -15128,7 +16027,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeDoubleBE() writes as big endian, writeDoubleLE() writes\nas little endian). value must be a JavaScript number. Behavior is undefined\nwhen value is anything other than a JavaScript number.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeDoubleBE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>\n\nbuf.writeDoubleLE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as little-endian. The value\nmust be a JavaScript number. Behavior is undefined when value is anything\nother than a JavaScript number.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeDoubleLE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeFloatBE(value[, offset])`", @@ -15171,7 +16070,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with specified endianness\n(writeFloatBE() writes as big endian, writeFloatLE() writes as little\nendian). value must be a JavaScript number. Behavior is undefined when\nvalue is anything other than a JavaScript number.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeFloatBE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 4f 4a fe bb>\n\nbuf.writeFloatLE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer bb fe 4a 4f>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as big-endian. Behavior is\nundefined when value is anything other than a JavaScript number.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeFloatBE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 4f 4a fe bb>\n\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeFloatLE(value[, offset])`", @@ -15214,7 +16113,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with specified endianness\n(writeFloatBE() writes as big endian, writeFloatLE() writes as little\nendian). value must be a JavaScript number. Behavior is undefined when\nvalue is anything other than a JavaScript number.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeFloatBE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 4f 4a fe bb>\n\nbuf.writeFloatLE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer bb fe 4a 4f>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as little-endian. Behavior is\nundefined when value is anything other than a JavaScript number.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeFloatLE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer bb fe 4a 4f>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeInt8(value[, offset])`", @@ -15300,7 +16199,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeInt16BE() writes as big endian, writeInt16LE() writes\nas little endian). value must be a valid signed 16-bit integer. Behavior is\nundefined when value is anything other than a signed 16-bit integer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeInt16BE(0x0102, 0);\nbuf.writeInt16LE(0x0304, 2);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 04 03>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as big-endian. The value\nmust be a valid signed 16-bit integer. Behavior is undefined when value is\nanything other than a signed 16-bit integer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(2);\n\nbuf.writeInt16BE(0x0102, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeInt16LE(value[, offset])`", @@ -15343,7 +16242,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeInt16BE() writes as big endian, writeInt16LE() writes\nas little endian). value must be a valid signed 16-bit integer. Behavior is\nundefined when value is anything other than a signed 16-bit integer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeInt16BE(0x0102, 0);\nbuf.writeInt16LE(0x0304, 2);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 04 03>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as little-endian. The value\nmust be a valid signed 16-bit integer. Behavior is undefined when value is\nanything other than a signed 16-bit integer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(2);\n\nbuf.writeInt16LE(0x0304, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 04 03>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeInt32BE(value[, offset])`", @@ -15386,7 +16285,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeInt32BE() writes aS big endian, writeInt32LE() writes\nas little endian). value must be a valid signed 32-bit integer. Behavior is\nundefined when value is anything other than a signed 32-bit integer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeInt32BE(0x01020304, 0);\nbuf.writeInt32LE(0x05060708, 4);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 08 07 06 05>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as big-endian. The value\nmust be a valid signed 32-bit integer. Behavior is undefined when value is\nanything other than a signed 32-bit integer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeInt32BE(0x01020304, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeInt32LE(value[, offset])`", @@ -15429,7 +16328,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeInt32BE() writes aS big endian, writeInt32LE() writes\nas little endian). value must be a valid signed 32-bit integer. Behavior is\nundefined when value is anything other than a signed 32-bit integer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(8);\n\nbuf.writeInt32BE(0x01020304, 0);\nbuf.writeInt32LE(0x05060708, 4);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 08 07 06 05>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as little-endian. The value\nmust be a valid signed 32-bit integer. Behavior is undefined when value is\nanything other than a signed 32-bit integer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeInt32LE(0x05060708, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 08 07 06 05>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeIntBE(value, offset, byteLength)`", @@ -15477,7 +16376,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes byteLength bytes of value to buf at the specified offset.\nSupports up to 48 bits of accuracy. Behavior is undefined when value is\nanything other than a signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(6);\n\nbuf.writeIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\nbuf.writeIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes byteLength bytes of value to buf at the specified offset\nas big-endian. Supports up to 48 bits of accuracy. Behavior is undefined when\nvalue is anything other than a signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(6);\n\nbuf.writeIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeIntLE(value, offset, byteLength)`", @@ -15525,7 +16424,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes byteLength bytes of value to buf at the specified offset.\nSupports up to 48 bits of accuracy. Behavior is undefined when value is\nanything other than a signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(6);\n\nbuf.writeIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\nbuf.writeIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes byteLength bytes of value to buf at the specified offset\nas little-endian. Supports up to 48 bits of accuracy. Behavior is undefined\nwhen value is anything other than a signed integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(6);\n\nbuf.writeIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeUInt8(value[, offset])`", @@ -15537,6 +16436,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint8()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -15580,6 +16484,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint16BE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -15611,7 +16520,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeUInt16BE() writes as big endian, writeUInt16LE() writes\nas little endian). value must be a valid unsigned 16-bit integer. Behavior is\nundefined when value is anything other than an unsigned 16-bit integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt16BE(0xdead, 0);\nbuf.writeUInt16BE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer de ad be ef>\n\nbuf.writeUInt16LE(0xdead, 0);\nbuf.writeUInt16LE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer ad de ef be>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as big-endian. The value\nmust be a valid unsigned 16-bit integer. Behavior is undefined when value\nis anything other than an unsigned 16-bit integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt16BE(0xdead, 0);\nbuf.writeUInt16BE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer de ad be ef>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeUInt16LE(value[, offset])`", @@ -15623,6 +16532,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint16LE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -15654,7 +16568,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeUInt16BE() writes as big endian, writeUInt16LE() writes\nas little endian). value must be a valid unsigned 16-bit integer. Behavior is\nundefined when value is anything other than an unsigned 16-bit integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt16BE(0xdead, 0);\nbuf.writeUInt16BE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer de ad be ef>\n\nbuf.writeUInt16LE(0xdead, 0);\nbuf.writeUInt16LE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer ad de ef be>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as little-endian. The value\nmust be a valid unsigned 16-bit integer. Behavior is undefined when value is\nanything other than an unsigned 16-bit integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt16LE(0xdead, 0);\nbuf.writeUInt16LE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer ad de ef be>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeUInt32BE(value[, offset])`", @@ -15666,6 +16580,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint32BE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -15697,7 +16616,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeUInt32BE() writes as big endian, writeUInt32LE() writes\nas little endian). value must be a valid unsigned 32-bit integer. Behavior is\nundefined when value is anything other than an unsigned 32-bit integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt32BE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer fe ed fa ce>\n\nbuf.writeUInt32LE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer ce fa ed fe>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as big-endian. The value\nmust be a valid unsigned 32-bit integer. Behavior is undefined when value\nis anything other than an unsigned 32-bit integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt32BE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer fe ed fa ce>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeUInt32LE(value[, offset])`", @@ -15709,6 +16628,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint32LE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -15740,7 +16664,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset with the specified\nendianness (writeUInt32BE() writes as big endian, writeUInt32LE() writes\nas little endian). value must be a valid unsigned 32-bit integer. Behavior is\nundefined when value is anything other than an unsigned 32-bit integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt32BE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer fe ed fa ce>\n\nbuf.writeUInt32LE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer ce fa ed fe>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes value to buf at the specified offset as little-endian. The value\nmust be a valid unsigned 32-bit integer. Behavior is undefined when value is\nanything other than an unsigned 32-bit integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt32LE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer ce fa ed fe>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeUIntBE(value, offset, byteLength)`", @@ -15752,6 +16676,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUintBE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset and `byteLength` to `uint32` anymore." @@ -15788,7 +16717,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes byteLength bytes of value to buf at the specified offset.\nSupports up to 48 bits of accuracy. Behavior is undefined when value is\nanything other than an unsigned integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(6);\n\nbuf.writeUIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\nbuf.writeUIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes byteLength bytes of value to buf at the specified offset\nas big-endian. Supports up to 48 bits of accuracy. Behavior is undefined\nwhen value is anything other than an unsigned integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(6);\n\nbuf.writeUIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`buf.writeUIntLE(value, offset, byteLength)`", @@ -15800,6 +16729,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUintLE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset and `byteLength` to `uint32` anymore." @@ -15836,7 +16770,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Writes byteLength bytes of value to buf at the specified offset.\nSupports up to 48 bits of accuracy. Behavior is undefined when value is\nanything other than an unsigned integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(6);\n\nbuf.writeUIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\nbuf.writeUIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Writes byteLength bytes of value to buf at the specified offset\nas little-endian. Supports up to 48 bits of accuracy. Behavior is undefined\nwhen value is anything other than an unsigned integer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.allocUnsafe(6);\n\nbuf.writeUIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                      " } ], "signatures": [ @@ -15849,7 +16783,7 @@ "desc": "An array of bytes to copy from." } ], - "desc": "

                                                                                                                                                                                                                                                      See Buffer.from(array).

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      See Buffer.from(array).

                                                                                                                                                                                                                                                      " }, { "params": [ @@ -15874,7 +16808,7 @@ "desc": "Number of bytes to expose." } ], - "desc": "

                                                                                                                                                                                                                                                      See\nBuffer.from(arrayBuffer[, byteOffset[, length]]).

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      See\nBuffer.from(arrayBuffer[, byteOffset[, length]]).

                                                                                                                                                                                                                                                      " }, { "params": [ @@ -15885,7 +16819,7 @@ "desc": "An existing `Buffer` or [`Uint8Array`][] from which to copy data." } ], - "desc": "

                                                                                                                                                                                                                                                      See Buffer.from(buffer).

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      See Buffer.from(buffer).

                                                                                                                                                                                                                                                      " }, { "params": [ @@ -15896,7 +16830,7 @@ "desc": "The desired length of the new `Buffer`." } ], - "desc": "

                                                                                                                                                                                                                                                      See Buffer.alloc() and Buffer.allocUnsafe(). This variant of the\nconstructor is equivalent to Buffer.alloc().

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      See Buffer.alloc() and Buffer.allocUnsafe(). This variant of the\nconstructor is equivalent to Buffer.alloc().

                                                                                                                                                                                                                                                      " }, { "params": [ @@ -15914,128 +16848,48 @@ "desc": "The encoding of `string`." } ], - "desc": "

                                                                                                                                                                                                                                                      See Buffer.from(string[, encoding]).

                                                                                                                                                                                                                                                      " - } - ] - }, - { - "textRaw": "Class: `SlowBuffer`", - "type": "class", - "name": "SlowBuffer", - "meta": { - "deprecated": [ - "v6.0.0" - ], - "changes": [] - }, - "stability": 0, - "stabilityText": "Deprecated: Use [`Buffer.allocUnsafeSlow()`][] instead.", - "desc": "

                                                                                                                                                                                                                                                      See Buffer.allocUnsafeSlow(). This was never a class in the sense that\nthe constructor always returned a Buffer instance, rather than a SlowBuffer\ninstance.

                                                                                                                                                                                                                                                      ", - "signatures": [ - { - "params": [ - { - "textRaw": "`size` {integer} The desired length of the new `SlowBuffer`.", - "name": "size", - "type": "integer", - "desc": "The desired length of the new `SlowBuffer`." - } - ], - "desc": "

                                                                                                                                                                                                                                                      See Buffer.allocUnsafeSlow().

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      See Buffer.from(string[, encoding]).

                                                                                                                                                                                                                                                      " } ] } ], - "properties": [ + "type": "module", + "displayName": "Buffer" + }, + { + "textRaw": "C++ Embedder API", + "name": "c++_embedder_api", + "introduced_in": "v12.19.0", + "desc": "

                                                                                                                                                                                                                                                      Node.js provides a number of C++ APIs that can be used to execute JavaScript\nin a Node.js environment from other C++ software.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The documentation for these APIs can be found in src/node.h in the Node.js\nsource tree. In addition to the APIs exposed by Node.js, some required concepts\nare provided by the V8 embedder API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because using Node.js as an embedded library is different from writing code\nthat is executed by Node.js, breaking changes do not follow typical Node.js\ndeprecation policy and may occur on each semver-major release without prior\nwarning.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example embedding application

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following sections will provide an overview over how to use these APIs\nto create an application from scratch that will perform the equivalent of\nnode -e <code>, i.e. that will take a piece of JavaScript and run it in\na Node.js-specific environment.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The full code can be found in the Node.js source tree.

                                                                                                                                                                                                                                                      ", + "modules": [ { - "textRaw": "`INSPECT_MAX_BYTES` {integer} **Default:** `50`", - "type": "integer", - "name": "INSPECT_MAX_BYTES", - "meta": { - "added": [ - "v0.5.4" - ], - "changes": [] - }, - "default": "`50`", - "desc": "

                                                                                                                                                                                                                                                      Returns the maximum number of bytes that will be returned when\nbuf.inspect() is called. This can be overridden by user modules. See\nutil.inspect() for more details on buf.inspect() behavior.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This is a property on the buffer module returned by\nrequire('buffer'), not on the Buffer global or a Buffer instance.

                                                                                                                                                                                                                                                      " + "textRaw": "Setting up per-process state", + "name": "setting_up_per-process_state", + "desc": "

                                                                                                                                                                                                                                                      Node.js requires some per-process state management in order to run:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Arguments parsing for Node.js CLI options,
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • V8 per-process requirements, such as a v8::Platform instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example shows how these can be set up. Some class names are from\nthe node and v8 C++ namespaces, respectively.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      int main(int argc, char** argv) {\n  argv = uv_setup_args(argc, argv);\n  std::vector<std::string> args(argv, argv + argc);\n  std::vector<std::string> exec_args;\n  std::vector<std::string> errors;\n  // Parse Node.js CLI options, and print any errors that have occurred while\n  // trying to parse them.\n  int exit_code = node::InitializeNodeWithArgs(&args, &exec_args, &errors);\n  for (const std::string& error : errors)\n    fprintf(stderr, \"%s: %s\\n\", args[0].c_str(), error.c_str());\n  if (exit_code != 0) {\n    return exit_code;\n  }\n\n  // Create a v8::Platform instance. `MultiIsolatePlatform::Create()` is a way\n  // to create a v8::Platform instance that Node.js can use when creating\n  // Worker threads. When no `MultiIsolatePlatform` instance is present,\n  // Worker threads are disabled.\n  std::unique_ptr<MultiIsolatePlatform> platform =\n      MultiIsolatePlatform::Create(4);\n  V8::InitializePlatform(platform.get());\n  V8::Initialize();\n\n  // See below for the contents of this function.\n  int ret = RunNodeInstance(platform.get(), args, exec_args);\n\n  V8::Dispose();\n  V8::ShutdownPlatform();\n  return ret;\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Setting up per-process state" }, { - "textRaw": "`kMaxLength` {integer} The largest size allowed for a single `Buffer` instance.", - "type": "integer", - "name": "kMaxLength", - "meta": { - "added": [ - "v3.0.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      An alias for buffer.constants.MAX_LENGTH.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This is a property on the buffer module returned by\nrequire('buffer'), not on the Buffer global or a Buffer instance.

                                                                                                                                                                                                                                                      ", - "shortDesc": "The largest size allowed for a single `Buffer` instance." - } - ], - "methods": [ - { - "textRaw": "`buffer.transcode(source, fromEnc, toEnc)`", - "type": "method", - "name": "transcode", - "meta": { - "added": [ - "v7.1.0" - ], - "changes": [ - { - "version": "v8.0.0", - "pr-url": "https://github.com/nodejs/node/pull/10236", - "description": "The `source` parameter can now be a `Uint8Array`." - } - ] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {Buffer}", - "name": "return", - "type": "Buffer" - }, - "params": [ - { - "textRaw": "`source` {Buffer|Uint8Array} A `Buffer` or `Uint8Array` instance.", - "name": "source", - "type": "Buffer|Uint8Array", - "desc": "A `Buffer` or `Uint8Array` instance." - }, - { - "textRaw": "`fromEnc` {string} The current encoding.", - "name": "fromEnc", - "type": "string", - "desc": "The current encoding." - }, - { - "textRaw": "`toEnc` {string} To target encoding.", - "name": "toEnc", - "type": "string", - "desc": "To target encoding." - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Re-encodes the given Buffer or Uint8Array instance from one character\nencoding to another. Returns a new Buffer instance.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Throws if the fromEnc or toEnc specify invalid character encodings or if\nconversion from fromEnc to toEnc is not permitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Encodings supported by buffer.transcode() are: 'ascii', 'utf8',\n'utf16le', 'ucs2', 'latin1', and 'binary'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transcoding process will use substitution characters if a given byte\nsequence cannot be adequately represented in the target encoding. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buffer = require('buffer');\n\nconst newBuf = buffer.transcode(Buffer.from('€'), 'utf8', 'ascii');\nconsole.log(newBuf.toString('ascii'));\n// Prints: '?'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because the Euro () sign is not representable in US-ASCII, it is replaced\nwith ? in the transcoded Buffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This is a property on the buffer module returned by\nrequire('buffer'), not on the Buffer global or a Buffer instance.

                                                                                                                                                                                                                                                      " + "textRaw": "Per-instance state", + "name": "per-instance_state", + "desc": "

                                                                                                                                                                                                                                                      Node.js has a concept of a “Node.js instance”, that is commonly being referred\nto as node::Environment. Each node::Environment is associated with:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Exactly one v8::Isolate, i.e. one JS Engine instance,
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Exactly one uv_loop_t, i.e. one event loop, and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • A number of v8::Contexts, but exactly one main v8::Context.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • One node::IsolateData instance that contains information that could be\nshared by multiple node::Environments that use the same v8::Isolate.\nCurrently, no testing if performed for this scenario.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to set up a v8::Isolate, an v8::ArrayBuffer::Allocator needs\nto be provided. One possible choice is the default Node.js allocator, which\ncan be created through node::ArrayBufferAllocator::Create(). Using the Node.js\nallocator allows minor performance optimizations when addons use the Node.js\nC++ Buffer API, and is required in order to track ArrayBuffer memory in\nprocess.memoryUsage().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Additionally, each v8::Isolate that is used for a Node.js instance needs to\nbe registered and unregistered with the MultiIsolatePlatform instance, if one\nis being used, in order for the platform to know which event loop to use\nfor tasks scheduled by the v8::Isolate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The node::NewIsolate() helper function creates a v8::Isolate,\nsets it up with some Node.js-specific hooks (e.g. the Node.js error handler),\nand registers it with the platform automatically.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      int RunNodeInstance(MultiIsolatePlatform* platform,\n                    const std::vector<std::string>& args,\n                    const std::vector<std::string>& exec_args) {\n  int exit_code = 0;\n  // Set up a libuv event loop.\n  uv_loop_t loop;\n  int ret = uv_loop_init(&loop);\n  if (ret != 0) {\n    fprintf(stderr, \"%s: Failed to initialize loop: %s\\n\",\n            args[0].c_str(),\n            uv_err_name(ret));\n    return 1;\n  }\n\n  std::shared_ptr<ArrayBufferAllocator> allocator =\n      ArrayBufferAllocator::Create();\n\n  Isolate* isolate = NewIsolate(allocator, &loop, platform);\n  if (isolate == nullptr) {\n    fprintf(stderr, \"%s: Failed to initialize V8 Isolate\\n\", args[0].c_str());\n    return 1;\n  }\n\n  {\n    Locker locker(isolate);\n    Isolate::Scope isolate_scope(isolate);\n\n    // Create a node::IsolateData instance that will later be released using\n    // node::FreeIsolateData().\n    std::unique_ptr<IsolateData, decltype(&node::FreeIsolateData)> isolate_data(\n        node::CreateIsolateData(isolate, &loop, platform, allocator.get()),\n        node::FreeIsolateData);\n\n    // Set up a new v8::Context.\n    HandleScope handle_scope(isolate);\n    Local<Context> context = node::NewContext(isolate);\n    if (context.IsEmpty()) {\n      fprintf(stderr, \"%s: Failed to initialize V8 Context\\n\", args[0].c_str());\n      return 1;\n    }\n\n    // The v8::Context needs to be entered when node::CreateEnvironment() and\n    // node::LoadEnvironment() are being called.\n    Context::Scope context_scope(context);\n\n    // Create a node::Environment instance that will later be released using\n    // node::FreeEnvironment().\n    std::unique_ptr<Environment, decltype(&node::FreeEnvironment)> env(\n        node::CreateEnvironment(isolate_data.get(), context, args, exec_args),\n        node::FreeEnvironment);\n\n    // Set up the Node.js instance for execution, and run code inside of it.\n    // There is also a variant that takes a callback and provides it with\n    // the `require` and `process` objects, so that it can manually compile\n    // and run scripts as needed.\n    // The `require` function inside this script does *not* access the file\n    // system, and can only load built-in Node.js modules.\n    // `module.createRequire()` is being used to create one that is able to\n    // load files from the disk, and uses the standard CommonJS file loader\n    // instead of the internal-only `require` function.\n    MaybeLocal<Value> loadenv_ret = node::LoadEnvironment(\n        env.get(),\n        \"const publicRequire =\"\n        \"  require('module').createRequire(process.cwd() + '/');\"\n        \"globalThis.require = publicRequire;\"\n        \"require('vm').runInThisContext(process.argv[1]);\");\n\n    if (loadenv_ret.IsEmpty())  // There has been a JS exception.\n      return 1;\n\n    {\n      // SealHandleScope protects against handle leaks from callbacks.\n      SealHandleScope seal(isolate);\n      bool more;\n      do {\n        uv_run(&loop, UV_RUN_DEFAULT);\n\n        // V8 tasks on background threads may end up scheduling new tasks in the\n        // foreground, which in turn can keep the event loop going. For example,\n        // WebAssembly.compile() may do so.\n        platform->DrainTasks(isolate);\n\n        // If there are new tasks, continue.\n        more = uv_loop_alive(&loop);\n        if (more) continue;\n\n        // node::EmitBeforeExit() is used to emit the 'beforeExit' event on\n        // the `process` object.\n        node::EmitBeforeExit(env.get());\n\n        // 'beforeExit' can also schedule new work that keeps the event loop\n        // running.\n        more = uv_loop_alive(&loop);\n      } while (more == true);\n    }\n\n    // node::EmitExit() returns the current exit code.\n    exit_code = node::EmitExit(env.get());\n\n    // node::Stop() can be used to explicitly stop the event loop and keep\n    // further JavaScript from running. It can be called from any thread,\n    // and will act like worker.terminate() if called from another thread.\n    node::Stop(env.get());\n  }\n\n  // Unregister the Isolate with the platform and add a listener that is called\n  // when the Platform is done cleaning up any state it had associated with\n  // the Isolate.\n  bool platform_finished = false;\n  platform->AddIsolateFinishedCallback(isolate, [](void* data) {\n    *static_cast<bool*>(data) = true;\n  }, &platform_finished);\n  platform->UnregisterIsolate(isolate);\n  isolate->Dispose();\n\n  // Wait until the platform has cleaned up all relevant resources.\n  while (!platform_finished)\n    uv_run(&loop, UV_RUN_ONCE);\n  int err = uv_loop_close(&loop);\n  assert(err == 0);\n\n  return exit_code;\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Per-instance state" } ], "type": "module", - "displayName": "Buffer" + "displayName": "C++ Embedder API" }, { - "textRaw": "Child Process", + "textRaw": "Child process", "name": "child_process", "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The child_process module provides the ability to spawn child processes in\na manner that is similar, but not identical, to popen(3). This capability\nis primarily provided by the child_process.spawn() function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { spawn } = require('child_process');\nconst ls = spawn('ls', ['-lh', '/usr']);\n\nls.stdout.on('data', (data) => {\n  console.log(`stdout: ${data}`);\n});\n\nls.stderr.on('data', (data) => {\n  console.error(`stderr: ${data}`);\n});\n\nls.on('close', (code) => {\n  console.log(`child process exited with code ${code}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By default, pipes for stdin, stdout, and stderr are established between\nthe parent Node.js process and the spawned child. These pipes have\nlimited (and platform-specific) capacity. If the child process writes to\nstdout in excess of that limit without the output being captured, the child\nprocess will block waiting for the pipe buffer to accept more data. This is\nidentical to the behavior of pipes in the shell. Use the { stdio: 'ignore' }\noption if the output will not be consumed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The command lookup will be performed using options.env.PATH environment\nvariable if passed in options object, otherwise process.env.PATH will be\nused. To account for the fact that Windows environment variables are\ncase-insensitive Node.js will lexicographically sort all env keys and choose\nthe first one case-insensitively matching PATH to perform command lookup.\nThis may lead to issues on Windows when passing objects to env option that\nhave multiple variants of PATH variable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The child_process.spawn() method spawns the child process asynchronously,\nwithout blocking the Node.js event loop. The child_process.spawnSync()\nfunction provides equivalent functionality in a synchronous manner that blocks\nthe event loop until the spawned process either exits or is terminated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For convenience, the child_process module provides a handful of synchronous\nand asynchronous alternatives to child_process.spawn() and\nchild_process.spawnSync(). Each of these alternatives are implemented on\ntop of child_process.spawn() or child_process.spawnSync().

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      For certain use cases, such as automating shell scripts, the\nsynchronous counterparts may be more convenient. In many cases, however,\nthe synchronous methods can have significant impact on performance due to\nstalling the event loop while spawned processes complete.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/child_process.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The child_process module provides the ability to spawn child processes in\na manner that is similar, but not identical, to popen(3). This capability\nis primarily provided by the child_process.spawn() function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { spawn } = require('child_process');\nconst ls = spawn('ls', ['-lh', '/usr']);\n\nls.stdout.on('data', (data) => {\n  console.log(`stdout: ${data}`);\n});\n\nls.stderr.on('data', (data) => {\n  console.error(`stderr: ${data}`);\n});\n\nls.on('close', (code) => {\n  console.log(`child process exited with code ${code}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By default, pipes for stdin, stdout, and stderr are established between\nthe parent Node.js process and the spawned child. These pipes have\nlimited (and platform-specific) capacity. If the child process writes to\nstdout in excess of that limit without the output being captured, the child\nprocess will block waiting for the pipe buffer to accept more data. This is\nidentical to the behavior of pipes in the shell. Use the { stdio: 'ignore' }\noption if the output will not be consumed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The command lookup will be performed using options.env.PATH environment\nvariable if passed in options object, otherwise process.env.PATH will be\nused. To account for the fact that Windows environment variables are\ncase-insensitive Node.js will lexicographically sort all env keys and choose\nthe first one case-insensitively matching PATH to perform command lookup.\nThis may lead to issues on Windows when passing objects to env option that\nhave multiple variants of PATH variable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The child_process.spawn() method spawns the child process asynchronously,\nwithout blocking the Node.js event loop. The child_process.spawnSync()\nfunction provides equivalent functionality in a synchronous manner that blocks\nthe event loop until the spawned process either exits or is terminated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For convenience, the child_process module provides a handful of synchronous\nand asynchronous alternatives to child_process.spawn() and\nchild_process.spawnSync(). Each of these alternatives are implemented on\ntop of child_process.spawn() or child_process.spawnSync().

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      For certain use cases, such as automating shell scripts, the\nsynchronous counterparts may be more convenient. In many cases, however,\nthe synchronous methods can have significant impact on performance due to\nstalling the event loop while spawned processes complete.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Asynchronous Process Creation", + "textRaw": "Asynchronous process creation", "name": "asynchronous_process_creation", "desc": "

                                                                                                                                                                                                                                                      The child_process.spawn(), child_process.fork(), child_process.exec(),\nand child_process.execFile() methods all follow the idiomatic asynchronous\nprogramming pattern typical of other Node.js APIs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Each of the methods returns a ChildProcess instance. These objects\nimplement the Node.js EventEmitter API, allowing the parent process to\nregister listener functions that are called when certain events occur during\nthe life cycle of the child process.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The child_process.exec() and child_process.execFile() methods\nadditionally allow for an optional callback function to be specified that is\ninvoked when the child process terminates.

                                                                                                                                                                                                                                                      ", "modules": [ @@ -16104,11 +16958,11 @@ "default": "`'utf8'`" }, { - "textRaw": "`shell` {string} Shell to execute the command with. See [Shell Requirements][] and [Default Windows Shell][]. **Default:** `'/bin/sh'` on Unix, `process.env.ComSpec` on Windows.", + "textRaw": "`shell` {string} Shell to execute the command with. See [Shell requirements][] and [Default Windows shell][]. **Default:** `'/bin/sh'` on Unix, `process.env.ComSpec` on Windows.", "name": "shell", "type": "string", "default": "`'/bin/sh'` on Unix, `process.env.ComSpec` on Windows", - "desc": "Shell to execute the command with. See [Shell Requirements][] and [Default Windows Shell][]." + "desc": "Shell to execute the command with. See [Shell requirements][] and [Default Windows shell][]." }, { "textRaw": "`timeout` {number} **Default:** `0`", @@ -16176,7 +17030,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Spawns a shell then executes the command within that shell, buffering any\ngenerated output. The command string passed to the exec function is processed\ndirectly by the shell and special characters (vary based on\nshell)\nneed to be dealt with accordingly:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      exec('\"/path/to/test file/test.sh\" arg1 arg2');\n// Double quotes are used so that the space in the path is not interpreted as\n// a delimiter of multiple arguments.\n\nexec('echo \"The \\\\$HOME variable is $HOME\"');\n// The $HOME variable is escaped in the first instance, but not in the second.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Never pass unsanitized user input to this function. Any input containing shell\nmetacharacters may be used to trigger arbitrary command execution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If a callback function is provided, it is called with the arguments\n(error, stdout, stderr). On success, error will be null. On error,\nerror will be an instance of Error. The error.code property will be\nthe exit code of the child process while error.signal will be set to the\nsignal that terminated the process. Any exit code other than 0 is considered\nto be an error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stdout and stderr arguments passed to the callback will contain the\nstdout and stderr output of the child process. By default, Node.js will decode\nthe output as UTF-8 and pass strings to the callback. The encoding option\ncan be used to specify the character encoding used to decode the stdout and\nstderr output. If encoding is 'buffer', or an unrecognized character\nencoding, Buffer objects will be passed to the callback instead.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { exec } = require('child_process');\nexec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {\n  if (error) {\n    console.error(`exec error: ${error}`);\n    return;\n  }\n  console.log(`stdout: ${stdout}`);\n  console.error(`stderr: ${stderr}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If timeout is greater than 0, the parent will send the signal\nidentified by the killSignal property (the default is 'SIGTERM') if the\nchild runs longer than timeout milliseconds.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike the exec(3) POSIX system call, child_process.exec() does not replace\nthe existing process and uses a shell to execute the command.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this method is invoked as its util.promisify()ed version, it returns\na Promise for an Object with stdout and stderr properties. The returned\nChildProcess instance is attached to the Promise as a child property. In\ncase of an error (including any error resulting in an exit code other than 0), a\nrejected promise is returned, with the same error object given in the\ncallback, but with two additional properties stdout and stderr.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\nconst exec = util.promisify(require('child_process').exec);\n\nasync function lsExample() {\n  const { stdout, stderr } = await exec('ls');\n  console.log('stdout:', stdout);\n  console.error('stderr:', stderr);\n}\nlsExample();\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Spawns a shell then executes the command within that shell, buffering any\ngenerated output. The command string passed to the exec function is processed\ndirectly by the shell and special characters (vary based on\nshell)\nneed to be dealt with accordingly:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      exec('\"/path/to/test file/test.sh\" arg1 arg2');\n// Double quotes are used so that the space in the path is not interpreted as\n// a delimiter of multiple arguments.\n\nexec('echo \"The \\\\$HOME variable is $HOME\"');\n// The $HOME variable is escaped in the first instance, but not in the second.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Never pass unsanitized user input to this function. Any input containing shell\nmetacharacters may be used to trigger arbitrary command execution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If a callback function is provided, it is called with the arguments\n(error, stdout, stderr). On success, error will be null. On error,\nerror will be an instance of Error. The error.code property will be\nthe exit code of the process. By convention, any exit code other than 0\nindicates an error. error.signal will be the signal that terminated the\nprocess.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stdout and stderr arguments passed to the callback will contain the\nstdout and stderr output of the child process. By default, Node.js will decode\nthe output as UTF-8 and pass strings to the callback. The encoding option\ncan be used to specify the character encoding used to decode the stdout and\nstderr output. If encoding is 'buffer', or an unrecognized character\nencoding, Buffer objects will be passed to the callback instead.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { exec } = require('child_process');\nexec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {\n  if (error) {\n    console.error(`exec error: ${error}`);\n    return;\n  }\n  console.log(`stdout: ${stdout}`);\n  console.error(`stderr: ${stderr}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If timeout is greater than 0, the parent will send the signal\nidentified by the killSignal property (the default is 'SIGTERM') if the\nchild runs longer than timeout milliseconds.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike the exec(3) POSIX system call, child_process.exec() does not replace\nthe existing process and uses a shell to execute the command.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this method is invoked as its util.promisify()ed version, it returns\na Promise for an Object with stdout and stderr properties. The returned\nChildProcess instance is attached to the Promise as a child property. In\ncase of an error (including any error resulting in an exit code other than 0), a\nrejected promise is returned, with the same error object given in the\ncallback, but with two additional properties stdout and stderr.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\nconst exec = util.promisify(require('child_process').exec);\n\nasync function lsExample() {\n  const { stdout, stderr } = await exec('ls');\n  console.log('stdout:', stdout);\n  console.error('stderr:', stderr);\n}\nlsExample();\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`child_process.execFile(file[, args][, options][, callback])`", @@ -16284,11 +17138,11 @@ "desc": "No quoting or escaping of arguments is done on Windows. Ignored on Unix." }, { - "textRaw": "`shell` {boolean|string} If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell Requirements][] and [Default Windows Shell][]. **Default:** `false` (no shell).", + "textRaw": "`shell` {boolean|string} If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell requirements][] and [Default Windows shell][]. **Default:** `false` (no shell).", "name": "shell", "type": "boolean|string", "default": "`false` (no shell)", - "desc": "If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell Requirements][] and [Default Windows Shell][]." + "desc": "If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell requirements][] and [Default Windows shell][]." } ] }, @@ -16404,11 +17258,11 @@ "desc": "List of string arguments passed to the executable." }, { - "textRaw": "`serialization` {string} Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced Serialization][] for more details. **Default:** `'json'`.", + "textRaw": "`serialization` {string} Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced serialization][] for more details. **Default:** `'json'`.", "name": "serialization", "type": "string", "default": "`'json'`", - "desc": "Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced Serialization][] for more details." + "desc": "Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced serialization][] for more details." }, { "textRaw": "`silent` {boolean} If `true`, stdin, stdout, and stderr of the child will be piped to the parent, otherwise they will be inherited from the parent, see the `'pipe'` and `'inherit'` options for [`child_process.spawn()`][]'s [`stdio`][] for more details. **Default:** `false`.", @@ -16549,18 +17403,18 @@ "desc": "Sets the group identity of the process (see setgid(2))." }, { - "textRaw": "`serialization` {string} Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced Serialization][] for more details. **Default:** `'json'`.", + "textRaw": "`serialization` {string} Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced serialization][] for more details. **Default:** `'json'`.", "name": "serialization", "type": "string", "default": "`'json'`", - "desc": "Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced Serialization][] for more details." + "desc": "Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced serialization][] for more details." }, { - "textRaw": "`shell` {boolean|string} If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell Requirements][] and [Default Windows Shell][]. **Default:** `false` (no shell).", + "textRaw": "`shell` {boolean|string} If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell requirements][] and [Default Windows shell][]. **Default:** `false` (no shell).", "name": "shell", "type": "boolean|string", "default": "`false` (no shell)", - "desc": "If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell Requirements][] and [Default Windows Shell][]." + "desc": "If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell requirements][] and [Default Windows shell][]." }, { "textRaw": "`windowsVerbatimArguments` {boolean} No quoting or escaping of arguments is done on Windows. Ignored on Unix. This is set to `true` automatically when `shell` is specified and is CMD. **Default:** `false`.", @@ -16615,10 +17469,10 @@ } ], "type": "module", - "displayName": "Asynchronous Process Creation" + "displayName": "Asynchronous process creation" }, { - "textRaw": "Synchronous Process Creation", + "textRaw": "Synchronous process creation", "name": "synchronous_process_creation", "desc": "

                                                                                                                                                                                                                                                      The child_process.spawnSync(), child_process.execSync(), and\nchild_process.execFileSync() methods are synchronous and will block the\nNode.js event loop, pausing execution of any additional code until the spawned\nprocess exits.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Blocking calls like these are mostly useful for simplifying general-purpose\nscripting tasks and for simplifying the loading/processing of application\nconfiguration at startup.

                                                                                                                                                                                                                                                      ", "methods": [ @@ -16753,11 +17607,11 @@ "desc": "Hide the subprocess console window that would normally be created on Windows systems." }, { - "textRaw": "`shell` {boolean|string} If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell Requirements][] and [Default Windows Shell][]. **Default:** `false` (no shell).", + "textRaw": "`shell` {boolean|string} If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell requirements][] and [Default Windows shell][]. **Default:** `false` (no shell).", "name": "shell", "type": "boolean|string", "default": "`false` (no shell)", - "desc": "If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell Requirements][] and [Default Windows Shell][]." + "desc": "If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell requirements][] and [Default Windows shell][]." } ] } @@ -16839,11 +17693,11 @@ "desc": "Environment key-value pairs." }, { - "textRaw": "`shell` {string} Shell to execute the command with. See [Shell Requirements][] and [Default Windows Shell][]. **Default:** `'/bin/sh'` on Unix, `process.env.ComSpec` on Windows.", + "textRaw": "`shell` {string} Shell to execute the command with. See [Shell requirements][] and [Default Windows shell][]. **Default:** `'/bin/sh'` on Unix, `process.env.ComSpec` on Windows.", "name": "shell", "type": "string", "default": "`'/bin/sh'` on Unix, `process.env.ComSpec` on Windows", - "desc": "Shell to execute the command with. See [Shell Requirements][] and [Default Windows Shell][]." + "desc": "Shell to execute the command with. See [Shell requirements][] and [Default Windows shell][]." }, { "textRaw": "`uid` {number} Sets the user identity of the process. (See setuid(2)).", @@ -17076,11 +17930,11 @@ "desc": "The encoding used for all stdio inputs and outputs." }, { - "textRaw": "`shell` {boolean|string} If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell Requirements][] and [Default Windows Shell][]. **Default:** `false` (no shell).", + "textRaw": "`shell` {boolean|string} If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell requirements][] and [Default Windows shell][]. **Default:** `false` (no shell).", "name": "shell", "type": "boolean|string", "default": "`false` (no shell)", - "desc": "If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell Requirements][] and [Default Windows Shell][]." + "desc": "If `true`, runs `command` inside of a shell. Uses `'/bin/sh'` on Unix, and `process.env.ComSpec` on Windows. A different shell can be specified as a string. See [Shell requirements][] and [Default Windows shell][]." }, { "textRaw": "`windowsVerbatimArguments` {boolean} No quoting or escaping of arguments is done on Windows. Ignored on Unix. This is set to `true` automatically when `shell` is specified and is CMD. **Default:** `false`.", @@ -17105,7 +17959,7 @@ } ], "type": "module", - "displayName": "Synchronous Process Creation" + "displayName": "Synchronous process creation" }, { "textRaw": "`maxBuffer` and Unicode", @@ -17115,21 +17969,21 @@ "displayName": "`maxBuffer` and Unicode" }, { - "textRaw": "Shell Requirements", + "textRaw": "Shell requirements", "name": "shell_requirements", "desc": "

                                                                                                                                                                                                                                                      The shell should understand the -c switch. If the shell is 'cmd.exe', it\nshould understand the /d /s /c switches and command line parsing should be\ncompatible.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Shell Requirements" + "displayName": "Shell requirements" }, { - "textRaw": "Default Windows Shell", + "textRaw": "Default Windows shell", "name": "default_windows_shell", "desc": "

                                                                                                                                                                                                                                                      Although Microsoft specifies %COMSPEC% must contain the path to\n'cmd.exe' in the root environment, child processes are not always subject to\nthe same requirement. Thus, in child_process functions where a shell can be\nspawned, 'cmd.exe' is used as a fallback if process.env.ComSpec is\nunavailable.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Default Windows Shell" + "displayName": "Default Windows shell" }, { - "textRaw": "Advanced Serialization", + "textRaw": "Advanced serialization", "name": "advanced_serialization", "meta": { "added": [ @@ -17139,7 +17993,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Child processes support a serialization mechanism for IPC that is based on the\nserialization API of the v8 module, based on the\nHTML structured clone algorithm. This is generally more powerful and\nsupports more built-in JavaScript object types, such as BigInt, Map\nand Set, ArrayBuffer and TypedArray, Buffer, Error, RegExp etc.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      However, this format is not a full superset of JSON, and e.g. properties set on\nobjects of such built-in types will not be passed on through the serialization\nstep. Additionally, performance may not be equivalent to that of JSON, depending\non the structure of the passed data.\nTherefore, this feature requires opting in by setting the\nserialization option to 'advanced' when calling child_process.spawn()\nor child_process.fork().

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Advanced Serialization" + "displayName": "Advanced serialization" } ], "classes": [ @@ -17258,7 +18112,7 @@ "desc": "A [`net.Socket`][] or [`net.Server`][] object, or undefined." } ], - "desc": "

                                                                                                                                                                                                                                                      The 'message' event is triggered when a child process uses\nprocess.send() to send messages.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The message goes through serialization and parsing. The resulting\nmessage might not be the same as what is originally sent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the serialization option was set to 'advanced' used when spawning the\nchild process, the message argument can contain data that JSON is not able\nto represent.\nSee Advanced Serialization for more details.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'message' event is triggered when a child process uses\nprocess.send() to send messages.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The message goes through serialization and parsing. The resulting\nmessage might not be the same as what is originally sent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the serialization option was set to 'advanced' used when spawning the\nchild process, the message argument can contain data that JSON is not able\nto represent.\nSee Advanced serialization for more details.

                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -17516,7 +18370,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      When an IPC channel has been established between the parent and child (\ni.e. when using child_process.fork()), the subprocess.send() method can\nbe used to send messages to the child process. When the child process is a\nNode.js instance, these messages can be received via the 'message' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The message goes through serialization and parsing. The resulting\nmessage might not be the same as what is originally sent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, in the parent script:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cp = require('child_process');\nconst n = cp.fork(`${__dirname}/sub.js`);\n\nn.on('message', (m) => {\n  console.log('PARENT got message:', m);\n});\n\n// Causes the child to print: CHILD got message: { hello: 'world' }\nn.send({ hello: 'world' });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      And then the child script, 'sub.js' might look like this:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('message', (m) => {\n  console.log('CHILD got message:', m);\n});\n\n// Causes the parent to print: PARENT got message: { foo: 'bar', baz: null }\nprocess.send({ foo: 'bar', baz: NaN });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Child Node.js processes will have a process.send() method of their own\nthat allows the child to send messages back to the parent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There is a special case when sending a {cmd: 'NODE_foo'} message. Messages\ncontaining a NODE_ prefix in the cmd property are reserved for use within\nNode.js core and will not be emitted in the child's 'message'\nevent. Rather, such messages are emitted using the\n'internalMessage' event and are consumed internally by Node.js.\nApplications should avoid using such messages or listening for\n'internalMessage' events as it is subject to change without notice.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional sendHandle argument that may be passed to subprocess.send() is\nfor passing a TCP server or socket object to the child process. The child will\nreceive the object as the second argument passed to the callback function\nregistered on the 'message' event. Any data that is received\nand buffered in the socket will not be sent to the child.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional callback is a function that is invoked after the message is\nsent but before the child may have received it. The function is called with a\nsingle argument: null on success, or an Error object on failure.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If no callback function is provided and the message cannot be sent, an\n'error' event will be emitted by the ChildProcess object. This can\nhappen, for instance, when the child process has already exited.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      subprocess.send() will return false if the channel has closed or when the\nbacklog of unsent messages exceeds a threshold that makes it unwise to send\nmore. Otherwise, the method returns true. The callback function can be\nused to implement flow control.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: sending a server object

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The sendHandle argument can be used, for instance, to pass the handle of\na TCP server object to the child process as illustrated in the example below:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const subprocess = require('child_process').fork('subprocess.js');\n\n// Open up the server object and send the handle.\nconst server = require('net').createServer();\nserver.on('connection', (socket) => {\n  socket.end('handled by parent');\n});\nserver.listen(1337, () => {\n  subprocess.send('server', server);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The child would then receive the server object as:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('message', (m, server) => {\n  if (m === 'server') {\n    server.on('connection', (socket) => {\n      socket.end('handled by child');\n    });\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the server is now shared between the parent and child, some connections\ncan be handled by the parent and some by the child.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While the example above uses a server created using the net module, dgram\nmodule servers use exactly the same workflow with the exceptions of listening on\na 'message' event instead of 'connection' and using server.bind() instead\nof server.listen(). This is, however, currently only supported on Unix\nplatforms.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: sending a socket object

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Similarly, the sendHandler argument can be used to pass the handle of a\nsocket to the child process. The example below spawns two children that each\nhandle connections with \"normal\" or \"special\" priority:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { fork } = require('child_process');\nconst normal = fork('subprocess.js', ['normal']);\nconst special = fork('subprocess.js', ['special']);\n\n// Open up the server and send sockets to child. Use pauseOnConnect to prevent\n// the sockets from being read before they are sent to the child process.\nconst server = require('net').createServer({ pauseOnConnect: true });\nserver.on('connection', (socket) => {\n\n  // If this is special priority...\n  if (socket.remoteAddress === '74.125.127.100') {\n    special.send('socket', socket);\n    return;\n  }\n  // This is normal priority.\n  normal.send('socket', socket);\n});\nserver.listen(1337);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The subprocess.js would receive the socket handle as the second argument\npassed to the event callback function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('message', (m, socket) => {\n  if (m === 'socket') {\n    if (socket) {\n      // Check that the client socket exists.\n      // It is possible for the socket to be closed between the time it is\n      // sent and the time it is received in the child process.\n      socket.end(`Request handled with ${process.argv[2]} priority`);\n    }\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once a socket has been passed to a child, the parent is no longer capable of\ntracking when the socket is destroyed. To indicate this, the .connections\nproperty becomes null. It is recommended not to use .maxConnections when\nthis occurs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is also recommended that any 'message' handlers in the child process\nverify that socket exists, as the connection may have been closed during the\ntime it takes to send the connection to the child.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      When an IPC channel has been established between the parent and child (\ni.e. when using child_process.fork()), the subprocess.send() method can\nbe used to send messages to the child process. When the child process is a\nNode.js instance, these messages can be received via the 'message' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The message goes through serialization and parsing. The resulting\nmessage might not be the same as what is originally sent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, in the parent script:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cp = require('child_process');\nconst n = cp.fork(`${__dirname}/sub.js`);\n\nn.on('message', (m) => {\n  console.log('PARENT got message:', m);\n});\n\n// Causes the child to print: CHILD got message: { hello: 'world' }\nn.send({ hello: 'world' });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      And then the child script, 'sub.js' might look like this:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('message', (m) => {\n  console.log('CHILD got message:', m);\n});\n\n// Causes the parent to print: PARENT got message: { foo: 'bar', baz: null }\nprocess.send({ foo: 'bar', baz: NaN });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Child Node.js processes will have a process.send() method of their own\nthat allows the child to send messages back to the parent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There is a special case when sending a {cmd: 'NODE_foo'} message. Messages\ncontaining a NODE_ prefix in the cmd property are reserved for use within\nNode.js core and will not be emitted in the child's 'message'\nevent. Rather, such messages are emitted using the\n'internalMessage' event and are consumed internally by Node.js.\nApplications should avoid using such messages or listening for\n'internalMessage' events as it is subject to change without notice.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional sendHandle argument that may be passed to subprocess.send() is\nfor passing a TCP server or socket object to the child process. The child will\nreceive the object as the second argument passed to the callback function\nregistered on the 'message' event. Any data that is received\nand buffered in the socket will not be sent to the child.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional callback is a function that is invoked after the message is\nsent but before the child may have received it. The function is called with a\nsingle argument: null on success, or an Error object on failure.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If no callback function is provided and the message cannot be sent, an\n'error' event will be emitted by the ChildProcess object. This can\nhappen, for instance, when the child process has already exited.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      subprocess.send() will return false if the channel has closed or when the\nbacklog of unsent messages exceeds a threshold that makes it unwise to send\nmore. Otherwise, the method returns true. The callback function can be\nused to implement flow control.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: sending a server object

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The sendHandle argument can be used, for instance, to pass the handle of\na TCP server object to the child process as illustrated in the example below:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const subprocess = require('child_process').fork('subprocess.js');\n\n// Open up the server object and send the handle.\nconst server = require('net').createServer();\nserver.on('connection', (socket) => {\n  socket.end('handled by parent');\n});\nserver.listen(1337, () => {\n  subprocess.send('server', server);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The child would then receive the server object as:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('message', (m, server) => {\n  if (m === 'server') {\n    server.on('connection', (socket) => {\n      socket.end('handled by child');\n    });\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the server is now shared between the parent and child, some connections\ncan be handled by the parent and some by the child.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While the example above uses a server created using the net module, dgram\nmodule servers use exactly the same workflow with the exceptions of listening on\na 'message' event instead of 'connection' and using server.bind() instead\nof server.listen(). This is, however, currently only supported on Unix\nplatforms.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: sending a socket object

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Similarly, the sendHandler argument can be used to pass the handle of a\nsocket to the child process. The example below spawns two children that each\nhandle connections with \"normal\" or \"special\" priority:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { fork } = require('child_process');\nconst normal = fork('subprocess.js', ['normal']);\nconst special = fork('subprocess.js', ['special']);\n\n// Open up the server and send sockets to child. Use pauseOnConnect to prevent\n// the sockets from being read before they are sent to the child process.\nconst server = require('net').createServer({ pauseOnConnect: true });\nserver.on('connection', (socket) => {\n\n  // If this is special priority...\n  if (socket.remoteAddress === '74.125.127.100') {\n    special.send('socket', socket);\n    return;\n  }\n  // This is normal priority.\n  normal.send('socket', socket);\n});\nserver.listen(1337);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The subprocess.js would receive the socket handle as the second argument\npassed to the event callback function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('message', (m, socket) => {\n  if (m === 'socket') {\n    if (socket) {\n      // Check that the client socket exists.\n      // It is possible for the socket to be closed between the time it is\n      // sent and the time it is received in the child process.\n      socket.end(`Request handled with ${process.argv[2]} priority`);\n    }\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Do not use .maxConnections on a socket that has been passed to a subprocess.\nThe parent cannot track when the socket is destroyed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any 'message' handlers in the subprocess should verify that socket exists,\nas the connection may have been closed during the time it takes to send the\nconnection to the child.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`subprocess.unref()`", @@ -17539,7 +18393,7 @@ } ], "type": "module", - "displayName": "Child Process" + "displayName": "Child process" }, { "textRaw": "Cluster", @@ -17547,11 +18401,11 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      A single instance of Node.js runs in a single thread. To take advantage of\nmulti-core systems, the user will sometimes want to launch a cluster of Node.js\nprocesses to handle the load.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The cluster module allows easy creation of child processes that all share\nserver ports.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cluster = require('cluster');\nconst http = require('http');\nconst numCPUs = require('os').cpus().length;\n\nif (cluster.isMaster) {\n  console.log(`Master ${process.pid} is running`);\n\n  // Fork workers.\n  for (let i = 0; i < numCPUs; i++) {\n    cluster.fork();\n  }\n\n  cluster.on('exit', (worker, code, signal) => {\n    console.log(`worker ${worker.process.pid} died`);\n  });\n} else {\n  // Workers can share any TCP connection\n  // In this case it is an HTTP server\n  http.createServer((req, res) => {\n    res.writeHead(200);\n    res.end('hello world\\n');\n  }).listen(8000);\n\n  console.log(`Worker ${process.pid} started`);\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Running Node.js will now share port 8000 between the workers:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node server.js\nMaster 3596 is running\nWorker 4324 started\nWorker 4520 started\nWorker 6056 started\nWorker 5644 started\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, it is not yet possible to set up a named pipe server in a worker.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/cluster.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A single instance of Node.js runs in a single thread. To take advantage of\nmulti-core systems, the user will sometimes want to launch a cluster of Node.js\nprocesses to handle the load.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The cluster module allows easy creation of child processes that all share\nserver ports.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cluster = require('cluster');\nconst http = require('http');\nconst numCPUs = require('os').cpus().length;\n\nif (cluster.isMaster) {\n  console.log(`Master ${process.pid} is running`);\n\n  // Fork workers.\n  for (let i = 0; i < numCPUs; i++) {\n    cluster.fork();\n  }\n\n  cluster.on('exit', (worker, code, signal) => {\n    console.log(`worker ${worker.process.pid} died`);\n  });\n} else {\n  // Workers can share any TCP connection\n  // In this case it is an HTTP server\n  http.createServer((req, res) => {\n    res.writeHead(200);\n    res.end('hello world\\n');\n  }).listen(8000);\n\n  console.log(`Worker ${process.pid} started`);\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Running Node.js will now share port 8000 between the workers:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node server.js\nMaster 3596 is running\nWorker 4324 started\nWorker 4520 started\nWorker 6056 started\nWorker 5644 started\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, it is not yet possible to set up a named pipe server in a worker.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "How It Works", - "name": "How It Works", + "textRaw": "How it works", + "name": "How it works", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      The worker processes are spawned using the child_process.fork() method,\nso that they can communicate with the parent via IPC and pass server\nhandles back and forth.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The cluster module supports two methods of distributing incoming\nconnections.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first one (and the default one on all platforms except Windows),\nis the round-robin approach, where the master process listens on a\nport, accepts new connections and distributes them across the workers\nin a round-robin fashion, with some built-in smarts to avoid\noverloading a worker process.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The second approach is where the master process creates the listen\nsocket and sends it to interested workers. The workers then accept\nincoming connections directly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The second approach should, in theory, give the best performance.\nIn practice however, distribution tends to be very unbalanced due\nto operating system scheduler vagaries. Loads have been observed\nwhere over 70% of all connections ended up in just two processes,\nout of a total of eight.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because server.listen() hands off most of the work to the master\nprocess, there are three cases where the behavior between a normal\nNode.js process and a cluster worker differs:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. server.listen({fd: 7}) Because the message is passed to the master,\nfile descriptor 7 in the parent will be listened on, and the\nhandle passed to the worker, rather than listening to the worker's\nidea of what the number 7 file descriptor references.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. server.listen(handle) Listening on handles explicitly will cause\nthe worker to use the supplied handle, rather than talk to the master\nprocess.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. server.listen(0) Normally, this will cause servers to listen on a\nrandom port. However, in a cluster, each worker will receive the\nsame \"random\" port each time they do listen(0). In essence, the\nport is random the first time, but predictable thereafter. To listen\non a unique port, generate a port number based on the cluster worker ID.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js does not provide routing logic. It is, therefore important to design an\napplication such that it does not rely too heavily on in-memory data objects for\nthings like sessions and login.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because workers are all separate processes, they can be killed or\nre-spawned depending on a program's needs, without affecting other\nworkers. As long as there are some workers still alive, the server will\ncontinue to accept connections. If no workers are alive, existing connections\nwill be dropped and new connections will be refused. Node.js does not\nautomatically manage the number of workers, however. It is the application's\nresponsibility to manage the worker pool based on its own needs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Although a primary use case for the cluster module is networking, it can\nalso be used for other use cases requiring worker processes.

                                                                                                                                                                                                                                                      " } @@ -17743,7 +18597,7 @@ "desc": "

                                                                                                                                                                                                                                                      This function returns true if the worker's process has terminated (either\nbecause of exiting or being signaled). Otherwise, it returns false.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cluster = require('cluster');\nconst http = require('http');\nconst numCPUs = require('os').cpus().length;\n\nif (cluster.isMaster) {\n  console.log(`Master ${process.pid} is running`);\n\n  // Fork workers.\n  for (let i = 0; i < numCPUs; i++) {\n    cluster.fork();\n  }\n\n  cluster.on('fork', (worker) => {\n    console.log('worker is dead:', worker.isDead());\n  });\n\n  cluster.on('exit', (worker, code, signal) => {\n    console.log('worker is dead:', worker.isDead());\n  });\n} else {\n  // Workers can share any TCP connection. In this case, it is an HTTP server.\n  http.createServer((req, res) => {\n    res.writeHead(200);\n    res.end(`Current process\\n ${process.pid}`);\n    process.kill(process.pid);\n  }).listen(8000);\n}\n
                                                                                                                                                                                                                                                      " }, { - "textRaw": "`worker.kill([signal='SIGTERM'])`", + "textRaw": "`worker.kill([signal])`", "type": "method", "name": "kill", "meta": { @@ -17756,15 +18610,15 @@ { "params": [ { - "textRaw": "`signal` {string} Name of the kill signal to send to the worker process.", + "textRaw": "`signal` {string} Name of the kill signal to send to the worker process. **Default**: `'SIGTERM'`", "name": "signal", "type": "string", - "desc": "Name of the kill signal to send to the worker process." + "desc": "Name of the kill signal to send to the worker process. **Default**: `'SIGTERM'`" } ] } ], - "desc": "

                                                                                                                                                                                                                                                      This function will kill the worker. In the master, it does this by disconnecting\nthe worker.process, and once disconnected, killing with signal. In the\nworker, it does it by disconnecting the channel, and then exiting with code 0.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because kill() attempts to gracefully disconnect the worker process, it is\nsusceptible to waiting indefinitely for the disconnect to complete. For example,\nif the worker enters an infinite loop, a graceful disconnect will never occur.\nIf the graceful disconnect behavior is not needed, use worker.process.kill().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Causes .exitedAfterDisconnect to be set.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is aliased as worker.destroy() for backwards compatibility.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In a worker, process.kill() exists, but it is not this function;\nit is kill().

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      This function will kill the worker. In the master, it does this by disconnecting\nthe worker.process, and once disconnected, killing with signal. In the\nworker, it does it by disconnecting the channel, and then exiting with code 0.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because kill() attempts to gracefully disconnect the worker process, it is\nsusceptible to waiting indefinitely for the disconnect to complete. For example,\nif the worker enters an infinite loop, a graceful disconnect will never occur.\nIf the graceful disconnect behavior is not needed, use worker.process.kill().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Causes .exitedAfterDisconnect to be set.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is aliased as worker.destroy() for backward compatibility.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In a worker, process.kill() exists, but it is not this function;\nit is kill().

                                                                                                                                                                                                                                                      " }, { "textRaw": "`worker.send(message[, sendHandle[, options]][, callback])`", @@ -18221,11 +19075,11 @@ "desc": "Current working directory of the worker process." }, { - "textRaw": "`serialization` {string} Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced Serialization for `child_process`][] for more details. **Default:** `false`.", + "textRaw": "`serialization` {string} Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced serialization for `child_process`][] for more details. **Default:** `false`.", "name": "serialization", "type": "string", "default": "`false`", - "desc": "Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced Serialization for `child_process`][] for more details." + "desc": "Specify the kind of serialization used for sending messages between processes. Possible values are `'json'` and `'advanced'`. See [Advanced serialization for `child_process`][] for more details." }, { "textRaw": "`silent` {boolean} Whether or not to send output to parent's stdio. **Default:** `false`.", @@ -18302,7 +19156,7 @@ "introduced_in": "v0.10.13", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The console module provides a simple debugging console that is similar to the\nJavaScript console mechanism provided by web browsers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The module exports two specific components:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • A Console class with methods such as console.log(), console.error() and\nconsole.warn() that can be used to write to any Node.js stream.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • A global console instance configured to write to process.stdout and\nprocess.stderr. The global console can be used without calling\nrequire('console').
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: The global console object's methods are neither consistently\nsynchronous like the browser APIs they resemble, nor are they consistently\nasynchronous like all other Node.js streams. See the note on process I/O for\nmore information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using the global console:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log('hello world');\n// Prints: hello world, to stdout\nconsole.log('hello %s', 'world');\n// Prints: hello world, to stdout\nconsole.error(new Error('Whoops, something bad happened'));\n// Prints: [Error: Whoops, something bad happened], to stderr\n\nconst name = 'Will Robinson';\nconsole.warn(`Danger ${name}! Danger!`);\n// Prints: Danger Will Robinson! Danger!, to stderr\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using the Console class:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const out = getStreamSomehow();\nconst err = getStreamSomehow();\nconst myConsole = new console.Console(out, err);\n\nmyConsole.log('hello world');\n// Prints: hello world, to out\nmyConsole.log('hello %s', 'world');\n// Prints: hello world, to out\nmyConsole.error(new Error('Whoops, something bad happened'));\n// Prints: [Error: Whoops, something bad happened], to err\n\nconst name = 'Will Robinson';\nmyConsole.warn(`Danger ${name}! Danger!`);\n// Prints: Danger Will Robinson! Danger!, to err\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/console.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The console module provides a simple debugging console that is similar to the\nJavaScript console mechanism provided by web browsers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The module exports two specific components:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • A Console class with methods such as console.log(), console.error() and\nconsole.warn() that can be used to write to any Node.js stream.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • A global console instance configured to write to process.stdout and\nprocess.stderr. The global console can be used without calling\nrequire('console').
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: The global console object's methods are neither consistently\nsynchronous like the browser APIs they resemble, nor are they consistently\nasynchronous like all other Node.js streams. See the note on process I/O for\nmore information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using the global console:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log('hello world');\n// Prints: hello world, to stdout\nconsole.log('hello %s', 'world');\n// Prints: hello world, to stdout\nconsole.error(new Error('Whoops, something bad happened'));\n// Prints: [Error: Whoops, something bad happened], to stderr\n\nconst name = 'Will Robinson';\nconsole.warn(`Danger ${name}! Danger!`);\n// Prints: Danger Will Robinson! Danger!, to stderr\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using the Console class:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const out = getStreamSomehow();\nconst err = getStreamSomehow();\nconst myConsole = new console.Console(out, err);\n\nmyConsole.log('hello world');\n// Prints: hello world, to out\nmyConsole.log('hello %s', 'world');\n// Prints: hello world, to out\nmyConsole.error(new Error('Whoops, something bad happened'));\n// Prints: [Error: Whoops, something bad happened], to err\n\nconst name = 'Will Robinson';\nmyConsole.warn(`Danger ${name}! Danger!`);\n// Prints: Danger Will Robinson! Danger!, to err\n
                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `Console`", @@ -18353,7 +19207,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      A simple assertion test that verifies whether value is truthy. If it is not,\nAssertion failed is logged. If provided, the error message is formatted\nusing util.format() by passing along all message arguments. The output is\nused as the error message.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.assert(true, 'does nothing');\n// OK\nconsole.assert(false, 'Whoops %s work', 'didn\\'t');\n// Assertion failed: Whoops didn't work\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling console.assert() with a falsy assertion will only cause the message\nto be printed to the console without interrupting execution of subsequent code.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      console.assert() writes a message if value is falsy or omitted. It only\nwrites a message and does not otherwise affect execution. The output always\nstarts with \"Assertion failed\". If provided, message is formatted using\nutil.format().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If value is truthy, nothing happens.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.assert(true, 'does nothing');\n\nconsole.assert(false, 'Whoops %s work', 'didn\\'t');\n// Assertion failed: Whoops didn't work\n\nconsole.assert();\n// Assertion failed\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`console.clear()`", @@ -19037,7 +19891,7 @@ "introduced_in": "v0.3.6", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The crypto module provides cryptographic functionality that includes a set of\nwrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use require('crypto') to access this module.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const crypto = require('crypto');\n\nconst secret = 'abcdefg';\nconst hash = crypto.createHmac('sha256', secret)\n                   .update('I love cupcakes')\n                   .digest('hex');\nconsole.log(hash);\n// Prints:\n//   c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/crypto.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The crypto module provides cryptographic functionality that includes a set of\nwrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use require('crypto') to access this module.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const crypto = require('crypto');\n\nconst secret = 'abcdefg';\nconst hash = crypto.createHmac('sha256', secret)\n                   .update('I love cupcakes')\n                   .digest('hex');\nconsole.log(hash);\n// Prints:\n//   c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Determining if crypto support is unavailable", @@ -19051,7 +19905,7 @@ "name": "`crypto`_module_methods_and_properties", "properties": [ { - "textRaw": "`constants` Returns: {Object} An object containing commonly used constants for crypto and security related operations. The specific constants currently defined are described in [Crypto Constants][].", + "textRaw": "`constants` Returns: {Object} An object containing commonly used constants for crypto and security related operations. The specific constants currently defined are described in [Crypto constants][].", "type": "Object", "name": "return", "meta": { @@ -19060,7 +19914,7 @@ ], "changes": [] }, - "desc": "An object containing commonly used constants for crypto and security related operations. The specific constants currently defined are described in [Crypto Constants][]." + "desc": "An object containing commonly used constants for crypto and security related operations. The specific constants currently defined are described in [Crypto constants][]." }, { "textRaw": "`crypto.DEFAULT_ENCODING`", @@ -19076,7 +19930,7 @@ }, "stability": 0, "stabilityText": "Deprecated", - "desc": "

                                                                                                                                                                                                                                                      The default encoding to use for functions that can take either strings\nor buffers. The default value is 'buffer', which makes methods\ndefault to Buffer objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The crypto.DEFAULT_ENCODING mechanism is provided for backwards compatibility\nwith legacy programs that expect 'latin1' to be the default encoding.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      New applications should expect the default to be 'buffer'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This property is deprecated.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The default encoding to use for functions that can take either strings\nor buffers. The default value is 'buffer', which makes methods\ndefault to Buffer objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The crypto.DEFAULT_ENCODING mechanism is provided for backward compatibility\nwith legacy programs that expect 'latin1' to be the default encoding.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      New applications should expect the default to be 'buffer'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This property is deprecated.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`crypto.fips`", @@ -19752,7 +20606,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Creates and returns a Sign object that uses the given algorithm. Use\ncrypto.getHashes() to obtain the names of the available digest algorithms.\nOptional options argument controls the stream.Writable behavior.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In some cases, a Sign instance can be created using the name of a signature\nalgorithm, such as 'RSA-SHA256', instead of a digest algorithm. This will use\nthe corresponding digest algorithm. This does not work for all signature\nalgorithms, such as 'ecdsa-with-SHA256', so it is best to always use digest\nalgorithm names.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Creates and returns a Sign object that uses the given algorithm. Use\ncrypto.getHashes() to obtain the names of the available digest algorithms.\nOptional options argument controls the stream.Writable behavior.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In some cases, a Sign instance can be created using the name of a signature\nalgorithm, such as 'RSA-SHA256', instead of a digest algorithm. This will use\nthe corresponding digest algorithm. This does not work for all signature\nalgorithms, such as 'ecdsa-with-SHA256', so it is best to always use digest\nalgorithm names.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`crypto.createVerify(algorithm[, options])`", @@ -20763,6 +21617,42 @@ "desc": "

                                                                                                                                                                                                                                                      This function is similar to crypto.randomBytes() but requires the first\nargument to be a Buffer that will be filled. It also\nrequires that a callback is passed in.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the callback function is not provided, an error will be thrown.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const buf = Buffer.alloc(10);\ncrypto.randomFill(buf, (err, buf) => {\n  if (err) throw err;\n  console.log(buf.toString('hex'));\n});\n\ncrypto.randomFill(buf, 5, (err, buf) => {\n  if (err) throw err;\n  console.log(buf.toString('hex'));\n});\n\n// The above is equivalent to the following:\ncrypto.randomFill(buf, 5, 5, (err, buf) => {\n  if (err) throw err;\n  console.log(buf.toString('hex'));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any TypedArray or DataView instance may be passed as buffer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const a = new Uint32Array(10);\ncrypto.randomFill(a, (err, buf) => {\n  if (err) throw err;\n  console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)\n    .toString('hex'));\n});\n\nconst b = new Float64Array(10);\ncrypto.randomFill(b, (err, buf) => {\n  if (err) throw err;\n  console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)\n    .toString('hex'));\n});\n\nconst c = new DataView(new ArrayBuffer(10));\ncrypto.randomFill(c, (err, buf) => {\n  if (err) throw err;\n  console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)\n    .toString('hex'));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This API uses libuv's threadpool, which can have surprising and\nnegative performance implications for some applications; see the\nUV_THREADPOOL_SIZE documentation for more information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The asynchronous version of crypto.randomFill() is carried out in a single\nthreadpool request. To minimize threadpool task length variation, partition\nlarge randomFill requests when doing so as part of fulfilling a client\nrequest.

                                                                                                                                                                                                                                                      " }, { + "textRaw": "`crypto.randomInt([min, ]max[, callback])`", + "type": "method", + "name": "randomInt", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`min` {integer} Start of random range (inclusive). **Default**: `0`.", + "name": "min", + "type": "integer", + "desc": "Start of random range (inclusive). **Default**: `0`." + }, + { + "textRaw": "`max` {integer} End of random range (exclusive).", + "name": "max", + "type": "integer", + "desc": "End of random range (exclusive)." + }, + { + "textRaw": "`callback` {Function} `function(err, n) {}`.", + "name": "callback", + "type": "Function", + "desc": "`function(err, n) {}`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Return a random integer n such that min <= n < max. This\nimplementation avoids modulo bias.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The range (max - min) must be less than 248. min and max must\nbe safe integers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the callback function is not provided, the random integer is\ngenerated synchronously.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Asynchronous\ncrypto.randomInt(3, (err, n) => {\n  if (err) throw err;\n  console.log(`Random number chosen from (0, 1, 2): ${n}`);\n});\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Synchronous\nconst n = crypto.randomInt(3);\nconsole.log(`Random number chosen from (0, 1, 2): ${n}`);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // With `min` argument\nconst n = crypto.randomInt(1, 7);\nconsole.log(`The dice rolled: ${n}`);\n
                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`crypto.scrypt(password, salt, keylen[, options], callback)`", "type": "method", "name": "scrypt", @@ -21154,18 +22044,18 @@ "name": "notes", "modules": [ { - "textRaw": "Legacy Streams API (pre Node.js v0.10)", - "name": "legacy_streams_api_(pre_node.js_v0.10)", + "textRaw": "Legacy Streams API (prior to Node.js 0.10)", + "name": "legacy_streams_api_(prior_to_node.js_0.10)", "desc": "

                                                                                                                                                                                                                                                      The Crypto module was added to Node.js before there was the concept of a\nunified Stream API, and before there were Buffer objects for handling\nbinary data. As such, the many of the crypto defined classes have methods not\ntypically found on other Node.js classes that implement the streams\nAPI (e.g. update(), final(), or digest()). Also, many methods accepted\nand returned 'latin1' encoded strings by default rather than Buffers. This\ndefault was changed after Node.js v0.8 to use Buffer objects by default\ninstead.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Legacy Streams API (pre Node.js v0.10)" + "displayName": "Legacy Streams API (prior to Node.js 0.10)" }, { - "textRaw": "Recent ECDH Changes", + "textRaw": "Recent ECDH changes", "name": "recent_ecdh_changes", "desc": "

                                                                                                                                                                                                                                                      Usage of ECDH with non-dynamically generated key pairs has been simplified.\nNow, ecdh.setPrivateKey() can be called with a preselected private key\nand the associated public point (key) will be computed and stored in the object.\nThis allows code to only store and provide the private part of the EC key pair.\necdh.setPrivateKey() now also validates that the private key is valid for\nthe selected curve.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ecdh.setPublicKey() method is now deprecated as its inclusion in the\nAPI is not useful. Either a previously stored private key should be set, which\nautomatically generates the associated public key, or ecdh.generateKeys()\nshould be called. The main drawback of using ecdh.setPublicKey() is that\nit can be used to put the ECDH key pair into an inconsistent state.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Recent ECDH Changes" + "displayName": "Recent ECDH changes" }, { "textRaw": "Support for weak or compromised algorithms", @@ -21186,41 +22076,41 @@ "displayName": "Notes" }, { - "textRaw": "Crypto Constants", + "textRaw": "Crypto constants", "name": "crypto_constants", "desc": "

                                                                                                                                                                                                                                                      The following constants exported by crypto.constants apply to various uses of\nthe crypto, tls, and https modules and are generally specific to OpenSSL.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "OpenSSL Options", + "textRaw": "OpenSSL options", "name": "openssl_options", - "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      SSL_OP_ALLApplies multiple bug workarounds within OpenSSL. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html\n for detail.
                                                                                                                                                                                                                                                      SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATIONAllows legacy insecure renegotiation between OpenSSL and unpatched\n clients or servers. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html.
                                                                                                                                                                                                                                                      SSL_OP_CIPHER_SERVER_PREFERENCEAttempts to use the server's preferences instead of the client's when\n selecting a cipher. Behavior depends on protocol version. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html.
                                                                                                                                                                                                                                                      SSL_OP_CISCO_ANYCONNECTInstructs OpenSSL to use Cisco's \"speshul\" version of DTLS_BAD_VER.
                                                                                                                                                                                                                                                      SSL_OP_COOKIE_EXCHANGEInstructs OpenSSL to turn on cookie exchange.
                                                                                                                                                                                                                                                      SSL_OP_CRYPTOPRO_TLSEXT_BUGInstructs OpenSSL to add server-hello extension from an early version\n of the cryptopro draft.
                                                                                                                                                                                                                                                      SSL_OP_DONT_INSERT_EMPTY_FRAGMENTSInstructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability\n workaround added in OpenSSL 0.9.6d.
                                                                                                                                                                                                                                                      SSL_OP_EPHEMERAL_RSAInstructs OpenSSL to always use the tmp_rsa key when performing RSA\n operations.
                                                                                                                                                                                                                                                      SSL_OP_LEGACY_SERVER_CONNECTAllows initial connection to servers that do not support RI.
                                                                                                                                                                                                                                                      SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
                                                                                                                                                                                                                                                      SSL_OP_MICROSOFT_SESS_ID_BUG
                                                                                                                                                                                                                                                      SSL_OP_MSIE_SSLV2_RSA_PADDINGInstructs OpenSSL to disable the workaround for a man-in-the-middle\n protocol-version vulnerability in the SSL 2.0 server implementation.
                                                                                                                                                                                                                                                      SSL_OP_NETSCAPE_CA_DN_BUG
                                                                                                                                                                                                                                                      SSL_OP_NETSCAPE_CHALLENGE_BUG
                                                                                                                                                                                                                                                      SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
                                                                                                                                                                                                                                                      SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
                                                                                                                                                                                                                                                      SSL_OP_NO_COMPRESSIONInstructs OpenSSL to disable support for SSL/TLS compression.
                                                                                                                                                                                                                                                      SSL_OP_NO_QUERY_MTU
                                                                                                                                                                                                                                                      SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATIONInstructs OpenSSL to always start a new session when performing\n renegotiation.
                                                                                                                                                                                                                                                      SSL_OP_NO_SSLv2Instructs OpenSSL to turn off SSL v2
                                                                                                                                                                                                                                                      SSL_OP_NO_SSLv3Instructs OpenSSL to turn off SSL v3
                                                                                                                                                                                                                                                      SSL_OP_NO_TICKETInstructs OpenSSL to disable use of RFC4507bis tickets.
                                                                                                                                                                                                                                                      SSL_OP_NO_TLSv1Instructs OpenSSL to turn off TLS v1
                                                                                                                                                                                                                                                      SSL_OP_NO_TLSv1_1Instructs OpenSSL to turn off TLS v1.1
                                                                                                                                                                                                                                                      SSL_OP_NO_TLSv1_2Instructs OpenSSL to turn off TLS v1.2
                                                                                                                                                                                                                                                      SSL_OP_PKCS1_CHECK_1
                                                                                                                                                                                                                                                      SSL_OP_PKCS1_CHECK_2
                                                                                                                                                                                                                                                      SSL_OP_SINGLE_DH_USEInstructs OpenSSL to always create a new key when using\n temporary/ephemeral DH parameters.
                                                                                                                                                                                                                                                      SSL_OP_SINGLE_ECDH_USEInstructs OpenSSL to always create a new key when using\n temporary/ephemeral ECDH parameters.
                                                                                                                                                                                                                                                      SSL_OP_SSLEAY_080_CLIENT_DH_BUG
                                                                                                                                                                                                                                                      SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
                                                                                                                                                                                                                                                      SSL_OP_TLS_BLOCK_PADDING_BUG
                                                                                                                                                                                                                                                      SSL_OP_TLS_D5_BUG
                                                                                                                                                                                                                                                      SSL_OP_TLS_ROLLBACK_BUGInstructs OpenSSL to disable version rollback attack detection.
                                                                                                                                                                                                                                                      ", + "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      SSL_OP_ALLApplies multiple bug workarounds within OpenSSL. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html\n for detail.
                                                                                                                                                                                                                                                      SSL_OP_ALLOW_NO_DHE_KEXInstructs OpenSSL to allow a non-[EC]DHE-based key exchange mode\n for TLS v1.3
                                                                                                                                                                                                                                                      SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATIONAllows legacy insecure renegotiation between OpenSSL and unpatched\n clients or servers. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html.
                                                                                                                                                                                                                                                      SSL_OP_CIPHER_SERVER_PREFERENCEAttempts to use the server's preferences instead of the client's when\n selecting a cipher. Behavior depends on protocol version. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html.
                                                                                                                                                                                                                                                      SSL_OP_CISCO_ANYCONNECTInstructs OpenSSL to use Cisco's \"speshul\" version of DTLS_BAD_VER.
                                                                                                                                                                                                                                                      SSL_OP_COOKIE_EXCHANGEInstructs OpenSSL to turn on cookie exchange.
                                                                                                                                                                                                                                                      SSL_OP_CRYPTOPRO_TLSEXT_BUGInstructs OpenSSL to add server-hello extension from an early version\n of the cryptopro draft.
                                                                                                                                                                                                                                                      SSL_OP_DONT_INSERT_EMPTY_FRAGMENTSInstructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability\n workaround added in OpenSSL 0.9.6d.
                                                                                                                                                                                                                                                      SSL_OP_EPHEMERAL_RSAInstructs OpenSSL to always use the tmp_rsa key when performing RSA\n operations.
                                                                                                                                                                                                                                                      SSL_OP_LEGACY_SERVER_CONNECTAllows initial connection to servers that do not support RI.
                                                                                                                                                                                                                                                      SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
                                                                                                                                                                                                                                                      SSL_OP_MICROSOFT_SESS_ID_BUG
                                                                                                                                                                                                                                                      SSL_OP_MSIE_SSLV2_RSA_PADDINGInstructs OpenSSL to disable the workaround for a man-in-the-middle\n protocol-version vulnerability in the SSL 2.0 server implementation.
                                                                                                                                                                                                                                                      SSL_OP_NETSCAPE_CA_DN_BUG
                                                                                                                                                                                                                                                      SSL_OP_NETSCAPE_CHALLENGE_BUG
                                                                                                                                                                                                                                                      SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
                                                                                                                                                                                                                                                      SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
                                                                                                                                                                                                                                                      SSL_OP_NO_COMPRESSIONInstructs OpenSSL to disable support for SSL/TLS compression.
                                                                                                                                                                                                                                                      SSL_OP_NO_ENCRYPT_THEN_MACInstructs OpenSSL to disable encrypt-then-MAC.
                                                                                                                                                                                                                                                      SSL_OP_NO_QUERY_MTU
                                                                                                                                                                                                                                                      SSL_OP_NO_RENEGOTIATIONInstructs OpenSSL to disable renegotiation.
                                                                                                                                                                                                                                                      SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATIONInstructs OpenSSL to always start a new session when performing\n renegotiation.
                                                                                                                                                                                                                                                      SSL_OP_NO_SSLv2Instructs OpenSSL to turn off SSL v2
                                                                                                                                                                                                                                                      SSL_OP_NO_SSLv3Instructs OpenSSL to turn off SSL v3
                                                                                                                                                                                                                                                      SSL_OP_NO_TICKETInstructs OpenSSL to disable use of RFC4507bis tickets.
                                                                                                                                                                                                                                                      SSL_OP_NO_TLSv1Instructs OpenSSL to turn off TLS v1
                                                                                                                                                                                                                                                      SSL_OP_NO_TLSv1_1Instructs OpenSSL to turn off TLS v1.1
                                                                                                                                                                                                                                                      SSL_OP_NO_TLSv1_2Instructs OpenSSL to turn off TLS v1.2
                                                                                                                                                                                                                                                      SSL_OP_NO_TLSv1_3Instructs OpenSSL to turn off TLS v1.3
                                                                                                                                                                                                                                                      SSL_OP_PKCS1_CHECK_1
                                                                                                                                                                                                                                                      SSL_OP_PKCS1_CHECK_2
                                                                                                                                                                                                                                                      SSL_OP_PRIORITIZE_CHACHAInstructs OpenSSL server to prioritize ChaCha20Poly1305\n when client does.\n This option has no effect if\n SSL_OP_CIPHER_SERVER_PREFERENCE\n is not enabled.
                                                                                                                                                                                                                                                      SSL_OP_SINGLE_DH_USEInstructs OpenSSL to always create a new key when using\n temporary/ephemeral DH parameters.
                                                                                                                                                                                                                                                      SSL_OP_SINGLE_ECDH_USEInstructs OpenSSL to always create a new key when using\n temporary/ephemeral ECDH parameters.
                                                                                                                                                                                                                                                      SSL_OP_SSLEAY_080_CLIENT_DH_BUG
                                                                                                                                                                                                                                                      SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
                                                                                                                                                                                                                                                      SSL_OP_TLS_BLOCK_PADDING_BUG
                                                                                                                                                                                                                                                      SSL_OP_TLS_D5_BUG
                                                                                                                                                                                                                                                      SSL_OP_TLS_ROLLBACK_BUGInstructs OpenSSL to disable version rollback attack detection.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "OpenSSL Options" + "displayName": "OpenSSL options" }, { - "textRaw": "OpenSSL Engine Constants", + "textRaw": "OpenSSL engine constants", "name": "openssl_engine_constants", "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      ENGINE_METHOD_RSALimit engine usage to RSA
                                                                                                                                                                                                                                                      ENGINE_METHOD_DSALimit engine usage to DSA
                                                                                                                                                                                                                                                      ENGINE_METHOD_DHLimit engine usage to DH
                                                                                                                                                                                                                                                      ENGINE_METHOD_RANDLimit engine usage to RAND
                                                                                                                                                                                                                                                      ENGINE_METHOD_ECLimit engine usage to EC
                                                                                                                                                                                                                                                      ENGINE_METHOD_CIPHERSLimit engine usage to CIPHERS
                                                                                                                                                                                                                                                      ENGINE_METHOD_DIGESTSLimit engine usage to DIGESTS
                                                                                                                                                                                                                                                      ENGINE_METHOD_PKEY_METHSLimit engine usage to PKEY_METHDS
                                                                                                                                                                                                                                                      ENGINE_METHOD_PKEY_ASN1_METHSLimit engine usage to PKEY_ASN1_METHS
                                                                                                                                                                                                                                                      ENGINE_METHOD_ALL
                                                                                                                                                                                                                                                      ENGINE_METHOD_NONE
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "OpenSSL Engine Constants" + "displayName": "OpenSSL engine constants" }, { - "textRaw": "Other OpenSSL Constants", + "textRaw": "Other OpenSSL constants", "name": "other_openssl_constants", - "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      DH_CHECK_P_NOT_SAFE_PRIME
                                                                                                                                                                                                                                                      DH_CHECK_P_NOT_PRIME
                                                                                                                                                                                                                                                      DH_UNABLE_TO_CHECK_GENERATOR
                                                                                                                                                                                                                                                      DH_NOT_SUITABLE_GENERATOR
                                                                                                                                                                                                                                                      ALPN_ENABLED
                                                                                                                                                                                                                                                      RSA_PKCS1_PADDING
                                                                                                                                                                                                                                                      RSA_SSLV23_PADDING
                                                                                                                                                                                                                                                      RSA_NO_PADDING
                                                                                                                                                                                                                                                      RSA_PKCS1_OAEP_PADDING
                                                                                                                                                                                                                                                      RSA_X931_PADDING
                                                                                                                                                                                                                                                      RSA_PKCS1_PSS_PADDING
                                                                                                                                                                                                                                                      RSA_PSS_SALTLEN_DIGESTSets the salt length for RSA_PKCS1_PSS_PADDING to the\n digest size when signing or verifying.
                                                                                                                                                                                                                                                      RSA_PSS_SALTLEN_MAX_SIGNSets the salt length for RSA_PKCS1_PSS_PADDING to the\n maximum permissible value when signing data.
                                                                                                                                                                                                                                                      RSA_PSS_SALTLEN_AUTOCauses the salt length for RSA_PKCS1_PSS_PADDING to be\n determined automatically when verifying a signature.
                                                                                                                                                                                                                                                      POINT_CONVERSION_COMPRESSED
                                                                                                                                                                                                                                                      POINT_CONVERSION_UNCOMPRESSED
                                                                                                                                                                                                                                                      POINT_CONVERSION_HYBRID
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      See the list of SSL OP Flags for details.

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      DH_CHECK_P_NOT_SAFE_PRIME
                                                                                                                                                                                                                                                      DH_CHECK_P_NOT_PRIME
                                                                                                                                                                                                                                                      DH_UNABLE_TO_CHECK_GENERATOR
                                                                                                                                                                                                                                                      DH_NOT_SUITABLE_GENERATOR
                                                                                                                                                                                                                                                      ALPN_ENABLED
                                                                                                                                                                                                                                                      RSA_PKCS1_PADDING
                                                                                                                                                                                                                                                      RSA_SSLV23_PADDING
                                                                                                                                                                                                                                                      RSA_NO_PADDING
                                                                                                                                                                                                                                                      RSA_PKCS1_OAEP_PADDING
                                                                                                                                                                                                                                                      RSA_X931_PADDING
                                                                                                                                                                                                                                                      RSA_PKCS1_PSS_PADDING
                                                                                                                                                                                                                                                      RSA_PSS_SALTLEN_DIGESTSets the salt length for RSA_PKCS1_PSS_PADDING to the\n digest size when signing or verifying.
                                                                                                                                                                                                                                                      RSA_PSS_SALTLEN_MAX_SIGNSets the salt length for RSA_PKCS1_PSS_PADDING to the\n maximum permissible value when signing data.
                                                                                                                                                                                                                                                      RSA_PSS_SALTLEN_AUTOCauses the salt length for RSA_PKCS1_PSS_PADDING to be\n determined automatically when verifying a signature.
                                                                                                                                                                                                                                                      POINT_CONVERSION_COMPRESSED
                                                                                                                                                                                                                                                      POINT_CONVERSION_UNCOMPRESSED
                                                                                                                                                                                                                                                      POINT_CONVERSION_HYBRID
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Other OpenSSL Constants" + "displayName": "Other OpenSSL constants" }, { - "textRaw": "Node.js Crypto Constants", + "textRaw": "Node.js crypto constants", "name": "node.js_crypto_constants", "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      defaultCoreCipherListSpecifies the built-in default cipher list used by Node.js.
                                                                                                                                                                                                                                                      defaultCipherListSpecifies the active default cipher list used by the current Node.js\n process.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Node.js Crypto Constants" + "displayName": "Node.js crypto constants" } ], "type": "module", - "displayName": "Crypto Constants" + "displayName": "Crypto constants" } ], "classes": [ @@ -21334,7 +22224,7 @@ { "textRaw": "Legacy API", "name": "legacy_api", - "desc": "

                                                                                                                                                                                                                                                      As a still supported legacy interface, it is possible (but not recommended) to\ncreate new instances of the crypto.Certificate class as illustrated in the\nexamples below.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      As a still supported legacy interface, it is possible to create new instances of\nthe crypto.Certificate class as illustrated in the examples below.

                                                                                                                                                                                                                                                      ", "ctors": [ { "textRaw": "`new crypto.Certificate()`", @@ -22130,7 +23020,7 @@ "desc": "

                                                                                                                                                                                                                                                      The ECDH class is a utility for creating Elliptic Curve Diffie-Hellman (ECDH)\nkey exchanges.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Instances of the ECDH class can be created using the\ncrypto.createECDH() function.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const crypto = require('crypto');\nconst assert = require('assert');\n\n// Generate Alice's keys...\nconst alice = crypto.createECDH('secp521r1');\nconst aliceKey = alice.generateKeys();\n\n// Generate Bob's keys...\nconst bob = crypto.createECDH('secp521r1');\nconst bobKey = bob.generateKeys();\n\n// Exchange and generate the secret...\nconst aliceSecret = alice.computeSecret(bobKey);\nconst bobSecret = bob.computeSecret(aliceKey);\n\nassert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex'));\n// OK\n
                                                                                                                                                                                                                                                      ", "classMethods": [ { - "textRaw": "Class Method: `ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])`", + "textRaw": "Static method: `ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])`", "type": "classMethod", "name": "convertKey", "meta": { @@ -22231,7 +23121,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Computes the shared secret using otherPublicKey as the other\nparty's public key and returns the computed shared secret. The supplied\nkey is interpreted using specified inputEncoding, and the returned secret\nis encoded using the specified outputEncoding.\nIf the inputEncoding is not\nprovided, otherPublicKey is expected to be a Buffer, TypedArray, or\nDataView.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If outputEncoding is given a string will be returned; otherwise a\nBuffer is returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ecdh.computeSecret will throw an\nERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY error when otherPublicKey\nlies outside of the elliptic curve. Since otherPublicKey is\nusually supplied from a remote user over an insecure network,\nits recommended for developers to handle this exception accordingly.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Computes the shared secret using otherPublicKey as the other\nparty's public key and returns the computed shared secret. The supplied\nkey is interpreted using specified inputEncoding, and the returned secret\nis encoded using the specified outputEncoding.\nIf the inputEncoding is not\nprovided, otherPublicKey is expected to be a Buffer, TypedArray, or\nDataView.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If outputEncoding is given a string will be returned; otherwise a\nBuffer is returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ecdh.computeSecret will throw an\nERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY error when otherPublicKey\nlies outside of the elliptic curve. Since otherPublicKey is\nusually supplied from a remote user over an insecure network,\nbe sure to handle this exception accordingly.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`ecdh.generateKeys([encoding[, format]])`", @@ -22594,13 +23484,18 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33360", + "description": "Instances of this class can now be passed to worker threads using `postMessage`." + }, + { "version": "v11.13.0", "pr-url": "https://github.com/nodejs/node/pull/26438", "description": "This class is now exported." } ] }, - "desc": "

                                                                                                                                                                                                                                                      Node.js uses a KeyObject class to represent a symmetric or asymmetric key,\nand each kind of key exposes different functions. The\ncrypto.createSecretKey(), crypto.createPublicKey() and\ncrypto.createPrivateKey() methods are used to create KeyObject\ninstances. KeyObject objects are not to be created directly using the new\nkeyword.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Most applications should consider using the new KeyObject API instead of\npassing keys as strings or Buffers due to improved security features.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Node.js uses a KeyObject class to represent a symmetric or asymmetric key,\nand each kind of key exposes different functions. The\ncrypto.createSecretKey(), crypto.createPublicKey() and\ncrypto.createPrivateKey() methods are used to create KeyObject\ninstances. KeyObject objects are not to be created directly using the new\nkeyword.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Most applications should consider using the new KeyObject API instead of\npassing keys as strings or Buffers due to improved security features.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      KeyObject instances can be passed to other threads via postMessage().\nThe receiver obtains a cloned KeyObject, and the KeyObject does not need to\nbe listed in the transferList argument.

                                                                                                                                                                                                                                                      ", "properties": [ { "textRaw": "`asymmetricKeyType` {string}", @@ -22944,7 +23839,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The dns module enables name resolution. For example, use it to look up IP\naddresses of host names.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Although named for the Domain Name System (DNS), it does not always use the\nDNS protocol for lookups. dns.lookup() uses the operating system\nfacilities to perform name resolution. It may not need to perform any network\ncommunication. Developers looking to perform name resolution in the same way\nthat other applications on the same operating system behave should use\ndns.lookup().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dns = require('dns');\n\ndns.lookup('example.org', (err, address, family) => {\n  console.log('address: %j family: IPv%s', address, family);\n});\n// address: \"93.184.216.34\" family: IPv4\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All other functions in the dns module connect to an actual DNS server to\nperform name resolution. They will always use the network to perform DNS\nqueries. These functions do not use the same set of configuration files used by\ndns.lookup() (e.g. /etc/hosts). These functions should be used by\ndevelopers who do not want to use the underlying operating system's\nfacilities for name resolution, and instead want to always perform DNS queries.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dns = require('dns');\n\ndns.resolve4('archive.org', (err, addresses) => {\n  if (err) throw err;\n\n  console.log(`addresses: ${JSON.stringify(addresses)}`);\n\n  addresses.forEach((a) => {\n    dns.reverse(a, (err, hostnames) => {\n      if (err) {\n        throw err;\n      }\n      console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);\n    });\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See the Implementation considerations section for more information.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/dns.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns module enables name resolution. For example, use it to look up IP\naddresses of host names.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Although named for the Domain Name System (DNS), it does not always use the\nDNS protocol for lookups. dns.lookup() uses the operating system\nfacilities to perform name resolution. It may not need to perform any network\ncommunication. To perform name resolution the way other applications on the same\nsystem do, use dns.lookup().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dns = require('dns');\n\ndns.lookup('example.org', (err, address, family) => {\n  console.log('address: %j family: IPv%s', address, family);\n});\n// address: \"93.184.216.34\" family: IPv4\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All other functions in the dns module connect to an actual DNS server to\nperform name resolution. They will always use the network to perform DNS\nqueries. These functions do not use the same set of configuration files used by\ndns.lookup() (e.g. /etc/hosts). Use these functions to always perform\nDNS queries, bypassing other name-resolution facilities.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dns = require('dns');\n\ndns.resolve4('archive.org', (err, addresses) => {\n  if (err) throw err;\n\n  console.log(`addresses: ${JSON.stringify(addresses)}`);\n\n  addresses.forEach((a) => {\n    dns.reverse(a, (err, hostnames) => {\n      if (err) {\n        throw err;\n      }\n      console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);\n    });\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See the Implementation considerations section for more information.

                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `dns.Resolver`", @@ -22959,6 +23854,29 @@ "desc": "

                                                                                                                                                                                                                                                      An independent resolver for DNS requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Creating a new resolver uses the default server settings. Setting\nthe servers used for a resolver using\nresolver.setServers() does not affect\nother resolvers:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Resolver } = require('dns');\nconst resolver = new Resolver();\nresolver.setServers(['4.4.4.4']);\n\n// This request will use the server at 4.4.4.4, independent of global settings.\nresolver.resolve4('example.org', (err, addresses) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following methods from the dns module are available:

                                                                                                                                                                                                                                                      \n", "methods": [ { + "textRaw": "`Resolver([options])`", + "type": "method", + "name": "Resolver", + "meta": { + "added": [ + "v8.3.0" + ], + "changes": [ + { + "version": "v12.18.3", + "pr-url": "https://github.com/nodejs/node/pull/33472", + "description": "The constructor now accepts an `options` object. The single supported option is `timeout`." + } + ] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Create a new resolver.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • options <Object>\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • timeout <integer> Query timeout in milliseconds, or -1 to use the\ndefault timeout.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`resolver.cancel()`", "type": "method", "name": "cancel", @@ -23105,7 +24023,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      The following flags can be passed as hints to dns.lookup().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • dns.ADDRCONFIG: Returned address types are determined by the types\nof addresses supported by the current system. For example, IPv4 addresses\nare only returned if the current system has at least one IPv4 address\nconfigured. Loopback addresses are not considered.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.V4MAPPED: If the IPv6 family was specified, but no IPv6 addresses were\nfound, then return IPv4 mapped IPv6 addresses. It is not supported\non some operating systems (e.g FreeBSD 10.1).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.ALL: If dns.V4MAPPED is specified, return resolved IPv6 addresses as\nwell as IPv4 mapped IPv6 addresses.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The following flags can be passed as hints to dns.lookup().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • dns.ADDRCONFIG: Limits returned address types to the types of non-loopback\naddresses configured on the system. For example, IPv4 addresses are only\nreturned if the current system has at least one IPv4 address configured.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.V4MAPPED: If the IPv6 family was specified, but no IPv6 addresses were\nfound, then return IPv4 mapped IPv6 addresses. It is not supported\non some operating systems (e.g FreeBSD 10.1).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.ALL: If dns.V4MAPPED is specified, return resolved IPv6 addresses as\nwell as IPv4 mapped IPv6 addresses.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Supported getaddrinfo flags" } @@ -23747,12 +24665,12 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the IP address and port of servers to be used when performing DNS\nresolution. The servers argument is an array of RFC 5952 formatted\naddresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      dns.setServers([\n  '4.4.4.4',\n  '[2001:4860:4860::8888]',\n  '4.4.4.4:1053',\n  '[2001:4860:4860::8888]:1053'\n]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns.setServers() method must not be called while a DNS query is in\nprogress.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns.setServers() method affects only dns.resolve(),\ndns.resolve*() and dns.reverse() (and specifically not\ndns.lookup()).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method works much like\nresolve.conf.\nThat is, if attempting to resolve with the first server provided results in a\nNOTFOUND error, the resolve() method will not attempt to resolve with\nsubsequent servers provided. Fallback DNS servers will only be used if the\nearlier ones time out or result in some other error.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets the IP address and port of servers to be used when performing DNS\nresolution. The servers argument is an array of RFC 5952 formatted\naddresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      dns.setServers([\n  '4.4.4.4',\n  '[2001:4860:4860::8888]',\n  '4.4.4.4:1053',\n  '[2001:4860:4860::8888]:1053'\n]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns.setServers() method must not be called while a DNS query is in\nprogress.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns.setServers() method affects only dns.resolve(),\ndns.resolve*() and dns.reverse() (and specifically not\ndns.lookup()).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method works much like\nresolve.conf.\nThat is, if attempting to resolve with the first server provided results in a\nNOTFOUND error, the resolve() method will not attempt to resolve with\nsubsequent servers provided. Fallback DNS servers will only be used if the\nearlier ones time out or result in some other error.

                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "DNS Promises API", + "textRaw": "DNS promises API", "name": "dns_promises_api", "desc": "

                                                                                                                                                                                                                                                      The dns.promises API provides an alternative set of asynchronous DNS methods\nthat return Promise objects rather than using callbacks. The API is accessible\nvia require('dns').promises.

                                                                                                                                                                                                                                                      ", "classes": [ @@ -24234,11 +25152,11 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the IP address and port of servers to be used when performing DNS\nresolution. The servers argument is an array of RFC 5952 formatted\naddresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      dnsPromises.setServers([\n  '4.4.4.4',\n  '[2001:4860:4860::8888]',\n  '4.4.4.4:1053',\n  '[2001:4860:4860::8888]:1053'\n]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dnsPromises.setServers() method must not be called while a DNS query is in\nprogress.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method works much like\nresolve.conf.\nThat is, if attempting to resolve with the first server provided results in a\nNOTFOUND error, the resolve() method will not attempt to resolve with\nsubsequent servers provided. Fallback DNS servers will only be used if the\nearlier ones time out or result in some other error.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets the IP address and port of servers to be used when performing DNS\nresolution. The servers argument is an array of RFC 5952 formatted\naddresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      dnsPromises.setServers([\n  '4.4.4.4',\n  '[2001:4860:4860::8888]',\n  '4.4.4.4:1053',\n  '[2001:4860:4860::8888]:1053'\n]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dnsPromises.setServers() method must not be called while a DNS query is in\nprogress.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method works much like\nresolve.conf.\nThat is, if attempting to resolve with the first server provided results in a\nNOTFOUND error, the resolve() method will not attempt to resolve with\nsubsequent servers provided. Fallback DNS servers will only be used if the\nearlier ones time out or result in some other error.

                                                                                                                                                                                                                                                      " } ], "type": "module", - "displayName": "DNS Promises API" + "displayName": "DNS promises API" }, { "textRaw": "Error codes", @@ -24284,6 +25202,9 @@ "textRaw": "Domain", "name": "domain", "meta": { + "deprecated": [ + "v1.4.2" + ], "changes": [ { "version": "v8.8.0", @@ -24299,11 +25220,11 @@ "introduced_in": "v0.10.0", "stability": 0, "stabilityText": "Deprecated", - "desc": "

                                                                                                                                                                                                                                                      This module is pending deprecation. Once a replacement API has been\nfinalized, this module will be fully deprecated. Most end users should\nnot have cause to use this module. Users who absolutely must have\nthe functionality that domains provide may rely on it for the time being\nbut should expect to have to migrate to a different solution\nin the future.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Domains provide a way to handle multiple different IO operations as a\nsingle group. If any of the event emitters or callbacks registered to a\ndomain emit an 'error' event, or throw an error, then the domain object\nwill be notified, rather than losing the context of the error in the\nprocess.on('uncaughtException') handler, or causing the program to\nexit immediately with an error code.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/domain.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This module is pending deprecation. Once a replacement API has been\nfinalized, this module will be fully deprecated. Most developers should\nnot have cause to use this module. Users who absolutely must have\nthe functionality that domains provide may rely on it for the time being\nbut should expect to have to migrate to a different solution\nin the future.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Domains provide a way to handle multiple different IO operations as a\nsingle group. If any of the event emitters or callbacks registered to a\ndomain emit an 'error' event, or throw an error, then the domain object\nwill be notified, rather than losing the context of the error in the\nprocess.on('uncaughtException') handler, or causing the program to\nexit immediately with an error code.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Warning: Don't Ignore Errors!", - "name": "Warning: Don't Ignore Errors!", + "textRaw": "Warning: Don't ignore errors!", + "name": "Warning: Don't ignore errors!", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Domain error handlers are not a substitute for closing down a\nprocess when an error occurs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By the very nature of how throw works in JavaScript, there is almost\nnever any way to safely \"pick up where it left off\", without leaking\nreferences, or creating some other sort of undefined brittle state.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The safest way to respond to a thrown error is to shut down the\nprocess. Of course, in a normal web server, there may be many\nopen connections, and it is not reasonable to abruptly shut those down\nbecause an error was triggered by someone else.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The better approach is to send an error response to the request that\ntriggered the error, while letting the others finish in their normal\ntime, and stop listening for new requests in that worker.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In this way, domain usage goes hand-in-hand with the cluster module,\nsince the master process can fork a new worker when a worker\nencounters an error. For Node.js programs that scale to multiple\nmachines, the terminating proxy or service registry can take note of\nthe failure, and react accordingly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, this is not a good idea:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // XXX WARNING! BAD IDEA!\n\nconst d = require('domain').create();\nd.on('error', (er) => {\n  // The error won't crash the process, but what it does is worse!\n  // Though we've prevented abrupt process restarting, we are leaking\n  // resources like crazy if this ever happens.\n  // This is no better than process.on('uncaughtException')!\n  console.log(`error, but oh well ${er.message}`);\n});\nd.run(() => {\n  require('http').createServer((req, res) => {\n    handleRequest(req, res);\n  }).listen(PORT);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By using the context of a domain, and the resilience of separating our\nprogram into multiple worker processes, we can react more\nappropriately, and handle errors with much greater safety.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Much better!\n\nconst cluster = require('cluster');\nconst PORT = +process.env.PORT || 1337;\n\nif (cluster.isMaster) {\n  // A more realistic scenario would have more than 2 workers,\n  // and perhaps not put the master and worker in the same file.\n  //\n  // It is also possible to get a bit fancier about logging, and\n  // implement whatever custom logic is needed to prevent DoS\n  // attacks and other bad behavior.\n  //\n  // See the options in the cluster documentation.\n  //\n  // The important thing is that the master does very little,\n  // increasing our resilience to unexpected errors.\n\n  cluster.fork();\n  cluster.fork();\n\n  cluster.on('disconnect', (worker) => {\n    console.error('disconnect!');\n    cluster.fork();\n  });\n\n} else {\n  // the worker\n  //\n  // This is where we put our bugs!\n\n  const domain = require('domain');\n\n  // See the cluster documentation for more details about using\n  // worker processes to serve requests. How it works, caveats, etc.\n\n  const server = require('http').createServer((req, res) => {\n    const d = domain.create();\n    d.on('error', (er) => {\n      console.error(`error ${er.stack}`);\n\n      // We're in dangerous territory!\n      // By definition, something unexpected occurred,\n      // which we probably didn't want.\n      // Anything can happen now! Be very careful!\n\n      try {\n        // Make sure we close down within 30 seconds\n        const killtimer = setTimeout(() => {\n          process.exit(1);\n        }, 30000);\n        // But don't keep the process open just for that!\n        killtimer.unref();\n\n        // Stop taking new requests.\n        server.close();\n\n        // Let the master know we're dead. This will trigger a\n        // 'disconnect' in the cluster master, and then it will fork\n        // a new worker.\n        cluster.worker.disconnect();\n\n        // Try to send an error to the request that triggered the problem\n        res.statusCode = 500;\n        res.setHeader('content-type', 'text/plain');\n        res.end('Oops, there was a problem!\\n');\n      } catch (er2) {\n        // Oh well, not much we can do at this point.\n        console.error(`Error sending 500! ${er2.stack}`);\n      }\n    });\n\n    // Because req and res were created before this domain existed,\n    // we need to explicitly add them.\n    // See the explanation of implicit vs explicit binding below.\n    d.add(req);\n    d.add(res);\n\n    // Now run the handler function in the domain.\n    d.run(() => {\n      handleRequest(req, res);\n    });\n  });\n  server.listen(PORT);\n}\n\n// This part is not important. Just an example routing thing.\n// Put fancy application logic here.\nfunction handleRequest(req, res) {\n  switch (req.url) {\n    case '/error':\n      // We do some async stuff, and then...\n      setTimeout(() => {\n        // Whoops!\n        flerb.bark();\n      }, timeout);\n      break;\n    default:\n      res.end('ok');\n  }\n}\n
                                                                                                                                                                                                                                                      " }, @@ -24314,14 +25235,14 @@ "desc": "

                                                                                                                                                                                                                                                      Any time an Error object is routed through a domain, a few extra fields\nare added to it.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • error.domain The domain that first handled the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error.domainEmitter The event emitter that emitted an 'error' event\nwith the error object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error.domainBound The callback function which was bound to the\ndomain, and passed an error as its first argument.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error.domainThrown A boolean indicating whether the error was\nthrown, emitted, or passed to a bound callback function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " }, { - "textRaw": "Implicit Binding", - "name": "Implicit Binding", + "textRaw": "Implicit binding", + "name": "Implicit binding", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      If domains are in use, then all new EventEmitter objects (including\nStream objects, requests, responses, etc.) will be implicitly bound to\nthe active domain at the time of their creation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Additionally, callbacks passed to lowlevel event loop requests (such as\nto fs.open(), or other callback-taking methods) will automatically be\nbound to the active domain. If they throw, then the domain will catch\nthe error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to prevent excessive memory usage, Domain objects themselves\nare not implicitly added as children of the active domain. If they\nwere, then it would be too easy to prevent request and response objects\nfrom being properly garbage collected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To nest Domain objects as children of a parent Domain they must be\nexplicitly added.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Implicit binding routes thrown errors and 'error' events to the\nDomain's 'error' event, but does not register the EventEmitter on the\nDomain.\nImplicit binding only takes care of thrown errors and 'error' events.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Explicit Binding", - "name": "Explicit Binding", + "textRaw": "Explicit binding", + "name": "Explicit binding", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Sometimes, the domain in use is not the one that ought to be used for a\nspecific event emitter. Or, the event emitter could have been created\nin the context of one domain, but ought to instead be bound to some\nother domain.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, there could be one domain in use for an HTTP server, but\nperhaps we would like to have a separate domain to use for each request.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      That is possible via explicit binding.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Create a top-level domain for the server\nconst domain = require('domain');\nconst http = require('http');\nconst serverDomain = domain.create();\n\nserverDomain.run(() => {\n  // Server is created in the scope of serverDomain\n  http.createServer((req, res) => {\n    // Req and res are also created in the scope of serverDomain\n    // however, we'd prefer to have a separate domain for each request.\n    // create it first thing, and add req and res to it.\n    const reqd = domain.create();\n    reqd.add(req);\n    reqd.add(res);\n    reqd.on('error', (er) => {\n      console.error('Error', er, req.url);\n      try {\n        res.writeHead(500);\n        res.end('Error occurred, sorry.');\n      } catch (er2) {\n        console.error('Error sending 500', er2, req.url);\n      }\n    });\n  }).listen(1337);\n});\n
                                                                                                                                                                                                                                                      " } @@ -24491,11 +25412,11 @@ ], "modules": [ { - "textRaw": "Domains and Promises", + "textRaw": "Domains and promises", "name": "domains_and_promises", - "desc": "

                                                                                                                                                                                                                                                      As of Node.js 8.0.0, the handlers of Promises are run inside the domain in\nwhich the call to .then() or .catch() itself was made:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const d1 = domain.create();\nconst d2 = domain.create();\n\nlet p;\nd1.run(() => {\n  p = Promise.resolve(42);\n});\n\nd2.run(() => {\n  p.then((v) => {\n    // running in d2\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A callback may be bound to a specific domain using domain.bind(callback):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const d1 = domain.create();\nconst d2 = domain.create();\n\nlet p;\nd1.run(() => {\n  p = Promise.resolve(42);\n});\n\nd2.run(() => {\n  p.then(p.domain.bind((v) => {\n    // running in d1\n  }));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Domains will not interfere with the error handling mechanisms for\nPromises. In other words, no 'error' event will be emitted for unhandled\nPromise rejections.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      As of Node.js 8.0.0, the handlers of promises are run inside the domain in\nwhich the call to .then() or .catch() itself was made:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const d1 = domain.create();\nconst d2 = domain.create();\n\nlet p;\nd1.run(() => {\n  p = Promise.resolve(42);\n});\n\nd2.run(() => {\n  p.then((v) => {\n    // running in d2\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A callback may be bound to a specific domain using domain.bind(callback):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const d1 = domain.create();\nconst d2 = domain.create();\n\nlet p;\nd1.run(() => {\n  p = Promise.resolve(42);\n});\n\nd2.run(() => {\n  p.then(p.domain.bind((v) => {\n    // running in d1\n  }));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Domains will not interfere with the error handling mechanisms for\npromises. In other words, no 'error' event will be emitted for unhandled\nPromise rejections.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Domains and Promises" + "displayName": "Domains and promises" } ], "type": "module", @@ -24508,7 +25429,7 @@ "stability": 2, "stabilityText": "Stable", "type": "module", - "desc": "

                                                                                                                                                                                                                                                      Much of the Node.js core API is built around an idiomatic asynchronous\nevent-driven architecture in which certain kinds of objects (called \"emitters\")\nemit named events that cause Function objects (\"listeners\") to be called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For instance: a net.Server object emits an event each time a peer\nconnects to it; a fs.ReadStream emits an event when the file is opened;\na stream emits an event whenever data is available to be read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All objects that emit events are instances of the EventEmitter class. These\nobjects expose an eventEmitter.on() function that allows one or more\nfunctions to be attached to named events emitted by the object. Typically,\nevent names are camel-cased strings but any valid JavaScript property key\ncan be used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the EventEmitter object emits an event, all of the functions attached\nto that specific event are called synchronously. Any values returned by the\ncalled listeners are ignored and will be discarded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example shows a simple EventEmitter instance with a single\nlistener. The eventEmitter.on() method is used to register listeners, while\nthe eventEmitter.emit() method is used to trigger the event.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const EventEmitter = require('events');\n\nclass MyEmitter extends EventEmitter {}\n\nconst myEmitter = new MyEmitter();\nmyEmitter.on('event', () => {\n  console.log('an event occurred!');\n});\nmyEmitter.emit('event');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/events.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Much of the Node.js core API is built around an idiomatic asynchronous\nevent-driven architecture in which certain kinds of objects (called \"emitters\")\nemit named events that cause Function objects (\"listeners\") to be called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For instance: a net.Server object emits an event each time a peer\nconnects to it; a fs.ReadStream emits an event when the file is opened;\na stream emits an event whenever data is available to be read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All objects that emit events are instances of the EventEmitter class. These\nobjects expose an eventEmitter.on() function that allows one or more\nfunctions to be attached to named events emitted by the object. Typically,\nevent names are camel-cased strings but any valid JavaScript property key\ncan be used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the EventEmitter object emits an event, all of the functions attached\nto that specific event are called synchronously. Any values returned by the\ncalled listeners are ignored and will be discarded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example shows a simple EventEmitter instance with a single\nlistener. The eventEmitter.on() method is used to register listeners, while\nthe eventEmitter.emit() method is used to trigger the event.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const EventEmitter = require('events');\n\nclass MyEmitter extends EventEmitter {}\n\nconst myEmitter = new MyEmitter();\nmyEmitter.on('event', () => {\n  console.log('an event occurred!');\n});\nmyEmitter.emit('event');\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Passing arguments and `this` to listeners", @@ -24518,11 +25439,11 @@ "displayName": "Passing arguments and `this` to listeners" }, { - "textRaw": "Asynchronous vs. Synchronous", + "textRaw": "Asynchronous vs. synchronous", "name": "asynchronous_vs._synchronous", "desc": "

                                                                                                                                                                                                                                                      The EventEmitter calls all listeners synchronously in the order in which\nthey were registered. This ensures the proper sequencing of\nevents and helps avoid race conditions and logic errors. When appropriate,\nlistener functions can switch to an asynchronous mode of operation using\nthe setImmediate() or process.nextTick() methods:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myEmitter = new MyEmitter();\nmyEmitter.on('event', (a, b) => {\n  setImmediate(() => {\n    console.log('this happens asynchronously');\n  });\n});\nmyEmitter.emit('event', 'a', 'b');\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Asynchronous vs. Synchronous" + "displayName": "Asynchronous vs. synchronous" }, { "textRaw": "Handling events only once", @@ -24539,13 +25460,13 @@ "displayName": "Error events" }, { - "textRaw": "Capture Rejections of Promises", + "textRaw": "Capture rejections of promises", "name": "capture_rejections_of_promises", "stability": 1, "stabilityText": "captureRejections is experimental.", "desc": "

                                                                                                                                                                                                                                                      Using async functions with event handlers is problematic, because it\ncan lead to an unhandled rejection in case of a thrown exception:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const ee = new EventEmitter();\nee.on('something', async (value) => {\n  throw new Error('kaboom');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The captureRejections option in the EventEmitter constructor or the global\nsetting change this behavior, installing a .then(undefined, handler)\nhandler on the Promise. This handler routes the exception\nasynchronously to the Symbol.for('nodejs.rejection') method\nif there is one, or to 'error' event handler if there is none.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const ee1 = new EventEmitter({ captureRejections: true });\nee1.on('something', async (value) => {\n  throw new Error('kaboom');\n});\n\nee1.on('error', console.log);\n\nconst ee2 = new EventEmitter({ captureRejections: true });\nee2.on('something', async (value) => {\n  throw new Error('kaboom');\n});\n\nee2[Symbol.for('nodejs.rejection')] = console.log;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Setting EventEmitter.captureRejections = true will change the default for all\nnew instances of EventEmitter.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      EventEmitter.captureRejections = true;\nconst ee1 = new EventEmitter();\nee1.on('something', async (value) => {\n  throw new Error('kaboom');\n});\n\nee1.on('error', console.log);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The 'error' events that are generated by the captureRejections behavior\ndo not have a catch handler to avoid infinite error loops: the\nrecommendation is to not use async functions as 'error' event handlers.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Capture Rejections of Promises" + "displayName": "Capture rejections of promises" } ], "classes": [ @@ -24636,7 +25557,7 @@ "v0.9.12" ], "deprecated": [ - "v4.0.0" + "v3.2.0" ], "changes": [] }, @@ -25196,7 +26117,16 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Creates a Promise that is fulfilled when the EventEmitter emits the given\nevent or that is rejected when the EventEmitter emits 'error'.\nThe Promise will resolve with an array of all the arguments emitted to the\ngiven event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is intentionally generic and works with the web platform\nEventTarget interface, which has no special\n'error' event semantics and does not listen to the 'error' event.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { once, EventEmitter } = require('events');\n\nasync function run() {\n  const ee = new EventEmitter();\n\n  process.nextTick(() => {\n    ee.emit('myevent', 42);\n  });\n\n  const [value] = await once(ee, 'myevent');\n  console.log(value);\n\n  const err = new Error('kaboom');\n  process.nextTick(() => {\n    ee.emit('error', err);\n  });\n\n  try {\n    await once(ee, 'myevent');\n  } catch (err) {\n    console.log('error happened', err);\n  }\n}\n\nrun();\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Creates a Promise that is fulfilled when the EventEmitter emits the given\nevent or that is rejected if the EventEmitter emits 'error' while waiting.\nThe Promise will resolve with an array of all the arguments emitted to the\ngiven event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is intentionally generic and works with the web platform\nEventTarget interface, which has no special\n'error' event semantics and does not listen to the 'error' event.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { once, EventEmitter } = require('events');\n\nasync function run() {\n  const ee = new EventEmitter();\n\n  process.nextTick(() => {\n    ee.emit('myevent', 42);\n  });\n\n  const [value] = await once(ee, 'myevent');\n  console.log(value);\n\n  const err = new Error('kaboom');\n  process.nextTick(() => {\n    ee.emit('error', err);\n  });\n\n  try {\n    await once(ee, 'myevent');\n  } catch (err) {\n    console.log('error happened', err);\n  }\n}\n\nrun();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The special handling of the 'error' event is only used when events.once()\nis used to wait for another event. If events.once() is used to wait for the\n'error' event itself, then it is treated as any other kind of event without\nspecial handling:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { EventEmitter, once } = require('events');\n\nconst ee = new EventEmitter();\n\nonce(ee, 'error')\n  .then(([err]) => console.log('ok', err.message))\n  .catch((err) => console.log('error', err.message));\n\nee.emit('error', new Error('boom'));\n\n// Prints: ok boom\n
                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "Awaiting multiple events emitted on `process.nextTick()`", + "name": "awaiting_multiple_events_emitted_on_`process.nexttick()`", + "desc": "

                                                                                                                                                                                                                                                      There is an edge case worth noting when using the events.once() function\nto await multiple events emitted on in the same batch of process.nextTick()\noperations, or whenever multiple events are emitted synchronously. Specifically,\nbecause the process.nextTick() queue is drained before the Promise microtask\nqueue, and because EventEmitter emits all events synchronously, it is possible\nfor events.once() to miss an event.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { EventEmitter, once } = require('events');\n\nconst myEE = new EventEmitter();\n\nasync function foo() {\n  await once(myEE, 'bar');\n  console.log('bar');\n\n  // This Promise will never resolve because the 'foo' event will\n  // have already been emitted before the Promise is created.\n  await once(myEE, 'foo');\n  console.log('foo');\n}\n\nprocess.nextTick(() => {\n  myEE.emit('bar');\n  myEE.emit('foo');\n});\n\nfoo().then(() => console.log('done'));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To catch both events, create each of the Promises before awaiting either\nof them, then it becomes possible to use Promise.all(), Promise.race(),\nor Promise.allSettled():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { EventEmitter, once } = require('events');\n\nconst myEE = new EventEmitter();\n\nasync function foo() {\n  await Promise.all([once(myEE, 'bar'), once(myEE, 'foo')]);\n  console.log('foo', 'bar');\n}\n\nprocess.nextTick(() => {\n  myEE.emit('bar');\n  myEE.emit('foo');\n});\n\nfoo().then(() => console.log('done'));\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Awaiting multiple events emitted on `process.nextTick()`" + } + ] }, { "textRaw": "events.on(emitter, eventName)", @@ -25236,7 +26166,7 @@ ], "properties": [ { - "textRaw": "events.captureRejections", + "textRaw": "`events.captureRejections`", "name": "captureRejections", "meta": { "added": [ @@ -25264,17 +26194,45 @@ ] }, { - "textRaw": "File System", + "textRaw": "File system", "name": "fs", "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The fs module provides an API for interacting with the file system in a\nmanner closely modeled around standard POSIX functions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To use this module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All file system operations have synchronous and asynchronous forms.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The asynchronous form always takes a completion callback as its last argument.\nThe arguments passed to the completion callback depend on the method, but the\nfirst argument is always reserved for an exception. If the operation was\ncompleted successfully, then the first argument will be null or undefined.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nfs.unlink('/tmp/hello', (err) => {\n  if (err) throw err;\n  console.log('successfully deleted /tmp/hello');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Exceptions that occur using synchronous operations are thrown immediately and\nmay be handled using try…catch, or may be allowed to bubble up.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\ntry {\n  fs.unlinkSync('/tmp/hello');\n  console.log('successfully deleted /tmp/hello');\n} catch (err) {\n  // handle the error\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There is no guaranteed ordering when using asynchronous methods. So the\nfollowing is prone to error because the fs.stat() operation may complete\nbefore the fs.rename() operation:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.rename('/tmp/hello', '/tmp/world', (err) => {\n  if (err) throw err;\n  console.log('renamed complete');\n});\nfs.stat('/tmp/world', (err, stats) => {\n  if (err) throw err;\n  console.log(`stats: ${JSON.stringify(stats)}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To correctly order the operations, move the fs.stat() call into the callback\nof the fs.rename() operation:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.rename('/tmp/hello', '/tmp/world', (err) => {\n  if (err) throw err;\n  fs.stat('/tmp/world', (err, stats) => {\n    if (err) throw err;\n    console.log(`stats: ${JSON.stringify(stats)}`);\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In busy processes, use the asynchronous versions of these calls. The synchronous\nversions will block the entire process until they complete, halting all\nconnections.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While it is not recommended, most fs functions allow the callback argument to\nbe omitted, in which case a default callback is used that rethrows errors. To\nget a trace to the original call site, set the NODE_DEBUG environment\nvariable:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Omitting the callback function on asynchronous fs functions is deprecated and\nmay result in an error being thrown in the future.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ cat script.js\nfunction bad() {\n  require('fs').readFile('/');\n}\nbad();\n\n$ env NODE_DEBUG=fs node script.js\nfs.js:88\n        throw backtrace;\n        ^\nError: EISDIR: illegal operation on a directory, read\n    <stack trace.>\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/fs.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The fs module enables interacting with the file system in a\nway modeled on standard POSIX functions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To use this module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All file system operations have synchronous, callback, and promise-based\nforms.

                                                                                                                                                                                                                                                      ", "modules": [ { + "textRaw": "Synchronous example", + "name": "synchronous_example", + "desc": "

                                                                                                                                                                                                                                                      The synchronous form blocks the Node.js event loop and further JavaScript\nexecution until the operation is complete. Exceptions are thrown immediately\nand can be handled using try…catch, or can be allowed to bubble up.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\ntry {\n  fs.unlinkSync('/tmp/hello');\n  console.log('successfully deleted /tmp/hello');\n} catch (err) {\n  // handle the error\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Synchronous example" + }, + { + "textRaw": "Callback example", + "name": "callback_example", + "desc": "

                                                                                                                                                                                                                                                      The callback form takes a completion callback function as its last\nargument and invokes the operation asynchronously. The arguments passed to\nthe completion callback depend on the method, but the first argument is always\nreserved for an exception. If the operation is completed successfully, then\nthe first argument is null or undefined.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nfs.unlink('/tmp/hello', (err) => {\n  if (err) throw err;\n  console.log('successfully deleted /tmp/hello');\n});\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Callback example" + }, + { + "textRaw": "Promise example", + "name": "promise_example", + "desc": "

                                                                                                                                                                                                                                                      Promise-based operations return a Promise that is resolved when the\nasynchronous operation is complete.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs').promises;\n\n(async function(path) {\n  try {\n    await fs.unlink(path);\n    console.log(`successfully deleted ${path}`);\n  } catch (error) {\n    console.error('there was an error:', error.message);\n  }\n})('/tmp/hello');\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Promise example" + }, + { + "textRaw": "Ordering of callback and promise-based operations", + "name": "ordering_of_callback_and_promise-based_operations", + "desc": "

                                                                                                                                                                                                                                                      There is no guaranteed ordering when using either the callback or\npromise-based methods. For example, the following is prone to error\nbecause the fs.stat() operation might complete before the fs.rename()\noperation:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.rename('/tmp/hello', '/tmp/world', (err) => {\n  if (err) throw err;\n  console.log('renamed complete');\n});\nfs.stat('/tmp/world', (err, stats) => {\n  if (err) throw err;\n  console.log(`stats: ${JSON.stringify(stats)}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To correctly order the operations, move the fs.stat() call into the callback\nof the fs.rename() operation:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.rename('/tmp/hello', '/tmp/world', (err) => {\n  if (err) throw err;\n  fs.stat('/tmp/world', (err, stats) => {\n    if (err) throw err;\n    console.log(`stats: ${JSON.stringify(stats)}`);\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, use the promise-based API:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs').promises;\n\n(async function(from, to) {\n  try {\n    await fs.rename(from, to);\n    const stats = await fs.stat(to);\n    console.log(`stats: ${JSON.stringify(stats)}`);\n  } catch (error) {\n    console.error('there was an error:', error.message);\n  }\n})('/tmp/hello', '/tmp/world');\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Ordering of callback and promise-based operations" + }, + { "textRaw": "File paths", "name": "file_paths", - "desc": "

                                                                                                                                                                                                                                                      Most fs operations accept filepaths that may be specified in the form of\na string, a Buffer, or a URL object using the file: protocol.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      String form paths are interpreted as UTF-8 character sequences identifying\nthe absolute or relative filename. Relative paths will be resolved relative\nto the current working directory as specified by process.cwd().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using an absolute path on POSIX:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nfs.open('/open/some/file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a relative path on POSIX (relative to process.cwd()):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open('file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Paths specified using a Buffer are useful primarily on certain POSIX\noperating systems that treat file paths as opaque byte sequences. On such\nsystems, it is possible for a single file path to contain sub-sequences that\nuse multiple character encodings. As with string paths, Buffer paths may\nbe relative or absolute:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using an absolute path on POSIX:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, Node.js follows the concept of per-drive working directory. This\nbehavior can be observed when using a drive path without a backslash. For\nexample fs.readdirSync('C:\\\\') can potentially return a different result than\nfs.readdirSync('C:'). For more information, see\nthis MSDN page.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Most fs operations accept filepaths that may be specified in the form of\na string, a Buffer, or a URL object using the file: protocol.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      String form paths are interpreted as UTF-8 character sequences identifying\nthe absolute or relative filename. Relative paths will be resolved relative\nto the current working directory as determined by calling process.cwd().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using an absolute path on POSIX:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nfs.open('/open/some/file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a relative path on POSIX (relative to process.cwd()):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open('file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Paths specified using a Buffer are useful primarily on certain POSIX\noperating systems that treat file paths as opaque byte sequences. On such\nsystems, it is possible for a single file path to contain sub-sequences that\nuse multiple character encodings. As with string paths, Buffer paths may\nbe relative or absolute:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using an absolute path on POSIX:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, Node.js follows the concept of per-drive working directory. This\nbehavior can be observed when using a drive path without a backslash. For\nexample fs.readdirSync('C:\\\\') can potentially return a different result than\nfs.readdirSync('C:'). For more information, see\nthis MSDN page.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "URL object support", @@ -25294,219 +26252,18 @@ "displayName": "File paths" }, { - "textRaw": "File Descriptors", + "textRaw": "File descriptors", "name": "file_descriptors", "desc": "

                                                                                                                                                                                                                                                      On POSIX systems, for every process, the kernel maintains a table of currently\nopen files and resources. Each open file is assigned a simple numeric\nidentifier called a file descriptor. At the system-level, all file system\noperations use these file descriptors to identify and track each specific\nfile. Windows systems use a different but conceptually similar mechanism for\ntracking resources. To simplify things for users, Node.js abstracts away the\nspecific differences between operating systems and assigns all open files a\nnumeric file descriptor.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The fs.open() method is used to allocate a new file descriptor. Once\nallocated, the file descriptor may be used to read data from, write data to,\nor request information about the file.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open('/open/some/file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.fstat(fd, (err, stat) => {\n    if (err) throw err;\n    // use stat\n\n    // always close the file descriptor!\n    fs.close(fd, (err) => {\n      if (err) throw err;\n    });\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Most operating systems limit the number of file descriptors that may be open\nat any given time so it is critical to close the descriptor when operations\nare completed. Failure to do so will result in a memory leak that will\neventually cause an application to crash.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "File Descriptors" + "displayName": "File descriptors" }, { - "textRaw": "Threadpool Usage", + "textRaw": "Threadpool usage", "name": "threadpool_usage", "desc": "

                                                                                                                                                                                                                                                      All file system APIs except fs.FSWatcher() and those that are explicitly\nsynchronous use libuv's threadpool, which can have surprising and negative\nperformance implications for some applications. See the\nUV_THREADPOOL_SIZE documentation for more information.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Threadpool Usage" - }, - { - "textRaw": "Class `fs.Dir`", - "name": "class_`fs.dir`", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      A class representing a directory stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Created by fs.opendir(), fs.opendirSync(), or\nfsPromises.opendir().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nasync function print(path) {\n  const dir = await fs.promises.opendir(path);\n  for await (const dirent of dir) {\n    console.log(dirent.name);\n  }\n}\nprint('./').catch(console.error);\n
                                                                                                                                                                                                                                                      ", - "methods": [ - { - "textRaw": "`dir.close()`", - "type": "method", - "name": "close", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {Promise}", - "name": "return", - "type": "Promise" - }, - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Asynchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A Promise is returned that will be resolved after the resource has been\nclosed.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`dir.close(callback)`", - "type": "method", - "name": "close", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "params": [ - { - "textRaw": "`callback` {Function}", - "name": "callback", - "type": "Function", - "options": [ - { - "textRaw": "`err` {Error}", - "name": "err", - "type": "Error" - } - ] - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Asynchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback will be called after the resource handle has been closed.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`dir.closeSync()`", - "type": "method", - "name": "closeSync", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Synchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`dir.read()`", - "type": "method", - "name": "read", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {Promise} containing {fs.Dirent|null}", - "name": "return", - "type": "Promise", - "desc": "containing {fs.Dirent|null}" - }, - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Asynchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      After the read is completed, a Promise is returned that will be resolved with\nan fs.Dirent, or null if there are no more directory entries to read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`dir.read(callback)`", - "type": "method", - "name": "read", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "params": [ - { - "textRaw": "`callback` {Function}", - "name": "callback", - "type": "Function", - "options": [ - { - "textRaw": "`err` {Error}", - "name": "err", - "type": "Error" - }, - { - "textRaw": "`dirent` {fs.Dirent|null}", - "name": "dirent", - "type": "fs.Dirent|null" - } - ] - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Asynchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      After the read is completed, the callback will be called with an\nfs.Dirent, or null if there are no more directory entries to read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`dir.readSync()`", - "type": "method", - "name": "readSync", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {fs.Dirent|null}", - "name": "return", - "type": "fs.Dirent|null" - }, - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Synchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If there are no more directory entries to read, null will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`dir[Symbol.asyncIterator]()`", - "type": "method", - "name": "[Symbol.asyncIterator]", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {AsyncIterator} of {fs.Dirent}", - "name": "return", - "type": "AsyncIterator", - "desc": "of {fs.Dirent}" - }, - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Asynchronously iterates over the directory via readdir(3) until all entries have\nbeen read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Entries returned by the async iterator are always an fs.Dirent.\nThe null case from dir.read() is handled internally.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See fs.Dir for an example.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Directory entries returned by this iterator are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                      " - } - ], - "properties": [ - { - "textRaw": "`path` {string}", - "type": "string", - "name": "path", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The read-only path of this directory as was provided to fs.opendir(),\nfs.opendirSync(), or fsPromises.opendir().

                                                                                                                                                                                                                                                      " - } - ], - "type": "module", - "displayName": "Class `fs.Dir`" + "displayName": "Threadpool usage" }, { "textRaw": "`fs` Promises API", @@ -25514,7 +26271,7 @@ "desc": "

                                                                                                                                                                                                                                                      The fs.promises API provides an alternative set of asynchronous file system\nmethods that return Promise objects rather than using callbacks. The\nAPI is accessible via require('fs').promises.

                                                                                                                                                                                                                                                      ", "classes": [ { - "textRaw": "class: `FileHandle`", + "textRaw": "Class: `FileHandle`", "type": "class", "name": "FileHandle", "meta": { @@ -26170,7 +26927,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Tests a user's permissions for the file or directory specified by path.\nThe mode argument is an optional integer that specifies the accessibility\nchecks to be performed. Check File Access Constants for possible values\nof mode. It is possible to create a mask consisting of the bitwise OR of\ntwo or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the accessibility check is successful, the Promise is resolved with no\nvalue. If any of the accessibility checks fail, the Promise is rejected\nwith an Error object. The following example checks if the file\n/etc/passwd can be read and written by the current process.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst fsPromises = fs.promises;\n\nfsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK)\n  .then(() => console.log('can access'))\n  .catch(() => console.error('cannot access'));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using fsPromises.access() to check for the accessibility of a file before\ncalling fsPromises.open() is not recommended. Doing so introduces a race\ncondition, since other processes may change the file's state between the two\ncalls. Instead, user code should open/read/write the file directly and handle\nthe error raised if the file is not accessible.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Tests a user's permissions for the file or directory specified by path.\nThe mode argument is an optional integer that specifies the accessibility\nchecks to be performed. Check File access constants for possible values\nof mode. It is possible to create a mask consisting of the bitwise OR of\ntwo or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the accessibility check is successful, the Promise is resolved with no\nvalue. If any of the accessibility checks fail, the Promise is rejected\nwith an Error object. The following example checks if the file\n/etc/passwd can be read and written by the current process.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst fsPromises = fs.promises;\n\nfsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK)\n  .then(() => console.log('can access'))\n  .catch(() => console.error('cannot access'));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using fsPromises.access() to check for the accessibility of a file before\ncalling fsPromises.open() is not recommended. Doing so introduces a race\ncondition, since other processes may change the file's state between the two\ncalls. Instead, user code should open/read/write the file directly and handle\nthe error raised if the file is not accessible.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`fsPromises.appendFile(path, data[, options])`", @@ -26311,7 +27068,13 @@ "added": [ "v10.0.0" ], - "changes": [] + "changes": [ + { + "version": "v14.0.0", + "pr-url": "https://github.com/nodejs/node/pull/27044", + "description": "Changed 'flags' argument to 'mode' and imposed stricter type validation." + } + ] }, "signatures": [ { @@ -26423,6 +27186,44 @@ "desc": "

                                                                                                                                                                                                                                                      Changes the ownership on a symbolic link then resolves the Promise with\nno arguments upon success.

                                                                                                                                                                                                                                                      " }, { + "textRaw": "`fsPromises.lutimes(path, atime, mtime)`", + "type": "method", + "name": "lutimes", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Promise}", + "name": "return", + "type": "Promise" + }, + "params": [ + { + "textRaw": "`path` {string|Buffer|URL}", + "name": "path", + "type": "string|Buffer|URL" + }, + { + "textRaw": "`atime` {number|string|Date}", + "name": "atime", + "type": "number|string|Date" + }, + { + "textRaw": "`mtime` {number|string|Date}", + "name": "mtime", + "type": "number|string|Date" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Changes the access and modification times of a file in the same way as\nfsPromises.utimes(), with the difference that if the path refers to a\nsymbolic link, then the link is not dereferenced: instead, the timestamps of\nthe symbolic link itself are changed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Upon success, the Promise is resolved without arguments.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`fsPromises.link(existingPath, newPath)`", "type": "method", "name": "link", @@ -27232,59 +28033,259 @@ "displayName": "`fs` Promises API" }, { - "textRaw": "FS Constants", + "textRaw": "FS constants", "name": "fs_constants", "desc": "

                                                                                                                                                                                                                                                      The following constants are exported by fs.constants.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Not every constant will be available on every operating system.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To use more than one constant, use the bitwise OR | operator.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nconst {\n  O_RDWR,\n  O_CREAT,\n  O_EXCL\n} = fs.constants;\n\nfs.open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "File Access Constants", + "textRaw": "File access constants", "name": "file_access_constants", "desc": "

                                                                                                                                                                                                                                                      The following constants are meant for use with fs.access().

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      F_OKFlag indicating that the file is visible to the calling process.\n This is useful for determining if a file exists, but says nothing\n about rwx permissions. Default if no mode is specified.
                                                                                                                                                                                                                                                      R_OKFlag indicating that the file can be read by the calling process.
                                                                                                                                                                                                                                                      W_OKFlag indicating that the file can be written by the calling\n process.
                                                                                                                                                                                                                                                      X_OKFlag indicating that the file can be executed by the calling\n process. This has no effect on Windows\n (will behave like fs.constants.F_OK).
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "File Access Constants" + "displayName": "File access constants" }, { - "textRaw": "File Copy Constants", + "textRaw": "File copy constants", "name": "file_copy_constants", "desc": "

                                                                                                                                                                                                                                                      The following constants are meant for use with fs.copyFile().

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      COPYFILE_EXCLIf present, the copy operation will fail with an error if the\n destination path already exists.
                                                                                                                                                                                                                                                      COPYFILE_FICLONEIf present, the copy operation will attempt to create a\n copy-on-write reflink. If the underlying platform does not support\n copy-on-write, then a fallback copy mechanism is used.
                                                                                                                                                                                                                                                      COPYFILE_FICLONE_FORCEIf present, the copy operation will attempt to create a\n copy-on-write reflink. If the underlying platform does not support\n copy-on-write, then the operation will fail with an error.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "File Copy Constants" + "displayName": "File copy constants" }, { - "textRaw": "File Open Constants", + "textRaw": "File open constants", "name": "file_open_constants", "desc": "

                                                                                                                                                                                                                                                      The following constants are meant for use with fs.open().

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      O_RDONLYFlag indicating to open a file for read-only access.
                                                                                                                                                                                                                                                      O_WRONLYFlag indicating to open a file for write-only access.
                                                                                                                                                                                                                                                      O_RDWRFlag indicating to open a file for read-write access.
                                                                                                                                                                                                                                                      O_CREATFlag indicating to create the file if it does not already exist.
                                                                                                                                                                                                                                                      O_EXCLFlag indicating that opening a file should fail if the\n O_CREAT flag is set and the file already exists.
                                                                                                                                                                                                                                                      O_NOCTTYFlag indicating that if path identifies a terminal device, opening the\n path shall not cause that terminal to become the controlling terminal for\n the process (if the process does not already have one).
                                                                                                                                                                                                                                                      O_TRUNCFlag indicating that if the file exists and is a regular file, and the\n file is opened successfully for write access, its length shall be truncated\n to zero.
                                                                                                                                                                                                                                                      O_APPENDFlag indicating that data will be appended to the end of the file.
                                                                                                                                                                                                                                                      O_DIRECTORYFlag indicating that the open should fail if the path is not a\n directory.
                                                                                                                                                                                                                                                      O_NOATIMEFlag indicating reading accesses to the file system will no longer\n result in an update to the atime information associated with\n the file. This flag is available on Linux operating systems only.
                                                                                                                                                                                                                                                      O_NOFOLLOWFlag indicating that the open should fail if the path is a symbolic\n link.
                                                                                                                                                                                                                                                      O_SYNCFlag indicating that the file is opened for synchronized I/O with write\n operations waiting for file integrity.
                                                                                                                                                                                                                                                      O_DSYNCFlag indicating that the file is opened for synchronized I/O with write\n operations waiting for data integrity.
                                                                                                                                                                                                                                                      O_SYMLINKFlag indicating to open the symbolic link itself rather than the\n resource it is pointing to.
                                                                                                                                                                                                                                                      O_DIRECTWhen set, an attempt will be made to minimize caching effects of file\n I/O.
                                                                                                                                                                                                                                                      O_NONBLOCKFlag indicating to open the file in nonblocking mode when possible.
                                                                                                                                                                                                                                                      UV_FS_O_FILEMAPWhen set, a memory file mapping is used to access the file. This flag\n is available on Windows operating systems only. On other operating systems,\n this flag is ignored.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "File Open Constants" + "displayName": "File open constants" }, { - "textRaw": "File Type Constants", + "textRaw": "File type constants", "name": "file_type_constants", "desc": "

                                                                                                                                                                                                                                                      The following constants are meant for use with the fs.Stats object's\nmode property for determining a file's type.

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      S_IFMTBit mask used to extract the file type code.
                                                                                                                                                                                                                                                      S_IFREGFile type constant for a regular file.
                                                                                                                                                                                                                                                      S_IFDIRFile type constant for a directory.
                                                                                                                                                                                                                                                      S_IFCHRFile type constant for a character-oriented device file.
                                                                                                                                                                                                                                                      S_IFBLKFile type constant for a block-oriented device file.
                                                                                                                                                                                                                                                      S_IFIFOFile type constant for a FIFO/pipe.
                                                                                                                                                                                                                                                      S_IFLNKFile type constant for a symbolic link.
                                                                                                                                                                                                                                                      S_IFSOCKFile type constant for a socket.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "File Type Constants" + "displayName": "File type constants" }, { - "textRaw": "File Mode Constants", + "textRaw": "File mode constants", "name": "file_mode_constants", "desc": "

                                                                                                                                                                                                                                                      The following constants are meant for use with the fs.Stats object's\nmode property for determining the access permissions for a file.

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      S_IRWXUFile mode indicating readable, writable, and executable by owner.
                                                                                                                                                                                                                                                      S_IRUSRFile mode indicating readable by owner.
                                                                                                                                                                                                                                                      S_IWUSRFile mode indicating writable by owner.
                                                                                                                                                                                                                                                      S_IXUSRFile mode indicating executable by owner.
                                                                                                                                                                                                                                                      S_IRWXGFile mode indicating readable, writable, and executable by group.
                                                                                                                                                                                                                                                      S_IRGRPFile mode indicating readable by group.
                                                                                                                                                                                                                                                      S_IWGRPFile mode indicating writable by group.
                                                                                                                                                                                                                                                      S_IXGRPFile mode indicating executable by group.
                                                                                                                                                                                                                                                      S_IRWXOFile mode indicating readable, writable, and executable by others.
                                                                                                                                                                                                                                                      S_IROTHFile mode indicating readable by others.
                                                                                                                                                                                                                                                      S_IWOTHFile mode indicating writable by others.
                                                                                                                                                                                                                                                      S_IXOTHFile mode indicating executable by others.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "File Mode Constants" + "displayName": "File mode constants" } ], "type": "module", - "displayName": "FS Constants" + "displayName": "FS constants" }, { - "textRaw": "File System Flags", + "textRaw": "File system flags", "name": "file_system_flags", - "desc": "

                                                                                                                                                                                                                                                      The following flags are available wherever the flag option takes a\nstring.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'a': Open file for appending.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'ax': Like 'a' but fails if the path exists.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'a+': Open file for reading and appending.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'ax+': Like 'a+' but fails if the path exists.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'as': Open file for appending in synchronous mode.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'as+': Open file for reading and appending in synchronous mode.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'r': Open file for reading.\nAn exception occurs if the file does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'r+': Open file for reading and writing.\nAn exception occurs if the file does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'rs+': Open file for reading and writing in synchronous mode. Instructs\nthe operating system to bypass the local file system cache.

                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        This is primarily useful for opening files on NFS mounts as it allows\nskipping the potentially stale local cache. It has a very real impact on\nI/O performance so using this flag is not recommended unless it is needed.

                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        This doesn't turn fs.open() or fsPromises.open() into a synchronous\nblocking call. If synchronous operation is desired, something like\nfs.openSync() should be used.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'w': Open file for writing.\nThe file is created (if it does not exist) or truncated (if it exists).

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'wx': Like 'w' but fails if the path exists.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'w+': Open file for reading and writing.\nThe file is created (if it does not exist) or truncated (if it exists).

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'wx+': Like 'w+' but fails if the path exists.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      flag can also be a number as documented by open(2); commonly used constants\nare available from fs.constants. On Windows, flags are translated to\ntheir equivalent ones where applicable, e.g. O_WRONLY to FILE_GENERIC_WRITE,\nor O_EXCL|O_CREAT to CREATE_NEW, as accepted by CreateFileW.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The exclusive flag 'x' (O_EXCL flag in open(2)) ensures that path is newly\ncreated. On POSIX systems, path is considered to exist even if it is a symlink\nto a non-existent file. The exclusive flag may or may not work with network\nfile systems.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Linux, positional writes don't work when the file is opened in append mode.\nThe kernel ignores the position argument and always appends the data to\nthe end of the file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Modifying a file rather than replacing it may require a flags mode of 'r+'\nrather than the default mode 'w'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The behavior of some flags are platform-specific. As such, opening a directory\non macOS and Linux with the 'a+' flag, as in the example below, will return an\nerror. In contrast, on Windows and FreeBSD, a file descriptor or a FileHandle\nwill be returned.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // macOS and Linux\nfs.open('<directory>', 'a+', (err, fd) => {\n  // => [Error: EISDIR: illegal operation on a directory, open <directory>]\n});\n\n// Windows and FreeBSD\nfs.open('<directory>', 'a+', (err, fd) => {\n  // => null, <fd>\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, opening an existing hidden file using the 'w' flag (either\nthrough fs.open() or fs.writeFile() or fsPromises.open()) will fail with\nEPERM. Existing hidden files can be opened for writing with the 'r+' flag.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A call to fs.ftruncate() or filehandle.truncate() can be used to reset\nthe file contents.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The following flags are available wherever the flag option takes a\nstring.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'a': Open file for appending.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'ax': Like 'a' but fails if the path exists.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'a+': Open file for reading and appending.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'ax+': Like 'a+' but fails if the path exists.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'as': Open file for appending in synchronous mode.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'as+': Open file for reading and appending in synchronous mode.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'r': Open file for reading.\nAn exception occurs if the file does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'r+': Open file for reading and writing.\nAn exception occurs if the file does not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'rs+': Open file for reading and writing in synchronous mode. Instructs\nthe operating system to bypass the local file system cache.

                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        This is primarily useful for opening files on NFS mounts as it allows\nskipping the potentially stale local cache. It has a very real impact on\nI/O performance so using this flag is not recommended unless it is needed.

                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        This doesn't turn fs.open() or fsPromises.open() into a synchronous\nblocking call. If synchronous operation is desired, something like\nfs.openSync() should be used.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'w': Open file for writing.\nThe file is created (if it does not exist) or truncated (if it exists).

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'wx': Like 'w' but fails if the path exists.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'w+': Open file for reading and writing.\nThe file is created (if it does not exist) or truncated (if it exists).

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'wx+': Like 'w+' but fails if the path exists.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      flag can also be a number as documented by open(2); commonly used constants\nare available from fs.constants. On Windows, flags are translated to\ntheir equivalent ones where applicable, e.g. O_WRONLY to FILE_GENERIC_WRITE,\nor O_EXCL|O_CREAT to CREATE_NEW, as accepted by CreateFileW.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The exclusive flag 'x' (O_EXCL flag in open(2)) causes the operation to\nreturn an error if the path already exists. On POSIX, if the path is a symbolic\nlink, using O_EXCL returns an error even if the link is to a path that does\nnot exist. The exclusive flag may or may not work with network file systems.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Linux, positional writes don't work when the file is opened in append mode.\nThe kernel ignores the position argument and always appends the data to\nthe end of the file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Modifying a file rather than replacing it may require a flags mode of 'r+'\nrather than the default mode 'w'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The behavior of some flags are platform-specific. As such, opening a directory\non macOS and Linux with the 'a+' flag, as in the example below, will return an\nerror. In contrast, on Windows and FreeBSD, a file descriptor or a FileHandle\nwill be returned.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // macOS and Linux\nfs.open('<directory>', 'a+', (err, fd) => {\n  // => [Error: EISDIR: illegal operation on a directory, open <directory>]\n});\n\n// Windows and FreeBSD\nfs.open('<directory>', 'a+', (err, fd) => {\n  // => null, <fd>\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, opening an existing hidden file using the 'w' flag (either\nthrough fs.open() or fs.writeFile() or fsPromises.open()) will fail with\nEPERM. Existing hidden files can be opened for writing with the 'r+' flag.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A call to fs.ftruncate() or filehandle.truncate() can be used to reset\nthe file contents.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "File System Flags" + "displayName": "File system flags" } ], "classes": [ { + "textRaw": "Class: `fs.Dir`", + "type": "class", + "name": "fs.Dir", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      A class representing a directory stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Created by fs.opendir(), fs.opendirSync(), or\nfsPromises.opendir().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nasync function print(path) {\n  const dir = await fs.promises.opendir(path);\n  for await (const dirent of dir) {\n    console.log(dirent.name);\n  }\n}\nprint('./').catch(console.error);\n
                                                                                                                                                                                                                                                      ", + "methods": [ + { + "textRaw": "`dir.close()`", + "type": "method", + "name": "close", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Promise}", + "name": "return", + "type": "Promise" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Asynchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A Promise is returned that will be resolved after the resource has been\nclosed.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`dir.close(callback)`", + "type": "method", + "name": "close", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`callback` {Function}", + "name": "callback", + "type": "Function", + "options": [ + { + "textRaw": "`err` {Error}", + "name": "err", + "type": "Error" + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Asynchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback will be called after the resource handle has been closed.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`dir.closeSync()`", + "type": "method", + "name": "closeSync", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Synchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`dir.read()`", + "type": "method", + "name": "read", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Promise} containing {fs.Dirent|null}", + "name": "return", + "type": "Promise", + "desc": "containing {fs.Dirent|null}" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Asynchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      After the read is completed, a Promise is returned that will be resolved with\nan fs.Dirent, or null if there are no more directory entries to read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`dir.read(callback)`", + "type": "method", + "name": "read", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`callback` {Function}", + "name": "callback", + "type": "Function", + "options": [ + { + "textRaw": "`err` {Error}", + "name": "err", + "type": "Error" + }, + { + "textRaw": "`dirent` {fs.Dirent|null}", + "name": "dirent", + "type": "fs.Dirent|null" + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Asynchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      After the read is completed, the callback will be called with an\nfs.Dirent, or null if there are no more directory entries to read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`dir.readSync()`", + "type": "method", + "name": "readSync", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.Dirent|null}", + "name": "return", + "type": "fs.Dirent|null" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Synchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If there are no more directory entries to read, null will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`dir[Symbol.asyncIterator]()`", + "type": "method", + "name": "[Symbol.asyncIterator]", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {AsyncIterator} of {fs.Dirent}", + "name": "return", + "type": "AsyncIterator", + "desc": "of {fs.Dirent}" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Asynchronously iterates over the directory via readdir(3) until all entries have\nbeen read.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Entries returned by the async iterator are always an fs.Dirent.\nThe null case from dir.read() is handled internally.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See fs.Dir for an example.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Directory entries returned by this iterator are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                      " + } + ], + "properties": [ + { + "textRaw": "`path` {string}", + "type": "string", + "name": "path", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The read-only path of this directory as was provided to fs.opendir(),\nfs.opendirSync(), or fsPromises.opendir().

                                                                                                                                                                                                                                                      " + } + ] + }, + { "textRaw": "Class: `fs.Dirent`", "type": "class", "name": "fs.Dirent", @@ -27554,6 +28555,108 @@ } ], "desc": "

                                                                                                                                                                                                                                                      Stop watching for changes on the given fs.FSWatcher. Once stopped, the\nfs.FSWatcher object is no longer usable.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`watcher.ref()`", + "type": "method", + "name": "ref", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.FSWatcher}", + "name": "return", + "type": "fs.FSWatcher" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      When called, requests that the Node.js event loop not exit so long as the\nFSWatcher is active. Calling watcher.ref() multiple times will have\nno effect.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By default, all FSWatcher objects are \"ref'ed\", making it normally\nunnecessary to call watcher.ref() unless watcher.unref() had been\ncalled previously.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`watcher.unref()`", + "type": "method", + "name": "unref", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.FSWatcher}", + "name": "return", + "type": "fs.FSWatcher" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      When called, the active FSWatcher object will not require the Node.js\nevent loop to remain active. If there is no other activity keeping the\nevent loop running, the process may exit before the FSWatcher object's\ncallback is invoked. Calling watcher.unref() multiple times will have\nno effect.

                                                                                                                                                                                                                                                      " + } + ] + }, + { + "textRaw": "Class: `fs.StatWatcher`", + "type": "class", + "name": "fs.StatWatcher", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "desc": "\n

                                                                                                                                                                                                                                                      A successful call to fs.watchFile() method will return a new fs.StatWatcher\nobject.

                                                                                                                                                                                                                                                      ", + "methods": [ + { + "textRaw": "`watcher.ref()`", + "type": "method", + "name": "ref", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.StatWatcher}", + "name": "return", + "type": "fs.StatWatcher" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      When called, requests that the Node.js event loop not exit so long as the\nStatWatcher is active. Calling watcher.ref() multiple times will have\nno effect.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By default, all StatWatcher objects are \"ref'ed\", making it normally\nunnecessary to call watcher.ref() unless watcher.unref() had been\ncalled previously.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`watcher.unref()`", + "type": "method", + "name": "unref", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.StatWatcher}", + "name": "return", + "type": "fs.StatWatcher" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      When called, the active StatWatcher object will not require the Node.js\nevent loop to remain active. If there is no other activity keeping the\nevent loop running, the process may exit before the StatWatcher object's\ncallback is invoked. Calling watcher.unref() multiple times will have\nno effect.

                                                                                                                                                                                                                                                      " } ] }, @@ -27567,7 +28670,7 @@ ], "changes": [] }, - "desc": "\n

                                                                                                                                                                                                                                                      A successful call to fs.createReadStream() will return a new fs.ReadStream\nobject.

                                                                                                                                                                                                                                                      ", + "desc": "\n

                                                                                                                                                                                                                                                      Instances of fs.ReadStream are created and returned using the\nfs.createReadStream() function.

                                                                                                                                                                                                                                                      ", "events": [ { "textRaw": "Event: `'close'`", @@ -27869,7 +28972,7 @@ "textRaw": "`rdev` {number|bigint}", "type": "number|bigint", "name": "rdev", - "desc": "

                                                                                                                                                                                                                                                      A numeric device identifier if the file is considered \"special\".

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      A numeric device identifier if the file represents a device.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`size` {number|bigint}", @@ -28036,11 +29139,11 @@ ], "modules": [ { - "textRaw": "Stat Time Values", + "textRaw": "Stat time values", "name": "stat_time_values", "desc": "

                                                                                                                                                                                                                                                      The atimeMs, mtimeMs, ctimeMs, birthtimeMs properties are\nnumeric values that hold the corresponding times in milliseconds. Their\nprecision is platform specific. When bigint: true is passed into the\nmethod that generates the object, the properties will be bigints,\notherwise they will be numbers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The atimeNs, mtimeNs, ctimeNs, birthtimeNs properties are\nbigints that hold the corresponding times in nanoseconds. They are\nonly present when bigint: true is passed into the method that generates\nthe object. Their precision is platform specific.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      atime, mtime, ctime, and birthtime are\nDate object alternate representations of the various times. The\nDate and number values are not connected. Assigning a new number value, or\nmutating the Date value, will not be reflected in the corresponding alternate\nrepresentation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The times in the stat object have the following semantics:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • atime \"Access Time\": Time when file data last accessed. Changed\nby the mknod(2), utimes(2), and read(2) system calls.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • mtime \"Modified Time\": Time when file data last modified.\nChanged by the mknod(2), utimes(2), and write(2) system calls.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • ctime \"Change Time\": Time when file status was last changed\n(inode data modification). Changed by the chmod(2), chown(2),\nlink(2), mknod(2), rename(2), unlink(2), utimes(2),\nread(2), and write(2) system calls.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • birthtime \"Birth Time\": Time of file creation. Set once when the\nfile is created. On filesystems where birthtime is not available,\nthis field may instead hold either the ctime or\n1970-01-01T00:00Z (ie, Unix epoch timestamp 0). This value may be greater\nthan atime or mtime in this case. On Darwin and other FreeBSD variants,\nalso set if the atime is explicitly set to an earlier value than the current\nbirthtime using the utimes(2) system call.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Prior to Node.js 0.12, the ctime held the birthtime on Windows systems. As\nof 0.12, ctime is not \"creation time\", and on Unix systems, it never was.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Stat Time Values" + "displayName": "Stat time values" } ] }, @@ -28054,7 +29157,7 @@ ], "changes": [] }, - "desc": "", + "desc": "\n

                                                                                                                                                                                                                                                      Instances of fs.WriteStream are created and returned using the\nfs.createWriteStream() function.

                                                                                                                                                                                                                                                      ", "events": [ { "textRaw": "Event: `'close'`", @@ -28192,7 +29295,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Tests a user's permissions for the file or directory specified by path.\nThe mode argument is an optional integer that specifies the accessibility\nchecks to be performed. Check File Access Constants for possible values\nof mode. It is possible to create a mask consisting of the bitwise OR of\ntwo or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The final argument, callback, is a callback function that is invoked with\na possible error argument. If any of the accessibility checks fail, the error\nargument will be an Error object. The following examples check if\npackage.json exists, and if it is readable or writable.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const file = 'package.json';\n\n// Check if the file exists in the current directory.\nfs.access(file, fs.constants.F_OK, (err) => {\n  console.log(`${file} ${err ? 'does not exist' : 'exists'}`);\n});\n\n// Check if the file is readable.\nfs.access(file, fs.constants.R_OK, (err) => {\n  console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);\n});\n\n// Check if the file is writable.\nfs.access(file, fs.constants.W_OK, (err) => {\n  console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);\n});\n\n// Check if the file exists in the current directory, and if it is writable.\nfs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {\n  if (err) {\n    console.error(\n      `${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`);\n  } else {\n    console.log(`${file} exists, and it is writable`);\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using fs.access() to check for the accessibility of a file before calling\nfs.open(), fs.readFile() or fs.writeFile() is not recommended. Doing\nso introduces a race condition, since other processes may change the file's\nstate between the two calls. Instead, user code should open/read/write the\nfile directly and handle the error raised if the file is not accessible.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      write (NOT RECOMMENDED)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.access('myfile', (err) => {\n  if (!err) {\n    console.error('myfile already exists');\n    return;\n  }\n\n  fs.open('myfile', 'wx', (err, fd) => {\n    if (err) throw err;\n    writeMyData(fd);\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      write (RECOMMENDED)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open('myfile', 'wx', (err, fd) => {\n  if (err) {\n    if (err.code === 'EEXIST') {\n      console.error('myfile already exists');\n      return;\n    }\n\n    throw err;\n  }\n\n  writeMyData(fd);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      read (NOT RECOMMENDED)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.access('myfile', (err) => {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      console.error('myfile does not exist');\n      return;\n    }\n\n    throw err;\n  }\n\n  fs.open('myfile', 'r', (err, fd) => {\n    if (err) throw err;\n    readMyData(fd);\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      read (RECOMMENDED)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open('myfile', 'r', (err, fd) => {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      console.error('myfile does not exist');\n      return;\n    }\n\n    throw err;\n  }\n\n  readMyData(fd);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"not recommended\" examples above check for accessibility and then use the\nfile; the \"recommended\" examples are better because they use the file directly\nand handle the error, if any.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In general, check for the accessibility of a file only if the file will not be\nused directly, for example when its accessibility is a signal from another\nprocess.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, access-control policies (ACLs) on a directory may limit access to\na file or directory. The fs.access() function, however, does not check the\nACL and therefore may report that a path is accessible even if the ACL restricts\nthe user from reading or writing to it.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Tests a user's permissions for the file or directory specified by path.\nThe mode argument is an optional integer that specifies the accessibility\nchecks to be performed. Check File access constants for possible values\nof mode. It is possible to create a mask consisting of the bitwise OR of\ntwo or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The final argument, callback, is a callback function that is invoked with\na possible error argument. If any of the accessibility checks fail, the error\nargument will be an Error object. The following examples check if\npackage.json exists, and if it is readable or writable.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const file = 'package.json';\n\n// Check if the file exists in the current directory.\nfs.access(file, fs.constants.F_OK, (err) => {\n  console.log(`${file} ${err ? 'does not exist' : 'exists'}`);\n});\n\n// Check if the file is readable.\nfs.access(file, fs.constants.R_OK, (err) => {\n  console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);\n});\n\n// Check if the file is writable.\nfs.access(file, fs.constants.W_OK, (err) => {\n  console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);\n});\n\n// Check if the file exists in the current directory, and if it is writable.\nfs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {\n  if (err) {\n    console.error(\n      `${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`);\n  } else {\n    console.log(`${file} exists, and it is writable`);\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Do not use fs.access() to check for the accessibility of a file before calling\nfs.open(), fs.readFile() or fs.writeFile(). Doing\nso introduces a race condition, since other processes may change the file's\nstate between the two calls. Instead, user code should open/read/write the\nfile directly and handle the error raised if the file is not accessible.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      write (NOT RECOMMENDED)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.access('myfile', (err) => {\n  if (!err) {\n    console.error('myfile already exists');\n    return;\n  }\n\n  fs.open('myfile', 'wx', (err, fd) => {\n    if (err) throw err;\n    writeMyData(fd);\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      write (RECOMMENDED)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open('myfile', 'wx', (err, fd) => {\n  if (err) {\n    if (err.code === 'EEXIST') {\n      console.error('myfile already exists');\n      return;\n    }\n\n    throw err;\n  }\n\n  writeMyData(fd);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      read (NOT RECOMMENDED)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.access('myfile', (err) => {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      console.error('myfile does not exist');\n      return;\n    }\n\n    throw err;\n  }\n\n  fs.open('myfile', 'r', (err, fd) => {\n    if (err) throw err;\n    readMyData(fd);\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      read (RECOMMENDED)

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.open('myfile', 'r', (err, fd) => {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      console.error('myfile does not exist');\n      return;\n    }\n\n    throw err;\n  }\n\n  readMyData(fd);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The \"not recommended\" examples above check for accessibility and then use the\nfile; the \"recommended\" examples are better because they use the file directly\nand handle the error, if any.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In general, check for the accessibility of a file only if the file will not be\nused directly, for example when its accessibility is a signal from another\nprocess.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, access-control policies (ACLs) on a directory may limit access to\na file or directory. The fs.access() function, however, does not check the\nACL and therefore may report that a path is accessible even if the ACL restricts\nthe user from reading or writing to it.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`fs.accessSync(path[, mode])`", @@ -28227,7 +29330,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Synchronously tests a user's permissions for the file or directory specified\nby path. The mode argument is an optional integer that specifies the\naccessibility checks to be performed. Check File Access Constants for\npossible values of mode. It is possible to create a mask consisting of\nthe bitwise OR of two or more values\n(e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If any of the accessibility checks fail, an Error will be thrown. Otherwise,\nthe method will return undefined.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      try {\n  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);\n  console.log('can read/write');\n} catch (err) {\n  console.error('no access!');\n}\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Synchronously tests a user's permissions for the file or directory specified\nby path. The mode argument is an optional integer that specifies the\naccessibility checks to be performed. Check File access constants for\npossible values of mode. It is possible to create a mask consisting of\nthe bitwise OR of two or more values\n(e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If any of the accessibility checks fail, an Error will be thrown. Otherwise,\nthe method will return undefined.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      try {\n  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);\n  console.log('can read/write');\n} catch (err) {\n  console.error('no access!');\n}\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`fs.appendFile(path, data[, options], callback)`", @@ -28659,7 +29762,13 @@ "added": [ "v8.5.0" ], - "changes": [] + "changes": [ + { + "version": "v14.0.0", + "pr-url": "https://github.com/nodejs/node/pull/27044", + "description": "Changed 'flags' argument to 'mode' and imposed stricter type validation." + } + ] }, "signatures": [ { @@ -28701,7 +29810,13 @@ "added": [ "v8.5.0" ], - "changes": [] + "changes": [ + { + "version": "v14.0.0", + "pr-url": "https://github.com/nodejs/node/pull/27044", + "description": "Changed 'flags' argument to 'mode' and imposed stricter type validation." + } + ] }, "signatures": [ { @@ -29756,6 +30871,10 @@ "version": "v7.0.0", "pr-url": "https://github.com/nodejs/node/pull/7897", "description": "The `callback` parameter is no longer optional. Not passing it will emit a deprecation warning with id DEP0013." + }, + { + "version": "v0.4.7", + "description": "Documentation-only deprecation." } ] }, @@ -29804,6 +30923,10 @@ "version": "v10.6.0", "pr-url": "https://github.com/nodejs/node/pull/21498", "description": "This API is no longer deprecated." + }, + { + "version": "v0.4.7", + "description": "Documentation-only deprecation." } ] }, @@ -29831,6 +30954,84 @@ "desc": "

                                                                                                                                                                                                                                                      Synchronous lchown(2). Returns undefined.

                                                                                                                                                                                                                                                      " }, { + "textRaw": "`fs.lutimes(path, atime, mtime, callback)`", + "type": "method", + "name": "lutimes", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`path` {string|Buffer|URL}", + "name": "path", + "type": "string|Buffer|URL" + }, + { + "textRaw": "`atime` {number|string|Date}", + "name": "atime", + "type": "number|string|Date" + }, + { + "textRaw": "`mtime` {number|string|Date}", + "name": "mtime", + "type": "number|string|Date" + }, + { + "textRaw": "`callback` {Function}", + "name": "callback", + "type": "Function", + "options": [ + { + "textRaw": "`err` {Error}", + "name": "err", + "type": "Error" + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Changes the access and modification times of a file in the same way as\nfs.utimes(), with the difference that if the path refers to a symbolic\nlink, then the link is not dereferenced: instead, the timestamps of the\nsymbolic link itself are changed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      No arguments other than a possible exception are given to the completion\ncallback.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`fs.lutimesSync(path, atime, mtime)`", + "type": "method", + "name": "lutimesSync", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`path` {string|Buffer|URL}", + "name": "path", + "type": "string|Buffer|URL" + }, + { + "textRaw": "`atime` {number|string|Date}", + "name": "atime", + "type": "number|string|Date" + }, + { + "textRaw": "`mtime` {number|string|Date}", + "name": "mtime", + "type": "number|string|Date" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Change the file system timestamps of the symbolic link referenced by path.\nReturns undefined, or throws an exception when parameters are incorrect or\nthe operation fails. This is the synchronous version of fs.lutimes().

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`fs.link(existingPath, newPath, callback)`", "type": "method", "name": "link", @@ -30942,11 +32143,11 @@ "desc": "

                                                                                                                                                                                                                                                      Asynchronously reads the entire contents of a file.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.readFile('/etc/passwd', (err, data) => {\n  if (err) throw err;\n  console.log(data);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback is passed two arguments (err, data), where data is the\ncontents of the file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If no encoding is specified, then the raw buffer is returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If options is a string, then it specifies the encoding:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.readFile('/etc/passwd', 'utf8', callback);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the path is a directory, the behavior of fs.readFile() and\nfs.readFileSync() is platform-specific. On macOS, Linux, and Windows, an\nerror will be returned. On FreeBSD, a representation of the directory's contents\nwill be returned.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // macOS, Linux, and Windows\nfs.readFile('<directory>', (err, data) => {\n  // => [Error: EISDIR: illegal operation on a directory, read <directory>]\n});\n\n//  FreeBSD\nfs.readFile('<directory>', (err, data) => {\n  // => null, <data>\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The fs.readFile() function buffers the entire file. To minimize memory costs,\nwhen possible prefer streaming via fs.createReadStream().

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "File Descriptors", + "textRaw": "File descriptors", "name": "file_descriptors", "desc": "
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Any specified file descriptor has to support reading.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If a file descriptor is specified as the path, it will not be closed\nautomatically.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. The reading will begin at the current position. For example, if the file\nalready had 'Hello World' and six bytes are read with the file descriptor,\nthe call to fs.readFile() with the same file descriptor, would give\n'World', rather than 'Hello World'.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "File Descriptors" + "displayName": "File descriptors" } ] }, @@ -31302,7 +32503,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Read from a file specified by fd and write to an array of ArrayBufferViews\nusing readv().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      position is the offset from the beginning of the file from where data\nshould be read. If typeof position !== 'number', the data will be read\nfrom the current position.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback will be given three arguments: err, bytesRead, and\nbuffers. bytesRead is how many bytes were read from the file.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Read from a file specified by fd and write to an array of ArrayBufferViews\nusing readv().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      position is the offset from the beginning of the file from where data\nshould be read. If typeof position !== 'number', the data will be read\nfrom the current position.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback will be given three arguments: err, bytesRead, and\nbuffers. bytesRead is how many bytes were read from the file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this method is invoked as its util.promisify()ed version, it returns\na Promise for an Object with bytesRead and buffers properties.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`fs.readvSync(fd, buffers[, position])`", @@ -31906,7 +33107,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Asynchronous stat(2). The callback gets two arguments (err, stats) where\nstats is an fs.Stats object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In case of an error, the err.code will be one of Common System Errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using fs.stat() to check for the existence of a file before calling\nfs.open(), fs.readFile() or fs.writeFile() is not recommended.\nInstead, user code should open/read/write the file directly and handle the\nerror raised if the file is not available.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To check if a file exists without manipulating it afterwards, fs.access()\nis recommended.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, given the following directory structure:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      - txtDir\n-- file.txt\n- app.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The next program will check for the stats of the given paths:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nconst pathsToCheck = ['./txtDir', './txtDir/file.txt'];\n\nfor (let i = 0; i < pathsToCheck.length; i++) {\n  fs.stat(pathsToCheck[i], function(err, stats) {\n    console.log(stats.isDirectory());\n    console.log(stats);\n  });\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resulting output will resemble:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      true\nStats {\n  dev: 16777220,\n  mode: 16877,\n  nlink: 3,\n  uid: 501,\n  gid: 20,\n  rdev: 0,\n  blksize: 4096,\n  ino: 14214262,\n  size: 96,\n  blocks: 0,\n  atimeMs: 1561174653071.963,\n  mtimeMs: 1561174614583.3518,\n  ctimeMs: 1561174626623.5366,\n  birthtimeMs: 1561174126937.2893,\n  atime: 2019-06-22T03:37:33.072Z,\n  mtime: 2019-06-22T03:36:54.583Z,\n  ctime: 2019-06-22T03:37:06.624Z,\n  birthtime: 2019-06-22T03:28:46.937Z\n}\nfalse\nStats {\n  dev: 16777220,\n  mode: 33188,\n  nlink: 1,\n  uid: 501,\n  gid: 20,\n  rdev: 0,\n  blksize: 4096,\n  ino: 14214074,\n  size: 8,\n  blocks: 8,\n  atimeMs: 1561174616618.8555,\n  mtimeMs: 1561174614584,\n  ctimeMs: 1561174614583.8145,\n  birthtimeMs: 1561174007710.7478,\n  atime: 2019-06-22T03:36:56.619Z,\n  mtime: 2019-06-22T03:36:54.584Z,\n  ctime: 2019-06-22T03:36:54.584Z,\n  birthtime: 2019-06-22T03:26:47.711Z\n}\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Asynchronous stat(2). The callback gets two arguments (err, stats) where\nstats is an fs.Stats object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In case of an error, the err.code will be one of Common System Errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using fs.stat() to check for the existence of a file before calling\nfs.open(), fs.readFile() or fs.writeFile() is not recommended.\nInstead, user code should open/read/write the file directly and handle the\nerror raised if the file is not available.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To check if a file exists without manipulating it afterwards, fs.access()\nis recommended.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, given the following directory structure:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      - txtDir\n-- file.txt\n- app.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The next program will check for the stats of the given paths:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\n\nconst pathsToCheck = ['./txtDir', './txtDir/file.txt'];\n\nfor (let i = 0; i < pathsToCheck.length; i++) {\n  fs.stat(pathsToCheck[i], function(err, stats) {\n    console.log(stats.isDirectory());\n    console.log(stats);\n  });\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resulting output will resemble:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      true\nStats {\n  dev: 16777220,\n  mode: 16877,\n  nlink: 3,\n  uid: 501,\n  gid: 20,\n  rdev: 0,\n  blksize: 4096,\n  ino: 14214262,\n  size: 96,\n  blocks: 0,\n  atimeMs: 1561174653071.963,\n  mtimeMs: 1561174614583.3518,\n  ctimeMs: 1561174626623.5366,\n  birthtimeMs: 1561174126937.2893,\n  atime: 2019-06-22T03:37:33.072Z,\n  mtime: 2019-06-22T03:36:54.583Z,\n  ctime: 2019-06-22T03:37:06.624Z,\n  birthtime: 2019-06-22T03:28:46.937Z\n}\nfalse\nStats {\n  dev: 16777220,\n  mode: 33188,\n  nlink: 1,\n  uid: 501,\n  gid: 20,\n  rdev: 0,\n  blksize: 4096,\n  ino: 14214074,\n  size: 8,\n  blocks: 8,\n  atimeMs: 1561174616618.8555,\n  mtimeMs: 1561174614584,\n  ctimeMs: 1561174614583.8145,\n  birthtimeMs: 1561174007710.7478,\n  atime: 2019-06-22T03:36:56.619Z,\n  mtime: 2019-06-22T03:36:54.584Z,\n  ctime: 2019-06-22T03:36:54.584Z,\n  birthtime: 2019-06-22T03:26:47.711Z\n}\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`fs.statSync(path[, options])`", @@ -32015,7 +33216,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Asynchronous symlink(2) which creates the link called path pointing to\ntarget. No arguments other than a possible exception are given to the\ncompletion callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The type argument is only available on Windows and ignored on other platforms.\nIt can be set to 'dir', 'file', or 'junction'. If the type argument is\nnot set, Node.js will autodetect target type and use 'file' or 'dir'. If\nthe target does not exist, 'file' will be used. Windows junction points\nrequire the destination path to be absolute. When using 'junction', the\ntarget argument will automatically be normalized to absolute path.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Relative targets are relative to the link’s parent directory.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.symlink('./mew', './example/mewtwo', callback);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The above example creates a symbolic link mewtwo in the example which points\nto mew in the same directory:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ tree example/\nexample/\n├── mew\n└── mewtwo -> ./mew\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Asynchronous symlink(2) which creates the link called path pointing to\ntarget. No arguments other than a possible exception are given to the\ncompletion callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The type argument is only available on Windows and ignored on other platforms.\nIt can be set to 'dir', 'file', or 'junction'. If the type argument is\nnot set, Node.js will autodetect target type and use 'file' or 'dir'. If\nthe target does not exist, 'file' will be used. Windows junction points\nrequire the destination path to be absolute. When using 'junction', the\ntarget argument will automatically be normalized to absolute path.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Relative targets are relative to the link’s parent directory.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.symlink('./mew', './example/mewtwo', callback);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The above example creates a symbolic link mewtwo in the example which points\nto mew in the same directory:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ tree example/\nexample/\n├── mew\n└── mewtwo -> ./mew\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`fs.symlinkSync(target, path[, type])`", @@ -32466,7 +33667,7 @@ "textRaw": "Availability", "name": "Availability", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      This feature depends on the underlying operating system providing a way\nto be notified of filesystem changes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • On Linux systems, this uses inotify(7).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On BSD systems, this uses kqueue(2).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On macOS, this uses kqueue(2) for files and FSEvents for\ndirectories.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On SunOS systems (including Solaris and SmartOS), this uses event ports.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On Windows systems, this feature depends on ReadDirectoryChangesW.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On Aix systems, this feature depends on AHAFS, which must be enabled.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the underlying functionality is not available for some reason, then\nfs.watch() will not be able to function and may thrown an exception.\nFor example, watching files or directories can be unreliable, and in some\ncases impossible, on network file systems (NFS, SMB, etc) or host file systems\nwhen using virtualization software such as Vagrant or Docker.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is still possible to use fs.watchFile(), which uses stat polling, but\nthis method is slower and less reliable.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      This feature depends on the underlying operating system providing a way\nto be notified of filesystem changes.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • On Linux systems, this uses inotify(7).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On BSD systems, this uses kqueue(2).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On macOS, this uses kqueue(2) for files and FSEvents for\ndirectories.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On SunOS systems (including Solaris and SmartOS), this uses event ports.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On Windows systems, this feature depends on ReadDirectoryChangesW.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On Aix systems, this feature depends on AHAFS, which must be enabled.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • On IBM i systems, this feature is not supported.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the underlying functionality is not available for some reason, then\nfs.watch() will not be able to function and may thrown an exception.\nFor example, watching files or directories can be unreliable, and in some\ncases impossible, on network file systems (NFS, SMB, etc) or host file systems\nwhen using virtualization software such as Vagrant or Docker.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is still possible to use fs.watchFile(), which uses stat polling, but\nthis method is slower and less reliable.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Inodes", @@ -32475,8 +33676,8 @@ "desc": "

                                                                                                                                                                                                                                                      On Linux and macOS systems, fs.watch() resolves the path to an inode and\nwatches the inode. If the watched path is deleted and recreated, it is assigned\na new inode. The watch will emit an event for the delete but will continue\nwatching the original inode. Events for the new inode will not be emitted.\nThis is expected behavior.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      AIX files retain the same inode for the lifetime of a file. Saving and closing a\nwatched file on AIX will result in two notifications (one for adding new\ncontent, and one for truncation).

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Filename Argument", - "name": "Filename Argument", + "textRaw": "Filename argument", + "name": "Filename argument", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Providing filename argument in the callback is only supported on Linux,\nmacOS, Windows, and AIX. Even on supported platforms, filename is not always\nguaranteed to be provided. Therefore, don't assume that filename argument is\nalways provided in the callback, and have some fallback logic if it is null.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.watch('somedir', (eventType, filename) => {\n  console.log(`event type is: ${eventType}`);\n  if (filename) {\n    console.log(`filename provided: ${filename}`);\n  } else {\n    console.log('filename not provided');\n  }\n});\n
                                                                                                                                                                                                                                                      " } @@ -32507,6 +33708,11 @@ }, "signatures": [ { + "return": { + "textRaw": "Returns: {fs.StatWatcher}", + "name": "return", + "type": "fs.StatWatcher" + }, "params": [ { "textRaw": "`filename` {string|Buffer|URL}", @@ -32558,7 +33764,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Watch for changes on filename. The callback listener will be called each\ntime the file is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The options argument may be omitted. If provided, it should be an object. The\noptions object may contain a boolean named persistent that indicates\nwhether the process should continue to run as long as files are being watched.\nThe options object may specify an interval property indicating how often the\ntarget should be polled in milliseconds.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The listener gets two arguments the current stat object and the previous\nstat object:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.watchFile('message.text', (curr, prev) => {\n  console.log(`the current mtime is: ${curr.mtime}`);\n  console.log(`the previous mtime was: ${prev.mtime}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These stat objects are instances of fs.Stat. If the bigint option is true,\nthe numeric values in these objects are specified as BigInts.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To be notified when the file was modified, not just accessed, it is necessary\nto compare curr.mtime and prev.mtime.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When an fs.watchFile operation results in an ENOENT error, it\nwill invoke the listener once, with all the fields zeroed (or, for dates, the\nUnix Epoch). If the file is created later on, the listener will be called\nagain, with the latest stat objects. This is a change in functionality since\nv0.10.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using fs.watch() is more efficient than fs.watchFile and\nfs.unwatchFile. fs.watch should be used instead of fs.watchFile and\nfs.unwatchFile when possible.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a file being watched by fs.watchFile() disappears and reappears,\nthen the previousStat reported in the second callback event (the file's\nreappearance) will be the same as the previousStat of the first callback\nevent (its disappearance).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This happens when:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the file is deleted, followed by a restore
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the file is renamed and then renamed a second time back to its original name
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Watch for changes on filename. The callback listener will be called each\ntime the file is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The options argument may be omitted. If provided, it should be an object. The\noptions object may contain a boolean named persistent that indicates\nwhether the process should continue to run as long as files are being watched.\nThe options object may specify an interval property indicating how often the\ntarget should be polled in milliseconds.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The listener gets two arguments the current stat object and the previous\nstat object:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.watchFile('message.text', (curr, prev) => {\n  console.log(`the current mtime is: ${curr.mtime}`);\n  console.log(`the previous mtime was: ${prev.mtime}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These stat objects are instances of fs.Stat. If the bigint option is true,\nthe numeric values in these objects are specified as BigInts.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To be notified when the file was modified, not just accessed, it is necessary\nto compare curr.mtime and prev.mtime.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When an fs.watchFile operation results in an ENOENT error, it\nwill invoke the listener once, with all the fields zeroed (or, for dates, the\nUnix Epoch). If the file is created later on, the listener will be called\nagain, with the latest stat objects. This is a change in functionality since\nv0.10.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using fs.watch() is more efficient than fs.watchFile and\nfs.unwatchFile. fs.watch should be used instead of fs.watchFile and\nfs.unwatchFile when possible.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a file being watched by fs.watchFile() disappears and reappears,\nthen the contents of previous in the second callback event (the file's\nreappearance) will be the same as the contents of previous in the first\ncallback event (its disappearance).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This happens when:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • the file is deleted, followed by a restore
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • the file is renamed and then renamed a second time back to its original name
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`fs.write(fd, buffer[, offset[, length[, position]]], callback)`", @@ -32726,7 +33932,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Write string to the file specified by fd. If string is not a string, then\nthe value will be coerced to one.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      position refers to the offset from the beginning of the file where this data\nshould be written. If typeof position !== 'number' the data will be written at\nthe current position. See pwrite(2).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      encoding is the expected string encoding.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback will receive the arguments (err, written, string) where written\nspecifies how many bytes the passed string required to be written. Bytes\nwritten is not necessarily the same as string characters written. See\nBuffer.byteLength.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is unsafe to use fs.write() multiple times on the same file without waiting\nfor the callback. For this scenario, fs.createWriteStream() is\nrecommended.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Linux, positional writes don't work when the file is opened in append mode.\nThe kernel ignores the position argument and always appends the data to\nthe end of the file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, if the file descriptor is connected to the console (e.g. fd == 1\nor stdout) a string containing non-ASCII characters will not be rendered\nproperly by default, regardless of the encoding used.\nIt is possible to configure the console to render UTF-8 properly by changing the\nactive codepage with the chcp 65001 command. See the chcp docs for more\ndetails.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Write string to the file specified by fd. If string is not a string, then\nthe value will be coerced to one.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      position refers to the offset from the beginning of the file where this data\nshould be written. If typeof position !== 'number' the data will be written at\nthe current position. See pwrite(2).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      encoding is the expected string encoding.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback will receive the arguments (err, written, string) where written\nspecifies how many bytes the passed string required to be written. Bytes\nwritten is not necessarily the same as string characters written. See\nBuffer.byteLength.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is unsafe to use fs.write() multiple times on the same file without waiting\nfor the callback. For this scenario, fs.createWriteStream() is\nrecommended.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Linux, positional writes don't work when the file is opened in append mode.\nThe kernel ignores the position argument and always appends the data to\nthe end of the file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, if the file descriptor is connected to the console (e.g. fd == 1\nor stdout) a string containing non-ASCII characters will not be rendered\nproperly by default, regardless of the encoding used.\nIt is possible to configure the console to render UTF-8 properly by changing the\nactive codepage with the chcp 65001 command. See the chcp docs for more\ndetails.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`fs.writeFile(file, data[, options], callback)`", @@ -32822,11 +34028,11 @@ "desc": "

                                                                                                                                                                                                                                                      When file is a filename, asynchronously writes data to the file, replacing the\nfile if it already exists. data can be a string or a buffer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When file is a file descriptor, the behavior is similar to calling\nfs.write() directly (which is recommended). See the notes below on using\na file descriptor.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The encoding option is ignored if data is a buffer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const data = new Uint8Array(Buffer.from('Hello Node.js'));\nfs.writeFile('message.txt', data, (err) => {\n  if (err) throw err;\n  console.log('The file has been saved!');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If options is a string, then it specifies the encoding:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is unsafe to use fs.writeFile() multiple times on the same file without\nwaiting for the callback. For this scenario, fs.createWriteStream() is\nrecommended.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Using `fs.writeFile()` with File Descriptors", + "textRaw": "Using `fs.writeFile()` with file descriptors", "name": "using_`fs.writefile()`_with_file_descriptors", - "desc": "

                                                                                                                                                                                                                                                      When file is a file descriptor, the behavior is almost identical to directly\ncalling fs.write() like:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.write(fd, Buffer.from(data, options.encoding), callback);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The difference from directly calling fs.write() is that under some unusual\nconditions, fs.write() may write only part of the buffer and will need to be\nretried to write the remaining data, whereas fs.writeFile() will retry until\nthe data is entirely written (or an error occurs).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The implications of this are a common source of confusion. In\nthe file descriptor case, the file is not replaced! The data is not necessarily\nwritten to the beginning of the file, and the file's original data may remain\nbefore and/or after the newly written data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, if fs.writeFile() is called twice in a row, first to write the\nstring 'Hello', then to write the string ', World', the file would contain\n'Hello, World', and might contain some of the file's original data (depending\non the size of the original file, and the position of the file descriptor). If\na file name had been used instead of a descriptor, the file would be guaranteed\nto contain only ', World'.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      When file is a file descriptor, the behavior is almost identical to directly\ncalling fs.write() like:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      fs.write(fd, Buffer.from(data, options.encoding), callback);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The difference from directly calling fs.write() is that under some unusual\nconditions, fs.write() may write only part of the buffer and will need to be\nretried to write the remaining data, whereas fs.writeFile() will retry until\nthe data is entirely written (or an error occurs).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The implications of this are a common source of confusion. In\nthe file descriptor case, the file is not replaced! The data is not necessarily\nwritten to the beginning of the file, and the file's original data may remain\nbefore and/or after the newly written data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, if fs.writeFile() is called twice in a row, first to write the\nstring 'Hello', then to write the string ', World', the file would contain\n'Hello, World', and might contain some of the file's original data (depending\non the size of the original file, and the position of the file descriptor). If\na file name had been used instead of a descriptor, the file would be guaranteed\nto contain only ', World'.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Using `fs.writeFile()` with File Descriptors" + "displayName": "Using `fs.writeFile()` with file descriptors" } ] }, @@ -33116,7 +34322,7 @@ "textRaw": "`constants` {Object}", "type": "Object", "name": "constants", - "desc": "

                                                                                                                                                                                                                                                      Returns an object containing commonly used constants for file system\noperations. The specific constants currently defined are described in\nFS Constants.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns an object containing commonly used constants for file system\noperations. The specific constants currently defined are described in\nFS constants.

                                                                                                                                                                                                                                                      " } ], "type": "module", @@ -33128,7 +34334,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      To use the HTTP server and client one must require('http').

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The HTTP interfaces in Node.js are designed to support many features\nof the protocol which have been traditionally difficult to use.\nIn particular, large, possibly chunk-encoded, messages. The interface is\ncareful to never buffer entire requests or responses, so the\nuser is able to stream data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      HTTP message headers are represented by an object like this:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      { 'content-length': '123',\n  'content-type': 'text/plain',\n  'connection': 'keep-alive',\n  'host': 'mysite.com',\n  'accept': '*/*' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Keys are lowercased. Values are not modified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to support the full spectrum of possible HTTP applications, the Node.js\nHTTP API is very low-level. It deals with stream handling and message\nparsing only. It parses a message into headers and body but it does not\nparse the actual headers or the body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See message.headers for details on how duplicate headers are handled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The raw headers as they were received are retained in the rawHeaders\nproperty, which is an array of [key, value, key2, value2, ...]. For\nexample, the previous message header object might have a rawHeaders\nlist like the following:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      [ 'ConTent-Length', '123456',\n  'content-LENGTH', '123',\n  'content-type', 'text/plain',\n  'CONNECTION', 'keep-alive',\n  'Host', 'mysite.com',\n  'accepT', '*/*' ]\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/http.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To use the HTTP server and client one must require('http').

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The HTTP interfaces in Node.js are designed to support many features\nof the protocol which have been traditionally difficult to use.\nIn particular, large, possibly chunk-encoded, messages. The interface is\ncareful to never buffer entire requests or responses, so the\nuser is able to stream data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      HTTP message headers are represented by an object like this:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      { 'content-length': '123',\n  'content-type': 'text/plain',\n  'connection': 'keep-alive',\n  'host': 'mysite.com',\n  'accept': '*/*' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Keys are lowercased. Values are not modified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to support the full spectrum of possible HTTP applications, the Node.js\nHTTP API is very low-level. It deals with stream handling and message\nparsing only. It parses a message into headers and body but it does not\nparse the actual headers or the body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See message.headers for details on how duplicate headers are handled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The raw headers as they were received are retained in the rawHeaders\nproperty, which is an array of [key, value, key2, value2, ...]. For\nexample, the previous message header object might have a rawHeaders\nlist like the following:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      [ 'ConTent-Length', '123456',\n  'content-LENGTH', '123',\n  'content-type', 'text/plain',\n  'CONNECTION', 'keep-alive',\n  'Host', 'mysite.com',\n  'accepT', '*/*' ]\n
                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `http.Agent`", @@ -33339,6 +34545,18 @@ "desc": "

                                                                                                                                                                                                                                                      By default set to Infinity. Determines how many concurrent sockets the agent\ncan have open per origin. Origin is the returned value of agent.getName().

                                                                                                                                                                                                                                                      " }, { + "textRaw": "`maxTotalSockets` {number}", + "type": "number", + "name": "maxTotalSockets", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      By default set to Infinity. Determines how many concurrent sockets the agent\ncan have open. Unlike maxSockets, this parameter applies across all origins.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`requests` {Object}", "type": "Object", "name": "requests", @@ -33394,6 +34612,13 @@ "desc": "Maximum number of sockets to allow per host. Each request will use a new socket until the maximum is reached." }, { + "textRaw": "`maxTotalSockets` {number} Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached. **Default:** `Infinity`.", + "name": "maxTotalSockets", + "type": "number", + "default": "`Infinity`", + "desc": "Maximum number of sockets allowed for all hosts in total. Each request will use a new socket until the maximum is reached." + }, + { "textRaw": "`maxFreeSockets` {number} Maximum number of sockets to leave open in a free state. Only relevant if `keepAlive` is set to `true`. **Default:** `256`.", "name": "maxFreeSockets", "type": "number", @@ -33401,6 +34626,13 @@ "desc": "Maximum number of sockets to leave open in a free state. Only relevant if `keepAlive` is set to `true`." }, { + "textRaw": "`scheduling` {string} Scheduling strategy to apply when picking the next free socket to use. It can be `'fifo'` or `'lifo'`. The main difference between the two scheduling strategies is that `'lifo'` selects the most recently used socket, while `'fifo'` selects the least recently used socket. In case of a low rate of request per second, the `'lifo'` scheduling will lower the risk of picking a socket that might have been closed by the server due to inactivity. In case of a high rate of request per second, the `'fifo'` scheduling will maximize the number of open sockets, while the `'lifo'` scheduling will keep it as low as possible. **Default:** `'fifo'`.", + "name": "scheduling", + "type": "string", + "default": "`'fifo'`", + "desc": "Scheduling strategy to apply when picking the next free socket to use. It can be `'fifo'` or `'lifo'`. The main difference between the two scheduling strategies is that `'lifo'` selects the most recently used socket, while `'fifo'` selects the least recently used socket. In case of a low rate of request per second, the `'lifo'` scheduling will lower the risk of picking a socket that might have been closed by the server due to inactivity. In case of a high rate of request per second, the `'fifo'` scheduling will maximize the number of open sockets, while the `'lifo'` scheduling will keep it as low as possible." + }, + { "textRaw": "`timeout` {number} Socket timeout in milliseconds. This will set the timeout when the socket is created.", "name": "timeout", "type": "number", @@ -33974,6 +35206,42 @@ "desc": "The request path." }, { + "textRaw": "`method` {string} The request method.", + "type": "string", + "name": "method", + "meta": { + "added": [ + "v0.1.97" + ], + "changes": [] + }, + "desc": "The request method." + }, + { + "textRaw": "`host` {string} The request host.", + "type": "string", + "name": "host", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "The request host." + }, + { + "textRaw": "`protocol` {string} The request protocol.", + "type": "string", + "name": "protocol", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "The request protocol." + }, + { "textRaw": "`reusedSocket` {boolean} Whether the request is send through a reused socket.", "type": "boolean", "name": "reusedSocket", @@ -34122,7 +35390,7 @@ "type": "stream.Duplex" } ], - "desc": "

                                                                                                                                                                                                                                                      If a client connection emits an 'error' event, it will be forwarded here.\nListener of this event is responsible for closing/destroying the underlying\nsocket. For example, one may wish to more gracefully close the socket with a\ncustom HTTP response instead of abruptly severing the connection.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This event is guaranteed to be passed an instance of the <net.Socket> class,\na subclass of <stream.Duplex>, unless the user specifies a socket\ntype other than <net.Socket>.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Default behavior is to try close the socket with a HTTP '400 Bad Request',\nor a HTTP '431 Request Header Fields Too Large' in the case of a\nHPE_HEADER_OVERFLOW error. If the socket is not writable it is\nimmediately destroyed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      socket is the net.Socket object that the error originated from.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http = require('http');\n\nconst server = http.createServer((req, res) => {\n  res.end();\n});\nserver.on('clientError', (err, socket) => {\n  socket.end('HTTP/1.1 400 Bad Request\\r\\n\\r\\n');\n});\nserver.listen(8000);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the 'clientError' event occurs, there is no request or response\nobject, so any HTTP response sent, including response headers and payload,\nmust be written directly to the socket object. Care must be taken to\nensure the response is a properly formatted HTTP response message.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      err is an instance of Error with two extra columns:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • bytesParsed: the bytes count of request packet that Node.js may have parsed\ncorrectly;
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • rawPacket: the raw packet of current request.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In some cases, the client has already received the response and/or the socket\nhas already been destroyed, like in case of ECONNRESET errors. Before\ntrying to send data to the socket, it is better to check that it is still\nwritable.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      server.on('clientError', (err, socket) => {\n  if (err.code === 'ECONNRESET' || !socket.writable) {\n    return;\n  }\n\n  socket.end('HTTP/1.1 400 Bad Request\\r\\n\\r\\n');\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      If a client connection emits an 'error' event, it will be forwarded here.\nListener of this event is responsible for closing/destroying the underlying\nsocket. For example, one may wish to more gracefully close the socket with a\ncustom HTTP response instead of abruptly severing the connection.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This event is guaranteed to be passed an instance of the <net.Socket> class,\na subclass of <stream.Duplex>, unless the user specifies a socket\ntype other than <net.Socket>.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Default behavior is to try close the socket with a HTTP '400 Bad Request',\nor a HTTP '431 Request Header Fields Too Large' in the case of a\nHPE_HEADER_OVERFLOW error. If the socket is not writable or has already\nwritten data it is immediately destroyed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      socket is the net.Socket object that the error originated from.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http = require('http');\n\nconst server = http.createServer((req, res) => {\n  res.end();\n});\nserver.on('clientError', (err, socket) => {\n  socket.end('HTTP/1.1 400 Bad Request\\r\\n\\r\\n');\n});\nserver.listen(8000);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the 'clientError' event occurs, there is no request or response\nobject, so any HTTP response sent, including response headers and payload,\nmust be written directly to the socket object. Care must be taken to\nensure the response is a properly formatted HTTP response message.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      err is an instance of Error with two extra columns:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • bytesParsed: the bytes count of request packet that Node.js may have parsed\ncorrectly;
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • rawPacket: the raw packet of current request.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In some cases, the client has already received the response and/or the socket\nhas already been destroyed, like in case of ECONNRESET errors. Before\ntrying to send data to the socket, it is better to check that it is still\nwritable.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      server.on('clientError', (err, socket) => {\n  if (err.code === 'ECONNRESET' || !socket.writable) {\n    return;\n  }\n\n  socket.end('HTTP/1.1 400 Bad Request\\r\\n\\r\\n');\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'close'`", @@ -34413,7 +35681,7 @@ "changes": [] }, "params": [], - "desc": "

                                                                                                                                                                                                                                                      Indicates that the underlying connection was terminated.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Indicates that the the response is completed, or its underlying connection was\nterminated prematurely (before the response completion).

                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'finish'`", @@ -34835,7 +36103,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sends a response header to the request. The status code is a 3-digit HTTP\nstatus code, like 404. The last argument, headers, are the response headers.\nOptionally one can give a human-readable statusMessage as the second\nargument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns a reference to the ServerResponse, so that calls can be chained.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const body = 'hello world';\nresponse\n  .writeHead(200, {\n    'Content-Length': Buffer.byteLength(body),\n    'Content-Type': 'text/plain'\n  })\n  .end(body);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method must only be called once on a message and it must\nbe called before response.end() is called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If response.write() or response.end() are called before calling\nthis, the implicit/mutable headers will be calculated and call this function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When headers have been set with response.setHeader(), they will be merged\nwith any headers passed to response.writeHead(), with the headers passed\nto response.writeHead() given precedence.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this method is called and response.setHeader() has not been called,\nit will directly write the supplied header values onto the network channel\nwithout caching internally, and the response.getHeader() on the header\nwill not yield the expected result. If progressive population of headers is\ndesired with potential future retrieval and modification, use\nresponse.setHeader() instead.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Returns content-type = text/plain\nconst server = http.createServer((req, res) => {\n  res.setHeader('Content-Type', 'text/html');\n  res.setHeader('X-Foo', 'bar');\n  res.writeHead(200, { 'Content-Type': 'text/plain' });\n  res.end('ok');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Content-Length is given in bytes, not characters. Use\nBuffer.byteLength() to determine the length of the body in bytes. Node.js\ndoes not check whether Content-Length and the length of the body which has\nbeen transmitted are equal or not.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Attempting to set a header field name or value that contains invalid characters\nwill result in a TypeError being thrown.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sends a response header to the request. The status code is a 3-digit HTTP\nstatus code, like 404. The last argument, headers, are the response headers.\nOptionally one can give a human-readable statusMessage as the second\nargument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns a reference to the ServerResponse, so that calls can be chained.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const body = 'hello world';\nresponse\n  .writeHead(200, {\n    'Content-Length': Buffer.byteLength(body),\n    'Content-Type': 'text/plain'\n  })\n  .end(body);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method must only be called once on a message and it must\nbe called before response.end() is called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If response.write() or response.end() are called before calling\nthis, the implicit/mutable headers will be calculated and call this function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When headers have been set with response.setHeader(), they will be merged\nwith any headers passed to response.writeHead(), with the headers passed\nto response.writeHead() given precedence.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this method is called and response.setHeader() has not been called,\nit will directly write the supplied header values onto the network channel\nwithout caching internally, and the response.getHeader() on the header\nwill not yield the expected result. If progressive population of headers is\ndesired with potential future retrieval and modification, use\nresponse.setHeader() instead.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Returns content-type = text/plain\nconst server = http.createServer((req, res) => {\n  res.setHeader('Content-Type', 'text/html');\n  res.setHeader('X-Foo', 'bar');\n  res.writeHead(200, { 'Content-Type': 'text/plain' });\n  res.end('ok');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Content-Length is given in bytes, not characters. Use\nBuffer.byteLength() to determine the length of the body in bytes. Node.js\ndoes not check whether Content-Length and the length of the body which has\nbeen transmitted are equal or not.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Attempting to set a header field name or value that contains invalid characters\nwill result in a TypeError being thrown.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`response.writeProcessing()`", @@ -35160,7 +36428,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Only valid for request obtained from http.Server.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Request URL string. This contains only the URL that is\npresent in the actual HTTP request. If the request is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      GET /status?name=ryan HTTP/1.1\\r\\n\nAccept: text/plain\\r\\n\n\\r\\n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To parse the URL into its parts:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      new URL(request.url, `http://${request.headers.host}`);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When request.url is '/status?name=ryan' and\nrequest.headers.host is 'localhost:3000':

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> new URL(request.url, `http://${request.headers.host}`)\nURL {\n  href: 'http://localhost:3000/status?name=ryan',\n  origin: 'http://localhost:3000',\n  protocol: 'http:',\n  username: '',\n  password: '',\n  host: 'localhost:3000',\n  hostname: 'localhost',\n  port: '3000',\n  pathname: '/status',\n  search: '?name=ryan',\n  searchParams: URLSearchParams { 'name' => 'ryan' },\n  hash: ''\n}\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Only valid for request obtained from http.Server.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Request URL string. This contains only the URL that is present in the actual\nHTTP request. Take the following request:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      GET /status?name=ryan HTTP/1.1\nAccept: text/plain\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To parse the URL into its parts:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      new URL(request.url, `http://${request.headers.host}`);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When request.url is '/status?name=ryan' and\nrequest.headers.host is 'localhost:3000':

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> new URL(request.url, `http://${request.headers.host}`)\nURL {\n  href: 'http://localhost:3000/status?name=ryan',\n  origin: 'http://localhost:3000',\n  protocol: 'http:',\n  username: '',\n  password: '',\n  host: 'localhost:3000',\n  hostname: 'localhost',\n  port: '3000',\n  pathname: '/status',\n  search: '?name=ryan',\n  searchParams: URLSearchParams { 'name' => 'ryan' },\n  hash: ''\n}\n
                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -35172,10 +36440,21 @@ "added": [ "v0.3.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/32789", + "description": "The function returns `this` for consistency with other Readable streams." + } + ] }, "signatures": [ { + "return": { + "textRaw": "Returns: {this}", + "name": "return", + "type": "this" + }, "params": [ { "textRaw": "`error` {Error}", @@ -35389,7 +36668,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Since most requests are GET requests without bodies, Node.js provides this\nconvenience method. The only difference between this method and\nhttp.request() is that it sets the method to GET and calls req.end()\nautomatically. The callback must take care to consume the response\ndata for reasons stated in http.ClientRequest section.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback is invoked with a single argument that is an instance of\nhttp.IncomingMessage.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JSON fetching example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      http.get('http://nodejs.org/dist/index.json', (res) => {\n  const { statusCode } = res;\n  const contentType = res.headers['content-type'];\n\n  let error;\n  if (statusCode !== 200) {\n    error = new Error('Request Failed.\\n' +\n                      `Status Code: ${statusCode}`);\n  } else if (!/^application\\/json/.test(contentType)) {\n    error = new Error('Invalid content-type.\\n' +\n                      `Expected application/json but received ${contentType}`);\n  }\n  if (error) {\n    console.error(error.message);\n    // Consume response data to free up memory\n    res.resume();\n    return;\n  }\n\n  res.setEncoding('utf8');\n  let rawData = '';\n  res.on('data', (chunk) => { rawData += chunk; });\n  res.on('end', () => {\n    try {\n      const parsedData = JSON.parse(rawData);\n      console.log(parsedData);\n    } catch (e) {\n      console.error(e.message);\n    }\n  });\n}).on('error', (e) => {\n  console.error(`Got error: ${e.message}`);\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Since most requests are GET requests without bodies, Node.js provides this\nconvenience method. The only difference between this method and\nhttp.request() is that it sets the method to GET and calls req.end()\nautomatically. The callback must take care to consume the response\ndata for reasons stated in http.ClientRequest section.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback is invoked with a single argument that is an instance of\nhttp.IncomingMessage.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JSON fetching example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      http.get('http://nodejs.org/dist/index.json', (res) => {\n  const { statusCode } = res;\n  const contentType = res.headers['content-type'];\n\n  let error;\n  // Any 2xx status code signals a successful response but\n  // here we're only checking for 200.\n  if (statusCode !== 200) {\n    error = new Error('Request Failed.\\n' +\n                      `Status Code: ${statusCode}`);\n  } else if (!/^application\\/json/.test(contentType)) {\n    error = new Error('Invalid content-type.\\n' +\n                      `Expected application/json but received ${contentType}`);\n  }\n  if (error) {\n    console.error(error.message);\n    // Consume response data to free up memory\n    res.resume();\n    return;\n  }\n\n  res.setEncoding('utf8');\n  let rawData = '';\n  res.on('data', (chunk) => { rawData += chunk; });\n  res.on('end', () => {\n    try {\n      const parsedData = JSON.parse(rawData);\n      console.log(parsedData);\n    } catch (e) {\n      console.error(e.message);\n    }\n  });\n}).on('error', (e) => {\n  console.error(`Got error: ${e.message}`);\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`http.get(url[, options][, callback])`", @@ -35439,7 +36718,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Since most requests are GET requests without bodies, Node.js provides this\nconvenience method. The only difference between this method and\nhttp.request() is that it sets the method to GET and calls req.end()\nautomatically. The callback must take care to consume the response\ndata for reasons stated in http.ClientRequest section.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback is invoked with a single argument that is an instance of\nhttp.IncomingMessage.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JSON fetching example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      http.get('http://nodejs.org/dist/index.json', (res) => {\n  const { statusCode } = res;\n  const contentType = res.headers['content-type'];\n\n  let error;\n  if (statusCode !== 200) {\n    error = new Error('Request Failed.\\n' +\n                      `Status Code: ${statusCode}`);\n  } else if (!/^application\\/json/.test(contentType)) {\n    error = new Error('Invalid content-type.\\n' +\n                      `Expected application/json but received ${contentType}`);\n  }\n  if (error) {\n    console.error(error.message);\n    // Consume response data to free up memory\n    res.resume();\n    return;\n  }\n\n  res.setEncoding('utf8');\n  let rawData = '';\n  res.on('data', (chunk) => { rawData += chunk; });\n  res.on('end', () => {\n    try {\n      const parsedData = JSON.parse(rawData);\n      console.log(parsedData);\n    } catch (e) {\n      console.error(e.message);\n    }\n  });\n}).on('error', (e) => {\n  console.error(`Got error: ${e.message}`);\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Since most requests are GET requests without bodies, Node.js provides this\nconvenience method. The only difference between this method and\nhttp.request() is that it sets the method to GET and calls req.end()\nautomatically. The callback must take care to consume the response\ndata for reasons stated in http.ClientRequest section.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback is invoked with a single argument that is an instance of\nhttp.IncomingMessage.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JSON fetching example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      http.get('http://nodejs.org/dist/index.json', (res) => {\n  const { statusCode } = res;\n  const contentType = res.headers['content-type'];\n\n  let error;\n  // Any 2xx status code signals a successful response but\n  // here we're only checking for 200.\n  if (statusCode !== 200) {\n    error = new Error('Request Failed.\\n' +\n                      `Status Code: ${statusCode}`);\n  } else if (!/^application\\/json/.test(contentType)) {\n    error = new Error('Invalid content-type.\\n' +\n                      `Expected application/json but received ${contentType}`);\n  }\n  if (error) {\n    console.error(error.message);\n    // Consume response data to free up memory\n    res.resume();\n    return;\n  }\n\n  res.setEncoding('utf8');\n  let rawData = '';\n  res.on('data', (chunk) => { rawData += chunk; });\n  res.on('end', () => {\n    try {\n      const parsedData = JSON.parse(rawData);\n      console.log(parsedData);\n    } catch (e) {\n      console.error(e.message);\n    }\n  });\n}).on('error', (e) => {\n  console.error(`Got error: ${e.message}`);\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`http.request(options[, callback])`", @@ -35628,7 +36907,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Node.js maintains several connections per server to make HTTP requests.\nThis function allows one to transparently issue requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      url can be a string or a URL object. If url is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both url and options are specified, the objects are merged, with the\noptions properties taking precedence.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional callback parameter will be added as a one-time listener for\nthe 'response' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      http.request() returns an instance of the http.ClientRequest\nclass. The ClientRequest instance is a writable stream. If one needs to\nupload a file with a POST request, then write to the ClientRequest object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const postData = querystring.stringify({\n  'msg': 'Hello World!'\n});\n\nconst options = {\n  hostname: 'www.google.com',\n  port: 80,\n  path: '/upload',\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/x-www-form-urlencoded',\n    'Content-Length': Buffer.byteLength(postData)\n  }\n};\n\nconst req = http.request(options, (res) => {\n  console.log(`STATUS: ${res.statusCode}`);\n  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);\n  res.setEncoding('utf8');\n  res.on('data', (chunk) => {\n    console.log(`BODY: ${chunk}`);\n  });\n  res.on('end', () => {\n    console.log('No more data in response.');\n  });\n});\n\nreq.on('error', (e) => {\n  console.error(`problem with request: ${e.message}`);\n});\n\n// Write data to request body\nreq.write(postData);\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the example req.end() was called. With http.request() one\nmust always call req.end() to signify the end of the request -\neven if there is no data being written to the request body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If any error is encountered during the request (be that with DNS resolution,\nTCP level errors, or actual HTTP parse errors) an 'error' event is emitted\non the returned request object. As with all 'error' events, if no listeners\nare registered the error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are a few special headers that should be noted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending a 'Connection: keep-alive' will notify Node.js that the connection to\nthe server should be persisted until the next request.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending a 'Content-Length' header will disable the default chunked encoding.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending an 'Expect' header will immediately send the request headers.\nUsually, when sending 'Expect: 100-continue', both a timeout and a listener\nfor the 'continue' event should be set. See RFC 2616 Section 8.2.3 for more\ninformation.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending an Authorization header will override using the auth option\nto compute basic authentication.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a URL as options:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = new URL('http://abc:xyz@example.com');\n\nconst req = http.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In a successful request, the following events will be emitted in the following\norder:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'response'

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'data' any number of times, on the res object\n('data' will not be emitted at all if the response body is empty, for\ninstance, in most redirects)
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • 'end' on the res object
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the case of a connection error, the following events will be emitted:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'error'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If req.abort() is called before the connection succeeds, the following events\nwill be emitted in the following order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • (req.abort() called here)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'abort'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'error' with an error with message 'Error: socket hang up' and code\n'ECONNRESET'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If req.abort() is called after the response is received, the following events\nwill be emitted in the following order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'response'

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'data' any number of times, on the res object
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • (req.abort() called here)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'abort'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'aborted' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'end' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Setting the timeout option or using the setTimeout() function will\nnot abort the request or do anything besides add a 'timeout' event.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Node.js maintains several connections per server to make HTTP requests.\nThis function allows one to transparently issue requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      url can be a string or a URL object. If url is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both url and options are specified, the objects are merged, with the\noptions properties taking precedence.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional callback parameter will be added as a one-time listener for\nthe 'response' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      http.request() returns an instance of the http.ClientRequest\nclass. The ClientRequest instance is a writable stream. If one needs to\nupload a file with a POST request, then write to the ClientRequest object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const postData = querystring.stringify({\n  'msg': 'Hello World!'\n});\n\nconst options = {\n  hostname: 'www.google.com',\n  port: 80,\n  path: '/upload',\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/x-www-form-urlencoded',\n    'Content-Length': Buffer.byteLength(postData)\n  }\n};\n\nconst req = http.request(options, (res) => {\n  console.log(`STATUS: ${res.statusCode}`);\n  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);\n  res.setEncoding('utf8');\n  res.on('data', (chunk) => {\n    console.log(`BODY: ${chunk}`);\n  });\n  res.on('end', () => {\n    console.log('No more data in response.');\n  });\n});\n\nreq.on('error', (e) => {\n  console.error(`problem with request: ${e.message}`);\n});\n\n// Write data to request body\nreq.write(postData);\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the example req.end() was called. With http.request() one\nmust always call req.end() to signify the end of the request -\neven if there is no data being written to the request body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If any error is encountered during the request (be that with DNS resolution,\nTCP level errors, or actual HTTP parse errors) an 'error' event is emitted\non the returned request object. As with all 'error' events, if no listeners\nare registered the error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are a few special headers that should be noted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending a 'Connection: keep-alive' will notify Node.js that the connection to\nthe server should be persisted until the next request.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending a 'Content-Length' header will disable the default chunked encoding.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending an 'Expect' header will immediately send the request headers.\nUsually, when sending 'Expect: 100-continue', both a timeout and a listener\nfor the 'continue' event should be set. See RFC 2616 Section 8.2.3 for more\ninformation.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending an Authorization header will override using the auth option\nto compute basic authentication.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a URL as options:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = new URL('http://abc:xyz@example.com');\n\nconst req = http.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In a successful request, the following events will be emitted in the following\norder:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'response'\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'data' any number of times, on the res object\n('data' will not be emitted at all if the response body is empty, for\ninstance, in most redirects)
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • 'end' on the res object
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the case of a connection error, the following events will be emitted:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'error'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If req.abort() is called before the connection succeeds, the following events\nwill be emitted in the following order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • (req.abort() called here)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'abort'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'error' with an error with message 'Error: socket hang up' and code\n'ECONNRESET'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If req.abort() is called after the response is received, the following events\nwill be emitted in the following order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'response'\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'data' any number of times, on the res object
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • (req.abort() called here)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'abort'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'aborted' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'end' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Setting the timeout option or using the setTimeout() function will\nnot abort the request or do anything besides add a 'timeout' event.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`http.request(url[, options][, callback])`", @@ -35817,7 +37096,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Node.js maintains several connections per server to make HTTP requests.\nThis function allows one to transparently issue requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      url can be a string or a URL object. If url is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both url and options are specified, the objects are merged, with the\noptions properties taking precedence.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional callback parameter will be added as a one-time listener for\nthe 'response' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      http.request() returns an instance of the http.ClientRequest\nclass. The ClientRequest instance is a writable stream. If one needs to\nupload a file with a POST request, then write to the ClientRequest object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const postData = querystring.stringify({\n  'msg': 'Hello World!'\n});\n\nconst options = {\n  hostname: 'www.google.com',\n  port: 80,\n  path: '/upload',\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/x-www-form-urlencoded',\n    'Content-Length': Buffer.byteLength(postData)\n  }\n};\n\nconst req = http.request(options, (res) => {\n  console.log(`STATUS: ${res.statusCode}`);\n  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);\n  res.setEncoding('utf8');\n  res.on('data', (chunk) => {\n    console.log(`BODY: ${chunk}`);\n  });\n  res.on('end', () => {\n    console.log('No more data in response.');\n  });\n});\n\nreq.on('error', (e) => {\n  console.error(`problem with request: ${e.message}`);\n});\n\n// Write data to request body\nreq.write(postData);\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the example req.end() was called. With http.request() one\nmust always call req.end() to signify the end of the request -\neven if there is no data being written to the request body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If any error is encountered during the request (be that with DNS resolution,\nTCP level errors, or actual HTTP parse errors) an 'error' event is emitted\non the returned request object. As with all 'error' events, if no listeners\nare registered the error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are a few special headers that should be noted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending a 'Connection: keep-alive' will notify Node.js that the connection to\nthe server should be persisted until the next request.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending a 'Content-Length' header will disable the default chunked encoding.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending an 'Expect' header will immediately send the request headers.\nUsually, when sending 'Expect: 100-continue', both a timeout and a listener\nfor the 'continue' event should be set. See RFC 2616 Section 8.2.3 for more\ninformation.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending an Authorization header will override using the auth option\nto compute basic authentication.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a URL as options:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = new URL('http://abc:xyz@example.com');\n\nconst req = http.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In a successful request, the following events will be emitted in the following\norder:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'response'

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'data' any number of times, on the res object\n('data' will not be emitted at all if the response body is empty, for\ninstance, in most redirects)
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • 'end' on the res object
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the case of a connection error, the following events will be emitted:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'error'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If req.abort() is called before the connection succeeds, the following events\nwill be emitted in the following order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • (req.abort() called here)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'abort'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'error' with an error with message 'Error: socket hang up' and code\n'ECONNRESET'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If req.abort() is called after the response is received, the following events\nwill be emitted in the following order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        'response'

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'data' any number of times, on the res object
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • (req.abort() called here)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'abort'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'aborted' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'end' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Setting the timeout option or using the setTimeout() function will\nnot abort the request or do anything besides add a 'timeout' event.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Node.js maintains several connections per server to make HTTP requests.\nThis function allows one to transparently issue requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      url can be a string or a URL object. If url is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both url and options are specified, the objects are merged, with the\noptions properties taking precedence.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional callback parameter will be added as a one-time listener for\nthe 'response' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      http.request() returns an instance of the http.ClientRequest\nclass. The ClientRequest instance is a writable stream. If one needs to\nupload a file with a POST request, then write to the ClientRequest object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const postData = querystring.stringify({\n  'msg': 'Hello World!'\n});\n\nconst options = {\n  hostname: 'www.google.com',\n  port: 80,\n  path: '/upload',\n  method: 'POST',\n  headers: {\n    'Content-Type': 'application/x-www-form-urlencoded',\n    'Content-Length': Buffer.byteLength(postData)\n  }\n};\n\nconst req = http.request(options, (res) => {\n  console.log(`STATUS: ${res.statusCode}`);\n  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);\n  res.setEncoding('utf8');\n  res.on('data', (chunk) => {\n    console.log(`BODY: ${chunk}`);\n  });\n  res.on('end', () => {\n    console.log('No more data in response.');\n  });\n});\n\nreq.on('error', (e) => {\n  console.error(`problem with request: ${e.message}`);\n});\n\n// Write data to request body\nreq.write(postData);\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the example req.end() was called. With http.request() one\nmust always call req.end() to signify the end of the request -\neven if there is no data being written to the request body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If any error is encountered during the request (be that with DNS resolution,\nTCP level errors, or actual HTTP parse errors) an 'error' event is emitted\non the returned request object. As with all 'error' events, if no listeners\nare registered the error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are a few special headers that should be noted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending a 'Connection: keep-alive' will notify Node.js that the connection to\nthe server should be persisted until the next request.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending a 'Content-Length' header will disable the default chunked encoding.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending an 'Expect' header will immediately send the request headers.\nUsually, when sending 'Expect: 100-continue', both a timeout and a listener\nfor the 'continue' event should be set. See RFC 2616 Section 8.2.3 for more\ninformation.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Sending an Authorization header will override using the auth option\nto compute basic authentication.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a URL as options:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = new URL('http://abc:xyz@example.com');\n\nconst req = http.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In a successful request, the following events will be emitted in the following\norder:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'response'\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'data' any number of times, on the res object\n('data' will not be emitted at all if the response body is empty, for\ninstance, in most redirects)
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • 'end' on the res object
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the case of a connection error, the following events will be emitted:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'error'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If req.abort() is called before the connection succeeds, the following events\nwill be emitted in the following order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • (req.abort() called here)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'abort'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'error' with an error with message 'Error: socket hang up' and code\n'ECONNRESET'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If req.abort() is called after the response is received, the following events\nwill be emitted in the following order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'socket'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'response'\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'data' any number of times, on the res object
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • (req.abort() called here)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'abort'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'aborted' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'end' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'close' on the res object
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Setting the timeout option or using the setTimeout() function will\nnot abort the request or do anything besides add a 'timeout' event.

                                                                                                                                                                                                                                                      " } ], "type": "module", @@ -35841,7 +37120,7 @@ "introduced_in": "v8.4.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The http2 module provides an implementation of the HTTP/2 protocol. It\ncan be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/http2.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The http2 module provides an implementation of the HTTP/2 protocol. It\ncan be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Core API", @@ -35851,7 +37130,7 @@ { "textRaw": "Server-side example", "name": "server-side_example", - "desc": "

                                                                                                                                                                                                                                                      The following illustrates a simple HTTP/2 server using the Core API.\nSince there are no browsers known that support\nunencrypted HTTP/2, the use of\nhttp2.createSecureServer() is necessary when communicating\nwith browser clients.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst fs = require('fs');\n\nconst server = http2.createSecureServer({\n  key: fs.readFileSync('localhost-privkey.pem'),\n  cert: fs.readFileSync('localhost-cert.pem')\n});\nserver.on('error', (err) => console.error(err));\n\nserver.on('stream', (stream, headers) => {\n  // stream is a Duplex\n  stream.respond({\n    'content-type': 'text/html',\n    ':status': 200\n  });\n  stream.end('<h1>Hello World</h1>');\n});\n\nserver.listen(8443);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To generate the certificate and key for this example, run:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \\\n  -keyout localhost-privkey.pem -out localhost-cert.pem\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The following illustrates a simple HTTP/2 server using the Core API.\nSince there are no browsers known that support\nunencrypted HTTP/2, the use of\nhttp2.createSecureServer() is necessary when communicating\nwith browser clients.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst fs = require('fs');\n\nconst server = http2.createSecureServer({\n  key: fs.readFileSync('localhost-privkey.pem'),\n  cert: fs.readFileSync('localhost-cert.pem')\n});\nserver.on('error', (err) => console.error(err));\n\nserver.on('stream', (stream, headers) => {\n  // stream is a Duplex\n  stream.respond({\n    'content-type': 'text/html; charset=utf-8',\n    ':status': 200\n  });\n  stream.end('<h1>Hello World</h1>');\n});\n\nserver.listen(8443);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To generate the certificate and key for this example, run:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \\\n  -keyout localhost-privkey.pem -out localhost-cert.pem\n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Server-side example" }, @@ -35863,14 +37142,14 @@ "displayName": "Client-side example" }, { - "textRaw": "Headers Object", + "textRaw": "Headers object", "name": "headers_object", "desc": "

                                                                                                                                                                                                                                                      Headers are represented as own-properties on JavaScript objects. The property\nkeys will be serialized to lower-case. Property values should be strings (if\nthey are not they will be coerced to strings) or an Array of strings (in order\nto send more than one value per header field).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const headers = {\n  ':status': '200',\n  'content-type': 'text-plain',\n  'ABC': ['has', 'more', 'than', 'one', 'value']\n};\n\nstream.respond(headers);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Header objects passed to callback functions will have a null prototype. This\nmeans that normal JavaScript object methods such as\nObject.prototype.toString() and Object.prototype.hasOwnProperty() will\nnot work.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For incoming headers:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • The :status header is converted to number.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Duplicates of :status, :method, :authority, :scheme, :path,\n:protocol, age, authorization, access-control-allow-credentials,\naccess-control-max-age, access-control-request-method, content-encoding,\ncontent-language, content-length, content-location, content-md5,\ncontent-range, content-type, date, dnt, etag, expires, from,\nif-match, if-modified-since, if-none-match, if-range,\nif-unmodified-since, last-modified, location, max-forwards,\nproxy-authorization, range, referer,retry-after, tk,\nupgrade-insecure-requests, user-agent or x-content-type-options are\ndiscarded.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • set-cookie is always an array. Duplicates are added to the array.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • For duplicate cookie headers, the values are joined together with '; '.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • For all other headers, the values are joined together with ', '.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer();\nserver.on('stream', (stream, headers) => {\n  console.log(headers[':path']);\n  console.log(headers.ABC);\n});\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Headers Object" + "displayName": "Headers object" }, { - "textRaw": "Settings Object", + "textRaw": "Settings object", "name": "settings_object", "meta": { "added": [ @@ -35889,9 +37168,9 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      The http2.getDefaultSettings(), http2.getPackedSettings(),\nhttp2.createServer(), http2.createSecureServer(),\nhttp2session.settings(), http2session.localSettings, and\nhttp2session.remoteSettings APIs either return or receive as input an\nobject that defines configuration settings for an Http2Session object.\nThese objects are ordinary JavaScript objects containing the following\nproperties.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • headerTableSize <number> Specifies the maximum number of bytes used for\nheader compression. The minimum allowed value is 0. The maximum allowed value\nis 232-1. Default: 4,096 octets.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • enablePush <boolean> Specifies true if HTTP/2 Push Streams are to be\npermitted on the Http2Session instances. Default: true.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • initialWindowSize <number> Specifies the senders initial window size\nfor stream-level flow control. The minimum allowed value is 0. The maximum\nallowed value is 232-1. Default: 65,535 bytes.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • maxFrameSize <number> Specifies the size of the largest frame payload.\nThe minimum allowed value is 16,384. The maximum allowed value\nis 224-1. Default: 16,384 bytes.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • maxConcurrentStreams <number> Specifies the maximum number of concurrent\nstreams permitted on an Http2Session. There is no default value which\nimplies, at least theoretically, 232-1 streams may be open\nconcurrently at any given time in an Http2Session. The minimum value\nis 0. The maximum allowed value is 232-1. Default:\n4294967295.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • maxHeaderListSize <number> Specifies the maximum size (uncompressed octets)\nof header list that will be accepted. The minimum allowed value is 0. The\nmaximum allowed value is 232-1. Default: 65535.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • enableConnectProtocol<boolean> Specifies true if the \"Extended Connect\nProtocol\" defined by RFC 8441 is to be enabled. This setting is only\nmeaningful if sent by the server. Once the enableConnectProtocol setting\nhas been enabled for a given Http2Session, it cannot be disabled.\nDefault: false.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All additional properties on the settings object are ignored.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The http2.getDefaultSettings(), http2.getPackedSettings(),\nhttp2.createServer(), http2.createSecureServer(),\nhttp2session.settings(), http2session.localSettings, and\nhttp2session.remoteSettings APIs either return or receive as input an\nobject that defines configuration settings for an Http2Session object.\nThese objects are ordinary JavaScript objects containing the following\nproperties.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • headerTableSize <number> Specifies the maximum number of bytes used for\nheader compression. The minimum allowed value is 0. The maximum allowed value\nis 232-1. Default: 4096.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • enablePush <boolean> Specifies true if HTTP/2 Push Streams are to be\npermitted on the Http2Session instances. Default: true.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • initialWindowSize <number> Specifies the sender's initial window size in\nbytes for stream-level flow control. The minimum allowed value is 0. The\nmaximum allowed value is 232-1. Default: 65535.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • maxFrameSize <number> Specifies the size in bytes of the largest frame\npayload. The minimum allowed value is 16,384. The maximum allowed value is\n224-1. Default: 16384.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • maxConcurrentStreams <number> Specifies the maximum number of concurrent\nstreams permitted on an Http2Session. There is no default value which\nimplies, at least theoretically, 232-1 streams may be open\nconcurrently at any given time in an Http2Session. The minimum value\nis 0. The maximum allowed value is 232-1. Default:\n4294967295.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • maxHeaderListSize <number> Specifies the maximum size (uncompressed octets)\nof header list that will be accepted. The minimum allowed value is 0. The\nmaximum allowed value is 232-1. Default: 65535.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • maxHeaderSize <number> Alias for maxHeaderListSize.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • enableConnectProtocol<boolean> Specifies true if the \"Extended Connect\nProtocol\" defined by RFC 8441 is to be enabled. This setting is only\nmeaningful if sent by the server. Once the enableConnectProtocol setting\nhas been enabled for a given Http2Session, it cannot be disabled.\nDefault: false.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All additional properties on the settings object are ignored.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Settings Object" + "displayName": "Settings object" }, { "textRaw": "Using `options.selectPadding()`", @@ -35901,11 +37180,11 @@ "displayName": "Using `options.selectPadding()`" }, { - "textRaw": "Error Handling", + "textRaw": "Error handling", "name": "error_handling", "desc": "

                                                                                                                                                                                                                                                      There are several types of error conditions that may arise when using the\nhttp2 module:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Validation errors occur when an incorrect argument, option, or setting value is\npassed in. These will always be reported by a synchronous throw.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      State errors occur when an action is attempted at an incorrect time (for\ninstance, attempting to send data on a stream after it has closed). These will\nbe reported using either a synchronous throw or via an 'error' event on\nthe Http2Stream, Http2Session or HTTP/2 Server objects, depending on where\nand when the error occurs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Internal errors occur when an HTTP/2 session fails unexpectedly. These will be\nreported via an 'error' event on the Http2Session or HTTP/2 Server objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Protocol errors occur when various HTTP/2 protocol constraints are violated.\nThese will be reported using either a synchronous throw or via an 'error'\nevent on the Http2Stream, Http2Session or HTTP/2 Server objects, depending\non where and when the error occurs.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Error Handling" + "displayName": "Error handling" }, { "textRaw": "Invalid character handling in header names and values", @@ -35929,11 +37208,11 @@ "displayName": "Supporting the `CONNECT` method" }, { - "textRaw": "The Extended `CONNECT` Protocol", + "textRaw": "The extended `CONNECT` protocol", "name": "the_extended_`connect`_protocol", "desc": "

                                                                                                                                                                                                                                                      RFC 8441 defines an \"Extended CONNECT Protocol\" extension to HTTP/2 that\nmay be used to bootstrap the use of an Http2Stream using the CONNECT\nmethod as a tunnel for other communication protocols (such as WebSockets).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The use of the Extended CONNECT Protocol is enabled by HTTP/2 servers by using\nthe enableConnectProtocol setting:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst settings = { enableConnectProtocol: true };\nconst server = http2.createServer({ settings });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the client receives the SETTINGS frame from the server indicating that\nthe extended CONNECT may be used, it may send CONNECT requests that use the\n':protocol' HTTP/2 pseudo-header:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst client = http2.connect('http://localhost:8080');\nclient.on('remoteSettings', (settings) => {\n  if (settings.enableConnectProtocol) {\n    const req = client.request({ ':method': 'CONNECT', ':protocol': 'foo' });\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "The Extended `CONNECT` Protocol" + "displayName": "The extended `CONNECT` protocol" } ], "classes": [ @@ -35950,11 +37229,11 @@ "desc": "\n

                                                                                                                                                                                                                                                      Instances of the http2.Http2Session class represent an active communications\nsession between an HTTP/2 client and server. Instances of this class are not\nintended to be constructed directly by user code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Each Http2Session instance will exhibit slightly different behaviors\ndepending on whether it is operating as a server or a client. The\nhttp2session.type property can be used to determine the mode in which an\nHttp2Session is operating. On the server side, user code should rarely\nhave occasion to work with the Http2Session object directly, with most\nactions typically taken through interactions with either the Http2Server or\nHttp2Stream objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      User code will not create Http2Session instances directly. Server-side\nHttp2Session instances are created by the Http2Server instance when a\nnew HTTP/2 connection is received. Client-side Http2Session instances are\ncreated using the http2.connect() method.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "`Http2Session` and Sockets", + "textRaw": "`Http2Session` and sockets", "name": "`http2session`_and_sockets", "desc": "

                                                                                                                                                                                                                                                      Every Http2Session instance is associated with exactly one net.Socket or\ntls.TLSSocket when it is created. When either the Socket or the\nHttp2Session are destroyed, both will be destroyed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because of the specific serialization and processing requirements imposed\nby the HTTP/2 protocol, it is not recommended for user code to read data from\nor write data to a Socket instance bound to a Http2Session. Doing so can\nput the HTTP/2 session into an indeterminate state causing the session and\nthe socket to become unusable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once a Socket has been bound to an Http2Session, user code should rely\nsolely on the API of the Http2Session.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "`Http2Session` and Sockets" + "displayName": "`Http2Session` and sockets" } ], "events": [ @@ -36174,7 +37453,7 @@ "desc": "An array containing the raw header names followed by their respective values." } ], - "desc": "

                                                                                                                                                                                                                                                      The 'stream' event is emitted when a new Http2Stream is created.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nsession.on('stream', (stream, headers, flags) => {\n  const method = headers[':method'];\n  const path = headers[':path'];\n  // ...\n  stream.respond({\n    ':status': 200,\n    'content-type': 'text/plain'\n  });\n  stream.write('hello ');\n  stream.end('world');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On the server side, user code will typically not listen for this event directly,\nand would instead register a handler for the 'stream' event emitted by the\nnet.Server or tls.Server instances returned by http2.createServer() and\nhttp2.createSecureServer(), respectively, as in the example below:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\n\n// Create an unencrypted HTTP/2 server\nconst server = http2.createServer();\n\nserver.on('stream', (stream, headers) => {\n  stream.respond({\n    'content-type': 'text/html',\n    ':status': 200\n  });\n  stream.on('error', (error) => console.error(error));\n  stream.end('<h1>Hello World</h1>');\n});\n\nserver.listen(80);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Even though HTTP/2 streams and network sockets are not in a 1:1 correspondence,\na network error will destroy each individual stream and must be handled on the\nstream level, as shown above.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'stream' event is emitted when a new Http2Stream is created.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nsession.on('stream', (stream, headers, flags) => {\n  const method = headers[':method'];\n  const path = headers[':path'];\n  // ...\n  stream.respond({\n    ':status': 200,\n    'content-type': 'text/plain; charset=utf-8'\n  });\n  stream.write('hello ');\n  stream.end('world');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On the server side, user code will typically not listen for this event directly,\nand would instead register a handler for the 'stream' event emitted by the\nnet.Server or tls.Server instances returned by http2.createServer() and\nhttp2.createSecureServer(), respectively, as in the example below:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\n\n// Create an unencrypted HTTP/2 server\nconst server = http2.createServer();\n\nserver.on('stream', (stream, headers) => {\n  stream.respond({\n    'content-type': 'text/html; charset=utf-8',\n    ':status': 200\n  });\n  stream.on('error', (error) => console.error(error));\n  stream.end('<h1>Hello World</h1>');\n});\n\nserver.listen(80);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Even though HTTP/2 streams and network sockets are not in a 1:1 correspondence,\na network error will destroy each individual stream and must be handled on the\nstream level, as shown above.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'timeout'`", @@ -36320,7 +37599,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Provides miscellaneous information about the current state of the\nHttp2Session.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        <Object>

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • effectiveLocalWindowSize <number> The current local (receive)\nflow control window size for the Http2Session.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • effectiveRecvDataLength <number> The current number of bytes\nthat have been received since the last flow control WINDOW_UPDATE.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • nextStreamID <number> The numeric identifier to be used the\nnext time a new Http2Stream is created by this Http2Session.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • localWindowSize <number> The number of bytes that the remote peer can\nsend without receiving a WINDOW_UPDATE.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • lastProcStreamID <number> The numeric id of the Http2Stream\nfor which a HEADERS or DATA frame was most recently received.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • remoteWindowSize <number> The number of bytes that this Http2Session\nmay send without receiving a WINDOW_UPDATE.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • outboundQueueSize <number> The number of frames currently within the\noutbound queue for this Http2Session.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • deflateDynamicTableSize <number> The current size in bytes of the\noutbound header compression state table.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • inflateDynamicTableSize <number> The current size in bytes of the\ninbound header compression state table.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An object describing the current status of this Http2Session.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Provides miscellaneous information about the current state of the\nHttp2Session.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • <Object>\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • effectiveLocalWindowSize <number> The current local (receive)\nflow control window size for the Http2Session.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • effectiveRecvDataLength <number> The current number of bytes\nthat have been received since the last flow control WINDOW_UPDATE.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • nextStreamID <number> The numeric identifier to be used the\nnext time a new Http2Stream is created by this Http2Session.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • localWindowSize <number> The number of bytes that the remote peer can\nsend without receiving a WINDOW_UPDATE.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • lastProcStreamID <number> The numeric id of the Http2Stream\nfor which a HEADERS or DATA frame was most recently received.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • remoteWindowSize <number> The number of bytes that this Http2Session\nmay send without receiving a WINDOW_UPDATE.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • outboundQueueSize <number> The number of frames currently within the\noutbound queue for this Http2Session.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • deflateDynamicTableSize <number> The current size in bytes of the\noutbound header compression state table.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • inflateDynamicTableSize <number> The current size in bytes of the\ninbound header compression state table.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An object describing the current status of this Http2Session.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`type` {number}", @@ -36787,7 +38066,7 @@ ], "changes": [] }, - "desc": "\n

                                                                                                                                                                                                                                                      Each instance of the Http2Stream class represents a bidirectional HTTP/2\ncommunications stream over an Http2Session instance. Any single Http2Session\nmay have up to 231-1 Http2Stream instances over its lifetime.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      User code will not construct Http2Stream instances directly. Rather, these\nare created, managed, and provided to user code through the Http2Session\ninstance. On the server, Http2Stream instances are created either in response\nto an incoming HTTP request (and handed off to user code via the 'stream'\nevent), or in response to a call to the http2stream.pushStream() method.\nOn the client, Http2Stream instances are created and returned when either the\nhttp2session.request() method is called, or in response to an incoming\n'push' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Http2Stream class is a base for the ServerHttp2Stream and\nClientHttp2Stream classes, each of which is used specifically by either\nthe Server or Client side, respectively.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Http2Stream instances are Duplex streams. The Writable side of the\nDuplex is used to send data to the connected peer, while the Readable side\nis used to receive data sent by the connected peer.

                                                                                                                                                                                                                                                      ", + "desc": "\n

                                                                                                                                                                                                                                                      Each instance of the Http2Stream class represents a bidirectional HTTP/2\ncommunications stream over an Http2Session instance. Any single Http2Session\nmay have up to 231-1 Http2Stream instances over its lifetime.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      User code will not construct Http2Stream instances directly. Rather, these\nare created, managed, and provided to user code through the Http2Session\ninstance. On the server, Http2Stream instances are created either in response\nto an incoming HTTP request (and handed off to user code via the 'stream'\nevent), or in response to a call to the http2stream.pushStream() method.\nOn the client, Http2Stream instances are created and returned when either the\nhttp2session.request() method is called, or in response to an incoming\n'push' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Http2Stream class is a base for the ServerHttp2Stream and\nClientHttp2Stream classes, each of which is used specifically by either\nthe Server or Client side, respectively.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Http2Stream instances are Duplex streams. The Writable side of the\nDuplex is used to send data to the connected peer, while the Readable side\nis used to receive data sent by the connected peer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default text character encoding for all Http2Streams is UTF-8. As a best\npractice, it is recommended that when using an Http2Stream to send text,\nthe 'content-type' header should be set and should identify the character\nencoding used.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      stream.respond({\n  'content-type': 'text/html; charset=utf-8',\n  ':status': 200\n});\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "`Http2Stream` Lifecycle", @@ -36803,7 +38082,7 @@ { "textRaw": "Destruction", "name": "destruction", - "desc": "

                                                                                                                                                                                                                                                      All Http2Stream instances are destroyed either when:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • An RST_STREAM frame for the stream is received by the connected peer,\nand pending data has been read.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The http2stream.close() method is called, and pending data has been read.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The http2stream.destroy() or http2session.destroy() methods are called.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When an Http2Stream instance is destroyed, an attempt will be made to send an\nRST_STREAM frame to the connected peer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the Http2Stream instance is destroyed, the 'close' event will\nbe emitted. Because Http2Stream is an instance of stream.Duplex, the\n'end' event will also be emitted if the stream data is currently flowing.\nThe 'error' event may also be emitted if http2stream.destroy() was called\nwith an Error passed as the first argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      After the Http2Stream has been destroyed, the http2stream.destroyed\nproperty will be true and the http2stream.rstCode property will specify the\nRST_STREAM error code. The Http2Stream instance is no longer usable once\ndestroyed.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      All Http2Stream instances are destroyed either when:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • An RST_STREAM frame for the stream is received by the connected peer,\nand (for client streams only) pending data has been read.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The http2stream.close() method is called, and (for client streams only)\npending data has been read.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The http2stream.destroy() or http2session.destroy() methods are called.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When an Http2Stream instance is destroyed, an attempt will be made to send an\nRST_STREAM frame to the connected peer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the Http2Stream instance is destroyed, the 'close' event will\nbe emitted. Because Http2Stream is an instance of stream.Duplex, the\n'end' event will also be emitted if the stream data is currently flowing.\nThe 'error' event may also be emitted if http2stream.destroy() was called\nwith an Error passed as the first argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      After the Http2Stream has been destroyed, the http2stream.destroyed\nproperty will be true and the http2stream.rstCode property will specify the\nRST_STREAM error code. The Http2Stream instance is no longer usable once\ndestroyed.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Destruction" } @@ -36891,6 +38170,19 @@ "desc": "

                                                                                                                                                                                                                                                      The 'frameError' event is emitted when an error occurs while attempting to\nsend a frame. When invoked, the handler function will receive an integer\nargument identifying the frame type, and an integer argument identifying the\nerror code. The Http2Stream instance will be destroyed immediately after the\n'frameError' event is emitted.

                                                                                                                                                                                                                                                      " }, { + "textRaw": "Event: `'ready'`", + "type": "event", + "name": "ready", + "meta": { + "added": [ + "v8.4.0" + ], + "changes": [] + }, + "params": [], + "desc": "

                                                                                                                                                                                                                                                      The 'ready' event is emitted when the Http2Stream has been opened, has\nbeen assigned an id, and can be used. The listener does not expect any\narguments.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "Event: `'timeout'`", "type": "event", "name": "timeout", @@ -37097,7 +38389,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Provides miscellaneous information about the current state of the\nHttp2Stream.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        <Object>

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • localWindowSize <number> The number of bytes the connected peer may send\nfor this Http2Stream without receiving a WINDOW_UPDATE.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • state <number> A flag indicating the low-level current state of the\nHttp2Stream as determined by nghttp2.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • localClose <number> 1 if this Http2Stream has been closed locally.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • remoteClose <number> 1 if this Http2Stream has been closed\nremotely.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • sumDependencyWeight <number> The sum weight of all Http2Stream\ninstances that depend on this Http2Stream as specified using\nPRIORITY frames.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • weight <number> The priority weight of this Http2Stream.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A current state of this Http2Stream.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Provides miscellaneous information about the current state of the\nHttp2Stream.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • <Object>\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • localWindowSize <number> The number of bytes the connected peer may send\nfor this Http2Stream without receiving a WINDOW_UPDATE.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • state <number> A flag indicating the low-level current state of the\nHttp2Stream as determined by nghttp2.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • localClose <number> 1 if this Http2Stream has been closed locally.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • remoteClose <number> 1 if this Http2Stream has been closed\nremotely.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • sumDependencyWeight <number> The sum weight of all Http2Stream\ninstances that depend on this Http2Stream as specified using\nPRIORITY frames.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • weight <number> The priority weight of this Http2Stream.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A current state of this Http2Stream.

                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -37412,7 +38704,13 @@ "added": [ "v8.4.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33160", + "description": "Allow explicity setting date headers." + } + ] }, "signatures": [ { @@ -37456,6 +38754,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33160", + "description": "Allow explicity setting date headers." + }, + { "version": "v12.12.0", "pr-url": "https://github.com/nodejs/node/pull/29876", "description": "The `fd` option may now be a `FileHandle`." @@ -37514,7 +38817,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Initiates a response whose data is read from the given file descriptor. No\nvalidation is performed on the given file descriptor. If an error occurs while\nattempting to read data using the file descriptor, the Http2Stream will be\nclosed using an RST_STREAM frame using the standard INTERNAL_ERROR code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When used, the Http2Stream object's Duplex interface will be closed\nautomatically.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst fs = require('fs');\n\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  const fd = fs.openSync('/some/file', 'r');\n\n  const stat = fs.fstatSync(fd);\n  const headers = {\n    'content-length': stat.size,\n    'last-modified': stat.mtime.toUTCString(),\n    'content-type': 'text/plain'\n  };\n  stream.respondWithFD(fd, headers);\n  stream.on('close', () => fs.closeSync(fd));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional options.statCheck function may be specified to give user code\nan opportunity to set additional content headers based on the fs.Stat details\nof the given fd. If the statCheck function is provided, the\nhttp2stream.respondWithFD() method will perform an fs.fstat() call to\ncollect details on the provided file descriptor.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The offset and length options may be used to limit the response to a\nspecific range subset. This can be used, for instance, to support HTTP Range\nrequests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The file descriptor or FileHandle is not closed when the stream is closed,\nso it will need to be closed manually once it is no longer needed.\nUsing the same file descriptor concurrently for multiple streams\nis not supported and may result in data loss. Re-using a file descriptor\nafter a stream has finished is supported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the options.waitForTrailers option is set, the 'wantTrailers' event\nwill be emitted immediately after queuing the last chunk of payload data to be\nsent. The http2stream.sendTrailers() method can then be used to sent trailing\nheader fields to the peer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When options.waitForTrailers is set, the Http2Stream will not automatically\nclose when the final DATA frame is transmitted. User code must call either\nhttp2stream.sendTrailers() or http2stream.close() to close the\nHttp2Stream.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst fs = require('fs');\n\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  const fd = fs.openSync('/some/file', 'r');\n\n  const stat = fs.fstatSync(fd);\n  const headers = {\n    'content-length': stat.size,\n    'last-modified': stat.mtime.toUTCString(),\n    'content-type': 'text/plain'\n  };\n  stream.respondWithFD(fd, headers, { waitForTrailers: true });\n  stream.on('wantTrailers', () => {\n    stream.sendTrailers({ ABC: 'some value to send' });\n  });\n\n  stream.on('close', () => fs.closeSync(fd));\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Initiates a response whose data is read from the given file descriptor. No\nvalidation is performed on the given file descriptor. If an error occurs while\nattempting to read data using the file descriptor, the Http2Stream will be\nclosed using an RST_STREAM frame using the standard INTERNAL_ERROR code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When used, the Http2Stream object's Duplex interface will be closed\nautomatically.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst fs = require('fs');\n\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  const fd = fs.openSync('/some/file', 'r');\n\n  const stat = fs.fstatSync(fd);\n  const headers = {\n    'content-length': stat.size,\n    'last-modified': stat.mtime.toUTCString(),\n    'content-type': 'text/plain; charset=utf-8'\n  };\n  stream.respondWithFD(fd, headers);\n  stream.on('close', () => fs.closeSync(fd));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional options.statCheck function may be specified to give user code\nan opportunity to set additional content headers based on the fs.Stat details\nof the given fd. If the statCheck function is provided, the\nhttp2stream.respondWithFD() method will perform an fs.fstat() call to\ncollect details on the provided file descriptor.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The offset and length options may be used to limit the response to a\nspecific range subset. This can be used, for instance, to support HTTP Range\nrequests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The file descriptor or FileHandle is not closed when the stream is closed,\nso it will need to be closed manually once it is no longer needed.\nUsing the same file descriptor concurrently for multiple streams\nis not supported and may result in data loss. Re-using a file descriptor\nafter a stream has finished is supported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the options.waitForTrailers option is set, the 'wantTrailers' event\nwill be emitted immediately after queuing the last chunk of payload data to be\nsent. The http2stream.sendTrailers() method can then be used to sent trailing\nheader fields to the peer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When options.waitForTrailers is set, the Http2Stream will not automatically\nclose when the final DATA frame is transmitted. User code must call either\nhttp2stream.sendTrailers() or http2stream.close() to close the\nHttp2Stream.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst fs = require('fs');\n\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  const fd = fs.openSync('/some/file', 'r');\n\n  const stat = fs.fstatSync(fd);\n  const headers = {\n    'content-length': stat.size,\n    'last-modified': stat.mtime.toUTCString(),\n    'content-type': 'text/plain; charset=utf-8'\n  };\n  stream.respondWithFD(fd, headers, { waitForTrailers: true });\n  stream.on('wantTrailers', () => {\n    stream.sendTrailers({ ABC: 'some value to send' });\n  });\n\n  stream.on('close', () => fs.closeSync(fd));\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`http2stream.respondWithFile(path[, headers[, options]])`", @@ -37526,6 +38829,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33160", + "description": "Allow explicity setting date headers." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18936", "description": "Any readable file, not necessarily a regular file, is supported now." @@ -37584,7 +38892,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sends a regular file as the response. The path must specify a regular file\nor an 'error' event will be emitted on the Http2Stream object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When used, the Http2Stream object's Duplex interface will be closed\nautomatically.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional options.statCheck function may be specified to give user code\nan opportunity to set additional content headers based on the fs.Stat details\nof the given file:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If an error occurs while attempting to read the file data, the Http2Stream\nwill be closed using an RST_STREAM frame using the standard INTERNAL_ERROR\ncode. If the onError callback is defined, then it will be called. Otherwise\nthe stream will be destroyed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a file path:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  function statCheck(stat, headers) {\n    headers['last-modified'] = stat.mtime.toUTCString();\n  }\n\n  function onError(err) {\n    if (err.code === 'ENOENT') {\n      stream.respond({ ':status': 404 });\n    } else {\n      stream.respond({ ':status': 500 });\n    }\n    stream.end();\n  }\n\n  stream.respondWithFile('/some/file',\n                         { 'content-type': 'text/plain' },\n                         { statCheck, onError });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The options.statCheck function may also be used to cancel the send operation\nby returning false. For instance, a conditional request may check the stat\nresults to determine if the file has been modified to return an appropriate\n304 response:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  function statCheck(stat, headers) {\n    // Check the stat here...\n    stream.respond({ ':status': 304 });\n    return false; // Cancel the send operation\n  }\n  stream.respondWithFile('/some/file',\n                         { 'content-type': 'text/plain' },\n                         { statCheck });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The content-length header field will be automatically set.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The offset and length options may be used to limit the response to a\nspecific range subset. This can be used, for instance, to support HTTP Range\nrequests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The options.onError function may also be used to handle all the errors\nthat could happen before the delivery of the file is initiated. The\ndefault behavior is to destroy the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the options.waitForTrailers option is set, the 'wantTrailers' event\nwill be emitted immediately after queuing the last chunk of payload data to be\nsent. The http2stream.sendTrailers() method can then be used to sent trailing\nheader fields to the peer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When options.waitForTrailers is set, the Http2Stream will not automatically\nclose when the final DATA frame is transmitted. User code must call either\nhttp2stream.sendTrailers() or http2stream.close() to close the\nHttp2Stream.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  stream.respondWithFile('/some/file',\n                         { 'content-type': 'text/plain' },\n                         { waitForTrailers: true });\n  stream.on('wantTrailers', () => {\n    stream.sendTrailers({ ABC: 'some value to send' });\n  });\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sends a regular file as the response. The path must specify a regular file\nor an 'error' event will be emitted on the Http2Stream object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When used, the Http2Stream object's Duplex interface will be closed\nautomatically.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional options.statCheck function may be specified to give user code\nan opportunity to set additional content headers based on the fs.Stat details\nof the given file:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If an error occurs while attempting to read the file data, the Http2Stream\nwill be closed using an RST_STREAM frame using the standard INTERNAL_ERROR\ncode. If the onError callback is defined, then it will be called. Otherwise\nthe stream will be destroyed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a file path:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  function statCheck(stat, headers) {\n    headers['last-modified'] = stat.mtime.toUTCString();\n  }\n\n  function onError(err) {\n    if (err.code === 'ENOENT') {\n      stream.respond({ ':status': 404 });\n    } else {\n      stream.respond({ ':status': 500 });\n    }\n    stream.end();\n  }\n\n  stream.respondWithFile('/some/file',\n                         { 'content-type': 'text/plain; charset=utf-8' },\n                         { statCheck, onError });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The options.statCheck function may also be used to cancel the send operation\nby returning false. For instance, a conditional request may check the stat\nresults to determine if the file has been modified to return an appropriate\n304 response:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  function statCheck(stat, headers) {\n    // Check the stat here...\n    stream.respond({ ':status': 304 });\n    return false; // Cancel the send operation\n  }\n  stream.respondWithFile('/some/file',\n                         { 'content-type': 'text/plain; charset=utf-8' },\n                         { statCheck });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The content-length header field will be automatically set.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The offset and length options may be used to limit the response to a\nspecific range subset. This can be used, for instance, to support HTTP Range\nrequests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The options.onError function may also be used to handle all the errors\nthat could happen before the delivery of the file is initiated. The\ndefault behavior is to destroy the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the options.waitForTrailers option is set, the 'wantTrailers' event\nwill be emitted immediately after queuing the last chunk of payload data to be\nsent. The http2stream.sendTrailers() method can then be used to sent trailing\nheader fields to the peer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When options.waitForTrailers is set, the Http2Stream will not automatically\nclose when the final DATA frame is transmitted. User code must call either\nhttp2stream.sendTrailers() or http2stream.close() to close the\nHttp2Stream.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer();\nserver.on('stream', (stream) => {\n  stream.respondWithFile('/some/file',\n                         { 'content-type': 'text/plain; charset=utf-8' },\n                         { waitForTrailers: true });\n  stream.on('wantTrailers', () => {\n    stream.sendTrailers({ ABC: 'some value to send' });\n  });\n});\n
                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -37649,7 +38957,68 @@ } ], "desc": "

                                                                                                                                                                                                                                                      If a 'request' listener is registered or http2.createServer() is\nsupplied a callback function, the 'checkContinue' event is emitted each time\na request with an HTTP Expect: 100-continue is received. If this event is\nnot listened for, the server will automatically respond with a status\n100 Continue as appropriate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Handling this event involves calling response.writeContinue() if the\nclient should continue to send the request body, or generating an appropriate\nHTTP response (e.g. 400 Bad Request) if the client should not continue to send\nthe request body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When this event is emitted and handled, the 'request' event will\nnot be emitted.

                                                                                                                                                                                                                                                      " - }, + } + ] + }, + { + "textRaw": "Class: `Http2SecureServer`", + "type": "class", + "name": "Http2SecureServer", + "meta": { + "added": [ + "v8.4.0" + ], + "changes": [] + }, + "desc": "\n

                                                                                                                                                                                                                                                      Instances of Http2SecureServer are created using the\nhttp2.createSecureServer() function. The Http2SecureServer class is not\nexported directly by the http2 module.

                                                                                                                                                                                                                                                      ", + "events": [ + { + "textRaw": "Event: `'checkContinue'`", + "type": "event", + "name": "checkContinue", + "meta": { + "added": [ + "v8.5.0" + ], + "changes": [] + }, + "params": [ + { + "textRaw": "`request` {http2.Http2ServerRequest}", + "name": "request", + "type": "http2.Http2ServerRequest" + }, + { + "textRaw": "`response` {http2.Http2ServerResponse}", + "name": "response", + "type": "http2.Http2ServerResponse" + } + ], + "desc": "

                                                                                                                                                                                                                                                      If a 'request' listener is registered or http2.createSecureServer()\nis supplied a callback function, the 'checkContinue' event is emitted each\ntime a request with an HTTP Expect: 100-continue is received. If this event\nis not listened for, the server will automatically respond with a status\n100 Continue as appropriate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Handling this event involves calling response.writeContinue() if the\nclient should continue to send the request body, or generating an appropriate\nHTTP response (e.g. 400 Bad Request) if the client should not continue to send\nthe request body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When this event is emitted and handled, the 'request' event will\nnot be emitted.

                                                                                                                                                                                                                                                      " + } + ] + } + ], + "events": [ + { + "textRaw": "Event: `'connection'`", + "type": "event", + "name": "connection", + "meta": { + "added": [ + "v8.4.0" + ], + "changes": [] + }, + "params": [ + { + "textRaw": "`socket` {stream.Duplex}", + "name": "socket", + "type": "stream.Duplex" + } + ], + "desc": "

                                                                                                                                                                                                                                                      This event is emitted when a new TCP stream is established. socket is\ntypically an object of type net.Socket. Usually users will not want to\naccess this event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This event can also be explicitly emitted by users to inject connections\ninto the HTTP server. In that case, any Duplex stream can be passed.

                                                                                                                                                                                                                                                      ", + "events": [ { "textRaw": "Event: `'request'`", "type": "event", @@ -37711,7 +39080,7 @@ "changes": [] }, "params": [], - "desc": "

                                                                                                                                                                                                                                                      The 'stream' event is emitted when a 'stream' event has been emitted by\nan Http2Session associated with the server.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst {\n  HTTP2_HEADER_METHOD,\n  HTTP2_HEADER_PATH,\n  HTTP2_HEADER_STATUS,\n  HTTP2_HEADER_CONTENT_TYPE\n} = http2.constants;\n\nconst server = http2.createServer();\nserver.on('stream', (stream, headers, flags) => {\n  const method = headers[HTTP2_HEADER_METHOD];\n  const path = headers[HTTP2_HEADER_PATH];\n  // ...\n  stream.respond({\n    [HTTP2_HEADER_STATUS]: 200,\n    [HTTP2_HEADER_CONTENT_TYPE]: 'text/plain'\n  });\n  stream.write('hello ');\n  stream.end('world');\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'stream' event is emitted when a 'stream' event has been emitted by\nan Http2Session associated with the server.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst {\n  HTTP2_HEADER_METHOD,\n  HTTP2_HEADER_PATH,\n  HTTP2_HEADER_STATUS,\n  HTTP2_HEADER_CONTENT_TYPE\n} = http2.constants;\n\nconst server = http2.createServer();\nserver.on('stream', (stream, headers, flags) => {\n  const method = headers[HTTP2_HEADER_METHOD];\n  const path = headers[HTTP2_HEADER_PATH];\n  // ...\n  stream.respond({\n    [HTTP2_HEADER_STATUS]: 200,\n    [HTTP2_HEADER_CONTENT_TYPE]: 'text/plain; charset=utf-8'\n  });\n  stream.write('hello ');\n  stream.end('world');\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'timeout'`", @@ -37788,41 +39157,24 @@ ] }, { - "textRaw": "Class: `Http2SecureServer`", - "type": "class", - "name": "Http2SecureServer", + "textRaw": "Event: `'connection'`", + "type": "event", + "name": "connection", "meta": { "added": [ "v8.4.0" ], "changes": [] }, - "desc": "\n

                                                                                                                                                                                                                                                      Instances of Http2SecureServer are created using the\nhttp2.createSecureServer() function. The Http2SecureServer class is not\nexported directly by the http2 module.

                                                                                                                                                                                                                                                      ", - "events": [ + "params": [ { - "textRaw": "Event: `'checkContinue'`", - "type": "event", - "name": "checkContinue", - "meta": { - "added": [ - "v8.5.0" - ], - "changes": [] - }, - "params": [ - { - "textRaw": "`request` {http2.Http2ServerRequest}", - "name": "request", - "type": "http2.Http2ServerRequest" - }, - { - "textRaw": "`response` {http2.Http2ServerResponse}", - "name": "response", - "type": "http2.Http2ServerResponse" - } - ], - "desc": "

                                                                                                                                                                                                                                                      If a 'request' listener is registered or http2.createSecureServer()\nis supplied a callback function, the 'checkContinue' event is emitted each\ntime a request with an HTTP Expect: 100-continue is received. If this event\nis not listened for, the server will automatically respond with a status\n100 Continue as appropriate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Handling this event involves calling response.writeContinue() if the\nclient should continue to send the request body, or generating an appropriate\nHTTP response (e.g. 400 Bad Request) if the client should not continue to send\nthe request body.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When this event is emitted and handled, the 'request' event will\nnot be emitted.

                                                                                                                                                                                                                                                      " - }, + "textRaw": "`socket` {stream.Duplex}", + "name": "socket", + "type": "stream.Duplex" + } + ], + "desc": "

                                                                                                                                                                                                                                                      This event is emitted when a new TCP stream is established, before the TLS\nhandshake begins. socket is typically an object of type net.Socket.\nUsually users will not want to access this event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This event can also be explicitly emitted by users to inject connections\ninto the HTTP server. In that case, any Duplex stream can be passed.

                                                                                                                                                                                                                                                      ", + "events": [ { "textRaw": "Event: `'request'`", "type": "event", @@ -37884,7 +39236,7 @@ "changes": [] }, "params": [], - "desc": "

                                                                                                                                                                                                                                                      The 'stream' event is emitted when a 'stream' event has been emitted by\nan Http2Session associated with the server.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst {\n  HTTP2_HEADER_METHOD,\n  HTTP2_HEADER_PATH,\n  HTTP2_HEADER_STATUS,\n  HTTP2_HEADER_CONTENT_TYPE\n} = http2.constants;\n\nconst options = getOptionsSomehow();\n\nconst server = http2.createSecureServer(options);\nserver.on('stream', (stream, headers, flags) => {\n  const method = headers[HTTP2_HEADER_METHOD];\n  const path = headers[HTTP2_HEADER_PATH];\n  // ...\n  stream.respond({\n    [HTTP2_HEADER_STATUS]: 200,\n    [HTTP2_HEADER_CONTENT_TYPE]: 'text/plain'\n  });\n  stream.write('hello ');\n  stream.end('world');\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'stream' event is emitted when a 'stream' event has been emitted by\nan Http2Session associated with the server.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst {\n  HTTP2_HEADER_METHOD,\n  HTTP2_HEADER_PATH,\n  HTTP2_HEADER_STATUS,\n  HTTP2_HEADER_CONTENT_TYPE\n} = http2.constants;\n\nconst options = getOptionsSomehow();\n\nconst server = http2.createSecureServer(options);\nserver.on('stream', (stream, headers, flags) => {\n  const method = headers[HTTP2_HEADER_METHOD];\n  const path = headers[HTTP2_HEADER_PATH];\n  // ...\n  stream.respond({\n    [HTTP2_HEADER_STATUS]: 200,\n    [HTTP2_HEADER_CONTENT_TYPE]: 'text/plain; charset=utf-8'\n  });\n  stream.write('hello ');\n  stream.end('world');\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'timeout'`", @@ -37910,7 +39262,7 @@ "changes": [] }, "params": [], - "desc": "

                                                                                                                                                                                                                                                      The 'unknownProtocol' event is emitted when a connecting client fails to\nnegotiate an allowed protocol (i.e. HTTP/2 or HTTP/1.1). The event handler\nreceives the socket for handling. If no listener is registered for this event,\nthe connection is terminated. See the Compatibility API.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'unknownProtocol' event is emitted when a connecting client fails to\nnegotiate an allowed protocol (i.e. HTTP/2 or HTTP/1.1). The event handler\nreceives the socket for handling. If no listener is registered for this event,\nthe connection is terminated. A timeout may be specified using the\n'unknownProtocolTimeout' option passed to http2.createSecureServer().\nSee the Compatibility API.

                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -37985,6 +39337,11 @@ ], "changes": [ { + "version": "v12.21.0", + "pr-url": "https://github.com/nodejs-private/node-private/pull/250", + "description": "Added `unknownProtocolTimeout` option with a default of 10000." + }, + { "version": [ "v12.18.0" ], @@ -38058,11 +39415,11 @@ "desc": "Sets the maximum memory that the `Http2Session` is permitted to use. The value is expressed in terms of number of megabytes, e.g. `1` equal 1 megabyte. The minimum value allowed is `1`. This is a credit based limit, existing `Http2Stream`s may cause this limit to be exceeded, but new `Http2Stream` instances will be rejected while this limit is exceeded. The current number of `Http2Stream` sessions, the current memory use of the header compression tables, current data queued to be sent, and unacknowledged `PING` and `SETTINGS` frames are all counted towards the current limit." }, { - "textRaw": "`maxHeaderListPairs` {number} Sets the maximum number of header entries. The minimum value is `4`. **Default:** `128`.", + "textRaw": "`maxHeaderListPairs` {number} Sets the maximum number of header entries. This is similar to [`http.Server#maxHeadersCount`][] or [`http.ClientRequest#maxHeadersCount`][]. The minimum value is `4`. **Default:** `128`.", "name": "maxHeaderListPairs", "type": "number", "default": "`128`", - "desc": "Sets the maximum number of header entries. The minimum value is `4`." + "desc": "Sets the maximum number of header entries. This is similar to [`http.Server#maxHeadersCount`][] or [`http.ClientRequest#maxHeadersCount`][]. The minimum value is `4`." }, { "textRaw": "`maxOutstandingPings` {number} Sets the maximum number of outstanding, unacknowledged pings. **Default:** `10`.", @@ -38168,6 +39525,13 @@ "desc": "Specifies the `Http2ServerResponse` class to use. Useful for extending the original `Http2ServerResponse`." }, { + "textRaw": "`unknownProtocolTimeout` {number} Specifies a timeout in milliseconds that a server should wait when an [`'unknownProtocol'`][] is emitted. If the socket has not been destroyed by that time the server will destroy it. **Default:** `10000`.", + "name": "unknownProtocolTimeout", + "type": "number", + "default": "`10000`", + "desc": "Specifies a timeout in milliseconds that a server should wait when an [`'unknownProtocol'`][] is emitted. If the socket has not been destroyed by that time the server will destroy it." + }, + { "textRaw": "...: Any [`net.createServer()`][] option can be provided.", "name": "...", "desc": "Any [`net.createServer()`][] option can be provided." @@ -38183,7 +39547,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns a net.Server instance that creates and manages Http2Session\ninstances.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Since there are no browsers known that support\nunencrypted HTTP/2, the use of\nhttp2.createSecureServer() is necessary when communicating\nwith browser clients.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\n\n// Create an unencrypted HTTP/2 server.\n// Since there are no browsers known that support\n// unencrypted HTTP/2, the use of `http2.createSecureServer()`\n// is necessary when communicating with browser clients.\nconst server = http2.createServer();\n\nserver.on('stream', (stream, headers) => {\n  stream.respond({\n    'content-type': 'text/html',\n    ':status': 200\n  });\n  stream.end('<h1>Hello World</h1>');\n});\n\nserver.listen(80);\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns a net.Server instance that creates and manages Http2Session\ninstances.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Since there are no browsers known that support\nunencrypted HTTP/2, the use of\nhttp2.createSecureServer() is necessary when communicating\nwith browser clients.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\n\n// Create an unencrypted HTTP/2 server.\n// Since there are no browsers known that support\n// unencrypted HTTP/2, the use of `http2.createSecureServer()`\n// is necessary when communicating with browser clients.\nconst server = http2.createServer();\n\nserver.on('stream', (stream, headers) => {\n  stream.respond({\n    'content-type': 'text/html; charset=utf-8',\n    ':status': 200\n  });\n  stream.end('<h1>Hello World</h1>');\n});\n\nserver.listen(80);\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`http2.createSecureServer(options[, onRequestHandler])`", @@ -38195,6 +39559,11 @@ ], "changes": [ { + "version": "v12.21.0", + "pr-url": "https://github.com/nodejs-private/node-private/pull/250", + "description": "Added `unknownProtocolTimeout` option with a default of 10000." + }, + { "version": [ "v12.18.0" ], @@ -38270,11 +39639,11 @@ "desc": "Sets the maximum memory that the `Http2Session` is permitted to use. The value is expressed in terms of number of megabytes, e.g. `1` equal 1 megabyte. The minimum value allowed is `1`. This is a credit based limit, existing `Http2Stream`s may cause this limit to be exceeded, but new `Http2Stream` instances will be rejected while this limit is exceeded. The current number of `Http2Stream` sessions, the current memory use of the header compression tables, current data queued to be sent, and unacknowledged `PING` and `SETTINGS` frames are all counted towards the current limit." }, { - "textRaw": "`maxHeaderListPairs` {number} Sets the maximum number of header entries. The minimum value is `4`. **Default:** `128`.", + "textRaw": "`maxHeaderListPairs` {number} Sets the maximum number of header entries. This is similar to [`http.Server#maxHeadersCount`][] or [`http.ClientRequest#maxHeadersCount`][]. The minimum value is `4`. **Default:** `128`.", "name": "maxHeaderListPairs", "type": "number", "default": "`128`", - "desc": "Sets the maximum number of header entries. The minimum value is `4`." + "desc": "Sets the maximum number of header entries. This is similar to [`http.Server#maxHeadersCount`][] or [`http.ClientRequest#maxHeadersCount`][]. The minimum value is `4`." }, { "textRaw": "`maxOutstandingPings` {number} Sets the maximum number of outstanding, unacknowledged pings. **Default:** `10`.", @@ -38361,6 +39730,13 @@ "name": "origins", "type": "string[]", "desc": "An array of origin strings to send within an `ORIGIN` frame immediately following creation of a new server `Http2Session`." + }, + { + "textRaw": "`unknownProtocolTimeout` {number} Specifies a timeout in milliseconds that a server should wait when an [`'unknownProtocol'`][] event is emitted. If the socket has not been destroyed by that time the server will destroy it. **Default:** `10000`.", + "name": "unknownProtocolTimeout", + "type": "number", + "default": "`10000`", + "desc": "Specifies a timeout in milliseconds that a server should wait when an [`'unknownProtocol'`][] event is emitted. If the socket has not been destroyed by that time the server will destroy it." } ] }, @@ -38373,7 +39749,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns a tls.Server instance that creates and manages Http2Session\ninstances.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst fs = require('fs');\n\nconst options = {\n  key: fs.readFileSync('server-key.pem'),\n  cert: fs.readFileSync('server-cert.pem')\n};\n\n// Create a secure HTTP/2 server\nconst server = http2.createSecureServer(options);\n\nserver.on('stream', (stream, headers) => {\n  stream.respond({\n    'content-type': 'text/html',\n    ':status': 200\n  });\n  stream.end('<h1>Hello World</h1>');\n});\n\nserver.listen(80);\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns a tls.Server instance that creates and manages Http2Session\ninstances.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst fs = require('fs');\n\nconst options = {\n  key: fs.readFileSync('server-key.pem'),\n  cert: fs.readFileSync('server-cert.pem')\n};\n\n// Create a secure HTTP/2 server\nconst server = http2.createSecureServer(options);\n\nserver.on('stream', (stream, headers) => {\n  stream.respond({\n    'content-type': 'text/html; charset=utf-8',\n    ':status': 200\n  });\n  stream.end('<h1>Hello World</h1>');\n});\n\nserver.listen(80);\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`http2.connect(authority[, options][, listener])`", @@ -38385,6 +39761,11 @@ ], "changes": [ { + "version": "v12.21.0", + "pr-url": "https://github.com/nodejs-private/node-private/pull/250", + "description": "Added `unknownProtocolTimeout` option with a default of 10000." + }, + { "version": [ "v12.18.0" ], @@ -38444,11 +39825,11 @@ "desc": "Sets the maximum memory that the `Http2Session` is permitted to use. The value is expressed in terms of number of megabytes, e.g. `1` equal 1 megabyte. The minimum value allowed is `1`. This is a credit based limit, existing `Http2Stream`s may cause this limit to be exceeded, but new `Http2Stream` instances will be rejected while this limit is exceeded. The current number of `Http2Stream` sessions, the current memory use of the header compression tables, current data queued to be sent, and unacknowledged `PING` and `SETTINGS` frames are all counted towards the current limit." }, { - "textRaw": "`maxHeaderListPairs` {number} Sets the maximum number of header entries. The minimum value is `1`. **Default:** `128`.", + "textRaw": "`maxHeaderListPairs` {number} Sets the maximum number of header entries. This is similar to [`http.Server#maxHeadersCount`][] or [`http.ClientRequest#maxHeadersCount`][]. The minimum value is `1`. **Default:** `128`.", "name": "maxHeaderListPairs", "type": "number", "default": "`128`", - "desc": "Sets the maximum number of header entries. The minimum value is `1`." + "desc": "Sets the maximum number of header entries. This is similar to [`http.Server#maxHeadersCount`][] or [`http.ClientRequest#maxHeadersCount`][]. The minimum value is `1`." }, { "textRaw": "`maxOutstandingPings` {number} Sets the maximum number of outstanding, unacknowledged pings. **Default:** `10`.", @@ -38535,6 +39916,13 @@ "textRaw": "...: Any [`net.connect()`][] or [`tls.connect()`][] options can be provided.", "name": "...", "desc": "Any [`net.connect()`][] or [`tls.connect()`][] options can be provided." + }, + { + "textRaw": "`unknownProtocolTimeout` {number} Specifies a timeout in milliseconds that a server should wait when an [`'unknownProtocol'`][] event is emitted. If the socket has not been destroyed by that time the server will destroy it. **Default:** `10000`.", + "name": "unknownProtocolTimeout", + "type": "number", + "default": "`10000`", + "desc": "Specifies a timeout in milliseconds that a server should wait when an [`'unknownProtocol'`][] event is emitted. If the socket has not been destroyed by that time the server will destroy it." } ] }, @@ -38641,11 +40029,11 @@ }, "modules": [ { - "textRaw": "Error Codes for `RST_STREAM` and `GOAWAY`", + "textRaw": "Error codes for `RST_STREAM` and `GOAWAY`", "name": "error_codes_for_`rst_stream`_and_`goaway`", "desc": "

                                                                                                                                                                                                                                                      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                      ValueNameConstant
                                                                                                                                                                                                                                                      0x00No Errorhttp2.constants.NGHTTP2_NO_ERROR
                                                                                                                                                                                                                                                      0x01Protocol Errorhttp2.constants.NGHTTP2_PROTOCOL_ERROR
                                                                                                                                                                                                                                                      0x02Internal Errorhttp2.constants.NGHTTP2_INTERNAL_ERROR
                                                                                                                                                                                                                                                      0x03Flow Control Errorhttp2.constants.NGHTTP2_FLOW_CONTROL_ERROR
                                                                                                                                                                                                                                                      0x04Settings Timeouthttp2.constants.NGHTTP2_SETTINGS_TIMEOUT
                                                                                                                                                                                                                                                      0x05Stream Closedhttp2.constants.NGHTTP2_STREAM_CLOSED
                                                                                                                                                                                                                                                      0x06Frame Size Errorhttp2.constants.NGHTTP2_FRAME_SIZE_ERROR
                                                                                                                                                                                                                                                      0x07Refused Streamhttp2.constants.NGHTTP2_REFUSED_STREAM
                                                                                                                                                                                                                                                      0x08Cancelhttp2.constants.NGHTTP2_CANCEL
                                                                                                                                                                                                                                                      0x09Compression Errorhttp2.constants.NGHTTP2_COMPRESSION_ERROR
                                                                                                                                                                                                                                                      0x0aConnect Errorhttp2.constants.NGHTTP2_CONNECT_ERROR
                                                                                                                                                                                                                                                      0x0bEnhance Your Calmhttp2.constants.NGHTTP2_ENHANCE_YOUR_CALM
                                                                                                                                                                                                                                                      0x0cInadequate Securityhttp2.constants.NGHTTP2_INADEQUATE_SECURITY
                                                                                                                                                                                                                                                      0x0dHTTP/1.1 Requiredhttp2.constants.NGHTTP2_HTTP_1_1_REQUIRED
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The 'timeout' event is emitted when there is no activity on the Server for\na given number of milliseconds set using http2server.setTimeout().

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Error Codes for `RST_STREAM` and `GOAWAY`" + "displayName": "Error codes for `RST_STREAM` and `GOAWAY`" } ] } @@ -38656,7 +40044,7 @@ { "textRaw": "Compatibility API", "name": "compatibility_api", - "desc": "

                                                                                                                                                                                                                                                      The Compatibility API has the goal of providing a similar developer experience\nof HTTP/1 when using HTTP/2, making it possible to develop applications\nthat support both HTTP/1 and HTTP/2. This API targets only the\npublic API of the HTTP/1. However many modules use internal\nmethods or state, and those are not supported as it is a completely\ndifferent implementation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example creates an HTTP/2 server using the compatibility\nAPI:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer((req, res) => {\n  res.setHeader('Content-Type', 'text/html');\n  res.setHeader('X-Foo', 'bar');\n  res.writeHead(200, { 'Content-Type': 'text/plain' });\n  res.end('ok');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to create a mixed HTTPS and HTTP/2 server, refer to the\nALPN negotiation section.\nUpgrading from non-tls HTTP/1 servers is not supported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The HTTP/2 compatibility API is composed of Http2ServerRequest and\nHttp2ServerResponse. They aim at API compatibility with HTTP/1, but\nthey do not hide the differences between the protocols. As an example,\nthe status message for HTTP codes is ignored.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The Compatibility API has the goal of providing a similar developer experience\nof HTTP/1 when using HTTP/2, making it possible to develop applications\nthat support both HTTP/1 and HTTP/2. This API targets only the\npublic API of the HTTP/1. However many modules use internal\nmethods or state, and those are not supported as it is a completely\ndifferent implementation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example creates an HTTP/2 server using the compatibility\nAPI:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http2 = require('http2');\nconst server = http2.createServer((req, res) => {\n  res.setHeader('Content-Type', 'text/html');\n  res.setHeader('X-Foo', 'bar');\n  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });\n  res.end('ok');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to create a mixed HTTPS and HTTP/2 server, refer to the\nALPN negotiation section.\nUpgrading from non-tls HTTP/1 servers is not supported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The HTTP/2 compatibility API is composed of Http2ServerRequest and\nHttp2ServerResponse. They aim at API compatibility with HTTP/1, but\nthey do not hide the differences between the protocols. As an example,\nthe status message for HTTP codes is ignored.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "ALPN negotiation", @@ -38861,7 +40249,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Request URL string. This contains only the URL that is\npresent in the actual HTTP request. If the request is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      GET /status?name=ryan HTTP/1.1\\r\\n\nAccept: text/plain\\r\\n\n\\r\\n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Then request.url will be:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      '/status?name=ryan'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To parse the url into its parts require('url').parse(request.url)\ncan be used:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> require('url').parse('/status?name=ryan')\nUrl {\n  protocol: null,\n  slashes: null,\n  auth: null,\n  host: null,\n  port: null,\n  hostname: null,\n  hash: null,\n  search: '?name=ryan',\n  query: 'name=ryan',\n  pathname: '/status',\n  path: '/status?name=ryan',\n  href: '/status?name=ryan' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To extract the parameters from the query string, the\nrequire('querystring').parse function can be used, or\ntrue can be passed as the second argument to require('url').parse.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> require('url').parse('/status?name=ryan', true)\nUrl {\n  protocol: null,\n  slashes: null,\n  auth: null,\n  host: null,\n  port: null,\n  hostname: null,\n  hash: null,\n  search: '?name=ryan',\n  query: { name: 'ryan' },\n  pathname: '/status',\n  path: '/status?name=ryan',\n  href: '/status?name=ryan' }\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Request URL string. This contains only the URL that is present in the actual\nHTTP request. If the request is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      GET /status?name=ryan HTTP/1.1\nAccept: text/plain\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Then request.url will be:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      '/status?name=ryan'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To parse the url into its parts, require('url').parse(request.url)\ncan be used:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> require('url').parse('/status?name=ryan')\nUrl {\n  protocol: null,\n  slashes: null,\n  auth: null,\n  host: null,\n  port: null,\n  hostname: null,\n  hash: null,\n  search: '?name=ryan',\n  query: 'name=ryan',\n  pathname: '/status',\n  path: '/status?name=ryan',\n  href: '/status?name=ryan' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To obtain the parameters from the query string, use the\nrequire('querystring').parse() function or pass\ntrue as the second argument to require('url').parse().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> require('url').parse('/status?name=ryan', true)\nUrl {\n  protocol: null,\n  slashes: null,\n  auth: null,\n  host: null,\n  port: null,\n  hostname: null,\n  hash: null,\n  search: '?name=ryan',\n  query: { name: 'ryan' },\n  pathname: '/status',\n  path: '/status?name=ryan',\n  href: '/status?name=ryan' }\n
                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -39179,7 +40567,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets a single header value for implicit headers. If this header already exists\nin the to-be-sent headers, its value will be replaced. Use an array of strings\nhere to send multiple headers with the same name.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      response.setHeader('Content-Type', 'text/html');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      or

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Attempting to set a header field name or value that contains invalid characters\nwill result in a TypeError being thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When headers have been set with response.setHeader(), they will be merged\nwith any headers passed to response.writeHead(), with the headers passed\nto response.writeHead() given precedence.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Returns content-type = text/plain\nconst server = http2.createServer((req, res) => {\n  res.setHeader('Content-Type', 'text/html');\n  res.setHeader('X-Foo', 'bar');\n  res.writeHead(200, { 'Content-Type': 'text/plain' });\n  res.end('ok');\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets a single header value for implicit headers. If this header already exists\nin the to-be-sent headers, its value will be replaced. Use an array of strings\nhere to send multiple headers with the same name.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      response.setHeader('Content-Type', 'text/html; charset=utf-8');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      or

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Attempting to set a header field name or value that contains invalid characters\nwill result in a TypeError being thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When headers have been set with response.setHeader(), they will be merged\nwith any headers passed to response.writeHead(), with the headers passed\nto response.writeHead() given precedence.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Returns content-type = text/plain\nconst server = http2.createServer((req, res) => {\n  res.setHeader('Content-Type', 'text/html; charset=utf-8');\n  res.setHeader('X-Foo', 'bar');\n  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });\n  res.end('ok');\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`response.setTimeout(msecs[, callback])`", @@ -39311,7 +40699,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sends a response header to the request. The status code is a 3-digit HTTP\nstatus code, like 404. The last argument, headers, are the response headers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns a reference to the Http2ServerResponse, so that calls can be chained.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For compatibility with HTTP/1, a human-readable statusMessage may be\npassed as the second argument. However, because the statusMessage has no\nmeaning within HTTP/2, the argument will have no effect and a process warning\nwill be emitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const body = 'hello world';\nresponse.writeHead(200, {\n  'Content-Length': Buffer.byteLength(body),\n  'Content-Type': 'text/plain' });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Content-Length is given in bytes not characters. The\nBuffer.byteLength() API may be used to determine the number of bytes in a\ngiven encoding. On outbound messages, Node.js does not check if Content-Length\nand the length of the body being transmitted are equal or not. However, when\nreceiving messages, Node.js will automatically reject messages when the\nContent-Length does not match the actual payload size.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method may be called at most one time on a message before\nresponse.end() is called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If response.write() or response.end() are called before calling\nthis, the implicit/mutable headers will be calculated and call this function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When headers have been set with response.setHeader(), they will be merged\nwith any headers passed to response.writeHead(), with the headers passed\nto response.writeHead() given precedence.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Returns content-type = text/plain\nconst server = http2.createServer((req, res) => {\n  res.setHeader('Content-Type', 'text/html');\n  res.setHeader('X-Foo', 'bar');\n  res.writeHead(200, { 'Content-Type': 'text/plain' });\n  res.end('ok');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Attempting to set a header field name or value that contains invalid characters\nwill result in a TypeError being thrown.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sends a response header to the request. The status code is a 3-digit HTTP\nstatus code, like 404. The last argument, headers, are the response headers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns a reference to the Http2ServerResponse, so that calls can be chained.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For compatibility with HTTP/1, a human-readable statusMessage may be\npassed as the second argument. However, because the statusMessage has no\nmeaning within HTTP/2, the argument will have no effect and a process warning\nwill be emitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const body = 'hello world';\nresponse.writeHead(200, {\n  'Content-Length': Buffer.byteLength(body),\n  'Content-Type': 'text/plain; charset=utf-8' });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Content-Length is given in bytes not characters. The\nBuffer.byteLength() API may be used to determine the number of bytes in a\ngiven encoding. On outbound messages, Node.js does not check if Content-Length\nand the length of the body being transmitted are equal or not. However, when\nreceiving messages, Node.js will automatically reject messages when the\nContent-Length does not match the actual payload size.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method may be called at most one time on a message before\nresponse.end() is called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If response.write() or response.end() are called before calling\nthis, the implicit/mutable headers will be calculated and call this function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When headers have been set with response.setHeader(), they will be merged\nwith any headers passed to response.writeHead(), with the headers passed\nto response.writeHead() given precedence.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Returns content-type = text/plain\nconst server = http2.createServer((req, res) => {\n  res.setHeader('Content-Type', 'text/html; charset=utf-8');\n  res.setHeader('X-Foo', 'bar');\n  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });\n  res.end('ok');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Attempting to set a header field name or value that contains invalid characters\nwill result in a TypeError being thrown.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`response.createPushResponse(headers, callback)`", @@ -39478,11 +40866,11 @@ "displayName": "Compatibility API" }, { - "textRaw": "Collecting HTTP/2 Performance Metrics", + "textRaw": "Collecting HTTP/2 performance metrics", "name": "collecting_http/2_performance_metrics", "desc": "

                                                                                                                                                                                                                                                      The Performance Observer API can be used to collect basic performance\nmetrics for each Http2Session and Http2Stream instance.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { PerformanceObserver } = require('perf_hooks');\n\nconst obs = new PerformanceObserver((items) => {\n  const entry = items.getEntries()[0];\n  console.log(entry.entryType);  // prints 'http2'\n  if (entry.name === 'Http2Session') {\n    // Entry contains statistics about the Http2Session\n  } else if (entry.name === 'Http2Stream') {\n    // Entry contains statistics about the Http2Stream\n  }\n});\nobs.observe({ entryTypes: ['http2'] });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The entryType property of the PerformanceEntry will be equal to 'http2'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The name property of the PerformanceEntry will be equal to either\n'Http2Stream' or 'Http2Session'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If name is equal to Http2Stream, the PerformanceEntry will contain the\nfollowing additional properties:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • bytesRead <number> The number of DATA frame bytes received for this\nHttp2Stream.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • bytesWritten <number> The number of DATA frame bytes sent for this\nHttp2Stream.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • id <number> The identifier of the associated Http2Stream
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • timeToFirstByte <number> The number of milliseconds elapsed between the\nPerformanceEntry startTime and the reception of the first DATA frame.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • timeToFirstByteSent <number> The number of milliseconds elapsed between\nthe PerformanceEntry startTime and sending of the first DATA frame.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • timeToFirstHeader <number> The number of milliseconds elapsed between the\nPerformanceEntry startTime and the reception of the first header.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If name is equal to Http2Session, the PerformanceEntry will contain the\nfollowing additional properties:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • bytesRead <number> The number of bytes received for this Http2Session.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • bytesWritten <number> The number of bytes sent for this Http2Session.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • framesReceived <number> The number of HTTP/2 frames received by the\nHttp2Session.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • framesSent <number> The number of HTTP/2 frames sent by the Http2Session.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • maxConcurrentStreams <number> The maximum number of streams concurrently\nopen during the lifetime of the Http2Session.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • pingRTT <number> The number of milliseconds elapsed since the transmission\nof a PING frame and the reception of its acknowledgment. Only present if\na PING frame has been sent on the Http2Session.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • streamAverageDuration <number> The average duration (in milliseconds) for\nall Http2Stream instances.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • streamCount <number> The number of Http2Stream instances processed by\nthe Http2Session.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • type <string> Either 'server' or 'client' to identify the type of\nHttp2Session.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Collecting HTTP/2 Performance Metrics" + "displayName": "Collecting HTTP/2 performance metrics" } ], "type": "module", @@ -39494,7 +40882,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a\nseparate module.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/https.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      HTTPS is the HTTP protocol over TLS/SSL. In Node.js this is implemented as a\nseparate module.

                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `https.Agent`", @@ -39762,7 +41150,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Like http.get() but for HTTPS.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      options can be an object, a string, or a URL object. If options is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const https = require('https');\n\nhttps.get('https://encrypted.google.com/', (res) => {\n  console.log('statusCode:', res.statusCode);\n  console.log('headers:', res.headers);\n\n  res.on('data', (d) => {\n    process.stdout.write(d);\n  });\n\n}).on('error', (e) => {\n  console.error(e);\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Like http.get() but for HTTPS.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      options can be an object, a string, or a URL object. If options is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const https = require('https');\n\nhttps.get('https://encrypted.google.com/', (res) => {\n  console.log('statusCode:', res.statusCode);\n  console.log('headers:', res.headers);\n\n  res.on('data', (d) => {\n    process.stdout.write(d);\n  });\n\n}).on('error', (e) => {\n  console.error(e);\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`https.get(url[, options][, callback])`", @@ -39807,7 +41195,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Like http.get() but for HTTPS.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      options can be an object, a string, or a URL object. If options is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const https = require('https');\n\nhttps.get('https://encrypted.google.com/', (res) => {\n  console.log('statusCode:', res.statusCode);\n  console.log('headers:', res.headers);\n\n  res.on('data', (d) => {\n    process.stdout.write(d);\n  });\n\n}).on('error', (e) => {\n  console.error(e);\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Like http.get() but for HTTPS.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      options can be an object, a string, or a URL object. If options is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const https = require('https');\n\nhttps.get('https://encrypted.google.com/', (res) => {\n  console.log('statusCode:', res.statusCode);\n  console.log('headers:', res.headers);\n\n  res.on('data', (d) => {\n    process.stdout.write(d);\n  });\n\n}).on('error', (e) => {\n  console.error(e);\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`https.request(options[, callback])`", @@ -39874,7 +41262,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Makes a request to a secure web server.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following additional options from tls.connect() are also accepted:\nca, cert, ciphers, clientCertEngine, crl, dhparam, ecdhCurve,\nhonorCipherOrder, key, passphrase, pfx, rejectUnauthorized,\nsecureOptions, secureProtocol, servername, sessionIdContext.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      options can be an object, a string, or a URL object. If options is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const https = require('https');\n\nconst options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET'\n};\n\nconst req = https.request(options, (res) => {\n  console.log('statusCode:', res.statusCode);\n  console.log('headers:', res.headers);\n\n  res.on('data', (d) => {\n    process.stdout.write(d);\n  });\n});\n\nreq.on('error', (e) => {\n  console.error(e);\n});\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using options from tls.connect():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),\n  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')\n};\noptions.agent = new https.Agent(options);\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, opt out of connection pooling by not using an Agent.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),\n  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),\n  agent: false\n};\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a URL as options:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = new URL('https://abc:xyz@example.com');\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example pinning on certificate fingerprint, or the public key (similar to\npin-sha256):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tls = require('tls');\nconst https = require('https');\nconst crypto = require('crypto');\n\nfunction sha256(s) {\n  return crypto.createHash('sha256').update(s).digest('base64');\n}\nconst options = {\n  hostname: 'github.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  checkServerIdentity: function(host, cert) {\n    // Make sure the certificate is issued to the host we are connected to\n    const err = tls.checkServerIdentity(host, cert);\n    if (err) {\n      return err;\n    }\n\n    // Pin the public key, similar to HPKP pin-sha25 pinning\n    const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=';\n    if (sha256(cert.pubkey) !== pubkey256) {\n      const msg = 'Certificate verification error: ' +\n        `The public key of '${cert.subject.CN}' ` +\n        'does not match our pinned fingerprint';\n      return new Error(msg);\n    }\n\n    // Pin the exact certificate, rather than the pub key\n    const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' +\n      'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16';\n    if (cert.fingerprint256 !== cert256) {\n      const msg = 'Certificate verification error: ' +\n        `The certificate of '${cert.subject.CN}' ` +\n        'does not match our pinned fingerprint';\n      return new Error(msg);\n    }\n\n    // This loop is informational only.\n    // Print the certificate and public key fingerprints of all certs in the\n    // chain. Its common to pin the public key of the issuer on the public\n    // internet, while pinning the public key of the service in sensitive\n    // environments.\n    do {\n      console.log('Subject Common Name:', cert.subject.CN);\n      console.log('  Certificate SHA256 fingerprint:', cert.fingerprint256);\n\n      hash = crypto.createHash('sha256');\n      console.log('  Public key ping-sha256:', sha256(cert.pubkey));\n\n      lastprint256 = cert.fingerprint256;\n      cert = cert.issuerCertificate;\n    } while (cert.fingerprint256 !== lastprint256);\n\n  },\n};\n\noptions.agent = new https.Agent(options);\nconst req = https.request(options, (res) => {\n  console.log('All OK. Server matched our pinned cert or public key');\n  console.log('statusCode:', res.statusCode);\n  // Print the HPKP values\n  console.log('headers:', res.headers['public-key-pins']);\n\n  res.on('data', (d) => {});\n});\n\nreq.on('error', (e) => {\n  console.error(e.message);\n});\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Outputs for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Subject Common Name: github.com\n  Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16\n  Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=\nSubject Common Name: DigiCert SHA2 Extended Validation Server CA\n  Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A\n  Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\nSubject Common Name: DigiCert High Assurance EV Root CA\n  Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF\n  Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\nAll OK. Server matched our pinned cert or public key\nstatusCode: 200\nheaders: max-age=0; pin-sha256=\"WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\"; pin-sha256=\"RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\"; pin-sha256=\"k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=\"; pin-sha256=\"K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q=\"; pin-sha256=\"IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=\"; pin-sha256=\"iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=\"; pin-sha256=\"LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A=\"; includeSubDomains\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Makes a request to a secure web server.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following additional options from tls.connect() are also accepted:\nca, cert, ciphers, clientCertEngine, crl, dhparam, ecdhCurve,\nhonorCipherOrder, key, passphrase, pfx, rejectUnauthorized,\nsecureOptions, secureProtocol, servername, sessionIdContext.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      options can be an object, a string, or a URL object. If options is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const https = require('https');\n\nconst options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET'\n};\n\nconst req = https.request(options, (res) => {\n  console.log('statusCode:', res.statusCode);\n  console.log('headers:', res.headers);\n\n  res.on('data', (d) => {\n    process.stdout.write(d);\n  });\n});\n\nreq.on('error', (e) => {\n  console.error(e);\n});\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using options from tls.connect():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),\n  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')\n};\noptions.agent = new https.Agent(options);\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, opt out of connection pooling by not using an Agent.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),\n  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),\n  agent: false\n};\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a URL as options:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = new URL('https://abc:xyz@example.com');\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example pinning on certificate fingerprint, or the public key (similar to\npin-sha256):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tls = require('tls');\nconst https = require('https');\nconst crypto = require('crypto');\n\nfunction sha256(s) {\n  return crypto.createHash('sha256').update(s).digest('base64');\n}\nconst options = {\n  hostname: 'github.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  checkServerIdentity: function(host, cert) {\n    // Make sure the certificate is issued to the host we are connected to\n    const err = tls.checkServerIdentity(host, cert);\n    if (err) {\n      return err;\n    }\n\n    // Pin the public key, similar to HPKP pin-sha25 pinning\n    const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=';\n    if (sha256(cert.pubkey) !== pubkey256) {\n      const msg = 'Certificate verification error: ' +\n        `The public key of '${cert.subject.CN}' ` +\n        'does not match our pinned fingerprint';\n      return new Error(msg);\n    }\n\n    // Pin the exact certificate, rather than the pub key\n    const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' +\n      'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16';\n    if (cert.fingerprint256 !== cert256) {\n      const msg = 'Certificate verification error: ' +\n        `The certificate of '${cert.subject.CN}' ` +\n        'does not match our pinned fingerprint';\n      return new Error(msg);\n    }\n\n    // This loop is informational only.\n    // Print the certificate and public key fingerprints of all certs in the\n    // chain. Its common to pin the public key of the issuer on the public\n    // internet, while pinning the public key of the service in sensitive\n    // environments.\n    do {\n      console.log('Subject Common Name:', cert.subject.CN);\n      console.log('  Certificate SHA256 fingerprint:', cert.fingerprint256);\n\n      hash = crypto.createHash('sha256');\n      console.log('  Public key ping-sha256:', sha256(cert.pubkey));\n\n      lastprint256 = cert.fingerprint256;\n      cert = cert.issuerCertificate;\n    } while (cert.fingerprint256 !== lastprint256);\n\n  },\n};\n\noptions.agent = new https.Agent(options);\nconst req = https.request(options, (res) => {\n  console.log('All OK. Server matched our pinned cert or public key');\n  console.log('statusCode:', res.statusCode);\n  // Print the HPKP values\n  console.log('headers:', res.headers['public-key-pins']);\n\n  res.on('data', (d) => {});\n});\n\nreq.on('error', (e) => {\n  console.error(e.message);\n});\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Outputs for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Subject Common Name: github.com\n  Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16\n  Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=\nSubject Common Name: DigiCert SHA2 Extended Validation Server CA\n  Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A\n  Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\nSubject Common Name: DigiCert High Assurance EV Root CA\n  Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF\n  Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\nAll OK. Server matched our pinned cert or public key\nstatusCode: 200\nheaders: max-age=0; pin-sha256=\"WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\"; pin-sha256=\"RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\"; pin-sha256=\"k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=\"; pin-sha256=\"K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q=\"; pin-sha256=\"IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=\"; pin-sha256=\"iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=\"; pin-sha256=\"LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A=\"; includeSubDomains\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`https.request(url[, options][, callback])`", @@ -39941,7 +41329,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Makes a request to a secure web server.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following additional options from tls.connect() are also accepted:\nca, cert, ciphers, clientCertEngine, crl, dhparam, ecdhCurve,\nhonorCipherOrder, key, passphrase, pfx, rejectUnauthorized,\nsecureOptions, secureProtocol, servername, sessionIdContext.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      options can be an object, a string, or a URL object. If options is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const https = require('https');\n\nconst options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET'\n};\n\nconst req = https.request(options, (res) => {\n  console.log('statusCode:', res.statusCode);\n  console.log('headers:', res.headers);\n\n  res.on('data', (d) => {\n    process.stdout.write(d);\n  });\n});\n\nreq.on('error', (e) => {\n  console.error(e);\n});\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using options from tls.connect():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),\n  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')\n};\noptions.agent = new https.Agent(options);\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, opt out of connection pooling by not using an Agent.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),\n  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),\n  agent: false\n};\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a URL as options:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = new URL('https://abc:xyz@example.com');\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example pinning on certificate fingerprint, or the public key (similar to\npin-sha256):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tls = require('tls');\nconst https = require('https');\nconst crypto = require('crypto');\n\nfunction sha256(s) {\n  return crypto.createHash('sha256').update(s).digest('base64');\n}\nconst options = {\n  hostname: 'github.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  checkServerIdentity: function(host, cert) {\n    // Make sure the certificate is issued to the host we are connected to\n    const err = tls.checkServerIdentity(host, cert);\n    if (err) {\n      return err;\n    }\n\n    // Pin the public key, similar to HPKP pin-sha25 pinning\n    const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=';\n    if (sha256(cert.pubkey) !== pubkey256) {\n      const msg = 'Certificate verification error: ' +\n        `The public key of '${cert.subject.CN}' ` +\n        'does not match our pinned fingerprint';\n      return new Error(msg);\n    }\n\n    // Pin the exact certificate, rather than the pub key\n    const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' +\n      'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16';\n    if (cert.fingerprint256 !== cert256) {\n      const msg = 'Certificate verification error: ' +\n        `The certificate of '${cert.subject.CN}' ` +\n        'does not match our pinned fingerprint';\n      return new Error(msg);\n    }\n\n    // This loop is informational only.\n    // Print the certificate and public key fingerprints of all certs in the\n    // chain. Its common to pin the public key of the issuer on the public\n    // internet, while pinning the public key of the service in sensitive\n    // environments.\n    do {\n      console.log('Subject Common Name:', cert.subject.CN);\n      console.log('  Certificate SHA256 fingerprint:', cert.fingerprint256);\n\n      hash = crypto.createHash('sha256');\n      console.log('  Public key ping-sha256:', sha256(cert.pubkey));\n\n      lastprint256 = cert.fingerprint256;\n      cert = cert.issuerCertificate;\n    } while (cert.fingerprint256 !== lastprint256);\n\n  },\n};\n\noptions.agent = new https.Agent(options);\nconst req = https.request(options, (res) => {\n  console.log('All OK. Server matched our pinned cert or public key');\n  console.log('statusCode:', res.statusCode);\n  // Print the HPKP values\n  console.log('headers:', res.headers['public-key-pins']);\n\n  res.on('data', (d) => {});\n});\n\nreq.on('error', (e) => {\n  console.error(e.message);\n});\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Outputs for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Subject Common Name: github.com\n  Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16\n  Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=\nSubject Common Name: DigiCert SHA2 Extended Validation Server CA\n  Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A\n  Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\nSubject Common Name: DigiCert High Assurance EV Root CA\n  Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF\n  Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\nAll OK. Server matched our pinned cert or public key\nstatusCode: 200\nheaders: max-age=0; pin-sha256=\"WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\"; pin-sha256=\"RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\"; pin-sha256=\"k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=\"; pin-sha256=\"K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q=\"; pin-sha256=\"IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=\"; pin-sha256=\"iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=\"; pin-sha256=\"LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A=\"; includeSubDomains\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Makes a request to a secure web server.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following additional options from tls.connect() are also accepted:\nca, cert, ciphers, clientCertEngine, crl, dhparam, ecdhCurve,\nhonorCipherOrder, key, passphrase, pfx, rejectUnauthorized,\nsecureOptions, secureProtocol, servername, sessionIdContext.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      options can be an object, a string, or a URL object. If options is a\nstring, it is automatically parsed with new URL(). If it is a URL\nobject, it will be automatically converted to an ordinary options object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const https = require('https');\n\nconst options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET'\n};\n\nconst req = https.request(options, (res) => {\n  console.log('statusCode:', res.statusCode);\n  console.log('headers:', res.headers);\n\n  res.on('data', (d) => {\n    process.stdout.write(d);\n  });\n});\n\nreq.on('error', (e) => {\n  console.error(e);\n});\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using options from tls.connect():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),\n  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')\n};\noptions.agent = new https.Agent(options);\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, opt out of connection pooling by not using an Agent.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = {\n  hostname: 'encrypted.google.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),\n  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),\n  agent: false\n};\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example using a URL as options:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const options = new URL('https://abc:xyz@example.com');\n\nconst req = https.request(options, (res) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example pinning on certificate fingerprint, or the public key (similar to\npin-sha256):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tls = require('tls');\nconst https = require('https');\nconst crypto = require('crypto');\n\nfunction sha256(s) {\n  return crypto.createHash('sha256').update(s).digest('base64');\n}\nconst options = {\n  hostname: 'github.com',\n  port: 443,\n  path: '/',\n  method: 'GET',\n  checkServerIdentity: function(host, cert) {\n    // Make sure the certificate is issued to the host we are connected to\n    const err = tls.checkServerIdentity(host, cert);\n    if (err) {\n      return err;\n    }\n\n    // Pin the public key, similar to HPKP pin-sha25 pinning\n    const pubkey256 = 'pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=';\n    if (sha256(cert.pubkey) !== pubkey256) {\n      const msg = 'Certificate verification error: ' +\n        `The public key of '${cert.subject.CN}' ` +\n        'does not match our pinned fingerprint';\n      return new Error(msg);\n    }\n\n    // Pin the exact certificate, rather than the pub key\n    const cert256 = '25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:' +\n      'D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16';\n    if (cert.fingerprint256 !== cert256) {\n      const msg = 'Certificate verification error: ' +\n        `The certificate of '${cert.subject.CN}' ` +\n        'does not match our pinned fingerprint';\n      return new Error(msg);\n    }\n\n    // This loop is informational only.\n    // Print the certificate and public key fingerprints of all certs in the\n    // chain. Its common to pin the public key of the issuer on the public\n    // internet, while pinning the public key of the service in sensitive\n    // environments.\n    do {\n      console.log('Subject Common Name:', cert.subject.CN);\n      console.log('  Certificate SHA256 fingerprint:', cert.fingerprint256);\n\n      hash = crypto.createHash('sha256');\n      console.log('  Public key ping-sha256:', sha256(cert.pubkey));\n\n      lastprint256 = cert.fingerprint256;\n      cert = cert.issuerCertificate;\n    } while (cert.fingerprint256 !== lastprint256);\n\n  },\n};\n\noptions.agent = new https.Agent(options);\nconst req = https.request(options, (res) => {\n  console.log('All OK. Server matched our pinned cert or public key');\n  console.log('statusCode:', res.statusCode);\n  // Print the HPKP values\n  console.log('headers:', res.headers['public-key-pins']);\n\n  res.on('data', (d) => {});\n});\n\nreq.on('error', (e) => {\n  console.error(e.message);\n});\nreq.end();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Outputs for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Subject Common Name: github.com\n  Certificate SHA256 fingerprint: 25:FE:39:32:D9:63:8C:8A:FC:A1:9A:29:87:D8:3E:4C:1D:98:DB:71:E4:1A:48:03:98:EA:22:6A:BD:8B:93:16\n  Public key ping-sha256: pL1+qb9HTMRZJmuC/bB/ZI9d302BYrrqiVuRyW+DGrU=\nSubject Common Name: DigiCert SHA2 Extended Validation Server CA\n  Certificate SHA256 fingerprint: 40:3E:06:2A:26:53:05:91:13:28:5B:AF:80:A0:D4:AE:42:2C:84:8C:9F:78:FA:D0:1F:C9:4B:C5:B8:7F:EF:1A\n  Public key ping-sha256: RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\nSubject Common Name: DigiCert High Assurance EV Root CA\n  Certificate SHA256 fingerprint: 74:31:E5:F4:C3:C1:CE:46:90:77:4F:0B:61:E0:54:40:88:3B:A9:A0:1E:D0:0B:A6:AB:D7:80:6E:D3:B1:18:CF\n  Public key ping-sha256: WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\nAll OK. Server matched our pinned cert or public key\nstatusCode: 200\nheaders: max-age=0; pin-sha256=\"WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=\"; pin-sha256=\"RRM1dGqnDFsCJXBTHky16vi1obOlCgFFn/yOhI/y+ho=\"; pin-sha256=\"k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=\"; pin-sha256=\"K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q=\"; pin-sha256=\"IQBnNBEiFuhj+8x6X8XLgh01V9Ic5/V3IRQLNFFc7v4=\"; pin-sha256=\"iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=\"; pin-sha256=\"LvRiGEjRqfzurezaWuj8Wie2gyHMrW5Q06LspMnox7A=\"; includeSubDomains\n
                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -39966,7 +41354,7 @@ "introduced_in": "v8.0.0", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The inspector module provides an API for interacting with the V8 inspector.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const inspector = require('inspector');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/inspector.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The inspector module provides an API for interacting with the V8 inspector.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const inspector = require('inspector');\n
                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`inspector.close()`", @@ -40189,18 +41577,18 @@ ], "modules": [ { - "textRaw": "CPU Profiler", + "textRaw": "CPU profiler", "name": "cpu_profiler", "desc": "

                                                                                                                                                                                                                                                      Here's an example showing how to use the CPU Profiler:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const inspector = require('inspector');\nconst fs = require('fs');\nconst session = new inspector.Session();\nsession.connect();\n\nsession.post('Profiler.enable', () => {\n  session.post('Profiler.start', () => {\n    // Invoke business logic under measurement here...\n\n    // some time later...\n    session.post('Profiler.stop', (err, { profile }) => {\n      // Write profile to disk, upload, etc.\n      if (!err) {\n        fs.writeFileSync('./profile.cpuprofile', JSON.stringify(profile));\n      }\n    });\n  });\n});\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "CPU Profiler" + "displayName": "CPU profiler" }, { - "textRaw": "Heap Profiler", + "textRaw": "Heap profiler", "name": "heap_profiler", "desc": "

                                                                                                                                                                                                                                                      Here's an example showing how to use the Heap Profiler:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const inspector = require('inspector');\nconst fs = require('fs');\nconst session = new inspector.Session();\n\nconst fd = fs.openSync('profile.heapsnapshot', 'w');\n\nsession.connect();\n\nsession.on('HeapProfiler.addHeapSnapshotChunk', (m) => {\n  fs.writeSync(fd, m.params.chunk);\n});\n\nsession.post('HeapProfiler.takeHeapSnapshot', null, (err, r) => {\n  console.log('HeapProfiler.takeHeapSnapshot done:', err, r);\n  session.disconnect();\n  fs.closeSync(fd);\n});\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Heap Profiler" + "displayName": "Heap profiler" } ], "signatures": [ @@ -40215,7 +41603,7 @@ "displayName": "Inspector" }, { - "textRaw": "Modules", + "textRaw": "Modules: CommonJS modules", "name": "module", "introduced_in": "v0.10.0", "stability": 2, @@ -40229,16 +41617,16 @@ "desc": "

                                                                                                                                                                                                                                                      When a file is run directly from Node.js, require.main is set to its\nmodule. That means that it is possible to determine whether a file has been\nrun directly by testing require.main === module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For a file foo.js, this will be true if run via node foo.js, but\nfalse if run by require('./foo').

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because module provides a filename property (normally equivalent to\n__filename), the entry point of the current application can be obtained\nby checking require.main.filename.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Addenda: Package Manager Tips", - "name": "Addenda: Package Manager Tips", + "textRaw": "Addenda: Package manager tips", + "name": "Addenda: Package manager tips", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      The semantics of the Node.js require() function were designed to be general\nenough to support reasonable directory structures. Package manager programs\nsuch as dpkg, rpm, and npm will hopefully find it possible to build\nnative packages from Node.js modules without modification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Below we give a suggested directory structure that could work:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Let's say that we wanted to have the folder at\n/usr/lib/node/<some-package>/<some-version> hold the contents of a\nspecific version of a package.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Packages can depend on one another. In order to install package foo, it\nmay be necessary to install a specific version of package bar. The bar\npackage may itself have dependencies, and in some cases, these may even collide\nor form cyclic dependencies.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Since Node.js looks up the realpath of any modules it loads (that is,\nresolves symlinks), and then looks for their dependencies in the node_modules\nfolders as described here, this\nsituation is very simple to resolve with the following architecture:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • /usr/lib/node/foo/1.2.3/: Contents of the foo package, version 1.2.3.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /usr/lib/node/bar/4.3.2/: Contents of the bar package that foo depends\non.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /usr/lib/node/foo/1.2.3/node_modules/bar: Symbolic link to\n/usr/lib/node/bar/4.3.2/.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /usr/lib/node/bar/4.3.2/node_modules/*: Symbolic links to the packages that\nbar depends on.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Thus, even if a cycle is encountered, or if there are dependency\nconflicts, every module will be able to get a version of its dependency\nthat it can use.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the code in the foo package does require('bar'), it will get the\nversion that is symlinked into /usr/lib/node/foo/1.2.3/node_modules/bar.\nThen, when the code in the bar package calls require('quux'), it'll get\nthe version that is symlinked into\n/usr/lib/node/bar/4.3.2/node_modules/quux.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Furthermore, to make the module lookup process even more optimal, rather\nthan putting packages directly in /usr/lib/node, we could put them in\n/usr/lib/node_modules/<name>/<version>. Then Node.js will not bother\nlooking for missing dependencies in /usr/node_modules or /node_modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to make modules available to the Node.js REPL, it might be useful to\nalso add the /usr/lib/node_modules folder to the $NODE_PATH environment\nvariable. Since the module lookups using node_modules folders are all\nrelative, and based on the real path of the files making the calls to\nrequire(), the packages themselves can be anywhere.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The semantics of the Node.js require() function were designed to be general\nenough to support reasonable directory structures. Package manager programs\nsuch as dpkg, rpm, and npm will hopefully find it possible to build\nnative packages from Node.js modules without modification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Below we give a suggested directory structure that could work:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Let's say that we wanted to have the folder at\n/usr/lib/node/<some-package>/<some-version> hold the contents of a\nspecific version of a package.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Packages can depend on one another. In order to install package foo, it\nmay be necessary to install a specific version of package bar. The bar\npackage may itself have dependencies, and in some cases, these may even collide\nor form cyclic dependencies.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because Node.js looks up the realpath of any modules it loads (that is, it\nresolves symlinks) and then looks for their dependencies in node_modules folders,\nthis situation can be resolved with the following architecture:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • /usr/lib/node/foo/1.2.3/: Contents of the foo package, version 1.2.3.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /usr/lib/node/bar/4.3.2/: Contents of the bar package that foo depends\non.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /usr/lib/node/foo/1.2.3/node_modules/bar: Symbolic link to\n/usr/lib/node/bar/4.3.2/.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /usr/lib/node/bar/4.3.2/node_modules/*: Symbolic links to the packages that\nbar depends on.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Thus, even if a cycle is encountered, or if there are dependency\nconflicts, every module will be able to get a version of its dependency\nthat it can use.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the code in the foo package does require('bar'), it will get the\nversion that is symlinked into /usr/lib/node/foo/1.2.3/node_modules/bar.\nThen, when the code in the bar package calls require('quux'), it'll get\nthe version that is symlinked into\n/usr/lib/node/bar/4.3.2/node_modules/quux.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Furthermore, to make the module lookup process even more optimal, rather\nthan putting packages directly in /usr/lib/node, we could put them in\n/usr/lib/node_modules/<name>/<version>. Then Node.js will not bother\nlooking for missing dependencies in /usr/node_modules or /node_modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to make modules available to the Node.js REPL, it might be useful to\nalso add the /usr/lib/node_modules folder to the $NODE_PATH environment\nvariable. Since the module lookups using node_modules folders are all\nrelative, and based on the real path of the files making the calls to\nrequire(), the packages themselves can be anywhere.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "All Together...", - "name": "All Together...", + "textRaw": "All together...", + "name": "All together...", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      To get the exact filename that will be loaded when require() is called, use\nthe require.resolve() function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Putting together all of the above, here is the high-level algorithm\nin pseudocode of what require() does:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require(X) from module at path Y\n1. If X is a core module,\n   a. return the core module\n   b. STOP\n2. If X begins with '/'\n   a. set Y to be the filesystem root\n3. If X begins with './' or '/' or '../'\n   a. LOAD_AS_FILE(Y + X)\n   b. LOAD_AS_DIRECTORY(Y + X)\n   c. THROW \"not found\"\n4. LOAD_SELF_REFERENCE(X, dirname(Y))\n5. LOAD_NODE_MODULES(X, dirname(Y))\n6. THROW \"not found\"\n\nLOAD_AS_FILE(X)\n1. If X is a file, load X as its file extension format.  STOP\n2. If X.js is a file, load X.js as JavaScript text.  STOP\n3. If X.json is a file, parse X.json to a JavaScript Object.  STOP\n4. If X.node is a file, load X.node as binary addon.  STOP\n\nLOAD_INDEX(X)\n1. If X/index.js is a file, load X/index.js as JavaScript text.  STOP\n2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP\n3. If X/index.node is a file, load X/index.node as binary addon.  STOP\n\nLOAD_AS_DIRECTORY(X)\n1. If X/package.json is a file,\n   a. Parse X/package.json, and look for \"main\" field.\n   b. If \"main\" is a falsy value, GOTO 2.\n   c. let M = X + (json main field)\n   d. LOAD_AS_FILE(M)\n   e. LOAD_INDEX(M)\n   f. LOAD_INDEX(X) DEPRECATED\n   g. THROW \"not found\"\n2. LOAD_INDEX(X)\n\nLOAD_NODE_MODULES(X, START)\n1. let DIRS = NODE_MODULES_PATHS(START)\n2. for each DIR in DIRS:\n   a. LOAD_PACKAGE_EXPORTS(DIR, X)\n   b. LOAD_AS_FILE(DIR/X)\n   c. LOAD_AS_DIRECTORY(DIR/X)\n\nNODE_MODULES_PATHS(START)\n1. let PARTS = path split(START)\n2. let I = count of PARTS - 1\n3. let DIRS = [GLOBAL_FOLDERS]\n4. while I >= 0,\n   a. if PARTS[I] = \"node_modules\" CONTINUE\n   b. DIR = path join(PARTS[0 .. I] + \"node_modules\")\n   c. DIRS = DIRS + DIR\n   d. let I = I - 1\n5. return DIRS\n\nLOAD_SELF_REFERENCE(X, START)\n1. Find the closest package scope to START.\n2. If no scope was found, return.\n3. If the `package.json` has no \"exports\", return.\n4. If the name in `package.json` isn't a prefix of X, throw \"not found\".\n5. Otherwise, load the remainder of X relative to this package as if it\n  was loaded via `LOAD_NODE_MODULES` with a name in `package.json`.\n\nLOAD_PACKAGE_EXPORTS(DIR, X)\n1. Try to interpret X as a combination of name and subpath where the name\n   may have a @scope/ prefix and the subpath begins with a slash (`/`).\n2. If X does not match this pattern or DIR/name/package.json is not a file,\n   return.\n3. Parse DIR/name/package.json, and look for \"exports\" field.\n4. If \"exports\" is null or undefined, return.\n5. If \"exports\" is an object with some keys starting with \".\" and some keys\n  not starting with \".\", throw \"invalid config\".\n6. If \"exports\" is a string, or object with no keys starting with \".\", treat\n  it as having that value as its \".\" object property.\n7. If subpath is \".\" and \"exports\" does not have a \".\" entry, return.\n8. Find the longest key in \"exports\" that the subpath starts with.\n9. If no such key can be found, throw \"not found\".\n10. let RESOLVED =\n    fileURLToPath(PACKAGE_EXPORTS_TARGET_RESOLVE(pathToFileURL(DIR/name),\n    exports[key], subpath.slice(key.length), [\"node\", \"require\"])), as defined\n    in the ESM resolver.\n11. If key ends with \"/\":\n    a. LOAD_AS_FILE(RESOLVED)\n    b. LOAD_AS_DIRECTORY(RESOLVED)\n12. Otherwise\n   a. If RESOLVED is a file, load it as its file extension format.  STOP\n13. Throw \"not found\"\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      To get the exact filename that will be loaded when require() is called, use\nthe require.resolve() function.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Putting together all of the above, here is the high-level algorithm\nin pseudocode of what require() does:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require(X) from module at path Y\n1. If X is a core module,\n   a. return the core module\n   b. STOP\n2. If X begins with '/'\n   a. set Y to be the filesystem root\n3. If X begins with './' or '/' or '../'\n   a. LOAD_AS_FILE(Y + X)\n   b. LOAD_AS_DIRECTORY(Y + X)\n   c. THROW \"not found\"\n4. If X begins with '#'\n   a. LOAD_PACKAGE_IMPORTS(X, dirname(Y))\n5. LOAD_PACKAGE_SELF(X, dirname(Y))\n6. LOAD_NODE_MODULES(X, dirname(Y))\n7. THROW \"not found\"\n\nLOAD_AS_FILE(X)\n1. If X is a file, load X as its file extension format. STOP\n2. If X.js is a file, load X.js as JavaScript text. STOP\n3. If X.json is a file, parse X.json to a JavaScript Object. STOP\n4. If X.node is a file, load X.node as binary addon. STOP\n\nLOAD_INDEX(X)\n1. If X/index.js is a file, load X/index.js as JavaScript text. STOP\n2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP\n3. If X/index.node is a file, load X/index.node as binary addon. STOP\n\nLOAD_AS_DIRECTORY(X)\n1. If X/package.json is a file,\n   a. Parse X/package.json, and look for \"main\" field.\n   b. If \"main\" is a falsy value, GOTO 2.\n   c. let M = X + (json main field)\n   d. LOAD_AS_FILE(M)\n   e. LOAD_INDEX(M)\n   f. LOAD_INDEX(X) DEPRECATED\n   g. THROW \"not found\"\n2. LOAD_INDEX(X)\n\nLOAD_NODE_MODULES(X, START)\n1. let DIRS = NODE_MODULES_PATHS(START)\n2. for each DIR in DIRS:\n   a. LOAD_PACKAGE_EXPORTS(X, DIR)\n   b. LOAD_AS_FILE(DIR/X)\n   c. LOAD_AS_DIRECTORY(DIR/X)\n\nNODE_MODULES_PATHS(START)\n1. let PARTS = path split(START)\n2. let I = count of PARTS - 1\n3. let DIRS = [GLOBAL_FOLDERS]\n4. while I >= 0,\n   a. if PARTS[I] = \"node_modules\" CONTINUE\n   b. DIR = path join(PARTS[0 .. I] + \"node_modules\")\n   c. DIRS = DIRS + DIR\n   d. let I = I - 1\n5. return DIRS\n\nLOAD_PACKAGE_IMPORTS(X, DIR)\n1. Find the closest package scope SCOPE to DIR.\n2. If no scope was found, return.\n3. If the SCOPE/package.json \"imports\" is null or undefined, return.\n4. let MATCH = PACKAGE_IMPORTS_RESOLVE(X, pathToFileURL(SCOPE),\n  [\"node\", \"require\"]) defined in the ESM resolver.\n5. RESOLVE_ESM_MATCH(MATCH).\n\nLOAD_PACKAGE_EXPORTS(X, DIR)\n1. Try to interpret X as a combination of NAME and SUBPATH where the name\n   may have a @scope/ prefix and the subpath begins with a slash (`/`).\n2. If X does not match this pattern or DIR/NAME/package.json is not a file,\n   return.\n3. Parse DIR/NAME/package.json, and look for \"exports\" field.\n4. If \"exports\" is null or undefined, return.\n5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(DIR/NAME), \".\" + SUBPATH,\n   `package.json` \"exports\", [\"node\", \"require\"]) defined in the ESM resolver.\n6. RESOLVE_ESM_MATCH(MATCH)\n\nLOAD_PACKAGE_SELF(X, DIR)\n1. Find the closest package scope SCOPE to DIR.\n2. If no scope was found, return.\n3. If the SCOPE/package.json \"exports\" is null or undefined, return.\n4. If the SCOPE/package.json \"name\" is not the first segment of X, return.\n5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(SCOPE),\n   \".\" + X.slice(\"name\".length), `package.json` \"exports\", [\"node\", \"require\"])\n   defined in the ESM resolver.\n6. RESOLVE_ESM_MATCH(MATCH)\n\nRESOLVE_ESM_MATCH(MATCH)\n1. let { RESOLVED, EXACT } = MATCH\n2. let RESOLVED_PATH = fileURLToPath(RESOLVED)\n3. If EXACT is true,\n   a. If the file at RESOLVED_PATH exists, load RESOLVED_PATH as its extension\n      format. STOP\n4. Otherwise, if EXACT is false,\n   a. LOAD_AS_FILE(RESOLVED_PATH)\n   b. LOAD_AS_DIRECTORY(RESOLVED_PATH)\n5. THROW \"not found\"\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "Caching", @@ -40247,16 +41635,16 @@ "desc": "

                                                                                                                                                                                                                                                      Modules are cached after the first time they are loaded. This means (among other\nthings) that every call to require('foo') will get exactly the same object\nreturned, if it would resolve to the same file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Provided require.cache is not modified, multiple calls to require('foo')\nwill not cause the module code to be executed multiple times. This is an\nimportant feature. With it, \"partially done\" objects can be returned, thus\nallowing transitive dependencies to be loaded even when they would cause cycles.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To have a module execute code multiple times, export a function, and call that\nfunction.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Module Caching Caveats", - "name": "Module Caching Caveats", + "textRaw": "Module caching caveats", + "name": "Module caching caveats", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Modules are cached based on their resolved filename. Since modules may resolve\nto a different filename based on the location of the calling module (loading\nfrom node_modules folders), it is not a guarantee that require('foo') will\nalways return the exact same object, if it would resolve to different files.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Additionally, on case-insensitive file systems or operating systems, different\nresolved filenames can point to the same file, but the cache will still treat\nthem as different modules and will reload the file multiple times. For example,\nrequire('./foo') and require('./FOO') return two different objects,\nirrespective of whether or not ./foo and ./FOO are the same file.

                                                                                                                                                                                                                                                      " } ] }, { - "textRaw": "Core Modules", - "name": "Core Modules", + "textRaw": "Core modules", + "name": "Core modules", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Node.js has several modules compiled into the binary. These modules are\ndescribed in greater detail elsewhere in this documentation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The core modules are defined within the Node.js source and are located in the\nlib/ folder.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Core modules are always preferentially loaded if their identifier is\npassed to require(). For instance, require('http') will always\nreturn the built in HTTP module, even if there is a file by that name.

                                                                                                                                                                                                                                                      " }, @@ -40267,20 +41655,20 @@ "desc": "

                                                                                                                                                                                                                                                      When there are circular require() calls, a module might not have finished\nexecuting when it is returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Consider this situation:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      a.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log('a starting');\nexports.done = false;\nconst b = require('./b.js');\nconsole.log('in a, b.done = %j', b.done);\nexports.done = true;\nconsole.log('a done');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      b.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log('b starting');\nexports.done = false;\nconst a = require('./a.js');\nconsole.log('in b, a.done = %j', a.done);\nexports.done = true;\nconsole.log('b done');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      main.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log('main starting');\nconst a = require('./a.js');\nconst b = require('./b.js');\nconsole.log('in main, a.done = %j, b.done = %j', a.done, b.done);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When main.js loads a.js, then a.js in turn loads b.js. At that\npoint, b.js tries to load a.js. In order to prevent an infinite\nloop, an unfinished copy of the a.js exports object is returned to the\nb.js module. b.js then finishes loading, and its exports object is\nprovided to the a.js module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By the time main.js has loaded both modules, they're both finished.\nThe output of this program would thus be:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node main.js\nmain starting\na starting\nb starting\nin b, a.done = false\nb done\nin a, b.done = true\na done\nin main, a.done = true, b.done = true\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Careful planning is required to allow cyclic module dependencies to work\ncorrectly within an application.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "File Modules", - "name": "File Modules", + "textRaw": "File modules", + "name": "File modules", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      If the exact filename is not found, then Node.js will attempt to load the\nrequired filename with the added extensions: .js, .json, and finally\n.node.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      .js files are interpreted as JavaScript text files, and .json files are\nparsed as JSON text files. .node files are interpreted as compiled addon\nmodules loaded with process.dlopen().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A required module prefixed with '/' is an absolute path to the file. For\nexample, require('/home/marco/foo.js') will load the file at\n/home/marco/foo.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A required module prefixed with './' is relative to the file calling\nrequire(). That is, circle.js must be in the same directory as foo.js for\nrequire('./circle') to find it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Without a leading '/', './', or '../' to indicate a file, the module must\neither be a core module or is loaded from a node_modules folder.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the given path does not exist, require() will throw an Error with its\ncode property set to 'MODULE_NOT_FOUND'.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Folders as Modules", - "name": "Folders as Modules", + "textRaw": "Folders as modules", + "name": "Folders as modules", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      It is convenient to organize programs and libraries into self-contained\ndirectories, and then provide a single entry point to those directories.\nThere are three ways in which a folder may be passed to require() as\nan argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first is to create a package.json file in the root of the folder,\nwhich specifies a main module. An example package.json file might\nlook like this:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      { \"name\" : \"some-library\",\n  \"main\" : \"./lib/some-library.js\" }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this was in a folder at ./some-library, then\nrequire('./some-library') would attempt to load\n./some-library/lib/some-library.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This is the extent of the awareness of package.json files within Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If there is no package.json file present in the directory, or if the\n'main' entry is missing or cannot be resolved, then Node.js\nwill attempt to load an index.js or index.node file out of that\ndirectory. For example, if there was no package.json file in the above\nexample, then require('./some-library') would attempt to load:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • ./some-library/index.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • ./some-library/index.node
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If these attempts fail, then Node.js will report the entire module as missing\nwith the default error:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Cannot find module 'some-library'\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      It is convenient to organize programs and libraries into self-contained\ndirectories, and then provide a single entry point to those directories.\nThere are three ways in which a folder may be passed to require() as\nan argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first is to create a package.json file in the root of the folder,\nwhich specifies a main module. An example package.json file might\nlook like this:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      { \"name\" : \"some-library\",\n  \"main\" : \"./lib/some-library.js\" }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this was in a folder at ./some-library, then\nrequire('./some-library') would attempt to load\n./some-library/lib/some-library.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This is the extent of the awareness of package.json files within Node.js.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If there is no package.json file present in the directory, or if the\n\"main\" entry is missing or cannot be resolved, then Node.js\nwill attempt to load an index.js or index.node file out of that\ndirectory. For example, if there was no package.json file in the previous\nexample, then require('./some-library') would attempt to load:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • ./some-library/index.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • ./some-library/index.node
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If these attempts fail, then Node.js will report the entire module as missing\nwith the default error:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Cannot find module 'some-library'\n
                                                                                                                                                                                                                                                      " }, { - "textRaw": "Loading from `node_modules` Folders", - "name": "Loading from `node_modules` Folders", + "textRaw": "Loading from `node_modules` folders", + "name": "Loading from `node_modules` folders", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      If the module identifier passed to require() is not a\ncore module, and does not begin with '/', '../', or\n'./', then Node.js starts at the parent directory of the current module, and\nadds /node_modules, and attempts to load the module from that location.\nNode.js will not append node_modules to a path already ending in\nnode_modules.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If it is not found there, then it moves to the parent directory, and so\non, until the root of the file system is reached.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, if the file at '/home/ry/projects/foo.js' called\nrequire('bar.js'), then Node.js would look in the following locations, in\nthis order:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • /home/ry/projects/node_modules/bar.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /home/ry/node_modules/bar.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /home/node_modules/bar.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /node_modules/bar.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This allows programs to localize their dependencies, so that they do not\nclash.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is possible to require specific files or sub modules distributed with a\nmodule by including a path suffix after the module name. For instance\nrequire('example-module/path/to/file') would resolve path/to/file\nrelative to where example-module is located. The suffixed path follows the\nsame module resolution semantics.

                                                                                                                                                                                                                                                      " }, @@ -40294,7 +41682,7 @@ "textRaw": "The module wrapper", "name": "The module wrapper", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Before a module's code is executed, Node.js will wrap it with a function\nwrapper that looks like the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      (function(exports, require, module, __filename, __dirname) {\n// Module code actually lives in here\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By doing this, Node.js achieves a few things:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • It keeps top-level variables (defined with var, const or let) scoped to\nthe module rather than the global object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        It helps to provide some global-looking variables that are actually specific\nto the module, such as:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • The module and exports objects that the implementor can use to export\nvalues from the module.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • The convenience variables __filename and __dirname, containing the\nmodule's absolute filename and directory path.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Before a module's code is executed, Node.js will wrap it with a function\nwrapper that looks like the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      (function(exports, require, module, __filename, __dirname) {\n// Module code actually lives in here\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By doing this, Node.js achieves a few things:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • It keeps top-level variables (defined with var, const or let) scoped to\nthe module rather than the global object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • It helps to provide some global-looking variables that are actually specific\nto the module, such as:\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • The module and exports objects that the implementor can use to export\nvalues from the module.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • The convenience variables __filename and __dirname, containing the\nmodule's absolute filename and directory path.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " } ], "modules": [ @@ -40408,7 +41796,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The Module object representing the entry script loaded when the Node.js\nprocess launched.\nSee \"Accessing the main module\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In entry.js script:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log(require.main);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node entry.js\n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      Module {\n  id: '.',\n  path: '/absolute/path/to',\n  exports: {},\n  parent: null,\n  filename: '/absolute/path/to/entry.js',\n  loaded: false,\n  children: [],\n  paths:\n   [ '/absolute/path/to/node_modules',\n     '/absolute/path/node_modules',\n     '/absolute/node_modules',\n     '/node_modules' ] }\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The Module object representing the entry script loaded when the Node.js\nprocess launched.\nSee \"Accessing the main module\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In entry.js script:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log(require.main);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node entry.js\n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      Module {\n  id: '.',\n  path: '/absolute/path/to',\n  exports: {},\n  parent: null,\n  filename: '/absolute/path/to/entry.js',\n  loaded: false,\n  children: [],\n  paths:\n   [ '/absolute/path/to/node_modules',\n     '/absolute/path/node_modules',\n     '/absolute/node_modules',\n     '/node_modules' ] }\n
                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -40498,15 +41886,196 @@ "displayName": "The module scope" }, { - "textRaw": "The `Module` Object", + "textRaw": "The `Module` object", "name": "the_`module`_object", + "desc": "

                                                                                                                                                                                                                                                      This section was moved to\nModules: module core module.

                                                                                                                                                                                                                                                      \n\n", + "type": "module", + "displayName": "The `Module` object" + }, + { + "textRaw": "Source map v3 support", + "name": "source_map_v3_support", + "desc": "

                                                                                                                                                                                                                                                      This section was moved to\nModules: module core module.

                                                                                                                                                                                                                                                      \n\n", + "type": "module", + "displayName": "Source map v3 support" + } + ], + "vars": [ + { + "textRaw": "The `module` object", + "name": "module", "meta": { "added": [ - "v0.3.7" + "v0.1.16" ], "changes": [] }, - "desc": "\n

                                                                                                                                                                                                                                                      Provides general utility methods when interacting with instances of\nModule, the module variable often seen in file modules. Accessed\nvia require('module').

                                                                                                                                                                                                                                                      ", + "type": "var", + "desc": "\n

                                                                                                                                                                                                                                                      In each module, the module free variable is a reference to the object\nrepresenting the current module. For convenience, module.exports is\nalso accessible via the exports module-global. module is not actually\na global but rather local to each module.

                                                                                                                                                                                                                                                      ", + "properties": [ + { + "textRaw": "`children` {module[]}", + "type": "module[]", + "name": "children", + "meta": { + "added": [ + "v0.1.16" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The module objects required for the first time by this one.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`exports` {Object}", + "type": "Object", + "name": "exports", + "meta": { + "added": [ + "v0.1.16" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The module.exports object is created by the Module system. Sometimes this is\nnot acceptable; many want their module to be an instance of some class. To do\nthis, assign the desired export object to module.exports. Assigning\nthe desired object to exports will simply rebind the local exports variable,\nwhich is probably not what is desired.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, suppose we were making a module called a.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const EventEmitter = require('events');\n\nmodule.exports = new EventEmitter();\n\n// Do some work, and after some time emit\n// the 'ready' event from the module itself.\nsetTimeout(() => {\n  module.exports.emit('ready');\n}, 1000);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Then in another file we could do:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const a = require('./a');\na.on('ready', () => {\n  console.log('module \"a\" is ready');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Assignment to module.exports must be done immediately. It cannot be\ndone in any callbacks. This does not work:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      x.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      setTimeout(() => {\n  module.exports = { a: 'hello' };\n}, 0);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      y.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const x = require('./x');\nconsole.log(x.a);\n
                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "`exports` shortcut", + "name": "`exports`_shortcut", + "meta": { + "added": [ + "v0.1.16" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The exports variable is available within a module's file-level scope, and is\nassigned the value of module.exports before the module is evaluated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It allows a shortcut, so that module.exports.f = ... can be written more\nsuccinctly as exports.f = .... However, be aware that like any variable, if a\nnew value is assigned to exports, it is no longer bound to module.exports:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      module.exports.hello = true; // Exported from require of module\nexports = { hello: false };  // Not exported, only available in the module\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the module.exports property is being completely replaced by a new\nobject, it is common to also reassign exports:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      module.exports = exports = function Constructor() {\n  // ... etc.\n};\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To illustrate the behavior, imagine this hypothetical implementation of\nrequire(), which is quite similar to what is actually done by require():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function require(/* ... */) {\n  const module = { exports: {} };\n  ((module, exports) => {\n    // Module code here. In this example, define a function.\n    function someFunc() {}\n    exports = someFunc;\n    // At this point, exports is no longer a shortcut to module.exports, and\n    // this module will still export an empty default object.\n    module.exports = someFunc;\n    // At this point, the module will now export someFunc, instead of the\n    // default object.\n  })(module, module.exports);\n  return module.exports;\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`exports` shortcut" + } + ] + }, + { + "textRaw": "`filename` {string}", + "type": "string", + "name": "filename", + "meta": { + "added": [ + "v0.1.16" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The fully resolved filename of the module.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`id` {string}", + "type": "string", + "name": "id", + "meta": { + "added": [ + "v0.1.16" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The identifier for the module. Typically this is the fully resolved\nfilename.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`loaded` {boolean}", + "type": "boolean", + "name": "loaded", + "meta": { + "added": [ + "v0.1.16" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      Whether or not the module is done loading, or is in the process of\nloading.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`parent` {module | null | undefined}", + "type": "module | null | undefined", + "name": "parent", + "meta": { + "added": [ + "v0.1.16" + ], + "deprecated": [ + "v12.19.0", + "v14.6.0" + ], + "changes": [] + }, + "stability": 0, + "stabilityText": "Deprecated: Please use [`require.main`][] and\n[`module.children`][] instead.", + "desc": "

                                                                                                                                                                                                                                                      The module that first required this one, or null if the current module is the\nentry point of the current process, or undefined if the module was loaded by\nsomething that is not a CommonJS module (E.G.: REPL or import).

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`path` {string}", + "type": "string", + "name": "path", + "meta": { + "added": [ + "v11.14.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The directory name of the module. This is usually the same as the\npath.dirname() of the module.id.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`paths` {string[]}", + "type": "string[]", + "name": "paths", + "meta": { + "added": [ + "v0.4.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The search paths for the module.

                                                                                                                                                                                                                                                      " + } + ], + "methods": [ + { + "textRaw": "`module.require(id)`", + "type": "method", + "name": "require", + "meta": { + "added": [ + "v0.5.1" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {any} exported module content", + "name": "return", + "type": "any", + "desc": "exported module content" + }, + "params": [ + { + "textRaw": "`id` {string}", + "name": "id", + "type": "string" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      The module.require() method provides a way to load a module as if\nrequire() was called from the original module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to do this, it is necessary to get a reference to the module object.\nSince require() returns the module.exports, and the module is typically\nonly available within a specific module's code, it must be explicitly exported\nin order to be used.

                                                                                                                                                                                                                                                      " + } + ] + } + ], + "type": "module", + "displayName": "module" + }, + { + "textRaw": "Modules: `module` API", + "name": "modules:_`module`_api", + "introduced_in": "v0.3.7", + "modules": [ + { + "textRaw": "The `Module` object", + "name": "the_`module`_object", + "desc": "\n

                                                                                                                                                                                                                                                      Provides general utility methods when interacting with instances of\nModule, the module variable often seen in CommonJS modules. Accessed\nvia import 'module' or require('module').

                                                                                                                                                                                                                                                      ", "properties": [ { "textRaw": "`builtinModules` {string[]}", @@ -40520,7 +42089,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      A list of the names of all modules provided by Node.js. Can be used to verify\nif a module is maintained by a third party or not.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      module in this context isn't the same object that's provided\nby the module wrapper. To access it, require the Module module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const builtin = require('module').builtinModules;\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      A list of the names of all modules provided by Node.js. Can be used to verify\nif a module is maintained by a third party or not.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      module in this context isn't the same object that's provided\nby the module wrapper. To access it, require the Module module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // module.mjs\n// In an ECMAScript module\nimport { builtinModules as builtin } from 'module';\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // module.cjs\n// In a CommonJS module\nconst builtin = require('module').builtinModules;\n
                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -40604,24 +42173,25 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      The module.syncBuiltinESMExports() method updates all the live bindings for\nbuiltin ES Modules to match the properties of the CommonJS exports. It does\nnot add or remove exported names from the ES Modules.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst { syncBuiltinESMExports } = require('module');\n\nfs.readFile = null;\n\ndelete fs.readFileSync;\n\nfs.newAPI = function newAPI() {\n  // ...\n};\n\nsyncBuiltinESMExports();\n\nimport('fs').then((esmFS) => {\n  assert.strictEqual(esmFS.readFile, null);\n  assert.strictEqual('readFileSync' in fs, true);\n  assert.strictEqual(esmFS.newAPI, undefined);\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The module.syncBuiltinESMExports() method updates all the live bindings for\nbuiltin ES Modules to match the properties of the CommonJS exports. It\ndoes not add or remove exported names from the ES Modules.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst { syncBuiltinESMExports } = require('module');\n\nfs.readFile = null;\n\ndelete fs.readFileSync;\n\nfs.newAPI = function newAPI() {\n  // ...\n};\n\nsyncBuiltinESMExports();\n\nimport('fs').then((esmFS) => {\n  assert.strictEqual(esmFS.readFile, null);\n  assert.strictEqual('readFileSync' in fs, true);\n  assert.strictEqual(esmFS.newAPI, undefined);\n});\n
                                                                                                                                                                                                                                                      " } ], "type": "module", - "displayName": "The `Module` Object" + "displayName": "The `Module` object" }, { - "textRaw": "Source Map V3 Support", + "textRaw": "Source map v3 support", "name": "source_map_v3_support", "meta": { "added": [ + "v13.7.0", "v12.17.0" ], "changes": [] }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      Helpers for interacting with the source map cache. This cache is\npopulated when source map parsing is enabled and\nsource map include directives are found in a modules' footer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To enable source map parsing, Node.js must be run with the flag\n--enable-source-maps, or with code coverage enabled by setting\nNODE_V8_COVERAGE=dir.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { findSourceMap, SourceMap } = require('module');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Helpers for interacting with the source map cache. This cache is\npopulated when source map parsing is enabled and\nsource map include directives are found in a modules' footer.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To enable source map parsing, Node.js must be run with the flag\n--enable-source-maps, or with code coverage enabled by setting\nNODE_V8_COVERAGE=dir.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // module.mjs\n// In an ECMAScript module\nimport { findSourceMap, SourceMap } from 'module';\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // module.cjs\n// In a CommonJS module\nconst { findSourceMap, SourceMap } = require('module');\n
                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`module.findSourceMap(path[, error])`", @@ -40629,6 +42199,7 @@ "name": "findSourceMap", "meta": { "added": [ + "v13.7.0", "v12.17.0" ], "changes": [] @@ -40654,7 +42225,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      path is the resolved path for the file for which a corresponding source map\nshould be fetched.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The error instance should be passed as the second parameter to findSourceMap\nin exceptional flows, e.g., when an overridden\nError.prepareStackTrace(error, trace) is invoked. Modules are not added to\nthe module cache until they are successfully loaded, in these cases source maps\nwill be associated with the error instance along with the path.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      path is the resolved path for the file for which a corresponding source map\nshould be fetched.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The error instance should be passed as the second parameter to findSourceMap\nin exceptional flows, such as when an overridden\nError.prepareStackTrace(error, trace) is invoked. Modules are not added to\nthe module cache until they are successfully loaded. In these cases, source maps\nare associated with the error instance along with the path.

                                                                                                                                                                                                                                                      " } ], "classes": [ @@ -40664,6 +42235,7 @@ "name": "module.SourceMap", "meta": { "added": [ + "v13.7.0", "v12.17.0" ], "changes": [] @@ -40673,7 +42245,7 @@ "textRaw": "`payload` Returns: {Object}", "type": "Object", "name": "return", - "desc": "

                                                                                                                                                                                                                                                      Getter for the payload used to construct the SourceMap instance.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Getter for the payload used to construct the SourceMap instance.

                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -40714,184 +42286,26 @@ "type": "Object" } ], - "desc": "

                                                                                                                                                                                                                                                      Creates a new sourceMap instance.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      payload is an object with keys matching the Source Map V3 format:

                                                                                                                                                                                                                                                      \n" + "desc": "

                                                                                                                                                                                                                                                      Creates a new sourceMap instance.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      payload is an object with keys matching the Source map v3 format:

                                                                                                                                                                                                                                                      \n" } ] } ], "type": "module", - "displayName": "Source Map V3 Support" - } - ], - "vars": [ - { - "textRaw": "The `module` Object", - "name": "module", - "meta": { - "added": [ - "v0.1.16" - ], - "changes": [] - }, - "type": "var", - "desc": "\n

                                                                                                                                                                                                                                                      In each module, the module free variable is a reference to the object\nrepresenting the current module. For convenience, module.exports is\nalso accessible via the exports module-global. module is not actually\na global but rather local to each module.

                                                                                                                                                                                                                                                      ", - "properties": [ - { - "textRaw": "`children` {module[]}", - "type": "module[]", - "name": "children", - "meta": { - "added": [ - "v0.1.16" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The module objects required for the first time by this one.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`exports` {Object}", - "type": "Object", - "name": "exports", - "meta": { - "added": [ - "v0.1.16" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The module.exports object is created by the Module system. Sometimes this is\nnot acceptable; many want their module to be an instance of some class. To do\nthis, assign the desired export object to module.exports. Assigning\nthe desired object to exports will simply rebind the local exports variable,\nwhich is probably not what is desired.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, suppose we were making a module called a.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const EventEmitter = require('events');\n\nmodule.exports = new EventEmitter();\n\n// Do some work, and after some time emit\n// the 'ready' event from the module itself.\nsetTimeout(() => {\n  module.exports.emit('ready');\n}, 1000);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Then in another file we could do:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const a = require('./a');\na.on('ready', () => {\n  console.log('module \"a\" is ready');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Assignment to module.exports must be done immediately. It cannot be\ndone in any callbacks. This does not work:

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      x.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      setTimeout(() => {\n  module.exports = { a: 'hello' };\n}, 0);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      y.js:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const x = require('./x');\nconsole.log(x.a);\n
                                                                                                                                                                                                                                                      ", - "modules": [ - { - "textRaw": "`exports` shortcut", - "name": "`exports`_shortcut", - "meta": { - "added": [ - "v0.1.16" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The exports variable is available within a module's file-level scope, and is\nassigned the value of module.exports before the module is evaluated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It allows a shortcut, so that module.exports.f = ... can be written more\nsuccinctly as exports.f = .... However, be aware that like any variable, if a\nnew value is assigned to exports, it is no longer bound to module.exports:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      module.exports.hello = true; // Exported from require of module\nexports = { hello: false };  // Not exported, only available in the module\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the module.exports property is being completely replaced by a new\nobject, it is common to also reassign exports:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      module.exports = exports = function Constructor() {\n  // ... etc.\n};\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To illustrate the behavior, imagine this hypothetical implementation of\nrequire(), which is quite similar to what is actually done by require():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function require(/* ... */) {\n  const module = { exports: {} };\n  ((module, exports) => {\n    // Module code here. In this example, define a function.\n    function someFunc() {}\n    exports = someFunc;\n    // At this point, exports is no longer a shortcut to module.exports, and\n    // this module will still export an empty default object.\n    module.exports = someFunc;\n    // At this point, the module will now export someFunc, instead of the\n    // default object.\n  })(module, module.exports);\n  return module.exports;\n}\n
                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`exports` shortcut" - } - ] - }, - { - "textRaw": "`filename` {string}", - "type": "string", - "name": "filename", - "meta": { - "added": [ - "v0.1.16" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The fully resolved filename of the module.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`id` {string}", - "type": "string", - "name": "id", - "meta": { - "added": [ - "v0.1.16" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The identifier for the module. Typically this is the fully resolved\nfilename.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`loaded` {boolean}", - "type": "boolean", - "name": "loaded", - "meta": { - "added": [ - "v0.1.16" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      Whether or not the module is done loading, or is in the process of\nloading.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`parent` {module}", - "type": "module", - "name": "parent", - "meta": { - "added": [ - "v0.1.16" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The module that first required this one.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`path` {string}", - "type": "string", - "name": "path", - "meta": { - "added": [ - "v11.14.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The directory name of the module. This is usually the same as the\npath.dirname() of the module.id.

                                                                                                                                                                                                                                                      " - }, - { - "textRaw": "`paths` {string[]}", - "type": "string[]", - "name": "paths", - "meta": { - "added": [ - "v0.4.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The search paths for the module.

                                                                                                                                                                                                                                                      " - } - ], - "methods": [ - { - "textRaw": "`module.require(id)`", - "type": "method", - "name": "require", - "meta": { - "added": [ - "v0.5.1" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {any} exported module content", - "name": "return", - "type": "any", - "desc": "exported module content" - }, - "params": [ - { - "textRaw": "`id` {string}", - "name": "id", - "type": "string" - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                      The module.require() method provides a way to load a module as if\nrequire() was called from the original module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to do this, it is necessary to get a reference to the module object.\nSince require() returns the module.exports, and the module is typically\nonly available within a specific module's code, it must be explicitly exported\nin order to be used.

                                                                                                                                                                                                                                                      " - } - ] + "displayName": "Source map v3 support" } ], "type": "module", - "displayName": "module" + "displayName": "Modules: `module` API" }, { "textRaw": "Net", "name": "net", "introduced_in": "v0.10.0", - "desc": "\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 2 - Stable

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The net module provides an asynchronous network API for creating stream-based\nTCP or IPC servers (net.createServer()) and clients\n(net.createConnection()).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const net = require('net');\n
                                                                                                                                                                                                                                                      ", + "desc": "\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 2 - Stable

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Source Code: lib/net.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The net module provides an asynchronous network API for creating stream-based\nTCP or IPC servers (net.createServer()) and clients\n(net.createConnection()).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const net = require('net');\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "IPC Support", + "textRaw": "IPC support", "name": "ipc_support", "desc": "

                                                                                                                                                                                                                                                      The net module supports IPC with named pipes on Windows, and Unix domain\nsockets on other operating systems.

                                                                                                                                                                                                                                                      ", "modules": [ @@ -40904,7 +42318,7 @@ } ], "type": "module", - "displayName": "IPC Support" + "displayName": "IPC support" } ], "classes": [ @@ -41073,7 +42487,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Start a server listening for connections. A net.Server can be a TCP or\nan IPC server depending on what it listens to.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Possible signatures:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      This function is asynchronous. When the server starts listening, the\n'listening' event will be emitted. The last parameter callback\nwill be added as a listener for the 'listening' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All listen() methods can take a backlog parameter to specify the maximum\nlength of the queue of pending connections. The actual length will be determined\nby the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn\non Linux. The default value of this parameter is 511 (not 512).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All net.Socket are set to SO_REUSEADDR (see socket(7) for\ndetails).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The server.listen() method can be called again if and only if there was an\nerror during the first server.listen() call or server.close() has been\ncalled. Otherwise, an ERR_SERVER_ALREADY_LISTEN error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      One of the most common errors raised when listening is EADDRINUSE.\nThis happens when another server is already listening on the requested\nport/path/handle. One way to handle this would be to retry\nafter a certain amount of time:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      server.on('error', (e) => {\n  if (e.code === 'EADDRINUSE') {\n    console.log('Address in use, retrying...');\n    setTimeout(() => {\n      server.close();\n      server.listen(PORT, HOST);\n    }, 1000);\n  }\n});\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Start a server listening for connections. A net.Server can be a TCP or\nan IPC server depending on what it listens to.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Possible signatures:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      This function is asynchronous. When the server starts listening, the\n'listening' event will be emitted. The last parameter callback\nwill be added as a listener for the 'listening' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All listen() methods can take a backlog parameter to specify the maximum\nlength of the queue of pending connections. The actual length will be determined\nby the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn\non Linux. The default value of this parameter is 511 (not 512).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All net.Socket are set to SO_REUSEADDR (see socket(7) for\ndetails).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The server.listen() method can be called again if and only if there was an\nerror during the first server.listen() call or server.close() has been\ncalled. Otherwise, an ERR_SERVER_ALREADY_LISTEN error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      One of the most common errors raised when listening is EADDRINUSE.\nThis happens when another server is already listening on the requested\nport/path/handle. One way to handle this would be to retry\nafter a certain amount of time:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      server.on('error', (e) => {\n  if (e.code === 'EADDRINUSE') {\n    console.log('Address in use, retrying...');\n    setTimeout(() => {\n      server.close();\n      server.listen(PORT, HOST);\n    }, 1000);\n  }\n});\n
                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`server.listen(handle[, backlog][, callback])`", @@ -41643,7 +43057,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Initiate a connection on a given socket. Normally this method is not needed,\nthe socket should be created and opened with net.createConnection(). Use\nthis only when implementing a custom Socket.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For TCP connections, available options are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • port <number> Required. Port the socket should connect to.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • host <string> Host the socket should connect to. Default: 'localhost'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • localAddress <string> Local address the socket should connect from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • localPort <number> Local port the socket should connect from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • family <number>: Version of IP stack. Must be 4, 6, or 0. The value\n0 indicates that both IPv4 and IPv6 addresses are allowed. Default: 0.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • hints <number> Optional dns.lookup() hints.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • lookup <Function> Custom lookup function. Default: dns.lookup().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For IPC connections, available options are:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      For both types, available options include:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        onread <Object> If specified, incoming data is stored in a single buffer\nand passed to the supplied callback when data arrives on the socket.\nThis will cause the streaming functionality to not provide any data.\nThe socket will emit events like 'error', 'end', and 'close'\nas usual. Methods like pause() and resume() will also behave as\nexpected.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • buffer <Buffer> | <Uint8Array> | <Function> Either a reusable chunk of memory to\nuse for storing incoming data or a function that returns such.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • callback <Function> This function is called for every chunk of incoming\ndata. Two arguments are passed to it: the number of bytes written to\nbuffer and a reference to buffer. Return false from this function to\nimplicitly pause() the socket. This function will be executed in the\nglobal context.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Following is an example of a client using the onread option:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const net = require('net');\nnet.connect({\n  port: 80,\n  onread: {\n    // Reuses a 4KiB Buffer for every read from the socket.\n    buffer: Buffer.alloc(4 * 1024),\n    callback: function(nread, buf) {\n      // Received data is available in `buf` from 0 to `nread`.\n      console.log(buf.toString('utf8', 0, nread));\n    }\n  }\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Initiate a connection on a given socket. Normally this method is not needed,\nthe socket should be created and opened with net.createConnection(). Use\nthis only when implementing a custom Socket.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For TCP connections, available options are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • port <number> Required. Port the socket should connect to.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • host <string> Host the socket should connect to. Default: 'localhost'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • localAddress <string> Local address the socket should connect from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • localPort <number> Local port the socket should connect from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • family <number>: Version of IP stack. Must be 4, 6, or 0. The value\n0 indicates that both IPv4 and IPv6 addresses are allowed. Default: 0.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • hints <number> Optional dns.lookup() hints.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • lookup <Function> Custom lookup function. Default: dns.lookup().
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For IPC connections, available options are:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      For both types, available options include:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • onread <Object> If specified, incoming data is stored in a single buffer\nand passed to the supplied callback when data arrives on the socket.\nThis will cause the streaming functionality to not provide any data.\nThe socket will emit events like 'error', 'end', and 'close'\nas usual. Methods like pause() and resume() will also behave as\nexpected.\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • buffer <Buffer> | <Uint8Array> | <Function> Either a reusable chunk of memory to\nuse for storing incoming data or a function that returns such.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • callback <Function> This function is called for every chunk of incoming\ndata. Two arguments are passed to it: the number of bytes written to\nbuffer and a reference to buffer. Return false from this function to\nimplicitly pause() the socket. This function will be executed in the\nglobal context.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Following is an example of a client using the onread option:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const net = require('net');\nnet.connect({\n  port: 80,\n  onread: {\n    // Reuses a 4KiB Buffer for every read from the socket.\n    buffer: Buffer.alloc(4 * 1024),\n    callback: function(nread, buf) {\n      // Received data is available in `buf` from 0 to `nread`.\n      console.log(buf.toString('utf8', 0, nread));\n    }\n  }\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.connect(path[, connectListener])`", @@ -42086,7 +43500,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      If true,\nsocket.connect(options[, connectListener]) was\ncalled and has not yet finished. It will stay true until the socket becomes\nconnected, then it is set to false and the 'connect' event is emitted. Note\nthat the\nsocket.connect(options[, connectListener])\ncallback is a listener for the 'connect' event.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      If true,\nsocket.connect(options[, connectListener]) was\ncalled and has not yet finished. It will stay true until the socket becomes\nconnected, then it is set to false and the 'connect' event is emitted. Note\nthat the\nsocket.connect(options[, connectListener])\ncallback is a listener for the 'connect' event.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`destroyed` {boolean} Indicates if the connection is destroyed or not. Once a connection is destroyed no further data can be transferred using it.", @@ -42607,7 +44021,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The os module provides operating system-related utility methods and\nproperties. It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const os = require('os');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/os.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The os module provides operating system-related utility methods and\nproperties. It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const os = require('os');\n
                                                                                                                                                                                                                                                      ", "properties": [ { "textRaw": "`EOL` {string}", @@ -42631,7 +44045,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      Contains commonly used operating system-specific constants for error codes,\nprocess signals, and so on. The specific constants defined are described in\nOS Constants.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Contains commonly used operating system-specific constants for error codes,\nprocess signals, and so on. The specific constants defined are described in\nOS constants.

                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -42677,7 +44091,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns an array of objects containing information about each logical CPU core.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The properties included on each object include:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • model <string>
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • speed <number> (in MHz)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        times <Object>

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • user <number> The number of milliseconds the CPU has spent in user mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • nice <number> The number of milliseconds the CPU has spent in nice mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • sys <number> The number of milliseconds the CPU has spent in sys mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • idle <number> The number of milliseconds the CPU has spent in idle mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • irq <number> The number of milliseconds the CPU has spent in irq mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      [\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 252020,\n      nice: 0,\n      sys: 30340,\n      idle: 1070356870,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 306960,\n      nice: 0,\n      sys: 26980,\n      idle: 1071569080,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 248450,\n      nice: 0,\n      sys: 21750,\n      idle: 1070919370,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 256880,\n      nice: 0,\n      sys: 19430,\n      idle: 1070905480,\n      irq: 20\n    }\n  }\n]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      nice values are POSIX-only. On Windows, the nice values of all processors\nare always 0.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns an array of objects containing information about each logical CPU core.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The properties included on each object include:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • model <string>
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • speed <number> (in MHz)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • times <Object>\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • user <number> The number of milliseconds the CPU has spent in user mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • nice <number> The number of milliseconds the CPU has spent in nice mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • sys <number> The number of milliseconds the CPU has spent in sys mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • idle <number> The number of milliseconds the CPU has spent in idle mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • irq <number> The number of milliseconds the CPU has spent in irq mode.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      [\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 252020,\n      nice: 0,\n      sys: 30340,\n      idle: 1070356870,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 306960,\n      nice: 0,\n      sys: 26980,\n      idle: 1071569080,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 248450,\n      nice: 0,\n      sys: 21750,\n      idle: 1070919370,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 256880,\n      nice: 0,\n      sys: 19430,\n      idle: 1070905480,\n      irq: 20\n    }\n  }\n]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      nice values are POSIX-only. On Windows, the nice values of all processors\nare always 0.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`os.endianness()`", @@ -42882,7 +44296,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns the operating system as a string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On POSIX systems, the operating system release is determined by calling\nuname(3). On Windows, GetVersionExW() is used. See\nhttps://en.wikipedia.org/wiki/Uname#Examples for more information.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns the operating system as a string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On POSIX systems, the operating system release is determined by calling\nuname(3). On Windows, GetVersionExW() is used. See\nhttps://en.wikipedia.org/wiki/Uname#Examples for more information.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`os.setPriority([pid, ]priority)`", @@ -42984,7 +44398,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns the operating system name as returned by uname(3). For example, it\nreturns 'Linux' on Linux, 'Darwin' on macOS, and 'Windows_NT' on Windows.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See https://en.wikipedia.org/wiki/Uname#Examples for additional information\nabout the output of running uname(3) on various operating systems.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns the operating system name as returned by uname(3). For example, it\nreturns 'Linux' on Linux, 'Darwin' on macOS, and 'Windows_NT' on Windows.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See https://en.wikipedia.org/wiki/Uname#Examples for additional information\nabout the output of running uname(3) on various operating systems.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`os.uptime()`", @@ -43071,17 +44485,17 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns a string identifying the kernel version.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On POSIX systems, the operating system release is determined by calling\nuname(3). On Windows, RtlGetVersion() is used, and if it is not available,\nGetVersionExW() will be used. See\nhttps://en.wikipedia.org/wiki/Uname#Examples for more information.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns a string identifying the kernel version.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On POSIX systems, the operating system release is determined by calling\nuname(3). On Windows, RtlGetVersion() is used, and if it is not\navailable, GetVersionExW() will be used. See\nhttps://en.wikipedia.org/wiki/Uname#Examples for more information.

                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "OS Constants", + "textRaw": "OS constants", "name": "os_constants", "desc": "

                                                                                                                                                                                                                                                      The following constants are exported by os.constants.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Not all constants will be available on every operating system.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Signal Constants", + "textRaw": "Signal constants", "name": "signal_constants", "meta": { "changes": [ @@ -43094,40 +44508,40 @@ }, "desc": "

                                                                                                                                                                                                                                                      The following signal constants are exported by os.constants.signals.

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      SIGHUPSent to indicate when a controlling terminal is closed or a parent\n process exits.
                                                                                                                                                                                                                                                      SIGINTSent to indicate when a user wishes to interrupt a process\n ((Ctrl+C)).
                                                                                                                                                                                                                                                      SIGQUITSent to indicate when a user wishes to terminate a process and perform a\n core dump.
                                                                                                                                                                                                                                                      SIGILLSent to a process to notify that it has attempted to perform an illegal,\n malformed, unknown, or privileged instruction.
                                                                                                                                                                                                                                                      SIGTRAPSent to a process when an exception has occurred.
                                                                                                                                                                                                                                                      SIGABRTSent to a process to request that it abort.
                                                                                                                                                                                                                                                      SIGIOTSynonym for SIGABRT
                                                                                                                                                                                                                                                      SIGBUSSent to a process to notify that it has caused a bus error.
                                                                                                                                                                                                                                                      SIGFPESent to a process to notify that it has performed an illegal arithmetic\n operation.
                                                                                                                                                                                                                                                      SIGKILLSent to a process to terminate it immediately.
                                                                                                                                                                                                                                                      SIGUSR1 SIGUSR2Sent to a process to identify user-defined conditions.
                                                                                                                                                                                                                                                      SIGSEGVSent to a process to notify of a segmentation fault.
                                                                                                                                                                                                                                                      SIGPIPESent to a process when it has attempted to write to a disconnected\n pipe.
                                                                                                                                                                                                                                                      SIGALRMSent to a process when a system timer elapses.
                                                                                                                                                                                                                                                      SIGTERMSent to a process to request termination.
                                                                                                                                                                                                                                                      SIGCHLDSent to a process when a child process terminates.
                                                                                                                                                                                                                                                      SIGSTKFLTSent to a process to indicate a stack fault on a coprocessor.
                                                                                                                                                                                                                                                      SIGCONTSent to instruct the operating system to continue a paused process.
                                                                                                                                                                                                                                                      SIGSTOPSent to instruct the operating system to halt a process.
                                                                                                                                                                                                                                                      SIGTSTPSent to a process to request it to stop.
                                                                                                                                                                                                                                                      SIGBREAKSent to indicate when a user wishes to interrupt a process.
                                                                                                                                                                                                                                                      SIGTTINSent to a process when it reads from the TTY while in the\n background.
                                                                                                                                                                                                                                                      SIGTTOUSent to a process when it writes to the TTY while in the\n background.
                                                                                                                                                                                                                                                      SIGURGSent to a process when a socket has urgent data to read.
                                                                                                                                                                                                                                                      SIGXCPUSent to a process when it has exceeded its limit on CPU usage.
                                                                                                                                                                                                                                                      SIGXFSZSent to a process when it grows a file larger than the maximum\n allowed.
                                                                                                                                                                                                                                                      SIGVTALRMSent to a process when a virtual timer has elapsed.
                                                                                                                                                                                                                                                      SIGPROFSent to a process when a system timer has elapsed.
                                                                                                                                                                                                                                                      SIGWINCHSent to a process when the controlling terminal has changed its\n size.
                                                                                                                                                                                                                                                      SIGIOSent to a process when I/O is available.
                                                                                                                                                                                                                                                      SIGPOLLSynonym for SIGIO
                                                                                                                                                                                                                                                      SIGLOSTSent to a process when a file lock has been lost.
                                                                                                                                                                                                                                                      SIGPWRSent to a process to notify of a power failure.
                                                                                                                                                                                                                                                      SIGINFOSynonym for SIGPWR
                                                                                                                                                                                                                                                      SIGSYSSent to a process to notify of a bad argument.
                                                                                                                                                                                                                                                      SIGUNUSEDSynonym for SIGSYS
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Signal Constants" + "displayName": "Signal constants" }, { - "textRaw": "Error Constants", + "textRaw": "Error constants", "name": "error_constants", "desc": "

                                                                                                                                                                                                                                                      The following error constants are exported by os.constants.errno.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "POSIX Error Constants", + "textRaw": "POSIX error constants", "name": "posix_error_constants", "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      E2BIGIndicates that the list of arguments is longer than expected.
                                                                                                                                                                                                                                                      EACCESIndicates that the operation did not have sufficient permissions.
                                                                                                                                                                                                                                                      EADDRINUSEIndicates that the network address is already in use.
                                                                                                                                                                                                                                                      EADDRNOTAVAILIndicates that the network address is currently unavailable for\n use.
                                                                                                                                                                                                                                                      EAFNOSUPPORTIndicates that the network address family is not supported.
                                                                                                                                                                                                                                                      EAGAINIndicates that there is no data available and to try the\n operation again later.
                                                                                                                                                                                                                                                      EALREADYIndicates that the socket already has a pending connection in\n progress.
                                                                                                                                                                                                                                                      EBADFIndicates that a file descriptor is not valid.
                                                                                                                                                                                                                                                      EBADMSGIndicates an invalid data message.
                                                                                                                                                                                                                                                      EBUSYIndicates that a device or resource is busy.
                                                                                                                                                                                                                                                      ECANCELEDIndicates that an operation was canceled.
                                                                                                                                                                                                                                                      ECHILDIndicates that there are no child processes.
                                                                                                                                                                                                                                                      ECONNABORTEDIndicates that the network connection has been aborted.
                                                                                                                                                                                                                                                      ECONNREFUSEDIndicates that the network connection has been refused.
                                                                                                                                                                                                                                                      ECONNRESETIndicates that the network connection has been reset.
                                                                                                                                                                                                                                                      EDEADLKIndicates that a resource deadlock has been avoided.
                                                                                                                                                                                                                                                      EDESTADDRREQIndicates that a destination address is required.
                                                                                                                                                                                                                                                      EDOMIndicates that an argument is out of the domain of the function.
                                                                                                                                                                                                                                                      EDQUOTIndicates that the disk quota has been exceeded.
                                                                                                                                                                                                                                                      EEXISTIndicates that the file already exists.
                                                                                                                                                                                                                                                      EFAULTIndicates an invalid pointer address.
                                                                                                                                                                                                                                                      EFBIGIndicates that the file is too large.
                                                                                                                                                                                                                                                      EHOSTUNREACHIndicates that the host is unreachable.
                                                                                                                                                                                                                                                      EIDRMIndicates that the identifier has been removed.
                                                                                                                                                                                                                                                      EILSEQIndicates an illegal byte sequence.
                                                                                                                                                                                                                                                      EINPROGRESSIndicates that an operation is already in progress.
                                                                                                                                                                                                                                                      EINTRIndicates that a function call was interrupted.
                                                                                                                                                                                                                                                      EINVALIndicates that an invalid argument was provided.
                                                                                                                                                                                                                                                      EIOIndicates an otherwise unspecified I/O error.
                                                                                                                                                                                                                                                      EISCONNIndicates that the socket is connected.
                                                                                                                                                                                                                                                      EISDIRIndicates that the path is a directory.
                                                                                                                                                                                                                                                      ELOOPIndicates too many levels of symbolic links in a path.
                                                                                                                                                                                                                                                      EMFILEIndicates that there are too many open files.
                                                                                                                                                                                                                                                      EMLINKIndicates that there are too many hard links to a file.
                                                                                                                                                                                                                                                      EMSGSIZEIndicates that the provided message is too long.
                                                                                                                                                                                                                                                      EMULTIHOPIndicates that a multihop was attempted.
                                                                                                                                                                                                                                                      ENAMETOOLONGIndicates that the filename is too long.
                                                                                                                                                                                                                                                      ENETDOWNIndicates that the network is down.
                                                                                                                                                                                                                                                      ENETRESETIndicates that the connection has been aborted by the network.
                                                                                                                                                                                                                                                      ENETUNREACHIndicates that the network is unreachable.
                                                                                                                                                                                                                                                      ENFILEIndicates too many open files in the system.
                                                                                                                                                                                                                                                      ENOBUFSIndicates that no buffer space is available.
                                                                                                                                                                                                                                                      ENODATAIndicates that no message is available on the stream head read\n queue.
                                                                                                                                                                                                                                                      ENODEVIndicates that there is no such device.
                                                                                                                                                                                                                                                      ENOENTIndicates that there is no such file or directory.
                                                                                                                                                                                                                                                      ENOEXECIndicates an exec format error.
                                                                                                                                                                                                                                                      ENOLCKIndicates that there are no locks available.
                                                                                                                                                                                                                                                      ENOLINKIndications that a link has been severed.
                                                                                                                                                                                                                                                      ENOMEMIndicates that there is not enough space.
                                                                                                                                                                                                                                                      ENOMSGIndicates that there is no message of the desired type.
                                                                                                                                                                                                                                                      ENOPROTOOPTIndicates that a given protocol is not available.
                                                                                                                                                                                                                                                      ENOSPCIndicates that there is no space available on the device.
                                                                                                                                                                                                                                                      ENOSRIndicates that there are no stream resources available.
                                                                                                                                                                                                                                                      ENOSTRIndicates that a given resource is not a stream.
                                                                                                                                                                                                                                                      ENOSYSIndicates that a function has not been implemented.
                                                                                                                                                                                                                                                      ENOTCONNIndicates that the socket is not connected.
                                                                                                                                                                                                                                                      ENOTDIRIndicates that the path is not a directory.
                                                                                                                                                                                                                                                      ENOTEMPTYIndicates that the directory is not empty.
                                                                                                                                                                                                                                                      ENOTSOCKIndicates that the given item is not a socket.
                                                                                                                                                                                                                                                      ENOTSUPIndicates that a given operation is not supported.
                                                                                                                                                                                                                                                      ENOTTYIndicates an inappropriate I/O control operation.
                                                                                                                                                                                                                                                      ENXIOIndicates no such device or address.
                                                                                                                                                                                                                                                      EOPNOTSUPPIndicates that an operation is not supported on the socket. Although\n ENOTSUP and EOPNOTSUPP have the same value\n on Linux, according to POSIX.1 these error values should be distinct.)
                                                                                                                                                                                                                                                      EOVERFLOWIndicates that a value is too large to be stored in a given data\n type.
                                                                                                                                                                                                                                                      EPERMIndicates that the operation is not permitted.
                                                                                                                                                                                                                                                      EPIPEIndicates a broken pipe.
                                                                                                                                                                                                                                                      EPROTOIndicates a protocol error.
                                                                                                                                                                                                                                                      EPROTONOSUPPORTIndicates that a protocol is not supported.
                                                                                                                                                                                                                                                      EPROTOTYPEIndicates the wrong type of protocol for a socket.
                                                                                                                                                                                                                                                      ERANGEIndicates that the results are too large.
                                                                                                                                                                                                                                                      EROFSIndicates that the file system is read only.
                                                                                                                                                                                                                                                      ESPIPEIndicates an invalid seek operation.
                                                                                                                                                                                                                                                      ESRCHIndicates that there is no such process.
                                                                                                                                                                                                                                                      ESTALEIndicates that the file handle is stale.
                                                                                                                                                                                                                                                      ETIMEIndicates an expired timer.
                                                                                                                                                                                                                                                      ETIMEDOUTIndicates that the connection timed out.
                                                                                                                                                                                                                                                      ETXTBSYIndicates that a text file is busy.
                                                                                                                                                                                                                                                      EWOULDBLOCKIndicates that the operation would block.
                                                                                                                                                                                                                                                      EXDEVIndicates an improper link.\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "POSIX Error Constants" + "displayName": "POSIX error constants" }, { - "textRaw": "Windows Specific Error Constants", - "name": "windows_specific_error_constants", + "textRaw": "Windows-specific error constants", + "name": "windows-specific_error_constants", "desc": "

                                                                                                                                                                                                                                                      The following error codes are specific to the Windows operating system.

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      WSAEINTRIndicates an interrupted function call.
                                                                                                                                                                                                                                                      WSAEBADFIndicates an invalid file handle.
                                                                                                                                                                                                                                                      WSAEACCESIndicates insufficient permissions to complete the operation.
                                                                                                                                                                                                                                                      WSAEFAULTIndicates an invalid pointer address.
                                                                                                                                                                                                                                                      WSAEINVALIndicates that an invalid argument was passed.
                                                                                                                                                                                                                                                      WSAEMFILEIndicates that there are too many open files.
                                                                                                                                                                                                                                                      WSAEWOULDBLOCKIndicates that a resource is temporarily unavailable.
                                                                                                                                                                                                                                                      WSAEINPROGRESSIndicates that an operation is currently in progress.
                                                                                                                                                                                                                                                      WSAEALREADYIndicates that an operation is already in progress.
                                                                                                                                                                                                                                                      WSAENOTSOCKIndicates that the resource is not a socket.
                                                                                                                                                                                                                                                      WSAEDESTADDRREQIndicates that a destination address is required.
                                                                                                                                                                                                                                                      WSAEMSGSIZEIndicates that the message size is too long.
                                                                                                                                                                                                                                                      WSAEPROTOTYPEIndicates the wrong protocol type for the socket.
                                                                                                                                                                                                                                                      WSAENOPROTOOPTIndicates a bad protocol option.
                                                                                                                                                                                                                                                      WSAEPROTONOSUPPORTIndicates that the protocol is not supported.
                                                                                                                                                                                                                                                      WSAESOCKTNOSUPPORTIndicates that the socket type is not supported.
                                                                                                                                                                                                                                                      WSAEOPNOTSUPPIndicates that the operation is not supported.
                                                                                                                                                                                                                                                      WSAEPFNOSUPPORTIndicates that the protocol family is not supported.
                                                                                                                                                                                                                                                      WSAEAFNOSUPPORTIndicates that the address family is not supported.
                                                                                                                                                                                                                                                      WSAEADDRINUSEIndicates that the network address is already in use.
                                                                                                                                                                                                                                                      WSAEADDRNOTAVAILIndicates that the network address is not available.
                                                                                                                                                                                                                                                      WSAENETDOWNIndicates that the network is down.
                                                                                                                                                                                                                                                      WSAENETUNREACHIndicates that the network is unreachable.
                                                                                                                                                                                                                                                      WSAENETRESETIndicates that the network connection has been reset.
                                                                                                                                                                                                                                                      WSAECONNABORTEDIndicates that the connection has been aborted.
                                                                                                                                                                                                                                                      WSAECONNRESETIndicates that the connection has been reset by the peer.
                                                                                                                                                                                                                                                      WSAENOBUFSIndicates that there is no buffer space available.
                                                                                                                                                                                                                                                      WSAEISCONNIndicates that the socket is already connected.
                                                                                                                                                                                                                                                      WSAENOTCONNIndicates that the socket is not connected.
                                                                                                                                                                                                                                                      WSAESHUTDOWNIndicates that data cannot be sent after the socket has been\n shutdown.
                                                                                                                                                                                                                                                      WSAETOOMANYREFSIndicates that there are too many references.
                                                                                                                                                                                                                                                      WSAETIMEDOUTIndicates that the connection has timed out.
                                                                                                                                                                                                                                                      WSAECONNREFUSEDIndicates that the connection has been refused.
                                                                                                                                                                                                                                                      WSAELOOPIndicates that a name cannot be translated.
                                                                                                                                                                                                                                                      WSAENAMETOOLONGIndicates that a name was too long.
                                                                                                                                                                                                                                                      WSAEHOSTDOWNIndicates that a network host is down.
                                                                                                                                                                                                                                                      WSAEHOSTUNREACHIndicates that there is no route to a network host.
                                                                                                                                                                                                                                                      WSAENOTEMPTYIndicates that the directory is not empty.
                                                                                                                                                                                                                                                      WSAEPROCLIMIndicates that there are too many processes.
                                                                                                                                                                                                                                                      WSAEUSERSIndicates that the user quota has been exceeded.
                                                                                                                                                                                                                                                      WSAEDQUOTIndicates that the disk quota has been exceeded.
                                                                                                                                                                                                                                                      WSAESTALEIndicates a stale file handle reference.
                                                                                                                                                                                                                                                      WSAEREMOTEIndicates that the item is remote.
                                                                                                                                                                                                                                                      WSASYSNOTREADYIndicates that the network subsystem is not ready.
                                                                                                                                                                                                                                                      WSAVERNOTSUPPORTEDIndicates that the winsock.dll version is out of\n range.
                                                                                                                                                                                                                                                      WSANOTINITIALISEDIndicates that successful WSAStartup has not yet been performed.
                                                                                                                                                                                                                                                      WSAEDISCONIndicates that a graceful shutdown is in progress.
                                                                                                                                                                                                                                                      WSAENOMOREIndicates that there are no more results.
                                                                                                                                                                                                                                                      WSAECANCELLEDIndicates that an operation has been canceled.
                                                                                                                                                                                                                                                      WSAEINVALIDPROCTABLEIndicates that the procedure call table is invalid.
                                                                                                                                                                                                                                                      WSAEINVALIDPROVIDERIndicates an invalid service provider.
                                                                                                                                                                                                                                                      WSAEPROVIDERFAILEDINITIndicates that the service provider failed to initialized.
                                                                                                                                                                                                                                                      WSASYSCALLFAILUREIndicates a system call failure.
                                                                                                                                                                                                                                                      WSASERVICE_NOT_FOUNDIndicates that a service was not found.
                                                                                                                                                                                                                                                      WSATYPE_NOT_FOUNDIndicates that a class type was not found.
                                                                                                                                                                                                                                                      WSA_E_NO_MOREIndicates that there are no more results.
                                                                                                                                                                                                                                                      WSA_E_CANCELLEDIndicates that the call was canceled.
                                                                                                                                                                                                                                                      WSAEREFUSEDIndicates that a database query was refused.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Windows Specific Error Constants" + "displayName": "Windows-specific error constants" } ], "type": "module", - "displayName": "Error Constants" + "displayName": "Error constants" }, { - "textRaw": "dlopen Constants", + "textRaw": "dlopen constants", "name": "dlopen_constants", "desc": "

                                                                                                                                                                                                                                                      If available on the operating system, the following constants\nare exported in os.constants.dlopen. See dlopen(3) for detailed\ninformation.

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      RTLD_LAZYPerform lazy binding. Node.js sets this flag by default.
                                                                                                                                                                                                                                                      RTLD_NOWResolve all undefined symbols in the library before dlopen(3)\n returns.
                                                                                                                                                                                                                                                      RTLD_GLOBALSymbols defined by the library will be made available for symbol\n resolution of subsequently loaded libraries.
                                                                                                                                                                                                                                                      RTLD_LOCALThe converse of RTLD_GLOBAL. This is the default behavior\n if neither flag is specified.
                                                                                                                                                                                                                                                      RTLD_DEEPBINDMake a self-contained library use its own symbols in preference to\n symbols from previously loaded libraries.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "dlopen Constants" + "displayName": "dlopen constants" }, { - "textRaw": "Priority Constants", + "textRaw": "Priority constants", "name": "priority_constants", "meta": { "added": [ @@ -43137,18 +44551,18 @@ }, "desc": "

                                                                                                                                                                                                                                                      The following process scheduling constants are exported by\nos.constants.priority.

                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      PRIORITY_LOWThe lowest process scheduling priority. This corresponds to\n IDLE_PRIORITY_CLASS on Windows, and a nice value of\n 19 on all other platforms.
                                                                                                                                                                                                                                                      PRIORITY_BELOW_NORMALThe process scheduling priority above PRIORITY_LOW and\n below PRIORITY_NORMAL. This corresponds to\n BELOW_NORMAL_PRIORITY_CLASS on Windows, and a nice value of\n 10 on all other platforms.
                                                                                                                                                                                                                                                      PRIORITY_NORMALThe default process scheduling priority. This corresponds to\n NORMAL_PRIORITY_CLASS on Windows, and a nice value of\n 0 on all other platforms.
                                                                                                                                                                                                                                                      PRIORITY_ABOVE_NORMALThe process scheduling priority above PRIORITY_NORMAL and\n below PRIORITY_HIGH. This corresponds to\n ABOVE_NORMAL_PRIORITY_CLASS on Windows, and a nice value of\n -7 on all other platforms.
                                                                                                                                                                                                                                                      PRIORITY_HIGHThe process scheduling priority above PRIORITY_ABOVE_NORMAL\n and below PRIORITY_HIGHEST. This corresponds to\n HIGH_PRIORITY_CLASS on Windows, and a nice value of\n -14 on all other platforms.
                                                                                                                                                                                                                                                      PRIORITY_HIGHESTThe highest process scheduling priority. This corresponds to\n REALTIME_PRIORITY_CLASS on Windows, and a nice value of\n -20 on all other platforms.
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Priority Constants" + "displayName": "Priority constants" }, { - "textRaw": "libuv Constants", + "textRaw": "libuv constants", "name": "libuv_constants", "desc": "\n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                      UV_UDP_REUSEADDR
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "libuv Constants" + "displayName": "libuv constants" } ], "type": "module", - "displayName": "OS Constants" + "displayName": "OS constants" } ], "type": "module", @@ -43160,7 +44574,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The path module provides utilities for working with file and directory paths.\nIt can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const path = require('path');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/path.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The path module provides utilities for working with file and directory paths.\nIt can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const path = require('path');\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Windows vs. POSIX", @@ -43209,7 +44623,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The path.basename() methods returns the last portion of a path, similar to\nthe Unix basename command. Trailing directory separators are ignored, see\npath.sep.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      path.basename('/foo/bar/baz/asdf/quux.html');\n// Returns: 'quux.html'\n\npath.basename('/foo/bar/baz/asdf/quux.html', '.html');\n// Returns: 'quux'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError is thrown if path is not a string or if ext is given\nand is not a string.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The path.basename() method returns the last portion of a path, similar to\nthe Unix basename command. Trailing directory separators are ignored, see\npath.sep.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      path.basename('/foo/bar/baz/asdf/quux.html');\n// Returns: 'quux.html'\n\npath.basename('/foo/bar/baz/asdf/quux.html', '.html');\n// Returns: 'quux'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Although Windows usually treats file names, including file extensions, in a\ncase-insensitive manner, this function does not. For example, C:\\\\foo.html and\nC:\\\\foo.HTML refer to the same file, but basename treats the extension as a\ncase-sensitive string:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      path.win32.basename('C:\\\\foo.html', '.html');\n// Returns: 'foo'\n\npath.win32.basename('C:\\\\foo.HTML', '.html');\n// Returns: 'foo.HTML'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError is thrown if path is not a string or if ext is given\nand is not a string.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`path.dirname(path)`", @@ -43513,7 +44927,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The path.resolve() method resolves a sequence of paths or path segments into\nan absolute path.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The given sequence of paths is processed from right to left, with each\nsubsequent path prepended until an absolute path is constructed.\nFor instance, given the sequence of path segments: /foo, /bar, baz,\ncalling path.resolve('/foo', '/bar', 'baz') would return /bar/baz\nbecause 'baz' is not an absolute path but '/bar' + '/' + 'baz' is.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If after processing all given path segments an absolute path has not yet\nbeen generated, the current working directory is used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resulting path is normalized and trailing slashes are removed unless the\npath is resolved to the root directory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Zero-length path segments are ignored.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If no path segments are passed, path.resolve() will return the absolute path\nof the current working directory.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      path.resolve('/foo/bar', './baz');\n// Returns: '/foo/bar/baz'\n\npath.resolve('/foo/bar', '/tmp/file/');\n// Returns: '/tmp/file'\n\npath.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');\n// If the current working directory is /home/myself/node,\n// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError is thrown if any of the arguments is not a string.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The path.resolve() method resolves a sequence of paths or path segments into\nan absolute path.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The given sequence of paths is processed from right to left, with each\nsubsequent path prepended until an absolute path is constructed.\nFor instance, given the sequence of path segments: /foo, /bar, baz,\ncalling path.resolve('/foo', '/bar', 'baz') would return /bar/baz\nbecause 'baz' is not an absolute path but '/bar' + '/' + 'baz' is.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If, after processing all given path segments, an absolute path has not yet\nbeen generated, the current working directory is used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The resulting path is normalized and trailing slashes are removed unless the\npath is resolved to the root directory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Zero-length path segments are ignored.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If no path segments are passed, path.resolve() will return the absolute path\nof the current working directory.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      path.resolve('/foo/bar', './baz');\n// Returns: '/foo/bar/baz'\n\npath.resolve('/foo/bar', '/tmp/file/');\n// Returns: '/tmp/file'\n\npath.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');\n// If the current working directory is /home/myself/node,\n// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError is thrown if any of the arguments is not a string.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`path.toNamespacedPath(path)`", @@ -43541,7 +44955,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      On Windows systems only, returns an equivalent namespace-prefixed path for\nthe given path. If path is not a string, path will be returned without\nmodifications.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is meaningful only on Windows system. On POSIX systems, the\nmethod is non-operational and always returns path without modifications.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      On Windows systems only, returns an equivalent namespace-prefixed path for\nthe given path. If path is not a string, path will be returned without\nmodifications.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method is meaningful only on Windows systems. On POSIX systems, the\nmethod is non-operational and always returns path without modifications.

                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -43598,12 +45012,12 @@ "displayName": "Path" }, { - "textRaw": "Performance Measurement APIs", + "textRaw": "Performance measurement APIs", "name": "performance_measurement_apis", "introduced_in": "v8.5.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      This module provides an implementation of a subset of the W3C\nWeb Performance APIs as well as additional APIs for\nNode.js-specific performance measurements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js supports the following Web Performance APIs:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      const { PerformanceObserver, performance } = require('perf_hooks');\n\nconst obs = new PerformanceObserver((items) => {\n  console.log(items.getEntries()[0].duration);\n  performance.clearMarks();\n});\nobs.observe({ entryTypes: ['measure'] });\nperformance.measure('Start to Now');\n\nperformance.mark('A');\ndoSomeLongRunningProcess(() => {\n  performance.measure('A to Now', 'A');\n\n  performance.mark('B');\n  performance.measure('A to B', 'A', 'B');\n});\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/perf_hooks.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This module provides an implementation of a subset of the W3C\nWeb Performance APIs as well as additional APIs for\nNode.js-specific performance measurements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js supports the following Web Performance APIs:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      const { PerformanceObserver, performance } = require('perf_hooks');\n\nconst obs = new PerformanceObserver((items) => {\n  console.log(items.getEntries()[0].duration);\n  performance.clearMarks();\n});\nobs.observe({ entryTypes: ['measure'] });\nperformance.measure('Start to Now');\n\nperformance.mark('A');\ndoSomeLongRunningProcess(() => {\n  performance.measure('A to Now', 'A');\n\n  performance.mark('B');\n  performance.measure('A to B', 'A', 'B');\n});\n
                                                                                                                                                                                                                                                      ", "properties": [ { "textRaw": "`perf_hooks.performance`", @@ -43640,6 +45054,59 @@ "desc": "

                                                                                                                                                                                                                                                      If name is not provided, removes all PerformanceMark objects from the\nPerformance Timeline. If name is provided, removes only the named mark.

                                                                                                                                                                                                                                                      " }, { + "textRaw": "`performance.eventLoopUtilization([utilization1[, utilization2]])`", + "type": "method", + "name": "eventLoopUtilization", + "meta": { + "added": [ + "v14.10.0", + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns {Object}", + "name": "return", + "type": "Object", + "options": [ + { + "textRaw": "`idle` {number}", + "name": "idle", + "type": "number" + }, + { + "textRaw": "`active` {number}", + "name": "active", + "type": "number" + }, + { + "textRaw": "`utilization` {number}", + "name": "utilization", + "type": "number" + } + ] + }, + "params": [ + { + "textRaw": "`utilization1` {Object} The result of a previous call to `eventLoopUtilization()`.", + "name": "utilization1", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()`." + }, + { + "textRaw": "`utilization2` {Object} The result of a previous call to `eventLoopUtilization()` prior to `utilization1`.", + "name": "utilization2", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()` prior to `utilization1`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      The eventLoopUtilization() method returns an object that contains the\ncumulative duration of time the event loop has been both idle and active as a\nhigh resolution milliseconds timer. The utilization value is the calculated\nEvent Loop Utilization (ELU).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If bootstrapping has not yet finished on the main thread the properties have\nthe value of 0. The ELU is immediately available on Worker threads since\nbootstrap happens within the event loop.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Both utilization1 and utilization2 are optional parameters.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If utilization1 is passed, then the delta between the current call's active\nand idle times, as well as the corresponding utilization value are\ncalculated and returned (similar to process.hrtime()).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If utilization1 and utilization2 are both passed, then the delta is\ncalculated between the two arguments. This is a convenience option because,\nunlike process.hrtime(), calculating the ELU is more complex than a\nsingle subtraction.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ELU is similar to CPU utilization, except that it only measures event loop\nstatistics and not CPU usage. It represents the percentage of time the event\nloop has spent outside the event loop's event provider (e.g. epoll_wait).\nNo other CPU idle time is taken into consideration. The following is an example\nof how a mostly idle process will have a high ELU.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      'use strict';\nconst { eventLoopUtilization } = require('perf_hooks').performance;\nconst { spawnSync } = require('child_process');\n\nsetImmediate(() => {\n  const elu = eventLoopUtilization();\n  spawnSync('sleep', ['5']);\n  console.log(eventLoopUtilization(elu).utilization);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Although the CPU is mostly idle while running this script, the value of\nutilization is 1. This is because the call to\nchild_process.spawnSync() blocks the event loop from proceeding.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Passing in a user-defined object instead of the result of a previous call to\neventLoopUtilization() will lead to undefined behavior. The return values\nare not guaranteed to reflect any correct state of the event loop.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`performance.mark([name])`", "type": "method", "name": "mark", @@ -43747,6 +45214,58 @@ } ], "desc": "

                                                                                                                                                                                                                                                      This property is an extension by Node.js. It is not available in Web browsers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Wraps a function within a new function that measures the running time of the\nwrapped function. A PerformanceObserver must be subscribed to the 'function'\nevent type in order for the timing details to be accessed.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const {\n  performance,\n  PerformanceObserver\n} = require('perf_hooks');\n\nfunction someFunction() {\n  console.log('hello world');\n}\n\nconst wrapped = performance.timerify(someFunction);\n\nconst obs = new PerformanceObserver((list) => {\n  console.log(list.getEntries()[0].duration);\n  obs.disconnect();\n});\nobs.observe({ entryTypes: ['function'] });\n\n// A performance timeline entry will be created\nwrapped();\n
                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`performance.eventLoopUtilization([util1][,util2])`", + "type": "method", + "name": "eventLoopUtilization", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns {Object}", + "name": "return", + "type": "Object", + "options": [ + { + "textRaw": "`idle` {number}", + "name": "idle", + "type": "number" + }, + { + "textRaw": "`active` {number}", + "name": "active", + "type": "number" + }, + { + "textRaw": "`utilization` {number}", + "name": "utilization", + "type": "number" + } + ] + }, + "params": [ + { + "textRaw": "`util1` {Object} The result of a previous call to `eventLoopUtilization()`", + "name": "util1", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()`" + }, + { + "textRaw": "`util2` {Object} The result of a previous call to `eventLoopUtilization()` prior to `util1`", + "name": "util2", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()` prior to `util1`" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      The eventLoopUtilization() method returns an object that contains the\ncumulative duration of time the event loop has been both idle and active as a\nhigh resolution milliseconds timer. The utilization value is the calculated\nEvent Loop Utilization (ELU). If bootstrapping has not yet finished, the\nproperties have the value of 0.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      util1 and util2 are optional parameters.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If util1 is passed then the delta between the current call's active and\nidle times are calculated and returned (similar to process.hrtime()).\nLikewise the adjusted utilization value is calculated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If util1 and util2 are both passed then the calculation adjustments are\ndone between the two arguments. This is a convenience option because unlike\nprocess.hrtime() additional work is done to calculate the ELU.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ELU is similar to CPU utilization except that it is calculated using high\nprecision wall-clock time. It represents the percentage of time the event loop\nhas spent outside the event loop's event provider (e.g. epoll_wait). No other\nCPU idle time is taken into consideration. The following is an example of how\na mostly idle process will have a high ELU.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      'use strict';\nconst { eventLoopUtilization } = require('perf_hooks').performance;\nconst { spawnSync } = require('child_process');\n\nsetImmediate(() => {\n  const elu = eventLoopUtilization();\n  spawnSync('sleep', ['5']);\n  console.log(eventLoopUtilization(elu).utilization);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Although the CPU is mostly idle while running this script, the value of\nutilization is 1. This is because the call to child_process.spawnSync()\nblocks the event loop from proceeding.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Passing in a user-defined object instead of the result of a previous call to\neventLoopUtilization() will lead to undefined behavior. The return values\nare not guaranteed to reflect any correct state of the event loop.

                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -43946,6 +45465,18 @@ "changes": [] }, "desc": "

                                                                                                                                                                                                                                                      The high resolution millisecond timestamp at which the V8 platform was\ninitialized.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`idleTime` {number}", + "type": "number", + "name": "idleTime", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      The high resolution millisecond timestamp of the amount of time the event loop\nhas been idle within the event loop's event provider (e.g. epoll_wait). This\ndoes not take CPU usage into consideration. If the event loop has not yet\nstarted (e.g., in the first tick of the main script), the property has the\nvalue of 0.

                                                                                                                                                                                                                                                      " } ] }, @@ -44369,24 +45900,21 @@ } ], "type": "module", - "displayName": "Performance Measurement APIs" + "displayName": "Performance measurement APIs" }, { "textRaw": "Punycode", "name": "punycode", "meta": { - "changes": [ - { - "version": "v7.0.0", - "pr-url": "https://github.com/nodejs/node/pull/7941", - "description": "Accessing this module will now emit a deprecation warning." - } - ] + "deprecated": [ + "v7.0.0" + ], + "changes": [] }, "introduced_in": "v0.10.0", "stability": 0, "stabilityText": "Deprecated", - "desc": "

                                                                                                                                                                                                                                                      The version of the punycode module bundled in Node.js is being deprecated.\nIn a future major version of Node.js this module will be removed. Users\ncurrently depending on the punycode module should switch to using the\nuserland-provided Punycode.js module instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The punycode module is a bundled version of the Punycode.js module. It\ncan be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const punycode = require('punycode');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Punycode is a character encoding scheme defined by RFC 3492 that is\nprimarily intended for use in Internationalized Domain Names. Because host\nnames in URLs are limited to ASCII characters only, Domain Names that contain\nnon-ASCII characters must be converted into ASCII using the Punycode scheme.\nFor instance, the Japanese character that translates into the English word,\n'example' is '例'. The Internationalized Domain Name, '例.com' (equivalent\nto 'example.com') is represented by Punycode as the ASCII string\n'xn--fsq.com'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The punycode module provides a simple implementation of the Punycode standard.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The punycode module is a third-party dependency used by Node.js and\nmade available to developers as a convenience. Fixes or other modifications to\nthe module must be directed to the Punycode.js project.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/punycode.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The version of the punycode module bundled in Node.js is being deprecated.\nIn a future major version of Node.js this module will be removed. Users\ncurrently depending on the punycode module should switch to using the\nuserland-provided Punycode.js module instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The punycode module is a bundled version of the Punycode.js module. It\ncan be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const punycode = require('punycode');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Punycode is a character encoding scheme defined by RFC 3492 that is\nprimarily intended for use in Internationalized Domain Names. Because host\nnames in URLs are limited to ASCII characters only, Domain Names that contain\nnon-ASCII characters must be converted into ASCII using the Punycode scheme.\nFor instance, the Japanese character that translates into the English word,\n'example' is '例'. The Internationalized Domain Name, '例.com' (equivalent\nto 'example.com') is represented by Punycode as the ASCII string\n'xn--fsq.com'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The punycode module provides a simple implementation of the Punycode standard.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The punycode module is a third-party dependency used by Node.js and\nmade available to developers as a convenience. Fixes or other modifications to\nthe module must be directed to the Punycode.js project.

                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`punycode.decode(string)`", @@ -44557,12 +46085,12 @@ "displayName": "Punycode" }, { - "textRaw": "Query String", + "textRaw": "Query string", "name": "querystring", "introduced_in": "v0.1.25", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The querystring module provides utilities for parsing and formatting URL\nquery strings. It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const querystring = require('querystring');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/querystring.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The querystring module provides utilities for parsing and formatting URL\nquery strings. It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const querystring = require('querystring');\n
                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`querystring.decode()`", @@ -44780,7 +46308,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The readline module provides an interface for reading data from a Readable\nstream (such as process.stdin) one line at a time. It can be accessed\nusing:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readline = require('readline');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following simple example illustrates the basic use of the readline module.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readline = require('readline');\n\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout\n});\n\nrl.question('What do you think of Node.js? ', (answer) => {\n  // TODO: Log the answer in a database\n  console.log(`Thank you for your valuable feedback: ${answer}`);\n\n  rl.close();\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once this code is invoked, the Node.js application will not terminate until the\nreadline.Interface is closed because the interface waits for data to be\nreceived on the input stream.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/readline.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readline module provides an interface for reading data from a Readable\nstream (such as process.stdin) one line at a time. It can be accessed\nusing:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readline = require('readline');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following simple example illustrates the basic use of the readline module.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readline = require('readline');\n\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout\n});\n\nrl.question('What do you think of Node.js? ', (answer) => {\n  // TODO: Log the answer in a database\n  console.log(`Thank you for your valuable feedback: ${answer}`);\n\n  rl.close();\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once this code is invoked, the Node.js application will not terminate until the\nreadline.Interface is closed because the interface waits for data to be\nreceived on the input stream.

                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `Interface`", @@ -45095,7 +46623,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Create an AsyncIterator object that iterates through each line in the input\nstream as a string. This method allows asynchronous iteration of\nreadline.Interface objects through for await...of loops.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Errors in the input stream are not forwarded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the loop is terminated with break, throw, or return,\nrl.close() will be called. In other words, iterating over a\nreadline.Interface will always consume the input stream fully.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Performance is not on par with the traditional 'line' event API. Use 'line'\ninstead for performance-sensitive applications.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      async function processLineByLine() {\n  const rl = readline.createInterface({\n    // ...\n  });\n\n  for await (const line of rl) {\n    // Each line in the readline input will be successively available here as\n    // `line`.\n  }\n}\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Create an AsyncIterator object that iterates through each line in the input\nstream as a string. This method allows asynchronous iteration of\nreadline.Interface objects through for await...of loops.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Errors in the input stream are not forwarded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the loop is terminated with break, throw, or return,\nrl.close() will be called. In other words, iterating over a\nreadline.Interface will always consume the input stream fully.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Performance is not on par with the traditional 'line' event API. Use 'line'\ninstead for performance-sensitive applications.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      async function processLineByLine() {\n  const rl = readline.createInterface({\n    // ...\n  });\n\n  for await (const line of rl) {\n    // Each line in the readline input will be successively available here as\n    // `line`.\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      readline.createInterface() will start to consume the input stream once\ninvoked. Having asynchronous operations between interface creation and\nasynchronous iteration may result in missed lines.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`rl.getCursorPos()`", @@ -45131,7 +46659,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns the real position of the cursor in relation to the input\nprompt + string. Long input (wrapping) strings, as well as multiple\nline prompts are included in the calculations.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns the real position of the cursor in relation to the input\nprompt + string. Long input (wrapping) strings, as well as multiple\nline prompts are included in the calculations.

                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -45145,7 +46673,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The current input data being processed by node.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This can be used when collecting input from a TTY stream to retrieve the\ncurrent value that has been processed thus far, prior to the line event\nbeing emitted. Once the line event has been emitted, this property will\nbe an empty string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Be aware that modifying the value during the instance runtime may have\nunintended consequences if rl.cursor is not also controlled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If not using a TTY stream for input, use the 'line' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      One possible use case would be as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const values = ['lorem ipsum', 'dolor sit amet'];\nconst rl = readline.createInterface(process.stdin);\nconst showResults = debounce(() => {\n  console.log(\n    '\\n',\n    values.filter((val) => val.startsWith(rl.line)).join(' ')\n  );\n}, 300);\nprocess.stdin.on('keypress', (c, k) => {\n  showResults();\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The current input data being processed by node.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This can be used when collecting input from a TTY stream to retrieve the\ncurrent value that has been processed thus far, prior to the line event\nbeing emitted. Once the line event has been emitted, this property will\nbe an empty string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Be aware that modifying the value during the instance runtime may have\nunintended consequences if rl.cursor is not also controlled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If not using a TTY stream for input, use the 'line' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      One possible use case would be as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const values = ['lorem ipsum', 'dolor sit amet'];\nconst rl = readline.createInterface(process.stdin);\nconst showResults = debounce(() => {\n  console.log(\n    '\\n',\n    values.filter((val) => val.startsWith(rl.line)).join(' ')\n  );\n}, 300);\nprocess.stdin.on('keypress', (c, k) => {\n  showResults();\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`cursor` {number|undefined}", @@ -45157,7 +46685,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The cursor position relative to rl.line.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This will track where the current cursor lands in the input string, when\nreading input from a TTY stream. The position of cursor determines the\nportion of the input string that will be modified as input is processed,\nas well as the column where the terminal caret will be rendered.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The cursor position relative to rl.line.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This will track where the current cursor lands in the input string, when\nreading input from a TTY stream. The position of cursor determines the\nportion of the input string that will be modified as input is processed,\nas well as the column where the terminal caret will be rendered.

                                                                                                                                                                                                                                                      " } ] } @@ -45374,11 +46902,11 @@ "desc": "

                                                                                                                                                                                                                                                      The readline.createInterface() method creates a new readline.Interface\ninstance.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readline = require('readline');\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the readline.Interface instance is created, the most common case is to\nlisten for the 'line' event:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      rl.on('line', (line) => {\n  console.log(`Received: ${line}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If terminal is true for this instance then the output stream will get\nthe best compatibility if it defines an output.columns property and emits\na 'resize' event on the output if or when the columns ever change\n(process.stdout does this automatically when it is a TTY).

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Use of the `completer` Function", + "textRaw": "Use of the `completer` function", "name": "use_of_the_`completer`_function", "desc": "

                                                                                                                                                                                                                                                      The completer function takes the current line entered by the user\nas an argument, and returns an Array with 2 entries:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • An Array with matching entries for the completion.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The substring that was used for the matching.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For instance: [[substr1, substr2, ...], originalsubstring].

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function completer(line) {\n  const completions = '.help .error .exit .quit .q'.split(' ');\n  const hits = completions.filter((c) => c.startsWith(line));\n  // Show all completions if none found\n  return [hits.length ? hits : completions, line];\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The completer function can be called asynchronously if it accepts two\narguments:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function completer(linePartial, callback) {\n  callback(null, [['123'], linePartial]);\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Use of the `completer` Function" + "displayName": "Use of the `completer` function" } ] }, @@ -45510,14 +47038,14 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The readline.moveCursor() method moves the cursor relative to its current\nposition in a given TTY stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: Tiny CLI

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example illustrates the use of readline.Interface class to\nimplement a small command-line interface:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readline = require('readline');\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout,\n  prompt: 'OHAI> '\n});\n\nrl.prompt();\n\nrl.on('line', (line) => {\n  switch (line.trim()) {\n    case 'hello':\n      console.log('world!');\n      break;\n    default:\n      console.log(`Say what? I might have heard '${line.trim()}'`);\n      break;\n  }\n  rl.prompt();\n}).on('close', () => {\n  console.log('Have a great day!');\n  process.exit(0);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: Read File Stream Line-by-Line

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A common use case for readline is to consume an input file one line at a\ntime. The easiest way to do so is leveraging the fs.ReadStream API as\nwell as a for await...of loop:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst readline = require('readline');\n\nasync function processLineByLine() {\n  const fileStream = fs.createReadStream('input.txt');\n\n  const rl = readline.createInterface({\n    input: fileStream,\n    crlfDelay: Infinity\n  });\n  // Note: we use the crlfDelay option to recognize all instances of CR LF\n  // ('\\r\\n') in input.txt as a single line break.\n\n  for await (const line of rl) {\n    // Each line in input.txt will be successively available here as `line`.\n    console.log(`Line from file: ${line}`);\n  }\n}\n\nprocessLineByLine();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, one could use the 'line' event:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst readline = require('readline');\n\nconst rl = readline.createInterface({\n  input: fs.createReadStream('sample.txt'),\n  crlfDelay: Infinity\n});\n\nrl.on('line', (line) => {\n  console.log(`Line from file: ${line}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Currently, for await...of loop can be a bit slower. If async / await\nflow and speed are both essential, a mixed approach can be applied:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { once } = require('events');\nconst { createReadStream } = require('fs');\nconst { createInterface } = require('readline');\n\n(async function processLineByLine() {\n  try {\n    const rl = createInterface({\n      input: createReadStream('big-file.txt'),\n      crlfDelay: Infinity\n    });\n\n    rl.on('line', (line) => {\n      // Process the line.\n    });\n\n    await once(rl, 'close');\n\n    console.log('File processed.');\n  } catch (err) {\n    console.error(err);\n  }\n})();\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The readline.moveCursor() method moves the cursor relative to its current\nposition in a given TTY stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: Tiny CLI

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example illustrates the use of readline.Interface class to\nimplement a small command-line interface:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readline = require('readline');\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout,\n  prompt: 'OHAI> '\n});\n\nrl.prompt();\n\nrl.on('line', (line) => {\n  switch (line.trim()) {\n    case 'hello':\n      console.log('world!');\n      break;\n    default:\n      console.log(`Say what? I might have heard '${line.trim()}'`);\n      break;\n  }\n  rl.prompt();\n}).on('close', () => {\n  console.log('Have a great day!');\n  process.exit(0);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: Read file stream line-by-Line

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A common use case for readline is to consume an input file one line at a\ntime. The easiest way to do so is leveraging the fs.ReadStream API as\nwell as a for await...of loop:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst readline = require('readline');\n\nasync function processLineByLine() {\n  const fileStream = fs.createReadStream('input.txt');\n\n  const rl = readline.createInterface({\n    input: fileStream,\n    crlfDelay: Infinity\n  });\n  // Note: we use the crlfDelay option to recognize all instances of CR LF\n  // ('\\r\\n') in input.txt as a single line break.\n\n  for await (const line of rl) {\n    // Each line in input.txt will be successively available here as `line`.\n    console.log(`Line from file: ${line}`);\n  }\n}\n\nprocessLineByLine();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, one could use the 'line' event:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst readline = require('readline');\n\nconst rl = readline.createInterface({\n  input: fs.createReadStream('sample.txt'),\n  crlfDelay: Infinity\n});\n\nrl.on('line', (line) => {\n  console.log(`Line from file: ${line}`);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Currently, for await...of loop can be a bit slower. If async / await\nflow and speed are both essential, a mixed approach can be applied:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { once } = require('events');\nconst { createReadStream } = require('fs');\nconst { createInterface } = require('readline');\n\n(async function processLineByLine() {\n  try {\n    const rl = createInterface({\n      input: createReadStream('big-file.txt'),\n      crlfDelay: Infinity\n    });\n\n    rl.on('line', (line) => {\n      // Process the line.\n    });\n\n    await once(rl, 'close');\n\n    console.log('File processed.');\n  } catch (err) {\n    console.error(err);\n  }\n})();\n
                                                                                                                                                                                                                                                      " } ], "modules": [ { "textRaw": "TTY keybindings", "name": "tty_keybindings", - "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      KeybindingsDescriptionNotes
                                                                                                                                                                                                                                                      ctrl + shift + backspaceDelete line leftDoesn't work on Linux, Mac and Windows
                                                                                                                                                                                                                                                      ctrl + shift + deleteDelete line rightDoesn't work on Linux and Mac
                                                                                                                                                                                                                                                      ctrl + cEmit SIGINT or close the readline instance
                                                                                                                                                                                                                                                      ctrl + hDelete left
                                                                                                                                                                                                                                                      ctrl + dDelete right or close the readline instance in case the current line is empty / EOFDoesn't work on Windows
                                                                                                                                                                                                                                                      ctrl + uDelete from the current position to the line start
                                                                                                                                                                                                                                                      ctrl + kDelete from the current position to the end of line
                                                                                                                                                                                                                                                      ctrl + aGo to start of line
                                                                                                                                                                                                                                                      ctrl + eGo to to end of line
                                                                                                                                                                                                                                                      ctrl + bBack one character
                                                                                                                                                                                                                                                      ctrl + fForward one character
                                                                                                                                                                                                                                                      ctrl + lClear screen
                                                                                                                                                                                                                                                      ctrl + nNext history item
                                                                                                                                                                                                                                                      ctrl + pPrevious history item
                                                                                                                                                                                                                                                      ctrl + zMoves running process into background. Type\n fg and press enter\n to return.Doesn't work on Windows
                                                                                                                                                                                                                                                      ctrl + w or ctrl\n + backspaceDelete backwards to a word boundaryctrl + backspace Doesn't\n work as expected on Windows
                                                                                                                                                                                                                                                      ctrl + deleteDelete forward to a word boundaryDoesn't work on Mac
                                                                                                                                                                                                                                                      ctrl + left or\n meta + bWord leftctrl + left Doesn't work\n on Mac
                                                                                                                                                                                                                                                      ctrl + right or\n meta + fWord rightctrl + right Doesn't work\n on Mac
                                                                                                                                                                                                                                                      meta + d or meta\n + deleteDelete word rightmeta + delete Doesn't work\n on windows
                                                                                                                                                                                                                                                      meta + backspaceDelete word leftDoesn't work on Mac
                                                                                                                                                                                                                                                      ", + "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                      KeybindingsDescriptionNotes
                                                                                                                                                                                                                                                      ctrl + shift + backspaceDelete line leftDoesn't work on Linux, Mac and Windows
                                                                                                                                                                                                                                                      ctrl + shift + deleteDelete line rightDoesn't work on Mac
                                                                                                                                                                                                                                                      ctrl + cEmit SIGINT or close the readline instance
                                                                                                                                                                                                                                                      ctrl + hDelete left
                                                                                                                                                                                                                                                      ctrl + dDelete right or close the readline instance in case the current line is empty / EOFDoesn't work on Windows
                                                                                                                                                                                                                                                      ctrl + uDelete from the current position to the line start
                                                                                                                                                                                                                                                      ctrl + kDelete from the current position to the end of line
                                                                                                                                                                                                                                                      ctrl + aGo to start of line
                                                                                                                                                                                                                                                      ctrl + eGo to to end of line
                                                                                                                                                                                                                                                      ctrl + bBack one character
                                                                                                                                                                                                                                                      ctrl + fForward one character
                                                                                                                                                                                                                                                      ctrl + lClear screen
                                                                                                                                                                                                                                                      ctrl + nNext history item
                                                                                                                                                                                                                                                      ctrl + pPrevious history item
                                                                                                                                                                                                                                                      ctrl + zMoves running process into background. Type\n fg and press enter\n to return.Doesn't work on Windows
                                                                                                                                                                                                                                                      ctrl + w or ctrl\n + backspaceDelete backward to a word boundaryctrl + backspace Doesn't\n work on Linux, Mac and Windows
                                                                                                                                                                                                                                                      ctrl + deleteDelete forward to a word boundaryDoesn't work on Mac
                                                                                                                                                                                                                                                      ctrl + left or\n meta + bWord leftctrl + left Doesn't work\n on Mac
                                                                                                                                                                                                                                                      ctrl + right or\n meta + fWord rightctrl + right Doesn't work\n on Mac
                                                                                                                                                                                                                                                      meta + d or meta\n + deleteDelete word rightmeta + delete Doesn't work\n on windows
                                                                                                                                                                                                                                                      meta + backspaceDelete word leftDoesn't work on Mac
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "TTY keybindings" } @@ -45531,48 +47059,48 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The repl module provides a Read-Eval-Print-Loop (REPL) implementation that\nis available both as a standalone program or includible in other applications.\nIt can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const repl = require('repl');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/repl.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The repl module provides a Read-Eval-Print-Loop (REPL) implementation that\nis available both as a standalone program or includible in other applications.\nIt can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const repl = require('repl');\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Design and Features", + "textRaw": "Design and features", "name": "design_and_features", "desc": "

                                                                                                                                                                                                                                                      The repl module exports the repl.REPLServer class. While running,\ninstances of repl.REPLServer will accept individual lines of user input,\nevaluate those according to a user-defined evaluation function, then output the\nresult. Input and output may be from stdin and stdout, respectively, or may\nbe connected to any Node.js stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Instances of repl.REPLServer support automatic completion of inputs,\ncompletion preview, simplistic Emacs-style line editing, multi-line inputs,\nZSH-like reverse-i-search, ZSH-like substring-based history search,\nANSI-styled output, saving and restoring current REPL session state, error\nrecovery, and customizable evaluation functions. Terminals that do not support\nANSI styles and Emacs-style line editing automatically fall back to a limited\nfeature set.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Commands and Special Keys", + "textRaw": "Commands and special keys", "name": "commands_and_special_keys", - "desc": "

                                                                                                                                                                                                                                                      The following special commands are supported by all REPL instances:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • .break: When in the process of inputting a multi-line expression, entering\nthe .break command (or pressing the <ctrl>-C key combination) will abort\nfurther input or processing of that expression.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .clear: Resets the REPL context to an empty object and clears any\nmulti-line expression currently being input.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .exit: Close the I/O stream, causing the REPL to exit.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .help: Show this list of special commands.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .save: Save the current REPL session to a file:\n> .save ./file/to/save.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .load: Load a file into the current REPL session.\n> .load ./file/to/load.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .editor: Enter editor mode (<ctrl>-D to finish, <ctrl>-C to cancel).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > .editor\n// Entering editor mode (^D to finish, ^C to cancel)\nfunction welcome(name) {\n  return `Hello ${name}!`;\n}\n\nwelcome('Node.js User');\n\n// ^D\n'Hello Node.js User!'\n>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following key combinations in the REPL have these special effects:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • <ctrl>-C: When pressed once, has the same effect as the .break command.\nWhen pressed twice on a blank line, has the same effect as the .exit\ncommand.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • <ctrl>-D: Has the same effect as the .exit command.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • <tab>: When pressed on a blank line, displays global and local (scope)\nvariables. When pressed while entering other input, displays relevant\nautocompletion options.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For key bindings related to the reverse-i-search, see reverse-i-search.\nFor all other key bindings, see TTY keybindings.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The following special commands are supported by all REPL instances:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • .break: When in the process of inputting a multi-line expression, entering\nthe .break command (or pressing the <ctrl>-C key combination) will abort\nfurther input or processing of that expression.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .clear: Resets the REPL context to an empty object and clears any\nmulti-line expression being input.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .exit: Close the I/O stream, causing the REPL to exit.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .help: Show this list of special commands.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .save: Save the current REPL session to a file:\n> .save ./file/to/save.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .load: Load a file into the current REPL session.\n> .load ./file/to/load.js
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • .editor: Enter editor mode (<ctrl>-D to finish, <ctrl>-C to cancel).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > .editor\n// Entering editor mode (^D to finish, ^C to cancel)\nfunction welcome(name) {\n  return `Hello ${name}!`;\n}\n\nwelcome('Node.js User');\n\n// ^D\n'Hello Node.js User!'\n>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following key combinations in the REPL have these special effects:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • <ctrl>-C: When pressed once, has the same effect as the .break command.\nWhen pressed twice on a blank line, has the same effect as the .exit\ncommand.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • <ctrl>-D: Has the same effect as the .exit command.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • <tab>: When pressed on a blank line, displays global and local (scope)\nvariables. When pressed while entering other input, displays relevant\nautocompletion options.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For key bindings related to the reverse-i-search, see reverse-i-search.\nFor all other key bindings, see TTY keybindings.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Commands and Special Keys" + "displayName": "Commands and special keys" }, { - "textRaw": "Default Evaluation", + "textRaw": "Default evaluation", "name": "default_evaluation", "desc": "

                                                                                                                                                                                                                                                      By default, all instances of repl.REPLServer use an evaluation function\nthat evaluates JavaScript expressions and provides access to Node.js built-in\nmodules. This default behavior can be overridden by passing in an alternative\nevaluation function when the repl.REPLServer instance is created.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "JavaScript Expressions", + "textRaw": "JavaScript expressions", "name": "javascript_expressions", "desc": "

                                                                                                                                                                                                                                                      The default evaluator supports direct evaluation of JavaScript expressions:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > 1 + 1\n2\n> const m = 2\nundefined\n> m + 1\n3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless otherwise scoped within blocks or functions, variables declared\neither implicitly or using the const, let, or var keywords\nare declared at the global scope.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "JavaScript Expressions" + "displayName": "JavaScript expressions" }, { - "textRaw": "Global and Local Scope", + "textRaw": "Global and local scope", "name": "global_and_local_scope", "desc": "

                                                                                                                                                                                                                                                      The default evaluator provides access to any variables that exist in the global\nscope. It is possible to expose a variable to the REPL explicitly by assigning\nit to the context object associated with each REPLServer:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const repl = require('repl');\nconst msg = 'message';\n\nrepl.start('> ').context.m = msg;\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Properties in the context object appear as local within the REPL:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node repl_test.js\n> m\n'message'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Context properties are not read-only by default. To specify read-only globals,\ncontext properties must be defined using Object.defineProperty():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const repl = require('repl');\nconst msg = 'message';\n\nconst r = repl.start('> ');\nObject.defineProperty(r.context, 'm', {\n  configurable: false,\n  enumerable: true,\n  value: msg\n});\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Global and Local Scope" + "displayName": "Global and local scope" }, { - "textRaw": "Accessing Core Node.js Modules", + "textRaw": "Accessing core Node.js modules", "name": "accessing_core_node.js_modules", "desc": "

                                                                                                                                                                                                                                                      The default evaluator will automatically load Node.js core modules into the\nREPL environment when used. For instance, unless otherwise declared as a\nglobal or scoped variable, the input fs will be evaluated on-demand as\nglobal.fs = require('fs').

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > fs.createReadStream('./some/file');\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Accessing Core Node.js Modules" + "displayName": "Accessing core Node.js modules" }, { - "textRaw": "Global Uncaught Exceptions", + "textRaw": "Global uncaught exceptions", "name": "global_uncaught_exceptions", "meta": { "changes": [ @@ -45585,7 +47113,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      The REPL uses the domain module to catch all uncaught exceptions for that\nREPL session.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This use of the domain module in the REPL has these side effects:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      As standalone program:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('uncaughtException', () => console.log('Uncaught'));\n\nthrow new Error('foobar');\n// Uncaught\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When used in another application:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('uncaughtException', () => console.log('Uncaught'));\n// TypeError [ERR_INVALID_REPL_INPUT]: Listeners for `uncaughtException`\n// cannot be used in the REPL\n\nthrow new Error('foobar');\n// Thrown:\n// Error: foobar\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Global Uncaught Exceptions" + "displayName": "Global uncaught exceptions" }, { "textRaw": "Assignment of the `_` (underscore) variable", @@ -45612,7 +47140,7 @@ } ], "type": "module", - "displayName": "Default Evaluation" + "displayName": "Default evaluation" }, { "textRaw": "Reverse-i-search", @@ -45623,36 +47151,36 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The REPL supports bi-directional reverse-i-search similar to ZSH. It is\ntriggered with <ctrl> + R to search backwards and <ctrl> + S to search\nforwards.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Duplicated history entires will be skipped.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Entries are accepted as soon as any button is pressed that doesn't correspond\nwith the reverse search. Cancelling is possible by pressing escape or\n<ctrl> + C.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Changing the direction immediately searches for the next entry in the expected\ndirection from the current position on.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The REPL supports bi-directional reverse-i-search similar to ZSH. It is\ntriggered with <ctrl> + R to search backward and <ctrl> + S to search\nforward.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Duplicated history entires will be skipped.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Entries are accepted as soon as any button is pressed that doesn't correspond\nwith the reverse search. Cancelling is possible by pressing escape or\n<ctrl> + C.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Changing the direction immediately searches for the next entry in the expected\ndirection from the current position on.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Reverse-i-search" }, { - "textRaw": "Custom Evaluation Functions", + "textRaw": "Custom evaluation functions", "name": "custom_evaluation_functions", "desc": "

                                                                                                                                                                                                                                                      When a new repl.REPLServer is created, a custom evaluation function may be\nprovided. This can be used, for instance, to implement fully customized REPL\napplications.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following illustrates a hypothetical example of a REPL that performs\ntranslation of text from one language to another:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const repl = require('repl');\nconst { Translator } = require('translator');\n\nconst myTranslator = new Translator('en', 'fr');\n\nfunction myEval(cmd, context, filename, callback) {\n  callback(null, myTranslator.translate(cmd));\n}\n\nrepl.start({ prompt: '> ', eval: myEval });\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Recoverable Errors", + "textRaw": "Recoverable errors", "name": "recoverable_errors", "desc": "

                                                                                                                                                                                                                                                      As a user is typing input into the REPL prompt, pressing the <enter> key will\nsend the current line of input to the eval function. In order to support\nmulti-line input, the eval function can return an instance of repl.Recoverable\nto the provided callback function:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function myEval(cmd, context, filename, callback) {\n  let result;\n  try {\n    result = vm.runInThisContext(cmd);\n  } catch (e) {\n    if (isRecoverableError(e)) {\n      return callback(new repl.Recoverable(e));\n    }\n  }\n  callback(null, result);\n}\n\nfunction isRecoverableError(error) {\n  if (error.name === 'SyntaxError') {\n    return /^(Unexpected end of input|Unexpected token)/.test(error.message);\n  }\n  return false;\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Recoverable Errors" + "displayName": "Recoverable errors" } ], "type": "module", - "displayName": "Custom Evaluation Functions" + "displayName": "Custom evaluation functions" }, { - "textRaw": "Customizing REPL Output", + "textRaw": "Customizing REPL output", "name": "customizing_repl_output", "desc": "

                                                                                                                                                                                                                                                      By default, repl.REPLServer instances format output using the\nutil.inspect() method before writing the output to the provided Writable\nstream (process.stdout by default). The showProxy inspection option is set\nto true by default and the colors option is set to true depending on the\nREPL's useColors option.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The useColors boolean option can be specified at construction to instruct the\ndefault writer to use ANSI style codes to colorize the output from the\nutil.inspect() method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the REPL is run as standalone program, it is also possible to change the\nREPL's inspection defaults from inside the REPL by using the\ninspect.replDefaults property which mirrors the defaultOptions from\nutil.inspect().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > util.inspect.replDefaults.compact = false;\nfalse\n> [1]\n[\n  1\n]\n>\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To fully customize the output of a repl.REPLServer instance pass in a new\nfunction for the writer option on construction. The following example, for\ninstance, simply converts any input text to upper case:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const repl = require('repl');\n\nconst r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter });\n\nfunction myEval(cmd, context, filename, callback) {\n  callback(null, cmd);\n}\n\nfunction myWriter(output) {\n  return output.toUpperCase();\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Customizing REPL Output" + "displayName": "Customizing REPL output" } ], "type": "module", - "displayName": "Design and Features" + "displayName": "Design and features" }, { "textRaw": "The Node.js REPL", @@ -45660,18 +47188,18 @@ "desc": "

                                                                                                                                                                                                                                                      Node.js itself uses the repl module to provide its own interactive interface\nfor executing JavaScript. This can be used by executing the Node.js binary\nwithout passing any arguments (or by passing the -i argument):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node\n> const a = [1, 2, 3];\nundefined\n> a\n[ 1, 2, 3 ]\n> a.forEach((v) => {\n...   console.log(v);\n...   });\n1\n2\n3\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Environment Variable Options", + "textRaw": "Environment variable options", "name": "environment_variable_options", "desc": "

                                                                                                                                                                                                                                                      Various behaviors of the Node.js REPL can be customized using the following\nenvironment variables:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • NODE_REPL_HISTORY: When a valid path is given, persistent REPL history\nwill be saved to the specified file rather than .node_repl_history in the\nuser's home directory. Setting this value to '' (an empty string) will\ndisable persistent REPL history. Whitespace will be trimmed from the value.\nOn Windows platforms environment variables with empty values are invalid so\nset this variable to one or more spaces to disable persistent REPL history.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • NODE_REPL_HISTORY_SIZE: Controls how many lines of history will be\npersisted if history is available. Must be a positive number.\nDefault: 1000.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • NODE_REPL_MODE: May be either 'sloppy' or 'strict'. Default:\n'sloppy', which will allow non-strict mode code to be run.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Environment Variable Options" + "displayName": "Environment variable options" }, { - "textRaw": "Persistent History", + "textRaw": "Persistent history", "name": "persistent_history", "desc": "

                                                                                                                                                                                                                                                      By default, the Node.js REPL will persist history between node REPL sessions\nby saving inputs to a .node_repl_history file located in the user's home\ndirectory. This can be disabled by setting the environment variable\nNODE_REPL_HISTORY=''.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Persistent History" + "displayName": "Persistent history" }, { "textRaw": "Using the Node.js REPL with advanced line-editors", @@ -45683,7 +47211,7 @@ { "textRaw": "Starting multiple REPL instances against a single running instance", "name": "starting_multiple_repl_instances_against_a_single_running_instance", - "desc": "

                                                                                                                                                                                                                                                      It is possible to create and run multiple REPL instances against a single\nrunning instance of Node.js that share a single global object but have\nseparate I/O interfaces.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example, for instance, provides separate REPLs on stdin, a Unix\nsocket, and a TCP socket:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const net = require('net');\nconst repl = require('repl');\nlet connections = 0;\n\nrepl.start({\n  prompt: 'Node.js via stdin> ',\n  input: process.stdin,\n  output: process.stdout\n});\n\nnet.createServer((socket) => {\n  connections += 1;\n  repl.start({\n    prompt: 'Node.js via Unix socket> ',\n    input: socket,\n    output: socket\n  }).on('exit', () => {\n    socket.end();\n  });\n}).listen('/tmp/node-repl-sock');\n\nnet.createServer((socket) => {\n  connections += 1;\n  repl.start({\n    prompt: 'Node.js via TCP socket> ',\n    input: socket,\n    output: socket\n  }).on('exit', () => {\n    socket.end();\n  });\n}).listen(5001);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Running this application from the command line will start a REPL on stdin.\nOther REPL clients may connect through the Unix socket or TCP socket. telnet,\nfor instance, is useful for connecting to TCP sockets, while socat can be used\nto connect to both Unix and TCP sockets.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By starting a REPL from a Unix socket-based server instead of stdin, it is\npossible to connect to a long-running Node.js process without restarting it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For an example of running a \"full-featured\" (terminal) REPL over\na net.Server and net.Socket instance, see:\nhttps://gist.github.com/TooTallNate/2209310.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For an example of running a REPL instance over curl(1), see:\nhttps://gist.github.com/TooTallNate/2053342.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      It is possible to create and run multiple REPL instances against a single\nrunning instance of Node.js that share a single global object but have\nseparate I/O interfaces.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example, for instance, provides separate REPLs on stdin, a Unix\nsocket, and a TCP socket:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const net = require('net');\nconst repl = require('repl');\nlet connections = 0;\n\nrepl.start({\n  prompt: 'Node.js via stdin> ',\n  input: process.stdin,\n  output: process.stdout\n});\n\nnet.createServer((socket) => {\n  connections += 1;\n  repl.start({\n    prompt: 'Node.js via Unix socket> ',\n    input: socket,\n    output: socket\n  }).on('exit', () => {\n    socket.end();\n  });\n}).listen('/tmp/node-repl-sock');\n\nnet.createServer((socket) => {\n  connections += 1;\n  repl.start({\n    prompt: 'Node.js via TCP socket> ',\n    input: socket,\n    output: socket\n  }).on('exit', () => {\n    socket.end();\n  });\n}).listen(5001);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Running this application from the command line will start a REPL on stdin.\nOther REPL clients may connect through the Unix socket or TCP socket. telnet,\nfor instance, is useful for connecting to TCP sockets, while socat can be used\nto connect to both Unix and TCP sockets.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By starting a REPL from a Unix socket-based server instead of stdin, it is\npossible to connect to a long-running Node.js process without restarting it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For an example of running a \"full-featured\" (terminal) REPL over\na net.Server and net.Socket instance, see:\nhttps://gist.github.com/TooTallNate/2209310.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For an example of running a REPL instance over curl(1), see:\nhttps://gist.github.com/TooTallNate/2053342.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Starting multiple REPL instances against a single running instance" } @@ -45914,6 +47442,11 @@ "description": "The `REPL_MAGIC_MODE` `replMode` was removed." }, { + "version": "v6.3.0", + "pr-url": "https://github.com/nodejs/node/pull/6635", + "description": "The `breakEvalOnSigint` option is supported now." + }, + { "version": "v5.8.0", "pr-url": "https://github.com/nodejs/node/pull/5388", "description": "The `options` parameter is optional now." @@ -46051,26 +47584,26 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      A stream is an abstract interface for working with streaming data in Node.js.\nThe stream module provides an API for implementing the stream interface.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are many stream objects provided by Node.js. For instance, a\nrequest to an HTTP server and process.stdout\nare both stream instances.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Streams can be readable, writable, or both. All streams are instances of\nEventEmitter.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To access the stream module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const stream = require('stream');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream module is useful for creating new types of stream instances. It is\nusually not necessary to use the stream module to consume streams.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/stream.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A stream is an abstract interface for working with streaming data in Node.js.\nThe stream module provides an API for implementing the stream interface.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are many stream objects provided by Node.js. For instance, a\nrequest to an HTTP server and process.stdout\nare both stream instances.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Streams can be readable, writable, or both. All streams are instances of\nEventEmitter.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To access the stream module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const stream = require('stream');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream module is useful for creating new types of stream instances. It is\nusually not necessary to use the stream module to consume streams.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Organization of this Document", + "textRaw": "Organization of this document", "name": "organization_of_this_document", "desc": "

                                                                                                                                                                                                                                                      This document contains two primary sections and a third section for notes. The\nfirst section explains how to use existing streams within an application. The\nsecond section explains how to create new types of streams.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Organization of this Document" + "displayName": "Organization of this document" }, { - "textRaw": "Types of Streams", + "textRaw": "Types of streams", "name": "types_of_streams", "desc": "

                                                                                                                                                                                                                                                      There are four fundamental stream types within Node.js:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Additionally, this module includes the utility functions\nstream.pipeline(), stream.finished() and\nstream.Readable.from().

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Object Mode", + "textRaw": "Object mode", "name": "object_mode", "desc": "

                                                                                                                                                                                                                                                      All streams created by Node.js APIs operate exclusively on strings and Buffer\n(or Uint8Array) objects. It is possible, however, for stream implementations\nto work with other types of JavaScript values (with the exception of null,\nwhich serves a special purpose within streams). Such streams are considered to\noperate in \"object mode\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stream instances are switched into object mode using the objectMode option\nwhen the stream is created. Attempting to switch an existing stream into\nobject mode is not safe.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Object Mode" + "displayName": "Object mode" } ], "miscs": [ @@ -46078,11 +47611,11 @@ "textRaw": "Buffering", "name": "Buffering", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Both Writable and Readable streams will store data in an internal\nbuffer that can be retrieved using writable.writableBuffer or\nreadable.readableBuffer, respectively.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The amount of data potentially buffered depends on the highWaterMark option\npassed into the stream's constructor. For normal streams, the highWaterMark\noption specifies a total number of bytes. For streams operating\nin object mode, the highWaterMark specifies a total number of objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Data is buffered in Readable streams when the implementation calls\nstream.push(chunk). If the consumer of the Stream does not\ncall stream.read(), the data will sit in the internal\nqueue until it is consumed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the total size of the internal read buffer reaches the threshold specified\nby highWaterMark, the stream will temporarily stop reading data from the\nunderlying resource until the data currently buffered can be consumed (that is,\nthe stream will stop calling the internal readable._read() method that is\nused to fill the read buffer).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Data is buffered in Writable streams when the\nwritable.write(chunk) method is called repeatedly. While the\ntotal size of the internal write buffer is below the threshold set by\nhighWaterMark, calls to writable.write() will return true. Once\nthe size of the internal buffer reaches or exceeds the highWaterMark, false\nwill be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A key goal of the stream API, particularly the stream.pipe() method,\nis to limit the buffering of data to acceptable levels such that sources and\ndestinations of differing speeds will not overwhelm the available memory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The highWaterMark option is a threshold, not a limit: it dictates the amount\nof data that a stream buffers before it stops asking for more data. It does not\nenforce a strict memory limitation in general. Specific stream implementations\nmay choose to enforce stricter limits but doing so is optional.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because Duplex and Transform streams are both Readable and\nWritable, each maintains two separate internal buffers used for reading and\nwriting, allowing each side to operate independently of the other while\nmaintaining an appropriate and efficient flow of data. For example,\nnet.Socket instances are Duplex streams whose Readable side allows\nconsumption of data received from the socket and whose Writable side allows\nwriting data to the socket. Because data may be written to the socket at a\nfaster or slower rate than data is received, each side should\noperate (and buffer) independently of the other.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Both Writable and Readable streams will store data in an internal\nbuffer that can be retrieved using writable.writableBuffer or\nreadable.readableBuffer, respectively.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The amount of data potentially buffered depends on the highWaterMark option\npassed into the stream's constructor. For normal streams, the highWaterMark\noption specifies a total number of bytes. For streams operating\nin object mode, the highWaterMark specifies a total number of objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Data is buffered in Readable streams when the implementation calls\nstream.push(chunk). If the consumer of the Stream does not\ncall stream.read(), the data will sit in the internal\nqueue until it is consumed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the total size of the internal read buffer reaches the threshold specified\nby highWaterMark, the stream will temporarily stop reading data from the\nunderlying resource until the data currently buffered can be consumed (that is,\nthe stream will stop calling the internal readable._read() method that is\nused to fill the read buffer).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Data is buffered in Writable streams when the\nwritable.write(chunk) method is called repeatedly. While the\ntotal size of the internal write buffer is below the threshold set by\nhighWaterMark, calls to writable.write() will return true. Once\nthe size of the internal buffer reaches or exceeds the highWaterMark, false\nwill be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A key goal of the stream API, particularly the stream.pipe() method,\nis to limit the buffering of data to acceptable levels such that sources and\ndestinations of differing speeds will not overwhelm the available memory.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The highWaterMark option is a threshold, not a limit: it dictates the amount\nof data that a stream buffers before it stops asking for more data. It does not\nenforce a strict memory limitation in general. Specific stream implementations\nmay choose to enforce stricter limits but doing so is optional.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because Duplex and Transform streams are both Readable and\nWritable, each maintains two separate internal buffers used for reading and\nwriting, allowing each side to operate independently of the other while\nmaintaining an appropriate and efficient flow of data. For example,\nnet.Socket instances are Duplex streams whose Readable side allows\nconsumption of data received from the socket and whose Writable side allows\nwriting data to the socket. Because data may be written to the socket at a\nfaster or slower rate than data is received, each side should\noperate (and buffer) independently of the other.

                                                                                                                                                                                                                                                      " } ], "type": "module", - "displayName": "Types of Streams" + "displayName": "Types of streams" } ], "methods": [ @@ -46218,7 +47751,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      A utility method for creating Readable Streams out of iterators.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nasync function * generate() {\n  yield 'hello';\n  yield 'streams';\n}\n\nconst readable = Readable.from(generate());\n\nreadable.on('data', (chunk) => {\n  console.log(chunk);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling Readable.from(string) or Readable.from(buffer) will not have\nthe strings or buffers be iterated to match the other streams semantics\nfor performance reasons.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      A utility method for creating readable streams out of iterators.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nasync function * generate() {\n  yield 'hello';\n  yield 'streams';\n}\n\nconst readable = Readable.from(generate());\n\nreadable.on('data', (chunk) => {\n  console.log(chunk);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling Readable.from(string) or Readable.from(buffer) will not have\nthe strings or buffers be iterated to match the other streams semantics\nfor performance reasons.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`readable.read(0)`", @@ -46245,13 +47778,13 @@ ], "miscs": [ { - "textRaw": "API for Stream Consumers", - "name": "API for Stream Consumers", + "textRaw": "API for stream consumers", + "name": "API for stream consumers", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Almost all Node.js applications, no matter how simple, use streams in some\nmanner. The following is an example of using streams in a Node.js application\nthat implements an HTTP server:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http = require('http');\n\nconst server = http.createServer((req, res) => {\n  // `req` is an http.IncomingMessage, which is a Readable Stream.\n  // `res` is an http.ServerResponse, which is a Writable Stream.\n\n  let body = '';\n  // Get the data as utf8 strings.\n  // If an encoding is not set, Buffer objects will be received.\n  req.setEncoding('utf8');\n\n  // Readable streams emit 'data' events once a listener is added.\n  req.on('data', (chunk) => {\n    body += chunk;\n  });\n\n  // The 'end' event indicates that the entire body has been received.\n  req.on('end', () => {\n    try {\n      const data = JSON.parse(body);\n      // Write back something interesting to the user:\n      res.write(typeof data);\n      res.end();\n    } catch (er) {\n      // uh oh! bad json!\n      res.statusCode = 400;\n      return res.end(`error: ${er.message}`);\n    }\n  });\n});\n\nserver.listen(1337);\n\n// $ curl localhost:1337 -d \"{}\"\n// object\n// $ curl localhost:1337 -d \"\\\"foo\\\"\"\n// string\n// $ curl localhost:1337 -d \"not json\"\n// error: Unexpected token o in JSON at position 1\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Writable streams (such as res in the example) expose methods such as\nwrite() and end() that are used to write data onto the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Readable streams use the EventEmitter API for notifying application\ncode when data is available to be read off the stream. That available data can\nbe read from the stream in multiple ways.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Both Writable and Readable streams use the EventEmitter API in\nvarious ways to communicate the current state of the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Duplex and Transform streams are both Writable and\nReadable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Applications that are either writing data to or consuming data from a stream\nare not required to implement the stream interfaces directly and will generally\nhave no reason to call require('stream').

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Developers wishing to implement new types of streams should refer to the\nsection API for Stream Implementers.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Almost all Node.js applications, no matter how simple, use streams in some\nmanner. The following is an example of using streams in a Node.js application\nthat implements an HTTP server:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const http = require('http');\n\nconst server = http.createServer((req, res) => {\n  // `req` is an http.IncomingMessage, which is a readable stream.\n  // `res` is an http.ServerResponse, which is a writable stream.\n\n  let body = '';\n  // Get the data as utf8 strings.\n  // If an encoding is not set, Buffer objects will be received.\n  req.setEncoding('utf8');\n\n  // Readable streams emit 'data' events once a listener is added.\n  req.on('data', (chunk) => {\n    body += chunk;\n  });\n\n  // The 'end' event indicates that the entire body has been received.\n  req.on('end', () => {\n    try {\n      const data = JSON.parse(body);\n      // Write back something interesting to the user:\n      res.write(typeof data);\n      res.end();\n    } catch (er) {\n      // uh oh! bad json!\n      res.statusCode = 400;\n      return res.end(`error: ${er.message}`);\n    }\n  });\n});\n\nserver.listen(1337);\n\n// $ curl localhost:1337 -d \"{}\"\n// object\n// $ curl localhost:1337 -d \"\\\"foo\\\"\"\n// string\n// $ curl localhost:1337 -d \"not json\"\n// error: Unexpected token o in JSON at position 1\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Writable streams (such as res in the example) expose methods such as\nwrite() and end() that are used to write data onto the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Readable streams use the EventEmitter API for notifying application\ncode when data is available to be read off the stream. That available data can\nbe read from the stream in multiple ways.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Both Writable and Readable streams use the EventEmitter API in\nvarious ways to communicate the current state of the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Duplex and Transform streams are both Writable and\nReadable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Applications that are either writing data to or consuming data from a stream\nare not required to implement the stream interfaces directly and will generally\nhave no reason to call require('stream').

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Developers wishing to implement new types of streams should refer to the\nsection API for stream implementers.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Writable Streams", + "textRaw": "Writable streams", "name": "writable_streams", "desc": "

                                                                                                                                                                                                                                                      Writable streams are an abstraction for a destination to which data is\nwritten.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Examples of Writable streams include:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Some of these examples are actually Duplex streams that implement the\nWritable interface.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Writable streams implement the interface defined by the\nstream.Writable class.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While specific instances of Writable streams may differ in various ways,\nall Writable streams follow the same fundamental usage pattern as illustrated\nin the example below:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myStream = getWritableStreamSomehow();\nmyStream.write('some data');\nmyStream.write('some more data');\nmyStream.end('done writing data');\n
                                                                                                                                                                                                                                                      ", "classes": [ @@ -46314,7 +47847,7 @@ "type": "Error" } ], - "desc": "

                                                                                                                                                                                                                                                      The 'error' event is emitted if an error occurred while writing or piping\ndata. The listener callback is passed a single Error argument when called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream is not closed when the 'error' event is emitted unless the\nautoDestroy option was set to true when creating the\nstream.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'error' event is emitted if an error occurred while writing or piping\ndata. The listener callback is passed a single Error argument when called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream is not closed when the 'error' event is emitted unless the\nautoDestroy option was set to true when creating the\nstream.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'finish'`", @@ -46558,10 +48091,11 @@ "desc": "Optional data to write. For streams not operating in object mode, `chunk` must be a string, `Buffer` or `Uint8Array`. For object mode streams, `chunk` may be any JavaScript value other than `null`." }, { - "textRaw": "`encoding` {string} The encoding, if `chunk` is a string", + "textRaw": "`encoding` {string} The encoding, if `chunk` is a string. **Default:** `'utf8'`", "name": "encoding", "type": "string", - "desc": "The encoding, if `chunk` is a string" + "default": "`'utf8'`", + "desc": "The encoding, if `chunk` is a string." }, { "textRaw": "`callback` {Function} Callback for when this chunk of data is flushed", @@ -46676,33 +48210,33 @@ } ], "type": "misc", - "displayName": "Writable Streams" + "displayName": "Writable streams" }, { - "textRaw": "Readable Streams", + "textRaw": "Readable streams", "name": "readable_streams", "desc": "

                                                                                                                                                                                                                                                      Readable streams are an abstraction for a source from which data is\nconsumed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Examples of Readable streams include:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      All Readable streams implement the interface defined by the\nstream.Readable class.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Two Reading Modes", + "textRaw": "Two reading modes", "name": "two_reading_modes", - "desc": "

                                                                                                                                                                                                                                                      Readable streams effectively operate in one of two modes: flowing and\npaused. These modes are separate from object mode.\nA Readable stream can be in object mode or not, regardless of whether\nit is in flowing mode or paused mode.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        In flowing mode, data is read from the underlying system automatically\nand provided to an application as quickly as possible using events via the\nEventEmitter interface.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        In paused mode, the stream.read() method must be called\nexplicitly to read chunks of data from the stream.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Readable streams begin in paused mode but can be switched to flowing\nmode in one of the following ways:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The Readable can switch back to paused mode using one of the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • If there are no pipe destinations, by calling the\nstream.pause() method.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If there are pipe destinations, by removing all pipe destinations.\nMultiple pipe destinations may be removed by calling the\nstream.unpipe() method.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The important concept to remember is that a Readable will not generate data\nuntil a mechanism for either consuming or ignoring that data is provided. If\nthe consuming mechanism is disabled or taken away, the Readable will attempt\nto stop generating the data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For backward compatibility reasons, removing 'data' event handlers will\nnot automatically pause the stream. Also, if there are piped destinations,\nthen calling stream.pause() will not guarantee that the\nstream will remain paused once those destinations drain and ask for more data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If a Readable is switched into flowing mode and there are no consumers\navailable to handle the data, that data will be lost. This can occur, for\ninstance, when the readable.resume() method is called without a listener\nattached to the 'data' event, or when a 'data' event handler is removed\nfrom the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Adding a 'readable' event handler automatically make the stream to\nstop flowing, and the data to be consumed via\nreadable.read(). If the 'readable' event handler is\nremoved, then the stream will start flowing again if there is a\n'data' event handler.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Readable streams effectively operate in one of two modes: flowing and\npaused. These modes are separate from object mode.\nA Readable stream can be in object mode or not, regardless of whether\nit is in flowing mode or paused mode.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        In flowing mode, data is read from the underlying system automatically\nand provided to an application as quickly as possible using events via the\nEventEmitter interface.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        In paused mode, the stream.read() method must be called\nexplicitly to read chunks of data from the stream.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Readable streams begin in paused mode but can be switched to flowing\nmode in one of the following ways:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      The Readable can switch back to paused mode using one of the following:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • If there are no pipe destinations, by calling the\nstream.pause() method.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If there are pipe destinations, by removing all pipe destinations.\nMultiple pipe destinations may be removed by calling the\nstream.unpipe() method.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The important concept to remember is that a Readable will not generate data\nuntil a mechanism for either consuming or ignoring that data is provided. If\nthe consuming mechanism is disabled or taken away, the Readable will attempt\nto stop generating the data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For backward compatibility reasons, removing 'data' event handlers will\nnot automatically pause the stream. Also, if there are piped destinations,\nthen calling stream.pause() will not guarantee that the\nstream will remain paused once those destinations drain and ask for more data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If a Readable is switched into flowing mode and there are no consumers\navailable to handle the data, that data will be lost. This can occur, for\ninstance, when the readable.resume() method is called without a listener\nattached to the 'data' event, or when a 'data' event handler is removed\nfrom the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Adding a 'readable' event handler automatically makes the stream\nstop flowing, and the data has to be consumed via\nreadable.read(). If the 'readable' event handler is\nremoved, then the stream will start flowing again if there is a\n'data' event handler.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Two Reading Modes" + "displayName": "Two reading modes" }, { - "textRaw": "Three States", + "textRaw": "Three states", "name": "three_states", "desc": "

                                                                                                                                                                                                                                                      The \"two modes\" of operation for a Readable stream are a simplified\nabstraction for the more complicated internal state management that is happening\nwithin the Readable stream implementation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Specifically, at any given point in time, every Readable is in one of three\npossible states:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • readable.readableFlowing === null
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • readable.readableFlowing === false
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • readable.readableFlowing === true
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When readable.readableFlowing is null, no mechanism for consuming the\nstream's data is provided. Therefore, the stream will not generate data.\nWhile in this state, attaching a listener for the 'data' event, calling the\nreadable.pipe() method, or calling the readable.resume() method will switch\nreadable.readableFlowing to true, causing the Readable to begin actively\nemitting events as data is generated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling readable.pause(), readable.unpipe(), or receiving backpressure\nwill cause the readable.readableFlowing to be set as false,\ntemporarily halting the flowing of events but not halting the generation of\ndata. While in this state, attaching a listener for the 'data' event\nwill not switch readable.readableFlowing to true.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { PassThrough, Writable } = require('stream');\nconst pass = new PassThrough();\nconst writable = new Writable();\n\npass.pipe(writable);\npass.unpipe(writable);\n// readableFlowing is now false.\n\npass.on('data', (chunk) => { console.log(chunk.toString()); });\npass.write('ok');  // Will not emit 'data'.\npass.resume();     // Must be called to make stream emit 'data'.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While readable.readableFlowing is false, data may be accumulating\nwithin the stream's internal buffer.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Three States" + "displayName": "Three states" }, { - "textRaw": "Choose One API Style", + "textRaw": "Choose one API style", "name": "choose_one_api_style", "desc": "

                                                                                                                                                                                                                                                      The Readable stream API evolved across multiple Node.js versions and provides\nmultiple methods of consuming stream data. In general, developers should choose\none of the methods of consuming data and should never use multiple methods\nto consume data from a single stream. Specifically, using a combination\nof on('data'), on('readable'), pipe(), or async iterators could\nlead to unintuitive behavior.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use of the readable.pipe() method is recommended for most users as it has been\nimplemented to provide the easiest way of consuming stream data. Developers that\nrequire more fine-grained control over the transfer and generation of data can\nuse the EventEmitter and readable.on('readable')/readable.read()\nor the readable.pause()/readable.resume() APIs.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Choose One API Style" + "displayName": "Choose one API style" } ], "classes": [ @@ -46822,7 +48356,7 @@ ] }, "params": [], - "desc": "

                                                                                                                                                                                                                                                      The 'readable' event is emitted when there is data available to be read from\nthe stream. In some cases, attaching a listener for the 'readable' event will\ncause some amount of data to be read into an internal buffer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readable = getReadableStreamSomehow();\nreadable.on('readable', function() {\n  // There is some data to read now.\n  let data;\n\n  while (data = this.read()) {\n    console.log(data);\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The 'readable' event will also be emitted once the end of the stream data\nhas been reached but before the 'end' event is emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Effectively, the 'readable' event indicates that the stream has new\ninformation: either new data is available or the end of the stream has been\nreached. In the former case, stream.read() will return the\navailable data. In the latter case, stream.read() will return\nnull. For instance, in the following example, foo.txt is an empty file:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst rr = fs.createReadStream('foo.txt');\nrr.on('readable', () => {\n  console.log(`readable: ${rr.read()}`);\n});\nrr.on('end', () => {\n  console.log('end');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The output of running this script is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node test.js\nreadable: null\nend\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In general, the readable.pipe() and 'data' event mechanisms are easier to\nunderstand than the 'readable' event. However, handling 'readable' might\nresult in increased throughput.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both 'readable' and 'data' are used at the same time, 'readable'\ntakes precedence in controlling the flow, i.e. 'data' will be emitted\nonly when stream.read() is called. The\nreadableFlowing property would become false.\nIf there are 'data' listeners when 'readable' is removed, the stream\nwill start flowing, i.e. 'data' events will be emitted without calling\n.resume().

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'readable' event is emitted when there is data available to be read from\nthe stream. In some cases, attaching a listener for the 'readable' event will\ncause some amount of data to be read into an internal buffer.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readable = getReadableStreamSomehow();\nreadable.on('readable', function() {\n  // There is some data to read now.\n  let data;\n\n  while (data = this.read()) {\n    console.log(data);\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The 'readable' event will also be emitted once the end of the stream data\nhas been reached but before the 'end' event is emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Effectively, the 'readable' event indicates that the stream has new\ninformation: either new data is available or the end of the stream has been\nreached. In the former case, stream.read() will return the\navailable data. In the latter case, stream.read() will return\nnull. For instance, in the following example, foo.txt is an empty file:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const fs = require('fs');\nconst rr = fs.createReadStream('foo.txt');\nrr.on('readable', () => {\n  console.log(`readable: ${rr.read()}`);\n});\nrr.on('end', () => {\n  console.log('end');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The output of running this script is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node test.js\nreadable: null\nend\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In general, the readable.pipe() and 'data' event mechanisms are easier to\nunderstand than the 'readable' event. However, handling 'readable' might\nresult in increased throughput.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If both 'readable' and 'data' are used at the same time, 'readable'\ntakes precedence in controlling the flow, i.e. 'data' will be emitted\nonly when stream.read() is called. The\nreadableFlowing property would become false.\nIf there are 'data' listeners when 'readable' is removed, the stream\nwill start flowing, i.e. 'data' events will be emitted without calling\n.resume().

                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'resume'`", @@ -46984,7 +48518,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The readable.read() method pulls some data out of the internal buffer and\nreturns it. If no data available to be read, null is returned. By default,\nthe data will be returned as a Buffer object unless an encoding has been\nspecified using the readable.setEncoding() method or the stream is operating\nin object mode.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional size argument specifies a specific number of bytes to read. If\nsize bytes are not available to be read, null will be returned unless\nthe stream has ended, in which case all of the data remaining in the internal\nbuffer will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the size argument is not specified, all of the data contained in the\ninternal buffer will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The size argument must be less than or equal to 1 GB.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable.read() method should only be called on Readable streams\noperating in paused mode. In flowing mode, readable.read() is called\nautomatically until the internal buffer is fully drained.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readable = getReadableStreamSomehow();\nreadable.on('readable', () => {\n  let chunk;\n  while (null !== (chunk = readable.read())) {\n    console.log(`Received ${chunk.length} bytes of data.`);\n  }\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The while loop is necessary when processing data with\nreadable.read(). Only after readable.read() returns null,\n'readable' will be emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A Readable stream in object mode will always return a single item from\na call to readable.read(size), regardless of the value of the\nsize argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the readable.read() method returns a chunk of data, a 'data' event will\nalso be emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling stream.read([size]) after the 'end' event has\nbeen emitted will return null. No runtime error will be raised.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The readable.read() method pulls some data out of the internal buffer and\nreturns it. If no data available to be read, null is returned. By default,\nthe data will be returned as a Buffer object unless an encoding has been\nspecified using the readable.setEncoding() method or the stream is operating\nin object mode.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional size argument specifies a specific number of bytes to read. If\nsize bytes are not available to be read, null will be returned unless\nthe stream has ended, in which case all of the data remaining in the internal\nbuffer will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the size argument is not specified, all of the data contained in the\ninternal buffer will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The size argument must be less than or equal to 1 GB.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable.read() method should only be called on Readable streams\noperating in paused mode. In flowing mode, readable.read() is called\nautomatically until the internal buffer is fully drained.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const readable = getReadableStreamSomehow();\n\n// 'readable' may be triggered multiple times as data is buffered in\nreadable.on('readable', () => {\n  let chunk;\n  console.log('Stream is readable (new data received in buffer)');\n  // Use a loop to make sure we read all currently available data\n  while (null !== (chunk = readable.read())) {\n    console.log(`Read ${chunk.length} bytes of data...`);\n  }\n});\n\n// 'end' will be triggered once when there is no more data available\nreadable.on('end', () => {\n  console.log('Reached end of stream.');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Each call to readable.read() returns a chunk of data, or null. The chunks\nare not concatenated. A while loop is necessary to consume all data\ncurrently in the buffer. When reading a large file .read() may return null,\nhaving consumed all buffered content so far, but there is still more data to\ncome not yet buffered. In this case a new 'readable' event will be emitted\nwhen there is more data in the buffer. Finally the 'end' event will be\nemitted when there is no more data to come.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Therefore to read a file's whole contents from a readable, it is necessary\nto collect chunks across multiple 'readable' events:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const chunks = [];\n\nreadable.on('readable', () => {\n  let chunk;\n  while (null !== (chunk = readable.read())) {\n    chunks.push(chunk);\n  }\n});\n\nreadable.on('end', () => {\n  const content = chunks.join('');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A Readable stream in object mode will always return a single item from\na call to readable.read(size), regardless of the value of the\nsize argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the readable.read() method returns a chunk of data, a 'data' event will\nalso be emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling stream.read([size]) after the 'end' event has\nbeen emitted will return null. No runtime error will be raised.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`readable.resume()`", @@ -47106,7 +48640,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Passing chunk as null signals the end of the stream (EOF) and behaves the\nsame as readable.push(null), after which no more data can be written. The EOF\nsignal is put at the end of the buffer and any buffered data will still be\nflushed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable.unshift() method pushes a chunk of data back into the internal\nbuffer. This is useful in certain situations where a stream is being consumed by\ncode that needs to \"un-consume\" some amount of data that it has optimistically\npulled out of the source, so that the data can be passed on to some other party.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream.unshift(chunk) method cannot be called after the 'end' event\nhas been emitted or a runtime error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Developers using stream.unshift() often should consider switching to\nuse of a Transform stream instead. See the API for Stream Implementers\nsection for more information.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Pull off a header delimited by \\n\\n.\n// Use unshift() if we get too much.\n// Call the callback with (error, header, stream).\nconst { StringDecoder } = require('string_decoder');\nfunction parseHeader(stream, callback) {\n  stream.on('error', callback);\n  stream.on('readable', onReadable);\n  const decoder = new StringDecoder('utf8');\n  let header = '';\n  function onReadable() {\n    let chunk;\n    while (null !== (chunk = stream.read())) {\n      const str = decoder.write(chunk);\n      if (str.match(/\\n\\n/)) {\n        // Found the header boundary.\n        const split = str.split(/\\n\\n/);\n        header += split.shift();\n        const remaining = split.join('\\n\\n');\n        const buf = Buffer.from(remaining, 'utf8');\n        stream.removeListener('error', callback);\n        // Remove the 'readable' listener before unshifting.\n        stream.removeListener('readable', onReadable);\n        if (buf.length)\n          stream.unshift(buf);\n        // Now the body of the message can be read from the stream.\n        callback(null, header, stream);\n      } else {\n        // Still reading the header.\n        header += str;\n      }\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike stream.push(chunk), stream.unshift(chunk) will not\nend the reading process by resetting the internal reading state of the stream.\nThis can cause unexpected results if readable.unshift() is called during a\nread (i.e. from within a stream._read() implementation on a\ncustom stream). Following the call to readable.unshift() with an immediate\nstream.push('') will reset the reading state appropriately,\nhowever it is best to simply avoid calling readable.unshift() while in the\nprocess of performing a read.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Passing chunk as null signals the end of the stream (EOF) and behaves the\nsame as readable.push(null), after which no more data can be written. The EOF\nsignal is put at the end of the buffer and any buffered data will still be\nflushed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable.unshift() method pushes a chunk of data back into the internal\nbuffer. This is useful in certain situations where a stream is being consumed by\ncode that needs to \"un-consume\" some amount of data that it has optimistically\npulled out of the source, so that the data can be passed on to some other party.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream.unshift(chunk) method cannot be called after the 'end' event\nhas been emitted or a runtime error will be thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Developers using stream.unshift() often should consider switching to\nuse of a Transform stream instead. See the API for stream implementers\nsection for more information.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Pull off a header delimited by \\n\\n.\n// Use unshift() if we get too much.\n// Call the callback with (error, header, stream).\nconst { StringDecoder } = require('string_decoder');\nfunction parseHeader(stream, callback) {\n  stream.on('error', callback);\n  stream.on('readable', onReadable);\n  const decoder = new StringDecoder('utf8');\n  let header = '';\n  function onReadable() {\n    let chunk;\n    while (null !== (chunk = stream.read())) {\n      const str = decoder.write(chunk);\n      if (str.match(/\\n\\n/)) {\n        // Found the header boundary.\n        const split = str.split(/\\n\\n/);\n        header += split.shift();\n        const remaining = split.join('\\n\\n');\n        const buf = Buffer.from(remaining, 'utf8');\n        stream.removeListener('error', callback);\n        // Remove the 'readable' listener before unshifting.\n        stream.removeListener('readable', onReadable);\n        if (buf.length)\n          stream.unshift(buf);\n        // Now the body of the message can be read from the stream.\n        callback(null, header, stream);\n      } else {\n        // Still reading the header.\n        header += str;\n      }\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike stream.push(chunk), stream.unshift(chunk) will not\nend the reading process by resetting the internal reading state of the stream.\nThis can cause unexpected results if readable.unshift() is called during a\nread (i.e. from within a stream._read() implementation on a\ncustom stream). Following the call to readable.unshift() with an immediate\nstream.push('') will reset the reading state appropriately,\nhowever it is best to simply avoid calling readable.unshift() while in the\nprocess of performing a read.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`readable.wrap(stream)`", @@ -47226,7 +48760,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      This property reflects the current state of a Readable stream as described\nin the Stream Three States section.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      This property reflects the current state of a Readable stream as described\nin the Three states section.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`readableHighWaterMark` {number}", @@ -47268,10 +48802,10 @@ } ], "type": "misc", - "displayName": "Readable Streams" + "displayName": "Readable streams" }, { - "textRaw": "Duplex and Transform Streams", + "textRaw": "Duplex and transform streams", "name": "duplex_and_transform_streams", "classes": [ { @@ -47336,7 +48870,7 @@ } ], "type": "misc", - "displayName": "Duplex and Transform Streams" + "displayName": "Duplex and transform streams" } ], "methods": [ @@ -47472,18 +49006,18 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      A utility method for creating Readable Streams out of iterators.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nasync function * generate() {\n  yield 'hello';\n  yield 'streams';\n}\n\nconst readable = Readable.from(generate());\n\nreadable.on('data', (chunk) => {\n  console.log(chunk);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling Readable.from(string) or Readable.from(buffer) will not have\nthe strings or buffers be iterated to match the other streams semantics\nfor performance reasons.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      A utility method for creating readable streams out of iterators.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nasync function * generate() {\n  yield 'hello';\n  yield 'streams';\n}\n\nconst readable = Readable.from(generate());\n\nreadable.on('data', (chunk) => {\n  console.log(chunk);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling Readable.from(string) or Readable.from(buffer) will not have\nthe strings or buffers be iterated to match the other streams semantics\nfor performance reasons.

                                                                                                                                                                                                                                                      " } ] }, { - "textRaw": "API for Stream Implementers", - "name": "API for Stream Implementers", + "textRaw": "API for stream implementers", + "name": "API for stream implementers", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      The stream module API has been designed to make it possible to easily\nimplement streams using JavaScript's prototypal inheritance model.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      First, a stream developer would declare a new JavaScript class that extends one\nof the four basic stream classes (stream.Writable, stream.Readable,\nstream.Duplex, or stream.Transform), making sure they call the appropriate\nparent class constructor:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nclass MyWritable extends Writable {\n  constructor({ highWaterMark, ...options }) {\n    super({\n      highWaterMark,\n      autoDestroy: true,\n      emitClose: true\n    });\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When extending streams, keep in mind what options the user\ncan and should provide before forwarding these to the base constructor. For\nexample, if the implementation makes assumptions in regard to the\nautoDestroy and emitClose options, do not allow the\nuser to override these. Be explicit about what\noptions are forwarded instead of implicitly forwarding all options.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The new stream class must then implement one or more specific methods, depending\non the type of stream being created, as detailed in the chart below:

                                                                                                                                                                                                                                                      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                      Use-caseClassMethod(s) to implement
                                                                                                                                                                                                                                                      Reading onlyReadable_read()
                                                                                                                                                                                                                                                      Writing onlyWritable_write(), _writev(), _final()
                                                                                                                                                                                                                                                      Reading and writingDuplex_read(), _write(), _writev(), _final()
                                                                                                                                                                                                                                                      Operate on written data, then read the resultTransform_transform(), _flush(), _final()
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The implementation code for a stream should never call the \"public\" methods\nof a stream that are intended for use by consumers (as described in the\nAPI for Stream Consumers section). Doing so may lead to adverse side effects\nin application code consuming the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Avoid overriding public methods such as write(), end(), cork(),\nuncork(), read() and destroy(), or emitting internal events such\nas 'error', 'data', 'end', 'finish' and 'close' through .emit().\nDoing so can break current and future stream invariants leading to behavior\nand/or compatibility issues with other streams, stream utilities, and user\nexpectations.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The stream module API has been designed to make it possible to easily\nimplement streams using JavaScript's prototypal inheritance model.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      First, a stream developer would declare a new JavaScript class that extends one\nof the four basic stream classes (stream.Writable, stream.Readable,\nstream.Duplex, or stream.Transform), making sure they call the appropriate\nparent class constructor:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nclass MyWritable extends Writable {\n  constructor({ highWaterMark, ...options }) {\n    super({\n      highWaterMark,\n      autoDestroy: true,\n      emitClose: true\n    });\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When extending streams, keep in mind what options the user\ncan and should provide before forwarding these to the base constructor. For\nexample, if the implementation makes assumptions in regard to the\nautoDestroy and emitClose options, do not allow the\nuser to override these. Be explicit about what\noptions are forwarded instead of implicitly forwarding all options.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The new stream class must then implement one or more specific methods, depending\non the type of stream being created, as detailed in the chart below:

                                                                                                                                                                                                                                                      \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                      Use-caseClassMethod(s) to implement
                                                                                                                                                                                                                                                      Reading onlyReadable_read()
                                                                                                                                                                                                                                                      Writing onlyWritable_write(), _writev(), _final()
                                                                                                                                                                                                                                                      Reading and writingDuplex_read(), _write(), _writev(), _final()
                                                                                                                                                                                                                                                      Operate on written data, then read the resultTransform_transform(), _flush(), _final()
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The implementation code for a stream should never call the \"public\" methods\nof a stream that are intended for use by consumers (as described in the\nAPI for stream consumers section). Doing so may lead to adverse side effects\nin application code consuming the stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Avoid overriding public methods such as write(), end(), cork(),\nuncork(), read() and destroy(), or emitting internal events such\nas 'error', 'data', 'end', 'finish' and 'close' through .emit().\nDoing so can break current and future stream invariants leading to behavior\nand/or compatibility issues with other streams, stream utilities, and user\nexpectations.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Simplified Construction", + "textRaw": "Simplified construction", "name": "simplified_construction", "meta": { "added": [ @@ -47493,15 +49027,15 @@ }, "desc": "

                                                                                                                                                                                                                                                      For many simple cases, it is possible to construct a stream without relying on\ninheritance. This can be accomplished by directly creating instances of the\nstream.Writable, stream.Readable, stream.Duplex or stream.Transform\nobjects and passing appropriate methods as constructor options.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nconst myWritable = new Writable({\n  write(chunk, encoding, callback) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      ", "type": "misc", - "displayName": "Simplified Construction" + "displayName": "Simplified construction" }, { - "textRaw": "Implementing a Writable Stream", + "textRaw": "Implementing a writable stream", "name": "implementing_a_writable_stream", "desc": "

                                                                                                                                                                                                                                                      The stream.Writable class is extended to implement a Writable stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Custom Writable streams must call the new stream.Writable([options])\nconstructor and implement the writable._write() and/or writable._writev()\nmethod.

                                                                                                                                                                                                                                                      ", "ctors": [ { - "textRaw": "Constructor: `new stream.Writable([options])`", + "textRaw": "`new stream.Writable([options])`", "type": "ctor", "name": "stream.Writable", "meta": { @@ -47597,7 +49131,7 @@ ] } ], - "desc": "\n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nclass MyWritable extends Writable {\n  constructor(options) {\n    // Calls the stream.Writable() constructor.\n    super(options);\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, when using pre-ES6 style constructors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\nconst util = require('util');\n\nfunction MyWritable(options) {\n  if (!(this instanceof MyWritable))\n    return new MyWritable(options);\n  Writable.call(this, options);\n}\nutil.inherits(MyWritable, Writable);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using the Simplified Constructor approach:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nconst myWritable = new Writable({\n  write(chunk, encoding, callback) {\n    // ...\n  },\n  writev(chunks, callback) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      " + "desc": "\n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nclass MyWritable extends Writable {\n  constructor(options) {\n    // Calls the stream.Writable() constructor.\n    super(options);\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, when using pre-ES6 style constructors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\nconst util = require('util');\n\nfunction MyWritable(options) {\n  if (!(this instanceof MyWritable))\n    return new MyWritable(options);\n  Writable.call(this, options);\n}\nutil.inherits(MyWritable, Writable);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using the simplified constructor approach:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nconst myWritable = new Writable({\n  write(chunk, encoding, callback) {\n    // ...\n  },\n  writev(chunks, callback) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -47721,34 +49255,34 @@ ], "modules": [ { - "textRaw": "Errors While Writing", + "textRaw": "Errors while writing", "name": "errors_while_writing", "desc": "

                                                                                                                                                                                                                                                      Errors occurring during the processing of the writable._write(),\nwritable._writev() and writable._final() methods must be propagated\nby invoking the callback and passing the error as the first argument.\nThrowing an Error from within these methods or manually emitting an 'error'\nevent results in undefined behavior.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If a Readable stream pipes into a Writable stream when Writable emits an\nerror, the Readable stream will be unpiped.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nconst myWritable = new Writable({\n  write(chunk, encoding, callback) {\n    if (chunk.toString().indexOf('a') >= 0) {\n      callback(new Error('chunk is invalid'));\n    } else {\n      callback();\n    }\n  }\n});\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Errors While Writing" + "displayName": "Errors while writing" }, { - "textRaw": "An Example Writable Stream", + "textRaw": "An example writable stream", "name": "an_example_writable_stream", "desc": "

                                                                                                                                                                                                                                                      The following illustrates a rather simplistic (and somewhat pointless) custom\nWritable stream implementation. While this specific Writable stream instance\nis not of any real particular usefulness, the example illustrates each of the\nrequired elements of a custom Writable stream instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\n\nclass MyWritable extends Writable {\n  _write(chunk, encoding, callback) {\n    if (chunk.toString().indexOf('a') >= 0) {\n      callback(new Error('chunk is invalid'));\n    } else {\n      callback();\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "An Example Writable Stream" + "displayName": "An example writable stream" }, { - "textRaw": "Decoding buffers in a Writable Stream", + "textRaw": "Decoding buffers in a writable stream", "name": "decoding_buffers_in_a_writable_stream", "desc": "

                                                                                                                                                                                                                                                      Decoding buffers is a common task, for instance, when using transformers whose\ninput is a string. This is not a trivial process when using multi-byte\ncharacters encoding, such as UTF-8. The following example shows how to decode\nmulti-byte strings using StringDecoder and Writable.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Writable } = require('stream');\nconst { StringDecoder } = require('string_decoder');\n\nclass StringWritable extends Writable {\n  constructor(options) {\n    super(options);\n    this._decoder = new StringDecoder(options && options.defaultEncoding);\n    this.data = '';\n  }\n  _write(chunk, encoding, callback) {\n    if (encoding === 'buffer') {\n      chunk = this._decoder.write(chunk);\n    }\n    this.data += chunk;\n    callback();\n  }\n  _final(callback) {\n    this.data += this._decoder.end();\n    callback();\n  }\n}\n\nconst euro = [[0xE2, 0x82], [0xAC]].map(Buffer.from);\nconst w = new StringWritable();\n\nw.write('currency: ');\nw.write(euro[0]);\nw.end(euro[1]);\n\nconsole.log(w.data); // currency: €\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Decoding buffers in a Writable Stream" + "displayName": "Decoding buffers in a writable stream" } ], "type": "misc", - "displayName": "Implementing a Writable Stream" + "displayName": "Implementing a writable stream" }, { - "textRaw": "Implementing a Readable Stream", + "textRaw": "Implementing a readable stream", "name": "implementing_a_readable_stream", - "desc": "

                                                                                                                                                                                                                                                      The stream.Readable class is extended to implement a Readable stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Custom Readable streams must call the new stream.Readable([options])\nconstructor and implement the readable._read() method.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The stream.Readable class is extended to implement a Readable stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Custom Readable streams must call the new stream.Readable([options])\nconstructor and implement the readable._read() method.

                                                                                                                                                                                                                                                      ", "ctors": [ { "textRaw": "`new stream.Readable([options])`", @@ -47823,7 +49357,7 @@ ] } ], - "desc": "\n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nclass MyReadable extends Readable {\n  constructor(options) {\n    // Calls the stream.Readable(options) constructor.\n    super(options);\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, when using pre-ES6 style constructors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\nconst util = require('util');\n\nfunction MyReadable(options) {\n  if (!(this instanceof MyReadable))\n    return new MyReadable(options);\n  Readable.call(this, options);\n}\nutil.inherits(MyReadable, Readable);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using the Simplified Constructor approach:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nconst myReadable = new Readable({\n  read(size) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      " + "desc": "\n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nclass MyReadable extends Readable {\n  constructor(options) {\n    // Calls the stream.Readable(options) constructor.\n    super(options);\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, when using pre-ES6 style constructors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\nconst util = require('util');\n\nfunction MyReadable(options) {\n  if (!(this instanceof MyReadable))\n    return new MyReadable(options);\n  Readable.call(this, options);\n}\nutil.inherits(MyReadable, Readable);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using the simplified constructor approach:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nconst myReadable = new Readable({\n  read(size) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -47849,7 +49383,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      This function MUST NOT be called by application code directly. It should be\nimplemented by child classes, and called by the internal Readable class\nmethods only.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Readable stream implementations must provide an implementation of the\nreadable._read() method to fetch data from the underlying resource.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When readable._read() is called, if data is available from the resource, the\nimplementation should begin pushing that data into the read queue using the\nthis.push(dataChunk) method. _read() should continue reading\nfrom the resource and pushing data until readable.push() returns false. Only\nwhen _read() is called again after it has stopped should it resume pushing\nadditional data onto the queue.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the readable._read() method has been called, it will not be called again\nuntil more data is pushed through the readable.push() method.\nEmpty data such as empty buffers and strings will not cause readable._read()\nto be called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The size argument is advisory. For implementations where a \"read\" is a\nsingle operation that returns data can use the size argument to determine how\nmuch data to fetch. Other implementations may ignore this argument and simply\nprovide data whenever it becomes available. There is no need to \"wait\" until\nsize bytes are available before calling stream.push(chunk).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable._read() method is prefixed with an underscore because it is\ninternal to the class that defines it, and should never be called directly by\nuser programs.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      This function MUST NOT be called by application code directly. It should be\nimplemented by child classes, and called by the internal Readable class\nmethods only.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Readable stream implementations must provide an implementation of the\nreadable._read() method to fetch data from the underlying resource.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When readable._read() is called, if data is available from the resource,\nthe implementation should begin pushing that data into the read queue using the\nthis.push(dataChunk) method. _read() should continue reading\nfrom the resource and pushing data until readable.push() returns false. Only\nwhen _read() is called again after it has stopped should it resume pushing\nadditional data onto the queue.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the readable._read() method has been called, it will not be called\nagain until more data is pushed through the readable.push()\nmethod. Empty data such as empty buffers and strings will not cause\nreadable._read() to be called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The size argument is advisory. For implementations where a \"read\" is a\nsingle operation that returns data can use the size argument to determine how\nmuch data to fetch. Other implementations may ignore this argument and simply\nprovide data whenever it becomes available. There is no need to \"wait\" until\nsize bytes are available before calling stream.push(chunk).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable._read() method is prefixed with an underscore because it is\ninternal to the class that defines it, and should never be called directly by\nuser programs.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`readable._destroy(err, callback)`", @@ -47918,33 +49452,33 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      When chunk is a Buffer, Uint8Array or string, the chunk of data will\nbe added to the internal queue for users of the stream to consume.\nPassing chunk as null signals the end of the stream (EOF), after which no\nmore data can be written.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the Readable is operating in paused mode, the data added with\nreadable.push() can be read out by calling the\nreadable.read() method when the 'readable' event is\nemitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the Readable is operating in flowing mode, the data added with\nreadable.push() will be delivered by emitting a 'data' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable.push() method is designed to be as flexible as possible. For\nexample, when wrapping a lower-level source that provides some form of\npause/resume mechanism, and a data callback, the low-level source can be wrapped\nby the custom Readable instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // `_source` is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nclass SourceWrapper extends Readable {\n  constructor(options) {\n    super(options);\n\n    this._source = getLowLevelSourceObject();\n\n    // Every time there's data, push it into the internal buffer.\n    this._source.ondata = (chunk) => {\n      // If push() returns false, then stop reading from source.\n      if (!this.push(chunk))\n        this._source.readStop();\n    };\n\n    // When the source ends, push the EOF-signaling `null` chunk.\n    this._source.onend = () => {\n      this.push(null);\n    };\n  }\n  // _read() will be called when the stream wants to pull more data in.\n  // The advisory size argument is ignored in this case.\n  _read(size) {\n    this._source.readStart();\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable.push() method is used to push the content\ninto the internal buffer. It can be driven by the readable._read() method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For streams not operating in object mode, if the chunk parameter of\nreadable.push() is undefined, it will be treated as empty string or\nbuffer. See readable.push('') for more information.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      When chunk is a Buffer, Uint8Array or string, the chunk of data will\nbe added to the internal queue for users of the stream to consume.\nPassing chunk as null signals the end of the stream (EOF), after which no\nmore data can be written.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the Readable is operating in paused mode, the data added with\nreadable.push() can be read out by calling the\nreadable.read() method when the 'readable' event is\nemitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the Readable is operating in flowing mode, the data added with\nreadable.push() will be delivered by emitting a 'data' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable.push() method is designed to be as flexible as possible. For\nexample, when wrapping a lower-level source that provides some form of\npause/resume mechanism, and a data callback, the low-level source can be wrapped\nby the custom Readable instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // `_source` is an object with readStop() and readStart() methods,\n// and an `ondata` member that gets called when it has data, and\n// an `onend` member that gets called when the data is over.\n\nclass SourceWrapper extends Readable {\n  constructor(options) {\n    super(options);\n\n    this._source = getLowLevelSourceObject();\n\n    // Every time there's data, push it into the internal buffer.\n    this._source.ondata = (chunk) => {\n      // If push() returns false, then stop reading from source.\n      if (!this.push(chunk))\n        this._source.readStop();\n    };\n\n    // When the source ends, push the EOF-signaling `null` chunk.\n    this._source.onend = () => {\n      this.push(null);\n    };\n  }\n  // _read() will be called when the stream wants to pull more data in.\n  // The advisory size argument is ignored in this case.\n  _read(size) {\n    this._source.readStart();\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The readable.push() method is used to push the content\ninto the internal buffer. It can be driven by the readable._read() method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For streams not operating in object mode, if the chunk parameter of\nreadable.push() is undefined, it will be treated as empty string or\nbuffer. See readable.push('') for more information.

                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "Errors While Reading", + "textRaw": "Errors while reading", "name": "errors_while_reading", "desc": "

                                                                                                                                                                                                                                                      Errors occurring during processing of the readable._read() must be\npropagated through the readable.destroy(err) method.\nThrowing an Error from within readable._read() or manually emitting an\n'error' event results in undefined behavior.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nconst myReadable = new Readable({\n  read(size) {\n    const err = checkSomeErrorCondition();\n    if (err) {\n      this.destroy(err);\n    } else {\n      // Do some work.\n    }\n  }\n});\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Errors While Reading" + "displayName": "Errors while reading" } ], "examples": [ { - "textRaw": "An Example Counting Stream", - "name": "An Example Counting Stream", + "textRaw": "An example counting stream", + "name": "An example counting stream", "type": "example", "desc": "

                                                                                                                                                                                                                                                      The following is a basic example of a Readable stream that emits the numerals\nfrom 1 to 1,000,000 in ascending order, and then ends.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nclass Counter extends Readable {\n  constructor(opt) {\n    super(opt);\n    this._max = 1000000;\n    this._index = 1;\n  }\n\n  _read() {\n    const i = this._index++;\n    if (i > this._max)\n      this.push(null);\n    else {\n      const str = String(i);\n      const buf = Buffer.from(str, 'ascii');\n      this.push(buf);\n    }\n  }\n}\n
                                                                                                                                                                                                                                                      " } ], "type": "misc", - "displayName": "Implementing a Readable Stream" + "displayName": "Implementing a readable stream" }, { - "textRaw": "Implementing a Duplex Stream", + "textRaw": "Implementing a duplex stream", "name": "implementing_a_duplex_stream", - "desc": "

                                                                                                                                                                                                                                                      A Duplex stream is one that implements both Readable and\nWritable, such as a TCP socket connection.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because JavaScript does not have support for multiple inheritance, the\nstream.Duplex class is extended to implement a Duplex stream (as opposed\nto extending the stream.Readable and stream.Writable classes).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream.Duplex class prototypically inherits from stream.Readable and\nparasitically from stream.Writable, but instanceof will work properly for\nboth base classes due to overriding Symbol.hasInstance on\nstream.Writable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Custom Duplex streams must call the new stream.Duplex([options])\nconstructor and implement both the readable._read() and\nwritable._write() methods.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A Duplex stream is one that implements both Readable and\nWritable, such as a TCP socket connection.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because JavaScript does not have support for multiple inheritance, the\nstream.Duplex class is extended to implement a Duplex stream (as opposed\nto extending the stream.Readable and stream.Writable classes).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream.Duplex class prototypically inherits from stream.Readable and\nparasitically from stream.Writable, but instanceof will work properly for\nboth base classes due to overriding Symbol.hasInstance on\nstream.Writable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Custom Duplex streams must call the new stream.Duplex([options])\nconstructor and implement both the readable._read() and\nwritable._write() methods.

                                                                                                                                                                                                                                                      ", "ctors": [ { "textRaw": "`new stream.Duplex(options)`", @@ -47976,6 +49510,20 @@ "desc": "If set to `false`, then the stream will automatically end the writable side when the readable side ends." }, { + "textRaw": "`readable` {boolean} Sets whether the `Duplex` should be readable. **Default:** `true`.", + "name": "readable", + "type": "boolean", + "default": "`true`", + "desc": "Sets whether the `Duplex` should be readable." + }, + { + "textRaw": "`writable` {boolean} Sets whether the `Duplex` should be writable. **Default:** `true`.", + "name": "writable", + "type": "boolean", + "default": "`true`", + "desc": "Sets whether the `Duplex` should be writable." + }, + { "textRaw": "`readableObjectMode` {boolean} Sets `objectMode` for readable side of the stream. Has no effect if `objectMode` is `true`. **Default:** `false`.", "name": "readableObjectMode", "type": "boolean", @@ -48006,32 +49554,32 @@ ] } ], - "desc": "\n
                                                                                                                                                                                                                                                      const { Duplex } = require('stream');\n\nclass MyDuplex extends Duplex {\n  constructor(options) {\n    super(options);\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, when using pre-ES6 style constructors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Duplex } = require('stream');\nconst util = require('util');\n\nfunction MyDuplex(options) {\n  if (!(this instanceof MyDuplex))\n    return new MyDuplex(options);\n  Duplex.call(this, options);\n}\nutil.inherits(MyDuplex, Duplex);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using the Simplified Constructor approach:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Duplex } = require('stream');\n\nconst myDuplex = new Duplex({\n  read(size) {\n    // ...\n  },\n  write(chunk, encoding, callback) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      " + "desc": "\n
                                                                                                                                                                                                                                                      const { Duplex } = require('stream');\n\nclass MyDuplex extends Duplex {\n  constructor(options) {\n    super(options);\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, when using pre-ES6 style constructors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Duplex } = require('stream');\nconst util = require('util');\n\nfunction MyDuplex(options) {\n  if (!(this instanceof MyDuplex))\n    return new MyDuplex(options);\n  Duplex.call(this, options);\n}\nutil.inherits(MyDuplex, Duplex);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using the simplified constructor approach:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Duplex } = require('stream');\n\nconst myDuplex = new Duplex({\n  read(size) {\n    // ...\n  },\n  write(chunk, encoding, callback) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "An Example Duplex Stream", + "textRaw": "An example duplex stream", "name": "an_example_duplex_stream", "desc": "

                                                                                                                                                                                                                                                      The following illustrates a simple example of a Duplex stream that wraps a\nhypothetical lower-level source object to which data can be written, and\nfrom which data can be read, albeit using an API that is not compatible with\nNode.js streams.\nThe following illustrates a simple example of a Duplex stream that buffers\nincoming written data via the Writable interface that is read back out\nvia the Readable interface.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Duplex } = require('stream');\nconst kSource = Symbol('source');\n\nclass MyDuplex extends Duplex {\n  constructor(source, options) {\n    super(options);\n    this[kSource] = source;\n  }\n\n  _write(chunk, encoding, callback) {\n    // The underlying source only deals with strings.\n    if (Buffer.isBuffer(chunk))\n      chunk = chunk.toString();\n    this[kSource].writeSomeData(chunk);\n    callback();\n  }\n\n  _read(size) {\n    this[kSource].fetchSomeData(size, (data, encoding) => {\n      this.push(Buffer.from(data, encoding));\n    });\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The most important aspect of a Duplex stream is that the Readable and\nWritable sides operate independently of one another despite co-existing within\na single object instance.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "An Example Duplex Stream" + "displayName": "An example duplex stream" }, { - "textRaw": "Object Mode Duplex Streams", + "textRaw": "Object mode duplex streams", "name": "object_mode_duplex_streams", "desc": "

                                                                                                                                                                                                                                                      For Duplex streams, objectMode can be set exclusively for either the\nReadable or Writable side using the readableObjectMode and\nwritableObjectMode options respectively.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the following example, for instance, a new Transform stream (which is a\ntype of Duplex stream) is created that has an object mode Writable side\nthat accepts JavaScript numbers that are converted to hexadecimal strings on\nthe Readable side.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Transform } = require('stream');\n\n// All Transform streams are also Duplex Streams.\nconst myTransform = new Transform({\n  writableObjectMode: true,\n\n  transform(chunk, encoding, callback) {\n    // Coerce the chunk to a number if necessary.\n    chunk |= 0;\n\n    // Transform the chunk into something else.\n    const data = chunk.toString(16);\n\n    // Push the data onto the readable queue.\n    callback(null, '0'.repeat(data.length % 2) + data);\n  }\n});\n\nmyTransform.setEncoding('ascii');\nmyTransform.on('data', (chunk) => console.log(chunk));\n\nmyTransform.write(1);\n// Prints: 01\nmyTransform.write(10);\n// Prints: 0a\nmyTransform.write(100);\n// Prints: 64\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Object Mode Duplex Streams" + "displayName": "Object mode duplex streams" } ], "type": "misc", - "displayName": "Implementing a Duplex Stream" + "displayName": "Implementing a duplex stream" }, { - "textRaw": "Implementing a Transform Stream", + "textRaw": "Implementing a transform stream", "name": "implementing_a_transform_stream", - "desc": "

                                                                                                                                                                                                                                                      A Transform stream is a Duplex stream where the output is computed\nin some way from the input. Examples include zlib streams or crypto\nstreams that compress, encrypt, or decrypt data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There is no requirement that the output be the same size as the input, the same\nnumber of chunks, or arrive at the same time. For example, a Hash stream will\nonly ever have a single chunk of output which is provided when the input is\nended. A zlib stream will produce output that is either much smaller or much\nlarger than its input.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream.Transform class is extended to implement a Transform stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream.Transform class prototypically inherits from stream.Duplex and\nimplements its own versions of the writable._write() and readable._read()\nmethods. Custom Transform implementations must implement the\ntransform._transform() method and may also implement\nthe transform._flush() method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Care must be taken when using Transform streams in that data written to the\nstream can cause the Writable side of the stream to become paused if the\noutput on the Readable side is not consumed.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A Transform stream is a Duplex stream where the output is computed\nin some way from the input. Examples include zlib streams or crypto\nstreams that compress, encrypt, or decrypt data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There is no requirement that the output be the same size as the input, the same\nnumber of chunks, or arrive at the same time. For example, a Hash stream will\nonly ever have a single chunk of output which is provided when the input is\nended. A zlib stream will produce output that is either much smaller or much\nlarger than its input.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream.Transform class is extended to implement a Transform stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stream.Transform class prototypically inherits from stream.Duplex and\nimplements its own versions of the writable._write() and\nreadable._read() methods. Custom Transform implementations must\nimplement the transform._transform() method and may\nalso implement the transform._flush() method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Care must be taken when using Transform streams in that data written to the\nstream can cause the Writable side of the stream to become paused if the\noutput on the Readable side is not consumed.

                                                                                                                                                                                                                                                      ", "ctors": [ { "textRaw": "`new stream.Transform([options])`", @@ -48063,7 +49611,7 @@ ] } ], - "desc": "\n
                                                                                                                                                                                                                                                      const { Transform } = require('stream');\n\nclass MyTransform extends Transform {\n  constructor(options) {\n    super(options);\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, when using pre-ES6 style constructors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Transform } = require('stream');\nconst util = require('util');\n\nfunction MyTransform(options) {\n  if (!(this instanceof MyTransform))\n    return new MyTransform(options);\n  Transform.call(this, options);\n}\nutil.inherits(MyTransform, Transform);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using the Simplified Constructor approach:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Transform } = require('stream');\n\nconst myTransform = new Transform({\n  transform(chunk, encoding, callback) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      " + "desc": "\n
                                                                                                                                                                                                                                                      const { Transform } = require('stream');\n\nclass MyTransform extends Transform {\n  constructor(options) {\n    super(options);\n    // ...\n  }\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, when using pre-ES6 style constructors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Transform } = require('stream');\nconst util = require('util');\n\nfunction MyTransform(options) {\n  if (!(this instanceof MyTransform))\n    return new MyTransform(options);\n  Transform.call(this, options);\n}\nutil.inherits(MyTransform, Transform);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using the simplified constructor approach:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Transform } = require('stream');\n\nconst myTransform = new Transform({\n  transform(chunk, encoding, callback) {\n    // ...\n  }\n});\n
                                                                                                                                                                                                                                                      " } ], "modules": [ @@ -48092,7 +49640,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      This function MUST NOT be called by application code directly. It should be\nimplemented by child classes, and called by the internal Readable class\nmethods only.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In some cases, a transform operation may need to emit an additional bit of\ndata at the end of the stream. For example, a zlib compression stream will\nstore an amount of internal state used to optimally compress the output. When\nthe stream ends, however, that additional data needs to be flushed so that the\ncompressed data will be complete.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Custom Transform implementations may implement the transform._flush()\nmethod. This will be called when there is no more written data to be consumed,\nbut before the 'end' event is emitted signaling the end of the\nReadable stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Within the transform._flush() implementation, the readable.push() method\nmay be called zero or more times, as appropriate. The callback function must\nbe called when the flush operation is complete.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transform._flush() method is prefixed with an underscore because it is\ninternal to the class that defines it, and should never be called directly by\nuser programs.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      This function MUST NOT be called by application code directly. It should be\nimplemented by child classes, and called by the internal Readable class\nmethods only.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In some cases, a transform operation may need to emit an additional bit of\ndata at the end of the stream. For example, a zlib compression stream will\nstore an amount of internal state used to optimally compress the output. When\nthe stream ends, however, that additional data needs to be flushed so that the\ncompressed data will be complete.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Custom Transform implementations may implement the transform._flush()\nmethod. This will be called when there is no more written data to be consumed,\nbut before the 'end' event is emitted signaling the end of the\nReadable stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Within the transform._flush() implementation, the transform.push() method\nmay be called zero or more times, as appropriate. The callback function must\nbe called when the flush operation is complete.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transform._flush() method is prefixed with an underscore because it is\ninternal to the class that defines it, and should never be called directly by\nuser programs.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`transform._transform(chunk, encoding, callback)`", @@ -48122,7 +49670,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      This function MUST NOT be called by application code directly. It should be\nimplemented by child classes, and called by the internal Readable class\nmethods only.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Transform stream implementations must provide a _transform()\nmethod to accept input and produce output. The transform._transform()\nimplementation handles the bytes being written, computes an output, then passes\nthat output off to the readable portion using the readable.push() method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transform.push() method may be called zero or more times to generate\noutput from a single input chunk, depending on how much is to be output\nas a result of the chunk.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is possible that no output is generated from any given chunk of input data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback function must be called only when the current chunk is completely\nconsumed. The first argument passed to the callback must be an Error object\nif an error occurred while processing the input or null otherwise. If a second\nargument is passed to the callback, it will be forwarded on to the\nreadable.push() method. In other words, the following are equivalent:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      transform.prototype._transform = function(data, encoding, callback) {\n  this.push(data);\n  callback();\n};\n\ntransform.prototype._transform = function(data, encoding, callback) {\n  callback(null, data);\n};\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transform._transform() method is prefixed with an underscore because it\nis internal to the class that defines it, and should never be called directly by\nuser programs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      transform._transform() is never called in parallel; streams implement a\nqueue mechanism, and to receive the next chunk, callback must be\ncalled, either synchronously or asynchronously.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      This function MUST NOT be called by application code directly. It should be\nimplemented by child classes, and called by the internal Readable class\nmethods only.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All Transform stream implementations must provide a _transform()\nmethod to accept input and produce output. The transform._transform()\nimplementation handles the bytes being written, computes an output, then passes\nthat output off to the readable portion using the transform.push() method.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transform.push() method may be called zero or more times to generate\noutput from a single input chunk, depending on how much is to be output\nas a result of the chunk.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is possible that no output is generated from any given chunk of input data.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback function must be called only when the current chunk is completely\nconsumed. The first argument passed to the callback must be an Error object\nif an error occurred while processing the input or null otherwise. If a second\nargument is passed to the callback, it will be forwarded on to the\ntransform.push() method. In other words, the following are equivalent:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      transform.prototype._transform = function(data, encoding, callback) {\n  this.push(data);\n  callback();\n};\n\ntransform.prototype._transform = function(data, encoding, callback) {\n  callback(null, data);\n};\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The transform._transform() method is prefixed with an underscore because it\nis internal to the class that defines it, and should never be called directly by\nuser programs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      transform._transform() is never called in parallel; streams implement a\nqueue mechanism, and to receive the next chunk, callback must be\ncalled, either synchronously or asynchronously.

                                                                                                                                                                                                                                                      " } ], "classes": [ @@ -48134,49 +49682,49 @@ } ], "type": "misc", - "displayName": "Implementing a Transform Stream" + "displayName": "Implementing a transform stream" } ] }, { - "textRaw": "Additional Notes", - "name": "Additional Notes", + "textRaw": "Additional notes", + "name": "Additional notes", "type": "misc", "miscs": [ { - "textRaw": "Streams Compatibility with Async Generators and Async Iterators", + "textRaw": "Streams compatibility with async generators and async iterators", "name": "streams_compatibility_with_async_generators_and_async_iterators", "desc": "

                                                                                                                                                                                                                                                      With the support of async generators and iterators in JavaScript, async\ngenerators are effectively a first-class language-level stream construct at\nthis point.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some common interop cases of using Node.js streams with async generators\nand async iterators are provided below.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Consuming Readable Streams with Async Iterators", + "textRaw": "Consuming readable streams with async iterators", "name": "consuming_readable_streams_with_async_iterators", "desc": "
                                                                                                                                                                                                                                                      (async function() {\n  for await (const chunk of readable) {\n    console.log(chunk);\n  }\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Async iterators register a permanent error handler on the stream to prevent any\nunhandled post-destroy errors.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Consuming Readable Streams with Async Iterators" + "displayName": "Consuming readable streams with async iterators" }, { - "textRaw": "Creating Readable Streams with Async Generators", + "textRaw": "Creating readable streams with async generators", "name": "creating_readable_streams_with_async_generators", - "desc": "

                                                                                                                                                                                                                                                      We can construct a Node.js Readable Stream from an asynchronous generator\nusing the Readable.from() utility method:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nasync function * generate() {\n  yield 'a';\n  yield 'b';\n  yield 'c';\n}\n\nconst readable = Readable.from(generate());\n\nreadable.on('data', (chunk) => {\n  console.log(chunk);\n});\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      We can construct a Node.js readable stream from an asynchronous generator\nusing the Readable.from() utility method:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Readable } = require('stream');\n\nasync function * generate() {\n  yield 'a';\n  yield 'b';\n  yield 'c';\n}\n\nconst readable = Readable.from(generate());\n\nreadable.on('data', (chunk) => {\n  console.log(chunk);\n});\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Creating Readable Streams with Async Generators" + "displayName": "Creating readable streams with async generators" } ], "miscs": [ { - "textRaw": "Piping to Writable Streams from Async Iterators", - "name": "Piping to Writable Streams from Async Iterators", + "textRaw": "Piping to writable streams from async iterators", + "name": "Piping to writable streams from async iterators", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      In the scenario of writing to a writable stream from an async iterator, ensure\nthe correct handling of backpressure and errors.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { once } = require('events');\nconst finished = util.promisify(stream.finished);\n\nconst writable = fs.createWriteStream('./file');\n\nfunction drain(writable) {\n  if (writable.destroyed) {\n    return Promise.reject(new Error('premature close'));\n  }\n  return Promise.race([\n    once(writable, 'drain'),\n    once(writable, 'close')\n      .then(() => Promise.reject(new Error('premature close')))\n  ]);\n}\n\nasync function pump(iterable, writable) {\n  for await (const chunk of iterable) {\n    // Handle backpressure on write().\n    if (!writable.write(chunk)) {\n      await drain(writable);\n    }\n  }\n  writable.end();\n}\n\n(async function() {\n  // Ensure completion without errors.\n  await Promise.all([\n    pump(iterable, writable),\n    finished(writable)\n  ]);\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the above, errors on write() would be caught and thrown by the\nonce() listener for the 'drain' event, since once() will also handle the\n'error' event. To ensure completion of the write stream without errors,\nit is safer to use the finished() method as above, instead of using the\nonce() listener for the 'finish' event. Under certain cases, an 'error'\nevent could be emitted by the writable stream after 'finish' and as once()\nwill release the 'error' handler on handling the 'finish' event, it could\nresult in an unhandled error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, the readable stream could be wrapped with Readable.from() and\nthen piped via .pipe():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const finished = util.promisify(stream.finished);\n\nconst writable = fs.createWriteStream('./file');\n\n(async function() {\n  const readable = Readable.from(iterable);\n  readable.pipe(writable);\n  // Ensure completion without errors.\n  await finished(writable);\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Or, using stream.pipeline() to pipe streams:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const pipeline = util.promisify(stream.pipeline);\n\nconst writable = fs.createWriteStream('./file');\n\n(async function() {\n  const readable = Readable.from(iterable);\n  await pipeline(readable, writable);\n})();\n
                                                                                                                                                                                                                                                      " } ], "type": "misc", - "displayName": "Streams Compatibility with Async Generators and Async Iterators" + "displayName": "Streams compatibility with async generators and async iterators" }, { - "textRaw": "Compatibility with Older Node.js Versions", - "name": "Compatibility with Older Node.js Versions", + "textRaw": "Compatibility with older Node.js versions", + "name": "Compatibility with older Node.js versions", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Prior to Node.js 0.10, the Readable stream interface was simpler, but also\nless powerful and less useful.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Rather than waiting for calls to the stream.read() method,\n'data' events would begin emitting immediately. Applications that\nwould need to perform some amount of work to decide how to handle data\nwere required to store read data into buffers so the data would not be lost.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The stream.pause() method was advisory, rather than\nguaranteed. This meant that it was still necessary to be prepared to receive\n'data' events even when the stream was in a paused state.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In Node.js 0.10, the Readable class was added. For backward\ncompatibility with older Node.js programs, Readable streams switch into\n\"flowing mode\" when a 'data' event handler is added, or when the\nstream.resume() method is called. The effect is that, even\nwhen not using the new stream.read() method and\n'readable' event, it is no longer necessary to worry about losing\n'data' chunks.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While most applications will continue to function normally, this introduces an\nedge case in the following conditions:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • No 'data' event listener is added.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The stream.resume() method is never called.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • The stream is not piped to any writable destination.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, consider the following code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // WARNING!  BROKEN!\nnet.createServer((socket) => {\n\n  // We add an 'end' listener, but never consume the data.\n  socket.on('end', () => {\n    // It will never get here.\n    socket.end('The message was received but was not processed.\\n');\n  });\n\n}).listen(1337);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Prior to Node.js 0.10, the incoming message data would be simply discarded.\nHowever, in Node.js 0.10 and beyond, the socket remains paused forever.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The workaround in this situation is to call the\nstream.resume() method to begin the flow of data:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Workaround.\nnet.createServer((socket) => {\n  socket.on('end', () => {\n    socket.end('The message was received but was not processed.\\n');\n  });\n\n  // Start the flow of data, discarding it.\n  socket.resume();\n}).listen(1337);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In addition to new Readable streams switching into flowing mode,\npre-0.10 style streams can be wrapped in a Readable class using the\nreadable.wrap() method.

                                                                                                                                                                                                                                                      " }, @@ -48218,12 +49766,12 @@ "displayName": "Stream" }, { - "textRaw": "String Decoder", + "textRaw": "String decoder", "name": "string_decoder", "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The string_decoder module provides an API for decoding Buffer objects into\nstrings in a manner that preserves encoded multi-byte UTF-8 and UTF-16\ncharacters. It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { StringDecoder } = require('string_decoder');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example shows the basic use of the StringDecoder class.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { StringDecoder } = require('string_decoder');\nconst decoder = new StringDecoder('utf8');\n\nconst cent = Buffer.from([0xC2, 0xA2]);\nconsole.log(decoder.write(cent));\n\nconst euro = Buffer.from([0xE2, 0x82, 0xAC]);\nconsole.log(decoder.write(euro));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a Buffer instance is written to the StringDecoder instance, an\ninternal buffer is used to ensure that the decoded string does not contain\nany incomplete multibyte characters. These are held in the buffer until the\nnext call to stringDecoder.write() or until stringDecoder.end() is called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the following example, the three UTF-8 encoded bytes of the European Euro\nsymbol () are written over three separate operations:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { StringDecoder } = require('string_decoder');\nconst decoder = new StringDecoder('utf8');\n\ndecoder.write(Buffer.from([0xE2]));\ndecoder.write(Buffer.from([0x82]));\nconsole.log(decoder.end(Buffer.from([0xAC])));\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/string_decoder.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string_decoder module provides an API for decoding Buffer objects into\nstrings in a manner that preserves encoded multi-byte UTF-8 and UTF-16\ncharacters. It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { StringDecoder } = require('string_decoder');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example shows the basic use of the StringDecoder class.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { StringDecoder } = require('string_decoder');\nconst decoder = new StringDecoder('utf8');\n\nconst cent = Buffer.from([0xC2, 0xA2]);\nconsole.log(decoder.write(cent));\n\nconst euro = Buffer.from([0xE2, 0x82, 0xAC]);\nconsole.log(decoder.write(euro));\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a Buffer instance is written to the StringDecoder instance, an\ninternal buffer is used to ensure that the decoded string does not contain\nany incomplete multibyte characters. These are held in the buffer until the\nnext call to stringDecoder.write() or until stringDecoder.end() is called.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the following example, the three UTF-8 encoded bytes of the European Euro\nsymbol () are written over three separate operations:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { StringDecoder } = require('string_decoder');\nconst decoder = new StringDecoder('utf8');\n\ndecoder.write(Buffer.from([0xE2]));\ndecoder.write(Buffer.from([0x82]));\nconsole.log(decoder.end(Buffer.from([0xAC])));\n
                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `StringDecoder`", @@ -48312,7 +49860,7 @@ } ], "type": "module", - "displayName": "String Decoder" + "displayName": "String decoder" }, { "textRaw": "Timers", @@ -48320,7 +49868,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The timer module exposes a global API for scheduling functions to\nbe called at some future period of time. Because the timer functions are\nglobals, there is no need to call require('timers') to use the API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The timer functions within Node.js implement a similar API as the timers API\nprovided by Web Browsers but use a different internal implementation that is\nbuilt around the Node.js Event Loop.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/timers.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The timer module exposes a global API for scheduling functions to\nbe called at some future period of time. Because the timer functions are\nglobals, there is no need to call require('timers') to use the API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The timer functions within Node.js implement a similar API as the timers API\nprovided by Web Browsers but use a different internal implementation that is\nbuilt around the Node.js Event Loop.

                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `Immediate`", @@ -48452,10 +50000,33 @@ { "textRaw": "`timeout.refresh()`", "type": "method", - "name": "refresh", + "name": "refresh", + "meta": { + "added": [ + "v10.2.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Timeout} a reference to `timeout`", + "name": "return", + "type": "Timeout", + "desc": "a reference to `timeout`" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Sets the timer's start time to the current time, and reschedules the timer to\ncall its callback at the previously specified duration adjusted to the current\ntime. This is useful for refreshing a timer without allocating a new\nJavaScript object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using this on a timer that has already called its callback will reactivate the\ntimer.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`timeout.unref()`", + "type": "method", + "name": "unref", "meta": { "added": [ - "v10.2.0" + "v0.9.1" ], "changes": [] }, @@ -48470,37 +50041,37 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the timer's start time to the current time, and reschedules the timer to\ncall its callback at the previously specified duration adjusted to the current\ntime. This is useful for refreshing a timer without allocating a new\nJavaScript object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using this on a timer that has already called its callback will reactivate the\ntimer.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      When called, the active Timeout object will not require the Node.js event loop\nto remain active. If there is no other activity keeping the event loop running,\nthe process may exit before the Timeout object's callback is invoked. Calling\ntimeout.unref() multiple times will have no effect.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling timeout.unref() creates an internal timer that will wake the Node.js\nevent loop. Creating too many of these can adversely impact performance\nof the Node.js application.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "`timeout.unref()`", + "textRaw": "`timeout[Symbol.toPrimitive]()`", "type": "method", - "name": "unref", + "name": "[Symbol.toPrimitive]", "meta": { "added": [ - "v0.9.1" + "v12.19.0" ], "changes": [] }, "signatures": [ { "return": { - "textRaw": "Returns: {Timeout} a reference to `timeout`", + "textRaw": "Returns: {integer} a number that can be used to reference this `timeout`", "name": "return", - "type": "Timeout", - "desc": "a reference to `timeout`" + "type": "integer", + "desc": "a number that can be used to reference this `timeout`" }, "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      When called, the active Timeout object will not require the Node.js event loop\nto remain active. If there is no other activity keeping the event loop running,\nthe process may exit before the Timeout object's callback is invoked. Calling\ntimeout.unref() multiple times will have no effect.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling timeout.unref() creates an internal timer that will wake the Node.js\nevent loop. Creating too many of these can adversely impact performance\nof the Node.js application.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Coerce a Timeout to a primitive. The primitive can be used to\nclear the Timeout. The primitive can only be used in the\nsame thread where the timeout was created. Therefore, to use it\nacross worker_threads it must first be passed to the correct\nthread. This allows enhanced compatibility with browser\nsetTimeout() and setInterval() implementations.

                                                                                                                                                                                                                                                      " } ] } ], "modules": [ { - "textRaw": "Scheduling Timers", + "textRaw": "Scheduling timers", "name": "scheduling_timers", "desc": "

                                                                                                                                                                                                                                                      A timer in Node.js is an internal construct that calls a given function after\na certain period of time. When a timer's function is called varies depending on\nwhich method was used to create the timer and what other work the Node.js\nevent loop is doing.

                                                                                                                                                                                                                                                      ", "methods": [ @@ -48626,10 +50197,10 @@ } ], "type": "module", - "displayName": "Scheduling Timers" + "displayName": "Scheduling timers" }, { - "textRaw": "Cancelling Timers", + "textRaw": "Cancelling timers", "name": "cancelling_timers", "desc": "

                                                                                                                                                                                                                                                      The setImmediate(), setInterval(), and setTimeout() methods\neach return objects that represent the scheduled timers. These can be used to\ncancel the timer and prevent it from triggering.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is not possible to cancel timers that were created using the promisified\nvariants of setImmediate(), setTimeout().

                                                                                                                                                                                                                                                      ", "methods": [ @@ -48707,7 +50278,7 @@ } ], "type": "module", - "displayName": "Cancelling Timers" + "displayName": "Cancelling timers" } ], "type": "module", @@ -48719,18 +50290,18 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The tls module provides an implementation of the Transport Layer Security\n(TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL.\nThe module can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tls = require('tls');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/tls.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls module provides an implementation of the Transport Layer Security\n(TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL.\nThe module can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tls = require('tls');\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "TLS/SSL Concepts", + "textRaw": "TLS/SSL concepts", "name": "tls/ssl_concepts", - "desc": "

                                                                                                                                                                                                                                                      The TLS/SSL is a public/private key infrastructure (PKI). For most common\ncases, each client and server must have a private key.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Private keys can be generated in multiple ways. The example below illustrates\nuse of the OpenSSL command-line interface to generate a 2048-bit RSA private\nkey:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl genrsa -out ryans-key.pem 2048\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With TLS/SSL, all servers (and some clients) must have a certificate.\nCertificates are public keys that correspond to a private key, and that are\ndigitally signed either by a Certificate Authority or by the owner of the\nprivate key (such certificates are referred to as \"self-signed\"). The first\nstep to obtaining a certificate is to create a Certificate Signing Request\n(CSR) file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The OpenSSL command-line interface can be used to generate a CSR for a private\nkey:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the CSR file is generated, it can either be sent to a Certificate\nAuthority for signing or used to generate a self-signed certificate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Creating a self-signed certificate using the OpenSSL command-line interface\nis illustrated in the example below:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the certificate is generated, it can be used to generate a .pfx or\n.p12 file:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem \\\n      -certfile ca-cert.pem -out ryans.pfx\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Where:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • in: is the signed certificate
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • inkey: is the associated private key
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • certfile: is a concatenation of all Certificate Authority (CA) certs into\na single file, e.g. cat ca1-cert.pem ca2-cert.pem > ca-cert.pem
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The TLS/SSL is a public/private key infrastructure (PKI). For most common\ncases, each client and server must have a private key.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Private keys can be generated in multiple ways. The example below illustrates\nuse of the OpenSSL command-line interface to generate a 2048-bit RSA private\nkey:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl genrsa -out ryans-key.pem 2048\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With TLS/SSL, all servers (and some clients) must have a certificate.\nCertificates are public keys that correspond to a private key, and that are\ndigitally signed either by a Certificate Authority or by the owner of the\nprivate key (such certificates are referred to as \"self-signed\"). The first\nstep to obtaining a certificate is to create a Certificate Signing Request\n(CSR) file.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The OpenSSL command-line interface can be used to generate a CSR for a private\nkey:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the CSR file is generated, it can either be sent to a Certificate\nAuthority for signing or used to generate a self-signed certificate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Creating a self-signed certificate using the OpenSSL command-line interface\nis illustrated in the example below:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Once the certificate is generated, it can be used to generate a .pfx or\n.p12 file:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem \\\n      -certfile ca-cert.pem -out ryans.pfx\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Where:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • in: is the signed certificate
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • inkey: is the associated private key
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • certfile: is a concatenation of all Certificate Authority (CA) certs into\na single file, e.g. cat ca1-cert.pem ca2-cert.pem > ca-cert.pem
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Perfect Forward Secrecy", - "name": "Perfect Forward Secrecy", + "textRaw": "Perfect forward secrecy", + "name": "Perfect forward secrecy", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      The term \"Forward Secrecy\" or \"Perfect Forward Secrecy\" describes a feature\nof key-agreement (i.e., key-exchange) methods. That is, the server and client\nkeys are used to negotiate new temporary keys that are used specifically and\nonly for the current communication session. Practically, this means that even\nif the server's private key is compromised, communication can only be decrypted\nby eavesdroppers if the attacker manages to obtain the key-pair specifically\ngenerated for the session.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Perfect Forward Secrecy is achieved by randomly generating a key pair for\nkey-agreement on every TLS/SSL handshake (in contrast to using the same key for\nall sessions). Methods implementing this technique are called \"ephemeral\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Currently two methods are commonly used to achieve Perfect Forward Secrecy (note\nthe character \"E\" appended to the traditional abbreviations):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • DHE: An ephemeral version of the Diffie Hellman key-agreement protocol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • ECDHE: An ephemeral version of the Elliptic Curve Diffie Hellman\nkey-agreement protocol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Ephemeral methods may have some performance drawbacks, because key generation\nis expensive.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To use Perfect Forward Secrecy using DHE with the tls module, it is required\nto generate Diffie-Hellman parameters and specify them with the dhparam\noption to tls.createSecureContext(). The following illustrates the use of\nthe OpenSSL command-line interface to generate such parameters:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl dhparam -outform PEM -out dhparam.pem 2048\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If using Perfect Forward Secrecy using ECDHE, Diffie-Hellman parameters are\nnot required and a default ECDHE curve will be used. The ecdhCurve property\ncan be used when creating a TLS Server to specify the list of names of supported\ncurves to use, see tls.createServer() for more info.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Perfect Forward Secrecy was optional up to TLSv1.2, but it is not optional for\nTLSv1.3, because all TLSv1.3 cipher suites use ECDHE.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The term forward secrecy or perfect forward secrecy describes a feature\nof key-agreement (i.e., key-exchange) methods. That is, the server and client\nkeys are used to negotiate new temporary keys that are used specifically and\nonly for the current communication session. Practically, this means that even\nif the server's private key is compromised, communication can only be decrypted\nby eavesdroppers if the attacker manages to obtain the key-pair specifically\ngenerated for the session.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Perfect forward secrecy is achieved by randomly generating a key pair for\nkey-agreement on every TLS/SSL handshake (in contrast to using the same key for\nall sessions). Methods implementing this technique are called \"ephemeral\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Currently two methods are commonly used to achieve perfect forward secrecy (note\nthe character \"E\" appended to the traditional abbreviations):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • DHE: An ephemeral version of the Diffie-Hellman key-agreement protocol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • ECDHE: An ephemeral version of the Elliptic Curve Diffie-Hellman\nkey-agreement protocol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Ephemeral methods may have some performance drawbacks, because key generation\nis expensive.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To use perfect forward secrecy using DHE with the tls module, it is required\nto generate Diffie-Hellman parameters and specify them with the dhparam\noption to tls.createSecureContext(). The following illustrates the use of\nthe OpenSSL command-line interface to generate such parameters:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      openssl dhparam -outform PEM -out dhparam.pem 2048\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If using perfect forward secrecy using ECDHE, Diffie-Hellman parameters are\nnot required and a default ECDHE curve will be used. The ecdhCurve property\ncan be used when creating a TLS Server to specify the list of names of supported\ncurves to use, see tls.createServer() for more info.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Perfect forward secrecy was optional up to TLSv1.2, but it is not optional for\nTLSv1.3, because all TLSv1.3 cipher suites use ECDHE.

                                                                                                                                                                                                                                                      " }, { "textRaw": "ALPN and SNI", @@ -48753,31 +50324,61 @@ ], "modules": [ { - "textRaw": "Session Resumption", + "textRaw": "Session resumption", "name": "session_resumption", - "desc": "

                                                                                                                                                                                                                                                      Establishing a TLS session can be relatively slow. The process can be sped\nup by saving and later reusing the session state. There are several mechanisms\nto do so, discussed here from oldest to newest (and preferred).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Session Identifiers Servers generate a unique ID for new connections and\nsend it to the client. Clients and servers save the session state. When\nreconnecting, clients send the ID of their saved session state and if the server\nalso has the state for that ID, it can agree to use it. Otherwise, the server\nwill create a new session. See RFC 2246 for more information, page 23 and\n30.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Resumption using session identifiers is supported by most web browsers when\nmaking HTTPS requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Node.js, clients wait for the 'session' event to get the session data,\nand provide the data to the session option of a subsequent tls.connect()\nto reuse the session. Servers must\nimplement handlers for the 'newSession' and 'resumeSession' events\nto save and restore the session data using the session ID as the lookup key to\nreuse sessions. To reuse sessions across load balancers or cluster workers,\nservers must use a shared session cache (such as Redis) in their session\nhandlers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Session Tickets The servers encrypt the entire session state and send it\nto the client as a \"ticket\". When reconnecting, the state is sent to the server\nin the initial connection. This mechanism avoids the need for server-side\nsession cache. If the server doesn't use the ticket, for any reason (failure\nto decrypt it, it's too old, etc.), it will create a new session and send a new\nticket. See RFC 5077 for more information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Resumption using session tickets is becoming commonly supported by many web\nbrowsers when making HTTPS requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Node.js, clients use the same APIs for resumption with session identifiers\nas for resumption with session tickets. For debugging, if\ntls.TLSSocket.getTLSTicket() returns a value, the session data contains a\nticket, otherwise it contains client-side session state.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With TLSv1.3, be aware that multiple tickets may be sent by the server,\nresulting in multiple 'session' events, see 'session' for more\ninformation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Single process servers need no specific implementation to use session tickets.\nTo use session tickets across server restarts or load balancers, servers must\nall have the same ticket keys. There are three 16-byte keys internally, but the\ntls API exposes them as a single 48-byte buffer for convenience.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Its possible to get the ticket keys by calling server.getTicketKeys() on\none server instance and then distribute them, but it is more reasonable to\nsecurely generate 48 bytes of secure random data and set them with the\nticketKeys option of tls.createServer(). The keys should be regularly\nregenerated and server's keys can be reset with\nserver.setTicketKeys().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Session ticket keys are cryptographic keys, and they must be stored\nsecurely. With TLS 1.2 and below, if they are compromised all sessions that\nused tickets encrypted with them can be decrypted. They should not be stored\non disk, and they should be regenerated regularly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If clients advertise support for tickets, the server will send them. The\nserver can disable tickets by supplying\nrequire('constants').SSL_OP_NO_TICKET in secureOptions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Both session identifiers and session tickets timeout, causing the server to\ncreate new sessions. The timeout can be configured with the sessionTimeout\noption of tls.createServer().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For all the mechanisms, when resumption fails, servers will create new sessions.\nSince failing to resume the session does not cause TLS/HTTPS connection\nfailures, it is easy to not notice unnecessarily poor TLS performance. The\nOpenSSL CLI can be used to verify that servers are resuming sessions. Use the\n-reconnect option to openssl s_client, for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ openssl s_client -connect localhost:443 -reconnect\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Read through the debug output. The first connection should say \"New\", for\nexample:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Subsequent connections should say \"Reused\", for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Establishing a TLS session can be relatively slow. The process can be sped\nup by saving and later reusing the session state. There are several mechanisms\nto do so, discussed here from oldest to newest (and preferred).

                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "Session identifiers", + "name": "session_identifiers", + "desc": "

                                                                                                                                                                                                                                                      Servers generate a unique ID for new connections and\nsend it to the client. Clients and servers save the session state. When\nreconnecting, clients send the ID of their saved session state and if the server\nalso has the state for that ID, it can agree to use it. Otherwise, the server\nwill create a new session. See RFC 2246 for more information, page 23 and\n30.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Resumption using session identifiers is supported by most web browsers when\nmaking HTTPS requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Node.js, clients wait for the 'session' event to get the session data,\nand provide the data to the session option of a subsequent tls.connect()\nto reuse the session. Servers must\nimplement handlers for the 'newSession' and 'resumeSession' events\nto save and restore the session data using the session ID as the lookup key to\nreuse sessions. To reuse sessions across load balancers or cluster workers,\nservers must use a shared session cache (such as Redis) in their session\nhandlers.

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Session identifiers" + }, + { + "textRaw": "Session tickets", + "name": "session_tickets", + "desc": "

                                                                                                                                                                                                                                                      The servers encrypt the entire session state and send it\nto the client as a \"ticket\". When reconnecting, the state is sent to the server\nin the initial connection. This mechanism avoids the need for server-side\nsession cache. If the server doesn't use the ticket, for any reason (failure\nto decrypt it, it's too old, etc.), it will create a new session and send a new\nticket. See RFC 5077 for more information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Resumption using session tickets is becoming commonly supported by many web\nbrowsers when making HTTPS requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Node.js, clients use the same APIs for resumption with session identifiers\nas for resumption with session tickets. For debugging, if\ntls.TLSSocket.getTLSTicket() returns a value, the session data contains a\nticket, otherwise it contains client-side session state.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With TLSv1.3, be aware that multiple tickets may be sent by the server,\nresulting in multiple 'session' events, see 'session' for more\ninformation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Single process servers need no specific implementation to use session tickets.\nTo use session tickets across server restarts or load balancers, servers must\nall have the same ticket keys. There are three 16-byte keys internally, but the\ntls API exposes them as a single 48-byte buffer for convenience.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Its possible to get the ticket keys by calling server.getTicketKeys() on\none server instance and then distribute them, but it is more reasonable to\nsecurely generate 48 bytes of secure random data and set them with the\nticketKeys option of tls.createServer(). The keys should be regularly\nregenerated and server's keys can be reset with\nserver.setTicketKeys().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Session ticket keys are cryptographic keys, and they must be stored\nsecurely. With TLS 1.2 and below, if they are compromised all sessions that\nused tickets encrypted with them can be decrypted. They should not be stored\non disk, and they should be regenerated regularly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If clients advertise support for tickets, the server will send them. The\nserver can disable tickets by supplying\nrequire('constants').SSL_OP_NO_TICKET in secureOptions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Both session identifiers and session tickets timeout, causing the server to\ncreate new sessions. The timeout can be configured with the sessionTimeout\noption of tls.createServer().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For all the mechanisms, when resumption fails, servers will create new sessions.\nSince failing to resume the session does not cause TLS/HTTPS connection\nfailures, it is easy to not notice unnecessarily poor TLS performance. The\nOpenSSL CLI can be used to verify that servers are resuming sessions. Use the\n-reconnect option to openssl s_client, for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ openssl s_client -connect localhost:443 -reconnect\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Read through the debug output. The first connection should say \"New\", for\nexample:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Subsequent connections should say \"Reused\", for example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Session tickets" + } + ], "type": "module", - "displayName": "Session Resumption" + "displayName": "Session resumption" } ], "type": "module", - "displayName": "TLS/SSL Concepts" + "displayName": "TLS/SSL concepts" }, { - "textRaw": "Modifying the Default TLS Cipher suite", + "textRaw": "Modifying the default TLS cipher suite", "name": "modifying_the_default_tls_cipher_suite", - "desc": "

                                                                                                                                                                                                                                                      Node.js is built with a default suite of enabled and disabled TLS ciphers.\nCurrently, the default cipher suite is:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      TLS_AES_256_GCM_SHA384:\nTLS_CHACHA20_POLY1305_SHA256:\nTLS_AES_128_GCM_SHA256:\nECDHE-RSA-AES128-GCM-SHA256:\nECDHE-ECDSA-AES128-GCM-SHA256:\nECDHE-RSA-AES256-GCM-SHA384:\nECDHE-ECDSA-AES256-GCM-SHA384:\nDHE-RSA-AES128-GCM-SHA256:\nECDHE-RSA-AES128-SHA256:\nDHE-RSA-AES128-SHA256:\nECDHE-RSA-AES256-SHA384:\nDHE-RSA-AES256-SHA384:\nECDHE-RSA-AES256-SHA256:\nDHE-RSA-AES256-SHA256:\nHIGH:\n!aNULL:\n!eNULL:\n!EXPORT:\n!DES:\n!RC4:\n!MD5:\n!PSK:\n!SRP:\n!CAMELLIA\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This default can be replaced entirely using the --tls-cipher-list command\nline switch (directly, or via the NODE_OPTIONS environment variable). For\ninstance, the following makes ECDHE-RSA-AES128-GCM-SHA256:!RC4 the default TLS\ncipher suite:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --tls-cipher-list=\"ECDHE-RSA-AES128-GCM-SHA256:!RC4\" server.js\n\nexport NODE_OPTIONS=--tls-cipher-list=\"ECDHE-RSA-AES128-GCM-SHA256:!RC4\"\nnode server.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default can also be replaced on a per client or server basis using the\nciphers option from tls.createSecureContext(), which is also available\nin tls.createServer(), tls.connect(), and when creating new\ntls.TLSSockets.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ciphers list can contain a mixture of TLSv1.3 cipher suite names, the ones\nthat start with 'TLS_', and specifications for TLSv1.2 and below cipher\nsuites. The TLSv1.2 ciphers support a legacy specification format, consult\nthe OpenSSL cipher list format documentation for details, but those\nspecifications do not apply to TLSv1.3 ciphers. The TLSv1.3 suites can only\nbe enabled by including their full name in the cipher list. They cannot, for\nexample, be enabled or disabled by using the legacy TLSv1.2 'EECDH' or\n'!EECDH' specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Despite the relative order of TLSv1.3 and TLSv1.2 cipher suites, the TLSv1.3\nprotocol is significantly more secure than TLSv1.2, and will always be chosen\nover TLSv1.2 if the handshake indicates it is supported, and if any TLSv1.3\ncipher suites are enabled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default cipher suite included within Node.js has been carefully\nselected to reflect current security best practices and risk mitigation.\nChanging the default cipher suite can have a significant impact on the security\nof an application. The --tls-cipher-list switch and ciphers option should by\nused only if absolutely necessary.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default cipher suite prefers GCM ciphers for Chrome's 'modern\ncryptography' setting and also prefers ECDHE and DHE ciphers for Perfect\nForward Secrecy, while offering some backward compatibility.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      128 bit AES is preferred over 192 and 256 bit AES in light of specific\nattacks affecting larger AES key sizes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Old clients that rely on insecure and deprecated RC4 or DES-based ciphers\n(like Internet Explorer 6) cannot complete the handshaking process with\nthe default configuration. If these clients must be supported, the\nTLS recommendations may offer a compatible cipher suite. For more details\non the format, see the OpenSSL cipher list format documentation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are only 5 TLSv1.3 cipher suites:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'TLS_AES_256_GCM_SHA384'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'TLS_CHACHA20_POLY1305_SHA256'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'TLS_AES_128_GCM_SHA256'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'TLS_AES_128_CCM_SHA256'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'TLS_AES_128_CCM_8_SHA256'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first 3 are enabled by default. The last 2 CCM-based suites are supported\nby TLSv1.3 because they may be more performant on constrained systems, but they\nare not enabled by default since they offer less security.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Node.js is built with a default suite of enabled and disabled TLS ciphers. This\ndefault cipher list can be configured when building Node.js to allow\ndistributions to provide their own default list.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following command can be used to show the default cipher suite:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node -p crypto.constants.defaultCoreCipherList | tr ':' '\\n'\nTLS_AES_256_GCM_SHA384\nTLS_CHACHA20_POLY1305_SHA256\nTLS_AES_128_GCM_SHA256\nECDHE-RSA-AES128-GCM-SHA256\nECDHE-ECDSA-AES128-GCM-SHA256\nECDHE-RSA-AES256-GCM-SHA384\nECDHE-ECDSA-AES256-GCM-SHA384\nDHE-RSA-AES128-GCM-SHA256\nECDHE-RSA-AES128-SHA256\nDHE-RSA-AES128-SHA256\nECDHE-RSA-AES256-SHA384\nDHE-RSA-AES256-SHA384\nECDHE-RSA-AES256-SHA256\nDHE-RSA-AES256-SHA256\nHIGH\n!aNULL\n!eNULL\n!EXPORT\n!DES\n!RC4\n!MD5\n!PSK\n!SRP\n!CAMELLIA\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This default can be replaced entirely using the --tls-cipher-list command\nline switch (directly, or via the NODE_OPTIONS environment variable). For\ninstance, the following makes ECDHE-RSA-AES128-GCM-SHA256:!RC4 the default TLS\ncipher suite:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4' server.js\n\nexport NODE_OPTIONS=--tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4'\nnode server.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default can also be replaced on a per client or server basis using the\nciphers option from tls.createSecureContext(), which is also available\nin tls.createServer(), tls.connect(), and when creating new\ntls.TLSSockets.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ciphers list can contain a mixture of TLSv1.3 cipher suite names, the ones\nthat start with 'TLS_', and specifications for TLSv1.2 and below cipher\nsuites. The TLSv1.2 ciphers support a legacy specification format, consult\nthe OpenSSL cipher list format documentation for details, but those\nspecifications do not apply to TLSv1.3 ciphers. The TLSv1.3 suites can only\nbe enabled by including their full name in the cipher list. They cannot, for\nexample, be enabled or disabled by using the legacy TLSv1.2 'EECDH' or\n'!EECDH' specification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Despite the relative order of TLSv1.3 and TLSv1.2 cipher suites, the TLSv1.3\nprotocol is significantly more secure than TLSv1.2, and will always be chosen\nover TLSv1.2 if the handshake indicates it is supported, and if any TLSv1.3\ncipher suites are enabled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default cipher suite included within Node.js has been carefully\nselected to reflect current security best practices and risk mitigation.\nChanging the default cipher suite can have a significant impact on the security\nof an application. The --tls-cipher-list switch and ciphers option should by\nused only if absolutely necessary.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The default cipher suite prefers GCM ciphers for Chrome's 'modern\ncryptography' setting and also prefers ECDHE and DHE ciphers for perfect\nforward secrecy, while offering some backward compatibility.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      128 bit AES is preferred over 192 and 256 bit AES in light of specific\nattacks affecting larger AES key sizes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Old clients that rely on insecure and deprecated RC4 or DES-based ciphers\n(like Internet Explorer 6) cannot complete the handshaking process with\nthe default configuration. If these clients must be supported, the\nTLS recommendations may offer a compatible cipher suite. For more details\non the format, see the OpenSSL cipher list format documentation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There are only 5 TLSv1.3 cipher suites:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'TLS_AES_256_GCM_SHA384'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'TLS_CHACHA20_POLY1305_SHA256'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'TLS_AES_128_GCM_SHA256'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'TLS_AES_128_CCM_SHA256'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'TLS_AES_128_CCM_8_SHA256'
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first 3 are enabled by default. The last 2 CCM-based suites are supported\nby TLSv1.3 because they may be more performant on constrained systems, but they\nare not enabled by default since they offer less security.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Modifying the Default TLS Cipher suite" - }, + "displayName": "Modifying the default TLS cipher suite" + } + ], + "classes": [ { - "textRaw": "Deprecated APIs", - "name": "deprecated_apis", - "classes": [ + "textRaw": "Class: `tls.CryptoStream`", + "type": "class", + "name": "tls.CryptoStream", + "meta": { + "added": [ + "v0.3.4" + ], + "deprecated": [ + "v0.11.3" + ], + "changes": [] + }, + "stability": 0, + "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", + "desc": "

                                                                                                                                                                                                                                                      The tls.CryptoStream class represents a stream of encrypted data. This class\nis deprecated and should no longer be used.

                                                                                                                                                                                                                                                      ", + "properties": [ { - "textRaw": "Class: `CryptoStream`", - "type": "class", - "name": "CryptoStream", + "textRaw": "`cryptoStream.bytesWritten`", + "name": "bytesWritten", "meta": { "added": [ "v0.3.4" @@ -48787,67 +50388,31 @@ ], "changes": [] }, - "stability": 0, - "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", - "desc": "

                                                                                                                                                                                                                                                      The tls.CryptoStream class represents a stream of encrypted data. This class\nis deprecated and should no longer be used.

                                                                                                                                                                                                                                                      ", - "properties": [ - { - "textRaw": "`cryptoStream.bytesWritten`", - "name": "bytesWritten", - "meta": { - "added": [ - "v0.3.4" - ], - "deprecated": [ - "v0.11.3" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                      The cryptoStream.bytesWritten property returns the total number of bytes\nwritten to the underlying socket including the bytes required for the\nimplementation of the TLS protocol.

                                                                                                                                                                                                                                                      " - } - ] - }, - { - "textRaw": "Class: `SecurePair`", - "type": "class", - "name": "SecurePair", - "meta": { - "added": [ - "v0.3.2" - ], - "deprecated": [ - "v0.11.3" - ], - "changes": [] - }, - "stability": 0, - "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", - "desc": "

                                                                                                                                                                                                                                                      Returned by tls.createSecurePair().

                                                                                                                                                                                                                                                      ", - "events": [ - { - "textRaw": "Event: `'secure'`", - "type": "event", - "name": "secure", - "meta": { - "added": [ - "v0.3.2" - ], - "deprecated": [ - "v0.11.3" - ], - "changes": [] - }, - "params": [], - "desc": "

                                                                                                                                                                                                                                                      The 'secure' event is emitted by the SecurePair object once a secure\nconnection has been established.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As with checking for the server\n'secureConnection'\nevent, pair.cleartext.authorized should be inspected to confirm whether the\ncertificate used is properly authorized.

                                                                                                                                                                                                                                                      " - } - ] + "desc": "

                                                                                                                                                                                                                                                      The cryptoStream.bytesWritten property returns the total number of bytes\nwritten to the underlying socket including the bytes required for the\nimplementation of the TLS protocol.

                                                                                                                                                                                                                                                      " } - ], - "methods": [ + ] + }, + { + "textRaw": "Class: `tls.SecurePair`", + "type": "class", + "name": "tls.SecurePair", + "meta": { + "added": [ + "v0.3.2" + ], + "deprecated": [ + "v0.11.3" + ], + "changes": [] + }, + "stability": 0, + "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", + "desc": "

                                                                                                                                                                                                                                                      Returned by tls.createSecurePair().

                                                                                                                                                                                                                                                      ", + "events": [ { - "textRaw": "`tls.createSecurePair([context][, isServer][, requestCert][, rejectUnauthorized][, options])`", - "type": "method", - "name": "createSecurePair", + "textRaw": "Event: `'secure'`", + "type": "event", + "name": "secure", "meta": { "added": [ "v0.3.2" @@ -48855,114 +50420,13 @@ "deprecated": [ "v0.11.3" ], - "changes": [ - { - "version": "v5.0.0", - "pr-url": "https://github.com/nodejs/node/pull/2564", - "description": "ALPN options are supported now." - } - ] + "changes": [] }, - "stability": 0, - "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", - "signatures": [ - { - "params": [ - { - "textRaw": "`context` {Object} A secure context object as returned by `tls.createSecureContext()`", - "name": "context", - "type": "Object", - "desc": "A secure context object as returned by `tls.createSecureContext()`" - }, - { - "textRaw": "`isServer` {boolean} `true` to specify that this TLS connection should be opened as a server.", - "name": "isServer", - "type": "boolean", - "desc": "`true` to specify that this TLS connection should be opened as a server." - }, - { - "textRaw": "`requestCert` {boolean} `true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`.", - "name": "requestCert", - "type": "boolean", - "desc": "`true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`." - }, - { - "textRaw": "`rejectUnauthorized` {boolean} If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`.", - "name": "rejectUnauthorized", - "type": "boolean", - "desc": "If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`." - }, - { - "textRaw": "`options`", - "name": "options", - "options": [ - { - "textRaw": "`enableTrace`: See [`tls.createServer()`][]", - "name": "enableTrace", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`secureContext`: A TLS context object from [`tls.createSecureContext()`][]", - "name": "secureContext", - "desc": "A TLS context object from [`tls.createSecureContext()`][]" - }, - { - "textRaw": "`isServer`: If `true` the TLS socket will be instantiated in server-mode. **Default:** `false`.", - "name": "isServer", - "default": "`false`", - "desc": "If `true` the TLS socket will be instantiated in server-mode." - }, - { - "textRaw": "`server` {net.Server} A [`net.Server`][] instance", - "name": "server", - "type": "net.Server", - "desc": "A [`net.Server`][] instance" - }, - { - "textRaw": "`requestCert`: See [`tls.createServer()`][]", - "name": "requestCert", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`rejectUnauthorized`: See [`tls.createServer()`][]", - "name": "rejectUnauthorized", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`ALPNProtocols`: See [`tls.createServer()`][]", - "name": "ALPNProtocols", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`SNICallback`: See [`tls.createServer()`][]", - "name": "SNICallback", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`session` {Buffer} A `Buffer` instance containing a TLS session.", - "name": "session", - "type": "Buffer", - "desc": "A `Buffer` instance containing a TLS session." - }, - { - "textRaw": "`requestOCSP` {boolean} If `true`, specifies that the OCSP status request extension will be added to the client hello and an `'OCSPResponse'` event will be emitted on the socket before establishing a secure communication.", - "name": "requestOCSP", - "type": "boolean", - "desc": "If `true`, specifies that the OCSP status request extension will be added to the client hello and an `'OCSPResponse'` event will be emitted on the socket before establishing a secure communication." - } - ] - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                      Creates a new secure pair object with two streams, one of which reads and writes\nthe encrypted data and the other of which reads and writes the cleartext data.\nGenerally, the encrypted stream is piped to/from an incoming encrypted data\nstream and the cleartext one is used as a replacement for the initial encrypted\nstream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.createSecurePair() returns a tls.SecurePair object with cleartext and\nencrypted stream properties.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using cleartext has the same API as tls.TLSSocket.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.createSecurePair() method is now deprecated in favor of\ntls.TLSSocket(). For example, the code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      pair = tls.createSecurePair(/* ... */);\npair.encrypted.pipe(socket);\nsocket.pipe(pair.encrypted);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      can be replaced by:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      secureSocket = tls.TLSSocket(socket, options);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      where secureSocket has the same API as pair.cleartext.

                                                                                                                                                                                                                                                      " + "params": [], + "desc": "

                                                                                                                                                                                                                                                      The 'secure' event is emitted by the SecurePair object once a secure\nconnection has been established.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As with checking for the server\n'secureConnection'\nevent, pair.cleartext.authorized should be inspected to confirm whether the\ncertificate used is properly authorized.

                                                                                                                                                                                                                                                      " } - ], - "type": "module", - "displayName": "Deprecated APIs" - } - ], - "classes": [ + ] + }, { "textRaw": "Class: `tls.Server`", "type": "class", @@ -48976,6 +50440,25 @@ "desc": "\n

                                                                                                                                                                                                                                                      Accepts encrypted connections using TLS or SSL.

                                                                                                                                                                                                                                                      ", "events": [ { + "textRaw": "Event: `'connection'`", + "type": "event", + "name": "connection", + "meta": { + "added": [ + "v0.3.2" + ], + "changes": [] + }, + "params": [ + { + "textRaw": "`socket` {stream.Duplex}", + "name": "socket", + "type": "stream.Duplex" + } + ], + "desc": "

                                                                                                                                                                                                                                                      This event is emitted when a new TCP stream is established, before the TLS\nhandshake begins. socket is typically an object of type net.Socket.\nUsually users will not want to access this event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This event can also be explicitly emitted by users to inject connections\ninto the TLS server. In that case, any Duplex stream can be passed.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "Event: `'keylog'`", "type": "event", "name": "keylog", @@ -49009,7 +50492,13 @@ "added": [ "v0.9.2" ], - "changes": [] + "changes": [ + { + "version": "v0.11.12", + "pr-url": "https://github.com/nodejs/node-v0.x-archive/pull/7118", + "description": "The `callback` argument is now supported." + } + ] }, "params": [], "desc": "

                                                                                                                                                                                                                                                      The 'newSession' event is emitted upon creation of a new TLS session. This may\nbe used to store sessions in external storage. The data should be provided to\nthe 'resumeSession' callback.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The listener callback is passed three arguments when called:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • sessionId <Buffer> The TLS session identifier
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • sessionData <Buffer> The TLS session data
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • callback <Function> A callback function taking no arguments that must be\ninvoked in order for data to be sent or received over the secure connection.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Listening for this event will have an effect only on connections established\nafter the addition of the event listener.

                                                                                                                                                                                                                                                      " @@ -49038,7 +50527,7 @@ "changes": [] }, "params": [], - "desc": "

                                                                                                                                                                                                                                                      The 'resumeSession' event is emitted when the client requests to resume a\nprevious TLS session. The listener callback is passed two arguments when\ncalled:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • sessionId <Buffer> The TLS session identifier
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        callback <Function> A callback function to be called when the prior session\nhas been recovered: callback([err[, sessionData]])

                                                                                                                                                                                                                                                        \n\n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The event listener should perform a lookup in external storage for the\nsessionData saved by the 'newSession' event handler using the given\nsessionId. If found, call callback(null, sessionData) to resume the session.\nIf not found, the session cannot be resumed. callback() must be called\nwithout sessionData so that the handshake can continue and a new session can\nbe created. It is possible to call callback(err) to terminate the incoming\nconnection and destroy the socket.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Listening for this event will have an effect only on connections established\nafter the addition of the event listener.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following illustrates resuming a TLS session:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tlsSessionStore = {};\nserver.on('newSession', (id, data, cb) => {\n  tlsSessionStore[id.toString('hex')] = data;\n  cb();\n});\nserver.on('resumeSession', (id, cb) => {\n  cb(null, tlsSessionStore[id.toString('hex')] || null);\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'resumeSession' event is emitted when the client requests to resume a\nprevious TLS session. The listener callback is passed two arguments when\ncalled:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • sessionId <Buffer> The TLS session identifier
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • callback <Function> A callback function to be called when the prior session\nhas been recovered: callback([err[, sessionData]])\n\n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The event listener should perform a lookup in external storage for the\nsessionData saved by the 'newSession' event handler using the given\nsessionId. If found, call callback(null, sessionData) to resume the session.\nIf not found, the session cannot be resumed. callback() must be called\nwithout sessionData so that the handshake can continue and a new session can\nbe created. It is possible to call callback(err) to terminate the incoming\nconnection and destroy the socket.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Listening for this event will have an effect only on connections established\nafter the addition of the event listener.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following illustrates resuming a TLS session:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tlsSessionStore = {};\nserver.on('newSession', (id, data, cb) => {\n  tlsSessionStore[id.toString('hex')] = data;\n  cb();\n});\nserver.on('resumeSession', (id, cb) => {\n  cb(null, tlsSessionStore[id.toString('hex')] || null);\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'secureConnection'`", @@ -49327,7 +50816,7 @@ "type": "Buffer" } ], - "desc": "

                                                                                                                                                                                                                                                      The 'session' event is emitted on a client tls.TLSSocket when a new session\nor TLS ticket is available. This may or may not be before the handshake is\ncomplete, depending on the TLS protocol version that was negotiated. The event\nis not emitted on the server, or if a new session was not created, for example,\nwhen the connection was resumed. For some TLS protocol versions the event may be\nemitted multiple times, in which case all the sessions can be used for\nresumption.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On the client, the session can be provided to the session option of\ntls.connect() to resume the connection.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See Session Resumption for more information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For TLSv1.2 and below, tls.TLSSocket.getSession() can be called once\nthe handshake is complete. For TLSv1.3, only ticket-based resumption is allowed\nby the protocol, multiple tickets are sent, and the tickets aren't sent until\nafter the handshake completes. So it is necessary to wait for the\n'session' event to get a resumable session. Applications\nshould use the 'session' event instead of getSession() to ensure\nthey will work for all TLS versions. Applications that only expect to\nget or use one session should listen for this event only once:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      tlsSocket.once('session', (session) => {\n  // The session can be used immediately or later.\n  tls.connect({\n    session: session,\n    // Other connect options...\n  });\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'session' event is emitted on a client tls.TLSSocket when a new session\nor TLS ticket is available. This may or may not be before the handshake is\ncomplete, depending on the TLS protocol version that was negotiated. The event\nis not emitted on the server, or if a new session was not created, for example,\nwhen the connection was resumed. For some TLS protocol versions the event may be\nemitted multiple times, in which case all the sessions can be used for\nresumption.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On the client, the session can be provided to the session option of\ntls.connect() to resume the connection.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See Session Resumption for more information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For TLSv1.2 and below, tls.TLSSocket.getSession() can be called once\nthe handshake is complete. For TLSv1.3, only ticket-based resumption is allowed\nby the protocol, multiple tickets are sent, and the tickets aren't sent until\nafter the handshake completes. So it is necessary to wait for the\n'session' event to get a resumable session. Applications\nshould use the 'session' event instead of getSession() to ensure\nthey will work for all TLS versions. Applications that only expect to\nget or use one session should listen for this event only once:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      tlsSocket.once('session', (session) => {\n  // The session can be used immediately or later.\n  tls.connect({\n    session: session,\n    // Other connect options...\n  });\n});\n
                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -49482,7 +50971,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns an object representing the type, name, and size of parameter of\nan ephemeral key exchange in Perfect Forward Secrecy on a client\nconnection. It returns an empty object when the key exchange is not\nephemeral. As this is only supported on a client socket; null is returned\nif called on a server socket. The supported types are 'DH' and 'ECDH'. The\nname property is available only when type is 'ECDH'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example: { type: 'ECDH', name: 'prime256v1', size: 256 }.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns an object representing the type, name, and size of parameter of\nan ephemeral key exchange in perfect forward secrecy on a client\nconnection. It returns an empty object when the key exchange is not\nephemeral. As this is only supported on a client socket; null is returned\nif called on a server socket. The supported types are 'DH' and 'ECDH'. The\nname property is available only when type is 'ECDH'.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example: { type: 'ECDH', name: 'prime256v1', size: 256 }.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`tlsSocket.getFinished()`", @@ -49538,7 +51027,7 @@ "desc": "

                                                                                                                                                                                                                                                      Returns an object representing the peer's certificate. If the peer does not\nprovide a certificate, an empty object will be returned. If the socket has been\ndestroyed, null will be returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the full certificate chain was requested, each certificate will include an\nissuerCertificate property containing an object representing its issuer's\ncertificate.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Certificate Object", + "textRaw": "Certificate object", "name": "certificate_object", "meta": { "changes": [ @@ -49549,9 +51038,9 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      A certificate object has properties corresponding to the fields of the\ncertificate.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • raw <Buffer> The DER encoded X.509 certificate data.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • subject <Object> The certificate subject, described in terms of\n Country (C:), StateOrProvince (ST), Locality (L), Organization (O),\nOrganizationalUnit (OU), and CommonName (CN). The CommonName is typically\na DNS name with TLS certificates. Example:\n{C: 'UK', ST: 'BC', L: 'Metro', O: 'Node Fans', OU: 'Docs', CN: 'example.com'}.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • issuer <Object> The certificate issuer, described in the same terms as the\n subject.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • valid_from <string> The date-time the certificate is valid from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • valid_to <string> The date-time the certificate is valid to.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • serialNumber <string> The certificate serial number, as a hex string.\n Example: 'B9B0D332A1AA5635'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • fingerprint <string> The SHA-1 digest of the DER encoded certificate. It is\nreturned as a : separated hexadecimal string. Example: '2A:7A:C2:DD:...'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • fingerprint256 <string> The SHA-256 digest of the DER encoded certificate.\n It is returned as a : separated hexadecimal string. Example:\n'2A:7A:C2:DD:...'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • ext_key_usage <Array> (Optional) The extended key usage, a set of OIDs.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • subjectaltname <string> (Optional) A string containing concatenated names\nfor the subject, an alternative to the subject names.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • infoAccess <Array> (Optional) An array describing the AuthorityInfoAccess,\n used with OCSP.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • issuerCertificate <Object> (Optional) The issuer certificate object. For\n self-signed certificates, this may be a circular reference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The certificate may contain information about the public key, depending on\nthe key type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For RSA keys, the following properties may be defined:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • bits <number> The RSA bit size. Example: 1024.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • exponent <string> The RSA exponent, as a string in hexadecimal number\nnotation. Example: '0x010001'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • modulus <string> The RSA modulus, as a hexadecimal string. Example:\n 'B56CE45CB7...'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • pubkey <Buffer> The public key.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For EC keys, the following properties may be defined:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • pubkey <Buffer> The public key.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • bits <number> The key size in bits. Example: 256.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • asn1Curve <string> (Optional) The ASN.1 name of the OID of the elliptic\ncurve. Well-known curves are identified by an OID. While it is unusual, it is\npossible that the curve is identified by its mathematical properties, in which\ncase it will not have an OID. Example: 'prime256v1'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nistCurve <string> (Optional) The NIST name for the elliptic curve, if it\nhas one (not all well-known curves have been assigned names by NIST). Example:\n'P-256'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example certificate:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      { subject:\n   { OU: [ 'Domain Control Validated', 'PositiveSSL Wildcard' ],\n     CN: '*.nodejs.org' },\n  issuer:\n   { C: 'GB',\n     ST: 'Greater Manchester',\n     L: 'Salford',\n     O: 'COMODO CA Limited',\n     CN: 'COMODO RSA Domain Validation Secure Server CA' },\n  subjectaltname: 'DNS:*.nodejs.org, DNS:nodejs.org',\n  infoAccess:\n   { 'CA Issuers - URI':\n      [ 'http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt' ],\n     'OCSP - URI': [ 'http://ocsp.comodoca.com' ] },\n  modulus: 'B56CE45CB740B09A13F64AC543B712FF9EE8E4C284B542A1708A27E82A8D151CA178153E12E6DDA15BF70FFD96CB8A88618641BDFCCA03527E665B70D779C8A349A6F88FD4EF6557180BD4C98192872BCFE3AF56E863C09DDD8BC1EC58DF9D94F914F0369102B2870BECFA1348A0838C9C49BD1C20124B442477572347047506B1FCD658A80D0C44BCC16BC5C5496CFE6E4A8428EF654CD3D8972BF6E5BFAD59C93006830B5EB1056BBB38B53D1464FA6E02BFDF2FF66CD949486F0775EC43034EC2602AEFBF1703AD221DAA2A88353C3B6A688EFE8387811F645CEED7B3FE46E1F8B9F59FAD028F349B9BC14211D5830994D055EEA3D547911E07A0ADDEB8A82B9188E58720D95CD478EEC9AF1F17BE8141BE80906F1A339445A7EB5B285F68039B0F294598A7D1C0005FC22B5271B0752F58CCDEF8C8FD856FB7AE21C80B8A2CE983AE94046E53EDE4CB89F42502D31B5360771C01C80155918637490550E3F555E2EE75CC8C636DDE3633CFEDD62E91BF0F7688273694EEEBA20C2FC9F14A2A435517BC1D7373922463409AB603295CEB0BB53787A334C9CA3CA8B30005C5A62FC0715083462E00719A8FA3ED0A9828C3871360A73F8B04A4FC1E71302844E9BB9940B77E745C9D91F226D71AFCAD4B113AAF68D92B24DDB4A2136B55A1CD1ADF39605B63CB639038ED0F4C987689866743A68769CC55847E4A06D6E2E3F1',\n  exponent: '0x10001',\n  pubkey: <Buffer ... >,\n  valid_from: 'Aug 14 00:00:00 2017 GMT',\n  valid_to: 'Nov 20 23:59:59 2019 GMT',\n  fingerprint: '01:02:59:D9:C3:D2:0D:08:F7:82:4E:44:A4:B4:53:C5:E2:3A:87:4D',\n  fingerprint256: '69:AE:1A:6A:D4:3D:C6:C1:1B:EA:C6:23:DE:BA:2A:14:62:62:93:5C:7A:EA:06:41:9B:0B:BC:87:CE:48:4E:02',\n  ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ],\n  serialNumber: '66593D57F20CBC573E433381B5FEC280',\n  raw: <Buffer ... > }\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A certificate object has properties corresponding to the fields of the\ncertificate.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • raw <Buffer> The DER encoded X.509 certificate data.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • subject <Object> The certificate subject, described in terms of\n Country (C:), StateOrProvince (ST), Locality (L), Organization (O),\nOrganizationalUnit (OU), and CommonName (CN). The CommonName is typically\na DNS name with TLS certificates. Example:\n{C: 'UK', ST: 'BC', L: 'Metro', O: 'Node Fans', OU: 'Docs', CN: 'example.com'}.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • issuer <Object> The certificate issuer, described in the same terms as the\n subject.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • valid_from <string> The date-time the certificate is valid from.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • valid_to <string> The date-time the certificate is valid to.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • serialNumber <string> The certificate serial number, as a hex string.\n Example: 'B9B0D332A1AA5635'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • fingerprint <string> The SHA-1 digest of the DER encoded certificate. It is\nreturned as a : separated hexadecimal string. Example: '2A:7A:C2:DD:...'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • fingerprint256 <string> The SHA-256 digest of the DER encoded certificate.\n It is returned as a : separated hexadecimal string. Example:\n'2A:7A:C2:DD:...'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • ext_key_usage <Array> (Optional) The extended key usage, a set of OIDs.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • subjectaltname <string> (Optional) A string containing concatenated names\nfor the subject, an alternative to the subject names.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • infoAccess <Array> (Optional) An array describing the AuthorityInfoAccess,\n used with OCSP.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • issuerCertificate <Object> (Optional) The issuer certificate object. For\n self-signed certificates, this may be a circular reference.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The certificate may contain information about the public key, depending on\nthe key type.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For RSA keys, the following properties may be defined:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • bits <number> The RSA bit size. Example: 1024.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • exponent <string> The RSA exponent, as a string in hexadecimal number\nnotation. Example: '0x010001'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • modulus <string> The RSA modulus, as a hexadecimal string. Example:\n 'B56CE45CB7...'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • pubkey <Buffer> The public key.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For EC keys, the following properties may be defined:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • pubkey <Buffer> The public key.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • bits <number> The key size in bits. Example: 256.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • asn1Curve <string> (Optional) The ASN.1 name of the OID of the elliptic\ncurve. Well-known curves are identified by an OID. While it is unusual, it is\npossible that the curve is identified by its mathematical properties, in which\ncase it will not have an OID. Example: 'prime256v1'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • nistCurve <string> (Optional) The NIST name for the elliptic curve, if it\nhas one (not all well-known curves have been assigned names by NIST). Example:\n'P-256'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example certificate:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      { subject:\n   { OU: [ 'Domain Control Validated', 'PositiveSSL Wildcard' ],\n     CN: '*.nodejs.org' },\n  issuer:\n   { C: 'GB',\n     ST: 'Greater Manchester',\n     L: 'Salford',\n     O: 'COMODO CA Limited',\n     CN: 'COMODO RSA Domain Validation Secure Server CA' },\n  subjectaltname: 'DNS:*.nodejs.org, DNS:nodejs.org',\n  infoAccess:\n   { 'CA Issuers - URI':\n      [ 'http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt' ],\n     'OCSP - URI': [ 'http://ocsp.comodoca.com' ] },\n  modulus: 'B56CE45CB740B09A13F64AC543B712FF9EE8E4C284B542A1708A27E82A8D151CA178153E12E6DDA15BF70FFD96CB8A88618641BDFCCA03527E665B70D779C8A349A6F88FD4EF6557180BD4C98192872BCFE3AF56E863C09DDD8BC1EC58DF9D94F914F0369102B2870BECFA1348A0838C9C49BD1C20124B442477572347047506B1FCD658A80D0C44BCC16BC5C5496CFE6E4A8428EF654CD3D8972BF6E5BFAD59C93006830B5EB1056BBB38B53D1464FA6E02BFDF2FF66CD949486F0775EC43034EC2602AEFBF1703AD221DAA2A88353C3B6A688EFE8387811F645CEED7B3FE46E1F8B9F59FAD028F349B9BC14211D5830994D055EEA3D547911E07A0ADDEB8A82B9188E58720D95CD478EEC9AF1F17BE8141BE80906F1A339445A7EB5B285F68039B0F294598A7D1C0005FC22B5271B0752F58CCDEF8C8FD856FB7AE21C80B8A2CE983AE94046E53EDE4CB89F42502D31B5360771C01C80155918637490550E3F555E2EE75CC8C636DDE3633CFEDD62E91BF0F7688273694EEEBA20C2FC9F14A2A435517BC1D7373922463409AB603295CEB0BB53787A334C9CA3CA8B30005C5A62FC0715083462E00719A8FA3ED0A9828C3871360A73F8B04A4FC1E71302844E9BB9940B77E745C9D91F226D71AFCAD4B113AAF68D92B24DDB4A2136B55A1CD1ADF39605B63CB639038ED0F4C987689866743A68769CC55847E4A06D6E2E3F1',\n  exponent: '0x10001',\n  pubkey: <Buffer ... >,\n  valid_from: 'Aug 14 00:00:00 2017 GMT',\n  valid_to: 'Nov 20 23:59:59 2019 GMT',\n  fingerprint: '01:02:59:D9:C3:D2:0D:08:F7:82:4E:44:A4:B4:53:C5:E2:3A:87:4D',\n  fingerprint256: '69:AE:1A:6A:D4:3D:C6:C1:1B:EA:C6:23:DE:BA:2A:14:62:62:93:5C:7A:EA:06:41:9B:0B:BC:87:CE:48:4E:02',\n  ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ],\n  serialNumber: '66593D57F20CBC573E433381B5FEC280',\n  raw: <Buffer ... > }\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Certificate Object" + "displayName": "Certificate object" } ] }, @@ -49997,7 +51486,13 @@ "added": [ "v0.8.4" ], - "changes": [] + "changes": [ + { + "version": "v12.22.9", + "pr-url": "https://github.com/nodejs-private/node-private/pull/300", + "description": "Support for `uniformResourceIdentifier` subject alternative names has been disabled in response to CVE-2021-44531." + } + ] }, "signatures": [ { @@ -50022,7 +51517,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Verifies the certificate cert is issued to hostname.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns <Error> object, populating it with reason, host, and cert on\nfailure. On success, returns <undefined>.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function can be overwritten by providing alternative function as part of\nthe options.checkServerIdentity option passed to tls.connect(). The\noverwriting function can call tls.checkServerIdentity() of course, to augment\nthe checks done with additional verification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is only called if the certificate passed all other checks, such as\nbeing issued by trusted CA (options.ca).

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Verifies the certificate cert is issued to hostname.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Returns <Error> object, populating it with reason, host, and cert on\nfailure. On success, returns <undefined>.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function can be overwritten by providing alternative function as part of\nthe options.checkServerIdentity option passed to tls.connect(). The\noverwriting function can call tls.checkServerIdentity() of course, to augment\nthe checks done with additional verification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is only called if the certificate passed all other checks, such as\nbeing issued by trusted CA (options.ca).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Earlier versions of Node.js incorrectly accepted certificates for a given\nhostname if a matching uniformResourceIdentifier subject alternative name\nwas present (see CVE-2021-44531). Applications that wish to accept\nuniformResourceIdentifier subject alternative names can use a custom\noptions.checkServerIdentity function that implements the desired behavior.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`tls.connect(options[, callback])`", @@ -50211,7 +51706,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The callback function, if specified, will be added as a listener for the\n'secureConnect' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.connect() returns a tls.TLSSocket object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following illustrates a client for the echo server example from\ntls.createServer():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Assumes an echo server that is listening on port 8000.\nconst tls = require('tls');\nconst fs = require('fs');\n\nconst options = {\n  // Necessary only if the server requires client certificate authentication.\n  key: fs.readFileSync('client-key.pem'),\n  cert: fs.readFileSync('client-cert.pem'),\n\n  // Necessary only if the server uses a self-signed certificate.\n  ca: [ fs.readFileSync('server-cert.pem') ],\n\n  // Necessary only if the server's cert isn't for \"localhost\".\n  checkServerIdentity: () => { return null; },\n};\n\nconst socket = tls.connect(8000, options, () => {\n  console.log('client connected',\n              socket.authorized ? 'authorized' : 'unauthorized');\n  process.stdin.pipe(socket);\n  process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', (data) => {\n  console.log(data);\n});\nsocket.on('end', () => {\n  console.log('server ends connection');\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The callback function, if specified, will be added as a listener for the\n'secureConnect' event.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.connect() returns a tls.TLSSocket object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike the https API, tls.connect() does not enable the\nSNI (Server Name Indication) extension by default, which may cause some\nservers to return an incorrect certificate or reject the connection\naltogether. To enable SNI, set the servername option in addition\nto host.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following illustrates a client for the echo server example from\ntls.createServer():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Assumes an echo server that is listening on port 8000.\nconst tls = require('tls');\nconst fs = require('fs');\n\nconst options = {\n  // Necessary only if the server requires client certificate authentication.\n  key: fs.readFileSync('client-key.pem'),\n  cert: fs.readFileSync('client-cert.pem'),\n\n  // Necessary only if the server uses a self-signed certificate.\n  ca: [ fs.readFileSync('server-cert.pem') ],\n\n  // Necessary only if the server's cert isn't for \"localhost\".\n  checkServerIdentity: () => { return null; },\n};\n\nconst socket = tls.connect(8000, options, () => {\n  console.log('client connected',\n              socket.authorized ? 'authorized' : 'unauthorized');\n  process.stdin.pipe(socket);\n  process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', (data) => {\n  console.log(data);\n});\nsocket.on('end', () => {\n  console.log('server ends connection');\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`tls.connect(path[, options][, callback])`", @@ -50407,10 +51902,10 @@ "desc": "PEM formatted CRLs (Certificate Revocation Lists)." }, { - "textRaw": "`dhparam` {string|Buffer} Diffie Hellman parameters, required for [Perfect Forward Secrecy][]. Use `openssl dhparam` to create the parameters. The key length must be greater than or equal to 1024 bits or else an error will be thrown. Although 1024 bits is permissible, use 2048 bits or larger for stronger security. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available.", + "textRaw": "`dhparam` {string|Buffer} Diffie-Hellman parameters, required for [perfect forward secrecy][]. Use `openssl dhparam` to create the parameters. The key length must be greater than or equal to 1024 bits or else an error will be thrown. Although 1024 bits is permissible, use 2048 bits or larger for stronger security. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available.", "name": "dhparam", "type": "string|Buffer", - "desc": "Diffie Hellman parameters, required for [Perfect Forward Secrecy][]. Use `openssl dhparam` to create the parameters. The key length must be greater than or equal to 1024 bits or else an error will be thrown. Although 1024 bits is permissible, use 2048 bits or larger for stronger security. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available." + "desc": "Diffie-Hellman parameters, required for [perfect forward secrecy][]. Use `openssl dhparam` to create the parameters. The key length must be greater than or equal to 1024 bits or else an error will be thrown. Although 1024 bits is permissible, use 2048 bits or larger for stronger security. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available." }, { "textRaw": "`ecdhCurve` {string} A string describing a named curve or a colon separated list of curve NIDs or names, for example `P-521:P-384:P-256`, to use for ECDH key agreement. Set to `auto` to select the curve automatically. Use [`crypto.getCurves()`][] to obtain a list of available curve names. On recent releases, `openssl ecparam -list_curves` will also display the name and description of each available elliptic curve. **Default:** [`tls.DEFAULT_ECDH_CURVE`][].", @@ -50487,13 +51982,139 @@ "name": "sessionIdContext", "type": "string", "desc": "Opaque identifier used by servers to ensure session state is not shared between applications. Unused by clients." + }, + { + "textRaw": "`ticketKeys`: {Buffer} 48-bytes of cryptographically strong pseudo-random data. See [Session Resumption][] for more information.", + "name": "ticketKeys", + "type": "Buffer", + "desc": "48-bytes of cryptographically strong pseudo-random data. See [Session Resumption][] for more information." + }, + { + "textRaw": "`sessionTimeout` {number} The number of seconds after which a TLS session created by the server will no longer be resumable. See [Session Resumption][] for more information. **Default:** `300`.", + "name": "sessionTimeout", + "type": "number", + "default": "`300`", + "desc": "The number of seconds after which a TLS session created by the server will no longer be resumable. See [Session Resumption][] for more information." + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      tls.createServer() sets the default value of the honorCipherOrder option\nto true, other APIs that create secure contexts leave it unset.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.createServer() uses a 128 bit truncated SHA1 hash value generated\nfrom process.argv as the default value of the sessionIdContext option, other\nAPIs that create secure contexts have no default value.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.createSecureContext() method creates a SecureContext object. It is\nusable as an argument to several tls APIs, such as tls.createServer()\nand server.addContext(), but has no public methods.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A key is required for ciphers that use certificates. Either key or\npfx can be used to provide it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the ca option is not given, then Node.js will default to using\nMozilla's publicly trusted list of CAs.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`tls.createSecurePair([context][, isServer][, requestCert][, rejectUnauthorized][, options])`", + "type": "method", + "name": "createSecurePair", + "meta": { + "added": [ + "v0.3.2" + ], + "deprecated": [ + "v0.11.3" + ], + "changes": [ + { + "version": "v5.0.0", + "pr-url": "https://github.com/nodejs/node/pull/2564", + "description": "ALPN options are supported now." + } + ] + }, + "stability": 0, + "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", + "signatures": [ + { + "params": [ + { + "textRaw": "`context` {Object} A secure context object as returned by `tls.createSecureContext()`", + "name": "context", + "type": "Object", + "desc": "A secure context object as returned by `tls.createSecureContext()`" + }, + { + "textRaw": "`isServer` {boolean} `true` to specify that this TLS connection should be opened as a server.", + "name": "isServer", + "type": "boolean", + "desc": "`true` to specify that this TLS connection should be opened as a server." + }, + { + "textRaw": "`requestCert` {boolean} `true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`.", + "name": "requestCert", + "type": "boolean", + "desc": "`true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`." + }, + { + "textRaw": "`rejectUnauthorized` {boolean} If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`.", + "name": "rejectUnauthorized", + "type": "boolean", + "desc": "If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`." + }, + { + "textRaw": "`options`", + "name": "options", + "options": [ + { + "textRaw": "`enableTrace`: See [`tls.createServer()`][]", + "name": "enableTrace", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`secureContext`: A TLS context object from [`tls.createSecureContext()`][]", + "name": "secureContext", + "desc": "A TLS context object from [`tls.createSecureContext()`][]" + }, + { + "textRaw": "`isServer`: If `true` the TLS socket will be instantiated in server-mode. **Default:** `false`.", + "name": "isServer", + "default": "`false`", + "desc": "If `true` the TLS socket will be instantiated in server-mode." + }, + { + "textRaw": "`server` {net.Server} A [`net.Server`][] instance", + "name": "server", + "type": "net.Server", + "desc": "A [`net.Server`][] instance" + }, + { + "textRaw": "`requestCert`: See [`tls.createServer()`][]", + "name": "requestCert", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`rejectUnauthorized`: See [`tls.createServer()`][]", + "name": "rejectUnauthorized", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`ALPNProtocols`: See [`tls.createServer()`][]", + "name": "ALPNProtocols", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`SNICallback`: See [`tls.createServer()`][]", + "name": "SNICallback", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`session` {Buffer} A `Buffer` instance containing a TLS session.", + "name": "session", + "type": "Buffer", + "desc": "A `Buffer` instance containing a TLS session." + }, + { + "textRaw": "`requestOCSP` {boolean} If `true`, specifies that the OCSP status request extension will be added to the client hello and an `'OCSPResponse'` event will be emitted on the socket before establishing a secure communication.", + "name": "requestOCSP", + "type": "boolean", + "desc": "If `true`, specifies that the OCSP status request extension will be added to the client hello and an `'OCSPResponse'` event will be emitted on the socket before establishing a secure communication." } ] } ] } ], - "desc": "

                                                                                                                                                                                                                                                      tls.createServer() sets the default value of the honorCipherOrder option\nto true, other APIs that create secure contexts leave it unset.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.createServer() uses a 128 bit truncated SHA1 hash value generated\nfrom process.argv as the default value of the sessionIdContext option, other\nAPIs that create secure contexts have no default value.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.createSecureContext() method creates a SecureContext object. It is\nusable as an argument to several tls APIs, such as tls.createServer()\nand server.addContext(), but has no public methods.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A key is required for ciphers that make use of certificates. Either key or\npfx can be used to provide it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the ca option is not given, then Node.js will default to using\nMozilla's publicly trusted list of CAs.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Creates a new secure pair object with two streams, one of which reads and writes\nthe encrypted data and the other of which reads and writes the cleartext data.\nGenerally, the encrypted stream is piped to/from an incoming encrypted data\nstream and the cleartext one is used as a replacement for the initial encrypted\nstream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.createSecurePair() returns a tls.SecurePair object with cleartext and\nencrypted stream properties.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using cleartext has the same API as tls.TLSSocket.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.createSecurePair() method is now deprecated in favor of\ntls.TLSSocket(). For example, the code:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      pair = tls.createSecurePair(/* ... */);\npair.encrypted.pipe(socket);\nsocket.pipe(pair.encrypted);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      can be replaced by:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      secureSocket = tls.TLSSocket(socket, options);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      where secureSocket has the same API as pair.cleartext.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`tls.createServer([options][, secureConnectionListener])`", @@ -50587,9 +52208,9 @@ "desc": "The number of seconds after which a TLS session created by the server will no longer be resumable. See [Session Resumption][] for more information." }, { - "textRaw": "`SNICallback(servername, cb)` {Function} A function that will be called if the client supports SNI TLS extension. Two arguments will be passed when called: `servername` and `cb`. `SNICallback` should invoke `cb(null, ctx)`, where `ctx` is a `SecureContext` instance. (`tls.createSecureContext(...)` can be used to get a proper `SecureContext`.) If `SNICallback` wasn't provided the default callback with high-level API will be used (see below).", + "textRaw": "`SNICallback(servername, callback)` {Function} A function that will be called if the client supports SNI TLS extension. Two arguments will be passed when called: `servername` and `callback`. `callback` is an error-first callback that takes two optional arguments: `error` and `ctx`. `ctx`, if provided, is a `SecureContext` instance. [`tls.createSecureContext()`][] can be used to get a proper `SecureContext`. If `callback` is called with a falsy `ctx` argument, the default secure context of the server will be used. If `SNICallback` wasn't provided the default callback with high-level API will be used (see below).", "name": "SNICallback(servername,", - "desc": "cb)` {Function} A function that will be called if the client supports SNI TLS extension. Two arguments will be passed when called: `servername` and `cb`. `SNICallback` should invoke `cb(null, ctx)`, where `ctx` is a `SecureContext` instance. (`tls.createSecureContext(...)` can be used to get a proper `SecureContext`.) If `SNICallback` wasn't provided the default callback with high-level API will be used (see below)." + "desc": "callback)` {Function} A function that will be called if the client supports SNI TLS extension. Two arguments will be passed when called: `servername` and `callback`. `callback` is an error-first callback that takes two optional arguments: `error` and `ctx`. `ctx`, if provided, is a `SecureContext` instance. [`tls.createSecureContext()`][] can be used to get a proper `SecureContext`. If `callback` is called with a falsy `ctx` argument, the default secure context of the server will be used. If `SNICallback` wasn't provided the default callback with high-level API will be used (see below)." }, { "textRaw": "`ticketKeys`: {Buffer} 48-bytes of cryptographically strong pseudo-random data. See [Session Resumption][] for more information.", @@ -50684,7 +52305,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      An immutable array of strings representing the root certificates (in PEM format)\nused for verifying peer certificates. This is the default value of the ca\noption to tls.createSecureContext().

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      An immutable array of strings representing the root certificates (in PEM format)\nfrom the bundled Mozilla CA store as supplied by current Node.js version.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The bundled CA store, as supplied by Node.js, is a snapshot of Mozilla CA store\nthat is fixed at release time. It is identical on all supported platforms.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`tls.DEFAULT_ECDH_CURVE`", @@ -50727,19 +52348,19 @@ "changes": [] }, "default": "`'TLSv1.2'`, unless changed using CLI options. Using `--tls-min-v1.0` sets the default to `'TLSv1'`. Using `--tls-min-v1.1` sets the default to `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to `'TLSv1.3'`. If multiple of the options are provided, the lowest minimum is used", - "desc": "The default value of the `minVersion` option of [`tls.createSecureContext()`][]. It can be assigned any of the supported TLS protocol versions, `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`." + "shortDesc": "The default value of the `minVersion` option of [`tls.createSecureContext()`][]. It can be assigned any of the supported TLS protocol versions, `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`." } ], "type": "module", "displayName": "TLS (SSL)" }, { - "textRaw": "Trace Events", + "textRaw": "Trace events", "name": "trace_events", "introduced_in": "v7.7.0", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      Trace Event provides a mechanism to centralize tracing information generated by\nV8, Node.js core, and userspace code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Tracing can be enabled with the --trace-event-categories command-line flag\nor by using the trace_events module. The --trace-event-categories flag\naccepts a list of comma-separated category names.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The available categories are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • node: An empty placeholder.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.async_hooks: Enables capture of detailed async_hooks trace data.\nThe async_hooks events have a unique asyncId and a special triggerId\ntriggerAsyncId property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.bootstrap: Enables capture of Node.js bootstrap milestones.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.console: Enables capture of console.time() and console.count()\noutput.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.dns.native: Enables capture of trace data for DNS queries.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.environment: Enables capture of Node.js Environment milestones.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.fs.sync: Enables capture of trace data for file system sync methods.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        node.perf: Enables capture of Performance API measurements.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • node.perf.usertiming: Enables capture of only Performance API User Timing\nmeasures and marks.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • node.perf.timerify: Enables capture of only Performance API timerify\nmeasurements.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.promises.rejections: Enables capture of trace data tracking the number\nof unhandled Promise rejections and handled-after-rejections.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.vm.script: Enables capture of trace data for the vm module's\nrunInNewContext(), runInContext(), and runInThisContext() methods.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • v8: The V8 events are GC, compiling, and execution related.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By default the node, node.async_hooks, and v8 categories are enabled.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --trace-event-categories v8,node,node.async_hooks server.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Prior versions of Node.js required the use of the --trace-events-enabled\nflag to enable trace events. This requirement has been removed. However, the\n--trace-events-enabled flag may still be used and will enable the\nnode, node.async_hooks, and v8 trace event categories by default.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --trace-events-enabled\n\n// is equivalent to\n\nnode --trace-event-categories v8,node,node.async_hooks\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, trace events may be enabled using the trace_events module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const trace_events = require('trace_events');\nconst tracing = trace_events.createTracing({ categories: ['node.perf'] });\ntracing.enable();  // Enable trace event capture for the 'node.perf' category\n\n// do work\n\ntracing.disable();  // Disable trace event capture for the 'node.perf' category\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Running Node.js with tracing enabled will produce log files that can be opened\nin the chrome://tracing\ntab of Chrome.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The logging file is by default called node_trace.${rotation}.log, where\n${rotation} is an incrementing log-rotation id. The filepath pattern can\nbe specified with --trace-event-file-pattern that accepts a template\nstring that supports ${rotation} and ${pid}:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Starting with Node.js 10.0.0, the tracing system uses the same time source\nas the one used by process.hrtime()\nhowever the trace-event timestamps are expressed in microseconds,\nunlike process.hrtime() which returns nanoseconds.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The features from this module are not available in Worker threads.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/trace_events.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The trace_events module provides a mechanism to centralize tracing information\ngenerated by V8, Node.js core, and userspace code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Tracing can be enabled with the --trace-event-categories command-line flag\nor by using the trace_events module. The --trace-event-categories flag\naccepts a list of comma-separated category names.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The available categories are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • node: An empty placeholder.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.async_hooks: Enables capture of detailed async_hooks trace data.\nThe async_hooks events have a unique asyncId and a special triggerId\ntriggerAsyncId property.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.bootstrap: Enables capture of Node.js bootstrap milestones.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.console: Enables capture of console.time() and console.count()\noutput.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.dns.native: Enables capture of trace data for DNS queries.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.environment: Enables capture of Node.js Environment milestones.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.fs.sync: Enables capture of trace data for file system sync methods.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.perf: Enables capture of Performance API measurements.\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • node.perf.usertiming: Enables capture of only Performance API User Timing\nmeasures and marks.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • node.perf.timerify: Enables capture of only Performance API timerify\nmeasurements.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.promises.rejections: Enables capture of trace data tracking the number\nof unhandled Promise rejections and handled-after-rejections.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • node.vm.script: Enables capture of trace data for the vm module's\nrunInNewContext(), runInContext(), and runInThisContext() methods.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • v8: The V8 events are GC, compiling, and execution related.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By default the node, node.async_hooks, and v8 categories are enabled.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --trace-event-categories v8,node,node.async_hooks server.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Prior versions of Node.js required the use of the --trace-events-enabled\nflag to enable trace events. This requirement has been removed. However, the\n--trace-events-enabled flag may still be used and will enable the\nnode, node.async_hooks, and v8 trace event categories by default.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --trace-events-enabled\n\n# is equivalent to\n\nnode --trace-event-categories v8,node,node.async_hooks\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Alternatively, trace events may be enabled using the trace_events module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const trace_events = require('trace_events');\nconst tracing = trace_events.createTracing({ categories: ['node.perf'] });\ntracing.enable();  // Enable trace event capture for the 'node.perf' category\n\n// do work\n\ntracing.disable();  // Disable trace event capture for the 'node.perf' category\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Running Node.js with tracing enabled will produce log files that can be opened\nin the chrome://tracing\ntab of Chrome.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The logging file is by default called node_trace.${rotation}.log, where\n${rotation} is an incrementing log-rotation id. The filepath pattern can\nbe specified with --trace-event-file-pattern that accepts a template\nstring that supports ${rotation} and ${pid}:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tracing system uses the same time source\nas the one used by process.hrtime().\nHowever the trace-event timestamps are expressed in microseconds,\nunlike process.hrtime() which returns nanoseconds.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The features from this module are not available in Worker threads.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "The `trace_events` module", @@ -50893,7 +52514,7 @@ } ], "type": "module", - "displayName": "Trace Events" + "displayName": "Trace events" }, { "textRaw": "TTY", @@ -50901,7 +52522,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The tty module provides the tty.ReadStream and tty.WriteStream classes.\nIn most cases, it will not be necessary or possible to use this module directly.\nHowever, it can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tty = require('tty');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When Node.js detects that it is being run with a text terminal (\"TTY\")\nattached, process.stdin will, by default, be initialized as an instance of\ntty.ReadStream and both process.stdout and process.stderr will, by\ndefault be instances of tty.WriteStream. The preferred method of determining\nwhether Node.js is being run within a TTY context is to check that the value of\nthe process.stdout.isTTY property is true:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node -p -e \"Boolean(process.stdout.isTTY)\"\ntrue\n$ node -p -e \"Boolean(process.stdout.isTTY)\" | cat\nfalse\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In most cases, there should be little to no reason for an application to\nmanually create instances of the tty.ReadStream and tty.WriteStream\nclasses.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/tty.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tty module provides the tty.ReadStream and tty.WriteStream classes.\nIn most cases, it will not be necessary or possible to use this module directly.\nHowever, it can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const tty = require('tty');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When Node.js detects that it is being run with a text terminal (\"TTY\")\nattached, process.stdin will, by default, be initialized as an instance of\ntty.ReadStream and both process.stdout and process.stderr will, by\ndefault be instances of tty.WriteStream. The preferred method of determining\nwhether Node.js is being run within a TTY context is to check that the value of\nthe process.stdout.isTTY property is true:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node -p -e \"Boolean(process.stdout.isTTY)\"\ntrue\n$ node -p -e \"Boolean(process.stdout.isTTY)\" | cat\nfalse\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In most cases, there should be little to no reason for an application to\nmanually create instances of the tty.ReadStream and tty.WriteStream\nclasses.

                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `tty.ReadStream`", @@ -51346,12 +52967,12 @@ "displayName": "TTY" }, { - "textRaw": "UDP/Datagram Sockets", + "textRaw": "UDP/datagram sockets", "name": "dgram", "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The dgram module provides an implementation of UDP Datagram sockets.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dgram = require('dgram');\nconst server = dgram.createSocket('udp4');\n\nserver.on('error', (err) => {\n  console.log(`server error:\\n${err.stack}`);\n  server.close();\n});\n\nserver.on('message', (msg, rinfo) => {\n  console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);\n});\n\nserver.on('listening', () => {\n  const address = server.address();\n  console.log(`server listening ${address.address}:${address.port}`);\n});\n\nserver.bind(41234);\n// Prints: server listening 0.0.0.0:41234\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/dgram.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dgram module provides an implementation of UDP datagram sockets.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dgram = require('dgram');\nconst server = dgram.createSocket('udp4');\n\nserver.on('error', (err) => {\n  console.log(`server error:\\n${err.stack}`);\n  server.close();\n});\n\nserver.on('message', (msg, rinfo) => {\n  console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);\n});\n\nserver.on('listening', () => {\n  const address = server.address();\n  console.log(`server listening ${address.address}:${address.port}`);\n});\n\nserver.bind(41234);\n// Prints: server listening 0.0.0.0:41234\n
                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `dgram.Socket`", @@ -51434,7 +53055,7 @@ "changes": [] }, "params": [], - "desc": "

                                                                                                                                                                                                                                                      The 'message' event is emitted when a new datagram is available on a socket.\nThe event handler function is passed two arguments: msg and rinfo.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • msg <Buffer> The message.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        rinfo <Object> Remote address information.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • address <string> The sender address.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • family <string> The address family ('IPv4' or 'IPv6').
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • port <number> The sender port.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • size <number> The message size.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The 'message' event is emitted when a new datagram is available on a socket.\nThe event handler function is passed two arguments: msg and rinfo.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      If the source address of the incoming packet is an IPv6 link-local\naddress, the interface name is added to the address. For\nexample, a packet received on the en0 interface might have the\naddress field set to 'fe80::2618:1234:ab11:3b9c%en0', where '%en0'\nis the interface name as a zone ID suffix.

                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -51464,7 +53085,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Tells the kernel to join a multicast group at the given multicastAddress and\nmulticastInterface using the IP_ADD_MEMBERSHIP socket option. If the\nmulticastInterface argument is not specified, the operating system will choose\none interface and will add membership to it. To add membership to every\navailable interface, call addMembership multiple times, once per interface.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When sharing a UDP socket across multiple cluster workers, the\nsocket.addMembership() function must be called only once or an\nEADDRINUSE error will occur:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cluster = require('cluster');\nconst dgram = require('dgram');\nif (cluster.isMaster) {\n  cluster.fork(); // Works ok.\n  cluster.fork(); // Fails with EADDRINUSE.\n} else {\n  const s = dgram.createSocket('udp4');\n  s.bind(1234, () => {\n    s.addMembership('224.0.0.114');\n  });\n}\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Tells the kernel to join a multicast group at the given multicastAddress and\nmulticastInterface using the IP_ADD_MEMBERSHIP socket option. If the\nmulticastInterface argument is not specified, the operating system will choose\none interface and will add membership to it. To add membership to every\navailable interface, call addMembership multiple times, once per interface.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When called on an unbound socket, this method will implicitly bind to a random\nport, listening on all interfaces.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When sharing a UDP socket across multiple cluster workers, the\nsocket.addMembership() function must be called only once or an\nEADDRINUSE error will occur:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cluster = require('cluster');\nconst dgram = require('dgram');\nif (cluster.isMaster) {\n  cluster.fork(); // Works ok.\n  cluster.fork(); // Fails with EADDRINUSE.\n} else {\n  const s = dgram.createSocket('udp4');\n  s.bind(1234, () => {\n    s.addMembership('224.0.0.114');\n  });\n}\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.addSourceSpecificMembership(sourceAddress, groupAddress[, multicastInterface])`", @@ -51497,7 +53118,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Tells the kernel to join a source-specific multicast channel at the given\nsourceAddress and groupAddress, using the multicastInterface with the\nIP_ADD_SOURCE_MEMBERSHIP socket option. If the multicastInterface argument\nis not specified, the operating system will choose one interface and will add\nmembership to it. To add membership to every available interface, call\nsocket.addSourceSpecificMembership() multiple times, once per interface.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Tells the kernel to join a source-specific multicast channel at the given\nsourceAddress and groupAddress, using the multicastInterface with the\nIP_ADD_SOURCE_MEMBERSHIP socket option. If the multicastInterface argument\nis not specified, the operating system will choose one interface and will add\nmembership to it. To add membership to every available interface, call\nsocket.addSourceSpecificMembership() multiple times, once per interface.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When called on an unbound socket, this method will implicitly bind to a random\nport, listening on all interfaces.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.address()`", @@ -51519,7 +53140,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns an object containing the address information for a socket.\nFor UDP sockets, this object will contain address, family and port\nproperties.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns an object containing the address information for a socket.\nFor UDP sockets, this object will contain address, family and port\nproperties.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws EBADF if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.bind([port][, address][, callback])`", @@ -51684,7 +53305,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      A synchronous function that disassociates a connected dgram.Socket from\nits remote address. Trying to call disconnect() on an already disconnected\nsocket will result in an ERR_SOCKET_DGRAM_NOT_CONNECTED exception.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      A synchronous function that disassociates a connected dgram.Socket from\nits remote address. Trying to call disconnect() on an unbound or already\ndisconnected socket will result in an ERR_SOCKET_DGRAM_NOT_CONNECTED\nexception.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.dropMembership(multicastAddress[, multicastInterface])`", @@ -51767,7 +53388,8 @@ }, "params": [] } - ] + ], + "desc": "

                                                                                                                                                                                                                                                      This method throws ERR_SOCKET_BUFFER_SIZE if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.getSendBufferSize()`", @@ -51789,7 +53411,8 @@ }, "params": [] } - ] + ], + "desc": "

                                                                                                                                                                                                                                                      This method throws ERR_SOCKET_BUFFER_SIZE if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.ref()`", @@ -51833,7 +53456,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns an object containing the address, family, and port of the remote\nendpoint. It throws an ERR_SOCKET_DGRAM_NOT_CONNECTED exception if the\nsocket is not connected.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns an object containing the address, family, and port of the remote\nendpoint. This method throws an ERR_SOCKET_DGRAM_NOT_CONNECTED exception\nif the socket is not connected.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.send(msg[, offset, length][, port][, address][, callback])`", @@ -51845,6 +53468,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/22413", + "description": "The `msg` parameter can now be any `TypedArray` or `DataView`." + }, + { "version": "v8.0.0", "pr-url": "https://github.com/nodejs/node/pull/11985", "description": "The `msg` parameter can be an `Uint8Array` now." @@ -51875,9 +53503,9 @@ { "params": [ { - "textRaw": "`msg` {Buffer|Uint8Array|string|Array} Message to be sent.", + "textRaw": "`msg` {Buffer|TypedArray|DataView|string|Array} Message to be sent.", "name": "msg", - "type": "Buffer|Uint8Array|string|Array", + "type": "Buffer|TypedArray|DataView|string|Array", "desc": "Message to be sent." }, { @@ -51913,12 +53541,12 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Broadcasts a datagram on the socket.\nFor connectionless sockets, the destination port and address must be\nspecified. Connected sockets, on the other hand, will use their associated\nremote endpoint, so the port and address arguments must not be set.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The msg argument contains the message to be sent.\nDepending on its type, different behavior can apply. If msg is a Buffer\nor Uint8Array,\nthe offset and length specify the offset within the Buffer where the\nmessage begins and the number of bytes in the message, respectively.\nIf msg is a String, then it is automatically converted to a Buffer\nwith 'utf8' encoding. With messages that\ncontain multi-byte characters, offset and length will be calculated with\nrespect to byte length and not the character position.\nIf msg is an array, offset and length must not be specified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The address argument is a string. If the value of address is a host name,\nDNS will be used to resolve the address of the host. If address is not\nprovided or otherwise falsy, '127.0.0.1' (for udp4 sockets) or '::1'\n(for udp6 sockets) will be used by default.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the socket has not been previously bound with a call to bind, the socket\nis assigned a random port number and is bound to the \"all interfaces\" address\n('0.0.0.0' for udp4 sockets, '::0' for udp6 sockets.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An optional callback function may be specified to as a way of reporting\nDNS errors or for determining when it is safe to reuse the buf object.\nDNS lookups delay the time to send for at least one tick of the\nNode.js event loop.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The only way to know for sure that the datagram has been sent is by using a\ncallback. If an error occurs and a callback is given, the error will be\npassed as the first argument to the callback. If a callback is not given,\nthe error is emitted as an 'error' event on the socket object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Offset and length are optional but both must be set if either are used.\nThey are supported only when the first argument is a Buffer or Uint8Array.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example of sending a UDP packet to a port on localhost;

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dgram = require('dgram');\nconst message = Buffer.from('Some bytes');\nconst client = dgram.createSocket('udp4');\nclient.send(message, 41234, 'localhost', (err) => {\n  client.close();\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example of sending a UDP packet composed of multiple buffers to a port on\n127.0.0.1;

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dgram = require('dgram');\nconst buf1 = Buffer.from('Some ');\nconst buf2 = Buffer.from('bytes');\nconst client = dgram.createSocket('udp4');\nclient.send([buf1, buf2], 41234, (err) => {\n  client.close();\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Sending multiple buffers might be faster or slower depending on the\napplication and operating system. Run benchmarks to\ndetermine the optimal strategy on a case-by-case basis. Generally speaking,\nhowever, sending multiple buffers is faster.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example of sending a UDP packet using a socket connected to a port on\nlocalhost:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dgram = require('dgram');\nconst message = Buffer.from('Some bytes');\nconst client = dgram.createSocket('udp4');\nclient.connect(41234, 'localhost', (err) => {\n  client.send(message, (err) => {\n    client.close();\n  });\n});\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Broadcasts a datagram on the socket.\nFor connectionless sockets, the destination port and address must be\nspecified. Connected sockets, on the other hand, will use their associated\nremote endpoint, so the port and address arguments must not be set.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The msg argument contains the message to be sent.\nDepending on its type, different behavior can apply. If msg is a Buffer,\nany TypedArray or a DataView,\nthe offset and length specify the offset within the Buffer where the\nmessage begins and the number of bytes in the message, respectively.\nIf msg is a String, then it is automatically converted to a Buffer\nwith 'utf8' encoding. With messages that\ncontain multi-byte characters, offset and length will be calculated with\nrespect to byte length and not the character position.\nIf msg is an array, offset and length must not be specified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The address argument is a string. If the value of address is a host name,\nDNS will be used to resolve the address of the host. If address is not\nprovided or otherwise falsy, '127.0.0.1' (for udp4 sockets) or '::1'\n(for udp6 sockets) will be used by default.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the socket has not been previously bound with a call to bind, the socket\nis assigned a random port number and is bound to the \"all interfaces\" address\n('0.0.0.0' for udp4 sockets, '::0' for udp6 sockets.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An optional callback function may be specified to as a way of reporting\nDNS errors or for determining when it is safe to reuse the buf object.\nDNS lookups delay the time to send for at least one tick of the\nNode.js event loop.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The only way to know for sure that the datagram has been sent is by using a\ncallback. If an error occurs and a callback is given, the error will be\npassed as the first argument to the callback. If a callback is not given,\nthe error is emitted as an 'error' event on the socket object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Offset and length are optional but both must be set if either are used.\nThey are supported only when the first argument is a Buffer, a TypedArray,\nor a DataView.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws ERR_SOCKET_BAD_PORT if called on an unbound socket.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example of sending a UDP packet to a port on localhost;

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dgram = require('dgram');\nconst message = Buffer.from('Some bytes');\nconst client = dgram.createSocket('udp4');\nclient.send(message, 41234, 'localhost', (err) => {\n  client.close();\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example of sending a UDP packet composed of multiple buffers to a port on\n127.0.0.1;

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dgram = require('dgram');\nconst buf1 = Buffer.from('Some ');\nconst buf2 = Buffer.from('bytes');\nconst client = dgram.createSocket('udp4');\nclient.send([buf1, buf2], 41234, (err) => {\n  client.close();\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Sending multiple buffers might be faster or slower depending on the\napplication and operating system. Run benchmarks to\ndetermine the optimal strategy on a case-by-case basis. Generally speaking,\nhowever, sending multiple buffers is faster.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example of sending a UDP packet using a socket connected to a port on\nlocalhost:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dgram = require('dgram');\nconst message = Buffer.from('Some bytes');\nconst client = dgram.createSocket('udp4');\nclient.connect(41234, 'localhost', (err) => {\n  client.send(message, (err) => {\n    client.close();\n  });\n});\n
                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Note about UDP datagram size", "name": "note_about_udp_datagram_size", - "desc": "

                                                                                                                                                                                                                                                      The maximum size of an IPv4/v6 datagram depends on the MTU\n(Maximum Transmission Unit) and on the Payload Length field size.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        The Payload Length field is 16 bits wide, which means that a normal\npayload exceed 64K octets including the internet header and data\n(65,507 bytes = 65,535 − 8 bytes UDP header − 20 bytes IP header);\nthis is generally true for loopback interfaces, but such long datagram\nmessages are impractical for most hosts and networks.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        The MTU is the largest size a given link layer technology can support for\ndatagram messages. For any link, IPv4 mandates a minimum MTU of 68\noctets, while the recommended MTU for IPv4 is 576 (typically recommended\nas the MTU for dial-up type applications), whether they arrive whole or in\nfragments.

                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        For IPv6, the minimum MTU is 1280 octets, however, the mandatory minimum\nfragment reassembly buffer size is 1500 octets. The value of 68 octets is\nvery small, since most current link layer technologies, like Ethernet, have a\nminimum MTU of 1500.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is impossible to know in advance the MTU of each link through which\na packet might travel. Sending a datagram greater than the receiver MTU will\nnot work because the packet will get silently dropped without informing the\nsource that the data did not reach its intended recipient.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The maximum size of an IPv4/v6 datagram depends on the MTU\n(Maximum Transmission Unit) and on the Payload Length field size.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        The Payload Length field is 16 bits wide, which means that a normal\npayload cannot exceed 64K octets including the internet header and data\n(65,507 bytes = 65,535 − 8 bytes UDP header − 20 bytes IP header);\nthis is generally true for loopback interfaces, but such long datagram\nmessages are impractical for most hosts and networks.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        The MTU is the largest size a given link layer technology can support for\ndatagram messages. For any link, IPv4 mandates a minimum MTU of 68\noctets, while the recommended MTU for IPv4 is 576 (typically recommended\nas the MTU for dial-up type applications), whether they arrive whole or in\nfragments.

                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                        For IPv6, the minimum MTU is 1280 octets. However, the mandatory minimum\nfragment reassembly buffer size is 1500 octets. The value of 68 octets is\nvery small, since most current link layer technologies, like Ethernet, have a\nminimum MTU of 1500.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is impossible to know in advance the MTU of each link through which\na packet might travel. Sending a datagram greater than the receiver MTU will\nnot work because the packet will get silently dropped without informing the\nsource that the data did not reach its intended recipient.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Note about UDP datagram size" } @@ -51945,7 +53573,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets or clears the SO_BROADCAST socket option. When set to true, UDP\npackets may be sent to a local interface's broadcast address.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets or clears the SO_BROADCAST socket option. When set to true, UDP\npackets may be sent to a local interface's broadcast address.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws EBADF if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.setMulticastInterface(multicastInterface)`", @@ -51968,14 +53596,14 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      All references to scope in this section are referring to\nIPv6 Zone Indices, which are defined by RFC 4007. In string form, an IP\nwith a scope index is written as 'IP%scope' where scope is an interface name\nor interface number.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Sets the default outgoing multicast interface of the socket to a chosen\ninterface or back to system interface selection. The multicastInterface must\nbe a valid string representation of an IP from the socket's family.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For IPv4 sockets, this should be the IP configured for the desired physical\ninterface. All packets sent to multicast on the socket will be sent on the\ninterface determined by the most recent successful use of this call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For IPv6 sockets, multicastInterface should include a scope to indicate the\ninterface as in the examples that follow. In IPv6, individual send calls can\nalso use explicit scope in addresses, so only packets sent to a multicast\naddress without specifying an explicit scope are affected by the most recent\nsuccessful use of this call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Examples: IPv6 Outgoing Multicast Interface

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On most systems, where scope format uses the interface name:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const socket = dgram.createSocket('udp6');\n\nsocket.bind(1234, () => {\n  socket.setMulticastInterface('::%eth1');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, where scope format uses an interface number:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const socket = dgram.createSocket('udp6');\n\nsocket.bind(1234, () => {\n  socket.setMulticastInterface('::%2');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: IPv4 Outgoing Multicast Interface

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All systems use an IP of the host on the desired physical interface:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const socket = dgram.createSocket('udp4');\n\nsocket.bind(1234, () => {\n  socket.setMulticastInterface('10.0.0.2');\n});\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      All references to scope in this section are referring to\nIPv6 Zone Indices, which are defined by RFC 4007. In string form, an IP\nwith a scope index is written as 'IP%scope' where scope is an interface name\nor interface number.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Sets the default outgoing multicast interface of the socket to a chosen\ninterface or back to system interface selection. The multicastInterface must\nbe a valid string representation of an IP from the socket's family.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For IPv4 sockets, this should be the IP configured for the desired physical\ninterface. All packets sent to multicast on the socket will be sent on the\ninterface determined by the most recent successful use of this call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For IPv6 sockets, multicastInterface should include a scope to indicate the\ninterface as in the examples that follow. In IPv6, individual send calls can\nalso use explicit scope in addresses, so only packets sent to a multicast\naddress without specifying an explicit scope are affected by the most recent\nsuccessful use of this call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws EBADF if called on an unbound socket.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: IPv6 outgoing multicast interface

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On most systems, where scope format uses the interface name:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const socket = dgram.createSocket('udp6');\n\nsocket.bind(1234, () => {\n  socket.setMulticastInterface('::%eth1');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On Windows, where scope format uses an interface number:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const socket = dgram.createSocket('udp6');\n\nsocket.bind(1234, () => {\n  socket.setMulticastInterface('::%2');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: IPv4 outgoing multicast interface

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All systems use an IP of the host on the desired physical interface:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const socket = dgram.createSocket('udp4');\n\nsocket.bind(1234, () => {\n  socket.setMulticastInterface('10.0.0.2');\n});\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Call Results", + "textRaw": "Call results", "name": "call_results", "desc": "

                                                                                                                                                                                                                                                      A call on a socket that is not ready to send or no longer open may throw a Not\nrunning Error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If multicastInterface can not be parsed into an IP then an EINVAL\nSystem Error is thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On IPv4, if multicastInterface is a valid address but does not match any\ninterface, or if the address does not match the family then\na System Error such as EADDRNOTAVAIL or EPROTONOSUP is thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      On IPv6, most errors with specifying or omitting scope will result in the socket\ncontinuing to use (or returning to) the system's default interface selection.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A socket's address family's ANY address (IPv4 '0.0.0.0' or IPv6 '::') can be\nused to return control of the sockets default outgoing interface to the system\nfor future multicast packets.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Call Results" + "displayName": "Call results" } ] }, @@ -52000,7 +53628,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets or clears the IP_MULTICAST_LOOP socket option. When set to true,\nmulticast packets will also be received on the local interface.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets or clears the IP_MULTICAST_LOOP socket option. When set to true,\nmulticast packets will also be received on the local interface.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws EBADF if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.setMulticastTTL(ttl)`", @@ -52023,7 +53651,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the IP_MULTICAST_TTL socket option. While TTL generally stands for\n\"Time to Live\", in this context it specifies the number of IP hops that a\npacket is allowed to travel through, specifically for multicast traffic. Each\nrouter or gateway that forwards a packet decrements the TTL. If the TTL is\ndecremented to 0 by a router, it will not be forwarded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ttl argument may be between 0 and 255. The default on most systems is 1.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets the IP_MULTICAST_TTL socket option. While TTL generally stands for\n\"Time to Live\", in this context it specifies the number of IP hops that a\npacket is allowed to travel through, specifically for multicast traffic. Each\nrouter or gateway that forwards a packet decrements the TTL. If the TTL is\ndecremented to 0 by a router, it will not be forwarded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ttl argument may be between 0 and 255. The default on most systems is 1.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws EBADF if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.setRecvBufferSize(size)`", @@ -52046,7 +53674,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the SO_RCVBUF socket option. Sets the maximum socket receive buffer\nin bytes.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets the SO_RCVBUF socket option. Sets the maximum socket receive buffer\nin bytes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws ERR_SOCKET_BUFFER_SIZE if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.setSendBufferSize(size)`", @@ -52069,7 +53697,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the SO_SNDBUF socket option. Sets the maximum socket send buffer\nin bytes.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets the SO_SNDBUF socket option. Sets the maximum socket send buffer\nin bytes.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws ERR_SOCKET_BUFFER_SIZE if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.setTTL(ttl)`", @@ -52092,7 +53720,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the IP_TTL socket option. While TTL generally stands for \"Time to Live\",\nin this context it specifies the number of IP hops that a packet is allowed to\ntravel through. Each router or gateway that forwards a packet decrements the\nTTL. If the TTL is decremented to 0 by a router, it will not be forwarded.\nChanging TTL values is typically done for network probes or when multicasting.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ttl argument may be between between 1 and 255. The default on most systems\nis 64.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets the IP_TTL socket option. While TTL generally stands for \"Time to Live\",\nin this context it specifies the number of IP hops that a packet is allowed to\ntravel through. Each router or gateway that forwards a packet decrements the\nTTL. If the TTL is decremented to 0 by a router, it will not be forwarded.\nChanging TTL values is typically done for network probes or when multicasting.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ttl argument may be between between 1 and 255. The default on most systems\nis 64.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method throws EBADF if called on an unbound socket.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`socket.unref()`", @@ -52265,14 +53893,14 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The url module provides utilities for URL resolution and parsing. It can be\naccessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const url = require('url');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/url.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The url module provides utilities for URL resolution and parsing. It can be\naccessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const url = require('url');\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "URL Strings and URL Objects", + "textRaw": "URL strings and URL objects", "name": "url_strings_and_url_objects", - "desc": "

                                                                                                                                                                                                                                                      A URL string is a structured string containing multiple meaningful components.\nWhen parsed, a URL object is returned containing properties for each of these\ncomponents.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The url module provides two APIs for working with URLs: a legacy API that is\nNode.js specific, and a newer API that implements the same\nWHATWG URL Standard used by web browsers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A comparison between the WHATWG and Legacy APIs is provided below. Above the URL\n'http://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash', properties\nof an object returned by the legacy url.parse() are shown. Below it are\nproperties of a WHATWG URL object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      WHATWG URL's origin property includes protocol and host, but not\nusername or password.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      ┌────────────────────────────────────────────────────────────────────────────────────────────────┐\n│                                              href                                              │\n├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤\n│ protocol │  │        auth         │          host          │           path            │ hash  │\n│          │  │                     ├─────────────────┬──────┼──────────┬────────────────┤       │\n│          │  │                     │    hostname     │ port │ pathname │     search     │       │\n│          │  │                     │                 │      │          ├─┬──────────────┤       │\n│          │  │                     │                 │      │          │ │    query     │       │\n\"  https:   //    user   :   pass   @ sub.example.com : 8080   /p/a/t/h  ?  query=string   #hash \"\n│          │  │          │          │    hostname     │ port │          │                │       │\n│          │  │          │          ├─────────────────┴──────┤          │                │       │\n│ protocol │  │ username │ password │          host          │          │                │       │\n├──────────┴──┼──────────┴──────────┼────────────────────────┤          │                │       │\n│   origin    │                     │         origin         │ pathname │     search     │ hash  │\n├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤\n│                                              href                                              │\n└────────────────────────────────────────────────────────────────────────────────────────────────┘\n(All spaces in the \"\" line should be ignored. They are purely for formatting.)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Parsing the URL string using the WHATWG API:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myURL =\n  new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Parsing the URL string using the Legacy API:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const url = require('url');\nconst myURL =\n  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A URL string is a structured string containing multiple meaningful components.\nWhen parsed, a URL object is returned containing properties for each of these\ncomponents.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The url module provides two APIs for working with URLs: a legacy API that is\nNode.js specific, and a newer API that implements the same\nWHATWG URL Standard used by web browsers.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A comparison between the WHATWG and Legacy APIs is provided below. Above the URL\n'http://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash', properties\nof an object returned by the legacy url.parse() are shown. Below it are\nproperties of a WHATWG URL object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      WHATWG URL's origin property includes protocol and host, but not\nusername or password.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      ┌────────────────────────────────────────────────────────────────────────────────────────────────┐\n│                                              href                                              │\n├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤\n│ protocol │  │        auth         │          host          │           path            │ hash  │\n│          │  │                     ├─────────────────┬──────┼──────────┬────────────────┤       │\n│          │  │                     │    hostname     │ port │ pathname │     search     │       │\n│          │  │                     │                 │      │          ├─┬──────────────┤       │\n│          │  │                     │                 │      │          │ │    query     │       │\n\"  https:   //    user   :   pass   @ sub.example.com : 8080   /p/a/t/h  ?  query=string   #hash \"\n│          │  │          │          │    hostname     │ port │          │                │       │\n│          │  │          │          ├─────────────────┴──────┤          │                │       │\n│ protocol │  │ username │ password │          host          │          │                │       │\n├──────────┴──┼──────────┴──────────┼────────────────────────┤          │                │       │\n│   origin    │                     │         origin         │ pathname │     search     │ hash  │\n├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤\n│                                              href                                              │\n└────────────────────────────────────────────────────────────────────────────────────────────────┘\n(All spaces in the \"\" line should be ignored. They are purely for formatting.)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Parsing the URL string using the WHATWG API:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myURL =\n  new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Parsing the URL string using the Legacy API:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const url = require('url');\nconst myURL =\n  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "URL Strings and URL Objects" + "displayName": "URL strings and URL objects" }, { "textRaw": "The WHATWG URL API", @@ -52319,7 +53947,7 @@ "textRaw": "`href` {string}", "type": "string", "name": "href", - "desc": "

                                                                                                                                                                                                                                                      Gets and sets the serialized URL.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myURL = new URL('https://example.org/foo');\nconsole.log(myURL.href);\n// Prints https://example.org/foo\n\nmyURL.href = 'https://example.com/bar';\nconsole.log(myURL.href);\n// Prints https://example.com/bar\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Getting the value of the href property is equivalent to calling\nurl.toString().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Setting the value of this property to a new value is equivalent to creating a\nnew URL object using new URL(value). Each of the URL\nobject's properties will be modified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the value assigned to the href property is not a valid URL, a TypeError\nwill be thrown.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Gets and sets the serialized URL.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myURL = new URL('https://example.org/foo');\nconsole.log(myURL.href);\n// Prints https://example.org/foo\n\nmyURL.href = 'https://example.com/bar';\nconsole.log(myURL.href);\n// Prints https://example.com/bar\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Getting the value of the href property is equivalent to calling\nurl.toString().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Setting the value of this property to a new value is equivalent to creating a\nnew URL object using new URL(value). Each of the URL\nobject's properties will be modified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the value assigned to the href property is not a valid URL, a TypeError\nwill be thrown.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`origin` {string}", @@ -52352,11 +53980,11 @@ "desc": "

                                                                                                                                                                                                                                                      Gets and sets the protocol portion of the URL.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myURL = new URL('https://example.org');\nconsole.log(myURL.protocol);\n// Prints https:\n\nmyURL.protocol = 'ftp';\nconsole.log(myURL.href);\n// Prints ftp://example.org/\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Invalid URL protocol values assigned to the protocol property are ignored.

                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Special Schemes", + "textRaw": "Special schemes", "name": "special_schemes", "desc": "

                                                                                                                                                                                                                                                      The WHATWG URL Standard considers a handful of URL protocol schemes to be\nspecial in terms of how they are parsed and serialized. When a URL is\nparsed using one of these special protocols, the url.protocol property\nmay be changed to another special protocol but cannot be changed to a\nnon-special protocol, and vice versa.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For instance, changing from http to https works:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const u = new URL('http://example.org');\nu.protocol = 'https';\nconsole.log(u.href);\n// https://example.org\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      However, changing from http to a hypothetical fish protocol does not\nbecause the new protocol is not special.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const u = new URL('http://example.org');\nu.protocol = 'fish';\nconsole.log(u.href);\n// http://example.org\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Likewise, changing from a non-special protocol to a special protocol is also\nnot permitted:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const u = new URL('fish://example.org');\nu.protocol = 'http';\nconsole.log(u.href);\n// fish://example.org\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      According to the WHATWG URL Standard, special protocol schemes are ftp,\nfile, gopher, http, https, ws, and wss.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Special Schemes" + "displayName": "Special schemes" } ] }, @@ -52925,7 +54553,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      This function ensures that path is resolved absolutely, and that the URL\ncontrol characters are correctly encoded when converting into a File URL.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      new URL(__filename);                // Incorrect: throws (POSIX)\nnew URL(__filename);                // Incorrect: C:\\... (Windows)\npathToFileURL(__filename);          // Correct:   file:///... (POSIX)\npathToFileURL(__filename);          // Correct:   file:///C:/... (Windows)\n\nnew URL('/foo#1', 'file:');         // Incorrect: file:///foo#1\npathToFileURL('/foo#1');            // Correct:   file:///foo%231 (POSIX)\n\nnew URL('/some/path%.js', 'file:'); // Incorrect: file:///some/path%\npathToFileURL('/some/path%.js');    // Correct:   file:///some/path%25 (POSIX)\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      This function ensures that path is resolved absolutely, and that the URL\ncontrol characters are correctly encoded when converting into a File URL.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      new URL(__filename);                // Incorrect: throws (POSIX)\nnew URL(__filename);                // Incorrect: C:\\... (Windows)\npathToFileURL(__filename);          // Correct:   file:///... (POSIX)\npathToFileURL(__filename);          // Correct:   file:///C:/... (Windows)\n\nnew URL('/foo#1', 'file:');         // Incorrect: file:///foo#1\npathToFileURL('/foo#1');            // Correct:   file:///foo%231 (POSIX)\n\nnew URL('/some/path%.c', 'file:'); // Incorrect: file:///some/path%.c\npathToFileURL('/some/path%.c');    // Correct:   file:///some/path%25.c (POSIX)\n
                                                                                                                                                                                                                                                      " } ], "type": "module", @@ -52934,8 +54562,12 @@ { "textRaw": "Legacy URL API", "name": "legacy_url_api", - "stability": 0, - "stabilityText": "Deprecated: Use the WHATWG URL API instead.", + "meta": { + "deprecated": [ + "v11.0.0" + ], + "changes": [] + }, "modules": [ { "textRaw": "Legacy `urlObject`", @@ -52949,6 +54581,8 @@ } ] }, + "stability": 0, + "stabilityText": "Deprecated: Use the WHATWG URL API instead.", "desc": "

                                                                                                                                                                                                                                                      The legacy urlObject (require('url').Url) is created and returned by the\nurl.parse() function.

                                                                                                                                                                                                                                                      ", "properties": [ { @@ -53034,10 +54668,12 @@ { "version": "v7.0.0", "pr-url": "https://github.com/nodejs/node/pull/7234", - "description": "URLs with a `file:` scheme will now always use the correct number of slashes regardless of `slashes` option. A false-y `slashes` option with no protocol is now also respected at all times." + "description": "URLs with a `file:` scheme will now always use the correct number of slashes regardless of `slashes` option. A falsy `slashes` option with no protocol is now also respected at all times." } ] }, + "stability": 0, + "stabilityText": "Deprecated: Use the WHATWG URL API instead.", "signatures": [ { "params": [ @@ -53050,7 +54686,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The url.format() method returns a formatted URL string derived from\nurlObject.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      url.format({\n  protocol: 'https',\n  hostname: 'example.com',\n  pathname: '/some/path',\n  query: {\n    page: 1,\n    format: 'json'\n  }\n});\n\n// => 'https://example.com/some/path?page=1&format=json'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If urlObject is not an object or a string, url.format() will throw a\nTypeError.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The formatting process operates as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • A new empty string result is created.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If urlObject.protocol is a string, it is appended as-is to result.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if urlObject.protocol is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • For all string values of urlObject.protocol that do not end with an ASCII\ncolon (:) character, the literal string : will be appended to result.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        If either of the following conditions is true, then the literal string //\nwill be appended to result:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • urlObject.slashes property is true;
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • urlObject.protocol begins with http, https, ftp, gopher, or\nfile;
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the value of the urlObject.auth property is truthy, and either\nurlObject.host or urlObject.hostname are not undefined, the value of\nurlObject.auth will be coerced into a string and appended to result\nfollowed by the literal string @.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        If the urlObject.host property is undefined then:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • If the urlObject.hostname is a string, it is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • Otherwise, if urlObject.hostname is not undefined and is not a string,\nan Error is thrown.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • \n

                                                                                                                                                                                                                                                          If the urlObject.port property value is truthy, and urlObject.hostname\nis not undefined:

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          • The literal string : is appended to result, and
                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                          • The value of urlObject.port is coerced to a string and appended to\nresult.
                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if the urlObject.host property value is truthy, the value of\nurlObject.host is coerced to a string and appended to result.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        If the urlObject.pathname property is a string that is not an empty string:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • If the urlObject.pathname does not start with an ASCII forward slash\n(/), then the literal string '/' is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • The value of urlObject.pathname is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if urlObject.pathname is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the urlObject.search property is undefined and if the urlObject.query\nproperty is an Object, the literal string ? is appended to result\nfollowed by the output of calling the querystring module's stringify()\nmethod passing the value of urlObject.query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        Otherwise, if urlObject.search is a string:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • If the value of urlObject.search does not start with the ASCII question\nmark (?) character, the literal string ? is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • The value of urlObject.search is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if urlObject.search is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        If the urlObject.hash property is a string:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • If the value of urlObject.hash does not start with the ASCII hash (#)\ncharacter, the literal string # is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • The value of urlObject.hash is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if the urlObject.hash property is not undefined and is not a\nstring, an Error is thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • result is returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The url.format() method returns a formatted URL string derived from\nurlObject.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      url.format({\n  protocol: 'https',\n  hostname: 'example.com',\n  pathname: '/some/path',\n  query: {\n    page: 1,\n    format: 'json'\n  }\n});\n\n// => 'https://example.com/some/path?page=1&format=json'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If urlObject is not an object or a string, url.format() will throw a\nTypeError.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The formatting process operates as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • A new empty string result is created.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If urlObject.protocol is a string, it is appended as-is to result.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if urlObject.protocol is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • For all string values of urlObject.protocol that do not end with an ASCII\ncolon (:) character, the literal string : will be appended to result.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If either of the following conditions is true, then the literal string //\nwill be appended to result:\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • urlObject.slashes property is true;
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • urlObject.protocol begins with http, https, ftp, gopher, or\nfile;
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the value of the urlObject.auth property is truthy, and either\nurlObject.host or urlObject.hostname are not undefined, the value of\nurlObject.auth will be coerced into a string and appended to result\nfollowed by the literal string @.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the urlObject.host property is undefined then:\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • If the urlObject.hostname is a string, it is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • Otherwise, if urlObject.hostname is not undefined and is not a string,\nan Error is thrown.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • If the urlObject.port property value is truthy, and urlObject.hostname\nis not undefined:\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          • The literal string : is appended to result, and
                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                          • The value of urlObject.port is coerced to a string and appended to\nresult.
                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if the urlObject.host property value is truthy, the value of\nurlObject.host is coerced to a string and appended to result.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the urlObject.pathname property is a string that is not an empty string:\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • If the urlObject.pathname does not start with an ASCII forward slash\n(/), then the literal string '/' is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • The value of urlObject.pathname is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if urlObject.pathname is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the urlObject.search property is undefined and if the urlObject.query\nproperty is an Object, the literal string ? is appended to result\nfollowed by the output of calling the querystring module's stringify()\nmethod passing the value of urlObject.query.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if urlObject.search is a string:\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • If the value of urlObject.search does not start with the ASCII question\nmark (?) character, the literal string ? is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • The value of urlObject.search is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if urlObject.search is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • If the urlObject.hash property is a string:\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • If the value of urlObject.hash does not start with the ASCII hash (#)\ncharacter, the literal string # is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • The value of urlObject.hash is appended to result.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Otherwise, if the urlObject.hash property is not undefined and is not a\nstring, an Error is thrown.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • result is returned.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`url.parse(urlString[, parseQueryString[, slashesDenoteHost]])`", @@ -53078,6 +54714,8 @@ } ] }, + "stability": 0, + "stabilityText": "Deprecated: Use the WHATWG URL API instead.", "signatures": [ { "params": [ @@ -53104,7 +54742,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The url.parse() method takes a URL string, parses it, and returns a URL\nobject.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError is thrown if urlString is not a string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A URIError is thrown if the auth property is present but cannot be decoded.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The url.parse() method takes a URL string, parses it, and returns a URL\nobject.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A TypeError is thrown if urlString is not a string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A URIError is thrown if the auth property is present but cannot be decoded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use of the legacy url.parse() method is discouraged. Users should\nuse the WHATWG URL API. Because the url.parse() method uses a\nlenient, non-standard algorithm for parsing URL strings, security\nissues can be introduced. Specifically, issues with host name spoofing and\nincorrect handling of usernames and passwords have been identified.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`url.resolve(from, to)`", @@ -53137,6 +54775,8 @@ } ] }, + "stability": 0, + "stabilityText": "Deprecated: Use the WHATWG URL API instead.", "signatures": [ { "params": [ @@ -53162,14 +54802,14 @@ "displayName": "Legacy URL API" }, { - "textRaw": "Percent-Encoding in URLs", + "textRaw": "Percent-encoding in URLs", "name": "percent-encoding_in_urls", "desc": "

                                                                                                                                                                                                                                                      URLs are permitted to only contain a certain range of characters. Any character\nfalling outside of that range must be encoded. How such characters are encoded,\nand which characters to encode depends entirely on where the character is\nlocated within the structure of the URL.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Legacy API", "name": "legacy_api", - "desc": "

                                                                                                                                                                                                                                                      Within the Legacy API, spaces (' ') and the following characters will be\nautomatically escaped in the properties of URL objects:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      < > \" ` \\r \\n \\t { } | \\ ^ '\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, the ASCII space character (' ') is encoded as %20. The ASCII\nforward slash (/) character is encoded as %3C.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Within the Legacy API, spaces (' ') and the following characters will be\nautomatically escaped in the properties of URL objects:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      < > \" ` \\r \\n \\t { } | \\ ^ '\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, the ASCII space character (' ') is encoded as %20. The ASCII\nforward slash (/) character is encoded as %3C.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Legacy API" }, @@ -53182,7 +54822,7 @@ } ], "type": "module", - "displayName": "Percent-Encoding in URLs" + "displayName": "Percent-encoding in URLs" } ], "type": "module", @@ -53194,7 +54834,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The util module supports the needs of Node.js internal APIs. Many of the\nutilities are useful for application and module developers as well. To access\nit:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/util.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The util module supports the needs of Node.js internal APIs. Many of the\nutilities are useful for application and module developers as well. To access\nit:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\n
                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`util.callbackify(original)`", @@ -53224,10 +54864,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Takes an async function (or a function that returns a Promise) and returns a\nfunction following the error-first callback style, i.e. taking\nan (err, value) => ... callback as the last argument. In the callback, the\nfirst argument will be the rejection reason (or null if the Promise\nresolved), and the second argument will be the resolved value.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\n\nasync function fn() {\n  return 'hello world';\n}\nconst callbackFunction = util.callbackify(fn);\n\ncallbackFunction((err, ret) => {\n  if (err) throw err;\n  console.log(ret);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Will print:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      hello world\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback is executed asynchronously, and will have a limited stack trace.\nIf the callback throws, the process will emit an 'uncaughtException'\nevent, and if not handled will exit.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Since null has a special meaning as the first argument to a callback, if a\nwrapped function rejects a Promise with a falsy value as a reason, the value\nis wrapped in an Error with the original value stored in a field named\nreason.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function fn() {\n  return Promise.reject(null);\n}\nconst callbackFunction = util.callbackify(fn);\n\ncallbackFunction((err, ret) => {\n  // When the Promise was rejected with `null` it is wrapped with an Error and\n  // the original value is stored in `reason`.\n  err && err.hasOwnProperty('reason') && err.reason === null;  // true\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Takes an async function (or a function that returns a Promise) and returns a\nfunction following the error-first callback style, i.e. taking\nan (err, value) => ... callback as the last argument. In the callback, the\nfirst argument will be the rejection reason (or null if the Promise\nresolved), and the second argument will be the resolved value.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\n\nasync function fn() {\n  return 'hello world';\n}\nconst callbackFunction = util.callbackify(fn);\n\ncallbackFunction((err, ret) => {\n  if (err) throw err;\n  console.log(ret);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Will print:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      hello world\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The callback is executed asynchronously, and will have a limited stack trace.\nIf the callback throws, the process will emit an 'uncaughtException'\nevent, and if not handled will exit.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Since null has a special meaning as the first argument to a callback, if a\nwrapped function rejects a Promise with a falsy value as a reason, the value\nis wrapped in an Error with the original value stored in a field named\nreason.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function fn() {\n  return Promise.reject(null);\n}\nconst callbackFunction = util.callbackify(fn);\n\ncallbackFunction((err, ret) => {\n  // When the Promise was rejected with `null` it is wrapped with an Error and\n  // the original value is stored in `reason`.\n  err && err.hasOwnProperty('reason') && err.reason === null;  // true\n});\n
                                                                                                                                                                                                                                                      " }, { - "textRaw": "`util.debuglog(section)`", + "textRaw": "`util.debuglog(section[, callback])`", "type": "method", "name": "debuglog", "meta": { @@ -53250,11 +54890,17 @@ "name": "section", "type": "string", "desc": "A string identifying the portion of the application for which the `debuglog` function is being created." + }, + { + "textRaw": "`callback` {Function} A callback invoked the first time the logging function is called with a function argument that is a more optimized logging function.", + "name": "callback", + "type": "Function", + "desc": "A callback invoked the first time the logging function is called with a function argument that is a more optimized logging function." } ] } ], - "desc": "

                                                                                                                                                                                                                                                      The util.debuglog() method is used to create a function that conditionally\nwrites debug messages to stderr based on the existence of the NODE_DEBUG\nenvironment variable. If the section name appears within the value of that\nenvironment variable, then the returned function operates similar to\nconsole.error(). If not, then the returned function is a no-op.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\nconst debuglog = util.debuglog('foo');\n\ndebuglog('hello from foo [%d]', 123);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this program is run with NODE_DEBUG=foo in the environment, then\nit will output something like:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      FOO 3245: hello from foo [123]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      where 3245 is the process id. If it is not run with that\nenvironment variable set, then it will not print anything.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The section supports wildcard also:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\nconst debuglog = util.debuglog('foo-bar');\n\ndebuglog('hi there, it\\'s foo-bar [%d]', 2333);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      if it is run with NODE_DEBUG=foo* in the environment, then it will output\nsomething like:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      FOO-BAR 3257: hi there, it's foo-bar [2333]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Multiple comma-separated section names may be specified in the NODE_DEBUG\nenvironment variable: NODE_DEBUG=fs,net,tls.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The util.debuglog() method is used to create a function that conditionally\nwrites debug messages to stderr based on the existence of the NODE_DEBUG\nenvironment variable. If the section name appears within the value of that\nenvironment variable, then the returned function operates similar to\nconsole.error(). If not, then the returned function is a no-op.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\nconst debuglog = util.debuglog('foo');\n\ndebuglog('hello from foo [%d]', 123);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this program is run with NODE_DEBUG=foo in the environment, then\nit will output something like:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      FOO 3245: hello from foo [123]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      where 3245 is the process id. If it is not run with that\nenvironment variable set, then it will not print anything.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The section supports wildcard also:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\nconst debuglog = util.debuglog('foo-bar');\n\ndebuglog('hi there, it\\'s foo-bar [%d]', 2333);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      if it is run with NODE_DEBUG=foo* in the environment, then it will output\nsomething like:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      FOO-BAR 3257: hi there, it's foo-bar [2333]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Multiple comma-separated section names may be specified in the NODE_DEBUG\nenvironment variable: NODE_DEBUG=fs,net,tls.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional callback argument can be used to replace the logging function\nwith a different function that doesn't have any initialization or\nunnecessary wrapping.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\nlet debuglog = util.debuglog('internals', (debug) => {\n  // Replace with a logging function that optimizes out\n  // testing if the section is enabled\n  debuglog = debug;\n});\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`util.deprecate(fn, msg[, code])`", @@ -53367,7 +55013,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The util.format() method returns a formatted string using the first argument\nas a printf-like format string which can contain zero or more format\nspecifiers. Each specifier is replaced with the converted value from the\ncorresponding argument. Supported specifiers are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • %s: String will be used to convert all values except BigInt, Object\nand -0. BigInt values will be represented with an n and Objects that\nhave no user defined toString function are inspected using util.inspect()\nwith options { depth: 0, colors: false, compact: 3 }.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %d: Number will be used to convert all values except BigInt and\nSymbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %i: parseInt(value, 10) is used for all values except BigInt and\nSymbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %f: parseFloat(value) is used for all values expect Symbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %j: JSON. Replaced with the string '[Circular]' if the argument contains\ncircular references.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %o: Object. A string representation of an object with generic JavaScript\nobject formatting. Similar to util.inspect() with options\n{ showHidden: true, showProxy: true }. This will show the full object\nincluding non-enumerable properties and proxies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %O: Object. A string representation of an object with generic JavaScript\nobject formatting. Similar to util.inspect() without options. This will show\nthe full object not including non-enumerable properties and proxies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %c: CSS. This specifier is currently ignored, and will skip any CSS\npassed in.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %%: single percent sign ('%'). This does not consume an argument.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Returns: <string> The formatted string
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If a specifier does not have a corresponding argument, it is not replaced:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.format('%s:%s', 'foo');\n// Returns: 'foo:%s'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Values that are not part of the format string are formatted using\nutil.inspect() if their type is not string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If there are more arguments passed to the util.format() method than the\nnumber of specifiers, the extra arguments are concatenated to the returned\nstring, separated by spaces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.format('%s:%s', 'foo', 'bar', 'baz');\n// Returns: 'foo:bar baz'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the first argument does not contain a valid format specifier, util.format()\nreturns a string that is the concatenation of all arguments separated by spaces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.format(1, 2, 3);\n// Returns: '1 2 3'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If only one argument is passed to util.format(), it is returned as it is\nwithout any formatting:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.format('%% %s');\n// Returns: '%% %s'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      util.format() is a synchronous method that is intended as a debugging tool.\nSome input values can have a significant performance overhead that can block the\nevent loop. Use this function with care and never in a hot code path.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The util.format() method returns a formatted string using the first argument\nas a printf-like format string which can contain zero or more format\nspecifiers. Each specifier is replaced with the converted value from the\ncorresponding argument. Supported specifiers are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • %s: String will be used to convert all values except BigInt, Object\nand -0. BigInt values will be represented with an n and Objects that\nhave no user defined toString function are inspected using util.inspect()\nwith options { depth: 0, colors: false, compact: 3 }.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %d: Number will be used to convert all values except BigInt and\nSymbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %i: parseInt(value, 10) is used for all values except BigInt and\nSymbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %f: parseFloat(value) is used for all values expect Symbol.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %j: JSON. Replaced with the string '[Circular]' if the argument contains\ncircular references.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %o: Object. A string representation of an object with generic JavaScript\nobject formatting. Similar to util.inspect() with options\n{ showHidden: true, showProxy: true }. This will show the full object\nincluding non-enumerable properties and proxies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %O: Object. A string representation of an object with generic JavaScript\nobject formatting. Similar to util.inspect() without options. This will show\nthe full object not including non-enumerable properties and proxies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %c: CSS. This specifier is ignored and will skip any CSS passed in.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • %%: single percent sign ('%'). This does not consume an argument.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Returns: <string> The formatted string
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If a specifier does not have a corresponding argument, it is not replaced:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.format('%s:%s', 'foo');\n// Returns: 'foo:%s'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Values that are not part of the format string are formatted using\nutil.inspect() if their type is not string.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If there are more arguments passed to the util.format() method than the\nnumber of specifiers, the extra arguments are concatenated to the returned\nstring, separated by spaces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.format('%s:%s', 'foo', 'bar', 'baz');\n// Returns: 'foo:bar baz'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the first argument does not contain a valid format specifier, util.format()\nreturns a string that is the concatenation of all arguments separated by spaces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.format(1, 2, 3);\n// Returns: '1 2 3'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If only one argument is passed to util.format(), it is returned as it is\nwithout any formatting:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.format('%% %s');\n// Returns: '%% %s'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      util.format() is a synchronous method that is intended as a debugging tool.\nSome input values can have a significant performance overhead that can block the\nevent loop. Use this function with care and never in a hot code path.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`util.formatWithOptions(inspectOptions, format[, ...args])`", @@ -53469,6 +55115,14 @@ ], "changes": [ { + "version": [ + "v14.6.0", + "v12.19.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/33690", + "description": "If `object` is from a different `vm.Context` now, a custom inspection function on it will not receive context-specific arguments anymore." + }, + { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32392", "description": "The `maxStringLength` option is supported now." @@ -53673,6 +55327,14 @@ ], "changes": [ { + "version": [ + "v14.6.0", + "v12.19.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/33690", + "description": "If `object` is from a different `vm.Context` now, a custom inspection function on it will not receive context-specific arguments anymore." + }, + { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32392", "description": "The `maxStringLength` option is supported now." @@ -53897,8 +55559,8 @@ ] }, { - "textRaw": "Custom inspection functions on Objects", - "name": "Custom inspection functions on Objects", + "textRaw": "Custom inspection functions on objects", + "name": "Custom inspection functions on objects", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Objects may also define their own\n[util.inspect.custom](depth, opts) function,\nwhich util.inspect() will invoke and use the result of when inspecting\nthe object:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\n\nclass Box {\n  constructor(value) {\n    this.value = value;\n  }\n\n  [util.inspect.custom](depth, options) {\n    if (depth < 0) {\n      return options.stylize('[Box]', 'special');\n    }\n\n    const newOptions = Object.assign({}, options, {\n      depth: options.depth === null ? null : options.depth - 1\n    });\n\n    // Five space padding because that's the size of \"Box< \".\n    const padding = ' '.repeat(5);\n    const inner = util.inspect(this.value, newOptions)\n                      .replace(/\\n/g, `\\n${padding}`);\n    return `${options.stylize('Box', 'special')}< ${inner} >`;\n  }\n}\n\nconst box = new Box(true);\n\nutil.inspect(box);\n// Returns: \"Box< true >\"\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Custom [util.inspect.custom](depth, opts) functions typically return a string\nbut may return a value of any type that will be formatted accordingly by\nutil.inspect().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const util = require('util');\n\nconst obj = { foo: 'this will not show up in the inspect() output' };\nobj[util.inspect.custom] = (depth) => {\n  return { bar: 'baz' };\n};\n\nutil.inspect(obj);\n// Returns: \"{ bar: 'baz' }\"\n
                                                                                                                                                                                                                                                      " } @@ -54042,7 +55704,7 @@ "desc": "

                                                                                                                                                                                                                                                      An implementation of the WHATWG Encoding Standard TextDecoder API.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const decoder = new TextDecoder('shift_jis');\nlet string = '';\nlet buffer;\nwhile (buffer = getNextChunkSomehow()) {\n  string += decoder.decode(buffer, { stream: true });\n}\nstring += decoder.decode(); // end-of-stream\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "WHATWG Supported Encodings", + "textRaw": "WHATWG supported encodings", "name": "whatwg_supported_encodings", "desc": "

                                                                                                                                                                                                                                                      Per the WHATWG Encoding Standard, the encodings supported by the\nTextDecoder API are outlined in the tables below. For each encoding,\none or more aliases may be used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Different Node.js build configurations support different sets of encodings.\nWhile a very basic set of encodings is supported even on Node.js builds without\nICU enabled, support for some encodings is provided only when Node.js is built\nwith ICU and using the full ICU data (see Internationalization).

                                                                                                                                                                                                                                                      ", "modules": [ @@ -54061,15 +55723,15 @@ "displayName": "Encodings Supported by Default (With ICU)" }, { - "textRaw": "Encodings Requiring Full ICU Data", + "textRaw": "Encodings requiring full ICU data", "name": "encodings_requiring_full_icu_data", "desc": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                      EncodingAliases
                                                                                                                                                                                                                                                      'ibm866''866', 'cp866', 'csibm866'
                                                                                                                                                                                                                                                      'iso-8859-2''csisolatin2', 'iso-ir-101', 'iso8859-2', 'iso88592', 'iso_8859-2', 'iso_8859-2:1987', 'l2', 'latin2'
                                                                                                                                                                                                                                                      'iso-8859-3''csisolatin3', 'iso-ir-109', 'iso8859-3', 'iso88593', 'iso_8859-3', 'iso_8859-3:1988', 'l3', 'latin3'
                                                                                                                                                                                                                                                      'iso-8859-4''csisolatin4', 'iso-ir-110', 'iso8859-4', 'iso88594', 'iso_8859-4', 'iso_8859-4:1988', 'l4', 'latin4'
                                                                                                                                                                                                                                                      'iso-8859-5''csisolatincyrillic', 'cyrillic', 'iso-ir-144', 'iso8859-5', 'iso88595', 'iso_8859-5', 'iso_8859-5:1988'
                                                                                                                                                                                                                                                      'iso-8859-6''arabic', 'asmo-708', 'csiso88596e', 'csiso88596i', 'csisolatinarabic', 'ecma-114', 'iso-8859-6-e', 'iso-8859-6-i', 'iso-ir-127', 'iso8859-6', 'iso88596', 'iso_8859-6', 'iso_8859-6:1987'
                                                                                                                                                                                                                                                      'iso-8859-7''csisolatingreek', 'ecma-118', 'elot_928', 'greek', 'greek8', 'iso-ir-126', 'iso8859-7', 'iso88597', 'iso_8859-7', 'iso_8859-7:1987', 'sun_eu_greek'
                                                                                                                                                                                                                                                      'iso-8859-8''csiso88598e', 'csisolatinhebrew', 'hebrew', 'iso-8859-8-e', 'iso-ir-138', 'iso8859-8', 'iso88598', 'iso_8859-8', 'iso_8859-8:1988', 'visual'
                                                                                                                                                                                                                                                      'iso-8859-8-i''csiso88598i', 'logical'
                                                                                                                                                                                                                                                      'iso-8859-10''csisolatin6', 'iso-ir-157', 'iso8859-10', 'iso885910', 'l6', 'latin6'
                                                                                                                                                                                                                                                      'iso-8859-13''iso8859-13', 'iso885913'
                                                                                                                                                                                                                                                      'iso-8859-14''iso8859-14', 'iso885914'
                                                                                                                                                                                                                                                      'iso-8859-15''csisolatin9', 'iso8859-15', 'iso885915', 'iso_8859-15', 'l9'
                                                                                                                                                                                                                                                      'koi8-r''cskoi8r', 'koi', 'koi8', 'koi8_r'
                                                                                                                                                                                                                                                      'koi8-u''koi8-ru'
                                                                                                                                                                                                                                                      'macintosh''csmacintosh', 'mac', 'x-mac-roman'
                                                                                                                                                                                                                                                      'windows-874''dos-874', 'iso-8859-11', 'iso8859-11', 'iso885911', 'tis-620'
                                                                                                                                                                                                                                                      'windows-1250''cp1250', 'x-cp1250'
                                                                                                                                                                                                                                                      'windows-1251''cp1251', 'x-cp1251'
                                                                                                                                                                                                                                                      'windows-1252''ansi_x3.4-1968', 'ascii', 'cp1252', 'cp819', 'csisolatin1', 'ibm819', 'iso-8859-1', 'iso-ir-100', 'iso8859-1', 'iso88591', 'iso_8859-1', 'iso_8859-1:1987', 'l1', 'latin1', 'us-ascii', 'x-cp1252'
                                                                                                                                                                                                                                                      'windows-1253''cp1253', 'x-cp1253'
                                                                                                                                                                                                                                                      'windows-1254''cp1254', 'csisolatin5', 'iso-8859-9', 'iso-ir-148', 'iso8859-9', 'iso88599', 'iso_8859-9', 'iso_8859-9:1989', 'l5', 'latin5', 'x-cp1254'
                                                                                                                                                                                                                                                      'windows-1255''cp1255', 'x-cp1255'
                                                                                                                                                                                                                                                      'windows-1256''cp1256', 'x-cp1256'
                                                                                                                                                                                                                                                      'windows-1257''cp1257', 'x-cp1257'
                                                                                                                                                                                                                                                      'windows-1258''cp1258', 'x-cp1258'
                                                                                                                                                                                                                                                      'x-mac-cyrillic''x-mac-ukrainian'
                                                                                                                                                                                                                                                      'gbk''chinese', 'csgb2312', 'csiso58gb231280', 'gb2312', 'gb_2312', 'gb_2312-80', 'iso-ir-58', 'x-gbk'
                                                                                                                                                                                                                                                      'gb18030'
                                                                                                                                                                                                                                                      'big5''big5-hkscs', 'cn-big5', 'csbig5', 'x-x-big5'
                                                                                                                                                                                                                                                      'euc-jp''cseucpkdfmtjapanese', 'x-euc-jp'
                                                                                                                                                                                                                                                      'iso-2022-jp''csiso2022jp'
                                                                                                                                                                                                                                                      'shift_jis''csshiftjis', 'ms932', 'ms_kanji', 'shift-jis', 'sjis', 'windows-31j', 'x-sjis'
                                                                                                                                                                                                                                                      'euc-kr''cseuckr', 'csksc56011987', 'iso-ir-149', 'korean', 'ks_c_5601-1987', 'ks_c_5601-1989', 'ksc5601', 'ksc_5601', 'windows-949'
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The 'iso-8859-16' encoding listed in the WHATWG Encoding Standard\nis not supported.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Encodings Requiring Full ICU Data" + "displayName": "Encodings requiring full ICU data" } ], "type": "module", - "displayName": "WHATWG Supported Encodings" + "displayName": "WHATWG supported encodings" } ], "methods": [ @@ -54329,7 +55991,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns true if the value is an instance of one of the ArrayBuffer\nviews, such as typed array objects or DataView. Equivalent to\nArrayBuffer.isView().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.types.isArrayBufferView(new Int8Array());  // true\nutil.types.isArrayBufferView(Buffer.from('hello world')); // true\nutil.types.isArrayBufferView(new DataView(new ArrayBuffer(16)));  // true\nutil.types.isArrayBufferView(new ArrayBuffer());  // false\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns true if the value is an instance of one of the ArrayBuffer\nviews, such as typed array objects or DataView. Equivalent to\nArrayBuffer.isView().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      util.types.isArrayBufferView(new Int8Array());  // true\nutil.types.isArrayBufferView(Buffer.from('hello world')); // true\nutil.types.isArrayBufferView(new DataView(new ArrayBuffer(16)));  // true\nutil.types.isArrayBufferView(new ArrayBuffer());  // false\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`util.types.isArgumentsObject(value)`", @@ -55972,7 +57634,7 @@ "textRaw": "V8", "name": "v8", "introduced_in": "v4.0.0", - "desc": "

                                                                                                                                                                                                                                                      The v8 module exposes APIs that are specific to the version of V8\nbuilt into the Node.js binary. It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const v8 = require('v8');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The APIs and implementation are subject to change at any time.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/v8.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The v8 module exposes APIs that are specific to the version of V8\nbuilt into the Node.js binary. It can be accessed using:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const v8 = require('v8');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The APIs and implementation are subject to change at any time.

                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`v8.cachedDataVersionTag()`", @@ -55994,7 +57656,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                      Returns an integer representing a \"version tag\" derived from the V8 version,\ncommand line flags and detected CPU features. This is useful for determining\nwhether a vm.Script cachedData buffer is compatible with this instance\nof V8.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Returns an integer representing a \"version tag\" derived from the V8 version,\ncommand line flags and detected CPU features. This is useful for determining\nwhether a vm.Script cachedData buffer is compatible with this instance\nof V8.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`v8.getHeapSpaceStatistics()`", @@ -56126,6 +57788,40 @@ "desc": "

                                                                                                                                                                                                                                                      The v8.setFlagsFromString() method can be used to programmatically set\nV8 command line flags. This method should be used with care. Changing settings\nafter the VM has started may result in unpredictable behavior, including\ncrashes and data loss; or it may simply do nothing.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The V8 options available for a version of Node.js may be determined by running\nnode --v8-options.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Usage:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Print GC events to stdout for one minute.\nconst v8 = require('v8');\nv8.setFlagsFromString('--trace_gc');\nsetTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3);\n
                                                                                                                                                                                                                                                      " }, { + "textRaw": "`v8.takeCoverage()`", + "type": "method", + "name": "takeCoverage", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      The v8.takeCoverage() method allows the user to write the coverage started by\nNODE_V8_COVERAGE to disk on demand. This method can be invoked multiple\ntimes during the lifetime of the process, each time the execution counter will\nbe reset and a new coverage report will be written to the directory specified\nby NODE_V8_COVERAGE.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When the process is about to exit, one last coverage will still be written to\ndisk, unless v8.stopCoverage() is invoked before the process exits.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`v8.stopCoverage()`", + "type": "method", + "name": "stopCoverage", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      The v8.stopCoverage() method allows the user to stop the coverage collection\nstarted by NODE_V8_COVERAGE, so that V8 can release the execution count\nrecords and optimize code. This can be used in conjunction with\nv8.takeCoverage() if the user wants to collect the coverage on demand.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`v8.writeHeapSnapshot([filename])`", "type": "method", "name": "writeHeapSnapshot", @@ -56153,7 +57849,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Generates a snapshot of the current V8 heap and writes it to a JSON\nfile. This file is intended to be used with tools such as Chrome\nDevTools. The JSON schema is undocumented and specific to the V8\nengine, and may change from one version of V8 to the next.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A heap snapshot is specific to a single V8 isolate. When using\nWorker Threads, a heap snapshot generated from the main thread will\nnot contain any information about the workers, and vice versa.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { writeHeapSnapshot } = require('v8');\nconst {\n  Worker,\n  isMainThread,\n  parentPort\n} = require('worker_threads');\n\nif (isMainThread) {\n  const worker = new Worker(__filename);\n\n  worker.once('message', (filename) => {\n    console.log(`worker heapdump: ${filename}`);\n    // Now get a heapdump for the main thread.\n    console.log(`main thread heapdump: ${writeHeapSnapshot()}`);\n  });\n\n  // Tell the worker to create a heapdump.\n  worker.postMessage('heapdump');\n} else {\n  parentPort.once('message', (message) => {\n    if (message === 'heapdump') {\n      // Generate a heapdump for the worker\n      // and return the filename to the parent.\n      parentPort.postMessage(writeHeapSnapshot());\n    }\n  });\n}\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Generates a snapshot of the current V8 heap and writes it to a JSON\nfile. This file is intended to be used with tools such as Chrome\nDevTools. The JSON schema is undocumented and specific to the V8\nengine, and may change from one version of V8 to the next.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A heap snapshot is specific to a single V8 isolate. When using\nworker threads, a heap snapshot generated from the main thread will\nnot contain any information about the workers, and vice versa.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { writeHeapSnapshot } = require('v8');\nconst {\n  Worker,\n  isMainThread,\n  parentPort\n} = require('worker_threads');\n\nif (isMainThread) {\n  const worker = new Worker(__filename);\n\n  worker.once('message', (filename) => {\n    console.log(`worker heapdump: ${filename}`);\n    // Now get a heapdump for the main thread.\n    console.log(`main thread heapdump: ${writeHeapSnapshot()}`);\n  });\n\n  // Tell the worker to create a heapdump.\n  worker.postMessage('heapdump');\n} else {\n  parentPort.once('message', (message) => {\n    if (message === 'heapdump') {\n      // Generate a heapdump for the worker\n      // and return the filename to the parent.\n      parentPort.postMessage(writeHeapSnapshot());\n    }\n  });\n}\n
                                                                                                                                                                                                                                                      " } ], "modules": [ @@ -56647,12 +58343,12 @@ "displayName": "V8" }, { - "textRaw": "VM (Executing JavaScript)", + "textRaw": "VM (executing JavaScript)", "name": "vm", "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The vm module enables compiling and running code within V8 Virtual\nMachine contexts. The vm module is not a security mechanism. Do\nnot use it to run untrusted code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript code can be compiled and run immediately or\ncompiled, saved, and run later.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A common use case is to run the code in a different V8 Context. This means\ninvoked code has a different global object than the invoking code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      One can provide the context by contextifying an\nobject. The invoked code treats any property in the context like a\nglobal variable. Any changes to global variables caused by the invoked\ncode are reflected in the context object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const vm = require('vm');\n\nconst x = 1;\n\nconst context = { x: 2 };\nvm.createContext(context); // Contextify the object.\n\nconst code = 'x += 40; var y = 17;';\n// `x` and `y` are global variables in the context.\n// Initially, x has the value 2 because that is the value of context.x.\nvm.runInContext(code, context);\n\nconsole.log(context.x); // 42\nconsole.log(context.y); // 17\n\nconsole.log(x); // 1; y is not defined.\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/vm.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The vm module enables compiling and running code within V8 Virtual\nMachine contexts. The vm module is not a security mechanism. Do\nnot use it to run untrusted code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      JavaScript code can be compiled and run immediately or\ncompiled, saved, and run later.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A common use case is to run the code in a different V8 Context. This means\ninvoked code has a different global object than the invoking code.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      One can provide the context by contextifying an\nobject. The invoked code treats any property in the context like a\nglobal variable. Any changes to global variables caused by the invoked\ncode are reflected in the context object.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const vm = require('vm');\n\nconst x = 1;\n\nconst context = { x: 2 };\nvm.createContext(context); // Contextify the object.\n\nconst code = 'x += 40; var y = 17;';\n// `x` and `y` are global variables in the context.\n// Initially, x has the value 2 because that is the value of context.x.\nvm.runInContext(code, context);\n\nconsole.log(context.x); // 42\nconsole.log(context.y); // 17\n\nconsole.log(x); // 1; y is not defined.\n
                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `vm.Script`", @@ -57004,7 +58700,7 @@ }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      This feature is only available with the --experimental-vm-modules command\nflag enabled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The vm.Module class provides a low-level interface for using\nECMAScript modules in VM contexts. It is the counterpart of the vm.Script\nclass that closely mirrors Module Records as defined in the ECMAScript\nspecification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike vm.Script however, every vm.Module object is bound to a context from\nits creation. Operations on vm.Module objects are intrinsically asynchronous,\nin contrast with the synchronous nature of vm.Script objects. The use of\n'async' functions can help with manipulating vm.Module objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using a vm.Module object requires three distinct steps: creation/parsing,\nlinking, and evaluation. These three steps are illustrated in the following\nexample.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This implementation lies at a lower level than the ECMAScript Module\nloader. There is also currently no way to interact with the Loader, though\nsupport is planned.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const vm = require('vm');\n\nconst contextifiedObject = vm.createContext({ secret: 42 });\n\n(async () => {\n  // Step 1\n  //\n  // Create a Module by constructing a new `vm.SourceTextModule` object. This\n  // parses the provided source text, throwing a `SyntaxError` if anything goes\n  // wrong. By default, a Module is created in the top context. But here, we\n  // specify `contextifiedObject` as the context this Module belongs to.\n  //\n  // Here, we attempt to obtain the default export from the module \"foo\", and\n  // put it into local binding \"secret\".\n\n  const bar = new vm.SourceTextModule(`\n    import s from 'foo';\n    s;\n  `, { context: contextifiedObject });\n\n  // Step 2\n  //\n  // \"Link\" the imported dependencies of this Module to it.\n  //\n  // The provided linking callback (the \"linker\") accepts two arguments: the\n  // parent module (`bar` in this case) and the string that is the specifier of\n  // the imported module. The callback is expected to return a Module that\n  // corresponds to the provided specifier, with certain requirements documented\n  // in `module.link()`.\n  //\n  // If linking has not started for the returned Module, the same linker\n  // callback will be called on the returned Module.\n  //\n  // Even top-level Modules without dependencies must be explicitly linked. The\n  // callback provided would never be called, however.\n  //\n  // The link() method returns a Promise that will be resolved when all the\n  // Promises returned by the linker resolve.\n  //\n  // Note: This is a contrived example in that the linker function creates a new\n  // \"foo\" module every time it is called. In a full-fledged module system, a\n  // cache would probably be used to avoid duplicated modules.\n\n  async function linker(specifier, referencingModule) {\n    if (specifier === 'foo') {\n      return new vm.SourceTextModule(`\n        // The \"secret\" variable refers to the global variable we added to\n        // \"contextifiedObject\" when creating the context.\n        export default secret;\n      `, { context: referencingModule.context });\n\n      // Using `contextifiedObject` instead of `referencingModule.context`\n      // here would work as well.\n    }\n    throw new Error(`Unable to resolve dependency: ${specifier}`);\n  }\n  await bar.link(linker);\n\n  // Step 3\n  //\n  // Evaluate the Module. The evaluate() method returns a Promise with a single\n  // property \"result\" that contains the result of the very last statement\n  // executed in the Module. In the case of `bar`, it is `s;`, which refers to\n  // the default export of the `foo` module, the `secret` we set in the\n  // beginning to 42.\n\n  const { result } = await bar.evaluate();\n\n  console.log(result);\n  // Prints 42.\n})();\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      This feature is only available with the --experimental-vm-modules command\nflag enabled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The vm.Module class provides a low-level interface for using\nECMAScript modules in VM contexts. It is the counterpart of the vm.Script\nclass that closely mirrors Module Records as defined in the ECMAScript\nspecification.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike vm.Script however, every vm.Module object is bound to a context from\nits creation. Operations on vm.Module objects are intrinsically asynchronous,\nin contrast with the synchronous nature of vm.Script objects. The use of\n'async' functions can help with manipulating vm.Module objects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using a vm.Module object requires three distinct steps: creation/parsing,\nlinking, and evaluation. These three steps are illustrated in the following\nexample.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This implementation lies at a lower level than the ECMAScript Module\nloader. There is also no way to interact with the Loader yet, though\nsupport is planned.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const vm = require('vm');\n\nconst contextifiedObject = vm.createContext({ secret: 42 });\n\n(async () => {\n  // Step 1\n  //\n  // Create a Module by constructing a new `vm.SourceTextModule` object. This\n  // parses the provided source text, throwing a `SyntaxError` if anything goes\n  // wrong. By default, a Module is created in the top context. But here, we\n  // specify `contextifiedObject` as the context this Module belongs to.\n  //\n  // Here, we attempt to obtain the default export from the module \"foo\", and\n  // put it into local binding \"secret\".\n\n  const bar = new vm.SourceTextModule(`\n    import s from 'foo';\n    s;\n  `, { context: contextifiedObject });\n\n  // Step 2\n  //\n  // \"Link\" the imported dependencies of this Module to it.\n  //\n  // The provided linking callback (the \"linker\") accepts two arguments: the\n  // parent module (`bar` in this case) and the string that is the specifier of\n  // the imported module. The callback is expected to return a Module that\n  // corresponds to the provided specifier, with certain requirements documented\n  // in `module.link()`.\n  //\n  // If linking has not started for the returned Module, the same linker\n  // callback will be called on the returned Module.\n  //\n  // Even top-level Modules without dependencies must be explicitly linked. The\n  // callback provided would never be called, however.\n  //\n  // The link() method returns a Promise that will be resolved when all the\n  // Promises returned by the linker resolve.\n  //\n  // Note: This is a contrived example in that the linker function creates a new\n  // \"foo\" module every time it is called. In a full-fledged module system, a\n  // cache would probably be used to avoid duplicated modules.\n\n  async function linker(specifier, referencingModule) {\n    if (specifier === 'foo') {\n      return new vm.SourceTextModule(`\n        // The \"secret\" variable refers to the global variable we added to\n        // \"contextifiedObject\" when creating the context.\n        export default secret;\n      `, { context: referencingModule.context });\n\n      // Using `contextifiedObject` instead of `referencingModule.context`\n      // here would work as well.\n    }\n    throw new Error(`Unable to resolve dependency: ${specifier}`);\n  }\n  await bar.link(linker);\n\n  // Step 3\n  //\n  // Evaluate the Module. The evaluate() method returns a Promise with a single\n  // property \"result\" that contains the result of the very last statement\n  // executed in the Module. In the case of `bar`, it is `s;`, which refers to\n  // the default export of the `foo` module, the `secret` we set in the\n  // beginning to 42.\n\n  const { result } = await bar.evaluate();\n\n  console.log(result);\n  // Prints 42.\n})();\n
                                                                                                                                                                                                                                                      ", "properties": [ { "textRaw": "`dependencySpecifiers` {string[]}", @@ -57952,7 +59648,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      vm.runInThisContext() compiles code, runs it within the context of the\ncurrent global and returns the result. Running code does not have access to\nlocal scope, but does have access to the current global object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If options is a string, then it specifies the filename.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example illustrates using both vm.runInThisContext() and\nthe JavaScript eval() function to run the same code:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      const vm = require('vm');\nlet localVar = 'initial value';\n\nconst vmResult = vm.runInThisContext('localVar = \"vm\";');\nconsole.log(`vmResult: '${vmResult}', localVar: '${localVar}'`);\n// Prints: vmResult: 'vm', localVar: 'initial value'\n\nconst evalResult = eval('localVar = \"eval\";');\nconsole.log(`evalResult: '${evalResult}', localVar: '${localVar}'`);\n// Prints: evalResult: 'eval', localVar: 'eval'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because vm.runInThisContext() does not have access to the local scope,\nlocalVar is unchanged. In contrast, eval() does have access to the\nlocal scope, so the value localVar is changed. In this way\nvm.runInThisContext() is much like an indirect eval() call, e.g.\n(0,eval)('code').

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: Running an HTTP Server within a VM

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using either script.runInThisContext() or\nvm.runInThisContext(), the code is executed within the current V8 global\ncontext. The code passed to this VM context will have its own isolated scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to run a simple web server using the http module the code passed to\nthe context must either call require('http') on its own, or have a reference\nto the http module passed to it. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      'use strict';\nconst vm = require('vm');\n\nconst code = `\n((require) => {\n  const http = require('http');\n\n  http.createServer((request, response) => {\n    response.writeHead(200, { 'Content-Type': 'text/plain' });\n    response.end('Hello World\\\\n');\n  }).listen(8124);\n\n  console.log('Server running at http://127.0.0.1:8124/');\n})`;\n\nvm.runInThisContext(code)(require);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The require() in the above case shares the state with the context it is\npassed from. This may introduce risks when untrusted code is executed, e.g.\naltering objects in the context in unwanted ways.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      vm.runInThisContext() compiles code, runs it within the context of the\ncurrent global and returns the result. Running code does not have access to\nlocal scope, but does have access to the current global object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If options is a string, then it specifies the filename.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example illustrates using both vm.runInThisContext() and\nthe JavaScript eval() function to run the same code:

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      const vm = require('vm');\nlet localVar = 'initial value';\n\nconst vmResult = vm.runInThisContext('localVar = \"vm\";');\nconsole.log(`vmResult: '${vmResult}', localVar: '${localVar}'`);\n// Prints: vmResult: 'vm', localVar: 'initial value'\n\nconst evalResult = eval('localVar = \"eval\";');\nconsole.log(`evalResult: '${evalResult}', localVar: '${localVar}'`);\n// Prints: evalResult: 'eval', localVar: 'eval'\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because vm.runInThisContext() does not have access to the local scope,\nlocalVar is unchanged. In contrast, eval() does have access to the\nlocal scope, so the value localVar is changed. In this way\nvm.runInThisContext() is much like an indirect eval() call, e.g.\n(0,eval)('code').

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example: Running an HTTP server within a VM

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When using either script.runInThisContext() or\nvm.runInThisContext(), the code is executed within the current V8 global\ncontext. The code passed to this VM context will have its own isolated scope.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to run a simple web server using the http module the code passed to\nthe context must either call require('http') on its own, or have a reference\nto the http module passed to it. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      'use strict';\nconst vm = require('vm');\n\nconst code = `\n((require) => {\n  const http = require('http');\n\n  http.createServer((request, response) => {\n    response.writeHead(200, { 'Content-Type': 'text/plain' });\n    response.end('Hello World\\\\n');\n  }).listen(8124);\n\n  console.log('Server running at http://127.0.0.1:8124/');\n})`;\n\nvm.runInThisContext(code)(require);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The require() in the above case shares the state with the context it is\npassed from. This may introduce risks when untrusted code is executed, e.g.\naltering objects in the context in unwanted ways.

                                                                                                                                                                                                                                                      " } ], "modules": [ @@ -57964,11 +59660,11 @@ "displayName": "What does it mean to \"contextify\" an object?" }, { - "textRaw": "Timeout limitations when using `process.nextTick()`, Promises, and `queueMicrotask()`", + "textRaw": "Timeout limitations when using `process.nextTick()`, promises, and `queueMicrotask()`", "name": "timeout_limitations_when_using_`process.nexttick()`,_promises,_and_`queuemicrotask()`", "desc": "

                                                                                                                                                                                                                                                      Because of the internal mechanics of how the process.nextTick() queue and\nthe microtask queue that underlies Promises are implemented within V8 and\nNode.js, it is possible for code running within a context to \"escape\" the\ntimeout set using vm.runInContext(), vm.runInNewContext(), and\nvm.runInThisContext().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, the following code executed by vm.runInNewContext() with a\ntimeout of 5 milliseconds schedules an infinite loop to run after a promise\nresolves. The scheduled loop is never interrupted by the timeout:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const vm = require('vm');\n\nfunction loop() {\n  while (1) console.log(Date.now());\n}\n\nvm.runInNewContext(\n  'Promise.resolve().then(loop);',\n  { loop, console },\n  { timeout: 5 }\n);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This issue also occurs when the loop() call is scheduled using\nthe process.nextTick() and queueMicrotask() functions.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This issue occurs because all contexts share the same microtask and nextTick\nqueues.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Timeout limitations when using `process.nextTick()`, Promises, and `queueMicrotask()`" + "displayName": "Timeout limitations when using `process.nextTick()`, promises, and `queueMicrotask()`" } ], "type": "module", @@ -57980,7 +59676,7 @@ "introduced_in": "v12.16.0", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The WASI API provides an implementation of the WebAssembly System Interface\nspecification. WASI gives sandboxed WebAssembly applications access to the\nunderlying operating system via a collection of POSIX-like functions.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      'use strict';\nconst fs = require('fs');\nconst { WASI } = require('wasi');\nconst wasi = new WASI({\n  args: process.argv,\n  env: process.env,\n  preopens: {\n    '/sandbox': '/some/real/path/that/wasm/can/access'\n  }\n});\nconst importObject = { wasi_snapshot_preview1: wasi.wasiImport };\n\n(async () => {\n  const wasm = await WebAssembly.compile(fs.readFileSync('./binary.wasm'));\n  const instance = await WebAssembly.instantiate(wasm, importObject);\n\n  wasi.start(instance);\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The --experimental-wasi-unstable-preview1 and --experimental-wasm-bigint\nCLI arguments are needed for the previous example to run.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/wasi.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The WASI API provides an implementation of the WebAssembly System Interface\nspecification. WASI gives sandboxed WebAssembly applications access to the\nunderlying operating system via a collection of POSIX-like functions.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      'use strict';\nconst fs = require('fs');\nconst { WASI } = require('wasi');\nconst wasi = new WASI({\n  args: process.argv,\n  env: process.env,\n  preopens: {\n    '/sandbox': '/some/real/path/that/wasm/can/access'\n  }\n});\nconst importObject = { wasi_snapshot_preview1: wasi.wasiImport };\n\n(async () => {\n  const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm'));\n  const instance = await WebAssembly.instantiate(wasm, importObject);\n\n  wasi.start(instance);\n})();\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To run the above example, create a new WebAssembly text format file named\ndemo.wat:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      (module\n    ;; Import the required fd_write WASI function which will write the given io vectors to stdout\n    ;; The function signature for fd_write is:\n    ;; (File Descriptor, *iovs, iovs_len, nwritten) -> Returns number of bytes written\n    (import \"wasi_snapshot_preview1\" \"fd_write\" (func $fd_write (param i32 i32 i32 i32) (result i32)))\n\n    (memory 1)\n    (export \"memory\" (memory 0))\n\n    ;; Write 'hello world\\n' to memory at an offset of 8 bytes\n    ;; Note the trailing newline which is required for the text to appear\n    (data (i32.const 8) \"hello world\\n\")\n\n    (func $main (export \"_start\")\n        ;; Creating a new io vector within linear memory\n        (i32.store (i32.const 0) (i32.const 8))  ;; iov.iov_base - This is a pointer to the start of the 'hello world\\n' string\n        (i32.store (i32.const 4) (i32.const 12))  ;; iov.iov_len - The length of the 'hello world\\n' string\n\n        (call $fd_write\n            (i32.const 1) ;; file_descriptor - 1 for stdout\n            (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0\n            (i32.const 1) ;; iovs_len - We're printing 1 string stored in an iov - so one.\n            (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written\n        )\n        drop ;; Discard the number of bytes written from the top of the stack\n    )\n)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use wabt to compile .wat to .wasm

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ wat2wasm demo.wat\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The --experimental-wasi-unstable-preview1 and --experimental-wasm-bigint\nCLI arguments are needed for this example to run.

                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `WASI`", @@ -58016,6 +59712,29 @@ } ], "desc": "

                                                                                                                                                                                                                                                      Attempt to begin execution of instance as a WASI command by invoking its\n_start() export. If instance does not contain a _start() export, or if\ninstance contains an _initialize() export, then an exception is thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      start() requires that instance exports a WebAssembly.Memory named\nmemory. If instance does not have a memory export an exception is thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If start() is called more than once, an exception is thrown.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`wasi.initialize(instance)`", + "type": "method", + "name": "initialize", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`instance` {WebAssembly.Instance}", + "name": "instance", + "type": "WebAssembly.Instance" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Attempt to initialize instance as a WASI reactor by invoking its\n_initialize() export, if it is present. If instance contains a _start()\nexport, then an exception is thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      initialize() requires that instance exports a WebAssembly.Memory named\nmemory. If instance does not have a memory export an exception is thrown.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If initialize() is called more than once, an exception is thrown.

                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -58066,6 +59785,27 @@ "type": "boolean", "default": "`false`", "desc": "By default, WASI applications terminate the Node.js process via the `__wasi_proc_exit()` function. Setting this option to `true` causes `wasi.start()` to return the exit code rather than terminate the process." + }, + { + "textRaw": "`stdin` {integer} The file descriptor used as standard input in the WebAssembly application. **Default:** `0`.", + "name": "stdin", + "type": "integer", + "default": "`0`", + "desc": "The file descriptor used as standard input in the WebAssembly application." + }, + { + "textRaw": "`stdout` {integer} The file descriptor used as standard output in the WebAssembly application. **Default:** `1`.", + "name": "stdout", + "type": "integer", + "default": "`1`", + "desc": "The file descriptor used as standard output in the WebAssembly application." + }, + { + "textRaw": "`stderr` {integer} The file descriptor used as standard error in the WebAssembly application. **Default:** `2`.", + "name": "stderr", + "type": "integer", + "default": "`2`", + "desc": "The file descriptor used as standard error in the WebAssembly application." } ] } @@ -58078,12 +59818,12 @@ "displayName": "WebAssembly System Interface (WASI)" }, { - "textRaw": "Worker Threads", + "textRaw": "Worker threads", "name": "worker_threads", "introduced_in": "v10.5.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The worker_threads module enables the use of threads that execute JavaScript\nin parallel. To access it:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const worker = require('worker_threads');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Workers (threads) are useful for performing CPU-intensive JavaScript operations.\nThey will not help much with I/O-intensive work. Node.js’s built-in asynchronous\nI/O operations are more efficient than Workers can be.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike child_process or cluster, worker_threads can share memory. They do\nso by transferring ArrayBuffer instances or sharing SharedArrayBuffer\ninstances.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const {\n  Worker, isMainThread, parentPort, workerData\n} = require('worker_threads');\n\nif (isMainThread) {\n  module.exports = function parseJSAsync(script) {\n    return new Promise((resolve, reject) => {\n      const worker = new Worker(__filename, {\n        workerData: script\n      });\n      worker.on('message', resolve);\n      worker.on('error', reject);\n      worker.on('exit', (code) => {\n        if (code !== 0)\n          reject(new Error(`Worker stopped with exit code ${code}`));\n      });\n    });\n  };\n} else {\n  const { parse } = require('some-js-parsing-library');\n  const script = workerData;\n  parentPort.postMessage(parse(script));\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The above example spawns a Worker thread for each parse() call. In actual\npractice, use a pool of Workers instead for these kinds of tasks. Otherwise, the\noverhead of creating Workers would likely exceed their benefit.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When implementing a worker pool, use the AsyncResource API to inform\ndiagnostic tools (e.g. in order to provide asynchronous stack traces) about the\ncorrelation between tasks and their outcomes. See\n\"Using AsyncResource for a Worker thread pool\"\nin the async_hooks documentation for an example implementation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Worker threads inherit non-process-specific options by default. Refer to\nWorker constructor options to know how to customize worker thread options,\nspecifically argv and execArgv options.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/worker_threads.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The worker_threads module enables the use of threads that execute JavaScript\nin parallel. To access it:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const worker = require('worker_threads');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Workers (threads) are useful for performing CPU-intensive JavaScript operations.\nThey will not help much with I/O-intensive work. Node.js’s built-in asynchronous\nI/O operations are more efficient than Workers can be.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unlike child_process or cluster, worker_threads can share memory. They do\nso by transferring ArrayBuffer instances or sharing SharedArrayBuffer\ninstances.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const {\n  Worker, isMainThread, parentPort, workerData\n} = require('worker_threads');\n\nif (isMainThread) {\n  module.exports = function parseJSAsync(script) {\n    return new Promise((resolve, reject) => {\n      const worker = new Worker(__filename, {\n        workerData: script\n      });\n      worker.on('message', resolve);\n      worker.on('error', reject);\n      worker.on('exit', (code) => {\n        if (code !== 0)\n          reject(new Error(`Worker stopped with exit code ${code}`));\n      });\n    });\n  };\n} else {\n  const { parse } = require('some-js-parsing-library');\n  const script = workerData;\n  parentPort.postMessage(parse(script));\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The above example spawns a Worker thread for each parse() call. In actual\npractice, use a pool of Workers instead for these kinds of tasks. Otherwise, the\noverhead of creating Workers would likely exceed their benefit.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When implementing a worker pool, use the AsyncResource API to inform\ndiagnostic tools (e.g. in order to provide asynchronous stack traces) about the\ncorrelation between tasks and their outcomes. See\n\"Using AsyncResource for a Worker thread pool\"\nin the async_hooks documentation for an example implementation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Worker threads inherit non-process-specific options by default. Refer to\nWorker constructor options to know how to customize worker thread options,\nspecifically argv and execArgv options.

                                                                                                                                                                                                                                                      ", "properties": [ { "textRaw": "`isMainThread` {boolean}", @@ -58134,6 +59874,11 @@ "textRaw": "`codeRangeSizeMb` {number}", "name": "codeRangeSizeMb", "type": "number" + }, + { + "textRaw": "`stackSizeMb` {number}", + "name": "stackSizeMb", + "type": "number" } ], "desc": "

                                                                                                                                                                                                                                                      Provides the set of JS engine resource constraints inside this Worker thread.\nIf the resourceLimits option was passed to the Worker constructor,\nthis matches its values.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If this is used in the main thread, its value is an empty object.

                                                                                                                                                                                                                                                      " @@ -58176,6 +59921,23 @@ ], "methods": [ { + "textRaw": "`worker.markAsUntransferable(object)`", + "type": "method", + "name": "markAsUntransferable", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Mark an object as not transferable. If object occurs in the transfer list of\na port.postMessage() call, it will be ignored.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In particular, this makes sense for objects that can be cloned, rather than\ntransferred, and which are used by other objects on the sending side.\nFor example, Node.js marks the ArrayBuffers it uses for its\nBuffer pool with this.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This operation cannot be undone.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { MessageChannel, markAsUntransferable } = require('worker_threads');\n\nconst pooledBuffer = new ArrayBuffer(8);\nconst typedArray1 = new Uint8Array(pooledBuffer);\nconst typedArray2 = new Float64Array(pooledBuffer);\n\nmarkAsUntransferable(pooledBuffer);\n\nconst { port1 } = new MessageChannel();\nport1.postMessage(typedArray1, [ typedArray1.buffer ]);\n\n// The following line prints the contents of typedArray1 -- it still owns\n// its memory and has been cloned, not transferred. Without\n// `markAsUntransferable()`, this would print an empty Uint8Array.\n// typedArray2 is intact as well.\nconsole.log(typedArray1);\nconsole.log(typedArray2);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      There is no equivalent to this API in browsers.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`worker.moveMessagePortToContext(port, contextifiedSandbox)`", "type": "method", "name": "moveMessagePortToContext", @@ -58296,6 +60058,26 @@ } ], "desc": "

                                                                                                                                                                                                                                                      The 'message' event is emitted for any incoming message, containing the cloned\ninput of port.postMessage().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Listeners on this event will receive a clone of the value parameter as passed\nto postMessage() and no further arguments.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "Event: `'messageerror'`", + "type": "event", + "name": "messageerror", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "params": [ + { + "textRaw": "`error` {Error} An Error object", + "name": "error", + "type": "Error", + "desc": "An Error object" + } + ], + "desc": "

                                                                                                                                                                                                                                                      The 'messageerror' event is emitted when deserializing a message failed.

                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -58324,7 +60106,18 @@ "added": [ "v10.5.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33360", + "description": "Added `KeyObject` to the list of cloneable types." + }, + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33772", + "description": "Added `FileHandle` to the list of transferable types." + } + ] }, "signatures": [ { @@ -58342,12 +60135,12 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sends a JavaScript value to the receiving side of this channel.\nvalue will be transferred in a way which is compatible with\nthe HTML structured clone algorithm.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In particular, the significant differences to JSON are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • value may contain circular references.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value may contain instances of builtin JS types such as RegExps,\nBigInts, Maps, Sets, etc.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value may contain typed arrays, both using ArrayBuffers\nand SharedArrayBuffers.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value may contain WebAssembly.Module instances.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value may not contain native (C++-backed) objects other than MessagePorts.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { MessageChannel } = require('worker_threads');\nconst { port1, port2 } = new MessageChannel();\n\nport1.on('message', (message) => console.log(message));\n\nconst circularData = {};\ncircularData.foo = circularData;\n// Prints: { foo: [Circular] }\nport2.postMessage(circularData);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      transferList may be a list of ArrayBuffer and MessagePort objects.\nAfter transferring, they will not be usable on the sending side of the channel\nanymore (even if they are not contained in value). Unlike with\nchild processes, transferring handles such as network sockets is currently\nnot supported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If value contains SharedArrayBuffer instances, those will be accessible\nfrom either thread. They cannot be listed in transferList.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value may still contain ArrayBuffer instances that are not in\ntransferList; in that case, the underlying memory is copied rather than moved.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { MessageChannel } = require('worker_threads');\nconst { port1, port2 } = new MessageChannel();\n\nport1.on('message', (message) => console.log(message));\n\nconst uint8Array = new Uint8Array([ 1, 2, 3, 4 ]);\n// This posts a copy of `uint8Array`:\nport2.postMessage(uint8Array);\n// This does not copy data, but renders `uint8Array` unusable:\nport2.postMessage(uint8Array, [ uint8Array.buffer ]);\n\n// The memory for the `sharedUint8Array` will be accessible from both the\n// original and the copy received by `.on('message')`:\nconst sharedUint8Array = new Uint8Array(new SharedArrayBuffer(4));\nport2.postMessage(sharedUint8Array);\n\n// This transfers a freshly created message port to the receiver.\n// This can be used, for example, to create communication channels between\n// multiple `Worker` threads that are children of the same parent thread.\nconst otherChannel = new MessageChannel();\nport2.postMessage({ port: otherChannel.port1 }, [ otherChannel.port1 ]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because the object cloning uses the structured clone algorithm,\nnon-enumerable properties, property accessors, and object prototypes are\nnot preserved. In particular, Buffer objects will be read as\nplain Uint8Arrays on the receiving side.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The message object will be cloned immediately, and can be modified after\nposting without having side effects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more information on the serialization and deserialization mechanisms\nbehind this API, see the serialization API of the v8 module.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Sends a JavaScript value to the receiving side of this channel.\nvalue will be transferred in a way which is compatible with\nthe HTML structured clone algorithm.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In particular, the significant differences to JSON are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • value may contain circular references.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value may contain instances of builtin JS types such as RegExps,\nBigInts, Maps, Sets, etc.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value may contain typed arrays, both using ArrayBuffers\nand SharedArrayBuffers.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value may contain WebAssembly.Module instances.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • value may not contain native (C++-backed) objects other than MessagePorts,\nFileHandles, and KeyObjects.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { MessageChannel } = require('worker_threads');\nconst { port1, port2 } = new MessageChannel();\n\nport1.on('message', (message) => console.log(message));\n\nconst circularData = {};\ncircularData.foo = circularData;\n// Prints: { foo: [Circular] }\nport2.postMessage(circularData);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      transferList may be a list of ArrayBuffer, MessagePort and\nFileHandle objects.\nAfter transferring, they will not be usable on the sending side of the channel\nanymore (even if they are not contained in value). Unlike with\nchild processes, transferring handles such as network sockets is currently\nnot supported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If value contains SharedArrayBuffer instances, those will be accessible\nfrom either thread. They cannot be listed in transferList.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      value may still contain ArrayBuffer instances that are not in\ntransferList; in that case, the underlying memory is copied rather than moved.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { MessageChannel } = require('worker_threads');\nconst { port1, port2 } = new MessageChannel();\n\nport1.on('message', (message) => console.log(message));\n\nconst uint8Array = new Uint8Array([ 1, 2, 3, 4 ]);\n// This posts a copy of `uint8Array`:\nport2.postMessage(uint8Array);\n// This does not copy data, but renders `uint8Array` unusable:\nport2.postMessage(uint8Array, [ uint8Array.buffer ]);\n\n// The memory for the `sharedUint8Array` will be accessible from both the\n// original and the copy received by `.on('message')`:\nconst sharedUint8Array = new Uint8Array(new SharedArrayBuffer(4));\nport2.postMessage(sharedUint8Array);\n\n// This transfers a freshly created message port to the receiver.\n// This can be used, for example, to create communication channels between\n// multiple `Worker` threads that are children of the same parent thread.\nconst otherChannel = new MessageChannel();\nport2.postMessage({ port: otherChannel.port1 }, [ otherChannel.port1 ]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because the object cloning uses the structured clone algorithm,\nnon-enumerable properties, property accessors, and object prototypes are\nnot preserved. In particular, Buffer objects will be read as\nplain Uint8Arrays on the receiving side.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The message object will be cloned immediately, and can be modified after\nposting without having side effects.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For more information on the serialization and deserialization mechanisms\nbehind this API, see the serialization API of the v8 module.

                                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Considerations when transferring TypedArrays and Buffers", "name": "considerations_when_transferring_typedarrays_and_buffers", - "desc": "

                                                                                                                                                                                                                                                      All TypedArray and Buffer instances are views over an underlying\nArrayBuffer. That is, it is the ArrayBuffer that actually stores\nthe raw data while the TypedArray and Buffer objects provide a\nway of viewing and manipulating the data. It is possible and common\nfor multiple views to be created over the same ArrayBuffer instance.\nGreat care must be taken when using a transfer list to transfer an\nArrayBuffer as doing so will cause all TypedArray and Buffer\ninstances that share that same ArrayBuffer to become unusable.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const ab = new ArrayBuffer(10);\n\nconst u1 = new Uint8Array(ab);\nconst u2 = new Uint16Array(ab);\n\nconsole.log(u2.length);  // prints 5\n\nport.postMessage(u1, [u1.buffer]);\n\nconsole.log(u2.length);  // prints 0\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Buffer instances, specifically, whether the underlying\nArrayBuffer can be transferred or cloned depends entirely on how\ninstances were created, which often cannot be reliably determined.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Depending on how a Buffer instance was created, it may or may\nnot own its underlying ArrayBuffer. An ArrayBuffer must not\nbe transferred unless it is known that the Buffer instance\nowns it. In particular, for Buffers created from the internal\nBuffer pool (using, for instance Buffer.from() or Buffer.alloc()),\ntransferring them is not possible and they will always be cloned,\nwhich sends a copy of the entire Buffer pool.\nThis behavior may come with unintended higher memory\nusage and possible security concerns.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See Buffer.allocUnsafe() for more details on Buffer pooling.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ArrayBuffers for Buffer instances created using\nBuffer.alloc() or Buffer.allocUnsafeSlow() can always be\ntransferred but doing so will render all other existing views of\nthose ArrayBuffers unusable.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      All TypedArray and Buffer instances are views over an underlying\nArrayBuffer. That is, it is the ArrayBuffer that actually stores\nthe raw data while the TypedArray and Buffer objects provide a\nway of viewing and manipulating the data. It is possible and common\nfor multiple views to be created over the same ArrayBuffer instance.\nGreat care must be taken when using a transfer list to transfer an\nArrayBuffer as doing so will cause all TypedArray and Buffer\ninstances that share that same ArrayBuffer to become unusable.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const ab = new ArrayBuffer(10);\n\nconst u1 = new Uint8Array(ab);\nconst u2 = new Uint16Array(ab);\n\nconsole.log(u2.length);  // prints 5\n\nport.postMessage(u1, [u1.buffer]);\n\nconsole.log(u2.length);  // prints 0\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For Buffer instances, specifically, whether the underlying\nArrayBuffer can be transferred or cloned depends entirely on how\ninstances were created, which often cannot be reliably determined.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An ArrayBuffer can be marked with markAsUntransferable() to indicate\nthat it should always be cloned and never transferred.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Depending on how a Buffer instance was created, it may or may\nnot own its underlying ArrayBuffer. An ArrayBuffer must not\nbe transferred unless it is known that the Buffer instance\nowns it. In particular, for Buffers created from the internal\nBuffer pool (using, for instance Buffer.from() or Buffer.alloc()),\ntransferring them is not possible and they will always be cloned,\nwhich sends a copy of the entire Buffer pool.\nThis behavior may come with unintended higher memory\nusage and possible security concerns.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See Buffer.allocUnsafe() for more details on Buffer pooling.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The ArrayBuffers for Buffer instances created using\nBuffer.alloc() or Buffer.allocUnsafeSlow() can always be\ntransferred but doing so will render all other existing views of\nthose ArrayBuffers unusable.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Considerations when transferring TypedArrays and Buffers" } @@ -58477,6 +60270,26 @@ "desc": "

                                                                                                                                                                                                                                                      The 'message' event is emitted when the worker thread has invoked\nrequire('worker_threads').parentPort.postMessage().\nSee the port.on('message') event for more details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All messages sent from the worker thread will be emitted before the\n'exit' event is emitted on the Worker object.

                                                                                                                                                                                                                                                      " }, { + "textRaw": "Event: `'messageerror'`", + "type": "event", + "name": "messageerror", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "params": [ + { + "textRaw": "`error` {Error} An Error object", + "name": "error", + "type": "Error", + "desc": "An Error object" + } + ], + "desc": "

                                                                                                                                                                                                                                                      The 'messageerror' event is emitted when deserializing a message failed.

                                                                                                                                                                                                                                                      " + }, + { "textRaw": "Event: `'online'`", "type": "event", "name": "online", @@ -58607,6 +60420,71 @@ ], "properties": [ { + "textRaw": "`worker.performance`", + "name": "performance", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      An object that can be used to query performance information from a worker\ninstance. Similar to perf_hooks.performance.

                                                                                                                                                                                                                                                      ", + "methods": [ + { + "textRaw": "`performance.eventLoopUtilization([utilization1[, utilization2]])`", + "type": "method", + "name": "eventLoopUtilization", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns {Object}", + "name": "return", + "type": "Object", + "options": [ + { + "textRaw": "`idle` {number}", + "name": "idle", + "type": "number" + }, + { + "textRaw": "`active` {number}", + "name": "active", + "type": "number" + }, + { + "textRaw": "`utilization` {number}", + "name": "utilization", + "type": "number" + } + ] + }, + "params": [ + { + "textRaw": "`utilization1` {Object} The result of a previous call to `eventLoopUtilization()`.", + "name": "utilization1", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()`." + }, + { + "textRaw": "`utilization2` {Object} The result of a previous call to `eventLoopUtilization()` prior to `utilization1`.", + "name": "utilization2", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()` prior to `utilization1`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                      The same call as perf_hooks eventLoopUtilization(), except the values\nof the worker instance are returned.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      One difference is that, unlike the main thread, bootstrapping within a worker\nis done within the event loop. So the event loop utilization will be\nimmediately available once the worker's script begins execution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An idle time that does not increase does not indicate that the worker is\nstuck in bootstrap. The following examples shows how the worker's entire\nlifetime will never accumulate any idle time, but is still be able to process\nmessages.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Worker, isMainThread, parentPort } = require('worker_threads');\n\nif (isMainThread) {\n  const worker = new Worker(__filename);\n  setInterval(() => {\n    worker.postMessage('hi');\n    console.log(worker.performance.eventLoopUtilization());\n  }, 100).unref();\n  return;\n}\n\nparentPort.on('message', () => console.log('msg')).unref();\n(function r(n) {\n  if (--n < 0) return;\n  const t = Date.now();\n  while (Date.now() - t < 300);\n  setImmediate(r, n);\n})(10);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The event loop utilization of a worker is available only after the 'online'\nevent emitted, and if called before this, or after the 'exit'\nevent, then all properties have the value of 0.

                                                                                                                                                                                                                                                      " + } + ] + }, + { "textRaw": "`resourceLimits` {Object}", "type": "Object", "name": "resourceLimits", @@ -58631,6 +60509,11 @@ "textRaw": "`codeRangeSizeMb` {number}", "name": "codeRangeSizeMb", "type": "number" + }, + { + "textRaw": "`stackSizeMb` {number}", + "name": "stackSizeMb", + "type": "number" } ], "desc": "

                                                                                                                                                                                                                                                      Provides the set of JS engine resource constraints for this Worker thread.\nIf the resourceLimits option was passed to the Worker constructor,\nthis matches its values.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the worker has stopped, the return value is an empty object.

                                                                                                                                                                                                                                                      " @@ -58748,6 +60631,12 @@ "desc": "Any JavaScript value that will be cloned and made available as [`require('worker_threads').workerData`][]. The cloning will occur as described in the [HTML structured clone algorithm][], and an error will be thrown if the object cannot be cloned (e.g. because it contains `function`s)." }, { + "textRaw": "`trackUnmanagedFds` {boolean} If this is set to `true`, then the Worker will track raw file descriptors managed through [`fs.open()`][] and [`fs.close()`][], and close them when the Worker exits, similar to other resources like network sockets or file descriptors managed through the [`FileHandle`][] API. This option is automatically inherited by all nested `Worker`s. **Default**: `false`.", + "name": "trackUnmanagedFds", + "type": "boolean", + "desc": "If this is set to `true`, then the Worker will track raw file descriptors managed through [`fs.open()`][] and [`fs.close()`][], and close them when the Worker exits, similar to other resources like network sockets or file descriptors managed through the [`FileHandle`][] API. This option is automatically inherited by all nested `Worker`s. **Default**: `false`." + }, + { "textRaw": "`transferList` {Object[]} If one or more `MessagePort`-like objects are passed in `workerData`, a `transferList` is required for those items or [`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`][] will be thrown. See [`port.postMessage()`][] for more information.", "name": "transferList", "type": "Object[]", @@ -58776,6 +60665,13 @@ "name": "codeRangeSizeMb", "type": "number", "desc": "The size of a pre-allocated memory range used for generated code." + }, + { + "textRaw": "`stackSizeMb` {number} The default maximum stack size for the thread. Small values may lead to unusable Worker instances. **Default:** `4`.", + "name": "stackSizeMb", + "type": "number", + "default": "`4`", + "desc": "The default maximum stack size for the thread. Small values may lead to unusable Worker instances." } ] } @@ -58787,7 +60683,7 @@ } ], "type": "module", - "displayName": "Worker Threads" + "displayName": "Worker threads" }, { "textRaw": "Zlib", @@ -58795,19 +60691,19 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The zlib module provides compression functionality implemented using Gzip,\nDeflate/Inflate, and Brotli.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To access it:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const zlib = require('zlib');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Compression and decompression are built around the Node.js Streams API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Compressing or decompressing a stream (such as a file) can be accomplished by\npiping the source stream through a zlib Transform stream into a destination\nstream:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { createGzip } = require('zlib');\nconst { pipeline } = require('stream');\nconst {\n  createReadStream,\n  createWriteStream\n} = require('fs');\n\nconst gzip = createGzip();\nconst source = createReadStream('input.txt');\nconst destination = createWriteStream('input.txt.gz');\n\npipeline(source, gzip, destination, (err) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n});\n\n// Or, Promisified\n\nconst { promisify } = require('util');\nconst pipe = promisify(pipeline);\n\nasync function do_gzip(input, output) {\n  const gzip = createGzip();\n  const source = createReadStream(input);\n  const destination = createWriteStream(output);\n  await pipe(source, gzip, destination);\n}\n\ndo_gzip('input.txt', 'input.txt.gz')\n  .catch((err) => {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is also possible to compress or decompress data in a single step:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { deflate, unzip } = require('zlib');\n\nconst input = '.................................';\ndeflate(input, (err, buffer) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n  console.log(buffer.toString('base64'));\n});\n\nconst buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64');\nunzip(buffer, (err, buffer) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n  console.log(buffer.toString());\n});\n\n// Or, Promisified\n\nconst { promisify } = require('util');\nconst do_unzip = promisify(unzip);\n\ndo_unzip(buffer)\n  .then((buf) => console.log(buf.toString()))\n  .catch((err) => {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  });\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/zlib.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The zlib module provides compression functionality implemented using Gzip,\nDeflate/Inflate, and Brotli.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To access it:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const zlib = require('zlib');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Compression and decompression are built around the Node.js Streams API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Compressing or decompressing a stream (such as a file) can be accomplished by\npiping the source stream through a zlib Transform stream into a destination\nstream:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { createGzip } = require('zlib');\nconst { pipeline } = require('stream');\nconst {\n  createReadStream,\n  createWriteStream\n} = require('fs');\n\nconst gzip = createGzip();\nconst source = createReadStream('input.txt');\nconst destination = createWriteStream('input.txt.gz');\n\npipeline(source, gzip, destination, (err) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n});\n\n// Or, Promisified\n\nconst { promisify } = require('util');\nconst pipe = promisify(pipeline);\n\nasync function do_gzip(input, output) {\n  const gzip = createGzip();\n  const source = createReadStream(input);\n  const destination = createWriteStream(output);\n  await pipe(source, gzip, destination);\n}\n\ndo_gzip('input.txt', 'input.txt.gz')\n  .catch((err) => {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is also possible to compress or decompress data in a single step:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { deflate, unzip } = require('zlib');\n\nconst input = '.................................';\ndeflate(input, (err, buffer) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n  console.log(buffer.toString('base64'));\n});\n\nconst buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64');\nunzip(buffer, (err, buffer) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n  console.log(buffer.toString());\n});\n\n// Or, Promisified\n\nconst { promisify } = require('util');\nconst do_unzip = promisify(unzip);\n\ndo_unzip(buffer)\n  .then((buf) => console.log(buf.toString()))\n  .catch((err) => {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  });\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Threadpool Usage and Performance Considerations", + "textRaw": "Threadpool usage and performance considerations", "name": "threadpool_usage_and_performance_considerations", "desc": "

                                                                                                                                                                                                                                                      All zlib APIs, except those that are explicitly synchronous, use the Node.js\ninternal threadpool. This can lead to surprising effects and performance\nlimitations in some applications.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Creating and using a large number of zlib objects simultaneously can cause\nsignificant memory fragmentation.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const zlib = require('zlib');\n\nconst payload = Buffer.from('This is some data');\n\n// WARNING: DO NOT DO THIS!\nfor (let i = 0; i < 30000; ++i) {\n  zlib.deflate(payload, (err, buffer) => {});\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In the preceding example, 30,000 deflate instances are created concurrently.\nBecause of how some operating systems handle memory allocation and\ndeallocation, this may lead to to significant memory fragmentation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is strongly recommended that the results of compression\noperations be cached to avoid duplication of effort.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Threadpool Usage and Performance Considerations" + "displayName": "Threadpool usage and performance considerations" }, { "textRaw": "Compressing HTTP requests and responses", "name": "compressing_http_requests_and_responses", - "desc": "

                                                                                                                                                                                                                                                      The zlib module can be used to implement support for the gzip, deflate\nand br content-encoding mechanisms defined by\nHTTP.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The HTTP Accept-Encoding header is used within an http request to identify\nthe compression encodings accepted by the client. The Content-Encoding\nheader is used to identify the compression encodings actually applied to a\nmessage.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The examples given below are drastically simplified to show the basic concept.\nUsing zlib encoding can be expensive, and the results ought to be cached.\nSee Memory Usage Tuning for more information on the speed/memory/compression\ntradeoffs involved in zlib usage.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Client request example\nconst zlib = require('zlib');\nconst http = require('http');\nconst fs = require('fs');\nconst { pipeline } = require('stream');\n\nconst request = http.get({ host: 'example.com',\n                           path: '/',\n                           port: 80,\n                           headers: { 'Accept-Encoding': 'br,gzip,deflate' } });\nrequest.on('response', (response) => {\n  const output = fs.createWriteStream('example.com_index.html');\n\n  const onError = (err) => {\n    if (err) {\n      console.error('An error occurred:', err);\n      process.exitCode = 1;\n    }\n  };\n\n  switch (response.headers['content-encoding']) {\n    case 'br':\n      pipeline(response, zlib.createBrotliDecompress(), output, onError);\n      break;\n    // Or, just use zlib.createUnzip() to handle both of the following cases:\n    case 'gzip':\n      pipeline(response, zlib.createGunzip(), output, onError);\n      break;\n    case 'deflate':\n      pipeline(response, zlib.createInflate(), output, onError);\n      break;\n    default:\n      pipeline(response, output, onError);\n      break;\n  }\n});\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // server example\n// Running a gzip operation on every request is quite expensive.\n// It would be much more efficient to cache the compressed buffer.\nconst zlib = require('zlib');\nconst http = require('http');\nconst fs = require('fs');\nconst { pipeline } = require('stream');\n\nhttp.createServer((request, response) => {\n  const raw = fs.createReadStream('index.html');\n  // Store both a compressed and an uncompressed version of the resource.\n  response.setHeader('Vary', 'Accept-Encoding');\n  let acceptEncoding = request.headers['accept-encoding'];\n  if (!acceptEncoding) {\n    acceptEncoding = '';\n  }\n\n  const onError = (err) => {\n    if (err) {\n      // If an error occurs, there's not much we can do because\n      // the server has already sent the 200 response code and\n      // some amount of data has already been sent to the client.\n      // The best we can do is terminate the response immediately\n      // and log the error.\n      response.end();\n      console.error('An error occurred:', err);\n    }\n  };\n\n  // Note: This is not a conformant accept-encoding parser.\n  // See https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3\n  if (/\\bdeflate\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'deflate' });\n    pipeline(raw, zlib.createDeflate(), response, onError);\n  } else if (/\\bgzip\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'gzip' });\n    pipeline(raw, zlib.createGzip(), response, onError);\n  } else if (/\\bbr\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'br' });\n    pipeline(raw, zlib.createBrotliCompress(), response, onError);\n  } else {\n    response.writeHead(200, {});\n    pipeline(raw, response, onError);\n  }\n}).listen(1337);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By default, the zlib methods will throw an error when decompressing\ntruncated data. However, if it is known that the data is incomplete, or\nthe desire is to inspect only the beginning of a compressed file, it is\npossible to suppress the default error handling by changing the flushing\nmethod that is used to decompress the last chunk of input data:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // This is a truncated version of the buffer from the above examples\nconst buffer = Buffer.from('eJzT0yMA', 'base64');\n\nzlib.unzip(\n  buffer,\n  // For Brotli, the equivalent is zlib.constants.BROTLI_OPERATION_FLUSH.\n  { finishFlush: zlib.constants.Z_SYNC_FLUSH },\n  (err, buffer) => {\n    if (err) {\n      console.error('An error occurred:', err);\n      process.exitCode = 1;\n    }\n    console.log(buffer.toString());\n  });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This will not change the behavior in other error-throwing situations, e.g.\nwhen the input data has an invalid format. Using this method, it will not be\npossible to determine whether the input ended prematurely or lacks the\nintegrity checks, making it necessary to manually check that the\ndecompressed result is valid.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The zlib module can be used to implement support for the gzip, deflate\nand br content-encoding mechanisms defined by\nHTTP.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The HTTP Accept-Encoding header is used within an http request to identify\nthe compression encodings accepted by the client. The Content-Encoding\nheader is used to identify the compression encodings actually applied to a\nmessage.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The examples given below are drastically simplified to show the basic concept.\nUsing zlib encoding can be expensive, and the results ought to be cached.\nSee Memory usage tuning for more information on the speed/memory/compression\ntradeoffs involved in zlib usage.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Client request example\nconst zlib = require('zlib');\nconst http = require('http');\nconst fs = require('fs');\nconst { pipeline } = require('stream');\n\nconst request = http.get({ host: 'example.com',\n                           path: '/',\n                           port: 80,\n                           headers: { 'Accept-Encoding': 'br,gzip,deflate' } });\nrequest.on('response', (response) => {\n  const output = fs.createWriteStream('example.com_index.html');\n\n  const onError = (err) => {\n    if (err) {\n      console.error('An error occurred:', err);\n      process.exitCode = 1;\n    }\n  };\n\n  switch (response.headers['content-encoding']) {\n    case 'br':\n      pipeline(response, zlib.createBrotliDecompress(), output, onError);\n      break;\n    // Or, just use zlib.createUnzip() to handle both of the following cases:\n    case 'gzip':\n      pipeline(response, zlib.createGunzip(), output, onError);\n      break;\n    case 'deflate':\n      pipeline(response, zlib.createInflate(), output, onError);\n      break;\n    default:\n      pipeline(response, output, onError);\n      break;\n  }\n});\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // server example\n// Running a gzip operation on every request is quite expensive.\n// It would be much more efficient to cache the compressed buffer.\nconst zlib = require('zlib');\nconst http = require('http');\nconst fs = require('fs');\nconst { pipeline } = require('stream');\n\nhttp.createServer((request, response) => {\n  const raw = fs.createReadStream('index.html');\n  // Store both a compressed and an uncompressed version of the resource.\n  response.setHeader('Vary', 'Accept-Encoding');\n  let acceptEncoding = request.headers['accept-encoding'];\n  if (!acceptEncoding) {\n    acceptEncoding = '';\n  }\n\n  const onError = (err) => {\n    if (err) {\n      // If an error occurs, there's not much we can do because\n      // the server has already sent the 200 response code and\n      // some amount of data has already been sent to the client.\n      // The best we can do is terminate the response immediately\n      // and log the error.\n      response.end();\n      console.error('An error occurred:', err);\n    }\n  };\n\n  // Note: This is not a conformant accept-encoding parser.\n  // See https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3\n  if (/\\bdeflate\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'deflate' });\n    pipeline(raw, zlib.createDeflate(), response, onError);\n  } else if (/\\bgzip\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'gzip' });\n    pipeline(raw, zlib.createGzip(), response, onError);\n  } else if (/\\bbr\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'br' });\n    pipeline(raw, zlib.createBrotliCompress(), response, onError);\n  } else {\n    response.writeHead(200, {});\n    pipeline(raw, response, onError);\n  }\n}).listen(1337);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By default, the zlib methods will throw an error when decompressing\ntruncated data. However, if it is known that the data is incomplete, or\nthe desire is to inspect only the beginning of a compressed file, it is\npossible to suppress the default error handling by changing the flushing\nmethod that is used to decompress the last chunk of input data:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // This is a truncated version of the buffer from the above examples\nconst buffer = Buffer.from('eJzT0yMA', 'base64');\n\nzlib.unzip(\n  buffer,\n  // For Brotli, the equivalent is zlib.constants.BROTLI_OPERATION_FLUSH.\n  { finishFlush: zlib.constants.Z_SYNC_FLUSH },\n  (err, buffer) => {\n    if (err) {\n      console.error('An error occurred:', err);\n      process.exitCode = 1;\n    }\n    console.log(buffer.toString());\n  });\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This will not change the behavior in other error-throwing situations, e.g.\nwhen the input data has an invalid format. Using this method, it will not be\npossible to determine whether the input ended prematurely or lacks the\nintegrity checks, making it necessary to manually check that the\ndecompressed result is valid.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Compressing HTTP requests and responses" }, @@ -58821,8 +60717,8 @@ ], "miscs": [ { - "textRaw": "Memory Usage Tuning", - "name": "Memory Usage Tuning", + "textRaw": "Memory usage tuning", + "name": "Memory usage tuning", "type": "misc", "miscs": [ { @@ -58873,21 +60769,21 @@ { "textRaw": "Flush operations", "name": "flush_operations", - "desc": "

                                                                                                                                                                                                                                                      The following values are valid flush operations for Brotli-based streams:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • zlib.constants.BROTLI_OPERATION_PROCESS (default for all operations)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • zlib.constants.BROTLI_OPERATION_FLUSH (default when calling .flush())
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • zlib.constants.BROTLI_OPERATION_FINISH (default for the last chunk)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        zlib.constants.BROTLI_OPERATION_EMIT_METADATA

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • This particular operation may be hard to use in a Node.js context,\nas the streaming layer makes it hard to know which data will end up\nin this frame. Also, there is currently no way to consume this data through\nthe Node.js API.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The following values are valid flush operations for Brotli-based streams:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • zlib.constants.BROTLI_OPERATION_PROCESS (default for all operations)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • zlib.constants.BROTLI_OPERATION_FLUSH (default when calling .flush())
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • zlib.constants.BROTLI_OPERATION_FINISH (default for the last chunk)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • zlib.constants.BROTLI_OPERATION_EMIT_METADATA\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • This particular operation may be hard to use in a Node.js context,\nas the streaming layer makes it hard to know which data will end up\nin this frame. Also, there is currently no way to consume this data through\nthe Node.js API.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Flush operations" }, { "textRaw": "Compressor options", "name": "compressor_options", - "desc": "

                                                                                                                                                                                                                                                      There are several options that can be set on Brotli encoders, affecting\ncompression efficiency and speed. Both the keys and the values can be accessed\nas properties of the zlib.constants object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The most important options are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_MODE

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • BROTLI_MODE_GENERIC (default)
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • BROTLI_MODE_TEXT, adjusted for UTF-8 text
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • BROTLI_MODE_FONT, adjusted for WOFF 2.0 fonts
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_QUALITY

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from BROTLI_MIN_QUALITY to BROTLI_MAX_QUALITY,\nwith a default of BROTLI_DEFAULT_QUALITY.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_SIZE_HINT

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Integer value representing the expected input size;\ndefaults to 0 for an unknown input size.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following flags can be set for advanced control over the compression\nalgorithm and memory usage tuning:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_LGWIN

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from BROTLI_MIN_WINDOW_BITS to BROTLI_MAX_WINDOW_BITS,\nwith a default of BROTLI_DEFAULT_WINDOW, or up to\nBROTLI_LARGE_MAX_WINDOW_BITS if the BROTLI_PARAM_LARGE_WINDOW flag\nis set.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_LGBLOCK

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from BROTLI_MIN_INPUT_BLOCK_BITS to BROTLI_MAX_INPUT_BLOCK_BITS.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Boolean flag that decreases compression ratio in favour of\ndecompression speed.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_LARGE_WINDOW

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Boolean flag enabling “Large Window Brotli” mode (not compatible with the\nBrotli format as standardized in RFC 7932).
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_NPOSTFIX

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from 0 to BROTLI_MAX_NPOSTFIX.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_PARAM_NDIRECT

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from 0 to 15 << NPOSTFIX in steps of 1 << NPOSTFIX.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      There are several options that can be set on Brotli encoders, affecting\ncompression efficiency and speed. Both the keys and the values can be accessed\nas properties of the zlib.constants object.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The most important options are:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_MODE\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • BROTLI_MODE_GENERIC (default)
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • BROTLI_MODE_TEXT, adjusted for UTF-8 text
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • BROTLI_MODE_FONT, adjusted for WOFF 2.0 fonts
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_QUALITY\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from BROTLI_MIN_QUALITY to BROTLI_MAX_QUALITY,\nwith a default of BROTLI_DEFAULT_QUALITY.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_SIZE_HINT\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Integer value representing the expected input size;\ndefaults to 0 for an unknown input size.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following flags can be set for advanced control over the compression\nalgorithm and memory usage tuning:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_LGWIN\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from BROTLI_MIN_WINDOW_BITS to BROTLI_MAX_WINDOW_BITS,\nwith a default of BROTLI_DEFAULT_WINDOW, or up to\nBROTLI_LARGE_MAX_WINDOW_BITS if the BROTLI_PARAM_LARGE_WINDOW flag\nis set.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_LGBLOCK\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from BROTLI_MIN_INPUT_BLOCK_BITS to BROTLI_MAX_INPUT_BLOCK_BITS.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Boolean flag that decreases compression ratio in favour of\ndecompression speed.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_LARGE_WINDOW\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Boolean flag enabling “Large Window Brotli” mode (not compatible with the\nBrotli format as standardized in RFC 7932).
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_NPOSTFIX\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from 0 to BROTLI_MAX_NPOSTFIX.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • BROTLI_PARAM_NDIRECT\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Ranges from 0 to 15 << NPOSTFIX in steps of 1 << NPOSTFIX.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Compressor options" }, { "textRaw": "Decompressor options", "name": "decompressor_options", - "desc": "

                                                                                                                                                                                                                                                      These advanced options are available for controlling decompression:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Boolean flag that affects internal memory allocation patterns.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        BROTLI_DECODER_PARAM_LARGE_WINDOW

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Boolean flag enabling “Large Window Brotli” mode (not compatible with the\nBrotli format as standardized in RFC 7932).
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      These advanced options are available for controlling decompression:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Boolean flag that affects internal memory allocation patterns.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • BROTLI_DECODER_PARAM_LARGE_WINDOW\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Boolean flag enabling “Large Window Brotli” mode (not compatible with the\nBrotli format as standardized in RFC 7932).
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Decompressor options" } @@ -58907,6 +60803,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33516", + "description": "The `maxOutputLength` option is supported now." + }, + { "version": "v9.4.0", "pr-url": "https://github.com/nodejs/node/pull/16042", "description": "The `dictionary` option can be an `ArrayBuffer`." @@ -58923,7 +60824,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Each zlib-based class takes an options object. No options are required.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some options are only relevant when compressing and are\nignored by the decompression classes.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      See the deflateInit2 and inflateInit2 documentation for more\ninformation.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Each zlib-based class takes an options object. No options are required.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some options are only relevant when compressing and are\nignored by the decompression classes.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      See the deflateInit2 and inflateInit2 documentation for more\ninformation.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Class: `BrotliOptions`", @@ -58933,13 +60834,19 @@ "added": [ "v11.7.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33516", + "description": "The `maxOutputLength` option is supported now." + } + ] }, - "desc": "

                                                                                                                                                                                                                                                      Each Brotli-based class takes an options object. All options are optional.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      For example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const stream = zlib.createBrotliCompress({\n  chunkSize: 32 * 1024,\n  params: {\n    [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n    [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n    [zlib.constants.BROTLI_PARAM_SIZE_HINT]: fs.statSync(inputFile).size\n  }\n});\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Each Brotli-based class takes an options object. All options are optional.

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      For example:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const stream = zlib.createBrotliCompress({\n  chunkSize: 32 * 1024,\n  params: {\n    [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n    [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n    [zlib.constants.BROTLI_PARAM_SIZE_HINT]: fs.statSync(inputFile).size\n  }\n});\n
                                                                                                                                                                                                                                                      " }, { - "textRaw": "Convenience Methods", - "name": "Convenience Methods", + "textRaw": "Convenience methods", + "name": "Convenience methods", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      All of these take a Buffer, TypedArray, DataView,\nArrayBuffer or string as the first argument, an optional second argument\nto supply options to the zlib classes and will call the supplied callback\nwith callback(error, result).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Every method has a *Sync counterpart, which accept the same arguments, but\nwithout a callback.

                                                                                                                                                                                                                                                      ", "methods": [ @@ -60996,7 +62903,7 @@ "textRaw": "Class: `Error`", "type": "class", "name": "Error", - "desc": "

                                                                                                                                                                                                                                                      A generic JavaScript <Error> object that does not denote any specific\ncircumstance of why the error occurred. Error objects capture a \"stack trace\"\ndetailing the point in the code at which the Error was instantiated, and may\nprovide a text description of the error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All errors generated by Node.js, including all System and JavaScript errors,\nwill either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A generic JavaScript <Error> object that does not denote any specific\ncircumstance of why the error occurred. Error objects capture a \"stack trace\"\ndetailing the point in the code at which the Error was instantiated, and may\nprovide a text description of the error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All errors generated by Node.js, including all system and JavaScript errors,\nwill either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`Error.captureStackTrace(targetObject[, constructorOpt])`", @@ -61018,7 +62925,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Creates a .stack property on targetObject, which when accessed returns\na string representing the location in the code at which\nError.captureStackTrace() was called.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myObject = {};\nError.captureStackTrace(myObject);\nmyObject.stack;  // Similar to `new Error().stack`\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line of the trace will be prefixed with\n${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional constructorOpt argument accepts a function. If given, all frames\nabove constructorOpt, including constructorOpt, will be omitted from the\ngenerated stack trace.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The constructorOpt argument is useful for hiding implementation\ndetails of error generation from an end user. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyError() {\n  Error.captureStackTrace(this, MyError);\n}\n\n// Without passing MyError to captureStackTrace, the MyError\n// frame would show up in the .stack property. By passing\n// the constructor, we omit that frame, and retain all frames below it.\nnew MyError().stack;\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Creates a .stack property on targetObject, which when accessed returns\na string representing the location in the code at which\nError.captureStackTrace() was called.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myObject = {};\nError.captureStackTrace(myObject);\nmyObject.stack;  // Similar to `new Error().stack`\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line of the trace will be prefixed with\n${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional constructorOpt argument accepts a function. If given, all frames\nabove constructorOpt, including constructorOpt, will be omitted from the\ngenerated stack trace.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The constructorOpt argument is useful for hiding implementation\ndetails of error generation from the user. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyError() {\n  Error.captureStackTrace(this, MyError);\n}\n\n// Without passing MyError to captureStackTrace, the MyError\n// frame would show up in the .stack property. By passing\n// the constructor, we omit that frame, and retain all frames below it.\nnew MyError().stack;\n
                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -61032,7 +62939,7 @@ "textRaw": "`code` {string}", "type": "string", "name": "code", - "desc": "

                                                                                                                                                                                                                                                      The error.code property is a string label that identifies the kind of error.\nerror.code is the most stable way to identify an error. It will only change\nbetween major versions of Node.js. In contrast, error.message strings may\nchange between any versions of Node.js. See Node.js Error Codes for details\nabout specific codes.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.code property is a string label that identifies the kind of error.\nerror.code is the most stable way to identify an error. It will only change\nbetween major versions of Node.js. In contrast, error.message strings may\nchange between any versions of Node.js. See Node.js error codes for details\nabout specific codes.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`message` {string}", @@ -61044,7 +62951,7 @@ "textRaw": "`stack` {string}", "type": "string", "name": "stack", - "desc": "

                                                                                                                                                                                                                                                      The error.stack property is a string describing the point in the code at which\nthe Error was instantiated.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Things keep happening!\n   at /home/gbusey/file.js:525:2\n   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)\n   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)\n   at increaseSynergy (/home/gbusey/actors.js:701:6)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line is formatted as <error class name>: <error message>, and\nis followed by a series of stack frames (each line beginning with \"at \").\nEach frame describes a call site within the code that lead to the error being\ngenerated. V8 attempts to display a name for each function (by variable name,\nfunction name, or object method name), but occasionally it will not be able to\nfind a suitable name. If V8 cannot determine a name for the function, only\nlocation information will be displayed for that frame. Otherwise, the\ndetermined function name will be displayed with location information appended\nin parentheses.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Frames are only generated for JavaScript functions. If, for example, execution\nsynchronously passes through a C++ addon function called cheetahify which\nitself calls a JavaScript function, the frame representing the cheetahify call\nwill not be present in the stack traces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cheetahify = require('./native-binding.node');\n\nfunction makeFaster() {\n  // `cheetahify()` *synchronously* calls speedy.\n  cheetahify(function speedy() {\n    throw new Error('oh no!');\n  });\n}\n\nmakeFaster();\n// will throw:\n//   /home/gbusey/file.js:6\n//       throw new Error('oh no!');\n//           ^\n//   Error: oh no!\n//       at speedy (/home/gbusey/file.js:6:11)\n//       at makeFaster (/home/gbusey/file.js:5:3)\n//       at Object.<anonymous> (/home/gbusey/file.js:10:1)\n//       at Module._compile (module.js:456:26)\n//       at Object.Module._extensions..js (module.js:474:10)\n//       at Module.load (module.js:356:32)\n//       at Function.Module._load (module.js:312:12)\n//       at Function.Module.runMain (module.js:497:10)\n//       at startup (node.js:119:16)\n//       at node.js:906:3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The location information will be one of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • plain-filename.js:line:column, if the frame represents a call internal\nto Node.js.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /absolute/path/to/file.js:line:column, if the frame represents a call in\na user program, or its dependencies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string representing the stack trace is lazily generated when the\nerror.stack property is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The number of frames captured by the stack trace is bounded by the smaller of\nError.stackTraceLimit or the number of available frames on the current event\nloop tick.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.stack property is a string describing the point in the code at which\nthe Error was instantiated.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Things keep happening!\n   at /home/gbusey/file.js:525:2\n   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)\n   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)\n   at increaseSynergy (/home/gbusey/actors.js:701:6)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line is formatted as <error class name>: <error message>, and\nis followed by a series of stack frames (each line beginning with \"at \").\nEach frame describes a call site within the code that lead to the error being\ngenerated. V8 attempts to display a name for each function (by variable name,\nfunction name, or object method name), but occasionally it will not be able to\nfind a suitable name. If V8 cannot determine a name for the function, only\nlocation information will be displayed for that frame. Otherwise, the\ndetermined function name will be displayed with location information appended\nin parentheses.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Frames are only generated for JavaScript functions. If, for example, execution\nsynchronously passes through a C++ addon function called cheetahify which\nitself calls a JavaScript function, the frame representing the cheetahify call\nwill not be present in the stack traces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cheetahify = require('./native-binding.node');\n\nfunction makeFaster() {\n  // `cheetahify()` *synchronously* calls speedy.\n  cheetahify(function speedy() {\n    throw new Error('oh no!');\n  });\n}\n\nmakeFaster();\n// will throw:\n//   /home/gbusey/file.js:6\n//       throw new Error('oh no!');\n//           ^\n//   Error: oh no!\n//       at speedy (/home/gbusey/file.js:6:11)\n//       at makeFaster (/home/gbusey/file.js:5:3)\n//       at Object.<anonymous> (/home/gbusey/file.js:10:1)\n//       at Module._compile (module.js:456:26)\n//       at Object.Module._extensions..js (module.js:474:10)\n//       at Module.load (module.js:356:32)\n//       at Function.Module._load (module.js:312:12)\n//       at Function.Module.runMain (module.js:497:10)\n//       at startup (node.js:119:16)\n//       at node.js:906:3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The location information will be one of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • plain-filename.js:line:column, if the frame represents a call internal\nto Node.js.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /absolute/path/to/file.js:line:column, if the frame represents a call in\na user program, or its dependencies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string representing the stack trace is lazily generated when the\nerror.stack property is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The number of frames captured by the stack trace is bounded by the smaller of\nError.stackTraceLimit or the number of available frames on the current event\nloop tick.

                                                                                                                                                                                                                                                      " } ], "signatures": [ @@ -61076,7 +62983,7 @@ "textRaw": "Class: `ReferenceError`", "type": "class", "name": "ReferenceError", - "desc": "\n

                                                                                                                                                                                                                                                      Indicates that an attempt is being made to access a variable that is not\ndefined. Such errors commonly indicate typos in code, or an otherwise broken\nprogram.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8\nwill do so.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      doesNotExist;\n// Throws ReferenceError, doesNotExist is not a variable in this program.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code,\nReferenceError instances should always be considered a bug in the code\nor its dependencies.

                                                                                                                                                                                                                                                      " + "desc": "\n

                                                                                                                                                                                                                                                      Indicates that an attempt is being made to access a variable that is not\ndefined. Such errors commonly indicate typos in code, or an otherwise broken\nprogram.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8\nwill do so.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      doesNotExist;\n// Throws ReferenceError, doesNotExist is not a variable in this program.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code,\nReferenceError instances indicate a bug in the code or its dependencies.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Class: `SyntaxError`", @@ -61112,7 +63019,7 @@ "textRaw": "`errno` {string|number}", "type": "string|number", "name": "errno", - "desc": "

                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a\nnegative value which corresponds to the error code defined in\nlibuv Error handling. See the libuv errno.h header file\n(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case\nof a string, it is the same as error.code.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a\nnegative value which corresponds to the error code defined in\nlibuv Error handling. See the libuv errno.h header file\n(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case\nof a string, it is the same as error.code.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`info` {Object}", @@ -61142,16 +63049,16 @@ "textRaw": "`syscall` {string}", "type": "string", "name": "syscall", - "desc": "

                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "Common System Errors", + "textRaw": "Common system errors", "name": "common_system_errors", - "desc": "

                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js\nprogram. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EACCES (Permission denied): An attempt was made to access a file in a way\nforbidden by its file access permissions.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EADDRINUSE (Address already in use): An attempt to bind a server\n(net, http, or https) to a local address failed due to\nanother server on the local system already occupying that address.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNREFUSED (Connection refused): No connection could be made because the\ntarget machine actively refused it. This usually results from trying to\nconnect to a service that is inactive on the foreign host.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNRESET (Connection reset by peer): A connection was forcibly closed by\na peer. This normally results from a loss of the connection on the remote\nsocket due to a timeout or reboot. Commonly encountered via the http\nand net modules.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EEXIST (File exists): An existing file was the target of an operation that\nrequired that the target not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EISDIR (Is a directory): An operation expected a file, but the given\npathname was a directory.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EMFILE (Too many open files in system): Maximum number of\nfile descriptors allowable on the system has been reached, and\nrequests for another descriptor cannot be fulfilled until at least one\nhas been closed. This is encountered when opening many files at once in\nparallel, especially on systems (in particular, macOS) where there is a low\nfile descriptor limit for processes. To remedy a low limit, run\nulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOENT (No such file or directory): Commonly raised by fs operations\nto indicate that a component of the specified pathname does not exist. No\nentity (file or directory) could be found by the given path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTDIR (Not a directory): A component of the given pathname existed, but\nwas not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTEMPTY (Directory not empty): A directory with entries was the target\nof an operation that requires an empty directory, usually fs.unlink.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTFOUND (DNS lookup failed): Indicates a DNS failure of either\nEAI_NODATA or EAI_NONAME. This is not a standard POSIX error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPERM (Operation not permitted): An attempt was made to perform an\noperation that requires elevated privileges.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPIPE (Broken pipe): A write on a pipe, socket, or FIFO for which there is\nno process to read the data. Commonly encountered at the net and\nhttp layers, indicative that the remote side of the stream being\nwritten to has been closed.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ETIMEDOUT (Operation timed out): A connect or send request failed because\nthe connected party did not properly respond after a period of time. Usually\nencountered by http or net. Often a sign that a socket.end()\nwas not properly called.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js\nprogram. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EACCES (Permission denied): An attempt was made to access a file in a way\nforbidden by its file access permissions.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EADDRINUSE (Address already in use): An attempt to bind a server\n(net, http, or https) to a local address failed due to\nanother server on the local system already occupying that address.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNREFUSED (Connection refused): No connection could be made because the\ntarget machine actively refused it. This usually results from trying to\nconnect to a service that is inactive on the foreign host.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNRESET (Connection reset by peer): A connection was forcibly closed by\na peer. This normally results from a loss of the connection on the remote\nsocket due to a timeout or reboot. Commonly encountered via the http\nand net modules.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EEXIST (File exists): An existing file was the target of an operation that\nrequired that the target not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EISDIR (Is a directory): An operation expected a file, but the given\npathname was a directory.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EMFILE (Too many open files in system): Maximum number of\nfile descriptors allowable on the system has been reached, and\nrequests for another descriptor cannot be fulfilled until at least one\nhas been closed. This is encountered when opening many files at once in\nparallel, especially on systems (in particular, macOS) where there is a low\nfile descriptor limit for processes. To remedy a low limit, run\nulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOENT (No such file or directory): Commonly raised by fs operations\nto indicate that a component of the specified pathname does not exist. No\nentity (file or directory) could be found by the given path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTDIR (Not a directory): A component of the given pathname existed, but\nwas not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTEMPTY (Directory not empty): A directory with entries was the target\nof an operation that requires an empty directory, usually fs.unlink.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTFOUND (DNS lookup failed): Indicates a DNS failure of either\nEAI_NODATA or EAI_NONAME. This is not a standard POSIX error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPERM (Operation not permitted): An attempt was made to perform an\noperation that requires elevated privileges.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPIPE (Broken pipe): A write on a pipe, socket, or FIFO for which there is\nno process to read the data. Commonly encountered at the net and\nhttp layers, indicative that the remote side of the stream being\nwritten to has been closed.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ETIMEDOUT (Operation timed out): A connect or send request failed because\nthe connected party did not properly respond after a period of time. Usually\nencountered by http or net. Often a sign that a socket.end()\nwas not properly called.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Common System Errors" + "displayName": "Common system errors" } ] }, @@ -61159,7 +63066,7 @@ "textRaw": "Class: `TypeError`", "type": "class", "name": "TypeError", - "desc": "\n

                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example,\npassing a function to a parameter which expects a string would be considered\na TypeError.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('url').parse(() => { });\n// Throws TypeError, since it expected a string.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form\nof argument validation.

                                                                                                                                                                                                                                                      " + "desc": "\n

                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example,\npassing a function to a parameter which expects a string would be a TypeError.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('url').parse(() => { });\n// Throws TypeError, since it expected a string.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form\nof argument validation.

                                                                                                                                                                                                                                                      " } ], "globals": [ @@ -61360,10 +63267,10 @@ "name": "Process", "introduced_in": "v0.10.0", "type": "global", - "desc": "

                                                                                                                                                                                                                                                      The process object is a global that provides information about, and control\nover, the current Node.js process. As a global, it is always available to\nNode.js applications without using require(). It can also be explicitly\naccessed using require():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const process = require('process');\n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/process.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The process object is a global that provides information about, and control\nover, the current Node.js process. As a global, it is always available to\nNode.js applications without using require(). It can also be explicitly\naccessed using require():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const process = require('process');\n
                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Process Events", + "textRaw": "Process events", "name": "process_events", "desc": "

                                                                                                                                                                                                                                                      The process object is an instance of EventEmitter.

                                                                                                                                                                                                                                                      ", "events": [ @@ -61436,7 +63343,7 @@ "desc": "a [`net.Server`][] or [`net.Socket`][] object, or undefined." } ], - "desc": "

                                                                                                                                                                                                                                                      If the Node.js process is spawned with an IPC channel (see the Child Process\nand Cluster documentation), the 'message' event is emitted whenever a\nmessage sent by a parent process using childprocess.send() is received by\nthe child process.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The message goes through serialization and parsing. The resulting message might\nnot be the same as what is originally sent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the serialization option was set to advanced used when spawning the\nprocess, the message argument can contain data that JSON is not able\nto represent.\nSee Advanced Serialization for child_process for more details.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      If the Node.js process is spawned with an IPC channel (see the Child Process\nand Cluster documentation), the 'message' event is emitted whenever a\nmessage sent by a parent process using childprocess.send() is received by\nthe child process.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The message goes through serialization and parsing. The resulting message might\nnot be the same as what is originally sent.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the serialization option was set to advanced used when spawning the\nprocess, the message argument can contain data that JSON is not able\nto represent.\nSee Advanced serialization for child_process for more details.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Event: `'multipleResolves'`", @@ -61514,10 +63421,10 @@ "desc": "The uncaught exception." }, { - "textRaw": "`origin` {string} Indicates if the exception originates from an unhandled rejection or from synchronous errors. Can either be `'uncaughtException'` or `'unhandledRejection'`.", + "textRaw": "`origin` {string} Indicates if the exception originates from an unhandled rejection or from an synchronous error. Can either be `'uncaughtException'` or `'unhandledRejection'`. The latter is only used in conjunction with the [`--unhandled-rejections`][] flag set to `strict` and an unhandled rejection.", "name": "origin", "type": "string", - "desc": "Indicates if the exception originates from an unhandled rejection or from synchronous errors. Can either be `'uncaughtException'` or `'unhandledRejection'`." + "desc": "Indicates if the exception originates from an unhandled rejection or from an synchronous error. Can either be `'uncaughtException'` or `'unhandledRejection'`. The latter is only used in conjunction with the [`--unhandled-rejections`][] flag set to `strict` and an unhandled rejection." } ], "desc": "

                                                                                                                                                                                                                                                      The 'uncaughtException' event is emitted when an uncaught JavaScript\nexception bubbles all the way back to the event loop. By default, Node.js\nhandles such exceptions by printing the stack trace to stderr and exiting\nwith code 1, overriding any previously set process.exitCode.\nAdding a handler for the 'uncaughtException' event overrides this default\nbehavior. Alternatively, change the process.exitCode in the\n'uncaughtException' handler which will result in the process exiting with the\nprovided exit code. Otherwise, in the presence of such handler the process will\nexit with 0.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.on('uncaughtException', (err, origin) => {\n  fs.writeSync(\n    process.stderr.fd,\n    `Caught exception: ${err}\\n` +\n    `Exception origin: ${origin}`\n  );\n});\n\nsetTimeout(() => {\n  console.log('This will still run.');\n}, 500);\n\n// Intentionally cause an exception, but don't catch it.\nnonexistentFunc();\nconsole.log('This will not run.');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      It is possible to monitor 'uncaughtException' events without overriding the\ndefault behavior to exit the process by installing a\n'uncaughtExceptionMonitor' listener.

                                                                                                                                                                                                                                                      ", @@ -61645,22 +63552,22 @@ ] }, { - "textRaw": "Signal Events", + "textRaw": "Signal events", "name": "SIGINT, SIGHUP, etc.", "type": "event", "params": [], - "desc": "

                                                                                                                                                                                                                                                      Signal events will be emitted when the Node.js process receives a signal. Please\nrefer to signal(7) for a listing of standard POSIX signal names such as\n'SIGINT', 'SIGHUP', etc.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Signals are not available on Worker threads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The signal handler will receive the signal's name ('SIGINT',\n'SIGTERM', etc.) as the first argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The name of each event will be the uppercase common name for the signal (e.g.\n'SIGINT' for SIGINT signals).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Begin reading from stdin so the process does not exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', () => {\n  console.log('Received SIGINT. Press Control-D to exit.');\n});\n\n// Using a single function to handle multiple signals\nfunction handle(signal) {\n  console.log(`Received ${signal}`);\n}\n\nprocess.on('SIGINT', handle);\nprocess.on('SIGTERM', handle);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'SIGUSR1' is reserved by Node.js to start the debugger. It's possible to\ninstall a listener but doing so might interfere with the debugger.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGTERM' and 'SIGINT' have default handlers on non-Windows platforms that\nreset the terminal mode before exiting with code 128 + signal number. If one\nof these signals has a listener installed, its default behavior will be\nremoved (Node.js will no longer exit).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGPIPE' is ignored by default. It can have a listener installed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGHUP' is generated on Windows when the console window is closed, and on\nother platforms under various similar conditions. See signal(7). It can have a\nlistener installed, however Node.js will be unconditionally terminated by\nWindows about 10 seconds later. On non-Windows platforms, the default\nbehavior of SIGHUP is to terminate Node.js, but once a listener has been\ninstalled its default behavior will be removed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGTERM' is not supported on Windows, it can be listened on.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGINT' from the terminal is supported on all platforms, and can usually be\ngenerated with <Ctrl>+C (though this may be configurable). It is not\ngenerated when terminal raw mode is enabled and <Ctrl>+C is used.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGBREAK' is delivered on Windows when <Ctrl>+<Break> is pressed, on\nnon-Windows platforms it can be listened on, but there is no way to send or\ngenerate it.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGWINCH' is delivered when the console has been resized. On Windows, this\nwill only happen on write to the console when the cursor is being moved, or\nwhen a readable tty is used in raw mode.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGKILL' cannot have a listener installed, it will unconditionally\nterminate Node.js on all platforms.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGSTOP' cannot have a listener installed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGBUS', 'SIGFPE', 'SIGSEGV' and 'SIGILL', when not raised\n artificially using kill(2), inherently leave the process in a state from\n which it is not safe to attempt to call JS listeners. Doing so might lead to\n the process hanging in an endless loop, since listeners attached using\n process.on() are called asynchronously and therefore unable to correct the\nunderlying problem.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 0 can be sent to test for the existence of a process, it has no effect if\nthe process exists, but will throw an error if the process does not exist.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Windows does not support signals so has no equivalent to termination by signal,\nbut Node.js offers some emulation with process.kill(), and\nsubprocess.kill():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Sending SIGINT, SIGTERM, and SIGKILL will cause the unconditional\ntermination of the target process, and afterwards, subprocess will report that\nthe process was terminated by signal.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Sending signal 0 can be used as a platform independent way to test for the\nexistence of a process.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Signal events will be emitted when the Node.js process receives a signal. Please\nrefer to signal(7) for a listing of standard POSIX signal names such as\n'SIGINT', 'SIGHUP', etc.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Signals are not available on Worker threads.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The signal handler will receive the signal's name ('SIGINT',\n'SIGTERM', etc.) as the first argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The name of each event will be the uppercase common name for the signal (e.g.\n'SIGINT' for SIGINT signals).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Begin reading from stdin so the process does not exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', () => {\n  console.log('Received SIGINT. Press Control-D to exit.');\n});\n\n// Using a single function to handle multiple signals\nfunction handle(signal) {\n  console.log(`Received ${signal}`);\n}\n\nprocess.on('SIGINT', handle);\nprocess.on('SIGTERM', handle);\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 'SIGUSR1' is reserved by Node.js to start the debugger. It's possible to\ninstall a listener but doing so might interfere with the debugger.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGTERM' and 'SIGINT' have default handlers on non-Windows platforms that\nreset the terminal mode before exiting with code 128 + signal number. If one\nof these signals has a listener installed, its default behavior will be\nremoved (Node.js will no longer exit).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGPIPE' is ignored by default. It can have a listener installed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGHUP' is generated on Windows when the console window is closed, and on\nother platforms under various similar conditions. See signal(7). It can have a\nlistener installed, however Node.js will be unconditionally terminated by\nWindows about 10 seconds later. On non-Windows platforms, the default\nbehavior of SIGHUP is to terminate Node.js, but once a listener has been\ninstalled its default behavior will be removed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGTERM' is not supported on Windows, it can be listened on.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGINT' from the terminal is supported on all platforms, and can usually be\ngenerated with Ctrl+C (though this may be configurable).\nIt is not generated when terminal raw mode is enabled and\nCtrl+C is used.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGBREAK' is delivered on Windows when Ctrl+Break is\npressed. On non-Windows platforms, it can be listened on, but there is no way\nto send or generate it.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGWINCH' is delivered when the console has been resized. On Windows, this\nwill only happen on write to the console when the cursor is being moved, or\nwhen a readable tty is used in raw mode.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGKILL' cannot have a listener installed, it will unconditionally\nterminate Node.js on all platforms.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGSTOP' cannot have a listener installed.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 'SIGBUS', 'SIGFPE', 'SIGSEGV' and 'SIGILL', when not raised\n artificially using kill(2), inherently leave the process in a state from\n which it is not safe to attempt to call JS listeners. Doing so might lead to\n the process hanging in an endless loop, since listeners attached using\n process.on() are called asynchronously and therefore unable to correct the\nunderlying problem.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 0 can be sent to test for the existence of a process, it has no effect if\nthe process exists, but will throw an error if the process does not exist.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Windows does not support signals so has no equivalent to termination by signal,\nbut Node.js offers some emulation with process.kill(), and\nsubprocess.kill():

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Sending SIGINT, SIGTERM, and SIGKILL will cause the unconditional\ntermination of the target process, and afterwards, subprocess will report that\nthe process was terminated by signal.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Sending signal 0 can be used as a platform independent way to test for the\nexistence of a process.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " } ], "type": "module", - "displayName": "Process Events" + "displayName": "Process events" }, { - "textRaw": "Exit Codes", + "textRaw": "Exit codes", "name": "exit_codes", "desc": "

                                                                                                                                                                                                                                                      Node.js will normally exit with a 0 status code when no more async\noperations are pending. The following status codes are used in other\ncases:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • 1 Uncaught Fatal Exception: There was an uncaught exception,\nand it was not handled by a domain or an 'uncaughtException' event\nhandler.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 2: Unused (reserved by Bash for builtin misuse)
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 3 Internal JavaScript Parse Error: The JavaScript source code\ninternal in the Node.js bootstrapping process caused a parse error. This\nis extremely rare, and generally can only happen during development\nof Node.js itself.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 4 Internal JavaScript Evaluation Failure: The JavaScript\nsource code internal in the Node.js bootstrapping process failed to\nreturn a function value when evaluated. This is extremely rare, and\ngenerally can only happen during development of Node.js itself.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 5 Fatal Error: There was a fatal unrecoverable error in V8.\nTypically a message will be printed to stderr with the prefix FATAL ERROR.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 6 Non-function Internal Exception Handler: There was an\nuncaught exception, but the internal fatal exception handler\nfunction was somehow set to a non-function, and could not be called.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 7 Internal Exception Handler Run-Time Failure: There was an\nuncaught exception, and the internal fatal exception handler\nfunction itself threw an error while attempting to handle it. This\ncan happen, for example, if an 'uncaughtException' or\ndomain.on('error') handler throws an error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 8: Unused. In previous versions of Node.js, exit code 8 sometimes\nindicated an uncaught exception.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 9 Invalid Argument: Either an unknown option was specified,\nor an option requiring a value was provided without a value.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 10 Internal JavaScript Run-Time Failure: The JavaScript\nsource code internal in the Node.js bootstrapping process threw an error\nwhen the bootstrapping function was called. This is extremely rare,\nand generally can only happen during development of Node.js itself.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • 12 Invalid Debug Argument: The --inspect and/or --inspect-brk\noptions were set, but the port number chosen was invalid or unavailable.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • >128 Signal Exits: If Node.js receives a fatal signal such as\nSIGKILL or SIGHUP, then its exit code will be 128 plus the\nvalue of the signal code. This is a standard POSIX practice, since\nexit codes are defined to be 7-bit integers, and signal exits set\nthe high-order bit, and then contain the value of the signal code.\nFor example, signal SIGABRT has value 6, so the expected exit\ncode will be 128 + 6, or 134.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Exit Codes" + "displayName": "Exit codes" } ], "methods": [ @@ -62165,7 +64072,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The process.initgroups() method reads the /etc/group file and initializes\nthe group access list, using all groups of which the user is a member. This is\na privileged operation that requires that the Node.js process either have root\naccess or the CAP_SETGID capability.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use care when dropping privileges:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log(process.getgroups());         // [ 0 ]\nprocess.initgroups('bnoordhuis', 1000);   // switch user\nconsole.log(process.getgroups());         // [ 27, 30, 46, 1000, 0 ]\nprocess.setgid(1000);                     // drop root gid\nconsole.log(process.getgroups());         // [ 27, 30, 46, 1000 ]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is only available on POSIX platforms (i.e. not Windows or\nAndroid).\nThis feature is not available in Worker threads.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The process.initgroups() method reads the /etc/group file and initializes\nthe group access list, using all groups of which the user is a member. This is\na privileged operation that requires that the Node.js process either have root\naccess or the CAP_SETGID capability.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use care when dropping privileges:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log(process.getgroups());         // [ 0 ]\nprocess.initgroups('nodeuser', 1000);     // switch user\nconsole.log(process.getgroups());         // [ 27, 30, 46, 1000, 0 ]\nprocess.setgid(1000);                     // drop root gid\nconsole.log(process.getgroups());         // [ 27, 30, 46, 1000 ]\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is only available on POSIX platforms (i.e. not Windows or\nAndroid).\nThis feature is not available in Worker threads.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`process.kill(pid[, signal])`", @@ -62609,7 +64516,35 @@ "desc": "

                                                                                                                                                                                                                                                      The process.setUncaughtExceptionCaptureCallback() function sets a function\nthat will be invoked when an uncaught exception occurs, which will receive the\nexception value itself as its first argument.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If such a function is set, the 'uncaughtException' event will\nnot be emitted. If --abort-on-uncaught-exception was passed from the\ncommand line or set through v8.setFlagsFromString(), the process will\nnot abort.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To unset the capture function,\nprocess.setUncaughtExceptionCaptureCallback(null) may be used. Calling this\nmethod with a non-null argument while another capture function is set will\nthrow an error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using this function is mutually exclusive with using the deprecated\ndomain built-in module.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "`process.umask([mask])`", + "textRaw": "`process.umask()`", + "type": "method", + "name": "umask", + "meta": { + "added": [ + "v0.1.19" + ], + "changes": [ + { + "version": [ + "v12.19.0", + "v14.0.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/32499", + "description": "Calling `process.umask()` with no arguments is deprecated." + } + ] + }, + "stability": 0, + "stabilityText": "Deprecated. Calling `process.umask()` with no argument causes\nthe process-wide umask to be written twice. This introduces a race condition\nbetween threads, and is a potential security vulnerability. There is no safe,\ncross-platform alternative API.", + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      process.umask() returns the Node.js process's file mode creation mask. Child\nprocesses inherit the mask from the parent process.

                                                                                                                                                                                                                                                      " + }, + { + "textRaw": "`process.umask(mask)`", "type": "method", "name": "umask", "meta": { @@ -62629,7 +64564,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      The process.umask() method sets or returns the Node.js process's file mode\ncreation mask. Child processes inherit the mask from the parent process. Invoked\nwithout an argument, the current mask is returned, otherwise the umask is set to\nthe argument value and the previous mask is returned.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const newmask = 0o022;\nconst oldmask = process.umask(newmask);\nconsole.log(\n  `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`\n);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Worker threads are able to read the umask, however attempting to set the\numask will result in a thrown exception.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      process.umask(mask) sets the Node.js process's file mode creation mask. Child\nprocesses inherit the mask from the parent process. Returns the previous mask.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const newmask = 0o022;\nconst oldmask = process.umask(newmask);\nconsole.log(\n  `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`\n);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In Worker threads, process.umask(mask) will throw an exception.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`process.uptime()`", @@ -62665,7 +64600,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The process.allowedNodeEnvironmentFlags property is a special,\nread-only Set of flags allowable within the NODE_OPTIONS\nenvironment variable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      process.allowedNodeEnvironmentFlags extends Set, but overrides\nSet.prototype.has to recognize several different possible flag\nrepresentations. process.allowedNodeEnvironmentFlags.has() will\nreturn true in the following cases:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Flags may omit leading single (-) or double (--) dashes; e.g.,\ninspect-brk for --inspect-brk, or r for -r.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Flags passed through to V8 (as listed in --v8-options) may replace\none or more non-leading dashes for an underscore, or vice-versa;\ne.g., --perf_basic_prof, --perf-basic-prof, --perf_basic-prof,\netc.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Flags may contain one or more equals (=) characters; all\ncharacters after and including the first equals will be ignored;\ne.g., --stack-trace-limit=100.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Flags must be allowable within NODE_OPTIONS.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When iterating over process.allowedNodeEnvironmentFlags, flags will\nappear only once; each will begin with one or more dashes. Flags\npassed through to V8 will contain underscores instead of non-leading\ndashes:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.allowedNodeEnvironmentFlags.forEach((flag) => {\n  // -r\n  // --inspect-brk\n  // --abort_on_uncaught_exception\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The methods add(), clear(), and delete() of\nprocess.allowedNodeEnvironmentFlags do nothing, and will fail\nsilently.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If Node.js was compiled without NODE_OPTIONS support (shown in\nprocess.config), process.allowedNodeEnvironmentFlags will\ncontain what would have been allowable.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The process.allowedNodeEnvironmentFlags property is a special,\nread-only Set of flags allowable within the NODE_OPTIONS\nenvironment variable.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      process.allowedNodeEnvironmentFlags extends Set, but overrides\nSet.prototype.has to recognize several different possible flag\nrepresentations. process.allowedNodeEnvironmentFlags.has() will\nreturn true in the following cases:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Flags may omit leading single (-) or double (--) dashes; e.g.,\ninspect-brk for --inspect-brk, or r for -r.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Flags passed through to V8 (as listed in --v8-options) may replace\none or more non-leading dashes for an underscore, or vice-versa;\ne.g., --perf_basic_prof, --perf-basic-prof, --perf_basic-prof,\netc.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Flags may contain one or more equals (=) characters; all\ncharacters after and including the first equals will be ignored;\ne.g., --stack-trace-limit=100.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Flags must be allowable within NODE_OPTIONS.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When iterating over process.allowedNodeEnvironmentFlags, flags will\nappear only once; each will begin with one or more dashes. Flags\npassed through to V8 will contain underscores instead of non-leading\ndashes:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.allowedNodeEnvironmentFlags.forEach((flag) => {\n  // -r\n  // --inspect-brk\n  // --abort_on_uncaught_exception\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The methods add(), clear(), and delete() of\nprocess.allowedNodeEnvironmentFlags do nothing, and will fail\nsilently.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If Node.js was compiled without NODE_OPTIONS support (shown in\nprocess.config), process.allowedNodeEnvironmentFlags will\ncontain what would have been allowable.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`arch` {string}", @@ -62796,7 +64731,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The process.execPath property returns the absolute pathname of the executable\nthat started the Node.js process.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      '/usr/local/bin/node'\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The process.execPath property returns the absolute pathname of the executable\nthat started the Node.js process. Symbolic links, if any, are resolved.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      '/usr/local/bin/node'\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`exitCode` {integer}", @@ -62870,7 +64805,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The process.ppid property returns the PID of the current parent process.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log(`The parent process is pid ${process.ppid}`);\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The process.ppid property returns the PID of the parent of the\ncurrent process.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log(`The parent process is pid ${process.ppid}`);\n
                                                                                                                                                                                                                                                      " }, { "textRaw": "`release` {Object}", @@ -62888,7 +64823,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      The process.release property returns an Object containing metadata related\nto the current release, including URLs for the source tarball and headers-only\ntarball.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      process.release contains the following properties:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • name <string> A value that will always be 'node' for Node.js. For\nlegacy io.js releases, this will be 'io.js'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • sourceUrl <string> an absolute URL pointing to a .tar.gz file containing\nthe source code of the current release.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • headersUrl<string> an absolute URL pointing to a .tar.gz file containing\nonly the source header files for the current release. This file is\nsignificantly smaller than the full source file and can be used for compiling\nNode.js native add-ons.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • libUrl <string> an absolute URL pointing to a node.lib file matching the\narchitecture and version of the current release. This file is used for\ncompiling Node.js native add-ons. This property is only present on Windows\nbuilds of Node.js and will be missing on all other platforms.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        lts <string> a string label identifying the LTS label for this release.\nThis property only exists for LTS releases and is undefined for all other\nrelease types, including Current releases. Currently the valid values are:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'Argon' for the 4.x LTS line beginning with 4.2.0.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • 'Boron' for the 6.x LTS line beginning with 6.9.0.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • 'Carbon' for the 8.x LTS line beginning with 8.9.1.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  name: 'node',\n  lts: 'Argon',\n  sourceUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5.tar.gz',\n  headersUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5-headers.tar.gz',\n  libUrl: 'https://nodejs.org/download/release/v4.4.5/win-x64/node.lib'\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In custom builds from non-release versions of the source tree, only the\nname property may be present. The additional properties should not be\nrelied upon to exist.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The process.release property returns an Object containing metadata related\nto the current release, including URLs for the source tarball and headers-only\ntarball.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      process.release contains the following properties:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • name <string> A value that will always be 'node' for Node.js. For\nlegacy io.js releases, this will be 'io.js'.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • sourceUrl <string> an absolute URL pointing to a .tar.gz file containing\nthe source code of the current release.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • headersUrl<string> an absolute URL pointing to a .tar.gz file containing\nonly the source header files for the current release. This file is\nsignificantly smaller than the full source file and can be used for compiling\nNode.js native add-ons.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • libUrl <string> an absolute URL pointing to a node.lib file matching the\narchitecture and version of the current release. This file is used for\ncompiling Node.js native add-ons. This property is only present on Windows\nbuilds of Node.js and will be missing on all other platforms.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • lts <string> a string label identifying the LTS label for this release.\nThis property only exists for LTS releases and is undefined for all other\nrelease types, including Current releases.\nValid values include the LTS Release Codenames (including those\nthat are no longer supported). A non-exhaustive example of\nthese codenames includes:\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • 'Dubnium' for the 10.x LTS line beginning with 10.13.0.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • 'Erbium' for the 12.x LTS line beginning with 12.13.0.\nFor other LTS Release Codenames, see Node.js Changelog Archive
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      {\n  name: 'node',\n  lts: 'Erbium',\n  sourceUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1.tar.gz',\n  headersUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1-headers.tar.gz',\n  libUrl: 'https://nodejs.org/download/release/v12.18.1/win-x64/node.lib'\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In custom builds from non-release versions of the source tree, only the\nname property may be present. The additional properties should not be\nrelied upon to exist.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`report` {Object}", @@ -62902,7 +64837,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -62932,7 +64867,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -62950,7 +64885,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -62982,7 +64917,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -63000,7 +64935,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -63018,7 +64953,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -63038,7 +64973,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -63073,7 +65008,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -63123,7 +65058,7 @@ "textRaw": "`stdin` {Stream}", "type": "Stream", "name": "stdin", - "desc": "

                                                                                                                                                                                                                                                      The process.stdin property returns a stream connected to\nstdin (fd 0). It is a net.Socket (which is a Duplex\nstream) unless fd 0 refers to a file, in which case it is\na Readable stream.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      process.stdin.setEncoding('utf8');\n\nprocess.stdin.on('readable', () => {\n  let chunk;\n  // Use a loop to make sure we read all available data.\n  while ((chunk = process.stdin.read()) !== null) {\n    process.stdout.write(`data: ${chunk}`);\n  }\n});\n\nprocess.stdin.on('end', () => {\n  process.stdout.write('end');\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As a Duplex stream, process.stdin can also be used in \"old\" mode that\nis compatible with scripts written for Node.js prior to v0.10.\nFor more information see Stream compatibility.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In \"old\" streams mode the stdin stream is paused by default, so one\nmust call process.stdin.resume() to read from it. Note also that calling\nprocess.stdin.resume() itself would switch stream to \"old\" mode.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The process.stdin property returns a stream connected to\nstdin (fd 0). It is a net.Socket (which is a Duplex\nstream) unless fd 0 refers to a file, in which case it is\na Readable stream.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For details of how to read from stdin see readable.read().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As a Duplex stream, process.stdin can also be used in \"old\" mode that\nis compatible with scripts written for Node.js prior to v0.10.\nFor more information see Stream compatibility.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In \"old\" streams mode the stdin stream is paused by default, so one\nmust call process.stdin.resume() to read from it. Note also that calling\nprocess.stdin.resume() itself would switch stream to \"old\" mode.

                                                                                                                                                                                                                                                      ", "properties": [ { "textRaw": "`fd` {number}", @@ -63150,7 +65085,7 @@ { "textRaw": "A note on process I/O", "name": "a_note_on_process_i/o", - "desc": "

                                                                                                                                                                                                                                                      process.stdout and process.stderr differ from other Node.js streams in\nimportant ways:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. They are used internally by console.log() and console.error(),\nrespectively.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        Writes may be synchronous depending on what the stream is connected to\nand whether the system is Windows or POSIX:

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Files: synchronous on Windows and POSIX
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • TTYs (Terminals): asynchronous on Windows, synchronous on POSIX
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • Pipes (and sockets): synchronous on Windows, asynchronous on POSIX
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These behaviors are partly for historical reasons, as changing them would\ncreate backwards incompatibility, but they are also expected by some users.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Synchronous writes avoid problems such as output written with console.log() or\nconsole.error() being unexpectedly interleaved, or not written at all if\nprocess.exit() is called before an asynchronous write completes. See\nprocess.exit() for more information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: Synchronous writes block the event loop until the write has\ncompleted. This can be near instantaneous in the case of output to a file, but\nunder high system load, pipes that are not being read at the receiving end, or\nwith slow terminals or file systems, its possible for the event loop to be\nblocked often enough and long enough to have severe negative performance\nimpacts. This may not be a problem when writing to an interactive terminal\nsession, but consider this particularly careful when doing production logging to\nthe process output streams.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To check if a stream is connected to a TTY context, check the isTTY\nproperty.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node -p \"Boolean(process.stdin.isTTY)\"\ntrue\n$ echo \"foo\" | node -p \"Boolean(process.stdin.isTTY)\"\nfalse\n$ node -p \"Boolean(process.stdout.isTTY)\"\ntrue\n$ node -p \"Boolean(process.stdout.isTTY)\" | cat\nfalse\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See the TTY documentation for more information.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      process.stdout and process.stderr differ from other Node.js streams in\nimportant ways:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. They are used internally by console.log() and console.error(),\nrespectively.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Writes may be synchronous depending on what the stream is connected to\nand whether the system is Windows or POSIX:\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • Files: synchronous on Windows and POSIX
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • TTYs (Terminals): asynchronous on Windows, synchronous on POSIX
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        • Pipes (and sockets): synchronous on Windows, asynchronous on POSIX
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      These behaviors are partly for historical reasons, as changing them would\ncreate backward incompatibility, but they are also expected by some users.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Synchronous writes avoid problems such as output written with console.log() or\nconsole.error() being unexpectedly interleaved, or not written at all if\nprocess.exit() is called before an asynchronous write completes. See\nprocess.exit() for more information.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Warning: Synchronous writes block the event loop until the write has\ncompleted. This can be near instantaneous in the case of output to a file, but\nunder high system load, pipes that are not being read at the receiving end, or\nwith slow terminals or file systems, its possible for the event loop to be\nblocked often enough and long enough to have severe negative performance\nimpacts. This may not be a problem when writing to an interactive terminal\nsession, but consider this particularly careful when doing production logging to\nthe process output streams.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To check if a stream is connected to a TTY context, check the isTTY\nproperty.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node -p \"Boolean(process.stdin.isTTY)\"\ntrue\n$ echo \"foo\" | node -p \"Boolean(process.stdin.isTTY)\"\nfalse\n$ node -p \"Boolean(process.stdout.isTTY)\"\ntrue\n$ node -p \"Boolean(process.stdout.isTTY)\" | cat\nfalse\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See the TTY documentation for more information.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "A note on process I/O" } @@ -63178,7 +65113,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The process.title property returns the current process title (i.e. returns\nthe current value of ps). Assigning a new value to process.title modifies\nthe current value of ps.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a new value is assigned, different platforms will impose different maximum\nlength restrictions on the title. Usually such restrictions are quite limited.\nFor instance, on Linux and macOS, process.title is limited to the size of the\nbinary name plus the length of the command line arguments because setting the\nprocess.title overwrites the argv memory of the process. Node.js v0.8\nallowed for longer process title strings by also overwriting the environ\nmemory but that was potentially insecure and confusing in some (rather obscure)\ncases.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The process.title property returns the current process title (i.e. returns\nthe current value of ps). Assigning a new value to process.title modifies\nthe current value of ps.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When a new value is assigned, different platforms will impose different maximum\nlength restrictions on the title. Usually such restrictions are quite limited.\nFor instance, on Linux and macOS, process.title is limited to the size of the\nbinary name plus the length of the command line arguments because setting the\nprocess.title overwrites the argv memory of the process. Node.js v0.8\nallowed for longer process title strings by also overwriting the environ\nmemory but that was potentially insecure and confusing in some (rather obscure)\ncases.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Assigning a value to process.title might not result in an accurate label\nwithin process manager applications such as macOS Activity Monitor or Windows\nServices Manager.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`traceDeprecation` {boolean}", @@ -63202,7 +65137,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      The process.version property returns the Node.js version string.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log(`Version: ${process.version}`);\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The process.version property contains the Node.js version string.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      console.log(`Version: ${process.version}`);\n// Version: v14.8.0\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To get the version string without the prepended v, use\nprocess.versions.node.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`versions` {Object}", diff -Nru nodejs-mozilla-12.18.1/doc/api/assert.html nodejs-mozilla-12.22.12/doc/api/assert.html --- nodejs-mozilla-12.18.1/doc/api/assert.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/assert.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Assert | Node.js v12.18.1 Documentation + + Assert | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                      • - Index + Index
                                                                                                                                                                                                                                                      • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                      • View another version -
                                                                                                                                                                                                                                                        1. 14.x
                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                          1. 17.x
                                                                                                                                                                                                                                                          2. +
                                                                                                                                                                                                                                                          3. 16.x LTS
                                                                                                                                                                                                                                                          4. +
                                                                                                                                                                                                                                                          5. 15.x
                                                                                                                                                                                                                                                          6. +
                                                                                                                                                                                                                                                          7. 14.x LTS
                                                                                                                                                                                                                                                          8. 13.x
                                                                                                                                                                                                                                                          9. 12.x LTS
                                                                                                                                                                                                                                                          10. 11.x
                                                                                                                                                                                                                                                          11. -
                                                                                                                                                                                                                                                          12. 10.x LTS
                                                                                                                                                                                                                                                          13. +
                                                                                                                                                                                                                                                          14. 10.x
                                                                                                                                                                                                                                                          15. 9.x
                                                                                                                                                                                                                                                          16. 8.x
                                                                                                                                                                                                                                                          17. 7.x
                                                                                                                                                                                                                                                          18. @@ -121,26 +128,29 @@

                                                                                                                                                                                                                                                            Table of Contents

                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                              Assert

                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                            • Assert
                                                                                                                                                                                                                                                              • Strict assertion mode
                                                                                                                                                                                                                                                              • Legacy assertion mode
                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                Class: assert.AssertionError

                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                              • Class: assert.AssertionError
                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                              • Class: assert.CallTracker + +
                                                                                                                                                                                                                                                              • assert(value[, message])
                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                assert.deepEqual(actual, expected[, message])

                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                              • assert.deepEqual(actual, expected[, message])
                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                assert.deepStrictEqual(actual, expected[, message])

                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                              • assert.deepStrictEqual(actual, expected[, message]) @@ -170,6 +180,7 @@

                                                                                                                                                                                                                                                                Assert#

                                                                                                                                                                                                                                                                Stability: 2 - Stable

                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                Source Code: lib/assert.js

                                                                                                                                                                                                                                                                The assert module provides a set of assertion functions for verifying invariants.

                                                                                                                                                                                                                                                                Strict assertion mode#

                                                                                                                                                                                                                                                                @@ -178,7 +189,7 @@ - + @@ -194,26 +205,24 @@

                                                                                                                                                                                                                                                                In strict assertion mode, error messages for objects display a diff. In legacy assertion mode, error messages for objects display the objects, often truncated.

                                                                                                                                                                                                                                                                To use strict assertion mode:

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                const assert = require('assert').strict;
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                const assert = require('assert').strict;

                                                                                                                                                                                                                                                                Example error diff:

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                const assert = require('assert').strict;
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                const assert = require('assert').strict;
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]);
                                                                                                                                                                                                                                                                -// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                -// + actual - expected ... Lines skipped
                                                                                                                                                                                                                                                                -//
                                                                                                                                                                                                                                                                -//   [
                                                                                                                                                                                                                                                                -//     [
                                                                                                                                                                                                                                                                -// ...
                                                                                                                                                                                                                                                                -//       2,
                                                                                                                                                                                                                                                                -// +     3
                                                                                                                                                                                                                                                                -// -     '3'
                                                                                                                                                                                                                                                                -//     ],
                                                                                                                                                                                                                                                                -// ...
                                                                                                                                                                                                                                                                -//     5
                                                                                                                                                                                                                                                                -//   ]
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]); +// AssertionError: Expected inputs to be strictly deep-equal: +// + actual - expected ... Lines skipped +// +// [ +// [ +// ... +// 2, +// + 3 +// - '3' +// ], +// ... +// 5 +// ]

                                                                                                                                                                                                                                                                To deactivate the colors, use the NO_COLOR or NODE_DISABLE_COLORS environment variables. This will also deactivate the colors in the REPL. For more on color support in terminal environments, read the tty @@ -227,16 +236,14 @@

                                                                                                                                                                                                                                                              • assert.notEqual()
                                                                                                                                                                                                                                                              • To use legacy assertion mode:

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                const assert = require('assert');
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                const assert = require('assert');

                                                                                                                                                                                                                                                                Whenever possible, use the strict assertion mode instead. Otherwise, the Abstract Equality Comparison may cause surprising results. This is especially true for assert.deepEqual(), where the comparison rules are lax:

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                // WARNING: This does not throw an AssertionError!
                                                                                                                                                                                                                                                                -assert.deepEqual(/a/gi, new Date());
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                Class: assert.AssertionError[src]#

                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                // WARNING: This does not throw an AssertionError!
                                                                                                                                                                                                                                                                +assert.deepEqual(/a/gi, new Date());
                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                Class: assert.AssertionError[src]#

                                                                                                                                                                                                                                                                @@ -247,8 +254,7 @@ Added in: v0.1.21
                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                  options <Object>

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                • options <Object>
                                                                                                                                                                                                                                                                  • message <string> If provided, the error message is set to this value.
                                                                                                                                                                                                                                                                  • actual <any> The actual property on the error instance.
                                                                                                                                                                                                                                                                  • @@ -273,29 +279,148 @@ assertion error.
                                                                                                                                                                                                                                                                  • operator <string> Set to the passed in operator value.
                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                  const assert = require('assert');
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  const assert = require('assert');
                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                  -// Generate an AssertionError to compare the error message later:
                                                                                                                                                                                                                                                                  -const { message } = new assert.AssertionError({
                                                                                                                                                                                                                                                                  -  actual: 1,
                                                                                                                                                                                                                                                                  -  expected: 2,
                                                                                                                                                                                                                                                                  -  operator: 'strictEqual'
                                                                                                                                                                                                                                                                  +// Generate an AssertionError to compare the error message later:
                                                                                                                                                                                                                                                                  +const { message } = new assert.AssertionError({
                                                                                                                                                                                                                                                                  +  actual: 1,
                                                                                                                                                                                                                                                                  +  expected: 2,
                                                                                                                                                                                                                                                                  +  operator: 'strictEqual'
                                                                                                                                                                                                                                                                   });
                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                  -// Verify error output:
                                                                                                                                                                                                                                                                  -try {
                                                                                                                                                                                                                                                                  -  assert.strictEqual(1, 2);
                                                                                                                                                                                                                                                                  -} catch (err) {
                                                                                                                                                                                                                                                                  -  assert(err instanceof assert.AssertionError);
                                                                                                                                                                                                                                                                  +// Verify error output:
                                                                                                                                                                                                                                                                  +try {
                                                                                                                                                                                                                                                                  +  assert.strictEqual(1, 2);
                                                                                                                                                                                                                                                                  +} catch (err) {
                                                                                                                                                                                                                                                                  +  assert(err instanceof assert.AssertionError);
                                                                                                                                                                                                                                                                     assert.strictEqual(err.message, message);
                                                                                                                                                                                                                                                                  -  assert.strictEqual(err.name, 'AssertionError');
                                                                                                                                                                                                                                                                  -  assert.strictEqual(err.actual, 1);
                                                                                                                                                                                                                                                                  -  assert.strictEqual(err.expected, 2);
                                                                                                                                                                                                                                                                  -  assert.strictEqual(err.code, 'ERR_ASSERTION');
                                                                                                                                                                                                                                                                  -  assert.strictEqual(err.operator, 'strictEqual');
                                                                                                                                                                                                                                                                  -  assert.strictEqual(err.generatedMessage, true);
                                                                                                                                                                                                                                                                  -}
                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                  + assert.strictEqual(err.name, 'AssertionError'); + assert.strictEqual(err.actual, 1); + assert.strictEqual(err.expected, 2); + assert.strictEqual(err.code, 'ERR_ASSERTION'); + assert.strictEqual(err.operator, 'strictEqual'); + assert.strictEqual(err.generatedMessage, true); +}
                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                  Class: assert.CallTracker#

                                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                                  Stability: 1 - Experimental

                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                  This feature is currently experimental and behavior might still change.

                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                  ### new assert.CallTracker()

                                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                                  Creates a new CallTracker object which can be used to track if functions +were called a specific number of times. The tracker.verify() must be called +for the verification to take place. The usual pattern would be to call it in a +process.on('exit') handler.

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  const assert = require('assert');
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +const tracker = new assert.CallTracker();
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +function func() {}
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// callsfunc() must be called exactly 1 time before tracker.verify().
                                                                                                                                                                                                                                                                  +const callsfunc = tracker.calls(func, 1);
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +callsfunc();
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Calls tracker.verify() and verifies if all tracker.calls() functions have
                                                                                                                                                                                                                                                                  +// been called exact times.
                                                                                                                                                                                                                                                                  +process.on('exit', () => {
                                                                                                                                                                                                                                                                  +  tracker.verify();
                                                                                                                                                                                                                                                                  +});
                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                  tracker.calls([fn][, exact])#

                                                                                                                                                                                                                                                                  + + +

                                                                                                                                                                                                                                                                  The wrapper function is expected to be called exactly exact times. If the +function has not been called exactly exact times when +tracker.verify() is called, then tracker.verify() will throw an +error.

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  const assert = require('assert');
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Creates call tracker.
                                                                                                                                                                                                                                                                  +const tracker = new assert.CallTracker();
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +function func() {}
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Returns a function that wraps func() that must be called exact times
                                                                                                                                                                                                                                                                  +// before tracker.verify().
                                                                                                                                                                                                                                                                  +const callsfunc = tracker.calls(func);
                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                  tracker.report()#

                                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                  • Returns: <Array> of objects containing information about the wrapper functions +returned by tracker.calls().
                                                                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                                                                  • Object <Object> +
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                    • message <string>
                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                    • actual <number> The actual number of times the function was called.
                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                    • expected <number> The number of times the function was expected to be +called.
                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                    • operator <string> The name of the function that is wrapped.
                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                    • stack <Object> A stack trace of the function.
                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                  The arrays contains information about the expected and actual number of calls of +the functions that have not been called the expected number of times.

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  const assert = require('assert');
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Creates call tracker.
                                                                                                                                                                                                                                                                  +const tracker = new assert.CallTracker();
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +function func() {}
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +function foo() {}
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Returns a function that wraps func() that must be called exact times
                                                                                                                                                                                                                                                                  +// before tracker.verify().
                                                                                                                                                                                                                                                                  +const callsfunc = tracker.calls(func, 2);
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Returns an array containing information on callsfunc()
                                                                                                                                                                                                                                                                  +tracker.report();
                                                                                                                                                                                                                                                                  +// [
                                                                                                                                                                                                                                                                  +//  {
                                                                                                                                                                                                                                                                  +//    message: 'Expected the func function to be executed 2 time(s) but was
                                                                                                                                                                                                                                                                  +//    executed 0 time(s).',
                                                                                                                                                                                                                                                                  +//    actual: 0,
                                                                                                                                                                                                                                                                  +//    expected: 2,
                                                                                                                                                                                                                                                                  +//    operator: 'func',
                                                                                                                                                                                                                                                                  +//    stack: stack trace
                                                                                                                                                                                                                                                                  +//  }
                                                                                                                                                                                                                                                                  +// ]
                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                  tracker.verify()#

                                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                                  Iterates through the list of functions passed to +tracker.calls() and will throw an error for functions that +have not been called the expected number of times.

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  const assert = require('assert');
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Creates call tracker.
                                                                                                                                                                                                                                                                  +const tracker = new assert.CallTracker();
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +function func() {}
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Returns a function that wraps func() that must be called exact times
                                                                                                                                                                                                                                                                  +// before tracker.verify().
                                                                                                                                                                                                                                                                  +const callsfunc = tracker.calls(func, 2);
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +callsfunc();
                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                  +// Will throw an error since callsfunc() was only called once.
                                                                                                                                                                                                                                                                  +tracker.verify();

                                                                                                                                                                                                                                                                  assert(value[, message])#

                                                                                                                                                                                                                                                                • WeakMap and WeakSet comparison does not rely on their values. See below for further details.
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                const assert = require('assert').strict;
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                const assert = require('assert').strict;
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -// This fails because 1 !== '1'.
                                                                                                                                                                                                                                                                -assert.deepStrictEqual({ a: 1 }, { a: '1' });
                                                                                                                                                                                                                                                                -// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                -// + actual - expected
                                                                                                                                                                                                                                                                -//
                                                                                                                                                                                                                                                                -//   {
                                                                                                                                                                                                                                                                -// +   a: 1
                                                                                                                                                                                                                                                                -// -   a: '1'
                                                                                                                                                                                                                                                                -//   }
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -// The following objects don't have own properties
                                                                                                                                                                                                                                                                -const date = new Date();
                                                                                                                                                                                                                                                                -const object = {};
                                                                                                                                                                                                                                                                -const fakeDate = {};
                                                                                                                                                                                                                                                                -Object.setPrototypeOf(fakeDate, Date.prototype);
                                                                                                                                                                                                                                                                +// This fails because 1 !== '1'.
                                                                                                                                                                                                                                                                +assert.deepStrictEqual({ a: 1 }, { a: '1' });
                                                                                                                                                                                                                                                                +// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                +// + actual - expected
                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                +//   {
                                                                                                                                                                                                                                                                +// +   a: 1
                                                                                                                                                                                                                                                                +// -   a: '1'
                                                                                                                                                                                                                                                                +//   }
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +// The following objects don't have own properties
                                                                                                                                                                                                                                                                +const date = new Date();
                                                                                                                                                                                                                                                                +const object = {};
                                                                                                                                                                                                                                                                +const fakeDate = {};
                                                                                                                                                                                                                                                                +Object.setPrototypeOf(fakeDate, Date.prototype);
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -// Different [[Prototype]]:
                                                                                                                                                                                                                                                                +// Different [[Prototype]]:
                                                                                                                                                                                                                                                                 assert.deepStrictEqual(object, fakeDate);
                                                                                                                                                                                                                                                                -// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                -// + actual - expected
                                                                                                                                                                                                                                                                -//
                                                                                                                                                                                                                                                                -// + {}
                                                                                                                                                                                                                                                                -// - Date {}
                                                                                                                                                                                                                                                                +// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                +// + actual - expected
                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                +// + {}
                                                                                                                                                                                                                                                                +// - Date {}
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -// Different type tags:
                                                                                                                                                                                                                                                                +// Different type tags:
                                                                                                                                                                                                                                                                 assert.deepStrictEqual(date, fakeDate);
                                                                                                                                                                                                                                                                -// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                -// + actual - expected
                                                                                                                                                                                                                                                                -//
                                                                                                                                                                                                                                                                -// + 2018-04-26T00:49:08.604Z
                                                                                                                                                                                                                                                                -// - Date {}
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -assert.deepStrictEqual(NaN, NaN);
                                                                                                                                                                                                                                                                -// OK, because of the SameValue comparison
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -// Different unwrapped numbers:
                                                                                                                                                                                                                                                                -assert.deepStrictEqual(new Number(1), new Number(2));
                                                                                                                                                                                                                                                                -// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                -// + actual - expected
                                                                                                                                                                                                                                                                -//
                                                                                                                                                                                                                                                                -// + [Number: 1]
                                                                                                                                                                                                                                                                -// - [Number: 2]
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -assert.deepStrictEqual(new String('foo'), Object('foo'));
                                                                                                                                                                                                                                                                -// OK because the object and the string are identical when unwrapped.
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -assert.deepStrictEqual(-0, -0);
                                                                                                                                                                                                                                                                -// OK
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -// Different zeros using the SameValue Comparison:
                                                                                                                                                                                                                                                                -assert.deepStrictEqual(0, -0);
                                                                                                                                                                                                                                                                -// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                -// + actual - expected
                                                                                                                                                                                                                                                                -//
                                                                                                                                                                                                                                                                -// + 0
                                                                                                                                                                                                                                                                -// - -0
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -const symbol1 = Symbol();
                                                                                                                                                                                                                                                                -const symbol2 = Symbol();
                                                                                                                                                                                                                                                                -assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol1]: 1 });
                                                                                                                                                                                                                                                                -// OK, because it is the same symbol on both objects.
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });
                                                                                                                                                                                                                                                                -// AssertionError [ERR_ASSERTION]: Inputs identical but not reference equal:
                                                                                                                                                                                                                                                                -//
                                                                                                                                                                                                                                                                -// {
                                                                                                                                                                                                                                                                -//   [Symbol()]: 1
                                                                                                                                                                                                                                                                -// }
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -const weakMap1 = new WeakMap();
                                                                                                                                                                                                                                                                -const weakMap2 = new WeakMap([[{}, {}]]);
                                                                                                                                                                                                                                                                -const weakMap3 = new WeakMap();
                                                                                                                                                                                                                                                                -weakMap3.unequal = true;
                                                                                                                                                                                                                                                                +// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                +// + actual - expected
                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                +// + 2018-04-26T00:49:08.604Z
                                                                                                                                                                                                                                                                +// - Date {}
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +assert.deepStrictEqual(NaN, NaN);
                                                                                                                                                                                                                                                                +// OK, because of the SameValue comparison
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +// Different unwrapped numbers:
                                                                                                                                                                                                                                                                +assert.deepStrictEqual(new Number(1), new Number(2));
                                                                                                                                                                                                                                                                +// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                +// + actual - expected
                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                +// + [Number: 1]
                                                                                                                                                                                                                                                                +// - [Number: 2]
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +assert.deepStrictEqual(new String('foo'), Object('foo'));
                                                                                                                                                                                                                                                                +// OK because the object and the string are identical when unwrapped.
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +assert.deepStrictEqual(-0, -0);
                                                                                                                                                                                                                                                                +// OK
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +// Different zeros using the SameValue Comparison:
                                                                                                                                                                                                                                                                +assert.deepStrictEqual(0, -0);
                                                                                                                                                                                                                                                                +// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                +// + actual - expected
                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                +// + 0
                                                                                                                                                                                                                                                                +// - -0
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +const symbol1 = Symbol();
                                                                                                                                                                                                                                                                +const symbol2 = Symbol();
                                                                                                                                                                                                                                                                +assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol1]: 1 });
                                                                                                                                                                                                                                                                +// OK, because it is the same symbol on both objects.
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +assert.deepStrictEqual({ [symbol1]: 1 }, { [symbol2]: 1 });
                                                                                                                                                                                                                                                                +// AssertionError [ERR_ASSERTION]: Inputs identical but not reference equal:
                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                +// {
                                                                                                                                                                                                                                                                +//   [Symbol()]: 1
                                                                                                                                                                                                                                                                +// }
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +const weakMap1 = new WeakMap();
                                                                                                                                                                                                                                                                +const weakMap2 = new WeakMap([[{}, {}]]);
                                                                                                                                                                                                                                                                +const weakMap3 = new WeakMap();
                                                                                                                                                                                                                                                                +weakMap3.unequal = true;
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                 assert.deepStrictEqual(weakMap1, weakMap2);
                                                                                                                                                                                                                                                                -// OK, because it is impossible to compare the entries
                                                                                                                                                                                                                                                                +// OK, because it is impossible to compare the entries
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -// Fails because weakMap3 has a property that weakMap1 does not contain:
                                                                                                                                                                                                                                                                +// Fails because weakMap3 has a property that weakMap1 does not contain:
                                                                                                                                                                                                                                                                 assert.deepStrictEqual(weakMap1, weakMap3);
                                                                                                                                                                                                                                                                -// AssertionError: Expected inputs to be strictly deep-equal:
                                                                                                                                                                                                                                                                -// + actual - expected
                                                                                                                                                                                                                                                                -//
                                                                                                                                                                                                                                                                -//   WeakMap {
                                                                                                                                                                                                                                                                -// +   [items unknown]
                                                                                                                                                                                                                                                                -// -   [items unknown],
                                                                                                                                                                                                                                                                -// -   unequal: true
                                                                                                                                                                                                                                                                -//   }
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +// AssertionError: Expected inputs to be strictly deep-equal: +// + actual - expected +// +// WeakMap { +// + [items unknown] +// - [items unknown], +// - unequal: true +// }

                                                                                                                                                                                                                                                                If the values are not equal, an AssertionError is thrown with a message property set equal to the value of the message parameter. If the message parameter is undefined, a default error message is assigned. If the message @@ -564,17 +686,16 @@

                                                                                                                                                                                                                                                                Expects the string input not to match the regular expression.

                                                                                                                                                                                                                                                                This feature is currently experimental and the name might change or it might be completely removed again.

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                const assert = require('assert').strict;
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                const assert = require('assert').strict;
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -assert.doesNotMatch('I will fail', /fail/);
                                                                                                                                                                                                                                                                -// AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
                                                                                                                                                                                                                                                                +assert.doesNotMatch('I will fail', /fail/);
                                                                                                                                                                                                                                                                +// AssertionError [ERR_ASSERTION]: The input was expected to not match the ...
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -assert.doesNotMatch(123, /pass/);
                                                                                                                                                                                                                                                                -// AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
                                                                                                                                                                                                                                                                +assert.doesNotMatch(123, /pass/);
                                                                                                                                                                                                                                                                +// AssertionError [ERR_ASSERTION]: The "string" argument must be of type string.
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -assert.doesNotMatch('I will pass', /different/);
                                                                                                                                                                                                                                                                -// OK
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +assert.doesNotMatch('I will pass', /different/); +// OK

                                                                                                                                                                                                                                                                If the values do match, or if the string argument is of another type than string, an AssertionError is thrown with a message property set equal to the value of the message parameter. If the message parameter is @@ -607,21 +728,19 @@

                                                                                                                                                                                                                                                                Besides the async nature to await the completion behaves identically to assert.doesNotThrow().

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                (async () => {
                                                                                                                                                                                                                                                                -  await assert.doesNotReject(
                                                                                                                                                                                                                                                                -    async () => {
                                                                                                                                                                                                                                                                -      throw new TypeError('Wrong value');
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                (async () => {
                                                                                                                                                                                                                                                                +  await assert.doesNotReject(
                                                                                                                                                                                                                                                                +    async () => {
                                                                                                                                                                                                                                                                +      throw new TypeError('Wrong value');
                                                                                                                                                                                                                                                                     },
                                                                                                                                                                                                                                                                -    SyntaxError
                                                                                                                                                                                                                                                                +    SyntaxError
                                                                                                                                                                                                                                                                   );
                                                                                                                                                                                                                                                                -})();
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +})();
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
                                                                                                                                                                                                                                                                -  .then(() => {
                                                                                                                                                                                                                                                                -    // ...
                                                                                                                                                                                                                                                                -  });
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                assert.doesNotReject(Promise.reject(new TypeError('Wrong value')))
                                                                                                                                                                                                                                                                +  .then(() => {
                                                                                                                                                                                                                                                                +    // ...
                                                                                                                                                                                                                                                                +  });

                                                                                                                                                                                                                                                                assert.doesNotThrow(fn[, error][, message])#

                                                                                                                                                                                                                                                                - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/async_hooks.json nodejs-mozilla-12.22.12/doc/api/async_hooks.json --- nodejs-mozilla-12.18.1/doc/api/async_hooks.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/async_hooks.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,12 +3,12 @@ "source": "doc/api/async_hooks.md", "modules": [ { - "textRaw": "Async Hooks", + "textRaw": "Async hooks", "name": "async_hooks", "introduced_in": "v8.1.0", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                The async_hooks module provides an API to track asynchronous resources. It\ncan be accessed using:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const async_hooks = require('async_hooks');\n
                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Source Code: lib/async_hooks.js

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The async_hooks module provides an API to track asynchronous resources. It\ncan be accessed using:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const async_hooks = require('async_hooks');\n
                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "Terminology", @@ -89,11 +89,11 @@ "desc": "

                                                                                                                                                                                                                                                                Registers functions to be called for different lifetime events of each async\noperation.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The callbacks init()/before()/after()/destroy() are called for the\nrespective asynchronous event during a resource's lifetime.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                All callbacks are optional. For example, if only resource cleanup needs to\nbe tracked, then only the destroy callback needs to be passed. The\nspecifics of all functions that can be passed to callbacks is in the\nHook Callbacks section.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const async_hooks = require('async_hooks');\n\nconst asyncHook = async_hooks.createHook({\n  init(asyncId, type, triggerAsyncId, resource) { },\n  destroy(asyncId) { }\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The callbacks will be inherited via the prototype chain:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                class MyAsyncCallbacks {\n  init(asyncId, type, triggerAsyncId, resource) { }\n  destroy(asyncId) {}\n}\n\nclass MyAddedCallbacks extends MyAsyncCallbacks {\n  before(asyncId) { }\n  after(asyncId) { }\n}\n\nconst asyncHook = async_hooks.createHook(new MyAddedCallbacks());\n
                                                                                                                                                                                                                                                                ", "modules": [ { - "textRaw": "Error Handling", + "textRaw": "Error handling", "name": "error_handling", "desc": "

                                                                                                                                                                                                                                                                If any AsyncHook callbacks throw, the application will print the stack trace\nand exit. The exit path does follow that of an uncaught exception, but\nall 'uncaughtException' listeners are removed, thus forcing the process to\nexit. The 'exit' callbacks will still be called unless the application is run\nwith --abort-on-uncaught-exception, in which case a stack trace will be\nprinted and the application exits, leaving a core file.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The reason for this error handling behavior is that these callbacks are running\nat potentially volatile points in an object's lifetime, for example during\nclass construction and destruction. Because of this, it is deemed necessary to\nbring down the process quickly in order to prevent an unintentional abort in the\nfuture. This is subject to change in the future if a comprehensive analysis is\nperformed to ensure an exception can follow the normal control flow without\nunintentional side effects.

                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Error Handling" + "displayName": "Error handling" }, { "textRaw": "Printing in AsyncHooks callbacks", @@ -171,7 +171,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                Resource objects returned by executionAsyncResource() are most often internal\nNode.js handle objects with undocumented APIs. Using any functions or properties\non the object is likely to crash your application and should be avoided.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Using executionAsyncResource() in the top-level execution context will\nreturn an empty object as there is no handle or request object to use,\nbut having an object representing the top-level can be helpful.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const { open } = require('fs');\nconst { executionAsyncId, executionAsyncResource } = require('async_hooks');\n\nconsole.log(executionAsyncId(), executionAsyncResource());  // 1 {}\nopen(__filename, 'r', (err, fd) => {\n  console.log(executionAsyncId(), executionAsyncResource());  // 7 FSReqWrap\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This can be used to implement continuation local storage without the\nuse of a tracking Map to store the metadata:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const { createServer } = require('http');\nconst {\n  executionAsyncId,\n  executionAsyncResource,\n  createHook\n} = require('async_hooks');\nconst sym = Symbol('state'); // Private symbol to avoid pollution\n\ncreateHook({\n  init(asyncId, type, triggerAsyncId, resource) {\n    const cr = executionAsyncResource();\n    if (cr) {\n      resource[sym] = cr[sym];\n    }\n  }\n}).enable();\n\nconst server = createServer(function(req, res) {\n  executionAsyncResource()[sym] = { state: req.url };\n  setTimeout(function() {\n    res.end(JSON.stringify(executionAsyncResource()[sym]));\n  }, 100);\n}).listen(3000);\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Resource objects returned by executionAsyncResource() are most often internal\nNode.js handle objects with undocumented APIs. Using any functions or properties\non the object is likely to crash your application and should be avoided.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Using executionAsyncResource() in the top-level execution context will\nreturn an empty object as there is no handle or request object to use,\nbut having an object representing the top-level can be helpful.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const { open } = require('fs');\nconst { executionAsyncId, executionAsyncResource } = require('async_hooks');\n\nconsole.log(executionAsyncId(), executionAsyncResource());  // 1 {}\nopen(__filename, 'r', (err, fd) => {\n  console.log(executionAsyncId(), executionAsyncResource());  // 7 FSReqWrap\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This can be used to implement continuation local storage without the\nuse of a tracking Map to store the metadata:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const { createServer } = require('http');\nconst {\n  executionAsyncId,\n  executionAsyncResource,\n  createHook\n} = require('async_hooks');\nconst sym = Symbol('state'); // Private symbol to avoid pollution\n\ncreateHook({\n  init(asyncId, type, triggerAsyncId, resource) {\n    const cr = executionAsyncResource();\n    if (cr) {\n      resource[sym] = cr[sym];\n    }\n  }\n}).enable();\n\nconst server = createServer((req, res) => {\n  executionAsyncResource()[sym] = { state: req.url };\n  setTimeout(function() {\n    res.end(JSON.stringify(executionAsyncResource()[sym]));\n  }, 100);\n}).listen(3000);\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`async_hooks.executionAsyncId()`", @@ -222,7 +222,7 @@ ], "modules": [ { - "textRaw": "Hook Callbacks", + "textRaw": "Hook callbacks", "name": "hook_callbacks", "desc": "

                                                                                                                                                                                                                                                                Key events in the lifetime of asynchronous events have been categorized into\nfour areas: instantiation, before/after the callback is called, and when the\ninstance is destroyed.

                                                                                                                                                                                                                                                                ", "methods": [ @@ -272,21 +272,21 @@ { "textRaw": "`triggerAsyncId`", "name": "`triggerasyncid`", - "desc": "

                                                                                                                                                                                                                                                                triggerAsyncId is the asyncId of the resource that caused (or \"triggered\")\nthe new resource to initialize and that caused init to call. This is different\nfrom async_hooks.executionAsyncId() that only shows when a resource was\ncreated, while triggerAsyncId shows why a resource was created.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The following is a simple demonstration of triggerAsyncId:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                async_hooks.createHook({\n  init(asyncId, type, triggerAsyncId) {\n    const eid = async_hooks.executionAsyncId();\n    fs.writeSync(\n      1, `${type}(${asyncId}): trigger: ${triggerAsyncId} execution: ${eid}\\n`);\n  }\n}).enable();\n\nrequire('net').createServer((conn) => {}).listen(8080);\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Output when hitting the server with nc localhost 8080:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                TCPSERVERWRAP(5): trigger: 1 execution: 1\nTCPWRAP(7): trigger: 5 execution: 0\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The TCPSERVERWRAP is the server which receives the connections.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The TCPWRAP is the new connection from the client. When a new\nconnection is made, the TCPWrap instance is immediately constructed. This\nhappens outside of any JavaScript stack. (An executionAsyncId() of 0 means\nthat it is being executed from C++ with no JavaScript stack above it.) With only\nthat information, it would be impossible to link resources together in\nterms of what caused them to be created, so triggerAsyncId is given the task\nof propagating what resource is responsible for the new resource's existence.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                triggerAsyncId is the asyncId of the resource that caused (or \"triggered\")\nthe new resource to initialize and that caused init to call. This is different\nfrom async_hooks.executionAsyncId() that only shows when a resource was\ncreated, while triggerAsyncId shows why a resource was created.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The following is a simple demonstration of triggerAsyncId:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                async_hooks.createHook({\n  init(asyncId, type, triggerAsyncId) {\n    const eid = async_hooks.executionAsyncId();\n    fs.writeSync(\n      process.stdout.fd,\n      `${type}(${asyncId}): trigger: ${triggerAsyncId} execution: ${eid}\\n`);\n  }\n}).enable();\n\nrequire('net').createServer((conn) => {}).listen(8080);\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Output when hitting the server with nc localhost 8080:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                TCPSERVERWRAP(5): trigger: 1 execution: 1\nTCPWRAP(7): trigger: 5 execution: 0\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The TCPSERVERWRAP is the server which receives the connections.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The TCPWRAP is the new connection from the client. When a new\nconnection is made, the TCPWrap instance is immediately constructed. This\nhappens outside of any JavaScript stack. (An executionAsyncId() of 0 means\nthat it is being executed from C++ with no JavaScript stack above it.) With only\nthat information, it would be impossible to link resources together in\nterms of what caused them to be created, so triggerAsyncId is given the task\nof propagating what resource is responsible for the new resource's existence.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`triggerAsyncId`" }, { "textRaw": "`resource`", "name": "`resource`", - "desc": "

                                                                                                                                                                                                                                                                resource is an object that represents the actual async resource that has\nbeen initialized. This can contain useful information that can vary based on\nthe value of type. For instance, for the GETADDRINFOREQWRAP resource type,\nresource provides the host name used when looking up the IP address for the\nhost in net.Server.listen(). The API for accessing this information is\ncurrently not considered public, but using the Embedder API, users can provide\nand document their own resource objects. For example, such a resource object\ncould contain the SQL query being executed.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In the case of Promises, the resource object will have an\nisChainedPromise property, set to true if the promise has a parent promise,\nand false otherwise. For example, in the case of b = a.then(handler), a is\nconsidered a parent Promise of b. Here, b is considered a chained promise.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In some cases the resource object is reused for performance reasons, it is\nthus not safe to use it as a key in a WeakMap or add properties to it.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                resource is an object that represents the actual async resource that has\nbeen initialized. This can contain useful information that can vary based on\nthe value of type. For instance, for the GETADDRINFOREQWRAP resource type,\nresource provides the host name used when looking up the IP address for the\nhost in net.Server.listen(). The API for accessing this information is\nnot supported, but using the Embedder API, users can provide\nand document their own resource objects. For example, such a resource object\ncould contain the SQL query being executed.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In the case of Promises, the resource object will have an\nisChainedPromise property, set to true if the promise has a parent promise,\nand false otherwise. For example, in the case of b = a.then(handler), a is\nconsidered a parent Promise of b. Here, b is considered a chained promise.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In some cases the resource object is reused for performance reasons, it is\nthus not safe to use it as a key in a WeakMap or add properties to it.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`resource`" }, { "textRaw": "Asynchronous context example", "name": "asynchronous_context_example", - "desc": "

                                                                                                                                                                                                                                                                The following is an example with additional information about the calls to\ninit between the before and after calls, specifically what the\ncallback to listen() will look like. The output formatting is slightly more\nelaborate to make calling context easier to see.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                let indent = 0;\nasync_hooks.createHook({\n  init(asyncId, type, triggerAsyncId) {\n    const eid = async_hooks.executionAsyncId();\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(\n      1,\n      `${indentStr}${type}(${asyncId}):` +\n      ` trigger: ${triggerAsyncId} execution: ${eid}\\n`);\n  },\n  before(asyncId) {\n    const indentStr = ' '.repeat(indent);\n    fs.writeFileSync('log.out',\n                     `${indentStr}before:  ${asyncId}\\n`, { flag: 'a' });\n    indent += 2;\n  },\n  after(asyncId) {\n    indent -= 2;\n    const indentStr = ' '.repeat(indent);\n    fs.writeFileSync('log.out',\n                     `${indentStr}after:  ${asyncId}\\n`, { flag: 'a' });\n  },\n  destroy(asyncId) {\n    const indentStr = ' '.repeat(indent);\n    fs.writeFileSync('log.out',\n                     `${indentStr}destroy:  ${asyncId}\\n`, { flag: 'a' });\n  },\n}).enable();\n\nrequire('net').createServer(() => {}).listen(8080, () => {\n  // Let's wait 10ms before logging the server started.\n  setTimeout(() => {\n    console.log('>>>', async_hooks.executionAsyncId());\n  }, 10);\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Output from only starting the server:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                TCPSERVERWRAP(5): trigger: 1 execution: 1\nTickObject(6): trigger: 5 execution: 1\nbefore:  6\n  Timeout(7): trigger: 6 execution: 6\nafter:   6\ndestroy: 6\nbefore:  7\n>>> 7\n  TickObject(8): trigger: 7 execution: 7\nafter:   7\nbefore:  8\nafter:   8\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                As illustrated in the example, executionAsyncId() and execution each specify\nthe value of the current execution context; which is delineated by calls to\nbefore and after.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Only using execution to graph resource allocation results in the following:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                Timeout(7) -> TickObject(6) -> root(1)\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The TCPSERVERWRAP is not part of this graph, even though it was the reason for\nconsole.log() being called. This is because binding to a port without a host\nname is a synchronous operation, but to maintain a completely asynchronous\nAPI the user's callback is placed in a process.nextTick().

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The graph only shows when a resource was created, not why, so to track\nthe why use triggerAsyncId.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                The following is an example with additional information about the calls to\ninit between the before and after calls, specifically what the\ncallback to listen() will look like. The output formatting is slightly more\nelaborate to make calling context easier to see.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                let indent = 0;\nasync_hooks.createHook({\n  init(asyncId, type, triggerAsyncId) {\n    const eid = async_hooks.executionAsyncId();\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(\n      process.stdout.fd,\n      `${indentStr}${type}(${asyncId}):` +\n      ` trigger: ${triggerAsyncId} execution: ${eid}\\n`);\n  },\n  before(asyncId) {\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(process.stdout.fd, `${indentStr}before:  ${asyncId}\\n`);\n    indent += 2;\n  },\n  after(asyncId) {\n    indent -= 2;\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(process.stdout.fd, `${indentStr}after:  ${asyncId}\\n`);\n  },\n  destroy(asyncId) {\n    const indentStr = ' '.repeat(indent);\n    fs.writeSync(process.stdout.fd, `${indentStr}destroy:  ${asyncId}\\n`);\n  },\n}).enable();\n\nrequire('net').createServer(() => {}).listen(8080, () => {\n  // Let's wait 10ms before logging the server started.\n  setTimeout(() => {\n    console.log('>>>', async_hooks.executionAsyncId());\n  }, 10);\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Output from only starting the server:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                TCPSERVERWRAP(5): trigger: 1 execution: 1\nTickObject(6): trigger: 5 execution: 1\nbefore:  6\n  Timeout(7): trigger: 6 execution: 6\nafter:   6\ndestroy: 6\nbefore:  7\n>>> 7\n  TickObject(8): trigger: 7 execution: 7\nafter:   7\nbefore:  8\nafter:   8\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                As illustrated in the example, executionAsyncId() and execution each specify\nthe value of the current execution context; which is delineated by calls to\nbefore and after.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Only using execution to graph resource allocation results in the following:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  root(1)\n     ^\n     |\nTickObject(6)\n     ^\n     |\n Timeout(7)\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The TCPSERVERWRAP is not part of this graph, even though it was the reason for\nconsole.log() being called. This is because binding to a port without a host\nname is a synchronous operation, but to maintain a completely asynchronous\nAPI the user's callback is placed in a process.nextTick(). Which is why\nTickObject is present in the output and is a 'parent' for .listen()\ncallback.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The graph only shows when a resource was created, not why, so to track\nthe why use triggerAsyncId. Which can be represented with the following\ngraph:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                 bootstrap(1)\n     |\n     ˅\nTCPSERVERWRAP(5)\n     |\n     ˅\n TickObject(6)\n     |\n     ˅\n  Timeout(7)\n
                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "Asynchronous context example" } @@ -368,7 +368,7 @@ } ], "type": "module", - "displayName": "Hook Callbacks" + "displayName": "Hook callbacks" } ] } @@ -384,7 +384,7 @@ "displayName": "Promise execution tracking" }, { - "textRaw": "JavaScript Embedder API", + "textRaw": "JavaScript embedder API", "name": "javascript_embedder_api", "desc": "

                                                                                                                                                                                                                                                                Library developers that handle their own asynchronous resources performing tasks\nlike I/O, connection pooling, or managing callback queues may use the\nAsyncResource JavaScript API so that all the appropriate callbacks are called.

                                                                                                                                                                                                                                                                ", "classes": [ @@ -393,8 +393,64 @@ "type": "class", "name": "AsyncResource", "desc": "

                                                                                                                                                                                                                                                                The class AsyncResource is designed to be extended by the embedder's async\nresources. Using this, users can easily trigger the lifetime events of their\nown resources.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The init hook will trigger when an AsyncResource is instantiated.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The following is an overview of the AsyncResource API.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const { AsyncResource, executionAsyncId } = require('async_hooks');\n\n// AsyncResource() is meant to be extended. Instantiating a\n// new AsyncResource() also triggers init. If triggerAsyncId is omitted then\n// async_hook.executionAsyncId() is used.\nconst asyncResource = new AsyncResource(\n  type, { triggerAsyncId: executionAsyncId(), requireManualDestroy: false }\n);\n\n// Run a function in the execution context of the resource. This will\n// * establish the context of the resource\n// * trigger the AsyncHooks before callbacks\n// * call the provided function `fn` with the supplied arguments\n// * trigger the AsyncHooks after callbacks\n// * restore the original execution context\nasyncResource.runInAsyncScope(fn, thisArg, ...args);\n\n// Call AsyncHooks destroy callbacks.\nasyncResource.emitDestroy();\n\n// Return the unique ID assigned to the AsyncResource instance.\nasyncResource.asyncId();\n\n// Return the trigger ID for the AsyncResource instance.\nasyncResource.triggerAsyncId();\n
                                                                                                                                                                                                                                                                ", + "classMethods": [ + { + "textRaw": "Static method: `AsyncResource.bind(fn[, type])`", + "type": "classMethod", + "name": "bind", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`fn` {Function} The function to bind to the current execution context.", + "name": "fn", + "type": "Function", + "desc": "The function to bind to the current execution context." + }, + { + "textRaw": "`type` {string} An optional name to associate with the underlying `AsyncResource`.", + "name": "type", + "type": "string", + "desc": "An optional name to associate with the underlying `AsyncResource`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                Binds the given function to the current execution context.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The returned function will have an asyncResource property referencing\nthe AsyncResource to which the function is bound.

                                                                                                                                                                                                                                                                " + } + ], "methods": [ { + "textRaw": "`asyncResource.bind(fn)`", + "type": "method", + "name": "bind", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`fn` {Function} The function to bind to the current `AsyncResource`.", + "name": "fn", + "type": "Function", + "desc": "The function to bind to the current `AsyncResource`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                Binds the given function to execute to this AsyncResource's scope.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The returned function will have an asyncResource property referencing\nthe AsyncResource to which the function is bound.

                                                                                                                                                                                                                                                                " + }, + { "textRaw": "`asyncResource.runInAsyncScope(fn[, thisArg, ...args])`", "type": "method", "name": "runInAsyncScope", @@ -524,10 +580,17 @@ "desc": "

                                                                                                                                                                                                                                                                The following example shows how to use the AsyncResource class to properly\nprovide async tracking for a Worker pool. Other resource pools, such as\ndatabase connection pools, can follow a similar model.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Assuming that the task is adding two numbers, using a file named\ntask_processor.js with the following content:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const { parentPort } = require('worker_threads');\nparentPort.on('message', (task) => {\n  parentPort.postMessage(task.a + task.b);\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                a Worker pool around it could use the following structure:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const { AsyncResource } = require('async_hooks');\nconst { EventEmitter } = require('events');\nconst path = require('path');\nconst { Worker } = require('worker_threads');\n\nconst kTaskInfo = Symbol('kTaskInfo');\nconst kWorkerFreedEvent = Symbol('kWorkerFreedEvent');\n\nclass WorkerPoolTaskInfo extends AsyncResource {\n  constructor(callback) {\n    super('WorkerPoolTaskInfo');\n    this.callback = callback;\n  }\n\n  done(err, result) {\n    this.runInAsyncScope(this.callback, null, err, result);\n    this.emitDestroy();  // `TaskInfo`s are used only once.\n  }\n}\n\nclass WorkerPool extends EventEmitter {\n  constructor(numThreads) {\n    super();\n    this.numThreads = numThreads;\n    this.workers = [];\n    this.freeWorkers = [];\n\n    for (let i = 0; i < numThreads; i++)\n      this.addNewWorker();\n  }\n\n  addNewWorker() {\n    const worker = new Worker(path.resolve(__dirname, 'task_processor.js'));\n    worker.on('message', (result) => {\n      // In case of success: Call the callback that was passed to `runTask`,\n      // remove the `TaskInfo` associated with the Worker, and mark it as free\n      // again.\n      worker[kTaskInfo].done(null, result);\n      worker[kTaskInfo] = null;\n      this.freeWorkers.push(worker);\n      this.emit(kWorkerFreedEvent);\n    });\n    worker.on('error', (err) => {\n      // In case of an uncaught exception: Call the callback that was passed to\n      // `runTask` with the error.\n      if (worker[kTaskInfo])\n        worker[kTaskInfo].done(err, null);\n      else\n        this.emit('error', err);\n      // Remove the worker from the list and start a new Worker to replace the\n      // current one.\n      this.workers.splice(this.workers.indexOf(worker), 1);\n      this.addNewWorker();\n    });\n    this.workers.push(worker);\n    this.freeWorkers.push(worker);\n    this.emit(kWorkerFreedEvent);\n  }\n\n  runTask(task, callback) {\n    if (this.freeWorkers.length === 0) {\n      // No free threads, wait until a worker thread becomes free.\n      this.once(kWorkerFreedEvent, () => this.runTask(task, callback));\n      return;\n    }\n\n    const worker = this.freeWorkers.pop();\n    worker[kTaskInfo] = new WorkerPoolTaskInfo(callback);\n    worker.postMessage(task);\n  }\n\n  close() {\n    for (const worker of this.workers) worker.terminate();\n  }\n}\n\nmodule.exports = WorkerPool;\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Without the explicit tracking added by the WorkerPoolTaskInfo objects,\nit would appear that the callbacks are associated with the individual Worker\nobjects. However, the creation of the Workers is not associated with the\ncreation of the tasks and does not provide information about when tasks\nwere scheduled.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This pool could be used as follows:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const WorkerPool = require('./worker_pool.js');\nconst os = require('os');\n\nconst pool = new WorkerPool(os.cpus().length);\n\nlet finished = 0;\nfor (let i = 0; i < 10; i++) {\n  pool.runTask({ a: 42, b: 100 }, (err, result) => {\n    console.log(i, err, result);\n    if (++finished === 10)\n      pool.close();\n  });\n}\n
                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "Using `AsyncResource` for a `Worker` thread pool" + }, + { + "textRaw": "Integrating `AsyncResource` with `EventEmitter`", + "name": "integrating_`asyncresource`_with_`eventemitter`", + "desc": "

                                                                                                                                                                                                                                                                Event listeners triggered by an EventEmitter may be run in a different\nexecution context than the one that was active when eventEmitter.on() was\ncalled.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The following example shows how to use the AsyncResource class to properly\nassociate an event listener with the correct execution context. The same\napproach can be applied to a Stream or a similar event-driven class.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const { createServer } = require('http');\nconst { AsyncResource, executionAsyncId } = require('async_hooks');\n\nconst server = createServer((req, res) => {\n  req.on('close', AsyncResource.bind(() => {\n    // Execution context is bound to the current outer scope.\n  }));\n  req.on('close', () => {\n    // Execution context is bound to the scope that caused 'close' to emit.\n  });\n  res.end();\n}).listen(3000);\n
                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Integrating `AsyncResource` with `EventEmitter`" } ], "type": "module", - "displayName": "JavaScript Embedder API" + "displayName": "JavaScript embedder API" } ], "classes": [ @@ -678,7 +741,7 @@ { "textRaw": "Troubleshooting", "name": "troubleshooting", - "desc": "

                                                                                                                                                                                                                                                                In most cases your application or library code should have no issues with\nAsyncLocalStorage. But in rare cases you may face situations when the\ncurrent store is lost in one of asynchronous operations. Then you should\nconsider the following options.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If your code is callback-based, it is enough to promisify it with\nutil.promisify(), so it starts working with native promises.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If you need to keep using callback-based API, or your code assumes\na custom thenable implementation, you should use AsyncResource class\nto associate the asynchronous operation with the correct execution context.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                In most cases your application or library code should have no issues with\nAsyncLocalStorage. But in rare cases you may face situations when the\ncurrent store is lost in one of asynchronous operations. In those cases,\nconsider the following options.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If your code is callback-based, it is enough to promisify it with\nutil.promisify(), so it starts working with native promises.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If you need to keep using callback-based API, or your code assumes\na custom thenable implementation, use the AsyncResource class\nto associate the asynchronous operation with the correct execution context.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "Troubleshooting" } @@ -692,7 +755,7 @@ } ], "type": "module", - "displayName": "Async Hooks" + "displayName": "Async hooks" } ] } \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/async_hooks.md nodejs-mozilla-12.22.12/doc/api/async_hooks.md --- nodejs-mozilla-12.18.1/doc/api/async_hooks.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/async_hooks.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,9 +1,11 @@ -# Async Hooks +# Async hooks > Stability: 1 - Experimental + + The `async_hooks` module provides an API to track asynchronous resources. It can be accessed using: @@ -127,7 +129,7 @@ const asyncHook = async_hooks.createHook(new MyAddedCallbacks()); ``` -##### Error Handling +##### Error handling If any `AsyncHook` callbacks throw, the application will print the stack trace and exit. The exit path does follow that of an uncaught exception, but @@ -201,7 +203,7 @@ For API consistency `disable()` also returns the `AsyncHook` instance. -#### Hook Callbacks +#### Hook callbacks Key events in the lifetime of asynchronous events have been categorized into four areas: instantiation, before/after the callback is called, and when the @@ -271,7 +273,8 @@ init(asyncId, type, triggerAsyncId) { const eid = async_hooks.executionAsyncId(); fs.writeSync( - 1, `${type}(${asyncId}): trigger: ${triggerAsyncId} execution: ${eid}\n`); + process.stdout.fd, + `${type}(${asyncId}): trigger: ${triggerAsyncId} execution: ${eid}\n`); } }).enable(); @@ -302,7 +305,7 @@ the value of `type`. For instance, for the `GETADDRINFOREQWRAP` resource type, `resource` provides the host name used when looking up the IP address for the host in `net.Server.listen()`. The API for accessing this information is -currently not considered public, but using the Embedder API, users can provide +not supported, but using the Embedder API, users can provide and document their own resource objects. For example, such a resource object could contain the SQL query being executed. @@ -328,26 +331,23 @@ const eid = async_hooks.executionAsyncId(); const indentStr = ' '.repeat(indent); fs.writeSync( - 1, + process.stdout.fd, `${indentStr}${type}(${asyncId}):` + ` trigger: ${triggerAsyncId} execution: ${eid}\n`); }, before(asyncId) { const indentStr = ' '.repeat(indent); - fs.writeFileSync('log.out', - `${indentStr}before: ${asyncId}\n`, { flag: 'a' }); + fs.writeSync(process.stdout.fd, `${indentStr}before: ${asyncId}\n`); indent += 2; }, after(asyncId) { indent -= 2; const indentStr = ' '.repeat(indent); - fs.writeFileSync('log.out', - `${indentStr}after: ${asyncId}\n`, { flag: 'a' }); + fs.writeSync(process.stdout.fd, `${indentStr}after: ${asyncId}\n`); }, destroy(asyncId) { const indentStr = ' '.repeat(indent); - fs.writeFileSync('log.out', - `${indentStr}destroy: ${asyncId}\n`, { flag: 'a' }); + fs.writeSync(process.stdout.fd, `${indentStr}destroy: ${asyncId}\n`); }, }).enable(); @@ -383,16 +383,38 @@ Only using `execution` to graph resource allocation results in the following: ```console -Timeout(7) -> TickObject(6) -> root(1) + root(1) + ^ + | +TickObject(6) + ^ + | + Timeout(7) ``` The `TCPSERVERWRAP` is not part of this graph, even though it was the reason for `console.log()` being called. This is because binding to a port without a host name is a *synchronous* operation, but to maintain a completely asynchronous -API the user's callback is placed in a `process.nextTick()`. +API the user's callback is placed in a `process.nextTick()`. Which is why +`TickObject` is present in the output and is a 'parent' for `.listen()` +callback. The graph only shows *when* a resource was created, not *why*, so to track -the *why* use `triggerAsyncId`. +the *why* use `triggerAsyncId`. Which can be represented with the following +graph: + +```console + bootstrap(1) + | + ˅ +TCPSERVERWRAP(5) + | + ˅ + TickObject(6) + | + ˅ + Timeout(7) +``` ##### `before(asyncId)` @@ -512,7 +534,7 @@ } }).enable(); -const server = createServer(function(req, res) { +const server = createServer((req, res) => { executionAsyncResource()[sym] = { state: req.url }; setTimeout(function() { res.end(JSON.stringify(executionAsyncResource()[sym])); @@ -631,7 +653,7 @@ will not have the `before` and `after` callbacks fired on them. For more details see the details of the V8 [PromiseHooks][] API. -## JavaScript Embedder API +## JavaScript embedder API Library developers that handle their own asynchronous resources performing tasks like I/O, connection pooling, or managing callback queues may use the @@ -711,6 +733,32 @@ } ``` +#### Static method: `AsyncResource.bind(fn[, type])` + + +* `fn` {Function} The function to bind to the current execution context. +* `type` {string} An optional name to associate with the underlying + `AsyncResource`. + +Binds the given function to the current execution context. + +The returned function will have an `asyncResource` property referencing +the `AsyncResource` to which the function is bound. + +#### `asyncResource.bind(fn)` + + +* `fn` {Function} The function to bind to the current `AsyncResource`. + +Binds the given function to execute to this `AsyncResource`'s scope. + +The returned function will have an `asyncResource` property referencing +the `AsyncResource` to which the function is bound. + #### `asyncResource.runInAsyncScope(fn[, thisArg, ...args])` - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/buffer.json nodejs-mozilla-12.22.12/doc/api/buffer.json --- nodejs-mozilla-12.18.1/doc/api/buffer.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/buffer.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,10 +8,10 @@ "introduced_in": "v0.1.90", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                In Node.js, Buffer objects are used to represent binary data in the form\nof a sequence of bytes. Many Node.js APIs, for example streams and file system\noperations, support Buffers, as interactions with the operating system or\nother processes generally always happen in terms of binary data.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer class is a subclass of the Uint8Array class that is built\ninto the JavaScript language. A number of additional methods are supported\nthat cover additional use cases. Node.js APIs accept plain Uint8Arrays\nwherever Buffers are supported as well.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Instances of the Buffer class, and Uint8Arrays in general,\nare similar to arrays of integers from 0 to 255, but correspond to\nfixed-sized blocks of memory and cannot contain any other values.\nThe size of a Buffer is established when it is created and cannot be changed.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer class is within the global scope, making it unlikely that one\nwould need to ever use require('buffer').Buffer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Creates a zero-filled Buffer of length 10.\nconst buf1 = Buffer.alloc(10);\n\n// Creates a Buffer of length 10,\n// filled with bytes which all have the value `1`.\nconst buf2 = Buffer.alloc(10, 1);\n\n// Creates an uninitialized buffer of length 10.\n// This is faster than calling Buffer.alloc() but the returned\n// Buffer instance might contain old data that needs to be\n// overwritten using fill(), write(), or other functions that fill the Buffer's\n// contents.\nconst buf3 = Buffer.allocUnsafe(10);\n\n// Creates a Buffer containing the bytes [1, 2, 3].\nconst buf4 = Buffer.from([1, 2, 3]);\n\n// Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries\n// are all truncated using `(value & 255)` to fit into the range 0–255.\nconst buf5 = Buffer.from([257, 257.5, -255, '1']);\n\n// Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':\n// [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)\n// [116, 195, 169, 115, 116] (in decimal notation)\nconst buf6 = Buffer.from('tést');\n\n// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].\nconst buf7 = Buffer.from('tést', 'latin1');\n
                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Source Code: lib/buffer.js

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Buffer objects are used to represent a fixed-length sequence of bytes. Many\nNode.js APIs support Buffers.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer class is a subclass of JavaScript's Uint8Array class and\nextends it with methods that cover additional use cases. Node.js APIs accept\nplain Uint8Arrays wherever Buffers are supported as well.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer class is within the global scope, making it unlikely that one\nwould need to ever use require('buffer').Buffer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Creates a zero-filled Buffer of length 10.\nconst buf1 = Buffer.alloc(10);\n\n// Creates a Buffer of length 10,\n// filled with bytes which all have the value `1`.\nconst buf2 = Buffer.alloc(10, 1);\n\n// Creates an uninitialized buffer of length 10.\n// This is faster than calling Buffer.alloc() but the returned\n// Buffer instance might contain old data that needs to be\n// overwritten using fill(), write(), or other functions that fill the Buffer's\n// contents.\nconst buf3 = Buffer.allocUnsafe(10);\n\n// Creates a Buffer containing the bytes [1, 2, 3].\nconst buf4 = Buffer.from([1, 2, 3]);\n\n// Creates a Buffer containing the bytes [1, 1, 1, 1] – the entries\n// are all truncated using `(value & 255)` to fit into the range 0–255.\nconst buf5 = Buffer.from([257, 257.5, -255, '1']);\n\n// Creates a Buffer containing the UTF-8-encoded bytes for the string 'tést':\n// [0x74, 0xc3, 0xa9, 0x73, 0x74] (in hexadecimal notation)\n// [116, 195, 169, 115, 116] (in decimal notation)\nconst buf6 = Buffer.from('tést');\n\n// Creates a Buffer containing the Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].\nconst buf7 = Buffer.from('tést', 'latin1');\n
                                                                                                                                                                                                                                                                ", "modules": [ { - "textRaw": "Buffers and Character Encodings", + "textRaw": "Buffers and character encodings", "name": "buffers_and_character_encodings", "meta": { "changes": [ @@ -27,9 +27,9 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                                When converting between Buffers and strings, a character encoding may be\nspecified. If no character encoding is specified, UTF-8 will be used as the\ndefault.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from('hello world', 'utf8');\n\nconsole.log(buf.toString('hex'));\n// Prints: 68656c6c6f20776f726c64\nconsole.log(buf.toString('base64'));\n// Prints: aGVsbG8gd29ybGQ=\n\nconsole.log(Buffer.from('fhqwhgads', 'utf8'));\n// Prints: <Buffer 66 68 71 77 68 67 61 64 73>\nconsole.log(Buffer.from('fhqwhgads', 'utf16le'));\n// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The character encodings currently supported by Node.js are the following:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'utf8': Multi-byte encoded Unicode characters. Many web pages and other\ndocument formats use UTF-8. This is the default character encoding.\nWhen decoding a Buffer into a string that does not exclusively contain\nvalid UTF-8 data, the Unicode replacement character U+FFFD � will be used\nto represent those errors.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'utf16le': Multi-byte encoded Unicode characters. Unlike 'utf8', each\ncharacter in the string will be encoded using either 2 or 4 bytes.\nNode.js only supports the little-endian variant of UTF-16.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'latin1': Latin-1 stands for ISO-8859-1. This character encoding only\nsupports the Unicode characters from U+0000 to U+00FF. Each character is\nencoded using a single byte. Characters that do not fit into that range are\ntruncated and will be mapped to characters in that range.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Converting a Buffer into a string using one of the above is referred to as\ndecoding, and converting a string into a Buffer is referred to as encoding.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Node.js also supports the following two binary-to-text encodings. For\nbinary-to-text encodings, the naming convention is reversed: Converting a\nBuffer into a string is typically referred to as encoding, and converting a\nstring into a Buffer as decoding.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'base64': Base64 encoding. When creating a Buffer from a string,\nthis encoding will also correctly accept \"URL and Filename Safe Alphabet\" as\nspecified in RFC 4648, Section 5.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'hex': Encode each byte as two hexadecimal characters. Data truncation\nmay occur when decoding string that do exclusively contain valid hexadecimal\ncharacters. See below for an example.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The following legacy character encodings are also supported:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'ascii': For 7-bit ASCII data only. When encoding a string into a\nBuffer, this is equivalent to using 'latin1'. When decoding a Buffer\ninto a string, using encoding this will additionally unset the highest bit of\neach byte before decoding as 'latin1'.\nGenerally, there should be no reason to use this encoding, as 'utf8'\n(or, if the data is known to always be ASCII-only, 'latin1') will be a\nbetter choice when encoding or decoding ASCII-only text. It is only provided\nfor legacy compatibility.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'binary': Alias for 'latin1'. See binary strings for more background\non this topic. The name of this encoding can be very misleading, as all of the\nencodings listed here convert between strings and binary data. For converting\nbetween strings and Buffers, typically 'utf-8' is the right choice.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'ucs2': Alias of 'utf16le'. UCS-2 used to refer to a variant of UTF-16\nthat did not support characters that had code points larger than U+FFFF.\nIn Node.js, these code points are always supported.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                Buffer.from('1ag', 'hex');\n// Prints <Buffer 1a>, data truncated when first non-hexadecimal value\n// ('g') encountered.\n\nBuffer.from('1a7g', 'hex');\n// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').\n\nBuffer.from('1634', 'hex');\n// Prints <Buffer 16 34>, all data represented.\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Modern Web browsers follow the WHATWG Encoding Standard which aliases\nboth 'latin1' and 'ISO-8859-1' to 'win-1252'. This means that while doing\nsomething like http.get(), if the returned charset is one of those listed in\nthe WHATWG specification it is possible that the server actually returned\n'win-1252'-encoded data, and using 'latin1' encoding may incorrectly decode\nthe characters.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                When converting between Buffers and strings, a character encoding may be\nspecified. If no character encoding is specified, UTF-8 will be used as the\ndefault.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from('hello world', 'utf8');\n\nconsole.log(buf.toString('hex'));\n// Prints: 68656c6c6f20776f726c64\nconsole.log(buf.toString('base64'));\n// Prints: aGVsbG8gd29ybGQ=\n\nconsole.log(Buffer.from('fhqwhgads', 'utf8'));\n// Prints: <Buffer 66 68 71 77 68 67 61 64 73>\nconsole.log(Buffer.from('fhqwhgads', 'utf16le'));\n// Prints: <Buffer 66 00 68 00 71 00 77 00 68 00 67 00 61 00 64 00 73 00>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The character encodings currently supported by Node.js are the following:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'utf8': Multi-byte encoded Unicode characters. Many web pages and other\ndocument formats use UTF-8. This is the default character encoding.\nWhen decoding a Buffer into a string that does not exclusively contain\nvalid UTF-8 data, the Unicode replacement character U+FFFD � will be used\nto represent those errors.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'utf16le': Multi-byte encoded Unicode characters. Unlike 'utf8', each\ncharacter in the string will be encoded using either 2 or 4 bytes.\nNode.js only supports the little-endian variant of UTF-16.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'latin1': Latin-1 stands for ISO-8859-1. This character encoding only\nsupports the Unicode characters from U+0000 to U+00FF. Each character is\nencoded using a single byte. Characters that do not fit into that range are\ntruncated and will be mapped to characters in that range.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Converting a Buffer into a string using one of the above is referred to as\ndecoding, and converting a string into a Buffer is referred to as encoding.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Node.js also supports the following two binary-to-text encodings. For\nbinary-to-text encodings, the naming convention is reversed: Converting a\nBuffer into a string is typically referred to as encoding, and converting a\nstring into a Buffer as decoding.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'base64': Base64 encoding. When creating a Buffer from a string,\nthis encoding will also correctly accept \"URL and Filename Safe Alphabet\" as\nspecified in RFC 4648, Section 5. Whitespace characters such as spaces,\ntabs, and new lines contained within the base64-encoded string are ignored.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'hex': Encode each byte as two hexadecimal characters. Data truncation\nmay occur when decoding strings that do exclusively contain valid hexadecimal\ncharacters. See below for an example.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The following legacy character encodings are also supported:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'ascii': For 7-bit ASCII data only. When encoding a string into a\nBuffer, this is equivalent to using 'latin1'. When decoding a Buffer\ninto a string, using this encoding will additionally unset the highest bit of\neach byte before decoding as 'latin1'.\nGenerally, there should be no reason to use this encoding, as 'utf8'\n(or, if the data is known to always be ASCII-only, 'latin1') will be a\nbetter choice when encoding or decoding ASCII-only text. It is only provided\nfor legacy compatibility.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'binary': Alias for 'latin1'. See binary strings for more background\non this topic. The name of this encoding can be very misleading, as all of the\nencodings listed here convert between strings and binary data. For converting\nbetween strings and Buffers, typically 'utf-8' is the right choice.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  'ucs2': Alias of 'utf16le'. UCS-2 used to refer to a variant of UTF-16\nthat did not support characters that had code points larger than U+FFFF.\nIn Node.js, these code points are always supported.

                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                Buffer.from('1ag', 'hex');\n// Prints <Buffer 1a>, data truncated when first non-hexadecimal value\n// ('g') encountered.\n\nBuffer.from('1a7g', 'hex');\n// Prints <Buffer 1a>, data truncated when data ends in single digit ('7').\n\nBuffer.from('1634', 'hex');\n// Prints <Buffer 16 34>, all data represented.\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Modern Web browsers follow the WHATWG Encoding Standard which aliases\nboth 'latin1' and 'ISO-8859-1' to 'win-1252'. This means that while doing\nsomething like http.get(), if the returned charset is one of those listed in\nthe WHATWG specification it is possible that the server actually returned\n'win-1252'-encoded data, and using 'latin1' encoding may incorrectly decode\nthe characters.

                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Buffers and Character Encodings" + "displayName": "Buffers and character encodings" }, { "textRaw": "Buffers and TypedArrays", @@ -43,7 +43,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                                Buffer instances are also Uint8Array instances, which is the language’s\nbuilt-in class for working with binary data. Uint8Array in turn is a\nsubclass of TypedArray. Therefore, all TypedArray methods are also\navailable on Buffers. However, there are subtle incompatibilities between\nthe Buffer API and the TypedArray API.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In particular:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • While TypedArray#slice() creates a copy of part of the TypedArray,\nBuffer#slice() creates a view over the existing Buffer\nwithout copying. This behavior can be surprising, and only exists for legacy\ncompatibility. TypedArray#subarray() can be used to achieve the behavior\nof Buffer#slice() on both Buffers and other\nTypedArrays.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • buf.toString() is incompatible with its TypedArray equivalent.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • A number of methods, e.g. buf.indexOf(), support additional arguments.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                There are two ways to create new TypedArray instances from a Buffer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                When passing a Buffer to a TypedArray constructor, the Buffer’s\nelements will be copied, interpreted as an array of integers, and not as a byte\narray of the target type. For example,\nnew Uint32Array(Buffer.from([1, 2, 3, 4])) creates a 4-element\nUint32Array with elements [1, 2, 3, 4], rather than a\nUint32Array with a single element [0x1020304] or [0x4030201].

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In order to create a TypedArray that shares its memory with the Buffer,\nthe underlying ArrayBuffer can be passed to the TypedArray\nconstructor instead:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from('hello', 'utf16le');\nconst uint16arr = new Uint16Array(\n  buf.buffer, buf.byteOffset, buf.length / Uint16Array.BYTES_PER_ELEMENT);\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                It is also possible to create a new Buffer that shares the same allocated\nmemory as a TypedArray instance by using the TypedArray object’s\n.buffer property in the same way. Buffer.from()\nbehaves like new Uint8Array() in this context.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const arr = new Uint16Array(2);\n\narr[0] = 5000;\narr[1] = 4000;\n\n// Copies the contents of `arr`.\nconst buf1 = Buffer.from(arr);\n// Shares memory with `arr`.\nconst buf2 = Buffer.from(arr.buffer);\n\nconsole.log(buf1);\n// Prints: <Buffer 88 a0>\nconsole.log(buf2);\n// Prints: <Buffer 88 13 a0 0f>\n\narr[1] = 6000;\n\nconsole.log(buf1);\n// Prints: <Buffer 88 a0>\nconsole.log(buf2);\n// Prints: <Buffer 88 13 70 17>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                When creating a Buffer using a TypedArray's .buffer, it is\npossible to use only a portion of the underlying ArrayBuffer by passing in\nbyteOffset and length parameters.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const arr = new Uint16Array(20);\nconst buf = Buffer.from(arr.buffer, 0, 16);\n\nconsole.log(buf.length);\n// Prints: 16\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer.from() and TypedArray.from() have different signatures and\nimplementations. Specifically, the TypedArray variants accept a second\nargument that is a mapping function that is invoked on every element of the\ntyped array:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • TypedArray.from(source[, mapFn[, thisArg]])
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer.from() method, however, does not support the use of a mapping\nfunction:

                                                                                                                                                                                                                                                                \n", + "desc": "

                                                                                                                                                                                                                                                                Buffer instances are also JavaScript Uint8Array and TypedArray\ninstances. All TypedArray methods are available on Buffers. There are,\nhowever, subtle incompatibilities between the Buffer API and the\nTypedArray API.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In particular:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • While TypedArray#slice() creates a copy of part of the TypedArray,\nBuffer#slice() creates a view over the existing Buffer\nwithout copying. This behavior can be surprising, and only exists for legacy\ncompatibility. TypedArray#subarray() can be used to achieve the behavior\nof Buffer#slice() on both Buffers and other\nTypedArrays.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • buf.toString() is incompatible with its TypedArray equivalent.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • A number of methods, e.g. buf.indexOf(), support additional arguments.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                There are two ways to create new TypedArray instances from a Buffer:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • Passing a Buffer to a TypedArray constructor will copy the Buffers\ncontents, interpreted as an array of integers, and not as a byte sequence\nof the target type.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4]);\nconst uint32array = new Uint32Array(buf);\n\nconsole.log(uint32array);\n\n// Prints: Uint32Array(4) [ 1, 2, 3, 4 ]\n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • Passing the Buffers underlying ArrayBuffer will create a\nTypedArray that shares its memory with the Buffer.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from('hello', 'utf16le');\nconst uint16arr = new Uint16Array(\n  buf.buffer,\n  buf.byteOffset,\n  buf.length / Uint16Array.BYTES_PER_ELEMENT);\n\nconsole.log(uint16array);\n\n// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ]\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                It is possible to create a new Buffer that shares the same allocated\nmemory as a TypedArray instance by using the TypedArray object’s\n.buffer property in the same way. Buffer.from()\nbehaves like new Uint8Array() in this context.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const arr = new Uint16Array(2);\n\narr[0] = 5000;\narr[1] = 4000;\n\n// Copies the contents of `arr`.\nconst buf1 = Buffer.from(arr);\n\n// Shares memory with `arr`.\nconst buf2 = Buffer.from(arr.buffer);\n\nconsole.log(buf1);\n// Prints: <Buffer 88 a0>\nconsole.log(buf2);\n// Prints: <Buffer 88 13 a0 0f>\n\narr[1] = 6000;\n\nconsole.log(buf1);\n// Prints: <Buffer 88 a0>\nconsole.log(buf2);\n// Prints: <Buffer 88 13 70 17>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                When creating a Buffer using a TypedArray's .buffer, it is\npossible to use only a portion of the underlying ArrayBuffer by passing in\nbyteOffset and length parameters.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const arr = new Uint16Array(20);\nconst buf = Buffer.from(arr.buffer, 0, 16);\n\nconsole.log(buf.length);\n// Prints: 16\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer.from() and TypedArray.from() have different signatures and\nimplementations. Specifically, the TypedArray variants accept a second\nargument that is a mapping function that is invoked on every element of the\ntyped array:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • TypedArray.from(source[, mapFn[, thisArg]])
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer.from() method, however, does not support the use of a mapping\nfunction:

                                                                                                                                                                                                                                                                \n", "type": "module", "displayName": "Buffers and TypedArrays" }, @@ -55,50 +55,164 @@ "displayName": "Buffers and iteration" }, { - "textRaw": "Buffer Constants", - "name": "buffer_constants", - "meta": { - "added": [ - "v8.2.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                                buffer.constants is a property on the buffer module returned by\nrequire('buffer'), not on the Buffer global or a Buffer instance.

                                                                                                                                                                                                                                                                ", + "textRaw": "`buffer` module APIs", + "name": "`buffer`_module_apis", + "desc": "

                                                                                                                                                                                                                                                                While, the Buffer object is available as a global, there are additional\nBuffer-related APIs that are available only via the buffer module\naccessed using require('buffer').

                                                                                                                                                                                                                                                                ", "properties": [ { - "textRaw": "`MAX_LENGTH` {integer} The largest size allowed for a single `Buffer` instance.", + "textRaw": "`INSPECT_MAX_BYTES` {integer} **Default:** `50`", "type": "integer", - "name": "MAX_LENGTH", + "name": "INSPECT_MAX_BYTES", "meta": { "added": [ - "v8.2.0" + "v0.5.4" ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                On 32-bit architectures, this value currently is (2^30)-1 (~1GB).\nOn 64-bit architectures, this value currently is (2^31)-1 (~2GB).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This value is also available as buffer.kMaxLength.

                                                                                                                                                                                                                                                                ", - "shortDesc": "The largest size allowed for a single `Buffer` instance." + "default": "`50`", + "desc": "

                                                                                                                                                                                                                                                                Returns the maximum number of bytes that will be returned when\nbuf.inspect() is called. This can be overridden by user modules. See\nutil.inspect() for more details on buf.inspect() behavior.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "`MAX_STRING_LENGTH` {integer} The largest length allowed for a single `string` instance.", + "textRaw": "`kMaxLength` {integer} The largest size allowed for a single `Buffer` instance.", "type": "integer", - "name": "MAX_STRING_LENGTH", + "name": "kMaxLength", + "meta": { + "added": [ + "v3.0.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                An alias for buffer.constants.MAX_LENGTH.

                                                                                                                                                                                                                                                                ", + "shortDesc": "The largest size allowed for a single `Buffer` instance." + } + ], + "methods": [ + { + "textRaw": "`buffer.transcode(source, fromEnc, toEnc)`", + "type": "method", + "name": "transcode", + "meta": { + "added": [ + "v7.1.0" + ], + "changes": [ + { + "version": "v8.0.0", + "pr-url": "https://github.com/nodejs/node/pull/10236", + "description": "The `source` parameter can now be a `Uint8Array`." + } + ] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Buffer}", + "name": "return", + "type": "Buffer" + }, + "params": [ + { + "textRaw": "`source` {Buffer|Uint8Array} A `Buffer` or `Uint8Array` instance.", + "name": "source", + "type": "Buffer|Uint8Array", + "desc": "A `Buffer` or `Uint8Array` instance." + }, + { + "textRaw": "`fromEnc` {string} The current encoding.", + "name": "fromEnc", + "type": "string", + "desc": "The current encoding." + }, + { + "textRaw": "`toEnc` {string} To target encoding.", + "name": "toEnc", + "type": "string", + "desc": "To target encoding." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                Re-encodes the given Buffer or Uint8Array instance from one character\nencoding to another. Returns a new Buffer instance.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Throws if the fromEnc or toEnc specify invalid character encodings or if\nconversion from fromEnc to toEnc is not permitted.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Encodings supported by buffer.transcode() are: 'ascii', 'utf8',\n'utf16le', 'ucs2', 'latin1', and 'binary'.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The transcoding process will use substitution characters if a given byte\nsequence cannot be adequately represented in the target encoding. For instance:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buffer = require('buffer');\n\nconst newBuf = buffer.transcode(Buffer.from('€'), 'utf8', 'ascii');\nconsole.log(newBuf.toString('ascii'));\n// Prints: '?'\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Because the Euro () sign is not representable in US-ASCII, it is replaced\nwith ? in the transcoded Buffer.

                                                                                                                                                                                                                                                                " + } + ], + "classes": [ + { + "textRaw": "Class: `SlowBuffer`", + "type": "class", + "name": "SlowBuffer", + "meta": { + "deprecated": [ + "v6.0.0" + ], + "changes": [] + }, + "stability": 0, + "stabilityText": "Deprecated: Use [`Buffer.allocUnsafeSlow()`][] instead.", + "desc": "

                                                                                                                                                                                                                                                                See Buffer.allocUnsafeSlow(). This was never a class in the sense that\nthe constructor always returned a Buffer instance, rather than a SlowBuffer\ninstance.

                                                                                                                                                                                                                                                                ", + "signatures": [ + { + "params": [ + { + "textRaw": "`size` {integer} The desired length of the new `SlowBuffer`.", + "name": "size", + "type": "integer", + "desc": "The desired length of the new `SlowBuffer`." + } + ], + "desc": "

                                                                                                                                                                                                                                                                See Buffer.allocUnsafeSlow().

                                                                                                                                                                                                                                                                " + } + ] + } + ], + "modules": [ + { + "textRaw": "Buffer constants", + "name": "buffer_constants", "meta": { "added": [ "v8.2.0" ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                Represents the largest length that a string primitive can have, counted\nin UTF-16 code units.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This value may depend on the JS engine that is being used.

                                                                                                                                                                                                                                                                ", - "shortDesc": "The largest length allowed for a single `string` instance." + "properties": [ + { + "textRaw": "`MAX_LENGTH` {integer} The largest size allowed for a single `Buffer` instance.", + "type": "integer", + "name": "MAX_LENGTH", + "meta": { + "added": [ + "v8.2.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                On 32-bit architectures, this value currently is 230 - 1 (~1GB).\nOn 64-bit architectures, this value currently is 231 - 1 (~2GB).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This value is also available as buffer.kMaxLength.

                                                                                                                                                                                                                                                                ", + "shortDesc": "The largest size allowed for a single `Buffer` instance." + }, + { + "textRaw": "`MAX_STRING_LENGTH` {integer} The largest length allowed for a single `string` instance.", + "type": "integer", + "name": "MAX_STRING_LENGTH", + "meta": { + "added": [ + "v8.2.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                Represents the largest length that a string primitive can have, counted\nin UTF-16 code units.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This value may depend on the JS engine that is being used.

                                                                                                                                                                                                                                                                ", + "shortDesc": "The largest length allowed for a single `string` instance." + } + ], + "type": "module", + "displayName": "Buffer constants" } ], "type": "module", - "displayName": "Buffer Constants" + "displayName": "`buffer` module APIs" }, { "textRaw": "`Buffer.from()`, `Buffer.alloc()`, and `Buffer.allocUnsafe()`", "name": "`buffer.from()`,_`buffer.alloc()`,_and_`buffer.allocunsafe()`", - "desc": "

                                                                                                                                                                                                                                                                In versions of Node.js prior to 6.0.0, Buffer instances were created using the\nBuffer constructor function, which allocates the returned Buffer\ndifferently based on what arguments are provided:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • Passing a number as the first argument to Buffer() (e.g. new Buffer(10))\nallocates a new Buffer object of the specified size. Prior to Node.js 8.0.0,\nthe memory allocated for such Buffer instances is not initialized and\ncan contain sensitive data. Such Buffer instances must be subsequently\ninitialized by using either buf.fill(0) or by writing to the\nentire Buffer before reading data from the Buffer.\nWhile this behavior is intentional to improve performance,\ndevelopment experience has demonstrated that a more explicit distinction is\nrequired between creating a fast-but-uninitialized Buffer versus creating a\nslower-but-safer Buffer. Since Node.js 8.0.0, Buffer(num) and new Buffer(num) return a Buffer with initialized memory.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • Passing a string, array, or Buffer as the first argument copies the\npassed object's data into the Buffer.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • Passing an ArrayBuffer or a SharedArrayBuffer returns a Buffer\nthat shares allocated memory with the given array buffer.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Because the behavior of new Buffer() is different depending on the type of the\nfirst argument, security and reliability issues can be inadvertently introduced\ninto applications when argument validation or Buffer initialization is not\nperformed.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                For example, if an attacker can cause an application to receive a number where\na string is expected, the application may call new Buffer(100)\ninstead of new Buffer(\"100\"), leading it to allocate a 100 byte buffer instead\nof allocating a 3 byte buffer with content \"100\". This is commonly possible\nusing JSON API calls. Since JSON distinguishes between numeric and string types,\nit allows injection of numbers where a naively written application that does not\nvalidate its input sufficiently might expect to always receive a string.\nBefore Node.js 8.0.0, the 100 byte buffer might contain\narbitrary pre-existing in-memory data, so may be used to expose in-memory\nsecrets to a remote attacker. Since Node.js 8.0.0, exposure of memory cannot\noccur because the data is zero-filled. However, other attacks are still\npossible, such as causing very large buffers to be allocated by the server,\nleading to performance degradation or crashing on memory exhaustion.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                To make the creation of Buffer instances more reliable and less error-prone,\nthe various forms of the new Buffer() constructor have been deprecated\nand replaced by separate Buffer.from(), Buffer.alloc(), and\nBuffer.allocUnsafe() methods.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Developers should migrate all existing uses of the new Buffer() constructors\nto one of these new APIs.

                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                Buffer instances returned by Buffer.allocUnsafe() and\nBuffer.from(array) may be allocated off a shared internal memory pool\nif size is less than or equal to half Buffer.poolSize. Instances\nreturned by Buffer.allocUnsafeSlow() never use the shared internal\nmemory pool.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                In versions of Node.js prior to 6.0.0, Buffer instances were created using the\nBuffer constructor function, which allocates the returned Buffer\ndifferently based on what arguments are provided:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • Passing a number as the first argument to Buffer() (e.g. new Buffer(10))\nallocates a new Buffer object of the specified size. Prior to Node.js 8.0.0,\nthe memory allocated for such Buffer instances is not initialized and\ncan contain sensitive data. Such Buffer instances must be subsequently\ninitialized by using either buf.fill(0) or by writing to the\nentire Buffer before reading data from the Buffer.\nWhile this behavior is intentional to improve performance,\ndevelopment experience has demonstrated that a more explicit distinction is\nrequired between creating a fast-but-uninitialized Buffer versus creating a\nslower-but-safer Buffer. Since Node.js 8.0.0, Buffer(num) and new Buffer(num) return a Buffer with initialized memory.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • Passing a string, array, or Buffer as the first argument copies the\npassed object's data into the Buffer.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • Passing an ArrayBuffer or a SharedArrayBuffer returns a Buffer\nthat shares allocated memory with the given array buffer.
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Because the behavior of new Buffer() is different depending on the type of the\nfirst argument, security and reliability issues can be inadvertently introduced\ninto applications when argument validation or Buffer initialization is not\nperformed.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                For example, if an attacker can cause an application to receive a number where\na string is expected, the application may call new Buffer(100)\ninstead of new Buffer(\"100\"), leading it to allocate a 100 byte buffer instead\nof allocating a 3 byte buffer with content \"100\". This is commonly possible\nusing JSON API calls. Since JSON distinguishes between numeric and string types,\nit allows injection of numbers where a naively written application that does not\nvalidate its input sufficiently might expect to always receive a string.\nBefore Node.js 8.0.0, the 100 byte buffer might contain\narbitrary pre-existing in-memory data, so may be used to expose in-memory\nsecrets to a remote attacker. Since Node.js 8.0.0, exposure of memory cannot\noccur because the data is zero-filled. However, other attacks are still\npossible, such as causing very large buffers to be allocated by the server,\nleading to performance degradation or crashing on memory exhaustion.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                To make the creation of Buffer instances more reliable and less error-prone,\nthe various forms of the new Buffer() constructor have been deprecated\nand replaced by separate Buffer.from(), Buffer.alloc(), and\nBuffer.allocUnsafe() methods.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Developers should migrate all existing uses of the new Buffer() constructors\nto one of these new APIs.

                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                Buffer instances returned by Buffer.allocUnsafe() and\nBuffer.from(array) may be allocated off a shared internal memory pool\nif size is less than or equal to half Buffer.poolSize. Instances\nreturned by Buffer.allocUnsafeSlow() never use the shared internal\nmemory pool.

                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "The `--zero-fill-buffers` command line option", @@ -109,14 +223,14 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                Node.js can be started using the --zero-fill-buffers command line option to\ncause all newly-allocated Buffer instances to be zero-filled upon creation by\ndefault. Without the option, buffers created with Buffer.allocUnsafe(),\nBuffer.allocUnsafeSlow(), and new SlowBuffer(size) are not zero-filled.\nUse of this flag can have a measurable negative impact on performance. Use the\n--zero-fill-buffers option only when necessary to enforce that newly allocated\nBuffer instances cannot contain old data that is potentially sensitive.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                $ node --zero-fill-buffers\n> Buffer.allocUnsafe(5);\n<Buffer 00 00 00 00 00>\n
                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Node.js can be started using the --zero-fill-buffers command line option to\ncause all newly-allocated Buffer instances to be zero-filled upon creation by\ndefault. Without the option, buffers created with Buffer.allocUnsafe(),\nBuffer.allocUnsafeSlow(), and new SlowBuffer(size) are not zero-filled.\nUse of this flag can have a measurable negative impact on performance. Use the\n--zero-fill-buffers option only when necessary to enforce that newly allocated\nBuffer instances cannot contain old data that is potentially sensitive.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                $ node --zero-fill-buffers\n> Buffer.allocUnsafe(5);\n<Buffer 00 00 00 00 00>\n
                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "The `--zero-fill-buffers` command line option" }, { "textRaw": "What makes `Buffer.allocUnsafe()` and `Buffer.allocUnsafeSlow()` \"unsafe\"?", "name": "what_makes_`buffer.allocunsafe()`_and_`buffer.allocunsafeslow()`_\"unsafe\"?", - "desc": "

                                                                                                                                                                                                                                                                When calling Buffer.allocUnsafe() and Buffer.allocUnsafeSlow(), the\nsegment of allocated memory is uninitialized (it is not zeroed-out). While\nthis design makes the allocation of memory quite fast, the allocated segment of\nmemory might contain old data that is potentially sensitive. Using a Buffer\ncreated by Buffer.allocUnsafe() without completely overwriting the\nmemory can allow this old data to be leaked when the Buffer memory is read.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                While there are clear performance advantages to using\nBuffer.allocUnsafe(), extra care must be taken in order to avoid\nintroducing security vulnerabilities into an application.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                When calling Buffer.allocUnsafe() and Buffer.allocUnsafeSlow(), the\nsegment of allocated memory is uninitialized (it is not zeroed-out). While\nthis design makes the allocation of memory quite fast, the allocated segment of\nmemory might contain old data that is potentially sensitive. Using a Buffer\ncreated by Buffer.allocUnsafe() without completely overwriting the\nmemory can allow this old data to be leaked when the Buffer memory is read.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                While there are clear performance advantages to using\nBuffer.allocUnsafe(), extra care must be taken in order to avoid\nintroducing security vulnerabilities into an application.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "What makes `Buffer.allocUnsafe()` and `Buffer.allocUnsafeSlow()` \"unsafe\"?" } @@ -133,7 +247,7 @@ "desc": "

                                                                                                                                                                                                                                                                The Buffer class is a global type for dealing with binary data directly.\nIt can be constructed in a variety of ways.

                                                                                                                                                                                                                                                                ", "classMethods": [ { - "textRaw": "Class Method: `Buffer.alloc(size[, fill[, encoding]])`", + "textRaw": "Static method: `Buffer.alloc(size[, fill[, encoding]])`", "type": "classMethod", "name": "alloc", "meta": { @@ -184,10 +298,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Allocates a new Buffer of size bytes. If fill is undefined, the\nBuffer will be zero-filled.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.alloc(5);\n\nconsole.log(buf);\n// Prints: <Buffer 00 00 00 00 00>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If fill is specified, the allocated Buffer will be initialized by calling\nbuf.fill(fill).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.alloc(5, 'a');\n\nconsole.log(buf);\n// Prints: <Buffer 61 61 61 61 61>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If both fill and encoding are specified, the allocated Buffer will be\ninitialized by calling buf.fill(fill, encoding).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');\n\nconsole.log(buf);\n// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Calling Buffer.alloc() can be measurably slower than the alternative\nBuffer.allocUnsafe() but ensures that the newly created Buffer instance\ncontents will never contain sensitive data from previous allocations, including\ndata that might not have been allocated for Buffers.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Allocates a new Buffer of size bytes. If fill is undefined, the\nBuffer will be zero-filled.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.alloc(5);\n\nconsole.log(buf);\n// Prints: <Buffer 00 00 00 00 00>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If fill is specified, the allocated Buffer will be initialized by calling\nbuf.fill(fill).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.alloc(5, 'a');\n\nconsole.log(buf);\n// Prints: <Buffer 61 61 61 61 61>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If both fill and encoding are specified, the allocated Buffer will be\ninitialized by calling buf.fill(fill, encoding).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64');\n\nconsole.log(buf);\n// Prints: <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Calling Buffer.alloc() can be measurably slower than the alternative\nBuffer.allocUnsafe() but ensures that the newly created Buffer instance\ncontents will never contain sensitive data from previous allocations, including\ndata that might not have been allocated for Buffers.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.allocUnsafe(size)`", + "textRaw": "Static method: `Buffer.allocUnsafe(size)`", "type": "classMethod", "name": "allocUnsafe", "meta": { @@ -214,10 +328,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Allocates a new Buffer of size bytes. If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The underlying memory for Buffer instances created in this way is not\ninitialized. The contents of the newly created Buffer are unknown and\nmay contain sensitive data. Use Buffer.alloc() instead to initialize\nBuffer instances with zeroes.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(10);\n\nconsole.log(buf);\n// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>\n\nbuf.fill(0);\n\nconsole.log(buf);\n// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer module pre-allocates an internal Buffer instance of\nsize Buffer.poolSize that is used as a pool for the fast allocation of new\nBuffer instances created using Buffer.allocUnsafe(),\nBuffer.from(array), and the deprecated new Buffer(size) constructor only\nwhen size is less than or equal to Buffer.poolSize >> 1 (floor of\nBuffer.poolSize divided by two).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Use of this pre-allocated internal memory pool is a key difference between\ncalling Buffer.alloc(size, fill) vs. Buffer.allocUnsafe(size).fill(fill).\nSpecifically, Buffer.alloc(size, fill) will never use the internal Buffer\npool, while Buffer.allocUnsafe(size).fill(fill) will use the internal\nBuffer pool if size is less than or equal to half Buffer.poolSize. The\ndifference is subtle but can be important when an application requires the\nadditional performance that Buffer.allocUnsafe() provides.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Allocates a new Buffer of size bytes. If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The underlying memory for Buffer instances created in this way is not\ninitialized. The contents of the newly created Buffer are unknown and\nmay contain sensitive data. Use Buffer.alloc() instead to initialize\nBuffer instances with zeroes.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(10);\n\nconsole.log(buf);\n// Prints (contents may vary): <Buffer a0 8b 28 3f 01 00 00 00 50 32>\n\nbuf.fill(0);\n\nconsole.log(buf);\n// Prints: <Buffer 00 00 00 00 00 00 00 00 00 00>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The Buffer module pre-allocates an internal Buffer instance of\nsize Buffer.poolSize that is used as a pool for the fast allocation of new\nBuffer instances created using Buffer.allocUnsafe(),\nBuffer.from(array), Buffer.concat(), and the deprecated\nnew Buffer(size) constructor only when size is less than or equal\nto Buffer.poolSize >> 1 (floor of Buffer.poolSize divided by two).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Use of this pre-allocated internal memory pool is a key difference between\ncalling Buffer.alloc(size, fill) vs. Buffer.allocUnsafe(size).fill(fill).\nSpecifically, Buffer.alloc(size, fill) will never use the internal Buffer\npool, while Buffer.allocUnsafe(size).fill(fill) will use the internal\nBuffer pool if size is less than or equal to half Buffer.poolSize. The\ndifference is subtle but can be important when an application requires the\nadditional performance that Buffer.allocUnsafe() provides.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.allocUnsafeSlow(size)`", + "textRaw": "Static method: `Buffer.allocUnsafeSlow(size)`", "type": "classMethod", "name": "allocUnsafeSlow", "meta": { @@ -238,10 +352,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Allocates a new Buffer of size bytes. If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown. A zero-length Buffer is created if size is 0.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The underlying memory for Buffer instances created in this way is not\ninitialized. The contents of the newly created Buffer are unknown and\nmay contain sensitive data. Use buf.fill(0) to initialize\nsuch Buffer instances with zeroes.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                When using Buffer.allocUnsafe() to allocate new Buffer instances,\nallocations under 4KB are sliced from a single pre-allocated Buffer. This\nallows applications to avoid the garbage collection overhead of creating many\nindividually allocated Buffer instances. This approach improves both\nperformance and memory usage by eliminating the need to track and clean up as\nmany individual ArrayBuffer objects.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                However, in the case where a developer may need to retain a small chunk of\nmemory from a pool for an indeterminate amount of time, it may be appropriate\nto create an un-pooled Buffer instance using Buffer.allocUnsafeSlow() and\nthen copying out the relevant bits.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Need to keep around a few small chunks of memory.\nconst store = [];\n\nsocket.on('readable', () => {\n  let data;\n  while (null !== (data = readable.read())) {\n    // Allocate for retained data.\n    const sb = Buffer.allocUnsafeSlow(10);\n\n    // Copy the data into the new allocation.\n    data.copy(sb, 0, 0, 10);\n\n    store.push(sb);\n  }\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Allocates a new Buffer of size bytes. If size is larger than\nbuffer.constants.MAX_LENGTH or smaller than 0, ERR_INVALID_OPT_VALUE\nis thrown. A zero-length Buffer is created if size is 0.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The underlying memory for Buffer instances created in this way is not\ninitialized. The contents of the newly created Buffer are unknown and\nmay contain sensitive data. Use buf.fill(0) to initialize\nsuch Buffer instances with zeroes.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                When using Buffer.allocUnsafe() to allocate new Buffer instances,\nallocations under 4KB are sliced from a single pre-allocated Buffer. This\nallows applications to avoid the garbage collection overhead of creating many\nindividually allocated Buffer instances. This approach improves both\nperformance and memory usage by eliminating the need to track and clean up as\nmany individual ArrayBuffer objects.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                However, in the case where a developer may need to retain a small chunk of\nmemory from a pool for an indeterminate amount of time, it may be appropriate\nto create an un-pooled Buffer instance using Buffer.allocUnsafeSlow() and\nthen copying out the relevant bits.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Need to keep around a few small chunks of memory.\nconst store = [];\n\nsocket.on('readable', () => {\n  let data;\n  while (null !== (data = readable.read())) {\n    // Allocate for retained data.\n    const sb = Buffer.allocUnsafeSlow(10);\n\n    // Copy the data into the new allocation.\n    data.copy(sb, 0, 0, 10);\n\n    store.push(sb);\n  }\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if size is not a number.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.byteLength(string[, encoding])`", + "textRaw": "Static method: `Buffer.byteLength(string[, encoding])`", "type": "classMethod", "name": "byteLength", "meta": { @@ -289,7 +403,7 @@ "desc": "

                                                                                                                                                                                                                                                                Returns the byte length of a string when encoded using encoding.\nThis is not the same as String.prototype.length, which does not account\nfor the encoding that is used to convert the string into bytes.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                For 'base64' and 'hex', this function assumes valid input. For strings that\ncontain non-base64/hex-encoded data (e.g. whitespace), the return value might be\ngreater than the length of a Buffer created from the string.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const str = '\\u00bd + \\u00bc = \\u00be';\n\nconsole.log(`${str}: ${str.length} characters, ` +\n            `${Buffer.byteLength(str, 'utf8')} bytes`);\n// Prints: ½ + ¼ = ¾: 9 characters, 12 bytes\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                When string is a Buffer/DataView/TypedArray/ArrayBuffer/\nSharedArrayBuffer, the byte length as reported by .byteLength\nis returned.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.compare(buf1, buf2)`", + "textRaw": "Static method: `Buffer.compare(buf1, buf2)`", "type": "classMethod", "name": "compare", "meta": { @@ -329,7 +443,7 @@ "desc": "

                                                                                                                                                                                                                                                                Compares buf1 to buf2, typically for the purpose of sorting arrays of\nBuffer instances. This is equivalent to calling\nbuf1.compare(buf2).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf1 = Buffer.from('1234');\nconst buf2 = Buffer.from('0123');\nconst arr = [buf1, buf2];\n\nconsole.log(arr.sort(Buffer.compare));\n// Prints: [ <Buffer 30 31 32 33>, <Buffer 31 32 33 34> ]\n// (This result is equal to: [buf2, buf1].)\n
                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.concat(list[, totalLength])`", + "textRaw": "Static method: `Buffer.concat(list[, totalLength])`", "type": "classMethod", "name": "concat", "meta": { @@ -367,10 +481,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Returns a new Buffer which is the result of concatenating all the Buffer\ninstances in the list together.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If the list has no items, or if the totalLength is 0, then a new zero-length\nBuffer is returned.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If totalLength is not provided, it is calculated from the Buffer instances\nin list by adding their lengths.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If totalLength is provided, it is coerced to an unsigned integer. If the\ncombined length of the Buffers in list exceeds totalLength, the result is\ntruncated to totalLength.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Create a single `Buffer` from a list of three `Buffer` instances.\n\nconst buf1 = Buffer.alloc(10);\nconst buf2 = Buffer.alloc(14);\nconst buf3 = Buffer.alloc(18);\nconst totalLength = buf1.length + buf2.length + buf3.length;\n\nconsole.log(totalLength);\n// Prints: 42\n\nconst bufA = Buffer.concat([buf1, buf2, buf3], totalLength);\n\nconsole.log(bufA);\n// Prints: <Buffer 00 00 00 00 ...>\nconsole.log(bufA.length);\n// Prints: 42\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Returns a new Buffer which is the result of concatenating all the Buffer\ninstances in the list together.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If the list has no items, or if the totalLength is 0, then a new zero-length\nBuffer is returned.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If totalLength is not provided, it is calculated from the Buffer instances\nin list by adding their lengths.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If totalLength is provided, it is coerced to an unsigned integer. If the\ncombined length of the Buffers in list exceeds totalLength, the result is\ntruncated to totalLength.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Create a single `Buffer` from a list of three `Buffer` instances.\n\nconst buf1 = Buffer.alloc(10);\nconst buf2 = Buffer.alloc(14);\nconst buf3 = Buffer.alloc(18);\nconst totalLength = buf1.length + buf2.length + buf3.length;\n\nconsole.log(totalLength);\n// Prints: 42\n\nconst bufA = Buffer.concat([buf1, buf2, buf3], totalLength);\n\nconsole.log(bufA);\n// Prints: <Buffer 00 00 00 00 ...>\nconsole.log(bufA.length);\n// Prints: 42\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Buffer.concat() may also use the internal Buffer pool like\nBuffer.allocUnsafe() does.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.from(array)`", + "textRaw": "Static method: `Buffer.from(array)`", "type": "classMethod", "name": "from", "meta": { @@ -390,10 +504,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Allocates a new Buffer using an array of bytes in the range 0255.\nArray entries outside that range will be truncated to fit into it.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.\nconst buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if array is not an Array or another type\nappropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Buffer.from(array) and Buffer.from(string) may also use the internal\nBuffer pool like Buffer.allocUnsafe() does.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Allocates a new Buffer using an array of bytes in the range 0255.\nArray entries outside that range will be truncated to fit into it.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'.\nconst buf = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]);\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if array is not an Array or another type\nappropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Buffer.from(array) and Buffer.from(string) may also use the internal\nBuffer pool like Buffer.allocUnsafe() does.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.from(arrayBuffer[, byteOffset[, length]])`", + "textRaw": "Static method: `Buffer.from(arrayBuffer[, byteOffset[, length]])`", "type": "classMethod", "name": "from", "meta": { @@ -431,7 +545,7 @@ "desc": "

                                                                                                                                                                                                                                                                This creates a view of the ArrayBuffer without copying the underlying\nmemory. For example, when passed a reference to the .buffer property of a\nTypedArray instance, the newly created Buffer will share the same\nallocated memory as the TypedArray.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const arr = new Uint16Array(2);\n\narr[0] = 5000;\narr[1] = 4000;\n\n// Shares memory with `arr`.\nconst buf = Buffer.from(arr.buffer);\n\nconsole.log(buf);\n// Prints: <Buffer 88 13 a0 0f>\n\n// Changing the original Uint16Array changes the Buffer also.\narr[1] = 6000;\n\nconsole.log(buf);\n// Prints: <Buffer 88 13 70 17>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The optional byteOffset and length arguments specify a memory range within\nthe arrayBuffer that will be shared by the Buffer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const ab = new ArrayBuffer(10);\nconst buf = Buffer.from(ab, 0, 2);\n\nconsole.log(buf.length);\n// Prints: 2\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if arrayBuffer is not an ArrayBuffer or a\nSharedArrayBuffer or another type appropriate for Buffer.from()\nvariants.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.from(buffer)`", + "textRaw": "Static method: `Buffer.from(buffer)`", "type": "classMethod", "name": "from", "meta": { @@ -455,7 +569,7 @@ "desc": "

                                                                                                                                                                                                                                                                Copies the passed buffer data onto a new Buffer instance.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf1 = Buffer.from('buffer');\nconst buf2 = Buffer.from(buf1);\n\nbuf1[0] = 0x61;\n\nconsole.log(buf1.toString());\n// Prints: auffer\nconsole.log(buf2.toString());\n// Prints: buffer\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if buffer is not a Buffer or another type\nappropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.from(object[, offsetOrEncoding[, length]])`", + "textRaw": "Static method: `Buffer.from(object[, offsetOrEncoding[, length]])`", "type": "classMethod", "name": "from", "meta": { @@ -474,24 +588,24 @@ "desc": "An object supporting `Symbol.toPrimitive` or `valueOf()`." }, { - "textRaw": "`offsetOrEncoding` {integer|string} A byte-offset or encoding, depending on the value returned either by `object.valueOf()` or `object[Symbol.toPrimitive]()`.", + "textRaw": "`offsetOrEncoding` {integer|string} A byte-offset or encoding.", "name": "offsetOrEncoding", "type": "integer|string", - "desc": "A byte-offset or encoding, depending on the value returned either by `object.valueOf()` or `object[Symbol.toPrimitive]()`." + "desc": "A byte-offset or encoding." }, { - "textRaw": "`length` {integer} A length, depending on the value returned either by `object.valueOf()` or `object[Symbol.toPrimitive]()`.", + "textRaw": "`length` {integer} A length.", "name": "length", "type": "integer", - "desc": "A length, depending on the value returned either by `object.valueOf()` or `object[Symbol.toPrimitive]()`." + "desc": "A length." } ] } ], - "desc": "

                                                                                                                                                                                                                                                                For objects whose valueOf() function returns a value not strictly equal to\nobject, returns Buffer.from(object.valueOf(), offsetOrEncoding, length).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from(new String('this is a test'));\n// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                For objects that support Symbol.toPrimitive, returns\nBuffer.from(object[Symbol.toPrimitive](), offsetOrEncoding, length).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                class Foo {\n  [Symbol.toPrimitive]() {\n    return 'this is a test';\n  }\n}\n\nconst buf = Buffer.from(new Foo(), 'utf8');\n// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if object does not have the mentioned methods or\nis not of another type appropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                For objects whose valueOf() function returns a value not strictly equal to\nobject, returns Buffer.from(object.valueOf(), offsetOrEncoding, length).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from(new String('this is a test'));\n// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                For objects that support Symbol.toPrimitive, returns\nBuffer.from(object[Symbol.toPrimitive]('string'), offsetOrEncoding).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                class Foo {\n  [Symbol.toPrimitive]() {\n    return 'this is a test';\n  }\n}\n\nconst buf = Buffer.from(new Foo(), 'utf8');\n// Prints: <Buffer 74 68 69 73 20 69 73 20 61 20 74 65 73 74>\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if object does not have the mentioned methods or\nis not of another type appropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.from(string[, encoding])`", + "textRaw": "Static method: `Buffer.from(string[, encoding])`", "type": "classMethod", "name": "from", "meta": { @@ -522,7 +636,7 @@ "desc": "

                                                                                                                                                                                                                                                                Creates a new Buffer containing string. The encoding parameter identifies\nthe character encoding to be used when converting string into bytes.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf1 = Buffer.from('this is a tést');\nconst buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex');\n\nconsole.log(buf1.toString());\n// Prints: this is a tést\nconsole.log(buf2.toString());\n// Prints: this is a tést\nconsole.log(buf1.toString('latin1'));\n// Prints: this is a tést\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A TypeError will be thrown if string is not a string or another type\nappropriate for Buffer.from() variants.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.isBuffer(obj)`", + "textRaw": "Static method: `Buffer.isBuffer(obj)`", "type": "classMethod", "name": "isBuffer", "meta": { @@ -550,7 +664,7 @@ "desc": "

                                                                                                                                                                                                                                                                Returns true if obj is a Buffer, false otherwise.

                                                                                                                                                                                                                                                                " }, { - "textRaw": "Class Method: `Buffer.isEncoding(encoding)`", + "textRaw": "Static method: `Buffer.isEncoding(encoding)`", "type": "classMethod", "name": "isEncoding", "meta": { @@ -604,7 +718,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                The index operator [index] can be used to get and set the octet at position\nindex in buf. The values refer to individual bytes, so the legal value\nrange is between 0x00 and 0xFF (hex) or 0 and 255 (decimal).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This operator is inherited from Uint8Array, so its behavior on out-of-bounds\naccess is the same as Uint8Array. In other words, buf[index] returns\nundefined when index is negative or >= buf.length, and\nbuf[index] = value does not modify the buffer if index is negative or\n>= buf.length.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Copy an ASCII string into a `Buffer` one byte at a time.\n// (This only works for ASCII-only strings. In general, one should use\n// `Buffer.from()` to perform this conversion.)\n\nconst str = 'Node.js';\nconst buf = Buffer.allocUnsafe(str.length);\n\nfor (let i = 0; i < str.length; i++) {\n  buf[i] = str.charCodeAt(i);\n}\n\nconsole.log(buf.toString('utf8'));\n// Prints: Node.js\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                The index operator [index] can be used to get and set the octet at position\nindex in buf. The values refer to individual bytes, so the legal value\nrange is between 0x00 and 0xFF (hex) or 0 and 255 (decimal).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This operator is inherited from Uint8Array, so its behavior on out-of-bounds\naccess is the same as Uint8Array. In other words, buf[index] returns\nundefined when index is negative or greater or equal to buf.length, and\nbuf[index] = value does not modify the buffer if index is negative or\n>= buf.length.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Copy an ASCII string into a `Buffer` one byte at a time.\n// (This only works for ASCII-only strings. In general, one should use\n// `Buffer.from()` to perform this conversion.)\n\nconst str = 'Node.js';\nconst buf = Buffer.allocUnsafe(str.length);\n\nfor (let i = 0; i < str.length; i++) {\n  buf[i] = str.charCodeAt(i);\n}\n\nconsole.log(buf.toString('utf8'));\n// Prints: Node.js\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buffer` {ArrayBuffer} The underlying `ArrayBuffer` object based on which this `Buffer` object is created.", @@ -614,11 +728,11 @@ "shortDesc": "The underlying `ArrayBuffer` object based on which this `Buffer` object is created." }, { - "textRaw": "`byteOffset` {integer} The `byteOffset` on the underlying `ArrayBuffer` object based on which this `Buffer` object is created.", + "textRaw": "`byteOffset` {integer} The `byteOffset` of the `Buffer`s underlying `ArrayBuffer` object.", "type": "integer", "name": "byteOffset", - "desc": "

                                                                                                                                                                                                                                                                When setting byteOffset in Buffer.from(ArrayBuffer, byteOffset, length),\nor sometimes when allocating a buffer smaller than Buffer.poolSize, the\nbuffer doesn't start from a zero offset on the underlying ArrayBuffer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This can cause problems when accessing the underlying ArrayBuffer directly\nusing buf.buffer, as other parts of the ArrayBuffer may be unrelated\nto the buf object itself.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A common issue when creating a TypedArray object that shares its memory with\na Buffer is that in this case one needs to specify the byteOffset correctly:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Create a buffer smaller than `Buffer.poolSize`.\nconst nodeBuffer = new Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n\n// When casting the Node.js Buffer to an Int8Array, use the byteOffset\n// to refer only to the part of `nodeBuffer.buffer` that contains the memory\n// for `nodeBuffer`.\nnew Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);\n
                                                                                                                                                                                                                                                                ", - "shortDesc": "The `byteOffset` on the underlying `ArrayBuffer` object based on which this `Buffer` object is created." + "desc": "

                                                                                                                                                                                                                                                                When setting byteOffset in Buffer.from(ArrayBuffer, byteOffset, length),\nor sometimes when allocating a Buffer smaller than Buffer.poolSize, the\nbuffer does not start from a zero offset on the underlying ArrayBuffer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This can cause problems when accessing the underlying ArrayBuffer directly\nusing buf.buffer, as other parts of the ArrayBuffer may be unrelated\nto the Buffer object itself.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A common issue when creating a TypedArray object that shares its memory with\na Buffer is that in this case one needs to specify the byteOffset correctly:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Create a buffer smaller than `Buffer.poolSize`.\nconst nodeBuffer = new Buffer.from([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);\n\n// When casting the Node.js Buffer to an Int8Array, use the byteOffset\n// to refer only to the part of `nodeBuffer.buffer` that contains the memory\n// for `nodeBuffer`.\nnew Int8Array(nodeBuffer.buffer, nodeBuffer.byteOffset, nodeBuffer.length);\n
                                                                                                                                                                                                                                                                ", + "shortDesc": "The `byteOffset` of the `Buffer`s underlying `ArrayBuffer` object." }, { "textRaw": "`length` {integer}", @@ -1077,7 +1191,8 @@ "name": "readBigInt64BE", "meta": { "added": [ - "v12.0.0" + "v12.0.0", + "v10.20.0" ], "changes": [] }, @@ -1099,7 +1214,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a signed 64-bit integer from buf at the specified offset with\nthe specified endianness (readBigInt64BE() reads as big endian,\nreadBigInt64LE() reads as little endian).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a signed, big-endian 64-bit integer from buf at the specified offset.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed\nvalues.

                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readBigInt64LE([offset])`", @@ -1129,7 +1244,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a signed 64-bit integer from buf at the specified offset with\nthe specified endianness (readBigInt64BE() reads as big endian,\nreadBigInt64LE() reads as little endian).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a signed, little-endian 64-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed\nvalues.

                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readBigUInt64BE([offset])`", @@ -1139,7 +1254,13 @@ "added": [ "v12.0.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34960", + "description": "This function is also available as `buf.readBigUint64BE()`." + } + ] }, "signatures": [ { @@ -1159,7 +1280,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned 64-bit integer from buf at the specified offset with\nthe specified endianness (readBigUInt64BE() reads as big endian,\nreadBigUInt64LE() reads as little endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);\n\nconsole.log(buf.readBigUInt64BE(0));\n// Prints: 4294967295n\n\nconsole.log(buf.readBigUInt64LE(0));\n// Prints: 18446744069414584320n\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned, big-endian 64-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);\n\nconsole.log(buf.readBigUInt64BE(0));\n// Prints: 4294967295n\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readBigUInt64LE([offset])`", @@ -1167,9 +1288,16 @@ "name": "readBigUInt64LE", "meta": { "added": [ - "v12.0.0" + "v12.0.0", + "v10.20.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34960", + "description": "This function is also available as `buf.readBigUint64LE()`." + } + ] }, "signatures": [ { @@ -1189,7 +1317,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned 64-bit integer from buf at the specified offset with\nthe specified endianness (readBigUInt64BE() reads as big endian,\nreadBigUInt64LE() reads as little endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);\n\nconsole.log(buf.readBigUInt64BE(0));\n// Prints: 4294967295n\n\nconsole.log(buf.readBigUInt64LE(0));\n// Prints: 18446744069414584320n\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned, little-endian 64-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]);\n\nconsole.log(buf.readBigUInt64LE(0));\n// Prints: 18446744069414584320n\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readDoubleBE([offset])`", @@ -1225,7 +1353,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a 64-bit double from buf at the specified offset with the specified\nendianness (readDoubleBE() reads as big endian, readDoubleLE() reads as\nlittle endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);\n\nconsole.log(buf.readDoubleBE(0));\n// Prints: 8.20788039913184e-304\nconsole.log(buf.readDoubleLE(0));\n// Prints: 5.447603722011605e-270\nconsole.log(buf.readDoubleLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a 64-bit, big-endian double from buf at the specified offset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);\n\nconsole.log(buf.readDoubleBE(0));\n// Prints: 8.20788039913184e-304\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readDoubleLE([offset])`", @@ -1261,7 +1389,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a 64-bit double from buf at the specified offset with the specified\nendianness (readDoubleBE() reads as big endian, readDoubleLE() reads as\nlittle endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);\n\nconsole.log(buf.readDoubleBE(0));\n// Prints: 8.20788039913184e-304\nconsole.log(buf.readDoubleLE(0));\n// Prints: 5.447603722011605e-270\nconsole.log(buf.readDoubleLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a 64-bit, little-endian double from buf at the specified offset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]);\n\nconsole.log(buf.readDoubleLE(0));\n// Prints: 5.447603722011605e-270\nconsole.log(buf.readDoubleLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readFloatBE([offset])`", @@ -1297,7 +1425,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a 32-bit float from buf at the specified offset with the specified\nendianness (readFloatBE() reads as big endian, readFloatLE() reads as\nlittle endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4]);\n\nconsole.log(buf.readFloatBE(0));\n// Prints: 2.387939260590663e-38\nconsole.log(buf.readFloatLE(0));\n// Prints: 1.539989614439558e-36\nconsole.log(buf.readFloatLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a 32-bit, big-endian float from buf at the specified offset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4]);\n\nconsole.log(buf.readFloatBE(0));\n// Prints: 2.387939260590663e-38\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readFloatLE([offset])`", @@ -1333,7 +1461,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a 32-bit float from buf at the specified offset with the specified\nendianness (readFloatBE() reads as big endian, readFloatLE() reads as\nlittle endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4]);\n\nconsole.log(buf.readFloatBE(0));\n// Prints: 2.387939260590663e-38\nconsole.log(buf.readFloatLE(0));\n// Prints: 1.539989614439558e-36\nconsole.log(buf.readFloatLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a 32-bit, little-endian float from buf at the specified offset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([1, 2, 3, 4]);\n\nconsole.log(buf.readFloatLE(0));\n// Prints: 1.539989614439558e-36\nconsole.log(buf.readFloatLE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readInt8([offset])`", @@ -1405,7 +1533,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a signed 16-bit integer from buf at the specified offset with\nthe specified endianness (readInt16BE() reads as big endian,\nreadInt16LE() reads as little endian).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0, 5]);\n\nconsole.log(buf.readInt16BE(0));\n// Prints: 5\nconsole.log(buf.readInt16LE(0));\n// Prints: 1280\nconsole.log(buf.readInt16LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a signed, big-endian 16-bit integer from buf at the specified offset.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0, 5]);\n\nconsole.log(buf.readInt16BE(0));\n// Prints: 5\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readInt16LE([offset])`", @@ -1441,7 +1569,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a signed 16-bit integer from buf at the specified offset with\nthe specified endianness (readInt16BE() reads as big endian,\nreadInt16LE() reads as little endian).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0, 5]);\n\nconsole.log(buf.readInt16BE(0));\n// Prints: 5\nconsole.log(buf.readInt16LE(0));\n// Prints: 1280\nconsole.log(buf.readInt16LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a signed, little-endian 16-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0, 5]);\n\nconsole.log(buf.readInt16LE(0));\n// Prints: 1280\nconsole.log(buf.readInt16LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readInt32BE([offset])`", @@ -1477,7 +1605,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a signed 32-bit integer from buf at the specified offset with\nthe specified endianness (readInt32BE() reads as big endian,\nreadInt32LE() reads as little endian).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0, 0, 0, 5]);\n\nconsole.log(buf.readInt32BE(0));\n// Prints: 5\nconsole.log(buf.readInt32LE(0));\n// Prints: 83886080\nconsole.log(buf.readInt32LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a signed, big-endian 32-bit integer from buf at the specified offset.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0, 0, 0, 5]);\n\nconsole.log(buf.readInt32BE(0));\n// Prints: 5\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readInt32LE([offset])`", @@ -1513,7 +1641,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads a signed 32-bit integer from buf at the specified offset with\nthe specified endianness (readInt32BE() reads as big endian,\nreadInt32LE() reads as little endian).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0, 0, 0, 5]);\n\nconsole.log(buf.readInt32BE(0));\n// Prints: 5\nconsole.log(buf.readInt32LE(0));\n// Prints: 83886080\nconsole.log(buf.readInt32LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads a signed, little-endian 32-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Integers read from a Buffer are interpreted as two's complement signed values.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0, 0, 0, 5]);\n\nconsole.log(buf.readInt32LE(0));\n// Prints: 83886080\nconsole.log(buf.readInt32LE(1));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readIntBE(offset, byteLength)`", @@ -1554,7 +1682,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as a two's complement signed value. Supports up to 48\nbits of accuracy.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readIntLE(0, 6).toString(16));\n// Prints: -546f87a9cbee\nconsole.log(buf.readIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\nconsole.log(buf.readIntBE(1, 0).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as a big-endian, two's complement signed value\nsupporting up to 48 bits of accuracy.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\nconsole.log(buf.readIntBE(1, 0).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readIntLE(offset, byteLength)`", @@ -1595,7 +1723,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as a two's complement signed value. Supports up to 48\nbits of accuracy.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readIntLE(0, 6).toString(16));\n// Prints: -546f87a9cbee\nconsole.log(buf.readIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\nconsole.log(buf.readIntBE(1, 0).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as a little-endian, two's complement signed value\nsupporting up to 48 bits of accuracy.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readIntLE(0, 6).toString(16));\n// Prints: -546f87a9cbee\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readUInt8([offset])`", @@ -1607,6 +1735,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint8()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -1643,6 +1776,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint16BE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -1667,7 +1805,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned 16-bit integer from buf at the specified offset with\nthe specified endianness (readUInt16BE() reads as big endian, readUInt16LE()\nreads as little endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56]);\n\nconsole.log(buf.readUInt16BE(0).toString(16));\n// Prints: 1234\nconsole.log(buf.readUInt16LE(0).toString(16));\n// Prints: 3412\nconsole.log(buf.readUInt16BE(1).toString(16));\n// Prints: 3456\nconsole.log(buf.readUInt16LE(1).toString(16));\n// Prints: 5634\nconsole.log(buf.readUInt16LE(2).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned, big-endian 16-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56]);\n\nconsole.log(buf.readUInt16BE(0).toString(16));\n// Prints: 1234\nconsole.log(buf.readUInt16BE(1).toString(16));\n// Prints: 3456\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readUInt16LE([offset])`", @@ -1679,6 +1817,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint16LE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -1703,7 +1846,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned 16-bit integer from buf at the specified offset with\nthe specified endianness (readUInt16BE() reads as big endian, readUInt16LE()\nreads as little endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56]);\n\nconsole.log(buf.readUInt16BE(0).toString(16));\n// Prints: 1234\nconsole.log(buf.readUInt16LE(0).toString(16));\n// Prints: 3412\nconsole.log(buf.readUInt16BE(1).toString(16));\n// Prints: 3456\nconsole.log(buf.readUInt16LE(1).toString(16));\n// Prints: 5634\nconsole.log(buf.readUInt16LE(2).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned, little-endian 16-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56]);\n\nconsole.log(buf.readUInt16LE(0).toString(16));\n// Prints: 3412\nconsole.log(buf.readUInt16LE(1).toString(16));\n// Prints: 5634\nconsole.log(buf.readUInt16LE(2).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readUInt32BE([offset])`", @@ -1715,6 +1858,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint32BE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -1739,7 +1887,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned 32-bit integer from buf at the specified offset with\nthe specified endianness (readUInt32BE() reads as big endian,\nreadUInt32LE() reads as little endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);\n\nconsole.log(buf.readUInt32BE(0).toString(16));\n// Prints: 12345678\nconsole.log(buf.readUInt32LE(0).toString(16));\n// Prints: 78563412\nconsole.log(buf.readUInt32LE(1).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned, big-endian 32-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);\n\nconsole.log(buf.readUInt32BE(0).toString(16));\n// Prints: 12345678\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readUInt32LE([offset])`", @@ -1751,6 +1899,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUint32LE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -1775,7 +1928,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned 32-bit integer from buf at the specified offset with\nthe specified endianness (readUInt32BE() reads as big endian,\nreadUInt32LE() reads as little endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);\n\nconsole.log(buf.readUInt32BE(0).toString(16));\n// Prints: 12345678\nconsole.log(buf.readUInt32LE(0).toString(16));\n// Prints: 78563412\nconsole.log(buf.readUInt32LE(1).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads an unsigned, little-endian 32-bit integer from buf at the specified\noffset.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]);\n\nconsole.log(buf.readUInt32LE(0).toString(16));\n// Prints: 78563412\nconsole.log(buf.readUInt32LE(1).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readUIntBE(offset, byteLength)`", @@ -1787,6 +1940,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUintBE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset and `byteLength` to `uint32` anymore." @@ -1816,7 +1974,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as an unsigned integer. Supports up to 48\nbits of accuracy.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readUIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readUIntLE(0, 6).toString(16));\n// Prints: ab9078563412\nconsole.log(buf.readUIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as an unsigned big-endian integer supporting\nup to 48 bits of accuracy.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readUIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readUIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.readUIntLE(offset, byteLength)`", @@ -1828,6 +1986,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.readUintLE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset and `byteLength` to `uint32` anymore." @@ -1857,7 +2020,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as an unsigned integer. Supports up to 48\nbits of accuracy.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readUIntBE(0, 6).toString(16));\n// Prints: 1234567890ab\nconsole.log(buf.readUIntLE(0, 6).toString(16));\n// Prints: ab9078563412\nconsole.log(buf.readUIntBE(1, 6).toString(16));\n// Throws ERR_OUT_OF_RANGE.\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Reads byteLength number of bytes from buf at the specified offset\nand interprets the result as an unsigned, little-endian integer supporting\nup to 48 bits of accuracy.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]);\n\nconsole.log(buf.readUIntLE(0, 6).toString(16));\n// Prints: ab9078563412\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.subarray([start[, end]])`", @@ -2187,7 +2350,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeBigInt64BE() writes as big endian, writeBigInt64LE()\nwrites as little endian).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigInt64BE(0x0102030405060708n, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 05 06 07 08>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as big-endian.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigInt64BE(0x0102030405060708n, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 05 06 07 08>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeBigInt64LE(value[, offset])`", @@ -2195,7 +2358,8 @@ "name": "writeBigInt64LE", "meta": { "added": [ - "v12.0.0" + "v12.0.0", + "v10.20.0" ], "changes": [] }, @@ -2224,7 +2388,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeBigInt64BE() writes as big endian, writeBigInt64LE()\nwrites as little endian).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigInt64BE(0x0102030405060708n, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 05 06 07 08>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as little-endian.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigInt64LE(0x0102030405060708n, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 08 07 06 05 04 03 02 01>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeBigUInt64BE(value[, offset])`", @@ -2232,9 +2396,16 @@ "name": "writeBigUInt64BE", "meta": { "added": [ - "v12.0.0" + "v12.0.0", + "v10.20.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34960", + "description": "This function is also available as `buf.writeBigUint64BE()`." + } + ] }, "signatures": [ { @@ -2261,7 +2432,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with specified endianness\n(writeBigUInt64BE() writes as big endian, writeBigUInt64LE() writes as\nlittle endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigUInt64LE(0xdecafafecacefaden, 0);\n\nconsole.log(buf);\n// Prints: <Buffer de fa ce ca fe fa ca de>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as big-endian.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigUInt64BE(0xdecafafecacefaden, 0);\n\nconsole.log(buf);\n// Prints: <Buffer de ca fa fe ca ce fa de>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeBigUInt64LE(value[, offset])`", @@ -2271,7 +2442,13 @@ "added": [ "v12.0.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34960", + "description": "This function is also available as `buf.writeBigUint64LE()`." + } + ] }, "signatures": [ { @@ -2298,7 +2475,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with specified endianness\n(writeBigUInt64BE() writes as big endian, writeBigUInt64LE() writes as\nlittle endian).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigUInt64LE(0xdecafafecacefaden, 0);\n\nconsole.log(buf);\n// Prints: <Buffer de fa ce ca fe fa ca de>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as little-endian

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeBigUInt64LE(0xdecafafecacefaden, 0);\n\nconsole.log(buf);\n// Prints: <Buffer de fa ce ca fe fa ca de>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeDoubleBE(value[, offset])`", @@ -2341,7 +2518,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeDoubleBE() writes as big endian, writeDoubleLE() writes\nas little endian). value must be a JavaScript number. Behavior is undefined\nwhen value is anything other than a JavaScript number.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeDoubleBE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>\n\nbuf.writeDoubleLE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as big-endian. The value\nmust be a JavaScript number. Behavior is undefined when value is anything\nother than a JavaScript number.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeDoubleBE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeDoubleLE(value[, offset])`", @@ -2384,7 +2561,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeDoubleBE() writes as big endian, writeDoubleLE() writes\nas little endian). value must be a JavaScript number. Behavior is undefined\nwhen value is anything other than a JavaScript number.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeDoubleBE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 40 5e dd 2f 1a 9f be 77>\n\nbuf.writeDoubleLE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as little-endian. The value\nmust be a JavaScript number. Behavior is undefined when value is anything\nother than a JavaScript number.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeDoubleLE(123.456, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 77 be 9f 1a 2f dd 5e 40>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeFloatBE(value[, offset])`", @@ -2427,7 +2604,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with specified endianness\n(writeFloatBE() writes as big endian, writeFloatLE() writes as little\nendian). value must be a JavaScript number. Behavior is undefined when\nvalue is anything other than a JavaScript number.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeFloatBE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 4f 4a fe bb>\n\nbuf.writeFloatLE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer bb fe 4a 4f>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as big-endian. Behavior is\nundefined when value is anything other than a JavaScript number.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeFloatBE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 4f 4a fe bb>\n\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeFloatLE(value[, offset])`", @@ -2470,7 +2647,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with specified endianness\n(writeFloatBE() writes as big endian, writeFloatLE() writes as little\nendian). value must be a JavaScript number. Behavior is undefined when\nvalue is anything other than a JavaScript number.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeFloatBE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 4f 4a fe bb>\n\nbuf.writeFloatLE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer bb fe 4a 4f>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as little-endian. Behavior is\nundefined when value is anything other than a JavaScript number.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeFloatLE(0xcafebabe, 0);\n\nconsole.log(buf);\n// Prints: <Buffer bb fe 4a 4f>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeInt8(value[, offset])`", @@ -2556,7 +2733,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeInt16BE() writes as big endian, writeInt16LE() writes\nas little endian). value must be a valid signed 16-bit integer. Behavior is\nundefined when value is anything other than a signed 16-bit integer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeInt16BE(0x0102, 0);\nbuf.writeInt16LE(0x0304, 2);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 04 03>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as big-endian. The value\nmust be a valid signed 16-bit integer. Behavior is undefined when value is\nanything other than a signed 16-bit integer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(2);\n\nbuf.writeInt16BE(0x0102, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeInt16LE(value[, offset])`", @@ -2599,7 +2776,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeInt16BE() writes as big endian, writeInt16LE() writes\nas little endian). value must be a valid signed 16-bit integer. Behavior is\nundefined when value is anything other than a signed 16-bit integer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeInt16BE(0x0102, 0);\nbuf.writeInt16LE(0x0304, 2);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 04 03>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as little-endian. The value\nmust be a valid signed 16-bit integer. Behavior is undefined when value is\nanything other than a signed 16-bit integer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(2);\n\nbuf.writeInt16LE(0x0304, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 04 03>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeInt32BE(value[, offset])`", @@ -2642,7 +2819,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeInt32BE() writes aS big endian, writeInt32LE() writes\nas little endian). value must be a valid signed 32-bit integer. Behavior is\nundefined when value is anything other than a signed 32-bit integer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeInt32BE(0x01020304, 0);\nbuf.writeInt32LE(0x05060708, 4);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 08 07 06 05>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as big-endian. The value\nmust be a valid signed 32-bit integer. Behavior is undefined when value is\nanything other than a signed 32-bit integer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeInt32BE(0x01020304, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeInt32LE(value[, offset])`", @@ -2685,7 +2862,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeInt32BE() writes aS big endian, writeInt32LE() writes\nas little endian). value must be a valid signed 32-bit integer. Behavior is\nundefined when value is anything other than a signed 32-bit integer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(8);\n\nbuf.writeInt32BE(0x01020304, 0);\nbuf.writeInt32LE(0x05060708, 4);\n\nconsole.log(buf);\n// Prints: <Buffer 01 02 03 04 08 07 06 05>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as little-endian. The value\nmust be a valid signed 32-bit integer. Behavior is undefined when value is\nanything other than a signed 32-bit integer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The value is interpreted and written as a two's complement signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeInt32LE(0x05060708, 0);\n\nconsole.log(buf);\n// Prints: <Buffer 08 07 06 05>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeIntBE(value, offset, byteLength)`", @@ -2733,7 +2910,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes byteLength bytes of value to buf at the specified offset.\nSupports up to 48 bits of accuracy. Behavior is undefined when value is\nanything other than a signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(6);\n\nbuf.writeIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\nbuf.writeIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes byteLength bytes of value to buf at the specified offset\nas big-endian. Supports up to 48 bits of accuracy. Behavior is undefined when\nvalue is anything other than a signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(6);\n\nbuf.writeIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeIntLE(value, offset, byteLength)`", @@ -2781,7 +2958,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes byteLength bytes of value to buf at the specified offset.\nSupports up to 48 bits of accuracy. Behavior is undefined when value is\nanything other than a signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(6);\n\nbuf.writeIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\nbuf.writeIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes byteLength bytes of value to buf at the specified offset\nas little-endian. Supports up to 48 bits of accuracy. Behavior is undefined\nwhen value is anything other than a signed integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(6);\n\nbuf.writeIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeUInt8(value[, offset])`", @@ -2793,6 +2970,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint8()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -2836,6 +3018,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint16BE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -2867,7 +3054,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeUInt16BE() writes as big endian, writeUInt16LE() writes\nas little endian). value must be a valid unsigned 16-bit integer. Behavior is\nundefined when value is anything other than an unsigned 16-bit integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt16BE(0xdead, 0);\nbuf.writeUInt16BE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer de ad be ef>\n\nbuf.writeUInt16LE(0xdead, 0);\nbuf.writeUInt16LE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer ad de ef be>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as big-endian. The value\nmust be a valid unsigned 16-bit integer. Behavior is undefined when value\nis anything other than an unsigned 16-bit integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt16BE(0xdead, 0);\nbuf.writeUInt16BE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer de ad be ef>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeUInt16LE(value[, offset])`", @@ -2879,6 +3066,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint16LE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -2910,7 +3102,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeUInt16BE() writes as big endian, writeUInt16LE() writes\nas little endian). value must be a valid unsigned 16-bit integer. Behavior is\nundefined when value is anything other than an unsigned 16-bit integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt16BE(0xdead, 0);\nbuf.writeUInt16BE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer de ad be ef>\n\nbuf.writeUInt16LE(0xdead, 0);\nbuf.writeUInt16LE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer ad de ef be>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as little-endian. The value\nmust be a valid unsigned 16-bit integer. Behavior is undefined when value is\nanything other than an unsigned 16-bit integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt16LE(0xdead, 0);\nbuf.writeUInt16LE(0xbeef, 2);\n\nconsole.log(buf);\n// Prints: <Buffer ad de ef be>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeUInt32BE(value[, offset])`", @@ -2922,6 +3114,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint32BE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -2953,7 +3150,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeUInt32BE() writes as big endian, writeUInt32LE() writes\nas little endian). value must be a valid unsigned 32-bit integer. Behavior is\nundefined when value is anything other than an unsigned 32-bit integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt32BE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer fe ed fa ce>\n\nbuf.writeUInt32LE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer ce fa ed fe>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as big-endian. The value\nmust be a valid unsigned 32-bit integer. Behavior is undefined when value\nis anything other than an unsigned 32-bit integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt32BE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer fe ed fa ce>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeUInt32LE(value[, offset])`", @@ -2965,6 +3162,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUint32LE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset to `uint32` anymore." @@ -2996,7 +3198,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset with the specified\nendianness (writeUInt32BE() writes as big endian, writeUInt32LE() writes\nas little endian). value must be a valid unsigned 32-bit integer. Behavior is\nundefined when value is anything other than an unsigned 32-bit integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt32BE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer fe ed fa ce>\n\nbuf.writeUInt32LE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer ce fa ed fe>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes value to buf at the specified offset as little-endian. The value\nmust be a valid unsigned 32-bit integer. Behavior is undefined when value is\nanything other than an unsigned 32-bit integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(4);\n\nbuf.writeUInt32LE(0xfeedface, 0);\n\nconsole.log(buf);\n// Prints: <Buffer ce fa ed fe>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeUIntBE(value, offset, byteLength)`", @@ -3008,6 +3210,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUintBE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset and `byteLength` to `uint32` anymore." @@ -3044,7 +3251,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes byteLength bytes of value to buf at the specified offset.\nSupports up to 48 bits of accuracy. Behavior is undefined when value is\nanything other than an unsigned integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(6);\n\nbuf.writeUIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\nbuf.writeUIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes byteLength bytes of value to buf at the specified offset\nas big-endian. Supports up to 48 bits of accuracy. Behavior is undefined\nwhen value is anything other than an unsigned integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(6);\n\nbuf.writeUIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n
                                                                                                                                                                                                                                                                " }, { "textRaw": "`buf.writeUIntLE(value, offset, byteLength)`", @@ -3056,6 +3263,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34729", + "description": "This function is also available as `buf.writeUintLE()`." + }, + { "version": "v10.0.0", "pr-url": "https://github.com/nodejs/node/pull/18395", "description": "Removed `noAssert` and no implicit coercion of the offset and `byteLength` to `uint32` anymore." @@ -3092,7 +3304,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Writes byteLength bytes of value to buf at the specified offset.\nSupports up to 48 bits of accuracy. Behavior is undefined when value is\nanything other than an unsigned integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(6);\n\nbuf.writeUIntBE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer 12 34 56 78 90 ab>\n\nbuf.writeUIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Writes byteLength bytes of value to buf at the specified offset\nas little-endian. Supports up to 48 bits of accuracy. Behavior is undefined\nwhen value is anything other than an unsigned integer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.allocUnsafe(6);\n\nbuf.writeUIntLE(0x1234567890ab, 0, 6);\n\nconsole.log(buf);\n// Prints: <Buffer ab 90 78 56 34 12>\n
                                                                                                                                                                                                                                                                " } ], "signatures": [ @@ -3105,7 +3317,7 @@ "desc": "An array of bytes to copy from." } ], - "desc": "

                                                                                                                                                                                                                                                                See Buffer.from(array).

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                See Buffer.from(array).

                                                                                                                                                                                                                                                                " }, { "params": [ @@ -3130,7 +3342,7 @@ "desc": "Number of bytes to expose." } ], - "desc": "

                                                                                                                                                                                                                                                                See\nBuffer.from(arrayBuffer[, byteOffset[, length]]).

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                See\nBuffer.from(arrayBuffer[, byteOffset[, length]]).

                                                                                                                                                                                                                                                                " }, { "params": [ @@ -3141,7 +3353,7 @@ "desc": "An existing `Buffer` or [`Uint8Array`][] from which to copy data." } ], - "desc": "

                                                                                                                                                                                                                                                                See Buffer.from(buffer).

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                See Buffer.from(buffer).

                                                                                                                                                                                                                                                                " }, { "params": [ @@ -3152,7 +3364,7 @@ "desc": "The desired length of the new `Buffer`." } ], - "desc": "

                                                                                                                                                                                                                                                                See Buffer.alloc() and Buffer.allocUnsafe(). This variant of the\nconstructor is equivalent to Buffer.alloc().

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                See Buffer.alloc() and Buffer.allocUnsafe(). This variant of the\nconstructor is equivalent to Buffer.alloc().

                                                                                                                                                                                                                                                                " }, { "params": [ @@ -3170,115 +3382,11 @@ "desc": "The encoding of `string`." } ], - "desc": "

                                                                                                                                                                                                                                                                See Buffer.from(string[, encoding]).

                                                                                                                                                                                                                                                                " - } - ] - }, - { - "textRaw": "Class: `SlowBuffer`", - "type": "class", - "name": "SlowBuffer", - "meta": { - "deprecated": [ - "v6.0.0" - ], - "changes": [] - }, - "stability": 0, - "stabilityText": "Deprecated: Use [`Buffer.allocUnsafeSlow()`][] instead.", - "desc": "

                                                                                                                                                                                                                                                                See Buffer.allocUnsafeSlow(). This was never a class in the sense that\nthe constructor always returned a Buffer instance, rather than a SlowBuffer\ninstance.

                                                                                                                                                                                                                                                                ", - "signatures": [ - { - "params": [ - { - "textRaw": "`size` {integer} The desired length of the new `SlowBuffer`.", - "name": "size", - "type": "integer", - "desc": "The desired length of the new `SlowBuffer`." - } - ], - "desc": "

                                                                                                                                                                                                                                                                See Buffer.allocUnsafeSlow().

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                See Buffer.from(string[, encoding]).

                                                                                                                                                                                                                                                                " } ] } ], - "properties": [ - { - "textRaw": "`INSPECT_MAX_BYTES` {integer} **Default:** `50`", - "type": "integer", - "name": "INSPECT_MAX_BYTES", - "meta": { - "added": [ - "v0.5.4" - ], - "changes": [] - }, - "default": "`50`", - "desc": "

                                                                                                                                                                                                                                                                Returns the maximum number of bytes that will be returned when\nbuf.inspect() is called. This can be overridden by user modules. See\nutil.inspect() for more details on buf.inspect() behavior.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This is a property on the buffer module returned by\nrequire('buffer'), not on the Buffer global or a Buffer instance.

                                                                                                                                                                                                                                                                " - }, - { - "textRaw": "`kMaxLength` {integer} The largest size allowed for a single `Buffer` instance.", - "type": "integer", - "name": "kMaxLength", - "meta": { - "added": [ - "v3.0.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                                An alias for buffer.constants.MAX_LENGTH.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This is a property on the buffer module returned by\nrequire('buffer'), not on the Buffer global or a Buffer instance.

                                                                                                                                                                                                                                                                ", - "shortDesc": "The largest size allowed for a single `Buffer` instance." - } - ], - "methods": [ - { - "textRaw": "`buffer.transcode(source, fromEnc, toEnc)`", - "type": "method", - "name": "transcode", - "meta": { - "added": [ - "v7.1.0" - ], - "changes": [ - { - "version": "v8.0.0", - "pr-url": "https://github.com/nodejs/node/pull/10236", - "description": "The `source` parameter can now be a `Uint8Array`." - } - ] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {Buffer}", - "name": "return", - "type": "Buffer" - }, - "params": [ - { - "textRaw": "`source` {Buffer|Uint8Array} A `Buffer` or `Uint8Array` instance.", - "name": "source", - "type": "Buffer|Uint8Array", - "desc": "A `Buffer` or `Uint8Array` instance." - }, - { - "textRaw": "`fromEnc` {string} The current encoding.", - "name": "fromEnc", - "type": "string", - "desc": "The current encoding." - }, - { - "textRaw": "`toEnc` {string} To target encoding.", - "name": "toEnc", - "type": "string", - "desc": "To target encoding." - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                                Re-encodes the given Buffer or Uint8Array instance from one character\nencoding to another. Returns a new Buffer instance.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Throws if the fromEnc or toEnc specify invalid character encodings or if\nconversion from fromEnc to toEnc is not permitted.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Encodings supported by buffer.transcode() are: 'ascii', 'utf8',\n'utf16le', 'ucs2', 'latin1', and 'binary'.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The transcoding process will use substitution characters if a given byte\nsequence cannot be adequately represented in the target encoding. For instance:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buffer = require('buffer');\n\nconst newBuf = buffer.transcode(Buffer.from('€'), 'utf8', 'ascii');\nconsole.log(newBuf.toString('ascii'));\n// Prints: '?'\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Because the Euro () sign is not representable in US-ASCII, it is replaced\nwith ? in the transcoded Buffer.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This is a property on the buffer module returned by\nrequire('buffer'), not on the Buffer global or a Buffer instance.

                                                                                                                                                                                                                                                                " - } - ], "type": "module", "displayName": "Buffer" } diff -Nru nodejs-mozilla-12.18.1/doc/api/buffer.md nodejs-mozilla-12.22.12/doc/api/buffer.md --- nodejs-mozilla-12.18.1/doc/api/buffer.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/buffer.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,20 +4,14 @@ > Stability: 2 - Stable -In Node.js, `Buffer` objects are used to represent binary data in the form -of a sequence of bytes. Many Node.js APIs, for example streams and file system -operations, support `Buffer`s, as interactions with the operating system or -other processes generally always happen in terms of binary data. - -The `Buffer` class is a subclass of the [`Uint8Array`][] class that is built -into the JavaScript language. A number of additional methods are supported -that cover additional use cases. Node.js APIs accept plain [`Uint8Array`][]s -wherever `Buffer`s are supported as well. - -Instances of the `Buffer` class, and [`Uint8Array`][]s in general, -are similar to arrays of integers from `0` to `255`, but correspond to -fixed-sized blocks of memory and cannot contain any other values. -The size of a `Buffer` is established when it is created and cannot be changed. + + +`Buffer` objects are used to represent a fixed-length sequence of bytes. Many +Node.js APIs support `Buffer`s. + +The `Buffer` class is a subclass of JavaScript's [`Uint8Array`][] class and +extends it with methods that cover additional use cases. Node.js APIs accept +plain [`Uint8Array`][]s wherever `Buffer`s are supported as well. The `Buffer` class is within the global scope, making it unlikely that one would need to ever use `require('buffer').Buffer`. @@ -53,7 +47,7 @@ const buf7 = Buffer.from('tést', 'latin1'); ``` -## Buffers and Character Encodings +## Buffers and character encodings -`Buffer` instances are also [`Uint8Array`][] instances, which is the language’s -built-in class for working with binary data. [`Uint8Array`][] in turn is a -subclass of [`TypedArray`][]. Therefore, all [`TypedArray`][] methods are also -available on `Buffer`s. However, there are subtle incompatibilities between -the `Buffer` API and the [`TypedArray`][] API. +`Buffer` instances are also JavaScript [`Uint8Array`][] and [`TypedArray`][] +instances. All [`TypedArray`][] methods are available on `Buffer`s. There are, +however, subtle incompatibilities between the `Buffer` API and the +[`TypedArray`][] API. In particular: @@ -179,26 +173,37 @@ * [`buf.toString()`][] is incompatible with its `TypedArray` equivalent. * A number of methods, e.g. [`buf.indexOf()`][], support additional arguments. -There are two ways to create new [`TypedArray`][] instances from a `Buffer`. +There are two ways to create new [`TypedArray`][] instances from a `Buffer`: -When passing a `Buffer` to a [`TypedArray`][] constructor, the `Buffer`’s -elements will be copied, interpreted as an array of integers, and not as a byte -array of the target type. For example, -`new Uint32Array(Buffer.from([1, 2, 3, 4]))` creates a 4-element -[`Uint32Array`][] with elements `[1, 2, 3, 4]`, rather than a -[`Uint32Array`][] with a single element `[0x1020304]` or `[0x4030201]`. - -In order to create a [`TypedArray`][] that shares its memory with the `Buffer`, -the underlying [`ArrayBuffer`][] can be passed to the [`TypedArray`][] -constructor instead: +* Passing a `Buffer` to a [`TypedArray`][] constructor will copy the `Buffer`s + contents, interpreted as an array of integers, and not as a byte sequence + of the target type. + +```js +const buf = Buffer.from([1, 2, 3, 4]); +const uint32array = new Uint32Array(buf); + +console.log(uint32array); + +// Prints: Uint32Array(4) [ 1, 2, 3, 4 ] +``` + +* Passing the `Buffer`s underlying [`ArrayBuffer`][] will create a + [`TypedArray`][] that shares its memory with the `Buffer`. ```js const buf = Buffer.from('hello', 'utf16le'); const uint16arr = new Uint16Array( - buf.buffer, buf.byteOffset, buf.length / Uint16Array.BYTES_PER_ELEMENT); + buf.buffer, + buf.byteOffset, + buf.length / Uint16Array.BYTES_PER_ELEMENT); + +console.log(uint16array); + +// Prints: Uint16Array(5) [ 104, 101, 108, 108, 111 ] ``` -It is also possible to create a new `Buffer` that shares the same allocated +It is possible to create a new `Buffer` that shares the same allocated memory as a [`TypedArray`][] instance by using the `TypedArray` object’s `.buffer` property in the same way. [`Buffer.from()`][`Buffer.from(arrayBuf)`] behaves like `new Uint8Array()` in this context. @@ -211,6 +216,7 @@ // Copies the contents of `arr`. const buf1 = Buffer.from(arr); + // Shares memory with `arr`. const buf2 = Buffer.from(arr.buffer); @@ -278,7 +284,7 @@ The `Buffer` class is a global type for dealing with binary data directly. It can be constructed in a variety of ways. -### Class Method: `Buffer.alloc(size[, fill[, encoding]])` +### Static method: `Buffer.alloc(size[, fill[, encoding]])` @@ -440,7 +446,7 @@ A `TypeError` will be thrown if `size` is not a number. -### Class Method: `Buffer.byteLength(string[, encoding])` +### Static method: `Buffer.byteLength(string[, encoding])` @@ -575,7 +584,7 @@ `Buffer.from(array)` and [`Buffer.from(string)`][] may also use the internal `Buffer` pool like [`Buffer.allocUnsafe()`][] does. -### Class Method: `Buffer.from(arrayBuffer[, byteOffset[, length]])` +### Static method: `Buffer.from(arrayBuffer[, byteOffset[, length]])` @@ -626,7 +635,7 @@ [`SharedArrayBuffer`][] or another type appropriate for `Buffer.from()` variants. -### Class Method: `Buffer.from(buffer)` +### Static method: `Buffer.from(buffer)` @@ -651,17 +660,14 @@ A `TypeError` will be thrown if `buffer` is not a `Buffer` or another type appropriate for `Buffer.from()` variants. -### Class Method: `Buffer.from(object[, offsetOrEncoding[, length]])` +### Static method: `Buffer.from(object[, offsetOrEncoding[, length]])` * `object` {Object} An object supporting `Symbol.toPrimitive` or `valueOf()`. -* `offsetOrEncoding` {integer|string} A byte-offset or encoding, depending on - the value returned either by `object.valueOf()` or - `object[Symbol.toPrimitive]()`. -* `length` {integer} A length, depending on the value returned either by - `object.valueOf()` or `object[Symbol.toPrimitive]()`. +* `offsetOrEncoding` {integer|string} A byte-offset or encoding. +* `length` {integer} A length. For objects whose `valueOf()` function returns a value not strictly equal to `object`, returns `Buffer.from(object.valueOf(), offsetOrEncoding, length)`. @@ -672,7 +678,7 @@ ``` For objects that support `Symbol.toPrimitive`, returns -`Buffer.from(object[Symbol.toPrimitive](), offsetOrEncoding, length)`. +`Buffer.from(object[Symbol.toPrimitive]('string'), offsetOrEncoding)`. ```js class Foo { @@ -688,7 +694,7 @@ A `TypeError` will be thrown if `object` does not have the mentioned methods or is not of another type appropriate for `Buffer.from()` variants. -### Class Method: `Buffer.from(string[, encoding])` +### Static method: `Buffer.from(string[, encoding])` @@ -714,7 +720,7 @@ A `TypeError` will be thrown if `string` is not a string or another type appropriate for `Buffer.from()` variants. -### Class Method: `Buffer.isBuffer(obj)` +### Static method: `Buffer.isBuffer(obj)` @@ -724,7 +730,7 @@ Returns `true` if `obj` is a `Buffer`, `false` otherwise. -### Class Method: `Buffer.isEncoding(encoding)` +### Static method: `Buffer.isEncoding(encoding)` @@ -749,7 +755,7 @@ // Prints: false ``` -### Class Property: `Buffer.poolSize` +### Class property: `Buffer.poolSize` @@ -773,7 +779,7 @@ This operator is inherited from `Uint8Array`, so its behavior on out-of-bounds access is the same as `Uint8Array`. In other words, `buf[index]` returns -`undefined` when `index` is negative or `>= buf.length`, and +`undefined` when `index` is negative or greater or equal to `buf.length`, and `buf[index] = value` does not modify the buffer if `index` is negative or `>= buf.length`. @@ -795,8 +801,8 @@ ### `buf.buffer` -* {ArrayBuffer} The underlying `ArrayBuffer` object based on - which this `Buffer` object is created. +* {ArrayBuffer} The underlying `ArrayBuffer` object based on which this `Buffer` + object is created. This `ArrayBuffer` is not guaranteed to correspond exactly to the original `Buffer`. See the notes on `buf.byteOffset` for details. @@ -811,16 +817,15 @@ ### `buf.byteOffset` -* {integer} The `byteOffset` on the underlying `ArrayBuffer` object based on - which this `Buffer` object is created. +* {integer} The `byteOffset` of the `Buffer`s underlying `ArrayBuffer` object. When setting `byteOffset` in `Buffer.from(ArrayBuffer, byteOffset, length)`, -or sometimes when allocating a buffer smaller than `Buffer.poolSize`, the -buffer doesn't start from a zero offset on the underlying `ArrayBuffer`. +or sometimes when allocating a `Buffer` smaller than `Buffer.poolSize`, the +buffer does not start from a zero offset on the underlying `ArrayBuffer`. This can cause problems when accessing the underlying `ArrayBuffer` directly using `buf.buffer`, as other parts of the `ArrayBuffer` may be unrelated -to the `buf` object itself. +to the `Buffer` object itself. A common issue when creating a `TypedArray` object that shares its memory with a `Buffer` is that in this case one needs to specify the `byteOffset` correctly: @@ -1340,6 +1345,21 @@ The `buf.parent` property is a deprecated alias for `buf.buffer`. ### `buf.readBigInt64BE([offset])` + + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`. +* Returns: {bigint} + +Reads a signed, big-endian 64-bit integer from `buf` at the specified `offset`. + +Integers read from a `Buffer` are interpreted as two's complement signed +values. + ### `buf.readBigInt64LE([offset])` * `offset` {integer} Number of bytes to skip before starting to read. Must satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`. * Returns: {bigint} -Reads an unsigned 64-bit integer from `buf` at the specified `offset` with -the specified [endianness][] (`readBigUInt64BE()` reads as big endian, -`readBigUInt64LE()` reads as little endian). +Reads an unsigned, big-endian 64-bit integer from `buf` at the specified +`offset`. ```js const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); console.log(buf.readBigUInt64BE(0)); // Prints: 4294967295n +``` + +### `buf.readBigUInt64LE([offset])` + + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`. +* Returns: {bigint} + +Reads an unsigned, little-endian 64-bit integer from `buf` at the specified +`offset`. + +```js +const buf = Buffer.from([0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff]); console.log(buf.readBigUInt64LE(0)); // Prints: 18446744069414584320n ``` ### `buf.readDoubleBE([offset])` -### `buf.readDoubleLE([offset])` + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy `0 <= offset <= buf.length - 8`. **Default:** `0`. +* Returns: {number} + +Reads a 64-bit, little-endian double from `buf` at the specified `offset`. + +```js +const buf = Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]); + console.log(buf.readDoubleLE(0)); // Prints: 5.447603722011605e-270 console.log(buf.readDoubleLE(1)); @@ -1410,7 +1472,6 @@ ``` ### `buf.readFloatBE([offset])` -### `buf.readFloatLE([offset])` + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`. +* Returns: {number} + +Reads a 32-bit, little-endian float from `buf` at the specified `offset`. + +```js +const buf = Buffer.from([1, 2, 3, 4]); + console.log(buf.readFloatLE(0)); // Prints: 1.539989614439558e-36 console.log(buf.readFloatLE(1)); @@ -1469,7 +1549,6 @@ ``` ### `buf.readInt16BE([offset])` -### `buf.readInt16LE([offset])` + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy `0 <= offset <= buf.length - 2`. **Default:** `0`. +* Returns: {integer} + +Reads a signed, little-endian 16-bit integer from `buf` at the specified +`offset`. + +Integers read from a `Buffer` are interpreted as two's complement signed values. + +```js +const buf = Buffer.from([0, 5]); + console.log(buf.readInt16LE(0)); // Prints: 1280 console.log(buf.readInt16LE(1)); @@ -1501,7 +1602,6 @@ ``` ### `buf.readInt32BE([offset])` -### `buf.readInt32LE([offset])` + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`. +* Returns: {integer} + +Reads a signed, little-endian 32-bit integer from `buf` at the specified +`offset`. + +Integers read from a `Buffer` are interpreted as two's complement signed values. + +```js +const buf = Buffer.from([0, 0, 0, 5]); + console.log(buf.readInt32LE(0)); // Prints: 83886080 console.log(buf.readInt32LE(1)); @@ -1533,7 +1655,6 @@ ``` ### `buf.readIntBE(offset, byteLength)` -### `buf.readIntLE(offset, byteLength)` + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy `0 <= offset <= buf.length - byteLength`. +* `byteLength` {integer} Number of bytes to read. Must satisfy + `0 < byteLength <= 6`. +* Returns: {integer} + +Reads `byteLength` number of bytes from `buf` at the specified `offset` +and interprets the result as a little-endian, two's complement signed value +supporting up to 48 bits of accuracy. + +```js +const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + +console.log(buf.readIntLE(0, 6).toString(16)); +// Prints: -546f87a9cbee +``` + ### `buf.readUInt8([offset])` + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy `0 <= offset <= buf.length - 2`. **Default:** `0`. +* Returns: {integer} + +Reads an unsigned, little-endian 16-bit integer from `buf` at the specified +`offset`. + +```js +const buf = Buffer.from([0x12, 0x34, 0x56]); + +console.log(buf.readUInt16LE(0).toString(16)); +// Prints: 3412 console.log(buf.readUInt16LE(1).toString(16)); // Prints: 5634 console.log(buf.readUInt16LE(2).toString(16)); @@ -1628,10 +1803,12 @@ ``` ### `buf.readUInt32BE([offset])` -### `buf.readUInt32LE([offset])` + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`. +* Returns: {integer} + +Reads an unsigned, little-endian 32-bit integer from `buf` at the specified +`offset`. + +```js +const buf = Buffer.from([0x12, 0x34, 0x56, 0x78]); + console.log(buf.readUInt32LE(0).toString(16)); // Prints: 78563412 console.log(buf.readUInt32LE(1).toString(16)); @@ -1658,10 +1859,12 @@ ``` ### `buf.readUIntBE(offset, byteLength)` -### `buf.readUIntLE(offset, byteLength)` + +* `offset` {integer} Number of bytes to skip before starting to read. Must + satisfy `0 <= offset <= buf.length - byteLength`. +* `byteLength` {integer} Number of bytes to read. Must satisfy + `0 < byteLength <= 6`. +* Returns: {integer} + +Reads `byteLength` number of bytes from `buf` at the specified `offset` +and interprets the result as an unsigned, little-endian integer supporting +up to 48 bits of accuracy. + +```js +const buf = Buffer.from([0x12, 0x34, 0x56, 0x78, 0x90, 0xab]); + +console.log(buf.readUIntLE(0, 6).toString(16)); +// Prints: ab9078563412 +``` + ### `buf.subarray([start[, end]])` @@ -2036,9 +2266,7 @@ satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`. * Returns: {integer} `offset` plus the number of bytes written. -Writes `value` to `buf` at the specified `offset` with the specified -[endianness][] (`writeBigInt64BE()` writes as big endian, `writeBigInt64LE()` -writes as little endian). +Writes `value` to `buf` at the specified `offset` as big-endian. `value` is interpreted and written as a two's complement signed integer. @@ -2051,10 +2279,65 @@ // Prints: ``` +### `buf.writeBigInt64LE(value[, offset])` + + +* `value` {bigint} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `value` to `buf` at the specified `offset` as little-endian. + +`value` is interpreted and written as a two's complement signed integer. + +```js +const buf = Buffer.allocUnsafe(8); + +buf.writeBigInt64LE(0x0102030405060708n, 0); + +console.log(buf); +// Prints: +``` + ### `buf.writeBigUInt64BE(value[, offset])` + + +* `value` {bigint} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `value` to `buf` at the specified `offset` as big-endian. + +```js +const buf = Buffer.allocUnsafe(8); + +buf.writeBigUInt64BE(0xdecafafecacefaden, 0); + +console.log(buf); +// Prints: +``` + ### `buf.writeBigUInt64LE(value[, offset])` * `value` {bigint} Number to be written to `buf`. @@ -2062,9 +2345,7 @@ satisfy: `0 <= offset <= buf.length - 8`. **Default:** `0`. * Returns: {integer} `offset` plus the number of bytes written. -Writes `value` to `buf` at the specified `offset` with specified [endianness][] -(`writeBigUInt64BE()` writes as big endian, `writeBigUInt64LE()` writes as -little endian). +Writes `value` to `buf` at the specified `offset` as little-endian ```js const buf = Buffer.allocUnsafe(8); @@ -2076,7 +2357,6 @@ ``` ### `buf.writeDoubleBE(value[, offset])` -### `buf.writeDoubleLE(value[, offset])` + +* `value` {number} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy `0 <= offset <= buf.length - 8`. **Default:** `0`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `value` to `buf` at the specified `offset` as little-endian. The `value` +must be a JavaScript number. Behavior is undefined when `value` is anything +other than a JavaScript number. + +```js +const buf = Buffer.allocUnsafe(8); buf.writeDoubleLE(123.456, 0); @@ -2111,7 +2413,6 @@ ``` ### `buf.writeFloatBE(value[, offset])` -### `buf.writeFloatLE(value[, offset])` + +* `value` {number} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `value` to `buf` at the specified `offset` as little-endian. Behavior is +undefined when `value` is anything other than a JavaScript number. + +```js +const buf = Buffer.allocUnsafe(4); + buf.writeFloatLE(0xcafebabe, 0); console.log(buf); @@ -2177,7 +2499,6 @@ ``` ### `buf.writeInt16BE(value[, offset])` -### `buf.writeInt16LE(value[, offset])` + +* `value` {integer} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy `0 <= offset <= buf.length - 2`. **Default:** `0`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `value` to `buf` at the specified `offset` as little-endian. The `value` +must be a valid signed 16-bit integer. Behavior is undefined when `value` is +anything other than a signed 16-bit integer. + +The `value` is interpreted and written as a two's complement signed integer. + +```js +const buf = Buffer.allocUnsafe(2); + +buf.writeInt16LE(0x0304, 0); + +console.log(buf); +// Prints: ``` ### `buf.writeInt32BE(value[, offset])` -### `buf.writeInt32LE(value[, offset])` + +* `value` {integer} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `value` to `buf` at the specified `offset` as little-endian. The `value` +must be a valid signed 32-bit integer. Behavior is undefined when `value` is +anything other than a signed 32-bit integer. + +The `value` is interpreted and written as a two's complement signed integer. + +```js +const buf = Buffer.allocUnsafe(4); + +buf.writeInt32LE(0x05060708, 0); + +console.log(buf); +// Prints: ``` ### `buf.writeIntBE(value, offset, byteLength)` -### `buf.writeIntLE(value, offset, byteLength)` + +* `value` {integer} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy `0 <= offset <= buf.length - byteLength`. +* `byteLength` {integer} Number of bytes to write. Must satisfy + `0 < byteLength <= 6`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `byteLength` bytes of `value` to `buf` at the specified `offset` +as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined +when `value` is anything other than a signed integer. + +```js +const buf = Buffer.allocUnsafe(6); + buf.writeIntLE(0x1234567890ab, 0, 6); console.log(buf); @@ -2282,6 +2683,9 @@ + +* `value` {integer} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy `0 <= offset <= buf.length - 2`. **Default:** `0`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `value` to `buf` at the specified `offset` as little-endian. The `value` +must be a valid unsigned 16-bit integer. Behavior is undefined when `value` is +anything other than an unsigned 16-bit integer. + +```js +const buf = Buffer.allocUnsafe(4); buf.writeUInt16LE(0xdead, 0); buf.writeUInt16LE(0xbeef, 2); @@ -2347,10 +2778,12 @@ ``` ### `buf.writeUInt32BE(value[, offset])` -### `buf.writeUInt32LE(value[, offset])` + +* `value` {integer} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy `0 <= offset <= buf.length - 4`. **Default:** `0`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `value` to `buf` at the specified `offset` as little-endian. The `value` +must be a valid unsigned 32-bit integer. Behavior is undefined when `value` is +anything other than an unsigned 32-bit integer. + +```js +const buf = Buffer.allocUnsafe(4); buf.writeUInt32LE(0xfeedface, 0); @@ -2382,10 +2840,12 @@ ``` ### `buf.writeUIntBE(value, offset, byteLength)` -### `buf.writeUIntLE(value, offset, byteLength)` + +* `value` {integer} Number to be written to `buf`. +* `offset` {integer} Number of bytes to skip before starting to write. Must + satisfy `0 <= offset <= buf.length - byteLength`. +* `byteLength` {integer} Number of bytes to write. Must satisfy + `0 < byteLength <= 6`. +* Returns: {integer} `offset` plus the number of bytes written. + +Writes `byteLength` bytes of `value` to `buf` at the specified `offset` +as little-endian. Supports up to 48 bits of accuracy. Behavior is undefined +when `value` is anything other than an unsigned integer. + +```js +const buf = Buffer.allocUnsafe(6); buf.writeUIntLE(0x1234567890ab, 0, 6); @@ -2547,7 +3035,13 @@ See [`Buffer.from(string[, encoding])`][`Buffer.from(string)`]. -## `buffer.INSPECT_MAX_BYTES` +## `buffer` module APIs + +While, the `Buffer` object is available as a global, there are additional +`Buffer`-related APIs that are available only via the `buffer` module +accessed using `require('buffer')`. + +### `buffer.INSPECT_MAX_BYTES` @@ -2558,10 +3052,7 @@ `buf.inspect()` is called. This can be overridden by user modules. See [`util.inspect()`][] for more details on `buf.inspect()` behavior. -This is a property on the `buffer` module returned by -`require('buffer')`, not on the `Buffer` global or a `Buffer` instance. - -## `buffer.kMaxLength` +### `buffer.kMaxLength` @@ -2570,10 +3061,7 @@ An alias for [`buffer.constants.MAX_LENGTH`][]. -This is a property on the `buffer` module returned by -`require('buffer')`, not on the `Buffer` global or a `Buffer` instance. - -## `buffer.transcode(source, fromEnc, toEnc)` +### `buffer.transcode(source, fromEnc, toEnc)` @@ -2624,7 +3109,7 @@ the constructor always returned a `Buffer` instance, rather than a `SlowBuffer` instance. -### `new SlowBuffer(size)` +#### `new SlowBuffer(size)` @@ -2635,27 +3120,24 @@ See [`Buffer.allocUnsafeSlow()`][]. -## Buffer Constants +### Buffer constants -`buffer.constants` is a property on the `buffer` module returned by -`require('buffer')`, not on the `Buffer` global or a `Buffer` instance. - -### `buffer.constants.MAX_LENGTH` +#### `buffer.constants.MAX_LENGTH` * {integer} The largest size allowed for a single `Buffer` instance. -On 32-bit architectures, this value currently is `(2^30)-1` (~1GB). -On 64-bit architectures, this value currently is `(2^31)-1` (~2GB). +On 32-bit architectures, this value currently is 230 - 1 (~1GB). +On 64-bit architectures, this value currently is 231 - 1 (~2GB). This value is also available as [`buffer.kMaxLength`][]. -### `buffer.constants.MAX_STRING_LENGTH` +#### `buffer.constants.MAX_STRING_LENGTH` @@ -2703,7 +3185,7 @@ validate its input sufficiently might expect to always receive a string. Before Node.js 8.0.0, the 100 byte buffer might contain arbitrary pre-existing in-memory data, so may be used to expose in-memory -secrets to a remote attacker. Since Node.js 8.0.0, exposure of memory cannot +secrets to a remote attacker. Since Node.js 8.0.0, exposure of memory cannot occur because the data is zero-filled. However, other attacks are still possible, such as causing very large buffers to be allocated by the server, leading to performance degradation or crashing on memory exhaustion. @@ -2777,13 +3259,14 @@ [RFC 4648, Section 5]: https://tools.ietf.org/html/rfc4648#section-5 [WHATWG Encoding Standard]: https://encoding.spec.whatwg.org/ [`ArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer -[`Buffer.alloc()`]: #buffer_class_method_buffer_alloc_size_fill_encoding -[`Buffer.allocUnsafe()`]: #buffer_class_method_buffer_allocunsafe_size -[`Buffer.allocUnsafeSlow()`]: #buffer_class_method_buffer_allocunsafeslow_size -[`Buffer.from(array)`]: #buffer_class_method_buffer_from_array -[`Buffer.from(arrayBuf)`]: #buffer_class_method_buffer_from_arraybuffer_byteoffset_length -[`Buffer.from(buffer)`]: #buffer_class_method_buffer_from_buffer -[`Buffer.from(string)`]: #buffer_class_method_buffer_from_string_encoding +[`Buffer.alloc()`]: #buffer_static_method_buffer_alloc_size_fill_encoding +[`Buffer.allocUnsafe()`]: #buffer_static_method_buffer_allocunsafe_size +[`Buffer.allocUnsafeSlow()`]: #buffer_static_method_buffer_allocunsafeslow_size +[`Buffer.concat()`]: #buffer_static_method_buffer_concat_list_totallength +[`Buffer.from(array)`]: #buffer_static_method_buffer_from_array +[`Buffer.from(arrayBuf)`]: #buffer_static_method_buffer_from_arraybuffer_byteoffset_length +[`Buffer.from(buffer)`]: #buffer_static_method_buffer_from_buffer +[`Buffer.from(string)`]: #buffer_static_method_buffer_from_string_encoding [`Buffer.poolSize`]: #buffer_class_property_buffer_poolsize [`DataView`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView [`ERR_INVALID_BUFFER_SIZE`]: errors.html#ERR_INVALID_BUFFER_SIZE @@ -2799,7 +3282,6 @@ [`TypedArray#slice()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/slice [`TypedArray#subarray()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray [`TypedArray`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray -[`Uint32Array`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array [`Uint8Array`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array [`buf.buffer`]: #buffer_buf_buffer [`buf.compare()`]: #buffer_buf_compare_target_targetstart_targetend_sourcestart_sourceend diff -Nru nodejs-mozilla-12.18.1/doc/api/child_process.html nodejs-mozilla-12.22.12/doc/api/child_process.html --- nodejs-mozilla-12.18.1/doc/api/child_process.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/child_process.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Child Process | Node.js v12.18.1 Documentation + + Child process | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                • - Index + Index
                                                                                                                                                                                                                                                                • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                • View another version -
                                                                                                                                                                                                                                                                  1. 14.x
                                                                                                                                                                                                                                                                  2. +
                                                                                                                                                                                                                                                                    1. 17.x
                                                                                                                                                                                                                                                                    2. +
                                                                                                                                                                                                                                                                    3. 16.x LTS
                                                                                                                                                                                                                                                                    4. +
                                                                                                                                                                                                                                                                    5. 15.x
                                                                                                                                                                                                                                                                    6. +
                                                                                                                                                                                                                                                                    7. 14.x LTS
                                                                                                                                                                                                                                                                    8. 13.x
                                                                                                                                                                                                                                                                    9. 12.x LTS
                                                                                                                                                                                                                                                                    10. 11.x
                                                                                                                                                                                                                                                                    11. -
                                                                                                                                                                                                                                                                    12. 10.x LTS
                                                                                                                                                                                                                                                                    13. +
                                                                                                                                                                                                                                                                    14. 10.x
                                                                                                                                                                                                                                                                    15. 9.x
                                                                                                                                                                                                                                                                    16. 8.x
                                                                                                                                                                                                                                                                    17. 7.x
                                                                                                                                                                                                                                                                    18. @@ -121,18 +128,15 @@
                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Child Process#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Child process#

                                                                                                                                                                                                                                                                      Stability: 2 - Stable

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Source Code: lib/child_process.js

                                                                                                                                                                                                                                                                      The child_process module provides the ability to spawn child processes in a manner that is similar, but not identical, to popen(3). This capability is primarily provided by the child_process.spawn() function:

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                      -const ls = spawn('ls', ['-lh', '/usr']);
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                      +const ls = spawn('ls', ['-lh', '/usr']);
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -ls.stdout.on('data', (data) => {
                                                                                                                                                                                                                                                                      -  console.log(`stdout: ${data}`);
                                                                                                                                                                                                                                                                      +ls.stdout.on('data', (data) => {
                                                                                                                                                                                                                                                                      +  console.log(`stdout: ${data}`);
                                                                                                                                                                                                                                                                       });
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -ls.stderr.on('data', (data) => {
                                                                                                                                                                                                                                                                      -  console.error(`stderr: ${data}`);
                                                                                                                                                                                                                                                                      +ls.stderr.on('data', (data) => {
                                                                                                                                                                                                                                                                      +  console.error(`stderr: ${data}`);
                                                                                                                                                                                                                                                                       });
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -ls.on('close', (code) => {
                                                                                                                                                                                                                                                                      -  console.log(`child process exited with code ${code}`);
                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +ls.on('close', (code) => { + console.log(`child process exited with code ${code}`); +});

                                                                                                                                                                                                                                                                      By default, pipes for stdin, stdout, and stderr are established between the parent Node.js process and the spawned child. These pipes have limited (and platform-specific) capacity. If the child process writes to @@ -253,7 +254,7 @@ synchronous counterparts may be more convenient. In many cases, however, the synchronous methods can have significant impact on performance due to stalling the event loop while spawned processes complete.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Asynchronous Process Creation#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Asynchronous process creation#

                                                                                                                                                                                                                                                                      The child_process.spawn(), child_process.fork(), child_process.exec(), and child_process.execFile() methods all follow the idiomatic asynchronous programming pattern typical of other Node.js APIs.

                                                                                                                                                                                                                                                                      @@ -277,39 +278,37 @@ .cmd file as an argument (which is what the shell option and child_process.exec() do). In any case, if the script filename contains spaces it needs to be quoted.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      // On Windows Only...
                                                                                                                                                                                                                                                                      -const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                      -const bat = spawn('cmd.exe', ['/c', 'my.bat']);
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      -bat.stdout.on('data', (data) => {
                                                                                                                                                                                                                                                                      -  console.log(data.toString());
                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      -bat.stderr.on('data', (data) => {
                                                                                                                                                                                                                                                                      -  console.error(data.toString());
                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      -bat.on('exit', (code) => {
                                                                                                                                                                                                                                                                      -  console.log(`Child exited with code ${code}`);
                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      // OR...
                                                                                                                                                                                                                                                                      -const { exec, spawn } = require('child_process');
                                                                                                                                                                                                                                                                      -exec('my.bat', (err, stdout, stderr) => {
                                                                                                                                                                                                                                                                      -  if (err) {
                                                                                                                                                                                                                                                                      -    console.error(err);
                                                                                                                                                                                                                                                                      -    return;
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      // On Windows Only...
                                                                                                                                                                                                                                                                      +const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                      +const bat = spawn('cmd.exe', ['/c', 'my.bat']);
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      +bat.stdout.on('data', (data) => {
                                                                                                                                                                                                                                                                      +  console.log(data.toString());
                                                                                                                                                                                                                                                                      +});
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      +bat.stderr.on('data', (data) => {
                                                                                                                                                                                                                                                                      +  console.error(data.toString());
                                                                                                                                                                                                                                                                      +});
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      +bat.on('exit', (code) => {
                                                                                                                                                                                                                                                                      +  console.log(`Child exited with code ${code}`);
                                                                                                                                                                                                                                                                      +});
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      // OR...
                                                                                                                                                                                                                                                                      +const { exec, spawn } = require('child_process');
                                                                                                                                                                                                                                                                      +exec('my.bat', (err, stdout, stderr) => {
                                                                                                                                                                                                                                                                      +  if (err) {
                                                                                                                                                                                                                                                                      +    console.error(err);
                                                                                                                                                                                                                                                                      +    return;
                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                      -  console.log(stdout);
                                                                                                                                                                                                                                                                      +  console.log(stdout);
                                                                                                                                                                                                                                                                       });
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -// Script with spaces in the filename:
                                                                                                                                                                                                                                                                      -const bat = spawn('"my script.cmd"', ['a', 'b'], { shell: true });
                                                                                                                                                                                                                                                                      -// or:
                                                                                                                                                                                                                                                                      -exec('"my script.cmd" a b', (err, stdout, stderr) => {
                                                                                                                                                                                                                                                                      -  // ...
                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +// Script with spaces in the filename: +const bat = spawn('"my script.cmd"', ['a', 'b'], { shell: true }); +// or: +exec('"my script.cmd" a b', (err, stdout, stderr) => { + // ... +});

                                                                                                                                                                                                                                                                      child_process.exec(command[, options][, callback])#

                                                                                                                                                                                                                                                                      • command <string> The command to run, with space-separated arguments.
                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                        options <Object>

                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                      • options <Object>
                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                        callback <Function> called with the output when process terminates.

                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                      • callback <Function> called with the output when process terminates.
                                                                                                                                                                                                                                                                        • error <Error>
                                                                                                                                                                                                                                                                        • stdout <string> | <Buffer>
                                                                                                                                                                                                                                                                        • @@ -361,37 +358,35 @@ directly by the shell and special characters (vary based on shell) need to be dealt with accordingly:

                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          exec('"/path/to/test file/test.sh" arg1 arg2');
                                                                                                                                                                                                                                                                          -// Double quotes are used so that the space in the path is not interpreted as
                                                                                                                                                                                                                                                                          -// a delimiter of multiple arguments.
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          -exec('echo "The \\$HOME variable is $HOME"');
                                                                                                                                                                                                                                                                          -// The $HOME variable is escaped in the first instance, but not in the second.
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          exec('"/path/to/test file/test.sh" arg1 arg2');
                                                                                                                                                                                                                                                                          +// Double quotes are used so that the space in the path is not interpreted as
                                                                                                                                                                                                                                                                          +// a delimiter of multiple arguments.
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          +exec('echo "The \\$HOME variable is $HOME"');
                                                                                                                                                                                                                                                                          +// The $HOME variable is escaped in the first instance, but not in the second.

                                                                                                                                                                                                                                                                          Never pass unsanitized user input to this function. Any input containing shell metacharacters may be used to trigger arbitrary command execution.

                                                                                                                                                                                                                                                                          If a callback function is provided, it is called with the arguments (error, stdout, stderr). On success, error will be null. On error, error will be an instance of Error. The error.code property will be -the exit code of the child process while error.signal will be set to the -signal that terminated the process. Any exit code other than 0 is considered -to be an error.

                                                                                                                                                                                                                                                                          +the exit code of the process. By convention, any exit code other than 0 +indicates an error. error.signal will be the signal that terminated the +process.

                                                                                                                                                                                                                                                                          The stdout and stderr arguments passed to the callback will contain the stdout and stderr output of the child process. By default, Node.js will decode the output as UTF-8 and pass strings to the callback. The encoding option can be used to specify the character encoding used to decode the stdout and stderr output. If encoding is 'buffer', or an unrecognized character encoding, Buffer objects will be passed to the callback instead.

                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          const { exec } = require('child_process');
                                                                                                                                                                                                                                                                          -exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {
                                                                                                                                                                                                                                                                          -  if (error) {
                                                                                                                                                                                                                                                                          -    console.error(`exec error: ${error}`);
                                                                                                                                                                                                                                                                          -    return;
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          const { exec } = require('child_process');
                                                                                                                                                                                                                                                                          +exec('cat *.js missing_file | wc -l', (error, stdout, stderr) => {
                                                                                                                                                                                                                                                                          +  if (error) {
                                                                                                                                                                                                                                                                          +    console.error(`exec error: ${error}`);
                                                                                                                                                                                                                                                                          +    return;
                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                          -  console.log(`stdout: ${stdout}`);
                                                                                                                                                                                                                                                                          -  console.error(`stderr: ${stderr}`);
                                                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          + console.log(`stdout: ${stdout}`); + console.error(`stderr: ${stderr}`); +});

                                                                                                                                                                                                                                                                          If timeout is greater than 0, the parent will send the signal identified by the killSignal property (the default is 'SIGTERM') if the child runs longer than timeout milliseconds.

                                                                                                                                                                                                                                                                          @@ -403,16 +398,15 @@ case of an error (including any error resulting in an exit code other than 0), a rejected promise is returned, with the same error object given in the callback, but with two additional properties stdout and stderr.

                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                          -const exec = util.promisify(require('child_process').exec);
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                          +const exec = util.promisify(require('child_process').exec);
                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                          -async function lsExample() {
                                                                                                                                                                                                                                                                          -  const { stdout, stderr } = await exec('ls');
                                                                                                                                                                                                                                                                          -  console.log('stdout:', stdout);
                                                                                                                                                                                                                                                                          -  console.error('stderr:', stderr);
                                                                                                                                                                                                                                                                          +async function lsExample() {
                                                                                                                                                                                                                                                                          +  const { stdout, stderr } = await exec('ls');
                                                                                                                                                                                                                                                                          +  console.log('stdout:', stdout);
                                                                                                                                                                                                                                                                          +  console.error('stderr:', stderr);
                                                                                                                                                                                                                                                                           }
                                                                                                                                                                                                                                                                          -lsExample();
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          +lsExample();

                                                                                                                                                                                                                                                                          child_process.execFile(file[, args][, options][, callback])#

                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                    const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                    -// Child will use parent's stdios.
                                                                                                                                                                                                                                                                    -spawn('prg', [], { stdio: 'inherit' });
                                                                                                                                                                                                                                                                    +// Child will use parent's stdios.
                                                                                                                                                                                                                                                                    +spawn('prg', [], { stdio: 'inherit' });
                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                    -// Spawn child sharing only stderr.
                                                                                                                                                                                                                                                                    -spawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });
                                                                                                                                                                                                                                                                    +// Spawn child sharing only stderr.
                                                                                                                                                                                                                                                                    +spawn('prg', [], { stdio: ['pipe', 'pipe', process.stderr] });
                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                    -// Open an extra fd=4, to interact with programs presenting a
                                                                                                                                                                                                                                                                    -// startd-style interface.
                                                                                                                                                                                                                                                                    -spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });
                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    +// Open an extra fd=4, to interact with programs presenting a +// startd-style interface. +spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });

                                                                                                                                                                                                                                                                    It is worth noting that when an IPC channel is established between the parent and child processes, and the child is a Node.js process, the child is launched with the IPC channel unreferenced (using unref()) until the @@ -855,7 +836,7 @@ child_process.spawn() calls to be a bottleneck. For more information, see V8 issue 7381.

                                                                                                                                                                                                                                                                    See also: child_process.exec() and child_process.fork().

                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                    Synchronous Process Creation#

                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                    Synchronous process creation#

                                                                                                                                                                                                                                                                    The child_process.spawnSync(), child_process.execSync(), and child_process.execFileSync() methods are synchronous and will block the Node.js event loop, pausing execution of any additional code until the spawned @@ -884,8 +865,7 @@

                                                                                                                                                                                                                                                                    • file <string> The name or path of the executable file to run.
                                                                                                                                                                                                                                                                    • args <string[]> List of string arguments.
                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                      options <Object>

                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                    • options <Object>
                                                                                                                                                                                                                                                                      • cwd <string> Current working directory of the child process.
                                                                                                                                                                                                                                                                      • input <string> | <Buffer> | <TypedArray> | <DataView> The value which will be passed @@ -894,7 +874,7 @@
                                                                                                                                                                                                                                                                      • stdio <string> | <Array> Child's stdio configuration. stderr by default will be output to the parent process' stderr unless stdio is specified. Default: 'pipe'.
                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                      • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                      • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                                                                                                      • uid <number> Sets the user identity of the process (see setuid(2)).
                                                                                                                                                                                                                                                                      • gid <number> Sets the group identity of the process (see setgid(2)).
                                                                                                                                                                                                                                                                      • timeout <number> In milliseconds the maximum amount of time the process @@ -910,8 +890,8 @@ normally be created on Windows systems. Default: false.
                                                                                                                                                                                                                                                                      • shell <boolean> | <string> If true, runs command inside of a shell. Uses '/bin/sh' on Unix, and process.env.ComSpec on Windows. A different -shell can be specified as a string. See Shell Requirements and -Default Windows Shell. Default: false (no shell).
                                                                                                                                                                                                                                                                      • +shell can be specified as a string. See Shell requirements and +Default Windows shell. Default: false (no shell).
                                                                                                                                                                                                                                                                    • Returns: <Buffer> | <string> The stdout from the command.
                                                                                                                                                                                                                                                                    • @@ -948,8 +928,7 @@
                                                                                                                                                                                                                                                                • command <string> The command to run.
                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                  options <Object>

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                • options <Object>
                                                                                                                                                                                                                                                                  • cwd <string> Current working directory of the child process.
                                                                                                                                                                                                                                                                  • input <string> | <Buffer> | <TypedArray> | <DataView> The value which will be passed @@ -960,7 +939,7 @@ Default: 'pipe'.
                                                                                                                                                                                                                                                                  • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                                                                                                  • shell <string> Shell to execute the command with. See -Shell Requirements and Default Windows Shell. Default: +Shell requirements and Default Windows shell. Default: '/bin/sh' on Unix, process.env.ComSpec on Windows.
                                                                                                                                                                                                                                                                  • uid <number> Sets the user identity of the process. (See setuid(2)).
                                                                                                                                                                                                                                                                  • gid <number> Sets the group identity of the process. (See setgid(2)).
                                                                                                                                                                                                                                                                  • @@ -1015,8 +994,7 @@
                                                                                                                                                                                                                                                                    • command <string> The command to run.
                                                                                                                                                                                                                                                                    • args <string[]> List of string arguments.
                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                      options <Object>

                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                    • options <Object>
                                                                                                                                                                                                                                                                      • cwd <string> Current working directory of the child process.
                                                                                                                                                                                                                                                                      • input <string> | <Buffer> | <TypedArray> | <DataView> The value which will be passed @@ -1025,7 +1003,7 @@
                                                                                                                                                                                                                                                                      • argv0 <string> Explicitly set the value of argv[0] sent to the child process. This will be set to command if not specified.
                                                                                                                                                                                                                                                                      • stdio <string> | <Array> Child's stdio configuration.
                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                      • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                      • env <Object> Environment key-value pairs. Default: process.env.
                                                                                                                                                                                                                                                                      • uid <number> Sets the user identity of the process (see setuid(2)).
                                                                                                                                                                                                                                                                      • gid <number> Sets the group identity of the process (see setgid(2)).
                                                                                                                                                                                                                                                                      • timeout <number> In milliseconds the maximum amount of time the process @@ -1040,8 +1018,8 @@ Default: 'buffer'.
                                                                                                                                                                                                                                                                      • shell <boolean> | <string> If true, runs command inside of a shell. Uses '/bin/sh' on Unix, and process.env.ComSpec on Windows. A different -shell can be specified as a string. See Shell Requirements and -Default Windows Shell. Default: false (no shell).
                                                                                                                                                                                                                                                                      • +shell can be specified as a string. See Shell requirements and +Default Windows shell. Default: false (no shell).
                                                                                                                                                                                                                                                                      • windowsVerbatimArguments <boolean> No quoting or escaping of arguments is done on Windows. Ignored on Unix. This is set to true automatically when shell is specified and is CMD. Default: false.
                                                                                                                                                                                                                                                                      • @@ -1049,8 +1027,7 @@ normally be created on Windows systems. Default: false.
                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                      Returns: <Object>

                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                    • Returns: <Object>
                                                                                                                                                                                                                                                                      • pid <number> Pid of the child process.
                                                                                                                                                                                                                                                                      • output <Array> Array of results from stdio output.
                                                                                                                                                                                                                                                                      • @@ -1097,21 +1074,20 @@

                                                                                                                                                                                                                                                                        The 'close' event is emitted when the stdio streams of a child process have been closed. This is distinct from the 'exit' event, since multiple processes might share the same stdio streams.

                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                        const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                        -const ls = spawn('ls', ['-lh', '/usr']);
                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                        const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                        +const ls = spawn('ls', ['-lh', '/usr']);
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                        -ls.stdout.on('data', (data) => {
                                                                                                                                                                                                                                                                        -  console.log(`stdout: ${data}`);
                                                                                                                                                                                                                                                                        +ls.stdout.on('data', (data) => {
                                                                                                                                                                                                                                                                        +  console.log(`stdout: ${data}`);
                                                                                                                                                                                                                                                                         });
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                        -ls.on('close', (code) => {
                                                                                                                                                                                                                                                                        -  console.log(`child process close all stdio with code ${code}`);
                                                                                                                                                                                                                                                                        +ls.on('close', (code) => {
                                                                                                                                                                                                                                                                        +  console.log(`child process close all stdio with code ${code}`);
                                                                                                                                                                                                                                                                         });
                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                        -ls.on('exit', (code) => {
                                                                                                                                                                                                                                                                        -  console.log(`child process exited with code ${code}`);
                                                                                                                                                                                                                                                                        -});
                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                        +ls.on('exit', (code) => { + console.log(`child process exited with code ${code}`); +});

                                                                                                                                                                                                                                                                        Event: 'disconnect'#

                                                                                                                                                                                                                                                                      Returns the process identifier (PID) of the child process.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                      -const grep = spawn('grep', ['ssh']);
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      const { spawn } = require('child_process');
                                                                                                                                                                                                                                                                      +const grep = spawn('grep', ['ssh']);
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -console.log(`Spawned child pid: ${grep.pid}`);
                                                                                                                                                                                                                                                                      -grep.stdin.end();
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +console.log(`Spawned child pid: ${grep.pid}`); +grep.stdin.end();

                                                                                                                                                                                                                                                                      subprocess.ref()#

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                @@ -1310,61 +1344,59 @@ easier to instrument applications that call the child_process.spawn() family of functions. NODE_V8_COVERAGE can be set to an empty string, to prevent propagation.

                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                Coverage Output#

                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                Coverage output#

                                                                                                                                                                                                                                                                Coverage is output as an array of ScriptCoverage objects on the top-level key result:

                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                -  "result": [
                                                                                                                                                                                                                                                                +  "result": [
                                                                                                                                                                                                                                                                     {
                                                                                                                                                                                                                                                                -      "scriptId": "67",
                                                                                                                                                                                                                                                                -      "url": "internal/tty.js",
                                                                                                                                                                                                                                                                -      "functions": []
                                                                                                                                                                                                                                                                +      "scriptId": "67",
                                                                                                                                                                                                                                                                +      "url": "internal/tty.js",
                                                                                                                                                                                                                                                                +      "functions": []
                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                   ]
                                                                                                                                                                                                                                                                -}
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                Source Map Cache#

                                                                                                                                                                                                                                                                +} +

                                                                                                                                                                                                                                                                Source map cache#

                                                                                                                                                                                                                                                                Stability: 1 - Experimental

                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                If found, Source Map data is appended to the top-level key source-map-cache +

                                                                                                                                                                                                                                                                If found, source map data is appended to the top-level key source-map-cache on the JSON coverage object.

                                                                                                                                                                                                                                                                source-map-cache is an object with keys representing the files source maps were extracted from, and values which include the raw source-map URL -(in the key url), the parsed Source Map V3 information (in the key data), +(in the key url), the parsed Source Map v3 information (in the key data), and the line lengths of the source file (in the key lineLengths).

                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                -  "result": [
                                                                                                                                                                                                                                                                +  "result": [
                                                                                                                                                                                                                                                                     {
                                                                                                                                                                                                                                                                -      "scriptId": "68",
                                                                                                                                                                                                                                                                -      "url": "file:///absolute/path/to/source.js",
                                                                                                                                                                                                                                                                -      "functions": []
                                                                                                                                                                                                                                                                +      "scriptId": "68",
                                                                                                                                                                                                                                                                +      "url": "file:///absolute/path/to/source.js",
                                                                                                                                                                                                                                                                +      "functions": []
                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                   ],
                                                                                                                                                                                                                                                                -  "source-map-cache": {
                                                                                                                                                                                                                                                                -    "file:///absolute/path/to/source.js": {
                                                                                                                                                                                                                                                                -      "url": "./path-to-map.json",
                                                                                                                                                                                                                                                                -      "data": {
                                                                                                                                                                                                                                                                -        "version": 3,
                                                                                                                                                                                                                                                                -        "sources": [
                                                                                                                                                                                                                                                                -          "file:///absolute/path/to/original.js"
                                                                                                                                                                                                                                                                +  "source-map-cache": {
                                                                                                                                                                                                                                                                +    "file:///absolute/path/to/source.js": {
                                                                                                                                                                                                                                                                +      "url": "./path-to-map.json",
                                                                                                                                                                                                                                                                +      "data": {
                                                                                                                                                                                                                                                                +        "version": 3,
                                                                                                                                                                                                                                                                +        "sources": [
                                                                                                                                                                                                                                                                +          "file:///absolute/path/to/original.js"
                                                                                                                                                                                                                                                                         ],
                                                                                                                                                                                                                                                                -        "names": [
                                                                                                                                                                                                                                                                -          "Foo",
                                                                                                                                                                                                                                                                -          "console",
                                                                                                                                                                                                                                                                -          "info"
                                                                                                                                                                                                                                                                +        "names": [
                                                                                                                                                                                                                                                                +          "Foo",
                                                                                                                                                                                                                                                                +          "console",
                                                                                                                                                                                                                                                                +          "info"
                                                                                                                                                                                                                                                                         ],
                                                                                                                                                                                                                                                                -        "mappings": "MAAMA,IACJC,YAAaC",
                                                                                                                                                                                                                                                                -        "sourceRoot": "./"
                                                                                                                                                                                                                                                                +        "mappings": "MAAMA,IACJC,YAAaC",
                                                                                                                                                                                                                                                                +        "sourceRoot": "./"
                                                                                                                                                                                                                                                                       },
                                                                                                                                                                                                                                                                -      "lineLengths": [
                                                                                                                                                                                                                                                                -        13,
                                                                                                                                                                                                                                                                -        62,
                                                                                                                                                                                                                                                                -        38,
                                                                                                                                                                                                                                                                -        27
                                                                                                                                                                                                                                                                +      "lineLengths": [
                                                                                                                                                                                                                                                                +        13,
                                                                                                                                                                                                                                                                +        62,
                                                                                                                                                                                                                                                                +        38,
                                                                                                                                                                                                                                                                +        27
                                                                                                                                                                                                                                                                       ]
                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                                -}
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +}

                                                                                                                                                                                                                                                                OPENSSL_CONF=file#

                                                                                                                                                                                                                                                                - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/cli.json nodejs-mozilla-12.22.12/doc/api/cli.json --- nodejs-mozilla-12.18.1/doc/api/cli.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/cli.json 2022-04-05 07:17:04.000000000 +0000 @@ -4,8 +4,8 @@ "introduced_in": "v5.9.1", "miscs": [ { - "textRaw": "Command Line Options", - "name": "Command Line Options", + "textRaw": "Command line options", + "name": "Command line options", "introduced_in": "v5.9.1", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                Node.js comes with a variety of CLI options. These options expose built-in\ndebugging, multiple ways to execute scripts, and other helpful runtime options.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                To view this documentation as a manual page in a terminal, run man node.

                                                                                                                                                                                                                                                                ", @@ -29,7 +29,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                                All options, including V8 options, allow words to be separated by both\ndashes (-) or underscores (_).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                For example, --pending-deprecation is equivalent to --pending_deprecation.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                All options, including V8 options, allow words to be separated by both\ndashes (-) or underscores (_).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                For example, --pending-deprecation is equivalent to --pending_deprecation.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If an option that takes a single value, for example --max-http-header-size,\nis passed more than once, then the last passed value will be used. Options\nfrom the command line take precedence over options passed through the\nNODE_OPTIONS environment variable.

                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "`-`", @@ -84,6 +84,21 @@ "displayName": "`--completion-bash`" }, { + "textRaw": "`--conditions=condition`", + "name": "`--conditions=condition`", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                                Enable experimental support for custom conditional exports resolution\nconditions.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Any number of custom string condition names are permitted.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The default Node.js conditions of \"node\", \"default\", \"import\", and\n\"require\" will always apply as defined.

                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`--conditions=condition`" + }, + { "textRaw": "`--cpu-prof`", "name": "`--cpu-prof`", "meta": { @@ -109,7 +124,7 @@ }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                Specify the directory where the CPU profiles generated by --cpu-prof will\nbe placed.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Specify the directory where the CPU profiles generated by --cpu-prof will\nbe placed.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The default value is controlled by the\n--diagnostic-dir command line option.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`--cpu-prof-dir`" }, @@ -144,6 +159,13 @@ "displayName": "`--cpu-prof-name`" }, { + "textRaw": "`--diagnostic-dir=directory`", + "name": "`--diagnostic-dir=directory`", + "desc": "

                                                                                                                                                                                                                                                                Set the directory to which all diagnostic output files will be written to.\nDefaults to current working directory.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Affects the default output directory of:

                                                                                                                                                                                                                                                                \n", + "type": "module", + "displayName": "`--diagnostic-dir=directory`" + }, + { "textRaw": "`--disable-proto=mode`", "name": "`--disable-proto=mode`", "desc": "\n

                                                                                                                                                                                                                                                                Disable the Object.prototype.__proto__ property. If mode is delete, the\nproperty will be removed entirely. If mode is throw, accesses to the\nproperty will throw an exception with the code ERR_PROTO_ACCESS.

                                                                                                                                                                                                                                                                ", @@ -187,7 +209,7 @@ }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                Enable experimental Source Map V3 support for stack traces.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Currently, overriding Error.prepareStackTrace is ignored when the\n--enable-source-maps flag is set.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Enable experimental Source Map v3 support for stack traces.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Currently, overriding Error.prepareStackTrace is ignored when the\n--enable-source-maps flag is set.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`--enable-source-maps`" }, @@ -317,11 +339,23 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                Enable experimental WebAssembly module support.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`--experimental-wasm-modules`" }, { + "textRaw": "`--force-context-aware`", + "name": "`--force-context-aware`", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                Disable loading native addons that are not context-aware.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Enable experimental WebAssembly module support.

                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`--force-context-aware`" + }, + { "textRaw": "`--force-fips`", "name": "`--force-fips`", "meta": { @@ -388,7 +422,7 @@ }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                Specify the directory where the heap profiles generated by --heap-prof will\nbe placed.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Specify the directory where the heap profiles generated by --heap-prof will\nbe placed.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The default value is controlled by the\n--diagnostic-dir command line option.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`--heap-prof-dir`" }, @@ -429,9 +463,15 @@ "added": [ "v11.4.0" ], - "changes": [] + "changes": [ + { + "version": "v12.22.0", + "pr-url": "https://github.com/nodejs/node/pull/37603", + "description": "The legacy HTTP parser will emit a deprecation warning." + } + ] }, - "desc": "

                                                                                                                                                                                                                                                                Chooses an HTTP parser library. Available values are:

                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                The default is llhttp, unless otherwise specified when building Node.js.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This flag exists to aid in experimentation with the internal implementation of\nthe Node.js http parser.\nThis flag is likely to become a no-op and removed at some point in the future.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Chooses an HTTP parser library. Available values are:

                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                The default is llhttp, unless otherwise specified when building Node.js.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The legacy HTTP parser is deprecated and will emit a deprecation warning.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This flag exists to aid in experimentation with the internal implementation of\nthe Node.js http parser.\nThis flag is likely to become a no-op and removed at some point in the future.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`--http-parser=library`" }, @@ -621,19 +661,6 @@ "displayName": "`--no-warnings`" }, { - "textRaw": "`--force-context-aware`", - "name": "`--force-context-aware`", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                                Disable loading native addons that are not context-aware.

                                                                                                                                                                                                                                                                ", - "type": "module", - "displayName": "`--force-context-aware`" - }, - { "textRaw": "`--openssl-config=file`", "name": "`--openssl-config=file`", "meta": { @@ -735,7 +762,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                Write process warnings to the given file instead of printing to stderr. The\nfile will be created if it does not exist, and will be appended to if it does.\nIf an error occurs while attempting to write the warning to the file, the\nwarning will be written to stderr instead.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Write process warnings to the given file instead of printing to stderr. The\nfile will be created if it does not exist, and will be appended to if it does.\nIf an error occurs while attempting to write the warning to the file, the\nwarning will be written to stderr instead.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The file name may be an absolute path. If it is not, the default directory it\nwill be written to is controlled by the\n--diagnostic-dir command line option.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`--redirect-warnings=file`" }, @@ -753,8 +780,8 @@ "displayName": "`--report-compact`" }, { - "textRaw": "`--report-directory=directory`", - "name": "`--report-directory=directory`", + "textRaw": "`--report-dir=directory`, `report-directory=directory`", + "name": "`--report-dir=directory`,_`report-directory=directory`", "meta": { "added": [ "v11.8.0" @@ -763,7 +790,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -774,7 +801,7 @@ }, "desc": "

                                                                                                                                                                                                                                                                Location at which the report will be generated.

                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "`--report-directory=directory`" + "displayName": "`--report-dir=directory`, `report-directory=directory`" }, { "textRaw": "`--report-filename=filename`", @@ -787,7 +814,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -811,7 +838,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32496", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -835,7 +862,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -859,7 +886,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -883,7 +910,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This option is no longer considered experimental." + "description": "This option is no longer experimental." }, { "version": "v12.0.0", @@ -1362,7 +1389,7 @@ "displayName": "Options" }, { - "textRaw": "Environment Variables", + "textRaw": "Environment variables", "name": "environment_variables", "modules": [ { @@ -1446,7 +1473,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                A space-separated list of command line options. options... are interpreted\nbefore command line options, so command line options will override or\ncompound after anything in options.... Node.js will exit with an error if\nan option that is not allowed in the environment is used, such as -p or a\nscript file.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In case an option value happens to contain a space (for example a path listed\nin --require), it must be escaped using double quotes. For example:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                NODE_OPTIONS='--require \"./my path/file.js\"'\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A singleton flag passed as a command line option will override the same flag\npassed into NODE_OPTIONS:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                # The inspector will be available on port 5555\nNODE_OPTIONS='--inspect=localhost:4444' node --inspect=localhost:5555\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A flag that can be passed multiple times will be treated as if its\nNODE_OPTIONS instances were passed first, and then its command line\ninstances afterwards:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                NODE_OPTIONS='--require \"./a.js\"' node --require \"./b.js\"\n# is equivalent to:\nnode --require \"./a.js\" --require \"./b.js\"\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Node.js options that are allowed are:

                                                                                                                                                                                                                                                                \n\n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • --disable-proto
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --enable-fips
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --enable-source-maps
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-import-meta-resolve
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-json-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-loader
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-policy
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-repl-await
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-specifier-resolution
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-vm-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-wasi-unstable-preview1
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-wasm-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --force-context-aware
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --force-fips
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --frozen-intrinsics
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --heapsnapshot-signal
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --http-parser
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --http-server-default-timeout
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --icu-data-dir
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --input-type
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --insecure-http-parser
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --inspect-brk
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --inspect-port, --debug-port
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --inspect-publish-uid
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --inspect
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --max-http-header-size
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --napi-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --no-deprecation
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --no-force-async-hooks-checks
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --no-warnings
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --openssl-config
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --pending-deprecation
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --policy-integrity
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --preserve-symlinks-main
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --preserve-symlinks
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --prof-process
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --redirect-warnings
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-compact
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-directory
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-filename
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-on-fatalerror
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-on-signal
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-signal
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-uncaught-exception
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --require, -r
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --throw-deprecation
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --title
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-cipher-list
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-keylog
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-max-v1.2
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-max-v1.3
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-min-v1.0
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-min-v1.1
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-min-v1.2
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-min-v1.3
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-deprecation
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-event-categories
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-event-file-pattern
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-events-enabled
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-exit
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-sigint
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-sync-io
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-tls
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-uncaught
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-warnings
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --track-heap-objects
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --unhandled-rejections
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --use-bundled-ca
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --use-largepages
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --use-openssl-ca
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --v8-pool-size
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  --zero-fill-buffers

                                                                                                                                                                                                                                                                  \n\n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                V8 options that are allowed are:

                                                                                                                                                                                                                                                                \n\n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • --abort-on-uncaught-exception
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --disallow-code-generation-from-strings
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --huge-max-old-generation-size
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --interpreted-frames-native-stack
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --jitless
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --max-old-space-size
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --perf-basic-prof-only-functions
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --perf-basic-prof
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --perf-prof-unwinding-info
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --perf-prof
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                  --stack-trace-limit

                                                                                                                                                                                                                                                                  \n\n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                --perf-basic-prof-only-functions, --perf-basic-prof,\n--perf-prof-unwinding-info, and --perf-prof are only available on Linux.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                A space-separated list of command line options. options... are interpreted\nbefore command line options, so command line options will override or\ncompound after anything in options.... Node.js will exit with an error if\nan option that is not allowed in the environment is used, such as -p or a\nscript file.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In case an option value happens to contain a space (for example a path listed\nin --require), it must be escaped using double quotes. For example:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                NODE_OPTIONS='--require \"./my path/file.js\"'\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A singleton flag passed as a command line option will override the same flag\npassed into NODE_OPTIONS:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                # The inspector will be available on port 5555\nNODE_OPTIONS='--inspect=localhost:4444' node --inspect=localhost:5555\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                A flag that can be passed multiple times will be treated as if its\nNODE_OPTIONS instances were passed first, and then its command line\ninstances afterwards:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                NODE_OPTIONS='--require \"./a.js\"' node --require \"./b.js\"\n# is equivalent to:\nnode --require \"./a.js\" --require \"./b.js\"\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Node.js options that are allowed are:

                                                                                                                                                                                                                                                                \n\n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • --conditions
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --diagnostic-dir
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --disable-proto
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --enable-fips
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --enable-source-maps
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-import-meta-resolve
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-json-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-loader
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-policy
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-repl-await
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-specifier-resolution
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-vm-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-wasi-unstable-preview1
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --experimental-wasm-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --force-context-aware
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --force-fips
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --frozen-intrinsics
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --heapsnapshot-signal
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --http-parser
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --http-server-default-timeout
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --icu-data-dir
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --input-type
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --insecure-http-parser
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --inspect-brk
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --inspect-port, --debug-port
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --inspect-publish-uid
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --inspect
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --max-http-header-size
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --napi-modules
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --no-deprecation
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --no-force-async-hooks-checks
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --no-warnings
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --openssl-config
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --pending-deprecation
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --policy-integrity
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --preserve-symlinks-main
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --preserve-symlinks
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --prof-process
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --redirect-warnings
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-compact
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-dir, --report-directory
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-filename
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-on-fatalerror
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-on-signal
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-signal
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --report-uncaught-exception
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --require, -r
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --throw-deprecation
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --title
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-cipher-list
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-keylog
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-max-v1.2
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-max-v1.3
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-min-v1.0
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-min-v1.1
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-min-v1.2
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --tls-min-v1.3
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-deprecation
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-event-categories
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-event-file-pattern
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-events-enabled
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-exit
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-sigint
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-sync-io
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-tls
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-uncaught
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --trace-warnings
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --track-heap-objects
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --unhandled-rejections
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --use-bundled-ca
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --use-largepages
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --use-openssl-ca
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --v8-pool-size
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --zero-fill-buffers\n\n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                V8 options that are allowed are:

                                                                                                                                                                                                                                                                \n\n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • --abort-on-uncaught-exception
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --disallow-code-generation-from-strings
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --huge-max-old-generation-size
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --interpreted-frames-native-stack
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --jitless
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --max-old-space-size
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --perf-basic-prof-only-functions
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --perf-basic-prof
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --perf-prof-unwinding-info
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --perf-prof
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • --stack-trace-limit\n\n
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                --perf-basic-prof-only-functions, --perf-basic-prof,\n--perf-prof-unwinding-info, and --perf-prof are only available on Linux.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`NODE_OPTIONS=options...`" }, @@ -1548,20 +1575,20 @@ "desc": "

                                                                                                                                                                                                                                                                When set, Node.js will begin outputting V8 JavaScript code coverage and\nSource Map data to the directory provided as an argument (coverage\ninformation is written as JSON to files with a coverage prefix).

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                NODE_V8_COVERAGE will automatically propagate to subprocesses, making it\neasier to instrument applications that call the child_process.spawn() family\nof functions. NODE_V8_COVERAGE can be set to an empty string, to prevent\npropagation.

                                                                                                                                                                                                                                                                ", "modules": [ { - "textRaw": "Coverage Output", + "textRaw": "Coverage output", "name": "coverage_output", "desc": "

                                                                                                                                                                                                                                                                Coverage is output as an array of ScriptCoverage objects on the top-level\nkey result:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                {\n  \"result\": [\n    {\n      \"scriptId\": \"67\",\n      \"url\": \"internal/tty.js\",\n      \"functions\": []\n    }\n  ]\n}\n
                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Coverage Output" + "displayName": "Coverage output" }, { - "textRaw": "Source Map Cache", + "textRaw": "Source map cache", "name": "source_map_cache", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                If found, Source Map data is appended to the top-level key source-map-cache\non the JSON coverage object.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                source-map-cache is an object with keys representing the files source maps\nwere extracted from, and values which include the raw source-map URL\n(in the key url), the parsed Source Map V3 information (in the key data),\nand the line lengths of the source file (in the key lineLengths).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                {\n  \"result\": [\n    {\n      \"scriptId\": \"68\",\n      \"url\": \"file:///absolute/path/to/source.js\",\n      \"functions\": []\n    }\n  ],\n  \"source-map-cache\": {\n    \"file:///absolute/path/to/source.js\": {\n      \"url\": \"./path-to-map.json\",\n      \"data\": {\n        \"version\": 3,\n        \"sources\": [\n          \"file:///absolute/path/to/original.js\"\n        ],\n        \"names\": [\n          \"Foo\",\n          \"console\",\n          \"info\"\n        ],\n        \"mappings\": \"MAAMA,IACJC,YAAaC\",\n        \"sourceRoot\": \"./\"\n      },\n      \"lineLengths\": [\n        13,\n        62,\n        38,\n        27\n      ]\n    }\n  }\n}\n
                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                If found, source map data is appended to the top-level key source-map-cache\non the JSON coverage object.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                source-map-cache is an object with keys representing the files source maps\nwere extracted from, and values which include the raw source-map URL\n(in the key url), the parsed Source Map v3 information (in the key data),\nand the line lengths of the source file (in the key lineLengths).

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                {\n  \"result\": [\n    {\n      \"scriptId\": \"68\",\n      \"url\": \"file:///absolute/path/to/source.js\",\n      \"functions\": []\n    }\n  ],\n  \"source-map-cache\": {\n    \"file:///absolute/path/to/source.js\": {\n      \"url\": \"./path-to-map.json\",\n      \"data\": {\n        \"version\": 3,\n        \"sources\": [\n          \"file:///absolute/path/to/original.js\"\n        ],\n        \"names\": [\n          \"Foo\",\n          \"console\",\n          \"info\"\n        ],\n        \"mappings\": \"MAAMA,IACJC,YAAaC\",\n        \"sourceRoot\": \"./\"\n      },\n      \"lineLengths\": [\n        13,\n        62,\n        38,\n        27\n      ]\n    }\n  }\n}\n
                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Source Map Cache" + "displayName": "Source map cache" } ], "type": "module", @@ -1609,13 +1636,13 @@ { "textRaw": "`UV_THREADPOOL_SIZE=size`", "name": "`uv_threadpool_size=size`", - "desc": "

                                                                                                                                                                                                                                                                Set the number of threads used in libuv's threadpool to size threads.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Asynchronous system APIs are used by Node.js whenever possible, but where they\ndo not exist, libuv's threadpool is used to create asynchronous node APIs based\non synchronous system APIs. Node.js APIs that use the threadpool are:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • all fs APIs, other than the file watcher APIs and those that are explicitly\nsynchronous
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • asynchronous crypto APIs such as crypto.pbkdf2(), crypto.scrypt(),\ncrypto.randomBytes(), crypto.randomFill(), crypto.generateKeyPair()
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • dns.lookup()
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • all zlib APIs, other than those that are explicitly synchronous
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Because libuv's threadpool has a fixed size, it means that if for whatever\nreason any of these APIs takes a long time, other (seemingly unrelated) APIs\nthat run in libuv's threadpool will experience degraded performance. In order to\nmitigate this issue, one potential solution is to increase the size of libuv's\nthreadpool by setting the 'UV_THREADPOOL_SIZE' environment variable to a value\ngreater than 4 (its current default value). For more information, see the\nlibuv threadpool documentation.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Set the number of threads used in libuv's threadpool to size threads.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Asynchronous system APIs are used by Node.js whenever possible, but where they\ndo not exist, libuv's threadpool is used to create asynchronous node APIs based\non synchronous system APIs. Node.js APIs that use the threadpool are:

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                • all fs APIs, other than the file watcher APIs and those that are explicitly\nsynchronous
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • asynchronous crypto APIs such as crypto.pbkdf2(), crypto.scrypt(),\ncrypto.randomBytes(), crypto.randomFill(), crypto.generateKeyPair()
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • dns.lookup()
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                • all zlib APIs, other than those that are explicitly synchronous
                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Because libuv's threadpool has a fixed size, it means that if for whatever\nreason any of these APIs takes a long time, other (seemingly unrelated) APIs\nthat run in libuv's threadpool will experience degraded performance. In order to\nmitigate this issue, one potential solution is to increase the size of libuv's\nthreadpool by setting the 'UV_THREADPOOL_SIZE' environment variable to a value\ngreater than 4 (its current default value). For more information, see the\nlibuv threadpool documentation.

                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "`UV_THREADPOOL_SIZE=size`" } ], "type": "misc", - "displayName": "Environment Variables" + "displayName": "Environment variables" }, { "textRaw": "Useful V8 options", @@ -1623,11 +1650,11 @@ "desc": "

                                                                                                                                                                                                                                                                V8 has its own set of CLI options. Any V8 CLI option that is provided to node\nwill be passed on to V8 to handle. V8's options have no stability guarantee.\nThe V8 team themselves don't consider them to be part of their formal API,\nand reserve the right to change them at any time. Likewise, they are not\ncovered by the Node.js stability guarantees. Many of the V8\noptions are of interest only to V8 developers. Despite this, there is a small\nset of V8 options that are widely applicable to Node.js, and they are\ndocumented here:

                                                                                                                                                                                                                                                                ", "modules": [ { - "textRaw": "`--max-old-space-size=SIZE` (in Mbytes)", - "name": "`--max-old-space-size=size`_(in_mbytes)", + "textRaw": "`--max-old-space-size=SIZE` (in megabytes)", + "name": "`--max-old-space-size=size`_(in_megabytes)", "desc": "

                                                                                                                                                                                                                                                                Sets the max memory size of V8's old memory section. As memory\nconsumption approaches the limit, V8 will spend more time on\ngarbage collection in an effort to free unused memory.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                On a machine with 2GB of memory, consider setting this to\n1536 (1.5GB) to leave some memory for other uses and avoid swapping.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                $ node --max-old-space-size=1536 index.js\n
                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "`--max-old-space-size=SIZE` (in Mbytes)" + "displayName": "`--max-old-space-size=SIZE` (in megabytes)" } ], "type": "misc", diff -Nru nodejs-mozilla-12.18.1/doc/api/cli.md nodejs-mozilla-12.22.12/doc/api/cli.md --- nodejs-mozilla-12.18.1/doc/api/cli.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/cli.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# Command Line Options +# Command line options @@ -34,6 +34,11 @@ For example, `--pending-deprecation` is equivalent to `--pending_deprecation`. +If an option that takes a single value, for example `--max-http-header-size`, +is passed more than once, then the last passed value will be used. Options +from the command line take precedence over options passed through the +[`NODE_OPTIONS`][] environment variable. + ### `-` + +> Stability: 1 - Experimental + +Enable experimental support for custom conditional exports resolution +conditions. + +Any number of custom string condition names are permitted. + +The default Node.js conditions of `"node"`, `"default"`, `"import"`, and +`"require"` will always apply as defined. + ### `--cpu-prof` +### `--force-context-aware` + + +Disable loading native addons that are not [context-aware][]. + Enable experimental WebAssembly module support. ### `--force-fips` @@ -318,6 +358,9 @@ Specify the directory where the heap profiles generated by `--heap-prof` will be placed. +The default value is controlled by the +[--diagnostic-dir](#cli_diagnostic_dir_directory) command line option. + ### `--heap-prof-interval` Chooses an HTTP parser library. Available values are: @@ -349,6 +396,8 @@ The default is `llhttp`, unless otherwise specified when building Node.js. +The `legacy` HTTP parser is deprecated and will emit a deprecation warning. + This flag exists to aid in experimentation with the internal implementation of the Node.js http parser. This flag is likely to become a no-op and removed at some point in the future. @@ -495,13 +544,6 @@ Silence all process warnings (including deprecations). -### `--force-context-aware` - - -Disable loading native addons that are not [context-aware][]. - ### `--openssl-config=file` +* `--conditions` +* `--diagnostic-dir` * `--disable-proto` * `--enable-fips` * `--enable-source-maps` @@ -1180,7 +1228,7 @@ * `--prof-process` * `--redirect-warnings` * `--report-compact` -* `--report-directory` +* `--report-dir`, `--report-directory` * `--report-filename` * `--report-on-fatalerror` * `--report-on-signal` @@ -1315,7 +1363,7 @@ of functions. `NODE_V8_COVERAGE` can be set to an empty string, to prevent propagation. -#### Coverage Output +#### Coverage output Coverage is output as an array of [ScriptCoverage][] objects on the top-level key `result`: @@ -1332,16 +1380,16 @@ } ``` -#### Source Map Cache +#### Source map cache > Stability: 1 - Experimental -If found, Source Map data is appended to the top-level key `source-map-cache` +If found, source map data is appended to the top-level key `source-map-cache` on the JSON coverage object. `source-map-cache` is an object with keys representing the files source maps were extracted from, and values which include the raw source-map URL -(in the key `url`), the parsed Source Map V3 information (in the key `data`), +(in the key `url`), the parsed Source Map v3 information (in the key `data`), and the line lengths of the source file (in the key `lineLengths`). ```json @@ -1450,7 +1498,7 @@ set of V8 options that are widely applicable to Node.js, and they are documented here: -### `--max-old-space-size=SIZE` (in Mbytes) +### `--max-old-space-size=SIZE` (in megabytes) Sets the max memory size of V8's old memory section. As memory consumption approaches the limit, V8 will spend more time on @@ -1466,6 +1514,7 @@ [`--openssl-config`]: #cli_openssl_config_file [`Buffer`]: buffer.html#buffer_class_buffer [`SlowBuffer`]: buffer.html#buffer_class_slowbuffer +[`NODE_OPTIONS`]: #cli_node_options_options [`process.setUncaughtExceptionCaptureCallback()`]: process.html#process_process_setuncaughtexceptioncapturecallback_fn [`tls.DEFAULT_MAX_VERSION`]: tls.html#tls_tls_default_max_version [`tls.DEFAULT_MIN_VERSION`]: tls.html#tls_tls_default_min_version @@ -1483,5 +1532,5 @@ [emit_warning]: process.html#process_process_emitwarning_warning_type_code_ctor [experimental ECMAScript Module loader]: esm.html#esm_experimental_loaders [jitless]: https://v8.dev/blog/jitless -[libuv threadpool documentation]: http://docs.libuv.org/en/latest/threadpool.html +[libuv threadpool documentation]: https://docs.libuv.org/en/latest/threadpool.html [remote code execution]: https://www.owasp.org/index.php/Code_Injection diff -Nru nodejs-mozilla-12.18.1/doc/api/cluster.html nodejs-mozilla-12.22.12/doc/api/cluster.html --- nodejs-mozilla-12.18.1/doc/api/cluster.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/cluster.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Cluster | Node.js v12.18.1 Documentation + + Cluster | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                • - Index + Index
                                                                                                                                                                                                                                                                • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                • View another version -
                                                                                                                                                                                                                                                                  1. 14.x
                                                                                                                                                                                                                                                                  2. +
                                                                                                                                                                                                                                                                    1. 17.x
                                                                                                                                                                                                                                                                    2. +
                                                                                                                                                                                                                                                                    3. 16.x LTS
                                                                                                                                                                                                                                                                    4. +
                                                                                                                                                                                                                                                                    5. 15.x
                                                                                                                                                                                                                                                                    6. +
                                                                                                                                                                                                                                                                    7. 14.x LTS
                                                                                                                                                                                                                                                                    8. 13.x
                                                                                                                                                                                                                                                                    9. 12.x LTS
                                                                                                                                                                                                                                                                    10. 11.x
                                                                                                                                                                                                                                                                    11. -
                                                                                                                                                                                                                                                                    12. 10.x LTS
                                                                                                                                                                                                                                                                    13. +
                                                                                                                                                                                                                                                                    14. 10.x
                                                                                                                                                                                                                                                                    15. 9.x
                                                                                                                                                                                                                                                                    16. 8.x
                                                                                                                                                                                                                                                                    17. 7.x
                                                                                                                                                                                                                                                                    18. @@ -121,12 +128,10 @@

                                                                                                                                                                                                                                                                      Table of Contents

                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                        Cluster

                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                      • Cluster
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                        • How It Works
                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                          Class: Worker

                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                        • How it works
                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                        • Class: Worker @@ -169,47 +174,46 @@

                                                                                                                                                                                                                                                                          Cluster#

                                                                                                                                                                                                                                                                          Stability: 2 - Stable

                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                          Source Code: lib/cluster.js

                                                                                                                                                                                                                                                                          A single instance of Node.js runs in a single thread. To take advantage of multi-core systems, the user will sometimes want to launch a cluster of Node.js processes to handle the load.

                                                                                                                                                                                                                                                                          The cluster module allows easy creation of child processes that all share server ports.

                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          const cluster = require('cluster');
                                                                                                                                                                                                                                                                          -const http = require('http');
                                                                                                                                                                                                                                                                          -const numCPUs = require('os').cpus().length;
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          const cluster = require('cluster');
                                                                                                                                                                                                                                                                          +const http = require('http');
                                                                                                                                                                                                                                                                          +const numCPUs = require('os').cpus().length;
                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                          -if (cluster.isMaster) {
                                                                                                                                                                                                                                                                          -  console.log(`Master ${process.pid} is running`);
                                                                                                                                                                                                                                                                          +if (cluster.isMaster) {
                                                                                                                                                                                                                                                                          +  console.log(`Master ${process.pid} is running`);
                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                          -  // Fork workers.
                                                                                                                                                                                                                                                                          -  for (let i = 0; i < numCPUs; i++) {
                                                                                                                                                                                                                                                                          +  // Fork workers.
                                                                                                                                                                                                                                                                          +  for (let i = 0; i < numCPUs; i++) {
                                                                                                                                                                                                                                                                               cluster.fork();
                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                          -  cluster.on('exit', (worker, code, signal) => {
                                                                                                                                                                                                                                                                          -    console.log(`worker ${worker.process.pid} died`);
                                                                                                                                                                                                                                                                          +  cluster.on('exit', (worker, code, signal) => {
                                                                                                                                                                                                                                                                          +    console.log(`worker ${worker.process.pid} died`);
                                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                                          -} else {
                                                                                                                                                                                                                                                                          -  // Workers can share any TCP connection
                                                                                                                                                                                                                                                                          -  // In this case it is an HTTP server
                                                                                                                                                                                                                                                                          -  http.createServer((req, res) => {
                                                                                                                                                                                                                                                                          -    res.writeHead(200);
                                                                                                                                                                                                                                                                          -    res.end('hello world\n');
                                                                                                                                                                                                                                                                          -  }).listen(8000);
                                                                                                                                                                                                                                                                          +} else {
                                                                                                                                                                                                                                                                          +  // Workers can share any TCP connection
                                                                                                                                                                                                                                                                          +  // In this case it is an HTTP server
                                                                                                                                                                                                                                                                          +  http.createServer((req, res) => {
                                                                                                                                                                                                                                                                          +    res.writeHead(200);
                                                                                                                                                                                                                                                                          +    res.end('hello world\n');
                                                                                                                                                                                                                                                                          +  }).listen(8000);
                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                          -  console.log(`Worker ${process.pid} started`);
                                                                                                                                                                                                                                                                          -}
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          + console.log(`Worker ${process.pid} started`); +}

                                                                                                                                                                                                                                                                          Running Node.js will now share port 8000 between the workers:

                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          $ node server.js
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          $ node server.js
                                                                                                                                                                                                                                                                           Master 3596 is running
                                                                                                                                                                                                                                                                           Worker 4324 started
                                                                                                                                                                                                                                                                           Worker 4520 started
                                                                                                                                                                                                                                                                           Worker 6056 started
                                                                                                                                                                                                                                                                          -Worker 5644 started
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          +Worker 5644 started

                                                                                                                                                                                                                                                                          On Windows, it is not yet possible to set up a named pipe server in a worker.

                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                          How It Works#

                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                          How it works#

                                                                                                                                                                                                                                                                          The worker processes are spawned using the child_process.fork() method, so that they can communicate with the parent via IPC and pass server @@ -273,10 +277,9 @@ Added in: v0.7.7

                                                                                                                                                                                                                                                                      Similar to the cluster.on('disconnect') event, but specific to this worker.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      cluster.fork().on('disconnect', () => {
                                                                                                                                                                                                                                                                      -  // Worker has disconnected
                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      cluster.fork().on('disconnect', () => {
                                                                                                                                                                                                                                                                      +  // Worker has disconnected
                                                                                                                                                                                                                                                                      +});

                                                                                                                                                                                                                                                                      Event: 'error'#

                                                                                                                                                                                                                                                                Similar to the cluster.on('exit') event, but specific to this worker.

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                const worker = cluster.fork();
                                                                                                                                                                                                                                                                -worker.on('exit', (code, signal) => {
                                                                                                                                                                                                                                                                -  if (signal) {
                                                                                                                                                                                                                                                                -    console.log(`worker was killed by signal: ${signal}`);
                                                                                                                                                                                                                                                                -  } else if (code !== 0) {
                                                                                                                                                                                                                                                                -    console.log(`worker exited with error code: ${code}`);
                                                                                                                                                                                                                                                                -  } else {
                                                                                                                                                                                                                                                                -    console.log('worker success!');
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                const worker = cluster.fork();
                                                                                                                                                                                                                                                                +worker.on('exit', (code, signal) => {
                                                                                                                                                                                                                                                                +  if (signal) {
                                                                                                                                                                                                                                                                +    console.log(`worker was killed by signal: ${signal}`);
                                                                                                                                                                                                                                                                +  } else if (code !== 0) {
                                                                                                                                                                                                                                                                +    console.log(`worker exited with error code: ${code}`);
                                                                                                                                                                                                                                                                +  } else {
                                                                                                                                                                                                                                                                +    console.log('worker success!');
                                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +});

                                                                                                                                                                                                                                                                Event: 'listening'#

                                                                                                                                                                                                                                                                - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/crypto.json nodejs-mozilla-12.22.12/doc/api/crypto.json --- nodejs-mozilla-12.18.1/doc/api/crypto.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/crypto.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v0.3.6", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                The crypto module provides cryptographic functionality that includes a set of\nwrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Use require('crypto') to access this module.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const crypto = require('crypto');\n\nconst secret = 'abcdefg';\nconst hash = crypto.createHmac('sha256', secret)\n                   .update('I love cupcakes')\n                   .digest('hex');\nconsole.log(hash);\n// Prints:\n//   c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e\n
                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Source Code: lib/crypto.js

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The crypto module provides cryptographic functionality that includes a set of\nwrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Use require('crypto') to access this module.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const crypto = require('crypto');\n\nconst secret = 'abcdefg';\nconst hash = crypto.createHmac('sha256', secret)\n                   .update('I love cupcakes')\n                   .digest('hex');\nconsole.log(hash);\n// Prints:\n//   c0fa1bc00531bd78ef38c628449c5102aeabd49b5dc3a2a516ea6ea959d6658e\n
                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "Determining if crypto support is unavailable", @@ -22,7 +22,7 @@ "name": "`crypto`_module_methods_and_properties", "properties": [ { - "textRaw": "`constants` Returns: {Object} An object containing commonly used constants for crypto and security related operations. The specific constants currently defined are described in [Crypto Constants][].", + "textRaw": "`constants` Returns: {Object} An object containing commonly used constants for crypto and security related operations. The specific constants currently defined are described in [Crypto constants][].", "type": "Object", "name": "return", "meta": { @@ -31,7 +31,7 @@ ], "changes": [] }, - "desc": "An object containing commonly used constants for crypto and security related operations. The specific constants currently defined are described in [Crypto Constants][]." + "desc": "An object containing commonly used constants for crypto and security related operations. The specific constants currently defined are described in [Crypto constants][]." }, { "textRaw": "`crypto.DEFAULT_ENCODING`", @@ -47,7 +47,7 @@ }, "stability": 0, "stabilityText": "Deprecated", - "desc": "

                                                                                                                                                                                                                                                                The default encoding to use for functions that can take either strings\nor buffers. The default value is 'buffer', which makes methods\ndefault to Buffer objects.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The crypto.DEFAULT_ENCODING mechanism is provided for backwards compatibility\nwith legacy programs that expect 'latin1' to be the default encoding.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                New applications should expect the default to be 'buffer'.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This property is deprecated.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                The default encoding to use for functions that can take either strings\nor buffers. The default value is 'buffer', which makes methods\ndefault to Buffer objects.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The crypto.DEFAULT_ENCODING mechanism is provided for backward compatibility\nwith legacy programs that expect 'latin1' to be the default encoding.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                New applications should expect the default to be 'buffer'.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This property is deprecated.

                                                                                                                                                                                                                                                                " }, { "textRaw": "`crypto.fips`", @@ -723,7 +723,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Creates and returns a Sign object that uses the given algorithm. Use\ncrypto.getHashes() to obtain the names of the available digest algorithms.\nOptional options argument controls the stream.Writable behavior.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In some cases, a Sign instance can be created using the name of a signature\nalgorithm, such as 'RSA-SHA256', instead of a digest algorithm. This will use\nthe corresponding digest algorithm. This does not work for all signature\nalgorithms, such as 'ecdsa-with-SHA256', so it is best to always use digest\nalgorithm names.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Creates and returns a Sign object that uses the given algorithm. Use\ncrypto.getHashes() to obtain the names of the available digest algorithms.\nOptional options argument controls the stream.Writable behavior.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                In some cases, a Sign instance can be created using the name of a signature\nalgorithm, such as 'RSA-SHA256', instead of a digest algorithm. This will use\nthe corresponding digest algorithm. This does not work for all signature\nalgorithms, such as 'ecdsa-with-SHA256', so it is best to always use digest\nalgorithm names.

                                                                                                                                                                                                                                                                " }, { "textRaw": "`crypto.createVerify(algorithm[, options])`", @@ -1734,6 +1734,42 @@ "desc": "

                                                                                                                                                                                                                                                                This function is similar to crypto.randomBytes() but requires the first\nargument to be a Buffer that will be filled. It also\nrequires that a callback is passed in.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If the callback function is not provided, an error will be thrown.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const buf = Buffer.alloc(10);\ncrypto.randomFill(buf, (err, buf) => {\n  if (err) throw err;\n  console.log(buf.toString('hex'));\n});\n\ncrypto.randomFill(buf, 5, (err, buf) => {\n  if (err) throw err;\n  console.log(buf.toString('hex'));\n});\n\n// The above is equivalent to the following:\ncrypto.randomFill(buf, 5, 5, (err, buf) => {\n  if (err) throw err;\n  console.log(buf.toString('hex'));\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Any TypedArray or DataView instance may be passed as buffer.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const a = new Uint32Array(10);\ncrypto.randomFill(a, (err, buf) => {\n  if (err) throw err;\n  console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)\n    .toString('hex'));\n});\n\nconst b = new Float64Array(10);\ncrypto.randomFill(b, (err, buf) => {\n  if (err) throw err;\n  console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)\n    .toString('hex'));\n});\n\nconst c = new DataView(new ArrayBuffer(10));\ncrypto.randomFill(c, (err, buf) => {\n  if (err) throw err;\n  console.log(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)\n    .toString('hex'));\n});\n
                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                This API uses libuv's threadpool, which can have surprising and\nnegative performance implications for some applications; see the\nUV_THREADPOOL_SIZE documentation for more information.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The asynchronous version of crypto.randomFill() is carried out in a single\nthreadpool request. To minimize threadpool task length variation, partition\nlarge randomFill requests when doing so as part of fulfilling a client\nrequest.

                                                                                                                                                                                                                                                                " }, { + "textRaw": "`crypto.randomInt([min, ]max[, callback])`", + "type": "method", + "name": "randomInt", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`min` {integer} Start of random range (inclusive). **Default**: `0`.", + "name": "min", + "type": "integer", + "desc": "Start of random range (inclusive). **Default**: `0`." + }, + { + "textRaw": "`max` {integer} End of random range (exclusive).", + "name": "max", + "type": "integer", + "desc": "End of random range (exclusive)." + }, + { + "textRaw": "`callback` {Function} `function(err, n) {}`.", + "name": "callback", + "type": "Function", + "desc": "`function(err, n) {}`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                Return a random integer n such that min <= n < max. This\nimplementation avoids modulo bias.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The range (max - min) must be less than 248. min and max must\nbe safe integers.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If the callback function is not provided, the random integer is\ngenerated synchronously.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Asynchronous\ncrypto.randomInt(3, (err, n) => {\n  if (err) throw err;\n  console.log(`Random number chosen from (0, 1, 2): ${n}`);\n});\n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // Synchronous\nconst n = crypto.randomInt(3);\nconsole.log(`Random number chosen from (0, 1, 2): ${n}`);\n
                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                // With `min` argument\nconst n = crypto.randomInt(1, 7);\nconsole.log(`The dice rolled: ${n}`);\n
                                                                                                                                                                                                                                                                " + }, + { "textRaw": "`crypto.scrypt(password, salt, keylen[, options], callback)`", "type": "method", "name": "scrypt", @@ -2125,18 +2161,18 @@ "name": "notes", "modules": [ { - "textRaw": "Legacy Streams API (pre Node.js v0.10)", - "name": "legacy_streams_api_(pre_node.js_v0.10)", + "textRaw": "Legacy Streams API (prior to Node.js 0.10)", + "name": "legacy_streams_api_(prior_to_node.js_0.10)", "desc": "

                                                                                                                                                                                                                                                                The Crypto module was added to Node.js before there was the concept of a\nunified Stream API, and before there were Buffer objects for handling\nbinary data. As such, the many of the crypto defined classes have methods not\ntypically found on other Node.js classes that implement the streams\nAPI (e.g. update(), final(), or digest()). Also, many methods accepted\nand returned 'latin1' encoded strings by default rather than Buffers. This\ndefault was changed after Node.js v0.8 to use Buffer objects by default\ninstead.

                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Legacy Streams API (pre Node.js v0.10)" + "displayName": "Legacy Streams API (prior to Node.js 0.10)" }, { - "textRaw": "Recent ECDH Changes", + "textRaw": "Recent ECDH changes", "name": "recent_ecdh_changes", "desc": "

                                                                                                                                                                                                                                                                Usage of ECDH with non-dynamically generated key pairs has been simplified.\nNow, ecdh.setPrivateKey() can be called with a preselected private key\nand the associated public point (key) will be computed and stored in the object.\nThis allows code to only store and provide the private part of the EC key pair.\necdh.setPrivateKey() now also validates that the private key is valid for\nthe selected curve.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                The ecdh.setPublicKey() method is now deprecated as its inclusion in the\nAPI is not useful. Either a previously stored private key should be set, which\nautomatically generates the associated public key, or ecdh.generateKeys()\nshould be called. The main drawback of using ecdh.setPublicKey() is that\nit can be used to put the ECDH key pair into an inconsistent state.

                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Recent ECDH Changes" + "displayName": "Recent ECDH changes" }, { "textRaw": "Support for weak or compromised algorithms", @@ -2157,41 +2193,41 @@ "displayName": "Notes" }, { - "textRaw": "Crypto Constants", + "textRaw": "Crypto constants", "name": "crypto_constants", "desc": "

                                                                                                                                                                                                                                                                The following constants exported by crypto.constants apply to various uses of\nthe crypto, tls, and https modules and are generally specific to OpenSSL.

                                                                                                                                                                                                                                                                ", "modules": [ { - "textRaw": "OpenSSL Options", + "textRaw": "OpenSSL options", "name": "openssl_options", - "desc": "
                                                                                                                                                                                                                                                                VersionChanges
                                                                                                                                                                                                                                                                v12.16.2

                                                                                                                                                                                                                                                                Changed "strict mode" to "strict assertion mode" and "legacy mode" to "legacy assertion mode" to avoid confusion with the more usual meaining of "strict mode".

                                                                                                                                                                                                                                                                Changed "strict mode" to "strict assertion mode" and "legacy mode" to "legacy assertion mode" to avoid confusion with the more usual meaning of "strict mode".

                                                                                                                                                                                                                                                                v9.9.0

                                                                                                                                                                                                                                                                Added error diffs to the strict assertion mode.

                                                                                                                                                                                                                                                                v9.9.0
                                                                                                                                                                                                                                                                \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                ConstantDescription
                                                                                                                                                                                                                                                                SSL_OP_ALLApplies multiple bug workarounds within OpenSSL. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html\n for detail.
                                                                                                                                                                                                                                                                SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATIONAllows legacy insecure renegotiation between OpenSSL and unpatched\n clients or servers. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html.
                                                                                                                                                                                                                                                                SSL_OP_CIPHER_SERVER_PREFERENCEAttempts to use the server's preferences instead of the client's when\n selecting a cipher. Behavior depends on protocol version. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html.
                                                                                                                                                                                                                                                                SSL_OP_CISCO_ANYCONNECTInstructs OpenSSL to use Cisco's \"speshul\" version of DTLS_BAD_VER.
                                                                                                                                                                                                                                                                SSL_OP_COOKIE_EXCHANGEInstructs OpenSSL to turn on cookie exchange.
                                                                                                                                                                                                                                                                SSL_OP_CRYPTOPRO_TLSEXT_BUGInstructs OpenSSL to add server-hello extension from an early version\n of the cryptopro draft.
                                                                                                                                                                                                                                                                SSL_OP_DONT_INSERT_EMPTY_FRAGMENTSInstructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability\n workaround added in OpenSSL 0.9.6d.
                                                                                                                                                                                                                                                                SSL_OP_EPHEMERAL_RSAInstructs OpenSSL to always use the tmp_rsa key when performing RSA\n operations.
                                                                                                                                                                                                                                                                SSL_OP_LEGACY_SERVER_CONNECTAllows initial connection to servers that do not support RI.
                                                                                                                                                                                                                                                                SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
                                                                                                                                                                                                                                                                SSL_OP_MICROSOFT_SESS_ID_BUG
                                                                                                                                                                                                                                                                SSL_OP_MSIE_SSLV2_RSA_PADDINGInstructs OpenSSL to disable the workaround for a man-in-the-middle\n protocol-version vulnerability in the SSL 2.0 server implementation.
                                                                                                                                                                                                                                                                SSL_OP_NETSCAPE_CA_DN_BUG
                                                                                                                                                                                                                                                                SSL_OP_NETSCAPE_CHALLENGE_BUG
                                                                                                                                                                                                                                                                SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
                                                                                                                                                                                                                                                                SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
                                                                                                                                                                                                                                                                SSL_OP_NO_COMPRESSIONInstructs OpenSSL to disable support for SSL/TLS compression.
                                                                                                                                                                                                                                                                SSL_OP_NO_QUERY_MTU
                                                                                                                                                                                                                                                                SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATIONInstructs OpenSSL to always start a new session when performing\n renegotiation.
                                                                                                                                                                                                                                                                SSL_OP_NO_SSLv2Instructs OpenSSL to turn off SSL v2
                                                                                                                                                                                                                                                                SSL_OP_NO_SSLv3Instructs OpenSSL to turn off SSL v3
                                                                                                                                                                                                                                                                SSL_OP_NO_TICKETInstructs OpenSSL to disable use of RFC4507bis tickets.
                                                                                                                                                                                                                                                                SSL_OP_NO_TLSv1Instructs OpenSSL to turn off TLS v1
                                                                                                                                                                                                                                                                SSL_OP_NO_TLSv1_1Instructs OpenSSL to turn off TLS v1.1
                                                                                                                                                                                                                                                                SSL_OP_NO_TLSv1_2Instructs OpenSSL to turn off TLS v1.2
                                                                                                                                                                                                                                                                SSL_OP_PKCS1_CHECK_1
                                                                                                                                                                                                                                                                SSL_OP_PKCS1_CHECK_2
                                                                                                                                                                                                                                                                SSL_OP_SINGLE_DH_USEInstructs OpenSSL to always create a new key when using\n temporary/ephemeral DH parameters.
                                                                                                                                                                                                                                                                SSL_OP_SINGLE_ECDH_USEInstructs OpenSSL to always create a new key when using\n temporary/ephemeral ECDH parameters.
                                                                                                                                                                                                                                                                SSL_OP_SSLEAY_080_CLIENT_DH_BUG
                                                                                                                                                                                                                                                                SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
                                                                                                                                                                                                                                                                SSL_OP_TLS_BLOCK_PADDING_BUG
                                                                                                                                                                                                                                                                SSL_OP_TLS_D5_BUG
                                                                                                                                                                                                                                                                SSL_OP_TLS_ROLLBACK_BUGInstructs OpenSSL to disable version rollback attack detection.
                                                                                                                                                                                                                                                                ", + "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                ConstantDescription
                                                                                                                                                                                                                                                                SSL_OP_ALLApplies multiple bug workarounds within OpenSSL. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html\n for detail.
                                                                                                                                                                                                                                                                SSL_OP_ALLOW_NO_DHE_KEXInstructs OpenSSL to allow a non-[EC]DHE-based key exchange mode\n for TLS v1.3
                                                                                                                                                                                                                                                                SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATIONAllows legacy insecure renegotiation between OpenSSL and unpatched\n clients or servers. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html.
                                                                                                                                                                                                                                                                SSL_OP_CIPHER_SERVER_PREFERENCEAttempts to use the server's preferences instead of the client's when\n selecting a cipher. Behavior depends on protocol version. See\n https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html.
                                                                                                                                                                                                                                                                SSL_OP_CISCO_ANYCONNECTInstructs OpenSSL to use Cisco's \"speshul\" version of DTLS_BAD_VER.
                                                                                                                                                                                                                                                                SSL_OP_COOKIE_EXCHANGEInstructs OpenSSL to turn on cookie exchange.
                                                                                                                                                                                                                                                                SSL_OP_CRYPTOPRO_TLSEXT_BUGInstructs OpenSSL to add server-hello extension from an early version\n of the cryptopro draft.
                                                                                                                                                                                                                                                                SSL_OP_DONT_INSERT_EMPTY_FRAGMENTSInstructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability\n workaround added in OpenSSL 0.9.6d.
                                                                                                                                                                                                                                                                SSL_OP_EPHEMERAL_RSAInstructs OpenSSL to always use the tmp_rsa key when performing RSA\n operations.
                                                                                                                                                                                                                                                                SSL_OP_LEGACY_SERVER_CONNECTAllows initial connection to servers that do not support RI.
                                                                                                                                                                                                                                                                SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER
                                                                                                                                                                                                                                                                SSL_OP_MICROSOFT_SESS_ID_BUG
                                                                                                                                                                                                                                                                SSL_OP_MSIE_SSLV2_RSA_PADDINGInstructs OpenSSL to disable the workaround for a man-in-the-middle\n protocol-version vulnerability in the SSL 2.0 server implementation.
                                                                                                                                                                                                                                                                SSL_OP_NETSCAPE_CA_DN_BUG
                                                                                                                                                                                                                                                                SSL_OP_NETSCAPE_CHALLENGE_BUG
                                                                                                                                                                                                                                                                SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
                                                                                                                                                                                                                                                                SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
                                                                                                                                                                                                                                                                SSL_OP_NO_COMPRESSIONInstructs OpenSSL to disable support for SSL/TLS compression.
                                                                                                                                                                                                                                                                SSL_OP_NO_ENCRYPT_THEN_MACInstructs OpenSSL to disable encrypt-then-MAC.
                                                                                                                                                                                                                                                                SSL_OP_NO_QUERY_MTU
                                                                                                                                                                                                                                                                SSL_OP_NO_RENEGOTIATIONInstructs OpenSSL to disable renegotiation.
                                                                                                                                                                                                                                                                SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATIONInstructs OpenSSL to always start a new session when performing\n renegotiation.
                                                                                                                                                                                                                                                                SSL_OP_NO_SSLv2Instructs OpenSSL to turn off SSL v2
                                                                                                                                                                                                                                                                SSL_OP_NO_SSLv3Instructs OpenSSL to turn off SSL v3
                                                                                                                                                                                                                                                                SSL_OP_NO_TICKETInstructs OpenSSL to disable use of RFC4507bis tickets.
                                                                                                                                                                                                                                                                SSL_OP_NO_TLSv1Instructs OpenSSL to turn off TLS v1
                                                                                                                                                                                                                                                                SSL_OP_NO_TLSv1_1Instructs OpenSSL to turn off TLS v1.1
                                                                                                                                                                                                                                                                SSL_OP_NO_TLSv1_2Instructs OpenSSL to turn off TLS v1.2
                                                                                                                                                                                                                                                                SSL_OP_NO_TLSv1_3Instructs OpenSSL to turn off TLS v1.3
                                                                                                                                                                                                                                                                SSL_OP_PKCS1_CHECK_1
                                                                                                                                                                                                                                                                SSL_OP_PKCS1_CHECK_2
                                                                                                                                                                                                                                                                SSL_OP_PRIORITIZE_CHACHAInstructs OpenSSL server to prioritize ChaCha20Poly1305\n when client does.\n This option has no effect if\n SSL_OP_CIPHER_SERVER_PREFERENCE\n is not enabled.
                                                                                                                                                                                                                                                                SSL_OP_SINGLE_DH_USEInstructs OpenSSL to always create a new key when using\n temporary/ephemeral DH parameters.
                                                                                                                                                                                                                                                                SSL_OP_SINGLE_ECDH_USEInstructs OpenSSL to always create a new key when using\n temporary/ephemeral ECDH parameters.
                                                                                                                                                                                                                                                                SSL_OP_SSLEAY_080_CLIENT_DH_BUG
                                                                                                                                                                                                                                                                SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG
                                                                                                                                                                                                                                                                SSL_OP_TLS_BLOCK_PADDING_BUG
                                                                                                                                                                                                                                                                SSL_OP_TLS_D5_BUG
                                                                                                                                                                                                                                                                SSL_OP_TLS_ROLLBACK_BUGInstructs OpenSSL to disable version rollback attack detection.
                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "OpenSSL Options" + "displayName": "OpenSSL options" }, { - "textRaw": "OpenSSL Engine Constants", + "textRaw": "OpenSSL engine constants", "name": "openssl_engine_constants", "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                ConstantDescription
                                                                                                                                                                                                                                                                ENGINE_METHOD_RSALimit engine usage to RSA
                                                                                                                                                                                                                                                                ENGINE_METHOD_DSALimit engine usage to DSA
                                                                                                                                                                                                                                                                ENGINE_METHOD_DHLimit engine usage to DH
                                                                                                                                                                                                                                                                ENGINE_METHOD_RANDLimit engine usage to RAND
                                                                                                                                                                                                                                                                ENGINE_METHOD_ECLimit engine usage to EC
                                                                                                                                                                                                                                                                ENGINE_METHOD_CIPHERSLimit engine usage to CIPHERS
                                                                                                                                                                                                                                                                ENGINE_METHOD_DIGESTSLimit engine usage to DIGESTS
                                                                                                                                                                                                                                                                ENGINE_METHOD_PKEY_METHSLimit engine usage to PKEY_METHDS
                                                                                                                                                                                                                                                                ENGINE_METHOD_PKEY_ASN1_METHSLimit engine usage to PKEY_ASN1_METHS
                                                                                                                                                                                                                                                                ENGINE_METHOD_ALL
                                                                                                                                                                                                                                                                ENGINE_METHOD_NONE
                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "OpenSSL Engine Constants" + "displayName": "OpenSSL engine constants" }, { - "textRaw": "Other OpenSSL Constants", + "textRaw": "Other OpenSSL constants", "name": "other_openssl_constants", - "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                ConstantDescription
                                                                                                                                                                                                                                                                DH_CHECK_P_NOT_SAFE_PRIME
                                                                                                                                                                                                                                                                DH_CHECK_P_NOT_PRIME
                                                                                                                                                                                                                                                                DH_UNABLE_TO_CHECK_GENERATOR
                                                                                                                                                                                                                                                                DH_NOT_SUITABLE_GENERATOR
                                                                                                                                                                                                                                                                ALPN_ENABLED
                                                                                                                                                                                                                                                                RSA_PKCS1_PADDING
                                                                                                                                                                                                                                                                RSA_SSLV23_PADDING
                                                                                                                                                                                                                                                                RSA_NO_PADDING
                                                                                                                                                                                                                                                                RSA_PKCS1_OAEP_PADDING
                                                                                                                                                                                                                                                                RSA_X931_PADDING
                                                                                                                                                                                                                                                                RSA_PKCS1_PSS_PADDING
                                                                                                                                                                                                                                                                RSA_PSS_SALTLEN_DIGESTSets the salt length for RSA_PKCS1_PSS_PADDING to the\n digest size when signing or verifying.
                                                                                                                                                                                                                                                                RSA_PSS_SALTLEN_MAX_SIGNSets the salt length for RSA_PKCS1_PSS_PADDING to the\n maximum permissible value when signing data.
                                                                                                                                                                                                                                                                RSA_PSS_SALTLEN_AUTOCauses the salt length for RSA_PKCS1_PSS_PADDING to be\n determined automatically when verifying a signature.
                                                                                                                                                                                                                                                                POINT_CONVERSION_COMPRESSED
                                                                                                                                                                                                                                                                POINT_CONVERSION_UNCOMPRESSED
                                                                                                                                                                                                                                                                POINT_CONVERSION_HYBRID
                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                See the list of SSL OP Flags for details.

                                                                                                                                                                                                                                                                \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                ConstantDescription
                                                                                                                                                                                                                                                                DH_CHECK_P_NOT_SAFE_PRIME
                                                                                                                                                                                                                                                                DH_CHECK_P_NOT_PRIME
                                                                                                                                                                                                                                                                DH_UNABLE_TO_CHECK_GENERATOR
                                                                                                                                                                                                                                                                DH_NOT_SUITABLE_GENERATOR
                                                                                                                                                                                                                                                                ALPN_ENABLED
                                                                                                                                                                                                                                                                RSA_PKCS1_PADDING
                                                                                                                                                                                                                                                                RSA_SSLV23_PADDING
                                                                                                                                                                                                                                                                RSA_NO_PADDING
                                                                                                                                                                                                                                                                RSA_PKCS1_OAEP_PADDING
                                                                                                                                                                                                                                                                RSA_X931_PADDING
                                                                                                                                                                                                                                                                RSA_PKCS1_PSS_PADDING
                                                                                                                                                                                                                                                                RSA_PSS_SALTLEN_DIGESTSets the salt length for RSA_PKCS1_PSS_PADDING to the\n digest size when signing or verifying.
                                                                                                                                                                                                                                                                RSA_PSS_SALTLEN_MAX_SIGNSets the salt length for RSA_PKCS1_PSS_PADDING to the\n maximum permissible value when signing data.
                                                                                                                                                                                                                                                                RSA_PSS_SALTLEN_AUTOCauses the salt length for RSA_PKCS1_PSS_PADDING to be\n determined automatically when verifying a signature.
                                                                                                                                                                                                                                                                POINT_CONVERSION_COMPRESSED
                                                                                                                                                                                                                                                                POINT_CONVERSION_UNCOMPRESSED
                                                                                                                                                                                                                                                                POINT_CONVERSION_HYBRID
                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Other OpenSSL Constants" + "displayName": "Other OpenSSL constants" }, { - "textRaw": "Node.js Crypto Constants", + "textRaw": "Node.js crypto constants", "name": "node.js_crypto_constants", "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                ConstantDescription
                                                                                                                                                                                                                                                                defaultCoreCipherListSpecifies the built-in default cipher list used by Node.js.
                                                                                                                                                                                                                                                                defaultCipherListSpecifies the active default cipher list used by the current Node.js\n process.
                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Node.js Crypto Constants" + "displayName": "Node.js crypto constants" } ], "type": "module", - "displayName": "Crypto Constants" + "displayName": "Crypto constants" } ], "classes": [ @@ -2305,7 +2341,7 @@ { "textRaw": "Legacy API", "name": "legacy_api", - "desc": "

                                                                                                                                                                                                                                                                As a still supported legacy interface, it is possible (but not recommended) to\ncreate new instances of the crypto.Certificate class as illustrated in the\nexamples below.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                As a still supported legacy interface, it is possible to create new instances of\nthe crypto.Certificate class as illustrated in the examples below.

                                                                                                                                                                                                                                                                ", "ctors": [ { "textRaw": "`new crypto.Certificate()`", @@ -3101,7 +3137,7 @@ "desc": "

                                                                                                                                                                                                                                                                The ECDH class is a utility for creating Elliptic Curve Diffie-Hellman (ECDH)\nkey exchanges.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Instances of the ECDH class can be created using the\ncrypto.createECDH() function.

                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                const crypto = require('crypto');\nconst assert = require('assert');\n\n// Generate Alice's keys...\nconst alice = crypto.createECDH('secp521r1');\nconst aliceKey = alice.generateKeys();\n\n// Generate Bob's keys...\nconst bob = crypto.createECDH('secp521r1');\nconst bobKey = bob.generateKeys();\n\n// Exchange and generate the secret...\nconst aliceSecret = alice.computeSecret(bobKey);\nconst bobSecret = bob.computeSecret(aliceKey);\n\nassert.strictEqual(aliceSecret.toString('hex'), bobSecret.toString('hex'));\n// OK\n
                                                                                                                                                                                                                                                                ", "classMethods": [ { - "textRaw": "Class Method: `ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])`", + "textRaw": "Static method: `ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])`", "type": "classMethod", "name": "convertKey", "meta": { @@ -3202,7 +3238,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                Computes the shared secret using otherPublicKey as the other\nparty's public key and returns the computed shared secret. The supplied\nkey is interpreted using specified inputEncoding, and the returned secret\nis encoded using the specified outputEncoding.\nIf the inputEncoding is not\nprovided, otherPublicKey is expected to be a Buffer, TypedArray, or\nDataView.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If outputEncoding is given a string will be returned; otherwise a\nBuffer is returned.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                ecdh.computeSecret will throw an\nERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY error when otherPublicKey\nlies outside of the elliptic curve. Since otherPublicKey is\nusually supplied from a remote user over an insecure network,\nits recommended for developers to handle this exception accordingly.

                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                Computes the shared secret using otherPublicKey as the other\nparty's public key and returns the computed shared secret. The supplied\nkey is interpreted using specified inputEncoding, and the returned secret\nis encoded using the specified outputEncoding.\nIf the inputEncoding is not\nprovided, otherPublicKey is expected to be a Buffer, TypedArray, or\nDataView.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                If outputEncoding is given a string will be returned; otherwise a\nBuffer is returned.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                ecdh.computeSecret will throw an\nERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY error when otherPublicKey\nlies outside of the elliptic curve. Since otherPublicKey is\nusually supplied from a remote user over an insecure network,\nbe sure to handle this exception accordingly.

                                                                                                                                                                                                                                                                " }, { "textRaw": "`ecdh.generateKeys([encoding[, format]])`", @@ -3565,13 +3601,18 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33360", + "description": "Instances of this class can now be passed to worker threads using `postMessage`." + }, + { "version": "v11.13.0", "pr-url": "https://github.com/nodejs/node/pull/26438", "description": "This class is now exported." } ] }, - "desc": "

                                                                                                                                                                                                                                                                Node.js uses a KeyObject class to represent a symmetric or asymmetric key,\nand each kind of key exposes different functions. The\ncrypto.createSecretKey(), crypto.createPublicKey() and\ncrypto.createPrivateKey() methods are used to create KeyObject\ninstances. KeyObject objects are not to be created directly using the new\nkeyword.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Most applications should consider using the new KeyObject API instead of\npassing keys as strings or Buffers due to improved security features.

                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                Node.js uses a KeyObject class to represent a symmetric or asymmetric key,\nand each kind of key exposes different functions. The\ncrypto.createSecretKey(), crypto.createPublicKey() and\ncrypto.createPrivateKey() methods are used to create KeyObject\ninstances. KeyObject objects are not to be created directly using the new\nkeyword.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                Most applications should consider using the new KeyObject API instead of\npassing keys as strings or Buffers due to improved security features.

                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                KeyObject instances can be passed to other threads via postMessage().\nThe receiver obtains a cloned KeyObject, and the KeyObject does not need to\nbe listed in the transferList argument.

                                                                                                                                                                                                                                                                ", "properties": [ { "textRaw": "`asymmetricKeyType` {string}", diff -Nru nodejs-mozilla-12.18.1/doc/api/crypto.md nodejs-mozilla-12.22.12/doc/api/crypto.md --- nodejs-mozilla-12.18.1/doc/api/crypto.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/crypto.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `crypto` module provides cryptographic functionality that includes a set of wrappers for OpenSSL's hash, HMAC, cipher, decipher, sign, and verify functions. @@ -104,9 +106,8 @@ ### Legacy API -As a still supported legacy interface, it is possible (but not recommended) to -create new instances of the `crypto.Certificate` class as illustrated in the -examples below. +As a still supported legacy interface, it is possible to create new instances of +the `crypto.Certificate` class as illustrated in the examples below. #### `new crypto.Certificate()` @@ -785,7 +786,7 @@ // OK ``` -### Class Method: `ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])` +### Static method: `ECDH.convertKey(key, curve[, inputEncoding[, outputEncoding[, format]]])` @@ -866,7 +867,7 @@ `ERR_CRYPTO_ECDH_INVALID_PUBLIC_KEY` error when `otherPublicKey` lies outside of the elliptic curve. Since `otherPublicKey` is usually supplied from a remote user over an insecure network, -its recommended for developers to handle this exception accordingly. +be sure to handle this exception accordingly. ### `ecdh.generateKeys([encoding[, format]])` + +* `min` {integer} Start of random range (inclusive). **Default**: `0`. +* `max` {integer} End of random range (exclusive). +* `callback` {Function} `function(err, n) {}`. + +Return a random integer `n` such that `min <= n < max`. This +implementation avoids [modulo bias][]. + +The range (`max - min`) must be less than 248. `min` and `max` must +be [safe integers][]. + +If the `callback` function is not provided, the random integer is +generated synchronously. + +```js +// Asynchronous +crypto.randomInt(3, (err, n) => { + if (err) throw err; + console.log(`Random number chosen from (0, 1, 2): ${n}`); +}); +``` + +```js +// Synchronous +const n = crypto.randomInt(3); +console.log(`Random number chosen from (0, 1, 2): ${n}`); +``` + +```js +// With `min` argument +const n = crypto.randomInt(1, 7); +console.log(`The dice rolled: ${n}`); +``` + ### `crypto.scrypt(password, salt, keylen[, options], callback)` -
                                                                                                                                                                                                                                                                // myscript.js
                                                                                                                                                                                                                                                                -global.x = 5;
                                                                                                                                                                                                                                                                -setTimeout(() => {
                                                                                                                                                                                                                                                                -  debugger;
                                                                                                                                                                                                                                                                -  console.log('world');
                                                                                                                                                                                                                                                                -}, 1000);
                                                                                                                                                                                                                                                                -console.log('hello');
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                // myscript.js
                                                                                                                                                                                                                                                                +global.x = 5;
                                                                                                                                                                                                                                                                +setTimeout(() => {
                                                                                                                                                                                                                                                                +  debugger;
                                                                                                                                                                                                                                                                +  console.log('world');
                                                                                                                                                                                                                                                                +}, 1000);
                                                                                                                                                                                                                                                                +console.log('hello');

                                                                                                                                                                                                                                                                Once the debugger is run, a breakpoint will occur at line 3:

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                $ node inspect myscript.js
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                $ node inspect myscript.js
                                                                                                                                                                                                                                                                 < Debugger listening on ws://127.0.0.1:9229/80e7a814-7cd3-49fb-921a-2e02228cd5ba
                                                                                                                                                                                                                                                                 < For help, see: https://nodejs.org/en/docs/inspector
                                                                                                                                                                                                                                                                 < Debugger attached.
                                                                                                                                                                                                                                                                 Break on start in myscript.js:1
                                                                                                                                                                                                                                                                -> 1 (function (exports, require, module, __filename, __dirname) { global.x = 5;
                                                                                                                                                                                                                                                                +> 1 (function (exports, require, module, __filename, __dirname) { global.x = 5;
                                                                                                                                                                                                                                                                   2 setTimeout(() => {
                                                                                                                                                                                                                                                                   3   debugger;
                                                                                                                                                                                                                                                                -debug> cont
                                                                                                                                                                                                                                                                +debug> cont
                                                                                                                                                                                                                                                                 < hello
                                                                                                                                                                                                                                                                 break in myscript.js:3
                                                                                                                                                                                                                                                                   1 (function (exports, require, module, __filename, __dirname) { global.x = 5;
                                                                                                                                                                                                                                                                   2 setTimeout(() => {
                                                                                                                                                                                                                                                                -> 3   debugger;
                                                                                                                                                                                                                                                                +> 3   debugger;
                                                                                                                                                                                                                                                                   4   console.log('world');
                                                                                                                                                                                                                                                                   5 }, 1000);
                                                                                                                                                                                                                                                                -debug> next
                                                                                                                                                                                                                                                                +debug> next
                                                                                                                                                                                                                                                                 break in myscript.js:4
                                                                                                                                                                                                                                                                   2 setTimeout(() => {
                                                                                                                                                                                                                                                                   3   debugger;
                                                                                                                                                                                                                                                                -> 4   console.log('world');
                                                                                                                                                                                                                                                                +> 4   console.log('world');
                                                                                                                                                                                                                                                                   5 }, 1000);
                                                                                                                                                                                                                                                                   6 console.log('hello');
                                                                                                                                                                                                                                                                -debug> repl
                                                                                                                                                                                                                                                                +debug> repl
                                                                                                                                                                                                                                                                 Press Ctrl + C to leave debug repl
                                                                                                                                                                                                                                                                -> x
                                                                                                                                                                                                                                                                +> x
                                                                                                                                                                                                                                                                 5
                                                                                                                                                                                                                                                                -> 2 + 2
                                                                                                                                                                                                                                                                +> 2 + 2
                                                                                                                                                                                                                                                                 4
                                                                                                                                                                                                                                                                -debug> next
                                                                                                                                                                                                                                                                +debug> next
                                                                                                                                                                                                                                                                 < world
                                                                                                                                                                                                                                                                 break in myscript.js:5
                                                                                                                                                                                                                                                                   3   debugger;
                                                                                                                                                                                                                                                                   4   console.log('world');
                                                                                                                                                                                                                                                                -> 5 }, 1000);
                                                                                                                                                                                                                                                                +> 5 }, 1000);
                                                                                                                                                                                                                                                                   6 console.log('hello');
                                                                                                                                                                                                                                                                   7
                                                                                                                                                                                                                                                                -debug> .exit
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +debug> .exit

                                                                                                                                                                                                                                                                The repl command allows code to be evaluated remotely. The next command steps to the next line. Type help to see what other commands are available.

                                                                                                                                                                                                                                                                Pressing enter without typing a command will repeat the previous debugger @@ -252,25 +253,24 @@

                                                                                                                                                                                                                                                              It is also possible to set a breakpoint in a file (module) that is not loaded yet:

                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              $ node inspect main.js
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              $ node inspect main.js
                                                                                                                                                                                                                                                               < Debugger listening on ws://127.0.0.1:9229/4e3db158-9791-4274-8909-914f7facf3bd
                                                                                                                                                                                                                                                               < For help, see: https://nodejs.org/en/docs/inspector
                                                                                                                                                                                                                                                               < Debugger attached.
                                                                                                                                                                                                                                                               Break on start in main.js:1
                                                                                                                                                                                                                                                              -> 1 (function (exports, require, module, __filename, __dirname) { const mod = require('./mod.js');
                                                                                                                                                                                                                                                              +> 1 (function (exports, require, module, __filename, __dirname) { const mod = require('./mod.js');
                                                                                                                                                                                                                                                                 2 mod.hello();
                                                                                                                                                                                                                                                                 3 mod.hello();
                                                                                                                                                                                                                                                              -debug> setBreakpoint('mod.js', 22)
                                                                                                                                                                                                                                                              +debug> setBreakpoint('mod.js', 22)
                                                                                                                                                                                                                                                               Warning: script 'mod.js' was not loaded yet.
                                                                                                                                                                                                                                                              -debug> c
                                                                                                                                                                                                                                                              +debug> c
                                                                                                                                                                                                                                                               break in mod.js:22
                                                                                                                                                                                                                                                                20 // USE OR OTHER DEALINGS IN THE SOFTWARE.
                                                                                                                                                                                                                                                                21
                                                                                                                                                                                                                                                              ->22 exports.hello = function() {
                                                                                                                                                                                                                                                              +>22 exports.hello = function() {
                                                                                                                                                                                                                                                                23   return 'hello from module';
                                                                                                                                                                                                                                                                24 };
                                                                                                                                                                                                                                                              -debug>
                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              +debug>

                                                                                                                                                                                                                                                              Information#

                                                                                                                                                                                                                                                              • backtrace, bt: Print backtrace of current execution frame
                                                                                                                                                                                                                                                              • @@ -294,8 +294,8 @@
                                                                                                                                                                                                                                                              • scripts: List all loaded scripts
                                                                                                                                                                                                                                                              • version: Display V8's version
                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                              Advanced Usage#

                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                              V8 Inspector Integration for Node.js#

                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                              Advanced usage#

                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                              V8 inspector integration for Node.js#

                                                                                                                                                                                                                                                              V8 Inspector integration allows attaching Chrome DevTools to Node.js instances for debugging and profiling. It uses the Chrome DevTools Protocol.

                                                                                                                                                                                                                                                              @@ -304,23 +304,19 @@ e.g. --inspect=9222 will accept DevTools connections on port 9222.

                                                                                                                                                                                                                                                              To break on the first line of the application code, pass the --inspect-brk flag instead of --inspect.

                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              $ node --inspect index.js
                                                                                                                                                                                                                                                              -Debugger listening on 127.0.0.1:9229.
                                                                                                                                                                                                                                                              -To start debugging, open the following URL in Chrome:
                                                                                                                                                                                                                                                              -    chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29
                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              $ node --inspect index.js
                                                                                                                                                                                                                                                              +Debugger listening on ws://127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29
                                                                                                                                                                                                                                                              +For help, see: https://nodejs.org/en/docs/inspector

                                                                                                                                                                                                                                                              (In the example above, the UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29 at the end of the URL is generated on the fly, it varies in different debugging sessions.)

                                                                                                                                                                                                                                                              If the Chrome browser is older than 66.0.3345.0, use inspector.html instead of js_app.html in the above URL.

                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                              Chrome DevTools doesn't support debugging Worker Threads yet. +

                                                                                                                                                                                                                                                              Chrome DevTools doesn't support debugging worker threads yet. ndb can be used to debug them.

                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                      - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/debugger.json nodejs-mozilla-12.22.12/doc/api/debugger.json --- nodejs-mozilla-12.18.1/doc/api/debugger.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/debugger.json 2022-04-05 07:17:04.000000000 +0000 @@ -65,19 +65,19 @@ "displayName": "Command reference" }, { - "textRaw": "Advanced Usage", + "textRaw": "Advanced usage", "name": "advanced_usage", "modules": [ { - "textRaw": "V8 Inspector Integration for Node.js", + "textRaw": "V8 inspector integration for Node.js", "name": "v8_inspector_integration_for_node.js", - "desc": "

                                                                                                                                                                                                                                                      V8 Inspector integration allows attaching Chrome DevTools to Node.js\ninstances for debugging and profiling. It uses the\nChrome DevTools Protocol.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      V8 Inspector can be enabled by passing the --inspect flag when starting a\nNode.js application. It is also possible to supply a custom port with that flag,\ne.g. --inspect=9222 will accept DevTools connections on port 9222.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To break on the first line of the application code, pass the --inspect-brk\nflag instead of --inspect.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node --inspect index.js\nDebugger listening on 127.0.0.1:9229.\nTo start debugging, open the following URL in Chrome:\n    chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      (In the example above, the UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29\nat the end of the URL is generated on the fly, it varies in different\ndebugging sessions.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the Chrome browser is older than 66.0.3345.0,\nuse inspector.html instead of js_app.html in the above URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Chrome DevTools doesn't support debugging Worker Threads yet.\nndb can be used to debug them.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      V8 Inspector integration allows attaching Chrome DevTools to Node.js\ninstances for debugging and profiling. It uses the\nChrome DevTools Protocol.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      V8 Inspector can be enabled by passing the --inspect flag when starting a\nNode.js application. It is also possible to supply a custom port with that flag,\ne.g. --inspect=9222 will accept DevTools connections on port 9222.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To break on the first line of the application code, pass the --inspect-brk\nflag instead of --inspect.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      $ node --inspect index.js\nDebugger listening on ws://127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29\nFor help, see: https://nodejs.org/en/docs/inspector\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      (In the example above, the UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29\nat the end of the URL is generated on the fly, it varies in different\ndebugging sessions.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      If the Chrome browser is older than 66.0.3345.0,\nuse inspector.html instead of js_app.html in the above URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Chrome DevTools doesn't support debugging worker threads yet.\nndb can be used to debug them.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "V8 Inspector Integration for Node.js" + "displayName": "V8 inspector integration for Node.js" } ], "type": "misc", - "displayName": "Advanced Usage" + "displayName": "Advanced usage" } ] } diff -Nru nodejs-mozilla-12.18.1/doc/api/debugger.md nodejs-mozilla-12.22.12/doc/api/debugger.md --- nodejs-mozilla-12.18.1/doc/api/debugger.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/debugger.md 2022-04-05 07:17:04.000000000 +0000 @@ -168,9 +168,9 @@ * `scripts`: List all loaded scripts * `version`: Display V8's version -## Advanced Usage +## Advanced usage -### V8 Inspector Integration for Node.js +### V8 inspector integration for Node.js V8 Inspector integration allows attaching Chrome DevTools to Node.js instances for debugging and profiling. It uses the @@ -185,9 +185,8 @@ ```console $ node --inspect index.js -Debugger listening on 127.0.0.1:9229. -To start debugging, open the following URL in Chrome: - chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29 +Debugger listening on ws://127.0.0.1:9229/dc9010dd-f8b8-4ac5-a510-c1a114ec7d29 +For help, see: https://nodejs.org/en/docs/inspector ``` (In the example above, the UUID dc9010dd-f8b8-4ac5-a510-c1a114ec7d29 @@ -197,10 +196,10 @@ If the Chrome browser is older than 66.0.3345.0, use `inspector.html` instead of `js_app.html` in the above URL. -Chrome DevTools doesn't support debugging [Worker Threads][] yet. +Chrome DevTools doesn't support debugging [worker threads][] yet. [ndb][] can be used to debug them. [Chrome DevTools Protocol]: https://chromedevtools.github.io/devtools-protocol/ [V8 Inspector]: #debugger_v8_inspector_integration_for_node_js -[Worker Threads]: worker_threads.html +[worker threads]: worker_threads.html [ndb]: https://github.com/GoogleChromeLabs/ndb/ diff -Nru nodejs-mozilla-12.18.1/doc/api/deprecations.html nodejs-mozilla-12.22.12/doc/api/deprecations.html --- nodejs-mozilla-12.18.1/doc/api/deprecations.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/deprecations.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Deprecated APIs | Node.js v12.18.1 Documentation + + Deprecated APIs | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      The util.isBuffer() API is deprecated. Please use -Buffer.isBuffer() instead.

                                                                                                                                                                                                                                                      +Buffer.isBuffer() instead.

                                                                                                                                                                                                                                                      DEP0047: util.isDate()#

                                                                                                                                                                                                                                                      - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/deprecations.json nodejs-mozilla-12.22.12/doc/api/deprecations.json --- nodejs-mozilla-12.18.1/doc/api/deprecations.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/deprecations.json 2022-04-05 07:17:04.000000000 +0000 @@ -18,7 +18,7 @@ "displayName": "Revoking deprecations" }, { - "textRaw": "List of Deprecated APIs", + "textRaw": "List of deprecated APIs", "name": "list_of_deprecated_apis", "desc": "

                                                                                                                                                                                                                                                      ", "modules": [ @@ -147,7 +147,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Runtime (supports --pending-deprecation)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer() function and new Buffer() constructor are deprecated due to\nAPI usability issues that can lead to accidental security issues.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As an alternative, use one of the following methods of constructing Buffer\nobjects:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Without --pending-deprecation, runtime warnings occur only for code not in\nnode_modules. This means there will not be deprecation warnings for\nBuffer() usage in dependencies. With --pending-deprecation, a runtime\nwarning results no matter where the Buffer() usage occurs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Runtime (supports --pending-deprecation)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The Buffer() function and new Buffer() constructor are deprecated due to\nAPI usability issues that can lead to accidental security issues.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      As an alternative, use one of the following methods of constructing Buffer\nobjects:

                                                                                                                                                                                                                                                      \n\n

                                                                                                                                                                                                                                                      Without --pending-deprecation, runtime warnings occur only for code not in\nnode_modules. This means there will not be deprecation warnings for\nBuffer() usage in dependencies. With --pending-deprecation, a runtime\nwarning results no matter where the Buffer() usage occurs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0005: `Buffer()` constructor" }, @@ -805,7 +805,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The SlowBuffer class is deprecated. Please use\nBuffer.allocUnsafeSlow(size) instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The SlowBuffer class is deprecated. Please use\nBuffer.allocUnsafeSlow(size) instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0030: `SlowBuffer`" }, @@ -1098,7 +1098,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.CryptoStream class was removed. Please use\ntls.TLSSocket instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.CryptoStream class was removed. Please use\ntls.TLSSocket instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0042: `tls.CryptoStream`" }, @@ -1137,7 +1137,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.SecurePair class is deprecated. Please use\ntls.TLSSocket instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The tls.SecurePair class is deprecated. Please use\ntls.TLSSocket instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0043: `tls.SecurePair`" }, @@ -1218,7 +1218,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The util.isBuffer() API is deprecated. Please use\nBuffer.isBuffer() instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The util.isBuffer() API is deprecated. Please use\nBuffer.isBuffer() instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0046: `util.isBuffer()`" }, @@ -1923,7 +1923,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Runtime

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.parseCertString() is a trivial parsing helper that was made public by\nmistake. This function can usually be replaced with:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const querystring = require('querystring');\nquerystring.parse(str, '\\n', '=');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is not completely equivalent to querystring.parse(). One\ndifference is that querystring.parse() does url decoding:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > querystring.parse('%E5%A5%BD=1', '\\n', '=');\n{ '好': '1' }\n> tls.parseCertString('%E5%A5%BD=1');\n{ '%E5%A5%BD': '1' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Runtime

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      tls.parseCertString() is a trivial parsing helper that was made public by\nmistake. This function can usually be replaced with:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const querystring = require('querystring');\nquerystring.parse(str, '\\n', '=');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This function is not completely equivalent to querystring.parse(). One\ndifference is that querystring.parse() does url decoding:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      > querystring.parse('%E5%A5%BD=1', '\\n', '=');\n{ '好': '1' }\n> tls.parseCertString('%E5%A5%BD=1');\n{ '%E5%A5%BD': '1' }\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0076: `tls.parseCertString()`" }, @@ -1960,7 +1960,7 @@ "displayName": "DEP0078: `REPLServer.turnOffEditorMode()`" }, { - "textRaw": "DEP0079: Custom inspection function on Objects via `.inspect()`", + "textRaw": "DEP0079: Custom inspection function on objects via `.inspect()`", "name": "dep0079:_custom_inspection_function_on_objects_via_`.inspect()`", "meta": { "changes": [ @@ -1983,7 +1983,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Using a property named inspect on an object to specify a custom inspection\nfunction for util.inspect() is deprecated. Use util.inspect.custom\ninstead. For backward compatibility with Node.js prior to version 6.4.0, both\nmay be specified.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0079: Custom inspection function on Objects via `.inspect()`" + "displayName": "DEP0079: Custom inspection function on objects via `.inspect()`" }, { "textRaw": "DEP0080: `path._makeLong()`", @@ -2076,7 +2076,7 @@ "displayName": "DEP0084: requiring bundled internal dependencies" }, { - "textRaw": "DEP0085: AsyncHooks Sensitive API", + "textRaw": "DEP0085: AsyncHooks sensitive API", "name": "dep0085:_asynchooks_sensitive_api", "meta": { "changes": [ @@ -2095,9 +2095,9 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The AsyncHooks Sensitive API was never documented and had various minor issues.\nUse the AsyncResource API instead. See\nhttps://github.com/nodejs/node/issues/15572.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The AsyncHooks sensitive API was never documented and had various minor issues.\nUse the AsyncResource API instead. See\nhttps://github.com/nodejs/node/issues/15572.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0085: AsyncHooks Sensitive API" + "displayName": "DEP0085: AsyncHooks sensitive API" }, { "textRaw": "DEP0086: Remove `runInAsyncIdScope`", @@ -2143,7 +2143,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Deprecation revoked

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Importing assert directly was not recommended as the exposed functions use\nloose equality checks. The deprecation was revoked because use of the assert\nmodule is not discouraged, and the deprecation caused end user confusion.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Deprecation revoked

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Importing assert directly was not recommended as the exposed functions use\nloose equality checks. The deprecation was revoked because use of the assert\nmodule is not discouraged, and the deprecation caused developer confusion.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0089: `require('assert')`" }, @@ -2281,7 +2281,7 @@ "displayName": "DEP0097: `MakeCallback` with `domain` property" }, { - "textRaw": "DEP0098: AsyncHooks Embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs", + "textRaw": "DEP0098: AsyncHooks embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs", "name": "dep0098:_asynchooks_embedder_`asyncresource.emitbefore`_and_`asyncresource.emitafter`_apis", "meta": { "changes": [ @@ -2303,10 +2303,10 @@ }, "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The embedded API provided by AsyncHooks exposes .emitBefore() and\n.emitAfter() methods which are very easy to use incorrectly which can lead\nto unrecoverable errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use asyncResource.runInAsyncScope() API instead which provides a much\nsafer, and more convenient, alternative. See\nhttps://github.com/nodejs/node/pull/18513.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0098: AsyncHooks Embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs" + "displayName": "DEP0098: AsyncHooks embedder `AsyncResource.emitBefore` and `AsyncResource.emitAfter` APIs" }, { - "textRaw": "DEP0099: async context-unaware `node::MakeCallback` C++ APIs", + "textRaw": "DEP0099: Async context-unaware `node::MakeCallback` C++ APIs", "name": "dep0099:_async_context-unaware_`node::makecallback`_c++_apis", "meta": { "changes": [ @@ -2319,7 +2319,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Type: Compile-time

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Certain versions of node::MakeCallback APIs available to native modules are\ndeprecated. Please use the versions of the API that accept an async_context\nparameter.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0099: async context-unaware `node::MakeCallback` C++ APIs" + "displayName": "DEP0099: Async context-unaware `node::MakeCallback` C++ APIs" }, { "textRaw": "DEP0100: `process.assert()`", @@ -2694,7 +2694,7 @@ "displayName": "DEP0119: `process.binding('uv').errname()` private API" }, { - "textRaw": "DEP0120: Windows Performance Counter Support", + "textRaw": "DEP0120: Windows Performance Counter support", "name": "dep0120:_windows_performance_counter_support", "meta": { "changes": [ @@ -2712,7 +2712,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Type: End-of-Life

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Windows Performance Counter support has been removed from Node.js. The\nundocumented COUNTER_NET_SERVER_CONNECTION(),\nCOUNTER_NET_SERVER_CONNECTION_CLOSE(), COUNTER_HTTP_SERVER_REQUEST(),\nCOUNTER_HTTP_SERVER_RESPONSE(), COUNTER_HTTP_CLIENT_REQUEST(), and\nCOUNTER_HTTP_CLIENT_RESPONSE() functions have been deprecated.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "DEP0120: Windows Performance Counter Support" + "displayName": "DEP0120: Windows Performance Counter support" }, { "textRaw": "DEP0121: `net._setSimultaneousAccepts()`", @@ -2870,7 +2870,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Module.createRequireFromPath() is deprecated. Please use module.createRequire() instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Module.createRequireFromPath() is deprecated. Please use module.createRequire() instead.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0130: `Module.createRequireFromPath()`" }, @@ -2880,13 +2880,18 @@ "meta": { "changes": [ { + "version": "v12.22.0", + "pr-url": "https://github.com/nodejs/node/pull/37603", + "description": "Runtime deprecation." + }, + { "version": "v12.3.0", "pr-url": "https://github.com/nodejs/node/pull/27498", "description": "Documentation-only." } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The legacy HTTP parser, used by default in versions of Node.js prior to 12.0.0,\nis deprecated. This deprecation applies to users of the\n--http-parser=legacy command-line flag.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Runtime

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The legacy HTTP parser, used by default in versions of Node.js prior to 12.0.0,\nis deprecated. This deprecation applies to users of the\n--http-parser=legacy command-line flag.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0131: Legacy HTTP parser" }, @@ -2950,13 +2955,51 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      response.finished indicates whether response.end() has been\ncalled, not whether 'finish' has been emitted and the underlying data\nis flushed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use response.writableFinished or response.writableEnded\naccordingly instead to avoid the ambigiuty.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To maintain existing behaviour response.finished should be replaced with\nresponse.writableEnded.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      response.finished indicates whether response.end() has been\ncalled, not whether 'finish' has been emitted and the underlying data\nis flushed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use response.writableFinished or response.writableEnded\naccordingly instead to avoid the ambigiuty.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To maintain existing behaviour response.finished should be replaced with\nresponse.writableEnded.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "DEP0136: `http` `finished`" + }, + { + "textRaw": "DEP0139: `process.umask()` with no arguments", + "name": "dep0139:_`process.umask()`_with_no_arguments", + "meta": { + "changes": [ + { + "version": [ + "v12.19.0", + "v14.0.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/32499", + "description": "Documentation-only deprecation." + } + ] + }, + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Calling process.umask() with no argument causes the process-wide umask to be\nwritten twice. This introduces a race condition between threads, and is a\npotential security vulnerability. There is no safe, cross-platform alternative\nAPI.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "DEP0139: `process.umask()` with no arguments" + }, + { + "textRaw": "DEP0144: `module.parent`", + "name": "dep0144:_`module.parent`", + "meta": { + "changes": [ + { + "version": [ + "v12.19.0", + "v14.6.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/32217", + "description": "Documentation-only deprecation." + } + ] + }, + "desc": "

                                                                                                                                                                                                                                                      Type: Documentation-only

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A CommonJS module can access the first module that required it using\nmodule.parent. This feature is deprecated because it does not work\nconsistently in the presence of ECMAScript modules and because it gives an\ninaccurate representation of the CommonJS module graph.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some modules use it to check if they are the entry point of the current process.\nInstead, it is recommended to compare require.main and module:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      if (require.main === module) {\n  // Code section that will run only if current file is the entry point.\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      When looking for the CommonJS modules that have required the current one,\nrequire.cache and module.children can be used:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const moduleParents = Object.values(require.cache)\n  .filter((m) => m.children.includes(module));\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "DEP0144: `module.parent`" } ], "type": "misc", - "displayName": "List of Deprecated APIs" + "displayName": "List of deprecated APIs" } ] } diff -Nru nodejs-mozilla-12.18.1/doc/api/deprecations.md nodejs-mozilla-12.22.12/doc/api/deprecations.md --- nodejs-mozilla-12.18.1/doc/api/deprecations.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/deprecations.md 2022-04-05 07:17:04.000000000 +0000 @@ -38,7 +38,7 @@ this document will be updated with information relevant to the decision. However, the deprecation identifier will not be modified. -## List of Deprecated APIs +## List of deprecated APIs ### DEP0001: `http.OutgoingMessage.prototype.flush` @@ -1577,7 +1577,7 @@ This function is not completely equivalent to `querystring.parse()`. One difference is that `querystring.parse()` does url decoding: -```sh +```console > querystring.parse('%E5%A5%BD=1', '\n', '='); { '好': '1' } > tls.parseCertString('%E5%A5%BD=1'); @@ -1614,7 +1614,7 @@ `REPLServer.turnOffEditorMode()` was removed from userland visibility. -### DEP0079: Custom inspection function on Objects via `.inspect()` +### DEP0079: Custom inspection function on objects via `.inspect()` -Type: Documentation-only +Type: Runtime The legacy HTTP parser, used by default in versions of Node.js prior to 12.0.0, is deprecated. This deprecation applies to users of the @@ -2542,13 +2545,66 @@ To maintain existing behaviour `response.finished` should be replaced with `response.writableEnded`. + +### DEP0139: `process.umask()` with no arguments + + +Type: Documentation-only + +Calling `process.umask()` with no argument causes the process-wide umask to be +written twice. This introduces a race condition between threads, and is a +potential security vulnerability. There is no safe, cross-platform alternative +API. + + +### DEP0144: `module.parent` + + +Type: Documentation-only + +A CommonJS module can access the first module that required it using +`module.parent`. This feature is deprecated because it does not work +consistently in the presence of ECMAScript modules and because it gives an +inaccurate representation of the CommonJS module graph. + +Some modules use it to check if they are the entry point of the current process. +Instead, it is recommended to compare `require.main` and `module`: + +```js +if (require.main === module) { + // Code section that will run only if current file is the entry point. +} +``` + +When looking for the CommonJS modules that have required the current one, +`require.cache` and `module.children` can be used: + +```js +const moduleParents = Object.values(require.cache) + .filter((m) => m.children.includes(module)); +``` + [`--http-parser=legacy`]: cli.html#cli_http_parser_library [`--pending-deprecation`]: cli.html#cli_pending_deprecation [`--throw-deprecation`]: cli.html#cli_throw_deprecation -[`Buffer.allocUnsafeSlow(size)`]: buffer.html#buffer_class_method_buffer_allocunsafeslow_size -[`Buffer.from(array)`]: buffer.html#buffer_class_method_buffer_from_array -[`Buffer.from(buffer)`]: buffer.html#buffer_class_method_buffer_from_buffer -[`Buffer.isBuffer()`]: buffer.html#buffer_class_method_buffer_isbuffer_obj +[`Buffer.allocUnsafeSlow(size)`]: buffer.html#buffer_static_method_buffer_allocunsafeslow_size +[`Buffer.from(array)`]: buffer.html#buffer_static_method_buffer_from_array +[`Buffer.from(buffer)`]: buffer.html#buffer_static_method_buffer_from_buffer +[`Buffer.isBuffer()`]: buffer.html#buffer_static_method_buffer_isbuffer_obj [`Cipher`]: crypto.html#crypto_class_cipher [`Decipher`]: crypto.html#crypto_class_decipher [`EventEmitter.listenerCount(emitter, eventName)`]: events.html#events_eventemitter_listenercount_emitter_eventname @@ -2591,7 +2647,7 @@ [`http.request()`]: http.html#http_http_request_options_callback [`https.get()`]: https.html#https_https_get_options_callback [`https.request()`]: https.html#https_https_request_options_callback -[`module.createRequire()`]: modules.html#modules_module_createrequire_filename +[`module.createRequire()`]: module.html#module_module_createrequire_filename [`os.networkInterfaces()`]: os.html#os_os_networkinterfaces [`os.tmpdir()`]: os.html#os_os_tmpdir [`process.env`]: process.html#process_process_env @@ -2602,18 +2658,18 @@ [`response.socket`]: http.html#http_response_socket [`response.connection`]: http.html#http_response_connection [`response.end()`]: http.html#http_response_end_data_encoding_callback -[`response.finished`]: #http_response_finished -[`response.writableFinished`]: #http_response_writablefinished -[`response.writableEnded`]: #http_response_writableended +[`response.finished`]: http.html#http_response_finished +[`response.writableFinished`]: http.html#http_response_writablefinished +[`response.writableEnded`]: http.html#http_response_writableended [`script.createCachedData()`]: vm.html#vm_script_createcacheddata [`setInterval()`]: timers.html#timers_setinterval_callback_delay_args [`setTimeout()`]: timers.html#timers_settimeout_callback_delay_args [`timeout.ref()`]: timers.html#timers_timeout_ref [`timeout.refresh()`]: timers.html#timers_timeout_refresh [`timeout.unref()`]: timers.html#timers_timeout_unref -[`tls.CryptoStream`]: tls.html#tls_class_cryptostream +[`tls.CryptoStream`]: tls.html#tls_class_tls_cryptostream [`tls.SecureContext`]: tls.html#tls_tls_createsecurecontext_options -[`tls.SecurePair`]: tls.html#tls_class_securepair +[`tls.SecurePair`]: tls.html#tls_class_tls_securepair [`tls.TLSSocket`]: tls.html#tls_class_tls_tlssocket [`tls.checkServerIdentity()`]: tls.html#tls_tls_checkserveridentity_hostname_cert [`tls.createSecureContext()`]: tls.html#tls_tls_createsecurecontext_options @@ -2649,8 +2705,8 @@ [NIST SP 800-38D]: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf [RFC 6066]: https://tools.ietf.org/html/rfc6066#section-3 [WHATWG URL API]: url.html#url_the_whatwg_url_api -[alloc]: buffer.html#buffer_class_method_buffer_alloc_size_fill_encoding -[alloc_unsafe_size]: buffer.html#buffer_class_method_buffer_allocunsafe_size -[from_arraybuffer]: buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length -[from_string_encoding]: buffer.html#buffer_class_method_buffer_from_string_encoding +[alloc]: buffer.html#buffer_static_method_buffer_alloc_size_fill_encoding +[alloc_unsafe_size]: buffer.html#buffer_static_method_buffer_allocunsafe_size +[from_arraybuffer]: buffer.html#buffer_static_method_buffer_from_arraybuffer_byteoffset_length +[from_string_encoding]: buffer.html#buffer_static_method_buffer_from_string_encoding [legacy `urlObject`]: url.html#url_legacy_urlobject diff -Nru nodejs-mozilla-12.18.1/doc/api/dgram.html nodejs-mozilla-12.22.12/doc/api/dgram.html --- nodejs-mozilla-12.18.1/doc/api/dgram.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/dgram.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - UDP/Datagram Sockets | Node.js v12.18.1 Documentation + + UDP/datagram sockets | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                      • - Index + Index
                                                                                                                                                                                                                                                      • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                      • View another version -
                                                                                                                                                                                                                                                        1. 14.x
                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                          1. 17.x
                                                                                                                                                                                                                                                          2. +
                                                                                                                                                                                                                                                          3. 16.x LTS
                                                                                                                                                                                                                                                          4. +
                                                                                                                                                                                                                                                          5. 15.x
                                                                                                                                                                                                                                                          6. +
                                                                                                                                                                                                                                                          7. 14.x LTS
                                                                                                                                                                                                                                                          8. 13.x
                                                                                                                                                                                                                                                          9. 12.x LTS
                                                                                                                                                                                                                                                          10. 11.x
                                                                                                                                                                                                                                                          11. -
                                                                                                                                                                                                                                                          12. 10.x LTS
                                                                                                                                                                                                                                                          13. +
                                                                                                                                                                                                                                                          14. 10.x
                                                                                                                                                                                                                                                          15. 9.x
                                                                                                                                                                                                                                                          16. 8.x
                                                                                                                                                                                                                                                          17. 7.x
                                                                                                                                                                                                                                                          18. @@ -121,11 +128,9 @@
                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                            UDP/Datagram Sockets#

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            UDP/datagram sockets#

                                                                                                                                                                                                                                                            Stability: 2 - Stable

                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                            The dgram module provides an implementation of UDP Datagram sockets.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const dgram = require('dgram');
                                                                                                                                                                                                                                                            -const server = dgram.createSocket('udp4');
                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            Source Code: lib/dgram.js

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            The dgram module provides an implementation of UDP datagram sockets.

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const dgram = require('dgram');
                                                                                                                                                                                                                                                            +const server = dgram.createSocket('udp4');
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -server.on('error', (err) => {
                                                                                                                                                                                                                                                            -  console.log(`server error:\n${err.stack}`);
                                                                                                                                                                                                                                                            +server.on('error', (err) => {
                                                                                                                                                                                                                                                            +  console.log(`server error:\n${err.stack}`);
                                                                                                                                                                                                                                                               server.close();
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -server.on('message', (msg, rinfo) => {
                                                                                                                                                                                                                                                            -  console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
                                                                                                                                                                                                                                                            +server.on('message', (msg, rinfo) => {
                                                                                                                                                                                                                                                            +  console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -server.on('listening', () => {
                                                                                                                                                                                                                                                            -  const address = server.address();
                                                                                                                                                                                                                                                            -  console.log(`server listening ${address.address}:${address.port}`);
                                                                                                                                                                                                                                                            +server.on('listening', () => {
                                                                                                                                                                                                                                                            +  const address = server.address();
                                                                                                                                                                                                                                                            +  console.log(`server listening ${address.address}:${address.port}`);
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -server.bind(41234);
                                                                                                                                                                                                                                                            -// Prints: server listening 0.0.0.0:41234
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +server.bind(41234); +// Prints: server listening 0.0.0.0:41234

                                                                                                                                                                                                                                                            Class: dgram.Socket#

                                                                                                                                                                                                                                                            • ip <string>
                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                            • callback <Function>
                                                                                                                                                                                                                                                              • err <Error>
                                                                                                                                                                                                                                                              • hostnames <string[]>
                                                                                                                                                                                                                                                              • @@ -900,12 +894,11 @@ resolution. The servers argument is an array of RFC 5952 formatted addresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                                dns.setServers([
                                                                                                                                                                                                                                                                -  '4.4.4.4',
                                                                                                                                                                                                                                                                -  '[2001:4860:4860::8888]',
                                                                                                                                                                                                                                                                -  '4.4.4.4:1053',
                                                                                                                                                                                                                                                                -  '[2001:4860:4860::8888]:1053'
                                                                                                                                                                                                                                                                -]);
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                + '4.4.4.4', + '[2001:4860:4860::8888]', + '4.4.4.4:1053', + '[2001:4860:4860::8888]:1053' +]);

                                                                                                                                                                                                                                                                An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                                The dns.setServers() method must not be called while a DNS query is in progress.

                                                                                                                                                                                                                                                                @@ -913,12 +906,12 @@ dns.resolve*() and dns.reverse() (and specifically not dns.lookup()).

                                                                                                                                                                                                                                                                This method works much like -resolve.conf. +resolve.conf. That is, if attempting to resolve with the first server provided results in a NOTFOUND error, the resolve() method will not attempt to resolve with subsequent servers provided. Fallback DNS servers will only be used if the earlier ones time out or result in some other error.

                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                DNS Promises API#

                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                DNS promises API#

                                                                                                                                                                                                                                                                The dns.promises API provides an alternative set of asynchronous DNS methods that return Promise objects rather than using callbacks. The API is accessible via require('dns').promises.

                                                                                                                                                                                                                                                                @@ -931,20 +924,19 @@ the servers used for a resolver using resolver.setServers() does not affect other resolvers:

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                const { Resolver } = require('dns').promises;
                                                                                                                                                                                                                                                                -const resolver = new Resolver();
                                                                                                                                                                                                                                                                -resolver.setServers(['4.4.4.4']);
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                -// This request will use the server at 4.4.4.4, independent of global settings.
                                                                                                                                                                                                                                                                -resolver.resolve4('example.org').then((addresses) => {
                                                                                                                                                                                                                                                                -  // ...
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                const { Resolver } = require('dns').promises;
                                                                                                                                                                                                                                                                +const resolver = new Resolver();
                                                                                                                                                                                                                                                                +resolver.setServers(['4.4.4.4']);
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                +// This request will use the server at 4.4.4.4, independent of global settings.
                                                                                                                                                                                                                                                                +resolver.resolve4('example.org').then((addresses) => {
                                                                                                                                                                                                                                                                +  // ...
                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -// Alternatively, the same code can be written using async-await style.
                                                                                                                                                                                                                                                                -(async function() {
                                                                                                                                                                                                                                                                -  const addresses = await resolver.resolve4('example.org');
                                                                                                                                                                                                                                                                -})();
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +// Alternatively, the same code can be written using async-await style. +(async function() { + const addresses = await resolver.resolve4('example.org'); +})();

                                                                                                                                                                                                                                                                The following methods from the dnsPromises API are available:

                                                                                                                                                                                                                                                                • resolver.getServers()
                                                                                                                                                                                                                                                                • @@ -975,20 +967,18 @@ section if a custom port is used.

                                                                                                                                                                                                                                                                  [
                                                                                                                                                                                                                                                                  -  '4.4.4.4',
                                                                                                                                                                                                                                                                  -  '2001:4860:4860::8888',
                                                                                                                                                                                                                                                                  -  '4.4.4.4:1053',
                                                                                                                                                                                                                                                                  -  '[2001:4860:4860::8888]:1053'
                                                                                                                                                                                                                                                                  -]
                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                  + '4.4.4.4', + '2001:4860:4860::8888', + '4.4.4.4:1053', + '[2001:4860:4860::8888]:1053' +]

                                                                                                                                                                                                                                                                  dnsPromises.lookup(hostname[, options])#

                                                                                                                                                                                                                                                                  • hostname <string>
                                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                    options <integer> | <Object>

                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                  • options <integer> | <Object>
                                                                                                                                                                                                                                                                    • family <integer> The record family. Must be 4, 6, or 0. The value 0 indicates that IPv4 and IPv6 addresses are both returned. Default: @@ -1024,25 +1014,24 @@ take some time to consult the Implementation considerations section before using dnsPromises.lookup().

                                                                                                                                                                                                                                                                      Example usage:

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      const dns = require('dns');
                                                                                                                                                                                                                                                                      -const dnsPromises = dns.promises;
                                                                                                                                                                                                                                                                      -const options = {
                                                                                                                                                                                                                                                                      -  family: 6,
                                                                                                                                                                                                                                                                      -  hints: dns.ADDRCONFIG | dns.V4MAPPED,
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      const dns = require('dns');
                                                                                                                                                                                                                                                                      +const dnsPromises = dns.promises;
                                                                                                                                                                                                                                                                      +const options = {
                                                                                                                                                                                                                                                                      +  family: 6,
                                                                                                                                                                                                                                                                      +  hints: dns.ADDRCONFIG | dns.V4MAPPED,
                                                                                                                                                                                                                                                                       };
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -dnsPromises.lookup('example.com', options).then((result) => {
                                                                                                                                                                                                                                                                      -  console.log('address: %j family: IPv%s', result.address, result.family);
                                                                                                                                                                                                                                                                      -  // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
                                                                                                                                                                                                                                                                      +dnsPromises.lookup('example.com', options).then((result) => {
                                                                                                                                                                                                                                                                      +  console.log('address: %j family: IPv%s', result.address, result.family);
                                                                                                                                                                                                                                                                      +  // address: "2606:2800:220:1:248:1893:25c8:1946" family: IPv6
                                                                                                                                                                                                                                                                       });
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -// When options.all is true, the result will be an Array.
                                                                                                                                                                                                                                                                      -options.all = true;
                                                                                                                                                                                                                                                                      -dnsPromises.lookup('example.com', options).then((result) => {
                                                                                                                                                                                                                                                                      -  console.log('addresses: %j', result);
                                                                                                                                                                                                                                                                      -  // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}]
                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +// When options.all is true, the result will be an Array. +options.all = true; +dnsPromises.lookup('example.com', options).then((result) => { + console.log('addresses: %j', result); + // addresses: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}] +});

                                                                                                                                                                                                                                                                      dnsPromises.lookupService(address, port)#

                                                                                                                                                                                                                                                                      • hostname <string> Host name to resolve.
                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                        options <Object>

                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                      • options <Object>
                                                                                                                                                                                                                                                                        • ttl <boolean> Retrieve the Time-To-Live value (TTL) of each record. When true, the Promise is resolved with an array of @@ -1258,20 +1244,19 @@
                                                                                                                                                                                                                                                                          TypeProperties
                                                                                                                                                                                                                                                                          'A'address/ttl
                                                                                                                                                                                                                                                                          'AAAA'address/ttl
                                                                                                                                                                                                                                                                          'CNAME'value
                                                                                                                                                                                                                                                                          'MX'Refer to dnsPromises.resolveMx()
                                                                                                                                                                                                                                                                          'NAPTR'Refer to dnsPromises.resolveNaptr()
                                                                                                                                                                                                                                                                          'NS'value
                                                                                                                                                                                                                                                                          'PTR'value
                                                                                                                                                                                                                                                                          'SOA'Refer to dnsPromises.resolveSoa()
                                                                                                                                                                                                                                                                          'SRV'Refer to dnsPromises.resolveSrv()
                                                                                                                                                                                                                                                                          'TXT'This type of record contains an array property called entries which refers to dnsPromises.resolveTxt(), e.g. { entries: ['...'], type: 'TXT' }

                                                                                                                                                                                                                                                                          Here is an example of the result object:

                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          [ { type: 'A', address: '127.0.0.1', ttl: 299 },
                                                                                                                                                                                                                                                                          -  { type: 'CNAME', value: 'example.com' },
                                                                                                                                                                                                                                                                          -  { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
                                                                                                                                                                                                                                                                          -  { type: 'NS', value: 'ns1.example.com' },
                                                                                                                                                                                                                                                                          -  { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
                                                                                                                                                                                                                                                                          -  { type: 'SOA',
                                                                                                                                                                                                                                                                          -    nsname: 'ns1.example.com',
                                                                                                                                                                                                                                                                          -    hostmaster: 'admin.example.com',
                                                                                                                                                                                                                                                                          -    serial: 156696742,
                                                                                                                                                                                                                                                                          -    refresh: 900,
                                                                                                                                                                                                                                                                          -    retry: 900,
                                                                                                                                                                                                                                                                          -    expire: 1800,
                                                                                                                                                                                                                                                                          -    minttl: 60 } ]
                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                          [ { type: 'A', address: '127.0.0.1', ttl: 299 },
                                                                                                                                                                                                                                                                          +  { type: 'CNAME', value: 'example.com' },
                                                                                                                                                                                                                                                                          +  { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
                                                                                                                                                                                                                                                                          +  { type: 'NS', value: 'ns1.example.com' },
                                                                                                                                                                                                                                                                          +  { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
                                                                                                                                                                                                                                                                          +  { type: 'SOA',
                                                                                                                                                                                                                                                                          +    nsname: 'ns1.example.com',
                                                                                                                                                                                                                                                                          +    hostmaster: 'admin.example.com',
                                                                                                                                                                                                                                                                          +    serial: 156696742,
                                                                                                                                                                                                                                                                          +    refresh: 900,
                                                                                                                                                                                                                                                                          +    retry: 900,
                                                                                                                                                                                                                                                                          +    expire: 1800,
                                                                                                                                                                                                                                                                          +    minttl: 60 } ]

                                                                                                                                                                                                                                                                          dnsPromises.resolveCname(hostname)#

                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                        -  flags: 's',
                                                                                                                                                                                                                                                                        -  service: 'SIP+D2U',
                                                                                                                                                                                                                                                                        -  regexp: '',
                                                                                                                                                                                                                                                                        -  replacement: '_sip._udp.example.com',
                                                                                                                                                                                                                                                                        -  order: 30,
                                                                                                                                                                                                                                                                        -  preference: 100
                                                                                                                                                                                                                                                                        -}
                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                        + flags: 's', + service: 'SIP+D2U', + regexp: '', + replacement: '_sip._udp.example.com', + order: 30, + preference: 100 +}

                                                                                                                                                                                                                                                                        dnsPromises.resolveNs(hostname)#

                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                      -  nsname: 'ns.example.com',
                                                                                                                                                                                                                                                                      -  hostmaster: 'root.example.com',
                                                                                                                                                                                                                                                                      -  serial: 2013101809,
                                                                                                                                                                                                                                                                      -  refresh: 10000,
                                                                                                                                                                                                                                                                      -  retry: 2400,
                                                                                                                                                                                                                                                                      -  expire: 604800,
                                                                                                                                                                                                                                                                      -  minttl: 3600
                                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      + nsname: 'ns.example.com', + hostmaster: 'root.example.com', + serial: 2013101809, + refresh: 10000, + retry: 2400, + expire: 604800, + minttl: 3600 +}

                                                                                                                                                                                                                                                                      dnsPromises.resolveSrv(hostname)#

                                                                                                                                                                                                                                                                    {
                                                                                                                                                                                                                                                                    -  priority: 10,
                                                                                                                                                                                                                                                                    -  weight: 5,
                                                                                                                                                                                                                                                                    -  port: 21223,
                                                                                                                                                                                                                                                                    -  name: 'service.example.com'
                                                                                                                                                                                                                                                                    -}
                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    + priority: 10, + weight: 5, + port: 21223, + name: 'service.example.com' +}

                                                                                                                                                                                                                                                                    dnsPromises.resolveTxt(hostname)#

                                                                                                                                                                                                                                                      - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/dns.json nodejs-mozilla-12.22.12/doc/api/dns.json --- nodejs-mozilla-12.18.1/doc/api/dns.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/dns.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                      The dns module enables name resolution. For example, use it to look up IP\naddresses of host names.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Although named for the Domain Name System (DNS), it does not always use the\nDNS protocol for lookups. dns.lookup() uses the operating system\nfacilities to perform name resolution. It may not need to perform any network\ncommunication. Developers looking to perform name resolution in the same way\nthat other applications on the same operating system behave should use\ndns.lookup().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dns = require('dns');\n\ndns.lookup('example.org', (err, address, family) => {\n  console.log('address: %j family: IPv%s', address, family);\n});\n// address: \"93.184.216.34\" family: IPv4\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All other functions in the dns module connect to an actual DNS server to\nperform name resolution. They will always use the network to perform DNS\nqueries. These functions do not use the same set of configuration files used by\ndns.lookup() (e.g. /etc/hosts). These functions should be used by\ndevelopers who do not want to use the underlying operating system's\nfacilities for name resolution, and instead want to always perform DNS queries.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dns = require('dns');\n\ndns.resolve4('archive.org', (err, addresses) => {\n  if (err) throw err;\n\n  console.log(`addresses: ${JSON.stringify(addresses)}`);\n\n  addresses.forEach((a) => {\n    dns.reverse(a, (err, hostnames) => {\n      if (err) {\n        throw err;\n      }\n      console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);\n    });\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See the Implementation considerations section for more information.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/dns.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns module enables name resolution. For example, use it to look up IP\naddresses of host names.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Although named for the Domain Name System (DNS), it does not always use the\nDNS protocol for lookups. dns.lookup() uses the operating system\nfacilities to perform name resolution. It may not need to perform any network\ncommunication. To perform name resolution the way other applications on the same\nsystem do, use dns.lookup().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dns = require('dns');\n\ndns.lookup('example.org', (err, address, family) => {\n  console.log('address: %j family: IPv%s', address, family);\n});\n// address: \"93.184.216.34\" family: IPv4\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All other functions in the dns module connect to an actual DNS server to\nperform name resolution. They will always use the network to perform DNS\nqueries. These functions do not use the same set of configuration files used by\ndns.lookup() (e.g. /etc/hosts). Use these functions to always perform\nDNS queries, bypassing other name-resolution facilities.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const dns = require('dns');\n\ndns.resolve4('archive.org', (err, addresses) => {\n  if (err) throw err;\n\n  console.log(`addresses: ${JSON.stringify(addresses)}`);\n\n  addresses.forEach((a) => {\n    dns.reverse(a, (err, hostnames) => {\n      if (err) {\n        throw err;\n      }\n      console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);\n    });\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      See the Implementation considerations section for more information.

                                                                                                                                                                                                                                                      ", "classes": [ { "textRaw": "Class: `dns.Resolver`", @@ -23,6 +23,29 @@ "desc": "

                                                                                                                                                                                                                                                      An independent resolver for DNS requests.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Creating a new resolver uses the default server settings. Setting\nthe servers used for a resolver using\nresolver.setServers() does not affect\nother resolvers:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const { Resolver } = require('dns');\nconst resolver = new Resolver();\nresolver.setServers(['4.4.4.4']);\n\n// This request will use the server at 4.4.4.4, independent of global settings.\nresolver.resolve4('example.org', (err, addresses) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following methods from the dns module are available:

                                                                                                                                                                                                                                                      \n", "methods": [ { + "textRaw": "`Resolver([options])`", + "type": "method", + "name": "Resolver", + "meta": { + "added": [ + "v8.3.0" + ], + "changes": [ + { + "version": "v12.18.3", + "pr-url": "https://github.com/nodejs/node/pull/33472", + "description": "The constructor now accepts an `options` object. The single supported option is `timeout`." + } + ] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                      Create a new resolver.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • options <Object>\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        • timeout <integer> Query timeout in milliseconds, or -1 to use the\ndefault timeout.
                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " + }, + { "textRaw": "`resolver.cancel()`", "type": "method", "name": "cancel", @@ -169,7 +192,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      The following flags can be passed as hints to dns.lookup().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • dns.ADDRCONFIG: Returned address types are determined by the types\nof addresses supported by the current system. For example, IPv4 addresses\nare only returned if the current system has at least one IPv4 address\nconfigured. Loopback addresses are not considered.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.V4MAPPED: If the IPv6 family was specified, but no IPv6 addresses were\nfound, then return IPv4 mapped IPv6 addresses. It is not supported\non some operating systems (e.g FreeBSD 10.1).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.ALL: If dns.V4MAPPED is specified, return resolved IPv6 addresses as\nwell as IPv4 mapped IPv6 addresses.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The following flags can be passed as hints to dns.lookup().

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • dns.ADDRCONFIG: Limits returned address types to the types of non-loopback\naddresses configured on the system. For example, IPv4 addresses are only\nreturned if the current system has at least one IPv4 address configured.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.V4MAPPED: If the IPv6 family was specified, but no IPv6 addresses were\nfound, then return IPv4 mapped IPv6 addresses. It is not supported\non some operating systems (e.g FreeBSD 10.1).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • dns.ALL: If dns.V4MAPPED is specified, return resolved IPv6 addresses as\nwell as IPv4 mapped IPv6 addresses.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "Supported getaddrinfo flags" } @@ -811,12 +834,12 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the IP address and port of servers to be used when performing DNS\nresolution. The servers argument is an array of RFC 5952 formatted\naddresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      dns.setServers([\n  '4.4.4.4',\n  '[2001:4860:4860::8888]',\n  '4.4.4.4:1053',\n  '[2001:4860:4860::8888]:1053'\n]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns.setServers() method must not be called while a DNS query is in\nprogress.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns.setServers() method affects only dns.resolve(),\ndns.resolve*() and dns.reverse() (and specifically not\ndns.lookup()).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method works much like\nresolve.conf.\nThat is, if attempting to resolve with the first server provided results in a\nNOTFOUND error, the resolve() method will not attempt to resolve with\nsubsequent servers provided. Fallback DNS servers will only be used if the\nearlier ones time out or result in some other error.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets the IP address and port of servers to be used when performing DNS\nresolution. The servers argument is an array of RFC 5952 formatted\naddresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      dns.setServers([\n  '4.4.4.4',\n  '[2001:4860:4860::8888]',\n  '4.4.4.4:1053',\n  '[2001:4860:4860::8888]:1053'\n]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns.setServers() method must not be called while a DNS query is in\nprogress.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dns.setServers() method affects only dns.resolve(),\ndns.resolve*() and dns.reverse() (and specifically not\ndns.lookup()).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method works much like\nresolve.conf.\nThat is, if attempting to resolve with the first server provided results in a\nNOTFOUND error, the resolve() method will not attempt to resolve with\nsubsequent servers provided. Fallback DNS servers will only be used if the\nearlier ones time out or result in some other error.

                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "DNS Promises API", + "textRaw": "DNS promises API", "name": "dns_promises_api", "desc": "

                                                                                                                                                                                                                                                      The dns.promises API provides an alternative set of asynchronous DNS methods\nthat return Promise objects rather than using callbacks. The API is accessible\nvia require('dns').promises.

                                                                                                                                                                                                                                                      ", "classes": [ @@ -1298,11 +1321,11 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Sets the IP address and port of servers to be used when performing DNS\nresolution. The servers argument is an array of RFC 5952 formatted\naddresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      dnsPromises.setServers([\n  '4.4.4.4',\n  '[2001:4860:4860::8888]',\n  '4.4.4.4:1053',\n  '[2001:4860:4860::8888]:1053'\n]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dnsPromises.setServers() method must not be called while a DNS query is in\nprogress.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method works much like\nresolve.conf.\nThat is, if attempting to resolve with the first server provided results in a\nNOTFOUND error, the resolve() method will not attempt to resolve with\nsubsequent servers provided. Fallback DNS servers will only be used if the\nearlier ones time out or result in some other error.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Sets the IP address and port of servers to be used when performing DNS\nresolution. The servers argument is an array of RFC 5952 formatted\naddresses. If the port is the IANA default DNS port (53) it can be omitted.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      dnsPromises.setServers([\n  '4.4.4.4',\n  '[2001:4860:4860::8888]',\n  '4.4.4.4:1053',\n  '[2001:4860:4860::8888]:1053'\n]);\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      An error will be thrown if an invalid address is provided.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The dnsPromises.setServers() method must not be called while a DNS query is in\nprogress.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This method works much like\nresolve.conf.\nThat is, if attempting to resolve with the first server provided results in a\nNOTFOUND error, the resolve() method will not attempt to resolve with\nsubsequent servers provided. Fallback DNS servers will only be used if the\nearlier ones time out or result in some other error.

                                                                                                                                                                                                                                                      " } ], "type": "module", - "displayName": "DNS Promises API" + "displayName": "DNS promises API" }, { "textRaw": "Error codes", diff -Nru nodejs-mozilla-12.18.1/doc/api/dns.md nodejs-mozilla-12.22.12/doc/api/dns.md --- nodejs-mozilla-12.18.1/doc/api/dns.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/dns.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,15 +4,16 @@ > Stability: 2 - Stable + + The `dns` module enables name resolution. For example, use it to look up IP addresses of host names. Although named for the [Domain Name System (DNS)][], it does not always use the DNS protocol for lookups. [`dns.lookup()`][] uses the operating system facilities to perform name resolution. It may not need to perform any network -communication. Developers looking to perform name resolution in the same way -that other applications on the same operating system behave should use -[`dns.lookup()`][]. +communication. To perform name resolution the way other applications on the same +system do, use [`dns.lookup()`][]. ```js const dns = require('dns'); @@ -26,9 +27,8 @@ All other functions in the `dns` module connect to an actual DNS server to perform name resolution. They will always use the network to perform DNS queries. These functions do not use the same set of configuration files used by -[`dns.lookup()`][] (e.g. `/etc/hosts`). These functions should be used by -developers who do not want to use the underlying operating system's -facilities for name resolution, and instead want to always perform DNS queries. +[`dns.lookup()`][] (e.g. `/etc/hosts`). Use these functions to always perform +DNS queries, bypassing other name-resolution facilities. ```js const dns = require('dns'); @@ -92,6 +92,22 @@ * [`resolver.reverse()`][`dns.reverse()`] * [`resolver.setServers()`][`dns.setServers()`] +### `Resolver([options])` + + +Create a new resolver. + +* `options` {Object} + * `timeout` {integer} Query timeout in milliseconds, or `-1` to use the + default timeout. + ### `resolver.cancel()` -

                                                                                                                                                                                                                                                      Stability: 1 - Experimental. The feature is not subject to +

                                                                                                                                                                                                                                                      Stability: 1 - Experimental. The feature is not subject to Semantic Versioning rules. Non-backward compatible changes or removal may occur in any future release. Use of the feature is not recommended in production environments.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Stability: 2 - Stable. Compatibility with the npm ecosystem is a high +

                                                                                                                                                                                                                                                      Stability: 2 - Stable. Compatibility with the npm ecosystem is a high priority.

                                                                                                                                                                                                                                                      Use caution when making use of Experimental features, particularly within -modules. End users may not be aware that experimental features are being used. -Bugs or behavior changes may surprise end users when Experimental API +modules. Users may not be aware that experimental features are being used. +Bugs or behavior changes may surprise users when Experimental API modifications occur. To avoid surprises, use of an Experimental feature may need a command-line flag. Experimental features may also emit a warning.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      JSON Output#

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      JSON output#

                                                                                                                                                                                                                                                      @@ -174,11 +180,9 @@ to the corresponding man pages which describe how the system call works.

                                                                                                                                                                                                                                                      Most Unix system calls have Windows analogues. Still, behavior differences may be unavoidable.

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/documentation.json nodejs-mozilla-12.22.12/doc/api/documentation.json --- nodejs-mozilla-12.18.1/doc/api/documentation.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/documentation.json 2022-04-05 07:17:04.000000000 +0000 @@ -4,8 +4,8 @@ "introduced_in": "v0.10.0", "miscs": [ { - "textRaw": "About this Documentation", - "name": "About this Documentation", + "textRaw": "About this documentation", + "name": "About this documentation", "introduced_in": "v0.10.0", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Welcome to the official API reference documentation for Node.js!

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js is a JavaScript runtime built on the V8 JavaScript engine.

                                                                                                                                                                                                                                                      ", @@ -18,13 +18,13 @@ "displayName": "Contributing" }, { - "textRaw": "Stability Index", - "name": "Stability Index", + "textRaw": "Stability index", + "name": "Stability index", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Throughout the documentation are indications of a section's stability. Some APIs\nare so proven and so relied upon that they are unlikely to ever change at all.\nOthers are brand new and experimental, or known to be hazardous.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stability indices are as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 0 - Deprecated. The feature may emit warnings. Backward\ncompatibility is not guaranteed.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 1 - Experimental. The feature is not subject to\nSemantic Versioning rules. Non-backward compatible changes or removal may\noccur in any future release. Use of the feature is not recommended in\nproduction environments.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 2 - Stable. Compatibility with the npm ecosystem is a high\npriority.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use caution when making use of Experimental features, particularly within\nmodules. End users may not be aware that experimental features are being used.\nBugs or behavior changes may surprise end users when Experimental API\nmodifications occur. To avoid surprises, use of an Experimental feature may need\na command-line flag. Experimental features may also emit a warning.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Throughout the documentation are indications of a section's stability. Some APIs\nare so proven and so relied upon that they are unlikely to ever change at all.\nOthers are brand new and experimental, or known to be hazardous.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The stability indices are as follows:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 0 - Deprecated. The feature may emit warnings. Backward\ncompatibility is not guaranteed.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 1 - Experimental. The feature is not subject to\nSemantic Versioning rules. Non-backward compatible changes or removal may\noccur in any future release. Use of the feature is not recommended in\nproduction environments.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Stability: 2 - Stable. Compatibility with the npm ecosystem is a high\npriority.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use caution when making use of Experimental features, particularly within\nmodules. Users may not be aware that experimental features are being used.\nBugs or behavior changes may surprise users when Experimental API\nmodifications occur. To avoid surprises, use of an Experimental feature may need\na command-line flag. Experimental features may also emit a warning.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "JSON Output", + "textRaw": "JSON output", "name": "json_output", "meta": { "added": [ @@ -34,7 +34,7 @@ }, "desc": "

                                                                                                                                                                                                                                                      Every .html document has a corresponding .json document. This is for IDEs\nand other utilities that consume the documentation.

                                                                                                                                                                                                                                                      ", "type": "misc", - "displayName": "JSON Output" + "displayName": "JSON output" }, { "textRaw": "System calls and man pages", diff -Nru nodejs-mozilla-12.18.1/doc/api/documentation.md nodejs-mozilla-12.22.12/doc/api/documentation.md --- nodejs-mozilla-12.18.1/doc/api/documentation.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/documentation.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# About this Documentation +# About this documentation @@ -12,7 +12,7 @@ Report errors in this documentation in [the issue tracker][]. See [the contributing guide][] for directions on how to submit pull requests. -## Stability Index +## Stability index @@ -38,12 +38,12 @@ > priority. Use caution when making use of Experimental features, particularly within -modules. End users may not be aware that experimental features are being used. -Bugs or behavior changes may surprise end users when Experimental API +modules. Users may not be aware that experimental features are being used. +Bugs or behavior changes may surprise users when Experimental API modifications occur. To avoid surprises, use of an Experimental feature may need a command-line flag. Experimental features may also emit a [warning][]. -## JSON Output +## JSON output diff -Nru nodejs-mozilla-12.18.1/doc/api/domain.html nodejs-mozilla-12.22.12/doc/api/domain.html --- nodejs-mozilla-12.18.1/doc/api/domain.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/domain.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Domain | Node.js v12.18.1 Documentation + + Domain | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                      • - Index + Index
                                                                                                                                                                                                                                                      • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                      • View another version -
                                                                                                                                                                                                                                                        1. 14.x
                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                          1. 17.x
                                                                                                                                                                                                                                                          2. +
                                                                                                                                                                                                                                                          3. 16.x LTS
                                                                                                                                                                                                                                                          4. +
                                                                                                                                                                                                                                                          5. 15.x
                                                                                                                                                                                                                                                          6. +
                                                                                                                                                                                                                                                          7. 14.x LTS
                                                                                                                                                                                                                                                          8. 13.x
                                                                                                                                                                                                                                                          9. 12.x LTS
                                                                                                                                                                                                                                                          10. 11.x
                                                                                                                                                                                                                                                          11. -
                                                                                                                                                                                                                                                          12. 10.x LTS
                                                                                                                                                                                                                                                          13. +
                                                                                                                                                                                                                                                          14. 10.x
                                                                                                                                                                                                                                                          15. 9.x
                                                                                                                                                                                                                                                          16. 8.x
                                                                                                                                                                                                                                                          17. 7.x
                                                                                                                                                                                                                                                          18. @@ -121,16 +128,14 @@

                                                                                                                                                                                                                                                            Table of Contents

                                                                                                                                                                                                                                                            @@ -158,13 +163,16 @@

                                                                                                                                                                                                                                                            Any Promises created in VM contexts no longer have a .domain property. Their handlers are still executed in the proper domain, however, and Promises created in the main context still possess a .domain property.

                                                                                                                                                                                                                                                            v8.0.0

                                                                                                                                                                                                                                                            Handlers for Promises are now invoked in the domain in which the first promise of a chain was created.

                                                                                                                                                                                                                                                            +v1.4.2 +

                                                                                                                                                                                                                                                            Deprecated since: v1.4.2

                                                                                                                                                                                                                                                            Stability: 0 - Deprecated

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            Source Code: lib/domain.js

                                                                                                                                                                                                                                                            This module is pending deprecation. Once a replacement API has been -finalized, this module will be fully deprecated. Most end users should +finalized, this module will be fully deprecated. Most developers should not have cause to use this module. Users who absolutely must have the functionality that domains provide may rely on it for the time being but should expect to have to migrate to a different solution @@ -175,7 +183,7 @@ will be notified, rather than losing the context of the error in the process.on('uncaughtException') handler, or causing the program to exit immediately with an error code.

                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                            Warning: Don't Ignore Errors!#

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            Warning: Don't ignore errors!#

                                                                                                                                                                                                                                                            Domain error handlers are not a substitute for closing down a process when an error occurs.

                                                                                                                                                                                                                                                            @@ -195,127 +203,125 @@ machines, the terminating proxy or service registry can take note of the failure, and react accordingly.

                                                                                                                                                                                                                                                            For example, this is not a good idea:

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            // XXX WARNING! BAD IDEA!
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            // XXX WARNING! BAD IDEA!
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -const d = require('domain').create();
                                                                                                                                                                                                                                                            -d.on('error', (er) => {
                                                                                                                                                                                                                                                            -  // The error won't crash the process, but what it does is worse!
                                                                                                                                                                                                                                                            -  // Though we've prevented abrupt process restarting, we are leaking
                                                                                                                                                                                                                                                            -  // resources like crazy if this ever happens.
                                                                                                                                                                                                                                                            -  // This is no better than process.on('uncaughtException')!
                                                                                                                                                                                                                                                            -  console.log(`error, but oh well ${er.message}`);
                                                                                                                                                                                                                                                            +const d = require('domain').create();
                                                                                                                                                                                                                                                            +d.on('error', (er) => {
                                                                                                                                                                                                                                                            +  // The error won't crash the process, but what it does is worse!
                                                                                                                                                                                                                                                            +  // Though we've prevented abrupt process restarting, we are leaking
                                                                                                                                                                                                                                                            +  // resources like crazy if this ever happens.
                                                                                                                                                                                                                                                            +  // This is no better than process.on('uncaughtException')!
                                                                                                                                                                                                                                                            +  console.log(`error, but oh well ${er.message}`);
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                            -d.run(() => {
                                                                                                                                                                                                                                                            -  require('http').createServer((req, res) => {
                                                                                                                                                                                                                                                            +d.run(() => {
                                                                                                                                                                                                                                                            +  require('http').createServer((req, res) => {
                                                                                                                                                                                                                                                                 handleRequest(req, res);
                                                                                                                                                                                                                                                               }).listen(PORT);
                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                                            By using the context of a domain, and the resilience of separating our program into multiple worker processes, we can react more appropriately, and handle errors with much greater safety.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            // Much better!
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            // Much better!
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -const cluster = require('cluster');
                                                                                                                                                                                                                                                            -const PORT = +process.env.PORT || 1337;
                                                                                                                                                                                                                                                            +const cluster = require('cluster');
                                                                                                                                                                                                                                                            +const PORT = +process.env.PORT || 1337;
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -if (cluster.isMaster) {
                                                                                                                                                                                                                                                            -  // A more realistic scenario would have more than 2 workers,
                                                                                                                                                                                                                                                            -  // and perhaps not put the master and worker in the same file.
                                                                                                                                                                                                                                                            -  //
                                                                                                                                                                                                                                                            -  // It is also possible to get a bit fancier about logging, and
                                                                                                                                                                                                                                                            -  // implement whatever custom logic is needed to prevent DoS
                                                                                                                                                                                                                                                            -  // attacks and other bad behavior.
                                                                                                                                                                                                                                                            -  //
                                                                                                                                                                                                                                                            -  // See the options in the cluster documentation.
                                                                                                                                                                                                                                                            -  //
                                                                                                                                                                                                                                                            -  // The important thing is that the master does very little,
                                                                                                                                                                                                                                                            -  // increasing our resilience to unexpected errors.
                                                                                                                                                                                                                                                            +if (cluster.isMaster) {
                                                                                                                                                                                                                                                            +  // A more realistic scenario would have more than 2 workers,
                                                                                                                                                                                                                                                            +  // and perhaps not put the master and worker in the same file.
                                                                                                                                                                                                                                                            +  //
                                                                                                                                                                                                                                                            +  // It is also possible to get a bit fancier about logging, and
                                                                                                                                                                                                                                                            +  // implement whatever custom logic is needed to prevent DoS
                                                                                                                                                                                                                                                            +  // attacks and other bad behavior.
                                                                                                                                                                                                                                                            +  //
                                                                                                                                                                                                                                                            +  // See the options in the cluster documentation.
                                                                                                                                                                                                                                                            +  //
                                                                                                                                                                                                                                                            +  // The important thing is that the master does very little,
                                                                                                                                                                                                                                                            +  // increasing our resilience to unexpected errors.
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                               cluster.fork();
                                                                                                                                                                                                                                                               cluster.fork();
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -  cluster.on('disconnect', (worker) => {
                                                                                                                                                                                                                                                            -    console.error('disconnect!');
                                                                                                                                                                                                                                                            +  cluster.on('disconnect', (worker) => {
                                                                                                                                                                                                                                                            +    console.error('disconnect!');
                                                                                                                                                                                                                                                                 cluster.fork();
                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -} else {
                                                                                                                                                                                                                                                            -  // the worker
                                                                                                                                                                                                                                                            -  //
                                                                                                                                                                                                                                                            -  // This is where we put our bugs!
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            -  const domain = require('domain');
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            -  // See the cluster documentation for more details about using
                                                                                                                                                                                                                                                            -  // worker processes to serve requests. How it works, caveats, etc.
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            -  const server = require('http').createServer((req, res) => {
                                                                                                                                                                                                                                                            -    const d = domain.create();
                                                                                                                                                                                                                                                            -    d.on('error', (er) => {
                                                                                                                                                                                                                                                            -      console.error(`error ${er.stack}`);
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            -      // We're in dangerous territory!
                                                                                                                                                                                                                                                            -      // By definition, something unexpected occurred,
                                                                                                                                                                                                                                                            -      // which we probably didn't want.
                                                                                                                                                                                                                                                            -      // Anything can happen now! Be very careful!
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            -      try {
                                                                                                                                                                                                                                                            -        // Make sure we close down within 30 seconds
                                                                                                                                                                                                                                                            -        const killtimer = setTimeout(() => {
                                                                                                                                                                                                                                                            -          process.exit(1);
                                                                                                                                                                                                                                                            -        }, 30000);
                                                                                                                                                                                                                                                            -        // But don't keep the process open just for that!
                                                                                                                                                                                                                                                            +} else {
                                                                                                                                                                                                                                                            +  // the worker
                                                                                                                                                                                                                                                            +  //
                                                                                                                                                                                                                                                            +  // This is where we put our bugs!
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +  const domain = require('domain');
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +  // See the cluster documentation for more details about using
                                                                                                                                                                                                                                                            +  // worker processes to serve requests. How it works, caveats, etc.
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +  const server = require('http').createServer((req, res) => {
                                                                                                                                                                                                                                                            +    const d = domain.create();
                                                                                                                                                                                                                                                            +    d.on('error', (er) => {
                                                                                                                                                                                                                                                            +      console.error(`error ${er.stack}`);
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +      // We're in dangerous territory!
                                                                                                                                                                                                                                                            +      // By definition, something unexpected occurred,
                                                                                                                                                                                                                                                            +      // which we probably didn't want.
                                                                                                                                                                                                                                                            +      // Anything can happen now! Be very careful!
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +      try {
                                                                                                                                                                                                                                                            +        // Make sure we close down within 30 seconds
                                                                                                                                                                                                                                                            +        const killtimer = setTimeout(() => {
                                                                                                                                                                                                                                                            +          process.exit(1);
                                                                                                                                                                                                                                                            +        }, 30000);
                                                                                                                                                                                                                                                            +        // But don't keep the process open just for that!
                                                                                                                                                                                                                                                                     killtimer.unref();
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -        // Stop taking new requests.
                                                                                                                                                                                                                                                            +        // Stop taking new requests.
                                                                                                                                                                                                                                                                     server.close();
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -        // Let the master know we're dead. This will trigger a
                                                                                                                                                                                                                                                            -        // 'disconnect' in the cluster master, and then it will fork
                                                                                                                                                                                                                                                            -        // a new worker.
                                                                                                                                                                                                                                                            +        // Let the master know we're dead. This will trigger a
                                                                                                                                                                                                                                                            +        // 'disconnect' in the cluster master, and then it will fork
                                                                                                                                                                                                                                                            +        // a new worker.
                                                                                                                                                                                                                                                                     cluster.worker.disconnect();
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -        // Try to send an error to the request that triggered the problem
                                                                                                                                                                                                                                                            -        res.statusCode = 500;
                                                                                                                                                                                                                                                            -        res.setHeader('content-type', 'text/plain');
                                                                                                                                                                                                                                                            -        res.end('Oops, there was a problem!\n');
                                                                                                                                                                                                                                                            -      } catch (er2) {
                                                                                                                                                                                                                                                            -        // Oh well, not much we can do at this point.
                                                                                                                                                                                                                                                            -        console.error(`Error sending 500! ${er2.stack}`);
                                                                                                                                                                                                                                                            +        // Try to send an error to the request that triggered the problem
                                                                                                                                                                                                                                                            +        res.statusCode = 500;
                                                                                                                                                                                                                                                            +        res.setHeader('content-type', 'text/plain');
                                                                                                                                                                                                                                                            +        res.end('Oops, there was a problem!\n');
                                                                                                                                                                                                                                                            +      } catch (er2) {
                                                                                                                                                                                                                                                            +        // Oh well, not much we can do at this point.
                                                                                                                                                                                                                                                            +        console.error(`Error sending 500! ${er2.stack}`);
                                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -    // Because req and res were created before this domain existed,
                                                                                                                                                                                                                                                            -    // we need to explicitly add them.
                                                                                                                                                                                                                                                            -    // See the explanation of implicit vs explicit binding below.
                                                                                                                                                                                                                                                            +    // Because req and res were created before this domain existed,
                                                                                                                                                                                                                                                            +    // we need to explicitly add them.
                                                                                                                                                                                                                                                            +    // See the explanation of implicit vs explicit binding below.
                                                                                                                                                                                                                                                                 d.add(req);
                                                                                                                                                                                                                                                                 d.add(res);
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -    // Now run the handler function in the domain.
                                                                                                                                                                                                                                                            -    d.run(() => {
                                                                                                                                                                                                                                                            +    // Now run the handler function in the domain.
                                                                                                                                                                                                                                                            +    d.run(() => {
                                                                                                                                                                                                                                                                   handleRequest(req, res);
                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                               server.listen(PORT);
                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -// This part is not important. Just an example routing thing.
                                                                                                                                                                                                                                                            -// Put fancy application logic here.
                                                                                                                                                                                                                                                            -function handleRequest(req, res) {
                                                                                                                                                                                                                                                            -  switch (req.url) {
                                                                                                                                                                                                                                                            -    case '/error':
                                                                                                                                                                                                                                                            -      // We do some async stuff, and then...
                                                                                                                                                                                                                                                            -      setTimeout(() => {
                                                                                                                                                                                                                                                            -        // Whoops!
                                                                                                                                                                                                                                                            +// This part is not important. Just an example routing thing.
                                                                                                                                                                                                                                                            +// Put fancy application logic here.
                                                                                                                                                                                                                                                            +function handleRequest(req, res) {
                                                                                                                                                                                                                                                            +  switch (req.url) {
                                                                                                                                                                                                                                                            +    case '/error':
                                                                                                                                                                                                                                                            +      // We do some async stuff, and then...
                                                                                                                                                                                                                                                            +      setTimeout(() => {
                                                                                                                                                                                                                                                            +        // Whoops!
                                                                                                                                                                                                                                                                     flerb.bark();
                                                                                                                                                                                                                                                                   }, timeout);
                                                                                                                                                                                                                                                            -      break;
                                                                                                                                                                                                                                                            -    default:
                                                                                                                                                                                                                                                            -      res.end('ok');
                                                                                                                                                                                                                                                            +      break;
                                                                                                                                                                                                                                                            +    default:
                                                                                                                                                                                                                                                            +      res.end('ok');
                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                            -}
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +}

                                                                                                                                                                                                                                                            Additions to Error objects#

                                                                                                                                                                                                                                                            Any time an Error object is routed through a domain, a few extra fields @@ -329,7 +335,7 @@

                                                                                                                                                                                                                                                          19. error.domainThrown A boolean indicating whether the error was thrown, emitted, or passed to a bound callback function.
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Implicit Binding#

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Implicit binding#

                                                                                                                                                                                                                                                      If domains are in use, then all new EventEmitter objects (including Stream objects, requests, responses, etc.) will be implicitly bound to @@ -348,7 +354,7 @@ Domain's 'error' event, but does not register the EventEmitter on the Domain. Implicit binding only takes care of thrown errors and 'error' events.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Explicit Binding#

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Explicit binding#

                                                                                                                                                                                                                                                      Sometimes, the domain in use is not the one that ought to be used for a specific event emitter. Or, the event emitter could have been created @@ -357,32 +363,31 @@

                                                                                                                                                                                                                                                      For example, there could be one domain in use for an HTTP server, but perhaps we would like to have a separate domain to use for each request.

                                                                                                                                                                                                                                                      That is possible via explicit binding.

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // Create a top-level domain for the server
                                                                                                                                                                                                                                                      -const domain = require('domain');
                                                                                                                                                                                                                                                      -const http = require('http');
                                                                                                                                                                                                                                                      -const serverDomain = domain.create();
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -serverDomain.run(() => {
                                                                                                                                                                                                                                                      -  // Server is created in the scope of serverDomain
                                                                                                                                                                                                                                                      -  http.createServer((req, res) => {
                                                                                                                                                                                                                                                      -    // Req and res are also created in the scope of serverDomain
                                                                                                                                                                                                                                                      -    // however, we'd prefer to have a separate domain for each request.
                                                                                                                                                                                                                                                      -    // create it first thing, and add req and res to it.
                                                                                                                                                                                                                                                      -    const reqd = domain.create();
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      // Create a top-level domain for the server
                                                                                                                                                                                                                                                      +const domain = require('domain');
                                                                                                                                                                                                                                                      +const http = require('http');
                                                                                                                                                                                                                                                      +const serverDomain = domain.create();
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +serverDomain.run(() => {
                                                                                                                                                                                                                                                      +  // Server is created in the scope of serverDomain
                                                                                                                                                                                                                                                      +  http.createServer((req, res) => {
                                                                                                                                                                                                                                                      +    // Req and res are also created in the scope of serverDomain
                                                                                                                                                                                                                                                      +    // however, we'd prefer to have a separate domain for each request.
                                                                                                                                                                                                                                                      +    // create it first thing, and add req and res to it.
                                                                                                                                                                                                                                                      +    const reqd = domain.create();
                                                                                                                                                                                                                                                           reqd.add(req);
                                                                                                                                                                                                                                                           reqd.add(res);
                                                                                                                                                                                                                                                      -    reqd.on('error', (er) => {
                                                                                                                                                                                                                                                      -      console.error('Error', er, req.url);
                                                                                                                                                                                                                                                      -      try {
                                                                                                                                                                                                                                                      -        res.writeHead(500);
                                                                                                                                                                                                                                                      -        res.end('Error occurred, sorry.');
                                                                                                                                                                                                                                                      -      } catch (er2) {
                                                                                                                                                                                                                                                      -        console.error('Error sending 500', er2, req.url);
                                                                                                                                                                                                                                                      +    reqd.on('error', (er) => {
                                                                                                                                                                                                                                                      +      console.error('Error', er, req.url);
                                                                                                                                                                                                                                                      +      try {
                                                                                                                                                                                                                                                      +        res.writeHead(500);
                                                                                                                                                                                                                                                      +        res.end('Error occurred, sorry.');
                                                                                                                                                                                                                                                      +      } catch (er2) {
                                                                                                                                                                                                                                                      +        console.error('Error sending 500', er2, req.url);
                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                                      -  }).listen(1337);
                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      + }).listen(1337); +});

                                                                                                                                                                                                                                                      domain.create()#

                                                                                                                                                                                                                                                      • Returns: <Domain>
                                                                                                                                                                                                                                                      • @@ -421,20 +426,19 @@

                                                                                                                                                                                                                                                        The returned function will be a wrapper around the supplied callback function. When the returned function is called, any errors that are thrown will be routed to the domain's 'error' event.

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        const d = domain.create();
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        const d = domain.create();
                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                        -function readSomeFile(filename, cb) {
                                                                                                                                                                                                                                                        -  fs.readFile(filename, 'utf8', d.bind((er, data) => {
                                                                                                                                                                                                                                                        -    // If this throws, it will also be passed to the domain.
                                                                                                                                                                                                                                                        -    return cb(er, data ? JSON.parse(data) : null);
                                                                                                                                                                                                                                                        +function readSomeFile(filename, cb) {
                                                                                                                                                                                                                                                        +  fs.readFile(filename, 'utf8', d.bind((er, data) => {
                                                                                                                                                                                                                                                        +    // If this throws, it will also be passed to the domain.
                                                                                                                                                                                                                                                        +    return cb(er, data ? JSON.parse(data) : null);
                                                                                                                                                                                                                                                           }));
                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                        -d.on('error', (er) => {
                                                                                                                                                                                                                                                        -  // An error occurred somewhere. If we throw it now, it will crash the program
                                                                                                                                                                                                                                                        -  // with the normal line number and stack message.
                                                                                                                                                                                                                                                        -});
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        +d.on('error', (er) => { + // An error occurred somewhere. If we throw it now, it will crash the program + // with the normal line number and stack message. +});

                                                                                                                                                                                                                                                        domain.enter()#

                                                                                                                                                                                                                                                        The enter() method is plumbing used by the run(), bind(), and intercept() methods to set the active domain. It sets domain.active and @@ -466,27 +470,26 @@ objects sent as the first argument to the function.

                                                                                                                                                                                                                                                        In this way, the common if (err) return callback(err); pattern can be replaced with a single error handler in a single place.

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        const d = domain.create();
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        const d = domain.create();
                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                        -function readSomeFile(filename, cb) {
                                                                                                                                                                                                                                                        -  fs.readFile(filename, 'utf8', d.intercept((data) => {
                                                                                                                                                                                                                                                        -    // Note, the first argument is never passed to the
                                                                                                                                                                                                                                                        -    // callback since it is assumed to be the 'Error' argument
                                                                                                                                                                                                                                                        -    // and thus intercepted by the domain.
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        -    // If this throws, it will also be passed to the domain
                                                                                                                                                                                                                                                        -    // so the error-handling logic can be moved to the 'error'
                                                                                                                                                                                                                                                        -    // event on the domain instead of being repeated throughout
                                                                                                                                                                                                                                                        -    // the program.
                                                                                                                                                                                                                                                        -    return cb(null, JSON.parse(data));
                                                                                                                                                                                                                                                        +function readSomeFile(filename, cb) {
                                                                                                                                                                                                                                                        +  fs.readFile(filename, 'utf8', d.intercept((data) => {
                                                                                                                                                                                                                                                        +    // Note, the first argument is never passed to the
                                                                                                                                                                                                                                                        +    // callback since it is assumed to be the 'Error' argument
                                                                                                                                                                                                                                                        +    // and thus intercepted by the domain.
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +    // If this throws, it will also be passed to the domain
                                                                                                                                                                                                                                                        +    // so the error-handling logic can be moved to the 'error'
                                                                                                                                                                                                                                                        +    // event on the domain instead of being repeated throughout
                                                                                                                                                                                                                                                        +    // the program.
                                                                                                                                                                                                                                                        +    return cb(null, JSON.parse(data));
                                                                                                                                                                                                                                                           }));
                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                        -d.on('error', (er) => {
                                                                                                                                                                                                                                                        -  // An error occurred somewhere. If we throw it now, it will crash the program
                                                                                                                                                                                                                                                        -  // with the normal line number and stack message.
                                                                                                                                                                                                                                                        -});
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        +d.on('error', (er) => { + // An error occurred somewhere. If we throw it now, it will crash the program + // with the normal line number and stack message. +});

                                                                                                                                                                                                                                                        domain.remove(emitter)#

                                                                                                                                                                                                                                                        • emitter <EventEmitter> | <Timer> emitter or timer to be removed from the domain
                                                                                                                                                                                                                                                        • @@ -503,65 +506,60 @@ created in that context. Optionally, arguments can be passed to the function.

                                                                                                                                                                                                                                                          This is the most basic way to use a domain.

                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          const domain = require('domain');
                                                                                                                                                                                                                                                          -const fs = require('fs');
                                                                                                                                                                                                                                                          -const d = domain.create();
                                                                                                                                                                                                                                                          -d.on('error', (er) => {
                                                                                                                                                                                                                                                          -  console.error('Caught error!', er);
                                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                                          -d.run(() => {
                                                                                                                                                                                                                                                          -  process.nextTick(() => {
                                                                                                                                                                                                                                                          -    setTimeout(() => { // Simulating some various async stuff
                                                                                                                                                                                                                                                          -      fs.open('non-existent file', 'r', (er, fd) => {
                                                                                                                                                                                                                                                          -        if (er) throw er;
                                                                                                                                                                                                                                                          -        // proceed...
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          const domain = require('domain');
                                                                                                                                                                                                                                                          +const fs = require('fs');
                                                                                                                                                                                                                                                          +const d = domain.create();
                                                                                                                                                                                                                                                          +d.on('error', (er) => {
                                                                                                                                                                                                                                                          +  console.error('Caught error!', er);
                                                                                                                                                                                                                                                          +});
                                                                                                                                                                                                                                                          +d.run(() => {
                                                                                                                                                                                                                                                          +  process.nextTick(() => {
                                                                                                                                                                                                                                                          +    setTimeout(() => { // Simulating some various async stuff
                                                                                                                                                                                                                                                          +      fs.open('non-existent file', 'r', (er, fd) => {
                                                                                                                                                                                                                                                          +        if (er) throw er;
                                                                                                                                                                                                                                                          +        // proceed...
                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                          -    }, 100);
                                                                                                                                                                                                                                                          +    }, 100);
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          +});

                                                                                                                                                                                                                                                          In this example, the d.on('error') handler will be triggered, rather than crashing the program.

                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                          Domains and Promises#

                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                          As of Node.js 8.0.0, the handlers of Promises are run inside the domain in +

                                                                                                                                                                                                                                                          Domains and promises#

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          As of Node.js 8.0.0, the handlers of promises are run inside the domain in which the call to .then() or .catch() itself was made:

                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          const d1 = domain.create();
                                                                                                                                                                                                                                                          -const d2 = domain.create();
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          const d1 = domain.create();
                                                                                                                                                                                                                                                          +const d2 = domain.create();
                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                          -let p;
                                                                                                                                                                                                                                                          -d1.run(() => {
                                                                                                                                                                                                                                                          -  p = Promise.resolve(42);
                                                                                                                                                                                                                                                          +let p;
                                                                                                                                                                                                                                                          +d1.run(() => {
                                                                                                                                                                                                                                                          +  p = Promise.resolve(42);
                                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                          -d2.run(() => {
                                                                                                                                                                                                                                                          -  p.then((v) => {
                                                                                                                                                                                                                                                          -    // running in d2
                                                                                                                                                                                                                                                          +d2.run(() => {
                                                                                                                                                                                                                                                          +  p.then((v) => {
                                                                                                                                                                                                                                                          +    // running in d2
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          +});

                                                                                                                                                                                                                                                          A callback may be bound to a specific domain using domain.bind(callback):

                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          const d1 = domain.create();
                                                                                                                                                                                                                                                          -const d2 = domain.create();
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          const d1 = domain.create();
                                                                                                                                                                                                                                                          +const d2 = domain.create();
                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                          -let p;
                                                                                                                                                                                                                                                          -d1.run(() => {
                                                                                                                                                                                                                                                          -  p = Promise.resolve(42);
                                                                                                                                                                                                                                                          +let p;
                                                                                                                                                                                                                                                          +d1.run(() => {
                                                                                                                                                                                                                                                          +  p = Promise.resolve(42);
                                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                          -d2.run(() => {
                                                                                                                                                                                                                                                          -  p.then(p.domain.bind((v) => {
                                                                                                                                                                                                                                                          -    // running in d1
                                                                                                                                                                                                                                                          +d2.run(() => {
                                                                                                                                                                                                                                                          +  p.then(p.domain.bind((v) => {
                                                                                                                                                                                                                                                          +    // running in d1
                                                                                                                                                                                                                                                             }));
                                                                                                                                                                                                                                                          -});
                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          +});

                                                                                                                                                                                                                                                          Domains will not interfere with the error handling mechanisms for -Promises. In other words, no 'error' event will be emitted for unhandled +promises. In other words, no 'error' event will be emitted for unhandled Promise rejections.

                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                      - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/domain.json nodejs-mozilla-12.22.12/doc/api/domain.json --- nodejs-mozilla-12.18.1/doc/api/domain.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/domain.json 2022-04-05 07:17:04.000000000 +0000 @@ -6,6 +6,9 @@ "textRaw": "Domain", "name": "domain", "meta": { + "deprecated": [ + "v1.4.2" + ], "changes": [ { "version": "v8.8.0", @@ -21,11 +24,11 @@ "introduced_in": "v0.10.0", "stability": 0, "stabilityText": "Deprecated", - "desc": "

                                                                                                                                                                                                                                                      This module is pending deprecation. Once a replacement API has been\nfinalized, this module will be fully deprecated. Most end users should\nnot have cause to use this module. Users who absolutely must have\nthe functionality that domains provide may rely on it for the time being\nbut should expect to have to migrate to a different solution\nin the future.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Domains provide a way to handle multiple different IO operations as a\nsingle group. If any of the event emitters or callbacks registered to a\ndomain emit an 'error' event, or throw an error, then the domain object\nwill be notified, rather than losing the context of the error in the\nprocess.on('uncaughtException') handler, or causing the program to\nexit immediately with an error code.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Source Code: lib/domain.js

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This module is pending deprecation. Once a replacement API has been\nfinalized, this module will be fully deprecated. Most developers should\nnot have cause to use this module. Users who absolutely must have\nthe functionality that domains provide may rely on it for the time being\nbut should expect to have to migrate to a different solution\nin the future.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Domains provide a way to handle multiple different IO operations as a\nsingle group. If any of the event emitters or callbacks registered to a\ndomain emit an 'error' event, or throw an error, then the domain object\nwill be notified, rather than losing the context of the error in the\nprocess.on('uncaughtException') handler, or causing the program to\nexit immediately with an error code.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Warning: Don't Ignore Errors!", - "name": "Warning: Don't Ignore Errors!", + "textRaw": "Warning: Don't ignore errors!", + "name": "Warning: Don't ignore errors!", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Domain error handlers are not a substitute for closing down a\nprocess when an error occurs.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By the very nature of how throw works in JavaScript, there is almost\nnever any way to safely \"pick up where it left off\", without leaking\nreferences, or creating some other sort of undefined brittle state.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The safest way to respond to a thrown error is to shut down the\nprocess. Of course, in a normal web server, there may be many\nopen connections, and it is not reasonable to abruptly shut those down\nbecause an error was triggered by someone else.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The better approach is to send an error response to the request that\ntriggered the error, while letting the others finish in their normal\ntime, and stop listening for new requests in that worker.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In this way, domain usage goes hand-in-hand with the cluster module,\nsince the master process can fork a new worker when a worker\nencounters an error. For Node.js programs that scale to multiple\nmachines, the terminating proxy or service registry can take note of\nthe failure, and react accordingly.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, this is not a good idea:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // XXX WARNING! BAD IDEA!\n\nconst d = require('domain').create();\nd.on('error', (er) => {\n  // The error won't crash the process, but what it does is worse!\n  // Though we've prevented abrupt process restarting, we are leaking\n  // resources like crazy if this ever happens.\n  // This is no better than process.on('uncaughtException')!\n  console.log(`error, but oh well ${er.message}`);\n});\nd.run(() => {\n  require('http').createServer((req, res) => {\n    handleRequest(req, res);\n  }).listen(PORT);\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      By using the context of a domain, and the resilience of separating our\nprogram into multiple worker processes, we can react more\nappropriately, and handle errors with much greater safety.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Much better!\n\nconst cluster = require('cluster');\nconst PORT = +process.env.PORT || 1337;\n\nif (cluster.isMaster) {\n  // A more realistic scenario would have more than 2 workers,\n  // and perhaps not put the master and worker in the same file.\n  //\n  // It is also possible to get a bit fancier about logging, and\n  // implement whatever custom logic is needed to prevent DoS\n  // attacks and other bad behavior.\n  //\n  // See the options in the cluster documentation.\n  //\n  // The important thing is that the master does very little,\n  // increasing our resilience to unexpected errors.\n\n  cluster.fork();\n  cluster.fork();\n\n  cluster.on('disconnect', (worker) => {\n    console.error('disconnect!');\n    cluster.fork();\n  });\n\n} else {\n  // the worker\n  //\n  // This is where we put our bugs!\n\n  const domain = require('domain');\n\n  // See the cluster documentation for more details about using\n  // worker processes to serve requests. How it works, caveats, etc.\n\n  const server = require('http').createServer((req, res) => {\n    const d = domain.create();\n    d.on('error', (er) => {\n      console.error(`error ${er.stack}`);\n\n      // We're in dangerous territory!\n      // By definition, something unexpected occurred,\n      // which we probably didn't want.\n      // Anything can happen now! Be very careful!\n\n      try {\n        // Make sure we close down within 30 seconds\n        const killtimer = setTimeout(() => {\n          process.exit(1);\n        }, 30000);\n        // But don't keep the process open just for that!\n        killtimer.unref();\n\n        // Stop taking new requests.\n        server.close();\n\n        // Let the master know we're dead. This will trigger a\n        // 'disconnect' in the cluster master, and then it will fork\n        // a new worker.\n        cluster.worker.disconnect();\n\n        // Try to send an error to the request that triggered the problem\n        res.statusCode = 500;\n        res.setHeader('content-type', 'text/plain');\n        res.end('Oops, there was a problem!\\n');\n      } catch (er2) {\n        // Oh well, not much we can do at this point.\n        console.error(`Error sending 500! ${er2.stack}`);\n      }\n    });\n\n    // Because req and res were created before this domain existed,\n    // we need to explicitly add them.\n    // See the explanation of implicit vs explicit binding below.\n    d.add(req);\n    d.add(res);\n\n    // Now run the handler function in the domain.\n    d.run(() => {\n      handleRequest(req, res);\n    });\n  });\n  server.listen(PORT);\n}\n\n// This part is not important. Just an example routing thing.\n// Put fancy application logic here.\nfunction handleRequest(req, res) {\n  switch (req.url) {\n    case '/error':\n      // We do some async stuff, and then...\n      setTimeout(() => {\n        // Whoops!\n        flerb.bark();\n      }, timeout);\n      break;\n    default:\n      res.end('ok');\n  }\n}\n
                                                                                                                                                                                                                                                      " }, @@ -36,14 +39,14 @@ "desc": "

                                                                                                                                                                                                                                                      Any time an Error object is routed through a domain, a few extra fields\nare added to it.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • error.domain The domain that first handled the error.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error.domainEmitter The event emitter that emitted an 'error' event\nwith the error object.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error.domainBound The callback function which was bound to the\ndomain, and passed an error as its first argument.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • error.domainThrown A boolean indicating whether the error was\nthrown, emitted, or passed to a bound callback function.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      " }, { - "textRaw": "Implicit Binding", - "name": "Implicit Binding", + "textRaw": "Implicit binding", + "name": "Implicit binding", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      If domains are in use, then all new EventEmitter objects (including\nStream objects, requests, responses, etc.) will be implicitly bound to\nthe active domain at the time of their creation.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Additionally, callbacks passed to lowlevel event loop requests (such as\nto fs.open(), or other callback-taking methods) will automatically be\nbound to the active domain. If they throw, then the domain will catch\nthe error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to prevent excessive memory usage, Domain objects themselves\nare not implicitly added as children of the active domain. If they\nwere, then it would be too easy to prevent request and response objects\nfrom being properly garbage collected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      To nest Domain objects as children of a parent Domain they must be\nexplicitly added.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Implicit binding routes thrown errors and 'error' events to the\nDomain's 'error' event, but does not register the EventEmitter on the\nDomain.\nImplicit binding only takes care of thrown errors and 'error' events.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "Explicit Binding", - "name": "Explicit Binding", + "textRaw": "Explicit binding", + "name": "Explicit binding", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Sometimes, the domain in use is not the one that ought to be used for a\nspecific event emitter. Or, the event emitter could have been created\nin the context of one domain, but ought to instead be bound to some\nother domain.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For example, there could be one domain in use for an HTTP server, but\nperhaps we would like to have a separate domain to use for each request.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      That is possible via explicit binding.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Create a top-level domain for the server\nconst domain = require('domain');\nconst http = require('http');\nconst serverDomain = domain.create();\n\nserverDomain.run(() => {\n  // Server is created in the scope of serverDomain\n  http.createServer((req, res) => {\n    // Req and res are also created in the scope of serverDomain\n    // however, we'd prefer to have a separate domain for each request.\n    // create it first thing, and add req and res to it.\n    const reqd = domain.create();\n    reqd.add(req);\n    reqd.add(res);\n    reqd.on('error', (er) => {\n      console.error('Error', er, req.url);\n      try {\n        res.writeHead(500);\n        res.end('Error occurred, sorry.');\n      } catch (er2) {\n        console.error('Error sending 500', er2, req.url);\n      }\n    });\n  }).listen(1337);\n});\n
                                                                                                                                                                                                                                                      " } @@ -213,11 +216,11 @@ ], "modules": [ { - "textRaw": "Domains and Promises", + "textRaw": "Domains and promises", "name": "domains_and_promises", - "desc": "

                                                                                                                                                                                                                                                      As of Node.js 8.0.0, the handlers of Promises are run inside the domain in\nwhich the call to .then() or .catch() itself was made:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const d1 = domain.create();\nconst d2 = domain.create();\n\nlet p;\nd1.run(() => {\n  p = Promise.resolve(42);\n});\n\nd2.run(() => {\n  p.then((v) => {\n    // running in d2\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A callback may be bound to a specific domain using domain.bind(callback):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const d1 = domain.create();\nconst d2 = domain.create();\n\nlet p;\nd1.run(() => {\n  p = Promise.resolve(42);\n});\n\nd2.run(() => {\n  p.then(p.domain.bind((v) => {\n    // running in d1\n  }));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Domains will not interfere with the error handling mechanisms for\nPromises. In other words, no 'error' event will be emitted for unhandled\nPromise rejections.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      As of Node.js 8.0.0, the handlers of promises are run inside the domain in\nwhich the call to .then() or .catch() itself was made:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const d1 = domain.create();\nconst d2 = domain.create();\n\nlet p;\nd1.run(() => {\n  p = Promise.resolve(42);\n});\n\nd2.run(() => {\n  p.then((v) => {\n    // running in d2\n  });\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      A callback may be bound to a specific domain using domain.bind(callback):

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const d1 = domain.create();\nconst d2 = domain.create();\n\nlet p;\nd1.run(() => {\n  p = Promise.resolve(42);\n});\n\nd2.run(() => {\n  p.then(p.domain.bind((v) => {\n    // running in d1\n  }));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Domains will not interfere with the error handling mechanisms for\npromises. In other words, no 'error' event will be emitted for unhandled\nPromise rejections.

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Domains and Promises" + "displayName": "Domains and promises" } ], "type": "module", diff -Nru nodejs-mozilla-12.18.1/doc/api/domain.md nodejs-mozilla-12.22.12/doc/api/domain.md --- nodejs-mozilla-12.18.1/doc/api/domain.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/domain.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,5 +1,6 @@ # Domain + **This module is pending deprecation**. Once a replacement API has been -finalized, this module will be fully deprecated. Most end users should +finalized, this module will be fully deprecated. Most developers should **not** have cause to use this module. Users who absolutely must have the functionality that domains provide may rely on it for the time being but should expect to have to migrate to a different solution @@ -30,7 +33,7 @@ `process.on('uncaughtException')` handler, or causing the program to exit immediately with an error code. -## Warning: Don't Ignore Errors! +## Warning: Don't ignore errors! @@ -199,7 +202,7 @@ * `error.domainThrown` A boolean indicating whether the error was thrown, emitted, or passed to a bound callback function. -## Implicit Binding +## Implicit binding @@ -225,7 +228,7 @@ `Domain`. Implicit binding only takes care of thrown errors and `'error'` events. -## Explicit Binding +## Explicit binding @@ -432,9 +435,9 @@ In this example, the `d.on('error')` handler will be triggered, rather than crashing the program. -## Domains and Promises +## Domains and promises -As of Node.js 8.0.0, the handlers of Promises are run inside the domain in +As of Node.js 8.0.0, the handlers of promises are run inside the domain in which the call to `.then()` or `.catch()` itself was made: ```js @@ -472,7 +475,7 @@ ``` Domains will not interfere with the error handling mechanisms for -Promises. In other words, no `'error'` event will be emitted for unhandled +promises. In other words, no `'error'` event will be emitted for unhandled `Promise` rejections. [`Error`]: errors.html#errors_class_error diff -Nru nodejs-mozilla-12.18.1/doc/api/embedding.html nodejs-mozilla-12.22.12/doc/api/embedding.html --- nodejs-mozilla-12.18.1/doc/api/embedding.html 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/embedding.html 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,342 @@ + + + + + + + C++ Embedder API | Node.js v12.22.12 Documentation + + + + + + +
                                                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + + + +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      C++ Embedder API#

                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      Node.js provides a number of C++ APIs that can be used to execute JavaScript +in a Node.js environment from other C++ software.

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      The documentation for these APIs can be found in src/node.h in the Node.js +source tree. In addition to the APIs exposed by Node.js, some required concepts +are provided by the V8 embedder API.

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Because using Node.js as an embedded library is different from writing code +that is executed by Node.js, breaking changes do not follow typical Node.js +deprecation policy and may occur on each semver-major release without prior +warning.

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Example embedding application#

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      The following sections will provide an overview over how to use these APIs +to create an application from scratch that will perform the equivalent of +node -e <code>, i.e. that will take a piece of JavaScript and run it in +a Node.js-specific environment.

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      The full code can be found in the Node.js source tree.

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Setting up per-process state#

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js requires some per-process state management in order to run:

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      • Arguments parsing for Node.js CLI options,
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • V8 per-process requirements, such as a v8::Platform instance.
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      The following example shows how these can be set up. Some class names are from +the node and v8 C++ namespaces, respectively.

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      int main(int argc, char** argv) {
                                                                                                                                                                                                                                                      +  argv = uv_setup_args(argc, argv);
                                                                                                                                                                                                                                                      +  std::vector<std::string> args(argv, argv + argc);
                                                                                                                                                                                                                                                      +  std::vector<std::string> exec_args;
                                                                                                                                                                                                                                                      +  std::vector<std::string> errors;
                                                                                                                                                                                                                                                      +  // Parse Node.js CLI options, and print any errors that have occurred while
                                                                                                                                                                                                                                                      +  // trying to parse them.
                                                                                                                                                                                                                                                      +  int exit_code = node::InitializeNodeWithArgs(&args, &exec_args, &errors);
                                                                                                                                                                                                                                                      +  for (const std::string& error : errors)
                                                                                                                                                                                                                                                      +    fprintf(stderr, "%s: %s\n", args[0].c_str(), error.c_str());
                                                                                                                                                                                                                                                      +  if (exit_code != 0) {
                                                                                                                                                                                                                                                      +    return exit_code;
                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  // Create a v8::Platform instance. `MultiIsolatePlatform::Create()` is a way
                                                                                                                                                                                                                                                      +  // to create a v8::Platform instance that Node.js can use when creating
                                                                                                                                                                                                                                                      +  // Worker threads. When no `MultiIsolatePlatform` instance is present,
                                                                                                                                                                                                                                                      +  // Worker threads are disabled.
                                                                                                                                                                                                                                                      +  std::unique_ptr<MultiIsolatePlatform> platform =
                                                                                                                                                                                                                                                      +      MultiIsolatePlatform::Create(4);
                                                                                                                                                                                                                                                      +  V8::InitializePlatform(platform.get());
                                                                                                                                                                                                                                                      +  V8::Initialize();
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  // See below for the contents of this function.
                                                                                                                                                                                                                                                      +  int ret = RunNodeInstance(platform.get(), args, exec_args);
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  V8::Dispose();
                                                                                                                                                                                                                                                      +  V8::ShutdownPlatform();
                                                                                                                                                                                                                                                      +  return ret;
                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Per-instance state#

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js has a concept of a “Node.js instance”, that is commonly being referred +to as node::Environment. Each node::Environment is associated with:

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      • Exactly one v8::Isolate, i.e. one JS Engine instance,
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • Exactly one uv_loop_t, i.e. one event loop, and
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • A number of v8::Contexts, but exactly one main v8::Context.
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • One node::IsolateData instance that contains information that could be +shared by multiple node::Environments that use the same v8::Isolate. +Currently, no testing if performed for this scenario.
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      In order to set up a v8::Isolate, an v8::ArrayBuffer::Allocator needs +to be provided. One possible choice is the default Node.js allocator, which +can be created through node::ArrayBufferAllocator::Create(). Using the Node.js +allocator allows minor performance optimizations when addons use the Node.js +C++ Buffer API, and is required in order to track ArrayBuffer memory in +process.memoryUsage().

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Additionally, each v8::Isolate that is used for a Node.js instance needs to +be registered and unregistered with the MultiIsolatePlatform instance, if one +is being used, in order for the platform to know which event loop to use +for tasks scheduled by the v8::Isolate.

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      The node::NewIsolate() helper function creates a v8::Isolate, +sets it up with some Node.js-specific hooks (e.g. the Node.js error handler), +and registers it with the platform automatically.

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      int RunNodeInstance(MultiIsolatePlatform* platform,
                                                                                                                                                                                                                                                      +                    const std::vector<std::string>& args,
                                                                                                                                                                                                                                                      +                    const std::vector<std::string>& exec_args) {
                                                                                                                                                                                                                                                      +  int exit_code = 0;
                                                                                                                                                                                                                                                      +  // Set up a libuv event loop.
                                                                                                                                                                                                                                                      +  uv_loop_t loop;
                                                                                                                                                                                                                                                      +  int ret = uv_loop_init(&loop);
                                                                                                                                                                                                                                                      +  if (ret != 0) {
                                                                                                                                                                                                                                                      +    fprintf(stderr, "%s: Failed to initialize loop: %s\n",
                                                                                                                                                                                                                                                      +            args[0].c_str(),
                                                                                                                                                                                                                                                      +            uv_err_name(ret));
                                                                                                                                                                                                                                                      +    return 1;
                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  std::shared_ptr<ArrayBufferAllocator> allocator =
                                                                                                                                                                                                                                                      +      ArrayBufferAllocator::Create();
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  Isolate* isolate = NewIsolate(allocator, &loop, platform);
                                                                                                                                                                                                                                                      +  if (isolate == nullptr) {
                                                                                                                                                                                                                                                      +    fprintf(stderr, "%s: Failed to initialize V8 Isolate\n", args[0].c_str());
                                                                                                                                                                                                                                                      +    return 1;
                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  {
                                                                                                                                                                                                                                                      +    Locker locker(isolate);
                                                                                                                                                                                                                                                      +    Isolate::Scope isolate_scope(isolate);
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    // Create a node::IsolateData instance that will later be released using
                                                                                                                                                                                                                                                      +    // node::FreeIsolateData().
                                                                                                                                                                                                                                                      +    std::unique_ptr<IsolateData, decltype(&node::FreeIsolateData)> isolate_data(
                                                                                                                                                                                                                                                      +        node::CreateIsolateData(isolate, &loop, platform, allocator.get()),
                                                                                                                                                                                                                                                      +        node::FreeIsolateData);
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    // Set up a new v8::Context.
                                                                                                                                                                                                                                                      +    HandleScope handle_scope(isolate);
                                                                                                                                                                                                                                                      +    Local<Context> context = node::NewContext(isolate);
                                                                                                                                                                                                                                                      +    if (context.IsEmpty()) {
                                                                                                                                                                                                                                                      +      fprintf(stderr, "%s: Failed to initialize V8 Context\n", args[0].c_str());
                                                                                                                                                                                                                                                      +      return 1;
                                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    // The v8::Context needs to be entered when node::CreateEnvironment() and
                                                                                                                                                                                                                                                      +    // node::LoadEnvironment() are being called.
                                                                                                                                                                                                                                                      +    Context::Scope context_scope(context);
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    // Create a node::Environment instance that will later be released using
                                                                                                                                                                                                                                                      +    // node::FreeEnvironment().
                                                                                                                                                                                                                                                      +    std::unique_ptr<Environment, decltype(&node::FreeEnvironment)> env(
                                                                                                                                                                                                                                                      +        node::CreateEnvironment(isolate_data.get(), context, args, exec_args),
                                                                                                                                                                                                                                                      +        node::FreeEnvironment);
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    // Set up the Node.js instance for execution, and run code inside of it.
                                                                                                                                                                                                                                                      +    // There is also a variant that takes a callback and provides it with
                                                                                                                                                                                                                                                      +    // the `require` and `process` objects, so that it can manually compile
                                                                                                                                                                                                                                                      +    // and run scripts as needed.
                                                                                                                                                                                                                                                      +    // The `require` function inside this script does *not* access the file
                                                                                                                                                                                                                                                      +    // system, and can only load built-in Node.js modules.
                                                                                                                                                                                                                                                      +    // `module.createRequire()` is being used to create one that is able to
                                                                                                                                                                                                                                                      +    // load files from the disk, and uses the standard CommonJS file loader
                                                                                                                                                                                                                                                      +    // instead of the internal-only `require` function.
                                                                                                                                                                                                                                                      +    MaybeLocal<Value> loadenv_ret = node::LoadEnvironment(
                                                                                                                                                                                                                                                      +        env.get(),
                                                                                                                                                                                                                                                      +        "const publicRequire ="
                                                                                                                                                                                                                                                      +        "  require('module').createRequire(process.cwd() + '/');"
                                                                                                                                                                                                                                                      +        "globalThis.require = publicRequire;"
                                                                                                                                                                                                                                                      +        "require('vm').runInThisContext(process.argv[1]);");
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    if (loadenv_ret.IsEmpty())  // There has been a JS exception.
                                                                                                                                                                                                                                                      +      return 1;
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    {
                                                                                                                                                                                                                                                      +      // SealHandleScope protects against handle leaks from callbacks.
                                                                                                                                                                                                                                                      +      SealHandleScope seal(isolate);
                                                                                                                                                                                                                                                      +      bool more;
                                                                                                                                                                                                                                                      +      do {
                                                                                                                                                                                                                                                      +        uv_run(&loop, UV_RUN_DEFAULT);
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +        // V8 tasks on background threads may end up scheduling new tasks in the
                                                                                                                                                                                                                                                      +        // foreground, which in turn can keep the event loop going. For example,
                                                                                                                                                                                                                                                      +        // WebAssembly.compile() may do so.
                                                                                                                                                                                                                                                      +        platform->DrainTasks(isolate);
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +        // If there are new tasks, continue.
                                                                                                                                                                                                                                                      +        more = uv_loop_alive(&loop);
                                                                                                                                                                                                                                                      +        if (more) continue;
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +        // node::EmitBeforeExit() is used to emit the 'beforeExit' event on
                                                                                                                                                                                                                                                      +        // the `process` object.
                                                                                                                                                                                                                                                      +        node::EmitBeforeExit(env.get());
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +        // 'beforeExit' can also schedule new work that keeps the event loop
                                                                                                                                                                                                                                                      +        // running.
                                                                                                                                                                                                                                                      +        more = uv_loop_alive(&loop);
                                                                                                                                                                                                                                                      +      } while (more == true);
                                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    // node::EmitExit() returns the current exit code.
                                                                                                                                                                                                                                                      +    exit_code = node::EmitExit(env.get());
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    // node::Stop() can be used to explicitly stop the event loop and keep
                                                                                                                                                                                                                                                      +    // further JavaScript from running. It can be called from any thread,
                                                                                                                                                                                                                                                      +    // and will act like worker.terminate() if called from another thread.
                                                                                                                                                                                                                                                      +    node::Stop(env.get());
                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  // Unregister the Isolate with the platform and add a listener that is called
                                                                                                                                                                                                                                                      +  // when the Platform is done cleaning up any state it had associated with
                                                                                                                                                                                                                                                      +  // the Isolate.
                                                                                                                                                                                                                                                      +  bool platform_finished = false;
                                                                                                                                                                                                                                                      +  platform->AddIsolateFinishedCallback(isolate, [](void* data) {
                                                                                                                                                                                                                                                      +    *static_cast<bool*>(data) = true;
                                                                                                                                                                                                                                                      +  }, &platform_finished);
                                                                                                                                                                                                                                                      +  platform->UnregisterIsolate(isolate);
                                                                                                                                                                                                                                                      +  isolate->Dispose();
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  // Wait until the platform has cleaned up all relevant resources.
                                                                                                                                                                                                                                                      +  while (!platform_finished)
                                                                                                                                                                                                                                                      +    uv_run(&loop, UV_RUN_ONCE);
                                                                                                                                                                                                                                                      +  int err = uv_loop_close(&loop);
                                                                                                                                                                                                                                                      +  assert(err == 0);
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +  return exit_code;
                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + + diff -Nru nodejs-mozilla-12.18.1/doc/api/embedding.json nodejs-mozilla-12.22.12/doc/api/embedding.json --- nodejs-mozilla-12.18.1/doc/api/embedding.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/embedding.json 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,30 @@ +{ + "type": "module", + "source": "doc/api/embedding.md", + "modules": [ + { + "textRaw": "C++ Embedder API", + "name": "c++_embedder_api", + "introduced_in": "v12.19.0", + "desc": "

                                                                                                                                                                                                                                                      Node.js provides a number of C++ APIs that can be used to execute JavaScript\nin a Node.js environment from other C++ software.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The documentation for these APIs can be found in src/node.h in the Node.js\nsource tree. In addition to the APIs exposed by Node.js, some required concepts\nare provided by the V8 embedder API.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Because using Node.js as an embedded library is different from writing code\nthat is executed by Node.js, breaking changes do not follow typical Node.js\ndeprecation policy and may occur on each semver-major release without prior\nwarning.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Example embedding application

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following sections will provide an overview over how to use these APIs\nto create an application from scratch that will perform the equivalent of\nnode -e <code>, i.e. that will take a piece of JavaScript and run it in\na Node.js-specific environment.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The full code can be found in the Node.js source tree.

                                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "Setting up per-process state", + "name": "setting_up_per-process_state", + "desc": "

                                                                                                                                                                                                                                                      Node.js requires some per-process state management in order to run:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Arguments parsing for Node.js CLI options,
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • V8 per-process requirements, such as a v8::Platform instance.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The following example shows how these can be set up. Some class names are from\nthe node and v8 C++ namespaces, respectively.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      int main(int argc, char** argv) {\n  argv = uv_setup_args(argc, argv);\n  std::vector<std::string> args(argv, argv + argc);\n  std::vector<std::string> exec_args;\n  std::vector<std::string> errors;\n  // Parse Node.js CLI options, and print any errors that have occurred while\n  // trying to parse them.\n  int exit_code = node::InitializeNodeWithArgs(&args, &exec_args, &errors);\n  for (const std::string& error : errors)\n    fprintf(stderr, \"%s: %s\\n\", args[0].c_str(), error.c_str());\n  if (exit_code != 0) {\n    return exit_code;\n  }\n\n  // Create a v8::Platform instance. `MultiIsolatePlatform::Create()` is a way\n  // to create a v8::Platform instance that Node.js can use when creating\n  // Worker threads. When no `MultiIsolatePlatform` instance is present,\n  // Worker threads are disabled.\n  std::unique_ptr<MultiIsolatePlatform> platform =\n      MultiIsolatePlatform::Create(4);\n  V8::InitializePlatform(platform.get());\n  V8::Initialize();\n\n  // See below for the contents of this function.\n  int ret = RunNodeInstance(platform.get(), args, exec_args);\n\n  V8::Dispose();\n  V8::ShutdownPlatform();\n  return ret;\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Setting up per-process state" + }, + { + "textRaw": "Per-instance state", + "name": "per-instance_state", + "desc": "

                                                                                                                                                                                                                                                      Node.js has a concept of a “Node.js instance”, that is commonly being referred\nto as node::Environment. Each node::Environment is associated with:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Exactly one v8::Isolate, i.e. one JS Engine instance,
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • Exactly one uv_loop_t, i.e. one event loop, and
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • A number of v8::Contexts, but exactly one main v8::Context.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • One node::IsolateData instance that contains information that could be\nshared by multiple node::Environments that use the same v8::Isolate.\nCurrently, no testing if performed for this scenario.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      In order to set up a v8::Isolate, an v8::ArrayBuffer::Allocator needs\nto be provided. One possible choice is the default Node.js allocator, which\ncan be created through node::ArrayBufferAllocator::Create(). Using the Node.js\nallocator allows minor performance optimizations when addons use the Node.js\nC++ Buffer API, and is required in order to track ArrayBuffer memory in\nprocess.memoryUsage().

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Additionally, each v8::Isolate that is used for a Node.js instance needs to\nbe registered and unregistered with the MultiIsolatePlatform instance, if one\nis being used, in order for the platform to know which event loop to use\nfor tasks scheduled by the v8::Isolate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The node::NewIsolate() helper function creates a v8::Isolate,\nsets it up with some Node.js-specific hooks (e.g. the Node.js error handler),\nand registers it with the platform automatically.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      int RunNodeInstance(MultiIsolatePlatform* platform,\n                    const std::vector<std::string>& args,\n                    const std::vector<std::string>& exec_args) {\n  int exit_code = 0;\n  // Set up a libuv event loop.\n  uv_loop_t loop;\n  int ret = uv_loop_init(&loop);\n  if (ret != 0) {\n    fprintf(stderr, \"%s: Failed to initialize loop: %s\\n\",\n            args[0].c_str(),\n            uv_err_name(ret));\n    return 1;\n  }\n\n  std::shared_ptr<ArrayBufferAllocator> allocator =\n      ArrayBufferAllocator::Create();\n\n  Isolate* isolate = NewIsolate(allocator, &loop, platform);\n  if (isolate == nullptr) {\n    fprintf(stderr, \"%s: Failed to initialize V8 Isolate\\n\", args[0].c_str());\n    return 1;\n  }\n\n  {\n    Locker locker(isolate);\n    Isolate::Scope isolate_scope(isolate);\n\n    // Create a node::IsolateData instance that will later be released using\n    // node::FreeIsolateData().\n    std::unique_ptr<IsolateData, decltype(&node::FreeIsolateData)> isolate_data(\n        node::CreateIsolateData(isolate, &loop, platform, allocator.get()),\n        node::FreeIsolateData);\n\n    // Set up a new v8::Context.\n    HandleScope handle_scope(isolate);\n    Local<Context> context = node::NewContext(isolate);\n    if (context.IsEmpty()) {\n      fprintf(stderr, \"%s: Failed to initialize V8 Context\\n\", args[0].c_str());\n      return 1;\n    }\n\n    // The v8::Context needs to be entered when node::CreateEnvironment() and\n    // node::LoadEnvironment() are being called.\n    Context::Scope context_scope(context);\n\n    // Create a node::Environment instance that will later be released using\n    // node::FreeEnvironment().\n    std::unique_ptr<Environment, decltype(&node::FreeEnvironment)> env(\n        node::CreateEnvironment(isolate_data.get(), context, args, exec_args),\n        node::FreeEnvironment);\n\n    // Set up the Node.js instance for execution, and run code inside of it.\n    // There is also a variant that takes a callback and provides it with\n    // the `require` and `process` objects, so that it can manually compile\n    // and run scripts as needed.\n    // The `require` function inside this script does *not* access the file\n    // system, and can only load built-in Node.js modules.\n    // `module.createRequire()` is being used to create one that is able to\n    // load files from the disk, and uses the standard CommonJS file loader\n    // instead of the internal-only `require` function.\n    MaybeLocal<Value> loadenv_ret = node::LoadEnvironment(\n        env.get(),\n        \"const publicRequire =\"\n        \"  require('module').createRequire(process.cwd() + '/');\"\n        \"globalThis.require = publicRequire;\"\n        \"require('vm').runInThisContext(process.argv[1]);\");\n\n    if (loadenv_ret.IsEmpty())  // There has been a JS exception.\n      return 1;\n\n    {\n      // SealHandleScope protects against handle leaks from callbacks.\n      SealHandleScope seal(isolate);\n      bool more;\n      do {\n        uv_run(&loop, UV_RUN_DEFAULT);\n\n        // V8 tasks on background threads may end up scheduling new tasks in the\n        // foreground, which in turn can keep the event loop going. For example,\n        // WebAssembly.compile() may do so.\n        platform->DrainTasks(isolate);\n\n        // If there are new tasks, continue.\n        more = uv_loop_alive(&loop);\n        if (more) continue;\n\n        // node::EmitBeforeExit() is used to emit the 'beforeExit' event on\n        // the `process` object.\n        node::EmitBeforeExit(env.get());\n\n        // 'beforeExit' can also schedule new work that keeps the event loop\n        // running.\n        more = uv_loop_alive(&loop);\n      } while (more == true);\n    }\n\n    // node::EmitExit() returns the current exit code.\n    exit_code = node::EmitExit(env.get());\n\n    // node::Stop() can be used to explicitly stop the event loop and keep\n    // further JavaScript from running. It can be called from any thread,\n    // and will act like worker.terminate() if called from another thread.\n    node::Stop(env.get());\n  }\n\n  // Unregister the Isolate with the platform and add a listener that is called\n  // when the Platform is done cleaning up any state it had associated with\n  // the Isolate.\n  bool platform_finished = false;\n  platform->AddIsolateFinishedCallback(isolate, [](void* data) {\n    *static_cast<bool*>(data) = true;\n  }, &platform_finished);\n  platform->UnregisterIsolate(isolate);\n  isolate->Dispose();\n\n  // Wait until the platform has cleaned up all relevant resources.\n  while (!platform_finished)\n    uv_run(&loop, UV_RUN_ONCE);\n  int err = uv_loop_close(&loop);\n  assert(err == 0);\n\n  return exit_code;\n}\n
                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Per-instance state" + } + ], + "type": "module", + "displayName": "C++ Embedder API" + } + ] +} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/embedding.md nodejs-mozilla-12.22.12/doc/api/embedding.md --- nodejs-mozilla-12.18.1/doc/api/embedding.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/embedding.md 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,227 @@ +# C++ Embedder API + + + +Node.js provides a number of C++ APIs that can be used to execute JavaScript +in a Node.js environment from other C++ software. + +The documentation for these APIs can be found in [src/node.h][] in the Node.js +source tree. In addition to the APIs exposed by Node.js, some required concepts +are provided by the V8 embedder API. + +Because using Node.js as an embedded library is different from writing code +that is executed by Node.js, breaking changes do not follow typical Node.js +[deprecation policy][] and may occur on each semver-major release without prior +warning. + +## Example embedding application + +The following sections will provide an overview over how to use these APIs +to create an application from scratch that will perform the equivalent of +`node -e `, i.e. that will take a piece of JavaScript and run it in +a Node.js-specific environment. + +The full code can be found [in the Node.js source tree][embedtest.cc]. + +### Setting up per-process state + +Node.js requires some per-process state management in order to run: + +* Arguments parsing for Node.js [CLI options][], +* V8 per-process requirements, such as a `v8::Platform` instance. + +The following example shows how these can be set up. Some class names are from +the `node` and `v8` C++ namespaces, respectively. + +```cpp +int main(int argc, char** argv) { + argv = uv_setup_args(argc, argv); + std::vector args(argv, argv + argc); + std::vector exec_args; + std::vector errors; + // Parse Node.js CLI options, and print any errors that have occurred while + // trying to parse them. + int exit_code = node::InitializeNodeWithArgs(&args, &exec_args, &errors); + for (const std::string& error : errors) + fprintf(stderr, "%s: %s\n", args[0].c_str(), error.c_str()); + if (exit_code != 0) { + return exit_code; + } + + // Create a v8::Platform instance. `MultiIsolatePlatform::Create()` is a way + // to create a v8::Platform instance that Node.js can use when creating + // Worker threads. When no `MultiIsolatePlatform` instance is present, + // Worker threads are disabled. + std::unique_ptr platform = + MultiIsolatePlatform::Create(4); + V8::InitializePlatform(platform.get()); + V8::Initialize(); + + // See below for the contents of this function. + int ret = RunNodeInstance(platform.get(), args, exec_args); + + V8::Dispose(); + V8::ShutdownPlatform(); + return ret; +} +``` + +### Per-instance state + +Node.js has a concept of a “Node.js instance”, that is commonly being referred +to as `node::Environment`. Each `node::Environment` is associated with: + +* Exactly one `v8::Isolate`, i.e. one JS Engine instance, +* Exactly one `uv_loop_t`, i.e. one event loop, and +* A number of `v8::Context`s, but exactly one main `v8::Context`. +* One `node::IsolateData` instance that contains information that could be + shared by multiple `node::Environment`s that use the same `v8::Isolate`. + Currently, no testing if performed for this scenario. + +In order to set up a `v8::Isolate`, an `v8::ArrayBuffer::Allocator` needs +to be provided. One possible choice is the default Node.js allocator, which +can be created through `node::ArrayBufferAllocator::Create()`. Using the Node.js +allocator allows minor performance optimizations when addons use the Node.js +C++ `Buffer` API, and is required in order to track `ArrayBuffer` memory in +[`process.memoryUsage()`][]. + +Additionally, each `v8::Isolate` that is used for a Node.js instance needs to +be registered and unregistered with the `MultiIsolatePlatform` instance, if one +is being used, in order for the platform to know which event loop to use +for tasks scheduled by the `v8::Isolate`. + +The `node::NewIsolate()` helper function creates a `v8::Isolate`, +sets it up with some Node.js-specific hooks (e.g. the Node.js error handler), +and registers it with the platform automatically. + +```cpp +int RunNodeInstance(MultiIsolatePlatform* platform, + const std::vector& args, + const std::vector& exec_args) { + int exit_code = 0; + // Set up a libuv event loop. + uv_loop_t loop; + int ret = uv_loop_init(&loop); + if (ret != 0) { + fprintf(stderr, "%s: Failed to initialize loop: %s\n", + args[0].c_str(), + uv_err_name(ret)); + return 1; + } + + std::shared_ptr allocator = + ArrayBufferAllocator::Create(); + + Isolate* isolate = NewIsolate(allocator, &loop, platform); + if (isolate == nullptr) { + fprintf(stderr, "%s: Failed to initialize V8 Isolate\n", args[0].c_str()); + return 1; + } + + { + Locker locker(isolate); + Isolate::Scope isolate_scope(isolate); + + // Create a node::IsolateData instance that will later be released using + // node::FreeIsolateData(). + std::unique_ptr isolate_data( + node::CreateIsolateData(isolate, &loop, platform, allocator.get()), + node::FreeIsolateData); + + // Set up a new v8::Context. + HandleScope handle_scope(isolate); + Local context = node::NewContext(isolate); + if (context.IsEmpty()) { + fprintf(stderr, "%s: Failed to initialize V8 Context\n", args[0].c_str()); + return 1; + } + + // The v8::Context needs to be entered when node::CreateEnvironment() and + // node::LoadEnvironment() are being called. + Context::Scope context_scope(context); + + // Create a node::Environment instance that will later be released using + // node::FreeEnvironment(). + std::unique_ptr env( + node::CreateEnvironment(isolate_data.get(), context, args, exec_args), + node::FreeEnvironment); + + // Set up the Node.js instance for execution, and run code inside of it. + // There is also a variant that takes a callback and provides it with + // the `require` and `process` objects, so that it can manually compile + // and run scripts as needed. + // The `require` function inside this script does *not* access the file + // system, and can only load built-in Node.js modules. + // `module.createRequire()` is being used to create one that is able to + // load files from the disk, and uses the standard CommonJS file loader + // instead of the internal-only `require` function. + MaybeLocal loadenv_ret = node::LoadEnvironment( + env.get(), + "const publicRequire =" + " require('module').createRequire(process.cwd() + '/');" + "globalThis.require = publicRequire;" + "require('vm').runInThisContext(process.argv[1]);"); + + if (loadenv_ret.IsEmpty()) // There has been a JS exception. + return 1; + + { + // SealHandleScope protects against handle leaks from callbacks. + SealHandleScope seal(isolate); + bool more; + do { + uv_run(&loop, UV_RUN_DEFAULT); + + // V8 tasks on background threads may end up scheduling new tasks in the + // foreground, which in turn can keep the event loop going. For example, + // WebAssembly.compile() may do so. + platform->DrainTasks(isolate); + + // If there are new tasks, continue. + more = uv_loop_alive(&loop); + if (more) continue; + + // node::EmitBeforeExit() is used to emit the 'beforeExit' event on + // the `process` object. + node::EmitBeforeExit(env.get()); + + // 'beforeExit' can also schedule new work that keeps the event loop + // running. + more = uv_loop_alive(&loop); + } while (more == true); + } + + // node::EmitExit() returns the current exit code. + exit_code = node::EmitExit(env.get()); + + // node::Stop() can be used to explicitly stop the event loop and keep + // further JavaScript from running. It can be called from any thread, + // and will act like worker.terminate() if called from another thread. + node::Stop(env.get()); + } + + // Unregister the Isolate with the platform and add a listener that is called + // when the Platform is done cleaning up any state it had associated with + // the Isolate. + bool platform_finished = false; + platform->AddIsolateFinishedCallback(isolate, [](void* data) { + *static_cast(data) = true; + }, &platform_finished); + platform->UnregisterIsolate(isolate); + isolate->Dispose(); + + // Wait until the platform has cleaned up all relevant resources. + while (!platform_finished) + uv_run(&loop, UV_RUN_ONCE); + int err = uv_loop_close(&loop); + assert(err == 0); + + return exit_code; +} +``` + +[`process.memoryUsage()`]: process.html#process_process_memoryusage +[CLI options]: cli.html +[deprecation policy]: deprecations.html +[embedtest.cc]: https://github.com/nodejs/node/blob/master/test/embedding/embedtest.cc +[src/node.h]: https://github.com/nodejs/node/blob/master/src/node.h diff -Nru nodejs-mozilla-12.18.1/doc/api/errors.html nodejs-mozilla-12.22.12/doc/api/errors.html --- nodejs-mozilla-12.18.1/doc/api/errors.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/errors.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Errors | Node.js v12.18.1 Documentation + + Errors | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                      • - Index + Index
                                                                                                                                                                                                                                                      • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                      • View another version -
                                                                                                                                                                                                                                                        1. 14.x
                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                          1. 17.x
                                                                                                                                                                                                                                                          2. +
                                                                                                                                                                                                                                                          3. 16.x LTS
                                                                                                                                                                                                                                                          4. +
                                                                                                                                                                                                                                                          5. 15.x
                                                                                                                                                                                                                                                          6. +
                                                                                                                                                                                                                                                          7. 14.x LTS
                                                                                                                                                                                                                                                          8. 13.x
                                                                                                                                                                                                                                                          9. 12.x LTS
                                                                                                                                                                                                                                                          10. 11.x
                                                                                                                                                                                                                                                          11. -
                                                                                                                                                                                                                                                          12. 10.x LTS
                                                                                                                                                                                                                                                          13. +
                                                                                                                                                                                                                                                          14. 10.x
                                                                                                                                                                                                                                                          15. 9.x
                                                                                                                                                                                                                                                          16. 8.x
                                                                                                                                                                                                                                                          17. 7.x
                                                                                                                                                                                                                                                          18. @@ -119,17 +126,14 @@

                                                                                                                                                                                                                                                            Table of Contents

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                            -fs.readFile('a file that does not exist', (err, data) => {
                                                                                                                                                                                                                                                            -  if (err) {
                                                                                                                                                                                                                                                            -    console.error('There was an error reading the file!', err);
                                                                                                                                                                                                                                                            -    return;
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                            +fs.readFile('a file that does not exist', (err, data) => {
                                                                                                                                                                                                                                                            +  if (err) {
                                                                                                                                                                                                                                                            +    console.error('There was an error reading the file!', err);
                                                                                                                                                                                                                                                            +    return;
                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                            -  // Otherwise handle the data
                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            + // Otherwise handle the data +});
                                                                                                                                                                                                                                                            • When an asynchronous method is called on an object that is an EventEmitter, errors can be routed to that object's 'error' event.

                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              const net = require('net');
                                                                                                                                                                                                                                                              -const connection = net.connect('localhost');
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              const net = require('net');
                                                                                                                                                                                                                                                              +const connection = net.connect('localhost');
                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                              -// Adding an 'error' event handler to a stream:
                                                                                                                                                                                                                                                              -connection.on('error', (err) => {
                                                                                                                                                                                                                                                              -  // If the connection is reset by the server, or if it can't
                                                                                                                                                                                                                                                              -  // connect at all, or on any sort of error encountered by
                                                                                                                                                                                                                                                              -  // the connection, the error will be sent here.
                                                                                                                                                                                                                                                              -  console.error(err);
                                                                                                                                                                                                                                                              +// Adding an 'error' event handler to a stream:
                                                                                                                                                                                                                                                              +connection.on('error', (err) => {
                                                                                                                                                                                                                                                              +  // If the connection is reset by the server, or if it can't
                                                                                                                                                                                                                                                              +  // connect at all, or on any sort of error encountered by
                                                                                                                                                                                                                                                              +  // the connection, the error will be sent here.
                                                                                                                                                                                                                                                              +  console.error(err);
                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                              -connection.pipe(process.stdout);
                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              +connection.pipe(process.stdout);
                                                                                                                                                                                                                                                            • A handful of typically asynchronous methods in the Node.js API may still @@ -576,15 +563,14 @@ uncaught exception and crash unless either: The domain module is used appropriately or a handler has been registered for the 'uncaughtException' event.

                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              const EventEmitter = require('events');
                                                                                                                                                                                                                                                              -const ee = new EventEmitter();
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              const EventEmitter = require('events');
                                                                                                                                                                                                                                                              +const ee = new EventEmitter();
                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                              -setImmediate(() => {
                                                                                                                                                                                                                                                              -  // This will crash the process because no 'error' event
                                                                                                                                                                                                                                                              -  // handler has been added.
                                                                                                                                                                                                                                                              -  ee.emit('error', new Error('This will crash'));
                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              +setImmediate(() => { + // This will crash the process because no 'error' event + // handler has been added. + ee.emit('error', new Error('This will crash')); +});

                                                                                                                                                                                                                                                              Errors generated in this way cannot be intercepted using try…catch as they are thrown after the calling code has already exited.

                                                                                                                                                                                                                                                              Developers must refer to the documentation for each method to determine @@ -597,37 +583,35 @@ completes or an error is raised, the callback function is called with the Error object (if any) passed as the first argument. If no error was raised, the first argument will be passed as null.

                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              const fs = require('fs');
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              const fs = require('fs');
                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                              -function errorFirstCallback(err, data) {
                                                                                                                                                                                                                                                              -  if (err) {
                                                                                                                                                                                                                                                              -    console.error('There was an error', err);
                                                                                                                                                                                                                                                              -    return;
                                                                                                                                                                                                                                                              +function errorFirstCallback(err, data) {
                                                                                                                                                                                                                                                              +  if (err) {
                                                                                                                                                                                                                                                              +    console.error('There was an error', err);
                                                                                                                                                                                                                                                              +    return;
                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                              -  console.log(data);
                                                                                                                                                                                                                                                              +  console.log(data);
                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                              -fs.readFile('/some/file/that/does-not-exist', errorFirstCallback);
                                                                                                                                                                                                                                                              -fs.readFile('/some/file/that/does-exist', errorFirstCallback);
                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              +fs.readFile('/some/file/that/does-not-exist', errorFirstCallback); +fs.readFile('/some/file/that/does-exist', errorFirstCallback);

                                                                                                                                                                                                                                                              The JavaScript try…catch mechanism cannot be used to intercept errors generated by asynchronous APIs. A common mistake for beginners is to try to use throw inside an error-first callback:

                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              // THIS WILL NOT WORK:
                                                                                                                                                                                                                                                              -const fs = require('fs');
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              // THIS WILL NOT WORK:
                                                                                                                                                                                                                                                              +const fs = require('fs');
                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                              -try {
                                                                                                                                                                                                                                                              -  fs.readFile('/some/file/that/does-not-exist', (err, data) => {
                                                                                                                                                                                                                                                              -    // Mistaken assumption: throwing here...
                                                                                                                                                                                                                                                              -    if (err) {
                                                                                                                                                                                                                                                              -      throw err;
                                                                                                                                                                                                                                                              +try {
                                                                                                                                                                                                                                                              +  fs.readFile('/some/file/that/does-not-exist', (err, data) => {
                                                                                                                                                                                                                                                              +    // Mistaken assumption: throwing here...
                                                                                                                                                                                                                                                              +    if (err) {
                                                                                                                                                                                                                                                              +      throw err;
                                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                              -} catch (err) {
                                                                                                                                                                                                                                                              -  // This will not catch the throw!
                                                                                                                                                                                                                                                              -  console.error(err);
                                                                                                                                                                                                                                                              -}
                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                              +} catch (err) { + // This will not catch the throw! + console.error(err); +}

                                                                                                                                                                                                                                                              This will not work because the callback function passed to fs.readFile() is called asynchronously. By the time the callback has been called, the surrounding code, including the try…catch block, will have already exited. @@ -640,7 +624,7 @@ circumstance of why the error occurred. Error objects capture a "stack trace" detailing the point in the code at which the Error was instantiated, and may provide a text description of the error.

                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                              All errors generated by Node.js, including all System and JavaScript errors, +

                                                                                                                                                                                                                                                              All errors generated by Node.js, including all system and JavaScript errors, will either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                              new Error(message)#

                                                                                                                                                                                                                                                                @@ -661,26 +645,24 @@

                                                                                                                                                                                                                                                                Creates a .stack property on targetObject, which when accessed returns a string representing the location in the code at which Error.captureStackTrace() was called.

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                const myObject = {};
                                                                                                                                                                                                                                                                -Error.captureStackTrace(myObject);
                                                                                                                                                                                                                                                                -myObject.stack;  // Similar to `new Error().stack`
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                const myObject = {};
                                                                                                                                                                                                                                                                +Error.captureStackTrace(myObject);
                                                                                                                                                                                                                                                                +myObject.stack;  // Similar to `new Error().stack`

                                                                                                                                                                                                                                                                The first line of the trace will be prefixed with ${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                                The optional constructorOpt argument accepts a function. If given, all frames above constructorOpt, including constructorOpt, will be omitted from the generated stack trace.

                                                                                                                                                                                                                                                                The constructorOpt argument is useful for hiding implementation -details of error generation from an end user. For instance:

                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                function MyError() {
                                                                                                                                                                                                                                                                -  Error.captureStackTrace(this, MyError);
                                                                                                                                                                                                                                                                +details of error generation from the user. For instance:

                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                function MyError() {
                                                                                                                                                                                                                                                                +  Error.captureStackTrace(this, MyError);
                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                -// Without passing MyError to captureStackTrace, the MyError
                                                                                                                                                                                                                                                                -// frame would show up in the .stack property. By passing
                                                                                                                                                                                                                                                                -// the constructor, we omit that frame, and retain all frames below it.
                                                                                                                                                                                                                                                                -new MyError().stack;
                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                +// Without passing MyError to captureStackTrace, the MyError +// frame would show up in the .stack property. By passing +// the constructor, we omit that frame, and retain all frames below it. +new MyError().stack;

                                                                                                                                                                                                                                                                Error.stackTraceLimit#

                                                                                                                                                                                                                                                                • <number>
                                                                                                                                                                                                                                                                • @@ -699,7 +681,7 @@

                                                                                                                                                                                                                                                                  The error.code property is a string label that identifies the kind of error. error.code is the most stable way to identify an error. It will only change between major versions of Node.js. In contrast, error.message strings may -change between any versions of Node.js. See Node.js Error Codes for details +change between any versions of Node.js. See Node.js error codes for details about specific codes.

                                                                                                                                                                                                                                                                  error.message#

                                                                                                                                                                                                                                                                    @@ -711,22 +693,20 @@ this property after the Error object is created may not change the first line of the stack trace (for example, when error.stack is read before this property is changed).

                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    const err = new Error('The message');
                                                                                                                                                                                                                                                                    -console.error(err.message);
                                                                                                                                                                                                                                                                    -// Prints: The message
                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                    const err = new Error('The message');
                                                                                                                                                                                                                                                                    +console.error(err.message);
                                                                                                                                                                                                                                                                    +// Prints: The message

                                                                                                                                                                                                                                                                    error.stack#

                                                                                                                                                                                                                                                                    The error.stack property is a string describing the point in the code at which the Error was instantiated.

                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    Error: Things keep happening!
                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                    Error: Things keep happening!
                                                                                                                                                                                                                                                                        at /home/gbusey/file.js:525:2
                                                                                                                                                                                                                                                                        at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)
                                                                                                                                                                                                                                                                        at Actor.<anonymous> (/home/gbusey/actors.js:400:8)
                                                                                                                                                                                                                                                                    -   at increaseSynergy (/home/gbusey/actors.js:701:6)
                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    + at increaseSynergy (/home/gbusey/actors.js:701:6)

                                                                                                                                                                                                                                                                    The first line is formatted as <error class name>: <error message>, and is followed by a series of stack frames (each line beginning with "at "). Each frame describes a call site within the code that lead to the error being @@ -740,32 +720,31 @@ synchronously passes through a C++ addon function called cheetahify which itself calls a JavaScript function, the frame representing the cheetahify call will not be present in the stack traces:

                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    const cheetahify = require('./native-binding.node');
                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                    const cheetahify = require('./native-binding.node');
                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                    -function makeFaster() {
                                                                                                                                                                                                                                                                    -  // `cheetahify()` *synchronously* calls speedy.
                                                                                                                                                                                                                                                                    -  cheetahify(function speedy() {
                                                                                                                                                                                                                                                                    -    throw new Error('oh no!');
                                                                                                                                                                                                                                                                    +function makeFaster() {
                                                                                                                                                                                                                                                                    +  // `cheetahify()` *synchronously* calls speedy.
                                                                                                                                                                                                                                                                    +  cheetahify(function speedy() {
                                                                                                                                                                                                                                                                    +    throw new Error('oh no!');
                                                                                                                                                                                                                                                                       });
                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                     makeFaster();
                                                                                                                                                                                                                                                                    -// will throw:
                                                                                                                                                                                                                                                                    -//   /home/gbusey/file.js:6
                                                                                                                                                                                                                                                                    -//       throw new Error('oh no!');
                                                                                                                                                                                                                                                                    -//           ^
                                                                                                                                                                                                                                                                    -//   Error: oh no!
                                                                                                                                                                                                                                                                    -//       at speedy (/home/gbusey/file.js:6:11)
                                                                                                                                                                                                                                                                    -//       at makeFaster (/home/gbusey/file.js:5:3)
                                                                                                                                                                                                                                                                    -//       at Object.<anonymous> (/home/gbusey/file.js:10:1)
                                                                                                                                                                                                                                                                    -//       at Module._compile (module.js:456:26)
                                                                                                                                                                                                                                                                    -//       at Object.Module._extensions..js (module.js:474:10)
                                                                                                                                                                                                                                                                    -//       at Module.load (module.js:356:32)
                                                                                                                                                                                                                                                                    -//       at Function.Module._load (module.js:312:12)
                                                                                                                                                                                                                                                                    -//       at Function.Module.runMain (module.js:497:10)
                                                                                                                                                                                                                                                                    -//       at startup (node.js:119:16)
                                                                                                                                                                                                                                                                    -//       at node.js:906:3
                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                    +// will throw: +// /home/gbusey/file.js:6 +// throw new Error('oh no!'); +// ^ +// Error: oh no! +// at speedy (/home/gbusey/file.js:6:11) +// at makeFaster (/home/gbusey/file.js:5:3) +// at Object.<anonymous> (/home/gbusey/file.js:10:1) +// at Module._compile (module.js:456:26) +// at Object.Module._extensions..js (module.js:474:10) +// at Module.load (module.js:356:32) +// at Function.Module._load (module.js:312:12) +// at Function.Module.runMain (module.js:497:10) +// at startup (node.js:119:16) +// at node.js:906:3

                                                                                                                                                                                                                                                                    The location information will be one of:

                                                                                                                                                                                                                                                                    • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                                    • @@ -792,9 +771,8 @@

                                                                                                                                                                                                                                                                      Indicates that a provided argument was not within the set or range of acceptable values for a function; whether that is a numeric range, or outside the set of options for a given function parameter.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      require('net').connect(-1);
                                                                                                                                                                                                                                                                      -// Throws "RangeError: "port" option should be >= 0 and < 65536: -1"
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      require('net').connect(-1);
                                                                                                                                                                                                                                                                      +// Throws "RangeError: "port" option should be >= 0 and < 65536: -1"

                                                                                                                                                                                                                                                                      Node.js will generate and throw RangeError instances immediately as a form of argument validation.

                                                                                                                                                                                                                                                                      Class: ReferenceError#

                                                                                                                                                                                                                                                                      @@ -807,11 +785,9 @@

                                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8 will do so.

                                                                                                                                                                                                                                                                      doesNotExist;
                                                                                                                                                                                                                                                                      -// Throws ReferenceError, doesNotExist is not a variable in this program.
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +// Throws ReferenceError, doesNotExist is not a variable in this program.

                                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code, -ReferenceError instances should always be considered a bug in the code -or its dependencies.

                                                                                                                                                                                                                                                                      +ReferenceError instances indicate a bug in the code or its dependencies.

                                                                                                                                                                                                                                                                      Class: SyntaxError#

                                                                                                                                                                                                                                                                      • Extends: <errors.Error>
                                                                                                                                                                                                                                                                      • @@ -820,12 +796,11 @@ generated and propagated as a result of code evaluation. Code evaluation may happen as a result of eval, Function, require, or vm. These errors are almost always indicative of a broken program.

                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                        try {
                                                                                                                                                                                                                                                                        -  require('vm').runInThisContext('binary ! isNotOk');
                                                                                                                                                                                                                                                                        -} catch (err) {
                                                                                                                                                                                                                                                                        -  // 'err' will be a SyntaxError.
                                                                                                                                                                                                                                                                        -}
                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                        try {
                                                                                                                                                                                                                                                                        +  require('vm').runInThisContext('binary ! isNotOk');
                                                                                                                                                                                                                                                                        +} catch (err) {
                                                                                                                                                                                                                                                                        +  // 'err' will be a SyntaxError.
                                                                                                                                                                                                                                                                        +}

                                                                                                                                                                                                                                                                        SyntaxError instances are unrecoverable in the context that created them – they may only be caught by other contexts.

                                                                                                                                                                                                                                                                        Class: SystemError#

                                                                                                                                                                                                                                                                        @@ -872,7 +847,7 @@

                                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a negative value which corresponds to the error code defined in -libuv Error handling. See the libuv errno.h header file +libuv Error handling. See the libuv errno.h header file (deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case of a string, it is the same as error.code.

                                                                                                                                                                                                                                                                      error.info#

                                                                                                                                                                                                                                                                      @@ -899,10 +874,10 @@ -

                                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Common System Errors#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Common system errors#

                                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js -program. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                                      +program. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                                      • EACCES (Permission denied): An attempt was made to access a file in a way @@ -980,14 +955,12 @@

                                                                                                                                                                                                                                                                      • Extends <errors.Error>

                                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example, -passing a function to a parameter which expects a string would be considered -a TypeError.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      require('url').parse(() => { });
                                                                                                                                                                                                                                                                      -// Throws TypeError, since it expected a string.
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +passing a function to a parameter which expects a string would be a TypeError.

                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      require('url').parse(() => { });
                                                                                                                                                                                                                                                                      +// Throws TypeError, since it expected a string.

                                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form of argument validation.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Exceptions vs. Errors#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Exceptions vs. errors#

                                                                                                                                                                                                                                                                      A JavaScript exception is a value that is thrown as a result of an invalid operation or as the target of a throw statement. While it is not required @@ -997,7 +970,7 @@

                                                                                                                                                                                                                                                                      Some exceptions are unrecoverable at the JavaScript layer. Such exceptions will always cause the Node.js process to crash. Examples include assert() checks or abort() calls in the C++ layer.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      OpenSSL Errors#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      OpenSSL errors#

                                                                                                                                                                                                                                                                      Errors originating in crypto or tls are of class Error, and in addition to the standard .code and .message properties, may have some additional OpenSSL-specific properties.

                                                                                                                                                                                                                                                                      @@ -1011,7 +984,7 @@

                                                                                                                                                                                                                                                                      error.reason#

                                                                                                                                                                                                                                                                      A human-readable string describing the reason for the error.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Node.js Error Codes#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Node.js error codes#

                                                                                                                                                                                                                                                                      ERR_AMBIGUOUS_ARGUMENT#

                                                                                                                                                                                                                                                                      A function argument is being used in a way that suggests that the function @@ -1406,6 +1379,11 @@

                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                      The --input-type flag was used to attempt to execute a file. This flag can only be used with input via --eval, --print or STDIN.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      ERR_INSPECTOR_ALREADY_ACTIVATED#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      While using the inspector module, an attempt was made to activate the +inspector when it already started to listen on a port. Use inspector.close() +before activating it on a different address.

                                                                                                                                                                                                                                                                      ERR_INSPECTOR_ALREADY_CONNECTED#

                                                                                                                                                                                                                                                                      While using the inspector module, an attempt was made to connect when the @@ -1498,11 +1476,11 @@

                                                                                                                                                                                                                                                                      An invalid or unknown file encoding was passed.

                                                                                                                                                                                                                                                                      ERR_INVALID_PACKAGE_CONFIG#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      An invalid package.json file was found which failed parsing.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      An invalid package.json file was found which failed parsing.

                                                                                                                                                                                                                                                                      ERR_INVALID_PACKAGE_TARGET#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      The package.json exports field contains an invalid target mapping value -for the attempted module resolution.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      The package.json "exports" field contains an invalid target mapping +value for the attempted module resolution.

                                                                                                                                                                                                                                                                      ERR_INVALID_PERFORMANCE_MARK#

                                                                                                                                                                                                                                                                      While using the Performance Timing API (perf_hooks), a performance mark is @@ -1538,19 +1516,18 @@

                                                                                                                                                                                                                                                                      ERR_INVALID_THIS#

                                                                                                                                                                                                                                                                      A Node.js API function was called with an incompatible this value.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      const urlSearchParams = new URLSearchParams('foo=bar&baz=new');
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      const urlSearchParams = new URLSearchParams('foo=bar&baz=new');
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -const buf = Buffer.alloc(1);
                                                                                                                                                                                                                                                                      -urlSearchParams.has.call(buf, 'foo');
                                                                                                                                                                                                                                                                      -// Throws a TypeError with code 'ERR_INVALID_THIS'
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +const buf = Buffer.alloc(1); +urlSearchParams.has.call(buf, 'foo'); +// Throws a TypeError with code 'ERR_INVALID_THIS'

                                                                                                                                                                                                                                                                      ERR_INVALID_TRANSFER_OBJECT#

                                                                                                                                                                                                                                                                      An invalid transfer object was passed to postMessage().

                                                                                                                                                                                                                                                                      ERR_INVALID_TUPLE#

                                                                                                                                                                                                                                                                      An element in the iterable provided to the WHATWG -URLSearchParams constructor did not +URLSearchParams constructor did not represent a [name, value] tuple – that is, if an element is not iterable, or does not consist of exactly two elements.

                                                                                                                                                                                                                                                                      @@ -1559,7 +1536,7 @@

                                                                                                                                                                                                                                                                      ERR_INVALID_URL#

                                                                                                                                                                                                                                                                      An invalid URL was passed to the WHATWG -URL constructor to be parsed. The thrown error object +URL constructor to be parsed. The thrown error object typically has an additional property 'input' that contains the URL that failed to parse.

                                                                                                                                                                                                                                                                      @@ -1623,6 +1600,15 @@

                                                                                                                                                                                                                                                                      ERR_MEMORY_ALLOCATION_FAILED#

                                                                                                                                                                                                                                                                      An attempt was made to allocate memory (usually in the C++ layer) but it failed.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE#

                                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                                      A message posted to a MessagePort could not be deserialized in the target +vm Context. Not all Node.js objects can be successfully instantiated in +any context at this time, and attempting to transfer them using postMessage() +can fail on the receiving side in that case.

                                                                                                                                                                                                                                                                      ERR_METHOD_NOT_IMPLEMENTED#

                                                                                                                                                                                                                                                                      A method is required but not implemented.

                                                                                                                                                                                                                                                                      @@ -1644,8 +1630,9 @@ is thrown if a required option is missing.

                                                                                                                                                                                                                                                                      ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      A MessagePort was found in the object passed to a postMessage() call, -but not provided in the transferList for that call.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      An object that needs to be explicitly listed in the transferList argument +was found in the object passed to a postMessage() call, but not provided in +the transferList for that call. Usually, this is a MessagePort.

                                                                                                                                                                                                                                                                      ERR_MISSING_PASSPHRASE#

                                                                                                                                                                                                                                                                      An attempt was made to read an encrypted key without specifying a passphrase.

                                                                                                                                                                                                                                                                      @@ -1709,9 +1696,13 @@

                                                                                                                                                                                                                                                                      ERR_OUT_OF_RANGE#

                                                                                                                                                                                                                                                                      A given value is out of the accepted range.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      ERR_PACKAGE_IMPORT_NOT_DEFINED#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      The package.json "imports" field does not define the given internal +package specifier mapping.

                                                                                                                                                                                                                                                                      ERR_PACKAGE_PATH_NOT_EXPORTED#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      The package.json exports field does not export the requested subpath. +

                                                                                                                                                                                                                                                                      The package.json "exports" field does not export the requested subpath. Because exports are encapsulated, private internal modules that are not exported cannot be imported through the package resolution, unless using an absolute URL.

                                                                                                                                                                                                                                                                      @@ -1726,8 +1717,8 @@

                                                                                                                                                                                                                                                                      An attempt was made to require() an ES Module.

                                                                                                                                                                                                                                                                      ERR_SCRIPT_EXECUTION_INTERRUPTED#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Script execution was interrupted by SIGINT (For example, when Ctrl+C was -pressed).

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Script execution was interrupted by SIGINT (For example, +Ctrl+C was pressed.)

                                                                                                                                                                                                                                                                      ERR_SCRIPT_EXECUTION_TIMEOUT#

                                                                                                                                                                                                                                                                      Script execution timed out, possibly due to bugs in the script being executed.

                                                                                                                                                                                                                                                                      @@ -1806,11 +1797,10 @@

                                                                                                                                                                                                                                                                      ERR_STREAM_WRAP#

                                                                                                                                                                                                                                                                      Prevents an abort if a string decoder was set on the Socket or if the decoder is in objectMode.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      const Socket = require('net').Socket;
                                                                                                                                                                                                                                                                      -const instance = new Socket();
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      const Socket = require('net').Socket;
                                                                                                                                                                                                                                                                      +const instance = new Socket();
                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                      -instance.setEncoding('utf8');
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +instance.setEncoding('utf8');

                                                                                                                                                                                                                                                                      ERR_STREAM_WRITE_AFTER_END#

                                                                                                                                                                                                                                                                      An attempt was made to call stream.write() after stream.end() has been @@ -1828,6 +1818,12 @@

                                                                                                                                                                                                                                                                      An unspecified or non-specific system error has occurred within the Node.js process. The error object will have an err.info object property with additional details.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      ERR_TLS_CERT_ALTNAME_FORMAT#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      This error is thrown by checkServerIdentity if a user-supplied +subjectaltname property violates encoding rules. Certificate objects produced +by Node.js itself always comply with encoding rules and will never cause +this error.

                                                                                                                                                                                                                                                                      ERR_TLS_CERT_ALTNAME_INVALID#

                                                                                                                                                                                                                                                                      While using TLS, the host name/IP of the peer did not match any of the @@ -1882,7 +1878,7 @@

                                                                                                                                                                                                                                                                      An attempt was made to issue Server Name Indication from a TLS server-side socket, which is only valid from a client.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED##

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED#

                                                                                                                                                                                                                                                                      Failed to set PSK identity hint. Hint may be too long.

                                                                                                                                                                                                                                                                      ERR_TRACE_EVENTS_CATEGORY_REQUIRED#

                                                                                                                                                                                                                                                                      @@ -1908,6 +1904,10 @@

                                                                                                                                                                                                                                                                      ERR_TTY_INIT_FAILED#

                                                                                                                                                                                                                                                                      The initialization of a TTY failed due to a system error.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      ERR_UNAVAILABLE_DURING_EXIT#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Function was called within a process.on('exit') handler that shouldn't be +called within process.on('exit') handler.

                                                                                                                                                                                                                                                                      ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET#

                                                                                                                                                                                                                                                                      process.setUncaughtExceptionCaptureCallback() was called twice, @@ -1947,20 +1947,16 @@ signal (such as subprocess.kill()).

                                                                                                                                                                                                                                                                      ERR_UNSUPPORTED_DIR_IMPORT#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      import a directory URL is unsupported. Instead, you can -self-reference a package using its name and define a custom subpath in -the "exports" field of the package.json file.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      import a directory URL is unsupported. Instead, +self-reference a package using its name and define a custom subpath in +the "exports" field of the package.json file.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      import './'; // unsupported
                                                                                                                                                                                                                                                                      -import './index.js'; // supported
                                                                                                                                                                                                                                                                      -import 'package-name'; // supported
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                      import './'; // unsupported
                                                                                                                                                                                                                                                                      +import './index.js'; // supported
                                                                                                                                                                                                                                                                      +import 'package-name'; // supported

                                                                                                                                                                                                                                                                      ERR_UNSUPPORTED_ESM_URL_SCHEME#

                                                                                                                                                                                                                                                                      import with URL schemes other than file and data is unsupported.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_V8BREAKITERATOR#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      The V8 BreakIterator API was used but the full ICU data set is not installed.

                                                                                                                                                                                                                                                                      ERR_VALID_PERFORMANCE_ENTRY_TYPE#

                                                                                                                                                                                                                                                                      While using the Performance Timing API (perf_hooks), no valid performance @@ -2048,6 +2044,13 @@ malconfigured clients, if more than 8KB of HTTP header data is received then HTTP parsing will abort without a request or response object being created, and an Error with this code will be emitted.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      HPE_UNEXPECTED_CONTENT_LENGTH#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Server is sending both a Content-Length header and Transfer-Encoding: chunked.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Transfer-Encoding: chunked allows the server to maintain an HTTP persistent +connection for dynamically generated content. +In this case, the Content-Length HTTP header cannot be used.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Use Content-Length or Transfer-Encoding: chunked.

                                                                                                                                                                                                                                                                      MODULE_NOT_FOUND#

                                                                                                                                                                                                                                                                      A module file could not be resolved while attempting a require() or import operation.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Legacy Node.js Error Codes#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      Legacy Node.js error codes#

                                                                                                                                                                                                                                                                      Stability: 0 - Deprecated. These error codes are either inconsistent, or have been removed.

                                                                                                                                                                                                                                                                      @@ -2225,6 +2228,9 @@

                                                                                                                                                                                                                                                                      An attempt was made to launch a Node.js process with an unknown stdout or stderr file type. This error is usually an indication of a bug within Node.js itself, although it is possible for user code to trigger it.

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      ERR_V8BREAKITERATOR#

                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                      The V8 BreakIterator API was used but the full ICU data set is not installed.

                                                                                                                                                                                                                                                                      ERR_VALUE_OUT_OF_RANGE#

                                                                                                                                                                                                                                                                      Used when an attempt is made to use a zlib object after it has already been closed.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Other error codes#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      These errors have never been released, but had been present on master between -releases.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_ENTRY_TYPE_MISMATCH#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      The --entry-type=commonjs flag was used to attempt to execute an .mjs file -or a .js file where the nearest parent package.json contains -"type": "module"; or -the --entry-type=module flag was used to attempt to execute a .cjs file or -a .js file where the nearest parent package.json either lacks a "type" -field or contains "type": "commonjs".

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_FS_WATCHER_ALREADY_STARTED#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      An attempt was made to start a watcher returned by fs.watch() that has -already been started.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_FS_WATCHER_NOT_STARTED#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      An attempt was made to initiate operations on a watcher returned by -fs.watch() that has not yet been started.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_HTTP2_ALREADY_SHUTDOWN#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Occurs with multiple attempts to shutdown an HTTP/2 session.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_HTTP2_ERROR#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      A non-specific HTTP/2 error has occurred.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_INVALID_REPL_HISTORY#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Used in the repl in case the old history file is used and an error occurred -while trying to read and parse it.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_INVALID_REPL_TYPE#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      The --entry-type=... flag is not compatible with the Node.js REPL.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Used when an ES Module loader hook specifies format: 'dynamic' but does -not provide a dynamicInstantiate hook.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_STREAM_HAS_STRINGDECODER#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      Used to prevent an abort if a string decoder was set on the Socket.

                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      const Socket = require('net').Socket;
                                                                                                                                                                                                                                                                      -const instance = new Socket();
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      -instance.setEncoding('utf8');
                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_STRING_TOO_LARGE#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      An attempt has been made to create a string larger than the maximum allowed -size.

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      ERR_TTY_WRITABLE_NOT_READABLE#

                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                      This Error is thrown when a read is attempted on a TTY WriteStream, -such as process.stdout.on('data').

                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/errors.json nodejs-mozilla-12.22.12/doc/api/errors.json --- nodejs-mozilla-12.18.1/doc/api/errors.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/errors.json 2022-04-05 07:17:04.000000000 +0000 @@ -7,7 +7,7 @@ "textRaw": "Class: `Error`", "type": "class", "name": "Error", - "desc": "

                                                                                                                                                                                                                                                      A generic JavaScript <Error> object that does not denote any specific\ncircumstance of why the error occurred. Error objects capture a \"stack trace\"\ndetailing the point in the code at which the Error was instantiated, and may\nprovide a text description of the error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All errors generated by Node.js, including all System and JavaScript errors,\nwill either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A generic JavaScript <Error> object that does not denote any specific\ncircumstance of why the error occurred. Error objects capture a \"stack trace\"\ndetailing the point in the code at which the Error was instantiated, and may\nprovide a text description of the error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All errors generated by Node.js, including all system and JavaScript errors,\nwill either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`Error.captureStackTrace(targetObject[, constructorOpt])`", @@ -29,7 +29,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Creates a .stack property on targetObject, which when accessed returns\na string representing the location in the code at which\nError.captureStackTrace() was called.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myObject = {};\nError.captureStackTrace(myObject);\nmyObject.stack;  // Similar to `new Error().stack`\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line of the trace will be prefixed with\n${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional constructorOpt argument accepts a function. If given, all frames\nabove constructorOpt, including constructorOpt, will be omitted from the\ngenerated stack trace.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The constructorOpt argument is useful for hiding implementation\ndetails of error generation from an end user. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyError() {\n  Error.captureStackTrace(this, MyError);\n}\n\n// Without passing MyError to captureStackTrace, the MyError\n// frame would show up in the .stack property. By passing\n// the constructor, we omit that frame, and retain all frames below it.\nnew MyError().stack;\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Creates a .stack property on targetObject, which when accessed returns\na string representing the location in the code at which\nError.captureStackTrace() was called.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myObject = {};\nError.captureStackTrace(myObject);\nmyObject.stack;  // Similar to `new Error().stack`\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line of the trace will be prefixed with\n${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional constructorOpt argument accepts a function. If given, all frames\nabove constructorOpt, including constructorOpt, will be omitted from the\ngenerated stack trace.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The constructorOpt argument is useful for hiding implementation\ndetails of error generation from the user. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyError() {\n  Error.captureStackTrace(this, MyError);\n}\n\n// Without passing MyError to captureStackTrace, the MyError\n// frame would show up in the .stack property. By passing\n// the constructor, we omit that frame, and retain all frames below it.\nnew MyError().stack;\n
                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -43,7 +43,7 @@ "textRaw": "`code` {string}", "type": "string", "name": "code", - "desc": "

                                                                                                                                                                                                                                                      The error.code property is a string label that identifies the kind of error.\nerror.code is the most stable way to identify an error. It will only change\nbetween major versions of Node.js. In contrast, error.message strings may\nchange between any versions of Node.js. See Node.js Error Codes for details\nabout specific codes.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.code property is a string label that identifies the kind of error.\nerror.code is the most stable way to identify an error. It will only change\nbetween major versions of Node.js. In contrast, error.message strings may\nchange between any versions of Node.js. See Node.js error codes for details\nabout specific codes.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`message` {string}", @@ -55,7 +55,7 @@ "textRaw": "`stack` {string}", "type": "string", "name": "stack", - "desc": "

                                                                                                                                                                                                                                                      The error.stack property is a string describing the point in the code at which\nthe Error was instantiated.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Things keep happening!\n   at /home/gbusey/file.js:525:2\n   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)\n   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)\n   at increaseSynergy (/home/gbusey/actors.js:701:6)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line is formatted as <error class name>: <error message>, and\nis followed by a series of stack frames (each line beginning with \"at \").\nEach frame describes a call site within the code that lead to the error being\ngenerated. V8 attempts to display a name for each function (by variable name,\nfunction name, or object method name), but occasionally it will not be able to\nfind a suitable name. If V8 cannot determine a name for the function, only\nlocation information will be displayed for that frame. Otherwise, the\ndetermined function name will be displayed with location information appended\nin parentheses.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Frames are only generated for JavaScript functions. If, for example, execution\nsynchronously passes through a C++ addon function called cheetahify which\nitself calls a JavaScript function, the frame representing the cheetahify call\nwill not be present in the stack traces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cheetahify = require('./native-binding.node');\n\nfunction makeFaster() {\n  // `cheetahify()` *synchronously* calls speedy.\n  cheetahify(function speedy() {\n    throw new Error('oh no!');\n  });\n}\n\nmakeFaster();\n// will throw:\n//   /home/gbusey/file.js:6\n//       throw new Error('oh no!');\n//           ^\n//   Error: oh no!\n//       at speedy (/home/gbusey/file.js:6:11)\n//       at makeFaster (/home/gbusey/file.js:5:3)\n//       at Object.<anonymous> (/home/gbusey/file.js:10:1)\n//       at Module._compile (module.js:456:26)\n//       at Object.Module._extensions..js (module.js:474:10)\n//       at Module.load (module.js:356:32)\n//       at Function.Module._load (module.js:312:12)\n//       at Function.Module.runMain (module.js:497:10)\n//       at startup (node.js:119:16)\n//       at node.js:906:3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The location information will be one of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • plain-filename.js:line:column, if the frame represents a call internal\nto Node.js.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /absolute/path/to/file.js:line:column, if the frame represents a call in\na user program, or its dependencies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string representing the stack trace is lazily generated when the\nerror.stack property is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The number of frames captured by the stack trace is bounded by the smaller of\nError.stackTraceLimit or the number of available frames on the current event\nloop tick.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.stack property is a string describing the point in the code at which\nthe Error was instantiated.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Things keep happening!\n   at /home/gbusey/file.js:525:2\n   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)\n   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)\n   at increaseSynergy (/home/gbusey/actors.js:701:6)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line is formatted as <error class name>: <error message>, and\nis followed by a series of stack frames (each line beginning with \"at \").\nEach frame describes a call site within the code that lead to the error being\ngenerated. V8 attempts to display a name for each function (by variable name,\nfunction name, or object method name), but occasionally it will not be able to\nfind a suitable name. If V8 cannot determine a name for the function, only\nlocation information will be displayed for that frame. Otherwise, the\ndetermined function name will be displayed with location information appended\nin parentheses.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Frames are only generated for JavaScript functions. If, for example, execution\nsynchronously passes through a C++ addon function called cheetahify which\nitself calls a JavaScript function, the frame representing the cheetahify call\nwill not be present in the stack traces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cheetahify = require('./native-binding.node');\n\nfunction makeFaster() {\n  // `cheetahify()` *synchronously* calls speedy.\n  cheetahify(function speedy() {\n    throw new Error('oh no!');\n  });\n}\n\nmakeFaster();\n// will throw:\n//   /home/gbusey/file.js:6\n//       throw new Error('oh no!');\n//           ^\n//   Error: oh no!\n//       at speedy (/home/gbusey/file.js:6:11)\n//       at makeFaster (/home/gbusey/file.js:5:3)\n//       at Object.<anonymous> (/home/gbusey/file.js:10:1)\n//       at Module._compile (module.js:456:26)\n//       at Object.Module._extensions..js (module.js:474:10)\n//       at Module.load (module.js:356:32)\n//       at Function.Module._load (module.js:312:12)\n//       at Function.Module.runMain (module.js:497:10)\n//       at startup (node.js:119:16)\n//       at node.js:906:3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The location information will be one of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • plain-filename.js:line:column, if the frame represents a call internal\nto Node.js.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /absolute/path/to/file.js:line:column, if the frame represents a call in\na user program, or its dependencies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string representing the stack trace is lazily generated when the\nerror.stack property is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The number of frames captured by the stack trace is bounded by the smaller of\nError.stackTraceLimit or the number of available frames on the current event\nloop tick.

                                                                                                                                                                                                                                                      " } ], "signatures": [ @@ -87,7 +87,7 @@ "textRaw": "Class: `ReferenceError`", "type": "class", "name": "ReferenceError", - "desc": "\n

                                                                                                                                                                                                                                                      Indicates that an attempt is being made to access a variable that is not\ndefined. Such errors commonly indicate typos in code, or an otherwise broken\nprogram.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8\nwill do so.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      doesNotExist;\n// Throws ReferenceError, doesNotExist is not a variable in this program.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code,\nReferenceError instances should always be considered a bug in the code\nor its dependencies.

                                                                                                                                                                                                                                                      " + "desc": "\n

                                                                                                                                                                                                                                                      Indicates that an attempt is being made to access a variable that is not\ndefined. Such errors commonly indicate typos in code, or an otherwise broken\nprogram.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8\nwill do so.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      doesNotExist;\n// Throws ReferenceError, doesNotExist is not a variable in this program.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code,\nReferenceError instances indicate a bug in the code or its dependencies.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Class: `SyntaxError`", @@ -123,7 +123,7 @@ "textRaw": "`errno` {string|number}", "type": "string|number", "name": "errno", - "desc": "

                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a\nnegative value which corresponds to the error code defined in\nlibuv Error handling. See the libuv errno.h header file\n(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case\nof a string, it is the same as error.code.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a\nnegative value which corresponds to the error code defined in\nlibuv Error handling. See the libuv errno.h header file\n(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case\nof a string, it is the same as error.code.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`info` {Object}", @@ -153,16 +153,16 @@ "textRaw": "`syscall` {string}", "type": "string", "name": "syscall", - "desc": "

                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "Common System Errors", + "textRaw": "Common system errors", "name": "common_system_errors", - "desc": "

                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js\nprogram. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EACCES (Permission denied): An attempt was made to access a file in a way\nforbidden by its file access permissions.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EADDRINUSE (Address already in use): An attempt to bind a server\n(net, http, or https) to a local address failed due to\nanother server on the local system already occupying that address.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNREFUSED (Connection refused): No connection could be made because the\ntarget machine actively refused it. This usually results from trying to\nconnect to a service that is inactive on the foreign host.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNRESET (Connection reset by peer): A connection was forcibly closed by\na peer. This normally results from a loss of the connection on the remote\nsocket due to a timeout or reboot. Commonly encountered via the http\nand net modules.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EEXIST (File exists): An existing file was the target of an operation that\nrequired that the target not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EISDIR (Is a directory): An operation expected a file, but the given\npathname was a directory.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EMFILE (Too many open files in system): Maximum number of\nfile descriptors allowable on the system has been reached, and\nrequests for another descriptor cannot be fulfilled until at least one\nhas been closed. This is encountered when opening many files at once in\nparallel, especially on systems (in particular, macOS) where there is a low\nfile descriptor limit for processes. To remedy a low limit, run\nulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOENT (No such file or directory): Commonly raised by fs operations\nto indicate that a component of the specified pathname does not exist. No\nentity (file or directory) could be found by the given path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTDIR (Not a directory): A component of the given pathname existed, but\nwas not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTEMPTY (Directory not empty): A directory with entries was the target\nof an operation that requires an empty directory, usually fs.unlink.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTFOUND (DNS lookup failed): Indicates a DNS failure of either\nEAI_NODATA or EAI_NONAME. This is not a standard POSIX error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPERM (Operation not permitted): An attempt was made to perform an\noperation that requires elevated privileges.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPIPE (Broken pipe): A write on a pipe, socket, or FIFO for which there is\nno process to read the data. Commonly encountered at the net and\nhttp layers, indicative that the remote side of the stream being\nwritten to has been closed.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ETIMEDOUT (Operation timed out): A connect or send request failed because\nthe connected party did not properly respond after a period of time. Usually\nencountered by http or net. Often a sign that a socket.end()\nwas not properly called.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js\nprogram. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EACCES (Permission denied): An attempt was made to access a file in a way\nforbidden by its file access permissions.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EADDRINUSE (Address already in use): An attempt to bind a server\n(net, http, or https) to a local address failed due to\nanother server on the local system already occupying that address.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNREFUSED (Connection refused): No connection could be made because the\ntarget machine actively refused it. This usually results from trying to\nconnect to a service that is inactive on the foreign host.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNRESET (Connection reset by peer): A connection was forcibly closed by\na peer. This normally results from a loss of the connection on the remote\nsocket due to a timeout or reboot. Commonly encountered via the http\nand net modules.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EEXIST (File exists): An existing file was the target of an operation that\nrequired that the target not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EISDIR (Is a directory): An operation expected a file, but the given\npathname was a directory.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EMFILE (Too many open files in system): Maximum number of\nfile descriptors allowable on the system has been reached, and\nrequests for another descriptor cannot be fulfilled until at least one\nhas been closed. This is encountered when opening many files at once in\nparallel, especially on systems (in particular, macOS) where there is a low\nfile descriptor limit for processes. To remedy a low limit, run\nulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOENT (No such file or directory): Commonly raised by fs operations\nto indicate that a component of the specified pathname does not exist. No\nentity (file or directory) could be found by the given path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTDIR (Not a directory): A component of the given pathname existed, but\nwas not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTEMPTY (Directory not empty): A directory with entries was the target\nof an operation that requires an empty directory, usually fs.unlink.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTFOUND (DNS lookup failed): Indicates a DNS failure of either\nEAI_NODATA or EAI_NONAME. This is not a standard POSIX error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPERM (Operation not permitted): An attempt was made to perform an\noperation that requires elevated privileges.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPIPE (Broken pipe): A write on a pipe, socket, or FIFO for which there is\nno process to read the data. Commonly encountered at the net and\nhttp layers, indicative that the remote side of the stream being\nwritten to has been closed.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ETIMEDOUT (Operation timed out): A connect or send request failed because\nthe connected party did not properly respond after a period of time. Usually\nencountered by http or net. Often a sign that a socket.end()\nwas not properly called.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Common System Errors" + "displayName": "Common system errors" } ] }, @@ -170,7 +170,7 @@ "textRaw": "Class: `TypeError`", "type": "class", "name": "TypeError", - "desc": "\n

                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example,\npassing a function to a parameter which expects a string would be considered\na TypeError.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('url').parse(() => { });\n// Throws TypeError, since it expected a string.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form\nof argument validation.

                                                                                                                                                                                                                                                      " + "desc": "\n

                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example,\npassing a function to a parameter which expects a string would be a TypeError.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('url').parse(() => { });\n// Throws TypeError, since it expected a string.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form\nof argument validation.

                                                                                                                                                                                                                                                      " } ], "miscs": [ @@ -179,11 +179,11 @@ "name": "Errors", "introduced_in": "v4.0.0", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                      Applications running in Node.js will generally experience four categories of\nerrors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Standard JavaScript errors such as <EvalError>, <SyntaxError>, <RangeError>,\n<ReferenceError>, <TypeError>, and <URIError>.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • System errors triggered by underlying operating system constraints such\nas attempting to open a file that does not exist or attempting to send data\nover a closed socket.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • User-specified errors triggered by application code.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • AssertionErrors are a special class of error that can be triggered when\nNode.js detects an exceptional logic violation that should never occur. These\nare raised typically by the assert module.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All JavaScript and System errors raised by Node.js inherit from, or are\ninstances of, the standard JavaScript <Error> class and are guaranteed\nto provide at least the properties available on that class.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Applications running in Node.js will generally experience four categories of\nerrors:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Standard JavaScript errors such as <EvalError>, <SyntaxError>, <RangeError>,\n<ReferenceError>, <TypeError>, and <URIError>.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • System errors triggered by underlying operating system constraints such\nas attempting to open a file that does not exist or attempting to send data\nover a closed socket.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • User-specified errors triggered by application code.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • AssertionErrors are a special class of error that can be triggered when\nNode.js detects an exceptional logic violation that should never occur. These\nare raised typically by the assert module.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All JavaScript and system errors raised by Node.js inherit from, or are\ninstances of, the standard JavaScript <Error> class and are guaranteed\nto provide at least the properties available on that class.

                                                                                                                                                                                                                                                      ", "miscs": [ { - "textRaw": "Error Propagation and Interception", - "name": "Error Propagation and Interception", + "textRaw": "Error propagation and interception", + "name": "Error propagation and interception", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      Node.js supports several mechanisms for propagating and handling errors that\noccur while an application is running. How these errors are reported and\nhandled depends entirely on the type of Error and the style of the API that is\ncalled.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All JavaScript errors are handled as exceptions that immediately generate\nand throw an error using the standard JavaScript throw mechanism. These\nare handled using the try…catch construct provided by the\nJavaScript language.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // Throws with a ReferenceError because z is not defined.\ntry {\n  const m = 1;\n  const n = m + z;\n} catch (err) {\n  // Handle the error here.\n}\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Any use of the JavaScript throw mechanism will raise an exception that\nmust be handled using try…catch or the Node.js process will exit\nimmediately.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      With few exceptions, Synchronous APIs (any blocking method that does not\naccept a callback function, such as fs.readFileSync), will use throw\nto report errors.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Errors that occur within Asynchronous APIs may be reported in multiple ways:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • Most asynchronous methods that accept a callback function will accept an\nError object passed as the first argument to that function. If that first\nargument is not null and is an instance of Error, then an error occurred\nthat should be handled.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      const fs = require('fs');\nfs.readFile('a file that does not exist', (err, data) => {\n  if (err) {\n    console.error('There was an error reading the file!', err);\n    return;\n  }\n  // Otherwise handle the data\n});\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        When an asynchronous method is called on an object that is an\nEventEmitter, errors can be routed to that object's 'error' event.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                        const net = require('net');\nconst connection = net.connect('localhost');\n\n// Adding an 'error' event handler to a stream:\nconnection.on('error', (err) => {\n  // If the connection is reset by the server, or if it can't\n  // connect at all, or on any sort of error encountered by\n  // the connection, the error will be sent here.\n  console.error(err);\n});\n\nconnection.pipe(process.stdout);\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        A handful of typically asynchronous methods in the Node.js API may still\nuse the throw mechanism to raise exceptions that must be handled using\ntry…catch. There is no comprehensive list of such methods; please\nrefer to the documentation of each method to determine the appropriate\nerror handling mechanism required.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The use of the 'error' event mechanism is most common for stream-based\nand event emitter-based APIs, which themselves represent a series of\nasynchronous operations over time (as opposed to a single operation that may\npass or fail).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      For all EventEmitter objects, if an 'error' event handler is not\nprovided, the error will be thrown, causing the Node.js process to report an\nuncaught exception and crash unless either: The domain module is\nused appropriately or a handler has been registered for the\n'uncaughtException' event.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const EventEmitter = require('events');\nconst ee = new EventEmitter();\n\nsetImmediate(() => {\n  // This will crash the process because no 'error' event\n  // handler has been added.\n  ee.emit('error', new Error('This will crash'));\n});\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Errors generated in this way cannot be intercepted using try…catch as\nthey are thrown after the calling code has already exited.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Developers must refer to the documentation for each method to determine\nexactly how errors raised by those methods are propagated.

                                                                                                                                                                                                                                                      ", "miscs": [ @@ -196,13 +196,13 @@ ] }, { - "textRaw": "Exceptions vs. Errors", - "name": "Exceptions vs. Errors", + "textRaw": "Exceptions vs. errors", + "name": "Exceptions vs. errors", "type": "misc", "desc": "

                                                                                                                                                                                                                                                      A JavaScript exception is a value that is thrown as a result of an invalid\noperation or as the target of a throw statement. While it is not required\nthat these values are instances of Error or classes which inherit from\nError, all exceptions thrown by Node.js or the JavaScript runtime will be\ninstances of Error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Some exceptions are unrecoverable at the JavaScript layer. Such exceptions\nwill always cause the Node.js process to crash. Examples include assert()\nchecks or abort() calls in the C++ layer.

                                                                                                                                                                                                                                                      " }, { - "textRaw": "OpenSSL Errors", + "textRaw": "OpenSSL errors", "name": "openssl_errors", "desc": "

                                                                                                                                                                                                                                                      Errors originating in crypto or tls are of class Error, and in addition to\nthe standard .code and .message properties, may have some additional\nOpenSSL-specific properties.

                                                                                                                                                                                                                                                      ", "properties": [ @@ -228,10 +228,10 @@ } ], "type": "misc", - "displayName": "OpenSSL Errors" + "displayName": "OpenSSL errors" }, { - "textRaw": "Node.js Error Codes", + "textRaw": "Node.js error codes", "name": "node.js_error_codes", "desc": "

                                                                                                                                                                                                                                                      ", "modules": [ @@ -939,11 +939,18 @@ "name": "`err_input_type_not_allowed`", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The --input-type flag was used to attempt to execute a file. This flag can\nonly be used with input via --eval, --print or STDIN.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The --input-type flag was used to attempt to execute a file. This flag can\nonly be used with input via --eval, --print or STDIN.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INPUT_TYPE_NOT_ALLOWED`" }, { + "textRaw": "`ERR_INSPECTOR_ALREADY_ACTIVATED`", + "name": "`err_inspector_already_activated`", + "desc": "

                                                                                                                                                                                                                                                      While using the inspector module, an attempt was made to activate the\ninspector when it already started to listen on a port. Use inspector.close()\nbefore activating it on a different address.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_INSPECTOR_ALREADY_ACTIVATED`" + }, + { "textRaw": "`ERR_INSPECTOR_ALREADY_CONNECTED`", "name": "`err_inspector_already_connected`", "desc": "

                                                                                                                                                                                                                                                      While using the inspector module, an attempt was made to connect when the\ninspector was already connected.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -1121,14 +1128,14 @@ { "textRaw": "`ERR_INVALID_PACKAGE_CONFIG`", "name": "`err_invalid_package_config`", - "desc": "

                                                                                                                                                                                                                                                      An invalid package.json file was found which failed parsing.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An invalid package.json file was found which failed parsing.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INVALID_PACKAGE_CONFIG`" }, { "textRaw": "`ERR_INVALID_PACKAGE_TARGET`", "name": "`err_invalid_package_target`", - "desc": "

                                                                                                                                                                                                                                                      The package.json exports field contains an invalid target mapping value\nfor the attempted module resolution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The package.json \"exports\" field contains an invalid target mapping\nvalue for the attempted module resolution.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INVALID_PACKAGE_TARGET`" }, @@ -1205,7 +1212,7 @@ { "textRaw": "`ERR_INVALID_TUPLE`", "name": "`err_invalid_tuple`", - "desc": "

                                                                                                                                                                                                                                                      An element in the iterable provided to the WHATWG\nURLSearchParams constructor did not\nrepresent a [name, value] tuple – that is, if an element is not iterable, or\ndoes not consist of exactly two elements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An element in the iterable provided to the WHATWG\nURLSearchParams constructor did not\nrepresent a [name, value] tuple – that is, if an element is not iterable, or\ndoes not consist of exactly two elements.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INVALID_TUPLE`" }, @@ -1219,7 +1226,7 @@ { "textRaw": "`ERR_INVALID_URL`", "name": "`err_invalid_url`", - "desc": "

                                                                                                                                                                                                                                                      An invalid URL was passed to the WHATWG\nURL constructor to be parsed. The thrown error object\ntypically has an additional property 'input' that contains the URL that failed\nto parse.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An invalid URL was passed to the WHATWG\nURL constructor to be parsed. The thrown error object\ntypically has an additional property 'input' that contains the URL that failed\nto parse.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_INVALID_URL`" }, @@ -1310,11 +1317,24 @@ { "textRaw": "`ERR_MEMORY_ALLOCATION_FAILED`", "name": "`err_memory_allocation_failed`", - "desc": "

                                                                                                                                                                                                                                                      An attempt was made to allocate memory (usually in the C++ layer) but it\nfailed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An attempt was made to allocate memory (usually in the C++ layer) but it\nfailed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_MEMORY_ALLOCATION_FAILED`" }, { + "textRaw": "`ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE`", + "name": "`err_message_target_context_unavailable`", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                      A message posted to a MessagePort could not be deserialized in the target\nvm Context. Not all Node.js objects can be successfully instantiated in\nany context at this time, and attempting to transfer them using postMessage()\ncan fail on the receiving side in that case.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE`" + }, + { "textRaw": "`ERR_METHOD_NOT_IMPLEMENTED`", "name": "`err_method_not_implemented`", "desc": "

                                                                                                                                                                                                                                                      A method is required but not implemented.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -1347,7 +1367,7 @@ { "textRaw": "`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`", "name": "`err_missing_message_port_in_transfer_list`", - "desc": "

                                                                                                                                                                                                                                                      A MessagePort was found in the object passed to a postMessage() call,\nbut not provided in the transferList for that call.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An object that needs to be explicitly listed in the transferList argument\nwas found in the object passed to a postMessage() call, but not provided in\nthe transferList for that call. Usually, this is a MessagePort.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`" }, @@ -1461,14 +1481,21 @@ { "textRaw": "`ERR_OUT_OF_RANGE`", "name": "`err_out_of_range`", - "desc": "

                                                                                                                                                                                                                                                      A given value is out of the accepted range.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A given value is out of the accepted range.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_OUT_OF_RANGE`" }, { + "textRaw": "`ERR_PACKAGE_IMPORT_NOT_DEFINED`", + "name": "`err_package_import_not_defined`", + "desc": "

                                                                                                                                                                                                                                                      The package.json \"imports\" field does not define the given internal\npackage specifier mapping.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_PACKAGE_IMPORT_NOT_DEFINED`" + }, + { "textRaw": "`ERR_PACKAGE_PATH_NOT_EXPORTED`", "name": "`err_package_path_not_exported`", - "desc": "

                                                                                                                                                                                                                                                      The package.json exports field does not export the requested subpath.\nBecause exports are encapsulated, private internal modules that are not exported\ncannot be imported through the package resolution, unless using an absolute URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The package.json \"exports\" field does not export the requested subpath.\nBecause exports are encapsulated, private internal modules that are not exported\ncannot be imported through the package resolution, unless using an absolute URL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_PACKAGE_PATH_NOT_EXPORTED`" }, @@ -1491,7 +1518,7 @@ { "textRaw": "`ERR_SCRIPT_EXECUTION_INTERRUPTED`", "name": "`err_script_execution_interrupted`", - "desc": "

                                                                                                                                                                                                                                                      Script execution was interrupted by SIGINT (For example, when Ctrl+C was\npressed).

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Script execution was interrupted by SIGINT (For example,\nCtrl+C was pressed.)

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_SCRIPT_EXECUTION_INTERRUPTED`" }, @@ -1666,11 +1693,18 @@ { "textRaw": "`ERR_SYSTEM_ERROR`", "name": "`err_system_error`", - "desc": "

                                                                                                                                                                                                                                                      An unspecified or non-specific system error has occurred within the Node.js\nprocess. The error object will have an err.info object property with\nadditional details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An unspecified or non-specific system error has occurred within the Node.js\nprocess. The error object will have an err.info object property with\nadditional details.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_SYSTEM_ERROR`" }, { + "textRaw": "`ERR_TLS_CERT_ALTNAME_FORMAT`", + "name": "`err_tls_cert_altname_format`", + "desc": "

                                                                                                                                                                                                                                                      This error is thrown by checkServerIdentity if a user-supplied\nsubjectaltname property violates encoding rules. Certificate objects produced\nby Node.js itself always comply with encoding rules and will never cause\nthis error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_TLS_CERT_ALTNAME_FORMAT`" + }, + { "textRaw": "`ERR_TLS_CERT_ALTNAME_INVALID`", "name": "`err_tls_cert_altname_invalid`", "desc": "

                                                                                                                                                                                                                                                      While using TLS, the host name/IP of the peer did not match any of the\nsubjectAltNames in its certificate.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -1767,11 +1801,11 @@ "displayName": "`ERR_TLS_SNI_FROM_SERVER`" }, { - "textRaw": "ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED", - "name": "err_tls_psk_set_identiy_hint_failed", + "textRaw": "`ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED`", + "name": "`err_tls_psk_set_identiy_hint_failed`", "desc": "

                                                                                                                                                                                                                                                      Failed to set PSK identity hint. Hint may be too long.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED" + "displayName": "`ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED`" }, { "textRaw": "`ERR_TRACE_EVENTS_CATEGORY_REQUIRED`", @@ -1811,11 +1845,18 @@ { "textRaw": "`ERR_TTY_INIT_FAILED`", "name": "`err_tty_init_failed`", - "desc": "

                                                                                                                                                                                                                                                      The initialization of a TTY failed due to a system error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      The initialization of a TTY failed due to a system error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_TTY_INIT_FAILED`" }, { + "textRaw": "`ERR_UNAVAILABLE_DURING_EXIT`", + "name": "`err_unavailable_during_exit`", + "desc": "

                                                                                                                                                                                                                                                      Function was called within a process.on('exit') handler that shouldn't be\ncalled within process.on('exit') handler.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_UNAVAILABLE_DURING_EXIT`" + }, + { "textRaw": "`ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET`", "name": "`err_uncaught_exception_capture_already_set`", "desc": "

                                                                                                                                                                                                                                                      process.setUncaughtExceptionCaptureCallback() was called twice,\nwithout first resetting the callback to null.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      This error is designed to prevent accidentally overwriting a callback registered\nfrom another module.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -1885,25 +1926,18 @@ { "textRaw": "`ERR_UNSUPPORTED_DIR_IMPORT`", "name": "`err_unsupported_dir_import`", - "desc": "

                                                                                                                                                                                                                                                      import a directory URL is unsupported. Instead, you can\nself-reference a package using its name and define a custom subpath in\nthe \"exports\" field of the package.json file.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import './'; // unsupported\nimport './index.js'; // supported\nimport 'package-name'; // supported\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      import a directory URL is unsupported. Instead,\nself-reference a package using its name and define a custom subpath in\nthe \"exports\" field of the package.json file.

                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                      import './'; // unsupported\nimport './index.js'; // supported\nimport 'package-name'; // supported\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_UNSUPPORTED_DIR_IMPORT`" }, { "textRaw": "`ERR_UNSUPPORTED_ESM_URL_SCHEME`", "name": "`err_unsupported_esm_url_scheme`", - "desc": "

                                                                                                                                                                                                                                                      import with URL schemes other than file and data is unsupported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      import with URL schemes other than file and data is unsupported.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_UNSUPPORTED_ESM_URL_SCHEME`" }, { - "textRaw": "`ERR_V8BREAKITERATOR`", - "name": "`err_v8breakiterator`", - "desc": "

                                                                                                                                                                                                                                                      The V8 BreakIterator API was used but the full ICU data set is not installed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_V8BREAKITERATOR`" - }, - { "textRaw": "`ERR_VALID_PERFORMANCE_ENTRY_TYPE`", "name": "`err_valid_performance_entry_type`", "desc": "

                                                                                                                                                                                                                                                      While using the Performance Timing API (perf_hooks), no valid performance\nentry types were found.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", @@ -2055,11 +2089,18 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                      Too much HTTP header data was received. In order to protect against malicious or\nmalconfigured clients, if more than 8KB of HTTP header data is received then\nHTTP parsing will abort without a request or response object being created, and\nan Error with this code will be emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      Too much HTTP header data was received. In order to protect against malicious or\nmalconfigured clients, if more than 8KB of HTTP header data is received then\nHTTP parsing will abort without a request or response object being created, and\nan Error with this code will be emitted.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`HPE_HEADER_OVERFLOW`" }, { + "textRaw": "`HPE_UNEXPECTED_CONTENT_LENGTH`", + "name": "`hpe_unexpected_content_length`", + "desc": "

                                                                                                                                                                                                                                                      Server is sending both a Content-Length header and Transfer-Encoding: chunked.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Transfer-Encoding: chunked allows the server to maintain an HTTP persistent\nconnection for dynamically generated content.\nIn this case, the Content-Length HTTP header cannot be used.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Use Content-Length or Transfer-Encoding: chunked.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`HPE_UNEXPECTED_CONTENT_LENGTH`" + }, + { "textRaw": "`MODULE_NOT_FOUND`", "name": "`module_not_found`", "meta": { @@ -2077,10 +2118,10 @@ } ], "type": "misc", - "displayName": "Node.js Error Codes" + "displayName": "Node.js error codes" }, { - "textRaw": "Legacy Node.js Error Codes", + "textRaw": "Legacy Node.js error codes", "name": "legacy_node.js_error_codes", "stability": 0, "stabilityText": "Deprecated. These error codes are either inconsistent, or have\nbeen removed.", @@ -2406,11 +2447,18 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                      An attempt was made to launch a Node.js process with an unknown stdout or\nstderr file type. This error is usually an indication of a bug within Node.js\nitself, although it is possible for user code to trigger it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      An attempt was made to launch a Node.js process with an unknown stdout or\nstderr file type. This error is usually an indication of a bug within Node.js\nitself, although it is possible for user code to trigger it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_UNKNOWN_STREAM_TYPE`" }, { + "textRaw": "`ERR_V8BREAKITERATOR`", + "name": "`err_v8breakiterator`", + "desc": "

                                                                                                                                                                                                                                                      The V8 BreakIterator API was used but the full ICU data set is not installed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "`ERR_V8BREAKITERATOR`" + }, + { "textRaw": "`ERR_VALUE_OUT_OF_RANGE`", "name": "`err_value_out_of_range`", "meta": { @@ -2448,100 +2496,10 @@ "desc": "

                                                                                                                                                                                                                                                      Used when an attempt is made to use a zlib object after it has already been\nclosed.

                                                                                                                                                                                                                                                      ", "type": "module", "displayName": "`ERR_ZLIB_BINDING_CLOSED`" - }, - { - "textRaw": "Other error codes", - "name": "other_error_codes", - "desc": "

                                                                                                                                                                                                                                                      These errors have never been released, but had been present on master between\nreleases.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "modules": [ - { - "textRaw": "`ERR_ENTRY_TYPE_MISMATCH`", - "name": "`err_entry_type_mismatch`", - "stability": 1, - "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The --entry-type=commonjs flag was used to attempt to execute an .mjs file\nor a .js file where the nearest parent package.json contains\n\"type\": \"module\"; or\nthe --entry-type=module flag was used to attempt to execute a .cjs file or\na .js file where the nearest parent package.json either lacks a \"type\"\nfield or contains \"type\": \"commonjs\".

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_ENTRY_TYPE_MISMATCH`" - }, - { - "textRaw": "`ERR_FS_WATCHER_ALREADY_STARTED`", - "name": "`err_fs_watcher_already_started`", - "desc": "

                                                                                                                                                                                                                                                      An attempt was made to start a watcher returned by fs.watch() that has\nalready been started.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_FS_WATCHER_ALREADY_STARTED`" - }, - { - "textRaw": "`ERR_FS_WATCHER_NOT_STARTED`", - "name": "`err_fs_watcher_not_started`", - "desc": "

                                                                                                                                                                                                                                                      An attempt was made to initiate operations on a watcher returned by\nfs.watch() that has not yet been started.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_FS_WATCHER_NOT_STARTED`" - }, - { - "textRaw": "`ERR_HTTP2_ALREADY_SHUTDOWN`", - "name": "`err_http2_already_shutdown`", - "desc": "

                                                                                                                                                                                                                                                      Occurs with multiple attempts to shutdown an HTTP/2 session.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_HTTP2_ALREADY_SHUTDOWN`" - }, - { - "textRaw": "`ERR_HTTP2_ERROR`", - "name": "`err_http2_error`", - "desc": "

                                                                                                                                                                                                                                                      A non-specific HTTP/2 error has occurred.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_HTTP2_ERROR`" - }, - { - "textRaw": "`ERR_INVALID_REPL_HISTORY`", - "name": "`err_invalid_repl_history`", - "desc": "

                                                                                                                                                                                                                                                      Used in the repl in case the old history file is used and an error occurred\nwhile trying to read and parse it.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_INVALID_REPL_HISTORY`" - }, - { - "textRaw": "`ERR_INVALID_REPL_TYPE`", - "name": "`err_invalid_repl_type`", - "stability": 1, - "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                      The --entry-type=... flag is not compatible with the Node.js REPL.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_INVALID_REPL_TYPE`" - }, - { - "textRaw": "`ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK`", - "name": "`err_missing_dynamic_instantiate_hook`", - "desc": "

                                                                                                                                                                                                                                                      Used when an ES Module loader hook specifies format: 'dynamic' but does\nnot provide a dynamicInstantiate hook.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK`" - }, - { - "textRaw": "`ERR_STREAM_HAS_STRINGDECODER`", - "name": "`err_stream_has_stringdecoder`", - "desc": "

                                                                                                                                                                                                                                                      Used to prevent an abort if a string decoder was set on the Socket.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const Socket = require('net').Socket;\nconst instance = new Socket();\n\ninstance.setEncoding('utf8');\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_STREAM_HAS_STRINGDECODER`" - }, - { - "textRaw": "`ERR_STRING_TOO_LARGE`", - "name": "`err_string_too_large`", - "desc": "

                                                                                                                                                                                                                                                      An attempt has been made to create a string larger than the maximum allowed\nsize.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_STRING_TOO_LARGE`" - }, - { - "textRaw": "`ERR_TTY_WRITABLE_NOT_READABLE`", - "name": "`err_tty_writable_not_readable`", - "desc": "

                                                                                                                                                                                                                                                      This Error is thrown when a read is attempted on a TTY WriteStream,\nsuch as process.stdout.on('data').

                                                                                                                                                                                                                                                      ", - "type": "module", - "displayName": "`ERR_TTY_WRITABLE_NOT_READABLE`" - } - ], - "type": "module", - "displayName": "Other error codes" } ], "type": "misc", - "displayName": "Legacy Node.js Error Codes" + "displayName": "Legacy Node.js error codes" } ], "classes": [ @@ -2549,7 +2507,7 @@ "textRaw": "Class: `Error`", "type": "class", "name": "Error", - "desc": "

                                                                                                                                                                                                                                                      A generic JavaScript <Error> object that does not denote any specific\ncircumstance of why the error occurred. Error objects capture a \"stack trace\"\ndetailing the point in the code at which the Error was instantiated, and may\nprovide a text description of the error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All errors generated by Node.js, including all System and JavaScript errors,\nwill either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      A generic JavaScript <Error> object that does not denote any specific\ncircumstance of why the error occurred. Error objects capture a \"stack trace\"\ndetailing the point in the code at which the Error was instantiated, and may\nprovide a text description of the error.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      All errors generated by Node.js, including all system and JavaScript errors,\nwill either be instances of, or inherit from, the Error class.

                                                                                                                                                                                                                                                      ", "methods": [ { "textRaw": "`Error.captureStackTrace(targetObject[, constructorOpt])`", @@ -2571,7 +2529,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                      Creates a .stack property on targetObject, which when accessed returns\na string representing the location in the code at which\nError.captureStackTrace() was called.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myObject = {};\nError.captureStackTrace(myObject);\nmyObject.stack;  // Similar to `new Error().stack`\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line of the trace will be prefixed with\n${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional constructorOpt argument accepts a function. If given, all frames\nabove constructorOpt, including constructorOpt, will be omitted from the\ngenerated stack trace.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The constructorOpt argument is useful for hiding implementation\ndetails of error generation from an end user. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyError() {\n  Error.captureStackTrace(this, MyError);\n}\n\n// Without passing MyError to captureStackTrace, the MyError\n// frame would show up in the .stack property. By passing\n// the constructor, we omit that frame, and retain all frames below it.\nnew MyError().stack;\n
                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      Creates a .stack property on targetObject, which when accessed returns\na string representing the location in the code at which\nError.captureStackTrace() was called.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const myObject = {};\nError.captureStackTrace(myObject);\nmyObject.stack;  // Similar to `new Error().stack`\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line of the trace will be prefixed with\n${myObject.name}: ${myObject.message}.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The optional constructorOpt argument accepts a function. If given, all frames\nabove constructorOpt, including constructorOpt, will be omitted from the\ngenerated stack trace.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The constructorOpt argument is useful for hiding implementation\ndetails of error generation from the user. For instance:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      function MyError() {\n  Error.captureStackTrace(this, MyError);\n}\n\n// Without passing MyError to captureStackTrace, the MyError\n// frame would show up in the .stack property. By passing\n// the constructor, we omit that frame, and retain all frames below it.\nnew MyError().stack;\n
                                                                                                                                                                                                                                                      " } ], "properties": [ @@ -2585,7 +2543,7 @@ "textRaw": "`code` {string}", "type": "string", "name": "code", - "desc": "

                                                                                                                                                                                                                                                      The error.code property is a string label that identifies the kind of error.\nerror.code is the most stable way to identify an error. It will only change\nbetween major versions of Node.js. In contrast, error.message strings may\nchange between any versions of Node.js. See Node.js Error Codes for details\nabout specific codes.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.code property is a string label that identifies the kind of error.\nerror.code is the most stable way to identify an error. It will only change\nbetween major versions of Node.js. In contrast, error.message strings may\nchange between any versions of Node.js. See Node.js error codes for details\nabout specific codes.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`message` {string}", @@ -2597,7 +2555,7 @@ "textRaw": "`stack` {string}", "type": "string", "name": "stack", - "desc": "

                                                                                                                                                                                                                                                      The error.stack property is a string describing the point in the code at which\nthe Error was instantiated.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Things keep happening!\n   at /home/gbusey/file.js:525:2\n   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)\n   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)\n   at increaseSynergy (/home/gbusey/actors.js:701:6)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line is formatted as <error class name>: <error message>, and\nis followed by a series of stack frames (each line beginning with \"at \").\nEach frame describes a call site within the code that lead to the error being\ngenerated. V8 attempts to display a name for each function (by variable name,\nfunction name, or object method name), but occasionally it will not be able to\nfind a suitable name. If V8 cannot determine a name for the function, only\nlocation information will be displayed for that frame. Otherwise, the\ndetermined function name will be displayed with location information appended\nin parentheses.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Frames are only generated for JavaScript functions. If, for example, execution\nsynchronously passes through a C++ addon function called cheetahify which\nitself calls a JavaScript function, the frame representing the cheetahify call\nwill not be present in the stack traces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cheetahify = require('./native-binding.node');\n\nfunction makeFaster() {\n  // `cheetahify()` *synchronously* calls speedy.\n  cheetahify(function speedy() {\n    throw new Error('oh no!');\n  });\n}\n\nmakeFaster();\n// will throw:\n//   /home/gbusey/file.js:6\n//       throw new Error('oh no!');\n//           ^\n//   Error: oh no!\n//       at speedy (/home/gbusey/file.js:6:11)\n//       at makeFaster (/home/gbusey/file.js:5:3)\n//       at Object.<anonymous> (/home/gbusey/file.js:10:1)\n//       at Module._compile (module.js:456:26)\n//       at Object.Module._extensions..js (module.js:474:10)\n//       at Module.load (module.js:356:32)\n//       at Function.Module._load (module.js:312:12)\n//       at Function.Module.runMain (module.js:497:10)\n//       at startup (node.js:119:16)\n//       at node.js:906:3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The location information will be one of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • plain-filename.js:line:column, if the frame represents a call internal\nto Node.js.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /absolute/path/to/file.js:line:column, if the frame represents a call in\na user program, or its dependencies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string representing the stack trace is lazily generated when the\nerror.stack property is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The number of frames captured by the stack trace is bounded by the smaller of\nError.stackTraceLimit or the number of available frames on the current event\nloop tick.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.stack property is a string describing the point in the code at which\nthe Error was instantiated.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      Error: Things keep happening!\n   at /home/gbusey/file.js:525:2\n   at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21)\n   at Actor.<anonymous> (/home/gbusey/actors.js:400:8)\n   at increaseSynergy (/home/gbusey/actors.js:701:6)\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The first line is formatted as <error class name>: <error message>, and\nis followed by a series of stack frames (each line beginning with \"at \").\nEach frame describes a call site within the code that lead to the error being\ngenerated. V8 attempts to display a name for each function (by variable name,\nfunction name, or object method name), but occasionally it will not be able to\nfind a suitable name. If V8 cannot determine a name for the function, only\nlocation information will be displayed for that frame. Otherwise, the\ndetermined function name will be displayed with location information appended\nin parentheses.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Frames are only generated for JavaScript functions. If, for example, execution\nsynchronously passes through a C++ addon function called cheetahify which\nitself calls a JavaScript function, the frame representing the cheetahify call\nwill not be present in the stack traces:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      const cheetahify = require('./native-binding.node');\n\nfunction makeFaster() {\n  // `cheetahify()` *synchronously* calls speedy.\n  cheetahify(function speedy() {\n    throw new Error('oh no!');\n  });\n}\n\nmakeFaster();\n// will throw:\n//   /home/gbusey/file.js:6\n//       throw new Error('oh no!');\n//           ^\n//   Error: oh no!\n//       at speedy (/home/gbusey/file.js:6:11)\n//       at makeFaster (/home/gbusey/file.js:5:3)\n//       at Object.<anonymous> (/home/gbusey/file.js:10:1)\n//       at Module._compile (module.js:456:26)\n//       at Object.Module._extensions..js (module.js:474:10)\n//       at Module.load (module.js:356:32)\n//       at Function.Module._load (module.js:312:12)\n//       at Function.Module.runMain (module.js:497:10)\n//       at startup (node.js:119:16)\n//       at node.js:906:3\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The location information will be one of:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • native, if the frame represents a call internal to V8 (as in [].forEach).
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • plain-filename.js:line:column, if the frame represents a call internal\nto Node.js.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • /absolute/path/to/file.js:line:column, if the frame represents a call in\na user program, or its dependencies.
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The string representing the stack trace is lazily generated when the\nerror.stack property is accessed.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The number of frames captured by the stack trace is bounded by the smaller of\nError.stackTraceLimit or the number of available frames on the current event\nloop tick.

                                                                                                                                                                                                                                                      " } ], "signatures": [ @@ -2629,7 +2587,7 @@ "textRaw": "Class: `ReferenceError`", "type": "class", "name": "ReferenceError", - "desc": "\n

                                                                                                                                                                                                                                                      Indicates that an attempt is being made to access a variable that is not\ndefined. Such errors commonly indicate typos in code, or an otherwise broken\nprogram.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8\nwill do so.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      doesNotExist;\n// Throws ReferenceError, doesNotExist is not a variable in this program.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code,\nReferenceError instances should always be considered a bug in the code\nor its dependencies.

                                                                                                                                                                                                                                                      " + "desc": "\n

                                                                                                                                                                                                                                                      Indicates that an attempt is being made to access a variable that is not\ndefined. Such errors commonly indicate typos in code, or an otherwise broken\nprogram.

                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      While client code may generate and propagate these errors, in practice, only V8\nwill do so.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      doesNotExist;\n// Throws ReferenceError, doesNotExist is not a variable in this program.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Unless an application is dynamically generating and running code,\nReferenceError instances indicate a bug in the code or its dependencies.

                                                                                                                                                                                                                                                      " }, { "textRaw": "Class: `SyntaxError`", @@ -2665,7 +2623,7 @@ "textRaw": "`errno` {string|number}", "type": "string|number", "name": "errno", - "desc": "

                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a\nnegative value which corresponds to the error code defined in\nlibuv Error handling. See the libuv errno.h header file\n(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case\nof a string, it is the same as error.code.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.errno property is a number or a string. If it is a number, it is a\nnegative value which corresponds to the error code defined in\nlibuv Error handling. See the libuv errno.h header file\n(deps/uv/include/uv/errno.h in the Node.js source tree) for details. In case\nof a string, it is the same as error.code.

                                                                                                                                                                                                                                                      " }, { "textRaw": "`info` {Object}", @@ -2695,16 +2653,16 @@ "textRaw": "`syscall` {string}", "type": "string", "name": "syscall", - "desc": "

                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                      The error.syscall property is a string describing the syscall that failed.

                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "Common System Errors", + "textRaw": "Common system errors", "name": "common_system_errors", - "desc": "

                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js\nprogram. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EACCES (Permission denied): An attempt was made to access a file in a way\nforbidden by its file access permissions.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EADDRINUSE (Address already in use): An attempt to bind a server\n(net, http, or https) to a local address failed due to\nanother server on the local system already occupying that address.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNREFUSED (Connection refused): No connection could be made because the\ntarget machine actively refused it. This usually results from trying to\nconnect to a service that is inactive on the foreign host.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNRESET (Connection reset by peer): A connection was forcibly closed by\na peer. This normally results from a loss of the connection on the remote\nsocket due to a timeout or reboot. Commonly encountered via the http\nand net modules.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EEXIST (File exists): An existing file was the target of an operation that\nrequired that the target not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EISDIR (Is a directory): An operation expected a file, but the given\npathname was a directory.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EMFILE (Too many open files in system): Maximum number of\nfile descriptors allowable on the system has been reached, and\nrequests for another descriptor cannot be fulfilled until at least one\nhas been closed. This is encountered when opening many files at once in\nparallel, especially on systems (in particular, macOS) where there is a low\nfile descriptor limit for processes. To remedy a low limit, run\nulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOENT (No such file or directory): Commonly raised by fs operations\nto indicate that a component of the specified pathname does not exist. No\nentity (file or directory) could be found by the given path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTDIR (Not a directory): A component of the given pathname existed, but\nwas not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTEMPTY (Directory not empty): A directory with entries was the target\nof an operation that requires an empty directory, usually fs.unlink.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTFOUND (DNS lookup failed): Indicates a DNS failure of either\nEAI_NODATA or EAI_NONAME. This is not a standard POSIX error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPERM (Operation not permitted): An attempt was made to perform an\noperation that requires elevated privileges.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPIPE (Broken pipe): A write on a pipe, socket, or FIFO for which there is\nno process to read the data. Commonly encountered at the net and\nhttp layers, indicative that the remote side of the stream being\nwritten to has been closed.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ETIMEDOUT (Operation timed out): A connect or send request failed because\nthe connected party did not properly respond after a period of time. Usually\nencountered by http or net. Often a sign that a socket.end()\nwas not properly called.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                      This is a list of system errors commonly-encountered when writing a Node.js\nprogram. For a comprehensive list, see the errno(3) man page.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EACCES (Permission denied): An attempt was made to access a file in a way\nforbidden by its file access permissions.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EADDRINUSE (Address already in use): An attempt to bind a server\n(net, http, or https) to a local address failed due to\nanother server on the local system already occupying that address.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNREFUSED (Connection refused): No connection could be made because the\ntarget machine actively refused it. This usually results from trying to\nconnect to a service that is inactive on the foreign host.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ECONNRESET (Connection reset by peer): A connection was forcibly closed by\na peer. This normally results from a loss of the connection on the remote\nsocket due to a timeout or reboot. Commonly encountered via the http\nand net modules.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EEXIST (File exists): An existing file was the target of an operation that\nrequired that the target not exist.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EISDIR (Is a directory): An operation expected a file, but the given\npathname was a directory.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EMFILE (Too many open files in system): Maximum number of\nfile descriptors allowable on the system has been reached, and\nrequests for another descriptor cannot be fulfilled until at least one\nhas been closed. This is encountered when opening many files at once in\nparallel, especially on systems (in particular, macOS) where there is a low\nfile descriptor limit for processes. To remedy a low limit, run\nulimit -n 2048 in the same shell that will run the Node.js process.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOENT (No such file or directory): Commonly raised by fs operations\nto indicate that a component of the specified pathname does not exist. No\nentity (file or directory) could be found by the given path.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTDIR (Not a directory): A component of the given pathname existed, but\nwas not a directory as expected. Commonly raised by fs.readdir.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTEMPTY (Directory not empty): A directory with entries was the target\nof an operation that requires an empty directory, usually fs.unlink.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ENOTFOUND (DNS lookup failed): Indicates a DNS failure of either\nEAI_NODATA or EAI_NONAME. This is not a standard POSIX error.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPERM (Operation not permitted): An attempt was made to perform an\noperation that requires elevated privileges.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        EPIPE (Broken pipe): A write on a pipe, socket, or FIFO for which there is\nno process to read the data. Commonly encountered at the net and\nhttp layers, indicative that the remote side of the stream being\nwritten to has been closed.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                        ETIMEDOUT (Operation timed out): A connect or send request failed because\nthe connected party did not properly respond after a period of time. Usually\nencountered by http or net. Often a sign that a socket.end()\nwas not properly called.

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Common System Errors" + "displayName": "Common system errors" } ] }, @@ -2712,7 +2670,7 @@ "textRaw": "Class: `TypeError`", "type": "class", "name": "TypeError", - "desc": "\n

                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example,\npassing a function to a parameter which expects a string would be considered\na TypeError.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('url').parse(() => { });\n// Throws TypeError, since it expected a string.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form\nof argument validation.

                                                                                                                                                                                                                                                      " + "desc": "\n

                                                                                                                                                                                                                                                      Indicates that a provided argument is not an allowable type. For example,\npassing a function to a parameter which expects a string would be a TypeError.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      require('url').parse(() => { });\n// Throws TypeError, since it expected a string.\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Node.js will generate and throw TypeError instances immediately as a form\nof argument validation.

                                                                                                                                                                                                                                                      " } ] } diff -Nru nodejs-mozilla-12.18.1/doc/api/errors.md nodejs-mozilla-12.22.12/doc/api/errors.md --- nodejs-mozilla-12.18.1/doc/api/errors.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/errors.md 2022-04-05 07:17:04.000000000 +0000 @@ -16,11 +16,11 @@ Node.js detects an exceptional logic violation that should never occur. These are raised typically by the `assert` module. -All JavaScript and System errors raised by Node.js inherit from, or are +All JavaScript and system errors raised by Node.js inherit from, or are instances of, the standard JavaScript {Error} class and are guaranteed to provide *at least* the properties available on that class. -## Error Propagation and Interception +## Error propagation and interception @@ -186,7 +186,7 @@ detailing the point in the code at which the `Error` was instantiated, and may provide a text description of the error. -All errors generated by Node.js, including all System and JavaScript errors, +All errors generated by Node.js, including all system and JavaScript errors, will either be instances of, or inherit from, the `Error` class. ### `new Error(message)` @@ -224,7 +224,7 @@ generated stack trace. The `constructorOpt` argument is useful for hiding implementation -details of error generation from an end user. For instance: +details of error generation from the user. For instance: ```js function MyError() { @@ -258,7 +258,7 @@ The `error.code` property is a string label that identifies the kind of error. `error.code` is the most stable way to identify an error. It will only change between major versions of Node.js. In contrast, `error.message` strings may -change between any versions of Node.js. See [Node.js Error Codes][] for details +change between any versions of Node.js. See [Node.js error codes][] for details about specific codes. ### `error.message` @@ -285,7 +285,7 @@ The `error.stack` property is a string describing the point in the code at which the `Error` was instantiated. -```txt +```console Error: Things keep happening! at /home/gbusey/file.js:525:2 at Frobnicator.refrobulate (/home/gbusey/business-logic.js:424:21) @@ -391,8 +391,7 @@ ``` Unless an application is dynamically generating and running code, -`ReferenceError` instances should always be considered a bug in the code -or its dependencies. +`ReferenceError` instances indicate a bug in the code or its dependencies. ## Class: `SyntaxError` @@ -495,7 +494,7 @@ The `error.syscall` property is a string describing the [syscall][] that failed. -### Common System Errors +### Common system errors This is a list of system errors commonly-encountered when writing a Node.js program. For a comprehensive list, see the [`errno`(3) man page][]. @@ -561,8 +560,7 @@ * Extends {errors.Error} Indicates that a provided argument is not an allowable type. For example, -passing a function to a parameter which expects a string would be considered -a `TypeError`. +passing a function to a parameter which expects a string would be a `TypeError`. ```js require('url').parse(() => { }); @@ -572,7 +570,7 @@ Node.js will generate and throw `TypeError` instances *immediately* as a form of argument validation. -## Exceptions vs. Errors +## Exceptions vs. errors @@ -586,7 +584,7 @@ will *always* cause the Node.js process to crash. Examples include `assert()` checks or `abort()` calls in the C++ layer. -## OpenSSL Errors +## OpenSSL errors Errors originating in `crypto` or `tls` are of class `Error`, and in addition to the standard `.code` and `.message` properties, may have some additional @@ -610,7 +608,7 @@ A human-readable string describing the reason for the error. -## Node.js Error Codes +## Node.js error codes ### `ERR_AMBIGUOUS_ARGUMENT` @@ -1209,6 +1207,13 @@ The `--input-type` flag was used to attempt to execute a file. This flag can only be used with input via `--eval`, `--print` or `STDIN`. + +### `ERR_INSPECTOR_ALREADY_ACTIVATED` + +While using the `inspector` module, an attempt was made to activate the +inspector when it already started to listen on a port. Use `inspector.close()` +before activating it on a different address. + ### `ERR_INSPECTOR_ALREADY_CONNECTED` @@ -1352,13 +1357,13 @@ ### `ERR_INVALID_PACKAGE_CONFIG` -An invalid `package.json` file was found which failed parsing. +An invalid [`package.json`][] file was found which failed parsing. ### `ERR_INVALID_PACKAGE_TARGET` -The `package.json` [exports][] field contains an invalid target mapping value -for the attempted module resolution. +The `package.json` [`"exports"`][] field contains an invalid target mapping +value for the attempted module resolution. ### `ERR_INVALID_PERFORMANCE_MARK` @@ -1534,6 +1539,17 @@ An attempt was made to allocate memory (usually in the C++ layer) but it failed. + +### `ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE` + + +A message posted to a [`MessagePort`][] could not be deserialized in the target +[vm][] `Context`. Not all Node.js objects can be successfully instantiated in +any context at this time, and attempting to transfer them using `postMessage()` +can fail on the receiving side in that case. + ### `ERR_METHOD_NOT_IMPLEMENTED` @@ -1565,8 +1581,9 @@ ### `ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST` -A `MessagePort` was found in the object passed to a `postMessage()` call, -but not provided in the `transferList` for that call. +An object that needs to be explicitly listed in the `transferList` argument +was found in the object passed to a `postMessage()` call, but not provided in +the `transferList` for that call. Usually, this is a `MessagePort`. ### `ERR_MISSING_PASSPHRASE` @@ -1666,10 +1683,16 @@ A given value is out of the accepted range. + +### `ERR_PACKAGE_IMPORT_NOT_DEFINED` + +The `package.json` [`"imports"`][] field does not define the given internal +package specifier mapping. + ### `ERR_PACKAGE_PATH_NOT_EXPORTED` -The `package.json` [exports][] field does not export the requested subpath. +The `package.json` [`"exports"`][] field does not export the requested subpath. Because exports are encapsulated, private internal modules that are not exported cannot be imported through the package resolution, unless using an absolute URL. @@ -1691,8 +1714,8 @@ ### `ERR_SCRIPT_EXECUTION_INTERRUPTED` -Script execution was interrupted by `SIGINT` (For example, when Ctrl+C was -pressed). +Script execution was interrupted by `SIGINT` (For example, +Ctrl+C was pressed.) ### `ERR_SCRIPT_EXECUTION_TIMEOUT` @@ -1846,6 +1869,14 @@ process. The error object will have an `err.info` object property with additional details. + +### `ERR_TLS_CERT_ALTNAME_FORMAT` + +This error is thrown by `checkServerIdentity` if a user-supplied +`subjectaltname` property violates encoding rules. Certificate objects produced +by Node.js itself always comply with encoding rules and will never cause +this error. + ### `ERR_TLS_CERT_ALTNAME_INVALID` @@ -1924,7 +1955,7 @@ socket, which is only valid from a client. -### ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED +### `ERR_TLS_PSK_SET_IDENTIY_HINT_FAILED` Failed to set PSK identity hint. Hint may be too long. @@ -1965,6 +1996,12 @@ The initialization of a TTY failed due to a system error. + +### `ERR_UNAVAILABLE_DURING_EXIT` + +Function was called within a [`process.on('exit')`][] handler that shouldn't be +called within [`process.on('exit')`][] handler. + ### `ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET` @@ -2026,9 +2063,9 @@ ### `ERR_UNSUPPORTED_DIR_IMPORT` -`import` a directory URL is unsupported. Instead, you can +`import` a directory URL is unsupported. Instead, [self-reference a package using its name][] and [define a custom subpath][] in -the `"exports"` field of the `package.json` file. +the [`"exports"`][] field of the [`package.json`][] file. ```js @@ -2042,11 +2079,6 @@ `import` with URL schemes other than `file` and `data` is unsupported. - -### `ERR_V8BREAKITERATOR` - -The V8 `BreakIterator` API was used but the full ICU data set is not installed. - ### `ERR_VALID_PERFORMANCE_ENTRY_TYPE` @@ -2172,6 +2204,17 @@ HTTP parsing will abort without a request or response object being created, and an `Error` with this code will be emitted. + +### `HPE_UNEXPECTED_CONTENT_LENGTH` + +Server is sending both a `Content-Length` header and `Transfer-Encoding: chunked`. + +`Transfer-Encoding: chunked` allows the server to maintain an HTTP persistent +connection for dynamically generated content. +In this case, the `Content-Length` HTTP header cannot be used. + +Use `Content-Length` or `Transfer-Encoding: chunked`. + ### `MODULE_NOT_FOUND` +

                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      Enabling#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Experimental support for ECMAScript modules is enabled by default. -Node.js will treat the following as ES modules when passed to node as the -initial input, or when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        Files ending in .mjs.

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        Files ending in .js when the nearest parent package.json file contains a -top-level field "type" with a value of "module".

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        Strings passed in as an argument to --eval or --print, or piped to -node via STDIN, with the flag --input-type=module.

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Node.js will treat as CommonJS all other forms of input, such as .js files -where the nearest parent package.json file contains no top-level "type" -field, or string input without the flag --input-type. This behavior is to -preserve backward compatibility. However, now that Node.js supports both -CommonJS and ES modules, it is best to be explicit whenever possible. Node.js -will treat the following as CommonJS when passed to node as the initial input, -or when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        Files ending in .cjs.

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        Files ending in .js when the nearest parent package.json file contains a -top-level field "type" with a value of "commonjs".

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        Strings passed in as an argument to --eval or --print, or piped to -node via STDIN, with the flag --input-type=commonjs.

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      package.json "type" field#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Files ending with .js will be loaded as ES modules when the nearest parent -package.json file contains a top-level field "type" with a value of -"module".

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      The nearest parent package.json is defined as the first package.json found -when searching in the current folder, that folder’s parent, and so on up -until the root of the volume is reached.

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      // package.json
                                                                                                                                                                                                                                                      -{
                                                                                                                                                                                                                                                      -  "type": "module"
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      # In same folder as above package.json
                                                                                                                                                                                                                                                      -node my-app.js # Runs as ES module
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      If the nearest parent package.json lacks a "type" field, or contains -"type": "commonjs", .js files are treated as CommonJS. If the volume root is -reached and no package.json is found, Node.js defers to the default, a -package.json with no "type" field.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      import statements of .js files are treated as ES modules if the nearest -parent package.json contains "type": "module".

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // my-app.js, part of the same example as above
                                                                                                                                                                                                                                                      -import './startup.js'; // Loaded as ES module because of package.json
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Package authors should include the "type" field, even in packages where all -sources are CommonJS. Being explicit about the type of the package will -future-proof the package in case the default type of Node.js ever changes, and -it will also make things easier for build tools and loaders to determine how the -files in the package should be interpreted.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Regardless of the value of the "type" field, .mjs files are always treated -as ES modules and .cjs files are always treated as CommonJS.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Package Scope and File Extensions#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      A folder containing a package.json file, and all subfolders below that folder -down until the next folder containing another package.json, is considered a -package scope. The "type" field defines how .js files should be treated -within a particular package.json file’s package scope. Every package in a -project’s node_modules folder contains its own package.json file, so each -project’s dependencies have their own package scopes. A package.json lacking a -"type" field is treated as if it contained "type": "commonjs".

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      The package scope applies not only to initial entry points (node my-app.js) -but also to files referenced by import statements and import() expressions.

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // my-app.js, in an ES module package scope because there is a package.json
                                                                                                                                                                                                                                                      -// file in the same folder with "type": "module".
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -import './startup/init.js';
                                                                                                                                                                                                                                                      -// Loaded as ES module since ./startup contains no package.json file,
                                                                                                                                                                                                                                                      -// and therefore inherits the ES module package scope from one level up.
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -import 'commonjs-package';
                                                                                                                                                                                                                                                      -// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
                                                                                                                                                                                                                                                      -// lacks a "type" field or contains "type": "commonjs".
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -import './node_modules/commonjs-package/index.js';
                                                                                                                                                                                                                                                      -// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
                                                                                                                                                                                                                                                      -// lacks a "type" field or contains "type": "commonjs".
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Files ending with .mjs are always loaded as ES modules regardless of package -scope.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Files ending with .cjs are always loaded as CommonJS regardless of package -scope.

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      import './legacy-file.cjs';
                                                                                                                                                                                                                                                      -// Loaded as CommonJS since .cjs is always loaded as CommonJS.
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -import 'commonjs-package/src/index.mjs';
                                                                                                                                                                                                                                                      -// Loaded as ES module since .mjs is always loaded as ES module.
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      The .mjs and .cjs extensions may be used to mix types within the same -package scope:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        Within a "type": "module" package scope, Node.js can be instructed to -interpret a particular file as CommonJS by naming it with a .cjs extension -(since both .js and .mjs files are treated as ES modules within a -"module" package scope).

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        Within a "type": "commonjs" package scope, Node.js can be instructed to -interpret a particular file as an ES module by naming it with an .mjs -extension (since both .js and .cjs files are treated as CommonJS within a -"commonjs" package scope).

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      --input-type flag#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Strings passed in as an argument to --eval or --print (or -e or -p), or -piped to node via STDIN, will be treated as ES modules when the ---input-type=module flag is set.

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      node --input-type=module --eval "import { sep } from 'path'; console.log(sep);"
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -echo "import { sep } from 'path'; console.log(sep);" | node --input-type=module
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      For completeness there is also --input-type=commonjs, for explicitly running -string input as CommonJS. This is the default behavior if --input-type is -unspecified.

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Node.js treats JavaScript code as CommonJS modules by default. +Authors can tell Node.js to treat JavaScript code as ECMAScript modules +via the .mjs file extension, the package.json "type" field, or the +--input-type flag. See +Modules: Packages for more +details.

                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      + + + + + + + + + + + + +

                                                                                                                                                                                                                                                      Packages#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Package Entry Points#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      In a package’s package.json file, two fields can define entry points for a -package: "main" and "exports". The "main" field is supported in all -versions of Node.js, but its capabilities are limited: it only defines the main -entry point of the package.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      The "exports" field provides an alternative to "main" where the package -main entry point can be defined while also encapsulating the package, -preventing any other entry points besides those defined in "exports". -This encapsulation allows module authors to define a public interface for -their package.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      If both "exports" and "main" are defined, the "exports" field takes -precedence over "main". "exports" are not specific to ES modules or -CommonJS; "main" will be overridden by "exports" if it exists. As such -"main" cannot be used as a fallback for CommonJS but it can be used as a -fallback for legacy versions of Node.js that do not support the "exports" -field.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Conditional Exports can be used within "exports" to define different -package entry points per environment, including whether the package is -referenced via require or via import. For more information about supporting -both CommonJS and ES Modules in a single package please consult -the dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Warning: Introducing the "exports" field prevents consumers of a package -from using any entry points that are not defined, including the package.json -(e.g. require('your-package/package.json'). This will likely be a breaking -change.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      To make the introduction of "exports" non-breaking, ensure that every -previously supported entry point is exported. It is best to explicitly specify -entry points so that the package’s public API is well-defined. For example, -a project that previous exported main, lib, -feature, and the package.json could use the following package.exports:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "name": "my-mod",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    ".": "./lib/index.js",
                                                                                                                                                                                                                                                      -    "./lib": "./lib/index.js",
                                                                                                                                                                                                                                                      -    "./lib/index": "./lib/index.js",
                                                                                                                                                                                                                                                      -    "./lib/index.js": "./lib/index.js",
                                                                                                                                                                                                                                                      -    "./feature": "./feature/index.js",
                                                                                                                                                                                                                                                      -    "./feature/index.js": "./feature/index.js",
                                                                                                                                                                                                                                                      -    "./package.json": "./package.json"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Alternatively a project could choose to export entire folders:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "name": "my-mod",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    ".": "./lib/index.js",
                                                                                                                                                                                                                                                      -    "./lib": "./lib/index.js",
                                                                                                                                                                                                                                                      -    "./lib/": "./lib/",
                                                                                                                                                                                                                                                      -    "./feature": "./feature/index.js",
                                                                                                                                                                                                                                                      -    "./feature/": "./feature/",
                                                                                                                                                                                                                                                      -    "./package.json": "./package.json"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      As a last resort, package encapsulation can be disabled entirely by creating an -export for the root of the package "./": "./". This will expose every file in -the package at the cost of disabling the encapsulation and potential tooling -benefits this provides. As the ES Module loader in Node.js enforces the use of -the full specifier path, exporting the root rather than being explicit -about entry is less expressive than either of the prior examples. Not only -will encapsulation be lost but module consumers will be unable to -import feature from 'my-mod/feature' as they will need to provide the full -path import feature from 'my-mod/feature/index.js.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Main Entry Point Export#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      To set the main entry point for a package, it is advisable to define both -"exports" and "main" in the package’s package.json file:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "main": "./main.js",
                                                                                                                                                                                                                                                      -  "exports": "./main.js"
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      The benefit of doing this is that when using the "exports" field all -subpaths of the package will no longer be available to importers under -require('pkg/subpath.js'), and instead they will get a new error, -ERR_PACKAGE_PATH_NOT_EXPORTED.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      This encapsulation of exports provides more reliable guarantees -about package interfaces for tools and when handling semver upgrades for a -package. It is not a strong encapsulation since a direct require of any -absolute subpath of the package such as -require('/path/to/node_modules/pkg/subpath.js') will still load subpath.js.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Subpath Exports#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      When using the "exports" field, custom subpaths can be defined along -with the main entry point by treating the main entry point as the -"." subpath:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "main": "./main.js",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    ".": "./main.js",
                                                                                                                                                                                                                                                      -    "./submodule": "./src/submodule.js"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Now only the defined subpath in "exports" can be imported by a -consumer:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      import submodule from 'es-module-package/submodule';
                                                                                                                                                                                                                                                      -// Loads ./node_modules/es-module-package/src/submodule.js
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      While other subpaths will error:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      import submodule from 'es-module-package/private-module.js';
                                                                                                                                                                                                                                                      -// Throws ERR_PACKAGE_PATH_NOT_EXPORTED
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Entire folders can also be mapped with package exports:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      // ./node_modules/es-module-package/package.json
                                                                                                                                                                                                                                                      -{
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    "./features/": "./src/features/"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      With the above, all modules within the ./src/features/ folder -are exposed deeply to import and require:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      import feature from 'es-module-package/features/x.js';
                                                                                                                                                                                                                                                      -// Loads ./node_modules/es-module-package/src/features/x.js
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      When using folder mappings, ensure that you do want to expose every -module inside the subfolder. Any modules which are not public -should be moved to another folder to retain the encapsulation -benefits of exports.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Package Exports Fallbacks#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      For possible new specifier support in future, array fallbacks are -supported for all invalid specifiers:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    "./submodule": ["not:valid", "./submodule.js"]
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Since "not:valid" is not a valid specifier, "./submodule.js" is used -instead as the fallback, as if it were the only target.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Exports Sugar#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      If the "." export is the only export, the "exports" field provides sugar -for this case being the direct "exports" field value.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      If the "." export has a fallback array or string value, then the "exports" -field can be set to this value directly.

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    ".": "./main.js"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      can be written:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "exports": "./main.js"
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Conditional Exports#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Conditional exports provide a way to map to different paths depending on -certain conditions. They are supported for both CommonJS and ES module imports.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      For example, a package that wants to provide different ES module exports for -require() and import can be written:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      // package.json
                                                                                                                                                                                                                                                      -{
                                                                                                                                                                                                                                                      -  "main": "./main-require.cjs",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    "import": "./main-module.js",
                                                                                                                                                                                                                                                      -    "require": "./main-require.cjs"
                                                                                                                                                                                                                                                      -  },
                                                                                                                                                                                                                                                      -  "type": "module"
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Node.js supports the following conditions:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • "import" - matched when the package is loaded via import or -import(). Can reference either an ES module or CommonJS file, as both -import and import() can load either ES module or CommonJS sources.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • "require" - matched when the package is loaded via require(). -As require() only supports CommonJS, the referenced file must be CommonJS.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • "node" - matched for any Node.js environment. Can be a CommonJS or ES -module file. This condition should always come after "import" or -"require".
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • "default" - the generic fallback that will always match. Can be a CommonJS -or ES module file. This condition should always come last.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Condition matching is applied in object order from first to last within the -"exports" object. The general rule is that conditions should be used -from most specific to least specific in object order.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Other conditions such as "browser", "electron", "deno", "react-native", -etc. are ignored by Node.js but may be used by other runtimes or tools. -Further restrictions, definitions or guidance on condition names may be -provided in the future.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Using the "import" and "require" conditions can lead to some hazards, -which are explained further in -the dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Conditional exports can also be extended to exports subpaths, for example:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "main": "./main.js",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    ".": "./main.js",
                                                                                                                                                                                                                                                      -    "./feature": {
                                                                                                                                                                                                                                                      -      "browser": "./feature-browser.js",
                                                                                                                                                                                                                                                      -      "default": "./feature.js"
                                                                                                                                                                                                                                                      -    }
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Defines a package where require('pkg/feature') and import 'pkg/feature' -could provide different implementations between the browser and Node.js, -given third-party tool support for a "browser" condition.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Nested conditions#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      In addition to direct mappings, Node.js also supports nested condition objects.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      For example, to define a package that only has dual mode entry points for -use in Node.js but not the browser:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                      -  "main": "./main.js",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    "browser": "./feature-browser.mjs",
                                                                                                                                                                                                                                                      -    "node": {
                                                                                                                                                                                                                                                      -      "import": "./feature-node.mjs",
                                                                                                                                                                                                                                                      -      "require": "./feature-node.cjs"
                                                                                                                                                                                                                                                      -    }
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Conditions continue to be matched in order as with flat conditions. If -a nested conditional does not have any mapping it will continue checking -the remaining conditions of the parent condition. In this way nested -conditions behave analogously to nested JavaScript if statements.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Self-referencing a package using its name#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Within a package, the values defined in the package’s -package.json "exports" field can be referenced via the package’s name. -For example, assuming the package.json is:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // package.json
                                                                                                                                                                                                                                                      -{
                                                                                                                                                                                                                                                      -  "name": "a-package",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    ".": "./main.mjs",
                                                                                                                                                                                                                                                      -    "./foo": "./foo.js"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Then any module in that package can reference an export in the package itself:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // ./a-module.mjs
                                                                                                                                                                                                                                                      -import { something } from 'a-package'; // Imports "something" from ./main.mjs.
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Self-referencing is available only if package.json has exports, and will -allow importing only what that exports (in the package.json) allows. -So the code below, given the package above, will generate a runtime error:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // ./another-module.mjs
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -// Imports "another" from ./m.mjs. Fails because
                                                                                                                                                                                                                                                      -// the "package.json" "exports" field
                                                                                                                                                                                                                                                      -// does not provide an export named "./m.mjs".
                                                                                                                                                                                                                                                      -import { another } from 'a-package/m.mjs';
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Self-referencing is also available when using require, both in an ES module, -and in a CommonJS one. For example, this code will also work:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // ./a-module.js
                                                                                                                                                                                                                                                      -const { something } = require('a-package/foo'); // Loads from ./foo.js.
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Dual CommonJS/ES Module Packages#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Prior to the introduction of support for ES modules in Node.js, it was a common -pattern for package authors to include both CommonJS and ES module JavaScript -sources in their package, with package.json "main" specifying the CommonJS -entry point and package.json "module" specifying the ES module entry point. -This enabled Node.js to run the CommonJS entry point while build tools such as -bundlers used the ES module entry point, since Node.js ignored (and still -ignores) the top-level "module" field.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Node.js can now run ES module entry points, and a package can contain both -CommonJS and ES module entry points (either via separate specifiers such as -'pkg' and 'pkg/es-module', or both at the same specifier via Conditional -Exports). Unlike in the scenario where "module" is only used by bundlers, -or ES module files are transpiled into CommonJS on the fly before evaluation by -Node.js, the files referenced by the ES module entry point are evaluated as ES -modules.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Dual Package Hazard#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      When an application is using a package that provides both CommonJS and ES module -sources, there is a risk of certain bugs if both versions of the package get -loaded. This potential comes from the fact that the pkgInstance created by -const pkgInstance = require('pkg') is not the same as the pkgInstance -created by import pkgInstance from 'pkg' (or an alternative main path like -'pkg/module'). This is the “dual package hazard,” where two versions of the -same package can be loaded within the same runtime environment. While it is -unlikely that an application or package would intentionally load both versions -directly, it is common for an application to load one version while a dependency -of the application loads the other version. This hazard can happen because -Node.js supports intermixing CommonJS and ES modules, and can lead to unexpected -behavior.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      If the package main export is a constructor, an instanceof comparison of -instances created by the two versions returns false, and if the export is an -object, properties added to one (like pkgInstance.foo = 3) are not present on -the other. This differs from how import and require statements work in -all-CommonJS or all-ES module environments, respectively, and therefore is -surprising to users. It also differs from the behavior users are familiar with -when using transpilation via tools like Babel or esm.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Writing Dual Packages While Avoiding or Minimizing Hazards#

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      First, the hazard described in the previous section occurs when a package -contains both CommonJS and ES module sources and both sources are provided for -use in Node.js, either via separate main entry points or exported paths. A -package could instead be written where any version of Node.js receives only -CommonJS sources, and any separate ES module sources the package may contain -could be intended only for other environments such as browsers. Such a package -would be usable by any version of Node.js, since import can refer to CommonJS -files; but it would not provide any of the advantages of using ES module syntax.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      A package could also switch from CommonJS to ES module syntax in a breaking -change version bump. This has the disadvantage that the newest version -of the package would only be usable in ES module-supporting versions of Node.js.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Every pattern has tradeoffs, but there are two broad approaches that satisfy the -following conditions:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      1. The package is usable via both require and import.
                                                                                                                                                                                                                                                      2. -
                                                                                                                                                                                                                                                      3. The package is usable in both current Node.js and older versions of Node.js -that lack support for ES modules.
                                                                                                                                                                                                                                                      4. -
                                                                                                                                                                                                                                                      5. The package main entry point, e.g. 'pkg' can be used by both require to -resolve to a CommonJS file and by import to resolve to an ES module file. -(And likewise for exported paths, e.g. 'pkg/feature'.)
                                                                                                                                                                                                                                                      6. -
                                                                                                                                                                                                                                                      7. The package provides named exports, e.g. import { name } from 'pkg' rather -than import pkg from 'pkg'; pkg.name.
                                                                                                                                                                                                                                                      8. -
                                                                                                                                                                                                                                                      9. The package is potentially usable in other ES module environments such as -browsers.
                                                                                                                                                                                                                                                      10. -
                                                                                                                                                                                                                                                      11. The hazards described in the previous section are avoided or minimized.
                                                                                                                                                                                                                                                      12. -
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      Approach #1: Use an ES Module Wrapper#
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Write the package in CommonJS or transpile ES module sources into CommonJS, and -create an ES module wrapper file that defines the named exports. Using -Conditional Exports, the ES module wrapper is used for import and the -CommonJS entry point for require.

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json
                                                                                                                                                                                                                                                      -{
                                                                                                                                                                                                                                                      -  "type": "module",
                                                                                                                                                                                                                                                      -  "main": "./index.cjs",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    "import": "./wrapper.mjs",
                                                                                                                                                                                                                                                      -    "require": "./index.cjs"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // ./node_modules/pkg/index.cjs
                                                                                                                                                                                                                                                      -exports.name = 'value';
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // ./node_modules/pkg/wrapper.mjs
                                                                                                                                                                                                                                                      -import cjsModule from './index.cjs';
                                                                                                                                                                                                                                                      -export const name = cjsModule.name;
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      In this example, the name from import { name } from 'pkg' is the same -singleton as the name from const { name } = require('pkg'). Therefore === -returns true when comparing the two names and the divergent specifier hazard -is avoided.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      If the module is not simply a list of named exports, but rather contains a -unique function or object export like module.exports = function () { ... }, -or if support in the wrapper for the import pkg from 'pkg' pattern is desired, -then the wrapper would instead be written to export the default optionally -along with any named exports as well:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      import cjsModule from './index.cjs';
                                                                                                                                                                                                                                                      -export const name = cjsModule.name;
                                                                                                                                                                                                                                                      -export default cjsModule;
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • The package is currently written in CommonJS and the author would prefer not -to refactor it into ES module syntax, but wishes to provide named exports for -ES module consumers.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • The package has other packages that depend on it, and the end user might -install both this package and those other packages. For example a utilities -package is used directly in an application, and a utilities-plus package -adds a few more functions to utilities. Because the wrapper exports -underlying CommonJS files, it doesn’t matter if utilities-plus is written in -CommonJS or ES module syntax; it will work either way.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • The package stores internal state, and the package author would prefer not to -refactor the package to isolate its state management. See the next section.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      A variant of this approach not requiring conditional exports for consumers could -be to add an export, e.g. "./module", to point to an all-ES module-syntax -version of the package. This could be used via import 'pkg/module' by users -who are certain that the CommonJS version will not be loaded anywhere in the -application, such as by dependencies; or if the CommonJS version can be loaded -but doesn’t affect the ES module version (for example, because the package is -stateless):

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json
                                                                                                                                                                                                                                                      -{
                                                                                                                                                                                                                                                      -  "type": "module",
                                                                                                                                                                                                                                                      -  "main": "./index.cjs",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    ".": "./index.cjs",
                                                                                                                                                                                                                                                      -    "./module": "./wrapper.mjs"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      Approach #2: Isolate State#
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      A package.json file can define the separate CommonJS and ES module entry -points directly:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json
                                                                                                                                                                                                                                                      -{
                                                                                                                                                                                                                                                      -  "type": "module",
                                                                                                                                                                                                                                                      -  "main": "./index.cjs",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    "import": "./index.mjs",
                                                                                                                                                                                                                                                      -    "require": "./index.cjs"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      This can be done if both the CommonJS and ES module versions of the package are -equivalent, for example because one is the transpiled output of the other; and -the package’s management of state is carefully isolated (or the package is -stateless).

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      The reason that state is an issue is because both the CommonJS and ES module -versions of the package may get used within an application; for example, the -user’s application code could import the ES module version while a dependency -requires the CommonJS version. If that were to occur, two copies of the -package would be loaded in memory and therefore two separate states would be -present. This would likely cause hard-to-troubleshoot bugs.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Aside from writing a stateless package (if JavaScript’s Math were a package, -for example, it would be stateless as all of its methods are static), there are -some ways to isolate state so that it’s shared between the potentially loaded -CommonJS and ES module instances of the package:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      1. -

                                                                                                                                                                                                                                                        If possible, contain all state within an instantiated object. JavaScript’s -Date, for example, needs to be instantiated to contain state; if it were a -package, it would be used like this:

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        import Date from 'date';
                                                                                                                                                                                                                                                        -const someDate = new Date();
                                                                                                                                                                                                                                                        -// someDate contains state; Date does not
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                        The new keyword isn’t required; a package’s function can return a new -object, or modify a passed-in object, to keep the state external to the -package.

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      2. -
                                                                                                                                                                                                                                                      3. -

                                                                                                                                                                                                                                                        Isolate the state in one or more CommonJS files that are shared between the -CommonJS and ES module versions of the package. For example, if the CommonJS -and ES module entry points are index.cjs and index.mjs, respectively:

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        // ./node_modules/pkg/index.cjs
                                                                                                                                                                                                                                                        -const state = require('./state.cjs');
                                                                                                                                                                                                                                                        -module.exports.state = state;
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        // ./node_modules/pkg/index.mjs
                                                                                                                                                                                                                                                        -import state from './state.cjs';
                                                                                                                                                                                                                                                        -export {
                                                                                                                                                                                                                                                        -  state
                                                                                                                                                                                                                                                        -};
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                        Even if pkg is used via both require and import in an application (for -example, via import in application code and via require by a dependency) -each reference of pkg will contain the same state; and modifying that -state from either module system will apply to both.

                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      4. -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Any plugins that attach to the package’s singleton would need to separately -attach to both the CommonJS and ES module singletons.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                      • The package is currently written in ES module syntax and the package author -wants that version to be used wherever such syntax is supported.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • The package is stateless or its state can be isolated without too much -difficulty.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • The package is unlikely to have other public packages that depend on it, or if -it does, the package is stateless or has state that need not be shared between -dependencies or with the overall application.
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      Even with isolated state, there is still the cost of possible extra code -execution between the CommonJS and ES module versions of a package.

                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                      As with the previous approach, a variant of this approach not requiring -conditional exports for consumers could be to add an export, e.g. -"./module", to point to an all-ES module-syntax version of the package:

                                                                                                                                                                                                                                                      - -
                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json
                                                                                                                                                                                                                                                      -{
                                                                                                                                                                                                                                                      -  "type": "module",
                                                                                                                                                                                                                                                      -  "main": "./index.cjs",
                                                                                                                                                                                                                                                      -  "exports": {
                                                                                                                                                                                                                                                      -    ".": "./index.cjs",
                                                                                                                                                                                                                                                      -    "./module": "./index.mjs"
                                                                                                                                                                                                                                                      -  }
                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      This section was moved to Modules: Packages.

                                                                                                                                                                                                                                                      import Specifiers#

                                                                                                                                                                                                                                                      Terminology#

                                                                                                                                                                                                                                                      The specifier of an import statement is the string after the from keyword, @@ -899,11 +294,19 @@

                                                                                                                                                                                                                                                    Bare specifiers, and the bare specifier portion of deep import specifiers, are strings; but everything else in a specifier is a URL.

                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                    Only file: and data: URLs are supported. A specifier like +

                                                                                                                                                                                                                                                    file:, node:, and data: URLs are supported. A specifier like 'https://example.com/app.js' may be supported by browsers but it is not supported in Node.js.

                                                                                                                                                                                                                                                    Specifiers may not begin with / or //. These are reserved for potential future use. The root of the current volume may be referenced via file:///.

                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                    node: Imports#

                                                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                                                    node: URLs are supported as a means to load Node.js builtin modules. This +URL scheme allows for builtin modules to be referenced by valid absolute URL +strings.

                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    import fs from 'node:fs/promises';

                                                                                                                                                                                                                                                    data: Imports#

                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/esm.json nodejs-mozilla-12.22.12/doc/api/esm.json --- nodejs-mozilla-12.18.1/doc/api/esm.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/esm.json 2022-04-05 07:17:04.000000000 +0000 @@ -2,8 +2,46 @@ "type": "module", "source": "doc/api/esm.md", "introduced_in": "v8.5.0", - "stability": 1, - "stabilityText": "Experimental", + "meta": { + "added": [ + "v8.5.0" + ], + "changes": [ + { + "version": [ + "v12.22.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/35781", + "description": "Stabilize modules implementation." + }, + { + "version": [ + "v12.20.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/35249", + "description": "Support for detection of CommonJS named exports." + }, + { + "version": "v12.20.0", + "pr-url": "https://github.com/nodejs/node/pull/31974", + "description": "Remove experimental modules warning." + }, + { + "version": [ + "v12.17.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/29866", + "description": "Loading ECMAScript modules no longer requires a command-line flag." + }, + { + "version": "v12.0.0", + "pr-url": "https://github.com/nodejs/node/pull/26745", + "description": "Add support for ES modules using `.js` file extension via `package.json` `\"type\"` field." + } + ] + }, + "stability": 2, + "stabilityText": "Stable", "properties": [ { "textRaw": "`meta` {Object}", @@ -14,17 +52,55 @@ ], "miscs": [ { - "textRaw": "ECMAScript Modules", - "name": "ECMAScript Modules", + "textRaw": "Modules: ECMAScript modules", + "name": "Modules: ECMAScript modules", "introduced_in": "v8.5.0", "type": "misc", - "stability": 1, - "stabilityText": "Experimental", + "meta": { + "added": [ + "v8.5.0" + ], + "changes": [ + { + "version": [ + "v12.22.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/35781", + "description": "Stabilize modules implementation." + }, + { + "version": [ + "v12.20.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/35249", + "description": "Support for detection of CommonJS named exports." + }, + { + "version": "v12.20.0", + "pr-url": "https://github.com/nodejs/node/pull/31974", + "description": "Remove experimental modules warning." + }, + { + "version": [ + "v12.17.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/29866", + "description": "Loading ECMAScript modules no longer requires a command-line flag." + }, + { + "version": "v12.0.0", + "pr-url": "https://github.com/nodejs/node/pull/26745", + "description": "Add support for ES modules using `.js` file extension via `package.json` `\"type\"` field." + } + ] + }, + "stability": 2, + "stabilityText": "Stable", "miscs": [ { "textRaw": "Introduction", "name": "esm", - "desc": "

                                                                                                                                                                                                                                                    ECMAScript modules are the official standard format to package JavaScript\ncode for reuse. Modules are defined using a variety of import and\nexport statements.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The following example of an ES module exports a function:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // addTwo.mjs\nfunction addTwo(num) {\n  return num + 2;\n}\n\nexport { addTwo };\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The following example of an ES module imports the function from addTwo.mjs:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // app.mjs\nimport { addTwo } from './addTwo.mjs';\n\n// Prints: 6\nconsole.log(addTwo(4));\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Node.js fully supports ECMAScript modules as they are currently specified and\nprovides limited interoperability between them and the existing module format,\nCommonJS.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Node.js contains support for ES Modules based upon the\nNode.js EP for ES Modules and the ECMAScript-modules implementation.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Expect major changes in the implementation including interoperability support,\nspecifier resolution, and default behavior.

                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    ECMAScript modules are the official standard format to package JavaScript\ncode for reuse. Modules are defined using a variety of import and\nexport statements.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The following example of an ES module exports a function:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // addTwo.mjs\nfunction addTwo(num) {\n  return num + 2;\n}\n\nexport { addTwo };\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The following example of an ES module imports the function from addTwo.mjs:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // app.mjs\nimport { addTwo } from './addTwo.mjs';\n\n// Prints: 6\nconsole.log(addTwo(4));\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Node.js fully supports ECMAScript modules as they are currently specified and\nprovides interoperability between them and its original module format,\nCommonJS.

                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    ", "type": "misc", "displayName": "esm" }, @@ -32,133 +108,12 @@ "textRaw": "Enabling", "name": "Enabling", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                    Experimental support for ECMAScript modules is enabled by default.\nNode.js will treat the following as ES modules when passed to node as the\ninitial input, or when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Files ending in .mjs.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Files ending in .js when the nearest parent package.json file contains a\ntop-level field \"type\" with a value of \"module\".

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Strings passed in as an argument to --eval or --print, or piped to\nnode via STDIN, with the flag --input-type=module.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Node.js will treat as CommonJS all other forms of input, such as .js files\nwhere the nearest parent package.json file contains no top-level \"type\"\nfield, or string input without the flag --input-type. This behavior is to\npreserve backward compatibility. However, now that Node.js supports both\nCommonJS and ES modules, it is best to be explicit whenever possible. Node.js\nwill treat the following as CommonJS when passed to node as the initial input,\nor when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Files ending in .cjs.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Files ending in .js when the nearest parent package.json file contains a\ntop-level field \"type\" with a value of \"commonjs\".

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Strings passed in as an argument to --eval or --print, or piped to\nnode via STDIN, with the flag --input-type=commonjs.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    ", - "miscs": [ - { - "textRaw": "`package.json` `\"type\"` field", - "name": "`package.json`_`\"type\"`_field", - "desc": "

                                                                                                                                                                                                                                                    Files ending with .js will be loaded as ES modules when the nearest parent\npackage.json file contains a top-level field \"type\" with a value of\n\"module\".

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The nearest parent package.json is defined as the first package.json found\nwhen searching in the current folder, that folder’s parent, and so on up\nuntil the root of the volume is reached.

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    // package.json\n{\n  \"type\": \"module\"\n}\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    # In same folder as above package.json\nnode my-app.js # Runs as ES module\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If the nearest parent package.json lacks a \"type\" field, or contains\n\"type\": \"commonjs\", .js files are treated as CommonJS. If the volume root is\nreached and no package.json is found, Node.js defers to the default, a\npackage.json with no \"type\" field.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    import statements of .js files are treated as ES modules if the nearest\nparent package.json contains \"type\": \"module\".

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // my-app.js, part of the same example as above\nimport './startup.js'; // Loaded as ES module because of package.json\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Package authors should include the \"type\" field, even in packages where all\nsources are CommonJS. Being explicit about the type of the package will\nfuture-proof the package in case the default type of Node.js ever changes, and\nit will also make things easier for build tools and loaders to determine how the\nfiles in the package should be interpreted.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Regardless of the value of the \"type\" field, .mjs files are always treated\nas ES modules and .cjs files are always treated as CommonJS.

                                                                                                                                                                                                                                                    ", - "type": "misc", - "displayName": "`package.json` `\"type\"` field" - }, - { - "textRaw": "Package Scope and File Extensions", - "name": "package_scope_and_file_extensions", - "desc": "

                                                                                                                                                                                                                                                    A folder containing a package.json file, and all subfolders below that folder\ndown until the next folder containing another package.json, is considered a\npackage scope. The \"type\" field defines how .js files should be treated\nwithin a particular package.json file’s package scope. Every package in a\nproject’s node_modules folder contains its own package.json file, so each\nproject’s dependencies have their own package scopes. A package.json lacking a\n\"type\" field is treated as if it contained \"type\": \"commonjs\".

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The package scope applies not only to initial entry points (node my-app.js)\nbut also to files referenced by import statements and import() expressions.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // my-app.js, in an ES module package scope because there is a package.json\n// file in the same folder with \"type\": \"module\".\n\nimport './startup/init.js';\n// Loaded as ES module since ./startup contains no package.json file,\n// and therefore inherits the ES module package scope from one level up.\n\nimport 'commonjs-package';\n// Loaded as CommonJS since ./node_modules/commonjs-package/package.json\n// lacks a \"type\" field or contains \"type\": \"commonjs\".\n\nimport './node_modules/commonjs-package/index.js';\n// Loaded as CommonJS since ./node_modules/commonjs-package/package.json\n// lacks a \"type\" field or contains \"type\": \"commonjs\".\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Files ending with .mjs are always loaded as ES modules regardless of package\nscope.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Files ending with .cjs are always loaded as CommonJS regardless of package\nscope.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import './legacy-file.cjs';\n// Loaded as CommonJS since .cjs is always loaded as CommonJS.\n\nimport 'commonjs-package/src/index.mjs';\n// Loaded as ES module since .mjs is always loaded as ES module.\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The .mjs and .cjs extensions may be used to mix types within the same\npackage scope:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Within a \"type\": \"module\" package scope, Node.js can be instructed to\ninterpret a particular file as CommonJS by naming it with a .cjs extension\n(since both .js and .mjs files are treated as ES modules within a\n\"module\" package scope).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Within a \"type\": \"commonjs\" package scope, Node.js can be instructed to\ninterpret a particular file as an ES module by naming it with an .mjs\nextension (since both .js and .cjs files are treated as CommonJS within a\n\"commonjs\" package scope).

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    ", - "type": "misc", - "displayName": "Package Scope and File Extensions" - }, - { - "textRaw": "`--input-type` flag", - "name": "`--input-type`_flag", - "desc": "

                                                                                                                                                                                                                                                    Strings passed in as an argument to --eval or --print (or -e or -p), or\npiped to node via STDIN, will be treated as ES modules when the\n--input-type=module flag is set.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    node --input-type=module --eval \"import { sep } from 'path'; console.log(sep);\"\n\necho \"import { sep } from 'path'; console.log(sep);\" | node --input-type=module\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    For completeness there is also --input-type=commonjs, for explicitly running\nstring input as CommonJS. This is the default behavior if --input-type is\nunspecified.

                                                                                                                                                                                                                                                    ", - "type": "misc", - "displayName": "`--input-type` flag" - } - ] + "desc": "

                                                                                                                                                                                                                                                    Node.js treats JavaScript code as CommonJS modules by default.\nAuthors can tell Node.js to treat JavaScript code as ECMAScript modules\nvia the .mjs file extension, the package.json \"type\" field, or the\n--input-type flag. See\nModules: Packages for more\ndetails.

                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    \n\n\n\n\n\n\n\n\n\n\n\n\n

                                                                                                                                                                                                                                                    " }, { "textRaw": "Packages", "name": "packages", - "modules": [ - { - "textRaw": "Package Entry Points", - "name": "package_entry_points", - "desc": "

                                                                                                                                                                                                                                                    In a package’s package.json file, two fields can define entry points for a\npackage: \"main\" and \"exports\". The \"main\" field is supported in all\nversions of Node.js, but its capabilities are limited: it only defines the main\nentry point of the package.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The \"exports\" field provides an alternative to \"main\" where the package\nmain entry point can be defined while also encapsulating the package,\npreventing any other entry points besides those defined in \"exports\".\nThis encapsulation allows module authors to define a public interface for\ntheir package.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If both \"exports\" and \"main\" are defined, the \"exports\" field takes\nprecedence over \"main\". \"exports\" are not specific to ES modules or\nCommonJS; \"main\" will be overridden by \"exports\" if it exists. As such\n\"main\" cannot be used as a fallback for CommonJS but it can be used as a\nfallback for legacy versions of Node.js that do not support the \"exports\"\nfield.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Conditional Exports can be used within \"exports\" to define different\npackage entry points per environment, including whether the package is\nreferenced via require or via import. For more information about supporting\nboth CommonJS and ES Modules in a single package please consult\nthe dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Warning: Introducing the \"exports\" field prevents consumers of a package\nfrom using any entry points that are not defined, including the package.json\n(e.g. require('your-package/package.json'). This will likely be a breaking\nchange.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    To make the introduction of \"exports\" non-breaking, ensure that every\npreviously supported entry point is exported. It is best to explicitly specify\nentry points so that the package’s public API is well-defined. For example,\na project that previous exported main, lib,\nfeature, and the package.json could use the following package.exports:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    {\n  \"name\": \"my-mod\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib\": \"./lib/index.js\",\n    \"./lib/index\": \"./lib/index.js\",\n    \"./lib/index.js\": \"./lib/index.js\",\n    \"./feature\": \"./feature/index.js\",\n    \"./feature/index.js\": \"./feature/index.js\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Alternatively a project could choose to export entire folders:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    {\n  \"name\": \"my-mod\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib\": \"./lib/index.js\",\n    \"./lib/\": \"./lib/\",\n    \"./feature\": \"./feature/index.js\",\n    \"./feature/\": \"./feature/\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    As a last resort, package encapsulation can be disabled entirely by creating an\nexport for the root of the package \"./\": \"./\". This will expose every file in\nthe package at the cost of disabling the encapsulation and potential tooling\nbenefits this provides. As the ES Module loader in Node.js enforces the use of\nthe full specifier path, exporting the root rather than being explicit\nabout entry is less expressive than either of the prior examples. Not only\nwill encapsulation be lost but module consumers will be unable to\nimport feature from 'my-mod/feature' as they will need to provide the full\npath import feature from 'my-mod/feature/index.js.

                                                                                                                                                                                                                                                    ", - "modules": [ - { - "textRaw": "Main Entry Point Export", - "name": "main_entry_point_export", - "desc": "

                                                                                                                                                                                                                                                    To set the main entry point for a package, it is advisable to define both\n\"exports\" and \"main\" in the package’s package.json file:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    {\n  \"main\": \"./main.js\",\n  \"exports\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The benefit of doing this is that when using the \"exports\" field all\nsubpaths of the package will no longer be available to importers under\nrequire('pkg/subpath.js'), and instead they will get a new error,\nERR_PACKAGE_PATH_NOT_EXPORTED.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This encapsulation of exports provides more reliable guarantees\nabout package interfaces for tools and when handling semver upgrades for a\npackage. It is not a strong encapsulation since a direct require of any\nabsolute subpath of the package such as\nrequire('/path/to/node_modules/pkg/subpath.js') will still load subpath.js.

                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Main Entry Point Export" - }, - { - "textRaw": "Subpath Exports", - "name": "subpath_exports", - "desc": "

                                                                                                                                                                                                                                                    When using the \"exports\" field, custom subpaths can be defined along\nwith the main entry point by treating the main entry point as the\n\".\" subpath:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \".\": \"./main.js\",\n    \"./submodule\": \"./src/submodule.js\"\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Now only the defined subpath in \"exports\" can be imported by a\nconsumer:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import submodule from 'es-module-package/submodule';\n// Loads ./node_modules/es-module-package/src/submodule.js\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    While other subpaths will error:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import submodule from 'es-module-package/private-module.js';\n// Throws ERR_PACKAGE_PATH_NOT_EXPORTED\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Entire folders can also be mapped with package exports:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    // ./node_modules/es-module-package/package.json\n{\n  \"exports\": {\n    \"./features/\": \"./src/features/\"\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    With the above, all modules within the ./src/features/ folder\nare exposed deeply to import and require:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import feature from 'es-module-package/features/x.js';\n// Loads ./node_modules/es-module-package/src/features/x.js\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    When using folder mappings, ensure that you do want to expose every\nmodule inside the subfolder. Any modules which are not public\nshould be moved to another folder to retain the encapsulation\nbenefits of exports.

                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Subpath Exports" - }, - { - "textRaw": "Package Exports Fallbacks", - "name": "package_exports_fallbacks", - "desc": "

                                                                                                                                                                                                                                                    For possible new specifier support in future, array fallbacks are\nsupported for all invalid specifiers:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    {\n  \"exports\": {\n    \"./submodule\": [\"not:valid\", \"./submodule.js\"]\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Since \"not:valid\" is not a valid specifier, \"./submodule.js\" is used\ninstead as the fallback, as if it were the only target.

                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Package Exports Fallbacks" - }, - { - "textRaw": "Exports Sugar", - "name": "exports_sugar", - "desc": "

                                                                                                                                                                                                                                                    If the \".\" export is the only export, the \"exports\" field provides sugar\nfor this case being the direct \"exports\" field value.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If the \".\" export has a fallback array or string value, then the \"exports\"\nfield can be set to this value directly.

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    {\n  \"exports\": {\n    \".\": \"./main.js\"\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    can be written:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    {\n  \"exports\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Exports Sugar" - }, - { - "textRaw": "Conditional Exports", - "name": "conditional_exports", - "desc": "

                                                                                                                                                                                                                                                    Conditional exports provide a way to map to different paths depending on\ncertain conditions. They are supported for both CommonJS and ES module imports.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    For example, a package that wants to provide different ES module exports for\nrequire() and import can be written:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    // package.json\n{\n  \"main\": \"./main-require.cjs\",\n  \"exports\": {\n    \"import\": \"./main-module.js\",\n    \"require\": \"./main-require.cjs\"\n  },\n  \"type\": \"module\"\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Node.js supports the following conditions:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \"import\" - matched when the package is loaded via import or\nimport(). Can reference either an ES module or CommonJS file, as both\nimport and import() can load either ES module or CommonJS sources.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \"require\" - matched when the package is loaded via require().\nAs require() only supports CommonJS, the referenced file must be CommonJS.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \"node\" - matched for any Node.js environment. Can be a CommonJS or ES\nmodule file. This condition should always come after \"import\" or\n\"require\".
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \"default\" - the generic fallback that will always match. Can be a CommonJS\nor ES module file. This condition should always come last.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Condition matching is applied in object order from first to last within the\n\"exports\" object. The general rule is that conditions should be used\nfrom most specific to least specific in object order.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Other conditions such as \"browser\", \"electron\", \"deno\", \"react-native\",\netc. are ignored by Node.js but may be used by other runtimes or tools.\nFurther restrictions, definitions or guidance on condition names may be\nprovided in the future.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Using the \"import\" and \"require\" conditions can lead to some hazards,\nwhich are explained further in\nthe dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Conditional exports can also be extended to exports subpaths, for example:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \".\": \"./main.js\",\n    \"./feature\": {\n      \"browser\": \"./feature-browser.js\",\n      \"default\": \"./feature.js\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Defines a package where require('pkg/feature') and import 'pkg/feature'\ncould provide different implementations between the browser and Node.js,\ngiven third-party tool support for a \"browser\" condition.

                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Conditional Exports" - }, - { - "textRaw": "Nested conditions", - "name": "nested_conditions", - "desc": "

                                                                                                                                                                                                                                                    In addition to direct mappings, Node.js also supports nested condition objects.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    For example, to define a package that only has dual mode entry points for\nuse in Node.js but not the browser:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \"browser\": \"./feature-browser.mjs\",\n    \"node\": {\n      \"import\": \"./feature-node.mjs\",\n      \"require\": \"./feature-node.cjs\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Conditions continue to be matched in order as with flat conditions. If\na nested conditional does not have any mapping it will continue checking\nthe remaining conditions of the parent condition. In this way nested\nconditions behave analogously to nested JavaScript if statements.

                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Nested conditions" - }, - { - "textRaw": "Self-referencing a package using its name", - "name": "self-referencing_a_package_using_its_name", - "desc": "

                                                                                                                                                                                                                                                    Within a package, the values defined in the package’s\npackage.json \"exports\" field can be referenced via the package’s name.\nFor example, assuming the package.json is:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // package.json\n{\n  \"name\": \"a-package\",\n  \"exports\": {\n    \".\": \"./main.mjs\",\n    \"./foo\": \"./foo.js\"\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Then any module in that package can reference an export in the package itself:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // ./a-module.mjs\nimport { something } from 'a-package'; // Imports \"something\" from ./main.mjs.\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Self-referencing is available only if package.json has exports, and will\nallow importing only what that exports (in the package.json) allows.\nSo the code below, given the package above, will generate a runtime error:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // ./another-module.mjs\n\n// Imports \"another\" from ./m.mjs. Fails because\n// the \"package.json\" \"exports\" field\n// does not provide an export named \"./m.mjs\".\nimport { another } from 'a-package/m.mjs';\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Self-referencing is also available when using require, both in an ES module,\nand in a CommonJS one. For example, this code will also work:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // ./a-module.js\nconst { something } = require('a-package/foo'); // Loads from ./foo.js.\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Self-referencing a package using its name" - } - ], - "type": "module", - "displayName": "Package Entry Points" - }, - { - "textRaw": "Dual CommonJS/ES Module Packages", - "name": "dual_commonjs/es_module_packages", - "desc": "

                                                                                                                                                                                                                                                    Prior to the introduction of support for ES modules in Node.js, it was a common\npattern for package authors to include both CommonJS and ES module JavaScript\nsources in their package, with package.json \"main\" specifying the CommonJS\nentry point and package.json \"module\" specifying the ES module entry point.\nThis enabled Node.js to run the CommonJS entry point while build tools such as\nbundlers used the ES module entry point, since Node.js ignored (and still\nignores) the top-level \"module\" field.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Node.js can now run ES module entry points, and a package can contain both\nCommonJS and ES module entry points (either via separate specifiers such as\n'pkg' and 'pkg/es-module', or both at the same specifier via Conditional\nExports). Unlike in the scenario where \"module\" is only used by bundlers,\nor ES module files are transpiled into CommonJS on the fly before evaluation by\nNode.js, the files referenced by the ES module entry point are evaluated as ES\nmodules.

                                                                                                                                                                                                                                                    ", - "modules": [ - { - "textRaw": "Dual Package Hazard", - "name": "dual_package_hazard", - "desc": "

                                                                                                                                                                                                                                                    When an application is using a package that provides both CommonJS and ES module\nsources, there is a risk of certain bugs if both versions of the package get\nloaded. This potential comes from the fact that the pkgInstance created by\nconst pkgInstance = require('pkg') is not the same as the pkgInstance\ncreated by import pkgInstance from 'pkg' (or an alternative main path like\n'pkg/module'). This is the “dual package hazard,” where two versions of the\nsame package can be loaded within the same runtime environment. While it is\nunlikely that an application or package would intentionally load both versions\ndirectly, it is common for an application to load one version while a dependency\nof the application loads the other version. This hazard can happen because\nNode.js supports intermixing CommonJS and ES modules, and can lead to unexpected\nbehavior.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If the package main export is a constructor, an instanceof comparison of\ninstances created by the two versions returns false, and if the export is an\nobject, properties added to one (like pkgInstance.foo = 3) are not present on\nthe other. This differs from how import and require statements work in\nall-CommonJS or all-ES module environments, respectively, and therefore is\nsurprising to users. It also differs from the behavior users are familiar with\nwhen using transpilation via tools like Babel or esm.

                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Dual Package Hazard" - }, - { - "textRaw": "Writing Dual Packages While Avoiding or Minimizing Hazards", - "name": "writing_dual_packages_while_avoiding_or_minimizing_hazards", - "desc": "

                                                                                                                                                                                                                                                    First, the hazard described in the previous section occurs when a package\ncontains both CommonJS and ES module sources and both sources are provided for\nuse in Node.js, either via separate main entry points or exported paths. A\npackage could instead be written where any version of Node.js receives only\nCommonJS sources, and any separate ES module sources the package may contain\ncould be intended only for other environments such as browsers. Such a package\nwould be usable by any version of Node.js, since import can refer to CommonJS\nfiles; but it would not provide any of the advantages of using ES module syntax.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    A package could also switch from CommonJS to ES module syntax in a breaking\nchange version bump. This has the disadvantage that the newest version\nof the package would only be usable in ES module-supporting versions of Node.js.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Every pattern has tradeoffs, but there are two broad approaches that satisfy the\nfollowing conditions:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. The package is usable via both require and import.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. The package is usable in both current Node.js and older versions of Node.js\nthat lack support for ES modules.
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. The package main entry point, e.g. 'pkg' can be used by both require to\nresolve to a CommonJS file and by import to resolve to an ES module file.\n(And likewise for exported paths, e.g. 'pkg/feature'.)
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. The package provides named exports, e.g. import { name } from 'pkg' rather\nthan import pkg from 'pkg'; pkg.name.
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. The package is potentially usable in other ES module environments such as\nbrowsers.
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. The hazards described in the previous section are avoided or minimized.
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    ", - "modules": [ - { - "textRaw": "Approach #1: Use an ES Module Wrapper", - "name": "approach_#1:_use_an_es_module_wrapper", - "desc": "

                                                                                                                                                                                                                                                    Write the package in CommonJS or transpile ES module sources into CommonJS, and\ncreate an ES module wrapper file that defines the named exports. Using\nConditional Exports, the ES module wrapper is used for import and the\nCommonJS entry point for require.

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \"import\": \"./wrapper.mjs\",\n    \"require\": \"./index.cjs\"\n  }\n}\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // ./node_modules/pkg/index.cjs\nexports.name = 'value';\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // ./node_modules/pkg/wrapper.mjs\nimport cjsModule from './index.cjs';\nexport const name = cjsModule.name;\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    In this example, the name from import { name } from 'pkg' is the same\nsingleton as the name from const { name } = require('pkg'). Therefore ===\nreturns true when comparing the two names and the divergent specifier hazard\nis avoided.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If the module is not simply a list of named exports, but rather contains a\nunique function or object export like module.exports = function () { ... },\nor if support in the wrapper for the import pkg from 'pkg' pattern is desired,\nthen the wrapper would instead be written to export the default optionally\nalong with any named exports as well:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import cjsModule from './index.cjs';\nexport const name = cjsModule.name;\nexport default cjsModule;\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • The package is currently written in CommonJS and the author would prefer not\nto refactor it into ES module syntax, but wishes to provide named exports for\nES module consumers.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • The package has other packages that depend on it, and the end user might\ninstall both this package and those other packages. For example a utilities\npackage is used directly in an application, and a utilities-plus package\nadds a few more functions to utilities. Because the wrapper exports\nunderlying CommonJS files, it doesn’t matter if utilities-plus is written in\nCommonJS or ES module syntax; it will work either way.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • The package stores internal state, and the package author would prefer not to\nrefactor the package to isolate its state management. See the next section.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    A variant of this approach not requiring conditional exports for consumers could\nbe to add an export, e.g. \"./module\", to point to an all-ES module-syntax\nversion of the package. This could be used via import 'pkg/module' by users\nwho are certain that the CommonJS version will not be loaded anywhere in the\napplication, such as by dependencies; or if the CommonJS version can be loaded\nbut doesn’t affect the ES module version (for example, because the package is\nstateless):

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \".\": \"./index.cjs\",\n    \"./module\": \"./wrapper.mjs\"\n  }\n}\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Approach #1: Use an ES Module Wrapper" - }, - { - "textRaw": "Approach #2: Isolate State", - "name": "approach_#2:_isolate_state", - "desc": "

                                                                                                                                                                                                                                                    A package.json file can define the separate CommonJS and ES module entry\npoints directly:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \"import\": \"./index.mjs\",\n    \"require\": \"./index.cjs\"\n  }\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This can be done if both the CommonJS and ES module versions of the package are\nequivalent, for example because one is the transpiled output of the other; and\nthe package’s management of state is carefully isolated (or the package is\nstateless).

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The reason that state is an issue is because both the CommonJS and ES module\nversions of the package may get used within an application; for example, the\nuser’s application code could import the ES module version while a dependency\nrequires the CommonJS version. If that were to occur, two copies of the\npackage would be loaded in memory and therefore two separate states would be\npresent. This would likely cause hard-to-troubleshoot bugs.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Aside from writing a stateless package (if JavaScript’s Math were a package,\nfor example, it would be stateless as all of its methods are static), there are\nsome ways to isolate state so that it’s shared between the potentially loaded\nCommonJS and ES module instances of the package:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. \n

                                                                                                                                                                                                                                                      If possible, contain all state within an instantiated object. JavaScript’s\nDate, for example, needs to be instantiated to contain state; if it were a\npackage, it would be used like this:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      import Date from 'date';\nconst someDate = new Date();\n// someDate contains state; Date does not\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      The new keyword isn’t required; a package’s function can return a new\nobject, or modify a passed-in object, to keep the state external to the\npackage.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. \n

                                                                                                                                                                                                                                                      Isolate the state in one or more CommonJS files that are shared between the\nCommonJS and ES module versions of the package. For example, if the CommonJS\nand ES module entry points are index.cjs and index.mjs, respectively:

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/index.cjs\nconst state = require('./state.cjs');\nmodule.exports.state = state;\n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                      // ./node_modules/pkg/index.mjs\nimport state from './state.cjs';\nexport {\n  state\n};\n
                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                      Even if pkg is used via both require and import in an application (for\nexample, via import in application code and via require by a dependency)\neach reference of pkg will contain the same state; and modifying that\nstate from either module system will apply to both.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Any plugins that attach to the package’s singleton would need to separately\nattach to both the CommonJS and ES module singletons.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • The package is currently written in ES module syntax and the package author\nwants that version to be used wherever such syntax is supported.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • The package is stateless or its state can be isolated without too much\ndifficulty.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • The package is unlikely to have other public packages that depend on it, or if\nit does, the package is stateless or has state that need not be shared between\ndependencies or with the overall application.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Even with isolated state, there is still the cost of possible extra code\nexecution between the CommonJS and ES module versions of a package.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    As with the previous approach, a variant of this approach not requiring\nconditional exports for consumers could be to add an export, e.g.\n\"./module\", to point to an all-ES module-syntax version of the package:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \".\": \"./index.cjs\",\n    \"./module\": \"./index.mjs\"\n  }\n}\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "Approach #2: Isolate State" - } - ], - "type": "module", - "displayName": "Writing Dual Packages While Avoiding or Minimizing Hazards" - } - ], - "type": "module", - "displayName": "Dual CommonJS/ES Module Packages" - } - ], + "desc": "

                                                                                                                                                                                                                                                    This section was moved to Modules: Packages.

                                                                                                                                                                                                                                                    ", "type": "misc", "displayName": "Packages" }, @@ -169,9 +124,22 @@ { "textRaw": "Terminology", "name": "terminology", - "desc": "

                                                                                                                                                                                                                                                    The specifier of an import statement is the string after the from keyword,\ne.g. 'path' in import { sep } from 'path'. Specifiers are also used in\nexport from statements, and as the argument to an import() expression.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    There are four types of specifiers:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Bare specifiers like 'some-package'. They refer to an entry point of a\npackage by the package name.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Deep import specifiers like 'some-package/lib/shuffle.mjs'. They refer to\na path within a package prefixed by the package name.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Relative specifiers like './startup.js' or '../config.mjs'. They refer\nto a path relative to the location of the importing file.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Absolute specifiers like 'file:///opt/nodejs/config.js'. They refer\ndirectly and explicitly to a full path.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Bare specifiers, and the bare specifier portion of deep import specifiers, are\nstrings; but everything else in a specifier is a URL.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Only file: and data: URLs are supported. A specifier like\n'https://example.com/app.js' may be supported by browsers but it is not\nsupported in Node.js.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Specifiers may not begin with / or //. These are reserved for potential\nfuture use. The root of the current volume may be referenced via file:///.

                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    The specifier of an import statement is the string after the from keyword,\ne.g. 'path' in import { sep } from 'path'. Specifiers are also used in\nexport from statements, and as the argument to an import() expression.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    There are four types of specifiers:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Bare specifiers like 'some-package'. They refer to an entry point of a\npackage by the package name.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Deep import specifiers like 'some-package/lib/shuffle.mjs'. They refer to\na path within a package prefixed by the package name.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Relative specifiers like './startup.js' or '../config.mjs'. They refer\nto a path relative to the location of the importing file.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                      Absolute specifiers like 'file:///opt/nodejs/config.js'. They refer\ndirectly and explicitly to a full path.

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Bare specifiers, and the bare specifier portion of deep import specifiers, are\nstrings; but everything else in a specifier is a URL.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    file:, node:, and data: URLs are supported. A specifier like\n'https://example.com/app.js' may be supported by browsers but it is not\nsupported in Node.js.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Specifiers may not begin with / or //. These are reserved for potential\nfuture use. The root of the current volume may be referenced via file:///.

                                                                                                                                                                                                                                                    ", "modules": [ { + "textRaw": "`node:` Imports", + "name": "`node:`_imports", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                    node: URLs are supported as a means to load Node.js builtin modules. This\nURL scheme allows for builtin modules to be referenced by valid absolute URL\nstrings.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import fs from 'node:fs/promises';\n
                                                                                                                                                                                                                                                    ", + "type": "module", + "displayName": "`node:` Imports" + }, + { "textRaw": "`data:` Imports", "name": "`data:`_imports", "meta": { @@ -180,7 +148,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                    data: URLs are supported for importing with the following MIME types:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • text/javascript for ES Modules
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • application/json for JSON
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • application/wasm for WASM.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    data: URLs only resolve Bare specifiers for builtin modules\nand Absolute specifiers. Resolving\nRelative specifiers will not work because data: is not a\nspecial scheme. For example, attempting to load ./foo\nfrom data:text/javascript,import \"./foo\"; will fail to resolve since there\nis no concept of relative resolution for data: URLs. An example of a data:\nURLs being used is:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import 'data:text/javascript,console.log(\"hello!\");';\nimport _ from 'data:application/json,\"world!\"';\n
                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    data: URLs are supported for importing with the following MIME types:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • text/javascript for ES Modules
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • application/json for JSON
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • application/wasm for Wasm
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    data: URLs only resolve Bare specifiers for builtin modules\nand Absolute specifiers. Resolving\nRelative specifiers does not work because data: is not a\nspecial scheme. For example, attempting to load ./foo\nfrom data:text/javascript,import \"./foo\"; fails to resolve because there\nis no concept of relative resolution for data: URLs. An example of a data:\nURLs being used is:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import 'data:text/javascript,console.log(\"hello!\");';\nimport _ from 'data:application/json,\"world!\"';\n
                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "`data:` Imports" } @@ -193,7 +161,7 @@ "displayName": "`import` Specifiers" }, { - "textRaw": "Differences Between ES Modules and CommonJS", + "textRaw": "Differences between ES modules and CommonJS", "name": "differences_between_es_modules_and_commonjs", "modules": [ { @@ -213,14 +181,14 @@ { "textRaw": "No `require`, `exports`, `module.exports`, `__filename`, `__dirname`", "name": "no_`require`,_`exports`,_`module.exports`,_`__filename`,_`__dirname`", - "desc": "

                                                                                                                                                                                                                                                    These CommonJS variables are not available in ES modules.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    require can be imported into an ES module using module.createRequire().

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Equivalents of __filename and __dirname can be created inside of each file\nvia import.meta.url.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import { fileURLToPath } from 'url';\nimport { dirname } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n
                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    These CommonJS variables are not available in ES modules.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    require can be imported into an ES module using module.createRequire().

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Equivalents of __filename and __dirname can be created inside of each file\nvia import.meta.url.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import { fileURLToPath } from 'url';\nimport { dirname } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n
                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "No `require`, `exports`, `module.exports`, `__filename`, `__dirname`" }, { "textRaw": "No `require.resolve`", "name": "no_`require.resolve`", - "desc": "

                                                                                                                                                                                                                                                    Former use cases relying on require.resolve to determine the resolved path\nof a module can be supported via import.meta.resolve, which is experimental\nand supported via the --experimental-import-meta-resolve flag:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    (async () => {\n  const dependencyAsset = await import.meta.resolve('component-lib/asset.css');\n})();\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    import.meta.resolve also accepts a second argument which is the parent module\nfrom which to resolve from:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    (async () => {\n  // Equivalent to import.meta.resolve('./dep')\n  await import.meta.resolve('./dep', import.meta.url);\n})();\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This function is asynchronous since the ES module resolver in Node.js is\nasynchronous. With the introduction of Top-Level Await, these use cases\nwill be easier as they won't require an async function wrapper.

                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    Former use cases relying on require.resolve to determine the resolved path\nof a module can be supported via import.meta.resolve, which is experimental\nand supported via the --experimental-import-meta-resolve flag:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    (async () => {\n  const dependencyAsset = await import.meta.resolve('component-lib/asset.css');\n})();\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    import.meta.resolve also accepts a second argument which is the parent module\nfrom which to resolve from:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    (async () => {\n  // Equivalent to import.meta.resolve('./dep')\n  await import.meta.resolve('./dep', import.meta.url);\n})();\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This function is asynchronous because the ES module resolver in Node.js is\nasynchronous. With the introduction of Top-Level Await, these use cases\nwill be easier as they won't require an async function wrapper.

                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "No `require.resolve`" }, @@ -241,13 +209,13 @@ { "textRaw": "URL-based paths", "name": "url-based_paths", - "desc": "

                                                                                                                                                                                                                                                    ES modules are resolved and cached based upon\nURL semantics. This means that files containing\nspecial characters such as # and ? need to be escaped.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Modules will be loaded multiple times if the import specifier used to resolve\nthem have a different query or fragment.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import './foo.mjs?query=1'; // loads ./foo.mjs with query of \"?query=1\"\nimport './foo.mjs?query=2'; // loads ./foo.mjs with query of \"?query=2\"\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    For now, only modules using the file: protocol can be loaded.

                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    ES modules are resolved and cached based upon\nURL semantics. This means that files containing\nspecial characters such as # and ? need to be escaped.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Modules are loaded multiple times if the import specifier used to resolve\nthem has a different query or fragment.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import './foo.mjs?query=1'; // loads ./foo.mjs with query of \"?query=1\"\nimport './foo.mjs?query=2'; // loads ./foo.mjs with query of \"?query=2\"\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    For now, only modules using the file: protocol can be loaded.

                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "URL-based paths" } ], "type": "misc", - "displayName": "Differences Between ES Modules and CommonJS" + "displayName": "Differences between ES modules and CommonJS" }, { "textRaw": "Interoperability with CommonJS", @@ -256,14 +224,14 @@ { "textRaw": "`require`", "name": "`require`", - "desc": "

                                                                                                                                                                                                                                                    require always treats the files it references as CommonJS. This applies\nwhether require is used the traditional way within a CommonJS environment, or\nin an ES module environment using module.createRequire().

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    To include an ES module into CommonJS, use import().

                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    require always treats the files it references as CommonJS. This applies\nwhether require is used the traditional way within a CommonJS environment, or\nin an ES module environment using module.createRequire().

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    To include an ES module into CommonJS, use import().

                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "`require`" }, { "textRaw": "`import` statements", "name": "`import`_statements", - "desc": "

                                                                                                                                                                                                                                                    An import statement can reference an ES module or a CommonJS module. Other\nfile types such as JSON or Native modules are not supported. For those, use\nmodule.createRequire().

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    import statements are permitted only in ES modules. For similar functionality\nin CommonJS, see import().

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The specifier of an import statement (the string after the from keyword)\ncan either be an URL-style relative path like './file.mjs' or a package name\nlike 'fs'.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Like in CommonJS, files within packages can be accessed by appending a path to\nthe package name; unless the package’s package.json contains an \"exports\"\nfield, in which case files within packages need to be accessed via the path\ndefined in \"exports\".

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import { sin, cos } from 'geometry/trigonometry-functions.mjs';\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Only the “default export” is supported for CommonJS files or packages:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    import packageMain from 'commonjs-package'; // Works\n\nimport { method } from 'commonjs-package'; // Errors\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    It is also possible to\nimport an ES or CommonJS module for its side effects only.

                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    An import statement can reference an ES module or a CommonJS module.\nimport statements are permitted only in ES modules. For similar functionality\nin CommonJS, see import().

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    When importing CommonJS modules, the\nmodule.exports object is provided as the default export. Named exports may be\navailable, provided by static analysis as a convenience for better ecosystem\ncompatibility.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Additional experimental flags are available for importing\nWasm modules or\nJSON modules. For importing native modules or\nJSON modules unflagged, see module.createRequire().

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The specifier of an import statement (the string after the from keyword)\ncan either be an URL-style relative path like './file.mjs' or a package name\nlike 'fs'.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Like in CommonJS, files within packages can be accessed by appending a path to\nthe package name; unless the package’s package.json contains an\n\"exports\" field, in which case files within packages need to be accessed\nvia the path defined in \"exports\".

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import { sin, cos } from 'geometry/trigonometry-functions.mjs';\n
                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "`import` statements" }, @@ -279,96 +247,125 @@ "displayName": "Interoperability with CommonJS" }, { - "textRaw": "CommonJS, JSON, and Native Modules", - "name": "commonjs,_json,_and_native_modules", - "desc": "

                                                                                                                                                                                                                                                    CommonJS, JSON, and Native modules can be used with\nmodule.createRequire().

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // cjs.cjs\nmodule.exports = 'cjs';\n\n// esm.mjs\nimport { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\n\nconst cjs = require('./cjs.cjs');\ncjs === 'cjs'; // true\n
                                                                                                                                                                                                                                                    ", + "textRaw": "CommonJS Namespaces", + "name": "commonjs_namespaces", + "desc": "

                                                                                                                                                                                                                                                    CommonJS modules consist of a module.exports object which can be of any type.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    When importing a CommonJS module, it can be reliably imported using the ES\nmodule default import or its corresponding sugar syntax:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    import { default as cjs } from 'cjs';\n\n// The following import statement is \"syntax sugar\" (equivalent but sweeter)\n// for `{ default as cjsSugar }` in the above import statement:\nimport cjsSugar from 'cjs';\n\nconsole.log(cjs);\nconsole.log(cjs === cjsSugar);\n// Prints:\n//   <module.exports>\n//   true\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The ECMAScript Module Namespace representation of a CommonJS module is always\na namespace with a default export key pointing to the CommonJS\nmodule.exports value.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This Module Namespace Exotic Object can be directly observed either when using\nimport * as m from 'cjs' or a dynamic import:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    import * as m from 'cjs';\nconsole.log(m);\nconsole.log(m === await import('cjs'));\n// Prints:\n//   [Module] { default: <module.exports> }\n//   true\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    For better compatibility with existing usage in the JS ecosystem, Node.js\nin addition attempts to determine the CommonJS named exports of every imported\nCommonJS module to provide them as separate ES module exports using a static\nanalysis process.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    For example, consider a CommonJS module written:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // cjs.cjs\nexports.name = 'exported';\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The preceding module supports named imports in ES modules:

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    import { name } from './cjs.cjs';\nconsole.log(name);\n// Prints: 'exported'\n\nimport cjs from './cjs.cjs';\nconsole.log(cjs);\n// Prints: { name: 'exported' }\n\nimport * as m from './cjs.cjs';\nconsole.log(m);\n// Prints: [Module] { default: { name: 'exported' }, name: 'exported' }\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    As can be seen from the last example of the Module Namespace Exotic Object being\nlogged, the name export is copied off of the module.exports object and set\ndirectly on the ES module namespace when the module is imported.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Live binding updates or new exports added to module.exports are not detected\nfor these named exports.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The detection of named exports is based on common syntax patterns but does not\nalways correctly detect named exports. In these cases, using the default\nimport form described above can be a better option.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Named exports detection covers many common export patterns, reexport patterns\nand build tool and transpiler outputs. See cjs-module-lexer for the exact\nsemantics implemented.

                                                                                                                                                                                                                                                    ", "type": "misc", - "displayName": "CommonJS, JSON, and Native Modules" + "displayName": "CommonJS Namespaces" }, { "textRaw": "Builtin modules", "name": "builtin_modules", - "desc": "

                                                                                                                                                                                                                                                    Builtin modules will provide named exports of their public API. A\ndefault export is also provided which is the value of the CommonJS exports.\nThe default export can be used for, among other things, modifying the named\nexports. Named exports of builtin modules are updated only by calling\nmodule.syncBuiltinESMExports().

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import EventEmitter from 'events';\nconst e = new EventEmitter();\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import { readFile } from 'fs';\nreadFile('./foo.txt', (err, source) => {\n  if (err) {\n    console.error(err);\n  } else {\n    console.log(source);\n  }\n});\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import fs, { readFileSync } from 'fs';\nimport { syncBuiltinESMExports } from 'module';\n\nfs.readFileSync = () => Buffer.from('Hello, ESM');\nsyncBuiltinESMExports();\n\nfs.readFileSync === readFileSync;\n
                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    Core modules provide named exports of their public API. A\ndefault export is also provided which is the value of the CommonJS exports.\nThe default export can be used for, among other things, modifying the named\nexports. Named exports of builtin modules are updated only by calling\nmodule.syncBuiltinESMExports().

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import EventEmitter from 'events';\nconst e = new EventEmitter();\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import { readFile } from 'fs';\nreadFile('./foo.txt', (err, source) => {\n  if (err) {\n    console.error(err);\n  } else {\n    console.log(source);\n  }\n});\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import fs, { readFileSync } from 'fs';\nimport { syncBuiltinESMExports } from 'module';\n\nfs.readFileSync = () => Buffer.from('Hello, ESM');\nsyncBuiltinESMExports();\n\nfs.readFileSync === readFileSync;\n
                                                                                                                                                                                                                                                    ", "type": "misc", "displayName": "Builtin modules" }, { - "textRaw": "Experimental JSON Modules", + "textRaw": "CommonJS, JSON, and native modules", + "name": "commonjs,_json,_and_native_modules", + "desc": "

                                                                                                                                                                                                                                                    CommonJS, JSON, and native modules can be used with\nmodule.createRequire().

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // cjs.cjs\nmodule.exports = 'cjs';\n\n// esm.mjs\nimport { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\n\nconst cjs = require('./cjs.cjs');\ncjs === 'cjs'; // true\n
                                                                                                                                                                                                                                                    ", + "type": "misc", + "displayName": "CommonJS, JSON, and native modules" + }, + { + "textRaw": "Experimental JSON modules", "name": "experimental_json_modules", - "desc": "

                                                                                                                                                                                                                                                    Currently importing JSON modules are only supported in the commonjs mode\nand are loaded using the CJS loader. WHATWG JSON modules specification are\nstill being standardized, and are experimentally supported by including the\nadditional flag --experimental-json-modules when running Node.js.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    When the --experimental-json-modules flag is included both the\ncommonjs and module mode will use the new experimental JSON\nloader. The imported JSON only exposes a default, there is no\nsupport for named exports. A cache entry is created in the CommonJS\ncache, to avoid duplication. The same object will be returned in\nCommonJS if the JSON module has already been imported from the\nsame path.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Assuming an index.mjs with

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    import packageConfig from './package.json';\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The --experimental-json-modules flag is needed for the module\nto work.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    node index.mjs # fails\nnode --experimental-json-modules index.mjs # works\n
                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    Currently importing JSON modules are only supported in the commonjs mode\nand are loaded using the CJS loader. WHATWG JSON modules specification are\nstill being standardized, and are experimentally supported by including the\nadditional flag --experimental-json-modules when running Node.js.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    When the --experimental-json-modules flag is included, both the\ncommonjs and module mode use the new experimental JSON\nloader. The imported JSON only exposes a default. There is no\nsupport for named exports. A cache entry is created in the CommonJS\ncache to avoid duplication. The same object is returned in\nCommonJS if the JSON module has already been imported from the\nsame path.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Assuming an index.mjs with

                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                    import packageConfig from './package.json';\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The --experimental-json-modules flag is needed for the module\nto work.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    node index.mjs # fails\nnode --experimental-json-modules index.mjs # works\n
                                                                                                                                                                                                                                                    ", "type": "misc", - "displayName": "Experimental JSON Modules" + "displayName": "Experimental JSON modules" }, { - "textRaw": "Experimental Wasm Modules", + "textRaw": "Experimental Wasm modules", "name": "experimental_wasm_modules", "desc": "

                                                                                                                                                                                                                                                    Importing Web Assembly modules is supported under the\n--experimental-wasm-modules flag, allowing any .wasm files to be\nimported as normal modules while also supporting their module imports.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This integration is in line with the\nES Module Integration Proposal for Web Assembly.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    For example, an index.mjs containing:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    import * as M from './module.wasm';\nconsole.log(M);\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    executed under:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    node --experimental-wasm-modules index.mjs\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    would provide the exports interface for the instantiation of module.wasm.

                                                                                                                                                                                                                                                    ", "type": "misc", - "displayName": "Experimental Wasm Modules" + "displayName": "Experimental Wasm modules" }, { - "textRaw": "Experimental Loaders", - "name": "Experimental Loaders", + "textRaw": "Experimental loaders", + "name": "Experimental loaders", "type": "misc", "desc": "

                                                                                                                                                                                                                                                    Note: This API is currently being redesigned and will still change.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    To customize the default module resolution, loader hooks can optionally be\nprovided via a --experimental-loader ./loader-name.mjs argument to Node.js.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    When hooks are used they only apply to ES module loading and not to any\nCommonJS modules loaded.

                                                                                                                                                                                                                                                    ", "miscs": [ { "textRaw": "Hooks", "name": "hooks", - "modules": [ + "methods": [ { - "textRaw": "resolve hook", - "name": "resolve_hook", - "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The resolve hook returns the resolved file URL for a given module specifier\nand parent URL. The module specifier is the string in an import statement or\nimport() expression, and the parent URL is the URL of the module that imported\nthis one, or undefined if this is the main entry point for the application.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The conditions property on the context is an array of conditions for\nConditional Exports that apply to this resolution request. They can be used\nfor looking up conditional mappings elsewhere or to modify the list when calling\nthe default resolution logic.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The current set of Node.js default conditions will always\nbe in the context.conditions list passed to the hook. If the hook wants to\nensure Node.js-compatible resolution logic, all items from this default\ncondition list must be passed through to the defaultResolve function.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string} specifier\n * @param {object} context\n * @param {string} context.parentURL\n * @param {string[]} context.conditions\n * @param {function} defaultResolve\n * @returns {object} response\n * @returns {string} response.url\n */\nexport async function resolve(specifier, context, defaultResolve) {\n  const { parentURL = null } = context;\n  if (someCondition) {\n    // For some or all specifiers, do some custom logic for resolving.\n    // Always return an object of the form {url: <string>}\n    return {\n      url: (parentURL) ?\n        new URL(specifier, parentURL).href : new URL(specifier).href\n    };\n  }\n  if (anotherCondition) {\n    // When calling the defaultResolve, the arguments can be modified. In this\n    // case it's adding another value for matching conditional exports.\n    return defaultResolve(specifier, {\n      ...context,\n      conditions: [...context.conditions, 'another-condition'],\n    });\n  }\n  // Defer to Node.js for all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "resolve hook" + "textRaw": "`resolve(specifier, context, defaultResolve)`", + "type": "method", + "name": "resolve", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    The resolve hook returns the resolved file URL for a given module specifier\nand parent URL. The module specifier is the string in an import statement or\nimport() expression, and the parent URL is the URL of the module that imported\nthis one, or undefined if this is the main entry point for the application.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The conditions property on the context is an array of conditions for\nConditional exports that apply to this resolution request. They can be used\nfor looking up conditional mappings elsewhere or to modify the list when calling\nthe default resolution logic.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The current package exports conditions are always in\nthe context.conditions array passed into the hook. To guarantee default\nNode.js module specifier resolution behavior when calling defaultResolve, the\ncontext.conditions array passed to it must include all elements of the\ncontext.conditions array originally passed into the resolve hook.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string} specifier\n * @param {{\n *   conditions: !Array<string>,\n *   parentURL: !(string | undefined),\n * }} context\n * @param {Function} defaultResolve\n * @returns {Promise<{ url: string }>}\n */\nexport async function resolve(specifier, context, defaultResolve) {\n  const { parentURL = null } = context;\n  if (Math.random() > 0.5) { // Some condition.\n    // For some or all specifiers, do some custom logic for resolving.\n    // Always return an object of the form {url: <string>}.\n    return {\n      url: parentURL ?\n        new URL(specifier, parentURL).href :\n        new URL(specifier).href,\n    };\n  }\n  if (Math.random() < 0.5) { // Another condition.\n    // When calling `defaultResolve`, the arguments can be modified. In this\n    // case it's adding another value for matching conditional exports.\n    return defaultResolve(specifier, {\n      ...context,\n      conditions: [...context.conditions, 'another-condition'],\n    });\n  }\n  // Defer to Node.js for all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n
                                                                                                                                                                                                                                                    " }, { - "textRaw": "getFormat hook", - "name": "getformat_hook", - "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The getFormat hook provides a way to define a custom method of determining how\na URL should be interpreted. This can be one of the following:

                                                                                                                                                                                                                                                    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                    formatDescription
                                                                                                                                                                                                                                                    'builtin'Load a Node.js builtin module
                                                                                                                                                                                                                                                    'commonjs'Load a Node.js CommonJS module
                                                                                                                                                                                                                                                    'dynamic'Use a dynamic instantiate hook
                                                                                                                                                                                                                                                    'json'Load a JSON file
                                                                                                                                                                                                                                                    'module'Load a standard JavaScript module (ES module)
                                                                                                                                                                                                                                                    'wasm'Load a WebAssembly module
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string} url\n * @param {object} context (currently empty)\n * @param {function} defaultGetFormat\n * @returns {object} response\n * @returns {string} response.format\n */\nexport async function getFormat(url, context, defaultGetFormat) {\n  if (someCondition) {\n    // For some or all URLs, do some custom logic for determining format.\n    // Always return an object of the form {format: <string>}, where the\n    // format is one of the strings in the table above.\n    return {\n      format: 'module'\n    };\n  }\n  // Defer to Node.js for all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "getFormat hook" + "textRaw": "`getFormat(url, context, defaultGetFormat)`", + "type": "method", + "name": "getFormat", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    The getFormat hook provides a way to define a custom method of determining how\na URL should be interpreted. The format returned also affects what the\nacceptable forms of source values are for a module when parsing. This can be one\nof the following:

                                                                                                                                                                                                                                                    \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                    formatDescriptionAcceptable Types For source Returned by getSource or transformSource
                                                                                                                                                                                                                                                    'builtin'Load a Node.js builtin moduleNot applicable
                                                                                                                                                                                                                                                    'dynamic'Use a dynamic instantiate hookNot applicable
                                                                                                                                                                                                                                                    'commonjs'Load a Node.js CommonJS moduleNot applicable
                                                                                                                                                                                                                                                    'json'Load a JSON file{ string, ArrayBuffer, TypedArray }
                                                                                                                                                                                                                                                    'module'Load an ES module{ string, ArrayBuffer, TypedArray }
                                                                                                                                                                                                                                                    'wasm'Load a WebAssembly module{ ArrayBuffer, TypedArray }
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: These types all correspond to classes defined in ECMAScript.

                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    Note: If the source value of a text-based format (i.e., 'json', 'module') is\nnot a string, it is converted to a string using util.TextDecoder.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string} url\n * @param {Object} context (currently empty)\n * @param {Function} defaultGetFormat\n * @returns {Promise<{ format: string }>}\n */\nexport async function getFormat(url, context, defaultGetFormat) {\n  if (Math.random() > 0.5) { // Some condition.\n    // For some or all URLs, do some custom logic for determining format.\n    // Always return an object of the form {format: <string>}, where the\n    // format is one of the strings in the preceding table.\n    return {\n      format: 'module',\n    };\n  }\n  // Defer to Node.js for all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n
                                                                                                                                                                                                                                                    " }, { - "textRaw": "getSource hook", - "name": "getsource_hook", - "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The getSource hook provides a way to define a custom method for retrieving\nthe source code of an ES module specifier. This would allow a loader to\npotentially avoid reading files from disk.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string} url\n * @param {object} context\n * @param {string} context.format\n * @param {function} defaultGetSource\n * @returns {object} response\n * @returns {string|buffer} response.source\n */\nexport async function getSource(url, context, defaultGetSource) {\n  const { format } = context;\n  if (someCondition) {\n    // For some or all URLs, do some custom logic for retrieving the source.\n    // Always return an object of the form {source: <string|buffer>}.\n    return {\n      source: '...'\n    };\n  }\n  // Defer to Node.js for all other URLs.\n  return defaultGetSource(url, context, defaultGetSource);\n}\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "getSource hook" + "textRaw": "`getSource(url, context, defaultGetSource)`", + "type": "method", + "name": "getSource", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    The getSource hook provides a way to define a custom method for retrieving\nthe source code of an ES module specifier. This would allow a loader to\npotentially avoid reading files from disk.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string} url\n * @param {{ format: string }} context\n * @param {Function} defaultGetSource\n * @returns {Promise<{ source: !(string | SharedArrayBuffer | Uint8Array) }>}\n */\nexport async function getSource(url, context, defaultGetSource) {\n  const { format } = context;\n  if (Math.random() > 0.5) { // Some condition.\n    // For some or all URLs, do some custom logic for retrieving the source.\n    // Always return an object of the form {source: <string|buffer>}.\n    return {\n      source: '...',\n    };\n  }\n  // Defer to Node.js for all other URLs.\n  return defaultGetSource(url, context, defaultGetSource);\n}\n
                                                                                                                                                                                                                                                    " }, { - "textRaw": "transformSource hook", - "name": "transformsource_hook", - "desc": "
                                                                                                                                                                                                                                                    NODE_OPTIONS='--experimental-loader ./custom-loader.mjs' node x.js\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The transformSource hook provides a way to modify the source code of a loaded\nES module file after the source string has been loaded but before Node.js has\ndone anything with it.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If this hook is used to convert unknown-to-Node.js file types into executable\nJavaScript, a resolve hook is also necessary in order to register any\nunknown-to-Node.js file extensions. See the transpiler loader example below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string|buffer} source\n * @param {object} context\n * @param {string} context.url\n * @param {string} context.format\n * @param {function} defaultTransformSource\n * @returns {object} response\n * @returns {string|buffer} response.source\n */\nexport async function transformSource(source,\n                                      context,\n                                      defaultTransformSource) {\n  const { url, format } = context;\n  if (someCondition) {\n    // For some or all URLs, do some custom logic for modifying the source.\n    // Always return an object of the form {source: <string|buffer>}.\n    return {\n      source: '...'\n    };\n  }\n  // Defer to Node.js for all other sources.\n  return defaultTransformSource(\n    source, context, defaultTransformSource);\n}\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "transformSource hook" + "textRaw": "`transformSource(source, context, defaultTransformSource)`", + "type": "method", + "name": "transformSource", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                    NODE_OPTIONS='--experimental-loader ./custom-loader.mjs' node x.js\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    The transformSource hook provides a way to modify the source code of a loaded\nES module file after the source string has been loaded but before Node.js has\ndone anything with it.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If this hook is used to convert unknown-to-Node.js file types into executable\nJavaScript, a resolve hook is also necessary in order to register any\nunknown-to-Node.js file extensions. See the transpiler loader example below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {!(string | SharedArrayBuffer | Uint8Array)} source\n * @param {{\n *   format: string,\n *   url: string,\n * }} context\n * @param {Function} defaultTransformSource\n * @returns {Promise<{ source: !(string | SharedArrayBuffer | Uint8Array) }>}\n */\nexport async function transformSource(source, context, defaultTransformSource) {\n  const { url, format } = context;\n  if (Math.random() > 0.5) { // Some condition.\n    // For some or all URLs, do some custom logic for modifying the source.\n    // Always return an object of the form {source: <string|buffer>}.\n    return {\n      source: '...',\n    };\n  }\n  // Defer to Node.js for all other sources.\n  return defaultTransformSource(source, context, defaultTransformSource);\n}\n
                                                                                                                                                                                                                                                    " }, { - "textRaw": "getGlobalPreloadCode hook", - "name": "getglobalpreloadcode_hook", - "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Sometimes it can be necessary to run some code inside of the same global scope\nthat the application will run in. This hook allows to return a string that will\nbe ran as sloppy-mode script on startup.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Similar to how CommonJS wrappers work, the code runs in an implicit function\nscope. The only argument is a require-like function that can be used to load\nbuiltins like \"fs\": getBuiltin(request: string).

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If the code needs more advanced require features, it will have to construct\nits own require using module.createRequire().

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @returns {string} Code to run before application startup\n */\nexport function getGlobalPreloadCode() {\n  return `\\\nglobalThis.someInjectedProperty = 42;\nconsole.log('I just set some globals!');\n\nconst { createRequire } = getBuiltin('module');\n\nconst require = createRequire(process.cwd() + '/<preload>');\n// [...]\n`;\n}\n
                                                                                                                                                                                                                                                    ", - "type": "module", - "displayName": "getGlobalPreloadCode hook" - }, + "textRaw": "`getGlobalPreloadCode()`", + "type": "method", + "name": "getGlobalPreloadCode", + "signatures": [ + { + "params": [] + } + ], + "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                    Sometimes it might be necessary to run some code inside of the same global scope\nthat the application runs in. This hook allows the return of a string that is\nrun as sloppy-mode script on startup.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Similar to how CommonJS wrappers work, the code runs in an implicit function\nscope. The only argument is a require-like function that can be used to load\nbuiltins like \"fs\": getBuiltin(request: string).

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    If the code needs more advanced require features, it has to construct\nits own require using module.createRequire().

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @returns {string} Code to run before application startup\n */\nexport function getGlobalPreloadCode() {\n  return `\\\nglobalThis.someInjectedProperty = 42;\nconsole.log('I just set some globals!');\n\nconst { createRequire } = getBuiltin('module');\n\nconst require = createRequire(process.cwd() + '/<preload>');\n// [...]\n`;\n}\n
                                                                                                                                                                                                                                                    " + } + ], + "modules": [ { "textRaw": "dynamicInstantiate hook", "name": "dynamicinstantiate_hook", - "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    To create a custom dynamic module that doesn't correspond to one of the\nexisting format interpretations, the dynamicInstantiate hook can be used.\nThis hook is called only for modules that return format: 'dynamic' from\nthe getFormat hook.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string} url\n * @returns {object} response\n * @returns {array} response.exports\n * @returns {function} response.execute\n */\nexport async function dynamicInstantiate(url) {\n  return {\n    exports: ['customExportName'],\n    execute: (exports) => {\n      // Get and set functions provided for pre-allocated export names\n      exports.customExportName.set('value');\n    }\n  };\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    With the list of module exports provided upfront, the execute function will\nthen be called at the exact point of module evaluation order for that module\nin the import tree.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Examples

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The various loader hooks can be used together to accomplish wide-ranging\ncustomizations of Node.js’ code loading and evaluation behaviors.

                                                                                                                                                                                                                                                    ", + "desc": "
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Note: The loaders API is being redesigned. This hook may disappear or its\nsignature may change. Do not rely on the API described below.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    To create a custom dynamic module that doesn't correspond to one of the\nexisting format interpretations, the dynamicInstantiate hook can be used.\nThis hook is called only for modules that return format: 'dynamic' from\nthe getFormat hook.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    /**\n * @param {string} url\n * @returns {object} response\n * @returns {array} response.exports\n * @returns {function} response.execute\n */\nexport async function dynamicInstantiate(url) {\n  return {\n    exports: ['customExportName'],\n    execute: (exports) => {\n      // Get and set functions provided for pre-allocated export names\n      exports.customExportName.set('value');\n    }\n  };\n}\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    With the list of module exports provided upfront, the execute function will\nthen be called at the exact point of module evaluation order for that module\nin the import tree.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Examples

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The various loader hooks can be used together to accomplish wide-ranging\ncustomizations of Node.js’ code loading and evaluation behaviors.

                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "dynamicInstantiate hook" }, { "textRaw": "HTTPS loader", "name": "https_loader", - "desc": "

                                                                                                                                                                                                                                                    In current Node.js, specifiers starting with https:// are unsupported. The\nloader below registers hooks to enable rudimentary support for such specifiers.\nWhile this may seem like a significant improvement to Node.js core\nfunctionality, there are substantial downsides to actually using this loader:\nperformance is much slower than loading files from disk, there is no caching,\nand there is no security.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // https-loader.mjs\nimport { get } from 'https';\n\nexport function resolve(specifier, context, defaultResolve) {\n  const { parentURL = null } = context;\n\n  // Normally Node.js would error on specifiers starting with 'https://', so\n  // this hook intercepts them and converts them into absolute URLs to be\n  // passed along to the later hooks below.\n  if (specifier.startsWith('https://')) {\n    return {\n      url: specifier\n    };\n  } else if (parentURL && parentURL.startsWith('https://')) {\n    return {\n      url: new URL(specifier, parentURL).href\n    };\n  }\n\n  // Let Node.js handle all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n\nexport function getFormat(url, context, defaultGetFormat) {\n  // This loader assumes all network-provided JavaScript is ES module code.\n  if (url.startsWith('https://')) {\n    return {\n      format: 'module'\n    };\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n\nexport function getSource(url, context, defaultGetSource) {\n  // For JavaScript to be loaded over the network, we need to fetch and\n  // return it.\n  if (url.startsWith('https://')) {\n    return new Promise((resolve, reject) => {\n      get(url, (res) => {\n        let data = '';\n        res.on('data', (chunk) => data += chunk);\n        res.on('end', () => resolve({ source: data }));\n      }).on('error', (err) => reject(err));\n    });\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetSource(url, context, defaultGetSource);\n}\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // main.mjs\nimport { VERSION } from 'https://coffeescript.org/browser-compiler-modern/coffeescript.js';\n\nconsole.log(VERSION);\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    With this loader, running:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    node --experimental-loader ./https-loader.mjs ./main.js\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Will print the current version of CoffeeScript per the module at the URL in\nmain.mjs.

                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    In current Node.js, specifiers starting with https:// are unsupported. The\nloader below registers hooks to enable rudimentary support for such specifiers.\nWhile this may seem like a significant improvement to Node.js core\nfunctionality, there are substantial downsides to actually using this loader:\nperformance is much slower than loading files from disk, there is no caching,\nand there is no security.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // https-loader.mjs\nimport { get } from 'https';\n\nexport function resolve(specifier, context, defaultResolve) {\n  const { parentURL = null } = context;\n\n  // Normally Node.js would error on specifiers starting with 'https://', so\n  // this hook intercepts them and converts them into absolute URLs to be\n  // passed along to the later hooks below.\n  if (specifier.startsWith('https://')) {\n    return {\n      url: specifier\n    };\n  } else if (parentURL && parentURL.startsWith('https://')) {\n    return {\n      url: new URL(specifier, parentURL).href\n    };\n  }\n\n  // Let Node.js handle all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n\nexport function getFormat(url, context, defaultGetFormat) {\n  // This loader assumes all network-provided JavaScript is ES module code.\n  if (url.startsWith('https://')) {\n    return {\n      format: 'module'\n    };\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n\nexport function getSource(url, context, defaultGetSource) {\n  // For JavaScript to be loaded over the network, we need to fetch and\n  // return it.\n  if (url.startsWith('https://')) {\n    return new Promise((resolve, reject) => {\n      get(url, (res) => {\n        let data = '';\n        res.on('data', (chunk) => data += chunk);\n        res.on('end', () => resolve({ source: data }));\n      }).on('error', (err) => reject(err));\n    });\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetSource(url, context, defaultGetSource);\n}\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // main.mjs\nimport { VERSION } from 'https://coffeescript.org/browser-compiler-modern/coffeescript.js';\n\nconsole.log(VERSION);\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    With the preceding loader, running\nnode --experimental-loader ./https-loader.mjs ./main.mjs\nprints the current version of CoffeeScript per the module at the URL in\nmain.mjs.

                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "HTTPS loader" }, { "textRaw": "Transpiler loader", "name": "transpiler_loader", - "desc": "

                                                                                                                                                                                                                                                    Sources that are in formats Node.js doesn’t understand can be converted into\nJavaScript using the transformSource hook. Before that hook gets called,\nhowever, other hooks need to tell Node.js not to throw an error on unknown file\ntypes; and to tell Node.js how to load this new file type.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This is less performant than transpiling source files before running\nNode.js; a transpiler loader should only be used for development and testing\npurposes.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // coffeescript-loader.mjs\nimport { URL, pathToFileURL } from 'url';\nimport CoffeeScript from 'coffeescript';\n\nconst baseURL = pathToFileURL(`${process.cwd()}/`).href;\n\n// CoffeeScript files end in .coffee, .litcoffee or .coffee.md.\nconst extensionsRegex = /\\.coffee$|\\.litcoffee$|\\.coffee\\.md$/;\n\nexport function resolve(specifier, context, defaultResolve) {\n  const { parentURL = baseURL } = context;\n\n  // Node.js normally errors on unknown file extensions, so return a URL for\n  // specifiers ending in the CoffeeScript file extensions.\n  if (extensionsRegex.test(specifier)) {\n    return {\n      url: new URL(specifier, parentURL).href\n    };\n  }\n\n  // Let Node.js handle all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n\nexport function getFormat(url, context, defaultGetFormat) {\n  // Now that we patched resolve to let CoffeeScript URLs through, we need to\n  // tell Node.js what format such URLs should be interpreted as. For the\n  // purposes of this loader, all CoffeeScript URLs are ES modules.\n  if (extensionsRegex.test(url)) {\n    return {\n      format: 'module'\n    };\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n\nexport function transformSource(source, context, defaultTransformSource) {\n  const { url, format } = context;\n\n  if (extensionsRegex.test(url)) {\n    return {\n      source: CoffeeScript.compile(source, { bare: true })\n    };\n  }\n\n  // Let Node.js handle all other sources.\n  return defaultTransformSource(source, context, defaultTransformSource);\n}\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    # main.coffee\nimport { scream } from './scream.coffee'\nconsole.log scream 'hello, world'\n\nimport { version } from 'process'\nconsole.log \"Brought to you by Node.js version #{version}\"\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    # scream.coffee\nexport scream = (str) -> str.toUpperCase()\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    With this loader, running:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    node --experimental-loader ./coffeescript-loader.mjs main.coffee\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    Will cause main.coffee to be turned into JavaScript after its source code is\nloaded from disk but before Node.js executes it; and so on for any .coffee,\n.litcoffee or .coffee.md files referenced via import statements of any\nloaded file.

                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    Sources that are in formats Node.js doesn’t understand can be converted into\nJavaScript using the transformSource hook. Before that hook gets called,\nhowever, other hooks need to tell Node.js not to throw an error on unknown file\ntypes; and to tell Node.js how to load this new file type.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    This is less performant than transpiling source files before running\nNode.js; a transpiler loader should only be used for development and testing\npurposes.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    // coffeescript-loader.mjs\nimport { URL, pathToFileURL } from 'url';\nimport CoffeeScript from 'coffeescript';\n\nconst baseURL = pathToFileURL(`${process.cwd()}/`).href;\n\n// CoffeeScript files end in .coffee, .litcoffee or .coffee.md.\nconst extensionsRegex = /\\.coffee$|\\.litcoffee$|\\.coffee\\.md$/;\n\nexport function resolve(specifier, context, defaultResolve) {\n  const { parentURL = baseURL } = context;\n\n  // Node.js normally errors on unknown file extensions, so return a URL for\n  // specifiers ending in the CoffeeScript file extensions.\n  if (extensionsRegex.test(specifier)) {\n    return {\n      url: new URL(specifier, parentURL).href\n    };\n  }\n\n  // Let Node.js handle all other specifiers.\n  return defaultResolve(specifier, context, defaultResolve);\n}\n\nexport function getFormat(url, context, defaultGetFormat) {\n  // Now that we patched resolve to let CoffeeScript URLs through, we need to\n  // tell Node.js what format such URLs should be interpreted as. For the\n  // purposes of this loader, all CoffeeScript URLs are ES modules.\n  if (extensionsRegex.test(url)) {\n    return {\n      format: 'module'\n    };\n  }\n\n  // Let Node.js handle all other URLs.\n  return defaultGetFormat(url, context, defaultGetFormat);\n}\n\nexport function transformSource(source, context, defaultTransformSource) {\n  const { url, format } = context;\n\n  if (extensionsRegex.test(url)) {\n    return {\n      source: CoffeeScript.compile(source, { bare: true })\n    };\n  }\n\n  // Let Node.js handle all other sources.\n  return defaultTransformSource(source, context, defaultTransformSource);\n}\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    # main.coffee\nimport { scream } from './scream.coffee'\nconsole.log scream 'hello, world'\n\nimport { version } from 'process'\nconsole.log \"Brought to you by Node.js version #{version}\"\n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    # scream.coffee\nexport scream = (str) -> str.toUpperCase()\n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    With the preceding loader, running\nnode --experimental-loader ./coffeescript-loader.mjs main.coffee\ncauses main.coffee to be turned into JavaScript after its source code is\nloaded from disk but before Node.js executes it; and so on for any .coffee,\n.litcoffee or .coffee.md files referenced via import statements of any\nloaded file.

                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "Transpiler loader" } @@ -379,7 +376,7 @@ ] }, { - "textRaw": "Resolution Algorithm", + "textRaw": "Resolution algorithm", "name": "resolution_algorithm", "modules": [ { @@ -390,22 +387,29 @@ "displayName": "Features" }, { - "textRaw": "Resolver Algorithm", + "textRaw": "Resolver algorithm", "name": "resolver_algorithm", - "desc": "

                                                                                                                                                                                                                                                    The algorithm to load an ES module specifier is given through the\nESM_RESOLVE method below. It returns the resolved URL for a\nmodule specifier relative to a parentURL.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The algorithm to determine the module format of a resolved URL is\nprovided by ESM_FORMAT, which returns the unique module\nformat for any file. The \"module\" format is returned for an ECMAScript\nModule, while the \"commonjs\" format is used to indicate loading through the\nlegacy CommonJS loader. Additional formats such as \"addon\" can be extended in\nfuture updates.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    In the following algorithms, all subroutine errors are propagated as errors\nof these top-level routines unless stated otherwise.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    defaultEnv is the conditional environment name priority array,\n[\"node\", \"import\"].

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The resolver can throw the following errors:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • Invalid Module Specifier: Module specifier is an invalid URL, package name\nor package subpath specifier.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Invalid Package Configuration: package.json configuration is invalid or\ncontains an invalid configuration.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Invalid Package Target: Package exports define a target module within the\npackage that is an invalid type or string target.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Package Path Not Exported: Package exports do not define or permit a target\nsubpath in the package for the given module.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Module Not Found: The package or module requested does not exist.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \nResolver algorithm specification\n

                                                                                                                                                                                                                                                    ESM_RESOLVE(specifier, parentURL)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let resolvedURL be undefined.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. \n

                                                                                                                                                                                                                                                      If specifier is a valid URL, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set resolvedURL to the result of parsing and reserializing\nspecifier as a URL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. \n

                                                                                                                                                                                                                                                      Otherwise, if specifier starts with \"/\", then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. \n

                                                                                                                                                                                                                                                      Otherwise, if specifier starts with \"./\" or \"../\", then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set resolvedURL to the URL resolution of specifier relative to\nparentURL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. \n

                                                                                                                                                                                                                                                      Otherwise,

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Note: specifier is now a bare specifier.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Set resolvedURL the result of\nPACKAGE_RESOLVE(specifier, parentURL).
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. \n

                                                                                                                                                                                                                                                      If resolvedURL contains any percent encodings of \"/\" or \"\\\" (\"%2f\"\nand \"%5C\" respectively), then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    13. \n

                                                                                                                                                                                                                                                      If the file at resolvedURL is a directory, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Unsupported Directory Import error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    14. \n
                                                                                                                                                                                                                                                    15. \n

                                                                                                                                                                                                                                                      If the file at resolvedURL does not exist, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw a Module Not Found error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    16. \n
                                                                                                                                                                                                                                                    17. Set resolvedURL to the real path of resolvedURL.
                                                                                                                                                                                                                                                    18. \n
                                                                                                                                                                                                                                                    19. Let format be the result of ESM_FORMAT(resolvedURL).
                                                                                                                                                                                                                                                    20. \n
                                                                                                                                                                                                                                                    21. Load resolvedURL as module format, format.
                                                                                                                                                                                                                                                    22. \n
                                                                                                                                                                                                                                                    23. Return resolvedURL.
                                                                                                                                                                                                                                                    24. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_RESOLVE(packageSpecifier, parentURL)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let packageName be undefined.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. Let packageSubpath be undefined.
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. \n

                                                                                                                                                                                                                                                      If packageSpecifier is an empty string, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. \n

                                                                                                                                                                                                                                                      Otherwise,

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. \n

                                                                                                                                                                                                                                                        If packageSpecifier does not contain a \"/\" separator, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Set packageName to the substring of packageSpecifier\nuntil the second \"/\" separator or the end of the string.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. \n

                                                                                                                                                                                                                                                      If packageName starts with \".\" or contains \"\\\" or \"%\", then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. Let packageSubpath be undefined.
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    13. \n

                                                                                                                                                                                                                                                      If the length of packageSpecifier is greater than the length of\npackageName, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set packageSubpath to \".\" concatenated with the substring of\npackageSpecifier from the position at the length of packageName.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    14. \n
                                                                                                                                                                                                                                                    15. \n

                                                                                                                                                                                                                                                      If packageSubpath contains any \".\" or \"..\" segments or percent\nencoded strings for \"/\" or \"\\\", then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    16. \n
                                                                                                                                                                                                                                                    17. Set selfUrl to the result of\nSELF_REFERENCE_RESOLVE(packageName, packageSubpath, parentURL).
                                                                                                                                                                                                                                                    18. \n
                                                                                                                                                                                                                                                    19. If selfUrl isn't empty, return selfUrl.
                                                                                                                                                                                                                                                    20. \n
                                                                                                                                                                                                                                                    21. \n

                                                                                                                                                                                                                                                      If packageSubpath is undefined and packageName is a Node.js builtin\nmodule, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return the string \"nodejs:\" concatenated with packageSpecifier.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    22. \n
                                                                                                                                                                                                                                                    23. \n

                                                                                                                                                                                                                                                      While parentURL is not the file system root,

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let packageURL be the URL resolution of \"node_modules/\"\nconcatenated with packageSpecifier, relative to parentURL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Set parentURL to the parent folder URL of parentURL.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        If the folder at packageURL does not exist, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set parentURL to the parent URL path of parentURL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Continue the next loop iteration.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. \n

                                                                                                                                                                                                                                                        If packageSubpath is equal to \"./\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return packageURL + \"/\".
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. \n

                                                                                                                                                                                                                                                        If packageSubpath is _undefined__, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the result of PACKAGE_MAIN_RESOLVE(packageURL,\npjson).
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      13. \n

                                                                                                                                                                                                                                                        Otherwise,

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. \n

                                                                                                                                                                                                                                                          If pjson is not null and pjson has an \"exports\" key, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let exports be pjson.exports.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. \n

                                                                                                                                                                                                                                                            If exports is not null or undefined, then

                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Return PACKAGE_EXPORTS_RESOLVE(packageURL,\npackageSubpath, pjson.exports).
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Return the URL resolution of packageSubpath in packageURL.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      14. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    24. \n
                                                                                                                                                                                                                                                    25. Throw a Module Not Found error.
                                                                                                                                                                                                                                                    26. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    SELF_REFERENCE_RESOLVE(packageName, packageSubpath, parentURL)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let packageURL be the result of READ_PACKAGE_SCOPE(parentURL).
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. \n

                                                                                                                                                                                                                                                      If packageURL is null, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. \n

                                                                                                                                                                                                                                                      If pjson does not include an \"exports\" property, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. \n

                                                                                                                                                                                                                                                      If pjson.name is equal to packageName, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. \n

                                                                                                                                                                                                                                                        If packageSubpath is equal to \"./\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return packageURL + \"/\".
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        If packageSubpath is undefined, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the result of PACKAGE_MAIN_RESOLVE(packageURL, pjson).
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        Otherwise,

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. \n

                                                                                                                                                                                                                                                          If pjson is not null and pjson has an \"exports\" key, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let exports be pjson.exports.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. \n

                                                                                                                                                                                                                                                            If exports is not null or undefined, then

                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Return PACKAGE_EXPORTS_RESOLVE(packageURL, subpath,\npjson.exports).
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Return the URL resolution of subpath in packageURL.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. Otherwise, return undefined.
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_MAIN_RESOLVE(packageURL, pjson)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. \n

                                                                                                                                                                                                                                                      If pjson is null, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw a Module Not Found error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. \n

                                                                                                                                                                                                                                                      If pjson.exports is not null or undefined, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If exports is an Object with both a key starting with \".\" and a key\nnot starting with \".\", throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        If pjson.exports is a String or Array, or an Object containing no\nkeys starting with \".\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL,\npjson.exports, \"\").
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        If pjson.exports is an Object containing a \".\" property, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let mainExport be the \".\" property in pjson.exports.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL,\nmainExport, \"\").
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Throw a Package Path Not Exported error.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Let legacyMainURL be the result applying the legacy\nLOAD_AS_DIRECTORY CommonJS resolver to packageURL, throwing a\nModule Not Found error for no resolution.
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Return legacyMainURL.
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_EXPORTS_RESOLVE(packageURL, packagePath, exports)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. If exports is an Object with both a key starting with \".\" and a key not\nstarting with \".\", throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. \n

                                                                                                                                                                                                                                                      If exports is an Object and all keys of exports start with \".\", then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set packagePath to \"./\" concatenated with packagePath.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        If packagePath is a key of exports, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let target be the value of exports[packagePath].
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target,\n\"\", defaultEnv).
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Let directoryKeys be the list of keys of exports ending in\n\"/\", sorted by length descending.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. \n

                                                                                                                                                                                                                                                        For each key directory in directoryKeys, do

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. \n

                                                                                                                                                                                                                                                          If packagePath starts with directory, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let target be the value of exports[directory].
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Let subpath be the substring of target starting at the index\nof the length of directory.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          5. Return PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target,\nsubpath, defaultEnv).
                                                                                                                                                                                                                                                          6. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Throw a Package Path Not Exported error.
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL, target, subpath, env)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. \n

                                                                                                                                                                                                                                                      If target is a String, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If target does not start with \"./\" or contains any \"node_modules\"\nsegments including \"node_modules\" percent-encoding, throw an\nInvalid Package Target error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Let resolvedTarget be the URL resolution of the concatenation of\npackageURL and target.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. If resolvedTarget is not contained in packageURL, throw an\nInvalid Package Target error.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. If subpath has non-zero length and target does not end with \"/\",\nthrow an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. Let resolved be the URL resolution of the concatenation of\nsubpath and resolvedTarget.
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. If resolved is not contained in resolvedTarget, throw an\nInvalid Module Specifier error.
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      13. Return resolved.
                                                                                                                                                                                                                                                      14. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. \n

                                                                                                                                                                                                                                                      Otherwise, if target is a non-null Object, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If exports contains any index property keys, as defined in ECMA-262\n6.1.7 Array Index, throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        For each property p of target, in object insertion order as,

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. \n

                                                                                                                                                                                                                                                          If p equals \"default\" or env contains an entry for p, then

                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let targetValue be the value of the p property in target.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Return the result of PACKAGE_EXPORTS_TARGET_RESOLVE(\npackageURL, targetValue, subpath, env), continuing the\nloop on any Package Path Not Exported error.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Throw a Package Path Not Exported error.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. \n

                                                                                                                                                                                                                                                      Otherwise, if target is an Array, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If target.length is zero, throw a _Package Path Not Exported error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. \n

                                                                                                                                                                                                                                                        For each item targetValue in target, do

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If targetValue is an Array, continue the loop.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Return the result of PACKAGE_EXPORTS_TARGET_RESOLVE(packageURL,\ntargetValue, subpath, env), continuing the loop on any\nPackage Path Not Exported or Invalid Package Target error.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Throw the last fallback resolution error.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Otherwise, if target is null, throw a Package Path Not Exported\nerror.
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. Otherwise throw an Invalid Package Target error.
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    ESM_FORMAT(url)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Assert: url corresponds to an existing file.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. Let pjson be the result of READ_PACKAGE_SCOPE(url).
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. \n

                                                                                                                                                                                                                                                      If url ends in \".mjs\", then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return \"module\".
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. \n

                                                                                                                                                                                                                                                      If url ends in \".cjs\", then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return \"commonjs\".
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. \n

                                                                                                                                                                                                                                                      If pjson?.type exists and is \"module\", then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. \n

                                                                                                                                                                                                                                                        If url ends in \".js\", then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return \"module\".
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Throw an Unsupported File Extension error.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. \n

                                                                                                                                                                                                                                                      Otherwise,

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Unsupported File Extension error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    READ_PACKAGE_SCOPE(url)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let scopeURL be url.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. \n

                                                                                                                                                                                                                                                      While scopeURL is not the file system root,

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If scopeURL ends in a \"node_modules\" path segment, return null.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Let pjson be the result of READ_PACKAGE_JSON(scopeURL).
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. \n

                                                                                                                                                                                                                                                        If pjson is not null, then

                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return pjson.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Set scopeURL to the parent URL of scopeURL.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Return null.
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    READ_PACKAGE_JSON(packageURL)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let pjsonURL be the resolution of \"package.json\" within packageURL.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. \n

                                                                                                                                                                                                                                                      If the file at pjsonURL does not exist, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return null.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. \n

                                                                                                                                                                                                                                                      If the file at packageURL does not parse as valid JSON, then

                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Return the parsed JSON source of the file at pjsonURL.
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    The algorithm to load an ES module specifier is given through the\nESM_RESOLVE method below. It returns the resolved URL for a\nmodule specifier relative to a parentURL.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The algorithm to determine the module format of a resolved URL is\nprovided by ESM_FORMAT, which returns the unique module\nformat for any file. The \"module\" format is returned for an ECMAScript\nModule, while the \"commonjs\" format is used to indicate loading through the\nlegacy CommonJS loader. Additional formats such as \"addon\" can be extended in\nfuture updates.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    In the following algorithms, all subroutine errors are propagated as errors\nof these top-level routines unless stated otherwise.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    defaultConditions is the conditional environment name array,\n[\"node\", \"import\"].

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The resolver can throw the following errors:

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    • Invalid Module Specifier: Module specifier is an invalid URL, package name\nor package subpath specifier.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Invalid Package Configuration: package.json configuration is invalid or\ncontains an invalid configuration.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Invalid Package Target: Package exports or imports define a target module\nfor the package that is an invalid type or string target.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Package Path Not Exported: Package exports do not define or permit a target\nsubpath in the package for the given module.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Package Import Not Defined: Package imports do not define the specifier.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    • Module Not Found: The package or module requested does not exist.
                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                    ", + "type": "module", + "displayName": "Resolver algorithm" + }, + { + "textRaw": "Resolver Algorithm Specification", + "name": "resolver_algorithm_specification", + "desc": "

                                                                                                                                                                                                                                                    ESM_RESOLVE(specifier, parentURL)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let resolved be undefined.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. If specifier is a valid URL, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set resolved to the result of parsing and reserializing\nspecifier as a URL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Otherwise, if specifier starts with \"/\", \"./\" or \"../\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set resolved to the URL resolution of specifier relative to\nparentURL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Otherwise, if specifier starts with \"#\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set resolved to the destructured value of the result of\nPACKAGE_IMPORTS_RESOLVE(specifier, parentURL,\ndefaultConditions).
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. Otherwise,\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Note: specifier is now a bare specifier.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Set resolved the result of\nPACKAGE_RESOLVE(specifier, parentURL).
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. If resolved contains any percent encodings of \"/\" or \"\\\" (\"%2f\"\nand \"%5C\" respectively), then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    13. If the file at resolved is a directory, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Unsupported Directory Import error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    14. \n
                                                                                                                                                                                                                                                    15. If the file at resolved does not exist, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw a Module Not Found error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    16. \n
                                                                                                                                                                                                                                                    17. Set resolved to the real path of resolved.
                                                                                                                                                                                                                                                    18. \n
                                                                                                                                                                                                                                                    19. Let format be the result of ESM_FORMAT(resolved).
                                                                                                                                                                                                                                                    20. \n
                                                                                                                                                                                                                                                    21. Load resolved as module format, format.
                                                                                                                                                                                                                                                    22. \n
                                                                                                                                                                                                                                                    23. Return resolved.
                                                                                                                                                                                                                                                    24. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_RESOLVE(packageSpecifier, parentURL)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let packageName be undefined.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. If packageSpecifier is an empty string, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. If packageSpecifier does not start with \"@\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set packageName to the substring of packageSpecifier until the first\n\"/\" separator or the end of the string.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Otherwise,\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If packageSpecifier does not contain a \"/\" separator, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Set packageName to the substring of packageSpecifier\nuntil the second \"/\" separator or the end of the string.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. If packageName starts with \".\" or contains \"\\\" or \"%\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. Let packageSubpath be \".\" concatenated with the substring of\npackageSpecifier from the position at the length of packageName.
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    13. Let selfUrl be the result of\nPACKAGE_SELF_RESOLVE(packageName, packageSubpath, parentURL).
                                                                                                                                                                                                                                                    14. \n
                                                                                                                                                                                                                                                    15. If selfUrl is not undefined, return selfUrl.
                                                                                                                                                                                                                                                    16. \n
                                                                                                                                                                                                                                                    17. If packageSubpath is \".\" and packageName is a Node.js builtin\nmodule, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return the string \"node:\" concatenated with packageSpecifier.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    18. \n
                                                                                                                                                                                                                                                    19. While parentURL is not the file system root,\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let packageURL be the URL resolution of \"node_modules/\"\nconcatenated with packageSpecifier, relative to parentURL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Set parentURL to the parent folder URL of parentURL.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. If the folder at packageURL does not exist, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set parentURL to the parent URL path of parentURL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Continue the next loop iteration.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. If pjson is not null and pjson.exports is not null or\nundefined, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let exports be pjson.exports.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Return the resolved destructured value of the result of\nPACKAGE_EXPORTS_RESOLVE(packageURL, packageSubpath,\npjson.exports, defaultConditions).
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. Otherwise, if packageSubpath is equal to \".\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the result applying the legacy LOAD_AS_DIRECTORY\nCommonJS resolver to packageURL, throwing a Module Not Found\nerror for no resolution.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      13. Otherwise,\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the URL resolution of packageSubpath in packageURL.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      14. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    20. \n
                                                                                                                                                                                                                                                    21. Throw a Module Not Found error.
                                                                                                                                                                                                                                                    22. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_SELF_RESOLVE(packageName, packageSubpath, parentURL)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let packageURL be the result of READ_PACKAGE_SCOPE(parentURL).
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. If packageURL is null, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. If pjson is null or if pjson.exports is null or\nundefined, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. If pjson.name is equal to packageName, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return the resolved destructured value of the result of\nPACKAGE_EXPORTS_RESOLVE(packageURL, subpath, pjson.exports,\ndefaultConditions).
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. Otherwise, return undefined.
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_EXPORTS_RESOLVE(packageURL, subpath, exports, conditions)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. If exports is an Object with both a key starting with \".\" and a key not\nstarting with \".\", throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. If subpath is equal to \".\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let mainExport be undefined.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If exports is a String or Array, or an Object containing no keys\nstarting with \".\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set mainExport to exports.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Otherwise if exports is an Object containing a \".\" property, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Set mainExport to exports[\".\"].
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. If mainExport is not undefined, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, mainExport, \"\", false, false,\nconditions).
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. If resolved is not null or undefined, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return resolved.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Otherwise, if exports is an Object and all keys of exports start with\n\".\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let matchKey be the string \"./\" concatenated with subpath.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Let resolvedMatch be result of PACKAGE_IMPORTS_EXPORTS_RESOLVE(\nmatchKey, exports, packageURL, false, conditions).
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. If resolvedMatch.resolve is not null or undefined, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return resolvedMatch.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Throw a Package Path Not Exported error.
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_IMPORTS_RESOLVE(specifier, parentURL, conditions)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Assert: specifier begins with \"#\".
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. If specifier is exactly equal to \"#\" or starts with \"#/\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Let packageURL be the result of READ_PACKAGE_SCOPE(parentURL).
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. If packageURL is not null, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let pjson be the result of READ_PACKAGE_JSON(packageURL).
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If pjson.imports is a non-null Object, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let resolvedMatch be the result of\nPACKAGE_IMPORTS_EXPORTS_RESOLVE(specifier, pjson.imports,\npackageURL, true, conditions).
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. If resolvedMatch.resolve is not null or undefined, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Return resolvedMatch.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. Throw a Package Import Not Defined error.
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_IMPORTS_EXPORTS_RESOLVE(matchKey, matchObj, packageURL,\nisImports, conditions)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. If matchKey is a key of matchObj, and does not end in \"*\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Let target be the value of matchObj[matchKey].
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, target, \"\", false, isImports, conditions).
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Return the object { resolved, exact: true }.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. Let expansionKeys be the list of keys of matchObj ending in \"/\"\nor \"*\", sorted by length descending.
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. For each key expansionKey in expansionKeys, do\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If expansionKey ends in \"*\" and matchKey starts with but is\nnot equal to the substring of expansionKey excluding the last \"*\"\ncharacter, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let target be the value of matchObj[expansionKey].
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Let subpath be the substring of matchKey starting at the\nindex of the length of expansionKey minus one.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, target, subpath, true, isImports,\nconditions).
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. Return the object { resolved, exact: true }.
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If matchKey starts with expansionKey, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let target be the value of matchObj[expansionKey].
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Let subpath be the substring of matchKey starting at the\nindex of the length of expansionKey.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, target, subpath, false, isImports,\nconditions).
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        7. Return the object { resolved, exact: false }.
                                                                                                                                                                                                                                                        8. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Return the object { resolved: null, exact: true }.
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    PACKAGE_TARGET_RESOLVE(packageURL, target, subpath, pattern,\ninternal, conditions)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. If target is a String, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If pattern is false, subpath has non-zero length and target\ndoes not end with \"/\", throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If target does not start with \"./\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If internal is true and target does not start with \"../\" or\n\"/\" and is not a valid URL, then\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. If pattern is true, then\n
                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                            1. Return PACKAGE_RESOLVE(target with every instance of\n\"*\" replaced by subpath, packageURL + \"/\")_.
                                                                                                                                                                                                                                                            2. \n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Return PACKAGE_RESOLVE(target + subpath,\npackageURL + \"/\")_.
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. Otherwise, throw an Invalid Package Target error.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. If target split on \"/\" or \"\\\" contains any \".\", \"..\" or\n\"node_modules\" segments after the first segment, throw an\nInvalid Package Target error.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. Let resolvedTarget be the URL resolution of the concatenation of\npackageURL and target.
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      9. Assert: resolvedTarget is contained in packageURL.
                                                                                                                                                                                                                                                      10. \n
                                                                                                                                                                                                                                                      11. If subpath split on \"/\" or \"\\\" contains any \".\", \"..\" or\n\"node_modules\" segments, throw an Invalid Module Specifier error.
                                                                                                                                                                                                                                                      12. \n
                                                                                                                                                                                                                                                      13. If pattern is true, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the URL resolution of resolvedTarget with every instance of\n\"*\" replaced with subpath.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      14. \n
                                                                                                                                                                                                                                                      15. Otherwise,\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return the URL resolution of the concatenation of subpath and\nresolvedTarget.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      16. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. Otherwise, if target is a non-null Object, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If exports contains any index property keys, as defined in ECMA-262\n6.1.7 Array Index, throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. For each property p of target, in object insertion order as,\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. If p equals \"default\" or conditions contains an entry for p,\nthen\n
                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                          1. Let targetValue be the value of the p property in target.
                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                          3. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, targetValue, subpath, pattern, internal,\nconditions).
                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                          5. If resolved is equal to undefined, continue the loop.
                                                                                                                                                                                                                                                          6. \n
                                                                                                                                                                                                                                                          7. Return resolved.
                                                                                                                                                                                                                                                          8. \n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Return undefined.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Otherwise, if target is an Array, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If _target.length is zero, return null.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. For each item targetValue in target, do\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Let resolved be the result of PACKAGE_TARGET_RESOLVE(\npackageURL, targetValue, subpath, pattern, internal,\nconditions), continuing the loop on any Invalid Package Target\nerror.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        3. If resolved is undefined, continue the loop.
                                                                                                                                                                                                                                                        4. \n
                                                                                                                                                                                                                                                        5. Return resolved.
                                                                                                                                                                                                                                                        6. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Return or throw the last fallback resolution null return or error.
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Otherwise, if target is null, return null.
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. Otherwise throw an Invalid Package Target error.
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    ESM_FORMAT(url)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Assert: url corresponds to an existing file.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. Let pjson be the result of READ_PACKAGE_SCOPE(url).
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. If url ends in \".mjs\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return \"module\".
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. If url ends in \".cjs\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return \"commonjs\".
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    9. If pjson?.type exists and is \"module\", then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. If url ends in \".js\", then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return \"module\".
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. Throw an Unsupported File Extension error.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    10. \n
                                                                                                                                                                                                                                                    11. Otherwise,\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Unsupported File Extension error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    12. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    READ_PACKAGE_SCOPE(url)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let scopeURL be url.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. While scopeURL is not the file system root,\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Set scopeURL to the parent URL of scopeURL.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      3. If scopeURL ends in a \"node_modules\" path segment, return null.
                                                                                                                                                                                                                                                      4. \n
                                                                                                                                                                                                                                                      5. Let pjson be the result of READ_PACKAGE_JSON(scopeURL).
                                                                                                                                                                                                                                                      6. \n
                                                                                                                                                                                                                                                      7. If pjson is not null, then\n
                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                        1. Return pjson.
                                                                                                                                                                                                                                                        2. \n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      8. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. Return null.
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    READ_PACKAGE_JSON(packageURL)

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    1. Let pjsonURL be the resolution of \"package.json\" within packageURL.
                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                    3. If the file at pjsonURL does not exist, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Return null.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                    5. If the file at packageURL does not parse as valid JSON, then\n
                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                      1. Throw an Invalid Package Configuration error.
                                                                                                                                                                                                                                                      2. \n
                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                    6. \n
                                                                                                                                                                                                                                                    7. Return the parsed JSON source of the file at pjsonURL.
                                                                                                                                                                                                                                                    8. \n
                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Resolver Algorithm" + "displayName": "Resolver Algorithm Specification" }, { "textRaw": "Customizing ESM specifier resolution algorithm", "name": "customizing_esm_specifier_resolution_algorithm", - "desc": "

                                                                                                                                                                                                                                                    The current specifier resolution does not support all default behavior of\nthe CommonJS loader. One of the behavior differences is automatic resolution\nof file extensions and the ability to import directories that have an index\nfile.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The --experimental-specifier-resolution=[mode] flag can be used to customize\nthe extension resolution algorithm. The default mode is explicit, which\nrequires the full path to a module be provided to the loader. To enable the\nautomatic extension resolution and importing from directories that include an\nindex file use the node mode.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    $ node index.mjs\nsuccess!\n$ node index # Failure!\nError: Cannot find module\n$ node --experimental-specifier-resolution=node index\nsuccess!\n
                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                    The current specifier resolution does not support all default behavior of\nthe CommonJS loader. One of the behavior differences is automatic resolution\nof file extensions and the ability to import directories that have an index\nfile.

                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                    The --experimental-specifier-resolution=[mode] flag can be used to customize\nthe extension resolution algorithm. The default mode is explicit, which\nrequires the full path to a module be provided to the loader. To enable the\nautomatic extension resolution and importing from directories that include an\nindex file use the node mode.

                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                    $ node index.mjs\nsuccess!\n$ node index # Failure!\nError: Cannot find module\n$ node --experimental-specifier-resolution=node index\nsuccess!\n
                                                                                                                                                                                                                                                    \n", "type": "module", "displayName": "Customizing ESM specifier resolution algorithm" } ], "type": "misc", - "displayName": "Resolution Algorithm" + "displayName": "Resolution algorithm" } ], "properties": [ diff -Nru nodejs-mozilla-12.18.1/doc/api/esm.md nodejs-mozilla-12.22.12/doc/api/esm.md --- nodejs-mozilla-12.18.1/doc/api/esm.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/esm.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,9 +1,33 @@ -# ECMAScript Modules +# Modules: ECMAScript modules + -> Stability: 1 - Experimental +> Stability: 2 - Stable ## Introduction @@ -35,763 +59,44 @@ ``` Node.js fully supports ECMAScript modules as they are currently specified and -provides limited interoperability between them and the existing module format, +provides interoperability between them and its original module format, [CommonJS][]. -Node.js contains support for ES Modules based upon the -[Node.js EP for ES Modules][] and the [ECMAScript-modules implementation][]. - -Expect major changes in the implementation including interoperability support, -specifier resolution, and default behavior. + + + + ## Enabling -Experimental support for ECMAScript modules is enabled by default. -Node.js will treat the following as ES modules when passed to `node` as the -initial input, or when referenced by `import` statements within ES module code: - -* Files ending in `.mjs`. - -* Files ending in `.js` when the nearest parent `package.json` file contains a - top-level field `"type"` with a value of `"module"`. - -* Strings passed in as an argument to `--eval` or `--print`, or piped to - `node` via `STDIN`, with the flag `--input-type=module`. - -Node.js will treat as CommonJS all other forms of input, such as `.js` files -where the nearest parent `package.json` file contains no top-level `"type"` -field, or string input without the flag `--input-type`. This behavior is to -preserve backward compatibility. However, now that Node.js supports both -CommonJS and ES modules, it is best to be explicit whenever possible. Node.js -will treat the following as CommonJS when passed to `node` as the initial input, -or when referenced by `import` statements within ES module code: - -* Files ending in `.cjs`. - -* Files ending in `.js` when the nearest parent `package.json` file contains a - top-level field `"type"` with a value of `"commonjs"`. - -* Strings passed in as an argument to `--eval` or `--print`, or piped to - `node` via `STDIN`, with the flag `--input-type=commonjs`. - -### `package.json` `"type"` field - -Files ending with `.js` will be loaded as ES modules when the nearest parent -`package.json` file contains a top-level field `"type"` with a value of -`"module"`. - -The nearest parent `package.json` is defined as the first `package.json` found -when searching in the current folder, that folder’s parent, and so on up -until the root of the volume is reached. - - -```js -// package.json -{ - "type": "module" -} -``` - -```sh -# In same folder as above package.json -node my-app.js # Runs as ES module -``` - -If the nearest parent `package.json` lacks a `"type"` field, or contains -`"type": "commonjs"`, `.js` files are treated as CommonJS. If the volume root is -reached and no `package.json` is found, Node.js defers to the default, a -`package.json` with no `"type"` field. - -`import` statements of `.js` files are treated as ES modules if the nearest -parent `package.json` contains `"type": "module"`. - -```js -// my-app.js, part of the same example as above -import './startup.js'; // Loaded as ES module because of package.json -``` - -Package authors should include the `"type"` field, even in packages where all -sources are CommonJS. Being explicit about the `type` of the package will -future-proof the package in case the default type of Node.js ever changes, and -it will also make things easier for build tools and loaders to determine how the -files in the package should be interpreted. - -Regardless of the value of the `"type"` field, `.mjs` files are always treated -as ES modules and `.cjs` files are always treated as CommonJS. - -### Package Scope and File Extensions - -A folder containing a `package.json` file, and all subfolders below that folder -down until the next folder containing another `package.json`, is considered a -_package scope_. The `"type"` field defines how `.js` files should be treated -within a particular `package.json` file’s package scope. Every package in a -project’s `node_modules` folder contains its own `package.json` file, so each -project’s dependencies have their own package scopes. A `package.json` lacking a -`"type"` field is treated as if it contained `"type": "commonjs"`. - -The package scope applies not only to initial entry points (`node my-app.js`) -but also to files referenced by `import` statements and `import()` expressions. - -```js -// my-app.js, in an ES module package scope because there is a package.json -// file in the same folder with "type": "module". - -import './startup/init.js'; -// Loaded as ES module since ./startup contains no package.json file, -// and therefore inherits the ES module package scope from one level up. - -import 'commonjs-package'; -// Loaded as CommonJS since ./node_modules/commonjs-package/package.json -// lacks a "type" field or contains "type": "commonjs". - -import './node_modules/commonjs-package/index.js'; -// Loaded as CommonJS since ./node_modules/commonjs-package/package.json -// lacks a "type" field or contains "type": "commonjs". -``` - -Files ending with `.mjs` are always loaded as ES modules regardless of package -scope. - -Files ending with `.cjs` are always loaded as CommonJS regardless of package -scope. - -```js -import './legacy-file.cjs'; -// Loaded as CommonJS since .cjs is always loaded as CommonJS. - -import 'commonjs-package/src/index.mjs'; -// Loaded as ES module since .mjs is always loaded as ES module. -``` - -The `.mjs` and `.cjs` extensions may be used to mix types within the same -package scope: - -* Within a `"type": "module"` package scope, Node.js can be instructed to - interpret a particular file as CommonJS by naming it with a `.cjs` extension - (since both `.js` and `.mjs` files are treated as ES modules within a - `"module"` package scope). - -* Within a `"type": "commonjs"` package scope, Node.js can be instructed to - interpret a particular file as an ES module by naming it with an `.mjs` - extension (since both `.js` and `.cjs` files are treated as CommonJS within a - `"commonjs"` package scope). - -### `--input-type` flag - -Strings passed in as an argument to `--eval` or `--print` (or `-e` or `-p`), or -piped to `node` via `STDIN`, will be treated as ES modules when the -`--input-type=module` flag is set. - -```sh -node --input-type=module --eval "import { sep } from 'path'; console.log(sep);" - -echo "import { sep } from 'path'; console.log(sep);" | node --input-type=module -``` - -For completeness there is also `--input-type=commonjs`, for explicitly running -string input as CommonJS. This is the default behavior if `--input-type` is -unspecified. +Node.js treats JavaScript code as CommonJS modules by default. +Authors can tell Node.js to treat JavaScript code as ECMAScript modules +via the `.mjs` file extension, the `package.json` [`"type"`][] field, or the +`--input-type` flag. See +[Modules: Packages](packages.html#packages_determining_module_system) for more +details. + + + + + + + + + + + + + + + + ## Packages -### Package Entry Points - -In a package’s `package.json` file, two fields can define entry points for a -package: `"main"` and `"exports"`. The `"main"` field is supported in all -versions of Node.js, but its capabilities are limited: it only defines the main -entry point of the package. - -The `"exports"` field provides an alternative to `"main"` where the package -main entry point can be defined while also encapsulating the package, -**preventing any other entry points besides those defined in `"exports"`**. -This encapsulation allows module authors to define a public interface for -their package. - -If both `"exports"` and `"main"` are defined, the `"exports"` field takes -precedence over `"main"`. `"exports"` are not specific to ES modules or -CommonJS; `"main"` will be overridden by `"exports"` if it exists. As such -`"main"` cannot be used as a fallback for CommonJS but it can be used as a -fallback for legacy versions of Node.js that do not support the `"exports"` -field. - -[Conditional Exports][] can be used within `"exports"` to define different -package entry points per environment, including whether the package is -referenced via `require` or via `import`. For more information about supporting -both CommonJS and ES Modules in a single package please consult -[the dual CommonJS/ES module packages section][]. - -**Warning**: Introducing the `"exports"` field prevents consumers of a package -from using any entry points that are not defined, including the `package.json` -(e.g. `require('your-package/package.json')`. **This will likely be a breaking -change.** - -To make the introduction of `"exports"` non-breaking, ensure that every -previously supported entry point is exported. It is best to explicitly specify -entry points so that the package’s public API is well-defined. For example, -a project that previous exported `main`, `lib`, -`feature`, and the `package.json` could use the following `package.exports`: - -```json -{ - "name": "my-mod", - "exports": { - ".": "./lib/index.js", - "./lib": "./lib/index.js", - "./lib/index": "./lib/index.js", - "./lib/index.js": "./lib/index.js", - "./feature": "./feature/index.js", - "./feature/index.js": "./feature/index.js", - "./package.json": "./package.json" - } -} -``` - -Alternatively a project could choose to export entire folders: - -```json -{ - "name": "my-mod", - "exports": { - ".": "./lib/index.js", - "./lib": "./lib/index.js", - "./lib/": "./lib/", - "./feature": "./feature/index.js", - "./feature/": "./feature/", - "./package.json": "./package.json" - } -} -``` - -As a last resort, package encapsulation can be disabled entirely by creating an -export for the root of the package `"./": "./"`. This will expose every file in -the package at the cost of disabling the encapsulation and potential tooling -benefits this provides. As the ES Module loader in Node.js enforces the use of -[the full specifier path][], exporting the root rather than being explicit -about entry is less expressive than either of the prior examples. Not only -will encapsulation be lost but module consumers will be unable to -`import feature from 'my-mod/feature'` as they will need to provide the full -path `import feature from 'my-mod/feature/index.js`. - -#### Main Entry Point Export - -To set the main entry point for a package, it is advisable to define both -`"exports"` and `"main"` in the package’s `package.json` file: - - -```js -{ - "main": "./main.js", - "exports": "./main.js" -} -``` - -The benefit of doing this is that when using the `"exports"` field all -subpaths of the package will no longer be available to importers under -`require('pkg/subpath.js')`, and instead they will get a new error, -`ERR_PACKAGE_PATH_NOT_EXPORTED`. - -This encapsulation of exports provides more reliable guarantees -about package interfaces for tools and when handling semver upgrades for a -package. It is not a strong encapsulation since a direct require of any -absolute subpath of the package such as -`require('/path/to/node_modules/pkg/subpath.js')` will still load `subpath.js`. - -#### Subpath Exports - -When using the `"exports"` field, custom subpaths can be defined along -with the main entry point by treating the main entry point as the -`"."` subpath: - - -```js -{ - "main": "./main.js", - "exports": { - ".": "./main.js", - "./submodule": "./src/submodule.js" - } -} -``` - -Now only the defined subpath in `"exports"` can be imported by a -consumer: - -```js -import submodule from 'es-module-package/submodule'; -// Loads ./node_modules/es-module-package/src/submodule.js -``` - -While other subpaths will error: - -```js -import submodule from 'es-module-package/private-module.js'; -// Throws ERR_PACKAGE_PATH_NOT_EXPORTED -``` - -Entire folders can also be mapped with package exports: - - -```js -// ./node_modules/es-module-package/package.json -{ - "exports": { - "./features/": "./src/features/" - } -} -``` - -With the above, all modules within the `./src/features/` folder -are exposed deeply to `import` and `require`: - -```js -import feature from 'es-module-package/features/x.js'; -// Loads ./node_modules/es-module-package/src/features/x.js -``` - -When using folder mappings, ensure that you do want to expose every -module inside the subfolder. Any modules which are not public -should be moved to another folder to retain the encapsulation -benefits of exports. - -#### Package Exports Fallbacks - -For possible new specifier support in future, array fallbacks are -supported for all invalid specifiers: - - -```js -{ - "exports": { - "./submodule": ["not:valid", "./submodule.js"] - } -} -``` - -Since `"not:valid"` is not a valid specifier, `"./submodule.js"` is used -instead as the fallback, as if it were the only target. - -#### Exports Sugar - -If the `"."` export is the only export, the `"exports"` field provides sugar -for this case being the direct `"exports"` field value. - -If the `"."` export has a fallback array or string value, then the `"exports"` -field can be set to this value directly. - - -```js -{ - "exports": { - ".": "./main.js" - } -} -``` - -can be written: - - -```js -{ - "exports": "./main.js" -} -``` - -#### Conditional Exports - -Conditional exports provide a way to map to different paths depending on -certain conditions. They are supported for both CommonJS and ES module imports. - -For example, a package that wants to provide different ES module exports for -`require()` and `import` can be written: - - -```js -// package.json -{ - "main": "./main-require.cjs", - "exports": { - "import": "./main-module.js", - "require": "./main-require.cjs" - }, - "type": "module" -} -``` - -Node.js supports the following conditions: - -* `"import"` - matched when the package is loaded via `import` or - `import()`. Can reference either an ES module or CommonJS file, as both - `import` and `import()` can load either ES module or CommonJS sources. -* `"require"` - matched when the package is loaded via `require()`. - As `require()` only supports CommonJS, the referenced file must be CommonJS. -* `"node"` - matched for any Node.js environment. Can be a CommonJS or ES - module file. _This condition should always come after `"import"` or - `"require"`._ -* `"default"` - the generic fallback that will always match. Can be a CommonJS - or ES module file. _This condition should always come last._ - -Condition matching is applied in object order from first to last within the -`"exports"` object. _The general rule is that conditions should be used -from most specific to least specific in object order._ - -Other conditions such as `"browser"`, `"electron"`, `"deno"`, `"react-native"`, -etc. are ignored by Node.js but may be used by other runtimes or tools. -Further restrictions, definitions or guidance on condition names may be -provided in the future. - -Using the `"import"` and `"require"` conditions can lead to some hazards, -which are explained further in -[the dual CommonJS/ES module packages section][]. - -Conditional exports can also be extended to exports subpaths, for example: - - -```js -{ - "main": "./main.js", - "exports": { - ".": "./main.js", - "./feature": { - "browser": "./feature-browser.js", - "default": "./feature.js" - } - } -} -``` - -Defines a package where `require('pkg/feature')` and `import 'pkg/feature'` -could provide different implementations between the browser and Node.js, -given third-party tool support for a `"browser"` condition. - -#### Nested conditions - -In addition to direct mappings, Node.js also supports nested condition objects. - -For example, to define a package that only has dual mode entry points for -use in Node.js but not the browser: - - -```js -{ - "main": "./main.js", - "exports": { - "browser": "./feature-browser.mjs", - "node": { - "import": "./feature-node.mjs", - "require": "./feature-node.cjs" - } - } -} -``` - -Conditions continue to be matched in order as with flat conditions. If -a nested conditional does not have any mapping it will continue checking -the remaining conditions of the parent condition. In this way nested -conditions behave analogously to nested JavaScript `if` statements. - -#### Self-referencing a package using its name - -Within a package, the values defined in the package’s -`package.json` `"exports"` field can be referenced via the package’s name. -For example, assuming the `package.json` is: - -```json -// package.json -{ - "name": "a-package", - "exports": { - ".": "./main.mjs", - "./foo": "./foo.js" - } -} -``` - -Then any module _in that package_ can reference an export in the package itself: - -```js -// ./a-module.mjs -import { something } from 'a-package'; // Imports "something" from ./main.mjs. -``` - -Self-referencing is available only if `package.json` has `exports`, and will -allow importing only what that `exports` (in the `package.json`) allows. -So the code below, given the package above, will generate a runtime error: - -```js -// ./another-module.mjs - -// Imports "another" from ./m.mjs. Fails because -// the "package.json" "exports" field -// does not provide an export named "./m.mjs". -import { another } from 'a-package/m.mjs'; -``` - -Self-referencing is also available when using `require`, both in an ES module, -and in a CommonJS one. For example, this code will also work: - -```js -// ./a-module.js -const { something } = require('a-package/foo'); // Loads from ./foo.js. -``` - -### Dual CommonJS/ES Module Packages - -Prior to the introduction of support for ES modules in Node.js, it was a common -pattern for package authors to include both CommonJS and ES module JavaScript -sources in their package, with `package.json` `"main"` specifying the CommonJS -entry point and `package.json` `"module"` specifying the ES module entry point. -This enabled Node.js to run the CommonJS entry point while build tools such as -bundlers used the ES module entry point, since Node.js ignored (and still -ignores) the top-level `"module"` field. - -Node.js can now run ES module entry points, and a package can contain both -CommonJS and ES module entry points (either via separate specifiers such as -`'pkg'` and `'pkg/es-module'`, or both at the same specifier via [Conditional -Exports][]). Unlike in the scenario where `"module"` is only used by bundlers, -or ES module files are transpiled into CommonJS on the fly before evaluation by -Node.js, the files referenced by the ES module entry point are evaluated as ES -modules. - -#### Dual Package Hazard - -When an application is using a package that provides both CommonJS and ES module -sources, there is a risk of certain bugs if both versions of the package get -loaded. This potential comes from the fact that the `pkgInstance` created by -`const pkgInstance = require('pkg')` is not the same as the `pkgInstance` -created by `import pkgInstance from 'pkg'` (or an alternative main path like -`'pkg/module'`). This is the “dual package hazard,” where two versions of the -same package can be loaded within the same runtime environment. While it is -unlikely that an application or package would intentionally load both versions -directly, it is common for an application to load one version while a dependency -of the application loads the other version. This hazard can happen because -Node.js supports intermixing CommonJS and ES modules, and can lead to unexpected -behavior. - -If the package main export is a constructor, an `instanceof` comparison of -instances created by the two versions returns `false`, and if the export is an -object, properties added to one (like `pkgInstance.foo = 3`) are not present on -the other. This differs from how `import` and `require` statements work in -all-CommonJS or all-ES module environments, respectively, and therefore is -surprising to users. It also differs from the behavior users are familiar with -when using transpilation via tools like [Babel][] or [`esm`][]. - -#### Writing Dual Packages While Avoiding or Minimizing Hazards - -First, the hazard described in the previous section occurs when a package -contains both CommonJS and ES module sources and both sources are provided for -use in Node.js, either via separate main entry points or exported paths. A -package could instead be written where any version of Node.js receives only -CommonJS sources, and any separate ES module sources the package may contain -could be intended only for other environments such as browsers. Such a package -would be usable by any version of Node.js, since `import` can refer to CommonJS -files; but it would not provide any of the advantages of using ES module syntax. - -A package could also switch from CommonJS to ES module syntax in a breaking -change version bump. This has the disadvantage that the newest version -of the package would only be usable in ES module-supporting versions of Node.js. - -Every pattern has tradeoffs, but there are two broad approaches that satisfy the -following conditions: - -1. The package is usable via both `require` and `import`. -1. The package is usable in both current Node.js and older versions of Node.js - that lack support for ES modules. -1. The package main entry point, e.g. `'pkg'` can be used by both `require` to - resolve to a CommonJS file and by `import` to resolve to an ES module file. - (And likewise for exported paths, e.g. `'pkg/feature'`.) -1. The package provides named exports, e.g. `import { name } from 'pkg'` rather - than `import pkg from 'pkg'; pkg.name`. -1. The package is potentially usable in other ES module environments such as - browsers. -1. The hazards described in the previous section are avoided or minimized. - -##### Approach #1: Use an ES Module Wrapper - -Write the package in CommonJS or transpile ES module sources into CommonJS, and -create an ES module wrapper file that defines the named exports. Using -[Conditional Exports][], the ES module wrapper is used for `import` and the -CommonJS entry point for `require`. - - -```js -// ./node_modules/pkg/package.json -{ - "type": "module", - "main": "./index.cjs", - "exports": { - "import": "./wrapper.mjs", - "require": "./index.cjs" - } -} -``` - -```js -// ./node_modules/pkg/index.cjs -exports.name = 'value'; -``` - -```js -// ./node_modules/pkg/wrapper.mjs -import cjsModule from './index.cjs'; -export const name = cjsModule.name; -``` - -In this example, the `name` from `import { name } from 'pkg'` is the same -singleton as the `name` from `const { name } = require('pkg')`. Therefore `===` -returns `true` when comparing the two `name`s and the divergent specifier hazard -is avoided. - -If the module is not simply a list of named exports, but rather contains a -unique function or object export like `module.exports = function () { ... }`, -or if support in the wrapper for the `import pkg from 'pkg'` pattern is desired, -then the wrapper would instead be written to export the default optionally -along with any named exports as well: - -```js -import cjsModule from './index.cjs'; -export const name = cjsModule.name; -export default cjsModule; -``` - -This approach is appropriate for any of the following use cases: -* The package is currently written in CommonJS and the author would prefer not - to refactor it into ES module syntax, but wishes to provide named exports for - ES module consumers. -* The package has other packages that depend on it, and the end user might - install both this package and those other packages. For example a `utilities` - package is used directly in an application, and a `utilities-plus` package - adds a few more functions to `utilities`. Because the wrapper exports - underlying CommonJS files, it doesn’t matter if `utilities-plus` is written in - CommonJS or ES module syntax; it will work either way. -* The package stores internal state, and the package author would prefer not to - refactor the package to isolate its state management. See the next section. - -A variant of this approach not requiring conditional exports for consumers could -be to add an export, e.g. `"./module"`, to point to an all-ES module-syntax -version of the package. This could be used via `import 'pkg/module'` by users -who are certain that the CommonJS version will not be loaded anywhere in the -application, such as by dependencies; or if the CommonJS version can be loaded -but doesn’t affect the ES module version (for example, because the package is -stateless): - - -```js -// ./node_modules/pkg/package.json -{ - "type": "module", - "main": "./index.cjs", - "exports": { - ".": "./index.cjs", - "./module": "./wrapper.mjs" - } -} -``` - -##### Approach #2: Isolate State - -A `package.json` file can define the separate CommonJS and ES module entry -points directly: - - -```js -// ./node_modules/pkg/package.json -{ - "type": "module", - "main": "./index.cjs", - "exports": { - "import": "./index.mjs", - "require": "./index.cjs" - } -} -``` - -This can be done if both the CommonJS and ES module versions of the package are -equivalent, for example because one is the transpiled output of the other; and -the package’s management of state is carefully isolated (or the package is -stateless). - -The reason that state is an issue is because both the CommonJS and ES module -versions of the package may get used within an application; for example, the -user’s application code could `import` the ES module version while a dependency -`require`s the CommonJS version. If that were to occur, two copies of the -package would be loaded in memory and therefore two separate states would be -present. This would likely cause hard-to-troubleshoot bugs. - -Aside from writing a stateless package (if JavaScript’s `Math` were a package, -for example, it would be stateless as all of its methods are static), there are -some ways to isolate state so that it’s shared between the potentially loaded -CommonJS and ES module instances of the package: - -1. If possible, contain all state within an instantiated object. JavaScript’s - `Date`, for example, needs to be instantiated to contain state; if it were a - package, it would be used like this: - - ```js - import Date from 'date'; - const someDate = new Date(); - // someDate contains state; Date does not - ``` - - The `new` keyword isn’t required; a package’s function can return a new - object, or modify a passed-in object, to keep the state external to the - package. - -1. Isolate the state in one or more CommonJS files that are shared between the - CommonJS and ES module versions of the package. For example, if the CommonJS - and ES module entry points are `index.cjs` and `index.mjs`, respectively: - - ```js - // ./node_modules/pkg/index.cjs - const state = require('./state.cjs'); - module.exports.state = state; - ``` - - ```js - // ./node_modules/pkg/index.mjs - import state from './state.cjs'; - export { - state - }; - ``` - - Even if `pkg` is used via both `require` and `import` in an application (for - example, via `import` in application code and via `require` by a dependency) - each reference of `pkg` will contain the same state; and modifying that - state from either module system will apply to both. - -Any plugins that attach to the package’s singleton would need to separately -attach to both the CommonJS and ES module singletons. - -This approach is appropriate for any of the following use cases: -* The package is currently written in ES module syntax and the package author - wants that version to be used wherever such syntax is supported. -* The package is stateless or its state can be isolated without too much - difficulty. -* The package is unlikely to have other public packages that depend on it, or if - it does, the package is stateless or has state that need not be shared between - dependencies or with the overall application. - -Even with isolated state, there is still the cost of possible extra code -execution between the CommonJS and ES module versions of a package. - -As with the previous approach, a variant of this approach not requiring -conditional exports for consumers could be to add an export, e.g. -`"./module"`, to point to an all-ES module-syntax version of the package: - - -```js -// ./node_modules/pkg/package.json -{ - "type": "module", - "main": "./index.cjs", - "exports": { - ".": "./index.cjs", - "./module": "./index.mjs" - } -} -``` +This section was moved to [Modules: Packages](packages.html). ## `import` Specifiers @@ -818,13 +123,27 @@ Bare specifiers, and the bare specifier portion of deep import specifiers, are strings; but everything else in a specifier is a URL. -Only `file:` and `data:` URLs are supported. A specifier like +`file:`, `node:`, and `data:` URLs are supported. A specifier like `'https://example.com/app.js'` may be supported by browsers but it is not supported in Node.js. Specifiers may not begin with `/` or `//`. These are reserved for potential future use. The root of the current volume may be referenced via `file:///`. +#### `node:` Imports + + + +`node:` URLs are supported as a means to load Node.js builtin modules. This +URL scheme allows for builtin modules to be referenced by valid absolute URL +strings. + +```js +import fs from 'node:fs/promises'; +``` + #### `data:` Imports ```js -import packageMain from 'commonjs-package'; // Works +import { default as cjs } from 'cjs'; -import { method } from 'commonjs-package'; // Errors +// The following import statement is "syntax sugar" (equivalent but sweeter) +// for `{ default as cjsSugar }` in the above import statement: +import cjsSugar from 'cjs'; + +console.log(cjs); +console.log(cjs === cjsSugar); +// Prints: +// +// true ``` -It is also possible to -[import an ES or CommonJS module for its side effects only][]. +The ECMAScript Module Namespace representation of a CommonJS module is always +a namespace with a `default` export key pointing to the CommonJS +`module.exports` value. -### `import()` expressions +This Module Namespace Exotic Object can be directly observed either when using +`import * as m from 'cjs'` or a dynamic import: -[Dynamic `import()`][] is supported in both CommonJS and ES modules. It can be -used to include ES module files from CommonJS code. + +```js +import * as m from 'cjs'; +console.log(m); +console.log(m === await import('cjs')); +// Prints: +// [Module] { default: } +// true +``` -## CommonJS, JSON, and Native Modules +For better compatibility with existing usage in the JS ecosystem, Node.js +in addition attempts to determine the CommonJS named exports of every imported +CommonJS module to provide them as separate ES module exports using a static +analysis process. -CommonJS, JSON, and Native modules can be used with -[`module.createRequire()`][]. +For example, consider a CommonJS module written: ```js // cjs.cjs -module.exports = 'cjs'; +exports.name = 'exported'; +``` -// esm.mjs -import { createRequire } from 'module'; +The preceding module supports named imports in ES modules: -const require = createRequire(import.meta.url); + +```js +import { name } from './cjs.cjs'; +console.log(name); +// Prints: 'exported' -const cjs = require('./cjs.cjs'); -cjs === 'cjs'; // true +import cjs from './cjs.cjs'; +console.log(cjs); +// Prints: { name: 'exported' } + +import * as m from './cjs.cjs'; +console.log(m); +// Prints: [Module] { default: { name: 'exported' }, name: 'exported' } ``` +As can be seen from the last example of the Module Namespace Exotic Object being +logged, the `name` export is copied off of the `module.exports` object and set +directly on the ES module namespace when the module is imported. + +Live binding updates or new exports added to `module.exports` are not detected +for these named exports. + +The detection of named exports is based on common syntax patterns but does not +always correctly detect named exports. In these cases, using the default +import form described above can be a better option. + +Named exports detection covers many common export patterns, reexport patterns +and build tool and transpiler outputs. See [cjs-module-lexer][] for the exact +semantics implemented. + ## Builtin modules -Builtin modules will provide named exports of their public API. A +[Core modules][] provide named exports of their public API. A default export is also provided which is the value of the CommonJS exports. The default export can be used for, among other things, modifying the named exports. Named exports of builtin modules are updated only by calling @@ -1043,18 +422,36 @@ fs.readFileSync === readFileSync; ``` -## Experimental JSON Modules +## CommonJS, JSON, and native modules + +CommonJS, JSON, and native modules can be used with +[`module.createRequire()`][]. + +```js +// cjs.cjs +module.exports = 'cjs'; + +// esm.mjs +import { createRequire } from 'module'; + +const require = createRequire(import.meta.url); + +const cjs = require('./cjs.cjs'); +cjs === 'cjs'; // true +``` + +## Experimental JSON modules Currently importing JSON modules are only supported in the `commonjs` mode and are loaded using the CJS loader. [WHATWG JSON modules specification][] are still being standardized, and are experimentally supported by including the additional flag `--experimental-json-modules` when running Node.js. -When the `--experimental-json-modules` flag is included both the -`commonjs` and `module` mode will use the new experimental JSON -loader. The imported JSON only exposes a `default`, there is no +When the `--experimental-json-modules` flag is included, both the +`commonjs` and `module` mode use the new experimental JSON +loader. The imported JSON only exposes a `default`. There is no support for named exports. A cache entry is created in the CommonJS -cache, to avoid duplication. The same object will be returned in +cache to avoid duplication. The same object is returned in CommonJS if the JSON module has already been imported from the same path. @@ -1073,7 +470,7 @@ node --experimental-json-modules index.mjs # works ``` -## Experimental Wasm Modules +## Experimental Wasm modules Importing Web Assembly modules is supported under the `--experimental-wasm-modules` flag, allowing any `.wasm` files to be @@ -1097,7 +494,7 @@ would provide the exports interface for the instantiation of `module.wasm`. -## Experimental Loaders +## Experimental loaders **Note: This API is currently being redesigned and will still change.** @@ -1111,48 +508,58 @@ ### Hooks -#### resolve hook +#### `resolve(specifier, context, defaultResolve)` > Note: The loaders API is being redesigned. This hook may disappear or its > signature may change. Do not rely on the API described below. +* `specifier` {string} +* `context` {Object} + * `conditions` {string[]} + * `parentURL` {string} +* `defaultResolve` {Function} +* Returns: {Object} + * `url` {string} + The `resolve` hook returns the resolved file URL for a given module specifier and parent URL. The module specifier is the string in an `import` statement or `import()` expression, and the parent URL is the URL of the module that imported this one, or `undefined` if this is the main entry point for the application. The `conditions` property on the `context` is an array of conditions for -[Conditional Exports][] that apply to this resolution request. They can be used +[Conditional exports][] that apply to this resolution request. They can be used for looking up conditional mappings elsewhere or to modify the list when calling the default resolution logic. -The [current set of Node.js default conditions][Conditional Exports] will always -be in the `context.conditions` list passed to the hook. If the hook wants to -ensure Node.js-compatible resolution logic, all items from this default -condition list **must** be passed through to the `defaultResolve` function. +The current [package exports conditions][Conditional Exports] are always in +the `context.conditions` array passed into the hook. To guarantee _default +Node.js module specifier resolution behavior_ when calling `defaultResolve`, the +`context.conditions` array passed to it _must_ include _all_ elements of the +`context.conditions` array originally passed into the `resolve` hook. ```js /** * @param {string} specifier - * @param {object} context - * @param {string} context.parentURL - * @param {string[]} context.conditions - * @param {function} defaultResolve - * @returns {object} response - * @returns {string} response.url + * @param {{ + * conditions: !Array, + * parentURL: !(string | undefined), + * }} context + * @param {Function} defaultResolve + * @returns {Promise<{ url: string }>} */ export async function resolve(specifier, context, defaultResolve) { const { parentURL = null } = context; - if (someCondition) { + if (Math.random() > 0.5) { // Some condition. // For some or all specifiers, do some custom logic for resolving. - // Always return an object of the form {url: } + // Always return an object of the form {url: }. return { - url: (parentURL) ? - new URL(specifier, parentURL).href : new URL(specifier).href + url: parentURL ? + new URL(specifier, parentURL).href : + new URL(specifier).href, }; } - if (anotherCondition) { - // When calling the defaultResolve, the arguments can be modified. In this + if (Math.random() < 0.5) { // Another condition. + // When calling `defaultResolve`, the arguments can be modified. In this // case it's adding another value for matching conditional exports. return defaultResolve(specifier, { ...context, @@ -1164,38 +571,53 @@ } ``` -#### getFormat hook +#### `getFormat(url, context, defaultGetFormat)` > Note: The loaders API is being redesigned. This hook may disappear or its > signature may change. Do not rely on the API described below. +* `url` {string} +* `context` {Object} +* `defaultGetFormat` {Function} +* Returns: {Object} + * `format` {string} + The `getFormat` hook provides a way to define a custom method of determining how -a URL should be interpreted. This can be one of the following: +a URL should be interpreted. The `format` returned also affects what the +acceptable forms of source values are for a module when parsing. This can be one +of the following: + +| `format` | Description | Acceptable Types For `source` Returned by `getSource` or `transformSource` | +| ------------ | ------------------------------ | -------------------------------------------------------------------------- | +| `'builtin'` | Load a Node.js builtin module | Not applicable | +| `'dynamic'` | Use a [dynamic instantiate hook][] | Not applicable | +| `'commonjs'` | Load a Node.js CommonJS module | Not applicable | +| `'json'` | Load a JSON file | { [`string`][], [`ArrayBuffer`][], [`TypedArray`][] } | +| `'module'` | Load an ES module | { [`string`][], [`ArrayBuffer`][], [`TypedArray`][] } | +| `'wasm'` | Load a WebAssembly module | { [`ArrayBuffer`][], [`TypedArray`][] } | + +Note: These types all correspond to classes defined in ECMAScript. -| `format` | Description | -| --- | --- | -| `'builtin'` | Load a Node.js builtin module | -| `'commonjs'` | Load a Node.js CommonJS module | -| `'dynamic'` | Use a [dynamic instantiate hook][] | -| `'json'` | Load a JSON file | -| `'module'` | Load a standard JavaScript module (ES module) | -| `'wasm'` | Load a WebAssembly module | +* The specific [`ArrayBuffer`][] object is a [`SharedArrayBuffer`][]. +* The specific [`TypedArray`][] object is a [`Uint8Array`][]. + +Note: If the source value of a text-based format (i.e., `'json'`, `'module'`) is +not a string, it is converted to a string using [`util.TextDecoder`][]. ```js /** * @param {string} url - * @param {object} context (currently empty) - * @param {function} defaultGetFormat - * @returns {object} response - * @returns {string} response.format + * @param {Object} context (currently empty) + * @param {Function} defaultGetFormat + * @returns {Promise<{ format: string }>} */ export async function getFormat(url, context, defaultGetFormat) { - if (someCondition) { + if (Math.random() > 0.5) { // Some condition. // For some or all URLs, do some custom logic for determining format. // Always return an object of the form {format: }, where the - // format is one of the strings in the table above. + // format is one of the strings in the preceding table. return { - format: 'module' + format: 'module', }; } // Defer to Node.js for all other URLs. @@ -1203,11 +625,18 @@ } ``` -#### getSource hook +#### `getSource(url, context, defaultGetSource)` > Note: The loaders API is being redesigned. This hook may disappear or its > signature may change. Do not rely on the API described below. +* `url` {string} +* `context` {Object} + * `format` {string} +* `defaultGetSource` {Function} +* Returns: {Object} + * `source` {string|SharedArrayBuffer|Uint8Array} + The `getSource` hook provides a way to define a custom method for retrieving the source code of an ES module specifier. This would allow a loader to potentially avoid reading files from disk. @@ -1215,19 +644,17 @@ ```js /** * @param {string} url - * @param {object} context - * @param {string} context.format - * @param {function} defaultGetSource - * @returns {object} response - * @returns {string|buffer} response.source + * @param {{ format: string }} context + * @param {Function} defaultGetSource + * @returns {Promise<{ source: !(string | SharedArrayBuffer | Uint8Array) }>} */ export async function getSource(url, context, defaultGetSource) { const { format } = context; - if (someCondition) { + if (Math.random() > 0.5) { // Some condition. // For some or all URLs, do some custom logic for retrieving the source. // Always return an object of the form {source: }. return { - source: '...' + source: '...', }; } // Defer to Node.js for all other URLs. @@ -1235,7 +662,7 @@ } ``` -#### transformSource hook +#### `transformSource(source, context, defaultTransformSource)` ```console NODE_OPTIONS='--experimental-loader ./custom-loader.mjs' node x.js @@ -1244,6 +671,13 @@ > Note: The loaders API is being redesigned. This hook may disappear or its > signature may change. Do not rely on the API described below. +* `source` {string|SharedArrayBuffer|Uint8Array} +* `context` {Object} + * `format` {string} + * `url` {string} +* Returns: {Object} + * `source` {string|SharedArrayBuffer|Uint8Array} + The `transformSource` hook provides a way to modify the source code of a loaded ES module file after the source string has been loaded but before Node.js has done anything with it. @@ -1254,45 +688,44 @@ ```js /** - * @param {string|buffer} source - * @param {object} context - * @param {string} context.url - * @param {string} context.format - * @param {function} defaultTransformSource - * @returns {object} response - * @returns {string|buffer} response.source + * @param {!(string | SharedArrayBuffer | Uint8Array)} source + * @param {{ + * format: string, + * url: string, + * }} context + * @param {Function} defaultTransformSource + * @returns {Promise<{ source: !(string | SharedArrayBuffer | Uint8Array) }>} */ -export async function transformSource(source, - context, - defaultTransformSource) { +export async function transformSource(source, context, defaultTransformSource) { const { url, format } = context; - if (someCondition) { + if (Math.random() > 0.5) { // Some condition. // For some or all URLs, do some custom logic for modifying the source. // Always return an object of the form {source: }. return { - source: '...' + source: '...', }; } // Defer to Node.js for all other sources. - return defaultTransformSource( - source, context, defaultTransformSource); + return defaultTransformSource(source, context, defaultTransformSource); } ``` -#### getGlobalPreloadCode hook +#### `getGlobalPreloadCode()` > Note: The loaders API is being redesigned. This hook may disappear or its > signature may change. Do not rely on the API described below. -Sometimes it can be necessary to run some code inside of the same global scope -that the application will run in. This hook allows to return a string that will -be ran as sloppy-mode script on startup. +* Returns: {string} + +Sometimes it might be necessary to run some code inside of the same global scope +that the application runs in. This hook allows the return of a string that is +run as sloppy-mode script on startup. Similar to how CommonJS wrappers work, the code runs in an implicit function scope. The only argument is a `require`-like function that can be used to load builtins like "fs": `getBuiltin(request: string)`. -If the code needs more advanced `require` features, it will have to construct +If the code needs more advanced `require` features, it has to construct its own `require` using `module.createRequire()`. ```js @@ -1320,7 +753,7 @@ To create a custom dynamic module that doesn't correspond to one of the existing `format` interpretations, the `dynamicInstantiate` hook can be used. This hook is called only for modules that return `format: 'dynamic'` from -the [`getFormat` hook][]. +the `getFormat` hook. ```js /** @@ -1419,13 +852,9 @@ console.log(VERSION); ``` -With this loader, running: - -```console -node --experimental-loader ./https-loader.mjs ./main.js -``` - -Will print the current version of CoffeeScript per the module at the URL in +With the preceding loader, running +`node --experimental-loader ./https-loader.mjs ./main.mjs` +prints the current version of CoffeeScript per the module at the URL in `main.mjs`. #### Transpiler loader @@ -1506,18 +935,14 @@ export scream = (str) -> str.toUpperCase() ``` -With this loader, running: - -```console -node --experimental-loader ./coffeescript-loader.mjs main.coffee -``` - -Will cause `main.coffee` to be turned into JavaScript after its source code is +With the preceding loader, running +`node --experimental-loader ./coffeescript-loader.mjs main.coffee` +causes `main.coffee` to be turned into JavaScript after its source code is loaded from disk but before Node.js executes it; and so on for any `.coffee`, `.litcoffee` or `.coffee.md` files referenced via `import` statements of any loaded file. -## Resolution Algorithm +## Resolution algorithm ### Features @@ -1530,7 +955,7 @@ * No folder mains * Bare specifier package resolution lookup through node_modules -### Resolver Algorithm +### Resolver algorithm The algorithm to load an ES module specifier is given through the **ESM_RESOLVE** method below. It returns the resolved URL for a @@ -1546,7 +971,7 @@ In the following algorithms, all subroutine errors are propagated as errors of these top-level routines unless stated otherwise. -_defaultEnv_ is the conditional environment name priority array, +_defaultConditions_ is the conditional environment name array, `["node", "import"]`. The resolver can throw the following errors: @@ -1554,48 +979,52 @@ or package subpath specifier. * _Invalid Package Configuration_: package.json configuration is invalid or contains an invalid configuration. -* _Invalid Package Target_: Package exports define a target module within the - package that is an invalid type or string target. +* _Invalid Package Target_: Package exports or imports define a target module + for the package that is an invalid type or string target. * _Package Path Not Exported_: Package exports do not define or permit a target subpath in the package for the given module. +* _Package Import Not Defined_: Package imports do not define the specifier. * _Module Not Found_: The package or module requested does not exist. -
                                                                                                                                                                                                                                                    -Resolver algorithm specification +### Resolver Algorithm Specification **ESM_RESOLVE**(_specifier_, _parentURL_) -> 1. Let _resolvedURL_ be **undefined**. +> 1. Let _resolved_ be **undefined**. > 1. If _specifier_ is a valid URL, then -> 1. Set _resolvedURL_ to the result of parsing and reserializing +> 1. Set _resolved_ to the result of parsing and reserializing > _specifier_ as a URL. -> 1. Otherwise, if _specifier_ starts with _"/"_, then -> 1. Throw an _Invalid Module Specifier_ error. -> 1. Otherwise, if _specifier_ starts with _"./"_ or _"../"_, then -> 1. Set _resolvedURL_ to the URL resolution of _specifier_ relative to +> 1. Otherwise, if _specifier_ starts with _"/"_, _"./"_ or _"../"_, then +> 1. Set _resolved_ to the URL resolution of _specifier_ relative to > _parentURL_. +> 1. Otherwise, if _specifier_ starts with _"#"_, then +> 1. Set _resolved_ to the destructured value of the result of +> **PACKAGE_IMPORTS_RESOLVE**(_specifier_, _parentURL_, +> _defaultConditions_). > 1. Otherwise, > 1. Note: _specifier_ is now a bare specifier. -> 1. Set _resolvedURL_ the result of +> 1. Set _resolved_ the result of > **PACKAGE_RESOLVE**(_specifier_, _parentURL_). -> 1. If _resolvedURL_ contains any percent encodings of _"/"_ or _"\\"_ (_"%2f"_ +> 1. If _resolved_ contains any percent encodings of _"/"_ or _"\\"_ (_"%2f"_ > and _"%5C"_ respectively), then > 1. Throw an _Invalid Module Specifier_ error. -> 1. If the file at _resolvedURL_ is a directory, then +> 1. If the file at _resolved_ is a directory, then > 1. Throw an _Unsupported Directory Import_ error. -> 1. If the file at _resolvedURL_ does not exist, then +> 1. If the file at _resolved_ does not exist, then > 1. Throw a _Module Not Found_ error. -> 1. Set _resolvedURL_ to the real path of _resolvedURL_. -> 1. Let _format_ be the result of **ESM_FORMAT**(_resolvedURL_). -> 1. Load _resolvedURL_ as module format, _format_. -> 1. Return _resolvedURL_. +> 1. Set _resolved_ to the real path of _resolved_. +> 1. Let _format_ be the result of **ESM_FORMAT**(_resolved_). +> 1. Load _resolved_ as module format, _format_. +> 1. Return _resolved_. **PACKAGE_RESOLVE**(_packageSpecifier_, _parentURL_) -> 1. Let _packageName_ be *undefined*. -> 1. Let _packageSubpath_ be *undefined*. +> 1. Let _packageName_ be **undefined**. > 1. If _packageSpecifier_ is an empty string, then > 1. Throw an _Invalid Module Specifier_ error. +> 1. If _packageSpecifier_ does not start with _"@"_, then +> 1. Set _packageName_ to the substring of _packageSpecifier_ until the first +> _"/"_ separator or the end of the string. > 1. Otherwise, > 1. If _packageSpecifier_ does not contain a _"/"_ separator, then > 1. Throw an _Invalid Module Specifier_ error. @@ -1603,20 +1032,14 @@ > until the second _"/"_ separator or the end of the string. > 1. If _packageName_ starts with _"."_ or contains _"\\"_ or _"%"_, then > 1. Throw an _Invalid Module Specifier_ error. -> 1. Let _packageSubpath_ be _undefined_. -> 1. If the length of _packageSpecifier_ is greater than the length of -> _packageName_, then -> 1. Set _packageSubpath_ to _"."_ concatenated with the substring of +> 1. Let _packageSubpath_ be _"."_ concatenated with the substring of > _packageSpecifier_ from the position at the length of _packageName_. -> 1. If _packageSubpath_ contains any _"."_ or _".."_ segments or percent -> encoded strings for _"/"_ or _"\\"_, then -> 1. Throw an _Invalid Module Specifier_ error. -> 1. Set _selfUrl_ to the result of -> **SELF_REFERENCE_RESOLVE**(_packageName_, _packageSubpath_, _parentURL_). -> 1. If _selfUrl_ isn't empty, return _selfUrl_. -> 1. If _packageSubpath_ is _undefined_ and _packageName_ is a Node.js builtin +> 1. Let _selfUrl_ be the result of +> **PACKAGE_SELF_RESOLVE**(_packageName_, _packageSubpath_, _parentURL_). +> 1. If _selfUrl_ is not **undefined**, return _selfUrl_. +> 1. If _packageSubpath_ is _"."_ and _packageName_ is a Node.js builtin > module, then -> 1. Return the string _"nodejs:"_ concatenated with _packageSpecifier_. +> 1. Return the string _"node:"_ concatenated with _packageSpecifier_. > 1. While _parentURL_ is not the file system root, > 1. Let _packageURL_ be the URL resolution of _"node_modules/"_ > concatenated with _packageSpecifier_, relative to _parentURL_. @@ -1625,120 +1048,161 @@ > 1. Set _parentURL_ to the parent URL path of _parentURL_. > 1. Continue the next loop iteration. > 1. Let _pjson_ be the result of **READ_PACKAGE_JSON**(_packageURL_). -> 1. If _packageSubpath_ is equal to _"./"_, then -> 1. Return _packageURL_ + _"/"_. -> 1. If _packageSubpath_ is _undefined__, then -> 1. Return the result of **PACKAGE_MAIN_RESOLVE**(_packageURL_, -> _pjson_). +> 1. If _pjson_ is not **null** and _pjson_._exports_ is not **null** or +> **undefined**, then +> 1. Let _exports_ be _pjson.exports_. +> 1. Return the _resolved_ destructured value of the result of +> **PACKAGE_EXPORTS_RESOLVE**(_packageURL_, _packageSubpath_, +> _pjson.exports_, _defaultConditions_). +> 1. Otherwise, if _packageSubpath_ is equal to _"."_, then +> 1. Return the result applying the legacy **LOAD_AS_DIRECTORY** +> CommonJS resolver to _packageURL_, throwing a _Module Not Found_ +> error for no resolution. > 1. Otherwise, -> 1. If _pjson_ is not **null** and _pjson_ has an _"exports"_ key, then -> 1. Let _exports_ be _pjson.exports_. -> 1. If _exports_ is not **null** or **undefined**, then -> 1. Return **PACKAGE_EXPORTS_RESOLVE**(_packageURL_, -> _packageSubpath_, _pjson.exports_). > 1. Return the URL resolution of _packageSubpath_ in _packageURL_. > 1. Throw a _Module Not Found_ error. -**SELF_REFERENCE_RESOLVE**(_packageName_, _packageSubpath_, _parentURL_) +**PACKAGE_SELF_RESOLVE**(_packageName_, _packageSubpath_, _parentURL_) > 1. Let _packageURL_ be the result of **READ_PACKAGE_SCOPE**(_parentURL_). > 1. If _packageURL_ is **null**, then > 1. Return **undefined**. > 1. Let _pjson_ be the result of **READ_PACKAGE_JSON**(_packageURL_). -> 1. If _pjson_ does not include an _"exports"_ property, then +> 1. If _pjson_ is **null** or if _pjson_._exports_ is **null** or +> **undefined**, then > 1. Return **undefined**. > 1. If _pjson.name_ is equal to _packageName_, then -> 1. If _packageSubpath_ is equal to _"./"_, then -> 1. Return _packageURL_ + _"/"_. -> 1. If _packageSubpath_ is _undefined_, then -> 1. Return the result of **PACKAGE_MAIN_RESOLVE**(_packageURL_, _pjson_). -> 1. Otherwise, -> 1. If _pjson_ is not **null** and _pjson_ has an _"exports"_ key, then -> 1. Let _exports_ be _pjson.exports_. -> 1. If _exports_ is not **null** or **undefined**, then -> 1. Return **PACKAGE_EXPORTS_RESOLVE**(_packageURL_, _subpath_, -> _pjson.exports_). -> 1. Return the URL resolution of _subpath_ in _packageURL_. +> 1. Return the _resolved_ destructured value of the result of +> **PACKAGE_EXPORTS_RESOLVE**(_packageURL_, _subpath_, _pjson.exports_, +> _defaultConditions_). > 1. Otherwise, return **undefined**. -**PACKAGE_MAIN_RESOLVE**(_packageURL_, _pjson_) +**PACKAGE_EXPORTS_RESOLVE**(_packageURL_, _subpath_, _exports_, _conditions_) -> 1. If _pjson_ is **null**, then -> 1. Throw a _Module Not Found_ error. -> 1. If _pjson.exports_ is not **null** or **undefined**, then -> 1. If _exports_ is an Object with both a key starting with _"."_ and a key -> not starting with _"."_, throw an _Invalid Package Configuration_ error. -> 1. If _pjson.exports_ is a String or Array, or an Object containing no -> keys starting with _"."_, then -> 1. Return **PACKAGE_EXPORTS_TARGET_RESOLVE**(_packageURL_, -> _pjson.exports_, _""_). -> 1. If _pjson.exports_ is an Object containing a _"."_ property, then -> 1. Let _mainExport_ be the _"."_ property in _pjson.exports_. -> 1. Return **PACKAGE_EXPORTS_TARGET_RESOLVE**(_packageURL_, -> _mainExport_, _""_). -> 1. Throw a _Package Path Not Exported_ error. -> 1. Let _legacyMainURL_ be the result applying the legacy -> **LOAD_AS_DIRECTORY** CommonJS resolver to _packageURL_, throwing a -> _Module Not Found_ error for no resolution. -> 1. Return _legacyMainURL_. - -**PACKAGE_EXPORTS_RESOLVE**(_packageURL_, _packagePath_, _exports_) > 1. If _exports_ is an Object with both a key starting with _"."_ and a key not > starting with _"."_, throw an _Invalid Package Configuration_ error. -> 1. If _exports_ is an Object and all keys of _exports_ start with _"."_, then -> 1. Set _packagePath_ to _"./"_ concatenated with _packagePath_. -> 1. If _packagePath_ is a key of _exports_, then -> 1. Let _target_ be the value of _exports\[packagePath\]_. -> 1. Return **PACKAGE_EXPORTS_TARGET_RESOLVE**(_packageURL_, _target_, -> _""_, _defaultEnv_). -> 1. Let _directoryKeys_ be the list of keys of _exports_ ending in -> _"/"_, sorted by length descending. -> 1. For each key _directory_ in _directoryKeys_, do -> 1. If _packagePath_ starts with _directory_, then -> 1. Let _target_ be the value of _exports\[directory\]_. -> 1. Let _subpath_ be the substring of _target_ starting at the index -> of the length of _directory_. -> 1. Return **PACKAGE_EXPORTS_TARGET_RESOLVE**(_packageURL_, _target_, -> _subpath_, _defaultEnv_). +> 1. If _subpath_ is equal to _"."_, then +> 1. Let _mainExport_ be **undefined**. +> 1. If _exports_ is a String or Array, or an Object containing no keys +> starting with _"."_, then +> 1. Set _mainExport_ to _exports_. +> 1. Otherwise if _exports_ is an Object containing a _"."_ property, then +> 1. Set _mainExport_ to _exports_\[_"."_\]. +> 1. If _mainExport_ is not **undefined**, then +> 1. Let _resolved_ be the result of **PACKAGE_TARGET_RESOLVE**( +> _packageURL_, _mainExport_, _""_, **false**, **false**, +> _conditions_). +> 1. If _resolved_ is not **null** or **undefined**, then +> 1. Return _resolved_. +> 1. Otherwise, if _exports_ is an Object and all keys of _exports_ start with +> _"."_, then +> 1. Let _matchKey_ be the string _"./"_ concatenated with _subpath_. +> 1. Let _resolvedMatch_ be result of **PACKAGE_IMPORTS_EXPORTS_RESOLVE**( +> _matchKey_, _exports_, _packageURL_, **false**, _conditions_). +> 1. If _resolvedMatch_._resolve_ is not **null** or **undefined**, then +> 1. Return _resolvedMatch_. > 1. Throw a _Package Path Not Exported_ error. -**PACKAGE_EXPORTS_TARGET_RESOLVE**(_packageURL_, _target_, _subpath_, _env_) +**PACKAGE_IMPORTS_RESOLVE**(_specifier_, _parentURL_, _conditions_) + +> 1. Assert: _specifier_ begins with _"#"_. +> 1. If _specifier_ is exactly equal to _"#"_ or starts with _"#/"_, then +> 1. Throw an _Invalid Module Specifier_ error. +> 1. Let _packageURL_ be the result of **READ_PACKAGE_SCOPE**(_parentURL_). +> 1. If _packageURL_ is not **null**, then +> 1. Let _pjson_ be the result of **READ_PACKAGE_JSON**(_packageURL_). +> 1. If _pjson.imports_ is a non-null Object, then +> 1. Let _resolvedMatch_ be the result of +> **PACKAGE_IMPORTS_EXPORTS_RESOLVE**(_specifier_, _pjson.imports_, +> _packageURL_, **true**, _conditions_). +> 1. If _resolvedMatch_._resolve_ is not **null** or **undefined**, then +> 1. Return _resolvedMatch_. +> 1. Throw a _Package Import Not Defined_ error. + +**PACKAGE_IMPORTS_EXPORTS_RESOLVE**(_matchKey_, _matchObj_, _packageURL_, +_isImports_, _conditions_) + +> 1. If _matchKey_ is a key of _matchObj_, and does not end in _"*"_, then +> 1. Let _target_ be the value of _matchObj_\[_matchKey_\]. +> 1. Let _resolved_ be the result of **PACKAGE_TARGET_RESOLVE**( +> _packageURL_, _target_, _""_, **false**, _isImports_, _conditions_). +> 1. Return the object _{ resolved, exact: **true** }_. +> 1. Let _expansionKeys_ be the list of keys of _matchObj_ ending in _"/"_ +> or _"*"_, sorted by length descending. +> 1. For each key _expansionKey_ in _expansionKeys_, do +> 1. If _expansionKey_ ends in _"*"_ and _matchKey_ starts with but is +> not equal to the substring of _expansionKey_ excluding the last _"*"_ +> character, then +> 1. Let _target_ be the value of _matchObj_\[_expansionKey_\]. +> 1. Let _subpath_ be the substring of _matchKey_ starting at the +> index of the length of _expansionKey_ minus one. +> 1. Let _resolved_ be the result of **PACKAGE_TARGET_RESOLVE**( +> _packageURL_, _target_, _subpath_, **true**, _isImports_, +> _conditions_). +> 1. Return the object _{ resolved, exact: **true** }_. +> 1. If _matchKey_ starts with _expansionKey_, then +> 1. Let _target_ be the value of _matchObj_\[_expansionKey_\]. +> 1. Let _subpath_ be the substring of _matchKey_ starting at the +> index of the length of _expansionKey_. +> 1. Let _resolved_ be the result of **PACKAGE_TARGET_RESOLVE**( +> _packageURL_, _target_, _subpath_, **false**, _isImports_, +> _conditions_). +> 1. Return the object _{ resolved, exact: **false** }_. +> 1. Return the object _{ resolved: **null**, exact: **true** }_. + +**PACKAGE_TARGET_RESOLVE**(_packageURL_, _target_, _subpath_, _pattern_, +_internal_, _conditions_) > 1. If _target_ is a String, then -> 1. If _target_ does not start with _"./"_ or contains any _"node_modules"_ -> segments including _"node_modules"_ percent-encoding, throw an +> 1. If _pattern_ is **false**, _subpath_ has non-zero length and _target_ +> does not end with _"/"_, throw an _Invalid Module Specifier_ error. +> 1. If _target_ does not start with _"./"_, then +> 1. If _internal_ is **true** and _target_ does not start with _"../"_ or +> _"/"_ and is not a valid URL, then +> 1. If _pattern_ is **true**, then +> 1. Return **PACKAGE_RESOLVE**(_target_ with every instance of +> _"*"_ replaced by _subpath_, _packageURL_ + _"/"_)_. +> 1. Return **PACKAGE_RESOLVE**(_target_ + _subpath_, +> _packageURL_ + _"/"_)_. +> 1. Otherwise, throw an _Invalid Package Target_ error. +> 1. If _target_ split on _"/"_ or _"\\"_ contains any _"."_, _".."_ or +> _"node_modules"_ segments after the first segment, throw an > _Invalid Package Target_ error. > 1. Let _resolvedTarget_ be the URL resolution of the concatenation of > _packageURL_ and _target_. -> 1. If _resolvedTarget_ is not contained in _packageURL_, throw an -> _Invalid Package Target_ error. -> 1. If _subpath_ has non-zero length and _target_ does not end with _"/"_, -> throw an _Invalid Module Specifier_ error. -> 1. Let _resolved_ be the URL resolution of the concatenation of -> _subpath_ and _resolvedTarget_. -> 1. If _resolved_ is not contained in _resolvedTarget_, throw an -> _Invalid Module Specifier_ error. -> 1. Return _resolved_. +> 1. Assert: _resolvedTarget_ is contained in _packageURL_. +> 1. If _subpath_ split on _"/"_ or _"\\"_ contains any _"."_, _".."_ or +> _"node_modules"_ segments, throw an _Invalid Module Specifier_ error. +> 1. If _pattern_ is **true**, then +> 1. Return the URL resolution of _resolvedTarget_ with every instance of +> _"*"_ replaced with _subpath_. +> 1. Otherwise, +> 1. Return the URL resolution of the concatenation of _subpath_ and +> _resolvedTarget_. > 1. Otherwise, if _target_ is a non-null Object, then > 1. If _exports_ contains any index property keys, as defined in ECMA-262 > [6.1.7 Array Index][], throw an _Invalid Package Configuration_ error. > 1. For each property _p_ of _target_, in object insertion order as, -> 1. If _p_ equals _"default"_ or _env_ contains an entry for _p_, then +> 1. If _p_ equals _"default"_ or _conditions_ contains an entry for _p_, +> then > 1. Let _targetValue_ be the value of the _p_ property in _target_. -> 1. Return the result of **PACKAGE_EXPORTS_TARGET_RESOLVE**( -> _packageURL_, _targetValue_, _subpath_, _env_), continuing the -> loop on any _Package Path Not Exported_ error. -> 1. Throw a _Package Path Not Exported_ error. +> 1. Let _resolved_ be the result of **PACKAGE_TARGET_RESOLVE**( +> _packageURL_, _targetValue_, _subpath_, _pattern_, _internal_, +> _conditions_). +> 1. If _resolved_ is equal to **undefined**, continue the loop. +> 1. Return _resolved_. +> 1. Return **undefined**. > 1. Otherwise, if _target_ is an Array, then -> 1. If _target.length is zero, throw a _Package Path Not Exported_ error. +> 1. If _target.length is zero, return **null**. > 1. For each item _targetValue_ in _target_, do -> 1. If _targetValue_ is an Array, continue the loop. -> 1. Return the result of **PACKAGE_EXPORTS_TARGET_RESOLVE**(_packageURL_, -> _targetValue_, _subpath_, _env_), continuing the loop on any -> _Package Path Not Exported_ or _Invalid Package Target_ error. -> 1. Throw the last fallback resolution error. -> 1. Otherwise, if _target_ is _null_, throw a _Package Path Not Exported_ -> error. +> 1. Let _resolved_ be the result of **PACKAGE_TARGET_RESOLVE**( +> _packageURL_, _targetValue_, _subpath_, _pattern_, _internal_, +> _conditions_), continuing the loop on any _Invalid Package Target_ +> error. +> 1. If _resolved_ is **undefined**, continue the loop. +> 1. Return _resolved_. +> 1. Return or throw the last fallback resolution **null** return or error. +> 1. Otherwise, if _target_ is _null_, return **null**. > 1. Otherwise throw an _Invalid Package Target_ error. **ESM_FORMAT**(_url_) @@ -1760,11 +1224,11 @@ > 1. Let _scopeURL_ be _url_. > 1. While _scopeURL_ is not the file system root, +> 1. Set _scopeURL_ to the parent URL of _scopeURL_. > 1. If _scopeURL_ ends in a _"node_modules"_ path segment, return **null**. > 1. Let _pjson_ be the result of **READ_PACKAGE_JSON**(_scopeURL_). > 1. If _pjson_ is not **null**, then > 1. Return _pjson_. -> 1. Set _scopeURL_ to the parent URL of _scopeURL_. > 1. Return **null**. **READ_PACKAGE_JSON**(_packageURL_) @@ -1776,8 +1240,6 @@ > 1. Throw an _Invalid Package Configuration_ error. > 1. Return the parsed JSON source of the file at _pjsonURL_. -
                                                                                                                                                                                                                                                    - ### Customizing ESM specifier resolution algorithm The current specifier resolution does not support all default behavior of @@ -1791,7 +1253,7 @@ automatic extension resolution and importing from directories that include an index file use the `node` mode. -```bash +```console $ node index.mjs success! $ node index # Failure! @@ -1800,31 +1262,35 @@ success! ``` -[Babel]: https://babeljs.io/ + [CommonJS]: modules.html -[Conditional Exports]: #esm_conditional_exports +[Conditional exports]: packages.html#packages_conditional_exports [Dynamic `import()`]: https://wiki.developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Dynamic_Imports -[ECMAScript-modules implementation]: https://github.com/nodejs/modules/blob/master/doc/plan-for-new-modules-implementation.md [ES Module Integration Proposal for Web Assembly]: https://github.com/webassembly/esm-integration -[Node.js EP for ES Modules]: https://github.com/nodejs/node-eps/blob/master/002-es-modules.md [Terminology]: #esm_terminology [WHATWG JSON modules specification]: https://html.spec.whatwg.org/#creating-a-json-module-script [`data:` URLs]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs -[`esm`]: https://github.com/standard-things/esm#readme [`export`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export -[`getFormat` hook]: #esm_code_getformat_code_hook [`import()`]: #esm_import_expressions [`import.meta.url`]: #esm_import_meta [`import`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import -[`module.createRequire()`]: modules.html#modules_module_createrequire_filename -[`module.syncBuiltinESMExports()`]: modules.html#modules_module_syncbuiltinesmexports -[`transformSource` hook]: #esm_code_transformsource_code_hook +[`module.createRequire()`]: module.html#module_module_createrequire_filename +[`module.syncBuiltinESMExports()`]: module.html#module_module_syncbuiltinesmexports +[`transformSource` hook]: #esm_transformsource_source_context_defaulttransformsource +[`ArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer +[`SharedArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +[`string`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String +[`TypedArray`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray +[`Uint8Array`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array [dynamic instantiate hook]: #esm_code_dynamicinstantiate_code_hook -[import an ES or CommonJS module for its side effects only]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Import_a_module_for_its_side_effects_only +[`util.TextDecoder`]: util.md#util_class_util_textdecoder +[cjs-module-lexer]: https://github.com/guybedford/cjs-module-lexer/tree/1.2.2 [special scheme]: https://url.spec.whatwg.org/#special-scheme -[the full specifier path]: #esm_mandatory_file_extensions [the official standard format]: https://tc39.github.io/ecma262/#sec-modules -[the dual CommonJS/ES module packages section]: #esm_dual_commonjs_es_module_packages [transpiler loader example]: #esm_transpiler_loader [6.1.7 Array Index]: https://tc39.es/ecma262/#integer-index [Top-Level Await]: https://github.com/tc39/proposal-top-level-await +[Core modules]: modules.html#modules_core_modules +[`package.json`]: packages.html#packages_node_js_package_json_field_definitions +[`"exports"`]: packages.html#packages_exports +[`"type"`]: packages.html#packages_type diff -Nru nodejs-mozilla-12.18.1/doc/api/events.html nodejs-mozilla-12.22.12/doc/api/events.html --- nodejs-mozilla-12.18.1/doc/api/events.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/events.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Events | Node.js v12.18.1 Documentation + + Events | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                        18. @@ -121,16 +128,14 @@

                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                            Events

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                          • Events @@ -169,6 +178,7 @@

                                                                                                                                                                                                                                                            Stability: 2 - Stable

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            Source Code: lib/events.js

                                                                                                                                                                                                                                                            Much of the Node.js core API is built around an idiomatic asynchronous event-driven architecture in which certain kinds of objects (called "emitters") emit named events that cause Function objects ("listeners") to be called.

                                                                                                                                                                                                                                                            @@ -186,83 +196,77 @@

                                                                                                                                                                                                                                                            The following example shows a simple EventEmitter instance with a single listener. The eventEmitter.on() method is used to register listeners, while the eventEmitter.emit() method is used to trigger the event.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const EventEmitter = require('events');
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const EventEmitter = require('events');
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -class MyEmitter extends EventEmitter {}
                                                                                                                                                                                                                                                            +class MyEmitter extends EventEmitter {}
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -myEmitter.on('event', () => {
                                                                                                                                                                                                                                                            -  console.log('an event occurred!');
                                                                                                                                                                                                                                                            +const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +myEmitter.on('event', () => {
                                                                                                                                                                                                                                                            +  console.log('an event occurred!');
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                            -myEmitter.emit('event');
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +myEmitter.emit('event');

                                                                                                                                                                                                                                                            Passing arguments and this to listeners#

                                                                                                                                                                                                                                                            The eventEmitter.emit() method allows an arbitrary set of arguments to be passed to the listener functions. Keep in mind that when an ordinary listener function is called, the standard this keyword is intentionally set to reference the EventEmitter instance to which the listener is attached.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -myEmitter.on('event', function(a, b) {
                                                                                                                                                                                                                                                            -  console.log(a, b, this, this === myEmitter);
                                                                                                                                                                                                                                                            -  // Prints:
                                                                                                                                                                                                                                                            -  //   a b MyEmitter {
                                                                                                                                                                                                                                                            -  //     domain: null,
                                                                                                                                                                                                                                                            -  //     _events: { event: [Function] },
                                                                                                                                                                                                                                                            -  //     _eventsCount: 1,
                                                                                                                                                                                                                                                            -  //     _maxListeners: undefined } true
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +myEmitter.on('event', function(a, b) {
                                                                                                                                                                                                                                                            +  console.log(a, b, this, this === myEmitter);
                                                                                                                                                                                                                                                            +  // Prints:
                                                                                                                                                                                                                                                            +  //   a b MyEmitter {
                                                                                                                                                                                                                                                            +  //     domain: null,
                                                                                                                                                                                                                                                            +  //     _events: { event: [Function] },
                                                                                                                                                                                                                                                            +  //     _eventsCount: 1,
                                                                                                                                                                                                                                                            +  //     _maxListeners: undefined } true
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                            -myEmitter.emit('event', 'a', 'b');
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +myEmitter.emit('event', 'a', 'b');

                                                                                                                                                                                                                                                            It is possible to use ES6 Arrow Functions as listeners, however, when doing so, the this keyword will no longer reference the EventEmitter instance:

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -myEmitter.on('event', (a, b) => {
                                                                                                                                                                                                                                                            -  console.log(a, b, this);
                                                                                                                                                                                                                                                            -  // Prints: a b {}
                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                            -myEmitter.emit('event', 'a', 'b');
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                            Asynchronous vs. Synchronous#

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +myEmitter.on('event', (a, b) => {
                                                                                                                                                                                                                                                            +  console.log(a, b, this);
                                                                                                                                                                                                                                                            +  // Prints: a b {}
                                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                                            +myEmitter.emit('event', 'a', 'b');
                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            Asynchronous vs. synchronous#

                                                                                                                                                                                                                                                            The EventEmitter calls all listeners synchronously in the order in which they were registered. This ensures the proper sequencing of events and helps avoid race conditions and logic errors. When appropriate, listener functions can switch to an asynchronous mode of operation using the setImmediate() or process.nextTick() methods:

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -myEmitter.on('event', (a, b) => {
                                                                                                                                                                                                                                                            -  setImmediate(() => {
                                                                                                                                                                                                                                                            -    console.log('this happens asynchronously');
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +myEmitter.on('event', (a, b) => {
                                                                                                                                                                                                                                                            +  setImmediate(() => {
                                                                                                                                                                                                                                                            +    console.log('this happens asynchronously');
                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                            -myEmitter.emit('event', 'a', 'b');
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +myEmitter.emit('event', 'a', 'b');

                                                                                                                                                                                                                                                            Handling events only once#

                                                                                                                                                                                                                                                            When a listener is registered using the eventEmitter.on() method, that listener will be invoked every time the named event is emitted.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -let m = 0;
                                                                                                                                                                                                                                                            -myEmitter.on('event', () => {
                                                                                                                                                                                                                                                            -  console.log(++m);
                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                            -myEmitter.emit('event');
                                                                                                                                                                                                                                                            -// Prints: 1
                                                                                                                                                                                                                                                            -myEmitter.emit('event');
                                                                                                                                                                                                                                                            -// Prints: 2
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +let m = 0;
                                                                                                                                                                                                                                                            +myEmitter.on('event', () => {
                                                                                                                                                                                                                                                            +  console.log(++m);
                                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                                            +myEmitter.emit('event');
                                                                                                                                                                                                                                                            +// Prints: 1
                                                                                                                                                                                                                                                            +myEmitter.emit('event');
                                                                                                                                                                                                                                                            +// Prints: 2

                                                                                                                                                                                                                                                            Using the eventEmitter.once() method, it is possible to register a listener that is called at most once for a particular event. Once the event is emitted, the listener is unregistered and then called.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -let m = 0;
                                                                                                                                                                                                                                                            -myEmitter.once('event', () => {
                                                                                                                                                                                                                                                            -  console.log(++m);
                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                            -myEmitter.emit('event');
                                                                                                                                                                                                                                                            -// Prints: 1
                                                                                                                                                                                                                                                            -myEmitter.emit('event');
                                                                                                                                                                                                                                                            -// Ignored
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +let m = 0;
                                                                                                                                                                                                                                                            +myEmitter.once('event', () => {
                                                                                                                                                                                                                                                            +  console.log(++m);
                                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                                            +myEmitter.emit('event');
                                                                                                                                                                                                                                                            +// Prints: 1
                                                                                                                                                                                                                                                            +myEmitter.emit('event');
                                                                                                                                                                                                                                                            +// Ignored

                                                                                                                                                                                                                                                            Error events#

                                                                                                                                                                                                                                                            When an error occurs within an EventEmitter instance, the typical action is for an 'error' event to be emitted. These are treated as special cases @@ -270,67 +274,61 @@

                                                                                                                                                                                                                                                            If an EventEmitter does not have at least one listener registered for the 'error' event, and an 'error' event is emitted, the error is thrown, a stack trace is printed, and the Node.js process exits.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                                                                                            -// Throws and crashes Node.js
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                                                                                            +// Throws and crashes Node.js

                                                                                                                                                                                                                                                            To guard against crashing the Node.js process the domain module can be used. (Note, however, that the domain module is deprecated.)

                                                                                                                                                                                                                                                            As a best practice, listeners should always be added for the 'error' events.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -myEmitter.on('error', (err) => {
                                                                                                                                                                                                                                                            -  console.error('whoops! there was an error');
                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                            -myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                                                                                            -// Prints: whoops! there was an error
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +myEmitter.on('error', (err) => {
                                                                                                                                                                                                                                                            +  console.error('whoops! there was an error');
                                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                                            +myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                                                                                            +// Prints: whoops! there was an error

                                                                                                                                                                                                                                                            It is possible to monitor 'error' events without consuming the emitted error by installing a listener using the symbol errorMonitor.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            -myEmitter.on(EventEmitter.errorMonitor, (err) => {
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                            +myEmitter.on(EventEmitter.errorMonitor, (err) => {
                                                                                                                                                                                                                                                               MyMonitoringTool.log(err);
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                            -myEmitter.emit('error', new Error('whoops!'));
                                                                                                                                                                                                                                                            -// Still throws and crashes Node.js
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                            Capture Rejections of Promises#

                                                                                                                                                                                                                                                            +myEmitter.emit('error', new Error('whoops!')); +// Still throws and crashes Node.js
                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            Capture rejections of promises#

                                                                                                                                                                                                                                                            Stability: 1 - captureRejections is experimental.

                                                                                                                                                                                                                                                            Using async functions with event handlers is problematic, because it can lead to an unhandled rejection in case of a thrown exception:

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const ee = new EventEmitter();
                                                                                                                                                                                                                                                            -ee.on('something', async (value) => {
                                                                                                                                                                                                                                                            -  throw new Error('kaboom');
                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const ee = new EventEmitter();
                                                                                                                                                                                                                                                            +ee.on('something', async (value) => {
                                                                                                                                                                                                                                                            +  throw new Error('kaboom');
                                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                                            The captureRejections option in the EventEmitter constructor or the global setting change this behavior, installing a .then(undefined, handler) handler on the Promise. This handler routes the exception asynchronously to the Symbol.for('nodejs.rejection') method if there is one, or to 'error' event handler if there is none.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            const ee1 = new EventEmitter({ captureRejections: true });
                                                                                                                                                                                                                                                            -ee1.on('something', async (value) => {
                                                                                                                                                                                                                                                            -  throw new Error('kaboom');
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            const ee1 = new EventEmitter({ captureRejections: true });
                                                                                                                                                                                                                                                            +ee1.on('something', async (value) => {
                                                                                                                                                                                                                                                            +  throw new Error('kaboom');
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -ee1.on('error', console.log);
                                                                                                                                                                                                                                                            +ee1.on('error', console.log);
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -const ee2 = new EventEmitter({ captureRejections: true });
                                                                                                                                                                                                                                                            -ee2.on('something', async (value) => {
                                                                                                                                                                                                                                                            -  throw new Error('kaboom');
                                                                                                                                                                                                                                                            +const ee2 = new EventEmitter({ captureRejections: true });
                                                                                                                                                                                                                                                            +ee2.on('something', async (value) => {
                                                                                                                                                                                                                                                            +  throw new Error('kaboom');
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -ee2[Symbol.for('nodejs.rejection')] = console.log;
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +ee2[Symbol.for('nodejs.rejection')] = console.log;

                                                                                                                                                                                                                                                            Setting EventEmitter.captureRejections = true will change the default for all new instances of EventEmitter.

                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            EventEmitter.captureRejections = true;
                                                                                                                                                                                                                                                            -const ee1 = new EventEmitter();
                                                                                                                                                                                                                                                            -ee1.on('something', async (value) => {
                                                                                                                                                                                                                                                            -  throw new Error('kaboom');
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            EventEmitter.captureRejections = true;
                                                                                                                                                                                                                                                            +const ee1 = new EventEmitter();
                                                                                                                                                                                                                                                            +ee1.on('something', async (value) => {
                                                                                                                                                                                                                                                            +  throw new Error('kaboom');
                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                            -ee1.on('error', console.log);
                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                            +ee1.on('error', console.log);

                                                                                                                                                                                                                                                            The 'error' events that are generated by the captureRejections behavior do not have a catch handler to avoid infinite error loops: the recommendation is to not use async functions as 'error' event handlers.

                                                                                                                                                                                                                                                            @@ -347,8 +345,7 @@

                                                                                                                                                                                                                                                          The EventEmitter class is defined and exposed by the events module:

                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          const EventEmitter = require('events');
                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          const EventEmitter = require('events');

                                                                                                                                                                                                                                                          All EventEmitters emit the event 'newListener' when new listeners are added and 'removeListener' when existing listeners are removed.

                                                                                                                                                                                                                                                          It supports the following option:

                                                                                                                                                                                                                                                          @@ -373,24 +370,23 @@ but important side effect: any additional listeners registered to the same name within the 'newListener' callback will be inserted before the listener that is in the process of being added.

                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                          -// Only do this once so we don't loop forever
                                                                                                                                                                                                                                                          -myEmitter.once('newListener', (event, listener) => {
                                                                                                                                                                                                                                                          -  if (event === 'event') {
                                                                                                                                                                                                                                                          -    // Insert a new listener in front
                                                                                                                                                                                                                                                          -    myEmitter.on('event', () => {
                                                                                                                                                                                                                                                          -      console.log('B');
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                                          +// Only do this once so we don't loop forever
                                                                                                                                                                                                                                                          +myEmitter.once('newListener', (event, listener) => {
                                                                                                                                                                                                                                                          +  if (event === 'event') {
                                                                                                                                                                                                                                                          +    // Insert a new listener in front
                                                                                                                                                                                                                                                          +    myEmitter.on('event', () => {
                                                                                                                                                                                                                                                          +      console.log('B');
                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                                          -myEmitter.on('event', () => {
                                                                                                                                                                                                                                                          -  console.log('A');
                                                                                                                                                                                                                                                          +myEmitter.on('event', () => {
                                                                                                                                                                                                                                                          +  console.log('A');
                                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                                          -myEmitter.emit('event');
                                                                                                                                                                                                                                                          -// Prints:
                                                                                                                                                                                                                                                          -//   B
                                                                                                                                                                                                                                                          -//   A
                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                          +myEmitter.emit('event'); +// Prints: +// B +// A

                                                                                                                                                                                                                                                          Event: 'removeListener'#

                                                                                                                                                                                                                                                    Returns an array listing the events for which the emitter has registered listeners. The values in the array will be strings or Symbols.

                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                    const EventEmitter = require('events');
                                                                                                                                                                                                                                                    -const myEE = new EventEmitter();
                                                                                                                                                                                                                                                    -myEE.on('foo', () => {});
                                                                                                                                                                                                                                                    -myEE.on('bar', () => {});
                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                    -const sym = Symbol('symbol');
                                                                                                                                                                                                                                                    -myEE.on(sym, () => {});
                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                    -console.log(myEE.eventNames());
                                                                                                                                                                                                                                                    -// Prints: [ 'foo', 'bar', Symbol(symbol) ]
                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    const EventEmitter = require('events');
                                                                                                                                                                                                                                                    +const myEE = new EventEmitter();
                                                                                                                                                                                                                                                    +myEE.on('foo', () => {});
                                                                                                                                                                                                                                                    +myEE.on('bar', () => {});
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    +const sym = Symbol('symbol');
                                                                                                                                                                                                                                                    +myEE.on(sym, () => {});
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    +console.log(myEE.eventNames());
                                                                                                                                                                                                                                                    +// Prints: [ 'foo', 'bar', Symbol(symbol) ]

                                                                                                                                                                                                                                                    emitter.getMaxListeners()#

                                                                                                                                                                                                                                                  Returns a copy of the array of listeners for the event named eventName.

                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                  server.on('connection', (stream) => {
                                                                                                                                                                                                                                                  -  console.log('someone connected!');
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  server.on('connection', (stream) => {
                                                                                                                                                                                                                                                  +  console.log('someone connected!');
                                                                                                                                                                                                                                                   });
                                                                                                                                                                                                                                                  -console.log(util.inspect(server.listeners('connection')));
                                                                                                                                                                                                                                                  -// Prints: [ [Function] ]
                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                  +console.log(util.inspect(server.listeners('connection'))); +// Prints: [ [Function] ]

                                                                                                                                                                                                                                                  emitter.off(eventName, listener)#

                                                                                                                                                                                                                                                Adds a one-time listener function for the event named eventName. The next time eventName is triggered, this listener is removed and then invoked.

                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                server.once('connection', (stream) => {
                                                                                                                                                                                                                                                -  console.log('Ah, we have our first user!');
                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                server.once('connection', (stream) => {
                                                                                                                                                                                                                                                +  console.log('Ah, we have our first user!');
                                                                                                                                                                                                                                                +});

                                                                                                                                                                                                                                                Returns a reference to the EventEmitter, so that calls can be chained.

                                                                                                                                                                                                                                                By default, event listeners are invoked in the order they are added. The emitter.prependOnceListener() method can be used as an alternative to add the event listener to the beginning of the listeners array.

                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                const myEE = new EventEmitter();
                                                                                                                                                                                                                                                -myEE.once('foo', () => console.log('a'));
                                                                                                                                                                                                                                                -myEE.prependOnceListener('foo', () => console.log('b'));
                                                                                                                                                                                                                                                -myEE.emit('foo');
                                                                                                                                                                                                                                                -// Prints:
                                                                                                                                                                                                                                                -//   b
                                                                                                                                                                                                                                                -//   a
                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                const myEE = new EventEmitter();
                                                                                                                                                                                                                                                +myEE.once('foo', () => console.log('a'));
                                                                                                                                                                                                                                                +myEE.prependOnceListener('foo', () => console.log('b'));
                                                                                                                                                                                                                                                +myEE.emit('foo');
                                                                                                                                                                                                                                                +// Prints:
                                                                                                                                                                                                                                                +//   b
                                                                                                                                                                                                                                                +//   a

                                                                                                                                                                                                                                                emitter.prependListener(eventName, listener)#

                                                                                                                                                                                                                                              Removes the specified listener from the listener array for the event named eventName.

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              const callback = (stream) => {
                                                                                                                                                                                                                                              -  console.log('someone connected!');
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              const callback = (stream) => {
                                                                                                                                                                                                                                              +  console.log('someone connected!');
                                                                                                                                                                                                                                               };
                                                                                                                                                                                                                                              -server.on('connection', callback);
                                                                                                                                                                                                                                              -// ...
                                                                                                                                                                                                                                              -server.removeListener('connection', callback);
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +server.on('connection', callback); +// ... +server.removeListener('connection', callback);

                                                                                                                                                                                                                                              removeListener() will remove, at most, one instance of a listener from the listener array. If any single listener has been added multiple times to the listener array for the specified eventName, then removeListener() must be @@ -725,34 +709,33 @@ removeListener() or removeAllListeners() calls after emitting and before the last listener finishes execution will not remove them from emit() in progress. Subsequent events will behave as expected.

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              const myEmitter = new MyEmitter();
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -const callbackA = () => {
                                                                                                                                                                                                                                              -  console.log('A');
                                                                                                                                                                                                                                              -  myEmitter.removeListener('event', callbackB);
                                                                                                                                                                                                                                              +const callbackA = () => {
                                                                                                                                                                                                                                              +  console.log('A');
                                                                                                                                                                                                                                              +  myEmitter.removeListener('event', callbackB);
                                                                                                                                                                                                                                               };
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -const callbackB = () => {
                                                                                                                                                                                                                                              -  console.log('B');
                                                                                                                                                                                                                                              +const callbackB = () => {
                                                                                                                                                                                                                                              +  console.log('B');
                                                                                                                                                                                                                                               };
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -myEmitter.on('event', callbackA);
                                                                                                                                                                                                                                              +myEmitter.on('event', callbackA);
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -myEmitter.on('event', callbackB);
                                                                                                                                                                                                                                              +myEmitter.on('event', callbackB);
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -// callbackA removes listener callbackB but it will still be called.
                                                                                                                                                                                                                                              -// Internal listener array at time of emit [callbackA, callbackB]
                                                                                                                                                                                                                                              -myEmitter.emit('event');
                                                                                                                                                                                                                                              -// Prints:
                                                                                                                                                                                                                                              -//   A
                                                                                                                                                                                                                                              -//   B
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -// callbackB is now removed.
                                                                                                                                                                                                                                              -// Internal listener array [callbackA]
                                                                                                                                                                                                                                              -myEmitter.emit('event');
                                                                                                                                                                                                                                              -// Prints:
                                                                                                                                                                                                                                              -//   A
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +// callbackA removes listener callbackB but it will still be called. +// Internal listener array at time of emit [callbackA, callbackB] +myEmitter.emit('event'); +// Prints: +// A +// B + +// callbackB is now removed. +// Internal listener array [callbackA] +myEmitter.emit('event'); +// Prints: +// A

                                                                                                                                                                                                                                              Because listeners are managed using an internal array, calling this will change the position indices of any listener registered after the listener being removed. This will not impact the order in which listeners are called, @@ -762,19 +745,18 @@ event (as in the example below), removeListener() will remove the most recently added instance. In the example the once('ping') listener is removed:

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              const ee = new EventEmitter();
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              const ee = new EventEmitter();
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -function pong() {
                                                                                                                                                                                                                                              -  console.log('pong');
                                                                                                                                                                                                                                              +function pong() {
                                                                                                                                                                                                                                              +  console.log('pong');
                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                              -ee.on('ping', pong);
                                                                                                                                                                                                                                              -ee.once('ping', pong);
                                                                                                                                                                                                                                              -ee.removeListener('ping', pong);
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              -ee.emit('ping');
                                                                                                                                                                                                                                              -ee.emit('ping');
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +ee.on('ping', pong); +ee.once('ping', pong); +ee.removeListener('ping', pong); + +ee.emit('ping'); +ee.emit('ping');

                                                                                                                                                                                                                                              Returns a reference to the EventEmitter, so that calls can be chained.

                                                                                                                                                                                                                                              emitter.setMaxListeners(n)#

                                                                                                                                                                                                                                            Returns a copy of the array of listeners for the event named eventName, including any wrappers (such as those created by .once()).

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            const emitter = new EventEmitter();
                                                                                                                                                                                                                                            -emitter.once('log', () => console.log('log once'));
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const emitter = new EventEmitter();
                                                                                                                                                                                                                                            +emitter.once('log', () => console.log('log once'));
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -// Returns a new Array with a function `onceWrapper` which has a property
                                                                                                                                                                                                                                            -// `listener` which contains the original listener bound above
                                                                                                                                                                                                                                            -const listeners = emitter.rawListeners('log');
                                                                                                                                                                                                                                            -const logFnWrapper = listeners[0];
                                                                                                                                                                                                                                            +// Returns a new Array with a function `onceWrapper` which has a property
                                                                                                                                                                                                                                            +// `listener` which contains the original listener bound above
                                                                                                                                                                                                                                            +const listeners = emitter.rawListeners('log');
                                                                                                                                                                                                                                            +const logFnWrapper = listeners[0];
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -// Logs "log once" to the console and does not unbind the `once` event
                                                                                                                                                                                                                                            +// Logs "log once" to the console and does not unbind the `once` event
                                                                                                                                                                                                                                             logFnWrapper.listener();
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -// Logs "log once" to the console and removes the listener
                                                                                                                                                                                                                                            +// Logs "log once" to the console and removes the listener
                                                                                                                                                                                                                                             logFnWrapper();
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -emitter.on('log', () => console.log('log persistently'));
                                                                                                                                                                                                                                            -// Will return a new Array with a single function bound by `.on()` above
                                                                                                                                                                                                                                            -const newListeners = emitter.rawListeners('log');
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -// Logs "log persistently" twice
                                                                                                                                                                                                                                            -newListeners[0]();
                                                                                                                                                                                                                                            -emitter.emit('log');
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +emitter.on('log', () => console.log('log persistently')); +// Will return a new Array with a single function bound by `.on()` above +const newListeners = emitter.rawListeners('log'); + +// Logs "log persistently" twice +newListeners[0](); +emitter.emit('log');

                                                                                                                                                                                                                                            emitter[Symbol.for('nodejs.rejection')](err, eventName[, ...args])#

                                                                                                                                                                                                                                          3. Returns: <Promise>

                                                                                                                                                                                                                                        Creates a Promise that is fulfilled when the EventEmitter emits the given -event or that is rejected when the EventEmitter emits 'error'. +event or that is rejected if the EventEmitter emits 'error' while waiting. The Promise will resolve with an array of all the arguments emitted to the given event.

                                                                                                                                                                                                                                        This method is intentionally generic and works with the web platform EventTarget interface, which has no special 'error' event semantics and does not listen to the 'error' event.

                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                        const { once, EventEmitter } = require('events');
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        const { once, EventEmitter } = require('events');
                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                        -async function run() {
                                                                                                                                                                                                                                        -  const ee = new EventEmitter();
                                                                                                                                                                                                                                        +async function run() {
                                                                                                                                                                                                                                        +  const ee = new EventEmitter();
                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                        -  process.nextTick(() => {
                                                                                                                                                                                                                                        -    ee.emit('myevent', 42);
                                                                                                                                                                                                                                        +  process.nextTick(() => {
                                                                                                                                                                                                                                        +    ee.emit('myevent', 42);
                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                        -  const [value] = await once(ee, 'myevent');
                                                                                                                                                                                                                                        -  console.log(value);
                                                                                                                                                                                                                                        +  const [value] = await once(ee, 'myevent');
                                                                                                                                                                                                                                        +  console.log(value);
                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                        -  const err = new Error('kaboom');
                                                                                                                                                                                                                                        -  process.nextTick(() => {
                                                                                                                                                                                                                                        -    ee.emit('error', err);
                                                                                                                                                                                                                                        +  const err = new Error('kaboom');
                                                                                                                                                                                                                                        +  process.nextTick(() => {
                                                                                                                                                                                                                                        +    ee.emit('error', err);
                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                        -  try {
                                                                                                                                                                                                                                        -    await once(ee, 'myevent');
                                                                                                                                                                                                                                        -  } catch (err) {
                                                                                                                                                                                                                                        -    console.log('error happened', err);
                                                                                                                                                                                                                                        +  try {
                                                                                                                                                                                                                                        +    await once(ee, 'myevent');
                                                                                                                                                                                                                                        +  } catch (err) {
                                                                                                                                                                                                                                        +    console.log('error happened', err);
                                                                                                                                                                                                                                           }
                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                        -run();
                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                        events.captureRejections#

                                                                                                                                                                                                                                        +run();
                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        The special handling of the 'error' event is only used when events.once() +is used to wait for another event. If events.once() is used to wait for the +'error' event itself, then it is treated as any other kind of event without +special handling:

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        const { EventEmitter, once } = require('events');
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +const ee = new EventEmitter();
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +once(ee, 'error')
                                                                                                                                                                                                                                        +  .then(([err]) => console.log('ok', err.message))
                                                                                                                                                                                                                                        +  .catch((err) => console.log('error', err.message));
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +ee.emit('error', new Error('boom'));
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +// Prints: ok boom
                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        Awaiting multiple events emitted on process.nextTick()#

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        There is an edge case worth noting when using the events.once() function +to await multiple events emitted on in the same batch of process.nextTick() +operations, or whenever multiple events are emitted synchronously. Specifically, +because the process.nextTick() queue is drained before the Promise microtask +queue, and because EventEmitter emits all events synchronously, it is possible +for events.once() to miss an event.

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        const { EventEmitter, once } = require('events');
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +const myEE = new EventEmitter();
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +async function foo() {
                                                                                                                                                                                                                                        +  await once(myEE, 'bar');
                                                                                                                                                                                                                                        +  console.log('bar');
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +  // This Promise will never resolve because the 'foo' event will
                                                                                                                                                                                                                                        +  // have already been emitted before the Promise is created.
                                                                                                                                                                                                                                        +  await once(myEE, 'foo');
                                                                                                                                                                                                                                        +  console.log('foo');
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +process.nextTick(() => {
                                                                                                                                                                                                                                        +  myEE.emit('bar');
                                                                                                                                                                                                                                        +  myEE.emit('foo');
                                                                                                                                                                                                                                        +});
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +foo().then(() => console.log('done'));
                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        To catch both events, create each of the Promises before awaiting either +of them, then it becomes possible to use Promise.all(), Promise.race(), +or Promise.allSettled():

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        const { EventEmitter, once } = require('events');
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +const myEE = new EventEmitter();
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +async function foo() {
                                                                                                                                                                                                                                        +  await Promise.all([once(myEE, 'bar'), once(myEE, 'foo')]);
                                                                                                                                                                                                                                        +  console.log('foo', 'bar');
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +process.nextTick(() => {
                                                                                                                                                                                                                                        +  myEE.emit('bar');
                                                                                                                                                                                                                                        +  myEE.emit('foo');
                                                                                                                                                                                                                                        +});
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +foo().then(() => console.log('done'));
                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        events.captureRejections#

                                                                                                                                                                                                                                        @@ -910,7 +949,7 @@

                                                                                                                                                                                                                                        Stability: 1 - captureRejections is experimental.

                                                                                                                                                                                                                                        Value: Symbol.for('nodejs.rejection')

                                                                                                                                                                                                                                        See how to write a custom rejection handler.

                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                        events.on(emitter, eventName)[src]#

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        events.on(emitter, eventName)[src]#

                                                                                                                                                                                                                                        @@ -919,35 +958,32 @@
                                                                                                                                                                                                                                      • eventName <string> | <symbol> The name of the event being listened for
                                                                                                                                                                                                                                      • Returns: <AsyncIterator> that iterates eventName events emitted by the emitter
                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                      const { on, EventEmitter } = require('events');
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      const { on, EventEmitter } = require('events');
                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                      -(async () => {
                                                                                                                                                                                                                                      -  const ee = new EventEmitter();
                                                                                                                                                                                                                                      +(async () => {
                                                                                                                                                                                                                                      +  const ee = new EventEmitter();
                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                      -  // Emit later on
                                                                                                                                                                                                                                      -  process.nextTick(() => {
                                                                                                                                                                                                                                      -    ee.emit('foo', 'bar');
                                                                                                                                                                                                                                      -    ee.emit('foo', 42);
                                                                                                                                                                                                                                      +  // Emit later on
                                                                                                                                                                                                                                      +  process.nextTick(() => {
                                                                                                                                                                                                                                      +    ee.emit('foo', 'bar');
                                                                                                                                                                                                                                      +    ee.emit('foo', 42);
                                                                                                                                                                                                                                         });
                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                      -  for await (const event of on(ee, 'foo')) {
                                                                                                                                                                                                                                      -    // The execution of this inner block is synchronous and it
                                                                                                                                                                                                                                      -    // processes one event at a time (even with await). Do not use
                                                                                                                                                                                                                                      -    // if concurrent execution is required.
                                                                                                                                                                                                                                      -    console.log(event); // prints ['bar'] [42]
                                                                                                                                                                                                                                      +  for await (const event of on(ee, 'foo')) {
                                                                                                                                                                                                                                      +    // The execution of this inner block is synchronous and it
                                                                                                                                                                                                                                      +    // processes one event at a time (even with await). Do not use
                                                                                                                                                                                                                                      +    // if concurrent execution is required.
                                                                                                                                                                                                                                      +    console.log(event); // prints ['bar'] [42]
                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                      -  // Unreachable here
                                                                                                                                                                                                                                      -})();
                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                      + // Unreachable here +})();

                                                                                                                                                                                                                                      Returns an AsyncIterator that iterates eventName events. It will throw if the EventEmitter emits 'error'. It removes all listeners when exiting the loop. The value returned by each iteration is an array composed of the emitted event arguments.

                                                                                                                                                                                                                                      + - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/events.json nodejs-mozilla-12.22.12/doc/api/events.json --- nodejs-mozilla-12.18.1/doc/api/events.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/events.json 2022-04-05 07:17:04.000000000 +0000 @@ -9,7 +9,7 @@ "stability": 2, "stabilityText": "Stable", "type": "module", - "desc": "

                                                                                                                                                                                                                                      Much of the Node.js core API is built around an idiomatic asynchronous\nevent-driven architecture in which certain kinds of objects (called \"emitters\")\nemit named events that cause Function objects (\"listeners\") to be called.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      For instance: a net.Server object emits an event each time a peer\nconnects to it; a fs.ReadStream emits an event when the file is opened;\na stream emits an event whenever data is available to be read.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      All objects that emit events are instances of the EventEmitter class. These\nobjects expose an eventEmitter.on() function that allows one or more\nfunctions to be attached to named events emitted by the object. Typically,\nevent names are camel-cased strings but any valid JavaScript property key\ncan be used.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      When the EventEmitter object emits an event, all of the functions attached\nto that specific event are called synchronously. Any values returned by the\ncalled listeners are ignored and will be discarded.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      The following example shows a simple EventEmitter instance with a single\nlistener. The eventEmitter.on() method is used to register listeners, while\nthe eventEmitter.emit() method is used to trigger the event.

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const EventEmitter = require('events');\n\nclass MyEmitter extends EventEmitter {}\n\nconst myEmitter = new MyEmitter();\nmyEmitter.on('event', () => {\n  console.log('an event occurred!');\n});\nmyEmitter.emit('event');\n
                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                      Source Code: lib/events.js

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      Much of the Node.js core API is built around an idiomatic asynchronous\nevent-driven architecture in which certain kinds of objects (called \"emitters\")\nemit named events that cause Function objects (\"listeners\") to be called.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      For instance: a net.Server object emits an event each time a peer\nconnects to it; a fs.ReadStream emits an event when the file is opened;\na stream emits an event whenever data is available to be read.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      All objects that emit events are instances of the EventEmitter class. These\nobjects expose an eventEmitter.on() function that allows one or more\nfunctions to be attached to named events emitted by the object. Typically,\nevent names are camel-cased strings but any valid JavaScript property key\ncan be used.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      When the EventEmitter object emits an event, all of the functions attached\nto that specific event are called synchronously. Any values returned by the\ncalled listeners are ignored and will be discarded.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      The following example shows a simple EventEmitter instance with a single\nlistener. The eventEmitter.on() method is used to register listeners, while\nthe eventEmitter.emit() method is used to trigger the event.

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const EventEmitter = require('events');\n\nclass MyEmitter extends EventEmitter {}\n\nconst myEmitter = new MyEmitter();\nmyEmitter.on('event', () => {\n  console.log('an event occurred!');\n});\nmyEmitter.emit('event');\n
                                                                                                                                                                                                                                      ", "modules": [ { "textRaw": "Passing arguments and `this` to listeners", @@ -19,11 +19,11 @@ "displayName": "Passing arguments and `this` to listeners" }, { - "textRaw": "Asynchronous vs. Synchronous", + "textRaw": "Asynchronous vs. synchronous", "name": "asynchronous_vs._synchronous", "desc": "

                                                                                                                                                                                                                                      The EventEmitter calls all listeners synchronously in the order in which\nthey were registered. This ensures the proper sequencing of\nevents and helps avoid race conditions and logic errors. When appropriate,\nlistener functions can switch to an asynchronous mode of operation using\nthe setImmediate() or process.nextTick() methods:

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const myEmitter = new MyEmitter();\nmyEmitter.on('event', (a, b) => {\n  setImmediate(() => {\n    console.log('this happens asynchronously');\n  });\n});\nmyEmitter.emit('event', 'a', 'b');\n
                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Asynchronous vs. Synchronous" + "displayName": "Asynchronous vs. synchronous" }, { "textRaw": "Handling events only once", @@ -40,13 +40,13 @@ "displayName": "Error events" }, { - "textRaw": "Capture Rejections of Promises", + "textRaw": "Capture rejections of promises", "name": "capture_rejections_of_promises", "stability": 1, "stabilityText": "captureRejections is experimental.", "desc": "

                                                                                                                                                                                                                                      Using async functions with event handlers is problematic, because it\ncan lead to an unhandled rejection in case of a thrown exception:

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const ee = new EventEmitter();\nee.on('something', async (value) => {\n  throw new Error('kaboom');\n});\n
                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      The captureRejections option in the EventEmitter constructor or the global\nsetting change this behavior, installing a .then(undefined, handler)\nhandler on the Promise. This handler routes the exception\nasynchronously to the Symbol.for('nodejs.rejection') method\nif there is one, or to 'error' event handler if there is none.

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const ee1 = new EventEmitter({ captureRejections: true });\nee1.on('something', async (value) => {\n  throw new Error('kaboom');\n});\n\nee1.on('error', console.log);\n\nconst ee2 = new EventEmitter({ captureRejections: true });\nee2.on('something', async (value) => {\n  throw new Error('kaboom');\n});\n\nee2[Symbol.for('nodejs.rejection')] = console.log;\n
                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      Setting EventEmitter.captureRejections = true will change the default for all\nnew instances of EventEmitter.

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      EventEmitter.captureRejections = true;\nconst ee1 = new EventEmitter();\nee1.on('something', async (value) => {\n  throw new Error('kaboom');\n});\n\nee1.on('error', console.log);\n
                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      The 'error' events that are generated by the captureRejections behavior\ndo not have a catch handler to avoid infinite error loops: the\nrecommendation is to not use async functions as 'error' event handlers.

                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Capture Rejections of Promises" + "displayName": "Capture rejections of promises" } ], "classes": [ @@ -137,7 +137,7 @@ "v0.9.12" ], "deprecated": [ - "v4.0.0" + "v3.2.0" ], "changes": [] }, @@ -697,7 +697,16 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                      Creates a Promise that is fulfilled when the EventEmitter emits the given\nevent or that is rejected when the EventEmitter emits 'error'.\nThe Promise will resolve with an array of all the arguments emitted to the\ngiven event.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      This method is intentionally generic and works with the web platform\nEventTarget interface, which has no special\n'error' event semantics and does not listen to the 'error' event.

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const { once, EventEmitter } = require('events');\n\nasync function run() {\n  const ee = new EventEmitter();\n\n  process.nextTick(() => {\n    ee.emit('myevent', 42);\n  });\n\n  const [value] = await once(ee, 'myevent');\n  console.log(value);\n\n  const err = new Error('kaboom');\n  process.nextTick(() => {\n    ee.emit('error', err);\n  });\n\n  try {\n    await once(ee, 'myevent');\n  } catch (err) {\n    console.log('error happened', err);\n  }\n}\n\nrun();\n
                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                      Creates a Promise that is fulfilled when the EventEmitter emits the given\nevent or that is rejected if the EventEmitter emits 'error' while waiting.\nThe Promise will resolve with an array of all the arguments emitted to the\ngiven event.

                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      This method is intentionally generic and works with the web platform\nEventTarget interface, which has no special\n'error' event semantics and does not listen to the 'error' event.

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const { once, EventEmitter } = require('events');\n\nasync function run() {\n  const ee = new EventEmitter();\n\n  process.nextTick(() => {\n    ee.emit('myevent', 42);\n  });\n\n  const [value] = await once(ee, 'myevent');\n  console.log(value);\n\n  const err = new Error('kaboom');\n  process.nextTick(() => {\n    ee.emit('error', err);\n  });\n\n  try {\n    await once(ee, 'myevent');\n  } catch (err) {\n    console.log('error happened', err);\n  }\n}\n\nrun();\n
                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      The special handling of the 'error' event is only used when events.once()\nis used to wait for another event. If events.once() is used to wait for the\n'error' event itself, then it is treated as any other kind of event without\nspecial handling:

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const { EventEmitter, once } = require('events');\n\nconst ee = new EventEmitter();\n\nonce(ee, 'error')\n  .then(([err]) => console.log('ok', err.message))\n  .catch((err) => console.log('error', err.message));\n\nee.emit('error', new Error('boom'));\n\n// Prints: ok boom\n
                                                                                                                                                                                                                                      ", + "modules": [ + { + "textRaw": "Awaiting multiple events emitted on `process.nextTick()`", + "name": "awaiting_multiple_events_emitted_on_`process.nexttick()`", + "desc": "

                                                                                                                                                                                                                                      There is an edge case worth noting when using the events.once() function\nto await multiple events emitted on in the same batch of process.nextTick()\noperations, or whenever multiple events are emitted synchronously. Specifically,\nbecause the process.nextTick() queue is drained before the Promise microtask\nqueue, and because EventEmitter emits all events synchronously, it is possible\nfor events.once() to miss an event.

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const { EventEmitter, once } = require('events');\n\nconst myEE = new EventEmitter();\n\nasync function foo() {\n  await once(myEE, 'bar');\n  console.log('bar');\n\n  // This Promise will never resolve because the 'foo' event will\n  // have already been emitted before the Promise is created.\n  await once(myEE, 'foo');\n  console.log('foo');\n}\n\nprocess.nextTick(() => {\n  myEE.emit('bar');\n  myEE.emit('foo');\n});\n\nfoo().then(() => console.log('done'));\n
                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                      To catch both events, create each of the Promises before awaiting either\nof them, then it becomes possible to use Promise.all(), Promise.race(),\nor Promise.allSettled():

                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                      const { EventEmitter, once } = require('events');\n\nconst myEE = new EventEmitter();\n\nasync function foo() {\n  await Promise.all([once(myEE, 'bar'), once(myEE, 'foo')]);\n  console.log('foo', 'bar');\n}\n\nprocess.nextTick(() => {\n  myEE.emit('bar');\n  myEE.emit('foo');\n});\n\nfoo().then(() => console.log('done'));\n
                                                                                                                                                                                                                                      ", + "type": "module", + "displayName": "Awaiting multiple events emitted on `process.nextTick()`" + } + ] }, { "textRaw": "events.on(emitter, eventName)", @@ -737,7 +746,7 @@ ], "properties": [ { - "textRaw": "events.captureRejections", + "textRaw": "`events.captureRejections`", "name": "captureRejections", "meta": { "added": [ diff -Nru nodejs-mozilla-12.18.1/doc/api/events.md nodejs-mozilla-12.22.12/doc/api/events.md --- nodejs-mozilla-12.18.1/doc/api/events.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/events.md 2022-04-05 07:17:04.000000000 +0000 @@ -6,6 +6,8 @@ + + Much of the Node.js core API is built around an idiomatic asynchronous event-driven architecture in which certain kinds of objects (called "emitters") emit named events that cause `Function` objects ("listeners") to be called. @@ -74,7 +76,7 @@ myEmitter.emit('event', 'a', 'b'); ``` -## Asynchronous vs. Synchronous +## Asynchronous vs. synchronous The `EventEmitter` calls all listeners synchronously in the order in which they were registered. This ensures the proper sequencing of @@ -167,7 +169,7 @@ // Still throws and crashes Node.js ``` -## Capture Rejections of Promises +## Capture rejections of promises > Stability: 1 - captureRejections is experimental. @@ -301,7 +303,7 @@ ### `EventEmitter.listenerCount(emitter, eventName)` > Stability: 0 - Deprecated: Use [`emitter.listenerCount()`][] instead. @@ -827,7 +829,7 @@ * Returns: {Promise} Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given -event or that is rejected when the `EventEmitter` emits `'error'`. +event or that is rejected if the `EventEmitter` emits `'error'` while waiting. The `Promise` will resolve with an array of all the arguments emitted to the given event. @@ -863,7 +865,80 @@ run(); ``` -## events.captureRejections +The special handling of the `'error'` event is only used when `events.once()` +is used to wait for another event. If `events.once()` is used to wait for the +'`error'` event itself, then it is treated as any other kind of event without +special handling: + +```js +const { EventEmitter, once } = require('events'); + +const ee = new EventEmitter(); + +once(ee, 'error') + .then(([err]) => console.log('ok', err.message)) + .catch((err) => console.log('error', err.message)); + +ee.emit('error', new Error('boom')); + +// Prints: ok boom +``` + +### Awaiting multiple events emitted on `process.nextTick()` + +There is an edge case worth noting when using the `events.once()` function +to await multiple events emitted on in the same batch of `process.nextTick()` +operations, or whenever multiple events are emitted synchronously. Specifically, +because the `process.nextTick()` queue is drained before the `Promise` microtask +queue, and because `EventEmitter` emits all events synchronously, it is possible +for `events.once()` to miss an event. + +```js +const { EventEmitter, once } = require('events'); + +const myEE = new EventEmitter(); + +async function foo() { + await once(myEE, 'bar'); + console.log('bar'); + + // This Promise will never resolve because the 'foo' event will + // have already been emitted before the Promise is created. + await once(myEE, 'foo'); + console.log('foo'); +} + +process.nextTick(() => { + myEE.emit('bar'); + myEE.emit('foo'); +}); + +foo().then(() => console.log('done')); +``` + +To catch both events, create each of the Promises *before* awaiting either +of them, then it becomes possible to use `Promise.all()`, `Promise.race()`, +or `Promise.allSettled()`: + +```js +const { EventEmitter, once } = require('events'); + +const myEE = new EventEmitter(); + +async function foo() { + await Promise.all([once(myEE, 'bar'), once(myEE, 'foo')]); + console.log('foo', 'bar'); +} + +process.nextTick(() => { + myEE.emit('bar'); + myEE.emit('foo'); +}); + +foo().then(() => console.log('done')); +``` + +## `events.captureRejections` diff -Nru nodejs-mozilla-12.18.1/doc/api/fs.html nodejs-mozilla-12.22.12/doc/api/fs.html --- nodejs-mozilla-12.18.1/doc/api/fs.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/fs.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - File System | Node.js v12.18.1 Documentation + + File system | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                      Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                      • - Index + Index
                                                                                                                                                                                                                                      • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                      • View another version -
                                                                                                                                                                                                                                        1. 14.x
                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                          1. 17.x
                                                                                                                                                                                                                                          2. +
                                                                                                                                                                                                                                          3. 16.x LTS
                                                                                                                                                                                                                                          4. +
                                                                                                                                                                                                                                          5. 15.x
                                                                                                                                                                                                                                          6. +
                                                                                                                                                                                                                                          7. 14.x LTS
                                                                                                                                                                                                                                          8. 13.x
                                                                                                                                                                                                                                          9. 12.x LTS
                                                                                                                                                                                                                                          10. 11.x
                                                                                                                                                                                                                                          11. -
                                                                                                                                                                                                                                          12. 10.x LTS
                                                                                                                                                                                                                                          13. +
                                                                                                                                                                                                                                          14. 10.x
                                                                                                                                                                                                                                          15. 9.x
                                                                                                                                                                                                                                          16. 8.x
                                                                                                                                                                                                                                          17. 7.x
                                                                                                                                                                                                                                          18. @@ -121,19 +128,20 @@

                                                                                                                                                                                                                                            Table of Contents

                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            File System#

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            File system#

                                                                                                                                                                                                                                            Stability: 2 - Stable

                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            The fs module provides an API for interacting with the file system in a -manner closely modeled around standard POSIX functions.

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Source Code: lib/fs.js

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            The fs module enables interacting with the file system in a +way modeled on standard POSIX functions.

                                                                                                                                                                                                                                            To use this module:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            All file system operations have synchronous and asynchronous forms.

                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            The asynchronous form always takes a completion callback as its last argument. -The arguments passed to the completion callback depend on the method, but the -first argument is always reserved for an exception. If the operation was -completed successfully, then the first argument will be null or undefined.

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -fs.unlink('/tmp/hello', (err) => {
                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                            -  console.log('successfully deleted /tmp/hello');
                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            Exceptions that occur using synchronous operations are thrown immediately and -may be handled using try…catch, or may be allowed to bubble up.

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -try {
                                                                                                                                                                                                                                            -  fs.unlinkSync('/tmp/hello');
                                                                                                                                                                                                                                            -  console.log('successfully deleted /tmp/hello');
                                                                                                                                                                                                                                            -} catch (err) {
                                                                                                                                                                                                                                            -  // handle the error
                                                                                                                                                                                                                                            -}
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            There is no guaranteed ordering when using asynchronous methods. So the -following is prone to error because the fs.stat() operation may complete -before the fs.rename() operation:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            fs.rename('/tmp/hello', '/tmp/world', (err) => {
                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                            -  console.log('renamed complete');
                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                            -fs.stat('/tmp/world', (err, stats) => {
                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                            -  console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            All file system operations have synchronous, callback, and promise-based +forms.

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Synchronous example#

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            The synchronous form blocks the Node.js event loop and further JavaScript +execution until the operation is complete. Exceptions are thrown immediately +and can be handled using try…catch, or can be allowed to bubble up.

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +try {
                                                                                                                                                                                                                                            +  fs.unlinkSync('/tmp/hello');
                                                                                                                                                                                                                                            +  console.log('successfully deleted /tmp/hello');
                                                                                                                                                                                                                                            +} catch (err) {
                                                                                                                                                                                                                                            +  // handle the error
                                                                                                                                                                                                                                            +}
                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Callback example#

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            The callback form takes a completion callback function as its last +argument and invokes the operation asynchronously. The arguments passed to +the completion callback depend on the method, but the first argument is always +reserved for an exception. If the operation is completed successfully, then +the first argument is null or undefined.

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +fs.unlink('/tmp/hello', (err) => {
                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                            +  console.log('successfully deleted /tmp/hello');
                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Promise example#

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Promise-based operations return a Promise that is resolved when the +asynchronous operation is complete.

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const fs = require('fs').promises;
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +(async function(path) {
                                                                                                                                                                                                                                            +  try {
                                                                                                                                                                                                                                            +    await fs.unlink(path);
                                                                                                                                                                                                                                            +    console.log(`successfully deleted ${path}`);
                                                                                                                                                                                                                                            +  } catch (error) {
                                                                                                                                                                                                                                            +    console.error('there was an error:', error.message);
                                                                                                                                                                                                                                            +  }
                                                                                                                                                                                                                                            +})('/tmp/hello');
                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Ordering of callback and promise-based operations#

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            There is no guaranteed ordering when using either the callback or +promise-based methods. For example, the following is prone to error +because the fs.stat() operation might complete before the fs.rename() +operation:

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            fs.rename('/tmp/hello', '/tmp/world', (err) => {
                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                            +  console.log('renamed complete');
                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                            +fs.stat('/tmp/world', (err, stats) => {
                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                            +  console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                            To correctly order the operations, move the fs.stat() call into the callback of the fs.rename() operation:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            fs.rename('/tmp/hello', '/tmp/world', (err) => {
                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                            -  fs.stat('/tmp/world', (err, stats) => {
                                                                                                                                                                                                                                            -    if (err) throw err;
                                                                                                                                                                                                                                            -    console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            fs.rename('/tmp/hello', '/tmp/world', (err) => {
                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                            +  fs.stat('/tmp/world', (err, stats) => {
                                                                                                                                                                                                                                            +    if (err) throw err;
                                                                                                                                                                                                                                            +    console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            In busy processes, use the asynchronous versions of these calls. The synchronous -versions will block the entire process until they complete, halting all -connections.

                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            While it is not recommended, most fs functions allow the callback argument to -be omitted, in which case a default callback is used that rethrows errors. To -get a trace to the original call site, set the NODE_DEBUG environment -variable:

                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            Omitting the callback function on asynchronous fs functions is deprecated and -may result in an error being thrown in the future.

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            $ cat script.js
                                                                                                                                                                                                                                            -function bad() {
                                                                                                                                                                                                                                            -  require('fs').readFile('/');
                                                                                                                                                                                                                                            -}
                                                                                                                                                                                                                                            -bad();
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -$ env NODE_DEBUG=fs node script.js
                                                                                                                                                                                                                                            -fs.js:88
                                                                                                                                                                                                                                            -        throw backtrace;
                                                                                                                                                                                                                                            -        ^
                                                                                                                                                                                                                                            -Error: EISDIR: illegal operation on a directory, read
                                                                                                                                                                                                                                            -    <stack trace.>
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Or, use the promise-based API:

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const fs = require('fs').promises;
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +(async function(from, to) {
                                                                                                                                                                                                                                            +  try {
                                                                                                                                                                                                                                            +    await fs.rename(from, to);
                                                                                                                                                                                                                                            +    const stats = await fs.stat(to);
                                                                                                                                                                                                                                            +    console.log(`stats: ${JSON.stringify(stats)}`);
                                                                                                                                                                                                                                            +  } catch (error) {
                                                                                                                                                                                                                                            +    console.error('there was an error:', error.message);
                                                                                                                                                                                                                                            +  }
                                                                                                                                                                                                                                            +})('/tmp/hello', '/tmp/world');

                                                                                                                                                                                                                                            File paths#

                                                                                                                                                                                                                                            Most fs operations accept filepaths that may be specified in the form of a string, a Buffer, or a URL object using the file: protocol.

                                                                                                                                                                                                                                            String form paths are interpreted as UTF-8 character sequences identifying the absolute or relative filename. Relative paths will be resolved relative -to the current working directory as specified by process.cwd().

                                                                                                                                                                                                                                            +to the current working directory as determined by calling process.cwd().

                                                                                                                                                                                                                                            Example using an absolute path on POSIX:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -fs.open('/open/some/file.txt', 'r', (err, fd) => {
                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                            -  fs.close(fd, (err) => {
                                                                                                                                                                                                                                            -    if (err) throw err;
                                                                                                                                                                                                                                            +fs.open('/open/some/file.txt', 'r', (err, fd) => {
                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                            +  fs.close(fd, (err) => {
                                                                                                                                                                                                                                            +    if (err) throw err;
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                            Example using a relative path on POSIX (relative to process.cwd()):

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            fs.open('file.txt', 'r', (err, fd) => {
                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                            -  fs.close(fd, (err) => {
                                                                                                                                                                                                                                            -    if (err) throw err;
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            fs.open('file.txt', 'r', (err, fd) => {
                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                            +  fs.close(fd, (err) => {
                                                                                                                                                                                                                                            +    if (err) throw err;
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                            Paths specified using a Buffer are useful primarily on certain POSIX operating systems that treat file paths as opaque byte sequences. On such systems, it is possible for a single file path to contain sub-sequences that use multiple character encodings. As with string paths, Buffer paths may be relative or absolute:

                                                                                                                                                                                                                                            Example using an absolute path on POSIX:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {
                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                            -  fs.close(fd, (err) => {
                                                                                                                                                                                                                                            -    if (err) throw err;
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {
                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                            +  fs.close(fd, (err) => {
                                                                                                                                                                                                                                            +    if (err) throw err;
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                            On Windows, Node.js follows the concept of per-drive working directory. This behavior can be observed when using a drive path without a backslash. For example fs.readdirSync('C:\\') can potentially return a different result than @@ -534,68 +543,63 @@

                                                                                                                                                                                                                                            For most fs module functions, the path or filename argument may be passed as a WHATWG URL object. Only URL objects using the file: protocol are supported.

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            -const fileUrl = new URL('file:///tmp/hello');
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            +const fileUrl = new URL('file:///tmp/hello');
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -fs.readFileSync(fileUrl);
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +fs.readFileSync(fileUrl);

                                                                                                                                                                                                                                            file: URLs are always absolute paths.

                                                                                                                                                                                                                                            Using WHATWG URL objects might introduce platform-specific behaviors.

                                                                                                                                                                                                                                            On Windows, file: URLs with a host name convert to UNC paths, while file: URLs with drive letters convert to local absolute paths. file: URLs without a host name nor a drive letter will result in a throw:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            // On Windows :
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            // On Windows :
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -// - WHATWG file URLs with hostname convert to UNC path
                                                                                                                                                                                                                                            -// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file://hostname/p/a/t/h/file'));
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -// - WHATWG file URLs with drive letters convert to absolute path
                                                                                                                                                                                                                                            -// file:///C:/tmp/hello => C:\tmp\hello
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///C:/tmp/hello'));
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -// - WHATWG file URLs without hostname must have a drive letters
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///notdriveletter/p/a/t/h/file'));
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///c/p/a/t/h/file'));
                                                                                                                                                                                                                                            -// TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +// - WHATWG file URLs with hostname convert to UNC path +// file://hostname/p/a/t/h/file => \\hostname\p\a\t\h\file +fs.readFileSync(new URL('file://hostname/p/a/t/h/file')); + +// - WHATWG file URLs with drive letters convert to absolute path +// file:///C:/tmp/hello => C:\tmp\hello +fs.readFileSync(new URL('file:///C:/tmp/hello')); + +// - WHATWG file URLs without hostname must have a drive letters +fs.readFileSync(new URL('file:///notdriveletter/p/a/t/h/file')); +fs.readFileSync(new URL('file:///c/p/a/t/h/file')); +// TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must be absolute

                                                                                                                                                                                                                                            file: URLs with drive letters must use : as a separator just after the drive letter. Using another separator will result in a throw.

                                                                                                                                                                                                                                            On all other platforms, file: URLs with a host name are unsupported and will result in a throw:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            // On other platforms:
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            // On other platforms:
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -// - WHATWG file URLs with hostname are unsupported
                                                                                                                                                                                                                                            -// file://hostname/p/a/t/h/file => throw!
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file://hostname/p/a/t/h/file'));
                                                                                                                                                                                                                                            -// TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -// - WHATWG file URLs convert to absolute path
                                                                                                                                                                                                                                            -// file:///tmp/hello => /tmp/hello
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///tmp/hello'));
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +// - WHATWG file URLs with hostname are unsupported +// file://hostname/p/a/t/h/file => throw! +fs.readFileSync(new URL('file://hostname/p/a/t/h/file')); +// TypeError [ERR_INVALID_FILE_URL_PATH]: must be absolute + +// - WHATWG file URLs convert to absolute path +// file:///tmp/hello => /tmp/hello +fs.readFileSync(new URL('file:///tmp/hello'));

                                                                                                                                                                                                                                            A file: URL having encoded slash characters will result in a throw on all platforms:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            // On Windows
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
                                                                                                                                                                                                                                            -/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                                                                            -\ or / characters */
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -// On POSIX
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///p/a/t/h/%2F'));
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///p/a/t/h/%2f'));
                                                                                                                                                                                                                                            -/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                                                                            -/ characters */
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            // On Windows
                                                                                                                                                                                                                                            +fs.readFileSync(new URL('file:///C:/p/a/t/h/%2F'));
                                                                                                                                                                                                                                            +fs.readFileSync(new URL('file:///C:/p/a/t/h/%2f'));
                                                                                                                                                                                                                                            +/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                                                                            +\ or / characters */
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +// On POSIX
                                                                                                                                                                                                                                            +fs.readFileSync(new URL('file:///p/a/t/h/%2F'));
                                                                                                                                                                                                                                            +fs.readFileSync(new URL('file:///p/a/t/h/%2f'));
                                                                                                                                                                                                                                            +/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                                                                            +/ characters */

                                                                                                                                                                                                                                            On Windows, file: URLs having encoded backslash will result in a throw:

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            // On Windows
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///C:/path/%5C'));
                                                                                                                                                                                                                                            -fs.readFileSync(new URL('file:///C:/path/%5c'));
                                                                                                                                                                                                                                            -/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                                                                            -\ or / characters */
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            File Descriptors#

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            // On Windows
                                                                                                                                                                                                                                            +fs.readFileSync(new URL('file:///C:/path/%5C'));
                                                                                                                                                                                                                                            +fs.readFileSync(new URL('file:///C:/path/%5c'));
                                                                                                                                                                                                                                            +/* TypeError [ERR_INVALID_FILE_URL_PATH]: File URL path must not include encoded
                                                                                                                                                                                                                                            +\ or / characters */
                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            File descriptors#

                                                                                                                                                                                                                                            On POSIX systems, for every process, the kernel maintains a table of currently open files and resources. Each open file is assigned a simple numeric identifier called a file descriptor. At the system-level, all file system @@ -607,45 +611,43 @@

                                                                                                                                                                                                                                            The fs.open() method is used to allocate a new file descriptor. Once allocated, the file descriptor may be used to read data from, write data to, or request information about the file.

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            fs.open('/open/some/file.txt', 'r', (err, fd) => {
                                                                                                                                                                                                                                            -  if (err) throw err;
                                                                                                                                                                                                                                            -  fs.fstat(fd, (err, stat) => {
                                                                                                                                                                                                                                            -    if (err) throw err;
                                                                                                                                                                                                                                            -    // use stat
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            -    // always close the file descriptor!
                                                                                                                                                                                                                                            -    fs.close(fd, (err) => {
                                                                                                                                                                                                                                            -      if (err) throw err;
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            fs.open('/open/some/file.txt', 'r', (err, fd) => {
                                                                                                                                                                                                                                            +  if (err) throw err;
                                                                                                                                                                                                                                            +  fs.fstat(fd, (err, stat) => {
                                                                                                                                                                                                                                            +    if (err) throw err;
                                                                                                                                                                                                                                            +    // use stat
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +    // always close the file descriptor!
                                                                                                                                                                                                                                            +    fs.close(fd, (err) => {
                                                                                                                                                                                                                                            +      if (err) throw err;
                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                            Most operating systems limit the number of file descriptors that may be open at any given time so it is critical to close the descriptor when operations are completed. Failure to do so will result in a memory leak that will eventually cause an application to crash.

                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            Threadpool Usage#

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Threadpool usage#

                                                                                                                                                                                                                                            All file system APIs except fs.FSWatcher() and those that are explicitly synchronous use libuv's threadpool, which can have surprising and negative performance implications for some applications. See the UV_THREADPOOL_SIZE documentation for more information.

                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                            Class fs.Dir#

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Class: fs.Dir#

                                                                                                                                                                                                                                            A class representing a directory stream.

                                                                                                                                                                                                                                            Created by fs.opendir(), fs.opendirSync(), or fsPromises.opendir().

                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                            -async function print(path) {
                                                                                                                                                                                                                                            -  const dir = await fs.promises.opendir(path);
                                                                                                                                                                                                                                            -  for await (const dirent of dir) {
                                                                                                                                                                                                                                            -    console.log(dirent.name);
                                                                                                                                                                                                                                            +async function print(path) {
                                                                                                                                                                                                                                            +  const dir = await fs.promises.opendir(path);
                                                                                                                                                                                                                                            +  for await (const dirent of dir) {
                                                                                                                                                                                                                                            +    console.log(dirent.name);
                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                            -print('./').catch(console.error);
                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                            +print('./').catch(console.error);

                                                                                                                                                                                                                                            dir.close()#

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                            • callback <Function>
                                                                                                                                                                                                                                              • err <Error>
                                                                                                                                                                                                                                              • dirent <fs.Dirent> | <null>
                                                                                                                                                                                                                                              • @@ -856,14 +856,13 @@ support. If filename is provided, it will be provided as a Buffer if fs.watch() is called with its encoding option set to 'buffer', otherwise filename will be a UTF-8 string.

                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                // Example when handled through fs.watch() listener
                                                                                                                                                                                                                                                -fs.watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
                                                                                                                                                                                                                                                -  if (filename) {
                                                                                                                                                                                                                                                -    console.log(filename);
                                                                                                                                                                                                                                                -    // Prints: <Buffer ...>
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                // Example when handled through fs.watch() listener
                                                                                                                                                                                                                                                +fs.watch('./tmp', { encoding: 'buffer' }, (eventType, filename) => {
                                                                                                                                                                                                                                                +  if (filename) {
                                                                                                                                                                                                                                                +    console.log(filename);
                                                                                                                                                                                                                                                +    // Prints: <Buffer ...>
                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                +});

                                                                                                                                                                                                                                                Event: 'close'#

                                                                                                                                                                                                                                                Stop watching for changes on the given fs.FSWatcher. Once stopped, the fs.FSWatcher object is no longer usable.

                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                watcher.ref()#

                                                                                                                                                                                                                                                + + +

                                                                                                                                                                                                                                                When called, requests that the Node.js event loop not exit so long as the +FSWatcher is active. Calling watcher.ref() multiple times will have +no effect.

                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                By default, all FSWatcher objects are "ref'ed", making it normally +unnecessary to call watcher.ref() unless watcher.unref() had been +called previously.

                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                watcher.unref()#

                                                                                                                                                                                                                                                + + +

                                                                                                                                                                                                                                                When called, the active FSWatcher object will not require the Node.js +event loop to remain active. If there is no other activity keeping the +event loop running, the process may exit before the FSWatcher object's +callback is invoked. Calling watcher.unref() multiple times will have +no effect.

                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                Class: fs.StatWatcher#

                                                                                                                                                                                                                                                + + +

                                                                                                                                                                                                                                                A successful call to fs.watchFile() method will return a new fs.StatWatcher +object.

                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                watcher.ref()#

                                                                                                                                                                                                                                                + + +

                                                                                                                                                                                                                                                When called, requests that the Node.js event loop not exit so long as the +StatWatcher is active. Calling watcher.ref() multiple times will have +no effect.

                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                By default, all StatWatcher objects are "ref'ed", making it normally +unnecessary to call watcher.ref() unless watcher.unref() had been +called previously.

                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                watcher.unref()#

                                                                                                                                                                                                                                                + + +

                                                                                                                                                                                                                                                When called, the active StatWatcher object will not require the Node.js +event loop to remain active. If there is no other activity keeping the +event loop running, the process may exit before the StatWatcher object's +callback is invoked. Calling watcher.unref() multiple times will have +no effect.

                                                                                                                                                                                                                                                Class: fs.ReadStream#

                                                                                                                                                                                                                                              Synchronously tests a user's permissions for the file or directory specified by path. The mode argument is an optional integer that specifies the -accessibility checks to be performed. Check File Access Constants for +accessibility checks to be performed. Check File access constants for possible values of mode. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                              If any of the accessibility checks fail, an Error will be thrown. Otherwise, the method will return undefined.

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              try {
                                                                                                                                                                                                                                              -  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
                                                                                                                                                                                                                                              -  console.log('can read/write');
                                                                                                                                                                                                                                              -} catch (err) {
                                                                                                                                                                                                                                              -  console.error('no access!');
                                                                                                                                                                                                                                              -}
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              try {
                                                                                                                                                                                                                                              +  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
                                                                                                                                                                                                                                              +  console.log('can read/write');
                                                                                                                                                                                                                                              +} catch (err) {
                                                                                                                                                                                                                                              +  console.error('no access!');
                                                                                                                                                                                                                                              +}

                                                                                                                                                                                                                                              fs.appendFile(path, data[, options], callback)#

                                                                                                                                                                                                                                      • fd <integer>
                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                        callback <Function>

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                      • callback <Function> @@ -2428,8 +2460,7 @@
                                                                                                                                                                                                                                        • fd <integer>
                                                                                                                                                                                                                                        • len <integer> Default: 0
                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                        • callback <Function> @@ -2441,35 +2472,33 @@ the first len bytes will be retained in the file.

                                                                                                                                                                                                                                          For example, the following program retains only the first four bytes of the file:

                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                          -// Prints: Node.js
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                          +// Prints: Node.js
                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                          -// get the file descriptor of the file to be truncated
                                                                                                                                                                                                                                          -const fd = fs.openSync('temp.txt', 'r+');
                                                                                                                                                                                                                                          +// get the file descriptor of the file to be truncated
                                                                                                                                                                                                                                          +const fd = fs.openSync('temp.txt', 'r+');
                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                          -// Truncate the file to first four bytes
                                                                                                                                                                                                                                          -fs.ftruncate(fd, 4, (err) => {
                                                                                                                                                                                                                                          +// Truncate the file to first four bytes
                                                                                                                                                                                                                                          +fs.ftruncate(fd, 4, (err) => {
                                                                                                                                                                                                                                             assert.ifError(err);
                                                                                                                                                                                                                                          -  console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                          +  console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                          -// Prints: Node
                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          +// Prints: Node

                                                                                                                                                                                                                                          If the file previously was shorter than len bytes, it is extended, and the extended part is filled with null bytes ('\0'):

                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                          -// Prints: Node.js
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                          +// Prints: Node.js
                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                          -// get the file descriptor of the file to be truncated
                                                                                                                                                                                                                                          -const fd = fs.openSync('temp.txt', 'r+');
                                                                                                                                                                                                                                          +// get the file descriptor of the file to be truncated
                                                                                                                                                                                                                                          +const fd = fs.openSync('temp.txt', 'r+');
                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                          -// Truncate the file to 10 bytes, whereas the actual size is 7 bytes
                                                                                                                                                                                                                                          -fs.ftruncate(fd, 10, (err) => {
                                                                                                                                                                                                                                          +// Truncate the file to 10 bytes, whereas the actual size is 7 bytes
                                                                                                                                                                                                                                          +fs.ftruncate(fd, 10, (err) => {
                                                                                                                                                                                                                                             assert.ifError(err);
                                                                                                                                                                                                                                          -  console.log(fs.readFileSync('temp.txt'));
                                                                                                                                                                                                                                          +  console.log(fs.readFileSync('temp.txt'));
                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                          -// Prints: <Buffer 4e 6f 64 65 2e 6a 73 00 00 00>
                                                                                                                                                                                                                                          -// ('Node.js\0\0\0' in UTF8)
                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                          +// Prints: <Buffer 4e 6f 64 65 2e 6a 73 00 00 00> +// ('Node.js\0\0\0' in UTF8)

                                                                                                                                                                                                                                          The last three bytes are null bytes ('\0'), to compensate the over-truncation.

                                                                                                                                                                                                                                          fs.ftruncateSync(fd[, len])#

                                                                                                                                                                                                                                        • fd <integer>
                                                                                                                                                                                                                                        • atime <number> | <string> | <Date>
                                                                                                                                                                                                                                        • mtime <number> | <string> | <Date>
                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                        • callback <Function> @@ -2548,8 +2576,7 @@
                                                                                                                                                                                                                                          • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                          • mode <integer>
                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                            callback <Function>

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                          • callback <Function> @@ -2578,6 +2605,8 @@

                                                                                                                                                                                                                                            The callback parameter is no longer optional. Not passing it will throw a TypeError at runtime.

                                                                                                                                                                                                                                            v7.0.0

                                                                                                                                                                                                                                            The callback parameter is no longer optional. Not passing it will emit a deprecation warning with id DEP0013.

                                                                                                                                                                                                                                            +v0.4.7 +

                                                                                                                                                                                                                                            Documentation-only deprecation.

                                                                                                                                                                                                                                      @@ -2585,8 +2614,7 @@
                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                    • uid <integer>
                                                                                                                                                                                                                                    • gid <integer>
                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                      callback <Function>

                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                    • callback <Function> @@ -2601,6 +2629,8 @@ VersionChanges v10.6.0

                                                                                                                                                                                                                                      This API is no longer deprecated.

                                                                                                                                                                                                                                      +v0.4.7 +

                                                                                                                                                                                                                                      Documentation-only deprecation.

                                                                                                                                                                                                                                      @@ -2610,6 +2640,38 @@
                                                                                                                                                                                                                                    • gid <integer>

                                                                                                                                                                                                                                    Synchronous lchown(2). Returns undefined.

                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    fs.lutimes(path, atime, mtime, callback)#

                                                                                                                                                                                                                                    + + +

                                                                                                                                                                                                                                    Changes the access and modification times of a file in the same way as +fs.utimes(), with the difference that if the path refers to a symbolic +link, then the link is not dereferenced: instead, the timestamps of the +symbolic link itself are changed.

                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    No arguments other than a possible exception are given to the completion +callback.

                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    fs.lutimesSync(path, atime, mtime)#

                                                                                                                                                                                                                                    + + +

                                                                                                                                                                                                                                    Change the file system timestamps of the symbolic link referenced by path. +Returns undefined, or throws an exception when parameters are incorrect or +the operation fails. This is the synchronous version of fs.lutimes().

                                                                                                                                                                                                                                    fs.link(existingPath, newPath, callback)#

                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                      options <Object>

                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                    • options <Object>
                                                                                                                                                                                                                                      • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                      callback <Function>

                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                    • callback <Function>
                                                                                                                                                                                                                                      • err <Error>
                                                                                                                                                                                                                                      • stats <fs.Stats>
                                                                                                                                                                                                                                      • @@ -2710,8 +2769,7 @@
                                                                                                                                                                                                                                        • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                          options <Object>

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                        • options <Object>
                                                                                                                                                                                                                                          • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                          • @@ -2742,15 +2800,13 @@
                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                              options <Object> | <integer>

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                            • options <Object> | <integer>
                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                            • callback <Function> @@ -2764,17 +2820,15 @@ property indicating whether parent directories should be created. Calling fs.mkdir() when path is a directory that exists results in an error only when recursive is false.

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              // Creates /tmp/a/apple, regardless of whether `/tmp` and /tmp/a exist.
                                                                                                                                                                                                                                              -fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
                                                                                                                                                                                                                                              -  if (err) throw err;
                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              // Creates /tmp/a/apple, regardless of whether `/tmp` and /tmp/a exist.
                                                                                                                                                                                                                                              +fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
                                                                                                                                                                                                                                              +  if (err) throw err;
                                                                                                                                                                                                                                              +});

                                                                                                                                                                                                                                              On Windows, using fs.mkdir() on the root directory even with recursion will result in an error:

                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              fs.mkdir('/', { recursive: true }, (err) => {
                                                                                                                                                                                                                                              -  // => [Error: EPERM: operation not permitted, mkdir 'C:\']
                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              fs.mkdir('/', { recursive: true }, (err) => {
                                                                                                                                                                                                                                              +  // => [Error: EPERM: operation not permitted, mkdir 'C:\']
                                                                                                                                                                                                                                              +});

                                                                                                                                                                                                                                              See also: mkdir(2).

                                                                                                                                                                                                                                              fs.mkdirSync(path[, options])#

                                                                                                                                                                                                                                              • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                options <Object> | <integer>

                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                              • options <Object> | <integer>
                                                                                                                                                                                                                                                • recursive <boolean> Default: false
                                                                                                                                                                                                                                                • mode <string> | <integer> Not supported on Windows. Default: 0o777.
                                                                                                                                                                                                                                                • @@ -2825,14 +2878,12 @@
                                                                                                                                                                                                                                                  • prefix <string>
                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                    options <string> | <Object>

                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                  • options <string> | <Object>
                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                    callback <Function>

                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                  • callback <Function>
                                                                                                                                                                                                                                                    • err <Error>
                                                                                                                                                                                                                                                    • directory <string>
                                                                                                                                                                                                                                                    • @@ -2849,47 +2900,44 @@ parameter.

                                                                                                                                                                                                                                                      The optional options argument can be a string specifying an encoding, or an object with an encoding property specifying the character encoding to use.

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      fs.mkdtemp(path.join(os.tmpdir(), 'foo-'), (err, directory) => {
                                                                                                                                                                                                                                                      -  if (err) throw err;
                                                                                                                                                                                                                                                      -  console.log(directory);
                                                                                                                                                                                                                                                      -  // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2
                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      fs.mkdtemp(path.join(os.tmpdir(), 'foo-'), (err, directory) => {
                                                                                                                                                                                                                                                      +  if (err) throw err;
                                                                                                                                                                                                                                                      +  console.log(directory);
                                                                                                                                                                                                                                                      +  // Prints: /tmp/foo-itXde2 or C:\Users\...\AppData\Local\Temp\foo-itXde2
                                                                                                                                                                                                                                                      +});

                                                                                                                                                                                                                                                      The fs.mkdtemp() method will append the six randomly selected characters directly to the prefix string. For instance, given a directory /tmp, if the intention is to create a temporary directory within /tmp, the prefix must end with a trailing platform-specific path separator (require('path').sep).

                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      // The parent directory for the new temporary directory
                                                                                                                                                                                                                                                      -const tmpDir = os.tmpdir();
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      // The parent directory for the new temporary directory
                                                                                                                                                                                                                                                      +const tmpDir = os.tmpdir();
                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                      -// This method is *INCORRECT*:
                                                                                                                                                                                                                                                      -fs.mkdtemp(tmpDir, (err, directory) => {
                                                                                                                                                                                                                                                      -  if (err) throw err;
                                                                                                                                                                                                                                                      -  console.log(directory);
                                                                                                                                                                                                                                                      -  // Will print something similar to `/tmpabc123`.
                                                                                                                                                                                                                                                      -  // A new temporary directory is created at the file system root
                                                                                                                                                                                                                                                      -  // rather than *within* the /tmp directory.
                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      -// This method is *CORRECT*:
                                                                                                                                                                                                                                                      -const { sep } = require('path');
                                                                                                                                                                                                                                                      -fs.mkdtemp(`${tmpDir}${sep}`, (err, directory) => {
                                                                                                                                                                                                                                                      -  if (err) throw err;
                                                                                                                                                                                                                                                      -  console.log(directory);
                                                                                                                                                                                                                                                      -  // Will print something similar to `/tmp/abc123`.
                                                                                                                                                                                                                                                      -  // A new temporary directory is created within
                                                                                                                                                                                                                                                      -  // the /tmp directory.
                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                      +// This method is *INCORRECT*: +fs.mkdtemp(tmpDir, (err, directory) => { + if (err) throw err; + console.log(directory); + // Will print something similar to `/tmpabc123`. + // A new temporary directory is created at the file system root + // rather than *within* the /tmp directory. +}); + +// This method is *CORRECT*: +const { sep } = require('path'); +fs.mkdtemp(`${tmpDir}${sep}`, (err, directory) => { + if (err) throw err; + console.log(directory); + // Will print something similar to `/tmp/abc123`. + // A new temporary directory is created within + // the /tmp directory. +});

                                                                                                                                                                                                                                                      fs.mkdtempSync(prefix[, options])#

                                                                                                                                                                                                                                                      • prefix <string>
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        options <string> | <Object>

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      • options <string> | <Object> @@ -2922,8 +2970,7 @@
                                                                                                                                                                                                                                                      • flags <string> | <number> See support of file system flags. Default: 'r'.
                                                                                                                                                                                                                                                      • mode <string> | <integer> Default: 0o666 (readable and writable)
                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                        callback <Function>

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      • callback <Function>
                                                                                                                                                                                                                                                        • err <Error>
                                                                                                                                                                                                                                                        • fd <integer>
                                                                                                                                                                                                                                                        • @@ -2955,8 +3002,7 @@
                                                                                                                                                                                                                                                          • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                            options <Object>

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                          • options <Object>
                                                                                                                                                                                                                                                            • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                            • bufferSize <number> Number of directory entries that are buffered @@ -2964,8 +3010,7 @@ performance but higher memory usage. Default: 32
                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                            callback <Function>

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                          • callback <Function>
                                                                                                                                                                                                                                                            • err <Error>
                                                                                                                                                                                                                                                            • dir <fs.Dir>
                                                                                                                                                                                                                                                            • @@ -2991,8 +3036,7 @@
                                                                                                                                                                                                                                                              • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                options <Object>

                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                              • options <Object>
                                                                                                                                                                                                                                                                • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                • bufferSize <number> Number of directory entries that are buffered @@ -3055,8 +3099,7 @@
                                                                                                                                                                                                                                                                • offset <integer>
                                                                                                                                                                                                                                                                • length <integer>
                                                                                                                                                                                                                                                                • position <integer>
                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                  callback <Function>

                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                • callback <Function>
                                                                                                                                                                                                                                                                  • err <Error>
                                                                                                                                                                                                                                                                  • bytesRead <integer>
                                                                                                                                                                                                                                                                  • @@ -3089,8 +3132,7 @@
                                                                                                                                                                                                                                                                    • fd <integer>
                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                      options <Object>

                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                    • options <Object>
                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                      callback <Function>

                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                    • callback <Function>
                                                                                                                                                                                                                                                                      • err <Error>
                                                                                                                                                                                                                                                                      • bytesRead <integer>
                                                                                                                                                                                                                                                                      • @@ -3131,15 +3172,13 @@
                                                                                                                                                                                                                                                                        • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                          options <string> | <Object>

                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                        • options <string> | <Object>
                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                        • callback <Function>
                                                                                                                                                                                                                                                                          • err <Error>
                                                                                                                                                                                                                                                                          • files <string[]> | <Buffer[]> | <fs.Dirent[]>
                                                                                                                                                                                                                                                                          • @@ -3171,8 +3210,7 @@
                                                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                              options <string> | <Object>

                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                            • options <string> | <Object>
                                                                                                                                                                                                                                                                              • encoding <string> Default: 'utf8'
                                                                                                                                                                                                                                                                              • withFileTypes <boolean> Default: false
                                                                                                                                                                                                                                                                              • @@ -3209,15 +3247,13 @@
                                                                                                                                                                                                                                                                                • path <string> | <Buffer> | <URL> | <integer> filename or file descriptor
                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                  options <Object> | <string>

                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                • options <Object> | <string>
                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                  callback <Function>

                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                • callback <Function>

                                                                                                                                                                                                                                                                                  Asynchronously reads the entire contents of a file.

                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                  fs.readFile('/etc/passwd', (err, data) => {
                                                                                                                                                                                                                                                                                  -  if (err) throw err;
                                                                                                                                                                                                                                                                                  -  console.log(data);
                                                                                                                                                                                                                                                                                  -});
                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                  fs.readFile('/etc/passwd', (err, data) => {
                                                                                                                                                                                                                                                                                  +  if (err) throw err;
                                                                                                                                                                                                                                                                                  +  console.log(data);
                                                                                                                                                                                                                                                                                  +});

                                                                                                                                                                                                                                                                                  The callback is passed two arguments (err, data), where data is the contents of the file.

                                                                                                                                                                                                                                                                                  If no encoding is specified, then the raw buffer is returned.

                                                                                                                                                                                                                                                                                  If options is a string, then it specifies the encoding:

                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                  fs.readFile('/etc/passwd', 'utf8', callback);
                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                  fs.readFile('/etc/passwd', 'utf8', callback);

                                                                                                                                                                                                                                                                                  When the path is a directory, the behavior of fs.readFile() and fs.readFileSync() is platform-specific. On macOS, Linux, and Windows, an error will be returned. On FreeBSD, a representation of the directory's contents will be returned.

                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                  // macOS, Linux, and Windows
                                                                                                                                                                                                                                                                                  -fs.readFile('<directory>', (err, data) => {
                                                                                                                                                                                                                                                                                  -  // => [Error: EISDIR: illegal operation on a directory, read <directory>]
                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                  // macOS, Linux, and Windows
                                                                                                                                                                                                                                                                                  +fs.readFile('<directory>', (err, data) => {
                                                                                                                                                                                                                                                                                  +  // => [Error: EISDIR: illegal operation on a directory, read <directory>]
                                                                                                                                                                                                                                                                                   });
                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                  -//  FreeBSD
                                                                                                                                                                                                                                                                                  -fs.readFile('<directory>', (err, data) => {
                                                                                                                                                                                                                                                                                  -  // => null, <data>
                                                                                                                                                                                                                                                                                  -});
                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                  +// FreeBSD +fs.readFile('<directory>', (err, data) => { + // => null, <data> +});

                                                                                                                                                                                                                                                                                  The fs.readFile() function buffers the entire file. To minimize memory costs, when possible prefer streaming via fs.createReadStream().

                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                  File Descriptors#

                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                  File descriptors#

                                                                                                                                                                                                                                                                                  1. Any specified file descriptor has to support reading.
                                                                                                                                                                                                                                                                                  2. If a file descriptor is specified as the path, it will not be closed @@ -3278,8 +3311,7 @@
                                                                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL> | <integer> filename or file descriptor
                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                      options <Object> | <string>

                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                    • options <Object> | <string>
                                                                                                                                                                                                                                                                                      • encoding <string> | <null> Default: null
                                                                                                                                                                                                                                                                                      • flag <string> See support of file system flags. Default: 'r'.
                                                                                                                                                                                                                                                                                      • @@ -3294,13 +3326,12 @@ string. Otherwise it returns a buffer.

                                                                                                                                                                                                                                                                                        Similar to fs.readFile(), when the path is a directory, the behavior of fs.readFileSync() is platform-specific.

                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                        // macOS, Linux, and Windows
                                                                                                                                                                                                                                                                                        -fs.readFileSync('<directory>');
                                                                                                                                                                                                                                                                                        -// => [Error: EISDIR: illegal operation on a directory, read <directory>]
                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                        -//  FreeBSD
                                                                                                                                                                                                                                                                                        -fs.readFileSync('<directory>'); // => <data>
                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                        // macOS, Linux, and Windows
                                                                                                                                                                                                                                                                                        +fs.readFileSync('<directory>');
                                                                                                                                                                                                                                                                                        +// => [Error: EISDIR: illegal operation on a directory, read <directory>]
                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                        +//  FreeBSD
                                                                                                                                                                                                                                                                                        +fs.readFileSync('<directory>'); // => <data>

                                                                                                                                                                                                                                                                                        fs.readlink(path[, options], callback)#

                                                                                                                                                                                                                                                                                        • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                          options <string> | <Object>

                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                        • options <string> | <Object>
                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                        • callback <Function>
                                                                                                                                                                                                                                                                                          • err <Error>
                                                                                                                                                                                                                                                                                          • linkString <string> | <Buffer>
                                                                                                                                                                                                                                                                                          • @@ -3352,8 +3381,7 @@
                                                                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                              options <string> | <Object>

                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                            • options <string> | <Object> @@ -3405,8 +3433,7 @@
                                                                                                                                                                                                                                                                                              • fd <integer>
                                                                                                                                                                                                                                                                                              • buffer <Buffer> | <TypedArray> | <DataView>
                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                options <Object>

                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                              • options <Object>
                                                                                                                                                                                                                                                                                                • offset <integer> Default: 0
                                                                                                                                                                                                                                                                                                • length <integer> Default: buffer.length
                                                                                                                                                                                                                                                                                                • @@ -3428,8 +3455,7 @@
                                                                                                                                                                                                                                                                                                • fd <integer>
                                                                                                                                                                                                                                                                                                • buffers <ArrayBufferView[]>
                                                                                                                                                                                                                                                                                                • position <integer>
                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                  callback <Function>

                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                • callback <Function>
                                                                                                                                                                                                                                                                                                  • err <Error>
                                                                                                                                                                                                                                                                                                  • bytesRead <integer>
                                                                                                                                                                                                                                                                                                  • @@ -3444,6 +3470,8 @@ from the current position.

                                                                                                                                                                                                                                                                                                    The callback will be given three arguments: err, bytesRead, and buffers. bytesRead is how many bytes were read from the file.

                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                    If this method is invoked as its util.promisify()ed version, it returns +a Promise for an Object with bytesRead and buffers properties.

                                                                                                                                                                                                                                                                                                    fs.readvSync(fd, buffers[, position])#

                                                                                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                      options <string> | <Object>

                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                    • options <string> | <Object>
                                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                      callback <Function>

                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                    • callback <Function>
                                                                                                                                                                                                                                                                                                      • err <Error>
                                                                                                                                                                                                                                                                                                      • resolvedPath <string> | <Buffer>
                                                                                                                                                                                                                                                                                                      • @@ -3523,14 +3549,12 @@
                                                                                                                                                                                                                                                                                                        • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                          options <string> | <Object>

                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                        • options <string> | <Object>
                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                          callback <Function>

                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                        • callback <Function>
                                                                                                                                                                                                                                                                                                          • err <Error>
                                                                                                                                                                                                                                                                                                          • resolvedPath <string> | <Buffer>
                                                                                                                                                                                                                                                                                                          • @@ -3567,8 +3591,7 @@
                                                                                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                              options <string> | <Object>

                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                            • options <string> | <Object> @@ -3584,8 +3607,7 @@
                                                                                                                                                                                                                                                                                                              • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                options <string> | <Object>

                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                              • options <string> | <Object> @@ -3620,8 +3642,7 @@
                                                                                                                                                                                                                                                                                                                • oldPath <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                • newPath <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                  callback <Function>

                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                • callback <Function> @@ -3633,11 +3654,10 @@ be raised instead. No arguments other than a possible exception are given to the completion callback.

                                                                                                                                                                                                                                                                                                                  See also: rename(2).

                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                  fs.rename('oldFile.txt', 'newFile.txt', (err) => {
                                                                                                                                                                                                                                                                                                                  -  if (err) throw err;
                                                                                                                                                                                                                                                                                                                  -  console.log('Rename complete!');
                                                                                                                                                                                                                                                                                                                  -});
                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                  fs.rename('oldFile.txt', 'newFile.txt', (err) => {
                                                                                                                                                                                                                                                                                                                  +  if (err) throw err;
                                                                                                                                                                                                                                                                                                                  +  console.log('Rename complete!');
                                                                                                                                                                                                                                                                                                                  +});

                                                                                                                                                                                                                                                                                                                  fs.renameSync(oldPath, newPath)#

                                                                                                                                                                                                                                                                                                                  • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                                                                    options <Object>

                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                  • options <Object>
                                                                                                                                                                                                                                                                                                                    • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                                                                    callback <Function>

                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                  • callback <Function>
                                                                                                                                                                                                                                                                                                                    • err <Error>
                                                                                                                                                                                                                                                                                                                    • stats <fs.Stats>
                                                                                                                                                                                                                                                                                                                    • @@ -3789,22 +3804,20 @@

                                                                                                                                                                                                                                                                                                                      To check if a file exists without manipulating it afterwards, fs.access() is recommended.

                                                                                                                                                                                                                                                                                                                      For example, given the following directory structure:

                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                      - txtDir
                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                      - txtDir
                                                                                                                                                                                                                                                                                                                       -- file.txt
                                                                                                                                                                                                                                                                                                                      -- app.js
                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                      +- app.js

                                                                                                                                                                                                                                                                                                                      The next program will check for the stats of the given paths:

                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                      const fs = require('fs');
                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                      const fs = require('fs');
                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                      -const pathsToCheck = ['./txtDir', './txtDir/file.txt'];
                                                                                                                                                                                                                                                                                                                      +const pathsToCheck = ['./txtDir', './txtDir/file.txt'];
                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                      -for (let i = 0; i < pathsToCheck.length; i++) {
                                                                                                                                                                                                                                                                                                                      -  fs.stat(pathsToCheck[i], function(err, stats) {
                                                                                                                                                                                                                                                                                                                      -    console.log(stats.isDirectory());
                                                                                                                                                                                                                                                                                                                      -    console.log(stats);
                                                                                                                                                                                                                                                                                                                      +for (let i = 0; i < pathsToCheck.length; i++) {
                                                                                                                                                                                                                                                                                                                      +  fs.stat(pathsToCheck[i], function(err, stats) {
                                                                                                                                                                                                                                                                                                                      +    console.log(stats.isDirectory());
                                                                                                                                                                                                                                                                                                                      +    console.log(stats);
                                                                                                                                                                                                                                                                                                                         });
                                                                                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                      +}

                                                                                                                                                                                                                                                                                                                      The resulting output will resemble:

                                                                                                                                                                                                                                                                                                                      true
                                                                                                                                                                                                                                                                                                                       Stats {
                                                                                                                                                                                                                                                                                                                      @@ -3847,8 +3860,7 @@
                                                                                                                                                                                                                                                                                                                         mtime: 2019-06-22T03:36:54.584Z,
                                                                                                                                                                                                                                                                                                                         ctime: 2019-06-22T03:36:54.584Z,
                                                                                                                                                                                                                                                                                                                         birthtime: 2019-06-22T03:26:47.711Z
                                                                                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                      +}

                                                                                                                                                                                                                                                                                                                      fs.statSync(path[, options])#

                                                                                                                                                                                                                                                                                                                      • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                        options <Object>

                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                      • options <Object>

                                                                                                                                                                                                                                                                                                                        Asynchronous symlink(2) which creates the link called path pointing to -target. No arguments other than a possible exception are given to the +target. No arguments other than a possible exception are given to the completion callback.

                                                                                                                                                                                                                                                                                                                        The type argument is only available on Windows and ignored on other platforms. It can be set to 'dir', 'file', or 'junction'. If the type argument is not set, Node.js will autodetect target type and use 'file' or 'dir'. If the target does not exist, 'file' will be used. Windows junction points -require the destination path to be absolute. When using 'junction', the +require the destination path to be absolute. When using 'junction', the target argument will automatically be normalized to absolute path.

                                                                                                                                                                                                                                                                                                                        Relative targets are relative to the link’s parent directory.

                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        fs.symlink('./mew', './example/mewtwo', callback);
                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                        fs.symlink('./mew', './example/mewtwo', callback);

                                                                                                                                                                                                                                                                                                                        The above example creates a symbolic link mewtwo in the example which points to mew in the same directory:

                                                                                                                                                                                                                                                                                                                        $ tree example/
                                                                                                                                                                                                                                                                                                                         example/
                                                                                                                                                                                                                                                                                                                         ├── mew
                                                                                                                                                                                                                                                                                                                        -└── mewtwo -> ./mew
                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        +└── mewtwo -> ./mew

                                                                                                                                                                                                                                                                                                                        fs.symlinkSync(target, path[, type])#

                                                                                                                                                                                                                                                                                                                        Asynchronously removes a file or symbolic link. No arguments other than a possible exception are given to the completion callback.

                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        // Assuming that 'path/file.txt' is a regular file.
                                                                                                                                                                                                                                                                                                                        -fs.unlink('path/file.txt', (err) => {
                                                                                                                                                                                                                                                                                                                        -  if (err) throw err;
                                                                                                                                                                                                                                                                                                                        -  console.log('path/file.txt was deleted');
                                                                                                                                                                                                                                                                                                                        -});
                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                        // Assuming that 'path/file.txt' is a regular file.
                                                                                                                                                                                                                                                                                                                        +fs.unlink('path/file.txt', (err) => {
                                                                                                                                                                                                                                                                                                                        +  if (err) throw err;
                                                                                                                                                                                                                                                                                                                        +  console.log('path/file.txt was deleted');
                                                                                                                                                                                                                                                                                                                        +});

                                                                                                                                                                                                                                                                                                                        fs.unlink() will not work on a directory, empty or otherwise. To remove a directory, use fs.rmdir().

                                                                                                                                                                                                                                                                                                                        See also: unlink(2).

                                                                                                                                                                                                                                                                                                                        @@ -4075,8 +4080,7 @@
                                                                                                                                                                                                                                                                                                                      • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                      • atime <number> | <string> | <Date>
                                                                                                                                                                                                                                                                                                                      • mtime <number> | <string> | <Date>
                                                                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                        callback <Function>

                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                      • callback <Function> @@ -4130,8 +4134,7 @@
                                                                                                                                                                                                                                                                                                                        • filename <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                          options <string> | <Object>

                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                        • options <string> | <Object>
                                                                                                                                                                                                                                                                                                                          • persistent <boolean> Indicates whether the process should continue to run as long as files are being watched. Default: true.
                                                                                                                                                                                                                                                                                                                          • @@ -4143,8 +4146,7 @@ filename passed to the listener. Default: 'utf8'.
                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                          listener <Function> | <undefined> Default: undefined

                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                        • listener <Function> | <undefined> Default: undefined
                                                                                                                                                                                                                                                                                                                          • eventType <string>
                                                                                                                                                                                                                                                                                                                          • filename <string> | <Buffer>
                                                                                                                                                                                                                                                                                                                          • @@ -4176,13 +4178,14 @@

                                                                                                                                                                                                                                                                                                                            This feature depends on the underlying operating system providing a way to be notified of filesystem changes.

                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                            • On Linux systems, this uses inotify(7).
                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                            • On Linux systems, this uses inotify(7).
                                                                                                                                                                                                                                                                                                                            • On BSD systems, this uses kqueue(2).
                                                                                                                                                                                                                                                                                                                            • On macOS, this uses kqueue(2) for files and FSEvents for directories.
                                                                                                                                                                                                                                                                                                                            • On SunOS systems (including Solaris and SmartOS), this uses event ports.
                                                                                                                                                                                                                                                                                                                            • On Windows systems, this feature depends on ReadDirectoryChangesW.
                                                                                                                                                                                                                                                                                                                            • On Aix systems, this feature depends on AHAFS, which must be enabled.
                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                            • On IBM i systems, this feature is not supported.

                                                                                                                                                                                                                                                                                                                            If the underlying functionality is not available for some reason, then fs.watch() will not be able to function and may thrown an exception. @@ -4201,21 +4204,20 @@

                                                                                                                                                                                                                                                                                                                            AIX files retain the same inode for the lifetime of a file. Saving and closing a watched file on AIX will result in two notifications (one for adding new content, and one for truncation).

                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                            Filename Argument#

                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                            Filename argument#

                                                                                                                                                                                                                                                                                                                            Providing filename argument in the callback is only supported on Linux, macOS, Windows, and AIX. Even on supported platforms, filename is not always guaranteed to be provided. Therefore, don't assume that filename argument is always provided in the callback, and have some fallback logic if it is null.

                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                            fs.watch('somedir', (eventType, filename) => {
                                                                                                                                                                                                                                                                                                                            -  console.log(`event type is: ${eventType}`);
                                                                                                                                                                                                                                                                                                                            -  if (filename) {
                                                                                                                                                                                                                                                                                                                            -    console.log(`filename provided: ${filename}`);
                                                                                                                                                                                                                                                                                                                            -  } else {
                                                                                                                                                                                                                                                                                                                            -    console.log('filename not provided');
                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                            fs.watch('somedir', (eventType, filename) => {
                                                                                                                                                                                                                                                                                                                            +  console.log(`event type is: ${eventType}`);
                                                                                                                                                                                                                                                                                                                            +  if (filename) {
                                                                                                                                                                                                                                                                                                                            +    console.log(`filename provided: ${filename}`);
                                                                                                                                                                                                                                                                                                                            +  } else {
                                                                                                                                                                                                                                                                                                                            +    console.log('filename not provided');
                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                                                                                                            fs.watchFile(filename[, options], listener)#

                                                                                                                                                                                                                                                                                                                            Watch for changes on filename. The callback listener will be called each time the file is accessed.

                                                                                                                                                                                                                                                                                                                            @@ -4257,11 +4258,10 @@ target should be polled in milliseconds.

                                                                                                                                                                                                                                                                                                                            The listener gets two arguments the current stat object and the previous stat object:

                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                            fs.watchFile('message.text', (curr, prev) => {
                                                                                                                                                                                                                                                                                                                            -  console.log(`the current mtime is: ${curr.mtime}`);
                                                                                                                                                                                                                                                                                                                            -  console.log(`the previous mtime was: ${prev.mtime}`);
                                                                                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                            fs.watchFile('message.text', (curr, prev) => {
                                                                                                                                                                                                                                                                                                                            +  console.log(`the current mtime is: ${curr.mtime}`);
                                                                                                                                                                                                                                                                                                                            +  console.log(`the previous mtime was: ${prev.mtime}`);
                                                                                                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                                                                                                            These stat objects are instances of fs.Stat. If the bigint option is true, the numeric values in these objects are specified as BigInts.

                                                                                                                                                                                                                                                                                                                            To be notified when the file was modified, not just accessed, it is necessary @@ -4275,9 +4275,9 @@ fs.unwatchFile. fs.watch should be used instead of fs.watchFile and fs.unwatchFile when possible.

                                                                                                                                                                                                                                                                                                                            When a file being watched by fs.watchFile() disappears and reappears, -then the previousStat reported in the second callback event (the file's -reappearance) will be the same as the previousStat of the first callback -event (its disappearance).

                                                                                                                                                                                                                                                                                                                            +then the contents of previous in the second callback event (the file's +reappearance) will be the same as the contents of previous in the first +callback event (its disappearance).

                                                                                                                                                                                                                                                                                                                            This happens when:

                                                                                                                                                                                                                                                                                                                            • the file is deleted, followed by a restore
                                                                                                                                                                                                                                                                                                                            • @@ -4309,8 +4309,7 @@
                                                                                                                                                                                                                                                                                                                            • offset <integer>
                                                                                                                                                                                                                                                                                                                            • length <integer>
                                                                                                                                                                                                                                                                                                                            • position <integer>
                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                              callback <Function>

                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                            • callback <Function>
                                                                                                                                                                                                                                                                                                                              • err <Error>
                                                                                                                                                                                                                                                                                                                              • bytesWritten <integer>
                                                                                                                                                                                                                                                                                                                              • @@ -4355,8 +4354,7 @@
                                                                                                                                                                                                                                                                                                                              • string <string>
                                                                                                                                                                                                                                                                                                                              • position <integer>
                                                                                                                                                                                                                                                                                                                              • encoding <string> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                callback <Function>

                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                              • callback <Function>
                                                                                                                                                                                                                                                                                                                                • err <Error>
                                                                                                                                                                                                                                                                                                                                • written <integer>
                                                                                                                                                                                                                                                                                                                                • @@ -4373,7 +4371,7 @@

                                                                                                                                                                                                                                                                                                                                  The callback will receive the arguments (err, written, string) where written specifies how many bytes the passed string required to be written. Bytes written is not necessarily the same as string characters written. See -Buffer.byteLength.

                                                                                                                                                                                                                                                                                                                                  +Buffer.byteLength.

                                                                                                                                                                                                                                                                                                                                  It is unsafe to use fs.write() multiple times on the same file without waiting for the callback. For this scenario, fs.createWriteStream() is recommended.

                                                                                                                                                                                                                                                                                                                                  @@ -4409,16 +4407,14 @@
                                                                                                                                                                                                                                                                                                                                  • file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
                                                                                                                                                                                                                                                                                                                                  • data <string> | <Buffer> | <TypedArray> | <DataView>
                                                                                                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                                                                                    options <Object> | <string>

                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                  • options <Object> | <string>
                                                                                                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                                                                                    callback <Function>

                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                  • callback <Function> @@ -4430,23 +4426,20 @@ fs.write() directly (which is recommended). See the notes below on using a file descriptor.

                                                                                                                                                                                                                                                                                                                                    The encoding option is ignored if data is a buffer.

                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                    const data = new Uint8Array(Buffer.from('Hello Node.js'));
                                                                                                                                                                                                                                                                                                                                    -fs.writeFile('message.txt', data, (err) => {
                                                                                                                                                                                                                                                                                                                                    -  if (err) throw err;
                                                                                                                                                                                                                                                                                                                                    -  console.log('The file has been saved!');
                                                                                                                                                                                                                                                                                                                                    -});
                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                    const data = new Uint8Array(Buffer.from('Hello Node.js'));
                                                                                                                                                                                                                                                                                                                                    +fs.writeFile('message.txt', data, (err) => {
                                                                                                                                                                                                                                                                                                                                    +  if (err) throw err;
                                                                                                                                                                                                                                                                                                                                    +  console.log('The file has been saved!');
                                                                                                                                                                                                                                                                                                                                    +});

                                                                                                                                                                                                                                                                                                                                    If options is a string, then it specifies the encoding:

                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                    fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);
                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                    fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);

                                                                                                                                                                                                                                                                                                                                    It is unsafe to use fs.writeFile() multiple times on the same file without waiting for the callback. For this scenario, fs.createWriteStream() is recommended.

                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                    Using fs.writeFile() with File Descriptors#

                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                    Using fs.writeFile() with file descriptors#

                                                                                                                                                                                                                                                                                                                                    When file is a file descriptor, the behavior is almost identical to directly calling fs.write() like:

                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                    fs.write(fd, Buffer.from(data, options.encoding), callback);
                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                    fs.write(fd, Buffer.from(data, options.encoding), callback);

                                                                                                                                                                                                                                                                                                                                    The difference from directly calling fs.write() is that under some unusual conditions, fs.write() may write only part of the buffer and will need to be retried to write the remaining data, whereas fs.writeFile() will retry until @@ -4458,7 +4451,7 @@

                                                                                                                                                                                                                                                                                                                                    For example, if fs.writeFile() is called twice in a row, first to write the string 'Hello', then to write the string ', World', the file would contain 'Hello, World', and might contain some of the file's original data (depending -on the size of the original file, and the position of the file descriptor). If +on the size of the original file, and the position of the file descriptor). If a file name had been used instead of a descriptor, the file would be guaranteed to contain only ', World'.

                                                                                                                                                                                                                                                                                                                                    fs.writeFileSync(file, data[, options])#

                                                                                                                                                                                                                                                                                                                                    @@ -4480,8 +4473,7 @@
                                                                                                                                                                                                                                                                                                                                    • file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
                                                                                                                                                                                                                                                                                                                                    • data <string> | <Buffer> | <TypedArray> | <DataView>
                                                                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                      options <Object> | <string>

                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                    • options <Object> | <string>
                                                                                                                                                                                                                                                                                                                                      • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                                      • mode <integer> Default: 0o666
                                                                                                                                                                                                                                                                                                                                      • @@ -4547,8 +4539,7 @@
                                                                                                                                                                                                                                                                                                                                      • fd <integer>
                                                                                                                                                                                                                                                                                                                                      • buffers <ArrayBufferView[]>
                                                                                                                                                                                                                                                                                                                                      • position <integer>
                                                                                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                                        callback <Function>

                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                      • callback <Function>
                                                                                                                                                                                                                                                                                                                                        • err <Error>
                                                                                                                                                                                                                                                                                                                                        • bytesWritten <integer>
                                                                                                                                                                                                                                                                                                                                        • @@ -4586,7 +4577,7 @@

                                                                                                                                                                                                                                                                                                                                          The fs.promises API provides an alternative set of asynchronous file system methods that return Promise objects rather than using callbacks. The API is accessible via require('fs').promises.

                                                                                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                                                                                          class: FileHandle#

                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                          Class: FileHandle#

                                                                                                                                                                                                                                                                                                                                          @@ -4612,8 +4603,7 @@

                                                                                                                                                                                                                                                                                                                                          Closes the file descriptor.

                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                          const fsPromises = require('fs').promises;
                                                                                                                                                                                                                                                                                                                                          -async function openAndClose() {
                                                                                                                                                                                                                                                                                                                                          -  let filehandle;
                                                                                                                                                                                                                                                                                                                                          -  try {
                                                                                                                                                                                                                                                                                                                                          -    filehandle = await fsPromises.open('thefile.txt', 'r');
                                                                                                                                                                                                                                                                                                                                          -  } finally {
                                                                                                                                                                                                                                                                                                                                          -    if (filehandle !== undefined)
                                                                                                                                                                                                                                                                                                                                          -      await filehandle.close();
                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                          const fsPromises = require('fs').promises;
                                                                                                                                                                                                                                                                                                                                          +async function openAndClose() {
                                                                                                                                                                                                                                                                                                                                          +  let filehandle;
                                                                                                                                                                                                                                                                                                                                          +  try {
                                                                                                                                                                                                                                                                                                                                          +    filehandle = await fsPromises.open('thefile.txt', 'r');
                                                                                                                                                                                                                                                                                                                                          +  } finally {
                                                                                                                                                                                                                                                                                                                                          +    if (filehandle !== undefined)
                                                                                                                                                                                                                                                                                                                                          +      await filehandle.close();
                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                          -}
                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                          +}

                                                                                                                                                                                                                                                                                                                                          filehandle.datasync()#

                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                            options <Object>

                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                          • options <Object>
                                                                                                                                                                                                                                                                                                                                            • buffer <Buffer> | <Uint8Array> Default: Buffer.alloc(16384)
                                                                                                                                                                                                                                                                                                                                            • offset <integer> Default: 0
                                                                                                                                                                                                                                                                                                                                            • @@ -4725,8 +4713,7 @@ Added in: v10.0.0
                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                options <Object> | <string>

                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                              • options <Object> | <string> @@ -4772,8 +4759,7 @@
                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                  options <Object>

                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                • options <Object>
                                                                                                                                                                                                                                                                                                                                                  • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                                                                                                                                  • @@ -4804,52 +4790,50 @@ retained in the file.

                                                                                                                                                                                                                                                                                                                                                    For example, the following program retains only the first four bytes of the file:

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                    -const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                    +const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                                                                                                                                    -// Prints: Node.js
                                                                                                                                                                                                                                                                                                                                                    +console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                                                                                                                                    +// Prints: Node.js
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -async function doTruncate() {
                                                                                                                                                                                                                                                                                                                                                    -  let filehandle = null;
                                                                                                                                                                                                                                                                                                                                                    -  try {
                                                                                                                                                                                                                                                                                                                                                    -    filehandle = await fsPromises.open('temp.txt', 'r+');
                                                                                                                                                                                                                                                                                                                                                    -    await filehandle.truncate(4);
                                                                                                                                                                                                                                                                                                                                                    -  } finally {
                                                                                                                                                                                                                                                                                                                                                    -    if (filehandle) {
                                                                                                                                                                                                                                                                                                                                                    -      // Close the file if it is opened.
                                                                                                                                                                                                                                                                                                                                                    -      await filehandle.close();
                                                                                                                                                                                                                                                                                                                                                    +async function doTruncate() {
                                                                                                                                                                                                                                                                                                                                                    +  let filehandle = null;
                                                                                                                                                                                                                                                                                                                                                    +  try {
                                                                                                                                                                                                                                                                                                                                                    +    filehandle = await fsPromises.open('temp.txt', 'r+');
                                                                                                                                                                                                                                                                                                                                                    +    await filehandle.truncate(4);
                                                                                                                                                                                                                                                                                                                                                    +  } finally {
                                                                                                                                                                                                                                                                                                                                                    +    if (filehandle) {
                                                                                                                                                                                                                                                                                                                                                    +      // Close the file if it is opened.
                                                                                                                                                                                                                                                                                                                                                    +      await filehandle.close();
                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                                                                    -  console.log(fs.readFileSync('temp.txt', 'utf8'));  // Prints: Node
                                                                                                                                                                                                                                                                                                                                                    +  console.log(fs.readFileSync('temp.txt', 'utf8'));  // Prints: Node
                                                                                                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -doTruncate().catch(console.error);
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    +doTruncate().catch(console.error);

                                                                                                                                                                                                                                                                                                                                                    If the file previously was shorter than len bytes, it is extended, and the extended part is filled with null bytes ('\0'):

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                    -const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                    +const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                                                                                                                                    -// Prints: Node.js
                                                                                                                                                                                                                                                                                                                                                    +console.log(fs.readFileSync('temp.txt', 'utf8'));
                                                                                                                                                                                                                                                                                                                                                    +// Prints: Node.js
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -async function doTruncate() {
                                                                                                                                                                                                                                                                                                                                                    -  let filehandle = null;
                                                                                                                                                                                                                                                                                                                                                    -  try {
                                                                                                                                                                                                                                                                                                                                                    -    filehandle = await fsPromises.open('temp.txt', 'r+');
                                                                                                                                                                                                                                                                                                                                                    -    await filehandle.truncate(10);
                                                                                                                                                                                                                                                                                                                                                    -  } finally {
                                                                                                                                                                                                                                                                                                                                                    -    if (filehandle) {
                                                                                                                                                                                                                                                                                                                                                    -      // Close the file if it is opened.
                                                                                                                                                                                                                                                                                                                                                    -      await filehandle.close();
                                                                                                                                                                                                                                                                                                                                                    +async function doTruncate() {
                                                                                                                                                                                                                                                                                                                                                    +  let filehandle = null;
                                                                                                                                                                                                                                                                                                                                                    +  try {
                                                                                                                                                                                                                                                                                                                                                    +    filehandle = await fsPromises.open('temp.txt', 'r+');
                                                                                                                                                                                                                                                                                                                                                    +    await filehandle.truncate(10);
                                                                                                                                                                                                                                                                                                                                                    +  } finally {
                                                                                                                                                                                                                                                                                                                                                    +    if (filehandle) {
                                                                                                                                                                                                                                                                                                                                                    +      // Close the file if it is opened.
                                                                                                                                                                                                                                                                                                                                                    +      await filehandle.close();
                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                                                                    -  console.log(fs.readFileSync('temp.txt', 'utf8'));  // Prints Node.js\0\0\0
                                                                                                                                                                                                                                                                                                                                                    +  console.log(fs.readFileSync('temp.txt', 'utf8'));  // Prints Node.js\0\0\0
                                                                                                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -doTruncate().catch(console.error);
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    +doTruncate().catch(console.error);

                                                                                                                                                                                                                                                                                                                                                    The last three bytes are null bytes ('\0'), to compensate the over-truncation.

                                                                                                                                                                                                                                                                                                                                                    filehandle.utimes(atime, mtime)#

                                                                                                                                                                                                                                                                                                                                                    Tests a user's permissions for the file or directory specified by path. The mode argument is an optional integer that specifies the accessibility -checks to be performed. Check File Access Constants for possible values +checks to be performed. Check File access constants for possible values of mode. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                                                                                                                    If the accessibility check is successful, the Promise is resolved with no value. If any of the accessibility checks fail, the Promise is rejected with an Error object. The following example checks if the file /etc/passwd can be read and written by the current process.

                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                    -const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                    +const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                    -fsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK)
                                                                                                                                                                                                                                                                                                                                                    -  .then(() => console.log('can access'))
                                                                                                                                                                                                                                                                                                                                                    -  .catch(() => console.error('cannot access'));
                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                    +fsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK) + .then(() => console.log('can access')) + .catch(() => console.error('cannot access'));

                                                                                                                                                                                                                                                                                                                                                    Using fsPromises.access() to check for the accessibility of a file before calling fsPromises.open() is not recommended. Doing so introduces a race condition, since other processes may change the file's state between the two @@ -4999,8 +4981,7 @@

                                                                                                                                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL> | <FileHandle> filename or FileHandle
                                                                                                                                                                                                                                                                                                                                                    • data <string> | <Buffer>
                                                                                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                                      options <Object> | <string>

                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                    • options <Object> | <string>
                                                                                                                                                                                                                                                                                                                                                      • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                                                      • mode <integer> Default: 0o666
                                                                                                                                                                                                                                                                                                                                                      • @@ -5040,7 +5021,15 @@ upon success.

                                                                                                                                                                                                                                                                                                                                                        fsPromises.copyFile(src, dest[, flags])#

                                                                                                                                                                                                                                                                                                                                                        • src <string> | <Buffer> | <URL> source filename to copy
                                                                                                                                                                                                                                                                                                                                                        • @@ -5067,23 +5056,21 @@ create a copy-on-write reflink. If the platform does not support copy-on-write, then the operation will fail.
                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                        const fsPromises = require('fs').promises;
                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                        const fsPromises = require('fs').promises;
                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                        -// destination.txt will be created or overwritten by default.
                                                                                                                                                                                                                                                                                                                                                        -fsPromises.copyFile('source.txt', 'destination.txt')
                                                                                                                                                                                                                                                                                                                                                        -  .then(() => console.log('source.txt was copied to destination.txt'))
                                                                                                                                                                                                                                                                                                                                                        -  .catch(() => console.log('The file could not be copied'));
                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                        +// destination.txt will be created or overwritten by default. +fsPromises.copyFile('source.txt', 'destination.txt') + .then(() => console.log('source.txt was copied to destination.txt')) + .catch(() => console.log('The file could not be copied'));

                                                                                                                                                                                                                                                                                                                                                        If the third argument is a number, then it specifies flags:

                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                        const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                        -const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                                                        -const { COPYFILE_EXCL } = fs.constants;
                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                        -// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
                                                                                                                                                                                                                                                                                                                                                        -fsPromises.copyFile('source.txt', 'destination.txt', COPYFILE_EXCL)
                                                                                                                                                                                                                                                                                                                                                        -  .then(() => console.log('source.txt was copied to destination.txt'))
                                                                                                                                                                                                                                                                                                                                                        -  .catch(() => console.log('The file could not be copied'));
                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                        const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                        +const fsPromises = fs.promises;
                                                                                                                                                                                                                                                                                                                                                        +const { COPYFILE_EXCL } = fs.constants;
                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                        +// By using COPYFILE_EXCL, the operation will fail if destination.txt exists.
                                                                                                                                                                                                                                                                                                                                                        +fsPromises.copyFile('source.txt', 'destination.txt', COPYFILE_EXCL)
                                                                                                                                                                                                                                                                                                                                                        +  .then(() => console.log('source.txt was copied to destination.txt'))
                                                                                                                                                                                                                                                                                                                                                        +  .catch(() => console.log('The file could not be copied'));

                                                                                                                                                                                                                                                                                                                                                        fsPromises.lchmod(path, mode)#

                                                                                                                                                                                                                                                                                                                                                      Changes the ownership on a symbolic link then resolves the Promise with no arguments upon success.

                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                      fsPromises.lutimes(path, atime, mtime)#

                                                                                                                                                                                                                                                                                                                                                      + + +

                                                                                                                                                                                                                                                                                                                                                      Changes the access and modification times of a file in the same way as +fsPromises.utimes(), with the difference that if the path refers to a +symbolic link, then the link is not dereferenced: instead, the timestamps of +the symbolic link itself are changed.

                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                      Upon success, the Promise is resolved without arguments.

                                                                                                                                                                                                                                                                                                                                                      fsPromises.link(existingPath, newPath)#

                                                                                                                                                                                                                                                                                                                                                      • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                                                        options <Object>

                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                      • options <Object>
                                                                                                                                                                                                                                                                                                                                                        • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                                                                                                                                        • @@ -5156,8 +5157,7 @@
                                                                                                                                                                                                                                                                                                                                                          • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                            options <Object> | <integer>

                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                          • options <Object> | <integer>
                                                                                                                                                                                                                                                                                                                                                            • recursive <boolean> Default: false
                                                                                                                                                                                                                                                                                                                                                            • mode <string> | <integer> Not supported on Windows. Default: 0o777.
                                                                                                                                                                                                                                                                                                                                                            • @@ -5178,8 +5178,7 @@
                                                                                                                                                                                                                                                                                                                                                              • prefix <string>
                                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                                options <string> | <Object>

                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                              • options <string> | <Object> @@ -5194,9 +5193,8 @@ trailing X characters in prefix with random characters.

                                                                                                                                                                                                                                                                                                                                                                The optional options argument can be a string specifying an encoding, or an object with an encoding property specifying the character encoding to use.

                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                fsPromises.mkdtemp(path.join(os.tmpdir(), 'foo-'))
                                                                                                                                                                                                                                                                                                                                                                -  .catch(console.error);
                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                fsPromises.mkdtemp(path.join(os.tmpdir(), 'foo-'))
                                                                                                                                                                                                                                                                                                                                                                +  .catch(console.error);

                                                                                                                                                                                                                                                                                                                                                                The fsPromises.mkdtemp() method will append the six randomly selected characters directly to the prefix string. For instance, given a directory /tmp, if the intention is to create a temporary directory within /tmp, the @@ -5243,8 +5241,7 @@

                                                                                                                                                                                                                                                                                                                                                                • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                                  options <Object>

                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                • options <Object>
                                                                                                                                                                                                                                                                                                                                                                  • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                                                                  • bufferSize <number> Number of directory entries that are buffered @@ -5260,16 +5257,15 @@

                                                                                                                                                                                                                                                                                                                                                                    The encoding option sets the encoding for the path while opening the directory and subsequent read operations.

                                                                                                                                                                                                                                                                                                                                                                    Example using async iteration:

                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                    const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                    -async function print(path) {
                                                                                                                                                                                                                                                                                                                                                                    -  const dir = await fs.promises.opendir(path);
                                                                                                                                                                                                                                                                                                                                                                    -  for await (const dirent of dir) {
                                                                                                                                                                                                                                                                                                                                                                    -    console.log(dirent.name);
                                                                                                                                                                                                                                                                                                                                                                    +async function print(path) {
                                                                                                                                                                                                                                                                                                                                                                    +  const dir = await fs.promises.opendir(path);
                                                                                                                                                                                                                                                                                                                                                                    +  for await (const dirent of dir) {
                                                                                                                                                                                                                                                                                                                                                                    +    console.log(dirent.name);
                                                                                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                                                                                                                    -print('./').catch(console.error);
                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                    +print('./').catch(console.error);

                                                                                                                                                                                                                                                                                                                                                                    fsPromises.readdir(path[, options])#

                                                                                                                                                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                                                      options <string> | <Object>

                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                    • options <string> | <Object>
                                                                                                                                                                                                                                                                                                                                                                      • encoding <string> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                                                                      • withFileTypes <boolean> Default: false
                                                                                                                                                                                                                                                                                                                                                                      • @@ -5301,24 +5296,22 @@ will be passed as Buffer objects.

                                                                                                                                                                                                                                                                                                                                                                        If options.withFileTypes is set to true, the resolved array will contain fs.Dirent objects.

                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                        const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                        const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                        -async function print(path) {
                                                                                                                                                                                                                                                                                                                                                                        -  const files = await fs.promises.readdir(path);
                                                                                                                                                                                                                                                                                                                                                                        -  for (const file of files) {
                                                                                                                                                                                                                                                                                                                                                                        -    console.log(file);
                                                                                                                                                                                                                                                                                                                                                                        +async function print(path) {
                                                                                                                                                                                                                                                                                                                                                                        +  const files = await fs.promises.readdir(path);
                                                                                                                                                                                                                                                                                                                                                                        +  for (const file of files) {
                                                                                                                                                                                                                                                                                                                                                                        +    console.log(file);
                                                                                                                                                                                                                                                                                                                                                                           }
                                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                                        -print('./').catch(console.error);
                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                        +print('./').catch(console.error);

                                                                                                                                                                                                                                                                                                                                                                        fsPromises.readFile(path[, options])#

                                                                                                                                                                                                                                                                                                                                                                        • path <string> | <Buffer> | <URL> | <FileHandle> filename or FileHandle
                                                                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                                                          options <Object> | <string>

                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                        • options <Object> | <string>
                                                                                                                                                                                                                                                                                                                                                                          • encoding <string> | <null> Default: null
                                                                                                                                                                                                                                                                                                                                                                          • flag <string> See support of file system flags. Default: 'r'.
                                                                                                                                                                                                                                                                                                                                                                          • @@ -5342,8 +5335,7 @@
                                                                                                                                                                                                                                                                                                                                                                            • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                              options <string> | <Object>

                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                            • options <string> | <Object> @@ -5362,8 +5354,7 @@
                                                                                                                                                                                                                                                                                                                                                                              • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                                                options <string> | <Object>

                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                              • options <string> | <Object> @@ -5409,8 +5400,7 @@

                                                                                                                                                                                                                                                                                                                                                                                Stability: 1 - Recursive removal is experimental.

                                                                                                                                                                                                                                                                                                                                                                                • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                                                  options <Object>

                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                • options <Object>
                                                                                                                                                                                                                                                                                                                                                                                  • maxRetries <integer> If an EBUSY, EMFILE, ENFILE, ENOTEMPTY, or EPERM error is encountered, Node.js will retry the operation with a linear @@ -5446,8 +5436,7 @@
                                                                                                                                                                                                                                                                                                                                                                                    • path <string> | <Buffer> | <URL>
                                                                                                                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                                                                      options <Object>

                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                    • options <Object>
                                                                                                                                                                                                                                                                                                                                                                                      • bigint <boolean> Whether the numeric values in the returned fs.Stats object should be bigint. Default: false.
                                                                                                                                                                                                                                                                                                                                                                                      • @@ -5519,8 +5508,7 @@
                                                                                                                                                                                                                                                                                                                                                                                        • file <string> | <Buffer> | <URL> | <FileHandle> filename or FileHandle
                                                                                                                                                                                                                                                                                                                                                                                        • data <string> | <Buffer> | <Uint8Array>
                                                                                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                                                                          options <Object> | <string>

                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                        • options <Object> | <string>
                                                                                                                                                                                                                                                                                                                                                                                          • encoding <string> | <null> Default: 'utf8'
                                                                                                                                                                                                                                                                                                                                                                                          • mode <integer> Default: 0o666
                                                                                                                                                                                                                                                                                                                                                                                          • @@ -5537,24 +5525,23 @@

                                                                                                                                                                                                                                                                                                                                                                                            Any specified FileHandle has to support writing.

                                                                                                                                                                                                                                                                                                                                                                                            It is unsafe to use fsPromises.writeFile() multiple times on the same file without waiting for the Promise to be resolved (or rejected).

                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            FS Constants#

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            FS constants#

                                                                                                                                                                                                                                                                                                                                                                                            The following constants are exported by fs.constants.

                                                                                                                                                                                                                                                                                                                                                                                            Not every constant will be available on every operating system.

                                                                                                                                                                                                                                                                                                                                                                                            To use more than one constant, use the bitwise OR | operator.

                                                                                                                                                                                                                                                                                                                                                                                            Example:

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                            -const {
                                                                                                                                                                                                                                                                                                                                                                                            +const {
                                                                                                                                                                                                                                                                                                                                                                                               O_RDWR,
                                                                                                                                                                                                                                                                                                                                                                                               O_CREAT,
                                                                                                                                                                                                                                                                                                                                                                                               O_EXCL
                                                                                                                                                                                                                                                                                                                                                                                             } = fs.constants;
                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                            -fs.open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {
                                                                                                                                                                                                                                                                                                                                                                                            -  // ...
                                                                                                                                                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            File Access Constants#

                                                                                                                                                                                                                                                                                                                                                                                            +fs.open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => { + // ... +});
                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            File access constants#

                                                                                                                                                                                                                                                                                                                                                                                            The following constants are meant for use with fs.access().

                                                                                                                                                                                                                                                                                                                                                                                            @@ -5583,7 +5570,7 @@ (will behave like fs.constants.F_OK).
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            File Copy Constants#

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            File copy constants#

                                                                                                                                                                                                                                                                                                                                                                                            The following constants are meant for use with fs.copyFile().

                                                                                                                                                                                                                                                                                                                                                                                            @@ -5608,7 +5595,7 @@ copy-on-write, then the operation will fail with an error.
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            File Open Constants#

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            File open constants#

                                                                                                                                                                                                                                                                                                                                                                                            The following constants are meant for use with fs.open().

                                                                                                                                                                                                                                                                                                                                                                                            @@ -5699,7 +5686,7 @@ this flag is ignored.
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            File Type Constants#

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            File type constants#

                                                                                                                                                                                                                                                                                                                                                                                            The following constants are meant for use with the fs.Stats object's mode property for determining a file's type.

                                                                                                                                                                                                                                                                                                                                                                                            @@ -5740,7 +5727,7 @@
                                                                                                                                                                                                                                                                                                                                                                                            File type constant for a socket.
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            File Mode Constants#

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            File mode constants#

                                                                                                                                                                                                                                                                                                                                                                                            The following constants are meant for use with the fs.Stats object's mode property for determining the access permissions for a file.

                                                                                                                                                                                                                                                                                                                                                                                            @@ -5797,7 +5784,7 @@
                                                                                                                                                                                                                                                                                                                                                                                            File mode indicating executable by others.
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            File System Flags#

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            File system flags#

                                                                                                                                                                                                                                                                                                                                                                                            The following flags are available wherever the flag option takes a string.

                                                                                                                                                                                                                                                                                                                                                                                              @@ -5860,10 +5847,10 @@ are available from fs.constants. On Windows, flags are translated to their equivalent ones where applicable, e.g. O_WRONLY to FILE_GENERIC_WRITE, or O_EXCL|O_CREAT to CREATE_NEW, as accepted by CreateFileW.

                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                              The exclusive flag 'x' (O_EXCL flag in open(2)) ensures that path is newly -created. On POSIX systems, path is considered to exist even if it is a symlink -to a non-existent file. The exclusive flag may or may not work with network -file systems.

                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                              The exclusive flag 'x' (O_EXCL flag in open(2)) causes the operation to +return an error if the path already exists. On POSIX, if the path is a symbolic +link, using O_EXCL returns an error even if the link is to a path that does +not exist. The exclusive flag may or may not work with network file systems.

                                                                                                                                                                                                                                                                                                                                                                                              On Linux, positional writes don't work when the file is opened in append mode. The kernel ignores the position argument and always appends the data to the end of the file.

                                                                                                                                                                                                                                                                                                                                                                                              @@ -5873,26 +5860,23 @@ on macOS and Linux with the 'a+' flag, as in the example below, will return an error. In contrast, on Windows and FreeBSD, a file descriptor or a FileHandle will be returned.

                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              // macOS and Linux
                                                                                                                                                                                                                                                                                                                                                                                              -fs.open('<directory>', 'a+', (err, fd) => {
                                                                                                                                                                                                                                                                                                                                                                                              -  // => [Error: EISDIR: illegal operation on a directory, open <directory>]
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              // macOS and Linux
                                                                                                                                                                                                                                                                                                                                                                                              +fs.open('<directory>', 'a+', (err, fd) => {
                                                                                                                                                                                                                                                                                                                                                                                              +  // => [Error: EISDIR: illegal operation on a directory, open <directory>]
                                                                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                              -// Windows and FreeBSD
                                                                                                                                                                                                                                                                                                                                                                                              -fs.open('<directory>', 'a+', (err, fd) => {
                                                                                                                                                                                                                                                                                                                                                                                              -  // => null, <fd>
                                                                                                                                                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              +// Windows and FreeBSD +fs.open('<directory>', 'a+', (err, fd) => { + // => null, <fd> +});

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, opening an existing hidden file using the 'w' flag (either through fs.open() or fs.writeFile() or fsPromises.open()) will fail with EPERM. Existing hidden files can be opened for writing with the 'r+' flag.

                                                                                                                                                                                                                                                                                                                                                                                              A call to fs.ftruncate() or filehandle.truncate() can be used to reset the file contents.

                                                                                                                                                                                                                                                                                                                                                                                              + - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/fs.json nodejs-mozilla-12.22.12/doc/api/fs.json --- nodejs-mozilla-12.18.1/doc/api/fs.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/fs.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,17 +3,45 @@ "source": "doc/api/fs.md", "modules": [ { - "textRaw": "File System", + "textRaw": "File system", "name": "fs", "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The fs module provides an API for interacting with the file system in a\nmanner closely modeled around standard POSIX functions.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To use this module:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              All file system operations have synchronous and asynchronous forms.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The asynchronous form always takes a completion callback as its last argument.\nThe arguments passed to the completion callback depend on the method, but the\nfirst argument is always reserved for an exception. If the operation was\ncompleted successfully, then the first argument will be null or undefined.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nfs.unlink('/tmp/hello', (err) => {\n  if (err) throw err;\n  console.log('successfully deleted /tmp/hello');\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Exceptions that occur using synchronous operations are thrown immediately and\nmay be handled using try…catch, or may be allowed to bubble up.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\ntry {\n  fs.unlinkSync('/tmp/hello');\n  console.log('successfully deleted /tmp/hello');\n} catch (err) {\n  // handle the error\n}\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              There is no guaranteed ordering when using asynchronous methods. So the\nfollowing is prone to error because the fs.stat() operation may complete\nbefore the fs.rename() operation:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.rename('/tmp/hello', '/tmp/world', (err) => {\n  if (err) throw err;\n  console.log('renamed complete');\n});\nfs.stat('/tmp/world', (err, stats) => {\n  if (err) throw err;\n  console.log(`stats: ${JSON.stringify(stats)}`);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To correctly order the operations, move the fs.stat() call into the callback\nof the fs.rename() operation:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.rename('/tmp/hello', '/tmp/world', (err) => {\n  if (err) throw err;\n  fs.stat('/tmp/world', (err, stats) => {\n    if (err) throw err;\n    console.log(`stats: ${JSON.stringify(stats)}`);\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              In busy processes, use the asynchronous versions of these calls. The synchronous\nversions will block the entire process until they complete, halting all\nconnections.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              While it is not recommended, most fs functions allow the callback argument to\nbe omitted, in which case a default callback is used that rethrows errors. To\nget a trace to the original call site, set the NODE_DEBUG environment\nvariable:

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Omitting the callback function on asynchronous fs functions is deprecated and\nmay result in an error being thrown in the future.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              $ cat script.js\nfunction bad() {\n  require('fs').readFile('/');\n}\nbad();\n\n$ env NODE_DEBUG=fs node script.js\nfs.js:88\n        throw backtrace;\n        ^\nError: EISDIR: illegal operation on a directory, read\n    <stack trace.>\n
                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Source Code: lib/fs.js

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The fs module enables interacting with the file system in a\nway modeled on standard POSIX functions.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To use this module:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              All file system operations have synchronous, callback, and promise-based\nforms.

                                                                                                                                                                                                                                                                                                                                                                                              ", "modules": [ { + "textRaw": "Synchronous example", + "name": "synchronous_example", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The synchronous form blocks the Node.js event loop and further JavaScript\nexecution until the operation is complete. Exceptions are thrown immediately\nand can be handled using try…catch, or can be allowed to bubble up.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\ntry {\n  fs.unlinkSync('/tmp/hello');\n  console.log('successfully deleted /tmp/hello');\n} catch (err) {\n  // handle the error\n}\n
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "Synchronous example" + }, + { + "textRaw": "Callback example", + "name": "callback_example", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The callback form takes a completion callback function as its last\nargument and invokes the operation asynchronously. The arguments passed to\nthe completion callback depend on the method, but the first argument is always\nreserved for an exception. If the operation is completed successfully, then\nthe first argument is null or undefined.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nfs.unlink('/tmp/hello', (err) => {\n  if (err) throw err;\n  console.log('successfully deleted /tmp/hello');\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "Callback example" + }, + { + "textRaw": "Promise example", + "name": "promise_example", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Promise-based operations return a Promise that is resolved when the\nasynchronous operation is complete.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs').promises;\n\n(async function(path) {\n  try {\n    await fs.unlink(path);\n    console.log(`successfully deleted ${path}`);\n  } catch (error) {\n    console.error('there was an error:', error.message);\n  }\n})('/tmp/hello');\n
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "Promise example" + }, + { + "textRaw": "Ordering of callback and promise-based operations", + "name": "ordering_of_callback_and_promise-based_operations", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              There is no guaranteed ordering when using either the callback or\npromise-based methods. For example, the following is prone to error\nbecause the fs.stat() operation might complete before the fs.rename()\noperation:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.rename('/tmp/hello', '/tmp/world', (err) => {\n  if (err) throw err;\n  console.log('renamed complete');\n});\nfs.stat('/tmp/world', (err, stats) => {\n  if (err) throw err;\n  console.log(`stats: ${JSON.stringify(stats)}`);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To correctly order the operations, move the fs.stat() call into the callback\nof the fs.rename() operation:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.rename('/tmp/hello', '/tmp/world', (err) => {\n  if (err) throw err;\n  fs.stat('/tmp/world', (err, stats) => {\n    if (err) throw err;\n    console.log(`stats: ${JSON.stringify(stats)}`);\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Or, use the promise-based API:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs').promises;\n\n(async function(from, to) {\n  try {\n    await fs.rename(from, to);\n    const stats = await fs.stat(to);\n    console.log(`stats: ${JSON.stringify(stats)}`);\n  } catch (error) {\n    console.error('there was an error:', error.message);\n  }\n})('/tmp/hello', '/tmp/world');\n
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "Ordering of callback and promise-based operations" + }, + { "textRaw": "File paths", "name": "file_paths", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Most fs operations accept filepaths that may be specified in the form of\na string, a Buffer, or a URL object using the file: protocol.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              String form paths are interpreted as UTF-8 character sequences identifying\nthe absolute or relative filename. Relative paths will be resolved relative\nto the current working directory as specified by process.cwd().

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Example using an absolute path on POSIX:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nfs.open('/open/some/file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Example using a relative path on POSIX (relative to process.cwd()):

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open('file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Paths specified using a Buffer are useful primarily on certain POSIX\noperating systems that treat file paths as opaque byte sequences. On such\nsystems, it is possible for a single file path to contain sub-sequences that\nuse multiple character encodings. As with string paths, Buffer paths may\nbe relative or absolute:

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Example using an absolute path on POSIX:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, Node.js follows the concept of per-drive working directory. This\nbehavior can be observed when using a drive path without a backslash. For\nexample fs.readdirSync('C:\\\\') can potentially return a different result than\nfs.readdirSync('C:'). For more information, see\nthis MSDN page.

                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Most fs operations accept filepaths that may be specified in the form of\na string, a Buffer, or a URL object using the file: protocol.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              String form paths are interpreted as UTF-8 character sequences identifying\nthe absolute or relative filename. Relative paths will be resolved relative\nto the current working directory as determined by calling process.cwd().

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Example using an absolute path on POSIX:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nfs.open('/open/some/file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Example using a relative path on POSIX (relative to process.cwd()):

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open('file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Paths specified using a Buffer are useful primarily on certain POSIX\noperating systems that treat file paths as opaque byte sequences. On such\nsystems, it is possible for a single file path to contain sub-sequences that\nuse multiple character encodings. As with string paths, Buffer paths may\nbe relative or absolute:

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Example using an absolute path on POSIX:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open(Buffer.from('/open/some/file.txt'), 'r', (err, fd) => {\n  if (err) throw err;\n  fs.close(fd, (err) => {\n    if (err) throw err;\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, Node.js follows the concept of per-drive working directory. This\nbehavior can be observed when using a drive path without a backslash. For\nexample fs.readdirSync('C:\\\\') can potentially return a different result than\nfs.readdirSync('C:'). For more information, see\nthis MSDN page.

                                                                                                                                                                                                                                                                                                                                                                                              ", "modules": [ { "textRaw": "URL object support", @@ -33,219 +61,18 @@ "displayName": "File paths" }, { - "textRaw": "File Descriptors", + "textRaw": "File descriptors", "name": "file_descriptors", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              On POSIX systems, for every process, the kernel maintains a table of currently\nopen files and resources. Each open file is assigned a simple numeric\nidentifier called a file descriptor. At the system-level, all file system\noperations use these file descriptors to identify and track each specific\nfile. Windows systems use a different but conceptually similar mechanism for\ntracking resources. To simplify things for users, Node.js abstracts away the\nspecific differences between operating systems and assigns all open files a\nnumeric file descriptor.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The fs.open() method is used to allocate a new file descriptor. Once\nallocated, the file descriptor may be used to read data from, write data to,\nor request information about the file.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open('/open/some/file.txt', 'r', (err, fd) => {\n  if (err) throw err;\n  fs.fstat(fd, (err, stat) => {\n    if (err) throw err;\n    // use stat\n\n    // always close the file descriptor!\n    fs.close(fd, (err) => {\n      if (err) throw err;\n    });\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Most operating systems limit the number of file descriptors that may be open\nat any given time so it is critical to close the descriptor when operations\nare completed. Failure to do so will result in a memory leak that will\neventually cause an application to crash.

                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", - "displayName": "File Descriptors" + "displayName": "File descriptors" }, { - "textRaw": "Threadpool Usage", + "textRaw": "Threadpool usage", "name": "threadpool_usage", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              All file system APIs except fs.FSWatcher() and those that are explicitly\nsynchronous use libuv's threadpool, which can have surprising and negative\nperformance implications for some applications. See the\nUV_THREADPOOL_SIZE documentation for more information.

                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", - "displayName": "Threadpool Usage" - }, - { - "textRaw": "Class `fs.Dir`", - "name": "class_`fs.dir`", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              A class representing a directory stream.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Created by fs.opendir(), fs.opendirSync(), or\nfsPromises.opendir().

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nasync function print(path) {\n  const dir = await fs.promises.opendir(path);\n  for await (const dirent of dir) {\n    console.log(dirent.name);\n  }\n}\nprint('./').catch(console.error);\n
                                                                                                                                                                                                                                                                                                                                                                                              ", - "methods": [ - { - "textRaw": "`dir.close()`", - "type": "method", - "name": "close", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {Promise}", - "name": "return", - "type": "Promise" - }, - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              A Promise is returned that will be resolved after the resource has been\nclosed.

                                                                                                                                                                                                                                                                                                                                                                                              " - }, - { - "textRaw": "`dir.close(callback)`", - "type": "method", - "name": "close", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "params": [ - { - "textRaw": "`callback` {Function}", - "name": "callback", - "type": "Function", - "options": [ - { - "textRaw": "`err` {Error}", - "name": "err", - "type": "Error" - } - ] - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The callback will be called after the resource handle has been closed.

                                                                                                                                                                                                                                                                                                                                                                                              " - }, - { - "textRaw": "`dir.closeSync()`", - "type": "method", - "name": "closeSync", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Synchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                                                                                                                                                              " - }, - { - "textRaw": "`dir.read()`", - "type": "method", - "name": "read", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {Promise} containing {fs.Dirent|null}", - "name": "return", - "type": "Promise", - "desc": "containing {fs.Dirent|null}" - }, - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              After the read is completed, a Promise is returned that will be resolved with\nan fs.Dirent, or null if there are no more directory entries to read.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                                                                                                                                                              " - }, - { - "textRaw": "`dir.read(callback)`", - "type": "method", - "name": "read", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "params": [ - { - "textRaw": "`callback` {Function}", - "name": "callback", - "type": "Function", - "options": [ - { - "textRaw": "`err` {Error}", - "name": "err", - "type": "Error" - }, - { - "textRaw": "`dirent` {fs.Dirent|null}", - "name": "dirent", - "type": "fs.Dirent|null" - } - ] - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              After the read is completed, the callback will be called with an\nfs.Dirent, or null if there are no more directory entries to read.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                                                                                                                                                              " - }, - { - "textRaw": "`dir.readSync()`", - "type": "method", - "name": "readSync", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {fs.Dirent|null}", - "name": "return", - "type": "fs.Dirent|null" - }, - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Synchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If there are no more directory entries to read, null will be returned.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                                                                                                                                                              " - }, - { - "textRaw": "`dir[Symbol.asyncIterator]()`", - "type": "method", - "name": "[Symbol.asyncIterator]", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {AsyncIterator} of {fs.Dirent}", - "name": "return", - "type": "AsyncIterator", - "desc": "of {fs.Dirent}" - }, - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously iterates over the directory via readdir(3) until all entries have\nbeen read.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Entries returned by the async iterator are always an fs.Dirent.\nThe null case from dir.read() is handled internally.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              See fs.Dir for an example.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Directory entries returned by this iterator are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                                                                                                                                                              " - } - ], - "properties": [ - { - "textRaw": "`path` {string}", - "type": "string", - "name": "path", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The read-only path of this directory as was provided to fs.opendir(),\nfs.opendirSync(), or fsPromises.opendir().

                                                                                                                                                                                                                                                                                                                                                                                              " - } - ], - "type": "module", - "displayName": "Class `fs.Dir`" + "displayName": "Threadpool usage" }, { "textRaw": "`fs` Promises API", @@ -253,7 +80,7 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The fs.promises API provides an alternative set of asynchronous file system\nmethods that return Promise objects rather than using callbacks. The\nAPI is accessible via require('fs').promises.

                                                                                                                                                                                                                                                                                                                                                                                              ", "classes": [ { - "textRaw": "class: `FileHandle`", + "textRaw": "Class: `FileHandle`", "type": "class", "name": "FileHandle", "meta": { @@ -909,7 +736,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Tests a user's permissions for the file or directory specified by path.\nThe mode argument is an optional integer that specifies the accessibility\nchecks to be performed. Check File Access Constants for possible values\nof mode. It is possible to create a mask consisting of the bitwise OR of\ntwo or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If the accessibility check is successful, the Promise is resolved with no\nvalue. If any of the accessibility checks fail, the Promise is rejected\nwith an Error object. The following example checks if the file\n/etc/passwd can be read and written by the current process.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\nconst fsPromises = fs.promises;\n\nfsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK)\n  .then(() => console.log('can access'))\n  .catch(() => console.error('cannot access'));\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Using fsPromises.access() to check for the accessibility of a file before\ncalling fsPromises.open() is not recommended. Doing so introduces a race\ncondition, since other processes may change the file's state between the two\ncalls. Instead, user code should open/read/write the file directly and handle\nthe error raised if the file is not accessible.

                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Tests a user's permissions for the file or directory specified by path.\nThe mode argument is an optional integer that specifies the accessibility\nchecks to be performed. Check File access constants for possible values\nof mode. It is possible to create a mask consisting of the bitwise OR of\ntwo or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If the accessibility check is successful, the Promise is resolved with no\nvalue. If any of the accessibility checks fail, the Promise is rejected\nwith an Error object. The following example checks if the file\n/etc/passwd can be read and written by the current process.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\nconst fsPromises = fs.promises;\n\nfsPromises.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK)\n  .then(() => console.log('can access'))\n  .catch(() => console.error('cannot access'));\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Using fsPromises.access() to check for the accessibility of a file before\ncalling fsPromises.open() is not recommended. Doing so introduces a race\ncondition, since other processes may change the file's state between the two\ncalls. Instead, user code should open/read/write the file directly and handle\nthe error raised if the file is not accessible.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`fsPromises.appendFile(path, data[, options])`", @@ -1050,7 +877,13 @@ "added": [ "v10.0.0" ], - "changes": [] + "changes": [ + { + "version": "v14.0.0", + "pr-url": "https://github.com/nodejs/node/pull/27044", + "description": "Changed 'flags' argument to 'mode' and imposed stricter type validation." + } + ] }, "signatures": [ { @@ -1162,6 +995,44 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Changes the ownership on a symbolic link then resolves the Promise with\nno arguments upon success.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { + "textRaw": "`fsPromises.lutimes(path, atime, mtime)`", + "type": "method", + "name": "lutimes", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Promise}", + "name": "return", + "type": "Promise" + }, + "params": [ + { + "textRaw": "`path` {string|Buffer|URL}", + "name": "path", + "type": "string|Buffer|URL" + }, + { + "textRaw": "`atime` {number|string|Date}", + "name": "atime", + "type": "number|string|Date" + }, + { + "textRaw": "`mtime` {number|string|Date}", + "name": "mtime", + "type": "number|string|Date" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Changes the access and modification times of a file in the same way as\nfsPromises.utimes(), with the difference that if the path refers to a\nsymbolic link, then the link is not dereferenced: instead, the timestamps of\nthe symbolic link itself are changed.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Upon success, the Promise is resolved without arguments.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { "textRaw": "`fsPromises.link(existingPath, newPath)`", "type": "method", "name": "link", @@ -1964,66 +1835,266 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously writes data to a file, replacing the file if it already exists.\ndata can be a string or a buffer. The Promise will be resolved with no\narguments upon success.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The encoding option is ignored if data is a buffer.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If options is a string, then it specifies the encoding.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Any specified FileHandle has to support writing.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              It is unsafe to use fsPromises.writeFile() multiple times on the same file\nwithout waiting for the Promise to be resolved (or rejected).

                                                                                                                                                                                                                                                                                                                                                                                              " - } - ], - "type": "module", - "displayName": "`fs` Promises API" - }, - { - "textRaw": "FS Constants", - "name": "fs_constants", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are exported by fs.constants.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Not every constant will be available on every operating system.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To use more than one constant, use the bitwise OR | operator.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Example:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nconst {\n  O_RDWR,\n  O_CREAT,\n  O_EXCL\n} = fs.constants;\n\nfs.open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              ", - "modules": [ - { - "textRaw": "File Access Constants", - "name": "file_access_constants", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with fs.access().

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              F_OKFlag indicating that the file is visible to the calling process.\n This is useful for determining if a file exists, but says nothing\n about rwx permissions. Default if no mode is specified.
                                                                                                                                                                                                                                                                                                                                                                                              R_OKFlag indicating that the file can be read by the calling process.
                                                                                                                                                                                                                                                                                                                                                                                              W_OKFlag indicating that the file can be written by the calling\n process.
                                                                                                                                                                                                                                                                                                                                                                                              X_OKFlag indicating that the file can be executed by the calling\n process. This has no effect on Windows\n (will behave like fs.constants.F_OK).
                                                                                                                                                                                                                                                                                                                                                                                              ", - "type": "module", - "displayName": "File Access Constants" - }, - { - "textRaw": "File Copy Constants", - "name": "file_copy_constants", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with fs.copyFile().

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              COPYFILE_EXCLIf present, the copy operation will fail with an error if the\n destination path already exists.
                                                                                                                                                                                                                                                                                                                                                                                              COPYFILE_FICLONEIf present, the copy operation will attempt to create a\n copy-on-write reflink. If the underlying platform does not support\n copy-on-write, then a fallback copy mechanism is used.
                                                                                                                                                                                                                                                                                                                                                                                              COPYFILE_FICLONE_FORCEIf present, the copy operation will attempt to create a\n copy-on-write reflink. If the underlying platform does not support\n copy-on-write, then the operation will fail with an error.
                                                                                                                                                                                                                                                                                                                                                                                              ", - "type": "module", - "displayName": "File Copy Constants" - }, - { - "textRaw": "File Open Constants", - "name": "file_open_constants", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with fs.open().

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              O_RDONLYFlag indicating to open a file for read-only access.
                                                                                                                                                                                                                                                                                                                                                                                              O_WRONLYFlag indicating to open a file for write-only access.
                                                                                                                                                                                                                                                                                                                                                                                              O_RDWRFlag indicating to open a file for read-write access.
                                                                                                                                                                                                                                                                                                                                                                                              O_CREATFlag indicating to create the file if it does not already exist.
                                                                                                                                                                                                                                                                                                                                                                                              O_EXCLFlag indicating that opening a file should fail if the\n O_CREAT flag is set and the file already exists.
                                                                                                                                                                                                                                                                                                                                                                                              O_NOCTTYFlag indicating that if path identifies a terminal device, opening the\n path shall not cause that terminal to become the controlling terminal for\n the process (if the process does not already have one).
                                                                                                                                                                                                                                                                                                                                                                                              O_TRUNCFlag indicating that if the file exists and is a regular file, and the\n file is opened successfully for write access, its length shall be truncated\n to zero.
                                                                                                                                                                                                                                                                                                                                                                                              O_APPENDFlag indicating that data will be appended to the end of the file.
                                                                                                                                                                                                                                                                                                                                                                                              O_DIRECTORYFlag indicating that the open should fail if the path is not a\n directory.
                                                                                                                                                                                                                                                                                                                                                                                              O_NOATIMEFlag indicating reading accesses to the file system will no longer\n result in an update to the atime information associated with\n the file. This flag is available on Linux operating systems only.
                                                                                                                                                                                                                                                                                                                                                                                              O_NOFOLLOWFlag indicating that the open should fail if the path is a symbolic\n link.
                                                                                                                                                                                                                                                                                                                                                                                              O_SYNCFlag indicating that the file is opened for synchronized I/O with write\n operations waiting for file integrity.
                                                                                                                                                                                                                                                                                                                                                                                              O_DSYNCFlag indicating that the file is opened for synchronized I/O with write\n operations waiting for data integrity.
                                                                                                                                                                                                                                                                                                                                                                                              O_SYMLINKFlag indicating to open the symbolic link itself rather than the\n resource it is pointing to.
                                                                                                                                                                                                                                                                                                                                                                                              O_DIRECTWhen set, an attempt will be made to minimize caching effects of file\n I/O.
                                                                                                                                                                                                                                                                                                                                                                                              O_NONBLOCKFlag indicating to open the file in nonblocking mode when possible.
                                                                                                                                                                                                                                                                                                                                                                                              UV_FS_O_FILEMAPWhen set, a memory file mapping is used to access the file. This flag\n is available on Windows operating systems only. On other operating systems,\n this flag is ignored.
                                                                                                                                                                                                                                                                                                                                                                                              ", - "type": "module", - "displayName": "File Open Constants" + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously writes data to a file, replacing the file if it already exists.\ndata can be a string or a buffer. The Promise will be resolved with no\narguments upon success.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The encoding option is ignored if data is a buffer.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If options is a string, then it specifies the encoding.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Any specified FileHandle has to support writing.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              It is unsafe to use fsPromises.writeFile() multiple times on the same file\nwithout waiting for the Promise to be resolved (or rejected).

                                                                                                                                                                                                                                                                                                                                                                                              " + } + ], + "type": "module", + "displayName": "`fs` Promises API" + }, + { + "textRaw": "FS constants", + "name": "fs_constants", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are exported by fs.constants.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Not every constant will be available on every operating system.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To use more than one constant, use the bitwise OR | operator.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Example:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nconst {\n  O_RDWR,\n  O_CREAT,\n  O_EXCL\n} = fs.constants;\n\nfs.open('/path/to/my/file', O_RDWR | O_CREAT | O_EXCL, (err, fd) => {\n  // ...\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              ", + "modules": [ + { + "textRaw": "File access constants", + "name": "file_access_constants", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with fs.access().

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              F_OKFlag indicating that the file is visible to the calling process.\n This is useful for determining if a file exists, but says nothing\n about rwx permissions. Default if no mode is specified.
                                                                                                                                                                                                                                                                                                                                                                                              R_OKFlag indicating that the file can be read by the calling process.
                                                                                                                                                                                                                                                                                                                                                                                              W_OKFlag indicating that the file can be written by the calling\n process.
                                                                                                                                                                                                                                                                                                                                                                                              X_OKFlag indicating that the file can be executed by the calling\n process. This has no effect on Windows\n (will behave like fs.constants.F_OK).
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "File access constants" + }, + { + "textRaw": "File copy constants", + "name": "file_copy_constants", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with fs.copyFile().

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              COPYFILE_EXCLIf present, the copy operation will fail with an error if the\n destination path already exists.
                                                                                                                                                                                                                                                                                                                                                                                              COPYFILE_FICLONEIf present, the copy operation will attempt to create a\n copy-on-write reflink. If the underlying platform does not support\n copy-on-write, then a fallback copy mechanism is used.
                                                                                                                                                                                                                                                                                                                                                                                              COPYFILE_FICLONE_FORCEIf present, the copy operation will attempt to create a\n copy-on-write reflink. If the underlying platform does not support\n copy-on-write, then the operation will fail with an error.
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "File copy constants" + }, + { + "textRaw": "File open constants", + "name": "file_open_constants", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with fs.open().

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              O_RDONLYFlag indicating to open a file for read-only access.
                                                                                                                                                                                                                                                                                                                                                                                              O_WRONLYFlag indicating to open a file for write-only access.
                                                                                                                                                                                                                                                                                                                                                                                              O_RDWRFlag indicating to open a file for read-write access.
                                                                                                                                                                                                                                                                                                                                                                                              O_CREATFlag indicating to create the file if it does not already exist.
                                                                                                                                                                                                                                                                                                                                                                                              O_EXCLFlag indicating that opening a file should fail if the\n O_CREAT flag is set and the file already exists.
                                                                                                                                                                                                                                                                                                                                                                                              O_NOCTTYFlag indicating that if path identifies a terminal device, opening the\n path shall not cause that terminal to become the controlling terminal for\n the process (if the process does not already have one).
                                                                                                                                                                                                                                                                                                                                                                                              O_TRUNCFlag indicating that if the file exists and is a regular file, and the\n file is opened successfully for write access, its length shall be truncated\n to zero.
                                                                                                                                                                                                                                                                                                                                                                                              O_APPENDFlag indicating that data will be appended to the end of the file.
                                                                                                                                                                                                                                                                                                                                                                                              O_DIRECTORYFlag indicating that the open should fail if the path is not a\n directory.
                                                                                                                                                                                                                                                                                                                                                                                              O_NOATIMEFlag indicating reading accesses to the file system will no longer\n result in an update to the atime information associated with\n the file. This flag is available on Linux operating systems only.
                                                                                                                                                                                                                                                                                                                                                                                              O_NOFOLLOWFlag indicating that the open should fail if the path is a symbolic\n link.
                                                                                                                                                                                                                                                                                                                                                                                              O_SYNCFlag indicating that the file is opened for synchronized I/O with write\n operations waiting for file integrity.
                                                                                                                                                                                                                                                                                                                                                                                              O_DSYNCFlag indicating that the file is opened for synchronized I/O with write\n operations waiting for data integrity.
                                                                                                                                                                                                                                                                                                                                                                                              O_SYMLINKFlag indicating to open the symbolic link itself rather than the\n resource it is pointing to.
                                                                                                                                                                                                                                                                                                                                                                                              O_DIRECTWhen set, an attempt will be made to minimize caching effects of file\n I/O.
                                                                                                                                                                                                                                                                                                                                                                                              O_NONBLOCKFlag indicating to open the file in nonblocking mode when possible.
                                                                                                                                                                                                                                                                                                                                                                                              UV_FS_O_FILEMAPWhen set, a memory file mapping is used to access the file. This flag\n is available on Windows operating systems only. On other operating systems,\n this flag is ignored.
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "File open constants" + }, + { + "textRaw": "File type constants", + "name": "file_type_constants", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with the fs.Stats object's\nmode property for determining a file's type.

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              S_IFMTBit mask used to extract the file type code.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFREGFile type constant for a regular file.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFDIRFile type constant for a directory.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFCHRFile type constant for a character-oriented device file.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFBLKFile type constant for a block-oriented device file.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFIFOFile type constant for a FIFO/pipe.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFLNKFile type constant for a symbolic link.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFSOCKFile type constant for a socket.
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "File type constants" + }, + { + "textRaw": "File mode constants", + "name": "file_mode_constants", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with the fs.Stats object's\nmode property for determining the access permissions for a file.

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              S_IRWXUFile mode indicating readable, writable, and executable by owner.
                                                                                                                                                                                                                                                                                                                                                                                              S_IRUSRFile mode indicating readable by owner.
                                                                                                                                                                                                                                                                                                                                                                                              S_IWUSRFile mode indicating writable by owner.
                                                                                                                                                                                                                                                                                                                                                                                              S_IXUSRFile mode indicating executable by owner.
                                                                                                                                                                                                                                                                                                                                                                                              S_IRWXGFile mode indicating readable, writable, and executable by group.
                                                                                                                                                                                                                                                                                                                                                                                              S_IRGRPFile mode indicating readable by group.
                                                                                                                                                                                                                                                                                                                                                                                              S_IWGRPFile mode indicating writable by group.
                                                                                                                                                                                                                                                                                                                                                                                              S_IXGRPFile mode indicating executable by group.
                                                                                                                                                                                                                                                                                                                                                                                              S_IRWXOFile mode indicating readable, writable, and executable by others.
                                                                                                                                                                                                                                                                                                                                                                                              S_IROTHFile mode indicating readable by others.
                                                                                                                                                                                                                                                                                                                                                                                              S_IWOTHFile mode indicating writable by others.
                                                                                                                                                                                                                                                                                                                                                                                              S_IXOTHFile mode indicating executable by others.
                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "File mode constants" + } + ], + "type": "module", + "displayName": "FS constants" + }, + { + "textRaw": "File system flags", + "name": "file_system_flags", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following flags are available wherever the flag option takes a\nstring.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'a': Open file for appending.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'ax': Like 'a' but fails if the path exists.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'a+': Open file for reading and appending.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'ax+': Like 'a+' but fails if the path exists.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'as': Open file for appending in synchronous mode.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'as+': Open file for reading and appending in synchronous mode.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'r': Open file for reading.\nAn exception occurs if the file does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'r+': Open file for reading and writing.\nAn exception occurs if the file does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'rs+': Open file for reading and writing in synchronous mode. Instructs\nthe operating system to bypass the local file system cache.

                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                This is primarily useful for opening files on NFS mounts as it allows\nskipping the potentially stale local cache. It has a very real impact on\nI/O performance so using this flag is not recommended unless it is needed.

                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                This doesn't turn fs.open() or fsPromises.open() into a synchronous\nblocking call. If synchronous operation is desired, something like\nfs.openSync() should be used.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'w': Open file for writing.\nThe file is created (if it does not exist) or truncated (if it exists).

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'wx': Like 'w' but fails if the path exists.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'w+': Open file for reading and writing.\nThe file is created (if it does not exist) or truncated (if it exists).

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'wx+': Like 'w+' but fails if the path exists.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              flag can also be a number as documented by open(2); commonly used constants\nare available from fs.constants. On Windows, flags are translated to\ntheir equivalent ones where applicable, e.g. O_WRONLY to FILE_GENERIC_WRITE,\nor O_EXCL|O_CREAT to CREATE_NEW, as accepted by CreateFileW.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The exclusive flag 'x' (O_EXCL flag in open(2)) causes the operation to\nreturn an error if the path already exists. On POSIX, if the path is a symbolic\nlink, using O_EXCL returns an error even if the link is to a path that does\nnot exist. The exclusive flag may or may not work with network file systems.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Linux, positional writes don't work when the file is opened in append mode.\nThe kernel ignores the position argument and always appends the data to\nthe end of the file.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Modifying a file rather than replacing it may require a flags mode of 'r+'\nrather than the default mode 'w'.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The behavior of some flags are platform-specific. As such, opening a directory\non macOS and Linux with the 'a+' flag, as in the example below, will return an\nerror. In contrast, on Windows and FreeBSD, a file descriptor or a FileHandle\nwill be returned.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              // macOS and Linux\nfs.open('<directory>', 'a+', (err, fd) => {\n  // => [Error: EISDIR: illegal operation on a directory, open <directory>]\n});\n\n// Windows and FreeBSD\nfs.open('<directory>', 'a+', (err, fd) => {\n  // => null, <fd>\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, opening an existing hidden file using the 'w' flag (either\nthrough fs.open() or fs.writeFile() or fsPromises.open()) will fail with\nEPERM. Existing hidden files can be opened for writing with the 'r+' flag.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              A call to fs.ftruncate() or filehandle.truncate() can be used to reset\nthe file contents.

                                                                                                                                                                                                                                                                                                                                                                                              ", + "type": "module", + "displayName": "File system flags" + } + ], + "classes": [ + { + "textRaw": "Class: `fs.Dir`", + "type": "class", + "name": "fs.Dir", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              A class representing a directory stream.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Created by fs.opendir(), fs.opendirSync(), or\nfsPromises.opendir().

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nasync function print(path) {\n  const dir = await fs.promises.opendir(path);\n  for await (const dirent of dir) {\n    console.log(dirent.name);\n  }\n}\nprint('./').catch(console.error);\n
                                                                                                                                                                                                                                                                                                                                                                                              ", + "methods": [ + { + "textRaw": "`dir.close()`", + "type": "method", + "name": "close", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Promise}", + "name": "return", + "type": "Promise" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              A Promise is returned that will be resolved after the resource has been\nclosed.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { + "textRaw": "`dir.close(callback)`", + "type": "method", + "name": "close", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`callback` {Function}", + "name": "callback", + "type": "Function", + "options": [ + { + "textRaw": "`err` {Error}", + "name": "err", + "type": "Error" + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The callback will be called after the resource handle has been closed.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { + "textRaw": "`dir.closeSync()`", + "type": "method", + "name": "closeSync", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Synchronously close the directory's underlying resource handle.\nSubsequent reads will result in errors.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { + "textRaw": "`dir.read()`", + "type": "method", + "name": "read", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {Promise} containing {fs.Dirent|null}", + "name": "return", + "type": "Promise", + "desc": "containing {fs.Dirent|null}" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              After the read is completed, a Promise is returned that will be resolved with\nan fs.Dirent, or null if there are no more directory entries to read.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { + "textRaw": "`dir.read(callback)`", + "type": "method", + "name": "read", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`callback` {Function}", + "name": "callback", + "type": "Function", + "options": [ + { + "textRaw": "`err` {Error}", + "name": "err", + "type": "Error" + }, + { + "textRaw": "`dirent` {fs.Dirent|null}", + "name": "dirent", + "type": "fs.Dirent|null" + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              After the read is completed, the callback will be called with an\nfs.Dirent, or null if there are no more directory entries to read.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { - "textRaw": "File Type Constants", - "name": "file_type_constants", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with the fs.Stats object's\nmode property for determining a file's type.

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              S_IFMTBit mask used to extract the file type code.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFREGFile type constant for a regular file.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFDIRFile type constant for a directory.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFCHRFile type constant for a character-oriented device file.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFBLKFile type constant for a block-oriented device file.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFIFOFile type constant for a FIFO/pipe.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFLNKFile type constant for a symbolic link.
                                                                                                                                                                                                                                                                                                                                                                                              S_IFSOCKFile type constant for a socket.
                                                                                                                                                                                                                                                                                                                                                                                              ", - "type": "module", - "displayName": "File Type Constants" + "textRaw": "`dir.readSync()`", + "type": "method", + "name": "readSync", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.Dirent|null}", + "name": "return", + "type": "fs.Dirent|null" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Synchronously read the next directory entry via readdir(3) as an\nfs.Dirent.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If there are no more directory entries to read, null will be returned.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Directory entries returned by this function are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { - "textRaw": "File Mode Constants", - "name": "file_mode_constants", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following constants are meant for use with the fs.Stats object's\nmode property for determining the access permissions for a file.

                                                                                                                                                                                                                                                                                                                                                                                              \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                              ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                              S_IRWXUFile mode indicating readable, writable, and executable by owner.
                                                                                                                                                                                                                                                                                                                                                                                              S_IRUSRFile mode indicating readable by owner.
                                                                                                                                                                                                                                                                                                                                                                                              S_IWUSRFile mode indicating writable by owner.
                                                                                                                                                                                                                                                                                                                                                                                              S_IXUSRFile mode indicating executable by owner.
                                                                                                                                                                                                                                                                                                                                                                                              S_IRWXGFile mode indicating readable, writable, and executable by group.
                                                                                                                                                                                                                                                                                                                                                                                              S_IRGRPFile mode indicating readable by group.
                                                                                                                                                                                                                                                                                                                                                                                              S_IWGRPFile mode indicating writable by group.
                                                                                                                                                                                                                                                                                                                                                                                              S_IXGRPFile mode indicating executable by group.
                                                                                                                                                                                                                                                                                                                                                                                              S_IRWXOFile mode indicating readable, writable, and executable by others.
                                                                                                                                                                                                                                                                                                                                                                                              S_IROTHFile mode indicating readable by others.
                                                                                                                                                                                                                                                                                                                                                                                              S_IWOTHFile mode indicating writable by others.
                                                                                                                                                                                                                                                                                                                                                                                              S_IXOTHFile mode indicating executable by others.
                                                                                                                                                                                                                                                                                                                                                                                              ", - "type": "module", - "displayName": "File Mode Constants" + "textRaw": "`dir[Symbol.asyncIterator]()`", + "type": "method", + "name": "[Symbol.asyncIterator]", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {AsyncIterator} of {fs.Dirent}", + "name": "return", + "type": "AsyncIterator", + "desc": "of {fs.Dirent}" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously iterates over the directory via readdir(3) until all entries have\nbeen read.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Entries returned by the async iterator are always an fs.Dirent.\nThe null case from dir.read() is handled internally.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              See fs.Dir for an example.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Directory entries returned by this iterator are in no particular order as\nprovided by the operating system's underlying directory mechanisms.\nEntries added or removed while iterating over the directory may or may not be\nincluded in the iteration results.

                                                                                                                                                                                                                                                                                                                                                                                              " } ], - "type": "module", - "displayName": "FS Constants" + "properties": [ + { + "textRaw": "`path` {string}", + "type": "string", + "name": "path", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The read-only path of this directory as was provided to fs.opendir(),\nfs.opendirSync(), or fsPromises.opendir().

                                                                                                                                                                                                                                                                                                                                                                                              " + } + ] }, { - "textRaw": "File System Flags", - "name": "file_system_flags", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The following flags are available wherever the flag option takes a\nstring.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'a': Open file for appending.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'ax': Like 'a' but fails if the path exists.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'a+': Open file for reading and appending.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'ax+': Like 'a+' but fails if the path exists.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'as': Open file for appending in synchronous mode.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'as+': Open file for reading and appending in synchronous mode.\nThe file is created if it does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'r': Open file for reading.\nAn exception occurs if the file does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'r+': Open file for reading and writing.\nAn exception occurs if the file does not exist.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'rs+': Open file for reading and writing in synchronous mode. Instructs\nthe operating system to bypass the local file system cache.

                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                This is primarily useful for opening files on NFS mounts as it allows\nskipping the potentially stale local cache. It has a very real impact on\nI/O performance so using this flag is not recommended unless it is needed.

                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                This doesn't turn fs.open() or fsPromises.open() into a synchronous\nblocking call. If synchronous operation is desired, something like\nfs.openSync() should be used.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'w': Open file for writing.\nThe file is created (if it does not exist) or truncated (if it exists).

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'wx': Like 'w' but fails if the path exists.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'w+': Open file for reading and writing.\nThe file is created (if it does not exist) or truncated (if it exists).

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                'wx+': Like 'w+' but fails if the path exists.

                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              flag can also be a number as documented by open(2); commonly used constants\nare available from fs.constants. On Windows, flags are translated to\ntheir equivalent ones where applicable, e.g. O_WRONLY to FILE_GENERIC_WRITE,\nor O_EXCL|O_CREAT to CREATE_NEW, as accepted by CreateFileW.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The exclusive flag 'x' (O_EXCL flag in open(2)) ensures that path is newly\ncreated. On POSIX systems, path is considered to exist even if it is a symlink\nto a non-existent file. The exclusive flag may or may not work with network\nfile systems.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Linux, positional writes don't work when the file is opened in append mode.\nThe kernel ignores the position argument and always appends the data to\nthe end of the file.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Modifying a file rather than replacing it may require a flags mode of 'r+'\nrather than the default mode 'w'.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The behavior of some flags are platform-specific. As such, opening a directory\non macOS and Linux with the 'a+' flag, as in the example below, will return an\nerror. In contrast, on Windows and FreeBSD, a file descriptor or a FileHandle\nwill be returned.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              // macOS and Linux\nfs.open('<directory>', 'a+', (err, fd) => {\n  // => [Error: EISDIR: illegal operation on a directory, open <directory>]\n});\n\n// Windows and FreeBSD\nfs.open('<directory>', 'a+', (err, fd) => {\n  // => null, <fd>\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, opening an existing hidden file using the 'w' flag (either\nthrough fs.open() or fs.writeFile() or fsPromises.open()) will fail with\nEPERM. Existing hidden files can be opened for writing with the 'r+' flag.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              A call to fs.ftruncate() or filehandle.truncate() can be used to reset\nthe file contents.

                                                                                                                                                                                                                                                                                                                                                                                              ", - "type": "module", - "displayName": "File System Flags" - } - ], - "classes": [ - { "textRaw": "Class: `fs.Dirent`", "type": "class", "name": "fs.Dirent", @@ -2293,6 +2364,108 @@ } ], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Stop watching for changes on the given fs.FSWatcher. Once stopped, the\nfs.FSWatcher object is no longer usable.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { + "textRaw": "`watcher.ref()`", + "type": "method", + "name": "ref", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.FSWatcher}", + "name": "return", + "type": "fs.FSWatcher" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              When called, requests that the Node.js event loop not exit so long as the\nFSWatcher is active. Calling watcher.ref() multiple times will have\nno effect.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              By default, all FSWatcher objects are \"ref'ed\", making it normally\nunnecessary to call watcher.ref() unless watcher.unref() had been\ncalled previously.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { + "textRaw": "`watcher.unref()`", + "type": "method", + "name": "unref", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.FSWatcher}", + "name": "return", + "type": "fs.FSWatcher" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              When called, the active FSWatcher object will not require the Node.js\nevent loop to remain active. If there is no other activity keeping the\nevent loop running, the process may exit before the FSWatcher object's\ncallback is invoked. Calling watcher.unref() multiple times will have\nno effect.

                                                                                                                                                                                                                                                                                                                                                                                              " + } + ] + }, + { + "textRaw": "Class: `fs.StatWatcher`", + "type": "class", + "name": "fs.StatWatcher", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "desc": "\n

                                                                                                                                                                                                                                                                                                                                                                                              A successful call to fs.watchFile() method will return a new fs.StatWatcher\nobject.

                                                                                                                                                                                                                                                                                                                                                                                              ", + "methods": [ + { + "textRaw": "`watcher.ref()`", + "type": "method", + "name": "ref", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.StatWatcher}", + "name": "return", + "type": "fs.StatWatcher" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              When called, requests that the Node.js event loop not exit so long as the\nStatWatcher is active. Calling watcher.ref() multiple times will have\nno effect.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              By default, all StatWatcher objects are \"ref'ed\", making it normally\nunnecessary to call watcher.ref() unless watcher.unref() had been\ncalled previously.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { + "textRaw": "`watcher.unref()`", + "type": "method", + "name": "unref", + "meta": { + "added": [ + "v12.20.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {fs.StatWatcher}", + "name": "return", + "type": "fs.StatWatcher" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              When called, the active StatWatcher object will not require the Node.js\nevent loop to remain active. If there is no other activity keeping the\nevent loop running, the process may exit before the StatWatcher object's\ncallback is invoked. Calling watcher.unref() multiple times will have\nno effect.

                                                                                                                                                                                                                                                                                                                                                                                              " } ] }, @@ -2306,7 +2479,7 @@ ], "changes": [] }, - "desc": "\n

                                                                                                                                                                                                                                                                                                                                                                                              A successful call to fs.createReadStream() will return a new fs.ReadStream\nobject.

                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "\n

                                                                                                                                                                                                                                                                                                                                                                                              Instances of fs.ReadStream are created and returned using the\nfs.createReadStream() function.

                                                                                                                                                                                                                                                                                                                                                                                              ", "events": [ { "textRaw": "Event: `'close'`", @@ -2608,7 +2781,7 @@ "textRaw": "`rdev` {number|bigint}", "type": "number|bigint", "name": "rdev", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              A numeric device identifier if the file is considered \"special\".

                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              A numeric device identifier if the file represents a device.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`size` {number|bigint}", @@ -2775,11 +2948,11 @@ ], "modules": [ { - "textRaw": "Stat Time Values", + "textRaw": "Stat time values", "name": "stat_time_values", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              The atimeMs, mtimeMs, ctimeMs, birthtimeMs properties are\nnumeric values that hold the corresponding times in milliseconds. Their\nprecision is platform specific. When bigint: true is passed into the\nmethod that generates the object, the properties will be bigints,\notherwise they will be numbers.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The atimeNs, mtimeNs, ctimeNs, birthtimeNs properties are\nbigints that hold the corresponding times in nanoseconds. They are\nonly present when bigint: true is passed into the method that generates\nthe object. Their precision is platform specific.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              atime, mtime, ctime, and birthtime are\nDate object alternate representations of the various times. The\nDate and number values are not connected. Assigning a new number value, or\nmutating the Date value, will not be reflected in the corresponding alternate\nrepresentation.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The times in the stat object have the following semantics:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • atime \"Access Time\": Time when file data last accessed. Changed\nby the mknod(2), utimes(2), and read(2) system calls.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • mtime \"Modified Time\": Time when file data last modified.\nChanged by the mknod(2), utimes(2), and write(2) system calls.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • ctime \"Change Time\": Time when file status was last changed\n(inode data modification). Changed by the chmod(2), chown(2),\nlink(2), mknod(2), rename(2), unlink(2), utimes(2),\nread(2), and write(2) system calls.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • birthtime \"Birth Time\": Time of file creation. Set once when the\nfile is created. On filesystems where birthtime is not available,\nthis field may instead hold either the ctime or\n1970-01-01T00:00Z (ie, Unix epoch timestamp 0). This value may be greater\nthan atime or mtime in this case. On Darwin and other FreeBSD variants,\nalso set if the atime is explicitly set to an earlier value than the current\nbirthtime using the utimes(2) system call.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Prior to Node.js 0.12, the ctime held the birthtime on Windows systems. As\nof 0.12, ctime is not \"creation time\", and on Unix systems, it never was.

                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", - "displayName": "Stat Time Values" + "displayName": "Stat time values" } ] }, @@ -2793,7 +2966,7 @@ ], "changes": [] }, - "desc": "", + "desc": "\n

                                                                                                                                                                                                                                                                                                                                                                                              Instances of fs.WriteStream are created and returned using the\nfs.createWriteStream() function.

                                                                                                                                                                                                                                                                                                                                                                                              ", "events": [ { "textRaw": "Event: `'close'`", @@ -2931,7 +3104,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Tests a user's permissions for the file or directory specified by path.\nThe mode argument is an optional integer that specifies the accessibility\nchecks to be performed. Check File Access Constants for possible values\nof mode. It is possible to create a mask consisting of the bitwise OR of\ntwo or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The final argument, callback, is a callback function that is invoked with\na possible error argument. If any of the accessibility checks fail, the error\nargument will be an Error object. The following examples check if\npackage.json exists, and if it is readable or writable.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const file = 'package.json';\n\n// Check if the file exists in the current directory.\nfs.access(file, fs.constants.F_OK, (err) => {\n  console.log(`${file} ${err ? 'does not exist' : 'exists'}`);\n});\n\n// Check if the file is readable.\nfs.access(file, fs.constants.R_OK, (err) => {\n  console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);\n});\n\n// Check if the file is writable.\nfs.access(file, fs.constants.W_OK, (err) => {\n  console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);\n});\n\n// Check if the file exists in the current directory, and if it is writable.\nfs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {\n  if (err) {\n    console.error(\n      `${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`);\n  } else {\n    console.log(`${file} exists, and it is writable`);\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Using fs.access() to check for the accessibility of a file before calling\nfs.open(), fs.readFile() or fs.writeFile() is not recommended. Doing\nso introduces a race condition, since other processes may change the file's\nstate between the two calls. Instead, user code should open/read/write the\nfile directly and handle the error raised if the file is not accessible.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              write (NOT RECOMMENDED)

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.access('myfile', (err) => {\n  if (!err) {\n    console.error('myfile already exists');\n    return;\n  }\n\n  fs.open('myfile', 'wx', (err, fd) => {\n    if (err) throw err;\n    writeMyData(fd);\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              write (RECOMMENDED)

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open('myfile', 'wx', (err, fd) => {\n  if (err) {\n    if (err.code === 'EEXIST') {\n      console.error('myfile already exists');\n      return;\n    }\n\n    throw err;\n  }\n\n  writeMyData(fd);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              read (NOT RECOMMENDED)

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.access('myfile', (err) => {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      console.error('myfile does not exist');\n      return;\n    }\n\n    throw err;\n  }\n\n  fs.open('myfile', 'r', (err, fd) => {\n    if (err) throw err;\n    readMyData(fd);\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              read (RECOMMENDED)

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open('myfile', 'r', (err, fd) => {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      console.error('myfile does not exist');\n      return;\n    }\n\n    throw err;\n  }\n\n  readMyData(fd);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The \"not recommended\" examples above check for accessibility and then use the\nfile; the \"recommended\" examples are better because they use the file directly\nand handle the error, if any.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              In general, check for the accessibility of a file only if the file will not be\nused directly, for example when its accessibility is a signal from another\nprocess.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, access-control policies (ACLs) on a directory may limit access to\na file or directory. The fs.access() function, however, does not check the\nACL and therefore may report that a path is accessible even if the ACL restricts\nthe user from reading or writing to it.

                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Tests a user's permissions for the file or directory specified by path.\nThe mode argument is an optional integer that specifies the accessibility\nchecks to be performed. Check File access constants for possible values\nof mode. It is possible to create a mask consisting of the bitwise OR of\ntwo or more values (e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The final argument, callback, is a callback function that is invoked with\na possible error argument. If any of the accessibility checks fail, the error\nargument will be an Error object. The following examples check if\npackage.json exists, and if it is readable or writable.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const file = 'package.json';\n\n// Check if the file exists in the current directory.\nfs.access(file, fs.constants.F_OK, (err) => {\n  console.log(`${file} ${err ? 'does not exist' : 'exists'}`);\n});\n\n// Check if the file is readable.\nfs.access(file, fs.constants.R_OK, (err) => {\n  console.log(`${file} ${err ? 'is not readable' : 'is readable'}`);\n});\n\n// Check if the file is writable.\nfs.access(file, fs.constants.W_OK, (err) => {\n  console.log(`${file} ${err ? 'is not writable' : 'is writable'}`);\n});\n\n// Check if the file exists in the current directory, and if it is writable.\nfs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {\n  if (err) {\n    console.error(\n      `${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`);\n  } else {\n    console.log(`${file} exists, and it is writable`);\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Do not use fs.access() to check for the accessibility of a file before calling\nfs.open(), fs.readFile() or fs.writeFile(). Doing\nso introduces a race condition, since other processes may change the file's\nstate between the two calls. Instead, user code should open/read/write the\nfile directly and handle the error raised if the file is not accessible.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              write (NOT RECOMMENDED)

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.access('myfile', (err) => {\n  if (!err) {\n    console.error('myfile already exists');\n    return;\n  }\n\n  fs.open('myfile', 'wx', (err, fd) => {\n    if (err) throw err;\n    writeMyData(fd);\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              write (RECOMMENDED)

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open('myfile', 'wx', (err, fd) => {\n  if (err) {\n    if (err.code === 'EEXIST') {\n      console.error('myfile already exists');\n      return;\n    }\n\n    throw err;\n  }\n\n  writeMyData(fd);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              read (NOT RECOMMENDED)

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.access('myfile', (err) => {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      console.error('myfile does not exist');\n      return;\n    }\n\n    throw err;\n  }\n\n  fs.open('myfile', 'r', (err, fd) => {\n    if (err) throw err;\n    readMyData(fd);\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              read (RECOMMENDED)

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.open('myfile', 'r', (err, fd) => {\n  if (err) {\n    if (err.code === 'ENOENT') {\n      console.error('myfile does not exist');\n      return;\n    }\n\n    throw err;\n  }\n\n  readMyData(fd);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The \"not recommended\" examples above check for accessibility and then use the\nfile; the \"recommended\" examples are better because they use the file directly\nand handle the error, if any.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              In general, check for the accessibility of a file only if the file will not be\nused directly, for example when its accessibility is a signal from another\nprocess.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, access-control policies (ACLs) on a directory may limit access to\na file or directory. The fs.access() function, however, does not check the\nACL and therefore may report that a path is accessible even if the ACL restricts\nthe user from reading or writing to it.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`fs.accessSync(path[, mode])`", @@ -2966,7 +3139,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Synchronously tests a user's permissions for the file or directory specified\nby path. The mode argument is an optional integer that specifies the\naccessibility checks to be performed. Check File Access Constants for\npossible values of mode. It is possible to create a mask consisting of\nthe bitwise OR of two or more values\n(e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If any of the accessibility checks fail, an Error will be thrown. Otherwise,\nthe method will return undefined.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              try {\n  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);\n  console.log('can read/write');\n} catch (err) {\n  console.error('no access!');\n}\n
                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Synchronously tests a user's permissions for the file or directory specified\nby path. The mode argument is an optional integer that specifies the\naccessibility checks to be performed. Check File access constants for\npossible values of mode. It is possible to create a mask consisting of\nthe bitwise OR of two or more values\n(e.g. fs.constants.W_OK | fs.constants.R_OK).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If any of the accessibility checks fail, an Error will be thrown. Otherwise,\nthe method will return undefined.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              try {\n  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);\n  console.log('can read/write');\n} catch (err) {\n  console.error('no access!');\n}\n
                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`fs.appendFile(path, data[, options], callback)`", @@ -3398,7 +3571,13 @@ "added": [ "v8.5.0" ], - "changes": [] + "changes": [ + { + "version": "v14.0.0", + "pr-url": "https://github.com/nodejs/node/pull/27044", + "description": "Changed 'flags' argument to 'mode' and imposed stricter type validation." + } + ] }, "signatures": [ { @@ -3440,7 +3619,13 @@ "added": [ "v8.5.0" ], - "changes": [] + "changes": [ + { + "version": "v14.0.0", + "pr-url": "https://github.com/nodejs/node/pull/27044", + "description": "Changed 'flags' argument to 'mode' and imposed stricter type validation." + } + ] }, "signatures": [ { @@ -4495,6 +4680,10 @@ "version": "v7.0.0", "pr-url": "https://github.com/nodejs/node/pull/7897", "description": "The `callback` parameter is no longer optional. Not passing it will emit a deprecation warning with id DEP0013." + }, + { + "version": "v0.4.7", + "description": "Documentation-only deprecation." } ] }, @@ -4543,6 +4732,10 @@ "version": "v10.6.0", "pr-url": "https://github.com/nodejs/node/pull/21498", "description": "This API is no longer deprecated." + }, + { + "version": "v0.4.7", + "description": "Documentation-only deprecation." } ] }, @@ -4570,6 +4763,84 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Synchronous lchown(2). Returns undefined.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { + "textRaw": "`fs.lutimes(path, atime, mtime, callback)`", + "type": "method", + "name": "lutimes", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`path` {string|Buffer|URL}", + "name": "path", + "type": "string|Buffer|URL" + }, + { + "textRaw": "`atime` {number|string|Date}", + "name": "atime", + "type": "number|string|Date" + }, + { + "textRaw": "`mtime` {number|string|Date}", + "name": "mtime", + "type": "number|string|Date" + }, + { + "textRaw": "`callback` {Function}", + "name": "callback", + "type": "Function", + "options": [ + { + "textRaw": "`err` {Error}", + "name": "err", + "type": "Error" + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Changes the access and modification times of a file in the same way as\nfs.utimes(), with the difference that if the path refers to a symbolic\nlink, then the link is not dereferenced: instead, the timestamps of the\nsymbolic link itself are changed.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              No arguments other than a possible exception are given to the completion\ncallback.

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { + "textRaw": "`fs.lutimesSync(path, atime, mtime)`", + "type": "method", + "name": "lutimesSync", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`path` {string|Buffer|URL}", + "name": "path", + "type": "string|Buffer|URL" + }, + { + "textRaw": "`atime` {number|string|Date}", + "name": "atime", + "type": "number|string|Date" + }, + { + "textRaw": "`mtime` {number|string|Date}", + "name": "mtime", + "type": "number|string|Date" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Change the file system timestamps of the symbolic link referenced by path.\nReturns undefined, or throws an exception when parameters are incorrect or\nthe operation fails. This is the synchronous version of fs.lutimes().

                                                                                                                                                                                                                                                                                                                                                                                              " + }, + { "textRaw": "`fs.link(existingPath, newPath, callback)`", "type": "method", "name": "link", @@ -5681,11 +5952,11 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronously reads the entire contents of a file.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.readFile('/etc/passwd', (err, data) => {\n  if (err) throw err;\n  console.log(data);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The callback is passed two arguments (err, data), where data is the\ncontents of the file.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If no encoding is specified, then the raw buffer is returned.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If options is a string, then it specifies the encoding:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.readFile('/etc/passwd', 'utf8', callback);\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              When the path is a directory, the behavior of fs.readFile() and\nfs.readFileSync() is platform-specific. On macOS, Linux, and Windows, an\nerror will be returned. On FreeBSD, a representation of the directory's contents\nwill be returned.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              // macOS, Linux, and Windows\nfs.readFile('<directory>', (err, data) => {\n  // => [Error: EISDIR: illegal operation on a directory, read <directory>]\n});\n\n//  FreeBSD\nfs.readFile('<directory>', (err, data) => {\n  // => null, <data>\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The fs.readFile() function buffers the entire file. To minimize memory costs,\nwhen possible prefer streaming via fs.createReadStream().

                                                                                                                                                                                                                                                                                                                                                                                              ", "modules": [ { - "textRaw": "File Descriptors", + "textRaw": "File descriptors", "name": "file_descriptors", "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              1. Any specified file descriptor has to support reading.
                                                                                                                                                                                                                                                                                                                                                                                              2. \n
                                                                                                                                                                                                                                                                                                                                                                                              3. If a file descriptor is specified as the path, it will not be closed\nautomatically.
                                                                                                                                                                                                                                                                                                                                                                                              4. \n
                                                                                                                                                                                                                                                                                                                                                                                              5. The reading will begin at the current position. For example, if the file\nalready had 'Hello World' and six bytes are read with the file descriptor,\nthe call to fs.readFile() with the same file descriptor, would give\n'World', rather than 'Hello World'.
                                                                                                                                                                                                                                                                                                                                                                                              6. \n
                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", - "displayName": "File Descriptors" + "displayName": "File descriptors" } ] }, @@ -6041,7 +6312,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Read from a file specified by fd and write to an array of ArrayBufferViews\nusing readv().

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              position is the offset from the beginning of the file from where data\nshould be read. If typeof position !== 'number', the data will be read\nfrom the current position.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The callback will be given three arguments: err, bytesRead, and\nbuffers. bytesRead is how many bytes were read from the file.

                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Read from a file specified by fd and write to an array of ArrayBufferViews\nusing readv().

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              position is the offset from the beginning of the file from where data\nshould be read. If typeof position !== 'number', the data will be read\nfrom the current position.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The callback will be given three arguments: err, bytesRead, and\nbuffers. bytesRead is how many bytes were read from the file.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If this method is invoked as its util.promisify()ed version, it returns\na Promise for an Object with bytesRead and buffers properties.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`fs.readvSync(fd, buffers[, position])`", @@ -6645,7 +6916,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronous stat(2). The callback gets two arguments (err, stats) where\nstats is an fs.Stats object.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              In case of an error, the err.code will be one of Common System Errors.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Using fs.stat() to check for the existence of a file before calling\nfs.open(), fs.readFile() or fs.writeFile() is not recommended.\nInstead, user code should open/read/write the file directly and handle the\nerror raised if the file is not available.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To check if a file exists without manipulating it afterwards, fs.access()\nis recommended.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              For example, given the following directory structure:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              - txtDir\n-- file.txt\n- app.js\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The next program will check for the stats of the given paths:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nconst pathsToCheck = ['./txtDir', './txtDir/file.txt'];\n\nfor (let i = 0; i < pathsToCheck.length; i++) {\n  fs.stat(pathsToCheck[i], function(err, stats) {\n    console.log(stats.isDirectory());\n    console.log(stats);\n  });\n}\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The resulting output will resemble:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              true\nStats {\n  dev: 16777220,\n  mode: 16877,\n  nlink: 3,\n  uid: 501,\n  gid: 20,\n  rdev: 0,\n  blksize: 4096,\n  ino: 14214262,\n  size: 96,\n  blocks: 0,\n  atimeMs: 1561174653071.963,\n  mtimeMs: 1561174614583.3518,\n  ctimeMs: 1561174626623.5366,\n  birthtimeMs: 1561174126937.2893,\n  atime: 2019-06-22T03:37:33.072Z,\n  mtime: 2019-06-22T03:36:54.583Z,\n  ctime: 2019-06-22T03:37:06.624Z,\n  birthtime: 2019-06-22T03:28:46.937Z\n}\nfalse\nStats {\n  dev: 16777220,\n  mode: 33188,\n  nlink: 1,\n  uid: 501,\n  gid: 20,\n  rdev: 0,\n  blksize: 4096,\n  ino: 14214074,\n  size: 8,\n  blocks: 8,\n  atimeMs: 1561174616618.8555,\n  mtimeMs: 1561174614584,\n  ctimeMs: 1561174614583.8145,\n  birthtimeMs: 1561174007710.7478,\n  atime: 2019-06-22T03:36:56.619Z,\n  mtime: 2019-06-22T03:36:54.584Z,\n  ctime: 2019-06-22T03:36:54.584Z,\n  birthtime: 2019-06-22T03:26:47.711Z\n}\n
                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronous stat(2). The callback gets two arguments (err, stats) where\nstats is an fs.Stats object.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              In case of an error, the err.code will be one of Common System Errors.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Using fs.stat() to check for the existence of a file before calling\nfs.open(), fs.readFile() or fs.writeFile() is not recommended.\nInstead, user code should open/read/write the file directly and handle the\nerror raised if the file is not available.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To check if a file exists without manipulating it afterwards, fs.access()\nis recommended.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              For example, given the following directory structure:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              - txtDir\n-- file.txt\n- app.js\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The next program will check for the stats of the given paths:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const fs = require('fs');\n\nconst pathsToCheck = ['./txtDir', './txtDir/file.txt'];\n\nfor (let i = 0; i < pathsToCheck.length; i++) {\n  fs.stat(pathsToCheck[i], function(err, stats) {\n    console.log(stats.isDirectory());\n    console.log(stats);\n  });\n}\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The resulting output will resemble:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              true\nStats {\n  dev: 16777220,\n  mode: 16877,\n  nlink: 3,\n  uid: 501,\n  gid: 20,\n  rdev: 0,\n  blksize: 4096,\n  ino: 14214262,\n  size: 96,\n  blocks: 0,\n  atimeMs: 1561174653071.963,\n  mtimeMs: 1561174614583.3518,\n  ctimeMs: 1561174626623.5366,\n  birthtimeMs: 1561174126937.2893,\n  atime: 2019-06-22T03:37:33.072Z,\n  mtime: 2019-06-22T03:36:54.583Z,\n  ctime: 2019-06-22T03:37:06.624Z,\n  birthtime: 2019-06-22T03:28:46.937Z\n}\nfalse\nStats {\n  dev: 16777220,\n  mode: 33188,\n  nlink: 1,\n  uid: 501,\n  gid: 20,\n  rdev: 0,\n  blksize: 4096,\n  ino: 14214074,\n  size: 8,\n  blocks: 8,\n  atimeMs: 1561174616618.8555,\n  mtimeMs: 1561174614584,\n  ctimeMs: 1561174614583.8145,\n  birthtimeMs: 1561174007710.7478,\n  atime: 2019-06-22T03:36:56.619Z,\n  mtime: 2019-06-22T03:36:54.584Z,\n  ctime: 2019-06-22T03:36:54.584Z,\n  birthtime: 2019-06-22T03:26:47.711Z\n}\n
                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`fs.statSync(path[, options])`", @@ -6754,7 +7025,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronous symlink(2) which creates the link called path pointing to\ntarget. No arguments other than a possible exception are given to the\ncompletion callback.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The type argument is only available on Windows and ignored on other platforms.\nIt can be set to 'dir', 'file', or 'junction'. If the type argument is\nnot set, Node.js will autodetect target type and use 'file' or 'dir'. If\nthe target does not exist, 'file' will be used. Windows junction points\nrequire the destination path to be absolute. When using 'junction', the\ntarget argument will automatically be normalized to absolute path.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Relative targets are relative to the link’s parent directory.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.symlink('./mew', './example/mewtwo', callback);\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The above example creates a symbolic link mewtwo in the example which points\nto mew in the same directory:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              $ tree example/\nexample/\n├── mew\n└── mewtwo -> ./mew\n
                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Asynchronous symlink(2) which creates the link called path pointing to\ntarget. No arguments other than a possible exception are given to the\ncompletion callback.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The type argument is only available on Windows and ignored on other platforms.\nIt can be set to 'dir', 'file', or 'junction'. If the type argument is\nnot set, Node.js will autodetect target type and use 'file' or 'dir'. If\nthe target does not exist, 'file' will be used. Windows junction points\nrequire the destination path to be absolute. When using 'junction', the\ntarget argument will automatically be normalized to absolute path.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Relative targets are relative to the link’s parent directory.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.symlink('./mew', './example/mewtwo', callback);\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The above example creates a symbolic link mewtwo in the example which points\nto mew in the same directory:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              $ tree example/\nexample/\n├── mew\n└── mewtwo -> ./mew\n
                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`fs.symlinkSync(target, path[, type])`", @@ -7205,7 +7476,7 @@ "textRaw": "Availability", "name": "Availability", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              This feature depends on the underlying operating system providing a way\nto be notified of filesystem changes.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • On Linux systems, this uses inotify(7).
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On BSD systems, this uses kqueue(2).
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On macOS, this uses kqueue(2) for files and FSEvents for\ndirectories.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On SunOS systems (including Solaris and SmartOS), this uses event ports.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On Windows systems, this feature depends on ReadDirectoryChangesW.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On Aix systems, this feature depends on AHAFS, which must be enabled.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If the underlying functionality is not available for some reason, then\nfs.watch() will not be able to function and may thrown an exception.\nFor example, watching files or directories can be unreliable, and in some\ncases impossible, on network file systems (NFS, SMB, etc) or host file systems\nwhen using virtualization software such as Vagrant or Docker.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              It is still possible to use fs.watchFile(), which uses stat polling, but\nthis method is slower and less reliable.

                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              This feature depends on the underlying operating system providing a way\nto be notified of filesystem changes.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • On Linux systems, this uses inotify(7).
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On BSD systems, this uses kqueue(2).
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On macOS, this uses kqueue(2) for files and FSEvents for\ndirectories.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On SunOS systems (including Solaris and SmartOS), this uses event ports.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On Windows systems, this feature depends on ReadDirectoryChangesW.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On Aix systems, this feature depends on AHAFS, which must be enabled.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • On IBM i systems, this feature is not supported.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If the underlying functionality is not available for some reason, then\nfs.watch() will not be able to function and may thrown an exception.\nFor example, watching files or directories can be unreliable, and in some\ncases impossible, on network file systems (NFS, SMB, etc) or host file systems\nwhen using virtualization software such as Vagrant or Docker.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              It is still possible to use fs.watchFile(), which uses stat polling, but\nthis method is slower and less reliable.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "Inodes", @@ -7214,8 +7485,8 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              On Linux and macOS systems, fs.watch() resolves the path to an inode and\nwatches the inode. If the watched path is deleted and recreated, it is assigned\na new inode. The watch will emit an event for the delete but will continue\nwatching the original inode. Events for the new inode will not be emitted.\nThis is expected behavior.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              AIX files retain the same inode for the lifetime of a file. Saving and closing a\nwatched file on AIX will result in two notifications (one for adding new\ncontent, and one for truncation).

                                                                                                                                                                                                                                                                                                                                                                                              " }, { - "textRaw": "Filename Argument", - "name": "Filename Argument", + "textRaw": "Filename argument", + "name": "Filename argument", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Providing filename argument in the callback is only supported on Linux,\nmacOS, Windows, and AIX. Even on supported platforms, filename is not always\nguaranteed to be provided. Therefore, don't assume that filename argument is\nalways provided in the callback, and have some fallback logic if it is null.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.watch('somedir', (eventType, filename) => {\n  console.log(`event type is: ${eventType}`);\n  if (filename) {\n    console.log(`filename provided: ${filename}`);\n  } else {\n    console.log('filename not provided');\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              " } @@ -7246,6 +7517,11 @@ }, "signatures": [ { + "return": { + "textRaw": "Returns: {fs.StatWatcher}", + "name": "return", + "type": "fs.StatWatcher" + }, "params": [ { "textRaw": "`filename` {string|Buffer|URL}", @@ -7297,7 +7573,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Watch for changes on filename. The callback listener will be called each\ntime the file is accessed.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The options argument may be omitted. If provided, it should be an object. The\noptions object may contain a boolean named persistent that indicates\nwhether the process should continue to run as long as files are being watched.\nThe options object may specify an interval property indicating how often the\ntarget should be polled in milliseconds.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The listener gets two arguments the current stat object and the previous\nstat object:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.watchFile('message.text', (curr, prev) => {\n  console.log(`the current mtime is: ${curr.mtime}`);\n  console.log(`the previous mtime was: ${prev.mtime}`);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              These stat objects are instances of fs.Stat. If the bigint option is true,\nthe numeric values in these objects are specified as BigInts.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To be notified when the file was modified, not just accessed, it is necessary\nto compare curr.mtime and prev.mtime.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              When an fs.watchFile operation results in an ENOENT error, it\nwill invoke the listener once, with all the fields zeroed (or, for dates, the\nUnix Epoch). If the file is created later on, the listener will be called\nagain, with the latest stat objects. This is a change in functionality since\nv0.10.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Using fs.watch() is more efficient than fs.watchFile and\nfs.unwatchFile. fs.watch should be used instead of fs.watchFile and\nfs.unwatchFile when possible.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              When a file being watched by fs.watchFile() disappears and reappears,\nthen the previousStat reported in the second callback event (the file's\nreappearance) will be the same as the previousStat of the first callback\nevent (its disappearance).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              This happens when:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • the file is deleted, followed by a restore
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • the file is renamed and then renamed a second time back to its original name
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Watch for changes on filename. The callback listener will be called each\ntime the file is accessed.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The options argument may be omitted. If provided, it should be an object. The\noptions object may contain a boolean named persistent that indicates\nwhether the process should continue to run as long as files are being watched.\nThe options object may specify an interval property indicating how often the\ntarget should be polled in milliseconds.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The listener gets two arguments the current stat object and the previous\nstat object:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.watchFile('message.text', (curr, prev) => {\n  console.log(`the current mtime is: ${curr.mtime}`);\n  console.log(`the previous mtime was: ${prev.mtime}`);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              These stat objects are instances of fs.Stat. If the bigint option is true,\nthe numeric values in these objects are specified as BigInts.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              To be notified when the file was modified, not just accessed, it is necessary\nto compare curr.mtime and prev.mtime.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              When an fs.watchFile operation results in an ENOENT error, it\nwill invoke the listener once, with all the fields zeroed (or, for dates, the\nUnix Epoch). If the file is created later on, the listener will be called\nagain, with the latest stat objects. This is a change in functionality since\nv0.10.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              Using fs.watch() is more efficient than fs.watchFile and\nfs.unwatchFile. fs.watch should be used instead of fs.watchFile and\nfs.unwatchFile when possible.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              When a file being watched by fs.watchFile() disappears and reappears,\nthen the contents of previous in the second callback event (the file's\nreappearance) will be the same as the contents of previous in the first\ncallback event (its disappearance).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              This happens when:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • the file is deleted, followed by a restore
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • the file is renamed and then renamed a second time back to its original name
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`fs.write(fd, buffer[, offset[, length[, position]]], callback)`", @@ -7465,7 +7741,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Write string to the file specified by fd. If string is not a string, then\nthe value will be coerced to one.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              position refers to the offset from the beginning of the file where this data\nshould be written. If typeof position !== 'number' the data will be written at\nthe current position. See pwrite(2).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              encoding is the expected string encoding.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The callback will receive the arguments (err, written, string) where written\nspecifies how many bytes the passed string required to be written. Bytes\nwritten is not necessarily the same as string characters written. See\nBuffer.byteLength.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              It is unsafe to use fs.write() multiple times on the same file without waiting\nfor the callback. For this scenario, fs.createWriteStream() is\nrecommended.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Linux, positional writes don't work when the file is opened in append mode.\nThe kernel ignores the position argument and always appends the data to\nthe end of the file.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, if the file descriptor is connected to the console (e.g. fd == 1\nor stdout) a string containing non-ASCII characters will not be rendered\nproperly by default, regardless of the encoding used.\nIt is possible to configure the console to render UTF-8 properly by changing the\nactive codepage with the chcp 65001 command. See the chcp docs for more\ndetails.

                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Write string to the file specified by fd. If string is not a string, then\nthe value will be coerced to one.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              position refers to the offset from the beginning of the file where this data\nshould be written. If typeof position !== 'number' the data will be written at\nthe current position. See pwrite(2).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              encoding is the expected string encoding.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The callback will receive the arguments (err, written, string) where written\nspecifies how many bytes the passed string required to be written. Bytes\nwritten is not necessarily the same as string characters written. See\nBuffer.byteLength.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              It is unsafe to use fs.write() multiple times on the same file without waiting\nfor the callback. For this scenario, fs.createWriteStream() is\nrecommended.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Linux, positional writes don't work when the file is opened in append mode.\nThe kernel ignores the position argument and always appends the data to\nthe end of the file.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              On Windows, if the file descriptor is connected to the console (e.g. fd == 1\nor stdout) a string containing non-ASCII characters will not be rendered\nproperly by default, regardless of the encoding used.\nIt is possible to configure the console to render UTF-8 properly by changing the\nactive codepage with the chcp 65001 command. See the chcp docs for more\ndetails.

                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`fs.writeFile(file, data[, options], callback)`", @@ -7561,11 +7837,11 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              When file is a filename, asynchronously writes data to the file, replacing the\nfile if it already exists. data can be a string or a buffer.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              When file is a file descriptor, the behavior is similar to calling\nfs.write() directly (which is recommended). See the notes below on using\na file descriptor.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The encoding option is ignored if data is a buffer.

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              const data = new Uint8Array(Buffer.from('Hello Node.js'));\nfs.writeFile('message.txt', data, (err) => {\n  if (err) throw err;\n  console.log('The file has been saved!');\n});\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              If options is a string, then it specifies the encoding:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.writeFile('message.txt', 'Hello Node.js', 'utf8', callback);\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              It is unsafe to use fs.writeFile() multiple times on the same file without\nwaiting for the callback. For this scenario, fs.createWriteStream() is\nrecommended.

                                                                                                                                                                                                                                                                                                                                                                                              ", "modules": [ { - "textRaw": "Using `fs.writeFile()` with File Descriptors", + "textRaw": "Using `fs.writeFile()` with file descriptors", "name": "using_`fs.writefile()`_with_file_descriptors", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              When file is a file descriptor, the behavior is almost identical to directly\ncalling fs.write() like:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.write(fd, Buffer.from(data, options.encoding), callback);\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The difference from directly calling fs.write() is that under some unusual\nconditions, fs.write() may write only part of the buffer and will need to be\nretried to write the remaining data, whereas fs.writeFile() will retry until\nthe data is entirely written (or an error occurs).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The implications of this are a common source of confusion. In\nthe file descriptor case, the file is not replaced! The data is not necessarily\nwritten to the beginning of the file, and the file's original data may remain\nbefore and/or after the newly written data.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              For example, if fs.writeFile() is called twice in a row, first to write the\nstring 'Hello', then to write the string ', World', the file would contain\n'Hello, World', and might contain some of the file's original data (depending\non the size of the original file, and the position of the file descriptor). If\na file name had been used instead of a descriptor, the file would be guaranteed\nto contain only ', World'.

                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              When file is a file descriptor, the behavior is almost identical to directly\ncalling fs.write() like:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              fs.write(fd, Buffer.from(data, options.encoding), callback);\n
                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The difference from directly calling fs.write() is that under some unusual\nconditions, fs.write() may write only part of the buffer and will need to be\nretried to write the remaining data, whereas fs.writeFile() will retry until\nthe data is entirely written (or an error occurs).

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              The implications of this are a common source of confusion. In\nthe file descriptor case, the file is not replaced! The data is not necessarily\nwritten to the beginning of the file, and the file's original data may remain\nbefore and/or after the newly written data.

                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                              For example, if fs.writeFile() is called twice in a row, first to write the\nstring 'Hello', then to write the string ', World', the file would contain\n'Hello, World', and might contain some of the file's original data (depending\non the size of the original file, and the position of the file descriptor). If\na file name had been used instead of a descriptor, the file would be guaranteed\nto contain only ', World'.

                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", - "displayName": "Using `fs.writeFile()` with File Descriptors" + "displayName": "Using `fs.writeFile()` with file descriptors" } ] }, @@ -7855,7 +8131,7 @@ "textRaw": "`constants` {Object}", "type": "Object", "name": "constants", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Returns an object containing commonly used constants for file system\noperations. The specific constants currently defined are described in\nFS Constants.

                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              Returns an object containing commonly used constants for file system\noperations. The specific constants currently defined are described in\nFS constants.

                                                                                                                                                                                                                                                                                                                                                                                              " } ], "type": "module", diff -Nru nodejs-mozilla-12.18.1/doc/api/fs.md nodejs-mozilla-12.22.12/doc/api/fs.md --- nodejs-mozilla-12.18.1/doc/api/fs.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/fs.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# File System +# File system @@ -6,8 +6,10 @@ -The `fs` module provides an API for interacting with the file system in a -manner closely modeled around standard POSIX functions. + + +The `fs` module enables interacting with the file system in a +way modeled on standard POSIX functions. To use this module: @@ -15,12 +17,33 @@ const fs = require('fs'); ``` -All file system operations have synchronous and asynchronous forms. +All file system operations have synchronous, callback, and promise-based +forms. + +## Synchronous example + +The synchronous form blocks the Node.js event loop and further JavaScript +execution until the operation is complete. Exceptions are thrown immediately +and can be handled using `try…catch`, or can be allowed to bubble up. + +```js +const fs = require('fs'); + +try { + fs.unlinkSync('/tmp/hello'); + console.log('successfully deleted /tmp/hello'); +} catch (err) { + // handle the error +} +``` + +## Callback example -The asynchronous form always takes a completion callback as its last argument. -The arguments passed to the completion callback depend on the method, but the -first argument is always reserved for an exception. If the operation was -completed successfully, then the first argument will be `null` or `undefined`. +The callback form takes a completion callback function as its last +argument and invokes the operation asynchronously. The arguments passed to +the completion callback depend on the method, but the first argument is always +reserved for an exception. If the operation is completed successfully, then +the first argument is `null` or `undefined`. ```js const fs = require('fs'); @@ -31,23 +54,30 @@ }); ``` -Exceptions that occur using synchronous operations are thrown immediately and -may be handled using `try…catch`, or may be allowed to bubble up. +## Promise example + +Promise-based operations return a `Promise` that is resolved when the +asynchronous operation is complete. ```js -const fs = require('fs'); +const fs = require('fs').promises; -try { - fs.unlinkSync('/tmp/hello'); - console.log('successfully deleted /tmp/hello'); -} catch (err) { - // handle the error -} +(async function(path) { + try { + await fs.unlink(path); + console.log(`successfully deleted ${path}`); + } catch (error) { + console.error('there was an error:', error.message); + } +})('/tmp/hello'); ``` -There is no guaranteed ordering when using asynchronous methods. So the -following is prone to error because the `fs.stat()` operation may complete -before the `fs.rename()` operation: +## Ordering of callback and promise-based operations + +There is no guaranteed ordering when using either the callback or +promise-based methods. For example, the following is prone to error +because the `fs.stat()` operation might complete before the `fs.rename()` +operation: ```js fs.rename('/tmp/hello', '/tmp/world', (err) => { @@ -73,31 +103,20 @@ }); ``` -In busy processes, use the asynchronous versions of these calls. The synchronous -versions will block the entire process until they complete, halting all -connections. - -While it is not recommended, most fs functions allow the callback argument to -be omitted, in which case a default callback is used that rethrows errors. To -get a trace to the original call site, set the `NODE_DEBUG` environment -variable: +Or, use the promise-based API: -Omitting the callback function on asynchronous fs functions is deprecated and -may result in an error being thrown in the future. - -```console -$ cat script.js -function bad() { - require('fs').readFile('/'); -} -bad(); +```js +const fs = require('fs').promises; -$ env NODE_DEBUG=fs node script.js -fs.js:88 - throw backtrace; - ^ -Error: EISDIR: illegal operation on a directory, read - +(async function(from, to) { + try { + await fs.rename(from, to); + const stats = await fs.stat(to); + console.log(`stats: ${JSON.stringify(stats)}`); + } catch (error) { + console.error('there was an error:', error.message); + } +})('/tmp/hello', '/tmp/world'); ``` ## File paths @@ -107,7 +126,7 @@ String form paths are interpreted as UTF-8 character sequences identifying the absolute or relative filename. Relative paths will be resolved relative -to the current working directory as specified by `process.cwd()`. +to the current working directory as determined by calling `process.cwd()`. Example using an absolute path on POSIX: @@ -242,7 +261,7 @@ \ or / characters */ ``` -## File Descriptors +## File descriptors On POSIX systems, for every process, the kernel maintains a table of currently open files and resources. Each open file is assigned a simple numeric @@ -277,14 +296,14 @@ are completed. Failure to do so will result in a memory leak that will eventually cause an application to crash. -## Threadpool Usage +## Threadpool usage All file system APIs except `fs.FSWatcher()` and those that are explicitly synchronous use libuv's threadpool, which can have surprising and negative performance implications for some applications. See the [`UV_THREADPOOL_SIZE`][] documentation for more information. -## Class `fs.Dir` +## Class: `fs.Dir` @@ -579,6 +598,72 @@ Stop watching for changes on the given `fs.FSWatcher`. Once stopped, the `fs.FSWatcher` object is no longer usable. +### `watcher.ref()` + + +* Returns: {fs.FSWatcher} + +When called, requests that the Node.js event loop *not* exit so long as the +`FSWatcher` is active. Calling `watcher.ref()` multiple times will have +no effect. + +By default, all `FSWatcher` objects are "ref'ed", making it normally +unnecessary to call `watcher.ref()` unless `watcher.unref()` had been +called previously. + +### `watcher.unref()` + + +* Returns: {fs.FSWatcher} + +When called, the active `FSWatcher` object will not require the Node.js +event loop to remain active. If there is no other activity keeping the +event loop running, the process may exit before the `FSWatcher` object's +callback is invoked. Calling `watcher.unref()` multiple times will have +no effect. + +## Class: `fs.StatWatcher` + + +* Extends {EventEmitter} + +A successful call to `fs.watchFile()` method will return a new `fs.StatWatcher` +object. + +### `watcher.ref()` + + +* Returns: {fs.StatWatcher} + +When called, requests that the Node.js event loop *not* exit so long as the +`StatWatcher` is active. Calling `watcher.ref()` multiple times will have +no effect. + +By default, all `StatWatcher` objects are "ref'ed", making it normally +unnecessary to call `watcher.ref()` unless `watcher.unref()` had been +called previously. + +### `watcher.unref()` + + +* Returns: {fs.StatWatcher} + +When called, the active `StatWatcher` object will not require the Node.js +event loop to remain active. If there is no other activity keeping the +event loop running, the process may exit before the `StatWatcher` object's +callback is invoked. Calling `watcher.unref()` multiple times will have +no effect. + ## Class: `fs.ReadStream` * `src` {string|Buffer|URL} source filename to copy @@ -1610,6 +1703,11 @@ ## `fs.copyFileSync(src, dest[, flags])` * `src` {string|Buffer|URL} source filename to copy @@ -2310,6 +2408,8 @@ pr-url: https://github.com/nodejs/node/pull/7897 description: The `callback` parameter is no longer optional. Not passing it will emit a deprecation warning with id DEP0013. + - version: v0.4.7 + description: Documentation-only deprecation. --> * `path` {string|Buffer|URL} @@ -2327,6 +2427,8 @@ - version: v10.6.0 pr-url: https://github.com/nodejs/node/pull/21498 description: This API is no longer deprecated. + - version: v0.4.7 + description: Documentation-only deprecation. --> * `path` {string|Buffer|URL} @@ -2335,6 +2437,38 @@ Synchronous lchown(2). Returns `undefined`. +## `fs.lutimes(path, atime, mtime, callback)` + + +* `path` {string|Buffer|URL} +* `atime` {number|string|Date} +* `mtime` {number|string|Date} +* `callback` {Function} + * `err` {Error} + +Changes the access and modification times of a file in the same way as +[`fs.utimes()`][], with the difference that if the path refers to a symbolic +link, then the link is not dereferenced: instead, the timestamps of the +symbolic link itself are changed. + +No arguments other than a possible exception are given to the completion +callback. + +## `fs.lutimesSync(path, atime, mtime)` + + +* `path` {string|Buffer|URL} +* `atime` {number|string|Date} +* `mtime` {number|string|Date} + +Change the file system timestamps of the symbolic link referenced by `path`. +Returns `undefined`, or throws an exception when parameters are incorrect or +the operation fails. This is the synchronous version of [`fs.lutimes()`][]. + ## `fs.link(existingPath, newPath, callback)` @@ -3957,6 +4095,7 @@ * `listener` {Function} * `current` {fs.Stats} * `previous` {fs.Stats} +* Returns: {fs.StatWatcher} Watch for changes on `filename`. The callback `listener` will be called each time the file is accessed. @@ -3994,9 +4133,9 @@ `fs.unwatchFile` when possible. When a file being watched by `fs.watchFile()` disappears and reappears, -then the `previousStat` reported in the second callback event (the file's -reappearance) will be the same as the `previousStat` of the first callback -event (its disappearance). +then the contents of `previous` in the second callback event (the file's +reappearance) will be the same as the contents of `previous` in the first +callback event (its disappearance). This happens when: @@ -4175,12 +4314,12 @@ waiting for the callback. For this scenario, [`fs.createWriteStream()`][] is recommended. -### Using `fs.writeFile()` with File Descriptors +### Using `fs.writeFile()` with file descriptors When `file` is a file descriptor, the behavior is almost identical to directly calling `fs.write()` like: -```javascript +```js fs.write(fd, Buffer.from(data, options.encoding), callback); ``` @@ -4197,7 +4336,7 @@ For example, if `fs.writeFile()` is called twice in a row, first to write the string `'Hello'`, then to write the string `', World'`, the file would contain `'Hello, World'`, and might contain some of the file's original data (depending -on the size of the original file, and the position of the file descriptor). If +on the size of the original file, and the position of the file descriptor). If a file name had been used instead of a descriptor, the file would be guaranteed to contain only `', World'`. @@ -4325,7 +4464,7 @@ methods that return `Promise` objects rather than using callbacks. The API is accessible via `require('fs').promises`. -### class: `FileHandle` +### Class: `FileHandle` @@ -4751,7 +4890,7 @@ Tests a user's permissions for the file or directory specified by `path`. The `mode` argument is an optional integer that specifies the accessibility -checks to be performed. Check [File Access Constants][] for possible values +checks to be performed. Check [File access constants][] for possible values of `mode`. It is possible to create a mask consisting of the bitwise OR of two or more values (e.g. `fs.constants.W_OK | fs.constants.R_OK`). @@ -4825,6 +4964,11 @@ ### `fsPromises.copyFile(src, dest[, flags])` * `src` {string|Buffer|URL} source filename to copy @@ -4904,6 +5048,23 @@ Changes the ownership on a symbolic link then resolves the `Promise` with no arguments upon success. +### `fsPromises.lutimes(path, atime, mtime)` + + +* `path` {string|Buffer|URL} +* `atime` {number|string|Date} +* `mtime` {number|string|Date} +* Returns: {Promise} + +Changes the access and modification times of a file in the same way as +[`fsPromises.utimes()`][], with the difference that if the path refers to a +symbolic link, then the link is not dereferenced: instead, the timestamps of +the symbolic link itself are changed. + +Upon success, the `Promise` is resolved without arguments. + ### `fsPromises.link(existingPath, newPath)` - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/globals.json nodejs-mozilla-12.22.12/doc/api/globals.json --- nodejs-mozilla-12.18.1/doc/api/globals.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/globals.json 2022-04-05 07:17:04.000000000 +0000 @@ -211,8 +211,8 @@ ], "miscs": [ { - "textRaw": "Global Objects", - "name": "Global Objects", + "textRaw": "Global objects", + "name": "Global objects", "introduced_in": "v0.10.0", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                              These objects are available in all modules. The following variables may appear\nto be global but are not. They exist only in the scope of modules, see the\nmodule system documentation:

                                                                                                                                                                                                                                                                                                                                                                                              \n\n

                                                                                                                                                                                                                                                                                                                                                                                              The objects listed here are specific to Node.js. There are built-in objects\nthat are part of the JavaScript language itself, which are also globally\naccessible.

                                                                                                                                                                                                                                                                                                                                                                                              ", diff -Nru nodejs-mozilla-12.18.1/doc/api/globals.md nodejs-mozilla-12.22.12/doc/api/globals.md --- nodejs-mozilla-12.18.1/doc/api/globals.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/globals.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# Global Objects +# Global objects diff -Nru nodejs-mozilla-12.18.1/doc/api/http2.html nodejs-mozilla-12.22.12/doc/api/http2.html --- nodejs-mozilla-12.18.1/doc/api/http2.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/http2.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - HTTP/2 | Node.js v12.18.1 Documentation + + HTTP/2 | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                              Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                              Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                              The 'remoteSettings' event is emitted when a new SETTINGS frame is received from the connected peer.

                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              session.on('remoteSettings', (settings) => {
                                                                                                                                                                                                                                                                                                                                                                                              -  /* Use the new settings */
                                                                                                                                                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              session.on('remoteSettings', (settings) => {
                                                                                                                                                                                                                                                                                                                                                                                              +  /* Use the new settings */
                                                                                                                                                                                                                                                                                                                                                                                              +});

                                                                                                                                                                                                                                                                                                                                                                                              Event: 'stream'#

                                                                                                                                                                                                                                                                                                                                                                                            The 'stream' event is emitted when a new Http2Stream is created.

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                            -session.on('stream', (stream, headers, flags) => {
                                                                                                                                                                                                                                                                                                                                                                                            -  const method = headers[':method'];
                                                                                                                                                                                                                                                                                                                                                                                            -  const path = headers[':path'];
                                                                                                                                                                                                                                                                                                                                                                                            -  // ...
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                            +session.on('stream', (stream, headers, flags) => {
                                                                                                                                                                                                                                                                                                                                                                                            +  const method = headers[':method'];
                                                                                                                                                                                                                                                                                                                                                                                            +  const path = headers[':path'];
                                                                                                                                                                                                                                                                                                                                                                                            +  // ...
                                                                                                                                                                                                                                                                                                                                                                                               stream.respond({
                                                                                                                                                                                                                                                                                                                                                                                            -    ':status': 200,
                                                                                                                                                                                                                                                                                                                                                                                            -    'content-type': 'text/plain'
                                                                                                                                                                                                                                                                                                                                                                                            +    ':status': 200,
                                                                                                                                                                                                                                                                                                                                                                                            +    'content-type': 'text/plain; charset=utf-8'
                                                                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                                                                            -  stream.write('hello ');
                                                                                                                                                                                                                                                                                                                                                                                            -  stream.end('world');
                                                                                                                                                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            + stream.write('hello '); + stream.end('world'); +});

                                                                                                                                                                                                                                                                                                                                                                                            On the server side, user code will typically not listen for this event directly, and would instead register a handler for the 'stream' event emitted by the net.Server or tls.Server instances returned by http2.createServer() and http2.createSecureServer(), respectively, as in the example below:

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                            -// Create an unencrypted HTTP/2 server
                                                                                                                                                                                                                                                                                                                                                                                            -const server = http2.createServer();
                                                                                                                                                                                                                                                                                                                                                                                            +// Create an unencrypted HTTP/2 server
                                                                                                                                                                                                                                                                                                                                                                                            +const server = http2.createServer();
                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                            -server.on('stream', (stream, headers) => {
                                                                                                                                                                                                                                                                                                                                                                                            +server.on('stream', (stream, headers) => {
                                                                                                                                                                                                                                                                                                                                                                                               stream.respond({
                                                                                                                                                                                                                                                                                                                                                                                            -    'content-type': 'text/html',
                                                                                                                                                                                                                                                                                                                                                                                            -    ':status': 200
                                                                                                                                                                                                                                                                                                                                                                                            +    'content-type': 'text/html; charset=utf-8',
                                                                                                                                                                                                                                                                                                                                                                                            +    ':status': 200
                                                                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                                                                            -  stream.on('error', (error) => console.error(error));
                                                                                                                                                                                                                                                                                                                                                                                            -  stream.end('<h1>Hello World</h1>');
                                                                                                                                                                                                                                                                                                                                                                                            +  stream.on('error', (error) => console.error(error));
                                                                                                                                                                                                                                                                                                                                                                                            +  stream.end('<h1>Hello World</h1>');
                                                                                                                                                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                            -server.listen(80);
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +server.listen(80);

                                                                                                                                                                                                                                                                                                                                                                                            Even though HTTP/2 streams and network sockets are not in a 1:1 correspondence, a network error will destroy each individual stream and must be handled on the stream level, as shown above.

                                                                                                                                                                                                                                                                                                                                                                                            @@ -612,9 +606,8 @@ for this Http2Session, the 'timeout' event is emitted if there is no activity on the Http2Session after the configured number of milliseconds. Its listener does not expect any arguments.

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            session.setTimeout(2000);
                                                                                                                                                                                                                                                                                                                                                                                            -session.on('timeout', () => { /* .. */ });
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            session.setTimeout(2000);
                                                                                                                                                                                                                                                                                                                                                                                            +session.on('timeout', () => { /* .. */ });

                                                                                                                                                                                                                                                                                                                                                                                            http2session.alpnProtocol#

                                                                                                                                                                                                                                                                                                                                                                                            • settings <HTTP/2 Settings Object>
                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                              callback <Function> Callback that is called once the session is connected or -right away if the session is already connected.

                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                            • callback <Function> Callback that is called once the session is connected or +right away if the session is already connected.

                                                                                                                                                                                                                                                                                                                                                                                              Submits an ALTSVC frame (as defined by RFC 7838) to the connected client.

                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                              -const server = http2.createServer();
                                                                                                                                                                                                                                                                                                                                                                                              -server.on('session', (session) => {
                                                                                                                                                                                                                                                                                                                                                                                              -  // Set altsvc for origin https://example.org:80
                                                                                                                                                                                                                                                                                                                                                                                              -  session.altsvc('h2=":8000"', 'https://example.org:80');
                                                                                                                                                                                                                                                                                                                                                                                              +const server = http2.createServer();
                                                                                                                                                                                                                                                                                                                                                                                              +server.on('session', (session) => {
                                                                                                                                                                                                                                                                                                                                                                                              +  // Set altsvc for origin https://example.org:80
                                                                                                                                                                                                                                                                                                                                                                                              +  session.altsvc('h2=":8000"', 'https://example.org:80');
                                                                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                              -server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                                                              -  // Set altsvc for a specific stream
                                                                                                                                                                                                                                                                                                                                                                                              -  stream.session.altsvc('h2=":8000"', stream.id);
                                                                                                                                                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              +server.on('stream', (stream) => { + // Set altsvc for a specific stream + stream.session.altsvc('h2=":8000"', stream.id); +});

                                                                                                                                                                                                                                                                                                                                                                                              Sending an ALTSVC frame with a specific stream ID indicates that the alternate service is associated with the origin of the given Http2Stream.

                                                                                                                                                                                                                                                                                                                                                                                              The alt and origin string must contain only ASCII bytes and are @@ -954,17 +943,16 @@

                                                                                                                                                                                                                                                                                                                                                                                              Submits an ORIGIN frame (as defined by RFC 8336) to the connected client to advertise the set of origins for which the server is capable of providing authoritative responses.

                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                              -const options = getSecureOptionsSomehow();
                                                                                                                                                                                                                                                                                                                                                                                              -const server = http2.createSecureServer(options);
                                                                                                                                                                                                                                                                                                                                                                                              -server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                              +const options = getSecureOptionsSomehow();
                                                                                                                                                                                                                                                                                                                                                                                              +const server = http2.createSecureServer(options);
                                                                                                                                                                                                                                                                                                                                                                                              +server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                                                                 stream.respond();
                                                                                                                                                                                                                                                                                                                                                                                              -  stream.end('ok');
                                                                                                                                                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                                                                                                                                                              -server.on('session', (session) => {
                                                                                                                                                                                                                                                                                                                                                                                              -  session.origin('https://example.com', 'https://example.org');
                                                                                                                                                                                                                                                                                                                                                                                              +  stream.end('ok');
                                                                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              +server.on('session', (session) => { + session.origin('https://example.com', 'https://example.org'); +});

                                                                                                                                                                                                                                                                                                                                                                                              When a string is passed as an origin, it will be parsed as a URL and the origin will be derived. For instance, the origin for the HTTP URL 'https://example.org/foo/bar' is the ASCII string @@ -976,15 +964,14 @@ ASCII origin.

                                                                                                                                                                                                                                                                                                                                                                                              Alternatively, the origins option may be used when creating a new HTTP/2 server using the http2.createSecureServer() method:

                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                              -const options = getSecureOptionsSomehow();
                                                                                                                                                                                                                                                                                                                                                                                              -options.origins = ['https://example.com', 'https://example.org'];
                                                                                                                                                                                                                                                                                                                                                                                              -const server = http2.createSecureServer(options);
                                                                                                                                                                                                                                                                                                                                                                                              -server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              const http2 = require('http2');
                                                                                                                                                                                                                                                                                                                                                                                              +const options = getSecureOptionsSomehow();
                                                                                                                                                                                                                                                                                                                                                                                              +options.origins = ['https://example.com', 'https://example.org'];
                                                                                                                                                                                                                                                                                                                                                                                              +const server = http2.createSecureServer(options);
                                                                                                                                                                                                                                                                                                                                                                                              +server.on('stream', (stream) => {
                                                                                                                                                                                                                                                                                                                                                                                                 stream.respond();
                                                                                                                                                                                                                                                                                                                                                                                              -  stream.end('ok');
                                                                                                                                                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              + stream.end('ok'); +});

                                                                                                                                                                                                                                                                                                                                                                                              Class: ClientHttp2Session#

                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/index.md nodejs-mozilla-12.22.12/doc/api/index.md --- nodejs-mozilla-12.18.1/doc/api/index.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/index.md 2022-04-05 07:17:04.000000000 +0000 @@ -5,62 +5,65 @@ -* [About these Docs](documentation.html) -* [Usage & Example](synopsis.html) +* [About this documentation](documentation.html) +* [Usage and example](synopsis.html) -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              -* [Assertion Testing](assert.html) -* [Async Hooks](async_hooks.html) +* [Assertion testing](assert.html) +* [Async hooks](async_hooks.html) * [Buffer](buffer.html) * [C++ Addons](addons.html) * [C/C++ Addons with N-API](n-api.html) +* [C++ Embedder API](embedding.html) * [Child Processes](child_process.html) * [Cluster](cluster.html) -* [Command Line Options](cli.html) +* [Command line options](cli.html) * [Console](console.html) * [Crypto](crypto.html) * [Debugger](debugger.html) * [Deprecated APIs](deprecations.html) * [DNS](dns.html) * [Domain](domain.html) -* [ECMAScript Modules](esm.html) * [Errors](errors.html) * [Events](events.html) -* [File System](fs.html) +* [File system](fs.html) * [Globals](globals.html) * [HTTP](http.html) * [HTTP/2](http2.html) * [HTTPS](https.html) * [Inspector](inspector.html) * [Internationalization](intl.html) -* [Modules](modules.html) +* [Modules: CommonJS modules](modules.html) +* [Modules: ECMAScript modules](esm.html) +* [Modules: `module` API](module.html) +* [Modules: Packages](packages.html) * [Net](net.html) * [OS](os.html) * [Path](path.html) -* [Performance Hooks](perf_hooks.html) +* [Performance hooks](perf_hooks.html) * [Policies](policy.html) * [Process](process.html) * [Punycode](punycode.html) -* [Query Strings](querystring.html) +* [Query strings](querystring.html) * [Readline](readline.html) * [REPL](repl.html) * [Report](report.html) * [Stream](stream.html) -* [String Decoder](string_decoder.html) +* [String decoder](string_decoder.html) * [Timers](timers.html) * [TLS/SSL](tls.html) -* [Trace Events](tracing.html) +* [Trace events](tracing.html) * [TTY](tty.html) -* [UDP/Datagram](dgram.html) +* [UDP/datagram](dgram.html) * [URL](url.html) * [Utilities](util.html) * [V8](v8.html) * [VM](vm.html) * [WASI](wasi.html) -* [Worker Threads](worker_threads.html) +* [Worker threads](worker_threads.html) * [Zlib](zlib.html) -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              -* [GitHub Repo & Issue Tracker](https://github.com/nodejs/node) +* [Code repository and issue tracker](https://github.com/nodejs/node) diff -Nru nodejs-mozilla-12.18.1/doc/api/inspector.html nodejs-mozilla-12.22.12/doc/api/inspector.html --- nodejs-mozilla-12.18.1/doc/api/inspector.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/inspector.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Inspector | Node.js v12.18.1 Documentation + + Inspector | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                              Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                              Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                              The inspector.Session is used for dispatching messages to the V8 inspector back-end and receiving message responses and notifications.

                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                              Constructor: new inspector.Session()#

                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                              new inspector.Session()#

                                                                                                                                                                                                                                                                                                                                                                                              @@ -226,10 +228,9 @@
                                                                                                                                                                                                                                                                                                                                                                                            • <Object> The notification message object

                                                                                                                                                                                                                                                                                                                                                                                            Emitted when any notification from the V8 Inspector is received.

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            session.on('inspectorNotification', (message) => console.log(message.method));
                                                                                                                                                                                                                                                                                                                                                                                            -// Debugger.paused
                                                                                                                                                                                                                                                                                                                                                                                            -// Debugger.resumed
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            session.on('inspectorNotification', (message) => console.log(message.method));
                                                                                                                                                                                                                                                                                                                                                                                            +// Debugger.paused
                                                                                                                                                                                                                                                                                                                                                                                            +// Debugger.resumed

                                                                                                                                                                                                                                                                                                                                                                                            It is also possible to subscribe only to notifications with specific method:

                                                                                                                                                                                                                                                                                                                                                                                            Event: <inspector-protocol-method>;#

                                                                                                                                                                                                                                                                                                                                                                                            - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/inspector.json nodejs-mozilla-12.22.12/doc/api/inspector.json --- nodejs-mozilla-12.18.1/doc/api/inspector.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/inspector.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v8.0.0", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The inspector module provides an API for interacting with the V8 inspector.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            const inspector = require('inspector');\n
                                                                                                                                                                                                                                                                                                                                                                                            ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Source Code: lib/inspector.js

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            The inspector module provides an API for interacting with the V8 inspector.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            const inspector = require('inspector');\n
                                                                                                                                                                                                                                                                                                                                                                                            ", "methods": [ { "textRaw": "`inspector.close()`", @@ -231,18 +231,18 @@ ], "modules": [ { - "textRaw": "CPU Profiler", + "textRaw": "CPU profiler", "name": "cpu_profiler", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Here's an example showing how to use the CPU Profiler:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            const inspector = require('inspector');\nconst fs = require('fs');\nconst session = new inspector.Session();\nsession.connect();\n\nsession.post('Profiler.enable', () => {\n  session.post('Profiler.start', () => {\n    // Invoke business logic under measurement here...\n\n    // some time later...\n    session.post('Profiler.stop', (err, { profile }) => {\n      // Write profile to disk, upload, etc.\n      if (!err) {\n        fs.writeFileSync('./profile.cpuprofile', JSON.stringify(profile));\n      }\n    });\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                            ", "type": "module", - "displayName": "CPU Profiler" + "displayName": "CPU profiler" }, { - "textRaw": "Heap Profiler", + "textRaw": "Heap profiler", "name": "heap_profiler", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Here's an example showing how to use the Heap Profiler:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            const inspector = require('inspector');\nconst fs = require('fs');\nconst session = new inspector.Session();\n\nconst fd = fs.openSync('profile.heapsnapshot', 'w');\n\nsession.connect();\n\nsession.on('HeapProfiler.addHeapSnapshotChunk', (m) => {\n  fs.writeSync(fd, m.params.chunk);\n});\n\nsession.post('HeapProfiler.takeHeapSnapshot', null, (err, r) => {\n  console.log('HeapProfiler.takeHeapSnapshot done:', err, r);\n  session.disconnect();\n  fs.closeSync(fd);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                            ", "type": "module", - "displayName": "Heap Profiler" + "displayName": "Heap profiler" } ], "signatures": [ diff -Nru nodejs-mozilla-12.18.1/doc/api/inspector.md nodejs-mozilla-12.22.12/doc/api/inspector.md --- nodejs-mozilla-12.18.1/doc/api/inspector.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/inspector.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 1 - Experimental + + The `inspector` module provides an API for interacting with the V8 inspector. It can be accessed using: @@ -84,7 +86,7 @@ The `inspector.Session` is used for dispatching messages to the V8 inspector back-end and receiving message responses and notifications. -### Constructor: `new inspector.Session()` +### `new inspector.Session()` @@ -188,7 +190,7 @@ Apart from the debugger, various V8 Profilers are available through the DevTools protocol. -### CPU Profiler +### CPU profiler Here's an example showing how to use the [CPU Profiler][]: @@ -213,7 +215,7 @@ }); ``` -### Heap Profiler +### Heap profiler Here's an example showing how to use the [Heap Profiler][]: @@ -237,8 +239,8 @@ }); ``` -[`'Debugger.paused'`]: https://chromedevtools.github.io/devtools-protocol/v8/Debugger#event-paused -[`session.connect()`]: #inspector_session_connect [CPU Profiler]: https://chromedevtools.github.io/devtools-protocol/v8/Profiler [Chrome DevTools Protocol Viewer]: https://chromedevtools.github.io/devtools-protocol/v8/ [Heap Profiler]: https://chromedevtools.github.io/devtools-protocol/v8/HeapProfiler +[`'Debugger.paused'`]: https://chromedevtools.github.io/devtools-protocol/v8/Debugger#event-paused +[`session.connect()`]: #inspector_session_connect diff -Nru nodejs-mozilla-12.18.1/doc/api/intl.html nodejs-mozilla-12.22.12/doc/api/intl.html --- nodejs-mozilla-12.18.1/doc/api/intl.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/intl.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Internationalization Support | Node.js v12.18.1 Documentation + + Internationalization support | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                            - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/intl.json nodejs-mozilla-12.22.12/doc/api/intl.json --- nodejs-mozilla-12.18.1/doc/api/intl.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/intl.json 2022-04-05 07:17:04.000000000 +0000 @@ -4,11 +4,11 @@ "introduced_in": "v8.2.0", "miscs": [ { - "textRaw": "Internationalization Support", - "name": "Internationalization Support", + "textRaw": "Internationalization support", + "name": "Internationalization support", "introduced_in": "v8.2.0", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Node.js has many features that make it easier to write internationalized\nprograms. Some of them are:

                                                                                                                                                                                                                                                                                                                                                                                            \n\n

                                                                                                                                                                                                                                                                                                                                                                                            Node.js (and its underlying V8 engine) uses ICU to implement these features\nin native C/C++ code. However, some of them require a very large ICU data file\nin order to support all locales of the world. Because it is expected that most\nNode.js users will make use of only a small portion of ICU functionality, only\na subset of the full ICU data set is provided by Node.js by default. Several\noptions are provided for customizing and expanding the ICU data set either when\nbuilding or running Node.js.

                                                                                                                                                                                                                                                                                                                                                                                            ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Node.js has many features that make it easier to write internationalized\nprograms. Some of them are:

                                                                                                                                                                                                                                                                                                                                                                                            \n\n

                                                                                                                                                                                                                                                                                                                                                                                            Node.js (and its underlying V8 engine) uses ICU to implement these features\nin native C/C++ code. However, some of them require a very large ICU data file\nin order to support all locales of the world. Because it is expected that most\nNode.js users will make use of only a small portion of ICU functionality, only\na subset of the full ICU data set is provided by Node.js by default. Several\noptions are provided for customizing and expanding the ICU data set either when\nbuilding or running Node.js.

                                                                                                                                                                                                                                                                                                                                                                                            ", "miscs": [ { "textRaw": "Options for building Node.js", @@ -37,7 +37,7 @@ { "textRaw": "Providing ICU data at runtime", "name": "providing_icu_data_at_runtime", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            If the small-icu option is used, one can still provide additional locale data\nat runtime so that the JS methods would work for all ICU locales. Assuming the\ndata file is stored at /some/directory, it can be made available to ICU\nthrough either:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n

                                                                                                                                                                                                                                                                                                                                                                                              The NODE_ICU_DATA environment variable:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              env NODE_ICU_DATA=/some/directory node\n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n

                                                                                                                                                                                                                                                                                                                                                                                              The --icu-data-dir CLI parameter:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              node --icu-data-dir=/some/directory\n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            (If both are specified, the --icu-data-dir CLI parameter takes precedence.)

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            ICU is able to automatically find and load a variety of data formats, but the\ndata must be appropriate for the ICU version, and the file correctly named.\nThe most common name for the data file is icudt6X[bl].dat, where 6X denotes\nthe intended ICU version, and b or l indicates the system's endianness.\nCheck \"ICU Data\" article in the ICU User Guide for other supported formats\nand more details on ICU data in general.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            The full-icu npm module can greatly simplify ICU data installation by\ndetecting the ICU version of the running node executable and downloading the\nappropriate data file. After installing the module through npm i full-icu,\nthe data file will be available at ./node_modules/full-icu. This path can be\nthen passed either to NODE_ICU_DATA or --icu-data-dir as shown above to\nenable full Intl support.

                                                                                                                                                                                                                                                                                                                                                                                            ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            If the small-icu option is used, one can still provide additional locale data\nat runtime so that the JS methods would work for all ICU locales. Assuming the\ndata file is stored at /some/directory, it can be made available to ICU\nthrough either:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n

                                                                                                                                                                                                                                                                                                                                                                                              The NODE_ICU_DATA environment variable:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              env NODE_ICU_DATA=/some/directory node\n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n

                                                                                                                                                                                                                                                                                                                                                                                              The --icu-data-dir CLI parameter:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                              node --icu-data-dir=/some/directory\n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            (If both are specified, the --icu-data-dir CLI parameter takes precedence.)

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            ICU is able to automatically find and load a variety of data formats, but the\ndata must be appropriate for the ICU version, and the file correctly named.\nThe most common name for the data file is icudt6X[bl].dat, where 6X denotes\nthe intended ICU version, and b or l indicates the system's endianness.\nCheck \"ICU Data\" article in the ICU User Guide for other supported formats\nand more details on ICU data in general.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            The full-icu npm module can greatly simplify ICU data installation by\ndetecting the ICU version of the running node executable and downloading the\nappropriate data file. After installing the module through npm i full-icu,\nthe data file will be available at ./node_modules/full-icu. This path can be\nthen passed either to NODE_ICU_DATA or --icu-data-dir as shown above to\nenable full Intl support.

                                                                                                                                                                                                                                                                                                                                                                                            ", "type": "module", "displayName": "Providing ICU data at runtime" } diff -Nru nodejs-mozilla-12.18.1/doc/api/intl.md nodejs-mozilla-12.22.12/doc/api/intl.md --- nodejs-mozilla-12.18.1/doc/api/intl.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/intl.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# Internationalization Support +# Internationalization support @@ -119,13 +119,13 @@ * The [`NODE_ICU_DATA`][] environment variable: - ```shell + ```bash env NODE_ICU_DATA=/some/directory node ``` * The [`--icu-data-dir`][] CLI parameter: - ```shell + ```bash node --icu-data-dir=/some/directory ``` diff -Nru nodejs-mozilla-12.18.1/doc/api/module.html nodejs-mozilla-12.22.12/doc/api/module.html --- nodejs-mozilla-12.18.1/doc/api/module.html 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/module.html 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,318 @@ + + + + + + + Modules: module API | Node.js v12.22.12 Documentation + + + + + + +
                                                                                                                                                                                                                                                                                                                                                                                            + + +
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            + + + +
                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            Modules: module API#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            The Module object#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            Provides general utility methods when interacting with instances of +Module, the module variable often seen in CommonJS modules. Accessed +via import 'module' or require('module').

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            module.builtinModules#

                                                                                                                                                                                                                                                                                                                                                                                            + + +

                                                                                                                                                                                                                                                                                                                                                                                            A list of the names of all modules provided by Node.js. Can be used to verify +if a module is maintained by a third party or not.

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            module in this context isn't the same object that's provided +by the module wrapper. To access it, require the Module module:

                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            // module.mjs
                                                                                                                                                                                                                                                                                                                                                                                            +// In an ECMAScript module
                                                                                                                                                                                                                                                                                                                                                                                            +import { builtinModules as builtin } from 'module';
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            // module.cjs
                                                                                                                                                                                                                                                                                                                                                                                            +// In a CommonJS module
                                                                                                                                                                                                                                                                                                                                                                                            +const builtin = require('module').builtinModules;
                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            module.createRequire(filename)#

                                                                                                                                                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                            • filename <string> | <URL> Filename to be used to construct the require +function. Must be a file URL object, file URL string, or absolute path +string.
                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                            • Returns: <require> Require function
                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            import { createRequire } from 'module';
                                                                                                                                                                                                                                                                                                                                                                                            +const require = createRequire(import.meta.url);
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +// sibling-module.js is a CommonJS module.
                                                                                                                                                                                                                                                                                                                                                                                            +const siblingModule = require('./sibling-module');
                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            module.createRequireFromPath(filename)#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            Stability: 0 - Deprecated: Please use createRequire() instead.

                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                            • filename <string> Filename to be used to construct the relative require +function.
                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                            • Returns: <require> Require function
                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            const { createRequireFromPath } = require('module');
                                                                                                                                                                                                                                                                                                                                                                                            +const requireUtil = createRequireFromPath('../src/utils/');
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +// Require `../src/utils/some-tool`
                                                                                                                                                                                                                                                                                                                                                                                            +requireUtil('./some-tool');
                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            module.syncBuiltinESMExports()#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            The module.syncBuiltinESMExports() method updates all the live bindings for +builtin ES Modules to match the properties of the CommonJS exports. It +does not add or remove exported names from the ES Modules.

                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                                            +const { syncBuiltinESMExports } = require('module');
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +fs.readFile = null;
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +delete fs.readFileSync;
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +fs.newAPI = function newAPI() {
                                                                                                                                                                                                                                                                                                                                                                                            +  // ...
                                                                                                                                                                                                                                                                                                                                                                                            +};
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +syncBuiltinESMExports();
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +import('fs').then((esmFS) => {
                                                                                                                                                                                                                                                                                                                                                                                            +  assert.strictEqual(esmFS.readFile, null);
                                                                                                                                                                                                                                                                                                                                                                                            +  assert.strictEqual('readFileSync' in fs, true);
                                                                                                                                                                                                                                                                                                                                                                                            +  assert.strictEqual(esmFS.newAPI, undefined);
                                                                                                                                                                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            Source map v3 support#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            Helpers for interacting with the source map cache. This cache is +populated when source map parsing is enabled and +source map include directives are found in a modules' footer.

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            To enable source map parsing, Node.js must be run with the flag +--enable-source-maps, or with code coverage enabled by setting +NODE_V8_COVERAGE=dir.

                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            // module.mjs
                                                                                                                                                                                                                                                                                                                                                                                            +// In an ECMAScript module
                                                                                                                                                                                                                                                                                                                                                                                            +import { findSourceMap, SourceMap } from 'module';
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            // module.cjs
                                                                                                                                                                                                                                                                                                                                                                                            +// In a CommonJS module
                                                                                                                                                                                                                                                                                                                                                                                            +const { findSourceMap, SourceMap } = require('module');
                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            module.findSourceMap(path[, error])#

                                                                                                                                                                                                                                                                                                                                                                                            + + +

                                                                                                                                                                                                                                                                                                                                                                                            path is the resolved path for the file for which a corresponding source map +should be fetched.

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            The error instance should be passed as the second parameter to findSourceMap +in exceptional flows, such as when an overridden +Error.prepareStackTrace(error, trace) is invoked. Modules are not added to +the module cache until they are successfully loaded. In these cases, source maps +are associated with the error instance along with the path.

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            Class: module.SourceMap#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            new SourceMap(payload)#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            Creates a new sourceMap instance.

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            payload is an object with keys matching the Source map v3 format:

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            sourceMap.payload#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            Getter for the payload used to construct the SourceMap instance.

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            sourceMap.findEntry(lineNumber, columnNumber)#

                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                            Given a line number and column number in the generated source file, returns +an object representing the position in the original file. The object returned +consists of the following keys:

                                                                                                                                                                                                                                                                                                                                                                                            + + +
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            + + diff -Nru nodejs-mozilla-12.18.1/doc/api/module.json nodejs-mozilla-12.22.12/doc/api/module.json --- nodejs-mozilla-12.18.1/doc/api/module.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/module.json 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,237 @@ +{ + "type": "module", + "source": "doc/api/module.md", + "modules": [ + { + "textRaw": "Modules: `module` API", + "name": "modules:_`module`_api", + "introduced_in": "v0.3.7", + "modules": [ + { + "textRaw": "The `Module` object", + "name": "the_`module`_object", + "desc": "\n

                                                                                                                                                                                                                                                                                                                                                                                            Provides general utility methods when interacting with instances of\nModule, the module variable often seen in CommonJS modules. Accessed\nvia import 'module' or require('module').

                                                                                                                                                                                                                                                                                                                                                                                            ", + "properties": [ + { + "textRaw": "`builtinModules` {string[]}", + "type": "string[]", + "name": "builtinModules", + "meta": { + "added": [ + "v9.3.0", + "v8.10.0", + "v6.13.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            A list of the names of all modules provided by Node.js. Can be used to verify\nif a module is maintained by a third party or not.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            module in this context isn't the same object that's provided\nby the module wrapper. To access it, require the Module module:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            // module.mjs\n// In an ECMAScript module\nimport { builtinModules as builtin } from 'module';\n
                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            // module.cjs\n// In a CommonJS module\nconst builtin = require('module').builtinModules;\n
                                                                                                                                                                                                                                                                                                                                                                                            " + } + ], + "methods": [ + { + "textRaw": "`module.createRequire(filename)`", + "type": "method", + "name": "createRequire", + "meta": { + "added": [ + "v12.2.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {require} Require function", + "name": "return", + "type": "require", + "desc": "Require function" + }, + "params": [ + { + "textRaw": "`filename` {string|URL} Filename to be used to construct the require function. Must be a file URL object, file URL string, or absolute path string.", + "name": "filename", + "type": "string|URL", + "desc": "Filename to be used to construct the require function. Must be a file URL object, file URL string, or absolute path string." + } + ] + } + ], + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                            import { createRequire } from 'module';\nconst require = createRequire(import.meta.url);\n\n// sibling-module.js is a CommonJS module.\nconst siblingModule = require('./sibling-module');\n
                                                                                                                                                                                                                                                                                                                                                                                            " + }, + { + "textRaw": "`module.createRequireFromPath(filename)`", + "type": "method", + "name": "createRequireFromPath", + "meta": { + "added": [ + "v10.12.0" + ], + "deprecated": [ + "v12.2.0" + ], + "changes": [] + }, + "stability": 0, + "stabilityText": "Deprecated: Please use [`createRequire()`][] instead.", + "signatures": [ + { + "return": { + "textRaw": "Returns: {require} Require function", + "name": "return", + "type": "require", + "desc": "Require function" + }, + "params": [ + { + "textRaw": "`filename` {string} Filename to be used to construct the relative require function.", + "name": "filename", + "type": "string", + "desc": "Filename to be used to construct the relative require function." + } + ] + } + ], + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                            const { createRequireFromPath } = require('module');\nconst requireUtil = createRequireFromPath('../src/utils/');\n\n// Require `../src/utils/some-tool`\nrequireUtil('./some-tool');\n
                                                                                                                                                                                                                                                                                                                                                                                            " + }, + { + "textRaw": "`module.syncBuiltinESMExports()`", + "type": "method", + "name": "syncBuiltinESMExports", + "meta": { + "added": [ + "v12.12.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The module.syncBuiltinESMExports() method updates all the live bindings for\nbuiltin ES Modules to match the properties of the CommonJS exports. It\ndoes not add or remove exported names from the ES Modules.

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');\nconst { syncBuiltinESMExports } = require('module');\n\nfs.readFile = null;\n\ndelete fs.readFileSync;\n\nfs.newAPI = function newAPI() {\n  // ...\n};\n\nsyncBuiltinESMExports();\n\nimport('fs').then((esmFS) => {\n  assert.strictEqual(esmFS.readFile, null);\n  assert.strictEqual('readFileSync' in fs, true);\n  assert.strictEqual(esmFS.newAPI, undefined);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                            " + } + ], + "type": "module", + "displayName": "The `Module` object" + }, + { + "textRaw": "Source map v3 support", + "name": "source_map_v3_support", + "meta": { + "added": [ + "v13.7.0", + "v12.17.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Helpers for interacting with the source map cache. This cache is\npopulated when source map parsing is enabled and\nsource map include directives are found in a modules' footer.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            To enable source map parsing, Node.js must be run with the flag\n--enable-source-maps, or with code coverage enabled by setting\nNODE_V8_COVERAGE=dir.

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            // module.mjs\n// In an ECMAScript module\nimport { findSourceMap, SourceMap } from 'module';\n
                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            // module.cjs\n// In a CommonJS module\nconst { findSourceMap, SourceMap } = require('module');\n
                                                                                                                                                                                                                                                                                                                                                                                            ", + "methods": [ + { + "textRaw": "`module.findSourceMap(path[, error])`", + "type": "method", + "name": "findSourceMap", + "meta": { + "added": [ + "v13.7.0", + "v12.17.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {module.SourceMap}", + "name": "return", + "type": "module.SourceMap" + }, + "params": [ + { + "textRaw": "`path` {string}", + "name": "path", + "type": "string" + }, + { + "textRaw": "`error` {Error}", + "name": "error", + "type": "Error" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            path is the resolved path for the file for which a corresponding source map\nshould be fetched.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            The error instance should be passed as the second parameter to findSourceMap\nin exceptional flows, such as when an overridden\nError.prepareStackTrace(error, trace) is invoked. Modules are not added to\nthe module cache until they are successfully loaded. In these cases, source maps\nare associated with the error instance along with the path.

                                                                                                                                                                                                                                                                                                                                                                                            " + } + ], + "classes": [ + { + "textRaw": "Class: `module.SourceMap`", + "type": "class", + "name": "module.SourceMap", + "meta": { + "added": [ + "v13.7.0", + "v12.17.0" + ], + "changes": [] + }, + "properties": [ + { + "textRaw": "`payload` Returns: {Object}", + "type": "Object", + "name": "return", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Getter for the payload used to construct the SourceMap instance.

                                                                                                                                                                                                                                                                                                                                                                                            " + } + ], + "methods": [ + { + "textRaw": "`sourceMap.findEntry(lineNumber, columnNumber)`", + "type": "method", + "name": "findEntry", + "signatures": [ + { + "return": { + "textRaw": "Returns: {Object}", + "name": "return", + "type": "Object" + }, + "params": [ + { + "textRaw": "`lineNumber` {number}", + "name": "lineNumber", + "type": "number" + }, + { + "textRaw": "`columnNumber` {number}", + "name": "columnNumber", + "type": "number" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Given a line number and column number in the generated source file, returns\nan object representing the position in the original file. The object returned\nconsists of the following keys:

                                                                                                                                                                                                                                                                                                                                                                                            \n" + } + ], + "signatures": [ + { + "params": [ + { + "textRaw": "`payload` {Object}", + "name": "payload", + "type": "Object" + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Creates a new sourceMap instance.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            payload is an object with keys matching the Source map v3 format:

                                                                                                                                                                                                                                                                                                                                                                                            \n" + } + ] + } + ], + "type": "module", + "displayName": "Source map v3 support" + } + ], + "type": "module", + "displayName": "Modules: `module` API" + } + ] +} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/module.md nodejs-mozilla-12.22.12/doc/api/module.md --- nodejs-mozilla-12.18.1/doc/api/module.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/module.md 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,213 @@ +# Modules: `module` API + + + +## The `Module` object + +* {Object} + +Provides general utility methods when interacting with instances of +`Module`, the [`module`][] variable often seen in [CommonJS][] modules. Accessed +via `import 'module'` or `require('module')`. + +### `module.builtinModules` + + +* {string[]} + +A list of the names of all modules provided by Node.js. Can be used to verify +if a module is maintained by a third party or not. + +`module` in this context isn't the same object that's provided +by the [module wrapper][]. To access it, require the `Module` module: + +```js +// module.mjs +// In an ECMAScript module +import { builtinModules as builtin } from 'module'; +``` + +```js +// module.cjs +// In a CommonJS module +const builtin = require('module').builtinModules; +``` + +### `module.createRequire(filename)` + + +* `filename` {string|URL} Filename to be used to construct the require + function. Must be a file URL object, file URL string, or absolute path + string. +* Returns: {require} Require function + +```js +import { createRequire } from 'module'; +const require = createRequire(import.meta.url); + +// sibling-module.js is a CommonJS module. +const siblingModule = require('./sibling-module'); +``` + +### `module.createRequireFromPath(filename)` + + +> Stability: 0 - Deprecated: Please use [`createRequire()`][] instead. + +* `filename` {string} Filename to be used to construct the relative require + function. +* Returns: {require} Require function + +```js +const { createRequireFromPath } = require('module'); +const requireUtil = createRequireFromPath('../src/utils/'); + +// Require `../src/utils/some-tool` +requireUtil('./some-tool'); +``` + +### `module.syncBuiltinESMExports()` + + +The `module.syncBuiltinESMExports()` method updates all the live bindings for +builtin [ES Modules][] to match the properties of the [CommonJS][] exports. It +does not add or remove exported names from the [ES Modules][]. + +```js +const fs = require('fs'); +const { syncBuiltinESMExports } = require('module'); + +fs.readFile = null; + +delete fs.readFileSync; + +fs.newAPI = function newAPI() { + // ... +}; + +syncBuiltinESMExports(); + +import('fs').then((esmFS) => { + assert.strictEqual(esmFS.readFile, null); + assert.strictEqual('readFileSync' in fs, true); + assert.strictEqual(esmFS.newAPI, undefined); +}); +``` + +## Source map v3 support + + +> Stability: 1 - Experimental + +Helpers for interacting with the source map cache. This cache is +populated when source map parsing is enabled and +[source map include directives][] are found in a modules' footer. + +To enable source map parsing, Node.js must be run with the flag +[`--enable-source-maps`][], or with code coverage enabled by setting +[`NODE_V8_COVERAGE=dir`][]. + +```js +// module.mjs +// In an ECMAScript module +import { findSourceMap, SourceMap } from 'module'; +``` + +```js +// module.cjs +// In a CommonJS module +const { findSourceMap, SourceMap } = require('module'); +``` + +### `module.findSourceMap(path[, error])` + + +* `path` {string} +* `error` {Error} +* Returns: {module.SourceMap} + +`path` is the resolved path for the file for which a corresponding source map +should be fetched. + +The `error` instance should be passed as the second parameter to `findSourceMap` +in exceptional flows, such as when an overridden +[`Error.prepareStackTrace(error, trace)`][] is invoked. Modules are not added to +the module cache until they are successfully loaded. In these cases, source maps +are associated with the `error` instance along with the `path`. + +### Class: `module.SourceMap` + + +#### `new SourceMap(payload)` + +* `payload` {Object} + +Creates a new `sourceMap` instance. + +`payload` is an object with keys matching the [Source map v3 format][]: + +* `file`: {string} +* `version`: {number} +* `sources`: {string[]} +* `sourcesContent`: {string[]} +* `names`: {string[]} +* `mappings`: {string} +* `sourceRoot`: {string} + +#### `sourceMap.payload` + +* Returns: {Object} + +Getter for the payload used to construct the [`SourceMap`][] instance. + +#### `sourceMap.findEntry(lineNumber, columnNumber)` + +* `lineNumber` {number} +* `columnNumber` {number} +* Returns: {Object} + +Given a line number and column number in the generated source file, returns +an object representing the position in the original file. The object returned +consists of the following keys: + +* generatedLine: {number} +* generatedColumn: {number} +* originalSource: {string} +* originalLine: {number} +* originalColumn: {number} + +[CommonJS]: modules.html +[ES Modules]: esm.html +[Source map v3 format]: https://sourcemaps.info/spec.html#h.mofvlxcwqzej +[`SourceMap`]: #module_class_module_sourcemap +[`createRequire()`]: #module_module_createrequire_filename +[`module`]: modules.html#modules_the_module_object +[module wrapper]: modules_cjs.html#modules_cjs_the_module_wrapper +[source map include directives]: https://sourcemaps.info/spec.html#h.lmz475t4mvbx +[`--enable-source-maps`]: cli.html#cli_enable_source_maps +[`NODE_V8_COVERAGE=dir`]: cli.html#cli_node_v8_coverage_dir +[`Error.prepareStackTrace(error, trace)`]: https://v8.dev/docs/stack-trace-api#customizing-stack-traces diff -Nru nodejs-mozilla-12.18.1/doc/api/modules.html nodejs-mozilla-12.22.12/doc/api/modules.html --- nodejs-mozilla-12.18.1/doc/api/modules.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/modules.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Modules | Node.js v12.18.1 Documentation + + Modules: CommonJS modules | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                            • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                            • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                            • View another version -
                                                                                                                                                                                                                                                                                                                                                                                              1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                              2. +
                                                                                                                                                                                                                                                                                                                                                                                                1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                2. +
                                                                                                                                                                                                                                                                                                                                                                                                3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                4. +
                                                                                                                                                                                                                                                                                                                                                                                                5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                6. +
                                                                                                                                                                                                                                                                                                                                                                                                7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                11. -
                                                                                                                                                                                                                                                                                                                                                                                                12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                13. +
                                                                                                                                                                                                                                                                                                                                                                                                14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                18. @@ -121,41 +128,36 @@
                                                                                                                                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                                                                                                                                  Modules#

                                                                                                                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                                                                                                                  Modules: CommonJS modules#

                                                                                                                                                                                                                                                                                                                                                                                                  Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                  In the Node.js module system, each file is treated as a separate module. For example, consider a file named foo.js:

                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  const circle = require('./circle.js');
                                                                                                                                                                                                                                                                                                                                                                                                  -console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);
                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                  const circle = require('./circle.js');
                                                                                                                                                                                                                                                                                                                                                                                                  +console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);

                                                                                                                                                                                                                                                                                                                                                                                                  On the first line, foo.js loads the module circle.js that is in the same directory as foo.js.

                                                                                                                                                                                                                                                                                                                                                                                                  Here are the contents of circle.js:

                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  const { PI } = Math;
                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                  const { PI } = Math;
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                  -exports.area = (r) => PI * r ** 2;
                                                                                                                                                                                                                                                                                                                                                                                                  +exports.area = (r) => PI * r ** 2;
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                  -exports.circumference = (r) => 2 * PI * r;
                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  +exports.circumference = (r) => 2 * PI * r;

                                                                                                                                                                                                                                                                                                                                                                                                  The module circle.js has exported the functions area() and circumference(). Functions and objects are added to the root of a module by specifying additional properties on the special exports object.

                                                                                                                                                                                                                                                                                                                                                                                                  @@ -239,22 +216,20 @@

                                                                                                                                                                                                                                                                                                                                                                                                  The module.exports property can be assigned a new value (such as a function or object).

                                                                                                                                                                                                                                                                                                                                                                                                  Below, bar.js makes use of the square module, which exports a Square class:

                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  const Square = require('./square.js');
                                                                                                                                                                                                                                                                                                                                                                                                  -const mySquare = new Square(2);
                                                                                                                                                                                                                                                                                                                                                                                                  -console.log(`The area of mySquare is ${mySquare.area()}`);
                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                  const Square = require('./square.js');
                                                                                                                                                                                                                                                                                                                                                                                                  +const mySquare = new Square(2);
                                                                                                                                                                                                                                                                                                                                                                                                  +console.log(`The area of mySquare is ${mySquare.area()}`);

                                                                                                                                                                                                                                                                                                                                                                                                  The square module is defined in square.js:

                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  // Assigning to exports will not modify module, must use module.exports
                                                                                                                                                                                                                                                                                                                                                                                                  -module.exports = class Square {
                                                                                                                                                                                                                                                                                                                                                                                                  -  constructor(width) {
                                                                                                                                                                                                                                                                                                                                                                                                  -    this.width = width;
                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                  // Assigning to exports will not modify module, must use module.exports
                                                                                                                                                                                                                                                                                                                                                                                                  +module.exports = class Square {
                                                                                                                                                                                                                                                                                                                                                                                                  +  constructor(width) {
                                                                                                                                                                                                                                                                                                                                                                                                  +    this.width = width;
                                                                                                                                                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                     area() {
                                                                                                                                                                                                                                                                                                                                                                                                  -    return this.width ** 2;
                                                                                                                                                                                                                                                                                                                                                                                                  +    return this.width ** 2;
                                                                                                                                                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                                                                                                                                                  -};
                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  +};

                                                                                                                                                                                                                                                                                                                                                                                                  The module system is implemented in the require('module') module.

                                                                                                                                                                                                                                                                                                                                                                                                  Accessing the main module#

                                                                                                                                                                                                                                                                                                                                                                                                  @@ -266,7 +241,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                  Because module provides a filename property (normally equivalent to __filename), the entry point of the current application can be obtained by checking require.main.filename.

                                                                                                                                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                                                                                                                                  Addenda: Package Manager Tips#

                                                                                                                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                                                                                                                  Addenda: Package manager tips#

                                                                                                                                                                                                                                                                                                                                                                                                  The semantics of the Node.js require() function were designed to be general enough to support reasonable directory structures. Package manager programs @@ -280,10 +255,9 @@ may be necessary to install a specific version of package bar. The bar package may itself have dependencies, and in some cases, these may even collide or form cyclic dependencies.

                                                                                                                                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                                                                                                                                  Since Node.js looks up the realpath of any modules it loads (that is, -resolves symlinks), and then looks for their dependencies in the node_modules -folders as described here, this -situation is very simple to resolve with the following architecture:

                                                                                                                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                                                                                                                  Because Node.js looks up the realpath of any modules it loads (that is, it +resolves symlinks) and then looks for their dependencies in node_modules folders, +this situation can be resolved with the following architecture:

                                                                                                                                                                                                                                                                                                                                                                                                  • /usr/lib/node/foo/1.2.3/: Contents of the foo package, version 1.2.3.
                                                                                                                                                                                                                                                                                                                                                                                                  • /usr/lib/node/bar/4.3.2/: Contents of the bar package that foo depends @@ -315,13 +289,13 @@ Attempting to do so will throw an error. The .mjs extension is reserved for ECMAScript Modules which cannot be loaded via require(). See ECMAScript Modules for more details.

                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                    All Together...#

                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                    All together...#

                                                                                                                                                                                                                                                                                                                                                                                                    To get the exact filename that will be loaded when require() is called, use the require.resolve() function.

                                                                                                                                                                                                                                                                                                                                                                                                    Putting together all of the above, here is the high-level algorithm in pseudocode of what require() does:

                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    require(X) from module at path Y
                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    require(X) from module at path Y
                                                                                                                                                                                                                                                                                                                                                                                                     1. If X is a core module,
                                                                                                                                                                                                                                                                                                                                                                                                        a. return the core module
                                                                                                                                                                                                                                                                                                                                                                                                        b. STOP
                                                                                                                                                                                                                                                                                                                                                                                                    @@ -331,20 +305,22 @@
                                                                                                                                                                                                                                                                                                                                                                                                        a. LOAD_AS_FILE(Y + X)
                                                                                                                                                                                                                                                                                                                                                                                                        b. LOAD_AS_DIRECTORY(Y + X)
                                                                                                                                                                                                                                                                                                                                                                                                        c. THROW "not found"
                                                                                                                                                                                                                                                                                                                                                                                                    -4. LOAD_SELF_REFERENCE(X, dirname(Y))
                                                                                                                                                                                                                                                                                                                                                                                                    -5. LOAD_NODE_MODULES(X, dirname(Y))
                                                                                                                                                                                                                                                                                                                                                                                                    -6. THROW "not found"
                                                                                                                                                                                                                                                                                                                                                                                                    +4. If X begins with '#'
                                                                                                                                                                                                                                                                                                                                                                                                    +   a. LOAD_PACKAGE_IMPORTS(X, dirname(Y))
                                                                                                                                                                                                                                                                                                                                                                                                    +5. LOAD_PACKAGE_SELF(X, dirname(Y))
                                                                                                                                                                                                                                                                                                                                                                                                    +6. LOAD_NODE_MODULES(X, dirname(Y))
                                                                                                                                                                                                                                                                                                                                                                                                    +7. THROW "not found"
                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                     LOAD_AS_FILE(X)
                                                                                                                                                                                                                                                                                                                                                                                                    -1. If X is a file, load X as its file extension format.  STOP
                                                                                                                                                                                                                                                                                                                                                                                                    -2. If X.js is a file, load X.js as JavaScript text.  STOP
                                                                                                                                                                                                                                                                                                                                                                                                    -3. If X.json is a file, parse X.json to a JavaScript Object.  STOP
                                                                                                                                                                                                                                                                                                                                                                                                    -4. If X.node is a file, load X.node as binary addon.  STOP
                                                                                                                                                                                                                                                                                                                                                                                                    +1. If X is a file, load X as its file extension format. STOP
                                                                                                                                                                                                                                                                                                                                                                                                    +2. If X.js is a file, load X.js as JavaScript text. STOP
                                                                                                                                                                                                                                                                                                                                                                                                    +3. If X.json is a file, parse X.json to a JavaScript Object. STOP
                                                                                                                                                                                                                                                                                                                                                                                                    +4. If X.node is a file, load X.node as binary addon. STOP
                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                     LOAD_INDEX(X)
                                                                                                                                                                                                                                                                                                                                                                                                    -1. If X/index.js is a file, load X/index.js as JavaScript text.  STOP
                                                                                                                                                                                                                                                                                                                                                                                                    +1. If X/index.js is a file, load X/index.js as JavaScript text. STOP
                                                                                                                                                                                                                                                                                                                                                                                                     2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP
                                                                                                                                                                                                                                                                                                                                                                                                    -3. If X/index.node is a file, load X/index.node as binary addon.  STOP
                                                                                                                                                                                                                                                                                                                                                                                                    +3. If X/index.node is a file, load X/index.node as binary addon. STOP
                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                     LOAD_AS_DIRECTORY(X)
                                                                                                                                                                                                                                                                                                                                                                                                     1. If X/package.json is a file,
                                                                                                                                                                                                                                                                                                                                                                                                    @@ -360,7 +336,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                     LOAD_NODE_MODULES(X, START)
                                                                                                                                                                                                                                                                                                                                                                                                     1. let DIRS = NODE_MODULES_PATHS(START)
                                                                                                                                                                                                                                                                                                                                                                                                     2. for each DIR in DIRS:
                                                                                                                                                                                                                                                                                                                                                                                                    -   a. LOAD_PACKAGE_EXPORTS(DIR, X)
                                                                                                                                                                                                                                                                                                                                                                                                    +   a. LOAD_PACKAGE_EXPORTS(X, DIR)
                                                                                                                                                                                                                                                                                                                                                                                                        b. LOAD_AS_FILE(DIR/X)
                                                                                                                                                                                                                                                                                                                                                                                                        c. LOAD_AS_DIRECTORY(DIR/X)
                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                    @@ -375,39 +351,45 @@
                                                                                                                                                                                                                                                                                                                                                                                                        d. let I = I - 1
                                                                                                                                                                                                                                                                                                                                                                                                     5. return DIRS
                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                    -LOAD_SELF_REFERENCE(X, START)
                                                                                                                                                                                                                                                                                                                                                                                                    -1. Find the closest package scope to START.
                                                                                                                                                                                                                                                                                                                                                                                                    +LOAD_PACKAGE_IMPORTS(X, DIR)
                                                                                                                                                                                                                                                                                                                                                                                                    +1. Find the closest package scope SCOPE to DIR.
                                                                                                                                                                                                                                                                                                                                                                                                     2. If no scope was found, return.
                                                                                                                                                                                                                                                                                                                                                                                                    -3. If the `package.json` has no "exports", return.
                                                                                                                                                                                                                                                                                                                                                                                                    -4. If the name in `package.json` isn't a prefix of X, throw "not found".
                                                                                                                                                                                                                                                                                                                                                                                                    -5. Otherwise, load the remainder of X relative to this package as if it
                                                                                                                                                                                                                                                                                                                                                                                                    -  was loaded via `LOAD_NODE_MODULES` with a name in `package.json`.
                                                                                                                                                                                                                                                                                                                                                                                                    +3. If the SCOPE/package.json "imports" is null or undefined, return.
                                                                                                                                                                                                                                                                                                                                                                                                    +4. let MATCH = PACKAGE_IMPORTS_RESOLVE(X, pathToFileURL(SCOPE),
                                                                                                                                                                                                                                                                                                                                                                                                    +  ["node", "require"]) defined in the ESM resolver.
                                                                                                                                                                                                                                                                                                                                                                                                    +5. RESOLVE_ESM_MATCH(MATCH).
                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                    -LOAD_PACKAGE_EXPORTS(DIR, X)
                                                                                                                                                                                                                                                                                                                                                                                                    -1. Try to interpret X as a combination of name and subpath where the name
                                                                                                                                                                                                                                                                                                                                                                                                    +LOAD_PACKAGE_EXPORTS(X, DIR)
                                                                                                                                                                                                                                                                                                                                                                                                    +1. Try to interpret X as a combination of NAME and SUBPATH where the name
                                                                                                                                                                                                                                                                                                                                                                                                        may have a @scope/ prefix and the subpath begins with a slash (`/`).
                                                                                                                                                                                                                                                                                                                                                                                                    -2. If X does not match this pattern or DIR/name/package.json is not a file,
                                                                                                                                                                                                                                                                                                                                                                                                    +2. If X does not match this pattern or DIR/NAME/package.json is not a file,
                                                                                                                                                                                                                                                                                                                                                                                                        return.
                                                                                                                                                                                                                                                                                                                                                                                                    -3. Parse DIR/name/package.json, and look for "exports" field.
                                                                                                                                                                                                                                                                                                                                                                                                    +3. Parse DIR/NAME/package.json, and look for "exports" field.
                                                                                                                                                                                                                                                                                                                                                                                                     4. If "exports" is null or undefined, return.
                                                                                                                                                                                                                                                                                                                                                                                                    -5. If "exports" is an object with some keys starting with "." and some keys
                                                                                                                                                                                                                                                                                                                                                                                                    -  not starting with ".", throw "invalid config".
                                                                                                                                                                                                                                                                                                                                                                                                    -6. If "exports" is a string, or object with no keys starting with ".", treat
                                                                                                                                                                                                                                                                                                                                                                                                    -  it as having that value as its "." object property.
                                                                                                                                                                                                                                                                                                                                                                                                    -7. If subpath is "." and "exports" does not have a "." entry, return.
                                                                                                                                                                                                                                                                                                                                                                                                    -8. Find the longest key in "exports" that the subpath starts with.
                                                                                                                                                                                                                                                                                                                                                                                                    -9. If no such key can be found, throw "not found".
                                                                                                                                                                                                                                                                                                                                                                                                    -10. let RESOLVED =
                                                                                                                                                                                                                                                                                                                                                                                                    -    fileURLToPath(PACKAGE_EXPORTS_TARGET_RESOLVE(pathToFileURL(DIR/name),
                                                                                                                                                                                                                                                                                                                                                                                                    -    exports[key], subpath.slice(key.length), ["node", "require"])), as defined
                                                                                                                                                                                                                                                                                                                                                                                                    -    in the ESM resolver.
                                                                                                                                                                                                                                                                                                                                                                                                    -11. If key ends with "/":
                                                                                                                                                                                                                                                                                                                                                                                                    -    a. LOAD_AS_FILE(RESOLVED)
                                                                                                                                                                                                                                                                                                                                                                                                    -    b. LOAD_AS_DIRECTORY(RESOLVED)
                                                                                                                                                                                                                                                                                                                                                                                                    -12. Otherwise
                                                                                                                                                                                                                                                                                                                                                                                                    -   a. If RESOLVED is a file, load it as its file extension format.  STOP
                                                                                                                                                                                                                                                                                                                                                                                                    -13. Throw "not found"
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    +5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(DIR/NAME), "." + SUBPATH, + `package.json` "exports", ["node", "require"]) defined in the ESM resolver. +6. RESOLVE_ESM_MATCH(MATCH) + +LOAD_PACKAGE_SELF(X, DIR) +1. Find the closest package scope SCOPE to DIR. +2. If no scope was found, return. +3. If the SCOPE/package.json "exports" is null or undefined, return. +4. If the SCOPE/package.json "name" is not the first segment of X, return. +5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(SCOPE), + "." + X.slice("name".length), `package.json` "exports", ["node", "require"]) + defined in the ESM resolver. +6. RESOLVE_ESM_MATCH(MATCH) + +RESOLVE_ESM_MATCH(MATCH) +1. let { RESOLVED, EXACT } = MATCH +2. let RESOLVED_PATH = fileURLToPath(RESOLVED) +3. If EXACT is true, + a. If the file at RESOLVED_PATH exists, load RESOLVED_PATH as its extension + format. STOP +4. Otherwise, if EXACT is false, + a. LOAD_AS_FILE(RESOLVED_PATH) + b. LOAD_AS_DIRECTORY(RESOLVED_PATH) +5. THROW "not found"

                                                                                                                                                                                                                                                                                                                                                                                                    Caching#

                                                                                                                                                                                                                                                                                                                                                                                                    Modules are cached after the first time they are loaded. This means (among other @@ -419,7 +401,7 @@ allowing transitive dependencies to be loaded even when they would cause cycles.

                                                                                                                                                                                                                                                                                                                                                                                                    To have a module execute code multiple times, export a function, and call that function.

                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                    Module Caching Caveats#

                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                    Module caching caveats#

                                                                                                                                                                                                                                                                                                                                                                                                    Modules are cached based on their resolved filename. Since modules may resolve to a different filename based on the location of the calling module (loading @@ -430,7 +412,7 @@ them as different modules and will reload the file multiple times. For example, require('./foo') and require('./FOO') return two different objects, irrespective of whether or not ./foo and ./FOO are the same file.

                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                    Core Modules#

                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                    Core modules#

                                                                                                                                                                                                                                                                                                                                                                                                    Node.js has several modules compiled into the binary. These modules are described in greater detail elsewhere in this documentation.

                                                                                                                                                                                                                                                                                                                                                                                                    @@ -445,27 +427,24 @@ executing when it is returned.

                                                                                                                                                                                                                                                                                                                                                                                                    Consider this situation:

                                                                                                                                                                                                                                                                                                                                                                                                    a.js:

                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    console.log('a starting');
                                                                                                                                                                                                                                                                                                                                                                                                    -exports.done = false;
                                                                                                                                                                                                                                                                                                                                                                                                    -const b = require('./b.js');
                                                                                                                                                                                                                                                                                                                                                                                                    -console.log('in a, b.done = %j', b.done);
                                                                                                                                                                                                                                                                                                                                                                                                    -exports.done = true;
                                                                                                                                                                                                                                                                                                                                                                                                    -console.log('a done');
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    console.log('a starting');
                                                                                                                                                                                                                                                                                                                                                                                                    +exports.done = false;
                                                                                                                                                                                                                                                                                                                                                                                                    +const b = require('./b.js');
                                                                                                                                                                                                                                                                                                                                                                                                    +console.log('in a, b.done = %j', b.done);
                                                                                                                                                                                                                                                                                                                                                                                                    +exports.done = true;
                                                                                                                                                                                                                                                                                                                                                                                                    +console.log('a done');

                                                                                                                                                                                                                                                                                                                                                                                                    b.js:

                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    console.log('b starting');
                                                                                                                                                                                                                                                                                                                                                                                                    -exports.done = false;
                                                                                                                                                                                                                                                                                                                                                                                                    -const a = require('./a.js');
                                                                                                                                                                                                                                                                                                                                                                                                    -console.log('in b, a.done = %j', a.done);
                                                                                                                                                                                                                                                                                                                                                                                                    -exports.done = true;
                                                                                                                                                                                                                                                                                                                                                                                                    -console.log('b done');
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    console.log('b starting');
                                                                                                                                                                                                                                                                                                                                                                                                    +exports.done = false;
                                                                                                                                                                                                                                                                                                                                                                                                    +const a = require('./a.js');
                                                                                                                                                                                                                                                                                                                                                                                                    +console.log('in b, a.done = %j', a.done);
                                                                                                                                                                                                                                                                                                                                                                                                    +exports.done = true;
                                                                                                                                                                                                                                                                                                                                                                                                    +console.log('b done');

                                                                                                                                                                                                                                                                                                                                                                                                    main.js:

                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    console.log('main starting');
                                                                                                                                                                                                                                                                                                                                                                                                    -const a = require('./a.js');
                                                                                                                                                                                                                                                                                                                                                                                                    -const b = require('./b.js');
                                                                                                                                                                                                                                                                                                                                                                                                    -console.log('in main, a.done = %j, b.done = %j', a.done, b.done);
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    console.log('main starting');
                                                                                                                                                                                                                                                                                                                                                                                                    +const a = require('./a.js');
                                                                                                                                                                                                                                                                                                                                                                                                    +const b = require('./b.js');
                                                                                                                                                                                                                                                                                                                                                                                                    +console.log('in main, a.done = %j, b.done = %j', a.done, b.done);

                                                                                                                                                                                                                                                                                                                                                                                                    When main.js loads a.js, then a.js in turn loads b.js. At that point, b.js tries to load a.js. In order to prevent an infinite loop, an unfinished copy of the a.js exports object is returned to the @@ -473,7 +452,7 @@ provided to the a.js module.

                                                                                                                                                                                                                                                                                                                                                                                                    By the time main.js has loaded both modules, they're both finished. The output of this program would thus be:

                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    $ node main.js
                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    $ node main.js
                                                                                                                                                                                                                                                                                                                                                                                                     main starting
                                                                                                                                                                                                                                                                                                                                                                                                     a starting
                                                                                                                                                                                                                                                                                                                                                                                                     b starting
                                                                                                                                                                                                                                                                                                                                                                                                    @@ -481,11 +460,10 @@
                                                                                                                                                                                                                                                                                                                                                                                                     b done
                                                                                                                                                                                                                                                                                                                                                                                                     in a, b.done = true
                                                                                                                                                                                                                                                                                                                                                                                                     a done
                                                                                                                                                                                                                                                                                                                                                                                                    -in main, a.done = true, b.done = true
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    +in main, a.done = true, b.done = true

                                                                                                                                                                                                                                                                                                                                                                                                    Careful planning is required to allow cyclic module dependencies to work correctly within an application.

                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                    File Modules#

                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                    File modules#

                                                                                                                                                                                                                                                                                                                                                                                                    If the exact filename is not found, then Node.js will attempt to load the required filename with the added extensions: .js, .json, and finally @@ -503,26 +481,25 @@ either be a core module or is loaded from a node_modules folder.

                                                                                                                                                                                                                                                                                                                                                                                                    If the given path does not exist, require() will throw an Error with its code property set to 'MODULE_NOT_FOUND'.

                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                    Folders as Modules#

                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                    Folders as modules#

                                                                                                                                                                                                                                                                                                                                                                                                    It is convenient to organize programs and libraries into self-contained directories, and then provide a single entry point to those directories. There are three ways in which a folder may be passed to require() as an argument.

                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                    The first is to create a package.json file in the root of the folder, -which specifies a main module. An example package.json file might +

                                                                                                                                                                                                                                                                                                                                                                                                    The first is to create a package.json file in the root of the folder, +which specifies a main module. An example package.json file might look like this:

                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    { "name" : "some-library",
                                                                                                                                                                                                                                                                                                                                                                                                    -  "main" : "./lib/some-library.js" }
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    { "name" : "some-library",
                                                                                                                                                                                                                                                                                                                                                                                                    +  "main" : "./lib/some-library.js" }

                                                                                                                                                                                                                                                                                                                                                                                                    If this was in a folder at ./some-library, then require('./some-library') would attempt to load ./some-library/lib/some-library.js.

                                                                                                                                                                                                                                                                                                                                                                                                    This is the extent of the awareness of package.json files within Node.js.

                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                    If there is no package.json file present in the directory, or if the -'main' entry is missing or cannot be resolved, then Node.js +

                                                                                                                                                                                                                                                                                                                                                                                                    If there is no package.json file present in the directory, or if the +"main" entry is missing or cannot be resolved, then Node.js will attempt to load an index.js or index.node file out of that -directory. For example, if there was no package.json file in the above +directory. For example, if there was no package.json file in the previous example, then require('./some-library') would attempt to load:

                                                                                                                                                                                                                                                                                                                                                                                                    • ./some-library/index.js
                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -530,9 +507,8 @@

                                                                                                                                                                                                                                                                                                                                                                                                    If these attempts fail, then Node.js will report the entire module as missing with the default error:

                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    Error: Cannot find module 'some-library'
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                    Loading from node_modules Folders#

                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    Error: Cannot find module 'some-library'
                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                    Loading from node_modules folders#

                                                                                                                                                                                                                                                                                                                                                                                                    If the module identifier passed to require() is not a core module, and does not begin with '/', '../', or @@ -587,17 +563,15 @@

                                                                                                                                                                                                                                                                                                                                                                                                    Before a module's code is executed, Node.js will wrap it with a function wrapper that looks like the following:

                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    (function(exports, require, module, __filename, __dirname) {
                                                                                                                                                                                                                                                                                                                                                                                                    -// Module code actually lives in here
                                                                                                                                                                                                                                                                                                                                                                                                    -});
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    (function(exports, require, module, __filename, __dirname) {
                                                                                                                                                                                                                                                                                                                                                                                                    +// Module code actually lives in here
                                                                                                                                                                                                                                                                                                                                                                                                    +});

                                                                                                                                                                                                                                                                                                                                                                                                    By doing this, Node.js achieves a few things:

                                                                                                                                                                                                                                                                                                                                                                                                    • It keeps top-level variables (defined with var, const or let) scoped to the module rather than the global object.
                                                                                                                                                                                                                                                                                                                                                                                                    • -
                                                                                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                                                                                      It helps to provide some global-looking variables that are actually specific -to the module, such as:

                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                    • It helps to provide some global-looking variables that are actually specific +to the module, such as:
                                                                                                                                                                                                                                                                                                                                                                                                      • The module and exports objects that the implementor can use to export values from the module.
                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -618,11 +592,10 @@

                                                                                                                                                                                                                                                                                                                                                                                                        The directory name of the current module. This is the same as the path.dirname() of the __filename.

                                                                                                                                                                                                                                                                                                                                                                                                        Example: running node example.js from /Users/mjr

                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                        console.log(__dirname);
                                                                                                                                                                                                                                                                                                                                                                                                        -// Prints: /Users/mjr
                                                                                                                                                                                                                                                                                                                                                                                                        -console.log(path.dirname(__filename));
                                                                                                                                                                                                                                                                                                                                                                                                        -// Prints: /Users/mjr
                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                        console.log(__dirname);
                                                                                                                                                                                                                                                                                                                                                                                                        +// Prints: /Users/mjr
                                                                                                                                                                                                                                                                                                                                                                                                        +console.log(path.dirname(__filename));
                                                                                                                                                                                                                                                                                                                                                                                                        +// Prints: /Users/mjr

                                                                                                                                                                                                                                                                                                                                                                                                        __filename#

                                                                                                                                                                                                                                                                                                                                                                                            - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/modules.json nodejs-mozilla-12.22.12/doc/api/modules.json --- nodejs-mozilla-12.18.1/doc/api/modules.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/modules.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,7 +3,7 @@ "source": "doc/api/modules.md", "modules": [ { - "textRaw": "Modules", + "textRaw": "Modules: CommonJS modules", "name": "module", "introduced_in": "v0.10.0", "stability": 2, @@ -17,16 +17,16 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            When a file is run directly from Node.js, require.main is set to its\nmodule. That means that it is possible to determine whether a file has been\nrun directly by testing require.main === module.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            For a file foo.js, this will be true if run via node foo.js, but\nfalse if run by require('./foo').

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Because module provides a filename property (normally equivalent to\n__filename), the entry point of the current application can be obtained\nby checking require.main.filename.

                                                                                                                                                                                                                                                                                                                                                                                            " }, { - "textRaw": "Addenda: Package Manager Tips", - "name": "Addenda: Package Manager Tips", + "textRaw": "Addenda: Package manager tips", + "name": "Addenda: Package manager tips", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The semantics of the Node.js require() function were designed to be general\nenough to support reasonable directory structures. Package manager programs\nsuch as dpkg, rpm, and npm will hopefully find it possible to build\nnative packages from Node.js modules without modification.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Below we give a suggested directory structure that could work:

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Let's say that we wanted to have the folder at\n/usr/lib/node/<some-package>/<some-version> hold the contents of a\nspecific version of a package.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Packages can depend on one another. In order to install package foo, it\nmay be necessary to install a specific version of package bar. The bar\npackage may itself have dependencies, and in some cases, these may even collide\nor form cyclic dependencies.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Since Node.js looks up the realpath of any modules it loads (that is,\nresolves symlinks), and then looks for their dependencies in the node_modules\nfolders as described here, this\nsituation is very simple to resolve with the following architecture:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • /usr/lib/node/foo/1.2.3/: Contents of the foo package, version 1.2.3.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /usr/lib/node/bar/4.3.2/: Contents of the bar package that foo depends\non.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /usr/lib/node/foo/1.2.3/node_modules/bar: Symbolic link to\n/usr/lib/node/bar/4.3.2/.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /usr/lib/node/bar/4.3.2/node_modules/*: Symbolic links to the packages that\nbar depends on.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Thus, even if a cycle is encountered, or if there are dependency\nconflicts, every module will be able to get a version of its dependency\nthat it can use.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            When the code in the foo package does require('bar'), it will get the\nversion that is symlinked into /usr/lib/node/foo/1.2.3/node_modules/bar.\nThen, when the code in the bar package calls require('quux'), it'll get\nthe version that is symlinked into\n/usr/lib/node/bar/4.3.2/node_modules/quux.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Furthermore, to make the module lookup process even more optimal, rather\nthan putting packages directly in /usr/lib/node, we could put them in\n/usr/lib/node_modules/<name>/<version>. Then Node.js will not bother\nlooking for missing dependencies in /usr/node_modules or /node_modules.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            In order to make modules available to the Node.js REPL, it might be useful to\nalso add the /usr/lib/node_modules folder to the $NODE_PATH environment\nvariable. Since the module lookups using node_modules folders are all\nrelative, and based on the real path of the files making the calls to\nrequire(), the packages themselves can be anywhere.

                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The semantics of the Node.js require() function were designed to be general\nenough to support reasonable directory structures. Package manager programs\nsuch as dpkg, rpm, and npm will hopefully find it possible to build\nnative packages from Node.js modules without modification.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Below we give a suggested directory structure that could work:

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Let's say that we wanted to have the folder at\n/usr/lib/node/<some-package>/<some-version> hold the contents of a\nspecific version of a package.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Packages can depend on one another. In order to install package foo, it\nmay be necessary to install a specific version of package bar. The bar\npackage may itself have dependencies, and in some cases, these may even collide\nor form cyclic dependencies.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Because Node.js looks up the realpath of any modules it loads (that is, it\nresolves symlinks) and then looks for their dependencies in node_modules folders,\nthis situation can be resolved with the following architecture:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • /usr/lib/node/foo/1.2.3/: Contents of the foo package, version 1.2.3.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /usr/lib/node/bar/4.3.2/: Contents of the bar package that foo depends\non.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /usr/lib/node/foo/1.2.3/node_modules/bar: Symbolic link to\n/usr/lib/node/bar/4.3.2/.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /usr/lib/node/bar/4.3.2/node_modules/*: Symbolic links to the packages that\nbar depends on.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Thus, even if a cycle is encountered, or if there are dependency\nconflicts, every module will be able to get a version of its dependency\nthat it can use.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            When the code in the foo package does require('bar'), it will get the\nversion that is symlinked into /usr/lib/node/foo/1.2.3/node_modules/bar.\nThen, when the code in the bar package calls require('quux'), it'll get\nthe version that is symlinked into\n/usr/lib/node/bar/4.3.2/node_modules/quux.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Furthermore, to make the module lookup process even more optimal, rather\nthan putting packages directly in /usr/lib/node, we could put them in\n/usr/lib/node_modules/<name>/<version>. Then Node.js will not bother\nlooking for missing dependencies in /usr/node_modules or /node_modules.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            In order to make modules available to the Node.js REPL, it might be useful to\nalso add the /usr/lib/node_modules folder to the $NODE_PATH environment\nvariable. Since the module lookups using node_modules folders are all\nrelative, and based on the real path of the files making the calls to\nrequire(), the packages themselves can be anywhere.

                                                                                                                                                                                                                                                                                                                                                                                            " }, { - "textRaw": "All Together...", - "name": "All Together...", + "textRaw": "All together...", + "name": "All together...", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            To get the exact filename that will be loaded when require() is called, use\nthe require.resolve() function.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Putting together all of the above, here is the high-level algorithm\nin pseudocode of what require() does:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            require(X) from module at path Y\n1. If X is a core module,\n   a. return the core module\n   b. STOP\n2. If X begins with '/'\n   a. set Y to be the filesystem root\n3. If X begins with './' or '/' or '../'\n   a. LOAD_AS_FILE(Y + X)\n   b. LOAD_AS_DIRECTORY(Y + X)\n   c. THROW \"not found\"\n4. LOAD_SELF_REFERENCE(X, dirname(Y))\n5. LOAD_NODE_MODULES(X, dirname(Y))\n6. THROW \"not found\"\n\nLOAD_AS_FILE(X)\n1. If X is a file, load X as its file extension format.  STOP\n2. If X.js is a file, load X.js as JavaScript text.  STOP\n3. If X.json is a file, parse X.json to a JavaScript Object.  STOP\n4. If X.node is a file, load X.node as binary addon.  STOP\n\nLOAD_INDEX(X)\n1. If X/index.js is a file, load X/index.js as JavaScript text.  STOP\n2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP\n3. If X/index.node is a file, load X/index.node as binary addon.  STOP\n\nLOAD_AS_DIRECTORY(X)\n1. If X/package.json is a file,\n   a. Parse X/package.json, and look for \"main\" field.\n   b. If \"main\" is a falsy value, GOTO 2.\n   c. let M = X + (json main field)\n   d. LOAD_AS_FILE(M)\n   e. LOAD_INDEX(M)\n   f. LOAD_INDEX(X) DEPRECATED\n   g. THROW \"not found\"\n2. LOAD_INDEX(X)\n\nLOAD_NODE_MODULES(X, START)\n1. let DIRS = NODE_MODULES_PATHS(START)\n2. for each DIR in DIRS:\n   a. LOAD_PACKAGE_EXPORTS(DIR, X)\n   b. LOAD_AS_FILE(DIR/X)\n   c. LOAD_AS_DIRECTORY(DIR/X)\n\nNODE_MODULES_PATHS(START)\n1. let PARTS = path split(START)\n2. let I = count of PARTS - 1\n3. let DIRS = [GLOBAL_FOLDERS]\n4. while I >= 0,\n   a. if PARTS[I] = \"node_modules\" CONTINUE\n   b. DIR = path join(PARTS[0 .. I] + \"node_modules\")\n   c. DIRS = DIRS + DIR\n   d. let I = I - 1\n5. return DIRS\n\nLOAD_SELF_REFERENCE(X, START)\n1. Find the closest package scope to START.\n2. If no scope was found, return.\n3. If the `package.json` has no \"exports\", return.\n4. If the name in `package.json` isn't a prefix of X, throw \"not found\".\n5. Otherwise, load the remainder of X relative to this package as if it\n  was loaded via `LOAD_NODE_MODULES` with a name in `package.json`.\n\nLOAD_PACKAGE_EXPORTS(DIR, X)\n1. Try to interpret X as a combination of name and subpath where the name\n   may have a @scope/ prefix and the subpath begins with a slash (`/`).\n2. If X does not match this pattern or DIR/name/package.json is not a file,\n   return.\n3. Parse DIR/name/package.json, and look for \"exports\" field.\n4. If \"exports\" is null or undefined, return.\n5. If \"exports\" is an object with some keys starting with \".\" and some keys\n  not starting with \".\", throw \"invalid config\".\n6. If \"exports\" is a string, or object with no keys starting with \".\", treat\n  it as having that value as its \".\" object property.\n7. If subpath is \".\" and \"exports\" does not have a \".\" entry, return.\n8. Find the longest key in \"exports\" that the subpath starts with.\n9. If no such key can be found, throw \"not found\".\n10. let RESOLVED =\n    fileURLToPath(PACKAGE_EXPORTS_TARGET_RESOLVE(pathToFileURL(DIR/name),\n    exports[key], subpath.slice(key.length), [\"node\", \"require\"])), as defined\n    in the ESM resolver.\n11. If key ends with \"/\":\n    a. LOAD_AS_FILE(RESOLVED)\n    b. LOAD_AS_DIRECTORY(RESOLVED)\n12. Otherwise\n   a. If RESOLVED is a file, load it as its file extension format.  STOP\n13. Throw \"not found\"\n
                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            To get the exact filename that will be loaded when require() is called, use\nthe require.resolve() function.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Putting together all of the above, here is the high-level algorithm\nin pseudocode of what require() does:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            require(X) from module at path Y\n1. If X is a core module,\n   a. return the core module\n   b. STOP\n2. If X begins with '/'\n   a. set Y to be the filesystem root\n3. If X begins with './' or '/' or '../'\n   a. LOAD_AS_FILE(Y + X)\n   b. LOAD_AS_DIRECTORY(Y + X)\n   c. THROW \"not found\"\n4. If X begins with '#'\n   a. LOAD_PACKAGE_IMPORTS(X, dirname(Y))\n5. LOAD_PACKAGE_SELF(X, dirname(Y))\n6. LOAD_NODE_MODULES(X, dirname(Y))\n7. THROW \"not found\"\n\nLOAD_AS_FILE(X)\n1. If X is a file, load X as its file extension format. STOP\n2. If X.js is a file, load X.js as JavaScript text. STOP\n3. If X.json is a file, parse X.json to a JavaScript Object. STOP\n4. If X.node is a file, load X.node as binary addon. STOP\n\nLOAD_INDEX(X)\n1. If X/index.js is a file, load X/index.js as JavaScript text. STOP\n2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP\n3. If X/index.node is a file, load X/index.node as binary addon. STOP\n\nLOAD_AS_DIRECTORY(X)\n1. If X/package.json is a file,\n   a. Parse X/package.json, and look for \"main\" field.\n   b. If \"main\" is a falsy value, GOTO 2.\n   c. let M = X + (json main field)\n   d. LOAD_AS_FILE(M)\n   e. LOAD_INDEX(M)\n   f. LOAD_INDEX(X) DEPRECATED\n   g. THROW \"not found\"\n2. LOAD_INDEX(X)\n\nLOAD_NODE_MODULES(X, START)\n1. let DIRS = NODE_MODULES_PATHS(START)\n2. for each DIR in DIRS:\n   a. LOAD_PACKAGE_EXPORTS(X, DIR)\n   b. LOAD_AS_FILE(DIR/X)\n   c. LOAD_AS_DIRECTORY(DIR/X)\n\nNODE_MODULES_PATHS(START)\n1. let PARTS = path split(START)\n2. let I = count of PARTS - 1\n3. let DIRS = [GLOBAL_FOLDERS]\n4. while I >= 0,\n   a. if PARTS[I] = \"node_modules\" CONTINUE\n   b. DIR = path join(PARTS[0 .. I] + \"node_modules\")\n   c. DIRS = DIRS + DIR\n   d. let I = I - 1\n5. return DIRS\n\nLOAD_PACKAGE_IMPORTS(X, DIR)\n1. Find the closest package scope SCOPE to DIR.\n2. If no scope was found, return.\n3. If the SCOPE/package.json \"imports\" is null or undefined, return.\n4. let MATCH = PACKAGE_IMPORTS_RESOLVE(X, pathToFileURL(SCOPE),\n  [\"node\", \"require\"]) defined in the ESM resolver.\n5. RESOLVE_ESM_MATCH(MATCH).\n\nLOAD_PACKAGE_EXPORTS(X, DIR)\n1. Try to interpret X as a combination of NAME and SUBPATH where the name\n   may have a @scope/ prefix and the subpath begins with a slash (`/`).\n2. If X does not match this pattern or DIR/NAME/package.json is not a file,\n   return.\n3. Parse DIR/NAME/package.json, and look for \"exports\" field.\n4. If \"exports\" is null or undefined, return.\n5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(DIR/NAME), \".\" + SUBPATH,\n   `package.json` \"exports\", [\"node\", \"require\"]) defined in the ESM resolver.\n6. RESOLVE_ESM_MATCH(MATCH)\n\nLOAD_PACKAGE_SELF(X, DIR)\n1. Find the closest package scope SCOPE to DIR.\n2. If no scope was found, return.\n3. If the SCOPE/package.json \"exports\" is null or undefined, return.\n4. If the SCOPE/package.json \"name\" is not the first segment of X, return.\n5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(SCOPE),\n   \".\" + X.slice(\"name\".length), `package.json` \"exports\", [\"node\", \"require\"])\n   defined in the ESM resolver.\n6. RESOLVE_ESM_MATCH(MATCH)\n\nRESOLVE_ESM_MATCH(MATCH)\n1. let { RESOLVED, EXACT } = MATCH\n2. let RESOLVED_PATH = fileURLToPath(RESOLVED)\n3. If EXACT is true,\n   a. If the file at RESOLVED_PATH exists, load RESOLVED_PATH as its extension\n      format. STOP\n4. Otherwise, if EXACT is false,\n   a. LOAD_AS_FILE(RESOLVED_PATH)\n   b. LOAD_AS_DIRECTORY(RESOLVED_PATH)\n5. THROW \"not found\"\n
                                                                                                                                                                                                                                                                                                                                                                                            " }, { "textRaw": "Caching", @@ -35,16 +35,16 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Modules are cached after the first time they are loaded. This means (among other\nthings) that every call to require('foo') will get exactly the same object\nreturned, if it would resolve to the same file.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Provided require.cache is not modified, multiple calls to require('foo')\nwill not cause the module code to be executed multiple times. This is an\nimportant feature. With it, \"partially done\" objects can be returned, thus\nallowing transitive dependencies to be loaded even when they would cause cycles.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            To have a module execute code multiple times, export a function, and call that\nfunction.

                                                                                                                                                                                                                                                                                                                                                                                            ", "miscs": [ { - "textRaw": "Module Caching Caveats", - "name": "Module Caching Caveats", + "textRaw": "Module caching caveats", + "name": "Module caching caveats", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Modules are cached based on their resolved filename. Since modules may resolve\nto a different filename based on the location of the calling module (loading\nfrom node_modules folders), it is not a guarantee that require('foo') will\nalways return the exact same object, if it would resolve to different files.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Additionally, on case-insensitive file systems or operating systems, different\nresolved filenames can point to the same file, but the cache will still treat\nthem as different modules and will reload the file multiple times. For example,\nrequire('./foo') and require('./FOO') return two different objects,\nirrespective of whether or not ./foo and ./FOO are the same file.

                                                                                                                                                                                                                                                                                                                                                                                            " } ] }, { - "textRaw": "Core Modules", - "name": "Core Modules", + "textRaw": "Core modules", + "name": "Core modules", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Node.js has several modules compiled into the binary. These modules are\ndescribed in greater detail elsewhere in this documentation.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            The core modules are defined within the Node.js source and are located in the\nlib/ folder.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Core modules are always preferentially loaded if their identifier is\npassed to require(). For instance, require('http') will always\nreturn the built in HTTP module, even if there is a file by that name.

                                                                                                                                                                                                                                                                                                                                                                                            " }, @@ -55,20 +55,20 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            When there are circular require() calls, a module might not have finished\nexecuting when it is returned.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Consider this situation:

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            a.js:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            console.log('a starting');\nexports.done = false;\nconst b = require('./b.js');\nconsole.log('in a, b.done = %j', b.done);\nexports.done = true;\nconsole.log('a done');\n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            b.js:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            console.log('b starting');\nexports.done = false;\nconst a = require('./a.js');\nconsole.log('in b, a.done = %j', a.done);\nexports.done = true;\nconsole.log('b done');\n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            main.js:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            console.log('main starting');\nconst a = require('./a.js');\nconst b = require('./b.js');\nconsole.log('in main, a.done = %j, b.done = %j', a.done, b.done);\n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            When main.js loads a.js, then a.js in turn loads b.js. At that\npoint, b.js tries to load a.js. In order to prevent an infinite\nloop, an unfinished copy of the a.js exports object is returned to the\nb.js module. b.js then finishes loading, and its exports object is\nprovided to the a.js module.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            By the time main.js has loaded both modules, they're both finished.\nThe output of this program would thus be:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            $ node main.js\nmain starting\na starting\nb starting\nin b, a.done = false\nb done\nin a, b.done = true\na done\nin main, a.done = true, b.done = true\n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Careful planning is required to allow cyclic module dependencies to work\ncorrectly within an application.

                                                                                                                                                                                                                                                                                                                                                                                            " }, { - "textRaw": "File Modules", - "name": "File Modules", + "textRaw": "File modules", + "name": "File modules", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            If the exact filename is not found, then Node.js will attempt to load the\nrequired filename with the added extensions: .js, .json, and finally\n.node.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            .js files are interpreted as JavaScript text files, and .json files are\nparsed as JSON text files. .node files are interpreted as compiled addon\nmodules loaded with process.dlopen().

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            A required module prefixed with '/' is an absolute path to the file. For\nexample, require('/home/marco/foo.js') will load the file at\n/home/marco/foo.js.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            A required module prefixed with './' is relative to the file calling\nrequire(). That is, circle.js must be in the same directory as foo.js for\nrequire('./circle') to find it.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            Without a leading '/', './', or '../' to indicate a file, the module must\neither be a core module or is loaded from a node_modules folder.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            If the given path does not exist, require() will throw an Error with its\ncode property set to 'MODULE_NOT_FOUND'.

                                                                                                                                                                                                                                                                                                                                                                                            " }, { - "textRaw": "Folders as Modules", - "name": "Folders as Modules", + "textRaw": "Folders as modules", + "name": "Folders as modules", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            It is convenient to organize programs and libraries into self-contained\ndirectories, and then provide a single entry point to those directories.\nThere are three ways in which a folder may be passed to require() as\nan argument.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            The first is to create a package.json file in the root of the folder,\nwhich specifies a main module. An example package.json file might\nlook like this:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            { \"name\" : \"some-library\",\n  \"main\" : \"./lib/some-library.js\" }\n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            If this was in a folder at ./some-library, then\nrequire('./some-library') would attempt to load\n./some-library/lib/some-library.js.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            This is the extent of the awareness of package.json files within Node.js.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            If there is no package.json file present in the directory, or if the\n'main' entry is missing or cannot be resolved, then Node.js\nwill attempt to load an index.js or index.node file out of that\ndirectory. For example, if there was no package.json file in the above\nexample, then require('./some-library') would attempt to load:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • ./some-library/index.js
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • ./some-library/index.node
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            If these attempts fail, then Node.js will report the entire module as missing\nwith the default error:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            Error: Cannot find module 'some-library'\n
                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            It is convenient to organize programs and libraries into self-contained\ndirectories, and then provide a single entry point to those directories.\nThere are three ways in which a folder may be passed to require() as\nan argument.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            The first is to create a package.json file in the root of the folder,\nwhich specifies a main module. An example package.json file might\nlook like this:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            { \"name\" : \"some-library\",\n  \"main\" : \"./lib/some-library.js\" }\n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            If this was in a folder at ./some-library, then\nrequire('./some-library') would attempt to load\n./some-library/lib/some-library.js.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            This is the extent of the awareness of package.json files within Node.js.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            If there is no package.json file present in the directory, or if the\n\"main\" entry is missing or cannot be resolved, then Node.js\nwill attempt to load an index.js or index.node file out of that\ndirectory. For example, if there was no package.json file in the previous\nexample, then require('./some-library') would attempt to load:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • ./some-library/index.js
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • ./some-library/index.node
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            If these attempts fail, then Node.js will report the entire module as missing\nwith the default error:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            Error: Cannot find module 'some-library'\n
                                                                                                                                                                                                                                                                                                                                                                                            " }, { - "textRaw": "Loading from `node_modules` Folders", - "name": "Loading from `node_modules` Folders", + "textRaw": "Loading from `node_modules` folders", + "name": "Loading from `node_modules` folders", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            If the module identifier passed to require() is not a\ncore module, and does not begin with '/', '../', or\n'./', then Node.js starts at the parent directory of the current module, and\nadds /node_modules, and attempts to load the module from that location.\nNode.js will not append node_modules to a path already ending in\nnode_modules.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            If it is not found there, then it moves to the parent directory, and so\non, until the root of the file system is reached.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            For example, if the file at '/home/ry/projects/foo.js' called\nrequire('bar.js'), then Node.js would look in the following locations, in\nthis order:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • /home/ry/projects/node_modules/bar.js
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /home/ry/node_modules/bar.js
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /home/node_modules/bar.js
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • /node_modules/bar.js
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            This allows programs to localize their dependencies, so that they do not\nclash.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            It is possible to require specific files or sub modules distributed with a\nmodule by including a path suffix after the module name. For instance\nrequire('example-module/path/to/file') would resolve path/to/file\nrelative to where example-module is located. The suffixed path follows the\nsame module resolution semantics.

                                                                                                                                                                                                                                                                                                                                                                                            " }, @@ -82,7 +82,7 @@ "textRaw": "The module wrapper", "name": "The module wrapper", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Before a module's code is executed, Node.js will wrap it with a function\nwrapper that looks like the following:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            (function(exports, require, module, __filename, __dirname) {\n// Module code actually lives in here\n});\n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            By doing this, Node.js achieves a few things:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • It keeps top-level variables (defined with var, const or let) scoped to\nthe module rather than the global object.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n

                                                                                                                                                                                                                                                                                                                                                                                              It helps to provide some global-looking variables that are actually specific\nto the module, such as:

                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • The module and exports objects that the implementor can use to export\nvalues from the module.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • The convenience variables __filename and __dirname, containing the\nmodule's absolute filename and directory path.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Before a module's code is executed, Node.js will wrap it with a function\nwrapper that looks like the following:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            (function(exports, require, module, __filename, __dirname) {\n// Module code actually lives in here\n});\n
                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            By doing this, Node.js achieves a few things:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • It keeps top-level variables (defined with var, const or let) scoped to\nthe module rather than the global object.
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            • It helps to provide some global-looking variables that are actually specific\nto the module, such as:\n
                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                              • The module and exports objects that the implementor can use to export\nvalues from the module.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              • The convenience variables __filename and __dirname, containing the\nmodule's absolute filename and directory path.
                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                            " } ], "modules": [ @@ -196,7 +196,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The Module object representing the entry script loaded when the Node.js\nprocess launched.\nSee \"Accessing the main module\".

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            In entry.js script:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            console.log(require.main);\n
                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            node entry.js\n
                                                                                                                                                                                                                                                                                                                                                                                            \n\n
                                                                                                                                                                                                                                                                                                                                                                                            Module {\n  id: '.',\n  path: '/absolute/path/to',\n  exports: {},\n  parent: null,\n  filename: '/absolute/path/to/entry.js',\n  loaded: false,\n  children: [],\n  paths:\n   [ '/absolute/path/to/node_modules',\n     '/absolute/path/node_modules',\n     '/absolute/node_modules',\n     '/node_modules' ] }\n
                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The Module object representing the entry script loaded when the Node.js\nprocess launched.\nSee \"Accessing the main module\".

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            In entry.js script:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            console.log(require.main);\n
                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            node entry.js\n
                                                                                                                                                                                                                                                                                                                                                                                            \n\n
                                                                                                                                                                                                                                                                                                                                                                                            Module {\n  id: '.',\n  path: '/absolute/path/to',\n  exports: {},\n  parent: null,\n  filename: '/absolute/path/to/entry.js',\n  loaded: false,\n  children: [],\n  paths:\n   [ '/absolute/path/to/node_modules',\n     '/absolute/path/node_modules',\n     '/absolute/node_modules',\n     '/node_modules' ] }\n
                                                                                                                                                                                                                                                                                                                                                                                            " } ], "methods": [ @@ -286,234 +286,23 @@ "displayName": "The module scope" }, { - "textRaw": "The `Module` Object", + "textRaw": "The `Module` object", "name": "the_`module`_object", - "meta": { - "added": [ - "v0.3.7" - ], - "changes": [] - }, - "desc": "\n

                                                                                                                                                                                                                                                                                                                                                                                            Provides general utility methods when interacting with instances of\nModule, the module variable often seen in file modules. Accessed\nvia require('module').

                                                                                                                                                                                                                                                                                                                                                                                            ", - "properties": [ - { - "textRaw": "`builtinModules` {string[]}", - "type": "string[]", - "name": "builtinModules", - "meta": { - "added": [ - "v9.3.0", - "v8.10.0", - "v6.13.0" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            A list of the names of all modules provided by Node.js. Can be used to verify\nif a module is maintained by a third party or not.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            module in this context isn't the same object that's provided\nby the module wrapper. To access it, require the Module module:

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            const builtin = require('module').builtinModules;\n
                                                                                                                                                                                                                                                                                                                                                                                            " - } - ], - "methods": [ - { - "textRaw": "`module.createRequire(filename)`", - "type": "method", - "name": "createRequire", - "meta": { - "added": [ - "v12.2.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {require} Require function", - "name": "return", - "type": "require", - "desc": "Require function" - }, - "params": [ - { - "textRaw": "`filename` {string|URL} Filename to be used to construct the require function. Must be a file URL object, file URL string, or absolute path string.", - "name": "filename", - "type": "string|URL", - "desc": "Filename to be used to construct the require function. Must be a file URL object, file URL string, or absolute path string." - } - ] - } - ], - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                            import { createRequire } from 'module';\nconst require = createRequire(import.meta.url);\n\n// sibling-module.js is a CommonJS module.\nconst siblingModule = require('./sibling-module');\n
                                                                                                                                                                                                                                                                                                                                                                                            " - }, - { - "textRaw": "`module.createRequireFromPath(filename)`", - "type": "method", - "name": "createRequireFromPath", - "meta": { - "added": [ - "v10.12.0" - ], - "deprecated": [ - "v12.2.0" - ], - "changes": [] - }, - "stability": 0, - "stabilityText": "Deprecated: Please use [`createRequire()`][] instead.", - "signatures": [ - { - "return": { - "textRaw": "Returns: {require} Require function", - "name": "return", - "type": "require", - "desc": "Require function" - }, - "params": [ - { - "textRaw": "`filename` {string} Filename to be used to construct the relative require function.", - "name": "filename", - "type": "string", - "desc": "Filename to be used to construct the relative require function." - } - ] - } - ], - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                            const { createRequireFromPath } = require('module');\nconst requireUtil = createRequireFromPath('../src/utils/');\n\n// Require `../src/utils/some-tool`\nrequireUtil('./some-tool');\n
                                                                                                                                                                                                                                                                                                                                                                                            " - }, - { - "textRaw": "`module.syncBuiltinESMExports()`", - "type": "method", - "name": "syncBuiltinESMExports", - "meta": { - "added": [ - "v12.12.0" - ], - "changes": [] - }, - "signatures": [ - { - "params": [] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The module.syncBuiltinESMExports() method updates all the live bindings for\nbuiltin ES Modules to match the properties of the CommonJS exports. It does\nnot add or remove exported names from the ES Modules.

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');\nconst { syncBuiltinESMExports } = require('module');\n\nfs.readFile = null;\n\ndelete fs.readFileSync;\n\nfs.newAPI = function newAPI() {\n  // ...\n};\n\nsyncBuiltinESMExports();\n\nimport('fs').then((esmFS) => {\n  assert.strictEqual(esmFS.readFile, null);\n  assert.strictEqual('readFileSync' in fs, true);\n  assert.strictEqual(esmFS.newAPI, undefined);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                            " - } - ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            This section was moved to\nModules: module core module.

                                                                                                                                                                                                                                                                                                                                                                                            \n\n", "type": "module", - "displayName": "The `Module` Object" + "displayName": "The `Module` object" }, { - "textRaw": "Source Map V3 Support", + "textRaw": "Source map v3 support", "name": "source_map_v3_support", - "meta": { - "added": [ - "v12.17.0" - ], - "changes": [] - }, - "stability": 1, - "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Helpers for interacting with the source map cache. This cache is\npopulated when source map parsing is enabled and\nsource map include directives are found in a modules' footer.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            To enable source map parsing, Node.js must be run with the flag\n--enable-source-maps, or with code coverage enabled by setting\nNODE_V8_COVERAGE=dir.

                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                            const { findSourceMap, SourceMap } = require('module');\n
                                                                                                                                                                                                                                                                                                                                                                                            ", - "methods": [ - { - "textRaw": "`module.findSourceMap(path[, error])`", - "type": "method", - "name": "findSourceMap", - "meta": { - "added": [ - "v12.17.0" - ], - "changes": [] - }, - "signatures": [ - { - "return": { - "textRaw": "Returns: {module.SourceMap}", - "name": "return", - "type": "module.SourceMap" - }, - "params": [ - { - "textRaw": "`path` {string}", - "name": "path", - "type": "string" - }, - { - "textRaw": "`error` {Error}", - "name": "error", - "type": "Error" - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            path is the resolved path for the file for which a corresponding source map\nshould be fetched.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            The error instance should be passed as the second parameter to findSourceMap\nin exceptional flows, e.g., when an overridden\nError.prepareStackTrace(error, trace) is invoked. Modules are not added to\nthe module cache until they are successfully loaded, in these cases source maps\nwill be associated with the error instance along with the path.

                                                                                                                                                                                                                                                                                                                                                                                            " - } - ], - "classes": [ - { - "textRaw": "Class: `module.SourceMap`", - "type": "class", - "name": "module.SourceMap", - "meta": { - "added": [ - "v12.17.0" - ], - "changes": [] - }, - "properties": [ - { - "textRaw": "`payload` Returns: {Object}", - "type": "Object", - "name": "return", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Getter for the payload used to construct the SourceMap instance.

                                                                                                                                                                                                                                                                                                                                                                                            " - } - ], - "methods": [ - { - "textRaw": "`sourceMap.findEntry(lineNumber, columnNumber)`", - "type": "method", - "name": "findEntry", - "signatures": [ - { - "return": { - "textRaw": "Returns: {Object}", - "name": "return", - "type": "Object" - }, - "params": [ - { - "textRaw": "`lineNumber` {number}", - "name": "lineNumber", - "type": "number" - }, - { - "textRaw": "`columnNumber` {number}", - "name": "columnNumber", - "type": "number" - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Given a line number and column number in the generated source file, returns\nan object representing the position in the original file. The object returned\nconsists of the following keys:

                                                                                                                                                                                                                                                                                                                                                                                            \n" - } - ], - "signatures": [ - { - "params": [ - { - "textRaw": "`payload` {Object}", - "name": "payload", - "type": "Object" - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Creates a new sourceMap instance.

                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                            payload is an object with keys matching the Source Map V3 format:

                                                                                                                                                                                                                                                                                                                                                                                            \n" - } - ] - } - ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            This section was moved to\nModules: module core module.

                                                                                                                                                                                                                                                                                                                                                                                            \n\n", "type": "module", - "displayName": "Source Map V3 Support" + "displayName": "Source map v3 support" } ], "vars": [ { - "textRaw": "The `module` Object", + "textRaw": "The `module` object", "name": "module", "meta": { "added": [ @@ -600,16 +389,22 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            Whether or not the module is done loading, or is in the process of\nloading.

                                                                                                                                                                                                                                                                                                                                                                                            " }, { - "textRaw": "`parent` {module}", - "type": "module", + "textRaw": "`parent` {module | null | undefined}", + "type": "module | null | undefined", "name": "parent", "meta": { "added": [ "v0.1.16" ], + "deprecated": [ + "v12.19.0", + "v14.6.0" + ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The module that first required this one.

                                                                                                                                                                                                                                                                                                                                                                                            " + "stability": 0, + "stabilityText": "Deprecated: Please use [`require.main`][] and\n[`module.children`][] instead.", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                            The module that first required this one, or null if the current module is the\nentry point of the current process, or undefined if the module was loaded by\nsomething that is not a CommonJS module (E.G.: REPL or import).

                                                                                                                                                                                                                                                                                                                                                                                            " }, { "textRaw": "`path` {string}", diff -Nru nodejs-mozilla-12.18.1/doc/api/modules.md nodejs-mozilla-12.22.12/doc/api/modules.md --- nodejs-mozilla-12.18.1/doc/api/modules.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/modules.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# Modules +# Modules: CommonJS modules @@ -78,7 +78,7 @@ `__filename`), the entry point of the current application can be obtained by checking `require.main.filename`. -## Addenda: Package Manager Tips +## Addenda: Package manager tips @@ -98,10 +98,9 @@ package may itself have dependencies, and in some cases, these may even collide or form cyclic dependencies. -Since Node.js looks up the `realpath` of any modules it loads (that is, -resolves symlinks), and then looks for their dependencies in the `node_modules` -folders as described [here](#modules_loading_from_node_modules_folders), this -situation is very simple to resolve with the following architecture: +Because Node.js looks up the `realpath` of any modules it loads (that is, it +resolves symlinks) and then [looks for their dependencies in `node_modules` folders](#modules_loading_from_node_modules_folders), +this situation can be resolved with the following architecture: * `/usr/lib/node/foo/1.2.3/`: Contents of the `foo` package, version 1.2.3. * `/usr/lib/node/bar/4.3.2/`: Contents of the `bar` package that `foo` depends @@ -139,7 +138,7 @@ reserved for [ECMAScript Modules][] which cannot be loaded via `require()`. See [ECMAScript Modules][] for more details. -## All Together... +## All together... @@ -149,7 +148,7 @@ Putting together all of the above, here is the high-level algorithm in pseudocode of what `require()` does: -```txt +```text require(X) from module at path Y 1. If X is a core module, a. return the core module @@ -160,20 +159,22 @@ a. LOAD_AS_FILE(Y + X) b. LOAD_AS_DIRECTORY(Y + X) c. THROW "not found" -4. LOAD_SELF_REFERENCE(X, dirname(Y)) -5. LOAD_NODE_MODULES(X, dirname(Y)) -6. THROW "not found" +4. If X begins with '#' + a. LOAD_PACKAGE_IMPORTS(X, dirname(Y)) +5. LOAD_PACKAGE_SELF(X, dirname(Y)) +6. LOAD_NODE_MODULES(X, dirname(Y)) +7. THROW "not found" LOAD_AS_FILE(X) -1. If X is a file, load X as its file extension format. STOP -2. If X.js is a file, load X.js as JavaScript text. STOP -3. If X.json is a file, parse X.json to a JavaScript Object. STOP -4. If X.node is a file, load X.node as binary addon. STOP +1. If X is a file, load X as its file extension format. STOP +2. If X.js is a file, load X.js as JavaScript text. STOP +3. If X.json is a file, parse X.json to a JavaScript Object. STOP +4. If X.node is a file, load X.node as binary addon. STOP LOAD_INDEX(X) -1. If X/index.js is a file, load X/index.js as JavaScript text. STOP +1. If X/index.js is a file, load X/index.js as JavaScript text. STOP 2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP -3. If X/index.node is a file, load X/index.node as binary addon. STOP +3. If X/index.node is a file, load X/index.node as binary addon. STOP LOAD_AS_DIRECTORY(X) 1. If X/package.json is a file, @@ -189,7 +190,7 @@ LOAD_NODE_MODULES(X, START) 1. let DIRS = NODE_MODULES_PATHS(START) 2. for each DIR in DIRS: - a. LOAD_PACKAGE_EXPORTS(DIR, X) + a. LOAD_PACKAGE_EXPORTS(X, DIR) b. LOAD_AS_FILE(DIR/X) c. LOAD_AS_DIRECTORY(DIR/X) @@ -204,38 +205,45 @@ d. let I = I - 1 5. return DIRS -LOAD_SELF_REFERENCE(X, START) -1. Find the closest package scope to START. +LOAD_PACKAGE_IMPORTS(X, DIR) +1. Find the closest package scope SCOPE to DIR. 2. If no scope was found, return. -3. If the `package.json` has no "exports", return. -4. If the name in `package.json` isn't a prefix of X, throw "not found". -5. Otherwise, load the remainder of X relative to this package as if it - was loaded via `LOAD_NODE_MODULES` with a name in `package.json`. +3. If the SCOPE/package.json "imports" is null or undefined, return. +4. let MATCH = PACKAGE_IMPORTS_RESOLVE(X, pathToFileURL(SCOPE), + ["node", "require"]) defined in the ESM resolver. +5. RESOLVE_ESM_MATCH(MATCH). -LOAD_PACKAGE_EXPORTS(DIR, X) -1. Try to interpret X as a combination of name and subpath where the name +LOAD_PACKAGE_EXPORTS(X, DIR) +1. Try to interpret X as a combination of NAME and SUBPATH where the name may have a @scope/ prefix and the subpath begins with a slash (`/`). -2. If X does not match this pattern or DIR/name/package.json is not a file, +2. If X does not match this pattern or DIR/NAME/package.json is not a file, return. -3. Parse DIR/name/package.json, and look for "exports" field. +3. Parse DIR/NAME/package.json, and look for "exports" field. 4. If "exports" is null or undefined, return. -5. If "exports" is an object with some keys starting with "." and some keys - not starting with ".", throw "invalid config". -6. If "exports" is a string, or object with no keys starting with ".", treat - it as having that value as its "." object property. -7. If subpath is "." and "exports" does not have a "." entry, return. -8. Find the longest key in "exports" that the subpath starts with. -9. If no such key can be found, throw "not found". -10. let RESOLVED = - fileURLToPath(PACKAGE_EXPORTS_TARGET_RESOLVE(pathToFileURL(DIR/name), - exports[key], subpath.slice(key.length), ["node", "require"])), as defined - in the ESM resolver. -11. If key ends with "/": - a. LOAD_AS_FILE(RESOLVED) - b. LOAD_AS_DIRECTORY(RESOLVED) -12. Otherwise - a. If RESOLVED is a file, load it as its file extension format. STOP -13. Throw "not found" +5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(DIR/NAME), "." + SUBPATH, + `package.json` "exports", ["node", "require"]) defined in the ESM resolver. +6. RESOLVE_ESM_MATCH(MATCH) + +LOAD_PACKAGE_SELF(X, DIR) +1. Find the closest package scope SCOPE to DIR. +2. If no scope was found, return. +3. If the SCOPE/package.json "exports" is null or undefined, return. +4. If the SCOPE/package.json "name" is not the first segment of X, return. +5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(SCOPE), + "." + X.slice("name".length), `package.json` "exports", ["node", "require"]) + defined in the ESM resolver. +6. RESOLVE_ESM_MATCH(MATCH) + +RESOLVE_ESM_MATCH(MATCH) +1. let { RESOLVED, EXACT } = MATCH +2. let RESOLVED_PATH = fileURLToPath(RESOLVED) +3. If EXACT is true, + a. If the file at RESOLVED_PATH exists, load RESOLVED_PATH as its extension + format. STOP +4. Otherwise, if EXACT is false, + a. LOAD_AS_FILE(RESOLVED_PATH) + b. LOAD_AS_DIRECTORY(RESOLVED_PATH) +5. THROW "not found" ``` ## Caching @@ -254,7 +262,7 @@ To have a module execute code multiple times, export a function, and call that function. -### Module Caching Caveats +### Module caching caveats @@ -269,7 +277,7 @@ `require('./foo')` and `require('./FOO')` return two different objects, irrespective of whether or not `./foo` and `./FOO` are the same file. -## Core Modules +## Core modules @@ -347,7 +355,7 @@ Careful planning is required to allow cyclic module dependencies to work correctly within an application. -## File Modules +## File modules @@ -373,7 +381,7 @@ If the given path does not exist, `require()` will throw an [`Error`][] with its `code` property set to `'MODULE_NOT_FOUND'`. -## Folders as Modules +## Folders as modules @@ -382,8 +390,8 @@ There are three ways in which a folder may be passed to `require()` as an argument. -The first is to create a `package.json` file in the root of the folder, -which specifies a `main` module. An example `package.json` file might +The first is to create a [`package.json`][] file in the root of the folder, +which specifies a `main` module. An example [`package.json`][] file might look like this: ```json @@ -397,10 +405,10 @@ This is the extent of the awareness of `package.json` files within Node.js. -If there is no `package.json` file present in the directory, or if the -`'main'` entry is missing or cannot be resolved, then Node.js +If there is no [`package.json`][] file present in the directory, or if the +[`"main"`][] entry is missing or cannot be resolved, then Node.js will attempt to load an `index.js` or `index.node` file out of that -directory. For example, if there was no `package.json` file in the above +directory. For example, if there was no [`package.json`][] file in the previous example, then `require('./some-library')` would attempt to load: * `./some-library/index.js` @@ -409,11 +417,11 @@ If these attempts fail, then Node.js will report the entire module as missing with the default error: -```txt +```console Error: Cannot find module 'some-library' ``` -## Loading from `node_modules` Folders +## Loading from `node_modules` folders @@ -680,7 +688,7 @@ console.log(require.main); ``` -```sh +```bash node entry.js ``` @@ -737,7 +745,7 @@ `null` if the `request` string references a core module, for example `http` or `fs`. -## The `module` Object +## The `module` object @@ -894,11 +902,19 @@ ### `module.parent` -* {module} +> Stability: 0 - Deprecated: Please use [`require.main`][] and +> [`module.children`][] instead. + +* {module | null | undefined} -The module that first required this one. +The module that first required this one, or `null` if the current module is the +entry point of the current process, or `undefined` if the module was loaded by +something that is not a CommonJS module (E.G.: REPL or `import`). ### `module.path` - -* {Object} - -Provides general utility methods when interacting with instances of -`Module`, the `module` variable often seen in file modules. Accessed -via `require('module')`. - -### `module.builtinModules` - - -* {string[]} - -A list of the names of all modules provided by Node.js. Can be used to verify -if a module is maintained by a third party or not. - -`module` in this context isn't the same object that's provided -by the [module wrapper][]. To access it, require the `Module` module: - -```js -const builtin = require('module').builtinModules; -``` - -### `module.createRequire(filename)` - - -* `filename` {string|URL} Filename to be used to construct the require - function. Must be a file URL object, file URL string, or absolute path - string. -* Returns: {require} Require function - -```js -import { createRequire } from 'module'; -const require = createRequire(import.meta.url); - -// sibling-module.js is a CommonJS module. -const siblingModule = require('./sibling-module'); -``` - -### `module.createRequireFromPath(filename)` - - -> Stability: 0 - Deprecated: Please use [`createRequire()`][] instead. - -* `filename` {string} Filename to be used to construct the relative require - function. -* Returns: {require} Require function - -```js -const { createRequireFromPath } = require('module'); -const requireUtil = createRequireFromPath('../src/utils/'); - -// Require `../src/utils/some-tool` -requireUtil('./some-tool'); -``` - -### `module.syncBuiltinESMExports()` - - -The `module.syncBuiltinESMExports()` method updates all the live bindings for -builtin ES Modules to match the properties of the CommonJS exports. It does -not add or remove exported names from the ES Modules. - -```js -const fs = require('fs'); -const { syncBuiltinESMExports } = require('module'); - -fs.readFile = null; - -delete fs.readFileSync; - -fs.newAPI = function newAPI() { - // ... -}; - -syncBuiltinESMExports(); - -import('fs').then((esmFS) => { - assert.strictEqual(esmFS.readFile, null); - assert.strictEqual('readFileSync' in fs, true); - assert.strictEqual(esmFS.newAPI, undefined); -}); -``` - -## Source Map V3 Support - - -> Stability: 1 - Experimental - -Helpers for interacting with the source map cache. This cache is -populated when source map parsing is enabled and -[source map include directives][] are found in a modules' footer. - -To enable source map parsing, Node.js must be run with the flag -[`--enable-source-maps`][], or with code coverage enabled by setting -[`NODE_V8_COVERAGE=dir`][]. - -```js -const { findSourceMap, SourceMap } = require('module'); -``` - -### `module.findSourceMap(path[, error])` - - -* `path` {string} -* `error` {Error} -* Returns: {module.SourceMap} - -`path` is the resolved path for the file for which a corresponding source map -should be fetched. - -The `error` instance should be passed as the second parameter to `findSourceMap` -in exceptional flows, e.g., when an overridden -[`Error.prepareStackTrace(error, trace)`][] is invoked. Modules are not added to -the module cache until they are successfully loaded, in these cases source maps -will be associated with the `error` instance along with the `path`. - -### Class: `module.SourceMap` - - -#### `new SourceMap(payload)` - -* `payload` {Object} - -Creates a new `sourceMap` instance. - -`payload` is an object with keys matching the [Source Map V3 format][]: - -* `file`: {string} -* `version`: {number} -* `sources`: {string[]} -* `sourcesContent`: {string[]} -* `names`: {string[]} -* `mappings`: {string} -* `sourceRoot`: {string} - -#### `sourceMap.payload` - -* Returns: {Object} - -Getter for the payload used to construct the [`SourceMap`][] instance. - -#### `sourceMap.findEntry(lineNumber, columnNumber)` - -* `lineNumber` {number} -* `columnNumber` {number} -* Returns: {Object} +## The `Module` object -Given a line number and column number in the generated source file, returns -an object representing the position in the original file. The object returned -consists of the following keys: +This section was moved to +[Modules: `module` core module](module.html#module_the_module_object). -* generatedLine: {number} -* generatedColumn: {number} -* originalSource: {string} -* originalLine: {number} -* originalColumn: {number} + +* `module.builtinModules` +* `module.createRequire(filename)` +* `module.createRequireFromPath(filename)` +* `module.syncBuiltinESMExports()` + +## Source map v3 support + +This section was moved to +[Modules: `module` core module](module.html#module_source_map_v3_support). + + +* `module.findSourceMap(path[, error])` +* Class: `module.SourceMap` + * `new SourceMap(payload)` + * `sourceMap.payload` + * `sourceMap.findEntry(lineNumber, columnNumber)` [GLOBAL_FOLDERS]: #modules_loading_from_the_global_folders [`Error`]: errors.html#errors_class_error [`__dirname`]: #modules_dirname [`__filename`]: #modules_filename -[`createRequire()`]: #modules_module_createrequire_filename [`module` object]: #modules_the_module_object [`module.id`]: #modules_module_id +[`module.children`]: #modules_module_children [`path.dirname()`]: path.html#path_path_dirname_path [ECMAScript Modules]: esm.html [an error]: errors.html#errors_err_require_esm [exports shortcut]: #modules_exports_shortcut [module resolution]: #modules_all_together -[module wrapper]: #modules_the_module_wrapper [native addons]: addons.html -[source map include directives]: https://sourcemaps.info/spec.html#h.lmz475t4mvbx -[`--enable-source-maps`]: cli.html#cli_enable_source_maps -[`NODE_V8_COVERAGE=dir`]: cli.html#cli_node_v8_coverage_dir -[`Error.prepareStackTrace(error, trace)`]: https://v8.dev/docs/stack-trace-api#customizing-stack-traces -[`SourceMap`]: modules.html#modules_class_module_sourcemap -[Source Map V3 format]: https://sourcemaps.info/spec.html#h.mofvlxcwqzej +[`require.main`]: #modules_require_main +[`package.json`]: packages.html#packages_node_js_package_json_field_definitions +[`"main"`]: packages.html#packages_main diff -Nru nodejs-mozilla-12.18.1/doc/api/n-api.html nodejs-mozilla-12.22.12/doc/api/n-api.html --- nodejs-mozilla-12.18.1/doc/api/n-api.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/n-api.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - N-API | Node.js v12.18.1 Documentation + + N-API | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_instance_data(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                            -                                   void** data);
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_instance_data(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                            +                                   void** data);
                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                            • [out] data: The data item that was previously associated with the currently @@ -885,7 +867,7 @@

                                                                                                                                                                                                                                                                                                                                                                                              This API retrieves data that was previously associated with the currently running Agent via napi_set_instance_data(). If no data is set, the call will succeed and data will be set to NULL.

                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                              Basic N-API Data Types#

                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                              Basic N-API data types#

                                                                                                                                                                                                                                                                                                                                                                                              N-API exposes the following fundamental datatypes as abstractions that are consumed by the various APIs. These APIs should be treated as opaque, introspectable only with other N-API calls.

                                                                                                                                                                                                                                                                                                                                                                                              @@ -896,7 +878,7 @@

                                                                                                                                                                                                                                                                                                                                                                                            Integral status code indicating the success or failure of a N-API call. Currently, the following status codes are supported.

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                               napi_ok,
                                                                                                                                                                                                                                                                                                                                                                                               napi_invalid_arg,
                                                                                                                                                                                                                                                                                                                                                                                               napi_object_expected,
                                                                                                                                                                                                                                                                                                                                                                                            @@ -918,8 +900,7 @@
                                                                                                                                                                                                                                                                                                                                                                                               napi_date_expected,
                                                                                                                                                                                                                                                                                                                                                                                               napi_arraybuffer_expected,
                                                                                                                                                                                                                                                                                                                                                                                               napi_detachable_arraybuffer_expected,
                                                                                                                                                                                                                                                                                                                                                                                            -} napi_status;
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +} napi_status;

                                                                                                                                                                                                                                                                                                                                                                                            If additional information is required upon an API returning a failed status, it can be obtained by calling napi_get_last_error_info.

                                                                                                                                                                                                                                                                                                                                                                                            napi_extended_error_info#

                                                                                                                                                                                                                                                                                                                                                                                            @@ -927,13 +908,12 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                            typedef struct {
                                                                                                                                                                                                                                                                                                                                                                                            -  const char* error_message;
                                                                                                                                                                                                                                                                                                                                                                                            -  void* engine_reserved;
                                                                                                                                                                                                                                                                                                                                                                                            -  uint32_t engine_error_code;
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            typedef struct {
                                                                                                                                                                                                                                                                                                                                                                                            +  const char* error_message;
                                                                                                                                                                                                                                                                                                                                                                                            +  void* engine_reserved;
                                                                                                                                                                                                                                                                                                                                                                                            +  uint32_t engine_error_code;
                                                                                                                                                                                                                                                                                                                                                                                               napi_status error_code;
                                                                                                                                                                                                                                                                                                                                                                                            -} napi_extended_error_info;
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +} napi_extended_error_info;
                                                                                                                                                                                                                                                                                                                                                                                            • error_message: UTF8-encoded string containing a VM-neutral description of the error.
                                                                                                                                                                                                                                                                                                                                                                                            • @@ -943,7 +923,7 @@ not implemented for any VM.
                                                                                                                                                                                                                                                                                                                                                                                            • error_code: The N-API status code that originated with the last error.
                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                            See the Error Handling section for additional information.

                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                            See the Error handling section for additional information.

                                                                                                                                                                                                                                                                                                                                                                                            napi_env#

                                                                                                                                                                                                                                                                                                                                                                                            napi_env is used to represent a context that the underlying N-API implementation can use to persist VM-specific state. This structure is passed @@ -975,11 +955,10 @@ the thread-safe function is to be closed immediately (napi_tsfn_abort) or merely released (napi_tsfn_release) and thus available for subsequent use via napi_acquire_threadsafe_function() and napi_call_threadsafe_function().

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                               napi_tsfn_release,
                                                                                                                                                                                                                                                                                                                                                                                               napi_tsfn_abort
                                                                                                                                                                                                                                                                                                                                                                                            -} napi_threadsafe_function_release_mode;
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +} napi_threadsafe_function_release_mode;

                                                                                                                                                                                                                                                                                                                                                                                            napi_threadsafe_function_call_mode#

                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status napi_throw_range_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                            -                                               const char* code,
                                                                                                                                                                                                                                                                                                                                                                                            -                                               const char* msg);
                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status napi_throw_range_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                            +                                               const char* code,
                                                                                                                                                                                                                                                                                                                                                                                            +                                               const char* msg);
                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                            • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                                                                                                                                                            • @@ -1322,10 +1335,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status napi_is_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status napi_is_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                              -                                      bool* result);
                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                              + bool* result);
                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                              • [in] value: The napi_value to be checked.
                                                                                                                                                                                                                                                                                                                                                                                              • @@ -1339,11 +1351,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value code,
                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value msg,
                                                                                                                                                                                                                                                                                                                                                                                                -                                          napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional napi_value with the string for the error code to be @@ -1359,11 +1370,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                  NAPI_EXTERN napi_status napi_create_type_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                  NAPI_EXTERN napi_status napi_create_type_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value code,
                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value msg,
                                                                                                                                                                                                                                                                                                                                                                                                  -                                               napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                  + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                  • [in] code: Optional napi_value with the string for the error code to be @@ -1379,11 +1389,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_create_range_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_create_range_error(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_value code,
                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_value msg,
                                                                                                                                                                                                                                                                                                                                                                                                    -                                                napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                    + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                    • [in] code: Optional napi_value with the string for the error code to be @@ -1399,9 +1408,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_and_clear_last_exception(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                      -                                              napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_and_clear_last_exception(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                      +                                              napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                      • [out] result: The exception if one is pending, NULL otherwise.
                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -1413,8 +1421,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_is_exception_pending(napi_env env, bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_is_exception_pending(napi_env env, bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                        • [out] result: Boolean value that is set to true if an exception is pending.
                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -1426,15 +1433,14 @@ Added in: v9.10.0 N-API version: 3 -
                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_fatal_exception(napi_env env, napi_value err);
                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_fatal_exception(napi_env env, napi_value err);
                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                          • [in] err: The error that is passed to 'uncaughtException'.

                                                                                                                                                                                                                                                                                                                                                                                                          Trigger an 'uncaughtException' in JavaScript. Useful if an async callback throws an exception with no way to recover.

                                                                                                                                                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                                                                                                                                                          Fatal Errors#

                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                          Fatal errors#

                                                                                                                                                                                                                                                                                                                                                                                                          In the event of an unrecoverable error in a native module, a fatal error can be thrown to immediately terminate the process.

                                                                                                                                                                                                                                                                                                                                                                                                          napi_fatal_error#

                                                                                                                                                                                                                                                                                                                                                                                                          @@ -1442,11 +1448,10 @@ Added in: v8.2.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_NO_RETURN void napi_fatal_error(const char* location,
                                                                                                                                                                                                                                                                                                                                                                                                          -                                                 size_t location_len,
                                                                                                                                                                                                                                                                                                                                                                                                          -                                                 const char* message,
                                                                                                                                                                                                                                                                                                                                                                                                          -                                                 size_t message_len);
                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_NO_RETURN void napi_fatal_error(const char* location,
                                                                                                                                                                                                                                                                                                                                                                                                          +                                                 size_t location_len,
                                                                                                                                                                                                                                                                                                                                                                                                          +                                                 const char* message,
                                                                                                                                                                                                                                                                                                                                                                                                          +                                                 size_t message_len);
                                                                                                                                                                                                                                                                                                                                                                                                          • [in] location: Optional location at which the error occurred.
                                                                                                                                                                                                                                                                                                                                                                                                          • [in] location_len: The length of the location in bytes, or @@ -1457,7 +1462,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                          The function call does not return, the process will be terminated.

                                                                                                                                                                                                                                                                                                                                                                                                          This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                                                                                                                                                          Object Lifetime management#

                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                          Object lifetime management#

                                                                                                                                                                                                                                                                                                                                                                                                          As N-API calls are made, handles to objects in the heap for the underlying VM may be returned as napi_values. These handles must hold the objects 'live' until they are no longer required by the native code, @@ -1476,15 +1481,14 @@

                                                                                                                                                                                                                                                                                                                                                                                                          It is often necessary to make the lifespan of handles shorter than the lifespan of a native method. For example, consider a native method that has a loop which iterates through the elements in a large array:

                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                          for (int i = 0; i < 1000000; i++) {
                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                          for (int i = 0; i < 1000000; i++) {
                                                                                                                                                                                                                                                                                                                                                                                                             napi_value result;
                                                                                                                                                                                                                                                                                                                                                                                                             napi_status status = napi_get_element(env, object, i, &result);
                                                                                                                                                                                                                                                                                                                                                                                                          -  if (status != napi_ok) {
                                                                                                                                                                                                                                                                                                                                                                                                          -    break;
                                                                                                                                                                                                                                                                                                                                                                                                          +  if (status != napi_ok) {
                                                                                                                                                                                                                                                                                                                                                                                                          +    break;
                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                          -  // do something with element
                                                                                                                                                                                                                                                                                                                                                                                                          -}
                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                          + // do something with element +}

                                                                                                                                                                                                                                                                                                                                                                                                          This would result in a large number of handles being created, consuming substantial resources. In addition, even though the native code could only use the most recent handle, all of the associated objects would also be @@ -1502,24 +1506,23 @@

                                                                                                                                                                                                                                                                                                                                                                                                          Taking the earlier example, adding calls to napi_open_handle_scope and napi_close_handle_scope would ensure that at most a single handle is valid throughout the execution of the loop:

                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                          for (int i = 0; i < 1000000; i++) {
                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                          for (int i = 0; i < 1000000; i++) {
                                                                                                                                                                                                                                                                                                                                                                                                             napi_handle_scope scope;
                                                                                                                                                                                                                                                                                                                                                                                                             napi_status status = napi_open_handle_scope(env, &scope);
                                                                                                                                                                                                                                                                                                                                                                                                          -  if (status != napi_ok) {
                                                                                                                                                                                                                                                                                                                                                                                                          -    break;
                                                                                                                                                                                                                                                                                                                                                                                                          +  if (status != napi_ok) {
                                                                                                                                                                                                                                                                                                                                                                                                          +    break;
                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                             napi_value result;
                                                                                                                                                                                                                                                                                                                                                                                                             status = napi_get_element(env, object, i, &result);
                                                                                                                                                                                                                                                                                                                                                                                                          -  if (status != napi_ok) {
                                                                                                                                                                                                                                                                                                                                                                                                          -    break;
                                                                                                                                                                                                                                                                                                                                                                                                          +  if (status != napi_ok) {
                                                                                                                                                                                                                                                                                                                                                                                                          +    break;
                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                          -  // do something with element
                                                                                                                                                                                                                                                                                                                                                                                                          +  // do something with element
                                                                                                                                                                                                                                                                                                                                                                                                             status = napi_close_handle_scope(env, scope);
                                                                                                                                                                                                                                                                                                                                                                                                          -  if (status != napi_ok) {
                                                                                                                                                                                                                                                                                                                                                                                                          -    break;
                                                                                                                                                                                                                                                                                                                                                                                                          +  if (status != napi_ok) {
                                                                                                                                                                                                                                                                                                                                                                                                          +    break;
                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                          -}
                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                          +}

                                                                                                                                                                                                                                                                                                                                                                                                          When nesting scopes, there are cases where a handle from an inner scope needs to live beyond the lifespan of that scope. N-API supports an 'escapable scope' in order to support this case. An escapable scope @@ -1536,9 +1539,8 @@ Added in: v8.0.0 N-API version: 1 -

                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                          -                                               napi_handle_scope* result);
                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                          +                                               napi_handle_scope* result);
                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                          • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -1550,9 +1552,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                            -                                                napi_handle_scope scope);
                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                            +                                                napi_handle_scope scope);
                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                            • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -1566,10 +1567,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                              -    napi_open_escapable_handle_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                              -                                     napi_handle_scope* result);
                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                              +    napi_open_escapable_handle_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                              +                                     napi_handle_scope* result);
                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                              • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -1582,10 +1582,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                -    napi_close_escapable_handle_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                -                                      napi_handle_scope scope);
                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                +    napi_close_escapable_handle_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                +                                      napi_handle_scope scope);
                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -1599,11 +1598,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_escape_handle(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_escape_handle(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_escapable_handle_scope scope,
                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value escapee,
                                                                                                                                                                                                                                                                                                                                                                                                                  -                               napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                  + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] scope: napi_value representing the current scope.
                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -1655,11 +1653,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_create_reference(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_create_reference(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                   napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                    -                                              uint32_t initial_refcount,
                                                                                                                                                                                                                                                                                                                                                                                                                    -                                              napi_ref* result);
                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                    + uint32_t initial_refcount, + napi_ref* result);
                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] value: napi_value representing the Object to which we want a @@ -1675,8 +1672,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref);
                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref);
                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] ref: napi_ref to be deleted.
                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -1689,10 +1685,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status napi_reference_ref(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status napi_reference_ref(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_ref ref,
                                                                                                                                                                                                                                                                                                                                                                                                                        -                                           uint32_t* result);
                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                        + uint32_t* result);
                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] ref: napi_ref for which the reference count will be incremented.
                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -1706,10 +1701,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_EXTERN napi_status napi_reference_unref(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_EXTERN napi_status napi_reference_unref(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_ref ref,
                                                                                                                                                                                                                                                                                                                                                                                                                          -                                             uint32_t* result);
                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                          + uint32_t* result);
                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] ref: napi_ref for which the reference count will be decremented.
                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -1723,10 +1717,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status napi_get_reference_value(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status napi_get_reference_value(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_ref ref,
                                                                                                                                                                                                                                                                                                                                                                                                                            -                                                 napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                            + napi_value* result);

                                                                                                                                                                                                                                                                                                                                                                                                                            the napi_value passed in or out of these methods is a handle to the object to which the reference is related.

                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -1751,10 +1744,9 @@ Added in: v10.2.0 N-API version: 3 -
                                                                                                                                                                                                                                                                                                                                                                                                                              NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                              -                                                  void (*fun)(void* arg),
                                                                                                                                                                                                                                                                                                                                                                                                                              -                                                  void* arg);
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                              +                                                  void (*fun)(void* arg),
                                                                                                                                                                                                                                                                                                                                                                                                                              +                                                  void* arg);

                                                                                                                                                                                                                                                                                                                                                                                                                              Registers fun as a function to be run with the arg parameter once the current Node.js environment exits.

                                                                                                                                                                                                                                                                                                                                                                                                                              A function can safely be specified multiple times with different @@ -1763,33 +1755,88 @@ and will lead the process to abort.

                                                                                                                                                                                                                                                                                                                                                                                                                              The hooks will be called in reverse order, i.e. the most recently added one will be called first.

                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                              Removing this hook can be done by using napi_remove_env_cleanup_hook. +

                                                                                                                                                                                                                                                                                                                                                                                                                              Removing this hook can be done by using napi_remove_env_cleanup_hook. Typically, that happens when the resource for which this hook was added is being torn down anyway.

                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              For asynchronous cleanup, napi_add_async_cleanup_hook is available.

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_remove_env_cleanup_hook#

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                              -                                                     void (*fun)(void* arg),
                                                                                                                                                                                                                                                                                                                                                                                                                              -                                                     void* arg);
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                              +                                                     void (*fun)(void* arg),
                                                                                                                                                                                                                                                                                                                                                                                                                              +                                                     void* arg);

                                                                                                                                                                                                                                                                                                                                                                                                                              Unregisters fun as a function to be run with the arg parameter once the current Node.js environment exits. Both the argument and the function value need to be exact matches.

                                                                                                                                                                                                                                                                                                                                                                                                                              The function must have originally been registered with napi_add_env_cleanup_hook, otherwise the process will abort.

                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_add_async_cleanup_hook#

                                                                                                                                                                                                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status napi_add_async_cleanup_hook(
                                                                                                                                                                                                                                                                                                                                                                                                                              +    napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                              +    napi_async_cleanup_hook hook,
                                                                                                                                                                                                                                                                                                                                                                                                                              +    void* arg,
                                                                                                                                                                                                                                                                                                                                                                                                                              +    napi_async_cleanup_hook_handle* remove_handle);
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] hook: The function pointer to call at environment teardown.
                                                                                                                                                                                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] arg: The pointer to pass to hook when it gets called.
                                                                                                                                                                                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                                                                                                                                                                                              • [out] remove_handle: Optional handle that refers to the asynchronous cleanup +hook.
                                                                                                                                                                                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              Registers hook, which is a function of type napi_async_cleanup_hook, as +a function to be run with the remove_handle and arg parameters once the +current Node.js environment exits.

                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              Unlike napi_add_env_cleanup_hook, the hook is allowed to be asynchronous.

                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              Otherwise, behavior generally matches that of napi_add_env_cleanup_hook.

                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              If remove_handle is not NULL, an opaque value will be stored in it +that must later be passed to napi_remove_async_cleanup_hook, +regardless of whether the hook has already been invoked. +Typically, that happens when the resource for which this hook was added +is being torn down anyway.

                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_remove_async_cleanup_hook#

                                                                                                                                                                                                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status napi_remove_async_cleanup_hook(
                                                                                                                                                                                                                                                                                                                                                                                                                              +    napi_async_cleanup_hook_handle remove_handle);
                                                                                                                                                                                                                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                                                                                                                                                                                                                              Unregisters the cleanup hook corresponding to remove_handle. This will prevent +the hook from being executed, unless it has already started executing. +This must be called on any napi_async_cleanup_hook_handle value obtained +from napi_add_async_cleanup_hook.

                                                                                                                                                                                                                                                                                                                                                                                                                              Module registration#

                                                                                                                                                                                                                                                                                                                                                                                                                              N-API modules are registered in a manner similar to other modules except that instead of using the NODE_MODULE macro the following is used:

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

                                                                                                                                                                                                                                                                                                                                                                                                                              The next difference is the signature for the Init method. For a N-API module it is as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value Init(napi_env env, napi_value exports);
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value Init(napi_env env, napi_value exports);

                                                                                                                                                                                                                                                                                                                                                                                                                              The return value from Init is treated as the exports object for the module. The Init method is passed an empty object via the exports parameter as a convenience. If Init returns NULL, the parameter passed as exports is @@ -1797,64 +1844,68 @@ specify anything as the exports property of the module.

                                                                                                                                                                                                                                                                                                                                                                                                                              To add the method hello as a function so that it can be called as a method provided by the addon:

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_status status;
                                                                                                                                                                                                                                                                                                                                                                                                                              -  napi_property_descriptor desc =
                                                                                                                                                                                                                                                                                                                                                                                                                              -    {"hello", NULL, Method, NULL, NULL, NULL, napi_default, NULL};
                                                                                                                                                                                                                                                                                                                                                                                                                              -  status = napi_define_properties(env, exports, 1, &desc);
                                                                                                                                                                                                                                                                                                                                                                                                                              -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                              -  return exports;
                                                                                                                                                                                                                                                                                                                                                                                                                              -}
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              + napi_property_descriptor desc = { + "hello", + NULL, + Method, + NULL, + NULL, + NULL, + napi_writable | napi_enumerable | napi_configurable, + NULL + }; + status = napi_define_properties(env, exports, 1, &desc); + if (status != napi_ok) return NULL; + return exports; +}

                                                                                                                                                                                                                                                                                                                                                                                                                              To set a function to be returned by the require() for the addon:

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_value method;
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_status status;
                                                                                                                                                                                                                                                                                                                                                                                                                              -  status = napi_create_function(env, "exports", NAPI_AUTO_LENGTH, Method, NULL, &method);
                                                                                                                                                                                                                                                                                                                                                                                                                              -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                              -  return method;
                                                                                                                                                                                                                                                                                                                                                                                                                              -}
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              + status = napi_create_function(env, "exports", NAPI_AUTO_LENGTH, Method, NULL, &method); + if (status != napi_ok) return NULL; + return method; +}

                                                                                                                                                                                                                                                                                                                                                                                                                              To define a class so that new instances can be created (often used with -Object Wrap):

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              // NOTE: partial example, not all referenced code is included
                                                                                                                                                                                                                                                                                                                                                                                                                              -napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                                                                                                                                                                                                                                                              +Object wrap):

                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              // NOTE: partial example, not all referenced code is included
                                                                                                                                                                                                                                                                                                                                                                                                                              +napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_status status;
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_property_descriptor properties[] = {
                                                                                                                                                                                                                                                                                                                                                                                                                              -    { "value", NULL, NULL, GetValue, SetValue, NULL, napi_default, NULL },
                                                                                                                                                                                                                                                                                                                                                                                                                              -    DECLARE_NAPI_METHOD("plusOne", PlusOne),
                                                                                                                                                                                                                                                                                                                                                                                                                              -    DECLARE_NAPI_METHOD("multiply", Multiply),
                                                                                                                                                                                                                                                                                                                                                                                                                              +    { "value", NULL, NULL, GetValue, SetValue, NULL, napi_writable | napi_configurable, NULL },
                                                                                                                                                                                                                                                                                                                                                                                                                              +    DECLARE_NAPI_METHOD("plusOne", PlusOne),
                                                                                                                                                                                                                                                                                                                                                                                                                              +    DECLARE_NAPI_METHOD("multiply", Multiply),
                                                                                                                                                                                                                                                                                                                                                                                                                                 };
                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_value cons;
                                                                                                                                                                                                                                                                                                                                                                                                                                 status =
                                                                                                                                                                                                                                                                                                                                                                                                                              -      napi_define_class(env, "MyObject", New, NULL, 3, properties, &cons);
                                                                                                                                                                                                                                                                                                                                                                                                                              -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                              +      napi_define_class(env, "MyObject", New, NULL, 3, properties, &cons);
                                                                                                                                                                                                                                                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                              -  status = napi_create_reference(env, cons, 1, &constructor);
                                                                                                                                                                                                                                                                                                                                                                                                                              -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                              +  status = napi_create_reference(env, cons, 1, &constructor);
                                                                                                                                                                                                                                                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                              -  status = napi_set_named_property(env, exports, "MyObject", cons);
                                                                                                                                                                                                                                                                                                                                                                                                                              -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                              +  status = napi_set_named_property(env, exports, "MyObject", cons);
                                                                                                                                                                                                                                                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                              -  return exports;
                                                                                                                                                                                                                                                                                                                                                                                                                              -}
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              + return exports; +}

                                                                                                                                                                                                                                                                                                                                                                                                                              If the module will be loaded multiple times during the lifetime of the Node.js process, use the NAPI_MODULE_INIT macro to initialize the module:

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_MODULE_INIT() {
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_MODULE_INIT() {
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_value answer;
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_status result;
                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                              -  status = napi_create_int64(env, 42, &answer);
                                                                                                                                                                                                                                                                                                                                                                                                                              -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                              +  status = napi_create_int64(env, 42, &answer);
                                                                                                                                                                                                                                                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                              -  status = napi_set_named_property(env, exports, "answer", answer);
                                                                                                                                                                                                                                                                                                                                                                                                                              -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                              +  status = napi_set_named_property(env, exports, "answer", answer);
                                                                                                                                                                                                                                                                                                                                                                                                                              +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                              -  return exports;
                                                                                                                                                                                                                                                                                                                                                                                                                              -}
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              + return exports; +}

                                                                                                                                                                                                                                                                                                                                                                                                                              This macro includes NAPI_MODULE, and declares an Init function with a special name and with visibility beyond the addon. This will allow Node.js to initialize the module even if it is loaded multiple times.

                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -1864,10 +1915,10 @@

                                                                                                                                                                                                                                                                                                                                                                                                                              The variables env and exports will be available inside the function body following the macro invocation.

                                                                                                                                                                                                                                                                                                                                                                                                                              For more details on setting properties on objects, see the section on -Working with JavaScript Properties.

                                                                                                                                                                                                                                                                                                                                                                                                                              +Working with JavaScript properties.

                                                                                                                                                                                                                                                                                                                                                                                                                              For more details on building addon modules in general, refer to the existing API.

                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                              Working with JavaScript Values#

                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              Working with JavaScript values#

                                                                                                                                                                                                                                                                                                                                                                                                                              N-API exposes a set of APIs to create all types of JavaScript values. Some of these types are documented under Section 6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -1889,11 +1940,10 @@ Added in: v12.17.0 N-API version: 6 -
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_key_include_prototypes,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_key_own_only
                                                                                                                                                                                                                                                                                                                                                                                                                              -} napi_key_collection_mode;
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +} napi_key_collection_mode;

                                                                                                                                                                                                                                                                                                                                                                                                                              Describes the Keys/Properties filter enums:

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_key_collection_mode limits the range of collected properties.

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_key_own_only limits the collected properties to the given @@ -1904,32 +1954,30 @@ Added in: v12.17.0 N-API version: 6 -

                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                              -  napi_key_all_properties = 0,
                                                                                                                                                                                                                                                                                                                                                                                                                              -  napi_key_writable = 1,
                                                                                                                                                                                                                                                                                                                                                                                                                              -  napi_key_enumerable = 1 << 1,
                                                                                                                                                                                                                                                                                                                                                                                                                              -  napi_key_configurable = 1 << 2,
                                                                                                                                                                                                                                                                                                                                                                                                                              -  napi_key_skip_strings = 1 << 3,
                                                                                                                                                                                                                                                                                                                                                                                                                              -  napi_key_skip_symbols = 1 << 4
                                                                                                                                                                                                                                                                                                                                                                                                                              -} napi_key_filter;
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                              +  napi_key_all_properties = 0,
                                                                                                                                                                                                                                                                                                                                                                                                                              +  napi_key_writable = 1,
                                                                                                                                                                                                                                                                                                                                                                                                                              +  napi_key_enumerable = 1 << 1,
                                                                                                                                                                                                                                                                                                                                                                                                                              +  napi_key_configurable = 1 << 2,
                                                                                                                                                                                                                                                                                                                                                                                                                              +  napi_key_skip_strings = 1 << 3,
                                                                                                                                                                                                                                                                                                                                                                                                                              +  napi_key_skip_symbols = 1 << 4
                                                                                                                                                                                                                                                                                                                                                                                                                              +} napi_key_filter;

                                                                                                                                                                                                                                                                                                                                                                                                                              Property filter bits. They can be or'ed to build a composite filter.

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_key_conversion#

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_key_keep_numbers,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_key_numbers_to_strings
                                                                                                                                                                                                                                                                                                                                                                                                                              -} napi_key_conversion;
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +} napi_key_conversion;

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_key_numbers_to_strings will convert integer indices to strings. napi_key_keep_numbers will return numbers for integer indices.

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_valuetype#

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                              -  // ES6 types (corresponds to typeof)
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                              +  // ES6 types (corresponds to typeof)
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_undefined,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_null,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_boolean,
                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -1940,8 +1988,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_function,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_external,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_bigint,
                                                                                                                                                                                                                                                                                                                                                                                                                              -} napi_valuetype;
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +} napi_valuetype;

                                                                                                                                                                                                                                                                                                                                                                                                                              Describes the type of a napi_value. This generally corresponds to the types described in Section 6.1 of the ECMAScript Language Specification. In addition to types in that section, napi_valuetype can also represent @@ -1949,7 +1996,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                              A JavaScript value of type napi_external appears in JavaScript as a plain object such that no properties can be set on it, and no prototype.

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_typedarray_type#

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_int8_array,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_uint8_array,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_uint8_clamped_array,
                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -1961,19 +2008,17 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_float64_array,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_bigint64_array,
                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_biguint64_array,
                                                                                                                                                                                                                                                                                                                                                                                                                              -} napi_typedarray_type;
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +} napi_typedarray_type;

                                                                                                                                                                                                                                                                                                                                                                                                                              This represents the underlying binary scalar datatype of the TypedArray. Elements of this enum correspond to Section 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                              Object Creation Functions#

                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                              Object creation functions#

                                                                                                                                                                                                                                                                                                                                                                                                                              napi_create_array#

                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_create_array(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_create_array(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                              • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -1987,10 +2032,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_array_with_length(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                -                                          size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                -                                          napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_array_with_length(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                +                                          size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                +                                          napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The initial length of the Array.
                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -2011,11 +2055,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_create_arraybuffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                    size_t byte_length,
                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                    void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                    napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_create_arraybuffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                  +                                    size_t byte_length,
                                                                                                                                                                                                                                                                                                                                                                                                                                  +                                    void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                  +                                    napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] length: The length in bytes of the array buffer to create.
                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -2039,11 +2082,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_create_buffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                    -                               size_t size,
                                                                                                                                                                                                                                                                                                                                                                                                                                    -                               void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                    -                               napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_create_buffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                    +                               size_t size,
                                                                                                                                                                                                                                                                                                                                                                                                                                    +                               void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                    +                               napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] size: Size in bytes of the underlying buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -2058,12 +2100,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_create_buffer_copy(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                    size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                    const void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                    void** result_data,
                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                    napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_create_buffer_copy(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                    size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                    const void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                    void** result_data,
                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                    napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] size: Size in bytes of the input buffer (should be the same as the size @@ -2081,10 +2122,9 @@ Added in: v11.11.0 N-API version: 5 -
                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_create_date(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                        -                             double time,
                                                                                                                                                                                                                                                                                                                                                                                                                                        -                             napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_create_date(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                        +                             double time,
                                                                                                                                                                                                                                                                                                                                                                                                                                        +                             napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] time: ECMAScript time value in milliseconds since 01 January, 1970 UTC.
                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -2101,17 +2141,16 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_create_external(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                 void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_create_external(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                          +                                 void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_finalize finalize_cb,
                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                 void* finalize_hint,
                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                 napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                          + void* finalize_hint, + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] data: Raw pointer to the external data.
                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] finalize_cb: Optional callback to call when the external value is being -collected.
                                                                                                                                                                                                                                                                                                                                                                                                                                          • +collected. napi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] finalize_hint: Optional hint to pass to the finalize callback during collection.
                                                                                                                                                                                                                                                                                                                                                                                                                                          • [out] result: A napi_value representing an external value.
                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -2136,21 +2175,20 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                            -napi_create_external_arraybuffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                 void* external_data,
                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                 size_t byte_length,
                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                            +napi_create_external_arraybuffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                            +                                 void* external_data,
                                                                                                                                                                                                                                                                                                                                                                                                                                            +                                 size_t byte_length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_finalize finalize_cb,
                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                 void* finalize_hint,
                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                 napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                            + void* finalize_hint, + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] external_data: Pointer to the underlying byte buffer of the ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] byte_length: The length in bytes of the underlying buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being -collected.
                                                                                                                                                                                                                                                                                                                                                                                                                                            • +collected. napi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] finalize_hint: Optional hint to pass to the finalize callback during collection.
                                                                                                                                                                                                                                                                                                                                                                                                                                            • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -2175,20 +2213,19 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_create_external_buffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_create_external_buffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                              +                                        size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                              +                                        void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_finalize finalize_cb,
                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        void* finalize_hint,
                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                              + void* finalize_hint, + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] length: Size in bytes of the input buffer (should be the same as the size of the new buffer).
                                                                                                                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] data: Raw pointer to the underlying buffer to copy from.
                                                                                                                                                                                                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] data: Raw pointer to the underlying buffer to expose to JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being -collected.
                                                                                                                                                                                                                                                                                                                                                                                                                                              • +collected. napi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] finalize_hint: Optional hint to pass to the finalize callback during collection.
                                                                                                                                                                                                                                                                                                                                                                                                                                              • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -2211,8 +2248,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_object(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_object(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -2227,10 +2263,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_create_symbol(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_create_symbol(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value description,
                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                               napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                  + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] description: Optional napi_value which refers to a JavaScript @@ -2246,13 +2281,12 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_create_typedarray(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_create_typedarray(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_typedarray_type type,
                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                   size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                                   size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_value arraybuffer,
                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                   size_t byte_offset,
                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                   napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                    + size_t byte_offset, + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -2277,12 +2311,11 @@ Added in: v8.3.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_create_dataview(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                 size_t byte_length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_create_dataview(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                 size_t byte_length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_value arraybuffer,
                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                 size_t byte_offset,
                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                 napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                      + size_t byte_offset, + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] length: Number of elements in the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -2306,8 +2339,7 @@ Added in: v8.4.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -2323,8 +2355,7 @@ Added in: v8.4.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -2340,8 +2371,7 @@ Added in: v8.4.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -2353,15 +2383,14 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                              The JavaScript Number type is described in Section 6.1.6 of the ECMAScript Language Specification. Note the complete range of int64_t cannot be represented with full precision in JavaScript. Integer values -outside the range of Number.MIN_SAFE_INTEGER -(2^53 - 1) - -Number.MAX_SAFE_INTEGER (2^53 - 1) will lose precision.

                                                                                                                                                                                                                                                                                                                                                                                                                                                              +outside the range of Number.MIN_SAFE_INTEGER -(2**53 - 1) - +Number.MAX_SAFE_INTEGER (2**53 - 1) will lose precision.

                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_create_double#

                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_create_double(napi_env env, double value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_create_double(napi_env env, double value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] value: Double-precision value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -2377,10 +2406,9 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_bigint_int64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                     int64_t value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                     napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_bigint_int64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                +                                     int64_t value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                +                                     napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -2393,10 +2421,9 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_create_bigint_uint64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                      uint64_t value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                      napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_create_bigint_uint64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +                                      uint64_t value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +                                      napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -2409,12 +2436,11 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_create_bigint_words(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                     int sign_bit,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                     size_t word_count,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                     const uint64_t* words,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                     napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_create_bigint_words(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                                     int sign_bit,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                                     size_t word_count,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                                     const uint64_t* words,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                                     napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] sign_bit: Determines if the resulting BigInt will be positive or @@ -2433,11 +2459,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_create_string_latin1(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                      const char* str,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                      size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                      napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_create_string_latin1(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                      const char* str,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                      size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                      napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] str: Character buffer representing an ISO-8859-1-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -2455,11 +2480,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_create_string_utf16(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                     const char16_t* str,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                     size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                     napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_create_string_utf16(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                     const char16_t* str,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                     size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                     napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] str: Character buffer representing a UTF16-LE-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -2477,11 +2501,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_create_string_utf8(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                    const char* str,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                    size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                    napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_create_string_utf8(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +                                    const char* str,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +                                    size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +                                    napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] str: Character buffer representing a UTF8-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -2500,10 +2523,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_array_length(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_array_length(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                  uint32_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + uint32_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] value: napi_value representing the JavaScript Array whose length is @@ -2519,11 +2541,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_get_arraybuffer_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_get_arraybuffer_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_value arraybuffer,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                      void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                      size_t* byte_length)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + void** data, + size_t* byte_length)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] arraybuffer: napi_value representing the ArrayBuffer being queried.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -2546,11 +2567,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_buffer_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_buffer_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                 void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                 size_t* length)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + void** data, + size_t* length)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing the node::Buffer being queried.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -2568,10 +2588,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_get_prototype(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_get_prototype(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                               napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] object: napi_value representing JavaScript Object whose prototype @@ -2585,14 +2604,13 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_get_typedarray_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_get_typedarray_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_value typedarray,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_typedarray_type* type,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                     size_t* length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                     void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                                     size_t* length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                                     void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_value* arraybuffer,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                     size_t* byte_offset)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + size_t* byte_offset)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] typedarray: napi_value representing the TypedArray whose @@ -2619,13 +2637,12 @@ Added in: v8.3.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_dataview_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_dataview_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_value dataview,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                   size_t* byte_length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                   void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                   size_t* byte_length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                   void** data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_value* arraybuffer,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                   size_t* byte_offset)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + size_t* byte_offset)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] dataview: napi_value representing the DataView whose @@ -2644,10 +2661,9 @@ Added in: v11.11.0 N-API version: 5 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_get_date_value(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_get_date_value(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                double* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + double* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] value: napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -2665,8 +2681,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] value: napi_value representing JavaScript Boolean.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -2682,10 +2697,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_value_double(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_value_double(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                  double* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + double* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -2701,11 +2715,10 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_get_value_bigint_int64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_get_value_bigint_int64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        int64_t* result,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        bool* lossless);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + int64_t* result, + bool* lossless);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -2723,11 +2736,10 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bigint_uint64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bigint_uint64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                        uint64_t* result,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                        bool* lossless);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + uint64_t* result, + bool* lossless);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -2745,12 +2757,11 @@ Added in: v10.7.0 N-API version: 6 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_get_value_bigint_words(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_get_value_bigint_words(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                        int* sign_bit,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                        size_t* word_count,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                        uint64_t* words);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  + int* sign_bit, + size_t* word_count, + uint64_t* words);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -2770,10 +2781,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_get_value_external(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_get_value_external(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                    void** result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + void** result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] value: napi_value representing JavaScript external value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -2788,10 +2798,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_value_int32(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_value_int32(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                 int32_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + int32_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -2804,7 +2813,7 @@ of the given JavaScript Number.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        If the number exceeds the range of the 32 bit integer, then the result is truncated to the equivalent of the bottom 32 bits. This can result in a large -positive number becoming a negative number if the value is > 2^31 -1.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +positive number becoming a negative number if the value is > 231 - 1.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Non-finite number values (NaN, +Infinity, or -Infinity) set the result to zero.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_get_value_int64#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -2812,10 +2821,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_get_value_int64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_get_value_int64(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                 int64_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + int64_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -2827,7 +2835,8 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This API returns the C int64 primitive equivalent of the given JavaScript Number.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Number values outside the range of Number.MIN_SAFE_INTEGER --(2^53 - 1) - Number.MAX_SAFE_INTEGER (2^53 - 1) will lose precision.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +-(2**53 - 1) - Number.MAX_SAFE_INTEGER (2**53 - 1) will lose +precision.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Non-finite number values (NaN, +Infinity, or -Infinity) set the result to zero.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_get_value_string_latin1#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          @@ -2835,12 +2844,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_get_value_string_latin1(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_get_value_string_latin1(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                         char* buf,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                         size_t bufsize,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                         size_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + char* buf, + size_t bufsize, + size_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -2860,12 +2868,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_value_string_utf8(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_value_string_utf8(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                       char* buf,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                       size_t bufsize,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                       size_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + char* buf, + size_t bufsize, + size_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -2884,12 +2891,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_get_value_string_utf16(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_get_value_string_utf16(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        char16_t* buf,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        size_t bufsize,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                        size_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + char16_t* buf, + size_t bufsize, + size_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -2908,10 +2914,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_uint32(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_uint32(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                  uint32_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + uint32_t* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -2928,8 +2933,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] value: The value of the boolean to retrieve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -2944,8 +2948,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_get_global(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_get_global(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [out] result: napi_value representing JavaScript global object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -2957,8 +2960,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_null(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_null(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [out] result: napi_value representing JavaScript null object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -2970,15 +2972,14 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_get_undefined(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_get_undefined(napi_env env, napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [out] result: napi_value representing JavaScript Undefined value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        This API returns the Undefined object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Working with JavaScript Values and Abstract Operations#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Working with JavaScript values and abstract operations#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        N-API exposes a set of APIs to perform some abstract operations on JavaScript values. Some of these operations are documented under Section 7 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -2994,10 +2995,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_coerce_to_bool(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_coerce_to_bool(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -3012,10 +3012,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_coerce_to_number(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_coerce_to_number(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                  napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -3030,10 +3029,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_coerce_to_object(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_coerce_to_object(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                  napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -3048,10 +3046,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_coerce_to_string(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_coerce_to_string(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                  napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -3066,8 +3063,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value whose type to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -3080,18 +3076,22 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents behavior similar to invoking the typeof Operator on the object as defined in Section 12.5.5 of the ECMAScript Language -Specification. However, it has support for detecting an External value. -If value has a type that is invalid, an error is returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +Specification. However, there are some differences:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. It has support for detecting an External value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. It detects null as a separate type, while ECMAScript typeof would detect +object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If value has a type that is invalid, an error is returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_instanceof#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_instanceof(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_instanceof(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             napi_value constructor,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                            bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -3108,8 +3108,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_is_array(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_is_array(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -3123,8 +3122,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -3137,8 +3135,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_is_buffer(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_is_buffer(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -3152,8 +3149,7 @@ Added in: v11.11.0 N-API version: 5 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_is_date(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_is_date(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -3167,8 +3163,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_is_error(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_is_error(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -3181,8 +3176,7 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -3195,8 +3189,7 @@ Added in: v8.3.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_is_dataview(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_is_dataview(napi_env env, napi_value value, bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -3209,11 +3202,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_strict_equals(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_strict_equals(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value lhs,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value rhs,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                               bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] lhs: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -3226,11 +3218,10 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_detach_arraybuffer#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_detach_arraybuffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                    napi_value arraybuffer)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_detach_arraybuffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +                                    napi_value arraybuffer)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] arraybuffer: The JavaScript ArrayBuffer to be detached.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -3246,12 +3237,11 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_is_detached_arraybuffer#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_is_detached_arraybuffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_is_detached_arraybuffer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value arraybuffer,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                         bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + bool* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] arraybuffer: The JavaScript ArrayBuffer to be checked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -3262,7 +3252,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This API represents the invocation of the ArrayBuffer IsDetachedBuffer operation as defined in Section 24.1.1.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Working with JavaScript Properties#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Working with JavaScript properties#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      N-API exposes a set of APIs to get and set properties on JavaScript objects. Some of these types are documented under Section 7 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      @@ -3283,110 +3273,118 @@ get and set properties on arbitrary JavaScript objects represented by napi_value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      For instance, consider the following JavaScript code snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const obj = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -obj.myProp = 123;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const obj = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +obj.myProp = 123;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// const obj = {}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// const obj = {}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value obj, value;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       status = napi_create_object(env, &obj);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Create a napi_value for 123
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_create_int32(env, 123, &value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// obj.myProp = 123
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_set_named_property(env, obj, "myProp", value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Create a napi_value for 123 +status = napi_create_int32(env, 123, &value); +if (status != napi_ok) return status; + +// obj.myProp = 123 +status = napi_set_named_property(env, obj, "myProp", value); +if (status != napi_ok) return status;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Indexed properties can be set in a similar manner. Consider the following JavaScript snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const arr = [];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -arr[123] = 'hello';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const arr = [];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +arr[123] = 'hello';

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// const arr = [];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// const arr = [];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value arr, value;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       status = napi_create_array(env, &arr);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Create a napi_value for 'hello'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// arr[123] = 'hello';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_set_element(env, arr, 123, value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Create a napi_value for 'hello' +status = napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &value); +if (status != napi_ok) return status; + +// arr[123] = 'hello'; +status = napi_set_element(env, arr, 123, value); +if (status != napi_ok) return status;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Properties can be retrieved using the APIs described in this section. Consider the following JavaScript snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const arr = [];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -const value = arr[123];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const arr = [];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +const value = arr[123];

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status status = napi_generic_failure;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// const arr = []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// const arr = []
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value arr, value;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       status = napi_create_array(env, &arr);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// const value = arr[123]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_get_element(env, arr, 123, &value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// const value = arr[123] +status = napi_get_element(env, arr, 123, &value); +if (status != napi_ok) return status;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Finally, multiple properties can also be defined on an object for performance reasons. Consider the following JavaScript:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const obj = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -Object.defineProperties(obj, {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  'foo': { value: 123, writable: true, configurable: true, enumerable: true },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  'bar': { value: 456, writable: true, configurable: true, enumerable: true }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const obj = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +Object.defineProperties(obj, {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  'foo': { value: 123, writable: true, configurable: true, enumerable: true },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  'bar': { value: 456, writable: true, configurable: true, enumerable: true }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status status = napi_status_generic_failure;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status status = napi_status_generic_failure;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// const obj = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// const obj = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value obj;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       status = napi_create_object(env, &obj);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Create napi_values for 123 and 456
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Create napi_values for 123 and 456
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value fooValue, barValue;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_create_int32(env, 123, &fooValue);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_create_int32(env, 456, &barValue);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +status = napi_create_int32(env, 123, &fooValue);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +status = napi_create_int32(env, 456, &barValue);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Set the properties
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Set the properties
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_property_descriptor descriptors[] = {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  { "foo", NULL, NULL, NULL, NULL, fooValue, napi_default, NULL },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  { "bar", NULL, NULL, NULL, NULL, barValue, napi_default, NULL }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  { "foo", NULL, NULL, NULL, NULL, fooValue, napi_writable | napi_configurable, NULL },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  { "bar", NULL, NULL, NULL, NULL, barValue, napi_writable | napi_configurable, NULL }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       status = napi_define_properties(env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       obj,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                sizeof(descriptors) / sizeof(descriptors[0]),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                sizeof(descriptors) / sizeof(descriptors[0]),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       descriptors);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return status;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Structures#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_property_attributes#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  napi_default = 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  napi_writable = 1 << 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  napi_enumerable = 1 << 1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  napi_configurable = 1 << 2,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  // Used with napi_define_class to distinguish static properties
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  // from instance properties. Ignored by napi_define_properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  napi_static = 1 << 10,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -} napi_property_attributes;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      typedef enum {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  napi_default = 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  napi_writable = 1 << 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  napi_enumerable = 1 << 1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  napi_configurable = 1 << 2,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  // Used with napi_define_class to distinguish static properties
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  // from instance properties. Ignored by napi_define_properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  napi_static = 1 << 10,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  // Default for class methods.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  napi_default_method = napi_writable | napi_configurable,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  // Default for object properties, like in JS obj[prop].
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  napi_default_property = napi_writable |
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                          napi_enumerable |
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                          napi_configurable,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +} napi_property_attributes;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_property_attributes are flags used to control the behavior of properties set on a JavaScript object. Other than napi_static they correspond to the attributes listed in Section 6.1.7.1 @@ -3402,11 +3400,15 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • napi_static: The property will be defined as a static property on a class as opposed to an instance property, which is the default. This is used only by napi_define_class. It is ignored by napi_define_properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • napi_default_method: The property is configureable, writeable but not +enumerable like a method in a JS class.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • napi_default_property: The property is writable, enumerable and configurable +like a property set via JS code obj.key = value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_property_descriptor#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    typedef struct {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  // One of utf8name or name should be NULL.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  const char* utf8name;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    typedef struct {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  // One of utf8name or name should be NULL.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  const char* utf8name;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value name;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_callback method;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    @@ -3415,9 +3417,8 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value value;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_property_attributes attributes;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  void* data;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -} napi_property_descriptor;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + void* data; +} napi_property_descriptor;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • utf8name: Optional String describing the key for the property, encoded as UTF8. One of utf8name or name must be provided for the @@ -3432,16 +3433,16 @@ If this is passed in, set value and method to NULL (since these members won't be used). The given function is called implicitly by the runtime when the property is accessed from JavaScript code (or if a get on the property is -performed using a N-API call).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +performed using a N-API call). napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • setter: A function to call when a set access of the property is performed. If this is passed in, set value and method to NULL (since these members won't be used). The given function is called implicitly by the runtime when the property is set from JavaScript code (or if a set on the property is -performed using a N-API call).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +performed using a N-API call). napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • method: Set this to make the property descriptor object's value property to be a JavaScript function represented by method. If this is passed in, set value, getter and setter to NULL (since these members -won't be used).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +won't be used). napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • attributes: The attributes associated with the particular property. See napi_property_attributes.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • data: The callback data passed into method, getter and setter if this @@ -3453,10 +3454,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_property_names(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_property_names(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                    napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -3474,13 +3474,12 @@ Added in: v12.17.0 N-API version: 6 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_get_all_property_names(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_get_all_property_names(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_key_collection_mode key_mode,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_key_filter key_filter,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_key_conversion key_conversion,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                            napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -3500,11 +3499,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_set_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_set_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value key,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                              napi_value value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + napi_value value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -3518,11 +3516,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value key,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                              napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -3536,11 +3533,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_has_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_has_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             napi_value key,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                              bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -3554,11 +3550,10 @@ Added in: v8.2.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value key,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                 bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -3573,11 +3568,10 @@ Added in: v8.2.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_has_own_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_has_own_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     napi_value key,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                  bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  + bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -3593,11 +3587,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_set_named_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_set_named_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                    const char* utf8Name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                    napi_value value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + const char* utf8Name, + napi_value value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -3612,11 +3605,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_named_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_get_named_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                    const char* utf8Name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                    napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + const char* utf8Name, + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -3631,11 +3623,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_has_named_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_has_named_property(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                    const char* utf8Name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                    bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + const char* utf8Name, + bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -3650,11 +3641,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_set_element(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_set_element(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                             uint32_t index,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                             napi_value value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + uint32_t index, + napi_value value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] object: The object from which to set the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -3668,11 +3658,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_element(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_element(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                             uint32_t index,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                             napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + uint32_t index, + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -3686,11 +3675,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_has_element(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_has_element(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                             uint32_t index,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                             bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + uint32_t index, + bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -3705,11 +3693,10 @@ Added in: v8.2.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_element(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_element(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                uint32_t index,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + uint32_t index, + bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -3724,11 +3711,10 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_define_properties(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_define_properties(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_value object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                   size_t property_count,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                   const napi_property_descriptor* properties);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  + size_t property_count, + const napi_property_descriptor* properties);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -3742,7 +3728,42 @@ this API will set the properties on the object one at a time, as defined by DefineOwnProperty() (described in Section 9.1.6 of the ECMA-262 specification).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Working with JavaScript Functions#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_object_freeze#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_object_freeze(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                               napi_value object);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] object: The object to freeze.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This method freezes a given object. This prevents new properties from +being added to it, existing properties from being removed, prevents +changing the enumerability, configurability, or writability of existing +properties, and prevents the values of existing properties from being changed. +It also prevents the object's prototype from being changed. This is described +in Section 19.1.2.6 of the +ECMA-262 specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_object_seal#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_object_seal(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                             napi_value object);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] object: The object to seal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This method seals a given object. This prevents new properties from being +added to it, as well as marking all existing properties as non-configurable. +This is described in Section 19.1.2.20 +of the ECMA-262 specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Working with JavaScript functions#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    N-API provides a set of APIs that allow JavaScript code to call back into native code. N-API APIs that support calling back into native code take in a callback functions represented by @@ -3768,13 +3789,12 @@ Added in: v8.0.0 N-API version: 1 -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_call_function(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    NAPI_EXTERN napi_status napi_call_function(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value recv,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                           size_t argc,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                           const napi_value* argv,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                                           napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + size_t argc, + const napi_value* argv, + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -3791,49 +3811,46 @@ after an async operation, see napi_make_callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      A sample use case might look as follows. Consider the following JavaScript snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      function AddTwo(num) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  return num + 2;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      function AddTwo(num) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  return num + 2;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Then, the above function can be invoked from a native add-on using the following code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // Get the function named "AddTwo" on the global object
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // Get the function named "AddTwo" on the global object
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value global, add_two, arg;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_status status = napi_get_global(env, &global);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_get_named_property(env, global, "AddTwo", &add_two);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +status = napi_get_named_property(env, global, "AddTwo", &add_two);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// const arg = 1337
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -status = napi_create_int32(env, 1337, &arg);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// const arg = 1337
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +status = napi_create_int32(env, 1337, &arg);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value* argv = &arg;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -size_t argc = 1;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +size_t argc = 1;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// AddTwo(arg);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// AddTwo(arg);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       napi_value return_val;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       status = napi_call_function(env, global, add_two, argc, argv, &return_val);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Convert the result back to a native type
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -int32_t result;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Convert the result back to a native type
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +int32_t result;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       status = napi_get_value_int32(env, return_val, &result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +if (status != napi_ok) return;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_create_function#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_create_function(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                 const char* utf8name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                 size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_create_function(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                 const char* utf8name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +                                 size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_callback cb,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                 void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                 napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + void* data, + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] utf8Name: The name of the function encoded as UTF8. This is visible @@ -3841,7 +3858,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] cb: The native function which should be called when this function -object is invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +object is invoked. napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] data: User-provided data context. This will be passed back into the function when invoked later.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [out] result: napi_value representing the JavaScript function object for @@ -3857,30 +3874,28 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        In order to expose a function as part of the add-on's module exports, set the newly created function on the exports object. A sample module might look as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_value SayHello(napi_env env, napi_callback_info info) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  printf("Hello\n");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_value SayHello(napi_env env, napi_callback_info info) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  printf("Hello\n");
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +napi_value Init(napi_env env, napi_value exports) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_status status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value fn;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  status = napi_create_function(env, NULL, 0, SayHello, NULL, &fn);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  status = napi_create_function(env, NULL, 0, SayHello, NULL, &fn);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  status = napi_set_named_property(env, exports, "sayHello", fn);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  status = napi_set_named_property(env, exports, "sayHello", fn);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  return exports;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  return exports;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Given the above code, the add-on can be used from JavaScript as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const myaddon = require('./addon');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -myaddon.sayHello();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const myaddon = require('./addon');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +myaddon.sayHello();

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The string passed to require() is the name of the target in binding.gyp responsible for creating the .node file.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Any non-NULL data which is passed to this API via the data parameter can @@ -3894,13 +3909,12 @@ Added in: v8.0.0 N-API version: 1 -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_get_cb_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_get_cb_info(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_callback_info cbinfo,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                             size_t* argc,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                             size_t* argc,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_value* argv,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_value* thisArg,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                             void** data)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + void** data)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -3922,10 +3936,9 @@ Added in: v8.6.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_get_new_target(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_get_new_target(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_callback_info cbinfo,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -3939,12 +3952,11 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_new_instance(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_new_instance(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value cons,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                              size_t argc,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +                              size_t argc,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           napi_value* argv,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                              napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + napi_value* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] cons: napi_value representing the JavaScript function to be invoked @@ -3958,34 +3970,32 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              This method is used to instantiate a new JavaScript value using a given napi_value that represents the constructor for the object. For example, consider the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              function MyObject(param) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  this.param = param;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              function MyObject(param) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  this.param = param;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const arg = 'hello';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const value = new MyObject(arg);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const arg = 'hello'; +const value = new MyObject(arg);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The following can be approximated in N-API using the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // Get the constructor function MyObject
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // Get the constructor function MyObject
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_value global, constructor, arg, value;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_status status = napi_get_global(env, &global);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -status = napi_get_named_property(env, global, "MyObject", &constructor);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +status = napi_get_named_property(env, global, "MyObject", &constructor);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// const arg = "hello"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -status = napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &arg);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// const arg = "hello"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +status = napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &arg);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +if (status != napi_ok) return;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_value* argv = &arg;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -size_t argc = 1;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +size_t argc = 1;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// const value = new MyObject(arg)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -status = napi_new_instance(env, constructor, argc, argv, &value);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// const value = new MyObject(arg) +status = napi_new_instance(env, constructor, argc, argv, &value);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Object Wrap#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Object wrap#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              N-API offers a way to "wrap" C++ classes and instances so that the class constructor and methods can be called from JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                @@ -4004,33 +4014,155 @@ called on a class prototype and a function called on an instance of a class. A common pattern used to address this problem is to save a persistent reference to the class constructor for later instanceof checks.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value MyClass_constructor = NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value MyClass_constructor = NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 status = napi_get_reference_value(env, MyClass::es_constructor, &MyClass_constructor);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 assert(napi_ok == status);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -bool is_instance = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +bool is_instance = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 status = napi_instanceof(env, es_this, MyClass_constructor, &is_instance);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 assert(napi_ok == status);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -if (is_instance) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  // napi_unwrap() ...
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -} else {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  // otherwise...
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +if (is_instance) { + // napi_unwrap() ... +} else { + // otherwise... +}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The reference must be freed once it is no longer needed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                There are occasions where napi_instanceof() is insufficient for ensuring that +a JavaScript object is a wrapper for a certain native type. This is the case +especially when wrapped JavaScript objects are passed back into the addon via +static methods rather than as the this value of prototype methods. In such +cases there is a chance that they may be unwrapped incorrectly.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myAddon = require('./build/Release/my_addon.node');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// `openDatabase()` returns a JavaScript object that wraps a native database
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// handle.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +const dbHandle = myAddon.openDatabase();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// `query()` returns a JavaScript object that wraps a native query handle.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +const queryHandle = myAddon.query(dbHandle, 'Gimme ALL the things!');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// There is an accidental error in the line below. The first parameter to
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// `myAddon.queryHasRecords()` should be the database handle (`dbHandle`), not
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// the query handle (`query`), so the correct condition for the while-loop
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// should be
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// myAddon.queryHasRecords(dbHandle, queryHandle)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +while (myAddon.queryHasRecords(queryHandle, dbHandle)) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // retrieve records
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In the above example myAddon.queryHasRecords() is a method that accepts two +arguments. The first is a database handle and the second is a query handle. +Internally, it unwraps the first argument and casts the resulting pointer to a +native database handle. It then unwraps the second argument and casts the +resulting pointer to a query handle. If the arguments are passed in the wrong +order, the casts will work, however, there is a good chance that the underlying +database operation will fail, or will even cause an invalid memory access.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To ensure that the pointer retrieved from the first argument is indeed a pointer +to a database handle and, similarly, that the pointer retrieved from the second +argument is indeed a pointer to a query handle, the implementation of +queryHasRecords() has to perform a type validation. Retaining the JavaScript +class constructor from which the database handle was instantiated and the +constructor from which the query handle was instantiated in napi_refs can +help, because napi_instanceof() can then be used to ensure that the instances +passed into queryHashRecords() are indeed of the correct type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unfortunately, napi_instanceof() does not protect against prototype +manipulation. For example, the prototype of the database handle instance can be +set to the prototype of the constructor for query handle instances. In this +case, the database handle instance can appear as a query handle instance, and it +will pass the napi_instanceof() test for a query handle instance, while still +containing a pointer to a database handle.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To this end, N-API provides type-tagging capabilities.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A type tag is a 128-bit integer unique to the addon. N-API provides the +napi_type_tag structure for storing a type tag. When such a value is passed +along with a JavaScript object stored in a napi_value to +napi_type_tag_object(), the JavaScript object will be "marked" with the +type tag. The "mark" is invisible on the JavaScript side. When a JavaScript +object arrives into a native binding, napi_check_object_type_tag() can be used +along with the original type tag to determine whether the JavaScript object was +previously "marked" with the type tag. This creates a type-checking capability +of a higher fidelity than napi_instanceof() can provide, because such type- +tagging survives prototype manipulation and addon unloading/reloading.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Continuing the above example, the following skeleton addon implementation +illustrates the use of napi_type_tag_object() and +napi_check_object_type_tag().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // This value is the type tag for a database handle. The command
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +//   uuidgen | sed -r -e 's/-//g' -e 's/(.{16})(.*)/0x\1, 0x\2/'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// can be used to obtain the two values with which to initialize the structure.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +static const napi_type_tag DatabaseHandleTypeTag = {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  0x1edf75a38336451d, 0xa5ed9ce2e4c00c38
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// This value is the type tag for a query handle.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +static const napi_type_tag QueryHandleTypeTag = {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  0x9c73317f9fad44a3, 0x93c3920bf3b0ad6a
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +static napi_value
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +openDatabase(napi_env env, napi_callback_info info) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  napi_status status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  napi_value result;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // Perform the underlying action which results in a database handle.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  DatabaseHandle* dbHandle = open_database();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // Create a new, empty JS object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  status = napi_create_object(env, &result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // Tag the object to indicate that it holds a pointer to a `DatabaseHandle`.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  status = napi_type_tag_object(env, result, &DatabaseHandleTypeTag);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // Store the pointer to the `DatabaseHandle` structure inside the JS object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  status = napi_wrap(env, result, dbHandle, NULL, NULL, NULL);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  return result;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Later when we receive a JavaScript object purporting to be a database handle
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// we can use `napi_check_object_type_tag()` to ensure that it is indeed such a
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// handle.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +static napi_value
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +query(napi_env env, napi_callback_info info) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  napi_status status;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  size_t argc = 2;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  napi_value argv[2];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  bool is_db_handle;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // Check that the object passed as the first parameter has the previously
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // applied tag.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  status = napi_check_object_type_tag(env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +                                      argv[0],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +                                      &DatabaseHandleTypeTag,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +                                      &is_db_handle);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  if (status != napi_ok) return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // Throw a `TypeError` if it doesn't.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  if (!is_db_handle) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +    // Throw a TypeError.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +    return NULL;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_define_class#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_define_class(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                              const char* utf8name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                              size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_define_class(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +                              const char* utf8name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +                              size_t length,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_callback constructor,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                              void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                              size_t property_count,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                              const napi_property_descriptor* properties,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                              napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + void* data, + size_t property_count, + const napi_property_descriptor* properties, + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8name: Name of the JavaScript constructor function; this is @@ -4039,8 +4171,8 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] constructor: Callback function that handles constructing instances -of the class. (This should be a static method on the class, not an actual -C++ constructor function.)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • +of the class. This should be a static method on the class, not an actual +C++ constructor function. napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Optional data to be passed to the constructor callback as the data property of the callback info.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] property_count: Number of items in the properties array argument.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -4081,13 +4213,12 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_wrap(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_wrap(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value js_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                      void* native_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +                      void* native_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_finalize finalize_cb,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                      void* finalize_hint,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                      napi_ref* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  + void* finalize_hint, + napi_ref* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] js_object: The JavaScript object that will be the wrapper for the @@ -4095,7 +4226,8 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] native_object: The native instance that will be wrapped in the JavaScript object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] finalize_cb: Optional native callback that can be used to free the -native instance when the JavaScript object is ready for garbage-collection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • +native instance when the JavaScript object is ready for garbage-collection. +napi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] finalize_hint: Optional contextual hint that is passed to the finalize callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [out] result: Optional reference to the wrapped object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -4129,10 +4261,9 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_unwrap(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_unwrap(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             napi_value js_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                        void** result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + void** result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -4151,10 +4282,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_remove_wrap(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      napi_status napi_remove_wrap(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_value js_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                             void** result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + void** result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -4165,18 +4295,58 @@ object js_object using napi_wrap() and removes the wrapping. If a finalize callback was associated with the wrapping, it will no longer be called when the JavaScript object becomes garbage-collected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_type_tag_object#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_type_tag_object(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                 napi_value js_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                 const napi_type_tag* type_tag);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] js_object: The JavaScript object to be marked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] type_tag: The tag with which the object is to be marked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Associates the value of the type_tag pointer with the JavaScript object. +napi_check_object_type_tag() can then be used to compare the tag that was +attached to the object with one owned by the addon to ensure that the object +has the right type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        If the object already has an associated type tag, this API will return +napi_invalid_arg.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_check_object_type_tag#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_check_object_type_tag(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                       napi_value js_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                       const napi_type_tag* type_tag,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                       bool* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] js_object: The JavaScript object whose type tag to examine.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] type_tag: The tag with which to compare any tag found on the object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [out] result: Whether the type tag given matched the type tag on the +object. false is also returned if no type tag was found on the object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Compares the pointer given as type_tag with any that can be found on +js_object. If no tag is found on js_object or, if a tag is found but it does +not match type_tag, then result is set to false. If a tag is found and it +matches type_tag, then result is set to true.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_add_finalizer#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_add_finalizer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status napi_add_finalizer(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_value js_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                               void* native_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                               void* native_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_finalize finalize_cb,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                               void* finalize_hint,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                               napi_ref* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + void* finalize_hint, + napi_ref* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] js_object: The JavaScript object to which the native data will be @@ -4184,7 +4354,8 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] native_object: The native data that will be attached to the JavaScript object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] finalize_cb: Native callback that will be used to free the -native data when the JavaScript object is ready for garbage-collection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +native data when the JavaScript object is ready for garbage-collection. +napi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] finalize_hint: Optional contextual hint that is passed to the finalize callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [out] result: Optional reference to the JavaScript object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -4205,7 +4376,7 @@ invocation. If it is deleted before then, then the finalize callback may never be invoked. Therefore, when obtaining a reference a finalize callback is also required in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Simple Asynchronous Operations#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Simple asynchronous operations#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Addon modules often need to leverage async helpers from libuv as part of their implementation. This allows them to schedule work to be executed asynchronously so that their methods can return in advance of the work being completed. This @@ -4225,20 +4396,18 @@ Avoid using the napi_env parameter in the execute callback as it will likely execute JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          These functions implement the following interfaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          typedef void (*napi_async_execute_callback)(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                            void* data);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -typedef void (*napi_async_complete_callback)(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          typedef void (*napi_async_execute_callback)(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +                                            void* data);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +typedef void (*napi_async_complete_callback)(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_status status,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                             void* data);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + void* data);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          When these methods are invoked, the data parameter passed will be the addon-provided void* data that was passed into the napi_create_async_work call.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Once created the async worker can be queued for execution using the napi_queue_async_work function:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_queue_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                  napi_async_work work);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_queue_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +                                  napi_async_work work);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_cancel_async_work can be used if the work needs to be cancelled before the work has started execution.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          After calling napi_cancel_async_work, the complete callback @@ -4258,14 +4427,13 @@ N-API version: 1 -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_create_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_status napi_create_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value async_resource,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_value async_resource_name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_async_execute_callback execute,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_async_complete_callback complete,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                   void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                   napi_async_work* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + void* data, + napi_async_work* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] async_resource: An optional object associated with the async work @@ -4277,7 +4445,8 @@ and can execute in parallel with the main event loop thread.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] complete: The native function which will be called when the asynchronous logic is completed or is cancelled. The given function is called -from the main event loop thread.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • +from the main event loop thread. napi_async_complete_callback provides +more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] data: User-provided data context. This will be passed back into the execute and complete functions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [out] result: napi_async_work* which is the handle to the newly created @@ -4297,9 +4466,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_delete_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                   napi_async_work work);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_delete_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +                                   napi_async_work work);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -4312,9 +4480,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_queue_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                  napi_async_work work);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_queue_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +                                  napi_async_work work);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -4328,9 +4495,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_cancel_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                   napi_async_work work);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_cancel_async_work(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +                                   napi_async_work work);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -4343,7 +4509,7 @@ napi_cancelled. The work should not be deleted before the complete callback invocation, even if it has been successfully cancelled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Custom Asynchronous Operations#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Custom asynchronous operations#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  The simple asynchronous work APIs above may not be appropriate for every scenario. When using any other asynchronous mechanism, the following APIs are necessary to ensure an asynchronous operation is properly tracked by @@ -4353,11 +4519,10 @@ Added in: v8.6.0 N-API version: 1 -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_async_init(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_async_init(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_value async_resource,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_value async_resource_name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                            napi_async_context* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  + napi_async_context* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] async_resource: Object associated with the async work @@ -4378,9 +4543,8 @@ Added in: v8.6.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_async_destroy(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                               napi_async_context async_context);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_async_destroy(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +                               napi_async_context async_context);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] async_context: The async context to be destroyed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -4400,14 +4564,13 @@ N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_make_callback(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_make_callback(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_async_context async_context,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value recv,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_value func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                           size_t argc,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                           const napi_value* argv,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                           napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + size_t argc, + const napi_value* argv, + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] async_context: Context for the async operation that is @@ -4434,16 +4597,17 @@ is sufficient and appropriate. Use of the napi_make_callback function may be required when implementing custom async behavior that does not use napi_create_async_work.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Any process.nextTicks or Promises scheduled on the microtask queue by +JavaScript during the callback are ran before returning back to C/C++.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_open_callback_scope#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_value resource_object,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_async_context context,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                                 napi_callback_scope* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + napi_callback_scope* result)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] resource_object: An object associated with the async work @@ -4463,30 +4627,28 @@ Added in: v9.6.0 N-API version: 3 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                                  napi_callback_scope scope)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +                                                  napi_callback_scope scope)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] scope: The scope to be closed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Version Management#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Version management#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          napi_get_node_version#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          typedef struct {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -  uint32_t major;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -  uint32_t minor;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -  uint32_t patch;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -  const char* release;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          typedef struct {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +  uint32_t major;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +  uint32_t minor;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +  uint32_t patch;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +  const char* release;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           } napi_node_version;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -napi_status napi_get_node_version(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                                  const napi_node_version** version);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +napi_status napi_get_node_version(napi_env env, + const napi_node_version** version);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [out] version: A pointer to version information for Node.js itself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -4501,9 +4663,8 @@ Added in: v8.0.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_version(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                             uint32_t* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_status napi_get_version(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +                             uint32_t* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [out] result: The highest version of N-API supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -4523,16 +4684,15 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • If the function is not available, provide an alternate implementation that does not use the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Memory Management#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Memory management#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            napi_adjust_external_memory#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                                    int64_t change_in_bytes,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -                                                    int64_t* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +                                                    int64_t change_in_bytes,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +                                                    int64_t* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] change_in_bytes: The change in externally allocated memory that is kept @@ -4560,16 +4720,15 @@ napi_value promise; napi_status status; -// Create the promise. +// Create the promise. status = napi_create_promise(env, &deferred, &promise); -if (status != napi_ok) return NULL; +if (status != napi_ok) return NULL; -// Pass the deferred to a function that performs an asynchronous action. +// Pass the deferred to a function that performs an asynchronous action. do_something_asynchronous(deferred); -// Return the promise to JS -return promise; - +// Return the promise to JS +return promise;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The above function do_something_asynchronous() would perform its asynchronous action and then it would resolve or reject the deferred, thereby concluding the promise and freeing the deferred:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -4577,31 +4736,29 @@ napi_value undefined; napi_status status; -// Create a value with which to conclude the deferred. +// Create a value with which to conclude the deferred. status = napi_get_undefined(env, &undefined); -if (status != napi_ok) return NULL; +if (status != napi_ok) return NULL; -// Resolve or reject the promise associated with the deferred depending on -// whether the asynchronous action succeeded. -if (asynchronous_action_succeeded) { +// Resolve or reject the promise associated with the deferred depending on +// whether the asynchronous action succeeded. +if (asynchronous_action_succeeded) { status = napi_resolve_deferred(env, deferred, undefined); -} else { +} else { status = napi_reject_deferred(env, deferred, undefined); } -if (status != napi_ok) return NULL; +if (status != napi_ok) return NULL; -// At this point the deferred has been freed, so we should assign NULL to it. -deferred = NULL; - +// At this point the deferred has been freed, so we should assign NULL to it. +deferred = NULL;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_create_promise#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_create_promise(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              napi_status napi_create_promise(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_deferred* deferred,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                napi_value* promise);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + napi_value* promise);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [out] deferred: A newly created deferred object which can later be passed to @@ -4616,10 +4773,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_resolve_deferred(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_resolve_deferred(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   napi_deferred deferred,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                  napi_value resolution);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + napi_value resolution);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -4637,10 +4793,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_reject_deferred(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  napi_status napi_reject_deferred(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_deferred deferred,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -                                 napi_value rejection);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  + napi_value rejection);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -4658,10 +4813,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_is_promise(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    napi_status napi_is_promise(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 napi_value value,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -                            bool* is_promise);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + bool* is_promise);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • [in] value: The value to examine
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -4676,10 +4830,9 @@ Added in: v8.5.0 N-API version: 1 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_run_script(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      NAPI_EXTERN napi_status napi_run_script(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               napi_value script,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -                                        napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + napi_value* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • [in] script: A JavaScript string containing the script to execute.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -4706,14 +4859,13 @@ Added in: v8.10.0, v9.3.0 N-API version: 2 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                               struct uv_loop_s** loop);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                               struct uv_loop_s** loop);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [out] loop: The current libuv loop instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Asynchronous Thread-safe Function Calls#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Asynchronous thread-safe function calls#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        JavaScript functions can normally only be called from a native addon's main thread. If an addon creates additional threads, then N-API functions that require a napi_env, napi_value, or napi_ref must not be called from those @@ -4740,7 +4892,8 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The context given during the call to napi_create_threadsafe_function() can be retrieved from any thread with a call to napi_get_threadsafe_function_context().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_call_threadsafe_function() can then be used for initiating a call into +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Calling a thread-safe function#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_call_threadsafe_function() can be used for initiating a call into JavaScript. napi_call_threadsafe_function() accepts a parameter which controls whether the API behaves blockingly. If set to napi_tsfn_nonblocking, the API behaves non-blockingly, returning napi_queue_full if the queue was full, @@ -4764,6 +4917,7 @@ Node.js process exits while there is a thread-safe function still active.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        It is not necessary to call into JavaScript via napi_make_callback() because N-API runs call_js_cb in a context appropriate for callbacks.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Reference counting of thread-safe functions#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Threads can be added to and removed from a napi_threadsafe_function object during its existence. Thus, in addition to specifying an initial number of threads upon creation, napi_acquire_threadsafe_function can be called to @@ -4778,11 +4932,14 @@ should be the last API call made in conjunction with a given napi_threadsafe_function, because after the call completes, there is no guarantee that the napi_threadsafe_function is still allocated. For the same -reason, do not make use of a thread-safe function +reason, do not use a thread-safe function after receiving a return value of napi_closing in response to a call to napi_call_threadsafe_function. Data associated with the napi_threadsafe_function can be freed in its napi_finalize callback which -was passed to napi_create_threadsafe_function().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +was passed to napi_create_threadsafe_function(). The parameter +initial_thread_count of napi_create_threadsafe_function marks the initial +number of aquisitions of the thread-safe functions, instead of calling +napi_acquire_threadsafe_function multiple times at creation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Once the number of threads making use of a napi_threadsafe_function reaches zero, no further threads can start making use of it by calling napi_acquire_threadsafe_function(). In fact, all subsequent API calls @@ -4796,15 +4953,19 @@ will return napi_closing, thus informing the threads that it is no longer possible to make asynchronous calls to the thread-safe function. This can be used as a criterion for terminating the thread. Upon receiving a return value -of napi_closing from napi_call_threadsafe_function() a thread must make no -further use of the thread-safe function because it is no longer guaranteed to +of napi_closing from napi_call_threadsafe_function() a thread must not use +the thread-safe function anymore because it is no longer guaranteed to be allocated.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Deciding whether to keep the process running#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Similarly to libuv handles, thread-safe functions can be "referenced" and "unreferenced". A "referenced" thread-safe function will cause the event loop on the thread on which it is created to remain alive until the thread-safe function is destroyed. In contrast, an "unreferenced" thread-safe function will not prevent the event loop from exiting. The APIs napi_ref_threadsafe_function and napi_unref_threadsafe_function exist for this purpose.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Neither does napi_unref_threadsafe_function mark the thread-safe functions as +able to be destroyed nor does napi_ref_threadsafe_function prevent it from +being destroyed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_create_threadsafe_function#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -napi_create_threadsafe_function(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +napi_create_threadsafe_function(napi_env env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value async_resource,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_value async_resource_name,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                size_t max_queue_size,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                size_t initial_thread_count,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                void* thread_finalize_data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                size_t max_queue_size,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                size_t initial_thread_count,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                void* thread_finalize_data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_finalize thread_finalize_cb,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                void* context,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                void* context,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         napi_threadsafe_function_call_js call_js_cb,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                napi_threadsafe_function* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + napi_threadsafe_function* result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] func: An optional JavaScript function to call from another thread. It @@ -4841,8 +5001,9 @@ the kind of resource that is being provided for diagnostic information exposed by the async_hooks API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] max_queue_size: Maximum size of the queue. 0 for no limit.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] initial_thread_count: The initial number of threads, including the main -thread, which will be making use of this function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] initial_thread_count: The initial number of acquisitions, i.e. the +initial number of threads, including the main thread, which will be making use +of this function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] thread_finalize_data: Optional data to be passed to thread_finalize_cb.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] thread_finalize_cb: Optional function to call when the napi_threadsafe_function is being destroyed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -4851,7 +5012,8 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] call_js_cb: Optional callback which calls the JavaScript function in response to a call on a different thread. This callback will be called on the main thread. If not given, the JavaScript function will be called with no -parameters and with undefined as its this value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +parameters and with undefined as its this value. +napi_threadsafe_function_call_js provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [out] result: The asynchronous thread-safe JavaScript function.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        napi_get_threadsafe_function_context#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -4859,10 +5021,9 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -napi_get_threadsafe_function_context(napi_threadsafe_function func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -                                     void** result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +napi_get_threadsafe_function_context(napi_threadsafe_function func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +                                     void** result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [in] func: The thread-safe function for which to retrieve the context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • [out] result: The location where to store the context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -4873,11 +5034,10 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -napi_call_threadsafe_function(napi_threadsafe_function func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                              void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -                              napi_threadsafe_function_call_mode is_blocking);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +napi_call_threadsafe_function(napi_threadsafe_function func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +                              void* data,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +                              napi_threadsafe_function_call_mode is_blocking);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] func: The asynchronous thread-safe JavaScript function to invoke.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • [in] data: Data to send into JavaScript via the callback call_js_cb @@ -4896,9 +5056,8 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -napi_acquire_threadsafe_function(napi_threadsafe_function func);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +napi_acquire_threadsafe_function(napi_threadsafe_function func);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • [in] func: The asynchronous thread-safe JavaScript function to start making use of.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -4913,10 +5072,9 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -napi_release_threadsafe_function(napi_threadsafe_function func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -                                 napi_threadsafe_function_release_mode mode);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +napi_release_threadsafe_function(napi_threadsafe_function func,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +                                 napi_threadsafe_function_release_mode mode);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • [in] func: The asynchronous thread-safe JavaScript function whose reference count to decrement.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -4937,38 +5095,56 @@ Added in: v10.6.0 N-API version: 4 -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The thread-safe function to reference.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to indicate that the event loop running on the main thread -should not exit until func has been destroyed. Similar to uv_ref it is +should not exit until func has been destroyed. Similar to uv_ref it is also idempotent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Neither does napi_unref_threadsafe_function mark the thread-safe functions as +able to be destroyed nor does napi_ref_threadsafe_function prevent it from +being destroyed. napi_acquire_threadsafe_function and +napi_release_threadsafe_function are available for that purpose.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may only be called from the main thread.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_unref_threadsafe_function#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The thread-safe function to unreference.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to indicate that the event loop running on the main thread -may exit before func is destroyed. Similar to uv_unref it is also +may exit before func is destroyed. Similar to uv_unref it is also idempotent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may only be called from the main thread.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Miscellaneous utilities#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                node_api_get_module_file_name#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +node_api_get_module_file_name(napi_env env, const char** result);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A URL containing the absolute path of the +location from which the add-on was loaded. For a file on the local +file system it will start with file://. The string is null-terminated and +owned by env and must thus not be modified or freed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                result may be an empty string if the add-on loading process fails to establish +the add-on's file name during loading.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/n-api.json nodejs-mozilla-12.22.12/doc/api/n-api.json --- nodejs-mozilla-12.18.1/doc/api/n-api.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/n-api.json 2022-04-05 07:17:04.000000000 +0000 @@ -12,19 +12,19 @@ "type": "misc", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API (pronounced N as in the letter, followed by API)\nis an API for building native Addons. It is independent from\nthe underlying JavaScript runtime (for example, V8) and is maintained as part of\nNode.js itself. This API will be Application Binary Interface (ABI) stable\nacross versions of Node.js. It is intended to insulate Addons from\nchanges in the underlying JavaScript engine and allow modules\ncompiled for one major version to run on later major versions of Node.js without\nrecompilation. The ABI Stability guide provides a more in-depth explanation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Addons are built/packaged with the same approach/tools outlined in the section\ntitled C++ Addons. The only difference is the set of APIs that are used by\nthe native code. Instead of using the V8 or Native Abstractions for Node.js\nAPIs, the functions available in the N-API are used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                APIs exposed by N-API are generally used to create and manipulate\nJavaScript values. Concepts and operations generally map to ideas specified\nin the ECMA-262 Language Specification. The APIs have the following\nproperties:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • All N-API calls return a status code of type napi_status. This\nstatus indicates whether the API call succeeded or failed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The API's return value is passed via an out parameter.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • All JavaScript values are abstracted behind an opaque type named\nnapi_value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • In case of an error status code, additional information can be obtained\nusing napi_get_last_error_info. More information can be found in the error\nhandling section Error Handling.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The N-API is a C API that ensures ABI stability across Node.js versions\nand different compiler levels. A C++ API can be easier to use.\nTo support using C++, the project maintains a\nC++ wrapper module called node-addon-api.\nThis wrapper provides an inlineable C++ API. Binaries built\nwith node-addon-api will depend on the symbols for the N-API C-based\nfunctions exported by Node.js. node-addon-api is a more\nefficient way to write code that calls N-API. Take, for example, the\nfollowing node-addon-api code. The first section shows the\nnode-addon-api code and the second section shows what actually gets\nused in the addon.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Object obj = Object::New(env);\nobj[\"foo\"] = String::New(env, \"bar\");\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status;\nnapi_value object, string;\nstatus = napi_create_object(env, &object);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n\nstatus = napi_create_string_utf8(env, \"bar\", NAPI_AUTO_LENGTH, &string);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n\nstatus = napi_set_named_property(env, object, \"foo\", string);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The end result is that the addon only uses the exported C APIs. As a result,\nit still gets the benefits of the ABI stability provided by the C API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When using node-addon-api instead of the C APIs, start with the API docs\nfor node-addon-api.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API (pronounced N as in the letter, followed by API)\nis an API for building native Addons. It is independent from\nthe underlying JavaScript runtime (for example, V8) and is maintained as part of\nNode.js itself. This API will be Application Binary Interface (ABI) stable\nacross versions of Node.js. It is intended to insulate Addons from\nchanges in the underlying JavaScript engine and allow modules\ncompiled for one major version to run on later major versions of Node.js without\nrecompilation. The ABI Stability guide provides a more in-depth explanation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Addons are built/packaged with the same approach/tools outlined in the section\ntitled C++ Addons. The only difference is the set of APIs that are used by\nthe native code. Instead of using the V8 or Native Abstractions for Node.js\nAPIs, the functions available in the N-API are used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                APIs exposed by N-API are generally used to create and manipulate\nJavaScript values. Concepts and operations generally map to ideas specified\nin the ECMA-262 Language Specification. The APIs have the following\nproperties:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • All N-API calls return a status code of type napi_status. This\nstatus indicates whether the API call succeeded or failed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The API's return value is passed via an out parameter.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • All JavaScript values are abstracted behind an opaque type named\nnapi_value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • In case of an error status code, additional information can be obtained\nusing napi_get_last_error_info. More information can be found in the error\nhandling section Error handling.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The N-API is a C API that ensures ABI stability across Node.js versions\nand different compiler levels. A C++ API can be easier to use.\nTo support using C++, the project maintains a\nC++ wrapper module called node-addon-api.\nThis wrapper provides an inlineable C++ API. Binaries built\nwith node-addon-api will depend on the symbols for the N-API C-based\nfunctions exported by Node.js. node-addon-api is a more\nefficient way to write code that calls N-API. Take, for example, the\nfollowing node-addon-api code. The first section shows the\nnode-addon-api code and the second section shows what actually gets\nused in the addon.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Object obj = Object::New(env);\nobj[\"foo\"] = String::New(env, \"bar\");\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status;\nnapi_value object, string;\nstatus = napi_create_object(env, &object);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n\nstatus = napi_create_string_utf8(env, \"bar\", NAPI_AUTO_LENGTH, &string);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n\nstatus = napi_set_named_property(env, object, \"foo\", string);\nif (status != napi_ok) {\n  napi_throw_error(env, ...);\n  return;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The end result is that the addon only uses the exported C APIs. As a result,\nit still gets the benefits of the ABI stability provided by the C API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When using node-addon-api instead of the C APIs, start with the API docs\nfor node-addon-api.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The N-API Resource offers an\nexcellent orientation and tips for developers just getting started with N-API\nand node-addon-api.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "miscs": [ { - "textRaw": "Implications of ABI Stability", + "textRaw": "Implications of ABI stability", "name": "implications_of_abi_stability", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Although N-API provides an ABI stability guarantee, other parts of Node.js do\nnot, and any external libraries used from the addon may not. In particular,\nnone of the following APIs provide an ABI stability guarantee across major\nversions:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  the Node.js C++ APIs available via any of

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #include <node.h>\n#include <node_buffer.h>\n#include <node_version.h>\n#include <node_object_wrap.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  the libuv APIs which are also included with Node.js and available via

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #include <uv.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  the V8 API available via

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #include <v8.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Thus, for an addon to remain ABI-compatible across Node.js major versions, it\nmust make use exclusively of N-API by restricting itself to using

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #include <node_api.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                and by checking, for all external libraries that it uses, that the external\nlibrary makes ABI stability guarantees similar to N-API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Although N-API provides an ABI stability guarantee, other parts of Node.js do\nnot, and any external libraries used from the addon may not. In particular,\nnone of the following APIs provide an ABI stability guarantee across major\nversions:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  the Node.js C++ APIs available via any of

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #include <node.h>\n#include <node_buffer.h>\n#include <node_version.h>\n#include <node_object_wrap.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  the libuv APIs which are also included with Node.js and available via

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #include <uv.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  the V8 API available via

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  #include <v8.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Thus, for an addon to remain ABI-compatible across Node.js major versions, it\nmust use N-API exclusively by restricting itself to using

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #include <node_api.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                and by checking, for all external libraries that it uses, that the external\nlibrary makes ABI stability guarantees similar to N-API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "misc", - "displayName": "Implications of ABI Stability" + "displayName": "Implications of ABI stability" }, { "textRaw": "Building", "name": "building", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unlike modules written in JavaScript, developing and deploying Node.js\nnative addons using N-API requires an additional set of tools. Besides the\nbasic tools required to develop for Node.js, the native addon developer\nrequires a toolchain that can compile C and C++ code into a binary. In\naddition, depending upon how the native addon is deployed, the user of\nthe native addon will also need to have a C/C++ toolchain installed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For Linux developers, the necessary C/C++ toolchain packages are readily\navailable. GCC is widely used in the Node.js community to build and\ntest across a variety of plarforms. For many developers, the LLVM\ncompiler infrastructure is also a good choice.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For Mac developers, Xcode offers all the required compiler tools.\nHowever, it is not necessary to install the entire Xcode IDE. The following\ncommand installs the necessary toolchain:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                xcode-select --install\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For Windows developers, Visual Studio offers all the required compiler\ntools. However, it is not necessary to install the entire Visual Studio\nIDE. The following command installs the necessary toolchain:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                npm install --global --production windows-build-tools\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The sections below describe the additional tools available for developing\nand deploying Node.js native addons.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unlike modules written in JavaScript, developing and deploying Node.js\nnative addons using N-API requires an additional set of tools. Besides the\nbasic tools required to develop for Node.js, the native addon developer\nrequires a toolchain that can compile C and C++ code into a binary. In\naddition, depending upon how the native addon is deployed, the user of\nthe native addon will also need to have a C/C++ toolchain installed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For Linux developers, the necessary C/C++ toolchain packages are readily\navailable. GCC is widely used in the Node.js community to build and\ntest across a variety of platforms. For many developers, the LLVM\ncompiler infrastructure is also a good choice.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For Mac developers, Xcode offers all the required compiler tools.\nHowever, it is not necessary to install the entire Xcode IDE. The following\ncommand installs the necessary toolchain:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                xcode-select --install\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For Windows developers, Visual Studio offers all the required compiler\ntools. However, it is not necessary to install the entire Visual Studio\nIDE. The following command installs the necessary toolchain:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                npm install --global windows-build-tools\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The sections below describe the additional tools available for developing\nand deploying Node.js native addons.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "Build tools", @@ -71,7 +71,7 @@ { "textRaw": "prebuildify", "name": "prebuildify", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                prebuildify is tool based on node-gyp. The advantage of prebuildify is\nthat the built binaries are bundled with the native module when it's\nuploaded to npm. The binaries are downloaded from npm and are immediately\navailable to the module user when the native module is installed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                prebuildify is a tool based on node-gyp. The advantage of prebuildify is\nthat the built binaries are bundled with the native module when it's\nuploaded to npm. The binaries are downloaded from npm and are immediately\navailable to the module user when the native module is installed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "prebuildify" } @@ -86,23 +86,21 @@ { "textRaw": "Usage", "name": "usage", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In order to use the N-API functions, include the file node_api.h which is\nlocated in the src directory in the node development tree:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #include <node_api.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This will opt into the default NAPI_VERSION for the given release of Node.js.\nIn order to ensure compatibility with specific versions of N-API, the version\ncan be specified explicitly when including the header:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define NAPI_VERSION 3\n#include <node_api.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This restricts the N-API surface to just the functionality that was available in\nthe specified (and earlier) versions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Some of the N-API surface is considered experimental and requires explicit\nopt-in to access those APIs:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define NAPI_EXPERIMENTAL\n#include <node_api.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In this case the entire API surface, including any experimental APIs, will be\navailable to the module code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In order to use the N-API functions, include the file node_api.h which is\nlocated in the src directory in the node development tree:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #include <node_api.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This will opt into the default NAPI_VERSION for the given release of Node.js.\nIn order to ensure compatibility with specific versions of N-API, the version\ncan be specified explicitly when including the header:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define NAPI_VERSION 3\n#include <node_api.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This restricts the N-API surface to just the functionality that was available in\nthe specified (and earlier) versions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Some of the N-API surface is experimental and requires explicit opt-in:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                #define NAPI_EXPERIMENTAL\n#include <node_api.h>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In this case the entire API surface, including any experimental APIs, will be\navailable to the module code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "misc", "displayName": "Usage" }, { - "textRaw": "N-API Version Matrix", + "textRaw": "N-API version matrix", "name": "n-api_version_matrix", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API versions are additive and versioned independently from Node.js.\nVersion 4 is an extension to version 3 in that it has all of the APIs\nfrom version 3 with some additions. This means that it is not necessary\nto recompile for new versions of Node.js which are\nlisted as supporting a later version.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                123456
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v6.xv6.14.2*
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v8.xv8.0.0*v8.10.0*v8.11.2v8.16.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v9.xv9.0.0*v9.3.0*v9.11.0*
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v10.xv10.0.0v10.0.0v10.0.0v10.16.0v10.17.0v10.20.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v11.xv11.0.0v11.0.0v11.0.0v11.8.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v12.xv12.0.0v12.0.0v12.0.0v12.0.0v12.11.0v12.17.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v13.xv13.0.0v13.0.0v13.0.0v13.0.0v13.0.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v14.xv14.0.0v14.0.0v14.0.0v14.0.0v14.0.0v14.0.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Indicates that the N-API version was released as experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The N-APIs associated strictly with accessing ECMAScript features from native\ncode can be found separately in js_native_api.h and js_native_api_types.h.\nThe APIs defined in these headers are included in node_api.h and\nnode_api_types.h. The headers are structured in this way in order to allow\nimplementations of N-API outside of Node.js. For those implementations the\nNode.js specific APIs may not be applicable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The Node.js-specific parts of an addon can be separated from the code that\nexposes the actual functionality to the JavaScript environment so that the\nlatter may be used with multiple implementations of N-API. In the example below,\naddon.c and addon.h refer only to js_native_api.h. This ensures that\naddon.c can be reused to compile against either the Node.js implementation of\nN-API or any implementation of N-API outside of Node.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                addon_node.c is a separate file that contains the Node.js specific entry point\nto the addon and which instantiates the addon by calling into addon.c when the\naddon is loaded into a Node.js environment.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // addon.h\n#ifndef _ADDON_H_\n#define _ADDON_H_\n#include <js_native_api.h>\nnapi_value create_addon(napi_env env);\n#endif  // _ADDON_H_\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // addon.c\n#include \"addon.h\"\n\n#define NAPI_CALL(env, call)                                      \\\n  do {                                                            \\\n    napi_status status = (call);                                  \\\n    if (status != napi_ok) {                                      \\\n      const napi_extended_error_info* error_info = NULL;          \\\n      napi_get_last_error_info((env), &error_info);               \\\n      bool is_pending;                                            \\\n      napi_is_exception_pending((env), &is_pending);              \\\n      if (!is_pending) {                                          \\\n        const char* message = (error_info->error_message == NULL) \\\n            ? \"empty error message\"                               \\\n            : error_info->error_message;                          \\\n        napi_throw_error((env), NULL, message);                   \\\n        return NULL;                                              \\\n      }                                                           \\\n    }                                                             \\\n  } while(0)\n\nstatic napi_value\nDoSomethingUseful(napi_env env, napi_callback_info info) {\n  // Do something useful.\n  return NULL;\n}\n\nnapi_value create_addon(napi_env env) {\n  napi_value result;\n  NAPI_CALL(env, napi_create_object(env, &result));\n\n  napi_value exported_function;\n  NAPI_CALL(env, napi_create_function(env,\n                                      \"doSomethingUseful\",\n                                      NAPI_AUTO_LENGTH,\n                                      DoSomethingUseful,\n                                      NULL,\n                                      &exported_function));\n\n  NAPI_CALL(env, napi_set_named_property(env,\n                                         result,\n                                         \"doSomethingUseful\",\n                                         exported_function));\n\n  return result;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // addon_node.c\n#include <node_api.h>\n#include \"addon.h\"\n\nNAPI_MODULE_INIT() {\n  // This function body is expected to return a `napi_value`.\n  // The variables `napi_env env` and `napi_value exports` may be used within\n  // the body, as they are provided by the definition of `NAPI_MODULE_INIT()`.\n  return create_addon(env);\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API versions are additive and versioned independently from Node.js.\nVersion 4 is an extension to version 3 in that it has all of the APIs\nfrom version 3 with some additions. This means that it is not necessary\nto recompile for new versions of Node.js which are\nlisted as supporting a later version.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                123456
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v6.xv6.14.2*
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v8.xv8.0.0*v8.10.0*v8.11.2v8.16.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v9.xv9.0.0*v9.3.0*v9.11.0*
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v10.xv10.0.0v10.0.0v10.0.0v10.16.0v10.17.0v10.20.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v11.xv11.0.0v11.0.0v11.0.0v11.8.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v12.xv12.0.0v12.0.0v12.0.0v12.0.0v12.11.0v12.17.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v13.xv13.0.0v13.0.0v13.0.0v13.0.0v13.0.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                v14.xv14.0.0v14.0.0v14.0.0v14.0.0v14.0.0v14.0.0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Indicates that the N-API version was released as experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Each API documented for N-API will have a header named added in:, and APIs\nwhich are stable will have the additional header N-API version:.\nAPIs are directly usable when using a Node.js version which supports\nthe N-API version shown in N-API version: or higher.\nWhen using a Node.js version that does not support the\nN-API version: listed or if there is no N-API version: listed,\nthen the API will only be available if\n#define NAPI_EXPERIMENTAL precedes the inclusion of node_api.h\nor js_native_api.h. If an API appears not to be available on\na version of Node.js which is later than the one shown in added in: then\nthis is most likely the reason for the apparent absence.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The N-APIs associated strictly with accessing ECMAScript features from native\ncode can be found separately in js_native_api.h and js_native_api_types.h.\nThe APIs defined in these headers are included in node_api.h and\nnode_api_types.h. The headers are structured in this way in order to allow\nimplementations of N-API outside of Node.js. For those implementations the\nNode.js specific APIs may not be applicable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The Node.js-specific parts of an addon can be separated from the code that\nexposes the actual functionality to the JavaScript environment so that the\nlatter may be used with multiple implementations of N-API. In the example below,\naddon.c and addon.h refer only to js_native_api.h. This ensures that\naddon.c can be reused to compile against either the Node.js implementation of\nN-API or any implementation of N-API outside of Node.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                addon_node.c is a separate file that contains the Node.js specific entry point\nto the addon and which instantiates the addon by calling into addon.c when the\naddon is loaded into a Node.js environment.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // addon.h\n#ifndef _ADDON_H_\n#define _ADDON_H_\n#include <js_native_api.h>\nnapi_value create_addon(napi_env env);\n#endif  // _ADDON_H_\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // addon.c\n#include \"addon.h\"\n\n#define NAPI_CALL(env, call)                                      \\\n  do {                                                            \\\n    napi_status status = (call);                                  \\\n    if (status != napi_ok) {                                      \\\n      const napi_extended_error_info* error_info = NULL;          \\\n      napi_get_last_error_info((env), &error_info);               \\\n      bool is_pending;                                            \\\n      napi_is_exception_pending((env), &is_pending);              \\\n      if (!is_pending) {                                          \\\n        const char* message = (error_info->error_message == NULL) \\\n            ? \"empty error message\"                               \\\n            : error_info->error_message;                          \\\n        napi_throw_error((env), NULL, message);                   \\\n        return NULL;                                              \\\n      }                                                           \\\n    }                                                             \\\n  } while(0)\n\nstatic napi_value\nDoSomethingUseful(napi_env env, napi_callback_info info) {\n  // Do something useful.\n  return NULL;\n}\n\nnapi_value create_addon(napi_env env) {\n  napi_value result;\n  NAPI_CALL(env, napi_create_object(env, &result));\n\n  napi_value exported_function;\n  NAPI_CALL(env, napi_create_function(env,\n                                      \"doSomethingUseful\",\n                                      NAPI_AUTO_LENGTH,\n                                      DoSomethingUseful,\n                                      NULL,\n                                      &exported_function));\n\n  NAPI_CALL(env, napi_set_named_property(env,\n                                         result,\n                                         \"doSomethingUseful\",\n                                         exported_function));\n\n  return result;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // addon_node.c\n#include <node_api.h>\n#include \"addon.h\"\n\nNAPI_MODULE_INIT() {\n  // This function body is expected to return a `napi_value`.\n  // The variables `napi_env env` and `napi_value exports` may be used within\n  // the body, as they are provided by the definition of `NAPI_MODULE_INIT()`.\n  return create_addon(env);\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "misc", - "displayName": "N-API Version Matrix" + "displayName": "N-API version matrix" }, { - "textRaw": "Environment Life Cycle APIs", + "textRaw": "Environment life cycle APIs", "name": "environment_life_cycle_apis", - "stability": 1, - "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Section 8.7 of the ECMAScript Language Specification defines the concept\nof an \"Agent\" as a self-contained environment in which JavaScript code runs.\nMultiple such Agents may be started and terminated either concurrently or in\nsequence by the process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A Node.js environment corresponds to an ECMAScript Agent. In the main process,\nan environment is created at startup, and additional environments can be created\non separate threads to serve as worker threads. When Node.js is embedded in\nanother application, the main thread of the application may also construct and\ndestroy a Node.js environment multiple times during the life cycle of the\napplication process such that each Node.js environment created by the\napplication may, in turn, during its life cycle create and destroy additional\nenvironments as worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                From the perspective of a native addon this means that the bindings it provides\nmay be called multiple times, from multiple contexts, and even concurrently from\nmultiple threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Native addons may need to allocate global state of which they make use during\ntheir entire life cycle such that the state must be unique to each instance of\nthe addon.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To this end, N-API provides a way to allocate data such that its life cycle is\ntied to the life cycle of the Agent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Section 8.7 of the ECMAScript Language Specification defines the concept\nof an \"Agent\" as a self-contained environment in which JavaScript code runs.\nMultiple such Agents may be started and terminated either concurrently or in\nsequence by the process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A Node.js environment corresponds to an ECMAScript Agent. In the main process,\nan environment is created at startup, and additional environments can be created\non separate threads to serve as worker threads. When Node.js is embedded in\nanother application, the main thread of the application may also construct and\ndestroy a Node.js environment multiple times during the life cycle of the\napplication process such that each Node.js environment created by the\napplication may, in turn, during its life cycle create and destroy additional\nenvironments as worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                From the perspective of a native addon this means that the bindings it provides\nmay be called multiple times, from multiple contexts, and even concurrently from\nmultiple threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Native addons may need to allocate global state which they use during\ntheir entire life cycle such that the state must be unique to each instance of\nthe addon.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To this end, N-API provides a way to allocate data such that its life cycle is\ntied to the life cycle of the Agent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "napi_set_instance_data", @@ -116,7 +114,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_set_instance_data(napi_env env,\n                                   void* data,\n                                   napi_finalize finalize_cb,\n                                   void* finalize_hint);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: The data item to make available to bindings of this instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: The function to call when the environment is being torn\ndown. The function receives data so that it might free it.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API associates data with the currently running Agent. data can later\nbe retrieved using napi_get_instance_data(). Any existing data associated with\nthe currently running Agent which was set by means of a previous call to\nnapi_set_instance_data() will be overwritten. If a finalize_cb was provided\nby the previous call, it will not be called.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_set_instance_data(napi_env env,\n                                   void* data,\n                                   napi_finalize finalize_cb,\n                                   void* finalize_hint);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: The data item to make available to bindings of this instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: The function to call when the environment is being torn\ndown. The function receives data so that it might free it.\nnapi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API associates data with the currently running Agent. data can later\nbe retrieved using napi_get_instance_data(). Any existing data associated with\nthe currently running Agent which was set by means of a previous call to\nnapi_set_instance_data() will be overwritten. If a finalize_cb was provided\nby the previous call, it will not be called.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_set_instance_data" }, @@ -132,16 +130,16 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_instance_data(napi_env env,\n                                   void** data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The data item that was previously associated with the currently\nrunning Agent by a call to napi_set_instance_data().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API retrieves data that was previously associated with the currently\nrunning Agent via napi_set_instance_data(). If no data is set, the call will\nsucceed and data will be set to NULL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_instance_data(napi_env env,\n                                   void** data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The data item that was previously associated with the currently\nrunning Agent by a call to napi_set_instance_data().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API retrieves data that was previously associated with the currently\nrunning Agent via napi_set_instance_data(). If no data is set, the call will\nsucceed and data will be set to NULL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_instance_data" } ], "type": "misc", - "displayName": "Environment Life Cycle APIs" + "displayName": "Environment life cycle APIs" }, { - "textRaw": "Basic N-API Data Types", + "textRaw": "Basic N-API data types", "name": "basic_n-api_data_types", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API exposes the following fundamental datatypes as abstractions that are\nconsumed by the various APIs. These APIs should be treated as opaque,\nintrospectable only with other N-API calls.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -157,7 +155,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Integral status code indicating the success or failure of a N-API call.\nCurrently, the following status codes are supported.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_ok,\n  napi_invalid_arg,\n  napi_object_expected,\n  napi_string_expected,\n  napi_name_expected,\n  napi_function_expected,\n  napi_number_expected,\n  napi_boolean_expected,\n  napi_array_expected,\n  napi_generic_failure,\n  napi_pending_exception,\n  napi_cancelled,\n  napi_escape_called_twice,\n  napi_handle_scope_mismatch,\n  napi_callback_scope_mismatch,\n  napi_queue_full,\n  napi_closing,\n  napi_bigint_expected,\n  napi_date_expected,\n  napi_arraybuffer_expected,\n  napi_detachable_arraybuffer_expected,\n} napi_status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If additional information is required upon an API returning a failed status,\nit can be obtained by calling napi_get_last_error_info.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Integral status code indicating the success or failure of a N-API call.\nCurrently, the following status codes are supported.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_ok,\n  napi_invalid_arg,\n  napi_object_expected,\n  napi_string_expected,\n  napi_name_expected,\n  napi_function_expected,\n  napi_number_expected,\n  napi_boolean_expected,\n  napi_array_expected,\n  napi_generic_failure,\n  napi_pending_exception,\n  napi_cancelled,\n  napi_escape_called_twice,\n  napi_handle_scope_mismatch,\n  napi_callback_scope_mismatch,\n  napi_queue_full,\n  napi_closing,\n  napi_bigint_expected,\n  napi_date_expected,\n  napi_arraybuffer_expected,\n  napi_detachable_arraybuffer_expected,\n} napi_status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If additional information is required upon an API returning a failed status,\nit can be obtained by calling napi_get_last_error_info.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_status" }, @@ -173,7 +171,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct {\n  const char* error_message;\n  void* engine_reserved;\n  uint32_t engine_error_code;\n  napi_status error_code;\n} napi_extended_error_info;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • error_message: UTF8-encoded string containing a VM-neutral description of\nthe error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • engine_reserved: Reserved for VM-specific error details. This is currently\nnot implemented for any VM.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • engine_error_code: VM-specific error code. This is currently\nnot implemented for any VM.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • error_code: The N-API status code that originated with the last error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                See the Error Handling section for additional information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct {\n  const char* error_message;\n  void* engine_reserved;\n  uint32_t engine_error_code;\n  napi_status error_code;\n} napi_extended_error_info;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • error_message: UTF8-encoded string containing a VM-neutral description of\nthe error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • engine_reserved: Reserved for VM-specific error details. This is currently\nnot implemented for any VM.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • engine_error_code: VM-specific error code. This is currently\nnot implemented for any VM.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • error_code: The N-API status code that originated with the last error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                See the Error handling section for additional information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_extended_error_info" }, @@ -219,7 +217,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A value to be given to napi_release_threadsafe_function() to indicate whether\nthe thread-safe function is to be closed immediately (napi_tsfn_abort) or\nmerely released (napi_tsfn_release) and thus available for subsequent use via\nnapi_acquire_threadsafe_function() and napi_call_threadsafe_function().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_tsfn_release,\n  napi_tsfn_abort\n} napi_threadsafe_function_release_mode;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A value to be given to napi_release_threadsafe_function() to indicate whether\nthe thread-safe function is to be closed immediately (napi_tsfn_abort) or\nmerely released (napi_tsfn_release) and thus available for subsequent use via\nnapi_acquire_threadsafe_function() and napi_call_threadsafe_function().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_tsfn_release,\n  napi_tsfn_abort\n} napi_threadsafe_function_release_mode;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_threadsafe_function_release_mode" }, @@ -235,18 +233,18 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A value to be given to napi_call_threadsafe_function() to indicate whether\nthe call should block whenever the queue associated with the thread-safe\nfunction is full.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_tsfn_nonblocking,\n  napi_tsfn_blocking\n} napi_threadsafe_function_call_mode;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A value to be given to napi_call_threadsafe_function() to indicate whether\nthe call should block whenever the queue associated with the thread-safe\nfunction is full.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_tsfn_nonblocking,\n  napi_tsfn_blocking\n} napi_threadsafe_function_call_mode;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_threadsafe_function_call_mode" }, { - "textRaw": "N-API Memory Management types", + "textRaw": "N-API memory management types", "name": "n-api_memory_management_types", "modules": [ { "textRaw": "napi_handle_scope", "name": "napi_handle_scope", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This is an abstraction used to control and modify the lifetime of objects\ncreated within a particular scope. In general, N-API values are created within\nthe context of a handle scope. When a native method is called from\nJavaScript, a default handle scope will exist. If the user does not explicitly\ncreate a new handle scope, N-API values will be created in the default handle\nscope. For any invocations of code outside the execution of a native method\n(for instance, during a libuv callback invocation), the module is required to\ncreate a scope before invoking any functions that can result in the creation\nof JavaScript values.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Handle scopes are created using napi_open_handle_scope and are destroyed\nusing napi_close_handle_scope. Closing the scope can indicate to the GC\nthat all napi_values created during the lifetime of the handle scope are no\nlonger referenced from the current stack frame.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For more details, review the Object Lifetime Management.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This is an abstraction used to control and modify the lifetime of objects\ncreated within a particular scope. In general, N-API values are created within\nthe context of a handle scope. When a native method is called from\nJavaScript, a default handle scope will exist. If the user does not explicitly\ncreate a new handle scope, N-API values will be created in the default handle\nscope. For any invocations of code outside the execution of a native method\n(for instance, during a libuv callback invocation), the module is required to\ncreate a scope before invoking any functions that can result in the creation\nof JavaScript values.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Handle scopes are created using napi_open_handle_scope and are destroyed\nusing napi_close_handle_scope. Closing the scope can indicate to the GC\nthat all napi_values created during the lifetime of the handle scope are no\nlonger referenced from the current stack frame.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For more details, review the Object lifetime management.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_handle_scope" }, @@ -278,16 +276,45 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This is the abstraction to use to reference a napi_value. This allows for\nusers to manage the lifetimes of JavaScript values, including defining their\nminimum lifetimes explicitly.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For more details, review the Object Lifetime Management.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This is the abstraction to use to reference a napi_value. This allows for\nusers to manage the lifetimes of JavaScript values, including defining their\nminimum lifetimes explicitly.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For more details, review the Object lifetime management.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_ref" + }, + { + "textRaw": "napi_type_tag", + "name": "napi_type_tag", + "meta": { + "added": [ + "v12.19.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A 128-bit value stored as two unsigned 64-bit integers. It serves as a UUID\nwith which JavaScript objects can be \"tagged\" in order to ensure that they are\nof a certain type. This is a stronger check than napi_instanceof, because\nthe latter can report a false positive if the object's prototype has been\nmanipulated. Type-tagging is most useful in conjunction with napi_wrap\nbecause it ensures that the pointer retrieved from a wrapped object can be\nsafely cast to the native type corresponding to the type tag that had been\npreviously applied to the JavaScript object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct {\n  uint64_t lower;\n  uint64_t upper;\n} napi_type_tag;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_type_tag" + }, + { + "textRaw": "napi_async_cleanup_hook_handle", + "name": "napi_async_cleanup_hook_handle", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                An opaque value returned by napi_add_async_cleanup_hook. It must be passed\nto napi_remove_async_cleanup_hook when the chain of asynchronous cleanup\nevents completes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_async_cleanup_hook_handle" } ], "type": "module", - "displayName": "N-API Memory Management types" + "displayName": "N-API memory management types" }, { - "textRaw": "N-API Callback types", + "textRaw": "N-API callback types", "name": "n-api_callback_types", "modules": [ { @@ -318,7 +345,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer type for user-provided native functions which are to be\nexposed to JavaScript via N-API. Callback functions should satisfy the\nfollowing signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef napi_value (*napi_callback)(napi_env, napi_callback_info);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer type for user-provided native functions which are to be\nexposed to JavaScript via N-API. Callback functions should satisfy the\nfollowing signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef napi_value (*napi_callback)(napi_env, napi_callback_info);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unless for reasons discussed in Object Lifetime Management, creating a\nhandle and/or callback scope inside a napi_callback is not necessary.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_callback" }, @@ -334,7 +361,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer type for add-on provided functions that allow the user to be\nnotified when externally-owned data is ready to be cleaned up because the\nobject with which it was associated with, has been garbage-collected. The user\nmust provide a function satisfying the following signature which would get\ncalled upon the object's collection. Currently, napi_finalize can be used for\nfinding out when objects that have external data are collected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_finalize)(napi_env env,\n                              void* finalize_data,\n                              void* finalize_hint);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer type for add-on provided functions that allow the user to be\nnotified when externally-owned data is ready to be cleaned up because the\nobject with which it was associated with, has been garbage-collected. The user\nmust provide a function satisfying the following signature which would get\ncalled upon the object's collection. Currently, napi_finalize can be used for\nfinding out when objects that have external data are collected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_finalize)(napi_env env,\n                              void* finalize_data,\n                              void* finalize_hint);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unless for reasons discussed in Object Lifetime Management, creating a\nhandle and/or callback scope inside the function body is not necessary.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_finalize" }, @@ -350,7 +377,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer used with functions that support asynchronous\noperations. Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_async_execute_callback)(napi_env env, void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Implementations of this function must avoid making N-API calls\nthat execute JavaScript or interact with\nJavaScript objects. N-API\ncalls should be in the napi_async_complete_callback instead.\nDo not use the napi_env parameter as it will likely\nresult in execution of JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer used with functions that support asynchronous\noperations. Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_async_execute_callback)(napi_env env, void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Implementations of this function must avoid making N-API calls that execute\nJavaScript or interact with JavaScript objects. N-API calls should be in the\nnapi_async_complete_callback instead. Do not use the napi_env parameter as\nit will likely result in execution of JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_async_execute_callback" }, @@ -366,7 +393,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer used with functions that support asynchronous\noperations. Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_async_complete_callback)(napi_env env,\n                                             napi_status status,\n                                             void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer used with functions that support asynchronous\noperations. Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_async_complete_callback)(napi_env env,\n                                             napi_status status,\n                                             void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unless for reasons discussed in Object Lifetime Management, creating a\nhandle and/or callback scope inside the function body is not necessary.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_async_complete_callback" }, @@ -382,20 +409,33 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer used with asynchronous thread-safe function calls. The callback\nwill be called on the main thread. Its purpose is to use a data item arriving\nvia the queue from one of the secondary threads to construct the parameters\nnecessary for a call into JavaScript, usually via napi_call_function, and then\nmake the call into JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The data arriving from the secondary thread via the queue is given in the data\nparameter and the JavaScript function to call is given in the js_callback\nparameter.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API sets up the environment prior to calling this callback, so it is\nsufficient to call the JavaScript function via napi_call_function rather than\nvia napi_make_callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_threadsafe_function_call_js)(napi_env env,\n                                                 napi_value js_callback,\n                                                 void* context,\n                                                 void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment to use for API calls, or NULL if the thread-safe\nfunction is being torn down and data may need to be freed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_callback: The JavaScript function to call, or NULL if the\nthread-safe function is being torn down and data may need to be freed. It\nmay also be NULL if the thread-safe function was created without\njs_callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] context: The optional data with which the thread-safe function was\ncreated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Data created by the secondary thread. It is the responsibility of\nthe callback to convert this native data to JavaScript values (with N-API\nfunctions) that can be passed as parameters when js_callback is invoked.\nThis pointer is managed entirely by the threads and this callback. Thus this\ncallback should free the data.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer used with asynchronous thread-safe function calls. The callback\nwill be called on the main thread. Its purpose is to use a data item arriving\nvia the queue from one of the secondary threads to construct the parameters\nnecessary for a call into JavaScript, usually via napi_call_function, and then\nmake the call into JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The data arriving from the secondary thread via the queue is given in the data\nparameter and the JavaScript function to call is given in the js_callback\nparameter.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API sets up the environment prior to calling this callback, so it is\nsufficient to call the JavaScript function via napi_call_function rather than\nvia napi_make_callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_threadsafe_function_call_js)(napi_env env,\n                                                 napi_value js_callback,\n                                                 void* context,\n                                                 void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment to use for API calls, or NULL if the thread-safe\nfunction is being torn down and data may need to be freed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_callback: The JavaScript function to call, or NULL if the\nthread-safe function is being torn down and data may need to be freed. It\nmay also be NULL if the thread-safe function was created without\njs_callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] context: The optional data with which the thread-safe function was\ncreated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Data created by the secondary thread. It is the responsibility of\nthe callback to convert this native data to JavaScript values (with N-API\nfunctions) that can be passed as parameters when js_callback is invoked.\nThis pointer is managed entirely by the threads and this callback. Thus this\ncallback should free the data.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unless for reasons discussed in Object Lifetime Management, creating a\nhandle and/or callback scope inside the function body is not necessary.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_threadsafe_function_call_js" + }, + { + "textRaw": "napi_async_cleanup_hook", + "name": "napi_async_cleanup_hook", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Function pointer used with napi_add_async_cleanup_hook. It will be called\nwhen the environment is being torn down.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Callback functions must satisfy the following signature:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_async_cleanup_hook)(napi_async_cleanup_hook_handle handle,\n                                        void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The body of the function should initiate the asynchronous cleanup actions at the\nend of which handle must be passed in a call to\nnapi_remove_async_cleanup_hook.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_async_cleanup_hook" } ], "type": "module", - "displayName": "N-API Callback types" + "displayName": "N-API callback types" } ], "type": "misc", - "displayName": "Basic N-API Data Types" + "displayName": "Basic N-API data types" }, { - "textRaw": "Error Handling", + "textRaw": "Error handling", "name": "error_handling", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API uses both return values and JavaScript exceptions for error handling.\nThe following sections explain the approach for each case.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -411,7 +451,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                All of the N-API functions share the same error handling pattern. The\nreturn type of all API functions is napi_status.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The return value will be napi_ok if the request was successful and\nno uncaught JavaScript exception was thrown. If an error occurred AND\nan exception was thrown, the napi_status value for the error\nwill be returned. If an exception was thrown, and no error occurred,\nnapi_pending_exception will be returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In cases where a return value other than napi_ok or\nnapi_pending_exception is returned, napi_is_exception_pending\nmust be called to check if an exception is pending.\nSee the section on exceptions for more details.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The full set of possible napi_status values is defined\nin napi_api_types.h.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The napi_status return value provides a VM-independent representation of\nthe error which occurred. In some cases it is useful to be able to get\nmore detailed information, including a string representing the error as well as\nVM (engine)-specific information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In order to retrieve this information napi_get_last_error_info\nis provided which returns a napi_extended_error_info structure.\nThe format of the napi_extended_error_info structure is as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct napi_extended_error_info {\n  const char* error_message;\n  void* engine_reserved;\n  uint32_t engine_error_code;\n  napi_status error_code;\n};\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • error_message: Textual representation of the error that occurred.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • engine_reserved: Opaque handle reserved for engine use only.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • engine_error_code: VM specific error code.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • error_code: n-api status code for the last error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_get_last_error_info returns the information for the last\nN-API call that was made.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Do not rely on the content or format of any of the extended information as it\nis not subject to SemVer and may change at any time. It is intended only for\nlogging purposes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                All of the N-API functions share the same error handling pattern. The\nreturn type of all API functions is napi_status.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The return value will be napi_ok if the request was successful and\nno uncaught JavaScript exception was thrown. If an error occurred AND\nan exception was thrown, the napi_status value for the error\nwill be returned. If an exception was thrown, and no error occurred,\nnapi_pending_exception will be returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In cases where a return value other than napi_ok or\nnapi_pending_exception is returned, napi_is_exception_pending\nmust be called to check if an exception is pending.\nSee the section on exceptions for more details.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The full set of possible napi_status values is defined\nin napi_api_types.h.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The napi_status return value provides a VM-independent representation of\nthe error which occurred. In some cases it is useful to be able to get\nmore detailed information, including a string representing the error as well as\nVM (engine)-specific information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In order to retrieve this information napi_get_last_error_info\nis provided which returns a napi_extended_error_info structure.\nThe format of the napi_extended_error_info structure is as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct napi_extended_error_info {\n  const char* error_message;\n  void* engine_reserved;\n  uint32_t engine_error_code;\n  napi_status error_code;\n};\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • error_message: Textual representation of the error that occurred.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • engine_reserved: Opaque handle reserved for engine use only.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • engine_error_code: VM specific error code.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • error_code: n-api status code for the last error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_get_last_error_info returns the information for the last\nN-API call that was made.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Do not rely on the content or format of any of the extended information as it\nis not subject to SemVer and may change at any time. It is intended only for\nlogging purposes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "napi_get_last_error_info", @@ -425,7 +465,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status\nnapi_get_last_error_info(napi_env env,\n                         const napi_extended_error_info** result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The napi_extended_error_info structure with more\ninformation about the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API retrieves a napi_extended_error_info structure with information\nabout the last error that occurred.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The content of the napi_extended_error_info returned is only valid up until\nan n-api function is called on the same env.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Do not rely on the content or format of any of the extended information as it\nis not subject to SemVer and may change at any time. It is intended only for\nlogging purposes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status\nnapi_get_last_error_info(napi_env env,\n                         const napi_extended_error_info** result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The napi_extended_error_info structure with more\ninformation about the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API retrieves a napi_extended_error_info structure with information\nabout the last error that occurred.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The content of the napi_extended_error_info returned is only valid up until\nan n-api function is called on the same env.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Do not rely on the content or format of any of the extended information as it\nis not subject to SemVer and may change at any time. It is intended only for\nlogging purposes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_last_error_info" } @@ -450,7 +490,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_throw(napi_env env, napi_value error);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] error: The JavaScript value to be thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API throws the JavaScript value provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_throw(napi_env env, napi_value error);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] error: The JavaScript value to be thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API throws the JavaScript value provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_throw" }, @@ -466,7 +506,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_throw_error(napi_env env,\n                                         const char* code,\n                                         const char* msg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API throws a JavaScript Error with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_throw_error(napi_env env,\n                                         const char* code,\n                                         const char* msg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API throws a JavaScript Error with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_throw_error" }, @@ -482,7 +522,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_throw_type_error(napi_env env,\n                                              const char* code,\n                                              const char* msg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API throws a JavaScript TypeError with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_throw_type_error(napi_env env,\n                                              const char* code,\n                                              const char* msg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API throws a JavaScript TypeError with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_throw_type_error" }, @@ -498,7 +538,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_throw_range_error(napi_env env,\n                                               const char* code,\n                                               const char* msg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API throws a JavaScript RangeError with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_throw_range_error(napi_env env,\n                                               const char* code,\n                                               const char* msg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional error code to be set on the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: C string representing the text to be associated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API throws a JavaScript RangeError with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_throw_range_error" }, @@ -514,7 +554,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_is_error(napi_env env,\n                                      napi_value value,\n                                      bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The napi_value to be checked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Boolean value that is set to true if napi_value represents\nan error, false otherwise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API queries a napi_value to check if it represents an error object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_is_error(napi_env env,\n                                      napi_value value,\n                                      bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The napi_value to be checked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Boolean value that is set to true if napi_value represents\nan error, false otherwise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API queries a napi_value to check if it represents an error object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_error" }, @@ -530,7 +570,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_error(napi_env env,\n                                          napi_value code,\n                                          napi_value msg,\n                                          napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns a JavaScript Error with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_error(napi_env env,\n                                          napi_value code,\n                                          napi_value msg,\n                                          napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns a JavaScript Error with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_error" }, @@ -546,7 +586,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_type_error(napi_env env,\n                                               napi_value code,\n                                               napi_value msg,\n                                               napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns a JavaScript TypeError with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_type_error(napi_env env,\n                                               napi_value code,\n                                               napi_value msg,\n                                               napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns a JavaScript TypeError with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_type_error" }, @@ -562,7 +602,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_range_error(napi_env env,\n                                                napi_value code,\n                                                napi_value msg,\n                                                napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns a JavaScript RangeError with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_range_error(napi_env env,\n                                                napi_value code,\n                                                napi_value msg,\n                                                napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] code: Optional napi_value with the string for the error code to be\nassociated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] msg: napi_value that references a JavaScript String to be used as\nthe message for the Error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the error created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns a JavaScript RangeError with the text provided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_range_error" }, @@ -578,7 +618,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_and_clear_last_exception(napi_env env,\n                                              napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The exception if one is pending, NULL otherwise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_and_clear_last_exception(napi_env env,\n                                              napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The exception if one is pending, NULL otherwise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_and_clear_last_exception" }, @@ -594,7 +634,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_exception_pending(napi_env env, bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Boolean value that is set to true if an exception is pending.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_exception_pending(napi_env env, bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Boolean value that is set to true if an exception is pending.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_exception_pending" }, @@ -610,7 +650,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_fatal_exception(napi_env env, napi_value err);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] err: The error that is passed to 'uncaughtException'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Trigger an 'uncaughtException' in JavaScript. Useful if an async\ncallback throws an exception with no way to recover.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_fatal_exception(napi_env env, napi_value err);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] err: The error that is passed to 'uncaughtException'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Trigger an 'uncaughtException' in JavaScript. Useful if an async\ncallback throws an exception with no way to recover.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_fatal_exception" } @@ -619,7 +659,7 @@ "displayName": "Exceptions" }, { - "textRaw": "Fatal Errors", + "textRaw": "Fatal errors", "name": "fatal_errors", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In the event of an unrecoverable error in a native module, a fatal error can be\nthrown to immediately terminate the process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -635,27 +675,27 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_NO_RETURN void napi_fatal_error(const char* location,\n                                                 size_t location_len,\n                                                 const char* message,\n                                                 size_t message_len);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] location: Optional location at which the error occurred.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] location_len: The length of the location in bytes, or\nNAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] message: The message associated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] message_len: The length of the message in bytes, or NAPI_AUTO_LENGTH\nif it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The function call does not return, the process will be terminated.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_NO_RETURN void napi_fatal_error(const char* location,\n                                                 size_t location_len,\n                                                 const char* message,\n                                                 size_t message_len);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] location: Optional location at which the error occurred.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] location_len: The length of the location in bytes, or\nNAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] message: The message associated with the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] message_len: The length of the message in bytes, or NAPI_AUTO_LENGTH\nif it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The function call does not return, the process will be terminated.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_fatal_error" } ], "type": "module", - "displayName": "Fatal Errors" + "displayName": "Fatal errors" } ], "type": "misc", - "displayName": "Error Handling" + "displayName": "Error handling" }, { - "textRaw": "Object Lifetime management", + "textRaw": "Object lifetime management", "name": "object_lifetime_management", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                As N-API calls are made, handles to objects in the heap for the underlying\nVM may be returned as napi_values. These handles must hold the\nobjects 'live' until they are no longer required by the native code,\notherwise the objects could be collected before the native code was\nfinished using them.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                As object handles are returned they are associated with a\n'scope'. The lifespan for the default scope is tied to the lifespan\nof the native method call. The result is that, by default, handles\nremain valid and the objects associated with these handles will be\nheld live for the lifespan of the native method call.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In many cases, however, it is necessary that the handles remain valid for\neither a shorter or longer lifespan than that of the native method.\nThe sections which follow describe the N-API functions that can be used\nto change the handle lifespan from the default.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "Making handle lifespan shorter than that of the native method", "name": "making_handle_lifespan_shorter_than_that_of_the_native_method", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It is often necessary to make the lifespan of handles shorter than\nthe lifespan of a native method. For example, consider a native method\nthat has a loop which iterates through the elements in a large array:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                for (int i = 0; i < 1000000; i++) {\n  napi_value result;\n  napi_status status = napi_get_element(env, object, i, &result);\n  if (status != napi_ok) {\n    break;\n  }\n  // do something with element\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This would result in a large number of handles being created, consuming\nsubstantial resources. In addition, even though the native code could only\nuse the most recent handle, all of the associated objects would also be\nkept alive since they all share the same scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To handle this case, N-API provides the ability to establish a new 'scope' to\nwhich newly created handles will be associated. Once those handles\nare no longer required, the scope can be 'closed' and any handles associated\nwith the scope are invalidated. The methods available to open/close scopes are\nnapi_open_handle_scope and napi_close_handle_scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API only supports a single nested hierarchy of scopes. There is only one\nactive scope at any time, and all new handles will be associated with that\nscope while it is active. Scopes must be closed in the reverse order from\nwhich they are opened. In addition, all scopes created within a native method\nmust be closed before returning from that method.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Taking the earlier example, adding calls to napi_open_handle_scope and\nnapi_close_handle_scope would ensure that at most a single handle\nis valid throughout the execution of the loop:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                for (int i = 0; i < 1000000; i++) {\n  napi_handle_scope scope;\n  napi_status status = napi_open_handle_scope(env, &scope);\n  if (status != napi_ok) {\n    break;\n  }\n  napi_value result;\n  status = napi_get_element(env, object, i, &result);\n  if (status != napi_ok) {\n    break;\n  }\n  // do something with element\n  status = napi_close_handle_scope(env, scope);\n  if (status != napi_ok) {\n    break;\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When nesting scopes, there are cases where a handle from an\ninner scope needs to live beyond the lifespan of that scope. N-API supports an\n'escapable scope' in order to support this case. An escapable scope\nallows one handle to be 'promoted' so that it 'escapes' the\ncurrent scope and the lifespan of the handle changes from the current\nscope to that of the outer scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The methods available to open/close escapable scopes are\nnapi_open_escapable_handle_scope and\nnapi_close_escapable_handle_scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The request to promote a handle is made through napi_escape_handle which\ncan only be called once.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It is often necessary to make the lifespan of handles shorter than\nthe lifespan of a native method. For example, consider a native method\nthat has a loop which iterates through the elements in a large array:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                for (int i = 0; i < 1000000; i++) {\n  napi_value result;\n  napi_status status = napi_get_element(env, object, i, &result);\n  if (status != napi_ok) {\n    break;\n  }\n  // do something with element\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This would result in a large number of handles being created, consuming\nsubstantial resources. In addition, even though the native code could only\nuse the most recent handle, all of the associated objects would also be\nkept alive since they all share the same scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To handle this case, N-API provides the ability to establish a new 'scope' to\nwhich newly created handles will be associated. Once those handles\nare no longer required, the scope can be 'closed' and any handles associated\nwith the scope are invalidated. The methods available to open/close scopes are\nnapi_open_handle_scope and napi_close_handle_scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API only supports a single nested hierarchy of scopes. There is only one\nactive scope at any time, and all new handles will be associated with that\nscope while it is active. Scopes must be closed in the reverse order from\nwhich they are opened. In addition, all scopes created within a native method\nmust be closed before returning from that method.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Taking the earlier example, adding calls to napi_open_handle_scope and\nnapi_close_handle_scope would ensure that at most a single handle\nis valid throughout the execution of the loop:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                for (int i = 0; i < 1000000; i++) {\n  napi_handle_scope scope;\n  napi_status status = napi_open_handle_scope(env, &scope);\n  if (status != napi_ok) {\n    break;\n  }\n  napi_value result;\n  status = napi_get_element(env, object, i, &result);\n  if (status != napi_ok) {\n    break;\n  }\n  // do something with element\n  status = napi_close_handle_scope(env, scope);\n  if (status != napi_ok) {\n    break;\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When nesting scopes, there are cases where a handle from an\ninner scope needs to live beyond the lifespan of that scope. N-API supports an\n'escapable scope' in order to support this case. An escapable scope\nallows one handle to be 'promoted' so that it 'escapes' the\ncurrent scope and the lifespan of the handle changes from the current\nscope to that of the outer scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The methods available to open/close escapable scopes are\nnapi_open_escapable_handle_scope and\nnapi_close_escapable_handle_scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The request to promote a handle is made through napi_escape_handle which\ncan only be called once.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "napi_open_handle_scope", @@ -669,7 +709,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env,\n                                               napi_handle_scope* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API opens a new scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env,\n                                               napi_handle_scope* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API opens a new scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_open_handle_scope" }, @@ -685,7 +725,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env,\n                                                napi_handle_scope scope);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API closes the scope passed in. Scopes must be closed in the\nreverse order from which they were created.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env,\n                                                napi_handle_scope scope);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API closes the scope passed in. Scopes must be closed in the\nreverse order from which they were created.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_close_handle_scope" }, @@ -701,7 +741,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\n    napi_open_escapable_handle_scope(napi_env env,\n                                     napi_handle_scope* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API opens a new scope from which one object can be promoted\nto the outer scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\n    napi_open_escapable_handle_scope(napi_env env,\n                                     napi_handle_scope* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the new scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API opens a new scope from which one object can be promoted\nto the outer scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_open_escapable_handle_scope" }, @@ -717,7 +757,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\n    napi_close_escapable_handle_scope(napi_env env,\n                                      napi_handle_scope scope);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API closes the scope passed in. Scopes must be closed in the\nreverse order from which they were created.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\n    napi_close_escapable_handle_scope(napi_env env,\n                                      napi_handle_scope scope);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: napi_value representing the scope to be closed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API closes the scope passed in. Scopes must be closed in the\nreverse order from which they were created.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_close_escapable_handle_scope" }, @@ -733,7 +773,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_escape_handle(napi_env env,\n                               napi_escapable_handle_scope scope,\n                               napi_value escapee,\n                               napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: napi_value representing the current scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] escapee: napi_value representing the JavaScript Object to be\nescaped.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the handle to the escaped Object\nin the outer scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API promotes the handle to the JavaScript object so that it is valid\nfor the lifetime of the outer scope. It can only be called once per scope.\nIf it is called more than once an error will be returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_escape_handle(napi_env env,\n                               napi_escapable_handle_scope scope,\n                               napi_value escapee,\n                               napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: napi_value representing the current scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] escapee: napi_value representing the JavaScript Object to be\nescaped.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the handle to the escaped Object\nin the outer scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API promotes the handle to the JavaScript object so that it is valid\nfor the lifetime of the outer scope. It can only be called once per scope.\nIf it is called more than once an error will be returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_escape_handle" } @@ -758,7 +798,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_reference(napi_env env,\n                                              napi_value value,\n                                              uint32_t initial_refcount,\n                                              napi_ref* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing the Object to which we want a\nreference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] initial_refcount: Initial reference count for the new reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_ref pointing to the new reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API create a new reference with the specified reference count\nto the Object passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_create_reference(napi_env env,\n                                              napi_value value,\n                                              uint32_t initial_refcount,\n                                              napi_ref* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing the Object to which we want a\nreference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] initial_refcount: Initial reference count for the new reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_ref pointing to the new reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API create a new reference with the specified reference count\nto the Object passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_reference" }, @@ -774,7 +814,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] ref: napi_ref to be deleted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API deletes the reference passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] ref: napi_ref to be deleted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API deletes the reference passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_delete_reference" }, @@ -790,7 +830,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_reference_ref(napi_env env,\n                                           napi_ref ref,\n                                           uint32_t* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] ref: napi_ref for which the reference count will be incremented.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The new reference count.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API increments the reference count for the reference\npassed in and returns the resulting reference count.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_reference_ref(napi_env env,\n                                           napi_ref ref,\n                                           uint32_t* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] ref: napi_ref for which the reference count will be incremented.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The new reference count.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API increments the reference count for the reference\npassed in and returns the resulting reference count.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_reference_ref" }, @@ -806,7 +846,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_reference_unref(napi_env env,\n                                             napi_ref ref,\n                                             uint32_t* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] ref: napi_ref for which the reference count will be decremented.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The new reference count.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API decrements the reference count for the reference\npassed in and returns the resulting reference count.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_reference_unref(napi_env env,\n                                             napi_ref ref,\n                                             uint32_t* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] ref: napi_ref for which the reference count will be decremented.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The new reference count.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API decrements the reference count for the reference\npassed in and returns the resulting reference count.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_reference_unref" }, @@ -822,7 +862,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_get_reference_value(napi_env env,\n                                                 napi_ref ref,\n                                                 napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                the napi_value passed in or out of these methods is a handle to the\nobject to which the reference is related.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] ref: napi_ref for which we requesting the corresponding Object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The napi_value for the Object referenced by the\nnapi_ref.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If still valid, this API returns the napi_value representing the\nJavaScript Object associated with the napi_ref. Otherwise, result\nwill be NULL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_get_reference_value(napi_env env,\n                                                 napi_ref ref,\n                                                 napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                the napi_value passed in or out of these methods is a handle to the\nobject to which the reference is related.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] ref: napi_ref for which we requesting the corresponding Object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The napi_value for the Object referenced by the\nnapi_ref.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If still valid, this API returns the napi_value representing the\nJavaScript Object associated with the napi_ref. Otherwise, result\nwill be NULL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_reference_value" } @@ -847,7 +887,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env,\n                                                  void (*fun)(void* arg),\n                                                  void* arg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Registers fun as a function to be run with the arg parameter once the\ncurrent Node.js environment exits.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A function can safely be specified multiple times with different\narg values. In that case, it will be called multiple times as well.\nProviding the same fun and arg values multiple times is not allowed\nand will lead the process to abort.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The hooks will be called in reverse order, i.e. the most recently added one\nwill be called first.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Removing this hook can be done by using napi_remove_env_cleanup_hook.\nTypically, that happens when the resource for which this hook was added\nis being torn down anyway.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env,\n                                                  void (*fun)(void* arg),\n                                                  void* arg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Registers fun as a function to be run with the arg parameter once the\ncurrent Node.js environment exits.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A function can safely be specified multiple times with different\narg values. In that case, it will be called multiple times as well.\nProviding the same fun and arg values multiple times is not allowed\nand will lead the process to abort.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The hooks will be called in reverse order, i.e. the most recently added one\nwill be called first.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Removing this hook can be done by using napi_remove_env_cleanup_hook.\nTypically, that happens when the resource for which this hook was added\nis being torn down anyway.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For asynchronous cleanup, napi_add_async_cleanup_hook is available.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_add_env_cleanup_hook" }, @@ -863,9 +903,50 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,\n                                                     void (*fun)(void* arg),\n                                                     void* arg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unregisters fun as a function to be run with the arg parameter once the\ncurrent Node.js environment exits. Both the argument and the function value\nneed to be exact matches.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The function must have originally been registered\nwith napi_add_env_cleanup_hook, otherwise the process will abort.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env,\n                                                     void (*fun)(void* arg),\n                                                     void* arg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unregisters fun as a function to be run with the arg parameter once the\ncurrent Node.js environment exits. Both the argument and the function value\nneed to be exact matches.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The function must have originally been registered\nwith napi_add_env_cleanup_hook, otherwise the process will abort.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_remove_env_cleanup_hook" + }, + { + "textRaw": "napi_add_async_cleanup_hook", + "name": "napi_add_async_cleanup_hook", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34819", + "description": "Changed signature of the `hook` callback." + } + ], + "napiVersion": [ + 8 + ] + }, + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_add_async_cleanup_hook(\n    napi_env env,\n    napi_async_cleanup_hook hook,\n    void* arg,\n    napi_async_cleanup_hook_handle* remove_handle);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] hook: The function pointer to call at environment teardown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arg: The pointer to pass to hook when it gets called.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] remove_handle: Optional handle that refers to the asynchronous cleanup\nhook.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Registers hook, which is a function of type napi_async_cleanup_hook, as\na function to be run with the remove_handle and arg parameters once the\ncurrent Node.js environment exits.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unlike napi_add_env_cleanup_hook, the hook is allowed to be asynchronous.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Otherwise, behavior generally matches that of napi_add_env_cleanup_hook.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If remove_handle is not NULL, an opaque value will be stored in it\nthat must later be passed to napi_remove_async_cleanup_hook,\nregardless of whether the hook has already been invoked.\nTypically, that happens when the resource for which this hook was added\nis being torn down anyway.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_add_async_cleanup_hook" + }, + { + "textRaw": "napi_remove_async_cleanup_hook", + "name": "napi_remove_async_cleanup_hook", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34819", + "description": "Removed `env` parameter." + } + ] + }, + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_remove_async_cleanup_hook(\n    napi_async_cleanup_hook_handle remove_handle);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unregisters the cleanup hook corresponding to remove_handle. This will prevent\nthe hook from being executed, unless it has already started executing.\nThis must be called on any napi_async_cleanup_hook_handle value obtained\nfrom napi_add_async_cleanup_hook.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_remove_async_cleanup_hook" } ], "type": "module", @@ -873,17 +954,17 @@ } ], "type": "misc", - "displayName": "Object Lifetime management" + "displayName": "Object lifetime management" }, { "textRaw": "Module registration", "name": "module_registration", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API modules are registered in a manner similar to other modules\nexcept that instead of using the NODE_MODULE macro the following\nis used:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The next difference is the signature for the Init method. For a N-API\nmodule it is as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value Init(napi_env env, napi_value exports);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The return value from Init is treated as the exports object for the module.\nThe Init method is passed an empty object via the exports parameter as a\nconvenience. If Init returns NULL, the parameter passed as exports is\nexported by the module. N-API modules cannot modify the module object but can\nspecify anything as the exports property of the module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To add the method hello as a function so that it can be called as a method\nprovided by the addon:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_property_descriptor desc =\n    {\"hello\", NULL, Method, NULL, NULL, NULL, napi_default, NULL};\n  status = napi_define_properties(env, exports, 1, &desc);\n  if (status != napi_ok) return NULL;\n  return exports;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To set a function to be returned by the require() for the addon:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value Init(napi_env env, napi_value exports) {\n  napi_value method;\n  napi_status status;\n  status = napi_create_function(env, \"exports\", NAPI_AUTO_LENGTH, Method, NULL, &method);\n  if (status != napi_ok) return NULL;\n  return method;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To define a class so that new instances can be created (often used with\nObject Wrap):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // NOTE: partial example, not all referenced code is included\nnapi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_property_descriptor properties[] = {\n    { \"value\", NULL, NULL, GetValue, SetValue, NULL, napi_default, NULL },\n    DECLARE_NAPI_METHOD(\"plusOne\", PlusOne),\n    DECLARE_NAPI_METHOD(\"multiply\", Multiply),\n  };\n\n  napi_value cons;\n  status =\n      napi_define_class(env, \"MyObject\", New, NULL, 3, properties, &cons);\n  if (status != napi_ok) return NULL;\n\n  status = napi_create_reference(env, cons, 1, &constructor);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"MyObject\", cons);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the module will be loaded multiple times during the lifetime of the Node.js\nprocess, use the NAPI_MODULE_INIT macro to initialize the module:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_MODULE_INIT() {\n  napi_value answer;\n  napi_status result;\n\n  status = napi_create_int64(env, 42, &answer);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"answer\", answer);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This macro includes NAPI_MODULE, and declares an Init function with a\nspecial name and with visibility beyond the addon. This will allow Node.js to\ninitialize the module even if it is loaded multiple times.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                There are a few design considerations when declaring a module that may be loaded\nmultiple times. The documentation of context-aware addons provides more\ndetails.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The variables env and exports will be available inside the function body\nfollowing the macro invocation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For more details on setting properties on objects, see the section on\nWorking with JavaScript Properties.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For more details on building addon modules in general, refer to the existing\nAPI.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API modules are registered in a manner similar to other modules\nexcept that instead of using the NODE_MODULE macro the following\nis used:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The next difference is the signature for the Init method. For a N-API\nmodule it is as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value Init(napi_env env, napi_value exports);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The return value from Init is treated as the exports object for the module.\nThe Init method is passed an empty object via the exports parameter as a\nconvenience. If Init returns NULL, the parameter passed as exports is\nexported by the module. N-API modules cannot modify the module object but can\nspecify anything as the exports property of the module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To add the method hello as a function so that it can be called as a method\nprovided by the addon:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_property_descriptor desc = {\n    \"hello\",\n    NULL,\n    Method,\n    NULL,\n    NULL,\n    NULL,\n    napi_writable | napi_enumerable | napi_configurable,\n    NULL\n  };\n  status = napi_define_properties(env, exports, 1, &desc);\n  if (status != napi_ok) return NULL;\n  return exports;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To set a function to be returned by the require() for the addon:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value Init(napi_env env, napi_value exports) {\n  napi_value method;\n  napi_status status;\n  status = napi_create_function(env, \"exports\", NAPI_AUTO_LENGTH, Method, NULL, &method);\n  if (status != napi_ok) return NULL;\n  return method;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To define a class so that new instances can be created (often used with\nObject wrap):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // NOTE: partial example, not all referenced code is included\nnapi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n  napi_property_descriptor properties[] = {\n    { \"value\", NULL, NULL, GetValue, SetValue, NULL, napi_writable | napi_configurable, NULL },\n    DECLARE_NAPI_METHOD(\"plusOne\", PlusOne),\n    DECLARE_NAPI_METHOD(\"multiply\", Multiply),\n  };\n\n  napi_value cons;\n  status =\n      napi_define_class(env, \"MyObject\", New, NULL, 3, properties, &cons);\n  if (status != napi_ok) return NULL;\n\n  status = napi_create_reference(env, cons, 1, &constructor);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"MyObject\", cons);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the module will be loaded multiple times during the lifetime of the Node.js\nprocess, use the NAPI_MODULE_INIT macro to initialize the module:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_MODULE_INIT() {\n  napi_value answer;\n  napi_status result;\n\n  status = napi_create_int64(env, 42, &answer);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"answer\", answer);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This macro includes NAPI_MODULE, and declares an Init function with a\nspecial name and with visibility beyond the addon. This will allow Node.js to\ninitialize the module even if it is loaded multiple times.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                There are a few design considerations when declaring a module that may be loaded\nmultiple times. The documentation of context-aware addons provides more\ndetails.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The variables env and exports will be available inside the function body\nfollowing the macro invocation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For more details on setting properties on objects, see the section on\nWorking with JavaScript properties.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For more details on building addon modules in general, refer to the existing\nAPI.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "misc", "displayName": "Module registration" }, { - "textRaw": "Working with JavaScript Values", + "textRaw": "Working with JavaScript values", "name": "working_with_javascript_values", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API exposes a set of APIs to create all types of JavaScript values.\nSome of these types are documented under Section 6\nof the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Fundamentally, these APIs are used to do one of the following:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Create a new JavaScript object
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. Convert from a primitive C type to an N-API value
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. Convert from N-API value to a primitive C type
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                7. Get global instances including undefined and null
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                8. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API values are represented by the type napi_value.\nAny N-API call that requires a JavaScript value takes in a napi_value.\nIn some cases, the API does check the type of the napi_value up-front.\nHowever, for better performance, it's better for the caller to make sure that\nthe napi_value in question is of the JavaScript type expected by the API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -903,7 +984,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_key_include_prototypes,\n  napi_key_own_only\n} napi_key_collection_mode;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Describes the Keys/Properties filter enums:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_key_collection_mode limits the range of collected properties.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_key_own_only limits the collected properties to the given\nobject only. napi_key_include_prototypes will include all keys\nof the objects's prototype chain as well.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_key_include_prototypes,\n  napi_key_own_only\n} napi_key_collection_mode;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Describes the Keys/Properties filter enums:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_key_collection_mode limits the range of collected properties.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_key_own_only limits the collected properties to the given\nobject only. napi_key_include_prototypes will include all keys\nof the objects's prototype chain as well.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_key_collection_mode" }, @@ -919,7 +1000,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_key_all_properties = 0,\n  napi_key_writable = 1,\n  napi_key_enumerable = 1 << 1,\n  napi_key_configurable = 1 << 2,\n  napi_key_skip_strings = 1 << 3,\n  napi_key_skip_symbols = 1 << 4\n} napi_key_filter;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Property filter bits. They can be or'ed to build a composite filter.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_key_all_properties = 0,\n  napi_key_writable = 1,\n  napi_key_enumerable = 1 << 1,\n  napi_key_configurable = 1 << 2,\n  napi_key_skip_strings = 1 << 3,\n  napi_key_skip_symbols = 1 << 4\n} napi_key_filter;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Property filter bits. They can be or'ed to build a composite filter.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_key_filter" }, @@ -935,21 +1016,21 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_key_keep_numbers,\n  napi_key_numbers_to_strings\n} napi_key_conversion;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_key_numbers_to_strings will convert integer indices to\nstrings. napi_key_keep_numbers will return numbers for integer\nindices.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_key_keep_numbers,\n  napi_key_numbers_to_strings\n} napi_key_conversion;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_key_numbers_to_strings will convert integer indices to\nstrings. napi_key_keep_numbers will return numbers for integer\nindices.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_key_conversion" }, { "textRaw": "napi_valuetype", "name": "napi_valuetype", - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  // ES6 types (corresponds to typeof)\n  napi_undefined,\n  napi_null,\n  napi_boolean,\n  napi_number,\n  napi_string,\n  napi_symbol,\n  napi_object,\n  napi_function,\n  napi_external,\n  napi_bigint,\n} napi_valuetype;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Describes the type of a napi_value. This generally corresponds to the types\ndescribed in Section 6.1 of the ECMAScript Language Specification.\nIn addition to types in that section, napi_valuetype can also represent\nFunctions and Objects with external data.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A JavaScript value of type napi_external appears in JavaScript as a plain\nobject such that no properties can be set on it, and no prototype.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  // ES6 types (corresponds to typeof)\n  napi_undefined,\n  napi_null,\n  napi_boolean,\n  napi_number,\n  napi_string,\n  napi_symbol,\n  napi_object,\n  napi_function,\n  napi_external,\n  napi_bigint,\n} napi_valuetype;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Describes the type of a napi_value. This generally corresponds to the types\ndescribed in Section 6.1 of the ECMAScript Language Specification.\nIn addition to types in that section, napi_valuetype can also represent\nFunctions and Objects with external data.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A JavaScript value of type napi_external appears in JavaScript as a plain\nobject such that no properties can be set on it, and no prototype.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_valuetype" }, { "textRaw": "napi_typedarray_type", "name": "napi_typedarray_type", - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_int8_array,\n  napi_uint8_array,\n  napi_uint8_clamped_array,\n  napi_int16_array,\n  napi_uint16_array,\n  napi_int32_array,\n  napi_uint32_array,\n  napi_float32_array,\n  napi_float64_array,\n  napi_bigint64_array,\n  napi_biguint64_array,\n} napi_typedarray_type;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This represents the underlying binary scalar datatype of the TypedArray.\nElements of this enum correspond to\nSection 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_int8_array,\n  napi_uint8_array,\n  napi_uint8_clamped_array,\n  napi_int16_array,\n  napi_uint16_array,\n  napi_int32_array,\n  napi_uint32_array,\n  napi_float32_array,\n  napi_float64_array,\n  napi_bigint64_array,\n  napi_biguint64_array,\n} napi_typedarray_type;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This represents the underlying binary scalar datatype of the TypedArray.\nElements of this enum correspond to\nSection 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_typedarray_type" } @@ -958,7 +1039,7 @@ "displayName": "Enum types" }, { - "textRaw": "Object Creation Functions", + "textRaw": "Object creation functions", "name": "object_creation_functions", "modules": [ { @@ -973,7 +1054,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_array(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an N-API value corresponding to a JavaScript Array type.\nJavaScript arrays are described in\nSection 22.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_array(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an N-API value corresponding to a JavaScript Array type.\nJavaScript arrays are described in\nSection 22.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_array" }, @@ -989,7 +1070,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_array_with_length(napi_env env,\n                                          size_t length,\n                                          napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The initial length of the Array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an N-API value corresponding to a JavaScript Array type.\nThe Array's length property is set to the passed-in length parameter.\nHowever, the underlying buffer is not guaranteed to be pre-allocated by the VM\nwhen the array is created. That behavior is left to the underlying VM\nimplementation. If the buffer must be a contiguous block of memory that can be\ndirectly read and/or written via C, consider using\nnapi_create_external_arraybuffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript arrays are described in\nSection 22.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_array_with_length(napi_env env,\n                                          size_t length,\n                                          napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The initial length of the Array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an N-API value corresponding to a JavaScript Array type.\nThe Array's length property is set to the passed-in length parameter.\nHowever, the underlying buffer is not guaranteed to be pre-allocated by the VM\nwhen the array is created. That behavior is left to the underlying VM\nimplementation. If the buffer must be a contiguous block of memory that can be\ndirectly read and/or written via C, consider using\nnapi_create_external_arraybuffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript arrays are described in\nSection 22.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_array_with_length" }, @@ -1005,7 +1086,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_arraybuffer(napi_env env,\n                                    size_t byte_length,\n                                    void** data,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length in bytes of the array buffer to create.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: Pointer to the underlying byte buffer of the ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an N-API value corresponding to a JavaScript ArrayBuffer.\nArrayBuffers are used to represent fixed-length binary data buffers. They are\nnormally used as a backing-buffer for TypedArray objects.\nThe ArrayBuffer allocated will have an underlying byte buffer whose size is\ndetermined by the length parameter that's passed in.\nThe underlying buffer is optionally returned back to the caller in case the\ncaller wants to directly manipulate the buffer. This buffer can only be\nwritten to directly from native code. To write to this buffer from JavaScript,\na typed array or DataView object would need to be created.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript ArrayBuffer objects are described in\nSection 24.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_arraybuffer(napi_env env,\n                                    size_t byte_length,\n                                    void** data,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length in bytes of the array buffer to create.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: Pointer to the underlying byte buffer of the ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an N-API value corresponding to a JavaScript ArrayBuffer.\nArrayBuffers are used to represent fixed-length binary data buffers. They are\nnormally used as a backing-buffer for TypedArray objects.\nThe ArrayBuffer allocated will have an underlying byte buffer whose size is\ndetermined by the length parameter that's passed in.\nThe underlying buffer is optionally returned back to the caller in case the\ncaller wants to directly manipulate the buffer. This buffer can only be\nwritten to directly from native code. To write to this buffer from JavaScript,\na typed array or DataView object would need to be created.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript ArrayBuffer objects are described in\nSection 24.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_arraybuffer" }, @@ -1021,7 +1102,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_buffer(napi_env env,\n                               size_t size,\n                               void** data,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] size: Size in bytes of the underlying buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: Raw pointer to the underlying buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a node::Buffer object. While this is still a\nfully-supported data structure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_buffer(napi_env env,\n                               size_t size,\n                               void** data,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] size: Size in bytes of the underlying buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: Raw pointer to the underlying buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a node::Buffer object. While this is still a\nfully-supported data structure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_buffer" }, @@ -1037,7 +1118,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_buffer_copy(napi_env env,\n                                    size_t length,\n                                    const void* data,\n                                    void** result_data,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] size: Size in bytes of the input buffer (should be the same as the size\nof the new buffer).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Raw pointer to the underlying buffer to copy from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result_data: Pointer to the new Buffer's underlying data buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a node::Buffer object and initializes it with data copied\nfrom the passed-in buffer. While this is still a fully-supported data\nstructure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_buffer_copy(napi_env env,\n                                    size_t length,\n                                    const void* data,\n                                    void** result_data,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] size: Size in bytes of the input buffer (should be the same as the size\nof the new buffer).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Raw pointer to the underlying buffer to copy from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result_data: Pointer to the new Buffer's underlying data buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a node::Buffer object and initializes it with data copied\nfrom the passed-in buffer. While this is still a fully-supported data\nstructure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_buffer_copy" }, @@ -1053,7 +1134,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_date(napi_env env,\n                             double time,\n                             napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] time: ECMAScript time value in milliseconds since 01 January, 1970 UTC.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API does not observe leap seconds; they are ignored, as\nECMAScript aligns with POSIX time specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a JavaScript Date object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript Date objects are described in\nSection 20.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_date(napi_env env,\n                             double time,\n                             napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] time: ECMAScript time value in milliseconds since 01 January, 1970 UTC.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API does not observe leap seconds; they are ignored, as\nECMAScript aligns with POSIX time specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a JavaScript Date object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript Date objects are described in\nSection 20.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_date" }, @@ -1069,7 +1150,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_external(napi_env env,\n                                 void* data,\n                                 napi_finalize finalize_cb,\n                                 void* finalize_hint,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Raw pointer to the external data.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Optional callback to call when the external value is being\ncollected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing an external value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a JavaScript value with external data attached to it. This\nis used to pass external data through JavaScript code, so it can be retrieved\nlater by native code using napi_get_value_external.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The created value is not an object, and therefore does not support additional\nproperties. It is considered a distinct value type: calling napi_typeof() with\nan external value yields napi_external.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_external(napi_env env,\n                                 void* data,\n                                 napi_finalize finalize_cb,\n                                 void* finalize_hint,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Raw pointer to the external data.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Optional callback to call when the external value is being\ncollected. napi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing an external value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a JavaScript value with external data attached to it. This\nis used to pass external data through JavaScript code, so it can be retrieved\nlater by native code using napi_get_value_external.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The created value is not an object, and therefore does not support additional\nproperties. It is considered a distinct value type: calling napi_typeof() with\nan external value yields napi_external.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_external" }, @@ -1085,7 +1166,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status\nnapi_create_external_arraybuffer(napi_env env,\n                                 void* external_data,\n                                 size_t byte_length,\n                                 napi_finalize finalize_cb,\n                                 void* finalize_hint,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] external_data: Pointer to the underlying byte buffer of the\nArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] byte_length: The length in bytes of the underlying buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being\ncollected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an N-API value corresponding to a JavaScript ArrayBuffer.\nThe underlying byte buffer of the ArrayBuffer is externally allocated and\nmanaged. The caller must ensure that the byte buffer remains valid until the\nfinalize callback is called.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript ArrayBuffers are described in\nSection 24.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status\nnapi_create_external_arraybuffer(napi_env env,\n                                 void* external_data,\n                                 size_t byte_length,\n                                 napi_finalize finalize_cb,\n                                 void* finalize_hint,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] external_data: Pointer to the underlying byte buffer of the\nArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] byte_length: The length in bytes of the underlying buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being\ncollected. napi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an N-API value corresponding to a JavaScript ArrayBuffer.\nThe underlying byte buffer of the ArrayBuffer is externally allocated and\nmanaged. The caller must ensure that the byte buffer remains valid until the\nfinalize callback is called.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript ArrayBuffers are described in\nSection 24.1 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_external_arraybuffer" }, @@ -1101,7 +1182,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_external_buffer(napi_env env,\n                                        size_t length,\n                                        void* data,\n                                        napi_finalize finalize_cb,\n                                        void* finalize_hint,\n                                        napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: Size in bytes of the input buffer (should be the same as the\nsize of the new buffer).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Raw pointer to the underlying buffer to copy from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being\ncollected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a node::Buffer object and initializes it with data\nbacked by the passed in buffer. While this is still a fully-supported data\nstructure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For Node.js >=4 Buffers are Uint8Arrays.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_external_buffer(napi_env env,\n                                        size_t length,\n                                        void* data,\n                                        napi_finalize finalize_cb,\n                                        void* finalize_hint,\n                                        napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: Size in bytes of the input buffer (should be the same as the\nsize of the new buffer).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Raw pointer to the underlying buffer to expose to JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Optional callback to call when the ArrayBuffer is being\ncollected. napi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional hint to pass to the finalize callback during\ncollection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a node::Buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a node::Buffer object and initializes it with data\nbacked by the passed in buffer. While this is still a fully-supported data\nstructure, in most cases using a TypedArray will suffice.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The API adds a napi_finalize callback which will be called when the JavaScript\nobject just created is ready for garbage collection. It is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the object created by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For Node.js >=4 Buffers are Uint8Arrays.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_external_buffer" }, @@ -1117,7 +1198,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_object(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a default JavaScript Object.\nIt is the equivalent of doing new Object() in JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Object type is described in Section 6.1.7 of the\nECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_object(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a default JavaScript Object.\nIt is the equivalent of doing new Object() in JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Object type is described in Section 6.1.7 of the\nECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_object" }, @@ -1133,7 +1214,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_symbol(napi_env env,\n                               napi_value description,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] description: Optional napi_value which refers to a JavaScript\nString to be set as the description for the symbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Symbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript Symbol object from a UTF8-encoded C string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Symbol type is described in Section 19.4\nof the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_symbol(napi_env env,\n                               napi_value description,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] description: Optional napi_value which refers to a JavaScript\nString to be set as the description for the symbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Symbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript Symbol object from a UTF8-encoded C string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Symbol type is described in Section 19.4\nof the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_symbol" }, @@ -1149,7 +1230,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_typedarray(napi_env env,\n                                   napi_typedarray_type type,\n                                   size_t length,\n                                   napi_value arraybuffer,\n                                   size_t byte_offset,\n                                   napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: Number of elements in the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: ArrayBuffer underlying the typed array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] byte_offset: The byte offset within the ArrayBuffer from which to\nstart projecting the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript TypedArray object over an existing\nArrayBuffer. TypedArray objects provide an array-like view over an\nunderlying data buffer where each element has the same underlying binary scalar\ndatatype.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It's required that (length * size_of_element) + byte_offset should\nbe <= the size in bytes of the array passed in. If not, a RangeError exception\nis raised.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript TypedArray objects are described in\nSection 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_typedarray(napi_env env,\n                                   napi_typedarray_type type,\n                                   size_t length,\n                                   napi_value arraybuffer,\n                                   size_t byte_offset,\n                                   napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: Number of elements in the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: ArrayBuffer underlying the typed array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] byte_offset: The byte offset within the ArrayBuffer from which to\nstart projecting the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript TypedArray object over an existing\nArrayBuffer. TypedArray objects provide an array-like view over an\nunderlying data buffer where each element has the same underlying binary scalar\ndatatype.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It's required that (length * size_of_element) + byte_offset should\nbe <= the size in bytes of the array passed in. If not, a RangeError exception\nis raised.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript TypedArray objects are described in\nSection 22.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_typedarray" }, @@ -1165,13 +1246,13 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_dataview(napi_env env,\n                                 size_t byte_length,\n                                 napi_value arraybuffer,\n                                 size_t byte_offset,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: Number of elements in the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: ArrayBuffer underlying the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] byte_offset: The byte offset within the ArrayBuffer from which to\nstart projecting the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript DataView object over an existing ArrayBuffer.\nDataView objects provide an array-like view over an underlying data buffer,\nbut one which allows items of different size and type in the ArrayBuffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It is required that byte_length + byte_offset is less than or equal to the\nsize in bytes of the array passed in. If not, a RangeError exception is\nraised.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript DataView objects are described in\nSection 24.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_dataview(napi_env env,\n                                 size_t byte_length,\n                                 napi_value arraybuffer,\n                                 size_t byte_offset,\n                                 napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: Number of elements in the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: ArrayBuffer underlying the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] byte_offset: The byte offset within the ArrayBuffer from which to\nstart projecting the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript DataView object over an existing ArrayBuffer.\nDataView objects provide an array-like view over an underlying data buffer,\nbut one which allows items of different size and type in the ArrayBuffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It is required that byte_length + byte_offset is less than or equal to the\nsize in bytes of the array passed in. If not, a RangeError exception is\nraised.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript DataView objects are described in\nSection 24.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_dataview" } ], "type": "module", - "displayName": "Object Creation Functions" + "displayName": "Object creation functions" }, { "textRaw": "Functions to convert from C types to N-API", @@ -1189,7 +1270,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to convert from the C int32_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to convert from the C int32_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_int32" }, @@ -1205,7 +1286,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to convert from the C uint32_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to convert from the C uint32_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_uint32" }, @@ -1221,7 +1302,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to convert from the C int64_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Number type is described in Section 6.1.6\nof the ECMAScript Language Specification. Note the complete range of int64_t\ncannot be represented with full precision in JavaScript. Integer values\noutside the range of Number.MIN_SAFE_INTEGER -(2^53 - 1) -\nNumber.MAX_SAFE_INTEGER (2^53 - 1) will lose precision.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to convert from the C int64_t type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Number type is described in Section 6.1.6\nof the ECMAScript Language Specification. Note the complete range of int64_t\ncannot be represented with full precision in JavaScript. Integer values\noutside the range of Number.MIN_SAFE_INTEGER -(2**53 - 1) -\nNumber.MAX_SAFE_INTEGER (2**53 - 1) will lose precision.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_int64" }, @@ -1237,7 +1318,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_double(napi_env env, double value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Double-precision value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to convert from the C double type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_double(napi_env env, double value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Double-precision value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to convert from the C double type to the JavaScript\nNumber type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript Number type is described in\nSection 6.1.6 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_double" }, @@ -1253,7 +1334,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_bigint_int64(napi_env env,\n                                     int64_t value,\n                                     napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API converts the C int64_t type to the JavaScript BigInt type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_bigint_int64(napi_env env,\n                                     int64_t value,\n                                     napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API converts the C int64_t type to the JavaScript BigInt type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_bigint_int64" }, @@ -1269,7 +1350,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_bigint_uint64(napi_env env,\n                                      uint64_t value,\n                                      napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API converts the C uint64_t type to the JavaScript BigInt type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_bigint_uint64(napi_env env,\n                                      uint64_t value,\n                                      napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: Unsigned integer value to be represented in JavaScript.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API converts the C uint64_t type to the JavaScript BigInt type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_bigint_uint64" }, @@ -1285,7 +1366,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_bigint_words(napi_env env,\n                                     int sign_bit,\n                                     size_t word_count,\n                                     const uint64_t* words,\n                                     napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] sign_bit: Determines if the resulting BigInt will be positive or\nnegative.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] word_count: The length of the words array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] words: An array of uint64_t little-endian 64-bit words.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API converts an array of unsigned 64-bit words into a single BigInt\nvalue.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The resulting BigInt is calculated as: (–1)sign_bit (words[0]\n× (264)0 + words[1] × (264)1 + …)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_bigint_words(napi_env env,\n                                     int sign_bit,\n                                     size_t word_count,\n                                     const uint64_t* words,\n                                     napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] sign_bit: Determines if the resulting BigInt will be positive or\nnegative.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] word_count: The length of the words array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] words: An array of uint64_t little-endian 64-bit words.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API converts an array of unsigned 64-bit words into a single BigInt\nvalue.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The resulting BigInt is calculated as: (–1)sign_bit (words[0]\n× (264)0 + words[1] × (264)1 + …)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_bigint_words" }, @@ -1301,7 +1382,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_string_latin1(napi_env env,\n                                      const char* str,\n                                      size_t length,\n                                      napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] str: Character buffer representing an ISO-8859-1-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the string in bytes, or NAPI_AUTO_LENGTH if it\nis null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript String object from an ISO-8859-1-encoded C\nstring. The native string is copied.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_string_latin1(napi_env env,\n                                      const char* str,\n                                      size_t length,\n                                      napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] str: Character buffer representing an ISO-8859-1-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the string in bytes, or NAPI_AUTO_LENGTH if it\nis null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript String object from an ISO-8859-1-encoded C\nstring. The native string is copied.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_string_latin1" }, @@ -1317,7 +1398,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_string_utf16(napi_env env,\n                                     const char16_t* str,\n                                     size_t length,\n                                     napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] str: Character buffer representing a UTF16-LE-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the string in two-byte code units, or\nNAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript String object from a UTF16-LE-encoded C string.\nThe native string is copied.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_string_utf16(napi_env env,\n                                     const char16_t* str,\n                                     size_t length,\n                                     napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] str: Character buffer representing a UTF16-LE-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the string in two-byte code units, or\nNAPI_AUTO_LENGTH if it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript String object from a UTF16-LE-encoded C string.\nThe native string is copied.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_string_utf16" }, @@ -1333,7 +1414,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_string_utf8(napi_env env,\n                                    const char* str,\n                                    size_t length,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] str: Character buffer representing a UTF8-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the string in bytes, or NAPI_AUTO_LENGTH if it\nis null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript String object from a UTF8-encoded C string.\nThe native string is copied.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_string_utf8(napi_env env,\n                                    const char* str,\n                                    size_t length,\n                                    napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] str: Character buffer representing a UTF8-encoded string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the string in bytes, or NAPI_AUTO_LENGTH if it\nis null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing a JavaScript String.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a JavaScript String object from a UTF8-encoded C string.\nThe native string is copied.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript String type is described in\nSection 6.1.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_string_utf8" } @@ -1357,7 +1438,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_array_length(napi_env env,\n                                  napi_value value,\n                                  uint32_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing the JavaScript Array whose length is\nbeing queried.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: uint32 representing length of the array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the length of an array.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Array length is described in Section 22.1.4.1 of the ECMAScript Language\nSpecification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_array_length(napi_env env,\n                                  napi_value value,\n                                  uint32_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing the JavaScript Array whose length is\nbeing queried.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: uint32 representing length of the array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the length of an array.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Array length is described in Section 22.1.4.1 of the ECMAScript Language\nSpecification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_array_length" }, @@ -1373,7 +1454,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_arraybuffer_info(napi_env env,\n                                      napi_value arraybuffer,\n                                      void** data,\n                                      size_t* byte_length)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: napi_value representing the ArrayBuffer being queried.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The underlying data buffer of the ArrayBuffer. If byte_length\nis 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] byte_length: Length in bytes of the underlying data buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to retrieve the underlying data buffer of an ArrayBuffer and\nits length.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                WARNING: Use caution while using this API. The lifetime of the underlying data\nbuffer is managed by the ArrayBuffer even after it's returned. A\npossible safe way to use this API is in conjunction with\nnapi_create_reference, which can be used to guarantee control over the\nlifetime of the ArrayBuffer. It's also safe to use the returned data buffer\nwithin the same callback as long as there are no calls to other APIs that might\ntrigger a GC.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_arraybuffer_info(napi_env env,\n                                      napi_value arraybuffer,\n                                      void** data,\n                                      size_t* byte_length)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: napi_value representing the ArrayBuffer being queried.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The underlying data buffer of the ArrayBuffer. If byte_length\nis 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] byte_length: Length in bytes of the underlying data buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to retrieve the underlying data buffer of an ArrayBuffer and\nits length.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                WARNING: Use caution while using this API. The lifetime of the underlying data\nbuffer is managed by the ArrayBuffer even after it's returned. A\npossible safe way to use this API is in conjunction with\nnapi_create_reference, which can be used to guarantee control over the\nlifetime of the ArrayBuffer. It's also safe to use the returned data buffer\nwithin the same callback as long as there are no calls to other APIs that might\ntrigger a GC.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_arraybuffer_info" }, @@ -1389,7 +1470,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_buffer_info(napi_env env,\n                                 napi_value value,\n                                 void** data,\n                                 size_t* length)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing the node::Buffer being queried.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The underlying data buffer of the node::Buffer.\nIf length is 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] length: Length in bytes of the underlying data buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to retrieve the underlying data buffer of a node::Buffer\nand it's length.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Warning: Use caution while using this API since the underlying data buffer's\nlifetime is not guaranteed if it's managed by the VM.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_buffer_info(napi_env env,\n                                 napi_value value,\n                                 void** data,\n                                 size_t* length)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing the node::Buffer being queried.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The underlying data buffer of the node::Buffer.\nIf length is 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] length: Length in bytes of the underlying data buffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to retrieve the underlying data buffer of a node::Buffer\nand it's length.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Warning: Use caution while using this API since the underlying data buffer's\nlifetime is not guaranteed if it's managed by the VM.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_buffer_info" }, @@ -1405,7 +1486,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_prototype(napi_env env,\n                               napi_value object,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: napi_value representing JavaScript Object whose prototype\nto return. This returns the equivalent of Object.getPrototypeOf (which is\nnot the same as the function's prototype property).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing prototype of the given object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_prototype(napi_env env,\n                               napi_value object,\n                               napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: napi_value representing JavaScript Object whose prototype\nto return. This returns the equivalent of Object.getPrototypeOf (which is\nnot the same as the function's prototype property).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing prototype of the given object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_prototype" }, @@ -1421,7 +1502,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_typedarray_info(napi_env env,\n                                     napi_value typedarray,\n                                     napi_typedarray_type* type,\n                                     size_t* length,\n                                     void** data,\n                                     napi_value* arraybuffer,\n                                     size_t* byte_offset)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] typedarray: napi_value representing the TypedArray whose\nproperties to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] length: The number of elements in the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The data buffer underlying the TypedArray adjusted by\nthe byte_offset value so that it points to the first element in the\nTypedArray. If the length of the array is 0, this may be NULL or\nany other pointer value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] arraybuffer: The ArrayBuffer underlying the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] byte_offset: The byte offset within the underlying native array\nat which the first element of the arrays is located. The value for the data\nparameter has already been adjusted so that data points to the first element\nin the array. Therefore, the first byte of the native array would be at\ndata - byte_offset.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns various properties of a typed array.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Warning: Use caution while using this API since the underlying data buffer\nis managed by the VM.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_typedarray_info(napi_env env,\n                                     napi_value typedarray,\n                                     napi_typedarray_type* type,\n                                     size_t* length,\n                                     void** data,\n                                     napi_value* arraybuffer,\n                                     size_t* byte_offset)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] typedarray: napi_value representing the TypedArray whose\nproperties to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] type: Scalar datatype of the elements within the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] length: The number of elements in the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The data buffer underlying the TypedArray adjusted by\nthe byte_offset value so that it points to the first element in the\nTypedArray. If the length of the array is 0, this may be NULL or\nany other pointer value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] arraybuffer: The ArrayBuffer underlying the TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] byte_offset: The byte offset within the underlying native array\nat which the first element of the arrays is located. The value for the data\nparameter has already been adjusted so that data points to the first element\nin the array. Therefore, the first byte of the native array would be at\ndata - byte_offset.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns various properties of a typed array.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Warning: Use caution while using this API since the underlying data buffer\nis managed by the VM.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_typedarray_info" }, @@ -1437,7 +1518,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_dataview_info(napi_env env,\n                                   napi_value dataview,\n                                   size_t* byte_length,\n                                   void** data,\n                                   napi_value* arraybuffer,\n                                   size_t* byte_offset)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] dataview: napi_value representing the DataView whose\nproperties to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] byte_length: Number of bytes in the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The data buffer underlying the DataView.\nIf byte_length is 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] arraybuffer: ArrayBuffer underlying the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] byte_offset: The byte offset within the data buffer from which\nto start projecting the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns various properties of a DataView.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_dataview_info(napi_env env,\n                                   napi_value dataview,\n                                   size_t* byte_length,\n                                   void** data,\n                                   napi_value* arraybuffer,\n                                   size_t* byte_offset)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] dataview: napi_value representing the DataView whose\nproperties to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] byte_length: Number of bytes in the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: The data buffer underlying the DataView.\nIf byte_length is 0, this may be NULL or any other pointer value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] arraybuffer: ArrayBuffer underlying the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] byte_offset: The byte offset within the data buffer from which\nto start projecting the DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns various properties of a DataView.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_dataview_info" }, @@ -1453,7 +1534,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_date_value(napi_env env,\n                                napi_value value,\n                                double* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Time value as a double represented as milliseconds since\nmidnight at the beginning of 01 January, 1970 UTC.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API does not observe leap seconds; they are ignored, as\nECMAScript aligns with POSIX time specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-date napi_value is passed\nin it returns napi_date_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C double primitive of time value for the given JavaScript\nDate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_date_value(napi_env env,\n                                napi_value value,\n                                double* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing a JavaScript Date.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Time value as a double represented as milliseconds since\nmidnight at the beginning of 01 January, 1970 UTC.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API does not observe leap seconds; they are ignored, as\nECMAScript aligns with POSIX time specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-date napi_value is passed\nin it returns napi_date_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C double primitive of time value for the given JavaScript\nDate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_date_value" }, @@ -1469,7 +1550,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Boolean.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C boolean primitive equivalent of the given JavaScript\nBoolean.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-boolean napi_value is\npassed in it returns napi_boolean_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C boolean primitive equivalent of the given JavaScript\nBoolean.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Boolean.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C boolean primitive equivalent of the given JavaScript\nBoolean.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-boolean napi_value is\npassed in it returns napi_boolean_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C boolean primitive equivalent of the given JavaScript\nBoolean.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_bool" }, @@ -1485,7 +1566,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_double(napi_env env,\n                                  napi_value value,\n                                  double* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C double primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-number napi_value is passed\nin it returns napi_number_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C double primitive equivalent of the given JavaScript\nNumber.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_double(napi_env env,\n                                  napi_value value,\n                                  double* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C double primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-number napi_value is passed\nin it returns napi_number_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C double primitive equivalent of the given JavaScript\nNumber.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_double" }, @@ -1501,7 +1582,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bigint_int64(napi_env env,\n                                        napi_value value,\n                                        int64_t* result,\n                                        bool* lossless);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C int64_t primitive equivalent of the given JavaScript\nBigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] lossless: Indicates whether the BigInt value was converted\nlosslessly.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-BigInt is passed in it\nreturns napi_bigint_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C int64_t primitive equivalent of the given JavaScript\nBigInt. If needed it will truncate the value, setting lossless to false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bigint_int64(napi_env env,\n                                        napi_value value,\n                                        int64_t* result,\n                                        bool* lossless);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C int64_t primitive equivalent of the given JavaScript\nBigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] lossless: Indicates whether the BigInt value was converted\nlosslessly.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-BigInt is passed in it\nreturns napi_bigint_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C int64_t primitive equivalent of the given JavaScript\nBigInt. If needed it will truncate the value, setting lossless to false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_bigint_int64" }, @@ -1517,7 +1598,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bigint_uint64(napi_env env,\n                                        napi_value value,\n                                        uint64_t* result,\n                                        bool* lossless);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C uint64_t primitive equivalent of the given JavaScript\nBigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] lossless: Indicates whether the BigInt value was converted\nlosslessly.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-BigInt is passed in it\nreturns napi_bigint_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C uint64_t primitive equivalent of the given JavaScript\nBigInt. If needed it will truncate the value, setting lossless to false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bigint_uint64(napi_env env,\n                                        napi_value value,\n                                        uint64_t* result,\n                                        bool* lossless);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C uint64_t primitive equivalent of the given JavaScript\nBigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] lossless: Indicates whether the BigInt value was converted\nlosslessly.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-BigInt is passed in it\nreturns napi_bigint_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C uint64_t primitive equivalent of the given JavaScript\nBigInt. If needed it will truncate the value, setting lossless to false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_bigint_uint64" }, @@ -1533,7 +1614,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bigint_words(napi_env env,\n                                        napi_value value,\n                                        int* sign_bit,\n                                        size_t* word_count,\n                                        uint64_t* words);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] sign_bit: Integer representing if the JavaScript BigInt is positive\nor negative.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in/out] word_count: Must be initialized to the length of the words\narray. Upon return, it will be set to the actual number of words that\nwould be needed to store this BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] words: Pointer to a pre-allocated 64-bit word array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API converts a single BigInt value into a sign bit, 64-bit little-endian\narray, and the number of elements in the array. sign_bit and words may be\nboth set to NULL, in order to get only word_count.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_bigint_words(napi_env env,\n                                        napi_value value,\n                                        int* sign_bit,\n                                        size_t* word_count,\n                                        uint64_t* words);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] sign_bit: Integer representing if the JavaScript BigInt is positive\nor negative.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in/out] word_count: Must be initialized to the length of the words\narray. Upon return, it will be set to the actual number of words that\nwould be needed to store this BigInt.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] words: Pointer to a pre-allocated 64-bit word array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API converts a single BigInt value into a sign bit, 64-bit little-endian\narray, and the number of elements in the array. sign_bit and words may be\nboth set to NULL, in order to get only word_count.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_bigint_words" }, @@ -1549,7 +1630,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_external(napi_env env,\n                                    napi_value value,\n                                    void** result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript external value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Pointer to the data wrapped by the JavaScript external value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-external napi_value is\npassed in it returns napi_invalid_arg.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API retrieves the external data pointer that was previously passed to\nnapi_create_external().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_external(napi_env env,\n                                    napi_value value,\n                                    void** result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript external value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Pointer to the data wrapped by the JavaScript external value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-external napi_value is\npassed in it returns napi_invalid_arg.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API retrieves the external data pointer that was previously passed to\nnapi_create_external().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_external" }, @@ -1565,7 +1646,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_int32(napi_env env,\n                                 napi_value value,\n                                 int32_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C int32 primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in napi_number_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C int32 primitive equivalent\nof the given JavaScript Number.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the number exceeds the range of the 32 bit integer, then the result is\ntruncated to the equivalent of the bottom 32 bits. This can result in a large\npositive number becoming a negative number if the value is > 2^31 -1.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Non-finite number values (NaN, +Infinity, or -Infinity) set the\nresult to zero.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_int32(napi_env env,\n                                 napi_value value,\n                                 int32_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C int32 primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in napi_number_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C int32 primitive equivalent\nof the given JavaScript Number.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the number exceeds the range of the 32 bit integer, then the result is\ntruncated to the equivalent of the bottom 32 bits. This can result in a large\npositive number becoming a negative number if the value is > 231 - 1.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Non-finite number values (NaN, +Infinity, or -Infinity) set the\nresult to zero.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_int32" }, @@ -1581,7 +1662,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_int64(napi_env env,\n                                 napi_value value,\n                                 int64_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C int64 primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in it returns napi_number_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C int64 primitive equivalent of the given JavaScript\nNumber.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Number values outside the range of Number.MIN_SAFE_INTEGER\n-(2^53 - 1) - Number.MAX_SAFE_INTEGER (2^53 - 1) will lose precision.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Non-finite number values (NaN, +Infinity, or -Infinity) set the\nresult to zero.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_int64(napi_env env,\n                                 napi_value value,\n                                 int64_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C int64 primitive equivalent of the given JavaScript\nNumber.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in it returns napi_number_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C int64 primitive equivalent of the given JavaScript\nNumber.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Number values outside the range of Number.MIN_SAFE_INTEGER\n-(2**53 - 1) - Number.MAX_SAFE_INTEGER (2**53 - 1) will lose\nprecision.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Non-finite number values (NaN, +Infinity, or -Infinity) set the\nresult to zero.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_int64" }, @@ -1597,7 +1678,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_string_latin1(napi_env env,\n                                         napi_value value,\n                                         char* buf,\n                                         size_t bufsize,\n                                         size_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] buf: Buffer to write the ISO-8859-1-encoded string into. If NULL is\npassed in, the length of the string (in bytes) is returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Number of bytes copied into the buffer, excluding the null\nterminator.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the ISO-8859-1-encoded string corresponding the value passed\nin.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_string_latin1(napi_env env,\n                                         napi_value value,\n                                         char* buf,\n                                         size_t bufsize,\n                                         size_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] buf: Buffer to write the ISO-8859-1-encoded string into. If NULL is\npassed in, the length of the string (in bytes) is returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Number of bytes copied into the buffer, excluding the null\nterminator.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the ISO-8859-1-encoded string corresponding the value passed\nin.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_string_latin1" }, @@ -1613,7 +1694,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_string_utf8(napi_env env,\n                                       napi_value value,\n                                       char* buf,\n                                       size_t bufsize,\n                                       size_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] buf: Buffer to write the UTF8-encoded string into. If NULL is passed\nin, the length of the string (in bytes) is returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Number of bytes copied into the buffer, excluding the null\nterminator.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the UTF8-encoded string corresponding the value passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_string_utf8(napi_env env,\n                                       napi_value value,\n                                       char* buf,\n                                       size_t bufsize,\n                                       size_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] buf: Buffer to write the UTF8-encoded string into. If NULL is passed\nin, the length of the string (in bytes) is returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Number of bytes copied into the buffer, excluding the null\nterminator.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the UTF8-encoded string corresponding the value passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_string_utf8" }, @@ -1629,7 +1710,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_string_utf16(napi_env env,\n                                        napi_value value,\n                                        char16_t* buf,\n                                        size_t bufsize,\n                                        size_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] buf: Buffer to write the UTF16-LE-encoded string into. If NULL is\npassed in, the length of the string (in 2-byte code units) is returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Number of 2-byte code units copied into the buffer, excluding\nthe null terminator.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the UTF16-encoded string corresponding the value passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_string_utf16(napi_env env,\n                                        napi_value value,\n                                        char16_t* buf,\n                                        size_t bufsize,\n                                        size_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript string.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] buf: Buffer to write the UTF16-LE-encoded string into. If NULL is\npassed in, the length of the string (in 2-byte code units) is returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] bufsize: Size of the destination buffer. When this value is\ninsufficient, the returned string will be truncated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Number of 2-byte code units copied into the buffer, excluding\nthe null terminator.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-String napi_value\nis passed in it returns napi_string_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the UTF16-encoded string corresponding the value passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_string_utf16" }, @@ -1645,7 +1726,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_uint32(napi_env env,\n                                  napi_value value,\n                                  uint32_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C primitive equivalent of the given napi_value as a\nuint32_t.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in it returns napi_number_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C primitive equivalent of the given napi_value as a\nuint32_t.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_value_uint32(napi_env env,\n                                  napi_value value,\n                                  uint32_t* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: napi_value representing JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: C primitive equivalent of the given napi_value as a\nuint32_t.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-number napi_value\nis passed in it returns napi_number_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the C primitive equivalent of the given napi_value as a\nuint32_t.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_value_uint32" } @@ -1669,7 +1750,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The value of the boolean to retrieve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing JavaScript Boolean singleton to\nretrieve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to return the JavaScript singleton object that is used to\nrepresent the given boolean value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_boolean(napi_env env, bool value, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The value of the boolean to retrieve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing JavaScript Boolean singleton to\nretrieve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to return the JavaScript singleton object that is used to\nrepresent the given boolean value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_boolean" }, @@ -1685,7 +1766,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_global(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing JavaScript global object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the global object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_global(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing JavaScript global object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the global object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_global" }, @@ -1701,7 +1782,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_null(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing JavaScript null object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the null object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_null(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing JavaScript null object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the null object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_null" }, @@ -1717,7 +1798,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_undefined(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing JavaScript Undefined value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the Undefined object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_undefined(napi_env env, napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing JavaScript Undefined value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the Undefined object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_undefined" } @@ -1727,10 +1808,10 @@ } ], "type": "misc", - "displayName": "Working with JavaScript Values" + "displayName": "Working with JavaScript values" }, { - "textRaw": "Working with JavaScript Values and Abstract Operations", + "textRaw": "Working with JavaScript values and abstract operations", "name": "working_with_javascript_values_and_abstract_operations", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API exposes a set of APIs to perform some abstract operations on JavaScript\nvalues. Some of these operations are documented under Section 7\nof the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                These APIs support doing one of the following:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. Coerce JavaScript values to specific JavaScript types (such as Number or\nString).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. Check the type of a JavaScript value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. Check for equality between two JavaScript values.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -1746,7 +1827,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_coerce_to_bool(napi_env env,\n                                napi_value value,\n                                napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the coerced JavaScript Boolean.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API implements the abstract operation ToBoolean() as defined in\nSection 7.1.2 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_coerce_to_bool(napi_env env,\n                                napi_value value,\n                                napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the coerced JavaScript Boolean.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API implements the abstract operation ToBoolean() as defined in\nSection 7.1.2 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_coerce_to_bool" }, @@ -1762,7 +1843,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_coerce_to_number(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the coerced JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API implements the abstract operation ToNumber() as defined in\nSection 7.1.3 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_coerce_to_number(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the coerced JavaScript Number.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API implements the abstract operation ToNumber() as defined in\nSection 7.1.3 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_coerce_to_number" }, @@ -1778,7 +1859,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_coerce_to_object(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the coerced JavaScript Object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API implements the abstract operation ToObject() as defined in\nSection 7.1.13 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_coerce_to_object(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the coerced JavaScript Object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API implements the abstract operation ToObject() as defined in\nSection 7.1.13 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_coerce_to_object" }, @@ -1794,7 +1875,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_coerce_to_string(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the coerced JavaScript String.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API implements the abstract operation ToString() as defined in\nSection 7.1.13 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_coerce_to_string(napi_env env,\n                                  napi_value value,\n                                  napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to coerce.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the coerced JavaScript String.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API implements the abstract operation ToString() as defined in\nSection 7.1.13 of the ECMAScript Language Specification.\nThis API can be re-entrant if getters are defined on the passed-in Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_coerce_to_string" }, @@ -1810,7 +1891,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value whose type to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The type of the JavaScript value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_invalid_arg if the type of value is not a known ECMAScript type and\nvalue is not an External value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents behavior similar to invoking the typeof Operator on\nthe object as defined in Section 12.5.5 of the ECMAScript Language\nSpecification. However, it has support for detecting an External value.\nIf value has a type that is invalid, an error is returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value whose type to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The type of the JavaScript value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_invalid_arg if the type of value is not a known ECMAScript type and\nvalue is not an External value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents behavior similar to invoking the typeof Operator on\nthe object as defined in Section 12.5.5 of the ECMAScript Language\nSpecification. However, there are some differences:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. It has support for detecting an External value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. It detects null as a separate type, while ECMAScript typeof would detect\nobject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If value has a type that is invalid, an error is returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_typeof" }, @@ -1826,7 +1907,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_instanceof(napi_env env,\n                            napi_value object,\n                            napi_value constructor,\n                            bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] constructor: The JavaScript function object of the constructor function\nto check against.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Boolean that is set to true if object instanceof constructor\nis true.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents invoking the instanceof Operator on the object as\ndefined in Section 12.10.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_instanceof(napi_env env,\n                            napi_value object,\n                            napi_value constructor,\n                            bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] constructor: The JavaScript function object of the constructor function\nto check against.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Boolean that is set to true if object instanceof constructor\nis true.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents invoking the instanceof Operator on the object as\ndefined in Section 12.10.4 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_instanceof" }, @@ -1842,7 +1923,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_array(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given object is an array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents invoking the IsArray operation on the object\nas defined in Section 7.2.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_array(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given object is an array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents invoking the IsArray operation on the object\nas defined in Section 7.2.2 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_array" }, @@ -1858,7 +1939,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given object is an ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is an array buffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given object is an ArrayBuffer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is an array buffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_arraybuffer" }, @@ -1874,7 +1955,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_buffer(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents a node::Buffer\nobject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is a buffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_buffer(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents a node::Buffer\nobject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is a buffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_buffer" }, @@ -1890,7 +1971,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_date(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents a JavaScript Date\nobject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is a date.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_date(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents a JavaScript Date\nobject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is a date.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_date" }, @@ -1906,7 +1987,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_error(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents an Error object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is an Error.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_error(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents an Error object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is an Error.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_error" }, @@ -1922,7 +2003,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents a TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is a typed array.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents a TypedArray.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is a typed array.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_typedarray" }, @@ -1938,7 +2019,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_dataview(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents a DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is a DataView.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_dataview(napi_env env, napi_value value, bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the given napi_value represents a DataView.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in is a DataView.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_dataview" }, @@ -1954,7 +2035,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_strict_equals(napi_env env,\n                               napi_value lhs,\n                               napi_value rhs,\n                               bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] lhs: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] rhs: The JavaScript value to check against.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the two napi_value objects are equal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents the invocation of the Strict Equality algorithm as\ndefined in Section 7.2.14 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_strict_equals(napi_env env,\n                               napi_value lhs,\n                               napi_value rhs,\n                               bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] lhs: The JavaScript value to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] rhs: The JavaScript value to check against.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the two napi_value objects are equal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents the invocation of the Strict Equality algorithm as\ndefined in Section 7.2.14 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_strict_equals" }, @@ -1965,11 +2046,12 @@ "added": [ "v12.16.0" ], + "napiVersion": [ + 7 + ], "changes": [] }, - "stability": 1, - "stabilityText": "Experimental", - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_detach_arraybuffer(napi_env env,\n                                    napi_value arraybuffer)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: The JavaScript ArrayBuffer to be detached.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-detachable ArrayBuffer is\npassed in it returns napi_detachable_arraybuffer_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Generally, an ArrayBuffer is non-detachable if it has been detached before.\nThe engine may impose additional conditions on whether an ArrayBuffer is\ndetachable. For example, V8 requires that the ArrayBuffer be external,\nthat is, created with napi_create_external_arraybuffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents the invocation of the ArrayBuffer detach operation as\ndefined in Section 24.1.1.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_detach_arraybuffer(napi_env env,\n                                    napi_value arraybuffer)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: The JavaScript ArrayBuffer to be detached.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded. If a non-detachable ArrayBuffer is\npassed in it returns napi_detachable_arraybuffer_expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Generally, an ArrayBuffer is non-detachable if it has been detached before.\nThe engine may impose additional conditions on whether an ArrayBuffer is\ndetachable. For example, V8 requires that the ArrayBuffer be external,\nthat is, created with napi_create_external_arraybuffer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents the invocation of the ArrayBuffer detach operation as\ndefined in Section 24.1.1.3 of the ECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_detach_arraybuffer" }, @@ -1980,22 +2062,23 @@ "added": [ "v12.16.0" ], + "napiVersion": [ + 7 + ], "changes": [] }, - "stability": 1, - "stabilityText": "Experimental", - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_detached_arraybuffer(napi_env env,\n                                         napi_value arraybuffer,\n                                         bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: The JavaScript ArrayBuffer to be checked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the arraybuffer is detached.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The ArrayBuffer is considered detached if its internal data is null.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents the invocation of the ArrayBuffer IsDetachedBuffer\noperation as defined in Section 24.1.1.2 of the ECMAScript Language\nSpecification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_detached_arraybuffer(napi_env env,\n                                         napi_value arraybuffer,\n                                         bool* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] arraybuffer: The JavaScript ArrayBuffer to be checked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the arraybuffer is detached.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The ArrayBuffer is considered detached if its internal data is null.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API represents the invocation of the ArrayBuffer IsDetachedBuffer\noperation as defined in Section 24.1.1.2 of the ECMAScript Language\nSpecification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_detached_arraybuffer" } ], "type": "misc", - "displayName": "Working with JavaScript Values and Abstract Operations" + "displayName": "Working with JavaScript values and abstract operations" }, { - "textRaw": "Working with JavaScript Properties", + "textRaw": "Working with JavaScript properties", "name": "working_with_javascript_properties", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API exposes a set of APIs to get and set properties on JavaScript\nobjects. Some of these types are documented under Section 7 of the\nECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Properties in JavaScript are represented as a tuple of a key and a value.\nFundamentally, all property keys in N-API can be represented in one of the\nfollowing forms:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Named: a simple UTF8-encoded string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Integer-Indexed: an index value represented by uint32_t
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • JavaScript value: these are represented in N-API by napi_value. This can\nbe a napi_value representing a String, Number, or Symbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API values are represented by the type napi_value.\nAny N-API call that requires a JavaScript value takes in a napi_value.\nHowever, it's the caller's responsibility to make sure that the\nnapi_value in question is of the JavaScript type expected by the API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The APIs documented in this section provide a simple interface to\nget and set properties on arbitrary JavaScript objects represented by\nnapi_value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For instance, consider the following JavaScript code snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const obj = {};\nobj.myProp = 123;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status = napi_generic_failure;\n\n// const obj = {}\nnapi_value obj, value;\nstatus = napi_create_object(env, &obj);\nif (status != napi_ok) return status;\n\n// Create a napi_value for 123\nstatus = napi_create_int32(env, 123, &value);\nif (status != napi_ok) return status;\n\n// obj.myProp = 123\nstatus = napi_set_named_property(env, obj, \"myProp\", value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Indexed properties can be set in a similar manner. Consider the following\nJavaScript snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const arr = [];\narr[123] = 'hello';\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status = napi_generic_failure;\n\n// const arr = [];\nnapi_value arr, value;\nstatus = napi_create_array(env, &arr);\nif (status != napi_ok) return status;\n\n// Create a napi_value for 'hello'\nstatus = napi_create_string_utf8(env, \"hello\", NAPI_AUTO_LENGTH, &value);\nif (status != napi_ok) return status;\n\n// arr[123] = 'hello';\nstatus = napi_set_element(env, arr, 123, value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Properties can be retrieved using the APIs described in this section.\nConsider the following JavaScript snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const arr = [];\nconst value = arr[123];\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status = napi_generic_failure;\n\n// const arr = []\nnapi_value arr, value;\nstatus = napi_create_array(env, &arr);\nif (status != napi_ok) return status;\n\n// const value = arr[123]\nstatus = napi_get_element(env, arr, 123, &value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Finally, multiple properties can also be defined on an object for performance\nreasons. Consider the following JavaScript:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const obj = {};\nObject.defineProperties(obj, {\n  'foo': { value: 123, writable: true, configurable: true, enumerable: true },\n  'bar': { value: 456, writable: true, configurable: true, enumerable: true }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status = napi_status_generic_failure;\n\n// const obj = {};\nnapi_value obj;\nstatus = napi_create_object(env, &obj);\nif (status != napi_ok) return status;\n\n// Create napi_values for 123 and 456\nnapi_value fooValue, barValue;\nstatus = napi_create_int32(env, 123, &fooValue);\nif (status != napi_ok) return status;\nstatus = napi_create_int32(env, 456, &barValue);\nif (status != napi_ok) return status;\n\n// Set the properties\nnapi_property_descriptor descriptors[] = {\n  { \"foo\", NULL, NULL, NULL, NULL, fooValue, napi_default, NULL },\n  { \"bar\", NULL, NULL, NULL, NULL, barValue, napi_default, NULL }\n}\nstatus = napi_define_properties(env,\n                                obj,\n                                sizeof(descriptors) / sizeof(descriptors[0]),\n                                descriptors);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API exposes a set of APIs to get and set properties on JavaScript\nobjects. Some of these types are documented under Section 7 of the\nECMAScript Language Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Properties in JavaScript are represented as a tuple of a key and a value.\nFundamentally, all property keys in N-API can be represented in one of the\nfollowing forms:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Named: a simple UTF8-encoded string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Integer-Indexed: an index value represented by uint32_t
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • JavaScript value: these are represented in N-API by napi_value. This can\nbe a napi_value representing a String, Number, or Symbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API values are represented by the type napi_value.\nAny N-API call that requires a JavaScript value takes in a napi_value.\nHowever, it's the caller's responsibility to make sure that the\nnapi_value in question is of the JavaScript type expected by the API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The APIs documented in this section provide a simple interface to\nget and set properties on arbitrary JavaScript objects represented by\nnapi_value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For instance, consider the following JavaScript code snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const obj = {};\nobj.myProp = 123;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status = napi_generic_failure;\n\n// const obj = {}\nnapi_value obj, value;\nstatus = napi_create_object(env, &obj);\nif (status != napi_ok) return status;\n\n// Create a napi_value for 123\nstatus = napi_create_int32(env, 123, &value);\nif (status != napi_ok) return status;\n\n// obj.myProp = 123\nstatus = napi_set_named_property(env, obj, \"myProp\", value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Indexed properties can be set in a similar manner. Consider the following\nJavaScript snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const arr = [];\narr[123] = 'hello';\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The equivalent can be done using N-API values with the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status = napi_generic_failure;\n\n// const arr = [];\nnapi_value arr, value;\nstatus = napi_create_array(env, &arr);\nif (status != napi_ok) return status;\n\n// Create a napi_value for 'hello'\nstatus = napi_create_string_utf8(env, \"hello\", NAPI_AUTO_LENGTH, &value);\nif (status != napi_ok) return status;\n\n// arr[123] = 'hello';\nstatus = napi_set_element(env, arr, 123, value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Properties can be retrieved using the APIs described in this section.\nConsider the following JavaScript snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const arr = [];\nconst value = arr[123];\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status = napi_generic_failure;\n\n// const arr = []\nnapi_value arr, value;\nstatus = napi_create_array(env, &arr);\nif (status != napi_ok) return status;\n\n// const value = arr[123]\nstatus = napi_get_element(env, arr, 123, &value);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Finally, multiple properties can also be defined on an object for performance\nreasons. Consider the following JavaScript:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const obj = {};\nObject.defineProperties(obj, {\n  'foo': { value: 123, writable: true, configurable: true, enumerable: true },\n  'bar': { value: 456, writable: true, configurable: true, enumerable: true }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The following is the approximate equivalent of the N-API counterpart:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status status = napi_status_generic_failure;\n\n// const obj = {};\nnapi_value obj;\nstatus = napi_create_object(env, &obj);\nif (status != napi_ok) return status;\n\n// Create napi_values for 123 and 456\nnapi_value fooValue, barValue;\nstatus = napi_create_int32(env, 123, &fooValue);\nif (status != napi_ok) return status;\nstatus = napi_create_int32(env, 456, &barValue);\nif (status != napi_ok) return status;\n\n// Set the properties\nnapi_property_descriptor descriptors[] = {\n  { \"foo\", NULL, NULL, NULL, NULL, fooValue, napi_writable | napi_configurable, NULL },\n  { \"bar\", NULL, NULL, NULL, NULL, barValue, napi_writable | napi_configurable, NULL }\n}\nstatus = napi_define_properties(env,\n                                obj,\n                                sizeof(descriptors) / sizeof(descriptors[0]),\n                                descriptors);\nif (status != napi_ok) return status;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "Structures", @@ -2004,14 +2087,23 @@ { "textRaw": "napi_property_attributes", "name": "napi_property_attributes", - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_default = 0,\n  napi_writable = 1 << 0,\n  napi_enumerable = 1 << 1,\n  napi_configurable = 1 << 2,\n\n  // Used with napi_define_class to distinguish static properties\n  // from instance properties. Ignored by napi_define_properties.\n  napi_static = 1 << 10,\n} napi_property_attributes;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_property_attributes are flags used to control the behavior of properties\nset on a JavaScript object. Other than napi_static they correspond to the\nattributes listed in Section 6.1.7.1\nof the ECMAScript Language Specification.\nThey can be one or more of the following bitflags:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_default: No explicit attributes are set on the property. By default, a\nproperty is read only, not enumerable and not configurable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_writable: The property is writable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_enumerable: The property is enumerable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_configurable: The property is configurable as defined in\nSection 6.1.7.1 of the ECMAScript Language Specification.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_static: The property will be defined as a static property on a class as\nopposed to an instance property, which is the default. This is used only by\nnapi_define_class. It is ignored by napi_define_properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "meta": { + "changes": [ + { + "version": "v12.20.0", + "pr-url": "https://github.com/nodejs/node/pull/35214", + "description": "added `napi_default_method` and `napi_default_property`" + } + ] + }, + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef enum {\n  napi_default = 0,\n  napi_writable = 1 << 0,\n  napi_enumerable = 1 << 1,\n  napi_configurable = 1 << 2,\n\n  // Used with napi_define_class to distinguish static properties\n  // from instance properties. Ignored by napi_define_properties.\n  napi_static = 1 << 10,\n\n  // Default for class methods.\n  napi_default_method = napi_writable | napi_configurable,\n\n  // Default for object properties, like in JS obj[prop].\n  napi_default_property = napi_writable |\n                          napi_enumerable |\n                          napi_configurable,\n} napi_property_attributes;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_property_attributes are flags used to control the behavior of properties\nset on a JavaScript object. Other than napi_static they correspond to the\nattributes listed in Section 6.1.7.1\nof the ECMAScript Language Specification.\nThey can be one or more of the following bitflags:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_default: No explicit attributes are set on the property. By default, a\nproperty is read only, not enumerable and not configurable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_writable: The property is writable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_enumerable: The property is enumerable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_configurable: The property is configurable as defined in\nSection 6.1.7.1 of the ECMAScript Language Specification.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_static: The property will be defined as a static property on a class as\nopposed to an instance property, which is the default. This is used only by\nnapi_define_class. It is ignored by napi_define_properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_default_method: The property is configureable, writeable but not\nenumerable like a method in a JS class.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • napi_default_property: The property is writable, enumerable and configurable\nlike a property set via JS code obj.key = value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_property_attributes" }, { "textRaw": "napi_property_descriptor", "name": "napi_property_descriptor", - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct {\n  // One of utf8name or name should be NULL.\n  const char* utf8name;\n  napi_value name;\n\n  napi_callback method;\n  napi_callback getter;\n  napi_callback setter;\n  napi_value value;\n\n  napi_property_attributes attributes;\n  void* data;\n} napi_property_descriptor;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • utf8name: Optional String describing the key for the property,\nencoded as UTF8. One of utf8name or name must be provided for the\nproperty.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • name: Optional napi_value that points to a JavaScript string or symbol\nto be used as the key for the property. One of utf8name or name must\nbe provided for the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • value: The value that's retrieved by a get access of the property if the\nproperty is a data property. If this is passed in, set getter, setter,\nmethod and data to NULL (since these members won't be used).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • getter: A function to call when a get access of the property is performed.\nIf this is passed in, set value and method to NULL (since these members\nwon't be used). The given function is called implicitly by the runtime when\nthe property is accessed from JavaScript code (or if a get on the property is\nperformed using a N-API call).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • setter: A function to call when a set access of the property is performed.\nIf this is passed in, set value and method to NULL (since these members\nwon't be used). The given function is called implicitly by the runtime when\nthe property is set from JavaScript code (or if a set on the property is\nperformed using a N-API call).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • method: Set this to make the property descriptor object's value\nproperty to be a JavaScript function represented by method. If this is\npassed in, set value, getter and setter to NULL (since these members\nwon't be used).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • attributes: The attributes associated with the particular property. See\nnapi_property_attributes.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • data: The callback data passed into method, getter and setter if this\nfunction is invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct {\n  // One of utf8name or name should be NULL.\n  const char* utf8name;\n  napi_value name;\n\n  napi_callback method;\n  napi_callback getter;\n  napi_callback setter;\n  napi_value value;\n\n  napi_property_attributes attributes;\n  void* data;\n} napi_property_descriptor;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • utf8name: Optional String describing the key for the property,\nencoded as UTF8. One of utf8name or name must be provided for the\nproperty.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • name: Optional napi_value that points to a JavaScript string or symbol\nto be used as the key for the property. One of utf8name or name must\nbe provided for the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • value: The value that's retrieved by a get access of the property if the\nproperty is a data property. If this is passed in, set getter, setter,\nmethod and data to NULL (since these members won't be used).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • getter: A function to call when a get access of the property is performed.\nIf this is passed in, set value and method to NULL (since these members\nwon't be used). The given function is called implicitly by the runtime when\nthe property is accessed from JavaScript code (or if a get on the property is\nperformed using a N-API call). napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • setter: A function to call when a set access of the property is performed.\nIf this is passed in, set value and method to NULL (since these members\nwon't be used). The given function is called implicitly by the runtime when\nthe property is set from JavaScript code (or if a set on the property is\nperformed using a N-API call). napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • method: Set this to make the property descriptor object's value\nproperty to be a JavaScript function represented by method. If this is\npassed in, set value, getter and setter to NULL (since these members\nwon't be used). napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • attributes: The attributes associated with the particular property. See\nnapi_property_attributes.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • data: The callback data passed into method, getter and setter if this\nfunction is invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_property_descriptor" } @@ -2035,7 +2127,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_property_names(napi_env env,\n                                    napi_value object,\n                                    napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing an array of JavaScript values\nthat represent the property names of the object. The API can be used to\niterate over result using napi_get_array_length\nand napi_get_element.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the names of the enumerable properties of object as an array\nof strings. The properties of object whose key is a symbol will not be\nincluded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_property_names(napi_env env,\n                                    napi_value object,\n                                    napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing an array of JavaScript values\nthat represent the property names of the object. The API can be used to\niterate over result using napi_get_array_length\nand napi_get_element.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the names of the enumerable properties of object as an array\nof strings. The properties of object whose key is a symbol will not be\nincluded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_property_names" }, @@ -2051,7 +2143,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_get_all_property_names(napi_env env,\n                            napi_value object,\n                            napi_key_collection_mode key_mode,\n                            napi_key_filter key_filter,\n                            napi_key_conversion key_conversion,\n                            napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key_mode: Whether to retrieve prototype properties as well.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key_filter: Which properties to retrieve\n(enumerable/readable/writable).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key_conversion: Whether to convert numbered property keys to strings.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing an array of JavaScript values\nthat represent the property names of the object. napi_get_array_length and\nnapi_get_element can be used to iterate over result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an array containing the names of the available properties\nof this object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_get_all_property_names(napi_env env,\n                            napi_value object,\n                            napi_key_collection_mode key_mode,\n                            napi_key_filter key_filter,\n                            napi_key_conversion key_conversion,\n                            napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key_mode: Whether to retrieve prototype properties as well.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key_filter: Which properties to retrieve\n(enumerable/readable/writable).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key_conversion: Whether to convert numbered property keys to strings.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing an array of JavaScript values\nthat represent the property names of the object. napi_get_array_length and\nnapi_get_element can be used to iterate over result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns an array containing the names of the available properties\nof this object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_all_property_names" }, @@ -2067,7 +2159,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_set_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              napi_value value);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the property to set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The property value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API set a property on the Object passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_set_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              napi_value value);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the property to set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The property value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API set a property on the Object passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_set_property" }, @@ -2083,7 +2175,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the property to retrieve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The value of the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API gets the requested property from the Object passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the property to retrieve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The value of the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API gets the requested property from the Object passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_property" }, @@ -2099,7 +2191,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_has_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the property whose existence to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in has the named property.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_has_property(napi_env env,\n                              napi_value object,\n                              napi_value key,\n                              bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the property whose existence to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in has the named property.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_has_property" }, @@ -2115,7 +2207,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_property(napi_env env,\n                                 napi_value object,\n                                 napi_value key,\n                                 bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the property to delete.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the property deletion succeeded or not. result can\noptionally be ignored by passing NULL.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API attempts to delete the key own property from object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_property(napi_env env,\n                                 napi_value object,\n                                 napi_value key,\n                                 bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the property to delete.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the property deletion succeeded or not. result can\noptionally be ignored by passing NULL.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API attempts to delete the key own property from object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_delete_property" }, @@ -2131,7 +2223,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_has_own_property(napi_env env,\n                                  napi_value object,\n                                  napi_value key,\n                                  bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the own property whose existence to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the own property exists on the object or not.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in has the named own property. key must\nbe a string or a Symbol, or an error will be thrown. N-API will not perform\nany conversion between data types.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_has_own_property(napi_env env,\n                                  napi_value object,\n                                  napi_value key,\n                                  bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] key: The name of the own property whose existence to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the own property exists on the object or not.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API checks if the Object passed in has the named own property. key must\nbe a string or a Symbol, or an error will be thrown. N-API will not perform\nany conversion between data types.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_has_own_property" }, @@ -2147,7 +2239,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_set_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    napi_value value);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8Name: The name of the property to set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The property value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is equivalent to calling napi_set_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_set_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    napi_value value);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object on which to set the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8Name: The name of the property to set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The property value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is equivalent to calling napi_set_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_set_named_property" }, @@ -2163,7 +2255,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8Name: The name of the property to get.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The value of the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is equivalent to calling napi_get_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8Name: The name of the property to get.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The value of the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is equivalent to calling napi_get_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_named_property" }, @@ -2179,7 +2271,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_has_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8Name: The name of the property whose existence to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is equivalent to calling napi_has_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_has_named_property(napi_env env,\n                                    napi_value object,\n                                    const char* utf8Name,\n                                    bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8Name: The name of the property whose existence to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is equivalent to calling napi_has_property with a napi_value\ncreated from the string passed in as utf8Name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_has_named_property" }, @@ -2195,7 +2287,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_set_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             napi_value value);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to set the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] index: The index of the property to set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The property value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API sets and element on the Object passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_set_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             napi_value value);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to set the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] index: The index of the property to set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The property value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API sets and element on the Object passed in.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_set_element" }, @@ -2211,7 +2303,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] index: The index of the property to get.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The value of the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API gets the element at the requested index.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] index: The index of the property to get.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The value of the property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API gets the element at the requested index.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_element" }, @@ -2227,7 +2319,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_has_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] index: The index of the property whose existence to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns if the Object passed in has an element at the\nrequested index.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_has_element(napi_env env,\n                             napi_value object,\n                             uint32_t index,\n                             bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] index: The index of the property whose existence to check.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the property exists on the object or not.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns if the Object passed in has an element at the\nrequested index.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_has_element" }, @@ -2243,7 +2335,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_element(napi_env env,\n                                napi_value object,\n                                uint32_t index,\n                                bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] index: The index of the property to delete.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the element deletion succeeded or not. result can\noptionally be ignored by passing NULL.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API attempts to delete the specified index from object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_element(napi_env env,\n                                napi_value object,\n                                uint32_t index,\n                                bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] index: The index of the property to delete.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the element deletion succeeded or not. result can\noptionally be ignored by passing NULL.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API attempts to delete the specified index from object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_delete_element" }, @@ -2259,9 +2351,41 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_define_properties(napi_env env,\n                                   napi_value object,\n                                   size_t property_count,\n                                   const napi_property_descriptor* properties);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] property_count: The number of elements in the properties array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] properties: The array of property descriptors.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method allows the efficient definition of multiple properties on a given\nobject. The properties are defined using property descriptors (see\nnapi_property_descriptor). Given an array of such property descriptors,\nthis API will set the properties on the object one at a time, as defined by\nDefineOwnProperty() (described in Section 9.1.6 of the ECMA-262\nspecification).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_define_properties(napi_env env,\n                                   napi_value object,\n                                   size_t property_count,\n                                   const napi_property_descriptor* properties);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object from which to retrieve the properties.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] property_count: The number of elements in the properties array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] properties: The array of property descriptors.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method allows the efficient definition of multiple properties on a given\nobject. The properties are defined using property descriptors (see\nnapi_property_descriptor). Given an array of such property descriptors,\nthis API will set the properties on the object one at a time, as defined by\nDefineOwnProperty() (described in Section 9.1.6 of the ECMA-262\nspecification).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_define_properties" + }, + { + "textRaw": "napi_object_freeze", + "name": "napi_object_freeze", + "meta": { + "added": [ + "v12.20.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_object_freeze(napi_env env,\n                               napi_value object);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to freeze.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method freezes a given object. This prevents new properties from\nbeing added to it, existing properties from being removed, prevents\nchanging the enumerability, configurability, or writability of existing\nproperties, and prevents the values of existing properties from being changed.\nIt also prevents the object's prototype from being changed. This is described\nin Section 19.1.2.6 of the\nECMA-262 specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_object_freeze" + }, + { + "textRaw": "napi_object_seal", + "name": "napi_object_seal", + "meta": { + "added": [ + "v12.20.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_object_seal(napi_env env,\n                             napi_value object);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the N-API call is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] object: The object to seal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method seals a given object. This prevents new properties from being\nadded to it, as well as marking all existing properties as non-configurable.\nThis is described in Section 19.1.2.20\nof the ECMA-262 specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_object_seal" } ], "type": "module", @@ -2269,10 +2393,10 @@ } ], "type": "misc", - "displayName": "Working with JavaScript Properties" + "displayName": "Working with JavaScript properties" }, { - "textRaw": "Working with JavaScript Functions", + "textRaw": "Working with JavaScript functions", "name": "working_with_javascript_functions", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API provides a set of APIs that allow JavaScript code to\ncall back into native code. N-API APIs that support calling back\ninto native code take in a callback functions represented by\nthe napi_callback type. When the JavaScript VM calls back to\nnative code, the napi_callback function provided is invoked. The APIs\ndocumented in this section allow the callback function to do the\nfollowing:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Get information about the context in which the callback was invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Get the arguments passed into the callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Return a napi_value back from the callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Additionally, N-API provides a set of functions which allow calling\nJavaScript functions from native code. One can either call a function\nlike a regular JavaScript function call, or as a constructor\nfunction.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Any non-NULL data which is passed to this API via the data field of the\nnapi_property_descriptor items can be associated with object and freed\nwhenever object is garbage-collected by passing both object and the data to\nnapi_add_finalizer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -2288,7 +2412,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_call_function(napi_env env,\n                                           napi_value recv,\n                                           napi_value func,\n                                           size_t argc,\n                                           const napi_value* argv,\n                                           napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: napi_value representing the JavaScript function to be invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argv: Array of napi_values representing JavaScript values passed in\nas arguments to the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the JavaScript object returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method allows a JavaScript function object to be called from a native\nadd-on. This is the primary mechanism of calling back from the add-on's\nnative code into JavaScript. For the special case of calling into JavaScript\nafter an async operation, see napi_make_callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A sample use case might look as follows. Consider the following JavaScript\nsnippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                function AddTwo(num) {\n  return num + 2;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Then, the above function can be invoked from a native add-on using the\nfollowing code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // Get the function named \"AddTwo\" on the global object\nnapi_value global, add_two, arg;\nnapi_status status = napi_get_global(env, &global);\nif (status != napi_ok) return;\n\nstatus = napi_get_named_property(env, global, \"AddTwo\", &add_two);\nif (status != napi_ok) return;\n\n// const arg = 1337\nstatus = napi_create_int32(env, 1337, &arg);\nif (status != napi_ok) return;\n\nnapi_value* argv = &arg;\nsize_t argc = 1;\n\n// AddTwo(arg);\nnapi_value return_val;\nstatus = napi_call_function(env, global, add_two, argc, argv, &return_val);\nif (status != napi_ok) return;\n\n// Convert the result back to a native type\nint32_t result;\nstatus = napi_get_value_int32(env, return_val, &result);\nif (status != napi_ok) return;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_call_function(napi_env env,\n                                           napi_value recv,\n                                           napi_value func,\n                                           size_t argc,\n                                           const napi_value* argv,\n                                           napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: napi_value representing the JavaScript function to be invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argv: Array of napi_values representing JavaScript values passed in\nas arguments to the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the JavaScript object returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method allows a JavaScript function object to be called from a native\nadd-on. This is the primary mechanism of calling back from the add-on's\nnative code into JavaScript. For the special case of calling into JavaScript\nafter an async operation, see napi_make_callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A sample use case might look as follows. Consider the following JavaScript\nsnippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                function AddTwo(num) {\n  return num + 2;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Then, the above function can be invoked from a native add-on using the\nfollowing code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // Get the function named \"AddTwo\" on the global object\nnapi_value global, add_two, arg;\nnapi_status status = napi_get_global(env, &global);\nif (status != napi_ok) return;\n\nstatus = napi_get_named_property(env, global, \"AddTwo\", &add_two);\nif (status != napi_ok) return;\n\n// const arg = 1337\nstatus = napi_create_int32(env, 1337, &arg);\nif (status != napi_ok) return;\n\nnapi_value* argv = &arg;\nsize_t argc = 1;\n\n// AddTwo(arg);\nnapi_value return_val;\nstatus = napi_call_function(env, global, add_two, argc, argv, &return_val);\nif (status != napi_ok) return;\n\n// Convert the result back to a native type\nint32_t result;\nstatus = napi_get_value_int32(env, return_val, &result);\nif (status != napi_ok) return;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_call_function" }, @@ -2304,7 +2428,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_function(napi_env env,\n                                 const char* utf8name,\n                                 size_t length,\n                                 napi_callback cb,\n                                 void* data,\n                                 napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8Name: The name of the function encoded as UTF8. This is visible\nwithin JavaScript as the new function object's name property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH if\nit is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] cb: The native function which should be called when this function\nobject is invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: User-provided data context. This will be passed back into the\nfunction when invoked later.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the JavaScript function object for\nthe newly created function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allows an add-on author to create a function object in native code.\nThis is the primary mechanism to allow calling into the add-on's native code\nfrom JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The newly created function is not automatically visible from script after this\ncall. Instead, a property must be explicitly set on any object that is visible\nto JavaScript, in order for the function to be accessible from script.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In order to expose a function as part of the\nadd-on's module exports, set the newly created function on the exports\nobject. A sample module might look as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value SayHello(napi_env env, napi_callback_info info) {\n  printf(\"Hello\\n\");\n  return NULL;\n}\n\nnapi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n\n  napi_value fn;\n  status = napi_create_function(env, NULL, 0, SayHello, NULL, &fn);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"sayHello\", fn);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n\nNAPI_MODULE(NODE_GYP_MODULE_NAME, Init)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Given the above code, the add-on can be used from JavaScript as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myaddon = require('./addon');\nmyaddon.sayHello();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The string passed to require() is the name of the target in binding.gyp\nresponsible for creating the .node file.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Any non-NULL data which is passed to this API via the data parameter can\nbe associated with the resulting JavaScript function (which is returned in the\nresult parameter) and freed whenever the function is garbage-collected by\npassing both the JavaScript function and the data to napi_add_finalizer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript Functions are described in Section 19.2 of the ECMAScript\nLanguage Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_function(napi_env env,\n                                 const char* utf8name,\n                                 size_t length,\n                                 napi_callback cb,\n                                 void* data,\n                                 napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8Name: The name of the function encoded as UTF8. This is visible\nwithin JavaScript as the new function object's name property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH if\nit is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] cb: The native function which should be called when this function\nobject is invoked. napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: User-provided data context. This will be passed back into the\nfunction when invoked later.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the JavaScript function object for\nthe newly created function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allows an add-on author to create a function object in native code.\nThis is the primary mechanism to allow calling into the add-on's native code\nfrom JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The newly created function is not automatically visible from script after this\ncall. Instead, a property must be explicitly set on any object that is visible\nto JavaScript, in order for the function to be accessible from script.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In order to expose a function as part of the\nadd-on's module exports, set the newly created function on the exports\nobject. A sample module might look as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value SayHello(napi_env env, napi_callback_info info) {\n  printf(\"Hello\\n\");\n  return NULL;\n}\n\nnapi_value Init(napi_env env, napi_value exports) {\n  napi_status status;\n\n  napi_value fn;\n  status = napi_create_function(env, NULL, 0, SayHello, NULL, &fn);\n  if (status != napi_ok) return NULL;\n\n  status = napi_set_named_property(env, exports, \"sayHello\", fn);\n  if (status != napi_ok) return NULL;\n\n  return exports;\n}\n\nNAPI_MODULE(NODE_GYP_MODULE_NAME, Init)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Given the above code, the add-on can be used from JavaScript as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myaddon = require('./addon');\nmyaddon.sayHello();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The string passed to require() is the name of the target in binding.gyp\nresponsible for creating the .node file.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Any non-NULL data which is passed to this API via the data parameter can\nbe associated with the resulting JavaScript function (which is returned in the\nresult parameter) and freed whenever the function is garbage-collected by\npassing both the JavaScript function and the data to napi_add_finalizer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript Functions are described in Section 19.2 of the ECMAScript\nLanguage Specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_function" }, @@ -2320,7 +2444,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_cb_info(napi_env env,\n                             napi_callback_info cbinfo,\n                             size_t* argc,\n                             napi_value* argv,\n                             napi_value* thisArg,\n                             void** data)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in-out] argc: Specifies the size of the provided argv array and receives\nthe actual count of arguments.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] argv: Buffer to which the napi_value representing the arguments are\ncopied. If there are more arguments than the provided count, only the\nrequested number of arguments are copied. If there are fewer arguments\nprovided than claimed, the rest of argv is filled with napi_value values\nthat represent undefined.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] this: Receives the JavaScript this argument for the call.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: Receives the data pointer for the callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is used within a callback function to retrieve details about the\ncall like the arguments and the this pointer from a given callback info.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_cb_info(napi_env env,\n                             napi_callback_info cbinfo,\n                             size_t* argc,\n                             napi_value* argv,\n                             napi_value* thisArg,\n                             void** data)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in-out] argc: Specifies the size of the provided argv array and receives\nthe actual count of arguments.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] argv: Buffer to which the napi_value representing the arguments are\ncopied. If there are more arguments than the provided count, only the\nrequested number of arguments are copied. If there are fewer arguments\nprovided than claimed, the rest of argv is filled with napi_value values\nthat represent undefined.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] this: Receives the JavaScript this argument for the call.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] data: Receives the data pointer for the callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is used within a callback function to retrieve details about the\ncall like the arguments and the this pointer from a given callback info.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_cb_info" }, @@ -2336,7 +2460,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_new_target(napi_env env,\n                                napi_callback_info cbinfo,\n                                napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The new.target of the constructor call.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the new.target of the constructor call. If the current\ncallback is not a constructor call, the result is NULL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_new_target(napi_env env,\n                                napi_callback_info cbinfo,\n                                napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] cbinfo: The callback info passed into the callback function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The new.target of the constructor call.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the new.target of the constructor call. If the current\ncallback is not a constructor call, the result is NULL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_new_target" }, @@ -2352,18 +2476,18 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_new_instance(napi_env env,\n                              napi_value cons,\n                              size_t argc,\n                              napi_value* argv,\n                              napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] cons: napi_value representing the JavaScript function to be invoked\nas a constructor.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argv: Array of JavaScript values as napi_value representing the\narguments to the constructor.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the JavaScript object returned,\nwhich in this case is the constructed object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is used to instantiate a new JavaScript value using a given\nnapi_value that represents the constructor for the object. For example,\nconsider the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                function MyObject(param) {\n  this.param = param;\n}\n\nconst arg = 'hello';\nconst value = new MyObject(arg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The following can be approximated in N-API using the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // Get the constructor function MyObject\nnapi_value global, constructor, arg, value;\nnapi_status status = napi_get_global(env, &global);\nif (status != napi_ok) return;\n\nstatus = napi_get_named_property(env, global, \"MyObject\", &constructor);\nif (status != napi_ok) return;\n\n// const arg = \"hello\"\nstatus = napi_create_string_utf8(env, \"hello\", NAPI_AUTO_LENGTH, &arg);\nif (status != napi_ok) return;\n\nnapi_value* argv = &arg;\nsize_t argc = 1;\n\n// const value = new MyObject(arg)\nstatus = napi_new_instance(env, constructor, argc, argv, &value);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_new_instance(napi_env env,\n                              napi_value cons,\n                              size_t argc,\n                              napi_value* argv,\n                              napi_value* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] cons: napi_value representing the JavaScript function to be invoked\nas a constructor.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argv: Array of JavaScript values as napi_value representing the\narguments to the constructor.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the JavaScript object returned,\nwhich in this case is the constructed object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is used to instantiate a new JavaScript value using a given\nnapi_value that represents the constructor for the object. For example,\nconsider the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                function MyObject(param) {\n  this.param = param;\n}\n\nconst arg = 'hello';\nconst value = new MyObject(arg);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The following can be approximated in N-API using the following snippet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // Get the constructor function MyObject\nnapi_value global, constructor, arg, value;\nnapi_status status = napi_get_global(env, &global);\nif (status != napi_ok) return;\n\nstatus = napi_get_named_property(env, global, \"MyObject\", &constructor);\nif (status != napi_ok) return;\n\n// const arg = \"hello\"\nstatus = napi_create_string_utf8(env, \"hello\", NAPI_AUTO_LENGTH, &arg);\nif (status != napi_ok) return;\n\nnapi_value* argv = &arg;\nsize_t argc = 1;\n\n// const value = new MyObject(arg)\nstatus = napi_new_instance(env, constructor, argc, argv, &value);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_new_instance" } ], "type": "misc", - "displayName": "Working with JavaScript Functions" + "displayName": "Working with JavaScript functions" }, { - "textRaw": "Object Wrap", + "textRaw": "Object wrap", "name": "object_wrap", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API offers a way to \"wrap\" C++ classes and instances so that the class\nconstructor and methods can be called from JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. The napi_define_class API defines a JavaScript class with constructor,\nstatic properties and methods, and instance properties and methods that\ncorrespond to the C++ class.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. When JavaScript code invokes the constructor, the constructor callback\nuses napi_wrap to wrap a new C++ instance in a JavaScript object,\nthen returns the wrapper object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. When JavaScript code invokes a method or property accessor on the class,\nthe corresponding napi_callback C++ function is invoked. For an instance\ncallback, napi_unwrap obtains the C++ instance that is the target of\nthe call.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For wrapped objects it may be difficult to distinguish between a function\ncalled on a class prototype and a function called on an instance of a class.\nA common pattern used to address this problem is to save a persistent\nreference to the class constructor for later instanceof checks.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value MyClass_constructor = NULL;\nstatus = napi_get_reference_value(env, MyClass::es_constructor, &MyClass_constructor);\nassert(napi_ok == status);\nbool is_instance = false;\nstatus = napi_instanceof(env, es_this, MyClass_constructor, &is_instance);\nassert(napi_ok == status);\nif (is_instance) {\n  // napi_unwrap() ...\n} else {\n  // otherwise...\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The reference must be freed once it is no longer needed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API offers a way to \"wrap\" C++ classes and instances so that the class\nconstructor and methods can be called from JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. The napi_define_class API defines a JavaScript class with constructor,\nstatic properties and methods, and instance properties and methods that\ncorrespond to the C++ class.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. When JavaScript code invokes the constructor, the constructor callback\nuses napi_wrap to wrap a new C++ instance in a JavaScript object,\nthen returns the wrapper object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. When JavaScript code invokes a method or property accessor on the class,\nthe corresponding napi_callback C++ function is invoked. For an instance\ncallback, napi_unwrap obtains the C++ instance that is the target of\nthe call.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For wrapped objects it may be difficult to distinguish between a function\ncalled on a class prototype and a function called on an instance of a class.\nA common pattern used to address this problem is to save a persistent\nreference to the class constructor for later instanceof checks.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_value MyClass_constructor = NULL;\nstatus = napi_get_reference_value(env, MyClass::es_constructor, &MyClass_constructor);\nassert(napi_ok == status);\nbool is_instance = false;\nstatus = napi_instanceof(env, es_this, MyClass_constructor, &is_instance);\nassert(napi_ok == status);\nif (is_instance) {\n  // napi_unwrap() ...\n} else {\n  // otherwise...\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The reference must be freed once it is no longer needed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                There are occasions where napi_instanceof() is insufficient for ensuring that\na JavaScript object is a wrapper for a certain native type. This is the case\nespecially when wrapped JavaScript objects are passed back into the addon via\nstatic methods rather than as the this value of prototype methods. In such\ncases there is a chance that they may be unwrapped incorrectly.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myAddon = require('./build/Release/my_addon.node');\n\n// `openDatabase()` returns a JavaScript object that wraps a native database\n// handle.\nconst dbHandle = myAddon.openDatabase();\n\n// `query()` returns a JavaScript object that wraps a native query handle.\nconst queryHandle = myAddon.query(dbHandle, 'Gimme ALL the things!');\n\n// There is an accidental error in the line below. The first parameter to\n// `myAddon.queryHasRecords()` should be the database handle (`dbHandle`), not\n// the query handle (`query`), so the correct condition for the while-loop\n// should be\n//\n// myAddon.queryHasRecords(dbHandle, queryHandle)\n//\nwhile (myAddon.queryHasRecords(queryHandle, dbHandle)) {\n  // retrieve records\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In the above example myAddon.queryHasRecords() is a method that accepts two\narguments. The first is a database handle and the second is a query handle.\nInternally, it unwraps the first argument and casts the resulting pointer to a\nnative database handle. It then unwraps the second argument and casts the\nresulting pointer to a query handle. If the arguments are passed in the wrong\norder, the casts will work, however, there is a good chance that the underlying\ndatabase operation will fail, or will even cause an invalid memory access.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To ensure that the pointer retrieved from the first argument is indeed a pointer\nto a database handle and, similarly, that the pointer retrieved from the second\nargument is indeed a pointer to a query handle, the implementation of\nqueryHasRecords() has to perform a type validation. Retaining the JavaScript\nclass constructor from which the database handle was instantiated and the\nconstructor from which the query handle was instantiated in napi_refs can\nhelp, because napi_instanceof() can then be used to ensure that the instances\npassed into queryHashRecords() are indeed of the correct type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unfortunately, napi_instanceof() does not protect against prototype\nmanipulation. For example, the prototype of the database handle instance can be\nset to the prototype of the constructor for query handle instances. In this\ncase, the database handle instance can appear as a query handle instance, and it\nwill pass the napi_instanceof() test for a query handle instance, while still\ncontaining a pointer to a database handle.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To this end, N-API provides type-tagging capabilities.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A type tag is a 128-bit integer unique to the addon. N-API provides the\nnapi_type_tag structure for storing a type tag. When such a value is passed\nalong with a JavaScript object stored in a napi_value to\nnapi_type_tag_object(), the JavaScript object will be \"marked\" with the\ntype tag. The \"mark\" is invisible on the JavaScript side. When a JavaScript\nobject arrives into a native binding, napi_check_object_type_tag() can be used\nalong with the original type tag to determine whether the JavaScript object was\npreviously \"marked\" with the type tag. This creates a type-checking capability\nof a higher fidelity than napi_instanceof() can provide, because such type-\ntagging survives prototype manipulation and addon unloading/reloading.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Continuing the above example, the following skeleton addon implementation\nillustrates the use of napi_type_tag_object() and\nnapi_check_object_type_tag().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // This value is the type tag for a database handle. The command\n//\n//   uuidgen | sed -r -e 's/-//g' -e 's/(.{16})(.*)/0x\\1, 0x\\2/'\n//\n// can be used to obtain the two values with which to initialize the structure.\nstatic const napi_type_tag DatabaseHandleTypeTag = {\n  0x1edf75a38336451d, 0xa5ed9ce2e4c00c38\n};\n\n// This value is the type tag for a query handle.\nstatic const napi_type_tag QueryHandleTypeTag = {\n  0x9c73317f9fad44a3, 0x93c3920bf3b0ad6a\n};\n\nstatic napi_value\nopenDatabase(napi_env env, napi_callback_info info) {\n  napi_status status;\n  napi_value result;\n\n  // Perform the underlying action which results in a database handle.\n  DatabaseHandle* dbHandle = open_database();\n\n  // Create a new, empty JS object.\n  status = napi_create_object(env, &result);\n  if (status != napi_ok) return NULL;\n\n  // Tag the object to indicate that it holds a pointer to a `DatabaseHandle`.\n  status = napi_type_tag_object(env, result, &DatabaseHandleTypeTag);\n  if (status != napi_ok) return NULL;\n\n  // Store the pointer to the `DatabaseHandle` structure inside the JS object.\n  status = napi_wrap(env, result, dbHandle, NULL, NULL, NULL);\n  if (status != napi_ok) return NULL;\n\n  return result;\n}\n\n// Later when we receive a JavaScript object purporting to be a database handle\n// we can use `napi_check_object_type_tag()` to ensure that it is indeed such a\n// handle.\n\nstatic napi_value\nquery(napi_env env, napi_callback_info info) {\n  napi_status status;\n  size_t argc = 2;\n  napi_value argv[2];\n  bool is_db_handle;\n\n  status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL);\n  if (status != napi_ok) return NULL;\n\n  // Check that the object passed as the first parameter has the previously\n  // applied tag.\n  status = napi_check_object_type_tag(env,\n                                      argv[0],\n                                      &DatabaseHandleTypeTag,\n                                      &is_db_handle);\n  if (status != napi_ok) return NULL;\n\n  // Throw a `TypeError` if it doesn't.\n  if (!is_db_handle) {\n    // Throw a TypeError.\n    return NULL;\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "napi_define_class", @@ -2377,7 +2501,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_define_class(napi_env env,\n                              const char* utf8name,\n                              size_t length,\n                              napi_callback constructor,\n                              void* data,\n                              size_t property_count,\n                              const napi_property_descriptor* properties,\n                              napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8name: Name of the JavaScript constructor function; this is\nnot required to be the same as the C++ class name, though it is recommended\nfor clarity.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH\nif it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] constructor: Callback function that handles constructing instances\nof the class. (This should be a static method on the class, not an actual\nC++ constructor function.)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Optional data to be passed to the constructor callback as\nthe data property of the callback info.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] property_count: Number of items in the properties array argument.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] properties: Array of property descriptors describing static and\ninstance data properties, accessors, and methods on the class\nSee napi_property_descriptor.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing the constructor function for\nthe class.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Defines a JavaScript class that corresponds to a C++ class, including:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • A JavaScript constructor function that has the class name and invokes the\nprovided C++ constructor callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Properties on the constructor function corresponding to static data\nproperties, accessors, and methods of the C++ class (defined by\nproperty descriptors with the napi_static attribute).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Properties on the constructor function's prototype object corresponding to\nnon-static data properties, accessors, and methods of the C++ class\n(defined by property descriptors without the napi_static attribute).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The C++ constructor callback should be a static method on the class that calls\nthe actual class constructor, then wraps the new C++ instance in a JavaScript\nobject, and returns the wrapper object. See napi_wrap() for details.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript constructor function returned from napi_define_class is\noften saved and used later, to construct new instances of the class from native\ncode, and/or check whether provided values are instances of the class. In that\ncase, to prevent the function value from being garbage-collected, create a\npersistent reference to it using napi_create_reference and ensure the\nreference count is kept >= 1.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Any non-NULL data which is passed to this API via the data parameter or via\nthe data field of the napi_property_descriptor array items can be associated\nwith the resulting JavaScript constructor (which is returned in the result\nparameter) and freed whenever the class is garbage-collected by passing both\nthe JavaScript function and the data to napi_add_finalizer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_define_class(napi_env env,\n                              const char* utf8name,\n                              size_t length,\n                              napi_callback constructor,\n                              void* data,\n                              size_t property_count,\n                              const napi_property_descriptor* properties,\n                              napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] utf8name: Name of the JavaScript constructor function; this is\nnot required to be the same as the C++ class name, though it is recommended\nfor clarity.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] length: The length of the utf8name in bytes, or NAPI_AUTO_LENGTH\nif it is null-terminated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] constructor: Callback function that handles constructing instances\nof the class. This should be a static method on the class, not an actual\nC++ constructor function. napi_callback provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Optional data to be passed to the constructor callback as\nthe data property of the callback info.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] property_count: Number of items in the properties array argument.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] properties: Array of property descriptors describing static and\ninstance data properties, accessors, and methods on the class\nSee napi_property_descriptor.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A napi_value representing the constructor function for\nthe class.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Defines a JavaScript class that corresponds to a C++ class, including:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • A JavaScript constructor function that has the class name and invokes the\nprovided C++ constructor callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Properties on the constructor function corresponding to static data\nproperties, accessors, and methods of the C++ class (defined by\nproperty descriptors with the napi_static attribute).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Properties on the constructor function's prototype object corresponding to\nnon-static data properties, accessors, and methods of the C++ class\n(defined by property descriptors without the napi_static attribute).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The C++ constructor callback should be a static method on the class that calls\nthe actual class constructor, then wraps the new C++ instance in a JavaScript\nobject, and returns the wrapper object. See napi_wrap() for details.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The JavaScript constructor function returned from napi_define_class is\noften saved and used later, to construct new instances of the class from native\ncode, and/or check whether provided values are instances of the class. In that\ncase, to prevent the function value from being garbage-collected, create a\npersistent reference to it using napi_create_reference and ensure the\nreference count is kept >= 1.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Any non-NULL data which is passed to this API via the data parameter or via\nthe data field of the napi_property_descriptor array items can be associated\nwith the resulting JavaScript constructor (which is returned in the result\nparameter) and freed whenever the class is garbage-collected by passing both\nthe JavaScript function and the data to napi_add_finalizer.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_define_class" }, @@ -2393,7 +2517,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_wrap(napi_env env,\n                      napi_value js_object,\n                      void* native_object,\n                      napi_finalize finalize_cb,\n                      void* finalize_hint,\n                      napi_ref* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The JavaScript object that will be the wrapper for the\nnative object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] native_object: The native instance that will be wrapped in the\nJavaScript object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Optional native callback that can be used to free the\nnative instance when the JavaScript object is ready for garbage-collection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional contextual hint that is passed to the\nfinalize callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Optional reference to the wrapped object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Wraps a native instance in a JavaScript object. The native instance can be\nretrieved later using napi_unwrap().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When JavaScript code invokes a constructor for a class that was defined using\nnapi_define_class(), the napi_callback for the constructor is invoked.\nAfter constructing an instance of the native class, the callback must then call\nnapi_wrap() to wrap the newly constructed instance in the already-created\nJavaScript object that is the this argument to the constructor callback.\n(That this object was created from the constructor function's prototype,\nso it already has definitions of all the instance properties and methods.)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Typically when wrapping a class instance, a finalize callback should be\nprovided that simply deletes the native instance that is received as the data\nargument to the finalize callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The optional returned reference is initially a weak reference, meaning it\nhas a reference count of 0. Typically this reference count would be incremented\ntemporarily during async operations that require the instance to remain valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Caution: The optional returned reference (if obtained) should be deleted via\nnapi_delete_reference ONLY in response to the finalize callback\ninvocation. If it is deleted before then, then the finalize callback may never\nbe invoked. Therefore, when obtaining a reference a finalize callback is also\nrequired in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Calling napi_wrap() a second time on an object will return an error. To\nassociate another native instance with the object, use napi_remove_wrap()\nfirst.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_wrap(napi_env env,\n                      napi_value js_object,\n                      void* native_object,\n                      napi_finalize finalize_cb,\n                      void* finalize_hint,\n                      napi_ref* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The JavaScript object that will be the wrapper for the\nnative object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] native_object: The native instance that will be wrapped in the\nJavaScript object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Optional native callback that can be used to free the\nnative instance when the JavaScript object is ready for garbage-collection.\nnapi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional contextual hint that is passed to the\nfinalize callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Optional reference to the wrapped object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Wraps a native instance in a JavaScript object. The native instance can be\nretrieved later using napi_unwrap().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When JavaScript code invokes a constructor for a class that was defined using\nnapi_define_class(), the napi_callback for the constructor is invoked.\nAfter constructing an instance of the native class, the callback must then call\nnapi_wrap() to wrap the newly constructed instance in the already-created\nJavaScript object that is the this argument to the constructor callback.\n(That this object was created from the constructor function's prototype,\nso it already has definitions of all the instance properties and methods.)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Typically when wrapping a class instance, a finalize callback should be\nprovided that simply deletes the native instance that is received as the data\nargument to the finalize callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The optional returned reference is initially a weak reference, meaning it\nhas a reference count of 0. Typically this reference count would be incremented\ntemporarily during async operations that require the instance to remain valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Caution: The optional returned reference (if obtained) should be deleted via\nnapi_delete_reference ONLY in response to the finalize callback\ninvocation. If it is deleted before then, then the finalize callback may never\nbe invoked. Therefore, when obtaining a reference a finalize callback is also\nrequired in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Calling napi_wrap() a second time on an object will return an error. To\nassociate another native instance with the object, use napi_remove_wrap()\nfirst.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_wrap" }, @@ -2409,7 +2533,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_unwrap(napi_env env,\n                        napi_value js_object,\n                        void** result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Pointer to the wrapped native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Retrieves a native instance that was previously wrapped in a JavaScript\nobject using napi_wrap().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When JavaScript code invokes a method or property accessor on the class, the\ncorresponding napi_callback is invoked. If the callback is for an instance\nmethod or accessor, then the this argument to the callback is the wrapper\nobject; the wrapped C++ instance that is the target of the call can be obtained\nthen by calling napi_unwrap() on the wrapper object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_unwrap(napi_env env,\n                        napi_value js_object,\n                        void** result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Pointer to the wrapped native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Retrieves a native instance that was previously wrapped in a JavaScript\nobject using napi_wrap().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When JavaScript code invokes a method or property accessor on the class, the\ncorresponding napi_callback is invoked. If the callback is for an instance\nmethod or accessor, then the this argument to the callback is the wrapper\nobject; the wrapped C++ instance that is the target of the call can be obtained\nthen by calling napi_unwrap() on the wrapper object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_unwrap" }, @@ -2425,11 +2549,43 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_remove_wrap(napi_env env,\n                             napi_value js_object,\n                             void** result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Pointer to the wrapped native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Retrieves a native instance that was previously wrapped in the JavaScript\nobject js_object using napi_wrap() and removes the wrapping. If a finalize\ncallback was associated with the wrapping, it will no longer be called when the\nJavaScript object becomes garbage-collected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_remove_wrap(napi_env env,\n                             napi_value js_object,\n                             void** result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The object associated with the native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Pointer to the wrapped native instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Retrieves a native instance that was previously wrapped in the JavaScript\nobject js_object using napi_wrap() and removes the wrapping. If a finalize\ncallback was associated with the wrapping, it will no longer be called when the\nJavaScript object becomes garbage-collected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_remove_wrap" }, { + "textRaw": "napi_type_tag_object", + "name": "napi_type_tag_object", + "meta": { + "added": [ + "v12.19.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_type_tag_object(napi_env env,\n                                 napi_value js_object,\n                                 const napi_type_tag* type_tag);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The JavaScript object to be marked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] type_tag: The tag with which the object is to be marked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Associates the value of the type_tag pointer with the JavaScript object.\nnapi_check_object_type_tag() can then be used to compare the tag that was\nattached to the object with one owned by the addon to ensure that the object\nhas the right type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the object already has an associated type tag, this API will return\nnapi_invalid_arg.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_type_tag_object" + }, + { + "textRaw": "napi_check_object_type_tag", + "name": "napi_check_object_type_tag", + "meta": { + "added": [ + "v12.19.0" + ], + "napiVersion": [ + 8 + ], + "changes": [] + }, + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_check_object_type_tag(napi_env env,\n                                       napi_value js_object,\n                                       const napi_type_tag* type_tag,\n                                       bool* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The JavaScript object whose type tag to examine.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] type_tag: The tag with which to compare any tag found on the object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Whether the type tag given matched the type tag on the\nobject. false is also returned if no type tag was found on the object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Compares the pointer given as type_tag with any that can be found on\njs_object. If no tag is found on js_object or, if a tag is found but it does\nnot match type_tag, then result is set to false. If a tag is found and it\nmatches type_tag, then result is set to true.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "napi_check_object_type_tag" + }, + { "textRaw": "napi_add_finalizer", "name": "napi_add_finalizer", "meta": { @@ -2441,18 +2597,18 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_add_finalizer(napi_env env,\n                               napi_value js_object,\n                               void* native_object,\n                               napi_finalize finalize_cb,\n                               void* finalize_hint,\n                               napi_ref* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The JavaScript object to which the native data will be\nattached.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] native_object: The native data that will be attached to the JavaScript\nobject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Native callback that will be used to free the\nnative data when the JavaScript object is ready for garbage-collection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional contextual hint that is passed to the\nfinalize callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Optional reference to the JavaScript object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Adds a napi_finalize callback which will be called when the JavaScript object\nin js_object is ready for garbage collection. This API is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the API can be called multiple times with different data items in order to\nattach each of them to the JavaScript object, and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the object manipulated by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Caution: The optional returned reference (if obtained) should be deleted via\nnapi_delete_reference ONLY in response to the finalize callback\ninvocation. If it is deleted before then, then the finalize callback may never\nbe invoked. Therefore, when obtaining a reference a finalize callback is also\nrequired in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_add_finalizer(napi_env env,\n                               napi_value js_object,\n                               void* native_object,\n                               napi_finalize finalize_cb,\n                               void* finalize_hint,\n                               napi_ref* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] js_object: The JavaScript object to which the native data will be\nattached.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] native_object: The native data that will be attached to the JavaScript\nobject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_cb: Native callback that will be used to free the\nnative data when the JavaScript object is ready for garbage-collection.\nnapi_finalize provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] finalize_hint: Optional contextual hint that is passed to the\nfinalize callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: Optional reference to the JavaScript object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Adds a napi_finalize callback which will be called when the JavaScript object\nin js_object is ready for garbage collection. This API is similar to\nnapi_wrap() except that:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the native data cannot be retrieved later using napi_unwrap(),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • nor can it be removed later using napi_remove_wrap(), and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the API can be called multiple times with different data items in order to\nattach each of them to the JavaScript object, and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • the object manipulated by the API can be used with napi_wrap().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Caution: The optional returned reference (if obtained) should be deleted via\nnapi_delete_reference ONLY in response to the finalize callback\ninvocation. If it is deleted before then, then the finalize callback may never\nbe invoked. Therefore, when obtaining a reference a finalize callback is also\nrequired in order to enable correct disposal of the reference.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_add_finalizer" } ], "type": "misc", - "displayName": "Object Wrap" + "displayName": "Object wrap" }, { - "textRaw": "Simple Asynchronous Operations", + "textRaw": "Simple asynchronous operations", "name": "simple_asynchronous_operations", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Addon modules often need to leverage async helpers from libuv as part of their\nimplementation. This allows them to schedule work to be executed asynchronously\nso that their methods can return in advance of the work being completed. This\nallows them to avoid blocking overall execution of the Node.js application.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API provides an ABI-stable interface for these\nsupporting functions which covers the most common asynchronous use cases.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API defines the napi_async_work structure which is used to manage\nasynchronous workers. Instances are created/deleted with\nnapi_create_async_work and napi_delete_async_work.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The execute and complete callbacks are functions that will be\ninvoked when the executor is ready to execute and when it completes its\ntask respectively.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The execute function should avoid making any N-API calls\nthat could result in the execution of JavaScript or interaction with\nJavaScript objects. Most often, any code that needs to make N-API\ncalls should be made in complete callback instead.\nAvoid using the napi_env parameter in the execute callback as\nit will likely execute JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                These functions implement the following interfaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_async_execute_callback)(napi_env env,\n                                            void* data);\ntypedef void (*napi_async_complete_callback)(napi_env env,\n                                             napi_status status,\n                                             void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When these methods are invoked, the data parameter passed will be the\naddon-provided void* data that was passed into the\nnapi_create_async_work call.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Once created the async worker can be queued\nfor execution using the napi_queue_async_work function:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_queue_async_work(napi_env env,\n                                  napi_async_work work);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_cancel_async_work can be used if the work needs\nto be cancelled before the work has started execution.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                After calling napi_cancel_async_work, the complete callback\nwill be invoked with a status value of napi_cancelled.\nThe work should not be deleted before the complete\ncallback invocation, even when it was cancelled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Addon modules often need to leverage async helpers from libuv as part of their\nimplementation. This allows them to schedule work to be executed asynchronously\nso that their methods can return in advance of the work being completed. This\nallows them to avoid blocking overall execution of the Node.js application.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API provides an ABI-stable interface for these\nsupporting functions which covers the most common asynchronous use cases.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N-API defines the napi_async_work structure which is used to manage\nasynchronous workers. Instances are created/deleted with\nnapi_create_async_work and napi_delete_async_work.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The execute and complete callbacks are functions that will be\ninvoked when the executor is ready to execute and when it completes its\ntask respectively.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The execute function should avoid making any N-API calls\nthat could result in the execution of JavaScript or interaction with\nJavaScript objects. Most often, any code that needs to make N-API\ncalls should be made in complete callback instead.\nAvoid using the napi_env parameter in the execute callback as\nit will likely execute JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                These functions implement the following interfaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef void (*napi_async_execute_callback)(napi_env env,\n                                            void* data);\ntypedef void (*napi_async_complete_callback)(napi_env env,\n                                             napi_status status,\n                                             void* data);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When these methods are invoked, the data parameter passed will be the\naddon-provided void* data that was passed into the\nnapi_create_async_work call.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Once created the async worker can be queued\nfor execution using the napi_queue_async_work function:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_queue_async_work(napi_env env,\n                                  napi_async_work work);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_cancel_async_work can be used if the work needs\nto be cancelled before the work has started execution.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                After calling napi_cancel_async_work, the complete callback\nwill be invoked with a status value of napi_cancelled.\nThe work should not be deleted before the complete\ncallback invocation, even when it was cancelled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { "textRaw": "napi_create_async_work", @@ -2472,7 +2628,7 @@ } ] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_async_work(napi_env env,\n                                   napi_value async_resource,\n                                   napi_value async_resource_name,\n                                   napi_async_execute_callback execute,\n                                   napi_async_complete_callback complete,\n                                   void* data,\n                                   napi_async_work* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource: An optional object associated with the async work\nthat will be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource_name: Identifier for the kind of resource that is being\nprovided for diagnostic information exposed by the async_hooks API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] execute: The native function which should be called to execute the\nlogic asynchronously. The given function is called from a worker pool thread\nand can execute in parallel with the main event loop thread.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] complete: The native function which will be called when the\nasynchronous logic is completed or is cancelled. The given function is called\nfrom the main event loop thread.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: User-provided data context. This will be passed back into the\nexecute and complete functions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_async_work* which is the handle to the newly created\nasync work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a work object that is used to execute logic asynchronously.\nIt should be freed using napi_delete_async_work once the work is no longer\nrequired.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                async_resource_name should be a null-terminated, UTF-8-encoded string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The async_resource_name identifier is provided by the user and should be\nrepresentative of the type of async work being performed. It is also recommended\nto apply namespacing to the identifier, e.g. by including the module name. See\nthe async_hooks documentation for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_async_work(napi_env env,\n                                   napi_value async_resource,\n                                   napi_value async_resource_name,\n                                   napi_async_execute_callback execute,\n                                   napi_async_complete_callback complete,\n                                   void* data,\n                                   napi_async_work* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource: An optional object associated with the async work\nthat will be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource_name: Identifier for the kind of resource that is being\nprovided for diagnostic information exposed by the async_hooks API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] execute: The native function which should be called to execute the\nlogic asynchronously. The given function is called from a worker pool thread\nand can execute in parallel with the main event loop thread.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] complete: The native function which will be called when the\nasynchronous logic is completed or is cancelled. The given function is called\nfrom the main event loop thread. napi_async_complete_callback provides\nmore details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: User-provided data context. This will be passed back into the\nexecute and complete functions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_async_work* which is the handle to the newly created\nasync work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API allocates a work object that is used to execute logic asynchronously.\nIt should be freed using napi_delete_async_work once the work is no longer\nrequired.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                async_resource_name should be a null-terminated, UTF-8-encoded string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The async_resource_name identifier is provided by the user and should be\nrepresentative of the type of async work being performed. It is also recommended\nto apply namespacing to the identifier, e.g. by including the module name. See\nthe async_hooks documentation for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_async_work" }, @@ -2488,7 +2644,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_async_work(napi_env env,\n                                   napi_async_work work);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API frees a previously allocated work object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_delete_async_work(napi_env env,\n                                   napi_async_work work);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API frees a previously allocated work object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_delete_async_work" }, @@ -2504,7 +2660,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_queue_async_work(napi_env env,\n                                  napi_async_work work);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API requests that the previously allocated work be scheduled\nfor execution. Once it returns successfully, this API must not be called again\nwith the same napi_async_work item or the result will be undefined.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_queue_async_work(napi_env env,\n                                  napi_async_work work);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API requests that the previously allocated work be scheduled\nfor execution. Once it returns successfully, this API must not be called again\nwith the same napi_async_work item or the result will be undefined.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_queue_async_work" }, @@ -2520,16 +2676,16 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_cancel_async_work(napi_env env,\n                                   napi_async_work work);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API cancels queued work if it has not yet\nbeen started. If it has already started executing, it cannot be\ncancelled and napi_generic_failure will be returned. If successful,\nthe complete callback will be invoked with a status value of\nnapi_cancelled. The work should not be deleted before the complete\ncallback invocation, even if it has been successfully cancelled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_cancel_async_work(napi_env env,\n                                   napi_async_work work);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] work: The handle returned by the call to napi_create_async_work.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API cancels queued work if it has not yet\nbeen started. If it has already started executing, it cannot be\ncancelled and napi_generic_failure will be returned. If successful,\nthe complete callback will be invoked with a status value of\nnapi_cancelled. The work should not be deleted before the complete\ncallback invocation, even if it has been successfully cancelled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_cancel_async_work" } ], "type": "misc", - "displayName": "Simple Asynchronous Operations" + "displayName": "Simple asynchronous operations" }, { - "textRaw": "Custom Asynchronous Operations", + "textRaw": "Custom asynchronous operations", "name": "custom_asynchronous_operations", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The simple asynchronous work APIs above may not be appropriate for every\nscenario. When using any other asynchronous mechanism, the following APIs\nare necessary to ensure an asynchronous operation is properly tracked by\nthe runtime.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -2545,7 +2701,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_async_init(napi_env env,\n                            napi_value async_resource,\n                            napi_value async_resource_name,\n                            napi_async_context* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource: Object associated with the async work\nthat will be passed to possible async_hooks init hooks.\nIn order to retain ABI compatibility with previous versions,\npassing NULL for async_resource will not result in an error, however,\nthis will result incorrect operation of async hooks for the\nnapi_async_context created. Potential issues include\nloss of async context when using the AsyncLocalStorage API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource_name: Identifier for the kind of resource\nthat is being provided for diagnostic information exposed by the\nasync_hooks API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The initialized async context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_async_init(napi_env env,\n                            napi_value async_resource,\n                            napi_value async_resource_name,\n                            napi_async_context* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource: Object associated with the async work\nthat will be passed to possible async_hooks init hooks.\nIn order to retain ABI compatibility with previous versions,\npassing NULL for async_resource will not result in an error, however,\nthis will result incorrect operation of async hooks for the\nnapi_async_context created. Potential issues include\nloss of async context when using the AsyncLocalStorage API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource_name: Identifier for the kind of resource\nthat is being provided for diagnostic information exposed by the\nasync_hooks API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The initialized async context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_async_init" }, @@ -2561,7 +2717,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_async_destroy(napi_env env,\n                               napi_async_context async_context);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_context: The async context to be destroyed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_async_destroy(napi_env env,\n                               napi_async_context async_context);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_context: The async context to be destroyed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_async_destroy" }, @@ -2582,7 +2738,7 @@ } ] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_make_callback(napi_env env,\n                                           napi_async_context async_context,\n                                           napi_value recv,\n                                           napi_value func,\n                                           size_t argc,\n                                           const napi_value* argv,\n                                           napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_context: Context for the async operation that is\ninvoking the callback. This should normally be a value previously\nobtained from napi_async_init. However NULL is also allowed,\nwhich indicates the current async context (if any) is to be used\nfor the callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: napi_value representing the JavaScript function to be invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argv: Array of JavaScript values as napi_value representing the\narguments to the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the JavaScript object returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method allows a JavaScript function object to be called from a native\nadd-on. This API is similar to napi_call_function. However, it is used to call\nfrom native code back into JavaScript after returning from an async\noperation (when there is no other script on the stack). It is a fairly simple\nwrapper around node::MakeCallback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Note it is not necessary to use napi_make_callback from within a\nnapi_async_complete_callback; in that situation the callback's async\ncontext has already been set up, so a direct call to napi_call_function\nis sufficient and appropriate. Use of the napi_make_callback function\nmay be required when implementing custom async behavior that does not use\nnapi_create_async_work.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_make_callback(napi_env env,\n                                           napi_async_context async_context,\n                                           napi_value recv,\n                                           napi_value func,\n                                           size_t argc,\n                                           const napi_value* argv,\n                                           napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_context: Context for the async operation that is\ninvoking the callback. This should normally be a value previously\nobtained from napi_async_init. However NULL is also allowed,\nwhich indicates the current async context (if any) is to be used\nfor the callback.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] recv: The this object passed to the called function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: napi_value representing the JavaScript function to be invoked.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argc: The count of elements in the argv array.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] argv: Array of JavaScript values as napi_value representing the\narguments to the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: napi_value representing the JavaScript object returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method allows a JavaScript function object to be called from a native\nadd-on. This API is similar to napi_call_function. However, it is used to call\nfrom native code back into JavaScript after returning from an async\noperation (when there is no other script on the stack). It is a fairly simple\nwrapper around node::MakeCallback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Note it is not necessary to use napi_make_callback from within a\nnapi_async_complete_callback; in that situation the callback's async\ncontext has already been set up, so a direct call to napi_call_function\nis sufficient and appropriate. Use of the napi_make_callback function\nmay be required when implementing custom async behavior that does not use\nnapi_create_async_work.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Any process.nextTicks or Promises scheduled on the microtask queue by\nJavaScript during the callback are ran before returning back to C/C++.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_make_callback" }, @@ -2598,7 +2754,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env,\n                                                 napi_value resource_object,\n                                                 napi_async_context context,\n                                                 napi_callback_scope* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] resource_object: An object associated with the async work\nthat will be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] context: Context for the async operation that is invoking the callback.\nThis should be a value previously obtained from napi_async_init.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The newly created scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                There are cases (for example, resolving promises) where it is\nnecessary to have the equivalent of the scope associated with a callback\nin place when making certain N-API calls. If there is no other script on\nthe stack the napi_open_callback_scope and\nnapi_close_callback_scope functions can be used to open/close\nthe required scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env,\n                                                 napi_value resource_object,\n                                                 napi_async_context context,\n                                                 napi_callback_scope* result)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] resource_object: An object associated with the async work\nthat will be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] context: Context for the async operation that is invoking the callback.\nThis should be a value previously obtained from napi_async_init.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The newly created scope.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                There are cases (for example, resolving promises) where it is\nnecessary to have the equivalent of the scope associated with a callback\nin place when making certain N-API calls. If there is no other script on\nthe stack the napi_open_callback_scope and\nnapi_close_callback_scope functions can be used to open/close\nthe required scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_open_callback_scope" }, @@ -2614,16 +2770,16 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env,\n                                                  napi_callback_scope scope)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: The scope to be closed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env,\n                                                  napi_callback_scope scope)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] scope: The scope to be closed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API can be called even if there is a pending JavaScript exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_close_callback_scope" } ], "type": "misc", - "displayName": "Custom Asynchronous Operations" + "displayName": "Custom asynchronous operations" }, { - "textRaw": "Version Management", + "textRaw": "Version management", "name": "version_management", "modules": [ { @@ -2638,7 +2794,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct {\n  uint32_t major;\n  uint32_t minor;\n  uint32_t patch;\n  const char* release;\n} napi_node_version;\n\nnapi_status napi_get_node_version(napi_env env,\n                                  const napi_node_version** version);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] version: A pointer to version information for Node.js itself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This function fills the version struct with the major, minor, and patch\nversion of Node.js that is currently running, and the release field with the\nvalue of process.release.name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The returned buffer is statically allocated and does not need to be freed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                typedef struct {\n  uint32_t major;\n  uint32_t minor;\n  uint32_t patch;\n  const char* release;\n} napi_node_version;\n\nnapi_status napi_get_node_version(napi_env env,\n                                  const napi_node_version** version);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] version: A pointer to version information for Node.js itself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This function fills the version struct with the major, minor, and patch\nversion of Node.js that is currently running, and the release field with the\nvalue of process.release.name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The returned buffer is statically allocated and does not need to be freed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_node_version" }, @@ -2654,16 +2810,16 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_version(napi_env env,\n                             uint32_t* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The highest version of N-API supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the highest N-API version supported by the\nNode.js runtime. N-API is planned to be additive such that\nnewer releases of Node.js may support additional API functions.\nIn order to allow an addon to use a newer function when running with\nversions of Node.js that support it, while providing\nfallback behavior when running with Node.js versions that don't\nsupport it:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Call napi_get_version() to determine if the API is available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • If available, dynamically load a pointer to the function using uv_dlsym().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Use the dynamically loaded pointer to invoke the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • If the function is not available, provide an alternate implementation\nthat does not use the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_get_version(napi_env env,\n                             uint32_t* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The highest version of N-API supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API returns the highest N-API version supported by the\nNode.js runtime. N-API is planned to be additive such that\nnewer releases of Node.js may support additional API functions.\nIn order to allow an addon to use a newer function when running with\nversions of Node.js that support it, while providing\nfallback behavior when running with Node.js versions that don't\nsupport it:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Call napi_get_version() to determine if the API is available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • If available, dynamically load a pointer to the function using uv_dlsym().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Use the dynamically loaded pointer to invoke the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • If the function is not available, provide an alternate implementation\nthat does not use the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_version" } ], "type": "misc", - "displayName": "Version Management" + "displayName": "Version management" }, { - "textRaw": "Memory Management", + "textRaw": "Memory management", "name": "memory_management", "modules": [ { @@ -2678,13 +2834,13 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env,\n                                                    int64_t change_in_bytes,\n                                                    int64_t* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] change_in_bytes: The change in externally allocated memory that is kept\nalive by JavaScript objects.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The adjusted value
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This function gives V8 an indication of the amount of externally allocated\nmemory that is kept alive by JavaScript objects (i.e. a JavaScript object\nthat points to its own memory allocated by a native module). Registering\nexternally allocated memory will trigger global garbage collections more\noften than it would otherwise.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env,\n                                                    int64_t change_in_bytes,\n                                                    int64_t* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] change_in_bytes: The change in externally allocated memory that is kept\nalive by JavaScript objects.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The adjusted value
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This function gives V8 an indication of the amount of externally allocated\nmemory that is kept alive by JavaScript objects (i.e. a JavaScript object\nthat points to its own memory allocated by a native module). Registering\nexternally allocated memory will trigger global garbage collections more\noften than it would otherwise.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_adjust_external_memory" } ], "type": "misc", - "displayName": "Memory Management" + "displayName": "Memory management" }, { "textRaw": "Promises", @@ -2703,7 +2859,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_promise(napi_env env,\n                                napi_deferred* deferred,\n                                napi_value* promise);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] deferred: A newly created deferred object which can later be passed to\nnapi_resolve_deferred() or napi_reject_deferred() to resolve resp. reject\nthe associated promise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] promise: The JavaScript promise associated with the deferred object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a deferred object and a JavaScript promise.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_create_promise(napi_env env,\n                                napi_deferred* deferred,\n                                napi_value* promise);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] deferred: A newly created deferred object which can later be passed to\nnapi_resolve_deferred() or napi_reject_deferred() to resolve resp. reject\nthe associated promise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] promise: The JavaScript promise associated with the deferred object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns napi_ok if the API succeeded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API creates a deferred object and a JavaScript promise.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_promise" }, @@ -2719,7 +2875,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_resolve_deferred(napi_env env,\n                                  napi_deferred deferred,\n                                  napi_value resolution);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] resolution: The value with which to resolve the promise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API resolves a JavaScript promise by way of the deferred object\nwith which it is associated. Thus, it can only be used to resolve JavaScript\npromises for which the corresponding deferred object is available. This\neffectively means that the promise must have been created using\nnapi_create_promise() and the deferred object returned from that call must\nhave been retained in order to be passed to this API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The deferred object is freed upon successful completion.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_resolve_deferred(napi_env env,\n                                  napi_deferred deferred,\n                                  napi_value resolution);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] resolution: The value with which to resolve the promise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API resolves a JavaScript promise by way of the deferred object\nwith which it is associated. Thus, it can only be used to resolve JavaScript\npromises for which the corresponding deferred object is available. This\neffectively means that the promise must have been created using\nnapi_create_promise() and the deferred object returned from that call must\nhave been retained in order to be passed to this API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The deferred object is freed upon successful completion.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_resolve_deferred" }, @@ -2735,7 +2891,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_reject_deferred(napi_env env,\n                                 napi_deferred deferred,\n                                 napi_value rejection);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] rejection: The value with which to reject the promise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API rejects a JavaScript promise by way of the deferred object\nwith which it is associated. Thus, it can only be used to reject JavaScript\npromises for which the corresponding deferred object is available. This\neffectively means that the promise must have been created using\nnapi_create_promise() and the deferred object returned from that call must\nhave been retained in order to be passed to this API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The deferred object is freed upon successful completion.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_reject_deferred(napi_env env,\n                                 napi_deferred deferred,\n                                 napi_value rejection);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] deferred: The deferred object whose associated promise to resolve.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] rejection: The value with which to reject the promise.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API rejects a JavaScript promise by way of the deferred object\nwith which it is associated. Thus, it can only be used to reject JavaScript\npromises for which the corresponding deferred object is available. This\neffectively means that the promise must have been created using\nnapi_create_promise() and the deferred object returned from that call must\nhave been retained in order to be passed to this API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The deferred object is freed upon successful completion.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_reject_deferred" }, @@ -2751,7 +2907,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_promise(napi_env env,\n                            napi_value value,\n                            bool* is_promise);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The value to examine
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] is_promise: Flag indicating whether promise is a native promise\nobject (that is, a promise object created by the underlying engine).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_status napi_is_promise(napi_env env,\n                            napi_value value,\n                            bool* is_promise);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] value: The value to examine
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] is_promise: Flag indicating whether promise is a native promise\nobject (that is, a promise object created by the underlying engine).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_is_promise" } @@ -2776,7 +2932,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_run_script(napi_env env,\n                                        napi_value script,\n                                        napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] script: A JavaScript string containing the script to execute.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The value resulting from having executed the script.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This function executes a string of JavaScript code and returns its result with\nthe following caveats:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Unlike eval, this function does not allow the script to access the current\nlexical scope, and therefore also does not allow to access the\nmodule scope, meaning that pseudo-globals such as require will not be\navailable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The script can access the global scope. Function and var declarations\nin the script will be added to the global object. Variable declarations\nmade using let and const will be visible globally, but will not be added\nto the global object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The value of this is global within the script.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_run_script(napi_env env,\n                                        napi_value script,\n                                        napi_value* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] script: A JavaScript string containing the script to execute.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The value resulting from having executed the script.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This function executes a string of JavaScript code and returns its result with\nthe following caveats:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Unlike eval, this function does not allow the script to access the current\nlexical scope, and therefore also does not allow to access the\nmodule scope, meaning that pseudo-globals such as require will not be\navailable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The script can access the global scope. Function and var declarations\nin the script will be added to the global object. Variable declarations\nmade using let and const will be visible globally, but will not be added\nto the global object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The value of this is global within the script.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_run_script" } @@ -2802,7 +2958,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env,\n                                               struct uv_loop_s** loop);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] loop: The current libuv loop instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env,\n                                               struct uv_loop_s** loop);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] loop: The current libuv loop instance.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_uv_event_loop" } @@ -2811,11 +2967,32 @@ "displayName": "libuv event loop" }, { - "textRaw": "Asynchronous Thread-safe Function Calls", + "textRaw": "Asynchronous thread-safe function calls", "name": "asynchronous_thread-safe_function_calls", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript functions can normally only be called from a native addon's main\nthread. If an addon creates additional threads, then N-API functions that\nrequire a napi_env, napi_value, or napi_ref must not be called from those\nthreads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When an addon has additional threads and JavaScript functions need to be invoked\nbased on the processing completed by those threads, those threads must\ncommunicate with the addon's main thread so that the main thread can invoke the\nJavaScript function on their behalf. The thread-safe function APIs provide an\neasy way to do this.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                These APIs provide the type napi_threadsafe_function as well as APIs to\ncreate, destroy, and call objects of this type.\nnapi_create_threadsafe_function() creates a persistent reference to a\nnapi_value that holds a JavaScript function which can be called from multiple\nthreads. The calls happen asynchronously. This means that values with which the\nJavaScript callback is to be called will be placed in a queue, and, for each\nvalue in the queue, a call will eventually be made to the JavaScript function.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Upon creation of a napi_threadsafe_function a napi_finalize callback can be\nprovided. This callback will be invoked on the main thread when the thread-safe\nfunction is about to be destroyed. It receives the context and the finalize data\ngiven during construction, and provides an opportunity for cleaning up after the\nthreads e.g. by calling uv_thread_join(). Aside from the main loop thread,\nno threads should be using the thread-safe function after the finalize callback\ncompletes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The context given during the call to napi_create_threadsafe_function() can\nbe retrieved from any thread with a call to\nnapi_get_threadsafe_function_context().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_call_threadsafe_function() can then be used for initiating a call into\nJavaScript. napi_call_threadsafe_function() accepts a parameter which controls\nwhether the API behaves blockingly. If set to napi_tsfn_nonblocking, the API\nbehaves non-blockingly, returning napi_queue_full if the queue was full,\npreventing data from being successfully added to the queue. If set to\nnapi_tsfn_blocking, the API blocks until space becomes available in the queue.\nnapi_call_threadsafe_function() never blocks if the thread-safe function was\ncreated with a maximum queue size of 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The actual call into JavaScript is controlled by the callback given via the\ncall_js_cb parameter. call_js_cb is invoked on the main thread once for each\nvalue that was placed into the queue by a successful call to\nnapi_call_threadsafe_function(). If such a callback is not given, a default\ncallback will be used, and the resulting JavaScript call will have no arguments.\nThe call_js_cb callback receives the JavaScript function to call as a\nnapi_value in its parameters, as well as the void* context pointer used when\ncreating the napi_threadsafe_function, and the next data pointer that was\ncreated by one of the secondary threads. The callback can then use an API such\nas napi_call_function() to call into JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The callback may also be invoked with env and call_js_cb both set to NULL\nto indicate that calls into JavaScript are no longer possible, while items\nremain in the queue that may need to be freed. This normally occurs when the\nNode.js process exits while there is a thread-safe function still active.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It is not necessary to call into JavaScript via napi_make_callback() because\nN-API runs call_js_cb in a context appropriate for callbacks.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Threads can be added to and removed from a napi_threadsafe_function object\nduring its existence. Thus, in addition to specifying an initial number of\nthreads upon creation, napi_acquire_threadsafe_function can be called to\nindicate that a new thread will start making use of the thread-safe function.\nSimilarly, napi_release_threadsafe_function can be called to indicate that an\nexisting thread will stop making use of the thread-safe function.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_threadsafe_function objects are destroyed when every thread which uses\nthe object has called napi_release_threadsafe_function() or has received a\nreturn status of napi_closing in response to a call to\nnapi_call_threadsafe_function. The queue is emptied before the\nnapi_threadsafe_function is destroyed. napi_release_threadsafe_function()\nshould be the last API call made in conjunction with a given\nnapi_threadsafe_function, because after the call completes, there is no\nguarantee that the napi_threadsafe_function is still allocated. For the same\nreason, do not make use of a thread-safe function\nafter receiving a return value of napi_closing in response to a call to\nnapi_call_threadsafe_function. Data associated with the\nnapi_threadsafe_function can be freed in its napi_finalize callback which\nwas passed to napi_create_threadsafe_function().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Once the number of threads making use of a napi_threadsafe_function reaches\nzero, no further threads can start making use of it by calling\nnapi_acquire_threadsafe_function(). In fact, all subsequent API calls\nassociated with it, except napi_release_threadsafe_function(), will return an\nerror value of napi_closing.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The thread-safe function can be \"aborted\" by giving a value of napi_tsfn_abort\nto napi_release_threadsafe_function(). This will cause all subsequent APIs\nassociated with the thread-safe function except\nnapi_release_threadsafe_function() to return napi_closing even before its\nreference count reaches zero. In particular, napi_call_threadsafe_function()\nwill return napi_closing, thus informing the threads that it is no longer\npossible to make asynchronous calls to the thread-safe function. This can be\nused as a criterion for terminating the thread. Upon receiving a return value\nof napi_closing from napi_call_threadsafe_function() a thread must make no\nfurther use of the thread-safe function because it is no longer guaranteed to\nbe allocated.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Similarly to libuv handles, thread-safe functions can be \"referenced\" and\n\"unreferenced\". A \"referenced\" thread-safe function will cause the event loop on\nthe thread on which it is created to remain alive until the thread-safe function\nis destroyed. In contrast, an \"unreferenced\" thread-safe function will not\nprevent the event loop from exiting. The APIs napi_ref_threadsafe_function and\nnapi_unref_threadsafe_function exist for this purpose.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript functions can normally only be called from a native addon's main\nthread. If an addon creates additional threads, then N-API functions that\nrequire a napi_env, napi_value, or napi_ref must not be called from those\nthreads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When an addon has additional threads and JavaScript functions need to be invoked\nbased on the processing completed by those threads, those threads must\ncommunicate with the addon's main thread so that the main thread can invoke the\nJavaScript function on their behalf. The thread-safe function APIs provide an\neasy way to do this.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                These APIs provide the type napi_threadsafe_function as well as APIs to\ncreate, destroy, and call objects of this type.\nnapi_create_threadsafe_function() creates a persistent reference to a\nnapi_value that holds a JavaScript function which can be called from multiple\nthreads. The calls happen asynchronously. This means that values with which the\nJavaScript callback is to be called will be placed in a queue, and, for each\nvalue in the queue, a call will eventually be made to the JavaScript function.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Upon creation of a napi_threadsafe_function a napi_finalize callback can be\nprovided. This callback will be invoked on the main thread when the thread-safe\nfunction is about to be destroyed. It receives the context and the finalize data\ngiven during construction, and provides an opportunity for cleaning up after the\nthreads e.g. by calling uv_thread_join(). Aside from the main loop thread,\nno threads should be using the thread-safe function after the finalize callback\ncompletes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The context given during the call to napi_create_threadsafe_function() can\nbe retrieved from any thread with a call to\nnapi_get_threadsafe_function_context().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { + "textRaw": "Calling a thread-safe function", + "name": "calling_a_thread-safe_function", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_call_threadsafe_function() can be used for initiating a call into\nJavaScript. napi_call_threadsafe_function() accepts a parameter which controls\nwhether the API behaves blockingly. If set to napi_tsfn_nonblocking, the API\nbehaves non-blockingly, returning napi_queue_full if the queue was full,\npreventing data from being successfully added to the queue. If set to\nnapi_tsfn_blocking, the API blocks until space becomes available in the queue.\nnapi_call_threadsafe_function() never blocks if the thread-safe function was\ncreated with a maximum queue size of 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The actual call into JavaScript is controlled by the callback given via the\ncall_js_cb parameter. call_js_cb is invoked on the main thread once for each\nvalue that was placed into the queue by a successful call to\nnapi_call_threadsafe_function(). If such a callback is not given, a default\ncallback will be used, and the resulting JavaScript call will have no arguments.\nThe call_js_cb callback receives the JavaScript function to call as a\nnapi_value in its parameters, as well as the void* context pointer used when\ncreating the napi_threadsafe_function, and the next data pointer that was\ncreated by one of the secondary threads. The callback can then use an API such\nas napi_call_function() to call into JavaScript.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The callback may also be invoked with env and call_js_cb both set to NULL\nto indicate that calls into JavaScript are no longer possible, while items\nremain in the queue that may need to be freed. This normally occurs when the\nNode.js process exits while there is a thread-safe function still active.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It is not necessary to call into JavaScript via napi_make_callback() because\nN-API runs call_js_cb in a context appropriate for callbacks.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Calling a thread-safe function" + }, + { + "textRaw": "Reference counting of thread-safe functions", + "name": "reference_counting_of_thread-safe_functions", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Threads can be added to and removed from a napi_threadsafe_function object\nduring its existence. Thus, in addition to specifying an initial number of\nthreads upon creation, napi_acquire_threadsafe_function can be called to\nindicate that a new thread will start making use of the thread-safe function.\nSimilarly, napi_release_threadsafe_function can be called to indicate that an\nexisting thread will stop making use of the thread-safe function.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                napi_threadsafe_function objects are destroyed when every thread which uses\nthe object has called napi_release_threadsafe_function() or has received a\nreturn status of napi_closing in response to a call to\nnapi_call_threadsafe_function. The queue is emptied before the\nnapi_threadsafe_function is destroyed. napi_release_threadsafe_function()\nshould be the last API call made in conjunction with a given\nnapi_threadsafe_function, because after the call completes, there is no\nguarantee that the napi_threadsafe_function is still allocated. For the same\nreason, do not use a thread-safe function\nafter receiving a return value of napi_closing in response to a call to\nnapi_call_threadsafe_function. Data associated with the\nnapi_threadsafe_function can be freed in its napi_finalize callback which\nwas passed to napi_create_threadsafe_function(). The parameter\ninitial_thread_count of napi_create_threadsafe_function marks the initial\nnumber of aquisitions of the thread-safe functions, instead of calling\nnapi_acquire_threadsafe_function multiple times at creation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Once the number of threads making use of a napi_threadsafe_function reaches\nzero, no further threads can start making use of it by calling\nnapi_acquire_threadsafe_function(). In fact, all subsequent API calls\nassociated with it, except napi_release_threadsafe_function(), will return an\nerror value of napi_closing.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The thread-safe function can be \"aborted\" by giving a value of napi_tsfn_abort\nto napi_release_threadsafe_function(). This will cause all subsequent APIs\nassociated with the thread-safe function except\nnapi_release_threadsafe_function() to return napi_closing even before its\nreference count reaches zero. In particular, napi_call_threadsafe_function()\nwill return napi_closing, thus informing the threads that it is no longer\npossible to make asynchronous calls to the thread-safe function. This can be\nused as a criterion for terminating the thread. Upon receiving a return value\nof napi_closing from napi_call_threadsafe_function() a thread must not use\nthe thread-safe function anymore because it is no longer guaranteed to\nbe allocated.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Reference counting of thread-safe functions" + }, + { + "textRaw": "Deciding whether to keep the process running", + "name": "deciding_whether_to_keep_the_process_running", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Similarly to libuv handles, thread-safe functions can be \"referenced\" and\n\"unreferenced\". A \"referenced\" thread-safe function will cause the event loop on\nthe thread on which it is created to remain alive until the thread-safe function\nis destroyed. In contrast, an \"unreferenced\" thread-safe function will not\nprevent the event loop from exiting. The APIs napi_ref_threadsafe_function and\nnapi_unref_threadsafe_function exist for this purpose.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Neither does napi_unref_threadsafe_function mark the thread-safe functions as\nable to be destroyed nor does napi_ref_threadsafe_function prevent it from\nbeing destroyed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Deciding whether to keep the process running" + }, + { "textRaw": "napi_create_threadsafe_function", "name": "napi_create_threadsafe_function", "meta": { @@ -2833,7 +3010,7 @@ } ] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_create_threadsafe_function(napi_env env,\n                                napi_value func,\n                                napi_value async_resource,\n                                napi_value async_resource_name,\n                                size_t max_queue_size,\n                                size_t initial_thread_count,\n                                void* thread_finalize_data,\n                                napi_finalize thread_finalize_cb,\n                                void* context,\n                                napi_threadsafe_function_call_js call_js_cb,\n                                napi_threadsafe_function* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: An optional JavaScript function to call from another thread. It\nmust be provided if NULL is passed to call_js_cb.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource: An optional object associated with the async work that\nwill be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource_name: A JavaScript string to provide an identifier for\nthe kind of resource that is being provided for diagnostic information exposed\nby the async_hooks API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] max_queue_size: Maximum size of the queue. 0 for no limit.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] initial_thread_count: The initial number of threads, including the main\nthread, which will be making use of this function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] thread_finalize_data: Optional data to be passed to thread_finalize_cb.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] thread_finalize_cb: Optional function to call when the\nnapi_threadsafe_function is being destroyed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] context: Optional data to attach to the resulting\nnapi_threadsafe_function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] call_js_cb: Optional callback which calls the JavaScript function in\nresponse to a call on a different thread. This callback will be called on the\nmain thread. If not given, the JavaScript function will be called with no\nparameters and with undefined as its this value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The asynchronous thread-safe JavaScript function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_create_threadsafe_function(napi_env env,\n                                napi_value func,\n                                napi_value async_resource,\n                                napi_value async_resource_name,\n                                size_t max_queue_size,\n                                size_t initial_thread_count,\n                                void* thread_finalize_data,\n                                napi_finalize thread_finalize_cb,\n                                void* context,\n                                napi_threadsafe_function_call_js call_js_cb,\n                                napi_threadsafe_function* result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: An optional JavaScript function to call from another thread. It\nmust be provided if NULL is passed to call_js_cb.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource: An optional object associated with the async work that\nwill be passed to possible async_hooks init hooks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] async_resource_name: A JavaScript string to provide an identifier for\nthe kind of resource that is being provided for diagnostic information exposed\nby the async_hooks API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] max_queue_size: Maximum size of the queue. 0 for no limit.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] initial_thread_count: The initial number of acquisitions, i.e. the\ninitial number of threads, including the main thread, which will be making use\nof this function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] thread_finalize_data: Optional data to be passed to thread_finalize_cb.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] thread_finalize_cb: Optional function to call when the\nnapi_threadsafe_function is being destroyed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] context: Optional data to attach to the resulting\nnapi_threadsafe_function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] call_js_cb: Optional callback which calls the JavaScript function in\nresponse to a call on a different thread. This callback will be called on the\nmain thread. If not given, the JavaScript function will be called with no\nparameters and with undefined as its this value.\nnapi_threadsafe_function_call_js provides more details.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The asynchronous thread-safe JavaScript function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_create_threadsafe_function" }, @@ -2849,7 +3026,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_get_threadsafe_function_context(napi_threadsafe_function func,\n                                     void** result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The thread-safe function for which to retrieve the context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The location where to store the context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may be called from any thread which makes use of func.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_get_threadsafe_function_context(napi_threadsafe_function func,\n                                     void** result);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The thread-safe function for which to retrieve the context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: The location where to store the context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may be called from any thread which makes use of func.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_get_threadsafe_function_context" }, @@ -2865,7 +3042,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_call_threadsafe_function(napi_threadsafe_function func,\n                              void* data,\n                              napi_threadsafe_function_call_mode is_blocking);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The asynchronous thread-safe JavaScript function to invoke.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Data to send into JavaScript via the callback call_js_cb\nprovided during the creation of the thread-safe JavaScript function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] is_blocking: Flag whose value can be either napi_tsfn_blocking to\nindicate that the call should block if the queue is full or\nnapi_tsfn_nonblocking to indicate that the call should return immediately\nwith a status of napi_queue_full whenever the queue is full.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API will return napi_closing if napi_release_threadsafe_function() was\ncalled with abort set to napi_tsfn_abort from any thread. The value is only\nadded to the queue if the API returns napi_ok.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may be called from any thread which makes use of func.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_call_threadsafe_function(napi_threadsafe_function func,\n                              void* data,\n                              napi_threadsafe_function_call_mode is_blocking);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The asynchronous thread-safe JavaScript function to invoke.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] data: Data to send into JavaScript via the callback call_js_cb\nprovided during the creation of the thread-safe JavaScript function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] is_blocking: Flag whose value can be either napi_tsfn_blocking to\nindicate that the call should block if the queue is full or\nnapi_tsfn_nonblocking to indicate that the call should return immediately\nwith a status of napi_queue_full whenever the queue is full.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API will return napi_closing if napi_release_threadsafe_function() was\ncalled with abort set to napi_tsfn_abort from any thread. The value is only\nadded to the queue if the API returns napi_ok.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may be called from any thread which makes use of func.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_call_threadsafe_function" }, @@ -2881,7 +3058,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_acquire_threadsafe_function(napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The asynchronous thread-safe JavaScript function to start making\nuse of.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A thread should call this API before passing func to any other thread-safe\nfunction APIs to indicate that it will be making use of func. This prevents\nfunc from being destroyed when all other threads have stopped making use of\nit.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may be called from any thread which will start making use of func.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_acquire_threadsafe_function(napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The asynchronous thread-safe JavaScript function to start making\nuse of.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A thread should call this API before passing func to any other thread-safe\nfunction APIs to indicate that it will be making use of func. This prevents\nfunc from being destroyed when all other threads have stopped making use of\nit.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may be called from any thread which will start making use of func.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_acquire_threadsafe_function" }, @@ -2897,7 +3074,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_release_threadsafe_function(napi_threadsafe_function func,\n                                 napi_threadsafe_function_release_mode mode);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The asynchronous thread-safe JavaScript function whose reference\ncount to decrement.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] mode: Flag whose value can be either napi_tsfn_release to indicate\nthat the current thread will make no further calls to the thread-safe\nfunction, or napi_tsfn_abort to indicate that in addition to the current\nthread, no other thread should make any further calls to the thread-safe\nfunction. If set to napi_tsfn_abort, further calls to\nnapi_call_threadsafe_function() will return napi_closing, and no further\nvalues will be placed in the queue.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A thread should call this API when it stops making use of func. Passing func\nto any thread-safe APIs after having called this API has undefined results, as\nfunc may have been destroyed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may be called from any thread which will stop making use of func.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_release_threadsafe_function(napi_threadsafe_function func,\n                                 napi_threadsafe_function_release_mode mode);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The asynchronous thread-safe JavaScript function whose reference\ncount to decrement.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] mode: Flag whose value can be either napi_tsfn_release to indicate\nthat the current thread will make no further calls to the thread-safe\nfunction, or napi_tsfn_abort to indicate that in addition to the current\nthread, no other thread should make any further calls to the thread-safe\nfunction. If set to napi_tsfn_abort, further calls to\nnapi_call_threadsafe_function() will return napi_closing, and no further\nvalues will be placed in the queue.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A thread should call this API when it stops making use of func. Passing func\nto any thread-safe APIs after having called this API has undefined results, as\nfunc may have been destroyed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may be called from any thread which will stop making use of func.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_release_threadsafe_function" }, @@ -2913,7 +3090,7 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The thread-safe function to reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to indicate that the event loop running on the main thread\nshould not exit until func has been destroyed. Similar to uv_ref it is\nalso idempotent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may only be called from the main thread.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The thread-safe function to reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to indicate that the event loop running on the main thread\nshould not exit until func has been destroyed. Similar to uv_ref it is\nalso idempotent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Neither does napi_unref_threadsafe_function mark the thread-safe functions as\nable to be destroyed nor does napi_ref_threadsafe_function prevent it from\nbeing destroyed. napi_acquire_threadsafe_function and\nnapi_release_threadsafe_function are available for that purpose.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may only be called from the main thread.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_ref_threadsafe_function" }, @@ -2929,13 +3106,43 @@ ], "changes": [] }, - "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The thread-safe function to unreference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to indicate that the event loop running on the main thread\nmay exit before func is destroyed. Similar to uv_unref it is also\nidempotent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may only be called from the main thread.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnapi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] func: The thread-safe function to unreference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API is used to indicate that the event loop running on the main thread\nmay exit before func is destroyed. Similar to uv_unref it is also\nidempotent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This API may only be called from the main thread.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", "displayName": "napi_unref_threadsafe_function" } ], "type": "misc", - "displayName": "Asynchronous Thread-safe Function Calls" + "displayName": "Asynchronous thread-safe function calls" + }, + { + "textRaw": "Miscellaneous utilities", + "name": "miscellaneous_utilities", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnode_api_get_module_file_name(napi_env env, const char** result);\n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A URL containing the absolute path of the\nlocation from which the add-on was loaded. For a file on the local\nfile system it will start with file://. The string is null-terminated and\nowned by env and must thus not be modified or freed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                result may be an empty string if the add-on loading process fails to establish\nthe add-on's file name during loading.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "misc", + "displayName": "Miscellaneous utilities" + }, + { + "textRaw": "node_api_get_module_file_name", + "name": "node_api_get_module_file_name", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                NAPI_EXTERN napi_status\nnode_api_get_module_file_name(napi_env env, const char** result);\n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [in] env: The environment that the API is invoked under.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • [out] result: A URL containing the absolute path of the\nlocation from which the add-on was loaded. For a file on the local\nfile system it will start with file://. The string is null-terminated and\nowned by env and must thus not be modified or freed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                result may be an empty string if the add-on loading process fails to establish\nthe add-on's file name during loading.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "misc", + "displayName": "node_api_get_module_file_name" } ] } diff -Nru nodejs-mozilla-12.18.1/doc/api/n-api.md nodejs-mozilla-12.22.12/doc/api/n-api.md --- nodejs-mozilla-12.18.1/doc/api/n-api.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/n-api.md 2022-04-05 07:17:04.000000000 +0000 @@ -31,12 +31,12 @@ `napi_value`. * In case of an error status code, additional information can be obtained using `napi_get_last_error_info`. More information can be found in the error - handling section [Error Handling][]. + handling section [Error handling][]. The N-API is a C API that ensures ABI stability across Node.js versions and different compiler levels. A C++ API can be easier to use. To support using C++, the project maintains a -C++ wrapper module called [node-addon-api][]. +C++ wrapper module called [`node-addon-api`][]. This wrapper provides an inlineable C++ API. Binaries built with `node-addon-api` will depend on the symbols for the N-API C-based functions exported by Node.js. `node-addon-api` is a more @@ -45,12 +45,12 @@ `node-addon-api` code and the second section shows what actually gets used in the addon. -```C++ +```cpp Object obj = Object::New(env); obj["foo"] = String::New(env, "bar"); ``` -```C++ +```cpp napi_status status; napi_value object, string; status = napi_create_object(env, &object); @@ -78,7 +78,11 @@ When using `node-addon-api` instead of the C APIs, start with the API [docs][] for `node-addon-api`. -## Implications of ABI Stability +The [N-API Resource](https://nodejs.github.io/node-addon-examples/) offers an +excellent orientation and tips for developers just getting started with N-API +and `node-addon-api`. + +## Implications of ABI stability Although N-API provides an ABI stability guarantee, other parts of Node.js do not, and any external libraries used from the addon may not. In particular, @@ -87,7 +91,7 @@ * the Node.js C++ APIs available via any of - ```C++ + ```cpp #include #include #include @@ -96,20 +100,20 @@ * the libuv APIs which are also included with Node.js and available via - ```C++ + ```cpp #include ``` * the V8 API available via - ```C++ + ```cpp #include ``` Thus, for an addon to remain ABI-compatible across Node.js major versions, it -must make use exclusively of N-API by restricting itself to using +must use N-API exclusively by restricting itself to using -```C +```c #include ``` @@ -127,7 +131,7 @@ For Linux developers, the necessary C/C++ toolchain packages are readily available. [GCC][] is widely used in the Node.js community to build and -test across a variety of plarforms. For many developers, the [LLVM][] +test across a variety of platforms. For many developers, the [LLVM][] compiler infrastructure is also a good choice. For Mac developers, [Xcode][] offers all the required compiler tools. @@ -143,7 +147,7 @@ IDE. The following command installs the necessary toolchain: ```bash -npm install --global --production windows-build-tools +npm install --global windows-build-tools ``` The sections below describe the additional tools available for developing @@ -196,7 +200,7 @@ #### prebuildify -[prebuildify][] is tool based on node-gyp. The advantage of prebuildify is +[prebuildify][] is a tool based on node-gyp. The advantage of prebuildify is that the built binaries are bundled with the native module when it's uploaded to npm. The binaries are downloaded from npm and are immediately available to the module user when the native module is installed. @@ -206,7 +210,7 @@ In order to use the N-API functions, include the file [`node_api.h`][] which is located in the src directory in the node development tree: -```C +```c #include ``` @@ -214,7 +218,7 @@ In order to ensure compatibility with specific versions of N-API, the version can be specified explicitly when including the header: -```C +```c #define NAPI_VERSION 3 #include ``` @@ -222,10 +226,9 @@ This restricts the N-API surface to just the functionality that was available in the specified (and earlier) versions. -Some of the N-API surface is considered experimental and requires explicit -opt-in to access those APIs: +Some of the N-API surface is experimental and requires explicit opt-in: -```C +```c #define NAPI_EXPERIMENTAL #include ``` @@ -233,7 +236,7 @@ In this case the entire API surface, including any experimental APIs, will be available to the module code. -## N-API Version Matrix +## N-API version matrix N-API versions are additive and versioned independently from Node.js. Version 4 is an extension to version 3 in that it has all of the APIs @@ -254,6 +257,18 @@ \* Indicates that the N-API version was released as experimental +Each API documented for N-API will have a header named `added in:`, and APIs +which are stable will have the additional header `N-API version:`. +APIs are directly usable when using a Node.js version which supports +the N-API version shown in `N-API version:` or higher. +When using a Node.js version that does not support the +`N-API version:` listed or if there is no `N-API version:` listed, +then the API will only be available if +`#define NAPI_EXPERIMENTAL` precedes the inclusion of `node_api.h` +or `js_native_api.h`. If an API appears not to be available on +a version of Node.js which is later than the one shown in `added in:` then +this is most likely the reason for the apparent absence. + The N-APIs associated strictly with accessing ECMAScript features from native code can be found separately in `js_native_api.h` and `js_native_api_types.h`. The APIs defined in these headers are included in `node_api.h` and @@ -272,7 +287,7 @@ to the addon and which instantiates the addon by calling into `addon.c` when the addon is loaded into a Node.js environment. -```C +```c // addon.h #ifndef _ADDON_H_ #define _ADDON_H_ @@ -281,7 +296,7 @@ #endif // _ADDON_H_ ``` -```C +```c // addon.c #include "addon.h" @@ -330,7 +345,7 @@ } ``` -```C +```c // addon_node.c #include #include "addon.h" @@ -343,9 +358,7 @@ } ``` -## Environment Life Cycle APIs - -> Stability: 1 - Experimental +## Environment life cycle APIs [Section 8.7][] of the [ECMAScript Language Specification][] defines the concept of an "Agent" as a self-contained environment in which JavaScript code runs. @@ -365,7 +378,7 @@ may be called multiple times, from multiple contexts, and even concurrently from multiple threads. -Native addons may need to allocate global state of which they make use during +Native addons may need to allocate global state which they use during their entire life cycle such that the state must be unique to each instance of the addon. @@ -378,7 +391,7 @@ napiVersion: 6 --> -```C +```c napi_status napi_set_instance_data(napi_env env, void* data, napi_finalize finalize_cb, @@ -389,6 +402,7 @@ * `[in] data`: The data item to make available to bindings of this instance. * `[in] finalize_cb`: The function to call when the environment is being torn down. The function receives `data` so that it might free it. + [`napi_finalize`][] provides more details. * `[in] finalize_hint`: Optional hint to pass to the finalize callback during collection. @@ -406,7 +420,7 @@ napiVersion: 6 --> -```C +```c napi_status napi_get_instance_data(napi_env env, void** data); ``` @@ -421,7 +435,7 @@ running Agent via `napi_set_instance_data()`. If no data is set, the call will succeed and `data` will be set to `NULL`. -## Basic N-API Data Types +## Basic N-API data types N-API exposes the following fundamental datatypes as abstractions that are consumed by the various APIs. These APIs should be treated as opaque, @@ -435,7 +449,7 @@ Integral status code indicating the success or failure of a N-API call. Currently, the following status codes are supported. -```C +```c typedef enum { napi_ok, napi_invalid_arg, @@ -470,7 +484,7 @@ napiVersion: 1 --> -```C +```c typedef struct { const char* error_message; void* engine_reserved; @@ -487,7 +501,7 @@ not implemented for any VM. * `error_code`: The N-API status code that originated with the last error. -See the [Error Handling][] section for additional information. +See the [Error handling][] section for additional information. ### napi_env @@ -528,7 +542,7 @@ merely released (`napi_tsfn_release`) and thus available for subsequent use via `napi_acquire_threadsafe_function()` and `napi_call_threadsafe_function()`. -```C +```c typedef enum { napi_tsfn_release, napi_tsfn_abort @@ -545,14 +559,14 @@ the call should block whenever the queue associated with the thread-safe function is full. -```C +```c typedef enum { napi_tsfn_nonblocking, napi_tsfn_blocking } napi_threadsafe_function_call_mode; ``` -### N-API Memory Management types +### N-API memory management types #### napi_handle_scope This is an abstraction used to control and modify the lifetime of objects @@ -570,7 +584,7 @@ that all `napi_value`s created during the lifetime of the handle scope are no longer referenced from the current stack frame. -For more details, review the [Object Lifetime Management][]. +For more details, review the [Object lifetime management][]. #### napi_escapable_handle_scope + +A 128-bit value stored as two unsigned 64-bit integers. It serves as a UUID +with which JavaScript objects can be "tagged" in order to ensure that they are +of a certain type. This is a stronger check than [`napi_instanceof`][], because +the latter can report a false positive if the object's prototype has been +manipulated. Type-tagging is most useful in conjunction with [`napi_wrap`][] +because it ensures that the pointer retrieved from a wrapped object can be +safely cast to the native type corresponding to the type tag that had been +previously applied to the JavaScript object. + +```c +typedef struct { + uint64_t lower; + uint64_t upper; +} napi_type_tag; +``` + +#### napi_async_cleanup_hook_handle + + +An opaque value returned by [`napi_add_async_cleanup_hook`][]. It must be passed +to [`napi_remove_async_cleanup_hook`][] when the chain of asynchronous cleanup +events completes. + +### N-API callback types -### N-API Callback types #### napi_callback_info + +Function pointer used with [`napi_add_async_cleanup_hook`][]. It will be called +when the environment is being torn down. + +Callback functions must satisfy the following signature: + +```c +typedef void (*napi_async_cleanup_hook)(napi_async_cleanup_hook_handle handle, + void* data); +``` + +* `[in] handle`: The handle that must be passed to +[`napi_remove_async_cleanup_hook`][] after completion of the asynchronous +cleanup. +* `[in] data`: The data that was passed to [`napi_add_async_cleanup_hook`][]. + +The body of the function should initiate the asynchronous cleanup actions at the +end of which `handle` must be passed in a call to +[`napi_remove_async_cleanup_hook`][]. + +## Error handling N-API uses both return values and JavaScript exceptions for error handling. The following sections explain the approach for each case. @@ -746,7 +826,7 @@ napiVersion: 1 --> -```C +```c typedef struct napi_extended_error_info { const char* error_message; void* engine_reserved; @@ -773,7 +853,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_last_error_info(napi_env env, const napi_extended_error_info** result); @@ -883,7 +963,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_throw(napi_env env, napi_value error); ``` @@ -900,7 +980,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_throw_error(napi_env env, const char* code, const char* msg); @@ -920,7 +1000,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_throw_type_error(napi_env env, const char* code, const char* msg); @@ -940,7 +1020,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_throw_range_error(napi_env env, const char* code, const char* msg); @@ -960,7 +1040,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_is_error(napi_env env, napi_value value, bool* result); @@ -981,7 +1061,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_create_error(napi_env env, napi_value code, napi_value msg, @@ -1005,7 +1085,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_create_type_error(napi_env env, napi_value code, napi_value msg, @@ -1029,7 +1109,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_create_range_error(napi_env env, napi_value code, napi_value msg, @@ -1053,7 +1133,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_and_clear_last_exception(napi_env env, napi_value* result); ``` @@ -1071,7 +1151,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_is_exception_pending(napi_env env, bool* result); ``` @@ -1088,7 +1168,7 @@ napiVersion: 3 --> -```C +```c napi_status napi_fatal_exception(napi_env env, napi_value err); ``` @@ -1098,7 +1178,7 @@ Trigger an `'uncaughtException'` in JavaScript. Useful if an async callback throws an exception with no way to recover. -### Fatal Errors +### Fatal errors In the event of an unrecoverable error in a native module, a fatal error can be thrown to immediately terminate the process. @@ -1109,7 +1189,7 @@ napiVersion: 1 --> -```C +```c NAPI_NO_RETURN void napi_fatal_error(const char* location, size_t location_len, const char* message, @@ -1127,7 +1207,7 @@ This API can be called even if there is a pending JavaScript exception. -## Object Lifetime management +## Object lifetime management As N-API calls are made, handles to objects in the heap for the underlying VM may be returned as `napi_values`. These handles must hold the @@ -1151,7 +1231,7 @@ the lifespan of a native method. For example, consider a native method that has a loop which iterates through the elements in a large array: -```C +```c for (int i = 0; i < 1000000; i++) { napi_value result; napi_status status = napi_get_element(env, object, i, &result); @@ -1183,7 +1263,7 @@ [`napi_close_handle_scope`][] would ensure that at most a single handle is valid throughout the execution of the loop: -```C +```c for (int i = 0; i < 1000000; i++) { napi_handle_scope scope; napi_status status = napi_open_handle_scope(env, &scope); @@ -1223,7 +1303,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_open_handle_scope(napi_env env, napi_handle_scope* result); ``` @@ -1241,7 +1321,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_close_handle_scope(napi_env env, napi_handle_scope scope); ``` @@ -1262,7 +1342,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_open_escapable_handle_scope(napi_env env, napi_handle_scope* result); @@ -1282,7 +1362,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_close_escapable_handle_scope(napi_env env, napi_handle_scope scope); @@ -1304,7 +1384,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_escape_handle(napi_env env, napi_escapable_handle_scope scope, napi_value escapee, @@ -1371,7 +1451,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_create_reference(napi_env env, napi_value value, uint32_t initial_refcount, @@ -1395,7 +1475,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_delete_reference(napi_env env, napi_ref ref); ``` @@ -1414,7 +1494,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_reference_ref(napi_env env, napi_ref ref, uint32_t* result); @@ -1435,7 +1515,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_reference_unref(napi_env env, napi_ref ref, uint32_t* result); @@ -1456,7 +1536,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_get_reference_value(napi_env env, napi_ref ref, napi_value* result); @@ -1492,7 +1572,7 @@ napiVersion: 3 --> -```C +```c NODE_EXTERN napi_status napi_add_env_cleanup_hook(napi_env env, void (*fun)(void* arg), void* arg); @@ -1509,17 +1589,19 @@ The hooks will be called in reverse order, i.e. the most recently added one will be called first. -Removing this hook can be done by using `napi_remove_env_cleanup_hook`. +Removing this hook can be done by using [`napi_remove_env_cleanup_hook`][]. Typically, that happens when the resource for which this hook was added is being torn down anyway. +For asynchronous cleanup, [`napi_add_async_cleanup_hook`][] is available. + #### napi_remove_env_cleanup_hook -```C +```c NAPI_EXTERN napi_status napi_remove_env_cleanup_hook(napi_env env, void (*fun)(void* arg), void* arg); @@ -1532,19 +1614,79 @@ The function must have originally been registered with `napi_add_env_cleanup_hook`, otherwise the process will abort. +#### napi_add_async_cleanup_hook + + +```c +NAPI_EXTERN napi_status napi_add_async_cleanup_hook( + napi_env env, + napi_async_cleanup_hook hook, + void* arg, + napi_async_cleanup_hook_handle* remove_handle); +``` + +* `[in] env`: The environment that the API is invoked under. +* `[in] hook`: The function pointer to call at environment teardown. +* `[in] arg`: The pointer to pass to `hook` when it gets called. +* `[out] remove_handle`: Optional handle that refers to the asynchronous cleanup +hook. + +Registers `hook`, which is a function of type [`napi_async_cleanup_hook`][], as +a function to be run with the `remove_handle` and `arg` parameters once the +current Node.js environment exits. + +Unlike [`napi_add_env_cleanup_hook`][], the hook is allowed to be asynchronous. + +Otherwise, behavior generally matches that of [`napi_add_env_cleanup_hook`][]. + +If `remove_handle` is not `NULL`, an opaque value will be stored in it +that must later be passed to [`napi_remove_async_cleanup_hook`][], +regardless of whether the hook has already been invoked. +Typically, that happens when the resource for which this hook was added +is being torn down anyway. + +#### napi_remove_async_cleanup_hook + + +```c +NAPI_EXTERN napi_status napi_remove_async_cleanup_hook( + napi_async_cleanup_hook_handle remove_handle); +``` + +* `[in] remove_handle`: The handle to an asynchronous cleanup hook that was +created with [`napi_add_async_cleanup_hook`][]. + +Unregisters the cleanup hook corresponding to `remove_handle`. This will prevent +the hook from being executed, unless it has already started executing. +This must be called on any `napi_async_cleanup_hook_handle` value obtained +from [`napi_add_async_cleanup_hook`][]. + ## Module registration N-API modules are registered in a manner similar to other modules except that instead of using the `NODE_MODULE` macro the following is used: -```C +```c NAPI_MODULE(NODE_GYP_MODULE_NAME, Init) ``` The next difference is the signature for the `Init` method. For a N-API module it is as follows: -```C +```c napi_value Init(napi_env env, napi_value exports); ``` @@ -1557,11 +1699,19 @@ To add the method `hello` as a function so that it can be called as a method provided by the addon: -```C +```c napi_value Init(napi_env env, napi_value exports) { napi_status status; - napi_property_descriptor desc = - {"hello", NULL, Method, NULL, NULL, NULL, napi_default, NULL}; + napi_property_descriptor desc = { + "hello", + NULL, + Method, + NULL, + NULL, + NULL, + napi_writable | napi_enumerable | napi_configurable, + NULL + }; status = napi_define_properties(env, exports, 1, &desc); if (status != napi_ok) return NULL; return exports; @@ -1570,7 +1720,7 @@ To set a function to be returned by the `require()` for the addon: -```C +```c napi_value Init(napi_env env, napi_value exports) { napi_value method; napi_status status; @@ -1581,14 +1731,14 @@ ``` To define a class so that new instances can be created (often used with -[Object Wrap][]): +[Object wrap][]): -```C +```c // NOTE: partial example, not all referenced code is included napi_value Init(napi_env env, napi_value exports) { napi_status status; napi_property_descriptor properties[] = { - { "value", NULL, NULL, GetValue, SetValue, NULL, napi_default, NULL }, + { "value", NULL, NULL, GetValue, SetValue, NULL, napi_writable | napi_configurable, NULL }, DECLARE_NAPI_METHOD("plusOne", PlusOne), DECLARE_NAPI_METHOD("multiply", Multiply), }; @@ -1611,7 +1761,7 @@ If the module will be loaded multiple times during the lifetime of the Node.js process, use the `NAPI_MODULE_INIT` macro to initialize the module: -```C +```c NAPI_MODULE_INIT() { napi_value answer; napi_status result; @@ -1638,12 +1788,12 @@ following the macro invocation. For more details on setting properties on objects, see the section on -[Working with JavaScript Properties][]. +[Working with JavaScript properties][]. For more details on building addon modules in general, refer to the existing API. -## Working with JavaScript Values +## Working with JavaScript values N-API exposes a set of APIs to create all types of JavaScript values. Some of these types are documented under [Section 6][] of the [ECMAScript Language Specification][]. @@ -1668,7 +1818,7 @@ napiVersion: 6 --> -```C +```c typedef enum { napi_key_include_prototypes, napi_key_own_only @@ -1689,7 +1839,7 @@ napiVersion: 6 --> -```C +```c typedef enum { napi_key_all_properties = 0, napi_key_writable = 1, @@ -1708,7 +1858,7 @@ napiVersion: 6 --> -```C +```c typedef enum { napi_key_keep_numbers, napi_key_numbers_to_strings @@ -1721,7 +1871,7 @@ #### napi_valuetype -```C +```c typedef enum { // ES6 types (corresponds to typeof) napi_undefined, @@ -1747,7 +1897,7 @@ #### napi_typedarray_type -```C +```c typedef enum { napi_int8_array, napi_uint8_array, @@ -1767,14 +1917,14 @@ Elements of this enum correspond to [Section 22.2][] of the [ECMAScript Language Specification][]. -### Object Creation Functions +### Object creation functions #### napi_create_array -```C +```c napi_status napi_create_array(napi_env env, napi_value* result) ``` @@ -1793,7 +1943,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_array_with_length(napi_env env, size_t length, napi_value* result) @@ -1822,7 +1972,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_arraybuffer(napi_env env, size_t byte_length, void** data, @@ -1855,7 +2005,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_buffer(napi_env env, size_t size, void** data, @@ -1878,7 +2028,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_buffer_copy(napi_env env, size_t length, const void* data, @@ -1905,7 +2055,7 @@ napiVersion: 5 --> -```C +```c napi_status napi_create_date(napi_env env, double time, napi_value* result); @@ -1931,7 +2081,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_external(napi_env env, void* data, napi_finalize finalize_cb, @@ -1942,7 +2092,7 @@ * `[in] env`: The environment that the API is invoked under. * `[in] data`: Raw pointer to the external data. * `[in] finalize_cb`: Optional callback to call when the external value is being - collected. + collected. [`napi_finalize`][] provides more details. * `[in] finalize_hint`: Optional hint to pass to the finalize callback during collection. * `[out] result`: A `napi_value` representing an external value. @@ -1971,7 +2121,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_external_arraybuffer(napi_env env, void* external_data, @@ -1986,7 +2136,7 @@ `ArrayBuffer`. * `[in] byte_length`: The length in bytes of the underlying buffer. * `[in] finalize_cb`: Optional callback to call when the `ArrayBuffer` is being - collected. + collected. [`napi_finalize`][] provides more details. * `[in] finalize_hint`: Optional hint to pass to the finalize callback during collection. * `[out] result`: A `napi_value` representing a JavaScript `ArrayBuffer`. @@ -2015,7 +2165,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_external_buffer(napi_env env, size_t length, void* data, @@ -2027,9 +2177,9 @@ * `[in] env`: The environment that the API is invoked under. * `[in] length`: Size in bytes of the input buffer (should be the same as the size of the new buffer). -* `[in] data`: Raw pointer to the underlying buffer to copy from. +* `[in] data`: Raw pointer to the underlying buffer to expose to JavaScript. * `[in] finalize_cb`: Optional callback to call when the `ArrayBuffer` is being - collected. + collected. [`napi_finalize`][] provides more details. * `[in] finalize_hint`: Optional hint to pass to the finalize callback during collection. * `[out] result`: A `napi_value` representing a `node::Buffer`. @@ -2056,7 +2206,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_object(napi_env env, napi_value* result) ``` @@ -2077,7 +2227,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_symbol(napi_env env, napi_value description, napi_value* result) @@ -2101,7 +2251,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_typedarray(napi_env env, napi_typedarray_type type, size_t length, @@ -2138,7 +2288,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_dataview(napi_env env, size_t byte_length, napi_value arraybuffer, @@ -2173,7 +2323,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result) ``` @@ -2195,7 +2345,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_uint32(napi_env env, uint32_t value, napi_value* result) ``` @@ -2217,7 +2367,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_int64(napi_env env, int64_t value, napi_value* result) ``` @@ -2233,8 +2383,8 @@ The JavaScript `Number` type is described in [Section 6.1.6][] of the ECMAScript Language Specification. Note the complete range of `int64_t` cannot be represented with full precision in JavaScript. Integer values -outside the range of [`Number.MIN_SAFE_INTEGER`][] `-(2^53 - 1)` - -[`Number.MAX_SAFE_INTEGER`][] `(2^53 - 1)` will lose precision. +outside the range of [`Number.MIN_SAFE_INTEGER`][] `-(2**53 - 1)` - +[`Number.MAX_SAFE_INTEGER`][] `(2**53 - 1)` will lose precision. #### napi_create_double -```C +```c napi_status napi_create_double(napi_env env, double value, napi_value* result) ``` @@ -2264,7 +2414,7 @@ napiVersion: 6 --> -```C +```c napi_status napi_create_bigint_int64(napi_env env, int64_t value, napi_value* result); @@ -2284,7 +2434,7 @@ napiVersion: 6 --> -```C +```c napi_status napi_create_bigint_uint64(napi_env env, uint64_t value, napi_value* result); @@ -2304,7 +2454,7 @@ napiVersion: 6 --> -```C +```c napi_status napi_create_bigint_words(napi_env env, int sign_bit, size_t word_count, @@ -2333,7 +2483,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_string_latin1(napi_env env, const char* str, size_t length, @@ -2360,7 +2510,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_string_utf16(napi_env env, const char16_t* str, size_t length, @@ -2387,7 +2537,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_string_utf8(napi_env env, const char* str, size_t length, @@ -2415,7 +2565,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_array_length(napi_env env, napi_value value, uint32_t* result) @@ -2439,7 +2589,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_arraybuffer_info(napi_env env, napi_value arraybuffer, void** data, @@ -2471,7 +2621,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_buffer_info(napi_env env, napi_value value, void** data, @@ -2498,7 +2648,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_prototype(napi_env env, napi_value object, napi_value* result) @@ -2518,7 +2668,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_typedarray_info(napi_env env, napi_value typedarray, napi_typedarray_type* type, @@ -2557,7 +2707,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_dataview_info(napi_env env, napi_value dataview, size_t* byte_length, @@ -2586,7 +2736,7 @@ napiVersion: 5 --> -```C +```c napi_status napi_get_date_value(napi_env env, napi_value value, double* result) @@ -2612,7 +2762,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_bool(napi_env env, napi_value value, bool* result) ``` @@ -2633,7 +2783,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_double(napi_env env, napi_value value, double* result) @@ -2656,7 +2806,7 @@ napiVersion: 6 --> -```C +```c napi_status napi_get_value_bigint_int64(napi_env env, napi_value value, int64_t* result, @@ -2682,7 +2832,7 @@ napiVersion: 6 --> -```C +```c napi_status napi_get_value_bigint_uint64(napi_env env, napi_value value, uint64_t* result, @@ -2708,7 +2858,7 @@ napiVersion: 6 --> -```C +```c napi_status napi_get_value_bigint_words(napi_env env, napi_value value, int* sign_bit, @@ -2737,7 +2887,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_external(napi_env env, napi_value value, void** result) @@ -2759,7 +2909,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_int32(napi_env env, napi_value value, int32_t* result) @@ -2778,7 +2928,7 @@ If the number exceeds the range of the 32 bit integer, then the result is truncated to the equivalent of the bottom 32 bits. This can result in a large -positive number becoming a negative number if the value is > 2^31 -1. +positive number becoming a negative number if the value is > 231 - 1. Non-finite number values (`NaN`, `+Infinity`, or `-Infinity`) set the result to zero. @@ -2789,7 +2939,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_int64(napi_env env, napi_value value, int64_t* result) @@ -2807,7 +2957,8 @@ `Number`. `Number` values outside the range of [`Number.MIN_SAFE_INTEGER`][] -`-(2^53 - 1)` - [`Number.MAX_SAFE_INTEGER`][] `(2^53 - 1)` will lose precision. +`-(2**53 - 1)` - [`Number.MAX_SAFE_INTEGER`][] `(2**53 - 1)` will lose +precision. Non-finite number values (`NaN`, `+Infinity`, or `-Infinity`) set the result to zero. @@ -2818,7 +2969,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_string_latin1(napi_env env, napi_value value, char* buf, @@ -2847,7 +2998,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_string_utf8(napi_env env, napi_value value, char* buf, @@ -2875,7 +3026,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_string_utf16(napi_env env, napi_value value, char16_t* buf, @@ -2903,7 +3054,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_value_uint32(napi_env env, napi_value value, uint32_t* result) @@ -2927,7 +3078,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_boolean(napi_env env, bool value, napi_value* result) ``` @@ -2947,7 +3098,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_global(napi_env env, napi_value* result) ``` @@ -2964,7 +3115,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_null(napi_env env, napi_value* result) ``` @@ -2981,7 +3132,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_undefined(napi_env env, napi_value* result) ``` @@ -2992,7 +3143,7 @@ This API returns the Undefined object. -## Working with JavaScript Values and Abstract Operations +## Working with JavaScript values and abstract operations N-API exposes a set of APIs to perform some abstract operations on JavaScript values. Some of these operations are documented under [Section 7][] @@ -3011,7 +3162,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_coerce_to_bool(napi_env env, napi_value value, napi_value* result) @@ -3033,7 +3184,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_coerce_to_number(napi_env env, napi_value value, napi_value* result) @@ -3055,7 +3206,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_coerce_to_object(napi_env env, napi_value value, napi_value* result) @@ -3077,7 +3228,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_coerce_to_string(napi_env env, napi_value value, napi_value* result) @@ -3099,7 +3250,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_typeof(napi_env env, napi_value value, napi_valuetype* result) ``` @@ -3114,7 +3265,12 @@ This API represents behavior similar to invoking the `typeof` Operator on the object as defined in [Section 12.5.5][] of the ECMAScript Language -Specification. However, it has support for detecting an External value. +Specification. However, there are some differences: + +1. It has support for detecting an External value. +2. It detects `null` as a separate type, while ECMAScript `typeof` would detect + `object`. + If `value` has a type that is invalid, an error is returned. ### napi_instanceof @@ -3123,7 +3279,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_instanceof(napi_env env, napi_value object, napi_value constructor, @@ -3148,7 +3304,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_is_array(napi_env env, napi_value value, bool* result) ``` @@ -3167,7 +3323,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_is_arraybuffer(napi_env env, napi_value value, bool* result) ``` @@ -3185,7 +3341,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_is_buffer(napi_env env, napi_value value, bool* result) ``` @@ -3204,7 +3360,7 @@ napiVersion: 5 --> -```C +```c napi_status napi_is_date(napi_env env, napi_value value, bool* result) ``` @@ -3223,7 +3379,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_is_error(napi_env env, napi_value value, bool* result) ``` @@ -3241,7 +3397,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_is_typedarray(napi_env env, napi_value value, bool* result) ``` @@ -3259,7 +3415,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_is_dataview(napi_env env, napi_value value, bool* result) ``` @@ -3277,7 +3433,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_strict_equals(napi_env env, napi_value lhs, napi_value rhs, @@ -3297,11 +3453,10 @@ ### napi_detach_arraybuffer -> Stability: 1 - Experimental - -```C +```c napi_status napi_detach_arraybuffer(napi_env env, napi_value arraybuffer) ``` @@ -3323,11 +3478,10 @@ ### napi_is_detached_arraybuffer -> Stability: 1 - Experimental - -```C +```c napi_status napi_is_detached_arraybuffer(napi_env env, napi_value arraybuffer, bool* result) @@ -3345,7 +3499,7 @@ operation as defined in [Section 24.1.1.2][] of the ECMAScript Language Specification. -## Working with JavaScript Properties +## Working with JavaScript properties N-API exposes a set of APIs to get and set properties on JavaScript objects. Some of these types are documented under [Section 7][] of the @@ -3378,7 +3532,7 @@ The equivalent can be done using N-API values with the following snippet: -```C +```c napi_status status = napi_generic_failure; // const obj = {} @@ -3405,7 +3559,7 @@ The equivalent can be done using N-API values with the following snippet: -```C +```c napi_status status = napi_generic_failure; // const arr = []; @@ -3432,7 +3586,7 @@ The following is the approximate equivalent of the N-API counterpart: -```C +```c napi_status status = napi_generic_failure; // const arr = [] @@ -3458,7 +3612,7 @@ The following is the approximate equivalent of the N-API counterpart: -```C +```c napi_status status = napi_status_generic_failure; // const obj = {}; @@ -3475,8 +3629,8 @@ // Set the properties napi_property_descriptor descriptors[] = { - { "foo", NULL, NULL, NULL, NULL, fooValue, napi_default, NULL }, - { "bar", NULL, NULL, NULL, NULL, barValue, napi_default, NULL } + { "foo", NULL, NULL, NULL, NULL, fooValue, napi_writable | napi_configurable, NULL }, + { "bar", NULL, NULL, NULL, NULL, barValue, napi_writable | napi_configurable, NULL } } status = napi_define_properties(env, obj, @@ -3487,8 +3641,14 @@ ### Structures #### napi_property_attributes + -```C +```c typedef enum { napi_default = 0, napi_writable = 1 << 0, @@ -3498,6 +3658,14 @@ // Used with napi_define_class to distinguish static properties // from instance properties. Ignored by napi_define_properties. napi_static = 1 << 10, + + // Default for class methods. + napi_default_method = napi_writable | napi_configurable, + + // Default for object properties, like in JS obj[prop]. + napi_default_property = napi_writable | + napi_enumerable | + napi_configurable, } napi_property_attributes; ``` @@ -3516,10 +3684,14 @@ * `napi_static`: The property will be defined as a static property on a class as opposed to an instance property, which is the default. This is used only by [`napi_define_class`][]. It is ignored by `napi_define_properties`. +* `napi_default_method`: The property is configureable, writeable but not + enumerable like a method in a JS class. +* `napi_default_property`: The property is writable, enumerable and configurable + like a property set via JS code `obj.key = value`. #### napi_property_descriptor -```C +```c typedef struct { // One of utf8name or name should be NULL. const char* utf8name; @@ -3548,16 +3720,16 @@ If this is passed in, set `value` and `method` to `NULL` (since these members won't be used). The given function is called implicitly by the runtime when the property is accessed from JavaScript code (or if a get on the property is - performed using a N-API call). + performed using a N-API call). [`napi_callback`][] provides more details. * `setter`: A function to call when a set access of the property is performed. If this is passed in, set `value` and `method` to `NULL` (since these members won't be used). The given function is called implicitly by the runtime when the property is set from JavaScript code (or if a set on the property is - performed using a N-API call). + performed using a N-API call). [`napi_callback`][] provides more details. * `method`: Set this to make the property descriptor object's `value` property to be a JavaScript function represented by `method`. If this is passed in, set `value`, `getter` and `setter` to `NULL` (since these members - won't be used). + won't be used). [`napi_callback`][] provides more details. * `attributes`: The attributes associated with the particular property. See [`napi_property_attributes`][]. * `data`: The callback data passed into `method`, `getter` and `setter` if this @@ -3570,7 +3742,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_property_names(napi_env env, napi_value object, napi_value* result); @@ -3595,7 +3767,7 @@ napiVersion: 6 --> -```C +```c napi_get_all_property_names(napi_env env, napi_value object, napi_key_collection_mode key_mode, @@ -3625,7 +3797,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_set_property(napi_env env, napi_value object, napi_value key, @@ -3647,7 +3819,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_property(napi_env env, napi_value object, napi_value key, @@ -3669,7 +3841,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_has_property(napi_env env, napi_value object, napi_value key, @@ -3691,7 +3863,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_delete_property(napi_env env, napi_value object, napi_value key, @@ -3714,7 +3886,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_has_own_property(napi_env env, napi_value object, napi_value key, @@ -3738,7 +3910,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_set_named_property(napi_env env, napi_value object, const char* utf8Name, @@ -3761,7 +3933,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_named_property(napi_env env, napi_value object, const char* utf8Name, @@ -3784,7 +3956,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_has_named_property(napi_env env, napi_value object, const char* utf8Name, @@ -3807,7 +3979,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_set_element(napi_env env, napi_value object, uint32_t index, @@ -3829,7 +4001,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_element(napi_env env, napi_value object, uint32_t index, @@ -3851,7 +4023,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_has_element(napi_env env, napi_value object, uint32_t index, @@ -3874,7 +4046,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_delete_element(napi_env env, napi_value object, uint32_t index, @@ -3897,7 +4069,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_define_properties(napi_env env, napi_value object, size_t property_count, @@ -3918,7 +4090,52 @@ `DefineOwnProperty()` (described in [Section 9.1.6][] of the ECMA-262 specification). -## Working with JavaScript Functions +#### napi_object_freeze + + +```c +napi_status napi_object_freeze(napi_env env, + napi_value object); +``` + +* `[in] env`: The environment that the N-API call is invoked under. +* `[in] object`: The object to freeze. + +Returns `napi_ok` if the API succeeded. + +This method freezes a given object. This prevents new properties from +being added to it, existing properties from being removed, prevents +changing the enumerability, configurability, or writability of existing +properties, and prevents the values of existing properties from being changed. +It also prevents the object's prototype from being changed. This is described +in [Section 19.1.2.6](https://tc39.es/ecma262/#sec-object.freeze) of the +ECMA-262 specification. + +#### napi_object_seal + + +```c +napi_status napi_object_seal(napi_env env, + napi_value object); +``` + +* `[in] env`: The environment that the N-API call is invoked under. +* `[in] object`: The object to seal. + +Returns `napi_ok` if the API succeeded. + +This method seals a given object. This prevents new properties from being +added to it, as well as marking all existing properties as non-configurable. +This is described in [Section 19.1.2.20](https://tc39.es/ecma262/#sec-object.seal) +of the ECMA-262 specification. + +## Working with JavaScript functions N-API provides a set of APIs that allow JavaScript code to call back into native code. N-API APIs that support calling back @@ -3948,7 +4165,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_call_function(napi_env env, napi_value recv, napi_value func, @@ -3984,7 +4201,7 @@ Then, the above function can be invoked from a native add-on using the following code: -```C +```c // Get the function named "AddTwo" on the global object napi_value global, add_two, arg; napi_status status = napi_get_global(env, &global); @@ -4017,7 +4234,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_function(napi_env env, const char* utf8name, size_t length, @@ -4032,7 +4249,7 @@ * `[in] length`: The length of the `utf8name` in bytes, or `NAPI_AUTO_LENGTH` if it is null-terminated. * `[in] cb`: The native function which should be called when this function - object is invoked. + object is invoked. [`napi_callback`][] provides more details. * `[in] data`: User-provided data context. This will be passed back into the function when invoked later. * `[out] result`: `napi_value` representing the JavaScript function object for @@ -4052,7 +4269,7 @@ add-on's module exports, set the newly created function on the exports object. A sample module might look as follows: -```C +```c napi_value SayHello(napi_env env, napi_callback_info info) { printf("Hello\n"); return NULL; @@ -4098,7 +4315,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_cb_info(napi_env env, napi_callback_info cbinfo, size_t* argc, @@ -4130,7 +4347,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_new_target(napi_env env, napi_callback_info cbinfo, napi_value* result) @@ -4151,7 +4368,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_new_instance(napi_env env, napi_value cons, size_t argc, @@ -4183,7 +4400,7 @@ The following can be approximated in N-API using the following snippet: -```C +```c // Get the constructor function MyObject napi_value global, constructor, arg, value; napi_status status = napi_get_global(env, &global); @@ -4205,7 +4422,7 @@ Returns `napi_ok` if the API succeeded. -## Object Wrap +## Object wrap N-API offers a way to "wrap" C++ classes and instances so that the class constructor and methods can be called from JavaScript. @@ -4226,7 +4443,7 @@ A common pattern used to address this problem is to save a persistent reference to the class constructor for later `instanceof` checks. -```C +```c napi_value MyClass_constructor = NULL; status = napi_get_reference_value(env, MyClass::es_constructor, &MyClass_constructor); assert(napi_ok == status); @@ -4242,13 +4459,150 @@ The reference must be freed once it is no longer needed. +There are occasions where `napi_instanceof()` is insufficient for ensuring that +a JavaScript object is a wrapper for a certain native type. This is the case +especially when wrapped JavaScript objects are passed back into the addon via +static methods rather than as the `this` value of prototype methods. In such +cases there is a chance that they may be unwrapped incorrectly. + +```js +const myAddon = require('./build/Release/my_addon.node'); + +// `openDatabase()` returns a JavaScript object that wraps a native database +// handle. +const dbHandle = myAddon.openDatabase(); + +// `query()` returns a JavaScript object that wraps a native query handle. +const queryHandle = myAddon.query(dbHandle, 'Gimme ALL the things!'); + +// There is an accidental error in the line below. The first parameter to +// `myAddon.queryHasRecords()` should be the database handle (`dbHandle`), not +// the query handle (`query`), so the correct condition for the while-loop +// should be +// +// myAddon.queryHasRecords(dbHandle, queryHandle) +// +while (myAddon.queryHasRecords(queryHandle, dbHandle)) { + // retrieve records +} +``` + +In the above example `myAddon.queryHasRecords()` is a method that accepts two +arguments. The first is a database handle and the second is a query handle. +Internally, it unwraps the first argument and casts the resulting pointer to a +native database handle. It then unwraps the second argument and casts the +resulting pointer to a query handle. If the arguments are passed in the wrong +order, the casts will work, however, there is a good chance that the underlying +database operation will fail, or will even cause an invalid memory access. + +To ensure that the pointer retrieved from the first argument is indeed a pointer +to a database handle and, similarly, that the pointer retrieved from the second +argument is indeed a pointer to a query handle, the implementation of +`queryHasRecords()` has to perform a type validation. Retaining the JavaScript +class constructor from which the database handle was instantiated and the +constructor from which the query handle was instantiated in `napi_ref`s can +help, because `napi_instanceof()` can then be used to ensure that the instances +passed into `queryHashRecords()` are indeed of the correct type. + +Unfortunately, `napi_instanceof()` does not protect against prototype +manipulation. For example, the prototype of the database handle instance can be +set to the prototype of the constructor for query handle instances. In this +case, the database handle instance can appear as a query handle instance, and it +will pass the `napi_instanceof()` test for a query handle instance, while still +containing a pointer to a database handle. + +To this end, N-API provides type-tagging capabilities. + +A type tag is a 128-bit integer unique to the addon. N-API provides the +`napi_type_tag` structure for storing a type tag. When such a value is passed +along with a JavaScript object stored in a `napi_value` to +`napi_type_tag_object()`, the JavaScript object will be "marked" with the +type tag. The "mark" is invisible on the JavaScript side. When a JavaScript +object arrives into a native binding, `napi_check_object_type_tag()` can be used +along with the original type tag to determine whether the JavaScript object was +previously "marked" with the type tag. This creates a type-checking capability +of a higher fidelity than `napi_instanceof()` can provide, because such type- +tagging survives prototype manipulation and addon unloading/reloading. + +Continuing the above example, the following skeleton addon implementation +illustrates the use of `napi_type_tag_object()` and +`napi_check_object_type_tag()`. + +```c +// This value is the type tag for a database handle. The command +// +// uuidgen | sed -r -e 's/-//g' -e 's/(.{16})(.*)/0x\1, 0x\2/' +// +// can be used to obtain the two values with which to initialize the structure. +static const napi_type_tag DatabaseHandleTypeTag = { + 0x1edf75a38336451d, 0xa5ed9ce2e4c00c38 +}; + +// This value is the type tag for a query handle. +static const napi_type_tag QueryHandleTypeTag = { + 0x9c73317f9fad44a3, 0x93c3920bf3b0ad6a +}; + +static napi_value +openDatabase(napi_env env, napi_callback_info info) { + napi_status status; + napi_value result; + + // Perform the underlying action which results in a database handle. + DatabaseHandle* dbHandle = open_database(); + + // Create a new, empty JS object. + status = napi_create_object(env, &result); + if (status != napi_ok) return NULL; + + // Tag the object to indicate that it holds a pointer to a `DatabaseHandle`. + status = napi_type_tag_object(env, result, &DatabaseHandleTypeTag); + if (status != napi_ok) return NULL; + + // Store the pointer to the `DatabaseHandle` structure inside the JS object. + status = napi_wrap(env, result, dbHandle, NULL, NULL, NULL); + if (status != napi_ok) return NULL; + + return result; +} + +// Later when we receive a JavaScript object purporting to be a database handle +// we can use `napi_check_object_type_tag()` to ensure that it is indeed such a +// handle. + +static napi_value +query(napi_env env, napi_callback_info info) { + napi_status status; + size_t argc = 2; + napi_value argv[2]; + bool is_db_handle; + + status = napi_get_cb_info(env, info, &argc, argv, NULL, NULL); + if (status != napi_ok) return NULL; + + // Check that the object passed as the first parameter has the previously + // applied tag. + status = napi_check_object_type_tag(env, + argv[0], + &DatabaseHandleTypeTag, + &is_db_handle); + if (status != napi_ok) return NULL; + + // Throw a `TypeError` if it doesn't. + if (!is_db_handle) { + // Throw a TypeError. + return NULL; + } +} +``` + ### napi_define_class -```C +```c napi_status napi_define_class(napi_env env, const char* utf8name, size_t length, @@ -4266,8 +4620,8 @@ * `[in] length`: The length of the `utf8name` in bytes, or `NAPI_AUTO_LENGTH` if it is null-terminated. * `[in] constructor`: Callback function that handles constructing instances - of the class. (This should be a static method on the class, not an actual - C++ constructor function.) + of the class. This should be a static method on the class, not an actual + C++ constructor function. [`napi_callback`][] provides more details. * `[in] data`: Optional data to be passed to the constructor callback as the `data` property of the callback info. * `[in] property_count`: Number of items in the `properties` array argument. @@ -4313,7 +4667,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_wrap(napi_env env, napi_value js_object, void* native_object, @@ -4329,6 +4683,7 @@ JavaScript object. * `[in] finalize_cb`: Optional native callback that can be used to free the native instance when the JavaScript object is ready for garbage-collection. + [`napi_finalize`][] provides more details. * `[in] finalize_hint`: Optional contextual hint that is passed to the finalize callback. * `[out] result`: Optional reference to the wrapped object. @@ -4370,7 +4725,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_unwrap(napi_env env, napi_value js_object, void** result); @@ -4397,7 +4752,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_remove_wrap(napi_env env, napi_value js_object, void** result); @@ -4414,6 +4769,58 @@ callback was associated with the wrapping, it will no longer be called when the JavaScript object becomes garbage-collected. +### napi_type_tag_object + + +```c +napi_status napi_type_tag_object(napi_env env, + napi_value js_object, + const napi_type_tag* type_tag); +``` + +* `[in] env`: The environment that the API is invoked under. +* `[in] js_object`: The JavaScript object to be marked. +* `[in] type_tag`: The tag with which the object is to be marked. + +Returns `napi_ok` if the API succeeded. + +Associates the value of the `type_tag` pointer with the JavaScript object. +`napi_check_object_type_tag()` can then be used to compare the tag that was +attached to the object with one owned by the addon to ensure that the object +has the right type. + +If the object already has an associated type tag, this API will return +`napi_invalid_arg`. + +### napi_check_object_type_tag + + +```c +napi_status napi_check_object_type_tag(napi_env env, + napi_value js_object, + const napi_type_tag* type_tag, + bool* result); +``` + +* `[in] env`: The environment that the API is invoked under. +* `[in] js_object`: The JavaScript object whose type tag to examine. +* `[in] type_tag`: The tag with which to compare any tag found on the object. +* `[out] result`: Whether the type tag given matched the type tag on the +object. `false` is also returned if no type tag was found on the object. + +Returns `napi_ok` if the API succeeded. + +Compares the pointer given as `type_tag` with any that can be found on +`js_object`. If no tag is found on `js_object` or, if a tag is found but it does +not match `type_tag`, then `result` is set to `false`. If a tag is found and it +matches `type_tag`, then `result` is set to `true`. + ### napi_add_finalizer -```C +```c napi_status napi_add_finalizer(napi_env env, napi_value js_object, void* native_object, @@ -4437,6 +4844,7 @@ object. * `[in] finalize_cb`: Native callback that will be used to free the native data when the JavaScript object is ready for garbage-collection. + [`napi_finalize`][] provides more details. * `[in] finalize_hint`: Optional contextual hint that is passed to the finalize callback. * `[out] result`: Optional reference to the JavaScript object. @@ -4459,7 +4867,7 @@ be invoked. Therefore, when obtaining a reference a finalize callback is also required in order to enable correct disposal of the reference. -## Simple Asynchronous Operations +## Simple asynchronous operations Addon modules often need to leverage async helpers from libuv as part of their implementation. This allows them to schedule work to be executed asynchronously @@ -4486,7 +4894,7 @@ These functions implement the following interfaces: -```C +```c typedef void (*napi_async_execute_callback)(napi_env env, void* data); typedef void (*napi_async_complete_callback)(napi_env env, @@ -4501,7 +4909,7 @@ Once created the async worker can be queued for execution using the [`napi_queue_async_work`][] function: -```C +```c napi_status napi_queue_async_work(napi_env env, napi_async_work work); ``` @@ -4524,7 +4932,7 @@ description: Added `async_resource` and `async_resource_name` parameters. --> -```C +```c napi_status napi_create_async_work(napi_env env, napi_value async_resource, napi_value async_resource_name, @@ -4544,7 +4952,8 @@ and can execute in parallel with the main event loop thread. * `[in] complete`: The native function which will be called when the asynchronous logic is completed or is cancelled. The given function is called - from the main event loop thread. + from the main event loop thread. [`napi_async_complete_callback`][] provides + more details. * `[in] data`: User-provided data context. This will be passed back into the execute and complete functions. * `[out] result`: `napi_async_work*` which is the handle to the newly created @@ -4569,7 +4978,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_delete_async_work(napi_env env, napi_async_work work); ``` @@ -4589,7 +4998,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_queue_async_work(napi_env env, napi_async_work work); ``` @@ -4609,7 +5018,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_cancel_async_work(napi_env env, napi_async_work work); ``` @@ -4628,7 +5037,7 @@ This API can be called even if there is a pending JavaScript exception. -## Custom Asynchronous Operations +## Custom asynchronous operations The simple asynchronous work APIs above may not be appropriate for every scenario. When using any other asynchronous mechanism, the following APIs @@ -4641,7 +5050,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_async_init(napi_env env, napi_value async_resource, napi_value async_resource_name, @@ -4669,7 +5078,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_async_destroy(napi_env env, napi_async_context async_context); ``` @@ -4690,7 +5099,7 @@ description: Added `async_context` parameter. --> -```C +```c NAPI_EXTERN napi_status napi_make_callback(napi_env env, napi_async_context async_context, napi_value recv, @@ -4728,13 +5137,16 @@ may be required when implementing custom async behavior that does not use `napi_create_async_work`. +Any `process.nextTick`s or Promises scheduled on the microtask queue by +JavaScript during the callback are ran before returning back to C/C++. + ### napi_open_callback_scope -```C +```c NAPI_EXTERN napi_status napi_open_callback_scope(napi_env env, napi_value resource_object, napi_async_context context, @@ -4761,7 +5173,7 @@ napiVersion: 3 --> -```C +```c NAPI_EXTERN napi_status napi_close_callback_scope(napi_env env, napi_callback_scope scope) ``` @@ -4771,7 +5183,7 @@ This API can be called even if there is a pending JavaScript exception. -## Version Management +## Version management ### napi_get_node_version -```C +```c typedef struct { uint32_t major; uint32_t minor; @@ -4808,7 +5220,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_get_version(napi_env env, uint32_t* result); ``` @@ -4832,7 +5244,7 @@ * If the function is not available, provide an alternate implementation that does not use the function. -## Memory Management +## Memory management ### napi_adjust_external_memory -```C +```c NAPI_EXTERN napi_status napi_adjust_external_memory(napi_env env, int64_t change_in_bytes, int64_t* result); @@ -4921,7 +5333,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_create_promise(napi_env env, napi_deferred* deferred, napi_value* promise); @@ -4943,7 +5355,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_resolve_deferred(napi_env env, napi_deferred deferred, napi_value resolution); @@ -4968,7 +5380,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_reject_deferred(napi_env env, napi_deferred deferred, napi_value rejection); @@ -4993,7 +5405,7 @@ napiVersion: 1 --> -```C +```c napi_status napi_is_promise(napi_env env, napi_value value, bool* is_promise); @@ -5015,7 +5427,7 @@ napiVersion: 1 --> -```C +```c NAPI_EXTERN napi_status napi_run_script(napi_env env, napi_value script, napi_value* result); @@ -5051,7 +5463,7 @@ napiVersion: 2 --> -```C +```c NAPI_EXTERN napi_status napi_get_uv_event_loop(napi_env env, struct uv_loop_s** loop); ``` @@ -5059,7 +5471,7 @@ * `[in] env`: The environment that the API is invoked under. * `[out] loop`: The current libuv loop instance. -## Asynchronous Thread-safe Function Calls +## Asynchronous thread-safe function calls JavaScript functions can normally only be called from a native addon's main thread. If an addon creates additional threads, then N-API functions that @@ -5092,7 +5504,9 @@ be retrieved from any thread with a call to `napi_get_threadsafe_function_context()`. -`napi_call_threadsafe_function()` can then be used for initiating a call into +### Calling a thread-safe function + +`napi_call_threadsafe_function()` can be used for initiating a call into JavaScript. `napi_call_threadsafe_function()` accepts a parameter which controls whether the API behaves blockingly. If set to `napi_tsfn_nonblocking`, the API behaves non-blockingly, returning `napi_queue_full` if the queue was full, @@ -5120,6 +5534,8 @@ It is not necessary to call into JavaScript via `napi_make_callback()` because N-API runs `call_js_cb` in a context appropriate for callbacks. +### Reference counting of thread-safe functions + Threads can be added to and removed from a `napi_threadsafe_function` object during its existence. Thus, in addition to specifying an initial number of threads upon creation, `napi_acquire_threadsafe_function` can be called to @@ -5135,11 +5551,14 @@ should be the last API call made in conjunction with a given `napi_threadsafe_function`, because after the call completes, there is no guarantee that the `napi_threadsafe_function` is still allocated. For the same -reason, do not make use of a thread-safe function +reason, do not use a thread-safe function after receiving a return value of `napi_closing` in response to a call to `napi_call_threadsafe_function`. Data associated with the `napi_threadsafe_function` can be freed in its `napi_finalize` callback which -was passed to `napi_create_threadsafe_function()`. +was passed to `napi_create_threadsafe_function()`. The parameter +`initial_thread_count` of `napi_create_threadsafe_function` marks the initial +number of aquisitions of the thread-safe functions, instead of calling +`napi_acquire_threadsafe_function` multiple times at creation. Once the number of threads making use of a `napi_threadsafe_function` reaches zero, no further threads can start making use of it by calling @@ -5155,10 +5574,12 @@ will return `napi_closing`, thus informing the threads that it is no longer possible to make asynchronous calls to the thread-safe function. This can be used as a criterion for terminating the thread. **Upon receiving a return value -of `napi_closing` from `napi_call_threadsafe_function()` a thread must make no -further use of the thread-safe function because it is no longer guaranteed to +of `napi_closing` from `napi_call_threadsafe_function()` a thread must not use +the thread-safe function anymore because it is no longer guaranteed to be allocated.** +### Deciding whether to keep the process running + Similarly to libuv handles, thread-safe functions can be "referenced" and "unreferenced". A "referenced" thread-safe function will cause the event loop on the thread on which it is created to remain alive until the thread-safe function @@ -5166,6 +5587,10 @@ prevent the event loop from exiting. The APIs `napi_ref_threadsafe_function` and `napi_unref_threadsafe_function` exist for this purpose. +Neither does `napi_unref_threadsafe_function` mark the thread-safe functions as +able to be destroyed nor does `napi_ref_threadsafe_function` prevent it from +being destroyed. + ### napi_create_threadsafe_function -```C +```c NAPI_EXTERN napi_status napi_create_threadsafe_function(napi_env env, napi_value func, @@ -5201,8 +5626,9 @@ the kind of resource that is being provided for diagnostic information exposed by the `async_hooks` API. * `[in] max_queue_size`: Maximum size of the queue. `0` for no limit. -* `[in] initial_thread_count`: The initial number of threads, including the main - thread, which will be making use of this function. +* `[in] initial_thread_count`: The initial number of acquisitions, i.e. the + initial number of threads, including the main thread, which will be making use + of this function. * `[in] thread_finalize_data`: Optional data to be passed to `thread_finalize_cb`. * `[in] thread_finalize_cb`: Optional function to call when the `napi_threadsafe_function` is being destroyed. @@ -5212,6 +5638,7 @@ response to a call on a different thread. This callback will be called on the main thread. If not given, the JavaScript function will be called with no parameters and with `undefined` as its `this` value. + [`napi_threadsafe_function_call_js`][] provides more details. * `[out] result`: The asynchronous thread-safe JavaScript function. ### napi_get_threadsafe_function_context @@ -5221,7 +5648,7 @@ napiVersion: 4 --> -```C +```c NAPI_EXTERN napi_status napi_get_threadsafe_function_context(napi_threadsafe_function func, void** result); @@ -5239,7 +5666,7 @@ napiVersion: 4 --> -```C +```c NAPI_EXTERN napi_status napi_call_threadsafe_function(napi_threadsafe_function func, void* data, @@ -5267,7 +5694,7 @@ napiVersion: 4 --> -```C +```c NAPI_EXTERN napi_status napi_acquire_threadsafe_function(napi_threadsafe_function func); ``` @@ -5289,7 +5716,7 @@ napiVersion: 4 --> -```C +```c NAPI_EXTERN napi_status napi_release_threadsafe_function(napi_threadsafe_function func, napi_threadsafe_function_release_mode mode); @@ -5318,7 +5745,7 @@ napiVersion: 4 --> -```C +```c NAPI_EXTERN napi_status napi_ref_threadsafe_function(napi_env env, napi_threadsafe_function func); ``` @@ -5330,6 +5757,11 @@ should not exit until `func` has been destroyed. Similar to [`uv_ref`][] it is also idempotent. +Neither does `napi_unref_threadsafe_function` mark the thread-safe functions as +able to be destroyed nor does `napi_ref_threadsafe_function` prevent it from +being destroyed. `napi_acquire_threadsafe_function` and +`napi_release_threadsafe_function` are available for that purpose. + This API may only be called from the main thread. ### napi_unref_threadsafe_function @@ -5339,7 +5771,7 @@ napiVersion: 4 --> -```C +```c NAPI_EXTERN napi_status napi_unref_threadsafe_function(napi_env env, napi_threadsafe_function func); ``` @@ -5353,20 +5785,45 @@ This API may only be called from the main thread. +## Miscellaneous utilities + +## node_api_get_module_file_name + + + +> Stability: 1 - Experimental + +```c +NAPI_EXTERN napi_status +node_api_get_module_file_name(napi_env env, const char** result); + +``` + +* `[in] env`: The environment that the API is invoked under. +* `[out] result`: A URL containing the absolute path of the + location from which the add-on was loaded. For a file on the local + file system it will start with `file://`. The string is null-terminated and + owned by `env` and must thus not be modified or freed. + +`result` may be an empty string if the add-on loading process fails to establish +the add-on's file name during loading. + [ABI Stability]: https://nodejs.org/en/docs/guides/abi-stability/ [AppVeyor]: https://www.appveyor.com [C++ Addons]: addons.html [CMake.js]: https://github.com/cmake-js/cmake-js [CMake]: https://cmake.org [ECMAScript Language Specification]: https://tc39.github.io/ecma262/ -[Error Handling]: #n_api_error_handling +[Error handling]: #n_api_error_handling [GCC]: https://gcc.gnu.org [GYP]: https://gyp.gsrc.io [GitHub releases]: https://help.github.com/en/github/administering-a-repository/about-releases [LLVM]: https://llvm.org [Native Abstractions for Node.js]: https://github.com/nodejs/nan -[Object Lifetime Management]: #n_api_object_lifetime_management -[Object Wrap]: #n_api_object_wrap +[Object lifetime management]: #n_api_object_lifetime_management +[Object wrap]: #n_api_object_wrap [Section 12.10.4]: https://tc39.github.io/ecma262/#sec-instanceofoperator [Section 12.5.5]: https://tc39.github.io/ecma262/#sec-typeof-operator [Section 19.2]: https://tc39.github.io/ecma262/#sec-function-objects @@ -5396,16 +5853,20 @@ [Section 24.1.1.2]: https://tc39.es/ecma262/#sec-isdetachedbuffer [Travis CI]: https://travis-ci.org [Visual Studio]: https://visualstudio.microsoft.com -[Working with JavaScript Properties]: #n_api_working_with_javascript_properties +[Working with JavaScript properties]: #n_api_working_with_javascript_properties [Xcode]: https://developer.apple.com/xcode/ [`Number.MAX_SAFE_INTEGER`]: https://tc39.github.io/ecma262/#sec-number.max_safe_integer [`Number.MIN_SAFE_INTEGER`]: https://tc39.github.io/ecma262/#sec-number.min_safe_integer [`Worker`]: worker_threads.html#worker_threads_class_worker [`global`]: globals.html#globals_global [`init` hooks]: async_hooks.html#async_hooks_init_asyncid_type_triggerasyncid_resource +[`napi_add_async_cleanup_hook`]: #n_api_napi_add_async_cleanup_hook [`napi_add_env_cleanup_hook`]: #n_api_napi_add_env_cleanup_hook [`napi_add_finalizer`]: #n_api_napi_add_finalizer +[`napi_async_cleanup_hook`]: #n_api_napi_async_cleanup_hook +[`napi_async_complete_callback`]: #n_api_napi_async_complete_callback [`napi_async_init`]: #n_api_napi_async_init +[`napi_callback`]: #n_api_napi_callback [`napi_cancel_async_work`]: #n_api_napi_cancel_async_work [`napi_close_callback_scope`]: #n_api_napi_close_callback_scope [`napi_close_escapable_handle_scope`]: #n_api_napi_close_escapable_handle_scope @@ -5420,6 +5881,7 @@ [`napi_delete_async_work`]: #n_api_napi_delete_async_work [`napi_delete_reference`]: #n_api_napi_delete_reference [`napi_escape_handle`]: #n_api_napi_escape_handle +[`napi_finalize`]: #n_api_napi_finalize [`napi_get_and_clear_last_exception`]: #n_api_napi_get_and_clear_last_exception [`napi_get_array_length`]: #n_api_napi_get_array_length [`napi_get_element`]: #n_api_napi_get_element @@ -5428,6 +5890,7 @@ [`napi_get_reference_value`]: #n_api_napi_get_reference_value [`napi_get_value_external`]: #n_api_napi_get_value_external [`napi_has_property`]: #n_api_napi_has_property +[`napi_instanceof`]: #n_api_napi_instanceof [`napi_is_error`]: #n_api_napi_is_error [`napi_is_exception_pending`]: #n_api_napi_is_exception_pending [`napi_make_callback`]: #n_api_napi_make_callback @@ -5439,24 +5902,27 @@ [`napi_queue_async_work`]: #n_api_napi_queue_async_work [`napi_reference_ref`]: #n_api_napi_reference_ref [`napi_reference_unref`]: #n_api_napi_reference_unref +[`napi_remove_async_cleanup_hook`]: #n_api_napi_remove_async_cleanup_hook +[`napi_remove_env_cleanup_hook`]: #n_api_napi_remove_env_cleanup_hook [`napi_set_instance_data`]: #n_api_napi_set_instance_data [`napi_set_property`]: #n_api_napi_set_property +[`napi_threadsafe_function_call_js`]: #n_api_napi_threadsafe_function_call_js [`napi_throw_error`]: #n_api_napi_throw_error [`napi_throw_range_error`]: #n_api_napi_throw_range_error [`napi_throw_type_error`]: #n_api_napi_throw_type_error [`napi_throw`]: #n_api_napi_throw [`napi_unwrap`]: #n_api_napi_unwrap [`napi_wrap`]: #n_api_napi_wrap +[`node-addon-api`]: https://github.com/nodejs/node-addon-api [`node_api.h`]: https://github.com/nodejs/node/blob/master/src/node_api.h [`process.release`]: process.html#process_process_release -[`uv_ref`]: http://docs.libuv.org/en/v1.x/handle.html#c.uv_ref -[`uv_unref`]: http://docs.libuv.org/en/v1.x/handle.html#c.uv_unref +[`uv_ref`]: https://docs.libuv.org/en/v1.x/handle.html#c.uv_ref +[`uv_unref`]: https://docs.libuv.org/en/v1.x/handle.html#c.uv_unref [async_hooks `type`]: async_hooks.html#async_hooks_type [context-aware addons]: addons.html#addons_context_aware_addons [docs]: https://github.com/nodejs/node-addon-api#api-documentation [global scope]: globals.html [module scope]: modules.html#modules_the_module_scope -[node-addon-api]: https://github.com/nodejs/node-addon-api [node-gyp]: https://github.com/nodejs/node-gyp [node-pre-gyp]: https://github.com/mapbox/node-pre-gyp [prebuild]: https://github.com/prebuild/prebuild diff -Nru nodejs-mozilla-12.18.1/doc/api/net.html nodejs-mozilla-12.22.12/doc/api/net.html --- nodejs-mozilla-12.18.1/doc/api/net.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/net.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Net | Node.js v12.18.1 Documentation + + Net | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    18. @@ -121,17 +128,14 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Net

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Net
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          IPC Support

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • IPC support
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Class: net.Server

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Class: net.Server
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • new net.Server([options][, connectionListener])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Event: 'close'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -142,8 +146,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • server.close([callback])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • server.connections
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • server.getConnections(callback)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            server.listen()

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • server.listen()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Class: net.Socket

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Class: net.Socket
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • new net.Socket([options])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Event: 'close'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -174,8 +176,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • socket.bufferSize
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • socket.bytesRead
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • socket.bytesWritten
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              socket.connect()

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • socket.connect()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              net.connect()

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • net.connect()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              net.createConnection()

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • net.createConnection()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • net.createConnection(options[, connectListener])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • net.createConnection(path[, connectListener])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -233,13 +232,13 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Source Code: lib/net.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The net module provides an asynchronous network API for creating stream-based TCP or IPC servers (net.createServer()) and clients (net.createConnection()).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const net = require('net');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                IPC Support#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const net = require('net');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                IPC support#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The net module supports IPC with named pipes on Windows, and Unix domain sockets on other operating systems.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Identifying paths for IPC connections#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                @@ -266,8 +265,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                JavaScript string escaping requires paths to be specified with extra backslash escaping such as:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                net.createServer().listen(
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  path.join('\\\\?\\pipe', process.cwd(), 'myctl'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + path.join('\\\\?\\pipe', process.cwd(), 'myctl'));

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Class: net.Server#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  options <Object> Available options are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • options <Object> Available options are:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • fd <number> If specified, wrap around an existing socket with the given file descriptor, otherwise a new socket will be created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -801,13 +794,12 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  For both types, available options include:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    onread <Object> If specified, incoming data is stored in a single buffer +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • onread <Object> If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket. This will cause the streaming functionality to not provide any data. The socket will emit events like 'error', 'end', and 'close' as usual. Methods like pause() and resume() will also behave as -expected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +expected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • buffer <Buffer> | <Uint8Array> | <Function> Either a reusable chunk of memory to use for storing incoming data or a function that returns such.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -820,19 +812,18 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Following is an example of a client using the onread option:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const net = require('net');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const net = require('net');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     net.connect({
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  port: 80,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  onread: {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -    // Reuses a 4KiB Buffer for every read from the socket.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -    buffer: Buffer.alloc(4 * 1024),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -    callback: function(nread, buf) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // Received data is available in `buf` from 0 to `nread`.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      console.log(buf.toString('utf8', 0, nread));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  port: 80,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  onread: {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +    // Reuses a 4KiB Buffer for every read from the socket.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +    buffer: Buffer.alloc(4 * 1024),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +    callback: function(nread, buf) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // Received data is available in `buf` from 0 to `nread`.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      console.log(buf.toString('utf8', 0, nread));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    socket.connect(path[, connectListener])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • path <string> Path the client should connect to. See @@ -870,7 +861,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If true, socket.connect(options[, connectListener]) was called and has not yet finished. It will stay true until the socket becomes -connected, then it is set to false and the 'connect' event is emitted. Note +connected, then it is set to false and the 'connect' event is emitted. Note that the socket.connect(options[, connectListener]) callback is a listener for the 'connect' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      @@ -1034,12 +1025,11 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      When an idle timeout is triggered the socket will receive a 'timeout' event but the connection will not be severed. The user must manually call socket.end() or socket.destroy() to end the connection.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      socket.setTimeout(3000);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -socket.on('timeout', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -  console.log('socket timeout');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      socket.setTimeout(3000);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +socket.on('timeout', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  console.log('socket timeout');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         socket.end();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If timeout is 0, then the existing idle timeout is disabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The optional callback parameter will be added as a one-time listener for the 'timeout' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      @@ -1158,23 +1148,21 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Following is an example of a client of the echo server described in the net.createServer() section:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const net = require('net');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -const client = net.createConnection({ port: 8124 }, () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  // 'connect' listener.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  console.log('connected to server!');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  client.write('world!\r\n');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const net = require('net');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +const client = net.createConnection({ port: 8124 }, () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  // 'connect' listener.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  console.log('connected to server!');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  client.write('world!\r\n');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -client.on('data', (data) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  console.log(data.toString());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +client.on('data', (data) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  console.log(data.toString());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       client.end();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -client.on('end', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  console.log('disconnected from server');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +client.on('end', () => { + console.log('disconnected from server'); +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    To connect on the socket /tmp/echo.sock:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const client = net.createConnection({ path: '/tmp/echo.sock' });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const client = net.createConnection({ path: '/tmp/echo.sock' });

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    net.createConnection(path[, connectListener])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      options <Object>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • options <Object>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • allowHalfOpen <boolean> Indicates whether half-opened TCP connections are allowed. Default: false.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -1248,34 +1235,30 @@ listen() to.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Here is an example of an TCP echo server which listens for connections on port 8124:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const net = require('net');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -const server = net.createServer((c) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  // 'connection' listener.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  console.log('client connected');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  c.on('end', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    console.log('client disconnected');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const net = require('net');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +const server = net.createServer((c) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  // 'connection' listener.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  console.log('client connected');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  c.on('end', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    console.log('client disconnected');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  c.write('hello\r\n');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  c.write('hello\r\n');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           c.pipe(c);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -server.on('error', (err) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  throw err;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +server.on('error', (err) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  throw err;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -server.listen(8124, () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  console.log('server bound');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +server.listen(8124, () => { + console.log('server bound'); +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Test this by using telnet:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $ telnet localhost 8124
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $ telnet localhost 8124

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        To listen on the socket /tmp/echo.sock:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        server.listen('/tmp/echo.sock', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  console.log('server bound');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        server.listen('/tmp/echo.sock', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  console.log('server bound');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Use nc to connect to a Unix domain socket server:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $ nc -U /tmp/echo.sock
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $ nc -U /tmp/echo.sock

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        net.isIP(input)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns true if input is a version 6 IP address, otherwise returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/net.json nodejs-mozilla-12.22.12/doc/api/net.json --- nodejs-mozilla-12.18.1/doc/api/net.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/net.json 2022-04-05 07:17:04.000000000 +0000 @@ -6,10 +6,10 @@ "textRaw": "Net", "name": "net", "introduced_in": "v0.10.0", - "desc": "\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The net module provides an asynchronous network API for creating stream-based\nTCP or IPC servers (net.createServer()) and clients\n(net.createConnection()).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const net = require('net');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Source Code: lib/net.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The net module provides an asynchronous network API for creating stream-based\nTCP or IPC servers (net.createServer()) and clients\n(net.createConnection()).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const net = require('net');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { - "textRaw": "IPC Support", + "textRaw": "IPC support", "name": "ipc_support", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The net module supports IPC with named pipes on Windows, and Unix domain\nsockets on other operating systems.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -22,7 +22,7 @@ } ], "type": "module", - "displayName": "IPC Support" + "displayName": "IPC support" } ], "classes": [ @@ -191,7 +191,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Start a server listening for connections. A net.Server can be a TCP or\nan IPC server depending on what it listens to.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Possible signatures:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This function is asynchronous. When the server starts listening, the\n'listening' event will be emitted. The last parameter callback\nwill be added as a listener for the 'listening' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                All listen() methods can take a backlog parameter to specify the maximum\nlength of the queue of pending connections. The actual length will be determined\nby the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn\non Linux. The default value of this parameter is 511 (not 512).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                All net.Socket are set to SO_REUSEADDR (see socket(7) for\ndetails).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The server.listen() method can be called again if and only if there was an\nerror during the first server.listen() call or server.close() has been\ncalled. Otherwise, an ERR_SERVER_ALREADY_LISTEN error will be thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                One of the most common errors raised when listening is EADDRINUSE.\nThis happens when another server is already listening on the requested\nport/path/handle. One way to handle this would be to retry\nafter a certain amount of time:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                server.on('error', (e) => {\n  if (e.code === 'EADDRINUSE') {\n    console.log('Address in use, retrying...');\n    setTimeout(() => {\n      server.close();\n      server.listen(PORT, HOST);\n    }, 1000);\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Start a server listening for connections. A net.Server can be a TCP or\nan IPC server depending on what it listens to.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Possible signatures:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This function is asynchronous. When the server starts listening, the\n'listening' event will be emitted. The last parameter callback\nwill be added as a listener for the 'listening' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                All listen() methods can take a backlog parameter to specify the maximum\nlength of the queue of pending connections. The actual length will be determined\nby the OS through sysctl settings such as tcp_max_syn_backlog and somaxconn\non Linux. The default value of this parameter is 511 (not 512).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                All net.Socket are set to SO_REUSEADDR (see socket(7) for\ndetails).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The server.listen() method can be called again if and only if there was an\nerror during the first server.listen() call or server.close() has been\ncalled. Otherwise, an ERR_SERVER_ALREADY_LISTEN error will be thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                One of the most common errors raised when listening is EADDRINUSE.\nThis happens when another server is already listening on the requested\nport/path/handle. One way to handle this would be to retry\nafter a certain amount of time:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                server.on('error', (e) => {\n  if (e.code === 'EADDRINUSE') {\n    console.log('Address in use, retrying...');\n    setTimeout(() => {\n      server.close();\n      server.listen(PORT, HOST);\n    }, 1000);\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "methods": [ { "textRaw": "`server.listen(handle[, backlog][, callback])`", @@ -761,7 +761,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Initiate a connection on a given socket. Normally this method is not needed,\nthe socket should be created and opened with net.createConnection(). Use\nthis only when implementing a custom Socket.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For TCP connections, available options are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • port <number> Required. Port the socket should connect to.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • host <string> Host the socket should connect to. Default: 'localhost'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • localAddress <string> Local address the socket should connect from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • localPort <number> Local port the socket should connect from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • family <number>: Version of IP stack. Must be 4, 6, or 0. The value\n0 indicates that both IPv4 and IPv6 addresses are allowed. Default: 0.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • hints <number> Optional dns.lookup() hints.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • lookup <Function> Custom lookup function. Default: dns.lookup().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For IPC connections, available options are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For both types, available options include:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  onread <Object> If specified, incoming data is stored in a single buffer\nand passed to the supplied callback when data arrives on the socket.\nThis will cause the streaming functionality to not provide any data.\nThe socket will emit events like 'error', 'end', and 'close'\nas usual. Methods like pause() and resume() will also behave as\nexpected.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • buffer <Buffer> | <Uint8Array> | <Function> Either a reusable chunk of memory to\nuse for storing incoming data or a function that returns such.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • callback <Function> This function is called for every chunk of incoming\ndata. Two arguments are passed to it: the number of bytes written to\nbuffer and a reference to buffer. Return false from this function to\nimplicitly pause() the socket. This function will be executed in the\nglobal context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Following is an example of a client using the onread option:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const net = require('net');\nnet.connect({\n  port: 80,\n  onread: {\n    // Reuses a 4KiB Buffer for every read from the socket.\n    buffer: Buffer.alloc(4 * 1024),\n    callback: function(nread, buf) {\n      // Received data is available in `buf` from 0 to `nread`.\n      console.log(buf.toString('utf8', 0, nread));\n    }\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Initiate a connection on a given socket. Normally this method is not needed,\nthe socket should be created and opened with net.createConnection(). Use\nthis only when implementing a custom Socket.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For TCP connections, available options are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • port <number> Required. Port the socket should connect to.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • host <string> Host the socket should connect to. Default: 'localhost'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • localAddress <string> Local address the socket should connect from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • localPort <number> Local port the socket should connect from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • family <number>: Version of IP stack. Must be 4, 6, or 0. The value\n0 indicates that both IPv4 and IPv6 addresses are allowed. Default: 0.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • hints <number> Optional dns.lookup() hints.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • lookup <Function> Custom lookup function. Default: dns.lookup().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For IPC connections, available options are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For both types, available options include:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • onread <Object> If specified, incoming data is stored in a single buffer\nand passed to the supplied callback when data arrives on the socket.\nThis will cause the streaming functionality to not provide any data.\nThe socket will emit events like 'error', 'end', and 'close'\nas usual. Methods like pause() and resume() will also behave as\nexpected.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • buffer <Buffer> | <Uint8Array> | <Function> Either a reusable chunk of memory to\nuse for storing incoming data or a function that returns such.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • callback <Function> This function is called for every chunk of incoming\ndata. Two arguments are passed to it: the number of bytes written to\nbuffer and a reference to buffer. Return false from this function to\nimplicitly pause() the socket. This function will be executed in the\nglobal context.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Following is an example of a client using the onread option:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const net = require('net');\nnet.connect({\n  port: 80,\n  onread: {\n    // Reuses a 4KiB Buffer for every read from the socket.\n    buffer: Buffer.alloc(4 * 1024),\n    callback: function(nread, buf) {\n      // Received data is available in `buf` from 0 to `nread`.\n      console.log(buf.toString('utf8', 0, nread));\n    }\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " }, { "textRaw": "`socket.connect(path[, connectListener])`", @@ -1204,7 +1204,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If true,\nsocket.connect(options[, connectListener]) was\ncalled and has not yet finished. It will stay true until the socket becomes\nconnected, then it is set to false and the 'connect' event is emitted. Note\nthat the\nsocket.connect(options[, connectListener])\ncallback is a listener for the 'connect' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If true,\nsocket.connect(options[, connectListener]) was\ncalled and has not yet finished. It will stay true until the socket becomes\nconnected, then it is set to false and the 'connect' event is emitted. Note\nthat the\nsocket.connect(options[, connectListener])\ncallback is a listener for the 'connect' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " }, { "textRaw": "`destroyed` {boolean} Indicates if the connection is destroyed or not. Once a connection is destroyed no further data can be transferred using it.", diff -Nru nodejs-mozilla-12.18.1/doc/api/net.md nodejs-mozilla-12.22.12/doc/api/net.md --- nodejs-mozilla-12.18.1/doc/api/net.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/net.md 2022-04-05 07:17:04.000000000 +0000 @@ -5,6 +5,8 @@ > Stability: 2 - Stable + + The `net` module provides an asynchronous network API for creating stream-based TCP or [IPC][] servers ([`net.createServer()`][]) and clients ([`net.createConnection()`][]). @@ -15,7 +17,7 @@ const net = require('net'); ``` -## IPC Support +## IPC support The `net` module supports IPC with named pipes on Windows, and Unix domain sockets on other operating systems. @@ -721,7 +723,7 @@ If `true`, [`socket.connect(options[, connectListener])`][`socket.connect(options)`] was called and has not yet finished. It will stay `true` until the socket becomes -connected, then it is set to `false` and the `'connect'` event is emitted. Note +connected, then it is set to `false` and the `'connect'` event is emitted. Note that the [`socket.connect(options[, connectListener])`][`socket.connect(options)`] callback is a listener for the `'connect'` event. @@ -1259,7 +1261,7 @@ [`server.listen(handle)`]: #net_server_listen_handle_backlog_callback [`server.listen(options)`]: #net_server_listen_options_callback [`server.listen(path)`]: #net_server_listen_path_backlog_callback -[`socket(7)`]: http://man7.org/linux/man-pages/man7/socket.7.html +[`socket(7)`]: https://man7.org/linux/man-pages/man7/socket.7.html [`socket.connect()`]: #net_socket_connect [`socket.connect(options)`]: #net_socket_connect_options_connectlistener [`socket.connect(path)`]: #net_socket_connect_path_connectlistener diff -Nru nodejs-mozilla-12.18.1/doc/api/os.html nodejs-mozilla-12.22.12/doc/api/os.html --- nodejs-mozilla-12.18.1/doc/api/os.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/os.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - OS | Node.js v12.18.1 Documentation + + OS | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    18. @@ -121,8 +128,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Contains commonly used operating system-specific constants for error codes, process signals, and so on. The specific constants defined are described in -OS Constants.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +OS constants.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      os.cpus()#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/os.json nodejs-mozilla-12.22.12/doc/api/os.json --- nodejs-mozilla-12.18.1/doc/api/os.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/os.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The os module provides operating system-related utility methods and\nproperties. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const os = require('os');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Source Code: lib/os.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The os module provides operating system-related utility methods and\nproperties. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const os = require('os');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "properties": [ { "textRaw": "`EOL` {string}", @@ -32,7 +32,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Contains commonly used operating system-specific constants for error codes,\nprocess signals, and so on. The specific constants defined are described in\nOS Constants.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Contains commonly used operating system-specific constants for error codes,\nprocess signals, and so on. The specific constants defined are described in\nOS constants.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " } ], "methods": [ @@ -78,7 +78,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns an array of objects containing information about each logical CPU core.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The properties included on each object include:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • model <string>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • speed <number> (in MHz)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        times <Object>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • user <number> The number of milliseconds the CPU has spent in user mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • nice <number> The number of milliseconds the CPU has spent in nice mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • sys <number> The number of milliseconds the CPU has spent in sys mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • idle <number> The number of milliseconds the CPU has spent in idle mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • irq <number> The number of milliseconds the CPU has spent in irq mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      [\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 252020,\n      nice: 0,\n      sys: 30340,\n      idle: 1070356870,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 306960,\n      nice: 0,\n      sys: 26980,\n      idle: 1071569080,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 248450,\n      nice: 0,\n      sys: 21750,\n      idle: 1070919370,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 256880,\n      nice: 0,\n      sys: 19430,\n      idle: 1070905480,\n      irq: 20\n    }\n  }\n]\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      nice values are POSIX-only. On Windows, the nice values of all processors\nare always 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns an array of objects containing information about each logical CPU core.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The properties included on each object include:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • model <string>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • speed <number> (in MHz)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • times <Object>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • user <number> The number of milliseconds the CPU has spent in user mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • nice <number> The number of milliseconds the CPU has spent in nice mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • sys <number> The number of milliseconds the CPU has spent in sys mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • idle <number> The number of milliseconds the CPU has spent in idle mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • irq <number> The number of milliseconds the CPU has spent in irq mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      [\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 252020,\n      nice: 0,\n      sys: 30340,\n      idle: 1070356870,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 306960,\n      nice: 0,\n      sys: 26980,\n      idle: 1071569080,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 248450,\n      nice: 0,\n      sys: 21750,\n      idle: 1070919370,\n      irq: 0\n    }\n  },\n  {\n    model: 'Intel(R) Core(TM) i7 CPU         860  @ 2.80GHz',\n    speed: 2926,\n    times: {\n      user: 256880,\n      nice: 0,\n      sys: 19430,\n      idle: 1070905480,\n      irq: 20\n    }\n  }\n]\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      nice values are POSIX-only. On Windows, the nice values of all processors\nare always 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " }, { "textRaw": "`os.endianness()`", @@ -283,7 +283,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns the operating system as a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      On POSIX systems, the operating system release is determined by calling\nuname(3). On Windows, GetVersionExW() is used. See\nhttps://en.wikipedia.org/wiki/Uname#Examples for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns the operating system as a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      On POSIX systems, the operating system release is determined by calling\nuname(3). On Windows, GetVersionExW() is used. See\nhttps://en.wikipedia.org/wiki/Uname#Examples for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " }, { "textRaw": "`os.setPriority([pid, ]priority)`", @@ -385,7 +385,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns the operating system name as returned by uname(3). For example, it\nreturns 'Linux' on Linux, 'Darwin' on macOS, and 'Windows_NT' on Windows.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      See https://en.wikipedia.org/wiki/Uname#Examples for additional information\nabout the output of running uname(3) on various operating systems.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns the operating system name as returned by uname(3). For example, it\nreturns 'Linux' on Linux, 'Darwin' on macOS, and 'Windows_NT' on Windows.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      See https://en.wikipedia.org/wiki/Uname#Examples for additional information\nabout the output of running uname(3) on various operating systems.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " }, { "textRaw": "`os.uptime()`", @@ -472,17 +472,17 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns a string identifying the kernel version.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      On POSIX systems, the operating system release is determined by calling\nuname(3). On Windows, RtlGetVersion() is used, and if it is not available,\nGetVersionExW() will be used. See\nhttps://en.wikipedia.org/wiki/Uname#Examples for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns a string identifying the kernel version.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      On POSIX systems, the operating system release is determined by calling\nuname(3). On Windows, RtlGetVersion() is used, and if it is not\navailable, GetVersionExW() will be used. See\nhttps://en.wikipedia.org/wiki/Uname#Examples for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      " } ], "modules": [ { - "textRaw": "OS Constants", + "textRaw": "OS constants", "name": "os_constants", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The following constants are exported by os.constants.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Not all constants will be available on every operating system.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "Signal Constants", + "textRaw": "Signal constants", "name": "signal_constants", "meta": { "changes": [ @@ -495,40 +495,40 @@ }, "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The following signal constants are exported by os.constants.signals.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGHUPSent to indicate when a controlling terminal is closed or a parent\n process exits.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGINTSent to indicate when a user wishes to interrupt a process\n ((Ctrl+C)).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGQUITSent to indicate when a user wishes to terminate a process and perform a\n core dump.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGILLSent to a process to notify that it has attempted to perform an illegal,\n malformed, unknown, or privileged instruction.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGTRAPSent to a process when an exception has occurred.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGABRTSent to a process to request that it abort.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGIOTSynonym for SIGABRT
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGBUSSent to a process to notify that it has caused a bus error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGFPESent to a process to notify that it has performed an illegal arithmetic\n operation.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGKILLSent to a process to terminate it immediately.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGUSR1 SIGUSR2Sent to a process to identify user-defined conditions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGSEGVSent to a process to notify of a segmentation fault.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGPIPESent to a process when it has attempted to write to a disconnected\n pipe.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGALRMSent to a process when a system timer elapses.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGTERMSent to a process to request termination.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGCHLDSent to a process when a child process terminates.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGSTKFLTSent to a process to indicate a stack fault on a coprocessor.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGCONTSent to instruct the operating system to continue a paused process.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGSTOPSent to instruct the operating system to halt a process.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGTSTPSent to a process to request it to stop.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGBREAKSent to indicate when a user wishes to interrupt a process.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGTTINSent to a process when it reads from the TTY while in the\n background.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGTTOUSent to a process when it writes to the TTY while in the\n background.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGURGSent to a process when a socket has urgent data to read.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGXCPUSent to a process when it has exceeded its limit on CPU usage.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGXFSZSent to a process when it grows a file larger than the maximum\n allowed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGVTALRMSent to a process when a virtual timer has elapsed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGPROFSent to a process when a system timer has elapsed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGWINCHSent to a process when the controlling terminal has changed its\n size.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGIOSent to a process when I/O is available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGPOLLSynonym for SIGIO
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGLOSTSent to a process when a file lock has been lost.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGPWRSent to a process to notify of a power failure.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGINFOSynonym for SIGPWR
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGSYSSent to a process to notify of a bad argument.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      SIGUNUSEDSynonym for SIGSYS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Signal Constants" + "displayName": "Signal constants" }, { - "textRaw": "Error Constants", + "textRaw": "Error constants", "name": "error_constants", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The following error constants are exported by os.constants.errno.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "modules": [ { - "textRaw": "POSIX Error Constants", + "textRaw": "POSIX error constants", "name": "posix_error_constants", "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      E2BIGIndicates that the list of arguments is longer than expected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EACCESIndicates that the operation did not have sufficient permissions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EADDRINUSEIndicates that the network address is already in use.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EADDRNOTAVAILIndicates that the network address is currently unavailable for\n use.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EAFNOSUPPORTIndicates that the network address family is not supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EAGAINIndicates that there is no data available and to try the\n operation again later.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EALREADYIndicates that the socket already has a pending connection in\n progress.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EBADFIndicates that a file descriptor is not valid.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EBADMSGIndicates an invalid data message.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EBUSYIndicates that a device or resource is busy.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ECANCELEDIndicates that an operation was canceled.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ECHILDIndicates that there are no child processes.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ECONNABORTEDIndicates that the network connection has been aborted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ECONNREFUSEDIndicates that the network connection has been refused.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ECONNRESETIndicates that the network connection has been reset.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EDEADLKIndicates that a resource deadlock has been avoided.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EDESTADDRREQIndicates that a destination address is required.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EDOMIndicates that an argument is out of the domain of the function.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EDQUOTIndicates that the disk quota has been exceeded.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EEXISTIndicates that the file already exists.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EFAULTIndicates an invalid pointer address.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EFBIGIndicates that the file is too large.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EHOSTUNREACHIndicates that the host is unreachable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EIDRMIndicates that the identifier has been removed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EILSEQIndicates an illegal byte sequence.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EINPROGRESSIndicates that an operation is already in progress.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EINTRIndicates that a function call was interrupted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EINVALIndicates that an invalid argument was provided.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EIOIndicates an otherwise unspecified I/O error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EISCONNIndicates that the socket is connected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EISDIRIndicates that the path is a directory.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ELOOPIndicates too many levels of symbolic links in a path.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EMFILEIndicates that there are too many open files.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EMLINKIndicates that there are too many hard links to a file.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EMSGSIZEIndicates that the provided message is too long.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EMULTIHOPIndicates that a multihop was attempted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENAMETOOLONGIndicates that the filename is too long.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENETDOWNIndicates that the network is down.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENETRESETIndicates that the connection has been aborted by the network.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENETUNREACHIndicates that the network is unreachable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENFILEIndicates too many open files in the system.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOBUFSIndicates that no buffer space is available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENODATAIndicates that no message is available on the stream head read\n queue.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENODEVIndicates that there is no such device.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOENTIndicates that there is no such file or directory.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOEXECIndicates an exec format error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOLCKIndicates that there are no locks available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOLINKIndications that a link has been severed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOMEMIndicates that there is not enough space.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOMSGIndicates that there is no message of the desired type.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOPROTOOPTIndicates that a given protocol is not available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOSPCIndicates that there is no space available on the device.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOSRIndicates that there are no stream resources available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOSTRIndicates that a given resource is not a stream.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOSYSIndicates that a function has not been implemented.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOTCONNIndicates that the socket is not connected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOTDIRIndicates that the path is not a directory.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOTEMPTYIndicates that the directory is not empty.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOTSOCKIndicates that the given item is not a socket.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOTSUPIndicates that a given operation is not supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENOTTYIndicates an inappropriate I/O control operation.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ENXIOIndicates no such device or address.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EOPNOTSUPPIndicates that an operation is not supported on the socket. Although\n ENOTSUP and EOPNOTSUPP have the same value\n on Linux, according to POSIX.1 these error values should be distinct.)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EOVERFLOWIndicates that a value is too large to be stored in a given data\n type.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EPERMIndicates that the operation is not permitted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EPIPEIndicates a broken pipe.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EPROTOIndicates a protocol error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EPROTONOSUPPORTIndicates that a protocol is not supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EPROTOTYPEIndicates the wrong type of protocol for a socket.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ERANGEIndicates that the results are too large.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EROFSIndicates that the file system is read only.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ESPIPEIndicates an invalid seek operation.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ESRCHIndicates that there is no such process.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ESTALEIndicates that the file handle is stale.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ETIMEIndicates an expired timer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ETIMEDOUTIndicates that the connection timed out.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ETXTBSYIndicates that a text file is busy.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EWOULDBLOCKIndicates that the operation would block.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      EXDEVIndicates an improper link.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "POSIX Error Constants" + "displayName": "POSIX error constants" }, { - "textRaw": "Windows Specific Error Constants", - "name": "windows_specific_error_constants", + "textRaw": "Windows-specific error constants", + "name": "windows-specific_error_constants", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The following error codes are specific to the Windows operating system.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEINTRIndicates an interrupted function call.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEBADFIndicates an invalid file handle.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEACCESIndicates insufficient permissions to complete the operation.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEFAULTIndicates an invalid pointer address.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEINVALIndicates that an invalid argument was passed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEMFILEIndicates that there are too many open files.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEWOULDBLOCKIndicates that a resource is temporarily unavailable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEINPROGRESSIndicates that an operation is currently in progress.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEALREADYIndicates that an operation is already in progress.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENOTSOCKIndicates that the resource is not a socket.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEDESTADDRREQIndicates that a destination address is required.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEMSGSIZEIndicates that the message size is too long.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEPROTOTYPEIndicates the wrong protocol type for the socket.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENOPROTOOPTIndicates a bad protocol option.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEPROTONOSUPPORTIndicates that the protocol is not supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAESOCKTNOSUPPORTIndicates that the socket type is not supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEOPNOTSUPPIndicates that the operation is not supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEPFNOSUPPORTIndicates that the protocol family is not supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEAFNOSUPPORTIndicates that the address family is not supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEADDRINUSEIndicates that the network address is already in use.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEADDRNOTAVAILIndicates that the network address is not available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENETDOWNIndicates that the network is down.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENETUNREACHIndicates that the network is unreachable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENETRESETIndicates that the network connection has been reset.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAECONNABORTEDIndicates that the connection has been aborted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAECONNRESETIndicates that the connection has been reset by the peer.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENOBUFSIndicates that there is no buffer space available.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEISCONNIndicates that the socket is already connected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENOTCONNIndicates that the socket is not connected.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAESHUTDOWNIndicates that data cannot be sent after the socket has been\n shutdown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAETOOMANYREFSIndicates that there are too many references.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAETIMEDOUTIndicates that the connection has timed out.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAECONNREFUSEDIndicates that the connection has been refused.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAELOOPIndicates that a name cannot be translated.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENAMETOOLONGIndicates that a name was too long.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEHOSTDOWNIndicates that a network host is down.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEHOSTUNREACHIndicates that there is no route to a network host.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENOTEMPTYIndicates that the directory is not empty.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEPROCLIMIndicates that there are too many processes.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEUSERSIndicates that the user quota has been exceeded.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEDQUOTIndicates that the disk quota has been exceeded.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAESTALEIndicates a stale file handle reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEREMOTEIndicates that the item is remote.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSASYSNOTREADYIndicates that the network subsystem is not ready.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAVERNOTSUPPORTEDIndicates that the winsock.dll version is out of\n range.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSANOTINITIALISEDIndicates that successful WSAStartup has not yet been performed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEDISCONIndicates that a graceful shutdown is in progress.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAENOMOREIndicates that there are no more results.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAECANCELLEDIndicates that an operation has been canceled.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEINVALIDPROCTABLEIndicates that the procedure call table is invalid.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEINVALIDPROVIDERIndicates an invalid service provider.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEPROVIDERFAILEDINITIndicates that the service provider failed to initialized.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSASYSCALLFAILUREIndicates a system call failure.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSASERVICE_NOT_FOUNDIndicates that a service was not found.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSATYPE_NOT_FOUNDIndicates that a class type was not found.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSA_E_NO_MOREIndicates that there are no more results.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSA_E_CANCELLEDIndicates that the call was canceled.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      WSAEREFUSEDIndicates that a database query was refused.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Windows Specific Error Constants" + "displayName": "Windows-specific error constants" } ], "type": "module", - "displayName": "Error Constants" + "displayName": "Error constants" }, { - "textRaw": "dlopen Constants", + "textRaw": "dlopen constants", "name": "dlopen_constants", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If available on the operating system, the following constants\nare exported in os.constants.dlopen. See dlopen(3) for detailed\ninformation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      RTLD_LAZYPerform lazy binding. Node.js sets this flag by default.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      RTLD_NOWResolve all undefined symbols in the library before dlopen(3)\n returns.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      RTLD_GLOBALSymbols defined by the library will be made available for symbol\n resolution of subsequently loaded libraries.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      RTLD_LOCALThe converse of RTLD_GLOBAL. This is the default behavior\n if neither flag is specified.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      RTLD_DEEPBINDMake a self-contained library use its own symbols in preference to\n symbols from previously loaded libraries.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "dlopen Constants" + "displayName": "dlopen constants" }, { - "textRaw": "Priority Constants", + "textRaw": "Priority constants", "name": "priority_constants", "meta": { "added": [ @@ -538,18 +538,18 @@ }, "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The following process scheduling constants are exported by\nos.constants.priority.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PRIORITY_LOWThe lowest process scheduling priority. This corresponds to\n IDLE_PRIORITY_CLASS on Windows, and a nice value of\n 19 on all other platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PRIORITY_BELOW_NORMALThe process scheduling priority above PRIORITY_LOW and\n below PRIORITY_NORMAL. This corresponds to\n BELOW_NORMAL_PRIORITY_CLASS on Windows, and a nice value of\n 10 on all other platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PRIORITY_NORMALThe default process scheduling priority. This corresponds to\n NORMAL_PRIORITY_CLASS on Windows, and a nice value of\n 0 on all other platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PRIORITY_ABOVE_NORMALThe process scheduling priority above PRIORITY_NORMAL and\n below PRIORITY_HIGH. This corresponds to\n ABOVE_NORMAL_PRIORITY_CLASS on Windows, and a nice value of\n -7 on all other platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PRIORITY_HIGHThe process scheduling priority above PRIORITY_ABOVE_NORMAL\n and below PRIORITY_HIGHEST. This corresponds to\n HIGH_PRIORITY_CLASS on Windows, and a nice value of\n -14 on all other platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      PRIORITY_HIGHESTThe highest process scheduling priority. This corresponds to\n REALTIME_PRIORITY_CLASS on Windows, and a nice value of\n -20 on all other platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "Priority Constants" + "displayName": "Priority constants" }, { - "textRaw": "libuv Constants", + "textRaw": "libuv constants", "name": "libuv_constants", "desc": "\n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ConstantDescription
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      UV_UDP_REUSEADDR
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ", "type": "module", - "displayName": "libuv Constants" + "displayName": "libuv constants" } ], "type": "module", - "displayName": "OS Constants" + "displayName": "OS constants" } ], "type": "module", diff -Nru nodejs-mozilla-12.18.1/doc/api/os.md nodejs-mozilla-12.22.12/doc/api/os.md --- nodejs-mozilla-12.18.1/doc/api/os.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/os.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `os` module provides operating system-related utility methods and properties. It can be accessed using: @@ -45,7 +47,7 @@ Contains commonly used operating system-specific constants for error codes, process signals, and so on. The specific constants defined are described in -[OS Constants](#os_os_constants_1). +[OS constants](#os_os_constants_1). ## `os.cpus()` @@ -1252,7 +1254,7 @@ -### libuv Constants +### libuv constants @@ -1268,6 +1270,6 @@ [`SystemError`]: errors.html#errors_class_systemerror [`process.arch`]: process.html#process_process_arch [`process.platform`]: process.html#process_process_platform +[`uname(3)`]: https://linux.die.net/man/3/uname [Android building]: https://github.com/nodejs/node/blob/master/BUILDING.md#androidandroid-based-devices-eg-firefox-os [EUID]: https://en.wikipedia.org/wiki/User_identifier#Effective_user_ID -[uname(3)]: https://linux.die.net/man/3/uname diff -Nru nodejs-mozilla-12.18.1/doc/api/packages.html nodejs-mozilla-12.22.12/doc/api/packages.html --- nodejs-mozilla-12.18.1/doc/api/packages.html 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/packages.html 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,960 @@ + + + + + + + Modules: Packages | Node.js v12.22.12 Documentation + + + + + + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      VersionChanges
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      v12.20.0

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Add support for "exports" patterns.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      v12.19.0

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Add package "imports" field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      v12.16.0

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Unflag conditional exports.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      v12.16.0

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Unflag self-referencing a package using its name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      v12.7.0

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Introduce "exports" package.json field as a more powerful alternative to the classic "main" field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      v12.0.0

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Add support for ES modules using .js file extension via package.json "type" field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Introduction#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      A package is a folder tree described by a package.json file. The package +consists of the folder containing the package.json file and all subfolders +until the next folder containing another package.json file, or a folder +named node_modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This page provides guidance for package authors writing package.json files +along with a reference for the package.json fields defined by Node.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Determining module system#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Node.js will treat the following as ES modules when passed to node as the +initial input, or when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Files ending in .mjs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Files ending in .js when the nearest parent package.json file contains a +top-level "type" field with a value of "module".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Strings passed in as an argument to --eval, or piped to node via STDIN, +with the flag --input-type=module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Node.js will treat as CommonJS all other forms of input, such as .js files +where the nearest parent package.json file contains no top-level "type" +field, or string input without the flag --input-type. This behavior is to +preserve backward compatibility. However, now that Node.js supports both +CommonJS and ES modules, it is best to be explicit whenever possible. Node.js +will treat the following as CommonJS when passed to node as the initial input, +or when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Files ending in .cjs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Files ending in .js when the nearest parent package.json file contains a +top-level field "type" with a value of "commonjs".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Strings passed in as an argument to --eval or --print, or piped to node +via STDIN, with the flag --input-type=commonjs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Package authors should include the "type" field, even in packages where +all sources are CommonJS. Being explicit about the type of the package will +future-proof the package in case the default type of Node.js ever changes, and +it will also make things easier for build tools and loaders to determine how the +files in the package should be interpreted.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      package.json and file extensions#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Within a package, the package.json "type" field defines how +Node.js should interpret .js files. If a package.json file does not have a +"type" field, .js files are treated as CommonJS.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      A package.json "type" value of "module" tells Node.js to interpret .js +files within that package as using ES module syntax.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The "type" field applies not only to initial entry points (node my-app.js) +but also to files referenced by import statements and import() expressions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // my-app.js, treated as an ES module because there is a package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// file in the same folder with "type": "module".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import './startup/init.js';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loaded as ES module since ./startup contains no package.json file,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// and therefore inherits the "type" value from one level up.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import 'commonjs-package';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// lacks a "type" field or contains "type": "commonjs".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import './node_modules/commonjs-package/index.js';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loaded as CommonJS since ./node_modules/commonjs-package/package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// lacks a "type" field or contains "type": "commonjs".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Files ending with .mjs are always loaded as ES modules regardless of +the nearest parent package.json.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Files ending with .cjs are always loaded as CommonJS regardless of the +nearest parent package.json.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      import './legacy-file.cjs';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loaded as CommonJS since .cjs is always loaded as CommonJS.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import 'commonjs-package/src/index.mjs';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loaded as ES module since .mjs is always loaded as ES module.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The .mjs and .cjs extensions can be used to mix types within the same +package:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Within a "type": "module" package, Node.js can be instructed to +interpret a particular file as CommonJS by naming it with a .cjs +extension (since both .js and .mjs files are treated as ES modules within +a "module" package).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Within a "type": "commonjs" package, Node.js can be instructed to +interpret a particular file as an ES module by naming it with an .mjs +extension (since both .js and .cjs files are treated as CommonJS within a +"commonjs" package).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      --input-type flag#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Strings passed in as an argument to --eval (or -e), or piped to node via +STDIN, are treated as ES modules when the --input-type=module flag +is set.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      node --input-type=module --eval "import { sep } from 'path'; console.log(sep);"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +echo "import { sep } from 'path'; console.log(sep);" | node --input-type=module
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      For completeness there is also --input-type=commonjs, for explicitly running +string input as CommonJS. This is the default behavior if --input-type is +unspecified.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Package entry points#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      In a package’s package.json file, two fields can define entry points for a +package: "main" and "exports". The "main" field is supported +in all versions of Node.js, but its capabilities are limited: it only defines +the main entry point of the package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The "exports" field provides an alternative to "main" where the +package main entry point can be defined while also encapsulating the package, +preventing any other entry points besides those defined in "exports". +This encapsulation allows module authors to define a public interface for +their package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If both "exports" and "main" are defined, the "exports" field +takes precedence over "main". "exports" are not specific to ES +modules or CommonJS; "main" is overridden by "exports" if it +exists. As such "main" cannot be used as a fallback for CommonJS but it +can be used as a fallback for legacy versions of Node.js that do not support the +"exports" field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Conditional exports can be used within "exports" to define different +package entry points per environment, including whether the package is +referenced via require or via import. For more information about supporting +both CommonJS and ES Modules in a single package please consult +the dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Warning: Introducing the "exports" field prevents consumers of a +package from using any entry points that are not defined, including the +package.json (e.g. require('your-package/package.json'). This will +likely be a breaking change.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      To make the introduction of "exports" non-breaking, ensure that every +previously supported entry point is exported. It is best to explicitly specify +entry points so that the package’s public API is well-defined. For example, +a project that previous exported main, lib, +feature, and the package.json could use the following package.exports:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "name": "my-mod",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    ".": "./lib/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./lib": "./lib/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./lib/index": "./lib/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./lib/index.js": "./lib/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./feature": "./feature/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./feature/index.js": "./feature/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./package.json": "./package.json"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Alternatively a project could choose to export entire folders:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "name": "my-mod",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    ".": "./lib/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./lib": "./lib/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./lib/*": "./lib/*.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./feature": "./feature/index.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./feature/*": "./feature/*.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./package.json": "./package.json"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      As a last resort, package encapsulation can be disabled entirely by creating an +export for the root of the package "./*": "./*". This exposes every file +in the package at the cost of disabling the encapsulation and potential tooling +benefits this provides. As the ES Module loader in Node.js enforces the use of +the full specifier path, exporting the root rather than being explicit +about entry is less expressive than either of the prior examples. Not only +is encapsulation lost but module consumers are unable to +import feature from 'my-mod/feature' as they need to provide the full +path import feature from 'my-mod/feature/index.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Main entry point export#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      To set the main entry point for a package, it is advisable to define both +"exports" and "main" in the package’s package.json file:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./main.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": "./main.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      When the "exports" field is defined, all subpaths of the package are +encapsulated and no longer available to importers. For example, +require('pkg/subpath.js') throws an ERR_PACKAGE_PATH_NOT_EXPORTED +error.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This encapsulation of exports provides more reliable guarantees +about package interfaces for tools and when handling semver upgrades for a +package. It is not a strong encapsulation since a direct require of any +absolute subpath of the package such as +require('/path/to/node_modules/pkg/subpath.js') will still load subpath.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Subpath exports#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      When using the "exports" field, custom subpaths can be defined along +with the main entry point by treating the main entry point as the +"." subpath:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./main.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    ".": "./main.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./submodule": "./src/submodule.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Now only the defined subpath in "exports" can be imported by a consumer:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      import submodule from 'es-module-package/submodule';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loads ./node_modules/es-module-package/src/submodule.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      While other subpaths will error:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      import submodule from 'es-module-package/private-module.js';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Throws ERR_PACKAGE_PATH_NOT_EXPORTED
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Subpath imports#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      In addition to the "exports" field, it is possible to define internal +package import maps that only apply to import specifiers from within the package +itself.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Entries in the imports field must always start with # to ensure they are +disambiguated from package specifiers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      For example, the imports field can be used to gain the benefits of conditional +exports for internal modules:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "imports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "#dep": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +      "node": "dep-node-native",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +      "default": "./dep-polyfill.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "dependencies": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "dep-node-native": "^1.0.0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      where import '#dep' does not get the resolution of the external package +dep-node-native (including its exports in turn), and instead gets the local +file ./dep-polyfill.js relative to the package in other environments.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Unlike the "exports" field, the "imports" field permits mapping to external +packages.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The resolution rules for the imports field are otherwise +analogous to the exports field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Subpath patterns#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      For packages with a small number of exports or imports, we recommend +explicitly listing each exports subpath entry. But for packages that have +large numbers of subpaths, this might cause package.json bloat and +maintenance issues.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      For these use cases, subpath export patterns can be used instead:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./node_modules/es-module-package/package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./features/*": "./src/features/*.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "imports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "#internal/*": "./src/internal/*.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The left hand matching pattern must always end in *. All instances of * on +the right hand side will then be replaced with this value, including if it +contains any / separators.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      import featureX from 'es-module-package/features/x';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loads ./node_modules/es-module-package/src/features/x.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import featureY from 'es-module-package/features/y/y';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loads ./node_modules/es-module-package/src/features/y/y.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import internalZ from '#internal/z';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Loads ./node_modules/es-module-package/src/internal/z.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This is a direct static replacement without any special handling for file +extensions. In the previous example, pkg/features/x.json would be resolved to +./src/features/x.json.js in the mapping.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The property of exports being statically enumerable is maintained with exports +patterns since the individual exports for a package can be determined by +treating the right hand side target pattern as a ** glob against the list of +files within the package. Because node_modules paths are forbidden in exports +targets, this expansion is dependent on only the files of the package itself.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Exports sugar#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If the "." export is the only export, the "exports" field provides sugar +for this case being the direct "exports" field value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If the "." export has a fallback array or string value, then the +"exports" field can be set to this value directly.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    ".": "./main.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      can be written:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": "./main.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Conditional exports#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Conditional exports provide a way to map to different paths depending on +certain conditions. They are supported for both CommonJS and ES module imports.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      For example, a package that wants to provide different ES module exports for +require() and import can be written:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./main-require.cjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "import": "./main-module.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "require": "./main-require.cjs"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "type": "module"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Node.js supports the following conditions out of the box:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "import" - matches when the package is loaded via import or +import(), or via any top-level import or resolve operation by the +ECMAScript module loader. Applies regardless of the module format of the +target file. Always mutually exclusive with "require".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "require" - matches when the package is loaded via require(). The +referenced file should be loadable with require() although the condition +matches regardless of the module format of the target file. Expected +formats include CommonJS, JSON, and native addons but not ES modules as +require() doesn't support them. Always mutually exclusive with +"import".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "node" - matches for any Node.js environment. Can be a CommonJS or ES +module file. This condition should always come after "import" or +"require".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "default" - the generic fallback that always matches. Can be a CommonJS +or ES module file. This condition should always come last.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Within the "exports" object, key order is significant. During condition +matching, earlier entries have higher priority and take precedence over later +entries. The general rule is that conditions should be from most specific to +least specific in object order.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Other conditions such as "browser", "electron", "deno", "react-native", +etc., are unknown to Node.js, and thus ignored. Runtimes or tools other than +Node.js can use them at their discretion. Further restrictions, definitions, or +guidance on condition names might occur in the future.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Using the "import" and "require" conditions can lead to some hazards, +which are further explained in the dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Conditional exports can also be extended to exports subpaths, for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./main.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    ".": "./main.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./feature": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +      "node": "./feature-node.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +      "default": "./feature.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Defines a package where require('pkg/feature') and import 'pkg/feature' +could provide different implementations between Node.js and other JS +environments.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      When using environment branches, always include a "default" condition where +possible. Providing a "default" condition ensures that any unknown JS +environments are able to use this universal implementation, which helps avoid +these JS environments from having to pretend to be existing environments in +order to support packages with conditional exports. For this reason, using +"node" and "default" condition branches is usually preferable to using +"node" and "browser" condition branches.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Nested conditions#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      In addition to direct mappings, Node.js also supports nested condition objects.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      For example, to define a package that only has dual mode entry points for +use in Node.js but not the browser:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./main.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "node": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +      "import": "./feature-node.mjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +      "require": "./feature-node.cjs"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "default": "./feature.mjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Conditions continue to be matched in order as with flat conditions. If +a nested conditional does not have any mapping it will continue checking +the remaining conditions of the parent condition. In this way nested +conditions behave analogously to nested JavaScript if statements.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Resolving user conditions#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      When running Node.js, custom user conditions can be added with the +--conditions flag:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      node --conditions=development main.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      which would then resolve the "development" condition in package imports and +exports, while resolving the existing "node", "default", "import", and +"require" conditions as appropriate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Any number of custom conditions can be set with repeat flags.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Self-referencing a package using its name#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Within a package, the values defined in the package’s +package.json "exports" field can be referenced via the package’s name. +For example, assuming the package.json is:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "name": "a-package",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    ".": "./main.mjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./foo": "./foo.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Then any module in that package can reference an export in the package itself:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./a-module.mjs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import { something } from 'a-package'; // Imports "something" from ./main.mjs.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Self-referencing is available only if package.json has "exports", and +will allow importing only what that "exports" (in the package.json) +allows. So the code below, given the previous package, will generate a runtime +error:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./another-module.mjs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Imports "another" from ./m.mjs. Fails because
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// the "package.json" "exports" field
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// does not provide an export named "./m.mjs".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import { another } from 'a-package/m.mjs';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Self-referencing is also available when using require, both in an ES module, +and in a CommonJS one. For example, this code will also work:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./a-module.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +const { something } = require('a-package/foo'); // Loads from ./foo.js.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Dual CommonJS/ES module packages#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Prior to the introduction of support for ES modules in Node.js, it was a common +pattern for package authors to include both CommonJS and ES module JavaScript +sources in their package, with package.json "main" specifying the +CommonJS entry point and package.json "module" specifying the ES module +entry point. +This enabled Node.js to run the CommonJS entry point while build tools such as +bundlers used the ES module entry point, since Node.js ignored (and still +ignores) the top-level "module" field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Node.js can now run ES module entry points, and a package can contain both +CommonJS and ES module entry points (either via separate specifiers such as +'pkg' and 'pkg/es-module', or both at the same specifier via Conditional +exports). Unlike in the scenario where "module" is only used by bundlers, +or ES module files are transpiled into CommonJS on the fly before evaluation by +Node.js, the files referenced by the ES module entry point are evaluated as ES +modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Dual package hazard#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      When an application is using a package that provides both CommonJS and ES module +sources, there is a risk of certain bugs if both versions of the package get +loaded. This potential comes from the fact that the pkgInstance created by +const pkgInstance = require('pkg') is not the same as the pkgInstance +created by import pkgInstance from 'pkg' (or an alternative main path like +'pkg/module'). This is the “dual package hazard,” where two versions of the +same package can be loaded within the same runtime environment. While it is +unlikely that an application or package would intentionally load both versions +directly, it is common for an application to load one version while a dependency +of the application loads the other version. This hazard can happen because +Node.js supports intermixing CommonJS and ES modules, and can lead to unexpected +behavior.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If the package main export is a constructor, an instanceof comparison of +instances created by the two versions returns false, and if the export is an +object, properties added to one (like pkgInstance.foo = 3) are not present on +the other. This differs from how import and require statements work in +all-CommonJS or all-ES module environments, respectively, and therefore is +surprising to users. It also differs from the behavior users are familiar with +when using transpilation via tools like Babel or esm.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Writing dual packages while avoiding or minimizing hazards#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      First, the hazard described in the previous section occurs when a package +contains both CommonJS and ES module sources and both sources are provided for +use in Node.js, either via separate main entry points or exported paths. A +package might instead be written where any version of Node.js receives only +CommonJS sources, and any separate ES module sources the package might contain +are intended only for other environments such as browsers. Such a package +would be usable by any version of Node.js, since import can refer to CommonJS +files; but it would not provide any of the advantages of using ES module syntax.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      A package might also switch from CommonJS to ES module syntax in a breaking +change version bump. This has the disadvantage that the +newest version of the package would only be usable in ES module-supporting +versions of Node.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Every pattern has tradeoffs, but there are two broad approaches that satisfy the +following conditions:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. The package is usable via both require and import.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. The package is usable in both current Node.js and older versions of Node.js +that lack support for ES modules.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. The package main entry point, e.g. 'pkg' can be used by both require to +resolve to a CommonJS file and by import to resolve to an ES module file. +(And likewise for exported paths, e.g. 'pkg/feature'.)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      7. The package provides named exports, e.g. import { name } from 'pkg' rather +than import pkg from 'pkg'; pkg.name.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      8. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      9. The package is potentially usable in other ES module environments such as +browsers.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      10. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      11. The hazards described in the previous section are avoided or minimized.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      12. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Approach #1: Use an ES module wrapper#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Write the package in CommonJS or transpile ES module sources into CommonJS, and +create an ES module wrapper file that defines the named exports. Using +Conditional exports, the ES module wrapper is used for import and the +CommonJS entry point for require.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "type": "module",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./index.cjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "import": "./wrapper.mjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "require": "./index.cjs"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The preceding example uses explicit extensions .mjs and .cjs. +If your files use the .js extension, "type": "module" will cause such files +to be treated as ES modules, just as "type": "commonjs" would cause them +to be treated as CommonJS. +See Enabling.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./node_modules/pkg/index.cjs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +exports.name = 'value';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./node_modules/pkg/wrapper.mjs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import cjsModule from './index.cjs';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +export const name = cjsModule.name;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      In this example, the name from import { name } from 'pkg' is the same +singleton as the name from const { name } = require('pkg'). Therefore === +returns true when comparing the two names and the divergent specifier hazard +is avoided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If the module is not simply a list of named exports, but rather contains a +unique function or object export like module.exports = function () { ... }, +or if support in the wrapper for the import pkg from 'pkg' pattern is desired, +then the wrapper would instead be written to export the default optionally +along with any named exports as well:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      import cjsModule from './index.cjs';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +export const name = cjsModule.name;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +export default cjsModule;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The package is currently written in CommonJS and the author would prefer not +to refactor it into ES module syntax, but wishes to provide named exports for +ES module consumers.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The package has other packages that depend on it, and the end user might +install both this package and those other packages. For example a utilities +package is used directly in an application, and a utilities-plus package +adds a few more functions to utilities. Because the wrapper exports +underlying CommonJS files, it doesn’t matter if utilities-plus is written in +CommonJS or ES module syntax; it will work either way.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The package stores internal state, and the package author would prefer not to +refactor the package to isolate its state management. See the next section.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      A variant of this approach not requiring conditional exports for consumers could +be to add an export, e.g. "./module", to point to an all-ES module-syntax +version of the package. This could be used via import 'pkg/module' by users +who are certain that the CommonJS version will not be loaded anywhere in the +application, such as by dependencies; or if the CommonJS version can be loaded +but doesn’t affect the ES module version (for example, because the package is +stateless):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "type": "module",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./index.cjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    ".": "./index.cjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./module": "./wrapper.mjs"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Approach #2: Isolate state#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      A package.json file can define the separate CommonJS and ES module entry +points directly:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "type": "module",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./index.cjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "import": "./index.mjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "require": "./index.cjs"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This can be done if both the CommonJS and ES module versions of the package are +equivalent, for example because one is the transpiled output of the other; and +the package’s management of state is carefully isolated (or the package is +stateless).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The reason that state is an issue is because both the CommonJS and ES module +versions of the package might get used within an application; for example, the +user’s application code could import the ES module version while a dependency +requires the CommonJS version. If that were to occur, two copies of the +package would be loaded in memory and therefore two separate states would be +present. This would likely cause hard-to-troubleshoot bugs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Aside from writing a stateless package (if JavaScript’s Math were a package, +for example, it would be stateless as all of its methods are static), there are +some ways to isolate state so that it’s shared between the potentially loaded +CommonJS and ES module instances of the package:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        If possible, contain all state within an instantiated object. JavaScript’s +Date, for example, needs to be instantiated to contain state; if it were a +package, it would be used like this:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        import Date from 'date';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +const someDate = new Date();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// someDate contains state; Date does not
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The new keyword isn’t required; a package’s function can return a new +object, or modify a passed-in object, to keep the state external to the +package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Isolate the state in one or more CommonJS files that are shared between the +CommonJS and ES module versions of the package. For example, if the CommonJS +and ES module entry points are index.cjs and index.mjs, respectively:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        // ./node_modules/pkg/index.cjs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +const state = require('./state.cjs');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +module.exports.state = state;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        // ./node_modules/pkg/index.mjs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +import state from './state.cjs';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +export {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  state
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Even if pkg is used via both require and import in an application (for +example, via import in application code and via require by a dependency) +each reference of pkg will contain the same state; and modifying that +state from either module system will apply to both.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Any plugins that attach to the package’s singleton would need to separately +attach to both the CommonJS and ES module singletons.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The package is currently written in ES module syntax and the package author +wants that version to be used wherever such syntax is supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The package is stateless or its state can be isolated without too much +difficulty.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The package is unlikely to have other public packages that depend on it, or if +it does, the package is stateless or has state that need not be shared between +dependencies or with the overall application.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Even with isolated state, there is still the cost of possible extra code +execution between the CommonJS and ES module versions of a package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      As with the previous approach, a variant of this approach not requiring +conditional exports for consumers could be to add an export, e.g. +"./module", to point to an all-ES module-syntax version of the package:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // ./node_modules/pkg/package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "type": "module",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./index.cjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    ".": "./index.cjs",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "./module": "./index.mjs"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Node.js package.json field definitions#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This section describes the fields used by the Node.js runtime. Other tools (such +as npm) use +additional fields which are ignored by Node.js and not documented here.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The following fields in package.json files are used in Node.js:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "name" - Relevant when using named imports within a package. Also used +by package managers as the name of the package.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "type" - The package type determining whether to load .js files as +CommonJS or ES modules.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "exports" - Package exports and conditional exports. When present, +limits which submodules can be loaded from within the package.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "main" - The default module when loading the package, if exports is not +specified, and in versions of Node.js prior to the introduction of exports.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • "imports" - Package imports, for use by modules within the package +itself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "name"#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "name": "package-name"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The "name" field defines your package’s name. Publishing to the +npm registry requires a name that satisfies +certain requirements.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The "name" field can be used in addition to the "exports" field to +self-reference a package using its name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "type"#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The "type" field defines the module format that Node.js uses for all +.js files that have that package.json file as their nearest parent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Files ending with .js are loaded as ES modules when the nearest parent +package.json file contains a top-level field "type" with a value of +"module".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The nearest parent package.json is defined as the first package.json found +when searching in the current folder, that folder’s parent, and so on up +until a node_modules folder or the volume root is reached.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "type": "module"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      # In same folder as preceding package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +node my-app.js # Runs as ES module
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If the nearest parent package.json lacks a "type" field, or contains +"type": "commonjs", .js files are treated as CommonJS. If the volume +root is reached and no package.json is found, .js files are treated as +CommonJS.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      import statements of .js files are treated as ES modules if the nearest +parent package.json contains "type": "module".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // my-app.js, part of the same example as above
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +import './startup.js'; // Loaded as ES module because of package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Regardless of the value of the "type" field, .mjs files are always treated +as ES modules and .cjs files are always treated as CommonJS.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "exports"#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "exports": "./index.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The "exports" field allows defining the entry points of a package when +imported by name loaded either via a node_modules lookup or a +self-reference to its own name. It is supported in Node.js 12+ as an +alternative to the "main" that can support defining subpath exports +and conditional exports while encapsulating internal unexported modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Conditional Exports can also be used within "exports" to define different +package entry points per environment, including whether the package is +referenced via require or via import.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      All paths defined in the "exports" must be relative file URLs starting with +./.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "main"#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "main": "./main.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      The "main" field defines the script that is used when the package directory +is loaded via require(). Its value +is interpreted as a path.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      require('./path/to/directory'); // This resolves to ./path/to/directory/main.js.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      When a package has an "exports" field, this will take precedence over the +"main" field when importing the package by name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "imports"#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      // package.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +{
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "imports": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "#dep": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +      "node": "dep-node-native",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +      "default": "./dep-polyfill.js"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  "dependencies": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +    "dep-node-native": "^1.0.0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +  }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Entries in the imports field must be strings starting with #.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Import maps permit mapping to external packages.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      This field defines subpath imports for the current package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + + + diff -Nru nodejs-mozilla-12.18.1/doc/api/packages.json nodejs-mozilla-12.22.12/doc/api/packages.json --- nodejs-mozilla-12.18.1/doc/api/packages.json 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/packages.json 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,365 @@ +{ + "type": "module", + "source": "doc/api/packages.md", + "introduced_in": "v12.20.0", + "meta": { + "changes": [ + { + "version": "v12.20.0", + "pr-url": "https://github.com/nodejs/node/pull/34718", + "description": "Add support for `\"exports\"` patterns." + }, + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34117", + "description": "Add package `\"imports\"` field." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31001", + "description": "Unflag conditional exports." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31002", + "description": "Unflag self-referencing a package using its name." + }, + { + "version": "v12.7.0", + "pr-url": "https://github.com/nodejs/node/pull/28568", + "description": "Introduce `\"exports\"` `package.json` field as a more powerful alternative to the classic `\"main\"` field." + }, + { + "version": "v12.0.0", + "pr-url": "https://github.com/nodejs/node/pull/26745", + "description": "Add support for ES modules using `.js` file extension via `package.json` `\"type\"` field." + } + ] + }, + "miscs": [ + { + "textRaw": "Modules: Packages", + "name": "Modules: Packages", + "introduced_in": "v12.20.0", + "type": "misc", + "meta": { + "changes": [ + { + "version": "v12.20.0", + "pr-url": "https://github.com/nodejs/node/pull/34718", + "description": "Add support for `\"exports\"` patterns." + }, + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/34117", + "description": "Add package `\"imports\"` field." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31001", + "description": "Unflag conditional exports." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31002", + "description": "Unflag self-referencing a package using its name." + }, + { + "version": "v12.7.0", + "pr-url": "https://github.com/nodejs/node/pull/28568", + "description": "Introduce `\"exports\"` `package.json` field as a more powerful alternative to the classic `\"main\"` field." + }, + { + "version": "v12.0.0", + "pr-url": "https://github.com/nodejs/node/pull/26745", + "description": "Add support for ES modules using `.js` file extension via `package.json` `\"type\"` field." + } + ] + }, + "miscs": [ + { + "textRaw": "Introduction", + "name": "introduction", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A package is a folder tree described by a package.json file. The package\nconsists of the folder containing the package.json file and all subfolders\nuntil the next folder containing another package.json file, or a folder\nnamed node_modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This page provides guidance for package authors writing package.json files\nalong with a reference for the package.json fields defined by Node.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "misc", + "displayName": "Introduction" + }, + { + "textRaw": "Determining module system", + "name": "determining_module_system", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js will treat the following as ES modules when passed to node as the\ninitial input, or when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Files ending in .mjs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Files ending in .js when the nearest parent package.json file contains a\ntop-level \"type\" field with a value of \"module\".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Strings passed in as an argument to --eval, or piped to node via STDIN,\nwith the flag --input-type=module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js will treat as CommonJS all other forms of input, such as .js files\nwhere the nearest parent package.json file contains no top-level \"type\"\nfield, or string input without the flag --input-type. This behavior is to\npreserve backward compatibility. However, now that Node.js supports both\nCommonJS and ES modules, it is best to be explicit whenever possible. Node.js\nwill treat the following as CommonJS when passed to node as the initial input,\nor when referenced by import statements within ES module code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Files ending in .cjs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Files ending in .js when the nearest parent package.json file contains a\ntop-level field \"type\" with a value of \"commonjs\".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Strings passed in as an argument to --eval or --print, or piped to node\nvia STDIN, with the flag --input-type=commonjs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Package authors should include the \"type\" field, even in packages where\nall sources are CommonJS. Being explicit about the type of the package will\nfuture-proof the package in case the default type of Node.js ever changes, and\nit will also make things easier for build tools and loaders to determine how the\nfiles in the package should be interpreted.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "modules": [ + { + "textRaw": "`package.json` and file extensions", + "name": "`package.json`_and_file_extensions", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Within a package, the package.json \"type\" field defines how\nNode.js should interpret .js files. If a package.json file does not have a\n\"type\" field, .js files are treated as CommonJS.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A package.json \"type\" value of \"module\" tells Node.js to interpret .js\nfiles within that package as using ES module syntax.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The \"type\" field applies not only to initial entry points (node my-app.js)\nbut also to files referenced by import statements and import() expressions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // my-app.js, treated as an ES module because there is a package.json\n// file in the same folder with \"type\": \"module\".\n\nimport './startup/init.js';\n// Loaded as ES module since ./startup contains no package.json file,\n// and therefore inherits the \"type\" value from one level up.\n\nimport 'commonjs-package';\n// Loaded as CommonJS since ./node_modules/commonjs-package/package.json\n// lacks a \"type\" field or contains \"type\": \"commonjs\".\n\nimport './node_modules/commonjs-package/index.js';\n// Loaded as CommonJS since ./node_modules/commonjs-package/package.json\n// lacks a \"type\" field or contains \"type\": \"commonjs\".\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Files ending with .mjs are always loaded as ES modules regardless of\nthe nearest parent package.json.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Files ending with .cjs are always loaded as CommonJS regardless of the\nnearest parent package.json.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import './legacy-file.cjs';\n// Loaded as CommonJS since .cjs is always loaded as CommonJS.\n\nimport 'commonjs-package/src/index.mjs';\n// Loaded as ES module since .mjs is always loaded as ES module.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The .mjs and .cjs extensions can be used to mix types within the same\npackage:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Within a \"type\": \"module\" package, Node.js can be instructed to\ninterpret a particular file as CommonJS by naming it with a .cjs\nextension (since both .js and .mjs files are treated as ES modules within\na \"module\" package).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Within a \"type\": \"commonjs\" package, Node.js can be instructed to\ninterpret a particular file as an ES module by naming it with an .mjs\nextension (since both .js and .cjs files are treated as CommonJS within a\n\"commonjs\" package).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`package.json` and file extensions" + }, + { + "textRaw": "`--input-type` flag", + "name": "`--input-type`_flag", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Strings passed in as an argument to --eval (or -e), or piped to node via\nSTDIN, are treated as ES modules when the --input-type=module flag\nis set.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                node --input-type=module --eval \"import { sep } from 'path'; console.log(sep);\"\n\necho \"import { sep } from 'path'; console.log(sep);\" | node --input-type=module\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For completeness there is also --input-type=commonjs, for explicitly running\nstring input as CommonJS. This is the default behavior if --input-type is\nunspecified.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`--input-type` flag" + } + ], + "type": "misc", + "displayName": "Determining module system" + }, + { + "textRaw": "Package entry points", + "name": "package_entry_points", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In a package’s package.json file, two fields can define entry points for a\npackage: \"main\" and \"exports\". The \"main\" field is supported\nin all versions of Node.js, but its capabilities are limited: it only defines\nthe main entry point of the package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The \"exports\" field provides an alternative to \"main\" where the\npackage main entry point can be defined while also encapsulating the package,\npreventing any other entry points besides those defined in \"exports\".\nThis encapsulation allows module authors to define a public interface for\ntheir package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If both \"exports\" and \"main\" are defined, the \"exports\" field\ntakes precedence over \"main\". \"exports\" are not specific to ES\nmodules or CommonJS; \"main\" is overridden by \"exports\" if it\nexists. As such \"main\" cannot be used as a fallback for CommonJS but it\ncan be used as a fallback for legacy versions of Node.js that do not support the\n\"exports\" field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Conditional exports can be used within \"exports\" to define different\npackage entry points per environment, including whether the package is\nreferenced via require or via import. For more information about supporting\nboth CommonJS and ES Modules in a single package please consult\nthe dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Warning: Introducing the \"exports\" field prevents consumers of a\npackage from using any entry points that are not defined, including the\npackage.json (e.g. require('your-package/package.json'). This will\nlikely be a breaking change.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To make the introduction of \"exports\" non-breaking, ensure that every\npreviously supported entry point is exported. It is best to explicitly specify\nentry points so that the package’s public API is well-defined. For example,\na project that previous exported main, lib,\nfeature, and the package.json could use the following package.exports:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"name\": \"my-mod\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib\": \"./lib/index.js\",\n    \"./lib/index\": \"./lib/index.js\",\n    \"./lib/index.js\": \"./lib/index.js\",\n    \"./feature\": \"./feature/index.js\",\n    \"./feature/index.js\": \"./feature/index.js\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Alternatively a project could choose to export entire folders:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"name\": \"my-mod\",\n  \"exports\": {\n    \".\": \"./lib/index.js\",\n    \"./lib\": \"./lib/index.js\",\n    \"./lib/*\": \"./lib/*.js\",\n    \"./feature\": \"./feature/index.js\",\n    \"./feature/*\": \"./feature/*.js\",\n    \"./package.json\": \"./package.json\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                As a last resort, package encapsulation can be disabled entirely by creating an\nexport for the root of the package \"./*\": \"./*\". This exposes every file\nin the package at the cost of disabling the encapsulation and potential tooling\nbenefits this provides. As the ES Module loader in Node.js enforces the use of\nthe full specifier path, exporting the root rather than being explicit\nabout entry is less expressive than either of the prior examples. Not only\nis encapsulation lost but module consumers are unable to\nimport feature from 'my-mod/feature' as they need to provide the full\npath import feature from 'my-mod/feature/index.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "modules": [ + { + "textRaw": "Main entry point export", + "name": "main_entry_point_export", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                To set the main entry point for a package, it is advisable to define both\n\"exports\" and \"main\" in the package’s package.json file:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"main\": \"./main.js\",\n  \"exports\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When the \"exports\" field is defined, all subpaths of the package are\nencapsulated and no longer available to importers. For example,\nrequire('pkg/subpath.js') throws an ERR_PACKAGE_PATH_NOT_EXPORTED\nerror.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This encapsulation of exports provides more reliable guarantees\nabout package interfaces for tools and when handling semver upgrades for a\npackage. It is not a strong encapsulation since a direct require of any\nabsolute subpath of the package such as\nrequire('/path/to/node_modules/pkg/subpath.js') will still load subpath.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Main entry point export" + }, + { + "textRaw": "Subpath exports", + "name": "subpath_exports", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When using the \"exports\" field, custom subpaths can be defined along\nwith the main entry point by treating the main entry point as the\n\".\" subpath:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \".\": \"./main.js\",\n    \"./submodule\": \"./src/submodule.js\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Now only the defined subpath in \"exports\" can be imported by a consumer:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import submodule from 'es-module-package/submodule';\n// Loads ./node_modules/es-module-package/src/submodule.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                While other subpaths will error:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import submodule from 'es-module-package/private-module.js';\n// Throws ERR_PACKAGE_PATH_NOT_EXPORTED\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Subpath exports" + }, + { + "textRaw": "Subpath imports", + "name": "subpath_imports", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In addition to the \"exports\" field, it is possible to define internal\npackage import maps that only apply to import specifiers from within the package\nitself.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Entries in the imports field must always start with # to ensure they are\ndisambiguated from package specifiers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For example, the imports field can be used to gain the benefits of conditional\nexports for internal modules:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // package.json\n{\n  \"imports\": {\n    \"#dep\": {\n      \"node\": \"dep-node-native\",\n      \"default\": \"./dep-polyfill.js\"\n    }\n  },\n  \"dependencies\": {\n    \"dep-node-native\": \"^1.0.0\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                where import '#dep' does not get the resolution of the external package\ndep-node-native (including its exports in turn), and instead gets the local\nfile ./dep-polyfill.js relative to the package in other environments.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Unlike the \"exports\" field, the \"imports\" field permits mapping to external\npackages.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The resolution rules for the imports field are otherwise\nanalogous to the exports field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Subpath imports" + }, + { + "textRaw": "Subpath patterns", + "name": "subpath_patterns", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For packages with a small number of exports or imports, we recommend\nexplicitly listing each exports subpath entry. But for packages that have\nlarge numbers of subpaths, this might cause package.json bloat and\nmaintenance issues.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For these use cases, subpath export patterns can be used instead:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./node_modules/es-module-package/package.json\n{\n  \"exports\": {\n    \"./features/*\": \"./src/features/*.js\"\n  },\n  \"imports\": {\n    \"#internal/*\": \"./src/internal/*.js\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The left hand matching pattern must always end in *. All instances of * on\nthe right hand side will then be replaced with this value, including if it\ncontains any / separators.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import featureX from 'es-module-package/features/x';\n// Loads ./node_modules/es-module-package/src/features/x.js\n\nimport featureY from 'es-module-package/features/y/y';\n// Loads ./node_modules/es-module-package/src/features/y/y.js\n\nimport internalZ from '#internal/z';\n// Loads ./node_modules/es-module-package/src/internal/z.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This is a direct static replacement without any special handling for file\nextensions. In the previous example, pkg/features/x.json would be resolved to\n./src/features/x.json.js in the mapping.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The property of exports being statically enumerable is maintained with exports\npatterns since the individual exports for a package can be determined by\ntreating the right hand side target pattern as a ** glob against the list of\nfiles within the package. Because node_modules paths are forbidden in exports\ntargets, this expansion is dependent on only the files of the package itself.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Subpath patterns" + }, + { + "textRaw": "Exports sugar", + "name": "exports_sugar", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the \".\" export is the only export, the \"exports\" field provides sugar\nfor this case being the direct \"exports\" field value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the \".\" export has a fallback array or string value, then the\n\"exports\" field can be set to this value directly.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"exports\": {\n    \".\": \"./main.js\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                can be written:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"exports\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Exports sugar" + }, + { + "textRaw": "Conditional exports", + "name": "conditional_exports", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Conditional exports provide a way to map to different paths depending on\ncertain conditions. They are supported for both CommonJS and ES module imports.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For example, a package that wants to provide different ES module exports for\nrequire() and import can be written:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // package.json\n{\n  \"main\": \"./main-require.cjs\",\n  \"exports\": {\n    \"import\": \"./main-module.js\",\n    \"require\": \"./main-require.cjs\"\n  },\n  \"type\": \"module\"\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js supports the following conditions out of the box:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"import\" - matches when the package is loaded via import or\nimport(), or via any top-level import or resolve operation by the\nECMAScript module loader. Applies regardless of the module format of the\ntarget file. Always mutually exclusive with \"require\".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"require\" - matches when the package is loaded via require(). The\nreferenced file should be loadable with require() although the condition\nmatches regardless of the module format of the target file. Expected\nformats include CommonJS, JSON, and native addons but not ES modules as\nrequire() doesn't support them. Always mutually exclusive with\n\"import\".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"node\" - matches for any Node.js environment. Can be a CommonJS or ES\nmodule file. This condition should always come after \"import\" or\n\"require\".
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"default\" - the generic fallback that always matches. Can be a CommonJS\nor ES module file. This condition should always come last.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Within the \"exports\" object, key order is significant. During condition\nmatching, earlier entries have higher priority and take precedence over later\nentries. The general rule is that conditions should be from most specific to\nleast specific in object order.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Other conditions such as \"browser\", \"electron\", \"deno\", \"react-native\",\netc., are unknown to Node.js, and thus ignored. Runtimes or tools other than\nNode.js can use them at their discretion. Further restrictions, definitions, or\nguidance on condition names might occur in the future.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Using the \"import\" and \"require\" conditions can lead to some hazards,\nwhich are further explained in the dual CommonJS/ES module packages section.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Conditional exports can also be extended to exports subpaths, for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \".\": \"./main.js\",\n    \"./feature\": {\n      \"node\": \"./feature-node.js\",\n      \"default\": \"./feature.js\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Defines a package where require('pkg/feature') and import 'pkg/feature'\ncould provide different implementations between Node.js and other JS\nenvironments.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When using environment branches, always include a \"default\" condition where\npossible. Providing a \"default\" condition ensures that any unknown JS\nenvironments are able to use this universal implementation, which helps avoid\nthese JS environments from having to pretend to be existing environments in\norder to support packages with conditional exports. For this reason, using\n\"node\" and \"default\" condition branches is usually preferable to using\n\"node\" and \"browser\" condition branches.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Conditional exports" + }, + { + "textRaw": "Nested conditions", + "name": "nested_conditions", + "stability": 1, + "stabilityText": "Experimental", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In addition to direct mappings, Node.js also supports nested condition objects.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For example, to define a package that only has dual mode entry points for\nuse in Node.js but not the browser:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"main\": \"./main.js\",\n  \"exports\": {\n    \"node\": {\n      \"import\": \"./feature-node.mjs\",\n      \"require\": \"./feature-node.cjs\"\n    },\n    \"default\": \"./feature.mjs\",\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Conditions continue to be matched in order as with flat conditions. If\na nested conditional does not have any mapping it will continue checking\nthe remaining conditions of the parent condition. In this way nested\nconditions behave analogously to nested JavaScript if statements.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Nested conditions" + }, + { + "textRaw": "Resolving user conditions", + "name": "resolving_user_conditions", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When running Node.js, custom user conditions can be added with the\n--conditions flag:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                node --conditions=development main.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                which would then resolve the \"development\" condition in package imports and\nexports, while resolving the existing \"node\", \"default\", \"import\", and\n\"require\" conditions as appropriate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Any number of custom conditions can be set with repeat flags.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Resolving user conditions" + }, + { + "textRaw": "Self-referencing a package using its name", + "name": "self-referencing_a_package_using_its_name", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Within a package, the values defined in the package’s\npackage.json \"exports\" field can be referenced via the package’s name.\nFor example, assuming the package.json is:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // package.json\n{\n  \"name\": \"a-package\",\n  \"exports\": {\n    \".\": \"./main.mjs\",\n    \"./foo\": \"./foo.js\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Then any module in that package can reference an export in the package itself:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./a-module.mjs\nimport { something } from 'a-package'; // Imports \"something\" from ./main.mjs.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Self-referencing is available only if package.json has \"exports\", and\nwill allow importing only what that \"exports\" (in the package.json)\nallows. So the code below, given the previous package, will generate a runtime\nerror:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./another-module.mjs\n\n// Imports \"another\" from ./m.mjs. Fails because\n// the \"package.json\" \"exports\" field\n// does not provide an export named \"./m.mjs\".\nimport { another } from 'a-package/m.mjs';\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Self-referencing is also available when using require, both in an ES module,\nand in a CommonJS one. For example, this code will also work:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./a-module.js\nconst { something } = require('a-package/foo'); // Loads from ./foo.js.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Self-referencing a package using its name" + } + ], + "type": "misc", + "displayName": "Package entry points" + }, + { + "textRaw": "Dual CommonJS/ES module packages", + "name": "dual_commonjs/es_module_packages", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Prior to the introduction of support for ES modules in Node.js, it was a common\npattern for package authors to include both CommonJS and ES module JavaScript\nsources in their package, with package.json \"main\" specifying the\nCommonJS entry point and package.json \"module\" specifying the ES module\nentry point.\nThis enabled Node.js to run the CommonJS entry point while build tools such as\nbundlers used the ES module entry point, since Node.js ignored (and still\nignores) the top-level \"module\" field.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js can now run ES module entry points, and a package can contain both\nCommonJS and ES module entry points (either via separate specifiers such as\n'pkg' and 'pkg/es-module', or both at the same specifier via Conditional\nexports). Unlike in the scenario where \"module\" is only used by bundlers,\nor ES module files are transpiled into CommonJS on the fly before evaluation by\nNode.js, the files referenced by the ES module entry point are evaluated as ES\nmodules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "modules": [ + { + "textRaw": "Dual package hazard", + "name": "dual_package_hazard", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When an application is using a package that provides both CommonJS and ES module\nsources, there is a risk of certain bugs if both versions of the package get\nloaded. This potential comes from the fact that the pkgInstance created by\nconst pkgInstance = require('pkg') is not the same as the pkgInstance\ncreated by import pkgInstance from 'pkg' (or an alternative main path like\n'pkg/module'). This is the “dual package hazard,” where two versions of the\nsame package can be loaded within the same runtime environment. While it is\nunlikely that an application or package would intentionally load both versions\ndirectly, it is common for an application to load one version while a dependency\nof the application loads the other version. This hazard can happen because\nNode.js supports intermixing CommonJS and ES modules, and can lead to unexpected\nbehavior.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the package main export is a constructor, an instanceof comparison of\ninstances created by the two versions returns false, and if the export is an\nobject, properties added to one (like pkgInstance.foo = 3) are not present on\nthe other. This differs from how import and require statements work in\nall-CommonJS or all-ES module environments, respectively, and therefore is\nsurprising to users. It also differs from the behavior users are familiar with\nwhen using transpilation via tools like Babel or esm.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Dual package hazard" + }, + { + "textRaw": "Writing dual packages while avoiding or minimizing hazards", + "name": "writing_dual_packages_while_avoiding_or_minimizing_hazards", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                First, the hazard described in the previous section occurs when a package\ncontains both CommonJS and ES module sources and both sources are provided for\nuse in Node.js, either via separate main entry points or exported paths. A\npackage might instead be written where any version of Node.js receives only\nCommonJS sources, and any separate ES module sources the package might contain\nare intended only for other environments such as browsers. Such a package\nwould be usable by any version of Node.js, since import can refer to CommonJS\nfiles; but it would not provide any of the advantages of using ES module syntax.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A package might also switch from CommonJS to ES module syntax in a breaking\nchange version bump. This has the disadvantage that the\nnewest version of the package would only be usable in ES module-supporting\nversions of Node.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Every pattern has tradeoffs, but there are two broad approaches that satisfy the\nfollowing conditions:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. The package is usable via both require and import.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. The package is usable in both current Node.js and older versions of Node.js\nthat lack support for ES modules.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                5. The package main entry point, e.g. 'pkg' can be used by both require to\nresolve to a CommonJS file and by import to resolve to an ES module file.\n(And likewise for exported paths, e.g. 'pkg/feature'.)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                6. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                7. The package provides named exports, e.g. import { name } from 'pkg' rather\nthan import pkg from 'pkg'; pkg.name.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                8. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                9. The package is potentially usable in other ES module environments such as\nbrowsers.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                10. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                11. The hazards described in the previous section are avoided or minimized.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                12. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "modules": [ + { + "textRaw": "Approach #1: Use an ES module wrapper", + "name": "approach_#1:_use_an_es_module_wrapper", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Write the package in CommonJS or transpile ES module sources into CommonJS, and\ncreate an ES module wrapper file that defines the named exports. Using\nConditional exports, the ES module wrapper is used for import and the\nCommonJS entry point for require.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \"import\": \"./wrapper.mjs\",\n    \"require\": \"./index.cjs\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The preceding example uses explicit extensions .mjs and .cjs.\nIf your files use the .js extension, \"type\": \"module\" will cause such files\nto be treated as ES modules, just as \"type\": \"commonjs\" would cause them\nto be treated as CommonJS.\nSee Enabling.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./node_modules/pkg/index.cjs\nexports.name = 'value';\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./node_modules/pkg/wrapper.mjs\nimport cjsModule from './index.cjs';\nexport const name = cjsModule.name;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In this example, the name from import { name } from 'pkg' is the same\nsingleton as the name from const { name } = require('pkg'). Therefore ===\nreturns true when comparing the two names and the divergent specifier hazard\nis avoided.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the module is not simply a list of named exports, but rather contains a\nunique function or object export like module.exports = function () { ... },\nor if support in the wrapper for the import pkg from 'pkg' pattern is desired,\nthen the wrapper would instead be written to export the default optionally\nalong with any named exports as well:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import cjsModule from './index.cjs';\nexport const name = cjsModule.name;\nexport default cjsModule;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The package is currently written in CommonJS and the author would prefer not\nto refactor it into ES module syntax, but wishes to provide named exports for\nES module consumers.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The package has other packages that depend on it, and the end user might\ninstall both this package and those other packages. For example a utilities\npackage is used directly in an application, and a utilities-plus package\nadds a few more functions to utilities. Because the wrapper exports\nunderlying CommonJS files, it doesn’t matter if utilities-plus is written in\nCommonJS or ES module syntax; it will work either way.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The package stores internal state, and the package author would prefer not to\nrefactor the package to isolate its state management. See the next section.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A variant of this approach not requiring conditional exports for consumers could\nbe to add an export, e.g. \"./module\", to point to an all-ES module-syntax\nversion of the package. This could be used via import 'pkg/module' by users\nwho are certain that the CommonJS version will not be loaded anywhere in the\napplication, such as by dependencies; or if the CommonJS version can be loaded\nbut doesn’t affect the ES module version (for example, because the package is\nstateless):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \".\": \"./index.cjs\",\n    \"./module\": \"./wrapper.mjs\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Approach #1: Use an ES module wrapper" + }, + { + "textRaw": "Approach #2: Isolate state", + "name": "approach_#2:_isolate_state", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A package.json file can define the separate CommonJS and ES module entry\npoints directly:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \"import\": \"./index.mjs\",\n    \"require\": \"./index.cjs\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This can be done if both the CommonJS and ES module versions of the package are\nequivalent, for example because one is the transpiled output of the other; and\nthe package’s management of state is carefully isolated (or the package is\nstateless).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The reason that state is an issue is because both the CommonJS and ES module\nversions of the package might get used within an application; for example, the\nuser’s application code could import the ES module version while a dependency\nrequires the CommonJS version. If that were to occur, two copies of the\npackage would be loaded in memory and therefore two separate states would be\npresent. This would likely cause hard-to-troubleshoot bugs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Aside from writing a stateless package (if JavaScript’s Math were a package,\nfor example, it would be stateless as all of its methods are static), there are\nsome ways to isolate state so that it’s shared between the potentially loaded\nCommonJS and ES module instances of the package:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                1. \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  If possible, contain all state within an instantiated object. JavaScript’s\nDate, for example, needs to be instantiated to contain state; if it were a\npackage, it would be used like this:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  import Date from 'date';\nconst someDate = new Date();\n// someDate contains state; Date does not\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  The new keyword isn’t required; a package’s function can return a new\nobject, or modify a passed-in object, to keep the state external to the\npackage.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                3. \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Isolate the state in one or more CommonJS files that are shared between the\nCommonJS and ES module versions of the package. For example, if the CommonJS\nand ES module entry points are index.cjs and index.mjs, respectively:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  // ./node_modules/pkg/index.cjs\nconst state = require('./state.cjs');\nmodule.exports.state = state;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  // ./node_modules/pkg/index.mjs\nimport state from './state.cjs';\nexport {\n  state\n};\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Even if pkg is used via both require and import in an application (for\nexample, via import in application code and via require by a dependency)\neach reference of pkg will contain the same state; and modifying that\nstate from either module system will apply to both.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Any plugins that attach to the package’s singleton would need to separately\nattach to both the CommonJS and ES module singletons.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This approach is appropriate for any of the following use cases:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The package is currently written in ES module syntax and the package author\nwants that version to be used wherever such syntax is supported.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The package is stateless or its state can be isolated without too much\ndifficulty.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • The package is unlikely to have other public packages that depend on it, or if\nit does, the package is stateless or has state that need not be shared between\ndependencies or with the overall application.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Even with isolated state, there is still the cost of possible extra code\nexecution between the CommonJS and ES module versions of a package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                As with the previous approach, a variant of this approach not requiring\nconditional exports for consumers could be to add an export, e.g.\n\"./module\", to point to an all-ES module-syntax version of the package:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // ./node_modules/pkg/package.json\n{\n  \"type\": \"module\",\n  \"main\": \"./index.cjs\",\n  \"exports\": {\n    \".\": \"./index.cjs\",\n    \"./module\": \"./index.mjs\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "Approach #2: Isolate state" + } + ], + "type": "module", + "displayName": "Writing dual packages while avoiding or minimizing hazards" + } + ], + "type": "misc", + "displayName": "Dual CommonJS/ES module packages" + }, + { + "textRaw": "Node.js `package.json` field definitions", + "name": "node.js_`package.json`_field_definitions", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This section describes the fields used by the Node.js runtime. Other tools (such\nas npm) use\nadditional fields which are ignored by Node.js and not documented here.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The following fields in package.json files are used in Node.js:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"name\" - Relevant when using named imports within a package. Also used\nby package managers as the name of the package.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"type\" - The package type determining whether to load .js files as\nCommonJS or ES modules.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"exports\" - Package exports and conditional exports. When present,\nlimits which submodules can be loaded from within the package.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"main\" - The default module when loading the package, if exports is not\nspecified, and in versions of Node.js prior to the introduction of exports.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \"imports\" - Package imports, for use by modules within the package\nitself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "modules": [ + { + "textRaw": "`\"name\"`", + "name": "`\"name\"`", + "meta": { + "added": [ + "v12.16.0" + ], + "changes": [ + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31002", + "description": "Remove the `--experimental-resolve-self` option." + } + ] + }, + "desc": "\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"name\": \"package-name\"\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The \"name\" field defines your package’s name. Publishing to the\nnpm registry requires a name that satisfies\ncertain requirements.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The \"name\" field can be used in addition to the \"exports\" field to\nself-reference a package using its name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`\"name\"`" + }, + { + "textRaw": "`\"type\"`", + "name": "`\"type\"`", + "meta": { + "added": [ + "v12.0.0" + ], + "changes": [ + { + "version": [ + "v12.17.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/29866", + "description": "Unflag `--experimental-modules`." + } + ] + }, + "desc": "\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The \"type\" field defines the module format that Node.js uses for all\n.js files that have that package.json file as their nearest parent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Files ending with .js are loaded as ES modules when the nearest parent\npackage.json file contains a top-level field \"type\" with a value of\n\"module\".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The nearest parent package.json is defined as the first package.json found\nwhen searching in the current folder, that folder’s parent, and so on up\nuntil a node_modules folder or the volume root is reached.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // package.json\n{\n  \"type\": \"module\"\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                # In same folder as preceding package.json\nnode my-app.js # Runs as ES module\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the nearest parent package.json lacks a \"type\" field, or contains\n\"type\": \"commonjs\", .js files are treated as CommonJS. If the volume\nroot is reached and no package.json is found, .js files are treated as\nCommonJS.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import statements of .js files are treated as ES modules if the nearest\nparent package.json contains \"type\": \"module\".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // my-app.js, part of the same example as above\nimport './startup.js'; // Loaded as ES module because of package.json\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Regardless of the value of the \"type\" field, .mjs files are always treated\nas ES modules and .cjs files are always treated as CommonJS.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`\"type\"`" + }, + { + "textRaw": "`\"exports\"`", + "name": "`\"exports\"`", + "meta": { + "added": [ + "v12.7.0" + ], + "changes": [ + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/29978", + "description": "Implement conditional exports." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31001", + "description": "Remove the `--experimental-conditional-exports` option." + }, + { + "version": [ + "v12.16.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/31008", + "description": "Implement logical conditional exports ordering." + }, + { + "version": [ + "v12.20.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/34718", + "description": "Add support for `\"exports\"` patterns." + } + ] + }, + "desc": "\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"exports\": \"./index.js\"\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The \"exports\" field allows defining the entry points of a package when\nimported by name loaded either via a node_modules lookup or a\nself-reference to its own name. It is supported in Node.js 12+ as an\nalternative to the \"main\" that can support defining subpath exports\nand conditional exports while encapsulating internal unexported modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Conditional Exports can also be used within \"exports\" to define different\npackage entry points per environment, including whether the package is\nreferenced via require or via import.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                All paths defined in the \"exports\" must be relative file URLs starting with\n./.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`\"exports\"`" + }, + { + "textRaw": "`\"main\"`", + "name": "`\"main\"`", + "meta": { + "added": [ + "v0.4.0" + ], + "changes": [] + }, + "desc": "\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                {\n  \"main\": \"./main.js\"\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The \"main\" field defines the script that is used when the package directory\nis loaded via require(). Its value\nis interpreted as a path.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                require('./path/to/directory'); // This resolves to ./path/to/directory/main.js.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When a package has an \"exports\" field, this will take precedence over the\n\"main\" field when importing the package by name.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`\"main\"`" + }, + { + "textRaw": "`\"imports\"`", + "name": "`\"imports\"`", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "stability": 1, + "stabilityText": "Experimental", + "desc": "\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // package.json\n{\n  \"imports\": {\n    \"#dep\": {\n      \"node\": \"dep-node-native\",\n      \"default\": \"./dep-polyfill.js\"\n    }\n  },\n  \"dependencies\": {\n    \"dep-node-native\": \"^1.0.0\"\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Entries in the imports field must be strings starting with #.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Import maps permit mapping to external packages.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This field defines subpath imports for the current package.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "type": "module", + "displayName": "`\"imports\"`" + } + ], + "type": "misc", + "displayName": "Node.js `package.json` field definitions" + } + ] + } + ] +} \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/packages.md nodejs-mozilla-12.22.12/doc/api/packages.md --- nodejs-mozilla-12.18.1/doc/api/packages.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/packages.md 2022-04-05 07:17:04.000000000 +0000 @@ -0,0 +1,1036 @@ +# Modules: Packages + + + + + +## Introduction + +A package is a folder tree described by a `package.json` file. The package +consists of the folder containing the `package.json` file and all subfolders +until the next folder containing another `package.json` file, or a folder +named `node_modules`. + +This page provides guidance for package authors writing `package.json` files +along with a reference for the [`package.json`][] fields defined by Node.js. + +## Determining module system + +Node.js will treat the following as [ES modules][] when passed to `node` as the +initial input, or when referenced by `import` statements within ES module code: + +* Files ending in `.mjs`. + +* Files ending in `.js` when the nearest parent `package.json` file contains a + top-level [`"type"`][] field with a value of `"module"`. + +* Strings passed in as an argument to `--eval`, or piped to `node` via `STDIN`, + with the flag `--input-type=module`. + +Node.js will treat as [CommonJS][] all other forms of input, such as `.js` files +where the nearest parent `package.json` file contains no top-level `"type"` +field, or string input without the flag `--input-type`. This behavior is to +preserve backward compatibility. However, now that Node.js supports both +CommonJS and ES modules, it is best to be explicit whenever possible. Node.js +will treat the following as CommonJS when passed to `node` as the initial input, +or when referenced by `import` statements within ES module code: + +* Files ending in `.cjs`. + +* Files ending in `.js` when the nearest parent `package.json` file contains a + top-level field [`"type"`][] with a value of `"commonjs"`. + +* Strings passed in as an argument to `--eval` or `--print`, or piped to `node` + via `STDIN`, with the flag `--input-type=commonjs`. + +Package authors should include the [`"type"`][] field, even in packages where +all sources are CommonJS. Being explicit about the `type` of the package will +future-proof the package in case the default type of Node.js ever changes, and +it will also make things easier for build tools and loaders to determine how the +files in the package should be interpreted. + +### `package.json` and file extensions + +Within a package, the [`package.json`][] [`"type"`][] field defines how +Node.js should interpret `.js` files. If a `package.json` file does not have a +`"type"` field, `.js` files are treated as [CommonJS][]. + +A `package.json` `"type"` value of `"module"` tells Node.js to interpret `.js` +files within that package as using [ES module][] syntax. + +The `"type"` field applies not only to initial entry points (`node my-app.js`) +but also to files referenced by `import` statements and `import()` expressions. + +```js +// my-app.js, treated as an ES module because there is a package.json +// file in the same folder with "type": "module". + +import './startup/init.js'; +// Loaded as ES module since ./startup contains no package.json file, +// and therefore inherits the "type" value from one level up. + +import 'commonjs-package'; +// Loaded as CommonJS since ./node_modules/commonjs-package/package.json +// lacks a "type" field or contains "type": "commonjs". + +import './node_modules/commonjs-package/index.js'; +// Loaded as CommonJS since ./node_modules/commonjs-package/package.json +// lacks a "type" field or contains "type": "commonjs". +``` + +Files ending with `.mjs` are always loaded as [ES modules][] regardless of +the nearest parent `package.json`. + +Files ending with `.cjs` are always loaded as [CommonJS][] regardless of the +nearest parent `package.json`. + +```js +import './legacy-file.cjs'; +// Loaded as CommonJS since .cjs is always loaded as CommonJS. + +import 'commonjs-package/src/index.mjs'; +// Loaded as ES module since .mjs is always loaded as ES module. +``` + +The `.mjs` and `.cjs` extensions can be used to mix types within the same +package: + +* Within a `"type": "module"` package, Node.js can be instructed to + interpret a particular file as [CommonJS][] by naming it with a `.cjs` + extension (since both `.js` and `.mjs` files are treated as ES modules within + a `"module"` package). + +* Within a `"type": "commonjs"` package, Node.js can be instructed to + interpret a particular file as an [ES module][] by naming it with an `.mjs` + extension (since both `.js` and `.cjs` files are treated as CommonJS within a + `"commonjs"` package). + +### `--input-type` flag + +Strings passed in as an argument to `--eval` (or `-e`), or piped to `node` via +`STDIN`, are treated as [ES modules][] when the `--input-type=module` flag +is set. + +```bash +node --input-type=module --eval "import { sep } from 'path'; console.log(sep);" + +echo "import { sep } from 'path'; console.log(sep);" | node --input-type=module +``` + +For completeness there is also `--input-type=commonjs`, for explicitly running +string input as CommonJS. This is the default behavior if `--input-type` is +unspecified. + +## Package entry points + +In a package’s `package.json` file, two fields can define entry points for a +package: [`"main"`][] and [`"exports"`][]. The [`"main"`][] field is supported +in all versions of Node.js, but its capabilities are limited: it only defines +the main entry point of the package. + +The [`"exports"`][] field provides an alternative to [`"main"`][] where the +package main entry point can be defined while also encapsulating the package, +**preventing any other entry points besides those defined in [`"exports"`][]**. +This encapsulation allows module authors to define a public interface for +their package. + +If both [`"exports"`][] and [`"main"`][] are defined, the [`"exports"`][] field +takes precedence over [`"main"`][]. [`"exports"`][] are not specific to ES +modules or CommonJS; [`"main"`][] is overridden by [`"exports"`][] if it +exists. As such [`"main"`][] cannot be used as a fallback for CommonJS but it +can be used as a fallback for legacy versions of Node.js that do not support the +[`"exports"`][] field. + +[Conditional exports][] can be used within [`"exports"`][] to define different +package entry points per environment, including whether the package is +referenced via `require` or via `import`. For more information about supporting +both CommonJS and ES Modules in a single package please consult +[the dual CommonJS/ES module packages section][]. + +**Warning**: Introducing the [`"exports"`][] field prevents consumers of a +package from using any entry points that are not defined, including the +[`package.json`][] (e.g. `require('your-package/package.json')`. **This will +likely be a breaking change.** + +To make the introduction of [`"exports"`][] non-breaking, ensure that every +previously supported entry point is exported. It is best to explicitly specify +entry points so that the package’s public API is well-defined. For example, +a project that previous exported `main`, `lib`, +`feature`, and the `package.json` could use the following `package.exports`: + +```json +{ + "name": "my-mod", + "exports": { + ".": "./lib/index.js", + "./lib": "./lib/index.js", + "./lib/index": "./lib/index.js", + "./lib/index.js": "./lib/index.js", + "./feature": "./feature/index.js", + "./feature/index.js": "./feature/index.js", + "./package.json": "./package.json" + } +} +``` + +Alternatively a project could choose to export entire folders: + +```json +{ + "name": "my-mod", + "exports": { + ".": "./lib/index.js", + "./lib": "./lib/index.js", + "./lib/*": "./lib/*.js", + "./feature": "./feature/index.js", + "./feature/*": "./feature/*.js", + "./package.json": "./package.json" + } +} +``` + +As a last resort, package encapsulation can be disabled entirely by creating an +export for the root of the package `"./*": "./*"`. This exposes every file +in the package at the cost of disabling the encapsulation and potential tooling +benefits this provides. As the ES Module loader in Node.js enforces the use of +[the full specifier path][], exporting the root rather than being explicit +about entry is less expressive than either of the prior examples. Not only +is encapsulation lost but module consumers are unable to +`import feature from 'my-mod/feature'` as they need to provide the full +path `import feature from 'my-mod/feature/index.js`. + +### Main entry point export + +To set the main entry point for a package, it is advisable to define both +[`"exports"`][] and [`"main"`][] in the package’s [`package.json`][] file: + +```json +{ + "main": "./main.js", + "exports": "./main.js" +} +``` + +When the [`"exports"`][] field is defined, all subpaths of the package are +encapsulated and no longer available to importers. For example, +`require('pkg/subpath.js')` throws an [`ERR_PACKAGE_PATH_NOT_EXPORTED`][] +error. + +This encapsulation of exports provides more reliable guarantees +about package interfaces for tools and when handling semver upgrades for a +package. It is not a strong encapsulation since a direct require of any +absolute subpath of the package such as +`require('/path/to/node_modules/pkg/subpath.js')` will still load `subpath.js`. + +### Subpath exports + +> Stability: 1 - Experimental + +When using the [`"exports"`][] field, custom subpaths can be defined along +with the main entry point by treating the main entry point as the +`"."` subpath: + +```json +{ + "main": "./main.js", + "exports": { + ".": "./main.js", + "./submodule": "./src/submodule.js" + } +} +``` + +Now only the defined subpath in [`"exports"`][] can be imported by a consumer: + +```js +import submodule from 'es-module-package/submodule'; +// Loads ./node_modules/es-module-package/src/submodule.js +``` + +While other subpaths will error: + +```js +import submodule from 'es-module-package/private-module.js'; +// Throws ERR_PACKAGE_PATH_NOT_EXPORTED +``` + +### Subpath imports + +> Stability: 1 - Experimental + +In addition to the [`"exports"`][] field, it is possible to define internal +package import maps that only apply to import specifiers from within the package +itself. + +Entries in the imports field must always start with `#` to ensure they are +disambiguated from package specifiers. + +For example, the imports field can be used to gain the benefits of conditional +exports for internal modules: + +```json +// package.json +{ + "imports": { + "#dep": { + "node": "dep-node-native", + "default": "./dep-polyfill.js" + } + }, + "dependencies": { + "dep-node-native": "^1.0.0" + } +} +``` + +where `import '#dep'` does not get the resolution of the external package +`dep-node-native` (including its exports in turn), and instead gets the local +file `./dep-polyfill.js` relative to the package in other environments. + +Unlike the `"exports"` field, the `"imports"` field permits mapping to external +packages. + +The resolution rules for the imports field are otherwise +analogous to the exports field. + +### Subpath patterns + +> Stability: 1 - Experimental + +For packages with a small number of exports or imports, we recommend +explicitly listing each exports subpath entry. But for packages that have +large numbers of subpaths, this might cause `package.json` bloat and +maintenance issues. + +For these use cases, subpath export patterns can be used instead: + +```json +// ./node_modules/es-module-package/package.json +{ + "exports": { + "./features/*": "./src/features/*.js" + }, + "imports": { + "#internal/*": "./src/internal/*.js" + } +} +``` + +The left hand matching pattern must always end in `*`. All instances of `*` on +the right hand side will then be replaced with this value, including if it +contains any `/` separators. + +```js +import featureX from 'es-module-package/features/x'; +// Loads ./node_modules/es-module-package/src/features/x.js + +import featureY from 'es-module-package/features/y/y'; +// Loads ./node_modules/es-module-package/src/features/y/y.js + +import internalZ from '#internal/z'; +// Loads ./node_modules/es-module-package/src/internal/z.js +``` + +This is a direct static replacement without any special handling for file +extensions. In the previous example, `pkg/features/x.json` would be resolved to +`./src/features/x.json.js` in the mapping. + +The property of exports being statically enumerable is maintained with exports +patterns since the individual exports for a package can be determined by +treating the right hand side target pattern as a `**` glob against the list of +files within the package. Because `node_modules` paths are forbidden in exports +targets, this expansion is dependent on only the files of the package itself. + +### Exports sugar + +> Stability: 1 - Experimental + +If the `"."` export is the only export, the [`"exports"`][] field provides sugar +for this case being the direct [`"exports"`][] field value. + +If the `"."` export has a fallback array or string value, then the +[`"exports"`][] field can be set to this value directly. + +```json +{ + "exports": { + ".": "./main.js" + } +} +``` + +can be written: + +```json +{ + "exports": "./main.js" +} +``` + +### Conditional exports + +> Stability: 1 - Experimental + +Conditional exports provide a way to map to different paths depending on +certain conditions. They are supported for both CommonJS and ES module imports. + +For example, a package that wants to provide different ES module exports for +`require()` and `import` can be written: + +```json +// package.json +{ + "main": "./main-require.cjs", + "exports": { + "import": "./main-module.js", + "require": "./main-require.cjs" + }, + "type": "module" +} +``` + +Node.js supports the following conditions out of the box: + +* `"import"` - matches when the package is loaded via `import` or + `import()`, or via any top-level import or resolve operation by the + ECMAScript module loader. Applies regardless of the module format of the + target file. _Always mutually exclusive with `"require"`._ +* `"require"` - matches when the package is loaded via `require()`. The + referenced file should be loadable with `require()` although the condition + matches regardless of the module format of the target file. Expected + formats include CommonJS, JSON, and native addons but not ES modules as + `require()` doesn't support them. _Always mutually exclusive with + `"import"`._ +* `"node"` - matches for any Node.js environment. Can be a CommonJS or ES + module file. _This condition should always come after `"import"` or + `"require"`._ +* `"default"` - the generic fallback that always matches. Can be a CommonJS + or ES module file. _This condition should always come last._ + +Within the [`"exports"`][] object, key order is significant. During condition +matching, earlier entries have higher priority and take precedence over later +entries. _The general rule is that conditions should be from most specific to +least specific in object order_. + +Other conditions such as `"browser"`, `"electron"`, `"deno"`, `"react-native"`, +etc., are unknown to Node.js, and thus ignored. Runtimes or tools other than +Node.js can use them at their discretion. Further restrictions, definitions, or +guidance on condition names might occur in the future. + +Using the `"import"` and `"require"` conditions can lead to some hazards, +which are further explained in [the dual CommonJS/ES module packages section][]. + +Conditional exports can also be extended to exports subpaths, for example: + +```json +{ + "main": "./main.js", + "exports": { + ".": "./main.js", + "./feature": { + "node": "./feature-node.js", + "default": "./feature.js" + } + } +} +``` + +Defines a package where `require('pkg/feature')` and `import 'pkg/feature'` +could provide different implementations between Node.js and other JS +environments. + +When using environment branches, always include a `"default"` condition where +possible. Providing a `"default"` condition ensures that any unknown JS +environments are able to use this universal implementation, which helps avoid +these JS environments from having to pretend to be existing environments in +order to support packages with conditional exports. For this reason, using +`"node"` and `"default"` condition branches is usually preferable to using +`"node"` and `"browser"` condition branches. + +### Nested conditions + +> Stability: 1 - Experimental + +In addition to direct mappings, Node.js also supports nested condition objects. + +For example, to define a package that only has dual mode entry points for +use in Node.js but not the browser: + +```json +{ + "main": "./main.js", + "exports": { + "node": { + "import": "./feature-node.mjs", + "require": "./feature-node.cjs" + }, + "default": "./feature.mjs", + } +} +``` + +Conditions continue to be matched in order as with flat conditions. If +a nested conditional does not have any mapping it will continue checking +the remaining conditions of the parent condition. In this way nested +conditions behave analogously to nested JavaScript `if` statements. + +### Resolving user conditions + +When running Node.js, custom user conditions can be added with the +`--conditions` flag: + +```bash +node --conditions=development main.js +``` + +which would then resolve the `"development"` condition in package imports and +exports, while resolving the existing `"node"`, `"default"`, `"import"`, and +`"require"` conditions as appropriate. + +Any number of custom conditions can be set with repeat flags. + +### Self-referencing a package using its name + +Within a package, the values defined in the package’s +`package.json` [`"exports"`][] field can be referenced via the package’s name. +For example, assuming the `package.json` is: + +```json +// package.json +{ + "name": "a-package", + "exports": { + ".": "./main.mjs", + "./foo": "./foo.js" + } +} +``` + +Then any module _in that package_ can reference an export in the package itself: + +```js +// ./a-module.mjs +import { something } from 'a-package'; // Imports "something" from ./main.mjs. +``` + +Self-referencing is available only if `package.json` has [`"exports"`][], and +will allow importing only what that [`"exports"`][] (in the `package.json`) +allows. So the code below, given the previous package, will generate a runtime +error: + +```js +// ./another-module.mjs + +// Imports "another" from ./m.mjs. Fails because +// the "package.json" "exports" field +// does not provide an export named "./m.mjs". +import { another } from 'a-package/m.mjs'; +``` + +Self-referencing is also available when using `require`, both in an ES module, +and in a CommonJS one. For example, this code will also work: + +```js +// ./a-module.js +const { something } = require('a-package/foo'); // Loads from ./foo.js. +``` + +## Dual CommonJS/ES module packages + +Prior to the introduction of support for ES modules in Node.js, it was a common +pattern for package authors to include both CommonJS and ES module JavaScript +sources in their package, with `package.json` [`"main"`][] specifying the +CommonJS entry point and `package.json` `"module"` specifying the ES module +entry point. +This enabled Node.js to run the CommonJS entry point while build tools such as +bundlers used the ES module entry point, since Node.js ignored (and still +ignores) the top-level `"module"` field. + +Node.js can now run ES module entry points, and a package can contain both +CommonJS and ES module entry points (either via separate specifiers such as +`'pkg'` and `'pkg/es-module'`, or both at the same specifier via [Conditional +exports][]). Unlike in the scenario where `"module"` is only used by bundlers, +or ES module files are transpiled into CommonJS on the fly before evaluation by +Node.js, the files referenced by the ES module entry point are evaluated as ES +modules. + +### Dual package hazard + +When an application is using a package that provides both CommonJS and ES module +sources, there is a risk of certain bugs if both versions of the package get +loaded. This potential comes from the fact that the `pkgInstance` created by +`const pkgInstance = require('pkg')` is not the same as the `pkgInstance` +created by `import pkgInstance from 'pkg'` (or an alternative main path like +`'pkg/module'`). This is the “dual package hazard,” where two versions of the +same package can be loaded within the same runtime environment. While it is +unlikely that an application or package would intentionally load both versions +directly, it is common for an application to load one version while a dependency +of the application loads the other version. This hazard can happen because +Node.js supports intermixing CommonJS and ES modules, and can lead to unexpected +behavior. + +If the package main export is a constructor, an `instanceof` comparison of +instances created by the two versions returns `false`, and if the export is an +object, properties added to one (like `pkgInstance.foo = 3`) are not present on +the other. This differs from how `import` and `require` statements work in +all-CommonJS or all-ES module environments, respectively, and therefore is +surprising to users. It also differs from the behavior users are familiar with +when using transpilation via tools like [Babel][] or [`esm`][]. + +### Writing dual packages while avoiding or minimizing hazards + +First, the hazard described in the previous section occurs when a package +contains both CommonJS and ES module sources and both sources are provided for +use in Node.js, either via separate main entry points or exported paths. A +package might instead be written where any version of Node.js receives only +CommonJS sources, and any separate ES module sources the package might contain +are intended only for other environments such as browsers. Such a package +would be usable by any version of Node.js, since `import` can refer to CommonJS +files; but it would not provide any of the advantages of using ES module syntax. + +A package might also switch from CommonJS to ES module syntax in a [breaking +change](https://semver.org/) version bump. This has the disadvantage that the +newest version of the package would only be usable in ES module-supporting +versions of Node.js. + +Every pattern has tradeoffs, but there are two broad approaches that satisfy the +following conditions: + +1. The package is usable via both `require` and `import`. +1. The package is usable in both current Node.js and older versions of Node.js + that lack support for ES modules. +1. The package main entry point, e.g. `'pkg'` can be used by both `require` to + resolve to a CommonJS file and by `import` to resolve to an ES module file. + (And likewise for exported paths, e.g. `'pkg/feature'`.) +1. The package provides named exports, e.g. `import { name } from 'pkg'` rather + than `import pkg from 'pkg'; pkg.name`. +1. The package is potentially usable in other ES module environments such as + browsers. +1. The hazards described in the previous section are avoided or minimized. + +#### Approach #1: Use an ES module wrapper + +Write the package in CommonJS or transpile ES module sources into CommonJS, and +create an ES module wrapper file that defines the named exports. Using +[Conditional exports][], the ES module wrapper is used for `import` and the +CommonJS entry point for `require`. + +```json +// ./node_modules/pkg/package.json +{ + "type": "module", + "main": "./index.cjs", + "exports": { + "import": "./wrapper.mjs", + "require": "./index.cjs" + } +} +``` + +The preceding example uses explicit extensions `.mjs` and `.cjs`. +If your files use the `.js` extension, `"type": "module"` will cause such files +to be treated as ES modules, just as `"type": "commonjs"` would cause them +to be treated as CommonJS. +See [Enabling](#esm_enabling). + +```js +// ./node_modules/pkg/index.cjs +exports.name = 'value'; +``` + +```js +// ./node_modules/pkg/wrapper.mjs +import cjsModule from './index.cjs'; +export const name = cjsModule.name; +``` + +In this example, the `name` from `import { name } from 'pkg'` is the same +singleton as the `name` from `const { name } = require('pkg')`. Therefore `===` +returns `true` when comparing the two `name`s and the divergent specifier hazard +is avoided. + +If the module is not simply a list of named exports, but rather contains a +unique function or object export like `module.exports = function () { ... }`, +or if support in the wrapper for the `import pkg from 'pkg'` pattern is desired, +then the wrapper would instead be written to export the default optionally +along with any named exports as well: + +```js +import cjsModule from './index.cjs'; +export const name = cjsModule.name; +export default cjsModule; +``` + +This approach is appropriate for any of the following use cases: +* The package is currently written in CommonJS and the author would prefer not + to refactor it into ES module syntax, but wishes to provide named exports for + ES module consumers. +* The package has other packages that depend on it, and the end user might + install both this package and those other packages. For example a `utilities` + package is used directly in an application, and a `utilities-plus` package + adds a few more functions to `utilities`. Because the wrapper exports + underlying CommonJS files, it doesn’t matter if `utilities-plus` is written in + CommonJS or ES module syntax; it will work either way. +* The package stores internal state, and the package author would prefer not to + refactor the package to isolate its state management. See the next section. + +A variant of this approach not requiring conditional exports for consumers could +be to add an export, e.g. `"./module"`, to point to an all-ES module-syntax +version of the package. This could be used via `import 'pkg/module'` by users +who are certain that the CommonJS version will not be loaded anywhere in the +application, such as by dependencies; or if the CommonJS version can be loaded +but doesn’t affect the ES module version (for example, because the package is +stateless): + +```json +// ./node_modules/pkg/package.json +{ + "type": "module", + "main": "./index.cjs", + "exports": { + ".": "./index.cjs", + "./module": "./wrapper.mjs" + } +} +``` + +#### Approach #2: Isolate state + +A [`package.json`][] file can define the separate CommonJS and ES module entry +points directly: + +```json +// ./node_modules/pkg/package.json +{ + "type": "module", + "main": "./index.cjs", + "exports": { + "import": "./index.mjs", + "require": "./index.cjs" + } +} +``` + +This can be done if both the CommonJS and ES module versions of the package are +equivalent, for example because one is the transpiled output of the other; and +the package’s management of state is carefully isolated (or the package is +stateless). + +The reason that state is an issue is because both the CommonJS and ES module +versions of the package might get used within an application; for example, the +user’s application code could `import` the ES module version while a dependency +`require`s the CommonJS version. If that were to occur, two copies of the +package would be loaded in memory and therefore two separate states would be +present. This would likely cause hard-to-troubleshoot bugs. + +Aside from writing a stateless package (if JavaScript’s `Math` were a package, +for example, it would be stateless as all of its methods are static), there are +some ways to isolate state so that it’s shared between the potentially loaded +CommonJS and ES module instances of the package: + +1. If possible, contain all state within an instantiated object. JavaScript’s + `Date`, for example, needs to be instantiated to contain state; if it were a + package, it would be used like this: + + ```js + import Date from 'date'; + const someDate = new Date(); + // someDate contains state; Date does not + ``` + + The `new` keyword isn’t required; a package’s function can return a new + object, or modify a passed-in object, to keep the state external to the + package. + +1. Isolate the state in one or more CommonJS files that are shared between the + CommonJS and ES module versions of the package. For example, if the CommonJS + and ES module entry points are `index.cjs` and `index.mjs`, respectively: + + ```js + // ./node_modules/pkg/index.cjs + const state = require('./state.cjs'); + module.exports.state = state; + ``` + + ```js + // ./node_modules/pkg/index.mjs + import state from './state.cjs'; + export { + state + }; + ``` + + Even if `pkg` is used via both `require` and `import` in an application (for + example, via `import` in application code and via `require` by a dependency) + each reference of `pkg` will contain the same state; and modifying that + state from either module system will apply to both. + +Any plugins that attach to the package’s singleton would need to separately +attach to both the CommonJS and ES module singletons. + +This approach is appropriate for any of the following use cases: +* The package is currently written in ES module syntax and the package author + wants that version to be used wherever such syntax is supported. +* The package is stateless or its state can be isolated without too much + difficulty. +* The package is unlikely to have other public packages that depend on it, or if + it does, the package is stateless or has state that need not be shared between + dependencies or with the overall application. + +Even with isolated state, there is still the cost of possible extra code +execution between the CommonJS and ES module versions of a package. + +As with the previous approach, a variant of this approach not requiring +conditional exports for consumers could be to add an export, e.g. +`"./module"`, to point to an all-ES module-syntax version of the package: + +```json +// ./node_modules/pkg/package.json +{ + "type": "module", + "main": "./index.cjs", + "exports": { + ".": "./index.cjs", + "./module": "./index.mjs" + } +} +``` + +## Node.js `package.json` field definitions + +This section describes the fields used by the Node.js runtime. Other tools (such +as [npm](https://docs.npmjs.com/creating-a-package-json-file)) use +additional fields which are ignored by Node.js and not documented here. + +The following fields in `package.json` files are used in Node.js: + +* [`"name"`][] - Relevant when using named imports within a package. Also used + by package managers as the name of the package. +* [`"type"`][] - The package type determining whether to load `.js` files as + CommonJS or ES modules. +* [`"exports"`][] - Package exports and conditional exports. When present, + limits which submodules can be loaded from within the package. +* [`"main"`][] - The default module when loading the package, if exports is not + specified, and in versions of Node.js prior to the introduction of exports. +* [`"imports"`][] - Package imports, for use by modules within the package + itself. + +### `"name"` + + +* Type: {string} + +```json +{ + "name": "package-name" +} +``` + +The `"name"` field defines your package’s name. Publishing to the +_npm_ registry requires a name that satisfies +[certain requirements](https://docs.npmjs.com/files/package.json#name). + +The `"name"` field can be used in addition to the [`"exports"`][] field to +[self-reference][] a package using its name. + +### `"type"` + + +* Type: {string} + +The `"type"` field defines the module format that Node.js uses for all +`.js` files that have that `package.json` file as their nearest parent. + +Files ending with `.js` are loaded as ES modules when the nearest parent +`package.json` file contains a top-level field `"type"` with a value of +`"module"`. + +The nearest parent `package.json` is defined as the first `package.json` found +when searching in the current folder, that folder’s parent, and so on up +until a node_modules folder or the volume root is reached. + +```json +// package.json +{ + "type": "module" +} +``` + +```bash +# In same folder as preceding package.json +node my-app.js # Runs as ES module +``` + +If the nearest parent `package.json` lacks a `"type"` field, or contains +`"type": "commonjs"`, `.js` files are treated as [CommonJS][]. If the volume +root is reached and no `package.json` is found, `.js` files are treated as +[CommonJS][]. + +`import` statements of `.js` files are treated as ES modules if the nearest +parent `package.json` contains `"type": "module"`. + +```js +// my-app.js, part of the same example as above +import './startup.js'; // Loaded as ES module because of package.json +``` + +Regardless of the value of the `"type"` field, `.mjs` files are always treated +as ES modules and `.cjs` files are always treated as CommonJS. + +### `"exports"` + + +* Type: {Object} | {string} | {string[]} + +```json +{ + "exports": "./index.js" +} +``` + +The `"exports"` field allows defining the [entry points][] of a package when +imported by name loaded either via a `node_modules` lookup or a +[self-reference][] to its own name. It is supported in Node.js 12+ as an +alternative to the [`"main"`][] that can support defining [subpath exports][] +and [conditional exports][] while encapsulating internal unexported modules. + +[Conditional Exports][] can also be used within `"exports"` to define different +package entry points per environment, including whether the package is +referenced via `require` or via `import`. + +All paths defined in the `"exports"` must be relative file URLs starting with +`./`. + +### `"main"` + + +* Type: {string} + +```json +{ + "main": "./main.js" +} +``` + +The `"main"` field defines the script that is used when the [package directory +is loaded via `require()`](modules.html#modules_folders_as_modules). Its value +is interpreted as a path. + +```js +require('./path/to/directory'); // This resolves to ./path/to/directory/main.js. +``` + +When a package has an [`"exports"`][] field, this will take precedence over the +`"main"` field when importing the package by name. + +### `"imports"` + + +> Stability: 1 - Experimental + +* Type: {Object} + +```json +// package.json +{ + "imports": { + "#dep": { + "node": "dep-node-native", + "default": "./dep-polyfill.js" + } + }, + "dependencies": { + "dep-node-native": "^1.0.0" + } +} +``` + +Entries in the imports field must be strings starting with `#`. + +Import maps permit mapping to external packages. + +This field defines [subpath imports][] for the current package. + +[Babel]: https://babeljs.io/ +[Conditional exports]: #packages_conditional_exports +[CommonJS]: modules.html +[`ERR_PACKAGE_PATH_NOT_EXPORTED`]: errors.html#errors_err_package_path_not_exported +[ES modules]: esm.html +[ES module]: esm.html +[`esm`]: https://github.com/standard-things/esm#readme +[`"exports"`]: #packages_exports +[`"main"`]: #packages_main +[`"name"`]: #packages_name +[`"imports"`]: #packages_imports +[`"type"`]: #packages_type +[entry points]: #packages_package_entry_points +[`package.json`]: #packages_node_js_package_json_field_definitions +[self-reference]: #packages_self_referencing_a_package_using_its_name +[subpath exports]: #packages_subpath_exports +[subpath imports]: #packages_subpath_imports +[the full specifier path]: esm.md#esm_mandatory_file_extensions +[the dual CommonJS/ES module packages section]: #packages_dual_commonjs_es_module_packages diff -Nru nodejs-mozilla-12.18.1/doc/api/path.html nodejs-mozilla-12.22.12/doc/api/path.html --- nodejs-mozilla-12.18.1/doc/api/path.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/path.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Path | Node.js v12.18.1 Documentation + + Path | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    18. @@ -121,8 +128,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Path

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Path
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Windows vs. POSIX
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • path.basename(path[, ext])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -149,10 +155,10 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Path#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Source Code: lib/path.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The path module provides utilities for working with file and directory paths. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const path = require('path');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const path = require('path');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Windows vs. POSIX#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The default operation of the path module varies based on the operating system on which a Node.js application is running. Specifically, when running on a @@ -160,25 +166,21 @@ paths are being used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          So using path.basename() might yield different results on POSIX and Windows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          On POSIX:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          path.basename('C:\\temp\\myfile.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: 'C:\\temp\\myfile.html'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          path.basename('C:\\temp\\myfile.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: 'C:\\temp\\myfile.html'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          On Windows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          path.basename('C:\\temp\\myfile.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: 'myfile.html'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          path.basename('C:\\temp\\myfile.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: 'myfile.html'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          To achieve consistent results when working with Windows file paths on any operating system, use path.win32:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          On POSIX and Windows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          path.win32.basename('C:\\temp\\myfile.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: 'myfile.html'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          path.win32.basename('C:\\temp\\myfile.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: 'myfile.html'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          To achieve consistent results when working with POSIX file paths on any operating system, use path.posix:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          On POSIX and Windows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          path.posix.basename('/tmp/myfile.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: 'myfile.html'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          path.posix.basename('/tmp/myfile.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: 'myfile.html'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          On Windows Node.js follows the concept of per-drive working directory. This behavior can be observed when using a drive path without a backslash. For example, path.resolve('C:\\') can potentially return a different result than @@ -201,15 +203,23 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • ext <string> An optional file extension
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Returns: <string>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The path.basename() methods returns the last portion of a path, similar to +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The path.basename() method returns the last portion of a path, similar to the Unix basename command. Trailing directory separators are ignored, see path.sep.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        path.basename('/foo/bar/baz/asdf/quux.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: 'quux.html'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        path.basename('/foo/bar/baz/asdf/quux.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Returns: 'quux.html'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -path.basename('/foo/bar/baz/asdf/quux.html', '.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: 'quux'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +path.basename('/foo/bar/baz/asdf/quux.html', '.html'); +// Returns: 'quux'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Although Windows usually treats file names, including file extensions, in a +case-insensitive manner, this function does not. For example, C:\\foo.html and +C:\\foo.HTML refer to the same file, but basename treats the extension as a +case-sensitive string:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        path.win32.basename('C:\\foo.html', '.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Returns: 'foo'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +path.win32.basename('C:\\foo.HTML', '.html');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Returns: 'foo.HTML'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        A TypeError is thrown if path is not a string or if ext is given and is not a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        path.delimiter#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -225,19 +235,17 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • : for POSIX

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      For example, on POSIX:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      console.log(process.env.PATH);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Prints: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      console.log(process.env.PATH);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Prints: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       process.env.PATH.split(path.delimiter);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Returns: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Returns: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      On Windows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      console.log(process.env.PATH);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Prints: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      console.log(process.env.PATH);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Prints: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       process.env.PATH.split(path.delimiter);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Returns ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Returns ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      path.dirname(path)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                For example, on POSIX:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'foo/bar/baz'.split(path.sep);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Returns: ['foo', 'bar', 'baz']
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'foo/bar/baz'.split(path.sep);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Returns: ['foo', 'bar', 'baz']

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                On Windows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'foo\\bar\\baz'.split(path.sep);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Returns: ['foo', 'bar', 'baz']
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'foo\\bar\\baz'.split(path.sep);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Returns: ['foo', 'bar', 'baz']

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                On Windows, both the forward slash (/) and backward slash (\) are accepted as path segment separators; however, the path methods only add backward slashes (\).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                @@ -599,7 +587,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                On Windows systems only, returns an equivalent namespace-prefixed path for the given path. If path is not a string, path will be returned without modifications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is meaningful only on Windows system. On POSIX systems, the +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method is meaningful only on Windows systems. On POSIX systems, the method is non-operational and always returns path without modifications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                path.win32#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The path.win32 property provides access to Windows-specific implementations of the path methods.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/path.json nodejs-mozilla-12.22.12/doc/api/path.json --- nodejs-mozilla-12.18.1/doc/api/path.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/path.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The path module provides utilities for working with file and directory paths.\nIt can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const path = require('path');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Source Code: lib/path.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The path module provides utilities for working with file and directory paths.\nIt can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const path = require('path');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", "modules": [ { "textRaw": "Windows vs. POSIX", @@ -57,7 +57,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The path.basename() methods returns the last portion of a path, similar to\nthe Unix basename command. Trailing directory separators are ignored, see\npath.sep.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              path.basename('/foo/bar/baz/asdf/quux.html');\n// Returns: 'quux.html'\n\npath.basename('/foo/bar/baz/asdf/quux.html', '.html');\n// Returns: 'quux'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              A TypeError is thrown if path is not a string or if ext is given\nand is not a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The path.basename() method returns the last portion of a path, similar to\nthe Unix basename command. Trailing directory separators are ignored, see\npath.sep.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              path.basename('/foo/bar/baz/asdf/quux.html');\n// Returns: 'quux.html'\n\npath.basename('/foo/bar/baz/asdf/quux.html', '.html');\n// Returns: 'quux'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Although Windows usually treats file names, including file extensions, in a\ncase-insensitive manner, this function does not. For example, C:\\\\foo.html and\nC:\\\\foo.HTML refer to the same file, but basename treats the extension as a\ncase-sensitive string:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              path.win32.basename('C:\\\\foo.html', '.html');\n// Returns: 'foo'\n\npath.win32.basename('C:\\\\foo.HTML', '.html');\n// Returns: 'foo.HTML'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              A TypeError is thrown if path is not a string or if ext is given\nand is not a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`path.dirname(path)`", @@ -361,7 +361,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The path.resolve() method resolves a sequence of paths or path segments into\nan absolute path.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The given sequence of paths is processed from right to left, with each\nsubsequent path prepended until an absolute path is constructed.\nFor instance, given the sequence of path segments: /foo, /bar, baz,\ncalling path.resolve('/foo', '/bar', 'baz') would return /bar/baz\nbecause 'baz' is not an absolute path but '/bar' + '/' + 'baz' is.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If after processing all given path segments an absolute path has not yet\nbeen generated, the current working directory is used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The resulting path is normalized and trailing slashes are removed unless the\npath is resolved to the root directory.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Zero-length path segments are ignored.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If no path segments are passed, path.resolve() will return the absolute path\nof the current working directory.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              path.resolve('/foo/bar', './baz');\n// Returns: '/foo/bar/baz'\n\npath.resolve('/foo/bar', '/tmp/file/');\n// Returns: '/tmp/file'\n\npath.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');\n// If the current working directory is /home/myself/node,\n// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              A TypeError is thrown if any of the arguments is not a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The path.resolve() method resolves a sequence of paths or path segments into\nan absolute path.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The given sequence of paths is processed from right to left, with each\nsubsequent path prepended until an absolute path is constructed.\nFor instance, given the sequence of path segments: /foo, /bar, baz,\ncalling path.resolve('/foo', '/bar', 'baz') would return /bar/baz\nbecause 'baz' is not an absolute path but '/bar' + '/' + 'baz' is.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If, after processing all given path segments, an absolute path has not yet\nbeen generated, the current working directory is used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The resulting path is normalized and trailing slashes are removed unless the\npath is resolved to the root directory.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Zero-length path segments are ignored.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If no path segments are passed, path.resolve() will return the absolute path\nof the current working directory.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              path.resolve('/foo/bar', './baz');\n// Returns: '/foo/bar/baz'\n\npath.resolve('/foo/bar', '/tmp/file/');\n// Returns: '/tmp/file'\n\npath.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');\n// If the current working directory is /home/myself/node,\n// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              A TypeError is thrown if any of the arguments is not a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "`path.toNamespacedPath(path)`", @@ -389,7 +389,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              On Windows systems only, returns an equivalent namespace-prefixed path for\nthe given path. If path is not a string, path will be returned without\nmodifications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              This method is meaningful only on Windows system. On POSIX systems, the\nmethod is non-operational and always returns path without modifications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              On Windows systems only, returns an equivalent namespace-prefixed path for\nthe given path. If path is not a string, path will be returned without\nmodifications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              This method is meaningful only on Windows systems. On POSIX systems, the\nmethod is non-operational and always returns path without modifications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " } ], "properties": [ diff -Nru nodejs-mozilla-12.18.1/doc/api/path.md nodejs-mozilla-12.22.12/doc/api/path.md --- nodejs-mozilla-12.18.1/doc/api/path.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/path.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `path` module provides utilities for working with file and directory paths. It can be accessed using: @@ -73,7 +75,7 @@ * `ext` {string} An optional file extension * Returns: {string} -The `path.basename()` methods returns the last portion of a `path`, similar to +The `path.basename()` method returns the last portion of a `path`, similar to the Unix `basename` command. Trailing directory separators are ignored, see [`path.sep`][]. @@ -85,6 +87,19 @@ // Returns: 'quux' ``` +Although Windows usually treats file names, including file extensions, in a +case-insensitive manner, this function does not. For example, `C:\\foo.html` and +`C:\\foo.HTML` refer to the same file, but `basename` treats the extension as a +case-sensitive string: + +```js +path.win32.basename('C:\\foo.html', '.html'); +// Returns: 'foo' + +path.win32.basename('C:\\foo.HTML', '.html'); +// Returns: 'foo.HTML' +``` + A [`TypeError`][] is thrown if `path` is not a string or if `ext` is given and is not a string. @@ -480,7 +495,7 @@ calling `path.resolve('/foo', '/bar', 'baz')` would return `/bar/baz` because `'baz'` is not an absolute path but `'/bar' + '/' + 'baz'` is. -If after processing all given `path` segments an absolute path has not yet +If, after processing all given `path` segments, an absolute path has not yet been generated, the current working directory is used. The resulting path is normalized and trailing slashes are removed unless the @@ -547,7 +562,7 @@ the given `path`. If `path` is not a string, `path` will be returned without modifications. -This method is meaningful only on Windows system. On POSIX systems, the +This method is meaningful only on Windows systems. On POSIX systems, the method is non-operational and always returns `path` without modifications. ## `path.win32` diff -Nru nodejs-mozilla-12.18.1/doc/api/perf_hooks.html nodejs-mozilla-12.22.12/doc/api/perf_hooks.html --- nodejs-mozilla-12.18.1/doc/api/perf_hooks.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/perf_hooks.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Performance Measurement APIs | Node.js v12.18.1 Documentation + + Performance measurement APIs | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { PerformanceObserver, performance } = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { PerformanceObserver, performance } = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const obs = new PerformanceObserver((items) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  console.log(items.getEntries()[0].duration);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const obs = new PerformanceObserver((items) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  console.log(items.getEntries()[0].duration);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 performance.clearMarks();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -obs.observe({ entryTypes: ['measure'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -performance.measure('Start to Now');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +obs.observe({ entryTypes: ['measure'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +performance.measure('Start to Now');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -performance.mark('A');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -doSomeLongRunningProcess(() => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  performance.measure('A to Now', 'A');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  performance.mark('B');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  performance.measure('A to B', 'A', 'B');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +performance.mark('A'); +doSomeLongRunningProcess(() => { + performance.measure('A to Now', 'A'); + + performance.mark('B'); + performance.measure('A to B', 'A', 'B'); +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              perf_hooks.performance#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If name is not provided, removes all PerformanceMark objects from the Performance Timeline. If name is provided, removes only the named mark.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            performance.eventLoopUtilization([utilization1[, utilization2]])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • utilization1 <Object> The result of a previous call to + eventLoopUtilization().
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • utilization2 <Object> The result of a previous call to + eventLoopUtilization() prior to utilization1.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Returns <Object> + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The eventLoopUtilization() method returns an object that contains the +cumulative duration of time the event loop has been both idle and active as a +high resolution milliseconds timer. The utilization value is the calculated +Event Loop Utilization (ELU).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If bootstrapping has not yet finished on the main thread the properties have +the value of 0. The ELU is immediately available on Worker threads since +bootstrap happens within the event loop.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Both utilization1 and utilization2 are optional parameters.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If utilization1 is passed, then the delta between the current call's active +and idle times, as well as the corresponding utilization value are +calculated and returned (similar to process.hrtime()).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If utilization1 and utilization2 are both passed, then the delta is +calculated between the two arguments. This is a convenience option because, +unlike process.hrtime(), calculating the ELU is more complex than a +single subtraction.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ELU is similar to CPU utilization, except that it only measures event loop +statistics and not CPU usage. It represents the percentage of time the event +loop has spent outside the event loop's event provider (e.g. epoll_wait). +No other CPU idle time is taken into consideration. The following is an example +of how a mostly idle process will have a high ELU.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            'use strict';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +const { eventLoopUtilization } = require('perf_hooks').performance;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +const { spawnSync } = require('child_process');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +setImmediate(() => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  const elu = eventLoopUtilization();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  spawnSync('sleep', ['5']);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  console.log(eventLoopUtilization(elu).utilization);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Although the CPU is mostly idle while running this script, the value of +utilization is 1. This is because the call to +child_process.spawnSync() blocks the event loop from proceeding.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Passing in a user-defined object instead of the result of a previous call to +eventLoopUtilization() will lead to undefined behavior. The return values +are not guaranteed to reflect any correct state of the event loop.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            performance.mark([name])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The high resolution millisecond timestamp at which the V8 platform was initialized.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          performanceNodeTiming.idleTime#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The high resolution millisecond timestamp of the amount of time the event loop +has been idle within the event loop's event provider (e.g. epoll_wait). This +does not take CPU usage into consideration. If the event loop has not yet +started (e.g., in the first tick of the main script), the property has the +value of 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Class: perf_hooks.PerformanceObserver#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          new PerformanceObserver(callback)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            callback <Function>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • callback <Function>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            PerformanceObserver objects provide notifications when new PerformanceEntry instances have been added to the Performance Timeline.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               performance,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               PerformanceObserver
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -} = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +} = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -const obs = new PerformanceObserver((list, observer) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  console.log(list.getEntries());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +const obs = new PerformanceObserver((list, observer) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  console.log(list.getEntries());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               observer.disconnect();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -obs.observe({ entryTypes: ['mark'], buffered: true });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +obs.observe({ entryTypes: ['mark'], buffered: true });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -performance.mark('test');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +performance.mark('test');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Because PerformanceObserver instances introduce their own additional performance overhead, instances should not be left subscribed to notifications indefinitely. Users should disconnect observers as soon as they are no @@ -542,8 +653,7 @@ Added in: v8.5.0

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              options <Object>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • options <Object>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • entryTypes <string[]> An array of strings identifying the types of PerformanceEntry instances the observer is interested in. If not @@ -559,32 +669,30 @@ PerformanceEntry instances identified by options.entryTypes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When options.buffered is false, the callback will be invoked once for every PerformanceEntry instance:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   performance,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   PerformanceObserver
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -} = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +} = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -const obs = new PerformanceObserver((list, observer) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  // Called three times synchronously. `list` contains one item.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +const obs = new PerformanceObserver((list, observer) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // Called three times synchronously. `list` contains one item.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -obs.observe({ entryTypes: ['mark'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +obs.observe({ entryTypes: ['mark'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -for (let n = 0; n < 3; n++)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  performance.mark(`test${n}`);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +for (let n = 0; n < 3; n++)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  performance.mark(`test${n}`);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   performance,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   PerformanceObserver
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -} = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +} = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -const obs = new PerformanceObserver((list, observer) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  // Called once. `list` contains three items.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +const obs = new PerformanceObserver((list, observer) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // Called once. `list` contains three items.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -obs.observe({ entryTypes: ['mark'], buffered: true });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +obs.observe({ entryTypes: ['mark'], buffered: true });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -for (let n = 0; n < 3; n++)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  performance.mark(`test${n}`);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +for (let n = 0; n < 3; n++) + performance.mark(`test${n}`);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Class: PerformanceObserverEntryList#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  options <Object>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • options <Object>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • resolution <number> The sampling rate in milliseconds. Must be greater than zero. Default: 10.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -647,19 +754,18 @@ event loop. That is, a delay in the loop will cause a delay in the execution of the timer, and those delays are specifically what this API is intended to detect.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { monitorEventLoopDelay } = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -const h = monitorEventLoopDelay({ resolution: 20 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { monitorEventLoopDelay } = require('perf_hooks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +const h = monitorEventLoopDelay({ resolution: 20 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     h.enable();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Do something.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +// Do something.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     h.disable();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -console.log(h.min);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -console.log(h.max);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -console.log(h.mean);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -console.log(h.stddev);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -console.log(h.percentiles);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -console.log(h.percentile(50));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -console.log(h.percentile(99));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +console.log(h.min); +console.log(h.max); +console.log(h.mean); +console.log(h.stddev); +console.log(h.percentiles); +console.log(h.percentile(50)); +console.log(h.percentile(99));

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Class: Histogram#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/perf_hooks.json nodejs-mozilla-12.22.12/doc/api/perf_hooks.json --- nodejs-mozilla-12.18.1/doc/api/perf_hooks.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/perf_hooks.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,12 +3,12 @@ "source": "doc/api/perf_hooks.md", "modules": [ { - "textRaw": "Performance Measurement APIs", + "textRaw": "Performance measurement APIs", "name": "performance_measurement_apis", "introduced_in": "v8.5.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This module provides an implementation of a subset of the W3C\nWeb Performance APIs as well as additional APIs for\nNode.js-specific performance measurements.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js supports the following Web Performance APIs:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { PerformanceObserver, performance } = require('perf_hooks');\n\nconst obs = new PerformanceObserver((items) => {\n  console.log(items.getEntries()[0].duration);\n  performance.clearMarks();\n});\nobs.observe({ entryTypes: ['measure'] });\nperformance.measure('Start to Now');\n\nperformance.mark('A');\ndoSomeLongRunningProcess(() => {\n  performance.measure('A to Now', 'A');\n\n  performance.mark('B');\n  performance.measure('A to B', 'A', 'B');\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/perf_hooks.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This module provides an implementation of a subset of the W3C\nWeb Performance APIs as well as additional APIs for\nNode.js-specific performance measurements.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js supports the following Web Performance APIs:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { PerformanceObserver, performance } = require('perf_hooks');\n\nconst obs = new PerformanceObserver((items) => {\n  console.log(items.getEntries()[0].duration);\n  performance.clearMarks();\n});\nobs.observe({ entryTypes: ['measure'] });\nperformance.measure('Start to Now');\n\nperformance.mark('A');\ndoSomeLongRunningProcess(() => {\n  performance.measure('A to Now', 'A');\n\n  performance.mark('B');\n  performance.measure('A to B', 'A', 'B');\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "properties": [ { "textRaw": "`perf_hooks.performance`", @@ -45,6 +45,59 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If name is not provided, removes all PerformanceMark objects from the\nPerformance Timeline. If name is provided, removes only the named mark.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " }, { + "textRaw": "`performance.eventLoopUtilization([utilization1[, utilization2]])`", + "type": "method", + "name": "eventLoopUtilization", + "meta": { + "added": [ + "v14.10.0", + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns {Object}", + "name": "return", + "type": "Object", + "options": [ + { + "textRaw": "`idle` {number}", + "name": "idle", + "type": "number" + }, + { + "textRaw": "`active` {number}", + "name": "active", + "type": "number" + }, + { + "textRaw": "`utilization` {number}", + "name": "utilization", + "type": "number" + } + ] + }, + "params": [ + { + "textRaw": "`utilization1` {Object} The result of a previous call to `eventLoopUtilization()`.", + "name": "utilization1", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()`." + }, + { + "textRaw": "`utilization2` {Object} The result of a previous call to `eventLoopUtilization()` prior to `utilization1`.", + "name": "utilization2", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()` prior to `utilization1`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The eventLoopUtilization() method returns an object that contains the\ncumulative duration of time the event loop has been both idle and active as a\nhigh resolution milliseconds timer. The utilization value is the calculated\nEvent Loop Utilization (ELU).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If bootstrapping has not yet finished on the main thread the properties have\nthe value of 0. The ELU is immediately available on Worker threads since\nbootstrap happens within the event loop.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Both utilization1 and utilization2 are optional parameters.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If utilization1 is passed, then the delta between the current call's active\nand idle times, as well as the corresponding utilization value are\ncalculated and returned (similar to process.hrtime()).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If utilization1 and utilization2 are both passed, then the delta is\ncalculated between the two arguments. This is a convenience option because,\nunlike process.hrtime(), calculating the ELU is more complex than a\nsingle subtraction.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ELU is similar to CPU utilization, except that it only measures event loop\nstatistics and not CPU usage. It represents the percentage of time the event\nloop has spent outside the event loop's event provider (e.g. epoll_wait).\nNo other CPU idle time is taken into consideration. The following is an example\nof how a mostly idle process will have a high ELU.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    'use strict';\nconst { eventLoopUtilization } = require('perf_hooks').performance;\nconst { spawnSync } = require('child_process');\n\nsetImmediate(() => {\n  const elu = eventLoopUtilization();\n  spawnSync('sleep', ['5']);\n  console.log(eventLoopUtilization(elu).utilization);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Although the CPU is mostly idle while running this script, the value of\nutilization is 1. This is because the call to\nchild_process.spawnSync() blocks the event loop from proceeding.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Passing in a user-defined object instead of the result of a previous call to\neventLoopUtilization() will lead to undefined behavior. The return values\nare not guaranteed to reflect any correct state of the event loop.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + }, + { "textRaw": "`performance.mark([name])`", "type": "method", "name": "mark", @@ -152,6 +205,58 @@ } ], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This property is an extension by Node.js. It is not available in Web browsers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Wraps a function within a new function that measures the running time of the\nwrapped function. A PerformanceObserver must be subscribed to the 'function'\nevent type in order for the timing details to be accessed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const {\n  performance,\n  PerformanceObserver\n} = require('perf_hooks');\n\nfunction someFunction() {\n  console.log('hello world');\n}\n\nconst wrapped = performance.timerify(someFunction);\n\nconst obs = new PerformanceObserver((list) => {\n  console.log(list.getEntries()[0].duration);\n  obs.disconnect();\n});\nobs.observe({ entryTypes: ['function'] });\n\n// A performance timeline entry will be created\nwrapped();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + }, + { + "textRaw": "`performance.eventLoopUtilization([util1][,util2])`", + "type": "method", + "name": "eventLoopUtilization", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns {Object}", + "name": "return", + "type": "Object", + "options": [ + { + "textRaw": "`idle` {number}", + "name": "idle", + "type": "number" + }, + { + "textRaw": "`active` {number}", + "name": "active", + "type": "number" + }, + { + "textRaw": "`utilization` {number}", + "name": "utilization", + "type": "number" + } + ] + }, + "params": [ + { + "textRaw": "`util1` {Object} The result of a previous call to `eventLoopUtilization()`", + "name": "util1", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()`" + }, + { + "textRaw": "`util2` {Object} The result of a previous call to `eventLoopUtilization()` prior to `util1`", + "name": "util2", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()` prior to `util1`" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The eventLoopUtilization() method returns an object that contains the\ncumulative duration of time the event loop has been both idle and active as a\nhigh resolution milliseconds timer. The utilization value is the calculated\nEvent Loop Utilization (ELU). If bootstrapping has not yet finished, the\nproperties have the value of 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util1 and util2 are optional parameters.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If util1 is passed then the delta between the current call's active and\nidle times are calculated and returned (similar to process.hrtime()).\nLikewise the adjusted utilization value is calculated.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If util1 and util2 are both passed then the calculation adjustments are\ndone between the two arguments. This is a convenience option because unlike\nprocess.hrtime() additional work is done to calculate the ELU.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ELU is similar to CPU utilization except that it is calculated using high\nprecision wall-clock time. It represents the percentage of time the event loop\nhas spent outside the event loop's event provider (e.g. epoll_wait). No other\nCPU idle time is taken into consideration. The following is an example of how\na mostly idle process will have a high ELU.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    'use strict';\nconst { eventLoopUtilization } = require('perf_hooks').performance;\nconst { spawnSync } = require('child_process');\n\nsetImmediate(() => {\n  const elu = eventLoopUtilization();\n  spawnSync('sleep', ['5']);\n  console.log(eventLoopUtilization(elu).utilization);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Although the CPU is mostly idle while running this script, the value of\nutilization is 1. This is because the call to child_process.spawnSync()\nblocks the event loop from proceeding.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Passing in a user-defined object instead of the result of a previous call to\neventLoopUtilization() will lead to undefined behavior. The return values\nare not guaranteed to reflect any correct state of the event loop.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " } ], "properties": [ @@ -351,6 +456,18 @@ "changes": [] }, "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The high resolution millisecond timestamp at which the V8 platform was\ninitialized.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + }, + { + "textRaw": "`idleTime` {number}", + "type": "number", + "name": "idleTime", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The high resolution millisecond timestamp of the amount of time the event loop\nhas been idle within the event loop's event provider (e.g. epoll_wait). This\ndoes not take CPU usage into consideration. If the event loop has not yet\nstarted (e.g., in the first tick of the main script), the property has the\nvalue of 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " } ] }, @@ -774,7 +891,7 @@ } ], "type": "module", - "displayName": "Performance Measurement APIs" + "displayName": "Performance measurement APIs" } ] } \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/perf_hooks.md nodejs-mozilla-12.22.12/doc/api/perf_hooks.md --- nodejs-mozilla-12.18.1/doc/api/perf_hooks.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/perf_hooks.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,9 +1,11 @@ -# Performance Measurement APIs +# Performance measurement APIs > Stability: 2 - Stable + + This module provides an implementation of a subset of the W3C [Web Performance APIs][] as well as additional APIs for Node.js-specific performance measurements. @@ -51,6 +53,68 @@ If `name` is not provided, removes all `PerformanceMark` objects from the Performance Timeline. If `name` is provided, removes only the named mark. +### `performance.eventLoopUtilization([utilization1[, utilization2]])` + + +* `utilization1` {Object} The result of a previous call to + `eventLoopUtilization()`. +* `utilization2` {Object} The result of a previous call to + `eventLoopUtilization()` prior to `utilization1`. +* Returns {Object} + * `idle` {number} + * `active` {number} + * `utilization` {number} + +The `eventLoopUtilization()` method returns an object that contains the +cumulative duration of time the event loop has been both idle and active as a +high resolution milliseconds timer. The `utilization` value is the calculated +Event Loop Utilization (ELU). + +If bootstrapping has not yet finished on the main thread the properties have +the value of `0`. The ELU is immediately available on [Worker threads][] since +bootstrap happens within the event loop. + +Both `utilization1` and `utilization2` are optional parameters. + +If `utilization1` is passed, then the delta between the current call's `active` +and `idle` times, as well as the corresponding `utilization` value are +calculated and returned (similar to [`process.hrtime()`][]). + +If `utilization1` and `utilization2` are both passed, then the delta is +calculated between the two arguments. This is a convenience option because, +unlike [`process.hrtime()`][], calculating the ELU is more complex than a +single subtraction. + +ELU is similar to CPU utilization, except that it only measures event loop +statistics and not CPU usage. It represents the percentage of time the event +loop has spent outside the event loop's event provider (e.g. `epoll_wait`). +No other CPU idle time is taken into consideration. The following is an example +of how a mostly idle process will have a high ELU. + +```js +'use strict'; +const { eventLoopUtilization } = require('perf_hooks').performance; +const { spawnSync } = require('child_process'); + +setImmediate(() => { + const elu = eventLoopUtilization(); + spawnSync('sleep', ['5']); + console.log(eventLoopUtilization(elu).utilization); +}); +``` + +Although the CPU is mostly idle while running this script, the value of +`utilization` is `1`. This is because the call to +[`child_process.spawnSync()`][] blocks the event loop from proceeding. + +Passing in a user-defined object instead of the result of a previous call to +`eventLoopUtilization()` will lead to undefined behavior. The return values +are not guaranteed to reflect any correct state of the event loop. + ### `performance.mark([name])` + +* `util1` {Object} The result of a previous call to `eventLoopUtilization()` +* `util2` {Object} The result of a previous call to `eventLoopUtilization()` + prior to `util1` +* Returns {Object} + * `idle` {number} + * `active` {number} + * `utilization` {number} + +The `eventLoopUtilization()` method returns an object that contains the +cumulative duration of time the event loop has been both idle and active as a +high resolution milliseconds timer. The `utilization` value is the calculated +Event Loop Utilization (ELU). If bootstrapping has not yet finished, the +properties have the value of 0. + +`util1` and `util2` are optional parameters. + +If `util1` is passed then the delta between the current call's `active` and +`idle` times are calculated and returned (similar to [`process.hrtime()`][]). +Likewise the adjusted `utilization` value is calculated. + +If `util1` and `util2` are both passed then the calculation adjustments are +done between the two arguments. This is a convenience option because unlike +[`process.hrtime()`][] additional work is done to calculate the ELU. + +ELU is similar to CPU utilization except that it is calculated using high +precision wall-clock time. It represents the percentage of time the event loop +has spent outside the event loop's event provider (e.g. `epoll_wait`). No other +CPU idle time is taken into consideration. The following is an example of how +a mostly idle process will have a high ELU. + + +```js +'use strict'; +const { eventLoopUtilization } = require('perf_hooks').performance; +const { spawnSync } = require('child_process'); + +setImmediate(() => { + const elu = eventLoopUtilization(); + spawnSync('sleep', ['5']); + console.log(eventLoopUtilization(elu).utilization); +}); +``` + +Although the CPU is mostly idle while running this script, the value of +`utilization` is 1. This is because the call to [`child_process.spawnSync()`][] +blocks the event loop from proceeding. + +Passing in a user-defined object instead of the result of a previous call to +`eventLoopUtilization()` will lead to undefined behavior. The return values +are not guaranteed to reflect any correct state of the event loop. + ## Class: `PerformanceEntry` + +* {number} + +The high resolution millisecond timestamp of the amount of time the event loop +has been idle within the event loop's event provider (e.g. `epoll_wait`). This +does not take CPU usage into consideration. If the event loop has not yet +started (e.g., in the first tick of the main script), the property has the +value of 0. + ## Class: `perf_hooks.PerformanceObserver` ### `new PerformanceObserver(callback)` @@ -680,6 +813,8 @@ ``` [`'exit'`]: process.html#process_event_exit +[`process.hrtime()`]: process.html#process_process_hrtime_time +[`child_process.spawnSync()`]: child_process.html#child_process_child_process_spawnsync_command_args_options [`timeOrigin`]: https://w3c.github.io/hr-time/#dom-performance-timeorigin [`window.performance`]: https://developer.mozilla.org/en-US/docs/Web/API/Window/performance [Async Hooks]: async_hooks.html @@ -687,3 +822,4 @@ [Performance Timeline]: https://w3c.github.io/performance-timeline/ [Web Performance APIs]: https://w3c.github.io/perf-timing-primer/ [User Timing]: https://www.w3.org/TR/user-timing/ +[Worker threads]: worker_threads.md#worker_threads_worker_threads diff -Nru nodejs-mozilla-12.18.1/doc/api/policy.html nodejs-mozilla-12.22.12/doc/api/policy.html --- nodejs-mozilla-12.18.1/doc/api/policy.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/policy.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Policies | Node.js v12.18.1 Documentation + + Policies | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,7 +101,10 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -112,19 +119,16 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Policies

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Policies
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Enabling
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Features

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Features @@ -157,18 +161,16 @@ when loading modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Once this has been set, all modules must conform to a policy manifest file passed to the flag:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            node --experimental-policy=policy.json app.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            node --experimental-policy=policy.json app.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The policy manifest will be used to enforce constraints on code loaded by Node.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            To mitigate tampering with policy files on disk, an integrity for the policy file itself may be provided via --policy-integrity. This allows running node and asserting the policy file contents even if the file is changed on disk.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            node --experimental-policy=policy.json --policy-integrity="sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0" app.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            node --experimental-policy=policy.json --policy-integrity="sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0" app.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Features#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Error Behavior#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Error behavior#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            When a policy check fails, Node.js by default will throw an error. It is possible to change the error behavior to one of a few possibilities by defining an "onerror" field in a policy manifest. The following values are @@ -181,15 +183,14 @@ default.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -  "onerror": "log",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -  "resources": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "./app/checked.js": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -      "integrity": "sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +  "onerror": "log",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +  "resources": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "./app/checked.js": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +      "integrity": "sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Integrity Checks#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +} +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Integrity checks#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Policy files must use integrity checks with Subresource Integrity strings compatible with the browser integrity attribute @@ -199,13 +200,12 @@ the integrity listed in the manifest, an error will be thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          An example policy file that would allow loading a file checked.js:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -  "resources": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "./app/checked.js": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -      "integrity": "sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +  "resources": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "./app/checked.js": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +      "integrity": "sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Each resource listed in the policy manifest can be of one the following formats to determine its location:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            @@ -222,23 +222,22 @@ body for the resource which can be useful for local development. It is not recommended in production since it would allow unexpected alteration of resources to be considered valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Dependency Redirection#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Dependency redirection#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            An application may need to ship patched versions of modules or to prevent modules from allowing all modules access to all other modules. Redirection can be used by intercepting attempts to load the modules wishing to be replaced.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  "builtins": [],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  "resources": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -    "./app/checked.js": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -      "dependencies": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -        "fs": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -        "os": "./app/node_modules/alt-os"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  "builtins": [],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  "resources": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    "./app/checked.js": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +      "dependencies": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +        "fs": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +        "os": "./app/node_modules/alt-os"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The dependencies are keyed by the requested string specifier and have values of either true or a string pointing to a module that will be resolved.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The specifier string does not perform any searching and must match exactly @@ -260,27 +259,24 @@ module to load any specifier without redirection. This can be useful for local development and may have some valid usage in production, but should be used only with care after auditing a module to ensure its behavior is valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Example: Patched Dependency#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Example: Patched dependency#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Redirected dependencies can provide attenuated or modified functionality as fits the application. For example, log data about timing of function durations by wrapping the original:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const original = require('fn');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -module.exports = function fn(...args) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  console.time();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  try {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -    return new.target ?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -      Reflect.construct(original, args) :
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -      Reflect.apply(original, this, args);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  } finally {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -    console.timeEnd();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const original = require('fn');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +module.exports = function fn(...args) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  console.time();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  try {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    return new.target ?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +      Reflect.construct(original, args) :
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +      Reflect.apply(original, this, args);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  } finally {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    console.timeEnd();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/policy.json nodejs-mozilla-12.22.12/doc/api/policy.json --- nodejs-mozilla-12.18.1/doc/api/policy.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/policy.json 2022-04-05 07:17:04.000000000 +0000 @@ -18,32 +18,32 @@ "textRaw": "Enabling", "name": "Enabling", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The --experimental-policy flag can be used to enable features for policies\nwhen loading modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Once this has been set, all modules must conform to a policy manifest file\npassed to the flag:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --experimental-policy=policy.json app.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The policy manifest will be used to enforce constraints on code loaded by\nNode.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    To mitigate tampering with policy files on disk, an integrity for\nthe policy file itself may be provided via --policy-integrity.\nThis allows running node and asserting the policy file contents\neven if the file is changed on disk.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --experimental-policy=policy.json --policy-integrity=\"sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0\" app.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The --experimental-policy flag can be used to enable features for policies\nwhen loading modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Once this has been set, all modules must conform to a policy manifest file\npassed to the flag:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --experimental-policy=policy.json app.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The policy manifest will be used to enforce constraints on code loaded by\nNode.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    To mitigate tampering with policy files on disk, an integrity for\nthe policy file itself may be provided via --policy-integrity.\nThis allows running node and asserting the policy file contents\neven if the file is changed on disk.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --experimental-policy=policy.json --policy-integrity=\"sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0\" app.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " }, { "textRaw": "Features", "name": "features", "modules": [ { - "textRaw": "Error Behavior", + "textRaw": "Error behavior", "name": "error_behavior", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When a policy check fails, Node.js by default will throw an error.\nIt is possible to change the error behavior to one of a few possibilities\nby defining an \"onerror\" field in a policy manifest. The following values are\navailable to change the behavior:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \"exit\": will exit the process immediately.\nNo cleanup code will be allowed to run.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \"log\": will log the error at the site of the failure.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \"throw\": will throw a JS error at the site of the failure. This is the\ndefault.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    {\n  \"onerror\": \"log\",\n  \"resources\": {\n    \"./app/checked.js\": {\n      \"integrity\": \"sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Error Behavior" + "displayName": "Error behavior" }, { - "textRaw": "Integrity Checks", + "textRaw": "Integrity checks", "name": "integrity_checks", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Policy files must use integrity checks with Subresource Integrity strings\ncompatible with the browser\nintegrity attribute\nassociated with absolute URLs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When using require() all resources involved in loading are checked for\nintegrity if a policy manifest has been specified. If a resource does not match\nthe integrity listed in the manifest, an error will be thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    An example policy file that would allow loading a file checked.js:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    {\n  \"resources\": {\n    \"./app/checked.js\": {\n      \"integrity\": \"sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0\"\n    }\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Each resource listed in the policy manifest can be of one the following\nformats to determine its location:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. A relative url string to a resource from the manifest such as ./resource.js, ../resource.js, or /resource.js.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. A complete url string to a resource such as file:///resource.js.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When loading resources the entire URL must match including search parameters\nand hash fragment. ./a.js?b will not be used when attempting to load\n./a.js and vice versa.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    To generate integrity strings, a script such as\nprintf \"sha384-$(cat checked.js | openssl dgst -sha384 -binary | base64)\"\ncan be used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Integrity can be specified as the boolean value true to accept any\nbody for the resource which can be useful for local development. It is not\nrecommended in production since it would allow unexpected alteration of\nresources to be considered valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Integrity Checks" + "displayName": "Integrity checks" }, { - "textRaw": "Dependency Redirection", + "textRaw": "Dependency redirection", "name": "dependency_redirection", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    An application may need to ship patched versions of modules or to prevent\nmodules from allowing all modules access to all other modules. Redirection\ncan be used by intercepting attempts to load the modules wishing to be\nreplaced.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    {\n  \"builtins\": [],\n  \"resources\": {\n    \"./app/checked.js\": {\n      \"dependencies\": {\n        \"fs\": true,\n        \"os\": \"./app/node_modules/alt-os\"\n      }\n    }\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The dependencies are keyed by the requested string specifier and have values\nof either true or a string pointing to a module that will be resolved.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The specifier string does not perform any searching and must match exactly\nwhat is provided to the require(). Therefore, multiple specifiers may be\nneeded in the policy if require() uses multiple different strings to point\nto the same module (such as excluding the extension).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the value of the redirection is true the default searching algorithms will\nbe used to find the module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the value of the redirection is a string, it will be resolved relative to\nthe manifest and then immediately be used without searching.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Any specifier string that is require()ed and not listed in the dependencies\nwill result in an error according to the policy.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Redirection will not prevent access to APIs through means such as direct access\nto require.cache and/or through module.constructor which allow access to\nloading modules. Policy redirection only affect specifiers to require().\nOther means such as to prevent undesired access to APIs through variables are\nnecessary to lock down that path of loading modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A boolean value of true for the dependencies map can be specified to allow a\nmodule to load any specifier without redirection. This can be useful for local\ndevelopment and may have some valid usage in production, but should be used\nonly with care after auditing a module to ensure its behavior is valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Example: Patched Dependency

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Redirected dependencies can provide attenuated or modified functionality as fits\nthe application. For example, log data about timing of function durations by\nwrapping the original:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const original = require('fn');\nmodule.exports = function fn(...args) {\n  console.time();\n  try {\n    return new.target ?\n      Reflect.construct(original, args) :\n      Reflect.apply(original, this, args);\n  } finally {\n    console.timeEnd();\n  }\n};\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    An application may need to ship patched versions of modules or to prevent\nmodules from allowing all modules access to all other modules. Redirection\ncan be used by intercepting attempts to load the modules wishing to be\nreplaced.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    {\n  \"builtins\": [],\n  \"resources\": {\n    \"./app/checked.js\": {\n      \"dependencies\": {\n        \"fs\": true,\n        \"os\": \"./app/node_modules/alt-os\"\n      }\n    }\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The dependencies are keyed by the requested string specifier and have values\nof either true or a string pointing to a module that will be resolved.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The specifier string does not perform any searching and must match exactly\nwhat is provided to the require(). Therefore, multiple specifiers may be\nneeded in the policy if require() uses multiple different strings to point\nto the same module (such as excluding the extension).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the value of the redirection is true the default searching algorithms will\nbe used to find the module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the value of the redirection is a string, it will be resolved relative to\nthe manifest and then immediately be used without searching.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Any specifier string that is require()ed and not listed in the dependencies\nwill result in an error according to the policy.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Redirection will not prevent access to APIs through means such as direct access\nto require.cache and/or through module.constructor which allow access to\nloading modules. Policy redirection only affect specifiers to require().\nOther means such as to prevent undesired access to APIs through variables are\nnecessary to lock down that path of loading modules.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A boolean value of true for the dependencies map can be specified to allow a\nmodule to load any specifier without redirection. This can be useful for local\ndevelopment and may have some valid usage in production, but should be used\nonly with care after auditing a module to ensure its behavior is valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Example: Patched dependency

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Redirected dependencies can provide attenuated or modified functionality as fits\nthe application. For example, log data about timing of function durations by\nwrapping the original:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const original = require('fn');\nmodule.exports = function fn(...args) {\n  console.time();\n  try {\n    return new.target ?\n      Reflect.construct(original, args) :\n      Reflect.apply(original, this, args);\n  } finally {\n    console.timeEnd();\n  }\n};\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Dependency Redirection" + "displayName": "Dependency redirection" } ], "type": "misc", diff -Nru nodejs-mozilla-12.18.1/doc/api/policy.md nodejs-mozilla-12.22.12/doc/api/policy.md --- nodejs-mozilla-12.18.1/doc/api/policy.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/policy.md 2022-04-05 07:17:04.000000000 +0000 @@ -31,7 +31,7 @@ Once this has been set, all modules must conform to a policy manifest file passed to the flag: -```sh +```bash node --experimental-policy=policy.json app.js ``` @@ -43,13 +43,13 @@ This allows running `node` and asserting the policy file contents even if the file is changed on disk. -```sh +```bash node --experimental-policy=policy.json --policy-integrity="sha384-SggXRQHwCG8g+DktYYzxkXRIkTiEYWBHqev0xnpCxYlqMBufKZHAHQM3/boDaI/0" app.js ``` ## Features -### Error Behavior +### Error behavior When a policy check fails, Node.js by default will throw an error. It is possible to change the error behavior to one of a few possibilities @@ -73,7 +73,7 @@ } ``` -### Integrity Checks +### Integrity checks Policy files must use integrity checks with Subresource Integrity strings compatible with the browser @@ -115,7 +115,7 @@ recommended in production since it would allow unexpected alteration of resources to be considered valid. -### Dependency Redirection +### Dependency redirection An application may need to ship patched versions of modules or to prevent modules from allowing all modules access to all other modules. Redirection @@ -164,7 +164,7 @@ development and may have some valid usage in production, but should be used only with care after auditing a module to ensure its behavior is valid. -#### Example: Patched Dependency +#### Example: Patched dependency Redirected dependencies can provide attenuated or modified functionality as fits the application. For example, log data about timing of function durations by diff -Nru nodejs-mozilla-12.18.1/doc/api/process.html nodejs-mozilla-12.22.12/doc/api/process.html --- nodejs-mozilla-12.18.1/doc/api/process.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/process.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Process | Node.js v12.18.1 Documentation + + Process | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        18. @@ -121,11 +128,9 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Process

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Process
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Process Events

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Process events
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.abort()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -165,8 +168,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.disconnect()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.dlopen(module, filename[, flags])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.emitWarning(warning[, options])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              process.emitWarning(warning[, type[, code]][, ctor])

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.emitWarning(warning[, type[, code]][, ctor]) @@ -194,8 +196,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.platform
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.ppid
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.release
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              process.report

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • process.report @@ -252,13 +251,13 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Process#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Source Code: lib/process.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The process object is a global that provides information about, and control over, the current Node.js process. As a global, it is always available to Node.js applications without using require(). It can also be explicitly accessed using require():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const process = require('process');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Process Events#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const process = require('process');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Process events#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The process object is an instance of EventEmitter.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Event: 'beforeExit'#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If true, a diagnostic report is generated on uncaught exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            console.log(`Report on exception: ${process.report.reportOnUncaughtException}`);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            console.log(`Report on exception: ${process.report.reportOnUncaughtException}`);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            process.report.signal#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The signal used to trigger the creation of a diagnostic report. Defaults to 'SIGUSR2'.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          console.log(`Report signal: ${process.report.signal}`);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          console.log(`Report signal: ${process.report.signal}`);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.report.writeReport([filename][, err])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/process.json nodejs-mozilla-12.22.12/doc/api/process.json --- nodejs-mozilla-12.18.1/doc/api/process.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/process.json 2022-04-05 07:17:04.000000000 +0000 @@ -7,10 +7,10 @@ "name": "Process", "introduced_in": "v0.10.0", "type": "global", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process object is a global that provides information about, and control\nover, the current Node.js process. As a global, it is always available to\nNode.js applications without using require(). It can also be explicitly\naccessed using require():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const process = require('process');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Source Code: lib/process.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process object is a global that provides information about, and control\nover, the current Node.js process. As a global, it is always available to\nNode.js applications without using require(). It can also be explicitly\naccessed using require():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const process = require('process');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "modules": [ { - "textRaw": "Process Events", + "textRaw": "Process events", "name": "process_events", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process object is an instance of EventEmitter.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "events": [ @@ -83,7 +83,7 @@ "desc": "a [`net.Server`][] or [`net.Socket`][] object, or undefined." } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If the Node.js process is spawned with an IPC channel (see the Child Process\nand Cluster documentation), the 'message' event is emitted whenever a\nmessage sent by a parent process using childprocess.send() is received by\nthe child process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The message goes through serialization and parsing. The resulting message might\nnot be the same as what is originally sent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If the serialization option was set to advanced used when spawning the\nprocess, the message argument can contain data that JSON is not able\nto represent.\nSee Advanced Serialization for child_process for more details.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If the Node.js process is spawned with an IPC channel (see the Child Process\nand Cluster documentation), the 'message' event is emitted whenever a\nmessage sent by a parent process using childprocess.send() is received by\nthe child process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The message goes through serialization and parsing. The resulting message might\nnot be the same as what is originally sent.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If the serialization option was set to advanced used when spawning the\nprocess, the message argument can contain data that JSON is not able\nto represent.\nSee Advanced serialization for child_process for more details.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "Event: `'multipleResolves'`", @@ -161,10 +161,10 @@ "desc": "The uncaught exception." }, { - "textRaw": "`origin` {string} Indicates if the exception originates from an unhandled rejection or from synchronous errors. Can either be `'uncaughtException'` or `'unhandledRejection'`.", + "textRaw": "`origin` {string} Indicates if the exception originates from an unhandled rejection or from an synchronous error. Can either be `'uncaughtException'` or `'unhandledRejection'`. The latter is only used in conjunction with the [`--unhandled-rejections`][] flag set to `strict` and an unhandled rejection.", "name": "origin", "type": "string", - "desc": "Indicates if the exception originates from an unhandled rejection or from synchronous errors. Can either be `'uncaughtException'` or `'unhandledRejection'`." + "desc": "Indicates if the exception originates from an unhandled rejection or from an synchronous error. Can either be `'uncaughtException'` or `'unhandledRejection'`. The latter is only used in conjunction with the [`--unhandled-rejections`][] flag set to `strict` and an unhandled rejection." } ], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The 'uncaughtException' event is emitted when an uncaught JavaScript\nexception bubbles all the way back to the event loop. By default, Node.js\nhandles such exceptions by printing the stack trace to stderr and exiting\nwith code 1, overriding any previously set process.exitCode.\nAdding a handler for the 'uncaughtException' event overrides this default\nbehavior. Alternatively, change the process.exitCode in the\n'uncaughtException' handler which will result in the process exiting with the\nprovided exit code. Otherwise, in the presence of such handler the process will\nexit with 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.on('uncaughtException', (err, origin) => {\n  fs.writeSync(\n    process.stderr.fd,\n    `Caught exception: ${err}\\n` +\n    `Exception origin: ${origin}`\n  );\n});\n\nsetTimeout(() => {\n  console.log('This will still run.');\n}, 500);\n\n// Intentionally cause an exception, but don't catch it.\nnonexistentFunc();\nconsole.log('This will not run.');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          It is possible to monitor 'uncaughtException' events without overriding the\ndefault behavior to exit the process by installing a\n'uncaughtExceptionMonitor' listener.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", @@ -292,22 +292,22 @@ ] }, { - "textRaw": "Signal Events", + "textRaw": "Signal events", "name": "SIGINT, SIGHUP, etc.", "type": "event", "params": [], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Signal events will be emitted when the Node.js process receives a signal. Please\nrefer to signal(7) for a listing of standard POSIX signal names such as\n'SIGINT', 'SIGHUP', etc.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Signals are not available on Worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The signal handler will receive the signal's name ('SIGINT',\n'SIGTERM', etc.) as the first argument.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The name of each event will be the uppercase common name for the signal (e.g.\n'SIGINT' for SIGINT signals).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          // Begin reading from stdin so the process does not exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', () => {\n  console.log('Received SIGINT. Press Control-D to exit.');\n});\n\n// Using a single function to handle multiple signals\nfunction handle(signal) {\n  console.log(`Received ${signal}`);\n}\n\nprocess.on('SIGINT', handle);\nprocess.on('SIGTERM', handle);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGUSR1' is reserved by Node.js to start the debugger. It's possible to\ninstall a listener but doing so might interfere with the debugger.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGTERM' and 'SIGINT' have default handlers on non-Windows platforms that\nreset the terminal mode before exiting with code 128 + signal number. If one\nof these signals has a listener installed, its default behavior will be\nremoved (Node.js will no longer exit).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGPIPE' is ignored by default. It can have a listener installed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGHUP' is generated on Windows when the console window is closed, and on\nother platforms under various similar conditions. See signal(7). It can have a\nlistener installed, however Node.js will be unconditionally terminated by\nWindows about 10 seconds later. On non-Windows platforms, the default\nbehavior of SIGHUP is to terminate Node.js, but once a listener has been\ninstalled its default behavior will be removed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGTERM' is not supported on Windows, it can be listened on.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGINT' from the terminal is supported on all platforms, and can usually be\ngenerated with <Ctrl>+C (though this may be configurable). It is not\ngenerated when terminal raw mode is enabled and <Ctrl>+C is used.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGBREAK' is delivered on Windows when <Ctrl>+<Break> is pressed, on\nnon-Windows platforms it can be listened on, but there is no way to send or\ngenerate it.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGWINCH' is delivered when the console has been resized. On Windows, this\nwill only happen on write to the console when the cursor is being moved, or\nwhen a readable tty is used in raw mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGKILL' cannot have a listener installed, it will unconditionally\nterminate Node.js on all platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGSTOP' cannot have a listener installed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGBUS', 'SIGFPE', 'SIGSEGV' and 'SIGILL', when not raised\n artificially using kill(2), inherently leave the process in a state from\n which it is not safe to attempt to call JS listeners. Doing so might lead to\n the process hanging in an endless loop, since listeners attached using\n process.on() are called asynchronously and therefore unable to correct the\nunderlying problem.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 0 can be sent to test for the existence of a process, it has no effect if\nthe process exists, but will throw an error if the process does not exist.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Windows does not support signals so has no equivalent to termination by signal,\nbut Node.js offers some emulation with process.kill(), and\nsubprocess.kill():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Sending SIGINT, SIGTERM, and SIGKILL will cause the unconditional\ntermination of the target process, and afterwards, subprocess will report that\nthe process was terminated by signal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Sending signal 0 can be used as a platform independent way to test for the\nexistence of a process.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Signal events will be emitted when the Node.js process receives a signal. Please\nrefer to signal(7) for a listing of standard POSIX signal names such as\n'SIGINT', 'SIGHUP', etc.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Signals are not available on Worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The signal handler will receive the signal's name ('SIGINT',\n'SIGTERM', etc.) as the first argument.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The name of each event will be the uppercase common name for the signal (e.g.\n'SIGINT' for SIGINT signals).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          // Begin reading from stdin so the process does not exit.\nprocess.stdin.resume();\n\nprocess.on('SIGINT', () => {\n  console.log('Received SIGINT. Press Control-D to exit.');\n});\n\n// Using a single function to handle multiple signals\nfunction handle(signal) {\n  console.log(`Received ${signal}`);\n}\n\nprocess.on('SIGINT', handle);\nprocess.on('SIGTERM', handle);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGUSR1' is reserved by Node.js to start the debugger. It's possible to\ninstall a listener but doing so might interfere with the debugger.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGTERM' and 'SIGINT' have default handlers on non-Windows platforms that\nreset the terminal mode before exiting with code 128 + signal number. If one\nof these signals has a listener installed, its default behavior will be\nremoved (Node.js will no longer exit).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGPIPE' is ignored by default. It can have a listener installed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGHUP' is generated on Windows when the console window is closed, and on\nother platforms under various similar conditions. See signal(7). It can have a\nlistener installed, however Node.js will be unconditionally terminated by\nWindows about 10 seconds later. On non-Windows platforms, the default\nbehavior of SIGHUP is to terminate Node.js, but once a listener has been\ninstalled its default behavior will be removed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGTERM' is not supported on Windows, it can be listened on.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGINT' from the terminal is supported on all platforms, and can usually be\ngenerated with Ctrl+C (though this may be configurable).\nIt is not generated when terminal raw mode is enabled and\nCtrl+C is used.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGBREAK' is delivered on Windows when Ctrl+Break is\npressed. On non-Windows platforms, it can be listened on, but there is no way\nto send or generate it.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGWINCH' is delivered when the console has been resized. On Windows, this\nwill only happen on write to the console when the cursor is being moved, or\nwhen a readable tty is used in raw mode.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGKILL' cannot have a listener installed, it will unconditionally\nterminate Node.js on all platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGSTOP' cannot have a listener installed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'SIGBUS', 'SIGFPE', 'SIGSEGV' and 'SIGILL', when not raised\n artificially using kill(2), inherently leave the process in a state from\n which it is not safe to attempt to call JS listeners. Doing so might lead to\n the process hanging in an endless loop, since listeners attached using\n process.on() are called asynchronously and therefore unable to correct the\nunderlying problem.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 0 can be sent to test for the existence of a process, it has no effect if\nthe process exists, but will throw an error if the process does not exist.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Windows does not support signals so has no equivalent to termination by signal,\nbut Node.js offers some emulation with process.kill(), and\nsubprocess.kill():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Sending SIGINT, SIGTERM, and SIGKILL will cause the unconditional\ntermination of the target process, and afterwards, subprocess will report that\nthe process was terminated by signal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Sending signal 0 can be used as a platform independent way to test for the\nexistence of a process.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " } ], "type": "module", - "displayName": "Process Events" + "displayName": "Process events" }, { - "textRaw": "Exit Codes", + "textRaw": "Exit codes", "name": "exit_codes", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Node.js will normally exit with a 0 status code when no more async\noperations are pending. The following status codes are used in other\ncases:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 1 Uncaught Fatal Exception: There was an uncaught exception,\nand it was not handled by a domain or an 'uncaughtException' event\nhandler.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 2: Unused (reserved by Bash for builtin misuse)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 3 Internal JavaScript Parse Error: The JavaScript source code\ninternal in the Node.js bootstrapping process caused a parse error. This\nis extremely rare, and generally can only happen during development\nof Node.js itself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 4 Internal JavaScript Evaluation Failure: The JavaScript\nsource code internal in the Node.js bootstrapping process failed to\nreturn a function value when evaluated. This is extremely rare, and\ngenerally can only happen during development of Node.js itself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 5 Fatal Error: There was a fatal unrecoverable error in V8.\nTypically a message will be printed to stderr with the prefix FATAL ERROR.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 6 Non-function Internal Exception Handler: There was an\nuncaught exception, but the internal fatal exception handler\nfunction was somehow set to a non-function, and could not be called.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 7 Internal Exception Handler Run-Time Failure: There was an\nuncaught exception, and the internal fatal exception handler\nfunction itself threw an error while attempting to handle it. This\ncan happen, for example, if an 'uncaughtException' or\ndomain.on('error') handler throws an error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 8: Unused. In previous versions of Node.js, exit code 8 sometimes\nindicated an uncaught exception.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 9 Invalid Argument: Either an unknown option was specified,\nor an option requiring a value was provided without a value.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 10 Internal JavaScript Run-Time Failure: The JavaScript\nsource code internal in the Node.js bootstrapping process threw an error\nwhen the bootstrapping function was called. This is extremely rare,\nand generally can only happen during development of Node.js itself.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 12 Invalid Debug Argument: The --inspect and/or --inspect-brk\noptions were set, but the port number chosen was invalid or unavailable.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • >128 Signal Exits: If Node.js receives a fatal signal such as\nSIGKILL or SIGHUP, then its exit code will be 128 plus the\nvalue of the signal code. This is a standard POSIX practice, since\nexit codes are defined to be 7-bit integers, and signal exits set\nthe high-order bit, and then contain the value of the signal code.\nFor example, signal SIGABRT has value 6, so the expected exit\ncode will be 128 + 6, or 134.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "type": "module", - "displayName": "Exit Codes" + "displayName": "Exit codes" } ], "methods": [ @@ -812,7 +812,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.initgroups() method reads the /etc/group file and initializes\nthe group access list, using all groups of which the user is a member. This is\na privileged operation that requires that the Node.js process either have root\naccess or the CAP_SETGID capability.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Use care when dropping privileges:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          console.log(process.getgroups());         // [ 0 ]\nprocess.initgroups('bnoordhuis', 1000);   // switch user\nconsole.log(process.getgroups());         // [ 27, 30, 46, 1000, 0 ]\nprocess.setgid(1000);                     // drop root gid\nconsole.log(process.getgroups());         // [ 27, 30, 46, 1000 ]\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This function is only available on POSIX platforms (i.e. not Windows or\nAndroid).\nThis feature is not available in Worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.initgroups() method reads the /etc/group file and initializes\nthe group access list, using all groups of which the user is a member. This is\na privileged operation that requires that the Node.js process either have root\naccess or the CAP_SETGID capability.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Use care when dropping privileges:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          console.log(process.getgroups());         // [ 0 ]\nprocess.initgroups('nodeuser', 1000);     // switch user\nconsole.log(process.getgroups());         // [ 27, 30, 46, 1000, 0 ]\nprocess.setgid(1000);                     // drop root gid\nconsole.log(process.getgroups());         // [ 27, 30, 46, 1000 ]\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This function is only available on POSIX platforms (i.e. not Windows or\nAndroid).\nThis feature is not available in Worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`process.kill(pid[, signal])`", @@ -1256,7 +1256,35 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.setUncaughtExceptionCaptureCallback() function sets a function\nthat will be invoked when an uncaught exception occurs, which will receive the\nexception value itself as its first argument.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If such a function is set, the 'uncaughtException' event will\nnot be emitted. If --abort-on-uncaught-exception was passed from the\ncommand line or set through v8.setFlagsFromString(), the process will\nnot abort.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          To unset the capture function,\nprocess.setUncaughtExceptionCaptureCallback(null) may be used. Calling this\nmethod with a non-null argument while another capture function is set will\nthrow an error.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Using this function is mutually exclusive with using the deprecated\ndomain built-in module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { - "textRaw": "`process.umask([mask])`", + "textRaw": "`process.umask()`", + "type": "method", + "name": "umask", + "meta": { + "added": [ + "v0.1.19" + ], + "changes": [ + { + "version": [ + "v12.19.0", + "v14.0.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/32499", + "description": "Calling `process.umask()` with no arguments is deprecated." + } + ] + }, + "stability": 0, + "stabilityText": "Deprecated. Calling `process.umask()` with no argument causes\nthe process-wide umask to be written twice. This introduces a race condition\nbetween threads, and is a potential security vulnerability. There is no safe,\ncross-platform alternative API.", + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.umask() returns the Node.js process's file mode creation mask. Child\nprocesses inherit the mask from the parent process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + }, + { + "textRaw": "`process.umask(mask)`", "type": "method", "name": "umask", "meta": { @@ -1276,7 +1304,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.umask() method sets or returns the Node.js process's file mode\ncreation mask. Child processes inherit the mask from the parent process. Invoked\nwithout an argument, the current mask is returned, otherwise the umask is set to\nthe argument value and the previous mask is returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const newmask = 0o022;\nconst oldmask = process.umask(newmask);\nconsole.log(\n  `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`\n);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Worker threads are able to read the umask, however attempting to set the\numask will result in a thrown exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.umask(mask) sets the Node.js process's file mode creation mask. Child\nprocesses inherit the mask from the parent process. Returns the previous mask.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const newmask = 0o022;\nconst oldmask = process.umask(newmask);\nconsole.log(\n  `Changed umask from ${oldmask.toString(8)} to ${newmask.toString(8)}`\n);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          In Worker threads, process.umask(mask) will throw an exception.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`process.uptime()`", @@ -1312,7 +1340,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.allowedNodeEnvironmentFlags property is a special,\nread-only Set of flags allowable within the NODE_OPTIONS\nenvironment variable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.allowedNodeEnvironmentFlags extends Set, but overrides\nSet.prototype.has to recognize several different possible flag\nrepresentations. process.allowedNodeEnvironmentFlags.has() will\nreturn true in the following cases:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Flags may omit leading single (-) or double (--) dashes; e.g.,\ninspect-brk for --inspect-brk, or r for -r.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Flags passed through to V8 (as listed in --v8-options) may replace\none or more non-leading dashes for an underscore, or vice-versa;\ne.g., --perf_basic_prof, --perf-basic-prof, --perf_basic-prof,\netc.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Flags may contain one or more equals (=) characters; all\ncharacters after and including the first equals will be ignored;\ne.g., --stack-trace-limit=100.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Flags must be allowable within NODE_OPTIONS.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          When iterating over process.allowedNodeEnvironmentFlags, flags will\nappear only once; each will begin with one or more dashes. Flags\npassed through to V8 will contain underscores instead of non-leading\ndashes:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.allowedNodeEnvironmentFlags.forEach((flag) => {\n  // -r\n  // --inspect-brk\n  // --abort_on_uncaught_exception\n  // ...\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The methods add(), clear(), and delete() of\nprocess.allowedNodeEnvironmentFlags do nothing, and will fail\nsilently.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If Node.js was compiled without NODE_OPTIONS support (shown in\nprocess.config), process.allowedNodeEnvironmentFlags will\ncontain what would have been allowable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.allowedNodeEnvironmentFlags property is a special,\nread-only Set of flags allowable within the NODE_OPTIONS\nenvironment variable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.allowedNodeEnvironmentFlags extends Set, but overrides\nSet.prototype.has to recognize several different possible flag\nrepresentations. process.allowedNodeEnvironmentFlags.has() will\nreturn true in the following cases:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Flags may omit leading single (-) or double (--) dashes; e.g.,\ninspect-brk for --inspect-brk, or r for -r.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Flags passed through to V8 (as listed in --v8-options) may replace\none or more non-leading dashes for an underscore, or vice-versa;\ne.g., --perf_basic_prof, --perf-basic-prof, --perf_basic-prof,\netc.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Flags may contain one or more equals (=) characters; all\ncharacters after and including the first equals will be ignored;\ne.g., --stack-trace-limit=100.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Flags must be allowable within NODE_OPTIONS.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          When iterating over process.allowedNodeEnvironmentFlags, flags will\nappear only once; each will begin with one or more dashes. Flags\npassed through to V8 will contain underscores instead of non-leading\ndashes:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.allowedNodeEnvironmentFlags.forEach((flag) => {\n  // -r\n  // --inspect-brk\n  // --abort_on_uncaught_exception\n  // ...\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The methods add(), clear(), and delete() of\nprocess.allowedNodeEnvironmentFlags do nothing, and will fail\nsilently.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If Node.js was compiled without NODE_OPTIONS support (shown in\nprocess.config), process.allowedNodeEnvironmentFlags will\ncontain what would have been allowable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`arch` {string}", @@ -1443,7 +1471,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.execPath property returns the absolute pathname of the executable\nthat started the Node.js process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          '/usr/local/bin/node'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.execPath property returns the absolute pathname of the executable\nthat started the Node.js process. Symbolic links, if any, are resolved.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          '/usr/local/bin/node'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`exitCode` {integer}", @@ -1517,7 +1545,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.ppid property returns the PID of the current parent process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          console.log(`The parent process is pid ${process.ppid}`);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.ppid property returns the PID of the parent of the\ncurrent process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          console.log(`The parent process is pid ${process.ppid}`);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`release` {Object}", @@ -1535,7 +1563,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.release property returns an Object containing metadata related\nto the current release, including URLs for the source tarball and headers-only\ntarball.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.release contains the following properties:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • name <string> A value that will always be 'node' for Node.js. For\nlegacy io.js releases, this will be 'io.js'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • sourceUrl <string> an absolute URL pointing to a .tar.gz file containing\nthe source code of the current release.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • headersUrl<string> an absolute URL pointing to a .tar.gz file containing\nonly the source header files for the current release. This file is\nsignificantly smaller than the full source file and can be used for compiling\nNode.js native add-ons.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • libUrl <string> an absolute URL pointing to a node.lib file matching the\narchitecture and version of the current release. This file is used for\ncompiling Node.js native add-ons. This property is only present on Windows\nbuilds of Node.js and will be missing on all other platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            lts <string> a string label identifying the LTS label for this release.\nThis property only exists for LTS releases and is undefined for all other\nrelease types, including Current releases. Currently the valid values are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • 'Argon' for the 4.x LTS line beginning with 4.2.0.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • 'Boron' for the 6.x LTS line beginning with 6.9.0.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • 'Carbon' for the 8.x LTS line beginning with 8.9.1.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          {\n  name: 'node',\n  lts: 'Argon',\n  sourceUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5.tar.gz',\n  headersUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5-headers.tar.gz',\n  libUrl: 'https://nodejs.org/download/release/v4.4.5/win-x64/node.lib'\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          In custom builds from non-release versions of the source tree, only the\nname property may be present. The additional properties should not be\nrelied upon to exist.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.release property returns an Object containing metadata related\nto the current release, including URLs for the source tarball and headers-only\ntarball.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.release contains the following properties:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • name <string> A value that will always be 'node' for Node.js. For\nlegacy io.js releases, this will be 'io.js'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • sourceUrl <string> an absolute URL pointing to a .tar.gz file containing\nthe source code of the current release.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • headersUrl<string> an absolute URL pointing to a .tar.gz file containing\nonly the source header files for the current release. This file is\nsignificantly smaller than the full source file and can be used for compiling\nNode.js native add-ons.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • libUrl <string> an absolute URL pointing to a node.lib file matching the\narchitecture and version of the current release. This file is used for\ncompiling Node.js native add-ons. This property is only present on Windows\nbuilds of Node.js and will be missing on all other platforms.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • lts <string> a string label identifying the LTS label for this release.\nThis property only exists for LTS releases and is undefined for all other\nrelease types, including Current releases.\nValid values include the LTS Release Codenames (including those\nthat are no longer supported). A non-exhaustive example of\nthese codenames includes:\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • 'Dubnium' for the 10.x LTS line beginning with 10.13.0.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • 'Erbium' for the 12.x LTS line beginning with 12.13.0.\nFor other LTS Release Codenames, see Node.js Changelog Archive
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          {\n  name: 'node',\n  lts: 'Erbium',\n  sourceUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1.tar.gz',\n  headersUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1-headers.tar.gz',\n  libUrl: 'https://nodejs.org/download/release/v12.18.1/win-x64/node.lib'\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          In custom builds from non-release versions of the source tree, only the\nname property may be present. The additional properties should not be\nrelied upon to exist.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`report` {Object}", @@ -1549,7 +1577,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -1579,7 +1607,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -1597,7 +1625,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -1629,7 +1657,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -1647,7 +1675,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -1665,7 +1693,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -1685,7 +1713,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -1720,7 +1748,7 @@ { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32242", - "description": "This API is no longer considered experimental." + "description": "This API is no longer experimental." } ] }, @@ -1770,7 +1798,7 @@ "textRaw": "`stdin` {Stream}", "type": "Stream", "name": "stdin", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.stdin property returns a stream connected to\nstdin (fd 0). It is a net.Socket (which is a Duplex\nstream) unless fd 0 refers to a file, in which case it is\na Readable stream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.stdin.setEncoding('utf8');\n\nprocess.stdin.on('readable', () => {\n  let chunk;\n  // Use a loop to make sure we read all available data.\n  while ((chunk = process.stdin.read()) !== null) {\n    process.stdout.write(`data: ${chunk}`);\n  }\n});\n\nprocess.stdin.on('end', () => {\n  process.stdout.write('end');\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          As a Duplex stream, process.stdin can also be used in \"old\" mode that\nis compatible with scripts written for Node.js prior to v0.10.\nFor more information see Stream compatibility.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          In \"old\" streams mode the stdin stream is paused by default, so one\nmust call process.stdin.resume() to read from it. Note also that calling\nprocess.stdin.resume() itself would switch stream to \"old\" mode.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.stdin property returns a stream connected to\nstdin (fd 0). It is a net.Socket (which is a Duplex\nstream) unless fd 0 refers to a file, in which case it is\na Readable stream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For details of how to read from stdin see readable.read().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          As a Duplex stream, process.stdin can also be used in \"old\" mode that\nis compatible with scripts written for Node.js prior to v0.10.\nFor more information see Stream compatibility.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          In \"old\" streams mode the stdin stream is paused by default, so one\nmust call process.stdin.resume() to read from it. Note also that calling\nprocess.stdin.resume() itself would switch stream to \"old\" mode.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "properties": [ { "textRaw": "`fd` {number}", @@ -1797,7 +1825,7 @@ { "textRaw": "A note on process I/O", "name": "a_note_on_process_i/o", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.stdout and process.stderr differ from other Node.js streams in\nimportant ways:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. They are used internally by console.log() and console.error(),\nrespectively.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Writes may be synchronous depending on what the stream is connected to\nand whether the system is Windows or POSIX:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Files: synchronous on Windows and POSIX
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • TTYs (Terminals): asynchronous on Windows, synchronous on POSIX
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Pipes (and sockets): synchronous on Windows, asynchronous on POSIX
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          These behaviors are partly for historical reasons, as changing them would\ncreate backwards incompatibility, but they are also expected by some users.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Synchronous writes avoid problems such as output written with console.log() or\nconsole.error() being unexpectedly interleaved, or not written at all if\nprocess.exit() is called before an asynchronous write completes. See\nprocess.exit() for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Warning: Synchronous writes block the event loop until the write has\ncompleted. This can be near instantaneous in the case of output to a file, but\nunder high system load, pipes that are not being read at the receiving end, or\nwith slow terminals or file systems, its possible for the event loop to be\nblocked often enough and long enough to have severe negative performance\nimpacts. This may not be a problem when writing to an interactive terminal\nsession, but consider this particularly careful when doing production logging to\nthe process output streams.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          To check if a stream is connected to a TTY context, check the isTTY\nproperty.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For instance:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          $ node -p \"Boolean(process.stdin.isTTY)\"\ntrue\n$ echo \"foo\" | node -p \"Boolean(process.stdin.isTTY)\"\nfalse\n$ node -p \"Boolean(process.stdout.isTTY)\"\ntrue\n$ node -p \"Boolean(process.stdout.isTTY)\" | cat\nfalse\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          See the TTY documentation for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          process.stdout and process.stderr differ from other Node.js streams in\nimportant ways:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. They are used internally by console.log() and console.error(),\nrespectively.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          3. Writes may be synchronous depending on what the stream is connected to\nand whether the system is Windows or POSIX:\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Files: synchronous on Windows and POSIX
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • TTYs (Terminals): asynchronous on Windows, synchronous on POSIX
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Pipes (and sockets): synchronous on Windows, asynchronous on POSIX
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          4. \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          These behaviors are partly for historical reasons, as changing them would\ncreate backward incompatibility, but they are also expected by some users.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Synchronous writes avoid problems such as output written with console.log() or\nconsole.error() being unexpectedly interleaved, or not written at all if\nprocess.exit() is called before an asynchronous write completes. See\nprocess.exit() for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Warning: Synchronous writes block the event loop until the write has\ncompleted. This can be near instantaneous in the case of output to a file, but\nunder high system load, pipes that are not being read at the receiving end, or\nwith slow terminals or file systems, its possible for the event loop to be\nblocked often enough and long enough to have severe negative performance\nimpacts. This may not be a problem when writing to an interactive terminal\nsession, but consider this particularly careful when doing production logging to\nthe process output streams.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          To check if a stream is connected to a TTY context, check the isTTY\nproperty.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For instance:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          $ node -p \"Boolean(process.stdin.isTTY)\"\ntrue\n$ echo \"foo\" | node -p \"Boolean(process.stdin.isTTY)\"\nfalse\n$ node -p \"Boolean(process.stdout.isTTY)\"\ntrue\n$ node -p \"Boolean(process.stdout.isTTY)\" | cat\nfalse\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          See the TTY documentation for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "type": "module", "displayName": "A note on process I/O" } @@ -1825,7 +1853,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.title property returns the current process title (i.e. returns\nthe current value of ps). Assigning a new value to process.title modifies\nthe current value of ps.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          When a new value is assigned, different platforms will impose different maximum\nlength restrictions on the title. Usually such restrictions are quite limited.\nFor instance, on Linux and macOS, process.title is limited to the size of the\nbinary name plus the length of the command line arguments because setting the\nprocess.title overwrites the argv memory of the process. Node.js v0.8\nallowed for longer process title strings by also overwriting the environ\nmemory but that was potentially insecure and confusing in some (rather obscure)\ncases.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.title property returns the current process title (i.e. returns\nthe current value of ps). Assigning a new value to process.title modifies\nthe current value of ps.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          When a new value is assigned, different platforms will impose different maximum\nlength restrictions on the title. Usually such restrictions are quite limited.\nFor instance, on Linux and macOS, process.title is limited to the size of the\nbinary name plus the length of the command line arguments because setting the\nprocess.title overwrites the argv memory of the process. Node.js v0.8\nallowed for longer process title strings by also overwriting the environ\nmemory but that was potentially insecure and confusing in some (rather obscure)\ncases.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Assigning a value to process.title might not result in an accurate label\nwithin process manager applications such as macOS Activity Monitor or Windows\nServices Manager.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`traceDeprecation` {boolean}", @@ -1849,7 +1877,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.version property returns the Node.js version string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          console.log(`Version: ${process.version}`);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The process.version property contains the Node.js version string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          console.log(`Version: ${process.version}`);\n// Version: v14.8.0\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          To get the version string without the prepended v, use\nprocess.versions.node.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`versions` {Object}", diff -Nru nodejs-mozilla-12.18.1/doc/api/process.md nodejs-mozilla-12.22.12/doc/api/process.md --- nodejs-mozilla-12.18.1/doc/api/process.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/process.md 2022-04-05 07:17:04.000000000 +0000 @@ -3,6 +3,8 @@ + + The `process` object is a `global` that provides information about, and control over, the current Node.js process. As a global, it is always available to Node.js applications without using `require()`. It can also be explicitly @@ -12,7 +14,7 @@ const process = require('process'); ``` -## Process Events +## Process events The `process` object is an instance of [`EventEmitter`][]. @@ -122,7 +124,7 @@ If the `serialization` option was set to `advanced` used when spawning the process, the `message` argument can contain data that JSON is not able to represent. -See [Advanced Serialization for `child_process`][] for more details. +See [Advanced serialization for `child_process`][] for more details. ### Event: `'multipleResolves'` @@ -501,11 +504,12 @@ installed its default behavior will be removed. * `'SIGTERM'` is not supported on Windows, it can be listened on. * `'SIGINT'` from the terminal is supported on all platforms, and can usually be - generated with `+C` (though this may be configurable). It is not - generated when [terminal raw mode][] is enabled and `+C` is used. -* `'SIGBREAK'` is delivered on Windows when `+` is pressed, on - non-Windows platforms it can be listened on, but there is no way to send or - generate it. + generated with Ctrl+C (though this may be configurable). + It is not generated when [terminal raw mode][] is enabled and + Ctrl+C is used. +* `'SIGBREAK'` is delivered on Windows when Ctrl+Break is + pressed. On non-Windows platforms, it can be listened on, but there is no way + to send or generate it. * `'SIGWINCH'` is delivered when the console has been resized. On Windows, this will only happen on write to the console when the cursor is being moved, or when a readable tty is used in raw mode. @@ -553,7 +557,7 @@ `process.allowedNodeEnvironmentFlags` extends `Set`, but overrides `Set.prototype.has` to recognize several different possible flag -representations. `process.allowedNodeEnvironmentFlags.has()` will +representations. `process.allowedNodeEnvironmentFlags.has()` will return `true` in the following cases: * Flags may omit leading single (`-`) or double (`--`) dashes; e.g., @@ -1148,7 +1152,7 @@ * {string} The `process.execPath` property returns the absolute pathname of the executable -that started the Node.js process. +that started the Node.js process. Symbolic links, if any, are resolved. ```js @@ -1418,7 +1422,7 @@ ```js console.log(process.getgroups()); // [ 0 ] -process.initgroups('bnoordhuis', 1000); // switch user +process.initgroups('nodeuser', 1000); // switch user console.log(process.getgroups()); // [ 27, 30, 46, 1000, 0 ] process.setgid(1000); // drop root gid console.log(process.getgroups()); // [ 27, 30, 46, 1000 ] @@ -1695,7 +1699,8 @@ * {integer} -The `process.ppid` property returns the PID of the current parent process. +The `process.ppid` property returns the PID of the parent of the +current process. ```js console.log(`The parent process is pid ${process.ppid}`); @@ -1732,19 +1737,22 @@ builds of Node.js and will be missing on all other platforms._ * `lts` {string} a string label identifying the [LTS][] label for this release. This property only exists for LTS releases and is `undefined` for all other - release types, including _Current_ releases. Currently the valid values are: - * `'Argon'` for the 4.x LTS line beginning with 4.2.0. - * `'Boron'` for the 6.x LTS line beginning with 6.9.0. - * `'Carbon'` for the 8.x LTS line beginning with 8.9.1. + release types, including _Current_ releases. + Valid values include the LTS Release Codenames (including those + that are no longer supported). A non-exhaustive example of + these codenames includes: + * `'Dubnium'` for the 10.x LTS line beginning with 10.13.0. + * `'Erbium'` for the 12.x LTS line beginning with 12.13.0. + For other LTS Release Codenames, see [Node.js Changelog Archive](https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_ARCHIVE.md) ```js { name: 'node', - lts: 'Argon', - sourceUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5.tar.gz', - headersUrl: 'https://nodejs.org/download/release/v4.4.5/node-v4.4.5-headers.tar.gz', - libUrl: 'https://nodejs.org/download/release/v4.4.5/win-x64/node.lib' + lts: 'Erbium', + sourceUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1.tar.gz', + headersUrl: 'https://nodejs.org/download/release/v12.18.1/node-v12.18.1-headers.tar.gz', + libUrl: 'https://nodejs.org/download/release/v12.18.1/win-x64/node.lib' } ``` @@ -1758,7 +1766,7 @@ changes: - version: v12.17.0 pr-url: https://github.com/nodejs/node/pull/32242 - description: This API is no longer considered experimental. + description: This API is no longer experimental. --> * {Object} @@ -1788,7 +1796,7 @@ changes: - version: v12.17.0 pr-url: https://github.com/nodejs/node/pull/32242 - description: This API is no longer considered experimental. + description: This API is no longer experimental. --> * {string} @@ -1807,7 +1815,7 @@ changes: - version: v12.17.0 pr-url: https://github.com/nodejs/node/pull/32242 - description: This API is no longer considered experimental. + description: This API is no longer experimental. --> * {string} @@ -1826,7 +1834,7 @@ changes: - version: v12.17.0 pr-url: https://github.com/nodejs/node/pull/32242 - description: This API is no longer considered experimental. + description: This API is no longer experimental. --> * `err` {Error} A custom error used for reporting the JavaScript stack. @@ -1869,7 +1877,7 @@ changes: - version: v12.17.0 pr-url: https://github.com/nodejs/node/pull/32242 - description: This API is no longer considered experimental. + description: This API is no longer experimental. --> * {boolean} @@ -1887,7 +1895,7 @@ changes: - version: v12.17.0 pr-url: https://github.com/nodejs/node/pull/32242 - description: This API is no longer considered experimental. + description: This API is no longer experimental. --> * {boolean} @@ -1904,7 +1912,7 @@ changes: - version: v12.17.0 pr-url: https://github.com/nodejs/node/pull/32242 - description: This API is no longer considered experimental. + description: This API is no longer experimental. --> * {string} @@ -1922,7 +1930,7 @@ changes: - version: v12.17.0 pr-url: https://github.com/nodejs/node/pull/32242 - description: This API is no longer considered experimental. + description: This API is no longer experimental. --> * `filename` {string} Name of the file where the report is written. This @@ -2223,21 +2231,7 @@ stream) unless fd `0` refers to a file, in which case it is a [Readable][] stream. -```js -process.stdin.setEncoding('utf8'); - -process.stdin.on('readable', () => { - let chunk; - // Use a loop to make sure we read all available data. - while ((chunk = process.stdin.read()) !== null) { - process.stdout.write(`data: ${chunk}`); - } -}); - -process.stdin.on('end', () => { - process.stdout.write('end'); -}); -``` +For details of how to read from `stdin` see [`readable.read()`][]. As a [Duplex][] stream, `process.stdin` can also be used in "old" mode that is compatible with scripts written for Node.js prior to v0.10. @@ -2295,7 +2289,7 @@ * Pipes (and sockets): *synchronous* on Windows, *asynchronous* on POSIX These behaviors are partly for historical reasons, as changing them would -create backwards incompatibility, but they are also expected by some users. +create backward incompatibility, but they are also expected by some users. Synchronous writes avoid problems such as output written with `console.log()` or `console.error()` being unexpectedly interleaved, or not written at all if @@ -2379,6 +2373,10 @@ memory but that was potentially insecure and confusing in some (rather obscure) cases. +Assigning a value to `process.title` might not result in an accurate label +within process manager applications such as macOS Activity Monitor or Windows +Services Manager. + ## `process.traceDeprecation` + +> Stability: 0 - Deprecated. Calling `process.umask()` with no argument causes +> the process-wide umask to be written twice. This introduces a race condition +> between threads, and is a potential security vulnerability. There is no safe, +> cross-platform alternative API. + +`process.umask()` returns the Node.js process's file mode creation mask. Child +processes inherit the mask from the parent process. + +## `process.umask(mask)` * `mask` {string|integer} -The `process.umask()` method sets or returns the Node.js process's file mode -creation mask. Child processes inherit the mask from the parent process. Invoked -without an argument, the current mask is returned, otherwise the umask is set to -the argument value and the previous mask is returned. +`process.umask(mask)` sets the Node.js process's file mode creation mask. Child +processes inherit the mask from the parent process. Returns the previous mask. ```js const newmask = 0o022; @@ -2412,8 +2428,7 @@ ); ``` -[`Worker`][] threads are able to read the umask, however attempting to set the -umask will result in a thrown exception. +In [`Worker`][] threads, `process.umask(mask)` will throw an exception. ## `process.uptime()`
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/punycode.json nodejs-mozilla-12.22.12/doc/api/punycode.json --- nodejs-mozilla-12.18.1/doc/api/punycode.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/punycode.json 2022-04-05 07:17:04.000000000 +0000 @@ -6,18 +6,15 @@ "textRaw": "Punycode", "name": "punycode", "meta": { - "changes": [ - { - "version": "v7.0.0", - "pr-url": "https://github.com/nodejs/node/pull/7941", - "description": "Accessing this module will now emit a deprecation warning." - } - ] + "deprecated": [ + "v7.0.0" + ], + "changes": [] }, "introduced_in": "v0.10.0", "stability": 0, "stabilityText": "Deprecated", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The version of the punycode module bundled in Node.js is being deprecated.\nIn a future major version of Node.js this module will be removed. Users\ncurrently depending on the punycode module should switch to using the\nuserland-provided Punycode.js module instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The punycode module is a bundled version of the Punycode.js module. It\ncan be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const punycode = require('punycode');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Punycode is a character encoding scheme defined by RFC 3492 that is\nprimarily intended for use in Internationalized Domain Names. Because host\nnames in URLs are limited to ASCII characters only, Domain Names that contain\nnon-ASCII characters must be converted into ASCII using the Punycode scheme.\nFor instance, the Japanese character that translates into the English word,\n'example' is '例'. The Internationalized Domain Name, '例.com' (equivalent\nto 'example.com') is represented by Punycode as the ASCII string\n'xn--fsq.com'.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The punycode module provides a simple implementation of the Punycode standard.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The punycode module is a third-party dependency used by Node.js and\nmade available to developers as a convenience. Fixes or other modifications to\nthe module must be directed to the Punycode.js project.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/punycode.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The version of the punycode module bundled in Node.js is being deprecated.\nIn a future major version of Node.js this module will be removed. Users\ncurrently depending on the punycode module should switch to using the\nuserland-provided Punycode.js module instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The punycode module is a bundled version of the Punycode.js module. It\ncan be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const punycode = require('punycode');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Punycode is a character encoding scheme defined by RFC 3492 that is\nprimarily intended for use in Internationalized Domain Names. Because host\nnames in URLs are limited to ASCII characters only, Domain Names that contain\nnon-ASCII characters must be converted into ASCII using the Punycode scheme.\nFor instance, the Japanese character that translates into the English word,\n'example' is '例'. The Internationalized Domain Name, '例.com' (equivalent\nto 'example.com') is represented by Punycode as the ASCII string\n'xn--fsq.com'.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The punycode module provides a simple implementation of the Punycode standard.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The punycode module is a third-party dependency used by Node.js and\nmade available to developers as a convenience. Fixes or other modifications to\nthe module must be directed to the Punycode.js project.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "methods": [ { "textRaw": "`punycode.decode(string)`", diff -Nru nodejs-mozilla-12.18.1/doc/api/punycode.md nodejs-mozilla-12.22.12/doc/api/punycode.md --- nodejs-mozilla-12.18.1/doc/api/punycode.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/punycode.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,15 +1,14 @@ # Punycode > Stability: 0 - Deprecated + + **The version of the punycode module bundled in Node.js is being deprecated**. In a future major version of Node.js this module will be removed. Users currently depending on the `punycode` module should switch to using the @@ -149,5 +148,5 @@ Returns a string identifying the current [Punycode.js][] version number. -[Punycode.js]: https://github.com/bestiejs/punycode.js [Punycode]: https://tools.ietf.org/html/rfc3492 +[Punycode.js]: https://github.com/bestiejs/punycode.js diff -Nru nodejs-mozilla-12.18.1/doc/api/querystring.html nodejs-mozilla-12.22.12/doc/api/querystring.html --- nodejs-mozilla-12.18.1/doc/api/querystring.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/querystring.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Query String | Node.js v12.18.1 Documentation + + Query string | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        18. @@ -121,8 +128,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Query String#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Query string#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Source Code: lib/querystring.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The querystring module provides utilities for parsing and formatting URL query strings. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const querystring = require('querystring');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const querystring = require('querystring');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          querystring.decode()#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/querystring.json nodejs-mozilla-12.22.12/doc/api/querystring.json --- nodejs-mozilla-12.18.1/doc/api/querystring.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/querystring.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,12 +3,12 @@ "source": "doc/api/querystring.md", "modules": [ { - "textRaw": "Query String", + "textRaw": "Query string", "name": "querystring", "introduced_in": "v0.1.25", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The querystring module provides utilities for parsing and formatting URL\nquery strings. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const querystring = require('querystring');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Source Code: lib/querystring.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The querystring module provides utilities for parsing and formatting URL\nquery strings. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const querystring = require('querystring');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "methods": [ { "textRaw": "`querystring.decode()`", diff -Nru nodejs-mozilla-12.18.1/doc/api/querystring.md nodejs-mozilla-12.22.12/doc/api/querystring.md --- nodejs-mozilla-12.18.1/doc/api/querystring.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/querystring.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# Query String +# Query string @@ -6,6 +6,8 @@ + + The `querystring` module provides utilities for parsing and formatting URL query strings. It can be accessed using: diff -Nru nodejs-mozilla-12.18.1/doc/api/readline.html nodejs-mozilla-12.22.12/doc/api/readline.html --- nodejs-mozilla-12.18.1/doc/api/readline.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/readline.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Readline | Node.js v12.18.1 Documentation + + Readline | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        18. @@ -121,11 +128,9 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Readline

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Readline

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The listener function is called without passing any arguments.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rl.on('pause', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  console.log('Readline paused.');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rl.on('pause', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  console.log('Readline paused.');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Event: 'resume'#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The 'resume' event is emitted whenever the input stream is resumed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The listener function is called without passing any arguments.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rl.on('resume', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  console.log('Readline resumed.');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rl.on('resume', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  console.log('Readline resumed.');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Event: 'SIGCONT'#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/readline.json nodejs-mozilla-12.22.12/doc/api/readline.json --- nodejs-mozilla-12.18.1/doc/api/readline.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/readline.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The readline module provides an interface for reading data from a Readable\nstream (such as process.stdin) one line at a time. It can be accessed\nusing:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const readline = require('readline');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The following simple example illustrates the basic use of the readline module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const readline = require('readline');\n\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout\n});\n\nrl.question('What do you think of Node.js? ', (answer) => {\n  // TODO: Log the answer in a database\n  console.log(`Thank you for your valuable feedback: ${answer}`);\n\n  rl.close();\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Once this code is invoked, the Node.js application will not terminate until the\nreadline.Interface is closed because the interface waits for data to be\nreceived on the input stream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Source Code: lib/readline.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The readline module provides an interface for reading data from a Readable\nstream (such as process.stdin) one line at a time. It can be accessed\nusing:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const readline = require('readline');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The following simple example illustrates the basic use of the readline module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const readline = require('readline');\n\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout\n});\n\nrl.question('What do you think of Node.js? ', (answer) => {\n  // TODO: Log the answer in a database\n  console.log(`Thank you for your valuable feedback: ${answer}`);\n\n  rl.close();\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Once this code is invoked, the Node.js application will not terminate until the\nreadline.Interface is closed because the interface waits for data to be\nreceived on the input stream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ", "classes": [ { "textRaw": "Class: `Interface`", @@ -323,7 +323,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Create an AsyncIterator object that iterates through each line in the input\nstream as a string. This method allows asynchronous iteration of\nreadline.Interface objects through for await...of loops.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Errors in the input stream are not forwarded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If the loop is terminated with break, throw, or return,\nrl.close() will be called. In other words, iterating over a\nreadline.Interface will always consume the input stream fully.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Performance is not on par with the traditional 'line' event API. Use 'line'\ninstead for performance-sensitive applications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            async function processLineByLine() {\n  const rl = readline.createInterface({\n    // ...\n  });\n\n  for await (const line of rl) {\n    // Each line in the readline input will be successively available here as\n    // `line`.\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Create an AsyncIterator object that iterates through each line in the input\nstream as a string. This method allows asynchronous iteration of\nreadline.Interface objects through for await...of loops.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Errors in the input stream are not forwarded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If the loop is terminated with break, throw, or return,\nrl.close() will be called. In other words, iterating over a\nreadline.Interface will always consume the input stream fully.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Performance is not on par with the traditional 'line' event API. Use 'line'\ninstead for performance-sensitive applications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            async function processLineByLine() {\n  const rl = readline.createInterface({\n    // ...\n  });\n\n  for await (const line of rl) {\n    // Each line in the readline input will be successively available here as\n    // `line`.\n  }\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            readline.createInterface() will start to consume the input stream once\ninvoked. Having asynchronous operations between interface creation and\nasynchronous iteration may result in missed lines.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " }, { "textRaw": "`rl.getCursorPos()`", @@ -359,7 +359,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Returns the real position of the cursor in relation to the input\nprompt + string. Long input (wrapping) strings, as well as multiple\nline prompts are included in the calculations.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Returns the real position of the cursor in relation to the input\nprompt + string. Long input (wrapping) strings, as well as multiple\nline prompts are included in the calculations.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " } ], "properties": [ @@ -373,7 +373,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The current input data being processed by node.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This can be used when collecting input from a TTY stream to retrieve the\ncurrent value that has been processed thus far, prior to the line event\nbeing emitted. Once the line event has been emitted, this property will\nbe an empty string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Be aware that modifying the value during the instance runtime may have\nunintended consequences if rl.cursor is not also controlled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If not using a TTY stream for input, use the 'line' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            One possible use case would be as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const values = ['lorem ipsum', 'dolor sit amet'];\nconst rl = readline.createInterface(process.stdin);\nconst showResults = debounce(() => {\n  console.log(\n    '\\n',\n    values.filter((val) => val.startsWith(rl.line)).join(' ')\n  );\n}, 300);\nprocess.stdin.on('keypress', (c, k) => {\n  showResults();\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The current input data being processed by node.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This can be used when collecting input from a TTY stream to retrieve the\ncurrent value that has been processed thus far, prior to the line event\nbeing emitted. Once the line event has been emitted, this property will\nbe an empty string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Be aware that modifying the value during the instance runtime may have\nunintended consequences if rl.cursor is not also controlled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If not using a TTY stream for input, use the 'line' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            One possible use case would be as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const values = ['lorem ipsum', 'dolor sit amet'];\nconst rl = readline.createInterface(process.stdin);\nconst showResults = debounce(() => {\n  console.log(\n    '\\n',\n    values.filter((val) => val.startsWith(rl.line)).join(' ')\n  );\n}, 300);\nprocess.stdin.on('keypress', (c, k) => {\n  showResults();\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " }, { "textRaw": "`cursor` {number|undefined}", @@ -385,7 +385,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The cursor position relative to rl.line.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This will track where the current cursor lands in the input string, when\nreading input from a TTY stream. The position of cursor determines the\nportion of the input string that will be modified as input is processed,\nas well as the column where the terminal caret will be rendered.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The cursor position relative to rl.line.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This will track where the current cursor lands in the input string, when\nreading input from a TTY stream. The position of cursor determines the\nportion of the input string that will be modified as input is processed,\nas well as the column where the terminal caret will be rendered.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " } ] } @@ -602,11 +602,11 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The readline.createInterface() method creates a new readline.Interface\ninstance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const readline = require('readline');\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Once the readline.Interface instance is created, the most common case is to\nlisten for the 'line' event:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            rl.on('line', (line) => {\n  console.log(`Received: ${line}`);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If terminal is true for this instance then the output stream will get\nthe best compatibility if it defines an output.columns property and emits\na 'resize' event on the output if or when the columns ever change\n(process.stdout does this automatically when it is a TTY).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ", "modules": [ { - "textRaw": "Use of the `completer` Function", + "textRaw": "Use of the `completer` function", "name": "use_of_the_`completer`_function", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The completer function takes the current line entered by the user\nas an argument, and returns an Array with 2 entries:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • An Array with matching entries for the completion.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • The substring that was used for the matching.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            For instance: [[substr1, substr2, ...], originalsubstring].

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            function completer(line) {\n  const completions = '.help .error .exit .quit .q'.split(' ');\n  const hits = completions.filter((c) => c.startsWith(line));\n  // Show all completions if none found\n  return [hits.length ? hits : completions, line];\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The completer function can be called asynchronously if it accepts two\narguments:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            function completer(linePartial, callback) {\n  callback(null, [['123'], linePartial]);\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ", "type": "module", - "displayName": "Use of the `completer` Function" + "displayName": "Use of the `completer` function" } ] }, @@ -738,14 +738,14 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The readline.moveCursor() method moves the cursor relative to its current\nposition in a given TTY stream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Example: Tiny CLI

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The following example illustrates the use of readline.Interface class to\nimplement a small command-line interface:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const readline = require('readline');\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout,\n  prompt: 'OHAI> '\n});\n\nrl.prompt();\n\nrl.on('line', (line) => {\n  switch (line.trim()) {\n    case 'hello':\n      console.log('world!');\n      break;\n    default:\n      console.log(`Say what? I might have heard '${line.trim()}'`);\n      break;\n  }\n  rl.prompt();\n}).on('close', () => {\n  console.log('Have a great day!');\n  process.exit(0);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Example: Read File Stream Line-by-Line

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            A common use case for readline is to consume an input file one line at a\ntime. The easiest way to do so is leveraging the fs.ReadStream API as\nwell as a for await...of loop:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');\nconst readline = require('readline');\n\nasync function processLineByLine() {\n  const fileStream = fs.createReadStream('input.txt');\n\n  const rl = readline.createInterface({\n    input: fileStream,\n    crlfDelay: Infinity\n  });\n  // Note: we use the crlfDelay option to recognize all instances of CR LF\n  // ('\\r\\n') in input.txt as a single line break.\n\n  for await (const line of rl) {\n    // Each line in input.txt will be successively available here as `line`.\n    console.log(`Line from file: ${line}`);\n  }\n}\n\nprocessLineByLine();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Alternatively, one could use the 'line' event:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');\nconst readline = require('readline');\n\nconst rl = readline.createInterface({\n  input: fs.createReadStream('sample.txt'),\n  crlfDelay: Infinity\n});\n\nrl.on('line', (line) => {\n  console.log(`Line from file: ${line}`);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Currently, for await...of loop can be a bit slower. If async / await\nflow and speed are both essential, a mixed approach can be applied:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const { once } = require('events');\nconst { createReadStream } = require('fs');\nconst { createInterface } = require('readline');\n\n(async function processLineByLine() {\n  try {\n    const rl = createInterface({\n      input: createReadStream('big-file.txt'),\n      crlfDelay: Infinity\n    });\n\n    rl.on('line', (line) => {\n      // Process the line.\n    });\n\n    await once(rl, 'close');\n\n    console.log('File processed.');\n  } catch (err) {\n    console.error(err);\n  }\n})();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The readline.moveCursor() method moves the cursor relative to its current\nposition in a given TTY stream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Example: Tiny CLI

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The following example illustrates the use of readline.Interface class to\nimplement a small command-line interface:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const readline = require('readline');\nconst rl = readline.createInterface({\n  input: process.stdin,\n  output: process.stdout,\n  prompt: 'OHAI> '\n});\n\nrl.prompt();\n\nrl.on('line', (line) => {\n  switch (line.trim()) {\n    case 'hello':\n      console.log('world!');\n      break;\n    default:\n      console.log(`Say what? I might have heard '${line.trim()}'`);\n      break;\n  }\n  rl.prompt();\n}).on('close', () => {\n  console.log('Have a great day!');\n  process.exit(0);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Example: Read file stream line-by-Line

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            A common use case for readline is to consume an input file one line at a\ntime. The easiest way to do so is leveraging the fs.ReadStream API as\nwell as a for await...of loop:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');\nconst readline = require('readline');\n\nasync function processLineByLine() {\n  const fileStream = fs.createReadStream('input.txt');\n\n  const rl = readline.createInterface({\n    input: fileStream,\n    crlfDelay: Infinity\n  });\n  // Note: we use the crlfDelay option to recognize all instances of CR LF\n  // ('\\r\\n') in input.txt as a single line break.\n\n  for await (const line of rl) {\n    // Each line in input.txt will be successively available here as `line`.\n    console.log(`Line from file: ${line}`);\n  }\n}\n\nprocessLineByLine();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Alternatively, one could use the 'line' event:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const fs = require('fs');\nconst readline = require('readline');\n\nconst rl = readline.createInterface({\n  input: fs.createReadStream('sample.txt'),\n  crlfDelay: Infinity\n});\n\nrl.on('line', (line) => {\n  console.log(`Line from file: ${line}`);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Currently, for await...of loop can be a bit slower. If async / await\nflow and speed are both essential, a mixed approach can be applied:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const { once } = require('events');\nconst { createReadStream } = require('fs');\nconst { createInterface } = require('readline');\n\n(async function processLineByLine() {\n  try {\n    const rl = createInterface({\n      input: createReadStream('big-file.txt'),\n      crlfDelay: Infinity\n    });\n\n    rl.on('line', (line) => {\n      // Process the line.\n    });\n\n    await once(rl, 'close');\n\n    console.log('File processed.');\n  } catch (err) {\n    console.error(err);\n  }\n})();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            " } ], "modules": [ { "textRaw": "TTY keybindings", "name": "tty_keybindings", - "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            KeybindingsDescriptionNotes
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + shift + backspaceDelete line leftDoesn't work on Linux, Mac and Windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + shift + deleteDelete line rightDoesn't work on Linux and Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + cEmit SIGINT or close the readline instance
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + hDelete left
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + dDelete right or close the readline instance in case the current line is empty / EOFDoesn't work on Windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + uDelete from the current position to the line start
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + kDelete from the current position to the end of line
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + aGo to start of line
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + eGo to to end of line
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + bBack one character
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + fForward one character
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + lClear screen
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + nNext history item
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + pPrevious history item
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + zMoves running process into background. Type\n fg and press enter\n to return.Doesn't work on Windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + w or ctrl\n + backspaceDelete backwards to a word boundaryctrl + backspace Doesn't\n work as expected on Windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + deleteDelete forward to a word boundaryDoesn't work on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + left or\n meta + bWord leftctrl + left Doesn't work\n on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + right or\n meta + fWord rightctrl + right Doesn't work\n on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            meta + d or meta\n + deleteDelete word rightmeta + delete Doesn't work\n on windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            meta + backspaceDelete word leftDoesn't work on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ", + "desc": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            KeybindingsDescriptionNotes
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + shift + backspaceDelete line leftDoesn't work on Linux, Mac and Windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + shift + deleteDelete line rightDoesn't work on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + cEmit SIGINT or close the readline instance
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + hDelete left
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + dDelete right or close the readline instance in case the current line is empty / EOFDoesn't work on Windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + uDelete from the current position to the line start
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + kDelete from the current position to the end of line
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + aGo to start of line
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + eGo to to end of line
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + bBack one character
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + fForward one character
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + lClear screen
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + nNext history item
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + pPrevious history item
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + zMoves running process into background. Type\n fg and press enter\n to return.Doesn't work on Windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + w or ctrl\n + backspaceDelete backward to a word boundaryctrl + backspace Doesn't\n work on Linux, Mac and Windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + deleteDelete forward to a word boundaryDoesn't work on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + left or\n meta + bWord leftctrl + left Doesn't work\n on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ctrl + right or\n meta + fWord rightctrl + right Doesn't work\n on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            meta + d or meta\n + deleteDelete word rightmeta + delete Doesn't work\n on windows
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            meta + backspaceDelete word leftDoesn't work on Mac
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ", "type": "module", "displayName": "TTY keybindings" } diff -Nru nodejs-mozilla-12.18.1/doc/api/readline.md nodejs-mozilla-12.22.12/doc/api/readline.md --- nodejs-mozilla-12.18.1/doc/api/readline.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/readline.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `readline` module provides an interface for reading data from a [Readable][] stream (such as [`process.stdin`][]) one line at a time. It can be accessed using: @@ -350,6 +352,10 @@ } ``` +`readline.createInterface()` will start to consume the input stream once +invoked. Having asynchronous operations between interface creation and +asynchronous iteration may result in missed lines. + ### rl.line
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/repl.json nodejs-mozilla-12.22.12/doc/api/repl.json --- nodejs-mozilla-12.18.1/doc/api/repl.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/repl.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,48 +8,48 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The repl module provides a Read-Eval-Print-Loop (REPL) implementation that\nis available both as a standalone program or includible in other applications.\nIt can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const repl = require('repl');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/repl.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The repl module provides a Read-Eval-Print-Loop (REPL) implementation that\nis available both as a standalone program or includible in other applications.\nIt can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const repl = require('repl');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { - "textRaw": "Design and Features", + "textRaw": "Design and features", "name": "design_and_features", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The repl module exports the repl.REPLServer class. While running,\ninstances of repl.REPLServer will accept individual lines of user input,\nevaluate those according to a user-defined evaluation function, then output the\nresult. Input and output may be from stdin and stdout, respectively, or may\nbe connected to any Node.js stream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Instances of repl.REPLServer support automatic completion of inputs,\ncompletion preview, simplistic Emacs-style line editing, multi-line inputs,\nZSH-like reverse-i-search, ZSH-like substring-based history search,\nANSI-styled output, saving and restoring current REPL session state, error\nrecovery, and customizable evaluation functions. Terminals that do not support\nANSI styles and Emacs-style line editing automatically fall back to a limited\nfeature set.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { - "textRaw": "Commands and Special Keys", + "textRaw": "Commands and special keys", "name": "commands_and_special_keys", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following special commands are supported by all REPL instances:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .break: When in the process of inputting a multi-line expression, entering\nthe .break command (or pressing the <ctrl>-C key combination) will abort\nfurther input or processing of that expression.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .clear: Resets the REPL context to an empty object and clears any\nmulti-line expression currently being input.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .exit: Close the I/O stream, causing the REPL to exit.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .help: Show this list of special commands.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .save: Save the current REPL session to a file:\n> .save ./file/to/save.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .load: Load a file into the current REPL session.\n> .load ./file/to/load.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .editor: Enter editor mode (<ctrl>-D to finish, <ctrl>-C to cancel).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    > .editor\n// Entering editor mode (^D to finish, ^C to cancel)\nfunction welcome(name) {\n  return `Hello ${name}!`;\n}\n\nwelcome('Node.js User');\n\n// ^D\n'Hello Node.js User!'\n>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following key combinations in the REPL have these special effects:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • <ctrl>-C: When pressed once, has the same effect as the .break command.\nWhen pressed twice on a blank line, has the same effect as the .exit\ncommand.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • <ctrl>-D: Has the same effect as the .exit command.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • <tab>: When pressed on a blank line, displays global and local (scope)\nvariables. When pressed while entering other input, displays relevant\nautocompletion options.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For key bindings related to the reverse-i-search, see reverse-i-search.\nFor all other key bindings, see TTY keybindings.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following special commands are supported by all REPL instances:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .break: When in the process of inputting a multi-line expression, entering\nthe .break command (or pressing the <ctrl>-C key combination) will abort\nfurther input or processing of that expression.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .clear: Resets the REPL context to an empty object and clears any\nmulti-line expression being input.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .exit: Close the I/O stream, causing the REPL to exit.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .help: Show this list of special commands.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .save: Save the current REPL session to a file:\n> .save ./file/to/save.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .load: Load a file into the current REPL session.\n> .load ./file/to/load.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • .editor: Enter editor mode (<ctrl>-D to finish, <ctrl>-C to cancel).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    > .editor\n// Entering editor mode (^D to finish, ^C to cancel)\nfunction welcome(name) {\n  return `Hello ${name}!`;\n}\n\nwelcome('Node.js User');\n\n// ^D\n'Hello Node.js User!'\n>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following key combinations in the REPL have these special effects:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • <ctrl>-C: When pressed once, has the same effect as the .break command.\nWhen pressed twice on a blank line, has the same effect as the .exit\ncommand.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • <ctrl>-D: Has the same effect as the .exit command.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • <tab>: When pressed on a blank line, displays global and local (scope)\nvariables. When pressed while entering other input, displays relevant\nautocompletion options.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For key bindings related to the reverse-i-search, see reverse-i-search.\nFor all other key bindings, see TTY keybindings.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Commands and Special Keys" + "displayName": "Commands and special keys" }, { - "textRaw": "Default Evaluation", + "textRaw": "Default evaluation", "name": "default_evaluation", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    By default, all instances of repl.REPLServer use an evaluation function\nthat evaluates JavaScript expressions and provides access to Node.js built-in\nmodules. This default behavior can be overridden by passing in an alternative\nevaluation function when the repl.REPLServer instance is created.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { - "textRaw": "JavaScript Expressions", + "textRaw": "JavaScript expressions", "name": "javascript_expressions", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The default evaluator supports direct evaluation of JavaScript expressions:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    > 1 + 1\n2\n> const m = 2\nundefined\n> m + 1\n3\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Unless otherwise scoped within blocks or functions, variables declared\neither implicitly or using the const, let, or var keywords\nare declared at the global scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "JavaScript Expressions" + "displayName": "JavaScript expressions" }, { - "textRaw": "Global and Local Scope", + "textRaw": "Global and local scope", "name": "global_and_local_scope", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The default evaluator provides access to any variables that exist in the global\nscope. It is possible to expose a variable to the REPL explicitly by assigning\nit to the context object associated with each REPLServer:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const repl = require('repl');\nconst msg = 'message';\n\nrepl.start('> ').context.m = msg;\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Properties in the context object appear as local within the REPL:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $ node repl_test.js\n> m\n'message'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Context properties are not read-only by default. To specify read-only globals,\ncontext properties must be defined using Object.defineProperty():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const repl = require('repl');\nconst msg = 'message';\n\nconst r = repl.start('> ');\nObject.defineProperty(r.context, 'm', {\n  configurable: false,\n  enumerable: true,\n  value: msg\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Global and Local Scope" + "displayName": "Global and local scope" }, { - "textRaw": "Accessing Core Node.js Modules", + "textRaw": "Accessing core Node.js modules", "name": "accessing_core_node.js_modules", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The default evaluator will automatically load Node.js core modules into the\nREPL environment when used. For instance, unless otherwise declared as a\nglobal or scoped variable, the input fs will be evaluated on-demand as\nglobal.fs = require('fs').

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    > fs.createReadStream('./some/file');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Accessing Core Node.js Modules" + "displayName": "Accessing core Node.js modules" }, { - "textRaw": "Global Uncaught Exceptions", + "textRaw": "Global uncaught exceptions", "name": "global_uncaught_exceptions", "meta": { "changes": [ @@ -62,7 +62,7 @@ }, "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The REPL uses the domain module to catch all uncaught exceptions for that\nREPL session.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This use of the domain module in the REPL has these side effects:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    As standalone program:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    process.on('uncaughtException', () => console.log('Uncaught'));\n\nthrow new Error('foobar');\n// Uncaught\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When used in another application:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    process.on('uncaughtException', () => console.log('Uncaught'));\n// TypeError [ERR_INVALID_REPL_INPUT]: Listeners for `uncaughtException`\n// cannot be used in the REPL\n\nthrow new Error('foobar');\n// Thrown:\n// Error: foobar\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Global Uncaught Exceptions" + "displayName": "Global uncaught exceptions" }, { "textRaw": "Assignment of the `_` (underscore) variable", @@ -89,7 +89,7 @@ } ], "type": "module", - "displayName": "Default Evaluation" + "displayName": "Default evaluation" }, { "textRaw": "Reverse-i-search", @@ -100,36 +100,36 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The REPL supports bi-directional reverse-i-search similar to ZSH. It is\ntriggered with <ctrl> + R to search backwards and <ctrl> + S to search\nforwards.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Duplicated history entires will be skipped.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Entries are accepted as soon as any button is pressed that doesn't correspond\nwith the reverse search. Cancelling is possible by pressing escape or\n<ctrl> + C.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Changing the direction immediately searches for the next entry in the expected\ndirection from the current position on.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The REPL supports bi-directional reverse-i-search similar to ZSH. It is\ntriggered with <ctrl> + R to search backward and <ctrl> + S to search\nforward.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Duplicated history entires will be skipped.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Entries are accepted as soon as any button is pressed that doesn't correspond\nwith the reverse search. Cancelling is possible by pressing escape or\n<ctrl> + C.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Changing the direction immediately searches for the next entry in the expected\ndirection from the current position on.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "Reverse-i-search" }, { - "textRaw": "Custom Evaluation Functions", + "textRaw": "Custom evaluation functions", "name": "custom_evaluation_functions", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When a new repl.REPLServer is created, a custom evaluation function may be\nprovided. This can be used, for instance, to implement fully customized REPL\napplications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following illustrates a hypothetical example of a REPL that performs\ntranslation of text from one language to another:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const repl = require('repl');\nconst { Translator } = require('translator');\n\nconst myTranslator = new Translator('en', 'fr');\n\nfunction myEval(cmd, context, filename, callback) {\n  callback(null, myTranslator.translate(cmd));\n}\n\nrepl.start({ prompt: '> ', eval: myEval });\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { - "textRaw": "Recoverable Errors", + "textRaw": "Recoverable errors", "name": "recoverable_errors", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    As a user is typing input into the REPL prompt, pressing the <enter> key will\nsend the current line of input to the eval function. In order to support\nmulti-line input, the eval function can return an instance of repl.Recoverable\nto the provided callback function:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    function myEval(cmd, context, filename, callback) {\n  let result;\n  try {\n    result = vm.runInThisContext(cmd);\n  } catch (e) {\n    if (isRecoverableError(e)) {\n      return callback(new repl.Recoverable(e));\n    }\n  }\n  callback(null, result);\n}\n\nfunction isRecoverableError(error) {\n  if (error.name === 'SyntaxError') {\n    return /^(Unexpected end of input|Unexpected token)/.test(error.message);\n  }\n  return false;\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Recoverable Errors" + "displayName": "Recoverable errors" } ], "type": "module", - "displayName": "Custom Evaluation Functions" + "displayName": "Custom evaluation functions" }, { - "textRaw": "Customizing REPL Output", + "textRaw": "Customizing REPL output", "name": "customizing_repl_output", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    By default, repl.REPLServer instances format output using the\nutil.inspect() method before writing the output to the provided Writable\nstream (process.stdout by default). The showProxy inspection option is set\nto true by default and the colors option is set to true depending on the\nREPL's useColors option.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The useColors boolean option can be specified at construction to instruct the\ndefault writer to use ANSI style codes to colorize the output from the\nutil.inspect() method.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the REPL is run as standalone program, it is also possible to change the\nREPL's inspection defaults from inside the REPL by using the\ninspect.replDefaults property which mirrors the defaultOptions from\nutil.inspect().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    > util.inspect.replDefaults.compact = false;\nfalse\n> [1]\n[\n  1\n]\n>\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    To fully customize the output of a repl.REPLServer instance pass in a new\nfunction for the writer option on construction. The following example, for\ninstance, simply converts any input text to upper case:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const repl = require('repl');\n\nconst r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter });\n\nfunction myEval(cmd, context, filename, callback) {\n  callback(null, cmd);\n}\n\nfunction myWriter(output) {\n  return output.toUpperCase();\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Customizing REPL Output" + "displayName": "Customizing REPL output" } ], "type": "module", - "displayName": "Design and Features" + "displayName": "Design and features" }, { "textRaw": "The Node.js REPL", @@ -137,18 +137,18 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js itself uses the repl module to provide its own interactive interface\nfor executing JavaScript. This can be used by executing the Node.js binary\nwithout passing any arguments (or by passing the -i argument):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $ node\n> const a = [1, 2, 3];\nundefined\n> a\n[ 1, 2, 3 ]\n> a.forEach((v) => {\n...   console.log(v);\n...   });\n1\n2\n3\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { - "textRaw": "Environment Variable Options", + "textRaw": "Environment variable options", "name": "environment_variable_options", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Various behaviors of the Node.js REPL can be customized using the following\nenvironment variables:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • NODE_REPL_HISTORY: When a valid path is given, persistent REPL history\nwill be saved to the specified file rather than .node_repl_history in the\nuser's home directory. Setting this value to '' (an empty string) will\ndisable persistent REPL history. Whitespace will be trimmed from the value.\nOn Windows platforms environment variables with empty values are invalid so\nset this variable to one or more spaces to disable persistent REPL history.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • NODE_REPL_HISTORY_SIZE: Controls how many lines of history will be\npersisted if history is available. Must be a positive number.\nDefault: 1000.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • NODE_REPL_MODE: May be either 'sloppy' or 'strict'. Default:\n'sloppy', which will allow non-strict mode code to be run.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Environment Variable Options" + "displayName": "Environment variable options" }, { - "textRaw": "Persistent History", + "textRaw": "Persistent history", "name": "persistent_history", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    By default, the Node.js REPL will persist history between node REPL sessions\nby saving inputs to a .node_repl_history file located in the user's home\ndirectory. This can be disabled by setting the environment variable\nNODE_REPL_HISTORY=''.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Persistent History" + "displayName": "Persistent history" }, { "textRaw": "Using the Node.js REPL with advanced line-editors", @@ -160,7 +160,7 @@ { "textRaw": "Starting multiple REPL instances against a single running instance", "name": "starting_multiple_repl_instances_against_a_single_running_instance", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    It is possible to create and run multiple REPL instances against a single\nrunning instance of Node.js that share a single global object but have\nseparate I/O interfaces.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following example, for instance, provides separate REPLs on stdin, a Unix\nsocket, and a TCP socket:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const net = require('net');\nconst repl = require('repl');\nlet connections = 0;\n\nrepl.start({\n  prompt: 'Node.js via stdin> ',\n  input: process.stdin,\n  output: process.stdout\n});\n\nnet.createServer((socket) => {\n  connections += 1;\n  repl.start({\n    prompt: 'Node.js via Unix socket> ',\n    input: socket,\n    output: socket\n  }).on('exit', () => {\n    socket.end();\n  });\n}).listen('/tmp/node-repl-sock');\n\nnet.createServer((socket) => {\n  connections += 1;\n  repl.start({\n    prompt: 'Node.js via TCP socket> ',\n    input: socket,\n    output: socket\n  }).on('exit', () => {\n    socket.end();\n  });\n}).listen(5001);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Running this application from the command line will start a REPL on stdin.\nOther REPL clients may connect through the Unix socket or TCP socket. telnet,\nfor instance, is useful for connecting to TCP sockets, while socat can be used\nto connect to both Unix and TCP sockets.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    By starting a REPL from a Unix socket-based server instead of stdin, it is\npossible to connect to a long-running Node.js process without restarting it.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For an example of running a \"full-featured\" (terminal) REPL over\na net.Server and net.Socket instance, see:\nhttps://gist.github.com/TooTallNate/2209310.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For an example of running a REPL instance over curl(1), see:\nhttps://gist.github.com/TooTallNate/2053342.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    It is possible to create and run multiple REPL instances against a single\nrunning instance of Node.js that share a single global object but have\nseparate I/O interfaces.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following example, for instance, provides separate REPLs on stdin, a Unix\nsocket, and a TCP socket:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const net = require('net');\nconst repl = require('repl');\nlet connections = 0;\n\nrepl.start({\n  prompt: 'Node.js via stdin> ',\n  input: process.stdin,\n  output: process.stdout\n});\n\nnet.createServer((socket) => {\n  connections += 1;\n  repl.start({\n    prompt: 'Node.js via Unix socket> ',\n    input: socket,\n    output: socket\n  }).on('exit', () => {\n    socket.end();\n  });\n}).listen('/tmp/node-repl-sock');\n\nnet.createServer((socket) => {\n  connections += 1;\n  repl.start({\n    prompt: 'Node.js via TCP socket> ',\n    input: socket,\n    output: socket\n  }).on('exit', () => {\n    socket.end();\n  });\n}).listen(5001);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Running this application from the command line will start a REPL on stdin.\nOther REPL clients may connect through the Unix socket or TCP socket. telnet,\nfor instance, is useful for connecting to TCP sockets, while socat can be used\nto connect to both Unix and TCP sockets.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    By starting a REPL from a Unix socket-based server instead of stdin, it is\npossible to connect to a long-running Node.js process without restarting it.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For an example of running a \"full-featured\" (terminal) REPL over\na net.Server and net.Socket instance, see:\nhttps://gist.github.com/TooTallNate/2209310.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For an example of running a REPL instance over curl(1), see:\nhttps://gist.github.com/TooTallNate/2053342.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "Starting multiple REPL instances against a single running instance" } @@ -391,6 +391,11 @@ "description": "The `REPL_MAGIC_MODE` `replMode` was removed." }, { + "version": "v6.3.0", + "pr-url": "https://github.com/nodejs/node/pull/6635", + "description": "The `breakEvalOnSigint` option is supported now." + }, + { "version": "v5.8.0", "pr-url": "https://github.com/nodejs/node/pull/5388", "description": "The `options` parameter is optional now." diff -Nru nodejs-mozilla-12.18.1/doc/api/repl.md nodejs-mozilla-12.22.12/doc/api/repl.md --- nodejs-mozilla-12.18.1/doc/api/repl.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/repl.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `repl` module provides a Read-Eval-Print-Loop (REPL) implementation that is available both as a standalone program or includible in other applications. It can be accessed using: @@ -12,7 +14,7 @@ const repl = require('repl'); ``` -## Design and Features +## Design and features The `repl` module exports the [`repl.REPLServer`][] class. While running, instances of [`repl.REPLServer`][] will accept individual lines of user input, @@ -28,7 +30,7 @@ ANSI styles and Emacs-style line editing automatically fall back to a limited feature set. -### Commands and Special Keys +### Commands and special keys The following special commands are supported by all REPL instances: @@ -36,7 +38,7 @@ the `.break` command (or pressing the `-C` key combination) will abort further input or processing of that expression. * `.clear`: Resets the REPL `context` to an empty object and clears any - multi-line expression currently being input. + multi-line expression being input. * `.exit`: Close the I/O stream, causing the REPL to exit. * `.help`: Show this list of special commands. * `.save`: Save the current REPL session to a file: @@ -72,14 +74,14 @@ For key bindings related to the reverse-i-search, see [`reverse-i-search`][]. For all other key bindings, see [TTY keybindings][]. -### Default Evaluation +### Default evaluation By default, all instances of [`repl.REPLServer`][] use an evaluation function that evaluates JavaScript expressions and provides access to Node.js built-in modules. This default behavior can be overridden by passing in an alternative evaluation function when the [`repl.REPLServer`][] instance is created. -#### JavaScript Expressions +#### JavaScript expressions The default evaluator supports direct evaluation of JavaScript expressions: @@ -96,7 +98,7 @@ either implicitly or using the `const`, `let`, or `var` keywords are declared at the global scope. -#### Global and Local Scope +#### Global and local scope The default evaluator provides access to any variables that exist in the global scope. It is possible to expose a variable to the REPL explicitly by assigning @@ -132,7 +134,7 @@ }); ``` -#### Accessing Core Node.js Modules +#### Accessing core Node.js modules The default evaluator will automatically load Node.js core modules into the REPL environment when used. For instance, unless otherwise declared as a @@ -143,7 +145,7 @@ > fs.createReadStream('./some/file'); ``` -#### Global Uncaught Exceptions +#### Global uncaught exceptions The REPL supports bi-directional reverse-i-search similar to [ZSH][]. It is -triggered with ` + R` to search backwards and ` + S` to search -forwards. +triggered with ` + R` to search backward and ` + S` to search +forward. Duplicated history entires will be skipped. @@ -256,7 +258,7 @@ Changing the direction immediately searches for the next entry in the expected direction from the current position on. -### Custom Evaluation Functions +### Custom evaluation functions When a new [`repl.REPLServer`][] is created, a custom evaluation function may be provided. This can be used, for instance, to implement fully customized REPL @@ -278,7 +280,7 @@ repl.start({ prompt: '> ', eval: myEval }); ``` -#### Recoverable Errors +#### Recoverable errors As a user is typing input into the REPL prompt, pressing the `` key will send the current line of input to the `eval` function. In order to support @@ -306,7 +308,7 @@ } ``` -### Customizing REPL Output +### Customizing REPL output By default, [`repl.REPLServer`][] instances format output using the [`util.inspect()`][] method before writing the output to the provided `Writable` @@ -554,6 +556,9 @@ - version: v10.0.0 pr-url: https://github.com/nodejs/node/pull/19187 description: The `REPL_MAGIC_MODE` `replMode` was removed. + - version: v6.3.0 + pr-url: https://github.com/nodejs/node/pull/6635 + description: The `breakEvalOnSigint` option is supported now. - version: v5.8.0 pr-url: https://github.com/nodejs/node/pull/5388 description: The `options` parameter is optional now. @@ -636,7 +641,7 @@ 3 ``` -### Environment Variable Options +### Environment variable options Various behaviors of the Node.js REPL can be customized using the following environment variables: @@ -653,7 +658,7 @@ * `NODE_REPL_MODE`: May be either `'sloppy'` or `'strict'`. **Default:** `'sloppy'`, which will allow non-strict mode code to be run. -### Persistent History +### Persistent history By default, the Node.js REPL will persist history between `node` REPL sessions by saving inputs to a `.node_repl_history` file located in the user's home @@ -727,21 +732,21 @@ a `net.Server` and `net.Socket` instance, see: . -For an example of running a REPL instance over [curl(1)][], see: +For an example of running a REPL instance over [`curl(1)`][], see: . +[TTY keybindings]: readline.html#readline_tty_keybindings [ZSH]: https://en.wikipedia.org/wiki/Z_shell [`'uncaughtException'`]: process.html#process_event_uncaughtexception [`--experimental-repl-await`]: cli.html#cli_experimental_repl_await [`ERR_DOMAIN_CANNOT_SET_UNCAUGHT_EXCEPTION_CAPTURE`]: errors.html#errors_err_domain_cannot_set_uncaught_exception_capture [`ERR_INVALID_REPL_INPUT`]: errors.html#errors_err_invalid_repl_input +[`curl(1)`]: https://curl.haxx.se/docs/manpage.html [`domain`]: domain.html [`process.setUncaughtExceptionCaptureCallback()`]: process.html#process_process_setuncaughtexceptioncapturecallback_fn [`readline.InterfaceCompleter`]: readline.html#readline_use_of_the_completer_function [`repl.ReplServer`]: #repl_class_replserver [`repl.start()`]: #repl_repl_start_options -[`util.inspect()`]: util.html#util_util_inspect_object_options [`reverse-i-search`]: #repl_reverse_i_search -[TTY keybindings]: readline.html#readline_tty_keybindings -[curl(1)]: https://curl.haxx.se/docs/manpage.html +[`util.inspect()`]: util.html#util_util_inspect_object_options [stream]: stream.html diff -Nru nodejs-mozilla-12.18.1/doc/api/report.html nodejs-mozilla-12.22.12/doc/api/report.html --- nodejs-mozilla-12.18.1/doc/api/report.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/report.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Diagnostic Report | Node.js v12.18.1 Documentation + + Diagnostic report | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,7 +101,10 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -112,19 +119,18 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Diagnostic Report#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Diagnostic report#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -139,377 +145,375 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        A complete example report that was generated on an uncaught exception is provided below for reference.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "header": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "reportVersion": 1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "event": "exception",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "trigger": "Exception",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "filename": "report.20181221.005011.8974.0.001.json",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "dumpEventTime": "2018-12-21T00:50:11Z",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "dumpEventTimeStamp": "1545371411331",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "processId": 8974,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "cwd": "/home/nodeuser/project/node",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "commandLine": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "/home/nodeuser/project/node/out/Release/node",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "--report-uncaught-exception",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "/home/nodeuser/project/node/test/report/test-exception.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "child"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "header": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "reportVersion": 1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "event": "exception",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "trigger": "Exception",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "filename": "report.20181221.005011.8974.0.001.json",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "dumpEventTime": "2018-12-21T00:50:11Z",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "dumpEventTimeStamp": "1545371411331",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "processId": 8974,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "cwd": "/home/nodeuser/project/node",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "commandLine": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "/home/nodeuser/project/node/out/Release/node",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "--report-uncaught-exception",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "/home/nodeuser/project/node/test/report/test-exception.js",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "child"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "nodejsVersion": "v12.0.0-pre",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "glibcVersionRuntime": "2.17",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "glibcVersionCompiler": "2.17",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "wordSize": "64 bit",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "arch": "x64",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "platform": "linux",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "componentVersions": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "node": "12.0.0-pre",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "v8": "7.1.302.28-node.5",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "uv": "1.24.1",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "zlib": "1.2.11",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "ares": "1.15.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "modules": "68",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "nghttp2": "1.34.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "napi": "3",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "llhttp": "1.0.1",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "http_parser": "2.8.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "openssl": "1.1.0j"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "release": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "name": "node"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "osName": "Linux",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "osRelease": "3.10.0-862.el7.x86_64",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "osVersion": "#1 SMP Wed Mar 21 18:14:51 EDT 2018",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "osMachine": "x86_64",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "cpus": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "nodejsVersion": "v12.0.0-pre",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "glibcVersionRuntime": "2.17",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "glibcVersionCompiler": "2.17",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "wordSize": "64 bit",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "arch": "x64",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "platform": "linux",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "componentVersions": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "node": "12.0.0-pre",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "v8": "7.1.302.28-node.5",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "uv": "1.24.1",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "zlib": "1.2.11",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "ares": "1.15.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "modules": "68",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "nghttp2": "1.34.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "napi": "3",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "llhttp": "1.0.1",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "http_parser": "2.8.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "openssl": "1.1.0j"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "release": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "name": "node"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "osName": "Linux",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "osRelease": "3.10.0-862.el7.x86_64",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "osVersion": "#1 SMP Wed Mar 21 18:14:51 EDT 2018",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "osMachine": "x86_64",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "cpus": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "speed": 2700,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "user": 88902660,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "nice": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "sys": 50902570,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "idle": 241732220,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "irq": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "speed": 2700,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "user": 88902660,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "nice": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "sys": 50902570,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "idle": 241732220,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "irq": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "speed": 2700,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "user": 88902660,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "nice": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "sys": 50902570,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "idle": 241732220,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "irq": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "speed": 2700,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "user": 88902660,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "nice": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "sys": 50902570,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "idle": 241732220,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "irq": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "networkInterfaces": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "networkInterfaces": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "name": "en0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "internal": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "mac": "13:10:de:ad:be:ef",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "address": "10.0.0.37",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "netmask": "255.255.255.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "family": "IPv4"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "name": "en0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "internal": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "mac": "13:10:de:ad:be:ef",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "address": "10.0.0.37",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "netmask": "255.255.255.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "family": "IPv4"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "host": "test_machine"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "host": "test_machine"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "javascriptStack": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "message": "Error: *** test-exception.js: throwing uncaught Error",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "stack": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at myException (/home/nodeuser/project/node/test/report/test-exception.js:9:11)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at Object.<anonymous> (/home/nodeuser/project/node/test/report/test-exception.js:12:3)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at Module._compile (internal/modules/cjs/loader.js:718:30)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at Object.Module._extensions..js (internal/modules/cjs/loader.js:729:10)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at Module.load (internal/modules/cjs/loader.js:617:32)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at tryModuleLoad (internal/modules/cjs/loader.js:560:12)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at Function.Module._load (internal/modules/cjs/loader.js:552:3)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at Function.Module.runMain (internal/modules/cjs/loader.js:771:12)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "at executeUserCode (internal/bootstrap/node.js:332:15)"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "javascriptStack": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "message": "Error: *** test-exception.js: throwing uncaught Error",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "stack": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at myException (/home/nodeuser/project/node/test/report/test-exception.js:9:11)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at Object.<anonymous> (/home/nodeuser/project/node/test/report/test-exception.js:12:3)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at Module._compile (internal/modules/cjs/loader.js:718:30)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at Object.Module._extensions..js (internal/modules/cjs/loader.js:729:10)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at Module.load (internal/modules/cjs/loader.js:617:32)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at tryModuleLoad (internal/modules/cjs/loader.js:560:12)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at Function.Module._load (internal/modules/cjs/loader.js:552:3)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at Function.Module.runMain (internal/modules/cjs/loader.js:771:12)",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "at executeUserCode (internal/bootstrap/node.js:332:15)"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "nativeStack": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "nativeStack": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "pc": "0x000055b57f07a9ef",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "symbol": "report::GetNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, v8::Local<v8::String>, std::ostream&) [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "pc": "0x000055b57f07a9ef",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "symbol": "report::GetNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, v8::Local<v8::String>, std::ostream&) [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "pc": "0x000055b57f07cf03",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "symbol": "report::GetReport(v8::FunctionCallbackInfo<v8::Value> const&) [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "pc": "0x000055b57f07cf03",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "symbol": "report::GetReport(v8::FunctionCallbackInfo<v8::Value> const&) [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "pc": "0x000055b57f1bccfd",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "symbol": " [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "pc": "0x000055b57f1bccfd",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "symbol": " [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "pc": "0x000055b57f1be048",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "symbol": "v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "pc": "0x000055b57f1be048",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "symbol": "v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "pc": "0x000055b57feeda0e",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "symbol": " [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "pc": "0x000055b57feeda0e",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "symbol": " [./node]"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "javascriptHeap": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "totalMemory": 6127616,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "totalCommittedMemory": 4357352,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "usedMemory": 3221136,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "availableMemory": 1521370240,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "memoryLimit": 1526909922,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "heapSpaces": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "read_only_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "memorySize": 524288,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "committedMemory": 39208,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "capacity": 515584,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "used": 30504,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "available": 485080
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "javascriptHeap": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "totalMemory": 6127616,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "totalCommittedMemory": 4357352,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "usedMemory": 3221136,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "availableMemory": 1521370240,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "memoryLimit": 1526909922,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "heapSpaces": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "read_only_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "memorySize": 524288,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "committedMemory": 39208,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "capacity": 515584,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "used": 30504,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "available": 485080
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "new_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "memorySize": 2097152,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "committedMemory": 2019312,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "capacity": 1031168,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "used": 985496,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "available": 45672
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "new_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "memorySize": 2097152,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "committedMemory": 2019312,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "capacity": 1031168,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "used": 985496,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "available": 45672
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "old_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "memorySize": 2273280,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "committedMemory": 1769008,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "capacity": 1974640,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "used": 1725488,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "available": 249152
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "old_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "memorySize": 2273280,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "committedMemory": 1769008,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "capacity": 1974640,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "used": 1725488,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "available": 249152
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "code_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "memorySize": 696320,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "committedMemory": 184896,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "capacity": 152128,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "used": 152128,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "available": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "code_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "memorySize": 696320,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "committedMemory": 184896,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "capacity": 152128,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "used": 152128,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "available": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "map_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "memorySize": 536576,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "committedMemory": 344928,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "capacity": 327520,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "used": 327520,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "available": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "map_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "memorySize": 536576,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "committedMemory": 344928,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "capacity": 327520,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "used": 327520,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "available": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "large_object_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "memorySize": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "committedMemory": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "capacity": 1520590336,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "used": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "available": 1520590336
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "large_object_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "memorySize": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "committedMemory": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "capacity": 1520590336,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "used": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "available": 1520590336
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "new_large_object_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "memorySize": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "committedMemory": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "capacity": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "used": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -        "available": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "new_large_object_space": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "memorySize": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "committedMemory": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "capacity": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "used": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +        "available": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "resourceUsage": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "userCpuSeconds": 0.069595,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "kernelCpuSeconds": 0.019163,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "cpuConsumptionPercent": 0.000000,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "maxRss": 18079744,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "pageFaults": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "IORequired": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "IONotRequired": 4610
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "fsActivity": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "reads": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "writes": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "resourceUsage": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "userCpuSeconds": 0.069595,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "kernelCpuSeconds": 0.019163,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "cpuConsumptionPercent": 0.000000,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "maxRss": 18079744,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "pageFaults": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "IORequired": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "IONotRequired": 4610
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "fsActivity": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "reads": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "writes": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "uvthreadResourceUsage": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "userCpuSeconds": 0.068457,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "kernelCpuSeconds": 0.019127,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "cpuConsumptionPercent": 0.000000,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "fsActivity": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "reads": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "writes": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "uvthreadResourceUsage": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "userCpuSeconds": 0.068457,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "kernelCpuSeconds": 0.019127,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "cpuConsumptionPercent": 0.000000,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "fsActivity": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "reads": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "writes": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "libuv": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "libuv": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "async",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x0000000102910900",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "details": ""
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "async",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x0000000102910900",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "details": ""
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "timer",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x00007fff5fbfeab0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "repeat": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "firesInMsFromNow": 94403548320796,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "expired": true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "timer",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x00007fff5fbfeab0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "repeat": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "firesInMsFromNow": 94403548320796,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "expired": true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "check",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x00007fff5fbfeb48"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "check",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x00007fff5fbfeb48"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "idle",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x00007fff5fbfebc0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "idle",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x00007fff5fbfebc0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "prepare",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x00007fff5fbfec38"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "prepare",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x00007fff5fbfec38"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "check",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x00007fff5fbfecb0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "check",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x00007fff5fbfecb0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "async",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x000000010188f2e0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "async",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x000000010188f2e0"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "tty",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x000055b581db0e18",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "width": 204,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "height": 55,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "fd": 17,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "writeQueueSize": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "readable": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "writable": true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "tty",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x000055b581db0e18",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "width": 204,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "height": 55,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "fd": 17,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "writeQueueSize": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "readable": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "writable": true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "signal",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x000055b581d80010",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "signum": 28,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "signal": "SIGWINCH"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "signal",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": false,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x000055b581d80010",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "signum": 28,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "signal": "SIGWINCH"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "tty",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_referenced": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x000055b581df59f8",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "width": 204,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "height": 55,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "fd": 19,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "writeQueueSize": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "readable": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "writable": true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "tty",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_referenced": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x000055b581df59f8",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "width": 204,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "height": 55,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "fd": 19,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "writeQueueSize": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "readable": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "writable": true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "type": "loop",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "address": "0x000055fc7b2cb180"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "type": "loop",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "is_active": true,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "address": "0x000055fc7b2cb180"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "workers": [],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "environmentVariables": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "REMOTEHOST": "REMOVED",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "MANPATH": "/opt/rh/devtoolset-3/root/usr/share/man:",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "XDG_SESSION_ID": "66126",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "HOSTNAME": "test_machine",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "HOST": "test_machine",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "TERM": "xterm-256color",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "SHELL": "/bin/csh",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "SSH_CLIENT": "REMOVED",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "PERL5LIB": "/opt/rh/devtoolset-3/root//usr/lib64/perl5/vendor_perl:/opt/rh/devtoolset-3/root/usr/lib/perl5:/opt/rh/devtoolset-3/root//usr/share/perl5/vendor_perl",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "OLDPWD": "/home/nodeuser/project/node/src",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "JAVACONFDIRS": "/opt/rh/devtoolset-3/root/etc/java:/etc/java",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "SSH_TTY": "/dev/pts/0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "PCP_DIR": "/opt/rh/devtoolset-3/root",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "GROUP": "normaluser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "USER": "nodeuser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "LD_LIBRARY_PATH": "/opt/rh/devtoolset-3/root/usr/lib64:/opt/rh/devtoolset-3/root/usr/lib",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "HOSTTYPE": "x86_64-linux",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "XDG_CONFIG_DIRS": "/opt/rh/devtoolset-3/root/etc/xdg:/etc/xdg",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "MAIL": "/var/spool/mail/nodeuser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "PATH": "/home/nodeuser/project/node:/opt/rh/devtoolset-3/root/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "PWD": "/home/nodeuser/project/node",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "LANG": "en_US.UTF-8",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "PS1": "\\u@\\h : \\[\\e[31m\\]\\w\\[\\e[m\\] >  ",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "SHLVL": "2",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "HOME": "/home/nodeuser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "OSTYPE": "linux",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "VENDOR": "unknown",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "PYTHONPATH": "/opt/rh/devtoolset-3/root/usr/lib64/python2.7/site-packages:/opt/rh/devtoolset-3/root/usr/lib/python2.7/site-packages",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "MACHTYPE": "x86_64",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "LOGNAME": "nodeuser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "XDG_DATA_DIRS": "/opt/rh/devtoolset-3/root/usr/share:/usr/local/share:/usr/share",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "LESSOPEN": "||/usr/bin/lesspipe.sh %s",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "INFOPATH": "/opt/rh/devtoolset-3/root/usr/share/info",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "XDG_RUNTIME_DIR": "/run/user/50141",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "_": "./node"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "workers": [],
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "environmentVariables": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "REMOTEHOST": "REMOVED",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "MANPATH": "/opt/rh/devtoolset-3/root/usr/share/man:",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "XDG_SESSION_ID": "66126",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "HOSTNAME": "test_machine",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "HOST": "test_machine",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "TERM": "xterm-256color",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "SHELL": "/bin/csh",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "SSH_CLIENT": "REMOVED",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "PERL5LIB": "/opt/rh/devtoolset-3/root//usr/lib64/perl5/vendor_perl:/opt/rh/devtoolset-3/root/usr/lib/perl5:/opt/rh/devtoolset-3/root//usr/share/perl5/vendor_perl",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "OLDPWD": "/home/nodeuser/project/node/src",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "JAVACONFDIRS": "/opt/rh/devtoolset-3/root/etc/java:/etc/java",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "SSH_TTY": "/dev/pts/0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "PCP_DIR": "/opt/rh/devtoolset-3/root",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "GROUP": "normaluser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "USER": "nodeuser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "LD_LIBRARY_PATH": "/opt/rh/devtoolset-3/root/usr/lib64:/opt/rh/devtoolset-3/root/usr/lib",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "HOSTTYPE": "x86_64-linux",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "XDG_CONFIG_DIRS": "/opt/rh/devtoolset-3/root/etc/xdg:/etc/xdg",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "MAIL": "/var/spool/mail/nodeuser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "PATH": "/home/nodeuser/project/node:/opt/rh/devtoolset-3/root/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "PWD": "/home/nodeuser/project/node",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "LANG": "en_US.UTF-8",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "PS1": "\\u@\\h : \\[\\e[31m\\]\\w\\[\\e[m\\] >  ",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "SHLVL": "2",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "HOME": "/home/nodeuser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "OSTYPE": "linux",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "VENDOR": "unknown",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "PYTHONPATH": "/opt/rh/devtoolset-3/root/usr/lib64/python2.7/site-packages:/opt/rh/devtoolset-3/root/usr/lib/python2.7/site-packages",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "MACHTYPE": "x86_64",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "LOGNAME": "nodeuser",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "XDG_DATA_DIRS": "/opt/rh/devtoolset-3/root/usr/share:/usr/local/share:/usr/share",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "LESSOPEN": "||/usr/bin/lesspipe.sh %s",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "INFOPATH": "/opt/rh/devtoolset-3/root/usr/share/info",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "XDG_RUNTIME_DIR": "/run/user/50141",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "_": "./node"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "userLimits": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "core_file_size_blocks": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "data_seg_size_kbytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "file_size_blocks": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "max_locked_memory_bytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": 65536
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "max_memory_size_kbytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "open_files": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": 4096
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "stack_size_bytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "cpu_time_seconds": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "max_user_processes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": 4127290
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "virtual_memory_kbytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "userLimits": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "core_file_size_blocks": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "data_seg_size_kbytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "file_size_blocks": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "max_locked_memory_bytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": 65536
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "max_memory_size_kbytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "open_files": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": 4096
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "stack_size_bytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "cpu_time_seconds": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "max_user_processes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": 4127290
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "virtual_memory_kbytes": {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "soft": "unlimited",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +      "hard": "unlimited"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  "sharedObjects": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "/lib64/libdl.so.2",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "/lib64/librt.so.1",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "/lib64/libstdc++.so.6",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "/lib64/libm.so.6",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "/lib64/libgcc_s.so.1",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "/lib64/libpthread.so.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "/lib64/libc.so.6",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -    "/lib64/ld-linux-x86-64.so.2"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  "sharedObjects": [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "/lib64/libdl.so.2",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "/lib64/librt.so.1",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "/lib64/libstdc++.so.6",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "/lib64/libm.so.6",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "/lib64/libgcc_s.so.1",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "/lib64/libpthread.so.0",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "/lib64/libc.so.6",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +    "/lib64/ld-linux-x86-64.so.2"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Usage#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        node --report-uncaught-exception --report-on-signal \
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ---report-on-fatalerror app.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +--report-on-fatalerror app.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • --report-uncaught-exception Enables report to be generated on @@ -557,47 +561,41 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        A report can also be triggered via an API call from a JavaScript application:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        process.report.writeReport();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        process.report.writeReport();

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        This function takes an optional additional argument filename, which is the name of a file into which the report is written.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        process.report.writeReport('./foo.json');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        process.report.writeReport('./foo.json');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        This function takes an optional additional argument err which is an Error object that will be used as the context for the JavaScript stack printed in the report. When using report to handle errors in a callback or an exception handler, this allows the report to include the location of the original error as well as where it was handled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        try {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  process.chdir('/non-existent-path');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -} catch (err) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        try {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  process.chdir('/non-existent-path');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +} catch (err) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           process.report.writeReport(err);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Any other code
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Any other code

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        If both filename and error object are passed to writeReport() the error object must be the second parameter.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        try {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  process.chdir('/non-existent-path');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -} catch (err) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        try {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +  process.chdir('/non-existent-path');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +} catch (err) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           process.report.writeReport(filename, err);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Any other code
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Any other code

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The content of the diagnostic report can be returned as a JavaScript Object via an API call from a JavaScript application:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const report = process.report.getReport();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -console.log(typeof report === 'object'); // true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const report = process.report.getReport();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +console.log(typeof report === 'object'); // true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Similar to process.report.writeReport() output
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -console.log(JSON.stringify(report, null, 2));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Similar to process.report.writeReport() output +console.log(JSON.stringify(report, null, 2));

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        This function takes an optional additional argument err, which is an Error object that will be used as the context for the JavaScript stack printed in the report.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const report = process.report.getReport(new Error('custom error'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -console.log(typeof report === 'object'); // true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const report = process.report.getReport(new Error('custom error'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +console.log(typeof report === 'object'); // true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The API versions are useful when inspecting the runtime state from within the application, in expectation of self-adjusting the resource consumption, load balancing, monitoring etc.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -607,12 +605,11 @@ containing libuv handle information and an OS platform information section showing CPU and memory usage and system limits. An example report can be triggered using the Node.js REPL:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $ node
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -> process.report.writeReport();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        $ node
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +> process.report.writeReport();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Writing Node.js report to file: report.20181126.091102.8480.0.001.json
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         Node.js report completed
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ->
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        When a report is written, start and end messages are issued to stderr and the filename of the report is returned to the caller. The default filename includes the date, time, PID and a sequence number. The sequence number helps @@ -639,32 +636,30 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        directory specifies the filesystem directory where the report will be written. URLs are not supported. Defaults to the current working directory of the Node.js process.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        // Trigger report only on uncaught exceptions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnFatalError = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnSignal = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnUncaughtException = true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        // Trigger report only on uncaught exceptions.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +process.report.reportOnFatalError = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +process.report.reportOnSignal = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +process.report.reportOnUncaughtException = true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Trigger report for both internal errors as well as external signal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnFatalError = true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnSignal = true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnUncaughtException = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Trigger report for both internal errors as well as external signal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +process.report.reportOnFatalError = true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +process.report.reportOnSignal = true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +process.report.reportOnUncaughtException = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Change the default signal to 'SIGQUIT' and enable it.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnFatalError = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnUncaughtException = false;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.reportOnSignal = true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -process.report.signal = 'SIGQUIT';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Change the default signal to 'SIGQUIT' and enable it. +process.report.reportOnFatalError = false; +process.report.reportOnUncaughtException = false; +process.report.reportOnSignal = true; +process.report.signal = 'SIGQUIT';

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Configuration on module initialization is also available via environment variables:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NODE_OPTIONS="--report-uncaught-exception \
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        NODE_OPTIONS="--report-uncaught-exception \
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           --report-on-fatalerror --report-on-signal \
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           --report-signal=SIGUSR2  --report-filename=./report.json \
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  --report-directory=/home/nodeuser"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + --report-directory=/home/nodeuser"

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Specific API documentation can be found under process API documentation section.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Interaction with Workers#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Interaction with workers#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            18. @@ -121,11 +128,9 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              String Decoder#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              String decoder#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Source Code: lib/string_decoder.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The string_decoder module provides an API for decoding Buffer objects into strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 characters. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { StringDecoder } = require('string_decoder');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { StringDecoder } = require('string_decoder');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The following example shows the basic use of the StringDecoder class.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { StringDecoder } = require('string_decoder');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const decoder = new StringDecoder('utf8');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { StringDecoder } = require('string_decoder');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const decoder = new StringDecoder('utf8');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const cent = Buffer.from([0xC2, 0xA2]);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(decoder.write(cent));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const cent = Buffer.from([0xC2, 0xA2]);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(decoder.write(cent));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const euro = Buffer.from([0xE2, 0x82, 0xAC]);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(decoder.write(euro));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const euro = Buffer.from([0xE2, 0x82, 0xAC]); +console.log(decoder.write(euro));

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              When a Buffer instance is written to the StringDecoder instance, an internal buffer is used to ensure that the decoded string does not contain any incomplete multibyte characters. These are held in the buffer until the next call to stringDecoder.write() or until stringDecoder.end() is called.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              In the following example, the three UTF-8 encoded bytes of the European Euro symbol () are written over three separate operations:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { StringDecoder } = require('string_decoder');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const decoder = new StringDecoder('utf8');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { StringDecoder } = require('string_decoder');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const decoder = new StringDecoder('utf8');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -decoder.write(Buffer.from([0xE2]));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -decoder.write(Buffer.from([0x82]));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(decoder.end(Buffer.from([0xAC])));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +decoder.write(Buffer.from([0xE2])); +decoder.write(Buffer.from([0x82])); +console.log(decoder.end(Buffer.from([0xAC])));

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Class: StringDecoder#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              new StringDecoder([encoding])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/string_decoder.json nodejs-mozilla-12.22.12/doc/api/string_decoder.json --- nodejs-mozilla-12.18.1/doc/api/string_decoder.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/string_decoder.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,12 +3,12 @@ "source": "doc/api/string_decoder.md", "modules": [ { - "textRaw": "String Decoder", + "textRaw": "String decoder", "name": "string_decoder", "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The string_decoder module provides an API for decoding Buffer objects into\nstrings in a manner that preserves encoded multi-byte UTF-8 and UTF-16\ncharacters. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const { StringDecoder } = require('string_decoder');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The following example shows the basic use of the StringDecoder class.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const { StringDecoder } = require('string_decoder');\nconst decoder = new StringDecoder('utf8');\n\nconst cent = Buffer.from([0xC2, 0xA2]);\nconsole.log(decoder.write(cent));\n\nconst euro = Buffer.from([0xE2, 0x82, 0xAC]);\nconsole.log(decoder.write(euro));\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        When a Buffer instance is written to the StringDecoder instance, an\ninternal buffer is used to ensure that the decoded string does not contain\nany incomplete multibyte characters. These are held in the buffer until the\nnext call to stringDecoder.write() or until stringDecoder.end() is called.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        In the following example, the three UTF-8 encoded bytes of the European Euro\nsymbol () are written over three separate operations:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const { StringDecoder } = require('string_decoder');\nconst decoder = new StringDecoder('utf8');\n\ndecoder.write(Buffer.from([0xE2]));\ndecoder.write(Buffer.from([0x82]));\nconsole.log(decoder.end(Buffer.from([0xAC])));\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Source Code: lib/string_decoder.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The string_decoder module provides an API for decoding Buffer objects into\nstrings in a manner that preserves encoded multi-byte UTF-8 and UTF-16\ncharacters. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const { StringDecoder } = require('string_decoder');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The following example shows the basic use of the StringDecoder class.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const { StringDecoder } = require('string_decoder');\nconst decoder = new StringDecoder('utf8');\n\nconst cent = Buffer.from([0xC2, 0xA2]);\nconsole.log(decoder.write(cent));\n\nconst euro = Buffer.from([0xE2, 0x82, 0xAC]);\nconsole.log(decoder.write(euro));\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        When a Buffer instance is written to the StringDecoder instance, an\ninternal buffer is used to ensure that the decoded string does not contain\nany incomplete multibyte characters. These are held in the buffer until the\nnext call to stringDecoder.write() or until stringDecoder.end() is called.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        In the following example, the three UTF-8 encoded bytes of the European Euro\nsymbol () are written over three separate operations:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const { StringDecoder } = require('string_decoder');\nconst decoder = new StringDecoder('utf8');\n\ndecoder.write(Buffer.from([0xE2]));\ndecoder.write(Buffer.from([0x82]));\nconsole.log(decoder.end(Buffer.from([0xAC])));\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ", "classes": [ { "textRaw": "Class: `StringDecoder`", @@ -97,7 +97,7 @@ } ], "type": "module", - "displayName": "String Decoder" + "displayName": "String decoder" } ] } \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/string_decoder.md nodejs-mozilla-12.22.12/doc/api/string_decoder.md --- nodejs-mozilla-12.18.1/doc/api/string_decoder.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/string_decoder.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,9 +1,11 @@ -# String Decoder +# String decoder > Stability: 2 - Stable + + The `string_decoder` module provides an API for decoding `Buffer` objects into strings in a manner that preserves encoded multi-byte UTF-8 and UTF-16 characters. It can be accessed using: diff -Nru nodejs-mozilla-12.18.1/doc/api/synopsis.html nodejs-mozilla-12.22.12/doc/api/synopsis.html --- nodejs-mozilla-12.18.1/doc/api/synopsis.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/synopsis.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Usage & Example | Node.js v12.18.1 Documentation + + Usage and example | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            18. @@ -121,8 +128,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Usage & Example#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Usage and example#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Usage#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -150,50 +156,42 @@ for further install information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Now, create an empty project folder called projects, then navigate into it.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Linux and Mac:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              $ mkdir ~/projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -$ cd ~/projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              $ mkdir ~/projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +$ cd ~/projects

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Windows CMD:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              > mkdir %USERPROFILE%\projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -> cd %USERPROFILE%\projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              > mkdir %USERPROFILE%\projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +> cd %USERPROFILE%\projects

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Windows PowerShell:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              > mkdir $env:USERPROFILE\projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -> cd $env:USERPROFILE\projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              > mkdir $env:USERPROFILE\projects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +> cd $env:USERPROFILE\projects

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Next, create a new source file in the projects folder and call it hello-world.js.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Open hello-world.js in any preferred text editor and paste in the following content:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const http = require('http');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const http = require('http');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const hostname = '127.0.0.1';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const port = 3000;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const hostname = '127.0.0.1';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const port = 3000;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const server = http.createServer((req, res) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  res.statusCode = 200;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  res.setHeader('Content-Type', 'text/plain');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  res.end('Hello, World!\n');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const server = http.createServer((req, res) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  res.statusCode = 200;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  res.setHeader('Content-Type', 'text/plain');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  res.end('Hello, World!\n');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -server.listen(port, hostname, () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  console.log(`Server running at http://${hostname}:${port}/`);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +server.listen(port, hostname, () => { + console.log(`Server running at http://${hostname}:${port}/`); +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Save the file, go back to the terminal window, and enter the following command:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              $ node hello-world.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              $ node hello-world.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Output like this should appear in the terminal:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Server running at http://127.0.0.1:3000/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Server running at http://127.0.0.1:3000/

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Now, open any preferred web browser and visit http://127.0.0.1:3000.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If the browser displays the string Hello, World!, that indicates the server is working.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/synopsis.json nodejs-mozilla-12.22.12/doc/api/synopsis.json --- nodejs-mozilla-12.18.1/doc/api/synopsis.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/synopsis.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,8 +3,8 @@ "source": "doc/api/synopsis.md", "modules": [ { - "textRaw": "Usage & Example", - "name": "usage_&_example", + "textRaw": "Usage and example", + "name": "usage_and_example", "introduced_in": "v0.10.0", "miscs": [ { @@ -16,7 +16,7 @@ } ], "type": "module", - "displayName": "Usage & Example" + "displayName": "Usage and example" } ] } \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/synopsis.md nodejs-mozilla-12.22.12/doc/api/synopsis.md --- nodejs-mozilla-12.18.1/doc/api/synopsis.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/synopsis.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# Usage & Example +# Usage and example ## Usage diff -Nru nodejs-mozilla-12.18.1/doc/api/timers.html nodejs-mozilla-12.22.12/doc/api/timers.html --- nodejs-mozilla-12.18.1/doc/api/timers.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/timers.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Timers | Node.js v12.18.1 Documentation + + Timers | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        18. @@ -121,36 +128,32 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Timers

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Timers
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Class: Immediate

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Class: Immediate
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Class: Timeout

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Class: Timeout
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Scheduling Timers

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Scheduling timers
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Cancelling Timers

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Cancelling timers
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • clearImmediate(immediate)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • clearInterval(timeout)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -166,6 +169,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Timers#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Source Code: lib/timers.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The timer module exposes a global API for scheduling functions to be called at some future period of time. Because the timer functions are globals, there is no need to call require('timers') to use the API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                @@ -266,7 +270,20 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Calling timeout.unref() creates an internal timer that will wake the Node.js event loop. Creating too many of these can adversely impact performance of the Node.js application.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Scheduling Timers#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                timeout[Symbol.toPrimitive]()#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Returns: <integer> a number that can be used to reference this timeout
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Coerce a Timeout to a primitive. The primitive can be used to +clear the Timeout. The primitive can only be used in the +same thread where the timeout was created. Therefore, to use it +across worker_threads it must first be passed to the correct +thread. This allows enhanced compatibility with browser +setTimeout() and setInterval() implementations.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Scheduling timers#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A timer in Node.js is an internal construct that calls a given function after a certain period of time. When a timer's function is called varies depending on which method was used to create the timer and what other work the Node.js @@ -291,22 +308,21 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If callback is not a function, a TypeError will be thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                This method has a custom variant for promises that is available using util.promisify():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -const setImmediatePromise = util.promisify(setImmediate);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +const setImmediatePromise = util.promisify(setImmediate);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -setImmediatePromise('foobar').then((value) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  // value === 'foobar' (passing values is optional)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  // This is executed after all I/O callbacks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +setImmediatePromise('foobar').then((value) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // value === 'foobar' (passing values is optional)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  // This is executed after all I/O callbacks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Or with async function
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -async function timerExample() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  console.log('Before I/O callbacks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  await setImmediatePromise();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  console.log('After I/O callbacks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Or with async function
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +async function timerExample() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  console.log('Before I/O callbacks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  await setImmediatePromise();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  console.log('After I/O callbacks');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -timerExample();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +timerExample();

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                setInterval(callback, delay[, ...args])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Cancels a Timeout object created by setTimeout().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/timers.json nodejs-mozilla-12.22.12/doc/api/timers.json --- nodejs-mozilla-12.18.1/doc/api/timers.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/timers.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The timer module exposes a global API for scheduling functions to\nbe called at some future period of time. Because the timer functions are\nglobals, there is no need to call require('timers') to use the API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The timer functions within Node.js implement a similar API as the timers API\nprovided by Web Browsers but use a different internal implementation that is\nbuilt around the Node.js Event Loop.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/timers.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The timer module exposes a global API for scheduling functions to\nbe called at some future period of time. Because the timer functions are\nglobals, there is no need to call require('timers') to use the API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The timer functions within Node.js implement a similar API as the timers API\nprovided by Web Browsers but use a different internal implementation that is\nbuilt around the Node.js Event Loop.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "classes": [ { "textRaw": "Class: `Immediate`", @@ -182,13 +182,36 @@ } ], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When called, the active Timeout object will not require the Node.js event loop\nto remain active. If there is no other activity keeping the event loop running,\nthe process may exit before the Timeout object's callback is invoked. Calling\ntimeout.unref() multiple times will have no effect.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Calling timeout.unref() creates an internal timer that will wake the Node.js\nevent loop. Creating too many of these can adversely impact performance\nof the Node.js application.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + }, + { + "textRaw": "`timeout[Symbol.toPrimitive]()`", + "type": "method", + "name": "[Symbol.toPrimitive]", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns: {integer} a number that can be used to reference this `timeout`", + "name": "return", + "type": "integer", + "desc": "a number that can be used to reference this `timeout`" + }, + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Coerce a Timeout to a primitive. The primitive can be used to\nclear the Timeout. The primitive can only be used in the\nsame thread where the timeout was created. Therefore, to use it\nacross worker_threads it must first be passed to the correct\nthread. This allows enhanced compatibility with browser\nsetTimeout() and setInterval() implementations.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " } ] } ], "modules": [ { - "textRaw": "Scheduling Timers", + "textRaw": "Scheduling timers", "name": "scheduling_timers", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A timer in Node.js is an internal construct that calls a given function after\na certain period of time. When a timer's function is called varies depending on\nwhich method was used to create the timer and what other work the Node.js\nevent loop is doing.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "methods": [ @@ -314,10 +337,10 @@ } ], "type": "module", - "displayName": "Scheduling Timers" + "displayName": "Scheduling timers" }, { - "textRaw": "Cancelling Timers", + "textRaw": "Cancelling timers", "name": "cancelling_timers", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The setImmediate(), setInterval(), and setTimeout() methods\neach return objects that represent the scheduled timers. These can be used to\ncancel the timer and prevent it from triggering.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    It is not possible to cancel timers that were created using the promisified\nvariants of setImmediate(), setTimeout().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "methods": [ @@ -395,7 +418,7 @@ } ], "type": "module", - "displayName": "Cancelling Timers" + "displayName": "Cancelling timers" } ], "type": "module", diff -Nru nodejs-mozilla-12.18.1/doc/api/timers.md nodejs-mozilla-12.22.12/doc/api/timers.md --- nodejs-mozilla-12.18.1/doc/api/timers.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/timers.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `timer` module exposes a global API for scheduling functions to be called at some future period of time. Because the timer functions are globals, there is no need to call `require('timers')` to use the API. @@ -123,7 +125,21 @@ event loop. Creating too many of these can adversely impact performance of the Node.js application. -## Scheduling Timers +### `timeout[Symbol.toPrimitive]()` + + +* Returns: {integer} a number that can be used to reference this `timeout` + +Coerce a `Timeout` to a primitive. The primitive can be used to +clear the `Timeout`. The primitive can only be used in the +same thread where the timeout was created. Therefore, to use it +across [`worker_threads`][] it must first be passed to the correct +thread. This allows enhanced compatibility with browser +`setTimeout()` and `setInterval()` implementations. + +## Scheduling timers A timer in Node.js is an internal construct that calls a given function after a certain period of time. When a timer's function is called varies depending on @@ -226,7 +242,7 @@ }); ``` -## Cancelling Timers +## Cancelling timers The [`setImmediate()`][], [`setInterval()`][], and [`setTimeout()`][] methods each return objects that represent the scheduled timers. These can be used to @@ -272,3 +288,4 @@ [`setInterval()`]: timers.html#timers_setinterval_callback_delay_args [`setTimeout()`]: timers.html#timers_settimeout_callback_delay_args [`util.promisify()`]: util.html#util_util_promisify_original +[`worker_threads`]: worker_threads.html diff -Nru nodejs-mozilla-12.18.1/doc/api/tls.html nodejs-mozilla-12.22.12/doc/api/tls.html --- nodejs-mozilla-12.18.1/doc/api/tls.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tls.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - TLS (SSL) | Node.js v12.18.1 Documentation + + TLS (SSL) | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        18. @@ -121,23 +128,36 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            TLS (SSL)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • TLS (SSL) @@ -232,19 +233,18 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            TLS (SSL)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Source Code: lib/tls.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The tls module provides an implementation of the Transport Layer Security (TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL. The module can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const tls = require('tls');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            TLS/SSL Concepts#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const tls = require('tls');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            TLS/SSL concepts#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The TLS/SSL is a public/private key infrastructure (PKI). For most common cases, each client and server must have a private key.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Private keys can be generated in multiple ways. The example below illustrates use of the OpenSSL command-line interface to generate a 2048-bit RSA private key:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl genrsa -out ryans-key.pem 2048
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl genrsa -out ryans-key.pem 2048

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            With TLS/SSL, all servers (and some clients) must have a certificate. Certificates are public keys that correspond to a private key, and that are digitally signed either by a Certificate Authority or by the owner of the @@ -253,19 +253,16 @@ (CSR) file.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The OpenSSL command-line interface can be used to generate a CSR for a private key:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Once the CSR file is generated, it can either be sent to a Certificate Authority for signing or used to generate a self-signed certificate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Creating a self-signed certificate using the OpenSSL command-line interface is illustrated in the example below:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Once the certificate is generated, it can be used to generate a .pfx or .p12 file:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem \
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -      -certfile ca-cert.pem -out ryans.pfx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem \
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +      -certfile ca-cert.pem -out ryans.pfx

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Where:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • in: is the signed certificate
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • @@ -273,38 +270,37 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • certfile: is a concatenation of all Certificate Authority (CA) certs into a single file, e.g. cat ca1-cert.pem ca2-cert.pem > ca-cert.pem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Perfect Forward Secrecy#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Perfect forward secrecy#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The term "Forward Secrecy" or "Perfect Forward Secrecy" describes a feature +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The term forward secrecy or perfect forward secrecy describes a feature of key-agreement (i.e., key-exchange) methods. That is, the server and client keys are used to negotiate new temporary keys that are used specifically and only for the current communication session. Practically, this means that even if the server's private key is compromised, communication can only be decrypted by eavesdroppers if the attacker manages to obtain the key-pair specifically generated for the session.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Perfect Forward Secrecy is achieved by randomly generating a key pair for +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Perfect forward secrecy is achieved by randomly generating a key pair for key-agreement on every TLS/SSL handshake (in contrast to using the same key for all sessions). Methods implementing this technique are called "ephemeral".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Currently two methods are commonly used to achieve Perfect Forward Secrecy (note +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Currently two methods are commonly used to achieve perfect forward secrecy (note the character "E" appended to the traditional abbreviations):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • DHE: An ephemeral version of the Diffie Hellman key-agreement protocol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • ECDHE: An ephemeral version of the Elliptic Curve Diffie Hellman +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • DHE: An ephemeral version of the Diffie-Hellman key-agreement protocol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • ECDHE: An ephemeral version of the Elliptic Curve Diffie-Hellman key-agreement protocol.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Ephemeral methods may have some performance drawbacks, because key generation is expensive.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            To use Perfect Forward Secrecy using DHE with the tls module, it is required +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            To use perfect forward secrecy using DHE with the tls module, it is required to generate Diffie-Hellman parameters and specify them with the dhparam option to tls.createSecureContext(). The following illustrates the use of the OpenSSL command-line interface to generate such parameters:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl dhparam -outform PEM -out dhparam.pem 2048
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If using Perfect Forward Secrecy using ECDHE, Diffie-Hellman parameters are +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            openssl dhparam -outform PEM -out dhparam.pem 2048
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If using perfect forward secrecy using ECDHE, Diffie-Hellman parameters are not required and a default ECDHE curve will be used. The ecdhCurve property can be used when creating a TLS Server to specify the list of names of supported curves to use, see tls.createServer() for more info.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Perfect Forward Secrecy was optional up to TLSv1.2, but it is not optional for +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Perfect forward secrecy was optional up to TLSv1.2, but it is not optional for TLSv1.3, because all TLSv1.3 cipher suites use ECDHE.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ALPN and SNI#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            @@ -360,11 +356,12 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The default renegotiation limits should not be modified without a full understanding of the implications and risks.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            TLSv1.3 does not support renegotiation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Session Resumption#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Session resumption#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Establishing a TLS session can be relatively slow. The process can be sped up by saving and later reusing the session state. There are several mechanisms to do so, discussed here from oldest to newest (and preferred).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Session Identifiers Servers generate a unique ID for new connections and +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Session identifiers#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Servers generate a unique ID for new connections and send it to the client. Clients and servers save the session state. When reconnecting, clients send the ID of their saved session state and if the server also has the state for that ID, it can agree to use it. Otherwise, the server @@ -380,7 +377,8 @@ reuse sessions. To reuse sessions across load balancers or cluster workers, servers must use a shared session cache (such as Redis) in their session handlers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Session Tickets The servers encrypt the entire session state and send it +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Session tickets#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The servers encrypt the entire session state and send it to the client as a "ticket". When reconnecting, the state is sent to the server in the initial connection. This mechanism avoids the need for server-side session cache. If the server doesn't use the ticket, for any reason (failure @@ -420,61 +418,59 @@ failures, it is easy to not notice unnecessarily poor TLS performance. The OpenSSL CLI can be used to verify that servers are resuming sessions. Use the -reconnect option to openssl s_client, for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            $ openssl s_client -connect localhost:443 -reconnect
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            $ openssl s_client -connect localhost:443 -reconnect

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Read through the debug output. The first connection should say "New", for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Subsequent connections should say "Reused", for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Modifying the Default TLS Cipher suite#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Node.js is built with a default suite of enabled and disabled TLS ciphers. -Currently, the default cipher suite is:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            TLS_AES_256_GCM_SHA384:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -TLS_CHACHA20_POLY1305_SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -TLS_AES_128_GCM_SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -ECDHE-RSA-AES128-GCM-SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -ECDHE-ECDSA-AES128-GCM-SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -ECDHE-RSA-AES256-GCM-SHA384:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -ECDHE-ECDSA-AES256-GCM-SHA384:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -DHE-RSA-AES128-GCM-SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -ECDHE-RSA-AES128-SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -DHE-RSA-AES128-SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -ECDHE-RSA-AES256-SHA384:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -DHE-RSA-AES256-SHA384:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -ECDHE-RSA-AES256-SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -DHE-RSA-AES256-SHA256:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -HIGH:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!aNULL:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!eNULL:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!EXPORT:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!DES:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!RC4:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!MD5:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!PSK:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!SRP:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -!CAMELLIA
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Modifying the default TLS cipher suite#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Node.js is built with a default suite of enabled and disabled TLS ciphers. This +default cipher list can be configured when building Node.js to allow +distributions to provide their own default list.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The following command can be used to show the default cipher suite:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            node -p crypto.constants.defaultCoreCipherList | tr ':' '\n'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +TLS_AES_256_GCM_SHA384
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +TLS_CHACHA20_POLY1305_SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +TLS_AES_128_GCM_SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +ECDHE-RSA-AES128-GCM-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +ECDHE-ECDSA-AES128-GCM-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +ECDHE-RSA-AES256-GCM-SHA384
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +ECDHE-ECDSA-AES256-GCM-SHA384
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +DHE-RSA-AES128-GCM-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +ECDHE-RSA-AES128-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +DHE-RSA-AES128-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +ECDHE-RSA-AES256-SHA384
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +DHE-RSA-AES256-SHA384
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +ECDHE-RSA-AES256-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +DHE-RSA-AES256-SHA256
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +HIGH
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!aNULL
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!eNULL
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!EXPORT
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!DES
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!RC4
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!MD5
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!PSK
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!SRP
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +!CAMELLIA

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This default can be replaced entirely using the --tls-cipher-list command line switch (directly, or via the NODE_OPTIONS environment variable). For instance, the following makes ECDHE-RSA-AES128-GCM-SHA256:!RC4 the default TLS cipher suite:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            node --tls-cipher-list="ECDHE-RSA-AES128-GCM-SHA256:!RC4" server.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            node --tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4' server.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -export NODE_OPTIONS=--tls-cipher-list="ECDHE-RSA-AES128-GCM-SHA256:!RC4"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -node server.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +export NODE_OPTIONS=--tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4' +node server.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The default can also be replaced on a per client or server basis using the ciphers option from tls.createSecureContext(), which is also available in tls.createServer(), tls.connect(), and when creating new tls.TLSSockets.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The ciphers list can contain a mixture of TLSv1.3 cipher suite names, the ones that start with 'TLS_', and specifications for TLSv1.2 and below cipher -suites. The TLSv1.2 ciphers support a legacy specification format, consult +suites. The TLSv1.2 ciphers support a legacy specification format, consult the OpenSSL cipher list format documentation for details, but those -specifications do not apply to TLSv1.3 ciphers. The TLSv1.3 suites can only +specifications do not apply to TLSv1.3 ciphers. The TLSv1.3 suites can only be enabled by including their full name in the cipher list. They cannot, for example, be enabled or disabled by using the legacy TLSv1.2 'EECDH' or '!EECDH' specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            @@ -488,8 +484,8 @@ of an application. The --tls-cipher-list switch and ciphers option should by used only if absolutely necessary.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The default cipher suite prefers GCM ciphers for Chrome's 'modern -cryptography' setting and also prefers ECDHE and DHE ciphers for Perfect -Forward Secrecy, while offering some backward compatibility.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +cryptography' setting and also prefers ECDHE and DHE ciphers for perfect +forward secrecy, while offering some backward compatibility.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            128 bit AES is preferred over 192 and 256 bit AES in light of specific attacks affecting larger AES key sizes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Old clients that rely on insecure and deprecated RC4 or DES-based ciphers @@ -508,6 +504,36 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The first 3 are enabled by default. The last 2 CCM-based suites are supported by TLSv1.3 because they may be more performant on constrained systems, but they are not enabled by default since they offer less security.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Class: tls.CryptoStream#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Stability: 0 - Deprecated: Use tls.TLSSocket instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The tls.CryptoStream class represents a stream of encrypted data. This class +is deprecated and should no longer be used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            cryptoStream.bytesWritten#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The cryptoStream.bytesWritten property returns the total number of bytes +written to the underlying socket including the bytes required for the +implementation of the TLS protocol.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Class: tls.SecurePair#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Stability: 0 - Deprecated: Use tls.TLSSocket instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Returned by tls.createSecurePair().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Event: 'secure'#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The 'secure' event is emitted by the SecurePair object once a secure +connection has been established.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            As with checking for the server +'secureConnection' +event, pair.cleartext.authorized should be inspected to confirm whether the +certificate used is properly authorized.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Class: tls.Server#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Extends: <net.Server>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Accepts encrypted connections using TLS or SSL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Event: 'connection'#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          + + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This event is emitted when a new TCP stream is established, before the TLS +handshake begins. socket is typically an object of type net.Socket. +Usually users will not want to access this event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This event can also be explicitly emitted by users to inject connections +into the TLS server. In that case, any Duplex stream can be passed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Event: 'keylog'#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/tls.json nodejs-mozilla-12.22.12/doc/api/tls.json --- nodejs-mozilla-12.18.1/doc/api/tls.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tls.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,18 +8,18 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The tls module provides an implementation of the Transport Layer Security\n(TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL.\nThe module can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const tls = require('tls');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Source Code: lib/tls.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The tls module provides an implementation of the Transport Layer Security\n(TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL.\nThe module can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const tls = require('tls');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "modules": [ { - "textRaw": "TLS/SSL Concepts", + "textRaw": "TLS/SSL concepts", "name": "tls/ssl_concepts", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The TLS/SSL is a public/private key infrastructure (PKI). For most common\ncases, each client and server must have a private key.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Private keys can be generated in multiple ways. The example below illustrates\nuse of the OpenSSL command-line interface to generate a 2048-bit RSA private\nkey:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl genrsa -out ryans-key.pem 2048\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          With TLS/SSL, all servers (and some clients) must have a certificate.\nCertificates are public keys that correspond to a private key, and that are\ndigitally signed either by a Certificate Authority or by the owner of the\nprivate key (such certificates are referred to as \"self-signed\"). The first\nstep to obtaining a certificate is to create a Certificate Signing Request\n(CSR) file.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The OpenSSL command-line interface can be used to generate a CSR for a private\nkey:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Once the CSR file is generated, it can either be sent to a Certificate\nAuthority for signing or used to generate a self-signed certificate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Creating a self-signed certificate using the OpenSSL command-line interface\nis illustrated in the example below:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Once the certificate is generated, it can be used to generate a .pfx or\n.p12 file:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem \\\n      -certfile ca-cert.pem -out ryans.pfx\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Where:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • in: is the signed certificate
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • inkey: is the associated private key
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • certfile: is a concatenation of all Certificate Authority (CA) certs into\na single file, e.g. cat ca1-cert.pem ca2-cert.pem > ca-cert.pem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The TLS/SSL is a public/private key infrastructure (PKI). For most common\ncases, each client and server must have a private key.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Private keys can be generated in multiple ways. The example below illustrates\nuse of the OpenSSL command-line interface to generate a 2048-bit RSA private\nkey:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl genrsa -out ryans-key.pem 2048\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          With TLS/SSL, all servers (and some clients) must have a certificate.\nCertificates are public keys that correspond to a private key, and that are\ndigitally signed either by a Certificate Authority or by the owner of the\nprivate key (such certificates are referred to as \"self-signed\"). The first\nstep to obtaining a certificate is to create a Certificate Signing Request\n(CSR) file.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The OpenSSL command-line interface can be used to generate a CSR for a private\nkey:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Once the CSR file is generated, it can either be sent to a Certificate\nAuthority for signing or used to generate a self-signed certificate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Creating a self-signed certificate using the OpenSSL command-line interface\nis illustrated in the example below:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Once the certificate is generated, it can be used to generate a .pfx or\n.p12 file:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem \\\n      -certfile ca-cert.pem -out ryans.pfx\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Where:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • in: is the signed certificate
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • inkey: is the associated private key
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • certfile: is a concatenation of all Certificate Authority (CA) certs into\na single file, e.g. cat ca1-cert.pem ca2-cert.pem > ca-cert.pem
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "miscs": [ { - "textRaw": "Perfect Forward Secrecy", - "name": "Perfect Forward Secrecy", + "textRaw": "Perfect forward secrecy", + "name": "Perfect forward secrecy", "type": "misc", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The term \"Forward Secrecy\" or \"Perfect Forward Secrecy\" describes a feature\nof key-agreement (i.e., key-exchange) methods. That is, the server and client\nkeys are used to negotiate new temporary keys that are used specifically and\nonly for the current communication session. Practically, this means that even\nif the server's private key is compromised, communication can only be decrypted\nby eavesdroppers if the attacker manages to obtain the key-pair specifically\ngenerated for the session.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Perfect Forward Secrecy is achieved by randomly generating a key pair for\nkey-agreement on every TLS/SSL handshake (in contrast to using the same key for\nall sessions). Methods implementing this technique are called \"ephemeral\".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Currently two methods are commonly used to achieve Perfect Forward Secrecy (note\nthe character \"E\" appended to the traditional abbreviations):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • DHE: An ephemeral version of the Diffie Hellman key-agreement protocol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • ECDHE: An ephemeral version of the Elliptic Curve Diffie Hellman\nkey-agreement protocol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ephemeral methods may have some performance drawbacks, because key generation\nis expensive.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          To use Perfect Forward Secrecy using DHE with the tls module, it is required\nto generate Diffie-Hellman parameters and specify them with the dhparam\noption to tls.createSecureContext(). The following illustrates the use of\nthe OpenSSL command-line interface to generate such parameters:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl dhparam -outform PEM -out dhparam.pem 2048\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If using Perfect Forward Secrecy using ECDHE, Diffie-Hellman parameters are\nnot required and a default ECDHE curve will be used. The ecdhCurve property\ncan be used when creating a TLS Server to specify the list of names of supported\ncurves to use, see tls.createServer() for more info.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Perfect Forward Secrecy was optional up to TLSv1.2, but it is not optional for\nTLSv1.3, because all TLSv1.3 cipher suites use ECDHE.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The term forward secrecy or perfect forward secrecy describes a feature\nof key-agreement (i.e., key-exchange) methods. That is, the server and client\nkeys are used to negotiate new temporary keys that are used specifically and\nonly for the current communication session. Practically, this means that even\nif the server's private key is compromised, communication can only be decrypted\nby eavesdroppers if the attacker manages to obtain the key-pair specifically\ngenerated for the session.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Perfect forward secrecy is achieved by randomly generating a key pair for\nkey-agreement on every TLS/SSL handshake (in contrast to using the same key for\nall sessions). Methods implementing this technique are called \"ephemeral\".

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Currently two methods are commonly used to achieve perfect forward secrecy (note\nthe character \"E\" appended to the traditional abbreviations):

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • DHE: An ephemeral version of the Diffie-Hellman key-agreement protocol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • ECDHE: An ephemeral version of the Elliptic Curve Diffie-Hellman\nkey-agreement protocol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Ephemeral methods may have some performance drawbacks, because key generation\nis expensive.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          To use perfect forward secrecy using DHE with the tls module, it is required\nto generate Diffie-Hellman parameters and specify them with the dhparam\noption to tls.createSecureContext(). The following illustrates the use of\nthe OpenSSL command-line interface to generate such parameters:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          openssl dhparam -outform PEM -out dhparam.pem 2048\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If using perfect forward secrecy using ECDHE, Diffie-Hellman parameters are\nnot required and a default ECDHE curve will be used. The ecdhCurve property\ncan be used when creating a TLS Server to specify the list of names of supported\ncurves to use, see tls.createServer() for more info.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Perfect forward secrecy was optional up to TLSv1.2, but it is not optional for\nTLSv1.3, because all TLSv1.3 cipher suites use ECDHE.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "ALPN and SNI", @@ -42,101 +42,95 @@ ], "modules": [ { - "textRaw": "Session Resumption", + "textRaw": "Session resumption", "name": "session_resumption", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Establishing a TLS session can be relatively slow. The process can be sped\nup by saving and later reusing the session state. There are several mechanisms\nto do so, discussed here from oldest to newest (and preferred).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Session Identifiers Servers generate a unique ID for new connections and\nsend it to the client. Clients and servers save the session state. When\nreconnecting, clients send the ID of their saved session state and if the server\nalso has the state for that ID, it can agree to use it. Otherwise, the server\nwill create a new session. See RFC 2246 for more information, page 23 and\n30.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Resumption using session identifiers is supported by most web browsers when\nmaking HTTPS requests.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For Node.js, clients wait for the 'session' event to get the session data,\nand provide the data to the session option of a subsequent tls.connect()\nto reuse the session. Servers must\nimplement handlers for the 'newSession' and 'resumeSession' events\nto save and restore the session data using the session ID as the lookup key to\nreuse sessions. To reuse sessions across load balancers or cluster workers,\nservers must use a shared session cache (such as Redis) in their session\nhandlers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Session Tickets The servers encrypt the entire session state and send it\nto the client as a \"ticket\". When reconnecting, the state is sent to the server\nin the initial connection. This mechanism avoids the need for server-side\nsession cache. If the server doesn't use the ticket, for any reason (failure\nto decrypt it, it's too old, etc.), it will create a new session and send a new\nticket. See RFC 5077 for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Resumption using session tickets is becoming commonly supported by many web\nbrowsers when making HTTPS requests.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For Node.js, clients use the same APIs for resumption with session identifiers\nas for resumption with session tickets. For debugging, if\ntls.TLSSocket.getTLSTicket() returns a value, the session data contains a\nticket, otherwise it contains client-side session state.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          With TLSv1.3, be aware that multiple tickets may be sent by the server,\nresulting in multiple 'session' events, see 'session' for more\ninformation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Single process servers need no specific implementation to use session tickets.\nTo use session tickets across server restarts or load balancers, servers must\nall have the same ticket keys. There are three 16-byte keys internally, but the\ntls API exposes them as a single 48-byte buffer for convenience.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Its possible to get the ticket keys by calling server.getTicketKeys() on\none server instance and then distribute them, but it is more reasonable to\nsecurely generate 48 bytes of secure random data and set them with the\nticketKeys option of tls.createServer(). The keys should be regularly\nregenerated and server's keys can be reset with\nserver.setTicketKeys().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Session ticket keys are cryptographic keys, and they must be stored\nsecurely. With TLS 1.2 and below, if they are compromised all sessions that\nused tickets encrypted with them can be decrypted. They should not be stored\non disk, and they should be regenerated regularly.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If clients advertise support for tickets, the server will send them. The\nserver can disable tickets by supplying\nrequire('constants').SSL_OP_NO_TICKET in secureOptions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Both session identifiers and session tickets timeout, causing the server to\ncreate new sessions. The timeout can be configured with the sessionTimeout\noption of tls.createServer().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For all the mechanisms, when resumption fails, servers will create new sessions.\nSince failing to resume the session does not cause TLS/HTTPS connection\nfailures, it is easy to not notice unnecessarily poor TLS performance. The\nOpenSSL CLI can be used to verify that servers are resuming sessions. Use the\n-reconnect option to openssl s_client, for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          $ openssl s_client -connect localhost:443 -reconnect\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Read through the debug output. The first connection should say \"New\", for\nexample:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Subsequent connections should say \"Reused\", for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Establishing a TLS session can be relatively slow. The process can be sped\nup by saving and later reusing the session state. There are several mechanisms\nto do so, discussed here from oldest to newest (and preferred).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "modules": [ + { + "textRaw": "Session identifiers", + "name": "session_identifiers", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Servers generate a unique ID for new connections and\nsend it to the client. Clients and servers save the session state. When\nreconnecting, clients send the ID of their saved session state and if the server\nalso has the state for that ID, it can agree to use it. Otherwise, the server\nwill create a new session. See RFC 2246 for more information, page 23 and\n30.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Resumption using session identifiers is supported by most web browsers when\nmaking HTTPS requests.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For Node.js, clients wait for the 'session' event to get the session data,\nand provide the data to the session option of a subsequent tls.connect()\nto reuse the session. Servers must\nimplement handlers for the 'newSession' and 'resumeSession' events\nto save and restore the session data using the session ID as the lookup key to\nreuse sessions. To reuse sessions across load balancers or cluster workers,\nservers must use a shared session cache (such as Redis) in their session\nhandlers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "type": "module", + "displayName": "Session identifiers" + }, + { + "textRaw": "Session tickets", + "name": "session_tickets", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The servers encrypt the entire session state and send it\nto the client as a \"ticket\". When reconnecting, the state is sent to the server\nin the initial connection. This mechanism avoids the need for server-side\nsession cache. If the server doesn't use the ticket, for any reason (failure\nto decrypt it, it's too old, etc.), it will create a new session and send a new\nticket. See RFC 5077 for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Resumption using session tickets is becoming commonly supported by many web\nbrowsers when making HTTPS requests.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For Node.js, clients use the same APIs for resumption with session identifiers\nas for resumption with session tickets. For debugging, if\ntls.TLSSocket.getTLSTicket() returns a value, the session data contains a\nticket, otherwise it contains client-side session state.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          With TLSv1.3, be aware that multiple tickets may be sent by the server,\nresulting in multiple 'session' events, see 'session' for more\ninformation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Single process servers need no specific implementation to use session tickets.\nTo use session tickets across server restarts or load balancers, servers must\nall have the same ticket keys. There are three 16-byte keys internally, but the\ntls API exposes them as a single 48-byte buffer for convenience.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Its possible to get the ticket keys by calling server.getTicketKeys() on\none server instance and then distribute them, but it is more reasonable to\nsecurely generate 48 bytes of secure random data and set them with the\nticketKeys option of tls.createServer(). The keys should be regularly\nregenerated and server's keys can be reset with\nserver.setTicketKeys().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Session ticket keys are cryptographic keys, and they must be stored\nsecurely. With TLS 1.2 and below, if they are compromised all sessions that\nused tickets encrypted with them can be decrypted. They should not be stored\non disk, and they should be regenerated regularly.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If clients advertise support for tickets, the server will send them. The\nserver can disable tickets by supplying\nrequire('constants').SSL_OP_NO_TICKET in secureOptions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Both session identifiers and session tickets timeout, causing the server to\ncreate new sessions. The timeout can be configured with the sessionTimeout\noption of tls.createServer().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For all the mechanisms, when resumption fails, servers will create new sessions.\nSince failing to resume the session does not cause TLS/HTTPS connection\nfailures, it is easy to not notice unnecessarily poor TLS performance. The\nOpenSSL CLI can be used to verify that servers are resuming sessions. Use the\n-reconnect option to openssl s_client, for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          $ openssl s_client -connect localhost:443 -reconnect\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Read through the debug output. The first connection should say \"New\", for\nexample:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Subsequent connections should say \"Reused\", for example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "type": "module", + "displayName": "Session tickets" + } + ], "type": "module", - "displayName": "Session Resumption" + "displayName": "Session resumption" } ], "type": "module", - "displayName": "TLS/SSL Concepts" + "displayName": "TLS/SSL concepts" }, { - "textRaw": "Modifying the Default TLS Cipher suite", + "textRaw": "Modifying the default TLS cipher suite", "name": "modifying_the_default_tls_cipher_suite", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Node.js is built with a default suite of enabled and disabled TLS ciphers.\nCurrently, the default cipher suite is:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          TLS_AES_256_GCM_SHA384:\nTLS_CHACHA20_POLY1305_SHA256:\nTLS_AES_128_GCM_SHA256:\nECDHE-RSA-AES128-GCM-SHA256:\nECDHE-ECDSA-AES128-GCM-SHA256:\nECDHE-RSA-AES256-GCM-SHA384:\nECDHE-ECDSA-AES256-GCM-SHA384:\nDHE-RSA-AES128-GCM-SHA256:\nECDHE-RSA-AES128-SHA256:\nDHE-RSA-AES128-SHA256:\nECDHE-RSA-AES256-SHA384:\nDHE-RSA-AES256-SHA384:\nECDHE-RSA-AES256-SHA256:\nDHE-RSA-AES256-SHA256:\nHIGH:\n!aNULL:\n!eNULL:\n!EXPORT:\n!DES:\n!RC4:\n!MD5:\n!PSK:\n!SRP:\n!CAMELLIA\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This default can be replaced entirely using the --tls-cipher-list command\nline switch (directly, or via the NODE_OPTIONS environment variable). For\ninstance, the following makes ECDHE-RSA-AES128-GCM-SHA256:!RC4 the default TLS\ncipher suite:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          node --tls-cipher-list=\"ECDHE-RSA-AES128-GCM-SHA256:!RC4\" server.js\n\nexport NODE_OPTIONS=--tls-cipher-list=\"ECDHE-RSA-AES128-GCM-SHA256:!RC4\"\nnode server.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The default can also be replaced on a per client or server basis using the\nciphers option from tls.createSecureContext(), which is also available\nin tls.createServer(), tls.connect(), and when creating new\ntls.TLSSockets.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The ciphers list can contain a mixture of TLSv1.3 cipher suite names, the ones\nthat start with 'TLS_', and specifications for TLSv1.2 and below cipher\nsuites. The TLSv1.2 ciphers support a legacy specification format, consult\nthe OpenSSL cipher list format documentation for details, but those\nspecifications do not apply to TLSv1.3 ciphers. The TLSv1.3 suites can only\nbe enabled by including their full name in the cipher list. They cannot, for\nexample, be enabled or disabled by using the legacy TLSv1.2 'EECDH' or\n'!EECDH' specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Despite the relative order of TLSv1.3 and TLSv1.2 cipher suites, the TLSv1.3\nprotocol is significantly more secure than TLSv1.2, and will always be chosen\nover TLSv1.2 if the handshake indicates it is supported, and if any TLSv1.3\ncipher suites are enabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The default cipher suite included within Node.js has been carefully\nselected to reflect current security best practices and risk mitigation.\nChanging the default cipher suite can have a significant impact on the security\nof an application. The --tls-cipher-list switch and ciphers option should by\nused only if absolutely necessary.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The default cipher suite prefers GCM ciphers for Chrome's 'modern\ncryptography' setting and also prefers ECDHE and DHE ciphers for Perfect\nForward Secrecy, while offering some backward compatibility.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          128 bit AES is preferred over 192 and 256 bit AES in light of specific\nattacks affecting larger AES key sizes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Old clients that rely on insecure and deprecated RC4 or DES-based ciphers\n(like Internet Explorer 6) cannot complete the handshaking process with\nthe default configuration. If these clients must be supported, the\nTLS recommendations may offer a compatible cipher suite. For more details\non the format, see the OpenSSL cipher list format documentation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          There are only 5 TLSv1.3 cipher suites:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_AES_256_GCM_SHA384'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_CHACHA20_POLY1305_SHA256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_AES_128_GCM_SHA256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_AES_128_CCM_SHA256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_AES_128_CCM_8_SHA256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The first 3 are enabled by default. The last 2 CCM-based suites are supported\nby TLSv1.3 because they may be more performant on constrained systems, but they\nare not enabled by default since they offer less security.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Node.js is built with a default suite of enabled and disabled TLS ciphers. This\ndefault cipher list can be configured when building Node.js to allow\ndistributions to provide their own default list.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The following command can be used to show the default cipher suite:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          node -p crypto.constants.defaultCoreCipherList | tr ':' '\\n'\nTLS_AES_256_GCM_SHA384\nTLS_CHACHA20_POLY1305_SHA256\nTLS_AES_128_GCM_SHA256\nECDHE-RSA-AES128-GCM-SHA256\nECDHE-ECDSA-AES128-GCM-SHA256\nECDHE-RSA-AES256-GCM-SHA384\nECDHE-ECDSA-AES256-GCM-SHA384\nDHE-RSA-AES128-GCM-SHA256\nECDHE-RSA-AES128-SHA256\nDHE-RSA-AES128-SHA256\nECDHE-RSA-AES256-SHA384\nDHE-RSA-AES256-SHA384\nECDHE-RSA-AES256-SHA256\nDHE-RSA-AES256-SHA256\nHIGH\n!aNULL\n!eNULL\n!EXPORT\n!DES\n!RC4\n!MD5\n!PSK\n!SRP\n!CAMELLIA\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This default can be replaced entirely using the --tls-cipher-list command\nline switch (directly, or via the NODE_OPTIONS environment variable). For\ninstance, the following makes ECDHE-RSA-AES128-GCM-SHA256:!RC4 the default TLS\ncipher suite:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          node --tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4' server.js\n\nexport NODE_OPTIONS=--tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4'\nnode server.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The default can also be replaced on a per client or server basis using the\nciphers option from tls.createSecureContext(), which is also available\nin tls.createServer(), tls.connect(), and when creating new\ntls.TLSSockets.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The ciphers list can contain a mixture of TLSv1.3 cipher suite names, the ones\nthat start with 'TLS_', and specifications for TLSv1.2 and below cipher\nsuites. The TLSv1.2 ciphers support a legacy specification format, consult\nthe OpenSSL cipher list format documentation for details, but those\nspecifications do not apply to TLSv1.3 ciphers. The TLSv1.3 suites can only\nbe enabled by including their full name in the cipher list. They cannot, for\nexample, be enabled or disabled by using the legacy TLSv1.2 'EECDH' or\n'!EECDH' specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Despite the relative order of TLSv1.3 and TLSv1.2 cipher suites, the TLSv1.3\nprotocol is significantly more secure than TLSv1.2, and will always be chosen\nover TLSv1.2 if the handshake indicates it is supported, and if any TLSv1.3\ncipher suites are enabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The default cipher suite included within Node.js has been carefully\nselected to reflect current security best practices and risk mitigation.\nChanging the default cipher suite can have a significant impact on the security\nof an application. The --tls-cipher-list switch and ciphers option should by\nused only if absolutely necessary.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The default cipher suite prefers GCM ciphers for Chrome's 'modern\ncryptography' setting and also prefers ECDHE and DHE ciphers for perfect\nforward secrecy, while offering some backward compatibility.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          128 bit AES is preferred over 192 and 256 bit AES in light of specific\nattacks affecting larger AES key sizes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Old clients that rely on insecure and deprecated RC4 or DES-based ciphers\n(like Internet Explorer 6) cannot complete the handshaking process with\nthe default configuration. If these clients must be supported, the\nTLS recommendations may offer a compatible cipher suite. For more details\non the format, see the OpenSSL cipher list format documentation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          There are only 5 TLSv1.3 cipher suites:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_AES_256_GCM_SHA384'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_CHACHA20_POLY1305_SHA256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_AES_128_GCM_SHA256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_AES_128_CCM_SHA256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • 'TLS_AES_128_CCM_8_SHA256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The first 3 are enabled by default. The last 2 CCM-based suites are supported\nby TLSv1.3 because they may be more performant on constrained systems, but they\nare not enabled by default since they offer less security.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "type": "module", - "displayName": "Modifying the Default TLS Cipher suite" - }, + "displayName": "Modifying the default TLS cipher suite" + } + ], + "classes": [ { - "textRaw": "Deprecated APIs", - "name": "deprecated_apis", - "classes": [ - { - "textRaw": "Class: `CryptoStream`", - "type": "class", - "name": "CryptoStream", - "meta": { - "added": [ - "v0.3.4" - ], - "deprecated": [ - "v0.11.3" - ], - "changes": [] - }, - "stability": 0, - "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The tls.CryptoStream class represents a stream of encrypted data. This class\nis deprecated and should no longer be used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", - "properties": [ - { - "textRaw": "`cryptoStream.bytesWritten`", - "name": "bytesWritten", - "meta": { - "added": [ - "v0.3.4" - ], - "deprecated": [ - "v0.11.3" - ], - "changes": [] - }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The cryptoStream.bytesWritten property returns the total number of bytes\nwritten to the underlying socket including the bytes required for the\nimplementation of the TLS protocol.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " - } - ] - }, + "textRaw": "Class: `tls.CryptoStream`", + "type": "class", + "name": "tls.CryptoStream", + "meta": { + "added": [ + "v0.3.4" + ], + "deprecated": [ + "v0.11.3" + ], + "changes": [] + }, + "stability": 0, + "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The tls.CryptoStream class represents a stream of encrypted data. This class\nis deprecated and should no longer be used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "properties": [ { - "textRaw": "Class: `SecurePair`", - "type": "class", - "name": "SecurePair", + "textRaw": "`cryptoStream.bytesWritten`", + "name": "bytesWritten", "meta": { "added": [ - "v0.3.2" + "v0.3.4" ], "deprecated": [ "v0.11.3" ], "changes": [] }, - "stability": 0, - "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returned by tls.createSecurePair().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", - "events": [ - { - "textRaw": "Event: `'secure'`", - "type": "event", - "name": "secure", - "meta": { - "added": [ - "v0.3.2" - ], - "deprecated": [ - "v0.11.3" - ], - "changes": [] - }, - "params": [], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The 'secure' event is emitted by the SecurePair object once a secure\nconnection has been established.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          As with checking for the server\n'secureConnection'\nevent, pair.cleartext.authorized should be inspected to confirm whether the\ncertificate used is properly authorized.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " - } - ] + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The cryptoStream.bytesWritten property returns the total number of bytes\nwritten to the underlying socket including the bytes required for the\nimplementation of the TLS protocol.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " } - ], - "methods": [ + ] + }, + { + "textRaw": "Class: `tls.SecurePair`", + "type": "class", + "name": "tls.SecurePair", + "meta": { + "added": [ + "v0.3.2" + ], + "deprecated": [ + "v0.11.3" + ], + "changes": [] + }, + "stability": 0, + "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returned by tls.createSecurePair().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "events": [ { - "textRaw": "`tls.createSecurePair([context][, isServer][, requestCert][, rejectUnauthorized][, options])`", - "type": "method", - "name": "createSecurePair", + "textRaw": "Event: `'secure'`", + "type": "event", + "name": "secure", "meta": { "added": [ "v0.3.2" @@ -144,114 +138,13 @@ "deprecated": [ "v0.11.3" ], - "changes": [ - { - "version": "v5.0.0", - "pr-url": "https://github.com/nodejs/node/pull/2564", - "description": "ALPN options are supported now." - } - ] + "changes": [] }, - "stability": 0, - "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", - "signatures": [ - { - "params": [ - { - "textRaw": "`context` {Object} A secure context object as returned by `tls.createSecureContext()`", - "name": "context", - "type": "Object", - "desc": "A secure context object as returned by `tls.createSecureContext()`" - }, - { - "textRaw": "`isServer` {boolean} `true` to specify that this TLS connection should be opened as a server.", - "name": "isServer", - "type": "boolean", - "desc": "`true` to specify that this TLS connection should be opened as a server." - }, - { - "textRaw": "`requestCert` {boolean} `true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`.", - "name": "requestCert", - "type": "boolean", - "desc": "`true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`." - }, - { - "textRaw": "`rejectUnauthorized` {boolean} If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`.", - "name": "rejectUnauthorized", - "type": "boolean", - "desc": "If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`." - }, - { - "textRaw": "`options`", - "name": "options", - "options": [ - { - "textRaw": "`enableTrace`: See [`tls.createServer()`][]", - "name": "enableTrace", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`secureContext`: A TLS context object from [`tls.createSecureContext()`][]", - "name": "secureContext", - "desc": "A TLS context object from [`tls.createSecureContext()`][]" - }, - { - "textRaw": "`isServer`: If `true` the TLS socket will be instantiated in server-mode. **Default:** `false`.", - "name": "isServer", - "default": "`false`", - "desc": "If `true` the TLS socket will be instantiated in server-mode." - }, - { - "textRaw": "`server` {net.Server} A [`net.Server`][] instance", - "name": "server", - "type": "net.Server", - "desc": "A [`net.Server`][] instance" - }, - { - "textRaw": "`requestCert`: See [`tls.createServer()`][]", - "name": "requestCert", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`rejectUnauthorized`: See [`tls.createServer()`][]", - "name": "rejectUnauthorized", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`ALPNProtocols`: See [`tls.createServer()`][]", - "name": "ALPNProtocols", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`SNICallback`: See [`tls.createServer()`][]", - "name": "SNICallback", - "desc": "See [`tls.createServer()`][]" - }, - { - "textRaw": "`session` {Buffer} A `Buffer` instance containing a TLS session.", - "name": "session", - "type": "Buffer", - "desc": "A `Buffer` instance containing a TLS session." - }, - { - "textRaw": "`requestOCSP` {boolean} If `true`, specifies that the OCSP status request extension will be added to the client hello and an `'OCSPResponse'` event will be emitted on the socket before establishing a secure communication.", - "name": "requestOCSP", - "type": "boolean", - "desc": "If `true`, specifies that the OCSP status request extension will be added to the client hello and an `'OCSPResponse'` event will be emitted on the socket before establishing a secure communication." - } - ] - } - ] - } - ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Creates a new secure pair object with two streams, one of which reads and writes\nthe encrypted data and the other of which reads and writes the cleartext data.\nGenerally, the encrypted stream is piped to/from an incoming encrypted data\nstream and the cleartext one is used as a replacement for the initial encrypted\nstream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tls.createSecurePair() returns a tls.SecurePair object with cleartext and\nencrypted stream properties.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Using cleartext has the same API as tls.TLSSocket.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The tls.createSecurePair() method is now deprecated in favor of\ntls.TLSSocket(). For example, the code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          pair = tls.createSecurePair(/* ... */);\npair.encrypted.pipe(socket);\nsocket.pipe(pair.encrypted);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          can be replaced by:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          secureSocket = tls.TLSSocket(socket, options);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          where secureSocket has the same API as pair.cleartext.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "params": [], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The 'secure' event is emitted by the SecurePair object once a secure\nconnection has been established.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          As with checking for the server\n'secureConnection'\nevent, pair.cleartext.authorized should be inspected to confirm whether the\ncertificate used is properly authorized.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " } - ], - "type": "module", - "displayName": "Deprecated APIs" - } - ], - "classes": [ + ] + }, { "textRaw": "Class: `tls.Server`", "type": "class", @@ -265,6 +158,25 @@ "desc": "\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Accepts encrypted connections using TLS or SSL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "events": [ { + "textRaw": "Event: `'connection'`", + "type": "event", + "name": "connection", + "meta": { + "added": [ + "v0.3.2" + ], + "changes": [] + }, + "params": [ + { + "textRaw": "`socket` {stream.Duplex}", + "name": "socket", + "type": "stream.Duplex" + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This event is emitted when a new TCP stream is established, before the TLS\nhandshake begins. socket is typically an object of type net.Socket.\nUsually users will not want to access this event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This event can also be explicitly emitted by users to inject connections\ninto the TLS server. In that case, any Duplex stream can be passed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + }, + { "textRaw": "Event: `'keylog'`", "type": "event", "name": "keylog", @@ -298,7 +210,13 @@ "added": [ "v0.9.2" ], - "changes": [] + "changes": [ + { + "version": "v0.11.12", + "pr-url": "https://github.com/nodejs/node-v0.x-archive/pull/7118", + "description": "The `callback` argument is now supported." + } + ] }, "params": [], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The 'newSession' event is emitted upon creation of a new TLS session. This may\nbe used to store sessions in external storage. The data should be provided to\nthe 'resumeSession' callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The listener callback is passed three arguments when called:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • sessionId <Buffer> The TLS session identifier
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • sessionData <Buffer> The TLS session data
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • callback <Function> A callback function taking no arguments that must be\ninvoked in order for data to be sent or received over the secure connection.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Listening for this event will have an effect only on connections established\nafter the addition of the event listener.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " @@ -327,7 +245,7 @@ "changes": [] }, "params": [], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The 'resumeSession' event is emitted when the client requests to resume a\nprevious TLS session. The listener callback is passed two arguments when\ncalled:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • sessionId <Buffer> The TLS session identifier
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            callback <Function> A callback function to be called when the prior session\nhas been recovered: callback([err[, sessionData]])

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The event listener should perform a lookup in external storage for the\nsessionData saved by the 'newSession' event handler using the given\nsessionId. If found, call callback(null, sessionData) to resume the session.\nIf not found, the session cannot be resumed. callback() must be called\nwithout sessionData so that the handshake can continue and a new session can\nbe created. It is possible to call callback(err) to terminate the incoming\nconnection and destroy the socket.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Listening for this event will have an effect only on connections established\nafter the addition of the event listener.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The following illustrates resuming a TLS session:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const tlsSessionStore = {};\nserver.on('newSession', (id, data, cb) => {\n  tlsSessionStore[id.toString('hex')] = data;\n  cb();\n});\nserver.on('resumeSession', (id, cb) => {\n  cb(null, tlsSessionStore[id.toString('hex')] || null);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The 'resumeSession' event is emitted when the client requests to resume a\nprevious TLS session. The listener callback is passed two arguments when\ncalled:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • sessionId <Buffer> The TLS session identifier
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • callback <Function> A callback function to be called when the prior session\nhas been recovered: callback([err[, sessionData]])\n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The event listener should perform a lookup in external storage for the\nsessionData saved by the 'newSession' event handler using the given\nsessionId. If found, call callback(null, sessionData) to resume the session.\nIf not found, the session cannot be resumed. callback() must be called\nwithout sessionData so that the handshake can continue and a new session can\nbe created. It is possible to call callback(err) to terminate the incoming\nconnection and destroy the socket.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Listening for this event will have an effect only on connections established\nafter the addition of the event listener.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The following illustrates resuming a TLS session:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const tlsSessionStore = {};\nserver.on('newSession', (id, data, cb) => {\n  tlsSessionStore[id.toString('hex')] = data;\n  cb();\n});\nserver.on('resumeSession', (id, cb) => {\n  cb(null, tlsSessionStore[id.toString('hex')] || null);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "Event: `'secureConnection'`", @@ -616,7 +534,7 @@ "type": "Buffer" } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The 'session' event is emitted on a client tls.TLSSocket when a new session\nor TLS ticket is available. This may or may not be before the handshake is\ncomplete, depending on the TLS protocol version that was negotiated. The event\nis not emitted on the server, or if a new session was not created, for example,\nwhen the connection was resumed. For some TLS protocol versions the event may be\nemitted multiple times, in which case all the sessions can be used for\nresumption.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          On the client, the session can be provided to the session option of\ntls.connect() to resume the connection.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          See Session Resumption for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For TLSv1.2 and below, tls.TLSSocket.getSession() can be called once\nthe handshake is complete. For TLSv1.3, only ticket-based resumption is allowed\nby the protocol, multiple tickets are sent, and the tickets aren't sent until\nafter the handshake completes. So it is necessary to wait for the\n'session' event to get a resumable session. Applications\nshould use the 'session' event instead of getSession() to ensure\nthey will work for all TLS versions. Applications that only expect to\nget or use one session should listen for this event only once:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tlsSocket.once('session', (session) => {\n  // The session can be used immediately or later.\n  tls.connect({\n    session: session,\n    // Other connect options...\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The 'session' event is emitted on a client tls.TLSSocket when a new session\nor TLS ticket is available. This may or may not be before the handshake is\ncomplete, depending on the TLS protocol version that was negotiated. The event\nis not emitted on the server, or if a new session was not created, for example,\nwhen the connection was resumed. For some TLS protocol versions the event may be\nemitted multiple times, in which case all the sessions can be used for\nresumption.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          On the client, the session can be provided to the session option of\ntls.connect() to resume the connection.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          See Session Resumption for more information.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For TLSv1.2 and below, tls.TLSSocket.getSession() can be called once\nthe handshake is complete. For TLSv1.3, only ticket-based resumption is allowed\nby the protocol, multiple tickets are sent, and the tickets aren't sent until\nafter the handshake completes. So it is necessary to wait for the\n'session' event to get a resumable session. Applications\nshould use the 'session' event instead of getSession() to ensure\nthey will work for all TLS versions. Applications that only expect to\nget or use one session should listen for this event only once:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tlsSocket.once('session', (session) => {\n  // The session can be used immediately or later.\n  tls.connect({\n    session: session,\n    // Other connect options...\n  });\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " } ], "methods": [ @@ -771,7 +689,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns an object representing the type, name, and size of parameter of\nan ephemeral key exchange in Perfect Forward Secrecy on a client\nconnection. It returns an empty object when the key exchange is not\nephemeral. As this is only supported on a client socket; null is returned\nif called on a server socket. The supported types are 'DH' and 'ECDH'. The\nname property is available only when type is 'ECDH'.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For example: { type: 'ECDH', name: 'prime256v1', size: 256 }.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns an object representing the type, name, and size of parameter of\nan ephemeral key exchange in perfect forward secrecy on a client\nconnection. It returns an empty object when the key exchange is not\nephemeral. As this is only supported on a client socket; null is returned\nif called on a server socket. The supported types are 'DH' and 'ECDH'. The\nname property is available only when type is 'ECDH'.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For example: { type: 'ECDH', name: 'prime256v1', size: 256 }.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`tlsSocket.getFinished()`", @@ -827,7 +745,7 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns an object representing the peer's certificate. If the peer does not\nprovide a certificate, an empty object will be returned. If the socket has been\ndestroyed, null will be returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If the full certificate chain was requested, each certificate will include an\nissuerCertificate property containing an object representing its issuer's\ncertificate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "modules": [ { - "textRaw": "Certificate Object", + "textRaw": "Certificate object", "name": "certificate_object", "meta": { "changes": [ @@ -838,9 +756,9 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          A certificate object has properties corresponding to the fields of the\ncertificate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • raw <Buffer> The DER encoded X.509 certificate data.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • subject <Object> The certificate subject, described in terms of\n Country (C:), StateOrProvince (ST), Locality (L), Organization (O),\nOrganizationalUnit (OU), and CommonName (CN). The CommonName is typically\na DNS name with TLS certificates. Example:\n{C: 'UK', ST: 'BC', L: 'Metro', O: 'Node Fans', OU: 'Docs', CN: 'example.com'}.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • issuer <Object> The certificate issuer, described in the same terms as the\n subject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • valid_from <string> The date-time the certificate is valid from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • valid_to <string> The date-time the certificate is valid to.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • serialNumber <string> The certificate serial number, as a hex string.\n Example: 'B9B0D332A1AA5635'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • fingerprint <string> The SHA-1 digest of the DER encoded certificate. It is\nreturned as a : separated hexadecimal string. Example: '2A:7A:C2:DD:...'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • fingerprint256 <string> The SHA-256 digest of the DER encoded certificate.\n It is returned as a : separated hexadecimal string. Example:\n'2A:7A:C2:DD:...'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • ext_key_usage <Array> (Optional) The extended key usage, a set of OIDs.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • subjectaltname <string> (Optional) A string containing concatenated names\nfor the subject, an alternative to the subject names.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • infoAccess <Array> (Optional) An array describing the AuthorityInfoAccess,\n used with OCSP.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • issuerCertificate <Object> (Optional) The issuer certificate object. For\n self-signed certificates, this may be a circular reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The certificate may contain information about the public key, depending on\nthe key type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For RSA keys, the following properties may be defined:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • bits <number> The RSA bit size. Example: 1024.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • exponent <string> The RSA exponent, as a string in hexadecimal number\nnotation. Example: '0x010001'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • modulus <string> The RSA modulus, as a hexadecimal string. Example:\n 'B56CE45CB7...'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • pubkey <Buffer> The public key.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For EC keys, the following properties may be defined:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • pubkey <Buffer> The public key.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • bits <number> The key size in bits. Example: 256.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • asn1Curve <string> (Optional) The ASN.1 name of the OID of the elliptic\ncurve. Well-known curves are identified by an OID. While it is unusual, it is\npossible that the curve is identified by its mathematical properties, in which\ncase it will not have an OID. Example: 'prime256v1'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • nistCurve <string> (Optional) The NIST name for the elliptic curve, if it\nhas one (not all well-known curves have been assigned names by NIST). Example:\n'P-256'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Example certificate:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          { subject:\n   { OU: [ 'Domain Control Validated', 'PositiveSSL Wildcard' ],\n     CN: '*.nodejs.org' },\n  issuer:\n   { C: 'GB',\n     ST: 'Greater Manchester',\n     L: 'Salford',\n     O: 'COMODO CA Limited',\n     CN: 'COMODO RSA Domain Validation Secure Server CA' },\n  subjectaltname: 'DNS:*.nodejs.org, DNS:nodejs.org',\n  infoAccess:\n   { 'CA Issuers - URI':\n      [ 'http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt' ],\n     'OCSP - URI': [ 'http://ocsp.comodoca.com' ] },\n  modulus: 'B56CE45CB740B09A13F64AC543B712FF9EE8E4C284B542A1708A27E82A8D151CA178153E12E6DDA15BF70FFD96CB8A88618641BDFCCA03527E665B70D779C8A349A6F88FD4EF6557180BD4C98192872BCFE3AF56E863C09DDD8BC1EC58DF9D94F914F0369102B2870BECFA1348A0838C9C49BD1C20124B442477572347047506B1FCD658A80D0C44BCC16BC5C5496CFE6E4A8428EF654CD3D8972BF6E5BFAD59C93006830B5EB1056BBB38B53D1464FA6E02BFDF2FF66CD949486F0775EC43034EC2602AEFBF1703AD221DAA2A88353C3B6A688EFE8387811F645CEED7B3FE46E1F8B9F59FAD028F349B9BC14211D5830994D055EEA3D547911E07A0ADDEB8A82B9188E58720D95CD478EEC9AF1F17BE8141BE80906F1A339445A7EB5B285F68039B0F294598A7D1C0005FC22B5271B0752F58CCDEF8C8FD856FB7AE21C80B8A2CE983AE94046E53EDE4CB89F42502D31B5360771C01C80155918637490550E3F555E2EE75CC8C636DDE3633CFEDD62E91BF0F7688273694EEEBA20C2FC9F14A2A435517BC1D7373922463409AB603295CEB0BB53787A334C9CA3CA8B30005C5A62FC0715083462E00719A8FA3ED0A9828C3871360A73F8B04A4FC1E71302844E9BB9940B77E745C9D91F226D71AFCAD4B113AAF68D92B24DDB4A2136B55A1CD1ADF39605B63CB639038ED0F4C987689866743A68769CC55847E4A06D6E2E3F1',\n  exponent: '0x10001',\n  pubkey: <Buffer ... >,\n  valid_from: 'Aug 14 00:00:00 2017 GMT',\n  valid_to: 'Nov 20 23:59:59 2019 GMT',\n  fingerprint: '01:02:59:D9:C3:D2:0D:08:F7:82:4E:44:A4:B4:53:C5:E2:3A:87:4D',\n  fingerprint256: '69:AE:1A:6A:D4:3D:C6:C1:1B:EA:C6:23:DE:BA:2A:14:62:62:93:5C:7A:EA:06:41:9B:0B:BC:87:CE:48:4E:02',\n  ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ],\n  serialNumber: '66593D57F20CBC573E433381B5FEC280',\n  raw: <Buffer ... > }\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          A certificate object has properties corresponding to the fields of the\ncertificate.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • raw <Buffer> The DER encoded X.509 certificate data.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • subject <Object> The certificate subject, described in terms of\n Country (C:), StateOrProvince (ST), Locality (L), Organization (O),\nOrganizationalUnit (OU), and CommonName (CN). The CommonName is typically\na DNS name with TLS certificates. Example:\n{C: 'UK', ST: 'BC', L: 'Metro', O: 'Node Fans', OU: 'Docs', CN: 'example.com'}.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • issuer <Object> The certificate issuer, described in the same terms as the\n subject.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • valid_from <string> The date-time the certificate is valid from.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • valid_to <string> The date-time the certificate is valid to.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • serialNumber <string> The certificate serial number, as a hex string.\n Example: 'B9B0D332A1AA5635'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • fingerprint <string> The SHA-1 digest of the DER encoded certificate. It is\nreturned as a : separated hexadecimal string. Example: '2A:7A:C2:DD:...'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • fingerprint256 <string> The SHA-256 digest of the DER encoded certificate.\n It is returned as a : separated hexadecimal string. Example:\n'2A:7A:C2:DD:...'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • ext_key_usage <Array> (Optional) The extended key usage, a set of OIDs.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • subjectaltname <string> (Optional) A string containing concatenated names\nfor the subject, an alternative to the subject names.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • infoAccess <Array> (Optional) An array describing the AuthorityInfoAccess,\n used with OCSP.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • issuerCertificate <Object> (Optional) The issuer certificate object. For\n self-signed certificates, this may be a circular reference.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The certificate may contain information about the public key, depending on\nthe key type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For RSA keys, the following properties may be defined:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • bits <number> The RSA bit size. Example: 1024.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • exponent <string> The RSA exponent, as a string in hexadecimal number\nnotation. Example: '0x010001'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • modulus <string> The RSA modulus, as a hexadecimal string. Example:\n 'B56CE45CB7...'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • pubkey <Buffer> The public key.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          For EC keys, the following properties may be defined:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • pubkey <Buffer> The public key.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • bits <number> The key size in bits. Example: 256.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • asn1Curve <string> (Optional) The ASN.1 name of the OID of the elliptic\ncurve. Well-known curves are identified by an OID. While it is unusual, it is\npossible that the curve is identified by its mathematical properties, in which\ncase it will not have an OID. Example: 'prime256v1'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • nistCurve <string> (Optional) The NIST name for the elliptic curve, if it\nhas one (not all well-known curves have been assigned names by NIST). Example:\n'P-256'.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Example certificate:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          { subject:\n   { OU: [ 'Domain Control Validated', 'PositiveSSL Wildcard' ],\n     CN: '*.nodejs.org' },\n  issuer:\n   { C: 'GB',\n     ST: 'Greater Manchester',\n     L: 'Salford',\n     O: 'COMODO CA Limited',\n     CN: 'COMODO RSA Domain Validation Secure Server CA' },\n  subjectaltname: 'DNS:*.nodejs.org, DNS:nodejs.org',\n  infoAccess:\n   { 'CA Issuers - URI':\n      [ 'http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt' ],\n     'OCSP - URI': [ 'http://ocsp.comodoca.com' ] },\n  modulus: 'B56CE45CB740B09A13F64AC543B712FF9EE8E4C284B542A1708A27E82A8D151CA178153E12E6DDA15BF70FFD96CB8A88618641BDFCCA03527E665B70D779C8A349A6F88FD4EF6557180BD4C98192872BCFE3AF56E863C09DDD8BC1EC58DF9D94F914F0369102B2870BECFA1348A0838C9C49BD1C20124B442477572347047506B1FCD658A80D0C44BCC16BC5C5496CFE6E4A8428EF654CD3D8972BF6E5BFAD59C93006830B5EB1056BBB38B53D1464FA6E02BFDF2FF66CD949486F0775EC43034EC2602AEFBF1703AD221DAA2A88353C3B6A688EFE8387811F645CEED7B3FE46E1F8B9F59FAD028F349B9BC14211D5830994D055EEA3D547911E07A0ADDEB8A82B9188E58720D95CD478EEC9AF1F17BE8141BE80906F1A339445A7EB5B285F68039B0F294598A7D1C0005FC22B5271B0752F58CCDEF8C8FD856FB7AE21C80B8A2CE983AE94046E53EDE4CB89F42502D31B5360771C01C80155918637490550E3F555E2EE75CC8C636DDE3633CFEDD62E91BF0F7688273694EEEBA20C2FC9F14A2A435517BC1D7373922463409AB603295CEB0BB53787A334C9CA3CA8B30005C5A62FC0715083462E00719A8FA3ED0A9828C3871360A73F8B04A4FC1E71302844E9BB9940B77E745C9D91F226D71AFCAD4B113AAF68D92B24DDB4A2136B55A1CD1ADF39605B63CB639038ED0F4C987689866743A68769CC55847E4A06D6E2E3F1',\n  exponent: '0x10001',\n  pubkey: <Buffer ... >,\n  valid_from: 'Aug 14 00:00:00 2017 GMT',\n  valid_to: 'Nov 20 23:59:59 2019 GMT',\n  fingerprint: '01:02:59:D9:C3:D2:0D:08:F7:82:4E:44:A4:B4:53:C5:E2:3A:87:4D',\n  fingerprint256: '69:AE:1A:6A:D4:3D:C6:C1:1B:EA:C6:23:DE:BA:2A:14:62:62:93:5C:7A:EA:06:41:9B:0B:BC:87:CE:48:4E:02',\n  ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ],\n  serialNumber: '66593D57F20CBC573E433381B5FEC280',\n  raw: <Buffer ... > }\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ", "type": "module", - "displayName": "Certificate Object" + "displayName": "Certificate object" } ] }, @@ -1286,7 +1204,13 @@ "added": [ "v0.8.4" ], - "changes": [] + "changes": [ + { + "version": "v12.22.9", + "pr-url": "https://github.com/nodejs-private/node-private/pull/300", + "description": "Support for `uniformResourceIdentifier` subject alternative names has been disabled in response to CVE-2021-44531." + } + ] }, "signatures": [ { @@ -1311,7 +1235,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Verifies the certificate cert is issued to hostname.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns <Error> object, populating it with reason, host, and cert on\nfailure. On success, returns <undefined>.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This function can be overwritten by providing alternative function as part of\nthe options.checkServerIdentity option passed to tls.connect(). The\noverwriting function can call tls.checkServerIdentity() of course, to augment\nthe checks done with additional verification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This function is only called if the certificate passed all other checks, such as\nbeing issued by trusted CA (options.ca).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Verifies the certificate cert is issued to hostname.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns <Error> object, populating it with reason, host, and cert on\nfailure. On success, returns <undefined>.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This function can be overwritten by providing alternative function as part of\nthe options.checkServerIdentity option passed to tls.connect(). The\noverwriting function can call tls.checkServerIdentity() of course, to augment\nthe checks done with additional verification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          This function is only called if the certificate passed all other checks, such as\nbeing issued by trusted CA (options.ca).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Earlier versions of Node.js incorrectly accepted certificates for a given\nhostname if a matching uniformResourceIdentifier subject alternative name\nwas present (see CVE-2021-44531). Applications that wish to accept\nuniformResourceIdentifier subject alternative names can use a custom\noptions.checkServerIdentity function that implements the desired behavior.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`tls.connect(options[, callback])`", @@ -1500,7 +1424,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The callback function, if specified, will be added as a listener for the\n'secureConnect' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tls.connect() returns a tls.TLSSocket object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The following illustrates a client for the echo server example from\ntls.createServer():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          // Assumes an echo server that is listening on port 8000.\nconst tls = require('tls');\nconst fs = require('fs');\n\nconst options = {\n  // Necessary only if the server requires client certificate authentication.\n  key: fs.readFileSync('client-key.pem'),\n  cert: fs.readFileSync('client-cert.pem'),\n\n  // Necessary only if the server uses a self-signed certificate.\n  ca: [ fs.readFileSync('server-cert.pem') ],\n\n  // Necessary only if the server's cert isn't for \"localhost\".\n  checkServerIdentity: () => { return null; },\n};\n\nconst socket = tls.connect(8000, options, () => {\n  console.log('client connected',\n              socket.authorized ? 'authorized' : 'unauthorized');\n  process.stdin.pipe(socket);\n  process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', (data) => {\n  console.log(data);\n});\nsocket.on('end', () => {\n  console.log('server ends connection');\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The callback function, if specified, will be added as a listener for the\n'secureConnect' event.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tls.connect() returns a tls.TLSSocket object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Unlike the https API, tls.connect() does not enable the\nSNI (Server Name Indication) extension by default, which may cause some\nservers to return an incorrect certificate or reject the connection\naltogether. To enable SNI, set the servername option in addition\nto host.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The following illustrates a client for the echo server example from\ntls.createServer():

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          // Assumes an echo server that is listening on port 8000.\nconst tls = require('tls');\nconst fs = require('fs');\n\nconst options = {\n  // Necessary only if the server requires client certificate authentication.\n  key: fs.readFileSync('client-key.pem'),\n  cert: fs.readFileSync('client-cert.pem'),\n\n  // Necessary only if the server uses a self-signed certificate.\n  ca: [ fs.readFileSync('server-cert.pem') ],\n\n  // Necessary only if the server's cert isn't for \"localhost\".\n  checkServerIdentity: () => { return null; },\n};\n\nconst socket = tls.connect(8000, options, () => {\n  console.log('client connected',\n              socket.authorized ? 'authorized' : 'unauthorized');\n  process.stdin.pipe(socket);\n  process.stdin.resume();\n});\nsocket.setEncoding('utf8');\nsocket.on('data', (data) => {\n  console.log(data);\n});\nsocket.on('end', () => {\n  console.log('server ends connection');\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`tls.connect(path[, options][, callback])`", @@ -1696,10 +1620,10 @@ "desc": "PEM formatted CRLs (Certificate Revocation Lists)." }, { - "textRaw": "`dhparam` {string|Buffer} Diffie Hellman parameters, required for [Perfect Forward Secrecy][]. Use `openssl dhparam` to create the parameters. The key length must be greater than or equal to 1024 bits or else an error will be thrown. Although 1024 bits is permissible, use 2048 bits or larger for stronger security. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available.", + "textRaw": "`dhparam` {string|Buffer} Diffie-Hellman parameters, required for [perfect forward secrecy][]. Use `openssl dhparam` to create the parameters. The key length must be greater than or equal to 1024 bits or else an error will be thrown. Although 1024 bits is permissible, use 2048 bits or larger for stronger security. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available.", "name": "dhparam", "type": "string|Buffer", - "desc": "Diffie Hellman parameters, required for [Perfect Forward Secrecy][]. Use `openssl dhparam` to create the parameters. The key length must be greater than or equal to 1024 bits or else an error will be thrown. Although 1024 bits is permissible, use 2048 bits or larger for stronger security. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available." + "desc": "Diffie-Hellman parameters, required for [perfect forward secrecy][]. Use `openssl dhparam` to create the parameters. The key length must be greater than or equal to 1024 bits or else an error will be thrown. Although 1024 bits is permissible, use 2048 bits or larger for stronger security. If omitted or invalid, the parameters are silently discarded and DHE ciphers will not be available." }, { "textRaw": "`ecdhCurve` {string} A string describing a named curve or a colon separated list of curve NIDs or names, for example `P-521:P-384:P-256`, to use for ECDH key agreement. Set to `auto` to select the curve automatically. Use [`crypto.getCurves()`][] to obtain a list of available curve names. On recent releases, `openssl ecparam -list_curves` will also display the name and description of each available elliptic curve. **Default:** [`tls.DEFAULT_ECDH_CURVE`][].", @@ -1776,13 +1700,139 @@ "name": "sessionIdContext", "type": "string", "desc": "Opaque identifier used by servers to ensure session state is not shared between applications. Unused by clients." + }, + { + "textRaw": "`ticketKeys`: {Buffer} 48-bytes of cryptographically strong pseudo-random data. See [Session Resumption][] for more information.", + "name": "ticketKeys", + "type": "Buffer", + "desc": "48-bytes of cryptographically strong pseudo-random data. See [Session Resumption][] for more information." + }, + { + "textRaw": "`sessionTimeout` {number} The number of seconds after which a TLS session created by the server will no longer be resumable. See [Session Resumption][] for more information. **Default:** `300`.", + "name": "sessionTimeout", + "type": "number", + "default": "`300`", + "desc": "The number of seconds after which a TLS session created by the server will no longer be resumable. See [Session Resumption][] for more information." + } + ] + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tls.createServer() sets the default value of the honorCipherOrder option\nto true, other APIs that create secure contexts leave it unset.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tls.createServer() uses a 128 bit truncated SHA1 hash value generated\nfrom process.argv as the default value of the sessionIdContext option, other\nAPIs that create secure contexts have no default value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The tls.createSecureContext() method creates a SecureContext object. It is\nusable as an argument to several tls APIs, such as tls.createServer()\nand server.addContext(), but has no public methods.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          A key is required for ciphers that use certificates. Either key or\npfx can be used to provide it.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If the ca option is not given, then Node.js will default to using\nMozilla's publicly trusted list of CAs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + }, + { + "textRaw": "`tls.createSecurePair([context][, isServer][, requestCert][, rejectUnauthorized][, options])`", + "type": "method", + "name": "createSecurePair", + "meta": { + "added": [ + "v0.3.2" + ], + "deprecated": [ + "v0.11.3" + ], + "changes": [ + { + "version": "v5.0.0", + "pr-url": "https://github.com/nodejs/node/pull/2564", + "description": "ALPN options are supported now." + } + ] + }, + "stability": 0, + "stabilityText": "Deprecated: Use [`tls.TLSSocket`][] instead.", + "signatures": [ + { + "params": [ + { + "textRaw": "`context` {Object} A secure context object as returned by `tls.createSecureContext()`", + "name": "context", + "type": "Object", + "desc": "A secure context object as returned by `tls.createSecureContext()`" + }, + { + "textRaw": "`isServer` {boolean} `true` to specify that this TLS connection should be opened as a server.", + "name": "isServer", + "type": "boolean", + "desc": "`true` to specify that this TLS connection should be opened as a server." + }, + { + "textRaw": "`requestCert` {boolean} `true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`.", + "name": "requestCert", + "type": "boolean", + "desc": "`true` to specify whether a server should request a certificate from a connecting client. Only applies when `isServer` is `true`." + }, + { + "textRaw": "`rejectUnauthorized` {boolean} If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`.", + "name": "rejectUnauthorized", + "type": "boolean", + "desc": "If not `false` a server automatically reject clients with invalid certificates. Only applies when `isServer` is `true`." + }, + { + "textRaw": "`options`", + "name": "options", + "options": [ + { + "textRaw": "`enableTrace`: See [`tls.createServer()`][]", + "name": "enableTrace", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`secureContext`: A TLS context object from [`tls.createSecureContext()`][]", + "name": "secureContext", + "desc": "A TLS context object from [`tls.createSecureContext()`][]" + }, + { + "textRaw": "`isServer`: If `true` the TLS socket will be instantiated in server-mode. **Default:** `false`.", + "name": "isServer", + "default": "`false`", + "desc": "If `true` the TLS socket will be instantiated in server-mode." + }, + { + "textRaw": "`server` {net.Server} A [`net.Server`][] instance", + "name": "server", + "type": "net.Server", + "desc": "A [`net.Server`][] instance" + }, + { + "textRaw": "`requestCert`: See [`tls.createServer()`][]", + "name": "requestCert", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`rejectUnauthorized`: See [`tls.createServer()`][]", + "name": "rejectUnauthorized", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`ALPNProtocols`: See [`tls.createServer()`][]", + "name": "ALPNProtocols", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`SNICallback`: See [`tls.createServer()`][]", + "name": "SNICallback", + "desc": "See [`tls.createServer()`][]" + }, + { + "textRaw": "`session` {Buffer} A `Buffer` instance containing a TLS session.", + "name": "session", + "type": "Buffer", + "desc": "A `Buffer` instance containing a TLS session." + }, + { + "textRaw": "`requestOCSP` {boolean} If `true`, specifies that the OCSP status request extension will be added to the client hello and an `'OCSPResponse'` event will be emitted on the socket before establishing a secure communication.", + "name": "requestOCSP", + "type": "boolean", + "desc": "If `true`, specifies that the OCSP status request extension will be added to the client hello and an `'OCSPResponse'` event will be emitted on the socket before establishing a secure communication." } ] } ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tls.createServer() sets the default value of the honorCipherOrder option\nto true, other APIs that create secure contexts leave it unset.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tls.createServer() uses a 128 bit truncated SHA1 hash value generated\nfrom process.argv as the default value of the sessionIdContext option, other\nAPIs that create secure contexts have no default value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The tls.createSecureContext() method creates a SecureContext object. It is\nusable as an argument to several tls APIs, such as tls.createServer()\nand server.addContext(), but has no public methods.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          A key is required for ciphers that make use of certificates. Either key or\npfx can be used to provide it.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          If the ca option is not given, then Node.js will default to using\nMozilla's publicly trusted list of CAs.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Creates a new secure pair object with two streams, one of which reads and writes\nthe encrypted data and the other of which reads and writes the cleartext data.\nGenerally, the encrypted stream is piped to/from an incoming encrypted data\nstream and the cleartext one is used as a replacement for the initial encrypted\nstream.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          tls.createSecurePair() returns a tls.SecurePair object with cleartext and\nencrypted stream properties.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Using cleartext has the same API as tls.TLSSocket.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The tls.createSecurePair() method is now deprecated in favor of\ntls.TLSSocket(). For example, the code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          pair = tls.createSecurePair(/* ... */);\npair.encrypted.pipe(socket);\nsocket.pipe(pair.encrypted);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          can be replaced by:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          secureSocket = tls.TLSSocket(socket, options);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          where secureSocket has the same API as pair.cleartext.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`tls.createServer([options][, secureConnectionListener])`", @@ -1876,9 +1926,9 @@ "desc": "The number of seconds after which a TLS session created by the server will no longer be resumable. See [Session Resumption][] for more information." }, { - "textRaw": "`SNICallback(servername, cb)` {Function} A function that will be called if the client supports SNI TLS extension. Two arguments will be passed when called: `servername` and `cb`. `SNICallback` should invoke `cb(null, ctx)`, where `ctx` is a `SecureContext` instance. (`tls.createSecureContext(...)` can be used to get a proper `SecureContext`.) If `SNICallback` wasn't provided the default callback with high-level API will be used (see below).", + "textRaw": "`SNICallback(servername, callback)` {Function} A function that will be called if the client supports SNI TLS extension. Two arguments will be passed when called: `servername` and `callback`. `callback` is an error-first callback that takes two optional arguments: `error` and `ctx`. `ctx`, if provided, is a `SecureContext` instance. [`tls.createSecureContext()`][] can be used to get a proper `SecureContext`. If `callback` is called with a falsy `ctx` argument, the default secure context of the server will be used. If `SNICallback` wasn't provided the default callback with high-level API will be used (see below).", "name": "SNICallback(servername,", - "desc": "cb)` {Function} A function that will be called if the client supports SNI TLS extension. Two arguments will be passed when called: `servername` and `cb`. `SNICallback` should invoke `cb(null, ctx)`, where `ctx` is a `SecureContext` instance. (`tls.createSecureContext(...)` can be used to get a proper `SecureContext`.) If `SNICallback` wasn't provided the default callback with high-level API will be used (see below)." + "desc": "callback)` {Function} A function that will be called if the client supports SNI TLS extension. Two arguments will be passed when called: `servername` and `callback`. `callback` is an error-first callback that takes two optional arguments: `error` and `ctx`. `ctx`, if provided, is a `SecureContext` instance. [`tls.createSecureContext()`][] can be used to get a proper `SecureContext`. If `callback` is called with a falsy `ctx` argument, the default secure context of the server will be used. If `SNICallback` wasn't provided the default callback with high-level API will be used (see below)." }, { "textRaw": "`ticketKeys`: {Buffer} 48-bytes of cryptographically strong pseudo-random data. See [Session Resumption][] for more information.", @@ -1973,7 +2023,7 @@ ], "changes": [] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          An immutable array of strings representing the root certificates (in PEM format)\nused for verifying peer certificates. This is the default value of the ca\noption to tls.createSecureContext().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          An immutable array of strings representing the root certificates (in PEM format)\nfrom the bundled Mozilla CA store as supplied by current Node.js version.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          The bundled CA store, as supplied by Node.js, is a snapshot of Mozilla CA store\nthat is fixed at release time. It is identical on all supported platforms.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          " }, { "textRaw": "`tls.DEFAULT_ECDH_CURVE`", @@ -2016,7 +2066,7 @@ "changes": [] }, "default": "`'TLSv1.2'`, unless changed using CLI options. Using `--tls-min-v1.0` sets the default to `'TLSv1'`. Using `--tls-min-v1.1` sets the default to `'TLSv1.1'`. Using `--tls-min-v1.3` sets the default to `'TLSv1.3'`. If multiple of the options are provided, the lowest minimum is used", - "desc": "The default value of the `minVersion` option of [`tls.createSecureContext()`][]. It can be assigned any of the supported TLS protocol versions, `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`." + "shortDesc": "The default value of the `minVersion` option of [`tls.createSecureContext()`][]. It can be assigned any of the supported TLS protocol versions, `'TLSv1.3'`, `'TLSv1.2'`, `'TLSv1.1'`, or `'TLSv1'`." } ], "type": "module", diff -Nru nodejs-mozilla-12.18.1/doc/api/tls.md nodejs-mozilla-12.22.12/doc/api/tls.md --- nodejs-mozilla-12.18.1/doc/api/tls.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tls.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `tls` module provides an implementation of the Transport Layer Security (TLS) and Secure Socket Layer (SSL) protocols that is built on top of OpenSSL. The module can be accessed using: @@ -12,7 +14,7 @@ const tls = require('tls'); ``` -## TLS/SSL Concepts +## TLS/SSL concepts The TLS/SSL is a public/private key infrastructure (PKI). For most common cases, each client and server must have a *private key*. @@ -21,7 +23,7 @@ use of the OpenSSL command-line interface to generate a 2048-bit RSA private key: -```sh +```bash openssl genrsa -out ryans-key.pem 2048 ``` @@ -35,7 +37,7 @@ The OpenSSL command-line interface can be used to generate a CSR for a private key: -```sh +```bash openssl req -new -sha256 -key ryans-key.pem -out ryans-csr.pem ``` @@ -45,14 +47,14 @@ Creating a self-signed certificate using the OpenSSL command-line interface is illustrated in the example below: -```sh +```bash openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem ``` Once the certificate is generated, it can be used to generate a `.pfx` or `.p12` file: -```sh +```bash openssl pkcs12 -export -in ryans-cert.pem -inkey ryans-key.pem \ -certfile ca-cert.pem -out ryans.pfx ``` @@ -64,11 +66,11 @@ * `certfile`: is a concatenation of all Certificate Authority (CA) certs into a single file, e.g. `cat ca1-cert.pem ca2-cert.pem > ca-cert.pem` -### Perfect Forward Secrecy +### Perfect forward secrecy -The term "[Forward Secrecy][]" or "Perfect Forward Secrecy" describes a feature +The term _[forward secrecy][]_ or _perfect forward secrecy_ describes a feature of key-agreement (i.e., key-exchange) methods. That is, the server and client keys are used to negotiate new temporary keys that are used specifically and only for the current communication session. Practically, this means that even @@ -76,35 +78,35 @@ by eavesdroppers if the attacker manages to obtain the key-pair specifically generated for the session. -Perfect Forward Secrecy is achieved by randomly generating a key pair for +Perfect forward secrecy is achieved by randomly generating a key pair for key-agreement on every TLS/SSL handshake (in contrast to using the same key for all sessions). Methods implementing this technique are called "ephemeral". -Currently two methods are commonly used to achieve Perfect Forward Secrecy (note +Currently two methods are commonly used to achieve perfect forward secrecy (note the character "E" appended to the traditional abbreviations): -* [DHE][]: An ephemeral version of the Diffie Hellman key-agreement protocol. -* [ECDHE][]: An ephemeral version of the Elliptic Curve Diffie Hellman +* [DHE][]: An ephemeral version of the Diffie-Hellman key-agreement protocol. +* [ECDHE][]: An ephemeral version of the Elliptic Curve Diffie-Hellman key-agreement protocol. Ephemeral methods may have some performance drawbacks, because key generation is expensive. -To use Perfect Forward Secrecy using `DHE` with the `tls` module, it is required +To use perfect forward secrecy using `DHE` with the `tls` module, it is required to generate Diffie-Hellman parameters and specify them with the `dhparam` option to [`tls.createSecureContext()`][]. The following illustrates the use of the OpenSSL command-line interface to generate such parameters: -```sh +```bash openssl dhparam -outform PEM -out dhparam.pem 2048 ``` -If using Perfect Forward Secrecy using `ECDHE`, Diffie-Hellman parameters are +If using perfect forward secrecy using `ECDHE`, Diffie-Hellman parameters are not required and a default ECDHE curve will be used. The `ecdhCurve` property can be used when creating a TLS Server to specify the list of names of supported curves to use, see [`tls.createServer()`][] for more info. -Perfect Forward Secrecy was optional up to TLSv1.2, but it is not optional for +Perfect forward secrecy was optional up to TLSv1.2, but it is not optional for TLSv1.3, because all TLSv1.3 cipher suites use ECDHE. ### ALPN and SNI @@ -175,13 +177,15 @@ TLSv1.3 does not support renegotiation. -### Session Resumption +### Session resumption Establishing a TLS session can be relatively slow. The process can be sped up by saving and later reusing the session state. There are several mechanisms to do so, discussed here from oldest to newest (and preferred). -***Session Identifiers*** Servers generate a unique ID for new connections and +#### Session identifiers + +Servers generate a unique ID for new connections and send it to the client. Clients and servers save the session state. When reconnecting, clients send the ID of their saved session state and if the server also has the state for that ID, it can agree to use it. Otherwise, the server @@ -200,7 +204,9 @@ servers must use a shared session cache (such as Redis) in their session handlers. -***Session Tickets*** The servers encrypt the entire session state and send it +#### Session tickets + +The servers encrypt the entire session state and send it to the client as a "ticket". When reconnecting, the state is sent to the server in the initial connection. This mechanism avoids the need for server-side session cache. If the server doesn't use the ticket, for any reason (failure @@ -250,7 +256,7 @@ OpenSSL CLI can be used to verify that servers are resuming sessions. Use the `-reconnect` option to `openssl s_client`, for example: -```sh +```console $ openssl s_client -connect localhost:443 -reconnect ``` @@ -267,35 +273,38 @@ Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256 ``` -## Modifying the Default TLS Cipher suite - -Node.js is built with a default suite of enabled and disabled TLS ciphers. -Currently, the default cipher suite is: +## Modifying the default TLS cipher suite -```txt -TLS_AES_256_GCM_SHA384: -TLS_CHACHA20_POLY1305_SHA256: -TLS_AES_128_GCM_SHA256: -ECDHE-RSA-AES128-GCM-SHA256: -ECDHE-ECDSA-AES128-GCM-SHA256: -ECDHE-RSA-AES256-GCM-SHA384: -ECDHE-ECDSA-AES256-GCM-SHA384: -DHE-RSA-AES128-GCM-SHA256: -ECDHE-RSA-AES128-SHA256: -DHE-RSA-AES128-SHA256: -ECDHE-RSA-AES256-SHA384: -DHE-RSA-AES256-SHA384: -ECDHE-RSA-AES256-SHA256: -DHE-RSA-AES256-SHA256: -HIGH: -!aNULL: -!eNULL: -!EXPORT: -!DES: -!RC4: -!MD5: -!PSK: -!SRP: +Node.js is built with a default suite of enabled and disabled TLS ciphers. This +default cipher list can be configured when building Node.js to allow +distributions to provide their own default list. + +The following command can be used to show the default cipher suite: +```console +node -p crypto.constants.defaultCoreCipherList | tr ':' '\n' +TLS_AES_256_GCM_SHA384 +TLS_CHACHA20_POLY1305_SHA256 +TLS_AES_128_GCM_SHA256 +ECDHE-RSA-AES128-GCM-SHA256 +ECDHE-ECDSA-AES128-GCM-SHA256 +ECDHE-RSA-AES256-GCM-SHA384 +ECDHE-ECDSA-AES256-GCM-SHA384 +DHE-RSA-AES128-GCM-SHA256 +ECDHE-RSA-AES128-SHA256 +DHE-RSA-AES128-SHA256 +ECDHE-RSA-AES256-SHA384 +DHE-RSA-AES256-SHA384 +ECDHE-RSA-AES256-SHA256 +DHE-RSA-AES256-SHA256 +HIGH +!aNULL +!eNULL +!EXPORT +!DES +!RC4 +!MD5 +!PSK +!SRP !CAMELLIA ``` @@ -304,10 +313,10 @@ instance, the following makes `ECDHE-RSA-AES128-GCM-SHA256:!RC4` the default TLS cipher suite: -```sh -node --tls-cipher-list="ECDHE-RSA-AES128-GCM-SHA256:!RC4" server.js +```bash +node --tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4' server.js -export NODE_OPTIONS=--tls-cipher-list="ECDHE-RSA-AES128-GCM-SHA256:!RC4" +export NODE_OPTIONS=--tls-cipher-list='ECDHE-RSA-AES128-GCM-SHA256:!RC4' node server.js ``` @@ -318,9 +327,9 @@ The ciphers list can contain a mixture of TLSv1.3 cipher suite names, the ones that start with `'TLS_'`, and specifications for TLSv1.2 and below cipher -suites. The TLSv1.2 ciphers support a legacy specification format, consult +suites. The TLSv1.2 ciphers support a legacy specification format, consult the OpenSSL [cipher list format][] documentation for details, but those -specifications do *not* apply to TLSv1.3 ciphers. The TLSv1.3 suites can only +specifications do *not* apply to TLSv1.3 ciphers. The TLSv1.3 suites can only be enabled by including their full name in the cipher list. They cannot, for example, be enabled or disabled by using the legacy TLSv1.2 `'EECDH'` or `'!EECDH'` specification. @@ -337,8 +346,8 @@ used only if absolutely necessary. The default cipher suite prefers GCM ciphers for [Chrome's 'modern -cryptography' setting][] and also prefers ECDHE and DHE ciphers for Perfect -Forward Secrecy, while offering *some* backward compatibility. +cryptography' setting][] and also prefers ECDHE and DHE ciphers for perfect +forward secrecy, while offering *some* backward compatibility. 128 bit AES is preferred over 192 and 256 bit AES in light of [specific attacks affecting larger AES key sizes][]. @@ -361,6 +370,51 @@ by TLSv1.3 because they may be more performant on constrained systems, but they are not enabled by default since they offer less security. +## Class: `tls.CryptoStream` + + +> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead. + +The `tls.CryptoStream` class represents a stream of encrypted data. This class +is deprecated and should no longer be used. + +### `cryptoStream.bytesWritten` + + +The `cryptoStream.bytesWritten` property returns the total number of bytes +written to the underlying socket *including* the bytes required for the +implementation of the TLS protocol. + +## Class: `tls.SecurePair` + + +> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead. + +Returned by [`tls.createSecurePair()`][]. + +### Event: `'secure'` + + +The `'secure'` event is emitted by the `SecurePair` object once a secure +connection has been established. + +As with checking for the server +[`'secureConnection'`](#tls_event_secureconnection) +event, `pair.cleartext.authorized` should be inspected to confirm whether the +certificate used is properly authorized. + ## Class: `tls.Server` + +* `socket` {stream.Duplex} + +This event is emitted when a new TCP stream is established, before the TLS +handshake begins. `socket` is typically an object of type [`net.Socket`][]. +Usually users will not want to access this event. + +This event can also be explicitly emitted by users to inject connections +into the TLS server. In that case, any [`Duplex`][] stream can be passed. + ### Event: `'keylog'` The `'newSession'` event is emitted upon creation of a new TLS session. This may @@ -761,12 +833,12 @@ See [Session Resumption][] for more information. For TLSv1.2 and below, [`tls.TLSSocket.getSession()`][] can be called once -the handshake is complete. For TLSv1.3, only ticket-based resumption is allowed +the handshake is complete. For TLSv1.3, only ticket-based resumption is allowed by the protocol, multiple tickets are sent, and the tickets aren't sent until after the handshake completes. So it is necessary to wait for the -`'session'` event to get a resumable session. Applications +`'session'` event to get a resumable session. Applications should use the `'session'` event instead of `getSession()` to ensure -they will work for all TLS versions. Applications that only expect to +they will work for all TLS versions. Applications that only expect to get or use one session should listen for this event only once: ```js @@ -895,7 +967,7 @@ * Returns: {Object} Returns an object representing the type, name, and size of parameter of -an ephemeral key exchange in [Perfect Forward Secrecy][] on a client +an ephemeral key exchange in [perfect forward secrecy][] on a client connection. It returns an empty object when the key exchange is not ephemeral. As this is only supported on a client socket; `null` is returned if called on a server socket. The supported types are `'DH'` and `'ECDH'`. The @@ -937,7 +1009,7 @@ `issuerCertificate` property containing an object representing its issuer's certificate. -#### Certificate Object +#### Certificate object +```js { subject: { OU: [ 'Domain Control Validated', 'PositiveSSL Wildcard' ], CN: '*.nodejs.org' }, @@ -1250,6 +1323,11 @@ ## `tls.checkServerIdentity(hostname, cert)` * `hostname` {string} The host name or IP address to verify the certificate @@ -1270,6 +1348,12 @@ This function is only called if the certificate passed all other checks, such as being issued by trusted CA (`options.ca`). +Earlier versions of Node.js incorrectly accepted certificates for a given +`hostname` if a matching `uniformResourceIdentifier` subject alternative name +was present (see [CVE-2021-44531][]). Applications that wish to accept +`uniformResourceIdentifier` subject alternative names can use a custom +`options.checkServerIdentity` function that implements the desired behavior. + ## `tls.connect(options[, callback])` + +> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead. + +* `context` {Object} A secure context object as returned by + `tls.createSecureContext()` +* `isServer` {boolean} `true` to specify that this TLS connection should be + opened as a server. +* `requestCert` {boolean} `true` to specify whether a server should request a + certificate from a connecting client. Only applies when `isServer` is `true`. +* `rejectUnauthorized` {boolean} If not `false` a server automatically reject + clients with invalid certificates. Only applies when `isServer` is `true`. +* `options` + * `enableTrace`: See [`tls.createServer()`][] + * `secureContext`: A TLS context object from [`tls.createSecureContext()`][] + * `isServer`: If `true` the TLS socket will be instantiated in server-mode. + **Default:** `false`. + * `server` {net.Server} A [`net.Server`][] instance + * `requestCert`: See [`tls.createServer()`][] + * `rejectUnauthorized`: See [`tls.createServer()`][] + * `ALPNProtocols`: See [`tls.createServer()`][] + * `SNICallback`: See [`tls.createServer()`][] + * `session` {Buffer} A `Buffer` instance containing a TLS session. + * `requestOCSP` {boolean} If `true`, specifies that the OCSP status request + extension will be added to the client hello and an `'OCSPResponse'` event + will be emitted on the socket before establishing a secure communication. + +Creates a new secure pair object with two streams, one of which reads and writes +the encrypted data and the other of which reads and writes the cleartext data. +Generally, the encrypted stream is piped to/from an incoming encrypted data +stream and the cleartext one is used as a replacement for the initial encrypted +stream. + +`tls.createSecurePair()` returns a `tls.SecurePair` object with `cleartext` and +`encrypted` stream properties. + +Using `cleartext` has the same API as [`tls.TLSSocket`][]. + +The `tls.createSecurePair()` method is now deprecated in favor of +`tls.TLSSocket()`. For example, the code: + +```js +pair = tls.createSecurePair(/* ... */); +pair.encrypted.pipe(socket); +socket.pipe(pair.encrypted); +``` + +can be replaced by: + +```js +secureSocket = tls.TLSSocket(socket, options); +``` + +where `secureSocket` has the same API as `pair.cleartext`. + ## `tls.createServer([options][, secureConnectionListener])` - -> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead. - -The `tls.CryptoStream` class represents a stream of encrypted data. This class -is deprecated and should no longer be used. - -#### `cryptoStream.bytesWritten` - - -The `cryptoStream.bytesWritten` property returns the total number of bytes -written to the underlying socket *including* the bytes required for the -implementation of the TLS protocol. - -### Class: `SecurePair` - - -> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead. - -Returned by [`tls.createSecurePair()`][]. - -#### Event: `'secure'` - - -The `'secure'` event is emitted by the `SecurePair` object once a secure -connection has been established. - -As with checking for the server -[`'secureConnection'`](#tls_event_secureconnection) -event, `pair.cleartext.authorized` should be inspected to confirm whether the -certificate used is properly authorized. - -### `tls.createSecurePair([context][, isServer][, requestCert][, rejectUnauthorized][, options])` - - -> Stability: 0 - Deprecated: Use [`tls.TLSSocket`][] instead. - -* `context` {Object} A secure context object as returned by - `tls.createSecureContext()` -* `isServer` {boolean} `true` to specify that this TLS connection should be - opened as a server. -* `requestCert` {boolean} `true` to specify whether a server should request a - certificate from a connecting client. Only applies when `isServer` is `true`. -* `rejectUnauthorized` {boolean} If not `false` a server automatically reject - clients with invalid certificates. Only applies when `isServer` is `true`. -* `options` - * `enableTrace`: See [`tls.createServer()`][] - * `secureContext`: A TLS context object from [`tls.createSecureContext()`][] - * `isServer`: If `true` the TLS socket will be instantiated in server-mode. - **Default:** `false`. - * `server` {net.Server} A [`net.Server`][] instance - * `requestCert`: See [`tls.createServer()`][] - * `rejectUnauthorized`: See [`tls.createServer()`][] - * `ALPNProtocols`: See [`tls.createServer()`][] - * `SNICallback`: See [`tls.createServer()`][] - * `session` {Buffer} A `Buffer` instance containing a TLS session. - * `requestOCSP` {boolean} If `true`, specifies that the OCSP status request - extension will be added to the client hello and an `'OCSPResponse'` event - will be emitted on the socket before establishing a secure communication. - -Creates a new secure pair object with two streams, one of which reads and writes -the encrypted data and the other of which reads and writes the cleartext data. -Generally, the encrypted stream is piped to/from an incoming encrypted data -stream and the cleartext one is used as a replacement for the initial encrypted -stream. - -`tls.createSecurePair()` returns a `tls.SecurePair` object with `cleartext` and -`encrypted` stream properties. - -Using `cleartext` has the same API as [`tls.TLSSocket`][]. - -The `tls.createSecurePair()` method is now deprecated in favor of -`tls.TLSSocket()`. For example, the code: - -```js -pair = tls.createSecurePair(/* ... */); -pair.encrypted.pipe(socket); -socket.pipe(pair.encrypted); -``` - -can be replaced by: - -```js -secureSocket = tls.TLSSocket(socket, options); -``` - -where `secureSocket` has the same API as `pair.cleartext`. - [`'newSession'`]: #tls_event_newsession [`'resumeSession'`]: #tls_event_resumesession [`'secureConnect'`]: #tls_event_secureconnect @@ -1935,6 +1988,7 @@ [`SSL_export_keying_material`]: https://www.openssl.org/docs/man1.1.1/man3/SSL_export_keying_material.html [`SSL_get_version`]: https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html [`crypto.getCurves()`]: crypto.html#crypto_crypto_getcurves +[`Duplex`]: stream.html#stream_class_stream_duplex [`net.createServer()`]: net.html#net_net_createserver_options_connectionlistener [`net.Server.address()`]: net.html#net_server_address [`net.Server`]: net.html#net_class_net_server @@ -1960,14 +2014,15 @@ [`tls.createServer()`]: #tls_tls_createserver_options_secureconnectionlistener [`tls.getCiphers()`]: #tls_tls_getciphers [`tls.rootCertificates`]: #tls_tls_rootcertificates +[CVE-2021-44531]: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44531 [Chrome's 'modern cryptography' setting]: https://www.chromium.org/Home/chromium-security/education/tls#TOC-Cipher-Suites [DHE]: https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange [ECDHE]: https://en.wikipedia.org/wiki/Elliptic_curve_Diffie%E2%80%93Hellman -[Forward secrecy]: https://en.wikipedia.org/wiki/Perfect_forward_secrecy +[forward secrecy]: https://en.wikipedia.org/wiki/Perfect_forward_secrecy [Mozilla's publicly trusted list of CAs]: https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt [OCSP request]: https://en.wikipedia.org/wiki/OCSP_stapling [OpenSSL Options]: crypto.html#crypto_openssl_options -[Perfect Forward Secrecy]: #tls_perfect_forward_secrecy +[perfect forward secrecy]: #tls_perfect_forward_secrecy [RFC 2246]: https://www.ietf.org/rfc/rfc2246.txt [RFC 5077]: https://tools.ietf.org/html/rfc5077 [RFC 5929]: https://tools.ietf.org/html/rfc5929 diff -Nru nodejs-mozilla-12.18.1/doc/api/tracing.html nodejs-mozilla-12.22.12/doc/api/tracing.html --- nodejs-mozilla-12.18.1/doc/api/tracing.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tracing.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Trace Events | Node.js v12.18.1 Documentation + + Trace events | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -116,14 +123,11 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Trace Events#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Trace events#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Trace Event provides a mechanism to centralize tracing information generated by -V8, Node.js core, and userspace code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Source Code: lib/trace_events.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The trace_events module provides a mechanism to centralize tracing information +generated by V8, Node.js core, and userspace code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Tracing can be enabled with the --trace-event-categories command-line flag or by using the trace_events module. The --trace-event-categories flag accepts a list of comma-separated category names.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -161,8 +166,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      3. node.dns.native: Enables capture of trace data for DNS queries.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      4. node.environment: Enables capture of Node.js Environment milestones.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      5. node.fs.sync: Enables capture of trace data for file system sync methods.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      6. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      7. -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        node.perf: Enables capture of Performance API measurements.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      8. node.perf: Enables capture of Performance API measurements.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • node.perf.usertiming: Enables capture of only Performance API User Timing measures and marks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -177,27 +181,24 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8: The V8 events are GC, compiling, and execution related.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        By default the node, node.async_hooks, and v8 categories are enabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        node --trace-event-categories v8,node,node.async_hooks server.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        node --trace-event-categories v8,node,node.async_hooks server.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Prior versions of Node.js required the use of the --trace-events-enabled flag to enable trace events. This requirement has been removed. However, the --trace-events-enabled flag may still be used and will enable the node, node.async_hooks, and v8 trace event categories by default.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        node --trace-events-enabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        node --trace-events-enabled
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// is equivalent to
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +# is equivalent to
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -node --trace-event-categories v8,node,node.async_hooks
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +node --trace-event-categories v8,node,node.async_hooks

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Alternatively, trace events may be enabled using the trace_events module:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const trace_events = require('trace_events');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -const tracing = trace_events.createTracing({ categories: ['node.perf'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -tracing.enable();  // Enable trace event capture for the 'node.perf' category
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const trace_events = require('trace_events');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +const tracing = trace_events.createTracing({ categories: ['node.perf'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +tracing.enable();  // Enable trace event capture for the 'node.perf' category
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// do work
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// do work
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -tracing.disable();  // Disable trace event capture for the 'node.perf' category
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +tracing.disable(); // Disable trace event capture for the 'node.perf' category

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Running Node.js with tracing enabled will produce log files that can be opened in the chrome://tracing tab of Chrome.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -205,11 +206,10 @@ ${rotation} is an incrementing log-rotation id. The filepath pattern can be specified with --trace-event-file-pattern that accepts a template string that supports ${rotation} and ${pid}:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Starting with Node.js 10.0.0, the tracing system uses the same time source -as the one used by process.hrtime() -however the trace-event timestamps are expressed in microseconds, +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The tracing system uses the same time source +as the one used by process.hrtime(). +However the trace-event timestamps are expressed in microseconds, unlike process.hrtime() which returns nanoseconds.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The features from this module are not available in Worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        The trace_events module#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -243,20 +243,19 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Disables this Tracing object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Only trace event categories not covered by other enabled Tracing objects and not specified by the --trace-event-categories flag will be disabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const trace_events = require('trace_events');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -const t1 = trace_events.createTracing({ categories: ['node', 'v8'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -const t2 = trace_events.createTracing({ categories: ['node.perf', 'node'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const trace_events = require('trace_events');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +const t1 = trace_events.createTracing({ categories: ['node', 'v8'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +const t2 = trace_events.createTracing({ categories: ['node.perf', 'node'] });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         t1.enable();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         t2.enable();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Prints 'node,node.perf,v8'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -console.log(trace_events.getEnabledCategories());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Prints 'node,node.perf,v8'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +console.log(trace_events.getEnabledCategories());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -t2.disable(); // Will only disable emission of the 'node.perf' category
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +t2.disable(); // Will only disable emission of the 'node.perf' category
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Prints 'node,v8'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -console.log(trace_events.getEnabledCategories());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Prints 'node,v8' +console.log(trace_events.getEnabledCategories());

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        tracing.enable()#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          options <Object>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • options <Object>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • categories <string[]> An array of trace category names. Values included in the array are coerced to a string when possible. An error will be @@ -286,13 +284,12 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Returns: <Tracing>.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Creates and returns a Tracing object for the given set of categories.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const trace_events = require('trace_events');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -const categories = ['node.perf', 'node.async_hooks'];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -const tracing = trace_events.createTracing({ categories });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const trace_events = require('trace_events');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +const categories = ['node.perf', 'node.async_hooks'];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +const tracing = trace_events.createTracing({ categories });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           tracing.enable();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// do stuff
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -tracing.disable();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// do stuff +tracing.disable();

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          trace_events.getEnabledCategories()#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/tracing.json nodejs-mozilla-12.22.12/doc/api/tracing.json --- nodejs-mozilla-12.18.1/doc/api/tracing.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tracing.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,12 +3,12 @@ "source": "doc/api/tracing.md", "modules": [ { - "textRaw": "Trace Events", + "textRaw": "Trace events", "name": "trace_events", "introduced_in": "v7.7.0", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Trace Event provides a mechanism to centralize tracing information generated by\nV8, Node.js core, and userspace code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Tracing can be enabled with the --trace-event-categories command-line flag\nor by using the trace_events module. The --trace-event-categories flag\naccepts a list of comma-separated category names.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The available categories are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node: An empty placeholder.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.async_hooks: Enables capture of detailed async_hooks trace data.\nThe async_hooks events have a unique asyncId and a special triggerId\ntriggerAsyncId property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.bootstrap: Enables capture of Node.js bootstrap milestones.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.console: Enables capture of console.time() and console.count()\noutput.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.dns.native: Enables capture of trace data for DNS queries.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.environment: Enables capture of Node.js Environment milestones.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.fs.sync: Enables capture of trace data for file system sync methods.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      node.perf: Enables capture of Performance API measurements.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • node.perf.usertiming: Enables capture of only Performance API User Timing\nmeasures and marks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • node.perf.timerify: Enables capture of only Performance API timerify\nmeasurements.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.promises.rejections: Enables capture of trace data tracking the number\nof unhandled Promise rejections and handled-after-rejections.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.vm.script: Enables capture of trace data for the vm module's\nrunInNewContext(), runInContext(), and runInThisContext() methods.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • v8: The V8 events are GC, compiling, and execution related.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    By default the node, node.async_hooks, and v8 categories are enabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --trace-event-categories v8,node,node.async_hooks server.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Prior versions of Node.js required the use of the --trace-events-enabled\nflag to enable trace events. This requirement has been removed. However, the\n--trace-events-enabled flag may still be used and will enable the\nnode, node.async_hooks, and v8 trace event categories by default.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --trace-events-enabled\n\n// is equivalent to\n\nnode --trace-event-categories v8,node,node.async_hooks\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Alternatively, trace events may be enabled using the trace_events module:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const trace_events = require('trace_events');\nconst tracing = trace_events.createTracing({ categories: ['node.perf'] });\ntracing.enable();  // Enable trace event capture for the 'node.perf' category\n\n// do work\n\ntracing.disable();  // Disable trace event capture for the 'node.perf' category\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Running Node.js with tracing enabled will produce log files that can be opened\nin the chrome://tracing\ntab of Chrome.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The logging file is by default called node_trace.${rotation}.log, where\n${rotation} is an incrementing log-rotation id. The filepath pattern can\nbe specified with --trace-event-file-pattern that accepts a template\nstring that supports ${rotation} and ${pid}:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Starting with Node.js 10.0.0, the tracing system uses the same time source\nas the one used by process.hrtime()\nhowever the trace-event timestamps are expressed in microseconds,\nunlike process.hrtime() which returns nanoseconds.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The features from this module are not available in Worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/trace_events.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The trace_events module provides a mechanism to centralize tracing information\ngenerated by V8, Node.js core, and userspace code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Tracing can be enabled with the --trace-event-categories command-line flag\nor by using the trace_events module. The --trace-event-categories flag\naccepts a list of comma-separated category names.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The available categories are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node: An empty placeholder.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.async_hooks: Enables capture of detailed async_hooks trace data.\nThe async_hooks events have a unique asyncId and a special triggerId\ntriggerAsyncId property.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.bootstrap: Enables capture of Node.js bootstrap milestones.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.console: Enables capture of console.time() and console.count()\noutput.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.dns.native: Enables capture of trace data for DNS queries.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.environment: Enables capture of Node.js Environment milestones.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.fs.sync: Enables capture of trace data for file system sync methods.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.perf: Enables capture of Performance API measurements.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • node.perf.usertiming: Enables capture of only Performance API User Timing\nmeasures and marks.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • node.perf.timerify: Enables capture of only Performance API timerify\nmeasurements.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.promises.rejections: Enables capture of trace data tracking the number\nof unhandled Promise rejections and handled-after-rejections.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • node.vm.script: Enables capture of trace data for the vm module's\nrunInNewContext(), runInContext(), and runInThisContext() methods.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • v8: The V8 events are GC, compiling, and execution related.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    By default the node, node.async_hooks, and v8 categories are enabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --trace-event-categories v8,node,node.async_hooks server.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Prior versions of Node.js required the use of the --trace-events-enabled\nflag to enable trace events. This requirement has been removed. However, the\n--trace-events-enabled flag may still be used and will enable the\nnode, node.async_hooks, and v8 trace event categories by default.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --trace-events-enabled\n\n# is equivalent to\n\nnode --trace-event-categories v8,node,node.async_hooks\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Alternatively, trace events may be enabled using the trace_events module:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const trace_events = require('trace_events');\nconst tracing = trace_events.createTracing({ categories: ['node.perf'] });\ntracing.enable();  // Enable trace event capture for the 'node.perf' category\n\n// do work\n\ntracing.disable();  // Disable trace event capture for the 'node.perf' category\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Running Node.js with tracing enabled will produce log files that can be opened\nin the chrome://tracing\ntab of Chrome.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The logging file is by default called node_trace.${rotation}.log, where\n${rotation} is an incrementing log-rotation id. The filepath pattern can\nbe specified with --trace-event-file-pattern that accepts a template\nstring that supports ${rotation} and ${pid}:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The tracing system uses the same time source\nas the one used by process.hrtime().\nHowever the trace-event timestamps are expressed in microseconds,\nunlike process.hrtime() which returns nanoseconds.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The features from this module are not available in Worker threads.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { "textRaw": "The `trace_events` module", @@ -162,7 +162,7 @@ } ], "type": "module", - "displayName": "Trace Events" + "displayName": "Trace events" } ] } \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/tracing.md nodejs-mozilla-12.22.12/doc/api/tracing.md --- nodejs-mozilla-12.18.1/doc/api/tracing.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tracing.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,11 +1,13 @@ -# Trace Events +# Trace events > Stability: 1 - Experimental -Trace Event provides a mechanism to centralize tracing information generated by -V8, Node.js core, and userspace code. + + +The `trace_events` module provides a mechanism to centralize tracing information +generated by V8, Node.js core, and userspace code. Tracing can be enabled with the `--trace-event-categories` command-line flag or by using the `trace_events` module. The `--trace-event-categories` flag @@ -36,7 +38,7 @@ By default the `node`, `node.async_hooks`, and `v8` categories are enabled. -```txt +```bash node --trace-event-categories v8,node,node.async_hooks server.js ``` @@ -45,10 +47,10 @@ `--trace-events-enabled` flag *may* still be used and will enable the `node`, `node.async_hooks`, and `v8` trace event categories by default. -```txt +```bash node --trace-events-enabled -// is equivalent to +# is equivalent to node --trace-event-categories v8,node,node.async_hooks ``` @@ -74,13 +76,13 @@ be specified with `--trace-event-file-pattern` that accepts a template string that supports `${rotation}` and `${pid}`: -```txt +```bash node --trace-event-categories v8 --trace-event-file-pattern '${pid}-${rotation}.log' server.js ``` -Starting with Node.js 10.0.0, the tracing system uses the same time source -as the one used by `process.hrtime()` -however the trace-event timestamps are expressed in microseconds, +The tracing system uses the same time source +as the one used by `process.hrtime()`. +However the trace-event timestamps are expressed in microseconds, unlike `process.hrtime()` which returns nanoseconds. The features from this module are not available in [`Worker`][] threads. diff -Nru nodejs-mozilla-12.18.1/doc/api/tty.html nodejs-mozilla-12.22.12/doc/api/tty.html --- nodejs-mozilla-12.18.1/doc/api/tty.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tty.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - TTY | Node.js v12.18.1 Documentation + + TTY | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        18. @@ -121,19 +128,16 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            TTY

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • TTY
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Class: tty.ReadStream

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Class: tty.ReadStream
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Class: tty.WriteStream

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Class: tty.WriteStream
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Event: 'resize'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • writeStream.clearLine(dir[, callback])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -158,22 +162,21 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                TTY#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Source Code: lib/tty.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The tty module provides the tty.ReadStream and tty.WriteStream classes. In most cases, it will not be necessary or possible to use this module directly. However, it can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const tty = require('tty');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const tty = require('tty');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When Node.js detects that it is being run with a text terminal ("TTY") attached, process.stdin will, by default, be initialized as an instance of tty.ReadStream and both process.stdout and process.stderr will, by default be instances of tty.WriteStream. The preferred method of determining whether Node.js is being run within a TTY context is to check that the value of the process.stdout.isTTY property is true:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                $ node -p -e "Boolean(process.stdout.isTTY)"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                $ node -p -e "Boolean(process.stdout.isTTY)"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -$ node -p -e "Boolean(process.stdout.isTTY)" | cat
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +$ node -p -e "Boolean(process.stdout.isTTY)" | cat +false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                In most cases, there should be little to no reason for an application to manually create instances of the tty.ReadStream and tty.WriteStream classes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                @@ -232,11 +235,10 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The 'resize' event is emitted whenever either of the writeStream.columns or writeStream.rows properties have changed. No arguments are passed to the listener callback when called.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                process.stdout.on('resize', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  console.log('screen size has changed!');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -  console.log(`${process.stdout.columns}x${process.stdout.rows}`);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                process.stdout.on('resize', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  console.log('screen size has changed!');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +  console.log(`${process.stdout.columns}x${process.stdout.rows}`);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                writeStream.clearLine(dir[, callback])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  dir <number>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • dir <number>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • -1: to the left from cursor
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • 1: to the right from cursor
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -374,14 +375,13 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This has the same false positives and negatives as described in writeStream.getColorDepth().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    process.stdout.hasColors();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns true or false depending on if `stdout` supports at least 16 colors.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -process.stdout.hasColors(256);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns true or false depending on if `stdout` supports at least 256 colors.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -process.stdout.hasColors({ TMUX: '1' });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns true.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -process.stdout.hasColors(2 ** 24, { TMUX: '1' });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns false (the environment setting pretends to support 2 ** 8 colors).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +// Returns true or false depending on if `stdout` supports at least 16 colors. +process.stdout.hasColors(256); +// Returns true or false depending on if `stdout` supports at least 256 colors. +process.stdout.hasColors({ TMUX: '1' }); +// Returns true. +process.stdout.hasColors(2 ** 24, { TMUX: '1' }); +// Returns false (the environment setting pretends to support 2 ** 8 colors).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    writeStream.isTTY#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/tty.json nodejs-mozilla-12.22.12/doc/api/tty.json --- nodejs-mozilla-12.18.1/doc/api/tty.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tty.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The tty module provides the tty.ReadStream and tty.WriteStream classes.\nIn most cases, it will not be necessary or possible to use this module directly.\nHowever, it can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const tty = require('tty');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When Node.js detects that it is being run with a text terminal (\"TTY\")\nattached, process.stdin will, by default, be initialized as an instance of\ntty.ReadStream and both process.stdout and process.stderr will, by\ndefault be instances of tty.WriteStream. The preferred method of determining\nwhether Node.js is being run within a TTY context is to check that the value of\nthe process.stdout.isTTY property is true:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $ node -p -e \"Boolean(process.stdout.isTTY)\"\ntrue\n$ node -p -e \"Boolean(process.stdout.isTTY)\" | cat\nfalse\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In most cases, there should be little to no reason for an application to\nmanually create instances of the tty.ReadStream and tty.WriteStream\nclasses.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/tty.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The tty module provides the tty.ReadStream and tty.WriteStream classes.\nIn most cases, it will not be necessary or possible to use this module directly.\nHowever, it can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const tty = require('tty');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When Node.js detects that it is being run with a text terminal (\"TTY\")\nattached, process.stdin will, by default, be initialized as an instance of\ntty.ReadStream and both process.stdout and process.stderr will, by\ndefault be instances of tty.WriteStream. The preferred method of determining\nwhether Node.js is being run within a TTY context is to check that the value of\nthe process.stdout.isTTY property is true:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $ node -p -e \"Boolean(process.stdout.isTTY)\"\ntrue\n$ node -p -e \"Boolean(process.stdout.isTTY)\" | cat\nfalse\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In most cases, there should be little to no reason for an application to\nmanually create instances of the tty.ReadStream and tty.WriteStream\nclasses.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "classes": [ { "textRaw": "Class: `tty.ReadStream`", diff -Nru nodejs-mozilla-12.18.1/doc/api/tty.md nodejs-mozilla-12.22.12/doc/api/tty.md --- nodejs-mozilla-12.18.1/doc/api/tty.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/tty.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `tty` module provides the `tty.ReadStream` and `tty.WriteStream` classes. In most cases, it will not be necessary or possible to use this module directly. However, it can be accessed using: @@ -19,7 +21,7 @@ whether Node.js is being run within a TTY context is to check that the value of the `process.stdout.isTTY` property is `true`: -```sh +```console $ node -p -e "Boolean(process.stdout.isTTY)" true $ node -p -e "Boolean(process.stdout.isTTY)" | cat diff -Nru nodejs-mozilla-12.18.1/doc/api/url.html nodejs-mozilla-12.22.12/doc/api/url.html --- nodejs-mozilla-12.18.1/doc/api/url.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/url.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - URL | Node.js v12.18.1 Documentation + + URL | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        18. @@ -121,17 +128,14 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            URL

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • URL
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • URL Strings and URL Objects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The WHATWG URL API

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • URL strings and URL objects
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • The WHATWG URL API
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Class: URL

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Class: URL
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Class: URLSearchParams

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Class: URLSearchParams
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Legacy URL API

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Legacy URL API
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Percent-Encoding in URLs

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Percent-encoding in URLs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Legacy API
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • WHATWG API
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • @@ -223,11 +222,11 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  URL#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Source Code: lib/url.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  The url module provides utilities for URL resolution and parsing. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const url = require('url');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  URL Strings and URL Objects#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const url = require('url');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  URL strings and URL objects#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  A URL string is a structured string containing multiple meaningful components. When parsed, a URL object is returned containing properties for each of these components.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  @@ -240,7 +239,7 @@ properties of a WHATWG URL object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  WHATWG URL's origin property includes protocol and host, but not username or password.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │                                              href                                              │
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │ protocol │  │        auth         │          host          │           path            │ hash  │
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  @@ -257,17 +256,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   ├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   │                                              href                                              │
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   └────────────────────────────────────────────────────────────────────────────────────────────────┘
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -(All spaces in the "" line should be ignored. They are purely for formatting.)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +(All spaces in the "" line should be ignored. They are purely for formatting.)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Parsing the URL string using the WHATWG API:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const myURL =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -  new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const myURL =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +  new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Parsing the URL string using the Legacy API:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const url = require('url');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -const myURL =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const url = require('url');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +const myURL =
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  The WHATWG URL API#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Class: URL#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gets and sets the host portion of the URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myURL = new URL('https://example.org:81/foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -console.log(myURL.host);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Prints example.org:81
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -myURL.host = 'example.com:82';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Prints https://example.com:82/foo
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myURL = new URL('https://example.org:81/foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +console.log(myURL.host);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Prints example.org:81
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +myURL.host = 'example.com:82';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Prints https://example.com:82/foo

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Invalid host values assigned to the host property are ignored.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                url.hostname#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  @@ -378,32 +367,30 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Gets and sets the host name portion of the URL. The key difference between url.host and url.hostname is that url.hostname does not include the port.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const myURL = new URL('https://example.org:81/foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -console.log(myURL.hostname);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Prints example.org
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -myURL.hostname = 'example.com:82';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Prints https://example.com:81/foo
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const myURL = new URL('https://example.org:81/foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +console.log(myURL.hostname);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Prints example.org
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +myURL.hostname = 'example.com:82';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Prints https://example.com:81/foo

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Invalid host name values assigned to the hostname property are ignored.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  url.href#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Gets and sets the serialized URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const myURL = new URL('https://example.org/foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Prints https://example.org/foo
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -myURL.href = 'https://example.com/bar';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Prints https://example.com/bar
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const myURL = new URL('https://example.org/foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Prints https://example.org/foo
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +myURL.href = 'https://example.com/bar';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Prints https://example.com/bar

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Getting the value of the href property is equivalent to calling url.toString().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Setting the value of this property to a new value is equivalent to creating a -new URL object using new URL(value). Each of the URL +new URL object using new URL(value). Each of the URL object's properties will be modified.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  If the value assigned to the href property is not a valid URL, a TypeError will be thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  @@ -412,30 +399,27 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • <string>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gets the read-only serialization of the URL's origin.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myURL = new URL('https://example.org/foo/bar?baz');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -console.log(myURL.origin);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Prints https://example.org
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const idnURL = new URL('https://測試');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -console.log(idnURL.origin);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Prints https://xn--g6w251d
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -console.log(idnURL.hostname);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Prints xn--g6w251d
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myURL = new URL('https://example.org/foo/bar?baz');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +console.log(myURL.origin);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Prints https://example.org
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const idnURL = new URL('https://測試');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +console.log(idnURL.origin);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Prints https://xn--g6w251d
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +console.log(idnURL.hostname);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Prints xn--g6w251d

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                url.password#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Gets and sets the password portion of the URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myURL = new URL('https://abc:xyz@example.com');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -console.log(myURL.password);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Prints xyz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -myURL.password = '123';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Prints https://abc:123@example.com
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const myURL = new URL('https://abc:xyz@example.com');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +console.log(myURL.password);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Prints xyz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +myURL.password = '123';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +// Prints https://abc:123@example.com

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Invalid URL characters included in the value assigned to the password property are percent-encoded. The selection of which characters to percent-encode may vary somewhat from what the url.parse() and @@ -445,14 +429,13 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • <string>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Gets and sets the path portion of the URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const myURL = new URL('https://example.org/abc/xyz?123');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.pathname);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints /abc/xyz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -myURL.pathname = '/abcdef';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints https://example.org/abcdef?123
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const myURL = new URL('https://example.org/abc/xyz?123');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.pathname);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints /abc/xyz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +myURL.pathname = '/abcdef';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints https://example.org/abcdef?123

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Invalid URL characters included in the value assigned to the pathname property are percent-encoded. The selection of which characters to percent-encode may vary somewhat from what the url.parse() and @@ -511,94 +494,88 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If that string is invalid but it begins with a number, the leading number is assigned to port. If the number lies outside the range denoted above, it is ignored.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const myURL = new URL('https://example.org:8888');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints 8888
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Default ports are automatically transformed to the empty string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// (HTTPS protocol's default port is 443)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -myURL.port = '443';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints the empty string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints https://example.org/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -myURL.port = 1234;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints 1234
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints https://example.org:1234/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Completely invalid port strings are ignored
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -myURL.port = 'abcd';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints 1234
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Leading numbers are treated as a port number
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -myURL.port = '5678abcd';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints 5678
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Non-integers are truncated
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -myURL.port = 1234.5678;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints 1234
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Out-of-range numbers which are not represented in scientific notation
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// will be ignored.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -myURL.port = 1e10; // 10000000000, will be range-checked as described below
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints 1234
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const myURL = new URL('https://example.org:8888');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints 8888
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Default ports are automatically transformed to the empty string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// (HTTPS protocol's default port is 443)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +myURL.port = '443';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints the empty string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints https://example.org/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +myURL.port = 1234;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints 1234
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints https://example.org:1234/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Completely invalid port strings are ignored
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +myURL.port = 'abcd';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints 1234
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Leading numbers are treated as a port number
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +myURL.port = '5678abcd';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints 5678
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Non-integers are truncated
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +myURL.port = 1234.5678;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints 1234
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Out-of-range numbers which are not represented in scientific notation
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// will be ignored.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +myURL.port = 1e10; // 10000000000, will be range-checked as described below
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints 1234

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Numbers which contain a decimal point, such as floating-point numbers or numbers in scientific notation, are not an exception to this rule. Leading numbers up to the decimal point will be set as the URL's port, assuming they are valid:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              myURL.port = 4.567e21;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints 4 (because it is the leading number in the string '4.567e21')
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              myURL.port = 4.567e21;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints 4 (because it is the leading number in the string '4.567e21')

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              url.protocol#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Gets and sets the protocol portion of the URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const myURL = new URL('https://example.org');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.protocol);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints https:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -myURL.protocol = 'ftp';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Prints ftp://example.org/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const myURL = new URL('https://example.org');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.protocol);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints https:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +myURL.protocol = 'ftp';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// Prints ftp://example.org/

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Invalid URL protocol values assigned to the protocol property are ignored.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Special Schemes#
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Special schemes#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The WHATWG URL Standard considers a handful of URL protocol schemes to be special in terms of how they are parsed and serialized. When a URL is parsed using one of these special protocols, the url.protocol property may be changed to another special protocol but cannot be changed to a non-special protocol, and vice versa.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              For instance, changing from http to https works:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const u = new URL('http://example.org');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -u.protocol = 'https';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(u.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// https://example.org
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const u = new URL('http://example.org');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +u.protocol = 'https';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(u.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// https://example.org

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              However, changing from http to a hypothetical fish protocol does not because the new protocol is not special.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const u = new URL('http://example.org');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -u.protocol = 'fish';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(u.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// http://example.org
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const u = new URL('http://example.org');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +u.protocol = 'fish';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(u.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// http://example.org

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Likewise, changing from a non-special protocol to a special protocol is also not permitted:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const u = new URL('fish://example.org');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -u.protocol = 'http';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -console.log(u.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// fish://example.org
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const u = new URL('fish://example.org');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +u.protocol = 'http';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +console.log(u.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// fish://example.org

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              According to the WHATWG URL Standard, special protocol schemes are ftp, file, gopher, http, https, ws, and wss.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              url.search#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -606,14 +583,13 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • <string>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Gets and sets the serialized query portion of the URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myURL = new URL('https://example.org/abc?123');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(myURL.search);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Prints ?123
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -myURL.search = 'abc=xyz';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Prints https://example.org/abc?abc=xyz
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myURL = new URL('https://example.org/abc?123');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(myURL.search);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Prints ?123
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +myURL.search = 'abc=xyz';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Prints https://example.org/abc?abc=xyz

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Any invalid URL characters appearing in the value assigned the search property will be percent-encoded. The selection of which characters to percent-encode may vary somewhat from what the url.parse() @@ -632,28 +608,26 @@ different rules to determine which characters to percent-encode. For instance, the URL object will not percent encode the ASCII tilde (~) character, while URLSearchParams will always encode it:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myUrl = new URL('https://example.org/abc?foo=~bar');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myUrl = new URL('https://example.org/abc?foo=~bar');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(myUrl.search);  // prints ?foo=~bar
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(myUrl.search);  // prints ?foo=~bar
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Modify the URL via searchParams...
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Modify the URL via searchParams...
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             myUrl.searchParams.sort();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(myUrl.search);  // prints ?foo=%7Ebar
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(myUrl.search); // prints ?foo=%7Ebar

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            url.username#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Gets and sets the username portion of the URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myURL = new URL('https://abc:xyz@example.com');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(myURL.username);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Prints abc
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -myURL.username = '123';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Prints https://123:xyz@example.com/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myURL = new URL('https://abc:xyz@example.com');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(myURL.username);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Prints abc
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +myURL.username = '123';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Prints https://123:xyz@example.com/

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Any invalid URL characters appearing in the value assigned the username property will be percent-encoded. The selection of which characters to percent-encode may vary somewhat from what the url.parse() @@ -676,13 +650,12 @@ url.toString().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This method is automatically called when an URL object is serialized with JSON.stringify().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myURLs = [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  new URL('https://www.example.com'),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  new URL('https://test.example.org')
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myURLs = [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  new URL('https://www.example.com'),
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  new URL('https://test.example.org')
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             ];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(JSON.stringify(myURLs));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Prints ["https://www.example.com/","https://test.example.org/"]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(JSON.stringify(myURLs)); +// Prints ["https://www.example.com/","https://test.example.org/"]

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Class: URLSearchParams#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Stability: 0 - Deprecated: Use the WHATWG URL API instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • urlObject <Object> | <string> A URL object (as returned by url.parse() or constructed otherwise). If a string, it is converted to an object by passing @@ -1167,17 +1129,16 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The url.format() method returns a formatted URL string derived from urlObject.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              url.format({
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  protocol: 'https',
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  hostname: 'example.com',
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  pathname: '/some/path',
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  query: {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -    page: 1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -    format: 'json'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  protocol: 'https',
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  hostname: 'example.com',
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  pathname: '/some/path',
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +  query: {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +    page: 1,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +    format: 'json'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// => 'https://example.com/some/path?page=1&format=json'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +// => 'https://example.com/some/path?page=1&format=json'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If urlObject is not an object or a string, url.format() will throw a TypeError.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The formatting process operates as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -1188,9 +1149,8 @@ Error is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • For all string values of urlObject.protocol that do not end with an ASCII colon (:) character, the literal string : will be appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If either of the following conditions is true, then the literal string // -will be appended to result:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • If either of the following conditions is true, then the literal string // +will be appended to result:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • urlObject.slashes property is true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • urlObject.protocol begins with http, https, ftp, gopher, or @@ -1201,15 +1161,13 @@ urlObject.host or urlObject.hostname are not undefined, the value of urlObject.auth will be coerced into a string and appended to result followed by the literal string @.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the urlObject.host property is undefined then:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • If the urlObject.host property is undefined then:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • If the urlObject.hostname is a string, it is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Otherwise, if urlObject.hostname is not undefined and is not a string, an Error is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  If the urlObject.port property value is truthy, and urlObject.hostname -is not undefined:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • If the urlObject.port property value is truthy, and urlObject.hostname +is not undefined:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • The literal string : is appended to result, and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • The value of urlObject.port is coerced to a string and appended to @@ -1220,8 +1178,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • Otherwise, if the urlObject.host property value is truthy, the value of urlObject.host is coerced to a string and appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the urlObject.pathname property is a string that is not an empty string:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • If the urlObject.pathname property is a string that is not an empty string:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If the urlObject.pathname does not start with an ASCII forward slash (/), then the literal string '/' is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • @@ -1234,8 +1191,7 @@ property is an Object, the literal string ? is appended to result followed by the output of calling the querystring module's stringify() method passing the value of urlObject.query. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Otherwise, if urlObject.search is a string:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if urlObject.search is a string:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the value of urlObject.search does not start with the ASCII question mark (?) character, the literal string ? is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • @@ -1244,8 +1200,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Otherwise, if urlObject.search is not undefined and is not a string, an Error is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        If the urlObject.hash property is a string:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the urlObject.hash property is a string:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • If the value of urlObject.hash does not start with the ASCII hash (#) character, the literal string # is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -1272,6 +1227,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Stability: 0 - Deprecated: Use the WHATWG URL API instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • urlString <string> The URL string to parse.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • parseQueryString <boolean> If true, the query property will always @@ -1288,6 +1244,11 @@ object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            A TypeError is thrown if urlString is not a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            A URIError is thrown if the auth property is present but cannot be decoded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Use of the legacy url.parse() method is discouraged. Users should +use the WHATWG URL API. Because the url.parse() method uses a +lenient, non-standard algorithm for parsing URL strings, security +issues can be introduced. Specifically, issues with host name spoofing and +incorrect handling of usernames and passwords have been identified.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            url.resolve(from, to)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Stability: 0 - Deprecated: Use the WHATWG URL API instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • from <string> The Base URL being resolved against.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • to <string> The HREF URL being resolved.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The url.resolve() method resolves a target URL relative to a base URL in a manner similar to that of a Web browser resolving an anchor tag HREF.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const url = require('url');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -url.resolve('/one/two/three', 'four');         // '/one/two/four'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -url.resolve('http://example.com/', '/one');    // 'http://example.com/one'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -url.resolve('http://example.com/one', '/two'); // 'http://example.com/two'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const url = require('url');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +url.resolve('/one/two/three', 'four');         // '/one/two/four'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +url.resolve('http://example.com/', '/one');    // 'http://example.com/one'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +url.resolve('http://example.com/one', '/two'); // 'http://example.com/two'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Percent-Encoding in URLs#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Percent-encoding in URLs#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            URLs are permitted to only contain a certain range of characters. Any character falling outside of that range must be encoded. How such characters are encoded, and which characters to encode depends entirely on where the character is @@ -1326,8 +1287,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Legacy API#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Within the Legacy API, spaces (' ') and the following characters will be automatically escaped in the properties of URL objects:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            < > " ` \r \n \t { } | \ ^ '
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            < > " ` \r \n \t { } | \ ^ '

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            For example, the ASCII space character (' ') is encoded as %20. The ASCII forward slash (/) character is encoded as %3C.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            WHATWG API#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            @@ -1363,17 +1323,14 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            When non-ASCII characters appear within a host name, the host name is encoded using the Punycode algorithm. Note, however, that a host name may contain both Punycode encoded and percent-encoded characters:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myURL = new URL('https://%CF%80.example.com/foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Prints https://xn--1xa.example.com/foo
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -console.log(myURL.origin);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Prints https://xn--1xa.example.com
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const myURL = new URL('https://%CF%80.example.com/foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(myURL.href);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Prints https://xn--1xa.example.com/foo
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +console.log(myURL.origin);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Prints https://xn--1xa.example.com
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/url.json nodejs-mozilla-12.22.12/doc/api/url.json --- nodejs-mozilla-12.18.1/doc/api/url.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/url.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,14 +8,14 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The url module provides utilities for URL resolution and parsing. It can be\naccessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const url = require('url');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/url.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The url module provides utilities for URL resolution and parsing. It can be\naccessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const url = require('url');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { - "textRaw": "URL Strings and URL Objects", + "textRaw": "URL strings and URL objects", "name": "url_strings_and_url_objects", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A URL string is a structured string containing multiple meaningful components.\nWhen parsed, a URL object is returned containing properties for each of these\ncomponents.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The url module provides two APIs for working with URLs: a legacy API that is\nNode.js specific, and a newer API that implements the same\nWHATWG URL Standard used by web browsers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A comparison between the WHATWG and Legacy APIs is provided below. Above the URL\n'http://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash', properties\nof an object returned by the legacy url.parse() are shown. Below it are\nproperties of a WHATWG URL object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    WHATWG URL's origin property includes protocol and host, but not\nusername or password.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ┌────────────────────────────────────────────────────────────────────────────────────────────────┐\n│                                              href                                              │\n├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤\n│ protocol │  │        auth         │          host          │           path            │ hash  │\n│          │  │                     ├─────────────────┬──────┼──────────┬────────────────┤       │\n│          │  │                     │    hostname     │ port │ pathname │     search     │       │\n│          │  │                     │                 │      │          ├─┬──────────────┤       │\n│          │  │                     │                 │      │          │ │    query     │       │\n\"  https:   //    user   :   pass   @ sub.example.com : 8080   /p/a/t/h  ?  query=string   #hash \"\n│          │  │          │          │    hostname     │ port │          │                │       │\n│          │  │          │          ├─────────────────┴──────┤          │                │       │\n│ protocol │  │ username │ password │          host          │          │                │       │\n├──────────┴──┼──────────┴──────────┼────────────────────────┤          │                │       │\n│   origin    │                     │         origin         │ pathname │     search     │ hash  │\n├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤\n│                                              href                                              │\n└────────────────────────────────────────────────────────────────────────────────────────────────┘\n(All spaces in the \"\" line should be ignored. They are purely for formatting.)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Parsing the URL string using the WHATWG API:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const myURL =\n  new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Parsing the URL string using the Legacy API:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const url = require('url');\nconst myURL =\n  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A URL string is a structured string containing multiple meaningful components.\nWhen parsed, a URL object is returned containing properties for each of these\ncomponents.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The url module provides two APIs for working with URLs: a legacy API that is\nNode.js specific, and a newer API that implements the same\nWHATWG URL Standard used by web browsers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A comparison between the WHATWG and Legacy APIs is provided below. Above the URL\n'http://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash', properties\nof an object returned by the legacy url.parse() are shown. Below it are\nproperties of a WHATWG URL object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    WHATWG URL's origin property includes protocol and host, but not\nusername or password.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ┌────────────────────────────────────────────────────────────────────────────────────────────────┐\n│                                              href                                              │\n├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤\n│ protocol │  │        auth         │          host          │           path            │ hash  │\n│          │  │                     ├─────────────────┬──────┼──────────┬────────────────┤       │\n│          │  │                     │    hostname     │ port │ pathname │     search     │       │\n│          │  │                     │                 │      │          ├─┬──────────────┤       │\n│          │  │                     │                 │      │          │ │    query     │       │\n\"  https:   //    user   :   pass   @ sub.example.com : 8080   /p/a/t/h  ?  query=string   #hash \"\n│          │  │          │          │    hostname     │ port │          │                │       │\n│          │  │          │          ├─────────────────┴──────┤          │                │       │\n│ protocol │  │ username │ password │          host          │          │                │       │\n├──────────┴──┼──────────┴──────────┼────────────────────────┤          │                │       │\n│   origin    │                     │         origin         │ pathname │     search     │ hash  │\n├─────────────┴─────────────────────┴────────────────────────┴──────────┴────────────────┴───────┤\n│                                              href                                              │\n└────────────────────────────────────────────────────────────────────────────────────────────────┘\n(All spaces in the \"\" line should be ignored. They are purely for formatting.)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Parsing the URL string using the WHATWG API:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const myURL =\n  new URL('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Parsing the URL string using the Legacy API:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const url = require('url');\nconst myURL =\n  url.parse('https://user:pass@sub.example.com:8080/p/a/t/h?query=string#hash');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "URL Strings and URL Objects" + "displayName": "URL strings and URL objects" }, { "textRaw": "The WHATWG URL API", @@ -62,7 +62,7 @@ "textRaw": "`href` {string}", "type": "string", "name": "href", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Gets and sets the serialized URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const myURL = new URL('https://example.org/foo');\nconsole.log(myURL.href);\n// Prints https://example.org/foo\n\nmyURL.href = 'https://example.com/bar';\nconsole.log(myURL.href);\n// Prints https://example.com/bar\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Getting the value of the href property is equivalent to calling\nurl.toString().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Setting the value of this property to a new value is equivalent to creating a\nnew URL object using new URL(value). Each of the URL\nobject's properties will be modified.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the value assigned to the href property is not a valid URL, a TypeError\nwill be thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Gets and sets the serialized URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const myURL = new URL('https://example.org/foo');\nconsole.log(myURL.href);\n// Prints https://example.org/foo\n\nmyURL.href = 'https://example.com/bar';\nconsole.log(myURL.href);\n// Prints https://example.com/bar\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Getting the value of the href property is equivalent to calling\nurl.toString().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Setting the value of this property to a new value is equivalent to creating a\nnew URL object using new URL(value). Each of the URL\nobject's properties will be modified.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the value assigned to the href property is not a valid URL, a TypeError\nwill be thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " }, { "textRaw": "`origin` {string}", @@ -95,11 +95,11 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Gets and sets the protocol portion of the URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const myURL = new URL('https://example.org');\nconsole.log(myURL.protocol);\n// Prints https:\n\nmyURL.protocol = 'ftp';\nconsole.log(myURL.href);\n// Prints ftp://example.org/\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Invalid URL protocol values assigned to the protocol property are ignored.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { - "textRaw": "Special Schemes", + "textRaw": "Special schemes", "name": "special_schemes", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The WHATWG URL Standard considers a handful of URL protocol schemes to be\nspecial in terms of how they are parsed and serialized. When a URL is\nparsed using one of these special protocols, the url.protocol property\nmay be changed to another special protocol but cannot be changed to a\nnon-special protocol, and vice versa.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For instance, changing from http to https works:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const u = new URL('http://example.org');\nu.protocol = 'https';\nconsole.log(u.href);\n// https://example.org\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    However, changing from http to a hypothetical fish protocol does not\nbecause the new protocol is not special.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const u = new URL('http://example.org');\nu.protocol = 'fish';\nconsole.log(u.href);\n// http://example.org\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Likewise, changing from a non-special protocol to a special protocol is also\nnot permitted:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const u = new URL('fish://example.org');\nu.protocol = 'http';\nconsole.log(u.href);\n// fish://example.org\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    According to the WHATWG URL Standard, special protocol schemes are ftp,\nfile, gopher, http, https, ws, and wss.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Special Schemes" + "displayName": "Special schemes" } ] }, @@ -668,7 +668,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This function ensures that path is resolved absolutely, and that the URL\ncontrol characters are correctly encoded when converting into a File URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    new URL(__filename);                // Incorrect: throws (POSIX)\nnew URL(__filename);                // Incorrect: C:\\... (Windows)\npathToFileURL(__filename);          // Correct:   file:///... (POSIX)\npathToFileURL(__filename);          // Correct:   file:///C:/... (Windows)\n\nnew URL('/foo#1', 'file:');         // Incorrect: file:///foo#1\npathToFileURL('/foo#1');            // Correct:   file:///foo%231 (POSIX)\n\nnew URL('/some/path%.js', 'file:'); // Incorrect: file:///some/path%\npathToFileURL('/some/path%.js');    // Correct:   file:///some/path%25 (POSIX)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This function ensures that path is resolved absolutely, and that the URL\ncontrol characters are correctly encoded when converting into a File URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    new URL(__filename);                // Incorrect: throws (POSIX)\nnew URL(__filename);                // Incorrect: C:\\... (Windows)\npathToFileURL(__filename);          // Correct:   file:///... (POSIX)\npathToFileURL(__filename);          // Correct:   file:///C:/... (Windows)\n\nnew URL('/foo#1', 'file:');         // Incorrect: file:///foo#1\npathToFileURL('/foo#1');            // Correct:   file:///foo%231 (POSIX)\n\nnew URL('/some/path%.c', 'file:'); // Incorrect: file:///some/path%.c\npathToFileURL('/some/path%.c');    // Correct:   file:///some/path%25.c (POSIX)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " } ], "type": "module", @@ -677,8 +677,12 @@ { "textRaw": "Legacy URL API", "name": "legacy_url_api", - "stability": 0, - "stabilityText": "Deprecated: Use the WHATWG URL API instead.", + "meta": { + "deprecated": [ + "v11.0.0" + ], + "changes": [] + }, "modules": [ { "textRaw": "Legacy `urlObject`", @@ -692,6 +696,8 @@ } ] }, + "stability": 0, + "stabilityText": "Deprecated: Use the WHATWG URL API instead.", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The legacy urlObject (require('url').Url) is created and returned by the\nurl.parse() function.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "properties": [ { @@ -777,10 +783,12 @@ { "version": "v7.0.0", "pr-url": "https://github.com/nodejs/node/pull/7234", - "description": "URLs with a `file:` scheme will now always use the correct number of slashes regardless of `slashes` option. A false-y `slashes` option with no protocol is now also respected at all times." + "description": "URLs with a `file:` scheme will now always use the correct number of slashes regardless of `slashes` option. A falsy `slashes` option with no protocol is now also respected at all times." } ] }, + "stability": 0, + "stabilityText": "Deprecated: Use the WHATWG URL API instead.", "signatures": [ { "params": [ @@ -793,7 +801,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The url.format() method returns a formatted URL string derived from\nurlObject.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    url.format({\n  protocol: 'https',\n  hostname: 'example.com',\n  pathname: '/some/path',\n  query: {\n    page: 1,\n    format: 'json'\n  }\n});\n\n// => 'https://example.com/some/path?page=1&format=json'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If urlObject is not an object or a string, url.format() will throw a\nTypeError.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The formatting process operates as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • A new empty string result is created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If urlObject.protocol is a string, it is appended as-is to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if urlObject.protocol is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • For all string values of urlObject.protocol that do not end with an ASCII\ncolon (:) character, the literal string : will be appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If either of the following conditions is true, then the literal string //\nwill be appended to result:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • urlObject.slashes property is true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • urlObject.protocol begins with http, https, ftp, gopher, or\nfile;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If the value of the urlObject.auth property is truthy, and either\nurlObject.host or urlObject.hostname are not undefined, the value of\nurlObject.auth will be coerced into a string and appended to result\nfollowed by the literal string @.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If the urlObject.host property is undefined then:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the urlObject.hostname is a string, it is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Otherwise, if urlObject.hostname is not undefined and is not a string,\nan Error is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        If the urlObject.port property value is truthy, and urlObject.hostname\nis not undefined:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • The literal string : is appended to result, and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • The value of urlObject.port is coerced to a string and appended to\nresult.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if the urlObject.host property value is truthy, the value of\nurlObject.host is coerced to a string and appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If the urlObject.pathname property is a string that is not an empty string:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the urlObject.pathname does not start with an ASCII forward slash\n(/), then the literal string '/' is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The value of urlObject.pathname is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if urlObject.pathname is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If the urlObject.search property is undefined and if the urlObject.query\nproperty is an Object, the literal string ? is appended to result\nfollowed by the output of calling the querystring module's stringify()\nmethod passing the value of urlObject.query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Otherwise, if urlObject.search is a string:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the value of urlObject.search does not start with the ASCII question\nmark (?) character, the literal string ? is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The value of urlObject.search is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if urlObject.search is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      If the urlObject.hash property is a string:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the value of urlObject.hash does not start with the ASCII hash (#)\ncharacter, the literal string # is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The value of urlObject.hash is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if the urlObject.hash property is not undefined and is not a\nstring, an Error is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • result is returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The url.format() method returns a formatted URL string derived from\nurlObject.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    url.format({\n  protocol: 'https',\n  hostname: 'example.com',\n  pathname: '/some/path',\n  query: {\n    page: 1,\n    format: 'json'\n  }\n});\n\n// => 'https://example.com/some/path?page=1&format=json'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If urlObject is not an object or a string, url.format() will throw a\nTypeError.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The formatting process operates as follows:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • A new empty string result is created.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If urlObject.protocol is a string, it is appended as-is to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if urlObject.protocol is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • For all string values of urlObject.protocol that do not end with an ASCII\ncolon (:) character, the literal string : will be appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If either of the following conditions is true, then the literal string //\nwill be appended to result:\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • urlObject.slashes property is true;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • urlObject.protocol begins with http, https, ftp, gopher, or\nfile;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If the value of the urlObject.auth property is truthy, and either\nurlObject.host or urlObject.hostname are not undefined, the value of\nurlObject.auth will be coerced into a string and appended to result\nfollowed by the literal string @.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If the urlObject.host property is undefined then:\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the urlObject.hostname is a string, it is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Otherwise, if urlObject.hostname is not undefined and is not a string,\nan Error is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the urlObject.port property value is truthy, and urlObject.hostname\nis not undefined:\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • The literal string : is appended to result, and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • The value of urlObject.port is coerced to a string and appended to\nresult.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if the urlObject.host property value is truthy, the value of\nurlObject.host is coerced to a string and appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If the urlObject.pathname property is a string that is not an empty string:\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the urlObject.pathname does not start with an ASCII forward slash\n(/), then the literal string '/' is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The value of urlObject.pathname is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if urlObject.pathname is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If the urlObject.search property is undefined and if the urlObject.query\nproperty is an Object, the literal string ? is appended to result\nfollowed by the output of calling the querystring module's stringify()\nmethod passing the value of urlObject.query.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if urlObject.search is a string:\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the value of urlObject.search does not start with the ASCII question\nmark (?) character, the literal string ? is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The value of urlObject.search is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if urlObject.search is not undefined and is not a string, an\nError is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • If the urlObject.hash property is a string:\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • If the value of urlObject.hash does not start with the ASCII hash (#)\ncharacter, the literal string # is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • The value of urlObject.hash is appended to result.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • Otherwise, if the urlObject.hash property is not undefined and is not a\nstring, an Error is thrown.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • result is returned.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " }, { "textRaw": "`url.parse(urlString[, parseQueryString[, slashesDenoteHost]])`", @@ -821,6 +829,8 @@ } ] }, + "stability": 0, + "stabilityText": "Deprecated: Use the WHATWG URL API instead.", "signatures": [ { "params": [ @@ -847,7 +857,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The url.parse() method takes a URL string, parses it, and returns a URL\nobject.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A TypeError is thrown if urlString is not a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A URIError is thrown if the auth property is present but cannot be decoded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The url.parse() method takes a URL string, parses it, and returns a URL\nobject.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A TypeError is thrown if urlString is not a string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A URIError is thrown if the auth property is present but cannot be decoded.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Use of the legacy url.parse() method is discouraged. Users should\nuse the WHATWG URL API. Because the url.parse() method uses a\nlenient, non-standard algorithm for parsing URL strings, security\nissues can be introduced. Specifically, issues with host name spoofing and\nincorrect handling of usernames and passwords have been identified.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " }, { "textRaw": "`url.resolve(from, to)`", @@ -880,6 +890,8 @@ } ] }, + "stability": 0, + "stabilityText": "Deprecated: Use the WHATWG URL API instead.", "signatures": [ { "params": [ @@ -905,14 +917,14 @@ "displayName": "Legacy URL API" }, { - "textRaw": "Percent-Encoding in URLs", + "textRaw": "Percent-encoding in URLs", "name": "percent-encoding_in_urls", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    URLs are permitted to only contain a certain range of characters. Any character\nfalling outside of that range must be encoded. How such characters are encoded,\nand which characters to encode depends entirely on where the character is\nlocated within the structure of the URL.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { "textRaw": "Legacy API", "name": "legacy_api", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Within the Legacy API, spaces (' ') and the following characters will be\nautomatically escaped in the properties of URL objects:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    < > \" ` \\r \\n \\t { } | \\ ^ '\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For example, the ASCII space character (' ') is encoded as %20. The ASCII\nforward slash (/) character is encoded as %3C.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Within the Legacy API, spaces (' ') and the following characters will be\nautomatically escaped in the properties of URL objects:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    < > \" ` \\r \\n \\t { } | \\ ^ '\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For example, the ASCII space character (' ') is encoded as %20. The ASCII\nforward slash (/) character is encoded as %3C.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "Legacy API" }, @@ -925,7 +937,7 @@ } ], "type": "module", - "displayName": "Percent-Encoding in URLs" + "displayName": "Percent-encoding in URLs" } ], "type": "module", diff -Nru nodejs-mozilla-12.18.1/doc/api/url.md nodejs-mozilla-12.22.12/doc/api/url.md --- nodejs-mozilla-12.18.1/doc/api/url.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/url.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `url` module provides utilities for URL resolution and parsing. It can be accessed using: @@ -11,7 +13,7 @@ const url = require('url'); ``` -## URL Strings and URL Objects +## URL strings and URL objects A URL string is a structured string containing multiple meaningful components. When parsed, a URL object is returned containing properties for each of these @@ -29,7 +31,7 @@ WHATWG URL's `origin` property includes `protocol` and `host`, but not `username` or `password`. -```txt +```text ┌────────────────────────────────────────────────────────────────────────────────────────────────┐ │ href │ ├──────────┬──┬─────────────────────┬────────────────────────┬───────────────────────────┬───────┤ @@ -89,7 +91,7 @@ myURL.protocol`, `delete myURL.pathname`, etc) has no effect but will still return `true`. -#### Constructor: `new URL(input[, base])` +#### `new URL(input[, base])` * `input` {string} The absolute or relative input URL to parse. If `input` is relative, then `base` is required. If `input` is absolute, the `base` @@ -406,7 +408,7 @@ Invalid URL protocol values assigned to the `protocol` property are ignored. -##### Special Schemes +##### Special schemes The [WHATWG URL Standard][] considers a handful of URL protocol schemes to be _special_ in terms of how they are parsed and serialized. When a URL is @@ -600,11 +602,11 @@ // Prints https://example.org/?a=b&a=c ``` -#### Constructor: `new URLSearchParams()` +#### `new URLSearchParams()` Instantiate a new empty `URLSearchParams` object. -#### Constructor: `new URLSearchParams(string)` +#### `new URLSearchParams(string)` * `string` {string} A query string @@ -625,7 +627,7 @@ // Prints 'user=abc&query=xyz' ``` -#### Constructor: `new URLSearchParams(obj)` +#### `new URLSearchParams(obj)` ### Legacy `urlObject` +> Stability: 0 - Deprecated: Use the WHATWG URL API instead. + The legacy `urlObject` (`require('url').Url`) is created and returned by the `url.parse()` function. @@ -1125,11 +1130,13 @@ - version: v7.0.0 pr-url: https://github.com/nodejs/node/pull/7234 description: URLs with a `file:` scheme will now always use the correct - number of slashes regardless of `slashes` option. A false-y + number of slashes regardless of `slashes` option. A falsy `slashes` option with no protocol is now also respected at all times. --> +> Stability: 0 - Deprecated: Use the WHATWG URL API instead. + * `urlObject` {Object|string} A URL object (as returned by `url.parse()` or constructed otherwise). If a string, it is converted to an object by passing it to `url.parse()`. @@ -1224,6 +1231,8 @@ when no query string is present. --> +> Stability: 0 - Deprecated: Use the WHATWG URL API instead. + * `urlString` {string} The URL string to parse. * `parseQueryString` {boolean} If `true`, the `query` property will always be set to an object returned by the [`querystring`][] module's `parse()` @@ -1242,6 +1251,12 @@ A `URIError` is thrown if the `auth` property is present but cannot be decoded. +Use of the legacy `url.parse()` method is discouraged. Users should +use the WHATWG `URL` API. Because the `url.parse()` method uses a +lenient, non-standard algorithm for parsing URL strings, security +issues can be introduced. Specifically, issues with [host name spoofing][] and +incorrect handling of usernames and passwords have been identified. + ### `url.resolve(from, to)` +> Stability: 0 - Deprecated: Use the WHATWG URL API instead. + * `from` {string} The Base URL being resolved against. * `to` {string} The HREF URL being resolved. @@ -1276,7 +1293,7 @@ ``` -## Percent-Encoding in URLs +## Percent-encoding in URLs URLs are permitted to only contain a certain range of characters. Any character falling outside of that range must be encoded. How such characters are encoded, @@ -1288,7 +1305,7 @@ Within the Legacy API, spaces (`' '`) and the following characters will be automatically escaped in the properties of URL objects: -```txt +```text < > " ` \r \n \t { } | \ ^ ' ``` @@ -1341,7 +1358,7 @@ [`TypeError`]: errors.html#errors_class_typeerror [`URLSearchParams`]: #url_class_urlsearchparams [`array.toString()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString -[`new URL()`]: #url_constructor_new_url_input_base +[`new URL()`]: #url_new_url_input_base [`querystring`]: querystring.html [`require('url').format()`]: #url_url_format_url_options [`url.domainToASCII()`]: #url_url_domaintoascii_domain @@ -1359,6 +1376,7 @@ [WHATWG URL Standard]: https://url.spec.whatwg.org/ [WHATWG URL]: #url_the_whatwg_url_api [examples of parsed URLs]: https://url.spec.whatwg.org/#example-url-parsing +[host name spoofing]: https://hackerone.com/reports/678487 [legacy `urlObject`]: #url_legacy_urlobject [percent-encoded]: #whatwg-percent-encoding [stable sorting algorithm]: https://en.wikipedia.org/wiki/Sorting_algorithm#Stability diff -Nru nodejs-mozilla-12.18.1/doc/api/util.html nodejs-mozilla-12.22.12/doc/api/util.html --- nodejs-mozilla-12.18.1/doc/api/util.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/util.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - Util | Node.js v12.18.1 Documentation + + Util | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        18. @@ -121,50 +128,44 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Util

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Util
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.callbackify(original)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.debuglog(section)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.debuglog(section[, callback])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.deprecate(fn, msg[, code])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.format(format[, ...args])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.formatWithOptions(inspectOptions, format[, ...args])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.getSystemErrorName(err)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.inherits(constructor, superConstructor)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.inspect(object[, options])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.inspect(object[, showHidden[, depth[, colors]]])

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.inspect(object[, showHidden[, depth[, colors]]])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.isDeepStrictEqual(val1, val2)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.promisify(original)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.promisify(original)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Class: util.TextDecoder

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Class: util.TextDecoder
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Class: util.TextEncoder

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Class: util.TextEncoder
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.types

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • util.types
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Deprecated APIs

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Deprecated APIs
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • util._extend(target, source)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • util.isArray(object)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • @@ -258,11 +256,11 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Util#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Stability: 2 - Stable

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Source Code: lib/util.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The util module supports the needs of Node.js internal APIs. Many of the utilities are useful for application and module developers as well. To access it:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.callbackify(original)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The util.deprecate() method wraps fn (which may be a function or class) in such a way that it is marked as deprecated.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -exports.obsoleteFunction = util.deprecate(() => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -  // Do something here.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -}, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +exports.obsoleteFunction = util.deprecate(() => { + // Do something here. +}, 'obsoleteFunction() is deprecated. Use newShinyFunction() instead.');

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              When called, util.deprecate() will return a function that will emit a DeprecationWarning using the 'warning' event. The warning will be emitted and printed to stderr the first time the returned function is @@ -381,13 +382,12 @@ emitting a warning.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If the same optional code is supplied in multiple calls to util.deprecate(), the warning will be emitted only once for that code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const fn1 = util.deprecate(someFunction, someMessage, 'DEP0001');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -const fn2 = util.deprecate(someOtherFunction, someOtherMessage, 'DEP0001');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -fn1(); // Emits a deprecation warning with code DEP0001
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -fn2(); // Does not emit a deprecation warning because it has the same code
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +const fn1 = util.deprecate(someFunction, someMessage, 'DEP0001'); +const fn2 = util.deprecate(someOtherFunction, someOtherMessage, 'DEP0001'); +fn1(); // Emits a deprecation warning with code DEP0001 +fn2(); // Does not emit a deprecation warning because it has the same code

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If either the --no-deprecation or --no-warnings command line flags are used, or if the process.noDeprecation property is set to true prior to the first deprecation warning, the util.deprecate() method does nothing.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              @@ -453,33 +453,28 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • %O: Object. A string representation of an object with generic JavaScript object formatting. Similar to util.inspect() without options. This will show the full object not including non-enumerable properties and proxies.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • %c: CSS. This specifier is currently ignored, and will skip any CSS -passed in.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • %c: CSS. This specifier is ignored and will skip any CSS passed in.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • %%: single percent sign ('%'). This does not consume an argument.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Returns: <string> The formatted string

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If a specifier does not have a corresponding argument, it is not replaced:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format('%s:%s', 'foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns: 'foo:%s'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format('%s:%s', 'foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Returns: 'foo:%s'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Values that are not part of the format string are formatted using util.inspect() if their type is not string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If there are more arguments passed to the util.format() method than the number of specifiers, the extra arguments are concatenated to the returned string, separated by spaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format('%s:%s', 'foo', 'bar', 'baz');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns: 'foo:bar baz'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format('%s:%s', 'foo', 'bar', 'baz');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Returns: 'foo:bar baz'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If the first argument does not contain a valid format specifier, util.format() returns a string that is the concatenation of all arguments separated by spaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format(1, 2, 3);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns: '1 2 3'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format(1, 2, 3);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Returns: '1 2 3'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If only one argument is passed to util.format(), it is returned as it is without any formatting:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format('%% %s');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns: '%% %s'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format('%% %s');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Returns: '%% %s'

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.format() is a synchronous method that is intended as a debugging tool. Some input values can have a significant performance overhead that can block the event loop. Use this function with care and never in a hot code path.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            @@ -494,10 +489,9 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            This function is identical to util.format(), except in that it takes an inspectOptions argument which specifies options that are passed along to util.inspect().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns 'See object { foo: 42 }', where `42` is colored as a number
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// when printed to a terminal.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.formatWithOptions({ colors: true }, 'See object %O', { foo: 42 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// Returns 'See object { foo: 42 }', where `42` is colored as a number
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +// when printed to a terminal.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.getSystemErrorName(err)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns true if the value is a BigUint64Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isBigUint64Array(new BigInt64Array());   // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.types.isBigUint64Array(new BigUint64Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isBigUint64Array(new BigInt64Array());   // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.types.isBigUint64Array(new BigUint64Array());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isBooleanObject(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Returns true if the value is a boolean object, e.g. created by new Boolean().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isBooleanObject(false);  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.types.isBooleanObject(true);   // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.types.isBooleanObject(new Boolean(false)); // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.types.isBooleanObject(new Boolean(true));  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.types.isBooleanObject(Boolean(false)); // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.types.isBooleanObject(Boolean(true));  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isBooleanObject(false);  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.types.isBooleanObject(true);   // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.types.isBooleanObject(new Boolean(false)); // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.types.isBooleanObject(new Boolean(true));  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.types.isBooleanObject(Boolean(false)); // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.types.isBooleanObject(Boolean(true));  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isBoxedPrimitive(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Returns true if the value is a built-in DataView instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const ab = new ArrayBuffer(20);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isDataView(new DataView(ab));  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isDataView(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const ab = new ArrayBuffer(20);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isDataView(new DataView(ab));  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isDataView(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  See also ArrayBuffer.isView().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  util.types.isDate(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns true if the value is a built-in Date instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isDate(new Date());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isDate(new Date());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isExternal(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Returns true if the value is a built-in Float32Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.types.isFloat32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.types.isFloat32Array(new Float32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.types.isFloat32Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.types.isFloat32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +util.types.isFloat32Array(new Float32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +util.types.isFloat32Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.types.isFloat64Array(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Returns true if the value is a built-in Float64Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isFloat64Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.types.isFloat64Array(new Uint8Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.types.isFloat64Array(new Float64Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isFloat64Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +util.types.isFloat64Array(new Uint8Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +util.types.isFloat64Array(new Float64Array());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isGeneratorFunction(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns true if the value is a built-in Int8Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isInt8Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.types.isInt8Array(new Int8Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.types.isInt8Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isInt8Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.types.isInt8Array(new Int8Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.types.isInt8Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isInt16Array(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns true if the value is a built-in Int16Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.types.isInt16Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.types.isInt16Array(new Int16Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.types.isInt16Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.types.isInt16Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.types.isInt16Array(new Int16Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.types.isInt16Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.types.isInt32Array(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns true if the value is a built-in Int32Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isInt32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.types.isInt32Array(new Int32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.types.isInt32Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isInt32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +util.types.isInt32Array(new Int32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +util.types.isInt32Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isMap(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Returns true if the value is a built-in Map instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isMap(new Map());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isMap(new Map());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isMapIterator(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Returns true if the value is an iterator returned for a built-in Map instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const map = new Map();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isMapIterator(map.keys());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isMapIterator(map.values());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isMapIterator(map.entries());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isMapIterator(map[Symbol.iterator]());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const map = new Map();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isMapIterator(map.keys());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isMapIterator(map.values());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isMapIterator(map.entries());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isMapIterator(map[Symbol.iterator]());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  util.types.isModuleNamespaceObject(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns true if the value is an instance of a Module Namespace Object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import * as ns from './a.js';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import * as ns from './a.js';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -util.types.isModuleNamespaceObject(ns);  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +util.types.isModuleNamespaceObject(ns); // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isNativeError(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Returns true if the value is an instance of a built-in Error type.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.types.isNativeError(new Error());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.types.isNativeError(new TypeError());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.types.isNativeError(new RangeError());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.types.isNativeError(new Error());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +util.types.isNativeError(new TypeError());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +util.types.isNativeError(new RangeError());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.types.isNumberObject(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Returns true if the value is a number object, e.g. created by new Number().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isNumberObject(0);  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.types.isNumberObject(new Number(0));   // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isNumberObject(0);  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +util.types.isNumberObject(new Number(0));   // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isPromise(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns true if the value is a built-in Promise.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isPromise(Promise.resolve(42));  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isPromise(Promise.resolve(42));  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isProxy(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns true if the value is a Proxy instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const target = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -const proxy = new Proxy(target, {});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.types.isProxy(target);  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.types.isProxy(proxy);  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const target = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +const proxy = new Proxy(target, {});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.types.isProxy(target);  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.types.isProxy(proxy);  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.types.isRegExp(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns true if the value is a regular expression object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isRegExp(/abc/);  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.types.isRegExp(new RegExp('abc'));  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isRegExp(/abc/);  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +util.types.isRegExp(new RegExp('abc'));  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isSet(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Returns true if the value is a built-in Set instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isSet(new Set());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isSet(new Set());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isSetIterator(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Returns true if the value is an iterator returned for a built-in Set instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const set = new Set();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isSetIterator(set.keys());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isSetIterator(set.values());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isSetIterator(set.entries());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.types.isSetIterator(set[Symbol.iterator]());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const set = new Set();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isSetIterator(set.keys());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isSetIterator(set.values());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isSetIterator(set.entries());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.types.isSetIterator(set[Symbol.iterator]());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  util.types.isSharedArrayBuffer(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns true if the value is a string object, e.g. created by new String().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isStringObject('foo');  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -util.types.isStringObject(new String('foo'));   // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isStringObject('foo');  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +util.types.isStringObject(new String('foo'));   // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isSymbolObject(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Returns true if the value is a symbol object, created by calling Object() on a Symbol primitive.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const symbol = Symbol('foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.types.isSymbolObject(symbol);  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.types.isSymbolObject(Object(symbol));   // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const symbol = Symbol('foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +util.types.isSymbolObject(symbol);  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +util.types.isSymbolObject(Object(symbol));   // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.types.isTypedArray(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Returns true if the value is a built-in TypedArray instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isTypedArray(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.types.isTypedArray(new Uint8Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.types.isTypedArray(new Float64Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isTypedArray(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +util.types.isTypedArray(new Uint8Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +util.types.isTypedArray(new Float64Array());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            See also ArrayBuffer.isView().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.types.isUint8Array(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns true if the value is a built-in Uint8Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isUint8Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.types.isUint8Array(new Uint8Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.types.isUint8Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isUint8Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.types.isUint8Array(new Uint8Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.types.isUint8Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.types.isUint8ClampedArray(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns true if the value is a built-in Uint8ClampedArray instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.types.isUint8ClampedArray(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.types.isUint8ClampedArray(new Uint8ClampedArray());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.types.isUint8ClampedArray(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.types.isUint8ClampedArray(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.types.isUint8ClampedArray(new Uint8ClampedArray());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.types.isUint8ClampedArray(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.types.isUint16Array(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns true if the value is a built-in Uint16Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isUint16Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.types.isUint16Array(new Uint16Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.types.isUint16Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isUint16Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +util.types.isUint16Array(new Uint16Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +util.types.isUint16Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.types.isUint32Array(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Returns true if the value is a built-in Uint32Array instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isUint32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.types.isUint32Array(new Uint32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.types.isUint32Array(new Float64Array());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isUint32Array(new ArrayBuffer());  // Returns false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.types.isUint32Array(new Uint32Array());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.types.isUint32Array(new Float64Array());  // Returns false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.types.isWeakMap(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Returns true if the value is a built-in WeakMap instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  util.types.isWeakMap(new WeakMap());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  util.types.isWeakMap(new WeakMap());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  util.types.isWeakSet(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns true if the value is a built-in WeakSet instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isWeakSet(new WeakSet());  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isWeakSet(new WeakSet());  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isWebAssemblyCompiledModule(value)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Returns true if the value is a built-in WebAssembly.Module instance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const module = new WebAssembly.Module(wasmBuffer);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.types.isWebAssemblyCompiledModule(module);  // Returns true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const module = new WebAssembly.Module(wasmBuffer);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +util.types.isWebAssemblyCompiledModule(module);  // Returns true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Deprecated APIs#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The following APIs are deprecated and should no longer be used. Existing applications and modules should be updated to find alternative approaches.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            @@ -2063,15 +1992,14 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Alias for Array.isArray().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns true if the given object is an Array. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           util.isArray([]);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isArray(new Array());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.isArray(new Array());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           util.isArray({});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.isBoolean(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns true if the given object is a Boolean. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.isBoolean(1);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.isBoolean(0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.isBoolean(false);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.isBoolean(1); +// Returns: false +util.isBoolean(0); +// Returns: false +util.isBoolean(false); +// Returns: true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.isBuffer(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Stability: 0 - Deprecated: Use Buffer.isBuffer() instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Stability: 0 - Deprecated: Use Buffer.isBuffer() instead.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns true if the given object is a Buffer. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.isBuffer({ length: 0 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.isBuffer({ length: 0 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         util.isBuffer([]);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.isBuffer(Buffer.from('hello world'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Returns: false +util.isBuffer(Buffer.from('hello world')); +// Returns: true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.isDate(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • Returns: <boolean>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns true if the given object is a Date. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.isDate(new Date());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.isDate(Date());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// false (without 'new' returns a String)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +util.isDate(new Date());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +util.isDate(Date());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// false (without 'new' returns a String)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       util.isDate({});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +// Returns: false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.isError(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Returns true if the given object is an Error. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.isError(new Error());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.isError(new TypeError());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.isError({ name: 'Error', message: 'an error occurred' });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.isError(new Error()); +// Returns: true +util.isError(new TypeError()); +// Returns: true +util.isError({ name: 'Error', message: 'an error occurred' }); +// Returns: false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This method relies on Object.prototype.toString() behavior. It is possible to obtain an incorrect result when the object argument manipulates @@toStringTag.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -const obj = { name: 'Error', message: 'an error occurred' };
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +const obj = { name: 'Error', message: 'an error occurred' };
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     util.isError(obj);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -obj[Symbol.toStringTag] = 'Error';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +obj[Symbol.toStringTag] = 'Error';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     util.isError(obj);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +// Returns: true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.isFunction(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Returns true if the given object is a Function. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -function Foo() {}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -const Bar = () => {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +function Foo() {}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +const Bar = () => {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   util.isFunction({});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   util.isFunction(Foo);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   util.isFunction(Bar);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Returns: true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  util.isNull(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns true if the given object is strictly null. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -util.isNull(0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -util.isNull(undefined);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -util.isNull(null);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +util.isNull(0); +// Returns: false +util.isNull(undefined); +// Returns: false +util.isNull(null); +// Returns: true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.isNullOrUndefined(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Returns true if the given object is null or undefined. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.isNullOrUndefined(0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.isNullOrUndefined(undefined);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -util.isNullOrUndefined(null);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +util.isNullOrUndefined(0); +// Returns: false +util.isNullOrUndefined(undefined); +// Returns: true +util.isNullOrUndefined(null); +// Returns: true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              util.isNumber(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Returns true if the given object is a Number. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.isNumber(false);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.isNumber(Infinity);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.isNumber(0);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -util.isNumber(NaN);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +util.isNumber(false); +// Returns: false +util.isNumber(Infinity); +// Returns: true +util.isNumber(0); +// Returns: true +util.isNumber(NaN); +// Returns: true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            util.isObject(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Returns true if the given object is a primitive type. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isPrimitive(5);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isPrimitive('foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isPrimitive(false);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isPrimitive(null);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isPrimitive(undefined);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.isPrimitive(5);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.isPrimitive('foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.isPrimitive(false);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.isPrimitive(null);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +util.isPrimitive(undefined);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           util.isPrimitive({});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isPrimitive(() => {});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isPrimitive(/^$/);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -util.isPrimitive(new Date());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +// Returns: false +util.isPrimitive(() => {}); +// Returns: false +util.isPrimitive(/^$/); +// Returns: false +util.isPrimitive(new Date()); +// Returns: false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          util.isRegExp(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Returns true if the given object is a RegExp. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.isRegExp(/some regexp/);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -util.isRegExp(new RegExp('another regexp'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.isRegExp(/some regexp/);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +util.isRegExp(new RegExp('another regexp'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         util.isRegExp({});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +// Returns: false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        util.isString(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Returns true if the given object is a string. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.isString('');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.isString('foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.isString(String('foo'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -util.isString(5);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      +util.isString(''); +// Returns: true +util.isString('foo'); +// Returns: true +util.isString(String('foo')); +// Returns: true +util.isString(5); +// Returns: false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      util.isSymbol(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Returns true if the given object is a Symbol. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.isSymbol(5);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.isSymbol('foo');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -util.isSymbol(Symbol('foo'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +util.isSymbol(5); +// Returns: false +util.isSymbol('foo'); +// Returns: false +util.isSymbol(Symbol('foo')); +// Returns: true

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    util.isUndefined(object)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Returns true if the given object is undefined. Otherwise, returns false.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -const foo = undefined;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.isUndefined(5);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +const foo = undefined;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +util.isUndefined(5);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   util.isUndefined(foo);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Returns: true
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -util.isUndefined(null);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -// Returns: false
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +// Returns: true +util.isUndefined(null); +// Returns: false

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  util.log(string)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The util.log() method prints the given string to stdout with an included timestamp.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -util.log('Timestamped message.');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +util.log('Timestamped message.');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                + - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/util.json nodejs-mozilla-12.22.12/doc/api/util.json --- nodejs-mozilla-12.18.1/doc/api/util.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/util.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The util module supports the needs of Node.js internal APIs. Many of the\nutilities are useful for application and module developers as well. To access\nit:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Source Code: lib/util.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The util module supports the needs of Node.js internal APIs. Many of the\nutilities are useful for application and module developers as well. To access\nit:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "methods": [ { "textRaw": "`util.callbackify(original)`", @@ -38,10 +38,10 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Takes an async function (or a function that returns a Promise) and returns a\nfunction following the error-first callback style, i.e. taking\nan (err, value) => ... callback as the last argument. In the callback, the\nfirst argument will be the rejection reason (or null if the Promise\nresolved), and the second argument will be the resolved value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\n\nasync function fn() {\n  return 'hello world';\n}\nconst callbackFunction = util.callbackify(fn);\n\ncallbackFunction((err, ret) => {\n  if (err) throw err;\n  console.log(ret);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Will print:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                hello world\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The callback is executed asynchronously, and will have a limited stack trace.\nIf the callback throws, the process will emit an 'uncaughtException'\nevent, and if not handled will exit.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Since null has a special meaning as the first argument to a callback, if a\nwrapped function rejects a Promise with a falsy value as a reason, the value\nis wrapped in an Error with the original value stored in a field named\nreason.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                function fn() {\n  return Promise.reject(null);\n}\nconst callbackFunction = util.callbackify(fn);\n\ncallbackFunction((err, ret) => {\n  // When the Promise was rejected with `null` it is wrapped with an Error and\n  // the original value is stored in `reason`.\n  err && err.hasOwnProperty('reason') && err.reason === null;  // true\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Takes an async function (or a function that returns a Promise) and returns a\nfunction following the error-first callback style, i.e. taking\nan (err, value) => ... callback as the last argument. In the callback, the\nfirst argument will be the rejection reason (or null if the Promise\nresolved), and the second argument will be the resolved value.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\n\nasync function fn() {\n  return 'hello world';\n}\nconst callbackFunction = util.callbackify(fn);\n\ncallbackFunction((err, ret) => {\n  if (err) throw err;\n  console.log(ret);\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Will print:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                hello world\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The callback is executed asynchronously, and will have a limited stack trace.\nIf the callback throws, the process will emit an 'uncaughtException'\nevent, and if not handled will exit.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Since null has a special meaning as the first argument to a callback, if a\nwrapped function rejects a Promise with a falsy value as a reason, the value\nis wrapped in an Error with the original value stored in a field named\nreason.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                function fn() {\n  return Promise.reject(null);\n}\nconst callbackFunction = util.callbackify(fn);\n\ncallbackFunction((err, ret) => {\n  // When the Promise was rejected with `null` it is wrapped with an Error and\n  // the original value is stored in `reason`.\n  err && err.hasOwnProperty('reason') && err.reason === null;  // true\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " }, { - "textRaw": "`util.debuglog(section)`", + "textRaw": "`util.debuglog(section[, callback])`", "type": "method", "name": "debuglog", "meta": { @@ -64,11 +64,17 @@ "name": "section", "type": "string", "desc": "A string identifying the portion of the application for which the `debuglog` function is being created." + }, + { + "textRaw": "`callback` {Function} A callback invoked the first time the logging function is called with a function argument that is a more optimized logging function.", + "name": "callback", + "type": "Function", + "desc": "A callback invoked the first time the logging function is called with a function argument that is a more optimized logging function." } ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The util.debuglog() method is used to create a function that conditionally\nwrites debug messages to stderr based on the existence of the NODE_DEBUG\nenvironment variable. If the section name appears within the value of that\nenvironment variable, then the returned function operates similar to\nconsole.error(). If not, then the returned function is a no-op.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\nconst debuglog = util.debuglog('foo');\n\ndebuglog('hello from foo [%d]', 123);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If this program is run with NODE_DEBUG=foo in the environment, then\nit will output something like:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                FOO 3245: hello from foo [123]\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                where 3245 is the process id. If it is not run with that\nenvironment variable set, then it will not print anything.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The section supports wildcard also:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\nconst debuglog = util.debuglog('foo-bar');\n\ndebuglog('hi there, it\\'s foo-bar [%d]', 2333);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                if it is run with NODE_DEBUG=foo* in the environment, then it will output\nsomething like:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                FOO-BAR 3257: hi there, it's foo-bar [2333]\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Multiple comma-separated section names may be specified in the NODE_DEBUG\nenvironment variable: NODE_DEBUG=fs,net,tls.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The util.debuglog() method is used to create a function that conditionally\nwrites debug messages to stderr based on the existence of the NODE_DEBUG\nenvironment variable. If the section name appears within the value of that\nenvironment variable, then the returned function operates similar to\nconsole.error(). If not, then the returned function is a no-op.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\nconst debuglog = util.debuglog('foo');\n\ndebuglog('hello from foo [%d]', 123);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If this program is run with NODE_DEBUG=foo in the environment, then\nit will output something like:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                FOO 3245: hello from foo [123]\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                where 3245 is the process id. If it is not run with that\nenvironment variable set, then it will not print anything.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The section supports wildcard also:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\nconst debuglog = util.debuglog('foo-bar');\n\ndebuglog('hi there, it\\'s foo-bar [%d]', 2333);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                if it is run with NODE_DEBUG=foo* in the environment, then it will output\nsomething like:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                FOO-BAR 3257: hi there, it's foo-bar [2333]\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Multiple comma-separated section names may be specified in the NODE_DEBUG\nenvironment variable: NODE_DEBUG=fs,net,tls.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The optional callback argument can be used to replace the logging function\nwith a different function that doesn't have any initialization or\nunnecessary wrapping.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\nlet debuglog = util.debuglog('internals', (debug) => {\n  // Replace with a logging function that optimizes out\n  // testing if the section is enabled\n  debuglog = debug;\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " }, { "textRaw": "`util.deprecate(fn, msg[, code])`", @@ -181,7 +187,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The util.format() method returns a formatted string using the first argument\nas a printf-like format string which can contain zero or more format\nspecifiers. Each specifier is replaced with the converted value from the\ncorresponding argument. Supported specifiers are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %s: String will be used to convert all values except BigInt, Object\nand -0. BigInt values will be represented with an n and Objects that\nhave no user defined toString function are inspected using util.inspect()\nwith options { depth: 0, colors: false, compact: 3 }.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %d: Number will be used to convert all values except BigInt and\nSymbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %i: parseInt(value, 10) is used for all values except BigInt and\nSymbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %f: parseFloat(value) is used for all values expect Symbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %j: JSON. Replaced with the string '[Circular]' if the argument contains\ncircular references.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %o: Object. A string representation of an object with generic JavaScript\nobject formatting. Similar to util.inspect() with options\n{ showHidden: true, showProxy: true }. This will show the full object\nincluding non-enumerable properties and proxies.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %O: Object. A string representation of an object with generic JavaScript\nobject formatting. Similar to util.inspect() without options. This will show\nthe full object not including non-enumerable properties and proxies.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %c: CSS. This specifier is currently ignored, and will skip any CSS\npassed in.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %%: single percent sign ('%'). This does not consume an argument.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Returns: <string> The formatted string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If a specifier does not have a corresponding argument, it is not replaced:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format('%s:%s', 'foo');\n// Returns: 'foo:%s'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Values that are not part of the format string are formatted using\nutil.inspect() if their type is not string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If there are more arguments passed to the util.format() method than the\nnumber of specifiers, the extra arguments are concatenated to the returned\nstring, separated by spaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format('%s:%s', 'foo', 'bar', 'baz');\n// Returns: 'foo:bar baz'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the first argument does not contain a valid format specifier, util.format()\nreturns a string that is the concatenation of all arguments separated by spaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format(1, 2, 3);\n// Returns: '1 2 3'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If only one argument is passed to util.format(), it is returned as it is\nwithout any formatting:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format('%% %s');\n// Returns: '%% %s'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format() is a synchronous method that is intended as a debugging tool.\nSome input values can have a significant performance overhead that can block the\nevent loop. Use this function with care and never in a hot code path.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The util.format() method returns a formatted string using the first argument\nas a printf-like format string which can contain zero or more format\nspecifiers. Each specifier is replaced with the converted value from the\ncorresponding argument. Supported specifiers are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %s: String will be used to convert all values except BigInt, Object\nand -0. BigInt values will be represented with an n and Objects that\nhave no user defined toString function are inspected using util.inspect()\nwith options { depth: 0, colors: false, compact: 3 }.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %d: Number will be used to convert all values except BigInt and\nSymbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %i: parseInt(value, 10) is used for all values except BigInt and\nSymbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %f: parseFloat(value) is used for all values expect Symbol.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %j: JSON. Replaced with the string '[Circular]' if the argument contains\ncircular references.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %o: Object. A string representation of an object with generic JavaScript\nobject formatting. Similar to util.inspect() with options\n{ showHidden: true, showProxy: true }. This will show the full object\nincluding non-enumerable properties and proxies.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %O: Object. A string representation of an object with generic JavaScript\nobject formatting. Similar to util.inspect() without options. This will show\nthe full object not including non-enumerable properties and proxies.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %c: CSS. This specifier is ignored and will skip any CSS passed in.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • %%: single percent sign ('%'). This does not consume an argument.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Returns: <string> The formatted string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If a specifier does not have a corresponding argument, it is not replaced:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format('%s:%s', 'foo');\n// Returns: 'foo:%s'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Values that are not part of the format string are formatted using\nutil.inspect() if their type is not string.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If there are more arguments passed to the util.format() method than the\nnumber of specifiers, the extra arguments are concatenated to the returned\nstring, separated by spaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format('%s:%s', 'foo', 'bar', 'baz');\n// Returns: 'foo:bar baz'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If the first argument does not contain a valid format specifier, util.format()\nreturns a string that is the concatenation of all arguments separated by spaces:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format(1, 2, 3);\n// Returns: '1 2 3'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                If only one argument is passed to util.format(), it is returned as it is\nwithout any formatting:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format('%% %s');\n// Returns: '%% %s'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.format() is a synchronous method that is intended as a debugging tool.\nSome input values can have a significant performance overhead that can block the\nevent loop. Use this function with care and never in a hot code path.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " }, { "textRaw": "`util.formatWithOptions(inspectOptions, format[, ...args])`", @@ -283,6 +289,14 @@ ], "changes": [ { + "version": [ + "v14.6.0", + "v12.19.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/33690", + "description": "If `object` is from a different `vm.Context` now, a custom inspection function on it will not receive context-specific arguments anymore." + }, + { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32392", "description": "The `maxStringLength` option is supported now." @@ -487,6 +501,14 @@ ], "changes": [ { + "version": [ + "v14.6.0", + "v12.19.0" + ], + "pr-url": "https://github.com/nodejs/node/pull/33690", + "description": "If `object` is from a different `vm.Context` now, a custom inspection function on it will not receive context-specific arguments anymore." + }, + { "version": "v12.17.0", "pr-url": "https://github.com/nodejs/node/pull/32392", "description": "The `maxStringLength` option is supported now." @@ -711,8 +733,8 @@ ] }, { - "textRaw": "Custom inspection functions on Objects", - "name": "Custom inspection functions on Objects", + "textRaw": "Custom inspection functions on objects", + "name": "Custom inspection functions on objects", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Objects may also define their own\n[util.inspect.custom](depth, opts) function,\nwhich util.inspect() will invoke and use the result of when inspecting\nthe object:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\n\nclass Box {\n  constructor(value) {\n    this.value = value;\n  }\n\n  [util.inspect.custom](depth, options) {\n    if (depth < 0) {\n      return options.stylize('[Box]', 'special');\n    }\n\n    const newOptions = Object.assign({}, options, {\n      depth: options.depth === null ? null : options.depth - 1\n    });\n\n    // Five space padding because that's the size of \"Box< \".\n    const padding = ' '.repeat(5);\n    const inner = util.inspect(this.value, newOptions)\n                      .replace(/\\n/g, `\\n${padding}`);\n    return `${options.stylize('Box', 'special')}< ${inner} >`;\n  }\n}\n\nconst box = new Box(true);\n\nutil.inspect(box);\n// Returns: \"Box< true >\"\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Custom [util.inspect.custom](depth, opts) functions typically return a string\nbut may return a value of any type that will be formatted accordingly by\nutil.inspect().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const util = require('util');\n\nconst obj = { foo: 'this will not show up in the inspect() output' };\nobj[util.inspect.custom] = (depth) => {\n  return { bar: 'baz' };\n};\n\nutil.inspect(obj);\n// Returns: \"{ bar: 'baz' }\"\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " } @@ -856,7 +878,7 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                An implementation of the WHATWG Encoding Standard TextDecoder API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const decoder = new TextDecoder('shift_jis');\nlet string = '';\nlet buffer;\nwhile (buffer = getNextChunkSomehow()) {\n  string += decoder.decode(buffer, { stream: true });\n}\nstring += decoder.decode(); // end-of-stream\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ { - "textRaw": "WHATWG Supported Encodings", + "textRaw": "WHATWG supported encodings", "name": "whatwg_supported_encodings", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Per the WHATWG Encoding Standard, the encodings supported by the\nTextDecoder API are outlined in the tables below. For each encoding,\none or more aliases may be used.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Different Node.js build configurations support different sets of encodings.\nWhile a very basic set of encodings is supported even on Node.js builds without\nICU enabled, support for some encodings is provided only when Node.js is built\nwith ICU and using the full ICU data (see Internationalization).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "modules": [ @@ -875,15 +897,15 @@ "displayName": "Encodings Supported by Default (With ICU)" }, { - "textRaw": "Encodings Requiring Full ICU Data", + "textRaw": "Encodings requiring full ICU data", "name": "encodings_requiring_full_icu_data", "desc": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                EncodingAliases
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'ibm866''866', 'cp866', 'csibm866'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-2''csisolatin2', 'iso-ir-101', 'iso8859-2', 'iso88592', 'iso_8859-2', 'iso_8859-2:1987', 'l2', 'latin2'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-3''csisolatin3', 'iso-ir-109', 'iso8859-3', 'iso88593', 'iso_8859-3', 'iso_8859-3:1988', 'l3', 'latin3'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-4''csisolatin4', 'iso-ir-110', 'iso8859-4', 'iso88594', 'iso_8859-4', 'iso_8859-4:1988', 'l4', 'latin4'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-5''csisolatincyrillic', 'cyrillic', 'iso-ir-144', 'iso8859-5', 'iso88595', 'iso_8859-5', 'iso_8859-5:1988'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-6''arabic', 'asmo-708', 'csiso88596e', 'csiso88596i', 'csisolatinarabic', 'ecma-114', 'iso-8859-6-e', 'iso-8859-6-i', 'iso-ir-127', 'iso8859-6', 'iso88596', 'iso_8859-6', 'iso_8859-6:1987'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-7''csisolatingreek', 'ecma-118', 'elot_928', 'greek', 'greek8', 'iso-ir-126', 'iso8859-7', 'iso88597', 'iso_8859-7', 'iso_8859-7:1987', 'sun_eu_greek'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-8''csiso88598e', 'csisolatinhebrew', 'hebrew', 'iso-8859-8-e', 'iso-ir-138', 'iso8859-8', 'iso88598', 'iso_8859-8', 'iso_8859-8:1988', 'visual'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-8-i''csiso88598i', 'logical'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-10''csisolatin6', 'iso-ir-157', 'iso8859-10', 'iso885910', 'l6', 'latin6'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-13''iso8859-13', 'iso885913'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-14''iso8859-14', 'iso885914'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-8859-15''csisolatin9', 'iso8859-15', 'iso885915', 'iso_8859-15', 'l9'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'koi8-r''cskoi8r', 'koi', 'koi8', 'koi8_r'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'koi8-u''koi8-ru'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'macintosh''csmacintosh', 'mac', 'x-mac-roman'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-874''dos-874', 'iso-8859-11', 'iso8859-11', 'iso885911', 'tis-620'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1250''cp1250', 'x-cp1250'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1251''cp1251', 'x-cp1251'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1252''ansi_x3.4-1968', 'ascii', 'cp1252', 'cp819', 'csisolatin1', 'ibm819', 'iso-8859-1', 'iso-ir-100', 'iso8859-1', 'iso88591', 'iso_8859-1', 'iso_8859-1:1987', 'l1', 'latin1', 'us-ascii', 'x-cp1252'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1253''cp1253', 'x-cp1253'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1254''cp1254', 'csisolatin5', 'iso-8859-9', 'iso-ir-148', 'iso8859-9', 'iso88599', 'iso_8859-9', 'iso_8859-9:1989', 'l5', 'latin5', 'x-cp1254'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1255''cp1255', 'x-cp1255'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1256''cp1256', 'x-cp1256'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1257''cp1257', 'x-cp1257'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'windows-1258''cp1258', 'x-cp1258'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'x-mac-cyrillic''x-mac-ukrainian'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'gbk''chinese', 'csgb2312', 'csiso58gb231280', 'gb2312', 'gb_2312', 'gb_2312-80', 'iso-ir-58', 'x-gbk'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'gb18030'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'big5''big5-hkscs', 'cn-big5', 'csbig5', 'x-x-big5'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'euc-jp''cseucpkdfmtjapanese', 'x-euc-jp'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'iso-2022-jp''csiso2022jp'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'shift_jis''csshiftjis', 'ms932', 'ms_kanji', 'shift-jis', 'sjis', 'windows-31j', 'x-sjis'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                'euc-kr''cseuckr', 'csksc56011987', 'iso-ir-149', 'korean', 'ks_c_5601-1987', 'ks_c_5601-1989', 'ksc5601', 'ksc_5601', 'windows-949'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The 'iso-8859-16' encoding listed in the WHATWG Encoding Standard\nis not supported.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "type": "module", - "displayName": "Encodings Requiring Full ICU Data" + "displayName": "Encodings requiring full ICU data" } ], "type": "module", - "displayName": "WHATWG Supported Encodings" + "displayName": "WHATWG supported encodings" } ], "methods": [ @@ -1143,7 +1165,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns true if the value is an instance of one of the ArrayBuffer\nviews, such as typed array objects or DataView. Equivalent to\nArrayBuffer.isView().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isArrayBufferView(new Int8Array());  // true\nutil.types.isArrayBufferView(Buffer.from('hello world')); // true\nutil.types.isArrayBufferView(new DataView(new ArrayBuffer(16)));  // true\nutil.types.isArrayBufferView(new ArrayBuffer());  // false\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns true if the value is an instance of one of the ArrayBuffer\nviews, such as typed array objects or DataView. Equivalent to\nArrayBuffer.isView().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                util.types.isArrayBufferView(new Int8Array());  // true\nutil.types.isArrayBufferView(Buffer.from('hello world')); // true\nutil.types.isArrayBufferView(new DataView(new ArrayBuffer(16)));  // true\nutil.types.isArrayBufferView(new ArrayBuffer());  // false\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " }, { "textRaw": "`util.types.isArgumentsObject(value)`", diff -Nru nodejs-mozilla-12.18.1/doc/api/util.md nodejs-mozilla-12.22.12/doc/api/util.md --- nodejs-mozilla-12.18.1/doc/api/util.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/util.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `util` module supports the needs of Node.js internal APIs. Many of the utilities are useful for application and module developers as well. To access it: @@ -42,7 +44,7 @@ Will print: -```txt +```text hello world ``` @@ -68,13 +70,15 @@ }); ``` -## `util.debuglog(section)` +## `util.debuglog(section[, callback])` * `section` {string} A string identifying the portion of the application for which the `debuglog` function is being created. +* `callback` {Function} A callback invoked the first time the logging function +is called with a function argument that is a more optimized logging function. * Returns: {Function} The logging function The `util.debuglog()` method is used to create a function that conditionally @@ -93,7 +97,7 @@ If this program is run with `NODE_DEBUG=foo` in the environment, then it will output something like: -```txt +```console FOO 3245: hello from foo [123] ``` @@ -112,13 +116,26 @@ if it is run with `NODE_DEBUG=foo*` in the environment, then it will output something like: -```txt +```console FOO-BAR 3257: hi there, it's foo-bar [2333] ``` Multiple comma-separated `section` names may be specified in the `NODE_DEBUG` environment variable: `NODE_DEBUG=fs,net,tls`. +The optional `callback` argument can be used to replace the logging function +with a different function that doesn't have any initialization or +unnecessary wrapping. + +```js +const util = require('util'); +let debuglog = util.debuglog('internals', (debug) => { + // Replace with a logging function that optimizes out + // testing if the section is enabled + debuglog = debug; +}); +``` + ## `util.deprecate(fn, msg[, code])` @@ -1041,7 +1064,7 @@ string += decoder.decode(); // end-of-stream ``` -### WHATWG Supported Encodings +### WHATWG supported encodings Per the [WHATWG Encoding Standard][], the encodings supported by the `TextDecoder` API are outlined in the tables below. For each encoding, @@ -1067,7 +1090,7 @@ | `'utf-16le'` | `'utf-16'` | | `'utf-16be'` | | -#### Encodings Requiring Full ICU Data +#### Encodings requiring full ICU data | Encoding | Aliases | | ----------------- | -------------------------------- | @@ -1263,7 +1286,7 @@ * Returns: {boolean} Returns `true` if the value is an instance of one of the [`ArrayBuffer`][] -views, such as typed array objects or [`DataView`][]. Equivalent to +views, such as typed array objects or [`DataView`][]. Equivalent to [`ArrayBuffer.isView()`][]. ```js @@ -2383,7 +2406,7 @@ [`Array.isArray()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray [`ArrayBuffer.isView()`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView [`ArrayBuffer`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer -[`Buffer.isBuffer()`]: buffer.html#buffer_class_method_buffer_isbuffer_obj +[`Buffer.isBuffer()`]: buffer.html#buffer_static_method_buffer_isbuffer_obj [`DataView`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView [`Date`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date [`Error`]: errors.html#errors_class_error @@ -2420,7 +2443,7 @@ [`util.types.isNativeError()`]: #util_util_types_isnativeerror_value [`util.types.isSharedArrayBuffer()`]: #util_util_types_issharedarraybuffer_value [Common System Errors]: errors.html#errors_common_system_errors -[Custom inspection functions on Objects]: #util_custom_inspection_functions_on_objects +[Custom inspection functions on objects]: #util_custom_inspection_functions_on_objects [Custom promisified functions]: #util_custom_promisified_functions [Customizing `util.inspect` colors]: #util_customizing_util_inspect_colors [Internationalization]: intl.html diff -Nru nodejs-mozilla-12.18.1/doc/api/v8.html nodejs-mozilla-12.22.12/doc/api/v8.html --- nodejs-mozilla-12.18.1/doc/api/v8.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/v8.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - V8 | Node.js v12.18.1 Documentation + + V8 | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • View on single page @@ -97,11 +101,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    10. 11.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    11. -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    12. 10.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    13. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    14. 10.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    15. 9.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    16. 8.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    17. 7.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    18. @@ -119,8 +126,7 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        V8

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      • V8
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8.cachedDataVersionTag()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8.getHeapSpaceStatistics()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • @@ -128,14 +134,14 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8.getHeapStatistics()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8.getHeapCodeStatistics()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8.setFlagsFromString(flags)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8.takeCoverage()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8.stopCoverage()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • v8.writeHeapSnapshot([filename])
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Serialization API

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • Serialization API
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_name": "new_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_size": 2063872,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_used_size": 951112,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_available_size": 80824,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "physical_space_size": 2063872
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_name": "new_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_size": 2063872,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_used_size": 951112,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_available_size": 80824,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "physical_space_size": 2063872
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_name": "old_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_size": 3090560,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_used_size": 2493792,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_available_size": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "physical_space_size": 3090560
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_name": "old_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_size": 3090560,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_used_size": 2493792,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_available_size": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "physical_space_size": 3090560
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_name": "code_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_size": 1260160,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_used_size": 644256,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_available_size": 960,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "physical_space_size": 1260160
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_name": "code_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_size": 1260160,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_used_size": 644256,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_available_size": 960,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "physical_space_size": 1260160
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_name": "map_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_size": 1094160,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_used_size": 201608,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_available_size": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "physical_space_size": 1094160
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_name": "map_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_size": 1094160,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_used_size": 201608,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_available_size": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "physical_space_size": 1094160
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_name": "large_object_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_size": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_used_size": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "space_available_size": 1490980608,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -    "physical_space_size": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_name": "large_object_space",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_size": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_used_size": 0,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "space_available_size": 1490980608,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +    "physical_space_size": 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +]

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          v8.getHeapSnapshot()#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  code_and_metadata_size: 212208,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  bytecode_and_metadata_size: 161368,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -  external_script_source_size: 1410794
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        + code_and_metadata_size: 212208, + bytecode_and_metadata_size: 161368, + external_script_source_size: 1410794 +}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        v8.setFlagsFromString(flags)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/v8.json nodejs-mozilla-12.22.12/doc/api/v8.json --- nodejs-mozilla-12.18.1/doc/api/v8.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/v8.json 2022-04-05 07:17:04.000000000 +0000 @@ -6,7 +6,7 @@ "textRaw": "V8", "name": "v8", "introduced_in": "v4.0.0", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The v8 module exposes APIs that are specific to the version of V8\nbuilt into the Node.js binary. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const v8 = require('v8');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The APIs and implementation are subject to change at any time.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Source Code: lib/v8.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The v8 module exposes APIs that are specific to the version of V8\nbuilt into the Node.js binary. It can be accessed using:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const v8 = require('v8');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The APIs and implementation are subject to change at any time.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ", "methods": [ { "textRaw": "`v8.cachedDataVersionTag()`", @@ -28,7 +28,7 @@ "params": [] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns an integer representing a \"version tag\" derived from the V8 version,\ncommand line flags and detected CPU features. This is useful for determining\nwhether a vm.Script cachedData buffer is compatible with this instance\nof V8.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Returns an integer representing a \"version tag\" derived from the V8 version,\ncommand line flags and detected CPU features. This is useful for determining\nwhether a vm.Script cachedData buffer is compatible with this instance\nof V8.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " }, { "textRaw": "`v8.getHeapSpaceStatistics()`", @@ -160,6 +160,40 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The v8.setFlagsFromString() method can be used to programmatically set\nV8 command line flags. This method should be used with care. Changing settings\nafter the VM has started may result in unpredictable behavior, including\ncrashes and data loss; or it may simply do nothing.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The V8 options available for a version of Node.js may be determined by running\nnode --v8-options.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Usage:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // Print GC events to stdout for one minute.\nconst v8 = require('v8');\nv8.setFlagsFromString('--trace_gc');\nsetTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " }, { + "textRaw": "`v8.takeCoverage()`", + "type": "method", + "name": "takeCoverage", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The v8.takeCoverage() method allows the user to write the coverage started by\nNODE_V8_COVERAGE to disk on demand. This method can be invoked multiple\ntimes during the lifetime of the process, each time the execution counter will\nbe reset and a new coverage report will be written to the directory specified\nby NODE_V8_COVERAGE.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                When the process is about to exit, one last coverage will still be written to\ndisk, unless v8.stopCoverage() is invoked before the process exits.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + }, + { + "textRaw": "`v8.stopCoverage()`", + "type": "method", + "name": "stopCoverage", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                The v8.stopCoverage() method allows the user to stop the coverage collection\nstarted by NODE_V8_COVERAGE, so that V8 can release the execution count\nrecords and optimize code. This can be used in conjunction with\nv8.takeCoverage() if the user wants to collect the coverage on demand.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + }, + { "textRaw": "`v8.writeHeapSnapshot([filename])`", "type": "method", "name": "writeHeapSnapshot", @@ -187,7 +221,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Generates a snapshot of the current V8 heap and writes it to a JSON\nfile. This file is intended to be used with tools such as Chrome\nDevTools. The JSON schema is undocumented and specific to the V8\nengine, and may change from one version of V8 to the next.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A heap snapshot is specific to a single V8 isolate. When using\nWorker Threads, a heap snapshot generated from the main thread will\nnot contain any information about the workers, and vice versa.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const { writeHeapSnapshot } = require('v8');\nconst {\n  Worker,\n  isMainThread,\n  parentPort\n} = require('worker_threads');\n\nif (isMainThread) {\n  const worker = new Worker(__filename);\n\n  worker.once('message', (filename) => {\n    console.log(`worker heapdump: ${filename}`);\n    // Now get a heapdump for the main thread.\n    console.log(`main thread heapdump: ${writeHeapSnapshot()}`);\n  });\n\n  // Tell the worker to create a heapdump.\n  worker.postMessage('heapdump');\n} else {\n  parentPort.once('message', (message) => {\n    if (message === 'heapdump') {\n      // Generate a heapdump for the worker\n      // and return the filename to the parent.\n      parentPort.postMessage(writeHeapSnapshot());\n    }\n  });\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Generates a snapshot of the current V8 heap and writes it to a JSON\nfile. This file is intended to be used with tools such as Chrome\nDevTools. The JSON schema is undocumented and specific to the V8\nengine, and may change from one version of V8 to the next.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                A heap snapshot is specific to a single V8 isolate. When using\nworker threads, a heap snapshot generated from the main thread will\nnot contain any information about the workers, and vice versa.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                const { writeHeapSnapshot } = require('v8');\nconst {\n  Worker,\n  isMainThread,\n  parentPort\n} = require('worker_threads');\n\nif (isMainThread) {\n  const worker = new Worker(__filename);\n\n  worker.once('message', (filename) => {\n    console.log(`worker heapdump: ${filename}`);\n    // Now get a heapdump for the main thread.\n    console.log(`main thread heapdump: ${writeHeapSnapshot()}`);\n  });\n\n  // Tell the worker to create a heapdump.\n  worker.postMessage('heapdump');\n} else {\n  parentPort.once('message', (message) => {\n    if (message === 'heapdump') {\n      // Generate a heapdump for the worker\n      // and return the filename to the parent.\n      parentPort.postMessage(writeHeapSnapshot());\n    }\n  });\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                " } ], "modules": [ diff -Nru nodejs-mozilla-12.18.1/doc/api/v8.md nodejs-mozilla-12.22.12/doc/api/v8.md --- nodejs-mozilla-12.18.1/doc/api/v8.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/v8.md 2022-04-05 07:17:04.000000000 +0000 @@ -2,6 +2,8 @@ + + The `v8` module exposes APIs that are specific to the version of [V8][] built into the Node.js binary. It can be accessed using: @@ -212,6 +214,32 @@ setTimeout(() => { v8.setFlagsFromString('--notrace_gc'); }, 60e3); ``` +## `v8.takeCoverage()` + + + +The `v8.takeCoverage()` method allows the user to write the coverage started by +[`NODE_V8_COVERAGE`][] to disk on demand. This method can be invoked multiple +times during the lifetime of the process, each time the execution counter will +be reset and a new coverage report will be written to the directory specified +by [`NODE_V8_COVERAGE`][]. + +When the process is about to exit, one last coverage will still be written to +disk, unless [`v8.stopCoverage()`][] is invoked before the process exits. + +## `v8.stopCoverage()` + + + +The `v8.stopCoverage()` method allows the user to stop the coverage collection +started by [`NODE_V8_COVERAGE`][], so that V8 can release the execution count +records and optimize code. This can be used in conjunction with +`v8.takeCoverage()` if the user wants to collect the coverage on demand. + ## `v8.writeHeapSnapshot([filename])` -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import foo from 'foo';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -//              ^^^^^ the module specifier
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                import foo from 'foo';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +//              ^^^^^ the module specifier
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • referencingModule <vm.Module> The Module object link() is called on.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                @@ -729,11 +718,10 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The vm.SourceTextModule class provides the Source Text Module Record as defined in the ECMAScript specification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Constructor: new vm.SourceTextModule(code[, options])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              new vm.SourceTextModule(code[, options])#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • code <string> JavaScript Module code to parse
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                options

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • options
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • identifier <string> String used in stack traces. Default: 'vm:module(i)' where i is a context-specific ascending @@ -748,18 +736,16 @@ in stack traces produced by this Module. Default: 0.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • columnOffset <integer> Specifies the column number offset that is displayed in stack traces produced by this Module. Default: 0.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  initializeImportMeta <Function> Called during evaluation of this Module -to initialize the import.meta.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • initializeImportMeta <Function> Called during evaluation of this Module +to initialize the import.meta.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  importModuleDynamically <Function> Called during evaluation of this module +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • importModuleDynamically <Function> Called during evaluation of this module when import() is called. If this option is not specified, calls to -import() will reject with ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +import() will reject with ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • specifier <string> specifier passed to import()
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • module <vm.Module>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • @@ -775,34 +761,33 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Properties assigned to the import.meta object that are objects may allow the module to access information outside the specified context. Use vm.runInContext() to create objects in a specific context.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -const contextifiedObject = vm.createContext({ secret: 42 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +const contextifiedObject = vm.createContext({ secret: 42 });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -(async () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  const module = new vm.SourceTextModule(
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -    'Object.getPrototypeOf(import.meta.prop).secret = secret;',
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +(async () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  const module = new vm.SourceTextModule(
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +    'Object.getPrototypeOf(import.meta.prop).secret = secret;',
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           initializeImportMeta(meta) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -        // Note: this object is created in the top context. As such,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -        // Object.getPrototypeOf(import.meta.prop) points to the
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -        // Object.prototype in the top context rather than that in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -        // the contextified object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +        // Note: this object is created in the top context. As such,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +        // Object.getPrototypeOf(import.meta.prop) points to the
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +        // Object.prototype in the top context rather than that in
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +        // the contextified object.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             meta.prop = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  // Since module has no dependencies, the linker function will never be called.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  await module.link(() => {});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  await module.evaluate();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  // Now, Object.prototype.secret will be equal to 42.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  //
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  // To fix this problem, replace
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  //     meta.prop = {};
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  // above with
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  //     meta.prop = vm.runInContext('{}', contextifiedObject);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -})();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + // Since module has no dependencies, the linker function will never be called. + await module.link(() => {}); + await module.evaluate(); + + // Now, Object.prototype.secret will be equal to 42. + // + // To fix this problem, replace + // meta.prop = {}; + // above with + // meta.prop = vm.runInContext('{}', contextifiedObject); +})();

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    sourceTextModule.createCachedData()#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/vm.json nodejs-mozilla-12.22.12/doc/api/vm.json --- nodejs-mozilla-12.18.1/doc/api/vm.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/vm.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,12 +3,12 @@ "source": "doc/api/vm.md", "modules": [ { - "textRaw": "VM (Executing JavaScript)", + "textRaw": "VM (executing JavaScript)", "name": "vm", "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The vm module enables compiling and running code within V8 Virtual\nMachine contexts. The vm module is not a security mechanism. Do\nnot use it to run untrusted code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    JavaScript code can be compiled and run immediately or\ncompiled, saved, and run later.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A common use case is to run the code in a different V8 Context. This means\ninvoked code has a different global object than the invoking code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    One can provide the context by contextifying an\nobject. The invoked code treats any property in the context like a\nglobal variable. Any changes to global variables caused by the invoked\ncode are reflected in the context object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');\n\nconst x = 1;\n\nconst context = { x: 2 };\nvm.createContext(context); // Contextify the object.\n\nconst code = 'x += 40; var y = 17;';\n// `x` and `y` are global variables in the context.\n// Initially, x has the value 2 because that is the value of context.x.\nvm.runInContext(code, context);\n\nconsole.log(context.x); // 42\nconsole.log(context.y); // 17\n\nconsole.log(x); // 1; y is not defined.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/vm.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The vm module enables compiling and running code within V8 Virtual\nMachine contexts. The vm module is not a security mechanism. Do\nnot use it to run untrusted code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    JavaScript code can be compiled and run immediately or\ncompiled, saved, and run later.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    A common use case is to run the code in a different V8 Context. This means\ninvoked code has a different global object than the invoking code.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    One can provide the context by contextifying an\nobject. The invoked code treats any property in the context like a\nglobal variable. Any changes to global variables caused by the invoked\ncode are reflected in the context object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');\n\nconst x = 1;\n\nconst context = { x: 2 };\nvm.createContext(context); // Contextify the object.\n\nconst code = 'x += 40; var y = 17;';\n// `x` and `y` are global variables in the context.\n// Initially, x has the value 2 because that is the value of context.x.\nvm.runInContext(code, context);\n\nconsole.log(context.x); // 42\nconsole.log(context.y); // 17\n\nconsole.log(x); // 1; y is not defined.\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "classes": [ { "textRaw": "Class: `vm.Script`", @@ -360,7 +360,7 @@ }, "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This feature is only available with the --experimental-vm-modules command\nflag enabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The vm.Module class provides a low-level interface for using\nECMAScript modules in VM contexts. It is the counterpart of the vm.Script\nclass that closely mirrors Module Records as defined in the ECMAScript\nspecification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Unlike vm.Script however, every vm.Module object is bound to a context from\nits creation. Operations on vm.Module objects are intrinsically asynchronous,\nin contrast with the synchronous nature of vm.Script objects. The use of\n'async' functions can help with manipulating vm.Module objects.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Using a vm.Module object requires three distinct steps: creation/parsing,\nlinking, and evaluation. These three steps are illustrated in the following\nexample.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This implementation lies at a lower level than the ECMAScript Module\nloader. There is also currently no way to interact with the Loader, though\nsupport is planned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');\n\nconst contextifiedObject = vm.createContext({ secret: 42 });\n\n(async () => {\n  // Step 1\n  //\n  // Create a Module by constructing a new `vm.SourceTextModule` object. This\n  // parses the provided source text, throwing a `SyntaxError` if anything goes\n  // wrong. By default, a Module is created in the top context. But here, we\n  // specify `contextifiedObject` as the context this Module belongs to.\n  //\n  // Here, we attempt to obtain the default export from the module \"foo\", and\n  // put it into local binding \"secret\".\n\n  const bar = new vm.SourceTextModule(`\n    import s from 'foo';\n    s;\n  `, { context: contextifiedObject });\n\n  // Step 2\n  //\n  // \"Link\" the imported dependencies of this Module to it.\n  //\n  // The provided linking callback (the \"linker\") accepts two arguments: the\n  // parent module (`bar` in this case) and the string that is the specifier of\n  // the imported module. The callback is expected to return a Module that\n  // corresponds to the provided specifier, with certain requirements documented\n  // in `module.link()`.\n  //\n  // If linking has not started for the returned Module, the same linker\n  // callback will be called on the returned Module.\n  //\n  // Even top-level Modules without dependencies must be explicitly linked. The\n  // callback provided would never be called, however.\n  //\n  // The link() method returns a Promise that will be resolved when all the\n  // Promises returned by the linker resolve.\n  //\n  // Note: This is a contrived example in that the linker function creates a new\n  // \"foo\" module every time it is called. In a full-fledged module system, a\n  // cache would probably be used to avoid duplicated modules.\n\n  async function linker(specifier, referencingModule) {\n    if (specifier === 'foo') {\n      return new vm.SourceTextModule(`\n        // The \"secret\" variable refers to the global variable we added to\n        // \"contextifiedObject\" when creating the context.\n        export default secret;\n      `, { context: referencingModule.context });\n\n      // Using `contextifiedObject` instead of `referencingModule.context`\n      // here would work as well.\n    }\n    throw new Error(`Unable to resolve dependency: ${specifier}`);\n  }\n  await bar.link(linker);\n\n  // Step 3\n  //\n  // Evaluate the Module. The evaluate() method returns a Promise with a single\n  // property \"result\" that contains the result of the very last statement\n  // executed in the Module. In the case of `bar`, it is `s;`, which refers to\n  // the default export of the `foo` module, the `secret` we set in the\n  // beginning to 42.\n\n  const { result } = await bar.evaluate();\n\n  console.log(result);\n  // Prints 42.\n})();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This feature is only available with the --experimental-vm-modules command\nflag enabled.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The vm.Module class provides a low-level interface for using\nECMAScript modules in VM contexts. It is the counterpart of the vm.Script\nclass that closely mirrors Module Records as defined in the ECMAScript\nspecification.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Unlike vm.Script however, every vm.Module object is bound to a context from\nits creation. Operations on vm.Module objects are intrinsically asynchronous,\nin contrast with the synchronous nature of vm.Script objects. The use of\n'async' functions can help with manipulating vm.Module objects.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Using a vm.Module object requires three distinct steps: creation/parsing,\nlinking, and evaluation. These three steps are illustrated in the following\nexample.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This implementation lies at a lower level than the ECMAScript Module\nloader. There is also no way to interact with the Loader yet, though\nsupport is planned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');\n\nconst contextifiedObject = vm.createContext({ secret: 42 });\n\n(async () => {\n  // Step 1\n  //\n  // Create a Module by constructing a new `vm.SourceTextModule` object. This\n  // parses the provided source text, throwing a `SyntaxError` if anything goes\n  // wrong. By default, a Module is created in the top context. But here, we\n  // specify `contextifiedObject` as the context this Module belongs to.\n  //\n  // Here, we attempt to obtain the default export from the module \"foo\", and\n  // put it into local binding \"secret\".\n\n  const bar = new vm.SourceTextModule(`\n    import s from 'foo';\n    s;\n  `, { context: contextifiedObject });\n\n  // Step 2\n  //\n  // \"Link\" the imported dependencies of this Module to it.\n  //\n  // The provided linking callback (the \"linker\") accepts two arguments: the\n  // parent module (`bar` in this case) and the string that is the specifier of\n  // the imported module. The callback is expected to return a Module that\n  // corresponds to the provided specifier, with certain requirements documented\n  // in `module.link()`.\n  //\n  // If linking has not started for the returned Module, the same linker\n  // callback will be called on the returned Module.\n  //\n  // Even top-level Modules without dependencies must be explicitly linked. The\n  // callback provided would never be called, however.\n  //\n  // The link() method returns a Promise that will be resolved when all the\n  // Promises returned by the linker resolve.\n  //\n  // Note: This is a contrived example in that the linker function creates a new\n  // \"foo\" module every time it is called. In a full-fledged module system, a\n  // cache would probably be used to avoid duplicated modules.\n\n  async function linker(specifier, referencingModule) {\n    if (specifier === 'foo') {\n      return new vm.SourceTextModule(`\n        // The \"secret\" variable refers to the global variable we added to\n        // \"contextifiedObject\" when creating the context.\n        export default secret;\n      `, { context: referencingModule.context });\n\n      // Using `contextifiedObject` instead of `referencingModule.context`\n      // here would work as well.\n    }\n    throw new Error(`Unable to resolve dependency: ${specifier}`);\n  }\n  await bar.link(linker);\n\n  // Step 3\n  //\n  // Evaluate the Module. The evaluate() method returns a Promise with a single\n  // property \"result\" that contains the result of the very last statement\n  // executed in the Module. In the case of `bar`, it is `s;`, which refers to\n  // the default export of the `foo` module, the `secret` we set in the\n  // beginning to 42.\n\n  const { result } = await bar.evaluate();\n\n  console.log(result);\n  // Prints 42.\n})();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "properties": [ { "textRaw": "`dependencySpecifiers` {string[]}", @@ -1308,7 +1308,7 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    vm.runInThisContext() compiles code, runs it within the context of the\ncurrent global and returns the result. Running code does not have access to\nlocal scope, but does have access to the current global object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If options is a string, then it specifies the filename.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following example illustrates using both vm.runInThisContext() and\nthe JavaScript eval() function to run the same code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');\nlet localVar = 'initial value';\n\nconst vmResult = vm.runInThisContext('localVar = \"vm\";');\nconsole.log(`vmResult: '${vmResult}', localVar: '${localVar}'`);\n// Prints: vmResult: 'vm', localVar: 'initial value'\n\nconst evalResult = eval('localVar = \"eval\";');\nconsole.log(`evalResult: '${evalResult}', localVar: '${localVar}'`);\n// Prints: evalResult: 'eval', localVar: 'eval'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Because vm.runInThisContext() does not have access to the local scope,\nlocalVar is unchanged. In contrast, eval() does have access to the\nlocal scope, so the value localVar is changed. In this way\nvm.runInThisContext() is much like an indirect eval() call, e.g.\n(0,eval)('code').

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Example: Running an HTTP Server within a VM

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When using either script.runInThisContext() or\nvm.runInThisContext(), the code is executed within the current V8 global\ncontext. The code passed to this VM context will have its own isolated scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In order to run a simple web server using the http module the code passed to\nthe context must either call require('http') on its own, or have a reference\nto the http module passed to it. For instance:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    'use strict';\nconst vm = require('vm');\n\nconst code = `\n((require) => {\n  const http = require('http');\n\n  http.createServer((request, response) => {\n    response.writeHead(200, { 'Content-Type': 'text/plain' });\n    response.end('Hello World\\\\n');\n  }).listen(8124);\n\n  console.log('Server running at http://127.0.0.1:8124/');\n})`;\n\nvm.runInThisContext(code)(require);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The require() in the above case shares the state with the context it is\npassed from. This may introduce risks when untrusted code is executed, e.g.\naltering objects in the context in unwanted ways.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    vm.runInThisContext() compiles code, runs it within the context of the\ncurrent global and returns the result. Running code does not have access to\nlocal scope, but does have access to the current global object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If options is a string, then it specifies the filename.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The following example illustrates using both vm.runInThisContext() and\nthe JavaScript eval() function to run the same code:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');\nlet localVar = 'initial value';\n\nconst vmResult = vm.runInThisContext('localVar = \"vm\";');\nconsole.log(`vmResult: '${vmResult}', localVar: '${localVar}'`);\n// Prints: vmResult: 'vm', localVar: 'initial value'\n\nconst evalResult = eval('localVar = \"eval\";');\nconsole.log(`evalResult: '${evalResult}', localVar: '${localVar}'`);\n// Prints: evalResult: 'eval', localVar: 'eval'\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Because vm.runInThisContext() does not have access to the local scope,\nlocalVar is unchanged. In contrast, eval() does have access to the\nlocal scope, so the value localVar is changed. In this way\nvm.runInThisContext() is much like an indirect eval() call, e.g.\n(0,eval)('code').

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Example: Running an HTTP server within a VM

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When using either script.runInThisContext() or\nvm.runInThisContext(), the code is executed within the current V8 global\ncontext. The code passed to this VM context will have its own isolated scope.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In order to run a simple web server using the http module the code passed to\nthe context must either call require('http') on its own, or have a reference\nto the http module passed to it. For instance:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    'use strict';\nconst vm = require('vm');\n\nconst code = `\n((require) => {\n  const http = require('http');\n\n  http.createServer((request, response) => {\n    response.writeHead(200, { 'Content-Type': 'text/plain' });\n    response.end('Hello World\\\\n');\n  }).listen(8124);\n\n  console.log('Server running at http://127.0.0.1:8124/');\n})`;\n\nvm.runInThisContext(code)(require);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The require() in the above case shares the state with the context it is\npassed from. This may introduce risks when untrusted code is executed, e.g.\naltering objects in the context in unwanted ways.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " } ], "modules": [ @@ -1320,11 +1320,11 @@ "displayName": "What does it mean to \"contextify\" an object?" }, { - "textRaw": "Timeout limitations when using `process.nextTick()`, Promises, and `queueMicrotask()`", + "textRaw": "Timeout limitations when using `process.nextTick()`, promises, and `queueMicrotask()`", "name": "timeout_limitations_when_using_`process.nexttick()`,_promises,_and_`queuemicrotask()`", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Because of the internal mechanics of how the process.nextTick() queue and\nthe microtask queue that underlies Promises are implemented within V8 and\nNode.js, it is possible for code running within a context to \"escape\" the\ntimeout set using vm.runInContext(), vm.runInNewContext(), and\nvm.runInThisContext().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For example, the following code executed by vm.runInNewContext() with a\ntimeout of 5 milliseconds schedules an infinite loop to run after a promise\nresolves. The scheduled loop is never interrupted by the timeout:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const vm = require('vm');\n\nfunction loop() {\n  while (1) console.log(Date.now());\n}\n\nvm.runInNewContext(\n  'Promise.resolve().then(loop);',\n  { loop, console },\n  { timeout: 5 }\n);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This issue also occurs when the loop() call is scheduled using\nthe process.nextTick() and queueMicrotask() functions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This issue occurs because all contexts share the same microtask and nextTick\nqueues.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", - "displayName": "Timeout limitations when using `process.nextTick()`, Promises, and `queueMicrotask()`" + "displayName": "Timeout limitations when using `process.nextTick()`, promises, and `queueMicrotask()`" } ], "type": "module", diff -Nru nodejs-mozilla-12.18.1/doc/api/vm.md nodejs-mozilla-12.22.12/doc/api/vm.md --- nodejs-mozilla-12.18.1/doc/api/vm.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/vm.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,4 +1,4 @@ -# VM (Executing JavaScript) +# VM (executing JavaScript) @@ -6,6 +6,8 @@ + + The `vm` module enables compiling and running code within V8 Virtual Machine contexts. **The `vm` module is not a security mechanism. Do not use it to run untrusted code**. @@ -48,7 +50,7 @@ Instances of the `vm.Script` class contain precompiled scripts that can be executed in specific contexts. -### Constructor: `new vm.Script(code[, options])` +### `new vm.Script(code[, options])` @@ -1081,7 +1083,7 @@ `vm.runInThisContext()` is much like an [indirect `eval()` call][], e.g. `(0,eval)('code')`. -## Example: Running an HTTP Server within a VM +## Example: Running an HTTP server within a VM When using either [`script.runInThisContext()`][] or [`vm.runInThisContext()`][], the code is executed within the current V8 global @@ -1131,7 +1133,7 @@ associating it with the `contextObject` is what this document refers to as "contextifying" the object. -## Timeout limitations when using `process.nextTick()`, Promises, and `queueMicrotask()` +## Timeout limitations when using `process.nextTick()`, promises, and `queueMicrotask()` Because of the internal mechanics of how the `process.nextTick()` queue and the microtask queue that underlies Promises are implemented within V8 and @@ -1175,7 +1177,7 @@ [`vm.runInContext()`]: #vm_vm_runincontext_code_contextifiedobject_options [`vm.runInThisContext()`]: #vm_vm_runinthiscontext_code_options [Cyclic Module Record]: https://tc39.es/ecma262/#sec-cyclic-module-records -[ECMAScript Module Loader]: esm.html#esm_ecmascript_modules +[ECMAScript Module Loader]: esm.html#esm_modules_ecmascript_modules [Evaluate() concrete method]: https://tc39.es/ecma262/#sec-moduleevaluation [GetModuleNamespace]: https://tc39.es/ecma262/#sec-getmodulenamespace [HostResolveImportedModule]: https://tc39.es/ecma262/#sec-hostresolveimportedmodule diff -Nru nodejs-mozilla-12.18.1/doc/api/wasi.html nodejs-mozilla-12.22.12/doc/api/wasi.html --- nodejs-mozilla-12.18.1/doc/api/wasi.html 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/wasi.html 2022-04-05 07:17:04.000000000 +0000 @@ -3,10 +3,11 @@ - WebAssembly System Interface (WASI) | Node.js v12.18.1 Documentation + + WebAssembly System Interface (WASI) | Node.js v12.22.12 Documentation - + @@ -18,75 +19,78 @@ -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.18.1 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Node.js v12.22.12 Documentation

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • - Index + Index
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View on single page @@ -97,7 +101,10 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • View another version -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      1. 14.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        1. 17.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3. 16.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        5. 15.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        7. 14.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        8. 13.x
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        9. 12.x LTS
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        @@ -111,14 +118,13 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Table of Contents

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          WebAssembly System Interface (WASI)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        • WebAssembly System Interface (WASI)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Class: WASI

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • Class: WASI
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          • @@ -131,30 +137,61 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            WebAssembly System Interface (WASI)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Stability: 1 - Experimental

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Source Code: lib/wasi.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The WASI API provides an implementation of the WebAssembly System Interface specification. WASI gives sandboxed WebAssembly applications access to the underlying operating system via a collection of POSIX-like functions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            'use strict';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -const { WASI } = require('wasi');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -const wasi = new WASI({
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  args: process.argv,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  env: process.env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  preopens: {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -    '/sandbox': '/some/real/path/that/wasm/can/access'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            'use strict';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +const fs = require('fs');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +const { WASI } = require('wasi');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +const wasi = new WASI({
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  args: process.argv,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  env: process.env,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  preopens: {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    '/sandbox': '/some/real/path/that/wasm/can/access'
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -const importObject = { wasi_snapshot_preview1: wasi.wasiImport };
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +const importObject = { wasi_snapshot_preview1: wasi.wasiImport };
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -(async () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  const wasm = await WebAssembly.compile(fs.readFileSync('./binary.wasm'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -  const instance = await WebAssembly.instantiate(wasm, importObject);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +(async () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm'));
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +  const instance = await WebAssembly.instantiate(wasm, importObject);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               wasi.start(instance);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -})();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +})();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            To run the above example, create a new WebAssembly text format file named +demo.wat:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            (module
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    ;; Import the required fd_write WASI function which will write the given io vectors to stdout
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    ;; The function signature for fd_write is:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    ;; (File Descriptor, *iovs, iovs_len, nwritten) -> Returns number of bytes written
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    (import "wasi_snapshot_preview1" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32)))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    (memory 1)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    (export "memory" (memory 0))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    ;; Write 'hello world\n' to memory at an offset of 8 bytes
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    ;; Note the trailing newline which is required for the text to appear
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    (data (i32.const 8) "hello world\n")
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    (func $main (export "_start")
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +        ;; Creating a new io vector within linear memory
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +        (i32.store (i32.const 0) (i32.const 8))  ;; iov.iov_base - This is a pointer to the start of the 'hello world\n' string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +        (i32.store (i32.const 4) (i32.const 12))  ;; iov.iov_len - The length of the 'hello world\n' string
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +        (call $fd_write
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +            (i32.const 1) ;; file_descriptor - 1 for stdout
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +            (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +            (i32.const 1) ;; iovs_len - We're printing 1 string stored in an iov - so one.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +            (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +        )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +        drop ;; Discard the number of bytes written from the top of the stack
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +    )
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Use wabt to compile .wat to .wasm

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            $ wat2wasm demo.wat

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            The --experimental-wasi-unstable-preview1 and --experimental-wasm-bigint -CLI arguments are needed for the previous example to run.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +CLI arguments are needed for this example to run.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Class: WASI#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              options <Object>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            • options <Object>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • args <Array> An array of strings that the WebAssembly application will see as command line arguments. The first argument is the virtual path to the @@ -185,6 +221,12 @@ process via the __wasi_proc_exit() function. Setting this option to true causes wasi.start() to return the exit code rather than terminate the process. Default: false.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • stdin <integer> The file descriptor used as standard input in the +WebAssembly application. Default: 0.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • stdout <integer> The file descriptor used as standard output in the +WebAssembly application. Default: 1.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • stderr <integer> The file descriptor used as standard error in the +WebAssembly application. Default: 2.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            @@ -201,6 +243,19 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            start() requires that instance exports a WebAssembly.Memory named memory. If instance does not have a memory export an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If start() is called more than once, an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            wasi.initialize(instance)#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            + + +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Attempt to initialize instance as a WASI reactor by invoking its +_initialize() export, if it is present. If instance contains a _start() +export, then an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            initialize() requires that instance exports a WebAssembly.Memory named +memory. If instance does not have a memory export an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            If initialize() is called more than once, an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            wasi.wasiImport#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/wasi.json nodejs-mozilla-12.22.12/doc/api/wasi.json --- nodejs-mozilla-12.18.1/doc/api/wasi.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/wasi.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,7 +8,7 @@ "introduced_in": "v12.16.0", "stability": 1, "stabilityText": "Experimental", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The WASI API provides an implementation of the WebAssembly System Interface\nspecification. WASI gives sandboxed WebAssembly applications access to the\nunderlying operating system via a collection of POSIX-like functions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    'use strict';\nconst fs = require('fs');\nconst { WASI } = require('wasi');\nconst wasi = new WASI({\n  args: process.argv,\n  env: process.env,\n  preopens: {\n    '/sandbox': '/some/real/path/that/wasm/can/access'\n  }\n});\nconst importObject = { wasi_snapshot_preview1: wasi.wasiImport };\n\n(async () => {\n  const wasm = await WebAssembly.compile(fs.readFileSync('./binary.wasm'));\n  const instance = await WebAssembly.instantiate(wasm, importObject);\n\n  wasi.start(instance);\n})();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The --experimental-wasi-unstable-preview1 and --experimental-wasm-bigint\nCLI arguments are needed for the previous example to run.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/wasi.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The WASI API provides an implementation of the WebAssembly System Interface\nspecification. WASI gives sandboxed WebAssembly applications access to the\nunderlying operating system via a collection of POSIX-like functions.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    'use strict';\nconst fs = require('fs');\nconst { WASI } = require('wasi');\nconst wasi = new WASI({\n  args: process.argv,\n  env: process.env,\n  preopens: {\n    '/sandbox': '/some/real/path/that/wasm/can/access'\n  }\n});\nconst importObject = { wasi_snapshot_preview1: wasi.wasiImport };\n\n(async () => {\n  const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm'));\n  const instance = await WebAssembly.instantiate(wasm, importObject);\n\n  wasi.start(instance);\n})();\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    To run the above example, create a new WebAssembly text format file named\ndemo.wat:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (module\n    ;; Import the required fd_write WASI function which will write the given io vectors to stdout\n    ;; The function signature for fd_write is:\n    ;; (File Descriptor, *iovs, iovs_len, nwritten) -> Returns number of bytes written\n    (import \"wasi_snapshot_preview1\" \"fd_write\" (func $fd_write (param i32 i32 i32 i32) (result i32)))\n\n    (memory 1)\n    (export \"memory\" (memory 0))\n\n    ;; Write 'hello world\\n' to memory at an offset of 8 bytes\n    ;; Note the trailing newline which is required for the text to appear\n    (data (i32.const 8) \"hello world\\n\")\n\n    (func $main (export \"_start\")\n        ;; Creating a new io vector within linear memory\n        (i32.store (i32.const 0) (i32.const 8))  ;; iov.iov_base - This is a pointer to the start of the 'hello world\\n' string\n        (i32.store (i32.const 4) (i32.const 12))  ;; iov.iov_len - The length of the 'hello world\\n' string\n\n        (call $fd_write\n            (i32.const 1) ;; file_descriptor - 1 for stdout\n            (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0\n            (i32.const 1) ;; iovs_len - We're printing 1 string stored in an iov - so one.\n            (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written\n        )\n        drop ;; Discard the number of bytes written from the top of the stack\n    )\n)\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Use wabt to compile .wat to .wasm

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    $ wat2wasm demo.wat\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The --experimental-wasi-unstable-preview1 and --experimental-wasm-bigint\nCLI arguments are needed for this example to run.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "classes": [ { "textRaw": "Class: `WASI`", @@ -44,6 +44,29 @@ } ], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Attempt to begin execution of instance as a WASI command by invoking its\n_start() export. If instance does not contain a _start() export, or if\ninstance contains an _initialize() export, then an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    start() requires that instance exports a WebAssembly.Memory named\nmemory. If instance does not have a memory export an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If start() is called more than once, an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + }, + { + "textRaw": "`wasi.initialize(instance)`", + "type": "method", + "name": "initialize", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [ + { + "textRaw": "`instance` {WebAssembly.Instance}", + "name": "instance", + "type": "WebAssembly.Instance" + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Attempt to initialize instance as a WASI reactor by invoking its\n_initialize() export, if it is present. If instance contains a _start()\nexport, then an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    initialize() requires that instance exports a WebAssembly.Memory named\nmemory. If instance does not have a memory export an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If initialize() is called more than once, an exception is thrown.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " } ], "properties": [ @@ -94,6 +117,27 @@ "type": "boolean", "default": "`false`", "desc": "By default, WASI applications terminate the Node.js process via the `__wasi_proc_exit()` function. Setting this option to `true` causes `wasi.start()` to return the exit code rather than terminate the process." + }, + { + "textRaw": "`stdin` {integer} The file descriptor used as standard input in the WebAssembly application. **Default:** `0`.", + "name": "stdin", + "type": "integer", + "default": "`0`", + "desc": "The file descriptor used as standard input in the WebAssembly application." + }, + { + "textRaw": "`stdout` {integer} The file descriptor used as standard output in the WebAssembly application. **Default:** `1`.", + "name": "stdout", + "type": "integer", + "default": "`1`", + "desc": "The file descriptor used as standard output in the WebAssembly application." + }, + { + "textRaw": "`stderr` {integer} The file descriptor used as standard error in the WebAssembly application. **Default:** `2`.", + "name": "stderr", + "type": "integer", + "default": "`2`", + "desc": "The file descriptor used as standard error in the WebAssembly application." } ] } diff -Nru nodejs-mozilla-12.18.1/doc/api/wasi.md nodejs-mozilla-12.22.12/doc/api/wasi.md --- nodejs-mozilla-12.18.1/doc/api/wasi.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/wasi.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 1 - Experimental + + The WASI API provides an implementation of the [WebAssembly System Interface][] specification. WASI gives sandboxed WebAssembly applications access to the underlying operating system via a collection of POSIX-like functions. @@ -22,15 +24,54 @@ const importObject = { wasi_snapshot_preview1: wasi.wasiImport }; (async () => { - const wasm = await WebAssembly.compile(fs.readFileSync('./binary.wasm')); + const wasm = await WebAssembly.compile(fs.readFileSync('./demo.wasm')); const instance = await WebAssembly.instantiate(wasm, importObject); wasi.start(instance); })(); ``` +To run the above example, create a new WebAssembly text format file named +`demo.wat`: + +```text +(module + ;; Import the required fd_write WASI function which will write the given io vectors to stdout + ;; The function signature for fd_write is: + ;; (File Descriptor, *iovs, iovs_len, nwritten) -> Returns number of bytes written + (import "wasi_snapshot_preview1" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32))) + + (memory 1) + (export "memory" (memory 0)) + + ;; Write 'hello world\n' to memory at an offset of 8 bytes + ;; Note the trailing newline which is required for the text to appear + (data (i32.const 8) "hello world\n") + + (func $main (export "_start") + ;; Creating a new io vector within linear memory + (i32.store (i32.const 0) (i32.const 8)) ;; iov.iov_base - This is a pointer to the start of the 'hello world\n' string + (i32.store (i32.const 4) (i32.const 12)) ;; iov.iov_len - The length of the 'hello world\n' string + + (call $fd_write + (i32.const 1) ;; file_descriptor - 1 for stdout + (i32.const 0) ;; *iovs - The pointer to the iov array, which is stored at memory location 0 + (i32.const 1) ;; iovs_len - We're printing 1 string stored in an iov - so one. + (i32.const 20) ;; nwritten - A place in memory to store the number of bytes written + ) + drop ;; Discard the number of bytes written from the top of the stack + ) +) +``` + +Use [wabt](https://github.com/WebAssembly/wabt) to compile `.wat` to `.wasm` + +```console +$ wat2wasm demo.wat +``` + The `--experimental-wasi-unstable-preview1` and `--experimental-wasm-bigint` -CLI arguments are needed for the previous example to run. +CLI arguments are needed for this example to run. ## Class: `WASI` + +* `instance` {WebAssembly.Instance} + +Attempt to initialize `instance` as a WASI reactor by invoking its +`_initialize()` export, if it is present. If `instance` contains a `_start()` +export, then an exception is thrown. + +`initialize()` requires that `instance` exports a [`WebAssembly.Memory`][] named +`memory`. If `instance` does not have a `memory` export an exception is thrown. + +If `initialize()` is called more than once, an exception is thrown. + ### `wasi.wasiImport`
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/worker_threads.json nodejs-mozilla-12.22.12/doc/api/worker_threads.json --- nodejs-mozilla-12.18.1/doc/api/worker_threads.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/worker_threads.json 2022-04-05 07:17:04.000000000 +0000 @@ -3,12 +3,12 @@ "source": "doc/api/worker_threads.md", "modules": [ { - "textRaw": "Worker Threads", + "textRaw": "Worker threads", "name": "worker_threads", "introduced_in": "v10.5.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The worker_threads module enables the use of threads that execute JavaScript\nin parallel. To access it:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const worker = require('worker_threads');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Workers (threads) are useful for performing CPU-intensive JavaScript operations.\nThey will not help much with I/O-intensive work. Node.js’s built-in asynchronous\nI/O operations are more efficient than Workers can be.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Unlike child_process or cluster, worker_threads can share memory. They do\nso by transferring ArrayBuffer instances or sharing SharedArrayBuffer\ninstances.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const {\n  Worker, isMainThread, parentPort, workerData\n} = require('worker_threads');\n\nif (isMainThread) {\n  module.exports = function parseJSAsync(script) {\n    return new Promise((resolve, reject) => {\n      const worker = new Worker(__filename, {\n        workerData: script\n      });\n      worker.on('message', resolve);\n      worker.on('error', reject);\n      worker.on('exit', (code) => {\n        if (code !== 0)\n          reject(new Error(`Worker stopped with exit code ${code}`));\n      });\n    });\n  };\n} else {\n  const { parse } = require('some-js-parsing-library');\n  const script = workerData;\n  parentPort.postMessage(parse(script));\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The above example spawns a Worker thread for each parse() call. In actual\npractice, use a pool of Workers instead for these kinds of tasks. Otherwise, the\noverhead of creating Workers would likely exceed their benefit.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When implementing a worker pool, use the AsyncResource API to inform\ndiagnostic tools (e.g. in order to provide asynchronous stack traces) about the\ncorrelation between tasks and their outcomes. See\n\"Using AsyncResource for a Worker thread pool\"\nin the async_hooks documentation for an example implementation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Worker threads inherit non-process-specific options by default. Refer to\nWorker constructor options to know how to customize worker thread options,\nspecifically argv and execArgv options.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Source Code: lib/worker_threads.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The worker_threads module enables the use of threads that execute JavaScript\nin parallel. To access it:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const worker = require('worker_threads');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Workers (threads) are useful for performing CPU-intensive JavaScript operations.\nThey will not help much with I/O-intensive work. Node.js’s built-in asynchronous\nI/O operations are more efficient than Workers can be.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Unlike child_process or cluster, worker_threads can share memory. They do\nso by transferring ArrayBuffer instances or sharing SharedArrayBuffer\ninstances.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const {\n  Worker, isMainThread, parentPort, workerData\n} = require('worker_threads');\n\nif (isMainThread) {\n  module.exports = function parseJSAsync(script) {\n    return new Promise((resolve, reject) => {\n      const worker = new Worker(__filename, {\n        workerData: script\n      });\n      worker.on('message', resolve);\n      worker.on('error', reject);\n      worker.on('exit', (code) => {\n        if (code !== 0)\n          reject(new Error(`Worker stopped with exit code ${code}`));\n      });\n    });\n  };\n} else {\n  const { parse } = require('some-js-parsing-library');\n  const script = workerData;\n  parentPort.postMessage(parse(script));\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The above example spawns a Worker thread for each parse() call. In actual\npractice, use a pool of Workers instead for these kinds of tasks. Otherwise, the\noverhead of creating Workers would likely exceed their benefit.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    When implementing a worker pool, use the AsyncResource API to inform\ndiagnostic tools (e.g. in order to provide asynchronous stack traces) about the\ncorrelation between tasks and their outcomes. See\n\"Using AsyncResource for a Worker thread pool\"\nin the async_hooks documentation for an example implementation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Worker threads inherit non-process-specific options by default. Refer to\nWorker constructor options to know how to customize worker thread options,\nspecifically argv and execArgv options.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "properties": [ { "textRaw": "`isMainThread` {boolean}", @@ -59,6 +59,11 @@ "textRaw": "`codeRangeSizeMb` {number}", "name": "codeRangeSizeMb", "type": "number" + }, + { + "textRaw": "`stackSizeMb` {number}", + "name": "stackSizeMb", + "type": "number" } ], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Provides the set of JS engine resource constraints inside this Worker thread.\nIf the resourceLimits option was passed to the Worker constructor,\nthis matches its values.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If this is used in the main thread, its value is an empty object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " @@ -101,6 +106,23 @@ ], "methods": [ { + "textRaw": "`worker.markAsUntransferable(object)`", + "type": "method", + "name": "markAsUntransferable", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "signatures": [ + { + "params": [] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Mark an object as not transferable. If object occurs in the transfer list of\na port.postMessage() call, it will be ignored.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In particular, this makes sense for objects that can be cloned, rather than\ntransferred, and which are used by other objects on the sending side.\nFor example, Node.js marks the ArrayBuffers it uses for its\nBuffer pool with this.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This operation cannot be undone.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { MessageChannel, markAsUntransferable } = require('worker_threads');\n\nconst pooledBuffer = new ArrayBuffer(8);\nconst typedArray1 = new Uint8Array(pooledBuffer);\nconst typedArray2 = new Float64Array(pooledBuffer);\n\nmarkAsUntransferable(pooledBuffer);\n\nconst { port1 } = new MessageChannel();\nport1.postMessage(typedArray1, [ typedArray1.buffer ]);\n\n// The following line prints the contents of typedArray1 -- it still owns\n// its memory and has been cloned, not transferred. Without\n// `markAsUntransferable()`, this would print an empty Uint8Array.\n// typedArray2 is intact as well.\nconsole.log(typedArray1);\nconsole.log(typedArray2);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    There is no equivalent to this API in browsers.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + }, + { "textRaw": "`worker.moveMessagePortToContext(port, contextifiedSandbox)`", "type": "method", "name": "moveMessagePortToContext", @@ -221,6 +243,26 @@ } ], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The 'message' event is emitted for any incoming message, containing the cloned\ninput of port.postMessage().

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Listeners on this event will receive a clone of the value parameter as passed\nto postMessage() and no further arguments.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + }, + { + "textRaw": "Event: `'messageerror'`", + "type": "event", + "name": "messageerror", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "params": [ + { + "textRaw": "`error` {Error} An Error object", + "name": "error", + "type": "Error", + "desc": "An Error object" + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The 'messageerror' event is emitted when deserializing a message failed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " } ], "methods": [ @@ -249,7 +291,18 @@ "added": [ "v10.5.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33360", + "description": "Added `KeyObject` to the list of cloneable types." + }, + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33772", + "description": "Added `FileHandle` to the list of transferable types." + } + ] }, "signatures": [ { @@ -267,12 +320,12 @@ ] } ], - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Sends a JavaScript value to the receiving side of this channel.\nvalue will be transferred in a way which is compatible with\nthe HTML structured clone algorithm.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In particular, the significant differences to JSON are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may contain circular references.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may contain instances of builtin JS types such as RegExps,\nBigInts, Maps, Sets, etc.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may contain typed arrays, both using ArrayBuffers\nand SharedArrayBuffers.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may contain WebAssembly.Module instances.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may not contain native (C++-backed) objects other than MessagePorts.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { MessageChannel } = require('worker_threads');\nconst { port1, port2 } = new MessageChannel();\n\nport1.on('message', (message) => console.log(message));\n\nconst circularData = {};\ncircularData.foo = circularData;\n// Prints: { foo: [Circular] }\nport2.postMessage(circularData);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    transferList may be a list of ArrayBuffer and MessagePort objects.\nAfter transferring, they will not be usable on the sending side of the channel\nanymore (even if they are not contained in value). Unlike with\nchild processes, transferring handles such as network sockets is currently\nnot supported.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If value contains SharedArrayBuffer instances, those will be accessible\nfrom either thread. They cannot be listed in transferList.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    value may still contain ArrayBuffer instances that are not in\ntransferList; in that case, the underlying memory is copied rather than moved.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { MessageChannel } = require('worker_threads');\nconst { port1, port2 } = new MessageChannel();\n\nport1.on('message', (message) => console.log(message));\n\nconst uint8Array = new Uint8Array([ 1, 2, 3, 4 ]);\n// This posts a copy of `uint8Array`:\nport2.postMessage(uint8Array);\n// This does not copy data, but renders `uint8Array` unusable:\nport2.postMessage(uint8Array, [ uint8Array.buffer ]);\n\n// The memory for the `sharedUint8Array` will be accessible from both the\n// original and the copy received by `.on('message')`:\nconst sharedUint8Array = new Uint8Array(new SharedArrayBuffer(4));\nport2.postMessage(sharedUint8Array);\n\n// This transfers a freshly created message port to the receiver.\n// This can be used, for example, to create communication channels between\n// multiple `Worker` threads that are children of the same parent thread.\nconst otherChannel = new MessageChannel();\nport2.postMessage({ port: otherChannel.port1 }, [ otherChannel.port1 ]);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Because the object cloning uses the structured clone algorithm,\nnon-enumerable properties, property accessors, and object prototypes are\nnot preserved. In particular, Buffer objects will be read as\nplain Uint8Arrays on the receiving side.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The message object will be cloned immediately, and can be modified after\nposting without having side effects.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For more information on the serialization and deserialization mechanisms\nbehind this API, see the serialization API of the v8 module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Sends a JavaScript value to the receiving side of this channel.\nvalue will be transferred in a way which is compatible with\nthe HTML structured clone algorithm.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In particular, the significant differences to JSON are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may contain circular references.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may contain instances of builtin JS types such as RegExps,\nBigInts, Maps, Sets, etc.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may contain typed arrays, both using ArrayBuffers\nand SharedArrayBuffers.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may contain WebAssembly.Module instances.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • value may not contain native (C++-backed) objects other than MessagePorts,\nFileHandles, and KeyObjects.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { MessageChannel } = require('worker_threads');\nconst { port1, port2 } = new MessageChannel();\n\nport1.on('message', (message) => console.log(message));\n\nconst circularData = {};\ncircularData.foo = circularData;\n// Prints: { foo: [Circular] }\nport2.postMessage(circularData);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    transferList may be a list of ArrayBuffer, MessagePort and\nFileHandle objects.\nAfter transferring, they will not be usable on the sending side of the channel\nanymore (even if they are not contained in value). Unlike with\nchild processes, transferring handles such as network sockets is currently\nnot supported.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If value contains SharedArrayBuffer instances, those will be accessible\nfrom either thread. They cannot be listed in transferList.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    value may still contain ArrayBuffer instances that are not in\ntransferList; in that case, the underlying memory is copied rather than moved.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { MessageChannel } = require('worker_threads');\nconst { port1, port2 } = new MessageChannel();\n\nport1.on('message', (message) => console.log(message));\n\nconst uint8Array = new Uint8Array([ 1, 2, 3, 4 ]);\n// This posts a copy of `uint8Array`:\nport2.postMessage(uint8Array);\n// This does not copy data, but renders `uint8Array` unusable:\nport2.postMessage(uint8Array, [ uint8Array.buffer ]);\n\n// The memory for the `sharedUint8Array` will be accessible from both the\n// original and the copy received by `.on('message')`:\nconst sharedUint8Array = new Uint8Array(new SharedArrayBuffer(4));\nport2.postMessage(sharedUint8Array);\n\n// This transfers a freshly created message port to the receiver.\n// This can be used, for example, to create communication channels between\n// multiple `Worker` threads that are children of the same parent thread.\nconst otherChannel = new MessageChannel();\nport2.postMessage({ port: otherChannel.port1 }, [ otherChannel.port1 ]);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Because the object cloning uses the structured clone algorithm,\nnon-enumerable properties, property accessors, and object prototypes are\nnot preserved. In particular, Buffer objects will be read as\nplain Uint8Arrays on the receiving side.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The message object will be cloned immediately, and can be modified after\nposting without having side effects.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For more information on the serialization and deserialization mechanisms\nbehind this API, see the serialization API of the v8 module.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "modules": [ { "textRaw": "Considerations when transferring TypedArrays and Buffers", "name": "considerations_when_transferring_typedarrays_and_buffers", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    All TypedArray and Buffer instances are views over an underlying\nArrayBuffer. That is, it is the ArrayBuffer that actually stores\nthe raw data while the TypedArray and Buffer objects provide a\nway of viewing and manipulating the data. It is possible and common\nfor multiple views to be created over the same ArrayBuffer instance.\nGreat care must be taken when using a transfer list to transfer an\nArrayBuffer as doing so will cause all TypedArray and Buffer\ninstances that share that same ArrayBuffer to become unusable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const ab = new ArrayBuffer(10);\n\nconst u1 = new Uint8Array(ab);\nconst u2 = new Uint16Array(ab);\n\nconsole.log(u2.length);  // prints 5\n\nport.postMessage(u1, [u1.buffer]);\n\nconsole.log(u2.length);  // prints 0\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For Buffer instances, specifically, whether the underlying\nArrayBuffer can be transferred or cloned depends entirely on how\ninstances were created, which often cannot be reliably determined.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Depending on how a Buffer instance was created, it may or may\nnot own its underlying ArrayBuffer. An ArrayBuffer must not\nbe transferred unless it is known that the Buffer instance\nowns it. In particular, for Buffers created from the internal\nBuffer pool (using, for instance Buffer.from() or Buffer.alloc()),\ntransferring them is not possible and they will always be cloned,\nwhich sends a copy of the entire Buffer pool.\nThis behavior may come with unintended higher memory\nusage and possible security concerns.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    See Buffer.allocUnsafe() for more details on Buffer pooling.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The ArrayBuffers for Buffer instances created using\nBuffer.alloc() or Buffer.allocUnsafeSlow() can always be\ntransferred but doing so will render all other existing views of\nthose ArrayBuffers unusable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    All TypedArray and Buffer instances are views over an underlying\nArrayBuffer. That is, it is the ArrayBuffer that actually stores\nthe raw data while the TypedArray and Buffer objects provide a\nway of viewing and manipulating the data. It is possible and common\nfor multiple views to be created over the same ArrayBuffer instance.\nGreat care must be taken when using a transfer list to transfer an\nArrayBuffer as doing so will cause all TypedArray and Buffer\ninstances that share that same ArrayBuffer to become unusable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const ab = new ArrayBuffer(10);\n\nconst u1 = new Uint8Array(ab);\nconst u2 = new Uint16Array(ab);\n\nconsole.log(u2.length);  // prints 5\n\nport.postMessage(u1, [u1.buffer]);\n\nconsole.log(u2.length);  // prints 0\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For Buffer instances, specifically, whether the underlying\nArrayBuffer can be transferred or cloned depends entirely on how\ninstances were created, which often cannot be reliably determined.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    An ArrayBuffer can be marked with markAsUntransferable() to indicate\nthat it should always be cloned and never transferred.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Depending on how a Buffer instance was created, it may or may\nnot own its underlying ArrayBuffer. An ArrayBuffer must not\nbe transferred unless it is known that the Buffer instance\nowns it. In particular, for Buffers created from the internal\nBuffer pool (using, for instance Buffer.from() or Buffer.alloc()),\ntransferring them is not possible and they will always be cloned,\nwhich sends a copy of the entire Buffer pool.\nThis behavior may come with unintended higher memory\nusage and possible security concerns.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    See Buffer.allocUnsafe() for more details on Buffer pooling.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The ArrayBuffers for Buffer instances created using\nBuffer.alloc() or Buffer.allocUnsafeSlow() can always be\ntransferred but doing so will render all other existing views of\nthose ArrayBuffers unusable.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", "type": "module", "displayName": "Considerations when transferring TypedArrays and Buffers" } @@ -402,6 +455,26 @@ "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The 'message' event is emitted when the worker thread has invoked\nrequire('worker_threads').parentPort.postMessage().\nSee the port.on('message') event for more details.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    All messages sent from the worker thread will be emitted before the\n'exit' event is emitted on the Worker object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " }, { + "textRaw": "Event: `'messageerror'`", + "type": "event", + "name": "messageerror", + "meta": { + "added": [ + "v12.19.0" + ], + "changes": [] + }, + "params": [ + { + "textRaw": "`error` {Error} An Error object", + "name": "error", + "type": "Error", + "desc": "An Error object" + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The 'messageerror' event is emitted when deserializing a message failed.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + }, + { "textRaw": "Event: `'online'`", "type": "event", "name": "online", @@ -532,6 +605,71 @@ ], "properties": [ { + "textRaw": "`worker.performance`", + "name": "performance", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    An object that can be used to query performance information from a worker\ninstance. Similar to perf_hooks.performance.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ", + "methods": [ + { + "textRaw": "`performance.eventLoopUtilization([utilization1[, utilization2]])`", + "type": "method", + "name": "eventLoopUtilization", + "meta": { + "added": [ + "v12.22.0" + ], + "changes": [] + }, + "signatures": [ + { + "return": { + "textRaw": "Returns {Object}", + "name": "return", + "type": "Object", + "options": [ + { + "textRaw": "`idle` {number}", + "name": "idle", + "type": "number" + }, + { + "textRaw": "`active` {number}", + "name": "active", + "type": "number" + }, + { + "textRaw": "`utilization` {number}", + "name": "utilization", + "type": "number" + } + ] + }, + "params": [ + { + "textRaw": "`utilization1` {Object} The result of a previous call to `eventLoopUtilization()`.", + "name": "utilization1", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()`." + }, + { + "textRaw": "`utilization2` {Object} The result of a previous call to `eventLoopUtilization()` prior to `utilization1`.", + "name": "utilization2", + "type": "Object", + "desc": "The result of a previous call to `eventLoopUtilization()` prior to `utilization1`." + } + ] + } + ], + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The same call as perf_hooks eventLoopUtilization(), except the values\nof the worker instance are returned.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    One difference is that, unlike the main thread, bootstrapping within a worker\nis done within the event loop. So the event loop utilization will be\nimmediately available once the worker's script begins execution.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    An idle time that does not increase does not indicate that the worker is\nstuck in bootstrap. The following examples shows how the worker's entire\nlifetime will never accumulate any idle time, but is still be able to process\nmessages.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const { Worker, isMainThread, parentPort } = require('worker_threads');\n\nif (isMainThread) {\n  const worker = new Worker(__filename);\n  setInterval(() => {\n    worker.postMessage('hi');\n    console.log(worker.performance.eventLoopUtilization());\n  }, 100).unref();\n  return;\n}\n\nparentPort.on('message', () => console.log('msg')).unref();\n(function r(n) {\n  if (--n < 0) return;\n  const t = Date.now();\n  while (Date.now() - t < 300);\n  setImmediate(r, n);\n})(10);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The event loop utilization of a worker is available only after the 'online'\nevent emitted, and if called before this, or after the 'exit'\nevent, then all properties have the value of 0.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " + } + ] + }, + { "textRaw": "`resourceLimits` {Object}", "type": "Object", "name": "resourceLimits", @@ -556,6 +694,11 @@ "textRaw": "`codeRangeSizeMb` {number}", "name": "codeRangeSizeMb", "type": "number" + }, + { + "textRaw": "`stackSizeMb` {number}", + "name": "stackSizeMb", + "type": "number" } ], "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Provides the set of JS engine resource constraints for this Worker thread.\nIf the resourceLimits option was passed to the Worker constructor,\nthis matches its values.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    If the worker has stopped, the return value is an empty object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    " @@ -673,6 +816,12 @@ "desc": "Any JavaScript value that will be cloned and made available as [`require('worker_threads').workerData`][]. The cloning will occur as described in the [HTML structured clone algorithm][], and an error will be thrown if the object cannot be cloned (e.g. because it contains `function`s)." }, { + "textRaw": "`trackUnmanagedFds` {boolean} If this is set to `true`, then the Worker will track raw file descriptors managed through [`fs.open()`][] and [`fs.close()`][], and close them when the Worker exits, similar to other resources like network sockets or file descriptors managed through the [`FileHandle`][] API. This option is automatically inherited by all nested `Worker`s. **Default**: `false`.", + "name": "trackUnmanagedFds", + "type": "boolean", + "desc": "If this is set to `true`, then the Worker will track raw file descriptors managed through [`fs.open()`][] and [`fs.close()`][], and close them when the Worker exits, similar to other resources like network sockets or file descriptors managed through the [`FileHandle`][] API. This option is automatically inherited by all nested `Worker`s. **Default**: `false`." + }, + { "textRaw": "`transferList` {Object[]} If one or more `MessagePort`-like objects are passed in `workerData`, a `transferList` is required for those items or [`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`][] will be thrown. See [`port.postMessage()`][] for more information.", "name": "transferList", "type": "Object[]", @@ -701,6 +850,13 @@ "name": "codeRangeSizeMb", "type": "number", "desc": "The size of a pre-allocated memory range used for generated code." + }, + { + "textRaw": "`stackSizeMb` {number} The default maximum stack size for the thread. Small values may lead to unusable Worker instances. **Default:** `4`.", + "name": "stackSizeMb", + "type": "number", + "default": "`4`", + "desc": "The default maximum stack size for the thread. Small values may lead to unusable Worker instances." } ] } @@ -712,7 +868,7 @@ } ], "type": "module", - "displayName": "Worker Threads" + "displayName": "Worker threads" } ] } \ No newline at end of file diff -Nru nodejs-mozilla-12.18.1/doc/api/worker_threads.md nodejs-mozilla-12.22.12/doc/api/worker_threads.md --- nodejs-mozilla-12.18.1/doc/api/worker_threads.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/worker_threads.md 2022-04-05 07:17:04.000000000 +0000 @@ -1,9 +1,11 @@ -# Worker Threads +# Worker threads > Stability: 2 - Stable + + The `worker_threads` module enables the use of threads that execute JavaScript in parallel. To access it: @@ -80,6 +82,43 @@ } ``` +## `worker.markAsUntransferable(object)` + + +Mark an object as not transferable. If `object` occurs in the transfer list of +a [`port.postMessage()`][] call, it will be ignored. + +In particular, this makes sense for objects that can be cloned, rather than +transferred, and which are used by other objects on the sending side. +For example, Node.js marks the `ArrayBuffer`s it uses for its +[`Buffer` pool][`Buffer.allocUnsafe()`] with this. + +This operation cannot be undone. + +```js +const { MessageChannel, markAsUntransferable } = require('worker_threads'); + +const pooledBuffer = new ArrayBuffer(8); +const typedArray1 = new Uint8Array(pooledBuffer); +const typedArray2 = new Float64Array(pooledBuffer); + +markAsUntransferable(pooledBuffer); + +const { port1 } = new MessageChannel(); +port1.postMessage(typedArray1, [ typedArray1.buffer ]); + +// The following line prints the contents of typedArray1 -- it still owns +// its memory and has been cloned, not transferred. Without +// `markAsUntransferable()`, this would print an empty Uint8Array. +// typedArray2 is intact as well. +console.log(typedArray1); +console.log(typedArray2); +``` + +There is no equivalent to this API in browsers. + ## `worker.moveMessagePortToContext(port, contextifiedSandbox)` + +* `error` {Error} An Error object + +The `'messageerror'` event is emitted when deserializing a message failed. + ### `port.close()` * `value` {any} @@ -332,7 +388,8 @@ * `value` may contain typed arrays, both using `ArrayBuffer`s and `SharedArrayBuffer`s. * `value` may contain [`WebAssembly.Module`][] instances. -* `value` may not contain native (C++-backed) objects other than `MessagePort`s. +* `value` may not contain native (C++-backed) objects other than `MessagePort`s, + [`FileHandle`][]s, and [`KeyObject`][]s. ```js const { MessageChannel } = require('worker_threads'); @@ -346,7 +403,8 @@ port2.postMessage(circularData); ``` -`transferList` may be a list of `ArrayBuffer` and `MessagePort` objects. +`transferList` may be a list of [`ArrayBuffer`][], [`MessagePort`][] and +[`FileHandle`][] objects. After transferring, they will not be usable on the sending side of the channel anymore (even if they are not contained in `value`). Unlike with [child processes][], transferring handles such as network sockets is currently @@ -421,6 +479,9 @@ `ArrayBuffer` can be transferred or cloned depends entirely on how instances were created, which often cannot be reliably determined. +An `ArrayBuffer` can be marked with [`markAsUntransferable()`][] to indicate +that it should always be cloned and never transferred. + Depending on how a `Buffer` instance was created, it may or may not own its underlying `ArrayBuffer`. An `ArrayBuffer` must not be transferred unless it is known that the `Buffer` instance @@ -558,6 +619,10 @@ + +* `error` {Error} An Error object + +The `'messageerror'` event is emitted when deserializing a message failed. + ### Event: `'online'` + +An object that can be used to query performance information from a worker +instance. Similar to [`perf_hooks.performance`][]. + +#### `performance.eventLoopUtilization([utilization1[, utilization2]])` + + +* `utilization1` {Object} The result of a previous call to + `eventLoopUtilization()`. +* `utilization2` {Object} The result of a previous call to + `eventLoopUtilization()` prior to `utilization1`. +* Returns {Object} + * `idle` {number} + * `active` {number} + * `utilization` {number} + +The same call as [`perf_hooks` `eventLoopUtilization()`][], except the values +of the worker instance are returned. + +One difference is that, unlike the main thread, bootstrapping within a worker +is done within the event loop. So the event loop utilization will be +immediately available once the worker's script begins execution. + +An `idle` time that does not increase does not indicate that the worker is +stuck in bootstrap. The following examples shows how the worker's entire +lifetime will never accumulate any `idle` time, but is still be able to process +messages. + +```js +const { Worker, isMainThread, parentPort } = require('worker_threads'); + +if (isMainThread) { + const worker = new Worker(__filename); + setInterval(() => { + worker.postMessage('hi'); + console.log(worker.performance.eventLoopUtilization()); + }, 100).unref(); + return; +} + +parentPort.on('message', () => console.log('msg')).unref(); +(function r(n) { + if (--n < 0) return; + const t = Date.now(); + while (Date.now() - t < 300); + setImmediate(r, n); +})(10); +``` + +The event loop utilization of a worker is available only after the [`'online'` +event][] emitted, and if called before this, or after the [`'exit'` +event][], then all properties have the value of `0`. + ### `worker.postMessage(value[, transferList])` -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (1 << (windowBits + 2)) + (1 << (memLevel + 9))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    (1 << (windowBits + 2)) + (1 << (memLevel + 9))

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    That is: 128K for windowBits = 15 + 128K for memLevel = 8 (default values) plus a few kilobytes for small objects.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    For example, to reduce the default memory requirements from 256K to 128K, the options should be set to:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const options = { windowBits: 14, memLevel: 7 };
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const options = { windowBits: 14, memLevel: 7 };

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    This will, however, generally degrade compression.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    The memory requirements for inflate are (in bytes) 1 << windowBits. That is, 32K for windowBits = 15 (default value) plus a few kilobytes @@ -472,40 +465,39 @@ quality, but can be useful when data needs to be available as soon as possible.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    In the following example, flush() is used to write a compressed partial HTTP response to the client:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const zlib = require('zlib');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -const http = require('http');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -const { pipeline } = require('stream');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -http.createServer((request, response) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  // For the sake of simplicity, the Accept-Encoding checks are omitted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  response.writeHead(200, { 'content-encoding': 'gzip' });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  const output = zlib.createGzip();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  let i;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  pipeline(output, response, (err) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -    if (err) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // If an error occurs, there's not much we can do because
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // the server has already sent the 200 response code and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // some amount of data has already been sent to the client.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // The best we can do is terminate the response immediately
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // and log the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      clearInterval(i);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    const zlib = require('zlib');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +const http = require('http');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +const { pipeline } = require('stream');
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +http.createServer((request, response) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  // For the sake of simplicity, the Accept-Encoding checks are omitted.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  response.writeHead(200, { 'content-encoding': 'gzip' });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  const output = zlib.createGzip();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  let i;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  pipeline(output, response, (err) => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +    if (err) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // If an error occurs, there's not much we can do because
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // the server has already sent the 200 response code and
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // some amount of data has already been sent to the client.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // The best we can do is terminate the response immediately
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // and log the error.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      clearInterval(i);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           response.end();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      console.error('An error occurred:', err);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      console.error('An error occurred:', err);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  i = setInterval(() => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -    output.write(`The current time is ${Date()}\n`, () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // The data has been passed to zlib, but the compression algorithm may
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // have decided to buffer the data for more efficient compression.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // Calling .flush() will make the data available as soon as the client
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -      // is ready to receive it.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +  i = setInterval(() => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +    output.write(`The current time is ${Date()}\n`, () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // The data has been passed to zlib, but the compression algorithm may
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // have decided to buffer the data for more efficient compression.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // Calling .flush() will make the data available as soon as the client
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    +      // is ready to receive it.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           output.flush();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -  }, 1000);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -}).listen(1337);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    + }, 1000); +}).listen(1337);

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Constants#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Each Brotli-based class takes an options object. All options are optional.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    @@ -717,17 +709,18 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • finishFlush <integer> Default: zlib.constants.BROTLI_OPERATION_FINISH
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • chunkSize <integer> Default: 16 * 1024
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • params <Object> Key-value object containing indexed Brotli parameters.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  • maxOutputLength <integer> Limits output size when using +convenience methods. Default: buffer.kMaxLength

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  For example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const stream = zlib.createBrotliCompress({
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -  chunkSize: 32 * 1024,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -  params: {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  const stream = zlib.createBrotliCompress({
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +  chunkSize: 32 * 1024,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +  params: {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -    [zlib.constants.BROTLI_PARAM_QUALITY]: 4,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +    [zlib.constants.BROTLI_PARAM_QUALITY]: 4,
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       [zlib.constants.BROTLI_PARAM_SIZE_HINT]: fs.statSync(inputFile).size
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -});
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  -
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  +});

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Class: zlib.BrotliCompress#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • options <zlib options>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Creates and returns a new Unzip object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Convenience Methods#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                Convenience methods#

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                All of these take a Buffer, TypedArray, DataView, ArrayBuffer or string as the first argument, an optional second argument @@ -1303,11 +1296,9 @@

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • options <zlib options>

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Decompress a chunk of data with Unzip.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + - - - diff -Nru nodejs-mozilla-12.18.1/doc/api/zlib.json nodejs-mozilla-12.22.12/doc/api/zlib.json --- nodejs-mozilla-12.18.1/doc/api/zlib.json 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/zlib.json 2022-04-05 07:17:04.000000000 +0000 @@ -8,19 +8,19 @@ "introduced_in": "v0.10.0", "stability": 2, "stabilityText": "Stable", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The zlib module provides compression functionality implemented using Gzip,\nDeflate/Inflate, and Brotli.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              To access it:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const zlib = require('zlib');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Compression and decompression are built around the Node.js Streams API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Compressing or decompressing a stream (such as a file) can be accomplished by\npiping the source stream through a zlib Transform stream into a destination\nstream:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { createGzip } = require('zlib');\nconst { pipeline } = require('stream');\nconst {\n  createReadStream,\n  createWriteStream\n} = require('fs');\n\nconst gzip = createGzip();\nconst source = createReadStream('input.txt');\nconst destination = createWriteStream('input.txt.gz');\n\npipeline(source, gzip, destination, (err) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n});\n\n// Or, Promisified\n\nconst { promisify } = require('util');\nconst pipe = promisify(pipeline);\n\nasync function do_gzip(input, output) {\n  const gzip = createGzip();\n  const source = createReadStream(input);\n  const destination = createWriteStream(output);\n  await pipe(source, gzip, destination);\n}\n\ndo_gzip('input.txt', 'input.txt.gz')\n  .catch((err) => {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  });\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              It is also possible to compress or decompress data in a single step:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { deflate, unzip } = require('zlib');\n\nconst input = '.................................';\ndeflate(input, (err, buffer) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n  console.log(buffer.toString('base64'));\n});\n\nconst buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64');\nunzip(buffer, (err, buffer) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n  console.log(buffer.toString());\n});\n\n// Or, Promisified\n\nconst { promisify } = require('util');\nconst do_unzip = promisify(unzip);\n\ndo_unzip(buffer)\n  .then((buf) => console.log(buf.toString()))\n  .catch((err) => {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  });\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Source Code: lib/zlib.js

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The zlib module provides compression functionality implemented using Gzip,\nDeflate/Inflate, and Brotli.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              To access it:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const zlib = require('zlib');\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Compression and decompression are built around the Node.js Streams API.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Compressing or decompressing a stream (such as a file) can be accomplished by\npiping the source stream through a zlib Transform stream into a destination\nstream:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { createGzip } = require('zlib');\nconst { pipeline } = require('stream');\nconst {\n  createReadStream,\n  createWriteStream\n} = require('fs');\n\nconst gzip = createGzip();\nconst source = createReadStream('input.txt');\nconst destination = createWriteStream('input.txt.gz');\n\npipeline(source, gzip, destination, (err) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n});\n\n// Or, Promisified\n\nconst { promisify } = require('util');\nconst pipe = promisify(pipeline);\n\nasync function do_gzip(input, output) {\n  const gzip = createGzip();\n  const source = createReadStream(input);\n  const destination = createWriteStream(output);\n  await pipe(source, gzip, destination);\n}\n\ndo_gzip('input.txt', 'input.txt.gz')\n  .catch((err) => {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  });\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              It is also possible to compress or decompress data in a single step:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const { deflate, unzip } = require('zlib');\n\nconst input = '.................................';\ndeflate(input, (err, buffer) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n  console.log(buffer.toString('base64'));\n});\n\nconst buffer = Buffer.from('eJzT0yMAAGTvBe8=', 'base64');\nunzip(buffer, (err, buffer) => {\n  if (err) {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  }\n  console.log(buffer.toString());\n});\n\n// Or, Promisified\n\nconst { promisify } = require('util');\nconst do_unzip = promisify(unzip);\n\ndo_unzip(buffer)\n  .then((buf) => console.log(buf.toString()))\n  .catch((err) => {\n    console.error('An error occurred:', err);\n    process.exitCode = 1;\n  });\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", "modules": [ { - "textRaw": "Threadpool Usage and Performance Considerations", + "textRaw": "Threadpool usage and performance considerations", "name": "threadpool_usage_and_performance_considerations", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              All zlib APIs, except those that are explicitly synchronous, use the Node.js\ninternal threadpool. This can lead to surprising effects and performance\nlimitations in some applications.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Creating and using a large number of zlib objects simultaneously can cause\nsignificant memory fragmentation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const zlib = require('zlib');\n\nconst payload = Buffer.from('This is some data');\n\n// WARNING: DO NOT DO THIS!\nfor (let i = 0; i < 30000; ++i) {\n  zlib.deflate(payload, (err, buffer) => {});\n}\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              In the preceding example, 30,000 deflate instances are created concurrently.\nBecause of how some operating systems handle memory allocation and\ndeallocation, this may lead to to significant memory fragmentation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              It is strongly recommended that the results of compression\noperations be cached to avoid duplication of effort.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", - "displayName": "Threadpool Usage and Performance Considerations" + "displayName": "Threadpool usage and performance considerations" }, { "textRaw": "Compressing HTTP requests and responses", "name": "compressing_http_requests_and_responses", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The zlib module can be used to implement support for the gzip, deflate\nand br content-encoding mechanisms defined by\nHTTP.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The HTTP Accept-Encoding header is used within an http request to identify\nthe compression encodings accepted by the client. The Content-Encoding\nheader is used to identify the compression encodings actually applied to a\nmessage.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The examples given below are drastically simplified to show the basic concept.\nUsing zlib encoding can be expensive, and the results ought to be cached.\nSee Memory Usage Tuning for more information on the speed/memory/compression\ntradeoffs involved in zlib usage.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // Client request example\nconst zlib = require('zlib');\nconst http = require('http');\nconst fs = require('fs');\nconst { pipeline } = require('stream');\n\nconst request = http.get({ host: 'example.com',\n                           path: '/',\n                           port: 80,\n                           headers: { 'Accept-Encoding': 'br,gzip,deflate' } });\nrequest.on('response', (response) => {\n  const output = fs.createWriteStream('example.com_index.html');\n\n  const onError = (err) => {\n    if (err) {\n      console.error('An error occurred:', err);\n      process.exitCode = 1;\n    }\n  };\n\n  switch (response.headers['content-encoding']) {\n    case 'br':\n      pipeline(response, zlib.createBrotliDecompress(), output, onError);\n      break;\n    // Or, just use zlib.createUnzip() to handle both of the following cases:\n    case 'gzip':\n      pipeline(response, zlib.createGunzip(), output, onError);\n      break;\n    case 'deflate':\n      pipeline(response, zlib.createInflate(), output, onError);\n      break;\n    default:\n      pipeline(response, output, onError);\n      break;\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // server example\n// Running a gzip operation on every request is quite expensive.\n// It would be much more efficient to cache the compressed buffer.\nconst zlib = require('zlib');\nconst http = require('http');\nconst fs = require('fs');\nconst { pipeline } = require('stream');\n\nhttp.createServer((request, response) => {\n  const raw = fs.createReadStream('index.html');\n  // Store both a compressed and an uncompressed version of the resource.\n  response.setHeader('Vary', 'Accept-Encoding');\n  let acceptEncoding = request.headers['accept-encoding'];\n  if (!acceptEncoding) {\n    acceptEncoding = '';\n  }\n\n  const onError = (err) => {\n    if (err) {\n      // If an error occurs, there's not much we can do because\n      // the server has already sent the 200 response code and\n      // some amount of data has already been sent to the client.\n      // The best we can do is terminate the response immediately\n      // and log the error.\n      response.end();\n      console.error('An error occurred:', err);\n    }\n  };\n\n  // Note: This is not a conformant accept-encoding parser.\n  // See https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3\n  if (/\\bdeflate\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'deflate' });\n    pipeline(raw, zlib.createDeflate(), response, onError);\n  } else if (/\\bgzip\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'gzip' });\n    pipeline(raw, zlib.createGzip(), response, onError);\n  } else if (/\\bbr\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'br' });\n    pipeline(raw, zlib.createBrotliCompress(), response, onError);\n  } else {\n    response.writeHead(200, {});\n    pipeline(raw, response, onError);\n  }\n}).listen(1337);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              By default, the zlib methods will throw an error when decompressing\ntruncated data. However, if it is known that the data is incomplete, or\nthe desire is to inspect only the beginning of a compressed file, it is\npossible to suppress the default error handling by changing the flushing\nmethod that is used to decompress the last chunk of input data:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // This is a truncated version of the buffer from the above examples\nconst buffer = Buffer.from('eJzT0yMA', 'base64');\n\nzlib.unzip(\n  buffer,\n  // For Brotli, the equivalent is zlib.constants.BROTLI_OPERATION_FLUSH.\n  { finishFlush: zlib.constants.Z_SYNC_FLUSH },\n  (err, buffer) => {\n    if (err) {\n      console.error('An error occurred:', err);\n      process.exitCode = 1;\n    }\n    console.log(buffer.toString());\n  });\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              This will not change the behavior in other error-throwing situations, e.g.\nwhen the input data has an invalid format. Using this method, it will not be\npossible to determine whether the input ended prematurely or lacks the\nintegrity checks, making it necessary to manually check that the\ndecompressed result is valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The zlib module can be used to implement support for the gzip, deflate\nand br content-encoding mechanisms defined by\nHTTP.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The HTTP Accept-Encoding header is used within an http request to identify\nthe compression encodings accepted by the client. The Content-Encoding\nheader is used to identify the compression encodings actually applied to a\nmessage.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The examples given below are drastically simplified to show the basic concept.\nUsing zlib encoding can be expensive, and the results ought to be cached.\nSee Memory usage tuning for more information on the speed/memory/compression\ntradeoffs involved in zlib usage.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // Client request example\nconst zlib = require('zlib');\nconst http = require('http');\nconst fs = require('fs');\nconst { pipeline } = require('stream');\n\nconst request = http.get({ host: 'example.com',\n                           path: '/',\n                           port: 80,\n                           headers: { 'Accept-Encoding': 'br,gzip,deflate' } });\nrequest.on('response', (response) => {\n  const output = fs.createWriteStream('example.com_index.html');\n\n  const onError = (err) => {\n    if (err) {\n      console.error('An error occurred:', err);\n      process.exitCode = 1;\n    }\n  };\n\n  switch (response.headers['content-encoding']) {\n    case 'br':\n      pipeline(response, zlib.createBrotliDecompress(), output, onError);\n      break;\n    // Or, just use zlib.createUnzip() to handle both of the following cases:\n    case 'gzip':\n      pipeline(response, zlib.createGunzip(), output, onError);\n      break;\n    case 'deflate':\n      pipeline(response, zlib.createInflate(), output, onError);\n      break;\n    default:\n      pipeline(response, output, onError);\n      break;\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // server example\n// Running a gzip operation on every request is quite expensive.\n// It would be much more efficient to cache the compressed buffer.\nconst zlib = require('zlib');\nconst http = require('http');\nconst fs = require('fs');\nconst { pipeline } = require('stream');\n\nhttp.createServer((request, response) => {\n  const raw = fs.createReadStream('index.html');\n  // Store both a compressed and an uncompressed version of the resource.\n  response.setHeader('Vary', 'Accept-Encoding');\n  let acceptEncoding = request.headers['accept-encoding'];\n  if (!acceptEncoding) {\n    acceptEncoding = '';\n  }\n\n  const onError = (err) => {\n    if (err) {\n      // If an error occurs, there's not much we can do because\n      // the server has already sent the 200 response code and\n      // some amount of data has already been sent to the client.\n      // The best we can do is terminate the response immediately\n      // and log the error.\n      response.end();\n      console.error('An error occurred:', err);\n    }\n  };\n\n  // Note: This is not a conformant accept-encoding parser.\n  // See https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3\n  if (/\\bdeflate\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'deflate' });\n    pipeline(raw, zlib.createDeflate(), response, onError);\n  } else if (/\\bgzip\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'gzip' });\n    pipeline(raw, zlib.createGzip(), response, onError);\n  } else if (/\\bbr\\b/.test(acceptEncoding)) {\n    response.writeHead(200, { 'Content-Encoding': 'br' });\n    pipeline(raw, zlib.createBrotliCompress(), response, onError);\n  } else {\n    response.writeHead(200, {});\n    pipeline(raw, response, onError);\n  }\n}).listen(1337);\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              By default, the zlib methods will throw an error when decompressing\ntruncated data. However, if it is known that the data is incomplete, or\nthe desire is to inspect only the beginning of a compressed file, it is\npossible to suppress the default error handling by changing the flushing\nmethod that is used to decompress the last chunk of input data:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // This is a truncated version of the buffer from the above examples\nconst buffer = Buffer.from('eJzT0yMA', 'base64');\n\nzlib.unzip(\n  buffer,\n  // For Brotli, the equivalent is zlib.constants.BROTLI_OPERATION_FLUSH.\n  { finishFlush: zlib.constants.Z_SYNC_FLUSH },\n  (err, buffer) => {\n    if (err) {\n      console.error('An error occurred:', err);\n      process.exitCode = 1;\n    }\n    console.log(buffer.toString());\n  });\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              This will not change the behavior in other error-throwing situations, e.g.\nwhen the input data has an invalid format. Using this method, it will not be\npossible to determine whether the input ended prematurely or lacks the\nintegrity checks, making it necessary to manually check that the\ndecompressed result is valid.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", "displayName": "Compressing HTTP requests and responses" }, @@ -34,8 +34,8 @@ ], "miscs": [ { - "textRaw": "Memory Usage Tuning", - "name": "Memory Usage Tuning", + "textRaw": "Memory usage tuning", + "name": "Memory usage tuning", "type": "misc", "miscs": [ { @@ -86,21 +86,21 @@ { "textRaw": "Flush operations", "name": "flush_operations", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The following values are valid flush operations for Brotli-based streams:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • zlib.constants.BROTLI_OPERATION_PROCESS (default for all operations)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • zlib.constants.BROTLI_OPERATION_FLUSH (default when calling .flush())
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • zlib.constants.BROTLI_OPERATION_FINISH (default for the last chunk)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                zlib.constants.BROTLI_OPERATION_EMIT_METADATA

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • This particular operation may be hard to use in a Node.js context,\nas the streaming layer makes it hard to know which data will end up\nin this frame. Also, there is currently no way to consume this data through\nthe Node.js API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The following values are valid flush operations for Brotli-based streams:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • zlib.constants.BROTLI_OPERATION_PROCESS (default for all operations)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • zlib.constants.BROTLI_OPERATION_FLUSH (default when calling .flush())
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • zlib.constants.BROTLI_OPERATION_FINISH (default for the last chunk)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • zlib.constants.BROTLI_OPERATION_EMIT_METADATA\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • This particular operation may be hard to use in a Node.js context,\nas the streaming layer makes it hard to know which data will end up\nin this frame. Also, there is currently no way to consume this data through\nthe Node.js API.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", "displayName": "Flush operations" }, { "textRaw": "Compressor options", "name": "compressor_options", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              There are several options that can be set on Brotli encoders, affecting\ncompression efficiency and speed. Both the keys and the values can be accessed\nas properties of the zlib.constants object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The most important options are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_MODE

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • BROTLI_MODE_GENERIC (default)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • BROTLI_MODE_TEXT, adjusted for UTF-8 text
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • BROTLI_MODE_FONT, adjusted for WOFF 2.0 fonts
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_QUALITY

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from BROTLI_MIN_QUALITY to BROTLI_MAX_QUALITY,\nwith a default of BROTLI_DEFAULT_QUALITY.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_SIZE_HINT

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Integer value representing the expected input size;\ndefaults to 0 for an unknown input size.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The following flags can be set for advanced control over the compression\nalgorithm and memory usage tuning:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_LGWIN

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from BROTLI_MIN_WINDOW_BITS to BROTLI_MAX_WINDOW_BITS,\nwith a default of BROTLI_DEFAULT_WINDOW, or up to\nBROTLI_LARGE_MAX_WINDOW_BITS if the BROTLI_PARAM_LARGE_WINDOW flag\nis set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_LGBLOCK

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from BROTLI_MIN_INPUT_BLOCK_BITS to BROTLI_MAX_INPUT_BLOCK_BITS.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Boolean flag that decreases compression ratio in favour of\ndecompression speed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_LARGE_WINDOW

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Boolean flag enabling “Large Window Brotli” mode (not compatible with the\nBrotli format as standardized in RFC 7932).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_NPOSTFIX

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from 0 to BROTLI_MAX_NPOSTFIX.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_PARAM_NDIRECT

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from 0 to 15 << NPOSTFIX in steps of 1 << NPOSTFIX.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              There are several options that can be set on Brotli encoders, affecting\ncompression efficiency and speed. Both the keys and the values can be accessed\nas properties of the zlib.constants object.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The most important options are:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_MODE\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • BROTLI_MODE_GENERIC (default)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • BROTLI_MODE_TEXT, adjusted for UTF-8 text
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • BROTLI_MODE_FONT, adjusted for WOFF 2.0 fonts
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_QUALITY\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from BROTLI_MIN_QUALITY to BROTLI_MAX_QUALITY,\nwith a default of BROTLI_DEFAULT_QUALITY.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_SIZE_HINT\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Integer value representing the expected input size;\ndefaults to 0 for an unknown input size.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              The following flags can be set for advanced control over the compression\nalgorithm and memory usage tuning:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_LGWIN\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from BROTLI_MIN_WINDOW_BITS to BROTLI_MAX_WINDOW_BITS,\nwith a default of BROTLI_DEFAULT_WINDOW, or up to\nBROTLI_LARGE_MAX_WINDOW_BITS if the BROTLI_PARAM_LARGE_WINDOW flag\nis set.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_LGBLOCK\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from BROTLI_MIN_INPUT_BLOCK_BITS to BROTLI_MAX_INPUT_BLOCK_BITS.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Boolean flag that decreases compression ratio in favour of\ndecompression speed.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_LARGE_WINDOW\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Boolean flag enabling “Large Window Brotli” mode (not compatible with the\nBrotli format as standardized in RFC 7932).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_NPOSTFIX\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from 0 to BROTLI_MAX_NPOSTFIX.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_PARAM_NDIRECT\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Ranges from 0 to 15 << NPOSTFIX in steps of 1 << NPOSTFIX.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", "displayName": "Compressor options" }, { "textRaw": "Decompressor options", "name": "decompressor_options", - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              These advanced options are available for controlling decompression:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Boolean flag that affects internal memory allocation patterns.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                BROTLI_DECODER_PARAM_LARGE_WINDOW

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Boolean flag enabling “Large Window Brotli” mode (not compatible with the\nBrotli format as standardized in RFC 7932).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              These advanced options are available for controlling decompression:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Boolean flag that affects internal memory allocation patterns.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • BROTLI_DECODER_PARAM_LARGE_WINDOW\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • Boolean flag enabling “Large Window Brotli” mode (not compatible with the\nBrotli format as standardized in RFC 7932).
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              • \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", "type": "module", "displayName": "Decompressor options" } @@ -120,6 +120,11 @@ ], "changes": [ { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33516", + "description": "The `maxOutputLength` option is supported now." + }, + { "version": "v9.4.0", "pr-url": "https://github.com/nodejs/node/pull/16042", "description": "The `dictionary` option can be an `ArrayBuffer`." @@ -136,7 +141,7 @@ } ] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Each zlib-based class takes an options object. No options are required.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Some options are only relevant when compressing and are\nignored by the decompression classes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              See the deflateInit2 and inflateInit2 documentation for more\ninformation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Each zlib-based class takes an options object. No options are required.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Some options are only relevant when compressing and are\nignored by the decompression classes.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              See the deflateInit2 and inflateInit2 documentation for more\ninformation.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " }, { "textRaw": "Class: `BrotliOptions`", @@ -146,13 +151,19 @@ "added": [ "v11.7.0" ], - "changes": [] + "changes": [ + { + "version": "v12.19.0", + "pr-url": "https://github.com/nodejs/node/pull/33516", + "description": "The `maxOutputLength` option is supported now." + } + ] }, - "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Each Brotli-based class takes an options object. All options are optional.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              For example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const stream = zlib.createBrotliCompress({\n  chunkSize: 32 * 1024,\n  params: {\n    [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n    [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n    [zlib.constants.BROTLI_PARAM_SIZE_HINT]: fs.statSync(inputFile).size\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " + "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Each Brotli-based class takes an options object. All options are optional.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n\n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              For example:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              const stream = zlib.createBrotliCompress({\n  chunkSize: 32 * 1024,\n  params: {\n    [zlib.constants.BROTLI_PARAM_MODE]: zlib.constants.BROTLI_MODE_TEXT,\n    [zlib.constants.BROTLI_PARAM_QUALITY]: 4,\n    [zlib.constants.BROTLI_PARAM_SIZE_HINT]: fs.statSync(inputFile).size\n  }\n});\n
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              " }, { - "textRaw": "Convenience Methods", - "name": "Convenience Methods", + "textRaw": "Convenience methods", + "name": "Convenience methods", "type": "misc", "desc": "

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              All of these take a Buffer, TypedArray, DataView,\nArrayBuffer or string as the first argument, an optional second argument\nto supply options to the zlib classes and will call the supplied callback\nwith callback(error, result).

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              \n

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Every method has a *Sync counterpart, which accept the same arguments, but\nwithout a callback.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              ", "methods": [ diff -Nru nodejs-mozilla-12.18.1/doc/api/zlib.md nodejs-mozilla-12.22.12/doc/api/zlib.md --- nodejs-mozilla-12.18.1/doc/api/zlib.md 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api/zlib.md 2022-04-05 07:17:04.000000000 +0000 @@ -4,6 +4,8 @@ > Stability: 2 - Stable + + The `zlib` module provides compression functionality implemented using Gzip, Deflate/Inflate, and Brotli. @@ -93,7 +95,7 @@ }); ``` -## Threadpool Usage and Performance Considerations +## Threadpool usage and performance considerations All `zlib` APIs, except those that are explicitly synchronous, use the Node.js internal threadpool. This can lead to surprising effects and performance @@ -133,7 +135,7 @@ The examples given below are drastically simplified to show the basic concept. Using `zlib` encoding can be expensive, and the results ought to be cached. -See [Memory Usage Tuning][] for more information on the speed/memory/compression +See [Memory usage tuning][] for more information on the speed/memory/compression tradeoffs involved in `zlib` usage. ```js @@ -252,7 +254,7 @@ integrity checks, making it necessary to manually check that the decompressed result is valid. -## Memory Usage Tuning +## Memory usage tuning @@ -484,6 +486,9 @@ @@ -529,6 +540,8 @@ * `finishFlush` {integer} **Default:** `zlib.constants.BROTLI_OPERATION_FINISH` * `chunkSize` {integer} **Default:** `16 * 1024` * `params` {Object} Key-value object containing indexed [Brotli parameters][]. +* `maxOutputLength` {integer} Limits output size when using + [convenience methods][]. **Default:** [`buffer.kMaxLength`][] For example: @@ -814,7 +827,7 @@ Creates and returns a new [`Unzip`][] object. -## Convenience Methods +## Convenience methods @@ -1140,6 +1153,7 @@ [`BrotliCompress`]: #zlib_class_zlib_brotlicompress [`BrotliDecompress`]: #zlib_class_zlib_brotlidecompress [`Buffer`]: buffer.html#buffer_class_buffer +[`buffer.kMaxLength`]: buffer.html#buffer_buffer_kmaxlength [`Content-Encoding`]: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11 [`DataView`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView [`DeflateRaw`]: #zlib_class_zlib_deflateraw @@ -1154,8 +1168,9 @@ [`stream.Transform`]: stream.html#stream_class_stream_transform [`zlib.bytesWritten`]: #zlib_zlib_byteswritten [Brotli parameters]: #zlib_brotli_constants -[Memory Usage Tuning]: #zlib_memory_usage_tuning +[Memory usage tuning]: #zlib_memory_usage_tuning [RFC 7932]: https://www.rfc-editor.org/rfc/rfc7932.txt [Streams API]: stream.md +[convenience methods]: #zlib_convenience_methods [zlib documentation]: https://zlib.net/manual.html#Constants [zlib.createGzip example]: #zlib_zlib diff -Nru nodejs-mozilla-12.18.1/doc/api_assets/hljs.css nodejs-mozilla-12.22.12/doc/api_assets/hljs.css --- nodejs-mozilla-12.18.1/doc/api_assets/hljs.css 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api_assets/hljs.css 2022-04-05 07:17:03.000000000 +0000 @@ -0,0 +1,30 @@ +.hljs { + font-weight: normal; + font-style: normal; +} + +.hljs-symbol { + color: #333; +} + +.hljs-attribute, +.hljs-keyword { + color: #338; +} + +.hljs-string, +.hljs-regexp, +.hljs-number { + color: #cf350d; +} + +.hljs-doctag { + color: #040404; +} + +.hljs-doctag .hljs-type, +.hljs-doctag .hljs-variable, +.hljs-comment { + color: #666; + font-weight: lighter; +} diff -Nru nodejs-mozilla-12.18.1/doc/api_assets/README.md nodejs-mozilla-12.22.12/doc/api_assets/README.md --- nodejs-mozilla-12.18.1/doc/api_assets/README.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api_assets/README.md 2022-04-05 07:17:03.000000000 +0000 @@ -0,0 +1,9 @@ +# API Reference Document Assets + +## hljs.css + +The syntax theme for code snippets in API reference documents. + +## style.css + +The main stylesheet for API reference documents. diff -Nru nodejs-mozilla-12.18.1/doc/api_assets/sh.css nodejs-mozilla-12.22.12/doc/api_assets/sh.css --- nodejs-mozilla-12.18.1/doc/api_assets/sh.css 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api_assets/sh.css 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -.sh_sourceCode { - font-weight: normal; - font-style: normal; -} - -.sh_sourceCode .sh_symbol, -.sh_sourceCode .sh_cbracket { - color: #333; -} - -.sh_sourceCode .sh_keyword { - color: #338; -} - -.sh_sourceCode .sh_string, -.sh_sourceCode .sh_regexp, -.sh_sourceCode .sh_number, -.sh_sourceCode .sh_specialchar { - color: #E54305; -} - -.sh_sourceCode .sh_comment { - color: #666; - font-weight: lighter; -} diff -Nru nodejs-mozilla-12.18.1/doc/api_assets/sh_javascript.min.js nodejs-mozilla-12.22.12/doc/api_assets/sh_javascript.min.js --- nodejs-mozilla-12.18.1/doc/api_assets/sh_javascript.min.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/api_assets/sh_javascript.min.js 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -if(!this.sh_languages){this.sh_languages={}}sh_languages.javascript=[[[/\/\/\//g,"sh_comment",1],[/\/\//g,"sh_comment",7],[/\/\*\*/g,"sh_comment",8],[/\/\*/g,"sh_comment",9],[/\b(?:abstract|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|final|finally|for|function|goto|if|implements|in|instanceof|interface|native|new|null|private|protected|prototype|public|return|static|super|switch|synchronized|throw|throws|this|transient|true|try|typeof|var|volatile|while|with)\b/g,"sh_keyword",-1],[/(\+\+|--|\)|\])(\s*)(\/=?(?![*\/]))/g,["sh_symbol","sh_normal","sh_symbol"],-1],[/(0x[A-Fa-f0-9]+|(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?)(\s*)(\/(?![*\/]))/g,["sh_number","sh_normal","sh_symbol"],-1],[/([A-Za-z$_][A-Za-z0-9$_]*\s*)(\/=?(?![*\/]))/g,["sh_normal","sh_symbol"],-1],[/\/(?:\\.|[^*\\\/])(?:\\.|[^\\\/])*\/[gim]*/g,"sh_regexp",-1],[/\b[+-]?(?:(?:0x[A-Fa-f0-9]+)|(?:(?:[\d]*\.)?[\d]+(?:[eE][+-]?[\d]+)?))u?(?:(?:int(?:8|16|32|64))|L)?\b/g,"sh_number",-1],[/"/g,"sh_string",10],[/'/g,"sh_string",11],[/~|!|%|\^|\*|\(|\)|-|\+|=|\[|\]|\\|:|;|,|\.|\/|\?|&|<|>|\|/g,"sh_symbol",-1],[/\{|\}/g,"sh_cbracket",-1],[/\b(?:Math|Infinity|NaN|undefined|arguments)\b/g,"sh_predef_var",-1],[/\b(?:Array|Boolean|Date|Error|EvalError|Function|Number|Object|RangeError|ReferenceError|RegExp|String|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt)\b/g,"sh_predef_func",-1],[/(?:[A-Za-z]|_)[A-Za-z0-9_]*(?=[ \t]*\()/g,"sh_function",-1]],[[/$/g,null,-2],[/(?:?)|(?:?)/g,"sh_url",-1],[/<\?xml/g,"sh_preproc",2,1],[//g,"sh_keyword",-1],[/<(?:\/)?[A-Za-z](?:[A-Za-z0-9_:.-]*)/g,"sh_keyword",6,1],[/&(?:[A-Za-z0-9]+);/g,"sh_preproc",-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*(?:\/)?>/g,"sh_keyword",-1],[/<(?:\/)?[A-Za-z][A-Za-z0-9]*/g,"sh_keyword",6,1],[/@[A-Za-z]+/g,"sh_type",-1],[/(?:TODO|FIXME|BUG)(?:[:]?)/g,"sh_todo",-1]],[[/\?>/g,"sh_preproc",-2],[/([^=" \t>]+)([ \t]*)(=?)/g,["sh_type","sh_normal","sh_symbol"],-1],[/"/g,"sh_string",3]],[[/\\(?:\\|")/g,null,-1],[/"/g,"sh_string",-2]],[[/>/g,"sh_preproc",-2],[/([^=" \t>]+)([ \t]*)(=?)/g,["sh_type","sh_normal","sh_symbol"],-1],[/"/g,"sh_string",3]],[[/-->/g,"sh_comment",-2],[/ * NOT OK: It is important to note that, in all cases, the return value will be a string regardless. +* For headings, use sentence case, not title case. + + * OK: _## Everybody to the limit_ + * NOT OK: _## Everybody To The Limit_ +* When referring to a version of Node.js in prose, use _Node.js_ and the version + number. Do not prefix the version number with _v_ in prose. This is to avoid + confusion about whether _V8_ refers to Node.js 8.x or the V8 JavaScript + engine. + * OK: _Node.js 14.x_, _Node.js 14.3.1_ + * NOT OK: _Node.js v14_ See also API documentation structure overview in [doctools README][]. +For topics not covered here, refer to the [Microsoft Writing Style Guide][]. + [Javascript type]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Data_structures_and_types -[serial commas]: https://en.wikipedia.org/wiki/Serial_comma -[plugin]: https://editorconfig.org/#download +[Microsoft Writing Style Guide]: https://docs.microsoft.com/en-us/style-guide/welcome/ +[`remark-preset-lint-node`]: https://github.com/nodejs/remark-preset-lint-node [doctools README]: ../../tools/doc/README.md +[info string]: https://github.github.com/gfm/#info-string +[language]: https://github.com/highlightjs/highlight.js/blob/master/SUPPORTED_LANGUAGES.md +[plugin]: https://editorconfig.org/#download +[serial commas]: https://en.wikipedia.org/wiki/Serial_comma diff -Nru nodejs-mozilla-12.18.1/doc/guides/investigating_native_memory_leak.md nodejs-mozilla-12.22.12/doc/guides/investigating_native_memory_leak.md --- nodejs-mozilla-12.18.1/doc/guides/investigating_native_memory_leak.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/investigating_native_memory_leak.md 2022-04-05 07:17:03.000000000 +0000 @@ -103,7 +103,7 @@ In this example, a loop which allocates ~1MB of memory and never frees it has been added: -```C++ +```cpp void* malloc_holder = nullptr; napi_value Method(napi_env env, napi_callback_info info) { napi_status status; @@ -366,7 +366,7 @@ This new output shows us exactly where the leak is occurring in the file `hello.cc`: -```C++ +```cpp 6 void* malloc_holder = nullptr; 7 napi_value Method(napi_env env, napi_callback_info info) { 8 napi_status status; diff -Nru nodejs-mozilla-12.18.1/doc/guides/maintaining-c-ares.md nodejs-mozilla-12.22.12/doc/guides/maintaining-c-ares.md --- nodejs-mozilla-12.18.1/doc/guides/maintaining-c-ares.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/maintaining-c-ares.md 2022-04-05 07:17:03.000000000 +0000 @@ -0,0 +1,66 @@ +# Maintaining c-ares + +Updates to the c-ares dependency involve the following steps: + +1. Downloading the source archive for the new version. +2. Unpacking the source in a temporary workspace directory. +3. Removing the `test` directory (to save disk space). +4. Copying over the existing `.gitignore`, pre-generated `config` directory and + `cares.gyp` files. +5. Replacing the existing `deps/cares` with the workspace directory. +6. Modifying the `cares.gyp` file for file additions/deletions. +7. Rebuilding the main Node.js `LICENSE`. + +## Running the update script + +The `tools/update-cares.sh` script automates the update of the c-ares source +files, preserving the existing files added by Node.js. + +In the following examples, `x.y.z` should match the c-ares version to update to. + +```console +./tools/update-cares.sh x.y.z +``` + +e.g. + +```console +./tools/update-cares.sh 1.18.1 +``` + +## Check that Node.js still builds and tests + +It may be necessary to update `deps/cares/cares.gyp` if any significant changes +have occurred upstream. + +## Rebuild the main Node.js license + +Run the `tools/license-builder.sh` script to rebuild the main Node.js `LICENSE` +file. This may result in no changes if c-ares' license has not changed. + +```console +./tools/license-builder.sh +``` + +If the updated `LICENSE` contains changes for other dependencies, those should +be done in a separate pull request first. + +## Commit the changes + +```console +git add -A deps/cares +``` + +Add the rebuilt `LICENSE` if it has been updated. + +```console +git add LICENSE +``` + +Commit the changes with a message like + +```text +deps: update c-ares to x.y.z + +Updated as described in doc/guides/maintaining-c-ares.md. +``` diff -Nru nodejs-mozilla-12.18.1/doc/guides/maintaining-openssl.md nodejs-mozilla-12.22.12/doc/guides/maintaining-openssl.md --- nodejs-mozilla-12.18.1/doc/guides/maintaining-openssl.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/maintaining-openssl.md 2022-04-05 07:17:03.000000000 +0000 @@ -5,12 +5,12 @@ ## Requirements * Linux environment. * `perl` Only Perl version 5 is tested. -* `nasm` () Version 2.11 or higher is needed. +* `nasm` () Version 2.11 or higher is needed. * GNU `as` in binutils. Version 2.26 or higher is needed. ## 0. Check Requirements -```sh +```console % perl -v This is perl 5, version 22, subversion 1 (v5.22.1) built for @@ -30,14 +30,14 @@ Get a new source from and extract all files into `deps/openssl/openssl`. Then add all files and commit them. -```sh +```console % cd deps/openssl/ % rm -rf openssl % tar zxf ~/tmp/openssl-1.1.0h.tar.gz % mv openssl-1.1.0h openssl % git add --all openssl % git commit openssl -```` +``` The commit message can be written as (with the openssl version set to the relevant value): @@ -57,7 +57,11 @@ Use `make` to regenerate all platform dependent files in `deps/openssl/config/archs/`: -```sh +```console +# On non-Linux machines +% make gen-openssl + +# On Linux machines % make -C deps/openssl/config ``` @@ -66,7 +70,7 @@ Check diffs to ensure updates are right. Even if there are no updates in openssl sources, `buildinf.h` files will be updated because they have timestamp data in them. -```sh +```console % git diff -- deps/openssl ``` @@ -81,7 +85,7 @@ Update all architecture dependent files. Do not forget to git add or remove files if they are changed before committing: -```sh +```console % git add deps/openssl/config/archs % git add deps/openssl/openssl/include/crypto/bn_conf.h % git add deps/openssl/openssl/include/crypto/dso_conf.h diff -Nru nodejs-mozilla-12.18.1/doc/guides/maintaining-root-certs.md nodejs-mozilla-12.22.12/doc/guides/maintaining-root-certs.md --- nodejs-mozilla-12.18.1/doc/guides/maintaining-root-certs.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/maintaining-root-certs.md 2022-04-05 07:17:03.000000000 +0000 @@ -30,7 +30,7 @@ Update the tag in the commands below, and run: - ```shell + ```bash cd tools/ ./mk-ca-bundle.pl -v 2>_before curl -O https://hg.mozilla.org/projects/nss/raw-file/NSS_3_41_RTM/lib/ckfw/builtins/certdata.txt @@ -57,7 +57,7 @@ Run the command below: - ```shell + ```bash ./mk-ca-bundle.pl -v 2>_after ``` @@ -65,7 +65,7 @@ Determine what changes were made by diffing the before and after files: - ```shell + ```console % diff _before _after 11d10 < Parsing: Visa eCommerce Root diff -Nru nodejs-mozilla-12.18.1/doc/guides/maintaining-V8.md nodejs-mozilla-12.22.12/doc/guides/maintaining-V8.md --- nodejs-mozilla-12.18.1/doc/guides/maintaining-V8.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/maintaining-V8.md 2022-04-05 07:17:03.000000000 +0000 @@ -324,7 +324,7 @@ The rough outline of the process is: -```shell +```bash # Assuming your fork of Node.js is checked out in $NODE_DIR # and you want to update the Node.js master branch. # Find the current (OLD) version in @@ -363,7 +363,7 @@ To audit for floating patches: -```shell +```bash git log --oneline deps/v8 ``` @@ -371,7 +371,7 @@ if you want to replace the copy of V8 in Node.js with the branch-head for V8 5.1 branch: -```shell +```bash cd $NODE_DIR git node v8 major --branch=5.1-lkgr ``` @@ -411,8 +411,8 @@ as their support has ended. [ChromiumReleaseCalendar]: https://www.chromium.org/developers/calendar -[Node.js `canary` branch]: https://github.com/nodejs/node-v8/tree/canary [Node.js CI]: https://ci.nodejs.org/job/node-test-pull-request/ +[Node.js `canary` branch]: https://github.com/nodejs/node-v8/tree/canary [NodeJS-Backport-Approved-Chromium]: https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ANodeJS-Backport-Approved [NodeJS-Backport-Approved-V8]: https://bugs.chromium.org/p/v8/issues/list?can=1&q=label%3ANodeJS-Backport-Approved [NodeJS-Backport-Done-Chromium]: https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ANodeJS-Backport-Done @@ -421,10 +421,10 @@ [NodeJS-Backport-Rejected-V8]: https://bugs.chromium.org/p/v8/issues/list?can=1&q=label%3ANodeJS-Backport-Rejected [NodeJS-Backport-Review-Chromium]: https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ANodeJS-Backport-Review [NodeJS-Backport-Review-V8]: https://bugs.chromium.org/p/v8/issues/list?can=1&q=label%3ANodeJS-Backport-Review -[`git-node`]: https://github.com/nodejs/node-core-utils/blob/master/docs/git-node.md#git-node-v8 [V8 CI]: https://ci.nodejs.org/job/node-test-commit-v8-linux/ [V8ActiveBranches]: https://build.chromium.org/p/client.v8.branches/console [V8Contributing]: https://github.com/v8/v8/wiki/Contributing [V8MergingPatching]: https://github.com/v8/v8/wiki/Merging%20&%20Patching [V8TemplateMergeRequest]: https://bugs.chromium.org/p/v8/issues/entry?template=Node.js%20merge%20request [V8TemplateUpstreamBug]: https://bugs.chromium.org/p/v8/issues/entry?template=Node.js%20upstream%20bug +[`git-node`]: https://github.com/nodejs/node-core-utils/blob/master/docs/git-node.md#git-node-v8 diff -Nru nodejs-mozilla-12.18.1/doc/guides/maintaining-zlib.md nodejs-mozilla-12.22.12/doc/guides/maintaining-zlib.md --- nodejs-mozilla-12.18.1/doc/guides/maintaining-zlib.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/maintaining-zlib.md 2022-04-05 07:17:03.000000000 +0000 @@ -6,7 +6,7 @@ ## Updating zlib Update zlib: -```shell +```bash git clone https://chromium.googlesource.com/chromium/src/third_party/zlib cp deps/zlib/zlib.gyp deps/zlib/win32/zlib.def deps rm -rf deps/zlib zlib/.git diff -Nru nodejs-mozilla-12.18.1/doc/guides/node-postmortem-support.md nodejs-mozilla-12.22.12/doc/guides/node-postmortem-support.md --- nodejs-mozilla-12.18.1/doc/guides/node-postmortem-support.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/node-postmortem-support.md 2022-04-05 07:17:03.000000000 +0000 @@ -35,7 +35,7 @@ `sizeof(req_)` depends on the type of T, which means the class definition should be like this: -```c++ +```cpp template class ReqWrap : public AsyncWrap { private: @@ -49,7 +49,7 @@ instead of: -```c++ +```cpp template class ReqWrap : public AsyncWrap { private: diff -Nru nodejs-mozilla-12.18.1/doc/guides/onboarding-extras.md nodejs-mozilla-12.22.12/doc/guides/onboarding-extras.md --- nodejs-mozilla-12.18.1/doc/guides/onboarding-extras.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/onboarding-extras.md 2022-04-05 07:17:03.000000000 +0000 @@ -1,4 +1,4 @@ -# Additional Onboarding Information +# Additional onboarding information ## Labels @@ -11,20 +11,31 @@ * `test` * `tools` -There may be more than one subsystem valid for any particular issue or pull -request. +More than one subsystem may be valid for any particular issue or pull request. ### General -* `confirmed-bug` - Bugs you have verified exist -* `discuss` - Things that need larger discussion -* `feature request` - Any issue that requests a new feature (usually not PRs) -* `good first issue` - Issues suitable for newcomers to process -* `meta` - For issues whose topic is governance, policies, procedures, etc. -* `tsc-agenda` - Open issues and pull requests with this label will be added to +* `confirmed-bug`: Bugs you have verified +* `discuss`: Things that need larger discussion +* `feature request`: Any issue that requests a new feature +* `good first issue`: Issues suitable for newcomers to fix +* `meta`: Governance, policies, procedures, etc. +* `tsc-agenda`: Open issues and pull requests with this label will be added to the Technical Steering Committee meeting agenda --- +--- + +* `author-ready` - A pull request is _author ready_ when: + * There is a CI run in progress or completed. + * There is at least one Collaborator approval (or two TSC approvals for + semver-major PRs). + * There are no outstanding review comments. + +Please always add the `author ready` label to pull requests that qualify. +Please always remove it again as soon as the conditions are not met anymore, +such as if the CI run fails or a new outstanding review comment is posted. + +--- * `semver-{minor,major}` * be conservative – that is, if a change has the remote *chance* of breaking @@ -34,16 +45,8 @@ section to the docs" * major vs. everything else: run last versions tests against this version, if they pass, **probably** minor or patch - * A breaking change helper - ([full source](https://gist.github.com/chrisdickinson/ba532fa0e4e243fb7b44)): - - ```sh - SHOW=$(git show-ref -d $(git describe --abbrev=0) | tail -n1 | awk '{print $1}') - git checkout $(git show -s --pretty='%T' $SHOW) -- test - make -j4 test - ``` -### LTS/Version labels +### LTS/version labels We use labels to keep track of which branches a commit should land on: @@ -78,11 +81,11 @@ Once a release line enters maintenance mode, the corresponding labels do not need to be attached anymore, as only important bugfixes will be included. -### Other Labels +### Other labels * Operating system labels * `macos`, `windows`, `smartos`, `aix` - * No linux, linux is the implied default + * No `linux` label because it is the implied default * Architecture labels * `arm`, `mips`, `s390`, `ppc` - * No x86{_64}, since that is the implied default + * No `x86{_64}` label because it is the implied default diff -Nru nodejs-mozilla-12.18.1/doc/guides/releases.md nodejs-mozilla-12.22.12/doc/guides/releases.md --- nodejs-mozilla-12.18.1/doc/guides/releases.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/releases.md 2022-04-05 07:17:03.000000000 +0000 @@ -92,8 +92,14 @@ The GPG keys should be fetchable from a known third-party keyserver. The SKS Keyservers at are recommended. Use the -[submission](https://pgp.mit.edu/) form to submit a new GPG key. Keys should be -fetchable via: +[submission](https://pgp.mit.edu/) form to submit a new GPG key. You'll need to +do an ASCII-armored export of your key first: + +```console +$ gpg --armor --export email@server.com > ~/nodekey.asc +``` + +Keys should be fetchable via: ```console $ gpg --keyserver pool.sks-keyservers.net --recv-keys @@ -283,7 +289,7 @@ The new entry should take the following form: -```md +```markdown ## YYYY-MM-DD, Version x.y.z (Release Type), @releaser @@ -344,7 +350,7 @@ `REPLACEME` changes should be the final commit that will be tagged for the release. When committing these to git, use the following message format: -```txt +```text YYYY-MM-DD, Version x.y.z (Release Type) Notable changes: @@ -357,7 +363,7 @@ [distribution indexer](https://github.com/nodejs/nodejs-dist-indexer) to identify it as such: -```txt +```text YYYY-MM-DD, Version x.y.z (Release Type) This is a security release. @@ -493,7 +499,7 @@ `release-type` is either "Current" or "LTS". For LTS releases, you should also include the release codename, for example: -```txt +```text 2019-10-22 Node.js v10.17.0 'Dubnium' (LTS) Release ``` @@ -509,7 +515,7 @@ Commit this change with the following commit message format: -```txt +```text Working on vx.y.z # where 'z' is the incremented patch number PR-URL: @@ -576,7 +582,7 @@ Use `tools/release.sh` to promote and sign the build. Before doing this, you'll need to ensure you've loaded the correct ssh key, or you'll see the following: -```sh +```console # Checking for releases ... Enter passphrase for key '/Users//.ssh/id_rsa': dist@direct.nodejs.org's password: @@ -584,20 +590,22 @@ The key can be loaded either with `ssh-add`: -```sh +```console # Substitute node_id_rsa with whatever you've named the key $ ssh-add ~/.ssh/node_id_rsa ``` or at runtime with: -```sh +```console # Substitute node_id_rsa with whatever you've named the key $ ./tools/release.sh -i ~/.ssh/node_id_rsa ``` `tools/release.sh` will perform the following actions when run: +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              + **a.** Select a GPG key from your private keys. It will use a command similar to: `gpg --list-secret-keys` to list your keys. If you don't have any keys, it will bail. If you have only one key, it will use that. If you have more than @@ -631,6 +639,7 @@ **g.** Upload the `SHASUMS256.txt` files back to the server into the release directory. +
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              If you didn't wait for ARM builds in the previous step before promoting the release, you should re-run `tools/release.sh` after the ARM builds have @@ -747,6 +756,14 @@ The changes must be made as part of a new semver-minor release. +### Update release labels + +The `lts-watch-vN.x` issue label must be created, with the same color as other +existing labels for that release line, such as `vN.x`. + +If the release is transitioning from Active LTS to Maintenance, the +`backport-requested-vN.x` label must be deleted. + ## Major Releases The process for cutting a new Node.js major release has a number of differences @@ -783,6 +800,21 @@ the two branches. To land `SEMVER-MAJOR` at this time requires no objections from the TSC. +### Create release labels + +The following issue labels must be created: + +* `vN.x` +* `backport-blocked-vN.x` +* `backport-open-vN.x` +* `backport-requested-vN.x` +* `backported-to-vN.x` +* `dont-land-on-vN.x` + +The label description can be copied from existing labels of previous releases. +The label color must be the same for all new labels, but different from the +labels of previous releases. + ### Release Proposal A draft release proposal should be created two months before the release. A @@ -843,9 +875,9 @@ commits may be listed as notable changes on a case-by-case basis. Use your judgment there. -[CI lockdown procedure]: https://github.com/nodejs/build/blob/master/doc/jenkins-guide.md#restricting-access-for-security-releases [Build issue tracker]: https://github.com/nodejs/build/issues/new +[CI lockdown procedure]: https://github.com/nodejs/build/blob/master/doc/jenkins-guide.md#restricting-access-for-security-releases +[Partner Communities]: https://github.com/nodejs/community-committee/blob/master/governance/PARTNER_COMMUNITIES.md [nodejs.org release-post.js script]: https://github.com/nodejs/nodejs.org/blob/master/scripts/release-post.js [nodejs.org repository]: https://github.com/nodejs/nodejs.org -[Partner Communities]: https://github.com/nodejs/community-committee/blob/master/governance/PARTNER_COMMUNITIES.md [webchat.freenode.net]: https://webchat.freenode.net/ diff -Nru nodejs-mozilla-12.18.1/doc/guides/security-release-process.md nodejs-mozilla-12.22.12/doc/guides/security-release-process.md --- nodejs-mozilla-12.18.1/doc/guides/security-release-process.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/security-release-process.md 2022-04-05 07:17:03.000000000 +0000 @@ -1,8 +1,8 @@ -# Security Release Process +# Security release process The security release process covers the steps required to plan/implement a security release. This document is copied into the description of the Next -Security Release, and used to track progress on the release. It contains ***TEXT +Security Release and used to track progress on the release. It contains ***TEXT LIKE THIS*** which will be replaced during the release process with the information described. @@ -17,7 +17,7 @@ * ... * [ ] PR release announcements in [private](https://github.com/nodejs-private/nodejs.org-private): - * (Use previous PRs as templates, don't forget to update the site banner, and + * (Use previous PRs as templates. Don't forget to update the site banner and the date in the slug so that it will move to the top of the blog list.) * [ ] pre-release: ***LINK TO PR*** * [ ] post-release: ***LINK TO PR*** @@ -44,6 +44,10 @@ (Re-PR the pre-approved branch from nodejs-private/nodejs.org-private to nodejs/nodejs.org) +* [ ] Post in the #nodejs-social channel in the OpenJS Foundation Slack + asking that the social team tweet/retweet the pre-announcement. + If you are on Twitter, you can just direct message the `@nodejs` handle. + * [ ] Request releaser(s) to start integrating the PRs to be released. * [ ] Notify [docker-node][] of upcoming security release date: ***LINK*** @@ -65,9 +69,9 @@ * (Re-PR the pre-approved branch from nodejs-private/nodejs.org-private to nodejs/nodejs.org) -* [ ] Email `"Rachel Romoff" ` to tweet an - announcement, or if you are on twitter you can just direct message the - `@nodejs` handle. +* [ ] Post in the #nodejs-social channel in the OpenJS Foundation Slack + asking that the social team tweet/retweet the announcement. + If you are on Twitter, you can just direct message the `@nodejs` handle. * [ ] Comment in [docker-node][] issue that release is ready for integration. The docker-node team will build and release docker image updates. @@ -89,5 +93,5 @@ [H1 CVE requests]: https://hackerone.com/nodejs/cve_requests [docker-node]: https://github.com/nodejs/docker-node/issues -[nodejs/build]: https://github.com/nodejs/build/issues [email]: https://groups.google.com/forum/#!forum/nodejs-sec +[nodejs/build]: https://github.com/nodejs/build/issues diff -Nru nodejs-mozilla-12.18.1/doc/guides/technical-values.md nodejs-mozilla-12.22.12/doc/guides/technical-values.md --- nodejs-mozilla-12.18.1/doc/guides/technical-values.md 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/technical-values.md 2022-04-05 07:17:03.000000000 +0000 @@ -0,0 +1,61 @@ +# Technical values and priorities + +The project uses these technical values to establish priorities and guide +collaboration. + +## Values and priority level + +* Priority 1 - Developer experience +* Priority 2 - Stability +* Priority 3 - Operational qualities +* Priority 4 - Node.js maintainer experience +* Priority 5 - Up to date Technology and APIs + +## Value descriptions + +### 1 - Developer experience +We value ensuring that developers are productive and enjoy developing +with Node.js. Some key elements of this include: +* Approachability (both technical and community) +* Great documentation +* Bundling friction-reducing APIs and components, even though + they could be provided externally +* Enabling/supporting external packages to ensure overall developer experience + +### 2 - Stability +Whenever possible, we seek to ensure that working code continues to work. To +keep the trust of developers and users, we value stability. +Some key elements of this include: +* Backward compatibility +* Stable releases on a predictable schedule +* A strong safety net, including testing how changes + in Node.js affect popular packages +* Careful consideration of what goes into long term support (LTS) releases + +### 3 - Operational qualities +We value keeping Node.js safe, performant, and lightweight. +We value enabling the ability to investigate and debug problems in +development and production. Some key elements of this include: +* High throughput (speed) +* Fast startup +* Small binary size +* Small memory footprint +* High-quality debugging tools +* Robust diagnostic tools (profilers, etc.) +* Responsible security practices + +### 4 - Node.js maintainer experience +We value the productivity and happiness of the Node.js maintainers. +Some key elements of this include: +* Approachability of the codebase +* Good internal documentation and guides +* Low-friction policies and processes +* Good CI and tooling to make maintainers productive + +### 5 - Up to date Technology and APIs +We value providing developers with modern APIs and technologies +following existing standards whenever possible. +Some key elements of this include: +* Participating in standards work and organizations +* Web API compatibility +* Supporting and exposing new technologies and standards through early adoption diff -Nru nodejs-mozilla-12.18.1/doc/guides/writing-and-running-benchmarks.md nodejs-mozilla-12.22.12/doc/guides/writing-and-running-benchmarks.md --- nodejs-mozilla-12.18.1/doc/guides/writing-and-running-benchmarks.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/writing-and-running-benchmarks.md 2022-04-05 07:17:03.000000000 +0000 @@ -59,7 +59,7 @@ The R packages `ggplot2` and `plyr` are also used and can be installed using the R REPL. -```R +```console $ R install.packages("ggplot2") install.packages("plyr") @@ -71,7 +71,7 @@ If we used the "" mirror, it could look something like this: -```R +```r install.packages("ggplot2", repo="http://cran.us.r-project.org") ``` @@ -551,8 +551,8 @@ benchmarker [autocannon]: https://github.com/mcollina/autocannon -[wrk]: https://github.com/wg/wrk -[t-test]: https://en.wikipedia.org/wiki/Student%27s_t-test#Equal_or_unequal_sample_sizes.2C_unequal_variances +[benchmark-ci]: https://github.com/nodejs/benchmarking/blob/master/docs/core_benchmarks.md [git-for-windows]: https://git-scm.com/download/win [nghttp2.org]: https://nghttp2.org -[benchmark-ci]: https://github.com/nodejs/benchmarking/blob/master/docs/core_benchmarks.md +[t-test]: https://en.wikipedia.org/wiki/Student%27s_t-test#Equal_or_unequal_sample_sizes.2C_unequal_variances +[wrk]: https://github.com/wg/wrk diff -Nru nodejs-mozilla-12.18.1/doc/guides/writing-tests.md nodejs-mozilla-12.22.12/doc/guides/writing-tests.md --- nodejs-mozilla-12.18.1/doc/guides/writing-tests.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/guides/writing-tests.md 2022-04-05 07:17:03.000000000 +0000 @@ -29,7 +29,7 @@ Let's analyze this basic test from the Node.js test suite: -```javascript +```js 'use strict'; // 1 const common = require('../common'); // 2 const fixtures = require('../common/fixtures'); // 3 @@ -57,7 +57,7 @@ ### **Lines 1-3** -```javascript +```js 'use strict'; const common = require('../common'); const fixtures = require('../common/fixtures'); @@ -78,13 +78,13 @@ no functions or other properties exported by `common`, include it without assigning it to an identifier: -```javascript +```js require('../common'); ``` ### **Lines 5-6** -```javascript +```js // This test ensures that the http-parser can handle UTF-8 characters // in the http header. ``` @@ -94,7 +94,7 @@ ### **Lines 8-9** -```javascript +```js const assert = require('assert'); const http = require('http'); ``` @@ -136,7 +136,7 @@ `common.platformTimeout()` method. It allows setting specific timeouts depending on the platform: -```javascript +```js const timer = setTimeout(fail, common.platformTimeout(4000)); ``` @@ -155,7 +155,7 @@ avoid the use of extra variables and the corresponding assertions. Let's explain this with a real test from the test suite. -```javascript +```js 'use strict'; require('../common'); const assert = require('assert'); @@ -189,7 +189,7 @@ This test could be greatly simplified by using `common.mustCall` like this: -```javascript +```js 'use strict'; const common = require('../common'); const http = require('http'); @@ -216,7 +216,7 @@ action to be taken after a given number of completed tasks (for instance, shutting down an HTTP server after a specific number of requests). -```javascript +```js const Countdown = require('../common/countdown'); const countdown = new Countdown(2, () => { @@ -237,7 +237,7 @@ possible to disable it with `common.disableCrashOnUnhandledRejection()` if needed. -```javascript +```js const common = require('../common'); const assert = require('assert'); const fs = require('fs').promises; @@ -257,7 +257,7 @@ `internal/*` modules, add the `--expose-internals` flag. A test that would require `internal/freelist` could start like this: -```javascript +```js 'use strict'; // Flags: --expose-internals @@ -356,7 +356,7 @@ `test` followed by the name of unit being tested. For example, the code below would be placed in `test/cctest/test_env.cc`: -```c++ +```cpp #include "gtest/gtest.h" #include "node_test_fixture.h" #include "env.h" @@ -432,11 +432,11 @@ Nightly coverage reports for the Node.js master branch are available at . -[ASCII]: http://man7.org/linux/man-pages/man7/ascii.7.html +[ASCII]: https://man7.org/linux/man-pages/man7/ascii.7.html [Google Test]: https://github.com/google/googletest +[Test Coverage section of the Building guide]: https://github.com/nodejs/node/blob/master/BUILDING.md#running-coverage [`common` module]: https://github.com/nodejs/node/blob/master/test/common/README.md [all maintained branches]: https://github.com/nodejs/lts +[directory structure overview]: https://github.com/nodejs/node/blob/master/test/README.md#test-directories [node.green]: https://node.green/ [test fixture]: https://github.com/google/googletest/blob/master/googletest/docs/Primer.md#test-fixtures-using-the-same-data-configuration-for-multiple-tests -[Test Coverage section of the Building guide]: https://github.com/nodejs/node/blob/master/BUILDING.md#running-coverage -[directory structure overview]: https://github.com/nodejs/node/blob/master/test/README.md#test-directories diff -Nru nodejs-mozilla-12.18.1/doc/node.1 nodejs-mozilla-12.22.12/doc/node.1 --- nodejs-mozilla-12.18.1/doc/node.1 2020-06-17 01:25:40.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/node.1 2022-04-05 07:17:04.000000000 +0000 @@ -78,6 +78,10 @@ .It Fl -completion-bash Print source-able bash completion script for Node.js. . +.It Fl -conditions Ar string +Use custom conditional exports conditions +.Ar string +. .It Fl -cpu-prof Start the V8 CPU profiler on start up, and write the CPU profile to disk before exit. If @@ -89,6 +93,9 @@ The directory where the CPU profiles generated by .Fl -cpu-prof will be placed. +The default value is controlled by the +.Fl -diagnostic-dir . +command line option. . .It Fl -cpu-prof-interval The sampling interval in microseconds for the CPU profiles generated by @@ -100,6 +107,17 @@ File name of the V8 CPU profile generated with .Fl -cpu-prof . +.It Fl -diagnostic-dir +Set the directory for all diagnostic output files. +Default is current working directory. +Set the directory to which all diagnostic output files will be written to. +Defaults to current working directory. +. +Affects the default output directory of: +.Fl -cpu-prof-dir . +.Fl -heap-prof-dir . +.Fl -redirect-warnings . +. .It Fl -disable-proto Ns = Ns Ar mode Disable the `Object.prototype.__proto__` property. If .Ar mode @@ -178,6 +196,9 @@ The directory where the heap profiles generated by .Fl -heap-prof will be placed. +The default value is controlled by the +.Fl -diagnostic-dir . +command line option. . .It Fl -heap-prof-interval The average sampling interval in bytes for the heap profiles generated by @@ -300,10 +321,14 @@ .Sy diagnostic reports in a compact format, single-line JSON. . -.It Fl -report-directory +.It Fl -report-dir Fl -report-directory Location at which the .Sy diagnostic report will be generated. +The `file` name may be an absolute path. If it is not, the default directory it will +be written to is controlled by the +.Fl -diagnostic-dir . +command line option. . .It Fl -report-filename Name of the file to which the diff -Nru nodejs-mozilla-12.18.1/doc/template.html nodejs-mozilla-12.22.12/doc/template.html --- nodejs-mozilla-12.18.1/doc/template.html 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/doc/template.html 2022-04-05 07:17:03.000000000 +0000 @@ -3,10 +3,11 @@ + __SECTION__ | Node.js __VERSION__ Documentation - + @@ -26,7 +27,7 @@
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              - - - diff -Nru nodejs-mozilla-12.18.1/glossary.md nodejs-mozilla-12.22.12/glossary.md --- nodejs-mozilla-12.18.1/glossary.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/glossary.md 2022-04-05 07:17:03.000000000 +0000 @@ -12,5 +12,5 @@ * godbolt: [Compiler Explorer](https://godbolt.org/) run compilers interactively from your web browser and interact with the assembly. Was created by and is primarily administrated by Matt Godbolt. -* primordials: Pristine built-ins that are not effected by prototype pollution +* primordials: Pristine built-ins that are not affected by prototype pollution and tampering with built-ins. diff -Nru nodejs-mozilla-12.18.1/GOVERNANCE.md nodejs-mozilla-12.22.12/GOVERNANCE.md --- nodejs-mozilla-12.18.1/GOVERNANCE.md 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/GOVERNANCE.md 2022-04-05 07:16:59.000000000 +0000 @@ -2,16 +2,30 @@ +* [Triagers](#triagers) * [Collaborators](#collaborators) - * [Collaborator Activities](#collaborator-activities) -* [Technical Steering Committee](#technical-steering-committee) - * [TSC Meetings](#tsc-meetings) -* [Collaborator Nominations](#collaborator-nominations) + * [Collaborator activities](#collaborator-activities) +* [Technical steering committee](#technical-steering-committee) + * [TSC meetings](#tsc-meetings) +* [Collaborator nominations](#collaborator-nominations) * [Onboarding](#onboarding) -* [Consensus Seeking Process](#consensus-seeking-process) +* [Consensus seeking process](#consensus-seeking-process) +## Triagers + +Triagers assess newly-opened issues in the nodejs/node and nodejs/help +repositories. There is no GitHub team for triagers at the moment. + +Triagers have: +* ability to label issues +* ability to comment, close, and reopen issues + +See: + +* [A guide for triagers](./doc/guides/contributing/issues.md#triaging-a-bug-report) + ## Collaborators Node.js Core Collaborators maintain the [nodejs/node][] GitHub repository. @@ -41,7 +55,7 @@ * [List of Collaborators](./README.md#current-project-team-members) * [A guide for Collaborators](./doc/guides/collaborator-guide.md) -### Collaborator Activities +### Collaborator activities * Helping users and novice contributors * Contributing code and documentation changes that improve the project @@ -70,7 +84,7 @@ The [TSC Charter][] governs the operations of the TSC. All changes to the Charter need approval by the OpenJS Foundation Board of Directors. -### TSC Meetings +### TSC meetings The TSC meets in a voice conference call. Each year, the TSC elects a chair to run the meetings. The TSC streams its meetings for public viewing on YouTube or @@ -104,7 +118,7 @@ and no TSC opposition. * If there is an extended impasse, a TSC member may make a motion for a vote. -## Collaborator Nominations +## Collaborator nominations Existing Collaborators can nominate someone to become a Collaborator. Nominees should have significant and valuable contributions across the Node.js @@ -151,7 +165,7 @@ [the onboarding guide](./onboarding.md) for details of the onboarding process. -## Consensus Seeking Process +## Consensus seeking process The TSC follows a [Consensus Seeking][] decision-making model per the [TSC Charter][]. diff -Nru nodejs-mozilla-12.18.1/lib/assert.js nodejs-mozilla-12.22.12/lib/assert.js --- nodejs-mozilla-12.18.1/lib/assert.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/assert.js 2022-04-05 07:17:03.000000000 +0000 @@ -49,6 +49,7 @@ const { NativeModule } = require('internal/bootstrap/loaders'); const errorCache = new Map(); +const CallTracker = require('internal/assert/calltracker'); let isDeepEqual; let isDeepStrictEqual; @@ -900,6 +901,8 @@ internalMatch(string, regexp, message, doesNotMatch); }; +assert.CallTracker = CallTracker; + // Expose a strict only variant of assert function strict(...args) { innerOk(strict, args.length, ...args); diff -Nru nodejs-mozilla-12.18.1/lib/async_hooks.js nodejs-mozilla-12.22.12/lib/async_hooks.js --- nodejs-mozilla-12.18.1/lib/async_hooks.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/async_hooks.js 2022-04-05 07:17:03.000000000 +0000 @@ -2,6 +2,8 @@ const { NumberIsSafeInteger, + ObjectDefineProperties, + ObjectIs, ReflectApply, Symbol, } = primordials; @@ -9,6 +11,7 @@ const { ERR_ASYNC_CALLBACK, ERR_ASYNC_TYPE, + ERR_INVALID_ARG_TYPE, ERR_INVALID_ASYNC_ID } = require('internal/errors').codes; const { validateString } = require('internal/validators'); @@ -208,6 +211,32 @@ triggerAsyncId() { return this[trigger_async_id_symbol]; } + + bind(fn) { + if (typeof fn !== 'function') + throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn); + const ret = this.runInAsyncScope.bind(this, fn); + ObjectDefineProperties(ret, { + 'length': { + configurable: true, + enumerable: false, + value: fn.length, + writable: false, + }, + 'asyncResource': { + configurable: true, + enumerable: true, + value: this, + writable: true, + } + }); + return ret; + } + + static bind(fn, type) { + type = type || fn.name; + return (new AsyncResource(type || 'bound-anonymous-fn')).bind(fn); + } } const storageList = []; @@ -221,6 +250,7 @@ } }); +const defaultAlsResourceOpts = { requireManualDestroy: true }; class AsyncLocalStorage { constructor() { this.kResourceStore = Symbol('kResourceStore'); @@ -238,6 +268,14 @@ } } + _enable() { + if (!this.enabled) { + this.enabled = true; + storageList.push(this); + storageHook.enable(); + } + } + // Propagate the context from a parent resource to a child one _propagate(resource, triggerResource) { const store = triggerResource[this.kResourceStore]; @@ -247,18 +285,21 @@ } enterWith(store) { - if (!this.enabled) { - this.enabled = true; - storageList.push(this); - storageHook.enable(); - } + this._enable(); const resource = executionAsyncResource(); resource[this.kResourceStore] = store; } run(store, callback, ...args) { - const resource = new AsyncResource('AsyncLocalStorage'); - return resource.runInAsyncScope(() => { + // Avoid creation of an AsyncResource if store is already active + if (ObjectIs(store, this.getStore())) { + return callback(...args); + } + const resource = new AsyncResource('AsyncLocalStorage', + defaultAlsResourceOpts); + // Calling emitDestroy before runInAsyncScope avoids a try/finally + // It is ok because emitDestroy only schedules calling the hook + return resource.emitDestroy().runInAsyncScope(() => { this.enterWith(store); return callback(...args); }); @@ -268,17 +309,17 @@ if (!this.enabled) { return callback(...args); } - this.enabled = false; + this.disable(); try { return callback(...args); } finally { - this.enabled = true; + this._enable(); } } getStore() { - const resource = executionAsyncResource(); if (this.enabled) { + const resource = executionAsyncResource(); return resource[this.kResourceStore]; } } diff -Nru nodejs-mozilla-12.18.1/lib/buffer.js nodejs-mozilla-12.22.12/lib/buffer.js --- nodejs-mozilla-12.18.1/lib/buffer.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/buffer.js 2022-04-05 07:17:03.000000000 +0000 @@ -39,6 +39,7 @@ ObjectSetPrototypeOf, SymbolSpecies, SymbolToPrimitive, + Uint8Array, Uint8ArrayPrototype, } = primordials; @@ -59,13 +60,11 @@ zeroFill: bindingZeroFill } = internalBinding('buffer'); const { - arraybuffer_untransferable_private_symbol, getOwnNonIndexProperties, propertyFilter: { ALL_PROPERTIES, ONLY_ENUMERABLE }, - setHiddenValue, } = internalBinding('util'); const { customInspectSymbol, @@ -83,7 +82,6 @@ } = require('internal/util/inspect'); const { encodings } = internalBinding('string_decoder'); - const { codes: { ERR_BUFFER_OUT_OF_BOUNDS, @@ -104,6 +102,7 @@ const { FastBuffer, + markAsUntransferable, addBufferPrototypeMethods } = require('internal/buffer'); @@ -156,7 +155,7 @@ function createPool() { poolSize = Buffer.poolSize; allocPool = createUnsafeBuffer(poolSize).buffer; - setHiddenValue(allocPool, arraybuffer_untransferable_private_symbol, true); + markAsUntransferable(allocPool); poolOffset = 0; } createPool(); @@ -402,7 +401,7 @@ return createUnsafeBuffer(length); } -ObjectSetPrototypeOf(SlowBuffer.prototype, Uint8Array.prototype); +ObjectSetPrototypeOf(SlowBuffer.prototype, Uint8ArrayPrototype); ObjectSetPrototypeOf(SlowBuffer, Uint8Array); function allocate(size) { @@ -544,7 +543,6 @@ Buffer[kIsEncodingSymbol] = Buffer.isEncoding; Buffer.concat = function concat(list, length) { - let i; if (!ArrayIsArray(list)) { throw new ERR_INVALID_ARG_TYPE('list', 'Array', list); } @@ -554,7 +552,7 @@ if (length === undefined) { length = 0; - for (i = 0; i < list.length; i++) { + for (let i = 0; i < list.length; i++) { if (list[i].length) { length += list[i].length; } @@ -565,7 +563,7 @@ const buffer = Buffer.allocUnsafe(length); let pos = 0; - for (i = 0; i < list.length; i++) { + for (let i = 0; i < list.length; i++) { const buf = list[i]; if (!isUint8Array(buf)) { // TODO(BridgeAR): This should not be of type ERR_INVALID_ARG_TYPE. diff -Nru nodejs-mozilla-12.18.1/lib/child_process.js nodejs-mozilla-12.22.12/lib/child_process.js --- nodejs-mozilla-12.18.1/lib/child_process.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/child_process.js 2022-04-05 07:17:03.000000000 +0000 @@ -37,7 +37,12 @@ getSystemErrorName } = require('internal/util'); const { isArrayBufferView } = require('internal/util/types'); -const debug = require('internal/util/debuglog').debuglog('child_process'); +let debug = require('internal/util/debuglog').debuglog( + 'child_process', + (fn) => { + debug = fn; + } +); const { Buffer } = require('buffer'); const { Pipe, constants: PipeConstants } = internalBinding('pipe_wrap'); const { diff -Nru nodejs-mozilla-12.18.1/lib/crypto.js nodejs-mozilla-12.22.12/lib/crypto.js --- nodejs-mozilla-12.18.1/lib/crypto.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/crypto.js 2022-04-05 07:17:03.000000000 +0000 @@ -44,11 +44,16 @@ const pendingDeprecation = getOptionValue('--pending-deprecation'); const { fipsMode } = internalBinding('config'); const fipsForced = getOptionValue('--force-fips'); -const { getFipsCrypto, setFipsCrypto } = internalBinding('crypto'); +const { + getFipsCrypto, + setFipsCrypto, + timingSafeEqual, +} = internalBinding('crypto'); const { randomBytes, randomFill, - randomFillSync + randomFillSync, + randomInt } = require('internal/crypto/random'); const { pbkdf2, @@ -101,7 +106,6 @@ getHashes, setDefaultEncoding, setEngine, - timingSafeEqual } = require('internal/crypto/util'); const Certificate = require('internal/crypto/certificate'); @@ -181,6 +185,7 @@ randomBytes, randomFill, randomFillSync, + randomInt, scrypt, scryptSync, sign: signOneShot, diff -Nru nodejs-mozilla-12.18.1/lib/dgram.js nodejs-mozilla-12.22.12/lib/dgram.js --- nodejs-mozilla-12.18.1/lib/dgram.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/dgram.js 2022-04-05 07:17:03.000000000 +0000 @@ -55,7 +55,7 @@ } = require('internal/validators'); const { Buffer } = require('buffer'); const { deprecate } = require('internal/util'); -const { isUint8Array } = require('internal/util/types'); +const { isArrayBufferView } = require('internal/util/types'); const EventEmitter = require('events'); const { defaultTriggerAsyncIdScope, @@ -456,15 +456,19 @@ function sliceBuffer(buffer, offset, length) { if (typeof buffer === 'string') { buffer = Buffer.from(buffer); - } else if (!isUint8Array(buffer)) { + } else if (!isArrayBufferView(buffer)) { throw new ERR_INVALID_ARG_TYPE('buffer', - ['Buffer', 'Uint8Array', 'string'], buffer); + ['Buffer', + 'TypedArray', + 'DataView', + 'string'], + buffer); } offset = offset >>> 0; length = length >>> 0; - return buffer.slice(offset, offset + length); + return Buffer.from(buffer.buffer, buffer.byteOffset + offset, length); } @@ -475,10 +479,10 @@ const buf = list[i]; if (typeof buf === 'string') newlist[i] = Buffer.from(buf); - else if (!isUint8Array(buf)) + else if (!isArrayBufferView(buf)) return null; else - newlist[i] = buf; + newlist[i] = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength); } return newlist; @@ -583,16 +587,23 @@ if (!ArrayIsArray(buffer)) { if (typeof buffer === 'string') { list = [ Buffer.from(buffer) ]; - } else if (!isUint8Array(buffer)) { + } else if (!isArrayBufferView(buffer)) { throw new ERR_INVALID_ARG_TYPE('buffer', - ['Buffer', 'Uint8Array', 'string'], + ['Buffer', + 'TypedArray', + 'DataView', + 'string'], buffer); } else { list = [ buffer ]; } } else if (!(list = fixBufferList(buffer))) { throw new ERR_INVALID_ARG_TYPE('buffer list arguments', - ['Buffer', 'string'], buffer); + ['Buffer', + 'TypedArray', + 'DataView', + 'string'], + buffer); } if (!connected) diff -Nru nodejs-mozilla-12.18.1/lib/dns.js nodejs-mozilla-12.22.12/lib/dns.js --- nodejs-mozilla-12.18.1/lib/dns.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/dns.js 2022-04-05 07:17:03.000000000 +0000 @@ -261,9 +261,8 @@ if (typeof resolver === 'function') { return resolver.call(this, hostname, callback); - } else { - throw new ERR_INVALID_OPT_VALUE('rrtype', rrtype); } + throw new ERR_INVALID_OPT_VALUE('rrtype', rrtype); } function defaultResolverSetServers(servers) { diff -Nru nodejs-mozilla-12.18.1/lib/domain.js nodejs-mozilla-12.22.12/lib/domain.js --- nodejs-mozilla-12.18.1/lib/domain.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/domain.js 2022-04-05 07:17:03.000000000 +0000 @@ -42,6 +42,7 @@ ERR_UNHANDLED_ERROR } = require('internal/errors').codes; const { createHook } = require('async_hooks'); +const { useDomainTrampoline } = require('internal/async_hooks'); // TODO(addaleax): Use a non-internal solution for this. const kWeak = Symbol('kWeak'); @@ -145,7 +146,7 @@ // another one. The stack is each entered domain. const stack = []; exports._stack = stack; -internalBinding('domain').enable(topLevelDomainCallback); +useDomainTrampoline(topLevelDomainCallback); function updateExceptionCapture() { if (stack.every((domain) => domain.listenerCount('error') === 0)) { diff -Nru nodejs-mozilla-12.18.1/lib/events.js nodejs-mozilla-12.22.12/lib/events.js --- nodejs-mozilla-12.18.1/lib/events.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/events.js 2022-04-05 07:17:03.000000000 +0000 @@ -22,7 +22,6 @@ 'use strict'; const { - Array, Boolean, Error, MathMin, @@ -322,7 +321,7 @@ } } else { const len = handler.length; - const listeners = arrayClone(handler, len); + const listeners = arrayClone(handler); for (let i = 0; i < len; ++i) { const result = ReflectApply(listeners[i], this, args); @@ -449,8 +448,6 @@ // Emits a 'removeListener' event if and only if the listener was removed. EventEmitter.prototype.removeListener = function removeListener(type, listener) { - let originalListener; - checkListener(listener); const events = this._events; @@ -474,7 +471,6 @@ for (let i = list.length - 1; i >= 0; i--) { if (list[i] === listener || list[i].listener === listener) { - originalListener = list[i].listener; position = i; break; } @@ -495,7 +491,7 @@ events[type] = list[0]; if (events.removeListener !== undefined) - this.emit('removeListener', type, originalListener || listener); + this.emit('removeListener', type, listener); } return this; @@ -563,7 +559,7 @@ return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? - unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); + unwrapListeners(evlistener) : arrayClone(evlistener); } EventEmitter.prototype.listeners = function listeners(type) { @@ -577,9 +573,8 @@ EventEmitter.listenerCount = function(emitter, type) { if (typeof emitter.listenerCount === 'function') { return emitter.listenerCount(type); - } else { - return listenerCount.call(emitter, type); } + return listenerCount.call(emitter, type); }; EventEmitter.prototype.listenerCount = listenerCount; @@ -603,24 +598,35 @@ return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; -function arrayClone(arr, n) { - const copy = new Array(n); - for (let i = 0; i < n; ++i) - copy[i] = arr[i]; - return copy; +function arrayClone(arr) { + // At least since V8 8.3, this implementation is faster than the previous + // which always used a simple for-loop + switch (arr.length) { + case 2: return [arr[0], arr[1]]; + case 3: return [arr[0], arr[1], arr[2]]; + case 4: return [arr[0], arr[1], arr[2], arr[3]]; + case 5: return [arr[0], arr[1], arr[2], arr[3], arr[4]]; + case 6: return [arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]]; + } + return arr.slice(); } function unwrapListeners(arr) { - const ret = new Array(arr.length); + const ret = arrayClone(arr); for (let i = 0; i < ret.length; ++i) { - ret[i] = arr[i].listener || arr[i]; + const orig = ret[i].listener; + if (typeof orig === 'function') + ret[i] = orig; } return ret; } function once(emitter, name) { return new Promise((resolve, reject) => { - if (typeof emitter.addEventListener === 'function') { + if ( + typeof emitter.addEventListener === 'function' && + typeof emitter.on !== 'function' + ) { // EventTarget does not have `error` event semantics like Node // EventEmitters, we do not listen to `error` events here. emitter.addEventListener( diff -Nru nodejs-mozilla-12.18.1/lib/fs.js nodejs-mozilla-12.22.12/lib/fs.js --- nodejs-mozilla-12.18.1/lib/fs.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/fs.js 2022-04-05 07:17:03.000000000 +0000 @@ -27,6 +27,7 @@ const { Map, MathMax, + Number, NumberIsSafeInteger, ObjectCreate, ObjectDefineProperties, @@ -174,7 +175,10 @@ function isFileType(stats, fileType) { // Use stats array directly to avoid creating an fs.Stats instance just for // our internal use. - return (stats[1/* mode */] & S_IFMT) === fileType; + let mode = stats[1]; + if (typeof mode === 'bigint') + mode = Number(mode); + return (mode & S_IFMT) === fileType; } function access(path, mode, callback) { @@ -584,6 +588,9 @@ return binding.readBuffers(fd, buffers, position, req); } +ObjectDefineProperty(readv, internalUtil.customPromisifyArgs, + { value: ['bytesRead', 'buffers'], enumerable: false }); + function readvSync(fd, buffers, position) { validateInt32(fd, 'fd', 0); validateBufferArray(buffers); @@ -1296,6 +1303,28 @@ handleErrorFromBinding(ctx); } +function lutimes(path, atime, mtime, callback) { + callback = makeCallback(callback); + path = getValidatedPath(path); + + const req = new FSReqCallback(); + req.oncomplete = callback; + binding.lutimes(pathModule.toNamespacedPath(path), + toUnixTimestamp(atime), + toUnixTimestamp(mtime), + req); +} + +function lutimesSync(path, atime, mtime) { + path = getValidatedPath(path); + const ctx = { path }; + binding.lutimes(pathModule.toNamespacedPath(path), + toUnixTimestamp(atime), + toUnixTimestamp(mtime), + undefined, ctx); + handleErrorFromBinding(ctx); +} + function writeAll(fd, isUserFd, buffer, offset, length, callback) { // write(fd, buffer, offset, length, position, callback) fs.write(fd, buffer, offset, length, null, (writeErr, written) => { @@ -1458,6 +1487,8 @@ stat = new watchers.StatWatcher(options.bigint); stat.start(filename, options.persistent, options.interval); statWatchers.set(filename, stat); + } else { + stat[watchers.kFSStatWatcherAddOrCleanRef]('add'); } stat.addListener('change', listener); @@ -1472,9 +1503,13 @@ if (stat === undefined) return; if (typeof listener === 'function') { + const beforeListenerCount = stat.listenerCount('change'); stat.removeListener('change', listener); + if (stat.listenerCount('change') < beforeListenerCount) + stat[watchers.kFSStatWatcherAddOrCleanRef]('clean'); } else { stat.removeAllListeners('change'); + stat[watchers.kFSStatWatcherAddOrCleanRef]('cleanAll'); } if (stat.listenerCount('change') === 0) { @@ -1508,9 +1543,8 @@ const asBuffer = Buffer.from(result); if (options.encoding === 'buffer') { return asBuffer; - } else { - return asBuffer.toString(options.encoding); } + return asBuffer.toString(options.encoding); } // Finds the next portion of a (partial) path, up to the next path delimiter @@ -1532,10 +1566,7 @@ const emptyObj = ObjectCreate(null); function realpathSync(p, options) { - if (!options) - options = emptyObj; - else - options = getOptions(options, emptyObj); + options = getOptions(options, emptyObj); p = toPathIfFileURL(p); if (typeof p !== 'string') { p += ''; @@ -1567,7 +1598,7 @@ pos = current.length; // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { + if (isWindows) { const ctx = { path: base }; binding.lstat(pathModule.toNamespacedPath(base), false, undefined, ctx); handleErrorFromBinding(ctx); @@ -1611,7 +1642,7 @@ const baseLong = pathModule.toNamespacedPath(base); const ctx = { path: base }; - const stats = binding.lstat(baseLong, false, undefined, ctx); + const stats = binding.lstat(baseLong, true, undefined, ctx); handleErrorFromBinding(ctx); if (!isFileType(stats, S_IFLNK)) { @@ -1744,7 +1775,7 @@ return process.nextTick(LOOP); } - return fs.lstat(base, gotStat); + return fs.lstat(base, { bigint: true }, gotStat); } function gotStat(err, stats) { @@ -1765,7 +1796,7 @@ const ino = stats.ino.toString(32); id = `${dev}:${ino}`; if (seenLinks[id]) { - return gotTarget(null, seenLinks[id], base); + return gotTarget(null, seenLinks[id]); } } fs.stat(base, (err) => { @@ -1778,7 +1809,7 @@ }); } - function gotTarget(err, target, base) { + function gotTarget(err, target) { if (err) return callback(err); gotResolvedLink(pathModule.resolve(previous, target)); @@ -1932,6 +1963,8 @@ linkSync, lstat, lstatSync, + lutimes, + lutimesSync, mkdir, mkdirSync, mkdtemp, diff -Nru nodejs-mozilla-12.18.1/lib/_http_agent.js nodejs-mozilla-12.22.12/lib/_http_agent.js --- nodejs-mozilla-12.18.1/lib/_http_agent.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_http_agent.js 2022-04-05 07:17:03.000000000 +0000 @@ -22,6 +22,7 @@ 'use strict'; const { + NumberIsNaN, ObjectKeys, ObjectSetPrototypeOf, ObjectValues, @@ -30,9 +31,20 @@ const net = require('net'); const EventEmitter = require('events'); -const debug = require('internal/util/debuglog').debuglog('http'); +let debug = require('internal/util/debuglog').debuglog('http', (fn) => { + debug = fn; +}); const { async_id_symbol } = require('internal/async_hooks').symbols; +const { + codes: { + ERR_OUT_OF_RANGE, + ERR_INVALID_OPT_VALUE, + }, +} = require('internal/errors'); +const { validateNumber } = require('internal/validators'); + const kOnKeylog = Symbol('onkeylog'); +const kRequestOptions = Symbol('requestOptions'); // New Agent code. // The largest departure from the previous implementation is that @@ -79,6 +91,23 @@ this.keepAlive = this.options.keepAlive || false; this.maxSockets = this.options.maxSockets || Agent.defaultMaxSockets; this.maxFreeSockets = this.options.maxFreeSockets || 256; + this.maxTotalSockets = this.options.maxTotalSockets; + this.totalSocketCount = 0; + + if (this.maxTotalSockets !== undefined) { + validateNumber(this.maxTotalSockets, 'maxTotalSockets'); + if (this.maxTotalSockets <= 0 || NumberIsNaN(this.maxTotalSockets)) + throw new ERR_OUT_OF_RANGE('maxTotalSockets', '> 0', + this.maxTotalSockets); + } else { + this.maxTotalSockets = Infinity; + } + + this.scheduling = this.options.scheduling || 'fifo'; + + if (this.scheduling !== 'fifo' && this.scheduling !== 'lifo') { + throw new ERR_INVALID_OPT_VALUE('scheduling', this.scheduling); + } this.on('free', (socket, options) => { const name = this.getName(options); @@ -111,7 +140,9 @@ if (this.sockets[name]) count += this.sockets[name].length; - if (count > this.maxSockets || freeLen >= this.maxFreeSockets) { + if (this.totalSocketCount > this.maxTotalSockets || + count > this.maxSockets || + freeLen >= this.maxFreeSockets) { socket.destroy(); } else if (this.keepSocketAlive(socket)) { freeSockets = freeSockets || []; @@ -214,7 +245,9 @@ while (freeSockets.length && freeSockets[0].destroyed) { freeSockets.shift(); } - socket = freeSockets.shift(); + socket = this.scheduling === 'fifo' ? + freeSockets.shift() : + freeSockets.pop(); if (!freeSockets.length) delete this.freeSockets[name]; } @@ -234,7 +267,9 @@ this.reuseSocket(socket, req); setRequestSocket(this, req, socket); this.sockets[name].push(socket); - } else if (sockLen < this.maxSockets) { + this.totalSocketCount++; + } else if (sockLen < this.maxSockets && + this.totalSocketCount < this.maxTotalSockets) { debug('call onSocket', sockLen, freeLen); // If we are under maxSockets create a new one. this.createSocket(req, options, handleSocketCreation(this, req, true)); @@ -244,6 +279,10 @@ if (!this.requests[name]) { this.requests[name] = []; } + + // Used to create sockets for pending requests from different origin + req[kRequestOptions] = options; + this.requests[name].push(req); } }; @@ -273,7 +312,8 @@ this.sockets[name] = []; } this.sockets[name].push(s); - debug('sockets', name, this.sockets[name].length); + this.totalSocketCount++; + debug('sockets', name, this.sockets[name].length, this.totalSocketCount); installListeners(this, s, options); cb(null, s); }; @@ -374,17 +414,38 @@ // Don't leak if (sockets[name].length === 0) delete sockets[name]; + this.totalSocketCount--; } } } + let req; if (this.requests[name] && this.requests[name].length) { debug('removeSocket, have a request, make a socket'); - const req = this.requests[name][0]; + req = this.requests[name][0]; + } else { + // TODO(rickyes): this logic will not be FIFO across origins. + // There might be older requests in a different origin, but + // if the origin which releases the socket has pending requests + // that will be prioritized. + for (const prop of ObjectKeys(this.requests)) { + // Check whether this specific origin is already at maxSockets + if (this.sockets[prop] && this.sockets[prop].length) break; + debug('removeSocket, have a request with different origin,' + + ' make a socket'); + req = this.requests[prop][0]; + options = req[kRequestOptions]; + break; + } + } + + if (req && options) { + req[kRequestOptions] = undefined; // If we have pending requests and a socket gets closed make a new one const socketCreationHandler = handleSocketCreation(this, req, false); this.createSocket(req, options, socketCreationHandler); } + }; Agent.prototype.keepSocketAlive = function keepSocketAlive(socket) { diff -Nru nodejs-mozilla-12.18.1/lib/_http_client.js nodejs-mozilla-12.22.12/lib/_http_client.js --- nodejs-mozilla-12.18.1/lib/_http_client.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_http_client.js 2022-04-05 07:17:03.000000000 +0000 @@ -141,9 +141,8 @@ if (this.agent && this.agent.protocol) expectedProtocol = this.agent.protocol; - let path; if (options.path) { - path = String(options.path); + const path = String(options.path); if (INVALID_PATH_REGEX.test(path)) throw new ERR_UNESCAPED_CHARACTERS('Request path'); } @@ -213,6 +212,8 @@ this.parser = null; this.maxHeadersCount = null; this.reusedSocket = false; + this.host = host; + this.protocol = protocol; let called = false; @@ -431,8 +432,12 @@ const parser = socket.parser; if (parser) { - parser.finish(); - freeParser(parser, req, socket); + // Use process.nextTick() on v12.x since 'error' events might be + // emitted synchronously from e.g. a failed write() call on the socket. + process.nextTick(() => { + parser.finish(); + freeParser(parser, req, socket); + }); } // Ensure that no further data will come out of the socket @@ -674,7 +679,8 @@ parser.initialize(HTTPParser.RESPONSE, new HTTPClientAsyncResource('HTTPINCOMINGMESSAGE', req), req.insecureHTTPParser === undefined ? - isLenient() : req.insecureHTTPParser); + isLenient() : req.insecureHTTPParser, + 0); parser.socket = socket; parser.outgoing = req; req.parser = parser; diff -Nru nodejs-mozilla-12.18.1/lib/_http_common.js nodejs-mozilla-12.22.12/lib/_http_common.js --- nodejs-mozilla-12.18.1/lib/_http_common.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_http_common.js 2022-04-05 07:17:03.000000000 +0000 @@ -42,7 +42,9 @@ readStop } = incoming; -const debug = require('internal/util/debuglog').debuglog('http'); +let debug = require('internal/util/debuglog').debuglog('http', (fn) => { + debug = fn; +}); const kIncomingMessage = Symbol('IncomingMessage'); const kOnHeaders = HTTPParser.kOnHeaders | 0; @@ -50,6 +52,7 @@ const kOnBody = HTTPParser.kOnBody | 0; const kOnMessageComplete = HTTPParser.kOnMessageComplete | 0; const kOnExecute = HTTPParser.kOnExecute | 0; +const kOnTimeout = HTTPParser.kOnTimeout | 0; const MAX_HEADER_PAIRS = 2000; @@ -163,7 +166,6 @@ cleanParser(parser); - parser.onIncoming = null; parser[kOnHeaders] = parserOnHeaders; parser[kOnHeadersComplete] = parserOnHeadersComplete; parser[kOnBody] = parserOnBody; @@ -233,7 +235,9 @@ parser.outgoing = null; parser.maxHeaderPairs = MAX_HEADER_PAIRS; parser[kOnExecute] = null; + parser[kOnTimeout] = null; parser._consumed = false; + parser.onIncoming = null; } function prepareError(err, parser, rawPacket) { diff -Nru nodejs-mozilla-12.18.1/lib/_http_incoming.js nodejs-mozilla-12.22.12/lib/_http_incoming.js --- nodejs-mozilla-12.18.1/lib/_http_incoming.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_http_incoming.js 2022-04-05 07:17:03.000000000 +0000 @@ -114,6 +114,7 @@ IncomingMessage.prototype.destroy = function destroy(error) { if (this.socket) this.socket.destroy(error); + return this; }; @@ -239,9 +240,8 @@ } if (lowercased) { return '\u0000' + field; - } else { - return matchKnownFields(field.toLowerCase(), true); } + return matchKnownFields(field.toLowerCase(), true); } // Add the given (field, value) pair to the message // diff -Nru nodejs-mozilla-12.18.1/lib/_http_outgoing.js nodejs-mozilla-12.22.12/lib/_http_outgoing.js --- nodejs-mozilla-12.18.1/lib/_http_outgoing.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_http_outgoing.js 2022-04-05 07:17:03.000000000 +0000 @@ -28,6 +28,7 @@ ObjectKeys, ObjectPrototypeHasOwnProperty, ObjectSetPrototypeOf, + MathFloor, Symbol, } = primordials; @@ -60,6 +61,7 @@ hideStackFrames } = require('internal/errors'); const { validateString } = require('internal/validators'); +const { isUint8Array } = require('internal/util/types'); const HIGH_WATER_MARK = getDefaultHighWaterMark(); const { CRLF, debug } = common; @@ -96,6 +98,7 @@ this._last = false; this.chunkedEncoding = false; this.shouldKeepAlive = true; + this._defaultKeepAlive = true; this.useChunkedEncodingByDefault = true; this.sendDate = false; this._removedConnection = false; @@ -116,6 +119,8 @@ this._header = null; this[kOutHeaders] = null; + this._keepAliveTimeout = 0; + this._onPendingData = noopPendingOutput; } ObjectSetPrototypeOf(OutgoingMessage.prototype, Stream.prototype); @@ -401,6 +406,10 @@ (state.contLen || this.useChunkedEncodingByDefault || this.agent); if (shouldSendKeepAlive) { header += 'Connection: keep-alive\r\n'; + if (this._keepAliveTimeout && this._defaultKeepAlive) { + const timeoutSeconds = MathFloor(this._keepAliveTimeout / 1000); + header += `Keep-Alive: timeout=${timeoutSeconds}\r\n`; + } } else { this._last = true; header += 'Connection: close\r\n'; @@ -494,6 +503,9 @@ case 'trailer': state[field] = true; break; + case 'keep-alive': + self._defaultKeepAlive = false; + break; } } @@ -649,9 +661,9 @@ return true; } - if (!fromEnd && typeof chunk !== 'string' && !(chunk instanceof Buffer)) { + if (!fromEnd && typeof chunk !== 'string' && !isUint8Array(chunk)) { throw new ERR_INVALID_ARG_TYPE('first argument', - ['string', 'Buffer'], chunk); + ['string', 'Buffer', 'Uint8Array'], chunk); } if (!fromEnd && msg.connection && !msg.connection.writableCorked) { @@ -742,7 +754,8 @@ if (chunk) { if (typeof chunk !== 'string' && !(chunk instanceof Buffer)) { - throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); + throw new ERR_INVALID_ARG_TYPE( + 'chunk', ['string', 'Buffer', 'Uint8Array'], chunk); } if (!this._header) { if (typeof chunk === 'string') diff -Nru nodejs-mozilla-12.18.1/lib/_http_server.js nodejs-mozilla-12.22.12/lib/_http_server.js --- nodejs-mozilla-12.18.1/lib/_http_server.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_http_server.js 2022-04-05 07:17:03.000000000 +0000 @@ -48,7 +48,6 @@ const { kOutHeaders, kNeedDrain, - nowDate, emitStatistics } = require('internal/http'); const { @@ -143,6 +142,7 @@ }; const kOnExecute = HTTPParser.kOnExecute | 0; +const kOnTimeout = HTTPParser.kOnTimeout | 0; class HTTPServerAsyncResource { constructor(type, socket) { @@ -348,7 +348,7 @@ // Similar option to this. Too lazy to write my own docs. // http://www.squid-cache.org/Doc/config/half_closed_clients/ - // http://wiki.squid-cache.org/SquidFaq/InnerWorkings#What_is_a_half-closed_filedescriptor.3F + // https://wiki.squid-cache.org/SquidFaq/InnerWorkings#What_is_a_half-closed_filedescriptor.3F this.httpAllowHalfOpen = false; this.on('connection', connectionListener); @@ -422,11 +422,9 @@ new HTTPServerAsyncResource('HTTPINCOMINGMESSAGE', socket), server.insecureHTTPParser === undefined ? isLenient() : server.insecureHTTPParser, + server.headersTimeout || 0, ); parser.socket = socket; - - // We are starting to wait for our headers. - parser.parsingHeadersStart = nowDate(); socket.parser = parser; // Propagate headers limit from server instance to parser @@ -478,6 +476,9 @@ parser[kOnExecute] = onParserExecute.bind(undefined, server, socket, parser, state); + parser[kOnTimeout] = + onParserTimeout.bind(undefined, server, socket); + socket._paused = false; } @@ -565,26 +566,20 @@ } function onParserExecute(server, socket, parser, state, ret) { + // When underlying `net.Socket` instance is consumed - no + // `data` events are emitted, and thus `socket.setTimeout` fires the + // callback even if the data is constantly flowing into the socket. + // See, https://github.com/nodejs/node/commit/ec2822adaad76b126b5cccdeaa1addf2376c9aa6 socket._unrefTimer(); - const start = parser.parsingHeadersStart; debug('SERVER socketOnParserExecute %d', ret); + onParserExecuteCommon(server, socket, parser, state, ret, undefined); +} - // If we have not parsed the headers, destroy the socket - // after server.headersTimeout to protect from DoS attacks. - // start === 0 means that we have parsed headers, while - // server.headersTimeout === 0 means user disabled this check. - if ( - start !== 0 && server.headersTimeout && - nowDate() - start > server.headersTimeout - ) { - const serverTimeout = server.emit('timeout', socket); - - if (!serverTimeout) - socket.destroy(); - return; - } +function onParserTimeout(server, socket) { + const serverTimeout = server.emit('timeout', socket); - onParserExecuteCommon(server, socket, parser, state, ret, undefined); + if (!serverTimeout) + socket.destroy(); } const noop = () => {}; @@ -602,7 +597,7 @@ this.on('error', noop); if (!this.server.emit('clientError', e, this)) { - if (this.writable) { + if (this.writable && this.bytesWritten === 0) { const response = e.code === 'HPE_HEADER_OVERFLOW' ? requestHeaderFieldsTooLargeResponse : badRequestResponse; this.write(response); @@ -721,13 +716,6 @@ function parserOnIncoming(server, socket, state, req, keepAlive) { resetSocketTimeout(server, socket, state); - if (server.keepAliveTimeout > 0) { - req.on('end', resetHeadersTimeoutOnReqEnd); - } - - // Set to zero to communicate that we have finished parsing. - socket.parser.parsingHeadersStart = 0; - if (req.upgrade) { req.upgrade = req.method === 'CONNECT' || server.listenerCount('upgrade') > 0; @@ -752,6 +740,7 @@ } const res = new server[kServerResponse](req); + res._keepAliveTimeout = server.keepAliveTimeout; res._onPendingData = updateOutgoingData.bind(undefined, socket, state); res.shouldKeepAlive = keepAlive; @@ -852,17 +841,6 @@ }; } -function resetHeadersTimeoutOnReqEnd() { - debug('resetHeadersTimeoutOnReqEnd'); - - const parser = this.socket.parser; - // Parser can be null if the socket was destroyed - // in that case, there is nothing to do. - if (parser) { - parser.parsingHeadersStart = nowDate(); - } -} - module.exports = { STATUS_CODES, Server, diff -Nru nodejs-mozilla-12.18.1/lib/https.js nodejs-mozilla-12.22.12/lib/https.js --- nodejs-mozilla-12.18.1/lib/https.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/https.js 2022-04-05 07:17:03.000000000 +0000 @@ -37,7 +37,9 @@ kServerResponse } = require('_http_server'); const { ClientRequest } = require('_http_client'); -const debug = require('internal/util/debuglog').debuglog('https'); +let debug = require('internal/util/debuglog').debuglog('https', (fn) => { + debug = fn; +}); const { URL, urlToOptions, searchParamsSymbol } = require('internal/url'); const { IncomingMessage, ServerResponse } = require('http'); const { kIncomingMessage } = require('_http_common'); @@ -57,7 +59,7 @@ if (!opts.ALPNProtocols) { // http/1.0 is not defined as Protocol IDs in IANA - // http://www.iana.org/assignments/tls-extensiontype-values + // https://www.iana.org/assignments/tls-extensiontype-values // /tls-extensiontype-values.xhtml#alpn-protocol-ids opts.ALPNProtocols = ['http/1.1']; } diff -Nru nodejs-mozilla-12.18.1/lib/inspector.js nodejs-mozilla-12.22.12/lib/inspector.js --- nodejs-mozilla-12.18.1/lib/inspector.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/inspector.js 2022-04-05 07:17:03.000000000 +0000 @@ -8,6 +8,7 @@ } = primordials; const { + ERR_INSPECTOR_ALREADY_ACTIVATED, ERR_INSPECTOR_ALREADY_CONNECTED, ERR_INSPECTOR_CLOSED, ERR_INSPECTOR_COMMAND, @@ -33,6 +34,7 @@ MainThreadConnection, open, url, + isEnabled, waitForDebugger } = internalBinding('inspector'); @@ -131,6 +133,9 @@ } function inspectorOpen(port, host, wait) { + if (isEnabled()) { + throw new ERR_INSPECTOR_ALREADY_ACTIVATED(); + } open(port, host); if (wait) waitForDebugger(); diff -Nru nodejs-mozilla-12.18.1/lib/internal/assert/assertion_error.js nodejs-mozilla-12.22.12/lib/internal/assert/assertion_error.js --- nodejs-mozilla-12.18.1/lib/internal/assert/assertion_error.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/assert/assertion_error.js 2022-04-05 07:17:03.000000000 +0000 @@ -312,6 +312,7 @@ message, operator, stackStartFn, + details, // Compatibility with older versions. stackStartFunction } = options; @@ -426,9 +427,22 @@ configurable: true }); this.code = 'ERR_ASSERTION'; - this.actual = actual; - this.expected = expected; - this.operator = operator; + if (details) { + this.actual = undefined; + this.expected = undefined; + this.operator = undefined; + for (let i = 0; i < details.length; i++) { + this['message ' + i] = details[i].message; + this['actual ' + i] = details[i].actual; + this['expected ' + i] = details[i].expected; + this['operator ' + i] = details[i].operator; + this['stack trace ' + i] = details[i].stack; + } + } else { + this.actual = actual; + this.expected = expected; + this.operator = operator; + } // eslint-disable-next-line no-restricted-syntax Error.captureStackTrace(this, stackStartFn || stackStartFunction); // Create error message including the error code in the name. diff -Nru nodejs-mozilla-12.18.1/lib/internal/assert/calltracker.js nodejs-mozilla-12.22.12/lib/internal/assert/calltracker.js --- nodejs-mozilla-12.18.1/lib/internal/assert/calltracker.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/assert/calltracker.js 2022-04-05 07:17:03.000000000 +0000 @@ -0,0 +1,93 @@ +'use strict'; + +const { + Error, + SafeSet, +} = primordials; + +const { + codes: { + ERR_UNAVAILABLE_DURING_EXIT, + }, +} = require('internal/errors'); +const AssertionError = require('internal/assert/assertion_error'); +const { + validateUint32, +} = require('internal/validators'); + +const noop = () => {}; + +class CallTracker { + + #callChecks = new SafeSet() + + calls(fn, exact = 1) { + if (process._exiting) + throw new ERR_UNAVAILABLE_DURING_EXIT(); + if (typeof fn === 'number') { + exact = fn; + fn = noop; + } else if (fn === undefined) { + fn = noop; + } + + validateUint32(exact, 'exact', true); + + const context = { + exact, + actual: 0, + // eslint-disable-next-line no-restricted-syntax + stackTrace: new Error(), + name: fn.name || 'calls' + }; + const callChecks = this.#callChecks; + callChecks.add(context); + + return function() { + context.actual++; + if (context.actual === context.exact) { + // Once function has reached its call count remove it from + // callChecks set to prevent memory leaks. + callChecks.delete(context); + } + // If function has been called more than expected times, add back into + // callchecks. + if (context.actual === context.exact + 1) { + callChecks.add(context); + } + return fn.apply(this, arguments); + }; + } + + report() { + const errors = []; + for (const context of this.#callChecks) { + // If functions have not been called exact times + if (context.actual !== context.exact) { + const message = `Expected the ${context.name} function to be ` + + `executed ${context.exact} time(s) but was ` + + `executed ${context.actual} time(s).`; + errors.push({ + message, + actual: context.actual, + expected: context.exact, + operator: context.name, + stack: context.stackTrace + }); + } + } + return errors; + } + + verify() { + const errors = this.report(); + if (errors.length > 0) { + throw new AssertionError({ + message: 'Function(s) were not called the expected number of times', + details: errors, + }); + } + } +} + +module.exports = CallTracker; diff -Nru nodejs-mozilla-12.18.1/lib/internal/async_hooks.js nodejs-mozilla-12.22.12/lib/internal/async_hooks.js --- nodejs-mozilla-12.18.1/lib/internal/async_hooks.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/async_hooks.js 2022-04-05 07:17:03.000000000 +0000 @@ -1,13 +1,16 @@ 'use strict'; const { + ArrayPrototypeUnshift, Error, FunctionPrototypeBind, ObjectDefineProperty, + ReflectApply, Symbol, } = primordials; const async_wrap = internalBinding('async_wrap'); +const { setCallbackTrampoline } = async_wrap; /* async_hook_fields is a Uint32Array wrapping the uint32_t array of * Environment::AsyncHooks::fields_[]. Each index tracks the number of active * hooks for each type. @@ -36,17 +39,18 @@ const { async_hook_fields, async_id_fields, - execution_async_resources, - owner_symbol + execution_async_resources } = async_wrap; -// Store the pair executionAsyncId and triggerAsyncId in a std::stack on -// Environment::AsyncHooks::async_ids_stack_ tracks the resource responsible for -// the current execution stack. This is unwound as each resource exits. In the -// case of a fatal exception this stack is emptied after calling each hook's -// after() callback. +// Store the pair executionAsyncId and triggerAsyncId in a AliasedFloat64Array +// in Environment::AsyncHooks::async_ids_stack_ which tracks the resource +// responsible for the current execution stack. This is unwound as each resource +// exits. In the case of a fatal exception this stack is emptied after calling +// each hook's after() callback. const { pushAsyncContext: pushAsyncContext_, - popAsyncContext: popAsyncContext_ + popAsyncContext: popAsyncContext_, + executionAsyncResource: executionAsyncResource_, + clearAsyncIdStack, } = async_wrap; // For performance reasons, only track Promises when a hook is enabled. const { enablePromiseHook, disablePromiseHook } = async_wrap; @@ -78,13 +82,15 @@ const { registerDestroyHook } = async_wrap; const { enqueueMicrotask } = internalBinding('task_queue'); +const { resource_symbol, owner_symbol } = internalBinding('symbols'); // Each constant tracks how many callbacks there are for any given step of // async execution. These are tracked so if the user didn't include callbacks // for a given step, that step can bail out early. const { kInit, kBefore, kAfter, kDestroy, kTotals, kPromiseResolve, kCheck, kExecutionAsyncId, kAsyncIdCounter, kTriggerAsyncId, - kDefaultTriggerAsyncId, kStackLength } = async_wrap.constants; + kDefaultTriggerAsyncId, kStackLength, kUsesExecutionAsyncResource +} = async_wrap.constants; // Used in AsyncHook and AsyncResource. const async_id_symbol = Symbol('asyncId'); @@ -100,13 +106,48 @@ const emitPromiseResolveNative = emitHookFactory(promise_resolve_symbol, 'emitPromiseResolveNative'); +let domain_cb; +function useDomainTrampoline(fn) { + domain_cb = fn; +} + +function callbackTrampoline(asyncId, resource, cb, ...args) { + const index = async_hook_fields[kStackLength] - 1; + execution_async_resources[index] = resource; + + if (asyncId !== 0 && hasHooks(kBefore)) + emitBeforeNative(asyncId); + + let result; + if (asyncId === 0 && typeof domain_cb === 'function') { + ArrayPrototypeUnshift(args, cb); + result = ReflectApply(domain_cb, this, args); + } else { + result = ReflectApply(cb, this, args); + } + + if (asyncId !== 0 && hasHooks(kAfter)) + emitAfterNative(asyncId); + + execution_async_resources.pop(); + return result; +} + +setCallbackTrampoline(callbackTrampoline); + const topLevelResource = {}; function executionAsyncResource() { + // Indicate to the native layer that this function is likely to be used, + // in which case it will inform JS about the current async resource via + // the trampoline above. + async_hook_fields[kUsesExecutionAsyncResource] = 1; + const index = async_hook_fields[kStackLength] - 1; if (index === -1) return topLevelResource; - const resource = execution_async_resources[index]; - return resource; + const resource = execution_async_resources[index] || + executionAsyncResource_(index); + return lookupPublicResource(resource); } // Used to fatally abort the process if a callback throws. @@ -127,6 +168,15 @@ process.exit(1); } +function lookupPublicResource(resource) { + if (typeof resource !== 'object' || resource === null) return resource; + // TODO(addaleax): Merge this with owner_symbol and use it across all + // AsyncWrap instances. + const publicResource = resource[resource_symbol]; + if (publicResource !== undefined) + return publicResource; + return resource; +} // Emit From Native // @@ -135,6 +185,7 @@ // emitInitScript. function emitInitNative(asyncId, type, triggerAsyncId, resource) { active_hooks.call_depth += 1; + resource = lookupPublicResource(resource); // Use a single try/catch for all hooks to avoid setting up one per iteration. try { // Using var here instead of let because "for (var ...)" is faster than let. @@ -375,16 +426,6 @@ } -// Keep in sync with Environment::AsyncHooks::clear_async_id_stack -// in src/env-inl.h. -function clearAsyncIdStack() { - async_id_fields[kExecutionAsyncId] = 0; - async_id_fields[kTriggerAsyncId] = 0; - async_hook_fields[kStackLength] = 0; - execution_async_resources.splice(0, execution_async_resources.length); -} - - function hasAsyncIdStack() { return hasHooks(kStackLength); } @@ -393,11 +434,11 @@ // This is the equivalent of the native push_async_ids() call. function pushAsyncContext(asyncId, triggerAsyncId, resource) { const offset = async_hook_fields[kStackLength]; + execution_async_resources[offset] = resource; if (offset * 2 >= async_wrap.async_ids_stack.length) - return pushAsyncContext_(asyncId, triggerAsyncId, resource); + return pushAsyncContext_(asyncId, triggerAsyncId); async_wrap.async_ids_stack[offset * 2] = async_id_fields[kExecutionAsyncId]; async_wrap.async_ids_stack[offset * 2 + 1] = async_id_fields[kTriggerAsyncId]; - execution_async_resources[offset] = resource; async_hook_fields[kStackLength]++; async_id_fields[kExecutionAsyncId] = asyncId; async_id_fields[kTriggerAsyncId] = triggerAsyncId; @@ -465,6 +506,7 @@ emitAfter: emitAfterScript, emitDestroy: emitDestroyScript, registerDestroyHook, + useDomainTrampoline, nativeHooks: { init: emitInitNative, before: emitBeforeNative, diff -Nru nodejs-mozilla-12.18.1/lib/internal/bootstrap/node.js nodejs-mozilla-12.22.12/lib/internal/bootstrap/node.js --- nodejs-mozilla-12.18.1/lib/internal/bootstrap/node.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/bootstrap/node.js 2022-04-05 07:17:03.000000000 +0000 @@ -59,6 +59,7 @@ // process.config is serialized config.gypi process.config = JSONParse(internalBinding('native_module').config); +require('internal/worker/js_transferable').setup(); // Bootstrappers for all threads, including worker threads and main thread const perThreadSetup = require('internal/process/per_thread'); diff -Nru nodejs-mozilla-12.18.1/lib/internal/bootstrap/pre_execution.js nodejs-mozilla-12.22.12/lib/internal/bootstrap/pre_execution.js --- nodejs-mozilla-12.18.1/lib/internal/bootstrap/pre_execution.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/bootstrap/pre_execution.js 2022-04-05 07:17:03.000000000 +0000 @@ -6,7 +6,10 @@ SafeWeakMap, } = primordials; -const { getOptionValue } = require('internal/options'); +const { + getOptionValue, + shouldNotRegisterESMLoader +} = require('internal/options'); const { Buffer } = require('buffer'); const { ERR_MANIFEST_ASSERT_INTEGRITY } = require('internal/errors').codes; const assert = require('internal/assert'); @@ -89,7 +92,9 @@ if (expandArgv1 && process.argv[1] && !process.argv[1].startsWith('-')) { // Expand process.argv[1] into a full path. const path = require('path'); - process.argv[1] = path.resolve(process.argv[1]); + try { + process.argv[1] = path.resolve(process.argv[1]); + } catch {} } // TODO(joyeecheung): most of these should be deprecated and removed, @@ -408,6 +413,8 @@ // Create this WeakMap in js-land because V8 has no C++ API for WeakMap. internalBinding('module_wrap').callbackMap = new SafeWeakMap(); + if (shouldNotRegisterESMLoader) return; + const { setImportModuleDynamicallyCallback, setInitializeImportMetaObjectCallback diff -Nru nodejs-mozilla-12.18.1/lib/internal/buffer.js nodejs-mozilla-12.22.12/lib/internal/buffer.js --- nodejs-mozilla-12.18.1/lib/internal/buffer.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/buffer.js 2022-04-05 07:17:03.000000000 +0000 @@ -5,6 +5,7 @@ Float32Array, MathFloor, Number, + Uint8Array, } = primordials; const { @@ -27,6 +28,10 @@ ucs2Write, utf8Write } = internalBinding('buffer'); +const { + untransferable_object_private_symbol, + setHiddenValue, +} = internalBinding('util'); // Temporary buffers to convert numbers. const float32Array = new Float32Array(1); @@ -947,10 +952,14 @@ function addBufferPrototypeMethods(proto) { proto.readBigUInt64LE = readBigUInt64LE, proto.readBigUInt64BE = readBigUInt64BE, + proto.readBigUint64LE = readBigUInt64LE, + proto.readBigUint64BE = readBigUInt64BE, proto.readBigInt64LE = readBigInt64LE, proto.readBigInt64BE = readBigInt64BE, proto.writeBigUInt64LE = writeBigUInt64LE, proto.writeBigUInt64BE = writeBigUInt64BE, + proto.writeBigUint64LE = writeBigUInt64LE, + proto.writeBigUint64BE = writeBigUInt64BE, proto.writeBigInt64LE = writeBigInt64LE, proto.writeBigInt64BE = writeBigInt64BE, @@ -961,6 +970,13 @@ proto.readUIntBE = readUIntBE; proto.readUInt32BE = readUInt32BE; proto.readUInt16BE = readUInt16BE; + proto.readUintLE = readUIntLE; + proto.readUint32LE = readUInt32LE; + proto.readUint16LE = readUInt16LE; + proto.readUint8 = readUInt8; + proto.readUintBE = readUIntBE; + proto.readUint32BE = readUInt32BE; + proto.readUint16BE = readUInt16BE; proto.readIntLE = readIntLE; proto.readInt32LE = readInt32LE; proto.readInt16LE = readInt16LE; @@ -976,6 +992,13 @@ proto.writeUIntBE = writeUIntBE; proto.writeUInt32BE = writeUInt32BE; proto.writeUInt16BE = writeUInt16BE; + proto.writeUintLE = writeUIntLE; + proto.writeUint32LE = writeUInt32LE; + proto.writeUint16LE = writeUInt16LE; + proto.writeUint8 = writeUInt8; + proto.writeUintBE = writeUIntBE; + proto.writeUint32BE = writeUInt32BE; + proto.writeUint16BE = writeUInt16BE; proto.writeIntLE = writeIntLE; proto.writeInt32LE = writeInt32LE; proto.writeInt16LE = writeInt16LE; @@ -1007,7 +1030,16 @@ proto.utf8Write = utf8Write; } +// This would better be placed in internal/worker/io.js, but that doesn't work +// because Buffer needs this and that would introduce a cyclic dependency. +function markAsUntransferable(obj) { + if ((typeof obj !== 'object' && typeof obj !== 'function') || obj === null) + return; // This object is a primitive and therefore already untransferable. + setHiddenValue(obj, untransferable_object_private_symbol, true); +} + module.exports = { FastBuffer, - addBufferPrototypeMethods + addBufferPrototypeMethods, + markAsUntransferable, }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/child_process/serialization.js nodejs-mozilla-12.22.12/lib/internal/child_process/serialization.js --- nodejs-mozilla-12.18.1/lib/internal/child_process/serialization.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/child_process/serialization.js 2022-04-05 07:17:03.000000000 +0000 @@ -10,6 +10,7 @@ const v8 = require('v8'); const { isArrayBufferView } = require('internal/util/types'); const assert = require('internal/assert'); +const { streamBaseState, kLastWriteWasAsync } = internalBinding('stream_wrap'); const kMessageBuffer = Symbol('kMessageBuffer'); const kJSONBuffer = Symbol('kJSONBuffer'); @@ -80,10 +81,16 @@ const serializedMessage = ser.releaseBuffer(); const sizeBuffer = Buffer.allocUnsafe(4); sizeBuffer.writeUInt32BE(serializedMessage.length); - return channel.writeBuffer(req, Buffer.concat([ + + const buffer = Buffer.concat([ sizeBuffer, - serializedMessage - ]), handle); + serializedMessage, + ]); + const result = channel.writeBuffer(req, buffer, handle); + // Mirror what stream_base_commons.js does for Buffer retention. + if (streamBaseState[kLastWriteWasAsync]) + req.buffer = buffer; + return result; }, }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/child_process.js nodejs-mozilla-12.22.12/lib/internal/child_process.js --- nodejs-mozilla-12.18.1/lib/internal/child_process.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/child_process.js 2022-04-05 07:17:03.000000000 +0000 @@ -5,6 +5,7 @@ ObjectDefineProperty, ObjectSetPrototypeOf, Symbol, + Uint8Array, } = primordials; const { @@ -908,13 +909,13 @@ if (typeof stdio === 'string') { stdio = stdioStringToArray(stdio); } else if (!ArrayIsArray(stdio)) { - throw new ERR_INVALID_OPT_VALUE('stdio', inspect(stdio)); + throw new ERR_INVALID_OPT_VALUE('stdio', stdio); } // At least 3 stdio will be created // Don't concat() a new Array() because it would be sparse, and // stdio.reduce() would skip the sparse elements of stdio. - // See http://stackoverflow.com/a/5501711/3561 + // See https://stackoverflow.com/a/5501711/3561 while (stdio.length < 3) stdio.push(undefined); // Translate stdio into C++-readable form @@ -993,7 +994,7 @@ } else { // Cleanup cleanup(); - throw new ERR_INVALID_OPT_VALUE('stdio', inspect(stdio)); + throw new ERR_INVALID_OPT_VALUE('stdio', stdio); } return acc; diff -Nru nodejs-mozilla-12.18.1/lib/internal/console/constructor.js nodejs-mozilla-12.22.12/lib/internal/console/constructor.js --- nodejs-mozilla-12.18.1/lib/internal/console/constructor.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/console/constructor.js 2022-04-05 07:17:03.000000000 +0000 @@ -9,6 +9,7 @@ Boolean, Error, Map, + ObjectCreate, ObjectDefineProperties, ObjectDefineProperty, ObjectKeys, @@ -17,6 +18,7 @@ ReflectOwnKeys, Symbol, SymbolHasInstance, + SymbolToStringTag, WeakMap, } = primordials; @@ -40,13 +42,19 @@ const { isTypedArray, isSet, isMap, isSetIterator, isMapIterator, } = require('internal/util/types'); +const { + CHAR_LOWERCASE_B, + CHAR_LOWERCASE_E, + CHAR_LOWERCASE_N, + CHAR_UPPERCASE_C, +} = require('internal/constants'); const kCounts = Symbol('counts'); const kTraceConsoleCategory = 'node,node.console'; -const kTraceCount = 'C'.charCodeAt(0); -const kTraceBegin = 'b'.charCodeAt(0); -const kTraceEnd = 'e'.charCodeAt(0); -const kTraceInstant = 'n'.charCodeAt(0); +const kTraceCount = CHAR_UPPERCASE_C; +const kTraceBegin = CHAR_LOWERCASE_B; +const kTraceEnd = CHAR_LOWERCASE_E; +const kTraceInstant = CHAR_LOWERCASE_N; const kMaxGroupIndentation = 1000; @@ -131,6 +139,9 @@ // the prototype so that users extending the Console can override them // from the prototype chain of the subclass. this[key] = this[key].bind(this); + ObjectDefineProperty(this[key], 'name', { + value: key + }); } this[kBindStreamsEager](stdout, stderr); @@ -150,68 +161,162 @@ } }); -// Eager version for the Console constructor -Console.prototype[kBindStreamsEager] = function(stdout, stderr) { - ObjectDefineProperties(this, { - '_stdout': { ...consolePropAttributes, value: stdout }, - '_stderr': { ...consolePropAttributes, value: stderr } - }); -}; +const kColorInspectOptions = { colors: true }; +const kNoColorInspectOptions = {}; -// Lazily load the stdout and stderr from an object so we don't -// create the stdio streams when they are not even accessed -Console.prototype[kBindStreamsLazy] = function(object) { - let stdout; - let stderr; - ObjectDefineProperties(this, { - '_stdout': { - enumerable: false, - configurable: true, - get() { - if (!stdout) stdout = object.stdout; - return stdout; - }, - set(value) { stdout = value; } - }, - '_stderr': { - enumerable: false, - configurable: true, - get() { - if (!stderr) { stderr = object.stderr; } - return stderr; - }, - set(value) { stderr = value; } +ObjectDefineProperties(Console.prototype, { + [kBindStreamsEager]: { + ...consolePropAttributes, + // Eager version for the Console constructor + value: function(stdout, stderr) { + ObjectDefineProperties(this, { + '_stdout': { ...consolePropAttributes, value: stdout }, + '_stderr': { ...consolePropAttributes, value: stderr } + }); + } + }, + [kBindStreamsLazy]: { + ...consolePropAttributes, + // Lazily load the stdout and stderr from an object so we don't + // create the stdio streams when they are not even accessed + value: function(object) { + let stdout; + let stderr; + ObjectDefineProperties(this, { + '_stdout': { + enumerable: false, + configurable: true, + get() { + if (!stdout) stdout = object.stdout; + return stdout; + }, + set(value) { stdout = value; } + }, + '_stderr': { + enumerable: false, + configurable: true, + get() { + if (!stderr) { stderr = object.stderr; } + return stderr; + }, + set(value) { stderr = value; } + } + }); } - }); -}; + }, + [kBindProperties]: { + ...consolePropAttributes, + value: function(ignoreErrors, colorMode, groupIndentation = 2) { + ObjectDefineProperties(this, { + '_stdoutErrorHandler': { + ...consolePropAttributes, + value: createWriteErrorHandler(this, kUseStdout) + }, + '_stderrErrorHandler': { + ...consolePropAttributes, + value: createWriteErrorHandler(this, kUseStderr) + }, + '_ignoreErrors': { + ...consolePropAttributes, + value: Boolean(ignoreErrors) + }, + '_times': { ...consolePropAttributes, value: new Map() }, + // Corresponds to https://console.spec.whatwg.org/#count-map + [kCounts]: { ...consolePropAttributes, value: new Map() }, + [kColorMode]: { ...consolePropAttributes, value: colorMode }, + [kIsConsole]: { ...consolePropAttributes, value: true }, + [kGroupIndent]: { ...consolePropAttributes, value: '' }, + [kGroupIndentationWidth]: { + ...consolePropAttributes, + value: groupIndentation + }, + [SymbolToStringTag]: { + writable: false, + enumerable: false, + configurable: true, + value: 'console' + } + }); + } + }, + [kWriteToConsole]: { + ...consolePropAttributes, + value: function(streamSymbol, string) { + const ignoreErrors = this._ignoreErrors; + const groupIndent = this[kGroupIndent]; + + const useStdout = streamSymbol === kUseStdout; + const stream = useStdout ? this._stdout : this._stderr; + const errorHandler = useStdout ? + this._stdoutErrorHandler : this._stderrErrorHandler; + + if (groupIndent.length !== 0) { + if (string.includes('\n')) { + string = string.replace(/\n/g, `\n${groupIndent}`); + } + string = groupIndent + string; + } + string += '\n'; -Console.prototype[kBindProperties] = function(ignoreErrors, colorMode, - groupIndentation = 2) { - ObjectDefineProperties(this, { - '_stdoutErrorHandler': { - ...consolePropAttributes, - value: createWriteErrorHandler(this, kUseStdout) - }, - '_stderrErrorHandler': { - ...consolePropAttributes, - value: createWriteErrorHandler(this, kUseStderr) - }, - '_ignoreErrors': { - ...consolePropAttributes, - value: Boolean(ignoreErrors) - }, - '_times': { ...consolePropAttributes, value: new Map() }, - // Corresponds to https://console.spec.whatwg.org/#count-map - [kCounts]: { ...consolePropAttributes, value: new Map() }, - [kColorMode]: { ...consolePropAttributes, value: colorMode }, - [kIsConsole]: { ...consolePropAttributes, value: true }, - [kGroupIndent]: { ...consolePropAttributes, value: '' }, - [kGroupIndentationWidth]: { - ...consolePropAttributes, - value: groupIndentation - }, - }); -}; + if (ignoreErrors === false) return stream.write(string); + + // There may be an error occurring synchronously (e.g. for files or TTYs + // on POSIX systems) or asynchronously (e.g. pipes on POSIX systems), so + // handle both situations. + try { + // Add and later remove a noop error handler to catch synchronous + // errors. + if (stream.listenerCount('error') === 0) + stream.once('error', noop); + + stream.write(string, errorHandler); + } catch (e) { + // Console is a debugging utility, so it swallowing errors is not + // desirable even in edge cases such as low stack space. + if (isStackOverflowError(e)) + throw e; + // Sorry, there's no proper way to pass along the error here. + } finally { + stream.removeListener('error', noop); + } + } + }, + [kGetInspectOptions]: { + ...consolePropAttributes, + value: function(stream) { + let color = this[kColorMode]; + if (color === 'auto') { + color = stream.isTTY && ( + typeof stream.getColorDepth === 'function' ? + stream.getColorDepth() > 2 : true); + } + + const options = optionsMap.get(this); + if (options) { + if (options.colors === undefined) { + options.colors = color; + } + return options; + } + + return color ? kColorInspectOptions : kNoColorInspectOptions; + } + }, + [kFormatForStdout]: { + ...consolePropAttributes, + value: function(args) { + const opts = this[kGetInspectOptions](this._stdout); + return formatWithOptions(opts, ...args); + } + }, + [kFormatForStderr]: { + ...consolePropAttributes, + value: function(args) { + const opts = this[kGetInspectOptions](this._stderr); + return formatWithOptions(opts, ...args); + } + }, +}); // Make a function that can serve as the callback passed to `stream.write()`. function createWriteErrorHandler(instance, streamSymbol) { @@ -234,76 +339,6 @@ }; } -Console.prototype[kWriteToConsole] = function(streamSymbol, string) { - const ignoreErrors = this._ignoreErrors; - const groupIndent = this[kGroupIndent]; - - const useStdout = streamSymbol === kUseStdout; - const stream = useStdout ? this._stdout : this._stderr; - const errorHandler = useStdout ? - this._stdoutErrorHandler : this._stderrErrorHandler; - - if (groupIndent.length !== 0) { - if (string.includes('\n')) { - string = string.replace(/\n/g, `\n${groupIndent}`); - } - string = groupIndent + string; - } - string += '\n'; - - if (ignoreErrors === false) return stream.write(string); - - // There may be an error occurring synchronously (e.g. for files or TTYs - // on POSIX systems) or asynchronously (e.g. pipes on POSIX systems), so - // handle both situations. - try { - // Add and later remove a noop error handler to catch synchronous errors. - if (stream.listenerCount('error') === 0) - stream.once('error', noop); - - stream.write(string, errorHandler); - } catch (e) { - // Console is a debugging utility, so it swallowing errors is not desirable - // even in edge cases such as low stack space. - if (isStackOverflowError(e)) - throw e; - // Sorry, there's no proper way to pass along the error here. - } finally { - stream.removeListener('error', noop); - } -}; - -const kColorInspectOptions = { colors: true }; -const kNoColorInspectOptions = {}; -Console.prototype[kGetInspectOptions] = function(stream) { - let color = this[kColorMode]; - if (color === 'auto') { - color = stream.isTTY && ( - typeof stream.getColorDepth === 'function' ? - stream.getColorDepth() > 2 : true); - } - - const options = optionsMap.get(this); - if (options) { - if (options.colors === undefined) { - options.colors = color; - } - return options; - } - - return color ? kColorInspectOptions : kNoColorInspectOptions; -}; - -Console.prototype[kFormatForStdout] = function(args) { - const opts = this[kGetInspectOptions](this._stdout); - return formatWithOptions(opts, ...args); -}; - -Console.prototype[kFormatForStderr] = function(args) { - const opts = this[kGetInspectOptions](this._stderr); - return formatWithOptions(opts, ...args); -}; - const consoleMethods = { log(...args) { this[kWriteToConsole](kUseStdout, this[kFormatForStdout](args)); @@ -487,7 +522,7 @@ if (setIter) tabularData = previewEntries(tabularData); - const setlike = setIter || (mapIter && !isKeyValue) || isSet(tabularData); + const setlike = setIter || mapIter || isSet(tabularData); if (setlike) { const values = []; let length = 0; @@ -498,7 +533,7 @@ return final([iterKey, valuesKey], [getIndexArray(length), values]); } - const map = {}; + const map = ObjectCreate(null); let hasPrimitives = false; const valuesKeyArray = []; const indexKeyArray = ObjectKeys(tabularData); diff -Nru nodejs-mozilla-12.18.1/lib/internal/console/global.js nodejs-mozilla-12.22.12/lib/internal/console/global.js --- nodejs-mozilla-12.18.1/lib/internal/console/global.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/console/global.js 2022-04-05 07:17:03.000000000 +0000 @@ -36,7 +36,9 @@ if (prop === 'constructor') { continue; } const desc = ReflectGetOwnPropertyDescriptor(Console.prototype, prop); if (typeof desc.value === 'function') { // fix the receiver + const name = desc.value.name; desc.value = desc.value.bind(globalConsole); + ReflectDefineProperty(desc.value, 'name', { value: name }); } ReflectDefineProperty(globalConsole, prop, desc); } diff -Nru nodejs-mozilla-12.18.1/lib/internal/constants.js nodejs-mozilla-12.22.12/lib/internal/constants.js --- nodejs-mozilla-12.18.1/lib/internal/constants.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/constants.js 2022-04-05 07:17:03.000000000 +0000 @@ -8,6 +8,10 @@ CHAR_LOWERCASE_A: 97, /* a */ CHAR_UPPERCASE_Z: 90, /* Z */ CHAR_LOWERCASE_Z: 122, /* z */ + CHAR_UPPERCASE_C: 67, /* C */ + CHAR_LOWERCASE_B: 98, /* b */ + CHAR_LOWERCASE_E: 101, /* e */ + CHAR_LOWERCASE_N: 110, /* n */ // Non-alphabetic chars. CHAR_DOT: 46, /* . */ diff -Nru nodejs-mozilla-12.18.1/lib/internal/crypto/keys.js nodejs-mozilla-12.22.12/lib/internal/crypto/keys.js --- nodejs-mozilla-12.18.1/lib/internal/crypto/keys.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/crypto/keys.js 2022-04-05 07:17:03.000000000 +0000 @@ -6,7 +6,8 @@ } = primordials; const { - KeyObject: KeyObjectHandle, + KeyObjectHandle, + createNativeKeyObjectClass, kKeyTypeSecret, kKeyTypePublic, kKeyTypePrivate, @@ -42,80 +43,97 @@ [kKeyEncodingSPKI, 'spki'], [kKeyEncodingSEC1, 'sec1']]) encodingNames[m[0]] = m[1]; -class KeyObject { - constructor(type, handle) { - if (type !== 'secret' && type !== 'public' && type !== 'private') - throw new ERR_INVALID_ARG_VALUE('type', type); - if (typeof handle !== 'object') - throw new ERR_INVALID_ARG_TYPE('handle', 'object', handle); - - this[kKeyType] = type; - - ObjectDefineProperty(this, kHandle, { - value: handle, - enumerable: false, - configurable: false, - writable: false - }); - } +// Creating the KeyObject class is a little complicated due to inheritance +// and that fact that KeyObjects should be transferrable between threads, +// which requires the KeyObject base class to be implemented in C++. +// The creation requires a callback to make sure that the NativeKeyObject +// base class cannot exist without the other KeyObject implementations. +const [ + KeyObject, + SecretKeyObject, + PublicKeyObject, + PrivateKeyObject +] = createNativeKeyObjectClass((NativeKeyObject) => { + // Publicly visible KeyObject class. + class KeyObject extends NativeKeyObject { + constructor(type, handle) { + if (type !== 'secret' && type !== 'public' && type !== 'private') + throw new ERR_INVALID_ARG_VALUE('type', type); + if (typeof handle !== 'object' || !(handle instanceof KeyObjectHandle)) + throw new ERR_INVALID_ARG_TYPE('handle', 'object', handle); + + super(handle); + + this[kKeyType] = type; + + ObjectDefineProperty(this, kHandle, { + value: handle, + enumerable: false, + configurable: false, + writable: false + }); + } - get type() { - return this[kKeyType]; + get type() { + return this[kKeyType]; + } } -} -class SecretKeyObject extends KeyObject { - constructor(handle) { - super('secret', handle); - } + class SecretKeyObject extends KeyObject { + constructor(handle) { + super('secret', handle); + } - get symmetricKeySize() { - return this[kHandle].getSymmetricKeySize(); - } + get symmetricKeySize() { + return this[kHandle].getSymmetricKeySize(); + } - export() { - return this[kHandle].export(); + export() { + return this[kHandle].export(); + } } -} -const kAsymmetricKeyType = Symbol('kAsymmetricKeyType'); + const kAsymmetricKeyType = Symbol('kAsymmetricKeyType'); -class AsymmetricKeyObject extends KeyObject { - get asymmetricKeyType() { - return this[kAsymmetricKeyType] || - (this[kAsymmetricKeyType] = this[kHandle].getAsymmetricKeyType()); + class AsymmetricKeyObject extends KeyObject { + get asymmetricKeyType() { + return this[kAsymmetricKeyType] || + (this[kAsymmetricKeyType] = this[kHandle].getAsymmetricKeyType()); + } } -} -class PublicKeyObject extends AsymmetricKeyObject { - constructor(handle) { - super('public', handle); - } + class PublicKeyObject extends AsymmetricKeyObject { + constructor(handle) { + super('public', handle); + } - export(encoding) { - const { - format, - type - } = parsePublicKeyEncoding(encoding, this.asymmetricKeyType); - return this[kHandle].export(format, type); + export(encoding) { + const { + format, + type + } = parsePublicKeyEncoding(encoding, this.asymmetricKeyType); + return this[kHandle].export(format, type); + } } -} -class PrivateKeyObject extends AsymmetricKeyObject { - constructor(handle) { - super('private', handle); - } + class PrivateKeyObject extends AsymmetricKeyObject { + constructor(handle) { + super('private', handle); + } - export(encoding) { - const { - format, - type, - cipher, - passphrase - } = parsePrivateKeyEncoding(encoding, this.asymmetricKeyType); - return this[kHandle].export(format, type, cipher, passphrase); + export(encoding) { + const { + format, + type, + cipher, + passphrase + } = parsePrivateKeyEncoding(encoding, this.asymmetricKeyType); + return this[kHandle].export(format, type, cipher, passphrase); + } } -} + + return [KeyObject, SecretKeyObject, PublicKeyObject, PrivateKeyObject]; +}); function parseKeyFormat(formatStr, defaultFormat, optionName) { if (formatStr === undefined && defaultFormat !== undefined) @@ -268,23 +286,22 @@ // Either PEM or DER using PKCS#1 or SPKI. if (!isStringOrBuffer(data)) { throw new ERR_INVALID_ARG_TYPE( - 'key', + 'key.key', ['string', 'Buffer', 'TypedArray', 'DataView', ...(ctx !== kCreatePrivate ? ['KeyObject'] : [])], - key); + data); } const isPublic = (ctx === kConsumePrivate || ctx === kCreatePrivate) ? false : undefined; return { data, ...parseKeyEncoding(key, undefined, isPublic) }; - } else { - throw new ERR_INVALID_ARG_TYPE( - 'key', - ['string', 'Buffer', 'TypedArray', 'DataView', - ...(ctx !== kCreatePrivate ? ['KeyObject'] : [])], - key - ); } + throw new ERR_INVALID_ARG_TYPE( + 'key', + ['string', 'Buffer', 'TypedArray', 'DataView', + ...(ctx !== kCreatePrivate ? ['KeyObject'] : [])], + key + ); } function preparePrivateKey(key) { @@ -301,13 +318,12 @@ if (key.type !== 'secret') throw new ERR_CRYPTO_INVALID_KEY_OBJECT_TYPE(key.type, 'secret'); return key[kHandle]; - } else { - throw new ERR_INVALID_ARG_TYPE( - 'key', - ['Buffer', 'TypedArray', 'DataView', - ...(bufferOnly ? [] : ['string', 'KeyObject'])], - key); } + throw new ERR_INVALID_ARG_TYPE( + 'key', + ['Buffer', 'TypedArray', 'DataView', + ...(bufferOnly ? [] : ['string', 'KeyObject'])], + key); } return key; } @@ -316,23 +332,23 @@ key = prepareSecretKey(key, true); if (key.byteLength === 0) throw new ERR_OUT_OF_RANGE('key.byteLength', '> 0', key.byteLength); - const handle = new KeyObjectHandle(kKeyTypeSecret); - handle.init(key); + const handle = new KeyObjectHandle(); + handle.init(kKeyTypeSecret, key); return new SecretKeyObject(handle); } function createPublicKey(key) { const { format, type, data } = prepareAsymmetricKey(key, kCreatePublic); - const handle = new KeyObjectHandle(kKeyTypePublic); - handle.init(data, format, type); + const handle = new KeyObjectHandle(); + handle.init(kKeyTypePublic, data, format, type); return new PublicKeyObject(handle); } function createPrivateKey(key) { const { format, type, data, passphrase } = prepareAsymmetricKey(key, kCreatePrivate); - const handle = new KeyObjectHandle(kKeyTypePrivate); - handle.init(data, format, type, passphrase); + const handle = new KeyObjectHandle(); + handle.init(kKeyTypePrivate, data, format, type, passphrase); return new PrivateKeyObject(handle); } diff -Nru nodejs-mozilla-12.18.1/lib/internal/crypto/random.js nodejs-mozilla-12.22.12/lib/internal/crypto/random.js --- nodejs-mozilla-12.18.1/lib/internal/crypto/random.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/crypto/random.js 2022-04-05 07:17:03.000000000 +0000 @@ -3,6 +3,7 @@ const { MathMin, NumberIsNaN, + NumberIsSafeInteger } = primordials; const { AsyncWrap, Providers } = internalBinding('async_wrap'); @@ -48,19 +49,19 @@ return size >>> 0; // Convert to uint32. } -function randomBytes(size, cb) { +function randomBytes(size, callback) { size = assertSize(size, 1, 0, Infinity); - if (cb !== undefined && typeof cb !== 'function') - throw new ERR_INVALID_CALLBACK(cb); + if (callback !== undefined && typeof callback !== 'function') + throw new ERR_INVALID_CALLBACK(callback); const buf = new FastBuffer(size); - if (!cb) return handleError(_randomBytes(buf, 0, size), buf); + if (!callback) return handleError(_randomBytes(buf, 0, size), buf); const wrap = new AsyncWrap(Providers.RANDOMBYTESREQUEST); wrap.ondone = (ex) => { // Retains buf while request is in flight. - if (ex) return cb.call(wrap, ex); - cb.call(wrap, null, buf); + if (ex) return callback.call(wrap, ex); + callback.call(wrap, null, buf); }; _randomBytes(buf, 0, size, wrap); @@ -84,7 +85,7 @@ return handleError(_randomBytes(buf, offset, size), buf); } -function randomFill(buf, offset, size, cb) { +function randomFill(buf, offset, size, callback) { if (!isArrayBufferView(buf)) { throw new ERR_INVALID_ARG_TYPE('buf', 'ArrayBufferView', buf); } @@ -92,14 +93,14 @@ const elementSize = buf.BYTES_PER_ELEMENT || 1; if (typeof offset === 'function') { - cb = offset; + callback = offset; offset = 0; size = buf.bytesLength; } else if (typeof size === 'function') { - cb = size; + callback = size; size = buf.byteLength - offset; - } else if (typeof cb !== 'function') { - throw new ERR_INVALID_CALLBACK(cb); + } else if (typeof callback !== 'function') { + throw new ERR_INVALID_CALLBACK(callback); } offset = assertOffset(offset, elementSize, buf.byteLength); @@ -112,13 +113,91 @@ const wrap = new AsyncWrap(Providers.RANDOMBYTESREQUEST); wrap.ondone = (ex) => { // Retains buf while request is in flight. - if (ex) return cb.call(wrap, ex); - cb.call(wrap, null, buf); + if (ex) return callback.call(wrap, ex); + callback.call(wrap, null, buf); }; _randomBytes(buf, offset, size, wrap); } +// Largest integer we can read from a buffer. +// e.g.: Buffer.from("ff".repeat(6), "hex").readUIntBE(0, 6); +const RAND_MAX = 0xFFFF_FFFF_FFFF; + +// Generates an integer in [min, max) range where min is inclusive and max is +// exclusive. +function randomInt(min, max, callback) { + // Detect optional min syntax + // randomInt(max) + // randomInt(max, callback) + const minNotSpecified = typeof max === 'undefined' || + typeof max === 'function'; + + if (minNotSpecified) { + callback = max; + max = min; + min = 0; + } + + const isSync = typeof callback === 'undefined'; + if (!isSync && typeof callback !== 'function') { + throw new ERR_INVALID_CALLBACK(callback); + } + if (!NumberIsSafeInteger(min)) { + throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min); + } + if (!NumberIsSafeInteger(max)) { + throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max); + } + if (max <= min) { + throw new ERR_OUT_OF_RANGE( + 'max', `greater than the value of "min" (${min})`, max + ); + } + + // First we generate a random int between [0..range) + const range = max - min; + + if (!(range <= RAND_MAX)) { + throw new ERR_OUT_OF_RANGE(`max${minNotSpecified ? '' : ' - min'}`, + `<= ${RAND_MAX}`, range); + } + + const excess = RAND_MAX % range; + const randLimit = RAND_MAX - excess; + + if (isSync) { + // Sync API + while (true) { + const x = randomBytes(6).readUIntBE(0, 6); + // If x > (maxVal - (maxVal % range)), we will get "modulo bias" + if (x > randLimit) { + // Try again + continue; + } + const n = (x % range) + min; + return n; + } + } else { + // Async API + const pickAttempt = () => { + randomBytes(6, (err, bytes) => { + if (err) return callback(err); + const x = bytes.readUIntBE(0, 6); + // If x > (maxVal - (maxVal % range)), we will get "modulo bias" + if (x > randLimit) { + // Try again + return pickAttempt(); + } + const n = (x % range) + min; + callback(null, n); + }); + }; + + pickAttempt(); + } +} + function handleError(ex, buf) { if (ex) throw ex; return buf; @@ -127,5 +206,6 @@ module.exports = { randomBytes, randomFill, - randomFillSync + randomFillSync, + randomInt }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/crypto/sig.js nodejs-mozilla-12.22.12/lib/internal/crypto/sig.js --- nodejs-mozilla-12.18.1/lib/internal/crypto/sig.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/crypto/sig.js 2022-04-05 07:17:03.000000000 +0000 @@ -70,8 +70,7 @@ return kSigEncDER; else if (dsaEncoding === 'ieee-p1363') return kSigEncP1363; - else - throw new ERR_INVALID_OPT_VALUE('dsaEncoding', dsaEncoding); + throw new ERR_INVALID_OPT_VALUE('dsaEncoding', dsaEncoding); } return kSigEncDER; @@ -82,9 +81,8 @@ if (value !== undefined) { if (value === value >> 0) { return value; - } else { - throw new ERR_INVALID_OPT_VALUE(name, value); } + throw new ERR_INVALID_OPT_VALUE(name, value); } return undefined; } diff -Nru nodejs-mozilla-12.18.1/lib/internal/crypto/util.js nodejs-mozilla-12.22.12/lib/internal/crypto/util.js --- nodejs-mozilla-12.18.1/lib/internal/crypto/util.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/crypto/util.js 2022-04-05 07:17:03.000000000 +0000 @@ -9,7 +9,6 @@ getCurves: _getCurves, getHashes: _getHashes, setEngine: _setEngine, - timingSafeEqual: _timingSafeEqual } = internalBinding('crypto'); const { @@ -20,7 +19,6 @@ hideStackFrames, codes: { ERR_CRYPTO_ENGINE_UNKNOWN, - ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH, ERR_INVALID_ARG_TYPE, } } = require('internal/errors'); @@ -76,21 +74,6 @@ throw new ERR_CRYPTO_ENGINE_UNKNOWN(id); } -function timingSafeEqual(buf1, buf2) { - if (!isArrayBufferView(buf1)) { - throw new ERR_INVALID_ARG_TYPE('buf1', - ['Buffer', 'TypedArray', 'DataView'], buf1); - } - if (!isArrayBufferView(buf2)) { - throw new ERR_INVALID_ARG_TYPE('buf2', - ['Buffer', 'TypedArray', 'DataView'], buf2); - } - if (buf1.byteLength !== buf2.byteLength) { - throw new ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH(); - } - return _timingSafeEqual(buf1, buf2); -} - const getArrayBufferView = hideStackFrames((buffer, name, encoding) => { if (typeof buffer === 'string') { if (encoding === 'buffer') @@ -116,6 +99,5 @@ kHandle, setDefaultEncoding, setEngine, - timingSafeEqual, toBuf }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/dns/promises.js nodejs-mozilla-12.22.12/lib/internal/dns/promises.js --- nodejs-mozilla-12.18.1/lib/internal/dns/promises.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/dns/promises.js 2022-04-05 07:17:03.000000000 +0000 @@ -10,6 +10,7 @@ bindDefaultResolver, Resolver: CallbackResolver, validateHints, + validateTimeout, emitInvalidHostnameWarning, } = require('internal/dns/utils'); const { codes, dnsException } = require('internal/errors'); @@ -67,11 +68,7 @@ return new Promise((resolve, reject) => { if (!hostname) { emitInvalidHostnameWarning(hostname); - if (all) - resolve([]); - else - resolve({ address: null, family: family === 6 ? 6 : 4 }); - + resolve(all ? [] : { address: null, family: family === 6 ? 6 : 4 }); return; } @@ -79,11 +76,7 @@ if (matchedFamily !== 0) { const result = { address: hostname, family: matchedFamily }; - if (all) - resolve([result]); - else - resolve(result); - + resolve(all ? [result] : result); return; } @@ -216,8 +209,9 @@ // Resolver instances correspond 1:1 to c-ares channels. class Resolver { - constructor() { - this._handle = new ChannelWrap(); + constructor(options = undefined) { + const timeout = validateTimeout(options); + this._handle = new ChannelWrap(timeout); } } diff -Nru nodejs-mozilla-12.18.1/lib/internal/dns/utils.js nodejs-mozilla-12.22.12/lib/internal/dns/utils.js --- nodejs-mozilla-12.18.1/lib/internal/dns/utils.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/dns/utils.js 2022-04-05 07:17:03.000000000 +0000 @@ -6,6 +6,7 @@ const errors = require('internal/errors'); const { isIP } = require('internal/net'); +const { validateInt32 } = require('internal/validators'); const { ChannelWrap, strerror, @@ -23,10 +24,17 @@ ERR_INVALID_OPT_VALUE } = errors.codes; +function validateTimeout(options) { + const { timeout = -1 } = { ...options }; + validateInt32(timeout, 'options.timeout', -1, 2 ** 31 - 1); + return timeout; +} + // Resolver instances correspond 1:1 to c-ares channels. class Resolver { - constructor() { - this._handle = new ChannelWrap(); + constructor(options = undefined) { + const timeout = validateTimeout(options); + this._handle = new ChannelWrap(timeout); } cancel() { @@ -162,6 +170,7 @@ getDefaultResolver, setDefaultResolver, validateHints, + validateTimeout, Resolver, emitInvalidHostnameWarning, }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/encoding.js nodejs-mozilla-12.22.12/lib/internal/encoding.js --- nodejs-mozilla-12.18.1/lib/internal/encoding.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/encoding.js 2022-04-05 07:17:03.000000000 +0000 @@ -10,6 +10,8 @@ ObjectGetOwnPropertyDescriptors, Symbol, SymbolToStringTag, + Uint32Array, + Uint8Array, } = primordials; const { diff -Nru nodejs-mozilla-12.18.1/lib/internal/error_serdes.js nodejs-mozilla-12.22.12/lib/internal/error_serdes.js --- nodejs-mozilla-12.18.1/lib/internal/error_serdes.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/error_serdes.js 2022-04-05 07:17:03.000000000 +0000 @@ -0,0 +1,136 @@ +'use strict'; + +const Buffer = require('buffer').Buffer; +const { + ArrayPrototypeForEach, + Error, + FunctionPrototypeCall, + ObjectAssign, + ObjectCreate, + ObjectDefineProperty, + ObjectGetOwnPropertyDescriptor, + ObjectGetOwnPropertyNames, + ObjectGetPrototypeOf, + ObjectKeys, + ObjectPrototypeToString, + SafeSet, + SymbolToStringTag, +} = primordials; + +const kSerializedError = 0; +const kSerializedObject = 1; +const kInspectedError = 2; + +const errors = { + Error, TypeError, RangeError, URIError, SyntaxError, ReferenceError, EvalError +}; +const errorConstructorNames = new SafeSet(ObjectKeys(errors)); + +function TryGetAllProperties(object, target = object) { + const all = ObjectCreate(null); + if (object === null) + return all; + ObjectAssign(all, + TryGetAllProperties(ObjectGetPrototypeOf(object), target)); + const keys = ObjectGetOwnPropertyNames(object); + ArrayPrototypeForEach(keys, (key) => { + let descriptor; + try { + descriptor = ObjectGetOwnPropertyDescriptor(object, key); + } catch { return; } + const getter = descriptor.get; + if (getter && key !== '__proto__') { + try { + descriptor.value = FunctionPrototypeCall(getter, target); + } catch {} + } + if ('value' in descriptor && typeof descriptor.value !== 'function') { + delete descriptor.get; + delete descriptor.set; + all[key] = descriptor; + } + }); + return all; +} + +function GetConstructors(object) { + const constructors = []; + + for (let current = object; + current !== null; + current = ObjectGetPrototypeOf(current)) { + const desc = ObjectGetOwnPropertyDescriptor(current, 'constructor'); + if (desc && desc.value) { + ObjectDefineProperty(constructors, constructors.length, { + value: desc.value, enumerable: true + }); + } + } + + return constructors; +} + +function GetName(object) { + const desc = ObjectGetOwnPropertyDescriptor(object, 'name'); + return desc && desc.value; +} + +let internalUtilInspect; +function inspect(...args) { + if (!internalUtilInspect) { + internalUtilInspect = require('internal/util/inspect'); + } + return internalUtilInspect.inspect(...args); +} + +let serialize; +function serializeError(error) { + if (!serialize) serialize = require('v8').serialize; + try { + if (typeof error === 'object' && + ObjectPrototypeToString(error) === '[object Error]') { + const constructors = GetConstructors(error); + for (let i = 0; i < constructors.length; i++) { + const name = GetName(constructors[i]); + if (errorConstructorNames.has(name)) { + const serialized = serialize({ + constructor: name, + properties: TryGetAllProperties(error) + }); + return Buffer.concat([Buffer.from([kSerializedError]), serialized]); + } + } + } + } catch {} + try { + const serialized = serialize(error); + return Buffer.concat([Buffer.from([kSerializedObject]), serialized]); + } catch {} + return Buffer.concat([Buffer.from([kInspectedError]), + Buffer.from(inspect(error), 'utf8')]); +} + +let deserialize; +function deserializeError(error) { + if (!deserialize) deserialize = require('v8').deserialize; + switch (error[0]) { + case kSerializedError: + const { constructor, properties } = deserialize(error.subarray(1)); + const ctor = errors[constructor]; + ObjectDefineProperty(properties, SymbolToStringTag, { + value: { value: 'Error', configurable: true }, + enumerable: true + }); + return ObjectCreate(ctor.prototype, properties); + case kSerializedObject: + return deserialize(error.subarray(1)); + case kInspectedError: + const buf = Buffer.from(error.buffer, + error.byteOffset + 1, + error.byteLength - 1); + return buf.toString('utf8'); + } + require('assert').fail('This should not happen'); +} + +module.exports = { serializeError, deserializeError }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/error-serdes.js nodejs-mozilla-12.22.12/lib/internal/error-serdes.js --- nodejs-mozilla-12.18.1/lib/internal/error-serdes.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/error-serdes.js 1970-01-01 00:00:00.000000000 +0000 @@ -1,131 +0,0 @@ -'use strict'; - -const Buffer = require('buffer').Buffer; -const { - ArrayPrototypeForEach, - Error, - FunctionPrototypeCall, - ObjectAssign, - ObjectCreate, - ObjectDefineProperty, - ObjectGetOwnPropertyDescriptor, - ObjectGetOwnPropertyNames, - ObjectGetPrototypeOf, - ObjectKeys, - ObjectPrototypeToString, - SafeSet, -} = primordials; - -const kSerializedError = 0; -const kSerializedObject = 1; -const kInspectedError = 2; - -const errors = { - Error, TypeError, RangeError, URIError, SyntaxError, ReferenceError, EvalError -}; -const errorConstructorNames = new SafeSet(ObjectKeys(errors)); - -function TryGetAllProperties(object, target = object) { - const all = ObjectCreate(null); - if (object === null) - return all; - ObjectAssign(all, - TryGetAllProperties(ObjectGetPrototypeOf(object), target)); - const keys = ObjectGetOwnPropertyNames(object); - ArrayPrototypeForEach(keys, (key) => { - let descriptor; - try { - descriptor = ObjectGetOwnPropertyDescriptor(object, key); - } catch { return; } - const getter = descriptor.get; - if (getter && key !== '__proto__') { - try { - descriptor.value = FunctionPrototypeCall(getter, target); - } catch {} - } - if ('value' in descriptor && typeof descriptor.value !== 'function') { - delete descriptor.get; - delete descriptor.set; - all[key] = descriptor; - } - }); - return all; -} - -function GetConstructors(object) { - const constructors = []; - - for (let current = object; - current !== null; - current = ObjectGetPrototypeOf(current)) { - const desc = ObjectGetOwnPropertyDescriptor(current, 'constructor'); - if (desc && desc.value) { - ObjectDefineProperty(constructors, constructors.length, { - value: desc.value, enumerable: true - }); - } - } - - return constructors; -} - -function GetName(object) { - const desc = ObjectGetOwnPropertyDescriptor(object, 'name'); - return desc && desc.value; -} - -let internalUtilInspect; -function inspect(...args) { - if (!internalUtilInspect) { - internalUtilInspect = require('internal/util/inspect'); - } - return internalUtilInspect.inspect(...args); -} - -let serialize; -function serializeError(error) { - if (!serialize) serialize = require('v8').serialize; - try { - if (typeof error === 'object' && - ObjectPrototypeToString(error) === '[object Error]') { - const constructors = GetConstructors(error); - for (let i = 0; i < constructors.length; i++) { - const name = GetName(constructors[i]); - if (errorConstructorNames.has(name)) { - const serialized = serialize({ - constructor: name, - properties: TryGetAllProperties(error) - }); - return Buffer.concat([Buffer.from([kSerializedError]), serialized]); - } - } - } - } catch {} - try { - const serialized = serialize(error); - return Buffer.concat([Buffer.from([kSerializedObject]), serialized]); - } catch {} - return Buffer.concat([Buffer.from([kInspectedError]), - Buffer.from(inspect(error), 'utf8')]); -} - -let deserialize; -function deserializeError(error) { - if (!deserialize) deserialize = require('v8').deserialize; - switch (error[0]) { - case kSerializedError: - const { constructor, properties } = deserialize(error.subarray(1)); - const ctor = errors[constructor]; - return ObjectCreate(ctor.prototype, properties); - case kSerializedObject: - return deserialize(error.subarray(1)); - case kInspectedError: - const buf = Buffer.from(error.buffer, - error.byteOffset + 1, - error.byteLength - 1); - return buf.toString('utf8'); - } - require('assert').fail('This should not happen'); -} - -module.exports = { serializeError, deserializeError }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/errors.js nodejs-mozilla-12.22.12/lib/internal/errors.js --- nodejs-mozilla-12.18.1/lib/internal/errors.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/errors.js 2022-04-05 07:17:03.000000000 +0000 @@ -13,20 +13,21 @@ const { ArrayIsArray, Error, + ErrorPrototypeToString, JSONStringify, Map, MathAbs, + MathMax, NumberIsInteger, ObjectDefineProperty, ObjectKeys, - StringPrototypeSlice, StringPrototypeStartsWith, Symbol, SymbolFor, WeakMap, } = primordials; -const sep = process.platform === 'win32' ? '\\' : '/'; +const isWindows = process.platform === 'win32'; const messages = new Map(); const codes = {}; @@ -49,7 +50,6 @@ const { kMaxLength } = internalBinding('buffer'); const MainContextError = Error; -const ErrorToString = Error.prototype.toString; const overrideStackTrace = new WeakMap(); const kNoOverride = Symbol('kNoOverride'); const prepareStackTrace = (globalThis, error, trace) => { @@ -70,7 +70,7 @@ // Error: Message // at function (file) // at file - const errorString = ErrorToString.call(error); + const errorString = ErrorPrototypeToString(error); if (trace.length === 0) { return errorString; } @@ -695,7 +695,11 @@ require('internal/tty').hasColors()) || defaultColors); try { - return inspect(error, { colors }); + return inspect(error, { + colors, + customInspect: false, + depth: MathMax(inspect.defaultOptions.depth, 5) + }); } catch { return originalStack; } @@ -758,7 +762,7 @@ return 'Attempt to access memory outside buffer bounds'; }, RangeError); E('ERR_BUFFER_TOO_LARGE', - `Cannot create a Buffer larger than 0x${kMaxLength.toString(16)} bytes`, + 'Cannot create a Buffer larger than %s bytes', RangeError); E('ERR_CANNOT_WATCH_SIGINT', 'Cannot watch for SIGINT signals', Error); E('ERR_CHILD_CLOSED_BEFORE_REPLY', @@ -795,8 +799,6 @@ E('ERR_CRYPTO_SCRYPT_NOT_SUPPORTED', 'Scrypt algorithm not supported', Error); // Switch to TypeError. The current implementation does not seem right. E('ERR_CRYPTO_SIGN_KEY_REQUIRED', 'No key provided to sign', Error); -E('ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH', - 'Input buffers must have the same byte length', RangeError); E('ERR_DIR_CLOSED', 'Directory handle was closed', Error); E('ERR_DIR_CONCURRENT_OPERATION', 'Cannot do synchronous work on directory handle with concurrent ' + @@ -932,6 +934,10 @@ 'Option "%s" cannot be used in combination with option "%s"', TypeError); E('ERR_INPUT_TYPE_NOT_ALLOWED', '--input-type can only be used with string ' + 'input via --eval, --print, or STDIN', Error); +E('ERR_INSPECTOR_ALREADY_ACTIVATED', + 'Inspector is already activated. Close it with inspector.close() ' + + 'before activating it again.', + Error); E('ERR_INSPECTOR_ALREADY_CONNECTED', '%s is already connected', Error); E('ERR_INSPECTOR_CLOSED', 'Session was closed', Error); E('ERR_INSPECTOR_COMMAND', 'Inspector error %d: %s', Error); @@ -1090,58 +1096,38 @@ E('ERR_INVALID_HANDLE_TYPE', 'This handle type cannot be sent', TypeError); E('ERR_INVALID_HTTP_TOKEN', '%s must be a valid HTTP token ["%s"]', TypeError); E('ERR_INVALID_IP_ADDRESS', 'Invalid IP address: %s', TypeError); -E('ERR_INVALID_MODULE_SPECIFIER', (pkgPath, subpath, base = undefined) => { - if (subpath === undefined) { - return `Invalid package name '${pkgPath}' imported from ${base}`; - } else if (base === undefined) { - assert(subpath !== '.'); - return `Package subpath '${subpath}' is not a valid module request for ` + - `the "exports" resolution of ${pkgPath}${sep}package.json`; - } else { - return `Package subpath '${subpath}' is not a valid module request for ` + - `the "exports" resolution of ${pkgPath} imported from ${base}`; - } +E('ERR_INVALID_MODULE_SPECIFIER', (request, reason, base = undefined) => { + return `Invalid module "${request}" ${reason}${base ? + ` imported from ${base}` : ''}`; }, TypeError); -E('ERR_INVALID_OPT_VALUE', (name, value) => - `The value "${String(value)}" is invalid for option "${name}"`, - TypeError, - RangeError); +E('ERR_INVALID_OPT_VALUE', (name, value, reason = '') => { + let inspected = typeof value === 'string' ? + value : lazyInternalUtilInspect().inspect(value); + if (inspected.length > 128) inspected = `${inspected.slice(0, 128)}...`; + if (reason) reason = '. ' + reason; + return `The value "${inspected}" is invalid for option "${name}"` + reason; +}, TypeError, RangeError); E('ERR_INVALID_OPT_VALUE_ENCODING', 'The value "%s" is invalid for option "encoding"', TypeError); -E('ERR_INVALID_PACKAGE_CONFIG', (path, message, hasMessage = true) => { - if (hasMessage) - return `Invalid package config ${path}${sep}package.json, ${message}`; - else - return `Invalid JSON in ${path} imported from ${message}`; +E('ERR_INVALID_PACKAGE_CONFIG', (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : + ''}${message ? `. ${message}` : ''}`; }, Error); E('ERR_INVALID_PACKAGE_TARGET', - (pkgPath, key, subpath, target, base = undefined) => { - const relError = typeof target === 'string' && + (pkgPath, key, target, isImport = false, base = undefined) => { + const relError = typeof target === 'string' && !isImport && target.length && !StringPrototypeStartsWith(target, './'); - if (key === null) { - if (subpath !== '') { - return `Invalid "exports" target ${JSONStringify(target)} defined ` + - `for '${subpath}' in the package config ${pkgPath} imported from ` + - `${base}.${relError ? '; targets must start with "./"' : ''}`; - } else { - return `Invalid "exports" main target ${target} defined in the ` + - `package config ${pkgPath} imported from ${base}${relError ? - '; targets must start with "./"' : ''}`; - } - } else if (key === '.') { + if (key === '.') { + assert(isImport === false); return `Invalid "exports" main target ${JSONStringify(target)} defined ` + - `in the package config ${pkgPath}${sep}package.json${relError ? - '; targets must start with "./"' : ''}`; - } else if (relError) { - return `Invalid "exports" target ${JSONStringify(target)} defined for '${ - StringPrototypeSlice(key, 0, -subpath.length || key.length)}' in the ` + - `package config ${pkgPath}${sep}package.json; ` + - 'targets must start with "./"'; - } else { - return `Invalid "exports" target ${JSONStringify(target)} defined for '${ - StringPrototypeSlice(key, 0, -subpath.length || key.length)}' in the ` + - `package config ${pkgPath}${sep}package.json`; - } + `in the package config ${pkgPath}package.json${base ? + ` imported from ${base}` : ''}${relError ? + '; targets must start with "./"' : ''}`; + } + return `Invalid "${isImport ? 'imports' : 'exports'}" target ${ + JSONStringify(target)} defined for '${key}' in the package config ${ + pkgPath}package.json${base ? ` imported from ${base}` : ''}${relError ? + '; targets must start with "./"' : ''}`; }, Error); E('ERR_INVALID_PERFORMANCE_MARK', 'The "%s" performance mark has not been set', Error); @@ -1290,16 +1276,16 @@ msg += ` It must be ${range}. Received ${received}`; return msg; }, RangeError); +E('ERR_PACKAGE_IMPORT_NOT_DEFINED', (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? + ` in package ${packagePath}package.json` : ''} imported from ${base}`; +}, TypeError); E('ERR_PACKAGE_PATH_NOT_EXPORTED', (pkgPath, subpath, base = undefined) => { - if (subpath === '.') { - return `No "exports" main resolved in ${pkgPath}${sep}package.json`; - } else if (base === undefined) { - return `Package subpath '${subpath}' is not defined by "exports" in ${ - pkgPath}${sep}package.json`; - } else { - return `Package subpath '${subpath}' is not defined by "exports" in ${ - pkgPath} imported from ${base}`; - } + if (subpath === '.') + return `No "exports" main defined in ${pkgPath}package.json${base ? + ` imported from ${base}` : ''}`; + return `Package subpath '${subpath}' is not defined by "exports" in ${ + pkgPath}package.json${base ? ` imported from ${base}` : ''}`; }, Error); E('ERR_REQUIRE_ESM', (filename, parentPath = null, packageJsonPath = null) => { @@ -1310,7 +1296,7 @@ filename : path.basename(filename); msg += '\nrequire() of ES modules is not supported.\nrequire() of ' + - `${filename} ${parentPath ? `from ${parentPath} ` : ''}` + + `${filename} from ${parentPath} ` + 'is an ES module file as it is a .js file whose nearest parent ' + 'package.json contains "type": "module" which defines all .js ' + 'files in that package scope as ES modules.\nInstead rename ' + @@ -1359,6 +1345,8 @@ E('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error); E('ERR_SYNTHETIC', 'JavaScript Callstack', Error); E('ERR_SYSTEM_ERROR', 'A system error occurred', SystemError); +E('ERR_TLS_CERT_ALTNAME_FORMAT', 'Invalid subject alternative name string', + SyntaxError); E('ERR_TLS_CERT_ALTNAME_INVALID', function(reason, host, cert) { this.reason = reason; this.host = host; @@ -1393,6 +1381,8 @@ E('ERR_TRANSFORM_WITH_LENGTH_0', 'Calling transform done when writableState.length != 0', Error); E('ERR_TTY_INIT_FAILED', 'TTY initialization failed', SystemError); +E('ERR_UNAVAILABLE_DURING_EXIT', 'Cannot call function in process exit ' + + 'handler', Error); E('ERR_UNCAUGHT_EXCEPTION_CAPTURE_ALREADY_SET', '`process.setupUncaughtExceptionCapture()` was called while a capture ' + 'callback was already active', @@ -1415,13 +1405,16 @@ E('ERR_UNKNOWN_MODULE_FORMAT', 'Unknown module format: %s', RangeError); E('ERR_UNKNOWN_SIGNAL', 'Unknown signal: %s', TypeError); E('ERR_UNSUPPORTED_DIR_IMPORT', "Directory import '%s' is not supported " + -'resolving ES modules, imported from %s', Error); -E('ERR_UNSUPPORTED_ESM_URL_SCHEME', 'Only file and data URLs are supported ' + - 'by the default ESM loader', Error); - -E('ERR_V8BREAKITERATOR', - 'Full ICU data not installed. See https://github.com/nodejs/node/wiki/Intl', - Error); +'resolving ES modules imported from %s', Error); +E('ERR_UNSUPPORTED_ESM_URL_SCHEME', (url) => { + let msg = 'Only file and data URLs are supported by the default ESM loader'; + if (isWindows && url.protocol.length === 2) { + msg += + '. On Windows, absolute paths must be valid file:// URLs'; + } + msg += `. Received protocol '${url.protocol}'`; + return msg; +}, Error); // This should probably be a `TypeError`. E('ERR_VALID_PERFORMANCE_ENTRY_TYPE', diff -Nru nodejs-mozilla-12.18.1/lib/internal/freeze_intrinsics.js nodejs-mozilla-12.22.12/lib/internal/freeze_intrinsics.js --- nodejs-mozilla-12.18.1/lib/internal/freeze_intrinsics.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/freeze_intrinsics.js 2022-04-05 07:17:03.000000000 +0000 @@ -384,8 +384,8 @@ defineProperty(this, prop, { value: newValue, writable: true, - enumerable: desc.enumerable, - configurable: desc.configurable + enumerable: true, + configurable: true }); } } diff -Nru nodejs-mozilla-12.18.1/lib/internal/fs/promises.js nodejs-mozilla-12.22.12/lib/internal/fs/promises.js --- nodejs-mozilla-12.18.1/lib/internal/fs/promises.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/fs/promises.js 2022-04-05 07:17:03.000000000 +0000 @@ -54,13 +54,17 @@ const kHandle = Symbol('kHandle'); const kFd = Symbol('kFd'); const { kUsePromises } = binding; +const { + JSTransferable, kDeserialize, kTransfer, kTransferList +} = require('internal/worker/js_transferable'); const getDirectoryEntriesPromise = promisify(getDirents); -class FileHandle { +class FileHandle extends JSTransferable { constructor(filehandle) { + super(); this[kHandle] = filehandle; - this[kFd] = filehandle.fd; + this[kFd] = filehandle ? filehandle.fd : -1; } getAsyncId() { @@ -131,6 +135,26 @@ this[kFd] = -1; return this[kHandle].close(); } + + [kTransfer]() { + const handle = this[kHandle]; + this[kFd] = -1; + this[kHandle] = null; + + return { + data: { handle }, + deserializeInfo: 'internal/fs/promises:FileHandle' + }; + } + + [kTransferList]() { + return [ this[kHandle] ]; + } + + [kDeserialize]({ handle }) { + this[kHandle] = handle; + this[kFd] = handle.fd; + } } function validateFileHandle(handle) { @@ -305,7 +329,8 @@ } async function truncate(path, len = 0) { - return ftruncate(await open(path, 'r+'), len); + const fd = await open(path, 'r+'); + return ftruncate(fd, len).finally(fd.close.bind(fd)); } async function ftruncate(handle, len = 0) { @@ -473,6 +498,14 @@ return binding.futimes(handle.fd, atime, mtime, kUsePromises); } +async function lutimes(path, atime, mtime) { + path = getValidatedPath(path); + return binding.lutimes(pathModule.toNamespacedPath(path), + toUnixTimestamp(atime), + toUnixTimestamp(mtime), + kUsePromises); +} + async function realpath(path, options) { options = getOptions(options, {}); path = getValidatedPath(path); @@ -540,6 +573,7 @@ lchown, chown, utimes, + lutimes, realpath, mkdtemp, writeFile, diff -Nru nodejs-mozilla-12.18.1/lib/internal/fs/streams.js nodejs-mozilla-12.22.12/lib/internal/fs/streams.js --- nodejs-mozilla-12.18.1/lib/internal/fs/streams.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/fs/streams.js 2022-04-05 07:17:03.000000000 +0000 @@ -3,8 +3,6 @@ const { Array, MathMin, - NumberIsInteger, - NumberIsSafeInteger, ObjectDefineProperty, ObjectSetPrototypeOf, Symbol, @@ -15,7 +13,7 @@ ERR_OUT_OF_RANGE, ERR_STREAM_DESTROYED } = require('internal/errors').codes; -const { validateNumber } = require('internal/validators'); +const { validateInteger } = require('internal/validators'); const fs = require('fs'); const { Buffer } = require('buffer'); const { @@ -46,19 +44,6 @@ pool.used = 0; } -// Check the `this.start` and `this.end` of stream. -function checkPosition(pos, name) { - if (!NumberIsSafeInteger(pos)) { - validateNumber(pos, name); - if (!NumberIsInteger(pos)) - throw new ERR_OUT_OF_RANGE(name, 'an integer', pos); - throw new ERR_OUT_OF_RANGE(name, '>= 0 and <= 2 ** 53 - 1', pos); - } - if (pos < 0) { - throw new ERR_OUT_OF_RANGE(name, '>= 0 and <= 2 ** 53 - 1', pos); - } -} - function roundUpToMultipleOf8(n) { return (n + 7) & ~7; // Align to 8 byte boundary. } @@ -111,7 +96,7 @@ this[kIsPerformingIO] = false; if (this.start !== undefined) { - checkPosition(this.start, 'start'); + validateInteger(this.start, 'start', 0); this.pos = this.start; } @@ -119,7 +104,7 @@ if (this.end === undefined) { this.end = Infinity; } else if (this.end !== Infinity) { - checkPosition(this.end, 'end'); + validateInteger(this.end, 'end', 0); if (this.start !== undefined && this.start > this.end) { throw new ERR_OUT_OF_RANGE( @@ -339,7 +324,7 @@ this[kIsPerformingIO] = false; if (this.start !== undefined) { - checkPosition(this.start, 'start'); + validateInteger(this.start, 'start', 0); this.pos = this.start; } @@ -467,9 +452,8 @@ if (this.closed) { process.nextTick(cb); return; - } else { - this.on('close', cb); } + this.on('close', cb); } // If we are not autoClosing, we should call diff -Nru nodejs-mozilla-12.18.1/lib/internal/fs/utils.js nodejs-mozilla-12.22.12/lib/internal/fs/utils.js --- nodejs-mozilla-12.18.1/lib/internal/fs/utils.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/fs/utils.js 2022-04-05 07:17:03.000000000 +0000 @@ -144,6 +144,31 @@ return target; } +const bufferSep = Buffer.from(pathModule.sep); + +function join(path, name) { + if ((typeof path === 'string' || isUint8Array(path)) && + name === undefined) { + return path; + } + + if (typeof path === 'string' && isUint8Array(name)) { + const pathBuffer = Buffer.from(pathModule.join(path, pathModule.sep)); + return Buffer.concat([pathBuffer, name]); + } + + if (typeof path === 'string' && typeof name === 'string') { + return pathModule.join(path, name); + } + + if (isUint8Array(path) && isUint8Array(name)) { + return Buffer.concat([path, bufferSep, name]); + } + + throw new ERR_INVALID_ARG_TYPE( + 'path', ['string', 'Buffer'], path); +} + function getDirents(path, [names, types], callback) { let i; if (typeof callback === 'function') { @@ -156,7 +181,14 @@ const name = names[i]; const idx = i; toFinish++; - lazyLoadFs().lstat(pathModule.join(path, name), (err, stats) => { + let filepath; + try { + filepath = join(path, name); + } catch (err) { + callback(err); + return; + } + lazyLoadFs().lstat(filepath, (err, stats) => { if (err) { callback(err); return; @@ -185,7 +217,14 @@ function getDirent(path, name, type, callback) { if (typeof callback === 'function') { if (type === UV_DIRENT_UNKNOWN) { - lazyLoadFs().lstat(pathModule.join(path, name), (err, stats) => { + let filepath; + try { + filepath = join(path, name); + } catch (err) { + callback(err); + return; + } + lazyLoadFs().lstat(filepath, (err, stats) => { if (err) { callback(err); return; @@ -196,7 +235,7 @@ callback(null, new Dirent(name, type)); } } else if (type === UV_DIRENT_UNKNOWN) { - const stats = lazyLoadFs().lstatSync(pathModule.join(path, name)); + const stats = lazyLoadFs().lstatSync(join(path, name)); return new DirentFromStats(name, stats); } else { return new Dirent(name, type); @@ -267,15 +306,20 @@ if (!isWindows) { // No preprocessing is needed on Unix. return path; - } else if (type === 'junction') { + } + if (type === 'junction') { // Junctions paths need to be absolute and \\?\-prefixed. // A relative target is relative to the link's parent directory. path = pathModule.resolve(linkPath, '..', path); return pathModule.toNamespacedPath(path); - } else { - // Windows symlinks don't tolerate forward slashes. - return ('' + path).replace(/\//g, '\\'); } + + if (pathModule.isAbsolute(path)) { + // If the path is absolute, use the \\?\-prefix to enable long filenames + return pathModule.toNamespacedPath(path); + } + // Windows symlinks don't tolerate forward slashes. + return ('' + path).replace(/\//g, '\\'); } // Constructor for file stats. diff -Nru nodejs-mozilla-12.18.1/lib/internal/fs/watchers.js nodejs-mozilla-12.22.12/lib/internal/fs/watchers.js --- nodejs-mozilla-12.18.1/lib/internal/fs/watchers.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/fs/watchers.js 2022-04-05 07:17:03.000000000 +0000 @@ -29,6 +29,10 @@ const kOldStatus = Symbol('kOldStatus'); const kUseBigint = Symbol('kUseBigint'); +const KFSStatWatcherRefCount = Symbol('KFSStatWatcherRefCount'); +const KFSStatWatcherMaxRefCount = Symbol('KFSStatWatcherMaxRefCount'); +const kFSStatWatcherAddOrCleanRef = Symbol('kFSStatWatcherAddOrCleanRef'); + function emitStop(self) { self.emit('stop'); } @@ -39,6 +43,8 @@ this._handle = null; this[kOldStatus] = -1; this[kUseBigint] = bigint; + this[KFSStatWatcherRefCount] = 1; + this[KFSStatWatcherMaxRefCount] = 1; } ObjectSetPrototypeOf(StatWatcher.prototype, EventEmitter.prototype); ObjectSetPrototypeOf(StatWatcher, EventEmitter); @@ -70,7 +76,7 @@ this._handle[owner_symbol] = this; this._handle.onchange = onchange; if (!persistent) - this._handle.unref(); + this.unref(); // uv_fs_poll is a little more powerful than ev_stat but we curb it for // the sake of backwards compatibility @@ -106,6 +112,41 @@ this._handle = null; }; +// Clean up or add ref counters. +StatWatcher.prototype[kFSStatWatcherAddOrCleanRef] = function(operate) { + if (operate === 'add') { + // Add a Ref + this[KFSStatWatcherRefCount]++; + this[KFSStatWatcherMaxRefCount]++; + } else if (operate === 'clean') { + // Clean up a single + this[KFSStatWatcherMaxRefCount]--; + this.unref(); + } else if (operate === 'cleanAll') { + // Clean up all + this[KFSStatWatcherMaxRefCount] = 0; + this[KFSStatWatcherRefCount] = 0; + this._handle && this._handle.unref(); + } +}; + +StatWatcher.prototype.ref = function() { + // Avoid refCount calling ref multiple times causing unref to have no effect. + if (this[KFSStatWatcherRefCount] === this[KFSStatWatcherMaxRefCount]) + return this; + if (this._handle && this[KFSStatWatcherRefCount]++ === 0) + this._handle.ref(); + return this; +}; + +StatWatcher.prototype.unref = function() { + // Avoid refCount calling unref multiple times causing ref to have no effect. + if (this[KFSStatWatcherRefCount] === 0) return this; + if (this._handle && --this[KFSStatWatcherRefCount] === 0) + this._handle.unref(); + return this; +}; + function FSWatcher() { EventEmitter.call(this); @@ -193,6 +234,16 @@ process.nextTick(emitCloseNT, this); }; +FSWatcher.prototype.ref = function() { + if (this._handle) this._handle.ref(); + return this; +}; + +FSWatcher.prototype.unref = function() { + if (this._handle) this._handle.unref(); + return this; +}; + function emitCloseNT(self) { self.emit('close'); } @@ -206,5 +257,6 @@ module.exports = { FSWatcher, - StatWatcher + StatWatcher, + kFSStatWatcherAddOrCleanRef, }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/http2/compat.js nodejs-mozilla-12.22.12/lib/internal/http2/compat.js --- nodejs-mozilla-12.18.1/lib/internal/http2/compat.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/http2/compat.js 2022-04-05 07:17:03.000000000 +0000 @@ -405,9 +405,9 @@ } setTimeout(msecs, callback) { - if (this[kState].closed) - return; - this[kStream].setTimeout(msecs, callback); + if (!this[kState].closed) + this[kStream].setTimeout(msecs, callback); + return this; } } @@ -519,6 +519,18 @@ return this[kStream].writableCorked; } + get writableHighWaterMark() { + return this[kStream].writableHighWaterMark; + } + + get writableFinished() { + return this[kStream].writableFinished; + } + + get writableLength() { + return this[kStream].writableLength; + } + set statusCode(code) { code |= 0; if (code >= 100 && code < 200) @@ -555,7 +567,8 @@ } getHeaders() { - return { ...this[kHeaders] }; + const headers = ObjectCreate(null); + return ObjectAssign(headers, this[kHeaders]); } hasHeader(name) { @@ -570,6 +583,13 @@ throw new ERR_HTTP2_HEADERS_SENT(); name = name.trim().toLowerCase(); + + if (name === 'date') { + this[kState].sendDate = false; + + return; + } + delete this[kHeaders][name]; } @@ -685,11 +705,6 @@ const stream = this[kStream]; const state = this[kState]; - if ((state.closed || state.ending) && - state.headRequest === stream.headRequest) { - return this; - } - if (typeof chunk === 'function') { cb = chunk; chunk = null; @@ -698,6 +713,14 @@ encoding = 'utf8'; } + if ((state.closed || state.ending) && + state.headRequest === stream.headRequest) { + if (typeof cb === 'function') { + process.nextTick(cb); + } + return this; + } + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); @@ -759,6 +782,7 @@ const options = { endStream: state.ending, waitForTrailers: true, + sendDate: state.sendDate }; this[kStream].respond(headers, options); } diff -Nru nodejs-mozilla-12.18.1/lib/internal/http2/core.js nodejs-mozilla-12.22.12/lib/internal/http2/core.js --- nodejs-mozilla-12.18.1/lib/internal/http2/core.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/http2/core.js 2022-04-05 07:17:03.000000000 +0000 @@ -15,6 +15,8 @@ ReflectGetPrototypeOf, Set, Symbol, + Uint32Array, + Uint8Array, } = primordials; const { @@ -33,7 +35,7 @@ const { Duplex } = require('stream'); const tls = require('tls'); const { URL } = require('url'); -const { setImmediate } = require('timers'); +const { setImmediate, setTimeout, clearTimeout } = require('timers'); const { kIncomingMessage } = require('_http_common'); const { kServerResponse } = require('_http_server'); @@ -152,7 +154,9 @@ const { StreamPipe } = internalBinding('stream_pipe'); const { _connectionListener: httpConnectionListener } = http; -const debug = require('internal/util/debuglog').debuglog('http2'); +let debug = require('internal/util/debuglog').debuglog('http2', (fn) => { + debug = fn; +}); const { getOptionValue } = require('internal/options'); // TODO(addaleax): See if this can be made more efficient by figuring out @@ -499,7 +503,10 @@ if (!stream || stream.destroyed) return false; - debugStreamObj(stream, 'closed with code %d', code); + debugStreamObj( + stream, 'closed with code %d, closed %s, readable %s', + code, stream.closed, stream.readable + ); if (!stream.closed) closeStream(stream, code, kNoRstStream); @@ -508,7 +515,7 @@ // Defer destroy we actually emit end. if (!stream.readable || code !== NGHTTP2_NO_ERROR) { // If errored or ended, we can destroy immediately. - stream[kMaybeDestroy](code); + stream.destroy(); } else { // Wait for end to destroy. stream.on('end', stream[kMaybeDestroy]); @@ -925,6 +932,9 @@ assertWithinRange('maxHeaderListSize', settings.maxHeaderListSize, 0, kMaxInt); + assertWithinRange('maxHeaderSize', + settings.maxHeaderSize, + 0, kMaxInt); if (settings.enablePush !== undefined && typeof settings.enablePush !== 'boolean') { throw new ERR_HTTP2_INVALID_SETTING_VALUE('enablePush', @@ -1016,20 +1026,76 @@ self.emit('close'); } -function finishSessionDestroy(session, error) { +function cleanupSession(session) { const socket = session[kSocket]; - if (!socket.destroyed) - socket.destroy(error); - + const handle = session[kHandle]; session[kProxySocket] = undefined; session[kSocket] = undefined; session[kHandle] = undefined; session[kNativeFields] = new Uint8Array(kSessionUint8FieldCount); - socket[kSession] = undefined; - socket[kServer] = undefined; + if (handle) + handle.ondone = null; + if (socket) { + socket[kSession] = undefined; + socket[kServer] = undefined; + } +} + +function finishSessionClose(session, error) { + debugSessionObj(session, 'finishSessionClose'); + + const socket = session[kSocket]; + cleanupSession(session); + + if (socket && !socket.destroyed) { + // Always wait for writable side to finish. + socket.end((err) => { + debugSessionObj(session, 'finishSessionClose socket end', err); + // Due to the way the underlying stream is handled in Http2Session we + // won't get graceful Readable end from the other side even if it was sent + // as the stream is already considered closed and will neither be read + // from nor keep the event loop alive. + // Therefore destroy the socket immediately. + // Fixing this would require some heavy juggling of ReadStart/ReadStop + // mostly on Windows as on Unix it will be fine with just ReadStart + // after this 'ondone' callback. + socket.destroy(error); + emitClose(session, error); + }); + } else { + process.nextTick(emitClose, session, error); + } +} + +function closeSession(session, code, error) { + debugSessionObj(session, 'start closing/destroying'); + + const state = session[kState]; + state.flags |= SESSION_FLAGS_DESTROYED; + state.destroyCode = code; + + // Clear timeout and remove timeout listeners. + session.setTimeout(0); + session.removeAllListeners('timeout'); + + // Destroy any pending and open streams + if (state.pendingStreams.size > 0 || state.streams.size > 0) { + const cancel = new ERR_HTTP2_STREAM_CANCEL(error); + state.pendingStreams.forEach((stream) => stream.destroy(cancel)); + state.streams.forEach((stream) => stream.destroy(error)); + } - // Finally, emit the close and error events (if necessary) on next tick. - process.nextTick(emitClose, session, error); + // Disassociate from the socket and server. + const socket = session[kSocket]; + const handle = session[kHandle]; + + // Destroy the handle if it exists at this point. + if (handle !== undefined) { + handle.ondone = finishSessionClose.bind(null, session, error); + handle.destroy(code, socket.destroyed); + } else { + finishSessionClose(session, error); + } } // Upon creation, the Http2Session takes ownership of the socket. The session @@ -1094,6 +1160,7 @@ streams: new Map(), pendingStreams: new Set(), pendingAck: 0, + shutdownWritableCalled: false, writeQueueSize: 0, originSet: undefined }; @@ -1356,6 +1423,7 @@ destroy(error = NGHTTP2_NO_ERROR, code) { if (this.destroyed) return; + debugSessionObj(this, 'destroying'); if (typeof error === 'number') { @@ -1367,34 +1435,7 @@ if (code === undefined && error != null) code = NGHTTP2_INTERNAL_ERROR; - const state = this[kState]; - state.flags |= SESSION_FLAGS_DESTROYED; - state.destroyCode = code; - - // Clear timeout and remove timeout listeners - this.setTimeout(0); - this.removeAllListeners('timeout'); - - // Destroy any pending and open streams - const cancel = new ERR_HTTP2_STREAM_CANCEL(error); - state.pendingStreams.forEach((stream) => stream.destroy(cancel)); - state.streams.forEach((stream) => stream.destroy(error)); - - // Disassociate from the socket and server - const socket = this[kSocket]; - const handle = this[kHandle]; - - // Destroy the handle if it exists at this point - if (handle !== undefined) - handle.destroy(code, socket.destroyed); - - // If the socket is alive, use setImmediate to destroy the session on the - // next iteration of the event loop in order to give data time to transmit. - // Otherwise, destroy immediately. - if (!socket.destroyed) - setImmediate(finishSessionDestroy, this, error); - else - finishSessionDestroy(this, error); + closeSession(this, code, error); } // Closing the session will: @@ -1449,27 +1490,7 @@ } _onTimeout() { - // If the session is destroyed, this should never actually be invoked, - // but just in case... - if (this.destroyed) - return; - // This checks whether a write is currently in progress and also whether - // that write is actually sending data across the write. The kHandle - // stored `chunksSentSinceLastWrite` is only updated when a timeout event - // happens, meaning that if a write is ongoing it should never equal the - // newly fetched, updated value. - if (this[kState].writeQueueSize > 0) { - const handle = this[kHandle]; - const chunksSentSinceLastWrite = handle !== undefined ? - handle.chunksSentSinceLastWrite : null; - if (chunksSentSinceLastWrite !== null && - chunksSentSinceLastWrite !== handle.updateChunksSent()) { - this[kUpdateTimer](); - return; - } - } - - this.emit('timeout'); + callTimeout(this); } ref() { @@ -1706,6 +1727,26 @@ stream[kMaybeDestroy](); } +function shutdownWritable(callback) { + const handle = this[kHandle]; + if (!handle) return callback(); + const state = this[kState]; + if (state.shutdownWritableCalled) { + // Backport v12.x: Session required for debugging stream object + // debugStreamObj(this, 'shutdownWritable() already called'); + return callback(); + } + state.shutdownWritableCalled = true; + + const req = new ShutdownWrap(); + req.oncomplete = afterShutdown; + req.callback = callback; + req.handle = handle; + const err = handle.shutdown(req); + if (err === 1) // synchronous finish + return afterShutdown.call(req, 0); +} + function finishSendTrailers(stream, headersList) { // The stream might be destroyed and in that case // there is nothing to do. @@ -1894,25 +1935,7 @@ } _onTimeout() { - if (this.destroyed) - return; - // This checks whether a write is currently in progress and also whether - // that write is actually sending data across the write. The kHandle - // stored `chunksSentSinceLastWrite` is only updated when a timeout event - // happens, meaning that if a write is ongoing it should never equal the - // newly fetched, updated value. - if (this[kState].writeQueueSize > 0) { - const handle = this[kSession][kHandle]; - const chunksSentSinceLastWrite = handle !== undefined ? - handle.chunksSentSinceLastWrite : null; - if (chunksSentSinceLastWrite !== null && - chunksSentSinceLastWrite !== handle.updateChunksSent()) { - this[kUpdateTimer](); - return; - } - } - - this.emit('timeout'); + callTimeout(this, kSession); } // True if the HEADERS frame has been sent @@ -1983,10 +2006,50 @@ let req; + let waitingForWriteCallback = true; + let waitingForEndCheck = true; + let writeCallbackErr; + let endCheckCallbackErr; + const done = () => { + if (waitingForEndCheck || waitingForWriteCallback) return; + const err = writeCallbackErr || endCheckCallbackErr; + // writeGeneric does not destroy on error and + // we cannot enable autoDestroy, + // so make sure to destroy on error. + if (err) { + this.destroy(err); + } + cb(err); + }; + const writeCallback = (err) => { + waitingForWriteCallback = false; + writeCallbackErr = err; + done(); + }; + const endCheckCallback = (err) => { + waitingForEndCheck = false; + endCheckCallbackErr = err; + done(); + }; + // Shutdown write stream right after last chunk is sent + // so final DATA frame can include END_STREAM flag + process.nextTick(() => { + if (writeCallbackErr || + !this._writableState.ending || + // Backport v12.x: _writableState.buffered does not exist + // this._writableState.buffered.length || + this._writableState.bufferedRequest || + (this[kState].flags & STREAM_FLAGS_HAS_TRAILERS)) + return endCheckCallback(); + // Backport v12.x: Session required for debugging stream object + // debugStreamObj(this, 'shutting down writable on last write'); + shutdownWritable.call(this, endCheckCallback); + }); + if (writev) - req = writevGeneric(this, data, cb); + req = writevGeneric(this, data, writeCallback); else - req = writeGeneric(this, data, encoding, cb); + req = writeGeneric(this, data, encoding, writeCallback); trackWriteState(this, req.bytes); } @@ -2000,21 +2063,13 @@ } _final(cb) { - const handle = this[kHandle]; if (this.pending) { this.once('ready', () => this._final(cb)); - } else if (handle !== undefined) { - debugStreamObj(this, '_final shutting down'); - const req = new ShutdownWrap(); - req.oncomplete = afterShutdown; - req.callback = cb; - req.handle = handle; - const err = handle.shutdown(req); - if (err === 1) // synchronous finish - return afterShutdown.call(req, 0); - } else { - cb(); + return; } + // Backport v12.x: Session required for debugging stream object + // debugStreamObj(this, 'shutting down writable on _final'); + shutdownWritable.call(this, cb); } _read(nread) { @@ -2119,11 +2174,20 @@ debugStream(this[kID] || 'pending', session[kType], 'destroying stream'); const state = this[kState]; - const sessionCode = session[kState].goawayCode || - session[kState].destroyCode; - const code = err != null ? - sessionCode || NGHTTP2_INTERNAL_ERROR : - state.rstCode || sessionCode; + const sessionState = session[kState]; + const sessionCode = sessionState.goawayCode || sessionState.destroyCode; + + // If a stream has already closed successfully, there is no error + // to report from this stream, even if the session has errored. + // This can happen if the stream was already in process of destroying + // after a successful close, but the session had a error between + // this stream's close and destroy operations. + // Previously, this always overrode a successful close operation code + // NGHTTP2_NO_ERROR (0) with sessionCode because the use of the || operator. + const code = (err != null ? + (sessionCode || NGHTTP2_INTERNAL_ERROR) : + (this.closed ? this.rstCode : sessionCode) + ); const hasHandle = handle !== undefined; if (!this.closed) @@ -2132,13 +2196,13 @@ if (hasHandle) { handle.destroy(); - session[kState].streams.delete(id); + sessionState.streams.delete(id); } else { - session[kState].pendingStreams.delete(this); + sessionState.pendingStreams.delete(this); } // Adjust the write queue size for accounting - session[kState].writeQueueSize -= state.writeQueueSize; + sessionState.writeQueueSize -= state.writeQueueSize; state.writeQueueSize = 0; // RST code 8 not emitted as an error as its used by clients to signify @@ -2190,11 +2254,35 @@ } } +function callTimeout(self, kSession) { + // If the session is destroyed, this should never actually be invoked, + // but just in case... + if (self.destroyed) + return; + // This checks whether a write is currently in progress and also whether + // that write is actually sending data across the write. The kHandle + // stored `chunksSentSinceLastWrite` is only updated when a timeout event + // happens, meaning that if a write is ongoing it should never equal the + // newly fetched, updated value. + if (self[kState].writeQueueSize > 0) { + const handle = kSession ? self[kSession][kHandle] : self[kHandle]; + const chunksSentSinceLastWrite = handle !== undefined ? + handle.chunksSentSinceLastWrite : null; + if (chunksSentSinceLastWrite !== null && + chunksSentSinceLastWrite !== handle.updateChunksSent()) { + self[kUpdateTimer](); + return; + } + } + + self.emit('timeout'); +} + function callStreamClose(stream) { stream.close(); } -function processHeaders(oldHeaders) { +function processHeaders(oldHeaders, options) { assertIsObject(oldHeaders, 'headers'); const headers = ObjectCreate(null); @@ -2210,7 +2298,13 @@ const statusCode = headers[HTTP2_HEADER_STATUS] = headers[HTTP2_HEADER_STATUS] | 0 || HTTP_STATUS_OK; - headers[HTTP2_HEADER_DATE] = utcDate(); + + if (options.sendDate == null || options.sendDate) { + if (headers[HTTP2_HEADER_DATE] === null || + headers[HTTP2_HEADER_DATE] === undefined) { + headers[HTTP2_HEADER_DATE] = utcDate(); + } + } // This is intentionally stricter than the HTTP/1 implementation, which // allows values between 100 and 999 (inclusive) in order to allow for @@ -2536,7 +2630,7 @@ state.flags |= STREAM_FLAGS_HAS_TRAILERS; } - headers = processHeaders(headers); + headers = processHeaders(headers, options); const headersList = mapToHeaders(headers, assertValidPseudoHeaderResponse); this[kSentHeaders] = headers; @@ -2602,7 +2696,7 @@ this[kUpdateTimer](); this.ownsFd = false; - headers = processHeaders(headers); + headers = processHeaders(headers, options); const statusCode = headers[HTTP2_HEADER_STATUS] |= 0; // Payload/DATA frames are not permitted in these cases if (statusCode === HTTP_STATUS_NO_CONTENT || @@ -2663,7 +2757,7 @@ this[kUpdateTimer](); this.ownsFd = true; - headers = processHeaders(headers); + headers = processHeaders(headers, options); const statusCode = headers[HTTP2_HEADER_STATUS] |= 0; // Payload/DATA frames are not permitted in these cases if (statusCode === HTTP_STATUS_NO_CONTENT || @@ -2735,14 +2829,14 @@ this.emit('continue'); } -const setTimeout = { +const setTimeoutValue = { configurable: true, enumerable: true, writable: true, value: setStreamTimeout }; -ObjectDefineProperty(Http2Stream.prototype, 'setTimeout', setTimeout); -ObjectDefineProperty(Http2Session.prototype, 'setTimeout', setTimeout); +ObjectDefineProperty(Http2Stream.prototype, 'setTimeout', setTimeoutValue); +ObjectDefineProperty(Http2Session.prototype, 'setTimeout', setTimeoutValue); // When the socket emits an error, destroy the associated Http2Session and @@ -2802,6 +2896,22 @@ debug('Unknown protocol from %s:%s', socket.remoteAddress, socket.remotePort); if (!this.emit('unknownProtocol', socket)) { + debug('Unknown protocol timeout: %s', options.unknownProtocolTimeout); + // Install a timeout if the socket was not successfully closed, then + // destroy the socket to ensure that the underlying resources are + // released. + const timer = setTimeout(() => { + if (!socket.destroyed) { + debug('UnknownProtocol socket timeout, destroy socket'); + socket.destroy(); + } + }, options.unknownProtocolTimeout); + // Un-reference the timer to avoid blocking of application shutdown and + // clear the timeout if the socket was successfully closed. + timer.unref(); + + socket.once('close', () => clearTimeout(timer)); + // We don't know what to do, so let's just tell the other side what's // going on in a format that they *might* understand. socket.end('HTTP/1.0 403 Forbidden\r\n' + @@ -2850,6 +2960,13 @@ ); } + if (options.unknownProtocolTimeout !== undefined) + validateUint32(options.unknownProtocolTimeout, 'unknownProtocolTimeout'); + else + // TODO(danbev): is this a good default value? + options.unknownProtocolTimeout = 10000; + + // Used only with allowHTTP1 options.Http1IncomingMessage = options.Http1IncomingMessage || http.IncomingMessage; @@ -3099,7 +3216,7 @@ settings.maxFrameSize = value; break; case NGHTTP2_SETTINGS_MAX_HEADER_LIST_SIZE: - settings.maxHeaderListSize = value; + settings.maxHeaderListSize = settings.maxHeaderSize = value; break; case NGHTTP2_SETTINGS_ENABLE_CONNECT_PROTOCOL: settings.enableConnectProtocol = value !== 0; diff -Nru nodejs-mozilla-12.18.1/lib/internal/http2/util.js nodejs-mozilla-12.22.12/lib/internal/http2/util.js --- nodejs-mozilla-12.18.1/lib/internal/http2/util.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/http2/util.js 2022-04-05 07:17:03.000000000 +0000 @@ -300,7 +300,7 @@ if ((flags & (1 << IDX_SETTINGS_MAX_HEADER_LIST_SIZE)) === (1 << IDX_SETTINGS_MAX_HEADER_LIST_SIZE)) { - holder.maxHeaderListSize = + holder.maxHeaderListSize = holder.maxHeaderSize = settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE]; } @@ -328,6 +328,7 @@ maxFrameSize: settingsBuffer[IDX_SETTINGS_MAX_FRAME_SIZE], maxConcurrentStreams: settingsBuffer[IDX_SETTINGS_MAX_CONCURRENT_STREAMS], maxHeaderListSize: settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE], + maxHeaderSize: settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE], enableConnectProtocol: !!settingsBuffer[IDX_SETTINGS_ENABLE_CONNECT_PROTOCOL] }; @@ -355,10 +356,20 @@ settingsBuffer[IDX_SETTINGS_MAX_FRAME_SIZE] = settings.maxFrameSize; } - if (typeof settings.maxHeaderListSize === 'number') { + if (typeof settings.maxHeaderListSize === 'number' || + typeof settings.maxHeaderSize === 'number') { flags |= (1 << IDX_SETTINGS_MAX_HEADER_LIST_SIZE); - settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE] = - settings.maxHeaderListSize; + if (settings.maxHeaderSize !== undefined && + (settings.maxHeaderSize !== settings.maxHeaderListSize)) { + process.emitWarning( + 'settings.maxHeaderSize overwrite settings.maxHeaderListSize' + ); + settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE] = + settings.maxHeaderSize; + } else { + settingsBuffer[IDX_SETTINGS_MAX_HEADER_LIST_SIZE] = + settings.maxHeaderListSize; + } } if (typeof settings.enablePush === 'boolean') { flags |= (1 << IDX_SETTINGS_ENABLE_PUSH); @@ -542,7 +553,7 @@ function toHeaderObject(headers) { const obj = ObjectCreate(null); - for (var n = 0; n < headers.length; n = n + 2) { + for (var n = 0; n < headers.length; n += 2) { const name = headers[n]; let value = headers[n + 1]; if (name === HTTP2_HEADER_STATUS) diff -Nru nodejs-mozilla-12.18.1/lib/internal/js_stream_socket.js nodejs-mozilla-12.22.12/lib/internal/js_stream_socket.js --- nodejs-mozilla-12.18.1/lib/internal/js_stream_socket.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/js_stream_socket.js 2022-04-05 07:17:03.000000000 +0000 @@ -9,7 +9,12 @@ const { Socket } = require('net'); const { JSStream } = internalBinding('js_stream'); const uv = internalBinding('uv'); -const debug = require('internal/util/debuglog').debuglog('stream_socket'); +let debug = require('internal/util/debuglog').debuglog( + 'stream_socket', + (fn) => { + debug = fn; + } +); const { owner_symbol } = require('internal/async_hooks').symbols; const { ERR_STREAM_WRAP } = require('internal/errors').codes; diff -Nru nodejs-mozilla-12.18.1/lib/internal/main/repl.js nodejs-mozilla-12.22.12/lib/internal/main/repl.js --- nodejs-mozilla-12.18.1/lib/internal/main/repl.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/main/repl.js 2022-04-05 07:17:03.000000000 +0000 @@ -7,6 +7,7 @@ prepareMainThreadExecution } = require('internal/bootstrap/pre_execution'); +const esmLoader = require('internal/process/esm_loader'); const { evalScript } = require('internal/process/execution'); @@ -32,31 +33,33 @@ process.exit(1); } - console.log(`Welcome to Node.js ${process.version}.\n` + - 'Type ".help" for more information.'); - - const cliRepl = require('internal/repl'); - cliRepl.createInternalRepl(process.env, (err, repl) => { - if (err) { - throw err; - } - repl.on('exit', () => { - if (repl._flushing) { - repl.pause(); - return repl.once('flushHistory', () => { - process.exit(); - }); + esmLoader.loadESM(() => { + console.log(`Welcome to Node.js ${process.version}.\n` + + 'Type ".help" for more information.'); + + const cliRepl = require('internal/repl'); + cliRepl.createInternalRepl(process.env, (err, repl) => { + if (err) { + throw err; } - process.exit(); + repl.on('exit', () => { + if (repl._flushing) { + repl.pause(); + return repl.once('flushHistory', () => { + process.exit(); + }); + } + process.exit(); + }); }); - }); - // If user passed '-e' or '--eval' along with `-i` or `--interactive`, - // evaluate the code in the current context. - if (getOptionValue('[has_eval_string]')) { - evalScript('[eval]', - getOptionValue('--eval'), - getOptionValue('--inspect-brk'), - getOptionValue('--print')); - } + // If user passed '-e' or '--eval' along with `-i` or `--interactive`, + // evaluate the code in the current context. + if (getOptionValue('[has_eval_string]')) { + evalScript('[eval]', + getOptionValue('--eval'), + getOptionValue('--inspect-brk'), + getOptionValue('--print')); + } + }, false); } diff -Nru nodejs-mozilla-12.18.1/lib/internal/main/worker_thread.js nodejs-mozilla-12.22.12/lib/internal/main/worker_thread.js --- nodejs-mozilla-12.18.1/lib/internal/main/worker_thread.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/main/worker_thread.js 2022-04-05 07:17:03.000000000 +0000 @@ -49,7 +49,9 @@ } = require('internal/process/execution'); const publicWorker = require('worker_threads'); -const debug = require('internal/util/debuglog').debuglog('worker'); +let debug = require('internal/util/debuglog').debuglog('worker', (fn) => { + debug = fn; +}); const assert = require('internal/assert'); @@ -92,6 +94,7 @@ port.on('message', (message) => { if (message.type === LOAD_SCRIPT) { + port.unref(); const { argv, cwdCounter, @@ -140,7 +143,6 @@ debug(`[${threadId}] starts worker script ${filename} ` + `(eval = ${eval}) at cwd = ${process.cwd()}`); - port.unref(); port.postMessage({ type: UP_AND_RUNNING }); if (doEval) { const { evalScript } = require('internal/process/execution'); @@ -162,8 +164,9 @@ CJSLoader.Module.runMain(filename); } } else if (message.type === STDIO_PAYLOAD) { - const { stream, chunk, encoding } = message; - process[stream].push(chunk, encoding); + const { stream, chunks } = message; + for (const { chunk, encoding } of chunks) + process[stream].push(chunk, encoding); } else { assert( message.type === STDIO_WANTS_MORE_DATA, @@ -190,7 +193,7 @@ let serialized; try { - const { serializeError } = require('internal/error-serdes'); + const { serializeError } = require('internal/error_serdes'); serialized = serializeError(error); } catch {} debug(`[${threadId}] uncaught exception serialized = ${!!serialized}`); diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/cjs/helpers.js nodejs-mozilla-12.22.12/lib/internal/modules/cjs/helpers.js --- nodejs-mozilla-12.18.1/lib/internal/modules/cjs/helpers.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/cjs/helpers.js 2022-04-05 07:17:03.000000000 +0000 @@ -15,7 +15,9 @@ const { pathToFileURL, fileURLToPath } = require('internal/url'); const { URL } = require('url'); -const debug = require('internal/util/debuglog').debuglog('module'); +let debug = require('internal/util/debuglog').debuglog('module', (fn) => { + debug = fn; +}); function loadNativeModule(filename, request) { const mod = NativeModule.map.get(filename); diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/cjs/loader.js nodejs-mozilla-12.22.12/lib/internal/modules/cjs/loader.js --- nodejs-mozilla-12.18.1/lib/internal/modules/cjs/loader.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/cjs/loader.js 2022-04-05 07:17:03.000000000 +0000 @@ -23,42 +23,51 @@ const { ArrayIsArray, + ArrayPrototypeJoin, Error, JSONParse, Map, - Number, ObjectCreate, ObjectDefineProperty, ObjectFreeze, - ObjectIs, ObjectKeys, - ObjectPrototypeHasOwnProperty, ReflectSet, RegExpPrototypeTest, SafeMap, - String, + SafeSet, + SafeWeakMap, + StringPrototypeEndsWith, StringPrototypeIndexOf, + StringPrototypeLastIndexOf, StringPrototypeMatch, StringPrototypeSlice, StringPrototypeStartsWith, } = primordials; +// Map used to store CJS parsing data. +const cjsParseCache = new SafeWeakMap(); + +// Set first due to cycle with ESM loader functions. +module.exports = { + wrapSafe, Module, toRealPath, readPackageScope, cjsParseCache, + get hasLoadedAnyUserCJSModule() { return hasLoadedAnyUserCJSModule; } +}; + const { NativeModule } = require('internal/bootstrap/loaders'); const { maybeCacheSourceMap, rekeySourceMap } = require('internal/source_map/source_map_cache'); -const { pathToFileURL, fileURLToPath, URL } = require('internal/url'); +const { pathToFileURL, fileURLToPath, isURLInstance } = require('internal/url'); const { deprecate } = require('internal/util'); const vm = require('vm'); const assert = require('internal/assert'); const fs = require('fs'); const internalFS = require('internal/fs/utils'); const path = require('path'); -const { - internalModuleReadJSON, - internalModuleStat -} = internalBinding('fs'); +const { sep } = path; +const { internalModuleStat } = internalBinding('fs'); +const packageJsonReader = require('internal/modules/package_json_reader'); const { safeGetenv } = internalBinding('credentials'); const { makeRequireFunction, @@ -74,6 +83,7 @@ require('internal/process/policy').manifest : null; const { compileFunction } = internalBinding('contextify'); +const userConditions = getOptionValue('--conditions'); // Whether any user-provided CJS modules had been loaded (executed). // Used for internal assertions. @@ -82,28 +92,27 @@ const { ERR_INVALID_ARG_VALUE, ERR_INVALID_OPT_VALUE, - ERR_INVALID_PACKAGE_CONFIG, - ERR_INVALID_PACKAGE_TARGET, ERR_INVALID_MODULE_SPECIFIER, - ERR_PACKAGE_PATH_NOT_EXPORTED, ERR_REQUIRE_ESM } = require('internal/errors').codes; const { validateString } = require('internal/validators'); const pendingDeprecation = getOptionValue('--pending-deprecation'); -module.exports = { - wrapSafe, Module, toRealPath, readPackageScope, - get hasLoadedAnyUserCJSModule() { return hasLoadedAnyUserCJSModule; } -}; - -let asyncESM, ModuleJob, ModuleWrap, kInstantiated; - const { CHAR_FORWARD_SLASH, CHAR_BACKWARD_SLASH, CHAR_COLON } = require('internal/constants'); +const asyncESM = require('internal/process/esm_loader'); +const { enrichCJSError } = require('internal/modules/esm/translators'); +const { kEvaluated } = internalBinding('module_wrap'); +const { + encodedSepRegEx, + packageExportsResolve, + packageImportsResolve +} = require('internal/modules/esm/resolve'); + const isWindows = process.platform === 'win32'; const relativeResolveCache = ObjectCreate(null); @@ -111,31 +120,6 @@ let requireDepth = 0; let statCache = null; -function enrichCJSError(err) { - const stack = err.stack.split('\n'); - - const lineWithErr = stack[1]; - - /* - The regular expression below targets the most common import statement - usage. However, some cases are not matching, cases like import statement - after a comment block and/or after a variable definition. - */ - if (err.message.startsWith('Unexpected token \'export\'') || - (RegExpPrototypeTest(/^\s*import(?=[ {'"*])\s*(?![ (])/, lineWithErr))) { - // Emit the warning synchronously because we are in the middle of handling - // a SyntaxError that will throw and likely terminate the process before an - // asynchronous warning would be emitted. - process.emitWarning( - 'To load an ES module, set "type": "module" in the package.json or use ' + - 'the .mjs extension.', - undefined, - undefined, - undefined, - true); - } -} - function stat(filename) { filename = path.toNamespacedPath(filename); if (statCache !== null) { @@ -226,7 +210,9 @@ } }); -const debug = require('internal/util/debuglog').debuglog('module'); +let debug = require('internal/util/debuglog').debuglog('module', (fn) => { + debug = fn; +}); Module._debug = deprecate(debug, 'Module._debug is deprecated.', 'DEP0077'); // Given a module name, and a list of paths to test, returns the first @@ -248,23 +234,20 @@ const existing = packageJsonCache.get(jsonPath); if (existing !== undefined) return existing; - const json = internalModuleReadJSON(path.toNamespacedPath(jsonPath)); + const result = packageJsonReader.read(jsonPath); + const json = result.containsKeys === false ? '{}' : result.string; if (json === undefined) { packageJsonCache.set(jsonPath, false); return false; } - if (manifest) { - const jsonURL = pathToFileURL(jsonPath); - manifest.assertIntegrity(jsonURL, json); - } - try { const parsed = JSONParse(json); const filtered = { name: parsed.name, main: parsed.main, exports: parsed.exports, + imports: parsed.imports, type: parsed.type }; packageJsonCache.set(jsonPath, filtered); @@ -277,41 +260,31 @@ } function readPackageScope(checkPath) { - const rootSeparatorIndex = checkPath.indexOf(path.sep); + const rootSeparatorIndex = StringPrototypeIndexOf(checkPath, sep); let separatorIndex; - while ( - (separatorIndex = checkPath.lastIndexOf(path.sep)) > rootSeparatorIndex - ) { - checkPath = checkPath.slice(0, separatorIndex); - if (checkPath.endsWith(path.sep + 'node_modules')) + do { + separatorIndex = StringPrototypeLastIndexOf(checkPath, sep); + checkPath = StringPrototypeSlice(checkPath, 0, separatorIndex); + if (StringPrototypeEndsWith(checkPath, sep + 'node_modules')) return false; - const pjson = readPackage(checkPath); + const pjson = readPackage(checkPath + sep); if (pjson) return { + data: pjson, path: checkPath, - data: pjson }; - } + } while (separatorIndex > rootSeparatorIndex); return false; } -function readPackageMain(requestPath) { - const pkg = readPackage(requestPath); - return pkg ? pkg.main : undefined; -} - -function readPackageExports(requestPath) { - const pkg = readPackage(requestPath); - return pkg ? pkg.exports : undefined; -} - function tryPackage(requestPath, exts, isMain, originalPath) { - const pkg = readPackageMain(requestPath); + const pkg = readPackage(requestPath); + const pkgMain = pkg && pkg.main; - if (!pkg) { + if (!pkgMain) { return tryExtensions(path.resolve(requestPath, 'index'), exts, isMain); } - const filename = path.resolve(requestPath, pkg); + const filename = path.resolve(requestPath, pkgMain); let actual = tryFile(filename, isMain) || tryExtensions(filename, exts, isMain) || tryExtensions(path.resolve(filename, 'index'), exts, isMain); @@ -331,7 +304,7 @@ } else if (pendingDeprecation) { const jsonPath = path.resolve(requestPath, 'package.json'); process.emitWarning( - `Invalid 'main' field in '${jsonPath}' of '${pkg}'. ` + + `Invalid 'main' field in '${jsonPath}' of '${pkgMain}'. ` + 'Please either fix that or report it to the module author', 'DeprecationWarning', 'DEP0128' @@ -393,102 +366,45 @@ return '.js'; } +function trySelfParentPath(parent) { + if (!parent) return false; + + if (parent.filename) { + return parent.filename; + } else if (parent.id === '' || parent.id === 'internal/preload') { + try { + return process.cwd() + path.sep; + } catch { + return false; + } + } +} + function trySelf(parentPath, request) { - const { data: pkg, path: basePath } = readPackageScope(parentPath) || {}; + if (!parentPath) return false; + + const { data: pkg, path: pkgPath } = readPackageScope(parentPath) || {}; if (!pkg || pkg.exports === undefined) return false; if (typeof pkg.name !== 'string') return false; let expansion; if (request === pkg.name) { - expansion = ''; + expansion = '.'; } else if (StringPrototypeStartsWith(request, `${pkg.name}/`)) { - expansion = StringPrototypeSlice(request, pkg.name.length); + expansion = '.' + StringPrototypeSlice(request, pkg.name.length); } else { return false; } - const fromExports = applyExports(basePath, expansion); - if (fromExports) { - return tryFile(fromExports, false); - } - assert(fromExports !== false); -} - -function isConditionalDotExportSugar(exports, basePath) { - if (typeof exports === 'string') - return true; - if (ArrayIsArray(exports)) - return true; - if (typeof exports !== 'object') - return false; - let isConditional = false; - let firstCheck = true; - for (const key of ObjectKeys(exports)) { - const curIsConditional = key[0] !== '.'; - if (firstCheck) { - firstCheck = false; - isConditional = curIsConditional; - } else if (isConditional !== curIsConditional) { - throw new ERR_INVALID_PACKAGE_CONFIG(basePath, '"exports" cannot ' + - 'contain some keys starting with \'.\' and some not. The exports ' + - 'object must either be an object of package subpath keys or an ' + - 'object of main entry condition name keys only.'); - } - } - return isConditional; -} - -function applyExports(basePath, expansion) { - const mappingKey = `.${expansion}`; - - let pkgExports = readPackageExports(basePath); - if (pkgExports === undefined || pkgExports === null) - return false; - - if (isConditionalDotExportSugar(pkgExports, basePath)) - pkgExports = { '.': pkgExports }; - - if (typeof pkgExports === 'object') { - if (ObjectPrototypeHasOwnProperty(pkgExports, mappingKey)) { - const mapping = pkgExports[mappingKey]; - return resolveExportsTarget(pathToFileURL(basePath + '/'), mapping, '', - mappingKey); - } - - let dirMatch = ''; - for (const candidateKey of ObjectKeys(pkgExports)) { - if (candidateKey[candidateKey.length - 1] !== '/') continue; - if (candidateKey.length > dirMatch.length && - StringPrototypeStartsWith(mappingKey, candidateKey)) { - dirMatch = candidateKey; - } - } - - if (dirMatch !== '') { - const mapping = pkgExports[dirMatch]; - const subpath = StringPrototypeSlice(mappingKey, dirMatch.length); - const resolved = resolveExportsTarget(pathToFileURL(basePath + '/'), - mapping, subpath, mappingKey); - // Extension searching for folder exports only - const rc = stat(resolved); - if (rc === 0) return resolved; - if (!(RegExpPrototypeTest(trailingSlashRegex, resolved))) { - const exts = ObjectKeys(Module._extensions); - const filename = tryExtensions(resolved, exts, false); - if (filename) return filename; - } - if (rc === 1) { - const exts = ObjectKeys(Module._extensions); - const filename = tryPackage(resolved, exts, false, - basePath + expansion); - if (filename) return filename; - } - // Undefined means not found - return; - } + try { + return finalizeEsmResolution(packageExportsResolve( + pathToFileURL(pkgPath + '/package.json'), expansion, pkg, + pathToFileURL(parentPath), cjsConditions), request, parentPath, pkgPath); + } catch (e) { + if (e.code === 'ERR_MODULE_NOT_FOUND') + throw createEsmNotFoundErr(request, pkgPath + '/package.json'); + throw e; } - - throw new ERR_PACKAGE_PATH_NOT_EXPORTED(basePath, mappingKey); } // This only applies to requests of a specific form: @@ -499,108 +415,21 @@ // The implementation's behavior is meant to mirror resolution in ESM. const [, name, expansion = ''] = StringPrototypeMatch(request, EXPORTS_PATTERN) || []; - if (!name) { - return false; - } - - const basePath = path.resolve(nmPath, name); - const fromExports = applyExports(basePath, expansion); - if (fromExports) { - return tryFile(fromExports, false); - } - return fromExports; -} - -function isArrayIndex(p) { - assert(typeof p === 'string'); - const n = Number(p); - if (String(n) !== p) - return false; - if (ObjectIs(n, +0)) - return true; - if (!Number.isInteger(n)) - return false; - return n >= 0 && n < (2 ** 32) - 1; -} - -function resolveExportsTarget(baseUrl, target, subpath, mappingKey) { - if (typeof target === 'string') { - let resolvedTarget, resolvedTargetPath; - const pkgPathPath = baseUrl.pathname; - if (StringPrototypeStartsWith(target, './')) { - resolvedTarget = new URL(target, baseUrl); - resolvedTargetPath = resolvedTarget.pathname; - if (!StringPrototypeStartsWith(resolvedTargetPath, pkgPathPath) || - StringPrototypeIndexOf(resolvedTargetPath, '/node_modules/', - pkgPathPath.length - 1) !== -1) - resolvedTarget = undefined; - } - if (subpath.length > 0 && target[target.length - 1] !== '/') - resolvedTarget = undefined; - if (resolvedTarget === undefined) - throw new ERR_INVALID_PACKAGE_TARGET(StringPrototypeSlice(baseUrl.pathname - , 0, -1), mappingKey, subpath, target); - const resolved = new URL(subpath, resolvedTarget); - const resolvedPath = resolved.pathname; - if (StringPrototypeStartsWith(resolvedPath, resolvedTargetPath) && - StringPrototypeIndexOf(resolvedPath, '/node_modules/', - pkgPathPath.length - 1) === -1) { - return fileURLToPath(resolved); - } - throw new ERR_INVALID_MODULE_SPECIFIER(StringPrototypeSlice(baseUrl.pathname - , 0, -1), mappingKey); - } else if (ArrayIsArray(target)) { - if (target.length === 0) - throw new ERR_PACKAGE_PATH_NOT_EXPORTED( - StringPrototypeSlice(baseUrl.pathname, 0, -1), mappingKey + subpath); - let lastException; - for (const targetValue of target) { - try { - return resolveExportsTarget(baseUrl, targetValue, subpath, mappingKey); - } catch (e) { - lastException = e; - if (e.code !== 'ERR_PACKAGE_PATH_NOT_EXPORTED' && - e.code !== 'ERR_INVALID_PACKAGE_TARGET') - throw e; - } - } - // Throw last fallback error - assert(lastException !== undefined); - throw lastException; - } else if (typeof target === 'object' && target !== null) { - const keys = ObjectKeys(target); - if (keys.some(isArrayIndex)) { - throw new ERR_INVALID_PACKAGE_CONFIG(baseUrl, '"exports" cannot ' + - 'contain numeric property keys.'); - } - for (const p of keys) { - switch (p) { - case 'node': - case 'require': - try { - return resolveExportsTarget(baseUrl, target[p], subpath, - mappingKey); - } catch (e) { - if (e.code !== 'ERR_PACKAGE_PATH_NOT_EXPORTED') throw e; - } - break; - case 'default': - try { - return resolveExportsTarget(baseUrl, target.default, subpath, - mappingKey); - } catch (e) { - if (e.code !== 'ERR_PACKAGE_PATH_NOT_EXPORTED') throw e; - } - } + if (!name) + return; + const pkgPath = path.resolve(nmPath, name); + const pkg = readPackage(pkgPath); + if (pkg && pkg.exports !== null && pkg.exports !== undefined) { + try { + return finalizeEsmResolution(packageExportsResolve( + pathToFileURL(pkgPath + '/package.json'), '.' + expansion, pkg, null, + cjsConditions), request, null, pkgPath); + } catch (e) { + if (e.code === 'ERR_MODULE_NOT_FOUND') + throw createEsmNotFoundErr(request, pkgPath + '/package.json'); + throw e; } - throw new ERR_PACKAGE_PATH_NOT_EXPORTED( - StringPrototypeSlice(baseUrl.pathname, 0, -1), mappingKey + subpath); - } else if (target === null) { - throw new ERR_PACKAGE_PATH_NOT_EXPORTED( - StringPrototypeSlice(baseUrl.pathname, 0, -1), mappingKey + subpath); } - throw new ERR_INVALID_PACKAGE_TARGET( - StringPrototypeSlice(baseUrl.pathname, 0, -1), mappingKey, subpath, target); } const trailingSlashRegex = /(?:^|\/)\.?\.$/; @@ -633,12 +462,8 @@ if (!absoluteRequest) { const exportsResolved = resolveExports(curPath, request); - // Undefined means not found, false means no exports - if (exportsResolved === undefined) - break; - if (exportsResolved) { + if (exportsResolved) return exportsResolved; - } } const basePath = path.resolve(curPath, request); @@ -844,14 +669,18 @@ const cachedModule = Module._cache[filename]; if (cachedModule !== undefined) { updateChildren(parent, cachedModule, true); - return cachedModule.exports; + const parseCachedModule = cjsParseCache.get(cachedModule); + if (parseCachedModule && !parseCachedModule.loaded) + parseCachedModule.loaded = true; + else + return cachedModule.exports; } const mod = loadNativeModule(filename, request); if (mod && mod.canBeRequiredByUsers) return mod.exports; // Don't call updateChildren(), Module constructor already does. - const module = new Module(filename, parent); + const module = cachedModule || new Module(filename, parent); if (isMain) { process.mainModule = module; @@ -898,6 +727,7 @@ return module.exports; }; +const cjsConditions = new SafeSet(['require', 'node', ...userConditions]); Module._resolveFilename = function(request, parent, isMain, options) { if (NativeModule.canBeRequiredByUsers(request)) { return request; @@ -940,15 +770,34 @@ } if (parent && parent.filename) { - const filename = trySelf(parent.filename, request); - if (filename) { - const cacheKey = request + '\x00' + - (paths.length === 1 ? paths[0] : paths.join('\x00')); - Module._pathCache[cacheKey] = filename; - return filename; + if (request[0] === '#') { + const pkg = readPackageScope(parent.filename) || {}; + if (pkg.data && pkg.data.imports !== null && + pkg.data.imports !== undefined) { + try { + return finalizeEsmResolution( + packageImportsResolve(request, pathToFileURL(parent.filename), + cjsConditions), request, parent.filename, + pkg.path); + } catch (e) { + if (e.code === 'ERR_MODULE_NOT_FOUND') + throw createEsmNotFoundErr(request); + throw e; + } + } } } + // Try module self resoultion first + const parentPath = trySelfParentPath(parent); + const selfResolved = trySelf(parentPath, request); + if (selfResolved) { + const cacheKey = request + '\x00' + + (paths.length === 1 ? paths[0] : ArrayPrototypeJoin(paths, '\x00')); + Module._pathCache[cacheKey] = selfResolved; + return selfResolved; + } + // Look up the filename first, since that's the cache key. const filename = Module._findPath(request, paths, isMain, false); if (filename) return filename; @@ -969,6 +818,34 @@ throw err; }; +function finalizeEsmResolution(match, request, parentPath, pkgPath) { + const { resolved, exact } = match; + if (StringPrototypeMatch(resolved, encodedSepRegEx)) + throw new ERR_INVALID_MODULE_SPECIFIER( + resolved, 'must not include encoded "/" or "\\" characters', parentPath); + const filename = fileURLToPath(resolved); + let actual = tryFile(filename); + if (!exact && !actual) { + const exts = ObjectKeys(Module._extensions); + actual = tryExtensions(filename, exts, false) || + tryPackage(filename, exts, false, request); + } + if (actual) + return actual; + const err = createEsmNotFoundErr(filename, + path.resolve(pkgPath, 'package.json')); + throw err; +} + +function createEsmNotFoundErr(request, path) { + // eslint-disable-next-line no-restricted-syntax + const err = new Error(`Cannot find module '${request}'`); + err.code = 'MODULE_NOT_FOUND'; + if (path) + err.path = path; + // TODO(BridgeAR): Add the requireStack as well. + return err; +} // Given a file name, pass it to the proper extension handler. Module.prototype.load = function(filename) { @@ -987,29 +864,13 @@ this.loaded = true; const ESMLoader = asyncESM.ESMLoader; - const url = `${pathToFileURL(filename)}`; - const module = ESMLoader.moduleMap.get(url); // Create module entry at load time to snapshot exports correctly const exports = this.exports; - // Called from cjs translator - if (module !== undefined && module.module !== undefined) { - if (module.module.getStatus() >= kInstantiated) - module.module.setExport('default', exports); - } else { - // Preemptively cache - // We use a function to defer promise creation for async hooks. - ESMLoader.moduleMap.set( - url, - // Module job creation will start promises. - // We make it a function to lazily trigger those promises - // for async hooks compatibility. - () => new ModuleJob(ESMLoader, url, () => - new ModuleWrap(url, undefined, ['default'], function() { - this.setExport('default', exports); - }) - , false /* isMain */, false /* inspectBrk */) - ); - } + // Preemptively cache + if ((!module || module.module === undefined || + module.module.getStatus() < kEvaluated) && + !ESMLoader.cjsCache.has(this)) + ESMLoader.cjsCache.set(this, exports); }; @@ -1154,7 +1015,15 @@ throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath); } } - const content = fs.readFileSync(filename, 'utf8'); + // If already analyzed the source, then it will be cached. + const cached = cjsParseCache.get(module); + let content; + if (cached && cached.source) { + content = cached.source; + cached.source = undefined; + } else { + content = fs.readFileSync(filename, 'utf8'); + } module._compile(content, filename); }; @@ -1212,7 +1081,7 @@ function createRequire(filename) { let filepath; - if (filename instanceof URL || + if (isURLInstance(filename) || (typeof filename === 'string' && !path.isAbsolute(filename))) { try { filepath = fileURLToPath(filename); @@ -1288,8 +1157,3 @@ // Backwards compatibility Module.Module = Module; - -// We have to load the esm things after module.exports! -asyncESM = require('internal/process/esm_loader'); -ModuleJob = require('internal/modules/esm/module_job'); -({ ModuleWrap, kInstantiated } = internalBinding('module_wrap')); diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/esm/create_dynamic_module.js nodejs-mozilla-12.22.12/lib/internal/modules/esm/create_dynamic_module.js --- nodejs-mozilla-12.18.1/lib/internal/modules/esm/create_dynamic_module.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/esm/create_dynamic_module.js 2022-04-05 07:17:03.000000000 +0000 @@ -8,7 +8,9 @@ Set, } = primordials; -const debug = require('internal/util/debuglog').debuglog('esm'); +let debug = require('internal/util/debuglog').debuglog('esm', (fn) => { + debug = fn; +}); function createImport(impt, index) { const imptPath = JSONStringify(impt); diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/esm/get_format.js nodejs-mozilla-12.22.12/lib/internal/modules/esm/get_format.js --- nodejs-mozilla-12.18.1/lib/internal/modules/esm/get_format.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/esm/get_format.js 2022-04-05 07:17:03.000000000 +0000 @@ -34,7 +34,7 @@ extensionFormatMap['.json'] = legacyExtensionFormatMap['.json'] = 'json'; function defaultGetFormat(url, context, defaultGetFormatUnused) { - if (StringPrototypeStartsWith(url, 'nodejs:')) { + if (StringPrototypeStartsWith(url, 'node:')) { return { format: 'builtin' }; } const parsed = new URL(url); diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/esm/get_source.js nodejs-mozilla-12.22.12/lib/internal/modules/esm/get_source.js --- nodejs-mozilla-12.18.1/lib/internal/modules/esm/get_source.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/esm/get_source.js 2022-04-05 07:17:03.000000000 +0000 @@ -1,5 +1,13 @@ 'use strict'; +const { + decodeURIComponent, +} = primordials; +const { getOptionValue } = require('internal/options'); +const manifest = getOptionValue('--experimental-policy') ? + require('internal/process/policy').manifest : + null; + const { Buffer } = require('buffer'); const fs = require('fs'); @@ -15,21 +23,22 @@ async function defaultGetSource(url, { format } = {}, defaultGetSource) { const parsed = new URL(url); + let source; if (parsed.protocol === 'file:') { - return { - source: await readFileAsync(parsed) - }; + source = await readFileAsync(parsed); } else if (parsed.protocol === 'data:') { const match = DATA_URL_PATTERN.exec(parsed.pathname); if (!match) { throw new ERR_INVALID_URL(url); } - const [ , base64, body ] = match; - return { - source: Buffer.from(body, base64 ? 'base64' : 'utf8') - }; + const { 1: base64, 2: body } = match; + source = Buffer.from(decodeURIComponent(body), base64 ? 'base64' : 'utf8'); } else { throw new ERR_INVALID_URL_SCHEME(['file', 'data']); } + if (manifest) { + manifest.assertIntegrity(parsed, source); + } + return { source }; } exports.defaultGetSource = defaultGetSource; diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/esm/loader.js nodejs-mozilla-12.22.12/lib/internal/modules/esm/loader.js --- nodejs-mozilla-12.18.1/lib/internal/modules/esm/loader.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/esm/loader.js 2022-04-05 07:17:03.000000000 +0000 @@ -1,9 +1,12 @@ 'use strict'; +// This is needed to avoid cycles in esm/resolve <-> cjs/loader +require('internal/modules/cjs/loader'); + const { FunctionPrototypeBind, ObjectSetPrototypeOf, - SafeMap, + SafeWeakMap, } = primordials; const { @@ -49,7 +52,7 @@ this.moduleMap = new ModuleMap(); // Map of already-loaded CJS modules to use - this.cjsCache = new SafeMap(); + this.cjsCache = new SafeWeakMap(); // This hook is called before the first root module is imported. It's a // function that returns a piece of code that runs as a sloppy-mode script. diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/esm/module_job.js nodejs-mozilla-12.22.12/lib/internal/modules/esm/module_job.js --- nodejs-mozilla-12.18.1/lib/internal/modules/esm/module_job.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/esm/module_job.js 2022-04-05 07:17:03.000000000 +0000 @@ -8,6 +8,7 @@ SafePromise, StringPrototypeIncludes, StringPrototypeMatch, + StringPrototypeReplace, StringPrototypeSplit, } = primordials; @@ -101,20 +102,27 @@ ' does not provide an export named')) { const splitStack = StringPrototypeSplit(e.stack, '\n'); const parentFileUrl = splitStack[0]; - const childSpecifier = StringPrototypeMatch(e.message, /module '(.*)' does/)[1]; + const [, childSpecifier, name] = StringPrototypeMatch(e.message, + /module '(.*)' does not provide an export named '(.+)'/); const childFileURL = - await this.loader.resolve(childSpecifier, parentFileUrl); + await this.loader.resolve(childSpecifier, parentFileUrl); const format = await this.loader.getFormat(childFileURL); if (format === 'commonjs') { const importStatement = splitStack[1]; - const namedImports = StringPrototypeMatch(importStatement, /{.*}/)[0]; - e.message = `The requested module '${childSpecifier}' is expected ` + - 'to be of type CommonJS, which does not support named exports. ' + - 'CommonJS modules can be imported by importing the default ' + - 'export.\n' + - 'For example:\n' + - `import pkg from '${childSpecifier}';\n` + - `const ${namedImports} = pkg;`; + // TODO(@ctavan): The original error stack only provides the single + // line which causes the error. For multi-line import statements we + // cannot generate an equivalent object descructuring assignment by + // just parsing the error stack. + const oneLineNamedImports = StringPrototypeMatch(importStatement, /{.*}/); + const destructuringAssignment = oneLineNamedImports && + StringPrototypeReplace(oneLineNamedImports, /\s+as\s+/g, ': '); + e.message = `Named export '${name}' not found. The requested module` + + ` '${childSpecifier}' is a CommonJS module, which may not support` + + ' all module.exports as named exports.\nCommonJS modules can ' + + 'always be imported via the default export, for example using:' + + `\n\nimport pkg from '${childSpecifier}';\n${ + destructuringAssignment ? + `const ${destructuringAssignment} = pkg;\n` : ''}`; const newStack = StringPrototypeSplit(e.stack, '\n'); newStack[3] = `SyntaxError: ${e.message}`; e.stack = ArrayPrototypeJoin(newStack, '\n'); diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/esm/module_map.js nodejs-mozilla-12.22.12/lib/internal/modules/esm/module_map.js --- nodejs-mozilla-12.18.1/lib/internal/modules/esm/module_map.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/esm/module_map.js 2022-04-05 07:17:03.000000000 +0000 @@ -4,7 +4,9 @@ const { SafeMap, } = primordials; -const debug = require('internal/util/debuglog').debuglog('esm'); +let debug = require('internal/util/debuglog').debuglog('esm', (fn) => { + debug = fn; +}); const { ERR_INVALID_ARG_TYPE } = require('internal/errors').codes; const { validateString } = require('internal/validators'); diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/esm/resolve.js nodejs-mozilla-12.22.12/lib/internal/modules/esm/resolve.js --- nodejs-mozilla-12.18.1/lib/internal/modules/esm/resolve.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/esm/resolve.js 2022-04-05 07:17:03.000000000 +0000 @@ -10,11 +10,11 @@ ObjectGetOwnPropertyNames, ObjectPrototypeHasOwnProperty, RegExp, + RegExpPrototypeTest, SafeMap, SafeSet, String, StringPrototypeEndsWith, - StringPrototypeIncludes, StringPrototypeIndexOf, StringPrototypeReplace, StringPrototypeSlice, @@ -22,21 +22,15 @@ StringPrototypeStartsWith, StringPrototypeSubstr, } = primordials; -const assert = require('internal/assert'); const internalFS = require('internal/fs/utils'); const { NativeModule } = require('internal/bootstrap/loaders'); const { - closeSync, - fstatSync, - openSync, - readFileSync, realpathSync, statSync, Stats, } = require('fs'); const { getOptionValue } = require('internal/options'); -const { sep, relative } = require('path'); -const { Module: CJSModule } = require('internal/modules/cjs/loader'); +const { sep, relative, resolve } = require('path'); const preserveSymlinks = getOptionValue('--preserve-symlinks'); const preserveSymlinksMain = getOptionValue('--preserve-symlinks-main'); const typeFlag = getOptionValue('--input-type'); @@ -48,14 +42,19 @@ ERR_INVALID_PACKAGE_CONFIG, ERR_INVALID_PACKAGE_TARGET, ERR_MODULE_NOT_FOUND, + ERR_PACKAGE_IMPORT_NOT_DEFINED, ERR_PACKAGE_PATH_NOT_EXPORTED, ERR_UNSUPPORTED_DIR_IMPORT, ERR_UNSUPPORTED_ESM_URL_SCHEME, } = require('internal/errors').codes; +const { Module: CJSModule } = require('internal/modules/cjs/loader'); -const DEFAULT_CONDITIONS = ObjectFreeze(['node', 'import']); +const packageJsonReader = require('internal/modules/package_json_reader'); +const userConditions = getOptionValue('--conditions'); +const DEFAULT_CONDITIONS = ObjectFreeze(['node', 'import', ...userConditions]); const DEFAULT_CONDITIONS_SET = new SafeSet(DEFAULT_CONDITIONS); + function getConditionsSet(conditions) { if (conditions !== undefined && conditions !== DEFAULT_CONDITIONS) { if (!ArrayIsArray(conditions)) { @@ -78,39 +77,21 @@ } } -function readIfFile(path) { - let fd; - try { - fd = openSync(path, 'r'); - } catch { - return undefined; - } - try { - if (!fstatSync(fd).isFile()) return undefined; - return readFileSync(fd, 'utf8'); - } finally { - closeSync(fd); - } -} - -function getPackageConfig(path, base) { +function getPackageConfig(path, specifier, base) { const existing = packageJSONCache.get(path); if (existing !== undefined) { - if (!existing.isValid) { - throw new ERR_INVALID_PACKAGE_CONFIG(path, fileURLToPath(base), false); - } return existing; } - - const source = readIfFile(path); + const source = packageJsonReader.read(path).string; if (source === undefined) { const packageConfig = { + pjsonPath: path, exists: false, main: undefined, name: undefined, - isValid: true, type: 'none', - exports: undefined + exports: undefined, + imports: undefined, }; packageJSONCache.set(path, packageConfig); return packageConfig; @@ -119,45 +100,43 @@ let packageJSON; try { packageJSON = JSONParse(source); - } catch { - const packageConfig = { - exists: true, - main: undefined, - name: undefined, - isValid: false, - type: 'none', - exports: undefined - }; - packageJSONCache.set(path, packageConfig); - return packageConfig; + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : '') + fileURLToPath(base || specifier), + error.message + ); } - let { main, name, type } = packageJSON; + let { imports, main, name, type } = packageJSON; const { exports } = packageJSON; + if (typeof imports !== 'object' || imports === null) imports = undefined; if (typeof main !== 'string') main = undefined; if (typeof name !== 'string') name = undefined; // Ignore unknown types for forwards compatibility if (type !== 'module' && type !== 'commonjs') type = 'none'; const packageConfig = { + pjsonPath: path, exists: true, main, name, - isValid: true, type, - exports + exports, + imports, }; packageJSONCache.set(path, packageConfig); return packageConfig; } -function getPackageScopeConfig(resolved, base) { +function getPackageScopeConfig(resolved) { let packageJSONUrl = new URL('./package.json', resolved); while (true) { const packageJSONPath = packageJSONUrl.pathname; if (StringPrototypeEndsWith(packageJSONPath, 'node_modules/package.json')) break; - const packageConfig = getPackageConfig(fileURLToPath(packageJSONUrl), base); + const packageConfig = getPackageConfig(fileURLToPath(packageJSONUrl), + resolved); if (packageConfig.exists) return packageConfig; const lastPackageJSONUrl = packageJSONUrl; @@ -167,31 +146,35 @@ // (can't just check "/package.json" for Windows support). if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) break; } + const packageJSONPath = fileURLToPath(packageJSONUrl); const packageConfig = { + pjsonPath: packageJSONPath, exists: false, main: undefined, name: undefined, - isValid: true, type: 'none', - exports: undefined + exports: undefined, + imports: undefined, }; - packageJSONCache.set(fileURLToPath(packageJSONUrl), packageConfig); + packageJSONCache.set(packageJSONPath, packageConfig); return packageConfig; } -/* +/** * Legacy CommonJS main resolution: * 1. let M = pkg_url + (json main field) * 2. TRY(M, M.js, M.json, M.node) * 3. TRY(M/index.js, M/index.json, M/index.node) * 4. TRY(pkg_url/index.js, pkg_url/index.json, pkg_url/index.node) * 5. NOT_FOUND + * @param {string | URL} url + * @returns {boolean} */ function fileExists(url) { - return tryStatSync(fileURLToPath(url)).isFile(); + return tryStatSync(url).isFile(); } -function legacyMainResolve(packageJSONUrl, packageConfig) { +function legacyMainResolve(packageJSONUrl, packageConfig, base) { let guess; if (packageConfig.main !== undefined) { // Note: fs check redundances will be handled by Descriptor cache here. @@ -236,7 +219,8 @@ return guess; } // Not found. - return undefined; + throw new ERR_MODULE_NOT_FOUND( + fileURLToPath(new URL('.', packageJSONUrl)), fileURLToPath(base)); } function resolveExtensionsWithTryExactName(search) { @@ -254,89 +238,133 @@ return undefined; } -function resolveIndex(search) { +function resolveDirectoryEntry(search) { + const dirPath = fileURLToPath(search); + const pkgJsonPath = resolve(dirPath, 'package.json'); + if (fileExists(pkgJsonPath)) { + const pkgJson = packageJsonReader.read(pkgJsonPath); + if (pkgJson.containsKeys) { + const { main } = JSONParse(pkgJson.string); + if (main != null) { + const mainUrl = pathToFileURL(resolve(dirPath, main)); + return resolveExtensionsWithTryExactName(mainUrl); + } + } + } return resolveExtensions(new URL('index', search)); } +const encodedSepRegEx = /%2F|%5C/i; function finalizeResolution(resolved, base) { + if (RegExpPrototypeTest(encodedSepRegEx, resolved.pathname)) + throw new ERR_INVALID_MODULE_SPECIFIER( + resolved.pathname, 'must not include encoded "/" or "\\" characters', + fileURLToPath(base)); + + const path = fileURLToPath(resolved); if (getOptionValue('--experimental-specifier-resolution') === 'node') { let file = resolveExtensionsWithTryExactName(resolved); if (file !== undefined) return file; - if (!StringPrototypeEndsWith(resolved.pathname, '/')) { - file = resolveIndex(new URL(`${resolved.pathname}/`, base)); + if (!StringPrototypeEndsWith(path, '/')) { + file = resolveDirectoryEntry(new URL(`${resolved}/`)); + if (file !== undefined) return file; } else { - file = resolveIndex(resolved); + return resolveDirectoryEntry(resolved) || resolved; } - if (file !== undefined) return file; throw new ERR_MODULE_NOT_FOUND( resolved.pathname, fileURLToPath(base), 'module'); } - const path = fileURLToPath(resolved); - const stats = tryStatSync(path); - + const stats = tryStatSync(StringPrototypeEndsWith(path, '/') ? + StringPrototypeSlice(path, -1) : path); if (stats.isDirectory()) { - const err = new ERR_UNSUPPORTED_DIR_IMPORT( - path || resolved.pathname, fileURLToPath(base)); + const err = new ERR_UNSUPPORTED_DIR_IMPORT(path, fileURLToPath(base)); err.url = String(resolved); throw err; } else if (!stats.isFile()) { throw new ERR_MODULE_NOT_FOUND( - path || resolved.pathname, fileURLToPath(base), 'module'); + path || resolved.pathname, base && fileURLToPath(base), 'module'); } return resolved; } +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, packageJSONUrl && fileURLToPath(new URL('.', packageJSONUrl)), + fileURLToPath(base)); +} + function throwExportsNotFound(subpath, packageJSONUrl, base) { throw new ERR_PACKAGE_PATH_NOT_EXPORTED( - fileURLToPath(packageJSONUrl), subpath, fileURLToPath(base)); + fileURLToPath(new URL('.', packageJSONUrl)), subpath, + base && fileURLToPath(base)); } -function throwSubpathInvalid(subpath, packageJSONUrl, base) { - throw new ERR_INVALID_MODULE_SPECIFIER( - fileURLToPath(packageJSONUrl), subpath, fileURLToPath(base)); +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? + 'imports' : 'exports'}" resolution of ${fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER(subpath, reason, + base && fileURLToPath(base)); } -function throwExportsInvalid( - subpath, target, packageJSONUrl, base) { +function throwInvalidPackageTarget( + subpath, target, packageJSONUrl, internal, base) { if (typeof target === 'object' && target !== null) { target = JSONStringify(target, null, ''); - } else if (ArrayIsArray(target)) { - target = `[${target}]`; } else { target = `${target}`; } throw new ERR_INVALID_PACKAGE_TARGET( - fileURLToPath(packageJSONUrl), null, subpath, target, fileURLToPath(base)); + fileURLToPath(new URL('.', packageJSONUrl)), subpath, target, + internal, base && fileURLToPath(base)); } -function resolveExportsTargetString( - target, subpath, match, packageJSONUrl, base) { - if (target[0] !== '.' || target[1] !== '/' || - (subpath !== '' && target[target.length - 1] !== '/')) { - throwExportsInvalid(match, target, packageJSONUrl, base); +const invalidSegmentRegEx = /(^|\\|\/)(\.\.?|node_modules)(\\|\/|$)/; +const patternRegEx = /\*/g; + +function resolvePackageTargetString( + target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== '' && !pattern && target[target.length - 1] !== '/') + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + + if (!StringPrototypeStartsWith(target, './')) { + if (internal && !StringPrototypeStartsWith(target, '../') && + !StringPrototypeStartsWith(target, '/')) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch {} + if (!isURL) { + const exportTarget = pattern ? + StringPrototypeReplace(target, patternRegEx, subpath) : + target + subpath; + return packageResolve(exportTarget, packageJSONUrl, conditions); + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); } + if (RegExpPrototypeTest(invalidSegmentRegEx, StringPrototypeSlice(target, 2))) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); const resolvedPath = resolved.pathname; const packagePath = new URL('.', packageJSONUrl).pathname; - if (!StringPrototypeStartsWith(resolvedPath, packagePath) || - StringPrototypeIncludes( - resolvedPath, '/node_modules/', packagePath.length - 1)) { - throwExportsInvalid(match, target, packageJSONUrl, base); - } + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); if (subpath === '') return resolved; - const subpathResolved = new URL(subpath, resolved); - const subpathResolvedPath = subpathResolved.pathname; - if (!StringPrototypeStartsWith(subpathResolvedPath, resolvedPath) || - StringPrototypeIncludes(subpathResolvedPath, - '/node_modules/', packagePath.length - 1)) { - throwSubpathInvalid(match + subpath, packageJSONUrl, base); - } - return subpathResolved; + + if (RegExpPrototypeTest(invalidSegmentRegEx, subpath)) + throwInvalidSubpath(match + subpath, packageJSONUrl, internal, base); + + if (pattern) + return new URL(StringPrototypeReplace(resolved.href, patternRegEx, + subpath)); + return new URL(subpath, resolved); } /** @@ -349,36 +377,40 @@ return keyNum >= 0 && keyNum < 0xFFFF_FFFF; } -function resolveExportsTarget( - packageJSONUrl, target, subpath, packageSubpath, base, conditions) { +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, + base, pattern, internal, conditions) { if (typeof target === 'string') { - const resolved = resolveExportsTargetString( - target, subpath, packageSubpath, packageJSONUrl, base); - return finalizeResolution(resolved, base); + return resolvePackageTargetString( + target, subpath, packageSubpath, packageJSONUrl, base, pattern, internal, + conditions); } else if (ArrayIsArray(target)) { if (target.length === 0) - throwExportsNotFound(packageSubpath, packageJSONUrl, base); + return null; let lastException; for (let i = 0; i < target.length; i++) { const targetItem = target[i]; let resolved; try { - resolved = resolveExportsTarget( - packageJSONUrl, targetItem, subpath, packageSubpath, base, - conditions); + resolved = resolvePackageTarget( + packageJSONUrl, targetItem, subpath, packageSubpath, base, pattern, + internal, conditions); } catch (e) { lastException = e; - if (e.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED' || - e.code === 'ERR_INVALID_PACKAGE_TARGET') { + if (e.code === 'ERR_INVALID_PACKAGE_TARGET') continue; - } throw e; } - - return finalizeResolution(resolved, base); + if (resolved === undefined) + continue; + if (resolved === null) { + lastException = null; + continue; + } + return resolved; } - assert(lastException !== undefined); + if (lastException === undefined || lastException === null) + return lastException; throw lastException; } else if (typeof target === 'object' && target !== null) { const keys = ObjectGetOwnPropertyNames(target); @@ -386,29 +418,28 @@ const key = keys[i]; if (isArrayIndex(key)) { throw new ERR_INVALID_PACKAGE_CONFIG( - fileURLToPath(packageJSONUrl), - '"exports" cannot contain numeric property keys'); + fileURLToPath(packageJSONUrl), base, + '"exports" cannot contain numeric property keys.'); } } for (let i = 0; i < keys.length; i++) { const key = keys[i]; if (key === 'default' || conditions.has(key)) { const conditionalTarget = target[key]; - try { - return resolveExportsTarget( - packageJSONUrl, conditionalTarget, subpath, packageSubpath, base, - conditions); - } catch (e) { - if (e.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') continue; - throw e; - } + const resolved = resolvePackageTarget( + packageJSONUrl, conditionalTarget, subpath, packageSubpath, base, + pattern, internal, conditions); + if (resolved === undefined) + continue; + return resolved; } } - throwExportsNotFound(packageSubpath, packageJSONUrl, base); + return undefined; } else if (target === null) { - throwExportsNotFound(packageSubpath, packageJSONUrl, base); + return null; } - throwExportsInvalid(packageSubpath, target, packageJSONUrl, base); + throwInvalidPackageTarget(packageSubpath, target, packageJSONUrl, internal, + base); } function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { @@ -425,7 +456,7 @@ isConditionalSugar = curIsConditionalSugar; } else if (isConditionalSugar !== curIsConditionalSugar) { throw new ERR_INVALID_PACKAGE_CONFIG( - fileURLToPath(packageJSONUrl), + fileURLToPath(packageJSONUrl), base, '"exports" cannot contain some keys starting with \'.\' and some not.' + ' The exports object must either be an object of package subpath keys' + ' or an object of main entry condition name keys only.'); @@ -434,39 +465,6 @@ return isConditionalSugar; } - -function packageMainResolve(packageJSONUrl, packageConfig, base, conditions) { - if (packageConfig.exists) { - const exports = packageConfig.exports; - if (exports !== undefined) { - if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) { - return resolveExportsTarget(packageJSONUrl, exports, '', '', base, - conditions); - } else if (typeof exports === 'object' && exports !== null) { - const target = exports['.']; - if (target !== undefined) - return resolveExportsTarget(packageJSONUrl, target, '', '', base, - conditions); - } - - throw new ERR_PACKAGE_PATH_NOT_EXPORTED(packageJSONUrl, '.'); - } - if (getOptionValue('--experimental-specifier-resolution') === 'node') { - if (packageConfig.main !== undefined) { - return finalizeResolution( - new URL(packageConfig.main, packageJSONUrl), base); - } else { - return finalizeResolution( - new URL('index', packageJSONUrl), base); - } - } - return legacyMainResolve(packageJSONUrl, packageConfig); - } - - throw new ERR_MODULE_NOT_FOUND( - fileURLToPath(new URL('.', packageJSONUrl)), fileURLToPath(base)); -} - /** * @param {URL} packageJSONUrl * @param {string} packageSubpath @@ -477,44 +475,107 @@ */ function packageExportsResolve( packageJSONUrl, packageSubpath, packageConfig, base, conditions) { - const exports = packageConfig.exports; - if (exports === undefined || - isConditionalExportsMainSugar(exports, packageJSONUrl, base)) { - throwExportsNotFound(packageSubpath, packageJSONUrl, base); - } - + let exports = packageConfig.exports; + if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) + exports = { '.': exports }; if (ObjectPrototypeHasOwnProperty(exports, packageSubpath)) { const target = exports[packageSubpath]; - const resolved = resolveExportsTarget( - packageJSONUrl, target, '', packageSubpath, base, conditions); - return finalizeResolution(resolved, base); + const resolved = resolvePackageTarget( + packageJSONUrl, target, '', packageSubpath, base, false, false, conditions + ); + if (resolved === null || resolved === undefined) + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + return { resolved, exact: true }; } let bestMatch = ''; const keys = ObjectGetOwnPropertyNames(exports); for (let i = 0; i < keys.length; i++) { const key = keys[i]; - if (key[key.length - 1] !== '/') continue; - if (StringPrototypeStartsWith(packageSubpath, key) && + if (key[key.length - 1] === '*' && + StringPrototypeStartsWith(packageSubpath, + StringPrototypeSlice(key, 0, -1)) && + packageSubpath.length >= key.length && key.length > bestMatch.length) { bestMatch = key; + } else if (key[key.length - 1] === '/' && + StringPrototypeStartsWith(packageSubpath, key) && + key.length > bestMatch.length) { + bestMatch = key; } } if (bestMatch) { const target = exports[bestMatch]; - const subpath = StringPrototypeSubstr(packageSubpath, bestMatch.length); - const resolved = resolveExportsTarget( - packageJSONUrl, target, subpath, packageSubpath, base, conditions); - return finalizeResolution(resolved, base); + const pattern = bestMatch[bestMatch.length - 1] === '*'; + const subpath = StringPrototypeSubstr(packageSubpath, bestMatch.length - + (pattern ? 1 : 0)); + const resolved = resolvePackageTarget(packageJSONUrl, target, subpath, + bestMatch, base, pattern, false, + conditions); + if (resolved === null || resolved === undefined) + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + return { resolved, exact: pattern }; } throwExportsNotFound(packageSubpath, packageJSONUrl, base); } +function packageImportsResolve(name, base, conditions) { + if (name === '#' || StringPrototypeStartsWith(name, '#/')) { + const reason = 'is not a valid internal imports specifier name'; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base); + if (packageConfig.exists) { + packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name)) { + const resolved = resolvePackageTarget( + packageJSONUrl, imports[name], '', name, base, false, true, conditions + ); + if (resolved !== null) + return { resolved, exact: true }; + } else { + let bestMatch = ''; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key[key.length - 1] === '*' && + StringPrototypeStartsWith(name, + StringPrototypeSlice(key, 0, -1)) && + name.length >= key.length && + key.length > bestMatch.length) { + bestMatch = key; + } else if (key[key.length - 1] === '/' && + StringPrototypeStartsWith(name, key) && + key.length > bestMatch.length) { + bestMatch = key; + } + } + + if (bestMatch) { + const target = imports[bestMatch]; + const pattern = bestMatch[bestMatch.length - 1] === '*'; + const subpath = StringPrototypeSubstr(name, bestMatch.length - + (pattern ? 1 : 0)); + const resolved = resolvePackageTarget( + packageJSONUrl, target, subpath, bestMatch, base, pattern, true, + conditions); + if (resolved !== null) + return { resolved, exact: pattern }; + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + function getPackageType(url) { - const packageConfig = getPackageScopeConfig(url, url); + const packageConfig = getPackageScopeConfig(url); return packageConfig.type; } @@ -552,36 +613,21 @@ if (!validPackageName) { throw new ERR_INVALID_MODULE_SPECIFIER( - specifier, undefined, fileURLToPath(base)); + specifier, 'is not a valid package name', fileURLToPath(base)); } - const packageSubpath = separatorIndex === -1 ? - '' : '.' + StringPrototypeSlice(specifier, separatorIndex); + const packageSubpath = '.' + (separatorIndex === -1 ? '' : + StringPrototypeSlice(specifier, separatorIndex)); // ResolveSelf - const packageConfig = getPackageScopeConfig(base, base); + const packageConfig = getPackageScopeConfig(base); if (packageConfig.exists) { - // TODO(jkrems): Find a way to forward the pair/iterator already generated - // while executing GetPackageScopeConfig - let packageJSONUrl; - for (const [ filename, packageConfigCandidate ] of packageJSONCache) { - if (packageConfig === packageConfigCandidate) { - packageJSONUrl = pathToFileURL(filename); - break; - } - } - if (packageJSONUrl !== undefined && - packageConfig.name === packageName && - packageConfig.exports !== undefined) { - if (packageSubpath === './') { - return new URL('./', packageJSONUrl); - } else if (packageSubpath === '') { - return packageMainResolve(packageJSONUrl, packageConfig, base, - conditions); - } else { - return packageExportsResolve( - packageJSONUrl, packageSubpath, packageConfig, base, conditions); - } + const packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); + if (packageConfig.name === packageName && + packageConfig.exports !== undefined && packageConfig.exports !== null) { + return packageExportsResolve( + packageJSONUrl, packageSubpath, packageConfig, base, conditions + ).resolved; } } @@ -590,8 +636,8 @@ let packageJSONPath = fileURLToPath(packageJSONUrl); let lastPath; do { - const stat = tryStatSync( - StringPrototypeSlice(packageJSONPath, 0, packageJSONPath.length - 13)); + const stat = tryStatSync(StringPrototypeSlice(packageJSONPath, 0, + packageJSONPath.length - 13)); if (!stat.isDirectory()) { lastPath = packageJSONPath; packageJSONUrl = new URL((isScoped ? @@ -602,19 +648,14 @@ } // Package match. - const packageConfig = getPackageConfig(packageJSONPath, base); - if (packageSubpath === './') { - return new URL('./', packageJSONUrl); - } else if (packageSubpath === '') { - return packageMainResolve(packageJSONUrl, packageConfig, base, - conditions); - } else if (packageConfig.exports !== undefined) { + const packageConfig = getPackageConfig(packageJSONPath, specifier, base); + if (packageConfig.exports !== undefined && packageConfig.exports !== null) return packageExportsResolve( - packageJSONUrl, packageSubpath, packageConfig, base, conditions); - } else { - return finalizeResolution( - new URL(packageSubpath, packageJSONUrl), base); - } + packageJSONUrl, packageSubpath, packageConfig, base, conditions + ).resolved; + if (packageSubpath === '.') + return legacyMainResolve(packageJSONUrl, packageConfig, base); + return new URL(packageSubpath, packageJSONUrl); // Cross-platform root check. } while (packageJSONPath.length !== lastPath.length); @@ -655,11 +696,13 @@ let resolved; if (shouldBeTreatedAsRelativeOrAbsolutePath(specifier)) { resolved = new URL(specifier, base); + } else if (specifier[0] === '#') { + ({ resolved } = packageImportsResolve(specifier, base, conditions)); } else { try { resolved = new URL(specifier); } catch { - return packageResolve(specifier, base, conditions); + resolved = packageResolve(specifier, base, conditions); } } return finalizeResolution(resolved, base); @@ -721,13 +764,13 @@ }; } } catch {} - if (parsed && parsed.protocol === 'nodejs:') + if (parsed && parsed.protocol === 'node:') return { url: specifier }; if (parsed && parsed.protocol !== 'file:' && parsed.protocol !== 'data:') - throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(); + throw new ERR_UNSUPPORTED_ESM_URL_SCHEME(parsed); if (NativeModule.canBeRequiredByUsers(specifier)) { return { - url: 'nodejs:' + specifier + url: 'node:' + specifier }; } if (parentURL && StringPrototypeStartsWith(parentURL, 'data:')) { @@ -793,5 +836,8 @@ module.exports = { DEFAULT_CONDITIONS, defaultResolve, - getPackageType + encodedSepRegEx, + getPackageType, + packageExportsResolve, + packageImportsResolve }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/esm/translators.js nodejs-mozilla-12.22.12/lib/internal/modules/esm/translators.js --- nodejs-mozilla-12.18.1/lib/internal/modules/esm/translators.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/esm/translators.js 2022-04-05 07:17:03.000000000 +0000 @@ -3,19 +3,36 @@ /* global WebAssembly */ const { + Boolean, JSONParse, + ObjectPrototypeHasOwnProperty, ObjectKeys, PromisePrototypeCatch, PromiseReject, + RegExpPrototypeTest, SafeMap, + SafeSet, StringPrototypeReplace, + StringPrototypeSplit, + StringPrototypeStartsWith, } = primordials; +let _TYPES = null; +function lazyTypes() { + if (_TYPES !== null) return _TYPES; + return _TYPES = require('internal/util/types'); +} + +const { readFileSync } = require('fs'); +const { extname, isAbsolute } = require('path'); const { stripBOM, loadNativeModule } = require('internal/modules/cjs/helpers'); -const CJSModule = require('internal/modules/cjs/loader').Module; +const { + Module: CJSModule, + cjsParseCache +} = require('internal/modules/cjs/loader'); const internalURLModule = require('internal/url'); const { defaultGetSource } = require( 'internal/modules/esm/get_source'); @@ -24,20 +41,61 @@ const createDynamicModule = require( 'internal/modules/esm/create_dynamic_module'); const { fileURLToPath, URL } = require('url'); -const { debuglog } = require('internal/util/debuglog'); +let debug = require('internal/util/debuglog').debuglog('esm', (fn) => { + debug = fn; +}); const { emitExperimentalWarning } = require('internal/util'); -const { ERR_UNKNOWN_BUILTIN_MODULE } = require('internal/errors').codes; +const { + ERR_UNKNOWN_BUILTIN_MODULE, + ERR_INVALID_RETURN_PROPERTY_VALUE +} = require('internal/errors').codes; const { maybeCacheSourceMap } = require('internal/source_map/source_map_cache'); const moduleWrap = internalBinding('module_wrap'); const { ModuleWrap } = moduleWrap; const { getOptionValue } = require('internal/options'); const experimentalImportMetaResolve = getOptionValue('--experimental-import-meta-resolve'); +const asyncESM = require('internal/process/esm_loader'); -const debug = debuglog('esm'); +let cjsParse; +async function initCJSParse() { + if (typeof WebAssembly === 'undefined') { + cjsParse = require('internal/deps/cjs-module-lexer/lexer').parse; + } else { + const { parse, init } = + require('internal/deps/cjs-module-lexer/dist/lexer'); + await init(); + cjsParse = parse; + } +} const translators = new SafeMap(); exports.translators = translators; +exports.enrichCJSError = enrichCJSError; + +let DECODER = null; +function assertBufferSource(body, allowString, hookName) { + if (allowString && typeof body === 'string') { + return; + } + const { isArrayBufferView, isAnyArrayBuffer } = lazyTypes(); + if (isArrayBufferView(body) || isAnyArrayBuffer(body)) { + return; + } + throw new ERR_INVALID_RETURN_PROPERTY_VALUE( + `${allowString ? 'string, ' : ''}array buffer, or typed array`, + hookName, + 'source', + body + ); +} + +function stringify(body) { + if (typeof body === 'string') return body; + assertBufferSource(body, false, 'transformSource'); + DECODER = DECODER === null ? new TextDecoder() : DECODER; + return DECODER.decode(body); +} function errPath(url) { const parsed = new URL(url); @@ -47,21 +105,14 @@ return url; } -let esmLoader; async function importModuleDynamically(specifier, { url }) { - if (!esmLoader) { - esmLoader = require('internal/process/esm_loader').ESMLoader; - } - return esmLoader.import(specifier, url); + return asyncESM.ESMLoader.import(specifier, url); } function createImportMetaResolve(defaultParentUrl) { return async function resolve(specifier, parentUrl = defaultParentUrl) { - if (!esmLoader) { - esmLoader = require('internal/process/esm_loader').ESMLoader; - } return PromisePrototypeCatch( - esmLoader.resolve(specifier, parentUrl), + asyncESM.ESMLoader.resolve(specifier, parentUrl), (error) => ( error.code === 'ERR_UNSUPPORTED_DIR_IMPORT' ? error.url : PromiseReject(error)) @@ -76,13 +127,14 @@ meta.url = url; } -// Strategy for loading a standard JavaScript module +// Strategy for loading a standard JavaScript module. translators.set('module', async function moduleStrategy(url) { let { source } = await this._getSource( url, { format: 'module' }, defaultGetSource); - source = `${source}`; + assertBufferSource(source, true, 'getSource'); ({ source } = await this._transformSource( source, { url, format: 'module' }, defaultTransformSource)); + source = stringify(source); maybeCacheSourceMap(url, source); debug(`Translating StandardModule ${url}`); const module = new ModuleWrap(url, undefined, source, 0, 0); @@ -93,44 +145,140 @@ return module; }); + +function enrichCJSError(err) { + const stack = StringPrototypeSplit(err.stack, '\n'); + /* + The regular expression below targets the most common import statement + usage. However, some cases are not matching, cases like import statement + after a comment block and/or after a variable definition. + */ + if (StringPrototypeStartsWith(err.message, 'Unexpected token \'export\'') || + (RegExpPrototypeTest(/^\s*import(?=[ {'"*])\s*(?![ (])/, stack[1]))) { + // Emit the warning synchronously because we are in the middle of handling + // a SyntaxError that will throw and likely terminate the process before an + // asynchronous warning would be emitted. + process.emitWarning( + 'To load an ES module, set "type": "module" in the package.json or use ' + + 'the .mjs extension.', + undefined, + undefined, + undefined, + true); + } +} + // Strategy for loading a node-style CommonJS module const isWindows = process.platform === 'win32'; const winSepRegEx = /\//g; -translators.set('commonjs', function commonjsStrategy(url, isMain) { +translators.set('commonjs', async function commonjsStrategy(url, isMain) { debug(`Translating CJSModule ${url}`); - const pathname = internalURLModule.fileURLToPath(new URL(url)); - const cached = this.cjsCache.get(url); - if (cached) { - this.cjsCache.delete(url); - return cached; - } - const module = CJSModule._cache[ - isWindows ? StringPrototypeReplace(pathname, winSepRegEx, '\\') : pathname - ]; - if (module && module.loaded) { - const exports = module.exports; - return new ModuleWrap(url, undefined, ['default'], function() { - this.setExport('default', exports); - }); - } - return new ModuleWrap(url, undefined, ['default'], function() { + + let filename = internalURLModule.fileURLToPath(new URL(url)); + if (isWindows) + filename = StringPrototypeReplace(filename, winSepRegEx, '\\'); + + if (!cjsParse) await initCJSParse(); + const { module, exportNames } = cjsPreparseModuleExports(filename); + const namesWithDefault = exportNames.has('default') ? + [...exportNames] : ['default', ...exportNames]; + + return new ModuleWrap(url, undefined, namesWithDefault, function() { debug(`Loading CJSModule ${url}`); - // We don't care about the return val of _load here because Module#load - // will handle it for us by checking the loader registry and filling the - // exports like above - CJSModule._load(pathname, undefined, isMain); + + let exports; + if (asyncESM.ESMLoader.cjsCache.has(module)) { + exports = asyncESM.ESMLoader.cjsCache.get(module); + asyncESM.ESMLoader.cjsCache.delete(module); + } else { + try { + exports = CJSModule._load(filename, undefined, isMain); + } catch (err) { + enrichCJSError(err); + throw err; + } + } + + for (const exportName of exportNames) { + if (!ObjectPrototypeHasOwnProperty(exports, exportName) || + exportName === 'default') + continue; + // We might trigger a getter -> dont fail. + let value; + try { + value = exports[exportName]; + } catch {} + this.setExport(exportName, value); + } + this.setExport('default', exports); }); }); +function cjsPreparseModuleExports(filename) { + let module = CJSModule._cache[filename]; + if (module) { + const cached = cjsParseCache.get(module); + if (cached) + return { module, exportNames: cached.exportNames }; + } + const loaded = Boolean(module); + if (!loaded) { + module = new CJSModule(filename); + module.filename = filename; + module.paths = CJSModule._nodeModulePaths(module.path); + CJSModule._cache[filename] = module; + } + + let source; + try { + source = readFileSync(filename, 'utf8'); + } catch {} + + let exports, reexports; + try { + ({ exports, reexports } = cjsParse(source || '')); + } catch { + exports = []; + reexports = []; + } + + const exportNames = new SafeSet(exports); + + // Set first for cycles. + cjsParseCache.set(module, { source, exportNames, loaded }); + + if (reexports.length) { + module.filename = filename; + module.paths = CJSModule._nodeModulePaths(module.path); + } + for (const reexport of reexports) { + let resolved; + try { + resolved = CJSModule._resolveFilename(reexport, module); + } catch { + continue; + } + const ext = extname(resolved); + if ((ext === '.js' || ext === '.cjs' || !CJSModule._extensions[ext]) && + isAbsolute(resolved)) { + const { exportNames: reexportNames } = cjsPreparseModuleExports(resolved); + for (const name of reexportNames) + exportNames.add(name); + } + } + + return { module, exportNames }; +} + // Strategy for loading a node builtin CommonJS module that isn't // through normal resolution translators.set('builtin', async function builtinStrategy(url) { debug(`Translating BuiltinModule ${url}`); - // Slice 'nodejs:' scheme - const id = url.slice(7); + // Slice 'node:' scheme + const id = url.slice(5); const module = loadNativeModule(id, url, true); - if (!url.startsWith('nodejs:') || !module) { - throw new ERR_UNKNOWN_BUILTIN_MODULE(id); + if (!url.startsWith('node:') || !module) { + throw new ERR_UNKNOWN_BUILTIN_MODULE(url); } debug(`Loading BuiltinModule ${url}`); return module.getESMFacade(); @@ -157,9 +305,10 @@ } let { source } = await this._getSource( url, { format: 'json' }, defaultGetSource); - source = `${source}`; + assertBufferSource(source, true, 'getSource'); ({ source } = await this._transformSource( source, { url, format: 'json' }, defaultTransformSource)); + source = stringify(source); if (pathname) { // A require call could have been called on the same file during loading and // that resolves synchronously. To make sure we always return the identical @@ -200,8 +349,10 @@ emitExperimentalWarning('Importing Web Assembly modules'); let { source } = await this._getSource( url, { format: 'wasm' }, defaultGetSource); + assertBufferSource(source, false, 'getSource'); ({ source } = await this._transformSource( source, { url, format: 'wasm' }, defaultTransformSource)); + assertBufferSource(source, false, 'transformSource'); debug(`Translating WASMModule ${url}`); let compiled; try { diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/package_json_reader.js nodejs-mozilla-12.22.12/lib/internal/modules/package_json_reader.js --- nodejs-mozilla-12.18.1/lib/internal/modules/package_json_reader.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/package_json_reader.js 2022-04-05 07:17:03.000000000 +0000 @@ -0,0 +1,37 @@ +'use strict'; + +const { SafeMap } = primordials; +const { internalModuleReadJSON } = internalBinding('fs'); +const { pathToFileURL } = require('url'); +const { toNamespacedPath } = require('path'); + +const cache = new SafeMap(); + +/** + * + * @param {string} jsonPath + */ +function read(jsonPath) { + if (cache.has(jsonPath)) { + return cache.get(jsonPath); + } + + const [string, containsKeys] = internalModuleReadJSON( + toNamespacedPath(jsonPath) + ); + const result = { string, containsKeys }; + const { getOptionValue } = require('internal/options'); + if (string !== undefined) { + const manifest = getOptionValue('--experimental-policy') ? + require('internal/process/policy').manifest : + null; + if (manifest) { + const jsonURL = pathToFileURL(jsonPath); + manifest.assertIntegrity(jsonURL, string); + } + } + cache.set(jsonPath, result); + return result; +} + +module.exports = { read }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/modules/run_main.js nodejs-mozilla-12.22.12/lib/internal/modules/run_main.js --- nodejs-mozilla-12.18.1/lib/internal/modules/run_main.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/modules/run_main.js 2022-04-05 07:17:03.000000000 +0000 @@ -40,21 +40,10 @@ function runMainESM(mainPath) { const esmLoader = require('internal/process/esm_loader'); const { pathToFileURL } = require('internal/url'); - const { hasUncaughtExceptionCaptureCallback } = - require('internal/process/execution'); - return esmLoader.initializeLoader().then(() => { + esmLoader.loadESM((ESMLoader) => { const main = path.isAbsolute(mainPath) ? pathToFileURL(mainPath).href : mainPath; - return esmLoader.ESMLoader.import(main); - }).catch((e) => { - if (hasUncaughtExceptionCaptureCallback()) { - process._fatalException(e); - return; - } - internalBinding('errors').triggerUncaughtException( - e, - true /* fromPromise */ - ); + return ESMLoader.import(main); }); } diff -Nru nodejs-mozilla-12.18.1/lib/internal/net.js nodejs-mozilla-12.22.12/lib/internal/net.js --- nodejs-mozilla-12.18.1/lib/internal/net.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/net.js 2022-04-05 07:17:03.000000000 +0000 @@ -25,7 +25,7 @@ `(?:${v6Seg}:){2}(?:(:${v6Seg}){0,3}:${v4Str}|(:${v6Seg}){1,5}|:)|` + `(?:${v6Seg}:){1}(?:(:${v6Seg}){0,4}:${v4Str}|(:${v6Seg}){1,6}|:)|` + `(?::((?::${v6Seg}){0,5}:${v4Str}|(?::${v6Seg}){1,7}|:))` + -')(%[0-9a-zA-Z]{1,})?$'); +')(%[0-9a-zA-Z-.:]{1,})?$'); function isIPv4(s) { return IPv4Reg.test(s); diff -Nru nodejs-mozilla-12.18.1/lib/internal/options.js nodejs-mozilla-12.22.12/lib/internal/options.js --- nodejs-mozilla-12.18.1/lib/internal/options.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/options.js 2022-04-05 07:17:03.000000000 +0000 @@ -1,6 +1,6 @@ 'use strict'; -const { getOptions } = internalBinding('options'); +const { getOptions, shouldNotRegisterESMLoader } = internalBinding('options'); const { options, aliases } = getOptions(); let warnOnAllowUnauthorized = true; @@ -32,4 +32,5 @@ aliases, getOptionValue, getAllowUnauthorized, + shouldNotRegisterESMLoader }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/per_context/primordials.js nodejs-mozilla-12.22.12/lib/internal/per_context/primordials.js --- nodejs-mozilla-12.18.1/lib/internal/per_context/primordials.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/per_context/primordials.js 2022-04-05 07:17:03.000000000 +0000 @@ -106,6 +106,16 @@ class SafePromise extends Promise {} ); +// Create copies of URI handling functions +[ + decodeURI, + decodeURIComponent, + encodeURI, + encodeURIComponent, +].forEach((fn) => { + primordials[fn.name] = fn; +}); + // Create copies of the namespace objects [ 'JSON', diff -Nru nodejs-mozilla-12.18.1/lib/internal/policy/manifest.js nodejs-mozilla-12.22.12/lib/internal/policy/manifest.js --- nodejs-mozilla-12.18.1/lib/internal/policy/manifest.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/policy/manifest.js 2022-04-05 07:17:03.000000000 +0000 @@ -4,6 +4,7 @@ ArrayIsArray, Map, MapPrototypeSet, + ObjectCreate, ObjectEntries, ObjectFreeze, ObjectSetPrototypeOf, @@ -21,7 +22,9 @@ ERR_MANIFEST_INVALID_RESOURCE_FIELD, ERR_MANIFEST_UNKNOWN_ONERROR, } = require('internal/errors').codes; -const debug = require('internal/util/debuglog').debuglog('policy'); +let debug = require('internal/util/debuglog').debuglog('policy', (fn) => { + debug = fn; +}); const SRI = require('internal/policy/sri'); const crypto = require('crypto'); const { Buffer } = require('buffer'); @@ -29,7 +32,6 @@ const { createHash, timingSafeEqual } = crypto; const HashUpdate = uncurryThis(crypto.Hash.prototype.update); const HashDigest = uncurryThis(crypto.Hash.prototype.digest); -const BufferEquals = uncurryThis(Buffer.prototype.equals); const BufferToString = uncurryThis(Buffer.prototype.toString); const kRelativeURLStringPattern = /^\.{0,2}\//; const { getOptionValue } = require('internal/options'); @@ -54,9 +56,47 @@ } class Manifest { + /** + * @type {Map} + * + * Used to compare a resource to the content body at the resource. + * `true` is used to signify that all integrities are allowed, otherwise, + * SRI strings are parsed to compare with the body. + * + * This stores strings instead of eagerly parsing SRI strings + * and only converts them to SRI data structures when needed. + * This avoids needing to parse all SRI strings at startup even + * if some never end up being used. + */ #integrities = new SafeMap(); + /** + * @type {Map true | URL>} + * + * Used to find where a dependency is located. + * + * This stores functions to lazily calculate locations as needed. + * `true` is used to signify that the location is not specified + * by the manifest and default resolution should be allowed. + */ #dependencies = new SafeMap(); + /** + * @type {(err: Error) => void} + * + * Performs default action for what happens when a manifest encounters + * a violation such as abort()ing or exiting the process, throwing the error, + * or logging the error. + */ #reaction = null; + /** + * `obj` should match the policy file format described in the docs + * it is expected to not have prototype pollution issues either by reassigning + * the prototype to `null` for values or by running prior to any user code. + * + * `manifestURL` is a URL to resolve relative locations against. + * + * @param {object} obj + * @param {string} manifestURL + */ constructor(obj, manifestURL) { const integrities = this.#integrities; const dependencies = this.#dependencies; @@ -96,35 +136,14 @@ let integrity = manifestEntries[i][1].integrity; if (!integrity) integrity = null; if (integrity != null) { - debug(`Manifest contains integrity for url ${originalHREF}`); + debug('Manifest contains integrity for url %s', originalHREF); if (typeof integrity === 'string') { - const sri = ObjectFreeze(SRI.parse(integrity)); if (integrities.has(resourceHREF)) { - const old = integrities.get(resourceHREF); - let mismatch = false; - - if (old.length !== sri.length) { - mismatch = true; - } else { - compare: - for (let sriI = 0; sriI < sri.length; sriI++) { - for (let oldI = 0; oldI < old.length; oldI++) { - if (sri[sriI].algorithm === old[oldI].algorithm && - BufferEquals(sri[sriI].value, old[oldI].value) && - sri[sriI].options === old[oldI].options) { - continue compare; - } - } - mismatch = true; - break compare; - } - } - - if (mismatch) { + if (integrities.get(resourceHREF) !== integrity) { throw new ERR_MANIFEST_INTEGRITY_MISMATCH(resourceURL); } } - integrities.set(resourceHREF, sri); + integrities.set(resourceHREF, integrity); } else if (integrity === true) { integrities.set(resourceHREF, true); } else { @@ -136,7 +155,7 @@ let dependencyMap = manifestEntries[i][1].dependencies; if (dependencyMap === null || dependencyMap === undefined) { - dependencyMap = {}; + dependencyMap = ObjectCreate(null); } if (typeof dependencyMap === 'object' && !ArrayIsArray(dependencyMap)) { /** @@ -145,32 +164,31 @@ const dependencyRedirectList = (toSpecifier) => { if (toSpecifier in dependencyMap !== true) { return null; - } else { - const to = dependencyMap[toSpecifier]; - if (to === true) { - return true; - } - if (parsedURLs.has(to)) { - return parsedURLs.get(to); - } else if (canBeRequiredByUsers(to)) { - const href = `node:${to}`; - const resolvedURL = new URL(href); - parsedURLs.set(to, resolvedURL); - parsedURLs.set(href, resolvedURL); - return resolvedURL; - } else if (RegExpPrototypeTest(kRelativeURLStringPattern, to)) { - const resolvedURL = new URL(to, manifestURL); - const href = resourceURL.href; - parsedURLs.set(to, resolvedURL); - parsedURLs.set(href, resolvedURL); - return resolvedURL; - } - const resolvedURL = new URL(to); + } + const to = dependencyMap[toSpecifier]; + if (to === true) { + return true; + } + if (parsedURLs.has(to)) { + return parsedURLs.get(to); + } else if (canBeRequiredByUsers(to)) { + const href = `node:${to}`; + const resolvedURL = new URL(href); + parsedURLs.set(to, resolvedURL); + parsedURLs.set(href, resolvedURL); + return resolvedURL; + } else if (RegExpPrototypeTest(kRelativeURLStringPattern, to)) { + const resolvedURL = new URL(to, manifestURL); const href = resourceURL.href; parsedURLs.set(to, resolvedURL); parsedURLs.set(href, resolvedURL); return resolvedURL; } + const resolvedURL = new URL(to); + const href = resourceURL.href; + parsedURLs.set(to, resolvedURL); + parsedURLs.set(href, resolvedURL); + return resolvedURL; }; dependencies.set(resourceHREF, dependencyRedirectList); } else if (dependencyMap === true) { @@ -199,13 +217,18 @@ assertIntegrity(url, content) { const href = `${url}`; - debug(`Checking integrity of ${href}`); + debug('Checking integrity of %s', href); const integrities = this.#integrities; const realIntegrities = new Map(); if (integrities.has(href)) { - const integrityEntries = integrities.get(href); + let integrityEntries = integrities.get(href); if (integrityEntries === true) return true; + if (typeof integrityEntries === 'string') { + const sri = ObjectFreeze(SRI.parse(integrityEntries)); + integrities.set(href, sri); + integrityEntries = sri; + } // Avoid clobbered Symbol.iterator for (let i = 0; i < integrityEntries.length; i++) { const { diff -Nru nodejs-mozilla-12.18.1/lib/internal/policy/sri.js nodejs-mozilla-12.22.12/lib/internal/policy/sri.js --- nodejs-mozilla-12.18.1/lib/internal/policy/sri.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/policy/sri.js 2022-04-05 07:17:03.000000000 +0000 @@ -1,17 +1,19 @@ 'use strict'; -// Value of https://w3c.github.io/webappsec-subresource-integrity/#the-integrity-attribute +// Utility to parse the value of +// https://w3c.github.io/webappsec-subresource-integrity/#the-integrity-attribute const { ObjectDefineProperty, ObjectFreeze, + ObjectGetPrototypeOf, ObjectSeal, + ObjectSetPrototypeOf, RegExp, RegExpPrototypeExec, RegExpPrototypeTest, StringPrototypeSlice, } = primordials; -// Returns [{algorithm, value (in base64 string), options,}] const { ERR_SRI_PARSE } = require('internal/errors').codes; @@ -21,7 +23,8 @@ // Base64 const kHASH_VALUE = '[A-Za-z0-9+/]+[=]{0,2}'; const kHASH_EXPRESSION = `(${kHASH_ALGO})-(${kHASH_VALUE})`; -const kOPTION_EXPRESSION = `(${kVCHAR}*)`; +// Ungrouped since unused +const kOPTION_EXPRESSION = `(?:${kVCHAR}*)`; const kHASH_WITH_OPTIONS = `${kHASH_EXPRESSION}(?:[?](${kOPTION_EXPRESSION}))?`; const kSRIPattern = RegExp(`(${kWSP}*)(?:${kHASH_WITH_OPTIONS})`, 'g'); ObjectSeal(kSRIPattern); @@ -29,9 +32,10 @@ ObjectSeal(kAllWSP); const BufferFrom = require('buffer').Buffer.from; +const RealArrayPrototype = ObjectGetPrototypeOf([]); +// Returns {algorithm, value (in base64 string), options,}[] const parse = (str) => { - kSRIPattern.lastIndex = 0; let prevIndex = 0; let match; const entries = []; @@ -54,7 +58,7 @@ options: match[4] === undefined ? null : match[4], }) }); - prevIndex = prevIndex + match[0].length; + prevIndex += match[0].length; } if (prevIndex !== str.length) { @@ -62,7 +66,7 @@ throw new ERR_SRI_PARSE(str, str.charAt(prevIndex), prevIndex); } } - return entries; + return ObjectSetPrototypeOf(entries, RealArrayPrototype); }; module.exports = { diff -Nru nodejs-mozilla-12.18.1/lib/internal/process/esm_loader.js nodejs-mozilla-12.22.12/lib/internal/process/esm_loader.js --- nodejs-mozilla-12.18.1/lib/internal/process/esm_loader.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/process/esm_loader.js 2022-04-05 07:17:03.000000000 +0000 @@ -3,8 +3,10 @@ const { ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING, } = require('internal/errors').codes; -const assert = require('internal/assert'); const { Loader } = require('internal/modules/esm/loader'); +const { + hasUncaughtExceptionCaptureCallback, +} = require('internal/process/execution'); const { pathToFileURL } = require('internal/url'); const { getModuleFromWrap, @@ -23,13 +25,6 @@ }; exports.importModuleDynamicallyCallback = async function(wrap, specifier) { - assert(calledInitialize === true || !userLoader); - if (!calledInitialize) { - process.emitWarning( - 'The ESM module loader is experimental.', - 'ExperimentalWarning', undefined); - calledInitialize = true; - } const { callbackMap } = internalBinding('module_wrap'); if (callbackMap.has(wrap)) { const { importModuleDynamically } = callbackMap.get(wrap); @@ -44,14 +39,7 @@ let ESMLoader = new Loader(); exports.ESMLoader = ESMLoader; -let calledInitialize = false; -exports.initializeLoader = initializeLoader; async function initializeLoader() { - assert(calledInitialize === false); - process.emitWarning( - 'The ESM module loader is experimental.', - 'ExperimentalWarning', undefined); - calledInitialize = true; if (!userLoader) return; let cwd; @@ -73,3 +61,19 @@ return exports.ESMLoader = ESMLoader; })(); } + +exports.loadESM = async function loadESM(callback) { + try { + await initializeLoader(); + await callback(ESMLoader); + } catch (err) { + if (hasUncaughtExceptionCaptureCallback()) { + process._fatalException(err); + return; + } + internalBinding('errors').triggerUncaughtException( + err, + true /* fromPromise */ + ); + } +}; diff -Nru nodejs-mozilla-12.18.1/lib/internal/process/execution.js nodejs-mozilla-12.22.12/lib/internal/process/execution.js --- nodejs-mozilla-12.18.1/lib/internal/process/execution.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/process/execution.js 2022-04-05 07:17:03.000000000 +0000 @@ -153,7 +153,7 @@ report.writeReport(er ? er.message : 'Exception', 'Exception', null, - er ? er.stack : undefined); + er ? er : {}); } } catch {} // Ignore the exception. Diagnostic reporting is unavailable. } @@ -186,10 +186,10 @@ do { emitAfter(executionAsyncId()); } while (hasAsyncIdStack()); - // Or completely empty the id stack. - } else { - clearAsyncIdStack(); } + // And completely empty the id stack, including anything that may be + // cached on the native side. + clearAsyncIdStack(); return true; }; diff -Nru nodejs-mozilla-12.18.1/lib/internal/process/per_thread.js nodejs-mozilla-12.22.12/lib/internal/process/per_thread.js --- nodejs-mozilla-12.18.1/lib/internal/process/per_thread.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/process/per_thread.js 2022-04-05 07:17:03.000000000 +0000 @@ -17,6 +17,7 @@ SetPrototype, SetPrototypeHas, StringPrototypeReplace, + Uint32Array, } = primordials; const { diff -Nru nodejs-mozilla-12.18.1/lib/internal/process/report.js nodejs-mozilla-12.22.12/lib/internal/process/report.js --- nodejs-mozilla-12.18.1/lib/internal/process/report.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/process/report.js 2022-04-05 07:17:03.000000000 +0000 @@ -25,7 +25,7 @@ throw new ERR_INVALID_ARG_TYPE('err', 'Object', err); } - return nr.writeReport('JavaScript API', 'API', file, err.stack); + return nr.writeReport('JavaScript API', 'API', file, err); }, getReport(err) { if (err === undefined) @@ -33,7 +33,7 @@ else if (err === null || typeof err !== 'object') throw new ERR_INVALID_ARG_TYPE('err', 'Object', err); - return JSONParse(nr.getReport(err.stack)); + return JSONParse(nr.getReport(err)); }, get directory() { return nr.getDirectory(); diff -Nru nodejs-mozilla-12.18.1/lib/internal/process/warning.js nodejs-mozilla-12.22.12/lib/internal/process/warning.js --- nodejs-mozilla-12.18.1/lib/internal/process/warning.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/process/warning.js 2022-04-05 07:17:03.000000000 +0000 @@ -11,13 +11,21 @@ let fs; let fd; let warningFile; +let options; function lazyOption() { // This will load `warningFile` only once. If the flag is not set, // `warningFile` will be set to an empty string. if (warningFile === undefined) { - warningFile = require('internal/options') - .getOptionValue('--redirect-warnings'); + options = require('internal/options'); + if (options.getOptionValue('--diagnostic-dir') !== '') { + warningFile = options.getOptionValue('--diagnostic-dir'); + } + if (options.getOptionValue('--redirect-warnings') !== '') { + warningFile = options.getOptionValue('--redirect-warnings'); + } else { + warningFile = ''; + } } return warningFile; } diff -Nru nodejs-mozilla-12.18.1/lib/internal/querystring.js nodejs-mozilla-12.22.12/lib/internal/querystring.js --- nodejs-mozilla-12.18.1/lib/internal/querystring.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/querystring.js 2022-04-05 07:17:03.000000000 +0000 @@ -36,19 +36,25 @@ let out = ''; let lastPos = 0; + let i = 0; - for (let i = 0; i < len; i++) { + outer: + for (; i < len; i++) { let c = str.charCodeAt(i); // ASCII - if (c < 0x80) { - if (noEscapeTable[c] === 1) - continue; - if (lastPos < i) - out += str.slice(lastPos, i); - lastPos = i + 1; - out += hexTable[c]; - continue; + while (c < 0x80) { + if (noEscapeTable[c] !== 1) { + if (lastPos < i) + out += str.slice(lastPos, i); + lastPos = i + 1; + out += hexTable[c]; + } + + if (++i === len) + break outer; + + c = str.charCodeAt(i); } if (lastPos < i) diff -Nru nodejs-mozilla-12.18.1/lib/internal/repl/history.js nodejs-mozilla-12.22.12/lib/internal/repl/history.js --- nodejs-mozilla-12.18.1/lib/internal/repl/history.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/repl/history.js 2022-04-05 07:17:03.000000000 +0000 @@ -8,7 +8,9 @@ const path = require('path'); const fs = require('fs'); const os = require('os'); -const debug = require('internal/util/debuglog').debuglog('repl'); +let debug = require('internal/util/debuglog').debuglog('repl', (fn) => { + debug = fn; +}); const { clearTimeout, setTimeout } = require('timers'); // XXX(chrisdickinson): The 15ms debounce value is somewhat arbitrary. diff -Nru nodejs-mozilla-12.18.1/lib/internal/repl/utils.js nodejs-mozilla-12.22.12/lib/internal/repl/utils.js --- nodejs-mozilla-12.18.1/lib/internal/repl/utils.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/repl/utils.js 2022-04-05 07:17:03.000000000 +0000 @@ -40,7 +40,9 @@ inspect, } = require('internal/util/inspect'); -const debug = require('internal/util/debuglog').debuglog('repl'); +let debug = require('internal/util/debuglog').debuglog('repl', (fn) => { + debug = fn; +}); const previewOptions = { colors: false, diff -Nru nodejs-mozilla-12.18.1/lib/internal/source_map/prepare_stack_trace.js nodejs-mozilla-12.22.12/lib/internal/source_map/prepare_stack_trace.js --- nodejs-mozilla-12.18.1/lib/internal/source_map/prepare_stack_trace.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/source_map/prepare_stack_trace.js 2022-04-05 07:17:03.000000000 +0000 @@ -4,7 +4,9 @@ Error, } = primordials; -const debug = require('internal/util/debuglog').debuglog('source_map'); +let debug = require('internal/util/debuglog').debuglog('source_map', (fn) => { + debug = fn; +}); const { findSourceMap } = require('internal/source_map/source_map_cache'); const { kNoOverride, diff -Nru nodejs-mozilla-12.18.1/lib/internal/source_map/source_map_cache.js nodejs-mozilla-12.22.12/lib/internal/source_map/source_map_cache.js --- nodejs-mozilla-12.18.1/lib/internal/source_map/source_map_cache.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/source_map/source_map_cache.js 2022-04-05 07:17:03.000000000 +0000 @@ -22,7 +22,9 @@ // See https://sourcemaps.info/spec.html for SourceMap V3 specification. const { Buffer } = require('buffer'); -const debug = require('internal/util/debuglog').debuglog('source_map'); +let debug = require('internal/util/debuglog').debuglog('source_map', (fn) => { + debug = fn; +}); const { dirname, resolve } = require('path'); const fs = require('fs'); const { getOptionValue } = require('internal/options'); @@ -192,9 +194,8 @@ if (ObjectKeys(obj).length === 0) { return undefined; - } else { - return obj; } + return obj; } // Since WeakMap can't be iterated over, we use Module._cache's @@ -243,9 +244,8 @@ } if (sourceMap && sourceMap.data) { return new SourceMap(sourceMap.data); - } else { - return undefined; } + return undefined; } module.exports = { diff -Nru nodejs-mozilla-12.18.1/lib/internal/source_map/source_map.js nodejs-mozilla-12.22.12/lib/internal/source_map/source_map.js --- nodejs-mozilla-12.18.1/lib/internal/source_map/source_map.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/source_map/source_map.js 2022-04-05 07:17:03.000000000 +0000 @@ -113,7 +113,8 @@ } /** - * Implements Source Map V3 model. See http://code.google.com/p/closure-compiler/wiki/SourceMaps + * Implements Source Map V3 model. + * See https://github.com/google/closure-compiler/wiki/Source-Maps * for format description. * @constructor * @param {string} sourceMappingURL @@ -196,15 +197,14 @@ return {}; } else if (!entry) { return {}; - } else { - return { - generatedLine: entry[0], - generatedColumn: entry[1], - originalSource: entry[2], - originalLine: entry[3], - originalColumn: entry[4] - }; } + return { + generatedLine: entry[0], + generatedColumn: entry[1], + originalSource: entry[2], + originalLine: entry[3], + originalColumn: entry[4] + }; } /** diff -Nru nodejs-mozilla-12.18.1/lib/internal/stream_base_commons.js nodejs-mozilla-12.22.12/lib/internal/stream_base_commons.js --- nodejs-mozilla-12.18.1/lib/internal/stream_base_commons.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/stream_base_commons.js 2022-04-05 07:17:03.000000000 +0000 @@ -37,7 +37,9 @@ const kHandle = Symbol('kHandle'); const kSession = Symbol('kSession'); -const debug = require('internal/util/debuglog').debuglog('stream'); +let debug = require('internal/util/debuglog').debuglog('stream', (fn) => { + debug = fn; +}); const kBuffer = Symbol('kBuffer'); const kBufferGen = Symbol('kBufferGen'); const kBufferCb = Symbol('kBufferCb'); @@ -202,7 +204,10 @@ } if (nread !== UV_EOF) { - return stream.destroy(errnoException(nread, 'read')); + // CallJSOnreadMethod expects the return value to be a buffer. + // Ref: https://github.com/nodejs/node/pull/34375 + stream.destroy(errnoException(nread, 'read')); + return; } // Defer this until we actually emit end @@ -219,8 +224,12 @@ // test-https-truncate test. if (handle.readStop) { const err = handle.readStop(); - if (err) - return stream.destroy(errnoException(err, 'read')); + if (err) { + // CallJSOnreadMethod expects the return value to be a buffer. + // Ref: https://github.com/nodejs/node/pull/34375 + stream.destroy(errnoException(err, 'read')); + return; + } } // Push a null to signal the end of data. diff -Nru nodejs-mozilla-12.18.1/lib/internal/streams/buffer_list.js nodejs-mozilla-12.22.12/lib/internal/streams/buffer_list.js --- nodejs-mozilla-12.18.1/lib/internal/streams/buffer_list.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/streams/buffer_list.js 2022-04-05 07:17:03.000000000 +0000 @@ -2,6 +2,7 @@ const { SymbolIterator, + Uint8Array, } = primordials; const { Buffer } = require('buffer'); diff -Nru nodejs-mozilla-12.18.1/lib/internal/streams/pipeline.js nodejs-mozilla-12.22.12/lib/internal/streams/pipeline.js --- nodejs-mozilla-12.18.1/lib/internal/streams/pipeline.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/streams/pipeline.js 2022-04-05 07:17:03.000000000 +0000 @@ -17,7 +17,7 @@ } = require('internal/errors').codes; function isRequest(stream) { - return stream.setHeader && typeof stream.abort === 'function'; + return stream && stream.setHeader && typeof stream.abort === 'function'; } function destroyer(stream, reading, writing, callback) { @@ -43,22 +43,13 @@ // request.destroy just do .end - .abort is what we want if (isRequest(stream)) return stream.abort(); - if (typeof stream.destroy === 'function') { - if (stream.req && stream._writableState === undefined) { - // This is a ClientRequest - // TODO(mcollina): backward compatible fix to avoid crashing. - // Possibly remove in a later semver-major change. - stream.req.on('error', noop); - } - return stream.destroy(err); - } + if (isRequest(stream.req)) return stream.req.abort(); + if (typeof stream.destroy === 'function') return stream.destroy(err); callback(err || new ERR_STREAM_DESTROYED('pipe')); }; } -function noop() {} - function pipe(from, to) { return from.pipe(to); } diff -Nru nodejs-mozilla-12.18.1/lib/internal/timers.js nodejs-mozilla-12.22.12/lib/internal/timers.js --- nodejs-mozilla-12.18.1/lib/internal/timers.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/timers.js 2022-04-05 07:17:03.000000000 +0000 @@ -103,6 +103,8 @@ const async_id_symbol = Symbol('asyncId'); const trigger_async_id_symbol = Symbol('triggerId'); +const kHasPrimitive = Symbol('kHasPrimitive'); + const { ERR_INVALID_CALLBACK, ERR_OUT_OF_RANGE @@ -113,7 +115,9 @@ const PriorityQueue = require('internal/priority_queue'); const { inspect } = require('internal/util/inspect'); -const debug = require('internal/util/debuglog').debuglog('timer'); +let debug = require('internal/util/debuglog').debuglog('timer', (fn) => { + debug = fn; +}); // *Must* match Environment::ImmediateInfo::Fields in src/env.h. const kCount = 0; @@ -182,6 +186,7 @@ if (isRefed) incRefCount(); this[kRefed] = isRefed; + this[kHasPrimitive] = false; initAsyncResource(this, 'Timeout'); } @@ -595,6 +600,7 @@ trigger_async_id_symbol, Timeout, kRefed, + kHasPrimitive, initAsyncResource, setUnrefTimeout, getTimerDuration, diff -Nru nodejs-mozilla-12.18.1/lib/internal/trace_events_async_hooks.js nodejs-mozilla-12.22.12/lib/internal/trace_events_async_hooks.js --- nodejs-mozilla-12.18.1/lib/internal/trace_events_async_hooks.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/trace_events_async_hooks.js 2022-04-05 07:17:03.000000000 +0000 @@ -10,12 +10,16 @@ const { trace } = internalBinding('trace_events'); const async_wrap = internalBinding('async_wrap'); const async_hooks = require('async_hooks'); +const { + CHAR_LOWERCASE_B, + CHAR_LOWERCASE_E, +} = require('internal/constants'); // Use small letters such that chrome://tracing groups by the name. // The behavior is not only useful but the same as the events emitted using // the specific C++ macros. -const kBeforeEvent = 'b'.charCodeAt(0); -const kEndEvent = 'e'.charCodeAt(0); +const kBeforeEvent = CHAR_LOWERCASE_B; +const kEndEvent = CHAR_LOWERCASE_E; const kTraceEventCategory = 'node,node.async_hooks'; const kEnabled = Symbol('enabled'); diff -Nru nodejs-mozilla-12.18.1/lib/internal/tty.js nodejs-mozilla-12.22.12/lib/internal/tty.js --- nodejs-mozilla-12.18.1/lib/internal/tty.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/tty.js 2022-04-05 07:17:03.000000000 +0000 @@ -125,7 +125,7 @@ env.NO_COLOR !== undefined || // The "dumb" special terminal, as defined by terminfo, doesn't support // ANSI color control codes. - // See http://invisible-island.net/ncurses/terminfo.ti.html#toc-_Specials + // See https://invisible-island.net/ncurses/terminfo.ti.html#toc-_Specials env.TERM === 'dumb') { return COLORS_2; } diff -Nru nodejs-mozilla-12.18.1/lib/internal/url.js nodejs-mozilla-12.22.12/lib/internal/url.js --- nodejs-mozilla-12.18.1/lib/internal/url.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/url.js 2022-04-05 07:17:03.000000000 +0000 @@ -14,6 +14,7 @@ Symbol, SymbolIterator, SymbolToStringTag, + decodeURIComponent, } = primordials; const { inspect } = require('internal/util/inspect'); @@ -27,6 +28,7 @@ const { ERR_ARG_NOT_ITERABLE, ERR_INVALID_ARG_TYPE, + ERR_INVALID_ARG_VALUE, ERR_INVALID_CALLBACK, ERR_INVALID_FILE_URL_HOST, ERR_INVALID_FILE_URL_PATH, @@ -228,9 +230,8 @@ return `${this.constructor.name} {\n ${output.join(',\n ')} }`; } else if (output.length) { return `${this.constructor.name} { ${output.join(separator)} }`; - } else { - return `${this.constructor.name} {}`; } + return `${this.constructor.name} {}`; } } @@ -1315,16 +1316,15 @@ // already taken care of that for us. Note that this only // causes IDNs with an appropriate `xn--` prefix to be decoded. return `\\\\${domainToUnicode(hostname)}${pathname}`; - } else { - // Otherwise, it's a local path that requires a drive letter - const letter = pathname.codePointAt(1) | 0x20; - const sep = pathname[2]; - if (letter < CHAR_LOWERCASE_A || letter > CHAR_LOWERCASE_Z || // a..z A..Z - (sep !== ':')) { - throw new ERR_INVALID_FILE_URL_PATH('must be absolute'); - } - return pathname.slice(1); } + // Otherwise, it's a local path that requires a drive letter + const letter = pathname.codePointAt(1) | 0x20; + const sep = pathname[2]; + if (letter < CHAR_LOWERCASE_A || letter > CHAR_LOWERCASE_Z || // a..z A..Z + (sep !== ':')) { + throw new ERR_INVALID_FILE_URL_PATH('must be absolute'); + } + return pathname.slice(1); } function getPathFromURLPosix(url) { @@ -1371,33 +1371,59 @@ const newlineRegEx = /\n/g; const carriageReturnRegEx = /\r/g; const tabRegEx = /\t/g; + +function encodePathChars(filepath) { + if (filepath.includes('%')) + filepath = filepath.replace(percentRegEx, '%25'); + // In posix, backslash is a valid character in paths: + if (!isWindows && filepath.includes('\\')) + filepath = filepath.replace(backslashRegEx, '%5C'); + if (filepath.includes('\n')) + filepath = filepath.replace(newlineRegEx, '%0A'); + if (filepath.includes('\r')) + filepath = filepath.replace(carriageReturnRegEx, '%0D'); + if (filepath.includes('\t')) + filepath = filepath.replace(tabRegEx, '%09'); + return filepath; +} + function pathToFileURL(filepath) { - let resolved = path.resolve(filepath); - // path.resolve strips trailing slashes so we must add them back - const filePathLast = filepath.charCodeAt(filepath.length - 1); - if ((filePathLast === CHAR_FORWARD_SLASH || - (isWindows && filePathLast === CHAR_BACKWARD_SLASH)) && - resolved[resolved.length - 1] !== path.sep) - resolved += '/'; const outURL = new URL('file://'); - if (resolved.includes('%')) - resolved = resolved.replace(percentRegEx, '%25'); - // In posix, "/" is a valid character in paths - if (!isWindows && resolved.includes('\\')) - resolved = resolved.replace(backslashRegEx, '%5C'); - if (resolved.includes('\n')) - resolved = resolved.replace(newlineRegEx, '%0A'); - if (resolved.includes('\r')) - resolved = resolved.replace(carriageReturnRegEx, '%0D'); - if (resolved.includes('\t')) - resolved = resolved.replace(tabRegEx, '%09'); - outURL.pathname = resolved; + if (isWindows && filepath.startsWith('\\\\')) { + // UNC path format: \\server\share\resource + const paths = filepath.split('\\'); + if (paths.length <= 3) { + throw new ERR_INVALID_ARG_VALUE( + 'filepath', + filepath, + 'Missing UNC resource path' + ); + } + const hostname = paths[2]; + if (hostname.length === 0) { + throw new ERR_INVALID_ARG_VALUE( + 'filepath', + filepath, + 'Empty UNC servername' + ); + } + outURL.hostname = domainToASCII(hostname); + outURL.pathname = encodePathChars(paths.slice(3).join('/')); + } else { + let resolved = path.resolve(filepath); + // path.resolve strips trailing slashes so we must add them back + const filePathLast = filepath.charCodeAt(filepath.length - 1); + if ((filePathLast === CHAR_FORWARD_SLASH || + (isWindows && filePathLast === CHAR_BACKWARD_SLASH)) && + resolved[resolved.length - 1] !== path.sep) + resolved += '/'; + outURL.pathname = encodePathChars(resolved); + } return outURL; } function isURLInstance(fileURLOrPath) { - return fileURLOrPath != null && fileURLOrPath[searchParams] && - fileURLOrPath[searchParams][searchParams]; + return fileURLOrPath != null && fileURLOrPath.href && fileURLOrPath.origin; } function toPathIfFileURL(fileURLOrPath) { diff -Nru nodejs-mozilla-12.18.1/lib/internal/util/comparisons.js nodejs-mozilla-12.22.12/lib/internal/util/comparisons.js --- nodejs-mozilla-12.18.1/lib/internal/util/comparisons.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/util/comparisons.js 2022-04-05 07:17:03.000000000 +0000 @@ -20,6 +20,7 @@ StringPrototypeValueOf, SymbolPrototypeValueOf, SymbolToStringTag, + Uint8Array, } = primordials; const { compare } = internalBinding('buffer'); diff -Nru nodejs-mozilla-12.18.1/lib/internal/util/debuglog.js nodejs-mozilla-12.22.12/lib/internal/util/debuglog.js --- nodejs-mozilla-12.18.1/lib/internal/util/debuglog.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/util/debuglog.js 2022-04-05 07:17:03.000000000 +0000 @@ -33,6 +33,8 @@ } } +function noop() {} + function debuglogImpl(set) { set = set.toUpperCase(); if (debugs[set] === undefined) { @@ -46,7 +48,7 @@ process.stderr.write(format('%s %s: %s\n', set, coloredPID, msg)); }; } else { - debugs[set] = null; + debugs[set] = noop; } } return debugs[set]; @@ -56,16 +58,17 @@ // so it needs to be called lazily in top scopes of internal modules // that may be loaded before these run time states are allowed to // be accessed. -function debuglog(set) { - let debug; - return function(...args) { - if (debug === undefined) { - // Only invokes debuglogImpl() when the debug function is - // called for the first time. - debug = debuglogImpl(set); - } - if (debug !== null) - debug(...args); +function debuglog(set, cb) { + let debug = (...args) => { + // Only invokes debuglogImpl() when the debug function is + // called for the first time. + debug = debuglogImpl(set); + if (typeof cb === 'function') + cb(debug); + debug(...args); + }; + return (...args) => { + debug(...args); }; } diff -Nru nodejs-mozilla-12.18.1/lib/internal/util/inspect.js nodejs-mozilla-12.22.12/lib/internal/util/inspect.js --- nodejs-mozilla-12.18.1/lib/internal/util/inspect.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/util/inspect.js 2022-04-05 07:17:03.000000000 +0000 @@ -12,6 +12,9 @@ DatePrototypeToString, ErrorPrototypeToString, Float32Array, + FunctionPrototypeCall, + FunctionPrototypeToString, + Int16Array, JSONStringify, Map, MapPrototype, @@ -24,6 +27,7 @@ Number, NumberIsNaN, NumberPrototypeValueOf, + Object, ObjectAssign, ObjectCreate, ObjectDefineProperty, @@ -36,6 +40,7 @@ ObjectPrototypeHasOwnProperty, ObjectPrototypePropertyIsEnumerable, ObjectSeal, + ObjectSetPrototypeOf, RegExp, RegExpPrototypeToString, Set, @@ -47,6 +52,10 @@ SymbolIterator, SymbolToStringTag, Uint16Array, + Uint32Array, + Uint8Array, + Uint8ArrayPrototype, + Uint8ClampedArray, uncurryThis, } = primordials; @@ -58,6 +67,7 @@ kRejected, previewEntries, getConstructorName: internalGetConstructorName, + getExternalValue, propertyFilter: { ALL_PROPERTIES, ONLY_ENUMERABLE @@ -126,7 +136,7 @@ ObjectGetOwnPropertyDescriptor(MapPrototype, 'size').get); const typedArraySizeGetter = uncurryThis( ObjectGetOwnPropertyDescriptor( - ObjectGetPrototypeOf(Uint8Array.prototype), 'length').get); + ObjectGetPrototypeOf(Uint8ArrayPrototype), 'length').get); let hexSlice; @@ -170,6 +180,10 @@ const coreModuleRegExp = /^ at (?:[^/\\(]+ \(|)((? { + let stylized; + try { + stylized = `${ctx.stylize(value, flavour)}`; + } catch {} + + if (typeof stylized !== 'string') return value; + // `stylized` is a string as it should be, which is safe to pass along. + return stylized; + }, null); + } + + return ret; } /** @@ -300,7 +341,7 @@ } }); -// Set Graphics Rendition http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +// Set Graphics Rendition https://en.wikipedia.org/wiki/ANSI_escape_code#graphics // Each color consists of an array with the color code as first entry and the // reset code as second entry. const defaultFG = 39; @@ -467,7 +508,8 @@ const style = inspect.styles[styleType]; if (style !== undefined) { const color = inspect.colors[style]; - return `\u001b[${color[0]}m${str}\u001b[${color[1]}m`; + if (color !== undefined) + return `\u001b[${color[0]}m${str}\u001b[${color[1]}m`; } return str; } @@ -715,7 +757,10 @@ // This makes sure the recurseTimes are reported as before while using // a counter internally. const depth = ctx.depth === null ? null : ctx.depth - recurseTimes; - const ret = maybeCustom.call(context, depth, getUserOptions(ctx)); + const isCrossContext = + proxy !== undefined || !(context instanceof Object); + const ret = FunctionPrototypeCall( + maybeCustom, context, depth, getUserOptions(ctx, isCrossContext)); // If the custom inspection method returned `this`, don't go into // infinite recursion. if (ret !== context) { @@ -931,8 +976,10 @@ } } else { if (keys.length === 0 && protoProps === undefined) { - if (isExternal(value)) - return ctx.stylize('[External]', 'special'); + if (isExternal(value)) { + const address = getExternalValue(value).toString(16); + return ctx.stylize(`[External: ${address}]`, 'special'); + } return `${getCtxStyle(value, constructor, tag)}{}`; } braces[0] = `${getCtxStyle(value, constructor, tag)}{`; @@ -1054,7 +1101,39 @@ return ctx.stylize(base, type.toLowerCase()); } +function getClassBase(value, constructor, tag) { + const hasName = ObjectPrototypeHasOwnProperty(value, 'name'); + const name = (hasName && value.name) || '(anonymous)'; + let base = `class ${name}`; + if (constructor !== 'Function' && constructor !== null) { + base += ` [${constructor}]`; + } + if (tag !== '' && constructor !== tag) { + base += ` [${tag}]`; + } + if (constructor !== null) { + const superName = ObjectGetPrototypeOf(value).name; + if (superName) { + base += ` extends ${superName}`; + } + } else { + base += ' extends [null prototype]'; + } + return `[${base}]`; +} + function getFunctionBase(value, constructor, tag) { + const stringified = FunctionPrototypeToString(value); + if (stringified.slice(0, 5) === 'class' && stringified.endsWith('}')) { + const slice = stringified.slice(5, -1); + const bracketIndex = slice.indexOf('{'); + if (bracketIndex !== -1 && + (!slice.slice(0, bracketIndex).includes('(') || + // Slow path to guarantee that it's indeed a class. + classRegExp.test(slice.replace(stripCommentsRegExp)))) { + return getClassBase(value, constructor, tag); + } + } let type = 'Function'; if (isGeneratorFunction(value)) { type = `Generator${type}`; @@ -1914,13 +1993,6 @@ return str; } -function prepareStringForGetStringWidth(str, removeControlChars) { - str = str.normalize('NFC'); - if (removeControlChars) - str = stripVTControlCharacters(str); - return str; -} - if (internalBinding('config').hasIntl) { const icu = internalBinding('icu'); // icu.getStringWidth(string, ambiguousAsFullWidth, expandEmojiSequence) @@ -1931,13 +2003,14 @@ getStringWidth = function getStringWidth(str, removeControlChars = true) { let width = 0; - str = prepareStringForGetStringWidth(str, removeControlChars); + if (removeControlChars) + str = stripVTControlCharacters(str); for (let i = 0; i < str.length; i++) { // Try to avoid calling into C++ by first handling the ASCII portion of // the string. If it is fully ASCII, we skip the C++ part. const code = str.charCodeAt(i); if (code >= 127) { - width += icu.getStringWidth(str.slice(i)); + width += icu.getStringWidth(str.slice(i).normalize('NFC')); break; } width += code >= 32 ? 1 : 0; @@ -1951,7 +2024,9 @@ getStringWidth = function getStringWidth(str, removeControlChars = true) { let width = 0; - str = prepareStringForGetStringWidth(str, removeControlChars); + if (removeControlChars) + str = stripVTControlCharacters(str); + str = str.normalize('NFC'); for (const char of str) { const code = char.codePointAt(0); if (isFullWidthCodePoint(code)) { @@ -1970,7 +2045,7 @@ */ const isFullWidthCodePoint = (code) => { // Code points are partially derived from: - // http://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt + // https://www.unicode.org/Public/UNIDATA/EastAsianWidth.txt return code >= 0x1100 && ( code <= 0x115f || // Hangul Jamo code === 0x2329 || // LEFT-POINTING ANGLE BRACKET @@ -2008,9 +2083,11 @@ const isZeroWidthCodePoint = (code) => { return code <= 0x1F || // C0 control codes - (code > 0x7F && code <= 0x9F) || // C1 control codes + (code >= 0x7F && code <= 0x9F) || // C1 control codes (code >= 0x300 && code <= 0x36F) || // Combining Diacritical Marks (code >= 0x200B && code <= 0x200F) || // Modifying Invisible Characters + // Combining Diacritical Marks for Symbols + (code >= 0x20D0 && code <= 0x20FF) || (code >= 0xFE00 && code <= 0xFE0F) || // Variation Selectors (code >= 0xFE20 && code <= 0xFE2F) || // Combining Half Marks (code >= 0xE0100 && code <= 0xE01EF); // Variation Selectors diff -Nru nodejs-mozilla-12.18.1/lib/internal/util/inspector.js nodejs-mozilla-12.22.12/lib/internal/util/inspector.js --- nodejs-mozilla-12.18.1/lib/internal/util/inspector.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/util/inspector.js 2022-04-05 07:17:03.000000000 +0000 @@ -1,6 +1,7 @@ 'use strict'; const { + ObjectDefineProperty, ObjectKeys, } = primordials; @@ -42,6 +43,9 @@ consoleFromNode[key] = consoleCall.bind(consoleFromNode, consoleFromVM[key], consoleFromNode[key]); + ObjectDefineProperty(consoleFromNode[key], 'name', { + value: key + }); } else { // Add additional console APIs from the inspector consoleFromNode[key] = consoleFromVM[key]; diff -Nru nodejs-mozilla-12.18.1/lib/internal/util/types.js nodejs-mozilla-12.22.12/lib/internal/util/types.js --- nodejs-mozilla-12.18.1/lib/internal/util/types.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/util/types.js 2022-04-05 07:17:03.000000000 +0000 @@ -5,10 +5,11 @@ ObjectGetOwnPropertyDescriptor, ObjectGetPrototypeOf, SymbolToStringTag, + Uint8ArrayPrototype, uncurryThis, } = primordials; -const TypedArrayPrototype = ObjectGetPrototypeOf(Uint8Array.prototype); +const TypedArrayPrototype = ObjectGetPrototypeOf(Uint8ArrayPrototype); const TypedArrayProto_toStringTag = uncurryThis( diff -Nru nodejs-mozilla-12.18.1/lib/internal/worker/io.js nodejs-mozilla-12.22.12/lib/internal/worker/io.js --- nodejs-mozilla-12.18.1/lib/internal/worker/io.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/worker/io.js 2022-04-05 07:17:03.000000000 +0000 @@ -31,7 +31,9 @@ const { Readable, Writable } = require('stream'); const EventEmitter = require('events'); const { inspect } = require('internal/util/inspect'); -const debug = require('internal/util/debuglog').debuglog('worker'); +let debug = require('internal/util/debuglog').debuglog('worker', (fn) => { + debug = fn; +}); const kIncrementsPortRef = Symbol('kIncrementsPortRef'); const kName = Symbol('kName'); @@ -206,12 +208,11 @@ this[kWritableCallbacks] = []; } - _write(chunk, encoding, cb) { + _writev(chunks, cb) { this[kPort].postMessage({ type: messageTypes.STDIO_PAYLOAD, stream: this[kName], - chunk, - encoding + chunks: chunks.map(({ chunk, encoding }) => ({ chunk, encoding })) }); this[kWritableCallbacks].push(cb); if (this[kPort][kWaitingStreams]++ === 0) @@ -222,7 +223,7 @@ this[kPort].postMessage({ type: messageTypes.STDIO_PAYLOAD, stream: this[kName], - chunk: null + chunks: [ { chunk: null, encoding: '' } ] }); cb(); } diff -Nru nodejs-mozilla-12.18.1/lib/internal/worker/js_transferable.js nodejs-mozilla-12.22.12/lib/internal/worker/js_transferable.js --- nodejs-mozilla-12.18.1/lib/internal/worker/js_transferable.js 1970-01-01 00:00:00.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/worker/js_transferable.js 2022-04-05 07:17:03.000000000 +0000 @@ -0,0 +1,39 @@ +'use strict'; +const { Error } = primordials; +const { + messaging_deserialize_symbol, + messaging_transfer_symbol, + messaging_clone_symbol, + messaging_transfer_list_symbol +} = internalBinding('symbols'); +const { + JSTransferable, + setDeserializerCreateObjectFunction +} = internalBinding('messaging'); + +function setup() { + // Register the handler that will be used when deserializing JS-based objects + // from .postMessage() calls. The format of `deserializeInfo` is generally + // 'module:Constructor', e.g. 'internal/fs/promises:FileHandle'. + setDeserializerCreateObjectFunction((deserializeInfo) => { + const [ module, ctor ] = deserializeInfo.split(':'); + const Ctor = require(module)[ctor]; + if (typeof Ctor !== 'function' || + !(Ctor.prototype instanceof JSTransferable)) { + // Not one of the official errors because one should not be able to get + // here without messing with Node.js internals. + // eslint-disable-next-line no-restricted-syntax + throw new Error(`Unknown deserialize spec ${deserializeInfo}`); + } + return new Ctor(); + }); +} + +module.exports = { + setup, + JSTransferable, + kClone: messaging_clone_symbol, + kDeserialize: messaging_deserialize_symbol, + kTransfer: messaging_transfer_symbol, + kTransferList: messaging_transfer_list_symbol +}; diff -Nru nodejs-mozilla-12.18.1/lib/internal/worker.js nodejs-mozilla-12.22.12/lib/internal/worker.js --- nodejs-mozilla-12.18.1/lib/internal/worker.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/internal/worker.js 2022-04-05 07:17:03.000000000 +0000 @@ -11,11 +11,13 @@ PromiseResolve, Symbol, SymbolFor, + Uint32Array, } = primordials; const EventEmitter = require('events'); const assert = require('internal/assert'); const path = require('path'); +const { timeOrigin } = internalBinding('performance'); const errorCodes = require('internal/errors').codes; const { @@ -42,7 +44,7 @@ ReadableWorkerStdio, WritableWorkerStdio } = workerIo; -const { deserializeError } = require('internal/error-serdes'); +const { deserializeError } = require('internal/error_serdes'); const { fileURLToPath, isURLInstance, pathToFileURL } = require('internal/url'); const { @@ -54,6 +56,7 @@ kMaxYoungGenerationSizeMb, kMaxOldGenerationSizeMb, kCodeRangeSizeMb, + kStackSizeMb, kTotalResourceLimitCount } = internalBinding('worker'); @@ -65,9 +68,13 @@ const kOnCouldNotSerializeErr = Symbol('kOnCouldNotSerializeErr'); const kOnErrorMessage = Symbol('kOnErrorMessage'); const kParentSideStdio = Symbol('kParentSideStdio'); +const kLoopStartTime = Symbol('kLoopStartTime'); +const kIsOnline = Symbol('kIsOnline'); const SHARE_ENV = SymbolFor('nodejs.worker_threads.SHARE_ENV'); -const debug = require('internal/util/debuglog').debuglog('worker'); +let debug = require('internal/util/debuglog').debuglog('worker', (fn) => { + debug = fn; +}); let cwdCounter; @@ -148,7 +155,8 @@ this[kHandle] = new WorkerImpl(url, env === process.env ? null : env, options.execArgv, - parseResourceLimits(options.resourceLimits)); + parseResourceLimits(options.resourceLimits), + !!options.trackUnmanagedFds); if (this[kHandle].invalidExecArgv) { throw new ERR_WORKER_INVALID_EXEC_ARGV(this[kHandle].invalidExecArgv); } @@ -189,7 +197,9 @@ transferList.push(...options.transferList); this[kPublicPort] = port1; - this[kPublicPort].on('message', (message) => this.emit('message', message)); + for (const event of ['message', 'messageerror']) { + this[kPublicPort].on(event, (message) => this.emit(event, message)); + } setupPortReferencing(this[kPublicPort], this, 'message'); this[kPort].postMessage({ argv, @@ -199,11 +209,20 @@ cwdCounter: cwdCounter || workerIo.sharedCwdCounter, workerData: options.workerData, publicPort: port2, + manifestURL: getOptionValue('--experimental-policy') ? + require('internal/process/policy').url : + null, manifestSrc: getOptionValue('--experimental-policy') ? require('internal/process/policy').src : null, hasStdin: !!options.stdin }, transferList); + // Use this to cache the Worker's loopStart value once available. + this[kLoopStartTime] = -1; + this[kIsOnline] = false; + this.performance = { + eventLoopUtilization: eventLoopUtilization.bind(this), + }; // Actually start the new thread now that everything is in place. this[kHandle].startThread(); } @@ -215,7 +234,7 @@ this[kDispose](); if (customErr) { debug(`[${threadId}] failing with custom error ${customErr} \ - and with reason {customErrReason}`); + and with reason ${customErrReason}`); this.emit('error', new errorCodes[customErr](customErrReason)); } this.emit('exit', code); @@ -235,6 +254,7 @@ [kOnMessage](message) { switch (message.type) { case messageTypes.UP_AND_RUNNING: + this[kIsOnline] = true; return this.emit('online'); case messageTypes.COULD_NOT_SERIALIZE_ERROR: return this[kOnCouldNotSerializeErr](); @@ -242,8 +262,11 @@ return this[kOnErrorMessage](message.error); case messageTypes.STDIO_PAYLOAD: { - const { stream, chunk, encoding } = message; - return this[kParentSideStdio][stream].push(chunk, encoding); + const { stream, chunks } = message; + const readable = this[kParentSideStdio][stream]; + for (const { chunk, encoding } of chunks) + readable.push(chunk, encoding); + return; } case messageTypes.STDIO_WANTS_MORE_DATA: { @@ -379,6 +402,8 @@ ret[kMaxYoungGenerationSizeMb] = obj.maxYoungGenerationSizeMb; if (typeof obj.codeRangeSizeMb === 'number') ret[kCodeRangeSizeMb] = obj.codeRangeSizeMb; + if (typeof obj.stackSizeMb === 'number') + ret[kStackSizeMb] = obj.stackSizeMb; return ret; } @@ -386,10 +411,57 @@ return { maxYoungGenerationSizeMb: float64arr[kMaxYoungGenerationSizeMb], maxOldGenerationSizeMb: float64arr[kMaxOldGenerationSizeMb], - codeRangeSizeMb: float64arr[kCodeRangeSizeMb] + codeRangeSizeMb: float64arr[kCodeRangeSizeMb], + stackSizeMb: float64arr[kStackSizeMb] }; } +function eventLoopUtilization(util1, util2) { + // TODO(trevnorris): Works to solve the thread-safe read/write issue of + // loopTime, but has the drawback that it can't be set until the event loop + // has had a chance to turn. So it will be impossible to read the ELU of + // a worker thread immediately after it's been created. + if (!this[kIsOnline] || !this[kHandle]) { + return { idle: 0, active: 0, utilization: 0 }; + } + + // Cache loopStart, since it's only written to once. + if (this[kLoopStartTime] === -1) { + this[kLoopStartTime] = this[kHandle].loopStartTime(); + if (this[kLoopStartTime] === -1) + return { idle: 0, active: 0, utilization: 0 }; + } + + if (util2) { + const idle = util1.idle - util2.idle; + const active = util1.active - util2.active; + return { idle, active, utilization: active / (idle + active) }; + } + + const idle = this[kHandle].loopIdleTime(); + + // Using performance.now() here is fine since it's always the time from + // the beginning of the process, and is why it needs to be offset by the + // loopStart time (which is also calculated from the beginning of the + // process). + const active = now() - this[kLoopStartTime] - idle; + + if (!util1) { + return { idle, active, utilization: active / (idle + active) }; + } + + const idle_delta = idle - util1.idle; + const active_delta = active - util1.active; + const utilization = active_delta / (idle_delta + active_delta); + return { idle: idle_delta, active: active_delta, utilization }; +} + +// Duplicate code from performance.now() so don't need to require perf_hooks. +function now() { + const hr = process.hrtime(); + return (hr[0] * 1000 + hr[1] / 1e6) - timeOrigin; +} + module.exports = { ownsProcessState, isMainThread, diff -Nru nodejs-mozilla-12.18.1/lib/net.js nodejs-mozilla-12.22.12/lib/net.js --- nodejs-mozilla-12.18.1/lib/net.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/net.js 2022-04-05 07:17:03.000000000 +0000 @@ -34,8 +34,9 @@ const EventEmitter = require('events'); const stream = require('stream'); -const { inspect } = require('internal/util/inspect'); -const debug = require('internal/util/debuglog').debuglog('net'); +let debug = require('internal/util/debuglog').debuglog('net', (fn) => { + debug = fn; +}); const { deprecate } = require('internal/util'); const { isIP, @@ -119,6 +120,8 @@ const DEFAULT_IPV4_ADDR = '0.0.0.0'; const DEFAULT_IPV6_ADDR = '::'; +const isWindows = process.platform === 'win32'; + function noop() {} function getFlags(ipv6Only) { @@ -336,8 +339,7 @@ this[async_id_symbol] = this._handle.getAsyncId(); if ((fd === 1 || fd === 2) && - (this._handle instanceof Pipe) && - process.platform === 'win32') { + (this._handle instanceof Pipe) && isWindows) { // Make stdout and stderr blocking on Windows err = this._handle.setBlocking(true); if (err) @@ -542,9 +544,8 @@ return 'readOnly'; } else if (!this.readable && this.writable) { return 'writeOnly'; - } else { - return 'closed'; } + return 'closed'; } }); @@ -552,7 +553,7 @@ ObjectDefineProperty(Socket.prototype, 'bufferSize', { get: function() { if (this._handle) { - return this[kLastWriteQueueSize] + this.writableLength; + return this.writableLength; } } }); @@ -807,19 +808,18 @@ protoGetter('bytesWritten', function bytesWritten() { let bytes = this._bytesDispatched; - const state = this._writableState; const data = this._pendingData; const encoding = this._pendingEncoding; + const writableBuffer = this.writableBuffer; - if (!state) + if (!writableBuffer) return undefined; - this.writableBuffer.forEach(function(el) { - if (el.chunk instanceof Buffer) - bytes += el.chunk.length; - else - bytes += Buffer.byteLength(el.chunk, el.encoding); - }); + for (const el of writableBuffer) { + bytes += el.chunk instanceof Buffer ? + el.chunk.length : + Buffer.byteLength(el.chunk, el.encoding); + } if (ArrayIsArray(data)) { // Was a writev, iterate over chunks to get total length @@ -1028,7 +1028,7 @@ hints: options.hints || 0 }; - if (process.platform !== 'win32' && + if (!isWindows && dnsopts.family !== 4 && dnsopts.family !== 6 && dnsopts.hints === 0) { @@ -1053,6 +1053,9 @@ // calls net.Socket.connect() on it (that's us). There are no event // listeners registered yet so defer the error event to the next tick. process.nextTick(connectErrorNT, self, err); + } else if (!isIP(ip)) { + err = new ERR_INVALID_IP_ADDRESS(ip); + process.nextTick(connectErrorNT, self, err); } else if (addressType !== 4 && addressType !== 6) { err = new ERR_INVALID_ADDRESS_FAMILY(addressType, options.host, @@ -1227,7 +1230,7 @@ assert(!address && !port); } else if (port === -1 && addressType === -1) { handle = new Pipe(PipeConstants.SERVER); - if (process.platform === 'win32') { + if (isWindows) { const instances = parseInt(process.env.NODE_PENDING_PIPE_INSTANCES); if (!NumberIsNaN(instances)) { handle.setPendingInstances(instances); @@ -1485,7 +1488,7 @@ 'must have the property "port" or "path"'); } - throw new ERR_INVALID_OPT_VALUE('options', inspect(options)); + throw new ERR_INVALID_OPT_VALUE('options', options); }; function lookupAndListen(self, port, address, backlog, exclusive, flags) { @@ -1519,9 +1522,8 @@ return out; } else if (this._pipeName) { return this._pipeName; - } else { - return null; } + return null; }; function onconnection(err, clientHandle) { @@ -1711,7 +1713,7 @@ let _setSimultaneousAccepts; let warnSimultaneousAccepts = true; -if (process.platform === 'win32') { +if (isWindows) { let simultaneousAccepts; _setSimultaneousAccepts = function(handle) { diff -Nru nodejs-mozilla-12.18.1/lib/perf_hooks.js nodejs-mozilla-12.22.12/lib/perf_hooks.js --- nodejs-mozilla-12.18.1/lib/perf_hooks.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/perf_hooks.js 2022-04-05 07:17:03.000000000 +0000 @@ -25,7 +25,8 @@ timerify, constants, installGarbageCollectionTracking, - removeGarbageCollectionTracking + removeGarbageCollectionTracking, + loopIdleTime, } = internalBinding('performance'); const { @@ -205,6 +206,10 @@ return getMilestoneTimestamp(NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE); } + get idleTime() { + return loopIdleTime(); + } + [kInspect]() { return { name: 'node', @@ -448,10 +453,37 @@ return ret; } + eventLoopUtilization(util1, util2) { + const ls = nodeTiming.loopStart; + + if (ls <= 0) { + return { idle: 0, active: 0, utilization: 0 }; + } + + if (util2) { + const idle = util1.idle - util2.idle; + const active = util1.active - util2.active; + return { idle, active, utilization: active / (idle + active) }; + } + + const idle = nodeTiming.idleTime; + const active = performance.now() - ls - idle; + + if (!util1) { + return { idle, active, utilization: active / (idle + active) }; + } + + const idle_delta = idle - util1.idle; + const active_delta = active - util1.active; + const utilization = active_delta / (idle_delta + active_delta); + return { idle: idle_delta, active: active_delta, utilization }; + } + [kInspect]() { return { nodeTiming: this.nodeTiming, - timeOrigin: this.timeOrigin + timeOrigin: this.timeOrigin, + idleTime: this.idleTime, }; } } diff -Nru nodejs-mozilla-12.18.1/lib/querystring.js nodejs-mozilla-12.22.12/lib/querystring.js --- nodejs-mozilla-12.18.1/lib/querystring.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/querystring.js 2022-04-05 07:17:03.000000000 +0000 @@ -26,8 +26,10 @@ const { Array, ArrayIsArray, + MathAbs, ObjectCreate, ObjectKeys, + decodeURIComponent, } = primordials; const { Buffer } = require('buffer'); @@ -93,13 +95,13 @@ hexHigh = unhexTable[currentChar]; if (!(hexHigh >= 0)) { out[outIndex++] = 37; // '%' + continue; } else { nextChar = s.charCodeAt(++index); hexLow = unhexTable[nextChar]; if (!(hexLow >= 0)) { out[outIndex++] = 37; // '%' - out[outIndex++] = currentChar; - currentChar = nextChar; + index--; } else { hasHex = true; currentChar = hexHigh * 16 + hexLow; @@ -139,7 +141,7 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0 // 112 - 127 ]; // QueryString.escape() replaces encodeURIComponent() -// http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3.4 +// https://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3.4 function qsEscape(str) { if (typeof str !== 'string') { if (typeof str === 'object') @@ -162,6 +164,25 @@ } +function encodeStringified(v, encode) { + if (typeof v === 'string') + return (v.length ? encode(v) : ''); + if (typeof v === 'number' && isFinite(v)) { + // Values >= 1e21 automatically switch to scientific notation which requires + // escaping due to the inclusion of a '+' in the output + return (MathAbs(v) < 1e21 ? '' + v : encode('' + v)); + } + if (typeof v === 'boolean') + return v ? 'true' : 'false'; + return ''; +} + + +function encodeStringifiedCustom(v, encode) { + return encode(stringifyPrimitive(v)); +} + + function stringify(obj, sep, eq, options) { sep = sep || '&'; eq = eq || '='; @@ -170,35 +191,36 @@ if (options && typeof options.encodeURIComponent === 'function') { encode = options.encodeURIComponent; } + const convert = + (encode === qsEscape ? encodeStringified : encodeStringifiedCustom); if (obj !== null && typeof obj === 'object') { const keys = ObjectKeys(obj); const len = keys.length; - const flast = len - 1; let fields = ''; for (let i = 0; i < len; ++i) { const k = keys[i]; const v = obj[k]; - let ks = encode(stringifyPrimitive(k)); + let ks = convert(k, encode); ks += eq; if (ArrayIsArray(v)) { const vlen = v.length; if (vlen === 0) continue; - const vlast = vlen - 1; + if (fields) + fields += sep; for (let j = 0; j < vlen; ++j) { - fields += ks; - fields += encode(stringifyPrimitive(v[j])); - if (j < vlast) + if (j) fields += sep; + fields += ks; + fields += convert(v[j], encode); } } else { + if (fields) + fields += sep; fields += ks; - fields += encode(stringifyPrimitive(v)); + fields += convert(v, encode); } - - if (i < flast) - fields += sep; } return fields; } diff -Nru nodejs-mozilla-12.18.1/lib/readline.js nodejs-mozilla-12.22.12/lib/readline.js --- nodejs-mozilla-12.18.1/lib/readline.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/readline.js 2022-04-05 07:17:03.000000000 +0000 @@ -22,7 +22,7 @@ // Inspiration for this code comes from Salvatore Sanfilippo's linenoise. // https://github.com/antirez/linenoise // Reference: -// * http://invisible-island.net/xterm/ctlseqs/ctlseqs.html +// * https://invisible-island.net/xterm/ctlseqs/ctlseqs.html // * http://www.3waylabs.com/nw/WWW/products/wizcon/vt220.html 'use strict'; @@ -848,6 +848,8 @@ if (key.ctrl && key.shift) { /* Control and shift pressed */ switch (key.name) { + // TODO(BridgeAR): The transmitted escape sequence is `\b` and that is + // identical to -h. It should have a unique escape sequence. case 'backspace': this._deleteLineLeft(); break; @@ -945,8 +947,10 @@ } break; - // TODO(BridgeAR): This seems broken? case 'w': // Delete backwards to a word boundary + // TODO(BridgeAR): The transmitted escape sequence is `\b` and that is + // identical to -h. It should have a unique escape sequence. + // Falls through case 'backspace': this._deleteWordLeft(); break; diff -Nru nodejs-mozilla-12.18.1/lib/repl.js nodejs-mozilla-12.22.12/lib/repl.js --- nodejs-mozilla-12.18.1/lib/repl.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/repl.js 2022-04-05 07:17:03.000000000 +0000 @@ -58,6 +58,7 @@ PromiseRace, RegExp, Set, + StringPrototypeIncludes, Symbol, WeakSet, } = primordials; @@ -88,7 +89,9 @@ const cjsLoader = require('internal/modules/cjs/loader'); const { Module: CJSModule } = cjsLoader; const domain = require('domain'); -const debug = require('internal/util/debuglog').debuglog('repl'); +let debug = require('internal/util/debuglog').debuglog('repl', (fn) => { + debug = fn; +}); const { codes: { ERR_CANNOT_WATCH_SIGINT, @@ -122,6 +125,12 @@ } = internalBinding('contextify'); const history = require('internal/repl/history'); +let nextREPLResourceNumber = 1; +// This prevents v8 code cache from getting confused and using a different +// cache from a resource of the same name +function getREPLResourceName() { + return `REPL${nextREPLResourceNumber++}`; +} // Lazy-loaded. let processTopLevelAwait; @@ -539,17 +548,25 @@ if (e.name === 'SyntaxError') { // Remove stack trace. e.stack = e.stack - .replace(/^repl:\d+\r?\n/, '') + .replace(/^REPL\d+:\d+\r?\n/, '') .replace(/^\s+at\s.*\n?/gm, ''); + const importErrorStr = 'Cannot use import statement outside a ' + + 'module'; + if (StringPrototypeIncludes(e.message, importErrorStr)) { + e.message = 'Cannot use import statement inside the Node.js ' + + 'repl, alternatively use dynamic import'; + e.stack = e.stack.replace(/SyntaxError:.*\n/, + `SyntaxError: ${e.message}\n`); + } } else if (self.replMode === exports.REPL_MODE_STRICT) { - e.stack = e.stack.replace(/(\s+at\s+repl:)(\d+)/, + e.stack = e.stack.replace(/(\s+at\s+REPL\d+:)(\d+)/, (_, pre, line) => pre + (line - 1)); } } errStack = self.writer(e); // Remove one line error braces to keep the old style in place. - if (errStack[errStack.length - 1] === ']') { + if (errStack[0] === '[' && errStack[errStack.length - 1] === ']') { errStack = errStack.slice(1, -1); } } @@ -757,7 +774,7 @@ const evalCmd = self[kBufferedCommandSymbol] + cmd + '\n'; debug('eval %j', evalCmd); - self.eval(evalCmd, self.context, 'repl', finish); + self.eval(evalCmd, self.context, getREPLResourceName(), finish); function finish(e, ret) { debug('finish', e, ret); @@ -781,9 +798,8 @@ self[kBufferedCommandSymbol] += cmd + '\n'; self.displayPrompt(); return; - } else { - self._domain.emit('error', e.err || e); } + self._domain.emit('error', e.err || e); } // Clear buffer if no SyntaxErrors @@ -1274,7 +1290,7 @@ } const evalExpr = `try { ${expr} } catch {}`; - this.eval(evalExpr, this.context, 'repl', (e, obj) => { + this.eval(evalExpr, this.context, getREPLResourceName(), (e, obj) => { if (obj != null) { if (typeof obj === 'object' || typeof obj === 'function') { try { diff -Nru nodejs-mozilla-12.18.1/lib/_stream_duplex.js nodejs-mozilla-12.22.12/lib/_stream_duplex.js --- nodejs-mozilla-12.18.1/lib/_stream_duplex.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_stream_duplex.js 2022-04-05 07:17:03.000000000 +0000 @@ -20,8 +20,8 @@ // USE OR OTHER DEALINGS IN THE SOFTWARE. // a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from +// Since JS doesn't have multiple prototype inheritance, this class +// prototypically inherits from Readable, and then parasitically from // Writable. 'use strict'; diff -Nru nodejs-mozilla-12.18.1/lib/_stream_readable.js nodejs-mozilla-12.22.12/lib/_stream_readable.js --- nodejs-mozilla-12.18.1/lib/_stream_readable.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_stream_readable.js 2022-04-05 07:17:03.000000000 +0000 @@ -39,7 +39,9 @@ const Stream = require('stream'); const { Buffer } = require('buffer'); -const debug = require('internal/util/debuglog').debuglog('stream'); +let debug = require('internal/util/debuglog').debuglog('stream', (fn) => { + debug = fn; +}); const BufferList = require('internal/streams/buffer_list'); const destroyImpl = require('internal/streams/destroy'); const { @@ -64,7 +66,6 @@ ObjectSetPrototypeOf(Readable, Stream); const { errorOrDestroy } = destroyImpl; -const kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; function prependListener(emitter, event, fn) { // Sadly this is not cacheable as some libraries bundle their own @@ -284,7 +285,8 @@ } function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { + if (state.flowing && state.length === 0 && !state.sync && + stream.listenerCount('data') > 0) { // Use the guard to avoid creating `Set()` repeatedly // when we have multiple pipes. if (state.multiAwaitDrain) { @@ -365,8 +367,7 @@ // Only flow one buffer at a time if (state.flowing && state.length) return state.buffer.first().length; - else - return state.length; + return state.length; } if (n <= state.length) return n; @@ -1053,10 +1054,29 @@ } } - // Proxy certain important events. - for (const kProxyEvent of kProxyEvents) { - stream.on(kProxyEvent, this.emit.bind(this, kProxyEvent)); - } + stream.on('error', (err) => { + errorOrDestroy(this, err); + }); + + stream.on('close', () => { + // TODO(ronag): Update readable state? + this.emit('close'); + }); + + stream.on('destroy', () => { + // TODO(ronag): this.destroy()? + this.emit('destroy'); + }); + + stream.on('pause', () => { + // TODO(ronag): this.pause()? + this.emit('pause'); + }); + + stream.on('resume', () => { + // TODO(ronag): this.resume()? + this.emit('resume'); + }); // When we try to consume some more bytes, simply unpause the // underlying stream. diff -Nru nodejs-mozilla-12.18.1/lib/timers.js nodejs-mozilla-12.22.12/lib/timers.js --- nodejs-mozilla-12.18.1/lib/timers.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/timers.js 2022-04-05 07:17:03.000000000 +0000 @@ -22,8 +22,10 @@ 'use strict'; const { + ObjectCreate, MathTrunc, Promise, + SymbolToPrimitive } = primordials; const { @@ -40,6 +42,7 @@ kRefCount }, kRefed, + kHasPrimitive, initAsyncResource, getTimerDuration, timerListMap, @@ -53,7 +56,9 @@ promisify: { custom: customPromisify }, deprecate } = require('internal/util'); -const debug = require('internal/util/debuglog').debuglog('timer'); +let debug = require('internal/util/debuglog').debuglog('timer', (fn) => { + debug = fn; +}); const { validateCallback } = require('internal/validators'); const { @@ -62,6 +67,11 @@ emitDestroy } = require('internal/async_hooks'); +// This stores all the known timer async ids to allow users to clearTimeout and +// clearInterval using those ids, to match the spec and the rest of the web +// platform. +const knownTimersById = ObjectCreate(null); + // Remove a timer. Cancels the timeout and resets the relevant timer properties. function unenroll(item) { if (item._destroyed) @@ -69,6 +79,9 @@ item._destroyed = true; + if (item[kHasPrimitive]) + delete knownTimersById[item[async_id_symbol]]; + // Fewer checks may be possible, but these cover everything. if (destroyHooksExist() && item[async_id_symbol] !== undefined) emitDestroy(item[async_id_symbol]); @@ -159,6 +172,14 @@ if (timer && timer._onTimeout) { timer._onTimeout = null; unenroll(timer); + return; + } + if (typeof timer === 'number' || typeof timer === 'string') { + const timerInstance = knownTimersById[timer]; + if (timerInstance !== undefined) { + timerInstance._onTimeout = null; + unenroll(timerInstance); + } } } @@ -204,6 +225,15 @@ return this; }; +Timeout.prototype[SymbolToPrimitive] = function() { + const id = this[async_id_symbol]; + if (!this[kHasPrimitive]) { + this[kHasPrimitive] = true; + knownTimersById[id] = this; + } + return id; +}; + const Immediate = class Immediate { constructor(callback, args) { this._idleNext = null; diff -Nru nodejs-mozilla-12.18.1/lib/_tls_common.js nodejs-mozilla-12.22.12/lib/_tls_common.js --- nodejs-mozilla-12.18.1/lib/_tls_common.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_tls_common.js 2022-04-05 07:17:03.000000000 +0000 @@ -23,6 +23,7 @@ const { ArrayIsArray, + JSONParse, ObjectCreate, } = primordials; @@ -294,6 +295,14 @@ options.clientCertEngine); } + if (options.ticketKeys) { + c.context.setTicketKeys(options.ticketKeys); + } + + if (options.sessionTimeout) { + c.context.setSessionTimeout(options.sessionTimeout); + } + return c; }; @@ -304,17 +313,27 @@ if (!c) return null; - if (c.issuer != null) c.issuer = parseCertString(c.issuer); + // TODO(tniessen): can we remove parseCertString without breaking anything? + if (typeof c.issuer === 'string') c.issuer = parseCertString(c.issuer); if (c.issuerCertificate != null && c.issuerCertificate !== c) { c.issuerCertificate = translatePeerCertificate(c.issuerCertificate); } - if (c.subject != null) c.subject = parseCertString(c.subject); + // TODO(tniessen): can we remove parseCertString without breaking anything? + if (typeof c.subject === 'string') c.subject = parseCertString(c.subject); if (c.infoAccess != null) { const info = c.infoAccess; c.infoAccess = ObjectCreate(null); // XXX: More key validation? info.replace(/([^\n:]*):([^\n]*)(?:\n|$)/g, (all, key, val) => { + if (val.charCodeAt(0) === 0x22) { + // The translatePeerCertificate function is only + // used on internally created legacy certificate + // objects, and any value that contains a quote + // will always be a valid JSON string literal, + // so this should never throw. + val = JSONParse(val); + } if (key in c.infoAccess) c.infoAccess[key].push(val); else diff -Nru nodejs-mozilla-12.18.1/lib/tls.js nodejs-mozilla-12.22.12/lib/tls.js --- nodejs-mozilla-12.18.1/lib/tls.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/tls.js 2022-04-05 07:17:03.000000000 +0000 @@ -24,11 +24,19 @@ const { Array, ArrayIsArray, + ArrayPrototypePush, + JSONParse, ObjectDefineProperty, ObjectFreeze, + RegExpPrototypeExec, + StringPrototypeIncludes, + StringPrototypeIndexOf, + StringPrototypeSplit, + StringPrototypeSubstring, } = primordials; const { + ERR_TLS_CERT_ALTNAME_FORMAT, ERR_TLS_CERT_ALTNAME_INVALID, ERR_OUT_OF_RANGE } = require('internal/errors').codes; @@ -207,6 +215,45 @@ return true; } +// This pattern is used to determine the length of escaped sequences within +// the subject alt names string. It allows any valid JSON string literal. +// This MUST match the JSON specification (ECMA-404 / RFC8259) exactly. +const jsonStringPattern = + // eslint-disable-next-line no-control-regex + /^"(?:[^"\\\u0000-\u001f]|\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4}))*"/; + +function splitEscapedAltNames(altNames) { + const result = []; + let currentToken = ''; + let offset = 0; + while (offset !== altNames.length) { + const nextSep = StringPrototypeIndexOf(altNames, ', ', offset); + const nextQuote = StringPrototypeIndexOf(altNames, '"', offset); + if (nextQuote !== -1 && (nextSep === -1 || nextQuote < nextSep)) { + // There is a quote character and there is no separator before the quote. + currentToken += StringPrototypeSubstring(altNames, offset, nextQuote); + const match = RegExpPrototypeExec( + jsonStringPattern, StringPrototypeSubstring(altNames, nextQuote)); + if (!match) { + throw new ERR_TLS_CERT_ALTNAME_FORMAT(); + } + currentToken += JSONParse(match[0]); + offset = nextQuote + match[0].length; + } else if (nextSep !== -1) { + // There is a separator and no quote before it. + currentToken += StringPrototypeSubstring(altNames, offset, nextSep); + ArrayPrototypePush(result, currentToken); + currentToken = ''; + offset = nextSep + 2; + } else { + currentToken += StringPrototypeSubstring(altNames, offset); + offset = altNames.length; + } + } + ArrayPrototypePush(result, currentToken); + return result; +} + let urlWarningEmitted = false; exports.checkServerIdentity = function checkServerIdentity(hostname, cert) { const subject = cert.subject; @@ -218,10 +265,13 @@ hostname = '' + hostname; if (altNames) { - for (const name of altNames.split(', ')) { + const splitAltNames = StringPrototypeIncludes(altNames, '"') ? + splitEscapedAltNames(altNames) : + StringPrototypeSplit(altNames, ', '); + for (const name of splitAltNames) { if (name.startsWith('DNS:')) { dnsNames.push(name.slice(4)); - } else if (name.startsWith('URI:')) { + } else if (process.REVERT_CVE_2021_44531 && name.startsWith('URI:')) { let uri; try { uri = new URL(name.slice(4)); @@ -236,7 +286,6 @@ 'DeprecationWarning', 'DEP0109'); } } - uriNames.push(uri.hostname); // TODO(bnoordhuis) Also use scheme. } else if (name.startsWith('IP Address:')) { ips.push(canonicalizeIP(name.slice(11))); @@ -257,11 +306,13 @@ if (!valid) reason = `IP: ${hostname} is not in the cert's list: ${ips.join(', ')}`; // TODO(bnoordhuis) Also check URI SANs that are IP addresses. - } else if (hasAltNames || subject) { + } else if ((process.REVERT_CVE_2021_44531 && (hasAltNames || subject)) || + (dnsNames.length > 0 || (subject && subject.CN))) { const hostParts = splitHost(hostname); const wildcard = (pattern) => check(hostParts, pattern, true); - if (hasAltNames) { + if ((process.REVERT_CVE_2021_44531 && hasAltNames) || + (dnsNames.length > 0)) { const noWildcard = (pattern) => check(hostParts, pattern, false); valid = dnsNames.some(wildcard) || uriNames.some(noWildcard); if (!valid) @@ -280,7 +331,7 @@ reason = `Host: ${hostname}. is not cert's CN: ${cn}`; } } else { - reason = 'Cert is empty'; + reason = 'Cert does not contain a DNS name'; } if (!valid) { diff -Nru nodejs-mozilla-12.18.1/lib/_tls_wrap.js nodejs-mozilla-12.22.12/lib/_tls_wrap.js --- nodejs-mozilla-12.18.1/lib/_tls_wrap.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/_tls_wrap.js 2022-04-05 07:17:03.000000000 +0000 @@ -45,7 +45,9 @@ const common = require('_tls_common'); const JSStreamSocket = require('internal/js_stream_socket'); const { Buffer } = require('buffer'); -const debug = require('internal/util/debuglog').debuglog('tls'); +let debug = require('internal/util/debuglog').debuglog('tls', (fn) => { + debug = fn; +}); const { TCP, constants: TCPConstants } = internalBinding('tcp_wrap'); const tls_wrap = internalBinding('tls_wrap'); const { Pipe, constants: PipeConstants } = internalBinding('pipe_wrap'); @@ -487,7 +489,6 @@ // handle, but a JS stream doesn't have one. Wrap it up to make it look like // a socket. wrap = new JSStreamSocket(socket); - wrap.once('close', () => this.destroy()); } // Just a documented property to make secure sockets @@ -1318,6 +1319,12 @@ .slice(0, 32); } + if (options.sessionTimeout) + this.sessionTimeout = options.sessionTimeout; + + if (options.ticketKeys) + this.ticketKeys = options.ticketKeys; + this._sharedCreds = tls.createSecureContext({ pfx: this.pfx, key: this.key, @@ -1335,16 +1342,10 @@ secureOptions: this.secureOptions, honorCipherOrder: this.honorCipherOrder, crl: this.crl, - sessionIdContext: this.sessionIdContext + sessionIdContext: this.sessionIdContext, + ticketKeys: this.ticketKeys, + sessionTimeout: this.sessionTimeout }); - - if (this.sessionTimeout) - this._sharedCreds.context.setSessionTimeout(this.sessionTimeout); - - if (options.ticketKeys) { - this.ticketKeys = options.ticketKeys; - this.setTicketKeys(this.ticketKeys); - } }; @@ -1515,18 +1516,27 @@ this.authorized = false; this.authorizationError = verifyError.code || verifyError.message; - if (options.rejectUnauthorized) { + // rejectUnauthorized property can be explicitly defined as `undefined` + // causing the assignment to default value (`true`) fail. Before assigning + // it to the tlssock connection options, explicitly check if it is false + // and update rejectUnauthorized property. The property gets used by + // TLSSocket connection handler to allow or reject connection if + // unauthorized. + // This check is potentially redundant, however it is better to keep it + // in case the option object gets modified somewhere. + if (options.rejectUnauthorized !== false) { this.destroy(verifyError); return; - } else { - debug('client emit secureConnect. rejectUnauthorized: %s, ' + - 'authorizationError: %s', options.rejectUnauthorized, - this.authorizationError); - this.emit('secureConnect'); } + debug('client emit secureConnect. rejectUnauthorized: %s, ' + + 'authorizationError: %s', options.rejectUnauthorized, + this.authorizationError); + this.secureConnecting = false; + this.emit('secureConnect'); } else { this.authorized = true; debug('client emit secureConnect. authorized:', this.authorized); + this.secureConnecting = false; this.emit('secureConnect'); } @@ -1596,6 +1606,13 @@ pskCallback: options.pskCallback, }); + // rejectUnauthorized property can be explicitly defined as `undefined` + // causing the assignment to default value (`true`) fail. Before assigning + // it to the tlssock connection options, explicitly check if it is false + // and update rejectUnauthorized property. The property gets used by TLSSocket + // connection handler to allow or reject connection if unauthorized + options.rejectUnauthorized = options.rejectUnauthorized !== false; + tlssock[kConnectOptions] = options; if (cb) diff -Nru nodejs-mozilla-12.18.1/lib/url.js nodejs-mozilla-12.22.12/lib/url.js --- nodejs-mozilla-12.18.1/lib/url.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/url.js 2022-04-05 07:17:03.000000000 +0000 @@ -25,6 +25,7 @@ ObjectCreate, ObjectKeys, SafeSet, + decodeURIComponent, } = primordials; const { toASCII } = require('internal/idna'); diff -Nru nodejs-mozilla-12.18.1/lib/v8.js nodejs-mozilla-12.22.12/lib/v8.js --- nodejs-mozilla-12.18.1/lib/v8.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/v8.js 2022-04-05 07:17:03.000000000 +0000 @@ -37,6 +37,12 @@ Serializer: _Serializer, Deserializer: _Deserializer } = internalBinding('serdes'); + +let profiler = {}; +if (internalBinding('config').hasInspector) { + profiler = internalBinding('profiler'); +} + const assert = require('internal/assert'); const { copy } = internalBinding('buffer'); const { inspect } = require('internal/util/inspect'); @@ -251,14 +257,13 @@ return new ctor(this.buffer.buffer, offset, byteLength / BYTES_PER_ELEMENT); - } else { - // Copy to an aligned buffer first. - const buffer_copy = Buffer.allocUnsafe(byteLength); - copy(this.buffer, buffer_copy, 0, byteOffset, byteOffset + byteLength); - return new ctor(buffer_copy.buffer, - buffer_copy.byteOffset, - byteLength / BYTES_PER_ELEMENT); } + // Copy to an aligned buffer first. + const buffer_copy = Buffer.allocUnsafe(byteLength); + copy(this.buffer, buffer_copy, 0, byteOffset, byteOffset + byteLength); + return new ctor(buffer_copy.buffer, + buffer_copy.byteOffset, + byteLength / BYTES_PER_ELEMENT); } } @@ -287,6 +292,8 @@ DefaultSerializer, DefaultDeserializer, deserialize, + takeCoverage: profiler.takeCoverage, + stopCoverage: profiler.stopCoverage, serialize, writeHeapSnapshot, }; diff -Nru nodejs-mozilla-12.18.1/lib/vm.js nodejs-mozilla-12.22.12/lib/vm.js --- nodejs-mozilla-12.18.1/lib/vm.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/vm.js 2022-04-05 07:17:03.000000000 +0000 @@ -116,9 +116,8 @@ const { breakOnSigint, args } = getRunInContextArgs(options); if (breakOnSigint && process.listenerCount('SIGINT') > 0) { return sigintHandlersWrap(super.runInThisContext, this, args); - } else { - return super.runInThisContext(...args); } + return super.runInThisContext(...args); } runInContext(contextifiedObject, options) { @@ -127,9 +126,8 @@ if (breakOnSigint && process.listenerCount('SIGINT') > 0) { return sigintHandlersWrap(super.runInContext, this, [contextifiedObject, ...args]); - } else { - return super.runInContext(contextifiedObject, ...args); } + return super.runInContext(contextifiedObject, ...args); } runInNewContext(contextObject, options) { diff -Nru nodejs-mozilla-12.18.1/lib/wasi.js nodejs-mozilla-12.22.12/lib/wasi.js --- nodejs-mozilla-12.18.1/lib/wasi.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/wasi.js 2022-04-05 07:17:03.000000000 +0000 @@ -1,5 +1,4 @@ 'use strict'; -/* global WebAssembly */ const { ArrayPrototypeMap, ArrayPrototypePush, @@ -12,19 +11,44 @@ ERR_WASI_ALREADY_STARTED } = require('internal/errors').codes; const { emitExperimentalWarning } = require('internal/util'); +const { isArrayBuffer } = require('internal/util/types'); const { validateArray, validateBoolean, + validateInt32, validateObject, } = require('internal/validators'); const { WASI: _WASI } = internalBinding('wasi'); -const kExitCode = Symbol('exitCode'); -const kSetMemory = Symbol('setMemory'); -const kStarted = Symbol('started'); +const kExitCode = Symbol('kExitCode'); +const kSetMemory = Symbol('kSetMemory'); +const kStarted = Symbol('kStarted'); +const kInstance = Symbol('kInstance'); emitExperimentalWarning('WASI'); +function setupInstance(self, instance) { + validateObject(instance, 'instance'); + validateObject(instance.exports, 'instance.exports'); + + // WASI::_SetMemory() in src/node_wasi.cc only expects that |memory| is + // an object. It will try to look up the .buffer property when needed + // and fail with UVWASI_EINVAL when the property is missing or is not + // an ArrayBuffer. Long story short, we don't need much validation here + // but we type-check anyway because it helps catch bugs in the user's + // code early. + validateObject(instance.exports.memory, 'instance.exports.memory'); + if (!isArrayBuffer(instance.exports.memory.buffer)) { + throw new ERR_INVALID_ARG_TYPE( + 'instance.exports.memory.buffer', + ['WebAssembly.Memory'], + instance.exports.memory.buffer); + } + + self[kInstance] = instance; + self[kSetMemory](instance.exports.memory); +} + class WASI { constructor(options = {}) { validateObject(options, 'options'); @@ -50,7 +74,13 @@ } } - const wrap = new _WASI(args, env, preopens); + const { stdin = 0, stdout = 1, stderr = 2 } = options; + validateInt32(stdin, 'options.stdin', 0); + validateInt32(stdout, 'options.stdout', 0); + validateInt32(stderr, 'options.stderr', 0); + const stdio = [stdin, stdout, stderr]; + + const wrap = new _WASI(args, env, preopens, stdio); for (const prop in wrap) { wrap[prop] = FunctionPrototypeBind(wrap[prop], wrap); @@ -67,51 +97,63 @@ this.wasiImport = wrap; this[kStarted] = false; this[kExitCode] = 0; + this[kInstance] = undefined; } + // Must not export _initialize, must export _start start(instance) { - if (!(instance instanceof WebAssembly.Instance)) { - throw new ERR_INVALID_ARG_TYPE( - 'instance', 'WebAssembly.Instance', instance); + if (this[kStarted]) { + throw new ERR_WASI_ALREADY_STARTED(); } + this[kStarted] = true; - const exports = instance.exports; - - validateObject(exports, 'instance.exports'); + setupInstance(this, instance); - const { _initialize, _start, memory } = exports; + const { _start, _initialize } = this[kInstance].exports; if (typeof _start !== 'function') { throw new ERR_INVALID_ARG_TYPE( 'instance.exports._start', 'function', _start); } - if (_initialize !== undefined) { throw new ERR_INVALID_ARG_TYPE( 'instance.exports._initialize', 'undefined', _initialize); } - if (!(memory instanceof WebAssembly.Memory)) { - throw new ERR_INVALID_ARG_TYPE( - 'instance.exports.memory', 'WebAssembly.Memory', memory); + try { + _start(); + } catch (err) { + if (err !== kExitCode) { + throw err; + } } + return this[kExitCode]; + } + + // Must not export _start, may optionally export _initialize + initialize(instance) { if (this[kStarted]) { throw new ERR_WASI_ALREADY_STARTED(); } - this[kStarted] = true; - this[kSetMemory](memory); - try { - exports._start(); - } catch (err) { - if (err !== kExitCode) { - throw err; - } + setupInstance(this, instance); + + const { _start, _initialize } = this[kInstance].exports; + + if (typeof _initialize !== 'function' && _initialize !== undefined) { + throw new ERR_INVALID_ARG_TYPE( + 'instance.exports._initialize', 'function', _initialize); + } + if (_start !== undefined) { + throw new ERR_INVALID_ARG_TYPE( + 'instance.exports._start', 'undefined', _initialize); } - return this[kExitCode]; + if (_initialize !== undefined) { + _initialize(); + } } } diff -Nru nodejs-mozilla-12.18.1/lib/worker_threads.js nodejs-mozilla-12.22.12/lib/worker_threads.js --- nodejs-mozilla-12.18.1/lib/worker_threads.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/worker_threads.js 2022-04-05 07:17:03.000000000 +0000 @@ -12,13 +12,18 @@ MessagePort, MessageChannel, moveMessagePortToContext, - receiveMessageOnPort + receiveMessageOnPort, } = require('internal/worker/io'); +const { + markAsUntransferable, +} = require('internal/buffer'); + module.exports = { isMainThread, MessagePort, MessageChannel, + markAsUntransferable, moveMessagePortToContext, receiveMessageOnPort, resourceLimits, diff -Nru nodejs-mozilla-12.18.1/lib/zlib.js nodejs-mozilla-12.22.12/lib/zlib.js --- nodejs-mozilla-12.18.1/lib/zlib.js 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/lib/zlib.js 2022-04-05 07:17:03.000000000 +0000 @@ -22,6 +22,7 @@ 'use strict'; const { + ArrayBuffer, Error, MathMax, NumberIsFinite, @@ -33,6 +34,7 @@ ObjectKeys, ObjectSetPrototypeOf, Symbol, + Uint32Array, } = primordials; const { @@ -122,6 +124,11 @@ else this.buffers.push(chunk); this.nread += chunk.length; + if (this.nread > this._maxOutputLength) { + this.close(); + this.removeAllListeners('end'); + this.cb(new ERR_BUFFER_TOO_LARGE(this._maxOutputLength)); + } } function zlibBufferOnError(err) { @@ -131,19 +138,14 @@ function zlibBufferOnEnd() { let buf; - let err; - if (this.nread >= kMaxLength) { - err = new ERR_BUFFER_TOO_LARGE(); - } else if (this.nread === 0) { + if (this.nread === 0) { buf = Buffer.alloc(0); } else { const bufs = this.buffers; buf = (bufs.length === 1 ? bufs[0] : Buffer.concat(bufs, this.nread)); } this.close(); - if (err) - this.cb(err); - else if (this._info) + if (this._info) this.cb(null, { buffer: buf, engine: this }); else this.cb(null, buf); @@ -230,6 +232,7 @@ // The base class for all Zlib-style streams. function ZlibBase(opts, mode, handle, { flush, finishFlush, fullFlush }) { let chunkSize = Z_DEFAULT_CHUNK; + let maxOutputLength = kMaxLength; // The ZlibBase class is not exported to user land, the mode should only be // passed in by us. assert(typeof mode === 'number'); @@ -252,6 +255,10 @@ opts.finishFlush, 'options.finishFlush', Z_NO_FLUSH, Z_BLOCK, finishFlush); + maxOutputLength = checkRangesOrGetDefault( + opts.maxOutputLength, 'options.maxOutputLength', + 1, kMaxLength, kMaxLength); + if (opts.encoding || opts.objectMode || opts.writableObjectMode) { opts = { ...opts }; opts.encoding = null; @@ -276,6 +283,7 @@ this._defaultFullFlushFlag = fullFlush; this.once('end', _close.bind(null, this)); this._info = opts && opts.info; + this._maxOutputLength = maxOutputLength; } ObjectSetPrototypeOf(ZlibBase.prototype, Transform.prototype); ObjectSetPrototypeOf(ZlibBase, Transform); @@ -349,17 +357,15 @@ } ZlibBase.prototype.flush = function(kind, callback) { - const ws = this._writableState; - if (typeof kind === 'function' || (kind === undefined && !callback)) { callback = kind; kind = this._defaultFullFlushFlag; } - if (ws.ended) { + if (this.writableFinished) { if (callback) process.nextTick(callback); - } else if (ws.ending) { + } else if (this.writableEnded) { if (callback) this.once('end', callback); } else { @@ -386,8 +392,7 @@ } // For the last chunk, also apply `_finishFlushFlag`. - const ws = this._writableState; - if ((ws.ending || ws.ended) && ws.length === chunk.byteLength) { + if (this.writableEnded && this.writableLength === chunk.byteLength) { flushFlag = maxFlush(flushFlag, this._finishFlushFlag); } processChunk(this, chunk, flushFlag, cb); @@ -448,6 +453,12 @@ else buffers.push(out); nread += out.byteLength; + + if (nread > self._maxOutputLength) { + _close(self); + throw new ERR_BUFFER_TOO_LARGE(self._maxOutputLength); + } + } else { assert(have === 0, 'have should not go down'); } @@ -474,10 +485,6 @@ self.bytesWritten = inputRead; _close(self); - if (nread >= kMaxLength) { - throw new ERR_BUFFER_TOO_LARGE(); - } - if (nread === 0) return Buffer.alloc(0); @@ -652,18 +659,13 @@ // to come up with a good solution that doesn't break our internal API, // and with it all supported npm versions at the time of writing. this._writeState = new Uint32Array(2); - if (!handle.init(windowBits, - level, - memLevel, - strategy, - this._writeState, - processCallback, - dictionary)) { - // TODO(addaleax): Sometimes we generate better error codes in C++ land, - // e.g. ERR_BROTLI_PARAM_SET_FAILED -- it's hard to access them with - // the current bindings setup, though. - throw new ERR_ZLIB_INITIALIZATION_FAILED(); - } + handle.init(windowBits, + level, + memLevel, + strategy, + this._writeState, + processCallback, + dictionary); ZlibBase.call(this, opts, mode, handle, zlibDefaultOpts); @@ -763,15 +765,14 @@ return function syncBufferWrapper(buffer, opts) { return zlibBufferSync(new ctor(opts), buffer); }; - } else { - return function asyncBufferWrapper(buffer, opts, callback) { - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - return zlibBuffer(new ctor(opts), buffer, callback); - }; } + return function asyncBufferWrapper(buffer, opts, callback) { + if (typeof opts === 'function') { + callback = opts; + opts = {}; + } + return zlibBuffer(new ctor(opts), buffer, callback); + }; } const kMaxBrotliParam = MathMax(...ObjectKeys(constants).map((key) => { @@ -810,6 +811,9 @@ new binding.BrotliDecoder(mode) : new binding.BrotliEncoder(mode); this._writeState = new Uint32Array(2); + // TODO(addaleax): Sometimes we generate better error codes in C++ land, + // e.g. ERR_BROTLI_PARAM_SET_FAILED -- it's hard to access them with + // the current bindings setup, though. if (!handle.init(brotliInitParamsArray, this._writeState, processCallback)) { diff -Nru nodejs-mozilla-12.18.1/LICENSE nodejs-mozilla-12.22.12/LICENSE --- nodejs-mozilla-12.18.1/LICENSE 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/LICENSE 2022-04-05 07:16:59.000000000 +0000 @@ -137,6 +137,20 @@ IN THE SOFTWARE. """ +- cjs-module-lexer, located at deps/cjs-module-lexer, is licensed as follows: + """ + MIT License + ----------- + + Copyright (C) 2018-2020 Guy Bedford + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + """ + - ICU, located at deps/icu-small, is licensed as follows: """ COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) @@ -1280,7 +1294,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ -- gtest, located at test/cctest/gtest, is licensed as follows: +- gtest, located at src/gtest and test/cctest/gtest, is licensed as follows: """ Copyright 2008, Google Inc. All rights reserved. @@ -1471,6 +1485,39 @@ THE POSSIBILITY OF SUCH DAMAGE. """ +- highlight.js, located at doc/api_assets/highlight.pack.js, is licensed as follows: + """ + BSD 3-Clause License + + Copyright (c) 2006, Ivan Sagalaev. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + """ + - node-heapdump, located at src/heap_utils.cc, is licensed as follows: """ ISC License diff -Nru nodejs-mozilla-12.18.1/Makefile nodejs-mozilla-12.22.12/Makefile --- nodejs-mozilla-12.18.1/Makefile 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/Makefile 2022-04-05 07:16:59.000000000 +0000 @@ -17,6 +17,7 @@ GCOV ?= gcov PWD = $(CURDIR) BUILD_WITH ?= make +FIND ?= find ifdef JOBS PARALLEL_ARGS = -j $(JOBS) @@ -97,13 +98,12 @@ # and recreated which can break the addons build when running test-ci # See comments on the build-addons target for some more info ifeq ($(BUILD_WITH), make) -$(NODE_EXE): config.gypi out/Makefile - $(MAKE) -C out BUILDTYPE=Release V=$(V) - if [ ! -r $@ -o ! -L $@ ]; then ln -fs out/Release/$(NODE_EXE) $@; fi - -$(NODE_G_EXE): config.gypi out/Makefile - $(MAKE) -C out BUILDTYPE=Debug V=$(V) - if [ ! -r $@ -o ! -L $@ ]; then ln -fs out/Debug/$(NODE_EXE) $@; fi +$(NODE_EXE): build_type:=Release +$(NODE_G_EXE): build_type:=Debug +$(NODE_EXE) $(NODE_G_EXE): config.gypi out/Makefile + $(MAKE) -C out BUILDTYPE=${build_type} V=$(V) + if [ ! -r $@ -o ! -L $@ ]; then \ + ln -fs out/${build_type}/$(NODE_EXE) $@; fi else ifeq ($(BUILD_WITH), ninja) ifeq ($(V),1) @@ -168,7 +168,7 @@ clean: ## Remove build artifacts. $(RM) -r out/Makefile $(NODE_EXE) $(NODE_G_EXE) out/$(BUILDTYPE)/$(NODE_EXE) \ out/$(BUILDTYPE)/node.exp - @if [ -d out ]; then find out/ -name '*.o' -o -name '*.a' -o -name '*.d' | xargs $(RM) -r; fi + @if [ -d out ]; then $(FIND) out/ -name '*.o' -o -name '*.a' -o -name '*.d' | xargs $(RM) -r; fi $(RM) -r node_modules @if [ -d deps/icu ]; then echo deleting deps/icu; $(RM) -r deps/icu; fi $(RM) test.tap @@ -212,6 +212,8 @@ $(RM) out/$(BUILDTYPE)/obj.target/node/src/tracing/*.gcno $(RM) out/$(BUILDTYPE)/obj.target/cctest/src/*.gcno $(RM) out/$(BUILDTYPE)/obj.target/cctest/test/cctest/*.gcno + $(RM) out/$(BUILDTYPE)/obj.target/embedtest/src/*.gcno + $(RM) out/$(BUILDTYPE)/obj.target/embedtest/test/embedding/*.gcno .PHONY: coverage # Build and test with code coverage reporting. Leave the lib directory @@ -250,8 +252,8 @@ TEST_CI_ARGS="$(TEST_CI_ARGS) --type=coverage" $(MAKE) $(COVTESTS) $(MAKE) coverage-report-js -(cd out && "../gcovr/scripts/gcovr" \ - --gcov-exclude='.*\b(deps|usr|out|cctest)\b' -v -r Release/obj.target \ - --html --html-detail -o ../coverage/cxxcoverage.html \ + --gcov-exclude='.*\b(deps|usr|out|cctest|embedding)\b' -v \ + -r Release/obj.target --html --html-detail -o ../coverage/cxxcoverage.html \ --gcov-executable="$(GCOV)") @echo -n "Javascript coverage %: " @grep -B1 Lines coverage/index.html | head -n1 \ @@ -276,6 +278,7 @@ # Runs the C++ tests using the built `cctest` executable. cctest: all @out/$(BUILDTYPE)/$@ --gtest_filter=$(GTEST_FILTER) + @out/$(BUILDTYPE)/embedtest "require('./test/embedding/test-embedding.js')" .PHONY: list-gtests list-gtests: @@ -295,8 +298,8 @@ jstest: build-addons build-js-native-api-tests build-node-api-tests ## Runs addon tests and JS tests $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) \ --skip-tests=$(CI_SKIP_TESTS) \ - $(CI_JS_SUITES) \ - $(CI_NATIVE_SUITES) + $(JS_SUITES) \ + $(NATIVE_SUITES) .PHONY: tooltest tooltest: @@ -489,9 +492,11 @@ test-all-suites: | clear-stalled test-build bench-addons-build doc-only ## Run all test suites. $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) test/* +JS_SUITES ?= default +NATIVE_SUITES ?= addons js-native-api node-api # CI_* variables should be kept synchronized with the ones in vcbuild.bat -CI_NATIVE_SUITES ?= addons js-native-api node-api -CI_JS_SUITES ?= default +CI_NATIVE_SUITES ?= $(NATIVE_SUITES) benchmark +CI_JS_SUITES ?= $(JS_SUITES) ifeq ($(node_use_openssl), false) CI_DOC := doctool else @@ -502,7 +507,7 @@ # Build and test addons without building anything else # Related CI job: node-test-commit-arm-fanned test-ci-native: LOGLEVEL := info -test-ci-native: | test/addons/.buildstamp test/js-native-api/.buildstamp test/node-api/.buildstamp +test-ci-native: | benchmark/napi/.buildstamp test/addons/.buildstamp test/js-native-api/.buildstamp test/node-api/.buildstamp $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \ --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \ $(TEST_CI_ARGS) $(CI_NATIVE_SUITES) @@ -524,11 +529,12 @@ .PHONY: test-ci # Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned test-ci: LOGLEVEL := info -test-ci: | clear-stalled build-addons build-js-native-api-tests build-node-api-tests doc-only +test-ci: | clear-stalled bench-addons-build build-addons build-js-native-api-tests build-node-api-tests doc-only out/Release/cctest --gtest_output=xml:out/junit/cctest.xml $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \ --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \ $(TEST_CI_ARGS) $(CI_JS_SUITES) $(CI_NATIVE_SUITES) $(CI_DOC) + out/Release/embedtest 'require("./test/embedding/test-embedding.js")' @echo "Clean up any leftover processes, error if found." ps awwx | grep Release/node | grep -v grep | cat @PS_OUT=`ps awwx | grep Release/node | grep -v grep | awk '{print $$1}'`; \ @@ -650,8 +656,8 @@ $(MAKE) build-node-api-tests $(MAKE) cctest NODE_TEST_WITH_ASYNC_HOOKS=1 $(PYTHON) tools/test.py $(PARALLEL_ARGS) --mode=$(BUILDTYPE_LOWER) \ - $(CI_JS_SUITES) \ - $(CI_NATIVE_SUITES) + $(JS_SUITES) \ + $(NATIVE_SUITES) .PHONY: test-v8 @@ -732,8 +738,8 @@ if [ -d doc/api/assets ]; then cp -r doc/api/assets out/doc/api; fi; # If it's not a source tarball, we need to copy assets from doc/api_assets -out/doc/api/assets/%: doc/api_assets/% out/doc/api/assets - @cp $< $@ +out/doc/api/assets/%: doc/api_assets/% | out/doc/api/assets + @cp $< $@ ; $(RM) out/doc/api/assets/README.md run-npm-ci = $(PWD)/$(NPM) ci @@ -745,7 +751,7 @@ --versions-file=$(VERSIONS_DATA) gen-apilink = tools/doc/apilinks.js $(LINK_DATA) $(wildcard lib/*.js) -$(LINK_DATA): $(wildcard lib/*.js) tools/doc/apilinks.js +$(LINK_DATA): $(wildcard lib/*.js) tools/doc/apilinks.js | out/doc $(call available-node, $(gen-apilink)) # Regenerate previous versions data if the current version changes @@ -754,19 +760,23 @@ out/doc/api/%.json out/doc/api/%.html: doc/api/%.md tools/doc/generate.js \ tools/doc/markdown.js tools/doc/html.js tools/doc/json.js \ - tools/doc/apilinks.js $(VERSIONS_DATA) | $(LINK_DATA) + tools/doc/apilinks.js $(VERSIONS_DATA) | $(LINK_DATA) out/doc/api $(call available-node, $(gen-api)) out/doc/api/all.html: $(apidocs_html) tools/doc/allhtml.js \ - tools/doc/apilinks.js + tools/doc/apilinks.js | out/doc/api $(call available-node, tools/doc/allhtml.js) -out/doc/api/all.json: $(apidocs_json) tools/doc/alljson.js +out/doc/api/all.json: $(apidocs_json) tools/doc/alljson.js | out/doc/api $(call available-node, tools/doc/alljson.js) .PHONY: docopen -docopen: $(apidocs_html) - @$(PYTHON) -mwebbrowser file://$(PWD)/out/doc/api/all.html +docopen: out/doc/api/all.html + @$(PYTHON) -mwebbrowser file://$(abspath $<) + +.PHONY: docserve +docserve: $(apidocs_html) $(apiassets) + @$(PYTHON) -m http.server 8000 --bind 127.0.0.1 --directory out/doc/api .PHONY: docclean docclean: @@ -933,7 +943,9 @@ .PHONY: release-only release-only: check-xz @if [ "$(DISTTYPE)" = "release" ] && `grep -q REPLACEME doc/api/*.md`; then \ - echo 'Please update REPLACEME in Added: tags in doc/api/*.md (See doc/guides/releases.md)' ; \ + echo 'Please update REPLACEME tags in the following doc/api/*.md files (See doc/guides/releases.md):\n' ; \ + REPLACEMES="$(shell grep -l REPLACEME doc/api/*.md)" ; \ + echo "$$REPLACEMES\n" | tr " " "\n" ; \ exit 1 ; \ fi @if [ "$(DISTTYPE)" = "release" ] && \ @@ -1195,7 +1207,7 @@ endif LINT_MD_TARGETS = doc src lib benchmark test tools/doc tools/icu $(wildcard *.md) -LINT_MD_FILES = $(shell find $(LINT_MD_TARGETS) -type f \ +LINT_MD_FILES = $(shell $(FIND) $(LINT_MD_TARGETS) -type f \ ! -path '*node_modules*' ! -path 'test/fixtures/*' -name '*.md' \ $(LINT_MD_NEWER)) run-lint-md = tools/lint-md.js -q -f --no-stdout $(LINT_MD_FILES) @@ -1234,8 +1246,9 @@ jslint: lint-js @echo "Please use lint-js instead of jslint" -run-lint-js-ci = tools/lint-js.js $(PARALLEL_ARGS) -f tap -o test-eslint.tap \ - $(LINT_JS_TARGETS) +run-lint-js-ci = tools/node_modules/eslint/bin/eslint.js \ + --report-unused-disable-directives --ext=.js,.mjs,.md -f tap \ + -o test-eslint.tap $(LINT_JS_TARGETS) .PHONY: lint-js-ci # On the CI the output is emitted in the TAP format. @@ -1267,6 +1280,8 @@ test/addons/*/*.h \ test/cctest/*.cc \ test/cctest/*.h \ + test/embedding/*.cc \ + test/embedding/*.h \ test/js-native-api/*/*.cc \ test/js-native-api/*/*.h \ test/node-api/*/*.cc \ @@ -1316,13 +1331,13 @@ CPPLINT_QUIET = --quiet endif .PHONY: lint-cpp -# Lints the C++ code with cpplint.py and check-imports.py. +# Lints the C++ code with cpplint.py and checkimports.py. lint-cpp: tools/.cpplintstamp tools/.cpplintstamp: $(LINT_CPP_FILES) @echo "Running C++ linter..." @$(PYTHON) tools/cpplint.py $(CPPLINT_QUIET) $? - @$(PYTHON) tools/check-imports.py + @$(PYTHON) tools/checkimports.py $? @touch $@ .PHONY: lint-addon-docs @@ -1372,7 +1387,7 @@ # Related CI job: node-test-linter lint-ci: lint-js-ci lint-cpp lint-py lint-md lint-addon-docs @if ! ( grep -IEqrs "$(CONFLICT_RE)" benchmark deps doc lib src test tools ) \ - && ! ( find . -maxdepth 1 -type f | xargs grep -IEqs "$(CONFLICT_RE)" ); then \ + && ! ( $(FIND) . -maxdepth 1 -type f | xargs grep -IEqs "$(CONFLICT_RE)" ); then \ exit 0 ; \ else \ echo "" >&2 ; \ @@ -1392,3 +1407,19 @@ lint-clean: $(RM) tools/.*lintstamp $(RM) .eslintcache + +HAS_DOCKER ?= $(shell which docker > /dev/null 2>&1; [ $$? -eq 0 ] && echo 1 || echo 0) + +ifeq ($(HAS_DOCKER), 1) +DOCKER_COMMAND ?= docker run -it -v $(PWD):/node +IS_IN_WORKTREE = $(shell grep '^gitdir: ' $(PWD)/.git 2>/dev/null) +GIT_WORKTREE_COMMON = $(shell git rev-parse --git-common-dir) +DOCKER_COMMAND += $(if $(IS_IN_WORKTREE), -v $(GIT_WORKTREE_COMMON):$(GIT_WORKTREE_COMMON)) +gen-openssl: ## Generate platform dependent openssl files (requires docker) + docker build -t node-openssl-builder deps/openssl/config/ + $(DOCKER_COMMAND) node-openssl-builder make -C deps/openssl/config +else +gen-openssl: + @echo "No docker command, cannot continue" + @exit 1 +endif diff -Nru nodejs-mozilla-12.18.1/node.gyp nodejs-mozilla-12.22.12/node.gyp --- nodejs-mozilla-12.18.1/node.gyp 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/node.gyp 2022-04-05 07:17:03.000000000 +0000 @@ -11,6 +11,7 @@ 'node_use_bundled_v8%': 'true', 'node_shared%': 'false', 'force_dynamic_crt%': 0, + 'ossfuzz' : 'false', 'node_module_version%': '', 'node_shared_brotli%': 'false', 'node_shared_zlib%': 'false', @@ -94,6 +95,7 @@ 'lib/zlib.js', 'lib/internal/assert.js', 'lib/internal/assert/assertion_error.js', + 'lib/internal/assert/calltracker.js', 'lib/internal/async_hooks.js', 'lib/internal/buffer.js', 'lib/internal/cli_table.js', @@ -125,7 +127,7 @@ 'lib/internal/dtrace.js', 'lib/internal/encoding.js', 'lib/internal/errors.js', - 'lib/internal/error-serdes.js', + 'lib/internal/error_serdes.js', 'lib/internal/fixed_queue.js', 'lib/internal/freelist.js', 'lib/internal/freeze_intrinsics.js', @@ -155,6 +157,7 @@ 'lib/internal/main/run_third_party_main.js', 'lib/internal/main/worker_thread.js', 'lib/internal/modules/run_main.js', + 'lib/internal/modules/package_json_reader.js', 'lib/internal/modules/cjs/helpers.js', 'lib/internal/modules/cjs/loader.js', 'lib/internal/modules/esm/loader.js', @@ -213,6 +216,7 @@ 'lib/internal/vm/module.js', 'lib/internal/worker.js', 'lib/internal/worker/io.js', + 'lib/internal/worker/js_transferable.js', 'lib/internal/watchdog.js', 'lib/internal/streams/lazy_transform.js', 'lib/internal/streams/async_iterator.js', @@ -245,6 +249,8 @@ 'deps/acorn-plugins/acorn-private-class-elements/index.js', 'deps/acorn-plugins/acorn-private-methods/index.js', 'deps/acorn-plugins/acorn-static-class-features/index.js', + 'deps/cjs-module-lexer/lexer.js', + 'deps/cjs-module-lexer/dist/lexer.js', ], 'node_mksnapshot_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)node_mksnapshot<(EXECUTABLE_SUFFIX)', 'mkcodecache_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)mkcodecache<(EXECUTABLE_SUFFIX)', @@ -560,6 +566,7 @@ 'src/js_native_api_v8_internals.h', 'src/js_stream.cc', 'src/json_utils.cc', + 'src/js_udp_wrap.cc', 'src/module_wrap.cc', 'src/node.cc', 'src/node_api.cc', @@ -570,7 +577,6 @@ 'src/node_contextify.cc', 'src/node_credentials.cc', 'src/node_dir.cc', - 'src/node_domain.cc', 'src/node_env_var.cc', 'src/node_errors.cc', 'src/node_file.cc', @@ -735,6 +741,7 @@ 'variables': { 'openssl_system_ca_path%': '', + 'openssl_default_cipher_list%': '', }, 'defines': [ @@ -751,6 +758,11 @@ 'msvs_disabled_warnings!': [4244], 'conditions': [ + [ 'openssl_default_cipher_list!=""', { + 'defines': [ + 'NODE_OPENSSL_DEFAULT_CIPHER_LIST="<(openssl_default_cipher_list)"' + ] + }], [ 'node_builtin_modules_path!=""', { 'defines': [ 'NODE_BUILTIN_MODULES_PATH="<(node_builtin_modules_path)"' ] }], @@ -1100,6 +1112,81 @@ } ], ] }, # specialize_node_d + { # fuzz_url + 'target_name': 'fuzz_url', + 'type': 'executable', + 'dependencies': [ + '<(node_lib_target_name)', + ], + 'includes': [ + 'node.gypi' + ], + 'include_dirs': [ + 'src', + ], + 'defines': [ + 'NODE_ARCH="<(target_arch)"', + 'NODE_PLATFORM="<(OS)"', + 'NODE_WANT_INTERNALS=1', + ], + 'sources': [ + 'src/node_snapshot_stub.cc', + 'src/node_code_cache_stub.cc', + 'test/fuzzers/fuzz_url.cc', + ], + 'conditions': [ + ['OS=="linux"', { + 'ldflags': [ '-fsanitize=fuzzer' ] + }], + # Ensure that ossfuzz flag has been set and that we are on Linux + [ 'OS!="linux" or ossfuzz!="true"', { + 'type': 'none', + }], + ], + }, # fuzz_url + { # fuzz_env + 'target_name': 'fuzz_env', + 'type': 'executable', + 'dependencies': [ + '<(node_lib_target_name)', + 'deps/histogram/histogram.gyp:histogram', + 'deps/uvwasi/uvwasi.gyp:uvwasi', + 'node_dtrace_header', + 'node_dtrace_ustack', + 'node_dtrace_provider', + ], + 'includes': [ + 'node.gypi' + ], + 'include_dirs': [ + 'src', + 'tools/msvs/genfiles', + 'deps/v8/include', + 'deps/cares/include', + 'deps/uv/include', + 'deps/uvwasi/include', + 'test/cctest', + ], + 'defines': [ + 'NODE_ARCH="<(target_arch)"', + 'NODE_PLATFORM="<(OS)"', + 'NODE_WANT_INTERNALS=1', + ], + 'sources': [ + 'src/node_snapshot_stub.cc', + 'src/node_code_cache_stub.cc', + 'test/fuzzers/fuzz_env.cc', + ], + 'conditions': [ + ['OS=="linux"', { + 'ldflags': [ '-fsanitize=fuzzer' ] + }], + # Ensure that ossfuzz flag has been set and that we are on Linux + [ 'OS!="linux" or ossfuzz!="true"', { + 'type': 'none', + }], + ], + }, # fuzz_env { 'target_name': 'cctest', 'type': 'executable', @@ -1145,7 +1232,9 @@ 'test/cctest/test_base_object_ptr.cc', 'test/cctest/test_node_postmortem_metadata.cc', 'test/cctest/test_environment.cc', + 'test/cctest/test_js_native_api_v8.cc', 'test/cctest/test_linked_binding.cc', + 'test/cctest/test_node_api.cc', 'test/cctest/test_per_process.cc', 'test/cctest/test_platform.cc', 'test/cctest/test_json_utils.cc', @@ -1196,6 +1285,62 @@ ], }, # cctest + { + 'target_name': 'embedtest', + 'type': 'executable', + + 'dependencies': [ + '<(node_lib_target_name)', + 'deps/histogram/histogram.gyp:histogram', + 'deps/uvwasi/uvwasi.gyp:uvwasi', + 'node_dtrace_header', + 'node_dtrace_ustack', + 'node_dtrace_provider', + ], + + 'includes': [ + 'node.gypi' + ], + + 'include_dirs': [ + 'src', + 'tools/msvs/genfiles', + 'deps/v8/include', + 'deps/cares/include', + 'deps/uv/include', + 'deps/uvwasi/include', + 'test/embedding', + ], + + 'sources': [ + 'src/node_snapshot_stub.cc', + 'src/node_code_cache_stub.cc', + 'test/embedding/embedtest.cc', + ], + + 'conditions': [ + ['OS=="solaris"', { + 'ldflags': [ '-I<(SHARED_INTERMEDIATE_DIR)' ] + }], + # Skip cctest while building shared lib node for Windows + [ 'OS=="win" and node_shared=="true"', { + 'type': 'none', + }], + [ 'node_shared=="true"', { + 'xcode_settings': { + 'OTHER_LDFLAGS': [ '-Wl,-rpath,@loader_path', ], + }, + }], + ['OS=="win"', { + 'libraries': [ + 'Dbghelp.lib', + 'winmm.lib', + 'Ws2_32.lib', + ], + }], + ], + }, # embedtest + # TODO(joyeecheung): do not depend on node_lib, # instead create a smaller static library node_lib_base that does # just enough for node_native_module.cc and the cache builder to diff -Nru nodejs-mozilla-12.18.1/onboarding.md nodejs-mozilla-12.22.12/onboarding.md --- nodejs-mozilla-12.18.1/onboarding.md 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/onboarding.md 2022-04-05 07:17:03.000000000 +0000 @@ -56,11 +56,15 @@ * Watching the main repo will flood your inbox (several hundred notifications on typical weekdays), so be prepared -* `#node-dev` on [webchat.freenode.net](https://webchat.freenode.net/) is the - best place to interact with the TSC / other Collaborators - * If there are any questions after the session, a good place to ask is there! - * Presence is not mandatory, but please drop a note there if force-pushing to - `master` +The project has two venues for real-time discussion: +* [`#nodejs-dev`](https://openjs-foundation.slack.com/archives/C019Y2T6STH) on + the [OpenJS Foundation](https://slack-invite.openjsf.org/) +* `#node-dev` on [webchat.freenode.net](https://webchat.freenode.net/) is a + great place to interact with the TSC and other Collaborators + * If there are any questions after the session, a good place to ask is + there! + * Presence is not mandatory, but please drop a note there if force-pushing + to `master` ## Project goals & values @@ -210,6 +214,9 @@ * Run CI on the PR. Use the `node-test-pull-request` CI task. * After two Collaborator approvals for the change and two Collaborator approvals for fast-tracking, land the PR. +* Leave a comment in the PR: `Please 👍 this comment to approve fast-tracking`. +* If there are not enough approvals within a reasonable time, consider the + single approval of the onboarding TSC member sufficient, and land the PR. * Be sure to add the `PR-URL: ` and appropriate `Reviewed-By:` metadata. * [`node-core-utils`][] automates the generation of metadata and the landing @@ -238,12 +245,12 @@ the [summit](https://github.com/nodejs/summit) repository for details. [Code of Conduct]: https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md +[Landing Pull Requests]: doc/guides/collaborator-guide.md#landing-pull-requests +[Publicizing or hiding organization membership]: https://help.github.com/articles/publicizing-or-hiding-organization-membership/ [`author-ready`]: doc/guides/collaborator-guide.md#author-ready-pull-requests [`core-validate-commit`]: https://github.com/nodejs/core-validate-commit [`git-node`]: https://github.com/nodejs/node-core-utils/blob/master/docs/git-node.md [`node-core-utils`]: https://github.com/nodejs/node-core-utils -[Landing Pull Requests]: doc/guides/collaborator-guide.md#landing-pull-requests -[Publicizing or hiding organization membership]: https://help.github.com/articles/publicizing-or-hiding-organization-membership/ [set up the credentials]: https://github.com/nodejs/node-core-utils#setting-up-credentials [two-factor authentication]: https://help.github.com/articles/securing-your-account-with-two-factor-authentication-2fa/ [using a TOTP mobile app]: https://help.github.com/articles/configuring-two-factor-authentication-via-a-totp-mobile-app/ diff -Nru nodejs-mozilla-12.18.1/README.md nodejs-mozilla-12.22.12/README.md --- nodejs-mozilla-12.18.1/README.md 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/README.md 2022-04-05 07:16:59.000000000 +0000 @@ -115,7 +115,7 @@ import the keys: ```console -$ gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D +$ gpg --keyserver hkps://keys.openpgp.org --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D ``` See the bottom of this README for a full script to import active release keys. @@ -144,6 +144,7 @@ * [Contributing to the project][] * [Working Groups][] * [Strategic Initiatives][] +* [Technical values and prioritization][] ## Current Project Team Members @@ -152,12 +153,11 @@ ### TSC (Technical Steering Committee) -* [addaleax](https://github.com/addaleax) - -**Anna Henningsen** <anna@addaleax.net> (she/her) + * [apapirovski](https://github.com/apapirovski) - **Anatoli Papirovski** <apapirovski@mac.com> (he/him) * [BethGriggs](https://github.com/BethGriggs) - -**Beth Griggs** <Bethany.Griggs@uk.ibm.com> (she/her) +**Beth Griggs** <bgriggs@redhat.com> (she/her) * [BridgeAR](https://github.com/BridgeAR) - **Ruben Bridgewater** <ruben@bridgewater.de> (he/him) * [ChALkeR](https://github.com/ChALkeR) - @@ -181,13 +181,11 @@ * [mcollina](https://github.com/mcollina) - **Matteo Collina** <matteo.collina@gmail.com> (he/him) * [mhdawson](https://github.com/mhdawson) - -**Michael Dawson** <michael_dawson@ca.ibm.com> (he/him) +**Michael Dawson** <midawson@redhat.com> (he/him) * [mmarchini](https://github.com/mmarchini) - -**Matheus Marchini** <mat@mmarchini.me> +**Mary Marchini** <oss@mmarchini.me> (she/her) * [MylesBorins](https://github.com/MylesBorins) - **Myles Borins** <myles.borins@gmail.com> (he/him) -* [sam-github](https://github.com/sam-github) - -**Sam Roberts** <vieuxtech@gmail.com> * [targos](https://github.com/targos) - **Michaël Zasso** <targos@protonmail.com> (he/him) * [tniessen](https://github.com/tniessen) - @@ -197,6 +195,8 @@ ### TSC Emeriti +* [addaleax](https://github.com/addaleax) - +**Anna Henningsen** <anna@addaleax.net> (she/her) * [bnoordhuis](https://github.com/bnoordhuis) - **Ben Noordhuis** <info@bnoordhuis.nl> * [chrisdickinson](https://github.com/chrisdickinson) - @@ -225,6 +225,8 @@ **Bert Belder** <bertbelder@gmail.com> * [rvagg](https://github.com/rvagg) - **Rod Vagg** <r@va.gg> +* [sam-github](https://github.com/sam-github) - +**Sam Roberts** <vieuxtech@gmail.com> * [shigeki](https://github.com/shigeki) - **Shigeki Ohtsu** <ohtsu@ohtsu.org> (he/him) * [thefourtheye](https://github.com/thefourtheye) - @@ -238,6 +240,8 @@ * [addaleax](https://github.com/addaleax) - **Anna Henningsen** <anna@addaleax.net> (she/her) +* [aduh95](https://github.com/aduh95) - +**Antoine du Hamel** <duhamelantoine1995@gmail.com> (he/him) * [ak239](https://github.com/ak239) - **Aleksei Koziatinskii** <ak239spb@gmail.com> * [AndreasMadsen](https://github.com/AndreasMadsen) - @@ -246,6 +250,8 @@ **Anto Aravinth** <anto.aravinth.cse@gmail.com> (he/him) * [apapirovski](https://github.com/apapirovski) - **Anatoli Papirovski** <apapirovski@mac.com> (he/him) +* [AshCripps](https://github.com/AshCripps) - +**Ash Cripps** <acripps@redhat.com> * [bcoe](https://github.com/bcoe) - **Ben Coe** <bencoe@gmail.com> (he/him) * [bengl](https://github.com/bengl) - @@ -253,7 +259,7 @@ * [benjamingr](https://github.com/benjamingr) - **Benjamin Gruenbaum** <benjamingr@gmail.com> * [BethGriggs](https://github.com/BethGriggs) - -**Beth Griggs** <Bethany.Griggs@uk.ibm.com> (she/her) +**Beth Griggs** <bgriggs@redhat.com> (she/her) * [bmeck](https://github.com/bmeck) - **Bradley Farias** <bradley.meck@gmail.com> * [bmeurer](https://github.com/bmeurer) - @@ -276,14 +282,16 @@ **Shelley Vohr** <codebytere@gmail.com> (she/her) * [danbev](https://github.com/danbev) - **Daniel Bevenius** <daniel.bevenius@gmail.com> (he/him) +* [danielleadams](https://github.com/danielleadams) - +**Danielle Adams** <adamzdanielle@gmail.com> (she/her) * [davisjam](https://github.com/davisjam) - **Jamie Davis** <davisjam@vt.edu> (he/him) +* [DerekNonGeneric](https://github.com/DerekNonGeneric) - +**Derek Lewis** <DerekNonGeneric@inf.is> (he/him) * [devnexen](https://github.com/devnexen) - **David Carlier** <devnexen@gmail.com> * [devsnek](https://github.com/devsnek) - -**Gus Caplan** <me@gus.host> (he/him) -* [digitalinfinity](https://github.com/digitalinfinity) - -**Hitesh Kanwathirtha** <digitalinfinity@gmail.com> (he/him) +**Gus Caplan** <me@gus.host> (they/them) * [edsadr](https://github.com/edsadr) - **Adrian Estrada** <edsadr@gmail.com> (he/him) * [eugeneo](https://github.com/eugeneo) - @@ -306,12 +314,12 @@ **Jiawen Geng** <technicalcute@gmail.com> * [GeoffreyBooth](https://github.com/geoffreybooth) - **Geoffrey Booth** <webmaster@geoffreybooth.com> (he/him) -* [gibfahn](https://github.com/gibfahn) - -**Gibson Fahnestock** <gibfahn@gmail.com> (he/him) * [gireeshpunathil](https://github.com/gireeshpunathil) - **Gireesh Punathil** <gpunathi@in.ibm.com> (he/him) * [guybedford](https://github.com/guybedford) - **Guy Bedford** <guybedford@gmail.com> (he/him) +* [HarshithaKP](https://github.com/HarshithaKP) - +**Harshitha K P** <harshitha014@gmail.com> (she/her) * [hashseed](https://github.com/hashseed) - **Yang Guo** <yangguo@chromium.org> (he/him) * [himself65](https://github.com/himself65) - @@ -336,8 +344,6 @@ **Juan José Arboleda** <soyjuanarbol@gmail.com> (he/him) * [JungMinu](https://github.com/JungMinu) - **Minwoo Jung** <nodecorelab@gmail.com> (he/him) -* [kfarnung](https://github.com/kfarnung) - -**Kyle Farnung** <kfarnung@microsoft.com> (he/him) * [lance](https://github.com/lance) - **Lance Ball** <lball@redhat.com> (he/him) * [legendecas](https://github.com/legendecas) - @@ -353,13 +359,13 @@ * [mcollina](https://github.com/mcollina) - **Matteo Collina** <matteo.collina@gmail.com> (he/him) * [mhdawson](https://github.com/mhdawson) - -**Michael Dawson** <michael_dawson@ca.ibm.com> (he/him) +**Michael Dawson** <midawson@redhat.com> (he/him) * [mildsunrise](https://github.com/mildsunrise) - **Alba Mendez** <me@alba.sh> (she/her) * [misterdjules](https://github.com/misterdjules) - **Julien Gilli** <jgilli@nodejs.org> * [mmarchini](https://github.com/mmarchini) - -**Matheus Marchini** <mat@mmarchini.me> +**Mary Marchini** <oss@mmarchini.me> (she/her) * [mscdex](https://github.com/mscdex) - **Brian White** <mscdex@mscdex.net> * [MylesBorins](https://github.com/MylesBorins) - @@ -376,26 +382,28 @@ **Stephen Belanger** <admin@stephenbelanger.com> (he/him) * [refack](https://github.com/refack) - **Refael Ackermann (רפאל פלחי)** <refack@gmail.com> (he/him/הוא/אתה) +* [rexagod](https://github.com/rexagod) - +**Pranshu Srivastava** <rexagod@gmail.com> (he/him) * [richardlau](https://github.com/richardlau) - -**Richard Lau** <riclau@uk.ibm.com> +**Richard Lau** <rlau@redhat.com> +* [rickyes](https://github.com/rickyes) - +**Ricky Zhou** <0x19951125@gmail.com> (he/him) * [ronag](https://github.com/ronag) - **Robert Nagy** <ronagy@icloud.com> * [ronkorving](https://github.com/ronkorving) - **Ron Korving** <ron@ronkorving.nl> * [rubys](https://github.com/rubys) - **Sam Ruby** <rubys@intertwingly.net> +* [ruyadorno](https://github.com/ruyadorno) - +**Ruy Adorno** <ruyadorno@github.com> (he/him) * [rvagg](https://github.com/rvagg) - **Rod Vagg** <rod@vagg.org> * [ryzokuken](https://github.com/ryzokuken) - **Ujjwal Sharma** <ryzokuken@disroot.org> (he/him) * [saghul](https://github.com/saghul) - **Saúl Ibarra Corretgé** <saghul@gmail.com> -* [sam-github](https://github.com/sam-github) - -**Sam Roberts** <vieuxtech@gmail.com> * [santigimeno](https://github.com/santigimeno) - **Santiago Gimeno** <santiago.gimeno@gmail.com> -* [sebdeckers](https://github.com/sebdeckers) - -**Sebastiaan Deckers** <sebdeckers83@gmail.com> * [seishun](https://github.com/seishun) - **Nikolai Vavilov** <vvnicholas@gmail.com> * [shigeki](https://github.com/shigeki) - @@ -408,10 +416,10 @@ **Steven R Loomis** <srloomis@us.ibm.com> * [starkwang](https://github.com/starkwang) - **Weijia Wang** <starkwang@126.com> +* [sxa](https://github.com/sxa) - +**Stewart X Addison** <sxa@redhat.com> (he/him) * [targos](https://github.com/targos) - **Michaël Zasso** <targos@protonmail.com> (he/him) -* [thefourtheye](https://github.com/thefourtheye) - -**Sakthipriyan Vairamani** <thechargingvolcano@gmail.com> (he/him) * [TimothyGu](https://github.com/TimothyGu) - **Tiancheng "Timothy" Gu** <timothygu99@gmail.com> (he/him) * [tniessen](https://github.com/tniessen) - @@ -455,12 +463,16 @@ **Claudio Rodriguez** <cjrodr@yahoo.com> * [DavidCai1993](https://github.com/DavidCai1993) - **David Cai** <davidcai1993@yahoo.com> (he/him) +* [digitalinfinity](https://github.com/digitalinfinity) - +**Hitesh Kanwathirtha** <digitalinfinity@gmail.com> (he/him) * [eljefedelrodeodeljefe](https://github.com/eljefedelrodeodeljefe) - **Robert Jefe Lindstaedt** <robert.lindstaedt@gmail.com> * [estliberitas](https://github.com/estliberitas) - **Alexander Makarenko** <estliberitas@gmail.com> * [firedfox](https://github.com/firedfox) - **Daniel Wang** <wangyang0123@gmail.com> +* [gibfahn](https://github.com/gibfahn) - +**Gibson Fahnestock** <gibfahn@gmail.com> (he/him) * [glentiki](https://github.com/glentiki) - **Glen Keane** <glenkeane.94@gmail.com> (he/him) * [iarna](https://github.com/iarna) - @@ -483,6 +495,8 @@ **Josh Gavant** <josh.gavant@outlook.com> * [julianduque](https://github.com/julianduque) - **Julian Duque** <julianduquej@gmail.com> (he/him) +* [kfarnung](https://github.com/kfarnung) - +**Kyle Farnung** <kfarnung@microsoft.com> (he/him) * [kunalspathak](https://github.com/kunalspathak) - **Kunal Pathak** <kunal.pathak@microsoft.com> * [lucamaraschi](https://github.com/lucamaraschi) - @@ -529,10 +543,16 @@ **Roman Klauke** <romaaan.git@gmail.com> * [RReverser](https://github.com/RReverser) - **Ingvar Stepanyan** <me@rreverser.com> +* [sam-github](https://github.com/sam-github) - +**Sam Roberts** <vieuxtech@gmail.com> +* [sebdeckers](https://github.com/sebdeckers) - +**Sebastiaan Deckers** <sebdeckers83@gmail.com> * [stefanmb](https://github.com/stefanmb) - **Stefan Budeanu** <stefan@budeanu.com> * [tellnes](https://github.com/tellnes) - **Christian Tellnes** <christian@tellnes.no> +* [thefourtheye](https://github.com/thefourtheye) - +**Sakthipriyan Vairamani** <thechargingvolcano@gmail.com> (he/him) * [thlorenz](https://github.com/thlorenz) - **Thorsten Lorenz** <thlorenz@gmx.de> * [trevnorris](https://github.com/trevnorris) - @@ -545,42 +565,60 @@ **Vse Mozhet Byt** <vsemozhetbyt@gmail.com> (he/him) * [whitlockjc](https://github.com/whitlockjc) - **Jeremy Whitlock** <jwhitlock@apache.org> + Collaborators follow the [Collaborator Guide](./doc/guides/collaborator-guide.md) in maintaining the Node.js project. +### Triagers + +* [PoojaDurgad](https://github.com/PoojaDurgad) - +**Pooja Durgad** <Pooja.D.P@ibm.com> + ### Release Keys Primary GPG keys for Node.js Releasers (some Releasers sign with subkeys): -* **Beth Griggs** <bethany.griggs@uk.ibm.com> +* **Beth Griggs** <bgriggs@redhat.com> `4ED778F539E3634C779C87C6D7062848A1AB005C` +* **Bryan English** <bryan@bryanenglish.com> +`141F07595B7B3FFE74309A937405533BE57C7D57` * **Colin Ihrig** <cjihrig@gmail.com> `94AE36675C464D64BAFA68DD7434390BDBE9B9C5` +* **Danielle Adams** <adamzdanielle@gmail.com> +`74F12602B6F1C4E913FAA37AD3A89613643B6201` * **James M Snell** <jasnell@keybase.io> `71DCFD284A79C3B38668286BC97EC7A07EDE3FC1` * **Michaël Zasso** <targos@protonmail.com> `8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600` * **Myles Borins** <myles.borins@gmail.com> `C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8` +* **Richard Lau** <rlau@redhat.com> +`C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C` * **Rod Vagg** <rod@vagg.org> `DD8F2338BAE7501E3DD5AC78C273792F7D83545D` * **Ruben Bridgewater** <ruben@bridgewater.de> `A48C2BEE680E841632CD4E44F07496B3EB3C1762` +* **Ruy Adorno** <ruyadorno@hotmail.com> +`108F52B48DB57BB0CC439B2997B01419BD92F80A` * **Shelley Vohr** <shelley.vohr@gmail.com> `B9E2F5981AA6E0CD28160D9FF13993A75599653C` To import the full set of trusted release keys: -```shell -gpg --keyserver pool.sks-keyservers.net --recv-keys 4ED778F539E3634C779C87C6D7062848A1AB005C -gpg --keyserver pool.sks-keyservers.net --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 -gpg --keyserver pool.sks-keyservers.net --recv-keys 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 -gpg --keyserver pool.sks-keyservers.net --recv-keys 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 -gpg --keyserver pool.sks-keyservers.net --recv-keys C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 -gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D -gpg --keyserver pool.sks-keyservers.net --recv-keys A48C2BEE680E841632CD4E44F07496B3EB3C1762 -gpg --keyserver pool.sks-keyservers.net --recv-keys B9E2F5981AA6E0CD28160D9FF13993A75599653C +```bash +gpg --keyserver hkps://keys.openpgp.org --recv-keys 4ED778F539E3634C779C87C6D7062848A1AB005C +gpg --keyserver hkps://keys.openpgp.org --recv-keys 141F07595B7B3FFE74309A937405533BE57C7D57 +gpg --keyserver hkps://keys.openpgp.org --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 +gpg --keyserver hkps://keys.openpgp.org --recv-keys 74F12602B6F1C4E913FAA37AD3A89613643B6201 +gpg --keyserver hkps://keys.openpgp.org --recv-keys 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 +gpg --keyserver hkps://keys.openpgp.org --recv-keys 8FCCA13FEF1D0C2E91008E09770F7A9A5AE15600 +gpg --keyserver hkps://keys.openpgp.org --recv-keys C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 +gpg --keyserver hkps://keys.openpgp.org --recv-keys C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C +gpg --keyserver hkps://keys.openpgp.org --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D +gpg --keyserver hkps://keys.openpgp.org --recv-keys A48C2BEE680E841632CD4E44F07496B3EB3C1762 +gpg --keyserver hkps://keys.openpgp.org --recv-keys 108F52B48DB57BB0CC439B2997B01419BD92F80A +gpg --keyserver hkps://keys.openpgp.org --recv-keys B9E2F5981AA6E0CD28160D9FF13993A75599653C ``` See the section above on [Verifying Binaries](#verifying-binaries) for how to @@ -590,6 +628,8 @@ * **Chris Dickinson** <christopher.s.dickinson@gmail.com> `9554F04D7259F04124DE6B476D5A82AC7E37093B` +* **Danielle Adams** <adamzdanielle@gmail.com> +`1C050899334244A8AF75E53792EF661D867B9DFA` * **Evan Lucas** <evanlucas@me.com> `B9AE9905FFD7803F25714661B63B535A4C206CA9` * **Gibson Fahnestock** <gibfahn@gmail.com> @@ -608,6 +648,7 @@ [Code of Conduct]: https://github.com/nodejs/admin/blob/master/CODE_OF_CONDUCT.md [Contributing to the project]: CONTRIBUTING.md [Node.js Website]: https://nodejs.org/ -[OpenJS Foundation]: http://openjs.foundation/ -[Working Groups]: https://github.com/nodejs/TSC/blob/master/WORKING_GROUPS.md +[OpenJS Foundation]: https://openjsf.org/ [Strategic Initiatives]: https://github.com/nodejs/TSC/blob/master/Strategic-Initiatives.md +[Technical values and prioritization]: doc/guides/technical-values.md +[Working Groups]: https://github.com/nodejs/TSC/blob/master/WORKING_GROUPS.md diff -Nru nodejs-mozilla-12.18.1/SECURITY.md nodejs-mozilla-12.22.12/SECURITY.md --- nodejs-mozilla-12.18.1/SECURITY.md 2020-06-17 01:25:35.000000000 +0000 +++ nodejs-mozilla-12.22.12/SECURITY.md 2022-04-05 07:16:59.000000000 +0000 @@ -1,6 +1,6 @@ # Security -## Reporting a Bug in Node.js +## Reporting a bug in Node.js Report security bugs in Node.js via [HackerOne](https://hackerone.com/nodejs). @@ -13,13 +13,13 @@ and may ask for additional information or guidance surrounding the reported issue. -### Node.js Bug Bounty Program +### Node.js bug bounty program The Node.js project engages in an official bug bounty program for security researchers and responsible public disclosures. The program is managed through the HackerOne platform. See for further details. -## Reporting a Bug in a third party module +## Reporting a bug in a third party module Security bugs in third party modules should be reported to their respective maintainers and should also be coordinated through the Node.js Ecosystem @@ -31,7 +31,7 @@ Thank you for improving the security of Node.js and its ecosystem. Your efforts and responsible disclosure are greatly appreciated and will be acknowledged. -## Disclosure Policy +## Disclosure policy Here is the security disclosure policy for Node.js @@ -60,14 +60,14 @@ the release process above to ensure that the disclosure is handled in a consistent manner. -## Receiving Security Updates +## Receiving security updates Security notifications will be distributed via the following methods. * * -## Comments on this Policy +## Comments on this policy If you have suggestions on how this process could be improved please submit a [pull request](https://github.com/nodejs/nodejs.org) or diff -Nru nodejs-mozilla-12.18.1/src/api/callback.cc nodejs-mozilla-12.22.12/src/api/callback.cc --- nodejs-mozilla-12.18.1/src/api/callback.cc 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/api/callback.cc 2022-04-05 07:17:03.000000000 +0000 @@ -36,7 +36,7 @@ InternalCallbackScope::InternalCallbackScope(AsyncWrap* async_wrap, int flags) : InternalCallbackScope(async_wrap->env(), - async_wrap->GetResource(), + async_wrap->object(), { async_wrap->get_async_id(), async_wrap->get_trigger_async_id() }, flags) {} @@ -158,20 +158,38 @@ CHECK(!argv[i].IsEmpty()); #endif - InternalCallbackScope scope(env, resource, asyncContext); + Local hook_cb = env->async_hooks_callback_trampoline(); + int flags = InternalCallbackScope::kNoFlags; + bool use_async_hooks_trampoline = false; + AsyncHooks* async_hooks = env->async_hooks(); + if (!hook_cb.IsEmpty()) { + // Use the callback trampoline if there are any before or after hooks, or + // we can expect some kind of usage of async_hooks.executionAsyncResource(). + flags = InternalCallbackScope::kSkipAsyncHooks; + use_async_hooks_trampoline = + async_hooks->fields()[AsyncHooks::kBefore] + + async_hooks->fields()[AsyncHooks::kAfter] + + async_hooks->fields()[AsyncHooks::kUsesExecutionAsyncResource] > 0; + } + + InternalCallbackScope scope(env, resource, asyncContext, flags); if (scope.Failed()) { return MaybeLocal(); } - Local domain_cb = env->domain_callback(); MaybeLocal ret; - if (asyncContext.async_id != 0 || domain_cb.IsEmpty()) { - ret = callback->Call(env->context(), recv, argc, argv); + + if (use_async_hooks_trampoline) { + MaybeStackBuffer, 16> args(3 + argc); + args[0] = v8::Number::New(env->isolate(), asyncContext.async_id); + args[1] = resource; + args[2] = callback; + for (int i = 0; i < argc; i++) { + args[i + 3] = argv[i]; + } + ret = hook_cb->Call(env->context(), recv, args.length(), &args[0]); } else { - std::vector> args(1 + argc); - args[0] = callback; - std::copy(&argv[0], &argv[argc], args.begin() + 1); - ret = domain_cb->Call(env->context(), recv, args.size(), &args[0]); + ret = callback->Call(env->context(), recv, argc, argv); } if (ret.IsEmpty()) { @@ -207,10 +225,19 @@ int argc, Local argv[], async_context asyncContext) { - Local callback_v = - recv->Get(isolate->GetCurrentContext(), symbol).ToLocalChecked(); - if (callback_v.IsEmpty()) return Local(); - if (!callback_v->IsFunction()) return Local(); + // Check can_call_into_js() first because calling Get() might do so. + Environment* env = Environment::GetCurrent(recv->CreationContext()); + CHECK_NOT_NULL(env); + if (!env->can_call_into_js()) return Local(); + + Local callback_v; + if (!recv->Get(isolate->GetCurrentContext(), symbol).ToLocal(&callback_v)) + return Local(); + if (!callback_v->IsFunction()) { + // This used to return an empty value, but Undefined() makes more sense + // since no exception is pending here. + return Undefined(isolate); + } Local callback = callback_v.As(); return MakeCallback(isolate, recv, callback, argc, argv, asyncContext); } diff -Nru nodejs-mozilla-12.18.1/src/api/encoding.cc nodejs-mozilla-12.22.12/src/api/encoding.cc --- nodejs-mozilla-12.18.1/src/api/encoding.cc 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/api/encoding.cc 2022-04-05 07:17:03.000000000 +0000 @@ -14,74 +14,91 @@ enum encoding default_encoding) { switch (encoding[0]) { case 'u': + case 'U': // utf8, utf16le if (encoding[1] == 't' && encoding[2] == 'f') { // Skip `-` - encoding += encoding[3] == '-' ? 4 : 3; - if (encoding[0] == '8' && encoding[1] == '\0') + const size_t skip = encoding[3] == '-' ? 4 : 3; + if (encoding[skip] == '8' && encoding[skip + 1] == '\0') return UTF8; - if (strncmp(encoding, "16le", 4) == 0) + if (strncmp(encoding + skip, "16le", 5) == 0) return UCS2; - // ucs2 } else if (encoding[1] == 'c' && encoding[2] == 's') { - encoding += encoding[3] == '-' ? 4 : 3; - if (encoding[0] == '2' && encoding[1] == '\0') + const size_t skip = encoding[3] == '-' ? 4 : 3; + if (encoding[skip] == '2' && encoding[skip + 1] == '\0') return UCS2; } + if (StringEqualNoCase(encoding, "utf8")) + return UTF8; + if (StringEqualNoCase(encoding, "utf-8")) + return UTF8; + if (StringEqualNoCase(encoding, "ucs2")) + return UCS2; + if (StringEqualNoCase(encoding, "ucs-2")) + return UCS2; + if (StringEqualNoCase(encoding, "utf16le")) + return UCS2; + if (StringEqualNoCase(encoding, "utf-16le")) + return UCS2; break; + case 'l': + case 'L': // latin1 if (encoding[1] == 'a') { - if (strncmp(encoding + 2, "tin1", 4) == 0) + if (strncmp(encoding + 2, "tin1", 5) == 0) return LATIN1; } + if (StringEqualNoCase(encoding, "latin1")) + return LATIN1; break; + case 'b': - // binary + case 'B': + // binary is a deprecated alias of latin1 if (encoding[1] == 'i') { - if (strncmp(encoding + 2, "nary", 4) == 0) + if (strncmp(encoding + 2, "nary", 5) == 0) return LATIN1; - // buffer } else if (encoding[1] == 'u') { - if (strncmp(encoding + 2, "ffer", 4) == 0) + if (strncmp(encoding + 2, "ffer", 5) == 0) return BUFFER; + // base64 + } else if (encoding[1] == 'a') { + if (strncmp(encoding + 2, "se64", 5) == 0) + return BASE64; } + if (StringEqualNoCase(encoding, "binary")) + return LATIN1; // BINARY is a deprecated alias of LATIN1. + if (StringEqualNoCase(encoding, "buffer")) + return BUFFER; + if (StringEqualNoCase(encoding, "base64")) + return BASE64; break; - case '\0': - return default_encoding; - default: + + case 'a': + case 'A': + // ascii + if (encoding[1] == 's') { + if (strncmp(encoding + 2, "cii", 4) == 0) + return ASCII; + } + if (StringEqualNoCase(encoding, "ascii")) + return ASCII; break; - } - if (StringEqualNoCase(encoding, "utf8")) { - return UTF8; - } else if (StringEqualNoCase(encoding, "utf-8")) { - return UTF8; - } else if (StringEqualNoCase(encoding, "ascii")) { - return ASCII; - } else if (StringEqualNoCase(encoding, "base64")) { - return BASE64; - } else if (StringEqualNoCase(encoding, "ucs2")) { - return UCS2; - } else if (StringEqualNoCase(encoding, "ucs-2")) { - return UCS2; - } else if (StringEqualNoCase(encoding, "utf16le")) { - return UCS2; - } else if (StringEqualNoCase(encoding, "utf-16le")) { - return UCS2; - } else if (StringEqualNoCase(encoding, "latin1")) { - return LATIN1; - } else if (StringEqualNoCase(encoding, "binary")) { - return LATIN1; // BINARY is a deprecated alias of LATIN1. - } else if (StringEqualNoCase(encoding, "buffer")) { - return BUFFER; - } else if (StringEqualNoCase(encoding, "hex")) { - return HEX; - } else { - return default_encoding; + case 'h': + case 'H': + // hex + if (encoding[1] == 'e') + if (encoding[2] == 'x' && encoding[3] == '\0') + return HEX; + if (StringEqualNoCase(encoding, "hex")) + return HEX; + break; } + return default_encoding; } diff -Nru nodejs-mozilla-12.18.1/src/api/environment.cc nodejs-mozilla-12.22.12/src/api/environment.cc --- nodejs-mozilla-12.18.1/src/api/environment.cc 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/api/environment.cc 2022-04-05 07:17:03.000000000 +0000 @@ -7,6 +7,10 @@ #include "node_v8_platform-inl.h" #include "uv.h" +#if HAVE_INSPECTOR +#include "inspector/worker_inspector.h" // ParentInspectorHandle +#endif + namespace node { using errors::TryCatchScope; using v8::Array; @@ -27,38 +31,33 @@ using v8::String; using v8::Value; -static bool AllowWasmCodeGenerationCallback(Local context, - Local) { +bool AllowWasmCodeGenerationCallback(Local context, + Local) { Local wasm_code_gen = context->GetEmbedderData(ContextEmbedderIndex::kAllowWasmCodeGeneration); return wasm_code_gen->IsUndefined() || wasm_code_gen->IsTrue(); } -static bool ShouldAbortOnUncaughtException(Isolate* isolate) { +bool ShouldAbortOnUncaughtException(Isolate* isolate) { DebugSealHandleScope scope(isolate); Environment* env = Environment::GetCurrent(isolate); return env != nullptr && (env->is_main_thread() || !env->is_stopping()) && + env->abort_on_uncaught_exception() && env->should_abort_on_uncaught_toggle()[0] && !env->inside_should_not_abort_on_uncaught_scope(); } -static MaybeLocal PrepareStackTraceCallback(Local context, - Local exception, - Local trace) { +MaybeLocal PrepareStackTraceCallback(Local context, + Local exception, + Local trace) { Environment* env = Environment::GetCurrent(context); if (env == nullptr) { - MaybeLocal s = exception->ToString(context); - return s.IsEmpty() ? - MaybeLocal() : - MaybeLocal(s.ToLocalChecked()); + return exception->ToString(context).FromMaybe(Local()); } Local prepare = env->prepare_stack_trace_callback(); if (prepare.IsEmpty()) { - MaybeLocal s = exception->ToString(context); - return s.IsEmpty() ? - MaybeLocal() : - MaybeLocal(s.ToLocalChecked()); + return exception->ToString(context).FromMaybe(Local()); } Local args[] = { context->Global(), @@ -251,9 +250,11 @@ s.allow_wasm_code_generation_callback : AllowWasmCodeGenerationCallback; isolate->SetAllowWasmCodeGenerationCallback(allow_wasm_codegen_cb); - auto* promise_reject_cb = s.promise_reject_callback ? - s.promise_reject_callback : task_queue::PromiseRejectCallback; - isolate->SetPromiseRejectCallback(promise_reject_cb); + if ((s.flags & SHOULD_NOT_SET_PROMISE_REJECTION_CALLBACK) == 0) { + auto* promise_reject_cb = s.promise_reject_callback ? + s.promise_reject_callback : PromiseRejectCallback; + isolate->SetPromiseRejectCallback(promise_reject_cb); + } auto* host_cleanup_cb = s.host_cleanup_finalization_group_callback ? s.host_cleanup_finalization_group_callback : @@ -317,39 +318,152 @@ delete isolate_data; } +InspectorParentHandle::~InspectorParentHandle() {} + +// Hide the internal handle class from the public API. +#if HAVE_INSPECTOR +struct InspectorParentHandleImpl : public InspectorParentHandle { + std::unique_ptr impl; + + explicit InspectorParentHandleImpl( + std::unique_ptr&& impl) + : impl(std::move(impl)) {} +}; +#endif + Environment* CreateEnvironment(IsolateData* isolate_data, Local context, int argc, const char* const* argv, int exec_argc, const char* const* exec_argv) { + return CreateEnvironment( + isolate_data, context, + std::vector(argv, argv + argc), + std::vector(exec_argv, exec_argv + exec_argc)); +} + +Environment* CreateEnvironment( + IsolateData* isolate_data, + Local context, + const std::vector& args, + const std::vector& exec_args, + EnvironmentFlags::Flags flags, + ThreadId thread_id, + std::unique_ptr inspector_parent_handle) { Isolate* isolate = context->GetIsolate(); HandleScope handle_scope(isolate); Context::Scope context_scope(context); // TODO(addaleax): This is a much better place for parsing per-Environment // options than the global parse call. - std::vector args(argv, argv + argc); - std::vector exec_args(exec_argv, exec_argv + exec_argc); - // TODO(addaleax): Provide more sensible flags, in an embedder-accessible way. Environment* env = new Environment( isolate_data, context, args, exec_args, - static_cast(Environment::kIsMainThread | - Environment::kOwnsProcessState | - Environment::kOwnsInspector)); - env->InitializeLibuv(per_process::v8_is_profiling); - if (env->RunBootstrapping().IsEmpty()) + flags, + thread_id); + +#if HAVE_INSPECTOR + if (inspector_parent_handle) { + env->InitializeInspector( + std::move(static_cast( + inspector_parent_handle.get())->impl)); + } else { + env->InitializeInspector({}); + } +#endif + + if (env->RunBootstrapping().IsEmpty()) { + FreeEnvironment(env); return nullptr; + } + return env; } void FreeEnvironment(Environment* env) { - env->RunCleanup(); + { + // TODO(addaleax): This should maybe rather be in a SealHandleScope. + HandleScope handle_scope(env->isolate()); + Context::Scope context_scope(env->context()); + env->set_stopping(true); + env->stop_sub_worker_contexts(); + env->RunCleanup(); + RunAtExit(env); + } + + // This call needs to be made while the `Environment` is still alive + // because we assume that it is available for async tracking in the + // NodePlatform implementation. + MultiIsolatePlatform* platform = env->isolate_data()->platform(); + if (platform != nullptr) + platform->DrainTasks(env->isolate()); + delete env; } +NODE_EXTERN std::unique_ptr GetInspectorParentHandle( + Environment* env, + ThreadId thread_id, + const char* url) { + CHECK_NOT_NULL(env); + CHECK_NE(thread_id.id, static_cast(-1)); +#if HAVE_INSPECTOR + return std::make_unique( + env->inspector_agent()->GetParentHandle(thread_id.id, url)); +#else + return {}; +#endif +} + +void LoadEnvironment(Environment* env) { + USE(LoadEnvironment(env, + StartExecutionCallback{}, + {})); +} + +MaybeLocal LoadEnvironment( + Environment* env, + StartExecutionCallback cb, + std::unique_ptr removeme) { + env->InitializeLibuv(per_process::v8_is_profiling); + env->InitializeDiagnostics(); + + return StartExecution(env, cb); +} + +MaybeLocal LoadEnvironment( + Environment* env, + const char* main_script_source_utf8, + std::unique_ptr removeme) { + CHECK_NOT_NULL(main_script_source_utf8); + return LoadEnvironment( + env, + [&](const StartExecutionCallbackInfo& info) -> MaybeLocal { + // This is a slightly hacky way to convert UTF-8 to UTF-16. + Local str = + String::NewFromUtf8(env->isolate(), + main_script_source_utf8, + v8::NewStringType::kNormal).ToLocalChecked(); + auto main_utf16 = std::make_unique(env->isolate(), str); + + // TODO(addaleax): Avoid having a global table for all scripts. + std::string name = "embedder_main_" + std::to_string(env->thread_id()); + native_module::NativeModuleEnv::Add( + name.c_str(), + UnionBytes(**main_utf16, main_utf16->length())); + env->set_main_utf16(std::move(main_utf16)); + std::vector> params = { + env->process_string(), + env->require_string()}; + std::vector> args = { + env->process_object(), + env->native_module_require()}; + return ExecuteBootstrapper(env, name.c_str(), ¶ms, &args); + }); +} + Environment* GetCurrentEnvironment(Local context) { return Environment::GetCurrent(context); } @@ -358,16 +472,39 @@ return per_process::v8_platform.Platform(); } +MultiIsolatePlatform* GetMultiIsolatePlatform(Environment* env) { + return GetMultiIsolatePlatform(env->isolate_data()); +} + +MultiIsolatePlatform* GetMultiIsolatePlatform(IsolateData* env) { + return env->platform(); +} + MultiIsolatePlatform* CreatePlatform( int thread_pool_size, node::tracing::TracingController* tracing_controller) { - return new NodePlatform(thread_pool_size, tracing_controller); + return CreatePlatform( + thread_pool_size, + static_cast(tracing_controller)); +} + +MultiIsolatePlatform* CreatePlatform( + int thread_pool_size, + v8::TracingController* tracing_controller) { + return MultiIsolatePlatform::Create(thread_pool_size, tracing_controller) + .release(); } void FreePlatform(MultiIsolatePlatform* platform) { delete platform; } +std::unique_ptr MultiIsolatePlatform::Create( + int thread_pool_size, + v8::TracingController* tracing_controller) { + return std::make_unique(thread_pool_size, tracing_controller); +} + MaybeLocal GetPerContextExports(Local context) { Isolate* isolate = context->GetIsolate(); EscapableHandleScope handle_scope(isolate); @@ -423,7 +560,7 @@ if (context->Global()->Get(context, intl_string).ToLocal(&intl_v) && intl_v->IsObject()) { Local intl = intl_v.As(); - intl->Delete(context, break_iter_string).FromJust(); + intl->Delete(context, break_iter_string).Check(); } // Delete `Atomics.wake` @@ -434,7 +571,7 @@ if (context->Global()->Get(context, atomics_string).ToLocal(&atomics_v) && atomics_v->IsObject()) { Local atomics = atomics_v.As(); - atomics->Delete(context, wake_string).FromJust(); + atomics->Delete(context, wake_string).Check(); } // Remove __proto__ @@ -504,10 +641,10 @@ MaybeLocal maybe_fn = native_module::NativeModuleEnv::LookupAndCompile( context, *module, ¶meters, nullptr); - if (maybe_fn.IsEmpty()) { + Local fn; + if (!maybe_fn.ToLocal(&fn)) { return false; } - Local fn = maybe_fn.ToLocalChecked(); MaybeLocal result = fn->Call(context, Undefined(isolate), arraysize(arguments), arguments); // Execution failed during context creation. @@ -566,4 +703,26 @@ AddLinkedBinding(env, mod); } +static std::atomic next_thread_id{0}; + +ThreadId AllocateEnvironmentThreadId() { + ThreadId ret; + ret.id = next_thread_id++; + return ret; +} + +void DefaultProcessExitHandler(Environment* env, int exit_code) { + env->set_can_call_into_js(false); + env->stop_sub_worker_contexts(); + DisposePlatform(); + uv_library_shutdown(); + exit(exit_code); +} + + +void SetProcessExitHandler(Environment* env, + std::function&& handler) { + env->set_process_exit_handler(std::move(handler)); +} + } // namespace node diff -Nru nodejs-mozilla-12.18.1/src/api/hooks.cc nodejs-mozilla-12.22.12/src/api/hooks.cc --- nodejs-mozilla-12.18.1/src/api/hooks.cc 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/api/hooks.cc 2022-04-05 07:17:03.000000000 +0000 @@ -30,16 +30,24 @@ } void EmitBeforeExit(Environment* env) { - env->RunBeforeExitCallbacks(); + TraceEventScope trace_scope(TRACING_CATEGORY_NODE1(environment), + "BeforeExit", env); + if (!env->destroy_async_id_list()->empty()) + AsyncWrap::DestroyAsyncIdsCallback(env); HandleScope handle_scope(env->isolate()); Context::Scope context_scope(env->context()); - Local exit_code = env->process_object() - ->Get(env->context(), env->exit_code_string()) - .ToLocalChecked() - ->ToInteger(env->context()) - .ToLocalChecked(); - ProcessEmit(env, "beforeExit", exit_code).ToLocalChecked(); + + Local exit_code_v; + if (!env->process_object()->Get(env->context(), env->exit_code_string()) + .ToLocal(&exit_code_v)) return; + + Local exit_code; + if (!exit_code_v->ToInteger(env->context()).ToLocal(&exit_code)) return; + + // TODO(addaleax): Provide variants of EmitExit() and EmitBeforeExit() that + // actually forward empty MaybeLocal<>s (and check env->can_call_into_js()). + USE(ProcessEmit(env, "beforeExit", exit_code)); } int EmitExit(Environment* env) { @@ -67,8 +75,35 @@ .ToChecked(); } +typedef void (*CleanupHook)(void* arg); +typedef void (*AsyncCleanupHook)(void* arg, void(*)(void*), void*); + +struct AsyncCleanupHookInfo final { + Environment* env; + AsyncCleanupHook fun; + void* arg; + bool started = false; + // Use a self-reference to make sure the storage is kept alive while the + // cleanup hook is registered but not yet finished. + std::shared_ptr self; +}; + +// Opaque type that is basically an alias for `shared_ptr` +// (but not publicly so for easier ABI/API changes). In particular, +// std::shared_ptr does not generally maintain a consistent ABI even on a +// specific platform. +struct ACHHandle final { + std::shared_ptr info; +}; +// This is implemented as an operator on a struct because otherwise you can't +// default-initialize AsyncCleanupHookHandle, because in C++ for a +// std::unique_ptr to be default-initializable the deleter type also needs +// to be default-initializable; in particular, function types don't satisfy +// this. +void DeleteACHHandle::operator ()(ACHHandle* handle) const { delete handle; } + void AddEnvironmentCleanupHook(Isolate* isolate, - void (*fun)(void* arg), + CleanupHook fun, void* arg) { Environment* env = Environment::GetCurrent(isolate); CHECK_NOT_NULL(env); @@ -76,13 +111,50 @@ } void RemoveEnvironmentCleanupHook(Isolate* isolate, - void (*fun)(void* arg), + CleanupHook fun, void* arg) { Environment* env = Environment::GetCurrent(isolate); CHECK_NOT_NULL(env); env->RemoveCleanupHook(fun, arg); } +static void FinishAsyncCleanupHook(void* arg) { + AsyncCleanupHookInfo* info = static_cast(arg); + std::shared_ptr keep_alive = info->self; + + info->env->DecreaseWaitingRequestCounter(); + info->self.reset(); +} + +static void RunAsyncCleanupHook(void* arg) { + AsyncCleanupHookInfo* info = static_cast(arg); + info->env->IncreaseWaitingRequestCounter(); + info->started = true; + info->fun(info->arg, FinishAsyncCleanupHook, info); +} + +AsyncCleanupHookHandle AddEnvironmentCleanupHook( + Isolate* isolate, + AsyncCleanupHook fun, + void* arg) { + Environment* env = Environment::GetCurrent(isolate); + CHECK_NOT_NULL(env); + auto info = std::make_shared(); + info->env = env; + info->fun = fun; + info->arg = arg; + info->self = info; + env->AddCleanupHook(RunAsyncCleanupHook, info.get()); + return AsyncCleanupHookHandle(new ACHHandle { info }); +} + +void RemoveEnvironmentCleanupHook( + AsyncCleanupHookHandle handle) { + if (handle->info->started) return; + handle->info->self.reset(); + handle->info->env->RemoveCleanupHook(RunAsyncCleanupHook, handle->info.get()); +} + async_id AsyncHooksGetExecutionAsyncId(Isolate* isolate) { Environment* env = Environment::GetCurrent(isolate); if (env == nullptr) return -1; diff -Nru nodejs-mozilla-12.18.1/src/async_wrap.cc nodejs-mozilla-12.22.12/src/async_wrap.cc --- nodejs-mozilla-12.18.1/src/async_wrap.cc 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/async_wrap.cc 2022-04-05 07:17:03.000000000 +0000 @@ -419,7 +419,7 @@ // then the checks in push_async_ids() and pop_async_id() will. double async_id = args[0]->NumberValue(env->context()).FromJust(); double trigger_async_id = args[1]->NumberValue(env->context()).FromJust(); - env->async_hooks()->push_async_context(async_id, trigger_async_id, args[2]); + env->async_hooks()->push_async_context(async_id, trigger_async_id, {}); } @@ -430,6 +430,22 @@ } +void AsyncWrap::ExecutionAsyncResource( + const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + uint32_t index; + if (!args[0]->Uint32Value(env->context()).To(&index)) return; + args.GetReturnValue().Set( + env->async_hooks()->native_execution_async_resource(index)); +} + + +void AsyncWrap::ClearAsyncIdStack(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + env->async_hooks()->clear_async_id_stack(); +} + + void AsyncWrap::AsyncReset(const FunctionCallbackInfo& args) { CHECK(args[0]->IsObject()); @@ -451,11 +467,15 @@ } -void AsyncWrap::EmitDestroy() { +void AsyncWrap::EmitDestroy(bool from_gc) { AsyncWrap::EmitDestroy(env(), async_id_); // Ensure no double destroy is emitted via AsyncReset(). async_id_ = kInvalidAsyncId; - resource_.Reset(); + + if (!persistent().IsEmpty() && !from_gc) { + HandleScope handle_scope(env()->isolate()); + USE(object()->Set(env()->context(), env()->resource_symbol(), object())); + } } void AsyncWrap::QueueDestroyAsyncId(const FunctionCallbackInfo& args) { @@ -465,11 +485,20 @@ args[0].As()->Value()); } +void AsyncWrap::SetCallbackTrampoline(const FunctionCallbackInfo& args) { + Environment* env = Environment::GetCurrent(args); + + CHECK(args[0]->IsFunction()); + + env->set_async_hooks_callback_trampoline(args[0].As()); +} + Local AsyncWrap::GetConstructorTemplate(Environment* env) { Local tmpl = env->async_wrap_ctor_template(); if (tmpl.IsEmpty()) { tmpl = env->NewFunctionTemplate(nullptr); tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "AsyncWrap")); + tmpl->Inherit(BaseObject::GetConstructorTemplate(env)); env->SetProtoMethod(tmpl, "getAsyncId", AsyncWrap::GetAsyncId); env->SetProtoMethod(tmpl, "asyncReset", AsyncWrap::AsyncReset); env->SetProtoMethod(tmpl, "getProviderType", AsyncWrap::GetProviderType); @@ -487,8 +516,11 @@ HandleScope scope(isolate); env->SetMethod(target, "setupHooks", SetupHooks); + env->SetMethod(target, "setCallbackTrampoline", SetCallbackTrampoline); env->SetMethod(target, "pushAsyncContext", PushAsyncContext); env->SetMethod(target, "popAsyncContext", PopAsyncContext); + env->SetMethod(target, "executionAsyncResource", ExecutionAsyncResource); + env->SetMethod(target, "clearAsyncIdStack", ClearAsyncIdStack); env->SetMethod(target, "queueDestroyAsyncId", QueueDestroyAsyncId); env->SetMethod(target, "enablePromiseHook", EnablePromiseHook); env->SetMethod(target, "disablePromiseHook", DisablePromiseHook); @@ -527,16 +559,12 @@ FORCE_SET_TARGET_FIELD(target, "execution_async_resources", - env->async_hooks()->execution_async_resources()); + env->async_hooks()->js_execution_async_resources()); target->Set(context, env->async_ids_stack_string(), env->async_hooks()->async_ids_stack().GetJSArray()).Check(); - target->Set(context, - FIXED_ONE_BYTE_STRING(env->isolate(), "owner_symbol"), - env->owner_symbol()).Check(); - Local constants = Object::New(isolate); #define SET_HOOKS_CONSTANT(name) \ FORCE_SET_TARGET_FIELD( \ @@ -553,6 +581,7 @@ SET_HOOKS_CONSTANT(kTriggerAsyncId); SET_HOOKS_CONSTANT(kAsyncIdCounter); SET_HOOKS_CONSTANT(kDefaultTriggerAsyncId); + SET_HOOKS_CONSTANT(kUsesExecutionAsyncResource); SET_HOOKS_CONSTANT(kStackLength); #undef SET_HOOKS_CONSTANT FORCE_SET_TARGET_FIELD(target, "constants", constants); @@ -632,7 +661,7 @@ AsyncWrap::~AsyncWrap() { EmitTraceEventDestroy(); - EmitDestroy(); + EmitDestroy(true /* from gc */); } void AsyncWrap::EmitTraceEventDestroy() { @@ -657,7 +686,19 @@ } if (env->destroy_async_id_list()->empty()) { - env->SetUnrefImmediate(&DestroyAsyncIdsCallback); + env->SetImmediate(&DestroyAsyncIdsCallback, CallbackFlags::kUnrefed); + } + + // If the list gets very large empty it faster using a Microtask. + // Microtasks can't be added in GC context therefore we use an + // interrupt to get this Microtask scheduled as fast as possible. + if (env->destroy_async_id_list()->size() == 16384) { + env->RequestInterrupt([](Environment* env) { + env->isolate()->EnqueueMicrotask( + [](void* arg) { + DestroyAsyncIdsCallback(static_cast(arg)); + }, env); + }); } env->destroy_async_id_list()->push_back(async_id); @@ -682,10 +723,13 @@ : execution_async_id; trigger_async_id_ = env()->get_default_trigger_async_id(); - if (resource != object()) { - // TODO(addaleax): Using a strong reference here makes it very easy to - // introduce memory leaks. Move away from using a strong reference. - resource_.Reset(env()->isolate(), resource); + { + HandleScope handle_scope(env()->isolate()); + Local obj = object(); + CHECK(!obj.IsEmpty()); + if (resource != obj) { + USE(obj->Set(env()->context(), env()->resource_symbol(), resource)); + } } switch (provider_type()) { @@ -755,7 +799,7 @@ ProviderType provider = provider_type(); async_context context { get_async_id(), get_trigger_async_id() }; MaybeLocal ret = InternalMakeCallback( - env(), GetResource(), object(), cb, argc, argv, context); + env(), object(), object(), cb, argc, argv, context); // This is a static call with cached values because the `this` object may // no longer be alive at this point. @@ -794,14 +838,6 @@ } } -Local AsyncWrap::GetResource() { - if (resource_.IsEmpty()) { - return object(); - } - - return resource_.Get(env()->isolate()); -} - } // namespace node NODE_MODULE_CONTEXT_AWARE_INTERNAL(async_wrap, node::AsyncWrap::Initialize) diff -Nru nodejs-mozilla-12.18.1/src/async_wrap.h nodejs-mozilla-12.22.12/src/async_wrap.h --- nodejs-mozilla-12.18.1/src/async_wrap.h 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/async_wrap.h 2022-04-05 07:17:03.000000000 +0000 @@ -51,6 +51,7 @@ V(HTTPINCOMINGMESSAGE) \ V(HTTPCLIENTREQUEST) \ V(JSSTREAM) \ + V(JSUDPWRAP) \ V(MESSAGEPORT) \ V(PIPECONNECTWRAP) \ V(PIPESERVERWRAP) \ @@ -136,10 +137,16 @@ static void GetAsyncId(const v8::FunctionCallbackInfo& args); static void PushAsyncContext(const v8::FunctionCallbackInfo& args); static void PopAsyncContext(const v8::FunctionCallbackInfo& args); + static void ExecutionAsyncResource( + const v8::FunctionCallbackInfo& args); + static void ClearAsyncIdStack( + const v8::FunctionCallbackInfo& args); static void AsyncReset(const v8::FunctionCallbackInfo& args); static void GetProviderType(const v8::FunctionCallbackInfo& args); static void QueueDestroyAsyncId( const v8::FunctionCallbackInfo& args); + static void SetCallbackTrampoline( + const v8::FunctionCallbackInfo& args); static void EmitAsyncInit(Environment* env, v8::Local object, @@ -152,7 +159,7 @@ static void EmitAfter(Environment* env, double async_id); static void EmitPromiseResolve(Environment* env, double async_id); - void EmitDestroy(); + void EmitDestroy(bool from_gc = false); void EmitTraceEventBefore(); static void EmitTraceEventAfter(ProviderType type, double async_id); @@ -199,7 +206,6 @@ v8::Local obj); bool IsDoneInitializing() const override; - v8::Local GetResource(); private: friend class PromiseWrap; @@ -214,7 +220,6 @@ // Because the values may be Reset(), cannot be made const. double async_id_ = kInvalidAsyncId; double trigger_async_id_; - v8::Global resource_; }; } // namespace node diff -Nru nodejs-mozilla-12.18.1/src/base64.h nodejs-mozilla-12.22.12/src/base64.h --- nodejs-mozilla-12.18.1/src/base64.h 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/base64.h 2022-04-05 07:17:03.000000000 +0000 @@ -11,37 +11,26 @@ namespace node { //// Base 64 //// static inline constexpr size_t base64_encoded_size(size_t size) { - return ((size + 2 - ((size + 2) % 3)) / 3 * 4); + return ((size + 2) / 3 * 4); } // Doesn't check for padding at the end. Can be 1-2 bytes over. -static inline size_t base64_decoded_size_fast(size_t size) { - size_t remainder = size % 4; - - size = (size / 4) * 3; - if (remainder) { - if (size == 0 && remainder == 1) { - // special case: 1-byte input cannot be decoded - size = 0; - } else { - // non-padded input, add 1 or 2 extra bytes - size += 1 + (remainder == 3); - } - } - - return size; +static inline constexpr size_t base64_decoded_size_fast(size_t size) { + // 1-byte input cannot be decoded + return size > 1 ? (size / 4) * 3 + (size % 4 + 1) / 2 : 0; } template size_t base64_decoded_size(const TypeName* src, size_t size) { - if (size == 0) + // 1-byte input cannot be decoded + if (size < 2) return 0; - if (src[size - 1] == '=') + if (src[size - 1] == '=') { size--; - if (size > 0 && src[size - 1] == '=') - size--; - + if (src[size - 1] == '=') + size--; + } return base64_decoded_size_fast(size); } @@ -166,25 +155,22 @@ k += 4; } - if (n != slen) { - switch (slen - n) { - case 1: - a = src[i + 0] & 0xff; - dst[k + 0] = table[a >> 2]; - dst[k + 1] = table[(a & 3) << 4]; - dst[k + 2] = '='; - dst[k + 3] = '='; - break; - - case 2: - a = src[i + 0] & 0xff; - b = src[i + 1] & 0xff; - dst[k + 0] = table[a >> 2]; - dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; - dst[k + 2] = table[(b & 0x0f) << 2]; - dst[k + 3] = '='; - break; - } + switch (slen - n) { + case 1: + a = src[i + 0] & 0xff; + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[(a & 3) << 4]; + dst[k + 2] = '='; + dst[k + 3] = '='; + break; + case 2: + a = src[i + 0] & 0xff; + b = src[i + 1] & 0xff; + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; + dst[k + 2] = table[(b & 0x0f) << 2]; + dst[k + 3] = '='; + break; } return dlen; diff -Nru nodejs-mozilla-12.18.1/src/base_object.h nodejs-mozilla-12.22.12/src/base_object.h --- nodejs-mozilla-12.18.1/src/base_object.h 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/base_object.h 2022-04-05 07:17:03.000000000 +0000 @@ -24,9 +24,9 @@ #if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS +#include // std::remove_reference #include "memory_tracker.h" #include "v8.h" -#include // std::remove_reference namespace node { @@ -34,6 +34,10 @@ template class BaseObjectPtrImpl; +namespace worker { +class TransferData; +} + class BaseObject : public MemoryRetainer { public: enum InternalFields { kSlot, kInternalFieldCount }; @@ -84,7 +88,7 @@ template static void InternalFieldGet(v8::Local property, const v8::PropertyCallbackInfo& info); - template + template static void InternalFieldSet(v8::Local property, v8::Local value, const v8::PropertyCallbackInfo& info); @@ -98,11 +102,56 @@ // a BaseObjectPtr to this object. inline void Detach(); - protected: + static v8::Local GetConstructorTemplate( + Environment* env); + + // Interface for transferring BaseObject instances using the .postMessage() + // method of MessagePorts (and, by extension, Workers). + // GetTransferMode() returns a transfer mode that indicates how to deal with + // the current object: + // - kUntransferable: + // No transfer is possible, either because this type of BaseObject does + // not know how to be transfered, or because it is not in a state in + // which it is possible to do so (e.g. because it has already been + // transfered). + // - kTransferable: + // This object can be transfered in a destructive fashion, i.e. will be + // rendered unusable on the sending side of the channel in the process + // of being transfered. (In C++ this would be referred to as movable but + // not copyable.) Objects of this type need to be listed in the + // `transferList` argument of the relevant postMessage() call in order to + // make sure that they are not accidentally destroyed on the sending side. + // TransferForMessaging() will be called to get a representation of the + // object that is used for subsequent deserialization. + // The NestedTransferables() method can be used to transfer other objects + // along with this one, if a situation requires it. + // - kCloneable: + // This object can be cloned without being modified. + // CloneForMessaging() will be called to get a representation of the + // object that is used for subsequent deserialization, unless the + // object is listed in transferList, in which case TransferForMessaging() + // is attempted first. + // After a successful clone, FinalizeTransferRead() is called on the receiving + // end, and can read deserialize JS data possibly serialized by a previous + // FinalizeTransferWrite() call. + enum class TransferMode { + kUntransferable, + kTransferable, + kCloneable + }; + virtual TransferMode GetTransferMode() const; + virtual std::unique_ptr TransferForMessaging(); + virtual std::unique_ptr CloneForMessaging() const; + virtual v8::Maybe>> + NestedTransferables() const; + virtual v8::Maybe FinalizeTransferRead( + v8::Local context, v8::ValueDeserializer* deserializer); + virtual inline void OnGCCollect(); private: v8::Local WrappedObject() const override; + bool IsRootNode() const override; static void DeleteMe(void* data); // persistent_handle_ needs to be at a fixed offset from the start of the @@ -156,13 +205,11 @@ return BaseObject::FromJSObject(obj); } - -#define ASSIGN_OR_RETURN_UNWRAP(ptr, obj, ...) \ - do { \ - *ptr = static_cast::type>( \ - BaseObject::FromJSObject(obj)); \ - if (*ptr == nullptr) \ - return __VA_ARGS__; \ +#define ASSIGN_OR_RETURN_UNWRAP(ptr, obj, ...) \ + do { \ + *ptr = static_cast::type>( \ + BaseObject::FromJSObject(obj)); \ + if (*ptr == nullptr) return __VA_ARGS__; \ } while (0) // Implementation of a generic strong or weak pointer to a BaseObject. @@ -196,9 +243,14 @@ inline T* operator->() const; inline operator bool() const; + template + inline bool operator ==(const BaseObjectPtrImpl& other) const; + template + inline bool operator !=(const BaseObjectPtrImpl& other) const; + private: union { - BaseObject* target; // Used for strong pointers. + BaseObject* target; // Used for strong pointers. BaseObject::PointerData* pointer_data; // Used for weak pointers. } data_; diff -Nru nodejs-mozilla-12.18.1/src/base_object-inl.h nodejs-mozilla-12.22.12/src/base_object-inl.h --- nodejs-mozilla-12.18.1/src/base_object-inl.h 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/base_object-inl.h 2022-04-05 07:17:03.000000000 +0000 @@ -155,6 +155,7 @@ }; v8::Local t = env->NewFunctionTemplate(constructor); + t->Inherit(BaseObject::GetConstructorTemplate(env)); t->InstanceTemplate()->SetInternalFieldCount( BaseObject::kInternalFieldCount); return t; @@ -216,20 +217,22 @@ BaseObjectPtrImpl::pointer_data() const { if (kIsWeak) { return data_.pointer_data; - } else { - if (get_base_object() == nullptr) return nullptr; - return get_base_object()->pointer_data(); } + if (get_base_object() == nullptr) { + return nullptr; + } + return get_base_object()->pointer_data(); } template BaseObject* BaseObjectPtrImpl::get_base_object() const { if (kIsWeak) { - if (pointer_data() == nullptr) return nullptr; + if (pointer_data() == nullptr) { + return nullptr; + } return pointer_data()->self; - } else { - return data_.target; } + return data_.target; } template @@ -334,6 +337,20 @@ return get() != nullptr; } +template +template +bool BaseObjectPtrImpl::operator ==( + const BaseObjectPtrImpl& other) const { + return get() == other.get(); +} + +template +template +bool BaseObjectPtrImpl::operator !=( + const BaseObjectPtrImpl& other) const { + return get() != other.get(); +} + template BaseObjectPtr MakeBaseObject(Args&&... args) { return BaseObjectPtr(new T(std::forward(args)...)); diff -Nru nodejs-mozilla-12.18.1/src/callback_queue.h nodejs-mozilla-12.22.12/src/callback_queue.h --- nodejs-mozilla-12.18.1/src/callback_queue.h 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/callback_queue.h 2022-04-05 07:17:03.000000000 +0000 @@ -7,6 +7,13 @@ namespace node { +namespace CallbackFlags { +enum Flags { + kUnrefed = 0, + kRefed = 1, +}; +} + // A queue of C++ functions that take Args... as arguments and return R // (this is similar to the signature of std::function). // New entries are added using `CreateCallback()`/`Push()`, and removed using @@ -18,25 +25,26 @@ public: class Callback { public: - explicit inline Callback(bool refed); + explicit inline Callback(CallbackFlags::Flags flags); virtual ~Callback() = default; virtual R Call(Args... args) = 0; - inline bool is_refed() const; + inline CallbackFlags::Flags flags() const; private: inline std::unique_ptr get_next(); inline void set_next(std::unique_ptr next); - bool refed_; + CallbackFlags::Flags flags_; std::unique_ptr next_; friend class CallbackQueue; }; template - inline std::unique_ptr CreateCallback(Fn&& fn, bool refed); + inline std::unique_ptr CreateCallback( + Fn&& fn, CallbackFlags::Flags); inline std::unique_ptr Shift(); inline void Push(std::unique_ptr cb); @@ -51,7 +59,7 @@ template class CallbackImpl final : public Callback { public: - CallbackImpl(Fn&& callback, bool refed); + CallbackImpl(Fn&& callback, CallbackFlags::Flags flags); R Call(Args... args) override; private: diff -Nru nodejs-mozilla-12.18.1/src/callback_queue-inl.h nodejs-mozilla-12.22.12/src/callback_queue-inl.h --- nodejs-mozilla-12.18.1/src/callback_queue-inl.h 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/callback_queue-inl.h 2022-04-05 07:17:03.000000000 +0000 @@ -10,8 +10,8 @@ template template std::unique_ptr::Callback> -CallbackQueue::CreateCallback(Fn&& fn, bool refed) { - return std::make_unique>(std::move(fn), refed); +CallbackQueue::CreateCallback(Fn&& fn, CallbackFlags::Flags flags) { + return std::make_unique>(std::move(fn), flags); } template @@ -22,8 +22,8 @@ head_ = ret->get_next(); if (!head_) tail_ = nullptr; // The queue is now empty. + size_--; } - size_--; return ret; } @@ -57,12 +57,12 @@ } template -CallbackQueue::Callback::Callback(bool refed) - : refed_(refed) {} +CallbackQueue::Callback::Callback(CallbackFlags::Flags flags) + : flags_(flags) {} template -bool CallbackQueue::Callback::is_refed() const { - return refed_; +CallbackFlags::Flags CallbackQueue::Callback::flags() const { + return flags_; } template @@ -80,8 +80,8 @@ template template CallbackQueue::CallbackImpl::CallbackImpl( - Fn&& callback, bool refed) - : Callback(refed), + Fn&& callback, CallbackFlags::Flags flags) + : Callback(flags), callback_(std::move(callback)) {} template diff -Nru nodejs-mozilla-12.18.1/src/cares_wrap.cc nodejs-mozilla-12.22.12/src/cares_wrap.cc --- nodejs-mozilla-12.18.1/src/cares_wrap.cc 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/cares_wrap.cc 2022-04-05 07:17:03.000000000 +0000 @@ -39,17 +39,13 @@ # include #endif // __POSIX__ -#if defined(__ANDROID__) || \ - defined(__MINGW32__) || \ - defined(__OpenBSD__) || \ - defined(_MSC_VER) - -# include -#else -# include -#endif +# include -#if defined(__OpenBSD__) +// OpenBSD does not define these +#ifndef AI_ALL +# define AI_ALL 0 +#endif +#ifndef AI_V4MAPPED # define AI_V4MAPPED 0 #endif @@ -65,8 +61,11 @@ using v8::Int32; using v8::Integer; using v8::Isolate; +using v8::Just; using v8::Local; +using v8::Maybe; using v8::NewStringType; +using v8::Nothing; using v8::Null; using v8::Object; using v8::String; @@ -152,7 +151,7 @@ class ChannelWrap : public AsyncWrap { public: - ChannelWrap(Environment* env, Local object); + ChannelWrap(Environment* env, Local object, int timeout); ~ChannelWrap() override; static void New(const FunctionCallbackInfo& args); @@ -190,18 +189,21 @@ bool query_last_ok_; bool is_servers_default_; bool library_inited_; + int timeout_; int active_query_count_; node_ares_task_list task_list_; }; ChannelWrap::ChannelWrap(Environment* env, - Local object) + Local object, + int timeout) : AsyncWrap(env, object, PROVIDER_DNSCHANNEL), timer_handle_(nullptr), channel_(nullptr), query_last_ok_(true), is_servers_default_(true), library_inited_(false), + timeout_(timeout), active_query_count_(0) { MakeWeak(); @@ -210,10 +212,11 @@ void ChannelWrap::New(const FunctionCallbackInfo& args) { CHECK(args.IsConstructCall()); - CHECK_EQ(args.Length(), 0); - + CHECK_EQ(args.Length(), 1); + CHECK(args[0]->IsInt32()); + const int timeout = args[0].As()->Value(); Environment* env = Environment::GetCurrent(args); - new ChannelWrap(env, args.This()); + new ChannelWrap(env, args.This(), timeout); } class GetAddrInfoReqWrap : public ReqWrap { @@ -462,6 +465,7 @@ options.flags = ARES_FLAG_NOCHECKRESP; options.sock_state_cb = ares_sockstate_cb; options.sock_state_cb_data = this; + options.timeout = timeout_; int r; if (!library_inited_) { @@ -474,9 +478,9 @@ } /* We do the call to ares_init_option for caller. */ - r = ares_init_options(&channel_, - &options, - ARES_OPT_FLAGS | ARES_OPT_SOCK_STATE_CB); + const int optmask = + ARES_OPT_FLAGS | ARES_OPT_TIMEOUTMS | ARES_OPT_SOCK_STATE_CB; + r = ares_init_options(&channel_, &options, optmask); if (r != ARES_SUCCESS) { Mutex::ScopedLock lock(ares_library_mutex); @@ -495,7 +499,10 @@ } else if (uv_is_active(reinterpret_cast(timer_handle_))) { return; } - uv_timer_start(timer_handle_, AresTimeout, 1000, 1000); + int timeout = timeout_; + if (timeout == 0) timeout = 1; + if (timeout < 0 || timeout > 1000) timeout = 1000; + uv_timer_start(timer_handle_, AresTimeout, timeout, timeout); } void ChannelWrap::CloseTimer() { @@ -1059,29 +1066,31 @@ // Can't use ares_parse_soa_reply() here which can only parse single record const unsigned int ancount = cares_get_16bit(buf + 6); unsigned char* ptr = buf + NS_HFIXEDSZ; - char* name_temp; + char* name_temp = nullptr; long temp_len; // NOLINT(runtime/int) int status = ares_expand_name(ptr, buf, len, &name_temp, &temp_len); - const ares_unique_ptr name(name_temp); if (status != ARES_SUCCESS) { // returns EBADRESP in case of invalid input return status == ARES_EBADNAME ? ARES_EBADRESP : status; } + const ares_unique_ptr name(name_temp); + if (ptr + temp_len + NS_QFIXEDSZ > buf + len) { return ARES_EBADRESP; } ptr += temp_len + NS_QFIXEDSZ; for (unsigned int i = 0; i < ancount; i++) { - char* rr_name_temp; + char* rr_name_temp = nullptr; long rr_temp_len; // NOLINT(runtime/int) int status2 = ares_expand_name(ptr, buf, len, &rr_name_temp, &rr_temp_len); - const ares_unique_ptr rr_name(rr_name_temp); if (status2 != ARES_SUCCESS) return status2 == ARES_EBADNAME ? ARES_EBADRESP : status2; + const ares_unique_ptr rr_name(rr_name_temp); + ptr += rr_temp_len; if (ptr + NS_RRFIXEDSZ > buf + len) { return ARES_EBADRESP; @@ -1093,27 +1102,27 @@ // only need SOA if (rr_type == ns_t_soa) { - char* nsname_temp; + char* nsname_temp = nullptr; long nsname_temp_len; // NOLINT(runtime/int) int status3 = ares_expand_name(ptr, buf, len, &nsname_temp, &nsname_temp_len); - const ares_unique_ptr nsname(nsname_temp); if (status3 != ARES_SUCCESS) { return status3 == ARES_EBADNAME ? ARES_EBADRESP : status3; } + const ares_unique_ptr nsname(nsname_temp); ptr += nsname_temp_len; - char* hostmaster_temp; + char* hostmaster_temp = nullptr; long hostmaster_temp_len; // NOLINT(runtime/int) int status4 = ares_expand_name(ptr, buf, len, &hostmaster_temp, &hostmaster_temp_len); - const ares_unique_ptr hostmaster(hostmaster_temp); if (status4 != ARES_SUCCESS) { return status4 == ARES_EBADNAME ? ARES_EBADRESP : status4; } + const ares_unique_ptr hostmaster(hostmaster_temp); ptr += hostmaster_temp_len; if (ptr + 5 * 4 > buf + len) { @@ -1825,7 +1834,7 @@ if (status == 0) { Local results = Array::New(env->isolate()); - auto add = [&] (bool want_ipv4, bool want_ipv6) { + auto add = [&] (bool want_ipv4, bool want_ipv6) -> Maybe { for (auto p = res; p != nullptr; p = p->ai_next) { CHECK_EQ(p->ai_socktype, SOCK_STREAM); @@ -1845,14 +1854,19 @@ continue; Local s = OneByteString(env->isolate(), ip); - results->Set(env->context(), n, s).Check(); + if (results->Set(env->context(), n, s).IsNothing()) + return Nothing(); n++; } + return Just(true); }; - add(true, verbatim); - if (verbatim == false) - add(false, true); + if (add(true, verbatim).IsNothing()) + return; + if (verbatim == false) { + if (add(false, true).IsNothing()) + return; + } // No responses were found to return if (n == 0) { diff -Nru nodejs-mozilla-12.18.1/src/env.cc nodejs-mozilla-12.22.12/src/env.cc --- nodejs-mozilla-12.18.1/src/env.cc 2020-06-17 01:25:39.000000000 +0000 +++ nodejs-mozilla-12.22.12/src/env.cc 2022-04-05 07:17:03.000000000 +0000 @@ -26,7 +26,6 @@ namespace node { using errors::TryCatchScope; -using v8::ArrayBuffer; using v8::Boolean; using v8::Context; using v8::EmbedderGraph; @@ -42,11 +41,13 @@ using v8::Number; using v8::Object; using v8::Private; +using v8::Script; using v8::SnapshotCreator; using v8::StackTrace; using v8::String; using v8::Symbol; using v8::TracingController; +using v8::TryCatch; using v8::Undefined; using v8::Value; using worker::Worker; @@ -258,17 +259,12 @@ USE(cb->Call(env_->context(), Undefined(isolate), arraysize(args), args)); } -static std::atomic next_thread_id{0}; - -uint64_t Environment::AllocateThreadId() { - return next_thread_id++; -} - void Environment::CreateProperties() { HandleScope handle_scope(isolate_); Local ctx = context(); Local templ = FunctionTemplate::New(isolate()); templ->InstanceTemplate()->SetInternalFieldCount(1); + templ->Inherit(BaseObject::GetConstructorTemplate(this)); Local obj = templ->GetFunction(ctx) .ToLocalChecked() ->NewInstance(ctx) @@ -320,8 +316,8 @@ Local context, const std::vector& args, const std::vector& exec_args, - Flags flags, - uint64_t thread_id) + EnvironmentFlags::Flags flags, + ThreadId thread_id) : isolate_(context->GetIsolate()), isolate_data_(isolate_data), immediate_info_(context->GetIsolate()), @@ -333,7 +329,8 @@ should_abort_on_uncaught_toggle_(isolate_, 1), stream_base_state_(isolate_, StreamBase::kNumStreamBaseStateFields), flags_(flags), - thread_id_(thread_id == kNoThreadId ? AllocateThreadId() : thread_id), + thread_id_(thread_id.id == static_cast(-1) ? + AllocateEnvironmentThreadId().id : thread_id.id), fs_stats_field_array_(isolate_, kFsStatsBufferLength), fs_stats_field_bigint_array_(isolate_, kFsStatsBufferLength), context_(context->GetIsolate(), context) { @@ -341,6 +338,14 @@ HandleScope handle_scope(isolate()); Context::Scope context_scope(context); + // Set some flags if only kDefaultFlags was passed. This can make API version + // transitions easier for embedders. + if (flags_ & EnvironmentFlags::kDefaultFlags) { + flags_ = flags_ | + EnvironmentFlags::kOwnsProcessState | + EnvironmentFlags::kOwnsInspector; + } + set_env_vars(per_process::system_environment); enabled_debug_list_.Parse(this); @@ -352,6 +357,10 @@ inspector_host_port_.reset( new ExclusiveAccess(options_->debug_options().host_port)); + if (!(flags_ & EnvironmentFlags::kOwnsProcessState)) { + set_abort_on_uncaught_exception(false); + } + #if HAVE_INSPECTOR // We can only create the inspector agent after having cloned the options. inspector_agent_ = std::make_unique(this); @@ -359,6 +368,10 @@ AssignToContext(context, ContextInfo("")); + static uv_once_t init_once = UV_ONCE_INIT; + uv_once(&init_once, InitThreadLocalOnce); + uv_key_set(&thread_local_env, this); + if (tracing::AgentWriterHandle* writer = GetTracingAgentWriter()) { trace_state_observer_ = std::make_unique(this); if (TracingController* tracing_controller = writer->GetTracingController()) @@ -366,13 +379,6 @@ } destroy_async_id_list_.reserve(512); - BeforeExit( - [](void* arg) { - Environment* env = static_cast(arg); - if (!env->destroy_async_id_list()->empty()) - AsyncWrap::DestroyAsyncIdsCallback(env); - }, - this); performance_state_ = std::make_unique(isolate()); @@ -413,7 +419,30 @@ } Environment::~Environment() { - if (interrupt_data_ != nullptr) *interrupt_data_ = nullptr; + if (Environment** interrupt_data = interrupt_data_.load()) { + // There are pending RequestInterrupt() callbacks. Tell them not to run, + // then force V8 to run interrupts by compiling and running an empty script + // so as not to leak memory. + *interrupt_data = nullptr; + + Isolate::AllowJavascriptExecutionScope allow_js_here(isolate()); + HandleScope handle_scope(isolate()); + TryCatch try_catch(isolate()); + Context::Scope context_scope(context()); + +#ifdef DEBUG + bool consistency_check = false; + isolate()->RequestInterrupt([](Isolate*, void* data) { + *static_cast(data) = true; + }, &consistency_check); +#endif + + Local